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_CREATEALLOCATIONFLAGS、 D3DKMT_CREATEKEYEDMUTEX2_FLAGS和 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 结构中可用。
驱动程序应遵循 以下有关D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 标志的准则:
如果未共享同步对象,请将 Shared 和 NtSecuritySharing 设置为 0。
如果使用 D3DKMT_HANDLE 数据类型共享同步对象,请将 Shared = 1 设置为 NtSecuritySharing = 0。
如果同步对象与进程 (的 NT 句柄共享,并且没有对资源 ) 全局D3DKMT_HANDLE 内核模式句柄,请将 Shared = 1 和 NtSecuritySharing = 1。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 |
标头 | d3dukmdt.h (包括 D3dumddi.h、D3dkmddi.h) |
另请参阅
D3DDDI_SYNCHRONIZATIONOBJECTINFO2