D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS structure (d3dukmdt.h)

The D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS structure identifies attributes of a synchronization object.

Syntax

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 LocalMemoryPreferred : 1;
#if ...
      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;

Members

Shared

A UINT value that specifies whether the synchronization object is shared.

If Shared is set to 1 (TRUE), the synchronization object is shared. If Shared is set to zero (FALSE), the synchronization object is not shared. For more information, see the Remarks section.

NtSecuritySharing

A UINT value that specifies whether the synchronization object is shared with an NT handle, meaning that it does not have a global D3DKMT_HANDLE kernel-mode handle to the resource.

If NtSecuritySharing is set to 1 (TRUE), the synchronization object is shared but does not have a global D3DKMT_HANDLE handle to the resource.

Note

If NtSecuritySharing is set to 1, Shared must be set to 1. For more information, see the Remarks section.

Supported starting with Windows 8.

CrossAdapter

A UINT value that specifies whether the synchronization object is a shared cross-adapter resource object on a hybrid system.

If CrossAdapter is set to 1 (TRUE), the synchronization object is a shared cross-adapter object. If CrossAdapter is set to zero (FALSE), the synchronization object is not a shared cross-adapter object.

TopOfPipeline

Value Meaning
TRUE Specifies whether the synchronization object is signaled as soon as the contents of command buffer preceding it is entirely copied to the GPU pipeline, but not necessarily completed execution. This behavior allows reusing command buffers as soon as possible.
FALSE The synchronization object is signaled after the preceding command buffers completed execution.

This value can only be set to 1 (TRUE) for monitored fence synchronization objects, and it should be set to zero (FALSE) for all other synchronization object types.

Supported starting with Windows 10.

NoSignal

Value Meaning
TRUE Specifies the device this sync object is created or opened on can only submit wait commands for it. An attempt to submit a signal operation when this flag is set will return STATUS_ACCESS_DENIED.
FALSE The synchronization object can be signaled.

This value can only be set to 1 (TRUE) for monitored fence synchronization objects, and it should be set to zero (FALSE) for all other synchronization object types.

Supported starting with Windows 10.

NoWait

Value Meaning
TRUE Specifies the device this sync object is created or opened on can only submit signal commands for it. An attempt to submit a wait operation when this flag is set will return STATUS_ACCESS_DENIED.
FALSE The synchronization object can be waited on.

This value can only be set to 1 (TRUE) for monitored fence synchronization objects, and it should be set to zero (FALSE) for all other synchronization object types.

This flag cannot be set simultaneously with NoSignal flag.

Supported starting with Windows 10.

NoSignalMaxValueOnTdr

Value Meaning
TRUE Instructs the GPU scheduler to bypass the aforementioned signaling of the monitored fence to the maximum value in TDR cases.
FALSE The GPU scheduler will signal the monitored fence to the maximum value when a device that can potentially signal it is affected by the GPU reset (TDR).

Supported starting with Windows 10.

NoGPUAccess

When set, the fence will not be mapped into the GPU virtual address space and will always stored as a 64-bit value (regardless of adapter caps). Only packet-based signal/wait operations are supported.

SignalByKmd

When set, the fence can be signaled by the kernel-mode driver (KMD). This flag can only be used with D3DDDI_CPU_NOTIFICATION objects. Supported starting with Windows 11 (WDDM 3.0).

LocalMemoryPreferred

When set, indicates that the fence should be placed in GPU local memory if possible. Supported starting with Windows 11 version 22H2 (WDDM 3.1).

Reserved

This member is reserved and should be set to zero.

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS_RESERVED0

This member is reserved and should be set to zero.

Supported starting with Windows 8.

Value

A member in the union that is contained in D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS that can hold one 32-bit value that identifies attributes of a synchronization object.

Remarks

Objects to be shared by using the D3DKMTShareObjects function must first be created with the NtSecuritySharing flag value set. This flag value is available in the D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS, and D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS structures.

Drivers should follow these guidelines on D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS flags:

  • If the synchronization object is not shared, set both Shared and NtSecuritySharing to 0.

  • If the synchronization object is shared with a D3DKMT_HANDLE data type, set Shared = 1 and NtSecuritySharing = 0.

  • If the synchronization object is shared with an NT handle to the process (and without a global D3DKMT_HANDLE kernel-mode handle to the resource), set Shared = 1 and NtSecuritySharing = 1.

Requirements

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

See also

D3DDDI_SYNCHRONIZATIONOBJECTINFO2

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DKMTShareObjects

D3DKMT_CREATEALLOCATIONFLAGS

D3DKMT_CREATEKEYEDMUTEX2_FLAGS