PS 1.x 中的寄存器

简介:

译注:对于一个想学好着色器语言(不管是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,因为这是像素着色器中的颜色寄存器的有效范围

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

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:译注:对于一个想学好着色器语言(不管是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,因为这是像素着色器中的颜色寄存器的有效范围

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

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2010/04/26/1940512.html

目录
相关文章
汇编(五)栈、CPU提供的栈机制、push、pop指令
汇编、栈、CPU提供的栈机制、push、pop指令、编程、汇编语言
30160 2
|
3月前
|
存储 程序员 开发者
【汇编】其他转移指令、call指令和ret指令
【汇编】其他转移指令、call指令和ret指令
|
3月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
120 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
6月前
|
存储 缓存 算法
指令空间
指令空间(Instruction Space)是计算机系统中用于存储和执行指令的区域。指令空间包括处理器内部的寄存器、指令缓存(Instruction Cache)以及内存中的代码段(Code Segment)等。指令空间的作用是接收、存储和处理来自外部设备或程序的指令,从而实现计算机系统的功能。
43 4
|
8月前
|
Linux
Linux进程查看与控制:掌握ps、top、kill等关键命令
在Linux系统中,进程是程序执行的实例,系统中的所有任务都以进程形式运行。了解如何查看和控制进程对于系统管理和故障排除至关重要。本文将介绍Linux下常用的进程查看与控制命令,包括ps、top、kill等,帮助读者熟练使用这些命令来监视和管理系统中的进程。
457 0
|
9月前
PS堆栈重叠
PS堆栈重叠
77 0
|
内存技术
top命令里内存参数 VIRT, RES 和 SHR 分别是什么意思
top指令输出的VIRT, RES 和SHR有什么区别
1682 0
西门子S7-1200移动指令编程实例,移动和块移动指令、填充指令、交换 指令的作用是什么?
西门子S7-1200的移动指令包括移动和块移动指令、填充指令、交换指令。
西门子S7-1200移动指令编程实例,移动和块移动指令、填充指令、交换 指令的作用是什么?
|
存储 Java
04-程序计数器(PC寄存器)
JVM中的程序计数寄存器(Program Counter Register)中,Register的命令源于CPU的寄存器,寄存器存储指令的线程信息。CPU只有把数据装载到寄存器才能够运行。
161 0
04-程序计数器(PC寄存器)
微机原理:当前CS=1000H,IP=0280H,SP=1800H,PS=W0241H,执行INT 7后,寄存器和栈顶相关单元的内容
微机原理:当前CS=1000H,IP=0280H,SP=1800H,PS=W0241H,执行INT 7后,寄存器和栈顶相关单元的内容是什么?
190 0
微机原理:当前CS=1000H,IP=0280H,SP=1800H,PS=W0241H,执行INT 7后,寄存器和栈顶相关单元的内容