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

包含有关同步互斥体的信息的结构。 如果 类型 成员等于 D3DDDI_SYNCHRONIZATION_MUTEX,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 SynchronizationMutex 结构。

SynchronizationMutex.InitialState

一个布尔值,该值指示同步互斥体最初是否由对象拥有。 TRUE 的值指示互斥体是拥有的;FALSE 表示互斥体不拥有。

Semaphore

包含有关信号灯的信息的结构。 如果 类型 成员等于 D3DDDI_SEMAPHORE,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合包含 信号灯 结构。

Semaphore.MaxCount

对象可以等待的最大事件数。

Semaphore.InitialCount

对象正在等待的初始事件数。

Fence

包含有关围栏的信息的结构。 如果 类型 成员等于 D3DDDI_FENCE,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 围栏 结构。

Fence.FenceValue

一个指定初始围栏值的 64 位值。

CPUNotification

包含有关 CPU 通知的信息的结构。 如果 类型 成员等于 D3DDDI_CPU_NOTIFICATIOND3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 CPUNotification 结构。

CPUNotification.Event

CPU 通知事件的句柄。

MonitoredFence

包含有关受监视围栏的信息的结构。 如果 类型 成员等于 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]撰写器希望接收通知的输出 ID。

PeriodicMonitoredFence.hAdapter

[in]与 VidPnSourceID 关联的适配器的句柄

PeriodicMonitoredFence.VidPnTargetId

PeriodicMonitoredFence.Time

[out]表示 VSync (VSync 的时间 – 时间参数)之前的偏移量。 时间值可能不超过 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