【原创】Linux环境下的图形系统和AMD R600显卡编程(3)——AMD显卡简介
早期的显卡仅用于显示,后来显卡中加入了2D加速部件,这些部件用于做拷屏,画点,画线等操作。随着游戏、三维模拟以及科学计算可视化等需要,对3D的需求逐渐增加,早期图形绘制工作由CPU来完成,要达到真实感和实时效果,只能绘制一些简单的线框模型,上世纪80年代,斯坦福大学的Jim Clark教授率先提出用专用集成电路技术实现一个专用的3D图形处理器的设想,于1984年推出了世界上第一个通用图形工作站IRIS1400。
AMD最早的显卡从R100开始,一直到R900(R600以后也使用HD xxxx作为代号),R900(HD 6xxx)之后是HD 7xxx系列,目前最新的显卡使用 Rx 2xx代号,最新的是Radeon R9 2xx系列。这里只描述R600显卡的编程,因此只讨论R600之前和之后不久的显卡。
AMD显卡的演变过程如下(参考wiki页和Plan9操作系统开发人员的PPT):
图1
R100是一款固定功能流水线的显卡,R200为可编程处理器,R300在R200的基础上发生了比较大的变化,此后的R400 和R300差别不大。到R500的时候GPU除了有vbios外,还引入了atombios,atombios是一段比较简单的脚本,和具体平台无关,解释器解释执行(代码集成在内核驱动里面),然而3D核较R300变化不大,寄存器变化也比较少(变化主要变化在pixel shader 部分)。
R600在R500的基础上发生很大的变化,2D部件被废除,3D部件改成了unified shader架构,GPU的寄存器和原来完全不同,由于体系结构的变化,对硬件编程也和原来有了很大变化。R700 GPU是R600的优化版,在驱动层面上,R700的编程和R60的编程基本上是一样的,后续的Evergreen、Southern Island和Northern Island都是这种unified shader架构的延续,因此理解R600的编程后将比较容易理解后续GPU核的编程。
本书的后续部分针对R600核心进行描述,总体来说,R600硬件在R500基础上重要的变化包括(参考Radeon R6xx/R7xx Acceleration):
- 不再包含2D加速部件,所有的加速都使用3D部件完成
- 使用Shader Model 4.0,使用Unified shader架构,vertex shader、fragment shader(以及geometry shader)不再分成单独的部件,而是被统一起来,另外包含Geometry shader
除了以上变化之外,还有一点值得注意的是,R600显卡GPU核的计算都是基于标量的,而不是像以前的那样基于矢量的(参考ATI Radeon HD 2000 programming guide)。
对于软件编程而言寄存器读写方式上也有比较大的变化,过去对R500编程的时候,所有的对硬件的编程都是可以用命令包或者普通的直接写寄存器的方式进行的,但是R600的部分寄存器是不能够通过直接写寄存器的方式进行编程的,必须通过3型命令包的方式进行(看到的代码都是这样的,R600寄存器手册上有很多寄存器地址都是一样的,但是含义不同,这些寄存器偏移都大于等于0x8000,是否正确??)。
Linux系统下的drm、exa、mesa代码也和这种变化相对应,通常来说,以Radeon_开头的函数名针对的是r100显卡或者后续显卡的公共代码,R200_开头的函数仅针对r200核心的显卡,R300_开头的函数针对r300、r400和r500,R600_开头的函数针对r600、r700,Evergreen_开头的的函数针对HD5xxx和HD6xxx系列。
后续的blog将介绍AMD显卡的显存管理机制、命令处理、中断机制,然后介绍3D引擎,3D引擎部分包括显卡的图形流水线和对3D引擎的编程以及R600的指令集。后续的内容是阅读代码和AMD公开的部分资料后对相关内容的理解,这些理解肯定有不少错误,仅供参考。
相关参考资料:
AMD公布的资料可以在这里看到,AMD公布的R500核心的编程资料是最完整和最详细的,这部分资料详细介绍了R500显卡工作的原理和一些编程细节。
【原创】Linux环境下的图形系统和AMD R600显卡编程(3)——AMD显卡简介的更多相关文章
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(1)——Linux环境下的图形系统简介
Linux/Unix环境下最早的图形系统是Xorg图形系统,Xorg图形系统通过扩展的方式以适应显卡和桌面图形发展的需要,然而随着软硬件的发展,特别是嵌入式系统的发展,Xorg显得庞大而落后.开源社区 ...
- Linux环境下的图形系统和AMD R600显卡编程(1)——Linux环境下的图形系统简介
转:https://www.cnblogs.com/shoemaker/p/linux_graphics01.html Linux/Unix环境下最早的图形系统是Xorg图形系统,Xorg图形系统通过 ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(2)——Framebuffer、DRM、EXA和Mesa简介【转】
转自:http://www.cnblogs.com/shoemaker/p/linux_graphics02.html 1. Framebuffer Framebuffer驱动提供基本的显示,fram ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(5)——AMD显卡显命令处理机制
通常通过读写设备寄存器对设备进行编程,在X86系统上,有专门的IO指令进行编程,在其他诸如MIPS.SPARC这类系统上,通过将设备的寄存器映射到内存地址空间直接使用读写内存的方式对设备进行编程. R ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(9)——R600显卡的3D引擎和图形流水线
1. R600 3D引擎 R600核心是AMD一款非常重要的GPU核心,这个核心引入了统一处理器架构,其寄存器和指令集同以前的GPU 都完全不同,对其编程也有比较大的区别. 图1显示了R600 GPU ...
- Linux环境下的图形系统和AMD R600显卡编程(2)——Framebuffer、DRM、EXA和Mesa简介
转:https://www.cnblogs.com/shoemaker/p/linux_graphics02.html 1. Framebuffer Framebuffer驱动提供基本的显示,fram ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(6)——AMD显卡GPU命令格式
前面一篇blog里面描述了命令环缓冲区机制,在命令环机制下,驱动写入PM4(不知道为何会取这样一个名字)包格式的命令对显卡进行配置.这一篇blog将详细介绍命令包的格式. 当前定义了4中命令包,分别是 ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(10)——R600显卡的3D引擎编程
3D图形处理流水线需要流经多个硬件单元才能得到最后的渲染结果,流水线上的所有的硬件单元必须被正确编程,才能得到正确的结果. 总体上看,从图形处理流水线的源头开始,需要准备好vertex和index,在 ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(7)——AMD显卡的软件中断
CPU上处理的中断可以分成“硬件中断”和“软件中断”两类,比如网卡产生的中断称为硬件中断,而如果是软件使用诸如"int 0x10"(X86平台上)这样的指令产生中断称为软件中断,硬 ...
随机推荐
- C语言进阶——const 和 volatile 分析09
const只读变量: const修饰的变量是只读的,本质还是一个变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局函数区分配资源空间 const只在编译器有用,在运行期无用 ...
- pyplot基础图表函数概述
pyplot饼图的绘制 pyplot直方图的绘制 极坐标图的绘制
- Spring---配置文件概述
概述 Spring 的配置文件是用于指导 Spring 工厂进行Bean的生产.依赖关系注入及 Bean 实例分发的“图纸”,它是一个或多个标准的XML文档,J2EE 程序员必须学会并灵活应用这份“图 ...
- toolbar menu 字体颜色和大小
Toolbar菜单中menu当中我们大多数都使用图片来按钮,可是有些时候我们也会直接使用文字,文字的颜色如何修改呢. 其实很简单,我们只要修改styles.xml文件中,添加一句 <item n ...
- java身份证计算年龄
技术交流群: 233513714 /** * 根据身份证计算年龄 * * @param idcard * @return */ public static Integer idCardToAge(St ...
- JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32
Java使用API访问Hbase报错: 我的hbase主节点是spark1 java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名 修改主机hosts文 ...
- 2018"百度之星"程序设计大赛 - 资格赛 - 题集
1001 $ 1 \leq m \leq 10 $ 像是状压的复杂度. 于是我们(用二进制)枚举留下的问题集合 然后把这个集合和问卷们的答案集合 $ & $ 一下 就可以只留下被选中的问题的答 ...
- svn服务器的配置和使用
安装好了svn服务器,打开 VisualSVN Server Manager 先新建用户和组,在代码库创建的时候可以指定哪些用户或者组有读写权限,也可以创建好后指定 创建用户 输入用户名和密码创建用户 ...
- 什么时候会报unrecognized selector的异常?
当调用该对象上某个方法,而该对象上没有实现这个方法的时候, 可以通过“消息转发”进行解决,如果还是不行就会报unrecognized selector异常 objc是动态语言,每个方法在运行时会被动态 ...
- 超链接标签的CSS伪类link,visited,hover,active
CSS伪类,是一种特殊的类,它针对到CSS选择器起作用,使选中的标签或元素产生特定的效果. CSS伪类的语法就是: 选择器 : 伪类名 { 属性 : 属性值 } 用的最多的伪类就是超链接a的伪类,有: ...