图形处理的制作方法

文档序号:17331404发布日期:2019-04-05 22:06阅读:177来源:国知局
图形处理的制作方法

本发明涉及用于图形处理的系统和方法。



背景技术:

已知的图形处理流水线涉及纹理映射过程,其中通常为二维的纹理在被计算机图形系统渲染之前,被应用或者映射到例如为三维的形状或多边形的表面上。这总体上允许更逼真或精细的图像被渲染出。例如,可以通过对表示物体的一组图形图元(primitives)(诸如多边形)施加纹理来生成关于该物体的细节,以赋予物体纹理外观。

通常,纹理的分辨率不同于用于显示经渲染的图像的显示设备的像素的分辨率。例如,纹理元素(有时称为纹素(texels)(其可以表示纹理的特征或特性,诸如颜色或亮度值))的大小可以与像素大小不同。因此,在像素与纹素之间可能不存在一对一映射。例如,一个像素可以对应于多个纹素或者反之亦然。

为了对此进行补偿,纹理映射过程可以涉及纹理滤波以确定对应于像素的位置的值,例如纹理值。然而,这个位置可能不直接地对应于给定纹理空间中的纹素。例如,位置可能在两个邻近纹素之间(例如在像素小于纹素或者未与纹素对齐的情况下)或者位置可能覆盖包括多个纹素的区域(在像素大于纹素的情况下)。纹理滤波因此可以涉及插入围绕纹理空间中的位置的纹素以确定该位置处的值。例如,如果像素小于纹素,则纹理滤波可以涉及纹理缩小。相反地,如果像素大于纹素,则纹理滤波可以涉及纹理扩大。

这种纹理滤波过程可以涉及对纹素值执行加权求和。例如,纹理缩小过程(有时称为降尺度(downscaling))可以涉及将围绕待计算其值的位置的每个纹素与具有介于0与1之间的值的权重相乘并且然后对经加权纹素进行求和以计算出该位置处的值。

期望提供比已知系统和方法更高效或更灵活的用于图形处理(例如用于纹理映射)的系统和方法。

附图说明

从参考附图进行的仅作为示例给出的以下描述中,另外的特征将变得显而易见。

图1示意性地示出了根据示例的图形处理系统的示例;

图2示意性地示出了根据示例的图形处理流水线的示例;

图3示意性地示出了根据示例的图形处理器的组件的示例;

图4示意性地图示出根据示例的对纹理空间中的位置处的值的计算;

图5是示出了根据示例的计算设备的内部组件的示意图;

图6是示出了根据另外的示例的计算设备的内部组件的示意图;以及

图7是图示出根据示例的用于图形处理流水线的纹理映射的方法的流程图。

具体实施方式

参考附图,根据示例的系统和方法的细节将从以下描述中将变得显而易见。在本说明书中,出于说明的目的,阐述了某些示例的许多具体细节。在说明书中对“示例”或类似语言的提及意味着关于该示例所描述的特定特征、结构或特性被包括在至少一个示例中,但是不一定在其他示例中。还应该注意的是,出于便于解释和理解以示例为基础的概念的目的,示意性地描述了其中被省略和/或必要简化某些特征的某些示例。

本文描述的示例提供一种图形处理系统,包括用于存储表示纹理空间中的多个纹素的纹理数据的存储设备和耦合到该存储设备的图形处理器。图形处理器包括纹理映射单元,该纹理映射单元可操作来接收用于请求使用插值过程来计算纹理空间中的位置处的值的请求数据,所述请求数据包括表示用于输入到插值过程的权重的权重数据。纹理映射单元还可操作来与纹理数据一同处理权重数据以执行插值过程,从而计算出纹理空间中的位置处的值。

通过将权重数据与请求数据一起传递给纹理映射单元,可预先计算权重数据,而不是由纹理映射单元本身来计算权重数据。这提供了更大的灵活性,因为不同的权重(例如用于实现不同的插值算法)可被直接传递给纹理映射单元,而不必重新配置纹理映射单元。因此纹理映射单元可用于执行各种不同的插值算法,而无需针对每个不同的算法者而包括不同的硬件支持。因此,与出于在单元内部计算权重的目的而针对各种不同的插值算法包括专用硬件支持的纹理映射单元相比较,这因此可减少在硬件中实现纹理映射单元的面积开销。

将权重数据提供给纹理映射单元也可以通过减少在图形处理系统的各种组件之间(诸如在图形处理器的纹理映射单元与图形处理器的可编程着色器核心之间,该可编程着色器核心例如可以被认为对应于着色器处理单元)传送的数据量来提高图形处理系统的效率。例如,将多个纹素中的每一者从纹理映射单元的存储设备提取到着色器核心以用于处理,以便计算权重并执行插值,这通常涉及针对每个纹素进行的提取操作。这通常比本文描述的系统和方法效率低,在本文描述的系统和方法中,例如,单次提取被执行以将预先计算的权重传送到本身可执行插值过程的纹理映射单元。

为了将根据示例的系统和方法置于上下文中,将首先参考图1和图2描述随这些系统和方法一同使用的图形处理系统100和图形处理流水线200。

图1示意性地示出了图形处理系统100的示例。在图1的图形处理系统100中,在例如为中央处理单元(cpu)的主机处理器104上执行的应用102(诸如游戏)请求由相关联的图形处理器执行图形处理操作,所述关联的图形处理器在此示例中是图形处理单元(gpu)106。为了这么做,应用102生成由编程接口解译的应用编程接口(api)调用,所述编程接口在此示例中是用于gpu106的驱动程序108。驱动程序108在主机处理器104上运行。驱动程序108生成适当的命令至gpu106用以生成由应用102请求的图形输出。响应于来自应用102的命令而提供命令集给gpu106。命令可以用于生成要显示在耦合到主机处理器104和/或gpu106或者与主机处理器104和/或gpu106通信的显示设备上的帧。

图2示意性地示出了图形处理流水线200的示例。图形处理流水线200指示可以由诸如gpu之类的图形处理器执行的动作的序列。

在此示例中,gpu是基于瓦片(tile)的渲染器。gpu因此产生要生成的渲染输出数据阵列的瓦片。渲染输出数据阵列可以是输出帧。基于瓦片的渲染与立即模式渲染不同之处在于,整个渲染输出不是一次被处理的,而是该渲染输出被划分成多个较小的子区(或“区域”)。那些子区在本文中被称为瓦片。对每个瓦片单独进行渲染。例如,可以一个接一个地渲染每个瓦片。然后重新组合已渲染的瓦片以提供完整渲染输出以用于显示。在基于瓦片的渲染中,可以将渲染输出划分成规则大小和形状的瓦片。瓦片可以是正方形或另一形状。

可以被用于“布瓦”和“基于瓦片的”渲染的其他术语包括“砌砖(chunking)”,其中渲染瓦片被称为“砖”和“铲”渲染。出于方便将在下文中使用术语“瓦片”和“布瓦”,但是应该理解的是,这些术语旨在包含所有替代和等效术语和技术。

渲染输出数据阵列可以是意在供在显示设备(诸如屏幕或打印机)上显示使用的输出帧。渲染输出也可以例如包括意在供在稍后的渲染传递中使用的中间数据。这种渲染输出的示例是“渲染到纹理”输出。

当要显示一计算机图形图像时,可以首先将它定义为一组几何形状,例如一系列图元。图元的示例是多边形。这些几何形状然后在栅格化过程中被划分成图形片元(fragment)。接着进行的是图形渲染。在图形渲染操作期间,渲染器可以修改与每个片元相关联的数据,使得这些片元可被正确显示。此类数据的示例包括颜色和透明度。一旦片元全部行经渲染器,则其相关联的数据值就被存储在存储器中,以备输出之用。

图2示出了与根据示例的图形处理流水线200相关联的各种元件和流水线级。然而可以存在图2中未图示出的图形处理流水线的其他元件和级。

如图2中所示,图形处理流水线200包括许多级,包括顶点着色器(vertexshader)202、外壳着色器(hullshader)204、曲面细分器(tesselator)206、域着色器(domainshader)208、几何形状着色器(geometryshader)210、布瓦器(tiler)212、栅格化级(rasterizationstage)214、片元着色级(fragmentshadingstage)216、纹理映射级(texturemappingstage)218、混合级(blendingstage)220、瓦片缓冲器(tilebuffer)222以及下采样和写出级(downsamplingandwriteout)224。然而,图形处理流水线的其他布置是可能的。

顶点着色器202接收与针对要生成的输出所定义的顶点相关联的输入数据值。顶点着色器202处理这些数据值以生成一组相应的、顶点着色的输出数据值以供图形处理流水线200的后续级使用。

要处理的每个图元可以通过顶点集来定义和表示。用于图元的每个顶点可以使它与一组属性相关联。这组属性是用于顶点的一组数据值。这些属性可以包括位置数据和其他非位置数据(或变量“varying”)。非位置数据可以表示例如用于所讨论顶点的颜色、光、法线和/或纹理坐标。

顶点集是针对要由图形处理流水线生成的给定输出而定义的。要被处理(针对输出)的图元包括顶点集中的给定顶点。顶点着色操作将每个顶点的属性变换成针对后续图形处理操作所期望的形式。这可以包括例如将顶点位置属性从最初定义它们的世界或用户空间变换到将在其中显示图形处理系统的输出的屏幕空间。这也可以包括例如修改输入数据以考虑到要渲染的图像中的照明的效果。

外壳着色器204对面片(patch)控制点集执行操作并且生成称为面片常数的附加数据。

曲面细分级206对几何形状进行细分以创建外壳的更高阶表示。

域着色器208以与顶点着色器202类似的方式对由曲面细分级输出的顶点执行操作。

几何形状着色器210处理全部的图元(诸如三角形、点或线)。

顶点着色器202、外壳着色器204、曲面细分器206、域着色器208和几何形状着色器210执行几何形状操作(诸如变换和照明操作)和图元建立,以响应于提供给图形处理流水线200的命令和顶点数据而设立要渲染的图元。

一旦已经适当地设立了要渲染的所有图元,布瓦器212然后就确定要针对渲染输出已出于处理目的被划分成的每个瓦片处理哪些图元。为了这么做,布瓦器212将要处理的每个图元的位置与瓦片位置相比较,并且将图元添加到它确定图元可能潜在地落入的每个瓦片的相应图元列表。用于将图元分类并分箱(binning)到瓦片列表中的任何适合的且期望的技术(诸如确切分箱或边框分箱或介于这之间的任何分箱)可被用于布瓦过程。

一旦已经以这种方式为每次渲染瓦片准备好了要渲染的图元的列表(或“图元列表”),图元列表就被存储以供使用。图元列表允许系统标识当所涉及的瓦片被渲染时哪些图元将被考虑和渲染。

一旦布瓦器212已准备所有瓦片列表,则就可渲染每个瓦片。为此,每个瓦片由紧跟布瓦器212之后的图形处理流水线级处理。

当正在处理给定瓦片时,针对该瓦片待处理的每个图元被传递给栅格化器214。图形处理流水线200的栅格化器214进行操作以将图元栅格化成单独的图形片元以进行处理。为了这么做,栅格化器214将图元栅格化为采样点并且生成具有用于渲染图元的适当位置的图形片元。由栅格化器214生成的片元然后被向前发送到图形处理流水线200的其余部分以进行处理。

在示例中,可以对从栅格化器214接收到的片元执行z(或“深度”)测试以看是否可在此级(在图2中未示出)处丢弃(或“剔除”)任何片元。为了这么做,早期z和模板测试级(stencilteststage)可以将由栅格化器214发出的片元的深度值与已被渲染的片元的深度值相比较。已被渲染的片元的深度值可以被存储在作为瓦片缓冲器222(在下面进一步描述)的一部分的深度缓冲器中。由早期z和模板测试级执行的比较是为了确定新片元是否将被已经被渲染的片元遮挡。同时,可以执行早期模板测试,其中对照模板缓冲器中的值来比较片元的模板值。如果测试失败了,则可以剔除片元。但是,在其他示例中,可以省去早期z和模板测试级。

片元着色级216对它从栅格化器214接收到的片元执行适当的片元处理操作以生成适当渲染的片元数据。这个片元处理可以包括任何适合的片元着色过程,诸如对片元执行片元着色器程序以生成适当的片元数据、对片元施加纹理、对片元应用雾化或其他操作等。片元着色级216可以是可编程片元着色器。

在图2的示例中,片元着色器216将片元传递给纹理映射器218,所述纹理映射器218对片元施加纹理。经纹理化的片元然后被传递回给片元着色器216。

如可从图2看到的,图形处理流水线200包括许多可编程处理或“着色器”级,即顶点着色器202、外壳着色器204、域着色器208、几何形状着色器210和片元着色器216(其在此示例中包括纹理映射器218级)。这些可编程着色器级执行具有一个或多个输入变量并且生成输出变量集的相应着色器程序。可以针对要待处理的每个工作项(例如在顶点着色器202的情况下针对每个顶点)执行所涉及的着色器程序。可以针对待处理的每个工作项发布执行线程,并且该线程然后执行着色器程序中的指令以产生所期望的经着色的输出数据。

在片元着色器216之后,然后可能存在后期片元z和模板测试级(在图2中未图示),所述后期片元z和模板测试级除了别的之外还对已着色的片元执行流水线末尾深度测试以确定是否实际上会在最终图像中看到经渲染的片元。这个深度测试通常使用存储在瓦片缓冲器222中的z缓冲器中的片元的位置的z缓冲器值以确定新片元的片元数据是否应该替换已经被渲染的片元的片元数据。这可以涉及将由片元着色器216发布的片元的深度值与如存储在z缓冲器中的已经被渲染的片元的深度值相比较。这个后期片元深度和模板测试级也可以对片元执行后期α和/或模板测试。

从纹理映射器218输出的经纹理化的片元然后可以在混合器220中经受利用已经被存储在瓦片缓冲器222中的片元进行的任何混合操作。也可以在此级处执行对片元必需的任何其他剩余操作,诸如抖动等(未示出)。

最后,输出片元数据(或“值”)被写入到瓦片缓冲器222。输出片元的深度值也被适当地写入到瓦片缓冲器222内的缓冲器。瓦片缓冲器222存储颜色和深度缓冲器,其分别针对缓冲器表示的每个采样点存储适当的颜色等或深度。这些缓冲器存储片元数据的阵列,所述阵列表示整个渲染输出的一部分(在此示例中为瓦片),其中缓冲器中的相应样本值集对应于整个渲染输出的相应像素。例如,每个2×2样本值集可以对应于使用4倍多重采样的输出像素。

可以将瓦片缓冲器222设置为图形处理流水线200本地的随机存取存储器(ram)的一部分。换句话说,可以在片上存储器中设置瓦片缓冲器222。

来自瓦片缓冲器222的数据被输入到下采样写出单元224,然后被输出(或者“写回”)到外部存储器输出缓冲器,诸如显示设备(未示出)的帧缓冲器226。显示设备能包括例如包括像素的阵列的显示器,诸如计算机监视器或打印机。

下采样和写出单元224将存储在瓦片缓冲器222中的片元数据下采样到用于输出缓冲器和设备的适当分辨率,使得与输出设备的像素相对应的像素数据的阵列被生成。这产生形式为像素的输出值以用于输出到输出帧缓冲器226。

一旦渲染输出的瓦片已被处理并且其数据被导出到主存储器以供存储,例如到主存储器中的帧缓冲器226,下一个瓦片接着就会被处理,依此类推,直到足够的瓦片已被处理以生成整个渲染输出为止。然后针对下一个渲染输出重复该过程,依此类推。

图3示意性地示出了用于实现图2的图形处理流水线200的图形处理系统的一部分的示例。在图3的示例中,图形处理器228被配置为实现栅格化器214、片元着色器216、纹理映射器218(其可以被互换地称为纹理映射单元218)和混合器220。这些模块可以通过图形处理器228的硬件、通过软件或者通过硬件或软件的组合来实现。例如,可以指示图形处理器228通过图形计算机程序代码来实现这些模块,所述图形计算机程序代码可以由图形处理器228经由适合的编程接口接收。在下面参考图5对此进行更详细的描述。图形处理器228可以是任何适当地编程或配置的图形处理器228,诸如可从英国cb19nj剑桥富尔伯恩路110号arm有限公司买到的armmali-g51gpu。

由栅格化器214生成的图形片元由片元着色器216的片元前端217接收。片元着色器217向纹理映射单元218发送请求数据230。在诸如图3的示例中,图形处理器228包括用于处理或者实现与片元着色器217级相对应的指令的着色器处理单元(有时称为着色器核心)。在此类情况下,着色器处理单元可以被配置为将请求数据230发送到纹理映射单元218以指示纹理映射单元218执行插值过程。

请求数据230例如包括表示用于输入到插值过程的权重的权重数据。权重数据例如由片元着色器216的算术单元219计算。在下面进一步对权重数据的计算进行描述。请求数据230可以被认为对应于指示纹理映射单元218使用插值过程来计算纹理空间中的位置处的值的纹理化请求消息。请求数据230然后例如经由网络221被传递到纹理映射器218。当请求数据230被纹理映射器218接收到时,请求数据230的权重数据被例如写入到图形处理器228的权重存储装置238中。在图3的示例中,纹理映射器218包括权重存储装置238,但是在其他示例中权重存储装置238可以不同地位于图形处理器228内。

权重存储装置238可以被认为是图形处理器228的本地存储装置。例如,权重存储装置238可以包括图形处理器228的片上存储器或缓冲器中的至少一者。然而,权重存储装置238可以是图形处理器的或者可被图形处理器访问的任何适合的本地存储器。例如,权重存储装置238可以是或者包括图形处理器228的随机存取存储器(ram)或嵌入式动态随机存取存储器(edram),所述edram可以被集成在与图形处理器228的其他组件相同的芯片上。

图3的示例中的权重存储装置238包括用于存储作为请求数据230的一部分而接收的权重数据的所谓的“权重缓冲器”。权重缓冲器可以被认为是用于暂时地存储权重数据的存储装置或存储器。权重缓冲器例如是随机存取存储器(ram)。由于图3中的权重存储装置238的权重缓冲器被包括在纹理映射器218中而不是在诸如主或系统存储器之类的外部位置中,所以可以从权重缓冲器中(并且因此从权重存储装置238中)比从主存储器中更快地索取权重数据。

图3的示例中的纹理映射单元218用纹理化响应消息进行响应,所述纹理响应消息例如包括表示使用权重数据对纹理数据插值得到的纹理空间中的位置处的滤波样本的值。例如,在纹理表示纹理空间中的颜色分布的示例中滤波样本可以是滤波颜色。纹理映射单元218可以是片元着色器216的协处理器,其可以对应于图形处理器着色器核心。可替代地,纹理映射单元238可以是包括图形处理器228的计算机设备的中央处理器的协处理器。

除了包括权重数据之外,请求数据230还可以包括表示纹理空间中的将对值进行插值的位置的位置数据。例如,位置数据可以表示纹理空间中的位置的坐标或将对纹理进行采样的坐标。位置数据也可以被存储在第一存储装置238中,例如存储在权重缓冲器中或者在单独的或不同的缓冲器或缓存中。

此示例中的纹理映射单元218通过使用输入参数提取单元232来查找纹理描述符和采样器描述符而开始。可以例如从可被图形处理器228访问或者包括在图形处理器228内的其他存储装置(在图4中未单独地图示)中提取纹理描述符和采样器描述符。例如,可以存在用于存储纹理描述符的纹理描述符缓存和用于存储采样器描述符的采样器描述符缓存。纹理描述符通常包括与纹理它本身的特性有关的信息,诸如纹理大小(以纹素为单位)、维度(诸如一维、二维或三维)、或纹素格式。采样器描述符例如包括与插值过程的参数或特性有关的信息。此类特性可以包括纹理滤波模式、坐标循环模式(coordinatewrapmode)(其例如指示纹理的边缘将如何被处置)、或lod(细节程度)计算参数。

处理然后在纹理映射单元218的坐标计算单元234中继续。在此示例中,请求数据包括位置数据并且坐标计算单元234将位置数据转换成用于从存储装置访问插值用的纹理数据的适当格式。例如,在位置数据具有浮点格式并且表示纹理空间中的坐标的情况下,位置数据可以由坐标计算单元234转换为纹素索引。然而,位置可以不直接地对应于纹理空间中的纹素。例如,如果具有索引0的第一纹素位于坐标(0,0)处,具有索引1的第二纹素位于坐标(1,0)处,具有索引2的第三纹素位于坐标(0,1)处,具有索引3的第四纹素位于坐标(1,1)处并且位置数据表示坐标(0.5,0.5),则位置数据对应于第一、第二、第三和第四纹素之间的位置。因此,可能不能够标识位置数据的整数纹素索引。然而,在此类情况下,可以使用坐标计算单元234来计算用于对应于纹理空间中的包括该位置的区域的多个纹素的纹素索引。所述多个纹素中的纹素的数量例如取决于由输入参数提取单元232获得的参数中的至少一者。在图4中进一步图示的这个简单示例中,所述多个纹素中的纹素的数量是四个,但是在其他示例中其他数量是可能的。坐标计算单元234因此可以用于标识用于具有坐标(0,0)、(1,0)、(0,1)和(1,1)的横跨包括位置(0.5,0.5)的区域的四个纹素的纹素索引。纹素索引随后可以被用于计算表示所述多个纹素的纹理数据的存储器地址。

在图3的示例中,数据提取单元236用于读取纹理数据。在此示例中,数据提取单元236包括从纹理映射单元218的第一存储装置240中读取纹理数据的纹理缓存查找单元237,所述第一存储装置240在图3的示例中构成数据提取单元236的一部分。然而,如将了解的,在其他示例中,第一存储装置240可以位于纹理映射器218的或图形处理器228的不同组件或单元内。第一存储装置240可以是缓存,诸如所谓的用于存储纹理数据的“纹理缓存”。缓存可以被认为是用于存储数据以将来使得能实现对数据的更快速索取的存储装置或存储器。例如,缓存可以存储也被存储在主存储器中的数据的副本,但是可以是比主存储器更靠近处理器的更小或更快的存储器。因此,从缓存比从主存储器访问数据可能花费更少的时间。第一存储装置240可以是ram或edram并且可以被认为是图形处理器228的片上存储器。第一存储装置238通常像通过图3中的线223所指示的那样可由纹理映射器的组件访问。第一存储装置240可以包括多个存储组件,诸如图形处理器228的多个缓存。虽然在一些情况(诸如图3的示例)下,第一存储装置240可以专用于图形处理器228,但是在其他情况下,第一存储装置240可以是与其他处理器共享的存储装置的一部分。例如,第一存储装置240可以形成也可被主机中央处理器或中央处理单元(cpu)访问的主系统ram的一部分。在此类情况下,第一存储装置240可以被认为是对图形处理器228可访问或可见的共享存储器的一部分。纹理缓存查找单元237通常基于使用坐标计算单元234计算出的存储器地址来定位第一存储装置240中的纹理数据。

图3的图形处理系统也包括第二存储装置242,所述第二存储装置242在此示例中在图形处理器228外部。例如,第二存储装置242可以是系统存储器,例如主存储装置,或运行图形处理系统的主机系统的主存储器。第二存储装置242可以是或者包括易失性存储器(诸如随机存取存储器(ram),例如静态ram(sram)或动态ram(dram))和非易失性存储器(诸如只读存储器(rom))或诸如闪速存储器之类的固态驱动器(ssd)中的至少一者。示例中的第二存储装置242可以包括另外的存储设备,例如磁、光学或磁带介质、紧致盘(cd)、数字通用盘(dvd)或其他数据存储介质。第二存储装置242可以从或者不可从图形处理系统移除。

在图3的示例中,数据提取单元236也可操作来从位置数据中标识与纹理空间中的包括位置的区域相对应的多个纹素并且确定纹理数据中表示所述多个纹素中的至少一者一部分不在第一存储装置240中。换句话说,可能存在缓存未命中,其中存在从第一存储装置240(例如第一存储装置240的纹理缓存)中读取全体纹理数据的失败尝试。例如,可能存在数据提取单元236的纹理缓存查找单元237中的缓存未命中。如果数据提取单元236确定纹理数据的部分不存在于第一存储装置240中,则数据提取单元236从第二存储装置242中提取纹理数据的部分并且将纹理数据的部分存储在第一存储装置240中。在图3的示例中,数据提取单元236的主存储器查找单元(在图3中未单独地示出)从第二存储装置242中提取纹理数据的部分。

在一些示例中,请求数据是第一请求数据,值是第一值,位置是第一位置,权重数据是第一权重数据,权重是第一权重,纹理数据是第一纹理数据并且所述多个纹素是第一多个纹素。在这些示例中,纹理映射单元218可以操作来,在正在从第二存储装置242中提取第一纹理数据的部分的同时,接收用于请求使用插值过程来计算纹理空间中的第二位置处的第二值的第二请求数据,所述第二请求数据包括表示用于输入到插值过程的第二权重的第二权重数据,连同第二纹理数据一起处理第二权重数据以执行插值过程,从而计算出纹理空间中的第二位置处的第二值,并且,在第一纹理数据的部分被存储在第一存储装置240中之后,连同第一纹理数据处理第一权重数据以执行插值过程,从而计算出纹理空间中的第一位置处的第一值。

换句话说,如果由纹理映射单元218处理的第一请求数据触发缓存未命中(例如如果第一纹理数据不存在于第一存储装置240中),则纹理映射单元218可处理另外的纹理化消息,诸如第二请求数据。例如,纹理缓存查找单元237可从第一存储装置240中(例如从纹理缓存中)提取第二纹理数据。在此类情况下,第一请求数据可以被存储在图形处理器228的第三存储装置(在图3中未图示)中。例如,第一请求数据可以被存储在诸如停驻缓冲器之类的缓冲器(可以被认为是用于存储未决存储器访问请求的存储装置或存储器)中,同时请求的数据被从一个位置移动到另一位置,诸如从一个存储装置移动到另一存储装置。停驻缓冲器可以构成权重存储装置238的一部分,或者可以是另一个或单独的缓冲器。一旦从例如为系统或主存储器的第二存储装置242中索取到第一纹理数据的遗漏部分,所对应的缓存行的状态就可以被改变为valid(有效)。在确定这个后,可以将第一请求数据从缓冲器传送到纹理滤波单元244以用于进一步处理。

纹理滤波单元244通过连同纹理数据一起处理权重数据来执行插值过程。纹理滤波单元244例如从权重存储装置238中(例如从权重缓冲器中)读取权重数据并且从第一存储装置240(例如纹理缓存)中读取纹理数据。纹理映射器的各种组件通常像通过图3中的线223所指示的那样互连。这允许在各种组件之间传送数据,例如可以从权重存储装置238传送权重数据并且可以将纹理数据从第一存储装置240传送到纹理滤波单元244。在图3的示例中,用于插值过程的权重在纹理映射单元218外部计算,而不是由纹理映射单元218本身计算。在这种情况下,替代地在纹理化请求消息(通过包括权重数据的请求数据来表示)中提供权重(通过权重数据来表示)。权重数据可以在纹理数据被提取的同时被存储在图形处理器228的存储装置(诸如上面所描述的权重存储装置238)中,所述存储装置可以是或者包括权重缓冲器。权重缓冲器可以是图形处理器228的既存缓冲器,诸如阴影参考映射缓冲器。因此,本文描述的方法可以通过例如使用与用于图形处理器的编程接口相关联的图形计算机程序代码更改既存图形处理器的配置来实现,而不必更改图形处理器的底层硬件。然而,在其他示例中,可以修改图形处理器的硬件以用于与本文描述的方法一起使用。例如,用于存储权重数据的既存缓冲器的大小可以增加例如大约10%,以使得能够存储权重数据。

插值过程的示意性示例被图示在图4中。图4示出了对纹理空间中与纹素位置不对应的位置246处的值的计算。因此,位置246例如位于纹理空间中的非整数坐标处,其中纹素通常可以通过纹理空间中的整数坐标来表示。在图4中,纹理数据表示对应于纹理空间中包括位置246的区域的四个纹素248a、248b、248c、248d。例如,该区域可以被认为是通过由多个纹素(在这种情况下,四个纹素248a、248b、248c、248d)的组合形成的区的周边包围或界定的二维区。例如通过提取与具有与位置246的坐标的整数部分相同或者在到位置246的坐标的整数部分的固定或预定范围内的位置(例如坐标)的多个纹素248a、248b、248c、248d相对应的纹理数据,可例如基于位置数据从图形处理器228的第一存储装置238获得表示多个纹素248a、248b、248c、248d的纹理数据。参考位置246具有坐标(0.5,0.5)的以上简单示例,第一、第二、第三和第四纹素248a、248b、248c、248d分别具有坐标(0,0)、(1,0)、(0,1)和(1,1),可以将位置246的坐标的整数部分视为(0,0)。在这种情况下,可以将所述多个纹素视为在位置246的坐标(即(0,0)、(1,0)、(0,1)和(1,1))的整数部分的0和1个单位内的那四个纹素。然而像技术人员将了解的那样,可以在其他示例中使用其他方法来提取表示多个纹素248a、248b、248c、248d的纹理数据。所述多个纹素可包括任何数量的纹素并且因此可以占据纹理空间中的任何大小的区域。然而,通常,所述多个纹素是四个纹素,在两纹素乘两纹素块中。

使用表示多个纹素的纹理数据,可执行插值以计算位置的值。然后可以将位置的值适当地映射到像素以供由显示设备显示。

插值过程将表示权重的权重数据视为输入。权重例如与通过纹理数据表示的对应纹素具有一对一映射。例如,每个纹素可以具有对应权重。然而,在其他示例中,在权重与纹素之间可以存在一对多或多对一映射。插值过程可以是任何适合的插值过程,其可以被称为滤波过程,诸如双线性插值、双三次插值、双边滤波、lanczos滤波或sinc滤波。

作为示例,权重可能与纹理空间中的位置无关。例如,在插值过程是下定标的情况下,四个权重中的每一个均可以等于0.25。因此,可以通过向量或阵列w来表示权重:

w=(0.25,0.25,0.25,0.25)

在这种情况下,权重可以由片元着色器216例如使用图形处理器的着色器核心(其例如是着色器处理单元)来预先计算,并且如上所述与请求数据230一起被传送到纹理映射单元218,而不是由纹理映射单元218计算。

然而,在其他示例中,权重可以不是常数。例如,权重可以取决于与将通过插值过程来计算值的位置相对应的像素的参数或特性。例如,权重可以取决于与将计算值的位置相对应的像素的深度值或像素的深度值的函数,诸如像素的高分辨率深度值与像素的低分辨率深度值之间的深度差的函数(例如基于存储在z缓冲器中的深度数据)。这可以是例如插值过程涉及双边上定标的情况。可替代地,权重可以基于公式,诸如三角公式(像lanczos和sinc滤波情况一样)。

不管权重如何被计算,在示例中四个纹素248a、248b、248c、248d中的每一个均可以通过阵列w的对应元素相乘或者加权,然后可以将加权纹素值一起相加或求和以计算位置处的值。例如,其中左上部、右上部、左下部和右下部纹素的纹素值分别被表示为t1、t2、t3、t4并且权重阵列被表示为:

w=(w1,w2,w3,w4)

纹素空间中的位置处的输出纹素值tout可以被计算为:

tout=t1w1+t2w2+t3w3+t4w4

如上面所说明的,将权重数据与请求数据一起传递给纹理映射单元允许权重数据被预先计算而不是由纹理映射单元它本身计算。这提供更大的灵活性,因为不同的权重(例如用于实现不同的插值算法)可被传递给纹理映射单元,而不必重新配置纹理映射单元。这允许纹理映射单元被用于各种不同的插值算法,而无需针对不同的算法中的每一个包括不同的硬件支持。

在此示例中,权重数据表示多个权重值,其中所述多个权重值的和等于一。然而,在其他示例中,纹理滤波单元244可以被配置为接受不满足此条件的权重值。例如,所述多个权重值的和可以小于零或者大于一,或者所述多个权重值的和可以在零与一之间或者等于零。这为可以由纹理滤波单元244执行的插值过程提供进一步灵活性。

类似地,尽管在此示例中权重数据表示正数,然而在其他示例中权重数据可以表示具有负值的至少一个权重。

权重数据可以具有可以被认为是中等精度格式的东西,诸如fp16格式(有时称为半精度浮点格式)。这例如允许纹理映射过程被足够快速地执行而不遭受显示输出的降低质量。然而,在其他示例中,权重数据可以具有更高精度格式,诸如fp32格式(有时称为单精度浮点格式)。在仍然另外的示例中,权重数据可以是整数。例如,权重可以具有有符号整数格式或无符号整数格式,例如具有8位有符号或无符号整数格式。

与上面参考图1至图4所描述的图形处理流水线一起使用的计算设备300的内部组件的示意图被图示在图5中。图5的与先前图的对应特征相同的特征被标记有相同的附图标记;对应描述将被视为适用。

计算设备250例如是具有适合的处理能力以实现本文描述的图形处理流水线的任何电子设备。计算设备250可以是或者包括手机(即移动电话,例如智能电话)、平板、膝上型或个人计算机、个人数字助理,以及诸如游戏控制器的各种其他电子设备。

在图5的示例中,计算设备250耦合到显示设备252,以用于显示由图形处理流水线产生的图像。显示设备252可以在内部耦合到计算设备250,同时显示设备252形成计算设备250它本身的一部分。例如,显示设备252可以是诸如智能电话、平板、膝上型或台式计算机或个人数字助理的计算设备250的显示屏幕。可替代地,显示设备252可以是耦合到计算设备250的外部设备,例如经由高清晰度多媒体接口(hdmi)电缆耦合到膝上型电脑、台式计算机或游戏控制台的电视屏幕或计算机监视器。显示设备250可以是任何适合的显示设备,诸如例如液晶显示(lcd)设备的透射式或半透射式显示设备、电润湿显示设备或电泳显示设备。可替代地,显示设备可以是显示设备的像素或图片元件发光的显示设备,诸如有机发光二极管(oled)显示设备或等离子体显示设备。

计算设备250包括可以与参考图3所描述的图形处理器228和第二存储装置242类似或相同的图形处理器328和第二存储装置342。中央处理器254通信地耦合到图5的计算设备250中的第二存储装置242,其在此示例中是计算设备250的主存储器。计算设备250也可以包括至少一个另外的处理器(未图示)。图5的示例中的中央处理器250可以包括被设计来执行本文描述的功能的微处理器、通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或其任何适合的组合。处理器也可以作为计算设备的组合(例如,dsp和微处理器的组合)、多个微处理器、结合dsp核心的一个或多个微处理器或任何其他这种配置被实现。

为了清楚,省略了图5的图形处理器328的一些组件。然而,图5的图形处理器328的片元着色器316和纹理映射单元318可以与参考图3所描述的片元着色器216和纹理映射单元218类似或相同。然而,在此示例中,片元着色器316包括权重选择模块256,可操作来从多个权重数据集(在此示例中为第一权重数据集258、第二权重数据集260和第n权重数据集262)中选择权重数据。所述多个权重数据集可以通过图形处理器328的存储装置来存储或者可被图形处理器328访问,例如在查找表中。在此示例中,权重选择模块256通过与用于图形处理器328的编程接口264相关联的权重选择计算机程序代码来表示。编程接口264可以例如由应用(诸如上面参考图2所描述的应用102)使用,以使用高级着色器编程语言(诸如着色语言(glsl)、高级着色语言(hlsl)、开放计算语言(opencl)等)来提供要作为图形处理流水线的一部分而执行的着色器程序,诸如纹理映射程序。例如,应用102可以指示图形处理器328经由编程接口264将权重选择模块256实现为图形处理流水线的一部分。权重选择计算机程序代码因此可操作来指示图形处理器328在由图形处理器3处理时实现权重选择模块256。换句话说,在此示例中,权重选择模块256用软件实现。图5的权重选择模块256是与片元着色器相关联的软件例行程序。因此,在此示例中,权重选择计算机程序代码由图形处理器328的图形处理器着色器核心执行,所述图形处理器着色器核心在本文中可以被称为着色器处理单元。图形处理器着色器核心例如是用于执行图形处理流水线的与着色有关的级(诸如片元着色器316级)的图形处理器328的硬件。因此,在图5中,着色器处理单元是用于执行指令以实现片元着色器316的一个或多个处理器。权重选择计算机程序代码可以由片元着色器316的算术单元(在图5中未示出)执行或者作为其一部分被执行,所述算术单元可以进而由着色器处理单元执行或者使用着色器处理单元来执行。然而,在其他示例中,权重选择模块可以用硬件或硬件和软件的组合加以实现。例如,图形处理器328的着色器处理单元可以被配置为用硬件实现权重选择模块256,而不用经由软件配置或者以其他方式指示。

权重选择模块256可以操作来基于输入选择权重数据,所述输入可以例如被设置为默认值或预定值以选择默认权重数据集或者可以被更改。例如,为了特定目的或者为了与特定应用一起使用而配置图形处理流水线的用户或开发者可以通过适当地配置权重选择模块256以选择所期望的权重数据来选择要使用的权重数据。所选择的权重数据然后可以(例如经由请求数据)作为纹理化请求消息的一部分被传送到纹理映射器318并且存储在图形处理器328的权重存储装置338中,例如在图形处理器328的纹理映射单元318的权重缓冲器中。

在此和其他示例中,图形处理系统可以包括与编程接口264相关联的图形计算机程序代码,所述图形计算机程序代码可操作来经由编程接口264指示图形处理器328基于包括权重数据的请求数据执行插值过程。图形计算机程序代码因此可以包括可操作来接收纹理数据、表示纹理空间中的位置的位置数据和权重数据作为输入的纹理映射计算机程序代码,所述纹理映射计算机程序代码可操作来经由编程接口264指示图形处理器328执行插值过程。

作为说明性示例,可以将表示纹理映射计算机程序代码的伪代码陈述为:

vec4result=tex_weights(texture,sampler,tex_coord,weights)其中“result”是插值过程的输出,“tex_weights”表示图形处理器328使用权重来执行插值过程的指令,“texture”指示将被插值的纹理,“sampler”指示纹理将如何被插值并且例如提供要作为纹理映射过程的一部分而使用的各种参数,诸如坐标是否被归一化、边缘将被如何处置等,“tex_coord”指示在纹理中要采样的对方,并且“weights”表示作为请求数据的一部分而提供的权重数据。

因此,在诸如此类的示例中,只需要一条指令(“tex_weights”指令)来执行插值过程。这些示例因此可以比要求四条指令来提取用于插值的四个纹素(例如从图形处理器的存储装置到主存储器)并且需要四条算术指令来基于四个纹素执行插值的其他示例更高效。

为了以这种方式指示图形处理器328,图形计算机程序代码可以由着色器语言编译器转换为用于目标图形处理流水线的二进制代码,例如以供由图形处理器328执行,例如由图形处理器328的着色器核心执行。这可以包括在编译器内创建程序的一个或多个内部中间表示。编译器可以例如是驱动程序108(其可以例如与图5中所示的编程接口264相同或者为其一部分)的一部分,同时存在使编译器运行的特殊api调用。编译器执行因此可被视为由驱动程序响应于由应用102生成的api调用而做的绘图调用准备的一部分。例如,可以在运行时编译图形计算机程序代码。

在示例中,图形计算机程序代码可以直接地或显式地指示图形处理器328使用tex_weights指令。然而,在其他示例中,图形计算机程序代码可以不显式地指示图形处理器328使用tex_weights指令。替代地,编译器可以被配置为在图形计算机程序代码的编译期间从tex_weights指令或用于执行插值过程的另一指令或指令序列(例如,权重数据由纹理映射单元318而不是由片元着色器316计算的指令)中选择。在这些情况下,编译器可以选择例如权重计算可作为片元着色器316级的一部分被执行(例如权重数据与纹理采样位置无关,其中纹理采样位置例如对应于将对值进行插值的纹理空间中的位置)的tex_weights指令。

图5的示例中的计算设备250的组件使用系统总线266来互连。这允许在各种组件之间传送数据。例如,纹理映射单元318的输出可以被最初存储在图形处理器328的第一存储装置340中或者在图形处理器328的不同存储装置中并且随后经由系统总线266从第一存储装置340发送到显示设备接口268以用于传送到显示设备252以供显示。显示设备接口268可以包括显示端口和/或内部电子设备接口,例如其中显示设备252是计算设备250的一部分,诸如智能电话的显示屏幕。因此,当由计算设备250的处理器(诸如中央处理器254)经由显示设备接口268指示时,显示设备252将显示渲染的图像。

尽管在图5中未示出,然而图5的计算设备250也可以包括用于从服务器设备接收数据(诸如图像数据)的网络接口。计算设备250的网络接口可以包括软件和/或硬件组件,诸如虚拟网络接口、以太网端口、软件驱动程序和/或与网络硬件交互的通信栈。

与上面参考图1至图4所描述的图形处理流水线一起使用的另一个示例计算设备350的内部组件的示意图被图示在图6中。图6的类似于图5的对应特征的特征被标记有相同的附图标记但是递增了100;对应描述将被视为适用。

图6的计算设备350类似于图5的计算设备250但是包括可操作来基于预定算法计算权重数据的权重计算模块270。类似于图5的权重选择模块256,可以存在与用于图形处理器428的编程接口364相关联的权重计算程序代码。权重计算计算机程序代码可操作来指示图形处理器428实现权重计算模块270。因此,在此示例中,权重计算模块270用软件实现。例如,至于权重选择模块256,权重计算模块270可以用软件实现,例如作为由图形处理器着色器核心执行的软件,所述图形处理器着色器核心在本文中可以被称为着色器处理单元,例如作为片元着色器416级的一部分。例如,权重计算计算机程序代码可由片元着色器416(在图6中未示出)的算术单元执行或者作为其一部分被执行,所述算术单元可以进而由着色器处理单元执行或使用着色器处理单元来执行。然而,在其他示例中,权重计算模块270可以通过图形处理器428的不同组件或单元来实现或者可以用硬件或硬件和软件的组合加以实现。例如,图形处理器428的着色器处理单元可以被配置为用硬件实现权重选择模块256,而不用经由软件配置或者以其他方式指示。

可以从多个不同的算法中选择预定算法。这被示意性地示出在图6中,其中片元着色器416包括用于由权重计算模块270选择的第一算法272、第二算法274和第n算法276。权重计算模块270的输出是权重数据,所述权重数据例如由图形处理器428经由系统总线366接收作为请求数据的一部分,并且被存储在图形处理器428的纹理映射器418的权重存储装置438中。

如上面针对图5的权重选择模块256所描述的,预定算法可以由图形处理流水线的用户或开发者配置或者依靠图形处理流水线的预期用途来选择。

权重计算模块270例如可操作来确定通过权重数据表示的权重值在预定范围外并且处理权重数据以将权重值设置为预定范围的最小值或最大值。例如,如果预定范围是-2到+2但是计算出的权重是+2.5,则可以将所计算出的权重调整为+2(预定范围的最大值)。在此类情况下,可以取决于最小值或最大值中的哪一个最接近于权重值而将权重值设置为预定范围的最小值或最大值。因此,低于最小值的权重值将被设置为最小值并且高于最大值的权重值将被设置为最大值。

图7是图示根据示例的用于图形处理流水线的纹理映射的方法的流程图。图7的方法涉及在块500处使用图形处理流水线的纹理映射单元来接收用于请求使用插值过程来计算纹理空间中的位置处的值的请求数据,所述请求数据包括权重表示用于输入到插值过程的权重的数据。图7的方法还包括在块502处使用纹理映射单元来连同表示纹理空间中的多个纹素的纹理数据一起处理权重数据以执行插值过程,从而计算出纹理空间中的位置处的值。可以使用本文描述的图形处理流水线或系统中的任一个来实现图7的方法。

在另外的示例中,图7的方法可以包括在接收请求数据之前,从多个权重数据集中选择权重数据。例如,可以使用诸如参考图5所描述的权重选择模块的权重选择模块来选择权重数据。额外地,图7的方法可以包括使用第一算法来计算所述多个权重数据集的第一集合并且使用与第一算法不同的第二算法来计算所述多个权重数据集的第二集合。所述多个权重数据集的第一集合和第二集合可以例如使用诸如上面参考图6所描述的权重计算模块来计算。

以上示例将被理解为本发明的说明性示例。设想了另外的示例。在图3的示例中,纹理映射器218包括权重存储装置238和第一存储装置240。然而,在另外的示例中,权重存储装置238和第一存储装置240中的一个或两个可以位于图形处理器228的不同的组件或单元内,或者权重存储装置238和第一存储装置240可以被集成或者形成同一存储系统的一部分。

在以上示例中,对接收数据作为计算机程序代码的输入的引用也被设想为包括接收对数据的指针或引用或允许数据位于存储器内的输入作为输入。如技术人员将了解的,指针例如指代或者“指向”存储器中存储有数据的特定位置或地址。因此,可基于指针从存储装置中的正确地址获得数据。例如,纹理映射计算机程序代码可以接收纹理描述符指针作为输入而不是到纹理数据的指针或纹理数据它本身。然而,如本文所描述的,这将被认为类似于或相当于接收纹理数据它本身作为纹理映射计算机程序的输入。类似地,可以接收到位置数据和权重数据的相应指针中的一个或两个作为纹理映射计算机程序代码的输入;这将被认为类似或相当于纹理映射计算机程序代码直接地接收位置数据和权重数据。换句话说,接收数据作为输入将在本文中被解释为也包含接收对数据的指针或引用。

应该注意的是,这些图仅仅是示意的,并且例如,在实践中相同图中图示的功能单元可以共享重要的硬件电路,即使它们可以作为单独的单元被示意性地示出。也应了解的是,这些图中的级、元件和单元等中的每一个均可以视需要被实现,并且将因此包括例如用于执行所关联的操作和功能的适当的电路和/或处理逻辑等。

应当理解的是,关于任何一个示例所描述的任何特征可以被单独使用,或者与所描述的其他特征相结合地使用,并且也可以与任何其他示例的一个或多个特征或任何其他示例的组合相结合地使用。此外,在不脱离所附权利要求的范围的情况下,也可以采用上面未描述的等同物和修改。

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