用于在3D渲染系统中使用的多视口变换模块的制作方法

文档序号:16634072发布日期:2019-01-16 06:50阅读:237来源:国知局
用于在3D渲染系统中使用的多视口变换模块的制作方法
本公开涉及用于在3d渲染系统中使用的多视口变换模块。
背景技术
:三维(3d)图形系统(在本文中也可以被称为渲染系统)被设计为在二维(2d)屏幕上渲染3d场景的图像。具体地,应用(例如,视频游戏)生成场景的3d模型,并且输出表示场景中的对象的几何数据。具体地,应用将每个对象划分为由一个或多个顶点的位置定义的多个图元(即,简单的几何形状,例如,三角形、线、和点)。由应用输出的几何数据包括标识每个顶点的信息(例如,顶点的坐标)和指示由顶点形成的图元的信息。图形系统然后将接收到的几何数据变换为在屏幕上显示的图像。3d图形系统通常具有两个主要阶段-几何处理阶段和光栅化(rasterization)阶段。在几何处理阶段期间,从应用接收到的顶点从如图1a所示的世界窗口102(即,世界空间坐标)变换为视口104(即,屏幕空间坐标),这在本文中被称为视口变换(viewporttransformation)。世界窗口102是用户想要可视化的特定于应用的坐标(例如,千米或厘米)中的场景106的区域。相反,视口104是用于显示场景的图像的特定于渲染设备的坐标(例如,像素或采样位置)中的屏幕108的区域。视口104可以是整个屏幕108或其一部分。因此,视口变换将世界窗口102中的输入世界空间坐标转变为视口104中的屏幕空间坐标。在许多情况下(例如,如图1a所示),几何处理阶段一次使用单个视口(通常具有覆盖整个屏幕的尺寸),并且所有顶点的坐标被变换到该视口。但是,一些应用(例如但不限于,几何着色器)可以使用多个视口来实现一个或多个视觉效果。例如,在一些情况下,可能期望渲染到屏幕内的较小窗口和/或屏幕内的多个窗口。在其他示例中,一些应用可以实现分层渲染,其中特定图元可以被发送到分层帧缓冲器的不同层(每个层与不同视口相关联),例如用于实现基于立方体的阴影映射。例如,如图1b所示,在屏幕108中可以存在两个视口110和112,并且第一图元114和第二图元116被渲染在第一视口110中,并且第三图元118被渲染在第二视口112中。在这些情况下,由应用输出的几何数据可以包括指示与每个图元相关联的视口的信息,其允许不同图元的顶点的坐标被映射到不同视口。几何处理阶段通常还包括在视口变换之前或之后从接收到的顶点形成图元。在光栅化阶段期间,将图元映射到像素,并且确定每个像素的颜色。这可以包括在每个像素处标识哪个(或哪些)图元是可见的。每个像素的颜色然后可以通过该像素处的(一个或多个)可见图元的纹理和/或在该像素上运行的像素着色器程序来确定。像素着色器程序描述了针对给定像素执行的操作。一旦针对每个像素已经识别出颜色值,颜色值就会被写入存储器中的帧缓冲器,并且然后显示在屏幕上。以下描述的实施例仅作为示例被提供,并且不限制解决已知视口变换系统的任意或全部缺点的实现方式。技术实现要素:提供本
发明内容是为了介绍将在下面的详细描述中进一步描述的概念的选集。本
发明内容不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。本文描述的是用于在支持使用多个视口的三维渲染系统中使用的视口变换模块和方法。视口变换模块包括提取模块,被配置为从顶点缓冲器中读取:针对条带(strip)中的顶点的未变换的坐标数据;标识与顶点相关联的视口的信息;以及标识与条带中的一个或多个其他顶点相关联的视口的信息。条带中的一个或多个其他顶点基于由条带中的顶点形成的图元的引发顶点(provokingvertex)和图元中的顶点数量被选择。视口变换模块还包括处理模块,该处理模块基于每个标识的视口对未变换的坐标数据执行视口变换,以生成针对每个标识的视口的经变换的坐标数据;以及写入模块,该写入模块将针对每个标识的视口的经变换的坐标数据写入顶点缓冲器。第一方面提供了一种在三维渲染系统中使用的视口变换模块,该视口变换模块包括:提取模块,被配置为从顶点缓冲器中读取:针对条带中的顶点的未变换的坐标数据;标识与顶点相关联的视口的信息;以及标识与条带中的一个或多个其他顶点相关联的视口的信息,条带中的一个或多个其他顶点基于由条带中的顶点形成的图元的引发顶点和图元中的顶点数量被选择;处理模块,被配置为基于每个标识的视口对未变换的坐标数据执行视口变换,以生成针对每个标识的视口的经变换的坐标数据;以及写入模块,被配置为将针对每个标识的视口的经变换的坐标数据写入顶点缓冲器。第二方面提供了一种对顶点条带中的顶点执行多视口变换的方法,该方法包括:在视口变换模块处从顶点缓冲器提取针对顶点的未变换的坐标数据;在视口变换模块处提取标识与顶点相关联的视口的信息;在视口变换模块处提取标识与条带中的至少一个其他顶点相关联的视口的信息,该至少一个其他顶点基于由条带中的顶点形成的图元的引发顶点和图元中的顶点数量被选择;在视口变换模块处,基于每个标识的视口对未变换的坐标数据执行视口变换,以生成针对每个标识的视口的经变换的坐标数据;以及将针对每个标识的视口的经变换的坐标数据写入顶点缓冲器。第三方面提供了一种在三维渲染系统中使用的视口变换模块,该视口变换模块包括:处理模块,被配置为针对多个视口中的每个视口对条带中的顶点的未变换的坐标数据执行视口变换,以生成针对多个视口中的每个视口的经变换的坐标数据,该多个视口包括与顶点相关联的视口和与条带中的至少一个其他顶点相关联的视口,该至少一个其他顶点基于由条带中的顶点形成的图元的引发顶点和图元中的顶点数量被选择;以及写入模块,被配置为将经变换的坐标数据写入顶点缓冲器,使得经变换的坐标数据以与多个视口相关联的条带中的多个顶点的顺序相对应的顺序被存储在顶点缓冲器中。第四方面提供了一种对条带中的顶点执行多视口变换的方法,包括:针对多个视口中的每个视口对条带中的顶点的未变换的坐标数据执行视口变换,以生成针对多个视口中的每个视口的经变换的坐标数据,该多个视口包括与顶点相关联的视口和与条带中的至少一个其他顶点相关联的视口,该至少一个其他顶点基于由条带中的多个顶点形成的图元的引发顶点和图元中的顶点数量被选择;以及将经变换的坐标数据写入顶点缓冲器,使得经变换的坐标数据以与多个视口相关联的条带中的多个顶点的顺序相对应的顺序被存储在顶点缓冲器中。视口变换模块可以以硬件形式体现在集成电路上。可以提供一种在集成电路制造系统中制造视口变换模块的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时,将系统配置为制造视口变换模块。可以提供一种非暂态计算机可读存储介质,在其上存储有视口变换模块的计算机可读描述,该计算机可读描述在集成电路制造系统中被处理时,使得集成电路制造系统制造体现视口变换模块的集成电路。可以提供一种集成电路制造系统,包括:在其上存储有视口变换模块的计算机可读描述的非暂态计算机可读存储介质;布局处理系统,被配置为处理计算机可读描述从而生成体现视口变换模块的集成电路的电路布局描述;以及集成电路生成系统,被配置为根据电路布局描述来制造视口变换模块。可以提供一种用于执行本文描述的方法的计算机程序代码。可以提供一种非暂态计算机可读存储介质,在其上存储有计算机可读指令,该计算机可读指令在计算机系统处被执行时,使得计算机系统执行本文描述的方法。附图说明参照附图通过示例的方式描述本发明。在附图中:图1a是窗口和视口的示意图;图1b是多个视口的示意图;图2是包括图元处理模块的示例3d渲染系统的框图;图3是第一示例三角形条带的示意图;图4是图2的示例图元处理模块的框图;图5是具有不同引发顶点的第二示例三角形条带的示意图;图6是用于对条带中的顶点的未变换的坐标数据执行多个视口变换的示例方法的流程图;图7是用于选择从其中获得视口信息的其他顶点的示例方法的流程图。图8是示例视口变换模块的框图。图9是顶点缓冲器的示例结构的示意图。图10是用于一次存储针对多个顶点的经变换的坐标数据的图9的顶点缓冲器的示例顶点块的示意图;图11是用于一次存储针对单个顶点的经变换的坐标数据的图9的顶点缓冲器的示例顶点块的示意图;图12是示出以视口顶点顺序存储经变换的坐标数据的示例的示意图。图13是用于将经变换的坐标数据写入数据存储的示例方法的流程图。图14是在其中实现了本文描述的视口变换模块的示例计算机系统的框图;并且图15是用于生成集成电路的示例集成电路制造系统的框图,该集成电路体现用于实现本文描述的视口变换模块的系统。具体实施方式下面的描述以示例的方式呈现,以使得本领域技术人员能够制造和使用本发明。本发明不限于本文描述的实施例,并且对于本领域技术人员来说,对所公开的实施例的各种修改将是显而易见的。仅通过示例的方式来描述实施例。本文描述的是用于以有效的方式对条带中的顶点的未变换的坐标数据预测性地执行多个视口变换的方法、系统和视口变换模块。方法包括从顶点缓冲器提取:针对条带中的顶点的未变换的坐标数据;标识与顶点相关联的视口的信息;以及标识与条带中的至少一个其他顶点相关联的视口的信息。条带中的至少一个其他顶点基于由条带中的顶点形成的图元的引发顶点和图元中的顶点数量被选择。然后针对每个标识的视口对未变换的坐标数据执行变换,以生成针对每个标识的视口的经变换的坐标数据。然后将经变换的坐标数据写入顶点缓冲器。如下面更详细描述的,对顶点执行的顶点变换基于顶点形成其一部分的图元。具体地,每个图元与形成该图元的顶点被变换到的视口相关联。因为条带的顶点可以各自形成多个图元的一部分,所以可能需要针对每个顶点执行多个不同视口变换。具体地,如果与顶点形成其一部分的不同图元相关联的视口是不同的,则必须对该顶点执行多个视口变换。然而,与不同图元相关联的视口可以是相同的,由此可以仅需要执行一个变换。因此,3d渲染系统可以被配置为装配图元,确定与图元相关联的视口,并且然后针对每个顶点执行最少数量的变换。然而,这要求在视口变换之前形成图元。本文描述的方法、系统和视口变换模块提供了一种有效的方式,用于通过预测每个顶点将形成其一部分的图元,并且针对顶点被预测形成其一部分的每个图元执行变换(无论视口变换针对不同的图元是否相同),来在视口变换之后形成图元的情况下生成针对条带中的顶点的经变换的顶点数据。换句话说,本文描述的方法、系统和视口变换模块假定针对顶点被预测形成其一部分的每个图元的视口是不同的。首先参考图2,图2示出了在其中可以实现本文描述的视口变换模块的示例3d渲染系统200。3d渲染系统被设计成渲染3d场景的图像。应该理解的是,图2仅示出了3d渲染系统的一些元件,并且在3d渲染系统内可以存在许多未在图2中示出的其他元件。3d渲染系统200包括几何处理块202和光栅化块204。几何处理块202从应用206接收几何数据,并且输出一组屏幕图元(例如,简单的几何形状,例如,屏幕208上的三角形)。几何数据包括标识多个顶点的信息(例如,世界空间坐标中的每个顶点的坐标)、标识由顶点形成的图元的信息、以及标识与每个图元相关联的视口的信息(例如,视口id)。几何处理块202包括图元处理(pp)块210,被配置为使用视口变换模块(vtm)212将接收到的顶点从世界窗口(即,世界空间坐标)变换到视口(即,屏幕空间坐标),这在本文中被称为视口变换。世界窗口是特定于应用的坐标(例如,千米或厘米)中的用户想要可视化的区域。相反,视口是用于显示场景的图像的特定于渲染设备的坐标(例如,像素)中的屏幕的区域。视口可以包括整个屏幕或其一部分。视口变换通常在每个图元的基础上被执行(即,形成特定图元的所有顶点以相同方式被视口变换(例如,变换到相同的视口))。已知pp块中的许多视口变换模块被配置为支持单个视口,并且基于该视口对每个图元(以及形成图元的每个顶点)执行单个视口变换。然而,本文描述的视口变换模块支持多个视口以实现某些视觉效果,例如,反射。因此,在本文描述的视口变换模块中,不同的视口可以被分发或分配给不同的图元,由此可以对不同图元的顶点执行基于不同视口的多个视口变换。所支持的不同视口的数量是特定于设备的。在一些情况下,支持16个不同的视口,但是对于本领域技术人员来说显而易见的是,这仅仅是示例。在顶点可以形成多个图元的一部分的情况下,这可以产生对相同顶点执行多个视口变换。如果应用206将顶点作为条带发送到几何处理块202,则这特别可能发生。图元条带是共享顶点的一系列图元。例如,图3示出了包括共享顶点304的一系列图元(三角形)302的示例三角形条带300。图元条带通常用来减少用于定义一组图元的数据量,替代分别针对每个图元发送顶点数据。例如,三角形条带将要发送的顶点的数量从3x减少到x+2,其中x是要绘制的三角形的数量。针对顶点的视口目标以及要执行的视口变换由其所属的(一个或多个)图元定义。因为条带的顶点可以形成多个图元的一部分,所以单个顶点可以具有多个不同的视口目标。例如,在图3中,顶点2(v-2)形成图元a(p-a)、图元b(p-b)、和图元c(p-c)的一部分,因此顶点2(v-2)可以具有三个不同的视口目标。因此,本文描述的视口变换模块212被配置为以有效的方式针对条带中的每个顶点对接收到的顶点执行n个视口变换,其中n是图元中的顶点数量。回到图2,pp块210还被配置为从经变换的坐标数据形成屏幕空间图元(即,由屏幕空间坐标中的顶点定义的图元),该屏幕空间图元被转发到光栅化块204以用于处理。下面将参考图4来描述示例图元处理块。光栅化块204被配置为接收由几何处理块202生成的屏幕空间图元,并且确定在每个像素处哪个(或哪些)图元是可见的并且随后确定每个像素的颜色。因为不止一个图元可以与相同像素重叠,所以针对每个像素执行深度比较(例如,z缓冲或深度缓冲)以确定哪个图元是可见的。例如,可以使用z缓冲器(其也可以被称为深度缓冲器)来存储每个像素到场景中最近图元的距离。然后,如果场景的后续图元与相同像素重叠,则将新图元的深度与存储的深度进行比较,并且如果新图元具有指示其更接近像素的深度,则用新深度值更新z缓冲器。一旦已经将一组几何的深度值与z缓冲器中的深度值进行比较,则针对每个像素标识与最接近的图元相关联的颜色值。每个像素的颜色可以由覆盖该像素的纹理和/或在该像素上运行的像素着色器程序确定。像素着色器程序描述了要应用于像素的操作。一旦针对每个像素已经标识了颜色值,则颜色值被写入存储器中的帧缓冲器,并且然后显示在屏幕208上。现在参考图4,图4示出了在其中可以实现本文描述的视口变换模块的图元处理块210的示例实现方式。如上所述,图元处理(pp)块210被配置为对由应用206生成的顶点执行视口变换以将顶点从世界窗口(即,世界空间坐标)变换为视口(即,屏幕空间坐标);并且从经变换的顶点形成屏幕图元。图4的pp块210包括事务处理模块402、视口变换模块212、和图元构建模块404。在一些情况下,pp模块210还可以包括剔除模块406。从应用206接收到的顶点数据被存储在顶点缓冲器408中。针对每个顶点,顶点数据通常包括世界坐标中的顶点坐标(例如,x、y、z和w)(其被称为未变换的坐标数据)和其他顶点信息(例如但不限于,指示顶点与其相关联的视口的信息(例如,视口id))。顶点数据被存储在顶点缓冲器408中的将多个顶点分组在一起的顶点任务(vertextask)中。在一些示例中,顶点任务可以包括条带(例如,三角形条带)中的所有顶点。每个任务和任务内的每个顶点都可以在顶点缓冲器408中被单独寻址。顶点缓冲器408的示例结构将在下面参考图9至图10来描述。顶点缓冲器408将顶点任务指令发送到事务处理模块402,以使得pp块210处理与特定任务相关联的顶点,并且保持跟踪哪些任务已经完成(例如,由pp块210处理)。顶点任务指令可以例如指定顶点缓冲器408中的要处理的任务的基地址、任务中的顶点的数量、以及任务id(例如,任务号)。事务处理模块402被配置为响应于接收到顶点任务指令而将顶点任务指令转换为发送到视口变换模块212的一组视口变换指令和发送到图元构建模块404的图元指令。视口变换指令使得视口变换模块212对任务中的顶点执行多个视口变换。因为在应用206被配置为将顶点输出作为条带时,每个顶点可以形成多个图元(例如,三角形)的一部分,所以对任务中的顶点执行多个视口变换。例如,图5示出了具有七个顶点(v-0到v-6)502和由该七个顶点形成的五个图元(p-a到p-e)504的三角形条带500。条带500中的三个顶点502(v-2、v-3和v-4)形成三个图元504(例如,三角形)的一部分。具体地,顶点2(v-2)形成图元a、b和c的一部分;顶点3(v-3)形成图元b、c和d的一部分;并且顶点4(v-4)形成图元c、d和e的一部分。因为视口变换是在每个图元的基础上执行的-即形成图元的所有顶点被变换到相同的视口-形成三个不同的图元的一部分的顶点可能必须被视口变换到三个不同的视口,针对每个图元有一个视口。可以从图元的引发顶点确定对任务中的顶点执行的视口变换。具体地,在其中应用206被配置为向每个顶点分配其自己的视口(该视口可以由视口id标识)的系统中,图元的顶点中的一个顶点将是视口变换的确定顶点或主要顶点,该确定顶点或主要顶点将在本文中被称为引发顶点。控制图元的视口变换的是与该图元的引发顶点相关联的视口。例如,在图元是三角形的情况下,每个图元由三个顶点形成-头部顶点(leadingvertex,其可以被称为图元的顶点0)、中间顶点(middlevertex,其可以被称为图元的顶点1)和尾部顶点(trailingvertex,其可以被称为图元的顶点2)。例如,针对图5的图元c(p-c),顶点2(v-2)是头部顶点,顶点3(v-3)是中间顶点,顶点4(v-4)是尾部顶点。图元的头部顶点、中间顶点、和尾部顶点中的一个将是引发顶点。在头部顶点是引发顶点(即,引发顶点是0)的情况下,图元的第一顶点将决定针对该图元的视口变换。例如,如表506所示,在引发顶点是头部顶点时(即,引发顶点是0),针对图元a、b、c、d、和e的引发顶点将分别是顶点0、1、2、3、和4。在中间顶点是引发顶点(即,引发顶点是图元的顶点1)的情况下,图元的第二顶点将决定针对该图元的视口变换。例如,如表508所示,在引发顶点是中间顶点时(即,引发顶点是1),针对图元a、b、c、d、和e的引发顶点将分别是顶点1、2、3、4、和5。最后,在尾部顶点是引发顶点(即,引发顶点是图元的顶点2)的情况下,图元的第三顶点将决定针对该图元的视口变换。例如,如表510所示,在引发顶点是尾部顶点时(即,引发顶点是2),针对图元a、b、c、d、和e的引发顶点将分别是顶点2、3、4、5、和6。在顶点(例如,顶点2(v-2))形成三个不同的图元的一部分时,该顶点将是一个图元的头部顶点、另一图元的中间顶点、以及又一图元的尾部顶点。例如,顶点2(v-2)是图元a(p-a)的尾部顶点、图元b(p-b)的中间顶点、和图元c(p-c)的头部顶点。由视口变换模块212执行的视口变换是对应于每个不同图元位置中的顶点的视口变换。在顶点处于这些位置中的每个位置时使用的视口将取决于引发顶点。具体地,如果引发顶点是0(即,头部顶点是引发顶点),则在当前顶点是尾部顶点时,相关视口将是与(从三角形条带中的当前顶点向前数是第二个顶点的)顶点相关联的视口;在当前顶点是中间顶点时,相关视口是与紧接在三角形条带中的当前顶点之前的顶点相关联的视口;并且在当前顶点是头部顶点时,相关视口是与当前顶点相关联的视口。例如,参考图5的表506,在顶点2(v-2)是图元a(p-a)中的尾部顶点时,与顶点0(v-0)相关联的视口将被用于变换;在顶点2(v-2)是图元b(p-b)中的中间顶点时,与顶点1相关联的视口将被用于变换;在顶点2(v-2)是图元c(p-c)中的头部顶点时,与顶点2(v-2)相关联的视口将被用于变换。因此,在引发顶点是0(即,头部顶点是引发顶点)时,用于视口变换的相关视口将是与条带中的当前顶点、以及两个先前顶点相关联的视口。如果引发顶点是1(即,中间顶点是引发顶点),则在当前顶点是尾部顶点时,相关视口将是与紧接在三角形条带中的当前顶点之前的顶点相关联的视口;在当前顶点是中间顶点时,相关视口将是与当前顶点相关联的视口;并且在当前顶点是头部顶点时,相关视口将是与紧接在三角形条带中的当前顶点之后的顶点相关联的视口。例如,参考图5的表508,在顶点2(v-2)是图元a(p-a)中的尾部顶点时,与顶点1(v-1)相关联的视口将被使用;在顶点2(v-2)是图元b(p-b)中的中间顶点时,与顶点2(v-2)相关联的视口将被使用;在顶点2(v-2)是图元c(p-c)中的头部顶点时,与顶点3(v-3)相关联的视口将被使用。因此,在引发顶点是1(即,中间顶点是引发顶点)时,相关视口将是与条带中的当前顶点、以及紧接在当前顶点之前和之后的顶点相关联的那些视口。如果引发顶点是2(即,尾部顶点是引发顶点),则在当前顶点是尾部顶点时,相关视口将是与当前顶点相关联的视口;在当前顶点是中间顶点时,相关视口将是与紧接在三角形条带中的当前顶点之后的顶点相关联的视口;在当前顶点是头部顶点时,相关视口将是与(从三角形条带中的当前顶点向后数是第二个顶点的)顶点相关联的视口。例如,参考图5的表格510,在顶点2(v-2)是图元a(p-a)中的尾部顶点时,与当前顶点相关联的视口将被使用;在顶点2(v-2)是图元b(p-b)中的中间顶点时,与顶点3(v-3)相关联的视口将被使用;并且在顶点2(v-2)是图元c(p-c)中的头部顶点时,与顶点4(v-4)相关联的视口将被使用。因此,在引发顶点是2(即,尾部顶点是引发顶点)时,相关视口将是与条带中的当前顶点、以及两个后续顶点相关联的那些视口。因此,在本文描述的示例中,视口变换模块212被配置为基于引发顶点对任务中的每个顶点执行多个视口变换。例如,在图元是三角形的情况下,视口变换模块212可以被配置为:在引发顶点是头部顶点时,基于与当前顶点、和紧接的两个先前顶点相关联的视口对当前顶点执行视口变换;在引发顶点是中间顶点时,基于与当前顶点、紧接的先前顶点、和紧接的后续顶点相关联的视口对当前顶点执行视口变换;并且在引发顶点是尾部顶点时,基于与当前顶点、和紧接在当前顶点之后的两个顶点相关联的视口对当前顶点执行视口变换。返回图4,在一些情况下,事务处理模块402可以被配置为针对任务中的每个顶点向视口变换模块212发送单个视口变换指令,该单个视口变换指令使得视口变换模块212对该顶点执行多个视口变换。这样的视口变换指令可以包括例如指示顶点数据在顶点缓冲器408中的位置的信息(例如,顶点的基地址)。在一些情况下,事务处理模块402可以被配置为从引发顶点确定将用于视口变换的相关视口。在这些情况下,视口变换指令还可以包括指示将用于变换的相关视口的信息(例如,相关视口的地址)。在视口变换指令不包括指示将在变换中使用的视口的信息的情况下,视口变换模块212自身可以被配置为从引发顶点确定将用于变换的相关视口。然而,在其他情况下,事务处理模块402可以被配置为针对将被执行的每个视口变换向视口变换模块212发送视口变换指令。在这些情况下,事务处理模块402可以被配置为针对接收到的任务中的每个顶点从引发顶点信息确定将被用于视口变换的适当视口,并且向视口变换模块212发送n个视口变换指令-针对将被执行的每个视口变换有一个视口变换指令。这些情况下的视口变换指令可以包括指示顶点在顶点缓冲器408中的位置的信息(例如,顶点的基地址)、和标识将被用于变换的视口的信息(例如,视口id在顶点缓冲器408中的地址)。视口变换模块212被配置为针对任务中的每个顶点,从顶点缓冲器408中提取未变换的坐标数据(例如,世界空间中的归一化x、y、z、和w坐标),从顶点缓冲器408中提取标识与该顶点相关联的视口的信息,并且从顶点缓冲器408中提取标识与(基于引发顶点信息的)条带中的至少一个其他顶点相关联的视口的信息。视口变换模块212然后针对每个标识的视口对未变换的坐标数据执行视口变换,以生成针对每个标识的视口的经变换的坐标数据(例如,屏幕空间中的x、y、z、和w)。视口变换模块212然后将针对每个标识的视口的经变换的坐标数据(例如,屏幕空间中的x、y、z、和w)写入顶点缓冲器408,以供图元构建模块404随后获取以从中形成图元。在下面将参考图12到图13进行描述的一些情况中,视口变换模块212可以被配置为将经变换的坐标数据写入顶点缓冲器408,使得可以从顶点缓冲器408中的相同位置获得针对图元的经变换的坐标数据(无论引发顶点如何)。下面参考图6描述了用于生成针对顶点的经变换的坐标数据的示例方法。下面参考图8描述了视口变换模块212的示例实现方式。图元构建模块404被配置为根据存储在顶点缓冲器408中的经变换的坐标数据来生成图元。图元构建模块404可以从事务处理模块402接收图元指令,该图元指令提供要由图元构建模块404处理的下一任务的细节。一旦图元构建模块404已经接收到图元指令,图元构建模块404等待来自视口变换模块212的指示任务的顶点已经被变换的信号或指令;以及来自外部模块的索引数据。索引数据包括指示顶点如何彼此相关以形成图元的信息(例如,索引数据可以指示每个图元的头部顶点、中间顶点、和尾部顶点)。一旦从视口变换模块212接收到指示任务的顶点已经被变换的信号或指令,并且已经接收到索引数据,图元构建模块404就从顶点缓冲器获得经变换的坐标数据,并且根据索引数据将经变换的坐标数据组装成图元。具体地,图元构建模块404从索引数据识别形成每个图元的顶点、以及这些顶点之间的关系(例如,顶点在图元中的位置-例如,哪个顶点是头部顶点、哪个顶点是中间顶点、以及哪个顶点是尾部顶点)。图元构建模块404然后针对每个图元从顶点缓冲器408获取针对(与该图元的相关位置中的顶点相对应的)每个顶点的经变换的坐标数据。如上所述,视口变换模块212被配置为针对每个顶点,执行针对顶点位于图元中的每个可能位置的视口变换。例如,在图元是三角形的情况下,针对顶点作为图元的头部顶点执行视口变换,针对顶点作为图元的中间顶点执行视口变换,并且针对顶点作为图元的尾部顶点执行视口变换。图元构建模块针对图元中的每个顶点从顶点缓冲器408获得(与该顶点在该图元中的位置相对应的)经变换的坐标数据;并且然后从该经变换的坐标数据形成图元。例如,如果图元是三角形并且索引数据指示存在由顶点c、d和e形成的图元(其中c是头部顶点、d是中间顶点、并且e是尾部顶点),则顶点缓冲器408针对顶点c、d和e中的每个顶点将包括三组经变换的坐标数据-一组对应于顶点作为头部顶点、一组对应于顶点作为中间顶点、以及一组对应于顶点作为尾部顶点。在该示例中,为了形成c、d、e图元,图元构建模块获得(例如,获取):顶点缓冲器408中的针对顶点c的(对应于顶点c作为头部顶点的)经变换的坐标数据、顶点缓冲器408中的针对顶点d的(对应于顶点d作为中间顶点的)经变换的坐标数据、以及针对顶点e的(对应于顶点e作为尾部顶点的)经变换的坐标数据。图元构建模块然后将该数据分组在一起以形成图元。具体地,图元构建模块将索引数据中的索引分配或映射到图元的每组经变换的坐标数据(即,每个顶点),并且将这些索引链接在一起以形成图元。相应地,在对顶点进行三次不同的视口变换的情况下,顶点将被映射到三个不同的索引。在一些情况下,图元构建模块还可以被配置为将经变换的坐标数据从一个格式转换为另一格式(例如,从32位浮点值转换到16.8定点值)。虽然图元构建模块404在上面已经被描述为从外部模块接收指示顶点如何彼此相关以形成图元的索引数据,但是在其他示例中,图元构建模块404可以不接收索引数据。在这些示例中,因为顶点处于条带中,所以图元构建模块404可以被配置为(i)根据条带中的顶点的顺序识别图元,并且(ii)生成(与映射相反)针对图元的每组经变换的坐标数据(即,每个顶点)的索引。一旦图元已经被组装,图元构建模块404输出图元以供进一步处理。在一些情况下,pp块210还可以包括剔除模块406。剔除模块406被配置为接收由图元构建模块404生成的图元,并且移除任意冗余图元以减少几何处理块202和光栅化块204的剩余模块上的工作负荷。可以使用许多不同的方法来识别图元是冗余的并且由此可以被移除。剔除模块406可以被配置为使用任意适当的方法或方法的组合来识别冗余图元。例如,在一些情况下,剔除模块406可以被配置为移除以下任意图元:远离用户的图元;完全脱离屏幕的图元;完全在裁剪平面之外的图元;具有不覆盖任何样本点的边界框的图元;和/或不覆盖任何样本点的图元。现在参考图6,图6示出了可以由视口变换模块212实现的用于生成针对顶点的经变换的坐标数据的示例方法600。方法600在框602处开始,其中视口变换模块212从数据存储(例如,顶点缓冲器408)提取针对顶点(即,当前顶点)的未变换的坐标数据。在一些情况下,可以响应于视口变换模块212从事务处理模块402接收到视口变换指令来发起框602。视口变换模块可以被配置为通过执行数据存储的特定地址的读取请求,来从数据存储(例如,顶点缓冲器408)提取未变换的坐标数据。取决于未变换的坐标数据的大小,视口变换模块212可以被配置为在几个时钟周期内提取未变换的坐标数据。例如,在一些情况下,视口变换模块212可以被配置为在第一时钟周期中请求第一坐标(例如,x坐标),并且在后续时钟周期中请求后续坐标(例如,y、z和w)。在框604处,视口变换模块212从数据存储(例如,顶点缓冲器408)提取指示(框602的顶点(该顶点在本文中被称为当前顶点)与其相关联的)视口的信息。如上所述,应用206将视口分配给每个顶点。在一些情况下,将存在固定数量(例如,16个)的视口,并且这些视口中的每个视口可以通过视口id来标识。在这些情况下,除了针对每个顶点的未变换的坐标数据(例如,世界空间中的顶点的x、y、x、和w坐标)之外,从应用接收到的几何数据通常还包括顶点id,并且视口变换模块212被配置为提取与当前顶点相关联的视口id。在框606处,视口变换模块212从数据存储(例如,顶点缓冲器408)提取指示与条带的至少一个其他顶点相关联的视口的信息。在每个顶点与(标识与该顶点相关联的视口的)视口id相关联的情况下,视口变换模块212可以被配置为从数据存储(例如,顶点缓冲器408)提取与至少一个其他顶点相关联的视口id。视口信息被提取的其他顶点的数量取决于视口变换模块要对每个顶点执行的顶点变换的数量。如上所述,视口变换模块被配置为针对图元中的每个可能顶点位置执行一个变换。由于图元中可能顶点位置(例如,头部顶点、中点顶点、尾点顶点)的数量等于图元中顶点的数量,如果每个图元有n个顶点,则将有n-1个(视口信息被提取的)其他顶点。例如,如果图元是三角形(n=3),则将提取针对两个(n-1)其它顶点的视口信息。视口信息被获取的顶点在本文中被称为视口顶点。特定视口顶点是根据引发顶点确定的。如上所述,引发顶点指示图元中的哪个顶点控制视口变换-即与引发顶点相关联的视口被用于执行视口变换。在当前顶点位于图元位置中的一个图元位置时(例如,在当前顶点是尾部顶点、中间顶点或头部顶点时),当前顶点将是引发顶点。在当前顶点位于其他图元位置时,其他视口顶点是引发顶点。例如,如果图元是三角形并且引发顶点是0(即,引发顶点是头部顶点),则在当前顶点是头部顶点时,当前顶点是图元的引发顶点。因此,在当前顶点是图元的中间顶点和图元的尾部顶点时,还获取针对作为引发顶点的顶点的视口信息。在该示例中,在当前顶点是图元的中间顶点时,引发顶点将是紧接在当前顶点之前的顶点,并且在当前顶点是图元的尾部顶点时,引发顶点将是从当前顶点向前数是第二个顶点的顶点。相应地,在该示例中,将提取针对紧接在当前顶点之前的顶点的视口信息、和针对从当前顶点向前数是第二个顶点的顶点的视口信息。表1总结了图元是三角形的情况。表1下面参考图7描述了用于在图元是三角形时标识视口顶点的示例方法。在框608处,视口变换模块212针对每个标识的视口对未变换的坐标数据(例如,世界空间坐标中的x、y、z、和w)执行视口变换,以生成针对每个标识的视口的经变换的坐标数据(例如,屏幕空间坐标中的x、y、z)。在框610处,视口变换模块212将针对每个标识的视口的经变换的坐标数据写入数据存储(例如,顶点缓冲器408)。如下面参考图12到图13更详细描述的,在一些情况下,视口变换模块212可以被配置为将针对不同视口的经变换的坐标数据写入数据存储(例如,顶点缓冲器408),使得该经变换的坐标数据以特定顺序被存储,以便下游组件(例如,图元构建模块)可以容易地从数据存储(例如,顶点缓冲器408)获取相关经变换的坐标数据。例如,在一些情况下,视口变换模块212可以被配置为将针对每个标识的视口的经变换的坐标数据写入数据存储(例如,顶点缓冲器408),使得经变换的坐标数据以视口顶点顺序被存储。虽然图6示出了顺序执行的方法600的框,但是对于本领域技术人员而言显而易见的是,它们可以以不同的顺序被执行。例如,对于本领域的技术人员来说显而易见的是,框602、604、和606可以以任意顺序被执行并且可以在几个周期内被执行。此外,虽然图6示出了其中对未变换的坐标数据执行所有视口变换并且然后将所有经变换的坐标数据集合写入数据存储(例如,顶点缓冲器408)的方法,但是在其它示例中,视口变换模块212可以被配置为在针对特定视口变换的经变换的坐标数据可用时(替代等待所有视口变换被完成),将该经变换的坐标数据写入数据存储(例如,顶点缓冲器408)。现在参考图7,图7示出了在图元是三角形时可以由事务处理模块402或视口变换模块212实现的用于选择其他视口顶点(提供将在视口变换中使用的视口的顶点)的示例方法700。在图元是三角形时,每个图元有三个顶点,因此每个顶点有三个可能图元位置。作为结果,执行三个视口变换-基于与当前顶点相关联的视口的一个变换、和基于与条带中的其他两个顶点相关联的视口的两个变换。图7的方法700是用于基于引发顶点来选择两个其他顶点的示例方法。如上所述,事务处理模块402或视口变换模块212可以被配置为标识其他视口顶点。方法700在框702处开始,其中事务处理模块402或视口变换模块212确定引发顶点是否是0(即,引发顶点是否是三角形图元的头部顶点)。如果在框702处确定引发顶点是0,则方法700前进到框704,其中与紧接在条带中的当前顶点之前的两个顶点相关联的视口被选择作为其他视口顶点。这是因为,如上参考图5描述的,如果引发顶点是0(即,如果引发顶点是头部顶点),则在当前顶点是尾部顶点时,引发顶点是从当前顶点向前数是第二个顶点的顶点;在当前顶点是中间顶点时,引发顶点是紧接在当前顶点之前的顶点;并且在当前顶点是头部顶点时,当前顶点将是引发顶点。然而,如果在框702处确定引发顶点不是0,则方法700前进到框706,其中事务处理模块402或视口变换模块212确定引发顶点是否是1(即,引发顶点是否是三角形图元的中间顶点)。如果在框706处确定引发顶点是1,则方法700前进到框708,其中与紧接在条带中的当前顶点之前的顶点和紧接在条带中的当前顶点之后的顶点相关联的视口被选择作为其他视口顶点。这是因为,如上参考图5描述的,如果引发顶点是1(即,如果引发顶点是中间顶点),则在当前顶点是尾部顶点时,引发顶点是紧接在条带中的当前顶点之前的顶点;在当前顶点是中间顶点时,引发顶点是当前顶点;并且在当前顶点是头部顶点时,引发顶点是紧接在条带中的当前顶点之后的顶点。然而,如果在框706处确定引发顶点不是1,则方法700前进到框710,其中事务处理模块402或视口变换模块212确定引发顶点是否是2(即,引发顶点是否是三角形图元的尾部顶点)。如果在框710处确定引发顶点是2,则方法700前进到框712,其中与紧接在条带中的当前顶点之后的两个顶点相关联的视口被选择作为其他视口顶点。这是因为,如上参考图5描述的,如果引发顶点是2(即,如果引发顶点是尾部顶点),则在当前顶点是尾部顶点时,引发顶点是当前顶点;在当前顶点是中间顶点时,引发顶点是紧接在条带中的当前顶点之后的顶点;并且在当前顶点是头部顶点时,引发顶点是条带中的当前顶点之后的第二个顶点。图6-7描述了基于与顶点相关联的视口、以及与条带中的顶点之前和/或之后的一个或多个顶点相关联的视口,对条带中的每个顶点执行n个视口变换。靠近条带的起点或终点的顶点(在本文中将被称为边缘顶点)可能不具有位于条带中的该顶点之前或之后的所需数量的顶点。例如,条带中的第一个顶点在条带中没有任何先前顶点。因此,针对条带中的边缘顶点,可能无法基于与先前和/或后续顶点相关联的视口来执行变换。在一些情况下,视口变换模块可以被配置为针对边缘顶点执行少于n个视口变换。例如,在引发顶点是头部顶点的情况下,在条带中的该顶点之前不存在两个顶点,因此仅可以执行一个视口变换,该视口变换基于与该顶点相关联的视口。然而,在其他情况下,视口变换模块可以被配置为对边缘顶点仍然执行n个视口变换模块,并且针对任意不存在的先前或后续顶点使用伪视口或默认视口。虽然执行了这样的变换,但是相应的经变换的坐标数据将不会用于形成任何后续顶点,因此执行的实际视口变换是不相关的。替代方法可以包括请求和/或获取标识与位于该条带之前和/或之后的一个或多个顶点相关联的视口的信息(例如,在正在被处理的条带形成较大带的一部分的情况下),以使得所有n个视口变换能够使用正确的视口进行。现在参考图8,图8示出了视口变换模块212的示例实现方式。如上所述,视口变换模块被配置为对条带中的顶点执行n个视口变换,其中n是每个图元中的顶点的数量。图8的视口变换模块212包括提取模块802、处理模块804、和写入模块806。提取模块802被配置为(例如,从事务处理模块402)接收标识要变换的顶点的视口变换指令,并且从数据存储(例如,顶点缓冲器408)提取针对该顶点的未变换的坐标数据。在一些情况下,视口变换指令包括标识数据存储(例如,顶点缓冲器408)中的顶点数据的开始的地址(例如,顶点基地址)。针对每个顶点数据存储的顶点数据通常包括未变换的坐标数据(例如,世界空间坐标中的x、y、x、和w)和其他数据(例如,vptid)。提取模块802从标识顶点数据的开始的信息(例如,顶点基地址)确定未变换的坐标数据的地址,并且向数据存储(例如,顶点缓冲器408)发送针对该地址的读取请求。取决于未变换的坐标数据的大小,提取模块802可以被配置为通过单独的提取请求分别提取每个单独的未变换的坐标。例如,提取模块802可以被配置为在第一时钟周期中请求未变换的x坐标,在第二时钟周期中请求未变换的y坐标等等。提取模块802还被配置为从数据存储(例如,顶点缓冲器408)提取(或获得)标识与要变换的顶点(在本文中可以被称为当前顶点)相关联的视口的信息,并且从数据存储(例如,顶点缓冲器408)提取(或获得)标识与条带中的n-1个其他顶点相关联的视口的信息,其中n是图元中的顶点的数量。如上所述,每个顶点可以被分配有由视口(vpt)id标识的视口(或与由视口(vpt)id标识的视口相关联)。vptid被存储在数据存储中作为针对每个顶点的顶点数据的一部分。在这些情况下,提取模块802可以被配置为获得与要变换的顶点相关联的vptid、以及条带中的n-1个顶点的vptid,这可以例如包括向数据存储(例如,顶点缓冲器408)发送针对每个期望的vptid的读取请求。在一些情况下,视口变换指令将包括标识要获得的vptid的信息,并且提取模块802简单地获得标识的vptid。例如,视口变换指令可以包括其中可以找到相关vptid的数据存储(例如,顶点缓冲器408)的地址/位置。然而,在其他情况下,视口变换模块212中的提取模块802或其他逻辑(未示出)可以被配置为基于每个图元中的引发顶点和顶点的数量来标识要获得的vptid。例如,在图元是三角形的情况下(即,每个图元有3个顶点),视口变换模块212的提取模块802或其他逻辑可以被配置为使用上面参考图7描述的方法700来选择要获得的附加vptid。在一些情况下,从数据存储(例如,顶点缓冲器408)提取(或获得)的vptid可以与例如和它们相关联的顶点、和/或从其中提取它们的数据存储(例如,顶点缓冲器408)的地址相关联地被存储在缓存中。在这些情况下,在提取模块802想要提取(或获得)与特定顶点相关联的vptid时,提取模块802可以被配置为首先查看与该特定顶点相关联的vptid是否位于缓存中(由此已经从数据存储(例如,顶点缓冲器408)被提取)。因为与大多数顶点关联的vptid将被使用n次,所以这可以显著减少在数据存储(例如,顶点缓冲器408)上执行的读取的数量。在一些情况下,未变换的坐标数据、以及标识与要变换的顶点和n-1个其它顶点相关联的视口的信息(例如,vptid)按照其将被处理的顺序被存储在顶点数据缓冲器808中(例如,fifo(先进先出)缓冲器),直到处理模块804准备好执行该数据的视口变换。虽然图8示出了单个顶点数据缓冲器808,但是在其他示例中,可以存在用于存储未变换的坐标数据的多个数据缓冲器。例如,可以存在用于存储未变换的x、y、和z坐标的数据缓冲器、以及用于存储未变换的w坐标的另一数据缓冲器。处理模块804包括一系列的alu(算术逻辑单元),被配置为对未变换的坐标数据(例如,世界空间坐标中的x、y、z、和w)执行视口变换,以生成针对特定视口的经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)。处理模块804从顶点数据缓冲器808接收未变换的坐标数据(例如,世界空间坐标中的x、y、z、和w),并且接收对坐标数据要变换到的视口的指示。在一些情况下,每个可能的视口与驱动alu以将未变换的坐标数据变换到该视口的系数集合相关联。在这些情况下,视口变换模块212可以包括系数存储模块810,该系数存储模块810存储针对每个可能的视口的系数。在一些情况下,可以从应用206接收系数以及它们相关联的vptid作为状态信息的一部分,并且然后存储在系数存储模块810中。然后通过vptid从系数存储模块810选择针对特定视口的系数。换句话说,vptid充当系数存储模块810的索引。在这些情况下,在未变换的坐标数据(例如,x、y、z、w)被提供给处理模块804以用于处理时,与要执行的视口变换相关联的vptid被提供给系数存储模块810,这使得系数存储模块810将与要提供的适当视口相关联的系数集合提供给处理模块804。处理模块804被配置为一次执行一个视口变换,并且输出经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)。因为将对相同的未变换的坐标数据(例如,x、y、z、和w)执行n个变换,所以处理模块804将执行该未变换的坐标数据的n遍(pass)或迭代。在一些情况下,处理模块804被配置为在第一遍或迭代中基于与当前顶点相关联的视口来执行视口变换,并且在随后遍或迭代中基于与条带中的其他顶点相关联的视口来执行视口变换。如下所述,在一些情况下,针对不同遍或迭代的经变换的坐标数据以(使得下游组件(例如,图元构建模块404)更容易地在随后从数据存储(例如,顶点缓冲器408)提取经变换的坐标数据的)预定顺序被存储在数据存储(例如,顶点缓冲器408)中。在这些情况下,以该顺序执行视口变换使得视口变换模块212(或事务处理模块402)更容易地计算经变换的坐标数据将被写入的数据存储(例如,顶点缓冲器408)的地址。对于本领域的技术人员而言显而易见的是,这仅仅是示例,并且视口变换可以以不同的顺序被执行。例如,在其他情况下,可以按照视口顶点顺序(即,与标识的视口相关联的顶点在条带中的顺序)来执行视口变换。写入模块806接收经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w),并且将经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)写入数据存储(例如,顶点缓冲器408)。在一些情况下,写入模块806可以被配置为将经变换的坐标数据写入数据存储器(例如,顶点缓冲器408),使得针对不同视口的经变换的坐标数据以特定顺序被存储在数据存储(例如,顶点缓冲器408)中,以便下游模块(例如,图元构建模块404)更容易地从数据存储(例如,顶点缓冲器408)获取适当的经变换的坐标数据。例如,如下面参考图12到图13描述的,写入模块806可以被配置为使得针对顶点的经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)以与条带中的视口顶点的顺序相对应的顺序被存储在数据存储(例如,顶点缓冲器408)中。例如,如果与顶点1、2和3相关联的视口被用于视口变换,并且顶点1在条带中位于顶点2之前并且顶点2在条带中位于顶点3之前,则基于与顶点1相关联的视口的经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)可以被存储在数据存储(例如,顶点缓冲器408)中的第一位置(例如,基地址+0),基于与顶点2相关联的视口的经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)可以被存储在数据存储(例如,顶点缓冲器408)中的下一位置(例如,基地址+1),并且基于与顶点3相关联的视口的经变换的坐标数据(例如,屏幕空间坐标中的x、y、z、和w)可以被存储在数据存储(例如,顶点缓冲器408)中的再下一位置(例如,基地址+2)。换句话说,基于不同视口的经变换的坐标数据可以被理解为被存储在数据存储(例如顶点缓冲器408)中从基地址开始的不同偏移处,其中偏移指示数据存储中的经变换的坐标数据的顺序。在将经变换的坐标数据以与条带中的视口顶点的顺序相对应的顺序存储在数据存储(例如,顶点缓冲器408)中的情况下,基于与条带中的第一视口顶点相关联的视口的经变换的坐标数据可以被写入基地址加偏移0,基于与条带中的第二视口顶点相关联的视口的经变换的坐标数据可以被写入基地址加偏移1,基于与条带中的第三视口顶点相关联的视口的经变换的坐标数据可以被写入基地址加偏移2等等。在一些示例中,事务处理模块402可以被配置为基于条带中的视口顶点的顺序来确定针对每个视口变换的适当偏移,并且将确定的(一个或多个)偏移发送到视口变换模块212作为(一个或多个)视口变换指令的一部分。在其他示例中,视口变换模块212自身可以被配置为基于条带中的视口顶点的顺序来确定针对每个视口变换的偏移。在其他示例中,事务处理模块402可以被配置为向视口变换模块212提供信息,该信息允许视口变换模块212确定适当偏移,而无需确定条带中的视口顶点的顺序。例如,在一些情况下,事务处理模块402可以被配置为使得视口变换模块212以预定顺序执行视口变换,并且提供指示哪个是第一视口变换、哪个是第二视口变换等等的信息作为(一个或多个)视口变换指令的一部分。例如,事务处理模块402可以被配置为使得视口变换模块212首先执行与当前顶点的视口相对应的视口变换,并且随后按顺序执行与其他顶点的视口相对应的视口变换。事务处理模块402然后可以将使得每个视口变换与迭代或遍号码相关联的信息包括在(一个或多个)视口变换指令中。视口变换模块212然后可以使用遍或迭代信息结合引发顶点来标识要用于存储针对每个视口变换的经变换的坐标数据的偏移。例如,如果图元是三角形并且引发顶点是头部顶点,则视口顶点将是当前顶点和紧接在当前顶点之前的两个顶点。如果在第一遍或迭代期间,视口变换模块212被配置为基于与当前顶点相关联的视口来执行视口变换,则该视口变换与条带中的第三视口顶点相关,由此相关联的经变换的坐标数据应该被存储在第三位置(即,偏移2)。如果在第二遍或迭代、和第三遍或迭代期间,视口变换模块212被配置为分别基于与(从当前顶点向前数是第二个顶点的)顶点相关联的视口、以及基于与当前顶点之前的顶点相关联的视口来执行视口变换,则这些视口变换与条带中的第一视口顶点和第二视口顶点相关,由此相关联的经变换的坐标数据应该分别被存储在第一位置和第二位置(即,偏移0和1)中。因此,如果引发顶点是头部顶点,则视口变换模块212可以被配置为在第一迭代期间使用偏移2,在第二迭代期间使用偏移0,并且在第三迭代期间使用偏移1。类似地,如果图元是三角形并且引发顶点是中间顶点,则视口顶点将是当前顶点、紧接在当前顶点之前的顶点、和紧接在条带中的当前顶点之后的顶点。如果在第一遍或迭代期间,视口变换模块212被配置为基于与当前顶点相关联的视口来执行视口变换,则该视口变换与条带中的第二视口顶点相关,由此相关联的经变换的坐标数据应该被存储在第二位置(即,偏移1)。如果在第二遍或迭代、和第三遍或迭代期间,视口变换模块212被配置为基于与当前顶点之前的顶点相关联的视口、以及基于与当前顶点之后的顶点相关联的视口来执行视口变换,则这些视口变换与条带中的第一视口顶点和第三视口顶点相关,由此相关联的经变换的坐标数据应该分别被存储在第一位置和第三位置(即,偏移0和2)中。因此,如果引发顶点是中间顶点,则视口变换模块212可以被配置为在第一迭代期间使用偏移1,在第二迭代期间使用偏移0,在第三迭代期间使用偏移2。这在表2中进行了概括。表2引发顶点迭代1迭代2迭代3头部顶点偏移2偏移0偏移1中间顶点偏移1偏移0偏移2尾部顶点偏移0偏移1偏移2现在参考图9,图9是示出顶点缓冲器408的示例结构的框图。在图9中,顶点缓冲器408被划分为多个顶点块902,其中每个顶点块902被配置为针对多个顶点存储顶点数据(包括经变换的坐标数据和未变换的坐标数据)。每个顶点块902被划分为经变换的坐标数据部分904、未变换的坐标数据部分906、和“其他”顶点数据部分908。经变换的坐标数据部分904被用来存储针对相关联的顶点的经变换的坐标数据,未变换的坐标数据部分906被用来存储针对相关联的顶点的未变换的坐标数据,并且“其他”顶点数据部分908被配置为存储与顶点相关的其他数据,例如,与每个顶点相关联的vptid、以及其他状态信息。因此,视口变换模块212的提取模块802被配置为从未变换的坐标数据部分906进行读取,并且视口变换模块212的写入模块806被配置为写入经变换的坐标数据部分904。现在参考图10,图10示出了被配置为存储针对(并行地被视口变换的)多个顶点的未变换的坐标数据和经变换的坐标数据的、应用已知的(这不一定意味着结构是公知的)顶点块902的示例结构。顶点块902的每个部分904、906、908包括多个行和列,用于保存与四个顶点(在该示例中编号为0到3)相关联的数据。在一些示例中,每个列是32位宽,然而,对于本领域技术人员而言显而易见的是,这仅仅是示例,并且可以针对列使用另一数量的位。在该示例中,未变换的坐标数据以列顺序写入顶点缓冲器408,而经变换的坐标数据以行顺序写入顶点缓冲器408。例如,与第一顶点(例如,顶点0)有关的未变换的坐标(x0、y0、z0、和w0)被写入列0行5-8中,并且针对第二顶点(例如,顶点1)的未变换的坐标(x1、y1、z1、和w1)被写入列1行5-8;而针对第一顶点(例如,顶点0)的经变换的坐标(tx0、ty0、tz0、和tw0)分别被写入行0的列3至0,针对第二顶点(例如,顶点1)的经变换的坐标(tx1、ty1、tz1、和tw1)分别被写入行1的列3至0。测试表明,在一些pp块中,可以通过以行顺序(相反于列顺序)存储经变换的坐标来提高性能。图10的经变换的坐标数据部分904包括四行,因此可以一次存储四组经变换的坐标数据。这允许存储针对一个视口变换的每个顶点的经变换的坐标数据。例如,针对第一顶点(顶点0)的经变换的坐标数据(tx0、ty0、tz0、tw0)可以被存储在第一行(行0)中;针对第二顶点(顶点1)的经变换的坐标数据(tx1、ty1、tz1、tw1)可以被存储在第二行(行1)中;针对第三顶点(顶点2)的经变换的坐标数据(tx2、ty2、tz2、tw2)可以被存储第三行(行2)中;并且针对第四顶点(顶点3)的经变换的坐标数据(tx3、ty3、tz3、tw3)可以被存储在第四行(行3)中。相应地,图10中示出的顶点块902结构在其中对每个顶点执行单个视口变换并且这些变换可以并行执行的情况中特别有用。然而,在本文描述的实施例中,对顶点执行多个(即,n个)变换,由此需要存储n倍的经变换的坐标数据。因此,在本文描述的实施例中,将以不同的方式使用相同的顶点块902结构。具体地,替代经变换的坐标数据部分904被用于一次存储针对多个顶点的经变换的坐标数据,经变换的坐标数据部分904被用于一次存储针对单个顶点的多组经变换的坐标数据。现在参考图11,图11示出了如何在本文描述的实施例中使用图10的顶点块902结构。具体地,替代经变换的坐标数据部分904的行(例如,行0至3)被用于存储针对多个不同顶点的一组经变换的坐标数据,经变换的坐标数据部分904的行(例如,行0至3)被用于存储针对相同顶点的多组经变换的坐标数据。例如,对应于第一视口变换(a)的针对第一顶点(例如,顶点0)的经变换的坐标数据(tx0.a、ty0.a、tz0.a、tw0.a)可以被存储在第一行(例如,行0);对应于第二视口变换(b)的针对第一顶点(例如,顶点0)的经变换的坐标数据(tx0.b、ty0.b、tz0.b、tw0.b)可以被存储在第二行(例如,行1);并且对应于第三视口变换(c)的针对第一顶点(例如,顶点0)的经变换的坐标数据(tx0.c、ty0.c、tz0.c、tw0.c)可以被存储在第三行(行2)。以这种方式使用顶点块902的经变换的坐标数据部分904,将使得经变换的坐标数据部分904针对顶点块902中的每个顶点被重用或重写。例如,在顶点块902中,经变换的坐标数据部分904首先被写入有针对第一顶点(例如,顶点0)的经变换的坐标数据,接着被写入有针对第二顶点(例如,顶点1)的经变换的坐标数据,然后被写入有针对第三顶点(例如,顶点2)的经变换的坐标数据,并且最终被写入有针对第四顶点(例如,顶点3)的经变换的坐标数据。然而,以这种方式使用顶点块902的经变换的坐标数据部分904,允许在多视口变换情况中使用与并行单个视口变换情况相比相同数量的顶点缓冲器408的存储。如上所述,在一些情况下,写入模块806被配置为以特定顺序将与不同视口相对应的经变换的坐标数据存储在数据存储(例如,顶点缓冲器408)中,以使得下游组件(例如,图元构建模块)更容易地获取适当的经变换的坐标数据。具体地,在一些情况下,写入模块806被配置为按照条带(例如,三角形条带)中与标识的视口相关联的顶点的顺序(或相反顺序)来存储针对标识的视口的经变换的坐标数据。例如,如果(例如,根据图7的方法700选择的)标识的视口与顶点1、2和3相关联,其中顶点1在条带中位于顶点2之前并且顶点2在条带中位于顶点3之前,则基于与顶点1相关联的视口的经变换的坐标数据可以被存储在第一偏移处(例如,在行2中),基于与顶点2相关联的视口的经变换的坐标数据可以被存储在第二偏移处(例如,在行1中),并且基于与顶点3相关联的视口的经变换的坐标数据可以被存储在第三偏移处(例如,在行0中)。以这个顺序存储经变换的坐标数据确保,对应于特定图元位置中的顶点的经变换的坐标数据将总是处于数据存储(例如,顶点缓冲器408)的相同位置(例如,偏移)处(无论引发顶点如何)。例如,这可以确保在顶点是头部顶点时,顶点的经变换的坐标数据将总是在偏移0处;在顶点是中间顶点时,顶点的经变换的坐标数据将总是在偏移1处;并且在顶点是尾部顶点时,顶点的经变换的坐标数据将总是在偏移2处。这意味着,无论引发顶点如何,视口变换模块212下游的组件(例如,图元构建模块404)将总是能够在数据存储(例如,顶点缓冲器408)的相同位置中找到针对特定图元位置中的顶点的经变换的坐标数据。这将参考图12来进行解释,图12示出了包括五个顶点1202(v-0到v-4)和由该五个顶点形成的三个图元1204(p-a到p-c)的示例三角形条带1200。如果引发顶点是0(即,引发顶点是头部顶点),则根据图7的方法700,与当前顶点(即,要变换的顶点)和两个先前的顶点相关联的视口将被用于视口变换。例如,如果顶点2(v-2)是当前顶点,则与顶点0(v-0)、1(v-1)、和2(v-2)相关联的视口被用于针对顶点2(v-2)的未变换的坐标数据的视口变换。如果针对顶点2(v-2)的经变换的坐标数据以视口顶点的顺序被存储,则如表1206所示,基于与顶点0相关联的视口的经变换的坐标数据(tx2.0、ty2.0、tz2.0、和tw2.0)被存储在行0中,基于与顶点1相关联的视口的经变换的坐标数据(tx2.1、ty2.1、tz2.1、和tw2.1)被存储在行1中,并且基于与顶点2相关联的视口的经变换的坐标数据(tx2.2、ty2.2、tz2.2、和tw2.2)被存储在行2中。这意味着,对应于顶点2作为尾部顶点(例如,在其是图元a的一部分时)的经变换的坐标数据在行0中,对应于顶点2作为中间顶点(例如,在其是图元b的一部分时)的经变换的坐标数据在行1中,并且对应于顶点2作为头部顶点(例如,在其是图元c的一部分时)的经变换的坐标数据在行2中。如果引发顶点是1(即,引发顶点是中间顶点),则根据图7的方法700,与当前顶点(即,要变换的顶点)、当前顶点之前的顶点、和当前顶点之后的顶点相关联的视口将被用于视口变换。例如,如果顶点2(v-2)是当前顶点,则与顶点1(v-1)、2(v-2)、和3(v-3)相关联的视口被用于针对顶点2(v-2)的未变换的坐标数据的视口变换。如果针对顶点2(v-2)的经变换的坐标数据以视口顶点的顺序被存储,则如表1208所示,基于与顶点1相关联的视口的经变换的坐标数据(tx2.1、ty2.1、tz2.1、和tw2.1)被存储在行0中,基于与顶点2相关联的视口的经变换的坐标数据(tx2.2、ty2.2、tz2.2、和tw2.2)被存储在行1中,基于与顶点3相关联的视口的经变换的坐标数据(tx2.3、ty2.3、tz2.3、和tw2.3)被存储在行2中。这意味着,对应于顶点2作为尾部顶点(例如,在其是图元a的一部分时)的经变换的坐标数据在行0中,对应于顶点2作为中间顶点(例如,在其是图元b的一部分时)的经变换的坐标数据在行1中,并且对应于顶点2作为头部顶点(例如,在其是图元c的一部分时)的经变换的坐标数据在行2中。如果引发顶点是2(即,引发顶点是尾部顶点),则根据图7的方法700,与当前顶点(即,要变换的顶点)和当前顶点之后的两个顶点相关联的视口将被用于视口变换。例如,如果顶点2(v-2)是当前顶点,则与顶点2(v-2)、3(v-3)、和4(v-4)相关联的视口被用于针对顶点2(v-2)的未变换的坐标数据的视口变换。如果针对顶点2(v-2)的经变换的坐标数据以视口顶点的顺序被存储,则如表1210所示,基于与顶点2相关联的视口的经变换的坐标数据(tx2.2、ty2.2、tz2.2、和tw2.2)被存储在行0中,基于与顶点3相关联的视口的经变换的坐标数据(tx2.3、ty2.3、tz2.3、和tw2.3)被存储在行1中,并且基于与顶点4相关联的视口的经变换的坐标数据(tx2.4、ty2.4、tz2.4、和tw2.4)被存储在行2中。这意味着,对应于顶点2作为尾部顶点(例如,在其是图元a的一部分时)的经变换的坐标数据在行0中,对应于顶点2作为中间顶点(例如,在其是图元b的一部分时)的经变换的坐标数据在行1中,并且对应于顶点2作为头部顶点(例如,在其是图元c的一部分时)的经变换的坐标数据在行2中。因此,通过以视口顶点的顺序来存储针对顶点的经变换的坐标数据,针对(与特定图元位置中的顶点相对应的)顶点的经变换的坐标数据将在数据存储(例如,顶点缓冲器408)的相同位置(例如,行)中被找到(无论引发顶点如何,或独立于引发顶点)。这允许下游组件(例如,基本构建模块)始终从数据存储(例如,顶点缓冲器408)的相同位置(例如,行)获取针对特定图元位置中的顶点的经变换的坐标数据,从而简化(一个或多个)下游组件中的读取逻辑。因为与经变换的坐标数据的写入相比通常存在更多的经变换的坐标数据的读取,所以可以通过在写入侧而不是读取侧增加复杂度来获得性能益处。现在参考图13,图13示出了用于将经变换的坐标数据写入数据存储(例如,顶点缓冲器308)的示例方法1300,使得经变换的坐标数据以与条带中的视口顶点的顺序相对应的顺序(即,与和多个视口相关联的条带中的顶点的顺序相对应的顺序)被存储。方法在框1302处开始(如上所述,在视口变换模块212(例如,处理模块804)针对多个视口中的每个视口对条带中的顶点的未变换的坐标数据执行视口变换以生成针对多个视口中的每个视口的经变换的坐标数据之后),其中视口变换模块212(例如,写入模块806)将每个视口变换与表示(条带中的与相应视口相关联的顶点的)顺序的不同偏移相关联。例如,如上所述,如果标识的视口与顶点1、2和3相关联(其中顶点1在条带中位于顶点2之前,并且顶点2在条带中位于顶点3之前),则基于与顶点1相关联的视口的视口变换(以及经变换的坐标数据)可以与第一偏移(例如,偏移0)相关联;基于与顶点2相关联的视口的视口变换(以及经变换的坐标数据)可以与第二偏移(例如,偏移1)相关联;并且基于与顶点3相关联的视口的视口变换(以及经变换的坐标数据)可以与第三偏移(例如,偏移2)相关联。一旦偏移已经与视口变换相关联,则方法1300前进至框1304。在框1304处,基于与视口变换相关联的偏移,将针对每个视口变换的经变换的坐标数据存储在数据存储(例如,顶点缓冲器408)中的单独位置中。在一些示例中,将针对每个视口变换的经变换的坐标数据写入顶点缓冲器中的单独位置可以包括,在框1306处,基于与顶点相关联的基地址以及与视口变换相关联的偏移来确定针对每个视口变换的顶点缓冲器的地址。例如,地址可以是基地址加偏移。然后在框1308处,将针对每个视口变换的经变换的坐标数据写入针对该视口变换确定的顶点缓冲器的地址。如上所述,在一些情况下,偏移可以对应于数据存储(例如,顶点缓冲器408)中的特定行,使得将经变换的坐标数据写入顶点缓冲器包括,将针对每个视口变换的经变换的坐标数据写入顶点缓冲器的不同行(参见例如,图11和图12以及上面相关联的描述)。同样,如上面参考图11和图12所描述的,其中经变换的坐标数据包括针对多个坐标(例如,x、y、z、和w)中的每个坐标的经变换的数据,每个坐标可以被写入数据存储(例如,顶点缓冲器)的不同列。在一些情况下,视口变换可以以预定顺序被执行。例如,可以首先执行与当前顶点的视口相对应的视口变换,并且随后可以按照条带中的这些顶点的顺序执行与其他顶点的视口相对应的视口变换。在这些情况下,针对顶点的每个视口变换都与迭代号/标识符相关联,该迭代号/标识符指示该视口变换与针对该顶点的其他视口变换相比的顺序。例如,执行的第一视口变换可以与第一迭代号相关联,执行的第二视口变换可以与第二迭代号相关联等等。然后可以使用迭代号结合引发顶点来确定哪个偏移与每个视口变换相关联。例如,在图元是由头部顶点、中间顶点、和尾部顶点形成的三角形并且视口变换以上述顺序被执行的情况下,视口变换可以与(基于迭代号和引发顶点在表2中给出的)偏移相关联。例如,在引发顶点是头部顶点时,在第一迭代中执行的视口变换可以与第三偏移相关联;在引发顶点是中间顶点时,在第一迭代中执行的视口变换可以与第二偏移相关联;并且在引发顶点是尾部顶点时,在第一迭代中执行的视口变换可以与第一偏移相关联。如上所述,以与(条带中的与视口相关联的顶点的)顺序相对应的顺序将经变换的坐标数据存储在顶点缓冲器中确保,与每个图元位置中的顶点相对应的视口变换分别被存储在数据存储(例如,顶点缓冲器408)中的相同位置(无论引发顶点如何)。例如,与针对当前顶点作为尾部顶点的视口变换相对应的经变换的坐标数据可以总是被存储在数据存储(例如,顶点缓冲器408)的行0中;与针对当前顶点作为中间顶点的视口变换相对应的经变换的坐标数据可以被存储在数据存储(例如,顶点缓冲器408)的行1中;并且与针对当前顶点作为头部顶点的视口变换相对应的经变换的坐标数据可以被存储在数据存储(例如,顶点缓冲器408)的行2中。虽然图13示出了其中对未变换的坐标数据执行所有视口变换并且然后将所有经变换的坐标数据集合写入数据存储(例如,顶点缓冲器408)的方法,但是在其他示例中,视口变换模块212可以被配置为只要针对特定视口变换的经变换的坐标数据可用(替代等待所有视口变换被完成),就将该经变换的坐标数据写入数据存储(例如,顶点缓冲器408)。图14示出了在其中可以实现本文描述的视口变换模块的计算机系统。计算机系统包括cpu1402、gpu1404、存储器1406、和其他设备1414,例如,显示器1416、扬声器1418、和照相机1420。视口变换模块1410(对应于本文描述的视口变换模块212)被示出为在gpu1404内实现。在其他示例中,视口变换模块1410可以在cpu1402内实现。计算机系统的组件可以经由通信总线1422彼此进行通信。图4和图8的pp块210和视口变换模块212被示出为包括多个功能块。这仅仅是示意性的,并且不旨在限定这些实体的不同逻辑元件之间的严格划分。每个功能块可以以任何合适的方式被提供。应该理解,本文描述为由pp块210或视口变换模块212形成的中间值不需要由pp块210或视口变换模块212在任何点物理地生成,并且可以仅仅表示(便于描述由pp块210或视口变换模块212在其输入和输出之间执行的处理的)逻辑值。本文描述的视口变换模块212或pp块210可以以硬件形式体现在集成电路上。本文描述的视口变换模块和pp块210可以被配置为执行本文描述的任意方法。通常,上述任意功能、方法、技术或组件可以用软件、固件、硬件(例如,固定逻辑电路)、或它们的任意组合来实现。本文可以使用术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”、和“逻辑”来一般地表示软件、固件、硬件、或它们的任意组合。在软件实现的情况下,模块、功能、组件、元件、单元、块、或逻辑表示在处理器上执行时执行指定任务的程序代码。本文描述的算法和方法可以由执行(使得(一个或多个)处理器执行算法/方法的)代码的一个或多个处理器执行。计算机可读存储介质的示例包括,随机存取存储器(ram)、只读存储器(rom)、光盘、闪速存储器、硬盘存储器、以及可以使用磁的、光的、和其它技术来存储指令或其他数据并且可以被机器访问的任意其他存储器设备。本文使用的术语计算机程序代码和计算机可读指令是指针对处理器的任意类型的可执行代码,包括用机器语言、解释型语言、或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如,硬件描述语言或网表)、以及用编程语言代码(例如,c、java、或opencl)表达的代码。可执行代码可以是例如任意类型的软件、固件、脚本、模块、或库,其在虚拟机或其他软件环境处被适当地执行、处理、解释、编译、执行时,使得支持可执行代码的计算机系统的处理器执行由代码指定的任务。处理器、计算机、或计算机系统可以是(具有处理能力以使得其可以执行指令的)任意类型的设备、机器或专用电路、或它们的集合或部分。处理器可以是任意类型的通用或专用处理器,例如,cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列、可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。还旨在包括定义如本文描述的硬件配置的软件,例如,hdl(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以执行期望的功能。也就是说,可以提供一种计算机可读存储介质,在其上编码有集成电路定义数据集形式的计算机可读程序代码,该集成电路定义数据集在集成电路制造系统中被处理时,配置该系统以制造被配置为执行本文描述的方法的处理器,或制造包括本文描述的任意装置的处理器。集成电路定义数据集可以是例如集成电路描述。可以提供一种在集成电路制造系统处制造如本文描述的视口变换模块212或pp块210的方法。可以提供集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中被处理时,使得制造视口变换模块212或pp块210的方法被执行。集成电路定义数据集可以是计算机代码的形式,例如,网表、用于配置可编程芯片的代码、(定义适用于在任意级别的集成电路中制造的硬件的)硬件描述语言,包括寄存器传输级(rtl)代码、高级电路表示(例如,verilog、或vhdl)、以及低级电路表示(例如,oasis(rtm)、和gdsii)。在逻辑上定义适用于在集成电路中制造的硬件的更高级表示(例如rtl),可以在(被配置用于在(包括电路元件的定义和用于组合这些元件的规则的)软件环境的上下文中生成集成电路的制造定义的)计算机系统处被执行,以便生成由该表示定义的集成电路的制造定义。类似于通常在计算机系统处执行软件以定义机器的情况,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以使得(被配置用于生成集成电路的制造定义的)计算机系统执行定义集成电路的代码,从而生成该集成电路的制造定义。现在将参考图15描述在集成电路制造系统处对集成电路定义数据集进行处理以便配置系统来制造视口变换模块212的示例。图15示出了(被配置为制造本文的任意示例中描述的视口变换模块的)集成电路(ic)制造系统1502的示例。具体地,ic制造系统1502包括布局处理系统1504、和集成电路生成系统1506。ic制造系统1502被配置为接收ic定义数据集(例如,定义本文的任意示例中描述的视口变换模块212),处理ic定义数据集,并且根据ic定义数据集来生成ic(例如,该ic体现本文的任意示例中描述的视口变换模块212)。对ic定义数据集的处理将ic制造系统1502配置为制造体现本文的任意示例中描述的视口变换模块的集成电路。布局处理系统1504被配置为接收并且处理ic定义数据集以确定电路布局。从ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以包括合成rtl代码以确定要生成的电路的门级表示(gatelevelrepresentation),例如,在逻辑组件(例如,nand、nor、and、or、mux、和flip-flop组件)方面。通过确定逻辑组件的位置信息,可以从电路的门级表示确定电路布局。这可以自动完成,或为了优化电路布局在用户参与下完成。在布局处理系统1504已经确定了电路布局时,其可以向ic生成系统1506输出电路布局定义。电路布局定义可以是例如电路布局描述。如现有技术中已知的,ic生成系统1506根据电路布局定义生成ic。例如,ic生成系统1506可以实现半导体器件制造工艺以生成ic,这可以包括(在此期间电子电路逐渐形成在由半导体材料制成的晶片上的)光刻和化学处理步骤的多步骤序列。电路布局定义可以是掩模(mask)的形式,其可以在用于根据电路定义生成ic的光刻工艺中被使用。替代地,提供给ic生成系统1506的电路布局定义可以是(ic生成系统1506可以用来形成用于生成ic中使用的适当掩模的)计算机可读代码的形式。由ic制造系统1502执行的不同过程可以(例如,由一方)全部在一个位置实现。替代地,ic制造系统1502可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方执行。例如,(i)合成表示ic定义数据集的rtl代码以形成要生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩模,以及(iv)使用掩模制造集成电路中的一些阶段可以在不同位置和/或由不同方执行。在其他示例中,在集成电路制造系统处对集成电路定义数据集进行处理可以将系统配置为(在不处理ic定义数据集以便确定电路布局的情况下)制造视口变换模块212。例如,集成电路定义数据集可以定义可重新配置处理器(例如,fpga)的配置,并且对该数据集的处理可以将ic制造系统配置为生成具有该定义的配置的可重新配置的处理器(例如,通过将配置数据加载到fpga)。在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时,可以使得集成电路制造系统生成如本文描述的设备。例如,以上面参考图15描述的方式使用集成电路制造定义数据集来配置集成电路制造系统,可以使得本文描述的设备被制造。在一些示例中,集成电路定义数据集可以包括在数据集定义的硬件上运行的软件、或结合数据集定义的硬件一起运行的软件。在图15示出的示例中,ic生成系统可以由集成电路定义数据集进一步配置为,在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供与集成电路一起使用的程序代码。与已知实现方式相比,本申请中阐述的概念在设备、装置、模块、和/或系统(以及本文实施的方法中)中的实现方式可以产生性能改进。性能改进可以包括增加的计算性能、减少的延迟、增加的吞吐量、和/或减少的功耗中的一个或多个。在制造这类设备、装置、模块、和系统(例如,在集成电路中)期间,性能改进可以与物理实现方式进行权衡,由此改进制造方法。例如,性能改进可以针对布局面积进行权衡,从而与已知实现方式的性能匹配,但使用更少的硅。这可以例如通过以串行化方式重用功能块,或在设备、装置、模块、和/或系统的元件之间共享功能块来完成。相反,产生对设备、装置、模块、和系统的物理实现方式的改进(例如,减小的硅面积)的本申请中提出的概念可以针对性能改进进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。本申请人在此独立地公开了本文描述的每个单独特征以及两个或更多个这类特征的任意组合,包括根据本领域技术人员的一般常识能够基于本说明书作为整体被执行的这类特征或组合,无论这类特征或特征的组合是否解决了本文公开的任何问题。鉴于前面的描述,对于本领域技术人员而言显而易见的是,可以在本发明的范围内进行各种修改。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1