动态低分辨率z测试大小的制作方法

文档序号:16596095发布日期:2019-01-14 19:39阅读:243来源:国知局
动态低分辨率z测试大小的制作方法

本公开涉及图形处理系统,且更明确地说,涉及在图形处理系统中使用的z剔除技术。



背景技术:

图形处理单元(gpu)可由不同类型的计算装置用来加快显示器的图形数据的渲染。此类计算装置可包含例如计算机工作站、移动电话(例如,智能电话)、嵌入系统、个人计算机、平板计算机和视频游戏控制台。

渲染通常指代将可包含一或多个3d图形对象的三维(3d)图形场景转换为二维(2d)光栅化图像数据的过程。为渲染3d图形对象,gpu可光栅化对应于所述3d图形对象中的每个的一或多个图元,以便产生对应于所述3d图形对象中的每个的多个像素。所述像素随后可使用各种像素处理操作来处理以产生所得图像。像素处理操作可包含像素着色操作、掺合操作、纹理化-映射操作、可编程像素着色器操作等等。

由于gpu已变得越来越快,增加了由gpu渲染的图形场景的复杂度。高度复杂的场景可包含大量的3d对象,这些3d对象中的每个可对应于数百或数千个像素。这些像素中的每个的处理可能消耗大量的处理周期和相对大量的存储器带宽。

3d图形对象通常在光栅化之前细分为一或多个图形图元(例如,点、线、三角形)。时常,从检视区的角度,一些图元可能阻塞或闭塞其它图元,使得所述闭塞图元可能在所得渲染图像中是不可见的。对闭塞图元的像素执行像素处理操作可能导致执行不必要的像素操作,这可能消耗图形处理系统中的不必要的处理周期和存储器带宽。



技术实现要素:

本公开描述用于在图形处理系统中执行低分辨率z剔除的技术。z剔除是图形处理单元(gpu)可以确定哪些图元完全被其它图元闭塞,且因此在最终渲染的场景中将不可见所凭借的技术。在一些实例中,可以在图形处理的装仓遍次以及渲染遍次期间执行低分辨率z剔除。因为图形处理的装仓遍次的吞吐量可比图形处理的渲染遍次相对较高,所以gpu可以基于装仓级和渲染级的低分辨率z剔除吞吐量需求,在所述两个级中使用不同的低分辨率z测试大小来执行低分辨率z剔除。

在一个方面中,本公开涉及一种方法。所述方法可包含:图形处理单元(gpu)执行装仓遍次以确定图形场景的多个图元与构成所述图形场景的多个图像块的图元-图像块相交,所述执行包含至少部分地基于各自具有第一测试大小的第一剔除z值集而执行对所述多个图元的表示的低分辨率z剔除,以从所述多个图元确定第一可见图元集。所述方法可进一步包含:所述gpu至少部分地基于执行对所述第一可见图元集的表示的低分辨率z剔除而执行渲染遍次以渲染所述多个图像块,所述执行所述低分辨率z剔除至少部分地基于表示第二测试大小的第二剔除z值集,以从所述第一可见图元集确定第二可见图元集,其中所述第一测试大小大于所述第二测试大小。

在另一方面中,本公开涉及一种计算装置。所述计算装置可包含存储器。所述计算装置可进一步包含至少一个处理器,所述至少一个处理器经配置以:执行装仓遍次以确定图形场景的多个图元与构成所述图形场景的多个图像块的图元-图像块相交,所述执行包含至少部分地基于各自具有第一测试大小的第一剔除z值集而执行对所述多个图元的表示的低分辨率z剔除,以从所述多个图元确定第一可见图元集;和至少部分地基于执行对所述第一可见图元集的表示的低分辨率z剔除而执行渲染遍次以渲染所述多个图像块,所述执行所述低分辨率z剔除至少部分地基于表示第二测试大小的第二剔除z值集,以从所述第一可见图元集确定第二可见图元集,其中所述第一测试大小大于所述第二测试大小。

在另一方面中,本公开涉及一种设备。所述设备可包含:用于执行装仓遍次以确定图形场景的多个图元与构成所述图形场景的多个图像块的图元-图像块相交的装置,所述执行包含至少部分地基于各自具有第一测试大小的第一剔除z值集而执行对所述多个图元的表示的低分辨率z剔除,以从所述多个图元确定第一可见图元集。所述设备可进一步包含:用于至少部分地基于执行对所述第一可见图元集的表示的低分辨率z剔除而执行渲染遍次以渲染所述多个图像块的装置,所述执行所述低分辨率z剔除至少部分地基于表示第二测试大小的第二剔除z值集,以从所述第一可见图元集确定第二可见图元集的装置,其中所述第一测试大小大于所述第二测试大小。

在另一方面中,本公开涉及一种存储指令的计算机可读存储媒体,所述指令在执行时使至少一个处理器进行以下操作:执行装仓遍次以确定图形场景的多个图元与构成所述图形场景的多个图像块的图元-图像块相交,所述执行包含至少部分地基于各自具有第一测试大小的第一剔除z值集而执行对所述多个图元的表示的低分辨率z剔除,以从所述多个图元确定第一可见图元集;和至少部分地基于执行对所述第一可见图元集的表示的低分辨率z剔除而执行渲染遍次以渲染所述多个图像块,所述执行所述低分辨率z剔除至少部分地基于表示第二测试大小的第二剔除z值集,以从所述第一可见图元集确定第二可见图元集,其中所述第一测试大小大于所述第二测试大小。

在下文的附图和描述中阐述本公开的一或多个方面的细节。本公开的其它特征、目标和优点将从描述和图式以及权利要求书中显而易见。

附图说明

图1是说明用于利用动态低分辨率z测试大小的实例计算装置的框图,计算装置可被配置成实施本公开的一或多个方面。

图2是进一步详细说明图1的cpu、gpu和系统存储器的实例实施方案的框图。

图3是说明gpu可以在装仓(binning)遍次期间执行的简化的图形处理管线的实例的框图。

图4是说明gpu可以在渲染遍次期间执行的实例图形处理管线的框图。

图5是说明用于利用动态低分辨率z测试大小的实例技术的流程图。

具体实施方式

图形处理单元(gpu)常常用于渲染三维场景。因为三维(3d)场景的此渲染可为存储器带宽集中的,所以专门的图形存储器(gmem)位于gpu的图形处理核心附近使得其具有高存储器带宽。场景可由gpu的图形处理核心渲染到gmem,且可将所述场景从gmem分解到存储器(例如,帧缓冲器)以使得所述场景接着可在显示装置处显示。然而,因为gmem的大小可能由于物理区域约束而受限,所以gmem可能不具有足以包含整个场景的存储器容量。实情为,场景可以拆分成图像块(tile),使得构成场景的每个图像块可适应gmem。举例来说,如果gmem能够存储512kb的数据,那么场景可划分为图像块使得每个图像块中包含的像素数据小于或等于512kb。以此方式,可通过将场景划分为可渲染到gmem中的图像块且将场景的每个图像块个别地渲染到gmem中,将来自gmem的经渲染图像块存储到帧缓冲器,以及针对场景的每个图像块重复所述渲染和存储,来渲染所述场景。因此,可以逐图像块地渲染场景以渲染所述场景的每个图像块。此种技术有时被称为基于图像块的渲染和/或装仓渲染。

鉴于三维场景的二维表示,可将所述二维表示划分为多个图像块,其中每个图像块可以表示三维场景的二维表示中的像素块。在一个实例中,三维场景的二维表示的分辨率可为640x480,其意味着二维表示的宽度可为640像素且高度为480像素。如果在此实例中,多个拼片中的每个的高度是32像素且宽度是32像素,那么可将二维表示划分为300个图像块。

场景可由例如三角形的图元组成。因为可将三维场景的二维表示划分为多个图像块,所以构成所述场景的一些图像块有可能包含一或多个图元。构成场景的图像块可各自与存储器内的仓(bin)相关联,所述仓存储指令以用于渲染每个相应图像块中包含的图元。将场景的图像块渲染到gmem中可包含执行指令以将相关联的仓中的图元渲染到gmem中。

gpu可执行装仓遍次以将三维场景的二维表示划分为图像块并将构成场景的图元排序到适当的图像块中。构成场景的每个图像块可与存储器内的相应仓相关联,所述仓存储gpu可执行以渲染相应图像块中包含的图元的命令。装仓遍次的目标是:针对构成场景的多个图像块中的每个,识别与所述图像块相交和/或在所述图像块中可见的图元;并存储指令以用于将那些所识别的图元渲染到与所述图像块相关联的仓中。为此,gpu可执行图形处理管线的简化版本(有时被称为装仓管线)以确定图元顶点的位置,以便确定图元——图像块相交。装仓遍次可不同于完整的渲染遍次,因为仅使用顶点和像素的位置信息而不考虑颜色信息。

在执行装仓遍次之后,gpu可执行渲染遍次以渲染构成三维场景的二维表示的每个图像块。gpu可逐仓地执行存储在相应仓中的命令以将三维场景的二维表示的相应图像块渲染到gmem,并将自gmem渲染到渲染目标的图像块存储在例如帧缓冲器的存储器中。为此,gpu可执行完整的图形处理管线以渲染构成三维场景的二维表示的图像块。以此方式,gpu可以高效地渲染三维场景的二维表示。

作为装仓遍次的部分,gpu可以执行低分辨率z剔除以确定是否可以在最终渲染的场景中看到图元,使得gpu可以避免对在最终渲染的场景中将不可见的图元执行渲染遍次。相似地,作为渲染遍次的部分,gpu还可执行低分辨率z剔除,以基于像素的z值是否指示其比处于同一像素位置的另一像素相对更远而确定是否可以在最终渲染的场景中看到像素,使得gpu可以避免对在最终渲染的场景中将不可见的像素执行像素操作。在一些实例中,低分辨率z剔除还可被称为或可相似于低分辨率深度测试、分层z剔除、分层深度测试、粗深度测试等等。

低分辨率z剔除是指gpu存储与像素块相关联的剔除z值的技术。这与如下z剔除相反:在所述z剔除中,gpu存储与最终渲染的场景中的每个个别像素相关联的剔除z值。换句话说,gpu可以利用低分辨率z剔除以拒绝在最终渲染的场景中不可见的像素块,同时gpu可以利用z剔除以拒绝在最终渲染的场景中不可见的个别像素。

因为gpu利用低分辨率z剔除以拒绝像素块而非个别像素,所以gpu可能够与每次确定单个像素的可见性比较,每次确定多个像素的可见性。因此,在确定像素的可见性时,低分辨率z剔除可以具有比每像素z剔除相对更高的吞吐量。相似地,gpu还可以在通过以下操作确定像素的可见性时实现更高的吞吐量:与运用与相对较少的像素数目相关联的剔除z值来执行低分辨率z剔除比较,运用与较大像素数目相关联的剔除z值来执行低分辨率z剔除。

如上文所论述,当gpu执行装仓遍次时,gpu可以执行图形处理管线的简化版本。相比之下,当gpu执行渲染遍次时,gpu可以执行图形处理管线的完整版本。因此,与gpu可能够在渲染遍次期间渲染图元相比,gpu可能够在装仓遍次期间以相对更高的速率将图元排序到适当的仓中。鉴于装仓遍次与渲染遍次之间的吞吐量差异,且鉴于gpu可以执行低分辨率z剔除以作为装仓遍次和渲染遍次的部分,gpu可以在装仓遍次期间执行低分辨率z剔除以便更好地匹配装仓遍次的高吞吐量,同时也在渲染遍次期间执行低分辨率z剔除以便更好地匹配渲染遍次的相对较低吞吐量。

根据本公开的方面,gpu可以执行装仓遍次以将图形场景的多个图元排序到构成图形场景的多个图像块中,包含至少部分地基于表示第一测试大小的第一z值集而执行对多个图元的表示的低分辨率z剔除。gpu可以进一步至少部分地基于执行对多个图元中的一或多个的一或多个表示的低分辨率z剔除而执行渲染遍次以渲染所述多个图元中的一或多个,所述执行低分辨率z剔除至少部分地基于表示第二测试大小的第二z值集,其中第一测试大小大于第二测试大小。以此方式,gpu可以在装仓级期间使用相对较大测试大小来执行低分辨率z剔除,使得执行低分辨率z剔除的吞吐量可以是相对高的,以更好地匹配装仓遍次的相对较高吞吐量。相反地,gpu可以在装仓级期间使用相对较小测试大小来执行低分辨率z剔除,使得执行低分辨率z剔除的吞吐量可以是相对低的,以更好地匹配渲染遍次的相对较低吞吐量。

图1是说明用于利用动态低分辨率z测试大小的实例计算装置的框图,计算装置可被配置成实施本公开的一或多个方面。如图1中所展示,计算装置2可为计算装置,包含但不限于视频装置、媒体播放器、机顶盒、例如移动电话和所谓的智能电话的无线手持机、移动电话手持机、无线通信装置、个人数字助理(pda)、台式计算机、膝上型计算机、游戏控制台、视频会议单元、平板计算装置等等。在图1的实例中,计算装置2可包含中央处理单元(cpu)6、系统存储器10和gpu12。计算装置2还可包含显示处理器14、收发器模块3、用户接口4和显示器8。收发器模块3和显示处理器14可都是与cpu6和/或gpu12相同的集成电路(ic)的部分,可都处于包含cpu6和/或gpu12的一或多个ic的外部,或可在包含cpu6和/或gpu12的ic外部的ic中形成。

为清楚起见,计算装置2可包含图1中未展示的额外模块或单元。举例来说,计算装置2可在计算装置2是移动无线电话的实例中包含扬声器和麦克风(两者都未在图1中展示)来实现电话通信,或在计算装置2是媒体播放器的实例中包含扬声器。计算装置2还可包含摄像机。此外,计算装置2中展示的各个模块和单元在计算装置2的每一实例中可能不是必需的。举例来说,在计算装置2是桌上型计算机或经装备以与外部用户接口或显示器介接的其它装置的实例中,用户接口4和显示器8可处于计算装置2的外部。

用户接口4的实例包含但不限于轨迹球、鼠标、键盘和其它类型的输入装置。用户接口4还可以是触摸屏且可并入作为显示器8的一部分。收发器模块3可以包含电路以允许计算装置2与另一装置或网络之间的无线或有线通信。收发器模块3可包含调制器、解调器、放大器和用于有线或无线通信的其它此类电路。

cpu6可以是微处理器,例如中央处理单元(cpu),其被配置成处理计算机程序的指令以供执行。cpu6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供给计算装置2以致使cpu6执行一或多个软件应用程序。在cpu6上执行的软件应用程序可包含例如操作系统、文字处理器应用程序、电子邮件应用程序、电子数据表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。另外,cpu6可执行gpu驱动程序22以用于控制gpu12的操作。用户可经由一或多个输入装置(未展示)(例如键盘、鼠标、麦克风、触摸垫或经由用户接口4耦合到计算装置2的另一输入装置)而将输入提供给计算装置2。

在cpu6上执行的软件应用程序可包含指示cpu6以将图形数据渲染到显示器8的一或多个图形渲染指令。在一些实例中,所述软件指令可符合图形应用程序编程接口(api),例如开放图形库开放图形库嵌入系统(opengles)api、direct3dapi、x3dapi、rendermanapi、webglapi或任何其它公共或专有标准图形api。

为了处理软件应用程序的图形渲染指令,cpu6可向gpu12发布一或多个图形渲染命令(例如,通过gpu驱动程序22),以致使gpu12执行图形数据渲染中的一些或全部。在一些实例中,待渲染的图形数据可以包含例如点、线、三角形、四边形、三角带等等的图形图元的列表。

gpu12可被配置成执行图形操作,以将一或多个图形图元渲染到显示器8。因此,当cpu6上执行的软件应用程序中的一个需要图形处理时,cpu6可将图形命令和图形数据提供给gpu12以渲染到显示器8。图形数据可包含例如绘制命令、状态信息、图元信息、纹理信息等等。在一些情况下,gpu12可内置有高度并行结构,所述高度并行结构提供比cpu6更高效的复杂图形相关操作的处理。举例来说,gpu12可包含经配置成以并行方式对多个顶点或像素进行操作的多个处理元件,例如着色器单元。在一些情况下,gpu12的高度并行性质允许gpu12比使用cpu6直接将场景绘制到显示器8更快速地将图形图像(例如,gui及二维(2d)及/或三维(3d)图形场景)绘制到显示器8上。

在一些情况下,可将gpu12集成到计算装置2的主板中。在其它情况下,gpu12可存在于图形卡上,所述图形卡安置在计算装置2的主板中的端口中或可以其它方式并入被配置成与计算装置2交互操作的外围装置内。gpu12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)或其它等效的集成或离散逻辑电路。gpu12还可包含一或多个处理器核心,使得gpu12可被称作多核处理器。

gpu12可以直接耦合到图形存储器40。因此,gpu12可在不使用总线的情况下从图形存储器40读取数据并将数据写入到所述图形存储器40。换句话说,gpu12可以使用本地存储装置而非芯片外存储器在本地处理数据。此类图形存储器40可被称作芯片上存储器。这允许gpu12通过消除gpu12经由总线读取并写入数据的需要而以更高效的方式操作,其中经由总线操作可经历繁重的总线业务。然而,在一些情况下,gpu12可能不包含单独的存储器,而是经由总线利用系统存储器10。图形存储器40可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、快闪存储器、磁性数据媒体或光学存储媒体。

在一些实例中,gpu12可将完全形成的图像存储在系统存储器10中,其中所述图像可以是一或多个表面。在一些实例中,表面可以是二维像素块,其中像素中的每个可具有颜色值。贯穿本公开,在非限制性实例中,术语图形数据可包含表面或表面的部分。显示处理器14可从系统存储器10检索图像,并且输出使显示器8的像素照亮以显示所述图像的值。显示器8可以是显示由gpu12产生的图像内容的计算装置2的显示器。显示器8可以是液晶显示器(lcd)、有机发光二极管显示器(oled)、阴极射线管(crt)显示器、等离子显示器或另一类型的显示装置。

根据本公开的方面,gpu12可以执行装仓遍次以将图形场景的多个图元排序到构成图形场景的多个图像块中,包含至少部分地基于表示第一测试大小的第一z值集而执行对多个图元的表示的低分辨率z剔除。gpu12可以进一步至少部分地基于执行对多个图元中的一或多个的一或多个表示的低分辨率z剔除而执行渲染遍次以渲染所述多个图元中的一或多个,所述执行低分辨率z剔除至少部分地基于表示第二测试大小的第二z值集,其中第一测试大小大于第二测试大小。以此方式,gpu12可以在装仓级期间使用相对较大测试大小来执行低分辨率z剔除,使得执行低分辨率z剔除的吞吐量可以是相对高的,以更好地匹配装仓遍次的相对较高吞吐量。相反地,gpu12可以在渲染级期间使用相对较小测试大小来执行低分辨率z剔除,使得执行低分辨率z剔除的吞吐量可以是相对低的,以更好地匹配渲染遍次的相对较低吞吐量。

图2是进一步详细说明图1的cpu6、gpu12和系统存储器10的实例实施方案的框图。如图2中所展示,cpu6可包含至少一个软件应用程序18、图形api20和gpu驱动程序22,其中的每个可以是在cpu6上执行的一或多个软件应用程序或服务。

可用于cpu6和gpu12的存储器可包含系统存储器10、帧缓冲器16、装仓lrz缓冲区24和渲染lrz缓冲区28。帧缓冲器16可以是系统存储器10的一部分或可以与系统存储器10分离,且可以存储经渲染的图像数据。与帧缓冲器16相似,装仓lrz缓冲区24和渲染lrz缓冲区28可以是系统存储器10的一部分或可以与系统存储器10分离。

软件应用程序18可以是利用gpu12的功能性的任何应用程序。举例来说,软件应用程序18可以是gui应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序或使用2d或3d图形的另一类型的软件应用程序。

软件应用程序18可包含指示gpu12渲染图形用户接口(gui)和/或图形场景的一或多个绘制指令。举例来说,绘制指令可包含界定待由gpu12渲染的一或多个图形图元的集合的指令。在一些实例中,绘制指令可共同地界定用于gui中的多个开窗表面的全部或部分。在额外实例中,绘制指令可共同地界定图形场景的全部或部分,其包含在通过应用程序界定的模型空间或世界空间内的一或多个图形对象。

软件应用程序18可经由图形api20调用gpu驱动程序22,以向gpu12发布一或多个命令以用于将一或多个图形图元渲染为可显示的图形图像。举例来说,软件应用程序18可经由图形api20调用gpu驱动程序22以将图元定义提供给gpu12。可将图元定义以绘制图元(例如,三角形、矩形、三角扇、三角带等等)的列表形式提供给gpu12。图元定义可包含指定与待渲染的图元相关联的一或多个顶点的顶点规格。所述顶点规格可包含每个顶点的位置坐标,且在一些情况下包含与顶点相关联的其它属性,例如色坐标、法向量和纹理坐标。所述图元定义还可包含图元类型信息(例如,三角形、矩形、三角扇、三角带等等)、缩放信息、旋转信息等等。基于由软件应用程序18发布给gpu驱动程序22的指令,gpu驱动程序22可调配指定供gpu12执行的一或多个操作以便渲染图元的一或多个命令。当gpu12从cpu6接收命令时,处理器集群46可以执行图形处理管线以解码命令,且可以配置图形处理管线以执行命令中指定的操作。举例来说,图形处理管线的命令引擎可以读取图元数据,并将数据汇编成供图形处理管线中的其它图形管线级使用的图元。在执行指定操作之后,gpu12将经渲染数据输出到与显示装置相关联的帧缓冲器16。

帧缓冲器16存储用于gpu12的目标像素。每个目标像素可与唯一屏幕像素部位相关联。在一些实例中,帧缓冲器16可以存储每个目标像素的颜色分量和目标阿尔法值。举例来说,帧缓冲器16可以存储每个像素的红色、绿色、蓝色、阿尔法(rgba)分量,其中“rgb”分量对应于颜色值且“a”分量对应于目标阿尔法值,目标阿尔法值指示像素的透明度。帧缓冲器16还可存储每个目标像素的深度值。以此方式,可以说帧缓冲器16用以存储图形数据(例如,表面)。尽管将帧缓冲器16和系统存储器10说明为单独的存储器单元,但在其它实例中,帧缓冲器16可以是系统存储器10的部分。一旦gpu12已将帧的所有像素渲染到帧缓冲器16中,帧缓冲器就可将已加工帧输出到显示器8以供显示。

处理器集群46可包含一或多个可编程处理单元42和/或一或多个固定功能处理单元44。在一些实例中,处理器集群46可以执行图形处理管线的操作。可编程处理单元42可包含例如可编程着色器单元,其被配置成执行从cpu6下载到gpu12上的一或多个着色器程序。在一些实例中,可编程处理单元42可以被称作“着色器处理器”或“统一着色器”,且可执行几何、顶点、像素或其它着色操作以渲染图形。着色器单元可各自包含用于提取和解码操作的一或多个组件、用于执行算术计算的一或多个alu、一或多个存储器、高速缓冲存储器和寄存器。

gpu12可通过向可编程处理单元42发送执行图形处理管线中的顶点着色器级、镶嵌(tessellation)级、几何着色器级、光栅化级和片段着色器级中的一或多个的命令,指定可编程处理单元42执行例如顶点着色、外壳着色、域着色、几何着色、片段着色等等的多种着色操作。在一些实例中,gpu驱动程序22可致使在cpu6上执行的编译程序编译一或多个着色器程序,并将经编译着色器程序下载到gpu12内含有的可编程处理单元42上。可以高级着色语言来编写着色器程序,例如opengl着色语言(glsl)、高级着色语言(hlsl)、用于图形的c(cg)着色语言、openclc核等等。经编译着色器程序可包含控制gpu12内的可编程处理单元42的操作的一或多个指令。举例来说,着色器程序可包含:顶点着色器程序,其可由可编程处理单元42执行以执行顶点着色器级的功能;镶嵌着色器程序,其可由可编程处理单元42执行以执行镶嵌级的功能;几何着色器程序,其可由可编程处理单元42执行以执行几何着色器级的功能;低分辨率z剔除程序,其可由可编程处理单元42执行以执行低分辨率z剔除;和/或片段着色器程序,其可由可编程处理单元42执行以执行片段着色器级的功能。顶点着色器程序可以控制可编程顶点着色器单元或统一着色器单元的执行,且包含指定一或多个每顶点操作的指令。

处理器集群46还可包含固定功能处理单元44。固定功能处理单元44可包含经硬连线以执行某些功能的硬件。尽管可例如经由一或多个控制信号配置固定功能处理单元44以执行不同功能,但固定功能硬件通常并不包含能够接收用户编译的程序的程序存储器。在一些实例中,处理器集群46中的固定功能处理单元44可包含例如执行例如深度测试、剪切测试、阿尔法混合、低分辨率深度测试等等的光栅操作的处理单元,以执行图形处理管线的光栅化级的功能。

图形存储器40是物理地集成到gpu12的集成电路中的芯片上存储装置或存储器。在一些情况下,因为图形存储器40是芯片上存储器,所以相比经由系统总线从系统存储器10读取值或将值写入到所述系统存储器10,gpu12可能够更快速地从图形存储器40读取值或将值写入到所述图形存储器40。

在一些实例中,gpu12可以根据装仓渲染模式操作以渲染图形数据(例如,图形场景)。当根据延迟渲染模式操作时,gpu12内的处理器集群46首先执行装仓遍次(也被称作图像块遍次),以将图形帧划分为多个图像块并确定哪些图元与每个图像块相交。针对多个图像块中的每个,处理器集群46接着执行渲染遍次以将图像块的图形数据(像素的颜色值)渲染到本地地位于gpu12上的图形存储器40,包含执行图形处理管线以渲染每个图像块,且当完成时,将渲染的图形数据从图形存储器40读取到例如帧缓冲器16的渲染目标。

gpu12可以执行低分辨率z剔除以作为装仓遍次和渲染遍次的部分。在装仓遍次期间,gpu12可以执行低分辨率z剔除,以针对图形场景中的每个图元确定特定图元在渲染的图像块中是否可见,且可以产生指示每个图元在最终渲染的场景中是否可见的可见性流。如果gpu12确定特定图元在渲染的图像块中将为不可见的,那么gpu12可以避免执行用以渲染特定图元的渲染遍次。相似地,在渲染遍次期间,gpu12可以执行低分辨率z剔除,以针对像素集确定特定像素集在渲染的图像块中是否可见,且在gpu12确定像素在渲染的图像块中将为不可见的情况下,可以避免对特定像素集执行像素处理操作。

为了执行低分辨率z剔除,gpu12可以将三维图形场景的二维表示划分为多个像素块。对于多个像素块中的每个,gpu12可以将剔除z值存储到装仓lrz缓冲区24或渲染lrz缓冲区28中。为了初始化特定像素块的剔除z值,gpu12可以接收对应于特定像素块的像素集以及像素集中的每个像素的相关联的z值,且可以将特定像素块的剔除z值设置为所接收像素集的最后面的z值。所接收像素集的最后面的z值可以是所接收像素集中与相机相距最远的像素的z值。

举例来说,对于与给出的2×2像素块(例如,p00、p01、p10和p11)相关联的剔除z值,gpu12可以首先接收对应于2×2像素块p00、p01、p10和p11的传入的2×2像素块(例如,p00'、p01'、p10'和p11')。像素p00'、p01'、p10'和p11'可分别具有对应的z值0.2、0.2、0.1和0.15,其中相较于较低值,较高值表示与相机相距更远的深度。为了起始2×2像素块p00、p01、p10和p11的剔除z值,gpu12可以将所述像素块的剔除z值设置为0.2,这是因为0.2是四个像素值0.2、0.2、0.1和0.15的最后面的深度值。

在初始化剔除z值之后,gpu12可以比较传入的像素块的最接近z值与对应的剔除z值。如果传入的像素块的最接近z值指示其比剔除z值与相机相隔更远,那么gpu12可以丢弃传入的像素块。丢弃传入的像素块可包含:在装仓遍次的状况下,更新可见性流以指示由像素块表示的图元可能在最终渲染的场景中不可见;或在渲染遍次的状况下,不将传入的像素块传递到一或多个后续像素处理级上。

如可见,在一些情况下,当gpu12执行低分辨率z剔除时,gpu12可能不丢弃传入的像素块,即使可以在个别像素的像素级深度测试期间拒绝构成那些图元的表示的一或多个像素也如此。

如上文所论述,在低分辨率z剔除而非每像素z剔除中,剔除z值可以指示多个像素的深度数据。剔除z值可以表示测试大小可以指示每个剔除z值表示的像素块中的像素数目(例如,由对应的剔除z值表示的像素数目)的像素块。因此,在一些实例中,由4×4像素块的剔除z值表示的测试大小可以是16、4×4,或用以指示由剔除z值表示的4×4像素块中的像素数目的任何其它值。

因为gpu12在执行装仓遍次时的吞吐量可以不同于gpu12在执行渲染遍次时的吞吐量,所以存储在装仓lrz缓冲区24(其在装仓遍次期间使用)中的剔除z值可以与目标像素块相关联,所述目标像素块的测试大小不同于与存储在渲染lrz缓冲区28(其在渲染遍次期间使用)中的剔除z值相关联的像素块的测试大小。

确切地说,因为与gpu12执行渲染遍次的吞吐量相比较,gpu12在执行装仓遍次时可以具有相对更高的吞吐量,所以存储在装仓lrz缓冲区24中的剔除z值可各自与如下像素块相关联:其测试大小比与存储在渲染lrz缓冲区28(其在渲染遍次期间使用)中的剔除z值相关联的像素块的测试大小相对更大。换句话说,相较于存储于在渲染遍次期间使用的渲染lrz缓冲区28中的剔除z值,存储于在装仓遍次期间使用的装仓lrz缓冲区24中的每个剔除z值可以指示更多相关联像素的深度。以此方式,装仓遍次可以利用相对较大的测试大小以在执行低分辨率z剔除时实现较大吞吐量,而相对于利用相对较大测试大小,渲染遍次可以利用相对较小测试大小以丢弃更多像素块。

图3是说明gpu12可以在装仓遍次期间执行的简化的图形处理管线30的实例的框图。如图3中所展示,简化的图形处理管线30可包含顶点着色器级32、光栅化器级34和低分辨率z剔除级36。顶点着色器级32可被配置成作为简化的顶点着色器进行操作,简化的顶点着色器可仅包含影响顶点的位置以执行每顶点操作以产生着色顶点的指令。举例来说,颜色指令、纹理坐标和并不影响图元顶点的位置的其它指令可从简化的顶点着色器级32移除。此外,不同于渲染遍次,gpu12可不执行作为装仓遍次的部分的像素处理操作或像素着色级,且可不将三维图形场景的二维表示渲染到帧缓冲器16中。

gpu12可以接收输入图元且可以执行顶点着色器级32以产生着色顶点。输入图元可指能够由图形渲染管线的几何处理级处理的图元。在一些实例中,输入图元可以由图形api界定,图形api由图形处理管线50实施。举例来说,输入图元可以对应于microsoftdirectx11api中的输入图元拓扑。输入图元可包含点、线、线列表、三角形、三角带、补片(patch)等等。在一些实例中,输入图元可以对应于几何学上定义待渲染的输入图元的多个顶点。

gpu12可以进一步执行顶点着色器级32以执行图元——图像块相交测试,以确定与每个特定输入图元相交的(多个图像块中的)图像块。基于图元——图像块相交测试的结果,gpu12可以将每个图元的图元数据存储到与相交的图像块相关联的适当仓中。在一些情况下,此类图元数据可包含用于渲染图元的命令。

基于顶点着色器级32产生的着色顶点,gpu12可以执行光栅化器级34以从着色顶点产生图元(例如,三角形)的低分辨率表示而成为粗像素。因此,gpu12可以执行光栅化器级34以产生表示图元的一或多个像素,其中由光栅化器级产生的每个像素可以表示最终渲染的场景中的多像素区域。在一个实例中,由光栅化器级34产生的每个像素可以表示最终渲染的场景中的4×4像素区域。在其它实例中,由光栅化器级产生的每个像素可以表示最终渲染的场景中的2×2像素区域、8×8像素区域等等。

gpu12可以进一步产生每个仓的每仓可见性流,其指示相应仓中的每个图元将在最终渲染的场景中是否可见。为了产生可见性流,gpu12可以执行低分辨率z剔除级36以确定哪些图元在最终渲染的场景中将为可见的,并且哪些图元在最终渲染的场景中将为不可见的,使得gpu12可以基于产生的可见性流而省略执行用以渲染那些图元的渲染遍次。至少部分地基于由光栅化器产生的图元的表示的深度(也被称作z值),gpu12可以确定那些图元是否在最终渲染的场景中将为可见的,且可以在可见性流中指示特定图元是否在最终渲染的场景中将为可见的。举例来说,每个图元可以与可见性流中的位相关联,且如果gpu12确定相应图元在最终渲染的场景中将为可见的,那么gpu12可以设置可见性流中的对应位。相似地,如果gpu12确定相应图元在最终渲染的场景中将为不可见的,那么gpu12可以避免设置可见性流中的对应位。

由剔除z值表示的测试大小可以对应于由gpu12执行的光栅化器级输出的粗像素的像素块大小。如上文所论述,gpu12可以执行光栅化器级以产生表示图元的一或多个像素,其中由光栅化器级产生的每个像素可以表示最终渲染的场景中的多像素区域。由光栅化器级产生的表示多像素区域的像素可以被称作粗像素。在一个实例中,由光栅化器级产生的每个粗像素可以表示最终渲染的场景中的4×4像素区域。因此,由光栅化器级产生的粗像素可以是表示例如以下各者的像素块的像素(例如,两种或多于两种像素):2×2像素块、4×4像素块、8×8像素块等等。

由光栅化器级产生的粗像素的大小可以对应于或另外指示由所述粗像素表示的像素数目。因此,在一些实例中,表示4×4像素块的粗像素的大小可以是16、4×4,或用以指示表示4×4像素块的粗像素的大小的任何其它值。在一个实例中,由剔除z值表示的测试大小可与由光栅化器级产生的粗像素的大小相同。因此,如果由光栅化器级产生的每个粗像素表示4×4像素块,那么每个z值可以表示最终渲染的场景中的4×4像素块的深度值。

在一些实例中,gpu12可以基于gpu12的所需吞吐量而确定粗像素的大小,这是因为与gpu12利用相对较小大小的粗像素相比较,利用利用相对较大大小的粗像素可以使得gpu12能够更快速地执行本文中的操作(借此提高gpu12的吞吐量)。举例来说,gpu12可以将性能计数器用于gpu12的各个部件中以确定由gpu12在一段时间内处理的图元的数目,从而确定gpu12利用当前大小的粗像素的吞吐量。gpu12可以调整粗像素的大小以供后续图形处理调整gpu12的吞吐量,从而增大或减小gpu12的后续吞吐量。相似地,gpu12可以相似方式通过以下操作调整由剔除z值表示的测试大小:利用性能计数器以确定gpu12的吞吐量;和调整由剔除z值表示的测试大小以调整gpu12的吞吐量。

在此实例中,因为由剔除z值表示的测试大小可与由光栅化器级产生的粗像素的大小相同,所以通过比较粗像素的一或多个z值与最终渲染的场景中的对应的像素部位的对应的剔除z值,gpu12可以确定由粗像素表示的图元在最终渲染的场景中是否可见。粗像素可以与最大z值和最小z值相关联。最大z值可以对应于由粗像素表示的像素块内与相机相距最远的像素的z值。对应地,最小z值可以对应于由粗像素表示的像素块内与相机相距最近的像素的z值。如果粗像素的最小z值指示其与相机相距比对应的剔除z值远,那么gpu12可以更新对应的可见性流以指示由粗像素表示的图元在最终渲染的场景中不可见。另一方面,如果粗像素的最小z值指示其与相机相距不比对应的剔除z值远,那么gpu12可以避免更新对应的可见性流,以指示由粗像素表示的图元在最终渲染的场景中是可见的。

另外,如果粗像素的最大z值指示其与相机相距比对应的剔除z值近,那么gpu12可以更新对应的可见性流以指示由粗像素表示的图元可能在最终渲染的场景中是可见的。此外,因为由剔除z值表示的测试大小与由光栅化器级产生的粗像素的大小相同,所以如果粗像素的最大z值指示其与相机相距比对应的剔除z值近,那么gpu12还可运用特定粗像素的最大z值来更新装仓lrz缓冲区24中的对应的剔除z值的值,以指示与相机相距更远的其它可能的粗像素可由特定粗像素闭塞。

在其它实例中,由装仓lrz缓冲区24中的剔除z值表示的测试大小可以不同于由光栅化器级34产生的粗像素的大小。由剔除z值表示的测试大小可以大于或小于由光栅化器级34产生的粗像素的大小。举例来说,由光栅化器级产生的每个粗像素表示4×4像素块,而由剔除z值表示的测试大小可以与8×8像素块相关联。

通过比较粗像素的最小z值与最终渲染的场景中的对应的像素部位的对应的剔除z值,gpu12可以确定由粗像素表示的图元在最终渲染的场景中是否可见。如果粗像素的最小z值指示其与相机相距比对应的剔除z值远,那么gpu12可以在可见性流中指示由粗像素表示的图元在最终渲染的场景中是不可见的。另一方面,如果粗像素的最大z值指示其与相机相距比对应的剔除z值近,那么gpu12可以在可见性流中指示由粗像素表示的图元可能在最终渲染的场景中是可见的。

在完成所述遍次之后,基于存储在低分辨率缓冲区中的深度值,gpu12可以执行渲染遍次以将作为二维图像的场景渲染到图形存储器40。因此,装仓遍次不同于渲染遍次,至少是因为在装仓遍次期间,gpu12不会渲染场景的二维表示。

在一些实例中,本公开的技术可同样适用于直接渲染模式。在直接渲染模式中,gpu12不会将图形帧分解为较小仓。实情为,可以一次渲染整个帧。在这些实例中,在执行渲染场景的渲染遍次之前,gpu12可以执行预z测试而非执行装仓遍次。当执行预z测试时,gpu12可以产生像素块的剔除z值,gpu12可以将所述剔除z值存储到与装仓lrz缓冲区24相似的缓冲区中。举例来说,gpu12可以执行图形处理管线以仅渲染复杂三维对象的限界框的z值,且可以利用剔除z值以确定对象的部分在最终渲染的场景中是否将为可见的。

与贯穿本公开所描述的技术相似,当在直接渲染模式中操作时,gpu12可以在执行较早绘制调用时建置具有相对较大测试大小的lrz缓冲区,gpu12可以利用所述lrz缓冲区利用z剔除来执行低分辨率z剔除。稍后,当gpu12执行较晚绘制调用时,gpu12可以利用在执行较早绘制调用期间建置的lrz缓冲区以填充具有相对较小测试大小的lrz缓冲区,从而在这些较晚绘制调用期间执行更精细粒度的低分辨率z剔除。因此,当gpu12在直接渲染模式中操作时,贯穿本公开所描述的使用不同低分辨率z测试大小来执行低分辨率z剔除的技术可同样适用。

为了执行渲染遍次,gpu12可以逐图像块地执行图形处理管线以渲染已通过执行装仓遍次而装仓的图元。在将每个图像块渲染到图形存储器40之后,gpu12可将渲染的图像块从图形存储器40传送到存储器26。以此方式,可以通过来自gpu12的渲染的图像块逐图像块地填充帧缓冲器16或另一渲染目标,借此将表面渲染到帧缓冲器16或另一渲染目标中。

图4是说明gpu12可以在渲染遍次期间执行的实例图形处理管线50的框图。当gpu12执行渲染遍次以渲染已被识别为有可能在最终渲染的场景中可见的图元时,gpu可以通过图形处理管线50处理图元而逐图像块地渲染与相应图像块相交的图元。图形处理管线50包含一或多个几何处理级52、光栅化器级54、低分辨率z剔除级56和一或多个像素处理级58。在一些实例中,图形处理管线50可以在图2中所展示的gpu12中实施。在此类实例中,几何处理级52、光栅化器级54、低分辨率z剔除级56和像素处理级58可以在一些实例中由gpu12的处理器集群46实施。

几何处理级52经配置以接收输入图元,并基于所述输入图元产生光栅化图元。为了产生所述光栅化图元,几何处理级52可基于所述输入图元执行几何处理操作。几何处理操作可包含例如顶点着色、顶点变换,发光、硬件棋盘形布置(tessellation)、外壳着色、域着色、几何着色等等。

输入图元可以对应于如下图元数据(例如,渲染图元的命令):在装仓遍次期间,gpu12根据相应输入图元相交的图像块将所述图元数据存储到适当的仓中。

光栅化图元可以对应于能够由光栅化器级54处理的图元。在一些实例中,光栅化图元可包含点、线、三角形、线流、三角流等等。在其它实例中,每个输入图元可以对应于多个光栅化图元。例如,补片可经棋盘形布置为多个光栅化图元。在一些实例中,光栅化图元可以对应于几何学上定义待渲染的光栅化图元的多个顶点。

光栅化器级54经配置以接收光栅化图元,并基于所述光栅化图元产生一或多个源像素块。所述源像素块中的每个可表示所述图元在多个像素块部位中的相应一个的光栅化版本。对于接收到的光栅化图元中的每个,光栅化器级54可以光栅化所述图元以产生用于所述相应图元的一或多个源像素块。

可以将例如帧缓冲器16的渲染目标细分为多个图像块(例如,区),其中每个图像块含有多个样本。样本可指像素或替代地指代像素的子样本。对于光栅化图像,像素可指与一组采样点中的特定采样点相关联的数据,其中,所述组采样点具有与显示相同的分辨率。对于光栅化图像,像素的子样本可指与一组采样点中的特定采样点相关联的数据,其中,所述组采样点具有比所述显示的分辨率大的分辨率。与每个样本相关联的数据可包含例如颜色数据(例如,红色、绿色、蓝色(rgb))、透明度数据(例如,阿尔法值)和深度数据(例如,z值)中的一或多个。

对于特定样本位置,目标样本可指已被处理的一或多个源样本的复合版本。对于特定样本位置,目标样本可以对应于存储在渲染目标(例如,帧缓冲器或装仓缓冲区)中的样本数据,且可以在处理场景中的每个图元时进行更新。目标样本可包含来自与不同图元相关联的多个源样本的复合样本数据。相比之下,源样本可指与单个几何图元相关联并且尚未利用用于相同样本位置的其它源样本组合的样本数据。在一些实例中,源样本可由光栅化器产生并在与对应目标样本合并和/或组合之前由一个或多个像素处理级处理。

相似地,目标像素块可指与渲染目标的特定区相关联的多个目标样本。目标像素块可以是多个源像素块的复合版本,所述复合版本中的每个可以对应于不同图元。目标像素块可以在处理场景中的每个图元时进行更新。源像素块可指与渲染目标的特定区相关联的多个源样本。源像素块可与单个几何图元相关联并且尚未与用于相同样本位置的其它源像素块组合。在一些实例中,源像素块可由光栅化器产生并在与对应的目标像素块合并和/或组合之前由一或多个像素处理级处理。

源和目标像素块中的每个中的样本可以对应于渲染目标区的样本。所述渲染目标区的部位可以被称作像素块部位。与相同像素块区相关联的两个像素块可以被称作并置像素块。一般来说,未被剔除的源像素块可以与并置目标像素块组合和/或合并。

为了光栅化图元,光栅化器级54可以确定渲染目标的哪些像素块部位被图元覆盖,并针对被所述图元覆盖的每个像素块部位产生源像素块。如果图元的边缘或内部覆盖与像素块部位相关联的样本中的至少一个,那么所述像素块部位可被所述图元覆盖。如果图元的区域包含样本位置,那么样本可被图元覆盖。

每个源像素块可包含指示在多个采样点采样的图元的数据。由源像素块中包含的数据指示的图元可以是被光栅化器级54光栅化以便产生源像素块的图元,且可以说对应于源像素块。供对所述图元采样的采样点可以对应于源像素块的像素块部位。

在一些实例中,对于由光栅化器级54产生的每个源像素块,光栅化器级54还可产生以下各者中的一或多个:源像素块的覆盖范围掩模、指示源像素块是否完全(fully/completely)被覆盖的信息、用于源像素块的保守最接近z值和用于源像素块的保守最远z值。

源像素块的覆盖范围掩模可以指示源像素块中的哪些被对应于所述源像素块的图元覆盖。举例来说,所述覆盖范围掩模可包含多个位,其中,所述位中的每个对应于源像素块中的多个样本中对应于所述覆盖范围掩模的相应一个。所述位中的每个的值可以指示所述源像素块中样本中的相应一个是否被对应于所述源像素块的图元覆盖。举例来说,用于所述覆盖范围掩模中特定位的值“1”可以指示对应于所述位的样本被覆盖,而用于所述覆盖范围掩模中所述特定位的值“0”可以指示对应于所述位的样本未被覆盖。

指示源像素块是否完全被覆盖的信息可以指示源像素块中的所有样本是否都被对应于源像素块的图元覆盖。在一些实例中,取决于所有样本是否均被覆盖,指示源像素块是否完全被覆盖的信息可以是等于两个不同值中的一个的一或多个位。如果源像素块中包含的所有样本都被对应于所述源像素块的图元覆盖,那么可以说源像素块完全被覆盖。另外,如果少于源像素块中包含的所有样本被对应于所述源像素块的图元覆盖,那么可以说源像素块未被完全覆盖。如果源像素块中的至少一个样本被对应于所述源像素块的图元覆盖而并非所有样本均被覆盖,那么可以说像素块是部分覆盖的像素块。换句话说,部分覆盖的像素块可指未被完全覆盖的像素块,但使至少一个样本被对应于源像素块的图元覆盖。

用于源像素块的保守最接近z值可指与用于所述源像素块中的所有覆盖样本的最接近z值同样接近或比所述最接近z值更接近的值。一般来说,所述源像素块中的每个样本可具有相关联的z值。像素块中的个别样本的z值可指指示所述样本与垂直于相机(例如,检视区)的方向的平面之间的距离的值,所述相机与包含所述样本的渲染图形帧相关联。用于源像素块的保守最接近z值可以是与用于样本的z值同样接近或比所述z值更接近的值,即,最接近与所述渲染图形帧相关联的相机的值。在一些实例中,用于源像素块的保守最接近z值可以等于用于所述源像素块的最接近z值。在此状况下,用于源像素块的保守最接近z值可以被称作用于所述源像素块的最接近z值。在一些实例中,如果较小z值指示与较大z值相比相对更接近于相机的样本,那么用于源像素块的最接近z值可以是用于源像素块的最小z值。

用于源像素块的保守最远z值可指与用于所述源像素块中的所有覆盖样本的最远z值同样远或比所述最远z值更远的值。在一些实例中,用于源像素块的保守最远z值可以等于用于所述源像素块的最远z值。在此状况下,用于源像素块的保守最远z值可以被称作用于所述源像素块的最远z值。在一些实例中,如果较大z值指示与较小z值相比与相机相距相对更远的样本,那么用于源像素块的最远z值可以是用于所述源像素块的最大z值。

不同图形系统可以使用用于产生z值的不同类型的坐标系。一些图形系统可以产生随着样本离开相机的距离而增大的z值。对于此类系统,不论何时本公开参考最接近z值或保守最接近z值,此类参考物也可被分别称作最小z值和保守最小z值。相似地,对于此类系统,不论何时本公开参考最远z值或保守最远z值,此类参考物也可被分别称作最大z值和保守最大z值。

其它图形系统可以产生随着样本离开相机的距离而减小的z值。对于此类系统,不论何时本公开参考最接近z值或保守最接近z值,此类参考物也可被分别称作最大z值和保守最大z值。相似地,对于此类系统,不论何时本公开参考最远z值或保守最远z值,此类参考物也可被分别称作最小z值和保守最小z值。

如果本公开参考最小或最大z值或保守最小或最大z值,那么此类z值应理解为是指在特定z坐标系内的最小和最大z值,其中,z值随着离开相机的距离而增大或减小。应进一步理解,为了运用另一z坐标系实施本公开的技术,参考最小和最大z值的角色可能需要互换。一般来说,如果最小或最大z值在本公开中被参考但不指定所述z坐标系是递增还是递减的坐标系,那么应理解,这些z值是指在递增z坐标系内的最小或最大z值,其中,所述z值随着离开相机的距离而增大。

低分辨率z剔除级56从光栅化器级54接收一或多个源像素块、每个源像素块的覆盖范围掩模、指示每个源像素块是否完全被覆盖的信息、用于每个源像素块的保守最接近z值和用于每个源像素块的保守最远z值,并基于接收到的信息剔除源像素块以产生非剔除源像素块,非剔除源像素块包含来自源像素块的未由于执行低分辨率z剔除级56而被剔除的像素。向像素处理级58提供非剔除源像素块。

为了产生非剔除源像素块,基于源像素块的保守最接近z值是否比与像素块部位相关联的剔除z值远,低分辨率z剔除级56可以选择性地从图形处理管线50丢弃与像素块部位相关联的样本的源像素块。剔除z值可以指示用于对应于像素块部位的目标像素块的所有样本的保守最远z值。举例来说,响应于确定源像素块的保守最接近z值比与像素块部位相关联的剔除z值远,低分辨率z剔除级56可以丢弃源像素块,且响应于确定源像素块的保守最接近z值不比与像素块部位相关联的剔除z值远,不丢弃源像素块。

丢弃源像素块可能涉及不将源像素块传递到一或多个后续像素处理级58上。换句话说,如果丢弃了源像素块,那么低分辨率z剔除级56可不使源像素块包含在非剔除(例如,非丢弃)源像素块的集合中。不丢弃源像素块可能涉及将源像素块传递到一或多个后续像素处理级58上。换句话说,如果未丢弃源像素块,那么低分辨率z剔除级56可使源像素块包含在非剔除源像素块的集合中。

渲染lrz缓冲区28可以存储剔除z值集。剔除z值集可包含用于例如帧缓冲器16的渲染目标中的每个像素块的剔除z值。每个剔除z值可以与多个目标像素块中的一个相关联,且可以指示用于对应的目标像素块中的所有样本的保守最远z值。如果与剔除z值相关联的像素块部位与目标像素块的像素块部位相同,那么所述目标像素块可以对应于所述剔除z值。

应注意,尽管剔除z值可以指示对应的目标像素块的保守最远z值,但目标像素块实际上可能不会由低分辨率z剔除级56产生。实情为,目标像素块可以由图形处理管线50中的像素处理级58产生,且低分辨率z剔除级56可能不一定访问实际目标像素块。然而,以保证剔除z值至少将与随后由像素处理级58产生的目标像素块中的最远z值同样远的方式,低分辨率z剔除级56可以更新剔除z值。

与存储在渲染lrz缓冲区28中的剔除z值相关联的目标像素块可各自具有相同的测试大小。换句话说,每个目标像素块可以具有相同的尺寸(即,相同的像素宽度和像素高度)。因此,在一些实例中,每个目标像素块可以是2×2像素块、4×4像素块、8×8像素块等等。

运用在执行装仓遍次时利用的来自装仓lrz缓冲区24的剔除z值,gpu12可以初始化待在执行渲染遍次时使用的存储在渲染lrz缓冲区28中的剔除z值。gpu12可以首先设置存储在渲染lrz缓冲区28中的每个剔除z值,以与存储在装仓lrz缓冲区24中的对应的剔除z值具有相同的值。确切地说,对于存储在渲染lrz缓冲区28中的剔除z值集(其对应于最终渲染的场景中与存储在装仓lrz缓冲区24中的剔除z值相同的像素块部位),可以将渲染lrz缓冲区28中的所述剔除z值集中的每个剔除z值设置为与存储在装仓lrz缓冲区24中的对应的剔除z值相同的值。因此,在一个实例中,鉴于存储在装仓lrz缓冲区24中对应于最终渲染的场景中的像素部位p00到p15(例如,4×4像素块)的剔除z值,渲染lrz缓冲区28中的剔除z值集中的每个剔除z值可以各自设置为存储在装仓lrz缓冲区24中的所述剔除z值的值,其中存储在渲染lrz缓冲区28中的剔除z值集包含:对应于像素部位p00到p03(例如,2×2像素块)的剔除z值、对应于像素部位p04到p07的剔除z值、对应于像素部位p08到p11的剔除z值和对应于像素部位p12到p15的剔除z值。

低分辨率z剔除级56可以基于以下各者中的一或多个更新用于像素块部位的剔除z值:与对应于像素块部位的源像素块相关联的覆盖范围掩模、指示源像素块是否完全被覆盖的信息、用于源像素块的保守最远z值、用于源像素块的保守最接近z值和用于像素块部位的剔除z值。每当源像素块由低分辨率z剔除级56处理时,低分辨率z剔除级56可以确定用于对应于源像素块的像素块部位的剔除z值是否将更新。在一些实例中,如果低分辨率z剔除级56确定源像素块将被丢弃,那么低分辨率z剔除级56可以确定所述剔除z值将不更新。如果低分辨率z剔除级56确定源像素块将不丢弃,那么低分辨率z剔除级56可以依据源像素块完全被覆盖还是部分覆盖,使用一或多种技术来确定用于对应于源像素块的像素块部位的剔除z值是否将更新。

对于完全覆盖的源像素块,低分辨率z剔除级56可以确定用于源像素块的保守最远z值是否比用于对应于源像素块的像素块部位的剔除z值接近。如果用于源像素块的保守最远z值比剔除z值接近,那么低分辨率z剔除级56可以设置剔除z值等于用于源像素块的保守最远z值。如果用于源像素块的保守最远z值不比剔除z值接近,那么低分辨率z剔除级56可以保持先前的剔除z值(即,不更新剔除z值)。

像素处理级58可以从低分辨率z剔除级56接收非剔除源像素块(例如,gpu12确定可能在最终渲染的场景中可见的源像素块),并对非剔除源像素块执行像素处理以产生目标像素块。像素处理可包含例如像素着色操作、混合操作、纹理化-映射操作、可编程像素着色器操作等等。在一些实例中,像素处理级58中的一些或全部可以共同处理源像素块中的样本。在其它实例中,像素处理级58中的一些或全部可以彼此独立地处理源像素块中的每个样本。在一些实例中,像素处理级58可包含输出合并级,其将源像素块合并或组合为并置目标像素块(即,与源像素块具有相同部位的目标像素块)。在一些状况下,由像素处理级58产生的目标像素块可被放置到渲染目标(例如,帧缓冲器)中。执行像素处理可包含对非剔除源像素块的个别像素执行详细的z剔除。举例来说,像素处理级58可包含硬件和/或执行软件的处理单元,所述软件经被配置以相对于存储在所述片段的样本位置处的深度缓冲器中的z值来测试像素的z值。如果像素处理级58基于执行详细的z剔除而确定像素将在另一像素后面的最终渲染的场景中被闭塞而看不到,那么gpu12可以丢弃像素且可以停止对像素的进一步处理。

在一些实例中,gpu12可以避免在渲染遍次期间执行低分辨率z剔除级56。实情为,在执行图3中所示的装仓遍次之后且在执行图4中所示的渲染遍次之前,gpu12可以在单独的z剔除遍次中执行与低分辨率z剔除级56的技术相似的技术。此外,在一些实例中,gpu12可以至少部分地基于各自具有第一测试大小的第一剔除z值集而执行低分辨率z剔除,且随后至少部分地基于各自具有第二测试大小的第二剔除z值集而执行低分辨率z剔除,如贯穿本公开在装仓遍次、渲染遍次等等的情形之外所描述。举例来说,对cpu6和/或gpu12执行的应用程序可以执行第一低分辨率z剔除,其与用于在装仓遍次期间执行低分辨率z剔除级36的技术相似,如图3中所展示,且随后可以执行第二低分辨率z剔除,其与用于在渲染遍次期间执行低分辨率z剔除级56的技术相似,如图4中所展示。换句话说,贯穿本公开所描述的z剔除技术可不限于装仓遍次和渲染遍次,但在装仓遍次、渲染遍次等等的情形之外可同样适用。

图5是说明用于利用动态低分辨率z测试大小的实例技术的流程图。如图5中所展示,gpu12可执行装仓遍次以确定图形场景的多个图元与构成图形场景的多个图像块的图元-图像块相交,所述执行包含至少部分地基于各自具有第一测试大小的第一剔除z值集而执行对所述多个图元的表示的低分辨率z剔除,以从所述多个图元确定第一可见图元集(62)。gpu12可以进一步至少部分地基于执行对第一可见图元集的表示的低分辨率z剔除而执行渲染遍次以渲染多个图像块,所述执行低分辨率z剔除至少部分地基于表示第二测试大小的第二剔除z值集,以从第一可见图元集确定第二可见图元集,其中第一测试大小大于第二测试大小(64)。

在一些实例中,第一剔除z值集包括用于第一像素块集的各自具有第一测试大小的第一深度值集,且第二剔除z值集包括用于第二像素块集的各自具有第二测试大小的第二深度值集。

在一些实例中,gpu12可以将第一剔除z值集存储到装仓lrz缓冲区24中,且可以将第二剔除z值集存储到渲染lrz缓冲区28中,其中第二剔除z值集中的剔除z值数目比第一剔除z值集大。在一些实例中,gpu12可以使用第一z值集初始化第二剔除z值集。

在一些实例中,使用第一剔除z值集初始化第二剔除z值集进一步包括:运用对应于像素块部位的第一剔除z值集中的对应的剔除z值,gpu12初始化对应于像素块部位的第二剔除z值集中的多个剔除z值。在一些实例中,使用第一剔除z值集初始化第二剔除z值集进一步包括:gpu12将来自第一剔除z值集的每个剔除z值存储到渲染lrz缓冲区28内的多个存储部位中。

在一些实例中,gpu12可以将第二可见图元集的表示渲染到帧缓冲器16。

本公开中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例来说,所描述技术的各个方面可在一或多个处理器中实现,包含一或多个微处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga),或任何其它等效集成或离散逻辑电路,以及此类组件的任何组合。术语“处理器”或“处理电路”可一般指代前述逻辑电路中的任一个(单独或结合其它逻辑电路)或例如执行处理的离散硬件的任何其它等效电路。

此类硬件、软件和固件可实施于相同装置内或单独装置内以支持本公开中所描述的各种操作和功能。另外,所描述的单元、模块或组件中的任一个可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意在强调不同功能方面并且未必暗示此类模块或单元必须由单独硬件或软件组件实现。而是,与一或多个模块或单元相关联的功能性可由单独硬件、固件及/或软件组件执行,或集成到共用或单独硬件或软件组件内。

本公开中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可导致一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。在一些实例中,计算机可读媒体可为非暂时性计算机可读存储媒体。计算机可读存储媒体可包含随机存取存储器(ram)、只读存储器(rom)、可编程只读存储(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、快闪存储器、硬盘、cd-rom、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。

计算机可读媒体可包含计算机可读存储媒体,其对应于有形存储媒体,例如上文所列的那些存储媒体。计算机可读媒体还可包括通信媒体,其包含有助于计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体,和(2)例如暂时性信号或载波的非有形计算机可读通信媒体。

已描述了本发明的各种实施例。这些和其它实施例在以下权利要求书的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1