图形处理系统中的基元处理的制作方法_5

文档序号:8396422阅读:来源:国知局
重叠的层。因此能够看到,八个标签缓冲器820的群组以及图形处理系统800 (特别是标签控制模块822)被配置为将八个标签缓冲器820中的一个或多个的相应集合动态地与每个深度缓冲器318相关联。就其能够被改变以适应图形处理系统800的当前要求的意义而言,标签缓冲器与深度缓冲器的关联(其对应于标签缓冲器与被处理瓦片的关联)被动态执行。
[0074]例如,当覆盖样本位置的基元的基元标识符在标签分类器模块806被接收时,如果当前与特定瓦片相关联的集合中没有标签缓冲器820在该样本位置可用,则标签控制模块822能够将可用标签缓冲器添加至与该瓦片相关联的标签缓冲器的集合。集合中的附加标签缓冲器820表示该瓦片新的基元分层,并且基元标识符能够存储在表示新的分层的附加标签缓冲器中。
[0075]如果(以与以上所给出的示例中相同的方式)基元标识符要在样本位置被存储到与特定瓦片相关联的标签缓冲器集合中的标签缓冲器,但是该集合中没有标签缓冲器在该样本位置可用,并且如果(不同于以上所给出的示例)标签缓冲器的群组(8201至8208)中没有可用的标签缓冲器,则标签控制模块822可以从标签缓冲器820i至8208之一冲刷基元标识符由此使得该标签缓冲器可用,而使得基元标识符能够存储在该可用标签缓冲器中。被选择进行冲刷的标签缓冲器可以是当前是与该瓦片相关联的标签缓冲器集合的成员的标签缓冲器。通过冲刷与一个瓦片相关联的标签缓冲器,并且随后将所冲刷的标签缓冲器重新与不同瓦片相关联,该标签缓冲器被移动至不同的集合。
[0076]可能存在能够包括在与瓦片相关联的标签缓冲器820的一个集合之中的标签缓冲器820的最大数量。例如,标签控制模块822可能不会将多与四个的标签缓冲器820与任何给定瓦片相关联。
[0077]对象在场景内的分布可能为一些瓦片包含透明对象而其它则并非如此。在包含透明对象的那些瓦片中,场景的复杂度即透明层的数量可能在相当程度上有所变化。标签缓冲器820和瓦片之间的关联的灵活性允许标签缓冲器820被用来最佳地适应图形处理系统800的当前需求。
[0078]如在以上所描述的图形处理系统300中,被冲刷的基元标识符被送至纹理化单元308。纹理化引擎321至3244之一对所冲刷的基元标识符所标识的基元应用纹理化和阴影化。如以上所描述的,纹理化引擎324取回纹理数据和所标识的基元(例如,从存储器)并且将该纹理数据应用于所冲刷的基元标识符所标识的基元。在图8所示的示例中有四个纹理化引擎321至3244,即存在与深度缓冲器318相同数量的纹理化引擎,并且在这种情况下,每个纹理化引擎与相应瓦片相关联而使得应用于特定瓦片的基元的所有纹理化都由相同的纹理化引擎308所执行。如以上所描述的,这可以在有多个处理中瓦片的情况下提高对基元进行纹理化的效率。如以上所描述的,纹理化单元308输出图像的像素值的集合,其随后被存储在像素缓冲器310中。在其它示例中,纹理化引擎324的数量可能与深度缓冲器的数量不同,并且在这种情况下,每个纹理化引擎可能并不与相应瓦片相关联。
[0079]如以上所提到的,控制模块816类似于图形处理系统300的控制模块316。然而,控制模块816可以进一步基于标签缓冲器802的集合中与不同瓦片相关联的标签缓冲器的数量来控制哪些基元由处理模块302进行处理,以由此控制处理模块302在处理针对不同瓦片的基元之间进行切换。例如,如果大量标签缓冲器820与特定瓦片相关联,则控制模块916可以控制队列模块312以对该瓦片的基元的输出进行优先化。拥有与瓦片相关联的大量标签缓冲器820可以允许图形处理系统800更为有效地针对该瓦片处理基元,并且因此控制模块816可以控制处理模块302以优先处理来自该瓦片的基元。
[0080]图9a和9b示出了在一个示例中标签控制模块822可以通过其对标签缓冲器的选择进行控制以便存储传入的瓦片的基元标识符以及冲刷标签缓冲器的方法的流程图。
[0081]最初,并没有标签缓冲器与瓦片相关联。在步骤904,接收基元ID的集合。这些基元ID对应于单个基元,并且根据基元已经被确定为可见的位置而对应于瓦片内的样本位置。基元可以是非透明的或透明的。在步骤906,根据基元是非透明的还是透明的进行决策,并且如果该基元并不是透明的(即,如果是非透明的),则在步骤908进行清空处理。步骤908将在下文中进一步进行描述。在初始情况下,没有分配标签缓冲器,步骤908就没有效果。在步骤910,标签控制模块822搜索要在其中存储基元ID的标签缓冲器。框910内的处理随后在图9b中更为详细的进行描述。在步骤912,对搜索处理910的结果进行测试。如果搜索成功并且找到了标签缓冲器,则流程进行至步骤914,并且基元ID被存储在所找到的标签缓冲器中。然而,在初始情况下与瓦片相关联的集合中并没有标签缓冲器,并且因此搜索910将无法找到适当的标签缓冲器。在这种情况下,该流程进行至将尝试将新的标签缓冲器添加至与该瓦片相关联的集合的系列步骤。步骤918测试标签缓冲器的集合是否已经为预定的最大大小,并且步骤920进行检查以查看是否存在当前并未与瓦片相关联的可用缓冲器。在初始情况下,流程将进行至步骤922,其中空闲的标签缓冲器将被添加到与瓦片相关联的集合。基元ID随后在步骤914中被存储在标签缓冲器中。在步骤916,进行测试以确定是否还有基元有待处理。相应地,流程或者进行至步骤904以便接收另外的基元ID,或者进行至其中所有缓冲器都被冲刷(以从后往前的顺序)的步骤926,并且该处理结束。
[0082]步骤910的子处理在图9b中示出。注意到,为了便于解释,图9a和9b图示了其中以整个瓦片的规模而不是以微型瓦片的规模或者个体样本的规模来执行对用于存储基元的基元标识符的标签缓冲器的选择的系统。如本领域技术人员将会显而易见的,标签缓冲器以每个像素或者每个微型瓦片进行选择的示例可以使用对这里所描述的技术的直接修改来实施。该处理在952开始,并且在954进行测试以确定分配给瓦片的标签缓冲器的集合是否为空。如果该集合为空,则该子处理在964结束并且报告没有找到缓冲器。当集合包含至少一个缓冲器时,该处理根据基元是非透明的还是透明的而有所不同。这在956进行测试,并且在非透明基元的简单情况下,该子处理在966结束并且报告尾端缓冲器一即表示距观看者最远的层的标签缓冲器一可用于存储基元ID。其余步骤在步骤956标识该基元为透明的时使用。在这种情况下,该子处理的目标是以从前往后的顺序搜索标签缓冲器并且报告可能在其中存储基元ID的最后面的层。在958,变量P和C分别表示之前和当前的标签缓冲器。C被初始化以指示最前方的缓冲器。P将指示比C更接近前方一层的缓冲器,然而,由于没有更接近的缓冲器,则P以指示没有缓冲器的值进行初始化。在960,进行测试以确定是否所有基元ID都能够被存储在C所指示的缓冲器中。该处理在发现基元ID无法存储在C中时结束,因为此时认为P所指示的缓冲器必然是可能在其中存储基元ID的最为靠后的层。步骤962返回缓冲器P的标识。在针对最前方的层的测试失败的情况下,P的值将由于在步骤958中对P进行初始化的方式而直接指示没有找到缓冲器。如果该处理并未结束,即基元ID能够被存储在缓冲器C中,则该处理继续进行至步骤968,其确定是否有另一个表示比当前缓冲器C更深的层的缓冲器。如果没有,则C是最后面的缓冲器,并且基元ID可以被存储在其中,从而在970返回缓冲器C的标识。如果存在另一个缓冲器,则步骤972通过后退一个步骤而对P和C进行调节,而使得C存储当前缓冲器的标识,而C存储紧接在当前缓冲器之后的缓冲器的标识。流程返回至步骤960的测试,其中执行测试以查看基元ID是否能够被存储在C目前所表示的缓冲器中。
[0083]返回图9a,子处理910的结果在912进行测试以确定是否找到了适当的缓冲器。如果找到了缓冲器,则基元ID在步骤914中被存储于其中。当没有找到缓冲器时,使用步骤918-922来向集合分配新的标签缓冲器,并且步骤914随后将基元ID存储在新的缓冲器中。通常,新的缓冲器从空闲缓冲器的池进行分配。然而,可能并不期望与一个瓦片相关联的缓冲器集合没有限制地进行增长,特别是在例如图8所示的与若干其它瓦片共享缓冲器池的情况下。步骤918中的测试可以被用来限制集合中的缓冲器数量,并且通过将流程指向步骤924而使得最后面的缓冲器被冲刷(即,该缓冲器的内容被发送至纹理化和阴影化单元308)。被冲刷的缓冲器随后可以进行循环并且作为新的缓冲器在步骤922中被添加至该集合。在另一种情况中,空闲缓冲器的池可以为空,例如缓冲器已经被分配给与其它瓦片相关联的集合。这由步骤920中的测试所检测。同样,流程在缓冲器被冲刷以创建新的空闲缓冲器时被指向步骤924。在流程从步骤920而不是步骤918到达步骤924时,被选择进行冲刷的缓冲器可能是与关联于当前瓦片的集合不同的集合的成员。也就是说,假设允许对集合进行扩展,则集合可以通过冲刷以及从另一集合转移缓冲器而被扩展。以这种方式,在控制模块816和/或标签分类器控制模块822的控制下,标签缓冲器可以根据系统的要求进行灵活分配。
[0084]当在步骤906标识到非透明基元时,步骤908执行清空操作。标签分类器仅接收已经通过深度测试的片段的基元ID。因此得知非透明基元ID必然处于已经处理过的任何其它非透明或透明基元之前、并且因此将挡住它们。非透明对象的基元ID因此可以始终被存储在最后面的标签缓冲器中。子处理910的步骤956和966将标识出非透明对象并且返回最后面的缓冲器的标识。步骤908在对应于非透明基元ID的位置针对已经存储在任意缓冲器层中的任何透明对象冲刷基元ID。这具有使得层结果扁平化的效果,确保了透明片段不会不必要或不正确地被渲染。可选地,步骤308可以确定清理过程留下了完全为空的标签缓冲器,并且将空的层返回空闲缓冲器的池。
[0085]如以上所描述的,穿通基元以两个环节进行渲染。在第一环节中,在已经对透明度进行评估之前,穿通基元的基元ID可以向针对透明基元那样进行处理。在第二环节中,穿通基元ID对应于对象中已知为非透明的部分。因此,在第二环节中,穿通基元的基元ID可以向针对非透明基元那样进行处理。
[0086]以上详细描述的示例涉及到在标签分类器模块接收透明基元的基元标识符。相同的原则可以在接收到具有包括穿通的纹理的基元的基元ID时使用。
[0087]这里所描述的方法可以通过运行适于执行方法的步骤的适当计算机可读代码来实施。此外,这里所描述的图形处理系统可以通过运行适当的计算机可读代码而生成。该计算机可读代码可以在计算机可读存储介质上进行编码。
[0088]通常,以上所描述、任意功能、方法、技术或组件能够使用软
当前第5页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1