DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 構造体 (d3dkmddi.h)

DXGK_ALLOCATIONINFOFLAGS_WDDM2_0構造体は、割り当てのプロパティを識別します。

構文

typedef struct _DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT DisableLargePageMapping : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT CreateInVpr : 1;
      UINT Reserved00 : 1;
      UINT DXGK_ALLOC_RESERVED17 : 1;
      UINT Reserved02 : 1;
      UINT MapApertureCpuVisible : 1;
      UINT Reserved03 : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      UINT DXGK_ALLOC_RESERVED16 : 1;
      UINT DXGK_ALLOC_RESERVED15 : 1;
      UINT DXGK_ALLOC_RESERVED14 : 1;
      UINT DXGK_ALLOC_RESERVED13 : 1;
      UINT DXGK_ALLOC_RESERVED12 : 1;
      UINT DXGK_ALLOC_RESERVED11 : 1;
      UINT DXGK_ALLOC_RESERVED10 : 1;
      UINT DXGK_ALLOC_RESERVED9 : 1;
      UINT DXGK_ALLOC_RESERVED4 : 1;
      UINT DXGK_ALLOC_RESERVED3 : 1;
      UINT DXGK_ALLOC_RESERVED2 : 1;
      UINT DXGK_ALLOC_RESERVED1 : 1;
      UINT DXGK_ALLOC_RESERVED0 : 1;
    };
    UINT Value;
  };
} DXGK_ALLOCATIONINFOFLAGS_WDDM2_0;

メンバー

CpuVisible

[out]割り当てが CPU から直接アクセスできるかどうかを指定する UINT 値。 ディスプレイ ミニポート ドライバーは、割り当て時に pfnLockCb 関数を正常に呼び出すために、ユーザー モードディスプレイ ドライバーのこのフラグを設定する必要があります。 このフラグが割り当てに設定されていない場合、 pfnLockCb はエラーを返します。

共有割り当てを作成したプロセスだけが、その割り当てをロックできることに注意してください。

このメンバーの設定は、32 ビット Value メンバーの最初のビット (0x00000001) を設定することと同じです。

PermanentSysMem

[out]コンテンツがメモリ セグメント内にある場合でも、割り当てのコピーをシステム メモリに保持するかどうかを指定する UINT 値。 既定では、メモリ セグメントに割り当てを転送すると、サーフェス システムのメモリ バッキング ストアが失われます。 PermanentSysMem フラグが指定され、割り当てがメモリ セグメントから削除されると、割り当ての内容は破棄され、割り当てがダーティされていない場合はページアウトされません (つまり、割り当ては、ページングされた後の書き込み操作のターゲットではありません)。

割り当て時に pfnLockCb を呼び出すと、割り当てのシステム メモリ バッキング ストアが常に返されます。 ユーザー モード ディスプレイ ドライバーが pfnUnlockCb を呼び出すときに割り当てがメモリ セグメント内にある場合、割り当てのメモリ セグメント リソースは新しいコンテンツで更新されます。 この更新プログラムは、 DxgkDdiBuildPagingBuffer 関数を介した通常のページング操作として、ディスプレイ ミニポート ドライバーに表示されます。 ディスプレイ ミニポート ドライバーがページング操作の領域の最小サイズまたは配置を必要とする場合は、この要件は、ロックされている領域に反映する必要があることに注意してください。 ドライバーが PermanentSysMem を設定する場合、ドライバーは CpuVisible メンバーも設定する必要があります。 ドライバーは、プライマリ サーフェイスに PermanentSysMem を設定することはできません。

このメンバーの設定は、32 ビット Value メンバー (0x00000002) の 2 番目のビットを設定することと同じです。

Cached

[out]割り当てバッキング ストアをキャッシュ メモリとして割り当てるかどうかを指定する UINT 値。既定では、割り当てバッキング ストアは書き込み結合メモリとして格納されます。 キャッシュに一貫性のないセグメント (メモリ セグメントや AGP セグメントなど) でキャッシュメモリ割り当てが使用されている場合、ビデオ メモリ マネージャーは、適切なタイミングでプロセッサのキャッシュからフラッシュすることで、割り当ての内容の一貫性を確保します。

ドライバーが Cached を設定し、 ExistingSysMem メンバーまたは ExistingKernelSysMem メンバーも設定すると、ドライバーは、既存のメモリがキャッシュ可能にマップされたことをビデオ メモリ マネージャーに示します。 既存のメモリがキャッシュ可能にマップされたが、ドライバーが キャッシュされた メンバーの設定に失敗した場合、ビデオ メモリ マネージャーはデータの一貫性を確保できず、破損が発生します。 ドライバーは、アプリケーションまたはユーザー モードのディスプレイ ドライバーによって読み取られる割り当ての キャッシュ されたメンバーを設定する必要があります。 ドライバーは、書き込み専用の割り当て用 にキャッシュされた メンバーを設定しないでください。

ドライバーがこのメンバーを設定する場合、ドライバーは CpuVisible メンバーも設定する必要があります。 ドライバーは、プライマリ サーフェイスに キャッシュを 設定することはできません。

このメンバーの設定は、32 ビット Value メンバー (0x00000004) の 3 番目のビットを設定することと同じです。

Protected

[out]アプリケーションによる直接 CPU アクセスから割り当てを保護するために、割り当てバッキング ストアをユーザー アドレス空間ではなくカーネル メモリに割り当てるかどうかを指定する UINT 値。 ドライバーは、PermanentSysMem、ExistingSysMem、または ExistingKernelSysMem メンバーと組み合わせてこのメンバーを設定することはできません。 ドライバーは、プライマリ サーフェイスで Protected を設定することはできません。

このメンバーの設定は、32 ビット Value メンバー (0x00000008) の 4 番目のビットを設定することと同じです。

ExistingSysMem

[out]ビデオ メモリ マネージャーが割り当てのバッキング ストアとして既存のシステム メモリ範囲を使用するかどうかを指定する UINT 値。 システム メモリ範囲は、割り当てのサイズに対する現在のプロセスの有効なユーザー モード アドレスである必要があります。 システム メモリの範囲もページアラインする必要があり、サイズが複数のページである必要があります。

システム メモリの範囲がキャッシュ可能な仮想アドレスの場合、ドライバーは 、割 り当てのキャッシュの一貫性を確保するためにビデオ メモリ マネージャーに通知するキャッシュされたメンバーを設定する必要があります。 Cached メンバーが指定されていない場合、ビデオ メモリ マネージャーは、システム メモリ範囲がキャッシュ不可能、書き込み結合、またはキャッシュ可能であると判断します。ただし、この状況では、ドライバーはキャッシュの一貫性を確保するか、キャッシュの一貫性が指定された使用の問題ではないことを判断します。

この種類の割り当ては、 PermanentSysMem メンバーが設定されている割り当てと同じロック セマンティクスを暗黙的に持ちます。

ドライバーは、PermanentSysMemProtected、または ExistingKernelSysMem メンバーと組み合わせて ExistingSysMem を設定できません。 ドライバーは、プライマリ サーフェイスに ExistingSysMem を設定することはできません。

このメンバーの設定は、32 ビット Value メンバー (0x00000010) の 5 番目のビットを設定することと同じです。

ExistingKernelSysMem

[out]ビデオ メモリ マネージャーが割り当てのバッキング ストアとして既存のシステム メモリ範囲を使用するかどうかを指定する UINT 値。 システム メモリの範囲は、ページと複数のサイズのページに配置された有効なカーネル モード アドレスである必要があります。

システム メモリの範囲がキャッシュ可能な仮想アドレスの場合、ドライバーは 、割 り当てのキャッシュの一貫性を確保するためにビデオ メモリ マネージャーに通知するキャッシュされたメンバーを設定する必要があります。 Cached メンバーが指定されていない場合、ビデオ メモリ マネージャーは、システム メモリ範囲がキャッシュ不可能、書き込み結合、またはキャッシュ可能であると判断します。ただし、この状況では、ドライバーはキャッシュの一貫性を確保するか、キャッシュの一貫性が指定された使用の問題ではないことを判断します。

この種類の割り当ては、 PermanentSysMem メンバーが設定されている割り当てと同じロック セマンティクスを暗黙的に持ちます。

ドライバーは、PermanentSysMemProtected、または ExistingSysMem メンバーと組み合わせて ExistingKernelSysMem を設定できません。 ドライバーは、プライマリ サーフェイスに ExistingKernelSysMem を設定することはできません。

このメンバーの設定は、32 ビット Value メンバー (0x00000020) の 6 番目のビットを設定することと同じです。

FromEndOfSegment

[out]ページング中にセグメントの末尾から割り当てる必要があるかどうかを示す UINT 値。 ビデオ メモリ マネージャーは、セグメントのアドレス空間をスキャンし、セグメントの先頭からスキャンするのではなく、セグメントの末尾からの割り当ての領域を探します (これは既定の動作です)。 ただし、ヒントと優先されるセグメント情報は、このフラグよりも優先されます。

このメンバーの設定は、32 ビット Value メンバーの 7 番目のビット (0x00000040) を設定することと同じです。

DisableLargePageMapping

[out]割り当ての大きなページ マッピングを無効にするかどうかを指定する UINT 値。 WDDM2.1 以降では、ドライバーの大きなページのサポートが追加されました。 大きなページは、仮想アドレスを変換するときに使用されます。最下位レベルのページ テーブルは、レベル 0 のページ テーブルのカバレッジが等しい大きなページに置き換えられます。 このフラグは、これを無効にし、アドレス変換にページ テーブルを使用します。

このメンバーの設定は、32 ビット Value メンバー (0x00000080) の 8 番目のビットを設定することと同じです。

Overlay

[out]割り当てがオーバーレイ操作用かどうかを示す UINT 値。 オーバーレイ割り当てはメモリに固定され、タイムアウト検出と回復 (TDR) プロセス、プラグ アンド プレイ (PnP) 停止、またはレベル 3 の同期が発生しない限り、ビデオ メモリ マネージャーはそれらを削除できません。 レベル 3 の同期が行われる前に、オーバーレイは通常破棄されることに注意してください。 既定では、オーバーレイの割り当ては制限されており、セグメントの最後の 20% を超えることはできません。 オーバーレイ割り当てが絞りセグメントに割り当てられている場合、ディスプレイ ミニポート ドライバーは、その絞りセグメントを削除セグメントとして使用する他の割り当てのサイズをセグメント サイズの 80% に制限する必要があります。 ディスプレイ ミニポート ドライバーは、割り当てが割り当てのDXGK_ALLOCATIONINFO構造体の EvictionSegmentSet メンバー内のセグメントの適切なビットを指定することによって、削除にセグメントを使用できることを示します。 ディスプレイ ミニポート ドライバーが別の割り当てのサイズを制限しない場合、固定された割り当て (つまり、オーバーレイの割り当て) が削除に必要な領域を占有するため、ビデオ メモリ マネージャーはセグメントを介してその割り当てを削除できません。 この場合、削除される他の割り当ての内容が失われ、失われた割り当てを所有するアプリケーションは、その割り当てでレンダリングできなくなります。

このメンバーの設定は、32 ビット Value メンバーの 9 番目のビット (0x00000100) を設定することと同じです。

Capture

[out]割り当てがキャプチャ操作に使用されるかどうかを示す UINT 値。 キャプチャ割り当ては、オーバーレイ割り当てと同様にメモリにピン留めされます。 そのため、オーバーレイ割り当てに適用される問題は、割り当てのキャプチャにも適用されます。 これらの問題の詳細については、 Overlay フラグの説明を参照してください。 レベル 3 の同期が行われる前に、キャプチャは通常停止されることに注意してください。

このメンバーの設定は、32 ビット Value メンバー (0x00000200) の 10 ビットを設定することと同じです。

CreateInVpr

[out]ビデオで保護された範囲に割り当てを作成するかどうかを指定する UINT 値。 このメンバーは、WDDM バージョン >= WDDM 2.1 のハードウェア デジタル著作権管理 (DRM) に使用されます。

このメンバーの設定は、32 ビット Value メンバーの 11 番目のビット (0x00000400) を設定することと同じです。

Reserved00

[入力]WDDM 2.1 より前の WDDM バージョンの場合、このメンバーは予約されており、0 に設定する必要があります。

このメンバーの設定は、32 ビット Value メンバーの 11 番目のビット (0x00000400) を設定することと同じです。

DXGK_ALLOC_RESERVED17

[入力]このメンバーは予約されており、0 に設定する必要があります。

このメンバーの設定は、32 ビット Value メンバーの 12 番目のビット (0x00000800) を設定することと同じです。

Reserved02

[入力]このメンバーは予約されており、0 に設定する必要があります。

このメンバーの設定は、32 ビット Value メンバー (0x00001000) の 13 番目のビットを設定することと同じです。

MapApertureCpuVisible

[入力]を設定すると、ドライバーは、DXGK_OPERATION_MAP_APERTURE_SEGMENT2操作の DxgkDdiBuildPagingBuffer 呼び出し中にメモリへの CPU アクセスが必要であることを示します。 MapApertureCpuVisibleDxgkDdiBuildPagingBufferMapAperatureSegment2 機能の一部であるため、ドライバーはこのフィールドを使用 するために MapAperature2Supported DXGK_VIDMMCAPS 設定する必要があります。 MapAperature2Supported が設定されていないが、ドライバーで MapApertureCpuVisible が指定されている場合、DxgkDdiCreateAllocation の呼び出しは失敗します。 詳細については、「 IOMMU DMA の再マップ 」を参照してください。 Windows Server 2022 以降でサポートされています。

Reserved03

[入力]このメンバーは予約されており、0 に設定する必要があります。

HistoryBuffer

[out]ユーザー モード ディスプレイ ドライバーが履歴バッファーを割り当てるかどうかを指定する UINT 値。 ディスプレイ ミニポート ドライバーは、ユーザー モード ドライバーが履歴バッファーの作成と破棄を管理できることを示すために、このフラグを設定する必要があります。

ディスプレイ ミニポート ドライバーが HistoryBuffer を設定するときは、 CpuVisible フラグも設定する必要があります。 ドライバーがキャッシュコヒーレント絞りセグメントをサポートしている場合は、 キャッシュも設定する必要があり、他のすべてのメンバーを 0 に設定する必要があります。

このメンバーの設定は、32 ビット Value メンバーの 15 番目のビット (0x00004000) を設定することと同じです。

AccessedPhysically

カーネル モード ドライバーは、物理アドレスによってアクセスされる割り当てにフラグを設定します。 このような割り当ては、GPU メモリ セグメントから連続して割り当てられます。 システム メモリから割り当てられた場合、割り当ては連続しません。

このメンバーの設定は、32 ビット Value メンバー (0x00008000) の 16 番目のビットを設定することと同じです。

ExplicitResidencyNotification

このフラグを指定すると、割り当て所在地が変更 (削除、コミット) されると、ドライバーは NotifyResidency ページング バッファー操作を受け取ります。 フラグは、 AccessedPhysically フラグが設定されている場合にのみ設定できます。

このメンバーの設定は、32 ビット Value メンバー (0x00010000) の 17 ビットを設定することと同じです。

HardwareProtected

このメンバーが設定されると、割り当てにはハードウェア DRM に使用されるコンテンツが保持されます。

CpuVisibleOnDemand

このメンバーを設定すると、ビデオ メモリ マネージャーは、割り当て/ロック時に割り当てに仮想アドレスを割り当てようとします。 これにより、割り当てに永続的な仮想アドレスが含まれていないため、使用される仮想アドレス空間の量が減ります。 CpuVisible フラグと同様に動作します。これは、CPU から直接アクセスできる割り当てですが、永続的に割り当てられるのではなく、"オンデマンド" の仮想アドレスを取得するだけです。

DXGK_ALLOC_RESERVED16

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED15

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED14

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED13

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED12

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED11

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED10

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED9

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED4

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED3

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED2

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED1

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

DXGK_ALLOC_RESERVED0

[入力]このメンバーは予約済みであり、0 に設定する必要があります。

Value

[out]割り当てのプロパティを識別する 32 ビット値を保持できる、 DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 に含まれる共用体内のメンバー。

注釈

WDDM バージョン >= WDDM 2.0 を対象とするディスプレイ ミニポート ドライバーは、この構造体を使用して、ビデオ メモリ マネージャーにこれらのフラグを指定します。 WDDM 2.0 より前のバージョンの WDDM を対象とするドライバーでは 、DXGK_ALLOCATIONINFOFLAGSを使用する必要があります。

割り当てのプロパティを指定するには、32 ビット の Value メンバーでビットを設定するか、DXGK_ALLOCATIONINFOFLAGS構造体に含まれる共用体の構造体の個々 のメンバーを 設定します。

要件

要件
サポートされている最小のクライアント Windows 10
Header d3dkmddi.h (D3dkmddi.h を含む)

こちらもご覧ください

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb