CN110363856A - 混合硬件 - Google Patents

混合硬件 Download PDF

Info

Publication number
CN110363856A
CN110363856A CN201910267986.1A CN201910267986A CN110363856A CN 110363856 A CN110363856 A CN 110363856A CN 201910267986 A CN201910267986 A CN 201910267986A CN 110363856 A CN110363856 A CN 110363856A
Authority
CN
China
Prior art keywords
vertex
coordinate
input
domain
cache
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
CN201910267986.1A
Other languages
English (en)
Other versions
CN110363856B (zh
Inventor
彼得·马尔科姆·莱西
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies 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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN110363856A publication Critical patent/CN110363856A/zh
Application granted granted Critical
Publication of CN110363856B publication Critical patent/CN110363856B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/503Blending, e.g. for anti-aliasing
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

本公开涉及混合硬件。本文描述了混合器硬件的许多不同实现方式。混合器硬件执行域着色和混合,并且虽然一些顶点可能不需要混合,但是所有顶点都需要域着色。本文描述的混合器硬件包括高速缓存和/或内容可寻址存储器,并且这些数据结构用于减少重复的域着色操作。

Description

混合硬件
技术领域
本申请涉及混合硬件。
背景
曲面细分(tessellation)是计算机图形学中使用的技术,它将一组表示场景中对象的曲面(surfaces)分成许多更小且更简单的片(称为图元),通常是三角形,其更适合渲染。得到的曲面细分后的曲面通常是原始曲面的近似,但是可以通过增加生成的图元的数量来提高这种近似的精度,这反过来通常导致图元更小。曲面细分/细分(sub-division)的数量通常由细节层次(LOD)确定。因此,在需要更高的细节层次的地方(例如,因为对象更靠近观察者和/或对象具有更复杂的形状),通常使用增加数量的图元。然而,使用更大数量的三角形增加了渲染场景所需的处理工作量。
通常在形状为正方形或三角形(即,四边形或三角形)的片(patch)上执行对三角形图元的细分,并且该片可以被弯曲以拟合(fit)成它们所代表的对象的曲面(且因此可以被称为“曲面片(surface patches)”)和/或应用位移(displacement)映射。然而,不是在弯曲片上执行细分,而是在片的域中执行细分(例如,就像片是平面的,而不是由例如多项式方程定义的),片的域可以用(u,v)参数来定义,并被称为“参数空间”。这意味着曲面细分过程独立于最终曲面中存在的任何曲率。
曲面细分可以被提前执行(例如,以不同的细节层次和/或从不同的视点来计算场景的多个不同视图),或者可以被动态执行(例如,以提供连续的或依赖于视图的细节层次)。利用一些现有的曲面细分方法,用户可以体验不期望的视觉假象(artefacts),其中,尽管所请求的细节层次被平滑地改变,但是最终的曲面细分以不连续的方式改变。
下面描述的实施例仅以示例的方式被提供,且不限定解决用于执行作为曲面细分的一部分(或者因曲面细分而起)的混合的已知方法和装置的任何或所有缺点的实现方式。
概述
提供本概述来以简化的形式引入在以下详细描述中将进一步描述的概念的选择。本概述不旨在标识出要求保护的主题的关键特征或必要特征,亦不旨在用于限定要求保护的主题的范围。
本文描述了混合器硬件的许多不同实现方式。混合器硬件执行域着色和混合(其是域着色的后处理),并且虽然一些顶点可能不需要混合,但是所有顶点都需要域着色。本文描述的混合器硬件可以包括高速缓存和/或内容可寻址存储器,并且这些数据结构被用于减少重复的域着色操作。
第一方面提供了一种GPU流水线,其包括曲面细分单元和后曲面细分混合器硬件,其中,混合器硬件包括:输入端,其用于接收由曲面细分单元输出的域空间顶点,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;高速缓存,其被布置成存储数据对,每个数据对包括UV坐标和由域着色器根据UV坐标生成的世界空间顶点;以及混合单元,其被布置成接收输入顶点的混合权重、对于输入顶点及其相邻顶点的由域着色器生成的或从高速缓存访问的世界空间顶点,并且使用混合权重生成对于输入顶点的单个世界空间顶点,其中高速缓存被布置成,在针对UV坐标的高速缓存条目(entry)处高速缓存命中(hit)的情况下从高速缓存条目输出世界空间顶点,并且在针对UV坐标的高速缓存未命中(miss)的情况下将UV坐标输出到域着色器;并且其中高速缓存被布置成接收并存储由域着色器生成的对于输入顶点及其邻点(neighbours)的世界空间顶点。
第二方面提供了一种执行后曲面细分混合的方法,包括:接收由曲面细分单元输出的域空间顶点,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;在高速缓存中存储数据对,每个数据对包括UV坐标和由域着色器根据UV坐标生成的世界空间顶点;响应于高速缓存中条目处的高速缓存命中,从高速缓存条目输出世界空间顶点;响应于高速缓存中条目处的高速缓存未命中,将UV坐标输出到域着色器,并在域着色器中根据UV坐标生成世界空间顶点;并且一旦对于顶点和相邻顶点的世界空间顶点已经从高速缓存或域着色器被输出,则使用混合权重在混合单元中生成对于输入顶点的单个世界空间顶点。
方法还可以包括:根据域空间顶点生成相邻顶点的UV坐标。
方法还可以包括:确定输入顶点的混合权重是否等于一;并且响应于确定输入顶点的混合权重等于一,绕过(bypass)混合单元并且在域着色器中根据输入顶点的UV坐标生成对于输入顶点的世界空间坐标。方法还可以包括:响应于确定输入顶点的混合权重等于一,绕过高速缓存。
方法还可以包括:在高速缓存处接收由域着色器生成的对于输入顶点及其邻点的世界空间顶点。方法还可以包括:当高速缓存中的所有条目都已满时,响应于从域着色器接收世界空间顶点,从高速缓存中的选择的条目中移除(evict)数据对,并将接收到的世界空间顶点存储在选择的条目中。方法还可以包括:基于高速缓存条目的年龄选择用于移除的高速缓存条目;或者基于对应于接收到的世界空间顶点的UV坐标和数据条目中的UV坐标的在UV空间中的距离来选择用于移除的高速缓存条目。
第三方面提供了一种GPU流水线,其包括曲面细分单元和后曲面细分混合器硬件,其中混合器硬件包括:输入端,其用于接收由曲面细分单元输出的域空间顶点,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;内容可寻址存储器,其被布置成存储数据元组(tuples),每个数据元组包括UV坐标、片引用(patch reference)和索引;计数器,其被布置成当数据元组从内容可寻址存储器中被移除时递增;混合单元,其被布置成接收输入顶点的混合权重、由域着色器在单个任务中生成的对于输入顶点及其相邻顶点的世界空间顶点,并且生成对于输入顶点的单个世界空间顶点;任务管理器;输出索引缓冲器;以及输出顶点缓冲器,其中,内容可寻址存储器被布置成在接收到输入顶点时确定输入顶点的UV坐标是否被存储在内容可寻址存储器中,并且响应于UV坐标被存储在内容可寻址存储器中的数据元组中将来自数据元组的索引输出到输出索引缓冲器,并且响应于UV坐标没有被存储在内容可寻址存储器中从内容可寻址存储器中移除数据元组,将UV坐标添加到索引的值等于计数器的值的新数据元组,并将索引输出到输出索引缓冲器,并将输入顶点输出到任务管理器,并且其中任务管理器被布置成从内容可寻址存储器接收输入顶点,以将对于输入顶点和输入顶点的相邻顶点的UV坐标打包到同一任务内的作业(jobs)中,并响应于确定任务已满将任务中的所有作业输出到域着色器。
第四方面提供了一种执行后曲面细分混合的方法,包括:接收由曲面细分单元输出的域空间顶点,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;将数据元组存储在内容可寻址存储器中,每个数据元组包括UV坐标、片引用和索引;在接收到输入顶点时,确定输入顶点的UV坐标是否被存储在内容可寻址存储器中;响应于UV坐标被存储在内容可寻址存储器中的数据元组中,将来自数据元组的索引输出到输出索引缓冲器;响应于UV坐标未被存储在内容可寻址存储器中:从内容可寻址存储器中移除数据元组,将UV坐标添加到索引的值等于计数器的值的新数据元组,将索引输出到输出索引缓冲器;由任务管理器将对于输入顶点和输入顶点的相邻顶点的UV坐标打包到同一任务内的作业中;并且响应于确定任务已满,将任务中的所有作业输出到域着色器和混合单元。
方法还可以包括,在混合单元中:接收输入顶点的混合权重、由域着色器在单个任务中生成的对于输入顶点及其相邻顶点的世界空间顶点,并且生成对于输入顶点的单个世界空间顶点。生成对于输入顶点的单个世界空间顶点可以包括:使用固定权重生成所有输入相邻世界空间顶点的线性平均值;以及使用混合权重对输入顶点本身的世界空间顶点和由线性平均硬件逻辑块输出的世界空间顶点来执行线性插值,以生成对于输入顶点的单个世界空间顶点。
由任务管理器将对于输入顶点和输入顶点的相邻顶点的UV坐标打包到同一任务内的作业中可以包括:将对于输入顶点的UV坐标放置到任务前端处的作业中;将对于相邻顶点的UV坐标放置到任务后端处的作业中;并且响应于将对于输入顶点的UV坐标放置到任务前端处的作业中,其中UV坐标匹配对于相邻顶点的已经被放置的UV坐标,移除对于相邻顶点的作业。
方法还可以包括:根据域空间顶点生成相邻顶点的UV坐标,并将UV坐标输出到内容可寻址存储器。
方法还可以包括:在被输入到任务管理器之前,将顶点的坐标从定点形式转换成浮点形式。
方法还可以包括:通过使用被存储在输入索引缓冲器中的索引来重新映射由内容可寻址存储器数据输出并去往输出索引缓冲器的数据,以引用由内容可寻址存储器生成的索引。
可以在集成电路上的硬件中体现GPU流水线或混合器硬件。可以提供在集成电路制造系统处制造GPU流水线或混合器硬件的方法。可以提供集成电路定义数据集,其在集成电路制造系统中进行处理时,将该系统配置为制造GPU流水线或混合器硬件。可以提供非暂时性计算机可读存储介质,在该非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,当其被处理时使布局处理系统生成在集成电路制造系统中使用的电路布局描述,以便制造GPU流水线或混合器硬件。
可以提供集成电路制造系统,其包括:非暂时性计算机可读存储介质,其上储存有描述GPU流水线或混合器硬件的计算机可读集成电路描述;布局处理系统,其被配置为对集成电路描述进行处理,以便生成体现GPU流水线或混合器硬件的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造GPU流水线或混合器硬件。
可以提供用于执行本文中所描述的任何方法的计算机程序代码。可提供其上储存有计算机可读指令的非暂时性计算机可读存储介质,该计算机可读指令在计算机系统处被执行时使计算机系统执行本文中所描述的任何方法。
如对技术人员将明显的是,以上特征可酌情进行组合,并且可与本文中所描述的示例的任意方面组合。
附图说明
现在将参照附图对示例进行详细描述,在附图中:
图1示出了可以在GPU内的硬件中实现的示例图形处理单元(GPU)流水线的示意图;
图2更详细地示出了第一示例混合器硬件的示意图;
图3是示出图2的混合器硬件的操作的流程图;
图4更详细地示出了第二示例混合器硬件的示意图;
图5是示出图4或图7的混合器硬件的操作的流程图;
图6是示出图4或图7的混合器硬件中的任务管理器的操作的流程图;
图7更详细地示出了第三示例混合器硬件的示意图;
图8是示出图4或图7的混合器硬件中的任务的处理的示意图;
图9是示出根据图6所示方法将顶点打包到任务中的图表表示;
图10示出了GPU流水线在其中被实现的计算机系统;
图11示出了用于生成体现GPU流水线的集成电路的集成电路制造系统;
图12是示出控制图元生成的顺序的示例曲面细分方法的流程图;以及
图13A-图13E示出了说明图12的方法的示意图。
附图图示了不同的示例。技术人员将认识到,图中所示出的元件边界(例如,框、框的组、或其他形状)表示边界的一个示例。在一些示例中可能的是,一个元件可以被设计为多个元件,或者多个元件可被设计为一个元件。在适当情况下,共同的参考数字在整个附图中用于指示类似的特征。
详细描述
以下的描述是通过示例的方式来呈现的,以使本领域技术人员能够制作并使用本发明。本发明不限于本文中所描述的实施例,并且对所公开的实施例的各种修改对于本领域技术人员将是明显的。
现在将仅通过示例来对实施例进行描述。
如上所述,曲面细分涉及选择性地将形状通常为正方形或三角形的片细分成更小的三角形片。通常基于一个或更多个曲面细分因子(TF),例如通过将一个或更多个TF彼此进行比较和/或与阈值进行比较,做出关于片是否应当被细分的确定。在一些示例中,使用边(edge)曲面细分因子,其中片的每条边都具有边曲面细分因子,并且边曲面细分因子定义了特定边(并由此的边是其一部分的片)应当被细分多少次。在其他示例中(例如在GB2533443和GB2533444中描述的方法中),使用顶点曲面细分因子,其中片的每个顶点(或角)具有顶点曲面细分因子。
术语“曲面片”在本文中被用来指通常是有限的N维曲面(或者在等值线(isoline)的情况下是N维曲线段),其是将参数映射函数应用于有界2D域的结果,曲面片可以是四边形、三角形或任何多边形(或者在等值线的情况下是1D线段)。所得的曲面或等值线可以被认为是N维的,因为它不仅可以包括对于笛卡尔(Cartesian)(或均匀)空间定位的3(或4)维,还可以包括其他参数,例如纹理坐标。如上所述,曲面片可以被弯曲以拟合它们所表示的对象的曲面和/或应用位移映射。然而,曲面细分(即片的细分)不是在“世界空间”中执行的(即,其不在弯曲的曲面片上执行),而是在域空间(其也可以被称为参数化空间或参数空间或UV空间)中执行的,其中域中的任何位置都可以由被认为是域空间坐标的两个坐标(u,v)来描述,这意味着曲面细分过程独立于最终曲面中存在的任何曲率。
术语“片”在本文中被用来指界定域的两个、三个、四个或更多个顶点(分别用于等值线、三角形、四边形或多边形)的有序集合。因此,术语“域”是指由片的顶点界定的二维空间。术语“输入片”被用来指被输入到曲面细分单元的片。在曲面细分单元执行预处理阶段的示例中,在将曲面细分算法重复地应用于由预处理阶段形成的片之前,该预处理阶段对输入片进行细分,在预处理阶段中形成的片在本文被称为“初始片”。由初始片的细分形成的片在本文被称为“子片”。术语“图元”在本文被用来指由曲面细分单元输出的片(例如,初始片或子片),因为它不需要进一步的细分。虽然输入片、初始片和子片通常是三角形,并且下面的示例示出了三角形,但是在其他示例中,输入片、初始片和/或子片可以是等值线、四边形或任何形式的多边形。
术语“顶点”通常用于描述位置外加其他属性,其中这些属性根据上下文而不同。例如,来自域着色器的输入控制点和输出顶点包括3D位置外加其他参数,例如法线、切线、纹理等(被称为世界空间顶点),而曲面细分器内的顶点包括域空间坐标和顶点曲面细分因子(被称为曲面细分器顶点)。因此,曲面细分器内的这些顶点与输入控制点或形成最终三角形的所得到的N维顶点不同。术语“域顶点”在本文被用来指来自曲面细分器的每个顶点的输出结构,描述其在域中的状态,并且这是输出到输出顶点缓冲器的结构。在许多示例中,域顶点是UV坐标,并且在其他示例中,它可以另外包括混合权重(BW)以及可选地一个或更多个相邻顶点的UV坐标。特别地,该混合权重(BW)可以是位移因子(DF),并且这些相邻顶点可以是如GB2533443和GB2533444中所述的两个或三个父顶点。顶点的位移因子(DF)然后可以被用作混合硬件中的权重,这降低了曲面细分的连续细节层次中跨帧的伪象的可见性。以下描述中对DF的任何引用仅以示例的方式,并且在其他示例中,DF可以由任何其他形式的BW(例如,可以应用于顶点的位移之外的属性(例如法线、纹理UV、颜色等)的每顶点混合权重)代替。
在以下描述中,图元、片和子片都被描述为三角形形状,在其他示例中,它们可以是等值线或包括多于三条边(例如,四边形或具有多于四条边的多边形)。
本文描述了混合器硬件的许多不同实现方式。混合是对几何流水线的任何几何细分的后处理,包括曲面细分器阶段或几何着色器。通过将生成的顶点的属性与其相邻顶点或其邻接表中给定的顶点的属性进行混合来实现混合。混合可以被用于实现期望的视觉效果,例如以连续的细节层次降低时间伪象的可见性。
在下面描述的大多数示例中,混合器硬件执行域着色和混合,并且虽然一些顶点可能不需要混合,但是所有顶点都需要域着色。然而,应当认识到,由于混合独立于域着色,因此域着色可以可替代地与混合器硬件分离(例如,在混合器硬件外部)。本文描述的混合器硬件试图通过减少重复的域着色操作来降低功耗并增加吞吐量,即,它减少了在同一顶点上执行一次以上域着色的情况。本文描述的混合器硬件可以包括高速缓存和/或内容可寻址存储器(CAM)。
虽然本文参考后曲面细分域着色描述了方法和硬件,但是它们也适用于由域着色器处理的顶点之间存在依赖关系(例如,如下所述的父子关系或其他邻接关系)的其他情况。例如,在细分发生之后是着色操作的其他情况下(例如,在几何着色器或计算着色器中存在细分并且也应用混合的情况下)。本文描述的方法和硬件可以用于独立地执行顶点处理的情况,除了涉及由依赖关系定义的多个顶点的最终交叉处理(或交叉着色)操作。下面对父子关系的引用仅是示例的方式,并且可以可替代地涉及任何依赖(或邻接)关系。本文描述的硬件也可以用于在世界空间中(而不是如本文所述的在UV空间中)执行细分的情况;然而,在这种情况下,本文描述的CAM实现不能被省略。
本文描述的混合器硬件可以是图形处理单元(GPU)流水线的一部分,并且更具体地可以是GPU流水线内的曲面细分流水线的一部分。
图1示出了可以在GPU内的硬件中实现的示例GPU流水线100的示意图。如图1所示,流水线100包括顶点着色器102、曲面细分单元104和混合器硬件106。在顶点着色器102和曲面细分单元(或曲面细分器)104之间,可以有一个或更多个可选的外壳(hull)着色器(未在图1中示出),并且GPU流水线可以包括其他元件,例如存储器、平铺(tiling)单元和/或未在图1中示出的其他元件。
顶点着色器102负责执行每顶点计算。它不知道正在被处理的网格(mesh)拓扑,并且执行每顶点操作,由此它只具有正在被处理的当前顶点的信息。
与顶点着色器不同,曲面细分单元104(以及任何可选的外壳着色器)根据每片操作,而不是每顶点操作。曲面细分单元104输出图元,并且在使用顶点索引的系统中,输出图元采取三个顶点索引和顶点数据(例如,对于每个顶点,UV坐标,以及在各种示例中,诸如位移因子或混合权重以及可选地父或相邻UV坐标的其他参数)的缓冲器的形式。在不使用索引的情况下,输出图元采取三个域顶点的形式,其中域顶点可以仅包括UV坐标,或者可以包括UV坐标外加其他参数(例如,位移因子或混合权重,以及可选地父或相邻UV坐标)。曲面细分单元104输出的数据可以被存储在存储器中(图1中未示出)。
如上所述,由曲面细分单元104执行的曲面细分涉及选择性地将形状通常为正方形或三角形的片细分成更小的三角形子片,这些子片本身还可以被细分。如上所述,由曲面细分单元104输出的片或子片被称为图元。片或子片的细分通常涉及通过向边添加新顶点来细分片或子片的边(即,使得边被细分成两个更短的边);虽然可能存在一些步骤(例如预处理步骤),其中新添加的顶点不细分边,而是被放置在被细分的片或子片内(例如在片的中心处)。在细分涉及添加新顶点来细分边的情况下,新添加的顶点被称为具有两个“父”顶点的“子”顶点,这两个“父”顶点是由被细分的边连接的顶点。在细分涉及在片或子片内添加新顶点的情况下,新添加的顶点称为“子”顶点,并且“父”顶点是被细分的片或子片的顶点。例如,在通过在片或子片的中心处放置新顶点来细分三角形片或子片的情况下,新添加的子顶点有三个父顶点。这是生成合适的混合权重和相邻关系作为输入来混合的一种方式。曲面细分单元104可以实现曲面细分算法(或方法),其确保父顶点在其子顶点之前被输出。下面参考图12描述了这种曲面细分方法的示例。
图1示出的混合器硬件106包括一个或更多个域着色器108和混合单元110,并处理由曲面细分单元104生成的每个输出顶点。如上所述,混合器硬件可以替代地不包括域着色器,而是可以与混合器硬件外部的一个或更多个单独的域着色器一起工作。域着色器(一个/更多个)108用作对于由曲面细分单元104产生的顶点的第二顶点着色器。域着色器被供应有域空间位置(u,v),并被赋予片信息,并输出完整的顶点结构。域着色器使用片控制点(来自片信息)和域空间坐标(UV坐标)来构建新顶点,并应用任何位移映射(例如,通过采样纹理中编码的高度映射)。域着色(在域着色器108中)在GPU流水线100中被尽可能晚地保留,因为它极大地扩大了顶点大小(即,它增加了存储每个顶点所需的存储器大小)。
混合单元110将从域着色器(一个/更多个)108输出的顶点数据作为输入用于所有子顶点,或者可替代地用于具有的BW(例如DF)不等于一的每个子顶点112。对于被输入并且具有不等于一的混合权重的每个子顶点112,混合单元110还将从对于相邻(例如父)顶点(N1 113和N2 114)的域着色器(一个/更多个)108输出的顶点数据连同对于子顶点的BW(例如DF)116作为输入,并且混合子顶点和相邻顶点属性(其中每个属性被单独地混合),以生成对应于每个输入子顶点112的单个输出顶点118。由于在没有本文描述的优化的情况下,每个相邻顶点也可以是其相邻顶点的子顶点,并且两个子顶点可以共享公共的相邻顶点,因此域着色器(一个/更多个)108可以不止一次地处理同一个顶点。这种重复降低了混合器硬件106的吞吐量并增加了其功耗。
图1也示出了混合单元110的示例实现,并且在该实现中,混合单元110包括线性平均硬件逻辑块120和硬件插值单元122。这两个块120、122都执行线性插值;然而,线性平均块可以采用多于两个的输入,并且对于所有输入具有固定的、相等的权重。线性平均硬件逻辑块120对所有输入顶点执行平均运算,其中这可以例如包括生成所有输入顶点的线性平均,而不管有多少输入顶点。在其他示例中,并且其中顶点的邻点是域的角的情况下,线性平均硬件逻辑块120可以执行由域内部顶点的重心坐标加权的平均(或插值)运算。在图1示出的示例中,有两个输入顶点(相邻顶点113、114),并且线性平均硬件逻辑块120创建这两个相邻顶点的线性平均。可能有一些顶点是特殊情况,并且在系统中具有硬编码的邻点信息,并且当处理这些特定顶点时,这些顶点可以作为到混合操作(并且特别是到线性平均硬件逻辑块120)的输入被供应。硬件线性插值单元122用由曲面细分器输出的权重(其是对于子顶点的BW(例如DF)116)来对来自线性平均硬件逻辑块120和子顶点112的输出进行插值。
在所有子顶点被输入到混合单元110的示例中,BW为一的那些子顶点绕过混合单元110内的平均块120和插值阶段122(如虚线箭头所示)。
尽管在图1中未示出,但是被输入到混合单元110的BW(例如DF)可以在被用作插值单元122中的权重之前从定点格式被转换成浮点格式。
尽管图1中的混合单元110被示出为包括线性平均硬件逻辑块120和硬件线性插值单元122,但是在其他示例中,插值可以不是固定功能,而是可以使用着色器来被执行(例如,使得混合单元110中有另一着色器,或者使得混合单元110是域着色器108的一部分)。例如,混合操作可以作为顶点的域着色的最后步骤来被执行,由此邻点信息(例如父顶点)从顶点被导出并作为着色器的子过程被着色。此外,如果在投影之后执行曲面细分,那么可以使用投影校正(projective correct)插值而不是线性插值。
在GPU流水线100使用基于图块(tile-based)的渲染方法的示例中,GPU流水线100可以另外包括平铺单元(图1中未示出),该平铺单元逻辑上位于混合器硬件106之后。在这样的示例中,混合器硬件106内的域着色器108可以被修改,使得它仅输出位置属性,并且省略(或绕过)操作以生成其他参数,例如纹理坐标、法线等。平铺单元读取由曲面细分单元104生成的数据(如上所述,该数据可以被存储在存储器中),并生成每图块显示列表。对于特定图块,每个每图块显示列表标识至少部分位于该图块内的那些图元。这些显示列表可以由平铺单元使用平铺算法生成,并且可以被写入存储器并由GPU流水线100中的后续元件读取。这使得随后的元件能够在逐个图块的基础上执行渲染操作(或其他操作),并且这可以例如提高效率。
图2更详细地示出了第一示例混合器硬件200的示意图,其可以被实现为图1示出的GPU流水线100中的混合器硬件106。图3是示出混合器硬件200的操作的流程图。如图2所示,混合器硬件200接收由曲面细分单元104生成的域空间顶点和绕过曲面细分单元104并因此可以从顶点着色器102接收的关于曲面片的信息(例如,片的控制点,该片包括从顶点着色器输出的n个顶点以及n的值)作为输入。曲面片的控制点描述曲面细分的顶点试图逼近的曲面的行为。域空间顶点包括顶点本身的UV坐标、其相邻(例如父)顶点的UV坐标和顶点的BW(例如顶点的DF)。由曲面细分器输出的域空间顶点可以不包括其相邻顶点的UV坐标,而是这些可以是顶点本身的UV坐标所固有的。在这种情况下,顶点解压缩阶段可以作为混合单元的一部分被包括,以便生成额外的坐标。另外,在相邻顶点的数量不固定的情况下(例如,两个),域空间顶点也可以指定相邻顶点的数量。
如上文参考图1所述,图2示出的混合器硬件200包括一个或更多个域着色器108和混合单元110。尽管在图2中示出了两个域着色器108,但这仅仅是以示例的方式,并且在其他示例中,可以有一个域着色器或一组(one block of)域着色器,或者可选地,域着色器可以在混合器硬件200的外部。混合器硬件200还包括可选的混合权重评估逻辑块202、顶点解压缩逻辑块203和用于世界空间顶点(即,由域着色器108输出的顶点)的高速缓存204。在其他示例中,可以省略BW评估逻辑块202,并且可以以相同的方式处理所有顶点,而不管它们的BW值如何。混合器硬件200可以另外包括图2中未示出的其他元件,例如在曲面细分单元104输出定点值的示例中,将坐标(例如,U坐标和V坐标)从定点整数(例如,在0和64之间或0和192之间的值)转换为浮点值(例如,在[0,1]范围内)的元件,以便域着色器108接收浮点格式的输入。
如上所述,作为输入被接收的域空间顶点包括顶点本身的UV坐标、顶点的BW(例如顶点的DF),以及在除UV坐标是顶点本身的UV坐标所固有的情况下包括其相邻(例如父)顶点的UV坐标。顶点解压缩逻辑块203包括硬件逻辑,该硬件逻辑被布置成将对于子顶点及其邻点的域空间顶点(其从曲面细分单元104输出)转换成多个域空间坐标。
用于世界空间顶点的高速缓存204被布置成存储多个(UV坐标,世界空间顶点)对,其中UV坐标用于寻址高速缓存条目。在各个示例中,高速缓存204可以被布置成存储16个数据对或多于16个数据对(例如32个数据对)。对于已知的曲面细分方案,即使是小的高速缓存(例如4个数据对)也会产生对重复的域着色器调用的数量的大大减少,并且如果高速缓存被布置成存储16个或更多个数据对,则在最坏的情况下,多余的域着色器处理的量可以减少90%以上,对于空间相干的几何图形,平均减少95%,使得每顶点有1.05-1.10个域着色器调用,而不是一个加上相邻顶点的平均数量,通常总共不小于2个(其中省略了高速缓存)。通过增加高速缓存的大小,减少了高速缓存未命中(这可能导致重复的域着色器调用)的机会;然而,随着高速缓存大小的增加,执行高速缓存查找所花费的时间也增加了,并且在重复的域着色器调用减少的方面所实现的改进不会线性地增加。在各个示例中,可以按UV坐标排序高速缓存中的条目,以提高高速缓存查找的速度。
高速缓存204可以操作FIFO(先进先出)的替换策略,使得一旦高速缓存满了,则当存在需要存储的新的世界空间顶点时(在块308),高速缓存中最旧的条目被弹出(eject)。在其他示例中,高速缓存还可以基于要被添加到高速缓存的新顶点的UV坐标来选择用于弹出的数据对。例如,被选择用于弹出的数据对可以是具有UV坐标的数据对,该UV坐标在UV空间中距离要被存储在其位置中的新数据对中的UV坐标最远。通过使用针对UV空间中最远的顶点弹出数据对的替换策略,域着色器调用的数量(这是缓存未命中的结果)可以显著减少(例如减半)。如果曲面细分单元104实现曲面细分算法(或方法)(其在UV空间中更一致地产生图元,例如在已知的二进制细分曲面细分方案中交替细分左子片和右子片),则这可以被进一步减少。下面参考图12描述这种改进的曲面细分方法的示例。实现了域着色器调用数量的这种进一步减少,因为这种三角形排序减少了相邻三角形片之间的距离(在UV空间中),因此被输入到混合器硬件200的顶点在输出顺序上更靠近它们的相邻顶点。
在图2示出的混合器硬件200内,在可选的BW评估逻辑块202中评估混合权重(块302)。该逻辑块202包括硬件逻辑,该硬件逻辑被布置成检查顶点的混合权重是否等于一。等于一的混合权重指示顶点处于其最终状态并且不受其邻点的影响,因此混合(在混合单元110中)是多余的,因此不被需要。由于被输入到混合器硬件200的许多顶点(例如,在某些曲面细分方案中,大约一半的位移因子)将具有等于一的混合权重,通过早期过滤掉这些顶点并绕过对于这些顶点的混合单元110,由混合器硬件200执行的处理总量显著减少,因此功耗类似地显著减少。
如果顶点的混合权重等于一(块302中的“是”),则执行检查以确定世界空间顶点是否被存储在高速缓存204中(块303)。如果世界空间顶点不在高速缓存中(块303中的“否”),则顶点的UV坐标(在图2中被指示为UVC)被输入到域着色器108(块304),并且域着色器108根据输入的UV坐标和曲面片信息生成世界空间顶点。如果世界空间顶点在高速缓存中(块303中的“是”),则绕过域着色器108。然后,由域着色器生成的或从高速缓存访问的世界空间顶点从混合器硬件200输出(块306),并且如果世界空间顶点尚未被存储在对于世界空间顶点的高速缓存204中,则将其添加到高速缓存中(块308)。
如果确定(在混合权重评估逻辑块202中)顶点的混合权重不等于一(块302中的“否”),则执行检查以确定世界空间顶点是否被存储在高速缓存204中(块303)。如果世界空间顶点不在高速缓存中(块303中的“否”),则将顶点的UV坐标UVC输入到域着色器108(块310),并且如上所述,域着色器108生成世界空间顶点。如果世界空间顶点在高速缓存中(块303中的“是”),则绕过域着色器108。即使已经获得了世界空间顶点(例如,在域着色器108中生成或从高速缓存204访问),混合也不能发生,直到对于相邻顶点的世界空间顶点也可用为止(块312中的“是”)。除了输出顶点的UV坐标UVC之外,混合权重评估逻辑块202还将输入域空间顶点输出到顶点解压缩块203,该顶点解压缩块203生成相邻顶点的UV坐标,在图2中被指示为UVN1和UVN2(块305)。如上所述,这些UV坐标用于寻址高速缓存204,从而确定对于相邻顶点的任何一个或二个世界空间顶点是否被存储在高速缓存中(块314)。如果对于相邻顶点的两个世界空间顶点都在高速缓存中(块314中的“是”),那么这些值(在图2中被表示为N1和N2)连同对于顶点的世界空间顶点和顶点的混合权重被输入到混合单元110(块316)。然而,如果对于相邻顶点的任何一个或两个世界空间顶点不在高速缓存中(块314中的“否”,即导致至少一个高速缓存未命中),则未命中顶点的UV坐标被输入到域着色器108(块318)。如上所述,域着色器108根据输入的UV坐标(例如,UVN1或UVN2)和曲面片信息来生成世界空间顶点。对于未命中邻点的生成的世界空间顶点被存储在高速缓存204中(块308)。
一旦对于输入(子)顶点和相邻顶点的世界空间顶点可用(块312中的“是”),则这些世界空间顶点被输入到混合单元110(块316)。混合单元110的操作和结构可以如上参考图1所述。然后从混合器硬件200输出作为混合的世界空间顶点的混合单元110的输出(块320)。
当两个相邻UV坐标连同相应的世界空间顶点已经被存储在高速缓存204中时(块314中的“是”),等待时间被最小化,因为一旦域着色器处理了输入顶点的UV坐标以生成相应的世界空间顶点,就可以进行混合(在混合单元110中)。在高速缓存204中没有找到相邻UV坐标的情况下,可以通过并行运行三个域着色器(每个邻点一个,并且顶点本身一个)来减少等待时间;然而,延迟可能会增加(例如,增加到处理三个顶点中的任何一个所花费的最大时间),并且与使用高速缓存的情况相比,需要附加的功率。因此,如上所述,高速缓存的使用减少了等待时间和功耗。
如上所述,在对于相邻顶点(在块318中)或混合权重等于一的输入顶点(在块304中)生成世界空间顶点(在域着色器108中)的情况下,于是世界空间顶点被存储在高速缓存204中(块308)。然而,具有混合权重不等于一的输入顶点的世界空间顶点(并且由于混合权重在0和1之间(包括两端点),所以小于一)不需要被存储在高速缓存中,因为这样的顶点不能是父顶点,因为它们还没有处于它们的最终位置。
如图3所示,在域着色之前执行高速缓存查找(在块303中)。然而,在使用曲面细分方法来保证在相邻顶点的子顶点之前输出相邻顶点的情况下(例如,下面参考图12描述的方法),可以省略这些高速缓存查找(即,图3中的块303),并且顶点的UV坐标可以被直接传递给域着色器108。
图4更详细地示出了第二示例混合器硬件400的示意图,其可以被实现为图1示出的GPU流水线100中的混合器硬件106。如图4所示,混合器硬件400接收由曲面细分单元104生成的域空间顶点以及与绕过曲面细分单元104并因此可以从顶点着色器102接收的曲面片相关的信息作为输入。域空间顶点包括顶点的UV坐标和顶点的混合权重,并且还可以包括相邻顶点(例如父顶点)的UV坐标(其中相邻顶点的UV坐标不是顶点本身的UV坐标所固有的),以及相邻顶点的数量(其中这不是固定的数量)。
如上文参考图1所述,图4示出的混合器硬件400包括一个或更多个域着色器108和混合单元110。如上所述,在该混合器硬件400的变型中,域着色器108可以在混合器硬件400的外部。图5和图6是示出混合器硬件400的操作的流程图。混合器硬件400还包括顶点解压缩块401、内容可寻址存储器(CAM)402,内容可寻址存储器402包括(或与之相关联)计数器404、转换逻辑块406、任务管理器408、输出索引缓冲器410和输出顶点缓冲器412。混合器硬件400可以另外包括图4中未示出的其他元件,例如第二更小的CAM或其他数据结构。
顶点解压缩块401(类似于图2中示出的顶点解压缩块203)包括硬件逻辑,该硬件逻辑被布置成将对于子顶点及其邻点的域空间顶点(其从曲面细分单元104输出)转换成多个域空间坐标。
提供CAM 402以便将等效顶点(即,具有相同UV坐标和相同混合权重的顶点,尽管一个顶点可能是子顶点,而另一个顶点可能是具有隐式混合权重为1的相邻顶点)拼接(stitch)在一起,并且被布置成存储多个(UV坐标、片引用、索引)元组(例如32个、64个或128个数据元组)。CAM402可以存储父顶点和相邻顶点,或者,在曲面细分方法保证相邻顶点在其子顶点之前被输出的情况下,CAM 402可以仅存储子顶点。任务管理器408将顶点组合(assembles)到任务中,然后由域着色器108和混合单元110进行处理。术语“作业”在本文被用来指用于着色器的执行的单个指令,并且术语“任务”在本文被用来指一组作业(例如,32个、64个、128个等作业)一起被处理。因此,每个任务包括多个顶点,并且任务内的所有顶点被并行处理,使得对于任务中所有顶点的世界空间顶点可用于由混合单元110在处理该任务中的顶点时使用。因此,任务管理器408通过有效地将顶点打包到任务中来最小化重复工作,即,通过确保在没有发现顶点被存储在CAM中的情况下,顶点及其相邻顶点被添加到同一任务中(其中顶点作业具有与其相关联的索引,以指示任务中的哪些顶点是其相邻顶点)。这意味着对于顶点及其邻点的域着色器结果都可以同时被输入到混合单元110。在混合器硬件400中,对CAM阶段之后的所有几何形状进行索引(例如,用于光栅化或几何着色器阶段之前的图元组合)。
如图4所示,CAM 402接收由曲面细分单元104生成的域空间顶点和对当前片的引用(例如,片索引,其是输入到混合器硬件400的曲面片信息的一部分)作为输入。对照当前CAM条目检查每个输入域空间顶点,如上所述,当前CAM条目包括(UV坐标、片引用、索引)元组(块502)。被存储在CAM条目中的片引用可以例如是片列表的索引,并且作为存储器优化,存储在CAM中的片引用可以是引用查找表的更短的局部片索引,从该查找表可以获得更长的片引用。如果对于UV和片引用都找到匹配(块502中的“是”),则相应的条目索引被传递到输出索引缓冲器410(块504)。如果没有找到匹配(块502中的“否”),则CAM 402中的条目被新顶点UV替换(块506),计数器404递增(块508),并且新计数器值被分配给新CAM条目(块510),并且被传递给输出索引缓冲器410(块512)。被替换的条目(在块506中)可以例如是CAM中最旧的条目,或者可替换地,可以使用不同的替换方案,例如替换UV空间中最远的条目。另外,如果没有找到匹配(块502中的“否”),则生成邻点的UV(块503)。如果域顶点具有定点坐标,则顶点及其邻点的坐标从定点形式被转换成浮点形式(块514,在转换器逻辑块406中),然后传递给任务管理器408(块516)。这确保了坐标在被输入到域着色器108之前是浮点形式。
任务管理器408被布置成向每个接收到的顶点和向新顶点的每个邻点分配任务作业(块518)。然后将这些作业打包到任务中(块520),并且在各个示例中,可以使用附加的小的CAM或其他数据结构(图4中未示出)来存储哪些顶点已经在任务中的细节,从而检查顶点(以其UV坐标的形式)是否已经被添加到任务中。例如,这种小的CAM或数据结构可以存储(UV、任务索引)数据对。当将重复的UV添加到任务中时(作为顶点或其邻点之一),只为顶点处理一个作业,因此不会执行重复的工作。为了确保只为顶点处理一个作业,任务中的作业被压缩,并且这是以从混合器硬件400输出的顶点的顺序与顶点被提交给任务的顺序相匹配的方式来执行的(在块516中)。为了实现这一点,子顶点作业占据任务前面的连续条目,确保所有索引都是正确的,并且只有相邻作业占据任务末尾的条目,使得最终的任务包括由任务管理器按如下方式组织的作业:
[仅子作业or子作业和相邻作业|空工作|仅相邻作业]
这可以通过任务管理器依次将子作业放置在左边而将所有相邻作业放置在右边(当逻辑地定义时)来实现(在块520中)。如果输入了与相邻作业匹配的新子作业,则新作业被放置在左侧组的末尾处,并且右侧的相邻作业被移除。为了有效地利用空间,当右侧的相邻作业被移除时,其左侧的所有相邻作业可以被向右移动一个作业以移除间隙,或者最左侧的相邻作业可以被移动到空槽(slot)中。
如果在任何阶段处,新顶点(包括其所有邻点)不能被装进(fit)任务中(块522中的“是”),则刷新(flush)并处理所有的作业(块524),并将顶点添加到下一个任务(块525)。这意味着任务大小应当至少为n+1(当最大邻点数为n时),使得每个顶点及其邻点可以作为单个任务中的作业来被处理;然而,更大的任务(例如包括32个或64个作业)提供了更高的效率。处理完任务后,来自混合单元110的输出被输入到输出顶点缓冲器412(块526)。下面参考图6中的流程图更详细地描述任务管理器408的操作的示例方法。
域着色器108和混合单元110的操作可以是固定功能或者可以使用可编程着色器代码。尽管域着色器108和混合单元110在图4(还有图1和图2)中被示为单独的元件,但是可以局部地完成处理或者将处理传递给不同的单元来执行(例如传递给GPU内的统一着色器核心,USC)。
如图5所示,在各个示例中,当作业被刷新时(在块524中),计数器404被更新(在块528中)。例如,如果系统要求输出任务中处理的所有顶点(即使它们没有被输出索引缓冲器410引用),则每次任务被处理时,计数器404被增加(在块528中)到任务大小的下一倍数,使得索引是正确的。这种增加可以使用由任务管理器408生成的任务刷新信号传送到CAM402。在各个示例中,为了在处理多个片时减小CAM 402的计数器404的最大大小,并因此减小CAM条目中的索引的大小,计数器404可以针对每个片被重置,并且累积索引偏移,然后索引可以在从CAM被发出之前偏移这个值。
图6是更详细地示出任务管理器408的操作的示例方法的流程图。图6示出的操作对应于图5中的块518-526。如图6所示,任务管理器经由转换器硬件406从CAM 402接收顶点(块602),并为顶点及其邻点中的每一个构建一个或更多个作业,包括UV坐标和片引用(块604)。任务管理器408在处理顶点之前依次处理每个邻点(块606),以便首先生成邻点任务索引,然后是顶点本身。此外,如下所述,顶点本身被不同于它的邻点对待。任务管理器408分配的每个作业具有三种状态之一,这三种状态确定顶点需要多少处理,它们是:NO_SHADE、NO_OUTPUT和OUTPUT。这些作业状态的细节描述如下。
如图6所示,对照当前任务条目(块608),即对照已经被添加到当前任务的所有作业,检查相邻作业(块606中的“是”)。如果找到匹配(块608中的“是”),则返回该作业的索引(块609)。如果没有(块608中的“否”)并且任务未满(块610中的“否”),则该作业被添加到任务后端的第一个可用条目,被标记为NO_SHADE(块612),并且该作业的索引被返回(块609)。
对于顶点本身的作业也对照当前任务条目进行检查(块616)。如果找到匹配(块616中的“是”),将作为邻点作业的当前作业条目(根据块626的先前实例被标记为NO_OUTPUT)被移动到任务前面的第一个可用条目,被改变为OUTPUT(块618),并且找到的条目的所有索引引用被新条目索引替换(块620)。然而,如果没有找到匹配(块616中的“否”),并且任务未满(块622中的“否”),则该作业被添加到任务前面的第一个可用条目,并且被标记为OUTPUT(块624)。然后,它被分配它的相邻索引,并且将由这些索引引用的作业从NO_SHADE更新成NO_OUTPUT(块626)。
为了在改变点处更新索引引用(在块626中),任务管理器408可以循环访问(iterate through)寻找旧索引的任何实例的所有任务,或者,如果添加了反向引用(其中反向引用是相邻顶点作业中对依赖于它们的任务的引用),它可以直接转到过时的条目。
当且仅当CAM的大小大于或等于作业条目的数量时,才能做出在任务中发现的重复UV必须是相邻作业的假设,因为提交到任务管理器的这些许多顶点的任何序列都将具有由CAM合并的任何复制品。对于任务管理器操作的另一种方式是依次将每个顶点添加到任务中(不添加相邻作业),然后一旦任务足够满,则进行任务的第二遍,以向每个顶点添加索引,其中邻点对应于这些邻点的作业。如果找不到邻点,它会被简单地添加到任务的末尾,并被标记为NO_OUTPUT,而不是OUTPUT。然而,在该方案中,为了适应这些附加的邻点,必须在任务末尾预留足够数量的作业槽。
如果在任何时候任务都是满的(块610或块622中的“是”),即所有条目都被作业占据,则任务被刷新(块628),从而释放所有条目用于后续顶点,并且被刷新的作业被分派到域着色器108和混合单元110(如上所述,其可以被实现为着色器处理器,例如USC,其被配置为执行域着色和混合)。一旦处理完成,对应于OUTPUT作业的结果被传递(以它们的任务条目顺序)到输出顶点缓冲器412,或者,在任务管理器408向CAM 402提供反馈的系统中,每个作业的结果被传递到输出顶点缓冲器412。
图7更详细地示出了第三示例混合器硬件700的示意图,其可以被实现为图1示出的GPU流水线100中的混合器硬件106。第三示例混合器硬件700非常类似于图4示出的以及上面描述的混合器硬件;然而,图7示出的混合器硬件被配置为当由曲面细分单元104输出的几何形状被索引时使用。因此,混合器硬件700包括两个附加元件:CAM索引缓冲器704和重新映射逻辑块714。
如果由曲面细分单元104输出的顶点被压缩,则混合器硬件700(类似于混合器硬件400)可以包括硬件逻辑元件,该硬件逻辑元件被布置成在将顶点传递(以它们解压缩的形式)到CAM 402之前解压缩顶点706(例如,如图2所示以及如上所述的顶点解压缩块203)。混合器硬件700(以及类似地混合器硬件400)也可以包括一个或更多个输入缓冲器710、712。
混合器硬件700参考图5和图6如上所述地进行操作,附加的是,CAM402将索引输出到CAM索引缓冲器704,而不是直接输出到输出索引缓冲器410,并且重新映射逻辑块714被布置成通过使用存储在输入索引缓冲器712中的索引来组合被输入到输出索引缓冲器410的最终数据,以引用存储在CAM索引缓冲器704中的新索引(由CAM 402基于计数器404的值生成的)。
如上参考图5和图6所述,当任务满时(在块522、610和622中的任一个中的“是”),在域着色器108中用固定功能和/或着色器可编程代码来处理内容(块524和块628)。当使用曲面细分方案产生具有邻点信息的顶点时,混合单元110可以用于混合顶点的域着色器结果和其邻点的域着色器结果之间的属性。这可能发生在与域着色器相同的着色器核心中,因为邻点被打包到与其子顶点相同的任务中。
任务管理器408(在混合器硬件400、700中)的职责是确保所有邻点都被分配了任务中的作业,并且正确地生成了对这些任务索引的所有引用。此外,任务管理器408负责为每个作业设置正确的状态,如下所示:
图8是示出对刷新的任务执行的处理阶段的示意图,并且这些任务都用它们的任务状态(其可以被称为任务类型)来标记。NO_SHADE作业(例如图8中的作业5)不经历任何处理,因为它们对任何顶点的结果都没有贡献。NO_OUTPUT作业(例如作业6和作业7)与任务中其他顶点的父顶点相关,但这些顶点本身不是子顶点,并且这些顶点被着色且不被混合,但它们的结果用于混合其他顶点(即相关的子顶点)。OUTPUT作业(例如0、1、2、3和4)是子顶点(且也可以是任务中对于其他顶点的父顶点),并且这些子顶点被着色、混合并作为现在混合的世界顶点被发送到输出顶点缓冲器412。
域着色阶段(在域着色器108中)以与任何其他曲面细分方案相同的方式发生。域空间UV和(使用片引用取出的)一组域控制点用于生成顶点的所有世界空间属性,例如位置、法线和纹理坐标。
混合操作(在混合单元110中)使用针对每个作业执行的固定功能或可编程代码,允许访问邻点的任何后域着色器属性,以便修改该作业的结果,例如在当前结果和两个邻点的结果的平均值之间进行插值。当混合阶段作为用户可编程代码被给出时,对世界空间属性的子集执行修改会减少总操作。输出所有混合的顶点。
在域着色器108和混合单元110都作为用户可编程着色器代码被给出的场景中,这两个阶段都可以作为处理器(例如USC)中的单个着色器执行来被执行,其中在DS和混合器部分之间具有屏障。对邻点结果的属性的所有访问都发生在该屏障之后。
图8示出了对于每个状态的作业需要多少处理,然而,在各个示例中,为了将所有作业都视为相同的作业,具有NO_SHADE或NO_OUTPUT状态的作业仍然可以由相同的域着色器和混合器代码来处理,并输出到输出顶点缓冲区,即使结果从未被索引引用。在这种情况下,如上所述,每当任务被刷新时,计数器404被更新为任务大小的下一倍数,并且这是由任务管理器408向CAM 402(或计数器404)发送回刷新信号触发的。
图9是示出由混合器硬件400、700中的任务管理器408执行的任务打包操作的示意图。图9示出了由任务管理器408处理的四个图元900-903的示例集,并且在该示例中,仅针对两个顶点(v2和v4)提供邻接信息(如图9中的箭头所指示)。在该示例中,任务大小是4,并且CAM 402没有产生顶点的重复。
首先,顶点v0被添加到任务中,并且它没有需要被添加的父顶点。同样,v1也可以被添加到其自己的任务中。下一个顶点v2有两个父顶点,v1和v3。顶点v1已经在任务中,但v3没有,因此顶点v3作为父顶点被添加到任务中。来自CAM的下一个顶点v3已经在任务中。来自CAM的下一个顶点v4不能装进任务中(即使没有其父顶点),因此第一任务被刷新。在第一任务中,所有作业都被标记为OUTPUT,因为它们对应于图元的角顶点,并且需要被输出。
不能被装进第一任务中的顶点v4,与其父顶点v3和v5一起被添加到第二任务中。来自CAM的下一个顶点v5已经在任务中。没有更多的顶点在图9中被示出;但是,如果来自CAM的下一个顶点有两个父顶点,其中至少一个还不在第二任务中,那么新顶点就不能装进一个可用的作业槽中,因此必须刷新第二任务,并且顶点(及其父顶点)进入下一个任务。在第二任务中,只需要被传递到输出顶点缓冲区的两个条目是v4和v5,并且因此被标记为OUTPUT。顶点v3仅作为邻点出现在任务中,因此被标记为NO_OUTPUT,并且空作业被标记为NO_JOB。因为v3是在不同任务中处理的两个顶点(v2和v4)的父顶点,它必须被包括在两个任务中,因此要被处理两次。
尽管有两种方式使得任务不能为任务中的每个可用作业条目输出最终顶点(例如,因为一些顶点(例如图9的示例中的顶点v3)被包括在多于一个的任务中,并且因为并非所有的任务都是满的,例如图9的示例中的第二任务),但是这些情况相对不经常发生,例如,对于图12示出的曲面细分方案,每任务大约平均有1.5个条目。
将认识到,虽然图9示出了具有4个作业槽的任务,但这仅仅是一个示例任务大小。随着任务中条目数量的增加,任务效率也会提高。对于32个、62个或128个作业槽的任务大小,对于图12示出的曲面细分方案,效率约为95%或更多。
图12是示出控制曲面细分单元(例如,图1中的曲面细分单元104)输出图元的顺序的示例曲面细分方法的流程图,并且可以参考图13A-图13E中示出的示例片来描述该方法。如上所述,该方法交替针对曲面细分单元内的每个细分层次处理新片的顺序,因此,输出顺序中的邻接图元保证是UV空间中的相邻图元,并因此共享两个顶点。
图12示出的方法将初始片(在各个示例中,其可以是初始三角形片)作为输入,并且图13A示出了示例三角形初始片1302。如上所述,三角形片是界定域的三个顶点的有序集合,并且在本文描述的示例中,该顶点的有序集合被写成(T,L,R),其中T、L和R分别指顶部、左侧和右侧顶点(如图13A所示)。
如图12所示,进行评估以确定是否需要初始片1302的细分(块1202)。可以使用任何合适的曲面细分方法(例如,涉及二进制细分的任何曲面细分方法)来进行这种确定,并且在GB2533443和GB2533444中描述了使用顶点曲面细分因子的两个示例。
如果确定初始片需要被细分(块1202中的“是”),则形成左子片和右子片(块1204)。初始片1302的这种细分可以包括在左顶点和右顶点之间的边上添加中间顶点(被指示为M)(如图13B所示),并且在各个示例中,中间顶点可以在左顶点和右顶点之间的中间点处被添加。形成的这两个片1304L、1304R(在块1204中)都是三角形片,并且包括三个顶点的有序集合:(M,R,T)和(M,T,L),但是在其他示例中,它们可以是等值线或者具有多于三条边,并且它们可以分别被称为右子片1304R和左子片1304L。
然后选择新形成的子片中的一个(即,在块1204中形成的左子片1304L或右子片1304R)(在块1208中),以通过将所选择的子片输入回图12的方法中,在新形成的子片中的另一个之前被进一步曲面细分。左子片或右子片的选择的顺序(在块1208中)是基于一个或更多个标志的值进行的,并且下面描述了标志的使用的两个不同示例。以这种方式,在评估细分树的另一个分支之前,图12的方法被递归地应用于初始片的每个细分层次,其中细分树的一个分支被完全地细分,并且其中每个分支点处的选择的顺序由一个或更多个标志确定。
在第一示例中,对于每个片(例如,对于每个初始片以及对于随后通过曲面细分形成的每个子片)都有一个标志(例如,单个位标志)。该每片标志确定左子片还是右子片首先被选择,并且当该片被细分时(即当初始片被细分时(在块1204中))被输入回图12的方法中(在块1208中),与初始片相关联的标志确定在随后的步骤中做出的选择(在块1208中)。在这样的示例中,这使得三角形片成为三个顶点和一个标志的有序集合,例如,(T,L,R,F)或者其中F和表示两个不同的标志值(例如,关和开,1和0)。
如果初始片1302的标志(作为块1202中评估的结果,其在块1204中被细分)具有标志的第一值(例如F),则首先选择并处理右子片(在块1208中),并且仅当不可能进一步细分右子片时,左子片才被输入回图12的方法中(即,根据需要曲面细分)。然而,如果输入片1302的标志具有另一个值(例如),则首先选择并处理左子片(在块1208中),并且仅当不可能进一步细分左子片时,右子片才被输入回图12的方法中(即,根据需要曲面细分)。在这样的示例中,当通过父片的细分生成两个子片时(在块1204中,其中父片可以是初始片或根据初始片形成的子片),对于两个新形成的子片的标志的值被设置为具有与父片相反的值。因此,如果初始片是(T,L,R,F),则形成的两个子片(在块1204中)是类似地,如果初始片是则形成的两个子片(在块1204中)是(M,T,LF)和(M,R,T,F)。
在第二示例中,可以在曲面细分器中使用单个标志,每当递归层次减少或增加一时,曲面细分器切换状态。在该第二示例中,如果单个标志具有第一值(例如F),则首先选择右子片并将其输入回图12的方法中(在块1208中),并且仅当不可能进一步细分右子片时,左子片才被输入回图12的方法中(即,根据需要曲面细分)。然而,如果单个标志具有另一个值(例如),则首先选择左子片并将其输入回图12的方法中(在块1208中),并且仅当不可能进一步细分左子片时,右子片才被输入回图12的方法中(即,根据需要曲面细分)。在该示例中,可以例如在决定进行细分之后(例如,响应于块1202中的“是”)或者在形成两个子片之后(在块1204中)执行标志值的交换。
如上所述,已经选择了两个新形成的子片1304R、1304L中的一个(在块1208中),所选择的子片被输入回图12的方法中,并且被曲面细分,直到不可能进一步细分为止(在块1208中),并且这是递归过程。所选择的新形成的子片(例如,子片1304R)成为图12的方法的输入,并且确定该片是否应当被细分(在块1202中)。
如果不需要细分(块1202中的“否”),则所选择的新形成的子片作为图元被输出(块1212),并且未选择的新形成的子片(例如,片1304L)被输入到图12的方法。
然而,如果需要对所选择的子片(例如,1304R)进行细分(块1202中的“是”),则根据所选择的子片形成左子片和右子片(1306L、1306R)(块1204)。由于在该递归层次的标志已经被交换(或者作为子片1304R中的标志与初始片1302中的标志相反的结果,或者因为单个标志作为生成子片1304R、1304L的方法的一部分被交换),代替首先选择右子片1306R(如导致选择子片1304R的紧接前一递归层次的情况),首先选择左子片1306L(在块1208中)。如果该选择的子片1306L不需要任何细分,则它作为图元被输出(在块1212),并且选择并评估未选择的子片1306R(在块1202中)。只有当这两个子片1306L、1306R的曲面细分都完成时,未选择的子片1304L才从曲面细分的顶层输入回到图12的方法中,并被考虑用于细分(在块1202中)。
输出的图元(来自块1212)在使用顶点索引的系统中采取三个索引的形式,并且在不使用索引的系统中采取三个域顶点的形式,并且如上详述,其中域顶点可以仅包括UV坐标或者可以包括UV坐标外加其他参数(例如,一个或更多个相邻顶点的权重以及可选地UV坐标)。特别地,该权重可以是位移因子,并且这些相邻顶点可以是如GB2533443和GB2533444中所述两个或三个父顶点。
如图13D所示,如果未选择的子片1304L需要细分(块1202中的“是”),则形成两个新子片1308L、1308R。当在片1308L和1308R之间进行选择时,用于进行选择的标志(在块1208中)具有与其在子片1306L和1306R之间进行选择时相同的值,因为两个细分都发生在相同的递归/曲面细分层次处,因此首先选择左子片1308L。如果该选择的子片1308L不需要任何细分,则它作为三角形图元被输出(在块1212中),并且未选择的子片1308R被输入到图12的方法并被评估(在块1202中)。
如果使用图12示出的方法,则初始片1302被细分为四个子片1306L、1306R、1308L、1308R,子片被生成,并且它们的图元以如下顺序被输出:1306L、1306R、1308L、1308R,并且图13E示出了该顺序(在曲面细分的初始片1310上输出的图元按顺序被标记为0-3)。
虽然图12的方法涉及使用执行二进制细分的曲面细分方法,但是也可以使用图12的方法,其中片被细分成多于两个的子片(在块1204中,例如分成四个子片或X个子片,其中X通常可以是2的幂)。
虽然本文参考后曲面细分域着色描述了方法和硬件,但是它们也适用于由域着色器处理的顶点之间存在依赖关系(例如,如下所述的父子关系或其他邻接关系)的其他情况。
另一示例提供混合器硬件,包括:用于接收域空间顶点的输入端,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在其中相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;高速缓存,其被布置成存储数据对,每个数据对包括UV坐标和由域着色器根据UV坐标生成的世界空间顶点;以及混合单元,其被布置成接收输入顶点的混合权重、由域着色器生成的或从高速缓存访问的对于输入顶点及其相邻顶点的世界空间顶点,并且使用混合权重生成对于输入顶点的单个世界空间顶点,其中,高速缓存被布置成,在针对UV坐标的高速缓存条目处高速缓存命中的情况下,从高速缓存条目输出世界空间顶点,并且在针对UV坐标的高速缓存未命中的情况下,将UV坐标输出到域着色器;并且其中,高速缓存被布置成接收并存储由域着色器生成的对于输入顶点及其邻点的世界空间顶点。
第二另一示例提供了一种执行混合的方法,包括:接收域空间顶点,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在其中相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;在高速缓存中存储数据对,每个数据对包括UV坐标和由域着色器根据UV坐标生成的世界空间顶点;响应于高速缓存中的条目处的高速缓存命中,从高速缓存条目输出世界空间顶点;响应于高速缓存中的条目处的高速缓存未命中,将UV坐标输出到域着色器,并在域着色器中根据UV坐标生成世界空间顶点;并且一旦对于顶点和相邻顶点的世界空间顶点已经从高速缓存或域着色器被输出,使用混合权重在混合单元中生成对于输入顶点的单个世界空间顶点。
第三另一示例提供了混合器硬件,包括:用于接收域空间顶点的输入端,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在其中相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;内容可寻址存储器,其被成置成存储数据元组,每个数据元组包括UV坐标、片引用和索引;计数器,其被布置成当数据元组从内容可寻址存储器中被移除时递增;混合单元,其被布置成接收输入顶点的混合权重、由域着色器在单个任务中生成的对于输入顶点及其相邻顶点的世界空间顶点,并且生成对于输入顶点的单个世界空间顶点;任务管理器;输出索引缓冲器;以及输出顶点缓冲器,其中,内容可寻址存储器被布置成在接收到输入顶点时,确定输入顶点的UV坐标是否被存储在内容可寻址存储器中,并且响应于UV坐标被存储在内容可寻址存储器中的数据元组中,将来自数据元组的索引输出到输出索引缓冲器,并且响应于UV坐标没有被存储在内容可寻址存储器中,从内容可寻址存储器中移除数据元组,将UV坐标添加到索引的值等于计数器值的新数据元组,并将索引输出到输出索引缓冲器,并将输入顶点输出到任务管理器,并且其中,任务管理器被布置成从内容可寻址存储器接收输入顶点,以将对于输入顶点和输入顶点的相邻顶点的UV坐标打包到同一任务内的作业中,并响应于确定任务已满,将任务中的所有作业输出到域着色器。
第四另一示例提供了一种执行混合的方法,包括:接收域空间顶点,该域空间顶点包括顶点的UV坐标、顶点的混合权重,以及在其中相邻顶点的UV坐标不是顶点本身的UV坐标所固有的情况下的相邻顶点的UV坐标;将数据元组存储在内容可寻址存储器中,每个数据元组包括UV坐标、片引用和索引;在接收到输入顶点时,确定输入顶点的UV坐标是否被存储在内容可寻址存储器中;响应于UV坐标被存储在内容可寻址存储器中的数据元组中,将来自数据元组的索引输出到输出索引缓冲器;响应于UV坐标未被存储在内容可寻址存储器中:从内容可寻址存储器中移除数据元组,将UV坐标添加到索引的值等于计数器值的新数据元组,将索引输出到输出索引缓冲器;由任务管理器将对于输入顶点和输入顶点的相邻顶点的UV坐标打包到同一任务内的作业中;并且响应于确定任务已满,将任务中的所有作业输出到域着色器和混合单元。
图10示出了在其中可以实现本文描述的GPU流水线100的计算机系统。计算机系统包括CPU 1002、GPU 1004、存储器1006和诸如显示器1016、扬声器1017和摄像机1018的其他设备1014。GPU 1004包括如本文所述的GPU流水线100。计算机系统的部件可以经由通信总线1020彼此通信。
图1、图2、图4和图7的GPU流水线100和混合器硬件200、400、700被示出为包括许多功能块。这仅仅是示意性的,且并不旨在限定在这些实体的不同逻辑元件之间的严格区分。可以以任何合适的方式提供每个功能块。应当理解的是,在本文描述为由GPU流水线或混合器硬件形成的中间值不需要在任何点处由GPU流水线或混合器硬件物理地生成,并且可以仅表示方便地描述由GPU流水线或混合器硬件在其输入端和输出端之间执行的处理的逻辑值。
可以在集成电路上的硬件中体现本文描述的GPU流水线或混合器硬件。本文描述的GPU流水线或混合器硬件可以被配置为执行本文描述的方法中的任一个。通常,以上所描述的功能、方法、技术或部件中的任一个都能够以软件、固件、硬件(例如,固定逻辑电路)或它们的任何组合中被实现。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来一般性地表示软件、固件、硬件或它们的任何组合。在软件实现方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示当在处理器上被执行时执行特定任务的程序代码。本文描述的算法和方法可以由执行使处理器(一个/更多个)执行算法/方法的代码的一个或更多个处理器来执行。计算机可读存储介质的示例包含随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和可以使用磁、光或其他技术来存储指令或其他数据并可以被机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何类型的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(诸如,硬件描述语言或网表)、以及以诸如C、Java或OpenCL的编程语言代码表达的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,当其在虚拟机或其他软件环境下被适当地执行、处理、解释、编译、执行时,使支持可执行代码的计算机系统的处理器执行由代码指定的任务。
处理器、计算机或计算机系统可以是具有处理能力使得其可以执行指令的任何类型的设备、机器或专用电路、或它们的集合或部分。处理器可以是任何类型的通用处理器或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU)、微处理器、被设计为在CPU外部加速任务的任何处理单元等。计算机或计算机系统可以包括一个或更多个处理器。本领域中的技术人员将认识到,这样的处理能力被结合到很多不同的设备内,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。
还旨在包含对如本文所描述的硬件的配置进行限定的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路或用于配置可编程芯片以执行期望功能。也就是说,可以提供计算机可读存储介质,其具有在其上编码的以集成电路定义数据集的形式的计算机可读程序代码,其当在集成电路制造系统中被处理(即运行)时,配置系统以制造被配置成执行本文描述的方法中的任一个的GPU流水线或混合器硬件,或制造包括本文描述的任何装置的GPU流水线或混合器硬件。集成电路定义数据集可以例如是集成电路描述。
因此,可以提供在集成电路制造系统处制造如本文所描述的GPU流水线或混合器硬件的方法。此外,可以提供一种集成电路定义数据集,其在集成电路制造系统中被处理时使制造GPU流水线或混合器硬件的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如,作为用于配置可编程芯片的网表、代码,作为限定任何级处的集成电路的硬件描述语言(包括作为寄存器传送级(RTL)代码),作为诸如Verilog或VHDL的高级电路表示,以及作为诸如OASIS(RTM)和GDSII的低级电路表示。在逻辑上限定集成电路的较高级的表示(诸如RTL)可以在计算机系统处被处理,该计算机系统被配置成在软件环境的背景下生成集成电路的制造定义,包括电路元件和用于组合这些元件的规则的定义,以便生成由该表示如此定义的集成电路的制造定义。如软件在计算机系统处执行以便限定机器的通常情况,可以需要一个或更多个中间用户步骤(例如,提供命令、变量等),以便被配置为生成集成电路的制造定义的计算机系统执行对集成电路进行定义的代码,从而生成该集成电路的制造定义。
现在将参考图11描述在集成电路制造系统处处理集成电路定义数据集以便配置系统以GPU流水线或混合器硬件的示例。
图11示出了被配置为制造如本文的任何示例中所描述的GPU流水线或混合器硬件的集成电路(IC)制造系统1102的示例。具体地,IC制造系统1102包括布局处理系统1104和集成电路生成系统1106。IC制造系统1102配置成接收IC定义数据集(例如,定义如在本文的任何示例中所描述的GPU流水线或混合器硬件),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如在本文的任何示例中所描述的GPU流水线或混合器硬件)。IC定义数据集的处理配置IC制造系统1102以制造体现如在本文的任何示例中所描述的GPU流水线或混合器硬件的集成电路。
布局处理系统1104被配置为接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,且例如可涉及合成RTL代码以确定例如在逻辑部件(例如,与非(NAND)、或非(NOR)、与(AND)、或(OR)、MUX和触发器(FLIP-FLOP)部件)方面待生成的电路的门级表示。可通过确定逻辑部件的位置信息,根据电路的门级表示来确定电路布局。这可自动地或借助用户干预来完成,以便优化电路布局。当布局处理系统1104已经确定电路布局时,它可以向IC生成系统1106输出电路布局定义。例如,电路布局定义可以是电路布局描述。
如在本领域中已知的,IC生成系统1106根据电路布局定义生成IC。例如,IC生成系统1106可实现半导体器件制造过程以生成IC,这可以涉及光刻和化学处理步骤的多步骤序列,在该多步骤序列期间,电子电路逐步在由半导体材料制成的晶圆上被创建。电路布局定义可以是可以在光刻过程中使用的用于根据电路定义生成IC的掩模的形式。可选地,被提供到IC生成系统1106的电路布局定义可以是计算机可读代码的形式,IC生成系统1106可以使用该计算机可读代码来形成适当的掩模以在生成IC时使用。
由IC制造系统1102执行的不同过程可以都在一个位置上例如由一方来实现。可选地,IC制造系统1102可以是分布式系统,使得过程中的一些可以在不同的位置处被执行,并可以由不同方来执行。例如,以下中的阶段的一些可在不同位置和/或由不同方执行:(i)合成表示IC定义数据集的RTL代码,以便形成要生成的电路的门级表示;(ii)基于门级表示,生成电路布局;(iii)根据电路布局,形成掩模;以及(iv)使用掩模制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可以配置系统以制造GPU流水线或混合器硬件,而无需处理IC定义数据集以便确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(例如FPGA)的配置,并且该数据集的处理可以配置IC制造系统以生成具有该定义的配置的可重构处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,集成电路制造定义数据集在集成电路制造系统中被处理时可使集成电路制造系统生成如本文中所描述的设备。例如,集成电路制造系统以如上参考图11所描述的方式通过集成电路制造定义数据集进行的配置可以使如本文中所描述的设备得以制造。
在一些示例中,集成电路定义数据集可包括软件,该软件在数据集处定义的硬件上运行或与在数据集处定义的硬件组合运行。在图11所示的示例中,IC生成系统还可以由集成电路定义数据集配置,以在制造集成电路时,根据在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上,或以其他方式向集成电路提供程序代码以用于与集成电路一起使用。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可以被分布在网络中。例如,远程计算机可存储被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可以按需下载软件的片段,或在本地终端处执行一些软件指令而在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路(例如DSP、可编程逻辑阵列等)执行。
本文描述的方法可以由配置有软件的计算机执行,软件是以存储在有形存储介质上的机器可读形式,例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或以包括适合于当在计算机上运行程序时执行本文描述的任何方法的所有步骤的计算机程序代码方式的计算机程序的形式,并且其中计算机程序可以被体现在计算机可读存储介质上。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,且并不包括传播的信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可以由在其上编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。
存储在实现所公开的方面时使用的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的示例包括光学和磁性存储器技术、闪存、相变存储器、电阻式RAM。
对“逻辑”的特定引用是指执行一种功能或更多种功能的结构。逻辑的示例包括被布置成执行这些功能(一种/更多种功能)的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。作为示例,这样的晶体管和/或其它元件可以用于形成实现和/或包含存储器(例如寄存器、触发器或锁存器)、逻辑运算器(例如布尔运算)、数学运算器(例如加法器、乘法器或移位器)和互连的电路或结构。这样的元件可以作为定制电路或标准单元库、宏或以其它抽象级被提供。可在特定的布置中将这样的元件互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种功能或更多种功能;这样的编程可以由固件或软件更新或控制机构提供。被识别为执行一种功能的逻辑也可包括实现组成性功能或子过程的逻辑。在示例中,硬件逻辑具有实现固定功能操作、或多个操作、状态机或过程的电路。
当与已知的实现进行比较时,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文所实现的方法中)的实现可以引起性能改进。性能改进可以包括增加的计算性能、减少的延迟、增加的吞吐量和/或减少的功耗中的一个或更多个。在这样的设备、装置、模块和系统(例如,在集成电路中)的制造期间,性能改进可以与物理实现相折衷,从而改进制造方法。例如,性能改进可以针对布局面积进行权衡,从而与已知实现的性能匹配,但使用更少的硅。这可以例如通过以串行化方式重用功能块或在设备、装置、模块和/或系统的单元之间共享功能块来完成。相反,可以权衡在设备、装置、模块和系统的物理实现中产生改善(诸如减小的硅面积)的本申请中所阐述的概念以供改进性能。这可以通过例如在预定面积预算内制造模块的多个实例来完成。
如对技术人员将明显的是,本文给出的任何范围或设备值可以被扩展或改变而不失去所寻求的效果。
将理解的是,上面描述的益处和优点可以涉及一个实施例或可以涉及若干实施例。实施例不限于解决任何或全部所陈述的问题的那些实施例或具有任何或全部所陈述的益处和优点的那些实施例。
对“一个(an)”项目的任何引用指的是那些项目中的一个或更多个。术语“包括”在本文中用于意指包括所识别的方法块或元件,但这样的块或元件并不包括独有列表,且装置可包含额外的块或元件,并且方法可包含额外的操作或元件。此外,块、元件和操作本身并不是隐含地封闭的。
本文描述的方法的步骤可以按照任何适当的顺序被执行或在适当时同时被执行。在附图中的框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或多个步骤的并行执行。此外,各个块可以从任何方法中删除而不偏离本文描述的主题的精神和范围。上面描述的任何示例的方面可以与所描述的其它示例中的任一个的方面组合以形成另外的示例,而不失去所寻求的效果。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头仅示出在元件之间的一个示例通信流(包括数据和控制消息)。在元件之间的流可以在任一方向上或在两个方向上。
申请人特此独立地公开了本文中所描述的每个单独特征以及两个或更多个这样的特征的任何组合,公开的程度是使得这样的特征或组合能够基于本说明书作为整体依据本领域技术人员的公知常识来实现,而无论这样的特征或特征的组合是否解决了本文中所公开的任何问题。鉴于上述描述,对于本领域技术人员明显的是,可在本发明的范围内进行各种修改。

Claims (20)

1.一种GPU流水线,所述GPU流水线包括曲面细分单元和后曲面细分混合器硬件,其中,所述混合器硬件包括:
输入端,所述输入端用于接收由所述曲面细分单元输出的域空间顶点,所述域空间顶点包括所述顶点的UV坐标、所述顶点的混合权重,以及在相邻顶点的UV坐标不是所述顶点本身的UV坐标所固有的情况下的所述相邻顶点的UV坐标;
高速缓存,所述高速缓存被布置成存储数据对,每个数据对包括UV坐标和由域着色器根据所述UV坐标生成的世界空间顶点;以及
混合单元,所述混合单元被布置成接收输入顶点的混合权重、对于所述输入顶点及其相邻顶点的由域着色器生成或从所述高速缓存访问的世界空间顶点,并且使用所述混合权重生成对于所述输入顶点的单个世界空间顶点,
其中,所述高速缓存被布置成,在针对UV坐标的高速缓存条目处高速缓存命中的情况下,从所述高速缓存条目输出所述世界空间顶点,并且在针对UV坐标的高速缓存未命中的情况下,将所述UV坐标输出到域着色器;以及
其中,所述高速缓存被布置成接收并存储由所述域着色器生成的对于输入顶点及其邻点的世界空间顶点。
2.根据权利要求1所述的GPU流水线,其中,所述混合器硬件还包括:
混合权重评估逻辑块,所述混合权重评估逻辑块包括硬件逻辑,所述硬件逻辑被布置成确定输入顶点的所述混合权重是否等于一,并且响应于确定输入顶点的所述混合权重不等于一,将所述输入顶点的邻点的UV坐标输出到所述高速缓存。
3.根据权利要求1所述的GPU流水线,其中,所述混合器硬件还包括:
顶点解压缩硬件逻辑块,所述顶点解压缩硬件逻辑块被布置成根据所述域空间顶点生成所述相邻顶点的UV坐标,并且将所述UV坐标输出到所述高速缓存;
混合权重评估逻辑块,所述混合权重评估逻辑块包括硬件逻辑,所述硬件逻辑被布置成确定输入顶点的所述混合权重是否等于一,并且响应于确定输入顶点的所述混合权重不等于一,将所述域空间顶点输出到所述顶点解压缩硬件逻辑块。
4.根据权利要求2或3所述的GPU流水线,其中,所述混合权重评估逻辑块还被布置成,响应于确定输入顶点的所述混合权重等于一,将所述顶点的UV坐标输出到所述高速缓存,并且其中,所述高速缓存被布置成,在针对所述输入顶点的邻点的UV坐标中的任何一个的高速缓存条目处高速缓存命中的情况下,从所述高速缓存条目输出所述世界空间顶点,并且在针对所述输入顶点的所述邻点中的一个或更多个邻点的UV坐标高速缓存未命中的情况下,将所述一个或更多个邻点的所述UV坐标输出到域着色器。
5.根据权利要求2或3所述的GPU流水线,其中,所述混合权重评估逻辑块还被布置成,响应于确定输入顶点的所述混合权重等于一,将所述顶点的UV坐标输出到域着色器。
6.根据权利要求1所述的GPU流水线,其中,当所述高速缓存中的所有条目都已满时,所述高速缓存还被布置成响应于从所述域着色器接收世界空间顶点,从所述高速缓存中选择的条目移除数据对,并将所接收的世界空间顶点存储在所述选择的条目中。
7.根据权利要求6所述的GPU流水线,其中,所述高速缓存还被布置成选择所述高速缓存中最旧的条目用于移除。
8.根据权利要求6所述的GPU流水线,其中,所述高速缓存还被布置成选择所述高速缓存中的条目用于移除,该条目包括在UV空间中距离对应于所接收的世界空间顶点的UV坐标最远的UV坐标。
9.根据权利要求1所述的GPU流水线,其中,所述混合器硬件还包括:
域着色器,所述域着色器被布置成接收曲面片数据,对输入到所述域着色器的任何UV坐标执行着色操作以生成世界空间顶点,并将所述世界空间顶点输出到所述高速缓存和所述混合单元。
10.根据权利要求1所述的GPU流水线,其中,所述混合单元包括:
线性平均硬件逻辑块,所述线性平均硬件逻辑块包括用于接收相邻顶点的一个或更多个世界空间顶点的输入端和被布置成使用固定权重来生成所有相邻世界空间顶点的线性平均的硬件逻辑;以及
硬件插值块,所述硬件插值块包括输入端和硬件逻辑,所述输入端用于接收对于所述输入顶点本身的世界空间顶点、由所述线性平均硬件逻辑块输出的世界空间顶点以及所述混合权重,所述硬件逻辑被布置成使用所述混合权重来执行对于所述输入顶点本身的世界空间顶点和由所述线性平均硬件逻辑块输出的世界空间顶点的线性插值,以生成对于所述输入顶点的单个世界空间顶点。
11.一种执行后曲面细分混合的方法,包括:
接收由曲面细分单元输出的域空间顶点,所述域空间顶点包括所述顶点的UV坐标、所述顶点的混合权重,以及在相邻顶点的UV坐标不是所述顶点本身的UV坐标所固有的情况下的所述相邻顶点的UV坐标;
在高速缓存中存储数据对,每个数据对包括UV坐标和由域着色器根据所述UV坐标生成的世界空间顶点;
响应于所述高速缓存中的条目处的高速缓存命中,从所述高速缓存条目输出所述世界空间顶点;
响应于所述高速缓存中的条目处的高速缓存未命中,将所述UV坐标输出到域着色器,并在所述域着色器中根据所述UV坐标生成世界空间顶点;以及
在对于所述顶点和相邻顶点的世界空间顶点已经从所述高速缓存或所述域着色器被输出后,使用所述混合权重在混合单元中生成对于输入顶点的单个世界空间顶点。
12.一种GPU流水线,所述GPU流水线包括曲面细分单元和后曲面细分混合器硬件,其中,所述混合器硬件包括:
输入端,所述输入端用于接收由所述曲面细分单元输出的域空间顶点,所述域空间顶点包括所述顶点的UV坐标、所述顶点的混合权重,以及在相邻顶点的UV坐标不是所述顶点本身的UV坐标所固有的情况下的所述相邻顶点的UV坐标;
内容可寻址存储器,所述内容可寻址存储器被布置成存储数据元组,每个数据元组包括UV坐标、片引用和索引;
计数器,所述计数器被布置成当数据元组从所述内容可寻址存储器中被移除时递增;
混合单元,所述混合单元被布置成接收输入顶点的混合权重、由域着色器在单个任务中生成的对于所述输入顶点及其相邻顶点的世界空间顶点,并且生成对于所述输入顶点的单个世界空间顶点;
任务管理器;
输出索引缓冲器;以及
输出顶点缓冲器,
其中,所述内容可寻址存储器被布置成在接收到输入顶点时,确定所述输入顶点的UV坐标是否被存储在所述内容可寻址存储器中,并且响应于所述UV坐标被存储在所述内容可寻址存储器中的数据元组中,将来自所述数据元组的所述索引输出到所述输出索引缓冲器,并且响应于所述UV坐标没有被存储在所述内容可寻址存储器中,从所述内容可寻址存储器中移除数据元组,将所述UV坐标添加到索引的值等于所述计数器的值的新数据元组,并将所述索引输出到所述输出索引缓冲器,并将所述输入顶点输出到所述任务管理器,并且
其中,所述任务管理器被布置成从所述内容可寻址存储器接收输入顶点,将对于所述输入顶点和所述输入顶点的相邻顶点的UV坐标打包到相同任务内的作业中,并且响应于确定任务已满,将所述任务中的所有作业输出到所述域着色器。
13.根据权利要求12所述的GPU流水线,还包括:
域着色器,所述域着色器被布置成接收曲面片数据,并对输入到所述域着色器的任何UV坐标执行着色操作,以生成世界空间顶点。
14.根据权利要求12或13所述的GPU流水线,其中,所述任务管理器被布置成通过以下方式将UV坐标打包到作业中:
将对于输入顶点的UV坐标放置到任务前端处的作业中;
将对于相邻顶点的UV坐标放置到任务后端处的作业中;以及
响应于将对于输入顶点的UV坐标放置到任务所述前端处的作业中,其中所述UV坐标匹配对于相邻顶点的已经放置的UV坐标,移除对于所述相邻顶点的作业。
15.根据权利要求12所述的GPU流水线,还包括:
顶点解压缩硬件逻辑块,所述顶点解压缩硬件逻辑块被布置成根据所述域空间顶点生成所述相邻顶点的UV坐标,并将所述UV坐标输出到所述内容可寻址存储器。
16.根据权利要求12所述的GPU流水线,还包括:
转换器逻辑块,所述转换器逻辑块包括硬件逻辑,所述硬件逻辑被布置成在被输入到所述任务管理器之前,将所述顶点的坐标从定点形式转换成浮点形式。
17.根据权利要求12所述的GPU流水线,还包括:
输入索引缓冲器、CAM索引缓冲器和在所述内容可寻址存储器和所述输出索引缓冲器之间的重新映射逻辑块,并且其中,
所述CAM索引缓冲器被布置成接收由所述内容可寻址存储器输出并去往所述输出索引缓冲器的索引,并且
所述重新映射逻辑块包括硬件逻辑,所述硬件逻辑被布置成通过使用存储在所述输入索引缓冲器中的索引来组合输入到所述输出索引缓冲器的数据,以引用由所述内容可寻址存储器生成并存储在所述CAM索引缓冲器中的索引。
18.根据权利要求12所述的GPU流水线,还包括一个或更多个输入缓冲器。
19.根据权利要求12所述的GPU流水线,其中,所述混合单元包括:
线性平均硬件逻辑块,所述线性平均硬件逻辑块包括用于接收相邻顶点的一个或更多个世界空间顶点的输入端和被布置成使用固定权重来生成所有相邻世界空间顶点的线性平均的硬件逻辑;以及
硬件插值块,所述硬件插值块包括输入端和硬件逻辑,所述输入端用于接收对于所述输入顶点本身的世界空间顶点、由所述线性平均硬件逻辑块输出的世界空间顶点以及混合权重,所述硬件逻辑被布置成使用所述混合权重来执行对于所述输入顶点本身的所述世界空间顶点和由所述线性平均硬件逻辑块输出的所述世界空间顶点的线性插值,以生成对于所述输入顶点的单个世界空间顶点。
20.一种执行后曲面细分混合的方法,包括:
接收由曲面细分单元输出的域空间顶点,所述域空间顶点包括所述顶点的UV坐标、所述顶点的混合权重以及在其中相邻顶点的UV坐标不是所述顶点本身的UV坐标所固有的情况下的所述相邻顶点的UV坐标;
将数据元组存储在内容可寻址存储器中,每个数据元组包括UV坐标、片引用和索引;
在接收到输入顶点时,确定所述输入顶点的UV坐标是否被存储在所述内容可寻址存储器中;
响应于所述UV坐标被存储在所述内容可寻址存储器中的数据元组中,将来自所述数据元组的所述索引输出到输出索引缓冲器;
响应于所述UV坐标没有被存储在所述内容可寻址存储器中:
从所述内容可寻址存储器中移除数据元组;
将所述UV坐标添加到索引的值等于所述计数器的值的新数据元组中;
将所述索引输出到所述输出索引缓冲器;
由任务管理器将对于所述输入顶点和所述输入顶点的相邻顶点的UV坐标打包到同一任务内的作业中;以及
响应于确定任务已满,将所述任务中的所有所述作业输出到域着色器和混合单元。
CN201910267986.1A 2018-04-05 2019-04-03 混合硬件 Active CN110363856B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1805656.4 2018-04-05
GB1805656.4A GB2572617B (en) 2018-04-05 2018-04-05 Blending hardware

Publications (2)

Publication Number Publication Date
CN110363856A true CN110363856A (zh) 2019-10-22
CN110363856B CN110363856B (zh) 2022-08-16

Family

ID=62202818

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910267986.1A Active CN110363856B (zh) 2018-04-05 2019-04-03 混合硬件

Country Status (4)

Country Link
US (4) US10937228B2 (zh)
EP (2) EP3550518B1 (zh)
CN (1) CN110363856B (zh)
GB (1) GB2572617B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
GB2526598B (en) * 2014-05-29 2018-11-28 Imagination Tech Ltd Allocation of primitives to primitive blocks
GB2572617B (en) * 2018-04-05 2021-06-16 Imagination Tech Ltd Blending hardware
US20220414818A1 (en) * 2021-06-26 2022-12-29 Intel Corporation Pointer de-referencing technologies
US11967024B2 (en) * 2021-11-03 2024-04-23 Nvidia Corporation Extracting triangular 3-D models, materials, and lighting from images
CN117764808B (zh) * 2023-12-22 2024-09-17 摩尔线程智能科技(北京)有限责任公司 Gpu的数据处理方法、装置及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6597363B1 (en) * 1998-08-20 2003-07-22 Apple Computer, Inc. Graphics processor with deferred shading
US6697063B1 (en) * 1997-01-03 2004-02-24 Nvidia U.S. Investment Company Rendering pipeline
US7170515B1 (en) * 1997-11-25 2007-01-30 Nvidia Corporation Rendering pipeline
CN104737208A (zh) * 2012-10-24 2015-06-24 高通股份有限公司 曲面细分单元中的顶点次序
CN104956402A (zh) * 2013-01-30 2015-09-30 高通股份有限公司 用于曲面细分的域坐标的输出排序
CN105684037A (zh) * 2013-10-02 2016-06-15 微软技术许可有限责任公司 图形处理单元
US20160358373A1 (en) * 2015-06-05 2016-12-08 Imagination Technologies Limited Tessellation Method
CN106251377A (zh) * 2015-06-05 2016-12-21 想象技术有限公司 使用位移因数的细分方法
CN106504184A (zh) * 2015-09-08 2017-03-15 想象技术有限公司 用于处理子图元的图形处理方法和系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110310102A1 (en) * 2010-06-17 2011-12-22 Via Technologies, Inc. Systems and methods for subdividing and storing vertex data
US9412197B2 (en) * 2012-04-04 2016-08-09 Qualcomm Incorporated Patched shading in graphics processing
US9142060B2 (en) * 2012-08-30 2015-09-22 Qualcomm Incorporated Computation reduced tessellation
US20160093102A1 (en) * 2014-09-25 2016-03-31 Peter L. Doyle Efficient tessellation cache
GB2533443B (en) 2015-06-05 2018-06-06 Imagination Tech Ltd Tessellation method using recursive sub-division of triangles
GB2572617B (en) * 2018-04-05 2021-06-16 Imagination Tech Ltd Blending hardware

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697063B1 (en) * 1997-01-03 2004-02-24 Nvidia U.S. Investment Company Rendering pipeline
US7170515B1 (en) * 1997-11-25 2007-01-30 Nvidia Corporation Rendering pipeline
US6597363B1 (en) * 1998-08-20 2003-07-22 Apple Computer, Inc. Graphics processor with deferred shading
CN104737208A (zh) * 2012-10-24 2015-06-24 高通股份有限公司 曲面细分单元中的顶点次序
CN104956402A (zh) * 2013-01-30 2015-09-30 高通股份有限公司 用于曲面细分的域坐标的输出排序
CN105684037A (zh) * 2013-10-02 2016-06-15 微软技术许可有限责任公司 图形处理单元
US20160358373A1 (en) * 2015-06-05 2016-12-08 Imagination Technologies Limited Tessellation Method
CN106251377A (zh) * 2015-06-05 2016-12-21 想象技术有限公司 使用位移因数的细分方法
CN106251391A (zh) * 2015-06-05 2016-12-21 想象技术有限公司 细分方法
CN106504184A (zh) * 2015-09-08 2017-03-15 想象技术有限公司 用于处理子图元的图形处理方法和系统

Also Published As

Publication number Publication date
GB2572617B (en) 2021-06-16
US20190311529A1 (en) 2019-10-10
US20240303912A1 (en) 2024-09-12
US20220270320A1 (en) 2022-08-25
GB2572617A (en) 2019-10-09
EP3550518B1 (en) 2024-07-17
CN110363856B (zh) 2022-08-16
US12026828B2 (en) 2024-07-02
EP3971837A1 (en) 2022-03-23
GB201805656D0 (en) 2018-05-23
US11361499B2 (en) 2022-06-14
EP3550518A1 (en) 2019-10-09
US10937228B2 (en) 2021-03-02
US20210142554A1 (en) 2021-05-13

Similar Documents

Publication Publication Date Title
CN110363856A (zh) 混合硬件
US11341601B2 (en) Task assembly for SIMD processing
US11127196B2 (en) Transformed geometry data cache for graphics processing systems
CN110349273A (zh) 访问图元数据
CN111429556B (zh) 图形处理系统中的基于基元块的光栅化
CN109979000A (zh) 多视图图元块
US11842435B2 (en) Methods and tiling engines for tiling primitives in a graphics processing system
US12131403B2 (en) Task merging
GB2555929A (en) Task assembly
CN110349266B (zh) 曲面细分操作中的排序
GB2592046A (en) Methods and tiling engines for tiling primitives in a graphics processing system
GB2592045A (en) Data structures, methods and primitive block generators for storing primitives in a graphics processing system

Legal Events

Date Code Title Description
PB01 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