DXGKDDI_CREATEALLOCATION回调函数 (d3dkmddi.h)
内核模式显示驱动程序 (KMD) DxgkDdiCreateAllocation 函数创建系统或视频内存的分配。
语法
DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;
NTSTATUS DxgkddiCreateallocation(
[in] IN_CONST_HANDLE hAdapter,
[in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}
参数
[in] hAdapter
与显示适配器关联的上下文块的句柄。 KMD 以前提供了此句柄,用于在 MiniportDeviceContextDxgkDdiAddDevice 函数的输出参数中 Dxgkrnl。
[in/out] pCreateAllocation
指向包含用于创建分配的信息的 DXGKARG_CREATEALLOCATION 结构的指针。
返回值
DxgkDdiCreateAllocation 返回以下值之一:
返回代码 | 说明 |
---|---|
STATUS_SUCCESS | DxgkDdiCreateAllocation 已成功创建分配。 |
STATUS_INVALID_PARAMETER | 传递的参数包含阻止 DxgkDdiCreateAllocation 完成的错误。 |
STATUS_NO_MEMORY | DxgkDdiCreateAllocation 无法分配完成所需的内存。 |
STATUS_GRAPHICS_DRIVER_MISMATCH | KMD 与发起 DxgkDdiCreateAllocation调用的用户模式显示驱动程序(UMD)不兼容。 |
言论
UMD 调用 pfnAllocateCb后,Dxgkrnl 调用 KMD 的 DxgkDdiCreateAllocation 函数来创建分配。 KMD 必须解释专用数据(在 pPrivateDriverData 每个分配的 DXGK_ALLOCATIONINFO 结构的成员)(从 UMD 传递),并且必须确定通过视频内存管理器创建每个分配所需的参数列表。 有关 KMD 如何将这些参数提供给视频内存管理器的详细信息,请参阅 在创建分配时指定段。
KMD 必须返回分配句柄,该句柄通常是指向包含有关分配信息的专用驱动程序数据结构的指针。 UMD 可以随时调用 DxgkCbGetHandleData 函数来检索分配句柄的专用数据。 因此,不需要 KMD 来维护专用分配句柄表。 事实上,我们强烈建议不要使用专用句柄表,因为它们可能会在显示模式切换方案中过时或与 DirectX 图形内核子系统同步,例如快速用户切换、热拔出等。
用户模式显示驱动程序将分配给资源或设备。 若要确定分配是否属于资源,显示微型端口驱动程序可以检查 资源 位字段标志是否在 标志DXGKARG_CREATEALLOCATION 结构的成员中设置 pCreateAllocation 参数 DxgkDdiCreateAllocation 指向的 DXGKARG_CREATEALLOCATION 成员。 如果分配属于资源,则显示微型端口驱动程序可以(但不需要)返回资源句柄,该句柄通常是指向描述资源的专用驱动程序数据结构的指针。 如果 DirectX 图形内核子系统调用 DxgkDdiCreateAllocation 为现有资源创建附加分配,则 hResource 成员DXGKARG_CREATEALLOCATION包含上一 DxgkDdiCreateAllocation 调用该资源的句柄。 如有必要,显示微型端口驱动程序可以在调用 DxgkDdiCreateAllocation期间更改资源句柄。
如果用户模式显示驱动程序在命令缓冲区中放置资源句柄,则显示微型端口驱动程序可以通过调用 DxgkCbGetHandleData来检索专用数据。 显示微型端口驱动程序还可以通过调用 DxgkCbEnumHandleChildren 函数来枚举资源的所有子分配。
从 Windows 7 开始,如果显示微型端口驱动程序处理对 DxgkDdiCreateAllocation 函数的调用来创建 GDI 硬件加速的分配,驱动程序应设置分配的大小(包括 CPU 可见分配的间距值),pCreateAllocation->pAllocationInfo->大小。
在 DxgkDdiCreateAllocation 调用中创建的资源属于适配器而不是设备。 显示微型端口驱动程序不应在专用分配和资源数据结构中的任何位置引用设备数据。 由于图面共享,资源可能会在用户模式显示驱动程序从中创建资源的设备销毁后使用。
应 DxgkDdiCreateAllocation 进行分页。
分配历史记录缓冲区
从 Windows 8.1 开始,调用 DxgkDdiCreateAllocation 时,KMD 可以设置 DXGK_ALLOCATIONINFOFLAGS。HistoryBuffer 成员,以指示用户模式驱动程序可以管理历史记录缓冲区的创建和销毁。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista |
目标平台 | 桌面 |
标头 | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |