早期的显卡仅用于显示,后来显卡中加入了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显卡简介的更多相关文章

  1. 【原创】Linux环境下的图形系统和AMD R600显卡编程(1)——Linux环境下的图形系统简介

    Linux/Unix环境下最早的图形系统是Xorg图形系统,Xorg图形系统通过扩展的方式以适应显卡和桌面图形发展的需要,然而随着软硬件的发展,特别是嵌入式系统的发展,Xorg显得庞大而落后.开源社区 ...

  2. Linux环境下的图形系统和AMD R600显卡编程(1)——Linux环境下的图形系统简介

    转:https://www.cnblogs.com/shoemaker/p/linux_graphics01.html Linux/Unix环境下最早的图形系统是Xorg图形系统,Xorg图形系统通过 ...

  3. 【原创】Linux环境下的图形系统和AMD R600显卡编程(2)——Framebuffer、DRM、EXA和Mesa简介【转】

    转自:http://www.cnblogs.com/shoemaker/p/linux_graphics02.html 1. Framebuffer Framebuffer驱动提供基本的显示,fram ...

  4. 【原创】Linux环境下的图形系统和AMD R600显卡编程(5)——AMD显卡显命令处理机制

    通常通过读写设备寄存器对设备进行编程,在X86系统上,有专门的IO指令进行编程,在其他诸如MIPS.SPARC这类系统上,通过将设备的寄存器映射到内存地址空间直接使用读写内存的方式对设备进行编程. R ...

  5. 【原创】Linux环境下的图形系统和AMD R600显卡编程(9)——R600显卡的3D引擎和图形流水线

    1. R600 3D引擎 R600核心是AMD一款非常重要的GPU核心,这个核心引入了统一处理器架构,其寄存器和指令集同以前的GPU 都完全不同,对其编程也有比较大的区别. 图1显示了R600 GPU ...

  6. Linux环境下的图形系统和AMD R600显卡编程(2)——Framebuffer、DRM、EXA和Mesa简介

    转:https://www.cnblogs.com/shoemaker/p/linux_graphics02.html 1. Framebuffer Framebuffer驱动提供基本的显示,fram ...

  7. 【原创】Linux环境下的图形系统和AMD R600显卡编程(6)——AMD显卡GPU命令格式

    前面一篇blog里面描述了命令环缓冲区机制,在命令环机制下,驱动写入PM4(不知道为何会取这样一个名字)包格式的命令对显卡进行配置.这一篇blog将详细介绍命令包的格式. 当前定义了4中命令包,分别是 ...

  8. 【原创】Linux环境下的图形系统和AMD R600显卡编程(10)——R600显卡的3D引擎编程

    3D图形处理流水线需要流经多个硬件单元才能得到最后的渲染结果,流水线上的所有的硬件单元必须被正确编程,才能得到正确的结果. 总体上看,从图形处理流水线的源头开始,需要准备好vertex和index,在 ...

  9. 【原创】Linux环境下的图形系统和AMD R600显卡编程(7)——AMD显卡的软件中断

    CPU上处理的中断可以分成“硬件中断”和“软件中断”两类,比如网卡产生的中断称为硬件中断,而如果是软件使用诸如"int 0x10"(X86平台上)这样的指令产生中断称为软件中断,硬 ...

随机推荐

  1. EF实体部分更新的问题

    之前遇到只更新部分的问题:如前端修改用户信息(不修改密码),传实体到后台,这个实体是没有密码,这样一来要更新的话,得先去数据库通过传过来的实体的ID读取这条记录,然后将改动的部分填到查出来的记录中,再 ...

  2. MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':ge

    数据库表里命名有这个字段,可怎么就是报错呢,大神的解释: 加上之后立马好用!!!

  3. STM8S PWM输出停止后 IO口电平输出

    STM8S有许多定时器支持PWM输出,但在停止定时器后,IO口电平到底是多少呢?或高或低. 因此,为了确定PWM停止输出电平后其对应的值是多少,我们在停止PWM输出时需要对CCMR1寄存器进行设置. ...

  4. 理解Queue队列中join()与task_done()的关系

    在网上大多关于join()与task_done()的结束原话是这样的: Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 ...

  5. Docker构建nginx+uwsgi+flask镜像(二)

    Dockerfile搭建环境并打包应用 在上一章Docker构建nginx+uwsgi+flask镜像(一)的学习中,我们学会用命令行一句一句在alpine环境中搭建nginx+uwsgi+flask ...

  6. CFileDialog OFN_NOCHANGEDIR

    问题:CFileDialog 调用后变成了当前工作路径,变成了CFileDialog所选择的路径. 解决:在CFileDialog的dwFlags 设置标志OFN_NOCHANGEDIR就可以了,不会 ...

  7. laravel5.5http会话机制

    1.配置文件 config/session.php 大多数是用file驱动,将session保存在storage/framework/sessions,可以考虑使用redis或者memcached 驱 ...

  8. 《Cracking the Coding Interview》——第16章:线程与锁——题目5

    2014-04-27 20:16 题目:假设一个类Foo有三个公有的成员方法first().second().third().请用锁的方法来控制调用行为,使得他们的执行循序总是遵从first.seco ...

  9. js 请求异常重连或断线后联网重连机制(ajax)

    转到到 https://blog.csdn.net/mengtoumingren/article/details/80296788

  10. katalon系列二:selenium IDE的替代者——Katalon Recorder

    Katalon Recorder是和selenium IDE一样的一个浏览器插件,可以录制web上的操作并回放,但我个人感觉Katalon Recorder更好用.大家可以直接在chrome商店下载安 ...