プロセス常駐の予算
Windows ディスプレイ ドライバー モデル (WDDM) v2 では、プロセスには、常駐状態を維持できるメモリ量の予算が割り当てられます。 この予算は時間の経過と同時に変化する可能性がありますが、通常はシステムがメモリ不足の場合にのみ適用されます。 Microsoft Direct3D 12 より前では、予算はユーザー モード ドライバーによって Trim 通知と STATUS_NO_MEMORY による MakeResident エラーの形式で処理されます。 TrimToBudget 通知、Evict、および失敗した MakeResident 呼び出しはすべて、新しい予算に収まるようにトリミングする必要がある量を示す整数 NumBytesToTrim 値の形式で最新の予算を返します。
Direct3D 12 アプリケーションの場合、予算はアプリケーションによって完全に処理されます。 予算のサイズは、アプリケーションが自身のサイズを知らせるキューとして使用されます。 予算サイズをヒントとして使用することで、アプリケーションは常駐を維持するリソースの数、保持するリソースの解像度と品質を決定できます。
これらの予算を適切に管理するには、カーネルが予算に参加する必要があるメモリを把握する必要があります。 DXGK_SEGMENTFLAGS2 構造体には、カーネル モード ドライバーが予算作成ロジックに含めたいセグメントに対して設定する必要がある新しい ApplicationTarget ビット があります。 たとえば、アプリケーションの使用に適した VRAM のセグメントが 1 つあり、特別な目的のリソースに自動的に使用される 1 つの VRAM セグメントがあるディスクリート グラフィックス処理装置 (GPU) では、ドライバーはプライマリ VRAM セグメントのみを ApplicationTarget としてマークする可能性があります。 統合 GPU の場合、通常、メイン開口セグメントがマークされます。 ApplicationTarget としてマークできるセグメントの数に制限はありません。 カーネルはこれらを集約し、統合されたサイズでアプリケーションを提示します。