DXGKDDI_PREEMPTCOMMAND回调函数 (d3dkmddi.h)

DxgkDdiPreemptCommand 函数会抢占之前提交到硬件命令执行单元 (中当前排队的 DMA) 缓冲区的直接内存访问。

语法

DXGKDDI_PREEMPTCOMMAND DxgkddiPreemptcommand;

NTSTATUS DxgkddiPreemptcommand(
  [in] IN_CONST_HANDLE hAdapter,
  [in] IN_CONST_PDXGKARG_PREEMPTCOMMAND pPreemptCommand
)
{...}

参数

[in] hAdapter

与显示适配器关联的上下文块的句柄。 显示微型端口驱动程序之前在 DxgkDdiAddDevice 函数的 MiniportDeviceContext 输出参数中向 Microsoft DirectX 图形内核子系统提供了此句柄。

[in] pPreemptCommand

指向 DXGKARG_PREEMPTCOMMAND 结构的指针,该结构描述用于抢占以前提交到硬件命令执行单元的 DMA 缓冲区的命令。

返回值

成功完成后返回 STATUS_SUCCESS 。 如果驱动程序改为返回错误代码,则操作系统会导致发生系统 bug 检查。 有关更多信息,请参见下面的“备注”部分。

注解

如果驱动程序确定硬件已完成处理所有提交的 DMA 缓冲区,并且硬件已通知图形处理单元 (GPU) 计划程序完成--当调用其 DxgkDdiPreemptCommand 函数以抢占 DMA 缓冲区时, 驱动程序应执行以下操作,而不是提交由 PreemptionFenceId 成员标识的 preemptionFenceId成员DXGKARG_PREEMPTCOMMAND 到硬件:

  • 将 IRQL 提升到中断级别。 例如,驱动程序可以调用 DxgkCbSynchronizeExecution 函数,以与其 DxgkDdiInterruptRoutine 函数同步。
  • 通知 GPU 计划程序有关抢占信息。 驱动程序可以直接调用 DxgkCbNotifyInterrupt 函数,也可以调用其 DxgkDdiInterruptRoutine 函数 (例如,如果驱动程序必须执行其他更新以及) 。

    请注意,GPU 计划程序处理硬件因超时检测和恢复 (TDR) 停止响应的实例。

如果驱动程序返回错误代码,则 Microsoft DirectX 图形内核子系统会导致发生系统 bug 检查。 在故障转储文件中, BugCheck 0x119消息指出了错误,该消息具有以下四个参数。
  1. 0x2
  2. 从失败的驱动程序调用返回的 NTSTATUS 错误代码
  3. 指向 DXGKARG_PREEMPTCOMMAND 结构的指针
  4. 指向内部计划程序数据结构的指针
DxgkDdiPreemptCommand 应设置为不可分页,因为它在 IRQL = DISPATCH_LEVEL

要求

要求
最低受支持的客户端 Windows Vista
目标平台 桌面
标头 d3dkmddi.h
IRQL DISPATCH_LEVEL

另请参阅

DXGKARG_PREEMPTCOMMAND

DxgkCbNotifyInterrupt

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine