Direct3D 10系统(五)

5.合并写(write combining)[转载] 原文地址 译者:无叶 校对:丁一 现代CPU采用了大量的技术来抵消内存访问带来的延迟。读写内存数据期间,CPU能执行成百上千条指令。 多级SRAM缓存是减小这种延迟带来的影响的主要手段。此外,SMP系统采用消息传递协议来实现缓存之间的一致性。遗憾的是,现代的CPU实在是太快了,即使是使用了缓存,有时也无法跟上CPU的速度。因此,为了进一步减小延迟的影响,一些鲜为人知的缓冲区派上了用场。 本... 阅读详情

 Direct3D 10系统(五)

5.3 Resource Mapping and Access
         API和管线设计比较复杂的问题之一,关系到如何在CPU和GPU之间共享资源。举个例子,无论Direct3D还是OpenGL都允许顶点缓冲映射到程序的地址空间中,而不管缓冲具体是分配在系统内存还是显存中。但是,分配的位置将会导致性能的巨大差异。现代图形加速器上,显存和加速器之间的带宽可能超过50GB/s,而PCI-E则只能为系统和GPU之间提供2.8GB/s的带宽。
         此外还有一些其它的问题。比如,CPU对所访问的数据缓存与否,同样会带来很大的性能差异。同时,是否write-combine,也会造成同样的差异。另外,当GPU访问资源时,为了提高空间的一致性,资源加载的方法可能是form row-order to another(e.g, Morton, boustrophedon, or pi orders), or tiled [Blinn 1990; Hakura and Gupta 1997; Igehy et al. 1999]。我们认为这些方法本质上都是为了保证分割模式(tiling pattern)对应用程序透明,因此,当资源映射到CPU时,应该是以线形方式组织的。由于分割模式同时也依赖于访问模式,2D和3D纹理之间是有差异的,而且这种差异不仅仅是CPU和GPU之间的不同造成的。出于对性能的重要用影响,我们尝试暴露所有这些功能,但由于其本身的复杂性,却很难让应用程序真正获得性能上的提升。我使用了一个简单的模型,尽力提供了尽可能多的功能。
         我们对特定资源的写入者和读取者进行了分类,e.g,GPU vs.CPU以及read vs. write。如果最初只有一位客户访问资源,那么问题就变得简单了,因为可以采取对主要客户比较有利的方式,来分配资源。同样,如果可以预知资源将被用来读取或写入,也会有很大帮助。幸运的是,这样的描述完全可以覆盖大部分典型的应用范围。比如,渲染目标和纹理主要由GPU进行访问,并且分别被限制为写入目标和读取资源。另一方面,顶点缓冲的使用就比较复杂了。虽然静态的集合体主要由GPU来读取,但是动态的几何体则常常作为动画的一部分,先由CPU来生成,在由GPU进行处理。这些操作将导致频繁的CPU写入和GPU读取处理。
         Direct3D 10根据使用类型,把资源分为3类:default, immutable, dynamic,以及staging。Default对应比较简单的纹理,渲染目标,或者只由GPU访问的静态顶点缓冲。Default类型资源的初始化,通常需要复制另一资源的数据来进行。Immutable类型的资源不允许复制操作,但是在创建时,提供了另一种方法来进行初始化。Default和immutable类型的资源都不能映射到应用程序地址空间中,让CPU对它们进行访问。动态资源不但可以在管线中使用,也允许映射到CPU,进行只写的操作。适合于生成顶点数据,或者进行视频解码,等等。最后,staging类型的资源只允许CPU对其进行访问,但是,可以对它的数据进行复制。Staging类型的资源对于初始化或者获取只有GPU能访问的资源时比较有用。
         为了检查资源可以绑到管线的哪个位置,将在创建资源时,对资源的布局(placement)和编码方式进行验证。这些分类包括:顶点缓冲,索引缓冲,常量缓冲,shader资源(纹理),输出流缓冲,渲染目标,或者depth/stencil缓冲。这样的分类有两个目的:为驱动提供资源布局的信息,简化使用资源时的错误检查。
 
5.4 HLSL 10
         高级着色语言广泛,迅速的被人们所接受,无疑显示了这种语言的重要性。为了支持新管线的特性,我们对高级着色语言――HLSL也提出了一些新的目标。简单的说,我们希望应用程序开发者使用HLSL高效的开发程序,而不需要了解虚拟机的复杂细节,比如,寄存器名称或常量缓冲索引。我们把目标精炼为以下几个小点:
1.   应用程序不需要了解资源是如何配置和分配的。
2.   把bind-by-position作为主要的绑定机制,而不是现在的bind-by-name。
3.   程序员不再需要编写中间(汇编)语言代码
第一个目标主要用于解决下面这个问题:当前系统中,应用程序开发者需要学会控制常量储存空间中的参数布局。开发者需要对多个shader进行全局分配和布局(global allocation and placement),以便在多个shader之间共享某些变量。通过在每个管线阶段添加的多个常量缓冲,我们相信,编译器有足够的信息能自动对缓冲进行布局,当然,程序员还是要控制把参数分配到常量缓冲中的操作。我们对语言进行了扩展,允许把缓冲名作为参数的一部分,进行声明。
第二个目标则是设计思想的改变,主要与性能和未来的进一步发展有关系。Bind-by-name主要用于几个地方:对多个shader之间输入和输出数据进行匹配,让vertex shader的布局与vertex shader进行匹配,等等。虽然运行时可以让源数据和目标数据之间的名字匹配操作进行的比较高效,并且实现源—目标对缓存,但我们觉得这些只会带来不必要的复杂性,并且为运行时添加额外的负载。新系统中,将在多个方面发生变化。Shader的输出和输入将与签名(signature)相关,这和C总的函数原形有些类似。只有当前一阶段的输出和后一阶段的输入兼容时,管线才是有效的。兼容意味着输入和输出间element-by-element的对应。这里,我们允许下一阶段的管线,不使用上一阶段拖尾的(trailing)的输出数据。
Bind-by-postion通用影响到IA和SO阶段的顶点缓冲绑定。但是,对这几个阶段,我们将创建独立的对象来封装(encapsulate)绑定,让代价较大的匹配操作只在创建时运行一次。
第三个目标是比较具有争议性的,它表示我们的实现将不支持使用使用中间语言编写的shader作为输入。我们认为着色程序的发展已经达到了一定复杂程度,因此,手写的IL很难比编译器产生的代码高效。此外,当我们改进优化技巧,联接,以及与驱动的交互时,无法保证对手写IL代码的支持和兼容。作为诊断技术,系统将支持编译器生成中间代码作为输出,但是,我们不允许应用程序开发者修改编译器的输出,并把它注入到运行时中。
         如何最优化编译器生成的代码性能,有很多问题。首先,是优化的范围,驱动可能允许把中间语言转换为特定机器语言时进行优化。随着shader复杂性的增加,确保开发者在优化之上,有充分的控制权,改变操作的执行顺序是相当重要的。特别是需要保证关键代码的恒定性(invariance),多pass算法应该能生成同样的中间值,以便把这些值复制到分散的shader中。我们考虑了几种在源码上指定中间值的方案,比如,要求以一种特定的方式来编译子程序,而不管这个子程序是否是内连的。但是,研究最终让我们选择了更加常见的方法:使用与驱动编译器相关的,可选择的,定义良好的优化级别。
         请注意,我们首选的使用模型是在编写shader时,编译HLSL代码,在程序运行时通过驱动编译IL代码。这样的目的是希望减少程序运行时,编译shader所花费的时间。但是,在运行时再把HLSL编译为IL也是可以的。
 
5.5 HLSL-FX 10
         我们注意到,编程管道的成功,改变了人们的观点,shader程序不但是引擎的一部分,同时,也是艺术家创作工具之一。为了适应这方面的应用,Effect(FX)系统对HLSL进行了扩展,允许使用它来初始化管线的固定功能部分。这和CgFX以及Cg所描述的方法很类似。虽然这些方法有共同的基础,但HLSL-FX是进行了革新的。我们的目标是,FX首先需要满足实时运行的需求,其次,才是作为内容创建者的工具。基于一些历史原因,这两者在很多方面都是由差别的。创作工具常常通过牺牲性能来换取灵活性,而我们的运行时则把性能放在第一位。
         通过我们积累的经验和努力,FX系统在易用性和性能方便都有了充分的提高。最终FX,HLSL,API,运行时,以及管线都紧密的结合到一起,作为互补的解决方案。我们同样对频繁的状态操作进行了改变,分离了名字查找以及匹配操作。
         再次来讨论处理状态改变的方式。构建应用程序的方法之一是渲染一系列几何体,每个几何体都有其各自的管线配置(一个Effect)。通过设置常量缓冲中的shader参数,纹理绑定,以及其他固定功能的状态,来传递参数给Effect。为了最大化性能,应用程序应该使用一个Effect来绘制所有物体。这是场景管理系统中,传统的状态排序解决方案。但是,对一个Effect来说,可能有几个层次的参数,比如,当前时间和观察点是属于per-frame的状态;纹理或顶点数据则是角色的静态状态;位置和姿势则是对象的动态状态,等等。我们使用了一个单独的常量缓冲来储存shader每个层次的参数,当绘制物体时,将直接绑定保存静态参数的常量缓冲,保存动态参数的缓冲则要经过更新后再绑定。
         在实际应用中,应用程序并不能总是通过Effect来排序对象。通常还可能有其他的机制,控制着绘图,比如物体的远近程度,透明度,等等。我们已经把Direct3D 10系统状态改变的代价进行了充分缩减,因此,重新配置整个管道也是很高效的。
 
6 System Experience(略)
7 Future Work(略)
8 Conclusions(略)
~~~~~~~~~~~~~~~~~~~~~~~~全文完~~~~~~~~~~~~~~~~~~~~~
        呼呼,终于把主要部分都弄完了,希望理解错误的地方不是太多。后3个部分基本都是总结性的东西,就不再翻了。
       最近又比较茫然了,唉~~~。
       Work for money or work for what i like?
 
Direct3D 10教程8:DXUT介绍 概览 本教程将介绍DXUT。DXUT是一个建立在Direct3D之上的一个层,它能帮助我们建立一个更健壮、更易于生成的示例,原型,工具或游戏,它基于典型应用简化了Windows和Direct3D的API。 本教程的显示结果与上一个教程相同,但是实现起来简单得多。 源代码 (SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial08 阅读详情

相关推荐

Direct3D 11 教程1:Direct3D 11基础

概览 在第一个教程中,我们学习了创建一个最小Direct3D 11应用程序所需的元素,每个Direct3D 11应用程序必须包含这些元素才能正常工作,这些元素包括创建一个窗口和设备对象,然后才能在窗口中显示颜色。 源代码 (SDK root)\Samples\C++\Direct3D11\Tutorials\Tutorial01。 创建Direct3D 11设备 第一个步骤中的创

4773

window显示驱动开发—使用 Direct3D 版本 10 句柄

Direct3D 10采用强类型句柄系统提升安全性与调试效率,包含三类句柄:运行时句柄(用于驱动访问运行时服务)、驱动句柄(标识驱动私有对象)和内核句柄(跨模式安全通信)。其设计特点包括:1)严格的类型安全检查,编译器可拦截类型不匹配;2)显式生命周期管理,通过Create*/Destroy*函数对控制;3)权限隔离,内核句柄限制用户模式直接访问。驱动开发需注意:匹配正确句柄类型、及时释放资源及验证句柄有效性。该机制有效降低了资源管理错误风险,同时通过内核句柄优化了跨模式通信性能。

王马的博客 1196

RGB相加混色.rar

显示 RGB 相加混色过程。红绿蓝3个园重合时,显示相加后的颜色。

Direct3D 10系统(一)

Direct3D 10系统(一) 作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn 

Clayman的专栏 7183

【点云数据集】整理汇总(自用,更新ing)

涵盖了各种不同的城市场景:教堂、街道、铁路轨道、广场、村庄、足球场、城堡等等。邮件地址:dmich-request@graphics.stanford.edu,内容需包含:1. 您的姓名、头衔或职位,以及所在机构或隶属关系;license比较难获取,目前可获取的人员:(1)目前隶属于大学、工业研究实验室或其他主要机构的已发表过研究成果的研究人员;普林斯顿 ModelNet 项目的目标是为计算机视觉、计算机图形学、机器人技术和认知科学领域的研究人员提供全面、干净的物体 3D CAD 模型集合。

weixin_44392103的博客 796

告别仿真失败!用Sigrity 2022 SystemSI搞定DDR4信号质量仿真的保姆级流程

本文详细介绍了如何使用Sigrity 2022 SystemSI工具进行DDR4信号完整性仿真,提供了一套避免仿真失败、提高仿真精度和加速仿真流程的保姆级方法。从模型验证、设计数据预处理到拓扑构建和参数提取,再到高级调试技巧和仿真加速方案,帮助硬件工程师系统性地解决DDR4信号质量仿真中的常见问题。

weixin_42537499的博客 342

Direct3D 10系统(五) 全文完~~~

 Direct3D 10系统(五)作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  

Clayman的专栏 3502

ATAC-seq数据分析流程

Outline0. ATAC-seq原理0.1 染色体结构0.2 原理0.3 结果0.4 意义1. ATAC-seq数据分析流程1.1 上游分析(1)序列质控和比对(2)序列筛选1.2 下游分析1.3 进阶分析 0. ATAC-seq原理 0.1 染色体结构 0.2 原理 0.3 结果 0.4 意义 1. ATAC-seq数据分析流程 1.1 上游分析 (1)序列质控和比对 fastqc trim_golare bowtie2 mapping时要加上参数 --very-sensitive -X 2000

weixin_57830892的博客 1万+

Direct3D 10系统(五)(转载)

转自http://blog.youkuaiyun.com/soilwork/archive/2006/08/23/1109099.aspxDirect3D 10系统(五)5.3 Resource Mapping and Access         API和管线设计比较复杂的问题之一,关系到如何在CPU和GPU之间共享资源。举个例子,无论Direct3D还是OpenGL都允许顶点缓冲映射到程序

熊晓杰 -- (暴熊 || kongbu0621 || kongbu0622) 的专栏 758

GD32F4系列定时器正交译码器实战:用TIMER1读取旋转编码器信号(附完整代码)

本文详细介绍了GD32F4系列定时器正交译码器的实战应用,重点讲解如何使用TIMER1模块高效读取旋转编码器信号。内容涵盖硬件连接、定时器配置、方向判断与速度计算等关键环节,并提供了完整的代码实现和优化建议,帮助开发者快速掌握GD32微控制器在工业控制和消费电子领域的编码器接口设计。

weixin_29169505的博客 201

工业场景落地:Java+PaddleOCR实现高性能OCR文字识别的终极方案

本文深度解析基于Java的高性能工业级OCR实现方案,集成PP-OCRv5深度学习模型,提供: ✅ 多场景支持:手写体、竖排文本、票据表格的精准识别 ✅ 工业级性能:毫秒级响应,支持GPU加速与高并发处理 ✅ 开箱即用:通过Maven快速集成,5行代码完成文字识别 ✅ 完整技术栈:覆盖文本检测、方向校正、识别后处理全流程 附可运行示例代码,助您快速构建企业级OCR系统!

deng775747758的博客 3611

Direct3D 10

      微软的vista 带了个大家伙 这个可能会导致硬件升级,开发人员为之疯狂的的大家伙。Direct3D 10 要来了 这不仅仅是两位数的飞跃,D3D10图形流水线给出了绘制架构的根本性变化,为了增强了下一代游戏和3D多媒体程序的绘制能力,它的软件和硬件都由底层重新构建。蜕变它基于Windows Vista显示驱动模型(WDDM)构建,增强了功能和性能,保证了GPU显存的完全虚

球场混混的专栏 3257

ZedBoard+Vivado(二)——PS + PL实现流水灯

硬件:Zedboard 软件:Vivado2018.2 + Win10 本文参考了http://blog.chinaaet.com/cuter521/p/35978的设计 1 设计 功能:PS + PL流水灯 语言:C 流程:创建工程->IP Integrator->综合、实现、生成Bitstream->SDK 2 流程 2.1 创建工程 跟上一篇步骤完全相同,这里不用添加源文...

q416524389的博客 3694

Direct3D 10 Overview

<!-- @page { size: 21cm 29.7cm; margin: 2cm } TH P { margin-bottom: 0cm; font-style: italic } TD P { margin-bottom: 0cm } P { margin-bottom: 0.21cm } --> The Direct3

Jedimaster的专栏 2043

【技术笔记】Cadence实现Orcad与Allegro软件交互式布局设置

为了达到原理图和PCB两两交互的功能,需要在ORCAD中将允许交互进行勾选,这样才可以,执行菜单命令Options-Preference后,我们打开参数界面,进行选择Miscellaneous菜单,将交互模式进行勾选。在做硬件pcb设计的时候,原理图选中一个元器件,希望可以再PCB中可以直接选中。对于网表必须是导入第一方网表,第三方是无效的。在allegro中使能/关闭交互式布局功能。

weixin_50499137的博客 2077

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服务器上需要配置云产品流转,让设备A的数据上传后自动发送给设备B。这样就完成了视频画面数据的流转。不过因为阿里云的最大数据限制,每次最大发送10240字节的数据。

1万+

Direct3D 10系统(二)

Direct3D 10系统(二) 作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn 

Clayman的专栏 5411

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Direct3D 10系统(四)

Direct3D 10系统(四)  作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  

Clayman的专栏 2942

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Direct3D 10教程3:Shaders和Effect系统

概览 在前面的教程中,我们设置一个顶点缓存并将一个三角形传递到GPU。现在,我们将看一下图形管线的各个阶段是如何工作的,我们会解释shader的概念和effect系统。 注意:这个教程的共享前一个教程的代码,但强调不同的部分。 源代码 (SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial03 图形管线 在前面的教程中,我们创建了

2040

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Direct3D 10系统(三)

Direct3D 10系统(三)  作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  

Clayman的专栏 4564

Direct3D 10系统

作者:David Blythe本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。翻译:claymanBlog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  译注:这篇文章是MS在SIGGraph 2006上发表的论文,点击这里下载原文

痞子龙3D编程 3153

Direct3D 9,Direct3D 10,Direct3D 11渲染流水线

Direct3D Architecture (Direct3D 9) This topic provides two high-level views of the architecture of Direct3D: Direct3D Graphics Pipeline - A view of the internal processing architecture of

痞子龙3D编程 2354

基于Win10 Visual Studio 2017的Direct3D11开发的小结

一、环境配置 之前写过一篇关于如何在win10下配置VS2017的Direct3D11开发的开发环境的文章,但写的很繁琐,现在看看有点鸡肋。一方面是由于当时刚刚接触DirectX,不知该如何下手,另一方面是一开始从网上搜到的教程都是基于那个微软已经停止更新的DirectX SDK的,因此浪费了不少时间。 所以你现在如果想马上开始着手Direct3D的开发,不用做任何准备工作,只要确保你的系统是...

ZLWhappyisOK的博客 2000
上一篇: Direct3D 10系统(三)
下一篇: Direct3D 10系统(四)
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值