DXGKDDI_CREATEMEMORYBASIS回调函数 (d3dkmddi.h)
KMD 的 DxgkDdiCreateMemoryBasis 函数为内存范围集合创建句柄,这些内存范围表示在脏位跟踪期间操作的分配。
语法
DXGKDDI_CREATEMEMORYBASIS DxgkddiCreatememorybasis;
HANDLE DxgkddiCreatememorybasis(
IN_CONST_HANDLE hAdapter,
IN_CONST_PDXGKARG_CREATEMEMORYBASIS pArgs
)
{...}
参数
hAdapter
[in]与显示适配器关联的上下文块的句柄。 KMD 以前在 DxgiDdiAddDevice 函数的 MiniportDeviceContext 输出参数中向 Dxgkrnl 提供了此句柄。
pArgs
[in]指向 DXGKARG_CREATEMEMORYBASIS 结构的指针,该结构包含所创建的基础的信息。
返回值
DxgkDdiCreateMemoryBasis 返回用于跟踪范围集合的 KMD 引用的 HANDLE。 KMD 应该能够在后续命令(如 DxgkDdiDestroyMemoryBasis)中将此信息转换为基础信息。
注解
跟踪 VRAM 上的修改操作适用于可能无法连续支持的分配。 因此,在跟踪脏位中表示的物理地址由表示要执行的分配的范围集合组成。 DxgkDdiCreateMemoryBasis 返回 KMD 用于跟踪这些范围的引用的句柄。
KMD 可以依赖于以下固定项:
对于 Ranges 中的每个范围, SegmentOffset 和 (SegmentOffset + SizeInBytes - 1) 表示 SegmentId 引用的段上的有效地址。
所有 范围 都是成对脱节的;也就是说,任何两个区域之间的交集始终为 null。
当某些脏跟踪 DDI 中使用创建的内存基础时,SegmentOffset 和 SizeInBytes 通常会遵循某些页面对齐方式。 这些值在这些 DDI 的引用页上描述,并且始终是 DXGK_DIRTY_BIT_TRACKING_SEGMENT_CAPS::P ageSize 的倍数。
否则,Dxgkrnl 不保证范围或相关保证集合中的地址排序。
有关详细信息,请参阅 脏位跟踪。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 11,版本 24H2 (WDDM 3.2) |
标头 | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |