CN102708533A - 图形处理 - Google Patents
图形处理 Download PDFInfo
- Publication number
- CN102708533A CN102708533A CN2012100529266A CN201210052926A CN102708533A CN 102708533 A CN102708533 A CN 102708533A CN 2012100529266 A CN2012100529266 A CN 2012100529266A CN 201210052926 A CN201210052926 A CN 201210052926A CN 102708533 A CN102708533 A CN 102708533A
- Authority
- CN
- China
- Prior art keywords
- value
- attribute
- vertex shader
- vertex
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本发明涉及图形处理。图形处理器包括顶点着色器20,该顶点着色器处理来自顶点缓冲器26的输入属性值以便产生由图形处理器的光栅器/片段着色器22在处理用于显示的图像时使用的输出的顶点着色的属性值28。系统识别何时由顶点着色器20从顶点着色器输入属性值中产生的顶点着色器输出属性值将是从其产生所述顶点着色器输出属性值的顶点着色器输入属性值的拷贝。在这种情况下,顶点着色器20不产生拷贝的顶点着色器输出属性值,而是改为光栅器/片段着色器22处理对应的顶点着色器输入属性值以代替在别的情况下将由顶点着色器20产生的拷贝的顶点着色器输出属性值。
Description
技术领域
本发明涉及图形处理,并且特别地,涉及包括顶点着色(vertex shading)阶段的图形处理系统的操作。
背景技术
如本领域中已知的,图形处理典型地以流水线(pipelined)方式执行,具有对数据进行操作以便产生显示的最终图像的一个或多个流水线阶段。该处理的两个重要阶段典型地为:诸如变换和照明之类的所谓的顶点着色操作,其在代表要显示的图像的图元(多边形)的顶点上执行;以及后续的片段(像素)着色操作,其对构成要显示的图像的各个片段(像素)着色(赋色)。
诸如顶点变换和照明之类的顶点着色操作典型地在图形处理的所谓的“顶点着色器”阶段中执行。这典型地为在输入数据值上执行顶点着色器程序以便产生希望的输出数据集合(例如适当变换和照明的顶点数据)以供图形流水线的其余部分处理的可编程处理单元。(如本领域中已知的,通常将场景的每个图元(多边形)定义和表示为顶点集合,其中每个顶点具有与其关联的用于该顶点的数据值集合。顶点着色过程例如基于顶点所涉及的图元所经受的任何变换或照明修改针对该顶点的初始定义的数据值。)。
一旦用于场景的输入数据值经过顶点“着色”,那么通常将代表场景的图元光栅化以便为场景产生多个要被处理的“片段”。(如本领域中已知的,“片段”是在其上执行图形处理操作(例如再现)的离散图形实体。每个片段与场景的一个或多个采样点对应并且具有与其关联的必要数据,例如红色、绿色、蓝色(RGB)颜色数据、阿尔法(透明度)值和深度值,以允许显示所述(一个或多个)样本点。(片段也可以称为像素,但是情况并非必然是给定片段将完全与最终显示中的单个像素(像素元素)对应,因为诸如向下缩放之类的后处理可能意味着图形处理在其上操作的实体(片段)与显示像素之间不存在一一对应。))。
图形片段一旦产生,则经历对其着色以便产生其最终的输出颜色等值的若干过程,例如应用纹理、混合等等。例如显示所述片段所代表的(一个或多个)样本点所需的导出输出数据值的这样的过程可以称为“片段着色”或者“像素着色”并且在处理流水线的片段着色(也称为像素着色)阶段中执行。片段着色过程处理片段的初始定义的片段数据值以便正确地导出该片段的输出数据(显示该片段代表的(一个或多个)样本点所需的数据)。再一次地,片段着色器可以为执行一个或多个片段着色器程序以便对片段适当地着色(赋色)的可编程单元。
如本领域中已知的,顶点和片段着色操作通常对所谓的“属性”进行操作。属性是着色器程序中的输入或输出变量,并且可以代表例如位置、颜色或纹理坐标等等。
顶点着色器的输入属性可以称为初级属性,并且顶点着色器的输出属性(其也是片段着色器输入属性)可以称为次级属性。通常,对于给定的着色器程序(链接的顶点和片段着色器)而言,存在固定数量的初级属性(顶点着色器输入变量)和固定数量的次级属性(顶点着色器输出/片段着色器输入变量)。
对于特定的绘图(draw)调用而言,针对非实例化(instanced)的绘图,每个初级属性(顶点着色器输入变量)具有用于绘图调用的每个顶点的定义值。在实例化绘图的情况下,每个初级属性(顶点着色器输入变量)具有用于每个顶点或者用于每个实例的定义值。因此,在实例化模式操作中,一些初级属性将具有在每顶点基础上定义的值,并且因而可以被认为是“每顶点”属性。同样地,可以存在其值在每实例基础上定义的初级属性,所述属性因此可以被认为是“每实例”属性。
如本领域中已知的,当图形处理器在所谓的“实例化”模式下操作时,将绘制相同输入几何结构的多个“实例”(例如每次在稍微不同的位置)。在这种情况下,顶点着色器将每顶点每实例运行一次(即次数等于顶点数量乘以实例数量),而不是仅仅每顶点运行一次。因此,对于每个不同的顶点和实例组合而言,通常将存在为每个次级属性(顶点着色器输出变量)产生的顶点着色器输出(次级属性值)。
初级属性值典型地存储在存储器中以供顶点着色器使用。(这通常在图形API中规定。)要求图形处理的主机系统上的应用程序通常将规定顶点着色器输入属性和输入属性值的存储布局。
在传统的即时模式图形处理单元的情况下,为了向诸如片段着色器之类的后续处理阶段提供输出的经过顶点着色的次级属性值,顶点着色器输出典型地被引导通过芯片内的内部流水线。在延迟再现图形处理器(例如基于图块(tile)的图形处理器)的情况下,通常将顶点着色器输出(顶点着色的属性值)写到存储器,当片段着色器等需要时,于是从所述存储器访问这些顶点着色器输出。
在属性值存储于存储器中的地方,顶点着色器和片段着色器等通常将提供有适当的存储地址并且使用适当的存储地址以便在适当属性值要被存储或所存储的地方从存储器存储和检索(retrieve)这些值。
例如,顶点着色器将执行加载特定输入属性值以供处理的指令,并且该指令将包括或者指示允许顶点着色器在存储输入属性值的地方从存储器中检索适当的属性值的存储地址。类似地,片段着色器将执行加载特定的顶点着色的输出属性值以供处理的指令,并且该指令将包括或者指示允许片段着色器在存储输出属性值(顶点着色器的输出)的地方从存储器中检索用于所讨论的多边形(图元)的每个转角顶点的适当输出属性值的(一个或多个)存储地址。
申请人相信,仍然存在改进包括顶点着色阶段的图形处理器操作的范围。
发明内容
依照本发明的第一方面,提供了一种操作图形处理系统的方法,该图形处理系统包括处理输入属性值以便产生输出的顶点着色的属性值以供该图形处理系统的后续阶段使用的顶点着色阶段,该方法包括:
识别何时由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同,以及
当识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时:
控制顶点着色器以便不从顶点着色器输入属性值中产生顶点着色器输出属性值;并且
使得需要使用本将由顶点着色器产生的顶点着色器输出属性值的后续图形处理阶段改为处理对应的顶点着色器输入属性值。
依照本发明的第二方面,提供了一种用于处理图形的系统,该系统包括:
包括多个图形处理阶段的图形处理器,所述图形处理阶段包括顶点着色阶段以及顶点着色阶段后续的至少一个处理阶段,其中顶点着色阶段处理输入属性值以便产生输出的顶点着色的属性值以供图形处理器的所述至少一个后续处理阶段使用;以及
处理器,其被配置成:
识别何时由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同;
并且当识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时,使得顶点着色器不从顶点着色器输入属性值中产生顶点着色器输出属性值;
并且在识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同的情况下,使得将处理顶点着色阶段的输出的所述至少一个后续图形处理阶段处理对应的顶点着色器输入属性值而不是在别的情况下将由顶点着色器产生的顶点着色器输出属性值。
在本发明中,图形处理操作被配置成识别何时顶点着色器的输出将与其输入属性值相同(即何时顶点着色器输出将简单地为顶点着色器输入属性的拷贝)。
申请人认识到,在一些情况下,对于给定顶点着色器输入属性的顶点着色器操作可能事实上使得顶点着色器输入属性值未改变,从而实际上顶点着色器的操作简单地让输入值通过到达其输出而不改变该输入值。例如,如果顶点着色器输入属性为用于顶点的纹理坐标,则情况就是这样。
在本发明中,当识别这样的“贯通(pass-through)”情形时,顶点着色器被控制为不产生输出值(即它不产生输入的拷贝),并且作为代替,需要使用该输出的任何图形处理阶段被控制为改为处理对应的顶点着色器输入属性值。
这种布置具有若干优点。首先,通过允许图形处理的后面的阶段直接使用顶点着色器输入,这避免了需要顶点着色器存储“拷贝”的输出值以供那些图形处理阶段使用。因此,这允许避免写入实际上冗余的“拷贝”的输出值,并且此外首先避免它们的生成。
此外,通过控制顶点着色器不产生拷贝的“贯通”输出值,避免了用于在顶点着色器中产生拷贝的输出值并且然后存储它们以供后续图形处理阶段使用的存储业务量、存储使用量、带宽和执行时间。
因此,例如与简单地将片段着色器所需的所有顶点着色器输出写到存储器的布置相比,本发明可以减少用于图形处理系统中的顶点着色器操作的存储业务量和使用量以及因而功率使用量。这通常是有益的,但是对于要用在低功率和便携式设备中的图形处理系统而言是特别有利的。
顶点着色器处理的输入属性值(即如上文所讨论的输入变量值)(以及对应的输出属性值(输出变量值))可以是顶点着色器可以对其操作(和产生)的任何适当的这样的属性值。它们如本领域中已知的典型地将是并且在一个优选的实施例中为诸如位置、颜色等等之类的属性的值。
在这里,应当指出的是,本发明同样地适用于图形处理系统包括多个顶点着色器的情况,例如可能是多核系统的情况。在这种情况下,顶点着色阶段将包含例如并行操作的多个单独的顶点着色器。在这样的布置中,每个顶点着色器优选地以本发明的方式操作,即不存储用于“贯通”属性的输出值。
要使用顶点着色器的输出的后续图形处理阶段可以是任何适当的且希望的这样的图形处理阶段。它们优选地为图形处理系统的后续着色器阶段。在一个特别优选的实施例中,后续图形处理阶段为片段着色器。它也可以例如为几何着色器。
其中顶点着色器输出属性值是顶点着色器输入属性值的拷贝的情形可以以任何适当且希望的方式并且在系统的任何适当的阶段处和处理器中进行识别。这优选地通过标识要直接从顶点着色器输入属性拷贝的某个或者所述顶点着色器输出属性来完成。最优选地,系统试图识别(并且多次识别)这样的情形,其中对于特定的绘图调用,输出属性的值将与用于所有顶点的输入值相同,与输入值独立。
在一个特别优选的实施例中,顶点着色器编译器做到这样。因此,在一个优选的实施例中,顶点着色器编译器被配置成在它编译顶点着色器代码时,对于每个顶点着色器输出属性检测其值是否要直接从顶点着色器输入属性的值拷贝(即该输出属性是否为“贯通”属性)。这可以通过使用适合这样做的任何希望的编译器技术来完成。
在这个方面,应当指出的是,尽管优选的是在本发明中适当地识别和处置顶点着色器输出属性值为顶点着色器输入属性值的拷贝的每种情况,但是申请人已经认识到,也许并非总是可能的是,标识何时顶点着色器输出属性值是顶点着色器输入属性值的拷贝的机制在其操作中完全精确或可靠。例如,在顶点着色器编译器正用于这样做的情况下,情况可能是(并且的确典型地将是)该编译器将不能够对于所有着色器程序都理想地标识该特性。
为了对此进行解释,在一个特别优选的实施例中,配置和构造用于标识其中顶点着色器输出属性值是顶点着色器输入属性值的拷贝的情形的机制,以便给出保守的结果,即“选择稳妥的做法”。因此,在一个特别优选的实施例中,这样布置,使得识别其中顶点着色器输出属性值是顶点着色器输入属性值的拷贝的情形时的任何错误应当使得系统将在情况如此时无法检测,而不是在事实上“贯通”情形不存在时确定“贯通”情形存在。
因此,系统优选地被配置成使得识别其中顶点着色器输出属性值是顶点着色器输入属性值的拷贝的情形时的任何错误都是在事实上情况如此时无法检测的错误。这将具有系统针对所有情形都行为正确的效果(但是潜在地错失以本发明的方式优化和优选地操作的一些机会)。
在这里,还应当指出的是,相应地,以其中标识“贯通”属性或情形(即其中确定顶点着色器输出属性值是顶点着色器输入属性值的拷贝)的特定方式引用本发明的操作涉及其中系统(例如编译器)标识了“贯通”情形的那些情形。
顶点着色器可以被控制为在以任何适当且希望的方式并且在系统的任何适当的阶段处和处理器中识别了“贯通”输入的情况下不产生输出值。再一次地,在一个特别优选的实施例中,顶点着色器编译器做到这样。因此,在一个优选的实施例中,顶点着色器编译器被配置成在检测到“贯通”输入(例如“贯通”属性)时省略在别的情况下将使得顶点着色器处理输入属性值以产生拷贝的输出属性值的代码。再一次地,这可以通过使用适合这样做的任何希望的编译器技术来完成。
在以任何适当且希望的方式标识了“贯通”输入的情况下,可以类似地使得后续图形处理阶段使用顶点着色器输入属性值。优选地,使得该处理阶段(例如片段着色器)加载顶点着色器输入属性值而不是顶点着色器输出值。
在一个特别优选的实施例中,用于图形处理阶段的加载指令被配置成使得该阶段从顶点着色器输入属性值而不是顶点着色器输出属性值中加载要处理的值。因此,在一个特别优选的实施例中,用于图形处理阶段(例如以及优选地片段着色器)的加载指令能够使得该图形处理阶段加载顶点着色器输入属性值或者顶点着色器输出属性值。优选地,这通过规定其值要被加载以供处理的属性是否为顶点着色器输入属性(从而其值应当从顶点着色器输入属性值中检索)或者顶点着色器输出属性(从而其值应当从顶点着色器输出属性值中检索)的加载指令来实现。
例如加载指令的这种配置可以由用于所讨论的图形处理阶段的编译器(从而由例如片段着色器编译器)完成。然而,由于这可能因而要求在编译诸如片段着色器之类的其他图形处理阶段之前编译顶点着色器,因而在一个特别优选的实施例中,着色器链接器(其将这些阶段一起链接成一个着色器程序)被配置成修改用于所讨论的阶段的代码(例如加载指令),使得该阶段在标识了“贯通”情形时将读取适当的顶点着色器输入属性(值)。
(如本领域中已知的,着色器链接器操作例如典型地将片段着色器的每个输入属性与对应的顶点着色器输出属性匹配。在本发明中,在“贯通”属性存在的情况下,优选地改为将该操作修改成将适当的片段着色器输入属性链接到顶点着色器输入属性。)。
产生和/或修改适当的图形处理阶段代码(例如加载指令)的需要可以以任何希望的且适当的方式识别。在一个特别优选的实施例中,产生指示顶点着色器输出属性的值将是顶点着色器输入属性的直接拷贝以及它们将是哪个输入属性的值的拷贝的元信息,并且优选地该元信息然后用来触发诸如片段着色器之类的一个或多个后续图形处理阶段以便将顶点着色器输入值用于所讨论的输出属性(而不是寻找顶点着色器输出属性值)。
元信息优选地由顶点着色器编译器优选地在其识别(如上面所讨论的)“贯通”属性的存在时产生。因此,在一个优选的实施例中,顶点着色器编译器被配置成在与着色器代码关联的元信息中记录所讨论的顶点着色器输出属性是顶点着色器输入属性的拷贝以及它是哪个输入属性的拷贝。类似地,在一个特别优选的实施例中,着色器链接器被配置成识别该元信息并且对此响应以修改用于所讨论的阶段的代码(例如加载指令),使得该阶段将读取对应的顶点着色器输入属性(值)。
除了在标识了贯通属性的情况下控制诸如片段着色器之类的后续图形处理阶段以便读取顶点着色器输入属性值之外,优选地也向后续图形处理阶段提供允许它访问和读取它所需的顶点着色器输入属性的特定值的数据。这可以以任何希望且适当的方式完成。
在一个特别优选的实施例中,索引机制用来检索适当的属性值。
最优选地,图形处理器的所有着色器阶段使用索引布置以便标识从何处读取(以及优选地往何处存储)属性值。因此,顶点着色器和片段着色器等等优选地被提供并且使用适当的索引以便从存储适当的属性值所在的存储器中检索适当的属性值。
例如,顶点着色器将执行加载特定输入属性值以供处理的指令,并且该指令将包括或指示允许顶点着色器从存储器中检索适当的属性值的索引。类似地,片段着色器将执行加载特定的例如顶点着色的输出属性值以供处理的指令,并且该指令将包括或指示允许片段着色器从存储器中检索适当的输出属性值的用于所讨论的图元的每个转角顶点的索引。
优选地,根据其与哪个顶点或实例(在使用实例化模式的情况下)有关而索引输入属性值(顶点着色器输入属性值)。因此,在每顶点基础上定义的顶点着色器输入属性值优选地在存储器中参照它们与之有关的顶点(即使用(输入)顶点索引)而被索引。类似地,在每实例基础上定义的顶点着色器输入属性值优选地参照它们与之有关的实例(即使用(输入)实例索引)而被索引。每实例属性也可以将实例索引除以定义的实例除数以便使得(在除数大于1的情况下)该值针对该数量的实例而被重复。
顶点着色器的输出属性值优选地可以使用“展开的”输出索引而进行索引。这是因为尽管通常对于每个顶点对于每个依赖于顶点的输入属性存在仅仅一个顶点着色器输入属性值并且对于每个实例对于每个依赖于实例的输入属性存在一个顶点着色器输入属性值,但是顶点着色器的输出将在正常过程中“展开”或“放大”以便对于每个顶点对于每个实例(对于每个单独的顶点和实例组合)提供对于每个输出属性的单独的输出属性值。因此,顶点着色器输出属性值优选地可以对于用于顶点着色器输入属性值的顶点索引和实例索引使用不同的索引布置。
顶点着色器使用的输出索引(当存储其输出的顶点着色的属性值时)和顶点着色器使用的输入索引可以通过每顶点/实例组合发起一个顶点着色器线程例如作为顶点着色器执行功能的一部分而产生。
因此,在正常过程中,诸如片段着色器之类的后续图形处理阶段优选地在检索顶点着色器的输出属性值以供处理时使用“展开的”输出索引。然而,在本发明中,在标识了“贯通”情形的情况下,那么如上面所讨论的,后续图形处理阶段将访问顶点着色器输入属性值而不是顶点着色器输出属性值。在这种情况下,因此优选地向诸如片段着色器之类的后续图形处理阶段提供允许它检索并且使用适当的(一个或多个)顶点着色器输入属性值的一个或多个适当的索引。
如果情况如此,那么可能的是将图形处理系统配置成能够根据需要向诸如片段着色器之类的后续图形处理阶段以及为了这些后续图形处理阶段直接使用而提供用于(一个或多个)输入属性值的适当的顶点索引或实例索引。
然而,在一个特别优选的实施例中,图形处理系统被配置成向后续图形处理阶段提供可以用来如上面所讨论的检索次级(顶点着色器输出)属性值的优选地处于“展开的”输出索引形式的单一形式的输出索引,其中用于输入属性值的任何其他形式的索引(例如以及优选地如上面所讨论的顶点索引或实例索引)于是在需要时可以从并且从该输出索引中导出。
因此,在一个特别优选的实施例中,向诸如片段着色器之类的后续图形处理阶段提供“展开的”输出索引,如果需要的话,可以从该“展开的”输出索引导出用于输入属性值的适当的索引(即优选地顶点索引或实例索引)。这于是意味着仅仅单一形式的索引(即输出的“展开的”索引)需要提供给后续图形处理阶段(而不是要求这些阶段支持并且潜在地被提供多种形式的索引)。而且,使用输出的展开的索引作为使用的索引形式是有利的,因为通常该形式的索引将比提供例如顶点索引和实例索引二者占用更少的存储空间。
“展开的”输出索引优选地通过图形处理阶段要执行的加载(或存储)属性指令提供和/或指示。
在这些布置中,用于输入属性值的(一个或多个)索引可以以任何适当的且希望的方式从提供给后续图形处理阶段的输出索引中导出。它们优选地可从(且从)输出索引中以预定的方式导出。
在一个特别优选的实施例中,可以从提供给后续图形处理阶段的输出的“展开的”索引中导出的索引包括如上面所讨论的顶点索引和实例索引。
最优选地,提供给后续图形处理阶段的输出的“展开的”索引以预定的方式从(一个或多个)输入属性值的实例索引和/或顶点索引中导出,顶点着色器处理(或者将处理)所述输入属性值以便产生相关输出的顶点着色的输出属性值。这于是意味着通过反转输出索引生成操作,可以检索对应的顶点索引或实例索引。(换言之,申请人认识到,如果以适当的方式从定义的输入属性值索引中导出输出的展开的索引,那么可以分解该输出索引以便提供对应的输入属性值索引,从而提供用于检索输入属性值索引而无需直接规定它们的机制。)。
因此,在一个特别优选的实施例中,以预定的方式从对于其定义对应的顶点着色器输入属性值的顶点和实例的顶点索引和实例索引产生在后续图形处理阶段要处理顶点着色器产生的输出属性值时提供给后续图形处理阶段的索引。
在一个特别优选的实施例中,顶点索引和实例索引之一(以及优选地顶点索引)可以借助于输出索引值上的取模运算从输出索引中导出,并且顶点索引和实例索引中的另一个(以及优选地实例索引)可以通过对输出索引值执行除法运算而从输出索引中导出。
最优选地,如下导出要使用的输出索引值(提供给片段着色器等等的索引):
输出索引值=(顶点索引)+(实例索引)x(填充的实例大小)
其中“填充的实例大小”为设定的(选择的)等于或大于每实例顶点数的值。
这于是意味着(输入)顶点索引可以通过取模运算从输出索引值获得:
顶点索引=(输出索引值)模(填充的实例大小)
并且(输入)实例索引可以通过除法运算从输出索引值获得:
实例索引=向下取整((输出索引值)/(填充的实例大小))。
其效果在于,针对例如给定输入索引的每个实例产生的每个输出索引在经受上面的取模运算时将返回相同的顶点索引,并且针对给定输入实例的每个顶点产生的每个输出索引在经受上面的除法运算时将返回相同的实例索引。因此,片段着色器例如可以针对将是输入属性值的拷贝的每个输出属性值(适当地)导出用于检索适当的输入属性值的相同索引(顶点索引或实例索引)(即使每个不同的“拷贝”输出属性值将具有不同的“输出索引”值)。
“填充的实例大小”应当至少等于每实例的顶点数(其将例如针对所讨论的绘图调用进行定义),但是它不必准确地为该数。优选地,将它设定为在硬件中执行取模运算时有效地使用的值(因为这于是与完全通用的模所需的相比,允许更简单的模电路)。最优选地,将其向上取整为(相对)容易取模的下一个更大的或相等的值(高于每实例的顶点数)。
在图形处理系统使用对于特定属性允许每实例输入值具有实例索引的另外的除数值的用于实例化的API机制的情况下,那么优选地在索引这适用的任何每实例输入属性值时相应地使用这种另外的除数机制(其中当导出实例索引以便用来从提供给例如片段着色器的输出的展开的索引中检索那些属性值时优选地简单地将所述另外的除数乘上除数值(填充的实例大小))。
因此,当片段着色器(或者其他后续图形处理阶段)要处理顶点着色器输入属性值(即“贯通”情形存在)时,例如片段着色器将被引导成加载顶点着色器输入属性值并且被提供输出索引值,其然后从该输出索引值导出用来检索希望的顶点着色器输入属性值的索引。在上面讨论的其中可以使用不同的操作以便从提供的输出索引中导出希望的索引的布置中,图形处理阶段也将需要被告知要使用哪个索引导出操作(以及要在该操作中使用的任何值)。
虽然在这个方面诸如片段着色器之类的图形处理阶段的加载指令有可能包括导出用来检索相关顶点着色器输入属性值的索引所需的所有信息,但是在一个特别优选的实施例中,要执行的索引导出操作以及优选地该操作所需的任何数据(值)优选地通过与加载指令本身分离的元信息指示和/或作为该元信息而提供。该元信息优选地指示提供给片段着色器等等的输出索引是否应当经受如上面所讨论的取模或除法运算以便导出顶点索引或实例索引以供检索(一个或多个)属性值时使用。最优选地,该元信息也指示或者包括用来导出希望的索引的适当的模或除数值(即填充的实例大小以及实例除数(如果必要的话))。
在一个特别优选的实施例中,元信息与所讨论的属性关联。于是,无论何时处理属性的值,优选地读取与该属性关联的元信息以便确定用来确定用于检索属性值本身的索引的索引导出方法(如果有的话)。
在一个特别优选的实施例中,该元信息处于属性描述符的形式,该属性描述符优选地尤其适当地指示对应属性是否为“除数”属性(即应当对“展开的”输出索引使用除法运算以便导出要使用的索引)或者“模”属性(即应当对“展开的”输出索引使用除法运算以便导出要使用的索引)或者“正常的”或“线性的”属性(即应当直接使用“展开的”输出索引)以及对应的除数或模值(填充的实例大小(以及实例除数(如果必要的话)))。
在上面讨论的优选的布置中,每顶点定义的属性将定义为模值等于填充的实例大小的模属性,并且每实例定义的属性将定义为除数值等于填充的实例大小(如果需要的话,乘以任何需要的实例除数)的除数属性。
因此,在一个特别优选的实施例中,对于一个以及优选地每个顶点着色器输入属性产生并且存储指示如何导出允许检索希望的输入属性值的正确索引的优选地处于属性描述符形式的元信息。然后,后续图形处理阶段(例如片段着色器)优选地使用该元信息导出对于存储的顶点着色器输入属性值的希望的索引。
在一个特别优选的实施例中,该机制也由顶点着色器用来访问其输入属性值。因此,顶点着色器的加载属性指令优选地包括或指示关于所讨论的属性值使用的展开的输出索引,并且顶点着色器然后根据与该属性关联的元信息确定如何处理该索引以便导出用来检索要处理的输入属性值的实际索引(顶点或实例索引)。
在一个特别优选的实施例中,每个顶点着色器输入属性具有对应的输入属性描述符,并且每个顶点着色器输出属性具有对应的输出属性描述符。
于是,输入属性描述符优选地由顶点着色器用来正确地访问其输入属性值,并且在存在“贯通”情形的情况下由诸如片段着色器之类的其他图形处理阶段用来访问顶点着色器输入属性值。次级(顶点着色器输出)属性描述符优选地由顶点着色器用来确定将其输出属性值写到何处,并且由诸如片段着色器之类的后续图形处理阶段用来确定何处读取它们。
因此,在一个特别优选的实施例中,存在包括多个属性描述符的元信息阵列,每个属性描述符与顶点着色器的相应的输入属性关联且对应,所述属性描述符尤其是包含允许诸如片段着色器之类的图形处理阶段在其要使用适当存储的相应输入属性的值时检索该顶点着色器输入属性。
类似地,优选地存在包括多个属性描述符的元信息阵列,每个属性描述符与顶点着色器的相应的输出属性关联且对应。
属性描述符优选地由图形处理器驱动器在绘图调用时间产生。
可以以任何希望的且适当的方式指示要由图形处理阶段在其要处理属性值时读取(使用)的相关元信息(例如属性描述符)。在一个特别优选的实施例中,给每个属性分配属性索引,并且这些属性索引然后用来指示要使用的元信息(属性描述符)。属性索引可以方便地由例如顶点着色器编译器分配。
因此,在一个特别优选的实施例中,通过使用分配给所讨论的属性的属性索引标识和读取元信息(属性描述符)。最优选地,将属性描述符存储在属性描述符阵列(或者多个阵列)中并且通过使用分配给所讨论的属性的属性索引在其中对其索引。(在这里,应当指出的是,由于属性描述符与特定属性(而不是特定属性值)有关,于是对于特定着色器程序而言,将存在固定数量的属性描述符,而不管任何特定绘图调用中绘制的顶点和实例的数量如何。)。
优选地,在对应的加载(或存储)指令中将要使用的元信息(属性描述符)的属性索引提供给图形处理阶段。
因此,优选地存在通过使用定义的属性索引而索引的元信息阵列。于是,诸如片段着色器之类的图形处理阶段可以使用它接收的属性索引(例如以及优选地在加载或存储指令中)以便查找元信息,并且然后如果元信息这样指示的话,则以适当的方式从提供的输出索引中导出用来检索要处理的属性值的实际索引。
在一个特别优选的实施例中,相对于为相关索引的属性值定义起始(基本)地址的基本存储(缓冲)地址使用如上面所讨论的用来检索属性值的诸如实例索引、顶点索引或者“展开的”索引之类的特定索引。这于是意味着例如通过引用与其有关的实例而索引的所有属性值可以这样相对于存储器中的单个共同的基本缓冲地址而索引。当可以例如相对于属性值与之有关的顶点、实例或顶点/实例组合索引时,这简化了属性值的加载和存储及其在存储器中的组织。
在一个特别优选的实施例中,当正在检索以及将要检索属性值时,除了适当的索引和缓冲基本地址之外,使用另外的信息。在一个特别优选的实施例中,该另外的信息包括与存储器中(缓冲器中)属性值的布局有关的另外的参数或信息。关于存储器中属性值的布局的该另外的信息优选地包括以下所述的一个或多个以及优选地全部:存储器中属性值的间隔的指示(优选地处于“步幅(stride)”值的形式),所讨论的属性距某个或所述基本存储地址的相对位置的指示(优选地处于“偏移”值的形式),和/或指示属性的组件数据类型和组件数量的用于属性值的“类型”指示器。(在一个优选的实施例中,属性加载和存储指令基于规定的数据类型执行数据格式转换。)。
在这些布置中,相应地优选地向图形处理阶段提供适当的缓冲基本地址(和其他信息(在需要的情况下))以用于检索属性值,以及用于导出用来检索(或存储)希望的属性值的索引的技术以及必要的任何数据的指示。因此,在一个特别优选的实施例中,优选地与诸如步幅、偏移和/或数据类型之类的其他数据一起向图形处理阶段提供索引和基本存储地址,据此图形处理阶段于是导出用来检索其需要的属性值的存储地址。
缓冲基本地址等信息可以由加载(或存储)指令直接提供或指示。然而,在一个特别优选的实施例中,优选地以上面所讨论的方式优选地以属性描述符的形式将缓冲基本地址提供为与所讨论的属性关联的元信息。诸如步幅、偏移和数据类型之类的其他信息(在使用的情况下)也优选地以此形式提供。
因此,在一个特别优选的实施例中,每个属性描述符(如上面所讨论的)优选地也或者改为(并且优选地也)优选地与诸如步幅、偏移和数据类型之类的其他信息一起指示要在检索或存储该属性的值时使用的缓冲基本地址(存储基本地址)。因此,在一个特别优选的实施例中,一个以及优选地每个属性描述符尤其指示要在加载(或存储)其关联的属性的值时使用的缓冲基本地址和索引导出机制(以及优选地其他的信息,例如步幅、偏移和数据类型)。
因此,在一个特别优选的实施例中,对于一个并且优选地对于一些或者每个顶点着色器输入属性,优选地与诸如步幅、偏移和数据类型之类的其他信息一起地,产生并且存储优选地处于属性描述符形式的指示如何导出允许检索希望的输入属性值的适当索引以及该索引与之有关的基本存储地址的元信息。然后,图形处理阶段(例如片段着色器)优选地使用该元信息以便导出存储的顶点着色器输入属性值的存储地址。
次级属性(顶点着色器输出属性)优选地以相同的方式布置,即它们具有优选地处于属性描述符形式的对应关联的元信息,其以针对上面讨论的顶点着色器输入属性的情况相同的方式提供索引导出和基本存储地址信息等等。
在一个特别优选的实施例中,加载(属性)指令和存储(属性)指令以上面讨论的方式操作。
指示用来导出用于检索(或存储)希望的属性值的索引的索引导出过程和/或指示要在以上面讨论的方式检索(或存储)希望的属性值时使用的基本存储地址等等的元信息(例如属性描述符)的使用是特别有利的,因为它例如意味着该信息与着色器代码分离且独立。这于是允许例如与不同的元信息(属性描述符)集合一起使用相同的着色器代码,并且避免了在元信息控制的参数(例如存储器中属性值的组织)改变时改变着色器代码的需要。它也允许相同的机制用来控制来自顶点着色器的输入和输出二者,并且由顶点着色器以及诸如片段着色器之类的后续图形处理阶段使用。
因此,可以相信,在图形处理系统中例如指示用来导出用于检索希望的属性值的索引的索引导出过程和/或指示要用于检索希望的属性值的基本存储地址的与顶点着色器属性关联的元信息的这种用途可能本身就是新颖和有利的,而不仅仅在标识“贯通”属性的情况下是新颖和有利的。
因此,依照本发明的第三方面,提供了一种操作图形处理系统的方法,该图形处理系统包括顶点着色阶段,该顶点着色阶段处理顶点着色阶段的输入属性值以便产生顶点着色阶段的输出属性值以供该图形处理系统的后续阶段使用,该方法包括:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联;以及
当图形处理阶段要加载和/或存储顶点着色阶段属性的值时,其首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
依照本发明的第四方面,提供了一种图形处理系统,该系统包括:
多个图形处理阶段,其包括顶点着色阶段以及顶点着色阶段后续的并且将处理顶点着色阶段的输出的至少一个处理阶段;其中:
顶点着色阶段处理顶点着色阶段的输入属性的值以便产生顶点着色阶段的输出属性的值以供图形处理系统的后续阶段使用;并且
图形处理系统被配置成将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联;并且
图形处理阶段中的一个或多个被配置成当其要加载和/或存储顶点着色阶段属性的值时,首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
本领域技术人员应当理解的是,本发明的这些方面可以且优选地的确包括本文适当描述的本发明的优选的和可选的特征中的任何一个或多个或者全部。
因此,例如元信息优选地处于如上面所讨论的属性描述符的形式,其中顶点着色器属性中的至少一些和/或全部优选地具有对应的属性描述符。类似地,元信息(属性描述符)优选地由图形处理器驱动器产生,并且优选地在绘图调用时间产生。元信息优选地包括指示如何和/或从何处或者至何处存储和/或加载属性值的信息。
因此,元信息优选地包括或者指示允许确定存储(或者要存储)属性值的存储地址的信息。因此,它优选地允许在加载(或存储)要确定的属性的值时使用索引,这优选地通过以下方式实现:在加载(或存储)属性值时指示用来导出要使用的索引的过程。最优选地,它也指示或者作为代替指示要在加载(或存储)属性值时使用的基本存储地址。
如上面所讨论的,在一个特别优选的实施例中,元信息可以并且优选地的确指示关于存储器中属性值的布局的另外的信息。这可以例如且优选地的确包括存储器中属性值的间隔(“步幅”)、所讨论的属性距一个或者所述基本存储地址的相对位置(“偏移”)等等的指示。
如上面所讨论的,图形处理系统的所述至少一个后续阶段优选地被配置成在它要处理顶点着色阶段的属性时读取与该属性关联的元信息,并且如果该元信息这样指示,那么依照该元信息,优选地相对于该元信息指示的任何基本存储地址导出要用于检索属性值的索引。
最优选地,图形系统的阶段执行指示要处理的属性的加载属性指令,并且响应于该加载属性指令,然后读取与所讨论的属性关联的元信息并且根据该元信息确定是否以及如何导出要用来检索所需的属性值的索引和/或要在检索所需的属性值时使用的基本存储地址。
优选地,至少在要加载顶点着色器属性值时使用元信息。其优选地在既加载又存储顶点着色器属性值时使用(并且因而优选地,顶点着色器输入和顶点着色器输出属性二者可以具有与其关联的元信息)。
类似地,优选地至少一个后续图形处理阶段(优选地片段着色器)使用元信息。最优选地,顶点着色器也使用它。
本发明也扩展到元数据的生成。
因此,依照本发明的第五方面,提供了一种操作图形处理系统的方法,该图形处理系统包括顶点着色阶段,该顶点着色阶段处理顶点着色阶段的输入属性值以便产生顶点着色阶段的输出属性值以供该图形处理系统的后续阶段使用,该方法包括:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联。
依照本发明的第六方面,提供了一种图形处理系统,该系统包括:
多个图形处理阶段,其包括顶点着色阶段以及顶点着色阶段后续的并且将处理顶点着色阶段的输出的至少一个处理阶段;其中:
顶点着色阶段处理顶点着色阶段的输入属性的值以便产生顶点着色阶段的输出属性的值以供图形处理系统的后续阶段使用;并且
图形处理系统被配置成将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联。
本领域技术人员应当理解的是,本发明的这些方面可以且优选地的确包括本文适当描述的本发明的优选的和可选的特征中的任何一个或多个或者全部。因此,元信息优选地采取上述形式,并且优选地由用于图形处理系统的图形处理器的驱动器优选地在绘图调用时间产生。
本领域技术人员应当理解的是,诸如片段着色器之类的后续图形处理阶段可以并且将针对它们的正常处理且以正常的方式(除本发明引入的变化之外)使用属性值(顶点着色器输入和/或顶点着色器输出属性值)。例如,在片段着色器的情况下,片段着色器将使用属性值再现一个或多个图元以便产生例如代表用于显示的帧的再现输出值集合。然后,这些输出值可以导出到外部存储器以供存储和使用,例如导出到显示器的帧缓冲器。
因此,本发明优选地进一步包括适当地使用顶点着色器输出属性值或者对应的顶点着色器输入属性值再现属性值与之相关的一个或多个图元以便产生代表图形处理系统的希望的输出(例如用于显示的帧)的输出值集合。再现过程可以包括本领域中已知的例如对属性值进行混合、片段着色、纹理化等等。
类似地,本发明优选地进一步包括一个或多个后续图形处理阶段,其适当地使用顶点着色器输出属性值或者对应的顶点着色器输入属性值以便产生用于从图形处理系统输出的输出数据值集合。
在一个优选的实施例中,后续图形处理阶段包括片段着色器。在这种情况下,本发明优选地进一步包括图形处理系统的片段着色器,其适当地使用顶点着色器输出属性值或者对应的顶点着色器输入属性值以便产生片段着色的输出数据值集合,其用于例如以及优选地对由图形处理系统产生的诸如要显示的帧之类的输出的位置采样。
然后,输出的例如片段着色的数据值优选地导出到外部(例如主要)存储器以供存储和使用,例如导出到显示器的帧缓冲器。如本领域中已知的,例如根据图形处理系统的性质和配置,所述数据值可以在导出到主要存储器之前在图形处理器本地临时地存储到例如一个或多个图块缓冲器中。
本发明可以用于可以使用图形处理流水线以产生的所有形式的输出,例如用于显示的帧、再现至纹理输出等等。
应当理解的是,由于图形处理流水线产生(再现)的输出典型地由多个图元(以及在基于图块的系统中,由图块)构成,因而在实践中对于构成输出的每个图元(和图块)重复本发明,使得最终对于需要的输出的每个采样点产生适当的再现的片段数据集合。
在一个特别优选的实施例中,在产生并且输出例如写到用于显示设备的帧缓冲器的再现的片段数据的单个图形处理平台上执行本发明的各种功能。
本发明可以在任何适当的系统中实现,所述系统例如适当地配置的基于微处理器的系统。在一个优选的实施例中,本发明在基于计算机和/或微处理器的系统中实现。
本发明的各种功能可以以任何希望的且适当的方式执行。例如,本发明的功能可以根据需要在硬件或软件中实现。因此,例如本发明的各种功能元素和“装置”可以包括可操作来执行各种功能等等的一个或多个适当的处理器、一个或多个控制器、功能单元、电路、处理逻辑、微处理器布置等等,例如适当的专用硬件元件和/或可被编程为以希望的方式操作的可编程硬件元件。
因此,顶点着色器、片段着色器和任何其他图形处理阶段可以根据需要且以任何适当的方式实现,并且可以分别执行任何希望的且适当的顶点着色或者片段着色等功能。
类似地,可以以任何适当且希望的方式定义和存储各种输入和输出属性值、元信息、属性描述符等等。
在这里,也应当指出的是,本领域技术人员将会理解,可以在给定处理器上并行地复制和/或执行本发明的各种功能等。因此,例如如上面所讨论的,顶点着色阶段可以包括并行地操作的多个单独的顶点着色器。
本发明适用于任何适当形式或配置的图形处理器和再现器,例如以及优选地具有“流水线”再现布置的处理器。其特别地适用于基于图块的图形处理器和图形处理系统。
因此,本发明扩展到包括这里描述的本发明的任何一个或多个方面的装置的或者依照本发明的任何一个或多个方面的方法操作的图形处理器和图形处理平台。受执行上面讨论的特定功能所需的任何硬件的影响,这样的图形处理器可以在别的情况下包括图形处理器所包括的通常的功能单元等等中的任何一个或多个或者全部。
本领域技术人员也应当理解的是,所描述的本发明的所有方面和实施例可以适当地包括这里描述的优选的和可选的特征中的任何一个或多个或者全部。
依照本发明的方法可以至少部分地使用软件(例如计算机程序)而实现。因此,可以看出,当从另外的方面来看时,本发明提供了:计算机软件,其特别适于在安装到数据处理装置上时执行这里描述的方法;计算机程序元件,其包括用于当该程序元件运行在数据处理装置上时执行这里描述的方法的计算机软件代码部分;以及计算机程序,其包括当程序运行在数据处理系统上时适于执行这里描述的一种或多种方法的所有步骤的代码装置。数据处理系统可以是微处理器、可编程FPGA(现场可编程门阵列)等等。
本发明也扩展到包括这样的软件的计算机软件载体,其在用来操作图形处理器、再现器或者包括数据处理装置的微处理器系统时与所述数据处理装置结合使得所述处理器、再现器或系统执行本发明的方法的步骤。这样的计算机软件载体可以是诸如ROM芯片、CD ROM或盘之类的物理存储介质,或者可以是诸如导线上的电子信号、光学信号或者例如到卫星等等的无线电信号等等之类的信号。
应当进一步理解的是,不是本发明方法的所有步骤都必须由计算机软件执行,并且从而从进一步广阔的方面来看,本发明提供了计算机软件以及安装在计算机软件载体上用于执行这里阐述的方法的至少一个步骤的这种软件。
因此,本发明可以适当地实施为供计算机系统使用的计算机程序产品。这样的实现方式可以包括固定在诸如非暂时性计算机可读介质之类的有形介质上的一系列计算机可读指令,所述介质例如磁盘、CD ROM、ROM或者硬盘。它也可以包括可经由调制解调器或其他接口设备通过包括但不限于光学或模拟通信线的有形介质或者使用包括但不限于微波、红外或其他传输技术的无线技术无形地传输到计算机系统的一系列计算机可读指令。该系列计算机可读指令实施本文中先前描述的全部或部分功能。
本领域技术人员应当理解,可以以供许多计算机架构或操作系统使用的若干编程语言书写这样的计算机可读指令。此外,可以使用现在的或未来的、包括但不限于半导体、磁性或光学的任何存储技术存储这样的指令,或者使用现在的或未来的、包括但不限于光、红外或微波的任何通信技术传输这样的指令。可以设想,这样的计算机程序产品可以作为具有伴随的打印或电子文档的可移除介质而分发,例如系统ROM或固定盘上的预装有计算机系统的紧缩套装软件,或者通过网络(例如因特网或万维网)从服务器或电子公告板分发。
附图说明
现在将仅通过实例的方式并且参照附图描述本发明的若干优选的实施例,在附图中:
图1示意性地示出了依照本发明的图形处理系统的实施例;以及
图2-7示意性地示出了本发明的实施例的操作。
具体实施方式
图1示意性地示出了可以以本发明的方式操作的基于图块的图形处理系统。该图示出了图形处理系统的与当前实施例的操作有关的主要元件。本领域技术人员应当理解的是,可以存在图形处理系统的未在图1中示出的其他元件。
如图1中所示,图形处理系统包括三个主要的功能单元(处理阶段):顶点着色器20,平铺器(tiler)21以及光栅器和片段着色器22。这些处理阶段使用并且处理存储在各种数据阵列和缓冲器中的数据,所述数据阵列和缓冲器包括索引缓冲器23、绘图调用描述符24、初级属性描述符阵列25、顶点缓冲器(初级属性阵列)26、次级属性描述符阵列27、变化量(varyings)缓冲器(第二属性阵列)28、位置缓冲器29以及多边形列表阵列30。
(在图1中,圆弧形框代表图形处理系统的硬件单元(处理阶段),并且矩形框为存储缓冲器或数据结构。实心箭头示出从处理阶段到存储缓冲器和数据结构的数据流,并且虚线箭头为存储缓冲器与数据结构之间的指针(即其中一个数据结构包含到不同存储阵列中的项的指针)。在这里,应当指出的是,图1仅仅是示意性的,并且例如在实践中所示的诸如顶点着色器和片段着色器之类的功能单元可以共享重要的硬件电路,即使它们在图1中示意性地示为单独的阶段。)。
绘图调用描述符定义一个绘图调用。(如本领域中已知的,到图形处理器以再现图像以供显示的“指令”将以绘图调用描述符的形式提供给图形处理器,其响应于来自运行在主机系统上的用于图形显示的应用程序的命令而产生。图1为了简单起见仅仅示出了用于单个绘图调用的操作。在实践中,将存在多个执行的绘图调用,每个绘图调用具有本领域中已知的对应绘图调用描述符。在要执行多个绘图调用的情况下,每个绘图调用具有描述符并且绘图调用描述符被存储为绘图调用描述符的链接列表。每个单独的绘图调用将以当前实施例的方式处置和处理。)。
如本领域中已知的,绘图调用描述符基本上是顶点着色器20和平铺器21的操作的起点。图形处理单元将接收执行如适当的绘图调用描述符所规定的绘图调用的命令,并且顶点着色器和平铺器然后将操作来执行该命令。
对于光栅器/片段着色器22的操作,平铺器21将针对每个绘图调用把到绘图调用描述符的指针写到多边形列表30中。然后,光栅器/片段着色器22将读取多边形列表阵列30中的指针并且从而知道哪个绘图调用描述符与其光栅化和着色的每个三角形关联。
索引缓冲器23存储用于每个多边形(图元)的每个转角顶点的顶点索引。位置缓冲器29包含从顶点着色器20输出的变换的位置(即观看者看到的绘制多边形(图形图元)所在的位置)。
如本领域中已知的,顶点着色器20采取针对要显示的图像定义的与顶点等关联的输入数据值并且处理这些数据值以便产生对应的“顶点着色”的输出数据值集合以供图形处理系统的后续阶段使用。顶点着色例如修改输入数据以便考虑图像中的照明效果。
如本领域中已知的,平铺器21操作来针对场景的每个图块将用于显示的图像的多边形(图元)分类到适当的多边形列表中,使得光栅器/片段着色器22知道它要为它当前工作的图块处理哪些多边形。平铺器21读取绘图调用描述符24、来自索引缓冲器23的索引以及来自位置缓冲器29的位置信息,并且在多边形列表阵列30中存储多边形列表集合,如下文中将进一步讨论的,这些多边形列表包括允许检索与列表中的多边形顶点关联的相关数据的适当索引。
如本领域中已知的,光栅器/片段着色器22操作来首先将要显示的图像中的多边形光栅化为单独的图形片段(这些图形片段是于是随后经过着色以便显示图像的图形实体),并且然后对光栅化片段执行各种片段着色操作以便产生这些片段的最终要显示的版本,然后它将这些片段版本存储到例如适当的图块缓冲器中以便输出到例如帧缓冲器以供显示。
如本领域中已知的,顶点着色器20执行具有多个输入变量并且产生输出变量集合的顶点着色器程序。输入和输出变量称为属性并且代表正被处理的图像的顶点等等的诸如颜色、位置、纹理坐标等等之类的变量(属性)。顶点着色器20的每个输出属性为片段着色器22的输入属性(变量),并且对于每个着色器程序(链接的顶点着色器和片段着色器)而言,存在固定数量的顶点着色器输入属性(变量)和固定数量的顶点着色器输出/片段着色器输入属性(变量)。
在当前实施例中,顶点着色器的输入属性是并且将称为“初级属性”,并且顶点着色器的输出属性将是并且对应地称为“次级属性”。(顶点着色器输出属性值也称为“变化量”(如图1中所示)。)。
在当前实施例中,每个属性由着色器编译器分配属性索引。
顶点着色器20基于绘图调用描述符24处理输入的初级属性值以便产生希望的输出的经过顶点着色的次级属性值。如本领域中已知的,每个顶点着色器输出(次级)属性可以依赖于一个或多个顶点着色器输入(初级)属性。它也依赖于一个或多个每绘图调用输入(其对于给定绘图调用将是恒定的)。
对于特定的绘图调用而言,每个初级(顶点着色器输入)属性将具有用于该绘图调用的每个顶点的值,或者在实例化绘图的情况下,用于每个顶点或者用于每个实例的值。次级属性(顶点着色器输出属性)将具有用于每个单独的顶点/实例组合的值。
(如本领域中已知的,“实例化模式”操作的情况,可以对给定顶点处理多次,针对该顶点的每个需要的“实例”处理一次。在这种情况下,可能例如是,对于所讨论的顶点的特定实例而言,顶点着色器在其处理顶点属性时将使用与该实例关联的输入属性值。)。
因此,可能存在顶点着色器的其值关于且针对特定“实例”定义的一些输入变量(初级属性),以及其值在“每顶点”基础上定义的初级属性。
顶点着色器的给定输出属性(次级属性)可以仅仅依赖于其值针对每个顶点定义(在每顶点基础上定义)的一个或多个输入属性(初级属性),或者可以仅仅依赖于其值针对每个实例定义(在每实例基础上定义)的一个或多个输入属性(初级属性),或者可以既依赖于其值针对每个顶点定义的一个或多个每顶点输入属性(初级属性),又依赖于其值针对每个实例定义的一个或多个每实例输入属性(初级属性)。如上面所讨论的,除了其对于一个或多个顶点着色器输入属性(初级属性)的依赖性之外,顶点着色器输出属性(次级属性)也可以依赖于一个或多个每绘图调用输入。次级属性也可以是常数(具有恒定值)。
属性值存储在称为属性阵列的存储缓冲器中,其在当前实施例中通过顶点索引、实例索引或者通过输出的展开的索引(其将在下文中进一步加以讨论)进行索引。
因此,如图1中所示,输入(初级)属性值(针对所讨论的绘图调用的用于每个顶点着色器输入属性的值)存储在初级属性阵列(顶点缓冲器)26中。
如本领域中已知的,初级属性值(用于顶点着色器的输入属性的值)将由需要图形处理的应用程序产生并且来自该应用程序,并且适当地存储在初级属性阵列(顶点缓冲器)26中以供图形处理系统使用。
初级属性阵列中初级属性值(顶点着色器输入属性值)的布局以及它们如何分布于一个或多个存储缓冲器中,通过应用程序(其触发图形处理)确定和控制。在当前实施例中,初级属性值可以依照它们是否在每顶点或每实例基础上定义例如如下例如交叉存取到两个缓冲器中:
初级属性缓冲器1:
- 用于顶点0的属性0的值
- 用于顶点0的属性1的值
- 用于顶点1的属性0的值
- 用于顶点1的属性1的值
依次类推。
初级属性缓冲器2:
- 用于实例0的属性2的值
- 用于实例0的属性3的值
- 用于实例1的属性2的值
- 用于实例1的属性3的值
依次类推。
为了读取该阵列中的值,使用代表每顶点定义的值或每实例定义的值的开始位置的缓冲器基本地址(依赖于是否针对顶点或者针对实例定义属性),并且然后使用相关的顶点索引或实例索引以便从该基本地址索引希望的属性值。(该过程将在下文中更加详细地进行讨论。)。
如果希望的话,其他的布置将是可能的,例如对于每个属性使用不同的存储缓冲器(即,使得每个属性具有其自身的与其他属性分开的存储缓冲器)。本发明支持所有这样的布置。
顶点着色器20的输出(顶点着色的输出(次级)属性值)对应地存储在输出次级属性阵列28中。
次级属性阵列28中次级属性值(顶点着色器的输出的值)的布局通过用于图形处理器的驱动器确定和控制。再一次地,在该实施例中,这些属性值交叉存取到一个存储缓冲器(次级属性阵列28)中,因为这将给出更好的高速缓存性能。
如下文中进一步讨论的,在当前实施例中,次级属性值依照它们所依赖的顶点着色器输入(初级)属性的性质(并且特别是它们是否仅仅取决于依赖于每顶点的输入属性,或者仅仅取决于依赖于每实例的输入属性,或者取决于依赖于每顶点的和依赖于每实例的顶点着色器输入属性二者)分组到次级属性阵列28中。
因此,仅仅取决于仅仅依赖于每顶点的初级属性的所有次级属性值分组在一起,其起始于特定缓冲器基本地址并且通过用于对应输入属性值的顶点索引相对于该地址进行索引,仅仅取决于仅仅依赖于每实例的初级属性的所有次级属性值分组在一起,其起始于特定缓冲器基本地址并且通过用于对应输入属性值的实例索引相对于该地址进行索引,并且取决于依赖于每顶点的和每实例的初级属性二者的所有次级属性值分组在一起,其起始于特定缓冲器基本地址并且通过用于对应输入属性值的顶点/实例组合相对于该地址进行索引(借助于“展开的”索引,如下文中进一步讨论的)。
再一次地,为了读取该阵列中的值,使用代表每顶点索引的值集合或每实例索引的值集合或者顶点/实例组合索引的值集合的开始位置的适当缓冲器基本地址(依赖于是否针对顶点或者针对实例或者针对顶点/实例组合定义属性),并且然后使用相关的顶点索引、实例索引或者组合的顶点/实例索引以便从该基本地址索引希望的属性值。(该过程将在下文中更加详细地进行讨论。)。
在当前实施例中,顶点着色器20的每个属性(初级的和次级的)具有关联的“属性描述符”。
每个属性描述符包含以下字段:
- 包含用于该属性的值的缓冲器的存储地址(所有交叉存取的、共同地索引的属性值的缓冲地址设定为指向相同的存储缓冲器- 这是上面提及的缓冲器基本地址)
- 针对缓冲器中的第一“索引”项的用于属性的值的缓冲器中的偏移(即针对第一顶点(顶点0),其中属性值在每顶点基础上交叉存取(在该情况下用于每个属性的偏移是用于每个顶点的数据块中的偏移,在该偏移处找到针对所讨论的顶点的用于该属性的值(数据)),或者针对第一实例(实例0),其中属性值在每实例基础上交叉存取,依次类推)
- 步幅,其为存储器中从针对一个索引项(例如顶点)的属性的值到针对下一个索引项(例如顶点)的属性的值的距离。(用于交叉存取的属性值的步幅因此设定为针对给定索引项(顶点或实例或者顶点/实例组合)的所有属性值的大小之和(即用于每个属性的数据的大小之和)。这可以从下文中描述的存储类型字段推断。)
- 属性值的存储类型(指示组件数据类型和组件数量)- 加载和存储指令优选地基于属性描述符中规定的数据类型执行数据格式转换
- 属性阵列类型(线性、除数或模)- 这将在下文中进一步进行解释
- 如果是除数属性阵列类型(除数属性),则除数值
- 如果是模属性阵列类型(模属性),则模值
- 如果是除数或模属性,则写减少标志
(除数和模属性将在下文中进一步进行讨论)。
属性描述符分组为通过对应属性索引而索引的属性描述符阵列。用于顶点着色器输入(初级)属性的属性描述符存储在初级属性描述符阵列25中,并且用于顶点着色器输出(次级)属性的属性描述符存储在次级属性描述符阵列27中。属性描述符由图形处理器驱动器在绘图调用时间产生。
关于任何给定的着色器程序,将存在固定数量的顶点着色器输入(初级)和输出(次级)属性(变量),对于任何特定的着色器程序而言,将对应地存在固定数量的属性描述符(并且因此属性描述符阵列将具有固定的尺寸),其独立于针对给定绘图调用绘制的顶点和实例的数量且不管该数量如何。
在当前实施例的操作中,当需要图形处理的应用程序启动时,将首先编译相关的着色器程序。
因此,顶点着色器编译器将运行来产生用于顶点着色器20的适当的命令集合,这些命令使得顶点着色器20以希望的方式处理初级属性值。作为该过程的一部分,顶点着色器编译器将产生适当的加载属性指令并且存储用于顶点着色器20的属性指令,这些指令分别使得该顶点着色器从初级属性阵列26中加载相关的初级属性值以供处理,并且将产生的次级属性值存储到次级属性阵列28中。
类似地,也将编译片段着色器等等,并且从而尤其也将针对片段着色器22对应地产生加载属性(变化量)指令。
在当前实施例中,类似形式的属性加载和存储指令用于顶点着色器20和片段着色器22二者。提供给着色器的每个这样的属性加载或存储指令通过访问以下各条信息指示应当从哪个属性描述符阵列(初级的或次级的)读取相关属性描述符、允许检索的相关属性描述符的索引以及要在确定用于属性值本身的存储地址时使用的一个或多个索引:
- 阵列选择器,其指示是否使用初级或次级属性描述符阵列。这编码到指令中。
- 属性索引(即所考虑的属性的索引,如上文中所讨论的)。这可以编码到指令中,或者是编码到指令中的值加上寄存器中的值。
- 一个或多个展开的索引。
用于属性加载和存储指令的展开的索引如下从所讨论的属性值涉及的相应的顶点和实例的顶点索引和实例索引(如果存在的话)中导出:
展开的索引=(顶点索引)+(实例索引)x(填充的实例大小)。
填充的实例大小在该公式中为大于或等于每实例的顶点数的值,但是如下文中进一步讨论的,也设定为使得在硬件中对其执行取模运算较高效的值。
对于所讨论的顶点着色器线程,顶点着色器20使用上面的公式从顶点索引和实例索引中导出要直接使用的展开的索引。(对于顶点着色器操作,绘图调用描述符包含要着色和平铺的顶点和实例的数量,顶点着色器线程针对每个顶点/实例组合而运行,并且每个线程在内部知道其顶点索引和实例索引。)。
在片段着色器操作的情况下,如下文中将进一步讨论的,平铺器21使用上面的公式计算展开的索引并且将其写入多边形列表30中(针对所讨论的顶点)。然后,片段着色器直接从多边形列表30中读取展开的索引。
使用这种形式的展开的索引提供了可以直接考虑以下事实的索引形式:实例化模式操作实际上将对于每顶点每个属性包含一个值或者对于每实例每个属性包含一个值的输入属性值(初级属性阵列)“放大”或“展开”成应当每顶点每实例(即对于每个不同的顶点和实例组合)包含一个属性值(次级属性值)的输出的经过顶点着色的属性值阵列(次级属性阵列)。
而且,该展开的索引值可以用来通过利用等于填充的实例大小的模值执行取模运算而导出输入属性值的原始输入顶点索引。类似地,输入属性值的原始输入实例索引可以通过使用等于填充的实例大小的除数值执行除法运算而导出。因此,这意味着输入顶点索引或实例索引可以相对直接地从用于加载或存储属性指令的展开的索引中导出。这种布置因此具有以下优点:提供给片段着色器22的输出索引也可以由片段着色器在需要时用来还原为适当的输入顶点索引或实例索引(如将在下文中进一步讨论的)。
为了在需要时触发从展开的索引中导出适当的输入顶点索引或实例索引,使用两个特殊种类的属性描述符(如上文中提及的):
i)除数属性,其在索引属性阵列之前将展开的索引除以属性描述符中给定的值。除数值d由这样计算的三个数r、p和q表示:
并且对索引u的除法于是计算为:
(这种形式的除数值的使用允许使用比完全一般的除法更简单的除法电路。)
ii)模属性,其在索引属性阵列之前执行展开的索引对属性描述符中给定的值取模。模值(即填充的实例大小Spi)具有以下形式
Spi = (2p+1) * 2r,其中p为0、1、2、3或4
(这种形式的模值的使用允许使用比完全一般的模更简单的模电路。)。
如上面所讨论的,属性是否为除数属性(在该情况下,应当在索引属性阵列之前将展开的索引除以属性描述符中给定的值)或者模属性(在该情况下,应当在索引属性阵列之前执行提供的展开的索引值模属性描述符中给定的值)的指示与相关的除数或模值(即在这种情况下为填充的实例大小)一起包含在用于所讨论的属性的相关属性描述符中。
在用于实例化的API机制允许每实例输入针对特定属性在实例索引上具有另外的除数值的情况下,那么该另外的除数可以简单地乘上用于那些属性的除数值。在这种情况下,属性描述符应当指示要使用的适当除数值。
响应于这样的加载或存储属性指令,着色器将首先以指令指示的属性索引所指示的索引从指令中的阵列选择器指示的阵列(初级的或次级的)中读取属性描述符。
然后,它将确定从那里读取要使用的属性值(对于加载指令)或者在那里存储产生的属性值(对于存储指令)的存储位置(地址)。这通过使用指令指示的展开的索引以及读取属性描述符中的缓冲地址、属性阵列类型、偏移和步幅以及(如果相关的话)除数或模值来完成。
然后,要加载的属性值(数据)的存储地址将导出为:
属性值的地址=(缓冲地址)+ 偏移+(步幅x索引)。
如上面所讨论的,上述方程中的缓冲地址、步幅和偏移在相关属性描述符中给出。
如上面所讨论的,索引适当地为展开的索引、顶点索引或实例索引,并且将依照属性描述符中指示的属性阵列类型来确定。对于线性属性而言,要使用的索引将是展开的索引,但是对于除数属性而言,上面的除法运算将用来从展开的索引中导出实例索引,并且对于模属性而言,上面的取模运算将用来从展开的索引中导出顶点索引。
存储属性指令以相同的方式操作,但是着色器操作来将数据存储到确定的地址处。
因此,当例如顶点着色器20执行适当的加载属性指令以便处理顶点着色器输入属性值,它标识从加载属性指令中的阵列选择器字段中读取的属性描述符阵列(其在这种情况下将指示初级属性描述符阵列)。接下来,它使用加载属性指令中的属性索引以便从初级属性描述符阵列25中读取对应的初级属性描述符。然后,它使用初级属性描述符中的相关信息以及展开的索引以便检索要处理的适当的顶点着色器输入(初级)属性值。
(如上面所讨论的,初级属性阵列中的输入(初级)属性值将由顶点着色器20通过使用顶点索引或实例索引而访问。实例索引用来检索在每实例基础上定义的输入(初级)属性值,并且顶点索引用来检索在每顶点基础上定义的输入(初级)属性值。)。
类似地,除了下文中将更加详细地讨论的特定情况之外,一旦顶点着色器20已经处理了输入(初级)属性值,那么它将把其输出(即产生的次级属性值)存储到由对应属性存储指令(以及次级属性描述符阵列27内的相关次级属性描述符中的信息)指示的次级属性阵列28中。
在当前实施例中,修改图形处理系统的基本编译操作以便考虑顶点着色操作的两种特殊情况。
首先,顶点着色器编译器被配置成当其编译顶点着色器代码时对于每个顶点着色器输出属性(次级属性)确定该输出属性是否为来自顶点着色器输入属性的直接拷贝(即标识其中顶点着色器输出属性的值将是输入属性的值的直接拷贝的“贯通”情形)。例如,如果顶点着色器输入属性(初级属性)是纹理坐标,则情况可能就是这样。
当确定情况如此时,顶点着色器编译器省略执行拷贝操作的代码并且作为代替在与顶点着色器代码关联的元信息中记录特定顶点着色器输出(次级)属性是特定顶点着色器输入(初级)属性的直接拷贝以及它是哪个顶点着色器输入(初级)属性的拷贝。
如上面所讨论的,在当前实施例中,配置和构造用于标识其中顶点着色器输出属性值将是顶点着色器输入属性值的拷贝的情形的机制以便给出保守的结果,即“选择稳妥的做法”。因此,在当前实施例中,该布置使得识别其中顶点着色器输出属性值将是顶点着色器输入属性值的拷贝的情形时的任何错误应当使得系统将无法检测,其中情况就是如此,而不是确定“贯通”情形存在,其中事实上它不存在。
因此,如上面所讨论的,以其中标识了“贯通”属性或情形(即其中确定了顶点着色器输出属性值将是顶点着色器输入属性值的拷贝)的特定方式引用当前实施例的操作涉及其中系统(例如编译器)标识了“贯通”情形的那些情形。
第二,顶点着色器编译器也在元信息中记录顶点着色器的每个输出属性(每个次级属性)依赖于哪些顶点着色器输入(初级)属性。
再一次地,,在当前实施例中,配置和构造用于标识顶点着色器输出属性所依赖的顶点着色器输入属性的机制以便给出保守的结果,即“选择稳妥的做法”。因此,该布置使得标识顶点着色器输出属性所依赖的顶点着色器输入属性时的任何错误应当使得系统将推断(确定)顶点着色器输出属性依赖于某个它事实上并不依赖的顶点着色器输入属性(即给出确定的作为实际依赖性的超集的输入属性依赖性集合),而不是错失输出属性实际上确实依赖的输出属性的依赖性。
在这里,也应当指出的是,因此再一次地,以其中将顶点着色器输出属性标识为仅仅依赖于每顶点或者仅仅依赖于每实例定义的顶点着色器输入属性的特定方式引用当前实施例的操作涉及其中系统标识了这种情形(这种顶点着色器输出属性)的那些情形。类似地,给定顶点着色器输出属性对于给定顶点着色器输入属性的依赖性的引用涉及由当前实施例的系统(例如编译器)标识的那些依赖性,除非上下文另有要求。
第三,着色器链接器操作被配置成使得当其看到与顶点着色器代码关联的指示特定顶点着色器输出(次级)属性是特定顶点着色器输入(初级)属性的直接拷贝(即存在“贯通”属性)的元信息时,其于是修改片段着色器代码以便使得光栅器/片段着色器22读取适当的初级(顶点着色器输入)属性值而不是读取次级(顶点着色器输出)属性值。(如本领域中已知的,着色器链接器有效地操作来将顶点着色器的所有输出与片段着色器的对应输入匹配。该操作在当前实施例中修改为在来自顶点着色器的元信息指示“贯通”属性存在时,作为代替将片段着色器输入连接到顶点着色器输入(即“贯通”元信息规定的顶点着色器输入)。)。
为了做到这点,着色器链接器在其看到来自顶点着色器编译器的指示存在“贯通”属性的元信息时,将片段着色器代码修改为设置用于光栅器/片段着色器22的适当加载指令中的阵列选择器字段以便指示光栅器/片段着色器22应当从初级属性描述符阵列25中(即从用于顶点着色器的输入属性描述符阵列中)而不是从次级属性描述符阵列27(即顶点着色器的输出属性描述符阵列)中读取,并且改变指令中的属性索引以便指示贯通属性是其拷贝的初级(输入)属性。
换言之,着色器链接器通过相应地设置加载属性指令中的阵列选择器字段和属性索引(即指示初级属性描述符阵列以及“贯通”属性是其拷贝的初级(输入)属性)而修改片段着色器加载属性(加载变化量)指令以便使得片段着色器读取相关的初级属性描述符(其然后将触发片段着色器以读取初级属性阵列中的相关初级属性值)。
一旦编译了(且由链接器修改了(如果必要的话))着色器程序,要求图形处理的应用程序将适当的索引加载到索引缓冲器23中并且将顶点属性值加载到顶点缓冲器(初级属性阵列)26中。这在使用所讨论的索引和属性值的任何绘图调用之前完成,尽管不必紧邻每个绘图调用之前完成。应用程序也经由图形API规定绘图调用的所有参数,例如从哪些缓冲器中取出以及取出多少、使用哪些着色器等等。
然后,用于图形处理器的驱动器创建用于所讨论的绘图调用的绘图调用描述符以及相关的属性描述符(这将在下文中更加详细地进行讨论),并且将这些传送至图形处理器。
如上面所讨论的,作为所述过程的一部分,在当前实施例中,用于图形处理的驱动器基于用于所讨论的绘图调用的绘图调用描述符而产生并且存储必要的初级和次级属性描述符。这在绘图调用时间完成,因为输入(初级)属性的依赖于每顶点或每实例的状态由应用程序针对每个绘图调用进行规定。
因此,对于初级属性而言,驱动器将针对绘图调用产生用于每个初级属性的属性描述符,以便允许顶点着色器和其他图形处理阶段(着色器等)使用上面描述的机制访问相关的初级属性值。
依赖于每顶点的初级(输入)属性(即其值在每顶点基础上定义的初级属性)将由驱动器(在相关的属性描述符中)定义为具有等于填充的实例大小的模值的模属性,并且依赖于每实例的初级(输入)属性(即其值在每实例基础上定义的初级属性)将被定义为具有等于填充的实例大小的除数值的除数属性。(如果希望的话,依赖于每实例的初级属性可以定义为具有等于填充的实例大小乘以任何定义的实例除数的除数值的除数属性。在这种情况下,每实例除数将需要一个初级属性值缓冲器(而如果仅仅使用填充的实例大小,那么对于所有每实例输入而言仅仅一个缓冲器就够了)。)。
驱动器将对于要针对绘图调用产生的每个次级属性类似地产生次级属性描述符,以便允许顶点着色器存储次级属性值,并且允许其他着色器等等使用上面描述的机制访问次级属性值。
为了做到这点,对于要产生的每个相应的顶点着色器输出(次级)属性,驱动器在绘图调用时间仔细检查(go through)影响该输出属性的顶点着色器输入(初级)属性(由顶点着色器编译器记录),以便确定用于该输出(次级)属性的所有顶点着色器输入(初级)属性是否在每顶点基础上定义、在每实例基础上定义或者存在这二者的混合。(换言之,驱动器在绘图调用时间仔细检查所有顶点着色器输出属性以便根据每个输出(次级)属性依赖于何种顶点着色器输入(初级)属性,即它是否仅仅依赖于每顶点定义的输入属性或者仅仅依赖于每实例定义的输入属性或者依赖于每顶点和每实例定义的输入属性二者,或者根本不依赖于顶点着色器输入属性(即它是常数),而对每个输出(次级)属性分类。)。
然后,驱动器相应地对于每个次级属性(顶点着色器输出属性)将适当的次级属性描述符写(存储)到次级属性描述符阵列27中。
在顶点着色器输出属性(次级属性)依赖于每顶点和每实例定义的顶点着色器输入属性二者的情况下,驱动器将次级属性描述符存储到次级属性描述符阵列27中,其指示线性属性并且指向次级属性阵列28中的属性值(即包括其缓冲地址),所述属性值使用展开的输出索引(即根据它们所依赖的输入顶点/实例组合)而进行索引。
在顶点着色器输出属性(次级属性)取决于仅仅依赖于每顶点(定义)的顶点着色器输入(初级)属性的情况下,驱动器将次级属性描述符存储到次级属性描述符阵列27中,其指示具有等于填充的实例大小的模值的模属性并且指向在每顶点基础上索引的次级属性阵列28的部分(即包括其缓冲地址)。
在顶点着色器输出属性(次级属性)取决于仅仅依赖于每实例(定义)的顶点着色器输入(初级)属性的情况下,驱动器将次级属性描述符存储到次级属性描述符阵列27中,其指示具有等于填充的实例大小的除数值的除数属性并且指向在每实例基础上索引的次级属性阵列28的部分(即包括其缓冲地址)。(再一次地,如果希望的话,依赖于仅仅每实例定义的顶点着色器输入属性的次级属性可以使用具有等于填充的实例大小乘以任何定义的实例除数的除数值的除数属性。在这种情况下,每实例除数将需要一个次级缓冲器(而如果仅仅使用填充的实例大小,那么对于所有每实例输出而言仅仅一个缓冲器就够了)。)。
因此,将仅仅依赖于仅仅每顶点定义的顶点着色器输入属性的输出(次级)属性定义为模属性并且将仅仅依赖于仅仅每实例定义的顶点着色器输入属性的输出(次级)属性定义为除数属性。
在这里,应当指出的是,如本领域中已知的,给定顶点着色器输出属性以及取决于一个或多个顶点着色器输入属性也可以依赖于一个或多个每绘图调用输入,所述输入对于给定绘图调用将是恒定的。本发明同样地可以用在其中除了每顶点或每实例定义的顶点着色器输入属性之外顶点着色器输出属性还依赖于(一个或多个)每绘图调用输入(针对绘图调用定义的恒定值)的那些情况。因此,这里对于仅仅依赖于每顶点或者每实例定义的输入属性的顶点着色器输出属性的引用意图涉及其中顶点着色器输出属性所依赖的所有顶点着色器输入属性分别仅仅在每顶点或每实例基础上定义的情形,并不要求输出属性仅仅依赖于每顶点或者每实例定义的顶点着色器输入属性而不依赖于别的东西(即并没有排除顶点着色器输出属性也依赖于诸如每绘图调用定义的输入之类的不是顶点着色器输入属性的其他输入)。
驱动器也可以利用这些语义在模和除数次级属性描述符中包括“写减少”标志:
如果展开的索引除以模值(向下取整)为零,那么模属性将仅仅执行写。这等效于:
u<Spi
(其中Spi为填充的实例大小)并且意味着如果展开的索引大于或等于模值,则模属性将不存储输出值。
除数属性将仅在展开的索引对除数值取模为零的情况下执行写入。这等效于:
rem=除数计算中移出最终移位的比特
lz = count_leading_zeros(rem)
条件:lz > r OR (lz == r AND q == 1)
并且意味着在展开的索引不可被除数整除的情况下除数属性将不存储输出值。
在操作中,当顶点着色器执行存储属性指令时,它将如上面所讨论的检查由存储属性指令指示的对应次级属性描述符,并且如果写减少标志存在,则执行上述测试中的适当测试(取决于该属性是否为模属性或除数属性),并且如果测试通过,则存储适当的输出值,但是如果测试失败,则中止存储操作。
其结果在于,仅仅针对实例0写入依赖于仅仅每顶点的顶点着色器输入属性的输出属性值,并且仅仅针对顶点0写入依赖于仅仅每实例的顶点着色器输入属性的输出属性值。
其效果在于,在标识了仅仅依赖于每顶点定义的或者仅仅依赖于每实例定义的顶点着色器输入属性的顶点着色器输出属性(次级属性)(即输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上或者仅仅在每实例基础上定义 – 如上面所讨论的,它们也可能依赖于例如每绘图调用输入)(并且不存在如上面所讨论的“贯通”情形)的情况下,那么顶点着色器20将操作来存储要产生的那个输出(次级)属性值的每个不同版本的仅仅一个拷贝(即它对于每个不同的输入顶点或者对于每个不同的输入实例适当地存储输出值的一个拷贝,而不管输出(次级)属性值实际上分别应用于多少实例或顶点)。因此,例如,即使存在多个应当针对其产生给定的依赖于仅仅每顶点的顶点着色器输入属性的顶点着色器输出值(次级属性值)的实例,顶点着色器20也将仅仅每顶点存储该输出值(次级属性值)的一个拷贝。
因此,每个这样的输出值将仅仅写入次级属性阵列28中一次。
为了考虑针对每个顶点或实例依赖于仅仅每顶点或者仅仅每实例的顶点着色器输入属性的输出属性值作为单个拷贝而存储到次级属性阵列28中这一事实,如上面所讨论的,依照其依赖关系(每顶点、每实例或者二者)对次级属性阵列中的次级属性值分组(因为这样的属性在其中(每属性)将具有不同数量的属性值)。
因此,依赖于仅仅每顶点的顶点着色器输入属性的输出(次级)属性值分组在一起并且依照相关顶点的顶点索引进行索引(相对于基本缓冲地址(其包含在相关次级属性描述符中))。类似地,依赖于仅仅每实例的顶点着色器输入属性的输出(次级)属性值分组在一起并且依照相关实例的实例索引进行索引(相对于基本缓冲地址)。任何依赖于每实例和每顶点的顶点着色器输入属性的输出(次级)属性值也分组在一起并且依照上面讨论的展开的索引进行索引(相对于基本缓冲地址)。
然后,由图形处理器驱动器以上面讨论的方式相应地配置次级属性描述符(即利用对应的缓冲器基本地址将每个次级属性定义为线性、模或除数属性),以便确保顶点着色器将其产生的次级属性值存储在适当的位置,并且诸如片段着色器之类的后续图形处理阶段将在它们要处理次级属性时加载适当的次级属性值。
一旦驱动器产生了适当的属性描述符,那么可以处理绘图调用。因此,顶点着色器将针对每个顶点/实例组合发起线程并且执行适当的加载属性指令以便加载初级属性值以供处理,并且在上面讨论的过程之后依照其存储属性指令存储产生的次级属性。
因此,如上面所讨论的,当顶点着色器20例如执行适当的加载属性指令以便处理顶点着色器输入属性值时,它将标识要从加载属性指令中的阵列选择器字段读取的属性描述符阵列(其在这种情况下将指示初级属性描述符阵列)。接下来,它将使用加载属性指令中的属性索引从初级属性描述符阵列25中读取对应的初级属性描述符。然后,它将使用初级属性描述符中的相关信息以及展开的索引检索要处理的适当的顶点着色器输入(初级)属性值。
类似地,一旦顶点着色器20处理了输入(初级)属性值,那么它将把其输出(即产生的次级属性值)存储到由对应属性存储指令(以及次级属性描述符阵列27内的相关次级属性描述符中的信息)指示的次级属性阵列28中。
一旦顶点着色器20适当地对所有顶点进行了顶点着色,那么平铺器21产生必要的多边形列表并且将其存储在多边形列表阵列30中以准备供光栅器/片段着色器22使用。
作为该过程的一部分,平铺器21在多边形列表30中包含用于每个转角顶点的展开的索引。
如上面所讨论的,包含在多边形列表30中以便提供给光栅器/片段着色器22的该展开的索引由平铺器21从用来为顶点着色器20的对应顶点着色器输入(初级)属性值索引初级属性阵列26的顶点索引和实例索引(如果存在的话)中(即从其初级属性值用来产生顶点着色的顶点的次级属性值的顶点和实例的顶点索引和实例索引中)导出(计算)。
平铺器21操作来即使在图形处理系统不在实例化模式下操作的情况下也以这种方式产生包含在多边形列表30中的展开的索引,因为运行在非实例化模式下基本上等效于简单地绘制实例“0”(并且没有任何每实例的属性),因此可以使用相同的输出索引生成机制(并且在这种情况下将产生等于输入顶点索引的展开的索引)。
一旦平铺器21准备了多边形列表30,光栅器/片段着色器22将专注于(work its way through)这些列表以便产生允许显示图像的适当着色的片段。
在正常操作中,为了做到这点,光栅器/片段着色器22将依照它接收的加载属性(变化量)指令从次级属性阵列28中加载适当的顶点着色的输出(次级)属性值。
因此,如上面所讨论的,当片段着色器22执行适当的加载属性指令以便处理适当的属性值时,片段着色器22将使用加载属性指令中的属性阵列指示确定是否从初级属性描述符阵列中或者从次级属性描述符阵列中读取。然后,它将使用加载指令中的属性索引标识相关属性描述符阵列中的属性描述符。
在次级属性的情况下,片段着色器22将相应地使用提供的属性索引从次级属性描述符阵列27中检索适当的次级属性描述符,并且然后使用来自该次级属性描述符的信息以及多边形列表中的相关展开的索引从次级属性阵列28中检索适当的属性值(顶点着色的属性值)。
(本领域技术人员应当理解的是,由于片段着色器22处理代表由三个顶点定义的多边形(在多边形为三角形的情况下)内的特定位置的片段,因而在实践中,片段着色器22对于它接收的每个属性加载指令读取相关属性描述符一次,但是接着将执行其余步骤(导出用于索引属性阵列的索引、以及计算属性值的地址以及从存储器中加载属性值)三次,针对当前多边形的每个顶点一次,并且然后执行三个加载的属性值(即存储的用于所述三个顶点的属性值)之间的插值以便导出用于片段着色操作的实际属性值。)。
在其中存在“线性”次级属性的情况下,光栅器/片段着色器22将相应地根据次级属性描述符确定所讨论的次级属性是线性属性,并且使用来自多边形列表30的相关展开的索引和缓冲地址、属性描述符中的偏移和步幅以便从次级属性阵列28中标识并且检索适当的次级属性值。
在其中存在依赖于仅仅每顶点或每实例定义的顶点着色器输入属性的次级属性的情况下,光栅器/片段着色器22将相应地根据次级属性描述符确定所讨论的次级属性是除数属性或者模属性,并且使用由次级属性描述符指示的相关除数或取模运算以及来自多边形列表30的展开的索引和缓冲地址、属性描述符中的偏移和步幅以便从次级属性阵列28中标识并且检索适当的次级属性值。
通过这种方式,每当光栅器/片段着色器22需要使用适当的依赖于仅仅每顶点或仅仅每实例的顶点着色器输入属性的输出(次级)属性值的拷贝时,其针对并且能够检索次级属性阵列28中的该输出(次级)属性值的单个拷贝。
在其中加载指令指示加载初级属性(顶点着色器输入属性)值(即存在“贯通”情形)的情况下,那么片段着色器22将使用属性索引查找初级属性描述符阵列25中的对应属性描述符。接着,它将根据该属性描述符确定属性是否为除数或模属性以及是否使用适当的除数或模值。接着,它将使用除数或模值以及提供的展开的索引(来自多边形列表30)计算要与属性描述符中的缓冲地址、偏移和步幅一起使用的顶点索引或实例索引以便从初级属性(顶点着色器输入属性值)阵列26中检索相关的属性值。
接着,片段着色器22将处理它已经适当地加载的属性值以便对于所讨论的每个片段产生适当的片段着色的数据值,并且(如果合适的话)将这些值存储到例如图块缓冲器中以便后续导出到例如帧缓冲器以供显示,如本领域中已知的。
由以上可见,当前实施例的属性描述符机制用来针对独立于着色器代码的属性值既表达索引计算,又表达存储布局,并且相同的机制用来控制来自顶点着色器的输入和输出,并且顶点着色器和片段着色器二者都有权访问相同的描述符(这允许贯通属性起作用而不涉及任何绘制时间)。
此外,以当前实施例的方式使用与着色器代码分离的属性描述符允许与不同的属性描述符集合一起使用相同的着色器代码,并且意味着着色器代码在属性描述符控制的参数改变时不必改变。
图2-7示出了当前实施例的操作。
在这些图中,矩形框指示存储器中的数据阵列。在它们通过虚线连接的情况下,它们是相同阵列的一部分。在它们之间存在间隔的情况下,它们是不同的阵列。
圆弧形框指示着色器代码执行。对于顶点着色,每个框存在一个执行。对于图右手侧的着色器(其典型地为片段着色器,但是可以为其他种类)而言,对于每个框将存在许多执行,因为顶点可以通过超过一个多边形读取并且一个多边形可以包含许多片段。箭头指示由着色器读取或写入的数据。
图2示出了针对非实例化操作的实施例的操作。图2A示出了其中不存在标识的“贯通”情况的情形,而图2B示出了其中标识“贯通”输入属性的操作。
如图2A中所示,顶点着色器20将针对每个顶点从初级属性阵列26中读取输入属性值,处理这些属性值并且将它们作为输出的顶点着色的属性值存储到次级属性阵列28中,然后片段着色器22将从该阵列中读取和处理这些属性值。
图2B示出了其中将输出属性标识为“贯通”属性的情形。在这种情况下,如图2B中所示,顶点着色器20并不处理该“贯通”输出属性。作为代替,片段着色器22直接从初级属性阵列26读取相关的属性值,如箭头35所示。(在这里,应当指出的是,顶点着色器仍然可以针对其他输出(次级)属性读取和处理贯通输出(次级)属性为其拷贝的输入(初级)属性,即其中在计算一个或多个其他(非贯通)次级属性时也需要该初级属性。)。
图3-7示出了当在实例化模式下操作时当前实施例的操作。
图3首先示出了其中不存在标识的“贯通”或者仅仅“每顶点”或“每实例”的输入情况的实例化模式操作。(因此,这实际上示出了“正常”的实例化模式操作。)。
在这种情况下,如图3中所示,将输入(初级)属性阵列26组织为两个缓冲器,一个用于其值在每实例基础上定义的属性40并且一个用于其值在每顶点基础上定义的属性41。顶点着色器20从这两个属性值缓冲器中读取,并且实际上将其组合以便在用于每个属性的次级(输出)属性阵列28中提供用于每个不同的顶点和实例组合的输出值。然后,片段着色器22从次级属性阵列28中适当地读取相关的顶点和实例组合的属性值。
图4示出了其中存在来自每实例输入属性的“贯通”的情形。在这种情况下,如图4中的箭头50所示,顶点着色器20并不处理标识的“贯通”每实例属性,而是作为代替片段着色器22在其需要每实例属性值时直接从输入每实例属性缓冲器40中读取它们(使用上面描述的除数属性机制)。
图5示出了其中存在来自每顶点属性的“贯通”的对应情况。在这种情况下,如图5中的箭头60所示,顶点着色器20并不处理标识的“贯通”每顶点属性,而是作为代替片段着色器22在其需要每顶点属性值时直接从输入每顶点属性缓冲器41中读取它们(使用上面描述的模属性机制)。
图6示出了其中存在仅仅依赖于每实例定义的顶点着色器输入属性的顶点着色器输出(次级)属性的情形。在这种情况下,如图6中所示,顶点着色器20针对顶点0如箭头70所示将相关输出属性值的拷贝写到次级属性阵列28的适当缓冲器71,但是对于其中也处理该仅仅依赖于每实例输入的属性的其他顶点而言,顶点着色器20并不将对应的输出值存储到次级属性缓冲器71中(如图6中的虚线72所示)。通过这种方式,次级属性值的仅仅一个拷贝存储到次级属性阵列28中。
然后,无论何时片段着色器22需要该仅仅依赖于每实例输入的输出属性,其借助于使用适当的次级属性描述符而被引导为如箭头73所示读取次级属性阵列28的缓冲器71中的相关输出(次级)属性值的适当的单个拷贝(使用上面描述的除数属性机制)。
图7示出了其中存在仅仅依赖于每顶点定义的顶点着色器输入属性的顶点着色器输出(次级)属性的对应情形。在这种情况下,如图7中所示,顶点着色器20针对实例0如箭头80所示将相关输出属性值的拷贝写到次级属性阵列28的适当缓冲器71,但是对于其中也处理该仅仅依赖于每顶点输入的属性的其他实例而言,顶点着色器20并不将对应的输出值存储到次级属性缓冲器71中(如图7中的虚线82所示)。通过这种方式,次级属性值的仅仅一个拷贝存储到次级属性阵列28中。
然后,无论何时片段着色器22需要该仅仅依赖于每顶点输入的输出属性,其借助于使用适当的次级属性描述符而被引导为如箭头83所示读取次级属性阵列28的缓冲器71中的相关输出(次级)属性值的适当的单个拷贝(使用上面描述的模属性机制)。
上面的图2-7示出了当前实施例的基本操作模式。通常,顶点着色器输出(次级)属性可以是上面所示的五种不同情况(正常、每顶点贯通、每实例贯通、每顶点写减少或者每实例写减少)的任意组合。
也存在第六种情况,其中输出(次级)属性为常数。在这种情况下,恒定的次级属性的每个需要的拷贝都可以作为单独的次级属性值而存储。可替换地,具有用于仅仅一个值的空间的缓冲器以及模值为1的模属性类型(和写减少)可以用来允许(并且使得)恒定的次级属性值的仅仅一个拷贝被存储(在这种情况下,仅仅顶点0/实例0线程将存储该恒定值)。
尽管在当前实施例中,初级和次级属性和属性描述符阵列等等被示为单独的阵列,但是本领域技术人员应当理解的是,这样的布置不是必需的,并且只要在使用时可以标识和检索适当的属性描述符和属性值,那么用于将这些数据元素存储到存储器中的实际布置就可以根据需要而定。例如,可以存在存储输入和输出(初级和次级)属性描述符二者的单个属性描述符阵列。同样地,各种属性描述符以及属性值和阵列可以根据需要全部存储到相同的存储器中或者存储到不同的存储器中,可以至少部分地被高速缓存等等。
由以上所述可见,本发明在其优选的实施例中至少提供了在图形处理系统中减少用于顶点着色器核心的存储业务量和存储使用量(以及因而功率使用量)。
这在本发明的优选实施例中至少通过以下方式来实现:检测何时直接从顶点着色器输入中拷贝顶点着色器输出,并且在那种情形下,不产生拷贝输出值且将其存储到存储器中,而是改为允许图形流水线的诸如片段着色器之类的另外的阶段直接访问顶点着色器输入值。
在一个优选的实施例中,也标识其所依赖的顶点着色器输入属性仅仅在每顶点基础上或仅仅在每实例基础上定义的那些顶点着色器输出(即依赖于仅仅每顶点定义的顶点着色器输入属性或者依赖于仅仅每实例定义的顶点着色器输入属性的那些顶点着色器输出),并且在标识了这样的输出的情况下,仅仅存储那些输出的每个值的一个拷贝,并且将系统配置成使得诸如片段着色器之类的后续图形处理阶段在需要输出值的每个不同的时间重新使用该输出值的单个拷贝。
Claims (21)
1.一种操作图形处理系统的方法,该图形处理系统包括处理输入属性值以便产生输出的顶点着色的属性值以供该图形处理系统的后续阶段使用的顶点着色阶段,该方法包括:
识别何时由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同,以及
当识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时:
控制顶点着色器以便不从顶点着色器输入属性值中产生顶点着色器输出属性值;并且
使得需要使用本将由顶点着色器产生的顶点着色器输出属性值的后续图形处理阶段改为处理对应的顶点着色器输入属性值。
2.权利要求1的方法,其中顶点着色器编译器被配置成在识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时省略在别的情况下将使得顶点着色器处理输入属性值以产生输出属性值的代码。
3.权利要求1的方法,包括在识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时,通过使用用于图形处理阶段的加载指令而使得该后续图形处理阶段使用顶点着色器输入属性值,所述加载指令被配置成使得该图形处理阶段从顶点着色器输入属性值中而不是从顶点着色器输出属性值中加载要处理的值。
4.权利要求1的方法,其中索引机制用来检索适当的属性值,并且该方法进一步包括:
当后续图形处理阶段要处理顶点着色器输入属性值时,该后续图形处理阶段从向它提供的输出索引值中导出用来检索顶点着色器输入属性值的索引。
5.权利要求1的方法,其中后续图形处理阶段确定用于导出用来检索顶点着色器输入属性值的索引的索引导出操作,其中要执行的索引导出操作由与所讨论的属性关联的元信息指示。
6.权利要求1的方法,包括:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联;以及
图形处理阶段在其要加载和/或存储顶点着色阶段属性的值时,首先读取与该属性关联的任何元信息并且然后在其要加载或存储该属性的值时使用该元信息。
7.权利要求6的方法,其中元信息指示以下一个或多个:
用于导出用来检索属性的值的索引的技术和必要的任何数据;用于属性值的基本存储地址;存储器中属性值的间隔的指示;所讨论的属性的值相对于基本存储地址的位置的指示;以及用于该属性的组件数据类型和组件数量的指示。
8.一种操作图形处理系统的方法,该图形处理系统包括顶点着色阶段,该顶点着色阶段处理顶点着色阶段的输入属性的值以便产生顶点着色阶段的输出属性的值以供该图形处理系统的后续阶段使用,该方法包括:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联。
9.权利要求8的方法,包括:
图形处理阶段在其要加载和/或存储顶点着色阶段属性的值时,首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
10.权利要求8的方法,其中元信息指示以下一个或多个:
用于导出用来检索属性的值的索引的技术和必要的任何数据;用于属性值的基本存储地址;存储器中属性值的间隔的指示;所讨论的属性的值相对于基本存储地址的位置的指示;以及用于该属性的组件数据类型和组件数量的指示。
11.一种用于处理图形的系统,包括:
包括多个图形处理阶段的图形处理器,所述图形处理阶段包括顶点着色阶段以及顶点着色阶段后续的至少一个处理阶段,其中顶点着色阶段处理输入属性值以便产生输出的顶点着色的属性值以供图形处理器的所述至少一个后续处理阶段使用;以及
处理器,其被配置成:
识别何时由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同;
并且当识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时,使得顶点着色器不从顶点着色器输入属性值中产生顶点着色器输出属性值;
并且在识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同的情况下,使得将处理顶点着色阶段的输出的所述至少一个后续图形处理阶段处理对应的顶点着色器输入属性值而不是在别的情况下将由顶点着色器产生的顶点着色器输出属性值。
12.权利要求11的系统,其中顶点着色器编译器被配置成在识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时省略在别的情况下将使得顶点着色器处理输入属性值以产生输出属性值的代码。
13.权利要求11的系统,其中处理器被配置成在识别出由顶点着色器从顶点着色器输入属性值中产生的顶点着色器输出属性值将与从其产生所述顶点着色器输出属性值的顶点着色器输入属性值相同时,使用用于图形处理阶段的加载指令以使得后续图形处理阶段使用顶点着色器输入属性值,所述加载指令被配置成使得该图形处理阶段从顶点着色器输入属性值中而不是从顶点着色器输出属性值中加载要处理的值。
14.权利要求11的系统,其中索引机制用来检索适当的属性值,并且
所述至少一个后续图形处理阶段包括用于在后续图形处理阶段要处理顶点着色器输入属性值时从向它提供的输出索引值中导出用来检索顶点着色器输入属性值的索引的装置。
15.权利要求11的系统,其中所述至少一个后续图形处理阶段包括用于确定用于导出用来检索顶点着色器输入属性值的索引的索引导出操作的装置,其中要执行的索引导出操作由与所讨论的属性关联的元信息指示。
16.权利要求11的系统,包括:
处理器,其被配置成:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联;并且其中:
一个或多个所述图形处理阶段被配置成在其要加载和/或存储顶点着色阶段属性的值时,首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
17.权利要求16的系统,其中元信息指示以下一个或多个:
用于导出用来检索属性的值的索引的技术和必要的任何数据;用于属性值的基本存储地址;存储器中属性值的间隔的指示;所讨论的属性的值相对于基本存储地址的位置的指示;以及用于该属性的组件数据类型和组件数量的指示。
18.一种图形处理系统,包括:
多个图形处理阶段,其包括顶点着色阶段以及顶点着色阶段后续的并且将处理顶点着色阶段的输出的至少一个处理阶段;其中:
顶点着色阶段处理顶点着色阶段的输入属性的值以便产生顶点着色阶段的输出属性的值以供图形处理系统的后续阶段使用;并且
图形处理系统被配置成将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联。
19.权利要求18的系统,其中:
一个或多个所述图形处理阶段被配置成在其要加载和/或存储顶点着色阶段属性的值时,首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
20.权利要求18的系统,其中元信息指示以下一个或多个:
用于导出用来检索属性的值的索引的技术和必要的任何数据;用于属性值的基本存储地址;存储器中属性值的间隔的指示;所讨论的属性的值相对于基本存储地址的位置的指示;用于该属性的组件数据类型和组件数量的指示。
21.一种计算机程序元件,包括当该程序元件在数据处理装置上运行时用于执行权利要求1的方法的计算机软件代码部分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB1103698.5A GB201103698D0 (en) | 2011-03-03 | 2011-03-03 | Graphics processing |
GB1103698.5 | 2011-03-03 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102708533A true CN102708533A (zh) | 2012-10-03 |
CN102708533B CN102708533B (zh) | 2018-09-14 |
Family
ID=43923196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210052926.6A Active CN102708533B (zh) | 2011-03-03 | 2012-03-02 | 图形处理 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9818218B2 (zh) |
JP (1) | JP6108670B2 (zh) |
CN (1) | CN102708533B (zh) |
GB (3) | GB201103698D0 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104881836A (zh) * | 2015-05-21 | 2015-09-02 | 广东广宇科技发展有限公司 | 气象预警信息发布系统 |
CN105321199A (zh) * | 2014-07-03 | 2016-02-10 | Arm有限公司 | 图形处理 |
CN111279384A (zh) * | 2017-11-02 | 2020-06-12 | 超威半导体公司 | 图形流水线中的索引的压缩和解压缩 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201103699D0 (en) | 2011-03-03 | 2011-04-20 | Advanced Risc Mach Ltd | Graphic processing |
US9799091B2 (en) * | 2014-11-20 | 2017-10-24 | Intel Corporation | Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures |
KR20160074154A (ko) | 2014-12-18 | 2016-06-28 | 삼성전자주식회사 | 컴파일러 |
US10192280B2 (en) | 2016-04-08 | 2019-01-29 | Qualcomm Incorporated | Per-vertex variable rate shading |
US10062139B2 (en) | 2016-07-25 | 2018-08-28 | Qualcomm Incorporated | Vertex shaders for binning based graphics processing |
US10726605B2 (en) * | 2017-09-15 | 2020-07-28 | Intel Corporation | Method and apparatus for efficient processing of derived uniform values in a graphics processor |
CN110390709B (zh) * | 2019-06-19 | 2023-01-03 | 北京巴别时代科技股份有限公司 | 卡通渲染勾边圆滑方法 |
GB2592604B (en) * | 2020-03-03 | 2023-10-18 | Sony Interactive Entertainment Inc | Image generation system and method |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101004833A (zh) * | 2006-07-27 | 2007-07-25 | 威盛电子股份有限公司 | 用于纹理视讯处理的纹理引擎、图形处理器及方法 |
US20080094408A1 (en) * | 2006-10-24 | 2008-04-24 | Xiaoqin Yin | System and Method for Geometry Graphics Processing |
US20080204451A1 (en) * | 2007-02-26 | 2008-08-28 | Samsung Electronics Co., Ltd | Geometry processor using a post-vertex cache and method thereof |
US20090033672A1 (en) * | 2007-07-30 | 2009-02-05 | Guofang Jiao | Scheme for varying packing and linking in graphics systems |
US20110157195A1 (en) * | 2009-12-31 | 2011-06-30 | Eric Sprangle | Sharing resources between a CPU and GPU |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2271260A (en) * | 1992-10-02 | 1994-04-06 | Canon Res Ct Europe Ltd | Processing image data |
US6417858B1 (en) * | 1998-12-23 | 2002-07-09 | Microsoft Corporation | Processor for geometry transformations and lighting calculations |
US6717577B1 (en) | 1999-10-28 | 2004-04-06 | Nintendo Co., Ltd. | Vertex cache for 3D computer graphics |
US6697074B2 (en) | 2000-11-28 | 2004-02-24 | Nintendo Co., Ltd. | Graphics system interface |
US8274517B2 (en) | 2003-11-14 | 2012-09-25 | Microsoft Corporation | Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques |
US6975325B2 (en) * | 2004-01-23 | 2005-12-13 | Ati Technologies Inc. | Method and apparatus for graphics processing using state and shader management |
US7426724B2 (en) * | 2004-07-02 | 2008-09-16 | Nvidia Corporation | Optimized chaining of vertex and fragment programs |
US7750914B2 (en) * | 2004-08-26 | 2010-07-06 | Intel Corporation | Subdividing geometry images in graphics hardware |
US7733347B2 (en) * | 2004-11-05 | 2010-06-08 | Microsoft Corporation | Automated construction of shader programs |
US7439983B2 (en) * | 2005-02-10 | 2008-10-21 | Sony Computer Entertainment Inc. | Method and apparatus for de-indexing geometry |
WO2006112508A1 (ja) * | 2005-04-20 | 2006-10-26 | Matsushita Electric Industrial Co., Ltd. | ストリームデータ記録装置、ストリームデータ編集装置、ストリームデータ再生装置、ストリームデータ記録方法、及びストリームデータ再生方法 |
US7830390B2 (en) | 2005-07-19 | 2010-11-09 | Graphics Properties Holdings, Inc. | Color computation of pixels using a plurality of vertex or fragment shader programs |
US7898543B1 (en) * | 2006-04-10 | 2011-03-01 | Nvidia Corporation | System and method for optimizing texture retrieval operations |
US8009172B2 (en) * | 2006-08-03 | 2011-08-30 | Qualcomm Incorporated | Graphics processing unit with shared arithmetic logic unit |
US8325184B2 (en) * | 2007-09-14 | 2012-12-04 | Qualcomm Incorporated | Fragment shader bypass in a graphics processing unit, and apparatus and method thereof |
US8698825B1 (en) * | 2007-11-21 | 2014-04-15 | Nvidia Corporation | System, method, and computer program product for optimizing use of a vertex cache |
US9214007B2 (en) * | 2008-01-25 | 2015-12-15 | Via Technologies, Inc. | Graphics processor having unified cache system |
US8284197B2 (en) | 2008-07-11 | 2012-10-09 | Advanced Micro Devices, Inc. | Method and apparatus for rendering instance geometry |
US8269775B2 (en) | 2008-12-09 | 2012-09-18 | Qualcomm Incorporated | Discarding of vertex points during two-dimensional graphics rendering using three-dimensional graphics hardware |
US8436854B2 (en) * | 2009-05-29 | 2013-05-07 | Qualcomm Incorporated | Graphics processing unit with deferred vertex shading |
US9324175B2 (en) * | 2009-09-11 | 2016-04-26 | Nvidia Corporation | Memory coherency in graphics command streams and shaders |
GB2474114B (en) * | 2009-09-25 | 2012-02-15 | Advanced Risc Mach Ltd | Graphics processing systems |
US8326820B2 (en) * | 2009-09-30 | 2012-12-04 | Microsoft Corporation | Long-query retrieval |
US8692829B2 (en) * | 2009-10-05 | 2014-04-08 | Nvidia Corporation | Calculation of plane equations after determination of Z-buffer visibility |
US8619087B2 (en) * | 2009-10-06 | 2013-12-31 | Nvidia Corporation | Inter-shader attribute buffer optimization |
US8558842B1 (en) * | 2009-10-14 | 2013-10-15 | Nvidia Corporation | Parallel duplicate primitive vertex detection and batching |
JP5465145B2 (ja) * | 2010-10-05 | 2014-04-09 | キヤノン株式会社 | 画像処理装置、画像処理方法、および画像記録装置 |
GB201103699D0 (en) | 2011-03-03 | 2011-04-20 | Advanced Risc Mach Ltd | Graphic processing |
-
2011
- 2011-03-03 GB GBGB1103698.5A patent/GB201103698D0/en not_active Ceased
-
2012
- 2012-02-28 US US13/406,850 patent/US9818218B2/en active Active
- 2012-03-02 GB GB1203675.2A patent/GB2488668B/en active Active
- 2012-03-02 JP JP2012046402A patent/JP6108670B2/ja active Active
- 2012-03-02 GB GB1309684.7A patent/GB2504814B/en active Active
- 2012-03-02 CN CN201210052926.6A patent/CN102708533B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101004833A (zh) * | 2006-07-27 | 2007-07-25 | 威盛电子股份有限公司 | 用于纹理视讯处理的纹理引擎、图形处理器及方法 |
US20080094408A1 (en) * | 2006-10-24 | 2008-04-24 | Xiaoqin Yin | System and Method for Geometry Graphics Processing |
US20080204451A1 (en) * | 2007-02-26 | 2008-08-28 | Samsung Electronics Co., Ltd | Geometry processor using a post-vertex cache and method thereof |
US20090033672A1 (en) * | 2007-07-30 | 2009-02-05 | Guofang Jiao | Scheme for varying packing and linking in graphics systems |
US20110157195A1 (en) * | 2009-12-31 | 2011-06-30 | Eric Sprangle | Sharing resources between a CPU and GPU |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105321199A (zh) * | 2014-07-03 | 2016-02-10 | Arm有限公司 | 图形处理 |
CN105321199B (zh) * | 2014-07-03 | 2020-10-23 | Arm有限公司 | 图形处理流水线及其操作方法与介质 |
CN104881836A (zh) * | 2015-05-21 | 2015-09-02 | 广东广宇科技发展有限公司 | 气象预警信息发布系统 |
CN111279384A (zh) * | 2017-11-02 | 2020-06-12 | 超威半导体公司 | 图形流水线中的索引的压缩和解压缩 |
CN111279384B (zh) * | 2017-11-02 | 2023-01-13 | 超威半导体公司 | 图形流水线中的索引的压缩和解压缩 |
Also Published As
Publication number | Publication date |
---|---|
GB201203675D0 (en) | 2012-04-18 |
JP6108670B2 (ja) | 2017-04-05 |
JP2012185820A (ja) | 2012-09-27 |
GB2504814B (en) | 2015-03-11 |
US20120223946A1 (en) | 2012-09-06 |
GB201309684D0 (en) | 2013-07-17 |
GB2488668B (en) | 2015-03-11 |
CN102708533B (zh) | 2018-09-14 |
GB201103698D0 (en) | 2011-04-20 |
GB2488668A (en) | 2012-09-05 |
GB2504814A (en) | 2014-02-12 |
US9818218B2 (en) | 2017-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102708537A (zh) | 图形处理 | |
CN102708533A (zh) | 图形处理 | |
US6995765B2 (en) | System, method, and computer program product for optimization of a scene graph | |
US8035646B2 (en) | Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques | |
CN101794456A (zh) | 用于处理图形的方法和装置 | |
CN1329870C (zh) | 任意形状图像的基于块的旋转 | |
CN103617220A (zh) | 一种移动终端3d模型实现方法和装置 | |
CN103886547A (zh) | 用于存储共享顶点的技术 | |
CN103793876A (zh) | 分布式拼接式进行高速缓存 | |
CN104834630A (zh) | 运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备 | |
CN103886538A (zh) | 用于存储共享顶点的技术 | |
CN104823220A (zh) | 用于图形处理的图形存储器加载掩模 | |
CN106605211A (zh) | 着色器的渲染时间链接 | |
CN108269226A (zh) | 用于处理稀疏数据的装置和方法 | |
CN103871019A (zh) | 优化三角形拓扑用于路径渲染 | |
KR101701294B1 (ko) | 이미지 뷰 바인딩의 최적화를 위한 시스템 및 방법 | |
CN110058886A (zh) | 用于计算两个区块操作数中的半字节的数量积的系统和方法 | |
KR20230010672A (ko) | 데이터 압축의 방법 및 장치 | |
CN102289367A (zh) | 根据模式的命令行外壳命令生成 | |
EP3743806B1 (en) | Large lookup tables for an image processor | |
US20160111059A1 (en) | Efficient binding of resource groups in a graphics application programming interface | |
CN113495727B (zh) | 业务组件开发方法、装置、电子设备及介质 | |
FI117579B (fi) | Menetelmä, laite ja tietokoneohjelma tietokoneavusteisen polygonimallin prosessointiin | |
KR101823818B1 (ko) | 이미지 뷰 바인딩의 최적화를 위한 시스템 및 방법 | |
JP2003123068A (ja) | 補間処理装置、および、補間処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |