译注:对于一个想学好着色器语言(不管是ASM还是HLSL、GLSL)的人来说,了解显卡中相应寄存器的功能和局限是必不可少的。 下面给出了PS 1.X中可用的寄存器的相关信息,希望能给大家带来帮助!

有些单词我实在不知道怎么翻译,只可意会!

像素着色器需要依靠寄存器来取得顶点数据,输出像素数据,取得计算时的临时结果和关联纹理采样通道(stage)。有几种类型的寄存器,每一种都有特殊的功能和用途。

像素着色器需要的用到的数据由寄存器保管,下面是寄器存的所有介绍
寄存器类型:描述了四种可用的寄存器和他们各自的用途
读取端口限制:单指针使用多个寄存器时的限制
R/RW: 描述了哪些寄存器可以用来读,写或是读写。
范围:各个分量的范围的详细说明

Register Types  
                                     Versions   
Name  Type                   1_1        1_2        1_3        1_4
c#  Constant register       8             8             8           8
r#  Temporary register    2             2             2           6
t#  Texture register          4             4             4           6
v#  Color register            2             2             2           2 in phase 2

1,常量寄存器:常量寄存器容纳了常量数据。数据可以用IDirect3DDevice9::SetPixelShaderConstantF函数将一个常量装入常量寄存器中。也可以用def-ps来定义一个常量。 常量寄存器对纹理寻址指令来说是不可用的,唯一例外的是texm3x3spec-ps指令,这个指令使用一个常量寄存器来提供一个视线向量(eye-ray vector)

2,临时寄存器:临时寄存器用来存立即结果。r0用来作为PS的最终输出。shader的最后时刻r0中存放的是最后的像素颜色值
如果任何的着色器试图从一个没有被写入数据的临时寄存器中读取数据时,着色器激IDirect3DDevice9::CreatePixelShader将会失败(shader validation will fail)。假设激活(validation)是可用状态D3DXAssembleShader函数调用也会因为相同的原因而失败。(不要使用D3DXSHADER_SKIPVALIDATION)

纹理寄存器:
在ps 1_1 到1_3中,纹理寄存器容纳纹理数据或是纹理坐标。当一个纹理被采样时,纹理数据便被装载到一个纹理寄存器中。
当纹理通道状态属性被登记的时候纹理采样使用纹理坐标来查询(look up)或采样(sample)一个纹理坐标(u,v,w,q)标记的颜色值。纹理坐标数据会根据顶点纹理坐标数据进行插值,并关联到相关的纹理通道。纹理通道号与纹理坐标声明序列有一个一一对应关系。默认情况下,顶点格式中定义的第一个纹理坐标与纹理通道0关联。
在这些版本的像素着色器中,当纹理寄存器用来做算术运算的时候就和临时寄存器的效果一样了。
在ps_1_4中,纹理寄存器(t#)容纳的是只读纹理坐标信息。这意味着纹理坐标集和纹理通道编号是独立的。纹理通道编号由目的寄存器(r0 to r5)决定。对于texld指令来说,纹理坐标集由源寄存器t0 to t5决定。因此纹理坐标集可以映射到任何的纹理通道上。另外,对于texld的源寄存器(指定纹理坐标信息)也可以是临时寄存器(r#)。在这样的情况下,临时寄存器记录纹理坐标。
颜色寄存器容纳了每个像素的颜色值,这个值通过顶点数据中的漫反射和镜面光颜色值迭代而来。对于ps_1_4。颜色寄存器只有在phase2中可用。如果着色模式设置为D3DSHADE_FLAT,那么顶点颜色中的颜色迭代将不可用。如果雾化开启的话,那么渲染管线还是会忽略着色模式,对雾进行颜色迭代。记住雾化比像素着色器后应用。
通常我们会从v0加载顶点漫反射颜色数据。从v1加载顶点镜面光颜色数据。
输入颜色数据值将会被规范到0和1,因为这是像素着色器中的颜色寄存器的有效范围

像素着色器对颜色寄存器进行只读操作。颜色寄存器中存放的是迭代值,但是迭代可能会造成比纹理坐标低很多精度

转载于:https://www.cnblogs.com/qilinzi/archive/2010/04/26/1940512.html

PS 1.x 中的寄存器相关推荐

  1. php5.3 register_globals,在PHP 5.3中PHP寄存器全局支持?(PHP register globals support in PHP 5.3?)...

    在PHP 5.3中PHP寄存器全局支持?(PHP register globals support in PHP 5.3?) 我一直在使用PHP 5.2并使用register_globals ON. ...

  2. 如何在代码中让按钮高亮_如何在C代码中插入移位寄存器

    上期内容:AI Engine到底是什么? 众所周知,标准C或C++代码是没有HDL代码的并行性和时序性的,那么如何在C代码中插入寄存器呢?Vivado HLS提供了IP库,这些IP库使得HLS可直接从 ...

  3. Cortex-M3中的寄存器组

    文章目录 1 Cortex-M3中的寄存器组 1.1 寄存器组 1.2 MSP和PSP 1.3 Cortex-M3中的堆栈 1.4 程序状态寄存器 1.5 异常屏蔽寄存器 1 Cortex-M3中的寄 ...

  4. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  5. 【UVM实战】第七章:UVM中的寄存器模型(2)简单的寄存器模型

    文章目录 7.2.1.只有一个寄存器的寄存器模型 7.2.2.将寄存器模型集成到验证平台中 7.2.3.在验证平台中使用寄存器模型 7.2.1.只有一个寄存器的寄存器模型 本节为7.1.1节所示的DU ...

  6. 设定是否使用IOB中的寄存器

    1 IOB设置 对于设计顶层的端口会加一级寄存器,即外部数据经FPGA引脚后的第一级逻辑单元为寄存器,FPGA内部数据在输出时先过一级寄存器再到FPGA引脚.这列寄存器称为输入.输出端口寄存器.输入. ...

  7. CP15 中的寄存器

    CP15 中的寄存器 C7 用于控制 cache 和写缓冲区.它是一个只写的寄存器,使用 MCR 指令       来写该寄存器,具体格式如下: MCR P15, 0, <Rd>, < ...

  8. 计算机等级考试照片用ps怎么调,Photoshop教程:用PS消除照片中的杂色条纹

    欢迎来到考试百科网站,下面是由考试百科为广大考生提供的关于Photoshop教程:用PS消除照片中的杂色条纹的文章.感谢广大考生对考试百科的一致关注和支持,希望此文章会对广大考生有所帮助.希望广大考生 ...

  9. 台达PLC中的寄存器如何进行高低位调换?

    台达PLC中的寄存器如何进行高低位调换? 本文以台达EH3系列PLC进行MODBUS RTU通讯为例,介绍台达PLC中的DTM指令和DXCH指令的具体使用方法. 我们先来看下官方给的MODBUS RT ...

最新文章

  1. SQL Server 2008 Ent Dev Key
  2. 从JVM的常见异常来看Tomcat中内存的设置
  3. C语言N台服务器通信,使用socket的Linux上的C语言文件传输顺序服务器和客户端示例程序 ....
  4. Android AutoFocusCallback is not being called or not returning
  5. python对象底层原理_Python字符串对象实现原理详解
  6. 【qduoj - 312】寻找唯一的萌妹(卡时)
  7. 打了断点为直接运行完_BBC主持人多次打断,香港大律师忍不住发飙
  8. 重构碎片化知识_荐书|《重构:数字化转型的逻辑》
  9. javascript for java 一个可以让用户通过JAVA调用JAVASCRIPT的JAVA包
  10. [Python] L1-008. 求整数段和-PAT团体程序设计天梯赛GPLT
  11. java 网络字节序转主机字节序_C语言高级编程——网络编程技术
  12. CSS3 transform 属性
  13. px2rem 第三方库实践
  14. mysql限制数据类型的长度_MySQL数据类型的长度
  15. 《白帽子讲web安全》第1章 我的安全世界观
  16. 2008服务器系统之家,UEFI+GPT模式安装Windows server 2008 R2教程
  17. 华为人工智能atlasA800-9000物理服务器离线安装及CANN安装和MindSpore安装和Tensorflow安装
  18. uniapp微信登录
  19. PySpark | SparkSQL入门 | DataFrame入门
  20. Unity3D内置Shader私房课(三)Decal贴花

热门文章

  1. C++_STL——list(and forward_list)
  2. mysql default unix_timestamp_mysql中的unix_timestamp函数
  3. 下载nodejs的mysql安装包下载_nodejs安装包下载|nodejs(javascript运行环境) v5.3.0 最新稳定版 - 软件下载 - 绿茶软件园|33LC.com...
  4. 用了 HTTPS 就一定安全吗?HTTPS 原理分析——带着疑问层层深入
  5. CGContextSaveGState与CGContextRestoreGState的作用
  6. win10计算机无法睡眠怎么办,Windows10笔记本电脑无法睡眠怎么处理
  7. spark读取hdfs路径下的数据_Spark读取HDFS数据分区参考
  8. 文件上传至服务器cpu,文件服务器构建指南
  9. vue组件一直注册不了_Vue注册组件命名时不能用大写的原因浅析
  10. 极视教育的课程怎么样_蒲公英教育加盟怎么样?