« PlayStation 3 硬件架构 (index)

PlayStation 3 硬件架构

Chapter 4: 图形


目录

  1. 概述
  2. 硬件组织
  3. 构造帧
    1. 指令
    2. 顶点着色器
    3. 光栅化
    4. 像素着色器
    5. 像素操作
  4. 统一的视频输出
  5. "真正的"3D视觉/投影

如果你认为拥有各种怪异功能的Cell可以胜任这款游戏机的所有任务,那么让我告诉你一件令人歇斯底里的事情:索尼为3D图形安装了一个独立的芯片

Image
神秘海域3:德雷克的欺骗(Uncharted 3: Drake's Deception)(2011)

Image
上古卷轴5:天际(The Elder Scrolls V: Skyrim)(2011)

Image
杀戮地带3(Killzone 3)(2011)

Image
海贼无双(One Piece: Pirate Warriors)(2012)

PS3游戏的例子。 它们全部以最大分辨率(1280x720像素)呈现。

看来,即使有了超级计算机芯片,索尼公司仍然需要一个GPU来完成PlayStation 3的开发。 这不禁让人怀疑,IBM/索尼/东芝是否在试图进一步扩展Cell的过程中碰了壁,所以索尼别无选择,只能寻求图形公司的帮助。

我们成立了 ICE[Initiative For A Common Engine,通用引擎倡议]团队,目的是开发一些核心技术,供所有第一方共享(......) 有一段时间,[PS3]没有GPU,它将使用SPU运行一切。 ICE团队向日本证明,这是不可能的。 这太荒谬了。 从性能上讲,这将是一场灾难。 这就是为什么他们最终在接近尾声时加入了GPU.。

——来自顽皮狗的匿名消息来源

我可以肯定的是,PS3包含一个由英伟达制造的GPU芯片,用于卸载部分图形流水线。 该芯片名为现实合成器(Reality Synthesizer,"RSX"),运行频率为500 MHz。 与Cell的时钟频率(3.2 GHz)相比,RSX的时钟频率显得有些令人担忧,不过你很快就会发现GPU更适合并行计算大量操作。 因此,在构建图形管线时,我们需要在Cell和RSX之间找到一个平衡点(不过我必须承认,这在纸面上听起来要比实际操作简单得多)。

现在,我将对Cell进行与之前相同程度的分析,这次将重点关注RSX及其图形功能.

概述

自2001年英伟达首次推出GeForce3/NV30系列产品以来,已经过去了5年时间,当时的竞技场上已经出现了3dfx、S3和ArtX/ATI等强手。 尽管在随后的几年里,这些公司的数量慢慢减少,到2006 年,PC市场上的旗舰显卡供应商只剩下ATI和英伟达。

Image
靠近Cell的RSX芯片

RSX继承了英伟达现有的技术,据说它基于面向PC销售的7800 GTX型号,该型号实现了GeForce7(或NV47)架构,也被命名为"Curie"。

在我之前的Xbox分析中,我谈到了GeForce3及其首次推出的像素着色器,那么从那时起发生了什么变化呢? 虽然有一些起伏,但大部分都是渐进式变化,因此与GeForce3的像素着色器相比,没有什么突破性的变化。

另一方面,7800 GTX依靠PCI Express协议与CPU通信,而RSX则经过改造,使用名为Flex I/O的专有协议。 Flex I/O有两种工作模式:

唉,RSX不是Cell,所以要通过IOIF协议,使用最快的插槽。

为了便于比较,IOIF是32位并行总线,理论带宽高达20 GB/s,而7800 GTX使用的PCI Express(x16 1.0)是16位串行总线,理论带宽高达4 GB/s。

硬件组织

RSX拥有256 MB专用GDDR3 SDRAM。 令人惊讶的是,它与Wii的内存类型相同。 内存总线运行频率为650 MHz,理论带宽高达20.8 GB/s

Image
数据如何在可用内存中进行编排的例子. 请注意RSX如何从不同的内存芯片访问其内容。

在这256 MB内,Cell可以放置RSX渲染一帧所需的所有内容。 其中包括顶点数据、着色器、纹理和命令。 现在,得益于Cell的Flex I/O总线,RSX还可以利用上述256 MB的XDR内存(CPU的主RAM)作为工作空间,不过这会带来一些性能上的影响。 例如,如果渲染后的帧将由SPU进行后处理,这就派上了用场。

正如你所看到的,虽然这台游戏机没有实现统一内存架构,但如果程序员决定这样做,它仍然可以在不同的内存芯片上分配图形数据。 我之所以提到这一点,是因为我希望许多"技术讲解员"在大喊"PS3因为没有统一内存架构而受到限制"之类的过度概括性言论之前,能多了解一下这项功能。 这在某些情况下可能是对的,但除非他们提到这些,否则在我看来,这种笼统的说法是偏误导的。

最后,RSX支持多种形式的数据优化以节省带宽,例如 4:1 色彩压缩、Z压缩和"图块"模式(稍后我会详细解释)。

构造帧

现在让我们看看RSX如何处理和渲染3D场景。

Image
RSX的流水线的概览

它的流水线模型与GeForce3非常相似,但在五年的技术进步中得到了极大的提升。 因此,我建议大家先看看那篇文章,因为这篇文章的重点将放在新功能上,我还建议大家阅读PlayStation Portable的GPU,因为很多新的发展和需求都与该芯片重叠。 话虽如此,让我们来看看这里有什么......

指令

Image
取指阶段示意图

与其他GPU一样,必须有一块电路负责接收来自外部的指令。 在RSX中,这由主机图形前端两个模块负责。

主机负责从内存(本地显存或主内存)中读取命令,并将其转换为RSX中其他组件可以理解的内部信号,这需要使用四个子块来完成:

然后,图形前端从图形FIFO读取数据,并向RSX内部所需的单元发出信号,以计算操作。 如果你还记得,这相当于GeForce3中的"pfifo"。

正如您所看到的,命令和数据在到达最终目的地之前会经过许多缓冲区和缓存。 这是有意为之,因为这样可以防止不同的单元和总线以不同的速度运行而导致流水线停滞。 因此,只要有可能,缓存内存就会利用快速带宽。

顶点着色器

Image
顶点阶段流程图,注意如果顶点不需要顶点着色器进一步处理,顶点处理引擎(VPE)就会被绕过。

下一个单元是几何处理块,它是GeForce3中"顶点块"的进化版,用于执行顶点变换。 它仍然可以使用顶点着色器进行编程,这已成为图形行业广泛采用的功能。 此外,指令限制已增加到最少512条(最初的限制是136条!)。

执行着色器的程序块称为顶点处理引擎(Vertex Processing Engine,VPE),每个时钟周期可以处理一个顶点。 如果还嫌不够,还有八个VPE并行工作。 从GeForce6系列开始,英伟达将着色器编程接口与"顶点着色器模型3"或者叫 "vs_3_0_"的模型相统一,它是微软开发的用于DirectX 9.0c库的标准。 VPE还支持非专有的OpenGL 2.1模型和英伟达自己的变体(Cg)。

与GeForce3相比,我们为分支和子程序调用提供了新的指令。 此外,VPE包含四个纹理采样器,可在此阶段提取纹理颜色,以备程序员使用该单元对纹理颜色执行某些操作。

几何图形处理模块是这样工作的:

  1. 索引顶点处理器(Index Vertex Processor,IDX)从VRAM中获取并缓存顶点数据和纹理。 然后,它将数据发送到VAB。
  2. 顶点属性缓冲器(Vertex Attribute Buffer,VAB)从IDX缓存中提取数据,并将其重定向到每个VPE。
  3. 每个VPE根据加载的着色器处理数据。 每个时钟计算一条着色器指令
  4. 每个VPE的结果都会发送到后变换缓存,该缓存会缓存结果,以跳过对相同顶点的相同计算。 这仅适用于使用顶点索引而非顶点数据的情况。
  5. 最终结果将存储在视口剪切单元(Viewport Cull Unit,VPC)和属性RAM(Attribute RAM,ATR)中,前者应用剪切功能丢弃视口以外的顶点,后者缓存顶点属性(纹理、颜色、雾等),以便在下一阶段读取。

光栅化

Image
光栅化阶段简图。 RSX嵌入了不同的单位,用于计算像素和颜色的插值。

接下来就是将顶点转换(光栅化)为像素。 RSX的光栅化器速度非常快,每个周期最多可光栅化8x8像素(64),帧缓冲区最大可达4096x4096像素(不过开发人员可能需要小于此值的缓冲区)。

光栅化器可处理点、线(包括条形和封闭类型)、三角形(包括条形和扇形)、四边形和正多边形。 当然,与本游戏机一样,光栅化器也使用亚像素坐标,即采样点为像素的半坐标(0.5)。 这样就可以在之后应用多重采样等抗锯齿方法。 多重采样包括多次栅格化相同的几何图形,但每次都要移动几个子像素(RSX支持四种不同的移动模式),然后计算平均值。 这样就得到了平滑图像。

此外,该设备还可以使用RSX的专用RAM(容量约为 300 万像素)执行Z剔除(z-culling)。 这样可以节省对已经渲染的像素和模板的处理,并可以对输入的几何图形进行早期Z测试

另一个单独的单元用于光栅化2D物体(精灵),但该单元与3D流水线隔离。 因此,RSX可在2D和3D两种模式下工作,但间歇性地在两种模式间切换会耗费大量性能。

像素着色器

Image
像素/片段阶段图

接下来是片段着色器和纹理块,这是一个可编程单元(通过使用"片段程序"或"着色器"),用于应用纹理映射和其他效果。

作为GeForce3纹理单元的高级继承者,新块包含6个片段单元(也称为"管道"(pipes)),每个单元处理2x2纹理元素(texels)(命名为"quads")。 为了组织多个单元同时工作,另一个名为"着色器四分配器"(Shader Quad Distributor,SQD)的子块将四边形分配给每个片段单元。 然后,每个片段单元加载片段程序。

为了计算操作,每个管道都包含_庞大_数量的,1536个128位寄存器。 此外,每个管道可并行处理多个quads(多线程),但并行处理的quads数量取决于分配给片段程序的寄存器数量(线程数=1536÷着色器预留的寄存器数)。 就全局而言, 最多可并行处理460个四边形。 此外,只要指令不相互依赖,最多可有三个片段管道同时处理两条指令(双发射,像PPU一样)。

片段单元提供与顶点单元类似的算术型指令,并增加了与纹理相关的操作码,如多种类型的纹理获取(因为纹理可以使用多种结构编码,然后进行压缩)和解压缩。 与顶点块类似,片段着色器也遵守DirectX的像素着色器3.0模型、OpenGL的NV_fragment_program2配置文件和Cg的"fp40"配置文件。 所有这些都是为了简化编程,避免从头开始学习低级API。

最后,由于各单元将不断从视频RAM或主RAM中获取纹理片段,因此该模块包含三个纹理缓存: 每个管道有4 KB的L1 Cache,视频RAM有48 KB的L2 Cache主RAM有96 KB的L2 Cache。 请注意,主RAM缓存的容量要大得多,这是为了弥补较高的延迟而做出的明智决定。

像素操作

Image
后处理阶段

在将结果写入帧缓冲区(存储在VRAM或主RAM中)之前,最后一个名为光栅操作块(Raster Operation Block,或ROP/光栅操作单元)的模块会对生成的像素进行最终测试。

有两组ROP,每组由四个块组成(共八个)。 每组执行Z测试、Alpha混合和最终写入内存。 总之,该电路每个时钟可处理多达16个Z值和8种像素颜色。 奇怪的是,PC版的英伟达7800 GTX显卡配备了16个ROP,而不是8个,也许这一削减是为了优先考虑SPU消耗的内存带宽?

为了进一步节省带宽,ROP还提供了色彩压缩和Z压缩功能。 此外,还有一种Tiling模式可用于优化视频编码器的内存访问。 在Tiling模式下,帧缓冲区被存储为连续的128 B 块,以与广播/扫描相同的方式排序。 这样,GPU在传输帧缓冲区进行显示时就无需进行页交换(用于内存寻址),从而提高了带宽。 这些"图块"存储在内存中专门用于这种寻址方式的标记位置。

统一的视频输出

游戏机专用视频插座和十几种模拟信号挤在一个插座里以适应全球各个地区的时代已经一去不复返了。 PlayStation 3最终采用了即将在全球范围内普及的统一视频信号:高清媒体接口(HDMI),用于同时传输音频和视频。

Image
PS3背面,HDMI输出端位于左侧,另一端是老式的多路A/V模拟视频输出端。

HDMI接口由19个针脚组成,全部安装在一个插座中。 它传输的是数字信号,这意味着图像和音频是通过离散的0和1(而不是模拟信号中的连续值范围)来传输的。 因此,它不会像以前的设备那样受到干扰或图像质量下降,如廉价的 SCART 电缆产生的屏幕伪影。

时至今日,HDMI协议仍在不断修订,新版本的规范提供了更多的功能(如更高的图像分辨率、刷新率、替代色彩空间等),同时保留了相同的物理介质以实现向后兼容性。

在PS3的整个生命周期中,索尼通过软件更新为PS3增加了新版本的某些HDMI功能。 与PS3兼容的最后一个协议是1.4版,该协议最显著的特点是支持"3D电视",但其他功能,如更高的视频分辨率,PS3仍被限制在1920x1080像素(即使如此,大多数游戏的帧缓冲区仍被限制在1280x720像素)。

"真正的"3D视觉/投影

那么,我之前提到的"3D电视"是什么呢? 这台游戏机的生命周期恰好与3D电视(所谓的_3DTV_ )的短暂热潮重叠。 为了支持这股热潮,索尼更新了他们的SDK,以协助在RSX中渲染立体帧,并在HDMI编码器中实施了 "3D规范"。 在幕后发生的事情是,编码器一次播放两个画面,电视交替播放,就像30年前Master System的3D眼镜所做的那样。


Previous: 3. 中央处理器 (CPU)

Next: 5. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

主页 · 文章 · 支持 · 关于作者 · 关于此网站