window 显示驱动开发-复制深度模具值

article/2025/8/12 20:55:33

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 Blt 函数,将深度模具值从视频内存复制到系统内存,反之亦然。 驱动程序和硬件必须从或转换到驱动程序支持的所有不透明深度模具格式 (,即 D3DDDIFORMAT 枚举类型定义的所有格式(D3DDDIFMT_D*_LOCKABLE) 以下任何格式除外)执行格式转换:

  • D3DDDIFMT_D16_LOCKABLE
  • D3DDDIFMT_D32_LOCKABLE
  • D3DDDIFMT_D32F_LOCKABLE
  • D3DDDIFMT_S8_LOCKABLE

驱动程序放弃任何通道 (深度或模具) 以源格式存在,但不存在于目标格式。 运行时不允许在不共享任何常见通道类型的深度模具图面之间进行复制。

驱动程序首先将源深度值转换为 32 位无符号整数值,然后从 32 位无符号整数值转换为目标表示形式。 以下规则适用于这两种转换:

  • 如果源深度值为浮点值,则会应用 [0,1] 的固定值,并将结果乘以_MAX_UINT。
  • 如果源为整型,而目标为精度较低的整数,则会删除最右侧的额外位。
  • 如果源为整型,目标为更高精度整数,则会从最左侧有效位复制最右侧的额外位。
  • 如果源为整型,目标为浮点值,则将 32 位整数转换为浮点值,结果将除以_MAX_UINT。

驱动程序不需要为非均匀分布深度值提供特殊处理。

驱动程序将源模具值扩展到 8 位整数 (即,驱动程序将源模具值填充在左侧) 零。 如果目标表示形式使用较低的精度,则驱动程序应放弃最重要的位来执行转换。

用户模式显示驱动程序必须支持任意子实体的深度模具副本。 但是,在深度模具复制期间,驱动程序不需要执行镜像、拉伸或颜色键操作。 深度模具复制期间隐式需要点采样。

1. 核心功能要求

驱动程序必须通过 Blt 函数实现以下深度/模板(Depth/Stencil)操作:

  1. 视频内存 ↔ 系统内存 的深度/模板数据复制。
  2. 格式转换:支持所有不透明深度/模板格式(D3DDDIFMT_D*_LOCKABLE)的相互转换,但以下格式除外:
  • D3DDDIFMT_D16_LOCKABLE
  • D3DDDIFMT_D32_LOCKABLE
  • D3DDDIFMT_D32F_LOCKABLE
  • D3DDDIFMT_S8_LOCKABLE

2. 格式转换规则

(1) 深度值转换流程

步骤1:源 → 32位无符号整数

浮点源(如 D3DDDIFMT_D32F_LOCKABLE):

\text{uint32\_value} = \text{clamp}(float\_value, 0, 1) \times 2^{32} - 1

整型源(如 D3DDDIFMT_D24_UNORM_S8_UINT):直接扩展为 32 位(高位补零)。

步骤2:32位无符号整数 → 目标格式

  • 目标为整型(如 D3DDDIFMT_D16_UNORM):截断低位(保留高位)或复制高位到低位(精度提升)。
  • 目标为浮点(如 D3DDDIFMT_D32F):
float\_value = \frac{uint32\_value}{2^{32} - 1}

(2) 模板值转换规则

  • 源 → 8位无符号整数:低位补零扩展(如 4 位模板 0b1011 → 0b00001011)。
  • 目标精度更低时:丢弃高位(如 8 位模板 0b11001011 → 4 位 0b1011)。

3. 驱动实现要求

(1) 必须支持的功能

功能说明
子矩形复制支持复制深度/模板表面的任意区域(无需支持拉伸/镜像)。
点采样隐式要求(禁止插值或过滤)。
通道丢弃若目标格式无对应通道(如仅深度→仅模板),丢弃无关数据。

(2) 禁止支持的功能

功能原因
颜色键(Color Key)深度/模板数据不适用。
拉伸/镜像仅允许 1:1 像素映射。

(3) 代码示例

HRESULT APIENTRY Blt(D3D10DDI_HDEVICE hDevice,CONST D3D10DDIARG_BLT* pBlt
) {// 检查深度/模板格式兼容性if (!IsValidDepthStencilCopy(pBlt->SrcFormat, pBlt->DstFormat)) {return E_INVALIDARG;}// 执行格式转换与复制ConvertDepthStencil(pBlt->pSrcData, pBlt->SrcFormat,pBlt->pDstData, pBlt->DstFormat,pBlt->SrcBox, pBlt->DstPoint);return S_OK;
}

4. 格式兼容性规则

运行时强制要求:

  • 源和目标格式必须至少共享一个通道类型(深度或模板)。
  • 例如:D3DDDIFMT_D24_UNORM_S8_UINT 可与 D3DDDIFMT_D32_FLOAT 互转(共享深度通道),但不能与 D3DDDIFMT_S8_UINT 互转(无共享通道)。

5. 性能优化建议

  • 硬件加速路径:优先使用 GPU 专用指令(如 MOV_DEPTH_STENCIL)而非 CPU 转换。
  • 批量复制:合并多个子矩形操作为单次 Blt 调用。
  • 缓存友好布局:确保深度/模板内存布局符合硬件访问模式(如 Tile-Based Rendering)。

6. WHCK 认证测试项

测试项验证目标
Device.Graphics.D3D10.DepthStencilBlt深度/模板复制与格式转换功能正确性。
Device.Graphics.D3D10.DepthStencilSubRect子矩形复制支持。

7. 调试与问题排查

常见错误:

  • 通道不匹配:检查源和目标格式是否共享至少一个通道。
  • 精度丢失:验证浮点→整型转换的舍入方式。

工具推荐:

  • PIX on Windows:捕获 Blt 操作前后的深度/模板数据。
  • DirectX Debug Layer:启用调试输出检测非法格式组合。

8. 总结

关键点:

  • 驱动需实现深度/模板的精确格式转换,遵循位精度规则。
  • 子矩形复制为必需功能,但无需支持复杂变形。

硬件协作:利用 GPU 固定功能单元加速转换(如存在)


http://www.hkcw.cn/article/SxHpZXHiJp.shtml

相关文章

pc端小卡片功能-原生JavaScript金融信息与节日日历

代码如下 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>金融信息与节日日历</title><…

Redis最佳实践——购物车优化详解

Redis在电商购物车高并发读写场景下的优化实践 一、购物车业务场景分析 典型操作特征 读/写比例 ≈ 8:2高峰QPS可达10万单用户最大商品数500操作类型&#xff1a;增删改查、全选/反选、数量修改 技术挑战 高并发下的数据一致性海量数据存储与快速访问实时价格计算与库存校验分…

[网页五子棋][对战模块]处理连接成功,通知玩家就绪,逻辑问题(线程安全,先手判定错误)

文章目录 处理连接成功通知玩家就绪逻辑图问题 1&#xff1a;线程安全问题 2&#xff1a;先手判定错误两边都是提示&#xff1a;轮到对方落子![image.png](https://i-blog.csdnimg.cn/img_convert/c570cd26eadbe87ed467bc4edaa7945e.png) 处理连接成功 实现 GameAPI 的 afterC…

Python训练打卡Day39

图像数据与显存 知识点回顾 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 一、图像数据的格式 1.1灰度图像 作为图像数据&#xff0c;相较于结构化数据&#x…

pycharm打印时不换行,方便对比观察

原来&#xff1a; 优化&#xff1a; import torch torch.set_printoptions(linewidth200) 优化结果&#xff1a;

Practice 2025.6.1—— 二叉树进阶面试题(2)

文章目录 二叉树进阶面试题(2)Leetcode_144 二叉树的前序遍历(使用非递归)Leetcode_94 二叉树的中序遍历(使用非递归)Leetcode_145 二叉树的后序遍历(使用非递归) 二叉树进阶面试题(2) 本篇文章将继续进行二叉树的进阶面试题的讲解&#xff0c;其中&#xff0c;本部分将重点针…

DOCKER使用记录

1、拉取镜像 直接使用docker pull <image>&#xff0c;大概率会出现下面的报错信息&#xff1a; (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …

Vert.x学习笔记-EventLoop与Context的关系

Vert.x学习笔记 1. EventLoop 的核心作用2. Context 的核心作用3. EventLoop 与 Context 的关系1. 事件循环&#xff08;EventLoop&#xff09;的核心职责2. 上下文&#xff08;Context&#xff09;的核心职责3. 事件循环与上下文的关系&#xff08;1&#xff09;一对一绑定&am…

LTSPICE仿真电路:(三十一)HOWLAND电流源

1.HOWLAND电流源 推导过程&#xff1a;这个运放是正负反馈都存在&#xff0c;但负反馈是大于正反馈的&#xff0c;因正反馈多出一个Rload&#xff0c;所以可以使用虚短续断&#xff0c;运放的U等于U-&#xff0c;负反馈处得出Uout与U-的关系&#xff0c;再利用正相端节点电流算…

LLaMA-Factory - 批量推理(inference)的脚本

scripts/vllm_infer.py 是 LLaMA-Factory 团队用于批量推理&#xff08;inference&#xff09;的脚本&#xff0c;基于 vLLM 引擎&#xff0c;支持高效的并行推理。它可以对一个数据集批量生成模型输出&#xff0c;并保存为 JSONL 文件&#xff0c;适合大规模评测和自动化测试。…

引擎下线缺陷检测系统ENAgent

引擎下线缺陷检测系统ENAgent采用信号处理技术以及人工智能技术对引擎生产线下线的各种引擎在生产线上进行缺陷实时检测&#xff0c;通过振动信号、声纹信号等信号融合集成&#xff0c;在线实时判断其是否存在缺陷以及进行故障诊断。ENAgent系统采用全Python语言&#xff0c;以…

【量化交易学习】布林线(BOLL)指标

目录 1. 布林线&#xff08;BOLL&#xff09;指标定义与构成1.1 定义1.2 布林线的构成 2. BOLL&#xff08;布林线&#xff09;的应用场景3. BOLL指标的研判标准3.1 BOLL指标中的上、中、下轨线的意义3.2 BOLL指标中的上、中、下轨线之间的关系3.3 K线和布林线上、中、下轨之间…

ArcGIS Pro 创建渔网格网过大,只有几个格网的解决方案

之前用ArcGIS Pro创建渔网的时候&#xff0c;发现创建出来格网过大&#xff0c;只有几个格网。 后来查阅资料&#xff0c;发现是坐标不对&#xff0c;导致设置格网大小时单位为度&#xff0c;而不是米&#xff0c;因此需要进行坐标系转换&#xff0c;网上有很多资料讲了ArcGIS …

java27

1.IO流 FileOutPutStream字节输出流基本用法&#xff1a; 一次性写入一个字符串的内容&#xff1a; 注意&#xff1a;\r或者\n表示把普通的r或者n的字符转义成回车的意思&#xff0c;所以不需要\\ FileInputStream字节输入流基本用法 -1在ASCII码里面对应的符号&#xff1a; 不…

Windows设置之RDP文件用户密码

1、远程桌面另存为rdp文件 2、编辑rdp文件&#xff0c;添加用户名密码信息 username:s:<用户名> password 51:b:<加密后的密码> 3、<加密后的密码>通过PowerShell命令或者 ("<密码>" | ConvertTo-SecureString -AsPlainText -Force) | Conve…

day025-网络基础-DNS与ARP协议

文章目录 1. DNS服务1.1 DNS解析流程1.2 查看本地DNS缓存&#xff08;Windows&#xff09;1.3 查看详细DNS解析流程1.4 排查DNS故障 2. 面试题&#xff1a;用户访问网站过程2.1 抓包 3. ARP协议3.1 命令查看3.2 抓包 4. ICMP协议4.1 禁用ping 5. 踩坑记录1. **为什么解析域名时…

SEO长尾关键词优化实战

内容概要 在长尾关键词优化实践中&#xff0c;系统化的策略设计与执行路径直接影响流量获取效率与转化质量。本文从行业竞争度评估切入&#xff0c;通过多维指标拆解目标关键词的流量价值与操作成本&#xff0c;帮助从业者建立科学的资源分配模型&#xff1b;同时聚焦用户搜索…

复杂业务场景下 JSON 规范设计:Map<String,Object>快速开发 与 ResponseEntity精细化控制HTTP 的本质区别与应用场景解析

Moudle 1 Json使用示例 在企业开发中&#xff0c;构造 JSON 格式数据的方式需兼顾 可读性、兼容性、安全性和开发效率&#xff0c;以下是几种常用方式及适用场景&#xff1a; 一、直接使用 Map / 对象转换&#xff08;简单场景&#xff09; 通过 键值对集合&#xff08;如 M…

Oracle正则表达式学习

目录 一、正则表达简介 二、REGEXP_LIKE(x,匹配项) 三、REGEXP_INSTR 四、REGEXP_SUBSTR 五、REGEXP_REPLACE 一、正则表达简介 相关网址&#xff1a; https://cloud.tencent.com/developer/article/1456428 https://www.cnblogs.com/lxl57610/p/8227599.html https://…

【HW系列】—溯源与定位—Windows入侵排查

文章目录 实在不会手动&#xff0c;打开一个杀毒软件&#xff0c;全盘扫描一、入侵排查思路与流程1. 常见应急响应事件分类2. 入侵排查流程图 二、Windows账户安全排查&#xff08;D盾&#xff0c;微步沙箱&#xff09;1. 正常账户 vs 黑客账户区别2. 自动账户排查3. 隐藏账户与…