структура 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