DXGKCB_CREATECONTEXTALLOCATION回调函数 (d3dkmddi.h)

DXGKCB_CREATECONTEXTALLOCATION 分配 GPU 上下文或特定于设备的上下文。

语法

DXGKCB_CREATECONTEXTALLOCATION DxgkcbCreatecontextallocation;

NTSTATUS DxgkcbCreatecontextallocation(
  [in/out] INOUT_PDXGKARGCB_CREATECONTEXTALLOCATION unnamedParam1
)
{...}

参数

[in/out] unnamedParam1

指向 DXGKARGCB_CREATECONTEXTALLOCATION 结构的指针,该结构指定要分配的上下文的属性。

返回值

如果成功,DXGKCB_CREATECONTEXTALLOCATION 将返回 STATUS_SUCCESS。 否则,它将返回 Ntstatus.h中定义的错误代码之一。

言论

从 WDDM 1.2 开始,显示微型端口驱动程序可以分配特定于 GPU 的上下文(GPU 上下文分配)或特定于设备的上下文(设备上下文分配)。

GPU 上下文分配允许 GPU 从 DMA 缓冲区存储上下文状态,这些缓冲区在执行期间被抢占。 驱动程序创建与 GPU 上下文关联的分配,以在必要时保存其状态。 作系统确保在将来自此上下文的命令置于 GPU 的硬件执行队列中之前,上下文分配是驻留的。 在将另一个上下文中的命令置于硬件执行队列中之前,上下文将保持驻留状态。

此外,作系统还支持延迟 GPU 上下文切换,前提是硬件上下文状态在完成属于上下文的命令后保留在 GPU 上。 这样,只有在将来自不同上下文的命令提交到硬件队列时,才会在 GPU 上切换上下文。

DXGKCB_XXX 函数由 Dxgkrnl实现。 若要使用此回调函数,请设置 DXGKARGCB_ALLOCATEPAGESFORMDL 的成员,然后通过 DXGKRNL_INTERFACE调用 DxgkCbCreateContextAllocation

GPU 上下文分配

GPU 上下文分配只能用于非系统上下文。 显示微型端口驱动程序通过调用 DxgkDdiCreateContext来创建这些上下文。 若要创建非系统上下文,驱动程序将 DXGK_CREATECONTEXTFLAGS 结构的 SystemContext 成员设置为零,并将指向 pCreateContext 参数中的此结构的指针传递给此结构。

设备上下文分配遵循类似的模型,不同之处在于,对于属于其关联的设备的任何上下文,设备上下文将保持驻留状态。 此模型允许驱动程序使用 GPU 上下文分配来存储 GPU 上下文保存区域(CSA)数据,并使用设备上下文分配来存储页表数据。

设备上下文分配

设备上下文分配只能用于非系统设备。 显示微型端口驱动程序通过调用 DxgkDdiCreateDevice来创建这些设备。 若要创建非系统设备,驱动程序将 Flags.SystemDeviceDXGK_CREATEDEVICEFLAGS 结构的成员设置为零,并将指向 pCreateDevice 参数中的此结构的指针传递给此结构。

显示微型端口驱动程序调用 DXGKCB_DESTROYCONTEXTALLOCATION 释放通过 DxgkCbCreateContextAllocation分配的上下文资源。

目标上下文分配的虚拟地址

若要确保作系统为目标上下文分配设置有效的(非 NULL)虚拟地址(InitContextResource->Destination->VirtualAddressDXGKARG_BUILDPAGINGBUFFER 结构的成员),当显示微型端口驱动程序调用 DxgkCbCreateContextAllocation 它必须:

要求

要求 价值
最低支持的客户端 Windows 8 (WDDM 1.2)
支持的最低服务器 Windows Server 2012
目标平台 桌面
标头 d3dkmddi.h (包括 D3dkmddi.h)
IRQL PASSIVE_LEVEL

另请参阅

DXGK_ALLOCATIONINFOFLAGS

DXGK_CREATECONTEXTFLAGS

DXGK_CREATEDEVICEFLAGS

DXGKARG_BUILDPAGINGBUFFER

DXGKARGCB_CREATECONTEXTALLOCATION

DXGKCB_DESTROYCONTEXTALLOCATION

DxgkDdiCreateContext

DxgkDdiCreateDevice

DXGKRNL_INTERFACE