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 值。
如果 Shared 設定為 1 (TRUE) ,則會共用同步處理物件。 如果 Shared 設定為零 (FALSE) ,則不會共用同步處理物件。 如需詳細資訊,請參閱<備註>一節。
NtSecuritySharing
UINT 值,指定同步處理物件是否與 NT 句柄共用,這表示它沒有資源的全域 D3DKMT_HANDLE 核心模式句柄。
如果 NtSecuritySharing 設定為 1 (TRUE) ,同步處理物件會共用,但沒有資源的全域 D3DKMT_HANDLE 句柄。
注意
如果 NtSecuritySharing 設定為 1, 則 Shared 必須設定為 1。 如需詳細資訊,請參閱<備註>一節。
從 Windows 8 開始支援。
CrossAdapter
UINT 值,指定同步處理物件是否為混合式系統上的共用 交叉配接器資源物件。
如果 CrossAdapter 設定為 1 (TRUE) ,則同步處理對象是共用的交叉配接器物件。 如果 CrossAdapter 設定為零 (FALSE) ,同步處理物件不是共用的交叉配接器物件。
TopOfPipeline
值 | 意義 |
---|---|
TRUE | 指定同步處理物件是否在命令緩衝區的內容完全複製到 GPU 管線,但不一定完成執行時發出訊號。 此行為允許儘快重複使用命令緩衝區。 |
false | 同步處理物件會在上述命令緩衝區完成執行之後發出訊號。 |
此值只能設定為 1 (TRUE) 監視的隔離同步處理物件,而且它應該設定為所有其他同步處理物件類型的 FALSE) 為零 (FALSE。
從Windows 10 開始支援。
NoSignal
值 | 意義 |
---|---|
TRUE | 指定建立或開啟此同步對象的裝置只能提交等候命令。 當設定此旗標時,嘗試提交訊號作業將會傳回STATUS_ACCESS_DENIED。 |
false | 同步處理物件可以發出訊號。 |
此值只能設定為 1 (TRUE) 監視的隔離同步處理物件,而且它應該設定為所有其他同步處理物件類型的 FALSE) 為零 (FALSE。
從Windows 10 開始支援。
NoWait
值 | 意義 |
---|---|
TRUE | 指定建立或開啟此同步對象的裝置只能提交訊號命令。 當設定此旗標時,嘗試提交等候作業將會傳回STATUS_ACCESS_DENIED。 |
false | 同步處理物件可以等候。 |
此值只能設定為 1 (TRUE) 監視的隔離同步處理物件,而且它應該設定為所有其他同步處理物件類型的 FALSE) 為零 (FALSE。
無法使用 NoSignal 旗標同時設定此旗標。
從Windows 10 開始支援。
NoSignalMaxValueOnTdr
值 | 意義 |
---|---|
TRUE | 指示 GPU 排程器略過上述受監視柵欄的訊號,以在 TDR 案例中達到最大值。 |
false | 當裝置可能會受到 GPU 重設影響的裝置 (TDR) 時,GPU 排程器會將受監視的柵欄發出訊號給最大值。 |
從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
這個成員是保留的,而且應該設定為零。
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0
這個成員是保留的,而且應該設定為零。
從 Windows 8 開始支援。
Value
包含在 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 的等位成員,可保存一個識別同步處理物件屬性的32位值。
備註
必須先使用 D3DKMTShareObjects 函式來建立物件,並設定 NtSecuritySharing 旗標值。 此旗標值可在 D3DKMT_CREATEALLOCATIONFLAGS、 D3DKMT_CREATEKEYEDMUTEX2_FLAGS和 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 結構中使用。
驅動程式應遵循 下列D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 旗標指導方針:
如果未共用同步處理物件,請將 Shared 和 NtSecuritySharing 設定為 0。
如果同步處理物件與 D3DKMT_HANDLE 數據類型共用,請設定 Shared = 1 和 NtSecuritySharing = 0。
如果同步處理對象與進程 (的 NT 句柄共用,而且沒有全域 D3DKMT_HANDLE 核心模式句柄給資源) ,請將 Shared = 1 和 NtSecuritySharing = 1。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 |
標頭 | d3dukmdt.h (包括 D3dumddi.h、D3dkmddi.h) |
另請參閱
D3DDDI_SYNCHRONIZATIONOBJECTINFO2