D3DDDI_SYNCHRONIZATIONOBJECTINFO2 structure (d3dukmdt.h)

The D3DDDI_SYNCHRONIZATIONOBJECTINFO2 structure contains information about a second-generation synchronization object.

Syntax

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;

Members

Type

[in] A value of type D3DDDI_SYNCHRONIZATIONOBJECT_TYPE that indicates the type of synchronization object.

Flags

[in] A D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS structure that specifies, in bit-field flags, attributes of the synchronization object.

SynchronizationMutex

A structure that contains information about a synchronization mutex. If the Type member is equal to D3DDDI_SYNCHRONIZATION_MUTEX, the union in D3DDDI_SYNCHRONIZATIONOBJECTINFO2 holds a SynchronizationMutex structure.

SynchronizationMutex.InitialState

A Boolean value that indicates whether the synchronization mutex is initially owned by an object. A value of TRUE indicates that the mutex is owned; FALSE indicates that the mutex is not owned.

Semaphore

A structure that contains information about a semaphore. If the Type member is equal to D3DDDI_SEMAPHORE, the union in D3DDDI_SYNCHRONIZATIONOBJECTINFO2 holds a Semaphore structure.

Semaphore.MaxCount

The maximum number of events that an object can be waiting for.

Semaphore.InitialCount

The initial number of events that an object is waiting for.

Fence

A structure that contains information about a fence. If the Type member is equal to D3DDDI_FENCE, the union in D3DDDI_SYNCHRONIZATIONOBJECTINFO2 holds a Fence structure.

Fence.FenceValue

A 64-bit value that specifies the initial fence value.

CPUNotification

A structure that contains information about a CPU notification. If the Type member is equal to D3DDDI_CPU_NOTIFICATION, the union in D3DDDI_SYNCHRONIZATIONOBJECTINFO2 holds a CPUNotification structure.

CPUNotification.Event

The handle to the CPU notification event.

MonitoredFence

A structure that contains information about a monitored fence. If the Type member is equal to D3DDDI_MONITORED_FENCE, the union in D3DDDI_SYNCHRONIZATIONOBJECTINFO2 holds a MonitoredFence structure.

Monitored fences can be shared only by using NT handles for security reasons, so the NtSecuritySharing flag must be set when using a monitored fence.

Supported starting with Windows 10.

MonitoredFence.InitialFenceValue

[in] A 64-bit value that specifies the initial fence value.

Supported starting with Windows 10.

MonitoredFence.FenceValueCPUVirtualAddress

[out] A read-only mapping of the fence value for the CPU. This is a user mode address readable from the process that created the monitored fence object. For 32 bit platforms that support 64 bit atomic reads via methods such as InterlockedCompareExchange64(pointer,0,0), the mapping will be made read-write instead of read-only to avoid an access violation during the interlocked operation. Depending on the value of No64BitAtomics cap, this address points to either a 32 bit or a 64 bit underlying value.

Supported starting with Windows 10.

MonitoredFence.FenceValueGPUVirtualAddress

[out] A read-write mapping of the fence value for the GPU. A driver can signal a new fence value by inserting a GPU write command for this address into a command buffer, and Dxgkrnl will unblock waiters for this fence object value. Depending on the value of No64BitAtomics cap, this address points to either a 32 bit or a 64 bit underlying value. If the device doesn’t support cache coherency with the CPU, it shouldn't write to the fence value using the GPU virtual address. Access to the fence value should be done only by the CPU.

Supported starting with Windows 10.

MonitoredFence.EngineAffinity

[in] A bit field, where each bit position (starting from zero) defines a physical adapter index in a link display adapter (LDA) link where the GPU virtual address will be committed. Zero means that the GPU virtual address will be committed to all physical adapters.

Supported starting with Windows 10.

MonitoredFence.Padding

PeriodicMonitoredFence

A structure that contains information about a periodic monitored fence. If the Type member is equal to D3DDDI_PERIODIC_MONITORED_FENCE, the union in D3DDDI_SYNCHRONIZATIONOBJECTINFO2 holds a MonitoredFence structure.

Supported starting with Windows 10.

VidPnTargetID

[out] The output ID that the compositor wishes to receive notifications for.

PeriodicMonitoredFence.hAdapter

[in] A handle to the adapter associated with VidPnSourceID

PeriodicMonitoredFence.VidPnTargetId

PeriodicMonitoredFence.Time

[out] Represents an offset before the VSync (time of VSync – Time parameter). The Time value may not be longer than a VSync interval (1 / DisplayModeRefresh). Time is specified in units of 100ns.

PeriodicMonitoredFence.FenceValueCPUVirtualAddress

[in] Read-only mapping of the fence value for the CPU

PeriodicMonitoredFence.FenceValueGPUVirtualAddress

[in] Read-only mapping of the fence value for the GPU

PeriodicMonitoredFence.EngineAffinity

[in] Defines physical adapters where the GPU VA will be mapped

PeriodicMonitoredFence.Padding

Reserved

A structure that is reserved for future use. This structure contains the following member:

Reserved.Reserved[8]

SharedHandle

[out] A handle to the shared synchronization object if a shared handle currently exists. The driver should share synchronization objects using NT handles. It should set the D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS::NtSecuritySharing to indicate that the object will be shared using NT handles and call D3DKMTShareObjects to get an NT handle. Using global handles is not secure. Any process can guess a global handle and open a shared objects. Global handles are supported only for compatibility reasons with old D3D runtimes.

Requirements

Requirement Value
Minimum supported client Windows 7
Header d3dukmdt.h (include D3dumddi.h, D3dkmddi.h)

See also

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DDDI_SYNCHRONIZATIONOBJECT_TYPE

D3DKMTCreateSynchronizationObject

D3DKMT_CREATESYNCHRONIZATIONOBJECT2