数据处理系统的制作方法

文档序号:12748838阅读:187来源:国知局
数据处理系统的制作方法与工艺

本发明涉及数据处理系统,并且尤其涉及用于在图形处理系统的图形处理单元中执行图形处理操作的结构。



背景技术:

图形处理通常以流水线方式进行,一个或更多个流水线阶段对数据进行操作以生成最终渲染输出,例如,所显示的帧。许多图形处理流水线现在包括一个或更多个所谓的“着色”阶段,通常称为“着色器”。例如,图形处理流水线可以包括几何着色器、顶点着色器和片段(像素)着色器中的一种或更多种,并且通常是全部。这些着色器是对输入数据值执行着色器程序以生成期望的一组输出数据(例如,在片段着色器的情况下,适当着色并渲染的片段数据),以由图形流水线的剩余部分进行处理和/或用于输出的处理阶段。

图形“着色器”由此通过针对要生成的图形输出中的各个图形项目,诸如渲染目标,例如帧(关于这一点“项目”通常是顶点或采样位置(例如,在片段着色器的情况下)运行小程序来进行图形处理。这通常使高度平行性成为可能,因为典型的渲染输出(例如,帧)特征在于相当大数量的顶点和片段,各顶点和片段可以被独立处理。

在图形着色器操作中,各“项目”将借助执行线程来处理,执行线程将针对考虑之中的图形“项”执行考虑之中的着色器程序。

现代图形处理单元(图形处理器)因此通常包括一个或更多个可编程执行单元,可编程执行单元与一个或更多个图形专用加速器(处理单元)一起可以执行着色器程序以进行图形处理操作,图形专用加速器诸如变化插值器、纹理映射器和混合器。这些图形专用加速器在可编程执行单元的控制下进行特定图形处理操作,诸如变化插值、纹理映射和混合。

图1示意性地示出了图形处理单元101的这种结构。如图1所示,图形处理单元101包括栅格化器102、线程派生器(thread spawner)103、可编程执行单元104、变化插值器105、纹理映射器106和混合器107。

可编程执行单元104执行图形着色程序(诸如片段着色程序),以进行图形处理操作,诸如(并且尤其是)着色(渲染)由栅格化器102生成的片段。

作为该处理的一部分,并且如图1所示,可编程执行单元104可以要求变化插值器105、纹理映射器106和混合器107进行特定图形处理操作。为了这样做,可编程执行单元例如,响应于正在执行的着色器程序中的特定指令,将向有关加速器发送合适的消息(并且从其接收合适的响应)。

变化插值器105操作以在图形图元上插值,并且作为该操作的一部分经常创建要用于采样图形纹理的纹理坐标。

纹理映射器106操作以使用例如,由变化插值器105生成的纹理坐标来采样图形纹理,并且从其产生经滤波的纹理采样结果(该纹理采样结果可以然后返回到可编程执行单元104,以例如在对采样点进行着色时使用)。

混合器107操作以将例如,由可编程执行单元生成的片段着色结果与之前生成的片段着色器结果(诸如已经存储在块缓冲器(在基于块的图形处理单元的情况下)和/或帧缓冲器中的结果))混合。

在图1所示的图形处理单元101的操作中,栅格化器102将对要处理的图形图元进行栅格化,以产生要渲染(着色)的图形片段。

由栅格化器102生成的图形片段然后被提供给线程派生器103。(片段还可以在提供给线程派生器103之前,经受各种测试(诸如深度和模板测试),仅那些通过所有相关测试的片段被提供给线程派生器103)。

线程派生器103操作以派生由可编程执行单元104针对其接收的片段执行的执行线程。线程派生器103将例如确定针对片段要执行哪个着色器程序,然后派生线程以执行。

可编程执行单元104然后针对其从线程派生器103接收到的各线程执行合适的着色器程序,以处理由栅格化器生成(并通过了必要测试)的片段,以产生期望的渲染输出。

在可编程执行单元完成其针对给定片段的处理(包括使用来自变化插值器105、纹理映射器106和混合器107的响应(如果有))时,所产生的经着色片段(采样位置)值可以写出到存储器,例如,用于输出。



技术实现要素:

申请人相信还存在针对包括可编程执行单元和图形专用加速器这两者的图形处理单元的改进结构的范围。

根据本发明的第一方面,提供了一种图形处理单元,该图形处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行图形处理程序来进行图形处理操作;以及

多个图形专用加速器,各图形专用加速器可操作以进行相应的自图形处理操作;其中:

可编程执行单元可操作以与图形专用加速器通信来使该图形专用加速器进行图形处理操作,并且从图形专用加速器接收响应;并且进一步地,其中:

图形专用加速器中的两个或更多个图形专用加速器可操作以彼此直接通信,以触发由图形专用加速器中的至少一个图形专用加速器进行的图形处理操作。

根据本发明的第二方面,提供了一种操作图形处理单元的方法,该图形处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行图形处理程序来进行图形处理操作;以及

多个图形专用加速器,各图形专用加速器可操作以进行相应的图形处理操作;并且其中:

可编程执行单元可操作以与图形专用加速器通信,以使该图形专用加速器还行图形处理操作并且从图形专用加速器接收响应:

该方法包括以下步骤:

图形专用加速器中的一个图形专用加速器与图形专用加速器中的另一个图形专用加速器直接通信,以触发由图形专用加速器中的该另一个图形专用加速器进行的图形处理操作。

本发明涉及图形处理单元,图形处理单元包括可编程执行单元和多个图形专用加速器(诸如变化插值器、纹理映射器和混合器)这两者。在本发明中,而且,图形专用加速器能够受可编程执行单元控制,那些加速器中的两个或更多个加速器还可以彼此直接通信。如下面将进一步讨论的,申请人已经认识到该结构可能导致更有效的图形处理。

具体地,申请人已经认识到对于特定、潜在地比较普遍的图形处理操作(例如,由相对简单的着色器程序进行的操作,诸如用户接口(UI)组成和块传输(blitting)),实际上全部图形处理操作可以由图形专用加速器进行。

虽然仍然可以通过使可编程执行单元与图形专用加速器通信并控制图形专用加速器来执行这些图形处理操作,但申请人已经认识到那不是必须的,反而,通过如同在本发明中允许图形专用加速器能够彼此直接通信,那些着色操作可以使用图形专用加速器进行,而无需任何(或至少不太多地)可编程执行单元的参与。然后,其具有的优点在于其可以去除可编程执行单元在进行这种图形处理操作时所需的操作(诸如创建片段着色器线程、初始化该线程、并且提取和解码相关的片段着色器指令)。然后,可以节省电力,例如,因为可编程执行单元不再被使用(或至少不这么大程度地使用(不执行那么多指令))。

可编程执行单元可以是图形处理单元可以包括的任何合适和期望的可编程执行单元。可编程执行单元应可操作以执行图形着色程序来进行图形处理操作。由此,可编程执行单元将接收要执行的图形线程,并且针对那些线程执行合适的图形着色程序,以生成期望的图形输出。

可编程执行单元可以执行任意适当和期望的着色器程序,诸如顶点着色器、片段着色器或计算着色器(例如,根据OpenCL或DirectCompute)。在一个优选实施方式中,可编程执行单元执行片段着色器程序(用于执行片段着色操作的程序)。

可以存在单个或多个可编程执行单元。在存在多个可编程执行单元的情况下,各个执行单元可以优选地以本发明的方式操作。

图形处理单元的图形专用加速器可以是图形处理单元可包括的任何合适且期望的专用图形加速器。在优选实施方式中,图形专用加速器包括以下各项中的两个或更多个,且优选地所有:变化插值单元(变化插值器)、纹理映射单元(纹理映射器)和混合单元(混合器)。在特别优选的实施方式中,图形处理单元的图形专用加速器包括(至少)变化插值器、纹理映射器和混合器。

还可以存在能够彼此直接(和/或与图形专用加速器)通信的其他加速器(专用单元),诸如加载/存储单元,和计算单元(诸如浮点矩阵乘法器)等(若期望)。

图形专用(和其他)加速器优选地是固定功能单元(即,被构造成进行所讨论的图形专用操作的硬件)。然而,它们还可以完全或至少部分是可编程单元,例如,它们可操作以执行图形编程指令来进行相关的图形处理操作(若期望)。

可编程执行单元可以优选地与图形处理单元的全部图形专用(和任何其他)加速器通信。这种通信优选地包括能够向图形专用加速器发送消息,以触发它们的处理操作,并且能够从图形专用加速器接收对应的响应。

因此,图形专用加速器优选地能够响应于从可编程执行单元接收的消息来进行图形处理操作,并且向执行单元返回合适响应。

图形专用加速器中的至少两个图形专用加速器可以直接彼此通信。

在存在超过两个图形专用加速器的情况下,那些图形专用加速器的子集可以能够彼此直接通信,或所有图形专用加速器可以彼此直接通信。

在特别优选实施方式中,各对图形专用加速器能够彼此直接通信。例如,并且优选的是,变化插值器(如果存在)可以优选地与纹理映射器直接通信,和/或纹理映射器可以与混合器直接通信。变化插值器还可以与混合器直接通信(若期望),但这可以不是必须的。

在图形专用加速器可以彼此直接通信的情况下,通信可以是双向的,或者可以仅是单向的(或者,可以是这样的情况:例如,命令可以仅在两个加速器之间单向发送,响应仅另一方向发送)。

由此,对于可以彼此直接通信的那些图形专用加速器,该通信可以包括发送请求图形处理操作和接收对应响应的消息的这两个能力。然而,还可以是这种情况:图形专用加速器之间的通信仅是单向的,即,使得给定加速器可以向另一个加速器发送消息(例如,请求由该加速器的处理操作),但对于那些处理操作的结果没有对应的返回路径(相反,例如,且优选的是,结果然后可以直接传递给图形专用加速器中的另一个图形专用加速器,和/或传递给可编程执行单元或图形处理单元的另一个单元,和/或以其他方式输出(并且在优选实施方式中,是这种情况))。

在特别优选实施方式中,在图形专用加速器包括变化插值器、纹理映射器和混合器的情况下,变化插值器可以与纹理映射器直接通信以请求纹理化操作,并且纹理映射器可以与混合器直接通信以请求混合操作。

图形专用加速器优选地通过向彼此传递合适消息而彼此直接通信。这些消息可以采取任何合适且期望的形式,并且可以包括例如用于触发消息目的图形专用加速器进行的操作的适当命令,以及可选地且优选的是,用于那些处理操作的相关数据(和/或可以在哪找到用于那些处理操作的相关数据的指示)。其他结构当然会是可以的。

虽然图形专用加速器能够彼此直接通信(即,使得它们的通信不经由图形处理单元的其他单元中的任何单元(诸如可编程执行单元)),但在优选实施方式中,图形专用加速器之间的直接通信可以,并且优选的是,由对图形专用加速器中的一个图形专用加速器的通信(例如,消息)来触发,该图形专用加速器中的该一个图形专用加速器与来自图形处理单元中的另一个单元的图形专用加速器中的另一个图形专用加速器直接通信。在这种情况下,图形处理单元的触发图形专用加速器之间的直接通信的单元可以是图形处理单元的任何期望且合适的单元。如下面将进一步讨论的,在优选实施方式中,图形专用加速器之间的直接通信由图形处理单元的线程派生器和/或可编程执行单元触发。

在特别优选实施方式中,图形专用(或其他)加速器之间的直接通信包括一个加速器与加速器中的另一个加速器直接通信,以由加速器中的该另一个加速器触发处理操作(并且不涉及图形处理单元的任意其他单元,诸如,且优选的是,可编程执行单元)。

可以如期望地帮助图形专用加速器之间以及加速器与可编程执行单元之间的通信。优选地存在用于在各种单元之间传递消息的适当通信(消息传送)网络。该通信(消息传送)网络可以根据任意期望的通信协议和标准(诸如使用合适的“片上网络”协议)操作。

同可编程执行单元和图形专用加速器那样,本发明的图形处理单元优选地还包括至少栅格化器和线程派生器。

栅格化器优选地操作以对要被渲染的图形图元进行栅格化来产生要被渲染的图形片段。

由此,栅格化器将优选地相对于生成渲染输出的采样位置来测试要渲染的图元,并且针对被所讨论的图元覆盖的(或包括被所讨论的图元覆盖的至少一个采样位置)各个采样位置(或各组采样位置(例如,各2x2方形采样位置))生成要渲染的片段,由栅格化器生成的用于渲染图元的片段然后向前发送,以便处理。各个片段将因此对应于并用于渲染一组采样位置(依赖于片段是否代表多个采样位置中的各采样位置或组(例如,方形),各组采样位置包括一个采样位置或多个采样位置)。

线程派生器优选地操作以接收要渲染的图形片段,并且尤其,在适当的情况下,派生用于渲染那些图形片段的由可编程执行单元执行的执行线程。片段代表的各个采样位置优选地被处理为由线程派生器派生的各执行线程。

申请人已经认识到不是在生成渲染输出时要进行的每组图形处理操作(例如,渲染器程序)都可以适合于借助图形处理单元的图形专用加速器之间的直接通信来进行。由此,在特别优选实施方式中,图形处理单元和图形处理单元作为一部分的整个图形处理系统(可以例如,且优选的是,对应地包括主处理器,该主处理器执行需要由图形处理单元进行图形处理的应用)被构造成能够且可操作以识别用于由图形处理单元的图形专用加速器之间的直接通信进行图形处理操作的合适机会。

由此,在特别优选实施方式中,图形处理系统被构造成且可操作以识别由其中图形专用加速器之间的直接通信合适的图形处理单元执行的图形着色器程序。在特别优选实施方式中,存在对于图形专用加速器之间的直接通信的而言合适的、具体、且优选选择的、优选预定的着色器程序组,并且图形处理系统被构造成能够识别着色器程序的那些形式。

着色器程序的这些形式可以包括可以仅使用图形专用加速器执行的任何合适且期望的着色器程序操作。由此,它们优选地是仅需要变化插值操作、纹理化操作和混合操作中的一个或更多个的着色器程序。例如,且优选的是,图形处理系统可以识别仅包括变化插值、纹理化和混合操作,和/或仅包括纹理化和混合操作的着色器程序。

针对图形处理可以由图形处理单元的图形专用加速器之间的直接通信进行的那些着色器程序的识别可以由整个图形处理系统的任何合适且期望的元件或部件进行。在特别优选实施方式中,用于图形处理单元的可编程执行单元的编译器(着色器程序编译器)执行该识别,即,识别针对由图形处理单元执行而编译的给定着色器程序是否适合于借助图形处理单元的图形专用加速器之间的直接通信来进行其处理中的一些或全部处理。

在识别了适合于要借助图形处理单元的图形专用加速器之间的直接通信进行的处理操作的要执行的着色器程序的情况下,其优选地被传送(指示)到图形处理单元。这可以以任何合适且期望的方式来进行。优选的是,合适的数据结构(诸如,标记)被设置以指示着色器程序中的一些或全部适合于借助图形处理单元的图形专用加速器之间的直接通信来执行。

该指示可以由图形处理系统的任何合适且期望的部件和元件来提供。优选的是,用于图形处理单元的驱动器(例如,在整个图形处理系统的主处理器上执行)提供该指示,优选地通过适当设置适当的数据结构(例如,标记)来提供该指示。编译器可以例如向驱动器通知着色器程序已经按照本发明的方式被识别为用于操作的合适候选,驱动器然后设置例如例如标记,该标记对应地向图形处理单元通知。

在特别优选实施方式中,即使认识到着色器程序中的一些或全部可以借助图形处理单元的图形专用加速器之间的直接通信而执行,但着色器程序本身仍然被编译并提供给图形处理单元以按照正常方式执行。申请人已经在这一点上认识到,对于一些例如要被处理的片段,可以优选的是,相关图形处理操作仍然通过图形处理单元的可编程执行单元执行着色器程序来进行。向图形处理单元提供着色器程序的可执行版本,使得其在需要的情况下仍然可以由可编程执行单元执行有助于这一点。

因此,在特别优选实施方式中,图形处理单元在执行着色器程序(针对该着色器程序,操作中的一个或所有可以由图形专用加速器之间的直接通信进行)时,被进一步构造成确定(并且确定)针对要被处理的给定图形实体(工作项)或实体组(工作项组),实体或实体组是否应当通过执行针对该实体或实体组的着色器程序(使用可编程执行单元)来处理,或者图形处理操作是否应当针对该实体(工作项)或实体组(工作项组)借助图形专用加速器之间的直接通信来进行。

这一点上的图形实体可以是且优选地是,图形着色器程序可以用于(被执行以)处理的任何合适的图形实体(工作项),即,要由可编程执行单元执行的执行线程可以代表的任何合适的图形实体(工作项)。由此,图形实体优选地是顶点、采样位置或片段等。在特别优选实施方式中,图形实体是图形片段(由栅格化器生成)。

该确定优选地基于要被处理的实体或实体组(例如,图形片段)是否满足指示它们适合于使用图形专用加速器之间的直接通信进行处理的、特定、具体的、优选选择的、优选预定的标准或条件。

换言之,同使用图形加速器之间的直接通信来进行特定处理操作依赖于要被执行的图形处理操作(例如,着色器程序)那样,在特别优选实施方式中该操作还依赖于一个或更多个其他条件或标准,并且最优选的是,还依赖于所讨论的图形实体,例如,且优选的是,要被处理的给定图形片段是否满足特定、优选选择的条件或标准。

在这一点上考虑的条件或标准可以是任何合适且期望的条件和标准,该条件和标准可用于确定例如给定图形片段或图形片段组是否可以借助图形专用加速器之间的直接通信进行它们的处理中的一些或全部。

在特别优选实施方式中,该条件涉及要被处理的图形实体(例如,片段或片段组)的属性是否意味着它们的处理可能需要可编程执行单元的功能(例如,否则在没有可编程执行单元的“辅助”的情况下,对图形专用加速器不可用)。其示例可以是要被处理的给定片段对例如要被处理的其他片段具有依赖性(然后可能需要跟踪该依赖性以处理该片段,和/或该依赖性可能要求附加信息传送给图形专用加速器(该附加信息可以例如由该可编程执行单元支持))。

在特别优选实施方式中,在图形片段正在被处理的情况下,该条件包括以下各项中的一个或更多个,且优选地包括全部:要被处理的片段是否具有完全覆盖范围(即,片段代表的所有采样位置是否由片段所正用于处理的图元覆盖);要被处理的片段是否具有所分配的块缓冲器(在基于块的系统中);以及要被处理的片段在渲染输出中的其位置处是否是最老的(即,针对片段正用于处理的渲染输出中的采样位置)。优选的是,如果这些条件中的这些(或相关条件)被满足,则使用图形专用加速器之间的直接通信来处理该片段,但是如果(正在考虑的)这些条件中的任何一个不被满足,则通过以正常方式在可编程执行单元中执行针对该片段(针对对应于该片段的线程)的片段着色器程序来处理该片段。

其他条件也可以被考虑,例如,关于片段经历的处理多么复杂,诸如更复杂的特征(诸如阿尔法测试、阿尔法到平均(alpha-to-coverage)等)是否能够用于片段(这可以由例如针对该片段的渲染状态指示)。这种更复杂的特征和操作可以更期望地通过在可编程执行单元中执行片段着色器程序来进行。

当确定图形实体(例如,片段或片段组)要经由图形专用加速器之间的直接通信和消息来处理时,其可以以任何合适且期望的方式来触发和实现。

在特别优选实施方式中,预定消息被适当发布给图形专用加速器,以使它们进行需要的处理操作。上述消息和它们发送到的图形专用加速器可以,且优选地确实依赖于所需要的图形处理操作的本质。例如,在需要变化插值的情况下,触发操作的消息可以被发送到变化插值器。相应地,在需要纹理映射的情况下,触发该操作的消息可以被发送到纹理映射器。

在特别优选实施方式中,可以发布消息序列(组合消息),该消息序列将在要进行所讨论的图形处理操作的图形专用加速器之间逐步传递(独立于可编程执行单元)。

由此,例如,在需要的图形处理操作包括变化插值、纹理映射和混合的情况下,在优选实施方式a中,优选预定的“变化+纹理化+混合”消息序列可以被发布,该序列向变化插值器发送一个“变化+纹理化+混合”消息,变化插值器一旦完成其操作则向纹理映射器发送“纹理化+混合”消息,纹理映射器一旦完成其操作则向混合单元发送“混合”消息。因此,如果所要求的操作是纹理查找然后混合,则优选的是,所组合的“纹理化+混合”请求消息序列可以首先被发送给纹理映射器,纹理映射器然后向混合器发送消息序列的混合请求部分。

在确定针对所讨论的图形实体(例如,片段或片段组)的图形处理无法使用图形专用加速器之间的直接通信来进行的情况下,不是如上所述向图形专用加速器发布消息,而是优选的是,针对该图形实体(例如,片段)的执行线程被派生并且发布给可编程执行单元,以由针对该图形实体(例如,片段)的可编程执行单元以正常方式执行所讨论的着色器程序。

由此,在特别优选实施方式中,当图形实体或实体组(例如,片段或片段组)要被处理时,确定该图形实体或实体组(例如,片段或片段组)是否满足针对独立于可编程执行单元而使用图形专用加速器进行的处理的特定标准,并且响应于该确定,消息(或消息序列)直接被发布给图形专用加速器中的一个或更多个图形专用加速器,以执行针对所讨论的图形实体或实体组(例如,片段)的处理操作,或者执行线程被针对上述图形实体或实体组(例如,片段)派生,并发布到可编程执行单元以执行。

上述操作可以由图形处理单元的任何合适且期望的元件和部件来进行。在特别优选实施方式中,正是图形处理单元的线程派生器以该方式操作(即,确定接收以便处理的图形实体或实体组(例如,片段)是否应当通过执行可编程执行单元中的那些图形实体(例如,片段)的着色器程序而被处理,或者它们是否可以通过独立于可编程执行单元使用图形专用加速器而被处理,然后派生执行线程或对应地发布消息给图形专用加速器)。

上述操作优选地针对给定着色器程序处理的(给定着色器程序要针对其执行的)、多个(且优选的是,对于各个)图形实体或图形实体组(即,片段或片段组)重复。因此,确定着色器程序是否可以使用图形专用加速器之间的直接通信潜在地被执行的操作优选地要在图形处理单元生成渲染输出时执行的针对多个(且优选地为各个)着色器程序进行(并且因此,针对要求图形处理单元生成的、多个且优选地为各个渲染输出)。

本发明还扩展到例如线程派生器的该操作。

由此,根据本发明的另一个方面,提供了一种图形处理单元,该图形处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行图形处理程序来进行图形处理操作;

多个图形专用加速器,各图形专用加速器可操作以进行各自图形处理操作;以及

处理电路,该处理电路可操作以接收要被处理的图形实体,并且对于要处理的图形实体派生执行线程以由可编程执行单元执行,和/或向图形专用加速器中的一个或更多个图形专用加速器直接发布消息,以触发针对上述图形实体的处理操作。

根据本发明的另一个方面,提供了一种操作图形处理单元的方法,该图形处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行图形处理程序来进行图形处理操作;以及

多个图形专用加速器,各图形专用加速器可操作以进行相应的图形处理操作;

所述方法包括以下步骤:

对于要处理的图形实体确定是否派生执行线程以由可编程执行单元执行,或是否向图形专用加速器中的一个或更多个图形专用加速器直接发布消息,以触发针对所讨论的图形实体的处理操作;以及

派生执行线程以由所述可编程执行单元执行,和/或向所述图形专用加速器中的一个或更多个图形专用加速器直接发布消息,以响应于该确定来触发针对该图形实体的处理操作。

如本领域技术人员将理解的,本发明的这些方面和实施方式可以(且优选地确实)包括这里描述的本发明的优选和可选特征中的任意一个或更多个(根据需要)。

由此,例如,图形实体优选地是图形片段。类似地,确定是否派生执行线程或向针对所讨论的图形实体的图形专用加速器发布消息优选地基于图形实体(例如,片段)是否满足特定且优选地选择的、优选地预定的条件或标准,和/或要针对所讨论的图形实体执行的着色器程序是否满足特定标准,例如具有特定形式。

类似地,其优选地是图形处理单元的线程派生器,该线程派生器派生执行线程或向图形专用加速器发布消息(并且还进行关于那些技术中的哪些用于处理给定图形实体的确定)。

上述实施方式涉及以下结构:其中,使用图形专用加速器之间的直接通信,而不执行着色器程序来处理给定图形实体,例如,片段。

然而,申请人还已经认识到使用图形专用加速器之间的直接通信和通过执行着色器程序这两者以进行针对给定图形实体(或实体组)的处理操作来处理图形实体(例如,片段)可以用于使得图形处理操作更有效。

例如,申请人已经认识到许多着色器程序包括初始变化插值操作生成纹理坐标,随后是在纹理映射器中使用那些纹理坐标以采样纹理,然后进行其他操作,例如,使用所采样的纹理。

然而,生成纹理坐标的变化插值操作和在纹理映射器中使用那些纹理坐标以采样纹理可能花费大量的时间(大量执行循环)来进行并返回它们的数据。然而,尽管在发生这些,任何资源(诸如分配给执行线程的寄存器)实际上将是空闲的。

申请人已经认识到如果执行变化插值以生成纹理坐标和使用纹理映射器中的那些纹理坐标以采样纹理的初始操作可以由图形专用加速器之间的直接通信来进行(结果接着返回到可编程执行单元,以用于通过执行针对图形实体的着色器程序来进行图形处理的剩余部分),则可以允许避免或至少减小延迟(诸如寄存器分配延迟),该延迟在变化和纹理化操作数据被确定并返回的时段期间与分配给线程的资源关联。

由此,在特别优选实施方式中,通过使用图形专用加速器中的两个或更多个图形专用加速器之间的直接通信来进行针对所讨论的图形实体的处理操作,并且在执行可编程执行单元中执行着色器程序以进行针对图形实体的其他处理操作这两者,处理要被处理的图形实体。优选的是,图形实体通过图形专用加速器首先借助图形专用加速器之间的直接通信进行处理操作来处理,然后,一旦那些处理操作已经完成并且结果返回,则执行线程被执行以执行着色器程序(优选的是,其使用由图形专用加速器返回的结果)以进行针对该图形实体的进一步处理操作(并且优选的是,完成该图形实体的处理)。

由此,在特别优选实施方式中,当图形实体或实体组(例如,片段或片段组)要被处理时,消息(或消息序列)这两者直接发布给图形专用加速器中的一个或更多个图形专用加速器以进行针对所讨论的图形实体或实体组(例如,片段)的处理操作,并且针对所讨论的图形实体(例如,片段)派生执行线程并且发布给可编程执行单元以执行。再次,优选地正是图形处理单元的线程派生器以该方式操作操作(即,向图形专用加速器发布消息和对应地派生执行线程这两者)。

优选的是,例如,且优选的是,依赖于要由图形专用加速器之间的直接通信而独立于可编程执行单元进行的着色器程序的操作,上面讨论的形式中的一个形式的消息被发布给图形专用加速器。由此,在优选实施方式中,发布“变化+纹理”消息序列,该序列被发送到变化插值器,变化插值器一旦完成其操作,则向纹理映射器发送“纹理”消息,纹理映射器一旦已经完成其操作,则向可编程执行单元返回纹理化结果。

优选的是,由图形专用加速器之间的直接通信触发的操作的结果被返回到可编程执行单元,以在执行针对所讨论的图形实体的着色器程序时使用。

为这些结构中的图形实体执行且处理图形实体的着色器程序可以是任何合适且期望的着色器程序。

申请人相信本发明的这些实施方式将具体应用于存在初始操作以加载用于在着色器程序中使用的数据的着色器程序,诸如预加载纹理和/或均质物(uniforms)的片段着色器、预加载属性值和/或地址的顶点着色器、预加载块值的混合着色器和预加载输入数据的计算着色器。由此,在优选实施方式中,这些实施方式用于包括“预加载”操作的着色器程序。

在一个优选实施方式中,要被执行的着色器程序被修改,以考虑处理操作中的一些将借助图形专用加速器之间的直接通信来进行的事实。在这种情况下,着色器程序可以(且优选地)被修改以从要由可编程执行单元(其操作将反而由图形专用加速器之间的直接通信来进行)执行的着色器程序去除任何着色器程序指令。

在要由可编程执行单元执行的着色器程序要通过使其操作中的一些或全部借助图形专用加速器之间的直接通信进行的情况下,着色器程序可以以任何合适且期望的方式修改并且由整体数据(图形)处理系统的任何合适且期望的元件来修改。

在特别优选实施方式中,着色器程序由针对图形处理单元的编译器(着色器编译器)来修改。由此,优选的是,编译器例如通过从由正在请求图形处理(其操作将反而通过使用图形专用加速器之间的直接通信来进行)的应用提供的着色器程序去除指令来修改着色器程序。由此,例如,且优选的是,例如编译器可以从提供给可编程执行单元以执行的编译后的着色器程序(二进制)去除变化或变化+纹理化指令。

在特别优选实施方式中,编译器分析着色器程序代码(该代码例如,由主处理器上的要求图形处理的应用提供),确定着色器程序操作是否可以借助触发图形专用加速器之间的直接通信的消息来进行(然后优选的是,在该情况下,从着色器程序去除那些指令)。

在另一个实施方式中,可以实际上通过借助图形专用加速器之间的直接通信进行处理操作来替换的指令可以(并且优选地确实)留在着色器程序中(以着色器程序二进制)(不从着色器程序去除),当相关处理操作借助图形专用加速器之间的直接通信进行时,着色器程序的执行然后被构造成能够省略(跳过)那些指令。然后,在无论出于什么原因不使用图形专用加速器之间的直接通信进行那些操作的情况下(例如,因为对其他系统资源具有或可能具有不利影响),这会允许那些指令仍然针对线程执行。

由此,在优选实施方式中,将“完整的”着色器程序提供给执行单元以执行,但是执行单元能够并且优选地确实,附有条件地省略(不执行)着色器程序中的指令,例如,并且优选的是,依赖于是否已经发送了触发借助图形专用加速器之间的直接通信进行相关处理操作的消息。

由此,借助触发图形专用加速器之间的直接通信的消息并且通过针对所讨论的图形实体执行着色器程序的适当部分这两者来进行处理的操作可以借助例如编译器修改着色器程序或通过将执行硬件构造成能够以适当方式(并且操作)(在那样做的情况下)这两者来构造。

在任何情况下,可以减少要针对着色器程序执行的指令的数量,并且可以减少执行着色器程序时的延迟,而仍然通过在可编程执行单元中执行着色器程序而通过对实体进行处理来提供特征。

图形实体要借助触发图形专用加速器之间的直接通信和着色器程序执行的消息来处理的事实可以以任何合适且期望的方式指示和触发。在优选实施方式中,合适的数据结构(诸如标记)或其他着色器描述符用于指示针对着色器程序操作的处理要借助发布由图形处理单元的图形专用加速器之间的直接通信触发处理的消息,以及通过派生线程以执行针对图形实体的着色器程序这两者来执行。

在着色器程序被修改以去除指令(指令反而经由图形专用加速器之间的直接通信来进行)的情况下,“着色器描述符”可以例如指示要直接发送给图形专用加速器的消息,要被执行的着色器程序,并且优选的是,最终“直接通信”的完成消息不完成针对图形实体的处理的指示(相反着色器程序那是必须被执行)。

在着色器程序被留在“完成”形式的情况下,但在那些指令反而借助图形专用加速器之间的直接通信进行的情形中,指令在着色器程序被执行时可以省略,然后“着色器描述符”优选地指示要被执行的着色器程序,要发送以触发借助图形专用加速器之间的直接通信进行的操作的消息,以及如果发送了消息则应当被省略(不执行)的着色器程序中的那些指令。

在以该方式处理图形实体的情况下,然后着色器程序执行不应当(且优选地不)开始,直到借助图形专用加速器之间的直接通信进行的处理操作的处理结果可用为止。由此,在特别优选实施方式中,为图形实体执行着色器程序等待,直到借助图形专用加速器之间的直接通信进行的处理操作的结果已经生成为止。

由此,在这些实施方式的优选结构中,执行(例如,修改后的)着色器程序的执行线程不在可编程执行单元中执行,直到借助图形专用加速器之间的直接通信进行的操作的结果已经返回给可编程执行单元(可编程执行单元可获得)为止。

再次,可以指示在着色器程序的诸如描述符的数据结果中,该消息需要在应当执行用于执行着色器程序的线程之前返回它们的结果。例如,可以有到要在开始线程执行之前完成的消息(处理操作)列表的指针。

可以派生执行线程,以与发布触发经由与图形专用加速器直接通信进行的处理操作的消息基本平行地执行着色器程序(但然后不执行执行线程,直到借助图形专用加速器之间的直接通信进行的处理操作的结果已经返回为止)。

然而,在特别优选实施方式中,不派生要执行(例如,修改后的)着色器程序的执行线程,直到借助图形专用加速器之间的直接通信进行的操作的结果已经返回给可编程执行单元(可编程执行单元可获得)为止。

(这里应当注意的是,与执行执行线程相反,触发借助图形专用加速器之间的直接通信进行的处理操作的消息可以被发布(并且执行对应的处理操作),而线程或线程状态未派生或分配)。

由此,在这些实施方式中的尤其优选的结构中,要执行(例如修改后的)着色器程序的执行线程不发布给可编程执行单元(以便执行),直到借助图形专用加速器之间的直接通信进行的操作的结果已经返回给可编程执行单元(可编程执行单元可获得)为止。

相应地,在特别优选实施方式中,借助图形专用加速器之间的直接通信进行的处理操作的完成被监测和跟踪,并且一旦已经确定相关操作已经完成(已经满足对借助图形专用加速器之间的直接通信进行的操作的相关依赖性),就仅释放执行线程,以便执行。

相应地,在优选实施方式中,至少一些(优选的是,所有)在执行执行线程时需要和使用的资源(诸如寄存器)不分配,直到借助图形专用加速器之间的直接通信进行的操作的结果已经返回(可编程执行单元可获得)为止。

换言之,一旦借助图形专用加速器之间的直接通信进行的操作的结果对可编程执行单元可获得,就仅分配优选地一些(且优选的是,所有)在执行执行线程时需要和使用的资源(诸如寄存器)。

借助图形专用加速器之间的直接通信进行的操作的结果可以以任何合适且期望的方式对于可编程执行单元可获得。例如,在针对所讨论的图形实体的对应执行线程已经被派生并已经分配了寄存器的情况下,借助图形专用加速器之间的直接通信进行的操作的结果可以根据需要存储在用于线程的寄存器中。

另选地,例如,在线程寄存器分配不进行直到借助图形专用加速器之间的直接通信进行的操作的结果已经返回为止,相反可以留出一组寄存器用于存储那些结果,相关寄存器然后在被执行时被适当的执行线程读取。在这种情况下,因为仅比用于执行着色器程序的线程寄存器分配所需要的数量少的数量的寄存器应当要求存储借助图形专用加速器之间的直接通信进行的操作的结果,所以即使一些寄存器将需要留出用于存储借助图形专用加速器之间的直接通信进行的操作的结果,如果相关操作通过执行线程执行适当指令以进行那些操作,则与会是空闲的相比,为该过程留出的寄存器组应当是显著更少的寄存器。

由此,在优选实施方式中,留出寄存器用于存储借助处理操作生成的结果,处理操作经由图形专用加速器之间的直接通信来进行并且其他寄存器(如果需要)适当分配,用于当线程被释放和/或派生以执行着色器程序时由执行线程使用。

然后,一旦借助图形专用加速器之间的直接通信针对给定图形实体进行的处理操作的结果已经被返回(并且由此存储在为该目的分配的寄存器中),用于实体的对应执行线程的一组寄存器然后为该实体的执行线程分配,使得然后可以执行执行线程,指示哪个寄存器存储借助图形专用加速器之间的直接通信进行的处理操作的结果。

还可以提供一种结构,其中,或者通过单独使用图形专用加速器之间的直接通信,或者通过使用图形专用加速器之间的直接通信并执行线程以针对该图形实体执行着色器程序,可以处理图形实体。

例如,线程派生器可以被构造成确定所需的变化+纹理化+混合操作是否可以单独借助图形专用加速器之间的直接通信来进行,并且如果这样,则发布消息,以这样做,但,在确定操作无法单独经由图形专用加速器之间的直接通信进行的情况下(例如,上述片段的不完整的覆盖范围),相反借助发布变化+纹理化消息以经由图形专用加速器之间的直接通信进行那些操作,并且派生执行线程,以执行片段着色器程序,以针对该片段进行剩余的处理操作,来触发片段的处理。

申请人还已经认识到图形专用加速器之间的直接通信可以用于更有效地进行着色器程序内的操作(即使着色器程序的其他部分仍然需要由可编程执行单元为图形实体执行)。换言之,申请人还已经认识到会有助于在执行着色器程序期间能够(且以)使用图形专用加速器之间的直接通信。

例如,正在执行的着色器程序可以要求变化插值,以生成纹理坐标,然后使用纹理映射器中的那些纹理坐标,以采样纹理。虽然可以通过使着色器程序执行两个指令(从变化插值器提取纹理坐标的第一变化指令,和触发纹理单元使用那些纹理坐标来采样纹理的纹理指令)来进行,但申请人已经认识到如果变化单元可以直接向纹理单元传递纹理请求,则可以更有效地进行这种操作(因为其将避免例如,在可编程执行单元中执行纹理指令的需要)。

由此,在特别优选实施方式中,可编程执行单元可操作,以能够向图形专用加速器中的一个或更多个发布消息,图形专用加速器中的一个或更多个将使图形专用加速器彼此直接通信,以进行图形处理操作(并且例如,向可编程执行单元返回响应或那些图形处理操作的结果)。

这种消息可以再次采取任何合适且期望的形式,但优选地具有上面讨论的形式。

由此,可编程执行单元可以优选地发布消息序列(组合消息),该消息序列将在多个图形专用加速器之间逐步传递(独立于可编程执行单元),多个图形专用加速器进行上述图形处理操作。

例如,类似于上面讨论的,可编程执行单元可以向变化插值器潜在地发布组合的“变化+纹理化+混合”消息序列,变化插值器一旦已经完成其操作,则向纹理映射器发送“纹理化+混合”消息,纹理映射器一旦已经完成其操作,则向混合单元发送“混合”消息,混合单元然后例如向可编程执行单元返回结果。

在这些结构的特别优选实施方式中,可编程执行单元可以发布组合的、优选预定的“变化+纹理”消息序列,该序列发送给变化插值器,变化插值器一旦完成其操作,则向纹理映射器发送“纹理”消息,纹理映射器一旦已经完成其操作,则向可编程执行单元返回纹理结果。

从可编程执行单元向图形专用加速器发送的消息应当包括进行相关的图形处理操作所需要的任何信息。在具有至少多个可编程执行单元的系统的情况下,消息优选地还指示消息的发送器(即,哪个执行单元发送消息),使得图形处理操作的结果可以返回到正确的执行单元。

由可编程执行单元向图形专用加速器发送这种消息可以以任意期望且适合的方式来实现和触发。在特别优选实施方式中,这通过在要由触发执行单元的可编程执行单元执行的着色器程序中包括适当指令以向上述图形专用加速器发送合适消息来实现(当其到达着色器程序中的相关指令时,执行单元然后发送消息)。

由此,在特别优选实施方式中,本发明包括向图形处理单元的可编程执行单元发布着色器程序,用于由可编程执行单元执行,可编程执行单元包括使可编程执行单元向图形专用加速器中的一个发布消息、使图形专用加速器与图形专用加速器中的另一个直接通信、以及使这两个图形专用加速器进行图形处理操作的指令;并且

可编程执行单元在执行着色器程序时,当其到达着色器程序中的指令时,向图形专用加速器中的一个发布消息,以使该图形专用加速器进行图形处理操作,然后与图形专用加速器中的另一个直接通信,以使图形专用加速器进行图形处理操作。

优选的是,结构是使得直接通信的序列中的“结束”图形专用加速器还被触发以向可编程执行单元返回其结果,可编程执行单元例如,优选的是,然后执行着色器程序中的其他指令,例如优选地使用由图形专用加速器进行的处理的结果。

这种指令可以包括在要由可编程执行单元以任何合适且期望的方式并且经由整个数据(图形)处理系统的任何合适且期望的元件执行的着色器程序中。

在特别优选实施方式中,“直接通信”指令由用于图形处理单元的编译器(着色器编译器)包括在着色器程序中。由此,编译器优选的是,例如,在例如片段、着色器程序中在合适点处插入“方向(direction)通信”指令。使编译器提供指令具有的优点在于编译器能够访问着色器程序,以确定是否可以在着色器程序中包括“直接通信”指令。

在特别优选实施方式中,编译器分析着色器程序代码(该代码例如由需要图形处理的主处理器上应用提供),确定着色器程序执行中某个点处的“直接通信”操作是否可以,并且如果可以,则在着色器程序中合适点处包括“直接通信”指令(例如,通过在该点处在着色器程序中插入指令)。

在特别优选实施方式中,编译器还可操作以(在可以的情况下)在着色器程序中重新排序操作,以便例如,提供机会,以在着色器程序执行时包括“直接通信”操作,和/或以便允许着色器程序的执行时“直接通信”操作的更有效的包括和使用。

由此,在特别优选实施方式中,系统(例如,编译器)可操作,以识别要执行的着色器程序中的指令,指令可以经由图形处理单元的图形专用加速器之间的直接通信的使用被替换和/或组合,并且当识别指令的这种序列时,由“已组合”(“融合的”)指令来替换那些指令,“已组合”(“融合的”)指令将使可编程执行单元向图形专用加速器发布适当消息或消息序列,以触发借助图形处理单元的图形专用加速器之间的直接通信进行上述图形处理操作。

还可以在着色器程序中包括多个“直接通信”事件(指令)(如果期望)。

为了要被图形处理单元执行的各个和每个着色器程序,可以考虑以本发明的方式进行的在要执行的着色器程序中(或与要执行的着色器程序组合,或代替要执行的着色器程序)识别和提供“直接通信”机会的操作可以(并且在一个实施方式中)。还可以做这一点,仅为着色器程序的特定类别或类型,而不为着色器程序的其他类别或类型(例如,在着色器程序的类型不太可能提供有用的“直接通信”机会的情况下)。

在优选实施方式中,以本发明的方式识别和提供“直接通信”机会的操作为要执行的片段着色器程序来进行(并且优选的是,为要由图形处理单元执行的各个和每个片段着色器程序)。

(然而,不需要的是,各个和每个例如,片段、着色器程序必须具有直接通信操作(直接通信操作包括在程序中或与程序一起或代替程序)(例如在编译器确定在上述着色器程序中或对于上述着色器程序可能不可能或不那么有用的情况下)。

还将可以的是,如果期望,提供两个(或更多个)分开的着色器程序,以便由可编程执行单元执行,例如,一个由正常的完整着色器程序组成,并且一个仅由例如适当的“融合的”指令组成,例如,线程派生器选择着色器程序的哪个版本应当适当为给定的图形实体(例如,片段)执行。

如本领域技术人员将理解的,本发明的图形处理单元将是整个图形处理系统的一部分,图形处理系统将包括(例如,优选地)主处理器,主处理器执行需要由图形处理单元进行的图形处理的应用。主处理器将向图形处理单元发送合适的命令和数据,以控制其进行图形处理操作并且产生由主处理器上执行的应用需要的图形处理(渲染)输出。为了促进这一点,主处理器应当(并且优选地)还执行驱动器,该驱动器用于图形处理单元和编译器,编译器用于编译要由图形处理单元的可编程执行单元执行的着色器程序。

虽然优选实施方式中的编译器在包括图形处理流水线的整个数据处理系统的主处理器上运行(然后图形处理流水线在与主处理器关联的另一个处理器(诸如图形处理器)上(使得编译器和编译后的代码运行在整个数据图形处理系统内的单独处理器上)),但其他结构也是可能的。例如,编译器可以运行在与编译后的代码相同的处理器上,或者编译器可以运行在(完全)分开的处理器上,诸如程序在分开的系统上预编译并且以已编译形式发布。

图形处理单元还可以包括一个或更多个存储器和/或存储装置(和/或与一个或更多个存储器和/或存储装置通信),存储器或存储装置内部存储这里描述的数据、和/或由图形处理单元生成的输出数据、和/或用于进行这里描述的处理的软件。图形处理单元还可以与主微处理器通信,和/或与用于基于由图形处理单元生成的数据显示图像的显示器通信。

除了上面讨论的处理阶段之外,图形处理单元和流水线还可以包括图形处理流水线可以包括的、任意其他合适且期望的处理阶段,诸如早期深度(或早期深度和模板)测试器、后期深度(或深度和模板)测试器、块缓冲器、写出单元等。

本发明可以用于图形处理流水线可以用于生成诸如用于显示的帧的渲染到纹理输出等的、所有形式的输出。来图形处理的输出(例如,片段着色后的)数据值优选地被输出到外部(例如,主)存储器,用于存储和使用,诸如到用于显示器的帧缓冲器。

本发明可应用于图形处理器的任何合适的形式或构造。本发明具体地可应用于基于块的图形处理器和图形处理系统。由此,在优选实施方式中,图形处理系统和图形处理单元分别是基于块的系统和单元。

在特别优选实施方式中,本发明的各种功能在图形处理平台上执行,图形处理平台生成和输出例如写到用于显示装置的帧缓冲器的、渲染后的片段数据。

虽然上面已经参照在图形处理单元中执行着色器程序描述了本发明,但申请人已经认识并相信本发明的方式的操作和本发明的技术可以等同应用于并且可以用于其他例如,并且优选地多线程的处理单元并且不仅仅是图形处理单元。它们例如适当应用于更通用的处理器,诸如CPU(中央处理单元)(如果期望)。

由此,根据本发明的另一个方面,提供了一种处理单元,该处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行程序来进行处理操作;以及

多个加速器,各加速器可操作以进行相应的处理操作;其中:

所述可编程执行单元可操作以与加速器通信来使加速器进行处理操作,并且从加速器接收响应;并且进一步地,其中:

加速器中的两个或更多个加速器可操作以彼此直接通信以由加速器中的至少一个加速器触发处理操作。

由此,根据本发明的另一个方面,提供了一种处理单元,该处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行程序来进行处理操作;以及

多个加速器,各加速器可操作以进行相应的处理操作;其中:

处理电路,该处理电路可操作以接收要被处理的处理实体,并且对于要处理的处理实体派生由可编程执行单元执行的执行线程,和/或向加速器中的一个或更多个加速器直接发布消息,以便触发实体的处理操作。

根据本发明的另一个方面,提供了一种在处理单元中进行处理操作的方法,该处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行程序来进行处理操作;以及

多个加速器,各加速器可操作以进行相应的处理操作;并且其中:

所述可编程执行单元可操作以与加速器通信来使加速器进行处理操作,并且从加速器接收响应;

该方法包括以下步骤:

加速器中的一个加速器与加速器中的另一个加速器直接通信以由加速器中的该另一个加速器触发处理操作。

据本发明的另一个方面,提供了一种在处理单元中进行处理操作的方法,该处理单元包括:

可编程执行单元,该可编程执行单元可操作以执行程序来进行处理操作;以及

多个加速器,各加速器可操作以进行相应的处理操作;

所述方法包括以下步骤:

针对要处理的处理实体确定是否派生由可编程执行单元执行的执行线程,和/或向加速器中的一个货更多个直接发布消息,以便触发处理实体的处理操作;以及

派生由可编程执行单元执行的执行线程,和/或向所述加速器中的一个或更多个加速器直接发布消息,以便响应于确定触发处理实体的处理操作。

如本领域技术人员将理解的,本发明的这些方面可以(且优选地确实)包括这里描述的本发明的优选和可选特征中的任意一个或更多个或所有(根据需要)。

在本发明的这些方面中,处理单元可以是任何合适的处理单元,诸如CPU或GPU。加速器可以因此是可操作以进行给定处理操作的、任何合适且期望的加速器,例如,专用加速器。

在示例中,一个或更多个加速器可以用于网络处理器中。网络处理器可以用多线程可编程单元系统实现,该多线程可编程单元系统例如由多个变化延迟加速器(例如,CAM、加密块等)围绕。在这种情况下,作业可以通过向线程分配每个IP包(或IP包组)来调度,线程将转而生成与加速器交互的消息。另选地,加速器可以在处理之前被调用(在这种情况下,需要的是必须已知,以调用加速器)。

因此,正在被处理的处理实体可以是任何合适且期望的处理实体,诸如要被处理的工作项。

本发明可以在任意适当的系统中实现,诸如基于适当构造的微处理器的系统。在优选实施方式中,本发明实现在计算机和/或基于微处理器的系统中。

本发明的各种功能可以以任意期望且合适的方式执行。例如,本发明的功能可以实现在硬件或软件中(根据期望)。由此,例如,除非以其他方式指示,本发明的各种功能元件、阶段和“装置”可以包括合适的处理器、控制器、功能单元、电路、处理逻辑、微处理器结构等,它们可操作以进行各种功能等,诸如适当专用硬件元件和/或可以被编程以以期望方式操作的的可编程硬件元件。

这里还应当注意的是,如本领域技术人员将理解的,本发明的各种功能等可以在给定处理器上重复和/或并行执行。等同地,各种处理阶段可以共享处理电路等(如果期望)。

受制于必须执行上面讨论的特定功能的任意硬件,数据处理系统和流水线可以以其他方式包括数据处理流水线包括的所有通常功能单元等中的任意一个或更多个或所有。

如本领域技术人员将理解的,本发明的所有描述的方面和实施方式可以(且优选地确实)酌情包括这里描述的所有优选和可选特征中的任意一个或更多个。

根据本发明的方法至少部分地可以使用软件(例如,计算机程序)实现。由此将看到当从其他方面看时,本发明提供计算机软件,该计算机软件当安装在数据处理装置上时专门适用于执行这里描述的方法;计算机程序元件,该计算机程序元件包括计算机软件代码部,用于在程序元件在数据处理装置上运行时执行这里描述的方法;和计算机程序,该计算机程序包括代码装置,该代码装置当程序在数据处理系统上运行时适用于执行这里描述的方法的所有步骤。数据处理器可以是微处理器系统、可编程FPGA(场可编程门阵列)等。

本发明还扩展到计算机软件载体,该计算机软件载体包括这种软件,这种软件当用于操作图形处理器、渲染器货包括数据处理装置的微处理器系统时与所述数据处理装置结合使所述处理器、渲染器系统执行本发明的方法的步骤。这种计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存或盘,或可以是信号,诸如电线上的电信号、光信号或无线电信号,诸如卫星等。

还将进一步理解的是,不是本发明的方法的所有步骤都需要由计算机软件执行,并且由此根据更宽方面,本发明提供了计算机软件并且这种软件安装在计算机软件载体上,用于执行这里阐述的方法的步骤中的至少一个。

本发明可以因此适当地具体实施为用于与计算机系统一起使用的计算机程序产品。这种实现可以包括一系列计算机可读指令,该一系列计算机可读指令固定在有形、永久介质上,诸如计算机可读介质,例如,磁盘、CD-ROM、ROM、RAM、闪存或硬盘。还应当包括一系列计算机可读指令,在有形介质(包括但不限于,光学或模拟通信线)上,或无形地使用无线技术(包括但不限于,微波、红外或其他传输技术),这些指令经由调制解调器或其他接口装置可发送到计算机系统,。该系列计算机可读指令具体实施这里之前描述的功能的所有或一部分。

本领域技术人员将理解这种计算机可读指令可以以多种编程语言来写,用于与许多计算机架构或操作系统一起使用。进一步地,这种指令可以使用任意存储技术来存储(存储技术现在或将来包括但不限于半导体、磁或光),或使用任意通信技术来发送(通信技术现在或将来包括但不限于光学、红外或微波)。预期的是,这种计算机程序产品可以作为可去除介质来分发,附有已打印的文档或电子文档,例如,现成软件;例如在系统ROM或固定盘上预加载有计算机系统;或在网络(例如,因特网或万维网)上从服务器或电子公告栏分发。

附图说明

现在将仅以示例的方式并参照附图来描述本发明的多个优选实施方式,附图中:

图1示意性地示出了图形处理单元;

图2示出了示例性计算机图形处理系统;

图3示意性地示出了可以以本发明的方式操作的图形处理流水线;

图4示意性地示出了图形处理单元的实施方式;

图5和图6示意性地示出了本发明的第一实施方式;

图7和图8示意性地示出了本发明的第二实施方式;

图9示意性地示出了本发明的第一和第二实施方式中的线程派生器的操作;

图10和图11示意性地示出了本发明的第三实施方式;

图12和图13示意性地示出了本发明的第四实施方式。

类似的附图标记在附图中适当的情况下用于类似的部件。

具体实施方式

现在将在用于显示的计算机图形的处理的背景下描述本发明的多个优选实施方式。

图2示出了示例性计算机图形处理系统。

在主处理器1上执行的应用2(诸如游戏)将要求图形处理操作由关联的图形流水线进行,图形流水线借助图形处理单元(GPU)3来实现。为了这样做,应用将生成由驱动器4来解释的API(应用编程接口)调用,驱动器4用于在主处理器1上运行的图形处理流水线3,以生成对图形处理器3适合的命令,以生成由应用2需要的图形输出。为了促进这一点,一组“命令”将响应于来自用于图形输出(例如,以生成要显示的帧)的主系统1上运行的应用2的命令,提供给图形处理器3。

图3更详细地示出了图形处理流水线3。

图3中所示的图形处理流水线3是基于块的渲染器,并且将由此生成渲染输出数据阵列的块,诸如要生成的输出帧。

(在基于块的渲染时,不是整个渲染输出(例如,帧)被一下子有效处理为中间模式渲染,而是渲染输出(例如,要显示的帧)被划分为多个更小的子区域(通常称为“块”)。各个块(子区域)被单独(通常一个接一个地)渲染,然后渲染后的块(子区域)被重组,以提供完整的渲染输出(例如用于显示的帧)。在这种结构中,渲染输出通常被划分为大小规律且成形的子区域(块)(它们通常是正方形或矩形),但不是必须的)。

渲染输出数据阵列可以通常是输出帧,输出帧旨在显示在显示装置上,诸如画面或打印机上,但还可以例如包括中间数据,中间数据旨在用于后期的渲染通过(还称为“渲染到纹理”输出)等。

(当要显示计算机图形图像时,通常首先被限定为一系列图元(多边形),这些图元然后被划分(栅格化)为用于依次图形渲染的图形片段。在正常图形渲染操作期间,渲染器将修改(例如)颜色(红色、绿色和蓝色,RGB)和与各片段关联的透明度(阿尔法、α)数据,使得可以正确地显示片段。一旦片段已经完全穿过渲染器,则它们的关联数据值存储在存储器中,以便输出,例如,用于显示)。

图3示出了图形处理流水线3的与本实施方式的操作有关的主元件和流水线阶段。如本领域技术人员将理解的,可以有图3未例示的图形处理流水线的其他元件。这里还应当注意的是,图3仅是示意性的,并且例如,实际上,所示的功能单元和流水线阶段可以共享重要的硬件电路(即使它们在图3中被示意性地示出为单独阶段)。还将理解的是,如图3所示的图形处理流水线的各个阶段、元件和单元等可以根据期望来实现,并且因此将包括例如适当的电路和/或处理逻辑等,用于执行需要的操作和功能。

如图3所示,图形处理流水线3包括多个阶段,包括顶点着色器20、外壳着色器21、镶嵌器(tesselator)22、域着色器23、几何着色器24、栅格化阶段25、早期Z(深度)和模板测试阶段26、片段着色阶段的形式的渲染器27、后期Z(深度)和模板测试阶段28、混合阶段29、块缓冲器30以及下采样和写输出(多采样分辨率)阶段31。

顶点着色器20采用例如,为要生成的输出限定的、与顶点关联的输入数据值等,并且处理那些数据值,以生成一组对应的“顶点着色的”输出数据值,用于由图形处理流水线3的后续阶段使用。顶点着色例如,修改输入数据,以考虑要被渲染的图像中的发光效果。

外壳着色器21对色标控制点组进行操作,并且生成已知为色标恒量的附加数据,镶嵌阶段22子划分几何结构,以创建外壳的更高阶的代表,域着色器23经由镶嵌阶段对顶点输出进行操作(类似于顶点着色器),并且几何着色器24处理诸如三角形、点或线的全部图元。这些阶段与顶点着色器21一起有效地进行所有需要的片段前端操作,诸如转换和发光操作,和图元设置,以响应于提供给图形处理流水线3的命令和顶点数据,设置要被渲染的图元。

图形处理流水线3的栅格化阶段25操作,以将组成渲染输出(例如,要显示的图像)的图元栅格化为各个图形片段以处理。为了这样做,栅格化器25接收用于渲染的图形图元,将图元栅格化为采样点并且生成具有用于渲染图元的适当位置(代表合适的采样位置)的图形片段。

由栅格化器生成的片段然后向前发送到流水线的剩余部分,以便处理。

早期Z/模板阶段26对其从栅格化器25接收的片段进行Z(深度)测试,以预见是否可以在该阶段丢弃(剔除)任何片段。为了这样做,早期Z/模板阶段26将从栅格化器25发布的片段的深度值(与片段关联的深度值)与已经渲染的片段的深度值进行比较(这些深度值存储在作为块缓存器30的一部分的深度(Z)缓冲器中),以确定新片段是否将由已经被渲染的片段遮蔽。同时,执行早期模板测试。

通过片段早期Z和模板测试阶段26的片段然后发送到片段着色阶段27。片段着色阶段27对通过早期Z和模板测试的片段进行适当的片段处理操作,以便处理片段,以生成适当渲染的片段数据。

该片段处理可以包括任何合适且期望的片段着色处理,诸如对片段执行片段着色器程序、向片段应用文理、向片段应用雾化或其他处理等,以生成合适的片段数据。在本实施方式中,片段着色阶段27是以着色器流水线(可编程片段着色器)的形式。

然后,存在“后期”片段Z和模板测试阶段28,该阶段尤其对着色后的片段执行流水线深度测试的结尾部分,以确定被渲染的片段是否将实际在最后图像中看到。该深度测试使用用于块缓冲器30中的Z缓冲器中存储的片段位置的Z缓冲器值,以确定用于新片段的片段数据是否应当代替片段的片段数据,该片段已经通过如技术中已知的,将从片段着色阶段27发布的片段(与片段关联的)深度值与已经被渲染的(如存储在深度缓冲器中的)片段的深度值进行比较来渲染。该后期片段深度和模板测试阶段28还对片段执行任意需要的“后期”阿尔法和/或模板测试。

通过后期片段测试阶段28的片段然后经历(如果需要)任意必须的与已经存储在混合器29中的块缓冲器30中的片段的混合操作。对片段需要进行的任意其他剩余操作(诸如,递色(dither)等(未示出))也在该阶段执行。

最后,(混合后的)输出片段数据(值)被写到块缓冲器30,从该块缓冲器30,它们可以例如被输出到帧缓冲器,用于显示。用于输出片段的深度值还适当写到块缓冲器30内的Z缓冲器。(块缓冲器存储颜色并且深度缓冲器分别存储合适颜色等或Z值,用于缓存器代表的各个采样点(实质上用于正被处理的块的各个采样点))。这些缓冲器存储代表整个渲染输出(即,要被显示的图像)的一部分(块)的片段数据的阵列,缓冲器中的各组采样值对应于整个渲染输出的各自像素(例如,各2x2组采样值可以对应于输出像素,其中,使用4x多采样)。

块缓冲器作为位于(局部到)图形处理流水线(芯片)上的RAM的一部分而提供。

来自块缓冲器30的数据被输入到下采样(多采样分辨率)写输出单元31,因此输出(写回)到外部存储输出缓冲器,诸如显示装置(未示出)的帧缓冲器。(显示装置可以包括例如,包括像素阵列的显示器,诸如计算机监测器或打印机)。

下采样和写输出单元31下采样块缓冲器30中存储的片段数据到用于输出缓冲器(装置)的适当分辨率(即,使得生成对应于输出装置的像素的像素数据的阵列),以生成用于输出到输出缓冲器的输出值(像素)。

一旦渲染输出的块已经被处理并且其数据被输出到主存储器(例如,到主存储器(未示出)中的帧缓冲器),以便存储,然后处理下一块等,直到充足的块已经被处理,以生成整个渲染输出(例如,要显示的帧(图像))。然后,该处理为下一渲染输出(例如,帧)重复等。

用于图形处理流水线3的其他结构当然是可能的。

如可以从图3看到的,图形处理流水线3包括多个可编程处理或“着色器”阶段,即,顶点着色器20、外壳着色器21、域着色器23、几何着色器24和片段着色器27。这些可编程着色器阶段执行具有一个或更多个输入变量的各着色器程序,着色器程序生成输出变量组并且由应用提供。

为了这样做,应用2提供使用高级别着色器编程语言(诸如GLSL、HLSL、OpenCL等)实现的着色器程序。这些着色器程序然后由着色器语言编译器来翻译成用于目标图形处理流水线3的二进制代码。这可以包括创建编译器内的程序的一个或更多个中间表现。(编译器可以例如是驱动器4的一部分,特殊API调用使编译器运行。编译器执行可以由此被看做绘制调用准备的一部分,绘制调用准备响应于由应用生成的API调用由驱动器进行)。

图3示意性地示出了图形处理单元3的操作阶段。

图4示出了图形处理单元3的对应功能单元,对应功能单元用于进行(由此充当)图3示出的图形处理流水线的各种处理操作和阶段,且与本发明有关。(图形处理单元3中可能有其他功能单元。仅为了简化,图4示出了仅与以本发明的方式中的操作有关的那些功能单元。)

如图4所示,图形处理单元3包括栅格化器25、线程派生器40、可编程执行单元41、变化插值器42、纹理映射器43和混合器29。

线程派生器103可操作以派生用于由用于其接收的片段的可编程执行单元41执行的执行线程。

可编程执行单元41操作以执行着色器程序来进行图形处理流水线的着色器操作,诸如外壳着色器、顶点着色器和片段着色器。为了这样做,可编程执行单元41从线程派生器40接收执行线程,并且为那些执行线程执行相关着色器程序。

变化插值器42操作以在图形图元上插值,并且作为该操作的一部分,经常创建要用于采样图形纹理的纹理坐标。

纹理映射器43操作以使用例如由变化插值器42生成的纹理坐标来采样图形纹理,并且从图形纹理生成经滤波的纹理采样结果。

混合器29操作以混合例如由可编程执行单元生成的片段着色结果和之前生成的片段着色器结果,诸如已经存储在块缓冲器中的结果。

如图4所示,和可编程执行单元41能够与变化插值器42、纹理映射器43和混合器29通信一样,那些图形专用加速器还能够彼此直接通信。而且,还如图4所示,线程派生器40还能够独立于可编程执行单元41与变化插值器42、纹理映射器43和混合器29直接通信。这些附加通信链接在本发明的实施方式中用于更有效地进行图形处理操作。

具体地,如上面所讨论的,申请人已经认识到对于着色器程序要求的特定图形处理操作,通过使用图形处理单元的图形专用加速器之间的直接通信,而不是执行可编程指定单元中的指令,以经由图形专用加速器触发进行那些操作,可以进行那些图形处理操作。

图5-图9示出了该操作的两个优选实施方式。图5和图6示出了该操作的第一实施方式,并且图7和图8示出了第二实施方式。图9示意性地示出了这些实施方式中的线程派生器的操作。

图5示出了要求变化插值、使用由变化插值操作产生的坐标的纹理插值、和使用这样采样的纹理的混合操作的示例性片段着色器程序。申请人已经认识到该形式的着色器程序(其可以通常用于大多数用户接口构成、位图传送和非常经常用于如愤怒的小鸟(Angry Birds)的简单游戏)适合于独立于可编程执行单元41借助图形专用加速器(并且具体地,图形处理单元的变化插值器42、纹理映射器43和混合器29)之间的直接通信的执行而执行。

用于图形处理单元3的着色器程序编译器被构造成能够识别该特定的着色器程序。当用于图形处理单元3的着色器程序编译器识别出要执行该着色器程序时,通知用于图形处理单元的驱动器。用于图形处理单元3的着色器程序编译器还输出正常编译的二进制着色器程序。

驱动器4然后以合适的数据结构进行编码,着色器程序已经被识别为上述特定着色器程序。驱动器4还将着色器二进制程序编码为正常并且向图形处理单元3提供。

图6示出了图形处理单元3的对应操作。

如图6所示,图形处理单元3在执行着色器程序时,将图形图元栅格化,以生成片段并向线程派生器40提供那些片段。

然而,当线程派生器40接收用于片段着色的片段时(而不是向可编程执行单元41简单地发布对应的线程),(来自由驱动器提供的指示)识别片段着色器程序是可以由图形处理单元的图形专用加速器之间的直接通信执行的形式。然后,对于为处理接收的各片段,线程派生器40确定片段是否满足一组条件,该组条件意味着片段可以借助图形专用加速器之间的直接通信来处理。(下面将与图9有关地更详细地讨论该确定和相关片段条件)。

在线程派生器40确定图形处理操作可以借助图形专用加速器之间的直接通信针对所讨论的片段执行进行,然后,如图6所示,而不是向可编程执行单元41发布线程,以执行用于片段的着色器程序,线程派生器40反而向变化插值器42直接发布组合的变化+纹理化+混合请求消息60。

响应于此,变化插值器42进行相关属性插值操作,然后向纹理映射器43直接发送纹理化+混合请求消息61。

响应于此,纹理映射器43使用由变化插值器提供的坐标进行纹理查找,然后向混合器29直接发送混合请求消息62。

混合器29然后使用所采样的纹理值来进行其混合操作,并且向线程派生器40直接返回混合响应63。

如可以看到的,在该操作序列中,在任何时候都不涉及可编程执行单元。(不改变图形专用加速器中进行的作业)。

另一方面,如果片段不满足用于以上述方式进行处理的条件,则线程派生器40向可编程执行单元简单地发布用于片段的执行线程64,并且片段通过以正常方式在可编程执行单元41中执行着色器程序来处理。

可以从图6看到在片段可以借助与图形专用加速器的直接通信和图形专用加速器之间的直接通信来处理的情况下,该操作避免可编程执行单元中用于进行图形处理操作的相关操作,并且由此在终止线程之前去除例如创建片段着色器线程、初始化该线程、并且提取、解码且并行三个指令的需要。这节省功率,并且在一些情况下,可以允许对一个或更多个可编程执行单元的时钟完全停止。

申请人已经发现该特定消息序列可以在运行简单的位图传送内容时,去除用于针对超过90%的片段派生线程的需求(多个被执行指令对应减小)。

图7示出了可以使用图形处理单元的图形专用加速器之间的直接通信进行的两个其他示例性片段着色器程序。图7中所示的第一着色器程序70使用纹理映射器以采样并输出深度/模板值,并且第二着色器程序71使用纹理映射器来采样和输出彩色值。这些片段着色器使用所讨论的片段的整数坐标来进行纹理采样(并且由此例如不需要任何变化插值操作)。这些着色器程序可以用于例如,当进行多程渲染时预加载块缓冲器内容。

图8示出了使用与图形专用加速器(具体地,纹理映射器或混合器)的直接通信和图形专用加速器之间的直接通信时以进行图7所示的第二着色器程序71的操作的本发明的实施方式的操作。

由此,如图8所示,当线程派生器40接收用于处理的片段时,将从由驱动器提供的指示认识到要为片段执行的着色器程序具有以图7所示的形式,然后确定要处理的给定片段是否满足用于独立于可编程执行单元进行用于着色器程序的处理操作的条件(即,实际上不执行着色器程序)。

如果线程派生器确定该片段可以被这样处理,则如图8所示,将向纹理映射器43直接发布纹理化+混合请求消息61,纹理映射器43然后将响应于此进行纹理查找,然后向混合器29发送混合请求消息62和被采样的纹理值,然后混合器29对应地将从纹理映射器接收的值混合成期望的输出数据阵列(例如,块缓冲器)。

(再次,如果线程派生器40对于给定片段确定图形处理操作无法使用图8所示的直接通信结构来进行,则反而将派生并向可编程执行单元41发布执行线程64,用于以针对所讨论的片段的正常方式执行着色器程序。)

图9更详细地示出了线程派生器的操作,以确定是否处理片段,通过向图形处理单元的相关图形专用加速器直接发布消息或者通过向可编程执行单元发布线程用于以正常方式进行着色器程序执行,为片段着色接收接收片段。

如图9所示,在本实施方式中,一旦线程派生器已经接收90用于着色的片段,首先确定要为片段执行的片段着色程序是否是已经被预定为能够通过使用消息和图形处理单元的图形专用加速器之间的直接通信来代替的一个程序(步骤91)。

在线程派生器确定片段着色程序不是这些预定程序中的一个的情况下,线程派生器仅以正常方式向可编程执行单元发布用于可编程着色器执行的线程(步骤96)。

另一方面,如果确定片段着色程序是适合于用图形处理单元的图形专用加速器之间的直接消息发送替换的一个限定程序,则线程派生器确定要被处理的片段是否具有完全覆盖范围(即,上述图元是否完全覆盖片段代表的该组采样点的所有采样点)(步骤92)。因为如果片段不具有完全覆盖范围,则特定形式的覆盖范围信息需要为片段保持,所以使用该条件,并且这对于可编程指定单元这样做更加简单。

如果确定片段不具有完全覆盖范围,则线程派生器以正常方式发布用于可编程着色器执行的线程(步骤96)。

如果在步骤92中确定片段具有完全覆盖范围,则线程派生器确定上述片段对于渲染输出(例如,在画面上)中的位置是否是当前现有最老的(步骤93)。再次,如果确定片段对于渲染输出中的位置不是当前现有最老的,则线程派生器发布用于可编程着色器执行的线程(步骤96)。

因为如果片段对于渲染输出中的位置不是当前现有最老的,则可以需要用于片段的年龄的特定形式的依赖机制,所以使用该条件,并且这对于要在可编程指定单元中执行更加简单。

如果在步骤93确定片段对于渲染输入中的位置是当前现有最老的,则线程派生器然后确定是否存在未渲染输出中的片段位置分配的块缓冲器(步骤94)。再次,如果确定没有为渲染输出中的片段位置分配的块缓冲器,则线程派生器发布用于可编程着色器执行的线程(步骤96)。

因为如果片段不具有分配的块缓冲器,则需要控制块缓冲器的分配和使用的特定形式的依赖抑制,所以再次使用该条件,并且对于可编程执行单元处理这一点可以更简单。

另一方面,如果在步骤94确定存在为渲染输出中的片段位置分配的块缓冲器,则上述片段满足用于独立于可编程执行单元使用图形专用加速器之间的直接通信来处理片段的所有条件,并且所以线程派生器反而向合适的图形专用加速器直接发布相关的预定消息(例如,变化+纹理化+混合消息或纹理化+混合消息)(步骤95)。

然后,这可以为要处理的下一个片段等重复,直到已经处理要为上述着色程序处理的所有片段为止。

例如,根据图形专用加速器中可用的功能和/或期望直接通过图形专用加速器之间的信息量,可以包括对于图9示出的那些的其他或更多或更少条件。其他条件可以例如有关于特定测试(诸如阿尔法测试或阿尔法到覆盖范围测试或任意其他“复杂”特征)是否对于上述片段成为可能。(与该情况相同,可以再次优选地在可编程执行单元中执行那些测试等。)

图10和图11示出了本发明的其他实施方式,其中,借助图形处理单元的图形专用加速器之间的直接通信的操作借助由可编程执行单元发送的消息来触发。在本实施方式中,使可编程执行单元向图形处理单元的图形专用加速器发布这种消息以触发该操作的适当指令由用于着色器程序的编译器包括在要由可编程执行单元执行的着色器程序中。

图10示出了可编程执行单元执行这种指令时的操作,并且图11示出了用于在要由可编程执行单元执行的着色器程序中包括这种指令的编译器操作。

在该实施方式中,由触发图形处理单元的图形专用加速器之间的直接通信的可编程执行单元进行的操作是跟随使用由变化插值操作导出的坐标进行的纹理查找的变化插值。其他结构当然会是可能的。

如图10所示,当可编程执行单元41在执行着色器程序时,遇到(执行)组合的变化+纹理化指令时,向变化插值器42发布变化+纹理化请求消息110。

变化+纹理化请求消息110包括用于进行变化插值操作和之后的纹理操作这两者的(最小量的)信息。在具有多个执行单元的系统中,变化+纹理化请求消息110还包括关于原始发送者(即,请求所源于的执行单元)的信息。

如图10所示,变化插值器42接收变化+纹理化请求消息110并且响应于此进行变化计算。然而,不是向可编程执行单元41返回结果,而是变化插值器(在晚些时候)向纹理映射器转发纹理化请求消息111。该消息111包括变化计算的结果,和来自原始变化+纹理化请求消息的相关数据,诸如纹理操作,并且纹理-至-查找(并且,合适的情况下,哪个执行单元返回数据)。

纹理映射器将来自变化插值器42的消息111当做正常纹理操作请求并且因此使用来自变化+纹理化请求消息和变化插值器的数据进行其纹理操作,并且适当向可编程执行单元41返回所产生的纹理数据(纹理化响应)112。

可编程执行单元可以然后例如,在着色器程序中执行其他指示时,使用用于其他图形处理操作的已返回的纹理化数据。

在该结构中,不是可编程执行单元41分别向变化插值器42和纹理映射器43发布单独的变化请求和纹理化请求(会需要在可编程执行单元中执行至少两个指令),而是可编程执行单元中的单个指令触发发送组合的变化+纹理化请求消息110,该消息110触发变化插值和纹理映射操作,而不进一步需要来自可编程执行单元的输入。

如上面所讨论的,在本实施方式中,用于着色器程序的编译器确定是否包括用于触发着色器程序中的组合后的变化+纹理化请求消息的发送的指令。该编译器操作的实施方式示出在图11中。

如图11所示,在用于着色器程序120的编译过程开始时,着色器编译器首先确定着色器程序中是否有任何变化指令(步骤121)。如果在着色器程序中没有变化指示,则编译器输出编译后的程序的“正常”版本(步骤122)。

另一方面,如果在着色器程序中存在变化指令,则选择程序中的第一变化指令(步骤123)。然后确定变化插值结果是否用作纹理坐标(步骤124)。如果变化指令结果不用作纹理坐标,则变化指令保持不变(步骤25),并且过程移动到下一变化指示(如果有)或输出编译后的程序(步骤126、127和122)。

另一方面,如果在步骤124确定变化插值结果用作纹理坐标,则确定变化插值结果是否用于多个纹理坐标(步骤128)。

如果变化插值结果用于多个纹理坐标,则变化指令保持不变(步骤125),并且输出编译后的程序或考虑程序中的下一变化指令(步骤122、126和127)。

如果变化插值结果不用于多个纹理坐标,则确定变化插值结果是否用于任何事物(步骤129)。

如果确定变化插值结果用于其他事物,则变化指令保持不变(步骤125),并且输出编译后的程序或考虑选择下一变化指令(步骤126、122和127)。

如果在步骤129确定变化插值结果不用于任何事物,(即,换言之,变化插值结果仅用作单个纹理坐标),则变化和对应的纹理化指令在被编译的着色器程序中用单个组合(融合的)变化+纹理指令替换(步骤130),该指示因此在执行时将触发由如图10所示的可编程执行单元向变化插值器发送变化和纹理化请求消息110。

再次考虑在程序中是否留有任意更多的变化指令(步骤126),并且如果存在,则程序中的下一变化指令被选择用于处理(步骤127),或者如果不,则输出编译后的程序(步骤122)。

这样,编译器可以识别着色器程序内的适当机会,用于用单个组合(融合的)变化+纹理化指令替代分开的变化和纹理化指令。

其他结构当然是可以的。

图12和图13示出了本发明的另一个实施方式,其中,图形片段借助触发图形处理单元的图形专用加速器之间的直接通信的消息,并且通过执行用于图形片段的着色器程序这两者来处理。

图12示出了该结构中图形处理单元的操作。图13更详细地示出了该实施方式中的线程派生器的操作。

在该实施方式中,假定要为图形片段执行的着色器程序包括初始变化和纹理化指令,用于从纹理“预加载”数据,用于在处理图形片段时。在该实施方式中,不是借助可编程执行单元41执行合适指令并向变化插值器42和纹理映射器43发送适当变化和纹理化请求消息来进行该“预加载”操作,而是纹理派生器40(在可以这样的情况下)首先向变化插值器42发送变化+纹理化请求消息140,以借助变化插值器42与纹理映射器43之间的直接通信触发进行纹理“预加载”。

由此,如图12所示,当处理图形片段(图形实体)时,线程派生器40首先向变化插值器42直接发送组合后的变化+纹理化请求消息140。

响应于此,变化插值器42进行相关属性插值操作,并且然后向纹理映射器43发送纹理化请求消息143。响应于此,纹理映射器43使用由变化插值器提供的坐标进行纹理查找,然后向线程派生器40返回其结果141。结果可以例如存储在已经为该目的分配的寄存器中。

一旦纹理映射器43已经向线程派生器40返回其结果141,则线程派生器40向可编程执行单元41发布执行线程142,以通过执行着色器程序来进一步触发片段的处理。

可编程执行单元然后使用由借助变化插值器42与纹理映射器43之间的直接通信进行的“预加载”操作返回的结果,以正常方式执行用于线程(由此用于片段)的着色器程序。

由此,在该结构中,不是通过线程派生器40向图形专用加速器中的一个图形专用加速器直接发布消息以借助图形专用加速器之间的直接通信触发处理来处理片段,或向可编程执行单元41发布执行线程以处理片段,线程派生器可操作以向图形专用加速器中的一个发布消息并且向可编程执行单元41发布执行线程,即,使得图形片段将通过触发图形专用加速器之间的直接通信并且通过在可编程执行单元中执行着色器程序来处理。

图13更详细地示出了该实施方式中的线程派生器40的操作。

如图13所示,当线程派生器40接收用于处理的片段时,首先确定要为片段执行的着色器程序是否被识别为着色器程序,为此可以发送“预加载”消息,而不是执行着色器程序中的“预加载”指令(步骤150)。为了促进该操作,各个着色器程序具有对应的着色器描述符,该描述符尤其指示着色器程序是否包括任意“预加载”指令,并且如果是这样,则该指令是“预加载”指令,和可以由线程派生器直接发送到图形专用加速器以执行相关预加载操作的对应消息。

如果线程派生器在步骤150确定用于图形片段的着色器程序不包括预加载指令,则线程派生器确定为借助向图形专用加速器中的一个直接发送消息进行预加载操作需要的合适资源(诸如寄存器)是否可用(步骤151)。

如图13所示,如果在步骤150确定着色器不包括预加载操作,或如果在步骤151确定用于向图形专用加速器中的一个直接发送消息的适当资源不可用,则线程派生器向可编程执行单元简单地直接分配线程(步骤152),以处理图形片段。

另一方面,如果在步骤151确定合适资源(诸如为存储要借助图形专用加速器之间的直接通信进行的处理操作的结果所需的寄存器)可用,则线程派生器向合适的图形专用加速器直接发送消息(步骤153),以借助图形专用加速器之间的直接通信进行“预加载”操作(步骤153)。

然后为着色器程序被指示为包括的各个预加载指令重复(步骤154)。

一旦着色器程序中的所有预加载指令已经被考虑并且合适消息由线程派生器直接向合适图形专用加速器发布以进行对应的预加载操作(在合适资源可用于那些消息的情况下),线程派生器然后等待,直到已经接收用于处理操作的所有所需响应,处理操作通过向图形专用加速器直接发送“预加载”消息而触发(步骤155、156和157)。

一旦线程派生器已经从预加载操作接收向图形专用加速器直接发送消息以触发的所有响应,线程派生器就向可编程执行单元发布执行线程(步骤152),以进行针对该图形片段的剩余处理。

在该阶段,线程派生器还将向线程分配合适资源,诸如寄存器。然后这避免那些资源(诸如寄存器)在正在进行“预加载”操作的同时被分配给执行线程。这样,因为在进行预加载操作的同时那些资源例如不分配,所以可以缩短分配线程资源的时段(由此用于其他目的不可用)(反而更多限制的资源组(例如,寄存器)可以被分配用于在进行预加载操作的同时由图形专用加速器使用)。

可编程执行单元41然后进行用于执行线程的着色器程序。为了该执行,可编程指定单元执行着色器程序中的那些指令,这些指令进行尚未借助消息(发布这些消息以触发图形专用加速器之间的直接通信)进行的操作。

由此,在步骤150或151确定不可以或不适于发送触发图形专用加速器之间的直接通信的任何消息的情况下,可编程执行单元将仅对上述片段执行用于执行线程的整个着色器程序。

另一方面,在着色器程序中的预加载指令中的一个或更多个借助向相关图形专用加速器直接发送消息以借助图形专用加速器之间的直接通信进行那些操作的情况下,当为上述片段进行用于线程的着色器程序时,可编程执行单元将跳过实际上已进行的那些预加载指令。这样,用于可编程执行单元的着色器程序的指示的执行通过向图形专用加速器直接发布消息以触发对应的处理操作来替换。

其他结构当然是可以的。

虽然上面已经具体参照图形处理单元中着色器程序的执行描述了本实施方式,但本发明的方式的操作和本发明的技术同等地可应用于并且可以用于其他处理单元,诸如更通用的处理器,诸如CPU(中央处理单元)(如果期望)。

可以从上面看出本发明在其至少优选实施方式中,促进更有效地进行图形处理操作。通过使用图形处理单元的图形专用加速器之间的直接通信,以触发和进行那些图形专用加速器的图形处理操作,而不是使用与那些图形专用加速器的、来自图形处理单元的可编程执行单元的分开通信,以触发和控制各自图形处理操作的进行,这至少在本发明的优选实施方式中实现。

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