D3DDDI_SYNCHRONIZATIONOBJECTINFO2結構(d3dukmdt.h)
D3DDDI_SYNCHRONIZATIONOBJECTINFO2 結構包含第二代同步處理對象的相關信息。
語法
typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO2 {
D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type;
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Flags;
union {
struct {
BOOL InitialState;
} SynchronizationMutex;
struct {
UINT MaxCount;
UINT InitialCount;
} Semaphore;
struct {
D3DKMT_ALIGN64 UINT64 FenceValue;
} Fence;
struct {
HANDLE Event;
} CPUNotification;
struct {
D3DKMT_ALIGN64 UINT64 InitialFenceValue;
VOID *FenceValueCPUVirtualAddress;
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress;
UINT EngineAffinity;
UINT Padding;
} MonitoredFence;
struct {
D3DKMT_HANDLE hAdapter;
D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId;
D3DKMT_ALIGN64 UINT64 Time;
VOID *FenceValueCPUVirtualAddress;
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress;
UINT EngineAffinity;
UINT Padding;
} PeriodicMonitoredFence;
struct {
D3DKMT_ALIGN64 UINT64 Reserved[8];
} Reserved;
};
D3DKMT_HANDLE SharedHandle;
} D3DDDI_SYNCHRONIZATIONOBJECTINFO2;
成員
Type
[in]D3DDDI_SYNCHRONIZATIONOBJECT_TYPE 型別的值,表示同步處理物件的型別。
Flags
[in]D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 結構,指定同步處理物件的位字段旗標屬性。
SynchronizationMutex
結構,包含同步處理 Mutex 的相關信息。 如果 Type 成員等於 D3DDDI_SYNCHRONIZATION_MUTEX,則 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的聯集會保存 SynchronizationMutex 結構。
SynchronizationMutex.InitialState
布爾值,指出同步處理 Mutex 最初是否由 對象擁有。 TRUE 值表示 Mutex 已擁有;FALSE 表示 Mutex 未擁有。
Semaphore
結構,包含信號的相關信息。 如果 Type 成員等於 D3DDDI_SEMAPHORE,則 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的聯集會保存 號號 結構。
Semaphore.MaxCount
物件可以等候的事件數目上限。
Semaphore.InitialCount
物件正在等候的初始事件數目。
Fence
結構,包含柵欄的相關信息。 如果 Type 成員等於 D3DDDI_FENCE,則 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的聯集會保存 Fence 結構。
Fence.FenceValue
指定初始柵欄值的 64 位值。
CPUNotification
結構,包含 CPU 通知的相關信息。 如果 Type 成員等於 D3DDDI_CPU_NOTIFICATION,則 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的聯集會保存 CPUNotification 結構。
CPUNotification.Event
CPU 通知事件的句柄。
MonitoredFence
結構,包含受監視柵欄的相關信息。 如果 Type 成員等於 D3DDDI_MONITORED_FENCE,則 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的聯集會保存 MonitoredFence 結構。
受監視的柵欄只能基於安全性考慮使用 NT 句柄來共用,因此在使用受監視的柵欄時,必須設定 NtSecuritySharing 旗標。
從 Windows 10 開始支援。
MonitoredFence.InitialFenceValue
[in]指定初始柵欄值的 64 位值。
從 Windows 10 開始支援。
MonitoredFence.FenceValueCPUVirtualAddress
[out]CPU 柵欄值的唯讀對應。 這是使用者模式位址,可從建立受監視的柵欄物件的程式讀取。 對於支援透過 InterlockedCompareExchange64(pointer,0,0)
等方法進行 64 位不可部分完成讀取的 32 位平臺,將會進行讀寫,而不是只讀,以避免在聯結作業期間發生存取違規。 根據 No64BitAtomics 上限的值,此位址會指向 32 位或 64 位基礎值。
從 Windows 10 開始支援。
MonitoredFence.FenceValueGPUVirtualAddress
[out]GPU 範圍值的讀寫對應。 驅動程式可以將這個位址的 GPU 寫入命令插入命令緩衝區,以發出新的柵欄值訊號,Dxgkrnl 將會解除封鎖此柵欄物件值的等候者。 根據 No64BitAtomics 上限的值,此位址會指向 32 位或 64 位基礎值。 如果裝置不支援與 CPU 的快取一致性,則不應該使用 GPU 虛擬位址寫入隔離區值。 只有 CPU 才能存取柵欄值。
從 Windows 10 開始支援。
MonitoredFence.EngineAffinity
[in]位欄位,其中每個位位置(從零開始)都會定義連結顯示適配卡 (LDA) 連結中的實體配接器索引,其中會認可 GPU 虛擬位址。 零表示 GPU 虛擬位址會認可到所有實體適配卡。
從 Windows 10 開始支援。
MonitoredFence.Padding
PeriodicMonitoredFence
結構,包含定期受監視柵欄的相關信息。 如果 Type 成員等於 D3DDDI_PERIODIC_MONITORED_FENCE,則 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的聯集會保存 MonitoredFence 結構。
從 Windows 10 開始支援。
VidPnTargetID
[out]撰寫器想要接收通知的輸出標識碼。
PeriodicMonitoredFence.hAdapter
[in]與 VidPnSourceID 相關聯的配接器句柄
PeriodicMonitoredFence.VidPnTargetId
PeriodicMonitoredFence.Time
[out]表示 VSync 之前的位移(VSync – Time 參數的時間)。 Time 值可能不超過 VSync 間隔 (1 / DisplayModeRefresh)。 時間是以 100ns 為單位來指定。
PeriodicMonitoredFence.FenceValueCPUVirtualAddress
[in]CPU 範圍值的唯讀對應
PeriodicMonitoredFence.FenceValueGPUVirtualAddress
[in]GPU 柵欄值的唯讀對應
PeriodicMonitoredFence.EngineAffinity
[in]定義將對應 GPU VA 的實體適配卡
PeriodicMonitoredFence.Padding
Reserved
保留供日後使用的結構。 此結構包含下列成員:
Reserved.Reserved[8]
SharedHandle
[out]如果共用句柄目前存在,共用同步處理物件的句柄。 驅動程式應該使用NT句柄共用同步處理物件。 它應該設定 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS::NtSecuritySharing,以指出物件將使用 NT 句柄共用,並呼叫 D3DKMTShareObjects 以取得 NT 句柄。 使用全域句柄並不安全。 任何進程都可以猜測全域句柄並開啟共享物件。 只有舊版 D3D 運行時間的相容性原因,才支援全域句柄。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 7 |
標頭 | d3dukmdt.h (包括 D3dumddi.h, D3dkmddi.h) |
另請參閱
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS
D3DDDI_SYNCHRONIZATIONOBJECT_TYPE