DXGKDDI_NOTIFYWORKSUBMISSION回调函数 (d3dkmddi.h)
重要
某些信息与预发行产品相关,在商业发布之前,该产品可能会进行实质性修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
DxgkDdiNotifyWorkSubmission 函数通知 KMD 新工作已提交。
语法
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 通过 DxgkDdiNotifyWorkSubmission 将此调用转发到 KMD。
DxgkDdiNotifyWorkSubmission 是从 UMD 到 Dxgkrnl 到 KMD 的简单 ping,通知后者已在特定硬件队列上提交新工作,从而允许 KMD 启动特定操作,例如将运行列表切换到实时。
KMD 还可以在创建门铃后动态请求通知。 如果 KMD 检测到应在此硬件队列上通知其工作提交的情况,则可以先使用 DxgkCbDisconnectDoorbell 断开门铃,状态D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY。 稍后,当 UMD 尝试重新连接门铃时,KMD 可以建立状态为D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFY的连接。
驱动程序应在非常具体且不经常使用的方案中使用此机制,因为它涉及每个工作提交时从 UMD 到 KMD 的往返,如果将其用于广泛的方案,则它违背了低延迟用户模式提交模型的目的。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | WIN11_FUTURE |
标头 | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈