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


функция обратного вызова DXGKDDI_NOTIFYWORKSUBMISSION (d3dkmddi.h)

Важно!

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

Функция DxgkDdiNotifyWorkSubmission уведомляет KMD о том, что UMD отправила новую работу.

Синтаксис

DXGKDDI_NOTIFYWORKSUBMISSION DxgkddiNotifyworksubmission;

NTSTATUS DxgkddiNotifyworksubmission(
  INOUT_PDXGKARG_NOTIFYWORKSUBMISSION pArgs
)
{...}

Параметры

pArgs

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

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

DxgkDdiNotifyWorkSubmission должен завершиться успешно и вернуть STATUS_SUCCESS.

Комментарии

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

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

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

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

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

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

Требования

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

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

DXGKARG_NOTIFYWORKSUBMISSION

**DxgkDdiCreateDoorbell

DxgkCbDisconnectDoorbell