Поделиться через


структура 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 сигнализирует отслеживаемой заборе максимальному значению, когда устройство, которое потенциально может сигнализировать о его сбросе GPU (TDR).

Поддерживается начиная с 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

Если задано, официанты для объекта общей синхронизации на ЦП будут разблокированы только при окончательном уничтожении объекта общей синхронизации. По умолчанию официанты ЦП разблокируются при уничтожении объекта локальной синхронизации, но основной объект общей синхронизации по-прежнему открыт другим локальным объектом синхронизации. Поддерживается начиная с 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 (include D3dumddi.h, D3dkmddi.h)

См. также

D3DDDI_SYNCHRONIZATIONOBJECTINFO2

D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS

D3DKMTShareObjects

D3DKMT_CREATEALLOCATIONFLAGS

D3DKMT_CREATEKEYEDMUTEX2_FLAGS