структура 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, указывающее, является ли объект синхронизации общим.
Если для параметра Shared задано значение 1 (TRUE), объект синхронизации является общим. Если значение Shared равно нулю (FALSE), объект синхронизации не является общим. Дополнительные сведения см. в разделе «Примечания».
NtSecuritySharing
Значение UINT, указывающее, является ли объект синхронизации общим для дескриптора NT. Это означает, что у него нет глобального дескриптора D3DKMT_HANDLE режима ядра для ресурса.
Если ntSecuritySharing имеет значение 1 (TRUE), объект синхронизации является общим, но не имеет глобального D3DKMT_HANDLE дескриптора ресурса.
Примечание
Если для ntSecuritySharing задано значение 1, значение Shared должно быть равно 1. Дополнительные сведения см. в разделе «Примечания».
Поддерживается начиная с Windows 8.
CrossAdapter
Значение UINT, указывающее, является ли объект синхронизации общим объектом ресурса между адаптерами в гибридной системе.
Если параметр CrossAdapter имеет значение 1 (TRUE), объект синхронизации является общим объектом кроссадаптера. Если для CrossAdapter задано значение 0 (FALSE), объект синхронизации не является общим объектом кроссадаптера.
TopOfPipeline
Значение | Значение |
---|---|
TRUE | Указывает, будет ли объект синхронизации сигнализировать, как только содержимое буфера команд, предшествующее ему, полностью скопировано в конвейер GPU, но не обязательно завершено выполнение. Это позволяет повторно использовать буферы команд как можно скорее. |
Ложь. | Объект синхронизации получает сигнал после завершения выполнения предыдущей команды буферов. |
Это значение может быть равно только 1 (TRUE) для отслеживаемых объектов синхронизации ограждения, а для всех остальных типов объектов синхронизации оно должно быть равно нулю (FALSE).
Поддерживается начиная с Windows 10.
NoSignal
Значение | Значение |
---|---|
TRUE | Указывает устройство, на котором создан или открыт объект синхронизации, может отправлять только команды ожидания для него. Попытка отправить сигнальную операцию при установке этого флага вернет STATUS_ACCESS_DENIED. |
Ложь. | Объект синхронизации может быть сигнализирован. |
Это значение может быть равно только 1 (TRUE) для отслеживаемых объектов синхронизации ограждения, а для всех остальных типов объектов синхронизации оно должно быть равно нулю (FALSE).
Поддерживается начиная с Windows 10.
NoWait
Значение | Значение |
---|---|
TRUE | Указывает устройство, на котором создается или открыт объект синхронизации, может отправлять только сигнальные команды для него. Попытка отправить операцию ожидания при установке этого флага вернет STATUS_ACCESS_DENIED. |
Ложь. | Объект синхронизации можно ждать. |
Это значение может быть равно только 1 (TRUE) для отслеживаемых объектов синхронизации ограждения, а для всех остальных типов объектов синхронизации оно должно быть равно нулю (FALSE).
Этот флаг нельзя задать одновременно с флагом NoSignal .
Поддерживается начиная с Windows 10.
NoSignalMaxValueOnTdr
Значение | Значение |
---|---|
TRUE | Указывает планировщику 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
Если этот параметр задан, официанты для общего объекта синхронизации на ЦП будут разблокированы только после того, как общий объект синхронизации будет окончательно уничтожен. По умолчанию официанты ЦП разблокируются при уничтожении локального объекта синхронизации, но общий объект синхронизации main по-прежнему открывается другим локальным объектом синхронизации. Поддерживается начиная с 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 (включая D3dumddi.h, D3dkmddi.h) |
См. также раздел
D3DDDI_SYNCHRONIZATIONOBJECTINFO2