具体实施方式
如背景技术中所述,现有技术中,域着色器对该细分点重复地进行多次插值运算,给硬件带来不必要的计算开销。尤其在域着色器插值算法复杂,且重合位置的细分点过多时,带来的重复计算开销非常可观。例如,第一个环做好缝合操作后,涉及的点覆盖了索引0-39的点,共40个。第二个环做缝合操作时,第一个环和第二个环的公共边上的点,即索引24-39的点会复用。此时这些细分点作为新的点重复参与计算,极大地降低了硬件的效率。
本申请技术方案中,图形处理单元在获得待显示图形的细分点及其二维坐标后,先判断细分点的二维坐标在标签缓存中是否命中。如果命中,则意味着已经对该细分点计算其对应的三维空间位置,此时可以直接通过细分点的标识查找细分点对应的三维空间位置,避免了对同一细分点重复的插值计算过程,节省了图形处理单元在曲面细分处理过程中的计算开销;尤其是在重复的细分点数量庞大的情况下,能够极大地提升曲面细分的计算效率。
进一步地,细分点的二维坐标在标签缓存中未命中,生成所述细分点的标识,并存入标签缓存。本申请技术方案中,相对于细分点的二维坐标,细分点的标识的数据量更小,通过生成并使用数据点的标识进行三维空间位置的查找和获取,能够进一步提升曲面细分的计算效率。
为使本申请的上述目的、特征和优点能够更为明显易懂,下面结合附图对本申请的具体实施例做详细的说明。
参见图1,本申请提供的图形处理单元包括标签缓存101和运算处理单元102。其中,标签缓存101用于缓存细分点的二维坐标以及标识。运算处理单元102用于执行图2所示的各个步骤:
步骤201:处理待显示图形,得到待显示图形的细分点及其二维坐标。
步骤202:判断所述细分点的二维坐标在标签缓存中是否命中。
步骤203:如果命中(hit),则根据细分点的标识查找获取细分点的标识所指示的细分点对应的三维空间位置。
可以理解的是,在具体实施中,上述方法的各个步骤可以采用软件程序的方式实现,该软件程序运行于芯片或芯片模组内部集成的处理器中。该方法也可以采用软件结合硬件的方式实现,本申请不作限制。
本发明实施例所称处理待显示图形可以是二维平面图形,也可以是三维图形。
本发明实施例所称细分点可以是指待显示图形经过曲面细分处理后得到的点。具体地,待显示图形被划分为面片(patch),每一面片被划分为多个环,每个环的内边和外边上被细分的点即为细分点。每一细分点具有二维坐标,可以采用(u,v)来表示。
本实施例中,标签缓存101可以是图像处理单元中新增的缓存硬件,也可以是复用图像处理单元中已有的缓存硬件。
本实施例中,标签缓存101中缓存的是已执行插值运算的细分点的二维坐标。由于标签缓存101中不包含三维空间位置(也即插值运算结果),也不包含重复的细分点的二维坐标,因此标签缓存101所需的存储空间并不大,即使标签缓存101是在图形处理单元中新增的缓存硬件,也不会对图形处理单元的性能造成影响。
通常而言,运算处理单元在得到待显示图形的细分点及其二维坐标后,会根据细分点的二维坐标对各个控制点(control point)进行插值运算,控制点具有三维二维坐标,包含空间的信息。通过插值运算,每个细分点二维坐标由平面扩展到三维空间。
而本实施例中,运算处理单元102在得到待显示图形的细分点及其二维坐标后,并不会立即执行插值运算,而是先在标签缓存101中进行命中测试,也即判断细分点的二维坐标在标签缓存中是否命中。如果命中,则意味着该细分点的二维坐标已经执行过插值运算,那么可以不必再次执行插值运算。在这种情况下,运算处理单元102可以根据细分点的标识查找获取细分点的标识所指示的细分点对应的三维空间位置。细分点对应的三维空间位置即是细分点的二维坐标经过插值运算后的结果。
换言之,本发明实施例避免了对同一细分点重复的插值计算过程,节省了图形处理单元在曲面细分处理过程中的计算开销;尤其是在重复的细分点数量庞大的情况下,能够极大地提升曲面细分的计算效率。
相应地,如果细分点的二维坐标在标签缓存101中未命中(miss),则运算处理单元102根据细分点的二维坐标计算细分点对应的三维空间位置,也即对细分点的二维坐标执行插值运算。
相应地,如果细分点的二维坐标在标签缓存101中未命中,则运算处理单元102生成细分点的标识,并存入标签缓存101,然后根据细分点的二维坐标计算细分点对应的三维空间位置。这也就意味着,标签缓存101中缓存的是已执行插值运算的细分点的二维坐标。
请参照图3,图3示出了图形处理单元的另一种结构。图形处理单元包括运算处理单元和标签缓存305。运算处理单元包括外壳着色器(Hull Shader)301、镶嵌器(tessellator)302、域着色器(Domain Shader)303和几何着色器(Geometry Shader)304。
其中,外壳着色器301用于将待显示图形进行面片的划分以及获得细分因子(TessFactor)。镶嵌器302用于获得待显示图形的细分点及其二维坐标。具体地,镶嵌器302基于细分因子,可以对面片划分合适数量的环以及各个环上的细分点。并对各个环内缘上的内缘细分点和外缘上的外缘细分点执行缝合操作。其中,细分因子包括外环细分因子(OuterTess Factor, Outer tf)和内环细分因子(Inner Tess Factor, Inner tf)。外环细分因子用于确定面片最外环的细分程度,内环细分因子用于确定除面片最外环之外其他所有内环的细分程度。镶嵌器302可以获得输出点序列,也称为三角带(triangle strip)。三角带中相邻三个细分点表示三角形的三个顶点。
域着色器303可以从镶嵌器302获得细分点及其二维坐标,并根据细分点的二维坐标计算细分点对应的三维空间位置。本申请中,标签缓存305为供域着色器专用的缓存。域着色器303在计算三维空间位置之前,先判断细分点的二维坐标在标签缓存305中是否命中。
几何着色器304根据细分点的标识查找获取该细分点的标识所指示的细分点对应的三维空间位置。几何着色器304用于对各个三维空间位置进行位置变换。几何着色器304可以在顶点发送到下一着色阶段之前对顶点进行变换,将一个图元变换为另一个完全不同的图元,或者修改图元的位置。
本实施例中,若细分点的二维坐标在标签缓存305中命中,域着色器303不再执行三维空间位置的计算,直接将细分点的标识发送给几何着色器304,几何着色器304可以从存储器中查找细分点的标识所指示的细分点对应的三维空间位置。该存储器可以是外部存储器,也可以是内部存储器,该存储器中存储有细分点的标识以及细分点对应的三维空间位置。
若细分点的二维坐标在标签缓存305中未命中,域着色器303根据细分点的二维坐标计算细分点对应的三维空间位置,并将该细分点对应的三维空间位置发送给几何着色器304。
在另一个具体实施例中,请参照图4,域着色器403包括组装器4031、调度器4032以及计算单元4033。
其中,组装器4031用于对来自镶嵌器402的细分点生成细分点的标识,细分点的标识用于该细分点的身份识别。调度器4032按顺序批量地将细分点的二维坐标及细分点的标识调度至计算单元4033。例如,每批组装满32个细分点后发送一次。对一个面片细分结束后,最后一批不满32个细分点的情况,则不再等待直接发送。计算单元4033根据细分点二维坐标对各控制点做插值运算,运算后得到三维空间位置,每个细分点二维坐标由平面扩展到空间。三维空间位置存放在顶点缓存405中。顶点缓存405存放了每个插值后细分点的标识以及该细分点的三维空间位置。通过域着色器403插值运算后,三维空间中零星的控制点变化为空间中密集的点。
在组装器4031阶段,判断细分点的二维坐标在标签缓存404中是否命中。如果命中,组装器4031直接将细分点的标识发送至几何着色器406。几何着色器406根据细分点的标识从顶点缓存405中获取该细分点的三维空间位置。
如果未命中,组装器4031将细分点的标识发送至几何着色器406。调度器4032按顺序批量地将细分点的二维坐标及细分点的标识调度至计算单元4033。计算单元4033根据细分点二维坐标对各控制点做插值运算,运算后得到三维空间位置。几何着色器406根据细分点的标识从顶点缓存405中获取该细分点的三维空间位置。
本发明实施例能够显著地降低域着色器的工作负载,降低硬件数据运算的带宽,并提升曲线细分点的信息利用率。
进一步地,继续参照图4,图形处理单元中可以包括一个标签缓存404以及一个顶点缓存405。也就是说,标签缓存404与顶点缓存405是一一对应的关系。下面结合具体的实施例对本申请的有益效果进行说明。
请参照图5,面片的形状为四边形。对于第一个环的第一个缝合部分,也即细分点0-6以及细分点24-28所界定的部分,镶嵌器发送给域着色器的细分点序列为{0,1,24,25,1,2,25,26,2,3,26,4,27,5,28,6}。标签缓存中存储的细分点为{0,1,24,25,2,26,3,4,27,5,28,6}。通过本发明实施例技术方案,对于细分点序列中的第五个细分点1,第七个细分点25,第九个细分点2,以及第十一个细分点26,域着色器均无需对其进行插值运算,命中率为命中的细分点数量与细分点序列中细分点数量的比值,也即4/16=25%。命中率越高,获得的增益也就越大。
相应地,对于第一个环的第二个缝合部分,也即细分点6-12以及细分点28-32所界定的部分,镶嵌器发送给域着色器的细分点序列为{6, 7, 28, 29, 7, 8, 29, 30, 8, 9,30, 10, 31, 11, 32, 12},标签缓存中存储的细分点为{0,1,24,25,2,26,3,4,27,5,28,6, 7, 29, 8, 30, 9, 10, 31, 11, 32, 12},命中率为10/32=31.3%。
相应地,对于第一个环的第三个缝合部分,也即细分点12-18以及细分点32-36所界定的部分,镶嵌器发送给域着色器的细分点序列为{12, 13, 32, 33, 13, 14, 33, 34,14, 15, 34, 16, 35, 17, 36, 18},标签缓存中存储的细分点为{0,1,24,25,2,26,3,4,27,5,28,6, 7, 29, 8, 30, 9, 10, 31, 11, 32, 12, 13, 33, 14, 34, 15, 16, 35,17, 36, 18},命中率为16/48=33.3%。
相应地,对于第一个环的第四个缝合部分,也即细分点18-23以及细分点36-24所界定的部分,镶嵌器发送给域着色器的细分点序列为{18, 19, 36, 37, 19, 20, 37, 38,20, 21, 38, 22, 39, 23, 24, 0},标签缓存中存储的细分点为{0,1,24,25,2,26,3,4,27,5,28,6, 7, 29, 8, 30, 9, 10, 31, 11, 32, 12, 13, 33, 14, 34, 15, 16, 35,17, 36, 18, 19, 37, 20, 38, 21, 22, 39, 23},命中率为24/64=37.5%。
在第一个环细分结束后,本发明实施例能够降低运算处理单元中域着色器阶段37.5%的计算开销。
继续参照图6和图7,第二个环细分结束后命中率为56/104 = 53.8%。第三个环细分结束后命中率为71/120 = 59.2%
也就是说,在该面片细分结束后,本发明实施例能够降低运算处理单元中域着色器阶段59.2%的计算开销。
在一个非限制性的实施例中,由于标签缓存的存储空间有限,为了保证曲面细分过程的正常开展,可以在标签缓存中元素全满的情况下,清空标签缓存。
需要说明的是,也可以采用其他任意可实施的方式清空标签缓存,例如在一个面片的曲面细分过程结束后清空标签缓存,本申请实施例对此不作限制。
关于本申请实施例的更多具体实现方式,请参照前述实施例,此处不再赘述。
请参照图8,图8示出了一种图形处理单元的结构。图形处理单元80包括:存储器801、运算处理单元802和标签缓存803。
标签缓存803用于缓存细分点的二维坐标以及标识。存储器801上存储有可在运算处理单元802上运行的计算机程序,运算处理单元802运行计算机程序时执行前述细分点处理方法的步骤。
本申请实施例避免了对同一细分点重复的插值计算过程,节省了图形处理单元在曲面细分处理过程中的计算开销;尤其是在重复的细分点数量庞大的情况下,能够极大地提升曲面细分的计算效率。
关于上述实施例中描述的各个装置、产品包含的各个模块/单元,其可以是软件模块/单元,也可以是硬件模块/单元,或者也可以部分是软件模块/单元,部分是硬件模块/单元。例如,对于应用于或集成于芯片的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于芯片模组的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于芯片模组的同一组件(例如芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片模组内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现;对于应用于或集成于终端设备的各个装置、产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现,不同的模块/单元可以位于终端设备内同一组件(例如,芯片、电路模块等)或者不同组件中,或者,至少部分模块/单元可以采用软件程序的方式实现,该软件程序运行于终端设备内部集成的处理器,剩余的(如果有)部分模块/单元可以采用电路等硬件方式实现。
本申请实施例还公开了一种存储介质,所述存储介质为计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时可以执行图2中所示方法的步骤。所述存储介质可以包括只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、磁盘或光盘等。存储介质还可以包括非挥发性存储器(non-volatile)或者非瞬态(non-transitory)存储器等。
本申请实施例中出现的“多个”是指两个或两个以上。
本申请实施例中出现的第一、第二等描述,仅作示意与区分描述对象之用,没有次序之分,也不表示本申请实施例中对设备个数的特别限定,不能构成对本申请实施例的任何限制。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令或计算机程序。在计算机上加载或执行所述计算机指令或计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的;例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式;例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的部分步骤。
虽然本申请披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。