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 它必须:
- 设置 DXGK_ALLOCATIONINFOFLAGS 结构的 CpuVisible 和 Protected 成员。
- 通过设置 DXGKARGCB_CREATECONTEXTALLOCATION 结构的 SupportedSegmentSet 成员,将分配中的页面仅分页到光圈段。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 8 (WDDM 1.2) |
支持的最低服务器 | Windows Server 2012 |
目标平台 | 桌面 |
标头 | d3dkmddi.h (包括 D3dkmddi.h) |
IRQL | PASSIVE_LEVEL |
另请参阅
DXGKARGCB_CREATECONTEXTALLOCATION