CN102708537A - 图形处理 - Google Patents

图形处理 Download PDF

Info

Publication number
CN102708537A
CN102708537A CN2012100529247A CN201210052924A CN102708537A CN 102708537 A CN102708537 A CN 102708537A CN 2012100529247 A CN2012100529247 A CN 2012100529247A CN 201210052924 A CN201210052924 A CN 201210052924A CN 102708537 A CN102708537 A CN 102708537A
Authority
CN
China
Prior art keywords
attribute
value
vertex
vertex shader
output
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
Application number
CN2012100529247A
Other languages
English (en)
Other versions
CN102708537B (zh
Inventor
J.奈斯塔德
A.S.克里斯滕森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN102708537A publication Critical patent/CN102708537A/zh
Application granted granted Critical
Publication of CN102708537B publication Critical patent/CN102708537B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data

Abstract

本发明涉及图形处理。图形处理器包括顶点着色器20,该顶点着色器20处理来自顶点缓冲器26的输入属性值以便产生由图形处理器的光栅器/片段着色器22在处理用于显示的图像时使用的输出的顶点着色的属性值28。标识顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上或者仅仅在每实例基础上定义的顶点着色器输出属性。然后,对于这样的顶点着色器输出属性,顶点着色器20分别对于给定的顶点或实例存储顶点着色器输出属性的仅仅一个拷贝以供图形处理器的光栅器/片段着色器22在处理用于显示的图像时使用,而不管输出属性值分别适用的实例或顶点的数量如何。

Description

图形处理
技术领域
本发明涉及图形处理,并且特别地,涉及包括顶点着色(vertex shading)阶段的图形处理系统的操作。
背景技术
如本领域中已知的,图形处理典型地以流水线(pipelined)方式执行,具有对数据进行操作以便产生显示的最终图像的一个或多个流水线阶段。该处理的两个重要阶段典型地为:诸如变换和照明之类的所谓的顶点着色操作,其在代表要显示的图像的图元(多边形)的顶点上执行;以及后续的片段(像素)着色操作,其对构成要显示的图像的各个片段(像素)着色(赋色)。
诸如顶点变换和照明之类的顶点着色操作典型地在图形处理的所谓的“顶点着色器”阶段中执行。这典型地为在输入数据值上执行顶点着色器程序以便产生希望的输出数据集合(例如适当变换和照明的顶点数据)以供图形流水线的其余部分处理的可编程处理单元。(如本领域中已知的,通常将场景的每个图元(多边形)定义和表示为顶点集合,其中每个顶点具有与其关联的用于该顶点的数据值集合。顶点着色过程例如基于顶点所涉及的图元所经受的任何变换或照明修改针对该顶点的初始定义的数据值。)。
一旦用于场景的输入数据值经过顶点“着色”,那么通常将代表场景的图元光栅化以便为场景产生多个要被处理的“片段”。(如本领域中已知的,“片段”是在其上执行图形处理操作(例如再现)的离散图形实体。每个片段与场景的一个或多个采样点对应并且具有与其关联的必要数据,例如红色、绿色、蓝色(RGB)颜色数据、阿尔法(透明度)值和深度值,以允许显示所述(一个或多个)样本点。(片段也可以称为像素,但是情况并非必然是给定片段将完全与最终显示中的单个像素(像素元素)对应,因为诸如向下缩放之类的后处理可能意味着图形处理在其上操作的实体(片段)与显示像素之间不存在一一对应。))。
图形片段一旦产生,则经历对其着色以便产生其最终的输出颜色等值的若干过程,例如应用纹理、混合等等。例如显示所述片段所代表的(一个或多个)样本点所需的导出输出数据值的这样的过程可以称为“片段着色”或者“像素着色”并且在处理流水线的片段着色(也称为像素着色)阶段中执行。片段着色过程处理片段的初始定义的片段数据值以便正确地导出该片段的输出数据(显示该片段代表的(一个或多个)样本点所需的数据)。再一次地,片段着色器可以为执行一个或多个片段着色器程序以便对片段适当地着色(赋色)的可编程单元。
如本领域中已知的,顶点和片段着色操作通常对所谓的“属性”进行操作。属性是着色器程序中的输入或输出变量,并且可以代表例如位置、颜色或纹理坐标等等。
顶点着色器的输入属性可以称为初级属性,并且顶点着色器的输出属性(其也是片段着色器输入属性)可以称为次级属性。通常,对于给定的着色器程序(链接的顶点和片段着色器)而言,存在固定数量的初级属性(顶点着色器输入变量)和固定数量的次级属性(顶点着色器输出/片段着色器输入变量)。
对于特定的绘图(draw)调用而言,针对非实例化(instanced)的绘图,每个初级属性(顶点着色器输入变量)具有用于绘图调用的每个顶点的定义值。在实例化绘图的情况下,每个初级属性(顶点着色器输入变量)具有用于每个顶点或者用于每个实例的定义值。因此,在实例化模式操作中,一些初级属性将具有在每顶点基础上定义的值,并且因而可以被认为是“每顶点”属性。同样地,可以存在其值在每实例基础上定义的初级属性,所述属性因此可以被认为是“每实例”属性。
如本领域中已知的,当图形处理器在所谓的“实例化”模式下操作时,将绘制相同输入几何结构的多个“实例”(例如每次在稍微不同的位置)。在这种情况下,顶点着色器将每顶点每实例运行一次(即次数等于顶点数量乘以实例数量),而不是仅仅每顶点运行一次。因此,对于每个不同的顶点和实例组合而言,通常将存在为每个次级属性(顶点着色器输出变量)产生的顶点着色器输出(次级属性值)。
初级属性值典型地存储在存储器中以供顶点着色器使用。(这通常在图形API中规定。)要求图形处理的主机系统上的应用程序通常将规定顶点着色器输入属性和输入属性值的存储布局。
在传统的即时模式图形处理单元的情况下,为了向诸如片段着色器之类的后续处理阶段提供输出的经过顶点着色的次级属性值,顶点着色器输出典型地被引导通过芯片内的内部流水线。在延迟再现图形处理器(例如基于图块(tile)的图形处理器)的情况下,通常将顶点着色器输出(顶点着色的属性值)写到存储器,当片段着色器等需要时,于是从所述存储器访问这些顶点着色器输出。
在属性值存储于存储器中的地方,顶点着色器和片段着色器等通常将提供有适当的存储地址并且使用适当的存储地址以便在适当属性值要被存储或所存储的地方从存储器存储和检索(retrieve)这些值。
例如,顶点着色器将执行加载特定输入属性值以供处理的指令,并且该指令将包括或者指示允许顶点着色器在存储输入属性值的地方从存储器中检索适当的属性值的存储地址。类似地,片段着色器将执行加载特定的顶点着色的输出属性值以供处理的指令,并且该指令将包括或者指示允许片段着色器在存储输出属性值(顶点着色器的输出)的地方从存储器中检索用于所讨论的多边形(图元)的每个转角顶点的适当输出属性值的(一个或多个)存储地址。
申请人相信,仍然存在改进包括顶点着色阶段的图形处理器操作的范围,并且当这些顶点着色阶段在实例化模式下操作时,尤其如此。
发明内容
依照本发明的第一方面,提供了一种操作图形处理系统的方法,该图形处理系统包括处理输入属性值以便产生输出的顶点着色的属性值以供该图形处理系统的后续阶段使用的顶点着色阶段,该方法包括:
当顶点着色阶段在实例化模式下操作时,对于给定绘图调用:
        标识要由顶点着色阶段产生的顶点着色器输出属性,对于该顶点着色阶段而言,顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上或者仅仅在每实例基础上定义;以及
        当识别出要产生的顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上或者仅仅在每实例基础上定义时:
      顶点着色阶段:
        在顶点着色器输出属性仅仅依赖于每顶点定义的输入属性的情况下,对于给定顶点存储要由顶点着色阶段产生的顶点着色器输出属性值的仅仅一个拷贝以供图形处理系统的后续阶段使用,而不管输出属性值所适用的实例数如何;以及
        在顶点着色器输出属性仅仅依赖于每实例定义的输入属性的情况下,对于给定实例存储要由顶点着色阶段产生的顶点着色器输出属性值的仅仅一个拷贝以供图形处理系统的后续阶段使用,而不管输出属性值所适用的顶点数如何;以及
        一个或多个后续图形处理阶段:
        在输出属性仅仅依赖于每顶点定义的输入属性的情况下,对于给定顶点而言针对输出属性值所适用的每个实例使用单个存储的顶点着色器输出属性值;以及
        在输出属性仅仅依赖于每实例定义的输入属性的情况下,对于给定实例而言针对输出属性值所适用的每个顶点使用单个存储的顶点着色器输出属性值。
依照本发明的第二方面,提供了一种用于处理图形的系统,该系统包括:
多个图形处理阶段,其包括顶点着色阶段以及顶点着色阶段后续的至少一个处理阶段,其中顶点着色阶段处理输入属性值以便产生输出属性值以供图形处理器的所述至少一个后续处理阶段使用;以及
处理器,其被配置成当顶点着色阶段在实例化模式下操作时,对于给定绘图调用:
        标识要由顶点着色阶段产生的顶点着色器输出属性,对于该顶点着色阶段而言,顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上或者仅仅在每实例基础上定义;并且
        当识别出要产生的顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上或者仅仅在每实例基础上定义时,使得顶点着色阶段:
        在顶点着色器输出属性仅仅依赖于每顶点定义的输入属性的情况下,对于给定顶点存储要由顶点着色阶段产生的顶点着色器输出属性值的仅仅一个拷贝以供图形处理系统的后续阶段使用,而不管输出属性值所适用的实例数如何;以及
        在顶点着色器输出属性仅仅依赖于每实例定义的输入属性的情况下,对于给定实例存储要由顶点着色阶段产生的顶点着色器输出属性值的仅仅一个拷贝以供图形处理系统的后续阶段使用,而不管输出属性值所适用的顶点数如何;并且
        在识别出要产生的顶点着色器输出属性仅仅依赖于每顶点定义的输入属性或者仅仅依赖于每实例定义的输入属性的情况下,使得将处理顶点着色阶段的输出的所述至少一个后续图形处理阶段:
        在输出属性仅仅依赖于每顶点定义的输入属性的情况下,对于给定顶点而言针对输出属性值所适用的每个实例使用单个存储的顶点着色器输出属性;以及
        在输出属性仅仅依赖于每实例定义的输入属性的情况下,对于给定实例而言针对输出属性值所适用的每个顶点使用单个存储的顶点着色器输出属性值。
在本发明中,当在实例化模式下操作时的图形处理操作被配置成识别顶点着色器的输出属性,对于该顶点着色器而言,输出属性所依赖的顶点着色器输入属性仅仅每顶点地定义(即其值每顶点地设置,但是跨该顶点的所有实例相同),或者仅仅每实例地定义(即其值每实例地设置,但是跨该实例的所有顶点相同)。
申请人已经认识到,当在实例化模式下操作时,如果用于顶点着色器的输出属性的顶点着色器输入属性仅仅依赖于每顶点定义的(一个或多个)输入属性(即依赖于其值在每顶点基础上定义的顶点着色器输入属性),那么对于给定顶点与不同实例的每个组合,顶点着色器将产生相同的输出属性值(即顶点着色器产生的输出属性值将是跨任何给定顶点的所有实例而相同的)。例如,如果顶点着色器输入属性为用于顶点的纹理坐标,则情况就是这样。
类似地,如果用于顶点着色器的输出属性的顶点着色器输入属性仅仅依赖于每实例定义的(一个或多个)输入属性(即依赖于其值在每实例基础上定义的输入属性),那么对于给定实例与不同顶点的每个组合,顶点着色器将产生相同的输出属性值(即顶点着色器产生的输出属性值将对于每个顶点针对所讨论的实例是相同的)。
申请人进一步认识到,在这样的情况下,可能不必对于每个每实例每顶点组合存储后续图形处理阶段将对其操作的顶点着色的输出属性值,因为针对一个每实例每顶点组合的输出属性值可以重新用于将具有相同输出属性值的其他的每顶点每实例组合。
本发明通过以下方式利用这点:确定何时这种仅仅依赖于每顶点或每实例定义的顶点着色器输入属性的输出属性存在并且然后使得顶点着色器仅仅存储(每个)相关输出属性值的一个拷贝,其然后在每次后续图形处理阶段需要该值时被重新使用。
这具有以下优点:避免了存储多个相同的输出属性值以供后续图形处理阶段使用,从而例如与单独地存储每个相同的输出属性值的布置相比,对于实例化模式顶点着色器操作节省了例如存储使用量以及因而功率使用量。这通常是有益的,但是对于要用在低功率和便携式设备中的图形处理系统而言是特别有利的。
以另一种方式来看,本发明事实上标识了其中当在实例化模式下操作时顶点着色器的输出将相同的情况,并且然后作用来存储(以及在需要时重新使用)每个这样的相同顶点着色器输出属性值的仅仅一个拷贝。
因此,对于依赖于仅仅在每顶点基础上定义的顶点着色器输入属性的每个不同的顶点着色器输出属性,本发明将存储要为用于每个相应顶点的该属性产生的顶点着色器输出属性值的仅仅一个拷贝,而不管应当为该顶点的多少不同实例产生该输出属性值。
类似地,对于依赖于仅仅在每实例基础上定义的顶点着色器输入属性的每个不同的顶点着色器输出属性,本发明将存储要为用于每个相应实例的该属性产生的顶点着色器输出属性值的仅仅一个拷贝,而不管应当为该实例的多少不同顶点产生该输出属性值。
顶点着色器处理的输入属性值(即如上文所讨论的输入变量值)以及对应的输出属性值(输出变量值)可以是顶点着色器可以对其操作(和产生)的任何适当的这样的属性值。它们如本领域中已知的典型地将是并且在一个优选的实施例中为诸如位置、颜色等等之类的属性的值。
在这里,应当指出的是,本发明同样地适用于图形处理系统包括多个顶点着色器的情况,例如可能是多核系统的情况。在这种情况下,顶点着色阶段将包含例如并行操作的多个单独的顶点着色器。在这样的布置中,每个顶点着色器优选地以本发明的方式操作,即存储每个不同的依赖于仅仅每顶点的顶点着色器输入属性和仅仅每实例的顶点着色器输入属性的顶点着色器输出属性值的仅仅一个拷贝。
要使用顶点着色器的输出的后续图形处理阶段可以是任何适当的且希望的这样的图形处理阶段。它们优选地为图形处理系统的后续着色器阶段。在一个特别优选的实施例中,后续图形处理阶段为片段着色器。它也可以例如为几何着色器。
其中顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点基础上定义(即输出属性依赖于仅仅关于顶点定义其(一个或多个)值的一个或多个顶点着色器输入属性(并且因而将跨给定顶点的所有实例而相同))或者仅仅在每实例基础上定义(即输出属性依赖于仅仅关于实例定义其(一个或多个)值的一个或多个顶点着色器输入属性(并且因而将针对给定实例跨所有顶点而相同))的情形可以以任何适当且希望的方式并且在系统的任何适当的阶段处和处理器中进行识别。
这优选地通过标识每个顶点着色器输出属性依赖于哪个(哪些)顶点着色器输入属性,并且然后确定这些输入属性是否依赖于仅仅每实例或者仅仅每顶点的属性而完成。这样的双步骤过程是优选的,因为尽管每个顶点着色器输出属性所依赖的所述一个或多个顶点着色器输入属性可以在过程的相对更早的阶段处设定,但是仅仅可能在图形处理的更后阶段(例如在绘图调用时间)才设定输入属性的每顶点或每实例的性质。
在一个特别优选的实施例中,顶点着色器编译器完成该过程的至少一部分。因此,在一个优选的实施例中,顶点着色器编译器被配置成当它编译顶点着色器代码时,对于每个顶点着色器输出属性标识该输出属性依赖于哪个或哪些顶点着色器输入属性,并且在优选地与编译的顶点着色器代码关联的元信息中记录顶点着色器的每个输出属性依赖于哪个(哪些)顶点着色器输入属性。这可以通过使用适合这样做的任何希望的编译技术来完成。于是,这将标识每个顶点着色器输出属性依赖于哪个(哪些)顶点着色器输入属性。
在这个方面,应当指出的是,尽管优选的是在本发明中适当地识别和处置仅仅在每顶点基础上或者仅仅在每实例基础上定义的用于顶点着色器输出属性的顶点着色器输入属性的每种情况,但是申请人已经认识到,也许并非总是可能的是,标识顶点着色器输出属性依赖于哪些顶点着色器输入属性的机制在其操作中完全精确或可靠。例如,在顶点着色器编译器正用于这样做的情况下,情况可能是(并且的确典型地将是)该编译器将不能够对于所有着色器程序都理想地标识该特性。
为了对此进行解释,在一个特别优选的实施例中,配置和构造用于标识顶点着色器输出属性所依赖的输入属性的机制,以便给出保守的结果,即“选择稳妥的做法”。因此,在一个特别优选的实施例中,这样布置,使得标识顶点着色器输出属性所依赖的输入属性时的任何错误应当使得系统将推断(确定)顶点着色器输出属性依赖于某个其实际上并不依赖的输入属性(即给出确定的作为实际依赖性超集的输入属性依赖性集合),而不是错失输出属性实际上的确依赖的输出属性依赖性。
因此,系统优选地被配置成使得确定顶点着色器输出属性所依赖的顶点着色器输入属性时的任何错误都是在事实上情况并非如此时确定顶点着色器输出属性依赖于某个输入属性的错误。这将具有系统针对所有情形都正确地采取行为的效果(但是潜在地错失以本发明的方式优化和优选地操作的一些机会)。
在这里,还应当指出的是,相应地,以其中将顶点着色器输出属性被标识为仅仅依赖于每顶点定义的或者仅仅依赖于每实例定义的顶点着色器输入属性的特定方式引用本发明的操作涉及其中系统(例如编译器)标识了这种情形(这种顶点着色器输出属性)的那些情形。类似地,引用给定顶点着色器输出属性对于给定顶点着色器输入属性的依赖性涉及如本发明的系统(例如编译器)所标识的那些依赖性,除非上下文另有要求。
然后,后续对于用于给定输出属性的顶点着色器输入属性是否为仅仅依赖于每顶点或每实例的属性的标识优选地由图形处理器驱动器优选地在绘图调用时间优选地使用来自顶点着色器编译器的元信息以及用于绘图调用的定义输入属性的每顶点或每实例性质的参数中的信息而完成。
因此,优选地,驱动器对于一个并且优选地对于每个顶点着色器输出属性标识其所依赖的顶点着色器输入属性是否仅仅在每顶点基础上或者仅仅在每实例基础上定义。优选地,依照其依赖于哪些种类的顶点着色器输入属性(即其是否仅仅依赖于每顶点定义的顶点着色器输入、仅仅依赖于每实例定义的顶点着色器输入,或者依赖于这二者,或者不依赖于顶点着色器输入属性(即对于每个绘图调用,输出属性具有恒定值))而对所有顶点着色器输出属性分类。
因此,在一个特别优选的实施例中,正是顶点着色器编译器和用于图形处理器的驱动器的组合标识了何处以及是否顶点着色器输出属性仅仅依赖于每实例定义的或者仅仅依赖于每顶点定义的顶点着色器输入属性。
在这里,应当指出的是,如本领域中已知的,给定顶点着色器输出属性,以及依赖于一个或多个顶点着色器输入属性,也可以依赖于一个或多个每绘图调用输入,所述输入对于给定绘图调用将是恒定的。本发明可以同样地用于其中除了每顶点或每实例定义的顶点着色器输入属性之外顶点着色器输出属性还依赖于(一个或多个)每绘图调用输入(针对绘图调用定义的恒定值)的那些情况。因此,本文中引用仅仅依赖于每顶点或每实例定义的输入属性的顶点着色器输出属性预期涉及这样的情形,其中顶点着色器输出属性所依赖的所有顶点着色器输入属性分别仅仅在每顶点或每实例基础上定义,不要求输出属性仅仅依赖于每顶点或每实例定义的顶点着色器输入属性并且不依赖于别的东西(即不排除顶点着色器输出属性也依赖于不是顶点着色器输入属性的其他输入,例如每绘图调用定义的输入)。
一旦标识了仅仅依赖于每顶点或每实例的顶点着色器输入属性的输出属性,那么可以以任何适当且希望的方式并且在系统的任何适当阶段和通过系统的处理器控制该顶点着色器(或者在顶点着色阶段包括多个单独的顶点着色器的情况下,多个顶点着色器)以便在输出属性仅仅依赖于每顶点或每实例定义的顶点着色器输入属性的情况下存储输出的顶点着色的属性值的仅仅一个拷贝。
在一个优选的实施例中,所述(或每个)顶点着色器被配置成在每次其产生输出属性值时将该(复制的)输出属性值写到存储器中的相同位置(例如且优选地在输出属性值阵列中)。通过这种方式,将仅仅存在存储于存储器中的相关输出属性值的一个拷贝(因为该输出属性值的任何后续产生的拷贝将写到存储器中的相同位置,即事实上简单地重写相同输出属性值的先前存储的版本)。因此,例如当第一次产生依赖于仅仅每顶点定义的顶点着色器输入属性的输出属性的给定值时,可以将其写到例如存储位置X。然后,如果针对另一个实例产生依赖于仅仅每顶点定义的顶点着色器输入属性的输出属性的那个值,那么它将再次写到存储位置X,等等。
因此,在一个优选的实施例中,控制所述顶点着色器(或者着色器)以便将仅仅依赖于每顶点定义的(一个或多个)顶点着色器输入属性值的给定集合的顶点着色器输出属性值的每次出现写到存储器中的相同位置,并且将仅仅依赖于每实例定义的(一个或多个)顶点着色器输入属性值的给定集合的顶点着色器输出属性值的每次出现写到存储器中的相同位置。换言之,每当顶点着色器输出属性值开始(fall to)产生(对于所述输出属性值而言,其所依赖的顶点着色器输入属性仅仅在每顶点基础上定义或者仅仅在每实例基础上定义)时,将对应的产生的输出属性值存储到存储器中的相同位置。
这可以方便地且优选地通过使用适当的存储属性指令以便使得顶点着色器每次在存储器中的相同位置存储该属性值而实现。优选地,当执行存储属性指令时读取和/或使用的与这些属性关联的元信息用来使得顶点着色器每次在存储器中的相同位置存储该属性值。
在一个特别优选的实施例中,所述顶点着色器(或者多个顶点着色器)被配置(控制)成在标识了仅仅依赖于每顶点或每实例的输出属性的情况下将所述(或者每个)相关输出属性值写入存储器中(例如且优选地写入输出属性值阵列中)仅仅一次(即,使得对于要产生相同输出属性值的其他时间,则根本不将其写到存储器(而不是将其重写到存储器中的相同位置))。因此,例如,当针对特定实例(例如实例0)产生仅仅依赖于每顶点输入属性的输出属性的给定值时,将它写到存储器,但是如果针对相同顶点的其他实例产生该仅仅依赖于每顶点输入属性的输出属性值,则根本不将该值写到存储器。
因此,在一个特别优选的实施例中,所述顶点着色器(或者多个着色器)被控制成将仅仅依赖于每顶点定义的(一个或多个)顶点着色器输入属性值的给定集合或者仅仅依赖于每实例定义的(一个或多个)顶点着色器输入属性值的给定集合的顶点着色器输出属性值的一次出现写到存储器,而不将该顶点着色器输出属性值的任何其他出现写到存储器。换言之,某时(例如第一次)开始产生仅仅依赖于每顶点定义的(一个或多个)顶点着色器输入属性值的给定集合或者仅仅依赖于每实例定义的(一个或多个)顶点着色器输入属性值的给定集合的顶点着色器输出属性值时,将该输出属性值写到存储器,但是如果在另一时间(例如再次)开始产生该输出属性值,那么不将它写到存储器。
这具有以下优点:不仅避免了用于存储复制的顶点着色器输出属性值的存储使用量,而且也避免了将那些值写到存储器以及因而对应的写业务量。这对于图形处理系统中的顶点着色器操作而言,可以进一步减少存储业务量和使用量以及相应地减少功率使用量。
这样的布置在多核图形处理系统中也可能是特别有利的,在所述多核图形处理系统中,如本领域中已知的那样,多个顶点着色器可以试图同时写到输出属性阵列。在这种情况下,如果多个顶点着色器试图写到相同的位置,那么可能存在对于高速缓存线所有权的争夺,从而潜在地降低性能。通过将每个复制的输出属性值仅写到存储器仅仅一次,可以避免这个问题。
下文中更加详细地讨论一种用于控制(一个或多个)顶点着色器以便将相应属性值写到存储器仅仅一次的优选机制。
系统应当至少在顶点着色阶段在实例化模式下操作时以本发明的方式操作,但是如果希望的话,它可以一直以此方式操作。在如上面所讨论的使用编译器和驱动器以实现本发明的情况下,操作的编译器部分优选地总是发生(因为编译器不会知道是否将使用实例化模式),但是操作的驱动器部分优选地仅仅针对实例化模式绘图调用而触发。
对于要处理的每个相应的绘图调用而言,系统应当以本发明的方式操作。因此,例如,对于存储输出属性值的单个拷贝的引用涉及对于给定绘图调用存储单个拷贝。因此,系统优选地以针对要处理的一个(并且优选地对于每个)相应的绘图调用所要求的方式操作。同样地在例如可以将初始定义的单个绘图调用分解成多个不同的绘图调用(例如以便串行或并行地或者以其某种组合地处置)以供处理的情况下,每个单独的(分解的)绘图调用应当以本发明的方式单独地(本身)处理(即如果适当的话,具有存储的(一个或多个)输出属性值的仅仅单个拷贝等)。
本领域技术人员应当理解,依赖于仅仅每顶点或仅仅每实例的输出属性值的单个拷贝将需要以适当的方式存储和组织到存储器中以供诸如片段着色器之类的后续图形处理阶段使用。它们可以在存储器中以任何适当且希望的方式布置以便实现这点。
在一个特别优选的实施例中,针对其所依赖的(一个或多个)顶点着色器输入属性值分别基于且使用相关顶点索引或实例索引在存储器中布置和索引仅仅每顶点和每实例的输出属性值。换言之,针对给定依赖于仅仅每顶点定义的顶点着色器输入属性的输出属性的输出属性值将通过使用相应顶点的顶点索引而进行索引,对于所述顶点,定义输出属性值所依赖的对应顶点着色器输入(依赖于顶点的)(一个或多个)属性值。类似地,针对给定依赖于仅仅每实例定义的顶点着色器输入属性的输出属性的输出属性值将通过使用相应实例的实例索引而进行索引,对于所述实例,定义输出属性值所依赖的对应顶点着色器输入(依赖于实例的)(一个或多个)属性值。每实例属性也可以将实例索引除以定义的实例除数。
这是在一次每顶点或一次每实例的基础上存储输出属性值的情况下用于索引输出属性值的特别方便的机制。因此,在一个特别优选的实施例中,顶点着色器将仅仅依赖于每顶点或每实例输入属性的输出属性值存储到分别通过输出属性值所依赖的(一个或多个)对应输入属性值的顶点索引或实例索引而索引的存储位置中。
顶点着色器可以被配置成以任何希望的且适当的方式将输出属性值存储在适当的存储位置(例如通过顶点或实例索引适当地索引)处。优选地,顶点着色器存储属性指令,其在执行时使得顶点着色器将属性值存储在希望的存储位置处。
顶点着色器输入属性值优选地也在它们与哪个顶点或实例(在使用实例化模式的情况下)有关的基础上进行索引。因此,在每顶点基础上定义的顶点着色器输入属性值优选地在存储器中参照它们与之有关的顶点进行索引(即使用(输入)顶点索引)。类似地,在每实例基础上定义的顶点着色器输入属性值优选地参照它们与之有关的实例进行索引(即使用(输入)实例索引)。每实例属性也可以将实例索引除以定义的实例除数。
此外,尽管如上面所讨论的顶点着色器的依赖于仅仅特定每顶点或者仅仅每实例的输入的输出属性优选地在存储器中在每顶点或每实例基础上进行索引,但是顶点着色器的输出属性值优选地也可以使用“展开的”输出索引进行索引。这是因为尽管通常对于每个顶点对于每个依赖于顶点的输入属性存在仅仅一个顶点着色器输入属性值并且对于每个实例对于每个依赖于实例的输入属性存在一个顶点着色器值输入,但是顶点着色器的输出将在正常过程中“展开”或“放大”以便对于每个顶点对于每个实例(对于每个单独的顶点和实例组合)提供对于每个输出属性的单独的输出属性值。
诸如片段着色器之类的(一个或多个)后续图形处理阶段可以被配置成每当需要时以任何适当的且希望的方式使用单个存储的顶点着色的输出属性值。
这优选地通过使用用于诸如片段着色器之类的图形处理阶段的加载属性指令来完成,这些属性指令在被执行时使得该图形处理阶段加载希望的属性值。这在相关输出属性值存储在加载指令本身中的情况下可以包括例如提供一个或多个存储地址,但是在一个特别优选的实施例中,当检索(加载)属性值时使用索引机制(以及优选地上面的索引机制)。
因此,在一个特别优选的实施例中,(一个或多个)后续图形处理阶段(例如以及优选地片段着色器)每当它们要处理单个存储的顶点着色的输出属性值的拷贝时重新使用该顶点着色的输出属性值,这通过以下方式实现:每当它们要处理所讨论的输出属性值的拷贝时使用对于顶点着色的输出属性值的相同索引(即,使得它们每次将从存储的顶点着色的输出属性值中读取相同的项)。
因此,在一个特别优选的实施例中,向诸如片段着色器之类的后续图形处理阶段提供适当的索引以便允许它们在每次要使用相同存储的仅仅依赖于每实例或每顶点定义的顶点着色器输入属性的输出属性值时就检索并且使用该输出属性值。
可以使得后续图形处理阶段以任何适当的方式,例如通过每次向其提供相同的适当索引以便直接使用来使用对于存储的输出属性值的相同索引。因此,例如,比如片段着色器编译器可以产生用于片段着色器的包括或者指示适当索引的加载输入指令。于是,在其中如上面所讨论的使用相关输入顶点或实例索引而索引依赖于仅仅每顶点或仅仅每实例定义的顶点着色器输入属性的输出属性值的情况下,在这些布置中将因此向诸如片段着色器之类的后续图形处理阶段提供要用来直接检索输出属性值的相关顶点索引或实例索引(并且在一个优选的实施例中这样做了)。
然而,如上面所讨论的,优选的是也能够对于顶点着色器的输出(对于顶点着色器输出属性值)(以及因而对于片段着色器的输入等等)使用“展开的”输出索引,因为尽管顶点着色器输入属性值阵列通常将对于每个顶点对于每个依赖于顶点的输入属性仅仅包含一个项(属性值)并且对于每个实例对于每个依赖于实例的输入属性仅仅包含一个项(属性值),顶点着色器的输出在正常过程中将“展开”或“放大”以便对于每个顶点对于每个实例(对于每个单独的顶点和实例组合)提供用于每个输出属性的单独的输出属性值。
如果情况是这样的话,可能的是将图形处理系统配置成能够按照需要向诸如片段着色器之类的后续图形处理阶段以及那些直接使用的后续图形处理阶段提供用于输出属性值的“展开的”输出索引或者顶点索引或实例索引。
然而,在一个特别优选的实施例中,图形处理系统被配置成向后续图形处理阶段提供优选地为如上面所讨论的“展开的”输出索引形式的单一形式的输出索引,其中要用于依赖于仅仅每顶点和仅仅每实例定义的顶点着色器输入属性的输出属性值的任何其他形式的索引(例如以及优选地如上面所讨论的顶点索引或实例索引)于是在需要时可从且从该输出索引导出。
因此,在一个特别优选的实施例中,在诸如片段着色器之类的后续图形处理阶段要处理输出的顶点着色的属性值时向其提供“展开的”输出属性值索引,如果需要的话,可以从该“展开的”输出属性值索引导出用于仅仅依赖于仅仅每顶点或仅仅每实例定义的顶点着色器输入属性的输出属性值的适当索引(即上面的优选实施例中的顶点索引或实例索引)。于是,这意味着仅仅单一形式的索引(即输出的“展开的”索引)需要提供给后续图形处理阶段(而不是要求这些阶段支持以及潜在地被提供多种形式的索引)。而且,使用输出的展开的索引作为使用的索引形式是有利的,因为通常该形式的索引将比提供例如顶点索引和实例索引二者占用更少的存储空间。
“展开的”输出索引优选地通过图形处理阶段要执行的加载(或存储)属性指令提供和/或指示。
在这些布置中,用于输出属性值的单个存储的拷贝的(一个或多个)索引可以以任何适当的且希望的方式从提供给后续图形处理阶段的输出索引中导出。它们优选地可从(且从)输出索引中以预定的方式导出。
在一个特别优选的实施例中,可以从提供给后续图形处理阶段的输出的“展开的”索引中导出的索引包括如上面所讨论的顶点索引或实例索引。
在一个特别优选的实施例中,顶点索引和实例索引之一(以及优选地顶点索引)可以借助于输出索引值上的取模运算从输出索引中导出,并且顶点索引和实例索引中的另一个(以及优选地实例索引)可以通过对输出索引值执行除法运算而从输出索引中导出。
最优选地,用于顶点着色器输出属性值(并且尤其是提供给后续图形处理阶段)的输出的“展开的”索引以预定的方式从顶点着色器处理对其处理(或者将对其处理)以便产生相关输出的顶点着色的输出属性值的(一个或多个)输入属性值的实例索引和/或顶点索引中导出。这于是意味着通过反转输出索引生成操作,可以检索对应的顶点索引或实例索引。(换言之,申请人认识到,如果以适当的方式从定义的顶点和实例输入属性值索引中导出输出的展开的索引,那么可以分解该输出索引以便提供对应的顶点或实例索引,从而提供用于检索顶点或实例属性值索引而无需直接规定它们的机制)。
因此,在一个特别优选的实施例中,以预定的方式从对于其定义对应的顶点着色器输入属性值的顶点和实例的顶点索引和实例索引产生用于顶点着色器输出属性值(并且当后续图形处理阶段要处理由顶点着色器产生的输出属性值时提供给它们)的索引。
最优选地,如下导出要使用的输出索引值(提供给片段着色器等等的索引):
输出索引值=(顶点索引)+(实例索引)x(填充的实例大小)
其中“填充的实例大小”为设定的(选择的)等于或大于每实例顶点数的值。
这于是意味着(输入)顶点索引可以通过取模运算从输出索引值获得:
顶点索引=(输出索引值)模(填充的实例大小)
并且(输入)实例索引可以通过除法运算从输出索引值获得:
实例索引=向下取整((输出索引值)/(填充的实例大小))。
其效果在于,针对例如给定输入索引的每个实例产生的每个输出索引在经受上面的取模运算时将返回相同的顶点索引,并且针对给定输入实例的每个顶点产生的每个输出索引在经受上面的除法运算时将返回相同的实例索引。因此,片段着色器例如可以在每次它需要依赖于仅仅每顶点或每实例定义的顶点着色器输入属性的输出属性值时(适当地)导出相同的索引(顶点索引或实例索引)以便检索该输出属性值的单个拷贝(即使该输出属性值的每次出现将具有不同的“输出索引”值)。
“填充的实例大小”应当至少等于每实例的顶点数(其将例如针对所讨论的绘图调用进行定义),但是它不必准确地为该数。优选地,将它设定为在硬件中执行取模运算时有效地使用的值(因为这于是与完全通用的模所需的相比,将允许更简单的模电路)。最优选地,将其向上取整为(相对)容易取模的下一个更大的或相等的值(高于每实例的顶点数)。
在图形处理系统使用用于对于特定属性允许每实例输入值具有实例索引的另外的除数值的实例化的API机制的情况下,那么优选地在索引这适用的任何每实例输入属性值时相应地使用这种另外的除数机制(其中当导出实例索引以便用来从提供给例如片段着色器的输出的展开的索引中检索那些属性值时优选地简单地将所述另外的除数乘上除数值(填充的实例大小))。
因此,当片段着色器(或者其他后续图形处理阶段)要处理顶点着色器输出属性值(对于该输出属性值,顶点着色器输出属性所依赖的顶点着色器输入属性仅仅在每顶点或每实例基础上定义)时,例如片段着色器将被引导成加载顶点着色器输出属性值并且被提供输出索引值,其然后从该输出索引值导出用来检索希望的顶点着色器输出属性值的索引。
在上面讨论的其中可以使用不同的操作以便从提供的输出索引中导出希望的索引的布置中,图形处理阶段也将需要被告知要使用哪个索引导出操作(以及要在该操作中使用的任何值)。
虽然在这个方面诸如片段着色器之类的图形处理阶段的加载指令有可能包括导出用来检索相关顶点着色器输出属性值的索引所需的所有信息,但是在一个特别优选的实施例中,要执行的索引导出操作以及优选地该操作所需的任何数据(值)优选地通过与加载指令本身分离的元信息指示和/或作为所述元信息而提供。该元信息优选地指示提供给片段着色器等等的输出索引是否应当经受如上面所讨论的模或除法运算以便导出顶点索引或实例索引以供检索(一个或多个)属性值时使用。最优选地,该元信息也指示或者包括用来导出希望的索引的适当的模或除数值(即填充的实例大小以及实例除数(如果必要的话))。
在一个特别优选的实施例中,元信息与所讨论的属性关联。于是,无论何时处理属性的值,优选地读取与该属性关联的元信息以便确定用来确定用于检索属性值本身的索引的索引导出方法(如果有的话)。
因此,在一个特别优选的实施例中,每个标识的仅仅依赖于每顶点或每实例定义的顶点着色器输入属性的输出属性具有与其关联的元信息,该元信息使得后续图形处理阶段在需要该顶点着色器输出属性时使用适当的单个存储的顶点着色的输出属性值。然后,该元信息优选地由(一个或多个)后续图形处理阶段用来检索正确的顶点着色器输出属性值(顶点着色的输出属性值的单个存储的拷贝)以供使用。
在一个特别优选的实施例中,该元信息处于属性描述符的形式,该属性描述符优选地尤其适当地指示对应属性是否为“除数”属性(即应当对“展开的”输出索引使用除法运算以便导出要使用的索引)或者“模”属性(即应当对“展开的”输出索引使用除法运算以便导出要使用的索引)或者“正常的”或“线性的”属性(即应当直接使用“展开的”输出索引)以及对应的除数或模值(填充的实例大小(以及实例除数(如果必要的话)))。
在上面讨论的优选的布置中,仅仅依赖于每顶点定义的顶点着色器输入属性的顶点着色器输出属性将定义为模值等于填充的实例大小的模属性,并且仅仅依赖于每实例定义的顶点着色器输入属性的顶点着色器输出属性将定义为除数值等于填充的实例大小(如果需要的话,乘以任何需要的实例除数)的除数属性。
因此,在一个特别优选的实施例中,对于一个以及优选地每个顶点着色器输出属性产生并且存储指示如何导出允许检索希望的输出属性值的正确索引的优选地处于属性描述符形式的元信息。然后,后续图形处理阶段(例如片段着色器)优选地使用该元信息导出对于存储的顶点着色器输出属性值的希望的索引。
在一个特别优选的实施例中,该机制也由顶点着色器用来存储其输出属性值。这提供了一种特别方便的用于使得顶点着色器存储每个仅仅依赖于每顶点或每实例顶点着色器输入属性的输出属性值的仅仅一个拷贝的机制,因为它将使得顶点着色器针对对于其开始产生输出属性值的每个顶点和实例组合导出以其存储该输出属性值的相同的顶点或实例索引。
因此,顶点着色器的存储属性指令优选地包括或指示关于所讨论的属性值使用的展开的输出索引,并且顶点着色器然后根据元信息确定如何处理该索引以便导出用来存储要处理的输出属性值的实际索引(顶点或实例索引)。
在一个特别优选的实施例中,每个顶点着色器输出属性具有对应的输出属性描述符。最优选地,每个顶点着色器输入属性也具有对应的输入属性描述符。
顶点着色器输出属性描述符优选地如上面所讨论的由顶点着色器用来确定将其输出属性值写到何处,并且由诸如片段着色器之类的后续图形处理阶段用来确定何处读取它们。输入属性描述符优选地由顶点着色器用来尤其是正确地访问其输入属性值。
因此,在一个特别优选的实施例中,存在包括多个属性描述符的元信息阵列,每个属性描述符与顶点着色器的相应的输出属性关联且对应,所述属性描述符尤其是包含允许诸如顶点着色器或片段着色器之类的图形处理阶段将属性值存储到存储器中的适当位置或者从该适当位置检索属性值的信息。
类似地,优选地存在包括多个属性描述符的元信息阵列,每个属性描述符与顶点着色器的相应的输入属性关联且对应。
属性描述符优选地由图形处理器驱动器在绘图调用时间产生。最优选地,驱动器一旦确定了顶点着色器输出属性(以及输入属性)的每顶点或每实例(或二者或者没有任何一个)的依赖性,则适当地产生并且存储属性描述符。
因此,在一个优选的实施例中,图形处理器驱动器被配置成每当其要产生时则产生使得顶点着色器将依赖于仅仅每顶点或仅仅每实例的顶点着色器输入属性的输出属性值写到存储器中的相同位置的元信息(其优选地与顶点着色器输出属性关联)。
可以以任何希望的且适当的方式指示要由图形处理阶段在其要处理属性值时读取(使用)的相关元信息(例如属性描述符)。在一个特别优选的实施例中,给每个属性分配属性索引,并且这些属性索引然后用来指示要使用的元信息(属性描述符)。属性索引可以方便地由例如顶点着色器编译器分配。
因此,在一个特别优选的实施例中,通过使用分配给所讨论的属性的属性索引来标识和读取元信息(属性描述符)。最优选地,将属性描述符存储在属性描述符阵列(或者多个阵列)中并且通过使用分配给所讨论的属性的属性索引在其中对其索引。(在这里,应当指出的是,由于属性描述符与特定属性(而不是特定属性值)有关,于是对于特定着色器程序而言,将存在固定数量的属性描述符,而不管任何特定绘图调用中绘制的顶点和实例的数量如何。)。
优选地,在对应的存储或加载指令中将要使用的元信息(属性描述符)的属性索引提供给图形处理阶段。
因此,优选地存在通过使用定义的属性索引而索引的元信息阵列。于是,诸如顶点着色器或片段着色器之类的图形处理阶段可以使用它接收的属性索引(例如以及优选地在加载或存储指令中)以便查找元信息,并且然后如果元信息这样指示的话,则以适当的方式从提供的输出索引中导出用来存储或检索要处理的属性值的实际索引。
在一个特别优选的实施例中,相对于为相关索引的属性值定义起始(基本)地址的基本存储(缓冲)地址使用如上面所讨论的用来检索属性值的诸如实例索引、顶点索引或者“展开的”索引之类的特定索引。这于是意味着例如通过引用与其有关的实例而索引的所有属性值可以这样相对于存储器中的单个共同的基本缓冲地址而索引。当可以例如相对于属性值与之有关的顶点、实例或顶点/实例组合索引时,这简化了属性值的加载和存储及其在存储器中的组织。
在一个特别优选的实施例中,当正在检索以及将要检索属性值时,除了适当的索引和缓冲基本地址之外,使用另外的信息。在一个特别优选的实施例中,该另外的信息包括与存储器中(缓冲器中)属性值的布局有关的另外的参数或信息。关于存储器中属性值的布局的该另外的信息优选地包括以下所述的一个或多个以及优选地全部:存储器中属性值的间隔的指示(优选地处于“步幅(stride)”值的形式),所讨论的属性距一个或所述基本存储地址的相对位置的指示(优选地处于“偏移”值的形式),和/或指示属性的组件(component)数据类型和组件数量的用于属性值的“类型”指示器。(在一个优选的实施例中,属性加载和存储指令基于规定的数据类型执行数据格式转换。)。
在这些布置中,相应地优选地向图形处理阶段提供适当的缓冲基本地址(和其他信息(在需要的情况下))以用于存储或检索属性值,以及用于导出用来检索(或存储)希望的属性值的索引的技术以及所需的任何数据的指示。因此,在一个特别优选的实施例中,优选地与诸如步幅、偏移和/或数据类型之类的其他数据一起向图形处理阶段提供索引和基本存储地址,据此图形处理阶段于是导出用来存储或检索属性值的存储地址。
缓冲基本地址等信息可以由加载(或存储)指令直接提供或指示。然而,在一个特别优选的实施例中,优选地以上面所讨论的方式优选地以属性描述符的形式将缓冲基本地址提供为与所讨论的属性关联的元信息。诸如步幅、偏移和数据类型之类的其他信息(在使用的情况下)也优选地以此形式提供。
因此,在一个特别优选的实施例中,每个属性描述符(如上面所讨论的)优选地也或者作为代替(并且优选地也)与诸如步幅、偏移和数据类型之类的其他信息一起指示要在检索或存储该属性的值时使用的缓冲基本地址(存储基本地址)。因此,在一个特别优选的实施例中,一个以及优选地每个属性描述符尤其指示要在加载或存储其关联的属性的值时使用的缓冲基本地址和索引导出机制(以及优选地其他的信息,例如步幅、偏移和数据类型)。
因此,在一个特别优选的实施例中,对于一个并且优选地对于一些或者每个顶点着色器输出属性,优选地与诸如步幅、偏移和数据类型之类的其他信息一起地,产生并且存储优选地处于属性描述符形式的指示如何导出允许检索或存储希望的输出属性值的适当索引以及该索引与之有关的基本存储地址的元信息。然后,图形处理阶段(例如顶点着色器或片段着色器)优选地使用该元信息以便导出要在其处存储或者在其处存储顶点着色器输出属性值的存储地址。
顶点着色器输入属性优选地以相同的方式布置,即它们具有优选地处于属性描述符形式的对应关联的元信息,其以针对上面讨论的顶点着色器输出属性的情况相同的方式提供索引导出和基本存储地址信息等等。
如上面所讨论的,所述顶点着色器(或者多个着色器)优选地被控制为将给定的依赖于仅仅每顶点或每实例定义的顶点着色器输入属性的输出属性值写到存储器仅仅一次。所述顶点着色器(或者多个着色器)可以被控制为以任何适当的且希望的方式这样做。
所述布置优选地使得仅仅针对应当对于其产生该依赖于每顶点的输出值的实例序列中的一个特定实例(例如以及优选地实例0,其中实例编号为0,1,2,……)写入仅仅依赖于每顶点定义的顶点着色器输入属性的输出属性值,并且仅仅针对应当对于其产生该依赖于每实例的输出值的顶点序列中的一个特定顶点(例如以及优选地顶点0,其中顶点编号为0,1,2,……)写入仅仅依赖于每实例定义的顶点着色器输入属性的输出属性值。
在一个特别优选的实施例中,所述顶点着色器(或者多个着色器)优选地被控制为借助于与顶点着色器的输出属性关联的元信息将给定的依赖于仅仅每顶点或仅仅每实例的顶点着色器输入属性的输出属性值写到存储器一次,所述元信息优选地然后触发顶点着色器以便确定是否将输出属性值写到存储器。
最优选地,存在这样的标志(“写减少”标志),数据生成顶点着色器可以检查该标志以便了解是否应当确定是否将输出属性值写到存储器(例如写到输出属性值阵列)。
元信息(例如“写减少”标志)优选地由如上面所讨论的图形处理器驱动器优选地在绘图调用时间产生,因为这是可以确定输出属性的相关的仅仅每顶点或每实例的依赖性的时间。
在一个特别优选的实施例中,该“写”元信息(例如“写减少”标志)包含在用于所讨论的输出属性的相关属性描述符(如上面所讨论的)中。然后,通过读取属性描述符,可以确定是否将输出属性值写到输出属性值阵列。
“写”元信息(例如在属性描述符中)优选地指示是否存在测试是否要写入输出值的需要。优选地,写元信息和/或其他元信息于是指示测试应当采取的形式以及测试所需的任何参数,其中测试的结果于是确定是否应当将输出值写到存储器(例如是否写到输出属性值阵列)。
因此,在一个优选的实施例中,触发顶点着色器以便执行确定是否应当将属性值(或者至少当前迭代的属性值)写到存储器的测试。
在其中将依赖于仅仅每顶点或仅仅每实例定义的顶点着色器输入属性的顶点着色器输出属性分类为如上面所讨论的模属性或除数属性的一个特别优选的布置中,于是如果设定了写元信息(例如写减少标志),那么顶点着色器在输出索引除以模值(填充的实例大小)、向下取整后为零的情况下仅仅存储(写到存储器)模属性的输出值,并且在输出索引对除数值取模为零的情况下仅仅存储(写到存储器)除数属性的输出值。
这将具有以下效果:仅仅针对实例0写入依赖于仅仅每顶点定义的顶点着色器输入属性的输出属性值,并且仅仅针对顶点0写入依赖于仅仅每实例定义的顶点着色器输入属性的输出属性值。因此,仅仅将每个复制的输出属性值的一个拷贝写到存储器(例如写到输出属性值阵列)。
优选地在顶点着色器执行存储属性指令时读取写元信息,其中顶点着色器然后继续存储操作或者放弃它,这依赖于写元信息以及由该信息触发的任何测试的结果。
指示用来导出用于检索(或存储)希望的属性值的索引的索引导出过程和/或指示要在检索(或存储)希望的属性值时使用的基本存储地址等等和/或确保以上面讨论的方式存储属性值的仅仅单个拷贝的元信息(例如属性描述符)的使用是特别有利的,因为它例如意味着该信息与着色器代码分离且独立。这于是允许例如与不同的元信息(属性描述符)集合一起使用相同的着色器代码,并且避免了在元信息控制的参数(例如存储器中属性值的组织)改变时改变着色器代码的需要。它也允许相同的机制用来控制来自顶点着色器的输入和输出二者,并且由顶点着色器以及诸如片段着色器之类的后续图形处理阶段使用。
因此,可以相信,在图形处理系统中例如指示用来导出用于检索希望的属性值的索引的索引导出过程和/或指示要用于检索希望的属性值的基本存储地址的与顶点着色器属性关联的元信息的这种用途可能靠自己的能力就是新颖和有利的,而不仅仅在标识复制的输出属性值的情况下是新颖和有利的。
因此,依照本发明的第三方面,提供了一种操作图形处理系统的方法,该图形处理系统包括顶点着色阶段,该顶点着色阶段处理顶点着色阶段的输入属性值以便产生顶点着色阶段的输出属性值以供该图形处理系统的后续阶段使用,该方法包括:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联;以及
当图形处理阶段要加载和/或存储顶点着色阶段属性的值时,其首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
依照本发明的第四方面,提供了一种图形处理系统,该系统包括:
多个图形处理阶段,其包括顶点着色阶段以及顶点着色阶段后续的并且将处理顶点着色阶段的输出的至少一个处理阶段;其中:
顶点着色阶段处理顶点着色阶段的输入属性的值以便产生顶点着色阶段的输出属性的值以供图形处理系统的后续阶段使用;并且
图形处理系统被配置成将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联;并且
图形处理阶段中的一个或多个被配置成当其要加载和/或存储顶点着色阶段属性的值时,首先读取与该属性关联的任何元信息并且然后在其加载或存储该属性的值时使用该元信息。
本领域技术人员应当理解的是,本发明的这些方面可以且优选地的确包括本文适当描述的本发明的优选的和可选的特征中的任何一个或多个或者全部。
因此,例如元信息优选地处于如上面所讨论的属性描述符的形式,其中顶点着色器属性中的至少一些和/或全部优选地具有对应的属性描述符。类似地,元信息(属性描述符)优选地由图形处理器驱动器产生,并且优选地在绘图调用时间产生。元信息优选地包括指示如何和/或从何处或者至何处存储和/或加载属性值的信息。
因此,元信息优选地包括或者指示允许确定存储(或者要存储)属性值的存储地址的信息。因此,它优选地允许在加载(或存储)要确定的属性的值时使用索引,这优选地通过以下方式实现:在加载(或存储)属性值时指示用来导出要使用的索引的过程。最优选地,它也指示或者作为代替指示要在加载(或存储)属性值时使用的基本存储地址。
在一个特别优选的实施例中,也使用或者作为代替使用元信息以控制将属性值写到存储器的次数。优选地,它指示可以用来优选地以上面讨论的方式测试是否应当将属性值存储到存储器中的信息。
如上面所讨论的,在一个特别优选的实施例中,元信息可以并且优选地的确指示关于存储器中属性值的布局的另外的信息。这可以例如且优选地的确包括存储器中属性值的间隔(“步幅”)、所讨论的属性距一个或者所述基本存储地址的相对位置(“偏移”)等等的指示。
如上面所讨论的,图形处理系统的一个或多个阶段优选地被配置成在它要处理顶点着色阶段的属性时读取与该属性关联的元信息,并且如果该元信息这样指示,那么依照该元信息,优选地相对于该元信息指示的任何基本存储地址导出要用于检索或存储属性值的索引。
最优选地,图形系统的阶段执行指示要处理的属性的加载属性指令,并且响应于该加载属性指令,然后读取与所讨论的属性关联的元信息并且根据该元信息确定是否以及如何导出要用来检索或存储所需的属性值的索引和/或要在检索或存储所需的属性值时使用的基本存储地址。
优选地,至少在要加载顶点着色器属性值时使用元信息。其优选地在既加载又存储顶点着色器属性值时使用(并且因而优选地,顶点着色器输入和顶点着色器输出属性二者可以具有与其关联的元信息)。
类似地,优选地至少一个后续图形处理阶段(优选地片段着色器)使用元信息。最优选地,顶点着色器也使用它。
本发明也扩展到元数据的生成。
因此,依照本发明的第五方面,提供了一种操作图形处理系统的方法,该图形处理系统包括顶点着色阶段,该顶点着色阶段处理顶点着色阶段的输入属性值以便产生顶点着色阶段的输出属性值以供该图形处理系统的后续阶段使用,该方法包括:
将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联。
依照本发明的第六方面,提供了一种图形处理系统,该系统包括:
多个图形处理阶段,其包括顶点着色阶段以及顶点着色阶段后续的并且将处理顶点着色阶段的输出的至少一个处理阶段;其中:
顶点着色阶段处理顶点着色阶段的输入属性的值以便产生顶点着色阶段的输出属性的值以供图形处理系统的后续阶段使用;并且
图形处理系统被配置成将要在加载和/或存储所讨论的属性的值时使用的元信息与顶点着色阶段的一个或多个属性关联。
本领域技术人员应当理解的是,本发明的这些方面可以且优选地的确包括本文适当描述的本发明的优选的和可选的特征中的任何一个或多个或者全部。因此,元信息优选地采取上述形式,并且优选地由用于图形处理系统的图形处理器的驱动器优选地在绘图调用时间产生。
本领域技术人员应当理解的是,诸如片段着色器之类的后续图形处理阶段可以并且将针对它们的正常处理且以正常的方式(除本发明引入的变化之外)使用属性值(顶点着色器输入和/或顶点着色器输出属性值)。例如,在片段着色器的情况下,片段着色器将使用属性值再现一个或多个图元以便产生例如代表用于显示的帧的再现输出值集合。然后,这些输出值可以导出到外部存储器以供存储和使用,例如导出到显示器的帧缓冲器。
因此,本发明优选地进一步包括适当地使用顶点着色器输出属性值或者对应的顶点着色器输入属性值再现属性值与之相关的一个或多个图元以便产生代表图形处理系统的希望的输出(例如用于显示的帧)的输出值集合。再现过程可以包括本领域中已知的例如对属性值进行混合、片段着色、纹理化等等。
类似地,本发明优选地进一步包括一个或多个后续图形处理阶段,其适当地使用顶点着色器输出属性值或者对应的顶点着色器输入属性值以便产生用于从图形处理系统输出的输出数据值集合。
在一个优选的实施例中,后续图形处理阶段包括片段着色器。在这种情况下,本发明优选地进一步包括图形处理系统的片段着色器,其适当地使用顶点着色器输出属性值或者对应的顶点着色器输入属性值以便产生片段着色的输出数据值集合,其用于例如以及优选地对由图形处理系统产生的诸如要显示的帧之类的输出的位置采样。
然后,输出的例如片段着色的数据值优选地导出到外部(例如主要)存储器以供存储和使用,例如导出到显示器的帧缓冲器。如本领域中已知的,例如根据图形处理系统的性质和配置,所述数据值可以在导出到主要存储器之前在图形处理器本地临时地存储到例如一个或多个图块缓冲器中。
本发明可以用于可以使用图形处理流水线以产生的所有形式的输出,例如用于显示的帧、再现至纹理输出等等。
应当理解的是,由于图形处理流水线产生(再现)的输出典型地由多个图元(以及在基于图块的系统中,由图块)构成,因而在实践中对于构成输出的每个图元(和图块)重复本发明,使得最终对于需要的输出的每个采样点产生适当的再现的片段数据集合。
在一个特别优选的实施例中,在产生并且输出例如写到用于显示设备的帧缓冲器的再现的片段数据的单个图形处理平台上执行本发明的各种功能。
本发明可以在任何适当的系统中实现,所述系统例如适当地配置的基于微处理器的系统。在一个优选的实施例中,本发明在基于计算机和/或微处理器的系统中实现。
本发明的各种功能可以以任何希望的且适当的方式执行。例如,本发明的功能可以根据需要在硬件或软件中实现。因此,例如本发明的各种功能元素和“装置”可以包括可操作来执行各种功能等等的一个或多个适当的处理器、一个或多个控制器、功能单元、电路、处理逻辑、微处理器布置等等,例如适当的专用硬件元件和/或可被编程为以希望的方式操作的可编程硬件元件。
因此,顶点着色器、片段着色器和任何其他图形处理阶段可以根据需要且以任何适当的方式实现,并且可以分别执行任何希望的且适当的顶点着色或者片段着色等功能。
类似地,可以以任何适当且希望的方式定义和存储各种输入和输出属性值、元信息、属性描述符等等。
在这里,也应当指出的是,本领域技术人员将会理解,可以在给定处理器上并行地复制和/或执行本发明的各种功能等。因此,例如如上面所讨论的,顶点着色阶段可以包括并行地操作的多个单独的顶点着色器。
本发明适用于任何适当形式或配置的图形处理器和再现器,例如以及优选地具有“流水线”再现布置的处理器。其特别地适用于基于图块的图形处理器和图形处理系统。
因此,本发明扩展到包括这里描述的本发明的任何一个或多个方面的装置的或者依照本发明的任何一个或多个方面的方法操作的图形处理器和图形处理平台。受执行上面讨论的特定功能所需的任何硬件的影响,这样的图形处理器可以在别的情况下包括图形处理器所包括的通常的功能单元等等中的任何一个或多个或者全部。
本领域技术人员也应当理解的是,所描述的本发明的所有方面和实施例可以适当地包括这里描述的优选的和可选的特征中的任何一个或多个或者全部。
依照本发明的方法可以至少部分地使用软件(例如计算机程序)而实现。因此,可以看出,当从另外的方面来看时,本发明提供了:计算机软件,其特别适于在安装到数据处理装置上时执行这里描述的方法;计算机程序元件,其包括用于当该程序元件运行在数据处理装置上时执行这里描述的方法的计算机软件代码部分;以及计算机程序,其包括当程序运行在数据处理系统上时适于执行这里描述的一种或多种方法的所有步骤的代码装置。数据处理系统可以是微处理器、可编程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的除法于是计算为:
Figure 950493DEST_PATH_IMAGE002
(这种形式的除数值的使用允许使用比完全一般的除法更简单的除法电路。)
ii)模属性,其在索引属性阵列之前执行展开的索引对属性描述符中给定的值取模。模值(即填充的实例大小Spi)具有以下形式
Spi = (2p+1) * 2r,其中p为0、1、2、3或4
(这种形式的模值的使用允许使用比完全一般的模更简单的模电路。)。
如上面所讨论的,属性是否为除数属性(在该情况下,应当在索引属性阵列之前将展开的索引除以属性描述符中给定的值)或者模属性(在该情况下,应当在索引属性阵列之前执行提供的展开的索引值模属性描述符中给定的值)的指示与相关的除数或模值(即在这种情况下为填充的实例大小)一起包含在用于所讨论的属性的相关属性描述符中。
在用于实例化的API机制允许每实例输入针对特定属性在实例索引上具有另外的除数值的情况下,那么该另外的除数可以简单地乘上用于那些属性的除数值。在这种情况下,属性描述符应当指示要使用的适当除数值。
响应于这样的加载或存储属性指令,着色器将首先以指令指示的属性索引所指示的索引从指令中的阵列选择器指示的阵列(初级的或次级的)中读取属性描述符。
然后,它将确定从那里读取要使用的属性值(对于加载指令)或者在那里存储产生的属性值(对于存储指令)的存储位置(地址)。这通过使用指令指示的展开的索引以及读取属性描述符中的缓冲地址、属性阵列类型、偏移和步幅以及(如果相关的话)除数或模值来完成。
然后,要加载的属性值(数据)的存储地址将导出为:
属性值的地址=(缓冲地址)+ 偏移+(步幅x索引)。
如上面所讨论的,上述方程中的缓冲地址、步幅和偏移在相关属性描述符中给出。
如上面所讨论的,索引适当地为展开的索引、顶点索引或实例索引,并且将依照属性描述符中指示的属性阵列类型来确定。对于线性属性而言,要使用的索引将是展开的索引,但是对于除数属性而言,上面的除法运算将用来从展开的索引中导出实例索引,并且对于模属性而言,上面的取模运算将用来从展开的索引中导出顶点索引。
存储属性指令以相同的方式操作,但是着色器操作来将数据存储到确定的地址处。
因此,当例如顶点着色器20执行适当的加载属性指令以便处理顶点着色器输入属性值,它标识从加载属性指令中的阵列选择器字段中读取的属性描述符阵列(其在这种情况下将指示初级属性描述符阵列)。接下来,它使用加载属性指令中的属性索引以便从初级属性描述符阵列25中读取对应的初级属性描述符。然后,它使用初级属性描述符中的相关信息以及展开的索引以便检索要处理的适当的顶点着色器输入(初级)属性值。
(如上面所讨论的,初级属性阵列中的输入(初级)属性值将由顶点着色器20通过使用顶点索引或实例索引而访问。实例索引用来检索在每实例基础上定义的输入(初级)属性值,并且顶点索引用来检索在每顶点基础上定义的输入(初级)属性值。)。
类似地,除了下文中将更加详细地讨论的特定情况之外,一旦顶点着色器20已经处理了输入(初级)属性值,那么它将把其输出(即产生的次级属性值)存储到由对应属性存储指令(以及次级属性描述符阵列27内的相关次级属性描述符中的信息)指示的次级属性阵列28中。
在当前实施例中,修改图形处理系统的基本编译操作以便考虑顶点着色操作的两种特殊情况。
首先,顶点着色器编译器被配置成当其编译顶点着色器代码时对于每个顶点着色器输出属性(次级属性)确定该输出属性是否为来自顶点着色器输入属性的直接拷贝(即标识其中顶点着色器输出属性的值将是输入属性的值的直接拷贝的“贯通(pass through)”情形)。例如,如果顶点着色器输入属性(初级属性)是纹理坐标,则情况可能就是这样。
当确定情况如此时,顶点着色器编译器省略执行拷贝操作的代码并且作为代替在与顶点着色器代码关联的元信息中记录特定顶点着色器输出(次级)属性是特定顶点着色器输入(初级)属性的直接拷贝以及它是哪个顶点着色器输入(初级)属性的拷贝。
在当前实施例中,配置和构造用于标识其中顶点着色器输出属性值将是顶点着色器输入属性值的拷贝的情形的机制以便给出保守的结果,即“选择稳妥的做法”。因此,在当前实施例中,该布置使得识别其中顶点着色器输出属性值将是顶点着色器输入属性值的拷贝的情形时的任何错误应当使得系统将无法检测,其中情况就是如此,而不是确定“贯通”情形存在,其中事实上它不存在。
因此,以其中标识了“贯通”属性或情形(即其中确定了顶点着色器输出属性值将是顶点着色器输入属性值的拷贝)的特定方式引用当前实施例的操作涉及其中系统(例如编译器)标识了“贯通”情形的那些情形。
第二,顶点着色器编译器也在元信息中记录顶点着色器的每个输出属性(每个次级属性)依赖于哪些输入(初级)属性。
如上面所讨论的,在当前实施例中,配置和构造用于标识顶点着色器输出属性所依赖的输入属性的机制以便给出保守的结果,即“选择稳妥的做法”。因此,该布置使得标识顶点着色器输出属性所依赖的输入属性时的任何错误应当使得系统将推断(确定)顶点着色器输出属性依赖于某个它事实上并不依赖的输入属性(即给出确定的作为实际依赖性的超集的输入属性依赖性集合),而不是错失输出属性实际上确实依赖的输出属性的依赖性。
在这里,也应当指出的是,因此再一次地,以其中将顶点着色器输出属性标识为仅仅依赖于每顶点或者仅仅依赖于每实例定义的顶点着色器输入属性的特定方式引用本发明的操作涉及其中系统标识了这种情形(这种顶点着色器输出属性)的那些情形。类似地,给定顶点着色器输出属性对于给定顶点着色器输入属性的依赖性的引用涉及由本发明的系统(例如编译器)标识的那些依赖性,除非上下文另有要求。
第三,着色器链接器操作被配置成使得当其看到与顶点着色器代码关联的指示特定顶点着色器输出(次级)属性是特定顶点着色器输入(初级)属性的直接拷贝(即存在“贯通”属性)的元信息时,其于是修改片段着色器代码以便使得光栅器/片段着色器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的方法的计算机软件代码部分。
CN201210052924.7A 2011-03-03 2012-03-02 图形处理系统及操作图形处理系统的方法和设备 Active CN102708537B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB1103699.3A GB201103699D0 (en) 2011-03-03 2011-03-03 Graphic processing
GB1103699.3 2011-03-03

Publications (2)

Publication Number Publication Date
CN102708537A true CN102708537A (zh) 2012-10-03
CN102708537B CN102708537B (zh) 2016-09-28

Family

ID=43923197

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210052924.7A Active CN102708537B (zh) 2011-03-03 2012-03-02 图形处理系统及操作图形处理系统的方法和设备

Country Status (4)

Country Link
US (2) US8976177B2 (zh)
JP (1) JP6008515B2 (zh)
CN (1) CN102708537B (zh)
GB (3) GB201103699D0 (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105321199A (zh) * 2014-07-03 2016-02-10 Arm有限公司 图形处理
CN105511996A (zh) * 2015-12-11 2016-04-20 中国航空工业集团公司西安航空计算技术研究所 一种图形处理器内嵌可编程染色器验证平台
CN105556565A (zh) * 2013-06-10 2016-05-04 索尼电脑娱乐公司 片段着色器执行顶点着色器计算
CN108363569A (zh) * 2018-03-07 2018-08-03 腾讯科技(深圳)有限公司 应用中的图像帧生成方法、装置、设备及存储介质
US10740867B2 (en) 2013-06-10 2020-08-11 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
CN108257075B (zh) * 2017-12-06 2021-07-16 中国航空工业集团公司西安航空计算技术研究所 一种顶点数组命令的解引用与组装方法

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201103698D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphics processing
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing
US10559123B2 (en) * 2012-04-04 2020-02-11 Qualcomm Incorporated Patched shading in graphics processing
US8928679B2 (en) * 2012-09-14 2015-01-06 Advanced Micro Devices, Inc. Work distribution for higher primitive rates
US9214008B2 (en) * 2013-01-18 2015-12-15 Nvidia Corporation Shader program attribute storage
US9836878B2 (en) * 2013-03-15 2017-12-05 Nvidia Corporation System, method, and computer program product for processing primitive specific attributes generated by a fast geometry shader
US9269179B2 (en) * 2013-03-15 2016-02-23 Nvidia Corporation System, method, and computer program product for generating primitive specific attributes
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US10134102B2 (en) 2013-06-10 2018-11-20 Sony Interactive Entertainment Inc. Graphics processing hardware for using compute shaders as front end for vertex shaders
US10176621B2 (en) 2013-06-10 2019-01-08 Sony Interactive Entertainment Inc. Using compute shaders as front end for vertex shaders
US10935788B2 (en) * 2014-01-24 2021-03-02 Nvidia Corporation Hybrid virtual 3D rendering approach to stereovision
US20150281679A1 (en) * 2014-03-28 2015-10-01 Qualcomm Incorporated Pixel data generation for autostereoscopy images
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
US9773294B2 (en) * 2014-07-03 2017-09-26 Mediatek Inc. Graphics processing system for determining whether to store varying variables into varying buffer based at least partly on primitive size and related graphics processing method thereof
KR20160074154A (ko) 2014-12-18 2016-06-28 삼성전자주식회사 컴파일러
GB2536211B (en) * 2015-03-04 2021-06-16 Advanced Risc Mach Ltd An apparatus and method for executing a plurality of threads
US9804666B2 (en) 2015-05-26 2017-10-31 Samsung Electronics Co., Ltd. Warp clustering
US10403025B2 (en) 2015-06-04 2019-09-03 Samsung Electronics Co., Ltd. Automated graphics and compute tile interleave
US10089775B2 (en) 2015-06-04 2018-10-02 Samsung Electronics Co., Ltd. Automated graphics and compute tile interleave
US10269166B2 (en) * 2016-02-16 2019-04-23 Nvidia Corporation Method and a production renderer for accelerating image rendering
US10062139B2 (en) * 2016-07-25 2018-08-28 Qualcomm Incorporated Vertex shaders for binning based graphics processing
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US10417815B2 (en) * 2017-01-27 2019-09-17 Advanced Micro Devices, Inc. Out of order pixel shader exports
US10186069B2 (en) * 2017-02-15 2019-01-22 Arm Limited Methods and systems for grouping and executing initial pilot shader programs
US10891709B2 (en) * 2019-03-27 2021-01-12 Qualcomm Incorporated Methods and apparatus for GPU attribute storage
US10891708B1 (en) 2019-11-25 2021-01-12 Arm Limited Shader program execution in graphics processing

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6624811B1 (en) * 2000-08-31 2003-09-23 Nvidia Corporation System, method and article of manufacture for decomposing surfaces using guard curves and reversed stitching
US20040135787A1 (en) * 2000-11-28 2004-07-15 Nintendo Co., Ltd. Graphics system interface
CN1529288A (zh) * 2003-10-10 2004-09-15 威盛电子股份有限公司 计算三维图形中各顶点的属性的方法
US20100141659A1 (en) * 2008-12-09 2010-06-10 Qualcomm Incorporated Discarding of vertex points during two-dimensional graphics rendering using three-dimensional graphics hardware

Family Cites Families (30)

* Cited by examiner, † Cited by third party
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
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
KR100882842B1 (ko) 2007-02-26 2009-02-17 삼성전자주식회사 피포를 포스트 버텍스 캐쉬처럼 사용하기 위한 기하학 처리장치와 그 방법
US8355028B2 (en) 2007-07-30 2013-01-15 Qualcomm Incorporated Scheme for varying packing and linking in graphics systems
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
US8436854B2 (en) 2009-05-29 2013-05-07 Qualcomm Incorporated Graphics processing unit with deferred vertex shading
US9245371B2 (en) 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
JP5835879B2 (ja) * 2009-09-25 2015-12-24 アーム・リミテッド メモリからのデータの配列の読み込みを制御する方法および装置
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
US8669990B2 (en) 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
JP5465145B2 (ja) 2010-10-05 2014-04-09 キヤノン株式会社 画像処理装置、画像処理方法、および画像記録装置
GB201103698D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphics processing
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6624811B1 (en) * 2000-08-31 2003-09-23 Nvidia Corporation System, method and article of manufacture for decomposing surfaces using guard curves and reversed stitching
US20040135787A1 (en) * 2000-11-28 2004-07-15 Nintendo Co., Ltd. Graphics system interface
CN1529288A (zh) * 2003-10-10 2004-09-15 威盛电子股份有限公司 计算三维图形中各顶点的属性的方法
US20100141659A1 (en) * 2008-12-09 2010-06-10 Qualcomm Incorporated Discarding of vertex points during two-dimensional graphics rendering using three-dimensional graphics hardware

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105556565A (zh) * 2013-06-10 2016-05-04 索尼电脑娱乐公司 片段着色器执行顶点着色器计算
CN105556565B (zh) * 2013-06-10 2019-06-25 索尼电脑娱乐公司 片段着色器执行顶点着色器计算
US10733691B2 (en) 2013-06-10 2020-08-04 Sony Interactive Entertainment Inc. Fragment shaders perform vertex shader computations
US10740867B2 (en) 2013-06-10 2020-08-11 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
US11232534B2 (en) 2013-06-10 2022-01-25 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
CN105321199A (zh) * 2014-07-03 2016-02-10 Arm有限公司 图形处理
CN105321199B (zh) * 2014-07-03 2020-10-23 Arm有限公司 图形处理流水线及其操作方法与介质
CN105511996A (zh) * 2015-12-11 2016-04-20 中国航空工业集团公司西安航空计算技术研究所 一种图形处理器内嵌可编程染色器验证平台
CN105511996B (zh) * 2015-12-11 2018-08-21 中国航空工业集团公司西安航空计算技术研究所 一种图形处理器内嵌可编程染色器验证平台
CN108257075B (zh) * 2017-12-06 2021-07-16 中国航空工业集团公司西安航空计算技术研究所 一种顶点数组命令的解引用与组装方法
CN108363569A (zh) * 2018-03-07 2018-08-03 腾讯科技(深圳)有限公司 应用中的图像帧生成方法、装置、设备及存储介质
CN108363569B (zh) * 2018-03-07 2021-06-11 腾讯科技(深圳)有限公司 应用中的图像帧生成方法、装置、设备及存储介质

Also Published As

Publication number Publication date
US20150193969A1 (en) 2015-07-09
US20120223947A1 (en) 2012-09-06
GB2504587A (en) 2014-02-05
CN102708537B (zh) 2016-09-28
GB201203674D0 (en) 2012-04-18
GB2504587B (en) 2015-03-11
JP6008515B2 (ja) 2016-10-19
US9865084B2 (en) 2018-01-09
GB201309683D0 (en) 2013-07-17
GB2488667A (en) 2012-09-05
US8976177B2 (en) 2015-03-10
JP2012185821A (ja) 2012-09-27
GB2488667B (en) 2015-03-11
GB201103699D0 (en) 2011-04-20

Similar Documents

Publication Publication Date Title
CN102708537A (zh) 图形处理
CN102708533A (zh) 图形处理
Kessenich et al. OpenGL Programming Guide: The official guide to learning OpenGL, version 4.5 with SPIR-V
US6995765B2 (en) System, method, and computer program product for optimization of a scene graph
CN108701366B (zh) 用于图形处理中的阴影光线的树遍历的开始节点确定的方法、设备及可读存储媒体
US20040003370A1 (en) Systems and methods for implementing shader-driven compilation of rendering assets
CN101794456A (zh) 用于处理图形的方法和装置
CN103886547A (zh) 用于存储共享顶点的技术
EP3420537B1 (en) Single pass bounding volume hierarchy rasterization
CN104834630A (zh) 运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备
CN103617220A (zh) 一种移动终端3d模型实现方法和装置
CN104823220A (zh) 用于图形处理的图形存储器加载掩模
WO2016040716A1 (en) Render-time linking of shaders
KR20230010672A (ko) 데이터 압축의 방법 및 장치
CN115220966A (zh) 使用多个gpu的图块区域保护
EP3743806B1 (en) Large lookup tables for an image processor
US10417990B2 (en) Efficient binding of resource groups in a graphics application programming interface
FI117579B (fi) Menetelmä, laite ja tietokoneohjelma tietokoneavusteisen polygonimallin prosessointiin
CN106506693B (zh) 从提供云服务的服务器集群中删除服务器的方法和装置
Roddy et al. SODA: an Open-Source Library for Visualizing Biological Sequence Annotation
Jackson et al. Collision Detection: Creating SVG Polygons for the Game Actors and Writing Code to Detect Collision

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant