CN109564694A - 用于基于入库的图形处理的顶点着色器 - Google Patents
用于基于入库的图形处理的顶点着色器 Download PDFInfo
- Publication number
- CN109564694A CN109564694A CN201780044328.5A CN201780044328A CN109564694A CN 109564694 A CN109564694 A CN 109564694A CN 201780044328 A CN201780044328 A CN 201780044328A CN 109564694 A CN109564694 A CN 109564694A
- Authority
- CN
- China
- Prior art keywords
- vertex
- attribute
- subset
- shader
- processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- 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
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
Abstract
本公开描述使用两个顶点着色器的实例,其中每个顶点着色器在不同图形处理通道期间呈用于图形处理的入库架构形式。第一顶点着色器在入库通道中处理顶点的属性的子集,其中所述属性的子集包含有助于可见性确定的那些属性和可受益于用提供功能灵活性的顶点着色器处理的属性。第二不同顶点着色器在渲染通道中处理所述顶点的属性的另一子集。
Description
技术领域
本公开涉及图形处理。
背景技术
计算装置常常利用图形处理单元(GPU)以加速渲染用于显示的图形数据。此类计算装置可包含例如计算机工作站、例如所谓的智能电话等移动电话、嵌入系统、个人计算机、平板计算机和视频游戏控制台。GPU通常执行图形处理管线,所述图形处理管线包含一起操作以执行图形处理命令的多个处理级。主机中央处理单元(CPU)可通过将一或多个图形处理命令发布给GPU来控制GPU的操作。现代的CPU通常能够同时执行多个应用程序,所述多个应用程序中的每一个可需要在执行期间利用GPU。
发明内容
本公开涉及在不同图形处理通道期间通过图形处理单元(GPU)选择性地处理顶点属性。顶点的需要使用复杂处理变换的顶点属性可由第一顶点着色器在入库通道期间变换。顶点的不需要复杂处理的顶点属性可由第二顶点着色器在渲染通道期间变换。在一些实例中,第一顶点着色器可为在GPU的可编程硬件着色器核心上执行的软件顶点着色器,且第二顶点着色器可为形成在GPU上的固定功能硬件着色器。
而非在入库通道期间从顶点缓冲器流式输出需要的所有顶点属性,顶点属性的子集(例如,使用复杂处理的那些顶点属性)被流式输出。因此,作为入库通道的部分,GPU可确定具有未被流式输出的属性的顶点中的一些不需要处理,因为那些顶点不可见。因此,在渲染通道期间,并非所有具有在入库通道期间未处理的属性的顶点需要输出。以此方式,实例技术可减少需要输出的图形数据的量,由此促进存储器带宽。而且,在第二顶点着色器是固定功能硬件着色器的实例中,硬件加速度可供用于处理不需要复杂处理的顶点属性,由此促进高效处理。
在一个实例中,本公开描述一种处理数据的方法,所述方法包括:从顶点缓冲器接收顶点的属性的第一子集;用图形处理单元(GPU)的第一顶点着色器处理顶点的属性的第一子集以生成经处理属性的第一子集;从顶点缓冲器接收同一顶点的属性的第二子集;用GPU的第二不同顶点着色器处理同一顶点的属性的第二子集以生成经处理属性的第二子集;以及基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据。
在一个实例中,本公开描述一种用于处理数据的装置,所述装置包括:系统存储器,其包括被配置成存储顶点的属性的第一子集和同一顶点的属性的第二子集的顶点缓冲器;和图形处理单元(GPU),其包括入库通道电路和渲染通道电路。入库通道电路被配置成接收顶点的属性的第一子集,且用第一顶点着色器处理属性的第一子集以生成经处理属性的第一子集。渲染通道电路被配置成接收顶点的属性的第二子集,用第二不同顶点着色器处理属性的第二子集以生成经处理属性的第二子集,以及基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据。
在一个实例中,本公开描述一种上面存储指令的计算机可读存储媒体,所述指令当被执行时使图形处理单元(GPU)来:从顶点缓冲器接收顶点的属性的第一子集;用GPU的第一顶点着色器处理顶点的属性的第一子集以生成经处理属性的第一子集;从顶点缓冲器接收同一顶点的属性的第二子集;用GPU的第二不同顶点着色器处理同一顶点的属性的第二子集以生成经处理属性的第二子集;以及基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据。
在一个实例中,本公开描述一种用于处理数据的装置,所述装置包括:用于从顶点缓冲器接收顶点的属性的第一子集的装置;用于用图形处理单元(GPU)的第一顶点着色器处理顶点的属性的第一子集以生成经处理属性的第一子集的装置;用于从顶点缓冲器接收同一顶点的属性的第二子集的装置;用于用GPU的第二不同顶点着色器处理同一顶点的属性的第二子集以生成经处理属性的第二子集的装置;以及用于基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据的装置。
在附图和以下描述中阐述本公开的一或多个实例的细节。本公开的其它特征、目标和优势将从所述描述和图式以及从权利要求书中显而易见。
附图说明
图1是说明可用于实施本公开的技术的实例计算装置的框图。
图2是进一步详细说明图1的计算装置的CPU、GPU和存储器的框图。
图3是说明根据本公开中所描述的一或多个实例技术的可实施图形处理管线的实例的图形处理单元(GPU)的实例的框图。
图4是说明根据本公开中所描述的一或多个实例技术的实例处理流程的概念图。
图5是说明处理数据的实例方法的流程图。
具体实施方式
各种图形处理技术以两个通道执行图形处理。第一通道被称为入库通道,其中图形处理单元(GPU)确定哪些基元属于哪一库(也被称为块)和哪些基元可见。在被称为渲染通道的第二通道中,GPU基于哪些基元属于哪一库和基元的可见性的确定依序渲染每个库。
可出于各种原因使用此类双重通道图形处理架构(有时被称为基于流式输出的入库架构)。作为一个实例,可增加例如域着色器、镶嵌、几何着色器等额外处理级,且由于时间上分开的几何和光栅化处理而存在入库与渲染的高效重叠。
入库架构可能需要多次访问存储器以将顶点数据流式输出到存储器且在入库与渲染之间从存储器流式输入顶点数据。举例来说,完全变换的顶点在入库期间被流式输出。经变换顶点被输入用于渲染,且因此在每库渲染期间被流式输入。本公开描述用以潜在地减少此类存储器业务和相关联功率消耗的实例技术。
在入库通道期间,顶点着色器通常执行以处理顶点的所有属性且将所得经处理属性值存储在流式输出缓冲器中。然而,用顶点着色器处理顶点的所有属性可能并不具有存储器带宽高效性和处理高效性。举例来说,顶点着色器可从顶点缓冲器读取所有属性值且将所有所得经处理属性值存储到流式输出缓冲器中。属性值的此类检索和存储可能需要多次调用存储器。而且,在入库通道期间对属性执行的处理中的一些可为“平凡的”且可容易在渲染通道期间执行。平凡处理的一个实例是矩阵乘以静态矩阵。
本公开描述实例技术,其中入库通道顶点着色器被配置成处理有助于顶点的可见性确定的那些属性和需要在入库通道期间进行非平凡处理的任何属性,且不处理无助于可见性确定或并不需要非平凡处理的属性中的任一个。因此,在渲染通道期间,渲染顶点着色器可检索顶点的非经处理属性且执行顶点着色操作。在一些实例中,入库顶点着色器是在可编程电路上执行的软件顶点着色器,且渲染顶点着色器是由固定功能电路形成的硬件顶点着色器。
以此方式,入库顶点着色器可检索顶点的所有属性的子集(例如,可仅检索有助于可见性确定或需要非平凡处理的属性)。这导致需要由入库顶点着色器执行的处理变少,这还可导致入库顶点着色器需要存储在流式输出缓冲器中的属性数据变少。因此,在渲染通道期间,渲染顶点着色器可仅检索顶点的经确定有助于可见基元的未处理属性。这导致避免在入库通道期间处理顶点的无助于可见基元的某些属性(例如,无助于可见性确定且无需非平凡处理,即不只是需要非平凡处理的属性)。
因此,本公开描述一种混合顶点着色器处理,其中而非使用一个顶点着色器,可存在两个顶点着色器,其中每个顶点着色器被配置成处理属性的子集。举例来说,在处理器上执行的编译入库顶点着色器的源码的编译程序可确定存储在顶点属性中的顶点的哪些属性有助于可见性确定且哪些属性需要非平凡处理。编译程序可编译入库顶点着色器源码,使得这些属性由入库顶点着色器处理且其它属性(无助于可见性确定或不只是需要非平凡处理)不被处理。GPU的着色器核心可在入库通道期间执行入库顶点着色器,且接着在渲染期间,渲染顶点着色器处理在顶点的入库通道期间未处理的在入库通道期间被确定为可见的那些属性。
图1是说明可用于实施本公开的技术的实例计算装置2的框图。计算装置2可包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、例如便携式视频游戏装置或个人数字助理(PDA)等手持式装置、个人音乐播放器、视频播放器、显示装置、电视、电视机顶盒、服务器、中间网络装置、主机计算机或处理和/或显示图形数据的任何其它类型的装置。
如在图1的实例中所说明,计算装置2包含用户输入接口4、CPU 6、存储器控制器8、系统存储器10、图形处理单元(GPU)12、GPU 12的本地存储器14、显示接口16、显示器18和总线20。用户输入接口4、CPU 6、存储器控制器8、GPU 12和显示接口16可使用总线20彼此通信。总线20可为各种总线结构中的任一个,例如第三代总线(例如,超传输总线或无限频带总线)、第二代总线(例如,先进图形端口总线、高速外围组件互连(PCI)总线或先进可扩展接口(AXI)总线)或另一类型的总线或装置互连件。应注意,图1中所示出的不同组件之间的总线和通信接口的具体配置仅是示范性的,且具有同一或不同组件的计算装置和/或其它图形处理系统的其它配置也可用于实施本公开的技术。
CPU 6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以使CPU 6执行一或多个软件应用程序。在CPU 6上执行的软件应用程序可包含例如操作系统、字处理器应用程序、电子邮件应用程序、电子数据表应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。用户可经由一或多个输入装置(未示出),例如键盘、鼠标、麦克风、触摸垫或经由用户输入接口4耦合到计算装置2的另一输入装置将输入提供到计算装置2。
在CPU 6上执行的软件应用程序可包含指示CPU 6使图形数据渲染到显示器18的一或多个图形渲染指令。在一些实例中,软件指令可符合图形应用程序编程接口(API),例如开放图形库API、开放图形库嵌入系统(OpenGL ES)API、Direct3D API、X3DAPI、RenderMan API、WebGL API或任何其它公共或专有标准图形API。为了处理图形渲染指令,CPU 6可将一或多个图形渲染命令发布给GPU 12以使GPU 12执行图形数据的渲染的一些或所有。在一些实例中,将渲染的图形数据可包含例如点、线、三角形、四边形、三角形带等图形基元的列表。
存储器控制器8有助于进入和离开系统存储器10的数据传送。举例来说,存储器控制器8可接收存储器读取和写入命令,且关于存储器10来服务此类命令以便针对计算装置2中的组件提供存储器服务。存储器控制器8通信耦合到系统存储器10。尽管在图1的实例计算装置2中将存储器控制器8说明为与CPU 6和系统存储器10两者分开的处理模块,但在其它实例中,存储器控制器8的功能性中的一些或所有可实施在CPU6和系统存储器10中的一或两个上。
系统存储器10可存储可存取以用于由CPU 6执行的程序模块和/或指令和/或用于由在CPU 6上执行的程序使用的数据。举例来说,系统存储器10可存储用户应用程序和与所述应用程序相关联的图形数据。系统存储器10可另外存储用于由计算装置2的其它组件使用和/或由其生成的信息。举例来说,系统存储器10可充当用于GPU 12的装置存储器且可存储将由GPU 12操作的数据以及由GPU 12执行的操作产生的数据。举例来说,系统存储器10可存储纹理缓冲器、深度缓冲器、模板缓冲器、顶点缓冲器、帧缓冲器或类似者的任何组合。另外,系统存储器10可存储用于由GPU 12处理的命令流。系统存储器10可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存存储器、磁性数据媒体或光学存储媒体。
GPU 12可被配置成执行图形操作以将一或多个图形基元渲染到显示器18。因此,当在CPU 6上执行的软件应用程序中的一个需要图形处理时,CPU 6可将图形命令和图形数据提供到GPU 12以用于渲染到显示器18。图形命令可包含例如如绘制调用等绘制命令、GPU状态编程命令、存储器传送命令、通用计算命令、内核执行命令等。在一些实例中,CPU 6可通过将命令和图形数据写入到可由GPU 12存取的存储器10而将命令和图形数据提供到GPU12。在一些实例中,GPU 12可被进一步配置成执行针对在CPU6上执行的应用程序的通用计算。
在一些情况下,GPU 12可内置有高度并行结构,所述高度并行结构比CPU 6提供对向量运算的更高效处理。举例来说,GPU 12可包含多个处理元件,所述多个处理元件被配置成以并行方式在多个顶点或像素上操作。在一些情况下,GPU 12的高度并行本质可允许GPU12比使用CPU 6将场景直接绘制到显示器18更快地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示器18上。另外,GPU 12的高度并行本质可允许GPU 12比CPU6更快地处理某些类型的向量和矩阵运算以用于通用计算应用程序。
在一些情况下,GPU 12可集成到计算装置2的母板中。在其它情况下,GPU 12可存在于安装在计算装置2的母板中的端口中的图形卡上或另外可并入在被配置成与计算装置2交互操作的外围装置内。在其它例子中,GPU 12可与CPU 6位于同一微芯片上从而形成芯片上系统(SoC)。GPU 12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。
GPU 12可直接耦合到GPU本地存储器14。因此,GPU 12可从GPU本地存储器14读取数据和将数据写入到GPU本地存储器14,而不必使用总线20。换句话说,GPU12可使用本地存储装置而非芯片外存储器来在本地处理数据。这通过消除GPU 12经由总线20读取和写入数据的需要来允许GPU 12以更高效的方式操作,其中经由总线操作可经历繁重的总线业务。然而,在一些情况下,GPU 12可不包含单独的高速缓存,而是经由总线20利用系统存储器10。GPU本地存储器14可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存存储器、磁性数据媒体或光学存储媒体。
CPU 6和/或GPU 12可在系统存储器10内分配的帧缓冲器中存储经渲染的图像数据。显示器接口16可从所述帧缓冲器检索所述数据且配置显示器18以显示由所述经渲染的图像数据表示的图像。在一些实例中,显示接口16可包含数/模转换器(DAC),所述数/模转换器被配置成将从帧缓冲器检索的数字值转换成可由显示器18消耗的模拟信号。在其它实例中,显示接口16可将数字值直接传递到显示器18以供处理。显示器18可包含监视器、电视机、投影装置、液晶显示器(LCD)、等离子体显示器面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器18可集成在计算装置2内。举例来说,显示器18可为移动电话手持机或平板计算机的屏幕。或者,显示器18可为经由有线或无线通信链路耦合到计算装置2的独立装置。举例来说,显示器18可为经由缆线或无线链路连接到个人计算机的计算机监视器或平板显示器。
本公开中所描述的技术涉及入库架构中的图形处理。在入库架构中,GPU 12以两个通道生成用于显示的图形数据:入库通道和渲染通道。在入库通道中,GPU 12确定基元的顶点是否属于库(也被称为块)。每个块包含N×M像素数目,且大体上符合允许像素值存储在本地存储器14中的大小。另外,在入库通道期间,GPU 12可执行深度测试以确定任何顶点是否被任何其它顶点遮住,从而使得可去除经遮住的顶点以免于进一步处理。在入库通道结束时,GPU 12可已生成多个可见顶点的顶点数据以及识别可见顶点属于哪一块(即,库)的信息。
接下来,在渲染通道中,GPU 12可基于多个顶点的顶点数据渲染像素。举例来说,GPU 12可光栅化基元的顶点,且生成基元内的像素的像素值。GPU 12可将像素值输出到系统存储器10(例如,系统存储器10中的帧缓冲器)。显示接口16可从系统存储器10检索这些像素值,执行进一步处理,且基于所得像素值将信息输出到显示器18。
作为入库通道的部分,GPU 12的顶点着色器从顶点缓冲器检索顶点的顶点信息且处理顶点信息以生成顶点数据。在许多情况下,顶点着色器是在GPU 12的着色器核心上执行的软件顶点着色器。
存储在顶点缓冲器中的顶点信息由在CPU 6上执行的应用程序生成,但也可通过其它方式生成。顶点信息大体上是指每个顶点的多个顶点属性,例如坐标信息、不透明度和类似者(例如,每个顶点与多个顶点属性相关联)。顶点着色器的功能性的部分可为将每个顶点的3D坐标变换成2D坐标,所述2D坐标将界定显示器18上的2D坐标。顶点着色器的输出还是顶点的深度值。可存在顶点着色器执行的其它功能,例如照明和着色。
在一些技术中,不同于本公开针对顶点的那些,作为入库通道的部分,顶点着色器检索顶点的所有顶点属性以用于处理。然而,处理每个顶点的所有顶点属性可能并不具有处理或存储器带宽高效性。
举例来说,在顶点的处理之后,GPU 12可确定顶点可见还是不可见,且如果不可见,那么GPU 12舍弃所述顶点以免于进一步处理(例如,其经处理属性不会被存储)。然而,尽管结果可为作为入库通道的部分,GPU 12舍弃顶点以免于进一步处理,但GPU12仍处理顶点的无助于最终渲染图像的属性。因此,GPU 12从系统存储器10检索顶点的属性且处理随后舍弃的顶点的这些属性,这导致不必要的存储器带宽使用和低效处理。
本公开描述使用两个不同的顶点着色器执行图形处理。第一顶点着色器可被配置成检索顶点的有助于所述顶点的可见性确定的属性(且出于以下原因可为可见或不可见但需要非平凡变换的属性)的属性数据。因为第一顶点着色器检索属性数据的子集,所以与当检索所有属性数据时相比,GPU 12从系统存储器10需要检索的数据量可能会减少。第一顶点着色器可在入库通道期间执行其操作。作为入库通道的部分,GPU 12可输出通过深度测试的顶点(例如,可见顶点)的经处理属性数据。
第二顶点着色器被配置成检索仅未被舍弃的那些顶点的未处理属性。第二顶点着色器可在渲染通道期间执行其操作。
因此,本公开描述用第一顶点着色器处理顶点的属性的第一子集以生成经处理属性的第一子集以及用第二顶点着色器处理同一顶点的属性的第二子集以生成经处理属性的第二子集。GPU 12可基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据。
以此方式,由于不可见而最终被舍弃的顶点存在从不由顶点着色器从存储器读取的一些属性。举例来说,在其它技术中的一些中,读取和潜在地处理所有顶点的所有属性,且接着舍弃顶点中的一些。这里,读取顶点的有助于可见性确定的属性(和可能地受益于可编程顶点着色的那些属性),且不读取其它属性。如果此顶点最终被舍弃,那么无需存取和处理剩余未读属性,从而节省了存储器带宽和计算循环。
如上文所描述,一些顶点着色器可为在GPU 12的可编程着色器核心上执行的软件。因为GPU 12的着色器核心可编程,所以基于软件的顶点着色器可提供功能灵活性且允许复杂处理任务。举例来说,GPU 12的着色器核心可按大多数任何可想象的方式被配置成执行顶点着色器的功能。
然而,并非所有属性处理需要基于软件的顶点着色器提供的功能灵活性。许多类型的属性处理需要非常有限类型的处理。对于顶点的一些属性,与用基于软件的顶点着色器处理此类属性相比,经由硬件固定功能电路(例如,非可编程)处理此类属性可导致更快处理且需要更少计算功率。
在一些实例中,在入库通道期间执行其操作的第一顶点着色器可为基于软件的顶点着色器。在入库通道期间,除处理有助于可见性确定的属性之外,第一顶点着色器可处理受益于可编程着色器核心上可获得的功能灵活性的属性。在渲染通道期间执行其操作的第二顶点着色器可为固定功能硬件顶点着色器。固定功能顶点着色器提供有限功能灵活性且可经硬接线以执行有限操作。尽管第二顶点着色器是被配置成执行固定功能的经硬接线顶点着色器电路,但第二顶点着色器可更快地且通过比使用基于软件的顶点着色器时消耗更少功率而执行其操作。
在本公开中,第一顶点着色器被描述为对有助于可见性信息或确定的属性和受益于基于软件的顶点着色的属性(有时被称为非一般变换属性)执行操作,且第二顶点着色器被描述为对并不受益于基于软件的顶点着色器的属性(有时被称为平凡变换属性)执行操作。然而,本公开中所描述的技术不限于此。一般来说,第一顶点着色器可被配置成处理顶点的属性的第一子集且第二顶点着色器可被配置成处理属性的第二子集。在一些但未必所有中,属性的第二子集可为固定功能电路足以处理的那些属性,且属性的第一子集可为提供可见性信息的那些属性和固定功能电路不足以处理的那些属性。
在实例技术中,第一顶点着色器可被配置成检索和处理顶点的属性的子集。然而,开发第一顶点着色器的源码的开发者可能并不已知第一顶点着色器要检索和处理属性的哪一子集。在一些实例技术中,在CPU 6上执行的编译程序可在运行时间期间编译第一顶点着色器的源码。作为并发症的部分,编译程序可包含指示第一顶点着色器要检索和处理属性的哪一子集的指令或去除将使第一顶点着色器检索和处理第一顶点着色器不会检索和处理的属性的指令。
图2是进一步详细说明图1的计算装置2的CPU 6、GPU 12和存储器10的框图。如图2中所示出,CPU 6通信耦合到GPU 12和存储器10,且GPU 12通信耦合到CPU 6和存储器10。在一些实例中,GPU 12可与CPU 6集成到母板上。在额外实例中,GPU12可实施在安装于包含CPU 6的母板的端口中的图形卡上。在其它实例中,GPU 12可并入在被配置成与CPU 6交互操作的外围装置内。在额外实例中,GPU 12可与CPU 6位于同一微芯片上,从而形成芯片上系统(SoC)。CPU 6被配置成执行应用程序21、编译程序22、图形API 24、GPU驱动程序26和操作系统28。GPU 12包含控制器30、着色器核心32和一或多个固定功能单元34。
软件应用程序21可包含使图形内容显示的一或多个指令或使非图形任务(例如,通用计算任务)在GPU 12上执行的一或多个指令中的至少一个。软件应用程序21可将指令发布给图形API 24。图形API 24可为将从软件应用程序21接收的指令转译成可由GPU驱动程序26消耗的格式的运行时间服务。在一些实例中,图形API 24和GPU驱动程序26可为同一软件服务的部分。
GPU驱动程序26经由图形API 24从软件应用程序21接收指令,且控制GPU 12的操作以服务所述指令。举例来说,GPU驱动程序26可调配一或多个命令流,将所述命令流放置到存储器10中且指示GPU 12执行命令流。GPU驱动程序26可将命令流放置到存储器10中,且经由操作系统28,例如,经由一或多个系统调用,与GPU 12通信。
控制器30被配置成检索存储在命令流中的命令,且分派所述命令以用于在着色器核心32和一或多个固定功能单元34上执行。控制器30可从命令流分派命令以用于在着色器核心32和一或多个固定功能单元34中的所有或子集上执行。控制器30可为GPU12的硬件,可为在GPU 12上执行的软件或固件,或两者的组合。
着色器核心32包含可编程电路(例如,软件在上面执行的处理核心)。一或多个固定功能单元34包含固定功能电路,所述固定功能电路被配置成以最小功能灵活性执行有限操作。着色器核心32和一或多个固定功能单元34一起形成被配置成执行图形处理的图形管线。
着色器核心32可被配置成执行可从CPU 6下载到GPU 12上的一或多个着色器程序。在一些实例中,着色器程序可为用高级着色语言书写的程序的编译版本,所述高级着色语言例如OpenGL着色语言(GLSL)、高级着色语言(HLSL)、用于图形的C(Cg)着色语言等。在一些实例中,着色器核心32可包含被配置成并行操作的多个处理单元,例如,SIMD管线。着色器核心32可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如,指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。在着色器核心32上执行的着色器程序的实例包含例如顶点着色器、像素着色器(也被称为片段着色器)、几何着色器、外壳着色器、域着色器、计算着色器和/或统一着色器。
固定功能单元34可包含经硬接线以执行某些功能的硬件。尽管固定功能硬件可经由例如一或多个控制信号被配置成执行不同功能,但所述固定功能硬件通常不包含能够接收用户编译程序的程序存储器。在一些实例中,一或多个固定功能单元34可包含例如执行光栅操作的处理单元,例如深度测试、剪刀测试、阿尔法混合等。
CPU 6的GPU驱动程序26可被配置成将命令流写入存储器10,且GPU 12的控制器30可被配置成从存储器10读取命令流中的一或多个命令。在一些实例中,可将命令流中的一或两个存储为存储器10中的环形缓冲器。环形缓冲器可为具有循环寻址方案的缓冲器,其中CPU 6和GPU 12维持与将数据写入到环形缓冲器和从环形缓冲器读取数据相关联的同步状态变量。
举例来说,如果第一命令流是环形缓冲器,那么CPU 6和GPU 12中的每一个可存储指示待写入到环形缓冲器中的下一地址的写入指针和指示待从环形缓冲器中读取的下一地址的读取指针。当CPU 6将新命令写入到环形缓冲器时,CPU 6可更新CPU 6中的写入指针且指示GPU 12更新GPU 12中的写入指针。类似地,当GPU 12从环形缓冲器读取新命令时,GPU 12可更新GPU 12中的读取指针且指示CPU 6更新CPU 6中的读取指针。其它同步机制是可能的。当读取和/或写入指针达到针对环形缓冲器所分配的地址范围中的最高地址时,读取和/或写入指针可回绕到最低地址以实施循环寻址方案。
现将相对于图2描述根据本公开设计的实例GPU驱动程序26和实例GPU控制器30的实例操作。GPU驱动程序26从软件应用程序21接收指定待由GPU 12执行的图形操作和/或通用计算操作的一或多个指令。GPU驱动程序26将输出命令流放置到可由GPU控制器30存取的存储器10中。GPU驱动程序26通知GPU控制器30对应于软件应用程序21的命令流可用于处理。举例来说,GPU驱动程序26可将指示命令流准备好执行的一或多个值写入到GPU寄存器(例如,由GPU 12轮询的GPU硬件寄存器和/或由GPU 12轮询的GPU存储器映射的寄存器)。
在通知命令流准备好执行之后,GPU 12的控制器30可确定资源在GPU 12上当前是否可用以开始执行命令流。如果资源可用,那么控制器30开始分派命令流中的命令。
作为图形处理的部分,CPU 6可将某些图形处理任务卸载到GPU 12。举例来说,应用程序21可生成互连以形成图形对象的基元的多个顶点的属性的属性数据。应用程序21可将属性数据存储在存储器10中的顶点缓冲器中。图形驱动程序26可指示控制器30检索用于处理的顶点的属性的属性数据以生成用于显示的图形数据。
在本公开中所描述的实例技术中,图形驱动程序26和/或控制器30可被配置成使GPU 12以两个通道生成图形数据:入库通道和渲染通道。在入库通道中,图形驱动程序26和/或控制器30可定义库(也被称为块)的大小(例如,NxM像素数目)。控制器30接着可使着色器核心32和一或多个固定功能单元34执行相应操作以确定哪些基元属于哪一块和哪些顶点可见。在渲染通道中,控制器30可使着色器核心32和一或多个固定功能单元34在每库的基础上执行相应操作以在逐库的基础上渲染图形数据。GPU 12将所得图形数据存储在存储器10中以用于检索和显示。
图形处理的部分包含顶点处理,所述顶点处理大体上由在着色器核心32上执行顶点着色器的GPU 12执行。举例来说,顶点着色器可对每个顶点的属性的属性数据执行坐标转换、照明、着色和其它此类处理。应用程序21可与顶点着色器结合,且应用程序21可经由图形驱动程序26发布指示控制器30检索顶点着色器的目标代码以用于在着色器核心32上执行的命令。
在一些技术中,顶点着色器检索顶点的属性的所有属性数据且执行顶点处理操作。然而,并非所有顶点是可见的,且因此顶点着色器不必要地执行操作以及不必要地消耗存储器带宽,从而检索属性数据。此外,基于软件的顶点着色器可提供功能灵活性,但可存在并不需要功能灵活性且实际上可由固定功能电路执行的许多处理。
在本公开中所描述的实例技术中,控制器30可使GPU 12使用两个不同的顶点着色器执行顶点着色。在一些实例中,控制器30可使着色器核心32在入库通道期间执行第一顶点着色器且使第二顶点着色器在渲染通道期间执行其操作。第一顶点着色器可被称为入库通道顶点着色器,且第二顶点着色器可被称为渲染通道顶点着色器。如更详细地描述,入库通道顶点着色器可为基于软件的顶点着色器,且尽管不是必需的,但渲染通道顶点着色器可为基于硬件固定功能的顶点着色器。
在入库通道期间,控制器30可检索入库顶点着色器目标代码38,所述入库顶点着色器目标代码38是入库通道顶点着色器的目标代码,且在着色器核心32上执行入库顶点着色器目标代码38以执行某些顶点着色操作。一般来说,入库顶点着色器目标代码38的执行可使着色器核心32处理顶点的属性的子集(即,处理属性的子集的属性数据)而非处理顶点的所有属性。举例来说,入库顶点着色器目标代码38可被配置成使得入库通道顶点着色器仅处理有助于确定顶点是否可见的属性且处理无法由渲染通道顶点着色器处理或用入库通道顶点着色器更好地处理的属性。如上文所描述,在一些实例中,渲染通道顶点着色器可为固定功能顶点着色器(例如,非可编程),且因此受益于动态计算的属性可比渲染通道顶点着色器更好地适合于由入库通道顶点着色器执行。
有助于可见性确定的属性的实例包含坐标和不透明度值。可更好地适合于入库通道顶点着色器的属性(例如,可受益于软件顶点着色器的功能灵活性的属性)的实例包含动态矩阵计算/蒙皮、非线性顶点变换、多属性组合和类似者。
在本公开中所描述的实例技术中,编译程序22可被配置成生成入库顶点着色器目标代码38。如所说明,存储器10可存储顶点着色器源码36。在运行时间(例如,在应用程序21正执行的同时),操作系统28可从存储器10检索顶点着色器源码36且将顶点着色器源码36提供到编译程序22以用于编译。
在开发者开发顶点着色器源码36期间,开发者可能不会意识到哪些属性将需要受益于基于软件的顶点着色器的处理以及在应用程序21的执行期间可用固定功能顶点着色器处理哪些属性。因此,顶点着色器源码36可包含用以对顶点的所有属性执行操作的指令。
然而,基于由应用程序21发布的实际指令,编译程序22可确定顶点着色器源码36内的特定指令是否应被编译和包含在入库顶点着色器目标代码38中。操作系统28可将由应用程序21发布的指令提供到编译程序22以便于编译程序22确定顶点着色器源码36内的特定指令是否应被编译和包含在入库顶点着色器目标代码38中。
作为实例,应用程序21可发布指示某些属性(例如,某些属性的属性数据)有待乘以动态矩阵(例如,具有直到后来执行时才会已知的值的矩阵)的指令。在此情况下,编译程序22可确定此指令比由渲染通道顶点着色器更好地由入库通道顶点着色器执行,因为直到后来才将已知矩阵值。因此,编译程序22可编译顶点着色器源码36中的指令以用于执行此矩阵乘法且包含入库顶点着色器目标代码38中的这些指令。
作为另一实例,应用程序21可发布指示有待使用非线性运算集合变换某些属性(例如,某些属性的属性数据)的指令。在此情况下,编译程序22可被配置成编译顶点着色器源码36中的所有指令,所述所有指令包含非线性变换且包含入库顶点着色器目标代码38中的此类指令。
作为另一实例,应用程序21可发布指示某些属性(例如,某些属性的属性数据)有待乘以静态矩阵的指令。在此情况下,编译程序22可能不会编译顶点着色器源码36中的指令以执行此乘法且此类指令将不会包含在入库顶点着色器目标代码38中。在此实例中,当着色器核心32执行入库通道顶点着色器的入库顶点着色器目标代码38时,着色器核心32可能不会执行矩阵乘法。实际上,矩阵乘法将作为渲染通道的部分发生。
在上述实例中,编译程序22被描述为避免编译某些指令;然而,实例技术不限于此。在一些实例中,编译程序22可被配置成包含有待编译的指令且分离出有待由渲染通道顶点着色器执行的指令。
此外,入库通道的部分包含用于可见性确定的深度测试。因此,编译程序22可被配置成维持顶点着色器源码36中的包含处理坐标和不透明度值的所有指令,即使此类指令并不需要可编程灵活性,从而使得坐标和不透明度值在入库通道中可用于确定顶点是可见还是被遮住。
具有入库顶点着色器目标代码38的入库通道顶点着色器对顶点的属性的子集而非所有属性执行操作。因为入库通道顶点着色器对属性的子集执行操作,所以与检索所有属性数据的顶点着色器相比,作为入库顶点着色器代码38在着色器核心32上执行的部分,控制器30检索的属性数据的量可减少。在一些情况下,利用例如动态矩阵计算/蒙皮、非线性顶点变换、多属性组合等运算的属性是相对罕见的。因此,在着色器核心32对更少属性执行运算时,存储器带宽可能会减少且处理效率可能会提高。
入库通道顶点着色器的执行结果是经处理顶点属性。举例来说,控制器30可从存储器10中的顶点缓冲器检索由在着色器核心32上执行的入库通道顶点着色器处理的属性的子集。入库通道顶点着色器的执行可使着色器核心32生成经处理顶点属性,其中所述经处理顶点属性是有待生成的所有经处理顶点属性的子集。
作为入库通道的部分,GPU 12(例如,经由一或多个固定功能单元34中的一个)可确定顶点是可见的。GPU 12可在顶点可见时将经处理顶点属性存储在存储器10中且在顶点不可见时舍弃经处理顶点属性。因为GPU 12存储可见顶点而不存储经遮住顶点的经处理顶点属性,且经处理顶点属性是所有顶点属性的子集,所以需要存储的数据量可能会进一步减少。
未处理的属性保持存储在顶点缓冲器中。而且,编译程序22可留下顶点着色器源码36的未被编译在CPU 6的本地存储器或可能在存储器10中的指令。在本公开中所描述的实例技术中,作为渲染通道的部分,GPU驱动程序26可输出未被编译到控制器30以用于执行的指令和未被处理到控制器30以用于处理的属性。
在渲染通道中,控制器30可将指令和属性提供到渲染通道顶点着色器,所述渲染通道顶点着色器可为一或多个固定功能单元34的固定功能单元。渲染通道顶点着色器可被配置成执行有限功能,例如3x3或4x4矩阵向量乘以静态矩阵、向量标准化(Vec3)和缩放。在本公开中所描述的技术中,渲染通道顶点着色器可对被确定为可见的顶点的属性的子集执行操作。入库通道顶点着色器可已经对所有顶点的属性的子集执行操作,且渲染通道顶点着色器可对属性的剩余子集但仅对被确定为可见的顶点执行操作。
以此方式,可用两种方式实现处理效率增益。对于特定顶点,仅属性的子集可由入库通道顶点着色器处理,且如果所述顶点被确定为不可见,那么不浪费计算资源来处理顶点的剩余属性。另外,因为可避免与软件处理(例如,函数调用、回路管理等)开销相关联的计算资源,所以使用固定功能渲染通道顶点着色器在计算上可比基于软件的入库通道顶点着色器更高效。
尽管上述实例将渲染通道顶点着色器描述为是固定功能顶点着色器,但实例技术不限于此。在一些实例中,渲染通道顶点着色器可为基于软件的顶点着色器。即使在此类实例中,可存在存储器带宽增益,因为渲染通道顶点着色器可能不执行指令以处理被确定为不可见的属性。为易于描述,本公开将渲染通道顶点着色器描述为是固定功能顶点着色器。
图3是说明根据本公开中所描述的一或多个实例的可实施图形处理管线的实例的图形处理单元(GPU)的实例的框图。为了执行图形操作,GPU 12可实施图形处理管线。图形处理管线包含执行如由在GPU 12上执行的软件或固件定义的功能,和通过经硬接线以执行极具体功能的固定功能单元执行功能。在GPU 12上执行的软件或固件可被称为着色器,且着色器可在GPU 12的一或多个着色器核心上执行。着色器给使用者提供功能灵活性,因为使用者可设计着色器按任何可设想的方式执行所要的任务。然而,固定功能单元针对固定功能单元执行任务的方式而经硬接线。因此,固定功能单元可不提供大量功能灵活性。
在此实例中,GPU 12可包含控制器30、输入汇编程序电路40、入库通道电路44和渲染通道电路54中的一或多个。入库通道电路44包含入库通道顶点着色器46,所述入库通道顶点着色器46用虚线说明以指示入库通道顶点着色器46在GPU 12的着色器核心32上执行。举例来说,入库通道电路44包含入库通道顶点着色器46在上面执行的着色器核心32。入库通道电路44还包含入库电路48和深度测试电路50。渲染通道电路54包含渲染通道顶点着色器56、光栅化器电路58和像素着色器62,所述像素着色器62用虚线说明以指示像素着色器62在着色器核心32上执行。
着色器核心32也可执行其它类型的着色器,例如以所述次序遵循顶点着色器级且用于镶嵌的外壳着色器和域着色器。镶嵌电路还可包含在一或多个固定功能单元34中以用于执行镶嵌。着色器核心32还可执行几何着色器,所述几何着色器在着色器核心32执行域着色器时接收域着色器的输出或在不执行域着色器时接收顶点着色器的输出。光栅化器电路58可接收由入库通道顶点着色器46和渲染通道顶点着色器56生成的图形数据,如所说明,或从几何着色器(当可用时)或域着色器(当可用时)接收图形数据。
图形管线的其它配置是可能的,且本公开中所描述的技术不应被视为限于图3中所说明的具体实例。举例来说,GPU 12可包含比所说明的那些多的级,且在一些实例中,GPU12可能未必包含所有所说明的级。而且,提供所述级的具体排序用于说明目的且不应被视为限制。
图3还说明用于在中间图形数据通过GPU 12的图形管线生成时存储所述图形数据的存储器10中的各种缓冲器。如所说明,存储器10包含顶点缓冲器42、流式输出缓冲器52、像素缓冲器60和帧缓冲器64。这些缓冲器可为同一更大缓冲器的部分或可为单独缓冲器。
应用程序21可使CPU 6将顶点的顶点数据(例如,属性数据)输出到顶点缓冲器42。输入汇编程序电路40可从系统存储器10读取如由CPU 6定义的顶点的顶点,且汇编控制点以形成顶点。举例来说,输入汇编程序电路40可读取坐标、色彩值和其它此类信息。坐标、色彩值和其它此类信息可通常被称为顶点的属性。基于顶点的属性,输入汇编程序电路40可确定基元的大体布局。输入汇编程序电路40可为固定功能单元。
入库通道顶点着色器46可接收顶点的属性的属性数据。然而,如本公开中所描述,入库通道顶点着色器46可检索属性的子集,例如有助于可见性确定且受益于由基于软件的顶点着色器提供的功能灵活性的那些属性。入库通道顶点着色器46可执行每顶点操作,例如变换、蒙皮、变形和每顶点照明。编译程序22可已确定入库通道顶点着色器46基于由应用程序21生成的指令有待执行哪些指令。因此,入库通道顶点着色器46可从顶点缓冲器42接收顶点的属性的第一子集,且可处理属性的第一子集以生成经处理属性的第一子集。
入库电路48从入库通道顶点着色器46接收输出且确定顶点属于哪一块(例如,入库)。举例来说,入库通道顶点着色器46的输出在观察者视角可为x和y坐标对以及深度值。入库电路48可利用x和y坐标以确定顶点属于哪一块,以及生成由渲染通道电路54渲染所需的任何额外图形数据。入库电路48可为一或多个固定功能单元34的固定功能单元。
深度测试电路50可比较由入库通道顶点着色器46处理的顶点的z坐标以确定顶点是可见还是不可见。深度测试电路50可输出对流式输出缓冲器52可见的顶点的经处理属性。同样,并非所有顶点属性可已被处理。可存在一些尚未被处理的属性,例如不需要由入库通道顶点着色器46提供的功能灵活性的那些属性。
渲染通道顶点着色器56从顶点缓冲器42接收未由入库通道顶点着色器46处理的属性。然而,渲染通道顶点着色器56可仅处理被确定为可见的顶点的属性。因此,渲染通道顶点着色器56可从顶点缓冲器42接收与入库通道顶点着色器46同一顶点的属性的第二子集,且可处理同一顶点的属性的第二子集以生成经处理属性的第二子集。如更详细地描述,GPU 12的图形管线中的剩余级可基于经处理属性的第一子集(例如,至少被确定为可见的顶点的那些属性)和经处理属性的第二子集生成用于显示的图形数据。
举例来说,图形驱动程序26可在入库通道期间追踪所存储顶点的经处理属性。图形驱动程序26接着可经由控制器30使渲染通道顶点着色器56检索仅被确定为可见的那些顶点的属性。图形驱动程序26还可输出不是入库通道顶点着色器46的部分的用于渲染通道顶点着色器56执行的那些指令。渲染通道顶点着色器56可为一或多个固定功能单元34的固定功能单元且可将经处理属性输出到GPU 12的本地存储器(例如,高速缓存)。
光栅化器电路58从流式输出缓冲器52和GPU 12的本地存储器两者接收基元的顶点的属性数据,所述本地存储器存储来自渲染通道顶点着色器56的输出且将基元转换成用于显示器的像素。举例来说,基元可被定义为指示基元的互连的向量,且可被定义于独立于将显示图像的显示器的坐标空间中。光栅化器电路58将这些向量转换成显示器坐标,且执行任何额外功能,例如去除经遮住的基元内的点。光栅化器电路58可为一或多个固定功能单元34的固定功能单元且将值输出到像素缓冲器60。
光栅化器电路58可被配置成基于来自流式输出缓冲器52和GPU 12的本地存储器两者的属性生成用于显示的图形数据。光栅化器电路58的输出是用于显示的图形数据。举例来说,GPU 12的额外组件接收由光栅化器电路58生成的图形数据以用于进一步处理且生成用于显示的图形数据。
像素着色器62从像素缓冲器60接收如由光栅化器电路58输出的像素且执行后处理以将色彩值分配到待显示的像素中的每一个。举例来说,像素着色器62可接收存储在系统存储器10中的常数值、存储在系统存储器10中的纹理数据和任何其它数据以生成每像素输出,例如色彩值。像素着色器62还可输出指示像素的不透明性的不透明度值。像素着色器62可将所得像素值输出到帧缓冲器64。
尽管未说明,但在一些实例中,像素着色器62可输出到输出合并电路以进行任何最终像素处理。举例来说,输出合并电路可利用深度信息以进一步确定是否应去除显示像素中的任一个。输出合并电路还可执行混合操作以生成最终像素值。在此类实例中,输出合并电路可将最终像素值输出到帧缓冲器64。
上述事例描述了顶点可见的情况。然而,对于不可见的第二顶点,处理可能不同。举例来说,入库通道顶点着色器46可处理顶点的属性的第一子集,且深度测试电路50可确定顶点不可见。在此情况下,渲染通道电路54可避免响应于确定顶点不可见而处理顶点的属性的第二子集(例如,剩余属性)。
图4是说明根据本公开中所描述的一或多个实例技术的实例处理流程的概念图。图4说明顶点着色器源码36的一个实例,所述顶点着色器源码36包含指令:gl_Position=MVP*gl_Vertex,其中MVP是静态矩阵,且normal=标准化(MVN*gl_Normal),其中MVN是静态矩阵,且标准化函数是用其范数的倒数缩放向量的函数。顶点着色器源码36还包含指令texcoord=vec2(sin(normal.x)、cos(normal.y)。
在此实例中,编译程序22可确定因为normal=标准化(MVN*gl_Normal)仅包含静态矩阵乘法和缩放操作,所以这些指令无需被编译和包含在入库顶点着色器目标代码38中,所述入库顶点着色器目标代码38的执行与在着色器核心32上执行的入库通道顶点着色器46相同。然而,编译程序22可确定vec2(sin(normal.x)、cos(normal.y))指令的正弦和余弦运算应由入库通道顶点着色器46执行。因此,如在入库通道之后所说明,流式输出缓冲器52可存储texcoord的值,因为所述指令由入库通道顶点着色器46执行。
图形驱动程序26可将MVP和MVN矩阵输出到控制器30,从而使得控制器30可使渲染通道顶点着色器56执行指令中所定义的操作。渲染通道顶点着色器56可经由控制器30从顶点缓冲器42接收gl_Vertex和gl_Normal值。因此,在渲染通道期间,渲染通道顶点着色器56可执行矩阵乘法以生成gl_Position和normal值且将所述值存储在GPU 12的本地存储器中。
光栅化器电路58从流式输出缓冲器52接收texcoord值且从GPU 12的本地存储器接收渲染通道顶点着色器56的结果。光栅化器电路58对经处理属性执行其操作且GPU12的剩余级进一步处理数据以生成用于显示的图形数据。举例来说,光栅化器电路58生成用于显示的图形数据,且GPU 12的剩余状态进一步处理由光栅化器电路58生成的数据以生成用于显示的图形数据。
在所说明的实例中,在入库通道期间,仅由入库通道顶点着色器46处理的属性从顶点缓冲器42输出,且入库通道顶点着色器46是可编程顶点着色器。顶点的所有其它属性可保持在顶点缓冲器42中。对于这些属性,图形驱动程序26输出每批变换矩阵和实现标准化的标志(例如,对于normal属性,MVP和MVN矩阵加上实现标准化的标志)。在库渲染期间,变换由渲染通道顶点着色器56执行,所述渲染通道顶点着色器56可为固定功能硬件顶点着色器。在渲染期间可能不存在可编程顶点处理。由入库通道顶点着色器46处理的属性直接从流式输出缓冲器52读取。光栅化器电路58接收顶点属性的整个集合(例如,由入库通道顶点着色器46处理的那些顶点属性和由渲染通道顶点着色器56处理的那些顶点属性)以用于光栅化和进一步处理。
图5是说明处理数据的实例方法的流程图。举例来说,图5说明利用两个不同顶点着色器的实例技术,其中每个顶点着色器以不同图形处理通道操作。
GPU 12的第一顶点着色器可从顶点缓冲器42接收顶点的属性的第一子集(70)。举例来说,入库通道顶点着色器46可接收编译程序22确定应由入库通道顶点着色器46处理的属性,包含顶点可见性的确定。
第一顶点着色器(例如,入库通道顶点着色器46)可处理顶点的属性的第一子集以生成经处理属性的第一子集(72)。属性的第一子集的此处理可发生在入库通道期间,其中所述入库通道包含确定哪些顶点属于哪一块(例如,经由入库电路48)。属性的第一子集包含用于确定顶点的可见性的属性。而且,处理属性的第一子集可包含在着色器核心32上执行第一顶点着色器,和基于第一顶点着色器的执行而处理属性的第一子集。
GPU 12的第二顶点着色器可从顶点缓冲器42接收同一顶点的属性的第二子集(74)。举例来说,渲染通道顶点着色器56可接收编译程序22确定未由入库通道顶点着色器46处理的属性。
第二顶点着色器(例如,渲染通道顶点着色器56)可处理顶点的属性的第二子集以生成经处理属性的第二子集(76)。属性的第二子集的此处理可发生在渲染通道期间,其中所述渲染通道包含生成用于显示的图形数据(例如,经由像素着色器62或后续输出合并电路)。第二顶点着色器包含固定功能硬件顶点着色器。在一些实例中,处理属性的第二子集可包含在着色器核心32上执行第二顶点着色器,和基于第二顶点着色器的执行而处理属性的第二子集。
GPU 12可基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据(78)。举例来说,光栅化器电路58可基于被确定为可见的顶点的经处理属性的第一子集和经处理属性的第二子集的经处理属性生成用于显示的图形数据。光栅化器电路58生成用于显示的图形数据(例如,光栅化器电路58输出的图形数据由额外组件使用以生成用于显示的图形数据)。举例来说,像素着色器62可接收由光栅化器电路58生成的图形数据,且进一步处理数据以生成用于显示的图形数据。对于被确定为可见的顶点,GPU 12可基于确定顶点不可见而避免处理属性的第二子集,且可实际上舍弃值。
因此,入库通道电路44被配置成接收顶点的属性的第一子集且用第一顶点着色器(例如,入库通道顶点着色器46)处理属性的第一子集以生成经处理属性的第一子集。渲染通道电路54被配置成接收顶点的属性的第二子集,且用第二不同顶点着色器(例如,渲染通道顶点着色器56)处理属性的第二子集以生成经处理属性的第二子集。渲染通道电路54被配置成基于经处理属性的第一子集和经处理属性的第二子集生成用于显示的图形数据。
入库通道电路44可被视为包含着色器核心32,因为入库通道顶点着色器46在着色器核心32上执行。如上文所描述,着色器核心32可被配置成执行第一顶点着色器(例如,入库通道顶点着色器46),且基于第一顶点着色器的执行而处理属性的第一子集。渲染通道顶点着色器56是第二不同顶点着色器的实例,例如其中第二顶点着色器是固定功能硬件顶点着色器。
然而,在一些实例中,渲染通道顶点着色器56可为基于软件的顶点着色器。对于此类实例,渲染通道电路54还可包含着色器核心32。举例来说,着色器核心32可由入库通道电路44和渲染通道电路54两者共享。入库通道电路44包含用于执行入库通道顶点着色器46的着色器核心32,且渲染通道电路54包含通常用于执行像素着色器62但在渲染通道顶点着色器56不是固定功能硬件顶点着色器的实例中还用于执行渲染通道顶点着色器56的着色器核心32。在此类实例中,渲染通道电路54包含着色器核心32,且用以处理属性的第二子集,着色器核心32被配置成执行第二顶点着色器(例如,渲染通道顶点着色器56),且基于第二顶点着色器的执行而处理属性的第二子集。
在一些实例中,作为生成图形数据的部分,第一顶点着色器可将经处理属性的第一子集输出到GPU 12外部的流式输出缓冲器52(例如,入库通道电路44将经处理属性的第一子集输出到流式输出缓冲器52),且渲染通道电路54的光栅化器电路58可从流式输出缓冲器52接收经处理属性的第一子集。第二顶点着色器可将经处理属性的第二子集输出到GPU 12的本地存储器(例如,GPU 12的高速缓存)(例如,渲染通道电路54将经处理属性的第二子集输出到本地存储器),且渲染通道电路54的光栅化器电路58可从本地存储器接收经处理属性的第二子集。光栅化器电路58接着可处理顶点的所有属性(例如,第一和第二子集两者)且将所得数据提供到像素着色器62以生成用于显示的图形数据。
本公开中所描述的技术可至少部分地实施在硬件、软件、固件或其任何组合中。举例来说,所描述技术的各种方面可在一或多个处理器中实施,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或离散逻辑电路,以及此类组件的任何组合。术语“处理器”或“处理电路”可一般指代前述逻辑电路中的任一个,单独或结合其它逻辑电路,或例如执行处理的离散硬件等任何其它等效电路。
此类硬件、软件和固件可实施在同一装置内或单独装置内以支持本公开中所描述的各种操作和功能。另外,所描述的单元、模块或组件中的任一个可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意在强调不同功能方面且未必暗示此类模块或单元必须由单独硬件或软件组件实现。实际上,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或集成在共用或单独硬件或软件组件内。
本公开中所描述的技术也可存储、体现或编码于计算机可读媒体,例如存储指令的计算机可读存储媒体中。嵌入或编码于计算机可读媒体中的指令例如当由一或多个处理器执行指令时可使一或多个处理器执行本文中所描述的技术。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪存存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
已描述各种方面和实例。然而,可在不脱离以下权利要求书的范围的情况下对本公开的结构或技术作出修改。
Claims (28)
1.一种处理数据的方法,所述方法包括:
从顶点缓冲器接收顶点的属性的第一子集;
用图形处理单元GPU的第一顶点着色器处理所述顶点的所述属性的第一子集以生成经处理属性的第一子集;
从所述顶点缓冲器接收同一顶点的属性的第二子集;
用所述GPU的第二不同顶点着色器处理所述同一顶点的所述属性的第二子集以生成经处理属性的第二子集;和
基于经处理属性的所述第一子集和经处理属性的所述第二子集生成用于显示的图形数据。
2.根据权利要求1所述的方法,其中处理所述属性的第一子集包括在入库通道期间处理所述属性的第一子集,所述入库通道包括确定哪些顶点属于哪一块,且其中处理所述属性的第二子集包括在渲染通道期间处理所述属性的第二子集,所述渲染通道包括生成用于显示的所述图形数据。
3.根据权利要求1所述的方法,其中处理所述属性的第一子集包括:
在着色器核心上执行所述第一顶点着色器;和
基于所述第一顶点着色器的所述执行而处理所述属性的第一子集。
4.根据权利要求1所述的方法,其中所述第二顶点着色器包括固定功能硬件顶点着色器。
5.根据权利要求1所述的方法,其中处理所述属性的第二子集包括:
在着色器核心上执行所述第二顶点着色器;和
基于所述第二顶点着色器的所述执行而处理所述属性的第二子集。
6.根据权利要求1所述的方法,其中所述顶点包括第一顶点,所述方法进一步包括:
用所述第一顶点着色器处理第二顶点的属性的第一子集;
确定所述第二顶点不可见;和
响应于所述第二顶点不可见的所述确定而避免处理所述第二顶点的属性的第二子集。
7.根据权利要求1所述的方法,其进一步包括:
将经处理属性的所述第一子集输出到所述GPU外部的流式输出缓冲器;
用光栅化器电路从所述流式输出缓冲器接收经处理属性的所述第一子集;
将经处理属性的所述第二子集输出到所述GPU内部的本地存储器;和
用所述光栅化器电路从所述本地存储器接收经处理属性的所述第二子集。
8.根据权利要求1所述的方法,其中基于经处理属性的所述第一子集和经处理属性的所述第二子集生成用于显示的图形数据包括基于被确定为可见的顶点的经处理属性的所述第一子集和经处理属性的所述第二子集的经处理属性生成用于显示的图形数据。
9.根据权利要求1所述的方法,其中所述属性的第一子集包括用于确定可见性的属性。
10.根据权利要求1所述的方法,其中所述属性的第二子集包括待乘以静态矩阵的属性。
11.一种用于处理数据的装置,所述装置包括:
系统存储器,其包括顶点缓冲器,所述系统存储器被配置成存储顶点的属性的第一子集和同一顶点的属性的第二子集;
图形处理单元GPU,其包括入库通道电路和渲染通道电路,
其中所述入库通道电路被配置成:
接收所述顶点的所述属性的第一子集;和
用第一顶点着色器处理所述属性的第一子集以生成经处理属性的第一子集,和其中所述渲染通道电路被配置成:
接收所述顶点的所述属性的第二子集;
用第二不同顶点着色器处理所述属性的第二子集以生成经处理属性的第二子集;和
基于经处理属性的所述第一子集和经处理属性的所述第二子集生成用于显示的图形数据。
12.根据权利要求11所述的装置,其中所述入库通道电路包括着色器核心,且其中为了处理所述属性的第一子集,所述着色器核心被配置成:
执行所述第一顶点着色器;和
基于所述第一顶点着色器的所述执行而处理所述属性的第一子集。
13.根据权利要求11所述的装置,其中所述第二顶点着色器包括固定功能硬件顶点着色器。
14.根据权利要求11所述的装置,其中所述渲染通道电路包括着色器核心,且其中为了处理所述属性的第二子集,所述着色器核心被配置成:
执行所述第二顶点着色器;和
基于所述第二顶点着色器的所述执行而处理所述属性的第二子集。
15.根据权利要求11所述的装置,其中所述顶点包括第一顶点,其中所述入库通道电路被配置成用所述第一顶点着色器处理第二顶点的属性的第一子集,且确定所述第二顶点不可见,且其中所述渲染通道电路被配置成响应于所述第二顶点不可见的所述确定而避免处理所述第二顶点的属性的第二子集。
16.根据权利要求11所述的装置,其中所述入库通道电路被配置成将经处理属性的所述第一子集输出到流式输出缓冲器,其中所述渲染通道电路被配置成将经处理属性的所述第二子集输出到本地存储器,其中所述渲染通道电路包括光栅化器电路,所述光栅化器电路被配置成从所述流式输出缓冲器接收经处理属性的所述第一子集且从所述本地存储器接收经处理属性的所述第二子集。
17.根据权利要求11所述的装置,其中所述渲染通道电路被配置成基于被确定为可见的顶点的经处理属性的所述第一子集和经处理属性的所述第二子集的经处理属性生成用于显示的图形数据。
18.根据权利要求11所述的装置,其中所述属性的第一子集包括用于确定可见性的属性。
19.根据权利要求11所述的装置,其中所述属性的第二子集包括待乘以静态矩阵的属性。
20.根据权利要求11所述的装置,其中所述装置包括个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置、显示装置、电视或电视机顶盒中的一个。
21.一种上面存储指令的计算机可读存储媒体,所述指令当被执行时使图形处理单元GPU来:
从顶点缓冲器接收顶点的属性的第一子集;
用所述GPU的第一顶点着色器处理所述顶点的所述属性的第一子集以生成经处理属性的第一子集;
从所述顶点缓冲器接收同一顶点的属性的第二子集;
用所述GPU的第二不同顶点着色器处理所述同一顶点的所述属性的第二子集以生成经处理属性的第二子集;和
基于经处理属性的所述第一子集和经处理属性的所述第二子集生成用于显示的图形数据。
22.根据权利要求21所述的计算机可读存储媒体,其中所述顶点包括第一顶点,所述指令进一步包括使GPU进行以下各项的指令:
用所述第一顶点着色器处理第二顶点的属性的第一子集;
确定所述第二顶点不可见;和
响应于所述第二顶点不可见的所述确定而避免处理所述第二顶点的属性的第二子集。
23.根据权利要求21所述的计算机可读存储媒体,其中所述属性的第一子集包括用于确定可见性的属性。
24.根据权利要求21所述的计算机可读存储媒体,其中所述属性的第二子集包括待乘以静态矩阵的属性。
25.一种用于处理数据的装置,所述装置包括:
用于从顶点缓冲器接收顶点的属性的第一子集的装置;
用于用图形处理单元GPU的第一顶点着色器处理所述顶点的所述属性的第一子集以生成经处理属性的第一子集的装置;
用于从所述顶点缓冲器接收同一顶点的属性的第二子集的装置;
用于用所述GPU的第二不同顶点着色器处理所述同一顶点的所述属性的第二子集以生成经处理属性的第二子集的装置;和
用于基于经处理属性的所述第一子集和经处理属性的所述第二子集生成用于显示的图形数据的装置。
26.根据权利要求25所述的装置,其中所述顶点包括第一顶点,所述装置进一步包括:
用于用所述第一顶点着色器处理第二顶点的属性的第一子集的装置;
用于确定所述第二顶点不可见的装置;和
用于响应于所述第二顶点不可见的所述确定而避免处理所述第二顶点的属性的第二子集的装置。
27.根据权利要求25所述的装置,其中所述属性的第一子集包括用于确定可见性的属性。
28.根据权利要求25所述的装置,其中所述属性的第二子集包括待乘以静态矩阵的属性。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/218,808 | 2016-07-25 | ||
US15/218,808 US10062139B2 (en) | 2016-07-25 | 2016-07-25 | Vertex shaders for binning based graphics processing |
PCT/US2017/035038 WO2018022187A1 (en) | 2016-07-25 | 2017-05-30 | Vertex shaders for binning based graphics processing |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109564694A true CN109564694A (zh) | 2019-04-02 |
CN109564694B CN109564694B (zh) | 2023-07-14 |
Family
ID=59067899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780044328.5A Active CN109564694B (zh) | 2016-07-25 | 2017-05-30 | 用于基于入库的图形处理的顶点着色器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10062139B2 (zh) |
EP (1) | EP3488423A1 (zh) |
CN (1) | CN109564694B (zh) |
WO (1) | WO2018022187A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10535114B2 (en) * | 2015-08-18 | 2020-01-14 | Nvidia Corporation | Controlling multi-pass rendering sequences in a cache tiling architecture |
KR20180038793A (ko) * | 2016-10-07 | 2018-04-17 | 삼성전자주식회사 | 영상 데이터 처리 방법 및 장치 |
GB2564400B (en) * | 2017-07-06 | 2020-11-25 | Advanced Risc Mach Ltd | Graphics processing |
US11120603B2 (en) | 2019-06-18 | 2021-09-14 | Samsung Electronics Co., Ltd. | Heavy-weight/light-weight GPU shader core pair architecture |
US11189073B2 (en) | 2020-03-20 | 2021-11-30 | Arm Limited | Graphics processing |
US11416960B2 (en) * | 2020-11-06 | 2022-08-16 | Samsung Electronics Co., Ltd. | Shader accessible configurable binning subsystem |
CN116302103B (zh) * | 2023-05-18 | 2023-08-08 | 南京砺算科技有限公司 | 指令编译方法及装置、图形处理单元、存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102598062A (zh) * | 2009-05-29 | 2012-07-18 | 高通股份有限公司 | 具有延缓的顶点遮影的图形处理单元 |
US20130135322A1 (en) * | 2011-11-30 | 2013-05-30 | Qualcomm Incorporated | Switching between direct rendering and binning in graphics processing using an overdraw tracker |
CN103679799A (zh) * | 2012-09-25 | 2014-03-26 | 中国航天科工集团第二研究院二〇七所 | 一种光学星空背景的快速生成方法 |
US20140267259A1 (en) * | 2013-03-15 | 2014-09-18 | Qualcomm Incorporated | Tile-based rendering |
EP2945126A2 (en) * | 2014-05-13 | 2015-11-18 | MediaTek, Inc | Graphics processing method and graphics processing apparatus |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6919908B2 (en) * | 2003-08-06 | 2005-07-19 | Ati Technologies, Inc. | Method and apparatus for graphics processing in a handheld device |
US7817151B2 (en) * | 2005-10-18 | 2010-10-19 | Via Technologies, Inc. | Hardware corrected software vertex shader |
US8289319B2 (en) | 2007-10-08 | 2012-10-16 | Ati Technologies Ulc | Apparatus and method for processing pixel depth information |
US8294713B1 (en) * | 2009-03-23 | 2012-10-23 | Adobe Systems Incorporated | Method and apparatus for illuminating objects in 3-D computer graphics |
US8619087B2 (en) | 2009-10-06 | 2013-12-31 | Nvidia Corporation | Inter-shader attribute buffer optimization |
KR101681056B1 (ko) | 2010-10-01 | 2016-12-01 | 삼성전자주식회사 | 정점 처리 방법 및 장치 |
GB201103699D0 (en) * | 2011-03-03 | 2011-04-20 | Advanced Risc Mach Ltd | Graphic processing |
GB201103698D0 (en) | 2011-03-03 | 2011-04-20 | Advanced Risc Mach Ltd | Graphics processing |
US9093006B2 (en) | 2011-06-30 | 2015-07-28 | Google Inc. | Image shader using style attribute references |
US9311771B2 (en) * | 2012-08-28 | 2016-04-12 | Bally Gaming, Inc. | Presenting autostereoscopic gaming content according to viewer position |
US9299123B2 (en) * | 2013-01-22 | 2016-03-29 | Qualcomm Incorporated | Indexed streamout buffers for graphics processing |
US9478066B2 (en) | 2013-03-14 | 2016-10-25 | Nvidia Corporation | Consistent vertex snapping for variable resolution rendering |
US9111360B2 (en) * | 2013-03-14 | 2015-08-18 | Nvidia Corporation | Technique for improving the performance of a tessellation pipeline |
US9406101B2 (en) * | 2013-03-14 | 2016-08-02 | Nvidia Corporation | Technique for improving the performance of a tessellation pipeline |
US9384523B1 (en) * | 2013-07-30 | 2016-07-05 | Google Inc. | Method for reducing input latency on GPU accelerated devices and applications |
GB2525223B (en) * | 2014-04-16 | 2020-07-15 | Advanced Risc Mach Ltd | Graphics processing systems |
US9842428B2 (en) * | 2014-06-27 | 2017-12-12 | Samsung Electronics Co., Ltd. | Dynamically optimized deferred rendering pipeline |
GB2527822B (en) * | 2014-07-03 | 2020-10-07 | Advanced Risc Mach Ltd | Graphics processing |
US9424686B2 (en) * | 2014-08-08 | 2016-08-23 | Mediatek Inc. | Graphics processing circuit having second vertex shader configured to reuse output of first vertex shader and/or process repacked vertex thread group and related graphics processing method thereof |
KR20160051155A (ko) * | 2014-10-31 | 2016-05-11 | 삼성전자주식회사 | 렌더링 장치 및 방법 |
GB2532495B (en) * | 2014-11-21 | 2018-05-02 | Advanced Risc Mach Ltd | Graphics processing systems |
US10032308B2 (en) * | 2016-06-22 | 2018-07-24 | Advanced Micro Devices, Inc. | Culling objects from a 3-D graphics pipeline using hierarchical Z buffers |
-
2016
- 2016-07-25 US US15/218,808 patent/US10062139B2/en not_active Expired - Fee Related
-
2017
- 2017-05-30 EP EP17730615.6A patent/EP3488423A1/en not_active Ceased
- 2017-05-30 CN CN201780044328.5A patent/CN109564694B/zh active Active
- 2017-05-30 WO PCT/US2017/035038 patent/WO2018022187A1/en active Search and Examination
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102598062A (zh) * | 2009-05-29 | 2012-07-18 | 高通股份有限公司 | 具有延缓的顶点遮影的图形处理单元 |
US20130135322A1 (en) * | 2011-11-30 | 2013-05-30 | Qualcomm Incorporated | Switching between direct rendering and binning in graphics processing using an overdraw tracker |
CN103679799A (zh) * | 2012-09-25 | 2014-03-26 | 中国航天科工集团第二研究院二〇七所 | 一种光学星空背景的快速生成方法 |
US20140267259A1 (en) * | 2013-03-15 | 2014-09-18 | Qualcomm Incorporated | Tile-based rendering |
EP2945126A2 (en) * | 2014-05-13 | 2015-11-18 | MediaTek, Inc | Graphics processing method and graphics processing apparatus |
Also Published As
Publication number | Publication date |
---|---|
US20180025463A1 (en) | 2018-01-25 |
WO2018022187A1 (en) | 2018-02-01 |
EP3488423A1 (en) | 2019-05-29 |
US10062139B2 (en) | 2018-08-28 |
CN109564694B (zh) | 2023-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106575228B (zh) | 图形处理中的渲染目标命令重新排序 | |
EP3489907B1 (en) | Shader program execution techniques for use in graphics processing | |
CN109564694A (zh) | 用于基于入库的图形处理的顶点着色器 | |
US11443405B2 (en) | Mechanism to accelerate graphics workloads in a multi-core computing architecture | |
US9262797B2 (en) | Multi-sample surface processing using one sample | |
US10636112B2 (en) | Graphics processor register data re-use mechanism | |
US9411715B2 (en) | System, method, and computer program product for optimizing the management of thread stack memory | |
CN104823220B (zh) | 用于图形处理的图形存储器加载掩模 | |
CN107209923A (zh) | 图形处理中的混合渲染 | |
CN109478310A (zh) | 在计算环境中使用纹素着色器的多分辨率延迟着色 | |
WO2017201676A1 (en) | Self-adaptive window mechanism | |
CN108140233A (zh) | 具有像素块级别粒度的图形处理单元抢占 | |
US10417791B2 (en) | Multi-step texture processing with feedback in texture unit | |
US10089964B2 (en) | Graphics processor logic for encoding increasing or decreasing values | |
US20140267356A1 (en) | Multi-sample surface processing using sample subsets | |
US20140149721A1 (en) | Method, computer program product, and system for a multi-input bitwise logical operation | |
CN109074673A (zh) | 通过图形处理单元的纹理单元的常数乘法 |
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 |