DXGKDDI_SUSPENDCONTEXT回调函数 (d3dkmddi.h)

指示 GPU 挂起上下文。 如果 GPU 未确认 TDR 中的暂停完成 (超时检测和恢复) 超时,OS 将检测引擎超时并执行引擎重置。

语法

DXGKDDI_SUSPENDCONTEXT DxgkddiSuspendcontext;

NTSTATUS DxgkddiSuspendcontext(
  IN_CONST_HANDLE hAdapter,
  IN_CONST_PDXGKARG_SUSPENDCONTEXT pSuspendContext
)
{...}

参数

hAdapter

要抢占并标记为挂起的硬件上下文。 这种类型的抢占请求没有宽限期,预计 GPU 会尽快接受。

pSuspendContext

指向 DXGKARG_SUSPENDCONTEXT 结构的指针,该结构包含单调递增的每个上下文值,在抢占请求完成后,GPU 上下文挂起的中断将报告该值。 在发出围栏信号之前,OS 无法假设 GPU 已挂起。

返回值

如果上下文在此调用时已挂起,则返回STATUS_SUCCESS。 否则,此值设置为STATUS_PENDING,当通过中断向 contextSuspendFence 发出信号时,暂停操作将完成。

注解

通过设置 DXGKARG_SUSPENDCONTEXT 的相应成员,然后调用 DxgkddiSuspendContext 来注册此回调函数的实现。

即使 GPU 可以启动轮循机制抢占,但 OS 仍需要一种方法来抢占上下文,原因包括需要移动其分配或执行 GPU 电源转换。

当 OS 暂停上下文、不等待暂停确认、恢复并再次挂起上下文时,上下文挂起值是必需的。 暂停值将允许 OS 区分以前的暂停确认和最新的暂停确认。

暂停上下文后,假定对其的所有引用都从 GPU 消失,操作系统可以随意销毁上下文或移动其内存。 与 WDDM 2.3 或更早版本不同,WDDM 2.4 计划模式中不存在先前由 ContextSwitch 标志指示的单独 NULL 上下文切换命令 (DdiSubmitCommandVirtual) ,因为 DdiSuspendContext 应该执行此操作。

要求

要求
Header d3dkmddi.h