编辑:马志文

时间: 2009-12-29

如现在大家所想的那样, Windows7 其实是 Windows Vista 的改进版。 Windows 7 在 Windows Vista 的基础上进行了大量的完善工作,也加入了不少新特性。 Vista 与其上一代 XP 相比,提供了非

常大的改进,然而一方面这些改进过于巨大,用户乃至相应软件厂商(如, DirectX 10 应用开发商)一时无法完全接受,另一方面,由于特性的不完全具备, Vista 的表现没有想象之中的那么好。到了 Windows 7 ,包括操作系统本身、

软件厂商和用户都已经做好了准备,因此反响比 Vista 更好也就不难理解了。

图形界面一直是 Windows 系统的核心,而从 Windows Vista 开始, Windows 就开始将提供一个富图形化的桌面图形界面作为要目,不仅仅是因为 Vista 和 7 的桌面本身就是一个 3D 应用程序,而是因为 Vista 和 7 可以更好地发挥图形加速硬件的作用。从 Windows Vista 到 Windows7 ,操作系统与 GPU 的结合越来越紧密。



虽然人们经常可以听到 Windows7 的大更新在于一个 DirectX 11.0 API ,然而对于 Windows 系统的图形架构来说,虽然 DirectX 也很重要,不过这还不是全部。一个图形架构包括了如何利用 GPU 加速各种各样的图形应用( 2D 、 3D 、打印等)、如何显示到最终显示设备上,以及包括设备检测、控制。 Window 7 在图形架构方面的更新主要有如下方面:

WDDM 1.1 :新的驱动模型
DirectX 11 :更新的 Direct3D 11 ,以及相关的新 Direct2D API
DXVA-HD :高清视频回放加速
显示设备连接和配置
色彩管理
高 DPI 输出和可读性
多 GPU 系统
联合显示适配器(又叫联合渲染)

下面,会就这些改进进行简单的介绍。


Windows 7 核心图形架构

Windows 应用程序使用各种如 GDI ( Graphics Device Interface , 2D 时代系统的主要图形接口)、 Direct3D 、 OpenGL 这样的 API 和系统图形组件通信,而系统组件通过 WDDM ( Windows Display Driver Model ,又名 Longhorn Display Driver Model )与硬件交互,从 Vista 起, Windows 就采用了和 XP 使用的 XPDM 不同的新的驱动模型: WDDM ,使用的驱动模型在很大程度上决定了一个系统的图形特性。 Vista 使用的 WDDM 版本为 1.0 ,而 Windows7 使用的改进版本为 WDDM 1.1 。


WDDM 1.1 带来的改动挺多的,下面我们先来看看 WDDM 1.0 相对 XPDM 的改动,也就是 Vista 相对 XP 的改动


XPDM :非合成模型


WDDM :合成模型

在垂直同步之谜 XP/Vista 与 3D 性能测试中,笔者解释过 XP/Vista 的模型的不同之处,在 WDDM 模型下,所有的应用程序生成的显示画面最后会在 DWM ( Desktop Windows Manager ,桌面窗口管理器)内进行合成为单一的最后输出画面,因此获得了更好的显示效果(天生的所有程序垂直同步)、额外效果(缩略图、缩放)以及可以支持更大的左面,不过,原始的 WDDM 1.0 只是实现了这个大架构上的转换,细节上仍未够完美:

在 Vista 下, GDI (绘制通常的 2D 窗口的 API ,此外还有很多其他图形操作使用 GDI )和 DirectX ( 3D 应用 API )具有着不同的处理方法: Direct3D 是硬件加速的,而 GDI 则不是( GDI 在 XPDM 时是硬件加速的),因此 Vista 用户在一些图形程序上会感到比 XP 慢;而且 GDI 应用程序先经过 CPU 软件处理到系统内存上,再传输到显卡驱动分配的 GDI 显存区域上(也在系统内存当中),再由 DWM 负责将画面合成输出到显示器

Windows 7 当中, GDI 获得了硬件加速(这个见下面) —— 不过在混合使用 GDI 和 Direct3D API 的时候, GDI 仍然无法硬件加速,不过, GDI 直接输出到驱动的 GDI 显存区域,减少了一个步骤,同时降低了内存消耗(同时对混用的 Direct3D API 也有效);显然,混合食用 API 来进行图形编程并不是一个好主意(当然,同时使用 GDI 和 Direct3D 意味着这个是一个老的、窗口模式的 3D 应用程序,如 Windows 模式的老 3D 游戏)

老的WDDM 1.0 处理GDI 应用程序就如前面说过的一样

而在 Windows 7 WDDM 1.1 模型当中,单独的 GDI 将会通过 WDDM 与 GPU 进行硬件加速,同时经过 GDI 显存区域输出到 DWM ,表现在实际操作上,就是大部分窗口操作都变得比 Vista 更流畅,日常工作更快捷(大部分 2D 应用程序都使用了 GDI API ,因为 GDI 包括的内容太多,因此必须对其保持兼容;关于 GDI ,后面还有相关内容)


Windows XP 的Direct3D/GDI驱动架构


Windows Vista 核心图形架构,比起XP 来要丰富了很多

Windows 7 核心图形架构,老的 GDI/GDI+ 仍被单独支持,不过, Windows 7 提供了它们对应功能的新的实现方法相比 Vista 带的 DirectX 10 , Windows 7 自带了 DirectX 11 ,和 WDDM 1.0 到 1.1 的变化不同, DirectX 11 的版本号表示其变化更大一些。 Windows 7 DirectX 11 改变了以往的工作模式,将 Direct3D 10.1 升级到 Direct3D 11 ,同时将以前 Vista 无法硬件加速的 GDI/GDI+ 的工作重新划分、引入新的 Direct2D 和 DirectWrite API 来完成:

以前的图形操作大部分由 Diredt3D 和 GDI/GDI+ 完成(此外还有一个 WIC——Windows Image Component ,管理扫描、打印和图形解码等工作),而在 Vista 当中, GDI 是无法硬件加速的 —— 因此 Vista 显得很慢,在 Windows 7 中, GDI 的工作除了通过 WDDM 模型的改变获得硬件加速之外,它们还按照面向的应用重新划分为 Direct2D ( 2D 加速)、 DirectWrite (文本处理)和 DXGI 1.1 (设备控制),这些新的 API 或者新分配到的 API 具有着硬件加速,例如, Direct2D 就实际上是通过 Direct3D 10 来完成加速:

Direct2D
硬件加速的即时模式 2 维图形 API ,它在 2 维几何图形、位图和文本方面有着较高的性能和质量。 Direct2D API 是设计与 GDI 、 GDI+ 和 Direct3D 之间进行互操作的。

DirectWrite
DirectWrite 提供高质量的文本呈现、具有独立分辨率的轮廓字体、完整的 Unicode 文本以及布局支持。在使用 Direct2D 的时候, DirectWrite 是硬件加速的。

当系统不支持 Direct3D 10 的时候, Windows 7 会通过一个额外的 10Level9 软件层使用 D3D9 来完成工作,显然,为了最好的效率,你需要使用 Direct3D10 的显卡,因为 Windows 7 的 DWM 基于 Direct3D 10


字体抗锯齿:DirectWrite 效果


Direct3D 11

Windows 7 带的 Direct3D 11 是 D3D10 的超集,它的特点是可以同时支持运行在 Direct3D9 和 Direct3D10.1 硬件上,实际上, DirectX 11 会提供 Vista 的支持,而不是像 Direct 10 出来时那样,只支持 Vista 而无法兼容上一代系统,这导致了软件开发厂商们向 DirectX 10 转移的缓慢。 DirectX 11 支持多个硬件平台和多种操作系统的特性让其更容易被接受。同时 Direc3D 11 本身也具有这不少的改进,这一点会有专文讨论(计划中),这里先谈论 Windows 7 对整个图形操作的改进,通过更多地将 GDI/GDI+ 纳入 DirectX 体系获得硬件加速,图形界面的性能会越来越好(当然,这需要软件厂商们使用新的 Direct2D/DirectWrite 进行编写)。微软希望将所有的图形操作都构建在 DirectX 之上。

通过 Vista 中缺失的 GDI 硬件加速纳入到 DirectX 体系中重新获得硬件加速,并且性能要更快;未来显卡厂商们将不再需要提供 GDI 加速

显示技术

Windows 7 支持一系列的显示技术,包括将数字输出作为原生输出(支持 HDMI 和 DisplayPort ,而老的 VGA 模拟输出被建议弃用), Windows 7 还原生支持更多的内容来源,如 Blu-Ray 、 JPEG-XR 、 HDR 图片等。

Windows 7 使用默认的 sRGB 色彩空间作为所有设备都统一的工作流,但是精度提升到 30 位 —— 每一个色彩通道都增加了两位; Windows 7 最高支持 48 位的 scRGB 模式,高精度+扩展范围+高动态


WDDM 1.1 要求驱动支持BGRA BGRA 是最快的色彩格式

显示设备连接和配置


Windows 7 中,所有的应用程序都在一个统一的虚拟桌面中显示,这个虚拟桌面分辨率为64Kx64K 65536x65536

虚拟桌面按照显示器分为不同的视图,每一个视图对应一个适配器;一个适配器并不意味着一块显卡,一块显卡连接多个显示器的时候,它就含有多个适配器,类似地, SLI 或者 CrossFireX 连接的单显示器就意味着其是一个单一的适配器(从 Vista 开始加入,叫做 Linked-Adapter 特性)


不过,在Vista 下,无法使用多块不同GPU 厂商的显卡,而Windows 7 则可以

在 LDA 配置下,程序界面在不同的输出中漫游基本上是透明的,叫做 Dynamic adapter switching 动态适配器切换

在多显示器下, Windows 7 提供了一个新的全局快捷键功能: Win + P ,可以快速设置多显示器工作状态,这个快捷键本来是特地为了投影仪应用而设计

总的来说, Windows 7 的图形架构比起 Vista 来更加完善,应用也更加方便。最明显的就是 GDI API 的变迁了,现在 GDI 应用程序也获得了硬件加速,就如同 XP 下一样,比其 Vista 下只能处理器来进行处理,因此用户们可以感觉到日常应用会更加流畅。

深度解读 - Windows 7核心图形架构细致分析(来自微软)的更多相关文章

  1. 微软架构师解读Windows Server 2008 R2新特性

    目前众多企业都开始为自己寻找一个更加适合自身发展的服务器操作平台.微软的Windows Server 2008 R2就是可以为大家解决服务器平台问题.微软最新的服务器平台Windows Server ...

  2. 如何用区块链技术解决信任问题?Fabric 架构深度解读

    阿里妹导读:区块链技术,随着比特币的兴起而为大家所知.但是具体到技术本身,大家相对熟悉的几个词可能是“数据不可篡改”.“公开链”.“分布式数据”.“共识机制”等. 这篇文章将抛砖引玉,通过深度解读Hy ...

  3. 支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型

    支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型 原创 杨翊(席翁) 阿里巴巴云原生 2020-12-28    

  4. SQL Server 2019 深度解读:微软数据平台的野望

    本文为笔者在InfoQ首发的原创文章,主要利用周末时间陆续写成,也算近期用心之作.现转载回自己的公众号,请大家多多指教. 11 月 4 日,微软正式发布了其新一代数据库产品 SQL Server 20 ...

  5. 我就是认真:Linux SWAP 深度解读(必须收藏)

    我就是认真:Linux SWAP 深度解读(必须收藏) http://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660097& ...

  6. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...

  7. 深度解读 AlphaGo 算法原理

    http://blog.csdn.net/songrotek/article/details/51065143 http://blog.csdn.net/dinosoft/article/detail ...

  8. 【转载】深度解读 java 线程池设计思想及源码实现

    总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...

  9. Java并发指南12:深度解读 java 线程池设计思想及源码实现

    ​深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...

随机推荐

  1. 免费报名 | 汇聚HBase&大数据最前沿 Apache HBaseConAsia2019盛会火热来袭

    Apache HBase介绍 Apache HBase是基于Apache Hadoop构建的一个高可靠性.高性能.可伸缩的分布式存储系统,它提供了大数据背景下的高性能的随机读写能力,HBase是Goo ...

  2. 反射技术总结 Day25

    反射总结 反射的应用场合: 在编译时根本无法知道该对象或类属于那些类, 程序只依靠运行时信息去发现类和对象的真实信息 反射的作用: 通过反射可以使程序代码访问到已经装载到JVM中的类的内部信息(属性 ...

  3. 笔记:html常见的兼容问题

    IE: IE的双边距bug: 块级元素float后设置横向的margin,IE6显示的margin比较大. 解决办法:display:inline 双边距bug:在IE6下,如果对元素设置浮动,同时又 ...

  4. HDU 1081 To The Max【dp,思维】

    HDU 1081 题意:给定二维矩阵,求数组的子矩阵的元素和最大是多少. 题解:这个相当于求最大连续子序列和的加强版,把一维变成了二维. 先看看一维怎么办的: int getsum() { ; int ...

  5. 数组工具类 Day07

    package com.sxt.arraytest2; /* * 数组的工具类 */ import java.util.Arrays; public class TestArrays { public ...

  6. call和apply用途与使用方法

    当你看代码时,经常会看到以下情形:(在这个博客里面,参数context是执行上下文的意思,params是参数的意思) Object.prototype.toString.call(context, p ...

  7. 第四次C++

    继承与派生 一.什么是继承和派生 所谓继承就是从先辈处得到属性和行为特征.类的继承,是新的类从已有类那里得到已有的特性.从另一个角度来看这个问题,从已有类产生新类的过程就是类的派生.类的继承与派生机制 ...

  8. mysql 连接慢的问题

    现象: 今发现站点訪问数据库变慢,经查,查询数据库非常快,连接数据库比較耗时. 解决的方法: 在mysql的配置文件my.cnf中,在[mysqld]以下加上这个配置就能够了. 附录:[mysqld] ...

  9. 谷歌BERT预训练源码解析(三):训练过程

    目录前言源码解析主函数自定义模型遮蔽词预测下一句预测规范化数据集前言本部分介绍BERT训练过程,BERT模型训练过程是在自己的TPU上进行的,这部分我没做过研究所以不做深入探讨.BERT针对两个任务同 ...

  10. 因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug

    遇到个 Java 和 Php 在获取客户端 cookie 方式不同导致跨系统的问题.所以写了这篇博客梳理下相关知识. 实验 下面通过两个简单的实验,来看Java和Php在获取web请求中的cookie ...