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 值,该值指定是否共享同步对象。

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

NtSecuritySharing

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

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

注意

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

支持从Windows 8开始。

CrossAdapter

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

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

TopOfPipeline

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

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

从 Windows 10 开始支持。

NoSignal

含义
TRUE 指定创建或打开此同步对象的设备只能为其提交等待命令。 尝试在设置此标志时提交信号操作将返回STATUS_ACCESS_DENIED。
FALSE 可以向同步对象发出信号。

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

从 Windows 10 开始支持。

NoWait

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

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

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

从 Windows 10 开始支持。

NoSignalMaxValueOnTdr

含义
TRUE 指示 GPU 计划程序绕过上述受监视围栏的信号,以达到 TDR 情况下的最大值。
FALSE 当可能向受 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 等待者将被取消阻止,但main共享同步对象仍由另一个本地同步对象打开。 从 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 标志的准则:

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

  • 如果使用 D3DKMT_HANDLE 数据类型共享同步对象,请将 Shared = 1 设置为 NtSecuritySharing = 0。

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

要求

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

另请参阅

D3DDDI_SYNCHRONIZATIONOBJECTINFO2

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DKMTShareObjects

D3DKMT_CREATEALLOCATIONFLAGS

D3DKMT_CREATEKEYEDMUTEX2_FLAGS