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


Функция D3DKMTNotifyWorkSubmission (d3dkmthk.h)

Важно!

Некоторые сведения относятся к предварительной версии продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

D3DKMTNotifyWorkSubmission уведомляет драйвер отображения в режиме ядра (KMD) о том, что драйвер отображения пользовательского режима (UMD) отправил работу в GPU.

Синтаксис

NTSTATUS D3DKMTNotifyWorkSubmission(
  D3DKMT_NOTIFY_WORK_SUBMISSION *unnamedParam1
);

Параметры

unnamedParam1

Указатель на структуру D3DKMT_NOTIFY_WORK_SUBMISSION , которая идентифицирует очередь оборудования, в которую была отправлена работа.

Возвращаемое значение

D3DKMTNotifyWorkSubmission возвращает STATUS_SUCCESS, если ему удалось проверить связь с KMD. В противном случае возвращается соответствующий код ошибки, например STATUS_INVALID_PARAMETER, если указана недопустимая очередь оборудования или флаг.

Комментарии

В модели отправки работы в пользовательском режиме KMD не участвует в отправке работ и поэтому не знает, когда новая работа отправляется на HWQueue. Этот путь отправки работы с низкой задержкой является main мотивацией модели. Однако существуют определенные нишевые сценарии и аппаратные ограничения, когда KMD необходимо уведомлять при отправке работ на HWQueue. Например, планировщик оборудования GPU требует, чтобы KMD переключил список выполнения оборудования с обычного на режим реального времени, когда контекст реального времени отправляет работу. Если KMD не участвует в отправке работы, он не может активировать параметр списка выполнения немедленно, что приводит к задержке выполнения работ в реальном времени.

Чтобы удовлетворить эту потребность, KMD может указать состояние подключения к дверной звоноку как D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFY во время создания дверной звонок. Всякий раз, когда UMD видит это состояние дверной звонок, он корректирует рабочий процесс отправки таким образом, что после написания новой команды и звонка в дверной звонок он вызывает ядро с помощью D3DKMTNotifyWorkSubmission. Dxgkrnl перенаправляет этот вызов в KMD с помощью DxgkDdiNotifyWorkSubmission.

D3DKMTNotifyWorkSubmission — это простая связь с UMD на Dxgkrnl на KMD, уведомляющая последнего о том, что новая работа была отправлена на определенный HWQueue, чтобы KMD мог инициировать определенные действия, такие как переключение списка выполнения в режиме реального времени.

KMD также может динамически запрашивать уведомление после создания дверной звонок. Если KMD обнаруживает условие, при котором он должен получать уведомления об отправке работ в этой очереди оборудования, он может сначала отключить дверной звонок, вызвав DxgkCbDisconnectDoorbelldxgkrnl с состоянием D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY. Позже, когда UMD попытается повторно подключить дверной звонок, KMD может установить подключение с состоянием D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFY.

Драйверы должны использовать этот механизм в очень конкретных и редких сценариях, так как он включает в себя круговой переход от UMD к KMD при каждой отправке работы, а если он используется для широких сценариев, то он не соответствует цели модели отправки в пользовательском режиме с низкой задержкой.

Дополнительные сведения см. в разделе Рабочая отправка в пользовательском режиме.

Требования

Требование Значение
Минимальная версия клиента Windows 11, версия 24H2 (WDDM 3.2)
Верхняя часть d3dkmthk.h

См. также раздел

D3DKMT_NOTIFY_WORK_SUBMISSION

D3DKMTCreateDoorbell

DxgkCbDisconnectDoorbell

DxgkDdiNotifyWorkSubmission