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 创建这些设备。 若要创建非系统设备,驱动程序将 DXGK_CREATEDEVICEFLAGS 结构的 Flags.SystemDevice 成员设置为零,并在 pCreateDevice 参数中传递指向此结构的指针。
显示微型端口驱动程序调用 DXGKCB_DESTROYCONTEXTALLOCATION 以释放通过 DxgkCbCreateContextAllocation 分配的上下文资源。
目标上下文分配的虚拟地址
若要确保操作系统为目标上下文分配设置有效的 (非 NULL) 虚拟地址, (DXGKARG_BUILDPAGINGBUFFER 结构) 的 InitContextResource-Destination-VirtualAddress>> 成员,当显示微型端口驱动程序调用 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