CN115018695A - 图形处理***的光栅化阶段中的基元片段处理 - Google Patents
图形处理***的光栅化阶段中的基元片段处理 Download PDFInfo
- Publication number
- CN115018695A CN115018695A CN202210671492.1A CN202210671492A CN115018695A CN 115018695 A CN115018695 A CN 115018695A CN 202210671492 A CN202210671492 A CN 202210671492A CN 115018695 A CN115018695 A CN 115018695A
- Authority
- CN
- China
- Prior art keywords
- primitive
- depth
- tile
- depth value
- logic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000012634 fragment Substances 0.000 title claims abstract description 350
- 238000012545 processing Methods 0.000 title claims abstract description 177
- 239000000872 buffer Substances 0.000 claims abstract description 278
- 238000000034 method Methods 0.000 claims abstract description 137
- 238000009877 rendering Methods 0.000 claims abstract description 50
- 238000012360 testing method Methods 0.000 claims description 293
- 238000004519 manufacturing process Methods 0.000 claims description 46
- 230000004044 response Effects 0.000 claims description 18
- 239000000523 sample Substances 0.000 description 115
- 230000000875 corresponding effect Effects 0.000 description 28
- 238000010586 diagram Methods 0.000 description 22
- 230000008569 process Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000006872 improvement Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000007423 decrease Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012993 chemical processing Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
- G06T15/405—Hidden part removal using Z-buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/50—Depth or shape recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10028—Range image; Depth image; 3D point clouds
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Image Generation (AREA)
Abstract
本公开涉及图形处理***的光栅化阶段中的基元片段处理。用于在图形处理***的光栅化阶段中处理基元片段的***和方法,其中渲染空间被细分成多个平铺块。所述方法包含:接收多个基元片段,每一基元片段对应于平铺块中的像素样本;确定是否将执行深度缓冲区读取以用于所述基元片段中的一个或多个的隐藏表面移除处理;以及基于深度缓冲区读取确定将所述基元片段分类到优先级队列和非优先级队列中;以及对所述优先级和非优先级队列中的所述基元片段执行隐藏表面移除处理,其中对所述优先级队列中的所述基元片段给予优先级。
Description
分案申请说明
本申请是申请日为2020年06月18日、申请号为202010557445.5、名称为“用于处理基元片段的***和方法”的发明专利申请的分案申请。
技术领域
本公开涉及图形处理***的光栅化阶段中的基元片段处理。
背景技术
图形处理***被配置成例如从在计算机***上运行的应用程序(例如游戏应用程序)接收图形数据,并对来自图形数据的图像进行渲染以提供渲染输出。举例来说,应用程序可以生成场景的3D模型并输出表示场景中的对象的几何结构数据。特定来说,应用程序可以使用一个或多个基元(即,简单的几何形状,例如但不限于可以被应用纹理的矩形、三角形、线和点)来表示每个对象,所述多个基元由一个或多个顶点的位置限定。在这些状况下,由应用程序输出的几何结构数据可以包含标识每个顶点的信息(例如顶点在世界空间中的坐标)和指示由顶点形成的基元的信息。图形处理***接着将所接收的几何结构数据转换成可以显示在屏幕上的图像。
图形处理***可以例如实施即时模式渲染(IMR)或基于平铺块的渲染(TBR)。在IMR中,将整个场景作为整体进行渲染。与此对比,在TBR中,使用被划分成被称为平铺块的子区段或子区域的渲染空间对场景进行渲染,其中可针对每个平铺块独立地执行渲染过程的至少一部分。平铺块可以具有任何合适形状,但通常为矩形(其中术语“矩形”包含正方形)。TBR的优点为,可以在渲染期间使用快速、片上存储器以用于颜色、深度和模板缓冲区操作,这与IMR相比允许显著减少***存储器带宽,而不需要足够大以同时存储用于整个场景的数据的片上存储器。
TBR涉及两个关键阶段:几何处理阶段;以及光栅化阶段。在几何处理阶段期间,将从应用程序(例如游戏应用程序)接收的几何结构数据(例如限定基元的顶点)从世界空间坐标变换成屏幕空间坐标。接着创建至少部分地落在平铺块的界限内的经过变换的基元(例如三角形)的每平铺块列表。在光栅化阶段期间,对每个平铺块单独地渲染(即,将经过变换的基元映射到像素并且针对平铺块中的每个像素标识颜色)。这可以包括标识哪个(哪些)基元在每个像素处是可见的。接着可以由每个像素处的可见基元的外观确定所述像素的颜色,所述可见基元可以由应用于所述像素处的纹理和/或在所述像素上运行的像素着色器程序限定。像素着色器程序描述将针对给定像素执行的操作。对每个平铺块单独地渲染会使图形处理***能够在光栅化阶段中对特定平铺块进行渲染时仅检索与所述平铺块相关的经过变换的基元数据,这会使针对存储器(例如中间缓冲区)的带宽要求保持为低。一旦已经针对平铺块中的每个像素标识出颜色值,就将平铺块的颜色值写出到存储器(例如帧缓冲区)。一旦已经渲染整个场景(即,一旦已经针对所有平铺块的像素确定了颜色值),场景就可以例如显示在屏幕上。
图1示出示例TBR图形处理***100。***100包括存储器1021、1022、1023、1024、几何处理逻辑104以及光栅化逻辑106。存储器1021、1022、1023和1024中的两个或更多个可以实施于存储器的同一个物理单元中。
几何处理逻辑104实施TBR的几何处理阶段。几何处理逻辑104包括变换逻辑108和平铺引擎110。变换逻辑108从应用程序(例如游戏应用程序)接收几何结构数据(例如顶点、基元和/或补片)并将几何结构数据变换到渲染空间(例如屏幕空间)中。变换逻辑108还可以执行例如裁剪和剔除的功能以移除落在视锥外的几何结构数据(例如基元或补片),和/或应用所属领域的技术人员所知的照明/属性处理。经过变换的几何结构数据(例如顶点、基元和/或补片)(i)存储在存储器1022中,并(ii)被提供到平铺引擎110。平铺引擎110从经过变换的几何结构数据生成用于每个平铺块的经过变换的基元的列表,所述经过变换的基元至少部分地落在所述平铺块内。所述列表可以被称作显示列表或经过变换的显示列表。在一些状况下,经过变换的显示列表包括到与至少部分地落在平铺块内的基元相关的经过变换的几何结构数据(例如顶点数据)的指针或链接。
光栅化逻辑106实施TBR的光栅化阶段。具体地说,光栅化逻辑106通过以下操作而以逐平铺块的方式对基元进行渲染:从存储器1023提取用于平铺块的显示列表,并接着针对落在如由用于所述平铺块的显示列表所指示的平铺块内的基元从存储器1022提取经过变换的几何结构数据;以及基于经过变换的几何结构数据对用于所述平铺块的基元进行渲染。
在一些状况下,光栅化逻辑106可包括光栅化器112、隐藏表面移除(HSR)逻辑114和纹理化/着色逻辑116。在这些状况下,光栅化器112从存储器1023提取每个显示列表,并对于每个显示列表,针对落在如由对应显示列表所指定的平铺块内的基元从存储器1022提取经过变换的几何结构数据,并将每个基元转换成基元片段的集合。术语“片段”在本文中用于意指采样点处的基元的样本,所述样本将被处理以对图像的像素进行渲染。在一些示例中,可以存在像素到片段的一对一映射。然而,在其它示例中,片段可以多于像素,并且此过采样可以允许像素值的较高质量渲染,例如通过促进可以应用于多个片段以用于对每个像素值进行渲染的抗混叠和其它滤波器。
然后将特定平铺块的基元片段提供到HSR逻辑114,所述HSR逻辑通过对基元片段执行深度测试而移除隐藏(例如,被其它基元片段隐藏)的基元片段。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑116,纹理化/着色逻辑116对基元片段执行纹理化和/或着色以确定被渲染图像的像素值。接着将用于平铺块的被渲染像素值存储在存储器1024(例如帧缓冲区)中。
光栅化逻辑106处理每个平铺块,并且当整个图像已经被渲染并存储在存储器1024(例如帧缓冲区)中时,所述图像可以从图形处理***100被输出并以任何合适方式被使用,例如显示在显示器上、存储在存储器中或传输到另一个装置等。在片段在由纹理化/着色逻辑116处理之前由HSR逻辑114处理的意义上,图1所展示的TBR图形处理***100是“推迟的”渲染***。在其它示例中,图形处理***可能并非推迟的渲染***,在此状况下,将会在将HSR应用于片段之前将纹理化/着色应用于那些片段。
重要的是能够以高效的方式执行深度测试。
下文所描述的实施例仅作为示例被提供,且并不限制实施方案,所述实施方案解决用于在图形处理***中执行深度测试的已知方法和***的缺点中的任一个或全部。
发明内容
提供本发明内容是为了介绍将在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
本文描述了用于在图形处理***的光栅化阶段中处理基元片段的***和方法,其中渲染空间被细分成多个平铺块。所述方法包含:接收多个基元片段,每一基元片段对应于平铺块中的像素样本;确定是否将执行深度缓冲区读取以用于所述基元片段中的一个或多个的隐藏表面移除处理;以及基于深度缓冲区读取确定将所述基元片段分类到优先级队列和非优先级队列中;以及对所述优先级和非优先级队列中的所述基元片段执行隐藏表面移除处理,其中对所述优先级队列中的所述基元片段给予优先级。
第一方面提供一种用于在图形处理***的光栅化阶段中处理基元片段的***,其中渲染空间被细分成多个平铺块,所述***包括:优先级队列,其用于存储基元片段;非优先级队列,其用于存储基元片段;逻辑,其被配置成:接收多个基元片段,每一基元片段对应于平铺块中的像素样本;确定是否将执行深度缓冲区读取以用于所述基元片段中的一个或多个的隐藏表面移除处理;以及基于深度缓冲区读取确定将所述基元片段分类到所述优先级队列和所述非优先级队列中;以及隐藏表面移除逻辑,其被配置成对所述优先级和非优先级队列中的所述基元片段执行隐藏表面移除处理,其中对所述优先级队列中的所述基元片段给予优先级。
第二方面提供一种在图形处理***的光栅化阶段中处理基元片段的方法,其中渲染空间被细分成多个平铺块,所述方法包括:接收多个基元片段,每一基元片段对应于平铺块中的像素样本;确定是否将执行深度缓冲区读取以用于所述基元片段中的一个或多个的隐藏表面移除处理;以及基于深度缓冲区读取确定将所述基元片段分类到优先级队列和非优先级队列中;以及对所述优先级和非优先级队列中的所述基元片段执行隐藏表面移除处理,其中对所述优先级队列中的所述基元片段给予优先级。
第三方面提供一种图形处理***,其被配置成执行所述第二方面的方法。
本文中所描述的粗略深度测试逻辑和图形处理***可以在集成电路上体现为硬件。可以提供在集成电路制造***处制造本文中所描述的粗略深度测试逻辑和/或图形处理***的方法。可以提供集成电路定义数据集,其在集成电路制造***中被处理时将所述***配置成制造如本文中所描述的粗略深度测试逻辑或图形处理***。可以提供非暂时性计算机可读存储介质,其上存储有粗略深度测试逻辑或图形处理***的计算机可读描述,所述计算机可读描述在集成电路制造***中被处理时使集成电路制造***制造体现粗略深度测试逻辑或图形处理***的集成电路。
可以提供集成电路制造***,其包括:非暂时性计算机可读存储介质,其上存储有本文中所描述的粗略深度测试逻辑或图形处理***的计算机可读描述;布局处理***,其被配置成处理计算机可读描述以生成体现粗略深度测试逻辑或图形处理***的集成电路的电路布局描述;以及集成电路生成***,其被配置成根据电路布局描述来制造粗略深度测试逻辑或图形处理***。
可以提供用于执行如本文所述的方法的计算机程序代码。可以提供其上存储有计算机可读指令的非暂时性计算机可读存储介质,当在计算机***处执行时,所述指令使计算机***执行如本文所述的方法。
所属领域的技术人员将清楚,上述特征可在适当时组合,并且可与本文所描述的示例的任一方面组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是示例的基于平铺块的渲染图形处理***的框图;
图2是示例混合渲染图形处理***的框图;
图3是具有粗略深度测试逻辑的示例混合渲染图形处理***的框图;
图4是图3的粗略深度测试逻辑的示例实施方案的框图;
图5是示出基于平铺块的深度范围的示例粗略隐藏深度测试的示意图;
图6是示出基于平铺块的深度范围的示例粗略前深度测试的示意图;
图7是示出‘在前’基元与‘非在前’基元之间的关系的示意图;
图8是示出示例像素样本图的示意图;
图9是示出响应于示例‘在前’基元更新示例像素样本图的示意图;
图10是示出基于示例像素样本图确定是否执行第一示例‘非在前’基元的深度缓冲区读取的示意图;
图11是示出基于示例像素图确定是否执行第二示例‘非在前’基元的深度缓冲区读取的示意图;
图12是用于在图形处理***中执行粗略深度测试的示例方法的流程图;
图13是用于图12的方法的任选步骤的第一示例集合的流程图;
图14是用于图12的方法的任选步骤的第二示例集合的流程图;
图15是示出确定平铺块中的基元的最大或最小深度的第一示例方法的示意图;
图16是示出确定平铺块中的基元的最大或最小深度的第二示例方法的示意图;
图17是示出确定平铺块中的基元的最大或最小深度的第三示例方法的示意图;
图18是示出当实施图12的粗略深度测试方法时数个基准的深度缓冲区读取带宽降低的图表;
图19是用于在光栅化阶段中处理基元的示例***的框图,在所述光栅化阶段中,一队列放置在粗略深度测试逻辑与HSR逻辑之间;
图20是用于在光栅化阶段中处理基元的示例***的框图,在所述光栅化阶段中,两个队列放置在粗略深度测试逻辑与HSR逻辑之间;
图21是将基元分类到图20的两个队列中的示例方法的流程图;
图22是从图20的两个队列中选择要处理的基元的示例方法的流程图;
图23是其中可实施本文中所描述的粗略深度测试逻辑或图形处理***的示例计算机***的框图;并且
图24是可用于生成体现本文中所描述的粗略深度测试逻辑或图形处理***的集成电路的示例集成电路制造***的框图。
附图示出各种示例。技术人员应了解,附图所示出的元件边界(例如方框、方框群组,或其它形状)表示边界的一个示例。在一些示例中,可以将一个元件设计为多个元件,也可以将多个元件设计为一个元件。在适当时,贯穿附图使用共同附图标记来指示类似特征。
具体实施方式
作为示例呈现以下描述,使得所属领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开实施例的各种修改对于所属领域的技术人员来说将是显而易见的。仅通过示例的方式描述实施方案。
如上文所描述,通过单独地渲染每个平铺块,TBR图形处理***仅需在光栅化阶段中对特定平铺块进行渲染时检索与所述平铺块相关的经过变换的基元数据,这使得对存储器(例如中间缓冲区)的带宽要求保持为最小值。然而,与立即模式渲染相比,TBR还具有许多缺点。例如,TBR通常需要使用***存储器来存储整个帧的经过变换的几何结构数据,这通常需要大量带宽以在上面实施有几何处理逻辑104和光栅化逻辑106的芯片与通常位于“片外”的存储器之间传送数据(例如,经过变换的几何结构数据)。因此,为了利用TBR的一些益处并同时减少与之相关联的一些缺点,本申请人已经开发了一种“混合渲染”技术,顾名思义,它是立即模式渲染与TBR之间的混合。
在混合渲染中,渲染空间被划分成平铺块并且基元与平铺块相关联,如同在TBR中一样(但在一些状况下,平铺块可以较小)。相应地,在混合渲染中,还存在几何处理阶段和光栅化阶段。然而,尽管在TBR中,由几何处理阶段生成的显示列表在可能的情况下包含至少部分地落在特定平铺块内的所有经过变换的基元的列表,但是在混合渲染中,由几何处理阶段生成的显示列表可以仅包含至少部分地落在特定平铺块内的经过变换的基元的子集以用于特定渲染,因此所述显示列表在本文中可以被称为部分显示列表。具体地说,在TBR中,如果可能的话,在几何处理阶段中处理所有基元并将经过变换的基元存储在片外存储器中,并且针对每个平铺块生成显示列表,所述显示列表指代存储在存储器中的经过变换的基元。相比之下,在混合渲染中,将经过变换的基元存储在相对小的存储器(例如,片上存储器,例如局部缓冲区)中,并且针对相应平铺块生成部分显示列表,所述部分显示列表指代小的存储器中经过变换的基元。小的存储器(例如,局部缓冲区)并不意图必须足够大以存储所有经过变换的基元以供渲染,因此当在几何处理阶段中生成经过变换的基元时,将所述基元存储在小的存储器中,并且针对存储在小的存储器中的经过变换的基元建立部分显示列表。周期性地将部分显示列表提供到光栅化阶段,使得经过变换的基元中的一些可以在光栅化阶段中进行处理,使得这些基元不再需要存储在小的存储器中(并且可从中移除),由此释放小的存储器的一部分。然后将新的经过变换的基元存储在小的存储器中的自由空间中,并且继续基于新的经过变换的基元建立部分显示列表。然而,在特定平铺块的所有经过变换的基元已经存储在小的存储器中之前,可将所述平铺块的部分显示列表发送到光栅化阶段,因此,可针对所述平铺块生成至少一个后续部分列表,所述至少一个后续部分列表包括在将所述平铺块的先前部分显示列表提供到光栅化阶段之后存储在小的存储器中的经过变换的基元。
图2示出示例混合渲染图形处理***200。图形处理***200包括存储器2021、2024、几何处理逻辑204和光栅化逻辑206。存储器2021和2024可以实施于存储器的同一个物理单元中。
类似于图1的几何处理逻辑104,几何处理逻辑204实施几何处理阶段。几何处理逻辑204包括变换逻辑208和平铺引擎210。变换逻辑208的操作方式与图1的变换逻辑108相同。具体地说,变换逻辑208从应用程序(例如游戏应用程序)接收几何结构数据(例如顶点、基元和/或补片)并将几何结构数据变换到渲染空间(例如屏幕空间)中。变换逻辑208还可以执行例如裁剪和剔除的功能以移除落在视锥外的几何结构数据(例如基元或补片),和/或应用所属领域的技术人员所知的照明/属性处理。经过变换的几何结构数据(例如顶点、基元和/或补片)被提供到平铺引擎210。
平铺引擎210将经过变换的几何结构数据存储在经过变换的局部几何结构缓冲区211中,并针对每个平铺块,在经过变换的局部几何结构缓冲区211中生成经过变换的基元的列表,所述经过变换的基元至少部分地落在所述平铺块内。所述列表可以被称作部分显示列表。在一些状况下,部分显示列表可包括到与至少部分地落在所述平铺块内的基元相关的经过变换的局部几何结构缓冲区211中经过变换的几何结构数据(例如顶点数据)的指针或链接。经过变换的局部几何结构缓冲区并不意图必须足够大以存储所有经过变换的几何结构数据从而渲染帧,因此,平铺引擎210周期性地(例如不时地,例如以规则间隔,或当经过变换的几何结构缓冲区211变满时,或当经过变换的几何结构缓冲区211的充满度高于阈值时)将一个或多个部分显示列表发送到光栅化逻辑206,从而释放缓冲区211中的空间。如上文所描述,这意味着当将部分显示列表提供到光栅化逻辑206时,所述部分显示列表可以仅包括落在所述平铺块内的基元的一部分(因为落在平铺块内的一些基元可能尚未通过几何处理逻辑204处理)。
光栅化逻辑206实施光栅化阶段。具体地说,光栅化逻辑206通过以下操作而以逐平铺块的方式对基元进行渲染:针对落在如由用于平铺块的部分显示列表所指示的所述平铺块内的基元,从经过变换的局部几何结构缓冲区211提取经过变换的几何结构数据;以及基于经过变换的几何结构数据对用于所述平铺块的基元进行渲染。
在一些状况下,光栅化逻辑206可包括光栅化器212、隐藏表面移除(HSR)逻辑214和纹理化/着色逻辑216。在这些状况下光栅化器212从平铺引擎210接收部分显示列表,并且对于每个部分显示列表,针对落在如由部分显示列表所指示的平铺块内的基元从经过变换的局部几何结构缓冲区211提取经过变换的几何结构数据,并将每个基元转换成基元片段的集合。
接着将用于特定平铺块的基元片段提供到HSR逻辑214,所述HSR逻辑移除隐藏(例如被其它基元片段隐藏)的基元片段。接着将其余片段(在隐藏表面移除之后)传递到纹理化/着色逻辑216,所述纹理化/着色逻辑对基元片段执行纹理化和/或着色以确定被渲染图像的像素值。可以接着将用于平铺块的被渲染像素值存储在2024(例如帧缓冲区)中。
当整个图像已经被渲染并存储在存储器2024(例如帧缓冲区)中时,所述图像可以从图形处理***200被输出并以任何合适方式被使用,例如显示在显示器上、存储在存储器中或传输到另一个装置等。
尽管几何处理逻辑在图中示为与光栅化逻辑分离,但在一些实施方案中,几何处理逻辑和光栅化逻辑可共享一些资源。例如,图形处理***可以使用统一着色方法,其中相同的物理执行单元可以用于执行在几何处理阶段中使用的指令(例如,执行顶点处理)并执行在光栅化阶段中使用的指令(例如,执行片段处理)。
在这种混合渲染图形处理***中,可以在渲染阶段中处理每个平铺块多于一次。例如,平铺块的第一部分显示列表可以由几何处理阶段生成,所述几何处理阶段随后在光栅化阶段中被处理;随后,所述相同平铺块的第二部分显示列表可以由几何处理阶段生成,所述几何处理阶段随后在光栅化阶段中处理。每当在光栅化阶段中处理部分显示列表时,全分辨率隐藏表面移除由隐藏表面移除(HSR)逻辑执行以移除隐藏的基元片段。这可涉及在存储在存储器中的平铺块的深度缓冲区中读取,以及将基元片段中的每一个的深度值(例如Z值或Z坐标)与对应样本位置的深度缓冲区中的值进行比较。具体地说,深度缓冲区是到目前为止平铺块的每个像素样本的‘最佳’深度值(例如最接近观察者的深度值)的记录。如果所接收的基元片段具有比深度缓冲区中的对应深度值‘差’的深度值(例如指示其离观察者更远的深度值),那么基元片段将被另一基元隐藏,并且因此基元片段‘未通过’深度测试并被丢弃。然而,如果所接收的基元片段具有比深度缓冲区中的对应深度值‘更好’的深度值(即,指示其更接近观察者的深度值),那么基元片段‘通过’深度测试。基元片段的基元标识符接着存储在标签缓冲区中,并且深度缓冲区中的对应值经过更新以指示存在新的‘最佳’深度值。标签缓冲区针对平铺块的每个样本位置(即,像素样本)存储最近通过样本位置处的深度测试的基元片段的基元标识符。一旦已经针对对应于部分显示列表的所有基元片段执行深度测试,深度缓冲区就存储在存储器中,直到所述平铺块的下一部分显示列表由HSR逻辑处理。
因此,在此类图形处理***中,每个平铺块的深度缓冲区可多次从存储器读取并且多次写入到存储器。由于每次读取和写入消耗了大量带宽和时间,因此需要降低此类图形处理***中的深度缓冲区的读取和写入次数。
因此,本文描述了粗略深度测试逻辑和方法,其用于对与平铺块相关的基元和/或基元片段(例如部分显示列表中的基元/基元片段)的集合执行粗略深度测试,随后对那些基元/基元片段执行全分辨率隐藏表面移除(例如,由HSR逻辑执行的深度测试),以便减少从所述平铺块的深度缓冲区读取和写入到所述平铺块的深度缓冲区的次数。特定来说,在本文中所描述的方法和逻辑中,针对每个平铺块维持深度范围(例如最小深度值和最大深度值)并片上存储所述深度范围。基于平铺块的深度范围,对以下进行初始(“粗略”)确定:集合中的基元/基元片段是否被已经针对所述平铺块处理的基元(例如与所述平铺块的先前或较早的部分显示列表相关联的基元)隐藏,和/或基元/基元片段是否具有比已经针对所述平铺块处理的基元‘更好’的深度(根据深度比较模式)。
具体地说,当粗略深度测试逻辑接收平铺块的基元集合时,粗略深度测试逻辑根据所述平铺块的深度范围确定基元中的每一个(或由所述基元生成的基元片段中的每一个)是否将在平铺块中由基元/基元片段重叠的每个位置处被先前针对所述平铺块处理的基元隐藏。如果确定基元/基元片段被隐藏,那么不相对于所述平铺块对所述基元/基元片段执行进一步处理(例如,不相对于所述平铺块由HSR逻辑处理基元/基元片段)。因此,如果确定基元/基元片段被隐藏,那么所述基元/基元片段可能无法从粗略深度测试逻辑输出。然而,如果未确定基元/基元片段在平铺块中由基元/基元片段重叠的每个位置处被隐藏,那么粗略深度测试逻辑根据所述平铺块的深度范围确定所述基元/基元片段是否在平铺块中由基元/基元片段重叠的每个位置处具有比已经针对所述平铺块处理的基元‘更好’的深度。如果确定基元/基元片段具有比已经针对所述平铺块处理的基元‘更好’的深度,那么不需要读取所述平铺块的深度缓冲区以对所述基元/基元片段执行全分辨率深度测试,并且基元/基元片段被标识为这样。
因此,在本文中所描述的方法和***中,如果集合中的基元或基元片段中的每一个:(i)被先前针对所述平铺块处理的基元隐藏;或(ii)根据深度比较模式具有比先前针对所述平铺块处理的基元‘更好’的深度,那么不需要执行平铺块的深度缓冲区的读取以对平铺块的基元集合执行全分辨率深度测试。在(例如,通过多个部分显示列表)多次处理每个平铺块的情况下,这可以显著减少从存储器读取深度缓冲区的次数。
在一些状况下,如下文更详细地描述,可以通过以下操作来进一步减少平铺块的深度缓冲区的读取和/或减少对平铺块执行的全分辨率深度测试的次数:保持平铺块中的像素样本的记录,所述像素样本的‘最佳’深度值将可用于HSR逻辑;以及将与每个基元/基元片段相关的像素样本与所述记录进行比较以确定是否可省略深度缓冲区的读取和/或是否可针对所述基元/基元片段省略全分辨率深度测试。
虽然下文将用于执行粗略深度测试的粗略深度测试逻辑和方法描述为在混合渲染图形处理***中使用,但本文中所描述的粗略深度测试逻辑和相关方法的使用不限于在混合渲染图形处理***中使用,并且可以在其它图形处理***中使用,所述图形处理***例如但不限于多次渲染渲染空间的区域(例如分批或成组地渲染与同一区域相关的基元)的其它图形处理***。
现在参考图3,其示出了包括粗略深度测试逻辑320的示例混合渲染图形处理***300,所述粗略深度测试逻辑在全分辨率隐藏表面移除之前,基于与平铺块相关联的深度范围对与所述平铺块相关联的基元(例如部分显示列表中的基元)执行粗略深度测试。具体地说,混合渲染图形处理***300与图2的混合渲染图形处理***200相同,混合渲染图形处理***300具有:存储器3021、3024;几何处理逻辑304,其包括变换逻辑308、平铺引擎310和经过变换的局部几何结构缓冲区311;以及光栅化逻辑306,其包括光栅化器312、HSR逻辑314和纹理化/着色逻辑316(其大体上以与上文关于图2所描述的***200中的对应部件相同的方式工作),不同之处在于混合渲染图形处理***300另外包括粗略深度测试逻辑320。
粗略深度测试逻辑320被配置成在全分辨率隐藏表面移除(即,全分辨率深度测试)之前对与平铺块相关联的基元/基元片段(例如部分显示列表中的基元/基元片段)的每个集合执行粗略深度测试。特定来说,粗略深度测试逻辑320被配置成:存储每个平铺块的深度范围(例如最小深度值和最大深度值),所述深度范围表示基于先前已经针对所述平铺块处理(例如先前渲染)的基元的平铺块的深度范围;并且针对与平铺块相关联的每个基元(或由所述基元生成的每个基元片段)基于所述平铺块的所存储深度范围执行粗略隐藏深度测试,以确定基元/基元片段是否被先前针对所述平铺块处理的基元隐藏。如果粗略深度测试逻辑确定基元/基元片段隐藏在平铺块中,那么不相对于所述平铺块对所述基元/基元片段执行进一步处理(例如,不相对于所述平铺块由HSR逻辑314处理基元/基元片段)。例如,如果粗略深度测试逻辑320确定基元隐藏在平铺块中,那么所述基元可能无法由粗略深度测试逻辑320输出。然而,如果粗略深度测试逻辑320未确定基元/基元片段被先前针对所述平铺块处理的基元隐藏,那么粗略深度测试逻辑320基于平铺块的深度范围执行粗略前深度测试,以确定基元/基元片段是否具有比先前针对所述平铺块处理的基元‘更好’的深度。如果确定基元/基元片段具有比先前针对平铺块处理的基元‘更好’的深度,那么粗略深度测试逻辑320利用可在不读取所述平铺块的深度缓冲区的情况下执行全分辨率深度测试的指示或标识向HSR逻辑提供基元/基元片段。
在一个示例中,粗略隐藏深度测试是在光栅化器312对基元集合进行光栅化之前(即,在将基元转换成基元片段之前)由粗略深度测试逻辑320执行的,并且粗略前深度测试是在光栅化器312已经对基元集合进行光栅化之后(即,在基元已经转换成基元片段之后)执行的。在光栅化之前执行粗略隐藏深度测试的优点是在光栅化之前剔除了隐藏的任何基元,因此不会浪费时间和资源对隐藏的基元进行光栅化。具体地说,将基元光栅化成基元片段通常包括通过内插计算非常密集的基元的顶点的深度来确定每个基元片段的深度。因此,在光栅化之前剔除基元可以避免对在最终帧/图像中将不可见的基元执行这种计算密集型处理。在光栅化之后执行粗略前深度测试的优点是在一些状况下,更精细的粗略前深度测试(例如,在基元片段/像素样本级别下而非在基元级别下)可相对于平铺块的最小深度值执行。然而,本领域的技术人员将显而易见的是,这仅仅是示例,并且由粗略深度测试逻辑320执行的功能可以在光栅化(即,将基元转换成基元片段)前后之间以任何合适的方式拆分。例如,在其它状况下,粗略隐藏深度测试和粗略前深度测试两者可以在光栅化之后执行,或者粗略隐藏深度测试和粗略前深度测试两者可以在光栅化之前执行。参考图4描述粗略深度测试逻辑320的示例实施方案。
在此示例中,HSR逻辑314被配置成接收通过由粗略深度测试逻辑320执行的粗略深度测试的基元(或基元片段)并对所接收的基元/基元片段执行全分辨率隐藏表面移除,并且当HSR逻辑314接收已被标识为不需要深度缓冲区读取的基元/基元片段时,在不读取对应平铺块的深度缓冲区的情况下执行全分辨率隐藏表面移除。
例如,在一些状况下,HSR逻辑314可被配置成当对与平铺块相关联的基元集合(或基元片段集合)执行隐藏表面移除时,维持所述平铺块的深度值更新图和所述平铺块的当前最佳深度值缓冲区。深度值更新图指示在基元集合/基元片段集合的处理期间已经更新哪些像素样本深度值,并且当前最佳深度值缓冲区指示到目前为止平铺块的每个像素样本的‘最佳’(例如最小)深度值。当HSR逻辑314接收集合中与平铺块相关联的第一基元/基元片段时,可以初始化所述平铺块的深度值更新图以指示尚未更新深度值。也可以在此时初始化所述平铺块的当前最佳深度值缓冲区。然而,当前最佳深度值缓冲区的初始化可以取决于所述平铺块的深度缓冲区是否已经从存储器加载而不同。例如,如果集合中的第一基元/基元片段被标识为不需要深度缓冲区读取,那么所述平铺块的深度缓冲区可能尚未从存储器中读取,并且当前最佳深度值缓冲区中的值可初始化为‘最差’(例如最大)深度值。然而,如果第一基元/基元片段未被标识为不需要深度缓冲区读取(即,其需要深度缓冲区读取),那么在从存储器读取深度缓冲区时,当前最佳深度值缓冲区中的值可初始化为所述深度缓冲区中的值。如果在深度缓冲区读取之前在当前最佳深度值缓冲区中更新一个或多个像素样本深度值并且HSR逻辑接着接收触发深度缓冲区读取的基元/基元片段(即,未被标识为不需要深度缓冲区读取的基元/基元片段),那么仅将已加载深度缓冲区中与未在深度值更新图中标记为已经更新的那些像素样本相关联的深度值加载到当前最佳深度值缓冲区中。例如,如果在深度缓冲区读取之前更新与像素样本1相关联的深度值,那么不用与像素样本1相关联的深度缓冲区值来替换或重写当前最佳深度值缓冲区中与样本1相关联的深度值。
对基元/基元片段执行全分辨率隐藏表面移除可包括将基元片段的深度或基元的每个基元片段的深度值与平铺块中与基元片段相关联的像素样本的对应当前‘最佳’深度值进行比较。如果基元片段的深度值比当前‘最佳’深度值更好,那么基元片段通过全分辨率深度测试,并且将基元片段的标识符发送到标签缓冲区。接着更新当前最佳深度值缓冲区以反映像素样本的新的‘最佳’深度值,并且更新深度值更新图以反映所述像素样本的深度值已经更新。然而,如果基元片段的深度值比对应像素样本的当前‘最佳’深度值更差(例如,更高),那么基元片段未通过全分辨率深度测试,并且不相对于所述平铺块对所述基元片段执行进一步处理(例如可以不相对于所述平铺块由纹理化/着色逻辑处理基元片段)。
当由HSR逻辑314处理集合中与平铺块相关联的最后一个基元/基元片段时,HSR逻辑314可被配置成将当前最佳深度值缓冲区中在深度值更新图中标识为正在更新的深度值写入到存储器中的深度缓冲区。
现在参考图4,其示出了图3的粗略深度测试逻辑320的示例实施方案。在此示例中,粗略深度测试逻辑320包括:存储器402,其用于存储每个平铺块的深度范围;隐藏深度测试逻辑404,其用于确定与平铺块相关联的基元/基元片段中的每一个是否被先前针对所述平铺块处理的基元隐藏;以及前深度测试逻辑406,其用于确定与平铺块相关联的基元/基元片段中的每一个是否具有比先前针对所述平铺块处理的基元‘更好’的深度。粗略深度测试逻辑320还可包括用于更新平铺块的深度范围的深度范围更新逻辑408。
每个平铺块的深度范围表示与先前针对所述平铺块处理(例如先前渲染)的基元相关联的深度范围。如上文所描述,平铺块的深度缓冲区用于记录到目前为止平铺块中每个像素样本的‘最佳’(例如最低)深度值,其中像素样本的‘最佳’(例如最低)深度值是所述像素样本处的当前取消隐藏或可见的基元片段的深度值。在一些状况下,平铺块的深度范围可由平铺块的最小深度值和最大深度值限定,其中平铺块的最小深度值是平铺块的最小‘最佳’深度值(到目前为止),并且平铺块的最大深度值是最大‘最佳’深度值(到目前为止)。换句话说,平铺块的最小深度值是平铺块中基于先前针对平铺块处理的基元的取消隐藏基元片段的最小深度值,并且平铺块的最大深度值是平铺块中基于先前针对平铺块处理的基元的取消隐藏基元片段的最大深度值。在一些状况下,在每次渲染开始时,可以分别将每个平铺块的最大深度值和最小深度值(例如通过驱动器或另一部件)初始化为平铺块的深度缓冲区中的最大深度值和最小深度值。在其它状况下,在不由例如驱动器自动初始化平铺块的最大深度值和最小深度值的情况下,粗略深度测试逻辑320可被配置成将所有平铺块的最大深度值和最小深度值初始化为‘最差’(例如最大)可能深度值。
最小深度值和最大深度值的含义(例如,最小值还是最大值更接近观察者)可取决于图形处理***用于确定对象(例如基元/基元片段)何时在另一对象(例如基元/基元片段)前面的深度比较模式。具体地说,图形处理***可以使用多种不同的深度比较模式,并且可以在它们之间切换。示例深度比较模式包括但不限于“小于”(DCM_LESS)、“小于或等于”(DCM_LESS_EQ)、“大于”(DCM_GREATER)、“大于或等于”(DCM_GREATER_EQ)、“等于”(DCM_EQ)、“不等于”(DCM_NOT_EQ)、“始终”(DCM_ALWAYS)或“从不”(DCM_NEVER)。
DCM_LESS比较模式是常见的深度比较模式,这是因为其对应于坐标系中的渲染,其中深度值随着与观察者的距离增大而增大。深度值比另一基元片段的深度值小的基元片段更接近观察者,并且因此具有‘更好’的深度值并在其它基元片段前面被渲染。其它深度比较模式支持替代坐标系。深度比较模式在传统上用于HSR逻辑314中的全分辨率隐藏表面移除,但当在粗略深度测试逻辑320中执行粗略深度测试时也可以考虑。
每个平铺块的深度范围可以任何合适的方式存储在存储器402中。例如,在一些状况下,平铺块的深度范围可存储在针对每个平铺块具有一个条目的查找表或索引表中。例如,平铺块可以从0编号到n,并且第i个平铺块的深度范围(例如,最大深度值和最小深度值)可以存储在表中的第i个索引处并且可通过所述索引访问。在一些状况下,粗略深度测试逻辑320可包括存储深度范围的存储器402与隐藏深度测试逻辑404和/或前深度测试逻辑406之间的缓存(未示出),所述前深度测试逻辑中存储有最近访问的平铺块的深度范围。这可以显著减少存储器402的读取次数,因为隐藏深度测试逻辑404和前深度测试逻辑406两者将需要多次访问相同的深度范围信息。然而,由于存储器402“片上”实施为粗略深度测试逻辑320的部分,所以从存储器402读取数据和将数据写入到所述存储器的成本并不与从片外***存储器(3021和3024)读取数据和将数据写入到所述片外***存储器的成本一样高(在功率消耗和等待时间方面)。
隐藏深度测试逻辑404被配置成接收与平铺块相关联的基元(例如部分显示列表中的基元)的集合或与平铺块相关联的基元片段(例如由部分显示列表中的基元生成的基元片段)的集合,并基于所述平铺块的深度范围对基元/基元片段执行粗略隐藏深度测试,以确定集合中的哪些基元/基元片段在平铺块中由基元/基元片段重叠的每一位置处被先前针对所述平铺块处理的基元隐藏。
在一些状况下,隐藏深度测试逻辑404可被配置成在每基元基础上执行粗略隐藏深度测试。具体地说,在一些状况下,隐藏深度测试逻辑404可被配置成针对集合中的每个基元,确定所述基元是否在平铺块中由所述基元重叠的所有位置处被先前针对平铺块处理的基元隐藏(即,所述基元是否隐藏在平铺块中)。在这些状况下,隐藏深度测试逻辑404可被配置成通过将平铺块中的基元的最大深度和/或最小深度与平铺块的深度范围进行比较,确定基元是否在平铺块中由所述基元重叠的所有位置处被先前针对平铺块处理的基元隐藏。
例如,当粗略深度测试逻辑320在DCM_LESS模式下操作时,唯一可肯定地确定的是,在平铺块中由基元重叠的每一位置处,如果平铺块中的基元的最小深度值(primmin)大于平铺块的最大深度值(tilemax)(即,primmin>tilemax),那么基元被隐藏。这在图5中通过三个示例502、504、506示出,其中可能深度值的范围从0.0扩展到1.0,其中0.0最接近观察者,并且1.0最远离观察者。在每个示例502、504、506中,平铺块中的示例基元508、510和512的深度(primmax、primmin)示出为与平铺块的深度范围(tilemax、tilemin)进行比较。在第一示例502中,基元508具有从primmin到primmax的深度范围,所述深度范围处于由tilemin和tilemax限定的平铺块深度范围内。在此示例中,在未将基元在每个相关位置处的深度与深度缓冲区中的对应深度进行比较的情况下无法得知基元508在平铺块中的所有位置处被隐藏,因此在粗略深度测试逻辑320中无法肯定地确定基元被隐藏。
在第二示例504中,基元510具有从primmin到primmax的深度范围,所述深度范围部分地处于平铺块深度范围内并且部分地比平铺块深度范围深。在此示例中,基元将隐藏在一些位置处,但在粗略深度测试逻辑320中无法肯定地确定基元隐藏在所有位置处。
在第三示例506中,基元512具有从primmin到primmax的深度范围,其中整个范围大于平铺块的最大深度(即,primmin>tilemax)。这意味着在平铺块的由基元重叠的每个位置处,存在先前已经针对此平铺块的此位置处理的基元,所述基元具有‘更好’的深度值(例如当深度比较模式是DCM_LESS时具有较小深度值)。因此,基元不会在平铺块中的任何位置处取消隐藏(即,在平铺块中由基元重叠的每一位置处,基元将被隐藏)。
可以使用任何合适的方法来确定平铺块中的基元的最大深度和/或最小深度。下文描述用于确定平铺块中的基元的最大深度和/或最小深度的示例方法。例如,当基元完全落在平铺块的界限内并且在光栅化之前执行粗略隐藏深度测试时,基元的顶点的最大深度和最小深度可用作基元的最大深度和最小深度。然而,当基元未完全落在平铺块的界限内并且在光栅化之前执行粗略隐藏深度测试时,平铺块中的基元的最大深度或最小深度可估计为以下的最大值或最小值:基元的边缘与平铺块的边缘的任何相交点处的深度;平铺块落在基元内的拐角的任何位置处的基元深度;以及基元落在平铺块内的任何顶点的深度(参见例如图16)。
如果隐藏深度测试逻辑404确定基元隐藏在平铺块中,那么不针对所述平铺块进一步处理基元(例如不对所述平铺块的所述基元执行全分辨率深度测试)。然而,如果隐藏深度测试逻辑404尚未确定基元在平铺块中由基元重叠的所有位置处被隐藏,那么隐藏深度测试逻辑404输出基元以供进一步处理。在一些状况下(例如图3中所示),隐藏深度测试逻辑404可被配置成将通过粗略隐藏深度测试的基元输出到光栅化器312,所述光栅化器从那些基元生成基元片段,并且所述基元片段接着被提供到前深度测试逻辑406。然而,在其它状况下,隐藏深度测试逻辑404可被配置成将通过粗略隐藏深度测试的基元直接提供到前深度测试逻辑406。
在一些状况下,代替在每基元基础上执行隐藏深度测试,可以在每基元片段基础上执行隐藏深度测试。例如,在一些状况下,可在将基元提供到隐藏深度测试逻辑404之前(例如由光栅化器312)将所述基元转换(即,光栅化)成基元片段,使得隐藏深度测试逻辑404接收与平铺块相关的基元片段集合。接着,对于集合中的每个基元片段,粗略隐藏深度测试逻辑404可被配置成确定所述基元片段是否被先前针对平铺块处理的基元隐藏在平铺块中。当实施DCM_LESS模式时,如果基元片段的深度值大于由平铺块的深度范围限定的平铺块最大深度值,那么基元片段可确定为被先前针对所述平铺块处理的基元隐藏在平铺块中。如果确定基元片段隐藏在平铺块中,那么可以不相对于所述平铺块对所述基元片段执行进一步处理(例如可以不对所述基元片段执行全分辨率深度测试)。然而,如果确定基元片段未隐藏在平铺块中,那么可以将所述基元片段输出到前深度测试逻辑406。
前深度测试逻辑406被配置成基于平铺块的深度范围对从隐藏深度测试逻辑404(直接或间接地)接收的基元/基元片段执行粗略前深度测试。具体地说,前深度测试逻辑406被配置成根据平铺块的深度范围确定集合中的基元/基元片段是否具有比先前针对所述平铺块处理的基元‘更好’的深度(根据深度比较模式)。
在一些状况下,前深度测试逻辑406可被配置成在每基元基础上执行粗略前深度测试,其中如果在平铺块中由基元重叠的所有位置处,基元具有比先前针对平铺块处理的基元‘更好’的深度,那么基元具有比先前针对所述平铺块处理的基元‘更好’的深度。在这些状况下,前深度测试逻辑406可被配置成通过将平铺块中的基元的最大深度和/或最小深度与平铺块的深度范围进行比较,确定基元是否具有比先前针对所述平铺块处理的基元‘更好’的深度。
例如,当粗略深度测试逻辑320在DCM_LESS模式下操作时,唯一可决定性地确定的是,在平铺块中由基元重叠的每一位置处,如果平铺块中的基元的最大深度值(primmax)小于平铺块的最小深度(tilemin)(即,primmax<tilemin),那么基元具有比先前处理的基元‘更好’的深度。这在图6中示出,其中可能深度值的范围从0.0扩展到1.0,并且0更接近观察者且1.0更远离观察者。在此示例中,基元602具有从primmin到primmax的深度范围,其中基元的整个深度范围小于平铺块的最小深度(即,primmax<tilemin)。这意味着在平铺块的由基元重叠的每个位置处,基元具有比先前针对所述平铺块处理的所有基元‘更好’的深度值。因此,基元602将在先前针对所述平铺块处理的在由基元重叠的样本位置处的基元前面。此类基元在本文中可以被称为‘在前’基元。
如果前深度测试逻辑406已经确定基元具有比先前针对所述平铺块处理的基元‘更好’(例如更小)的深度,那么前深度测试逻辑406将所述基元标识为可以在不读取深度缓冲区的情况下相对于所述平铺块对此基元执行全分辨率深度测试(例如由HSR逻辑执行)的基元。此类基元也可被称作‘无深度缓冲区读取’基元。这是因为,如果基元具有比先前针对平铺块处理的基元更好(例如更小)的深度,那么(i)基元在所有相关像素样本处具有‘最佳’深度值,并且因此所述基元在每个相关像素样本处的深度值将变成那些像素样本的新的‘最佳’深度;或(ii)在集合中的所述基元之前的一个或多个基元将具有比所述基元在一个或多个像素样本处的深度值更好的深度值。在第二状况下,仅需要将基元的深度值与集合中较早的基元的深度值进行比较。在任一情况下,这些像素样本的‘最佳’深度值将来自当前正处理的集合中的原因。因此,如果前深度测试逻辑406已经确定基元具有比先前针对所述平铺块处理的所有基元更好(例如更小)的深度,那么前深度测试逻辑406可输出基元以及不必读取深度缓冲区的指示。指示可采用任何合适的形式。例如,在一些状况下,当不必读取深度缓冲区时,指示可采用标志的形式。然而,这仅仅是示例,并且指示可采用其它形式。当在光栅化之后执行粗略前深度测试时,平铺块中与基元相关的每个基元片段可被标识为‘无深度缓冲区读取’基元片段。
执行粗略前深度测试以标识不必读取深度缓冲区的基元可以显著减少深度缓冲区读取的次数。例如,如果由隐藏深度测试逻辑404接收的基元集合中的所有基元因为被隐藏而被剔除或因为具有比先前针对所述平铺块处理的基元‘更好’的深度而被标识为不需要深度缓冲区读取,那么当基元(或与其相关的基元片段)的集合随后由HSR逻辑处理时,不必读取对应平铺块的深度缓冲区。
在一些状况下,前深度测试逻辑406可被配置成通过以下操作来进一步减少深度缓冲区读取的次数:保持平铺块中的像素样本的记录(例如,在存储器410中),众所周知的是HSR逻辑将针对所述像素样本具有‘最佳’深度值;以及对于集合中的任何‘非在前’基元,将与所述基元相关的像素样本与所述记录进行比较以确定所述基元是否需要读取深度缓冲区。具体地说,如果HSR逻辑已经针对平铺块中与‘非在前’基元相关联的所有像素样本具有‘最佳’深度值(到目前为止),那么‘非在前’基元的全分辨率深度测试不需要读取深度缓冲区。
在一些状况下,前深度测试逻辑406可被配置成响应于标识‘在前基元’而更新记录,以指示HSR逻辑将针对与所述‘在前基元’相关联的所有像素样本具有到目前为止‘最佳’的深度值。如果与‘非在前’基元相关联的所有像素样本与早期的‘在前’基元相关,那么所述‘非在前’基元的全分辨率深度测试不需要读取深度缓冲区,这是因为到目前为止那些像素样本的最佳深度值将来自在集合中的基元之前的‘在前’基元或来自‘非在前’基元。具体地说,在这些状况下,可能发生两种情境:图7中的702处所示的第一情境是‘非在前’基元706完全落在‘在前’基元708后面,在基元集合中,所述‘非在前’基元在所述‘在前’基元之前;并且704处所示的第二情境是‘非在前’基元710部分地落在‘在前’基元712后面并且部分地落在‘在前’基元712前面。在任一情境中,‘最佳’深度值来自‘非在前’基元706、710或集合中在所述‘非在前’基元之前的‘在前’基元708、712。因此,在这些状况下(其中平铺块中与‘非在前’基元(基元706或710)相关联的所有像素样本还与‘在前’基元(基元708和712)相关联),不需要读取深度缓冲区来标识到目前为止那些像素样本的‘最佳’深度值。因此,如果确定HSR逻辑将针对与‘非在前’基元相关联的所有像素样本具有‘最佳’深度值,那么可以利用可在不读取深度缓冲区的情况下执行全分辨率深度测试的指示将‘非在前’基元输出到下一阶段(例如HSR逻辑)。
在一些状况下,前深度测试逻辑406可被配置成通过维持当前正在处理的平铺块的如图8所示的像素样本图800来实施这一点,所述像素样本图指示到目前为止HSR逻辑将针对所述平铺块的哪些像素样本具有‘最佳’深度值。在图8所示的示例中,像素样本图800用于像素样本802的4×4平铺块,并且针对每个像素样本存在指示HSR逻辑是否将针对所述像素样本具有‘最佳’深度值的位。在此示例中,‘0’指示到目前为止HSR逻辑可能不针对所述像素样本具有‘最佳’(例如最低)深度值,并且‘1’指示到目前为止HSR逻辑将针对所述像素具有‘最佳’(例如最低)深度值,然而,本领域的技术人员将显而易见的是,这仅仅是示例。因此,在此示例中,HSR逻辑仅针对像素样本(3,2)和(3,3)具有‘最佳’(例如最低)深度值。
前深度测试逻辑406可被配置成响应于确定基元具有比先前针对平铺块处理的基元‘更好’的深度(根据深度比较模式)(即,基元是‘在前’基元),标识与所述‘在前’基元相关联的像素样本。如果基元与像素样本的位置重叠,那么所述像素样本可与所述基元相关联。然后在标识的像素样本与像素样本图800之间进行比较。如果像素样本图800指示被标识为与‘在前’基元相关联的像素样本中的任一个未在像素样本图中标记,那么前深度测试逻辑406更新像素样本图以指示HSR逻辑将针对那些像素样本具有‘最佳’深度值。例如,如果如图9所示接收与像素样本(0,0)、(0,1)和(1,0)相关联的‘在前’基元902,并且像素样本(0,0)、(0,1)和(1,0)当前未在像素样本图800中标记,那么更新像素样本图800图以指示HSR逻辑将针对像素样本(0,0)、(0,1)和(1,0)具有‘最佳’深度值以生成更新的像素样本图904。
可以任何合适的方式确定基元相关联的平铺块像素样本。例如,在前深度测试逻辑406被配置成在基元已经光栅化之后(即,在基元已经转换成基元片段之后)接收所述基元的情况下,基元相关的像素样本可以基于所述基元的基元片段。例如,对基元进行光栅化将基元转换成一个或多个基元片段,所述基元片段中的每一个对应于特定像素样本。在这些状况下,前深度测试逻辑406可被配置成确定如果存在对应于特定像素样本的基元的基元片段,那么所述基元与所述像素样本相关联。
前深度测试逻辑406可接着进一步被配置成响应于确定基元是‘非在前’基元,标识平铺块中与‘非在前’基元相关联的像素样本。然后在标识的像素样本与像素样本图之间进行比较。如果像素样本图指示HSR逻辑针对与‘非在前’基元相关联的所有像素样本具有‘最佳’深度值(到目前为止),那么前深度测试逻辑406将基元标识为‘无深度缓冲区读取’基元。例如,如果如图10所示接收与像素样本(0,0)、(0,1)、(0,2)、(1,0)、(1,1)和(2,0)相关联的‘非在前’基元1002,并且像素样本图1004指示HSR逻辑将针对所有那些像素样本具有‘最佳’深度值,那么不需要读取所述平铺块的深度缓冲区。然而,如果如图11所示接收与像素样本(0,0)、(0,1)、(0,2)、(0,3)、(1,0)、(1,1)、(1,3)、(2,0)、(2,1)和(3,0)相关联的‘非在前’基元1102,但像素样本图1104未指示HSR逻辑将针对像素样本(0,3)、(1,2)、(2,1)和(3,0)具有‘最佳’深度值,那么可能需要读取深度缓冲区。
在一些状况下,前深度测试逻辑406可进一步被配置成在标识需要深度缓冲区读取的基元(例如‘非在前’基元,其中像素样本图指示HSR逻辑未针对与‘非在前’基元相关联的像素样本中的至少一个具有‘最佳’深度值)后,更新记录(例如像素样本图)以指示HSR逻辑针对所有像素样本具有‘最佳’深度值,使得所有后续基元将被标识为‘无深度缓冲区’读取基元。这是因为需要深度缓冲区读取的基元将触发平铺块的深度缓冲区的读取,这意味着在处理所述基元之后,HSR逻辑将针对所有像素样本具有‘最佳’深度值。因此,即使后续基元需要深度缓冲区中的信息以对所述基元执行全分辨率深度测试,所述深度缓冲区信息也已经可用。
在一些状况下,一旦前深度测试逻辑406已经标识平铺块的基元集合中需要深度缓冲区读取的基元,前深度测试逻辑406就可能无法对集合中的后续基元执行粗略前深度测试。这是因为一旦集合中的一个基元已经被标识为需要深度缓冲区读取,所述基元就会触发深度缓冲区读取,因此基元集合无法避免深度缓冲区读取,无论后续基元是否需要深度缓冲区读取。因此,可以通过不执行不必要的粗略前深度测试来节省时间和资源。
在前深度测试逻辑406被配置成保持平铺块中的像素样本的记录(例如像素样本图)(HSR逻辑将针对所述像素样本具有‘最佳’深度值(到目前为止))并且在每个‘在前’基元之后和在需要深度缓冲区读取的基元之后更新记录(例如像素样本图)的情况下,前深度测试逻辑406可另外或替代地使用所述记录(例如像素样本图)来确定是否可针对‘在前’基元跳过全分辨率深度测试。
具体地说,在一些状况下,响应于将基元标识为‘在前’基元,前深度测试逻辑406可被配置成标识与‘在前’基元相关联的像素样本。然后在标识的像素样本与像素样本图之间进行比较。如果像素样本图指示HSR逻辑将不针对与基元相关联的像素样本中的任一个具有‘最佳’深度值(到目前为止)(即,这是与这些像素样本相关的第一‘在前’基元,并且‘在前’基元在集合中并不在需要深度缓冲区读取的基元之后),那么不需要执行全分辨率深度测试,这是因为此基元的深度值将为到目前为止的‘最佳’值,并且因此平铺块中的所述基元的深度值可仅记录为对应像素样本到目前为止的‘最佳’深度值。
然而,如果像素样本图指示HSR逻辑将针对与‘在前’基元相关联的像素样本中的至少一个具有‘最佳’深度值(到目前为止)(即,像素样本与集合中较早的‘在前’基元相关,或基元在集合中在需要深度缓冲区读取的基元之后),那么可能需要对这些像素样本执行全分辨率深度测试。在这些状况下,如果前深度测试逻辑406确定‘在前’基元不需要全分辨率深度测试,那么可利用不需要全分辨率深度测试的指示输出‘在前’基元。指示可采用任何合适的形式。例如,在一些状况下,指示可以是可以在需要全分辨率深度测试时设置并且在不需要时可以不设置的标志。
标识不需要全分辨率深度测试的基元可节省从深度缓冲区读取深度值和执行不必要的全分辨率深度测试的时间和资源。
当在光栅化之后(即,在基元已经转换成基元片段之后)执行粗略前深度测试时,可在每基元片段基础上而不是在每基元基础上进行深度缓冲区读取和/或全分辨率深度测试确定。例如,在一些状况下,前深度测试逻辑406可被配置成确定基元片段集合(例如对应于在部分显示列表中标识的基元的基元片段的集合)中与平铺块相关的每个基元片段是否具有比先前针对平铺块处理的基元更好的深度值,而不是前深度测试逻辑406被配置成确定基元集合中与平铺块相关的每个基元是否具有比先前针对平铺块处理的基元更好的深度。
在这些状况下,前深度测试逻辑406可被配置成通过将基元片段的深度与平铺块的深度范围进行比较来确定基元片段是否具有比先前针对所述平铺块处理的基元‘更好’的深度。例如,当粗略深度测试逻辑320在DCM_LESS模式下操作时,如果基元片段的深度(例如Z值或Z坐标)小于平铺块的最小深度,那么可以确定所述基元片段具有比先前针对所述平铺块处理的基元‘更好’的深度值。如果前深度测试逻辑406确定基元片段具有比先前针对所述平铺块处理的基元‘更好’(例如更小)的深度,那么(出于上述原因)前深度测试逻辑406可将所述基元片段标识为可以在不读取所述平铺块的深度缓冲区的情况下对此基元片段执行全分辨率深度测试(例如由HSR逻辑执行)的基元片段。此类基元片段在本文中可以被称为‘在前’基元片段。不具有比先前针对平铺块处理的基元‘更好’的深度的基元片段在本文中可以被称为‘非在前’基元片段。
在这些状况下,前深度测试逻辑406可被配置成保持平铺块中的像素样本的记录(例如像素样本图),HSR逻辑将针对所述像素样本具有‘最佳’深度值(到目前为止)。前深度测试逻辑406可被配置成在标识‘在前’基元片段之后更新记录,以指示HSR逻辑将针对与‘在前’基元片段相关联的像素样本具有‘最佳’深度值。前深度测试逻辑406还可以被配置成在标识‘深度缓冲区读取’基元片段之后更新记录,以指示HSR逻辑将针对平铺块中的每个像素样本具有‘最佳’深度值。前深度测试逻辑406可接着被配置成响应于标识‘非在前’基元片段而确定‘非在前’基元片段是否可基于记录避免深度缓冲区读取。例如,前深度测试逻辑406可被配置成如果记录(例如像素样本图)指示HSR逻辑将针对与所述基元片段相关联的像素样本具有‘最佳’深度值,那么确定‘非在前’基元片段不需要‘深度缓冲区’读取。如果前深度测试逻辑406根据记录确定‘非在前’基元片段不需要深度缓冲区读取,那么所述‘非在前’基元片段可被标识为‘无深度缓冲区读取’基元片段。然而,如果记录未指示HSR逻辑将针对‘非在前’基元片段具有最佳深度值,那么前深度测试逻辑406可被配置成将‘非在前’基元片段标识为‘深度缓冲区读取’基元片段。
在前深度测试逻辑406被配置成保持平铺块中的像素样本的记录(例如像素样本图)(其中HSR逻辑将针对所述像素样本具有‘最佳’深度值(到目前为止))的情况下,记录可用以确定是否需要对‘在前’基元片段执行全分辨率深度测试。例如,在一些状况下,如果记录指示HSR逻辑不针对与‘在前’基元片段相关联的像素样本具有‘最佳’深度值,那么‘在前’基元片段可被标识为‘无深度缓冲区测试’基元片段。
深度范围更新逻辑408被配置成在处理与平铺块相关的基元/基元片段时更新平铺块的深度范围。在一些状况下,深度范围更新逻辑408可被配置成在与平铺块相关的基元/基元片段的集合已经完全由粗略深度测试逻辑320处理之后更新平铺块的深度范围。例如,在一些状况下,深度范围更新逻辑408可被配置成跟踪当前正在处理的平铺块的当前‘最佳’深度值,并且当粗略深度测试逻辑320已经完成处理与所述平铺块相关联的基元/基元片段的集合(即,已经对集合中的每个基元/基元片段执行粗略隐藏深度测试和粗略前深度测试)时,深度范围更新逻辑408可被配置成用当前‘最佳’深度值更新存储器402。
例如,在一些状况下,当前深度测试逻辑406标识来自基元集合的‘在前’基元或‘在前’基元片段时,前深度测试逻辑406可向深度范围更新逻辑408提供‘在前’基元或‘在前’基元片段的‘最佳’深度值(例如,在使用DCM_LESS深度测试模式的情况下,‘最佳’深度值是最低深度值或最小深度值)。深度范围更新逻辑408可接着确定是否已经从前深度测试逻辑406接收平铺块的‘最佳’深度值。如果深度范围更新逻辑408尚未从前深度测试逻辑406接收此平铺块的‘最佳’深度值,那么深度范围更新逻辑408可记录或存储所接收的深度值作为平铺块的当前‘最佳’深度值。如果深度范围更新逻辑408已经从前深度测试逻辑406接收平铺块的‘最佳’深度值,那么所述深度范围更新逻辑可将所接收的‘最佳’深度值与平铺块的所存储的当前‘最佳’深度值进行比较以确定哪一个更好。如果所接收的‘最佳’深度值比所存储的当前‘最佳’深度值更好,那么用所接收的值更新所存储的当前‘最佳’深度值。例如,在使用DCM_LESS深度测试模式的情况下,深度范围更新逻辑408可确定所接收的深度值是否小于当前‘最佳’深度值,并且如果是,那么用所接收的深度值更新当前‘最佳’深度值。
当粗略深度测试逻辑已经处理集合中的所有基元/基元片段时,深度范围更新逻辑408可将平铺块的当前‘最佳’深度值写入到存储器402。
在一些状况下,HSR逻辑可被配置成在其完成处理平铺块的部分显示列表(例如与在部分显示列表中标识的基元相关联的基元片段)后,确定HSR逻辑是否针对所述平铺块中的所有像素样本具有‘最佳’深度值(例如当前最佳深度值缓冲区针对平铺块中的每个像素样本具有深度值)。在以下情况下,HSR逻辑可包括平铺块中所有像素样本的‘最佳’深度值:(a)如果处理部分显示列表已经引起对平铺块中像素样本中的每一个的深度值更新;或(b)如果已经对所述平铺块执行深度缓冲区读取。如果未对所述平铺块执行深度缓冲区读取并且平铺块中并非所有深度值都是通过处理部分显示列表来更新,那么HSR逻辑可不包括平铺块中所有像素样本的‘最佳’深度值。如果HSR逻辑确定其包括平铺块中所有像素样本的‘最佳’深度值,那么HSR逻辑可标识平铺块的‘最差’(例如最大)深度值,并将使粗略深度测试逻辑320更新所述平铺块的深度范围的消息或命令发送到粗略深度测试逻辑320,以反映所述平铺块的‘最差’(例如最大)深度值。
在一些状况下,如图4所示,粗略深度测试逻辑320可接收标识落入平铺块界限内的基元的集合的信息(例如部分显示列表)。在这些状况下,粗略深度测试逻辑320还可包括提取逻辑412,所述提取逻辑被配置成接收部分显示列表,并针对每个部分显示列表从存储器提取在所述部分显示列表中标识的基元的对应的经过变换的几何结构数据(例如经过变换的几何结构数据缓冲区),并且将相关的经过变换的几何结构数据提供到隐藏深度测试逻辑404。然而,在其它状况下,粗略深度测试逻辑320可直接接收与平铺块相关的基元/基元片段集合的经过变换的几何结构数据。
应注意,在一些状况下,可存在HSR逻辑不会对其执行隐藏表面移除的一些基元。此类基元的示例包含例如基元可见度与着色器相关的穿通(punch through)基元和具有着色器相关深度值的深度反馈基元等基元。在这些状况下,粗略深度测试逻辑320可被配置成使任何此类基元简单地通过。换句话说,如果粗略深度测试逻辑320确定所接收的基元是不会由HSR逻辑执行隐藏表面移除的基元,那么粗略深度测试逻辑320可不对所述基元执行粗略隐藏深度测试或粗略前深度测试。
现在参考图12,其示出了在执行全分辨率深度测试之前在图形处理***中对基元执行粗略深度测试的示例方法1200,所述方法可由图4的粗略深度测试逻辑320实施。方法1200在框1202处开始,在所述框中,粗略深度测试逻辑320接收与平铺块相关的基元集合。接收基元可包括接收限定所述基元的数据(例如经过变换的几何结构数据或基元片段数据)。如果基元至少部分地落入或处于平铺块的界限内,那么所述基元称为与所述平铺块相关。基元集合可以例如是部分显示列表中的基元集合。一旦已经接收到基元集合,方法1200就前进到框1204。
在框1204处,获得平铺块的深度范围。如上文所描述,深度范围表示与平铺块相关联的基于先前针对平铺块处理的基元的深度范围(例如在平铺块的先前部分显示列表中的基元)。具体地说,平铺块的深度缓冲区用于记录平铺块中每个像素样本的‘最佳’(例如最低)深度值,其中像素样本的当前‘最佳’(例如最低)深度值是所述像素样本处的当前取消隐藏或可见的基元片段的深度值。深度范围可由最大深度值和最小深度值限定,其中平铺块的最小深度值是平铺块的最小‘最佳’深度值(到目前为止),并且平铺块的最大深度值是最大‘最佳’深度值(到目前为止)。换句话说,平铺块的最小深度值是平铺块中基于先前针对平铺块处理的基元的取消隐藏基元片段的最小深度值,并且平铺块的最大深度值是平铺块中基于先前针对平铺块处理的基元的取消隐藏基元片段的最大深度值。在一些状况下,每个平铺块的深度范围可存储在存储器(例如存储器402)中,并且获得平铺块的深度范围可包括从存储器读取相关平铺块的深度范围。一旦获得平铺块的深度范围,方法1200就前进到框1206。
在框1206处,选择集合中的基元中的一个作为当前基元。在一些状况下,可以按特定次序接收集合中的基元,并且可以按接收基元的次序处理所述基元。一旦已经选择集合中的基元中的一个作为当前基元,方法1200就前进到框1208。
在框1208处,基于平铺块的深度范围,确定当前基元是否在平铺块中与当前基元重叠的所有位置处被先前针对平铺块处理的基元隐藏。如上文所描述,可以通过将平铺块的深度范围与平铺块中的基元的最大深度或最小深度进行比较来进行确定。例如,在使用DCM_LESS深度比较模式的情况下,如果平铺块中的基元的最小深度大于平铺块的最大深度,那么基元可确定为被先前针对平铺块处理的基元隐藏在平铺块中。可使用任何合适的方法来确定平铺块中的基元的最大深度和/或最小深度。下文描述用于在光栅化之前进行确定时确定平铺块中的基元的最大深度和/或最小深度的示例方法。如果确定基元被隐藏,那么方法1200前进到框1210,在所述框中,不相对于当前平铺块对当前基元执行进一步处理(例如不相对于当前平铺块对基元执行全分辨率深度测试)。然而,如果在框1208中未确定基元被隐藏,那么方法1200前进到框1212。
在框1212处,基于平铺块的深度范围确定当前基元是否在平铺块中与当前基元重叠的所有位置处具有比先前针对平铺块处理的基元‘更好’的深度。如上文所描述,可以通过将平铺块的深度范围与平铺块中的基元的最大深度或最小深度进行比较来进行确定。例如,在使用DCM_LESS深度比较模式的情况下,如果平铺块中的基元的最大深度小于平铺块的最小深度,那么基元可确定为具有比先前针对平铺块处理的基元‘更好’的深度。可使用任何合适的方式来确定平铺块中的基元的最大深度和/或最小深度。例如,当在光栅化之后进行‘在前’确定时,平铺块中的基元的最大深度或最小深度可以分别是所述基元的落入平铺块内的基元片段的最大深度或最小深度。如果未确定基元具有比先前针对平铺块处理的基元‘更好’的深度,那么方法1200前进到框1214,在所述框中,输出基元以供进一步处理。例如,如上文所描述,可将基元提供到HSR逻辑以供处理。然而,如果在框1212处确定基元在平铺块的与当前基元重叠的所有位置处具有比先前针对平铺块处理的基元‘更好’的深度,那么方法1200前进到框1216。
在框1216处,将基元标识为‘无深度缓冲区读取’基元。具体地说,如上文所描述,如果基元根据深度比较模式(例如DCM_LESS)具有比先前针对平铺块处理的基元更好(例如更小)的深度,那么基元相关联的像素样本的最佳深度将为所述基元或集合中较早的‘在前’基元的深度值,因此,可在不读取平铺块的深度缓冲区的情况下确定那些像素样本的‘最佳’深度值。方法1200接着前进到框1214,在所述框中,输出基元以供进一步处理(利用标识)。
在框1214之后,方法1200前进到框1218,在所述框中,确定集合中是否留有尚未处理的至少一个基元。如果当前平铺块的基元集合中留有尚未处理的至少一个基元,那么方法1200回到框1206,在所述框中,选择集合中的下一基元并针对所述基元重复框1208到1216。然而,如果已经处理集合中的所有基元,那么方法1200前进到框1220。
在框1220处,更新所述平铺块的深度范围以反映平铺块范围由于集合中的基元而引起的任何变化。例如,在一些状况下,如果任何基元被确定为在先前针对所述平铺块处理的基元‘前面’,那么将存在所述平铺块的‘更好’(例如更低)的深度值,并利用这些深度值中‘最佳’(例如最低)的深度值更新平铺块的深度范围。
如上文所描述,在一些状况下,HSR逻辑可被配置成一旦其已经处理平铺块的部分显示列表(例如与在部分显示列表中标识的基元相关联的基元片段),就确定HSR逻辑是否针对所述平铺块中的所有像素样本具有‘最佳’深度值(例如当前最佳深度值缓冲区针对平铺块中的每个像素样本具有深度值)。在以下情况下,HSR逻辑可包括平铺块中所有像素样本的‘最佳’深度值:(a)如果处理部分显示列表已经引起对平铺块中像素样本中的每一个的深度值更新;或(b)如果已经对所述平铺块执行深度缓冲区读取。如果未对所述平铺块执行深度缓冲区读取并且平铺块中并非所有深度值都是通过处理部分显示列表来更新,那么HSR逻辑可不包括平铺块中所有像素样本的‘最佳’深度值。如果HSR逻辑确定其包括平铺块中所有像素样本的‘最佳’深度值,那么HSR逻辑可标识平铺块的‘最差’(例如最大)深度值,并将使粗略深度测试逻辑320更新所述平铺块的深度范围的消息或命令发送到粗略深度测试逻辑320,以反映所述平铺块的‘最差’(例如最大)深度值。
方法1200随后结束。
尽管方法1200已描述为在对单独的基元执行粗略隐藏深度测试和粗略前深度测试之前接收平铺块的基元集合中的所有基元,但本领域的技术人员将显而易见的是,这仅仅是示例,并且在其它示例中,基元可依序到达,并且一旦接收到基元,就可以对所述基元执行粗略隐藏深度测试,并且视需要可以对所述基元执行粗略前深度测试。换句话说,可以在已经接收到集合中的所有基元之前对集合中的基元执行粗略隐藏深度测试和/或粗略前深度测试。
如上文所描述,在一些状况下,维持平铺块中的像素样本的记录(例如像素样本图),HSR逻辑将针对所述像素样本具有‘最佳’深度值,并且如果基元未被确定为具有比先前针对平铺块处理的基元‘更好’的深度(即,基元是‘非在前’基元),那么对‘非在前’基元执行基于记录的另一测试以确定‘非在前’基元是否可避免深度缓冲区读取。在一些状况下,可在标识‘在前’基元之后更新记录,以指示在处理所述‘在前’基元之后,HSR逻辑将针对平铺块中与‘在前’基元相关联的像素样本具有‘最佳’深度值。在一些状况下,还可以在标识需要深度缓冲区读取的基元之后更新记录,以指示在处理所述深度缓冲区读取基元之后,HSR逻辑将针对平铺块中的所有像素样本具有‘最佳’深度值。
现在参考图13,其示出了可以添加到图12的方法1200以实施此方法的任选框。具体地说,如图13所示,如果在图12的方法1200的框1212处确定基元不具有比先前针对平铺块处理的基元‘更好’的深度(即,如果确定基元是‘非在前’基元),那么方法1200可前进到框1302,在所述框中,获得平铺块中的像素样本的记录(例如像素样本图),HSR逻辑将针对所述像素样本具有‘最佳’深度值(到目前为止)。一旦已经获得记录,方法1200就前进到框1304,在所述框中,标识与基元相关联的像素样本。如上文所描述,如果基元与像素样本的位置重叠,那么所述像素样本与所述基元相关联。可以任何合适的方式确定平铺块的与基元相关联的像素样本。例如,如果在基元的光栅化之后执行框1304,那么可存在所述基元的一个或多个基元片段,所述基元片段中的每一个对应于特定像素样本。在这些状况下,如果存在对应于特定像素样本的基元片段,那么基元与所述像素样本相关联。
一旦已经标识平铺块的与基元相关联的像素样本,方法1200就前进到框1306,在所述框中,确定记录(例如像素样本图)是否指示HSR逻辑将针对与基元相关联的像素样本中的每一个具有‘最佳’深度值(指示与基元相关联的每个像素样本与集合中较早的‘在前’基元相关,或者(任选地)基元在集合中在深度缓冲区读取基元之后)。如果确定HSR逻辑将针对与基元相关联的所有像素样本具有‘最佳’深度值,那么此基元不需要深度缓冲区读取,并且方法1200前进到框1216,在所述框中,将基元标识为无深度缓冲区读取基元。如上文所描述,这是因为如果与‘非在前’基元相关联的所有像素样本与至少一个‘在前’基元相关,那么当由HSR逻辑处理基元时,那些像素样本的‘最佳’深度值将为‘非在前’基元或之前的‘在前’基元中的一个的深度值,因此不需要深度缓冲区中的值来标识那些像素样本的‘最佳’深度值;或(任选地)如果基元在深度缓冲区读取基元之后,那么当由HSR逻辑处理基元时,HSR逻辑将针对所有像素样本具有‘最佳’深度值。
然而,如果在框1306处确定HSR逻辑将不针对与基元相关联的至少一个像素样本具有‘最佳’深度值,那么基元是‘深度缓冲区读取’基元,并且方法1200前进到框1214,在所述框中,输出基元以供进一步处理。在一些状况下,在确定基元是‘深度缓冲区读取’基元之后,并且在行进到框1214之前,方法1200可前进到框1308,在所述框中,更新记录(例如像素样本图)以指示HSR逻辑将针对平铺块中的所有像素样本具有‘最佳’深度值。这是因为‘深度缓冲区读取’基元将触发深度缓冲区读取,因此在处理深度缓冲区读取基元之后,HSR逻辑将针对平铺块中的所有像素样本具有当前‘最佳’深度值。
如果在图12的方法1200的框1212处确定基元具有比先前针对所述平铺块处理的基元‘更好’的深度,那么方法1200可在行进到框1216之前前进到框1310。在框1310处,更新指示HSR逻辑将针对平铺块的哪些像素样本具有‘最佳’深度值的记录(例如像素样本图),使得所述记录指示HSR逻辑将针对与‘在前’基元相关联的像素样本中的每一个具有‘最佳’深度值。
其中粗略深度测试逻辑320维持平铺块中的像素样本的记录(例如像素样本图),HSR逻辑将针对所述像素样本具有维持的‘最佳’深度值;并且在标识‘在前’基元之后更新记录(例如像素样本图),以指示HSR逻辑将针对平铺块中与所述‘在前’基元相关联的像素样本中的每一个具有‘最佳’深度值,并且在标识深度缓冲区读取基元之后更新记录,以指示HSR逻辑将针对平铺块中的所有像素样本具有‘最佳’深度值;接着可以对基于记录的‘在前’基元执行基于记录的另一测试,以确定所述‘在前’基元是否可避免全分辨率深度测试。
现在参考图14,其示出了可以添加到图12的方法1200以实施此方法的任选框。具体地说,如图14所示,如果在图12的方法1200的框1212处确定基元是‘在前’基元(即,基元具有比先前针对平铺块处理的基元更好(例如更小)的深度),那么方法1200可前进到框1402,在所述框中,获得平铺块中的像素样本的记录(例如像素样本图),HSR逻辑针对所述像素样本具有‘最佳’深度值。一旦已经获得记录,方法1200就前进到框1404,在所述框中,标识与‘在前’基元相关联的像素样本。如上文所描述,如果基元与像素样本的位置重叠,那么所述像素样本与所述基元相关联。可以任何合适的方式确定平铺块的与基元相关联的像素样本。例如,如果在‘在前’基元的光栅化之后执行框1404,那么可存在所述基元的一个或多个基元片段,所述基元片段中的每一个对应于特定像素样本。在这些状况下,如果存在对应于特定像素样本的基元片段,那么基元与所述像素样本相关联。
一旦已经标识平铺块的与‘在前’基元相关联的像素样本,方法1200就前进到框1406,在所述框中,确定记录(例如像素样本图)是否指示HSR逻辑针对与基元相关联的像素样本中的任一个具有‘最佳’深度值(即,与基元相关联的像素样本中的任一个与集合中至少一个较早的‘在前’基元相关,或‘在前’基元在集合中在深度缓冲区读取基元之后)。如果在框1406处确定HSR逻辑将不针对与基元相关联的像素样本中的任一个具有‘最佳’深度值(即,与‘在前’基元相关联的像素样本均与集合中较早的‘在前’基元不相关,并且基元在集合中不在深度缓冲区读取基元之后),那么此‘在前’基元不需要全分辨率深度测试,并且方法1200前进到框1408,在所述框中,将基元标识为‘无深度测试’基元,然后前进到框1410。如上文所描述,这是因为如果与‘在前’基元相关联的像素样本与早先的‘在前’基元均不相关并且基元不在‘深度缓冲区读取’基元之后,那么这些像素样本到目前为止的‘最佳’深度值是来自此基元的深度值,并且此基元的深度值可直接记录为到目前为止的最佳深度值。
如果在框1406处确定HSR逻辑将针对与基元相关联的像素样本中的至少一个具有‘最佳’深度值,那么可能需要全分辨率深度测试,并且方法1200前进到框1410,在所述框中,更新记录(例如像素样本图),使得记录指示HSR逻辑将针对与‘在前’基元相关联的像素样本中的每一个具有‘最佳’深度值。在框1410之后,方法1200前进到框1216,在所述框中,将基元标识为‘无深度缓冲区读取’基元。
如果在图12的方法1200的框1212处确定基元是深度缓冲区读取基元,那么方法1200可前进到框1412,在所述框中,更新记录(例如像素样本图)以指示HSR逻辑将针对平铺块中的所有像素样本具有‘最佳’深度值。接着,方法1200前进到框1214。
在一些状况下,代替在基元基础上执行隐藏深度测试,可以在基元片段基础上执行隐藏深度测试。例如,在一些状况下,可在将基元提供到隐藏深度测试逻辑404之前将所述基元转换(即,光栅化)成基元片段,使得隐藏深度测试逻辑404接收与平铺块相关的基元片段集合。接着,对于集合中的每个基元片段,隐藏深度测试逻辑404可被配置成确定所述基元片段是否被先前针对平铺块处理的基元隐藏在平铺块中。当实施DCM_LESS模式时,如果基元片段的深度值大于由平铺块的深度范围限定的平铺块最大深度值,那么基元片段可确定为被先前针对所述平铺块处理的基元隐藏在平铺块中。如果确定基元片段隐藏在平铺块中,那么可以不相对于所述平铺块执行所述基元片段的进一步处理。然而,如果确定基元片段未隐藏在平铺块中,那么可以将所述基元片段输出到前深度测试逻辑406。
在一些状况下,代替在基元基础上执行无深度缓冲区读取和/或无全分辨率深度测试确定,可在基元片段基础上进行无深度缓冲区读取和/或无全分辨率深度测试确定。例如,在基元已经通过粗略隐藏深度测试之后,可将所述基元转换(即,光栅化)成被提供到前深度测试逻辑406的一个或多个基元片段,或可在粗略隐藏深度测试之前将集合中的基元转换(即,光栅化)成基元片段,并且可将通过粗略隐藏深度测试的任何基元片段提供到前深度测试逻辑406。接着,对于所接收的每个基元片段,粗略前深度测试逻辑可确定所述基元片段是否具有比先前针对平铺块处理的基元更好的深度值。当实施DCM_LESS模式时,如果基元片段的深度值小于由平铺块的深度范围限定的平铺块最小深度值,那么基元片段可确定为具有比先前针对所述平铺块处理的基元‘更好’的深度值。如果确定基元片段具有比先前针对平铺块处理的基元‘更好’的深度值,那么基元片段可被标识为‘无深度缓冲区读取’基元片段。在一些状况下,维持HSR逻辑将针对平铺块的像素样本具有‘最佳’深度值的记录(例如上文所描述的像素样本图)。在这些状况下,如果基元片段未被确定为具有比先前针对平铺块处理的基元‘更好’的深度值(即,‘非在前’基元片段),那么可确定所述基元片段是否为基于记录的‘无深度缓冲区读取’基元片段。例如,如果记录指示HSR逻辑将针对与基元片段相关联的像素样本具有‘最佳’深度值,那么“非在前”基元片段可被标识为‘无深度缓冲区读取’基元片段。在一些状况下,如果确定基元片段具有比先前针对平铺块处理的基元更好的深度(即,“在前”基元片段),那么可确定“在前”基元片段是否为基于记录的‘无深度测试’基元片段。例如,在一些状况下,如果记录指示HSR逻辑不针对与“在前”基元片段相关联的像素样本具有‘最佳’深度值,那么基元片段可被标识为‘无深度测试’基元片段。
用于确定平铺块中的基元的最大深度值和/或最小深度值的示例方法
现在将描述用于在基元的光栅化之前确定平铺块中的基元的最大深度值和/或最小深度值的示例方法。这些方法中的任一种可以由图4的粗略深度测试逻辑320的隐藏深度测试逻辑404和/或前深度测试逻辑406使用。在这些示例中,假定基元是平面的。
在可在基元1502如图15所示完全在平铺块1504内时使用的第一示例方法中,可将平铺块1504中的基元1502的最大深度或最小深度估计为基元1502的顶点15061、15062和15063的最大深度或最小深度。通过围绕基元限定限界框(例如轴线对准限界框)并确定限界框是否完全处于平铺块的界限内,可以确定基元1502是否完全在平铺块1504内。如本领域的技术人员已知,限界框是一组点的最低或最小限界或围封轴线对准框,所有点处于所述框内。因此,基元的限界框可被限定为涵盖所有顶点的最小轴线对准矩形(其中“矩形”包含“正方形”)。
在可在基元1602如图16所示不完全在平铺块1604内时使用的第二示例方法中,可将平铺块1604中的基元1602的最大深度或最小深度估计为适用于基元1602的以下各项的最大深度或最小深度:
·基元的边缘与平铺块1604的边缘的相交点16061、16062;
·平铺块1604在基元1602内的拐角1608的位置处的基元1602;以及
·基元1602在平铺块1604内的顶点1610。
在第三示例方法中,可将平铺块中的基元的最大深度或最小深度估计为:
·如果基元完全覆盖平铺块,那么将平铺块中的基元的最大深度或最小深度估计为基元在平铺块拐角位置处的最大深度或最小深度;以及
·如果基元未完全覆盖平铺块,那么基元的平面延伸到平铺块的拐角,并且平铺块中的基元的最大深度或最小深度被估计为平铺块拐角在延伸平面内的位置处的最大深度或最小深度。
具体地说,如图17所示,每个基元1702处于平面1703上,所述平面可被限定为基元1702的边缘所在的平面17061、17062、17063的内部。例如,如图17所示,三角基元1702可被限定为三角形边缘所在的三个平面17061、17062、17063的内部。三角基元所在的平面1703上的任一点(x,y)处的深度等于Ax+By+C,其中x是x坐标,y是y坐标,并且A、B和C是系数。众所周知,系数A、B和C可根据三角基元的顶点17081、17082、17083的坐标(x,y,z)来确定。因此,平面1703在平铺块1704的拐角位置17101、17102、17103、17104处的深度可根据Ax+By+C来确定。
在一些状况下,光栅化器(例如光栅化器312)可被配置成通过根据基元的顶点计算A、B和C然后计算Ax+By+C来确定基元片段的深度。在这些状况下,由于硬件已经能够确定基元的A、B和C,因此以此方式确定平铺块中的基元的最大深度或最小深度可以是高效的。
应注意,一般来说,平铺块的像素样本点不会位于平铺块边界(并且具体地说,不会位于平铺块拐角上),一般也不与基元的顶点完全对准。因此,基于以下各项估计平铺块中的基元的最大深度或最小深度:基元在平铺块的拐角处的深度(或基元所在的延伸平面的深度)、基元在基元边缘与平铺块边缘的相交点处的深度,和/或基元的顶点,这可能使得平铺块中的基元的估计最大深度高于针对平铺块中的基元生成的基元片段中的任一个的实际最大深度,或者平铺块中的基元的估计最小深度小于针对平铺块中的基元生成的基元片段中的任一个的实际最小深度。因此,这些估计值是保守估计值,这意谓基元即使本可以被剔除也可能无法由粗略深度测试逻辑剔除,但如果基元不应被剔除,那么所述基元不会由粗略深度测试逻辑剔除。由于光栅化逻辑在未剔除本应剔除的基元的情况下仍然可以生成正确光栅输出,但在已剔除本不应剔除的基元的情况下可能无法生成正确光栅输出,因此光栅化逻辑仍能够利用由粗略深度测试逻辑实施的保守估计值生成正确光栅输出。
本领域的技术人员将显而易见的是,这些仅仅是示例方法,并且可以任何合适的方式确定/估计平铺块中的基元的最大深度和最小深度。
测试结果
现在参考图18,其示出了当在执行全分辨率深度测试之前根据图12的方法1200执行粗略深度测试时,数个图形处理***基准测试的深度缓冲区提取带宽降低。可以看出,对于所有基准,深度缓冲区提取带宽降低,并且对于一些基准,深度缓冲区提取带宽降低几乎90%。
慢速和快速光栅化队列
如上文所描述,仅当HSR逻辑已经具有信息以标识与基元/基元片段相关联的像素样本的‘最佳’深度时才从存储器读取平铺块的深度缓冲区可以显著减少所执行的深度缓冲区读取的次数。然而,由于深度缓冲区未被自动预取,所以这可能会引起光栅化阶段中的等待时间问题。具体地说,如果HSR逻辑接收的基元片段需要深度缓冲区读取并且深度缓冲区不在深度缓冲区缓存1902中,那么执行深度缓冲区存储器1904的读取。可能存在与深度缓冲区存储器1904的读取相关联的显著等待时间。因此,为了确保在等待执行深度缓冲区存储器读取的同时不停止HSR逻辑,队列1906(如图19所示)可***粗略深度测试逻辑320与HSR逻辑314之间,以存储已通过粗略深度测试逻辑输出的一定数量的基元片段。这允许HSR逻辑314保持处理基元片段,同时对队列1906中的一个基元片段(或基元片段集合)执行深度缓冲区存储器读取。然而,测试指示为了掩蔽与深度缓冲区存储器读取相关联的等待时间,队列1906必须相当大(例如,测试指示在一些状况下,队列1906可能需要能够存储一百个基元片段的数据以掩蔽与深度缓冲区存储器读取相关联的等待时间)。
因此,需要在没有这种大队列1906的情况下掩蔽与深度缓冲区存储器读取相关联的等待时间。本发明人已经确认,队列1906可以更高效地实施为两个队列,其中仅被标识为不需要深度缓冲区读取的基元片段放置在优先级队列中,并且被标识为需要深度缓冲区读取的任何基元片段放置在非优先级队列中。HSR逻辑314可被配置成使优先级队列中的基元片段优先于非优先级队列中的基元片段。在一些状况下,如下文更详细地描述,HSR逻辑314可被配置成在优先级队列为空的情况下,仅处理非优先级队列中的基元片段,除非满足一个或多个异常条件。使优先级队列中的基元片段优先允许与单个队列更高效地掩蔽与深度缓冲区存储器读取相关联的等待时间。
尽管图20到图22的***和方法描述为在混合渲染图形处理***中使用,但其用途不限于混合渲染图形处理***,并且在其它示例中,所述***及方法可以在其它图形处理***中使用或实施。
现在参考图20,其示出了在混合渲染图形处理***的光栅化阶段中处理基元片段的示例***2000。***2000包括:逻辑2002,其用于接收待渲染的基元片段并针对所接收的基元片段中的至少一些确定是否需要深度缓冲区读取以执行全分辨率隐藏表面移除;优先级队列2004;非优先级队列2006;以及HSR逻辑2008,其用以对队列2004和2006中的基元片段执行全分辨率隐藏表面移除。
逻辑2002被配置成:接收待渲染的基元片段,每个基元片段与平铺块相关联;针对所接收的基元片段中的至少一些确定是否需要深度缓冲区读取以对相关联平铺块的所述基元片段执行全分辨率隐藏表面移除;以及基于深度缓冲区读取确定将基元片段分类到队列中。逻辑2002可以任何合适的方式确定基元片段是否需要深度缓冲区读取。例如,逻辑2002可被配置成根据上文关于粗略深度测试逻辑320所描述的方法中的任一种确定基元/基元片段是否需要深度缓冲区读取。例如,逻辑2002可被配置成:在每基元基础或每基元片段基础上执行粗略隐藏深度测试;和/或在每基元或每基元片段基础上执行粗略前深度测试以确定是否需要深度缓冲区读取。在一些示例中,例如图20所示,逻辑2002可实施为上文所描述的粗略深度测试逻辑(例如粗略深度测试逻辑320),所述粗略深度测试逻辑可进一步包含用于基于深度缓冲区读取确定将基元分类到队列2004、2006中的分类逻辑(未示出)。
在一些状况下,逻辑2002可被配置成仅将不需要深度缓冲区读取的基元片段放置在优先级队列2004中并且将需要深度缓冲区读取的基元片段放置在非优先级队列2006中。在一些状况下,逻辑2002还可以被配置成在集合中的之前的基元片段已经被标识为需要深度缓冲区读取的情况下,将平铺块的基元片段(例如对应于部分显示列表中的基元的基元片段)的集合中的任何基元片段放置在非优先级队列2006中。换句话说,在一些状况下,一旦与平铺块相关的基元片段(例如对应于部分显示列表中的基元的基元片段)的集合中的一个基元片段已经放置在非优先级队列2006中,集合中的所有随后或后续基元片段就可放置在非优先级队列中。这可以是有利的,因为一般来说,与平铺块相关的基元片段将以接收所述基元片段的次序进行处理,并且因此,一旦与平铺块相关的基元片段集合中的基元片段需要深度缓冲区读取,那么所有后续的基元片段也必须等待深度缓冲区读取完成。下文参考图21描述用于将基元片段分类到队列中的示例方法,所述方法可由逻辑2002实施。
在一些状况下,逻辑2002可被配置成通过将定义基元片段的信息或数据(例如其坐标(X、Y和Z))添加到队列2004、2006而将基元片段放置在队列2004、2006中。在其它状况下,逻辑2002可被配置成通过将信息放置或添加到标识基元片段的队列(例如基元片段标识符)而将基元片段放置/存储在队列中。定义基元的信息或数据(例如其坐标(X、Y和Z))可存储在存储器(例如缓冲区)中。在这些状况下,HSR逻辑可被配置成一旦其已经从队列中选择基元片段,就使用标识基元片段的信息(例如基元片段标识符)从存储器检索定义基元的信息或数据(例如其坐标(X、Y和Z))。在一些状况下,基元片段标识符和/或定义与相同基元相关的基元片段的信息或数据可一起存储在队列中。
在一些状况下,逻辑2002可被配置成响应于将与平铺块相关的基元片段集合中的第一基元片段放置在非优先级队列中而开始从存储器2010读取所述平铺块的深度缓冲区。在一些状况下,这可能需要将对所述平铺块的深度缓冲区的请求发送到深度缓冲区缓存2012,并且如果深度缓冲区缓存2012不包括请求的深度缓冲区,那么从存储器2010读取所述深度缓冲区。
HSR逻辑2008被配置成对队列2004和2006中的基元片段执行全分辨率隐藏表面移除,其中优先级赋予了优先级队列中的基元片段。向优先级队列中的基元赋予优先级意味着大体上在处理非优先级队列2006中的基元片段之前处理优先级队列2004中的基元片段。具体地说,在一些状况下,HSR逻辑2008可被配置成在优先级队列2004中不存在基元片段的情况下,仅处理非优先级队列2006中的基元片段,除非满足一个或多个异常条件。可以允许HSR逻辑2008在优先级队列2004不为空时处理非优先级队列2006中的基元片段的一个或多个异常条件可以包含以下中的一个或多个:非优先级队列2006中的第一/顶部基元片段与深度缓冲区处于深度缓冲区缓存2012中的平铺块相关;深度缓冲区缓存2012已满(或几乎已满);以及非优先级队列2006中的基元片段的数量超过阈值(例如非优先级队列2006变得过满)。下文参考图22描述用于从队列2004、2006中选择基元片段的示例方法,所述方法可由HSR逻辑2008实施。
现在参考图21,其示出了将基元片段分类到优先级队列2004和非优先级队列2006中的示例方法2100。方法2100在框2102处开始,在所述框中,逻辑2002(例如粗略深度测试逻辑320)接收基元片段。基元片段可以是与特定平铺块相关联的基元片段集合的一部分(例如,基元片段可以是对应于部分显示列表中的基元或由所述基元生成的一个或多个基元片段中的一个)。如上文所描述,当接收标识和/或定义基元片段的数据时,可在逻辑2002处接收所述基元片段。在一些状况下,可以从几何处理逻辑接收标识和/或定义基元片段的数据。一旦已经接收到基元片段,方法2100就可以前进到框2104。
在框2104处,在逻辑2002处确定与平铺块相关的基元片段(例如对应于在平铺块的部分显示列表中标识的基元的基元片段)的同一集合中任何之前的基元片段是否已经放置在非优先级队列中。换句话说,确定同一集合中任何之前的基元片段是否被标识为需要深度缓冲区读取。如果在框2104处确定与平铺块相关的基元片段的同一集合中的至少一个基元片段已经放置在非优先级队列中,那么方法2100前进到框2106,在所述框中,将基元片段放置在非优先级队列2006中。然而,如果在框2104处确定基元片段的同一集合中之前的基元片段均未放置在非优先级队列中,那么方法2100前进到框2108。
在框2108处,在逻辑2002处确定基元片段是否需要深度缓冲区读取以用于全分辨率隐藏表面移除。可使用任何合适的准则以任何合适的方式来确定基元片段是否需要深度缓冲区读取。例如,逻辑2002可被配置成使用上文关于粗略深度测试逻辑320所描述的方法中的任一种来确定是否需要深度缓冲区读取。例如,逻辑2002可被配置成通过在基元基础上或在基元片段基础上执行粗略前深度测试来确定是否需要深度缓冲区读取。
如果在框2108处确定基元片段不需要深度缓冲区读取,那么方法2100前进到框2110,在所述框中,将基元片段放置在优先级队列2004中。然而,如果在框2108处确定基元片段需要深度缓冲区读取,那么方法2100前进到框2112和2114,在这两个框中,将基元片段放置在非优先级队列2006中并开始读取相关平铺块的深度缓冲区。如上文所描述,可通过例如将对相关平铺块的深度缓冲区的请求发送到深度缓冲区缓存来开始读取相关平铺块的深度缓冲区。这可以使深度缓冲区缓存确定其是否包括相关平铺块的深度缓冲区。如果缓存确定其不包括相关平铺块的深度缓冲区,那么可以执行深度缓冲区存储器的读取以检索相关平铺块的深度缓冲区。
现在参考图22,其示出了用于处理队列2004、2006中的基元片段的示例方法2200,所述方法可由HSR逻辑2008实施。在此示例中,HSR逻辑2008被配置成以与同一平铺块相关的基元片段在队列中的次序处理所述基元片段,然而,HSR逻辑2008可以无次序地处理平铺块。例如,HSR逻辑2008能够在已经相对于平铺块Y处理所有基元片段之前处理平铺块X的基元片段,即使平铺块X的基元片段在队列中在平铺块Y的基元片段之后也是如此。然而,HSR逻辑2008可被配置成按次序处理平铺块X的基元片段并按次序处理平铺块Y的基元片段。方法2200在框2202处开始,在所述框中,HSR逻辑2008确定是否存在异常条件。具体地说,通常HSR逻辑2008被配置成使优先级队列2004中的基元片段优先(例如在处理非优先级队列中的任何基元片段之前处理优先级队列2004中的所有基元片段)。然而,如果存在异常条件,那么HSR逻辑2008可以处理非优先级队列2006中的基元片段,即使优先级队列2004中存在基元片段。示例异常包含但不限于:非优先级队列2006中的第一/顶部基元片段与平铺块相关,所述平铺块的深度缓冲区处于深度缓冲区缓存2012中;深度缓冲区缓存2012已满(或几乎已满);以及非优先级队列2006中的基元片段的数量超过阈值(例如非优先级队列2006变得过满)。如果HSR逻辑2008确定不存在异常条件,那么方法2200前进到框2204。然而,如果HSR逻辑2008确定存在异常条件,那么方法2200前进到框2206。
在框2204处,HSR逻辑2008首先确定优先级队列2004中是否存在任何基元片段。如果在框2204处确定优先级队列中存在至少一个基元片段,那么方法2200前进到框2208,在所述框中,HSR逻辑选择优先级队列中的第一基元片段。接着,方法2200前进到框2216。然而,如果在框2204处确定优先级队列为空,那么方法2200前进到框2210,在所述框中,HSR逻辑2008确定非优先级队列2006中是否存在任何基元片段。如果在框2210处确定非优先级队列为空,那么方法2200回到框2202。然而,如果在框2210处确定非优先级队列2006中存在至少一个基元片段,那么方法2200前进到框2212,在所述框中,HSR逻辑选择非优先级队列2006中的第一基元片段。方法2200接着前进到框2214,在所述框中,HSR逻辑进行检查以确保已经从存储器加载相关平铺块的深度缓冲区。一旦已经确定已经从存储器加载深度缓冲区,方法2200就前进到框2216。
在框2206处,HSR逻辑2008首先确定非优先级队列2006中是否存在任何基元片段。如果在框2206处确定非优先级队列中存在至少一个基元片段,那么方法2200前进到框2212,在所述框中,HSR逻辑选择非优先级队列2006中的第一基元片段。方法2200接着前进到框2214,在所述框中,HSR逻辑进行检查以确保已经从存储器加载相关平铺块的深度缓冲区。一旦已经确定已经从存储器加载深度缓冲区,方法2200就前进到框2216。然而,如果在框2206处确定非优先级队列2006为空,那么方法2200前进到框2218,在所述框中,HSR逻辑2008确定优先级队列2004中是否存在任何基元片段。如果在框2218处确定优先级队列2004为空,那么方法2200回到框2202。然而,如果在框2218处确定优先级队列2004中存在至少一个基元片段,那么方法2200前进到框2220,在所述框中,HSR逻辑选择优先级队列中的第一基元片段。接着,方法2200前进到框2216。
在框2216处,HSR逻辑对所选择的基元片段执行全分辨率隐藏表面移除。
如上文所描述,当HSR逻辑正在对与平铺块相关联的基元片段的集合执行隐藏表面移除时,HSR逻辑可维持所述平铺块的深度值更新图和所述平铺块的当前最佳深度值缓冲区。深度值更新图指示在基元片段集合的处理期间已经更新哪些像素样本值,并且当前最佳深度值缓冲区指示到目前为止平铺块的每个像素样本的‘最佳’深度值。当HSR逻辑接收或选择新的平铺块的基元片段时,可以初始化深度值更新图以指示深度值尚未更新。也可以在此时初始化当前最佳深度值缓冲区。然而,初始化可以取决于所述平铺块的深度缓冲区是否已经从存储器加载而不同。如果第一基元片段未引起深度缓冲区读取(例如第一基元片段在优先级队列中),那么当前最佳深度值缓冲区中的值可初始化为‘最差’(例如最大)深度值。然而,如果第一基元片段引起了深度缓冲区读取(例如第一基元片段在非优先级队列中),那么当前最佳深度值缓冲区中的值可初始化为深度缓冲区中的值。如果HSR逻辑接收或选择在已经更新一个或多个像素样本深度值之后引起深度缓冲区读取的基元片段,那么仅将已加载深度缓冲区中与未在深度值更新图中标记为已更新的像素样本相关联的那些深度值加载到当前最佳深度值缓冲区中。
对基元片段执行全分辨率隐藏表面移除可包括将所述基元片段的深度(例如Z值或Z坐标)与平铺块中与基元片段相关联的像素样本的对应当前‘最佳’深度值进行比较。如果基元片段的深度值比当前‘最佳’深度值更好,那么基元片段通过全分辨率深度测试并被发送到标签缓冲区。接着更新当前最佳深度值缓冲区以反映像素样本的新的‘最佳’深度值,并且更新深度值更新图以反映所述像素样本的深度值已经更新。然而,如果基元片段的深度值比对应像素样本的当前‘最佳’深度值更差(例如更高),那么基元片段未通过全分辨率深度测试并被丢弃(例如,不相对于当前平铺块由光栅化逻辑进一步处理所述基元片段)。
在一些状况下,如上文所描述,粗略深度测试逻辑320可被配置成标识不需要执行全分辨率深度测试的那些基元片段(即,不需要与对应像素样本的当前‘最佳’深度值进行比较的基元片段的深度值)。在这些状况下,HSR逻辑可被配置成当其接收已经被标识为不需要全分辨率深度测试的基元片段时,仅用所述基元片段的深度值(例如Z值或Z坐标)更新当前最佳深度缓冲区并将基元片段的标识符存储在标签缓冲区中。
在平铺块的完整基元片段集合已经由HSR逻辑处理之后,可将已经更新(如由深度值更新图所指示)的当前‘最佳’深度值存储在存储器中的深度缓冲区中/写入到所述深度缓冲区。
图23示出其中可实施本文中所描述的粗略深度测试逻辑和/或图形处理***的计算机***。计算机***包括CPU 2302、GPU 2304、存储器2306和其它装置2314,例如显示器2316、扬声器2318和摄像头2320。处理块2310(其可对应于本文中所描述的粗略深度测试逻辑和/或图形处理***)实施在GPU 2304上。在其它示例中,可在CPU 2302上实施处理块2310。计算机***的部件可通过通信总线2322彼此通信。
图1到4和19到20的粗略深度测试逻辑和图形处理***示出为包括多个功能块。这仅仅是示意性的,并非旨在限定此类实体的不同逻辑元件之间的严格划分。可以任何合适的方式提供每个功能块。应理解,本文中被描述为由粗略深度测试逻辑或图形处理***形成的中间值不需要由粗略深度测试逻辑或图形处理***在任何点物理上生成,并且可以仅表示逻辑值,所述逻辑值方便地描述了由粗略深度测试逻辑或图形处理***在其输入和输出之间执行的处理。
本文中所描述的粗略深度测试逻辑和图形处理***可以在集成电路上体现为硬件。本文中所描述的粗略深度测试逻辑和图形处理***可被配置成执行本文所描述的任何方法。一般来说,上文所描述的功能、方法、技术或部件中的任一个可以实施于软件、固件、硬件(例如,固定逻辑电路***)或其任何组合中。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或其任何组合。在软件实施方案的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,所述程序代码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可以使用磁性、光学和其它技术来存储指令或可由机器存取的其它数据的存储器装置。
如本文使用的术语计算机程序代码和计算机可读指令是指可供处理器执行的任何种类的代码,包含以机器语言、解释语言或脚本语言表示的代码。可执行代码包含二进制代码、机器代码、字节代码、定义集成电路的代码(例如硬件描述语言或网表),以及用诸如C、Java或OpenCL之类的编程语言代码表示的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其它软件环境中被适当地执行、处理、解释、编译时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机***的处理器执行由代码指定的任务。
处理器、计算机或计算机***可以是任何种类的装置、机器或专用电路,或其集合或一部分,具有使其可以执行指令的处理能力。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上***、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机***可包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可提供一种计算机可读存储介质,所述计算机可读存储介质上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造***中处理(即,运行)时,所述集成电路定义数据集将***配置成制造被配置成执行本文所描述的任何方法的粗略深度测试逻辑或图形处理***,或者制造包括本文所描述的任何设备的粗略深度测试逻辑或图形处理***。集成电路定义数据集可以是例如集成电路描述。
因此,可提供一种在集成电路制造***处制造如本文所描述的粗略深度测试逻辑或图形处理***的方法。此外,可提供一种集成电路定义数据集,其在集成电路制造***中处理时使制造粗略深度测试逻辑或图形处理***的方法得以执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包含作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可以在计算机***上处理,所述计算机***被配置用于在软件环境的上下文中生成集成电路的制造定义,所述软件环境包括电路元件的定义和用于组合这些元件以生成由所述表示法定义的集成电路的制造定义的规则。与通常软件在计算机***上执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机***配置成用于生成集成电路的制造定义,以执行定义集成电路的代码,从而生成所述集成电路的制造定义。
现在将关于图24描述在集成电路制造***处处理集成电路定义数据集以便将***配置成制造粗略深度测试逻辑或图形处理***的示例。
图24示出集成电路(IC)制造***2402的示例,所述IC制造***被配置成制造如本文任一示例中所描述的粗略深度测试逻辑或图形处理***。特别地,IC制造***2402包括布局处理***2404和集成电路生成***2406。IC制造***2402被配置成接收IC定义数据集(例如,定义如本文任一示例中所描述的粗略深度测试逻辑或图形处理***),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如本文任一示例中所描述的粗略深度测试逻辑或图形处理***)。IC定义数据集的处理将IC制造***2402配置成制造体现如本文任一示例中所描述的粗略深度测试逻辑或图形处理***的集成电路。
布局处理***2404被配置为接收和处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理***2404确定了电路布局时,它可以将电路布局定义输出到IC生成***2406。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成***2406根据电路布局定义来生成IC。例如,IC生成***2406可以实现生成IC的半导体装置制造工艺,其可以包括光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩码的形式,其可以在光刻工艺中用于根据电路定义来生成IC。替代性地,提供给IC生成***2406的电路布局定义可以是计算机可读代码的形式,IC生成***2406可以使用所述计算机可读代码来形成用于生成IC的合适光掩模。
由IC制造***2402执行的不同处理可以全部在一个位置实现,例如,由一方。替代性地,IC制造***2402可以是分布式***,使得一些过程可以在不同位置执行,并且可以由不同方执行。例如,以下阶段中的一些可以在不同位置中和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩码来制造集成电路。
在其它示例中,在集成电路制造***处对集成电路定义数据集进行处理可将***配置成制造粗略深度测试逻辑或图形处理***,而不用对IC定义数据集进行处理以便确定电路布局。举例来说,集成电路定义数据集可以定义FPGA等可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造***配置成生成具有所述定义配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造***中处理时,集成电路制造定义数据集可以使集成电路制造***生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上面参考图24描述的方式对集成电路制造***的配置,可以制造出如本文所述的装置。
在一些示例中,集成电路定义数据集可包含在由数据集定义的硬件上运行的软件,或者与由数据集定义的硬件组合运行的软件。在图24所示的示例中,IC生成***还可以由集成电路定义数据集进一步配置,以在制造集成电路时,根据在集成电路定义数据集中定义的程序代码,将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或***中(以及在本文中实施的方法中)的实施可以使性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和***(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用的硅更少。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或***的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和***的物理实施方案的改进(例如硅面积减小)的概念可以针对性能改进进行权衡。例如,这可以通过在预定义面积预算内制造一个模块的多个个例来完成。
本申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,使得此类特征或组合能够根据所属领域的技术人员的普通常识并基于整个本说明书来实行,不管此类特征或特征的组合有没有解决本文中所公开的任何问题。鉴于前文描述,所属领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (20)
1.用于图形处理***(300)中的隐藏表面移除逻辑(314、2008),其中渲染空间被细分成多个平铺块并且每个平铺块包括多个像素样本,所述隐藏表面移除逻辑(314、2008)被配置成:
接收基元片段集合中与所述多个平铺块中的平铺块相关联的基元片段,所述基元片段对应于所述平铺块的像素样本;
接收指示以下项的信息:所述基元片段是否需要深度缓冲区读取以用于全分辨率隐藏表面移除;
如果所述基元片段是所述集合中的第一基元片段,则初始化所述平铺块的当前最佳深度值缓冲区和所述平铺块的深度值更新图,其中所述平铺块的当前最佳深度值缓冲区包括所述平铺块的每个像素样本的深度值,所述深度值更新图指示所述当前最佳深度值缓冲区中的哪些值已被更新,并且所述深度值更新图被初始化以指示所述当前最佳深度值缓冲区中没有深度值被更新;
根据深度比较模式确定所述基元片段是否具有与所述基元片段相对应的所述像素样本的最佳深度值;以及
响应于确定所述基元片段具有与所述基元片段相对应的所述像素样本的最佳深度值,将所述当前最佳深度值缓冲区中所述像素样本的深度值更新为所述基元片段的深度,并更新所述深度值更新图以指示所述像素样本的深度值已被更新;
其中,当所述第一基元片段不需要深度缓冲区读取时,初始化所述当前最佳深度值缓冲区包括根据所述深度比较模式将所述当前最佳深度值缓冲区中的每个深度值初始化为最差深度值,并且当所述第一基元片段需要深度缓冲区读取时,初始化所述当前最佳深度值缓冲区包括将所述当前最佳深度值缓冲区中的每个深度值初始化为所述平铺块的深度缓冲区中的对应深度值。
2.根据权利要求1所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)还被配置成:如果所述基元片段不是所述集合中的第一基元片段,而是在所述集合中首先需要深度缓冲区读取以用于全分辨率隐藏表面移除,则更新所述当前最佳深度值缓冲区中的所有深度值,除了在所述深度值更新图中标识为已被更新的那些深度值,其中所述平铺块的深度缓冲区中的对应深度值存储在存储器中。
3.根据权利要求1所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)被配置成通过以下方式来确定所述基元片段是否具有与所述基元片段相对应的所述像素样本的最佳深度值:将所述基元片段的深度与所述当前最佳深度值缓冲区中所述像素样本的深度值进行比较。
4.根据权利要求1所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)被配置成:
接收指示是否需要对所述基元片段执行全分辨率深度测试的信息;以及
通过以下方式确定所述基元片段是否具有与所述基元片段相对应的所述像素样本的最佳深度值:
如果不需要对所述基元片段执行全分辨率深度测试,则确定所述基元片段具有与所述基元片段相对应的所述像素样本的最佳深度值,以及
如果需要对所述基元片段执行全分辨率深度测试,则将所述基元片段的深度与所述当前最佳深度值缓冲区中所述像素样本的深度值进行比较。
5.根据权利要求3或权利要求4所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)被配置成:如果根据所述深度比较模式从所述比较中确定所述基元片段具有比所述当前最佳深度值缓冲区中所述像素样本的深度值更好的深度值,则确定所述基元片段具有与所述基元片段相对应的所述像素样本的最佳深度值。
6.根据权利要求5所述的隐藏表面移除逻辑(314、2008),其中,所述深度比较模式是小于深度比较模式,并且所述隐藏表面移除逻辑(314、2008)被配置成:如果从所述比较中确定所述基元片段的深度小于所述当前最佳深度值缓冲区中所述像素样本的深度值,则确定所述基元片段具有比所述当前最佳深度值缓冲区中所述像素样本的深度值更好的深度值。
7.根据权利要求1至4中任一项所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)还被配置成:响应于确定所述基元片段不具有对应像素样本的最佳深度值,丢弃所述基元片段。
8.根据权利要求1至4中任一项所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)还被配置成:响应于确定所述基元片段具有对应像素样本的最佳深度值,发送所述基元片段以供进一步处理。
9.根据权利要求8所述的隐藏表面移除逻辑(314、2008),其中发送所述基元片段以供进一步处理包括将所述基元片段发送到标签缓冲区。
10.根据权利要求1至4中任一项所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)还被配置成:如果所述基元片段是所述基元片段集合中的最后一基元片段,则将所述当前最佳深度值缓冲区中所述深度值更新图指示已被更新的每个深度值写入存储器中的深度缓冲区。
11.一种图形处理***(300),包括根据权利要求1至4中任一项所述的隐藏表面移除逻辑(314、2008)。
12.根据权利要求11所述的图形处理***(300),还包括粗略深度测试逻辑(320),包括:
隐藏深度测试逻辑(404),被配置成:
接收与所述多个平铺块之一相关的一个或多个基元的集合;
获得所述平铺块的深度范围,所述平铺块的深度范围基于先前针对所述平铺块处理的基元标识深度范围;以及
对于所述一个或多个基元的集合中的至少一个基元:
基于所述平铺块的深度范围,确定所述基元的全部或部分是否隐藏在所述平铺块中,其中如果确定所述基元的至少一部分隐藏在所述平铺块中,则不对与所述平铺块相关的所述基元的该部分执行全分辨率深度测试;以及
响应于确定所述基元的至少一部分没有隐藏在所述平铺块中,输出所述基元的至少该部分;以及
前深度测试逻辑(406),被配置成接收由所述隐藏深度测试逻辑(404)输出的基元,或从其生成的一个或多个基元片段,并且对于所接收的基元中的至少一个或所述基元片段中的至少一个:
基于所述平铺块的深度范围,根据深度比较模式确定所述基元或基元片段是否具有比先前针对所述平铺块处理的基元更好的深度;以及
响应于确定所述基元或基元片段具有比先前针对所述平铺块处理的基元更好的深度,将所述基元或基元片段标识为不需要读取深度缓冲区来执行全分辨率深度测试。
13.根据权利要求12所述的图形处理***(300),其中,所述前深度测试逻辑(406)还被配置成:
维护所述平铺块中可获得最佳深度值的每个像素样本的记录(1410、1412);
响应于确定基元或基元片段具有比先前针对所述平铺块处理的基元具有更好的深度:
确定所述记录是否指示所述最佳深度值可用于与该基元或该基元片段相关联的所述平铺块中的每个像素样本(1406);
响应于确定所述记录指示所述最佳深度值不可用于与该基元或该基元片段相关联的所述平铺块中的任何像素样本,将该基元或基元片段标识为不需要全分辨率深度测试(1408);以及
更新所述记录以指示所述最佳深度值可用于与该基元或该基元片段相关联的所述平铺块中的每个像素样本(1410);以及
响应于不将基元或基元片段标识为不需要读取深度缓冲区来执行全分辨率深度测试,更新所述记录以指示所述最佳深度值可用于所述平铺块的每个像素样本(1412)。
14.根据权利要求12所述的图形处理***(300),其中,所述前深度测试逻辑(406)还被配置成:
维护所述平铺块中可获得最佳深度值的每个像素样本的记录;
响应于确定基元或基元片段具有比先前针对所述平铺块处理的基元具有更好的深度:
确定所述记录是否指示所述最佳深度值可用于与该基元或该基元片段相关联的所述平铺块中的每个像素样本;
对于与该基元或基元片段相关联的所述平铺块中所述最佳深度值不可用的每个像素样本,将对应基元片段标识为不需要全分辨率深度测试;以及
更新所述记录以指示所述最佳深度值可用于与该基元或该基元片段相关联的所述平铺块中的每个像素样本;以及
响应于未将基元或基元片段标识为不需要读取深度缓冲区来执行全分辨率深度测试,更新所述记录以指示所述最佳深度值可用于所述平铺块的每个像素样本。
15.一种用于在图形处理***的光栅化阶段中处理基元片段的***(2000),其中渲染空间被细分成多个平铺块,所述***(2000)包括:
优先级队列(2004),其用于存储基元片段;
非优先级队列(2006),其用于存储基元片段;
逻辑(2002),其被配置成:
接收多个基元片段,每一基元片段对应于平铺块中的像素样本;
确定是否将执行深度缓冲区读取以用于所述基元片段中的一个或多个的隐藏表面移除处理;以及
基于深度缓冲区读取确定将所述基元片段分类到所述优先级队列(2004)和所述非优先级队列(2006)中;以及
根据权利要求1至4中任一项所述的隐藏表面移除逻辑(2008);
其中由所述隐藏表面移除逻辑(2008)接收的基元片段是由所述隐藏表面移除逻辑(2008)从所述优先级队列(2004)和所述非优先级队列(2006)之一中按以下方式选择的基元片段:对所述优先级队列中的基元片段给予优先级(2004)。
16.一种在图形处理***中对基元片段执行隐藏表面移除处理的方法,其中渲染空间被细分成多个平铺块并且每个平铺块包括多个像素样本,所述方法包括:
接收基元片段集合中与所述多个平铺块中的平铺块相关联的基元片段,所述基元片段对应于所述平铺块的像素样本;
接收指示以下项的信息:所述基元片段是否需要深度缓冲区读取以用于全分辨率隐藏表面移除;
如果所述基元片段是所述集合中的第一基元片段,则初始化所述平铺块的当前最佳深度值缓冲区和所述平铺块的深度值更新图,其中所述平铺块的当前最佳深度值缓冲区包括所述平铺块的每个像素样本的深度值,所述深度值更新图指示所述当前最佳深度值缓冲区中的哪些值已被更新,并且所述深度值更新图被初始化以指示所述当前最佳深度值缓冲区中没有深度值被更新;
根据深度比较模式确定所述基元片段是否具有与所述基元片段相对应的所述像素样本的最佳深度值;以及
响应于确定所述基元片段具有与所述基元片段相对应的所述像素样本的最佳深度值,将所述当前最佳深度值缓冲区中所述像素样本的深度值更新为所述基元片段的深度,并更新所述深度值更新图以指示所述像素样本的深度值已被更新;
其中,当所述第一基元片段不需要深度缓冲区读取时,初始化所述当前最佳深度值缓冲区包括根据所述深度比较模式将所述当前最佳深度值缓冲区中的每个深度值初始化为最差深度值,并且当所述第一基元片段需要深度缓冲区读取时,初始化所述当前最佳深度值缓冲区包括将所述当前最佳深度值缓冲区中的每个深度值初始化为所述平铺块的深度缓冲区中的对应深度值。
17.一种图形处理***,被配置成执行权利要求16所述的方法。
18.根据权利要求1至4中任一项所述的隐藏表面移除逻辑(314、2008),其中,所述隐藏表面移除逻辑(314、2008)体现在集成电路上的硬件中。
19.一种计算机可读存储介质,其上存储有计算机可读指令,所述指令当在计算机***处被执行时,使所述计算机***执行权利要求16所述的方法。
20.一种计算机可读存储介质,其上存储有权利要求1至4中任一项所述的隐藏表面移除逻辑(314、2008)的计算机可读描述,所述计算机可读描述当在集成电路制造***中被处理时,使所述集成电路制造***制造体现所述隐藏表面移除逻辑(314、2008)的集成电路。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1908807.9A GB2579428B (en) | 2019-06-19 | 2019-06-19 | Coarse depth test in graphics processing systems |
GB1908812.9 | 2019-06-19 | ||
GB1908812.9A GB2579429B (en) | 2019-06-19 | 2019-06-19 | Primitive fragment processing in the rasterization phase of a graphics processing system |
GB1908807.9 | 2019-06-19 | ||
CN202010557445.5A CN112116520B (zh) | 2019-06-19 | 2020-06-18 | 用于处理基元片段的***和方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010557445.5A Division CN112116520B (zh) | 2019-06-19 | 2020-06-18 | 用于处理基元片段的***和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115018695A true CN115018695A (zh) | 2022-09-06 |
Family
ID=71111272
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010553486.7A Active CN112116519B (zh) | 2019-06-19 | 2020-06-17 | 图形处理***中的粗略深度测试 |
CN202010557445.5A Active CN112116520B (zh) | 2019-06-19 | 2020-06-18 | 用于处理基元片段的***和方法 |
CN202210671492.1A Pending CN115018695A (zh) | 2019-06-19 | 2020-06-18 | 图形处理***的光栅化阶段中的基元片段处理 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010553486.7A Active CN112116519B (zh) | 2019-06-19 | 2020-06-17 | 图形处理***中的粗略深度测试 |
CN202010557445.5A Active CN112116520B (zh) | 2019-06-19 | 2020-06-18 | 用于处理基元片段的***和方法 |
Country Status (3)
Country | Link |
---|---|
US (4) | US11030797B2 (zh) |
EP (3) | EP4250237A3 (zh) |
CN (3) | CN112116519B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2526598B (en) * | 2014-05-29 | 2018-11-28 | Imagination Tech Ltd | Allocation of primitives to primitive blocks |
CN112116519B (zh) | 2019-06-19 | 2022-12-27 | 畅想科技有限公司 | 图形处理***中的粗略深度测试 |
GB2607002A (en) * | 2021-05-11 | 2022-11-30 | Advanced Risc Mach Ltd | Fragment dependency management for variable rate shading |
US11443404B1 (en) * | 2021-05-28 | 2022-09-13 | Bidstack Group PLC | Viewability testing in a computer-generated environment |
CN113256764A (zh) * | 2021-06-02 | 2021-08-13 | 南京芯瞳半导体技术有限公司 | 一种光栅化装置、方法及计算机存储介质 |
US20220410002A1 (en) * | 2021-06-29 | 2022-12-29 | Bidstack Group PLC | Mesh processing for viewability testing |
KR20240072940A (ko) * | 2022-11-17 | 2024-05-24 | 에이알엠 리미티드 | 그래픽 프로세서 |
CN116188552B (zh) * | 2023-04-24 | 2023-08-11 | 摩尔线程智能科技(北京)有限责任公司 | 基于区域的深度测试方法、装置、设备及存储介质 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6646639B1 (en) * | 1998-07-22 | 2003-11-11 | Nvidia Corporation | Modified method and apparatus for improved occlusion culling in graphics systems |
US7023437B1 (en) * | 1998-07-22 | 2006-04-04 | Nvidia Corporation | System and method for accelerating graphics processing using a post-geometry data stream during multiple-pass rendering |
US6473082B1 (en) | 1999-05-18 | 2002-10-29 | S3 Graphics Co., Ltd. | System and method for implementing a two-layer z-range buffer |
US20020196252A1 (en) * | 2001-06-20 | 2002-12-26 | Min-Hao Liao | Method and apparatus for rendering three-dimensional images with tile-based visibility preprocessing |
GB2378108B (en) * | 2001-07-24 | 2005-08-17 | Imagination Tech Ltd | Three dimensional graphics system |
US7333106B1 (en) | 2003-03-27 | 2008-02-19 | Silicon Motion, Inc. | Method and apparatus for Z-buffer operations |
US20050122338A1 (en) | 2003-12-05 | 2005-06-09 | Michael Hong | Apparatus and method for rendering graphics primitives using a multi-pass rendering approach |
US8595054B2 (en) | 2005-12-02 | 2013-11-26 | Ips Group Inc. | Parking meter and a device therefor |
ITMI20070038A1 (it) * | 2007-01-12 | 2008-07-13 | St Microelectronics Srl | Dispositivo di renderizzazione per grafica a tre dimensioni con architettura di tipo sort-middle. |
GB0810311D0 (en) * | 2008-06-05 | 2008-07-09 | Advanced Risc Mach Ltd | Graphics processing systems |
CN102208112B (zh) * | 2011-05-25 | 2015-08-05 | 威盛电子股份有限公司 | 景深消隐方法、三维图形处理方法及其装置 |
US8941676B2 (en) * | 2012-10-26 | 2015-01-27 | Nvidia Corporation | On-chip anti-alias resolve in a cache tiling architecture |
US9214006B2 (en) | 2013-06-04 | 2015-12-15 | Arm Limited | Hidden surface removal in graphics processing systems |
KR102057166B1 (ko) * | 2012-12-17 | 2019-12-18 | 에이알엠 리미티드 | 그래픽 처리 시스템에서 히든 표면의 제거 |
GB2544679B (en) | 2012-12-20 | 2017-08-16 | Imagination Tech Ltd | Tessellating patches of surface data in tile based computer graphics rendering |
GB201223089D0 (en) | 2012-12-20 | 2013-02-06 | Imagination Tech Ltd | Hidden culling in tile based computer generated graphics |
KR102116708B1 (ko) * | 2013-05-24 | 2020-05-29 | 삼성전자 주식회사 | 그래픽스 프로세싱 유닛 |
US9286649B2 (en) * | 2013-05-31 | 2016-03-15 | Qualcomm Incorporated | Conditional execution of rendering commands based on per bin visibility information with added inline operations |
US9324180B2 (en) | 2013-12-09 | 2016-04-26 | Intel Corporation | Culling using masked depths |
GB2520366B (en) * | 2013-12-13 | 2015-12-09 | Imagination Tech Ltd | Primitive processing in a graphics processing system |
GB2524120B (en) * | 2014-06-17 | 2016-03-02 | Imagination Tech Ltd | Assigning primitives to tiles in a graphics processing system |
GB2524121B (en) | 2014-06-17 | 2016-03-02 | Imagination Tech Ltd | Assigning primitives to tiles in a graphics processing system |
US9846959B2 (en) * | 2014-07-03 | 2017-12-19 | Mediatek Inc. | Apparatus and method for controlling early depth processing and post depth processing |
US9846963B2 (en) | 2014-10-03 | 2017-12-19 | Samsung Electronics Co., Ltd. | 3-dimensional model generation using edges |
GB2530996B (en) * | 2014-10-06 | 2016-09-14 | Imagination Tech Ltd | Depth forwarding in a graphics processing system |
GB2534567B (en) * | 2015-01-27 | 2017-04-19 | Imagination Tech Ltd | Processing primitives which have unresolved fragments in a graphics processing system |
GB2535493B (en) | 2015-02-18 | 2021-02-24 | Advanced Risc Mach Ltd | Graphics processing systems |
US10147222B2 (en) * | 2015-11-25 | 2018-12-04 | Nvidia Corporation | Multi-pass rendering in a screen space pipeline |
GB2540227B (en) * | 2015-12-21 | 2018-01-17 | Imagination Tech Ltd | Allocation of tiles to processing engines in a graphics processing system |
US20180082468A1 (en) * | 2016-09-16 | 2018-03-22 | Intel Corporation | Hierarchical Z-Culling (HiZ) Optimized Shadow Mapping |
US10380789B2 (en) | 2016-09-16 | 2019-08-13 | Intel Corporation | Method and apparatus for efficient depth prepass |
US10733695B2 (en) * | 2016-09-16 | 2020-08-04 | Intel Corporation | Priming hierarchical depth logic within a graphics processor |
US10311016B2 (en) * | 2017-05-30 | 2019-06-04 | Arm Limited | Hidden surface removal in graphics processing systems |
CN112116519B (zh) | 2019-06-19 | 2022-12-27 | 畅想科技有限公司 | 图形处理***中的粗略深度测试 |
-
2020
- 2020-06-17 CN CN202010553486.7A patent/CN112116519B/zh active Active
- 2020-06-18 CN CN202010557445.5A patent/CN112116520B/zh active Active
- 2020-06-18 CN CN202210671492.1A patent/CN115018695A/zh active Pending
- 2020-06-19 EP EP23189889.1A patent/EP4250237A3/en active Pending
- 2020-06-19 EP EP20180987.8A patent/EP3754613A1/en active Pending
- 2020-06-19 EP EP20180988.6A patent/EP3754612B1/en active Active
- 2020-06-19 US US16/906,256 patent/US11030797B2/en active Active
- 2020-06-19 US US16/906,170 patent/US11164364B2/en active Active
-
2021
- 2021-05-26 US US17/331,537 patent/US11880933B2/en active Active
- 2021-11-01 US US17/516,274 patent/US11922566B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3754613A1 (en) | 2020-12-23 |
US11880933B2 (en) | 2024-01-23 |
EP3754612A1 (en) | 2020-12-23 |
CN112116520B (zh) | 2022-07-01 |
US20220051474A1 (en) | 2022-02-17 |
US11922566B2 (en) | 2024-03-05 |
US20200402297A1 (en) | 2020-12-24 |
EP4250237A2 (en) | 2023-09-27 |
CN112116519A (zh) | 2020-12-22 |
EP4250237A3 (en) | 2024-01-03 |
US11164364B2 (en) | 2021-11-02 |
US11030797B2 (en) | 2021-06-08 |
CN112116520A (zh) | 2020-12-22 |
US20210295591A1 (en) | 2021-09-23 |
EP3754612B1 (en) | 2023-09-13 |
CN112116519B (zh) | 2022-12-27 |
US20200402292A1 (en) | 2020-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112116520B (zh) | 用于处理基元片段的***和方法 | |
EP3142075B1 (en) | Graphics processing method and system for processing sub-primitives | |
US11263806B2 (en) | Graphics processing method and system for processing sub-primitives | |
GB2542131B (en) | Graphics processing method and system for processing sub-primitives | |
CN111429556B (zh) | 图形处理***中的基于基元块的光栅化 | |
CN111353928A (zh) | 用于图形处理***的经过变换的几何结构数据高速缓存 | |
US11551401B2 (en) | Data structures, methods and primitive block generators for storing primitives in a graphics processing system | |
US20240202864A1 (en) | Input/output filter unit for graphics processing unit | |
GB2579429A (en) | Primitive fragment processing in the rasterization phase of a graphics processing system | |
GB2591585A (en) | Hidden surface removal processing in a graphics processing system | |
GB2579428A (en) | Coarse depth test in graphics processing systems | |
GB2592046A (en) | Methods and tiling engines for tiling primitives in a graphics processing system | |
GB2592045A (en) | Data structures, methods and primitive block generators for storing primitives in a graphics processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |