着色器操作的同步的制作方法
【专利摘要】本发明中描述的实例技术可针对生产者着色器(16)与消费者着色器(24)之间的同步。举例来说,图形处理单元GPU可执行生产者着色器以产生图形数据。在图形数据的产生的完成之后,所述生产者着色器可存储指示所产生图形数据的量的值(18)。在指示所述所产生的图形数据量的所述值的存储之后,所述GPU可执行一个或一个以上消费者着色器以消耗所述所产生的图形数据。
【专利说明】着色器操作的同步
【技术领域】
[0001]本发明涉及图形着色器,且更特定来说涉及一个或一个以上图形着色器在图形处理单元(GPU)上的执行。
【背景技术】
[0002]产生可观看内容的装置通常包含图形处理单元(GPU)。GPU可处理图形数据以产生显示器上的像素的像素值。为了处理图形数据,GPU可执行一个或一个以上着色器程序,经常称为着色器。着色器程序可为当GPU执行着色器程序时致使GPU执行由着色器程序界定的功能的软件程序。举例来说,着色器程序可界定GPU应处理图形数据以产生显示器上的像素的像素值的方式。
【发明内容】
[0003]大体上,本发明描述用于同步图形处理单元(GPU)上的一个或一个以上着色器程序的执行的技术。在一些实例中,一个着色器程序可产生由另一着色器程序消耗或利用的图形数据。产生图形数据的着色器程序可称为生产者着色器,且消耗所产生图形数据的着色器程序可称为消费者着色器。本发明中描述的实例技术中的一些可致使GPU同步生产者和消费者着色器的执行,使得GPU不执行消费者着色器直到所述生产者着色器已产生将由消费者着色器消耗的图形数据为止。
[0004]在一个实例中,本发明描述一种方法,包含:用图形处理单兀(GPU)执行产生图形数据的生产者着色器;以及用所述GPU将由所述生产者着色器产生的所述图形数据存储在第一缓冲器的存储位置中。所述方法进一步包含在完成所述图形数据的所述产生后,即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在第二缓冲器的存储位置中。
[0005]在另一实例中,本发明描述一种设备,其包含第一缓冲器、第二缓冲器以及图形处理单元(GPU)。所述GPU可操作以执行产生图形数据的生产者着色器,且将由所述生产者着色器产生的所述图形数据存储在所述第一缓冲器的存储位置中。所述GPU还可操作以在完成所述图形数据的所述产生后,即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在所述第二缓冲器的存储位置中。
[0006]在另一实例中,本发明描述一种设备,其包含第一缓冲器、第二缓冲器以及图形处理单元(GPU)。所述GPU包含用于执行产生图形数据的生产者着色器的装置,以及用于将由所述生产者着色器产生的所述图形数据存储在所述第一缓冲器的存储位置中的装置。所述GPU还包含用于在完成所述图形数据的所述产生后即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在所述第二缓冲器的存储位置中的装置。
[0007]在另一实例中,本发明描述一种非暂时性计算机可读存储媒体。所述非暂时性计算机可读存储媒体包含致使一个或一个以上处理器进行以下操作的指令:用图形处理单元(GPU)执行产生图形数据的生产者着色器;以及用所述GPU将由所述生产者着色器产生的所述图形数据存储在第一缓冲器的存储位置中。所述指令还包含用以进行以下操作的指令:在完成所述图形数据的所述产生后,即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在第二缓冲器的存储位置中。
[0008]在附图和以下描述中陈述一个或一个以上实例的细节。从描述和图式以及从权利要求书将明了其它特征、目的和优点。
【专利附图】
【附图说明】
[0009]图1是说明可操作以实施本发明的一个或一个以上方面的图形处理单元(GPU)的实例的框图。
[0010]图2是说明可并入图1的GPU以实施本发明的一个或一个以上方面的计算装置的实例的框图。
[0011]图3是说明根据本发明的一个或一个以上方面的如图1所示的GPU的实例操作的流程图。
【具体实施方式】
[0012]大体上,本发明涉及图形处理单元(GPU)的各种过程的同步。本发明的技术大体上适用于视频装置,例如媒体播放器、机顶盒、例如移动电话等无线手持机、个人数字助理(PDA)、桌上型计算机、膝上型计算机、游戏控制台、显示装置、电视机及类似者。
[0013]为了处理图形数据,GPU起始(例如,执行)不同的着色器程序。在一些实例中,由一个着色器程序产生的图形数据由另一着色器程序消耗。举例来说,几何形状着色器可接收图形数据,且产生多个图元的图形数据,例如图元的顶点坐标以及图元的顶点的颜色值和其它属性。像素着色器可接收所述多个图元的图形数据,且对所述多个图元执行图形处理,例如着色、照明和掺合,以再现像素供在显示器上呈现。
[0014]在先前实例中,几何形状着色器可视为“生产者”着色器的实例,且像素着色器可视为“消费者”着色器的实例。在一些实例中,GPU可需要同步生产者着色器与消费者着色器,使得在生产者着色器已产生图形数据之前消费者着色器不会尝试消耗图形数据。举例来说,在一些实例中,GPU可事先知道何时执行生产者着色器,但可能事先不知道生产者着色器将产生多少图形数据。因为生产者着色器将产生的图形数据量是可变的,所以GPU可能事先不知道何时生产者着色器将完成产生图形数据。
[0015]而且,在一些实例中,可存在多个生产者着色器和多个消费者着色器。在这些实例中的一些实例中,基于图形数据,消费者着色器可能不能消耗来自生产者着色器中的一者的图形数据,直到另一生产者着色器完成产生图形数据为止。举例来说,假定GPU执行第一生产者着色器,且在随后的时间执行第二生产者着色器。由于每一生产者着色器产生的数据量的可变性,可能第二生产者着色器在第一生产者着色器完成产生图形数据之前完成产生图形数据。然而,基于由生产者着色器中的每一者产生的图形数据,在第二消费者着色器消耗来自第二生产者着色器的图形数据之前,第一消费者着色器可需要消耗来自第一生产者着色器的图形数据。
[0016]在一些实例中,包含GPU的装置还可包含生产者着色器存储缓冲器和生产者着色器计数缓冲器。生产者着色器存储缓冲器和生产者着色器计数缓冲器可形成于同一存储器装置或不同存储器装置内。
[0017]在一些实例中,生产者着色器存储缓冲器可包含多个存储位置。GPU可将每一存储位置指派于一个生产者着色器。每一生产者着色器可将其产生的图形数据存储到其在生产者着色器存储缓冲器内被指派的存储位置中。举例来说,由第一生产者着色器产生的图形数据可存储在第一存储位置中,且由第二生产者着色器产生的图形数据可存储在第二存储位置中,以此类推。在此实例中,GPU可能已将第一存储位置指派于第一生产者着色器,将第二存储位置指派于第二生产者着色器,以此类推(对于额外的生产者着色器)。
[0018]存储位置中的每一者的大小,例如每一存储位置可存储的图形数据量,可基于生产者着色器可产生的最大图形数据量。举例来说,GPU可能事先不知道生产者着色器将产生多少图形数据,然而,GPU可能事先知道生产者着色器将产生的最大图形数据量。作为一个实例,任一生产者着色器可产生的最大图形数据量是4千字节(KB)。因此,在此实例中,对于GPU执行的每个生产者着色器,GPU可为所述生产者着色器指派生产者着色器存储缓冲器内的4KB存储位置以存储由所述生产者着色器产生的图形数据。
[0019]生产者着色器计数缓冲器也可包含多个存储位置。GPU可将生产者着色器计数缓冲器内的每一存储位置指派于每一生产者着色器。因为GPU将生产者着色器计数缓冲器内的存储位置和生产者着色器存储缓冲器内的存储位置指派于生产者着色器,所以指派于同一生产者的生产者着色器计数缓冲器内的每一存储位置和生产者着色器存储缓冲器内的每一存储位置可视为彼此对应。
[0020]生产者着色器计数缓冲器内的存储位置中的每一者可存储指示存储于其在生产者着色器存储缓冲器内的对应存储位置中的图形数据量的值。换句话说,生产者着色器计数缓冲器内的存储位置可存储指示由指派于生产者着色器计数缓冲器内的所述存储位置的生产者着色器产生的图形数据量的值。
[0021]作为一个实例,生产者着色器计数缓冲器内的存储位置可存储指示由生产者着色器产生的图元数目的值。举例来说,如上所述,几何形状着色器可产生多个图元的图形数据。在此实例中,生产者着色器计数缓冲器内的指派于几何形状着色器的存储位置可存储指示由几何形状着色器产生的图元数目的值。因此,生产者着色器计数缓冲器内的经指派存储位置中指示由几何形状着色器产生的图元数目的值的存储可指示几何形状着色器已完成图形数据的产生。
[0022]在一些实例中,由几何形状着色器针对每一图元产生的图形数据的字节数目可为常数;然而,由几何形状着色器产生的图元数目可为可变的。举例来说,由几何形状着色器产生的每一图元可由100个字节界定;然而,由几何形状着色器产生的图元数目可为可变的。
[0023]为了说明目的,作为一实例,假定第一生产者着色器,例如第一几何形状着色器,产生五个图元的数据,且第二生产者着色器产生十个图元的数据。而且,假定每一图元由100个字节界定。在此实例中,生产者着色器计数缓冲器内的指派于第一生产者着色器的存储位置可存储值五,且生产者着色器计数缓冲器内的指派于第二生产者着色器的存储位置可存储值十。而且,在此实例中,生产者着色器存储缓冲器内的指派于第一生产者着色器的存储位置可存储500个字节的图形数据,例如5个图元*100个字节/图元,且生产者着色器存储缓冲器内的指派于第二生产者的存储位置可存储I千字节的图形数据,例如10个图元*100个字节/图元。
[0024]在实例实施方案中的一些实例实施方案中,在每一生产者着色器完成产生图形数据之后,生产者着色器可输出指示存储于其在生产者着色器存储缓冲器内的经指派存储位置中的图形数据量的值。举例来说,在生产者着色器正在产生图形数据时,GPU可将产生的供存储的图形数据输出到生产者着色器存储缓冲器内指派于所述生产者着色器的存储位置。在生产者着色器完成产生图形数据之后,生产者着色器可随后将指示由所述生产者着色器产生的图形数据量的值存储在生产者着色器计数缓冲器的指派于所述生产者着色器的存储位置内。
[0025]可存在至少两种不同技术来致使生产者着色器输出指示由生产者着色器产生的图形数据量的值,直到生产者着色器完成产生图形数据为止。作为一个实例,生产者着色器可经设计以维持指示生产者着色器产生的图元量的计数器值。举例来说,生产者着色器的编程者可编写生产者着色器的源代码,且源代码的部分可为用以致使生产者着色器维持指示生产者着色器产生的图元量的计数器值的指令。
[0026]编译器可编译包含用于计数器值的指令的源代码以产生目标代码。作为经编译目标代码而应用的源代码的指令可致使生产者着色器在执行时在其产生的每个图元之后递增其计数器值。在生产者着色器完成产生图形数据之后,生产者着色器可将计数器值输出到计数缓冲器内经指派于所述生产者着色器的存储位置。举例来说,源代码可包含致使在生产者着色器完成产生图形数据之后生产者着色器在由GPU执行时将计数器值输出到计数缓冲器内经指派于所述生产者着色器的存储位置的指令。
[0027]作为另一实例,可能生产者着色器程序在源代码中不包含用于计数器的指令。举例来说,用于一些传统生产者着色器程序的源代码可不包含用于计数器值的指令,或用以在图形数据产生的完成之后输出计数器值的指令。在此类实例中,可开发编译器,使得其能够在编译期间插入目标代码指令,所述指令致使生产者着色器维持计数器值,且在生产者着色器完成图形数据的产生之后输出指示所产生图形数据量的计数器值。
[0028]举例来说,在不同于GPU的处理器上执行的编译器可经配置以编译每一生产者着色器的源代码,且可经配置以产生可由GPU执行的指令(例如,生产者着色器的目标代码),且致使GPU执行生产者着色器的功能。在产生生产者着色器的指令(例如,生产者着色器的目标代码)时,编译器可包含致使生产者着色器在执行时维持指示生产者着色器产生的图元量的计数器值的指令,以及致使生产者着色器在执行时执行生产者着色器的功能的指令。编译器还可在生产者着色器的目标代码中包含致使在生产者着色器完成产生图形数据之后生产者着色器将包含于生产者着色器中的计数器值输出到计数缓冲器内经指派于所述生产者着色器的存储位置的指令。
[0029]以此方式,甚至在生产者着色器的源代码不包含计数器值(例如,用于计数器值的指令)的实例中,本发明的方面也可允许编译器将用于产生计数器值的指令包含到生产者着色器的目标代码中。举例来说,编译器可编译生产者着色器的源代码以产生目标代码。在产生目标代码的过程中,编译器可将用于计数器值的指令包含到目标代码中。如上文指示,计数器值可在生产者着色器正在产生图形数据的同时对由生产者着色器产生的图形数据量进行计数。[0030]GPU可基于存储在生产者着色器计数缓冲器的每一存储位置中的计数值而执行消费者着色器。在一些实例中,GPU可针对每一计数值执行一个消费者着色器。举例来说,如果生产者着色器计数缓冲器中的一存储位置存储计数值五,那么GPU可执行五个消费者着色器以处理存储在生产者着色器存储缓冲器内的对应存储位置中的图形数据。
[0031]在一些实例中,生产者着色器计数缓冲器可视为经排序生产者着色器计数缓冲器。举例来说,GPU可将生产者着色器计数缓冲器内的第一存储位置指派于在来自任一其它生产者着色器的图形数据经消耗之前图形数据会消耗的第一生产者着色器。GPU可将生产者着色器计数缓冲器内的第二存储位置指派于在第一生产者着色器之后且在来自其它生产者着色器的图形数据经消耗之前图形数据会消耗的第二生产者着色器,以此类推。
[0032]以此方式,GPU可能够在图形数据准备好供消耗时执行消费者着色器,而不是在图形数据准备好供消耗之前执行消费者着色器。作为一个实例,为了说明目的,假定GPU执行第一生产者着色器,且在随后的时间执行第二生产者着色器。在此实例中,将第一生产者着色器指派于计数缓冲器内的第一存储位置,且将第二生产者着色器指派于计数缓冲器内的第二存储位置。进一步假定来自第一生产者着色器的图形数据应在来自第二生产者着色器的图形数据之前消耗。
[0033]在此实例中,第二生产者着色器在第一生产者着色器之前完成产生图形数据。因此,生产者着色器计数缓冲器内的第二存储位置在生产者着色器计数缓冲器内的第一存储位置之前存储值。因为GPU可能例如基于其执行第一和第二生产者着色器的次序而知道由第一生产者着色器产生的图形数据应在由第二生产者着色器产生的图形数据之前消耗,所以在此实例中,GPU可不执行消费者着色器,直到生产者着色器计数缓冲器内的第一存储位置存储值为止。如上所述,生产者着色器计数缓冲器内的存储位置内的计数值(例如,指示所产生图形数据量的值)的存储指示指派于所述存储位置的生产者着色器完成产生图形数据。
[0034]图1是说明可操作以实施本发明的一个或一个以上方面的图形处理单元(GPU) 10的实例的框图。GPUlO可实施图形管线以产生图形数据,例如显示器上的像素的像素值。举例来说,GPUlO可实施类似于在OpenGL ES2.0规范中描述的图形管线的图形管线,所述规范在2008年4月24日由科纳斯组织(Khronos Group)发布且公开可用。作为另一实例,本发明的方面可在界定图形管线的M icrosoit? DirectX (DX) 10和11应用程序编程接口(API)中实施。图形管线可实施为在GPUlO上执行的软件、在GPUlO上执行的固件、形成于GPUlO上的一个或一个以上硬件单元,或其组合。GPUlO也可实施其它图形管线,且本发明的方面不应视为限于OpenGL ES2.0规范或DXlO和IlAPI的图形管线。
[0035]GPUlO的实例包含(但不限于)数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路。如图1中说明,GPUlO可包含控制器12、几何形状着色器计数缓冲器18、几何形状着色器缓冲器20,以及消耗计数缓冲器22。而且,如图1中说明,GPUlO可执行顶点着色器14、几何形状着色器16和像素着色器24的一个或一个以上实例。
[0036]GPUlO可包含形成图形管线的额外单元或模块。然而,为了清楚的目的而未在图1中说明此些额外单元或模块。而且,虽然几何形状着色器计数缓冲器18、几何形状着色器缓冲器20以及消耗计数缓冲器22经说明为在GPUlO的内部,但本发明的方面不受此限制。在替代实例中,几何形状着色器计数缓冲器18、几何形状着色器缓冲器20以及消耗计数缓冲器22中的一者或一者以上可在GPUlO的外部。举例来说,可能将存储在几何形状着色器缓冲器20中的图形数据量大于在GPUlO上可用的存储空间量。在这些实例中,几何形状着色器缓冲器20可在GPUlO的外部。作为替代,在一些实例中,可能几何形状着色器计数缓冲器18和几何形状着色器缓冲器20是共同缓冲器的部分,例如,一个缓冲器包含几何形状着色器计数缓冲器18和几何形状着色器缓冲器20两者。此外,消耗计数器缓冲器22可潜在地将额外的同步辅助提供到控制器12,如下文所述,但可能不是在GPUlO的每个实例中都是必要的。
[0037]GPUlO的控制器12可为在GPUlO上执行的硬件单元或软件单元。为了说明目的,在作为硬件单元的上下文中描述控制器12。控制器12可确定何时GPUlO应执行一个或一个以上顶点着色器14、几何形状着色器16和像素着色器24。控制器12还可确定GPUlO应执行顶点着色器14、几何形状着色器16和像素着色器24的多少实例。
[0038]顶点着色器14、几何形状着色器16和像素着色器24可为在GPUlO上执行的软件单元。为了说明目的,顶点着色器14、几何形状着色器16和像素着色器24经说明为驻留在GPUlO内。然而,这是为了说明顶点着色器14、几何形状着色器16和像素着色器24由GPUlO执行。用于顶点着色器14、几何形状着色器16和像素着色器24的指令可存储于在GPUlO的外部的存储装置中。举例来说,用于顶点着色器14、几何形状着色器16和像素着色器24的经编译目标代码或源代码可存储于在GPUlO的外部的存储装置中。
[0039]应了解,如本发明中描述的顶点着色器14、几何形状着色器18和像素着色器24可大体上采取由GPUlO执行的功能单元的形式。此些功能单元经单独地描述以突出着色器的特定功能方面,且不一定暗示此些方面必须单独地结构化、布置或译码。因此,此些功能方面可一体地或单独地形成,在一个GPU或多个GPU或者多个GPU核心上执行,且描述在此些功能方面的实施方案方面不应视为限制性的。
[0040]在一些实例中,控制器12可接收将在显示器上显示的图像的属性。举例来说,在GPUlO外部的处理器(未图示)可产生将在显示器上显示的图像。处理器可将图像划分为一个或一个以上图元,所述图元可为例如三角形等多边形,作为一个实例。处理器可确定多边形的顶点中的每一者的顶点属性。举例来说,处理器可确定顶点中的每一者的顶点坐标和颜色值,例如红绿蓝(RGB)颜色值或亮度和色度值。处理器可将顶点中的每一者的顶点属性传输到GPUlO的控制器12。
[0041]控制器12可基于例如从处理器接收的属性而确定GPUlO应执行顶点着色器14的多少实例。举例来说,如图1中说明,GPUlO可执行顶点着色器14A到14N。这些顶点着色器14A到14N中的每一者可执行类似功能,但是对不同的图形数据集合来执行。举例来说,在GPUlO外部的存储装置可存储用于顶点着色器的指令。GPUlO可执行如控制器12确定的顶点着色器的所述指令的多个实例,其表示为顶点着色器14A到14N。
[0042]在一些实例中,控制器12可致使GPUlO针对每一图元执行顶点着色器14中的一者。举例来说,控制器12可致使GPUlO执行顶点着色器14A来处理第一图元,致使GPUlO执行顶点着色器14B来处理第二图元,以此类推。以此方式,GPUlO可能够并行地执行顶点着色器14的多个实例。然而,本发明的方面不限于此。控制器12可能不一定致使GPUlO针对每一图元执行顶点着色器14中的一者。[0043]顶点着色器14在执行时可将接收到的多边形的顶点坐标转换为显示器的坐标,且可确定顶点的光值。举例来说,顶点着色器14可旋转和缩放接收到的多边形以产生图元。顶点着色器14的输出可为图元的顶点属性。顶点着色器14可将由顶点着色器14确定的顶点的属性传输到几何形状着色器16。
[0044]类似于顶点着色器14,在GPUlO外部的存储装置可存储用于几何形状着色器的指令。控制器12可基于例如由顶点着色器14产生的图元数目而确定GPUlO应执行的几何形状着色器16的多少实例,其表示为几何形状着色器16A到16M。在一些实例中,GPUlO应执行的几何形状着色器16的数目可与GPUlO执行的顶点着色器14的数目相同。然而,本发明的方面不限于此。几何形状着色器16A到16M可执行类似功能,但是对不同数据执行。
[0045]几何形状着色器16中的每一者可从顶点着色器14中的一者接收单个图元的顶点的顶点属性。在一些实例中,几何形状着色器16可进一步将单个图兀划分为一个或一个以上图元。举例来说,几何形状着色器16A可接收单个三角形的顶点,且可将单个三角形划分以产生五个三角形。几何形状着色器16还可确定由几何形状着色器16产生的图元的顶点中的每一者的属性,例如颜色和坐标。由几何形状着色器16产生的图元,包含顶点及其对应属性,可称为由几何形状着色器16产生的图形数据。
[0046]在一些实例中,几何形状着色器16中的每一者可产生的图元数目可为未知的。而且,几何形状着色器16中的每一者何时将完成产生图元可为未知的。举例来说,控制器12可确定GPUlO应执行两个几何形状着色器16,例如几何形状着色器16A和几何形状着色器16B,且可致使GPUlO执行几何形状着色器16A和几何形状着色器16B。在此实例中,控制器12可能不知道几何形状着色器16A将产生多少图元以及几何形状着色器16B将产生多少图元。
[0047]控制器12可基于几何形状着色器16的编程而知道多少字节用于表示图元。举例来说,由几何形状着色器16产生的图元中的每一者可由100个字节表示,例如,100个字节表示由几何形状着色器16中的一者产生的图元的顶点和属性。然而,因为控制器12可能不知道几何形状着色器16可产生多少图元,所以控制器12可能不知道几何形状着色器16可产生多少总字节。
[0048]而且,控制器12可能不知道几何形状着色器16中的每一者何时将完成产生图元。举例来说,控制器12可致使GPUlO首先执行几何形状着色器16A且随后执行几何形状着色器16B。在此实例中,可能在几何形状着色器16A完成产生其图元之前,几何形状着色器16B完成产生其图元。
[0049]这些不确定性,例如几何形状着色器16将产生的图形数据量以及几何形状着色器16何时将完成产生图形数据,可使得控制器12难以确定何时执行一个或一个以上像素着色器24。像素着色器24可消耗由几何形状着色器16产生的图形数据,例如图元和对应属性。因此,几何形状着色器16中的一者或一者以上可为“生产者”着色器的实例,且一个或一个以上像素着色器14可为“消费者”着色器的实例。
[0050]换句话说,一个或一个以上生产者着色器可产生由一个或一个以上消费者着色器消耗的图形数据。生产者着色器的一个非限制性实例是几何形状着色器16,且消费者着色器的一个非限制性实例是像素着色器24。虽然在本发明中描述的实例将几何形状着色器16描述为生产者着色器且将像素着色器14描述为消费者着色器,但本发明的方面不受此限制。大体上,本发明中描述的实例技术可延伸到产生可变图形数据量的任一着色器以及会消耗所产生的可变图形数据量的任一着色器。本发明中描述的实例技术可延伸到其中生产者和消费者着色器的执行的同步可为合意的任一图形系统。
[0051]在将由一个或一个以上像素着色器24中的每一者消耗的数据可用之后GPUlO执行一个或一个以上像素着色器24可为有利的。举例来说,如果控制器12致使在将由所执行像素着色器24消耗的图形数据可用之前GPUlO执行一个或一个以上像素着色器24,那么这些执行的像素着色器24可保持空闲,例如处于“繁忙等待”状态,直到将消耗的图形数据可用为止。在“繁忙等待”状态中,执行的像素着色器24保持在等待将消耗的图形数据的循环中,当图形数据变为可用时退出“繁忙等待”状态,且随后消耗图形数据。“繁忙等待”状态可能是不合意的,因为在所执行像素着色器24正在等待图形数据供消耗的同时,将由所执行像素着色器24使用的例如寄存器或所分配存储器等GPUlO的硬件单元在消耗图形数据时不可用于其它任务。
[0052]本发明中描述的实例技术中的一些可允许控制器12同步一个或一个以上像素着色器24的执行,使得在将由一个或一个以上像素着色器24消耗的图形数据可用之后GPUlO执行一个或一个以上像素着色器24。如图1中说明,GPUlO可包含几何形状着色器计数缓冲器18。几何形状着色器计数缓冲器18可包含多个存储位置。举例来说,几何形状着色器计数缓冲器18可为GPUlO的寄存器或局部存储器的部分,例如内部高速缓冲存储器。在一些实例中,控制器12和GPUlO可能够相对快速地存取几何形状着色器计数缓冲器18的内容,而不需要通过外部系统总线进行存取。如上所述,在一些实例中,几何形状着色器16可为生产者着色器的实例。因此,几何形状着色器计数缓冲器18可称为生产者着色器计数缓冲器。
[0053]控制器12可将几何形状着色器计数缓冲器18的多个存储位置中的每一者指派于所执行几何形状着色器16中的每一者。举例来说,控制器12可将几何形状着色器计数缓冲器18的第一存储位置指派于所执行几何形状着色器16中的一者,将几何形状着色器计数缓冲器18的第二存储位置指派于所执行几何形状着色器16中的另一者,以此类推。所执行几何形状着色器16中的每一者可将指示其产生的图形数据量的值存储到其经指派的几何形状着色器计数缓冲器18的存储位置中。作为一个实例,指示由所执行几何形状着色器16中的一者产生的图形数据量的值可为由几何形状着色器16中的所述一者产生的图元量的值。
[0054]在一些实例中,在所执行几何形状着色器16中的每一者完成产生图形数据之后,所执行几何形状着色器16中的所述一者可存储指示由几何形状着色器16中的所述一者产生的图形数据量的值。举例来说,如图1中说明,几何形状着色器16可将其产生的图形数据在正产生时输出到几何形状着色器缓冲器20。举例来说,几何形状着色器16A可产生三个图元,且可在其完成产生每一图元的图形数据之后将每一图元的图形数据输出到几何形状着色器缓冲器20。在几何形状着色器16A完成第三图元的图形数据的产生之后,几何形状着色器16A可随后将值三(指定三个图元作为输出数据)存储在几何形状着色器计数缓冲器18的经指派于几何形状着色器16A的存储位置中。
[0055]在一些实例中,几何形状着色器16可以存储指示所产生的图形数据量的值为任务,因为几何形状着色器16可操作以对所产生的图形数据量进行计数,例如对所产生图元的数目进行计数。否则,例如控制器12等另一单元可需要跟踪由几何形状着色器16产生的图元量,这可为低效的且可不必要地消耗处理功率。
[0056]而且,如上文指示,控制器12可能不知道几何形状着色器16可产生多少图元。因此,在一些实例中,几何形状着色器16可良好地适于存储指示所产生的图形数据量的值,因为几何形状着色器16将知道何时其已完成产生图形数据。
[0057]举例来说,在此实例中,在几何形状着色器16A完成产生第一图元或第二图元的图形数据之后,几何形状着色器16可能尚未存储指示由几何形状着色器16产生的图形数据量的值。而是,在存储指示由几何形状着色器16A产生的图形数据量的值之前,几何形状着色器16A可等待直到其已完成产生全部三个图元的图形数据为止。因此,指示所产生的图形数据量的值在几何形状着色器计数缓冲器18的存储位置中的存储可指示几何形状着色器16中经指派于几何形状着色器计数缓冲器18的所述存储位置的几何形状着色器已完成产生其图形数据。
[0058]可存在至少两种技术来确保所执行几何形状着色器16不存储指示所产生的图形数据量的值,直到完成产生图形数据为止。作为一个实例技术,几何形状着色器16可经设计有计数器。举例来说,编写几何形状着色器16的源代码的编程者可在用于几何形状着色器16的源代码内包含用以维持计数器的指令。
[0059]源代码的经编译版本可致使几何形状着色器16在产生每一图元之后递增其计数器值以指示由几何形状着色器16产生的图形数据量,例如所产生图元的数目。源代码还可包含致使在几何形状着色器16完成产生图形数据之后几何形状着色器16将计数器值输出到其在几何形状着色器计数缓冲器18内的经指派存储位置的指令。
[0060]然而,在一些实例中,可能几何形状着色器16未经设计有计数器,例如,计数器不是几何形状着色器16的源代码的部分。举例来说,用于传统几何形状着色器16的源代码可能未设计有计数器。在这些实例中,编译器可经设计以在几何形状着色器16内包含计数器。举例来说,处理器(未图示)可执行编译器,所述编译器编译用于几何形状着色器的源代码以产生可由GPUlO执行的目标代码。经编译几何形状着色器的实例可为几何形状着色器16。在编译期间,编译器可将用以维持在所执行几何形状着色器16产生图元之后递增的计数器的指令包含到几何形状着色器的目标代码中。编译器还可将用以在完成产生图形数据之后将计数器值存储在几何形状着色器计数缓冲器18内的经指派存储位置中的指令包含在几何形状着色器的目标代码中。以此方式,即使当几何形状着色器16未经设计有计数器时,例如即使在计数器值不是用于几何形状着色器16的源代码的部分的情况下,所执行几何形状着色器16也可能够存储指示所产生的图形数据量的值。
[0061]在以上实例技术中的任一者中,编译器可编译源代码以产生可由GPUlO执行的用于几何形状着色器16的目标代码。在第一实例技术中,用于几何形状着色器16的源代码可已经包含用以维持计数器的指令,且还可包含用以致使几何形状着色器16在图形数据的产生完成时输出计数器值的指令。编译器可编译用于计数器的源代码指令,以及致使几何形状着色器16在图形数据的产生完成时输出计数器值以产生可执行目标代码的指令。
[0062]在第二实例技术中,用于几何形状着色器16的源代码可不包含用以维持计数器的指令,且可不包含用以致使几何形状着色器16在图形数据的产生完成时输出计数器值的指令。在此实例中,编译器可经设计以前摄地包含用于计数器的作为对目标代码的附件的目标代码指令,以及致使几何形状着色器16在图形数据的产生完成时输出计数器值的目标代码指令。以此方式,即使对于传统几何形状着色器16,编译器也可能够产生可由GPUlO执行的目标代码,其致使几何形状着色器16维持计数器且在图形数据的产生完成时输出计数器值。
[0063]控制器12可基于存储在几何形状着色器计数缓冲器18中的值来确定多少像素着色器24将执行。举例来说,类似于顶点着色器14和几何形状着色器16,在GPUlO外部的存储装置可存储用于像素色器的指令,例如用于像素着色器的目标或源代码。控制器12可执行像素着色器24的一个或一个以上实例,表示为像素着色器24A到24X。像素着色器24可执行类似功能,但是对不同数据执行。像素着色器24可接收由几何形状着色器16产生的图元,且对所接收图元执行一个或一个以上功能,例如光栅化、着色、掺合、照明以及其它图形相关功能。像素着色器24的输出可为将在显示器上显示的像素的像素值。
[0064]控制器12可基于存储在几何形状着色器计数缓冲器18中的值来确定像素着色器24的多少实例将执行。作为一个实例,控制器12可针对由几何形状着色器16中的每一者产生的每一图元执行像素着色器24中的一者。举例来说,假定几何形状着色器计数缓冲器18的第一存储位置存储值五,几何形状着色器计数缓冲器18的第二存储位置存储值六,几何形状着色器计数缓冲器18的第三存储位置存储值十,且几何形状着色器计数缓冲器18的第四存储位置存储值一。而且,假定几何形状着色器计数缓冲器18的第一到第四存储位置分别指派于几何形状着色器16A到16D。
[0065]在此实例中,控制器12可执行像素着色器24的五个实例,其各自消耗由几何形状着色器16A产生的五个图元中的一者的图形数据。控制器12可随后执行像素着色器24的六个实例,其各自消耗由几何形状着色器16B产生的六个图元中的一者的图形数据,随后执行像素着色器24的十个实例,其各自消耗由几何形状着色器16C产生的十个图元中的一者的图形数据,之后执行像素着色器24的一个实例,其消耗由几何形状着色器16D产生的一个图元的图形数据。
[0066]在像素着色器24的接下来的实例的执行开始之前,控制器12不一定需要等待直到像素着色器24的第一实例的执行完成。举例来说,在先前实例中,在像素着色器24的接下来的六个实例的执行开始之前,控制器12可不等待直到像素着色器24的前五个实例的执行完成。控制器12可执行像素着色器24的第一实例,且在一些实例中,在像素着色器24的第一实例正在执行时,可开始像素着色器24的接下来实例的执行。换句话说,在一些实例中,GPUlO可并行地执行像素着色器24的多个实例。
[0067]在一些实例中,由几何形状着色器16中的一者产生的图形数据可能需要在来自几何形状着色器16中的另一者的图形数据之前消耗。举例来说,几何形状着色器16中的两个几何形状着色器可产生重叠图元的图形数据。在此实例中,被重叠图元的图形数据可能需要在重叠图元的图形数据之前消耗,以使得像素着色器24可适当地掺合重叠图元和被重叠图元的颜色。然而,可能几何形状着色器16中的产生重叠图元的几何形状着色器完成产生其图元是在几何形状着色器16中的产生被重叠图元的几何形状着色器完成产生其图元之前。
[0068]为了确保由几何形状着色器16产生的图形数据是以适当次序消耗,几何形状着色器计数缓冲器18可充当经排序计数缓冲器。举例来说,控制器12可将几何形状着色器计数缓冲器18内的存储位置(例如,第一存储位置)指派于几何形状着色器16中在来自任何其它几何形状着色器16的图形数据经消耗之前图形数据会消耗的第一者。控制器12可将几何形状着色器计数缓冲器18内的另一存储位置(例如,第二存储位置)指派于几何形状着色器16中在几何形状着色器16中的第一者之后且在来自任何其它几何形状着色器16的图形数据经消耗之前图形数据会消耗的第二者,以此类推。
[0069]通过经排序计数缓冲器,控制器12可确保其执行像素着色器24以按图形数据应当消耗的次序来消耗图形数据。举例来说,控制器12可监视存储在几何形状着色器计数缓冲器18内的存储位置中的值。控制器12可等待执行一个或一个以上像素着色器24,直到几何形状着色器计数缓冲器18内经指派于几何形状着色器16中图形数据应首先消耗的几何形状着色器的存储位置存储指示所产生的图形数据的值为止。
[0070]在一些实例中,可能几何形状着色器计数缓冲器18内的存储位置在几何形状着色器计数缓冲器18内经指派于几何形状着色器16中图形数据应首先消耗的几何形状着色器的存储位置存储指示所产生的图形数据量的值之前存储指示所产生的图形数据量的值。在这些实例中,控制器12可不执行一个或一个以上像素着色器24,直到几何形状着色器计数缓冲器18内经指派于几何形状16中图形数据应首先消耗的几何形状着色器的存储位置存储指示所产生的图形数据量的值之后。
[0071]作为说明性实例,假定GPUlO执行几何形状着色器16A和16B。而且,假定由几何形状着色器16A产生的图形数据应在由几何形状着色器16B产生的图形数据之前消耗。控制器12可将几何形状着色器计数缓冲器18内的第一存储位置指派于几何形状着色器16A,且将几何形状着色器计数缓冲器18内的第二存储位置指派于几何形状着色器16B。
[0072]在此说明性实例中,几何形状着色器16B在几何形状着色器16A之前完成产生图形数据。因此,在几何形状着色器计数缓冲器18内的第一存储位置存储指示由几何形状着色器16A产生的图形数据量的值之前,几何形状着色器计数缓冲器18内的第二存储位置可存储指示由几何形状着色器16B产生的图形数据量的值。虽然几何形状着色器计数缓冲器18的第二存储位置可存储值,但控制器12可能未执行一个或一个以上像素着色器24,因为由几何形状着色器16A产生的图形数据应首先消耗,且几何形状着色器16A尚未完成产生图形数据。控制器12可知道几何形状着色器16A尚未完成产生图形数据,因为几何形状着色器计数缓冲器18内的第一存储位置尚未存储指示由几何形状着色器16A产生的图形数据量的值。如上所述,几何形状着色器计数缓冲器18内的存储位置在其经指派几何形状着色器16完成产生图形数据之后存储值。
[0073]以此方式,控制器12可同步一个或一个以上像素着色器24和几何形状着色器16的执行。举例来说,利用本发明中描述的实例技术中的一些,控制器12可确保GPUlO在图形数据可用于消耗时执行一个或一个以上像素着色器24。而且,利用本发明中描述的实例技术中的一些,控制器12可确保像素着色器24不仅在可用时消耗图形数据,而且以图形数据应消耗的次序来消耗图形数据。
[0074]消耗计数缓冲器22可进一步帮助控制器12同步一个或一个以上像素着色器24的执行。类似于几何形状着色器计数缓冲器18,消耗计数缓冲器22可为GPUlO的寄存器或局部存储器的部分,例如内部高速缓冲存储器。消耗计数缓冲器22可能并非在GPUlO的每个实例中都必要。[0075]消耗计数缓冲器22可充当计数器的计数器。举例来说,消耗计数缓冲器22可存储值,所述值在一些实例中指示多少几何形状着色器16已产生尚待消耗的图形数据。消耗计数缓冲器22的值可初始为零。控制器12可在几何形状着色器16的几何形状着色器将指示所产生的图形数据量的值存储在其在几何形状着色器计数缓冲器18内的经指派存储位置中时递增消耗计数缓冲器22的值。控制器12可在由几何形状着色器12中的几何形状着色器产生的图形数据经消耗之后递减消耗计数缓冲器22的值。
[0076]在一些实例中,控制器12可在几何形状着色器16中图形数据应首先消耗的几何形状着色器将指示所产生的图形数据量的值存储在其在几何形状着色器计数缓冲器18内的经指派存储位置中之后递增消耗计数缓冲器22的值。举例来说,继续上文的说明性实例,如果几何形状着色器16B在几何形状着色器16A之前在几何形状着色器计数缓冲器18中存储值,那么控制器12可不递增消耗计数缓冲器22的值。随后,当几何形状着色器16A在几何形状着色器计数缓冲器18中存储值时,控制器12可将消耗计数缓冲器22的值从零递增到二。
[0077]控制器12可监视存储在消耗计数缓冲器22中的值以确定经排序几何形状着色器计数缓冲器18的哪些存储位置存储指示所产生的图形数据的值。举例来说,如果消耗计数缓冲器22存储值六,那么控制器12可知道几何形状着色器计数缓冲器18的前六个存储位置存储值。控制器12可随后知道控制器12现在应开始足够的像素着色器24的执行以消耗由六个几何形状着色器16产生的图形数据。
[0078]如图1中说明,几何形状着色器16可将其产生的图形数据输出到几何形状着色器缓冲器20。几何形状着色器缓冲器20可称为生产者着色器缓冲器,因为几何形状着色器16可为生产者着色器的实例。虽然图1将几何形状着色器缓冲器20说明为GPUlO的一部分,但本发明的方面不受此限制。在一些实例中,几何形状着色器缓冲器20应存储的图形数据量可大于在GPUlO上可用的存储空间量。在这些实例中,几何形状着色器缓冲器20可在GPUlO的外部,且可驻留在GPUlO可用系统总线存取的存储装置中。
[0079]几何形状着色器缓冲器20可包含多个存储位置。所述存储位置中的每一者可存储由所执行几何形状着色器16中的每一者产生的图形数据。举例来说,控制器12可将几何形状着色器缓冲器20的第一存储位置指派于几何形状着色器16A,且将几何形状着色器缓冲器20的第二存储位置指派于几何形状着色器16B,以此类推。几何形状着色器16中的每一者可在其正在产生图形数据时将其产生的图形数据输出到其在几何形状着色器缓冲器20内的经指派存储位置。
[0080]举例来说,如果几何形状着色器16A产生五个图元,那么在几何形状着色器16A产生第一图元的图形数据之后,几何形状着色器16A可将第一图元的图形数据输出到几何形状着色器缓冲器20的第一存储位置,之后是将第二图元的图形数据存储在几何形状着色器缓冲器20的第一存储位置中,以此类推。如上文描述,虽然在几何形状着色器16A正在产生图形数据时几何形状着色器16A可将其产生的图形数据输出到几何形状着色器缓冲器20的第一存储位置,但几何形状着色器16A可不将指示所产生数据量的值输出到其在几何形状着色器计数缓冲器18中的经指派存储位置,直到几何形状着色器16A完成产生全部五个图元的图形数据之后。
[0081]在一些实例中,虽然控制器12可能不知道几何形状着色器16中的每一者可产生多少图形数据,但控制器12可事先知道每一几何形状着色器16可产生的最大图形数据量。举例来说,几何形状着色器16中的每一者可经设计以使得其在其可产生的总图形数据量方面受限。几何形状着色器缓冲器20的存储位置的大小,例如几何形状着色器缓冲器20的每一存储位置可存储的图形数据量,可等于几何形状着色器16中的每一者可产生的最大图形数据量。
[0082]作为一个实例,几何形状着色器16中的每一者可产生的最大图形数据量可为4千字节(KB),但本发明的方面不受此限制。在此实例中,几何形状着色器缓冲器20的存储位置的大小可为4KB。
[0083]在一些实例中,存储在几何形状缓冲器20的存储位置中的图形数据可为“稀疏填充的”。举例来说,在一些实例中,由几何形状着色器中的每一者产生的每一图元可由100个字节表示。如果几何形状着色器16中的一者产生五个图元,那么几何形状缓冲器20的指派于几何形状着色器16中的一者的存储位置可存储500个字节,例如5个图元*100个字节/图元。因此,在此实例中,几何形状着色器16中的一者在几何形状着色器缓冲器20的可存储多达4KB的存储位置中存储500个字节。因为几何形状缓冲器20的存储位置存储其可存储的总数据量的八分之一,例如500个字节除以4KB,所以在此实例中,几何形状缓冲器20的存储位置内的数据可视为少量填充的。
[0084]像素着色器24中的每一者可消耗存储在几何形状着色器缓冲器20的存储位置中的图形数据。举例来说,假定由几何形状着色器16A产生的图形数据应在来自几何形状着色器16中的任何其它一者的图形数据之前消耗。而且,假定控制器12指派几何形状着色器计数缓冲器18的第一存储位置以存储指示由几何形状着色器16A产生的图形数据量的值。在此实例中,在几何形状着色器16A将指示所产生的图形数据量的值存储在几何形状着色器计数缓冲器18的第一存储位置中之后,控制器12可致使GPUlO执行一个或一个以上像素着色器24,其消耗来自几何形状着色器缓冲器18的经指派于几何形状着色器16A的存储位置的图形数据。
[0085]图2是说明可操作以实施本发明的一个或一个以上方面的装置26的实例的框图。装置26的实例包含(但不限于)视频装置,例如媒体播放器、机顶盒、例如移动电话等无线手持机、个人数字助理(PDA)、桌上型计算机、膝上型计算机、游戏控制台、视频会议单元、平板计算装置及类似者。装置26可包含处理器28、图形处理单元(GPU) 10、存储装置32、收发器模块24、用户接口 36、显示缓冲器38,和显示器40。如图2中说明,装置26的GPUlO可相同或大体上类似于图1的GPU10。因此,在图2的实例中不进一步讨论GPUlO的实例功能性。
[0086]虽然将处理器28和GPUlO说明为单独的单元,但本发明的方面不限于此。在一些实例中,处理器28和GPUlO可形成于共同集成电路(IC)中。处理器28和GPUlO可各自包含单个处理器核心或多个处理器核心。
[0087]装置26可包含为了清楚的目的而未在图2中展示的额外模块或单元。举例来说,装置26可包含图2中均未展示的扬声器和麦克风,以在装置26为移动无线电话的实例中或装置26为媒体播放器的扬声器中实现电话通信。此外,装置26中所示的各种模块和单元可能不是在装置26的每个实例中都是必要的。举例来说,在装置26为桌上型计算机或经配备以与外部用户接口或显示器介接的其它装置的实例中,用户接口 36和显示器40可在装置26的外部。
[0088]处理器28的实例包含(但不限于)DSP、通用微处理器、ASIC、FPGA或其它等效集成或离散逻辑电路。存储装置32可包括一个或一个以上计算机可读存储媒体。存储装置32的实例包含(但不限于)随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器或可用来以指令或数据结构的形式存储所要程序代码且可由计算机、处理器或GPU存取的任何其它媒体。在一些实例实施方案中,存储装置32可包含致使处理器28和/或GPUlO执行在本发明中归属于处理器28和GPUlO的功能的指令。
[0089]在一些实例中,存储装置32可视为非暂时性存储媒体。术语“非暂时性”可指示存储媒体不是以载波或传播信号来体现。然而,术语“非暂时性”不应解释为意味着存储装置32是不可移动的。作为一个实例,存储装置32可从装置26移除,且移动到另一装置。作为另一实例,大体上类似于存储装置32的存储装置可插入到装置26中。在某些实例中,非暂时性存储媒体可存储可随着时间改变的数据(例如,在RAM中)。
[0090]用户接口 36的实例包含(但不限于)轨迹球、鼠标、键盘和其它类型的输入装置。用户接口 36还可为触摸屏,且可并入作为显示器40的一部分。收发器模块34可包含用以允许装置26与另一装置或网络之间的无线或有线通信的电路。收发器模块34可包含调制器、解调器、放大器和用于有线或无线通信的其它此类电路。
[0091]如图2中说明,存储装置32可存储用于顶点着色器14、几何形状着色器16和像素着色器24的指令,例如源代码和/或目标代码。GPUlO可执行顶点着色器14、几何形状着色器16和像素着色器24的指令的多个实例以用于顶点着色器14A到14N、几何形状着色器16A到16M以及像素着色器24A到24X的例示,如图1中说明。
[0092]而且,在一些实例中,存储装置32可包含几何形状着色器缓冲器20。如上所述,几何形状着色器缓冲器20可存储由几何形状着色器16A到16M中的一者或一者以上产生的图形数据。存储装置32可包含几何形状着色器缓冲器20,因为在一些实例中,可能将存储在几何形状着色器缓冲器20中的图形数据量大于在GPUlO上可用的存储空间量。
[0093]在一些实例中,存储装置32可存储用于编译器30的指令。然而,用于编译器30的指令的存储可能并非在装置26的每个实例中都必要。在一些实例实施方案中,编译器30可包含在执行时致使处理器28在几何形状着色器16的指令内包含计数器的指令。举例来说,处理器28可执行如图2中说明的编译器30的指令以编译几何形状着色器16,例如接收用于几何形状着色器16的源代码且产生用于几何形状着色器16的目标代码。处理器28可随后将经编译几何形状着色器16存储在存储装置32中。当GPUlO执行几何形状着色器16的一个或一个以上实例(例如,几何形状着色器16A到16M)时,几何形状着色器16A到16M中的每一者可递增其相应计数器,所述计数器指示由几何形状着色器16A到16M中的每一者产生的图形数据量。
[0094]GPUlO经由一个或一个以上像素着色器24可输出将在显示器40上显示的图像的像素值。在一些实例中,GPUlO可将像素值直接输出到显示器40。在一些替代实例中,GPUlO可将图像的像素值输出到显示缓冲器38。显示缓冲器38可临时存储图像的像素值直到整个图像经再现为止。显示缓冲器38可视为图像帧缓冲器。显示缓冲器38可随后传输经再现图像以在显示器40上显示。显示器40可包括液晶显示器(IXD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子体显示器或另一类型的显示器装置。
[0095]图3是说明根据本发明的一个或一个以上方面的GPUlO的实例操作的流程图。仅为了说明目的,参考图1和2。
[0096]GPUlO可执行产生图形数据的生产者着色器42。生产者着色器的实例包含一个或一个以上几何形状着色器16。如上所述,所述一个或一个以上几何形状着色器可各自从一个或一个以上顶点着色器14接收一个图元,且将所述一个图元划分为一个或一个以上图元。由生产者着色器产生的图形数据可为所产生的一个或一个以上图元的顶点的属性,例如所产生的一个或一个以上图元的顶点的颜色和坐标值。
[0097]GPUlO可将所产生的图形数据存储在第一缓冲器的存储位置中44。第一缓冲器的存储位置的一个实例可为生产者着色器缓冲器内的存储位置。生产者着色器缓冲器的实例可为几何形状着色器缓冲器20。在几何形状着色器缓冲器20为存储装置32的部分的实例中,GPUlO可经由系统总线存取几何形状着色器缓冲器20。
[0098]在完成产生图形数据后,生产者着色器可即刻将指示由生产者着色器产生的图形数据量的值存储在第二缓冲器的存储位置中46。第二缓冲器内的存储位置的实例可为生产者着色器计数缓冲器内的存储位置。生产者着色器计数缓冲器的一个实例可为几何形状着色器计数缓冲器18。指示由生产者着色器产生的图形数据量的值的一个实例可为由生产者着色器产生的图元量。在一些实例中,生产者着色器可适合于存储所产生的图元的数目,因为生产者着色器可知道何时其已完成产生图形数据。然而,例如控制器12等其它单元可能不知道何时生产者着色器将完成产生图形数据。
[0099]在指示由生产者着色器产生的图形数据量的值的存储之后,GPUlO可执行一个或一个以上消费者着色器48。通过在指示由生产者着色器产生的图形数据量的值的存储之后执行一个或一个以上消费者着色器,控制器12可确保在将由所述一个或一个以上消费者着色器消耗的图形数据可用之前不执行所述一个或一个以上消费者着色器。消费者着色器的实例包含一个或一个以上像素着色器24。
[0100]在一个或一个以上实例中,所描述的功能可以硬件、软件、固件或其任一组合来实施。如果以软件实施,那么功能可作为一个或一个以上指令或代码存储在计算机可读媒体上。计算机可读媒体可包含计算机数据存储媒体。数据存储媒体可为可由一个或一个以上计算机或者一个或一个以上处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。举例来说且并非限制,此类计算机可读媒体可包括RAM、ROM、EEPR0M、⑶-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、或可用来以指令或数据结构的形式存储所要程序代码且可由计算机存取的任何其它媒体;如本文中所使用,磁盘及光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软磁盘及蓝光光盘,其中磁盘通常以磁性方式再生数据,而光盘使用激光以光学方式再生数据。上文的组合也应包含在计算机可读媒体的范围内。
[0101]可由例如一个或一个以上数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效集成或离散逻辑电路等一个或一个以上处理器来执行代码。因此,如本文中所使用的术语“处理器”可指上述结构或适合于实施本文中所描述的技术的任一其它结构中的任一者。并且,可将所述技术完全实施于一个或一个以上电路或逻辑元件中。[0102]本发明的技术可在广泛多种装置或设备中实施,包含无线手持机、集成电路(IC)或一组IC( S卩,芯片组)。本发明中描述各种组件、模块或单元以强调经配置以执行所揭示技术的装置的功能方面,但不一定需要通过不同硬件单元来实现。而是,如上所述,各种单元可在硬件单元中组合或由互操作硬件单元(包含如上所述的一个或一个以上处理器)的集合结合合适软件和/或固件来提供。
[0103]已描述了各种实例。这些和其它实例属于所附权利要求书的范围内。
【权利要求】
1.一种方法,其包括: 用图形处理单元GPU执行产生图形数据的生产者着色器; 用所述GPU将由所述生产者着色器产生的所述图形数据存储在第一缓冲器的存储位置中;以及 在完成所述图形数据的所述产生后,即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在第二缓冲器的存储位置中。
2.根据权利要求1所述的方法,其中所述第一和第二缓冲器是共同缓冲器的部分。
3.根据权利要求1所述的方法,其进一步包括: 在将指示由所述生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述存储位置中之后,执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述存储位置中的所述图形数据。
4.根据权利要求1所述的方法,其中所述生产者着色器包括第一生产者着色器,其中所述图形数据包括第一图形数据,其中所述第二缓冲器包括第一存储位置和第二存储位置,且其中所述值存储在所述第二缓冲器的所述第一存储位置中,所述方法进一步包括: 执行产生第二图形数据的第二生产者着色器; 将由所述第二生产者着色器产生的所述第二图形数据存储在所述第一缓冲器的另一不同存储位置中;以及 在完成所述第二图形数据的所述产生后,即刻用所述第二生产者着色器将指示由所述第二生产者着色器产生的图形数据量的值存储在所述第二缓冲器的所述第二存储位置中。
5.根据权利要求4所述的方法,其中在所述第一生产者着色器完成所述第一图形数据的所述产生之前所述第二生产者着色器完成所述第二图形数据的所述产生,所述方法进一步包括: 不执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述另一不同存储位置中的所述第二图形数据,直到所述第一生产者着色器完成所述第一图形数据的产生为止且直到所述第一生产者着色器将指示由所述第一生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述第一存储位置中为止。
6.根据权利要求5所述的方法,其进一步包括: 在所述第一生产者着色器存储指示存储于所述第一缓冲器的所述存储位置中的所述图形数据量的所述值之后,执行所述一个或一个以上消费者着色器中的第一消费者着色器以消耗所述第一图形数据;以及 在所述第一消费者着色器的所述执行之后,在所述第二生产者着色器存储指示存储于所述第一缓冲器的所述另一不同存储位置中的所述图形数据量的所述值之后,执行所述一个或一个以上消费者着色器中的第二消费者着色器以消耗所述第二图形数据。
7.根据权利要求1所述的方法,其进一步包括: 用编译器将致使所述生产者着色器产生计数器的指令包含到由所述编译器产生的所述生产者着色器的目标代码中, 其中所述计数器不是所述生产者着色器的源代码的部分, 其中所述计数器在所述生产者着色器正在产生所述图形数据的同时对由所述生产者着色器产生的所述图形数据量进行计数,且其中用在所述GPU上执行的所述生产者着色器存储指示所述图形数据量的所述值包括在所述图形数据的所述产生的完成后即刻存储所述计数器的值。
8.根据权利要求1所述的方法,其进一步包括: 用所述生产者着色器对由所述生产者着色器产生的图元量进行计数, 其中指示所述图形数据量的所述值包括在所述图形数据的所述产生的所述完成时由所述生产者着色器产生的所述图元量。
9.根据权利要求1所述的方法,其中所述生产者着色器包括可操作以接收图元且将所述图元划分以产生一个或一个以上图元的几何形状着色器,且其中所述消费者着色器包括可操作以接收由所述几何形状着色器产生的所述一个或一个以上图元中的至少一个图元的像素着色器。
10.根据权利要求1所述的方法,其进一步包括: 存储指示图形数据尚待消耗的多个生产者着色器的数目的值,其中所述生产者着色器是所述多个生产者着色器中的一者;以及 基于所述存储的指示图形数据尚待消耗的所述多个生产者着色器的所述数目的值来确定所述第二缓冲器的哪些存储位置存储指示所产生图形数据的值。
11.一种设备,其包括: 第一缓冲器; 第二缓冲器;以及 图形处理单元GPU,其可操作以: 执行产生图形数据的生产者着色器; 将由所述生产者着色器产生的所述图形数据存储在所述第一缓冲器的存储位置中;以及 在完成所述图形数据的所述产生后,即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在所述第二缓冲器的存储位置中。
12.根据权利要求11所述的设备,其中所述第一缓冲器和所述第二缓冲器是共同缓冲器的部分。
13.根据权利要求11所述的设备,其中所述GPU包含所述第二缓冲器。
14.根据权利要求11所述的设备,其中所述GPU进一步可操作以在所述生产者着色器将指示由所述生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述存储位置中之后,执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述存储位置中的所述图形数据。
15.根据权利要求11所述的设备,其中所述生产者着色器包括第一生产者着色器,其中所述图形数据包括第一图形数据,其中所述第二缓冲器包括第一存储位置和第二存储位置,且其中所述值存储在所述第二缓冲器的所述第一存储位置中,且其中所述GPU进一步可操作以: 执行产生第二图形数据的第二生产者着色器; 将由所述第二生产者着色器产生的所述第二图形数据存储在所述第一缓冲器的另一不同存储位置中;以及在完成所述第二图形数据的所述产生后,即刻用所述第二生产者着色器将指示由所述第二生产者着色器产生的图形数据量的值存储在所述第二缓冲器的所述第二存储位置中。
16.根据权利要求15所述的设备,其中在所述第一生产者着色器完成所述第一图形数据的所述产生之前所述第二生产者着色器完成所述第二图形数据的所述产生,且其中所述GPU进一步可操作以: 不执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述另一不同存储位置中的所述第二图形数据,直到所述第一生产者着色器完成所述第一图形数据的产生为止且直到所述第一生产者着色器将指示由所述第一生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述第一存储位置中为止。
17.根据权利要求16所述的设备,其中所述GPU进一步可操作以: 在所述第一生产者着色器存储指示存储于所述第一缓冲器的所述存储位置中的所述图形数据量的所述值之后,执行所述一个或一个以上消费者着色器中的第一消费者着色器以消耗所述第一图形数据;以及 在所述第一消费者着色器的所述执行之后,在所述第二生产者着色器存储指示存储于所述第一缓冲器的所述另一不同存储位置中的所述图形数据量的所述值之后,执行所述一个或一个以上消费者着色器中的第二消费者着色器以消耗所述第二图形数据。
18.根据权利要求11所述的设备,其进一步包括: 处理器,其执行编译器,所述编译器可操作以编译所述生产者着色器以将致使所述生产者着色器产生计数器的指令包含到由所述编译器产生的所述生产者着色器的目标代码中, 其中所述计数器不是所述生产者着色器的源代码的部分, 其中所述计数器在所述生产者着色器正在产生所述图形数据的同时对由所述生产者着色器产生的所述图形数据量进行计数, 其中所述生产者着色器在所述图形数据的所述产生的完成后即刻存储所述计数器的值以存储指示由所述生产者着色器产生的所述图形数据量的所述值。
19.根据权利要求11所述的设备,其中所述生产者着色器对由所述生产者着色器产生的图元量进行计数,且其中指示所述图形数据量的所述值包括在所述图形数据的所述产生的所述完成时由所述生产者着色器产生的所述图元量。
20.根据权利要求11所述的设备,其中所述生产者着色器包括可操作以接收图元且将所述图元划分以产生一个或一个以上图元的几何形状着色器,且其中所述消费者着色器包括可操作以接收由所述几何形状着色器产生的所述一个或一个以上图元中的至少一个图元的像素着色器。
21.根据权利要求11所述的设备,其进一步包括: 第三缓冲器,其可操作以存储指示图形数据尚待消耗的多个生产者着色器的数目的值,其中所述生产者着色器是所述多个生产者着色器中的一者;以及 控制器,其可操作以基于所述存储的指示图形数据尚待消耗的多个生产者着色器的所述数目的值来确定所述第二缓冲器的哪些存储位置存储指示所产生图形数据的值。
22.根据权利要求11所述的设备,其中所述设备包括以下各项中的至少一者:媒体播放器、机顶盒、无线手持机、个人数字助理PDA、桌上型计算机、膝上型计算机、游戏控制台、视频会议单元以及平板计算装置。
23.—种设备,其包括: 第一缓冲器; 第二缓冲器;以及 图形处理单元GPU,其包括: 用于执行产生图形数据的生产者着色器的装置; 用于将由所述生产者着色器产生的所述图形数据存储在所述第一缓冲器的存储位置中的装置;以及 用于在完成所述图形数据的所述产生后即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在所述第二缓冲器的存储位置中的装置。
24.根据权利要求23所述的设备,其进一步包括: 用于在将指示由所述生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述存储位置中之后执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述存储位置中的所述图形数据的装置。
25.根据权利要求23所述的设备,其中所述生产者着色器包括第一生产者着色器,其中所述图形数据包括第一图形数据,其中所述第二缓冲器包括第一存储位置和第二存储位置,且其中所述值存储在所述第二缓冲器的所述第一存储位置中,所述GPU进一步包括: 用于执行产生第二图形数据的第二生产者着色器的装置; 用于将由所述第二生产者着色器产生的所述第二图形数据存储在所述第一缓冲器的另一不同存储位置中的装置;以及 用于在完成所述第二图形数据的所述产生后即刻用所述第二生产者着色器将指示由所述第二生产者着色器产生的图形数据量的值存储在所述第二缓冲器的所述第二存储位置中的装置。
26.根据权利要求25所述的设备,其中在所述第一生产者着色器完成所述第一图形数据的所述产生之前所述第二生产者着色器完成所述第二图形数据的所述产生,所述GPU进一步包括: 用于不执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述另一不同存储位置中的所述第二图形数据直到所述第一生产者着色器完成所述第一图形数据的产生为止且直到所述第一生产者着色器将指示由所述第一生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述第一存储位置中为止的装置。
27.根据权利要求26所述的设备,其进一步包括: 用于在所述第一生产者着色器存储指示存储于所述第一缓冲器的所述存储位置中的所述图形数据量的所述值之后执行所述一个或一个以上消费者着色器中的第一消费者着色器以消耗所述第一图形数据的装置;以及 用于在所述第一消费者着色器的所述执行之后在所述第二生产者着色器存储指示存储于所述第一缓冲器的所述另一不同存储位置中的所述图形数据量的所述值之后执行所述一个或一个以上消费者着色器中的第二消费者着色器以消耗所述第二图形数据的装置。
28.根据权利要求23所述的设备,其进一步包括:用于编译的装置,其可操作以将致使所述生产者着色器产生计数器的指令包含到由编译器产生的所述生产者着色器的目标代码中, 其中所述计数器不是所述生产者着色器的源代码的部分, 其中所述计数器在所述生产者着色器正在产生所述图形数据的同时对由所述生产者着色器产生的所述图形数据量进行计数,且 其中所述用于用在所述GPU上执行的所述生产者着色器存储指示所述图形数据量的所述值的装置包括用于在所述图形数据的所述产生的完成后即刻存储所述计数器的值的 装置。
29.根据权利要求23所述的设备,其进一步包括: 用于用所述生产者着色器对由所述生产者着色器产生的图元量进行计数的装置,其中指示所述图形数据量的所述值包括在所述图形数据的所述产生的所述完成时由所述生产者着色器产生的所述图元量。
30.根据权利要求23所述的设备,其中所述生产者着色器包括可操作以接收图元且将所述图元划分以产生一个或一个以上图元的几何形状着色器,且其中所述消费者着色器包括可操作以接收由所述几何形状着色器产生的所述一个或一个以上图元中的至少一个图元的像素着色器。
31.根据权利要求23所述的设备,其进一步包括: 用于存储指示图形数据尚待消耗的多个生产者着色器的数目的值的装置,其中所述生产者着色器是所述多个生产者着色器中的一者;以及 用于基于所述存储的指示图形数据尚待消耗的所述多个生产者着色器的所述数目的值来确定所述第二缓冲器的哪些存储位置存储指示所产生图形数据的值的装置。
32.根据权利要求23所述的设备,其中所述设备包括以下各项中的至少一者:媒体播放器、机顶盒、无线手持机、个人数字助理PDA、桌上型计算机、膝上型计算机、游戏控制台、视频会议单元以及平板计算装置。
33.一种包括指令的非暂时性计算机可读存储媒体,所述指令致使一个或一个以上处理器: 用图形处理单元GPU执行产生图形数据的生产者着色器; 用所述GPU将由所述生产者着色器产生的所述图形数据存储在第一缓冲器的存储位置中;以及 在完成所述图形数据的所述产生后,即刻用在所述GPU上执行的所述生产者着色器将指示由所述生产者着色器产生的所述图形数据的量的值存储在第二缓冲器的存储位置中。
34.根据权利要求33所述的非暂时性计算机可读存储媒体,其进一步包括用以进行以下操作的指令: 在将指示由所述生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述存储位置中之后,执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述存储位置中的所述图形数据。
35.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述生产者着色器包括第一生产者着色器,其中所述图形数据包括第一图形数据,其中所述第二缓冲器包括第一存储位置和第二存储位置,且其中所述值存储在所述第二缓冲器的所述第一存储位置中,所述指令进一步包括用以进行以下操作的指令: 执行产生第二图形数据的第二生产者着色器; 将由所述第二生产者着色器产生的所述第二图形数据存储在所述第一缓冲器的另一不同存储位置中;以及 在完成所述第二图形数据的所述产生后,即刻用所述第二生产者着色器将指示由所述第二生产者着色器产生的图形数据量的值存储在所述第二缓冲器的所述第二存储位置中。
36.根据权利要求35所述的非暂时性计算机可读存储媒体,其中在所述第一生产者着色器完成所述第一图形数据的所述产生之前所述第二生产者着色器完成所述第二图形数据的所述产生,所述指令进一步包括用以进行以下操作的指令: 不执行一个或一个以上消费者着色器以消耗存储在所述第一缓冲器的所述另一不同存储位置中的所述第二图形数据,直到所述第一生产者着色器完成所述第一图形数据的产生为止且直到所述第一生产者着色器将指示由所述第一生产者着色器产生的所述图形数据量的所述值存储在所述第二缓冲器的所述第一存储位置中为止。
37.根据权利要求36所述的非暂时性计算机可读存储媒体,其进一步包括用以进行以下操作的指令: 在所述第一生产者着色器存储指示存储于所述第一缓冲器的所述存储位置中的所述图形数据量的所述值之 后,执行所述一个或一个以上消费者着色器中的第一消费者着色器以消耗所述第一图形数据;以及 在所述第一消费者着色器的所述执行之后,在所述第二生产者着色器存储指示存储于所述第一缓冲器的所述另一不同存储位置中的所述图形数据量的所述值之后,执行所述一个或一个以上消费者着色器中的第二消费者着色器以消耗所述第二图形数据。
38.根据权利要求33所述的非暂时性计算机可读存储媒体,其进一步包括用以进行以下操作的指令: 用编译器将致使所述生产者着色器产生计数器的指令包含到由所述编译器产生的所述生产者着色器的目标代码中, 其中所述计数器不是所述生产者着色器的源代码的部分, 其中所述计数器在所述生产者着色器正在产生所述图形数据的同时对由所述生产者着色器产生的所述图形数据量进行计数, 其中所述用以用在所述GPU上执行的所述生产者着色器存储指示所述图形数据量的所述值的指令包括用以在所述图形数据的所述产生的完成后即刻存储所述计数器的值的指令。
39.根据权利要求33所述的非暂时性计算机可读存储媒体,其进一步包括用以进行以下操作的指令: 用所述生产者着色器对由所述生产者着色器产生的图元量进行计数, 其中指示所述图形数据量的所述值包括在所述图形数据的所述产生的所述完成时由所述生产者着色器产生的所述图元量。
40.根据权利要求33所述的非暂时性计算机可读存储媒体,其中所述生产者着色器包括可操作以接收图元且将所述图元划分以产生一个或一个以上图元的几何形状着色器,且其中所述消费者着色器包括可操作以接收由所述几何形状着色器产生的所述一个或一个以上图元中的至少一个图元的像素着色器。
41.根据权利要求33所述的非暂时性计算机可读存储媒体,其进一步包括用以进行以下操作的指令: 存储指示图形数据尚待消耗的多个生产者着色器的数目的值,其中所述生产者着色器是所述多个生产者着色器中的一者;以及 基于所述存储的指示图形数据尚待消耗的所述多个生产者着色器的所述数目的值来确定所述第二缓冲器的哪些存储位置存储指示所产生图形数据的值。
【文档编号】G06F9/54GK103649922SQ201280035273
【公开日】2014年3月19日 申请日期:2012年6月25日 优先权日:2011年7月19日
【发明者】安德鲁·格鲁伯 申请人:高通股份有限公司