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

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

SynchronizationMutex.InitialState

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

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 结构。

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 cap 的值,此地址指向 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 – 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

D3DKMTCreateSynchronizationObject

D3DKMT_CREATESYNCHRONIZATIONOBJECT2