表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子像素渲染显示技术。该状态被存储在纹理流水线中,但在取纹理指令中被引用。