D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS结构(d3dukmdt.h)

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 结构标识同步对象的属性。

语法

typedef struct _D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS {
  union {
    struct {
      UINT Shared : 1;
      UINT NtSecuritySharing : 1;
      UINT CrossAdapter : 1;
      UINT TopOfPipeline : 1;
      UINT NoSignal : 1;
      UINT NoWait : 1;
      UINT NoSignalMaxValueOnTdr : 1;
      UINT NoGPUAccess : 1;
      UINT SignalByKmd : 1;
      UINT Unused : 1;
      UINT UnwaitCpuWaitersOnlyOnDestroy : 1;
#if ...
      UINT Reserved : 20;
#elif
      UINT Reserved : 21;
#elif
      UINT Reserved : 22;
#elif
      UINT Reserved : 23;
#elif
      UINT Reserved : 28;
#else
      UINT Reserved : 29;
#endif
      UINT D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0 : 1;
    };
    UINT Value;
  };
} D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS;

成员

Shared

一个 UINT 值,该值指定是否共享同步对象。

如果 共享 设置为 1(TRUE),则共享同步对象。 如果 共享 设置为零(FALSE),则不会共享同步对象。 有关详细信息,请参阅“备注”部分。

NtSecuritySharing

一个 UINT 值,该值指定同步对象是否与 NT 句柄共享,这意味着它没有资源的全局 D3DKMT_HANDLE 内核模式句柄。

如果 NtSecuritySharing 设置为 1(TRUE),则同步对象是共享的,但没有对资源的全局 D3DKMT_HANDLE 句柄。

注意

如果 NtSecuritySharing 设置为 1,则必须将共享 设置为 1。 有关详细信息,请参阅“备注”部分。

从 Windows 8 开始支持。

CrossAdapter

一个 UINT 值,该值指定同步对象是否是混合系统 上的共享跨适配器资源对象。

如果 CrossAdapter 设置为 1(TRUE),则同步对象是共享的跨适配器对象。 如果 CrossAdapter 设置为零(FALSE),则同步对象不是共享的跨适配器对象。

TopOfPipeline

价值 意义
指定同步对象是否在命令缓冲区的内容完全复制到 GPU 管道之前发出信号,但不一定完成执行。 此行为允许尽快重用命令缓冲区。
在上述命令缓冲区完成执行后发出同步对象信号。

此值只能设置为 1(TRUE),对于受监视的围栏同步对象,此值应设置为零(FALSE),对于所有其他同步对象类型。

从 Windows 10 开始支持。

NoSignal

价值 意义
指定此同步对象创建或打开的设备只能提交等待命令。 设置此标志时尝试提交信号作将返回STATUS_ACCESS_DENIED。
同步对象可以发出信号。

此值只能设置为 1(TRUE),对于受监视的围栏同步对象,此值应设置为零(FALSE),对于所有其他同步对象类型。

从 Windows 10 开始支持。

NoWait

价值 意义
指定此同步对象创建或打开的设备只能为其提交信号命令。 设置此标志时尝试提交等待作将返回STATUS_ACCESS_DENIED。
同步对象可以等待。

此值只能设置为 1(TRUE),对于受监视的围栏同步对象,此值应设置为零(FALSE),对于所有其他同步对象类型。

此标志不能与 NoSignal 标志同时设置。

从 Windows 10 开始支持。

NoSignalMaxValueOnTdr

价值 意义
指示 GPU 计划程序绕过上述受监视围栏信号,以达到 TDR 情况下的最大值。
当可能发出 GPU 重置(TDR)影响的设备时,GPU 计划程序会将受监视围栏信号的最大值发出信号。

从 Windows 10 开始支持。

NoGPUAccess

设置后,围栏不会映射到 GPU 虚拟地址空间,并且始终存储为 64 位值(无论适配器上限如何)。 仅支持基于数据包的信号/等待作。 从 Windows 10 开始支持。

SignalByKmd

设置后,内核模式驱动程序(KMD)可以发出围栏信号。 此标志只能与 D3DDDI_CPU_NOTIFICATION 对象一起使用。 从 Windows 11 开始支持(WDDM 3.0)。

Unused

此成员未使用,应设置为零。 从 Windows 11 版本 22H2(WDDM 3.1 开始)开始可用。

UnwaitCpuWaitersOnlyOnDestroy

设置后,仅当最终销毁共享同步对象时,CPU 上的共享同步对象的服务员才会取消阻止。 默认情况下,当销毁本地同步对象时,将取消阻止 CPU 等待程序,但另一个本地同步对象仍会打开主共享同步对象。 从 Windows 11 版本 24H2 开始支持(WDDM 3.2)。

Reserved

此成员是保留的,应设置为零。

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0

此成员是保留的,应设置为零。

从 Windows 8 开始支持。

Value

包含在 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 中的联合中的成员,可以保存一个 32 位值,用于标识同步对象的属性。

言论

必须先使用 D3DKMTShareObjects 函数创建要共享的对象,并设置 NtSecuritySharing 标志值。 此标志值在 D3DKMT_CREATEALLOCATIONFLAGSD3DKMT_CREATEKEYEDMUTEX2_FLAGSD3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 结构中可用。

驱动程序应遵循有关 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 标志的以下准则:

  • 如果未共享同步对象,请将 共享NtSecuritySharing 设置为 0。

  • 如果同步对象与 D3DKMT_HANDLE 数据类型共享,请设置 共享 = 1,NtSecuritySharing = 0。

  • 如果同步对象与进程 NT 句柄共享(并且没有资源全局 D3DKMT_HANDLE 内核模式句柄),请将 共享 = 1,NtSecuritySharing = 1。

要求

要求 价值
最低支持的客户端 Windows 7
标头 d3dukmdt.h (包括 D3dumddi.h, D3dkmddi.h)

另请参阅

D3DDDI_SYNCHRONIZATIONOBJECTINFO2

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DKMTShareObjects

D3DKMT_CREATEALLOCATIONFLAGS

D3DKMT_CREATEKEYEDMUTEX2_FLAGS