共用方式為


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

D3DKMTCreateSynchronizationObject

D3DKMT_CREATESYNCHRONIZATIONOBJECT2