CN105122310B - 用于基于瓦片的渲染的帧内时戳 - Google Patents
用于基于瓦片的渲染的帧内时戳 Download PDFInfo
- Publication number
- CN105122310B CN105122310B CN201480019155.8A CN201480019155A CN105122310B CN 105122310 B CN105122310 B CN 105122310B CN 201480019155 A CN201480019155 A CN 201480019155A CN 105122310 B CN105122310 B CN 105122310B
- Authority
- CN
- China
- Prior art keywords
- timestamp value
- storehouse
- time
- per
- time stamp
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
-
- 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
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/001—Texturing; Colouring; Generation of texture or colour
-
- 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
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Controls And Circuits For Display Device (AREA)
- Digital Computer Display Output (AREA)
- Image Processing (AREA)
Abstract
本发明描述用于支持执行基于瓦片的渲染的图形系统中的帧内时戳的技术。所述用于支持帧内时戳的技术可涉及基于由图形处理单元GPU在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值。所述时戳值可为所述多个每仓时戳值中的至少两者的函数。所述时戳值可由中央处理单元CPU、所述GPU、另一处理器或其任何组合产生。通过使用每仓时戳值产生针对帧内时戳请求的时戳值,可由执行基于瓦片的渲染的图形系统支持帧内时戳。
Description
本申请案主张2013年4月11日申请的第61/811,056号美国临时申请案的权益,所述临时申请案的全部内容以引用的方式并入本文中。
技术领域
本发明涉及图形处理系统,且更明确地说涉及在图形处理系统中使用时戳。
背景技术
计算装置常常利用图形处理单元(GPU)以加速渲染用于显示的图形数据。此类计算装置可包含(例如)计算机工作站、移动电话(例如所谓的智能电话)、嵌入系统、个人计算机、平板计算机和视频游戏控制台。渲染通常指代将可包含一或多个3D图形对象的三维(3D)图形场景转换为二维(2D)光栅化图像数据的过程。图形场景可渲染为一或多个帧的序列,其中每一帧描绘在时间上特定实例处的图形场景。
GPU可包含3D渲染管线以提供用于3D图形场景的渲染的至少部分硬件加速。场景中的3D图形对象可由图形应用细分为一或多个3D图形基元(例如,点、线、三角形、补丁等),且GPU可将场景的3D图形基元转换为待渲染的帧中的每一者的2D光栅化图像数据。因此,在GPU渲染的特定上下文中,渲染可指代将对应于图形场景中的3D对象的3D图形基元转换为2D光栅化图像数据的过程。
为渲染特定帧的3D图形基元,在主机中央处理单元(CPU)上执行的图形应用可将对应于待渲染的基元的几何形状数据放置到GPU可存取存储器中,将一或多个GPU状态设置命令放置到命令流中,且将一或多个绘制调用放置到命令流中,所述绘制调用致使GPU基于几何形状数据渲染基元。GPU可以命令被放置于命令流中的次序处理命令流中包含的命令,借此渲染场景。
发明内容
本发明描述用于支持执行基于瓦片的渲染的图形处理系统中的帧内时戳请求的技术。基于瓦片的渲染可涉及将渲染目标(例如,帧)细分为多个仓(例如,子区或瓦片),以及针对所述仓中的每一者执行单独渲染遍次迭代。帧内时戳请求可指代可放置在与待渲染的图形帧相关联的图形命令流中的任意位置处的时戳请求。时戳请求可指代对于指示时戳请求由处理所述时戳请求的装置(例如,GPU或CPU)处理的时间实例的时戳值的请求。本发明的帧内时戳产生技术可基于由图形处理单元(GPU)在执行基于瓦片的渲染时产生的一或多个每仓时戳值产生应用请求的时戳值。使用每仓时戳值来产生应用请求的时戳值可允许执行基于瓦片的渲染的图形处理系统支持帧内时戳。
在一个实例中,本发明描述一种方法,其包含利用一或多个处理器基于由GPU在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。
在另一实例中,本发明描述一种装置,其包含一或多个处理器,所述一或多个处理器经配置以基于由GPU在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。
在另一实例中,本发明描述一种设备,其包含GPU。所述设备进一步包含用于基于由GPU在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值的装置。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。
在另一实例中,本发明描述一种存储指令的计算机可读存储媒体,所述指令在执行时致使一或多个处理器基于由图形处理单元GPU在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。
在附图和下文描述中陈述本发明的一或多个实例的细节。本发明的其它特征、目标和优点将从所述描述和图式以及权利要求书而显而易见。
附图说明
图1是说明可用以实施本发明的帧内时戳产生技术的实例计算装置的框图。
图2为说明图1中更详细地展示的计算装置的CPU、GPU和存储器的框图。
图3为说明细分为多个子区(例如,瓦片)的实例渲染目标和显示在经细分渲染目标上的基元的实例集合的概念图。
图4为说明根据本发明由图形应用发布的实例命令流的概念图。
图5为说明根据本发明用于执行渲染遍次的实例执行时间线的概念图。
图6为说明根据本发明用于执行多个渲染遍次迭代的实例命令流的概念图。
图7为说明根据本发明用于支持执行基于瓦片的渲染的图形处理系统中的帧内时戳的实例技术的流程图。
图8为说明根据本发明用于支持执行基于瓦片的渲染的图形处理系统中的帧内时戳的另一实例技术的流程图。
具体实施方式
本发明描述用于支持执行基于瓦片的渲染的图形处理系统中的帧内时戳请求的技术。基于瓦片的渲染可涉及将渲染目标(例如,帧)细分为多个仓(例如,子区或瓦片),以及针对所述仓中的每一者执行单独渲染遍次迭代。帧内时戳请求可指代可放置在与待渲染的图形帧相关联的图形命令流中的任意位置处的时戳请求。时戳请求可指代对于指示时戳请求由处理所述时戳请求的装置(例如,GPU或CPU)处理的时间实例的时戳值的请求。本发明的帧内时戳产生技术可基于由图形处理单元(GPU)在执行基于瓦片的渲染时产生的一或多个每仓时戳值产生应用请求的时戳值。使用每仓时戳值来产生应用请求的时戳值可允许执行基于瓦片的渲染的图形处理系统支持帧内时戳。
发布位于两个不同绘制调用命令之间的帧内时戳请求的图形应用可(例如)期望响应于所述请求传回的时戳值对应于第一绘制调用命令的执行与第二绘制调用命令的执行之间的时间。然而,基于瓦片的渲染系统可以非连续方式执行用于图形帧的绘制调用命令,使得一个绘制调用命令的执行与同相同图形帧相关联的其它绘制调用命令的执行交错。举例来说,基于瓦片的渲染系统可将与待渲染的图形帧相关联的绘制调用命令的执行细分为多个每仓绘制调用,依据仓将所述每仓绘制调用分组在一起,且执行每仓绘制调用的群组中的每一者作为单独渲染遍次迭代的一部分。执行绘制调用命令的此非连续交错方式使得基于瓦片的渲染系统难以支持帧内时戳。
本发明中描述的技术可允许基于瓦片的渲染系统支持帧内时戳,即使在基于瓦片的渲染系统以非连续交错方式执行绘制调用命令的情况下也如此。举例来说,本发明的帧内时戳产生技术可基于由GPU在执行基于瓦片的渲染时产生的多个每仓时戳值产生应用请求的时戳值。可产生用于产生应用请求的时戳值的至少一些每仓时戳值作为不同渲染遍次迭代的一部分。使用不同渲染遍次迭代期间产生的每仓时戳值可允许图形处理系统产生至少在一定程度上反映不同绘制调用命令在图形帧的渲染期间执行所花费的相对时间量的应用请求的时戳值。以此方式,有用时戳值可由基于瓦片的渲染系统提供到图形应用,所述图形应用采用关于不同绘制调用命令花费的相对执行时间量的定时统计。
如本文所使用,应用请求的时戳值可指代响应于由图形应用(例如,高于软件堆栈中的驱动程序水平的应用)产生的时戳请求而产生的时戳值。每仓时戳值可指代由GPU在执行特定仓(例如,渲染目标的子区)的渲染遍次迭代时产生的时戳值。由图形应用产生的时戳请求可被称为应用产生的时戳请求。在一些情况下,每仓时戳请求可指代由GPU驱动程序或由GPU(例如,低于用户应用层的软件/硬件层)产生的时戳请求。
在一些实例中,GPU驱动程序或其它应用可产生针对命令流中接收的应用产生的时戳请求中的每一者的多个每仓时戳请求。每仓时戳请求可由GPU服务,GPU可响应于接收每仓时戳请求中的每一者产生相应每仓时戳值。每仓时戳值可指示GPU遇到在执行基于瓦片的渲染时执行的命令流中的每仓时戳请求的时间。响应于应用产生的时戳请求而产生的时戳和时戳值可分别称为应用请求的时戳和应用请求的时戳值。类似地,响应于每仓时戳请求产生的时戳和时戳值可分别称为每仓时戳和每仓时戳值。
图形应用(例如,在包含致使GPU渲染一或多个图形帧的指令的主机中央处理单元(CPU)上执行的应用)可常常发布多个绘制调用命令以便渲染特定图形帧。举例来说,GPU通常经配置以利用针对待执行的每一绘制调用命令的渲染状态设定的单一集合渲染单一类型的基元(例如,点、线、三角形、补丁等)。在此些实例中,如果需要一个以上类型的基元来渲染帧或如果需要一个以上类型的渲染状态来渲染所述帧,那么图形应用可需要发布多个绘制调用命令来渲染单一图形帧。
为当多个绘制调用命令用于渲染图形帧时获得用于个别绘制调用命令或所述绘制调用命令的子集的执行的定时统计,图形应用可将时戳请求放置在待由GPU执行的命令流中的绘制调用命令之间。放置在用于渲染个别图形帧的绘制调用命令之间的时戳请求可在本文中被称作帧内时戳请求,且响应于此些请求产生的对应时戳可被称为帧内时戳。
图形应用可响应于放置到命令流中的每一时戳请求接收时戳。所述时戳可包含指定GPU执行时戳请求的时间的时戳值。因为图形命令流通常由GPU以命令放置到命令流中的次序执行,所以图形应用可期望当时戳请求放置在命令流中的两个邻近绘制调用之间时,所传回的时戳值将对应于第一绘制调用命令的执行与第二绘制调用命令的执行之间发生的时间。
满足上文提及的期望的时戳值可允许图形应用(例如)执行各种时戳处理技术。举例来说,此些时戳值可用于通过取在绘制调用命令之前和之后响应于放置于命令流中的时戳请求传回的时戳值之间的差而确定绘制调用命令的近似执行时间。
在一些实例中,基于瓦片的渲染可涉及将渲染目标(例如,帧)细分为多个子区(例如,仓或瓦片),以及执行包含针对渲染目标的所述子区中的每一者的单独渲染遍次迭代的渲染遍次。为执行单独渲染遍次迭代,基于瓦片的渲染系统可将与待渲染的图形帧相关联的绘制调用命令的执行细分为多个每仓绘制调用,且依据仓将每仓绘制调用分组在一起。可执行每仓绘制调用的群组中的每一者,作为单独渲染遍次迭代的一部分。
如果待渲染的图形帧包含多个绘制调用,那么与一个绘制调用命令相关联的每仓绘制调用的执行可与同相同图形帧的其它绘制调用命令相关联的每仓绘制调用的执行交错。然而,如上文所论述,一些类型的时戳处理技术可假定以连续方式且以图形命令放置于命令流中的次序执行绘制调用命令。当执行基于瓦片的渲染时发生的绘制调用命令的交错执行可使得难以针对此些时戳处理技术提供有用的帧内时戳。
本发明的技术可用于即使在以交错方式执行绘制调用命令时(归因于基于瓦片的渲染技术的执行)也产生帧内时戳。在一些实例中,根据本发明产生的帧内时戳值可模仿或近似在执行连续按序绘制调用处理(尽管所述绘制调用可实际上以交错方式执行)的情况下原本将获得的时戳值,同时提供指示针对命令流中的绘制调用命令发生的相对执行时间量的时戳值。以此方式,时戳值可与时戳处理技术一起使用,所述时戳处理技术假定以连续方式且以图形命令放置于命令流中的次序执行绘制调用命令。
图1是说明可用以实施本发明的帧内时戳产生技术的实例计算装置2的框图。计算装置2可包括个人计算机、台式计算机、膝上型计算机、计算机工作站、视频游戏平台或控制台、无线通信装置(例如,移动电话、蜂窝式电话、卫星电话和/或移动电话手持机)、陆线电话、因特网电话、手持式装置(例如,便携式视频游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、显示装置、电视机、电视机顶盒、服务器、中间网络装置、主机计算机,或处理和/或显示图形数据的任何其它类型的装置。
如图1的实例中所说明,计算装置2包含用户接口4、CPU 6、存储器控制器8、存储器10、图形处理单元(GPU)12、显示接口14、显示器16和总线18。用户接口4、CPU6、存储器控制器8、GPU 12和显示接口14可使用总线18彼此通信。应注意,图1中展示的不同组件之间的总线和通信接口的特定配置仅是示范性的,且具有相同或不同组件的计算装置和/或其它图形处理系统的其它配置可用于实施本发明的技术。
CPU 6可包括控制计算装置2的操作的通用或专用处理器。用户可将输入提供到计算装置2以致使CPU 6执行一或多个软件应用。在CPU 6上执行的软件应用可包含(例如)图形应用、文字处理器应用、电子邮件应用、电子数据表应用、媒体播放器应用、视频游戏应用、图形用户接口应用、操作系统或任何其它类型的程序。用户可经由一或多个输入装置(未图示)(例如,键盘、鼠标、麦克风、触摸垫或经由用户接口4耦合到计算装置2的另一输入装置)将输入提供到计算装置2。
在CPU 6上执行的软件应用可包含一或多个图形渲染指令,其指示GPU 12将图形数据渲染到帧缓冲器以供在显示器16上显示。在一些实例中,图形渲染指令可符合图形应用编程接口(API),例如开放图形库()API、开放图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API或任何其它公共或专有标准图形API。为了处理图形渲染指令,CPU 6可将一或多个图形渲染命令发布到GPU12以致使GPU 12执行图形数据的渲染的一些或全部。在一些实例中,待渲染的图形数据可包含例如点、线、三角形、四边形、三角形条带等图形基元的列表。
存储器控制器8促进数据进出存储器10的传递。举例来说,存储器控制器8可接收存储器读取和写入命令,且服务相对于存储器系统10的此些命令以便为计算装置2中的组件提供存储器服务。存储器控制器8以通信方式耦合到存储器10。虽然存储器控制器8在图1的实例计算装置2中被说明为与CPU 6和存储器10两者分开的处理模块,但在其它实例中,存储器控制器8的功能性中的一些或全部可实施于CPU 6和存储器10中的一或两者上。
存储器10可存储可由CPU 6存取以用于执行的程序模块和/或指令和/或由在CPU6上执行的程序使用的数据。举例来说,存储器10可存储与在CPU 6上执行的应用相关联的程序代码和图形数据。存储器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可经配置以执行由CPU 6发布到GPU 12的命令。由GPU 12执行的命令可包含图形命令、绘制调用命令、GPU状态编程命令、时戳请求、储器传递命令、通用计算命令、核心执行命令等。
在一些实例中,GPU 12可经配置以执行图形操作以将一或多个图形基元渲染到显示器16。在此些实例中,当在CPU 6上执行的软件应用中的一者需要图形处理时,CPU6可将图形数据提供到GPU 12且将一或多个图形命令发布到GPU 12。图形命令可包含例如绘制调用命令、GPU状态编程命令、存储器传递命令、传图命令等。图形数据可包含顶点缓冲器、纹理数据、表面数据等。在一些实例中,CPU 6可通过将命令和图形数据写入到存储器10而将所述命令和图形数据提供到GPU 12,存储器10可由GPU 12存取。
在其它实例中,GPU 12可经配置以针对在CPU 6上执行的应用执行通用计算。在此等实例中,当在CPU 6上执行的软件应用中的一者决定将计算任务卸载到GPU 12时,CPU 6可将通用计算数据提供到GPU 12,且将一或多个通用计算命令发布到GPU 12。通用计算命令可包含例如核心执行命令、存储器传递命令等。在一些实例中,CPU 6可通过将命令和数据写入到可由GPU 12存取的存储器10而将命令和通用计算数据提供到GPU 12。
在一些情况下,GPU 12可内置有比CPU 6提供对向量运算更有效的处理的高度并行的结构。举例来说,GPU 12可包含多个处理元件,其经配置以用并行方式对多个顶点、控制点、像素和/或其它数据操作。GPU 12的高度并行性质可在一些情况下允许GPU12与使用CPU 6渲染图像相比更快地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)渲染到显示器16上。另外,GPU 12的高度并行性质可允许GPU 12比CPU 6更快速地处理用于通用计算应用的特定类型的向量和矩阵运算。
在一些情况下,可将GPU 12集成到计算装置2的母板中。在其它情况下,GPU 12可存在于图形卡上,所述图形卡安装在计算装置2的母板中的端口中或可以其它方式并入在经配置以与计算装置2互操作的外围装置内。在其它情况下,GPU 12可位于与CPU6相同的微芯片上,从而形成芯片上系统(SoC)。GPU 12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。
在一些实例中,GPU 12可包含GPU高速缓冲存储器,其可针对存储器10的全部或一部分提供高速缓存服务。在此些实例中,GPU 12可使用高速缓冲存储器来使用本地存储装置代替芯片外存储器而本地处理数据。此通过减少在每一读取和写入命令期间对于GPU 12经由总线18存取存储器10(其可体验沉重总线业务)的需要而允许GPU 12以更有效方式操作。然而,在一些实例中,GPU 12可不包含单独的高速缓冲存储器,而是经由总线18利用存储器10。GPU高速缓冲存储器可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。
CPU 6和/或GPU 12可将光栅化图像数据存储在存储器10内所分配的帧缓冲器中。显示接口14可从帧缓冲器检索数据且配置显示器16以显示由光栅化图像数据表示的图像。在一些实例中,显示接口14可包含经配置以将从帧缓冲器检索的数字值转换为可由显示器16消费的模拟信号的数/模转换器(DAC)。在其它实例中,显示接口14可将数字值直接传递到显示器16以进行处理。
显示器16可包含监视器、电视机、投影装置、液晶显示器(LCD)、等离子体显示器面板、发光二极管(LED)阵列、阴极射线管(CRT)显示器、电子纸、表面传导电子发射显示器(SED)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器16可集成于计算装置2内。举例来说,显示器16可为移动电话手持机或平板计算机的屏幕。或者,显示器16可为经由有线或无线通信链路而耦合到计算装置2的独立装置。举例来说,显示器16可为经由电缆或无线链路而连接到个人计算机的计算机监视器或平板显示器。
总线18可使用总线结构和总线协议的任何组合来实施,包含第一、第二和第三代总线结构和协议、共享总线结构和协议、点对点总线结构和协议、单向总线结构和协议以及双向总线结构和协议。可用以实施总线18的不同总线结构和协议的实例包含例如超传输总线、InfiniBand总线、高级图形端口总线、外围组件互连(PCI)总线、PCI高速总线、高级微控制器总线架构(AMBA)、高级高性能总线(AHB)、AMBA高级外围总线(APB),和AMBA高级eXentisible接口(AXI)总线。也可使用其它类型的总线结构和协议。
根据本发明,计算装置2(例如,CPU 6和/或GPU 12)可经配置以执行本发明中描述的帧内时戳值产生技术中的任一者。举例来说,计算装置2(例如,CPU 6和/或GPU 12)可经配置以基于由GPU 12在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。使用每仓时戳值来产生应用请求的时戳值可允许执行基于瓦片的渲染的图形处理系统支持帧内时戳请求。
操作期间,在CPU 6上执行的图形应用可产生经排序命令序列(例如,命令流)以渲染图形帧。在一些情况下,所述经排序命令序列可包含多个绘制调用命令和多个时戳请求。至少一些时戳请求可放置于所述经排序命令序列中的不同绘制调用命令之间。
为使用基于瓦片的渲染技术执行命令的序列,CPU 6可针对时戳请求中的每一者基于相应时戳请求产生多个每仓时戳请求。CPU 6可将每仓时戳请求中的每一者放置到多个命令流中的相应一者中。命令流中的每一者可由GPU 12在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行。命令流可被称为每仓命令流。所述渲染遍次迭代中的每一者可经配置以渲染渲染目标的多个子区中的相应一者。
CPU 6可致使GPU 12执行每仓命令流。在执行每仓命令流时,GPU 12可响应于执行由GPU 12接收的每仓命令流中的每仓时戳请求而产生每仓时戳值。在一些情况下,GPU 12可针对每仓命令流中包含的每仓时戳请求中的每一者产生相应每仓时戳值。每仓时戳值中的每一者可指示与相应每仓时戳值相关联的每仓时戳请求由GPU 12执行的时间。在一些实例中,每仓时戳值中的每一者可包含在由GPU 12产生的相应每仓时戳中。
在一些实例中,GPU 12可将每仓时戳值提供到CPU 6。响应于接收每仓时戳值,CPU6可基于每仓时戳值产生一或多个应用请求的时戳值。CPU 6可使用本发明中描述的技术中的任一者来产生应用请求的时戳值。CPU 6可向图形应用提供应用请求的时戳值。
在其它实例中,GPU 12可基于每仓时戳值产生一或多个应用请求的时戳值,且将应用请求的时戳值提供到CPU 6。GPU 12可使用本发明中描述的技术中的任一者来产生应用请求的时戳值。CPU 6可向图形应用提供应用请求的时戳值。
在额外实例中,GPU 12可基于每仓时戳值产生一或多个中间值,且将所述中间值提供到CPU 6。CPU 6可基于中间值产生每仓时戳值。CPU 6和GPU 12可使用本发明中描述的技术中的任一者来产生应用请求的时戳值。CPU 6可向图形应用提供应用请求的时戳值。在一些实例中,CPU 6和/或GPU 12可产生应用请求的时戳值使得每一应用请求的时戳值为至少两个不同每仓时戳值的函数。在此些实例中,所述至少两个不同每仓时戳值可在一些实例中在不同渲染遍次迭代期间产生。使用不同渲染遍次迭代期间产生的每仓时戳值可允许图形处理系统产生至少在一定程度上反映不同绘制调用命令在图形帧的渲染期间执行所花费的相对时间量的应用请求的时戳值。以此方式,本发明中描述的技术可允许基于瓦片的渲染系统支持帧内时戳,即使在基于瓦片的渲染系统以非连续交错方式执行绘制调用命令的情况下也如此。
在一些实例中,计算装置2(例如,CPU 6和/或GPU 12)可经配置以响应于当执行基于瓦片的渲染时接收的帧内时戳请求产生帧内时戳。在其它实例中,计算装置2(例如,CPU6和/或GPU 12)可经配置以接收命令流,所述命令流包含针对待渲染的图形帧的待执行的多个绘制调用命令和与待渲染的图形帧相关联的一或多个时戳请求。在此些实例中,计算装置2(例如,CPU 6和/或GPU 12)可进一步经配置以在一些实例中致使GPU 12使用基于瓦片的渲染技术执行待渲染的图形帧的所述多个绘制调用命令,且响应于所述一或多个时戳请求产生一或多个时戳。在一些实例中,可基于多个每仓时戳值产生所述一或多个时戳。
本发明中描述的技术可在一些实例中实施在图1中说明的计算装置2中的组件中的任一者中,所述组件包含例如CPU 6、GPU 12和系统存储器10。举例来说,用于产生帧内时戳的技术可由CPU 6中的图形驱动程序、GPU 12中的处理单元或其组合执行。作为另一实例,时戳请求可由在CPU 6上执行的软件应用(例如,图形应用或用户应用)发布到在CPU 6上执行的GPU驱动程序,且响应于所述时戳请求、GPU驱动程序可传回根据本发明的技术产生的时戳。在一些实例中,时戳请求和绘制调用可存储在存储器10中(例如,作为一或多个命令队列的一部分)。在其它实例中,响应于时戳请求传回的时戳可存储在存储器10中。
图2是进一步详细说明图1中的计算装置2的CPU 6、GPU 12和存储器10的框图。如图2中所展示,CPU 6以通信方式耦合到GPU 12和存储器10,且GPU 12以通信方式耦合到CPU6和存储器10。在一些实例中,GPU 12可与CPU 6一起集成到母板上。在额外实例中,GPU 12可实施在安装在包含CPU 6的母板的端口中的图形卡上。在其它实例中,GPU 12可并入在经配置以与CPU 6交互操作的外围装置内。在额外实例中,GPU 12可位于与CPU 6相同的微芯片上,从而形成芯片上系统(SoC)。
CPU 6可包含一或多个处理器(例如,微处理器),其经配置以执行软件应用24、图形API 26、GPU驱动程序28和操作系统30中的任一者。在一些实例中,CPU 6可经配置以执行指令,所述指令致使CPU 6的所述一或多个处理器执行本发明中描述的技术中的任一者的全部或部分。
GPU 12包含命令引擎32、一或多个处理单元34和装仓缓冲器36。所述一或多个处理单元34可经配置以形成3D图形渲染管线。在一些实例中,处理单元34中的一或多者可实施芯片上启用棋盘形布置的图形渲染管线。命令引擎32和处理单元34可包含专门硬件单元、固件、软件和处理器的任何组合,其经配置以执行归于此些组件的功能。在一些实例中,GPU 12可经配置以执行指令,所述指令致使GPU 12的一或多个处理器执行本发明中描述的技术中的任一者的全部或部分。
存储器10可存储一或多个命令38、基元数据40和时戳数据42。在一些实例中,存储器10还可存储指令,所述指令在执行时致使一或多个处理器执行本发明中描述的技术中的任一者的全部或部分。
软件应用24可为图形应用,其使用GPU 12将一或多个3D图形场景和/或3D图形对象渲染到待在显示器上显示的图像中。软件应用24可包含致使GPU 12光栅化和渲染一组3D图形基元的指令。软件应用24可经由图形API 26将所述指令发布到GPU驱动程序28。图形API 26可为将从软件应用24接收的指令转译为可由GPU驱动程序28消费的格式的运行时服务。
GPU驱动程序28经由图形API 26从软件应用24接收指令,且控制GPU 12的操作以服务所述指令。举例来说,GPU驱动程序28可调配一或多个命令38,将所述命令38放置到存储器10中,且指示GPU 12执行命令38。在一些实例中,GPU驱动程序28可将命令38放置到存储器10中,且经由操作系统30(例如经由一或多个系统调用)与GPU12通信。
操作系统30可提供软件应用24、图形API 26和GPU驱动程序28在上面执行的软件平台。操作系统30可管理CPU 6、存储器10和GPU 12之间传送和传递数据的硬件细节。
命令38可包含一或多个状态命令、一或多个绘制调用命令和/或一或多个时戳请求(例如,一或多个每仓时戳请求)。状态命令可指示GPU 12改变GPU 12中的状态变量中的一或多者,例如基元类型。绘制调用命令可指示GPU 12渲染由存储于存储器10中的一或多个顶点的群组(例如,在顶点缓冲器中界定)界定的几何形状。由一或多个顶点的群组界定的几何形状可在一些实例中对应于待渲染的多个基元(例如,基元数据40)。大体来说,绘制调用命令可调用GPU 12以渲染存储在存储器10的经界定区段(例如,缓冲器)中的所有顶点。换句话说,一旦GPU 12接收到绘制调用命令,控制便传递到GPU12用于渲染由存储器10的经界定区段(例如,缓冲器)中的顶点表示的几何形状和基元。
时戳请求可指示GPU 12和/或GPU驱动程序28响应于处理时戳请求而产生时戳。GPU 12和/或GPU驱动程序28可响应于接收时戳请求而传回时戳。所述时戳可包含时间值。对于每仓时戳请求,时间值可指示GPU 12处理所述时戳请求的时间。对于应用请求的时戳请求,时间值可指示由GPU 12执行命令流中的绘制调用所花费的相对时间量。
在一些实例中,命令38可以命令流(例如,命令队列、命令缓冲器等)的形式存储。所述命令流可指定图形命令的经排序序列。在一些实例中,所述经排序命令序列可包含多个绘制调用命令和多个时戳请求。在一些实例中,所述时戳请求中的至少一者可定位在图形命令的经排序序列中的绘制调用命令中的至少两者之间。在其它实例中,绘制调用命令中的至少一者可定位在图形命令的经排序序列中的时戳请求中的至少两者之间。
命令引擎32经配置以检索和执行存储在存储器10中的命令38。命令引擎32可管理GPU 12的渲染状态,控制处理单元34的操作使得处理单元34实施图形渲染管线,致使图形数据经由所述图形渲染管线渲染到渲染目标中,且响应于遇到命令流中的时戳请求(例如,每仓时戳请求)而传回时戳。
响应于接收到状态命令,命令引擎32可经配置以基于所述状态命令将GPU中的一或多个状态寄存器设定到特定值,和/或基于所述状态命令配置固定功能处理单元34中的一或多者。响应于接收绘制调用命令,命令引擎32可经配置以致使处理单元34渲染由存储器10中的顶点表示的几何形状(例如,由基元数据40表示的几何形状)。命令引擎32还可接收着色器程序绑定命令,且基于着色器程序绑定命令将特定着色器程序加载到可编程处理单元34中的一或多者中。响应于接收时戳请求(例如,每仓时戳请求),命令引擎32可产生时戳且将所述时戳提供到CPU 6(例如,GPU驱动程序28)。
处理单元34可包含一或多个处理单元,其中的每一者可为可编程处理单元或固定功能处理单元。可编程处理单元可包含(例如)经配置以执行从CPU 6下载到GPU 12上的一或多个着色器程序的可编程着色器单元。在一些实例中,着色器程序可为以高级着色语言(例如,OpenGL着色语言(GLSL)、高级着色语言(HLSL)、用于图形的C(Cg)着色语言等)编写的程序的经编译版本。
可编程着色器单元可在一些实例中包含经配置以并行操作的多个处理单元,例如单指令多数据(SIMD)管线。可编程着色器单元可具有存储着色器程序指令的程序存储器和执行状态寄存器,例如指示程序存储器中正执行的当前指令或待提取的下一指令的程序计数器寄存器。处理单元34中的可编程着色器单元可包含(例如)顶点着色器单元、像素着色器单元、几何形状着色器单元、壳着色器单元、域着色器单元、计算着色器单元和/或统一着色器单元。
固定功能处理单元可包含经硬连线以执行某些功能的硬件。虽然固定功能硬件可经由(例如)一或多个控制信号而配置以执行不同功能,但所述固定功能硬件通常并不包含能够接收用户编译程序的程序存储器。在一些实例中,处理单元34中的固定功能处理单元可包含(例如)执行光栅操作的处理单元,所述光栅操作例如深度测试、剪刀测试、α掺合等。
装仓缓冲器36可经配置以存储渲染目标的子区的光栅化数据。装仓缓冲器36可充当渲染遍次的执行期间实际渲染目标的特定子区的临时渲染目标。装仓缓冲器36可包含一或多个易失性或非易失性存储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)等。在一些实例中,装仓缓冲器36可为芯片上缓冲器。芯片上缓冲器可指代形成于、定位于和/或安置于与上面形成、定位和/或安置GPU的微芯片、集成电路和/或裸片相同的微芯片、集成电路和/或裸片上的缓冲器。
在一些实例中,处理单元34可经由第一通信接口存取装仓缓冲器36,且经由不同于第一通信接口的第二通信接口存取渲染目标(例如,存储在存储器10中的帧缓冲器)。在此些实例中,第一通信接口可在一些实例中具有比第二通信接口高的带宽。第二通信接口可在一些实例中对应于图1中的总线18和图1中的存储器控制器8与存储器10之间的连接。当装仓缓冲器36为芯片上仓缓冲器时,第一通信接口可为在GPU 12内部的通信接口。
如本文所使用,带宽可指代通信接口能够在两个组件(例如,存储器组件与GPU12)之间传递数据的速率。带宽的单位可在一些实例中给定为若干位/时间单位,例如千兆位/秒(Gb/s)。当具有多个位的总线宽度的总线用作通信接口的一部分时,所述带宽可在一些实例中等于总线的宽度乘以数据沿着单一位线传递的速率的乘积。举例来说,如果总线为16位宽,且总线的每一位线能够以2Gb/s的速率传递数据,那么总线的带宽可等于32Gb/s。如果多个总线形成两个组件之间的通信接口,那么通信接口的带宽可为多个总线中的每一者的带宽的函数,例如个别总线中的每一者的最小带宽。
当装仓缓冲器36实施在与GPU 12相同的芯片上时,GPU 12未必需要经由系统和存储器总线(例如,图1中的总线18和图1中的存储器控制器8与存储器10之间的连接)存取装仓缓冲器36,而是可经由在与GPU 12相同的芯片上实施的内部通信接口(例如,总线)存取装仓缓冲器36。因为此接口在芯片上,所以其可能够以比系统和存储器总线高的带宽操作。尽管上文所描述的技术为实现超出用于存取存储器10的通信接口的带宽的用于装仓缓冲器36的通信接口的一种方式,但其它技术是可能的且在本发明的范围内。
装仓缓冲器36的容量可在一些实例中受特定类型的计算装置(例如,移动装置)上可用的面积限制。此外,当装仓缓冲器36实施在与GPU 12相同的芯片上时,相同芯片上可用于实施装仓缓冲器36的区域的量可归因于所述芯片上实施的另一功能性而受到限制。在一些实例中,装仓缓冲器36可具有低于渲染目标的位密度的位密度,这进一步限制装仓缓冲器36的容量。由于这些和/或其它因素,装仓缓冲器36的容量可在一些情况下小于渲染目标的大小。因此,装仓缓冲器36的容量可在此些实例中小于存储与图形图像(例如,单一帧)相关联的多个目的地像素的全部的像素数据所需的最小容量。存储器组件的容量可指代能够存储于存储器组件中的最大数据量(例如,最大位数目)。渲染目标的大小可指代存储于分配到渲染目标的存储器范围中的数据量(例如,位数)。位密度可指代可存储在特定量区域中的位数。
如上文所论述,当执行基于瓦片的渲染时,GPU 12可在渲染遍次的单独迭代期间渲染渲染目标的每一子区。举例来说,作为针对渲染目标的特定子区(例如,图形图像的目的地像素的特定子集)的单一渲染遍次迭代的一部分,GPU 12可相对于渲染目标的特定子区渲染基元的全部或子集。装仓缓冲器36的容量可经配置以大于或等于渲染目标的子区的大小。因此,在单一渲染遍次迭代期间,与渲染目标的子区中的相应一者相关联的目的地像素数据可在装仓缓冲器36中可用,而不一定需要存取存储器10中的帧缓冲器。因此,在单一渲染遍次迭代期间,GPU 12可能够经由相对高带宽通信接口从装仓缓冲器36读取目的地像素数据,而不必经由相对低带宽通信接口从存储器10读取此些数据。
尽管并不执行基于瓦片的渲染的一些图形系统可能够通过使用基于硬件的芯片上高速缓冲存储器而高速缓存帧缓冲器的一部分,但此些高速缓冲存储器并不保证给定像素的目的地像素值在需要时将可用。这是因为多个目的地像素可映射到基于硬件的高速缓冲存储器中的相同地址。如果并未使用基于瓦片的渲染,那么基于硬件的高速缓冲存储器的当前状态可不必包含与渲染目标的当前处理的子区相关联的目的地像素值,而是包含与渲染目标的其它子区中的先前经处理基元相关联的目的地像素值。
与其中多个目的地像素映射到相同高速缓冲存储器位置的基于硬件的高速缓冲存储器相比,用于给定渲染遍次迭代的存储在装仓缓冲器36中的目的地像素可在一些实例中唯一地可寻址。换句话说,对于给定渲染遍次迭代,可在用于所述渲染遍次迭代的装仓缓冲器36中的可寻址存储槽与目的地像素之间界定一对一映射。因此,当执行基于瓦片的渲染时,用于给定装仓遍次的所有目的地像素值可在一些实例中经由相对低带宽通信接口从装仓缓冲器36获得。此外,不同于基于硬件的高速缓冲存储器系统,由于装仓缓冲器36中唯一可寻址的数据的缘故,不会发生高速缓冲存储器未中,借此缓解在高速缓冲存储器未中的事件中求助于带宽昂贵的帧缓冲器存取的需要。
目的地像素可指代针对特定像素位置的存储在渲染目标(例如,帧缓冲器或对应的装仓缓冲器)中的像素数据。相比而言,源像素可指代已由处理单元34中的光栅化处理单元产生但尚未存储到渲染目标和/或与渲染目标合并的像素数据。目的地像素可包含来自与不同基元相关联的多个源像素的复合像素数据。
为执行基于瓦片的渲染,软件应用24可在一些实例中将几何学上界定待渲染的一组一或多个3D图形基元的基元数据40放置到存储器10中,且经由图形API 26将一或多个绘制调用命令发布到GPU驱动程序28。绘制调用命令可致使由基元数据40界定的基元由GPU12光栅化和渲染到渲染目标(例如,存储在存储器10中的帧缓冲器)中。
在一些实例中,软件应用24可配置GPU 12以渲染特定类型的基元。举例来说,软件应用24可将指定在绘制调用期间待渲染的特定类型的基元的状态命令发布到GPU12。在额外实例中,在发布绘制调用命令之前,软件应用24可配置GPU 12以使用一或多个棋盘形布置技术来渲染基元。举例来说,软件应用24可致使实施棋盘形布置技术的一或多个着色器程序在绘制调用指令期间在GPU 12的一或多个着色器单元(例如,壳着色器单元和/或域着色器单元)上执行。
基元数据40可包含指示待渲染的一或多个基元的数据。在一些情况下,基元数据40可几何学上界定待渲染的基元。几何学上界定基元可指代由一组顶点(或控制点)和对应顶点属性界定基元。在一些实例中,基元数据40可呈多个顶点、顶点列表和/或顶点缓冲器的形式。在其它实例中,基元数据40可采取顶点缓冲器与索引缓冲器组合的形式。在此些实例中,顶点缓冲器可界定顶点,且索引缓冲器可指定哪些顶点用于界定所述基元中的每一者。
基元数据40中包含的顶点中的每一者可包含一或多个属性,例如位置坐标、正常坐标、纹理坐标等。所述顶点可概念上对应于几何基元(例如,点、线、三角形等)的顶点和/或对应于较高阶基元(例如,较高阶表面,例如贝塞尔表面)的控制点。在某些情况下,所述顶点中的每一者可分组到一或多个顶点的群组中,这些顶点群组中的每一者可对应于单一基元。
几何学上界定的基元的形状可在一些实例中由不必包含在基元数据40中的额外数据界定。额外数据可包含来自一组一或多个预定基元类型、一或多个数学函数和/或一或多个棋盘形布置技术的指定基元类型中的一或多者。
在一些实例中,指定基元类型可作为渲染状态变量存储在GPU 12中且可由软件应用24配置。指定基元类型可在一些情况下界定所得经渲染基元(例如,点、线、三角形等)的形状和/或基元数据40中包含的顶点的连接性(例如,三角形条带、三角形扇等)。在一些实例中,不同基元类型可对应于由处理单元34实施的图形管线能够处理的一组基元拓扑。在其它实例中,不同基元类型可对应于由图形API 26界定且可供软件应用24使用的所述组基元拓扑。
所述一或多个数学函数和/或所述一或多个棋盘形布置技术可在经配置以在GPU12的一或多个着色器单元(例如,壳着色器单元和/或域着色器单元)上执行的一或多个着色器程序中指定。数学函数可用于界定具有曲线和/或曲面表面的基元。所述一或多个棋盘形布置技术可用于由近似输入基元的形状和/或曲率的多个经棋盘形布置基元来界定基元。
响应于接收来自软件应用24的绘制调用命令,GPU驱动程序28可致使GPU 12基于待渲染的所述多个基元(例如,基元数据40)执行基于瓦片的渲染。举例来说,GPU驱动程序28可致使GPU 12执行装仓遍次和包含多个渲染遍次迭代的渲染遍次。在装仓遍次期间,GPU12可确定基元中的每一者将图像数据(例如,像素数据)贡献到渲染目标的多个子区中的哪一者,且产生指示基元中的每一者将图像数据(例如,像素数据)贡献到渲染目标的所述多个子区中的哪一者的装仓数据。一旦已产生装仓数据,GPU 12就可基于所述装仓数据和基元数据40执行包含所述多个渲染遍次迭代的渲染遍次以产生基元的复合光栅化版本。
在一些实例中,为了执行装仓遍次,GPU 12中的光栅化器可经配置以对待光栅化的基元执行低分辨率z缓冲和/或后面剔除。在此些实例中,可基于在z缓冲和/或后面剔除之后可见的基元产生装仓数据。
在一些情况下,经渲染基元可存储为多个像素。像素中的每一者可与渲染目标的一或多个空间位置相关联,且可包含指示相应像素的颜色的一或多个属性。在一些情况下,所述像素中的每一者可进一步包含指示像素的透明度的一或多个属性。在一些实例中,像素数据可包含每一像素的红、绿、蓝和α(RGBA)属性,其中“RGB”分量对应于色彩值且“A”分量对应于α值(即,透明度或掺合值)。
本发明中描述的技术可在图2中展示的组件中的任一者中实施,所述组件包含例如软件应用24、图形API 26、GPU驱动程序28、命令引擎32和处理单元34。举例来说,GPU驱动程序28、命令引擎32和/或处理单元34可经配置以根据本发明中描述的技术中的任一者产生一或多个时戳(例如,帧内时戳)。
在一些实例中,GPU驱动程序28、命令引擎32和/或处理单元34可经配置以基于由GPU 12在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。使用每仓时戳值来产生应用请求的时戳值可允许执行基于瓦片的渲染的图形处理系统支持帧内时戳请求。
操作期间,在CPU 6上执行的软件应用24(例如,图形应用)可产生经排序命令序列(例如,命令流)以渲染图形帧。在一些情况下,所述经排序命令序列可包含多个绘制调用命令和多个时戳请求。至少一些时戳请求可放置于所述经排序命令序列中的不同绘制调用命令之间。软件应用24可经由图形API 26将经排序命令序列提供到GPU驱动程序28。
为使用基于瓦片的渲染技术执行命令的序列,GPU驱动程序28可针对时戳请求中的每一者基于相应时戳请求产生多个每仓时戳请求。GPU驱动程序28可将每仓时戳请求中的每一者放置到多个命令流中的相应一者(例如,存储器10中的命令38)中。命令流中的每一者可由GPU 12在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行。命令流可被称为每仓命令流。所述渲染遍次迭代中的每一者可经配置以渲染渲染目标的多个子区中的相应一者。
GPU驱动程序28可致使GPU 12执行每仓命令流。在执行每仓命令流时,GPU 12(例如,命令引擎32和/或处理单元34)可响应于执行由GPU 12接收的每仓命令流中的每仓时戳请求产生每仓时戳值。在一些情况下,GPU 12可针对每仓命令流中的每仓时戳请求中的每一者产生相应每仓时戳值。每仓时戳值中的每一者可指示与相应每仓时戳值相关联的每仓时戳请求由GPU 12执行的时间。在一些实例中,每仓时戳值中的每一者可包含在由GPU 12产生的相应每仓时戳中。
在一些实例中,GPU 12可将每仓时戳值提供到GPU驱动程序28。举例来说,GPU12可将每仓时戳值放置到存储器10的时戳数据42中,所述存储器10可由GPU驱动程序28存取。响应于接收每仓时戳值,GPU驱动程序28可基于每仓时戳值产生一或多个应用请求的时戳值。GPU驱动程序28可使用本发明中描述的技术中的任一者来产生应用请求的时戳值。GPU驱动程序28可向软件应用24提供应用请求的时戳值。
在其它实例中,GPU 12可基于每仓时戳值产生一或多个应用请求的时戳值,且将应用请求的时戳值提供到GPU驱动程序28。GPU 12可使用本发明中描述的技术中的任一者来产生应用请求的时戳值。在一些实例中,GPU 12可将应用请求的时戳值放置到存储器10的时戳数据42中,所述存储器10可由GPU驱动程序28存取。GPU驱动程序28可向软件应用24提供应用请求的时戳值。
在额外实例中,GPU 12可基于每仓时戳值产生一或多个中间值,且将所述中间值提供到GPU驱动程序28。GPU驱动程序28可基于中间值产生每仓时戳值。GPU驱动程序28和GPU 12可使用本发明中描述的技术中的任一者来产生应用请求的时戳值。GPU驱动程序28可向软件应用24提供应用请求的时戳值。
在一些实例中,CPU 6和/或GPU 12可产生应用请求的时戳值使得每一应用请求的时戳值为至少两个不同每仓时戳值的函数。在此些实例中,所述至少两个不同每仓时戳值可在一些实例中在不同渲染遍次迭代期间产生。使用不同渲染遍次迭代期间产生的每仓时戳值可允许图形处理系统产生至少在一定程度上反映不同绘制调用命令在图形帧的渲染期间执行所花费的相对时间量的应用请求的时戳值。以此方式,本发明中描述的技术可允许基于瓦片的渲染系统支持帧内时戳,即使在基于瓦片的渲染系统以非连续交错方式执行绘制调用命令的情况下也如此。
在一些实例中,基于瓦片的渲染可涉及将渲染目标细分为多个子区(例如,仓或瓦片),以及执行包含针对渲染目标的所述子区中的每一者的单独渲染遍次迭代的渲染遍次。为减少需要在渲染遍次期间处理的基元的数目,装仓遍次可在一些实例中在渲染遍次之前执行。装仓遍次可用于产生指示待渲染的基元中的每一者将像素数据贡献到渲染目标的多个子区中的哪一者的装仓数据。可在渲染遍次迭代期间使用装仓数据以选择性地渲染贡献于在特定渲染遍次迭代期间活跃的渲染目标的子区的基元,借此减少需要在渲染遍次期间处理的基元的数目。
渲染可指代将对应于图形场景中的3D对象的3D图形基元转换为2D光栅化图像数据的过程。渲染通常相对于渲染目标(例如,帧缓冲器)发生,渲染目标通常随着场景中的图形基元中的每一者经渲染而更新。因此,不仅渲染目标存储图形场景的最终2D光栅化图像数据,而且渲染目标还可存储渲染图形场景时的中间数据。存储在渲染目标中的2D光栅化图像数据可包含多个像素,其中所述像素中的每一者包含颜色数据、透明度数据和/或深度数据。随着每一新基元渲染到渲染目标中,新基元的2D光栅化图像数据与已经存储在渲染目标中的用于先前经渲染基元的现有中间数据合并。
为合并渲染目标中的数据,通常需要在将新数据写入到渲染目标之前从渲染目标读取中间数据。因此,渲染可涉及相对于含有渲染目标的存储器执行大量读取和写入操作,借此导致高存储器带宽使用。由于高存储器带宽使用,需要针对渲染目标使用专门的高带宽芯片上存储器。然而,在例如移动应用等区域有限应用中,可能不存在足够可用区域来实施能够同时保存渲染目标中的像素中的每一者的所有数据的高带宽芯片上存储器。
基于瓦片的渲染可通过将渲染目标细分为多个子区(例如,瓦片或仓)且针对渲染目标的子区中的每一者执行包含单独渲染遍次迭代的渲染遍次而解决上文提及的问题。子区中的每一者可对应于渲染目标中的像素的子集(例如,像素的16×16瓦片)。渲染目标的子区或者可被称作瓦片或仓。在渲染遍次迭代中的每一者期间,可渲染与对应子区相关联的所有图像数据,其可包含渲染将像素数据贡献到子区的基元中的每一者。足够大而能够存储渲染目标的单一子区的数据的高带宽芯片上存储器可用作渲染遍次迭代中的每一者的局部渲染目标,且在渲染遍次迭代已完成之后,所述渲染遍次迭代的局部渲染目标的内容可传递到存储在低带宽芯片外系统存储器中的总体渲染目标。通过以每瓦片为基础执行单独渲染遍次迭代,基于瓦片的渲染方案可能够允许使用高带宽芯片上存储器合并即使在并不允许大芯片上存储器的区域有限应用中的光栅化图像数据。
一种用于执行基于瓦片的渲染的方法是针对渲染目标的子区中的每一者执行渲染遍次迭代,且在渲染遍次迭代中的每一者期间,渲染场景中的所有基元,同时使用不同剪刀设定将输出限于当前正渲染的特定子区。然而,此方法可能低效,因为在渲染遍次迭代中的每一者中渲染基元中的每一者而不管所述基元是否实际上在经渲染子区中可见。
为了改进基于瓦片的渲染的效率,可在一些实例中在执行渲染遍次之前执行装仓遍次。装仓遍次可用于确定基元的装仓数据。对于待渲染的基元中的每一者,装仓数据可指示基元中的每一者相对于渲染目标的子区中的哪一者贡献像素数据。
图3为说明细分为多个子区的实例渲染目标50的概念图。图3还说明经细分渲染目标50上显示的多个基元。在一些情况下,渲染目标50可对应于帧缓冲器。如图3中所展示,渲染目标50划分成多个不重叠子区(或者被称作仓或瓦片),其编号为1-20。子区中的每一者可对应于渲染目标50中的像素的子集(例如,像素的16×16瓦片等)。对于图3中展示的实例基元,装仓数据可指示基元A将像素数据贡献到瓦片1、2、6、7、8和12,基元B将像素数据贡献到瓦片7、8、12和13等。
在一些实例中,可基于待渲染到渲染目标的基元中的每一者的光栅化版本的复合产生装仓数据。在一些情况下,保守z测试和/或其它剔除技术可用于产生基元中的每一者的光栅化版本。保守z测试和/或其它剔除技术可移除被遮挡基元(即,位于其它基元后方的基元)使其不包含在据称将贡献于特定瓦片的基元的列表中。
在针对特定子区(例如,瓦片或仓)的渲染遍次迭代期间,装仓数据可用于选择实际上将图像数据(例如,像素数据)贡献到子区的待渲染的基元,且绕过渲染并不将图像数据贡献到子区的基元。以此方式,给定渲染遍次迭代期间需要处理的基元的数目可在一些情况下减小。
在一些实例中,GPU 12可基于从装仓遍次产生的装仓数据针对渲染目标的子区中的每一者执行渲染遍次迭代。举例来说,对于多个渲染遍次迭代中的每一者,GPU 12可基于装仓数据确定是否在相应渲染遍次迭代期间渲染与一或多个绘制调用相关联的多个基元。如果装仓数据指示基元将像素数据贡献到与相应渲染遍次迭代相关联的子区,那么GPU 12可在所述渲染遍次迭代期间将基元渲染到与相应渲染遍次迭代相关联的子区中。另一方面,如果装仓指示基元并不将像素数据贡献到与相应渲染遍次迭代相关联的子区,那么GPU12可不将基元渲染到与相应渲染遍次迭代相关联的子区中。
尽管图3中展示的子区为大体上相同大小和形状,但在其它实例中,所述子区可具有不同大小和/或不同形状。此外,子区的大小和形状不必在制造GPU时或在渲染时大体上固定,而是在一些实例中可在GPU 12的操作期间动态地调节。
图4为说明根据本发明由图形应用发布的实例命令流52的概念图。在一些实例中,命令流52可由图2中展示的软件应用24发布。在其它实例中,命令流52可由图2中展示的GPU驱动程序28接收和/或处理。
命令流52包含经排序命令序列(即,TSR1、DRAW1、TSR2、DRAW2、TSR3、DRAW3、TSR4)。在图4中,TSR表示“时戳请求”,且DRAW表示“绘制调用命令”。由此,图4中说明的命令的序列包含第一时戳请求(TSR1),继之以第一绘制调用命令(DRAW1),继之以第二时戳请求(TSR2),继之以第二绘制调用命令(DRAW2),继之以第三时戳请求(TSR3),继之以第三绘制调用命令(DRAW3),继之以第四时戳请求(TSR4),继之以第四绘制调用命令(DRAW4)。
命令流52中的命令中的每一者可与单一图形帧的渲染相关联。绘制调用命令中的每一者可将待渲染的一或多个基元指定为相同图形帧的一部分。在一些实例中,不同绘制调用命令可与用于渲染图形帧中的基元的不同基元类型和/或用于渲染图形帧中的基元的不同渲染状态相关联。
如图4中所展示,时戳请求放置在绘制调用命令中的每一者之间。如图4中进一步展示,绘制调用命令放置在时戳请求中的每一者之间。TSR2和TSR3两者可对应于帧内时戳请求,因为此些时戳请求各自定位在两个不同绘制调用命令之间。
图5为说明根据本发明用于执行渲染遍次的实例执行时间线54的概念图。执行时间线54在时间上从左到右增加。
实例执行时间线54描绘在渲染目标细分为四个仓或子区(即,A、B、C和D)的情况下作为渲染遍次的一部分执行的渲染遍次迭代的序列。相对于渲染目标的特定仓执行渲染遍次迭代中的每一者。举例来说,相对于渲染目标的第一仓(即,仓“A”)执行“渲染遍次迭代A”,相对于渲染目标的第二仓(即,仓“B”)执行“渲染遍次迭代B”,等等。
在一些实例中,图1中展示的计算系统2可执行执行时间线54中所描绘的渲染遍次迭代。在其它实例中,GPU 12可执行执行时间线54中所描绘的渲染遍次迭代,且CPU 6可致使GPU 12执行执行时间线54中所描绘的渲染遍次迭代。
如图5中所展示,计算系统2(例如,CPU 6和/或GPU 12)可针对渲染目标中包含的仓中的每一者执行渲染遍次迭代。举例来说,计算系统2(例如,CPU 6和/或GPU 12)可执行相对于第一仓(渲染遍次迭代A)的第一渲染遍次迭代,继之以相对于第二仓(渲染遍次迭代B)的第二渲染遍次迭代,继之以相对于第三仓(渲染遍次迭代C)的第三渲染遍次迭代,继之以相对于第四仓(渲染遍次迭代D)的第四渲染遍次迭代。
图6为说明根据本发明用于执行多个渲染遍次迭代的实例命令流56、58、60、62的概念图。在一些实例中,命令流56、58、60、62可由图2中展示的GPU驱动程序28发布和/或产生。在其它实例中,命令流56、58、60、62可由图2中展示的GPU 12和/或命令引擎32接收和/或处理。
在图6中,TSR表示“时戳请求”,且DRAW表示“每仓绘制调用”。TSRGPU时戳请求对应于由GPU驱动程序28产生的时戳请求,且在相应渲染遍次迭代开始时放置到相应命令流56、58、60、62中。在一些实例中,图6中的TSR和TSRGPU或者可被称作每仓时戳请求以将此些时戳请求与图4的命令流52中包含的时戳请求区分。响应于每仓时戳请求产生的时戳和时戳值可分别称为每仓时戳和每仓时戳值。
类似地,图4的命令流52中包含的时戳请求可被称为应用产生的时戳请求以将此些时戳请求与由GPU驱动程序28产生的每仓时戳请求区分。响应于应用产生的时戳请求而产生的时戳和时戳值可分别称为应用请求的时戳和应用请求的时戳值。
在一些实例中,每仓时戳请求可由GPU驱动程序28响应于从命令流52中的软件应用24接收应用产生的时戳请求而产生。举例来说,GPU驱动程序28可响应于遇到命令流52中的应用产生的时戳请求TSR1而产生每仓时戳请求TSR1A、TSR1B、TSR1C和TSR1D。作为另一实例,GPU驱动程序28可响应于遇到命令流52中的应用产生的时戳请求TSR3而产生每仓时戳请求TSR3A、TSR3B、TSR3C和TSR3D。
在一些实例中,TSRGPU时戳请求可不基于或响应于遇到命令流52中的应用产生的时戳请求而产生。实际上,在此些实例中,GPU驱动程序28可针对待在渲染遍次期间执行的每一渲染遍次实例自动产生TSRGPU时戳请求。
每仓时戳请求中的每一者之后的数字指示与每仓时戳请求相关联的应用产生的时戳请求。如果每仓时戳请求是由GPU驱动程序28基于或响应于遇到应用产生的命令流(例如,命令流52)中的应用产生的时戳请求而产生,那么每仓时戳请求可与应用产生的时戳请求相关联。举例来说,每仓时戳请求TSR1A、TSR1B、TSR1C和TSR1D与命令流52中的应用产生的时戳请求TSR1相关联。
每仓时戳请求中的每一者之后的字母指示与相应每仓时戳请求相关联的执行时间线54中的渲染遍次迭代。如果在渲染遍次迭代期间发布和/或服务时戳请求,那么时戳请求可与渲染遍次迭代相关联。举例来说,TSR1A指示与应用产生的时戳请求TSR1和执行时间线54中的第一渲染遍次迭代(即,渲染遍次迭代A)相关联的每仓时戳请求。
每仓绘制调用中的每一者之后的数字指示与相应每仓绘制调用相关联的命令流52中的绘制调用命令。每仓绘制调用中的每一者之后的字母指示与相应每仓绘制调用相关联的执行时间线54中的渲染遍次迭代。
举例来说,“DRAW1A”指示与命令流52中的第一绘制调用命令(即,DRAW1)和执行时间线54中的第一渲染遍次迭代(即,渲染遍次迭代A)相关联的每仓绘制调用。作为另一实例,“DRAW2C”指示与命令流52中的第二绘制调用命令(即,DRAW2)和执行时间线54中的第三渲染遍次迭代(即,渲染遍次迭代C)相关联的每仓绘制调用。
如果基于绘制调用命令产生每仓绘制调用以便执行绘制调用命令,那么每仓绘制调用可与绘制调用命令相关联。如果在渲染遍次迭代期间执行每仓绘制调用,那么每仓绘制调用可与渲染遍次迭代相关联。
类似于图4,图6中的命令流56、58、60、62中的每一者包含经排序命令序列。举例来说,命令流56包含第一每仓时戳请求(TSRGPUA),继之以第二每仓时戳请求(TSR1A),继之以第一每仓绘制调用(DRAW1A),继之以第三每仓时戳请求(TSR2A),继之以第二每仓绘制调用(DRAW2A),继之以第四每仓时戳请求(TSR3A),继之以第三每仓绘制调用(DRAW3A),继之以第五每仓时戳请求(TSR4A)。
在渲染遍次迭代中的相应一者期间执行命令流56、58、60、62中的每一者。举例来说,命令流56在“渲染遍次迭代A”期间执行,命令流58在“渲染遍次迭代B”期间执行,命令流60在“渲染遍次迭代C”期间执行,且命令流62在“渲染遍次迭代D”期间执行。
渲染遍次迭代中的每一者经配置以渲染多个仓中的相应一者(例如,渲染目标的子区)。举例来说,如图6中所展示,“渲染遍次迭代A”经配置以渲染渲染目标的“仓A”,“渲染遍次迭代B”经配置以渲染渲染目标的“仓B”,“渲染遍次迭代C”经配置以渲染渲染目标的“仓C”,且“渲染遍次迭代D”经配置以渲染渲染目标的“仓D”。
响应于接收图4中展示的命令流52,GPU驱动程序28可产生命令流52中包含的绘制调用命令中的每一者的多个每仓绘制调用和命令流52中包含的时戳请求中的每一者的多个每仓时戳请求。举例来说,响应于遇到命令流52中的DRAW1,GPU驱动程序28可产生DRAW1A、DRAW1B、DRAW1C和DRAW1D。作为另一实例,响应于遇到命令流52中的TSR2,GPU驱动程序28可产生TSR2A、TSR2B、TSR2C和TSR2D。
GPU驱动程序28还可基于由GPU驱动程序28产生的每仓绘制调用和每仓时戳请求产生多个渲染遍次迭代特定命令流56、58、60、62。举例来说,GPU驱动程序28可依据仓将每仓绘制调用和每仓时戳请求分组在一起,且将每一群组的每仓绘制调用和每仓时戳请求放置到命令流56、58、60、62中的单独一者中。
在一些实例中,GPU驱动程序28还可在命令流56、58、60、62中的每一者的开始处放置不与图4的命令流52中的应用产生的时戳请求相关联的时戳请求。这些时戳请求可在一些实例中在产生应用产生的时戳请求的时戳值时充当参考时戳请求。
GPU驱动程序28可致使GPU 12基于命令流56、58、60、62执行多个渲染遍次迭代。举例来说,GPU驱动程序28可致使GPU 12在单独渲染遍次迭代期间执行命令流56、58、60、62中的每一者。
在一些实例中,在执行命令流56、58、60、62时,GPU 12可响应于遇到命令流56、58、60、62中的每仓时戳请求中的每一者将每仓时戳发布到CPU 6(例如,GPU驱动程序28)。由GPU 12发布的每仓时戳可包含对应于当执行命令流56、58、60、62中的一者时GPU 12遇到每仓时戳请求的时间的时戳值。在此些实例中,响应于接收来自GPU12的每仓时戳和/或每仓时戳值,GPU驱动程序28可基于从GPU 12接收的每仓时戳和/或每仓时戳值产生一或多个应用请求的时戳,且将应用请求的时戳提供到软件应用24。
在其它实例中,在执行命令流56、58、60、62时,GPU 12可在内部跟踪对应于每仓时戳请求的每仓时戳值。在此些实例中,GPU 12可在一些实例中基于由GPU 12在内部跟踪的每仓时戳值产生一或多个应用请求的时戳和/或一或多个应用请求的时戳值,且将应用请求的时戳和/或时戳值提供到GPU驱动程序28。响应于接收应用请求的时戳和/或时戳值,GPU驱动程序28可产生应用产生的时戳和/或将其提供到软件应用24。
在其中GPU 12在内部跟踪每仓时戳值的额外实例中,GPU 12可在一些实例中产生一或多个中间时间值,且将所述一或多个中间时间值提供到GPU驱动程序28。响应于接收中间时间值,GPU驱动程序28可产生应用产生的时戳,且将应用产生的时戳提供到软件应用24。
在一些实例中,对于图4中展示的命令流52,可基于表1中所列的等式产生针对命令流52中包含的时戳请求中的每一者的由GPU驱动程序28传回的时戳中包含的时戳值:
表1:用于产生时戳值的实例等式
在表1中,TSVx为响应于时戳请求TSRx产生的时戳的时戳值,且TSVGPUx为响应于时戳请求TSRGPUx产生的时戳值。举例来说,TSV1为响应于时戳请求TSR1产生的时戳的时戳值,TSV3B为响应于时戳请求TSR3B产生的时戳的时戳值,等等。作为另一实例,TSVGPUA为响应于时戳请求TSRGPUA产生的时戳的时戳值,且TSVGPUB为响应于时戳请求TSRGPUB产生的时戳的时戳值,等等。
在其它实例中,可基于以下一般等式产生针对命令流52中包含的时戳请求中的每一者的由GPU驱动程序28传回的时戳中包含的时戳值:
其中TSVx为响应于时戳请求TSRx产生的时戳的时戳值,TSVxA为响应于时戳请求TSRxA产生的时戳的时戳值,等等。在等式(5)中,x可为任何整数。
在一些实例中,TSRxA、TSRxB、TSRxC和TSRxD可为响应于接收命令流52中的TSRx而产生的时戳请求,且TSRGPUA、TSRGPUB、TSRGPUC和TSRGPUD可为在相应渲染遍次迭代开始时由GPU驱动程序28产生的时戳请求。
在额外实例中,CPU 6和/或GPU 12可基于以下等式产生一或多个时戳值:
其中Value为响应于从图形应用接收的时戳请求产生的时戳的时戳值,TSV(y)为在第y渲染遍次迭代期间产生的每仓时戳值,TSVGPU(y)为针对第y渲染遍次迭代在渲染任何基元之前产生的参考时戳值,且N为用于渲染图形帧的渲染遍次迭代的数目。在一些实例中,等式(6)可为表1中的等式的一般化形式。
在一些情况下,TSV(y)每仓时戳值中的每一者可对应于多个每仓时戳请求中的相应一者,其中所述多个每仓时戳请求中的每一者对应于从对应于Value的图形应用接收的时戳请求且响应于所述时戳请求而产生。
在其它实例中,CPU 6和/或GPU 12可基于以下等式产生从图形应用接收的命令流中包含的多个时戳请求的时戳值:
其中Value(x)为响应于从图形应用接收的命令流中的第x时戳请求而产生的时戳的时戳值,TSV(x,y)为在第y渲染遍次迭代期间产生且对应于命令流中的第x时戳请求并响应于所述第x时戳请求而产生的每仓时戳值,TSVGPU(y)为针对所述第y渲染遍次迭代在渲染任何基元之前产生的参考时戳值,且N为用于渲染图形帧的渲染遍次迭代的数目。在一些情况下,TSV(x,y)每仓时戳值中的每一者可对应于多个每仓时戳请求中的相应一者,其中所述多个每仓时戳请求中的每一者对应于从图形应用接收的命令流中的第x时戳请求且响应于所述第x时戳请求而产生。在一些实例中,等式(7)可为表1中的等式的一般化形式。
在一些实例中,对于从图形应用接收的命令流中包含的时戳请求中的每一者,GPU驱动程序28可将每仓时戳请求放置到每仓命令流中的每一者中。在此些实例中,每仓命令流中的每一者中每仓时戳请求的次序可在一些实例中与从图形应用接收的命令流中的对应时戳请求的次序相同。
在其它实例中,从图形应用接收的命令流可包含绘制调用命令和时戳请求。在一些情况下,时戳请求中的至少一者可定位在命令流中的绘制调用命令中的至少两者之间。在此些实例中,对于从图形应用接收的命令流中的时戳请求中的每一者,GPU驱动程序28可将每仓时戳请求放置到每仓命令流中的每一者中。此外,对于从图形应用接收的命令流中的绘制调用命令中的每一者,GPU驱动程序28可将每仓绘制调用放置到每仓命令流中的每一者中。在此些实例中,每仓命令流中的每一者中的每仓时戳请求和每仓绘制调用的次序可在一些实例中与从图形应用接收的命令流中的对应时戳请求和绘制调用命令的次序相同。
大体来说,GPU驱动程序28和GPU 12中的一或两者可基于每仓时戳值产生应用请求的时戳和/或应用请求的时戳值。在一些实例中,GPU驱动程序28可接收来自GPU12的每仓时戳值,且基于所述每仓时戳值产生应用请求的时戳和/或时戳值。在此些实例中,GPU驱动程序28可在一些实例中基于等式(1)-(7)中的一或多者产生应用请求的时戳和/或时戳值。
在其它实例中,GPU 12可产生每仓时戳值,基于所述每仓时戳值产生应用请求的时戳和/或时戳值,且将应用请求的时戳和/或时戳值提供到GPU驱动程序28。在此些实例中,GPU 12可在一些实例中基于等式(1)-(7)中的一或多者产生应用请求的时戳和/或时戳值。
在额外实例中,GPU 12可产生每仓时戳值,基于每仓时戳值产生一或多个中间值,且将所述中间值提供到GPU驱动程序28。在此些实例中,GPU驱动程序28可接收来自GPU 12的中间值,且基于所述中间值产生应用请求的时戳和/或时戳值。
在一些情况下,所述中间值可对应于等式(1)-(7)中的一或多个项。在额外情况中,所述中间值可对应于等式(1)-(7)中指定的输入变量的任何组合。
如图4-6中所展示,CPU 6和/或GPU 12可基于由GPU 12在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值(例如,对应于TSR2A、TSR2B、TSR2C和TSR2D的每仓时戳值)产生指示时间点的时戳值(例如,对应于TSR2的时戳值)。时戳值(例如,对应于TSR2的时戳值)可为所述多个每仓时戳值的至少两个每仓时戳值(例如,对应于TSR2A、TSR2B、TSR2C和TSR2D的每仓时戳值)的函数。
在一些实例中,所述多个每仓时戳值中的每一者(例如,对应于TSR2A、TSR2B、TSR2C和TSR2D的每仓时戳值)可由GPU 12在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间产生。举例来说,TSR2A的每仓时戳值由GPU 12在渲染遍次迭代A期间产生,TSR2B的每仓时戳值由GPU 12在渲染遍次迭代B期间产生,TSR2C的每仓时戳值由GPU12在渲染遍次迭代C期间产生,且TSR2D的每仓时戳值由GPU 12在渲染遍次迭代D期间产生。
渲染遍次迭代中的每一者可在一些实例中经配置以渲染渲染目标的多个子区中的相应一者。举例来说,渲染遍次迭代A经配置以渲染渲染目标的仓A,渲染遍次迭代B经配置以渲染渲染目标的仓B,渲染遍次迭代C经配置以渲染渲染目标的仓C,且渲染遍次迭代D经配置以渲染渲染目标的仓D。
在一些实例中,用于产生时戳值(例如,对应于TSR2的时戳值)的至少两个每仓时戳值可包含第一每仓时戳值(例如,对应于TSR2A的时戳值)和第二每仓时戳值(例如,对应于TSR2B的时戳值)。第一每仓时戳值(例如,对应于TSR2A的时戳值)可由GPU 12在所述多个渲染遍次迭代的第一渲染遍次迭代(例如,渲染遍次迭代A)期间产生。第二每仓时戳值(例如,对应于TSR2B的时戳值)可由GPU 12在所述多个渲染遍次迭代的第二渲染遍次迭代(例如,渲染遍次迭代B)期间产生。第二渲染遍次迭代(例如,渲染遍次迭代B)可不同于第一渲染遍次迭代(例如,渲染遍次迭代A)。
在其它实例中,用于产生时戳值(例如,对应于TSR2的时戳值)的所述至少两个每仓时戳值可进一步包含至少两个参考时戳值(例如,对应于TSRGPUA、TSRGPUB、TSRGPUC、TSRGPUD的时戳值)。可在渲染遍次迭代中的相应一者期间且在针对所述渲染遍次迭代中的所述相应一者渲染任何基元之前产生所述至少两个参考时戳值中的每一者。举例来说,在渲染遍次迭代A期间且在针对渲染遍次迭代A渲染任何基元之前(例如,在执行DRAW1A、DRAW2A和DRAW3A之前)产生对应于TSRGPUA的时戳值。
在额外实例中,CPU 6和/或GPU 12可响应于定位在针对图形帧待执行的经排序命令序列(命令流52)中的至少两个绘制调用命令(例如,DRAW1、DRAW2)之间的时戳请求(例如,TSR2)产生时戳值(例如,对应于TSR2的时戳值)。在一些实例中,可基于经排序命令序列中的绘制调用命令(例如,DRAW1、DRAW2)在图形帧的渲染期间执行所花费的相对时间量产生TSR2的时戳值。
在一些实例中,GPU 12可在执行图形帧的基于瓦片的渲染时执行多个渲染遍次迭代。渲染遍次迭代中的每一者可经配置以执行至少两个每仓绘制调用。举例来说,渲染遍次迭代A可经配置以执行DRAW1A和DRAW2A。所述至少两个每仓绘制调用中的每一者可与所述至少两个绘制调用命令中的相应一者相关联。举例来说,DRAW1A可与命令流52中的DRAW1相关联,且DRAW2A可与命令流52中的DRAW2相关联。
在此些实例中,用于产生时戳值(例如,对应于TSR2的时戳值)的所述至少两个每仓时戳值可包含第一每仓时戳值(例如,对应于TSR2A的时戳值)和第二每仓时戳值(例如,对应于TSR2B的时戳值)。第一每仓时戳值(例如,对应于TSR2A的时戳值)可指示在所述多个渲染遍次迭代的第一渲染遍次迭代(例如,渲染遍次迭代A)期间在所述至少两个每仓绘制调用(例如,DRAW1A、DRAW2A)的执行之间发生的时间点。第二每仓时戳值(例如,对应于TSR2B的时戳值)可指示在所述多个渲染遍次迭代的第二渲染遍次迭代(例如,渲染遍次迭代B)期间在所述至少两个每仓绘制调用(例如,DRAW1B、DRAW2B)的执行之间发生的时间点。第二渲染遍次迭代(例如,渲染遍次迭代B)可不同于第一渲染遍次迭代(例如,渲染遍次迭代A)。
在其它实例中,可响应于多个每仓时戳请求中的相应一者(例如,分别TSR2A、TSR2B、TSR2C和TSR2D)产生所述多个每仓时戳值中的每一者(例如,对应于TSR2A、TSR2B、TSR2C和TSR2D的每仓时戳值)。在此些实例中,每仓时戳请求中的每一者(例如,TSR2A、TSR2B、TSR2C和TSR2D)可放置到多个命令流中的相应一者(例如,分别命令流56、58、60和62)中。可由GPU 12在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者(例如,分别渲染遍次迭代A、B、C和D)期间执行所述命令流中的每一者(例如,分别命令流56、58、60和62)。渲染遍次迭代中的每一者(例如,渲染遍次迭代A、B、C和D)可经配置以渲染渲染目标的多个子区中的相应一者(例如,分别仓A、B、C和D)。
在一些实例中,CPU 6和/或GPU 12可基于所述多个每仓时戳值(例如,对应于TSR1A-TSR1D、TSR2A-TSR2D、TSR3A-TSR3D、TSR4A-TSR4D的每仓时戳值)产生多个时戳值(例如,对应于TSR1、TSR2、TSR3、TSR4的时戳值)。时戳值中的每一者(例如,对应于TSR1、TSR2、TSR3、TSR4的时戳值)可对应于针对图形帧待执行的经排序命令序列(例如,命令流52)中包含的多个时戳请求中的相应一者(例如,分别TSR1、TSR2、TSR3、TSR4)。所述时戳请求中的每一者可由图形应用请求。
在此些实例中,时戳请求中的至少两者(例如,TSR2和TSR3)可在一些实例中定位在针对图形帧待执行的经排序命令序列(例如,命令流52)中的相应对连续绘制调用命令(例如,分别DRAW1/DRAW2、DRAW2/DRAW3)之间。在此些实例中,CPU 6和/或GPU12可基于每仓时戳值产生所述多个时戳值(例如,对应于TSR1、TSR2、TSR3、TSR4的时戳值)使得针对经排序命令序列中的时戳请求传回的时戳值的值从经排序命令序列(例如,命令流52)的开始向经排序命令序列(例如,命令流52)的末尾单调增加。举例来说,TSR1可小于或等于TSR2,TSR2可小于或等于TSR3,TSR3可小于或等于TSR4。
在此些实例中,所述多个时戳值(例如,对应于TSR1、TSR2、TSR3、TSR4的时戳值)可在一些实例中指示经排序命令序列(例如,命令流52)中的绘制调用命令(例如,DRAW1、DRAW2、DRAW3)在图形帧的渲染期间执行所花费的相对时间量。举例来说,如果DRAW1在图形帧的渲染期间执行所花费的时间量大于DRAW2在图形帧的渲染期间执行所花费的时间量,那么TSR2与TSR1之间的差可在此些实例中大于TSR3与TSR2之间的差。
在一些情况下,DRAW1在图形帧的渲染期间执行所花费的时间量可对应于与DRAW1相关联的每仓绘制调用命令中的每一者在图形帧的渲染期间执行所花费的总计时间量,且DRAW2在图形帧的渲染期间执行所花费的时间量可对应于与DRAW2相关联的每仓绘制调用命令中的每一者在图形帧的渲染期间执行所花费的总计时间量。举例来说,DRAW1在图形帧的渲染期间执行所花费的时间量可等于DRAW1A、DRAW1B、DRAW1C和DRAW1D执行所花费的时间量的总和,且DRAW2在图形帧的渲染期间执行所花费的时间量可等于DRAW2A、DRAW2B、DRAW2C和DRAW2D执行所花费的时间量的总和。
在一些实例中,GPU驱动程序28可从图形应用(例如,软件应用24)接收时戳请求(例如,TSR2)。GPU驱动程序28可基于所述时戳请求(例如,TSR2)产生多个每仓时戳请求(例如,TSR2A、TSR2B、TSR2C、TSR2D)。GPU驱动程序28可将每仓时戳请求中的每一者(例如,TSR2A、TSR2B、TSR2C、TSR2D)放置到多个命令流中的相应一者(例如,分别命令流56、58、60和62)中。命令流中的每一者(例如,命令流56、58、60、62)可由GPU 12在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者(例如,分别渲染遍次迭代A、B、C和D)期间执行。渲染遍次迭代中的每一者(例如,渲染遍次迭代A、B、C、D)可经配置以渲染渲染目标的多个子区中的相应一者(例如,分别仓A、B、C和D)。
GPU驱动程序28可致使GPU 12执行命令流(例如,命令流56、58、60、62)。GPU驱动程序28和/或GPU 12可基于由GPU 12响应于放置到命令流中的每仓时戳请求(例如,TSR2A、TSR2B、TSR2C、TSR2D)产生的每仓时戳值而产生时戳值(例如,TSR2)。
图4-6描绘包含用于渲染图形帧的三个绘制调用命令的实例命令流和将渲染目标细分为四个不同子区或仓的实例基于瓦片的渲染系统。然而,应理解,本发明中描述的技术可利用包含针对待渲染的每一图形帧的相同或不同数目的绘制调用命令的命令流且利用将图形帧细分为相同或不同数目的子区或仓的基于瓦片的渲染系统来实施。
在一些实例中,可在图5中说明的渲染遍次迭代之前执行装仓遍次。在此些实例中,装仓遍次可以与渲染遍次迭代(例如,“渲染遍次迭代A”)类似的方式处理。在此些实例中,GPU驱动程序28和/或GPU 12可基于装仓遍次期间请求的一或多个每装仓遍次时戳且基于渲染遍次的一或多个迭代期间请求的一或多个每仓时戳请求而产生所述一或多个时戳。
在一些实例中,GPU驱动程序28和/或GPU 12可响应于针对待渲染的图形帧的多个时戳请求产生多个时戳值使得待渲染的图形帧的所述时戳值中的至少一者不同于待渲染的图形帧的所述时戳值中的至少一个其它者。在其它实例中,GPU驱动程序28和/或GPU 12可响应于针对待渲染的图形帧的多个时戳请求产生多个时戳值使得所述时戳值从待渲染的图形帧的命令流的开始向待渲染的图形帧的命令流的末尾单调增加。
图7为说明根据本发明用于支持执行基于瓦片的渲染的图形处理系统中的帧内时戳的实例技术的流程图。CPU 6和/或GPU 12接收时戳请求(70)。在一些实例中,可从在CPU6上执行的图形应用接收时戳请求。CPU 6和/或GPU 12基于由GPU 12在执行图形帧的基于瓦片的渲染时产生的多个每仓时戳值产生指示时间点的时戳值(72)。所述时戳值可为所述多个每仓时戳值的至少两个每仓时戳值的函数。
CPU 6和/或GPU 12可使用本发明中描述的技术中的任一者来产生时戳值。在一些实例中,CPU 6和/或GPU 12可基于等式(1)-(7)中的一或多者产生时戳值。使用每仓时戳值产生时戳值可允许执行基于瓦片的渲染的图形处理系统支持帧内时戳请求。
图8为说明根据本发明用于支持执行基于瓦片的渲染的图形处理系统中的帧内时戳的另一实例技术的流程图。在一些实例中,图8中说明的技术中的一些或全部可用于执行图7中说明的技术中的一些或全部。
CPU 6接收时戳请求(74)。在一些实例中,可从在CPU 6上执行的图形应用接收时戳请求。CPU 6基于所述时戳请求产生多个每仓时戳请求(76)。CPU 6将每仓时戳请求中的每一者放置到多个命令流中的相应一者中(78)。命令流中的每一者可由GPU 12在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行。所述渲染遍次迭代中的每一者可经配置以渲染渲染目标的多个子区中的相应一者。
CPU 6致使GPU 12执行命令流(80)。CPU 6和/或GPU 12基于由GPU 12响应于放置到命令流中的每仓时戳请求产生的每仓时戳值产生时戳值(82)。CPU 6和/或GPU 12可使用本发明中描述的技术中的任一者来产生时戳值。在一些实例中,CPU 6和/或GPU12可基于等式(1)-(7)中的一或多者产生时戳值。
使用不同渲染遍次迭代期间产生的每仓时戳值可允许图形处理系统产生至少在一定程度上反映不同绘制调用命令在图形帧的渲染期间执行所花费的相对时间量的应用请求的时戳值。以此方式,本发明中描述的技术可允许基于瓦片的渲染系统支持帧内时戳,即使在基于瓦片的渲染系统以非连续交错方式执行绘制调用命令的情况下也如此。
本身并不引起性能代偿的准确帧内时戳可难以在基于瓦片的渲染架构上获得。此在可在装仓与直接渲染之间动态地切换的驱动程序上更加困难。在一些实例中,本发明的技术可实施合理地准确的代表性帧内时戳,其可对于装仓和直接渲染两者起作用。
在一些实例中,每一时戳请求可改变为每仓时戳。在已处理针对给定渲染目标的渲染之后,可产生从仓开始直至每一仓的时戳的平均时间并将其用作时戳。此可提供等效于直接渲染组件产生的时戳的时戳。本发明的技术可允许基于瓦片的渲染GPU支持帧内时戳。
本发明中所描述的技术可至少部分实施于硬件、软件、固件或其任何组合中。举例来说,所描述技术的各种方面可实施于一或多个处理器内,包含一或多个微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA),或任何其它等效集成或离散逻辑电路,以及此等组件的任何组合。术语“处理器”或“处理电路”可大体上指前述逻辑电路中的任一者(单独或结合其它逻辑电路)或例如执行处理的离散硬件等任何其它等效电路。
此硬件、软件和固件可实施于相同装置内或单独装置内以支持本发明中所描述的各种操作和功能。另外,所描述单元、模块或组件中的任一者可一起或单独作为离散但可互操作逻辑装置而实施。将不同特征描述为模块或单元意图强调不同功能方面且未必暗示此等模块或单元必须由单独硬件或软件组件实现。实际上,与一或多个模块或单元相关联的功能性可由单独硬件、固件和/或软件组件执行,或集成到共同或单独硬件或软件组件内。
本发明中所描述的技术也可存储、体现或编码于计算机可读媒体(例如,存储指令的计算机可读存储媒体)中。嵌入或编码于计算机可读媒体中的指令可致使一或多个处理器执行本文中所描述的技术(例如,当由一或多个处理器执行指令时)。在一些实例中,计算机可读媒体可为非暂时性计算机可读存储媒体。计算机可读存储媒体可包含随机存取存储器(RAM)、只读存储器(ROM)、可编程只读存储(PROM)、可擦除可编程只读存储器(EPROM)、电子可擦除可编程只读存储器(EEPROM)、快闪存储器、硬盘、CD-ROM、软盘、卡盒、磁性媒体、光学媒体或其它有形计算机可读存储媒体。
计算机可读媒体可包含计算机可读存储媒体,其对应于例如上文所列的有形存储媒体等有形存储媒体。计算机可读媒体还可包括通信媒体,其包含促进计算机程序从一个地点到另一地点的传送(例如,根据通信协议)的任何媒体。以此方式,短语“计算机可读媒体”大体上可对应于(1)非暂时性有形计算机可读存储媒体,和(2)例如暂时性信号或载波等非有形计算机可读通信媒体。
已描述各种方面和实例。然而,可在不脱离所附权利要求书的范围的情况下对本发明的结构或技术作出修改。
Claims (42)
1.一种用于产生时戳值的方法,其包括:
由一或多个处理器处理来自在中央处理单元CPU上执行的图形应用的时戳请求;
利用所述一或多个处理器中的至少一者响应于所述时戳请求产生多个每仓时戳请求;
利用图形处理单元GPU在执行图形帧的基于瓦片的渲染时发生的多个渲染遍次迭代期间响应于所述多个每仓时戳请求产生多个每仓时戳值;以及
利用所述一或多个处理器中的至少一者基于所述多个每仓时戳值产生指示时间点的时戳值,其中产生所述时戳值包括执行所述多个每仓时戳值中的至少两个每仓时戳值的函数,且其中执行所述函数包括将初始参考时戳与针对用来渲染所述图形帧的两个或更多渲染遍次迭代的相应每仓时戳值和相应参考时戳值之差的总和相加,所述初始参考时戳由所述GPU在针对初始渲染遍次迭代渲染任何基元之前产生。
2.根据权利要求1所述的方法,其中所述渲染遍次迭代中的每一者渲染渲染目标的多个子区中的相应子区。
3.根据权利要求1所述的方法,其中产生所述多个每仓时戳值包括:
在所述多个渲染遍次迭代的第一渲染遍次迭代期间产生第一每仓时戳值,以及
在所述多个渲染遍次迭代的第二渲染遍次迭代期间产生第二每仓时戳值,所述第二渲染遍次迭代不同于所述第一渲染遍次迭代,其中所述至少两个每仓时戳值包括所述第一和第二每仓时戳值。
4.根据权利要求3所述的方法,其进一步包括利用所述GPU在所述渲染遍次迭代中的相应一者期间且在针对所述渲染遍次迭代中的所述相应一者渲染任何基元之前产生分别与所述第一或第二每仓时戳值相关联的第一或第二参考时戳值。
5.根据权利要求1所述的方法,其中执行所述函数包括对以下等式进行求解:
其中Value为所述时戳值,TSV(y)为在第y渲染遍次迭代期间产生的相应每仓时戳值,TSVGPU(y)为由所述GPU在针对所述第y渲染遍次迭代渲染任何基元之前产生的相应参考时戳值,且N为用于渲染所述图形帧的渲染遍次迭代的总数。
6.根据权利要求1所述的方法,其进一步包括响应于所述时戳请求定位在针对所述图形帧待执行的经排序命令序列中的至少两个绘制调用命令之间而产生所述时戳值。
7.根据权利要求6所述的方法,其进一步包括由所述GPU在执行所述图形帧的基于瓦片的渲染时执行所述多个渲染遍次迭代,
其中所述至少两个每仓时戳值包括第一每仓时戳值和第二每仓时戳值,
其中所述第一每仓时戳值指示在所述多个渲染遍次迭代的第一渲染遍次迭代期间执行的至少两个每仓绘制调用的执行之间发生的时间点,在所述第一渲染遍次迭代期间执行的所述至少两个每仓绘制调用中的每一者与所述至少两个绘制调用命令中的相应一者相关联,且
其中所述第二每仓时戳值指示在所述多个渲染遍次迭代的第二渲染遍次迭代期间执行的至少两个每仓绘制调用的执行之间发生的时间点,在所述第二渲染遍次迭代期间执行的所述至少两个每仓绘制调用中的每一者与所述至少两个绘制调用命令中的相应一者相关联,所述第二渲染遍次迭代不同于所述第一渲染遍次迭代。
8.根据权利要求1所述的方法,其进一步包括:
响应于多个每仓时戳请求中的相应一者产生所述多个每仓时戳值中的每一者,所述每仓时戳请求中的每一者放置到多个命令流中的相应一者中;以及
由所述GPU在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行所述命令流中的每一者,每一渲染遍次迭代渲染渲染目标的多个子区中的一者。
9.根据权利要求1所述的方法,其中产生所述时戳值包括:
基于所述多个每仓时戳值产生多个时戳值,所述时戳值中的每一者对应于针对所述图形帧待执行的经排序命令序列中包含的多个时戳请求中的相应一者,所述时戳请求中的每一者由所述图形应用请求。
10.根据权利要求9所述的方法,
其中所述时戳请求中的至少两者定位在针对所述图形帧待执行的所述经排序命令序列中的相应对连续绘制调用命令之间,且
其中产生所述多个时戳值包括基于所述每仓时戳值产生所述多个时戳值使得针对所述经排序命令序列中的所述时戳请求传回的所述时戳值的值从所述经排序命令序列的开始向所述经排序命令序列的末尾单调增加。
11.根据权利要求9所述的方法,其中所述多个时戳值指示所述经排序命令序列中的绘制调用命令在所述图形帧的所述渲染期间执行所花费的相对时间量。
12.根据权利要求9所述的方法,其中产生所述多个时戳值包括基于以下等式产生所述多个时戳值:
其中Value(x)为响应于所述经排序命令序列中的第x时戳请求产生的时戳的时戳值,TSV(x,y)为在所述第y渲染遍次迭代期间产生且对应于所述经排序命令序列中的所述第x时戳请求的每仓时戳值,TSVGPU(y)为由所述GPU在针对所述第y渲染遍次迭代渲染任何基元之前产生的参考时戳值,且N为用于渲染所述图形帧的渲染遍次迭代的数目。
13.根据权利要求1所述的方法,其中产生所述时戳值包括:
将所述每仓时戳请求中的每一者放置到多个命令流中的相应一者中;
由所述GPU在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行所述命令流中的每一者,每一渲染遍次迭代渲染渲染目标的多个子区中的一者;以及
基于由所述GPU响应于放置到所述命令流中的所述每仓时戳请求产生的所述每仓时戳值而产生所述时戳值。
14.根据权利要求1所述的方法,其中所述一或多个处理器包括所述中央处理单元CPU。
15.根据权利要求1所述的方法,其中所述一或多个处理器包括所述GPU。
16.一种计算装置,其包括:
一或多个处理器,其经配置以处理来自在中央处理单元CPU上执行的图形应用的时戳请求,且响应于所述时戳请求产生多个每仓时戳请求;
图形处理单元GPU,其耦合到所述一或多个处理器中的至少一者,所述GPU经配置以在执行图形帧的基于瓦片的渲染时发生的多个渲染遍次迭代期间响应于所述多个每仓时戳请求产生多个每仓时戳值;且
其中所述一或多个处理器中的至少一者进一步经配置以基于所述多个每仓时戳值产生指示时间点的时戳值,其中为了产生所述时戳值,所述一或多个处理器经配置以执行所述多个每仓时戳值中的至少两个每仓时戳值的函数,且其中为了执行所述函数,所述一或多个处理器经配置以将初始参考时戳与针对用来渲染所述图形帧的两个或更多渲染遍次迭代的相应每仓时戳值和相应参考时戳值之差的总和相加,所述初始参考时戳由所述GPU在针对初始渲染遍次迭代渲染任何基元之前产生。
17.根据权利要求16所述的计算装置,其中所述渲染遍次迭代中的每一者渲染渲染目标的多个子区中的相应子区。
18.根据权利要求16所述的计算装置,其中为了产生所述时戳值,所述一或多个处理器经配置以:
在所述多个渲染遍次迭代的第一渲染遍次迭代期间产生第一每仓时戳值,以及
在所述多个渲染遍次迭代的第二渲染遍次迭代期间产生第二每仓时戳值,所述第二渲染遍次迭代不同于所述第一渲染遍次迭代,其中所述至少两个每仓时戳值包括所述第一和第二每仓时戳值。
19.根据权利要求18所述的计算装置,其中所述GPU进一步经配置以在所述渲染遍次迭代中的相应一者期间且在针对所述渲染遍次迭代中的所述相应一者渲染任何基元之前产生分别与所述第一或第二每仓时戳值相关联的第一或第二参考时戳值。
20.根据权利要求16所述的计算装置,其中为了执行所述函数,所述一或多个处理器经配置以对以下等式进行求解:
其中Value为所述时戳值,TSV(y)为在第y渲染遍次迭代期间产生的相应每仓时戳值,TSVGPU(y)为由所述GPU在针对所述第y渲染遍次迭代渲染任何基元之前产生的相应参考时戳值,且N为用于渲染所述图形帧的渲染遍次迭代的总数。
21.根据权利要求16所述的计算装置,其中所述一或多个处理器进一步经配置以响应于所述时戳请求定位在针对所述图形帧待执行的经排序命令序列中的至少两个绘制调用命令之间而产生所述时戳值。
22.根据权利要求21所述的计算装置,
其中所述GPU经配置以在执行所述图形帧的基于瓦片的渲染时执行多个渲染遍次迭代,
其中所述至少两个每仓时戳值包括第一每仓时戳值和第二每仓时戳值,
其中所述第一每仓时戳值指示在所述多个渲染遍次迭代的第一渲染遍次迭代期间执行的至少两个每仓绘制调用的执行之间发生的时间点,在所述第一渲染遍次迭代期间执行的所述至少两个每仓绘制调用中的每一者与所述至少两个绘制调用命令中的相应一者相关联,且
其中所述第二每仓时戳值指示在所述多个渲染遍次迭代的第二渲染遍次迭代期间执行的至少两个每仓绘制调用的执行之间发生的时间点,在所述第二渲染遍次迭代期间执行的所述至少两个每仓绘制调用中的每一者与所述至少两个绘制调用命令中的相应一者相关联,所述第二渲染遍次迭代不同于所述第一渲染遍次迭代。
23.根据权利要求16所述的计算装置,其中所述一或多个处理器进一步经配置以响应于多个每仓时戳请求中的相应一者而产生所述多个每仓时戳值中的每一者,所述每仓时戳请求中的每一者放置到多个命令流中的相应一者中,且其中所述GPU经配置以在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行所述命令流中的每一者,每一渲染遍次迭代渲染渲染目标的多个子区中的相应子区。
24.根据权利要求16所述的计算装置,其中所述一或多个处理器进一步经配置以基于所述多个每仓时戳值产生多个时戳值,所述时戳值中的每一者对应于针对所述图形帧待执行的经排序命令序列中包含的多个时戳请求中的相应一者,所述时戳请求中的每一者由所述图形应用请求。
25.根据权利要求24所述的计算装置,
其中所述时戳请求中的至少两者定位在针对所述图形帧待执行的所述经排序命令序列中的相应对连续绘制调用命令之间,且
其中所述一或多个处理器进一步经配置以基于所述每仓时戳值产生所述多个时戳值使得针对所述经排序命令序列中的所述时戳请求传回的所述时戳值的值从所述经排序命令序列的开始向所述经排序命令序列的末尾单调增加。
26.根据权利要求24所述的计算装置,其中所述多个时戳值指示所述经排序命令序列中的绘制调用命令在所述图形帧的所述渲染期间执行所花费的相对时间量。
27.根据权利要求24所述的计算装置,其中所述一或多个处理器进一步经配置以基于以下等式产生所述多个时戳值:
其中Value(x)为响应于所述经排序命令序列中的第x时戳请求产生的时戳的时戳值,TSV(x,y)为在所述第y渲染遍次迭代期间产生且对应于所述经排序命令序列中的所述第x时戳请求的每仓时戳值,TSVGPU(y)为由所述GPU在针对所述第y渲染遍次迭代渲染任何基元之前产生的参考时戳值,且N为用于渲染所述图形帧的渲染遍次迭代的数目。
28.根据权利要求16所述的计算装置,其中所述一或多个处理器进一步经配置以:
将所述每仓时戳请求中的每一者放置到多个命令流中的相应一者中,所述命令流中的每一者经配置以由所述GPU在执行基于瓦片的渲染时发生的多个渲染遍次迭代中的相应一者期间执行,每一渲染遍次迭代渲染渲染目标的多个子区中的相应子区;
致使所述GPU执行所述命令流;以及
基于由所述GPU响应于放置到所述命令流中的所述每仓时戳请求产生的所述每仓时戳值而产生所述时戳值。
29.根据权利要求16所述的计算装置,其中所述一或多个处理器包括所述CPU的至少一部分。
30.根据权利要求16所述的计算装置,其中所述一或多个处理器包括所述GPU。
31.根据权利要求16所述的计算装置,其中所述计算装置包括无线通信装置。
32.根据权利要求16所述的计算装置,其中所述计算装置包括移动电话手持机。
33.一种用于产生时戳值的设备,其包括:
用于处理来自在中央处理单元CPU上执行的图形应用的时戳请求的装置;
用于响应于所述时戳请求产生多个每仓时戳请求的装置;
用于在执行图形帧的基于瓦片的渲染时发生的多个渲染遍次迭代期间响应于所述多个每仓时戳请求产生多个每仓时戳值的装置;以及
用于基于所述多个每仓时戳值产生指示时间点的时戳值的装置,其中用于产生所述时戳值的装置包括用于执行所述多个每仓时戳值的至少两个每仓时戳值的函数的装置,且其中用于执行所述函数的装置包括用于将初始参考时戳与针对用来渲染所述图形帧的两个或更多渲染遍次迭代的相应每仓时戳值和相应参考时戳值之差的总和相加的装置,所述初始参考时戳由图形处理单元GPU在针对初始渲染遍次迭代渲染任何基元之前产生。
34.根据权利要求33所述的设备,其中所述渲染遍次迭代中的每一者渲染渲染目标的多个子区中的相应子区。
35.根据权利要求33所述的设备,其中所述用于产生所述多个每仓时戳值的装置包括:
用于在所述多个渲染遍次迭代的第一渲染遍次迭代期间产生第一每仓时戳值的装置,以及
用于在所述多个渲染遍次迭代的第二渲染遍次迭代期间产生第二每仓时戳值的装置,所述第二渲染遍次迭代不同于所述第一渲染遍次迭代,其中所述至少两个每仓时戳值包括所述第一和第二每仓时戳值。
36.根据权利要求33所述的设备,其中所述用于执行所述函数的装置包括用于对以下等式进行求解的装置:
其中Value为所述时戳值,TSV(y)为在第y渲染遍次迭代期间产生的相应每仓时戳值,TSVGPU(y)为由所述GPU在针对所述第y渲染遍次迭代渲染任何基元之前产生的相应参考时戳值,且N为用于渲染所述图形帧的渲染遍次迭代的总数。
37.根据权利要求33所述的设备,其中所述用于产生所述时戳值的装置包括所述CPU或所述GPU中的至少一者。
38.一种包括指令的非暂时性计算机可读存储媒体,所述指令在由一或多个处理器执行后即刻致使所述一或多个处理器执行以下操作:
处理来自在中央处理单元CPU上执行的图形应用的时戳请求;
响应于所述时戳请求产生多个每仓时戳请求;
在执行图形帧的基于瓦片的渲染时发生的多个渲染遍次迭代期间响应于所述多个每仓时戳请求产生多个每仓时戳值;以及
基于所述多个每仓时戳值产生指示时间点的时戳值,其中致使所述一或多个处理器产生所述时戳值的所述指令包括执行后即刻致使所述一或多个处理器执行所述多个每仓时戳值的至少两个每仓时戳值的函数的指令,且其中致使述一或多个处理器执行所述函数的所述指令包括执行后即刻致使所述一或多个处理器将初始参考时戳与针对用来渲染所述图形帧的两个或更多渲染遍次迭代的相应每仓时戳值和相应参考时戳值之差的总和相加的指令,所述初始参考时戳由图形处理单元GPU在针对初始渲染遍次迭代渲染任何基元之前产生。
39.根据权利要求38所述的非暂时性计算机可读存储媒体,其中所述渲染遍次迭代中的每一者渲染渲染目标的多个子区中的相应子区。
40.根据权利要求38所述的非暂时性计算机可读存储媒体,其中致使所述一或多个处理器产生所述多个每仓时戳值的所述指令包括:
执行后即刻致使所述一或多个处理器在所述多个渲染遍次迭代的第一渲染遍次迭代期间产生第一每仓时戳值的指令,以及
执行后即刻致使所述一或多个处理器在所述多个渲染遍次迭代的第二渲染遍次迭代期间产生第二每仓时戳值的指令,所述第二渲染遍次迭代不同于所述第一渲染遍次迭代,其中所述至少两个每仓时戳值包括所述第一和第二每仓时戳值。
41.根据权利要求38所述的非暂时性计算机可读存储媒体,其中致使所述一或多个处理器执行所述函数的所述指令包括执行后即刻致使所述一或多个处理器对以下等式进行求解的指令:
其中Value为所述时戳值,TSV(y)为在第y渲染遍次迭代期间产生的相应每仓时戳值,TSVGPU(y)为由所述GPU在针对所述第y渲染遍次迭代渲染任何基元之前产生的相应参考时戳值,且N为用于渲染所述图形帧的渲染遍次迭代的总数。
42.根据权利要求38所述的非暂时性计算机可读存储媒体,其中所述一或多个处理器包括所述CPU或所述GPU中的至少一者。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361811056P | 2013-04-11 | 2013-04-11 | |
US61/811,056 | 2013-04-11 | ||
US14/044,396 US9449410B2 (en) | 2013-04-11 | 2013-10-02 | Intra-frame timestamps for tile-based rendering |
US14/044,396 | 2013-10-02 | ||
PCT/US2014/030447 WO2014168740A2 (en) | 2013-04-11 | 2014-03-17 | Intra-frame timestamps for tile-based rendering |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105122310A CN105122310A (zh) | 2015-12-02 |
CN105122310B true CN105122310B (zh) | 2018-06-26 |
Family
ID=51686482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480019155.8A Expired - Fee Related CN105122310B (zh) | 2013-04-11 | 2014-03-17 | 用于基于瓦片的渲染的帧内时戳 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9449410B2 (zh) |
EP (1) | EP2984633A2 (zh) |
JP (1) | JP6133490B2 (zh) |
KR (1) | KR101728624B1 (zh) |
CN (1) | CN105122310B (zh) |
WO (1) | WO2014168740A2 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9779533B2 (en) * | 2014-01-27 | 2017-10-03 | Nvidia Corporation | Hierarchical tiled caching |
US9842428B2 (en) * | 2014-06-27 | 2017-12-12 | Samsung Electronics Co., Ltd. | Dynamically optimized deferred rendering pipeline |
US9945825B2 (en) * | 2014-10-29 | 2018-04-17 | The Boeing Company | Predictive analysis of complex datasets and systems and methods including the same |
US10089775B2 (en) | 2015-06-04 | 2018-10-02 | Samsung Electronics Co., Ltd. | Automated graphics and compute tile interleave |
US10403025B2 (en) | 2015-06-04 | 2019-09-03 | Samsung Electronics Co., Ltd. | Automated graphics and compute tile interleave |
US10535114B2 (en) * | 2015-08-18 | 2020-01-14 | Nvidia Corporation | Controlling multi-pass rendering sequences in a cache tiling architecture |
US11107177B1 (en) * | 2017-06-16 | 2021-08-31 | Amazon Technologies, Inc. | Data/metadata synchronization using metadata queue statistics |
US10901119B2 (en) * | 2018-03-28 | 2021-01-26 | Robert Bosch Gmbh | Method and system for efficient rendering of accumulated precipitation for weather effects |
US10269167B1 (en) * | 2018-05-21 | 2019-04-23 | Apple Inc. | Indirect command buffers for graphics processing |
US11373268B2 (en) * | 2020-09-30 | 2022-06-28 | Qualcomm Incorporated | Apparatus and method for graphics processing unit hybrid rendering |
US11983809B2 (en) * | 2022-05-23 | 2024-05-14 | Rockwell Collins, Inc. | A-Buffer dynamic allocation |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001037220A1 (en) * | 1999-11-18 | 2001-05-25 | Info Assets, Inc. | Rendering image data |
CN101131768A (zh) * | 2006-07-26 | 2008-02-27 | 辉达公司 | 图形管线中基于瓦片的精度的光栅化 |
GB2461900A (en) * | 2008-07-16 | 2010-01-20 | Advanced Risc Mach Ltd | Storing and Displaying Parameter Data Relating to Separately Rendered Areas of an Image |
CN101887595A (zh) * | 2009-05-14 | 2010-11-17 | 武汉如临其境科技创意有限公司 | 基于四叉树索引的三维数字地球空间数据组织渲染方法 |
US8427474B1 (en) * | 2008-10-03 | 2013-04-23 | Nvidia Corporation | System and method for temporal load balancing across GPUs |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6323860B1 (en) | 1999-03-17 | 2001-11-27 | Nvidia Corporation | Circuit and method for deferring the binding of render states to primitives in a graphics system |
US6952207B1 (en) * | 2002-03-11 | 2005-10-04 | Microsoft Corporation | Efficient scenery object rendering |
US7616208B2 (en) * | 2002-12-18 | 2009-11-10 | Genesys Conferencing Ltd. | Method and system for application broadcast |
US7385608B1 (en) * | 2003-12-31 | 2008-06-10 | 3Dlabs Inc. Ltd. | State tracking methodology |
US7167171B2 (en) * | 2004-06-29 | 2007-01-23 | Intel Corporation | Methods and apparatuses for a polygon binning process for rendering |
JP4965957B2 (ja) * | 2006-10-03 | 2012-07-04 | キヤノン株式会社 | 表示制御装置、表示システム、及び表示制御方法 |
US8139069B1 (en) | 2006-11-03 | 2012-03-20 | Nvidia Corporation | Method and system for improving data coherency in a parallel rendering system |
US8922565B2 (en) | 2007-11-30 | 2014-12-30 | Qualcomm Incorporated | System and method for using a secondary processor in a graphics system |
GB2473513B (en) | 2009-09-14 | 2012-02-01 | Sony Comp Entertainment Europe | A method and apparatus for determining processor performance |
US9342322B2 (en) | 2011-09-12 | 2016-05-17 | Microsoft Technology Licensing, Llc | System and method for layering using tile-based renderers |
-
2013
- 2013-10-02 US US14/044,396 patent/US9449410B2/en active Active
-
2014
- 2014-03-17 WO PCT/US2014/030447 patent/WO2014168740A2/en active Application Filing
- 2014-03-17 KR KR1020157031663A patent/KR101728624B1/ko active IP Right Grant
- 2014-03-17 CN CN201480019155.8A patent/CN105122310B/zh not_active Expired - Fee Related
- 2014-03-17 JP JP2016507546A patent/JP6133490B2/ja active Active
- 2014-03-17 EP EP14729757.6A patent/EP2984633A2/en not_active Withdrawn
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001037220A1 (en) * | 1999-11-18 | 2001-05-25 | Info Assets, Inc. | Rendering image data |
CN101131768A (zh) * | 2006-07-26 | 2008-02-27 | 辉达公司 | 图形管线中基于瓦片的精度的光栅化 |
GB2461900A (en) * | 2008-07-16 | 2010-01-20 | Advanced Risc Mach Ltd | Storing and Displaying Parameter Data Relating to Separately Rendered Areas of an Image |
CN101650821A (zh) * | 2008-07-16 | 2010-02-17 | Arm有限公司 | 监视图形处理 |
US8427474B1 (en) * | 2008-10-03 | 2013-04-23 | Nvidia Corporation | System and method for temporal load balancing across GPUs |
CN101887595A (zh) * | 2009-05-14 | 2010-11-17 | 武汉如临其境科技创意有限公司 | 基于四叉树索引的三维数字地球空间数据组织渲染方法 |
Non-Patent Citations (1)
Title |
---|
Performance Tuning for Tile-Based Architectures;Bruce Merry;《OpenGL Insights》;20121231;"引言"部分最后1段,"背景"部分第4段,第23.10部分第1-2段 * |
Also Published As
Publication number | Publication date |
---|---|
CN105122310A (zh) | 2015-12-02 |
EP2984633A2 (en) | 2016-02-17 |
US9449410B2 (en) | 2016-09-20 |
US20140306971A1 (en) | 2014-10-16 |
KR20150143567A (ko) | 2015-12-23 |
WO2014168740A2 (en) | 2014-10-16 |
WO2014168740A3 (en) | 2015-06-11 |
KR101728624B1 (ko) | 2017-04-19 |
JP6133490B2 (ja) | 2017-05-24 |
JP2016522474A (ja) | 2016-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105122310B (zh) | 用于基于瓦片的渲染的帧内时戳 | |
US9747718B2 (en) | System, method, and computer program product for performing object-space shading | |
US9754407B2 (en) | System, method, and computer program product for shading using a dynamic object-space grid | |
US10229529B2 (en) | System, method and computer program product for implementing anti-aliasing operations using a programmable sample pattern table | |
CN104050626B (zh) | 用于将基元光栅化的方法、系统和存储介质 | |
US9177351B2 (en) | Multi-primitive graphics rendering pipeline | |
US9483861B2 (en) | Tile-based rendering | |
CN103810669B (zh) | 在统一l2高速缓存中高速缓存经适应性定制大小的高速缓存像素块 | |
US9355483B2 (en) | Variable fragment shading with surface recasting | |
CN105659291B (zh) | 选择性合并部分覆盖图块以执行分层z剔除 | |
CN106663331B (zh) | 用于图形处理中的着色器程序执行技术 | |
CN106575442B (zh) | 使用通过自适应着色的纹理查找的带宽缩减 | |
CN105144244B (zh) | 用于基于瓦片的渲染器的查询处理的方法、设备和计算机可读存储媒体 | |
CN110383337A (zh) | 可变速率着色 | |
US9111393B2 (en) | System, method, and computer program product for sampling a hierarchical depth map | |
US9230363B2 (en) | System, method, and computer program product for using compression with programmable sample locations | |
US9230362B2 (en) | System, method, and computer program product for using compression with programmable sample locations | |
US9852536B2 (en) | High order filtering in a graphics processing unit | |
CN108335349A (zh) | 利用神经网络滤波图像数据 | |
US20150179142A1 (en) | System, method, and computer program product for reduced-rate calculation of low-frequency pixel shader intermediate values | |
US9721381B2 (en) | System, method, and computer program product for discarding pixel samples | |
CN106575428B (zh) | 图形处理单元中的高阶滤波 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180626 |
|
CF01 | Termination of patent right due to non-payment of annual fee |