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 {
HANDLE Event;
} CPUNotification;
struct {
D3DKMT_ALIGN64 UINT64 InitialFenceValue;
VOID *FenceValueCPUVirtualAddress;
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 *FenceValueCPUVirtualAddress;
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
包含有关同步互斥体的信息的结构。 如果 类型 成员等于 D3DDDI_SYNCHRONIZATION_MUTEX,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 SynchronizationMutex 结构。
SynchronizationMutex.InitialState
一个布尔值,该值指示同步互斥体最初是否由对象拥有。 TRUE 的值指示互斥体是拥有的;FALSE 表示互斥体不拥有。
Semaphore
包含有关信号灯的信息的结构。 如果 类型 成员等于 D3DDDI_SEMAPHORE,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合包含 信号灯 结构。
Semaphore.MaxCount
对象可以等待的最大事件数。
Semaphore.InitialCount
对象正在等待的初始事件数。
Fence
包含有关围栏的信息的结构。 如果 类型 成员等于 D3DDDI_FENCE,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 围栏 结构。
Fence.FenceValue
一个指定初始围栏值的 64 位值。
CPUNotification
包含有关 CPU 通知的信息的结构。 如果 类型 成员等于 D3DDDI_CPU_NOTIFICATION,D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 CPUNotification 结构。
CPUNotification.Event
CPU 通知事件的句柄。
MonitoredFence
包含有关受监视围栏的信息的结构。 如果 类型 成员等于 D3DDDI_MONITORED_FENCE,则 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 中的联合将保留 MonitoredFence 结构。
由于安全原因,只能使用 NT 句柄共享受监视围栏,因此在使用受监视的围栏时必须设置 NtSecuritySharing 标志。
从 Windows 10 开始支持。
MonitoredFence.InitialFenceValue
[in]一个指定初始围栏值的 64 位值。
从 Windows 10 开始支持。
MonitoredFence.FenceValueCPUVirtualAddress
[out]CPU 围栏值的只读映射。 这是一个用户模式地址,可从创建受监视的围栏对象的进程读取。 对于支持通过 InterlockedCompareExchange64(pointer,0,0)
等方法进行 64 位原子读取的 32 位平台,将进行读写,而不是只读,以避免在互锁操作期间发生访问冲突。 根据 No64BitAtomics 上限的值,此地址指向 32 位或 64 位基础值。
从 Windows 10 开始支持。
MonitoredFence.FenceValueGPUVirtualAddress
[out]GPU 围栏值的读写映射。 驱动程序可以通过将此地址的 GPU 写入命令插入命令缓冲区来发出新的围栏值信号,Dxgkrnl 将取消阻止此隔离对象值的等待程序。 根据 No64BitAtomics 上限的值,此地址指向 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 的时间 – 时间参数)之前的偏移量。 时间值可能不超过 VSync 间隔(1/DisplayModeRefresh)。 时间以 100ns 为单位指定。
PeriodicMonitoredFence.FenceValueCPUVirtualAddress
[in]CPU 围栏值的只读映射
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