D3DDDICB_LOCKFLAGS 構造体 (d3dukmdt.h)

D3DDDICB_LOCKFLAGS構造体は、割り当てをロックする方法を識別します。

構文

typedef struct _D3DDDICB_LOCKFLAGS {
  union {
    struct {
      UINT ReadOnly : 1;
      UINT WriteOnly : 1;
      UINT DonotWait : 1;
      UINT IgnoreSync : 1;
      UINT LockEntire : 1;
      UINT DonotEvict : 1;
      UINT AcquireAperture : 1;
      UINT Discard : 1;
      UINT NoExistingReference : 1;
      UINT UseAlternateVA : 1;
      UINT IgnoreReadSync : 1;
      UINT Reserved : 21;
    };
    UINT Value;
  };
} D3DDDICB_LOCKFLAGS;

メンバー

ReadOnly

ロックされた割り当てからのみ読み取ることができるかどうかを示す UINT 値。 このメンバーの設定は、32 ビット Value メンバーの最初のビット (0x00000001) を設定することと同じです。

WriteOnly

ロックされた割り当ての書き込みのみが可能かどうかを示す UINT 値。 このメンバーの設定は、32 ビット Value メンバー (0x00000002) の 2 番目のビットを設定することと同じです。

DonotWait

ビデオ メモリ マネージャーが割り当てのロックを待機するかどうかを指定する UINT 値。 このメンバーが設定されている場合、グラフィックス ハードウェアが割り当てを使用している場合、メモリ マネージャーは D3DERR_WASSTILLDRAWING を使用して pfnLockCb の呼び出しに失敗します。

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

IgnoreSync

グラフィックス ハードウェアが割り当てを使用しているかどうかをビデオ メモリ マネージャーがチェックするかどうかを指定する UINT 値。 このメンバーが設定されている場合、メモリ マネージャーはチェックしないでください。

IgnoreSync は、絞りセグメントに配置できる割り当てでのみ設定できます。 グラフィックス アダプターでキャッシュの一貫性がサポートされていない場合は、スウィズル割り当てまたはキャッシュされた割り当てでは設定できません。

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

LockEntire

単なるサブ領域ではなく、割り当て領域全体がロックされているかどうかを示す UINT 値。

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

DonotEvict

ロックを成功させるためにビデオ メモリ マネージャーが割り当てを削除する必要があるかどうかを指定する UINT 値。 このメンバーが設定されている場合、メモリ マネージャーは割り当てを削除しないでください。 ロック要求を処理するために割り当てを削除する必要がある場合、メモリ マネージャーは、D3DERR_NOTAVAILABLEを使用して pfnLockCb の呼び出しを失敗します。 すべてのデシズリングアパーチャが使い果たされている場合は、削除が必要になる場合があります。

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

AcquireAperture

ビデオ メモリ マネージャーがディスプレイ ミニポート ドライバーの DxgkDdiAcquireSwizzlingRange 関数を呼び出して、割り当ての絞り値を設定するかどうかを指定する UINT 値。

AcquireAperture を設定せずにロックされた割り当ては、AcquireAperture が設定された状態で再度ロックすることはできません。

アロケーションが絞りセグメントにのみ配置できる場合、AcquireAperture を設定できません。

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

Discard

ビデオ メモリ マネージャーが割り当ての名前を変更するか、複数バッファーにするかを指定する UINT 値。 割り当ての名前変更の詳細については、「割り当ての 名前変更の要求」を参照してください。

固定 割り当て、プライマリ割り当て、または共有割り当ての場合、破棄は無視されます。

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

NoExistingReference

ユーザー モードのディスプレイ ドライバーが現在、ロックされている割り当てのインスタンスへの参照をコマンド バッファーにキューに入れないかどうかを示す UINT 値。 ドライバーは、ビデオ メモリ マネージャーが破棄フラグのみを使用してロック要求に失敗し、ドライバーがカーネルに現在のコマンド バッファーをフラッシュした後、NoExistingReference メンバーを使用する必要があります。 ドライバーは、破棄と組み合わせて NoExistingReference を使用する必要があります。

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

UseAlternateVA

ディスプレイ ミニポート ドライバーが割り当ての現在のセグメントの場所とは異なる物理アドレスで割り当てをロックするか、以前に割り当てられたとは異なるメモリ フットプリントを持つ割り当てをロックできるかどうかを指定する UINT 値。 このフラグを指定すると、ディスプレイ ミニポート ドライバーは、割り当てが経由でアクセスできる物理アドレス範囲のベース アドレスとサイズを更新できます (DxgkDdiAcquireSwizzlingRange 関数の呼び出しでDXGKARG_ACQUIRESWIZZLINGRANGE構造体の RangeSize メンバーと CPUTranslatedAddress メンバーを更新します)。 このフラグを指定すると、ビデオ メモリ マネージャーは、割り当てバッキング ストアの仮想アドレスを使用するのではなく、ロック要求を処理する新しい仮想アドレスを割り当てようとします。 ただし、ビデオ メモリ マネージャーが新しい仮想アドレスを割り当てることができない場合、ロック要求は失敗します。

このフラグは、現在 AGP 以外の絞りセグメントにあるスウィズルまたはタイル割り当てをロックするためにも使用されます。 この種類のロックでは、ビデオ メモリ マネージャーは代替仮想アドレスを物理的なアドレス範囲にマップします。この範囲は、その場で取り消したり、その場で終了したりして、メモリ アクセスをシステム メモリ ページにリダイレクトします。

ビデオ メモリ マネージャーは、割り当てが UseAlternateVA で最初にロックされたときに代替仮想アドレスを作成し、次のいずれかのシナリオで仮想アドレスを解放します。

  • 割り当ては CPU からアクセスできません。また、別の割り当てによって再利用するために、スウィズリング範囲が解放されます。
  • 割り当ては CPU からアクセスできなく、削除されています。
  • 割り当てが破棄されています。
  • 割り当ては、ロック中に削除された後にページングされます。
UseAlternateVA は、ディスプレイ ミニポート ドライバーの DxgkDdiCreateAllocation 関数の呼び出しで、DXGK_ALLOCATIONINFO構造体の Flags メンバーで UseAlternateVA ビット フィールド フラグを指定してプライマリ割り当てが作成された場合にのみ、プライマリ割り当てで使用できることに注意してください。 このような方法で作成されたプライマリ割り当ては、 UseAlternateVA フラグでのみロックできます。

UseAlternateVA は、共有割り当てでは使用できません。

UseAlternateVA セットでロックされた割り当てを再びロックすることはできません。

メモユーザー モードディスプレイ ドライバーが pfnLockCb 関数の呼び出し中にD3DDDICB_LOCKFLAGS構造体の Flags メンバーに UseAlternateVA を設定している場合、ディスプレイ ミニポート ドライバーは DxgkCbExcludeAdapterAccess 関数を呼び出さないでください。
 
このメンバーの設定は、32 ビット Value メンバー (0x00000200) の 10 ビットを設定することと同じです。

IgnoreReadSync

ビデオ メモリ マネージャーが、割り当てに対する保留中のグラフィックス処理装置 (GPU) 書き込み操作の完了のみを待機するかどうかを指定する UINT 値。 このメンバーが設定されている場合、メモリ マネージャーは GPU 読み取り操作が完了するまで待機する必要はありません。 つまり、最後の GPU 書き込み操作が完了するとすぐに、GPU がまだ割り当てから読み取っている可能性がある場合でも、ロックが返される可能性があります。

IgnoreReadSync は、絞りセグメントに配置できる割り当てでのみ設定できます。 グラフィックス アダプターでキャッシュの一貫性がサポートされていない場合は、スウィズル割り当てまたはキャッシュされた割り当てでは設定できません。

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

Reserved

このメンバーは予約されており、0 に設定する必要があります。 このメンバーを 0 に設定することは、32 ビット Value メンバーの残りの 21 ビット (0xFFFFF800) ゼロに設定することと同じです。

Value

割り当てをロックする方法を識別する 1 つの 32 ビット値を保持できる、D3DDDICB_LOCKFLAGSに含まれる共用体内のメンバー。

注釈

D3DDDICB_LOCKFLAGS構造体を使用して割り当てをロックする方法を指定する場合は、次の規則に従う必要があります。

  • ReadOnly メンバーと WriteOnly メンバーを同時に指定することは無効です。
  • IgnoreSync メンバーは、Discard メンバーで指定されている場合は無効です。
  • DonotWait メンバーは、Discard メンバーで指定されている場合は無効です。
  • IgnoreSync メンバーと AcquireAperture メンバーを同時に指定することは無効です。
  • UseAlternateVA メンバーを指定すると、絞り値が取得されることを示すので、AcquireAperture メンバーも設定する必要があります。
  • 廃止または提供された割り当てをロックすることはできません。 「割り当ての名前変更の要求」も参照してください。
  • 割り当ては、DXGK_ALLOCATIONINFOFLAGS構造体で CpuVisible メンバー セットを使用して作成された場合にのみロックできます。
  • GDI の非マネージド プライマリ割り当てでない限り、共有割り当ての所有者 (作成者) のみがロックできます。
  • スウィズルされた範囲でロックされている割り当ては、ロックを再びロックする前にロックを解除する必要があります。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
Header d3dukmdt.h (D3dukmdt.h を含む)

こちらもご覧ください

D3DDDICB_LOCK

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiAcquireSwizzlingRange

pfnLockCb