当前位置: 首页 > news >正文

window 显示驱动开发-创建分配时指定段

显示微型端口驱动程序指定并返回有关其内存段的信息,当视频内存管理器调用驱动程序的 DxgkDdiCreateAllocation 函数时,它更喜欢视频内存管理器使用这些信息。 在调用 DxgkDdiCreateAllocation 时,驱动程序为视频资源创建分配。 驱动程序在描述分配的 DXGK_ALLOCATIONINFO 结构中返回支持的段和段首选项的标识符。

从返回的段信息中,视频内存管理器确定为给定操作分页的相应内存段。

1. 驱动程序如何指定内存段信息

当 VidMM 调用驱动程序的 DxgkDdiCreateAllocation 来创建新的 GPU 资源(如纹理、缓冲区)时:

1.1驱动程序填充 DXGK_ALLOCATIONINFO 结构:

  • 该结构包含 支持的段(SupportedSegments) 和 段首选项(PreferredSegment) 的信息。
  • VidMM 使用这些信息来决定资源应该分配在哪个内存段(如 本地显存、系统内存、光圈段 等)。

1.2关键字段:

  • SupportedSegments:一个位掩码,表示该分配可以放在哪些段(例如,DXGK_SEGMENT_VIDEO_MEMORY | DXGK_SEGMENT_SYSTEM_MEMORY)。
  • PreferredSegment:驱动程序建议的首选段(如 DXGK_SEGMENT_VIDEO_MEMORY 表示优先放在显存)。
  • Flags:可选标志,如 DXGK_ALLOCATIONFLAG_CACHED(是否可缓存)、DXGK_ALLOCATIONFLAG_CONTIGUOUS(是否需要连续内存)等。

2. VidMM 如何决定使用哪个段

2.1VidMM 根据以下因素选择最终的内存段:

驱动程序的 SupportedSegments 和 PreferredSegment:

  • 如果 PreferredSegment 可用(如显存足够),VidMM 会优先使用它。
  • 否则,VidMM 会回退到其他支持的段(如系统内存)。

2.2内存压力(Memory Pressure):

  • 如果显存不足,VidMM 可能会选择系统内存(即使 PreferredSegment 是显存)。
  • 如果资源需要频繁 CPU 访问(如动态缓冲区),VidMM 可能直接选择系统内存。

2.3分页策略(Paging Policy):

  • VidMM 可能会动态迁移资源(如从显存逐出到系统内存),而驱动程序无需感知。

3. 典型内存段类型

段类型描述适用场景
DXGK_SEGMENT_VIDEO_MEMORY本地显存(GPU 专用)高性能渲染目标、纹理
DXGK_SEGMENT_SYSTEM_MEMORY系统内存(可分页)CPU 频繁访问的资源(如 staging buffers)
DXGK_SEGMENT_APERTURE光圈段(PCIe 映射内存)DMA 缓冲区、共享内存
DXGK_SEGMENT_WRITE_COMBINEDWrite-Combined 内存(优化 CPU 写)CPU 频繁写入的资源(如动态顶点缓冲区)

4. 驱动程序的职责

4.1正确设置 SupportedSegments 和 PreferredSegment:

  • 例如,一个 渲染目标 应该优先放在 DXGK_SEGMENT_VIDEO_MEMORY,而一个 staging buffer 可能更适合 DXGK_SEGMENT_SYSTEM_MEMORY。

4.2处理内存不足情况:

  • 如果 VidMM 无法满足首选段(如显存不足),驱动程序必须能适应其他段(如回退到系统内存)。

4.3支持分页操作:

  • 如果资源被逐出(evicted),驱动程序可能需要处理 数据迁移(如 DxgkDdiBuildPagingBuffer 生成 GPU 命令来移动数据)。

5. 示例场景

场景 1:创建纹理

驱动程序行为:

  • 设置 SupportedSegments = DXGK_SEGMENT_VIDEO_MEMORY | DXGK_SEGMENT_SYSTEM_MEMORY。
  • 设置 PreferredSegment = DXGK_SEGMENT_VIDEO_MEMORY(优先放显存)。

VidMM 决策:

  • 如果显存足够 → 分配在显存。
  • 如果显存不足 → 分配在系统内存(可能稍后分页回显存)。

场景 2:创建 CPU 可写缓冲区
驱动程序行为:

  • 设置 SupportedSegments = DXGK_SEGMENT_SYSTEM_MEMORY | DXGK_SEGMENT_WRITE_COMBINED。
  • 设置 PreferredSegment = DXGK_SEGMENT_WRITE_COMBINED(优化 CPU 写入性能)。

VidMM 决策:优先分配 WRITE_COMBINED 内存,如果不可用则回退到普通系统内存。

6. 总结

  1. DxgkDdiCreateAllocation 是驱动程序影响内存分配的关键点,通过 DXGK_ALLOCATIONINFO 提供段信息。
  2. VidMM 综合考虑驱动偏好、内存压力、分页策略 来决定最终分配位置。
  3. 驱动程序必须适应不同段(如显存不足时回退到系统内存)。
  4. 典型段类型:显存(高性能)、系统内存(CPU 访问)、光圈段(DMA 缓冲区)、Write-Combined(优化 CPU 写)。

通过合理配置 SupportedSegments 和 PreferredSegment,驱动程序可以优化 GPU 资源的内存分配,平衡性能和兼容性。

相关文章:

  • 实物工厂零件画图案例(上)
  • git merge和git rebase
  • 【Qt】qss语法详解
  • 基于单片机的视力保护仪设计与实现
  • Elecron 相关介绍以及常见的面试问题
  • 18.Excel数据透视表:第1部分创建数据透视表
  • 基于Java的家政服务平台设计与实现(代码+数据库+LW)
  • 分析Docker容器Jvm 堆栈GC信息
  • 【Linux】网络基础2
  • TS类型操作工具汇总
  • switch-case 巧妙使用(case穿透)
  • InfluxDB-数据看板实现流程:从数据采集到可视化展示
  • Spring Boot 自动装配原理详解
  • Cascadeur2025如何无限制导出FBX文件
  • 无偿帮写服务器配置|限时30天|名额100
  • 聊聊JetCache的CachePenetrationProtect
  • Xianyu AutoAgent,AI闲鱼客服机器人
  • 深度学习的相关术语介绍(杂乱版-想到啥介绍啥)
  • uniapp-商城-56-后台 新增商品(弹窗属性继续分析)
  • UDP--DDR--SFP,FPGA实现之指令监测模块实现
  • 跨文化戏剧的拓荒者与传承者——洪深与复旦剧社的百年回响
  • 王毅谈中拉命运共同体建设“五大工程”及落实举措
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 从这些电影与影像,看到包容开放的上海
  • 港股持续拉升:恒生科技指数盘中涨幅扩大至6%,恒生指数涨3.3%
  • 十三届全国政协经济委员会副主任张效廉被决定逮捕