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 中使用创建的内存基础时,SegmentOffsetSizeInBytes 通常会遵循某些页面对齐方式。 这些值在这些 DDI 的引用页上描述,并且始终是 DXGK_DIRTY_BIT_TRACKING_SEGMENT_CAPS::P ageSize 的倍数。

否则,Dxgkrnl 不保证范围或相关保证集合中的地址排序。

有关详细信息,请参阅 脏位跟踪

要求

要求
最低受支持的客户端 Windows 11,版本 24H2 (WDDM 3.2)
标头 d3dkmddi.h
IRQL PASSIVE_LEVEL

另请参阅

DXGKARG_CREATEMEMORYBASIS

DxgkDdiDestroyMemoryBasis