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 {
void D3DKMT_PTR(
HANDLE unnamedParam1,
Event unnamedParam2
);
} CPUNotification;
struct {
D3DKMT_ALIGN64 UINT64 InitialFenceValue;
void D3DKMT_PTR(
VOID *unnamedParam1,
FenceValueCPUVirtualAddress unnamedParam2
);
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 D3DKMT_PTR(
VOID *unnamedParam1,
FenceValueCPUVirtualAddress unnamedParam2
);
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.FenceValue
指定初始柵欄值的 64 位值。
CPUNotification
結構,包含 CPU 通知的相關信息。 如果 Type 成員等於 D3DDDI_CPU_NOTIFICATION,D3DDDI_SYNCHRONIZATIONOBJECTINFO2中的聯集會保存 CPUNotification 結構。
void D3DKMT_PTR( HANDLE unnamedParam1, Event unnamedParam2)
MonitoredFence
結構,包含受監視柵欄的相關信息。 如果 Type 成員等於 D3DDDI_MONITORED_FENCE,D3DDDI_SYNCHRONIZATIONOBJECTINFO2中的聯集會保存 MonitoredFence 結構。
基於安全考慮,只能使用NT句柄來共享受監視的柵欄,因此在使用受監視的柵欄時,必須設定 NtSecuritySharing 旗標。
從 Windows 10 開始支援。
MonitoredFence.InitialFenceValue
[in]指定初始柵欄值的 64 位值。
從 Windows 10 開始支援。
void D3DKMT_PTR( VOID *unnamedParam1, FenceValueCPUVirtualAddress unnamedParam2)
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.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