Gpu纹理小块的细节控制的制作方法

文档序号:6431447阅读:141来源:国知局
专利名称:Gpu纹理小块的细节控制的制作方法
技术领域
本发明涉及图像处理技术,尤其涉及图像处理技术中的纹理处理。
背景技术
可将来自(真实或虚构的)三维(3D)世界的对象呈现在二维OD)显示屏上的 3D计算机图形系统当前被用于各种各样的应用。例如,3D计算机图形可用于实时交互式应用,诸如视频游戏、虚拟现实、科学研究等,以及离线应用,诸如高分辨率电影、图形艺术的创建等。通常,图形系统包括图形处理单元(GPU)。GPU可被实现为计算机的中央处理单元 (CPU)的协处理器组件,并可以按插入卡(例如视频卡)、协处理器的形式来提供,或作为直接集成到计算机或诸如游戏设备等其他设备的主板的功能来提供。通常,GPU具有“图形流水线”,该“图形流水线”可接受输入3D场景的某一表示作为输入并输出2D图像以供显示。OpenGL 应用程序编程接口(API)和Direct3D 应用程序编程接口是具有图形流水线模型的两个示例API。图形流水线通常包括多个阶段,其中一个阶段是纹理映射。纹理映射允许将细节、表面纹理或颜色添加到被呈现的片段。在这一过程中,纹理映射被应用于形状的表面。在某些系统中,纹理像素(纹理的元素或纹理的像素)是纹理空间的基本单元。当纹理化3D表面时,纹理映射过程将纹理像素映射到输出 2D图形中的适当像素。处理纹理映射来产生输出2D图像消耗有价值的GPU时间。因此,已经开发了诸如 mip映射(mipmapping)等技术。mip映射涉及存储纹理映射以及该纹理映射的若干降低的细节水平(LOD)版本。例如,具有1/4原始细节、1/16细节等的映射可被存储在纹理存储器中。mip映射通过减小图形流水线阶段的工作负载来增加呈现的效率。例如,如果呈现场景仅需要具有较少细节的纹理映射的版本,则可从纹理存储器中访问较不详细的映射中的一个,而不是花时间过滤详细的版本。通常,有限的存储器量被用于存储纹理映射。因此,在某些情况下,所需的纹理的 LOD在纹理存储器中可能不可用。例如,应用(例如视频游戏)可能试图用比纹理存储器中可用的更详细的映射来呈现。在这一情况下,一个选项是用比所需的更少的细节来呈现场景。另选地,可消耗额外的时间来将纹理的所需LOD加载到纹理存储器中。在某些情况下, 可能没有所需纹理的任何映射被存储在纹理存储器中。因此,仅有的可行选项可以是花时间来将纹理加载到纹理存储器中。此外,由于纹理存储器的大小有限,用非常大的纹理映射来工作可能是困难的。

发明内容
公开了用于在图形处理单元(GPU)中处理纹理的系统和相关联的方法。纹理可在每一区域(例如小块)的基础上来管理,这允许对纹理存储器的高效使用。此外,可使用非常大的纹理。提供用于纹理流传输以及稀疏纹理两者的技术。GPU纹理单元可被用于基于着色器指定的值来智能地钳夹(clamp)LOD。纹理单元可向着色器提供反馈以允许着色器基于是否已使用钳夹等来有条件地作出反应。可采用每一区域(例如,每一小块)的独立 mip映射栈以允许非常大的纹理。—个实施例包括一种机器实现的方法,该方法包括以下步骤。接收对纹理的纹理像素的请求。该请求包括纹理的一个或多个部分的细节水平(LOD)阈值。存储不同LOD的纹理的小块的纹理存储器被访问。纹理像素基于纹理存储器中的小块LOD可用性以及纹理的一个或多个部分的LOD阈值来供应。供应纹理像素包括如果第一小块的所请求的LOD在纹理存储器中不可用,则将小块的第一个的LOD钳夹到与对应于该第一小块的纹理的部分的所请求的LOD阈值相比粗略不超过一个级别的L0D。一个实施例包括具有图形处理单元(GPU)的系统,该GPU具有被配置成接收对表示纹理的小块的纹理像素的请求的电路。该请求包括每一小块细节水平(LOD)阈值,该每一小块的细节水平(LOD)阈值指定小块中每一个的所请求的L0D。该电路还被配置成访问存储于不同细节水平(LOD)的多个小块,并且基于纹理存储器中小块LOD的可用性以及各小块中每一个的每一小块细节水平(LOD)阈值来供应多个小块的纹理像素。一个实施例包括机器实现的方法,该方法包括访问小块阵列中表示纹理的多个小块的钳夹细节水平(LOD),其中该多个小块表示少于整个纹理;在纹理存储器中存储该多个小块中每一个的mip映射栈,其中该多个小块中每一个的mip映射栈由该小块的钳夹LOD 来管控,并且其中少于整个纹理是主动地存储在该纹理存储器中的;以及在该纹理存储器中存储与该多个小块的mip映射栈所覆盖的相比带有更少细节的任何LOD的整个纹理的 mip映射栈。提供本发明内容以便以简化的形式介绍将在以下详细描述中进一步描述的一些发明内容。本发明内容并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。


图1描绘其中可实施各实施例的系统的一个实施例。图2是示出呈现计算机所生成的图像的过程的一实施例的流程图。图3A示出被用于示出可被用于实现独立mip映射栈的一个实施例的示例。图;3B描绘其中不同小块具有不同钳夹的示例。图4是将mip映射存储在纹理存储器中的过程的一个实施例的流程图。图5是提供纹理像素的过程的一个实施例的流程图。图6A和6B是示出为每一小块提供合适的LOD的纹理单元108的一个实施例的图
7J\ ο图6C和6D示出其中着色器发送LOD阈值的平滑的值的实施例。图7描绘定址的一个实施例。图8描绘可以在图1的系统中使用的计算环境的示例框图。图9是可用于实现各组件并执行所公开的技术的各方法的计算系统的框图。
具体实施例方式根据本公开的技术的各实施例包括用于在呈现计算机所生成的图像时处理纹理的系统和方法。纹理可在每一区域(例如,每一小块)的基础上来管理,这允许对纹理存储器的高效使用。此外,可使用非常大的纹理。提供用于纹理流传输(例如,在给定时间段中动态地加载可管理的所需纹理数据量)以及稀疏纹理(例如,允许按区域来静态地确定的纹理的细节水平)两者的技术。GPU纹理单元可被用于基于着色器指定的值来智能地钳夹 (clamp)L0Do纹理单元可向着色器提供反馈以允许着色器基于是否已使用钳夹等来有条件地作出反应。可采用每一区域(例如,每一小块)的独立mip映射栈以允许非常大的纹理。图1描绘其中可实施各实施例的系统150的一个实施例。系统150包括主机151、 着色器154、纹理存储器112、纹理单元158、小块映射160、以及显示器162。系统150可以是诸如游戏系统、个人计算机等设备的一部分。在某些实施例中,主机151运行诸如视频游戏等应用。这一应用可在主机151的中央处理单元(CPU) 101上运行。图1中的其他组件的至少某些可被实现在与CPU 101通信的图像处理单元(GPU) 108中。GPU 108可以驻留或可以不驻留在与主机151相同的设备中。例如,着色器154、纹理存储器112、纹理单元158、以及小块映射160可被实现在GPU 108中。显示器162可被集成在容纳主机125和/或GPU 108的设备中,或可以在分开的设备中。由此,主机151可控制要在显示器162上呈现的内容。主机151上的存储123可存储原始纹理数据。因此,主机151可根据由应用确定的区域和LOD将纹理数据流传输至纹理存储器112。在一个实施例中,纹理存储器112用作存储表示在呈现帧或其他元素时要使用的一个或多个纹理的小块的“小块高速缓存”。小块可以是纹理映射的任何区域。纹理存储器112可以是使纹理数据容易地可用的一种类型的数字存储。纹理存储器112可以使用为快速读和写而设计的专用RAM来实现,从而使得图形硬件能够在呈现3D图像中性能增加;然而,专用RAM不是必需的。为在将像素呈现在显示器162时获取颜色,主机151可将请求发送给着色器154。 着色器巧4可负责确定像素的颜色,并将颜色值返回给主机151。由此,着色器巧4可被称为“像素着色器”。不要求着色器1 执行与顶点着色器或几何着色器相关联的功能,但并不排除这些功能。例如,着色器1 可以是起到像素着色器和顶点着色器和/或几何着色器的作用的统一着色器。着色器巧4可被实现成在一个或多个处理器上执行的一组软件指令。着色器巧4可将纹理请求发送给纹理单元158。在某些实施例中,着色器巧4指定纹理和(s,t)坐标。在某些实施例中,纹理自身具有(s,t)坐标。因此,请求可以是针对纹理的某一部分的颜色,它可被称为纹理像素。在某些实施例中,纹理可以按被称为小块的单元来存储在纹理存储器112中。在某些实施例中,着色器巧4将每一小块的LOD阈值 (LODthresh)发送给纹理单元158,以便为每一小块指定所请求的L0D。例如,LODthresh可基于与要呈现的三角形中的相邻像素有关的信息来确定。例如,如果像素表示小区域,则应存在高的细节水平。另一方面,如果像素表示大区域,则应存在低的细节水平。通常,最高细节水平可由“L0D 0”来指定,增加的数字(例如,LOD ULOD 2等)指定更低的细节水平。注意,不要求LODthresh为整数。在某些实施例中,主机151将LODthresh发送给着色器154。 在某些实施例中,着色器巧4在将LODthresh发送给纹理单元158之前修改LODthresh。小块映射160可指定将什么小块(以及以什么L0D)存储在纹理存储器112中。 在一个实施例中,小块映射160可包含一个或多个表,该一个或多个表可被用于确定什么LOD(如果有的话)对每一小块是可用的。由此,小块映射160可驻留在存储器单元中。在某些实施例中,小块映射160驻留在纹理存储器112中;然而,这并不是必需的。纹理单元 158可访问小块映射160以确定所请求的小块是否在纹理存储器112中。小块映射160通过指示在该LOD处是否存在对所请求的小块有效的数据来作出响应。纹理单元112可访问纹理存储器112并且生成纹理像素,以便对来自着色器巧4的请求作出响应。纹理单元158 可将地址(例如,实际存储器地址)发送给纹理存储器112,并且从纹理存储器112接收颜色值。在某些实施例中,纹理单元112基于LODthresh以及在纹理存储器112中可用的小块来钳夹小块的L0D。例如,如果着色器IM为给定小块请求LODl与LOD 2之间的L0D, 但对该小块可用的最详细的LOD为LOD 2,则纹理单元158可将LOD钳夹到LOD 2,并且向着色器巧4发送“警告反馈”以指示该LOD已被钳夹到比请求的稍低的L0D。着色器IM可能使得对于该小块的更详细的LOD被加载到纹理存储器112。在某些实施例中,纹理单元 158可取决于所请求的LOD在纹理存储器112中的可用性来发送诸如“0K”或“失败”等其他反馈。在某些实施例中,纹理单元158以硬件来实现,以便实现快速处理。然而,并不排除软件实现。图2是示出呈现计算机所生成的图像的过程200的一实施例的流程图。过程200 可在系统150内被执行。注意,在某些实施例中,某些步骤可由主机151来执行,另一些步骤可由GPU 108来执行。在步骤202,纹理的小块的mip映射栈被存储在纹理存储器112中。 例如,诸如在主机151上运行的视频游戏等应用将纹理映射加载到纹理存储器112中。在某些实施例中,小块阵列中每一小块具有其自身的mip映射栈,使得可用的最详细的LOD对于不同小块是不同的。以下描述进一步的详细内容。在步骤204,生成LODthresh值。在某些实施例中,主机151生成LODthresh。当主机151生成LODthresh时,它可以是整个纹理的单个LODthresh,但并不排除主机151为纹理的不同部分改变LODthresh。例如,不同(s,t)地址范围可具有LODthresh 的不同值。在某些实施例中,着色器巧4在将LODthresh发送给纹理单元158之前修改 LODthresh。例如,着色器巧4可生成每一小块的LODthresh。换言之,不同小块可具有 LODthresh的不同值。注意,不要求着色器巧4指定小块以提供每一小块的LODthresh。相反,着色器巧4可指定被纹理单元158转换成小块地址的(s,t)地址。因此,净效果可以是不同小块具有LODthresh的不同值。下面讨论生成LODthresh的进一步细节。在步骤206,对纹理像素的请求由纹理单元158接收。该请求可包括LODthresh 以及一个或多个(s,t)空间地址。纹理单元158可从着色器巧4或直接从主机102接收 LODthresh。注意,提供给纹理单元158的LODthresh实际上可指定(s,t)空间地址(或某一其他地址),这与具体小块相反。在步骤210,纹理单元158基于纹理存储器112中LOD的可用性以及小块的 LODthresh来供应小块的纹理像素。在某些实施例中,纹理单元158基于其为每一小块供应所请求的LOD的能力来将反馈发送给着色器154。在一个实施例中,纹理单元158在特定条件下钳夹给定小块的L0D。例如,如果给定小块的可用LOD稍低于所请求的L0D,则纹理单元158可钳夹至可用的L0D。下面讨论步骤210的进一步的细节。例如,图5描述一个实施例。
在某些实施例中,可动态地更新纹理存储器112的内容。在步骤212,确定纹理存储器112是否应被更新。例如,着色器IM可响应于接收警告反馈来建议主机151加载附加纹理像素,以便增加纹理存储器112中所存储的对于特定小块的L0D。如果确定纹理存储器112应被动态地更新,则在步骤214,改变一个或多个小块的一个或多个mip映射栈。过程200随后以主机151或着色器IM发送对纹理像素的颜色值的附加请求来继续。这些请求可包括相同或不同的LODthresh。因此,一个选项是在步骤204生成新的LODthreshJS LODthresh对于下一个请求可以是相同的。一个实施例包括每一区域(例如,每一小块)的独立mip映射栈。每一 mip映射栈可与小块阵列中的一个元素相对应。图3A示出被用于示出可被用于实现独立mip映射栈的一个实施例的示例。该图被分成与不同细节水平(LOD)相对应的各级别,并被用于示出加载到纹理存储器112中的纹理。虚拟小块阵列302表示整个纹理,该整个纹理可被分成被称为小块的不同区域。作为一个示例,纹理可以是20x20的小块阵列。通常,在某一时刻只有整个虚拟小块阵列302的部分被加载到纹理存储器112,这就是它为什么被称为“虚拟”小块阵列。在这一示例中,在LOD 0处的6x6 “驻留”小块阵列304被加载到纹理存储器112中。出于讨论的目的,在LOD 0处的驻留小块阵列304中的一个小块306被突出显示。在这一示例中,6x6驻留小块阵列304被mip映射下降至单个mip映射栈中的LOD 4。 由此,6x6驻留小块阵列304的完整细节版本以及降低的细节版本被存储在纹理存储器112 中。这在图3A中通过LOD 1至LOD 4处的6x6驻留小块阵列304来描绘。在这一示例中,对于整个20x20的虚拟小块阵列302的最粗略LOD (从LOD 5至 LOD 12)被存储在纹理存储器112中。这由mip尾阵列栈311来表示。注意,使用这一技术允许将非常大的纹理存储在纹理存储器112中,因为mip尾阵列栈311要求的存储器的量不是非常多。同样,由于在LOD 0处只有来自整个纹理的小块子集被存储(例如,驻留小块阵列304),因此所使用的纹理存储器112的量不会过多。然而,不管要尝试访问纹理中的哪一点,在这一实施例中保证可返回某个值,虽然在某些情况下是在较粗略的LOD处。出于讨论目的,整个20x20虚拟小块阵列可能是5120x5120字节的纹理。由此,给定小块可能是256x256字节。在LOD 5,虚拟小块阵列302可以仅仅是160字节乘以160字节。因此,mip尾阵列栈311的顶级可比LOD 0处的驻留小块(例如小块306)要求较少的存储。注意,mip尾阵列栈311开始的级别是出于讨论目的的。mip尾阵列栈311可在高于或低于LOD 5的级别处开始。注意,不要求驻留小块阵列304中的所有小块被一直存储至LOD 0。在一个实施例中,小块阵列304中的每一小块具有其自身的钳夹L0D。钳夹值是指对于小块的最详细L0D。 图3B描绘其中不同小块具有不同钳夹的示例。例如,参考图3B,小块306a被钳夹在LOD 0处。因此,小块306a具有存储在纹理存储器112中对于LOD 0至LOD 4的版本。另一方面,小块306b在LODl处被钳夹。因此,存在存储在纹理存储器中对于LOD 1至LOD 4(但不在LOD 0处)的小块306b的版本。对于不同小块具有不同钳夹LOD允许静态地控制纹理细节。在某些实施例中,可动态地调整每一小块的钳夹L0D。因此,也可动态地控制纹理细节。注意,不要求驻留小块阵列304是纹理中的连续区域。例如,小块306a和小块306b 两者都可被认为是驻留小块阵列304的一部分,因为这些小块(的某一 LOD版本)驻留在纹理存储器112中。然而,这些小块不是虚拟阵列302的某一连续区域的一部分。注意,为了不使该图模糊,图3B中没有描绘驻留小块阵列304的其他驻留小块。此外,注意,驻留小块阵列304可表示不止单个纹理。因此,尽管在图3A和中仅描绘了单个虚拟小块阵列302,但注意,可存在不止一个虚拟小块阵列302。在这样的情况下,纹理存储器112可存储对于每一虚拟小块阵列302的mip尾阵列栈311。例如,图3A 和:3B示出在LOD 5处开始的对于虚拟小块阵列302的mip尾阵列栈311。纹理存储器112 可存储不止一个mip尾阵列栈311,每一个对应于不同纹理(或虚拟小块阵列302)。图4是将mip映射存储在纹理存储器112中的过程400的一个实施例的流程图。 过程400是过程200的步骤202的一个实施例。在步骤402,访问对于驻留小块阵列304的小块的钳夹L0D。小块表示小于整个纹理的子集。作为一个示例,整个纹理可由20x20虚拟小块阵列来表示,每一小块为256x256字节。因此,整个纹理可能是5120字节乘以5120字节。同样,如前所述,驻留小块阵列304可表示不止一个纹理的部分。出于讨论的方便,过程400将参考单个纹理来讨论。在步骤404,将对于该子集中每一小块的mip映射栈存储在纹理存储器112中。在步骤406,将对于整个纹理的mip映射栈存储在纹理存储器112中。例如,将诸如在图3A 或3B中所描绘的mip映射栈存储在纹理存储器112中。如图3A所述,例如,存在对于6x6 小块区域304中各驻留小块中的每一个的mip映射栈,以及对于整个纹理的mip尾阵列栈 311。图5是提供纹理像素的过程500的一个实施例的流程图。过程500可由纹理单元 158来执行。过程500是过程200的步骤210的一个实施例。由此,在过程500之前,纹理单元158已经接收对于至少一个小块的纹理像素的请求以及该小块的LODthresh。注意,该请求可指定(s,t)地址,纹理单元158可将该(s,t)地址转换成小块地址。过程500描述对一个小块的处理。当讨论过程500时将参考图6A-6B。简言之,图6A和6B是示出为每一小块提供合适的LOD以及向着色器IM提供反馈的纹理单元158的一个实施例的图示。图 6A和6B中的图示描绘存储在纹理存储器112中对于五个相邻小块中的每一个的可用L0D、 可由着色器巧4提供的LOD阈值、以及由纹理单元158供应给着色器巧4的对于每一小块的实际L0D。图6A和6B中的图示还指示在提供对于每一小块的纹理像素时由纹理单元158 提供的反馈。在过程500的步骤502,纹理单元158访问小块映射160以确定对于请求的小块在该小块存储器112中什么LOD可用。例如,纹理单元158将已从着色器巧4接收到的(s, t)地址转换成虚拟阵列302中的索引,并且随后转换成驻留小块阵列304中的索引。参考 20x20虚拟小块阵列的示例,纹理单元158可能首先标识哪一虚拟小块与(s,t)地址相对应。接着,纹理单元158可确定驻留小块阵列304中与该虚拟小块阵列索引相对应的索引。 在某些实施例中,纹理单元158基于该驻留小块阵列索引确定纹理存储器112中的物理地址。在步骤504,纹理单元158将纹理存储器112中对于所请求的小块可用的最详细的 LOD (LODmax)与 LODthresh 相比较。如果 LODmax 大于 LODthresh (比 LODthresh 更详细) (步骤506为是),则在步骤507,纹理单元158访问纹理存储器112。随后,在步骤508,纹理单元158为该小块生成并且供应纹理像素。一种在给定点生成纹理像素值的方式是确定在LOD 0处的小块中四个与所请求的(s,t)最接近的纹理像素,并且形成第一双线性过滤的值。可针对LOD 1处的小块执行相似的过程,以形成第二过滤的值。随后可基于使用 LODthresh来结合这两个值,以生成LOD 0与LOD 1之间的内插值。可使用其他技术来形成最终颜色值。在步骤510,纹理单元158将“0K”反馈发送给着色器154。参考图6A,对于小块1、小块3和小块4,可将LOD 0至LOD 4存储在纹理存储器 112中。注意,图6A描绘小块下面的“S轴”以指示(s,t)空间的“s坐标”与小块之间的关系。在图6A中没有显式地描绘“t坐标”。在这一示例中,LOD 0与LOD 1之间的LOD阈值 (LODthresh)。由此,纹理单元158能够使用LOD 0与LOD 1处的纹理映射来提供值。在图 6A中这通过就在LODthresh下面被标记为“所使用的L0D”的虚线来表示。实际上,所使用的LOD本质上可与LODthresh的级别相同,但出于说明目的而被示为稍微在LODthresh下面。本领域已知的用于混合来自不同纹理映射的值的技术可被纹理单元158使用。由于纹理单元能够为所有小块提供完全满足所请求的LODthresh的值,因此纹理单元158将针对小块1、小块3和小块4的“0K”反馈发送给着色器154。再次返回对图5的讨论,如果对于小块的LODmax不比所请求的LODthresh更详细(步骤506为否),则在步骤512,纹理单元158确定LODmax是否在LODthresh的一个级别内。如果是,则在步骤514,纹理单元158将对于该小块的LOD钳夹至刚好低于 LODthresh (S卩,比其粗略)的整数级别。换言之,纹理单元158供应比所请求的稍微较不详细的纹理像素。在步骤516,纹理单元158将“警告”反馈发送给着色器154以指示纹理存储器112当前不具有对于该小块的所请求的L0D,但该LOD是接近的。参考图6A,对于小块2、小块5,可将LOD 1至LOD 4存储在纹理存储器112中,但不存储LOD 0。由此,纹理单元158不能提供将与LOD 0和LODl之间的LOD相对应的值。 然而,纹理单元158能够使用LOD 1处的纹理映射来供应纹理像素,该LOD 1位于所请求的 LODthresh的一个级别内。这在图6A中通过刚好在对于小块2和小块5的LOD 1下面的虚线来表示。实际上,所使用的LOD本质上可与LOD 1相同,但出于说明目的而被示为稍微在 LODl下面。由于纹理单元158能够提供在所请求的LODthresh的一个级别内的值,因此纹理单元158将针对小块2和小块5的“警告”反馈发送给着色器154。因此,着色器巧4可采取导致针对这些小块的更大LOD被加载到纹理存储器158的步骤。注意,在LODthresh 的一个级别之内被用作一个示例,但可使用在LODthresh的某一其他数量(可能是分数值) 的级别之内。再次返回对图5的讨论,如果对于该小块的LODmax不在所请求的LODthresh的一个级别内(步骤512为否),则在步骤518,纹理单元158将发送“失败”反馈。参考图6B, 对于小块2,可将LOD 2至LOD 4存储在纹理存储器112中,但LOD 0和LOD 1都没被请求。 由此,纹理单元158不能基于所提供的地址来提供所请求的LODthresh的一个级别内的值。 在图6B中这通过没有对于小块2的虚线来表示。图6B还在LOD 2处具有对于小块2的 “失败”标签,以指示在这一示例中LOD 2不足够详细以用于纹理生成。注意,不要求对所有小块使用相同的LODthresh。在一个实施例中,着色器154 发送不同小块的不同LODthresh。如上所述,着色器巧4可发送被纹理单元158转换成小块的(s,t)地址的LODthresh。着色器1 可能发送对于每一小块的单个(例如恒定) LODthresh,或者另选地,着色器IM可能发送对于每一小块的多个值(例如,平滑值)。图6C和6D中的图示将被用于示出其中着色器IM发送平滑的值的各实施例。这些图示示出图2的生成LODthresh的步骤202的各实施例。在一个实施例中,着色器巧4基于纹理存储器112中对于每一小块实际可用的LOD来调整LODthresh。如图6C中描绘的,LOD阈值是平滑曲线,该平滑曲线对于不同小块具有不同值。此外,对于单个小块,LOD阈值可平滑地变化。例如,对于小块1,LOD阈值刚好在对于该小块的大多数的LODl以下;然而,LOD阈值平滑地下降至小块1的最右面部分处的LOD 2。可以看出,对于小块2,LOD 2是最大细节水平。由此,平滑LOD阈值曲线在LOD 1(用于小块 1的大部分)与LOD 2(用于小块2)之间提供平滑过渡。可以看出,LOD阈值在小块2与小块3之间平滑地过渡到LOD 0。随后,LOD阈值在小块3与小块4之间平滑地从LOD 0过渡到LOD 1,在那里LOD阈值保持不变。在图6C中描绘的实施例中,不要求纹理单元158发回诸如“0K”和“警告”等反馈。 着色器巧4可基于知道纹理存储器112中对于每一小块的最详细的LOD来选择LOD阈值的合适的值。由此,纹理单元112可能能够一直供应与LOD阈值匹配的值。换言之,实际返回纹理像素的值可具有与LOD阈值完全匹配的L0D。图6D是示出带有可变LODthresh的一个实施例的图示,该可变LODthresh不一定是比纹理存储器112中可用的更粗略的L0D。换言之,在纹理存储器112中可能存在或可能不存在符合LOD阈值的L0D。因此,纹理单元158可发送诸如“0K”、“警告”和“失败”等反馈。例如,对于小块1,LOD阈值是在LOD 0与LOD 1之间。然而,对于小块1,最详细的LOD 是LOD 1。因此,纹理单元158发送LOD 1处的着色器154的值(“实际L0D”)。同样,纹理单元158可将“警告”发送给着色器154以指示针对小块1所存储的LOD不像所请求的那样详细。类似地,对于小块2,最详细的LOD (L0D 2)与从着色器IM所请求的相比较不详细。因此,纹理单元158可发回LOD 2处的实际LOD连同对于小块2的最详细的LOD与所请求相比较不详细的警告。对于小块3,存在至少与所请求的LOD阈值一样详细的L0D。 因此,纹理单元158发送与LOD阈值大约相同级别处的实际LOD连同“0K”反馈。对于小块 4,可用的最详细的LOD (L0D 1)与对于至少一部分该小块的LOD阈值相比更不详细。注意, 对于小块4的最右面部分,LODthresh低于LODl (参考图6D)。由此,纹理单元158发送大约位于LOD 1的实际LOD连同警告。对于小块5,纹理单元158能够发送符合着色器巧4所请求的细节水平的实际L0D。因此,纹理单元158发送“0K”反馈。一个实施例在将新数据加载到纹理存储器112中时使用替换定址。图7描绘替换定址的一个实施例。具体而言,图3A中描绘的驻留小块阵列304已被移至图7中。在这一实施例中,不再需要的小块可从纹理存储器112中被移除,并且由其他小块来替换。即,先前使用的存储器区域可由新小块重新使用。在这一示例中,在LOD 0处,6x6驻留小块阵列 304中最左面的六个小块从纹理存储器112中被移除,并且由驻留小块阵列304中右侧的 6个小块来替换。小块706被描绘成六个新添加的小块中的一个。对于6x6驻留小块阵列 304,可在各较低LOD处进行类似的替换。由此,在LOD 1至LOD 4处,驻留小块阵列304被描绘成与图3A相比在图7中被移位。由于整个20x20小块阵列可被存储在LOD 5至LOD 12处,因此对于这些LOD不存在移位。注意,被替换的小块以及被添加的小块可以是整个mip映射栈或特定L0D。例如, 参考图;3B,306a的整个mip映射栈(从LOD 0至LOD 4)可被移除。作为另一示例,对于小块306a,仅LOD 0和LOD 1可被移除,而L0D2至LOD 4保持不变。作为又一示例,306b的小块可在LOD 0处被添加。注意,为方便起见,驻留小块阵列304被描绘成虚拟小块阵列302的连续区域。被添加到驻留小块阵列304的实际的新小块可以是虚拟小块阵列302的任何小块。此外,不要求驻留小块阵列304的小块都是相同纹理的一部分。因此,驻留小块阵列304中的新小块可与不同于所移除的小块的纹理相对应。同样,驻留小块阵列304中的新小块可与不同于驻留小块阵列304中其他剩余小块的纹理相对应。在某些实施例中,纹理单元108维护虚拟小块阵列302与驻留小块阵列304之间的指针,以便跟踪虚拟小块阵列302的什么部分被存储在驻留小块阵列304中以及它们被存储在什么地方。在一个实施例中,定址包括更新虚拟小块的被移除且被添加到驻留小块阵列304的指针。某些实施例包括被配置成实例化本公开的具体各方面的电路。例如,本公开中使用的术语电路可包括被配置成通过固件或开关来执行功能的专用硬件组件。在其他实施例中,术语电路可包括由实施可用于执行功能的逻辑的软件指令配置的通用处理单元、存储器等。在其中电路包括硬件和软件的组合的实施例中,实施者可以编写体现逻辑的源代码, 且源代码可以被编译为可以由通用处理单元处理的机器可读代码。选择硬件或是软件来实现具体功能可以是留给实现者的设计选择。更具体地,本领域技术人员可以明白软件进程可被变换成等价的硬件结构,而硬件结构本身可被变换成等价的软件进程。因此,对于硬件实现还是软件实现的选择是设计选择并留给实现者。此处,术语“机器实现的方法”包括由软件、硬件、或软件和硬件的组合执行的方法。例如,机器实现的方法的一些可通过执行处理器上的指令来执行,而机器实现的方法的一些可在无需执行处理器上的指令的情况下执行。图8描绘可以在图1的系统中使用的多媒体控制台100的示例框图。多媒体控制台100可被用于呈现计算机所生成的图像。多媒体控制台100包括具有一级高速缓存102、 二级高速缓存104和闪存R0M(只读存储器)106的中央处理单元(CPU) 101。一级高速缓存102和二级高速缓存104临时存储数据并因此减少存储器访问周期数,由此改进处理速度和吞吐量。CPU 101可以设置成具有一个以上的内核,以及由此的附加的一级和二级高速缓存102和104。诸如闪存ROM之类的存储器106可存储当多媒体控制台100通电时在引导过程的初始阶段期间加载的可执行代码。呈现图像的应用可在CPU 101上执行。图形处理单元(GPU) 108和视频编码器/视频编解码器(编码器/解码器)114形成用于高速、高分辨率图形处理的视频处理流水线。数据经由总线从图形处理单元108输送到视频编码器/视频编解码器114。视频处理流水线向A/V(音频/视频)端口 140输出数据,以便传输到电视机或其他显示器。存储器控制器110连接到GPU 108,以便于处理器对各种类型的存储器112,比如RAM(随机存取存储器)的访问。GPU 108可被用于实现着色器104和纹理单元108。存储器112可用作纹理存储器112。由此,存储器112可存储纹理mip映射。存储器112还可存储小块映射160。多媒体控制台100包括可在模块118上实现的I/O控制器120、系统管理控制器 122、音频处理单元123、网络接口 124、第一 USB主控制器126、第二 USB控制器1 和前面板 I/O子部件130。USB控制器126和128用作外围控制器142 (1)-142 (2)、无线适配器148、和外置存储器设备146(例如闪存、外置CD/DVD ROM驱动器、可移动介质等)的主机。网络接口(NW IF) IM和/或无线适配器148提供对网络(例如,因特网、家庭网络等)的访问并且可以是包括以太网卡、调制解调器、蓝牙模块、电缆调制解调器等的各种不同的有线或无线适配器组件中任何一种。提供系统存储器143来存储在引导过程期间加载的应用数据。提供了介质驱动器 144,其可以包括DVD/CD驱动器、硬盘驱动器、或其他可移动介质驱动器。介质驱动器144 可以是多媒体控制台100内部或外部的。应用数据可经由介质驱动器144访问,以由多媒体控制台100执行、回放等。介质驱动器144经由诸如串行ATA总线或其他高速连接等总线连接到I/O控制器120。系统管理控制器122提供涉及确保多媒体控制台100的可用性的各种服务功能。 音频处理单元123和音频编解码器132形成具有高保真度和立体声处理的对应的音频处理流水线。音频数据经由通信链路在音频处理单元123与音频编解码器132之间传输。音频处理流水线将数据输出到A/V端口 140以供外置音频播放器或具有音频能力的设备再现。前面板I/O子部件130支持暴露在多媒体控制台100的外表面上的电源按钮150 和弹出按钮152以及任何LED(发光二极管)或其他指示器的功能。系统供电模块136向多媒体控制台100的组件供电。风扇138冷却多媒体控制台100内的电路。CPU 101、GPU 108、存储器控制器110、和多媒体控制台100内的各个其他组件经由一条或多条总线互连,包括串行和并行总线、存储器总线、外围总线、和使用各种总线架构中任一种的处理器或局部总线。当多媒体控制台100通电时,应用数据可从系统存储器143加载到存储器112和/ 或高速缓存102、104中并在CPU 101上执行。应用可呈现在导航到多媒体控制台100上可用的不同媒体类型时提供一致的用户体验的图形用户界面。在操作中,介质驱动器144中包含的应用和/或其他媒体可从介质驱动器144启动或播放,以向多媒体控制台100提供附加功能。多媒体控制台100可通过将该系统连接到电视机或其它显示器(图1,162)而作为独立系统来操作。在该独立模式中,多媒体控制台100允许一个或多个用户与该系统交互、看电影、或听音乐。然而,随着通过网络接口 1 或无线适配器148可用的宽带连接的集成,多媒体控制台100还可作为较大网络社区中的参与者来操作。当多媒体控制台100通电时,可以保留指定量的硬件资源以供多媒体控制台操作系统作系统使用。这些资源可包括预留存储器(例如,16MB)、CPU和GPU周期(例如,5% )、 网络带宽(例如,SlAs)等等。因为这些资源是在系统引导时保留的,所以所保留的资源对应用而言是不存在的。具体地,存储器保留可以是足够大以包含启动内核、并发系统应用和驱动程序。 CPU保留可为恒定,使得若所保留的CPU使用不被系统应用使用,则空闲线程将消耗任何未使用的周期。对于GPU保留,通过使用GPU中断来显示由系统应用生成的轻量消息(例如,弹出窗口),以调度代码来将弹出窗口呈现为覆盖图。覆盖图所需的存储器量取决于覆盖区域大小,并且覆盖图可与屏幕分辨率成比例缩放。在并发系统应用使用完整用户界面的情况下, 优选使用独立于应用分辨率的分辨率。定标器可用于设置该分辨率,从而无需改变频率并引起TV重新同步。在多媒体控制台100引导且系统资源被保留之后,就执行并发系统应用来提供系统功能。系统功能被封装在上述所保留的系统资源中执行的一组系统应用中。操作系统内核标识是系统应用线程而非游戏应用线程的线程。系统应用可被调度为在预定时间并以预定时间间隔在CPU 101上运行,以为应用提供一致的系统资源视图。进行调度是为了把由在控制台上运行的游戏应用所引起的高速缓存分裂最小化。当并发系统应用需要音频时,则由于时间敏感性而异步调度音频处理给游戏应用。多媒体控制台应用管理器(如下所述)在系统应用活动时控制游戏应用的音频水平 (例如,静音、衰减)。输入设备(例如,控制器142(1)和142( )由游戏应用和系统应用共享。输入设备不是所保留的资源,但却在系统应用和游戏应用之间切换以使其各自具有设备的焦点。 应用管理器可控制输入流的切换,而无需知晓游戏应用的知识,并且驱动程序维持有关焦点切换的状态信息。参考图9,用于实现所描述的系统和方法的各组件的示例性系统可包括计算机 1100形式的通用计算设备。计算设备可被用于实现例如系统150的全部或一部分。计算设备1100只是合适的计算系统的一个示例,并且不旨在对所公开的主题的使用范围或功能提出任何限制。也不应将该计算设备解释为对示例性操作系统中示出的任一组件或其组合有任何依赖性或要求。在其最基本的配置中,计算机1000通常包括处理单元1002和存储器1004。在这一示例中,处理单元1002可用作用于运行主机应用的CPU以及用于呈现图像的GPU。纹理映射和小块映射可被存储在存储器1004中。取决于计算设备的确切配置和类型,存储器 1004可以是易失性的1004a (如RAM)、非易失性的1004b (如ROM、闪存等)或是两者的某种组合。另外,计算机1000还可包括大容量存储(可移动1012和/或不可移动1014),如磁 /光盘/带。类似地,计算机1000还可具有输入设备1017和/或诸如显示器之类(图1,162) 的输出设备1016。设备1000的其他方面可包括到其他设备、计算机、网络、服务器等的使用有线或无线介质的网络连接1020。尽管用结构特征和/或方法动作专用的语言描述了本主题,但是可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。本发明的范围由所附的权利要求进行定义。
权利要求
1.一种机器实现的方法,包括接收对纹理的纹理像素的请求,所述请求包括所述纹理的一个或多个部分的细节水平 (LOD)阈值(206);访问存储不同LOD处的纹理的多个小块的纹理存储器(507);以及基于小块LOD在所述纹理存储器中的可用性以及所述纹理的一个或多个部分的LOD阈值来供应所述纹理的纹理像素O10),所述供应包括如果所述多个小块的第一小块的所请求的LOD在所述纹理存储器中不可用,则将所述第一小块的LOD钳夹到与对应于所述第一小块的纹理的部分的所请求的LOD阈值相比粗略不超过一个级别的L0D(512、514)。
2.如权利要求1所述的机器实现的方法,其特征在于,还包括如果所述第一小块已被钳夹,则发送所述第一小块的LOD已被钳夹到与所请求的LOD 阈值相比粗略不超过一个级别的LOD的警告。
3.如权利要求1或2所述的机器实现的方法,其特征在于,将所述第一小块的LOD钳夹到与所请求的LOD阈值相比粗略不超过一个级别的LOD是由纹理单元来执行的。
4.如权利要求3所述的机器实现的方法,其特征在于,还包括着色器生成所述纹理的一个或多个部分的LOD阈值,所述生成包括生成与所述第一小块相对应的纹理的各部分的LOD阈值的多个值;以及将所述对纹理像素的请求中的纹理的一个或多个部分的LOD阈值提供给所述纹理单元。
5.如权利要求4所述的机器实现的方法,其特征在于生成所述纹理的一个或多个部分的LOD阈值包括生成在所述第一小块与所述小块的第二个之间具有平滑过渡的LOD阈值的曲线,该第二小块具有与所述第一小块的平均LOD 阈值不同的平均LOD阈值。
6.如权利要求1至5中的任一项所述的机器实现的方法,其特征在于,还包括 生成所述纹理的一个或多个部分的LOD阈值,所述生成包括基于对于所述小块中每一个的LOD在所述纹理存储器中的可用性来生成所述纹理的一个或多个部分的LOD阈值;以及提供所述对纹理像素的请求中的纹理的一个或多个部分的LOD阈值。
7.如权利要求1至6中的任一项所述的机器实现的方法,其特征在于,还包括 访问所述纹理中的小块的子集的钳夹细节水平(LOD)。将所述子集中的每一小块的mip映射栈存储在所述纹理存储器中,所述每一小块的 mip映射栈与该小块的所述钳夹LOD相对应;以及至少将对于与所述小块的子集的mip映射栈所覆盖的相比带有较少细节的任何LOD的整个纹理的mip映射栈存储在所述纹理存储器中。
8.一种系统,包括具有电路的图形处理单元(GPU) (108),所述电路被配置成接收对表示纹理的多个小块的纹理像素的请求O06),所述请求包括所述小块中每一个的每一小块细节水平(LOD)阈值,所述每一小块细节水平(LOD)阈值指定对于所述小块中每一个的所请求的L0D;访问存储不同细节水平(LOD)的所述多个小块的纹理存储器(507);以及基于所述小块LOD在所述纹理存储器中的可用性以及对于所述小块中每一个的每一小块细节水平(LOD)来供应所述多个小块的纹理像素010)。
9.如权利要求8所述的系统,其特征在于,所述电路还被配置成生成所述小块中每一个的每一小块细节水平(LOD)阈值,所述生成包括生成所述小块的第一小块的LOD阈值的多个值;以及提供对于在所述对纹理像素的请求中所述小块中每一个的每一小块细节水平(LOD) 阈值。
10.如权利要求8或9所述的系统,其特征在于生成单个小块的LOD阈值的多个值包括生成平滑曲线。
11.如权利要求10所述的系统,其特征在于生成所述小块中每一个的每一小块细节水平(LOD)阈值包括生成在所述第一小块与所述小块的第二个之间具有平滑过渡的LOD阈值的曲线,该第二小块具有与所述第一小块的平均LOD值不同的平均LOD阈值。
12.如权利要求11所述的系统,其特征在于,所述第一小块的LOD阈值与所述第二小块的LOD阈值在从所述第一小块过渡到所述第二小块处具有相同的值。
13.如权利要求8至12中任一项所述的系统,其特征在于,还包括生成对于所述小块中每一个的每一小块细节水平(LOD)阈值,所述生成包括基于对于所述小块中每一个的LOD在所述纹理存储器中的可用性来生成所述小块中每一个的LOD阈值;以及提供对于在所述对纹理像素的请求中所述小块中每一个的每一小块细节水平(LOD) 阈值。
14.如权利要求8至13中任一项所述的系统,其特征在于,提供所述多个小块的纹理像素包括如果对于所述小块中第一小块的所请求的LOD在所述纹理存储器中不可用,则将所述第一小块的LOD钳夹到与所述第一小块的所请求的LOD阈值相比粗略不超过一个级别的 LOD。
15.如权利要求14所述的系统,其特征在于,还包括发送所述第一小块的LOD已被钳夹到与所述第一小块的所请求的LOD阈值相比粗略不超过一个级别的LOD的警告。
全文摘要
本发明公开了GPU纹理小块的细节控制。公开了用于在图形处理单元(GPU)中处理纹理的系统和相关联的方法。纹理可在每一区域(例如小块)的基础上来管理,这允许对纹理存储器的高效使用。此外,可使用非常大的纹理。提供了用于纹理流传输以及稀疏纹理两者的技术。GPU纹理单元可被用于基于着色器指定的值来智能地钳夹(clamp)LOD。纹理单元可向着色器提供反馈以允许着色器基于是否已使用钳夹等来有条件地作出反应。可采用每一区域(例如,每一小块)的独立mip映射栈以允许非常大的纹理。
文档编号G06T1/00GK102314666SQ201110246458
公开日2012年1月11日 申请日期2011年8月15日 优先权日2010年8月16日
发明者A·W·克莱因, C·N·博伊德, C·佩珀, M·S·格罗斯曼 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1