用于滤波的粗略像素遮蔽的方法和装置背景
技术领域
本发明一般涉及计算机处理器领域。更具体地,本发明涉及用于滤波的粗略像素
遮蔽的装置和方法。
背景技术
粗略像素遮蔽(CPS)是标准光栅化流水线的扩展,其实现解偶合的遮蔽的有限子
集。简单但有效地,它能够被视为一般化的多样本抗混叠(MSAA),其中,每像素的多个渲染
目标样本由同一遮蔽器评价来着色。通过增加显示分辨率、功率效率和感知考虑激励,CPS
跨多个像素重复使用相同的遮蔽器评价,同时保持过采样的可见性。
通过构造,CPS继承MSAA的一个质量问题,其在实时渲染中通常被忽视。现在从可
见性采样解耦合的遮蔽器评价,可能不再发生在由光栅化的图元所覆盖的屏幕空间位置。
由于遮蔽通常是在像素中心处评价,部分覆盖的像素推断顶点属性。这可导致各种伪像,特
别是在纹理采样期间。尽管形心插值解决了这个问题,它可能导致其它伪像,该伪像造成瞬
时闪烁和显露的内三角形边缘。
在所渲染的图元覆盖屏幕上的若干粗遮蔽像素时,遮蔽器评价中的减小起作用。
类似于标准光栅化流水线,不跨三角形边界重复使用遮蔽样本。对于在现代工作量中获得
更多的权重的更小的三角形,遮蔽不会下降到低于每图元2×2粗略像素,因为遮蔽的最小
单位是四边形。
进一步减少遮蔽率的需要使得遮蔽像素更粗略,要求比最近邻居采样更好的可见
性样本的颜色重建。对CPS使用滤波需要评价三角形的边界周围的更多的遮蔽四边形,其放
大了现有限制:将插值更多的冗余像素,且属性外推成为更大的问题。具有CPS的双线性滤
波的初步评价证实了伪像的存在。
附图说明
能够从结合以下附图的以下的具体描述获得本发明的更好的理解,附图中:
图1是具有处理器的计算机系统的实施例的框图,该处理器具有一个或多个处理
器核和图形处理器;
图2是处理器的一个实施例的框图,该处理器具有一个或多个处理器核、集成存储
控制器、以及集成图形处理器;
图3是图形处理器的一个实施例的框图,该图形处理器可以是离散的图形处理单
元,或者可以是,与多个处理核集成的图形处理器;
图4是用于图形处理器的图形处理引擎的实施例的框图;
图5是图形处理器的另一实施例的框图;
图6是包括处理元件阵列的线程执行逻辑的框图;
图7示出根据实施例的图形处理器执行单元指令格式;
图8是图形处理器的另一实施例的框图,该图形处理器包括图形流水线、媒体流水
线、显示引擎、线程执行逻辑、以及渲染输出流水线;
图9A是示出根据实施例的图形处理器命令格式的框图;
图9B是示出根据实施例的图形处理器命令序列的框图;
图10示出根据实施例的用于数据处理系统的示例性图形软件架构;
图11示出架构,在该架构上可以实现本发明的实施例;
图12A-C示出由本发明实施例使用的不同的遮蔽技术;
图13示出在本发明的一个实施例中使用的垂直缩放和水平剪切操作;
图14示出纹理空间和屏幕空间之间的映射的一个实施例;
图15示出可以如何使用三角形在顶点处计算纹理导数,该三角形位于给定顶点的
切面;
图16示出根据本发明的一个实施例的方法。
具体实施方式
在以下的描述中,出于解释的目的,阐述了许多具体细节以便提供对下面描述的
本发明的实施例的彻底理解。然而,对本领域技术人员来说将明显的是,可以实施本发明的
实施例而不具有这些具体细节中的一些。在其它实例中,公知的结构和设备以框图的形式
示出以避免混淆本发明的实施例的底层原理。
示例性图形处理器架构和数据类型
概述-图1-3
图1是根据实施例的数据处理系统100的框图。数据处理系统100包括一个或多个
处理器102和一个或多个图形处理器108,并且可以是单处理器台式机系统、多处理器工作
站系统、或具有大量处理器102或处理器核107的服务器系统。在一个实施例中,数据处理系
统100是用于移动式、手持式或嵌入式设备中的系统级核片集成电路(SOC)。
数据处理系统100的实施例可以包括或者被包含在基于服务器的游戏平台、游戏
控制台,包括游戏和媒体控制台、移动游戏控制台、手持式游戏控制台或在线游戏控制台。
在一个实施例中,数据处理系统100是移动电话、智能电话、平板计算设备或移动因特网设
备。数据处理系统100还可包括、耦合到或集成在可穿戴设备,例如智能手表可穿戴设备、智
能眼镜设备、增强现实设备或虚拟现实设备。在一个实施例中,数据处理系统100是电视或
机顶盒设备,其具有一个或多个处理器102和由一个或多个图形处理器108生成的图形界
面。
一个或多个处理器102各包括一个或多个处理器核107来处理指令,当指令被执行
时,执行用于系统和用户软件的操作。在一个实施例中,一个或多个处理器核107中的每一
个被配置成处理特定指令集109。指令集109可以便于复杂指令集计算(CISC)、精简指令集
计算(RISC)或通过超长指令字的计算(VLIW)。多个处理器核107均可以处理不同的指令集
109,其可以包括指令,以便于其它指令集的仿真。处理器核107还可以包括其它处理设备,
例如数字信号处理器(DSP)。
在一个实施例中,处理器102包括高速缓存存储器104。取决于架构,处理器102能
够具有单个内部高速缓存或多级内部高速缓存。在一个实施例中,高速缓存存储器在处理
器102的各个部件之间共享。在一个实施例中,处理器102还使用外部高速缓存(例如,3级
(L3)高速缓存或最后一级高速缓存(LLC))(未示出),其可以使用已知的高速缓存一致性技
术在处理器核107之间共享。寄存器文件106还包括在处理器102中,其可以包括不同类型的
寄存器,用于存储不同类型的数据(例如,整数寄存器、浮点寄存器、状态寄存器和指令指针
寄存器)。一些寄存器可以是通用寄存器,而其它寄存器可以专用于处理器102的设计。
处理器102耦合到处理器总线110来在处理器102和系统100中的其它部件之间传
输数据信号。系统100使用示例性“集线器(hub)”系统架构,包括存储器控制器集线器116和
输入输出(I/O)控制器集线器130。存储器控制器集线器116便于存储器装置和系统100的其
它部件之间的通信,而I/O控制器集线器(ICH)130经由本地I/O总线提供对I/O设备的连接。
存储器设备120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器
(SRAM)设备、闪速存储器设备或具有合适的性能以用作处理存储器的某种其它存储器设
备。存储器120能够存储数据122和指令121,以便在处理器102执行处理时使用。存储器控制
器集线器116还与可选的外部图形处理器112耦合,外部图形处理器112可与处理器102中的
一个或多个图形处理器108通信以执行图形和媒体操作。
ICH 130使得外围设备能够经由高速I/O总线连接至存储器120和处理器102。I/O
外围设备包括音频控制器146、固件接口128、无线收发器126(例如,Wi-Fi、蓝牙)、数据存储
设备124(例如,硬盘驱动器、闪速存储器等)和用于将遗留的(例如,个人系统2(PS2))设备
耦合到系统的遗留I/O控制器。一个或多个通用串行总线(USB)控制器142将输入设备如键
盘和鼠标144结合。网络控制器134也可以耦合到ICH 130。在一个实施例中,高性能网络控
制器(未示出)耦合到处理器总线110。
图2是处理器200的实施例的框图,处理器200具有一个或多个处理器核202A-N、集
成存储器控制器214、以及集成图形处理器208。处理器200可以包括附加的核,其多达并包
括由虚线框表示的附加的核202N。核202A-N中的每个包括一个或更多个内部高速缓存单元
204A-N。在一个实施例中,每个核还有权访问一个或多个共享的高速缓存单元206。
内部高速缓存单元204A-N和共享的高速缓存单元206表示处理器200内的高速缓
存存储器一致性。高速缓存存储器一致性可以包括每个核内的至少一级指令和数据高速缓
冲以及一个或更多级共享的中间级高速缓存(例如2级(L2)、3级(L3)、4级(L4))或其它级的
高速缓存,其中外部存储器之前的最高级别的高速缓存被分类为最后一级高速缓存(LLC)。
在一个实施例中,高速缓存一致性逻辑保持各个高速缓存单元206和204A-N之间的一致性。
处理器200还可以包括一组一个或多个总线控制器单元216和系统代理210。一个
或多个总线控制器单元管理一组外围总线,例如一个或多个外围组件互连总线(例如,PCI、
PCI Express)。系统代理210提供对于各种处理器组件的管理功能性。在一个实施例中,系
统代理210包括一个或更多集成的存储器控制器214来管理对各种外部存储器设备(未示
出)的访问。
在一个实施例中,一个或多个核202A-N包括对同时多线程的支持。在这样的实施
例中,系统代理210包括用于在多线程处理期间协调和操作核202A-N的组件。系统代理210
可以另外包括功率控制单元(PCU),其包括逻辑和部件以调节核202A-N和图形处理器208的
功率状态。
处理器200另外包括图形处理器208来执行图形处理操作。在一个实施例中,图形
处理器208耦合至该组共享的高速缓存单元206以及系统代理单元210,包括一个或多个集
成的存储器控制器214。在一个实施例中,显示控制器211与图形处理器208耦合以驱动对到
一个或多个耦合的显示器的图形处理器输出。显示控制器211可以是单独的模块,其经由至
少一个互连耦合到图形处理器,或者可以集成在图形处理器208或系统代理210内。
在一个实施例中,基于环的互连单元212用来耦合处理器200的内部元件,然而可
以使用备选互连单元,诸如点对点互连、开关互连或其它技术,包括本领域公知的技术。在
一个实施例中,图形处理器208经由I/O链路213耦合到环互连212。
示例性I/O链路213表示多个种类的I/O互连中的至少一个,包括封装I/O互连,其
便于各种处理器组件和高性能嵌入式存储器模块218(如eDRAM模块)之间的通信。在一个实
施例中,每个核202-N和图形处理器208使用嵌入式存储器模块218作为共享的末级高速缓
存。
在一个实施例中,核202A-N是执行相同的指令集架构的同质核。在另一个实施例
中,核202A-N在指令集架构(ISA)方面是异质的,其中,核202A-N中的一个或多个执行第一
指令集,而至少一个其它核执行第一指令集的子集或不同的指令集。
处理器200可以是一个或多个衬底的部分或者在一个或多个衬底上实现,该衬底
使用任何数量的工艺技术,例如互补金属氧化物半导体(CMOS)、双极结型/互补金属氧化物
半导体(BiCMOS)或N型金属氧化物半导体(NMOS)逻辑。另外,处理器200可以实现在一个或
多个芯片上或实现为片上系统(SOC)集成电路,具有所示部件以及其它部件。
图3是可以是离散的图形处理单元,或可以是与多个处理核集成的图形处理器的
图形处理器300的一个实施例的框图。在一个实施例中,图形处理器经由到图形处理器上的
寄存器的存储器映射I/O接口,并经由放置到处理器存储器的命令而通信。图形处理器300
包括存储器接口314,用于访问存储器。存储器接口314可以是到本地存储器、一个或多个内
部高速缓存、一个或多个共享的外部高速缓存和/或系统存储器的接口。
图形处理器300还包括显示控制器302来驱动显示输出数据到显示设备320。显示
控制器302包括硬件,用于一个或多个重叠平面,用于显示和多层视频组合物或用户接口元
件。在一个实施例中,图形处理器300包括视频编解码器引擎306来将媒体到、从、或在一个
或多个媒体编码格式之间编码、解码或转码;媒体编码格式包括但不限于运动图像专家组
(MPEG)格式(例如MPEG-2)、高级视频编码(AVC)格式(例如H.264/MPEG-4AVC)、以及,运动图
像和电视工程师协会(SMPTE)421M/VC-1、和联合图像专家组(JPEG)格式(例如JPEG和运动
JPEG(MJPEG)格式)。
在一个实施例中,图形处理器300包括块图像传输(BLIT)引擎304,用于执行二维
(2D)光栅化器操作,包括例如位边界块传输。然而,在一个实施例中,使用图形处理引擎
(GPE)310的一个或所述多个部件执行2D图形操作。图形处理引擎310是用于执行图形操作
的计算引擎,包括三维(3D)图形操作和媒体操作。
GPE 310包括3D流水线312,用于执行3D操作,如使用作用在3D图元形状(例如,矩
形,三角形等)的处理功能来渲染三维图像和场景。3D流水线312包括可编程和固定功能的
元件,在该元件内执行各种任务和/或产生执行线程到3D/媒体子系统315。尽管3D流水线
312可用于执行媒体操作,但GPE 310的实施例还包括媒体流水线316,其专用于执行媒体操
作,诸如视频后处理和图像增强。
在一个实施例中,媒体流水线316包括固定功能或可编程逻辑单元,以代替或代表
视频编解码引擎306来执行一个或多个专用媒体操作,如视频解码加速、视频去交织、视频
编码加速。在一个实施例中,媒体流水线316还包括线程产生单元,产生用于在3D/媒体子系
统315执行的线程。所产生的线程执行计算,用于包括在3D/媒体子系统的一个或多个图形
执行单元的媒体操作。
3D/媒体子系统315包括用于执行3D流水线312和媒体流水线316产生的线程的逻
辑。在一个实施例中,流水线发送线程执行请求至3D/媒体子系统315,其包括线程分派逻辑
来仲裁和分派各种请求至可用的线程执行资源。执行资源包括图形执行单元的阵列来处理
3D和媒体线程。在一个实施例中,3D/媒体子系统315包括一个或多个内部高速缓存,用于线
程指令和数据。在一个实施例中,子系统还包括共享存储器,包括寄存器和可寻址存储器,
以在线程之间共享数据并存储输出数据。
3D/媒体处理-图4
图4是用于图形处理器的图形处理引擎410的实施例的框图。在一个实施例中,图
形处理引擎(GPE)410是示于图3的GPE 310的形式。GPE 410包括3D流水线412和媒体流水线
416,每个可以不同于或者类似于3D流水线312的实现和图3的媒体流水线316。
在一个实施例中,GPE 410与命令流传输器403耦合,其提供命令流到GPE 3D和媒
体流水线412、416。命令流传输器403耦合到存储器,其可以是系统存储器或者一个或多个
内部高速缓存存储器和共享高速缓存存储器。命令流传输器403从存储器接收命令,并将命
令发送到3D流水线412和/或媒体流水线416。3D和媒体流水线通过经由各自的流水线中的
逻辑执行操作或通过将一个或多个执行线程分派到执行单元阵列414来处理命令。在一个
实施例中,执行单元阵列414是可缩放的,使得阵列基于GPE 410的目标功率和性能水平而
包括可变数量的执行单元。
采样引擎430耦合到存储器(例如,高速缓存存储器或系统存储器)和执行单元阵
列414。在一个实施例中,采样引擎430提供用于可缩放执行单元阵列414的存储器存取机
制,其允许执行阵列414来从存储器读取图形和媒体数据。在一个实施例中,采样引擎430包
括逻辑以执行媒体的专用图像采样操作。
采样引擎430中的专用媒体采样逻辑包括去噪/解交织模块432、运动估计模块
434、以及图像缩放和滤波模块436。去噪/解交织模块432包括逻辑以对已解码视频数据执
行一个或多个去噪声或解交织算法。解交织逻辑将交织视频内容的交替字段合并为单个视
频帧。去噪逻辑从视频和图像数据减小或移除数据噪声。在一个实施例中,去噪逻辑和解交
织逻辑是运动自适应的,且使用基于视频数据中检测到的运动量的空间或时间滤波。在一
个实施例中,去噪/解交织模块432包括专用移动检测逻辑(例如,运动估计引擎434内的)。
运动估计引擎434通过对视频数据执行视频加速功能(例如运动矢量估计和预测)
而对视频操作提供硬件加速。运动估计引擎确定运动矢量,其描述连续视频帧之间的图像
数据的变换。在一个实施例中,图形处理器媒体编解码器使用视频运动估计引擎434,以对
视频在宏块级执行操作,否则使用通用处理器执行可能是计算密集型的。在一个实施例中,
运动估计引擎434通常可用于图形处理器部件以辅助视频解码和处理功能,其对于视频数
据内的运动的方向或幅度是敏感的或自适应的。
图像缩放和滤波模块436执行图像处理操作以增强所产生的图像和视频的视觉质
量。在一个实施例中,缩放和滤波模块436在提供数据给执行单元阵列414之前在采样操作
期间处理图像和视频数据。
在一个实施例中,图形处理引擎410包括数据端口444,其为图形子系统提供了附
加的机制来访问存储器。数据端口444有助于存储器访问操作,包括渲染目标写入、常数缓
冲器读取、临时存储空间读取/写入、以及媒体表面访问。在一个实施例中,数据端口444包
括高速缓存存储空间,以将对存储器的访问高速缓存。高速缓存存储器可以是单个数据高
速缓存,或者分成多个高速缓存(例如,渲染缓冲器高速缓存、常量缓冲器高速缓存等),用
于通过数据端口的存取存储器的多个子系统。在一个实施例中,在执行单元阵列414中的执
行单元上执行的线程与数据端口通过经由数据分布互连而交换消息来通信,该数据分布互
连耦合图形处理引擎410的每个子系统。
执行单元-图5-7
图5是图形处理器的另一实施例的框图。在一个实施例中,图形处理器包括环形互
连502、流水线前端504、媒体引擎537和图形核580A-N。环形互连502将图形处理器耦合到其
它处理单元,包括其它图形处理器或者一个或多个通用处理器核。在一个实施例中,图形处
理器是集成在多核处理系统中的许多处理器之一。
图形处理器通过环形互连502接收批命令。输入命令由在流水线前端504中的命令
流传输器503解释。图形处理器包括可缩放执行逻辑,用于经由图形核580A-N执行3D几何处
理和媒体处理。对于3D几何处理命令,命令流传输器503提供命令至几何流水线536。对于至
少一些媒体处理命令,命令流传输器503提供命令给耦合到媒体引擎537的视频前端534。媒
体引擎537包括视频质量引擎(VQE)530,用于视频和图像后处理以及多格式编码/解码
(MFX)533引擎,以提供硬件加速媒体数据编码和解码。几何流水线536和媒体引擎537每个
生成执行线程,用于由至少一个图形核580A提供的线程执行资源。
图形处理器包括可缩放的线程执行资源,其特征在于模块化核580A-N(有时被称
为核片),每个具有多个子核550A-N、560A-N(有时被称为核子片)。图形处理器可具有任何
数量的图形核580A至580N。在一个实施例中,图形处理器包括图形核580A,其具有至少第一
子核550A和第二核子核560A。在另一实施例中,图形处理器是具有单个子核(例如,550A)的
低功率处理器。在一个实施例中,图形处理器包括多个图形核580A-N,每个包括一组第一子
核550A-N和一组第二子核560A-N。该组第一子核550A-N中的每个子核包括至少第一组执行
单元552A-N和媒体/纹理采样器554A-N。该组第二子核560A-N中的每个子核包括至少第二
组执行单元562A-N和采样器564A-N。在一个实施例中,每个子核550A-N、560A-N共享一组共
享资源570A-N。在一个实施例中,共享资源包括共享高速缓存存储器和像素操作逻辑。其它
共享资源也可包括在图形处理器的各种实施例中。
图6示出线程执行逻辑600,包括在图形处理引擎的一个实施例中使用的处理元件
的阵列。在一个实施例中,线程执行逻辑600包括像素遮蔽器602、线程分派器604、指令高速
缓存606、包括多个执行单元608A-N的可缩放执行单元阵列、采样器610、数据高速缓存612、
以及数据端口614。在一个实施例中,所包括的组件经由链接到每个部件的互连结构而互
连。线程执行逻辑600包括一个或多个连接,其通过一个或多个指令高速缓存606、数据端口
614、采样器610、以及执行单元阵列608A-N到存储器,例如系统存储器或高速缓存存储器。
在一个实施例中,每个执行单元(例如,608A)是单独的向量处理器,其能够执行多个同时线
程以及并行地处理每个线程的多个数据元素。执行单元阵列608A-N包括任何数量的个别执
行单元。
在一个实施例中,执行单元阵列608A-N主要用于执行“遮蔽器”程序。在一个实施
例中,阵列608A-N中的执行单元执行指令集,该指令集包括对许多标准3D图形遮蔽器指令
的本地支持,使得遮蔽器程序从图形库(例如,Direct 3D和OpenGL)用最小的转换被执行。
执行单元支持顶点和几何处理(例如,顶点程序、几何形状程序、顶点遮蔽器)、像素处理(例
如,像素遮蔽器、片段遮蔽器)和通用处理(例如,计算和媒体遮蔽器)。
执行单元阵列608A-N中的每个执行单元在数据元素的阵列上操作。数据元素的数
量是“执行大小”,或者对于指令的通道数量。执行通道是执行逻辑单元,用于数据元素访
问、掩蔽和指令内的流控制。通道的数量可独立于特定图形处理器的物理ALU和SUP的数量。
执行单元608A-N支持整数和浮点数据类型。
执行单元指令集包括单指令多数据(SIMD)指令。各种数据元素可以作为压缩数据
类型而存储在寄存器中,并且执行单元将基于元素的数据大小而处理各种数据。例如,当工
作在256位宽的矢量时,256位向量存储在寄存器中,且执行单元操作在向量上作为四个独
立的64位压缩数据元素(四字(QW)大小的数据元素)、八个单独的32位压缩数据元素(双字)
大小的数据元素),16个单独的16位压缩数据元素(字(W)大小的数据元素),或32个单独的8
位数据元素(字节(B)大小的数据元素)。然而,不同的向量宽度和寄存器大小也是可能的。
一个或多个内部指令高速缓存(例如,606)被包括在线程执行逻辑600中来高速缓
存用于执行单元的线程指令。在一个实施例中,包括一个或多个数据高速缓存(例如,612)
以在线程执行期间高速缓存线程数据。包括采样器610以提供用于3D操作的纹理采样和用
于媒体操作的媒体采样。在一个实施例中,采样器610包括专用纹理或媒体采样功能,以在
采样过程中处理纹理或媒体数据,然后将所采样的数据提供给执行单元。
在执行期间,图形和媒体流水线发送线程经由线程产生和分派逻辑发起请求到线
程执行逻辑600。线程执行逻辑600包括本地线程分派器604,仲裁来自图形和媒体流水线的
线程发起请求,且在一个或多个执行单元608A-N实例化所请求的线程。例如,几何流水线
(例如,图5的536)分派顶点处理、细分或几何处理线程到线程执行逻辑600。线程分派器604
还可以处理来自执行遮蔽器程序的运行时线程产生请求。
一旦一组几何对象已被处理,且光栅化成像素数据,像素遮蔽器602被调用以进一
步计算输出信息并使结果写入到输出表面(例如,色彩缓冲器、深度缓冲器、模板缓冲器
等)。在一个实施例中,像素遮蔽器602计算要被遍及光栅化的对象插值的各种顶点属性的
值。像素遮蔽器602然后执行提供API的像素遮蔽器程序。为执行像素遮蔽器程序,像素遮蔽
器602通过线程分派器604分派线程到执行单元(例如,608A)。像素遮蔽器602使用在采样器
610中的纹理采样逻辑,以访问存储在存储器中的纹理图的纹理数据。对纹理数据和输入几
何数据的算术运算计算用于每个几何片段的色彩数据,或从进一步处理丢弃一个或多个像
素。
在一个实施例中,数据端口614提供用于输出经处理的数据的线程执行逻辑600的
存储器访问机制到存储器,用来在图形处理器输出流水线上处理。在一个实施例中,数据端
口614包括或耦合到一个或多个高速缓存存储器(例如,数据高速缓存612)用于高速缓存数
据,以便经由数据端口的存储器访问。
图7是示出根据实施例的图形处理器执行单元指令格式的框图。在一个实施例中,
图形处理器执行单元支持具有多种格式的指令的指令集。实线框图示通常包括在执行单元
指令的各部件,而虚线包括可选的、或者仅包括在指令的子集中的部件。所描述的指令格式
图示了宏指令,因为它们是被提供到执行单元的指令,而不是在对指令执行处理时从指令
解码所导致的微操作。
在一个实施例中,图形处理器执行单元固有地支持采用128位格式710的指令。64
位压缩指令格式730可用于基于所选择的指令的一些指令、指令选项、以及操作数的数量。
固有128位格式710提供访问到所有指令选项,而一些选项和操作被限制在64位格式730。可
在64位格式730中可用的固有指令随着实施例变化。在一个实施例中,使用索引字段713的
索引值的集合来部分压缩该指令。执行单元硬件基于索引值参考压缩表集合,并使用压缩
表输出以重建采用128位格式710的固有指令。
对每种格式,指令操作数712定义执行单元要执行的操作。执行单元跨每个操作数
的多个数据元素并行执行每一个指令。例如,响应于加法指令,执行单元跨表示纹理元素或
图片元素的每个颜色通道执行同时的加法运算。默认地,执行单元跨操作数的所有数据通
道执行每一个指令。指令控制字段712允许某些执行选项的控制,例如信道选择(例如,预
测)和数据信道顺序(例如,混合)。对于128位指令710,exec(执行)尺寸字段716限制将被并
行地执行的数据通道的数量。exec(执行)尺寸字段716不可用于64位压缩指令格式730。
一些执行单元指令具有多达三个操作数,包括两个源操作数src0 722、srd1 722,
以及一个目的地718。在一个实施例中,执行单元支持双目标地指令,其中,目的地之一是隐
含的。数据操作指令可以具有第三源操作数(例如,SRC2 724),其中指令操作数JJ12确定源
操作数的数量。指令的最后的源操作数可以是用该指令传送的立即的(例如,硬编码的)值。
在一个实施例中,基于操作数位字段将指令分组为简化操作数解码740。对于8位
操作数,位4、5和6允许执行单元确定操作数的类型。所示出的精确的操作数分组是示例性
的。在一个实施例中,移动和逻辑操作数组742包括数据移动和逻辑指令(例如,mov,cmp)。
移动和逻辑组742共享五个最高有效位(MSB),其中移动指令采用形式0000xxxxb(例如,
0x0x)且逻辑指令采用形式为0001xxxxb(例如,0x01)。流程控制指令组744(例如,call(调
用),jmp)包括采用0010xxxxb形式的指令(例如,0x20)。各种指令组746包括指令的混合,包
括同步指令(例如,wait(等待),send(发送)),采用0011xxxxb形式(例如,0x30)。并行数学
指令组748包括逐分量算术指令(例如,add,mul),采用0100xxxxb的形式(如0x40)。并行数
学组748跨数据通道并行执行算术运算。向量数学组750包括算术指令(例如,dp4),采用
0101xxxxb形式(例如,0x50)。向量数学组执行算术运算,例如对向量操作数的点积计算。
图形流水线-图8
图8是图形处理器的另一实施例的框图,其包括图形流水线820、媒体流水线830、
显示引擎840、线程执行逻辑850、以及渲染输出流水线870。在一个实施例中,图形处理器是
多核处理系统中的图形处理器,该多核处理系统包括一个或多个通用处理核。图形处理器
被到一个或多个控制寄存器(未示出)的寄存器写入控制或通过经由环形互连802发出到图
形处理器的命令被控制。环形互连802将图形处理器耦合到其它处理组件,如其它图形处理
器或通用处理器。来自环形互连的命令被命令流传输器803解释,该命令流传输器803将指
令提供给图形流水线820或媒体流水线830的各个部件。
命令流传输器803针对顶点提取器805部件的操作,它从存储器中读取顶点数据并
执行命令流传输器803所提供的顶点处理命令。顶点提取器805提供顶点数据给顶点遮蔽器
807,其对每个顶点执行坐标空间变换和照亮操作。顶点提取器805和顶点遮蔽器807通过经
由线程分派器831将执行线程分派到执行单元852A、852B而执行顶点处理指令。
在一个实施例中,执行单元852A、852B是矢量处理器阵列,其具有指令集来执行图
形和媒体操作。执行单元852A、852B具有附着的L1高速缓存851,其专用于每一阵列或在阵
列之间共享。高速缓存可以被配置为数据高速缓存、指令高速缓存或单个高速缓存,其被划
分为在不同的分区包含数据和指令。
在一个实施例中,图形流水线820包括细分部件以执行3D对象的硬件加速细分。可
编程外壳遮蔽器811配置细分操作。可编程域遮蔽器817提供细分输出的后端评价。细分器
813在外壳遮蔽器811的指引下操作并包含专用逻辑来基于粗略几何模型而生成具体的几
何对象的集合,粗略几何模型作为输入提供给图形流水线820。如果不使用细分,细分组件
811、813、817可以被旁路。
完整的几何对象可由几何遮蔽器819经由分派给执行单元852A、852B的一个或多
个线程处理,或可直接前进到剪切器829。几何遮蔽器操作在整个几何对象上,而不是如在
图形流水线的前一级中的顶点或顶点的片。如果细化被禁用,则几何遮蔽器819接收来自顶
点遮蔽器807的输入。如果细分单元被禁用,则几何遮蔽器819可由几何遮蔽器程序编程以
执行几何细分。
在光栅化之前,顶点数据被剪切器829处理,其是固定功能剪切器或具有剪切和几
何遮蔽功能的可编程的剪切器。在一个实施例中,渲染输出流水线870中的光栅化器873分
派像素遮蔽器以将几何对象转换为其每个的像素表示。在一个实施例中,像素遮蔽器逻辑
被包括在线程执行逻辑850中。
所述图形引擎具有互连总线、互连结构、或一些其它互连机构,其允许数据和消息
在图形引擎的主要部件之间传递。在一个实施例中,执行单元852A、852B以及相关联的高速
缓存851、纹理和媒体采样器854、以及纹理/采样器高速缓存858经由数据端口856互连,来
执行存储器访问并与图形引擎的渲染输出流水线组件通信。在一个实施例中,采样器854、
高速缓存851、858和执行单元852A、852B各具有单独的存储器访问路径。
在一个实施例中,渲染输出流水线870包含光栅化器和深度测试部件873,其将基
于顶点的对象转换为它们的相关联的基于像素的表示。在一个实施例中,光栅化器逻辑包
括窗口器/掩码单元,以执行固定功能的三角形和线光栅化。在一个实施例中,相关的渲染
和深度缓冲器高速缓存878、879也是可用的。像素操作组件877对数据执行基于像素的操
作,尽管在某些情况下,与2D操作相关的像素操作(例如,具有混合的位块图像传输)由2D引
擎841执行,或者在显示时被显示控制器843使用覆盖显示平面取代。在一个实施例中,共享
的L3高速缓存875可用于所有图形组件,允许共享数据而不使用主系统存储器。
图形处理器媒体流水线830包括媒体引擎337和视频前端834。在一个实施例中,视
频前端834接收来自命令流传输器803的流水线命令。然而,在一个实施例中,媒体流水线
830包括单独的命令流传输器。视频前端834处理媒体命令,然后发送命令到媒体引擎837。
在一个实施例中,媒体引擎包括线程产生功能以产生线程,以便经由线程分派器831分派给
线程执行逻辑850。
在一个实施例中,图形引擎包括显示引擎840。在一个实施例中,显示引擎840在图
形处理器外部且与图形处理器经由环形互连802或一些其它互连总线或结构而耦合。显示
引擎840包括二维引擎841和显示控制器843。显示引擎840包含专用逻辑,能够独立于3D流
水线而操作。显示控制器843耦合到显示设备(未示出),其可以是系统集成显示设备(如在
膝上型计算机中),或通过显示装置连接器而附接的外部显示装置。
图形流水线820和媒体流水线830可配置成执行操作,该操作基于多个图形和媒体
编程接口且不针对任何一个应用程序编程接口(API)。在一个实施例中,用于图形处理器的
驱动器软件将专用于特定图形或媒体库的API调用转换为可由图形处理器处理的命令。在
各个实施例中,提供对以下这些的支持:Khronos组支持的开放图形库(OpenGL)和开放计算
语言(OpenCL),来自微软公司的Direct3D库,或者,在一个实施例中,支持OpenGL和D3D两
者。还可以对开源计算机视觉库(OpenCV)提供支持。将来的API与兼容3D流水线也会是被支
持,如果映射可进行从将来的API的流水线到图形处理器的流水线。
图形流水线编程-图9A-9B
图9A是示出根据实施例的图形处理器命令格式的框图,并且图9B是示出根据实施
例的图形处理器命令序列的框图。图9A中的实线框示出通常包括在图形命令中的部件,而
虚线包括可选的部件,或者仅包括在图形命令的子集中的部件。图9A的示例性图形处理器
命令格式900包括数据字段,以识别命令的目标客户端902、命令操作码(操作数)904、以及
用于该命令的相关数据906。在一些命令中也包括子操作数905和命令大小908。
客户端902指定图形设备的客户端单元,其处理命令数据。在一个实施例中,图形
处理器命令解析器检查每个命令的客户端字段,以调节该命令的进一步处理,并将命令数
据发送给合适的客户端单元。在一个实施例中,图形处理器客户端单元包括存储器接口单
元、渲染器单元、2D单元、3D单元以及媒体单元。每个客户端单元具有相应的处理流水线,其
处理命令。一旦由客户端单元接收到命令,客户端单元读取操作数904和子操作数905(如果
存在的话)来确定要执行的操作。客户端单元使用命令的数据906字段中的信息来执行命
令。对于一些命令,预期明确命令大小908来指定命令的大小。在一个实施例中,命令解析器
基于命令操作数自动地确定至少一些命令的大小。在一个实施例中,通过多个双字来对准
命令。
图9B中的流程图示出了采样命令序列910。在一个实施例中,图形处理器的特征在
于数据处理系统的软件或固件的实施例,使用示出的命令序列的版本来建立、执行并终止
一组图形操作。为了示例性目的示出和描述采样命令序列,然而实施例并不局限于这些命
令或这个命令序列。此外,命令可以被发布为命令序列中的批命令,使得图形处理器将至少
部分地并发的方式处理命令序列。
样本命令序列910可以开始于流水线冲洗命令912,以使任何活动图形流水线完成
流水线的当前未决命令。在一个实施例中,3D流水线922和媒体流水线924不同时操作。执行
流水线冲洗以使活动图形流水线完成任何未决命令。响应于流水线冲洗,图形处理器的命
令解析器将暂停命令的处理,直到活动绘图引擎完成未决的操作并且相关的读取高速缓存
无效。可选地,标记为“脏”的渲染器高速缓存中的任何数据可以被冲洗到存储器。流水线刷
新命令912可用于流水线同步或在使图形处理器处于低功率状态之前使用。
当命令序列需要图形处理器在流水线之间明确地切换时,使用流水线选择命令
913。流水线选择命令913在发出流水线命令之前在执行上下文内仅仅需要一次,除非该上
下文要对两个流水线发出命令。在一个实施例中,在流水线切换之前,立即需要通过流水线
选择开关913的流水线冲洗命令912。
流水线控制命令914配置用于操作的图形流水线,并且用于编程3D流水线922和媒
体流水线924。流水线控制命令914配置用于活动流水线的流水线状态。在一个实施例中,流
水线控制命令914用于流水线同步,并在处理批命令之前从活动流水线内的一个或多个高
速缓存存储器清理数据。
返回缓冲器状态命令916用于配置相应流水线的一组返回缓冲器,以写入数据。某
些流水线操作需要一个或多个返回缓冲器的分配、选择、或配置,在处理期间操作将中间数
据写入该一个或多个返回缓冲器。图形处理器还使用一个或多个返回缓冲器来存储输出数
据,并执行交叉线程通信。返回缓冲器状态916包括选择返回缓冲器的大小和数量以用于一
组流水线操作。
命令序列中的其余命令基于用于操作的活动流水线而不同。基于流水线确定920,
命令序列被适应于从3D流水线状态930开始的3D流水线922,或从媒体流水线状态940开始
的媒体流水线924。
用于3D流水线状态930的命令包括3D状态设置命令,用于顶点缓冲器状态、顶点元
素状态、常数色彩状态、深度缓冲器状态、和其它状态变量,其在处理3D图元命令之前配置。
至少部分地基于使用的特定3D API而确定这些命令的值。3D流水线状态930命令也能够选
择性地禁止或跳过特定的流水线元件,如果这些元件将不会被使用。
3D图元932命令用来提交要由3D流水线处理的3D图元。经由3D图元932命令传递到
图形处理器的命令和相关联的参数,被转发到图形流水线中的顶点取得功能。顶点取得功
能使用3D图元932命令数据,以生成顶点数据结构。顶点数据结构存储在一个或多个返回缓
冲器中。使用3D图元932命令来通过顶点遮蔽器对3D图元执行顶点操作。为了处理顶点遮蔽
器,3D流水线922将遮蔽器执行线程分派到图形处理器执行单元。
3D流水线922经由执行934命令或事件而触发。在一个实施例中,寄存器写入触发
命令执行。在一个实施例中,通过命令序列中的“go”或“kick”命令而触发执行。在一个实施
例中,使用流水线同步命令触发命令执行,以通过图形流水线冲洗命令序列。3D流水线将执
行3D图元的几何处理。一旦操作完成,所得到的几何对象被光栅化且像素引擎对所产生的
像素着色。还可以对那些操作包括附加命令,以控制像素遮蔽和像素后端操作。
当执行媒体操作时,样本命令序列910遵循媒体流水线924路径。通常,对媒体流水
线924编程的特定用途和方式取决于媒体或将要执行的计算操作。在媒体解码期间,特定的
媒体解码操作可以卸载到媒体流水线。媒体流水线也可以被旁路,且媒体解码可全部或部
分地使用由一个或多个通用处理核提供的资源。在一个实施例中,媒体流水线还包括用于
通用图形处理器单元(GPGPU)操作的元件,其中图形处理器用于使用计算遮蔽器程序执行
SIMD向量操作,该计算遮蔽器程序没有明确地与图形图元的渲染相关。
媒体流水线924以与3D流水线922类似的方式配置。在媒体对象命令942之前,一组
媒体流水线状态命令940被分派或放置于命令队列中。媒体流水线状态命令940包括数据来
配置将用来处理媒体对象的媒体流水线元件。这包括数据来配置媒体流水线内的视频解码
和视频编码逻辑,诸如编码或解码格式。媒体流水线状态命令940还支持对包含一批状态设
置的“间接”状态元素使用一个或更多个指针。
媒体对象命令942提供指针给媒体对象,用于由媒体流水线处理。媒体对象包括存
储缓冲器,该存储缓冲器包含要处理的视频数据。在一个实施例中,所有的媒体流水线状态
必须在发出媒体对象命令942之前有效。一旦流水线状态被配置且媒体对象命令942被排
队,媒体流水线924经由执行934命令或者等同的执行事件(例如,寄存器写入)触发。从媒体
流水线924的输出然后可通过由3D流水线922或媒体流水线924提供的操作而后处理。在一
个实施例中,以与媒体操作类似的方式配置和执行GPGPU操作。
图形软件架构-图10
图10示出根据实施例的数据处理系统的示例性图形软件架构。软件架构包括3D图
形应用程序1010、操作系统1020、以及至少一个处理器1030。处理器1030包括图形处理器
1032和一个或多个通用处理器核1034。图形应用程序1010和操作系统1020每个在数据处理
系统的系统存储器1050中执行。
在一个实施例中,3D图形应用程序1010包含一个或多个遮蔽器程序,其包括遮蔽
器指令1012。遮蔽器语言指令可以是高级遮蔽器语言,如高级遮蔽器语言(HLSL)或OpenGL
遮蔽器语言(GLSL)。应用程序还包括可执行指令1014,其采用适合于由通用处理器核1034
执行的机器语言。应用程序还包括由顶点数据定义的图形对象1016。
操作系统1020可以是从微软公司的操作系统、专有的类UNIX
操作系统、或使用的Linux内核的变体的开源类UNIX操作系统。当使用Direct3D API时,操
作系统1020使用前端遮蔽器编译器1024来将采用HLSL的任何遮蔽器指令1012编译成低级
遮蔽器语言。编译可以是即时编译或应用程序可执行共享预编译。在一个实施例中,在3D图
形应用程序1010的编译期间,高级遮蔽器被编译成低级遮蔽器。
用户模式图形驱动器1026可包含后端遮蔽器编译器1027,以将遮蔽器指令1012转
换到硬件特定表示。当使用OpenGL API时,将采用GLSL高级语言的遮蔽器指令1012传递到
用户模式图形驱动器1026,以便编译。用户模式图形驱动器使用操作系统内核模式功能
1028来与内核模式图形驱动器通信。内核模式图形驱动器1029与图形处理器1032通信以分
派命令和指令。
就本文描述的各种操作或功能的程度,它们可描述或定义为硬件电路、软件代码、
指令、配置和/或数据。该内容可以实现为硬件逻辑、或者作为直接可执行软件(“对象”或
“可执行”形式)、源代码、高级遮蔽器代码,其设计为在图形引擎上执行,或采用用于特定处
理器或图形核的指令集的低级汇编语言代码。本文描述的实施例的软件内容可以通过具有
在其上存储的内容的制品来提供,或经由操作通信接口的方法来提供,其中经由该通信接
口发送数据。
非临时性的机器可读存储介质可以使机器执行所描述的功能或操作,并包括以可
以由机器访问的形式(例如,计算设备、电子系统等)存储信息的任何机制,例如可记录/不
可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、
闪速存储器设备等)。通信接口包括任何机制,其对接任何硬连线介质、无线介质、光学介质
等等,以与另一装置(例如存储器总线接口、处理器总线接口、互联网连接、磁盘控制器等)
通信。通过提供配置参数或发送信号以准备通信接口,用以提供描述软件内容的数据信号,
从而配置该通信接口。通信接口可通过发送到该通信接口的一个或多个命令或信号来访
问。
所描述的各种组件可为用于执行所描述的操作或功能的部件。这里描述的每个组
件包括软件、硬件、或它们的组合。所述组件可以实现为软件模块、硬件模块、专用硬件(例
如应用专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬连接
电路等等。除了这里描述的,可以对本发明的所公开的实施例和实现执行各种修改而不偏
离其范围。因此,本文的说明和示例应以示意性的、而不是限制性的意义来理解。本发明的
范围应当仅参照以下的权利要求来量度。
用于滤波的粗略像素遮蔽的方法和装置
1.概述
下面描述的本发明的实施例解决了与基于光栅化的图形流水线中的粗略像素遮
蔽(CPS)相关的问题。例如,纹理导数的不匹配可导致细节纹理等级的突然变化。已经确定,
该伪像固有地存在于基于光栅化的流水线,但是还没有显著地影响图像质量,该流水线使
用每三角形遮蔽器属性导数。然而,利用粗略的遮蔽率,该影响会产生重大的伪像。
为了解决这个问题,本发明的一个实施例在光栅化之前预先处理网格,对于每个
顶点产生所需平滑顶点属性的唯一的切平面参数化。这些实施例代替了基于切平面参数化
的分析遮蔽器导数,其确保所有共享相同网格的相同顶点的三角形将使用相同的导数。
当与确保相邻图元评价遮蔽的技术在同一位置(并避免外推)组合使用时,本发明
的实施例确保出现完全连续的纹理表面,即使在非常粗略的遮蔽率(例如,4×4或8×8像素
块)时。当以有限数量的多边形近似光滑表面时,这是有用的。
简言之,本发明的实施例包括下列技术,其改进了粗略像素遮蔽(CPS)的的质量
和/或效率:
(a)实现遮蔽空间的可选的采样图案,避免匹配位置处的外推伪像和插值共享三
角形边缘。
(b)高阶滤波逻辑实现粗略遮蔽样本的线性(或更高阶)滤波。
(c)由图像处理中的连续的六边形栅格激发,下面描述的六边形实现支持对正交
网格的类似的剪切和滤波方案。如下面所讨论的,对于粗略遮蔽率,六边形实现在大多数情
况下产生更尖锐外观的图像。
(d)遮蔽跨多个图元重新使用,这可导致具有小的三角形大小的显著的性能增益。
在光栅化之前,可以建立图元群集以进行高效的片上覆盖测试和多个图元的遮蔽属性插
值。
图11提供图形流水线的概述,其中可以使用本发明的实施例。在该实施例中,处理
器核1100中的执行逻辑发送图形命令和几何数据到图形流水线,在所示的示例中,该图形
流水线包括预处理级1101、顶点遮蔽器级1102、几何遮蔽器级1103和像素遮蔽器级1105。
如在下面具体讨论的那样,预处理级1101可执行操作,诸如收集每个顶点的邻接
三角形、在三角形上迭代、以及执行每个顶点的线性属性等式。
简单地说,顶点遮蔽器1102可以对每个顶点执行坐标空间变换和照亮操作。例如,
顶点遮蔽器1102可以将虚拟空间中的每个顶点的3-D位置变换到它出现在屏幕上的2D坐
标。顶点遮蔽器可以操作属性,例如位置、颜色和纹理坐标。在一个实施例中,顶点遮蔽器
1102还包括逻辑1105a来执行与本发明的实施例有关的操作,诸如建立每个顶点的切平面
等式(参见,例如以下的平滑纹理导数部分)。
几何遮蔽器1103接收顶点遮蔽器1102的结果(例如,图元,可能具有邻接信息),并
生成新图形图元,例如点、线和三角形。例如,当操作在三角形上时,几何遮蔽器接收三个顶
点作为输入。几何遮蔽器然后可产生并随后发出零个或更多图元(例如,三角形),其被传递
给光栅化器/像素遮蔽器级1104。几何遮蔽器的常见用途包括点的子图形生成、几何细分遮
蔽、以及遮蔽容积排除。几何遮蔽器1103还包括逻辑1105b来执行与本发明的实施例有关的
操作,例如提供每个顶点的切平面等式像素遮蔽器而没有插值。
像素遮蔽器级1104分解三角形(或几何遮蔽器提供的其它)成片段,包括像素块。
例如,取决于实现,片段可以包括2×2像素块、4×4像素块、8×8像素块等等。像素遮蔽器级
1104还可以执行深度测试。通过深度测试的片段被写入到屏幕上,或者可以与现有的像素
(例如,在帧缓冲器中)混合。此外,像素遮蔽器1104包括逻辑1105c,用于执行下面所讨论的
各种操作,包括根据顶点切平面生成结果,并且使用重心坐标来对结果插值,以及其它操
作。
也可以使用各种另外的/其它图形流水线级,并且在这里未示出,以避免模糊本发
明的基本原理。
简要地回到图11,顶点遮蔽器1102、几何遮蔽器1103和像素遮蔽器1104(以及流水
线的任何其它组件)可利用多个执行单元1111-1118,以执行它们各自的功能。具体地,来自
这些组件中的每个的线程可以被调度和分派,以便由调度器/分派单元1106执行。图形指令
可以通过一个或多个执行端口被分派到执行单元1111-1118,如图所示。一旦执行完成,退
出单元119退出指令,在某些情况下将结果经由写回总线提供回调度/分派单元。
一个或多个后像素遮蔽器级1120也可用实现为进一步处理像素,然后渲染在显示
装置上。以示例而非限制的方式,这可以包括最终颜色选择和不由光栅化器/像素遮蔽器执
行的其它像素处理操作。
下面的部分提供根据本发明的实施例所执行的操作的附加细节,以便改善粗略像
素遮蔽(CPS)。然而,应该注意的是,对于遵守本发明的基本原理,一些在下面所提供的具体
细节不是必要的。
2.粗略遮蔽而没有外推
在一个实施例中,在该部分中描述的操作由像素遮蔽器级1104内的逻辑1105c实
现。本发明的一个实施例使用每三角形平面等式来插值用于遮蔽的三角形属性。随着多采
样抗混叠(MSAA)的出现,遮蔽位置有可能实际上并没有被三角形覆盖,这意味着它被外推。
如果实际上覆盖相同的遮蔽位置的邻近三角形具有相似的平面等式,则该外推是可以接受
的。然而,如果不是这种情况,外推会产生表面上的不连续性。遮蔽器还可以读取未由三角
形覆盖的纹理坐标,这将造成纹理对轮廓的泄漏问题。虽然这些伪像对MSAA通常是可接受
的,但它们对于粗略遮蔽的像素变得更显著。
对于该讨论的第一部分,将假定遮蔽重复使用限制在单个三角形内,如根据当前
的CPS定义。如果三角形的边缘在遮蔽空间采样,则对粗略遮蔽样本的线性(或更高阶)滤波
可以在边缘工作而不中断,并且邻接三角形在公共边缘的位置使用相同的遮蔽。进行该假
设,选择具有这种性质的遮蔽参数化。已经考虑了以下选项:
(a)对三角形边缘抓常规网格样本
(b)剪切常规栅格单元以匹配三角形边
(c)使用重心参数化。
如图12a所示,原始的CPS在常规栅格上采样屏幕空间。每个单元中心从它的重心
坐标被插值(并且有时外推)。然后,以遮蔽像素的四边形评价遮蔽。最后,每个可见性样本
发现4个最近的遮蔽像素,并且使用双线性插值来对其颜色插值。如图12a中所示,双线性插
值需要遮蔽没有被三角形直接覆盖的粗略像素,放大了外推问题(白色像素中的红色遮蔽
样本)。
如图12b中所示,避免屏幕空间遮挡网格的外推伪像的一种方式是将外部遮蔽样
本抓到三角形边界。该方法可通过将遮蔽样本的重心坐标夹持到非负域来实现。然而,这样
的方法遇到多个质量问题。首先,邻近三角形不在同一位置采样其共享的边,这导致不连
续。其次,由于遮蔽样本的位置可以改变,可见性样本中的遮蔽颜色滤波的变得非平凡。
重心参数不在这里具体讨论。其主要思想是定义三角形域的遮蔽网格,这保证在
三角形各边上的样本放置。样本可被均匀放置投影后的屏幕空间,或者放置在对象空间。一
个动机是无建立网格变形方法,例如网格颜色(Mesh Colors)。该概念的一个主要问题是,
它不容易控制在三角形域中的实际遮蔽密度,特别是在“瘦的”三角形的情况下。
参照图12c,在本发明的一个实施例中,遮蔽样本被移到遮蔽栅格的顶点。这使得
样本数量不变,并且产生的遮蔽相当于完全覆盖遮蔽像素处的CPS。然而,在一个实施例中,
代替直接从三角形顶点的属性插值,对三角形的每个遮蔽像素执行快速的、小的2D裁剪。该
结果部分地覆盖遮蔽像素,其中覆盖(有效)的遮蔽范围为凸多边形。这个多边形的顶点是
在遮蔽单元的侧边,或在三角形顶点处(其增加了边缘附近的遮蔽密度)。然而,重要的是要
注意,除非在之前使用点采样,标准CPS还使用三角形边界之外的附加遮蔽样本。因此,遮蔽
样本的总数甚至可能小于外推的情况。
评价遮蔽样本之后,对于每个经裁剪单元它们形成凸多边形(0或3-7个顶点)。每
个可见性样本的最终颜色然后被计算为遮蔽多边形的顶点的加权和。在一个实施例中,这
些权重使用一般化的重心坐标来确定,其可以很容易地定义在任何凸多边形上(参见,例
如,描述在[Meyer等人2002]中的Wachspress坐标)。这些坐标是表现良好:如果遮蔽像素被
完全覆盖,则其相当于双线性权重,并且如果遮蔽多边形是三角形,则结果为正常的重心坐
标。
2.1更高阶滤波
在一个实施例中,在该部分中描述的操作被像素遮蔽器级1104中的逻辑1105c执
行。粗略像素遮蔽(CPS)可以看作是放大问题。三角形的表面遮蔽是几乎在任何地方都连续
的信号(除了能见度产生突然不连续的情况,如轮廓和硬阴影)。当采用粗略遮蔽栅格采样
该信号时,合适的预滤波器可以被应用以避免纹理混叠。在最后的步骤中,将可见性样本位
置处的粗略遮蔽栅格上采样,这类似于图像的放大。
因此,当放大级别明显时,不能期望从简单的重建滤波器的质量结果,例如最接近
或双线性滤波。作为比较,实现较高阶的重建滤波器,其使用围绕当前遮蔽四边形的遮蔽样
本的一个附加环,并使用双立方样条插值评价每个像素处的经滤波的颜色。
2.2六边形栅格上的遮蔽
在本部分中描述的操作可以由像素遮蔽器级1104中的逻辑1105c执行。在一个实
施例中,粗略遮蔽空间在六边形上采样,代替了常规的正交网格。虽然正交网格最适合于表
示帧缓冲器,假定当前显示在这个图案中安排其像素,其以低的效率采样2D平面。由于CPS
基本上从可见性对遮蔽解耦合,可以使用不同的遮蔽表示栅格,潜在地使先前引入的流水
线的所有其它方面不变。
在一个实施例中,粗略遮蔽流水线被修改以遮蔽在六方晶格上。通过在正三角形
上的顶点上放置遮蔽顶点,可以构建六方晶格。如图13中所示,在一个实施例中,这是通过
施加垂直缩放和水平剪切操作到利用合适的三角剖分而三角化的正交网格1301以到达六
边形栅格1302来实现。所得到的栅格的Voronoi单元将是六边形而不是正方形。注意,这种
转化需要采用无理数的缩放,这在实践中只可以被近似。也可以使用在数值上更加稳定的
其它的近似,例如秩-1晶格[Dammertz等人2009]。
在一个实施例中,在粗略遮蔽期间,通过施加该变换的逆变换到可见性样本,定位
最接近的三个遮蔽顶点,如之前实现中那样定位正交粗略像素。这种粗略像素的图像在剪
切的栅格中为平行四边形。相对该平行四边形的较短的对角线测试可见性样本限定了六边
形栅格中最接近的三角形。
本发明的一个实施例实现六边形遮蔽的无外推变体。为此,相当于包含当前可见
性样本的最接近的遮蔽三角形而剪切光栅化的三角形。所得到的凸多边形可以与正交粗略
栅格相同地对待,使用广义重心插值。
2.3在六边形栅格滤波
在本部分中描述的操作可以由像素遮蔽器级1104内的逻辑1105c执行。在最接近
滤波期间,显现实现在本发明的一个实施例中的网格的六边形性质。这减少了总体混叠(作
为特殊情况,接近垂直的线可以更好地通过常规栅格重建)并提供2D平面的更好的采样。线
性滤波也可以定义在六边形栅格上:双线性插值被用于正交的粗略像素内;现在可以跨三
角形顶点使用重心插值。不幸的是,线性滤波显现晶格的三角形边缘。其不能再生直线常常
使最终结果差于正交网格的情况,尽管更密集的采样。更高阶的重建滤波器可以在一个实
施例中使用。
以上讨论的双立方重建滤波器将不适合于直接在这种情况下使用,因为它的张量
积(分离)表示不能够利用各向同性和六边形栅格的十二折叠对称性。另一方面,还存在其
它概括一维B样条,其过去已设计出并成功应用于重建六边形采样数据。通过六边形
Voronoi单元的指示函数的多重卷积,得到六角样条,并提供任意度的高质量滤波器[Van
De Ville等,2004]。三方向盒样条是盒样条的特殊类,其特别地适用于六边形采样[Condat
和Van De Ville,2006]。六边形样条和盒样条两者保存了六边形采样的各向同性和对称性
质。在本发明的一个实施例中,使用了诸如描述于[Condat和Van De Ville[2006]]的第二
阶盒样条的有效实现。
利用双立方滤波的正交采样与利用第二阶盒样条的六边形采样的质量比较相比
于线性情况提供了改进的结果。六边形采样获取的图像总体上更尖锐。其部分地因为第二
阶盒样条导致4度多项式,而双立方滤波导致6度。跟双立方的情况为16个相比,参与重构滤
波的着色点的数量为14个。
3.用于粗略遮蔽的纹理滤波
实际遮蔽器几乎始终依赖于纹理信息。纹理数据通常假设为连续信号(其可以采
样的离散形式存储),当在规则栅格遮蔽时其需要被预滤波以避免混叠。预滤波应当从信号
中移除在采样处理后无法被重构的频率。在规则遮蔽期间,每个采样位置表示像素(或具有
超采样反混叠的更精细的子样本)。当利用CPS时,粗略遮蔽栅格可在每像素频率上被重采
样,其表示附加的信号处理步骤。实现表明,纹理滤波在利用粗略遮蔽分辨率时需要特定考
虑。有趣的是,标准光栅化流水线的纹理滤波实现存在可接受的多个缺点,并且总体上在规
则光栅化期间不被注意。然而,这些缺点中的一些利用粗略遮蔽容易变得明显。
3.1纹理滤波宽度
纹理滤波器的维度基于纹理空间中遮蔽像素的估计的足迹来选择,其可近似于椭
圆[Heckbert,1989]。该椭圆的维度和方向取决于u,v纹理坐标相对于x,y屏幕空间位置的
偏导数。高质量纹理滤波器,诸如Heckbert提出的椭圆加权平均(EWA)算法,利用对齐于其
椭圆的平滑各向异性重构滤波计算纹理信号的卷积。实时应用通过预先计算纹理的多个
LoD等级而降低滤波区域中纹理像素的数量将其存储在MIP金字塔[Williams,1983]。
在一个实施例中,纹理滤波的硬件实现选择对应于纹理空间中遮蔽像素的直径的
滤波宽度。其为出现于当前OpenGL和Direct3D规范的设计决定,其导致更尖锐纹理外观,但
实际上遭受了混叠伪像。为理解其原因,考虑渲染具有棋盘纹理的屏幕对齐的四边形,其中
黑色或白色方形的大小精确匹配像素大小。当其四边形的纹理像素刚好对齐于遮蔽像素
时,采样图像精确匹配纹理。然而,当被转换为沿屏幕的半个遮蔽像素时,像素足迹中的滤
波导致均匀的灰色。
从信号处理的角度,标准光栅化流水线选择违反奈奎斯特频率限制的纹理滤波宽
度。理想情况下,像素应当整合其半径1的至少两倍(以利用至少两倍的频率采样信号)。我
们认为其为用于纹理锐化的设计决定,因为实际纹理不会呈现我们先前的棋盘示例的极限
频率。然而,在粗略遮蔽的实验中,严重的纹理混叠可产生于利用各向异性滤波的Direct3D
定义时。为减轻该情况,本发明的一个实施例利用因子2执行纹理梯度偏置,其消除多数混
叠但导致更模糊的纹理外观。
3.2滤波重叠
即使所有遮蔽样本置于三角形内,纹理滤波器仍将覆盖三角形外的纹理空间的部
分。其为内部边所期望的行为,因为其可帮助保存在表面上的遮蔽的平滑性。另一方面,可
导致在纹理空间的轮廓边缘上的纹理泄漏问题。降低CPS的遮蔽率需要更大的纹理滤波器
(因此更高的MIP级别),其表示所有纹理泄漏伪影变得更加显著。
纹理图集特别受这些缺陷的影响,其难以避免跨纹理缝隙的颜色泄漏。其建议依
赖粗略遮蔽的未来流水线在可能时应当避免利用纹理图集。免设置纹理格式的最新研究,
诸如Ptex[Burley和Lacewell,2008],以及无绑定纹理的引入提供了更好的选项。此时,对
纹理图集的准备应当谨慎,以使泄漏不会利用实际遮蔽率导致可见问题。
3.3纹理导数的问题
避免本文描述的外推的工作之后的一个动机在于保存在图元中遮蔽的连续性。在
规则光栅化中,渲染流水线使用外推属性仅用于完成遮蔽四边形。外推“助手像素”从不获
得实际写入的帧缓冲器,并且其最初目的在于计算纹理采样的有限差(唯一的例外是具有
样本级遮蔽器执行的MSAA)。然而,CPS主动使用该像素以重构可见性样本的颜色。如果邻接
的三角形不共享相同的平面等式,其导致跨边的遮蔽的不连续性。应用于一个实施例的剪
切保证遮蔽在边的相同的位置被估计。由于遮蔽属性仅依赖于边的两个顶点,其将匹配两
个图元。
当估计相对于具有外推的CPS的该解决方案时,遮蔽可仍表现不连续,显现三角形
边界。问题在于存在不仅依赖于插值顶点属性而且依赖于其屏幕空间导数的遮蔽组件。纹
理采样是最佳示例,并且呈现于几乎所有实际遮蔽情形,问题更接近地被调查。
没有进行先前措施来匹配跨邻接的三角形中的纹理差;每个三角形被独立设置。
结果,跨三角形的纹理导数中存在较小差,导致出现失配纹理。尽管在多数情况下在每像素
遮蔽中不被注意,减少遮蔽分辨率使其成为显著问题。原因在于,纹理LoD选择需要补偿:例
如通过以因数2降低遮蔽栅格的分辨率,因此纹理导数需要被增加。纹理导数之间的先前失
配以相同的因子倍增。实际上,得到的缺陷可能较为严重以使无外推CPS的优点更不被注
意。
在如下分析中,目标在于标识保证不仅顶点属性,而且匹配于粗略遮蔽位置的其
第一导数的技术。该分析限于纹理导数,并且假设这些导数可被解析地估计。更一般的解决
方案将以有限差值匹配的方式来插值纹理属性,然而,其更加困难并且还将改变表面的外
观(纹理坐标将会移动)。首先,纹理导数问题的正式定义被提供。然后,引入了利用平滑表
面工作的解决方案的一个实施例。
考虑说明于图14的两个邻接的三角形,A和B。纹理坐标的一个分量u为标量属性,
定义在四个不同的顶点,u0、u1、u2和u3。在光栅化期间,顶点被投影至屏幕空间,而u在屏幕
中被感知正确地插值:值l/w和u/w被线性插值,其中w为同质坐标。对于两种三角形,该插值
可通过求解二维平面等式来执行:
然后u可通过求解有理表达式被感知正确地插值:
两个平面等式对在共享边上彼此“相交”,得到沿该边的同一顶点属性。然而,属性
导数还取决于另两个顶点。例如,偏导数可写成:
解析导数的详细求导可出现于[Munkberg和Clarberg,2010]。显然,两个三角形的
导数估计在一般情况下不匹配:
3.4平滑纹理导数
用于求解平滑表面问题的本发明的一个实施例从这些三角形仅为渲染表面的粗
略的分段线性逼近中得到激励。因此,可利用平滑表面导数替换“平面”纹理导数。该导数在
顶点或边上没有突然的不连续性。遮蔽典型地利用每顶点遮蔽法线替换三角形法线,其然
后跨三角形中插值,得到细分表面的平滑照明。利用纹理导数可进行相似处理。
重新参照上述等式,对每个顶点,可建立平面等式,用于包含该顶点的每个三角
形,并且对给定屏幕空间位置求解。然后顶点的纹理导数可为解的均值,并且在三角形中,
每顶点导数可使用重心坐标插值。该技术保证三角形上的连续遮蔽。另一方面,平面等式的
数量将随顶点的价而线性地增长,并且该解决方案在光栅化流水线中绝对地不切实际(重
要的是记住平面等式无法被求平均,因为其表示求有理多项式的分子和分母的均值)。相
反,基于每顶点切平面的不同的方法应用于本发明的一个实施例。
第一,假设单个三角形表示平滑表面。该三角形的每个顶点定义自身的切平面,不
一定与三角形共面。在该三角形光栅化期间,纹理导数可被替换以更好地逼近平滑表面。在
顶点vi附近,导数被计算,如同三角形位于跨距为的切平面(见图15左侧)。特别地,在
图15左侧部分,纹理导数在顶点1500利用位于给定顶点的切平面的三角形1501计算。该切
平面的每个点可利用两个标量ti,bi参数化:
三角形的另两个顶点可投影至相同的切平面,并且利用其t-b参数,可对每个顶点
属性建立线性等式:
该想法在屏幕空间中具有l/w、t/w和b/w的线性平面等式,类似于重心坐标的插
值。例如,如下可对每个顶点的切平面求解:
由此,顶点切平面中的修改的纹理导数可确定为:
其中
在三角形内的任意点,纹理导数可利用三个顶点的平面等式独立确定。然后利用
重心坐标对其插值。该技术需要用于切平面(t/w,b/w,l/w)的每顶点的另外三个平面等式,
并且一个平面等式用于每个属性。
注意,在该实施例中,已引入对可由包含相同顶点的所有三角形共享的每个顶点
的唯一参数化。该技术可利用简单预处理步骤而扩展至三角形网络中的平滑导数。在光栅
化之前,迭代可在所有顶点执行,并且每个邻接三角形投影至其切向基。对于每个顶点属
性,其导致每三角形的线性平面等式。在图15的右侧部分,例如,“平均”顶点属性等式可通
过投影所有邻接三角形至相同的切平面,并利用切线和副法线作为新的基而导出。由于这
些等式是线性的,可确定均值平面等式,其逼近顶点vi的附近的属性的行为:
图16说明根据本发明一个实施例的方法。尽管方法可根据以上提出的特定细节和
架构实现,但其不限于某些所述特定细节。
如所说明的,方法包括一组预处理操作1601-1603和一组光栅化操作1604-1606。
首先转到预处理操作,在1601,对每个顶点,收集邻接三角形。在1602,方法在邻居的三角形
中迭代并将其投影至切平面(例如,以上讨论的实施例的)。在1603,建立线性属性等
式并对上述示例的每个顶点(例如,ui(bi,ti))求平均。在一个实施例,预处理操作在说明于
图11的图形流水线的预处理级1101执行。
参见方法的光栅化部分,在1604,顶点遮蔽器1102中的逻辑1105a建立平面等式
(例如,计划等式用于ti/w,bi/w,l/w)。在1605,几何遮蔽器1103中的逻辑1105b使每顶点平
面等式对像素遮蔽器可见1104,而不需要插值。在1606,像素遮蔽器1104中的逻辑1105c基
于三个顶点切平面确定修改的纹理导数,并且利用重心坐标对结果插值。例如,在一个实施
例,像素遮蔽器求解:
其中
3.4.1轮廓
上述逼近在每顶点切平面变成背向的情况下可能不工作,该情况发生在轮廓边缘
附近。预处理步骤可被修改以消除该切平面,可使用原始的每三角形导数计算。
实现了预处理步骤的取决于查看的变体。该方法的一个缺点在于预处理需要在渲
染每帧之前完成。想法为基于其方向对邻接三角形的影响进行加权:随着三角形更接近轮
廓(例如通过相对于每顶点观察方向测试其法线),其应当以更小的因数影响切平面和线性
属性等式的计算。该方法保证切平面不会变成背向。
如果上述预处理的代价过高,可将相似的每顶点混合用于平滑纹理导数和原始三
角形的导数之间。由于切平面接近轮廓,导数重新变成原始值。其表示,在轮廓纹理中平滑
性不能得以保证。
3.4.2混叠
上述技术保证连续纹理导数,但还可针对混叠进行改进。可修改技术以保证导数
从不会小于原始不连续版本。
4.聚类CPS
当渲染复杂场景时,光栅化流水线通常停止执行比帧缓冲器分辨率显著更多的像
素遮蔽器。理想地,计算资源应当仅花费在可见片段上;考虑为冗余的以上任何像素遮蔽
器。遮蔽冗余的主要原因是:
-深度复杂度;
-部分覆盖像素,其由多个图元遮蔽;以及
-基于四边形的遮蔽调度。
尽管CPS的某些实施例目标在于显著降低遮蔽成本,上述因素利用紧密细分的复
杂几何形状限制其效率。硬件调度遮蔽器执行的方式特别重要。为计算纹理LoD选择的有限
差值,像素遮蔽器可执行为2×2四边形。因此,其通常发生在实际未由当前图元覆盖的像素
也需要被遮蔽的情况下。该冗余的开销随光栅化图元的大小的减少而增长。Fatahalian等
提出了关于微多边形渲染器的效果的全面研究[Fatahalian等,2009][Fatahalian等,
2010]。CPS的问题在于,通过增加遮蔽像素的大小,某些细分工作生成与微多边形遮蔽相似
的开销。部分覆盖和未覆盖的遮蔽四边形的数量在使用滤波时进一步增加。该问题已在一
个实施例中利用聚类图元遮蔽得以解决。
在渲染期间跨多个图元重新使用遮蔽为关键动机。光栅化使用的屏幕空间坐标已
提供了共享参数;只有属于连续表面的图元需要被标识。聚类操作在光栅化级之前执行,其
在图元中重新使用相同的CPS栅格,这些图元:(1)与相同顶点属性共享边;以及(2)具有相
同的朝向。基本原理非常类似于四边形片段合并,如Fatahalian等描述的那样[2010]。尽管
其流水线特别设计用于微多边形栅格,其中划片级可隐含地通过顶点索引提供邻接信息,
但聚类可从任意工作中推测性地建立。为此,定义小图元缓冲器,其可保存N个最近收集的
图元并查找共享的边。如果两个图元的边从像素遮蔽器的视点无法区分(例如,呈现于像素
遮蔽器输入声明的顶点属性是相同的),则其属于相同的聚类。遮蔽架构被假设估计小片
(至少2×2粗略像素)的CPS四边形。作为下一步骤,修改层次光栅化算法,以使其在遮蔽之
前对每个CPS四边形处理相同的聚类中的所有三角形。CPS四边形中所有三角形的覆盖的方
式被完全估计,并且其遮蔽属性可在任何位置被插值。这给我们带来了新的属性插值方法,
其设法扩展四边形片段合并至CPS的概念,同时降低弹出伪像。对于每个覆盖样本,片段合
并方法的微小扩展将查找覆盖粗略像素中心的聚类中的三角形。如果粗略像素中心未由任
何三角形覆盖(其可能容易发生在部分覆盖的四边形),规范方法可从其它粗略像素中选择
代表性三角形([Fatahalian等,2010])。其可导致值得注意的弹出伪像:如果不同的三角形
在下一帧覆盖粗略样本位置,粗略像素中的所有样本将突然外推不同的三角形。
本发明的一个实施例考虑群集中的所有三角形,该群集具有粗略像素中的覆盖,
而不仅是实际覆盖CPS样本的三角形的那些。在不聚类时,每个三角形将在相同的遮蔽位置
得以外推,然后在覆盖的可见性样本分布其遮蔽颜色。现在,遮蔽在每个粗略像素被精确计
算一次,因此代替利用单个三角形来遮蔽所有可见性样本,可计算在CPS位置外推的顶点属
性的加权平均。权重与粗略像素中的给定三角形覆盖的可见性样本成比例。只要群集保持
相同的三角形,并且其覆盖连续地变化,该插值方法就会产生连续变化的顶点属性。
由于粗略像素中的顶点属性的“MSAA解析”被执行,可考虑该方法。注意,如果遮蔽
器近似为遮蔽器属性的线性函数,则这些技术近似匹配遮蔽器输出的均值(遮蔽后对粗略
像素的MSAA解析)。
聚类CPS已实现在Rasty功能流水线仿真器中。该实现仅聚焦于聚类的基本思想并
且不解决该方法引入的时间伪像。
本发明的实施例可包括多个步骤,其已在上文描述。这些步骤可实施于机器可执
行指令,其可用于使通用或专用处理器执行这些步骤。可选地,这些步骤可由包含用于执行
步骤的硬连线逻辑的特定硬件组件,或通过编程计算机组件和定制硬件组件的任何组合执
行。
如本文所描述的,指令可指代硬件的特定配置,诸如配置为执行特定操作或具有
预定功能性的专用集成电路(ASIC),或存储于实施于非暂时性计算机可读介质的存储器的
软件指令。因此,示出于附图的技术可利用存储并执行于一个或多个电子设备(例如,终端
站、网络元件等)的代码和数据实现。这样的电子设备利用计算机机器可读媒体存储和传输
(在内部和/或与网络中的其它电子设备)代码和数据,诸如非暂时性计算机机器可读存储
媒体(例如,磁盘;光盘;随机存取存储器;只读存储器;闪速存储设备;相变存储器)和暂时
性计算机机器可读通信媒体(例如,电、光、声音或其它形式的传播信号-诸如载波、红外信
号、数字信号等)。此外,这样的电子设备典型地包括一个或多个处理器的集合,其耦合于一
个或多个其它组件,诸如一个或多个存储设备(非暂时性机器可读存储媒体)、用户输入/输
出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。处理器集合与其它组件的耦合典
型地通过一个或多个总线和桥(也称为总线控制器)。承载网络业务的存储设备和信号分别
表示一个或多个机器可读存储媒体和机器可读通信媒体。因此,给定电子设备的存储设备
典型地存储代码和/或数据,用于执行于该电子设备的一个或多个处理器的集合。当然,本
发明的实施例的一个或多个部分可利用软件、固件和/或硬件的不同组合实现。在该详细描
述中,为说明的目的,多个特定细节被提出以提供本发明的全面理解。然而,对本领域技术
人员显而易见的是,本发明可在没有这些特定细节中的一些的情况下实现。在特定实例中,
公知结构和功能未详细描述,以避免混淆本发明的主题。因此,本发明的范围和精神应当根
据随后的权利要求来判断。