D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS構造体 (d3dukmdt.h)
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 構造体は、同期オブジェクトの属性を識別します。
構文
typedef struct _D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS {
union {
struct {
UINT Shared : 1;
UINT NtSecuritySharing : 1;
UINT CrossAdapter : 1;
UINT TopOfPipeline : 1;
UINT NoSignal : 1;
UINT NoWait : 1;
UINT NoSignalMaxValueOnTdr : 1;
UINT NoGPUAccess : 1;
UINT SignalByKmd : 1;
UINT Unused : 1;
UINT UnwaitCpuWaitersOnlyOnDestroy : 1;
#if ...
UINT Reserved : 20;
#elif
UINT Reserved : 21;
#elif
UINT Reserved : 22;
#elif
UINT Reserved : 23;
#elif
UINT Reserved : 28;
#else
UINT Reserved : 29;
#endif
UINT D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 : 1;
};
UINT Value;
};
} D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS;
メンバーズ
Shared
同期オブジェクトを共有するかどうかを指定する UINT 値。
共有 が 1 (TRUE) に設定されている場合、同期オブジェクトは共有されます。 共有 が 0 (FALSE) に設定されている場合、同期オブジェクトは共有されません。 詳細については、「解説」セクションを参照してください。
NtSecuritySharing
同期オブジェクトを NT ハンドルと共有するかどうかを指定する UINT 値。つまり、リソースに対するグローバル D3DKMT_HANDLE カーネル モード ハンドルがないことを意味します。
NtSecuritySharing が 1 (TRUE) に設定されている場合、同期オブジェクトは共有されますが、リソースに対するグローバル D3DKMT_HANDLE ハンドルはありません。
手記
NtSecuritySharing が 1 に設定されている場合は、共有 1 に設定する必要があります。 詳細については、「解説」セクションを参照してください。
Windows 8 以降でサポートされています。
CrossAdapter
同期オブジェクトがハイブリッド システム 上のアダプター間リソース オブジェクト共有であるかどうかを指定する UINT 値。
CrossAdapter が 1 (TRUE) に設定されている場合、同期オブジェクトは、アダプター間の共有オブジェクトです。 CrossAdapter が 0 (FALSE) に設定されている場合、同期オブジェクトは共有アダプター間オブジェクトではありません。
TopOfPipeline
価値 | 意味 |
---|---|
真 | 同期オブジェクトが、その前のコマンド バッファーの内容が GPU パイプラインに完全にコピーされるとすぐに通知されるかどうかを指定しますが、必ずしも実行が完了したとは限りません。 この動作により、できるだけ早くコマンド バッファーを再利用できます。 |
偽 | 同期オブジェクトは、上記のコマンド バッファーの実行が完了した後に通知されます。 |
この値は、監視対象のフェンス同期オブジェクトの場合は 1 (TRUE) にのみ設定でき、他のすべての同期オブジェクトの種類では 0 (FALSE) に設定する必要があります。
Windows 10 以降でサポートされています。
NoSignal
価値 | 意味 |
---|---|
真 | この同期オブジェクトが作成または開かれているデバイスに対して待機コマンドのみを送信できることを指定します。 このフラグが設定されているときにシグナル操作を送信しようとすると、STATUS_ACCESS_DENIEDが返されます。 |
偽 | 同期オブジェクトを通知できます。 |
この値は、監視対象のフェンス同期オブジェクトの場合は 1 (TRUE) にのみ設定でき、他のすべての同期オブジェクトの種類では 0 (FALSE) に設定する必要があります。
Windows 10 以降でサポートされています。
NoWait
価値 | 意味 |
---|---|
真 | この同期オブジェクトが作成または開かれているデバイスに対して、シグナル コマンドのみを送信できることを指定します。 このフラグが設定されているときに待機操作を送信しようとすると、STATUS_ACCESS_DENIEDが返されます。 |
偽 | 同期オブジェクトは待機できます。 |
この値は、監視対象のフェンス同期オブジェクトの場合は 1 (TRUE) にのみ設定でき、他のすべての同期オブジェクトの種類では 0 (FALSE) に設定する必要があります。
このフラグは、NoSignal フラグ 同時に設定することはできません。
Windows 10 以降でサポートされています。
NoSignalMaxValueOnTdr
価値 | 意味 |
---|---|
真 | TDR の場合、監視対象のフェンスの前述のシグナリングを最大値にバイパスするように GPU スケジューラに指示します。 |
偽 | GPU スケジューラは、デバイスが GPU リセット (TDR) の影響を受ける可能性がある場合に、監視対象のフェンスを最大値に通知します。 |
Windows 10 以降でサポートされています。
NoGPUAccess
設定すると、フェンスは GPU 仮想アドレス空間にマップされず、(アダプターキャップに関係なく) 常に 64 ビット値として格納されます。 パケット ベースのシグナル/待機操作のみがサポートされます。 Windows 10 以降でサポートされています。
SignalByKmd
設定すると、フェンスはカーネル モード ドライバー (KMD) によって通知できます。 このフラグは、D3DDDI_CPU_NOTIFICATION オブジェクトでのみ使用できます。 Windows 11 (WDDM 3.0) 以降でサポートされています。
Unused
このメンバーは使用されず、ゼロに設定する必要があります。 Windows 11 バージョン 22H2 (WDDM 3.1) 以降で使用できます。
UnwaitCpuWaitersOnlyOnDestroy
設定すると、CPU 上の共有同期オブジェクトの待機者は、共有同期オブジェクトが最終的に破棄されたときにのみブロック解除されます。 既定では、CPU 待機者はローカル同期オブジェクトが破棄されるときにブロック解除されますが、メインの共有同期オブジェクトは別のローカル同期オブジェクトによって開かれます。 Windows 11 バージョン 24H2 (WDDM 3.2) 以降でサポートされています。
Reserved
このメンバーは予約されており、0 に設定する必要があります。
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0
このメンバーは予約されており、0 に設定する必要があります。
Windows 8 以降でサポートされています。
Value
同期オブジェクトの属性を識別する 1 つの 32 ビット値を保持できる、D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS に含まれる共用体のメンバー。
備考
D3DKMTShareObjects 関数を使用して共有するオブジェクトは、まず、NtSecuritySharing フラグ値を設定して作成する必要があります。 このフラグ値は、D3DKMT_CREATEALLOCATIONFLAGS、D3DKMT_CREATEKEYEDMUTEX2_FLAGS、および D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 構造体で使用できます。
ドライバーは、D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS フラグに関する次のガイドラインに従う必要があります。
同期オブジェクトが共有されていない場合は、共有 と ntSecuritySharing の両方を 0 に設定します。
同期オブジェクトが D3DKMT_HANDLE データ型と共有されている場合は、共有 = 1 設定し、NtSecuritySharing = 0 します。
同期オブジェクトが NT ハンドルとプロセスで共有されている場合 (リソースに対するグローバル D3DKMT_HANDLE カーネル モード ハンドルがない場合)、共有 = 1 NtSecuritySharing = 1 設定します。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 7 |
ヘッダー | d3dukmdt.h (D3dumddi.h、D3dkmddi.h を含む) |
関連項目
D3DDDI_SYNCHRONIZATIONOBJECTINFO2