R700指令集架构参考手册第二章——2.5 程序状态

表2.5到表2.8概括了可被一个在一个R700程序中的单个线程所访问的R700程序状态的程序员的视点。

 

表不包括:

1、由R700硬件专门维护的状态,诸如内部循环控制寄存器

2、仅对主机软件可访问的状态,诸如配置寄存器,或

3、对许多执行线程的状态的复制

 

表2.5到2.8中的列头具有以下意思:

1、被R700软件访问——被执行在R700处理器上的软件,可读(R),可写(W),或可读写(R/W)。

2、被主机软件访问——被执行在主机处理器上的软件,可读(R),可写(W),或可读写(R/W)。表并不包括状态对象,诸如R700配置寄存器,仅对主机软件可访问。

3、每个线程的个数——对每个线程可用的这样的状态对象的个数。在某些情况下,最大个数被所有执行线程共享。

4、宽度——状态对象的位宽

 

表2.5 控制流状态

 

状态                           被R700软件访问          被主机软件访问      #每个线程        位宽                              描述

 

整型常量寄存器(I)             R                                 W                    1            96(3 * 32)      为当前LOOP*指令的CF_DWORD1

                                                                                                                                        微代码格式的CF_CONST域中所指定的

                                                                                                                                        循环可变常量

 

 

循环索引(aL)                    R                                 NO                   1                13              一个寄存器,被LOOP*指令初始化,

                                                                                                                                        并由硬件,在一个循环的每次迭代上

                                                                                                                                        递增,基于CF_DWORD1微代码格式

                                                                                                                                        的LOOP*指令的CF_CONST域中

                                                                                                                                        提供的置。

 

 

栈                                     NO                               NO                芯片特定         芯片特定       硬件维护一单个、多条目的栈,用于

                                                                                                                                        保存和恢复嵌套循环、像素(有效

                                                                                                                                        掩膜和活动掩膜)、断言和其它指令

                                                                                                                                        细节的状态。栈条目的总的个数在

                                                                                                                                        所有执行线程之间被划分。

 

 

 

通用目的寄存器(GPR)      R/W                          NO      127 - (2 * 子句临时GPR)  128(4 * 32)  每个线程可以访问多达127个

                                                                                                                                        GPR,减去2倍的子句临时GPR的个数

                                                                                                                                        四个GPR被保留作为仅针对一个ALU

                                                                                                                                        子句的子句临时GPR(并从而不可被

                                                                                                                                        访问以取和输出单元)。

                                                                                                                                        GPR可以以一种或若干种格式保持

                                                                                                                                        数据:ALU可以处理32位IEEE浮点

                                                                                                                                        (带有特殊值的S23E8),32位

                                                                                                                                        无符号整型,以及32位带符号整型。

 

 

子句临时GPR——NO; YES; 4; 128(4 * 32位); 含有子句临时变量的GPR。被每个线程所使用的子句临时GPR的个数减少了对线程可用的GPR的总数。

 

SIMD全局GPR——R/W; NO; 由驱动定义; 128(4 * 32位); 在内核执行期间,跨所有线程持久的GPR组。可以被用于在线程之间传递数据。

 

地址寄存器(AR)——W; NO; 1; 36(4 * 9位); 包含一个四元素向量索引的寄存器,被MOVA指令写。硬件读该寄存器。索引被用于一个常量文件(被称为常量瀑布)的相对寻址。该状态仅对一个ALU子句持续。当用于相对寻址时,一个特定向量元素必须被选择。

 

常量寄存器(CR)——R; W; 512; 128(4 * 32位); 包含常量的寄存器。每个寄存器被组织为一个向量的4个32位元素。软件可以使用CR亦或常量Cache,但不能同时使用。DirectX称这些为浮点常量(F)寄存器。

 

先前向量(PV)——R; NO; 1; 128(4 * 32位); 包含先前ALU.[X, Y, Z, W]操作的结果的寄存器(译者注:复数)。此状态仅对一个ALU子句持续。

 

先前标量(PS)——R; NO; 1; 32; 包含先前ALU.Trans操作的结果的一个寄存器。此状态仅对一个ALU子句持续。

 

本地数据共享(LDS)——R/W 读:达到16KB;写:16到256个字节。每个线程既能读又能写; NO; 片上共享存储器的每个SIMD。使用一个拥有者的写、共享的读模型,在一个SIMD的元素之间允许共享数据。应用程序应该查询ATI运行时函数来获得实际大小。

 

断言寄存器——R/W; NO; 1; 1; 包含断言位的一个寄存器。这些断言位被 ALU指令置1或清0作为计算某些条件的结果;这些位在后面使用,要么用于屏蔽一次写的结果,要么作为条件本身。一个ALU子句在这寄存器中计算断言位。在这寄存器中的一个断言位可以在一条控制流指令中被引用,以促使条件分支。此状态仅对一个ALU子句持续。

 

像素状态——NO; NO; 1; 192(64 * 2位)(译者注:这里不知道是书写错误还是啥???:)); 状态位反映了每个像素的活动状态,当条件指令被执行时。状态可以是活动非活动分支、或非活动终止

 

有效掩膜——NO; NO; 1; 64; 一个掩膜,指示哪些像素已被一个像素抹杀操作给抹杀。当一条CF_INST_KILL指令被执行时,该掩膜被更新。

 

活动掩膜——W(间接); NO; 1; 每个像素1位; 一个掩膜,指示哪些像素当前正被执行以及哪些不在(1 = 执行,0 = 跳过)。这可以通过PRED_SET* ALU指令来更新,但更新不会起效,直到ALU子句结束。CF_ALU指令可以用子句中最后的PRED_SET*指令的结果来更新此掩膜。

 

表2-7 取顶点状态

 

取顶点常量——R; W; 128; 84; 这些描述了缓存格式等等。

 

表2.8 取纹理和取常量状态

 

纹理采样器——NO; W; 18; 96; 每个VS、GS、PS程序类型有18个采样器(16个给DirecxtX,加上2个备用)可用,其中两个是备用的。一个纹理采样器常量被用于指定一个纹理如何被访问。它包含诸如过滤以及裁剪模式的信息。

 

纹理资源——NO; W; 160; 160; 每个VS、GS、PS程序类型有160个可用的资源,并且16个给FS(译者注:取子例程)程序类型。

 

边界颜色——NO; W; 1; 128(4 * 32位); 这被存储在纹理流水线中,但在取纹理指令中被引用。

 

双立方权重——NO; W; 2; 176; 这些定义了权重,一个水平的,一个垂直的,为双立方插值。该状态被存储在纹理流水线中,但在取纹理指令中被引用。

 

为Cleartype过滤的内核大小——这些定义了内核大小,一个水平的,一个垂直的,用于过滤微软的CleartypeTM子像素渲染显示技术。该状态被存储在纹理流水线中,但在取纹理指令中被引用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值