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_CREATEALLOCATIONFLAGS、D3DKMT_CREATEKEYEDMUTEX2_FLAGS和 D3DDDI_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