D3DKMTNotifyWorkSubmission 函数 (d3dkmthk.h)

重要

某些信息与预发行产品相关,在商业发布之前,该产品可能会进行实质性修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。

D3DKMTNotifyWorkSubmission 通知内核模式显示驱动程序 (KMD) 用户模式显示驱动程序 (UMD) 已将工作提交到 GPU。

语法

NTSTATUS D3DKMTNotifyWorkSubmission(
  D3DKMT_NOTIFY_WORK_SUBMISSION *unnamedParam1
);

参数

unnamedParam1

指向 D3DKMT_NOTIFY_WORK_SUBMISSION 结构的指针,该结构标识提交工作的硬件队列。

返回值

如果 D3DKMTNotifyWorkSubmission 成功 ping KMD,则返回STATUS_SUCCESS。 否则,如果指定了无效的硬件队列或标志,则返回相应的错误代码,例如STATUS_INVALID_PARAMETER。

注解

用户模式工作提交 模型中,KMD 不参与工作提交,因此不知道何时在 HWQueue 上提交新工作。 这种低延迟的工作提交路径是模型main动机。 但是,每当在 HWQueue 上提交工时,KMD 都需要收到通知时,存在某些利基方案和硬件限制。 例如,当实时上下文提交工作时,GPU 硬件计划程序要求 KMD 将硬件运行列表从正常切换为实时。 如果 KMD 未参与工作提交,则它无法立即触发运行列表切换,从而导致延迟实时工作执行。

为了满足此需求,KMD 可以在创建门铃时将门 连接状态指定为D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFY。 每当 UMD 看到此门铃状态时,它就会调整其工作提交工作流,以便编写新命令并响铃后,它使用 D3DKMTNotifyWorkSubmission 调用内核。 Dxgkrnl 使用 DxgkDdiNotifyWorkSubmission 将此调用转发到 KMD。

D3DKMTNotifyWorkSubmission 是从 UMD 到 Dxgkrnl 到 KMD 的简单 ping,通知后者已在特定 HWQueue 上提交了新工作,以便 KMD 可以启动特定操作,例如将运行列表切换到实时。

KMD 还可以在创建门铃后动态请求通知。 如果 KMD 检测到应在此硬件队列上通知其工作提交的情况,则它可以通过调用 DxgkrnlDxgkCbDisconnectDoorbell 来断开门铃的连接,状态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