window 显示驱动开发-呈现开销改进(二)

对共享表面的纹理格式支持
驱动程序应支持共享资源和可共享的后台缓冲区,以使用 DXGI_FORMAT 枚举中的这些附加纹理格式:

  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8G8_UNORM
  • DXGI_FORMAT_BC1_TYPELESS\*
  • DXGI_FORMAT_BC1_UNORM
  • DXGI_FORMAT_BC1_UNORM_SRGB
  • DXGI_FORMAT_BC2_TYPELESS\*
  • DXGI_FORMAT_BC2_UNORM
  • DXGI_FORMAT_BC2_UNORM_SRGB
  • DXGI_FORMAT_BC3_TYPELESS\*
  • DXGI_FORMAT_BC3_UNORM
  • DXGI_FORMAT_BC3_UNORM_SRGB

此外,如果驱动程序在 Direct3D 功能级别 9 硬件上支持 Microsoft Direct3D 11 及更高版本,则应支持 DXGI_FORMAT_L8_UNORM 占位符格式。 DXGI_FORMAT_L8_UNORM 在功能上等效于 D3DDDIFMT_L8 格式。

驱动程序还应支持 来自 D3DDDIFORMAT 枚举的其他纹理格式:

  • D3DDDIFMT_G8R8
  • D3DDDIFMT_R8

1. 核心支持格式列表

WDDM 驱动程序必须为 共享资源 和 可交换的后台缓冲区 支持以下纹理格式:

(1) DXGI 格式(Direct3D 10/11/12)

格式描述典型用途
DXGI_FORMAT_A8_UNORM8-bit 单通道 Alpha(无类型)UI 蒙版、字体渲染
DXGI_FORMAT_R8_UNORM8-bit 单通道 Red灰度图像、高度图
DXGI_FORMAT_R8G8_UNORM16-bit 双通道(Red+Green)法线贴图、矢量场
DXGI_FORMAT_BC1_*BC1 压缩格式(DXT1)不透明/1-bit Alpha 纹理压缩
DXGI_FORMAT_BC2_*BC2 压缩格式(DXT3)带显式 Alpha 的纹理压缩
DXGI_FORMAT_BC3_*BC3 压缩格式(DXT5)带插值 Alpha 的纹理压缩

:标有 *_TYPELESS 的格式需支持类型转换(如 BC1_TYPELESS → BC1_UNORM)。

注:标有 *_TYPELESS 的格式需支持类型转换(如 BC1_TYPELESS → BC1_UNORM)。

(2) D3DDDI 格式(Direct3D 9 兼容性)

格式等效 DXGI 格式描述
D3DDDIFMT_L8_UNORMDXGI_FORMAT_R8_UNORM8-bit 灰度(Direct3D 9 遗留)
D3DDDIFMT_G8R8DXGI_FORMAT_R8G8_UNORM16-bit Green+Red
D3DDDIFMT_R8DXGI_FORMAT_R8_UNORM8-bit Red

2. 驱动实现要求

(1) 格式声明
在 D3D10DDI_D3D11_OPTIONS 或 DXGI_DDI_BASE_ARGS 中声明支持:

DXGI_DDI_BASE_ARGS BaseArgs = {0};
BaseArgs.DDIVersion = DXGI_DDI_VERSION_1_3;
BaseArgs.SupportedFormats.R8_UNORM = TRUE;  // 示例:启用 R8_UNORM

(2) 共享资源创建
处理 D3D11_DDI_RESOURCE_MISC_SHARED 标志的资源分配:

HRESULT CreateSharedResource(D3D10DDI_HDEVICE hDevice,CONST D3D11DDIARG_CREATERESOURCE* pArgs
) {if (pArgs->MiscFlags & D3D11_DDI_RESOURCE_MISC_SHARED) {ValidateFormat(pArgs->Format);  // 检查是否为支持的共享格式}// 正常创建资源...
}

(3) 跨 API 兼容性
Direct3D 9 → Direct3D 11 共享:

  • 将 D3DDDIFMT_L8_UNORM 映射为 DXGI_FORMAT_R8_UNORM。
  • 确保 D3DDDIFMT_G8R8 与 DXGI_FORMAT_R8G8_UNORM 数据布局一致。

3. 特殊场景处理

(1) Direct3D 9 硬件的 D3D11 支持
若硬件仅支持 Direct3D 9 功能级别,仍需通过占位符格式 DXGI_FORMAT_L8_UNORM 提供灰度支持:

// 在 GetCaps 中响应查询
if (Type == D3DDDICAPS_GET_FORMAT_SUPPORT) {if (pArgs->Format == DXGI_FORMAT_L8_UNORM) {*(BOOL*)pData = TRUE;  // 声明支持}
}

(2) 压缩纹理的共享
BCn 压缩格式需保证跨进程/设备可访问:

  • 内存对齐:BC1/BC2/BC3 的块大小为 4x4 像素。
  • 禁止格式转换(除非显式指定 TYPELESS)。

4. WHCK 认证测试项

测试项验证目标方法
Device.Graphics.WDDM13.Format.Shared共享资源的格式支持正确性。创建共享表面并跨进程读写验证。
Device.Graphics.WDDM13.Format.BCnBC 压缩纹理的共享与渲染一致性。PIX 捕获压缩纹理数据。
Device.Graphics.WDDM13.Format.D3D9CompatD3D9 遗留格式(如 L8_UNORM)的兼容性。D3D9 与 D3D11 互操作测试。

5. 调试与问题排查

常见问题:

  • 共享失败:检查格式是否在 SupportedFormats 中声明。
  • 数据错乱:验证 D3DDDIFMT_G8R8 与 DXGI_FORMAT_R8G8_UNORM 的通道顺序是否一致(G=R, R=G)。

工具推荐:

  • PIX on Windows:捕获共享表面的内存布局。
  • DirectX Caps Viewer:检查驱动声明的格式支持。

6. 性能优化建议

  • 压缩纹理优先:对共享的静态纹理(如 UI 素材)使用 BCn 压缩以减少内存带宽。
  • 灰度优化:R8_UNORM/L8_UNORM 格式适合单通道数据(如遮罩),节省 75% 内存。
  • 内存对齐:共享表面按 4KB 对齐,避免跨进程访问的性能惩罚。

7. 总结

强制要求:WDDM 1.3+ 驱动必须支持上述格式以实现跨 API/进程资源共享。

关键点:

  • 正确处理 D3DDDIFMT_* 与 DXGI_FORMAT_* 的映射关系。
  • 压缩纹理(BCn)需保证共享时的数据一致性。

兼容性:Direct3D 9 硬件需通过 L8_UNORM 提供灰度支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab,本文介绍将二者结合使用 项目源码上传至gitee提供公网访问:https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

深入解析 Redis Cluster 架构与实现(一)

#作者:stackofumbrella 文章目录 Redis Cluster特点Redis Cluster与其它集群模式的区别集群目标性能hash tagsMutli-key操作Cluster Bus安全写入(write safety)集群节点的属性集群拓扑节点间handshake重定向与reshardingMOVED重定向ASK重定向…

linux centos 服务器性能排查 vmstat、top等常用指令

背景:项目上经常出现系统运行缓慢,由于数据库服务器是linux服务器,记录下linux服务器性能排查常用指令 vmstat vmstat介绍 vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这…

在IIS上无法使用PUT等请求

错误来源: chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

Python训练第四十一天

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 →…

Linux线程同步实战:多线程程序的同步与调度

个人主页:chian-ocean 文章专栏-Linux Linux线程同步实战:多线程程序的同步与调度 个人主页:chian-ocean文章专栏-Linux 前言:为什么要实现线程同步线程饥饿(Thread Starvation)示例:抢票问题 …

5.2 初识Spark Streaming

在本节实战中,我们初步探索了Spark Streaming,它是Spark的流式数据处理子框架,具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理,并通过两个案例演示了如何利用Spark Streaming实现词频统计。…

Go 即时通讯系统:日志模块重构,并从main函数开始

重构logger 上次写的logger.go过于繁琐,有很多没用到的功能;重构后只提供了简洁的日志接口,支持日志轮转、多级别日志记录等功能,并采用单例模式确保全局只有一个日志实例 全局变量 var (once sync.Once // 用于实现…

「数据采集与网络爬虫(使用Python工具)」【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 103 篇 - Date: 2025 - 06 - 01 Author: 郑龙浩/仟墨 文章目录 「据采集与网络爬虫」【使用工具:Python】一 数据采集1 数据采集综述(1)基本介绍(2)数据目标源(3)采集方式(4&am…

响应式系统与Spring Boot响应式应用开发

响应式系统概述 过去十年间,为应对移动和云计算的需求,软件行业通过改进开发流程来构建更稳定、健壮且灵活的软件系统。这种演进不仅服务于传统用户端(桌面/Web),还需支持多样化设备(手机、传感器等)。为应对这些挑战,多个组织共同制定了《响应式宣言》(2014年发布)…

POJO、DTO和VO:Java应用中的三种关键对象详解

在软件开发特别是Java开发中,常常会遇到POJO、DTO和VO这三类对象。它们在不同场景下扮演着重要角色,有助于优化代码结构、增强系统安全性和提升性能。本文将全面解析这三者的定义、区别及常见使用场景,帮助你更好地理解和应用。 1. POJO&…

leetcode付费题 353. 贪吃蛇游戏解题思路

贪吃蛇游戏试玩:https://patorjk.com/games/snake/ 问题描述 设计一个贪吃蛇游戏,要求实现以下功能: 初始化游戏:给定网格宽度、高度和食物位置序列移动操作:根据指令(上、下、左、右)移动蛇头规则: 蛇头碰到边界或自身身体时游戏结束(返回-1)吃到食物时蛇身长度增加…

NLP学习路线图(十三):正则表达式

在自然语言处理(NLP)的浩瀚宇宙中,原始文本数据如同未经雕琢的璞玉。而文本预处理,尤其是其中至关重要的正则表达式技术,正是将这块璞玉转化为精美玉器的核心工具集。本文将深入探讨正则表达式在NLP文本预处理中的原理…

计算机网络(4)——网络层

1.概述 1.1 网络层服务 (1) 网络层为不同主机(Host)之间提供了一种逻辑通信机制 (2)每个主机和路由器都运行网络层协议 发送方:将来自传输层的消息封装到数据报(datagram)中接收方:向传输层交付数据段(segment) 1.2 网络层核心功能 路由选择(routing…

EMO2:基于末端执行器引导的音频驱动虚拟形象视频生成

今天带来EMO2(全称End-Effector Guided Audio-Driven Avatar Video Generation)是阿里巴巴智能计算研究院研发的创新型音频驱动视频生成技术。该技术通过结合音频输入和静态人像照片,生成高度逼真且富有表现力的动态视频内容,值得…

[Redis] Redis:高性能内存数据库与分布式架构设计

标题:[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis?一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构(应用程序 数据库服务器)2、应用程序和数据库服务器分离3…

HTML5 视频播放器:从基础到进阶的实现指南

在现代Web开发中,视频播放功能是许多网站的重要组成部分。无论是在线教育平台、视频分享网站,还是企业官网,HTML5视频播放器都扮演着不可或缺的角色。本文将从基础到进阶,详细介绍如何实现一个功能完善的HTML5视频播放器&#xff…

牛客小白月赛117

前言:solveABCF相对简单,D题思路简单但是实现麻烦,F题郭老师神力b( ̄▽ ̄)。 A. 好字符串 题目大意:给定字符串s,里面的字母必须大小写同时出现。 【解题】:没什么好说的&#xff0…

特伦斯 S75 电钢琴:重构演奏美学的极致表达

在数字音乐时代,电钢琴正从功能性乐器升级为融合艺术、科技与生活的美学载体。特伦斯 S75 电钢琴以极简主义哲学重构产品设计,将专业级演奏体验与现代家居美学深度融合,为音乐爱好者打造跨越技术边界的沉浸式艺术空间。 一、极简主义的视觉叙…