现在将详细参看本发明的实施例,在附图中说明所述实施例的实例。虽然将结合这 些实施例描述本发明,但将了解,这些实施例并不意欲将本发明限于这些实施例。相反, 本发明意欲涵盖所附
权利要求书所界定的本发明的精神和范围内可包含的替代方案、修 改和等效物。此外,在对本发明实施例的以下详细描述中,为了提供对本发明的全面理 解而阐述了许多具体细节。然而,所属领域的技术人员将认识到,可在没有这些具体细 节的情况下实践本发明。在其它例子中,并未详细描述众所周知的方法、程序、组件和
电路,以免不必要地模糊本发明实施例的各方面。
在程序、步骤、逻辑区
块、处理和对计算机存储器内的数据位的操作的其它符号表 示方面呈现以下详细描述的一些部分。这些描述和表示是
数据处理领域的技术人员用以 最有效地向所属领域的其他技术人员传达其工作的主旨的手段。此处,程序、由计算机 执行的步骤、逻辑区块、过程等大体上被设想成产生所要结果的自相一致的步骤或指令 序列。所述步骤是要求对物理量进行物理操纵的步骤。通常(但不必要),这些量采用 能够在计算机系统中存储、传送、组合、比较和以其它方式操纵的电
信号或磁信号的形 式。事实证明,将这些信号称为位、值、元素、符号、字符、项、数字等有时候较方便, 主要原因是通用。
然而,应牢记,所有这些和类似的术语将与适当的物理量相关联,而且只是应用于 这些量的便利标记。如从以下论述将明白,除非另外明确
声明,否则应了解,在本发明 各处,利
用例如“确定”或“使用”或“设置”或“锁存”或“计时”或“识别”或“选 择”或“处理”或“控制”等术语的论述是指代计算机系统(例如图1的计算机系统 100)或类似的电子计算装置的动作和过程,所述动作和过程对表示为计算机系统的寄 存器和存储器内的物理(电子)量的数据进行操纵并将其转换成以类似方式表示为计算 机系统存储器或寄存器或其它此类信息存储、传输或显示装置内的物理量的其它数据。
图1展示根据本发明一个实施例的计算机系统100。所述计算机系统包含根据本发 明实施例的为特定的基于硬件和基于
软件的功能性提供执行平台的基本计算机系统的 组件。一般来说,所述计算机系统包括至少一个中央处理单元(CPU)101、系统存储 器115和至少一个图形处理器单元(GPU)110。GPU可经由桥接组件/存储器
控制器(未 图示)耦合到系统存储器,或者可经由CPU内部的存储器控制器(未图示)直接耦合 到系统存储器。GPU耦合到显示器112。一个或一个以上额外GPU可视情况而耦合到 系统100,以便进一步提高其计算能
力。GPU耦合到CPU和系统存储器。计算机系统 可实施成(例如)台式计算机系统或
服务器计算机系统,其具有耦合到专用图形渲染 GPU的强大的通用CPU。在此实施例中,可包含添加外围总线、专用图形存储器、输 入/输出(I/O)装置等的组件。类似地,计算机系统可实施成手持装置(例如手机等) 或机顶视频游戏控制台装置。
GPU可实施成离散组件、经设计以经由连接器(例如,图形
加速端口插槽、外围 组件互连Express插槽等)耦合到计算机系统的离散图形卡、离散集成电路电路小片(例 如,直接安装在母板上)或包含在计算机系统
芯片组组件(未图示)的集成电路电路小 片内或PSOC(
可编程芯片上系统)的集成电路电路小片内的集成的GPU。此外,可针 对GPU包含本机图形存储器114以用于高带宽图形数据存储。
图2展示说明根据本发明一个实施例的GPU 110和图形存储器114的内部组件的 图。如图2中所描绘,GPU包含图形管线210和耦合到如图所示的图形存储器的碎片 数据
高速缓冲存储器250。
在图2的实例中,图形管线210包含若干功能模块。图形管线的三个此类功能模块 (例如,程序定序器220、算术逻辑级(ALU)230和数据写入组件240)通过渲染从图 形应用程序(例如,从图形驱动程序等)接收的图元而运作。功能模块220—240经由 碎片数据高速缓冲存储器250存取信息,以用于渲染与图元有关的像素。碎片数据高速 缓冲存储器充当用于存储在图形存储器(例如,
帧缓冲存储器)中的信息的高速高速缓 冲存储器。
程序定序器通过控制图形管线的功能模块的操作而运作。程序定序器可与图形驱动 程序(例如在图1的CPU 101上执行的图形驱动程序)交互,以便控制图形管线的功 能模块接收信息、针对操作而自行配置和处理图元的方式。举例来说,在图2的实施例 中,图形管线通过来自上游功能模块(例如,来自上游光栅器模块、来自设置模块或来 自图形驱动程序)的共同输入260来接收图形渲染数据(例如图元、三
角形条带等)、 管线配置信息(例如模式设置、渲染轮廓等)和渲染程序(例如像素
着色器程序、
顶点 着色器程序等)。输入260充当图形管线的功能模块之间的主要的碎片数据路径或管线。 一般在管线前端接收图元,并在图元沿着管线从一个模块前进到下一模块时将图元逐渐 渲染成所得的所渲染的像素数据。
在一个实施例中,数据以基于包的格式在功能模块220—240之间前进。举例来说, 图形驱动程序以数据包或像素包的形式将数据传输到GPU,所述数据包或像素包专
门 经配置以与管线的碎片管道通信路径交互并沿着所述路径传输。像素包通常包含关于像 素群组或瓦片(例如,四个像素、八个像素、16个像素等)的信息和用于与所述像素 有关的一个或一个以上图元的
覆盖信息。像素包也可包含边带信息,所述边带信息使得 管线的功能模块能够针对渲染操作自行配置。举例来说,像素包可包含配置位、指令、 功能模块地址等,其可由管线的一个或一个以上功能模块用来针对当前的渲染模式等配 置自身。除了像素渲染信息和功能模块配置信息之外,像素包还可包含对管线的功能模 块进行编程以对像素执行着色器处理的着色器程序指令。举例来说,可沿着图形管线传 输包括着色器程序的指令,并由一个或一个以上规定的功能模块来加载所述指令。一旦 在渲染操作期间加载了所述指令,功能模块便可对像素数据执行着色器程序,以便实现 所要的渲染效果。
以此方式,图形管线的功能模块所实施的高度优化和高效的碎片管道通信路径不但 可用来在功能模块(例如,模块220—240)之间传输像素数据,而且还可用来在功能 模块之间传输配置信息和着色器程序指令。
图3是展示根据本发明一个实施例的图形管线210中的
选定级的方框图。图形管线 可包含额外级,或者其可布置成与图3的实例不同。换句话说,虽然在图3的管线的背 景下论述本发明,但本发明不限于此。
在图3的实例中,光栅器310使用内插将三角形翻译成像素。在其各种功能中,光 栅器接收顶点数据、确定哪些像素对应于哪个三角形,并确定需要对像素执行的着色器 处理操作(例如色彩、纹理和雾化操作)以作为渲染的一部分。
光栅器产生用于待处理的三角形的每一像素的像素包。一般来说,像素包是用来计 算
图形显示器的帧中的像素的像素值的例子的一组描述。像素包与每一帧中的每一像素 相关联。每一像素与以屏幕坐标表示的特定(x,y)
位置相关联。在一个实施例中,图 形系统渲染显示器屏幕的两个像素乘两个像素区域,其称为四边形。
每一像素包包含处理所需的像素属性的有效负载(例如,色彩、纹理、深度、雾化、 x和y位置等)和边带信息(数据获取级330提供的像素属性数据)。像素包可含有一 行数据,或者其可含有多行数据。行总的来说是管线总线的数据部分的宽度。
数据获取级获取用于像素包的数据。此数据可包含用于每一像素包的色彩信息、任 何深度信息和任何纹理信息。在将像素包继续发送到下一级之前,将所获取的数据放置 到一行像素数据中的适当域中,其在本文中可称为寄存器。
成行的像素数据从数据获取级进入算术逻辑级230。在本实施例中,在每一时钟循 环中,一行像素数据进入算术逻辑级。在一个实施例中,算术逻辑级包含四个ALU 0、 1、2和3(图5),其经配置以执行与三维图形操作有关的着色器程序,例如(但不限 于)纹理组合(纹理环境)、模板、雾化、阿尔法混合、阿尔法测试和深度测试。每一 ALU每个时钟循环中执行一指令,每一指令用于对对应于像素包的内容的操作数执行 算术运算。在一个实施例中,要花费四个时钟循环在ALU中对一行数据进行操作,每 一ALU具有四个循环的深度。
算术逻辑级的输出去往数据写入级。数据写入级将管线结果存储在存储器(例如, 图1和图2的图形存储器114或存储器115)中的写入
缓冲器或帧缓冲器中。视情况, 如果需要对数据进行进一步的处理,则可将像素包/数据从数据写入级重新循环回到算 术逻辑级中。
图4说明根据本发明一实施例用于一像素群组的一连串像素数据——即一系列成 行的像素数据。在图4的实例中,所述像素群组包括四个像素的四边形:P0、P1、P2 和P3。如上文所提及,可将用于一像素的像素数据被分成数据子组或数据行。在一个 实施例中,可能每个像素有多达四行的数据。举例来说,行0包含四个像素数据的域或 寄存器P0r0、P0r1、P0r2和P0r3(“r”指示行中的域或寄存器,且“R”指示行)。每 一行可代表像素数据的一个或一个以上属性。这些属性包含但不限于z深度值、纹理坐 标、细节
水平、色彩和阿尔法。寄存器值可在算术逻辑级中的ALU执行的操作中用作 操作数。
边带信息420与每一行像素数据相关联。边带信息尤其包含识别或指向将要由ALU 使用指令所识别的像素数据执行的指令的信息。换句话说,与行0相关联的边带信息尤 其识别指令I0。指令可指定(例如)将要执行的算术运算的类型和哪些寄存器含有将要 用作运算中的操作数的数据。
在一个实施例中,边带信息针对每行像素数据包含条件执行位。条件执行位的值对 于每行像素数据可能不同,即使所述行与相同的像素相关联也是如此。可设置与一行像 素数据相关联的条件执行位,以防对相关联的像素的操作数执行指令。举例来说,如果 将与P0R0相关联的条件执行位设置成不执行,那么对于像素P0将不执行指令I0(但 仍可对于群组中的其它像素执行)。下文中将结合图7A进一步描述条件执行位的功能。 在一个实施例中,条件执行位在长度上是单个位。
图5是根据本发明一个实施例的算术逻辑级230的方框图。图5中只展示了特定的 元件;算术逻辑级可包含除了图5所展示且在下文中描述的元件之外的元件。
随着每一新的时钟循环,一行像素数据连续地从数据获取级前进到管线的算术逻辑 级。举例来说,行0在第一时钟上沿着管线前进,接着在下一时钟上是行1,依此类推。 一旦将与特定像素群组(例如,四边形)相关联的所有行均加载到管线中,便可开始将 与下一四边形相关联的行加载到管线中。
在一个实施例中,将用于一像素群组(例如,四边形)中的每一像素的成行的像素 数据与用于群组中的其它像素的成行的像素数据交错。举例来说,对于四个像素的群组、 每个像素四行来说,像素数据采用以下次序沿着管线前进:用于第一像素的第一行(P0r0 到P0r3)、用于第二像素的第一行(P1r0到P1r3)、用于第三像素的第一行(P2r0到P2r3)、 用于第四像素的第一行(P3r0到P3r3)、用于第一像素的第二行(P0r4到P0r7)、用于 第二像素的第二行(P1r4到P1r7)、用于第三像素的第二行(P2r4到P2r7)、用于第四 像素的第二行(P3r4到P3r7),依次类推直到第十五行,其包含P3r12到P3r15。如上 文所提及,可能对于每个像素有不到四个行。通过以此方式交错成行的像素包,可避免 管线中发生停滞,且可提高数据处理量。
因此,在本实施例中,每一时钟循环中将包含边带信息420的一行像素数据(例如, 行0)传递到解串行化器510。在图5的实例中,解串行化器对成行的像素数据进行解 串行化。如上所述,可将用于一像素群组(例如,四边形)的像素数据逐行地交错。此 外,像素数据逐行地到达算术逻辑级。因此,不是逐位地执行本文中所称的解串行化; 而是逐行地执行解串行化。如果图形管线有四个寄存器宽,且每个像素有四个行,那么 解串行化器将像素数据解串行
化成每个像素16个寄存器。
在图5的实例中,解串行化器将用于一像素群组的像素数据发送到缓冲器0、1或 2中的一者。将像素数据发送到缓冲器中的一者,同时由ALU对其它缓冲器中的一者 中的像素数据进行操作,同时其余缓冲器中的已由ALU对其操作的像素数据由串行化 器550串行化,并逐行地馈送到图形管线的下一级。一旦缓冲器排空,其便准备使用用 于下一像素群组的像素数据来填充(覆写);一旦缓冲器已被加载,则其含有的像素数 据便准备被操作;且一旦缓冲器中的像素数据已经被操作,其便准备被排空(覆写)。
包含用于一像素群组(例如,四边形0)的边带信息的像素数据到达算术逻辑级, 接下来是包含用于下一像素群组(例如,四边形1)的边带信息的像素数据,接下来是 包含用于下一像素群组(例如,四边形2)的边带信息的像素数据。
一旦已将与特定像素相关联的所有行像素数据解串行化,便可由ALU对用于所述 像素的像素数据进行操作。在一个实施例中,将相同指令应用于群组(例如,四边形) 中的所有像素。ALU实际上是以SIMD(相同指令、多个数据)的方式在一像素群组上 操作的管线化处理器。
图6展示在任意选定的时钟循环0—15中退出ALU的像素结果。在时钟循环0—3 中,与使用用于像素P0—P3的像素数据执行第一指令I0相关联的像素结果退出ALU。 类似地,与使用用于像素P0—P3的像素数据执行第二指令I1相关联的像素结果退出 ALU,依此类推。再次参看图4,指令I0与用于像素P0—P3的像素数据的行0像素数 据相关联,指令I1与用于像素P0—P3的行1像素数据相关联,依此类推。因为在像素 P0—P3上应用相同的指令,所以ALU以SIMD的方式操作。
图7A展示流经根据本发明一个实施例的ALU的级的像素数据。在本实施例中, 要花费四个时钟循环对像素数据的操作数进行操作——更具体来说,执行指令。实质上, 每一ALU有四个管道级深。也参看图7B,在第一时钟循环期间,将用于第一像素的像 素数据读取到ALU(ALU的级1)中。在第二和第三时钟循环期间,对像素数据执行 计算(例如,在第二时钟循环中),可在乘法器中将操作数相乘,且在第三时钟循环中, 可在加法器(ALU的级2和3)中将乘法器结果相加。在第四时钟循环(ALU的级4) 期间,将像素数据写回到缓冲器或全局寄存器。此外,在第二时钟循环期间,将用于第 二像素的像素数据读取到ALU中——所述数据跟在用于第一像素的像素数据行之后穿 过ALU的其余级。此外,在第三时钟循环期间,将用于第三像素的像素数据读取到ALU 中——所述数据跟在用于第二像素的像素数据之后穿过ALU的其余级。一旦ALU“准 备完毕”,便如刚刚所描述的,用于一个像素的像素数据跟在用于另一像素的像素数据 之后穿过ALU。
如上所述,在一个实施例中,将源自每行的边带信息的相同指令应用于一群组(例 如,四边形)中的所有像素。举例来说,在给定的时钟循环处,指令将指定从用于像素 群组中的第一像素的像素数据中选出的一组操作数。在下一时钟循环中,所述指令将指 定从用于群组中的第二像素的像素数据中选出的另一组操作数,依此类推。根据本发明 的实施例,源自每行的边带信息的条件执行位与每组操作数相关联。一般来说,如果将 条件执行位设置成不执行,那么ALU不对与所述条件执行位相关联的操作数进行操作。
图7A展示根据本发明一个实施例的ALU的每一级中的操作数组。举例来说,也 参看图7B,在时钟循环N-1处,ALU的级1中的操作数组包含如指令I2所指定的用于 像素P1的像素数据(在图中指示为P1.I2);级2正在对却是根据指令I2指定的从用于 像素0的像素数据中选出的操作数组(P0.I2)进行操作;依此类推。在下一连续时钟 循环N中,每一组操作数移动到下一ALU级;将要加载到ALU中的下一组操作数是 P2.I2。
在图7A的实例中,将与操作数P2.I2相关联的条件执行位设置成“不执行”。可通 过着色器程序在图形管线顶部(前端)设置条件执行位。或者,可将条件执行位设置(或 重设)成先前执行的指令的结果。
因此,ALU不对操作数P2.I2进行操作。更具体来说,在一个实施例中,如果将条 件执行位设置成不执行,则ALU不锁存操作数P2.I2。因此,已经对这些操作数进行操 作的ALU的管道级不改变状态。因此,在时钟循环N处,ALU的级1和级2均含有相 同数据(P1.I2),因为触发器未被锁存且因此保持处于其在前一时钟循环N-1中所处的 状态。因此,ALU的下游管道级中的组合逻辑并不转变,且不会不必要地消耗功率。
在时钟循环N+1中,不切换ALU的级2中的组合逻辑,因为操作数与前一时钟 循环中的相同。类似地,在时钟循环N+2中,不切换ALU的级3中的组合逻辑。在 时钟循环N+3中,与级4相关联的触发器不改变状态,因为操作数组与前一时钟循环 相同。
即使条件执行位被设置成不针对操作数P2.I2执行,一组“无用的”操作数也有效 地传播穿过其位置中的ALU。以此方式,维持穿过图形管线的数据的次序,且也维持 ALU上的时序。
一般来说,当将条件执行位设置成不执行时,ALU不对与条件执行位相关联的像 素数据执行任何工作。实际上,条件执行位充当启用位——如果将所述位设置成不执行, 那么数据触发器不被启用且将不俘获新输入的操作数。而是,触发器的输出保持其当前 状态(当在前一时钟循环中俘获到数据时引入的状态)。在一个实施例中,这通过选通 触发器的时钟来实现。如果将条件执行位设置成不执行,那么不对俘获到输入操作数的 触发器进行计时——
时钟信号不转变,且因此触发器未俘获到新数据。在一个实施例中, 如果将条件执行位设置成不执行,则只有ALU的第一级中的触发器(图7B的锁存器 710)不被计时;然而,本发明不限于此。也就是说,可在ALU的一个或一个以上级处 选通时钟。或者,不是选通时钟,而是可在条件执行位的控制下选通对触发器的数据输 入。
通过在不必要时不对ALU中的触发器进行计时来节省功率。也在ALU的组合逻辑 中节省了功率,因为在逻辑中未发生任何切换行为,因为操作数在时钟之间是相同的。
图8是根据本发明一个实施例的用于在图形处理器单元管线中处理像素数据的由 计算机实施的方法的实例的
流程图800。虽然在流程图中揭示了具体步骤,但这些步骤 是示范性的。也就是说,本发明的实施例非常适合于执行流程图中提到的各种其它步骤 或步骤的变化形式。可采用与所展示的次序不同的次序来执行流程图中的步骤。
在方框810中,根据指令来执行算术运算。将相同的指令应用于不同组的像素数据 操作数。每一组操作数与一像素群组(例如四边形的)中的相应像素相关联。条件执行 位也与每一组操作数相关联。
在方框820中,与一组操作数相关联的条件执行位的值用来确定是否将要将那些操 作数加载到ALU中。更具体来说,如果将条件执行位设置成第一值(例如0或1),则 将操作数加载到ALU中并由ALU操作,但如果将条件执行位设置成第二值(例如,分 别是1或0),则不将操作数加载到ALU中或由ALU操作。
总之,在一像素群组上应用指令,但可能没必要对用于群组中的每一像素的像素数 据执行指令。为了在管线中维持适当的次序,将指令应用于群组中的每一像素——从用 于群组中的每一像素的像素数据中选出一组操作数。然而,如果将与用于像素的一组操 作数相关联的条件执行位设置成不执行,那么ALU不对用于所述像素的那些操作数进 行操作。因此,不会不必要地对ALU触发器进行计时和切换,因而节省了功率。由此, 本发明的实施例非常适合于手持和其它便携、用电池操作的装置以及其它类型的装置中 的图形处理。
已经出于说明和描述的目的而呈现了以上对本发明的具体实施例的描述。其并不期 望是详尽的或者将本发明限制于所揭示的精确形式,且鉴于以上教示,许多
修改和变化 形式都是可能的。举例来说,本发明的实施例可在形式上或功能上不同于图2的GPU 110 的GPU上实施。之所以选择和描述了所述实施例,是为了最好地解释本发明的原理及 其实践应用,因而使得所属领域的技术人员能够以适合于所预期的特定用途的各种修改 来最好地利用本发明和各种实施例。希望本发明的范围由所附权利要求书及其等效物来 界定。
相关美国
申请案
本申请案涉及T.博格兰(T.Bergland)等人于2007年8月15日申请的第11/893,499 号美国
专利申请案,标题为“在图形处理器单元管线中缓冲解串行化的像素数据” (Buffering Deserialized Pixel Data in a Graphics Processor Unit Pipeline)且
代理人案号为 NVID-P003219,该申请案转让给本发明的受让人,且其全文在此以引用的方式并入本 文中。
本申请案涉及T.博格兰(T.Bergland)等人于2007年8月15日申请的第11/893,622 号美国专利申请案,标题为“图形处理器单元管线中的共用的可读取且可写入的总值” (Shared Readable and Writeable Global Values in a Graphics Processor Unit Pipeline)且代 理人案号为NVID-P003476,该申请案转让给本发明的受让人,且其全文在此以引用的 方式并入本文中。