CN112017268B - 渲染优化的方法、系统和介质 - Google Patents
渲染优化的方法、系统和介质 Download PDFInfo
- Publication number
- CN112017268B CN112017268B CN202010436615.4A CN202010436615A CN112017268B CN 112017268 B CN112017268 B CN 112017268B CN 202010436615 A CN202010436615 A CN 202010436615A CN 112017268 B CN112017268 B CN 112017268B
- Authority
- CN
- China
- Prior art keywords
- rendering
- shader
- buffers
- draw call
- coordinates
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/45525—Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
- G06T15/87—Gouraud shading
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/363—Graphics controllers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- Image Generation (AREA)
Abstract
本文中描述一种渲染优化。在实例中,描述一种渲染场景的方法,其包括:识别当前渲染内的绘制调用(其可以是所述渲染中的第一绘制调用或所述渲染中的后续绘制调用),并分析供所述绘制调用使用的一系列着色器中的最后着色器,以确定所述最后着色器是否在匹配当前片段位置的坐标处从一个或多个缓冲区取样。如果此确定是肯定的,那么所述方法进一步包括将所述最后着色器重新编译,以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。
Description
技术领域
本申请涉及图形系统中的渲染优化。
背景技术
在计算机图形中,术语‘渲染’可用于描述用来从计算机模型创建图像(例如,用于屏幕显示)的过程,并且在多个实例中,在创建用于显示的单个数据帧中涉及多个渲染操作。在渲染场景(例如,3D场景)时,场景中的物体划分成大量小块片,称为图元,它们的形状通常是三角形的。存在数种可以实施渲染的方式,其中一个实例是基于图块的渲染。在基于图块的渲染中,渲染空间(例如,屏幕空间)划分成多个图块,然后这些图块可以彼此独立地进行渲染。使用基于图块的渲染可以提高图形处理系统的效率,特别是在存在大量图元的情况下。
在图形处理系统中,主机处理器(例如CPU)处的驱动器处理传入数据流(例如,来自应用程序)并输出使图形处理单元(GPU)执行渲染操作等操作的命令。一旦完成帧的渲染,就将所得数据(例如,渲染空间中每个像素的颜色值)写入到帧缓冲区。接着,显示器硬件可将帧缓冲区中的数据转换成可以在显示器上显示的信号。
下文描述的实施例仅作为举例而提供,并非是对解决已知渲染方法和已知图形处理管线的任一或所有缺点的实施方案的限制。
发明内容
提供此发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容部分并不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。
本文中描述一种渲染优化。在实例中,描述一种渲染场景的方法,其包括:识别当前渲染内的绘制调用(其可以是所述渲染中的第一绘制调用或所述渲染中的后续绘制调用),并分析供所述绘制调用使用的一系列着色器中的最后着色器,以确定所述最后着色器是否在匹配当前片段位置的坐标处从一个或多个缓冲区取样。如果此确定是肯定的,那么所述方法进一步包括将所述最后着色器重新编译,以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。
第一方面提供一种在图形系统中渲染场景的方法,所述方法包括:识别当前渲染内的第一绘制调用,其中所述当前渲染从一个或多个缓冲区取样;分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器,以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样;以及响应于确定供所述第一绘制调用使用的所述最后着色器确实在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样,将所述最后着色器重新编译以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。
将所述最后着色器重新编译可进一步包括:去除计算匹配当前片段位置的所述坐标的任何指令。所述方法可进一步包括将所述一系列着色器中的任何着色器重新编译以省略计算或输出只供在重新编译所述最后着色器时已经去除的指令使用的参数的任何指令。
分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样可包括:分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器,以确定所述最后着色器是否使用与所述当前片段位置相对应的屏幕空间坐标从所述一个或多个缓冲区取样。
分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样可包括:检查所述一系列着色器中的至少所述最后着色器中的代码以确定一组预定义图案中的一个是否存在于所述代码内。
分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样可包括:检查所述一系列着色器中的至少所述最后着色器中的代码以确定用于从所识别的缓冲区取样的样本位置是否使用屏幕空间变换在所述最后着色器中计算出。
当前渲染内的第一绘制调用可以是所述当前渲染中的初始绘制调用。
第二方面提供一种包括通用处理器和图形处理器的图形系统,其中所述通用处理器包括驱动器和编译器,其中所述驱动器配置成:识别当前渲染内的第一绘制调用,其中所述当前渲染从一个或多个缓冲区取样;分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器,以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样;以及响应于确定供所述第一绘制调用使用的所述最后着色器确实在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样,触发所述编译器对所述最后着色器的重新编译,以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。
所述编译器可以配置成响应于从所述驱动器接收到触发信号而:将所述最后着色器重新编译,以便用在存储于片上寄存器中的坐标处从一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。所述编译器可以进一步配置成响应于从所述驱动器接收到触发信号而:将所述最后着色器重新编译,以去除计算匹配当前片段位置的所述坐标的任何指令。所述编译器可以进一步配置成响应于从所述驱动器接收到触发信号而:将所述最后着色器重新编译,以省略计算或输出只供在重新编译所述最后着色器时已经去除的指令使用的参数的任何指令。
其它方面提供一种配置成执行本文所描述的任何方法的图形系统;体现为集成电路上的硬件的本文所描述的图形系统;计算机可读代码,其配置成当所述代码运行时使本文所描述的任何方法得以执行;计算机可读存储介质,在其上对所述计算机可读代码进行编码;一种使用集成电路制造系统制造如本文中所描述的图形系统的方法;集成电路定义数据集,其在集成电路制造系统中处理时将所述集成电路制造系统配置成制造如本文中所描述的图形系统;一种计算机可读存储介质,在其上存储有集成电路的计算机可读描述,所述计算机可读描述在集成电路制造系统中处理时使所述集成电路制造系统制造如本文中所描述的图形系统;一种集成电路制造系统,其配置成制造如本文中所描述的图形系统;以及一种集成电路制造系统,其包括:计算机可读存储介质,在其上存储有集成电路的描述如本文中所描述的图形系统的计算机可读描述;布局处理系统,其配置成处理所述集成电路描述以便生成体现所述图形系统的集成电路的电路布局描述;以及集成电路生成系统,其配置成根据所述电路布局描述制造所述图形系统。
如本文中所描述的图形系统可以体现为集成电路上的硬件。可提供一种在集成电路制造系统处制造如本文所描述的图形系统的方法。可提供一种集成电路定义数据集,其在集成电路制造系统中处理时将所述系统配置成制造如本文中所描述的图形系统。可提供一种非暂时性计算机可读存储介质,在其上存储有集成电路的计算机可读描述,所述计算机可读描述在处理时使布局处理系统生成供集成电路制造系统用于制造如本文中所描述的图形系统的电路布局描述。
可提供一种集成电路制造系统,其包括:非暂时性计算机可读存储介质,在其上存储有描述如本文中所描述的处理系统的计算机可读集成电路描述;布局处理系统,其配置成处理所述集成电路描述以便生成体现如本文中所描述的图形系统的集成电路的电路布局描述;以及集成电路生成系统,其配置成根据所述电路布局描述制造如本文中所描述的图形系统。
可提供用于执行本文中描述的任一方法的计算机程序代码。可提供非暂时性计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使所述计算机系统执行本文中描述的任何方法。
所属领域的技术人员将清楚,上述特征可在适当时组合,并且可与本文所描述的实例的任一方面组合。
附图说明
现在将参考附图详细描述实例,在附图中:
图1A是示出渲染场景的第一示例方法的流程图;
图1B是示出渲染场景的第二示例方法的流程图,第二示例方法是图1A中示出的方法的变化形式;
图2是包括一系列渲染的第一示例渲染操作的图形表示;
图3是示出渲染场景的第三示例方法的流程图,第三示例方法是图1A中示出的方法的变化形式;
图4是示出渲染场景的第四示例方法的流程图,第四示例方法是图1A中示出的方法的变化形式;
图5是包括一系列渲染的第二示例渲染操作的图形表示;
图6是可以实施本文所描述的任何方法的图形系统的示意图;
图7是示出渲染场景的第五示例方法的流程图;
图8是示出渲染场景的第六示例方法的流程图,第六示例方法是图1A和7中所示的方法的变化形式;且
图9示出用于生成体现图形处理系统的集成电路的集成电路制造系统。
附图示出各种实例。技术人员应了解,附图所示出的元件边界(例如方框、方框群组,或其它形状)表示边界的一个实例。在一些实例中,可以将一个元件设计为多个元件,也可以将多个元件设计为一个元件。在适当时,贯穿附图使用共同附图标记来指示类似特征。
具体实施方式
作为实例呈现以下描述,使得所属领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施例,并且对所公开实施例的各种修改对于所属领域的技术人员来说将是显而易见的。
现将仅通过举例来描述实施例。
如上文所描述,在图形处理系统中,主机处理器(例如,CPU)处的驱动器处理传入数据流(例如,来自应用程序)并输出使GPU执行渲染操作的命令。单个帧或单个帧的单个图块的渲染(例如,基于图块的渲染)可涉及多个连续渲染操作,并且来自渲染操作的输出数据被写入到外部存储器(例如,写入到缓冲区)。如同将数据输出(即,将数据写入)到外部存储器一样,渲染操作通常从(外部存储器中的)一或多个其它缓冲区读取数据,因此,渲染操作可能会消耗大量的外部存储器带宽。在许多装置中,具体地说,在移动/嵌入式装置中,可用外部存储器带宽的量是受约束的,这可能会形成降低性能的瓶颈。另外,存在与从外部存储器读取数据相关联的能量成本,从而缩短电池寿命,并生成额外的必须耗散的热。
GPU的纹理取样硬件准许从纹理任意取样,纹理可以存储在外部存储器中。任意取样准许纹理在应用到所着色的片段时进行变换,例如,缩放、旋转或其它失真。纹理由纹素组成,纹素通常表示图像数据,例如,将应用到片段的RGB颜色数据,但是还可表示其它量,例如,表面法线、照明或着色数据等,这些量也可以取样和应用到片段。
在一些情形中,GPU的纹理取样硬件并不需要具有完全任意取样能力。例如,纹理可以表示屏幕空间中的量,使得纹理中的纹素和GPU的取样(例如,像素)位置之间存在固定(例如,1:1)关系。当此类纹理也由GPU生成(例如,其中由先前渲染生成的像素变为在后续渲染中取样的纹理的纹素)时,不仅可以绕过纹理取样硬件中的一些或全部,还有机会在本地存储生成的像素数据,使得将像素数据写入到外部存储器和从外部存储器读取像素数据的需要可以被避免。
本文中所描述的渲染场景的各种方法,这些方法利用这一固定关系并因此提高渲染操作的效率,例如,通过减小所使用的外部存储器带宽(例如,通过减少从外部存储器读取数据的次数)和/或减小着色器代码的大小(例如,使得渲染操作更高效地执行,因为一些着色器代码被去除)。本文所描述的方法可以在CPU上运行的驱动器中和/或在CPU上运行的编译器(其可被视为驱动器的部分,或与驱动器并行运行且与其配合的单独实体)中和/或在GPU上运行的驱动器/固件中实施。所述方法实时地实施,例如响应于绘制调用或在着色器程序变成在GPU上运行时实施,但是在一些实例中,可存在一些提前执行的操作,例如,当加载应用程序时执行的操作。
可以参考图1A和2描述渲染场景的第一示例方法。图1A是示出可以参考图2中示出的第一示例图形表示描述的示例方法的流程图。图1A的方法可用于帧的渲染涉及多个连续渲染操作202(例如,两个或更多个渲染操作)的情形,如图2所示(其中渲染操作表示为圆形)。渲染操作202可以从一个或多个缓冲区204(在图2中表示为矩形)读取数据。每个渲染操作202将数据写入到存储在外部存储器中的一个或多个缓冲区204。每个渲染写入到输出数据结构或对象206(例如,在图2中由虚线矩形表示的帧缓冲区对象FBO),它是渲染要写入的所述一个或多个缓冲区204的容器。在图2中所示的实例中,渲染R-1写入到包括单个缓冲区B0的FBOR-1,且渲染R写入到包括单个缓冲区B1的FBOR。在本文中所描述的实例中对FBO的任何引用仅作为实例,并且本文所描述的方法涉及使用任何输出数据结构或对象。
如图1A中所示,响应于渲染R中的第一绘制调用(框102,其在许多实例中是渲染R的初始绘制调用,即,使得渲染R中不存在任何先前绘制调用,但是在其它实例中,在框102中引用的第一绘制调用可以在其它绘制调用后面),分析供绘制调用使用的着色器中的一个或多个(框104),以识别被着色器取样并且已通过先前渲染渲染R-1写入的任何缓冲区。接着,分析继续进行,以便确定(在框106中)片段着色器(它是供绘制调用使用的着色器中的一个)是否在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区取样,例如,在图2的实例中,片段着色器是否在与当前片段位置相对应的屏幕空间坐标中对缓冲区B0取样。为了解释所述方法,假设先前渲染,即渲染R-1,尚未发送以供在GPU上执行(即,启动)。在先前渲染,即渲染R-1已经启动的情况下,在各种实例中,可以参考尚未发送以供在GPU上执行的更早渲染(例如,渲染R-2)执行缓冲区的识别(作为框104的分析的部分)。下文更详细地描述此情况。
在分析(在框104中)未识别出被着色器取样并且已通过先前渲染渲染R-1写入的任何缓冲区的情况下,在各种实例中,确定(在框106中)可被视为是否定的,并且渲染可以不进行合并。但是,在其它实例中,因为所识别的缓冲区的缺失本身并不排除合并,所以在分析(在框104中)未识别出被着色器取样并且已通过先前渲染渲染R-1写入的任何缓冲区的情况下,在各种实例中,确定(在框106中)可被视为是肯定的。
分析以识别缓冲区并接着确定片段着色器是否在与当前片段位置相对应的屏幕空间坐标中从通过先前渲染写入的所识别的缓冲区取样(在框104中)只能是片段着色器自身的分析(即,片段着色器代码的分析),或者分析可另外涉及对应的顶点着色器(即,生成被输入到片段着色器的输出的顶点着色器)。在一些实例中,还可分析存储在外部存储器中的数据以及一个或多个着色器(例如,以及片段着色器和对应的顶点着色器)。下文更详细地描述此分析。
如果确定渲染R中的第一绘制调用的着色器并不在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区(即,它们从中读取并且已通过先前未启动渲染写入的那些缓冲区,例如B0)取样(在框106中,‘否’),那么将所述绘制调用添加到与当前渲染渲染R相关的数据中(框108)。与当前渲染相关的数据可呈待渲染图形数据序列的形式,在本文中表示为“控制流”。在本文中所描述的实例中对控制流的任何引用仅作为实例,并且本文所描述的方法还涉及将绘制调用添加到与特定渲染相关的数据中,所述特定渲染可呈待渲染图形数据序列的形式或呈任何其它形式。
但是,如果确定渲染R中的第一绘制调用的着色器确实在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区(即,它们从中读取并且已通过先前未启动渲染写入的缓冲区,例如B0)取样(在框106中,‘是’),那么将所述绘制调用添加到与先前未启动渲染渲染R-1相关的数据中(框110)(例如,先前渲染的控制流)。这样做的效果是开始合并当前渲染渲染R与先前未启动渲染渲染R-1。
如果第一绘制调用没有合并到先前渲染中(因为在框106中,着色器没有通过测试),而是这两个渲染(渲染R和渲染R-1)维持它们单独的控制流(因为在框108中,绘制调用被添加到渲染R的控制流中),那么将所述渲染(即,渲染R)的所有后续绘制调用都添加到所述渲染的控制流中,并且不执行着色器的任何进一步分析。这是因为在绘制调用对通过先前未启动渲染写入的缓冲区取样但是不在与当前片段位置相对应的屏幕空间坐标中对通过先前未启动渲染写入的缓冲区取样的情况下,它从缓冲区任意取样(即,在写入数据时的纹素位置和在之后读取数据时的纹素位置之间不存在1:1关系)。为了使绘制调用能够从缓冲区(例如,从纹理)任意取样,所述缓冲区需要写出到存储器。这种写出到存储器直到写入到缓冲区的渲染在GPU上执行时才进行,并且一旦此执行被触发(在可以称为‘启动渲染’的过程中),就没有任何其它东西可以添加到渲染的控制流中。因此,如果渲染R的第一绘制调用没有通过用于合并渲染的测试(在框106中),那么先前渲染渲染R-1必须在执行当前渲染渲染R之前在GPU上执行。
相比之下,如果第一绘制调用合并到先前渲染中(因为在框106中着色器通过测试),那么针对渲染R中的下一绘制调用重复上文所描述的分析。在发现供连续绘制调用使用的着色器在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区(即,它们从中读取并且已通过先前未启动渲染写入的那些缓冲区)取样(在框106中,‘是’)时,继续将绘制调用添加到先前渲染渲染R-1的控制流中;但是,一旦发现供绘制调用使用的着色器没有在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区取样(在框106中,‘否’),就将所述绘制调用(即,在框106中没有通过测试的第一绘制调用)和当前渲染渲染R中的所有后续绘制调用添加到当前渲染渲染R的控制流中。
由于图1A中示出的方法,如果供渲染R中的每一个绘制调用使用的着色器在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区取样,并且因此在框106中,渲染R中的每一个绘制调用都通过测试,那么这两个渲染完全合并,即,渲染R的所有绘制调用都添加到先前渲染渲染R-1的控制流中。在其它实例中,可存在局部合并,其中开始于渲染R的第一绘制调用的渲染R的第一绘制调用序列添加到先前渲染渲染R-1的控制流中,且开始于渲染R的没有通过用于合并的测试(在框106中)的第一绘制调用的所有后续绘制调用都添加到当前渲染渲染R的控制流中。
尽管图1A和以上描述示出了在通过测试(在框106中)的情况下绘制调用一次一个地添加到先前渲染的控制流中,但是在其它实例中,渲染R的所有绘制调用可以在决定它们添加到哪一控制流中之前评估,然后如果渲染R中的所有绘制调用都通过测试(在框105中‘是’,接着在框106中‘是’),那么所有绘制调用都添加到先前渲染渲染R-1的控制流中(框111)。但是,如果渲染R中有任何一个绘制调用没有通过测试(在框105中‘是’,接着在框106中‘否’),那么所有绘制调用都添加到当前渲染渲染R的新控制流中(框109)。图1B中所示的这种变化形式避免了上文所描述的渲染的局部合并。
在又一实例中,响应于肯定确定(在框106中),绘制调用既添加到先前渲染渲染R-1的所有绘制调用也添加到的最新创建的被合并控制流,又添加到当前渲染渲染R的控制流。分析当前渲染渲染R中的后续绘制调用,如果一个绘制调用产生否定确定(在框106中),那么舍弃最新创建的被合并控制流,并在启动渲染时保持和使用这两个单独的控制流(即,一个用于渲染R-1,一个用于渲染R),并且着色器不进行重新编译。相比之下,如果当前渲染渲染R中的所有绘制调用都已分析并产生肯定确定(在框106中),那么舍弃单独渲染的各个控制流(即,一个用于渲染R-1,一个用于渲染R),并在启动被合并渲染时保持和使用最新创建的被合并控制流,并且着色器进行重新编译,如上文所描述。
测试(在框106中)在上文描述为检查着色器如何对已通过先前渲染渲染R-1写入的缓冲区取样。如果着色器对已通过已经发送以供在GPU上执行(可以称为‘启动渲染’的过程)的其它更早渲染写入的缓冲区取样,那么在评估中不考虑这些缓冲区(即,它们并不是一组所识别缓冲区的部分)。但是,如果存在被着色器取样并且已经通过尚未发送以供在GPU上执行(即,启动)的更早渲染写入的任何缓冲区作为紧接在前面的渲染渲染R-1的补充或替代,那么这些缓冲区也可被视为测试的部分,即,它们可以包含在所述一组所识别缓冲区中,因此测试(在框106中)检查被绘制调用取样并且通过尚未发送以供在GPU上执行的渲染写入的所有缓冲区,以确定供绘制调用使用的着色器是否在与当前片段位置相对应的屏幕空间坐标中对那些缓冲区取样。
例如,如果渲染R-1已经完全合并(例如,使用图1A的方法)到紧接在前面的渲染渲染R-2中,使得渲染R-1和渲染R-2都未被发送以供在GPU上执行(即,渲染R-1和渲染R-2都未启动),那么进行评估(在框104至106中)以确定绘制调用是否在与当前片段位置相对应的屏幕空间坐标中取样的所述一组所识别缓冲区包含通过渲染R-2写入并且通过供绘制调用使用的着色器取样的任何缓冲区,以及通过渲染R-1写入并且通过供绘制调用使用的着色器取样的那些缓冲区。因此,分析(在框104中)和测试(在框106中)可以被视为具有两个部分:首先识别被着色器取样并且已通过尚未发送以供执行的一个或多个更早渲染写入的任何缓冲区,以及其次确定着色器是否使用与当前片段位置相对应的屏幕空间坐标从那些所识别的缓冲区取样。在它的一个变化形式中,各个控制流可以维持并被添加(例如,每个单独的渲染具有一个控制流,并且被合并渲染的每个潜在组合具有一个控制流,例如,渲染R-1和渲染R-2具有一个控制流,渲染R和渲染R-1具有一个控制流,渲染R和渲染R-2具有一个控制流,且所有这三个渲染的组合具有一个控制流),然后在做出否定确定时,舍弃这些控制流中的一个或多个。
在另一实例中,如果当前渲染渲染R从通过尚未合并(例如,因为在评估渲染R-1的第一绘制调用时,确定是否定的)的两个先前未启动渲染R-1和R-2写入的缓冲区取样,那么在渲染R在屏幕空间坐标中且在当前片段位置处从通过渲染R-1写入的缓冲区取样但是从通过渲染R-2写入的缓冲区任意取样时,渲染R-2可以启动,且渲染R-1和R可以合并(即,通过将渲染R的绘制调用添加到渲染R-1的控制流中)。类似地,如果当前渲染渲染R从通过尚未合并(例如,因为在评估渲染R-1的第一绘制调用时,确定是否定的)的两个先前未启动渲染R-1和R-2写入的缓冲区取样,那么在渲染R在屏幕空间坐标中且在当前片段位置处从通过这两个未启动渲染中的一个(例如,渲染R-1)写入的缓冲区取样但是从通过另一个未启动渲染(例如,渲染R-2)写入的缓冲区任意取样时,写入被任意取样的缓冲区的渲染R-2可以启动(例如,渲染R-2),并且其余两个渲染(例如,渲染R-1和R)可以合并(例如,通过将渲染R的绘制调用添加到渲染R-1的控制流中)。这可能会导致非连续渲染的合并(例如,在被任意取样的是通过渲染R-1写入的缓冲区时,渲染R-1的启动以及渲染R和R-2的合并)。
当渲染R与先前渲染渲染R-1至少部分地合并时,在被合并渲染在GPU上执行之前将一个或多个着色器重新编译(框112)。具体地说,对于合并到先前渲染中(即,通过在框110中添加到先前渲染的控制流中)的每个绘制调用,至少将绘制调用中所引用的片段着色器重新编译,以便用直接从片上寄存器读取对应数据替代来自存储在外部存储器中的所识别缓冲区(例如,B0)的纹理样本(处于与当前片段位置相对应的屏幕空间坐标)。作为重新编译的部分,不改变来自已经写入到外部存储器(即,因为写入它们的渲染已经发送以供在GPU上执行)的任何缓冲区的纹理样本。另外,作为编译的部分,可以去除用于计算纹理样本的坐标的任何指令,并且这些指令可从片段着色器中省略,在各种实例中,还可从对应的顶点着色器中省略。因此,当渲染在GPU上执行时,从外部存储器读取的数据量降低(即,所使用的存储器带宽降低)。这改进了渲染场景的性能和效率,特别是在存储器带宽受约束的系统中(例如,在移动/嵌入式装置上)。
重新编译(在框112中)可在绘制调用期间执行。为了减少所执行的重新编译的总数,重新编译可针对每一着色器执行一次,例如,在渲染R用于渲染第一帧时执行。对于后续帧,如果按相同图案渲染,那么不执行进一步的重新编译,而是识别并选择着色器的先前已重新编译的变化形式(例如,在框112的替代框中)。
为了帮助重新编译(在框112中),可以生成将纹理样本坐标映射到其中存储数据的对应片上寄存器的映射表。作为分析操作的部分(在框104至106中),可以将条目添加到这个表中,然后使用这些条目(在框112中)。在其它实例中,可以使用不同技术在执行分析(在框104中)的驱动器和执行着色器的运行中重新编译(在框110中)的编译器之间传递映射信息(即,纹理样本坐标和寄存器之间的映射)。在一些实例中,当在具有不同输入的多个绘制调用中引用相同着色器时,重新编译(在框112中)可以生成相同着色器的多个变化形式,其中不同的重新编译的变化形式用于不同渲染。
在上文的描述中,只有当前渲染渲染R的着色器重新编译(必要时),以便从片上寄存器而不是从外部存储器读取数据。这是因为通过先前渲染渲染R-1写入的数据在它之后写入到外部存储器(例如,一旦渲染启动)之前是自动写入到片上寄存器的。在渲染并不首先将数据写入到片上寄存器的实施方案中,在与当前片段位置相对应的屏幕空间坐标中写入被当前渲染取样的数据的先前渲染中的着色器也进行重新编译,使得数据写入到片上寄存器以及外部存储器上,或者写入到片上寄存器而不是外部存储器上。
尽管由于重新编译,当前渲染渲染R的被合并绘制调用现在是从片上寄存器而不是从外部存储器读取,但是数据仍然可以通过被合并渲染写入到外部存储器中的缓冲区(例如,缓冲区B0)。这是因为缓冲区中的数据可供后续渲染(例如,渲染R+X)使用,并且一旦渲染启动,通过所述渲染写入的数据就可能不再保存在片上寄存器中,或者在数据仍然在片上寄存器中的情况下,它可能是不可访问的和/或不可靠的(例如,因为数据可通过后续操作覆写)。
例如,着色器的分析(在框104至106中)可包括分析供绘制调用使用的片段着色器(和任选地对应顶点着色器),以识别一组预定义图案中的一个是否存在于着色器中。这些图案可以被指定,使得如果发现一个,那么这指示着色器在与当前片段位置相对应的屏幕空间坐标中取样,并且因此,用于合并的测试(在框106中)通过。
一个或多个示例预定义图案可以与在片段着色器中执行的变量从均匀剪辑空间坐标到屏幕空间坐标的变换相对应,其中均匀剪辑空间中的变量从对应的顶点着色器接收,并且其中屏幕空间中的所得变量之后用于从位于对应于片段位置的位置处的纹理取样。例如,片段着色器程序可含有代码,如:
Coord=(texCoord x A)+B
Col=texture(t,Coord)
其中texCoord是从顶点着色器接收的变量,并且已知处于剪辑空间坐标,A和B是常数,并且第二语句对在坐标‘Coord’处的纹理‘t’取样以确定像素的颜色。例如,常数A和B的值可以是A=B=0.5,以便将-1.0到1.0的典型剪辑空间坐标范围映射到0.0到1.0的屏幕空间范围中。当视图端口也是全屏时,使用这些坐标对纹理取样指示在屏幕空间中的对应于当前片段位置的位置处对纹理取样。这特定变换与视图端口大小紧密联系。可以限定不需要特定视图端口大小的其它图案。
在各种实例中,只分析片段着色器可能不足以确定片段着色器是否在与当前片段位置相对应的屏幕空间坐标中从所识别的缓冲区取样,例如,因为片段着色器不清楚从顶点着色器输入的变量是不是剪辑空间坐标中的坐标(例如,这是上文详述的图案中的要求)。在此类实例中,预定义图案还可向顶点着色器施加条件,并且顶点着色器可以与片段着色器一起分析。
在其它实例中,分析对应的片段和顶点着色器可能不足以确定片段着色器是否在与当前片段位置相对应的屏幕空间坐标中从所识别的缓冲区取样,例如,因为样本的u、v坐标不是在顶点着色器内计算出的,而是从外部存储器读取的。在此类实例中,预定义图案还可向存储在外部存储器(例如,几何缓冲区)中的数据施加条件,并且此数据可以与顶点和片段着色器一起分析。例如,如果顶点着色器仅仅传递从顶点缓冲区读取的值,并且片段着色器使用那些值对纹理取样,例如,如下:
顶点着色器:
片段着色器:
那么在已知(或确定)来自对应于in_pos的顶点缓冲区的值限定均匀剪辑空间坐标中的全屏四边形(full screen quad),并且进一步已知(或确定)对应于in_coord的顶点缓冲区限定跨四边形的精确0-1映射,并且已知(或确定)纹理t与输出分辨率具有相同大小时,可以得到以下结论:取样是在与当前片段位置相对应的屏幕空间坐标中。针对顶点缓冲区的这些准则可以使用另一形式的图案匹配来分析,其中寻求已知与全屏四边形相对应的值。
在更复杂的实例中,着色器可能不仅仅传递值,而是可以在传递它们和使用它们之前修改它们。例如,模型视图投影(mvp)矩阵可用于修改来自顶点缓冲区的位置,例如:
顶点着色器:
片段着色器:
在此情况下,除了在先前实例中执行的分析之外,另外还考虑应用程序为MVP矩阵提供的值。这可以通过寻找矩阵中的共同图案(即,寻找恒等矩阵,所述恒等矩阵就其本质而言在它与in_pos的值相乘时不会修改in_pos的值)或通过模拟在驱动器中的顶点着色器(in_pos*mvp)中描述的变换并分析所得值以确定它们是否与全屏四边形相对应来完成。
在各种实例中,片段着色器具有对应于当前屏幕位置的标准变量,并且此变量可以表示为‘fragCoord’(或GLSLTM中的‘gl_FragCoord’)。在此类实例中,两个其它示例预定义图案可以根据此坐标寻找纹理样本。例如,第一图案可以识别代码,如:
Col=texelFetch(t,fragCoord)
其中texelFetch使用非归一化整体坐标(non-normalised integralcoordinates)对纹理t取样。或者,第二图案可以识别根据此坐标的归一化版本执行纹理取样的代码:
Col=texture(t,fragCoord/R)
其中R是常数,它取决于正在渲染场景的显示器(例如,屏幕)的分辨率。不同于上文所描述的第一图案,这些图案是视图端口不可知的。
在上文所描述的所有示例图案中,要么所识别的图案对应于屏幕至空间变换,即从第一(非屏幕空间)坐标系中的坐标(例如,剪辑空间坐标)到屏幕空间坐标的变换,要么所述图案将坐标识别为已经在屏幕空间中。
在各种实例中,为了帮助分析(在框104中),标记(其在本文中可以被称为‘语义标记’)在它们进行编译以记录那些变量的属性时可以在顶点和/或片段着色器中附接到变量上。例如,附接到输入变量上的标记可以指示变量的实际含义(例如,意味着它是当前片段的均匀剪辑空间坐标)或者它可以指示如果输入变量是具有特定限定形式的数据,那么变换的输出将是屏幕空间坐标(例如,屏幕空间坐标中对应于当前片段位置的样本位置)。
在各种实例中,除了执行着色器的分析(在框104中)之外,还可执行一个或多个额外检查(框305),如图3中所示。图3是渲染场景的第二示例方法的流程图,它是图1A中示出和上文描述的流程图的变化形式(但是在其它实例中,它可以实施为图1B的方法的变化形式)。在这一额外测试(在框305中)未通过并且此额外测试可布置成识别和阻止会导致渲染的合并失败的情形中的合并的情况下,此额外测试阻止当前渲染渲染R与先前渲染渲染R-1的合并。测试(在框305中)可涉及在着色器和/或用于执行着色器的硬件(例如,在GPU中)上进行的检查。在实例中,这一测试可以确定是否有足够的片上寄存器来存储额外的输出而不会溢出到芯片外,然后在确定没有足够片上寄存器的情况下阻止合并。这可涉及检查着色器,例如,确定输出的合计数目,并检查硬件,例如,确定可用片上寄存器的数目。
为了减少(在框104中)所执行的着色器分析次数并由此提高渲染过程的效率,通过渲染写入的每个输出数据结构或对象206(在本文中称为FBO)可具有相关联的参数(或状态或标记等),此参数触发合并测试的‘快速失败(fast fail)’(例如,在图1A和1B的框106中和在图3中的框106和305中)。此‘快速失败’使得针对特定渲染不执行分析(在框104中)。图4是渲染场景的第三示例方法的流程图,包含快速失败阶段,并且是图1A中示出和上文描述的流程图的变化形式。尽管这没有显示出图3的额外测试(框305),但是应了解,在另一实例中,图3的额外测试还可包含在图4的方法中。在其它实例中,图4的快速失败测试可以包含在图1B的方法中。
如图4中所示出,响应于渲染R中的第一绘制调用(框102)并且在执行绘制调用中引用的一个或多个着色器的分析(在框104中)之前,检查渲染写入的输出数据结构或对象206(例如,FBO)(例如,与渲染绑定的输出数据结构或对象)的快速失败参数(框402),它可以称为‘合并候选项’参数/标记/状态。在各种实例中,此合并候选项参数可具有两个可能状态:肯定和否定。肯定状态指示渲染可以是合并候选项,因为要么不存在使用此输出数据结构或对象的先前渲染,要么任何先前渲染已经被合并(在框402中,‘是’),并且着色器的分析已执行(在框104中)。否定状态指示渲染不合并(在框402中,‘否’,例如,相对于此渲染合并技术,输出数据结构或对象被列入黑名单)并且因此,绘制调用被添加到渲染R的控制流中(在框108中)。
图4的方法还示出在执行分析的情况下合并候选项参数可以如何更新。如果由于分析(在框104中),确定着色器不在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区取样(在框106中,‘否’),那么输出数据结构或对象的合并候选项参数从它的当前肯定状态变成否定(框406)。这防止针对被渲染的连续帧中的相同输出数据结构或对象重复执行分析,并且提高渲染过程的效率。
作为使用合并候选项参数提供快速失败并减少(在框104中)所执行的分析次数的补充或替代,在各种实例中,此状态可用于触发一个或多个优化。在各种实例中,这些优化可基于下一渲染渲染R的输出数据结构或对象的合并候选项参数的值在处理先前渲染渲染R-1期间执行。例如,在合并参数状态是肯定的情况下,先前渲染(渲染R-1)的片段着色器可以另外进行重新编译(例如,在针对渲染R-1的框112中),使得用于存储在片上缓冲区中的数据输出呈特定格式(例如,具有减小的大小的格式,例如U8)。在这两个渲染(渲染R-1和渲染R)不合并的情况下,即使合并候选项参数指示这没有被阻止,一些优化(例如,输出呈具有减小的大小的格式的数据)的应用也可能会影响性能(例如,因为降低精确度,并因此降低视觉质量)。在此类实例中,第三合并参数状态未知可用于指示不存在使用此输出数据结构或对象的先前渲染。在图4的方法中(在框402中),‘肯定’和‘未知’状态可以相同方式处理(即,在框402中,‘是’),但是所有优化只能在合并候选项参数是肯定的时候应用。在使用‘未知’状态时,可存在额外的参数更新操作(图4中未示出),其中在将渲染R成功合并到渲染R-1中后(即,在所有绘制调用都已经添加到与渲染R-1相关的数据中之后),合并候选项参数从未知更新为肯定。
在图1A、1B、3和4以及上文的描述中,当前渲染渲染R被描述为可能与先前渲染渲染R-1合并。接着,可针对后续渲染重复方法,即,确定是否合并新的当前渲染与先前渲染。例如,一开始,图1、3和4的方法可以在R=2的情况下实施,然后可以针对每个连续渲染(例如,R=3,R=4…)实施。如上文所提到,在执行着色器的分析(在框102中)和与当前片段位置相对应的屏幕空间坐标的测试(在框104中)时,这是相对于通过当前渲染读取并且已通过尚未启动的渲染写入的那些缓冲区执行的。分析不包括通过当前渲染读取并且已通过已经启动的先前渲染写入的任何缓冲区(因此,数据已经写入到外部存储器,并且在片上寄存器中不可用)。
尽管上文所描述的实例只提及了渲染R-1和渲染R这两个渲染的合并,但是在各种实例中,可以组合超过两个渲染。例如,如果由于第二渲染的所有绘制调用都被添加到第一渲染(并因此是先前渲染)的控制流中以产生单个合并控制流(对于第一和第二渲染两者),第二渲染(例如,渲染R)完全合并到第一渲染(例如,渲染R-1)中,那么当第一绘制调用接收在下一渲染即第三渲染(它现在是渲染R)上时,图1、3或4的方法可用于确定是否将这个第三渲染的绘制调用添加到第一和第二渲染的单个合并控制流(在框110中)。渲染的合并可在芯片上可用的片上寄存器的数目方面受到限制,一旦达到该数目,就不可能进行进一步合并(例如,在图3的框305中被测试所阻止)。
在图2的实例中,每个输出数据结构或对象206(例如,每个FBO)只包括单个缓冲区,并且每个渲染只从单个缓冲区读取数据。在其它实例中,渲染可以从超过一个缓冲区读取数据,和/或可以将数据写入到超过一个缓冲区(例如,与渲染绑定的输出数据结构或对象可包括超过一个缓冲区),并且上文所描述的方法(例如,如图1A、1B、3和4中所示)也可应用在这些实例中。在图5的实例中,渲染R0的输出数据结构或对象206包括四个缓冲区(B0至B3),且下一渲染渲染R1从三个缓冲区(B0至B2)读取。此外,还如图5中所示,渲染可以从没有被紧接在前面的渲染渲染而是被另一更早渲染渲染的缓冲区读取,例如,渲染R2从通过渲染R1写入的缓冲区B4和通过渲染R0写入的缓冲区B0读取,并且同样地,上文所描述的方法(例如,如图1、3和4中所示)也可应用在这些实例中。在此实例中,通过合并渲染R1和R2,避免了对来自外部存储器的缓冲区B4的读取,尽管通过渲染R0写入的缓冲区B0不在片上寄存器中(除非渲染R0、R1和R2全都合并),但是因为在R1和R2中B0的读取将更接近,所以缓冲区B0的内容有更大可能存在于高速缓存阶层结构内的高速缓存中,并且因此高速缓存将是更高效的。对于基于图块的渲染来说尤其如此,因为在R1对B0的取样和R2对B0的取样之间的中间样本更少。
在上文所描述的方法中,分析(在框104中)使用图案匹配以确定供绘制调用使用的片段着色器是否在与当前片段位置相对应的屏幕空间坐标中从所识别的缓冲区取样。当在与当前片段位置相对应的屏幕空间坐标中对缓冲区取样时,所取样的缓冲区(例如,图2中的B0)和输出缓冲区(例如,B1)之间存在1:1像素图。因此,测试(在框106中)可以全部等效的不同方式描述:
·着色器是否在与当前片段位置相对应的屏幕空间坐标中对所识别的缓冲区取样?
·所取样的所识别缓冲区和输出缓冲区之间是否存在1:1像素图?
·所取样的所识别缓冲区中的数据是否表示像素(而不是纹素)?
上文所描述的示例图案提供一些可以用来通过着色器代码(在各种实例中,还有存储在外部存储器中的数据)的分析确定此测试的结果的方式;但是,在其它实例中,可以使用其它图案或其它分析技术。
在各种实例中,上文所描述(和图1A、1B、3和4中所示)的方法可实施于使用基于图块的渲染的图形处理系统中。在此类实例中,基于每一图块执行渲染,使得在前进到下一渲染之前针对所有图块执行渲染(例如,在不以任何方式合并渲染R0和R1时,按顺序针对所有图块执行R0,然后针对所有图块执行R1)。正是这一处理排序导致上文所描述的高速缓存效率。在使用基于图块的渲染时,通过渲染写入的数据量相较于在整个屏幕空间上执行的相同渲染有所减少,这可以促进合并(例如,因为需要能够在片上寄存器中存储数据,如上文所描述)。上文所描述的方法还可用于不基于图块的渲染系统(例如,在写入的数据量具有可以存储在片上寄存器中的大小时)。
通过使用图1A、1B、3或4的方法或其任何组合,如果通过分析着色器并另外分析与通过渲染绑定的输出数据结构或对象相关联的参数而识别出某些条件,那么两个或更多个渲染可以自动合并(即,在不用任何用户输入或者就那些写入应用程序而言不需要任何特殊动作的情况下合并)。当前渲染渲染R和先前未启动渲染(例如,渲染R-1)的合并的效果是推迟先前渲染(例如,渲染R-1),因为它无法在GPU上执行,而(来自渲染R的)额外绘制调用仍然被添加到它的控制流中。如上文所描述,尽管描述是指渲染R和渲染R-1的合并,但是如果紧接在前面的渲染渲染R-1已经启动,那么在各种实例中,当前渲染可以进行分析,并且有可能与另一更早的未启动渲染合并。
上文所描述的方法(例如,如图1A、1B、3和4中所示)可实施于图形系统中,例如图6所示的图形系统。系统600可以在智能手机、平板电脑、笔记本电脑、个人计算机、游戏控制台、电视或上面要处理图形数据的另一装置等装置上实施。如图6所示,系统包括通用处理器(CPU)602和图形处理器(GPU)604。通用处理器602和图形处理器604均可实施为硬件或软件或其组合。尽管图形处理器604在图6中示出为GPU,但是在其它实例中,它可以实施为在CPU等可编程装置上运行的计算机程序。类似地,尽管通用处理器602在图6中示出为CPU,但是它可以实施为在CPU等可编程装置上运行的计算机程序。应了解,为清楚起见,并未在图6中示出通用处理器602或图形处理器604内的所有功能块。
通用处理器602包括应用程序606,例如在处理器中的应用程序层处。应用程序606配置成例如借助API与驱动器层处的驱动器608通信。驱动器608可包括编译器610,或者编译器610可以是与驱动器608并行运行且与其紧密通信的单独模块。驱动器608配置成与硬件或固件层通信,并且作为举例,在图6中示出为与固件612通信。应用程序606、驱动器608和编译器610中的每一个都可以实施为在通用处理器602上运行的软件单元或模块,例如,应用程序606可包括根据应用程序软件运行的模块,驱动器608可包括根据驱动器软件运行的模块,且编译器610可包括根据编译器软件运行的模块。
图形处理器604包括渲染和着色逻辑614,并且渲染和着色逻辑614包括几何处理逻辑616和像素处理逻辑618。几何处理逻辑616配置成执行几何处理操作,并且像素处理逻辑618配置成执行像素处理操作。图形处理器包括多个片上缓冲区620,且几何处理逻辑616和像素处理逻辑618配置成与片上缓冲区620通信,这些片上缓冲区可以被替代地称作本地存储器。图形处理器604进一步包括纹理化单元621,此纹理化单元配置成处理着色器中的样本,并且因此负责请求从外部存储器622获取的数据。当上文所描述的方法导致从片上缓冲区620(其含有上文提及的片上寄存器)而不是从外部存储器622访问数据时,纹理化单元621对样本的处理被避免。
通用处理器602和图形处理器604配置成通过总线624与外部存储器622通信。在各种实例中,图形系统进一步包括高速缓存阶层结构626,其包括布置成高速缓存来自由图形处理器604访问的外部存储器622的数据的一系列高速缓存。尽管这在图6中示出为在GPU中实施,但是在其它实例中,这可以完全在芯片外实施(即,可由通用处理器602和图形处理器604通过总线624访问),或者在一些其它实例中,高速缓存阶层结构626的最高层级中的一个或多个可以在GPU中实施,而其它层级在GPU外实施。外部存储器622配置成存储图形数据628,例如图元数据630(例如,由应用程序606提供的描述图形的原始数据)和着色器程序632。外部存储器622还配置成存储多个FBO634(或其它输出数据结构或物体206),并且外部存储器的一部分可以表示为参数存储器636。参数存储器636可配置成存储由几何处理逻辑616生成的数据(例如,初始几何处理的结果),此数据随后供像素处理逻辑618使用。
上文所描述的方法(例如,如图1A、1B、3和4中所示)可以主要在图6中的驱动器608内实施。例如,驱动器608配置成执行在渲染的绘制调用中引用的着色器的分析(在框104中),基于此分析进行确定(在框106和305中)并生成控制流(在框108和110中)。在使用输出数据结构或对象的合并参数(如在图4的方法中)的情况下,驱动器608进一步配置成依据合并参数的状态而确定是否执行分析(在框402中)并响应于着色器的分析而更新合并参数状态(在框406中)。合并参数可以存储在外部存储器622中。编译器610配置成执行着色器的重新编译(在框112中),并且在各种实例中,例如,基于由驱动器608生成的映射数据,可以生成着色器的多个变化形式以供编译器610重新编译。映射数据和着色器变化形式可以存储在外部存储器622中。
由驱动器608生成的控制流包括配置图形处理器604以执行所要操作所需要的命令和设置信息。一旦控制流生成,就可以触发图形处理器604上渲染(或局部渲染,其中绘制调用分成两个控制流,如上文所描述)的发起,并且如上文所提到,这可以称为‘启动渲染’。一旦渲染的控制流完成,触发就可以发生,或者例如,触发可以一直延迟到特定渲染需要被绘制到显示器上或由所述渲染输出的数据需要被另一渲染任意取样。
如上文所描述,使用上文所描述的方法中的任一个(或这些方法的组合)的渲染的合并减小了外部存储器带宽,这进而提高了效率,减少了功率消耗和热量产生。另外,存在与触发(例如,启动)渲染相关联的开销(在所耗时间方面),并且通过合并减少渲染的数目可以降低此开销(即,设置渲染所耗的时间更少,并因此改进了系统的整体性能)。
可以参考图7和8描述渲染场景的另一示例方法。此方法可以独立于上文所描述的方法(如图7中所示)或结合上文所描述的方法中的任一个(例如,如图8中所示)来使用。不同于上文所描述的方法,例如,图7的方法可以用于帧的渲染不涉及多个连续渲染操作的情形和/或片上输出缓冲区中没有足够的空间来存储通过渲染写入的数据的情形。
如图7中所示,响应于渲染R中的第一绘制调用(框102),分析用于绘制调用的一个或多个着色器(框704),以确定(在框706中)片段着色器是否在与当前片段位置相对应的屏幕空间坐标中对缓冲区取样。分析(在框704中)只能是片段着色器自身的分析(即,片段着色器代码的分析),或者分析可以涉及对应的顶点着色器(即,生成被输入到片段着色器的输出的顶点着色器)。在一些实例中,还可分析存储在外部存储器中的数据以及一个或多个着色器(例如,以及片段着色器和对应的顶点着色器)。此分析在下文更详细地描述,它是上文关于框104至106所描述的分析的子集,并且可以使用上文关于框104和106所描述的方法中的任一个。
如果确定片段着色器在与当前片段位置相对应的屏幕空间坐标中对缓冲区取样(在框706中,‘是’),那么将片段着色器重新编译,以便将在所述位置处对缓冲区取样的对应着色器代码替代为使用来自始终保存当前片段位置的一对专用寄存器的坐标的纹理获取(框708)。另外,作为编译进程的部分,可以去除计算样本位置的任何代码(在框708中)。除了通过这种方式将片段着色器代码重新编译之外,还可将顶点着色器代码重新编译,使得它不再输出任何只供片段着色器使用以在重新编译之前用于计算样本位置的变量,因为这不再由片段着色器计算。另外,可以在重新编译时从顶点着色器中去除在顶点着色器内执行以计算这些不再需要的变量的任何计算,类似地,可以去除只在计算当前片段位置时使用的片段着色器中的任何计算。
相比之下,如果确定渲染R的片段不在与当前片段位置相对应的屏幕空间坐标中对缓冲区取样(在框706中,‘否’),那么不进行着色器的这一重新编译(在框708中),并且渲染操作不受影响地继续进行。
着色器的分析(在框704中)可以与关于先前方法描述的分析(例如,在框104中)类似的方式操作。例如,可以使用一组相同或类似的预定义图案来检查所使用的特定屏幕空间坐标是否与当前片段位置相对应。例如,如上文详述,片段着色器程序可含有代码,如:
Coord=(texCoord x A)+B
Col=texture(t,Coord)
其中texCoord是从顶点着色器接收的变量,并且已知处于剪辑空间坐标,A和B是常数,并且第二语句对在坐标‘Coord’处的纹理‘t’取样以确定像素的颜色。例如,常数A和B的值可以是A=B=0.5,以便将-1.0到1.0的典型剪辑空间坐标范围映射到0.0到1.0的屏幕空间范围中。当视图端口也是全屏时,使用这些坐标对纹理取样指示在屏幕空间中的对应于当前片段位置的位置处对纹理取样。因此,上方的一对指令(在片段着色器中)可以替代为单个指令:
Col=texelFetch(t,SRx,SRy)
其中SRx和SRy是始终保存当前片段位置的坐标的所述一对专用寄存器的地址,并且texelFetch是使用非归一化整体坐标对纹理取样的函数。另外,如果变量‘texCoord’不再供片段着色器使用,那么顶点着色器中用于计算此变量的任何指令(包含任何存储器读取)都可以省略,并且将变量的值写入到参数存储器的指令也可以省略。
在另一实例中,如果检测到预定义图案,该预定义图案包括来自对应于当前屏幕位置的标准变量的纹理获取,那么这可以替代(在框708中)为使用来自始终保存当前片段位置的一对专用寄存器的坐标的纹理获取。例如,如果检测到具有以下形式的任何指令:
Col=texture(t,fragCoord/R)
其中R对应于屏幕分辨率,那么所述指令可以替代为:
Col=texelFetch(t,SRx,SRy)
通过将着色器代码重新编译,其中测试通过(在框706中),减少了着色器代码中的指令的数目,由此提高着色器的效率(例如,减小执行它所需要的计算工作量)。另外,重新编译可以既减少通过顶点着色器写入到参数存储器636的数据量(例如,在上方的第一实例中,通过不写入texCoord的值),又减少通过片段着色器从外部存储器读取的数据量(例如,在上方的第一实例中,通过不读取texCoord的值),并且因此降低总体存储器带宽。
图8示出图1A和7的方法的组合的流程图。在这一组合式方法中,着色器的分析(在框104中)如上文参考图1A所描述,因为这涵盖了上文参考图7(和框704)所描述的分析。类似地,不需要图7中的测试(在框706中),因为图1A的测试(框106)包含在当前片段位置处取样的测试。尽管在图8中示出两个单独的重新编译操作(框708和112),但是应了解,这两个操作可以组合,其中响应于在当前片段位置处识别出纹理获取(在框706中,‘是’)并且在将绘制调用添加到与先前渲染相关的数据(在框110中)之前(或与其同时)存储额外数据(在框708的替代框中),以便着色器的后续重新编译(在框112的替代框中)执行所有重新编译操作(即,在框708和框112中已经执行的那些操作)。
在图8中所示的方法的另一变化形式中,如果发现渲染R中的第一绘制调用不在与当前片段位置相对应的屏幕空间坐标中从所识别的缓冲区取样(在框106中,‘否’),使得所述绘制调用被添加到与渲染R相关的数据中,那么对于所述渲染的后续绘制调用,图7的屏幕空间坐标优化仍然可以使用。
尽管图8示出图1A和7的方法的组合,但是又一变化形式中,方法实际上可以组合图1B和7或图3和7的方法,例如,通过添加额外测试(框305)来组合。但是,识别排除渲染的合并的方面的这一额外测试并不排除使用图7的屏幕空间坐标优化,并且因此在这个测试没有通过(在框305中,‘否’)的情况下,图7的方法仍然可以使用。在另一变化形式中,方法可组合图4和7的方法,例如,通过添加与合并参数相关的额外测试(框402)和更新合并参数状态的额外操作(框406)来组合。同样,在合并参数测试没有通过(在框402中,‘否’)的情况下,图7的方法仍然可以使用。在又一变化形式中,方法可组合图3、4和7的方法与图1A的方法或图1B的方法。
返回参考图5中的一系列渲染的图形实例,在各种实例中,图7的方法可用于渲染R-1,且图1A/1B、3和4中的任一个或多个的方法以及图7的方法可用于合并渲染R和R+1。
图7的方法可以实施在图6所示的图形系统600内。图7的方法大体上由驱动器608实施(例如,框704至706),但是重新编译操作(框708)由与驱动器608通信地操作的编译器610实施。尽管在图6中未示出,但是专用寄存器位于像素处理逻辑618内。
图6的图形系统600示出为包括数个功能块。这仅仅是示意性的,并非旨在限定此类实体的不同逻辑元件之间的严格划分。可以任何合适的方式提供每个功能块。应理解,本文中描述为通过图形系统形成的中间值无需由图形系统在任一点处物理地生成,并且可以只表示便于描述由图形系统在其输入和输出之间执行的处理的逻辑值。
如本文使用的术语计算机程序代码和计算机可读指令是指可供处理器执行的任何种类的代码,包含以机器语言、解释语言或脚本语言表示的代码。可执行代码包含二进制代码、机器代码、字节代码、限定集成电路的代码(例如硬件描述语言或网表),以及用C、Java或OpenCL C等编程语言代码表示的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,其在虚拟机或其它软件环境处进行适当的执行、处理、解译、编译、执行时使计算机系统中支持所述可执行代码的处理器执行通过代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,具有使其可以执行指令的处理能力。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如通用GPU)、微处理器、设计成加快CPU外部的任务的任何处理单元,等等。计算机或计算机系统可包括一个或多个处理器。所属领域的技术人员将认识到,此类处理能力并入于许多不同装置中,因此术语‘计算机’包含机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和许多其它装置。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,例如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所要功能。也就是说,可提供一种计算机可读存储介质,所述计算机可读存储介质上编码有呈集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中处理(即,运行)时,所述集成电路定义数据集将系统配置成制造被配置成执行本文所描述的任何方法的图形系统,或者制造包括本文所描述的任何设备的图形系统。集成电路定义数据集可以是例如集成电路描述。
因此,可提供一种在集成电路制造系统处制造如本文所描述的图形系统的方法。此外,可提供一种集成电路定义数据集,其在集成电路制造系统中处理时使制造图形系统的方法得以执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包含作为寄存器传送级(RTL)代码、作为例如Verilog或VHDL的高级电路表示,和作为例如OASIS(RTM)和GDSII的低级电路表示。在逻辑上定义集成电路的更高级表示法(例如RTL)可以在配置成在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理,所述软件环境包括电路元件的定义和用于组合那些元件以便生成由所述表示法定义的集成电路的制造定义的规则。与通常软件在计算机系统上执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成用于生成集成电路的制造定义,以执行定义集成电路的代码,从而生成所述集成电路的制造定义。
现将关于图9描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置成制造图形系统的实例。
图9示出配置成制造如本文的任一个实例中所描述的图形系统的集成电路(IC)制造系统902的实例。具体地说,IC制造系统902包括布局处理系统904和集成电路生成系统906。IC制造系统902配置成接收IC定义数据集(例如,定义如本文中的任一个实例中所描述的图形系统),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如本文中的任一个实例中所描述的图形系统)。IC定义数据集的处理将IC制造系统902配置成制造体现如本文中的任一个实例中所描述的图形系统的集成电路。
布局处理系统904配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。在布局处理系统904确定了电路布局后,它可以将电路布局定义输出到IC生成系统906。电路布局定义可以是例如电路布局描述。
如本领域已知的,IC生成系统906根据电路布局定义来生成IC。例如,IC生成系统1006可实施生成IC的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩码的形式,其可以在光刻工艺中用于根据电路定义来生成IC。或者,提供给IC生成系统906的电路布局定义可以呈计算机可读代码的形式,IC生成系统906可以使用该计算机可读代码来形成用于生成IC的合适掩模。
由IC制造系统902执行的不同过程可以全部在一个位置中实施,例如由一方实施。或者,IC制造系统902可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置中和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩码来制造集成电路。
在其它实例中,在集成电路制造系统处处理集成电路定义数据集可将系统配置成制造图形系统,而无需处理IC定义数据集来确定电路布局。举例来说,集成电路定义数据集可以定义FPGA等可重新配置的处理器的配置,并且对所述数据集进行的处理可以将IC制造系统配置成生成具有所述定义配置的可重新配置的处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集以上文关于图9描述的方式对集成电路制造系统进行配置,可以制造出如本文中所描述的装置。
在一些实例中,集成电路定义数据集可包含在由数据集定义的硬件上运行的软件,或者与由数据集定义的硬件组合运行的软件。在图9所示的实例中,IC生成系统还可以由集成电路定义数据集进一步配置成在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到所述集成电路上,或者以其它方式向集成电路提供与集成电路一起使用的程序代码。
所属领域的技术人员将认识到,用于存储程序指令的存储装置可跨越网络分布。例如,远程计算机可存储被描述为软件的过程的实例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部来运行程序。或者,本地计算机可按需要下载软件片段,或在本地终端执行一些软件指令并在远程计算机(或计算机网络)执行一些软件指令。所属领域的技术人员还将认识到,通过利用所属领域的技术人员已知的常规技术,所有或部分软件指令可由DSP、可编程逻辑阵列等专用电路执行。
本文所描述的方法可由计算机执行,所述计算机配置有存储在有形存储介质上的呈机器可读形式的软件,例如呈包括计算机可读程序代码的计算机程序形式,所述计算机可读程序代码用于将计算机配置成执行所描述方法的组成部分,或者呈包括计算机程序代码构件的计算机程序形式,所述计算机程序代码构件适于在计算机上运行所述程序时执行本文所描述的任一方法的所有步骤,并且其中所述计算机程序可在计算机可读存储介质上体现。有形(或非暂时性)存储介质的实例包含磁盘、拇指驱动器(thumb drive)、内存卡等,不包含传播的信号。软件可适合在并行处理器或串行处理器上执行,使得方法步骤可按任何合适的次序或同时执行。
本文所描述的硬件部件可由上面编码有计算机可读程序代码的非暂时性计算机可读存储介质生成。
存储用于实施所公开的方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的实例包含基于半导体的存储器,例如SRAM或DRAM。可用于实施非易失性存储器的技术实例包含光学和磁性存储器技术、快闪存储器、相变存储器、电阻RAM。
特别提到的“逻辑”是指执行一种或多种功能的结构。逻辑实例包含布置成执行那些功能的电路系统。例如,此类电路系统可包含在制造过程中可用的晶体管和/或其它硬件元件。此类晶体管和/或其它元件可用于形成电路系统或结构,举例来说,所述电路系统或结构实施和/或含有寄存器、触发器或锁存器等存储器、布尔(Boolean)运算等逻辑运算器、加法器、乘法器或移位器等数学运算器以及互连件。此类元件可作为定制电路或标准单元库、宏或以其它抽象级提供。此类元件可互连成特定布置。逻辑可包含固定功能的电路系统,并且电路系统可编程成执行一种或多种功能;此类编程可由固件或软件更新或控制机制提供。标识成执行一个功能的逻辑还可包含实施组成功能或子过程的逻辑。在实例中,硬件逻辑具有实施一种或多种固定功能操作、状态机或过程的电路系统。
与已知的实施方案相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实施的方法中)的实施可以使性能改进。性能改进可以包含计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如在集成电路中)期间,可以在性能改进与物理实施方案之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方案的性能,但使用的硅更少。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起装置、设备、模块和系统的物理实施方案的改进(例如硅面积减小)的概念可以针对性能改进进行权衡。例如,这可通过在预定义面积预算内制造一个模块的多个实例来完成。
所属领域的技术人员将清楚,本文给出的任何范围或装置值可在不失去所追求的效果的情况下进行扩展或更改。
应理解,上文所描述的益处和优势可涉及一个实施例,也可涉及若干实施例。实施例并不局限于解决任一或所有所陈述问题的那些实施例或具有任一或所有所陈述益处和优势的那些实施例。
对‘一个’项目的任何提及是指一个或多个那些项目。本文中使用术语‘包括’来表示包含所标识的方法块或要素,但此类块或要素并不包括独占式列表,并且设备可含有额外块或要素,且方法可含有额外操作或要素。此外,所述块、要素和操作自身并没有暗指是封闭式的。
本文所描述的方法的步骤可按任何适合的次序执行,或在适当时同时执行。图中方框之间的箭头示出方法步骤的一个示例顺序,但并非旨在排除其它顺序或多个步骤的并行执行。另外,在不脱离本文描述的主题的精神和范围的情况下,可从任何方法中删除个别框。在不失去所追求效果的情况下,上文所描述的任一实例的各方面可与所描述的任一其它实例的各方面组合以形成其它实例。在图中元件示出为由箭头连接的情况下,应了解,这些箭头仅示出元件之间的一个示例通信流(包含数据和控制消息)。元件之间的流可在任一方向上或在两个方向上。
本申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,使得此类特征或组合能够根据所属领域的技术人员的普通常识并基于整个本说明书来实行,不管此类特征或特征的组合有没有解决本文中所公开的任何问题。鉴于前文描述,所属领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (24)
1.一种在图形系统中渲染场景的方法,所述方法包括:
识别当前渲染内的第一绘制调用(102),其中所述当前渲染从一个或多个缓冲区取样;
分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器,以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样(704、706);以及
响应于确定供所述第一绘制调用使用的所述最后着色器确实在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样,将所述最后着色器重新编译,以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令(708)。
2.根据权利要求1所述的方法,其中将所述最后着色器重新编译进一步包括:
去除计算匹配当前片段位置的所述坐标的任何指令。
3.根据权利要求2所述的方法,其进一步包括将所述一系列着色器中的任何着色器重新编译以省略计算或输出只供在重新编译所述最后着色器时已经去除的指令使用的参数的任何指令。
4.根据任一前述权利要求所述的方法,其中分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样包括:
分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器,以确定所述最后着色器是否使用与所述当前片段位置相对应的屏幕空间坐标从所述一个或多个缓冲区取样。
5.根据权利要求1至3中任一项所述的方法,其中分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样包括:
检查所述一系列着色器中的至少所述最后着色器中的代码,以确定一组预定义图案中的一个是否存在于所述代码内。
6.根据权利要求4所述的方法,其中分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样包括:
检查所述一系列着色器中的至少所述最后着色器中的代码,以确定一组预定义图案中的一个是否存在于所述代码内。
7.根据权利要求1至3中任一项所述的方法,其中分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样包括:
检查所述一系列着色器中的至少所述最后着色器中的代码,以确定用于从所识别的缓冲区取样的样本位置是否使用屏幕空间变换在所述最后着色器中计算出。
8.根据权利要求4所述的方法,其中分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样包括:
检查所述一系列着色器中的至少所述最后着色器中的代码,以确定用于从所识别的缓冲区取样的样本位置是否使用屏幕空间变换在所述最后着色器中计算出。
9.根据权利要求1-3、6、8中任一项所述的方法,其中当前渲染内的所述第一绘制调用是所述当前渲染中的初始绘制调用。
10.根据权利要求4所述的方法,其中当前渲染内的所述第一绘制调用是所述当前渲染中的初始绘制调用。
11.根据权利要求5所述的方法,其中当前渲染内的所述第一绘制调用是所述当前渲染中的初始绘制调用。
12.根据权利要求7所述的方法,其中当前渲染内的所述第一绘制调用是所述当前渲染中的初始绘制调用。
13.一种包括通用处理器(602)和图形处理器(604)的图形系统(600),其中所述通用处理器包括驱动器(608)和编译器(610),其中所述驱动器配置成:
识别当前渲染内的第一绘制调用,其中所述当前渲染从一个或多个缓冲区取样;
分析供所述第一绘制调用使用的一系列着色器中的至少一最后着色器,以确定所述最后着色器是否在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样;以及
响应于确定供所述第一绘制调用使用的所述最后着色器确实在匹配当前片段位置的坐标处从所述一个或多个缓冲区取样,触发所述编译器对所述最后着色器的重新编译,以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。
14.根据权利要求13所述的图形系统,其中所述编译器配置成响应于从所述驱动器接收到触发信号而:
将所述最后着色器重新编译,以便用在存储于片上寄存器中的坐标处从所述一个或多个缓冲区读取的指令替代在匹配当前片段位置的坐标处从所述一个或多个缓冲区中的一个读取数据的指令。
15.根据权利要求14所述的图形系统,其中所述编译器进一步配置成响应于从所述驱动器接收到触发信号而:
将所述最后着色器重新编译以去除计算匹配当前片段位置的所述坐标的任何指令。
16.根据权利要求15所述的图形系统,其中所述编译器进一步配置成响应于从所述驱动器接收到触发信号而:
将所述最后着色器重新编译以省略计算或输出只供在重新编译所述最后着色器时已经去除的指令使用的参数的任何指令。
17.根据权利要求13至16中任一项所述的图形系统,其中所述图形系统体现为集成电路上的硬件。
18.一种图形系统,其配置成执行根据权利要求1至12中任一项所述的方法。
19.根据权利要求18所述的图形系统,其中所述图形系统体现为集成电路上的硬件。
20.一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时使得根据权利要求1-12中任一项所述的方法得以执行。
21.一种使用集成电路制造系统制造根据权利要求13至17中任一项所述的图形系统的方法。
22.一种计算机可读存储介质,其上存储有集成电路的计算机可读描述,所述计算机可读描述在集成电路制造系统中被处理时使所述集成电路制造系统制造根据权利要求13至17中任一项所述的图形系统。
23.一种集成电路制造系统,其配置成制造根据权利要求13至17中任一项所述的图形系统。
24.一种集成电路制造系统,其包括:
计算机可读存储介质,其上存储有集成电路的计算机可读描述,所述计算机可读描述描述根据权利要求13至17中任一项所述的图形系统;
布局处理系统,其配置成处理所述集成电路描述以便生成体现所述图形系统的集成电路的电路布局描述;以及
集成电路生成系统,其配置成根据所述电路布局描述制造所述图形系统。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1907812.0 | 2019-05-31 | ||
GB1907812.0A GB2579113B (en) | 2019-05-31 | 2019-05-31 | Rendering optimisation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112017268A CN112017268A (zh) | 2020-12-01 |
CN112017268B true CN112017268B (zh) | 2022-08-12 |
Family
ID=67386006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010436615.4A Active CN112017268B (zh) | 2019-05-31 | 2020-05-21 | 渲染优化的方法、系统和介质 |
Country Status (4)
Country | Link |
---|---|
US (3) | US11276222B2 (zh) |
EP (1) | EP3745258B1 (zh) |
CN (1) | CN112017268B (zh) |
GB (1) | GB2579113B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112738624B (zh) * | 2020-12-23 | 2022-10-25 | 北京达佳互联信息技术有限公司 | 用于视频的特效渲染的方法和装置 |
CN117292039B (zh) * | 2023-11-27 | 2024-02-13 | 芯瞳半导体技术(山东)有限公司 | 顶点坐标生成方法、装置、电子设备及计算机存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1647034A (zh) * | 2002-03-08 | 2005-07-27 | 电子技术公司 | 用于执行渲染美术品的着色器驱动编译的系统及方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7292239B1 (en) * | 2004-08-06 | 2007-11-06 | Nvidia Corporation | Cull before attribute read |
US20100013854A1 (en) * | 2008-07-18 | 2010-01-21 | Microsoft Corporation | Gpu bezier path rasterization |
US9305397B2 (en) * | 2012-10-24 | 2016-04-05 | Qualcomm Incorporated | Vertex order in a tessellation unit |
US9342857B2 (en) * | 2013-03-29 | 2016-05-17 | Nvidia Corporation | Techniques for locally modifying draw calls |
US9799091B2 (en) * | 2014-11-20 | 2017-10-24 | Intel Corporation | Apparatus and method for efficient frame-to-frame coherency exploitation for sort-last architectures |
US9830731B2 (en) * | 2015-04-01 | 2017-11-28 | Mediatek Inc. | Methods of a graphics-processing unit for tile-based rendering of a display area and graphics-processing apparatus |
US10089775B2 (en) * | 2015-06-04 | 2018-10-02 | Samsung Electronics Co., Ltd. | Automated graphics and compute tile interleave |
US10235799B2 (en) * | 2017-06-30 | 2019-03-19 | Microsoft Technology Licensing, Llc | Variable rate deferred passes in graphics rendering |
US11080927B2 (en) * | 2017-11-30 | 2021-08-03 | Advanced Micro Devices, Inc. | Method and apparatus of cross shader compilation |
-
2019
- 2019-05-31 GB GB1907812.0A patent/GB2579113B/en active Active
-
2020
- 2020-05-21 CN CN202010436615.4A patent/CN112017268B/zh active Active
- 2020-05-27 EP EP20176924.7A patent/EP3745258B1/en active Active
- 2020-05-31 US US16/888,773 patent/US11276222B2/en active Active
-
2022
- 2022-02-05 US US17/665,517 patent/US11688123B2/en active Active
-
2023
- 2023-06-23 US US18/213,609 patent/US20230351669A1/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1647034A (zh) * | 2002-03-08 | 2005-07-27 | 电子技术公司 | 用于执行渲染美术品的着色器驱动编译的系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3745258B1 (en) | 2022-08-17 |
CN112017268A (zh) | 2020-12-01 |
US20200380756A1 (en) | 2020-12-03 |
US20220172422A1 (en) | 2022-06-02 |
US11276222B2 (en) | 2022-03-15 |
US20230351669A1 (en) | 2023-11-02 |
EP3745258A1 (en) | 2020-12-02 |
GB2579113A (en) | 2020-06-10 |
GB2579113B (en) | 2021-04-21 |
US11688123B2 (en) | 2023-06-27 |
GB201907812D0 (en) | 2019-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11954803B2 (en) | Generation of a control stream for a tile | |
US20230351669A1 (en) | Rendering optimisation by recompiling shader instructions | |
GB2549789A (en) | Generation of a control stream for a tile | |
US20230326118A1 (en) | Controlling rendering operations by shader buffer identification | |
CN113744121A (zh) | 任务合并 | |
US11967012B2 (en) | Efficient convolution operations | |
US20220375145A1 (en) | Tile-Based Scheduling Using Per-Tile Hash Values | |
GB2593588A (en) | Controlling rendering operations | |
GB2549787A (en) | Generation of a control stream for a tile | |
US20230044249A1 (en) | Efficient convolution operations with a kernel shader | |
GB2549788A (en) | Generation of a control stream for a tile |
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 |