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


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

Важный

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

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

Синтаксис

DXGKDDI_NOTIFYWORKSUBMISSION DxgkddiNotifyworksubmission;

NTSTATUS DxgkddiNotifyworksubmission(
  INOUT_PDXGKARG_NOTIFYWORKSUBMISSION pArgs
)
{...}

Параметры

pArgs

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

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

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

Замечания

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

Чтобы решить эту проблему, KMD может указать состояние подключения doorbell как 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