CN116490893A - 快速增量共享常量 - Google Patents
快速增量共享常量 Download PDFInfo
- Publication number
- CN116490893A CN116490893A CN202180071736.6A CN202180071736A CN116490893A CN 116490893 A CN116490893 A CN 116490893A CN 202180071736 A CN202180071736 A CN 202180071736A CN 116490893 A CN116490893 A CN 116490893A
- Authority
- CN
- China
- Prior art keywords
- draw call
- constant data
- shared
- register
- draw
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
- Image Processing (AREA)
Abstract
本公开内容提供用于快速增量共享常量的系统、设备、装置和方法,包括在存储介质上编码的计算机程序。在各方面中,CPU可以确定/更新用于多个绘制调用中的第一绘制调用的共享常量数据。可以与至少一个着色器相对应的共享常量数据可以是基于用于第一绘制调用的绘制调用更新来更新的。CPU可以将用于第一绘制调用的更新的共享常量数据传送到GPU。GPU可以在至少一个寄存器中,接收来自CPU的更新的共享常量数据,并且基于与多个绘制调用中的第一绘制调用的绘制调用更新相对应的更新的共享常量数据来配置至少一个寄存器。
Description
相关申请的交叉引用
本申请要求享有于2020年10月30日提交的、标题为“FAST INCREMENTAL SHAREDCONSTANTS”的美国专利申请No.17/085,272的优先权,上述申请以引用方式全部明确地并入本文中。
技术领域
大体而言,本公开内容涉及处理系统,以及更具体地,涉及用于图形处理的一种或多种技术。
背景技术
计算设备经常执行图形处理(例如,利用图形处理单元(GPU))来渲染图形数据以由计算设备进行显示。这样的计算设备可以包括例如计算机工作站、移动电话(比如智能电话)、嵌入式系统、个人计算机、平板计算机和视频游戏控制台。GPU被配置为执行包括一个或多个处理阶段的图形处理管线,所述处理阶段一起操作以执行图形处理命令并输出帧。中央处理单元(CPU)可以通过向GPU发出一个或多个图形处理命令,来控制GPU的操作。现代CPU通常能够同时执行多个应用,每个应用在执行期间可能需要利用GPU。提供用于在显示器上的视觉呈现的内容的设备可以利用GPU。
GPU操作可以是基于利用非增量常量的着色器处理技术。这在分箱架构中可能是有益的,因为它可以允许每个绘制调用是独立的。然而,在一些实例中,非增量常量可能不是最高效的技术。因此,存在对改善的着色器处理技术的需要。
发明内容
下文给出一个或多个方面的简单概括以便提供对这样的方面的基本理解。该概括不是对所有预期方面的详尽概述,并且既不旨在标识所有方面的关键或重要元素,也不旨在描述任意或全部方面的范围。其唯一目的是以简化形式给出一个或多个方面的一些概念,作为后面给出的更详细的描述的前奏。
用于着色器处理的常量数据可以加载到常量存储器的专用块,并且可以在整个绘制调用中保持恒定。比如当光照关系相对于在帧内的条目/特征变化时,可以针对后续绘制调用来更改通过常量数据指示的常量。为了针对后续绘制调用更改常量,可以将所有新的常量数据都加载到常量存储器/常量缓冲区,即使要从常量数据的先前版本更改少量的常量数据。在一些情况下,可能复制整个常量缓冲区以更改在常量缓冲区中的常量的小的子集,使得当前基于常量缓冲区的先前版本来处理的GPU命令不受常量缓冲区更改的影响。每次发生常量缓冲区更改时复制整个常量缓冲区,可能导致与确定何时释放常量缓冲区的每个版本相关联的显著开销,并且可能提供常量缓冲区的管线。
因此,共享常量(其是可以跨越不同着色器阶段共享的常量)可以被配置为作为上下文寄存器出现在驱动程序接口中。可以以增量方式将共享常量加载到寄存器存储中。基于着色器前导的执行,驱动程序可以以非增量方式对要映射到常量存储器/常量缓冲区的共享常量/上下文寄存器进行编程。可以在着色器的主要部分之前在每次绘制调用时执行一次着色器前导,以根据需要将共享常量从上下文寄存器复制到常量存储器/常量缓冲区。例如,如果针对第一绘制调用将三个共享常量复制到的常量存储器,以及针对第二绘制调用将另外三个共享常量复制到常量存储器,则六个共享常量可用于第二绘制调用。在共享常量被从寄存器数据加载到常量存储器后,可以照常执行着色器执行,无论所述常量是共享常量还是常规/非共享常量。
在本公开内容的一方面中,提供方法、计算机可读介质和装置。装置可以包括存储器和耦合到存储器的至少一个处理器。存储器可以包括指令,指令在被至少一个处理器执行时使得至少一个处理器执行以下操作:在至少一个寄存器中,接收来自CPU的共享常量数据,共享常量数据与多个绘制调用中的第一绘制调用的绘制调用更新相对应;并且基于与第一绘制调用的绘制调用更新相对应的共享常量数据,来配置至少一个寄存器。
在本公开内容的另外方面中,提供方法、计算机可读介质和装置。装置可以包括存储器和耦合到存储器的至少一个处理器。存储器可以包括指令,指令在被至少一个处理器执行时,使得至少一个处理器执行以下操作:确定用于多个绘制调用中的第一绘制调用的共享常量数据,共享常量数据与至少一个着色器相对应;更新用于第一绘制调用的共享常量数据,共享常量数据是基于用于第一绘制调用的绘制调用更新来更新的;并且将用于第一绘制调用的更新的共享常量数据传送到GPU的至少一个寄存器。
为了实现前述和有关的目的,一个或多个方面包括下文充分描述并且在权利要求中具体指出的特征。下文描述和附图详细描述一个或多个方面的某些说明性特征。然而,这些特征仅指示可以以其采用各个方面的基本原理的各种方法中的一些方法,并且本说明书旨在包括所有这样的方面及其等同物。
附图说明
图1是示出根据本公开内容的一种或多种技术的示例内容生成系统的方块图。
图2示出根据本公开内容的一种或多种技术的示例GPU。
图3示出根据本公开内容的一种或多种技术的示例图像或表面。
图4示出与根据本公开内容的一种或多种技术的用于提供增量共享常量的示例技术相对应的示意图。
图5是根据本公开内容的一种或多种技术的示例图形处理方法的流程图。
图6是根据本公开内容的一种或多种技术的示例图形处理方法的流程图。
图7是示出在中央处理单元(CPU)与图形处理单元(GPU)之间的示例通信的调用流程图。
具体实施方式
下文参照附图更充分地描述系统、装置、计算机程序产品和方法的各个方面。然而,本公开内容可以以多种不同的形式来体现,并且不应被解释为限于贯穿本公开内容给出的任何特定结构或功能。确切地说,提供这些方面使得本公开内容将是透彻和完整的,并且将向本领域技术人员充分地传达本公开内容的范围。基于本文中的教导,本领域技术人员应当理解的是,本公开内容的保护范围旨在覆盖本文所公开的系统、装置、计算机程序产品和方法的任何方面,无论该方面是独立于本公开内容的其它方面实现的还是结合本公开内容的其它方面实现的。例如,使用本文阐述的任意数量的方面可以实现装置或可以实践方法。此外,本公开内容的保护范围旨在覆盖使用除了本文所阐述的公开内容的各个方面之外或者与本文所阐述的公开内容的各个方面不同的其它的结构、功能、或者结构和功能来实现的这样的装置或方法。本文中公开的任何方面可以通过权利要求的一个或多个元素来体现。
虽然本文描述各个方面,但是这些方面的许多变化和排列也落入本公开内容的范围内。虽然提到本公开内容的各方面的一些潜在益处和优点,但是本公开内容的范围不旨在限于特定的益处、用途或目标。确切地说,本公开内容的各方面旨在广泛地适用于不同的无线技术、系统配置、处理系统、网络和传输协议,其中的一些是在附图和以下的描述中通过示例的方式进行示出的。具体实施方式和附图仅是对本公开内容的说明而非限制,本公开内容的范围是通过所附权利要求及其等效物来限定的。
若干方面是参照各种装置和方法来给出的。这些装置和方法是通过各种方块、组件、电路、过程、算法等(统称为“元素”)在下面的具体实施方式中描述并且在附图中示出的。这些元素可以使用电子硬件、计算机软件或者其任意组合来实现。至于这样的元素是被实现为硬件还是软件,取决于特定的应用和对整个系统所施加的设计约束。
举例而言,元素或者元素的任何部分或者元素的任意组合,可以被实现为包括一个或多个处理器的“处理系统”(其还可以称为处理单元)。处理器的示例包括微处理器、微控制器、图形处理单元(GPU)、通用GPU(GPGPU)、中央处理单元(CPU)、应用处理器、数字信号处理器(DSP)、精简指令集计算(RISC)处理器、片上系统(SOC)、基带处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、可编程逻辑器件(PLD)、状态机、门逻辑、分离硬件电路和被配置为执行贯穿本公开内容描述的各种功能的其它适当硬件。处理系统中的一个或多个处理器可以执行软件。无论被称为软件、固件、中间件、微代码、硬件描述语言还是其它术语,软件都可以被广泛地解释为意指指令、指令集、代码、代码段、程序代码、程序、子程序、软件组件、应用、软件应用、软件包、例行程序、子例行程序、对象、可执行文件、执行的线程、过程、函数等等。
术语应用可以指代软件。如本文所描述的,一种或多种技术可以指代被配置为执行一种或多种功能的应用(例如,软件)。在这样的示例中,应用可以被存储在存储器(例如,处理器的片上存储器、系统存储器或者任何其它存储器)中。本文所描述的硬件(比如处理器)可以被配置为执行应用。例如,应用可以被描述为包括代码,代码在由硬件执行时使得硬件执行本文所描述的一种或多种技术。作为示例,硬件可以从存储器访问代码,并且执行从存储器访问的代码以执行本文所描述的一种或多种技术。在一些示例中,在本公开内容中标识了组件。在这样的示例中,组件可以是硬件、软件或者其组合。组件可以是单独的组件或者单个组件的子组件。
在本文所描述的一个或多个示例中,本文所描述的功能可以用硬件、软件或者其任意组合来实现。当用软件实现时,功能可以作为一个或多个指令或代码在计算机可读介质上进行存储或编码。计算机可读介质包括计算机存储介质。存储介质可以是可以由计算机存取的任何可用介质。通过示例而非限制的方式,这样的计算机可读介质可以包括随机存取存储器(RAM)、只读存储器(ROM)、电可擦写可编程ROM(EEPROM)、光盘存储、磁盘存储、其它磁存储设备、前述类型的计算机可读介质的组合、或者可以用于以可以由计算机存取的指令或数据结构的形式存储计算机可执行代码的任何其它介质。
如本文所使用的,术语“内容”的实例可以指代“图形内容”、“图像”等等,不管术语是用作形容词、名词还是其它词类。在一些示例中,如本文所使用的,术语“图形内容”可以指代由图形处理管线的一个或多个进程所产生的内容。在另外的示例中,如本文所使用的术语,“图形内容”可以指代由被配置为执行图形处理的处理单元所产生的内容。在另外的示例中,如本文所使用的,术语“图形内容”可以指代由图形处理单元所产生的内容。
用于着色器处理的常量数据可以被加载到常量存储器的专用块,并且可以在整个绘制调用中保持恒定。比如当光照关系相对于帧内的条目/特征发生变化时,经由常量数据指示的常量可以被更改用于后续绘制调用。为了更改用于后续绘制调用的常量,所有新的常量数据可以被加载到常量存储器/常量缓冲区,即使要从常量数据的先前版本更改少量的常量数据。在一些情况下,可能复制整个常量缓冲区以更改在常量缓冲区中的常量的小的子集,使得当前基于常量缓冲区的先前版本来处理的GPU命令不受常量缓冲区更改的影响。每次发生常量缓冲区更改时复制整个常量缓冲区,可能导致与确定何时释放常量缓冲区的每个版本相关联的显著开销,并且可能提供常量缓冲区的管线。
因此,共享常量(其是可以跨越不同着色器阶段共享的常量)可以被配置为作为上下文寄存器出现在驱动程序接口中。可以以增量方式将共享常量加载到寄存器存储中。基于着色器前导的执行,驱动程序可以以非增量方式对要映射到常量存储器/常量缓冲区的共享常量/上下文寄存器进行编程。可以在着色器的主要部分之前在每次绘制调用时执行一次着色器前导,以根据需要将共享常量从上下文寄存器复制到常量存储器/常量缓冲区。例如,如果针对第一绘制调用将三个共享常量复制到的常量存储器,以及针对第二绘制调用将另外三个共享常量复制到常量存储器,则六个共享常量可用于第二绘制调用。在共享常量被从寄存器数据加载到常量存储器后,可以照常执行着色器执行,无论所述常量是共享常量还是常规/非共享常量。
图1是示出被配置为实现本公开内容的一种或多种技术的示例内容生成系统100的方块图。内容生成系统100包括设备104。设备104可以包括用于执行本文所描述的各种功能的一个或多个组件或电路。在一些示例中,设备104的一个或多个组件可以是SOC的组件。设备104可以包括被配置为执行本公开内容的一种或多种技术的一个或多个组件。在所示的示例中,设备104可以包括处理单元120、内容编码器/解码器122和系统存储器124。在一些方面中,设备104可以包括多个可选组件(例如,通信接口126、收发机132、接收机128、发射机130、显示处理器127和一个或多个显示器131)。显示器131可以指代一个或多个显示器131。例如,显示器131可以包括单个显示器或多个显示器,多个显示器可以包括第一显示器和第二显示器。第一显示器可以是左眼显示器,以及第二显示器可以是右眼显示器。在一些示例中,第一显示器和第二显示器可以接收用于在其上进行呈现的不同的帧。在其它示例中,第一显示器和第二显示器可以接收用于在其上进行呈现的相同的帧。在另外的示例中,可以不在设备上显示图形处理的结果,例如,第一显示器和第二显示器可以不接收用于在其上进行呈现的任何帧。替代地,帧或图形处理结果可以被传送到另一设备。在一些方面中,这可以称为拆分渲染。
处理单元120可以包括内部存储器121。处理单元120可以被配置为使用图形处理管线107来执行图形处理。内容编码器/解码器122可以包括内部存储器123。在一些示例中,设备104可以包括显示处理器(比如显示处理器127),以在由一个或多个显示器131显示由处理单元120生成的一个或多个帧之前,对这些帧执行一种或多种显示处理技术。显示处理器127可以被配置为执行显示处理。例如,显示处理器127可以被配置为对由处理单元120生成的一个或多个帧执行一种或多种显示处理技术。一个或多个显示器131可以被配置为显示或以其它方式呈现由显示处理器127处理的帧。在一些示例中,一个或多个显示器131可以包括以下各项中的一项或多项:液晶显示器(LCD)、等离子显示器、有机发光二极管(OLED)显示器、投影显示设备、增强现实显示设备、虚拟现实显示设备、头戴式显示器、或者任何其它类型的显示设备。
处理单元120和内容编码器/解码器122外部的存储器(比如系统存储器124)可以被处理单元120和内容编码器/解码器122访问。例如,处理单元120和内容编码器/解码器122可以被配置为从外部存储器(比如系统存储器124)读取,和/或写入到外部存储器。处理单元120可以通过总线,通信地耦合到系统存储器124。在一些示例中,处理单元120和内容编码器/解码器122可以通过总线或经由不同的连接,通信地耦合到内部存储器121。
内容编码器/解码器122可以被配置为从任何源(比如系统存储器124和/或通信接口126)接收图形内容。系统存储器124可以被配置为存储所接收的经编码或解码的图形内容。内容编码器/解码器122可以被配置为以经编码的像素数据的形式,例如从系统存储器124和/或通信接口126接收经编码或解码的图形内容。内容编码器/解码器122可以被配置为对任何图形内容进行编码或解码。
内部存储器121或系统存储器124可以包括一个或多个易失性或非易失性存储器或存储设备。在一些示例中,内部存储器121或系统存储器124可以包括RAM、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、可擦除可编程ROM(EPROM)、EEPROM、闪存、磁数据介质或光存储介质、或者任何其它类型的存储器。内部存储器121或系统存储器124可以是根据一些示例的非暂时性存储介质。术语“非暂时性”可以表示存储介质不是以载波或传播信号来体现的。然而,术语“非暂时性”不应被解释为意指内部存储器121或系统存储器124是不可移动的,或者其内容是静态的。作为一个示例,系统存储器124可以从设备104移除并且移动到另一设备。作为另一示例,系统存储器124可能不可从设备104移除。
处理单元120可以是CPU、GPU、GPGPU、或者可以被配置为执行图形处理的任何其它的处理单元。在一些示例中,处理单元120可以集成到设备104的主板中。在另外的示例中,处理单元120可以存在于安装在设备104的主板的端口中的图形卡上,或者可以以其它方式并入在被配置为与设备104互操作的外围设备中。处理单元120可以包括一个或多个处理器,比如一个或多个微处理器、GPU、ASIC、FPGA、算术逻辑单元(ALU)、DSP、离散逻辑、软件、硬件、固件、其它等效的集成或离散逻辑电路、或其任何组合。如果所述技术部分地以软件实现,则处理单元120可以将用于软件的指令存储在适当的、非暂时性计算机可读存储介质(例如,内部存储器121)中,并且可以使用一个或多个处理器在硬件中执行指令以执行本公开内容的技术。前述内容中的任何一种(包括硬件、软件、硬件和软件的组合等等)可以被认为是一个或多个处理器。
内容编码器/解码器122可以是被配置为执行内容解码的任何处理单元。在一些示例中,内容编码器/解码器122可以集成到设备104的主板中。内容编码器/解码器122可以包括一个或多个处理器,比如一个或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、算术逻辑单元(ALU)、数字信号处理器(DSP)、视频处理器、离散逻辑、软件、硬件、固件、其它等效的集成或离散逻辑电路、或者其任何组合。如果所述技术部分地以软件来实现,则内容编码器/解码器122可以将用于软件的指令存储在适当的、非暂时性计算机可读存储介质(例如,内部存储器123)中,并且可以使用一个或多个处理器在硬件中执行指令以执行本公开内容的技术。前述内容中的任何一种(包括硬件、软件、硬件和软件的组合等等)都可以被认为是一个或多个处理器。
在一些方面中,内容生成系统100可以包括可选的通信接口126。通信接口126可以包括接收机128和发射机130。接收机128可以被配置为执行本文关于设备104所描述的任何接收功能。此外,接收机128可以被配置为从另一设备接收信息,例如,眼睛或头部位置信息、渲染命令和/或位置信息。发射机130可以被配置为执行本文关于设备104所描述的任何发射功能。例如,发射机130可以被配置为向另一设备发送信息,该信息可以包括针对内容的请求。可以将接收机128和发射机130组合成收发机132。在这样的示例中,收发机132可以被配置为执行本文关于设备104所描述的任何接收功能和/或发射功能。
再次参照图1,在某些方面中,处理单元127可以包括常量增量器198,其被配置为:在至少一个寄存器中,接收来自CPU的共享常量数据,共享常量数据与多个绘制调用的第一绘制调用的绘制调用更新相对应;并且基于与第一绘制调用的绘制调用更新相对应的共享常量数据,来配置至少一个寄存器。在另外的方面中,常量增量器198可以被配置为:确定用于多个绘制调用中的第一绘制调用的共享常量数据,共享常量数据与至少一个着色器相对应;更新用于第一绘制调用的共享常量数据,共享常量数据是基于用于第一绘制调用的绘制调用更新来更新的;并且将用于第一绘制调用的更新的共享常量数据传送到GPU的至少一个寄存器。
设备(比如设备104)可以指代被配置为执行本文所描述的一种或多种技术的任何设备、装置或系统。例如,设备可以是服务器、基站、用户设备、客户端设备、站、接入点、计算机(比如个人计算机、桌面型计算机、膝上型计算机、平板计算机、计算机工作站、或大型计算机)、终端产品、装置、电话、智能电话、服务器、视频游戏平台或控制台、手持设备(比如便携式视频游戏设备或个人数字助理(PDA))、可穿戴计算设备(比如智能手表、增强现实设备或虚拟现实设备)、非可穿戴设备、显示器或显示设备、电视机、电视机顶盒、中间网络设备、数字媒体播放器、视频流设备、内容流设备、车载计算机、任何移动设备、被配置为生成图形内容的任何设备、或者被配置为执行本文所描述的一种或多种技术的任何设备。本文的过程可以被描述为由特定组件(例如,GPU)执行,但在其它实施例中,可以使用与所公开的实施例一致的其它组件(例如,CPU)来执行。
GPU可以处理在GPU管线中的多种类型的数据或数据分组。例如,在一些方面中,GPU可以处理两种类型的数据或数据分组,例如,上下文寄存器分组和绘制调用数据。上下文寄存器分组可以是一组全局状态信息,例如关于全局寄存器、着色程序或常量数据的信息,其可以规定将如何处理图形上下文。例如,上下文寄存器分组可以包括关于颜色格式的信息。在上下文寄存器分组的一些方面中,可以存在用于指示哪个工作负载属于上下文寄存器的比特。此外,可以存在同时和/或并行地运行的多个功能或程序。例如,函数或程序可以描述某种操作(例如,颜色模式或颜色格式)。因此,上下文寄存器可以定义GPU的多个状态。
上下文状态可以用于确定单个处理单元(例如,顶点提取器(VFD)、顶点着色器(VS)、着色器处理器或几何处理器)如何工作,和/或处理单元以什么模式工作。为此,GPU可以使用上下文寄存器和编程数据。在一些方面中,GPU可以基于模式或状态的上下文寄存器定义,在管线中生成工作负载(例如,顶点或像素工作负载)。某些处理单元(例如,VFD)可以使用这些状态来确定某些功能,例如如何组装顶点。由于这些模式或状态可能改变,因此可能需要GPU更改相应的上下文。此外,与模式或状态相对应的工作负载,可以遵循变化的模式或状态。
图2示出根据本公开内容的一种或多种技术的示例GPU 200。如在图2中所示出的,GPU 200包括命令处理器(CP)210、绘制调用分组212、VFD 220、VS 222、顶点高速缓存(VPC)224、三角形设置引擎(TSE)226、光栅化器(RAS)228、Z处理引擎(ZPE)230、像素内插器(PI)232、片段着色器(FS)234、渲染后端(RB)236、L2高速缓存(UCHE)238和系统存储器240。虽然图2显示GPU 200包括处理单元220-238,但是GPU 200可以包括任意数量的处理单元。此外,处理单元220-238仅是可以由根据本公开内容的GPU使用的处理单元的示例,并且是所述处理单元的任何组合或顺序。GPU 200还包括命令缓冲器250、上下文寄存器分组260和上下文状态261。
如在图2中所示出的,GPU可以利用CP(例如,CP 210)或硬件加速器来将命令缓冲器解析为上下文寄存器分组(例如,上下文寄存器分组260)和/或绘制调用数据分组(例如,绘制调用分组212)。然后,CP 210可以通过单独的路径将上下文寄存器分组260或绘制调用数据分组212发送给在GPU中的处理单元或块。此外,命令缓冲器250可以交替上下文寄存器和绘制调用的不同状态。例如,可以按以下方式来构造命令缓冲器:上下文N的上下文寄存器、上下文N的绘制调用、上下文N+1的上下文寄存器、以及上下文N+1的绘制调用。
GPU可以以多种不同的方式来渲染图像。在一些实例中,GPU可以使用直接渲染和/或分片式(tiled)渲染来渲染图像。在分片式渲染中,可以将图像划分或分离成不同的部分或瓦片(tile)。在图像划分之后,可以单独渲染每个部分或瓦片。使用分片式渲染,GPU可以将计算机图形图像划分为网格格式,使得网格的每个部分(即,瓦片)是单独地渲染的。在一些方面中,在分箱(binning)通路期间,图像可以被划分为不同的箱体(bin)或瓦片。在一些方面中,在分箱通路期间,在可以识别可见图元或绘制调用的情况下可以构建可见性流。与分片式渲染相比,直接渲染不会将帧划分成较小的箱体或瓦片。确切地说,在直接渲染中,一次对整个帧进行渲染。此外,某些类型的GPU可以允许分片式渲染和直接渲染(例如,弹性(flex)渲染)两者。
在一些方面中,GPU可以将绘制或渲染过程应用于不同的箱体或瓦片。例如,GPU可以渲染到一个箱体,并针对在箱体中的图元或像素执行所有绘制。在渲染到箱体的过程中,渲染目标可以位于GPU内部存储器(GMEM)中。在一些实例中,在渲染到一个箱体之后,可以将渲染目标的内容移动到系统存储器中,并且可以释放GMEM以用于渲染下一个箱体。此外,GPU可以渲染到另一箱体,并针对在箱体中的图元或像素执行绘制。因此,在一些方面中,可能存在覆盖一个表面中的所有绘制的少量的箱体,例如,四个箱体。此外,GPU可以循环遍历一个箱体中的所有绘制,但针对可见的绘制调用(即,包含可见几何形状的绘制调用)执行绘制。在一些方面中,可以生成可见性流(例如,在分箱通路中)以确定在图像或场景中的每个图元的可见性信息。例如,该可见性流可以标识某个图元是否可见。在一些方面中,该信息可以用于移除不可见的图元(例如,在渲染通路中)。此外,图元中的被标识为可见的至少一些图元可以在渲染中被渲染。
在分片式渲染的一些方面中,可以存在多个处理阶段或通道。例如,渲染可以在两个通道中执行,例如可见性或箱体可见性通道以及渲染或箱体渲染通道。在可见性通道中,GPU可以输入渲染工作负载,记录图元或三角形的位置,以及然后确定哪些图元或三角形落入哪个箱体或区域。在可见性通道的一些方面中,GPU还可以识别或标记在可见性流中每个图元或三角形的可见性。在渲染通道期间,GPU可以输入可见性流,并且一次处理一个箱体或一个区域。在一些方面中,可以对可见性流进行分析以确定哪些图元或图元的顶点是可见的或不可见的。因此,可以对可见的图元或图元的顶点进行处理。通过这样做,GPU可以减少处理或渲染不可见的图元或三角形的不必要工作负载。
在一些方面中,在可见性通道期间,可以处理某些类型的图元几何(例如,仅位置几何)。此外,根据图元或三角形的地点或位置,可以将图元分类到不同的箱体或区域中。在一些实例中,可以通过确定这些图元或三角形的可见性信息,将图元或三角形分类到不同的箱体中。例如,GPU可以确定或写入在每个箱体或区域中的每个图元的可见性信息(例如,在系统存储器中写入)。该可见性信息可以用于确定或生成可见性流。在渲染通道中,可以单独地渲染在每个箱体中的图元。在这些实例中,可见性流可以从存储器取得并且用于丢弃对于该箱体不可见的图元。
GPU或GPU架构的一些方面可以提供用于渲染的多个不同的选项(例如,软件渲染和硬件渲染)。在软件渲染中,驱动程序或CPU可以通过一次处理每个视图来复制整个帧几何形状。此外,可以根据视图来更改一些不同的状态。因此,在软件渲染中,软件可以通过更改可以用于针对图像中的每个视点进行渲染的一些状态来复制整个工作负载。在某些方面中,由于GPU可能针对图像中的每个视点多次提交相同的工作负载,因此可能存在增加的开销量。在硬件渲染中,硬件或GPU可以负责复制或处理用于图像中每个视点的几何形状。因此,硬件可以管理用于图像中每个视点的图元或三角形的复制或处理。
图3示出了图像或表面300,包括被划分为多个箱体的多个图元。如在图3中所示出的,图像或表面300包括区域302,区域302包括图元321、322、323和324。图元321、322、323和324被划分或放置到不同的箱体(例如,箱体310、311、312、313、314和315)中。图3示出针对图元321-324使用多个视点的分片式渲染的示例。例如,图元321-324在第一视点350和第二视点351中。因此,GPU处理或渲染包括区域302的图像或表面300,可以利用多个视点或多视图渲染。
如本文所指示的,GPU或图形处理器单元可以使用分片式渲染架构来降低功耗或节省存储器带宽。如上文进一步所说明的,该渲染方法可以将场景划分为多个箱体,以及包括识别在每个箱体中可见的三角形的可见性通道。因此,在分片式渲染中,全屏幕可以被划分为多个箱体或瓦片。场景然后可以被多次渲染,例如,针对每个箱体渲染一次或多次。
在图形渲染的各方面中,一些图形应用可以一次或多次针对单个目标(即,一渲染目标)进行渲染。例如,在图形渲染中,在系统存储器上的帧缓冲区可能被多次更新。帧缓冲区可以是存储器或随机存取存储器(RAM)的例如包含位图或存储的一部分,以帮助存储用于GPU的显示数据。帧缓冲区还可以是包含完整的数据帧的存储器缓冲区。此外,帧缓冲区可以是逻辑缓冲区。在一些方面中,更新帧缓冲区可以是在箱体或瓦片渲染中执行的,其中,如上文所讨论的,表面被划分成多个箱体或瓦片,以及然后每个箱体或瓦片可以单独地渲染。此外,在分片式渲染中,帧缓冲区可以被划分为多个箱体或瓦片。
如本文所指示的,在一些方面中,比如在分箱或分片式渲染架构中,帧缓冲区可以具有重复地存储或写入它们的数据(例如,当从不同类型的存储器进行渲染时)。这可以被称为解析和不解析帧缓冲区或系统存储器。例如,当存储或写入一个帧缓冲区并且然后切换到另一个帧缓冲区时,在帧缓冲区上的数据或信息可以从在GPU处的GMEM解析到系统存储器(即,双倍数据速率存储器(DDR)RAM或动态RAM(DRAM)中的存储器)。
在一些方面中,系统存储器还可以是例如在设备或智能电话上的用于存储数据或信息的片上系统(SoC)存储器或者另一基于芯片的存储器。系统存储器还可以是由CPU和/或GPU共享的物理数据存储。在一些方面中,系统存储器可以是例如在设备或智能电话上的DRAM芯片。因此,SoC存储器可以是用于存储数据的基于芯片的方式。
在一些方面中,GMEM可以是在GPU处的可以由静态RAM(SRAM)实现的片上存储器。此外,GMEM可以被存储在设备(例如,智能手机)上。如本文所指出的,数据或信息可以在系统存储器或DRAM与GMEM之间传输(例如,在设备处)。在一些方面中,系统存储器或DRAM可以在CPU或GPU处。另外,数据可以被存储在DDR或DRAM处。在一些方面中,比如在分箱或分片式渲染中,存储区的一小部分可以被存储在GPU处(例如,在GMEM处)。在一些实例中,与在帧缓冲区或系统存储器处存储数据相比,在GMEM处存储数据可以利用较大的处理工作负载和/或功耗。
图4是与用于提供增量共享常量的示例技术相对应的示意图400。在各示例中,着色器处理可以与以下各项相关联:与GPU指令相对应的着色器代码、可以接收用于渲染帧的数据的资源(例如,纹理、表面等)和/或可以由应用加载的常量数据。常量数据(例如,c1-c8)可以在整个绘制调用中是不变的,并且可以利用专用常量RAM 410的块。虽然可以从绘制调用到绘制调用执行相同的着色器以渲染帧的一部分,但是经由常量数据c1-c8指示的常量1-8可能被改变以用于渲染在帧内的不同条目/特征,因为常量1-8可以指示在例如照明与帧内的条目/特征之间的关系。对于每个绘制调用,可以将新的常量数据加载到常量RAM 410,因为先前的常量数据可能是非增量的。也就是说,驱动程序可以被配置为完全地更新用于绘制调用/着色器中的每者的常量数据c1-c8(例如,即使要改变常量数据c1-c8中的少量常量数据),因为驱动程序可能不提供针对常量RAM 410的增量更新。
非增量常量数据对于分箱架构可能是有利的,其中每个绘制调用可以独立于其它绘制调用,使得着色器执行可以迅速地进行到对于给定的箱体可见的绘制调用。然而,在应用级别(例如,在应用402),可能存在以下实例:可以通过允许常量数据c1-c8中的少量常量数据在绘制调用之间快速并且增量地改变,来提高GPU性能。然而,由于常量数据c1-c8可能是作为单个数据集合进行加载的,因此改变常量数据c1-c8的子集可能在着色器处理操作中引入复杂性。
常量1-8可以被存储在常量缓冲区(例如,常量RAM 410)中,并且着色器可以索引常量缓冲区以加载常量1-8。在一些情况下,常量1-8可以存储在多个常量缓冲区中。通过生成常量缓冲区,对常量1-8的更新可以在CPU上执行,因为驱动程序可以被配置为执行更新。但是,如果当前正在处理/执行一个或多个GPU命令,则可以基于在复制的常量缓冲区中要更改的常量子集来复制和更改整个常量缓冲区,使得当前基于常量缓冲区的先前版本来处理/执行GPU命令不受常量缓冲区更改的影响。每次发生常量缓冲区更改时复制整个常量缓冲区,可能导致与在GPU执行已经完成之后确定何时释放常量缓冲区的每个版本相关联的显著开销。此外,可以基于每次在常量缓冲区中常量的子集被改变时复制常量缓冲区,提供常量缓冲区的管线。
一些图形应用程序接口(API)可以被配置为生成可以跨越不同着色器阶段共享的共享常量(例如,在图400中的值1和值2)。例如,被配置为基于纹理、照明算法等为像素着色的像素着色器,可以具有与被配置为对包括这些像素的帧中的图元或三角形进行光栅化的顶点着色器共享的常量。共享常量还可以被称为根常量或推送常量,可以以低开销将共享常量直接从应用402推送到GPU。在各示例中,应用402可以包括指示使用寄存器数据A-F的共享常量的指令,比如SetSharedConstant(位置A,值1)和SetSharedConstant(位置D,值2)。来自应用402的shader foobar(foo)404(着色器foobar(foo)404)可以基于指令(比如r0=r1+sharedConstantA和r2=r3*sharedConstantD)来引用共享常量。在基于指令针对应用402执行第一绘制调用之后,应用402可以更改对共享常量的指示(例如,可以将SetSharedConstant(位置A,值1)更改为SetSharedConstant(位置A,值3)),并且可以针对应用402执行第二绘制调用。
根据图形API的配置,共享常量可以是32比特的常量,其数量范围可以从32到128(例如,与用于一些硬件配置的数量范围可以高达512的常规/非共享常量相比)。一些着色器可能使用超过512个常量。然而,成本可能与超过阈值(比如512)的常量总数相关联,因为过多数量的常量可能必须从主存储器取回,而不是从片上存储器中取回。相应地,多个共享常量(例如,32个共享常量)可以用于以与以下情形相比较低的开销快速并且增量地改变常量数据c1-c8的一部分:基于针对着色器的每次调用而更新所有常量数据c1-c8所招致的开销。
虽然一些图形API可以基于是增量共享常量的,但是如果这样的共享常量被包括在常量存储/常量存储器缓冲区中,则共享常量可能与可以基于非增量常量存储的分箱架构相冲突。因此,共享常量可以被配置为对于驱动程序接口表现为上下文寄存器406,使得共享常量可以被视为上下文寄存器状态而不是常量状态,因为上下文寄存器状态可以是增量的。上下文寄存器406可以类似于用于绘制状态的管线寄存器,因为上下文寄存器406可以经由GPU硬件来管线化。在将共享常量加载到上下文寄存器406(例如,寄存器A和寄存器D)中之后,信息可以保持不变,除非/直到上下文寄存器406被驱动程序更新。
考虑到在一些GPU中的着色器可能不具有到用于提取寄存器数据A-F的寄存器总线的直接访问,上下文寄存器406可以以非增量方式映射到常量RAM 410。驱动程序可以将共享常量加载到上下文寄存器406中(例如,多达128个常量可以专用作与共享常量状态相关联的共享常量)。当驱动程序接收用于共享常量的更新信息时,驱动程序可以更新可以驻留在GPU中的上下文寄存器406。可以跨绘制调用来维护用于上下文寄存器406的寄存器存储,其中绘制调用各自可以包括用于定义上下文寄存器406中的一个或多个上下文寄存器的命令。基于增量过程,驱动程序可以对要映射到常量RAM 410的所有共享常量寄存器(例如,寄存器A和D)进行编程。例如,驱动程序可以生成多个命令,其中一些命令可以包括寄存器权限。示例性寄存器权限可以指示:特定上下文寄存器(例如,寄存器A和D)可以分别被映射到特定的常量(例如,常量2和3)。命令可以是基于特定寄存器的存储器地址和要映射到特定常量的数据的。
由于驱动程序可以被配置为针对绘制调用来对多个寄存器状态进行编程,因此与共享常量(例如,值1和值2)相对应的寄存器(例如,寄存器A和D)可以与用于绘制调用的其它寄存器状态被包括在一起。着色器硬件还可以被配置为提供管线功能,使得当前正在处理的寄存器状态/GPU命令不受寄存器状态更新的影响。以这种方式,可以将共享常量数据提供给GPU。着色器硬件可以包括在着色器硬件上执行着色器指令的流处理器(SP),比如shader foo 412(着色器foo 412)。在各示例中,shader foo 412可以基于比如r0=r1+c2和r2=r3*c3的指令来引用常量1-8。
着色器硬件还可以包括高级定序器(HLSQ),HLSQ准备信息以供SP执行。HLSQ可以执行早期前导/前导着色器,其可以是着色器代码的在执行着色器的主要部分之前执行的一部分。前导着色器可以包括存储共享常量(stsc)指令,该指令可以将共享常量(例如,寄存器A中的值1和寄存器D中的值2)从上下文寄存器406复制到常量RAM 410(例如,常量2和常量3)。在各示例中,可以基于比如movToConstRam(sharedConstantRegA,constantRam2)和movToConstRam(sharedConstantRegD,constantRam3)的stsc指令,在着色器硬件上执行shader foo preamble 408(着色器foo前导408)。
前导着色器可能未被配置为确定由共享常量指示的实质性信息/值。确切地说,前导着色器可以确定某些寄存器(比如寄存器A和寄存器D)包括与用于执行特定绘制调用的信息相关联的共享常量。因此,可以执行前导着色器的stsc指令,以将被包括在某些寄存器中的共享常量复制到常量RAM 410中。在前导着色器中的其它指令可以包括:将常规/非共享常量数据加载到常量RAM 410中。常量RAM 410可以充当在SP执行主着色器之前设置的高速缓存。由于在着色器的当前调用正在执行的同时,着色器可能正在针对着色器的下一次调用而配置共享常量,因此可以执行管线化以使得着色器的当前调用不受配置着色器的下一次调用的影响。
将数据从上下文寄存器406移动到常量存储/常量RAM 410的HLSQ,可以在每次绘制调用之前执行一次前导着色器。常量数据c1-c8可以被加载到常量RAM 410中以用于特定的绘制调用,并且在下一次绘制调用中,与下一个绘制调用相对应的常量数据可以被加载到常量RAM 410中。前导着色器可以基于stsc指令将寄存器数据A-F从上下文寄存器406复制到常量RAM 410中。例如,如果要执行利用3个共享常量的第一着色器,则前导着色器可以从上下文寄存器406复制3个共享常量。如果要在第一着色器之后执行使用不同的共享常量集合(例如,具有或不具有重叠的常量数据c1-c8)的第二着色器,可以再次执行前导着色器以从上下文寄存器406加载/复制不同的共享常量集合。可以针对每个绘制调用保留共享常量,使得,基于经由前导着色器随着着色器的每次调用独立地更新共享常量而增量地累积的共享常量,如果在第一绘制调用上复制了3个共享常量并且在第二绘制调用上复制了另外3个共享常量,则6个共享常量可用于第二绘制调用。因此,完整的共享常量集合可以不是一次复制的,因为前导着色器可以根据需要将共享常量移动到常量存储中。
着色器编译器可以被配置为确定哪些共享常量要由着色器使用,并且可以将所确定的共享常量从寄存器数据A-F移动到常量RAM 410中。在将寄存器数据A-F加载到用于GPU的常量存储中之后,可以照常执行着色器执行,而不管常量1-8是共享常量还是常规常量。也就是说,在着色器常量状态被加载到着色器常量RAM中之后,着色器常量状态可以移动到类似于用于着色器执行的其它常量数据的工作常量RAM。通过允许着色器编译器确定可以用于着色器执行的共享常量,可以单独地加载这样的常量,而不必加载共享常量的整个块。
图5是根据本公开内容的一种或多种技术的示例方法500的流程图。方法500可以由装置(比如用于图形处理的装置、GPU、无线通信设备等)来执行,如结合图1-4和图7的各方面所使用的。
在502处,装置可以在从CPU接收共享常量数据之前,配置用于至少一个着色器的着色器前导。例如,参照图4和图7,在着色器的主要部分之前执行的shader foo preamble408可以在接收sharedConstantRegA和sharedConstantRegD之前被配置(例如,GPU 704可以在714处从CPU 702接收更新的共享常量数据之前,在712处配置着色器前导)。共享常量数据(例如,sharedConstantRegA和sharedConstantRegD)可以是基于用于至少一个着色器的着色器前导来接收的(例如,基于shader foo preamble 408的movToConstRam(sharedConstantRegA,constantRam2)指令和/或movToConstRam(sharedConstantRegD,constantRam3)指令的执行)。至少一个着色器可以包括顶点着色器、片段着色器或几何着色器中的至少一项。
在504处,装置可以在从CPU接收共享常量数据之前执行至少一个寄存器的初始配置。例如,参照图4和图7,寄存器A可以基于SetSharedConstant(位置A,值1)指令而被配置用于值1,以及寄存器D可以基于SetSharedConstant(位置D,值2)指令而被配置用于值2(例如,GPU 704可以在714处从CPU 702接收更新的共享常量数据之前,在712处配置上下文寄存器)。
在506处,装置可以在至少一个寄存器中,接收来自CPU的共享常量数据,共享常量数据与多个绘制调用中的第一绘制调用的绘制调用更新相对应。例如,参照图4和图7,可以基于接收值3和应用402的对应Draw()调用指令,更新上下文寄存器406中的上下文寄存器A(例如,GPU 704可以基于在710处的更新,在714处在GPU 704的上下文寄存器中接收来自CPU 702的更新的共享常量数据)。至少一个寄存器可以是上下文寄存器406或管线寄存器中的至少一项。参照图2和图4,共享常量数据(例如,值1和值2)可以与至少一个寄存器260/406的至少一个上下文寄存器状态261相关联。
在508处,装置可以基于与第一绘制调用的绘制调用更新相对应的共享常量数据,来配置至少一个寄存器。例如,参照图4和图7,基于应用402的SetSharedConstant(位置A,值1)指令和SetSharedConstant(位置D,值2)指令,寄存器A和寄存器D可以被配置为分别存储值1和值2(例如,GPU 704可以基于在714处被CPU 702指示为与第一绘制调用相对应的更新的共享常量数据,在716处配置上下文寄存器)。
在510处,装置可以将与第一绘制调用的绘制调用更新相对应的共享常量数据发送给常量存储器或常量缓冲区中的至少一项。在各方面中,常量存储器可以是常量RAM(例如,常量RAM 410/706)。例如,参照图4和图7,可以将寄存器A的值1和寄存器D的值2作为常量2和常量3,被从上下文寄存器406发送给常量RAM 410(例如,GPU 704可以在718处,将更新的共享常量数据发送给常量RAM 706)。
在512处,装置可以将共享常量数据存储在常量存储器或常量缓冲区中的至少一项中。例如,参照图4和图7,值1和值2可以被存储在常量RAM 410中(例如,GPU 704可以在720处,将更新的共享常量数据存储在常量RAM 706中)。
在514处,装置可以在至少一个寄存器中,接收来自CPU的更新的共享常量数据,更新的共享常量数据与多个绘制调用中的第二绘制调用的绘制调用更新相对应,第二绘制调用在第一绘制调用之后。例如,参照图4和图7,可以基于应用402的在SetSharedConstant(位置A,值1)指令之后的Draw()调用指令和SetSharedConstant(位置A,值3)指令,将上下文寄存器406中的上下文寄存器A更新为值3(例如,GPU 704可以基于在724处的第二更新,在726处在GPU 704的上下文寄存器中接收来自CPU 702的第二更新的共享常量数据)。可以基于更新的共享常量数据(例如,值3)来更新至少一个寄存器(例如,上下文寄存器406)。在各方面中,至少一个寄存器(例如,寄存器A)可以独立于至少一个其它寄存器(例如,寄存器D)来更新。
在各配置中,提供用于图形处理的方法或装置。装置可以是GPU,或者可以执行图形处理的一些其它处理器。在各方面中,装置可以是设备104内的处理单元120,或者可以是设备104或另一设备内的某种其它硬件。装置可以包括:用于在至少一个寄存器中,接收来自CPU的共享常量数据的单元,共享常量数据与多个绘制调用中的第一绘制调用的绘制调用更新相对应;用于基于与第一绘制调用的绘制调用更新相对应的共享常量数据,来配置至少一个寄存器的单元。装置还可以包括:用于将与第一绘制调用的绘制调用更新相对应的共享常量数据发送给常量存储器或常量缓冲区中的至少一项的单元。装置还可以包括:用于将共享常量数据存储在常量存储器或常量缓冲区中的至少一项中的单元。装置还可以包括:用于在从CPU接收共享常量数据之前,配置用于至少一个着色器的着色器前导的单元。装置还可以包括:用于在从CPU接收共享常量数据之前,执行至少一个寄存器的初始配置的单元。装置还可以包括:用于在至少一个寄存器中,接收来自CPU的更新的共享常量数据的单元,更新的共享常量数据与多个绘制调用中的第二绘制调用的绘制调用更新相对应,第二绘制调用在第一绘制调用之后。
图6是根据本公开内容的一种或多种技术的示例方法600的流程图。方法600可以由装置(比如用于图形处理的装置、GPU、无线通信设备等)来执行,如结合图1-4和图7的各方面所使用的。
在602处,装置可以识别多个绘制调用中的第一绘制调用的实例。例如,参照图4和图7,应用402可以包括多个Draw()调用指令(例如,CPU 702可以在708处识别第一绘制调用的实例)。第一绘制调用的实例可以是基于与CPU(例如,702)的应用(例如,402)相关联的指示(例如,由CPU 702)来识别的。
在604处,装置可以确定用于多个绘制调用中的第一绘制调用的共享常量数据,共享常量数据与至少一个着色器相对应。例如,参照图4和图7,应用402可以将值1和值2指示为用于第一Draw()调用指令的共享常量数据(例如,CPU 702可以在710处,确定用于第一绘制调用的共享常量数据)。可以经由shader foo 404,从应用402引用共享常量数据。
在606处,装置可以更新用于第一绘制调用的共享常量数据,共享常量数据是基于用于第一绘制调用的绘制调用更新来更新的。例如,参照图4和图7,应用402的SetSharedConstant指令可以基于第一Draw()调用指令,将共享常量数据更新为值1(例如,CPU 702可以在710处,更新用于第一绘制调用的共享常量数据)。
在608处,装置可以将用于第一绘制调用的更新的共享常量数据传送到GPU的至少一个寄存器。例如,参照图4和图7,基于应用402的SetSharedConstant(位置A,值1)指令和SetSharedConstant(位置D,值2)指令,可以将值1传送到上下文寄存器406中的寄存器A并且将值2传送到上下文寄存器406中的寄存器D(例如,CPU 702可以在714处,将更新的共享常量数据传送到GPU 704的上下文寄存器)。
在610处,装置可以识别包括在多个绘制调用中的第二绘制调用的实例,第二绘制调用在第一绘制调用之后。例如,参照图4和图7,应用402可以包括在第一Draw()调用指令之后的第二Draw()调用指令(例如,CPU 702可以在722处识别第二绘制调用的实例)。第二绘制调用的实例可以是基于与CPU(例如,702)的应用(例如,402)相关联的第二指示来识别的(例如,由CPU 702识别)。
在612处,装置可以确定用于多个绘制调用中的第二绘制调用的第二共享常量数据,第二共享常量数据与至少一个着色器相对应。例如,参照图4和图7,应用402可以将值3指示为用于第二Draw()调用指令的第二共享常量数据(例如,CPU 702可以在724处,确定用于第二绘制调用的第二共享常量数据)。可以经由shader foo 404,从应用402引用第二共享常量数据。
在614处,装置可以更新用于第二绘制调用的第二共享常量数据,第二共享常量数据是基于用于第二绘制调用的绘制调用更新来更新的。例如,参照图4和图7,应用402的SetSharedConstant指令可以基于第二Draw()调用指令,将共享常量数据更新为值3(例如,CPU 702可以在724处,更新用于第二绘制调用的第二共享常量数据)。
在616处,装置可以将用于第二绘制调用的更新的第二共享常量数据传送到GPU的至少一个寄存器。例如,参照图4和图7,可以基于应用402的SetSharedConstant(位置A,值3)指令,将值3传送到上下文寄存器406中的寄存器A(例如,CPU 702可以在726处,将第二更新的共享常量数据传送到GPU 704的上下文寄存器)。
在各配置中,提供用于图形处理的方法或装置。装置可以是CPU,或者可以执行图形处理的某种其它处理器。在各方面中,装置可以是设备104内的处理单元120,或者可以是设备104或另一设备内的某种其它硬件。装置可以包括:用于确定用于多个绘制调用中的第一绘制调用的共享常量数据的单元,共享常量数据与至少一个着色器相对应;用于更新针对第一绘制调用的共享常量数据的单元,共享常量数据是基于用于第一绘制调用的绘制调用更新来更新的;以及用于将用于第一绘制调用的更新的共享常量数据传送到GPU的至少一个寄存器的单元。装置还可以包括:用于识别多个绘制调用中的第一绘制调用的实例的单元。装置还可以包括:用于识别被包括在多个绘制调用中的第二绘制调用的实例的单元,第二绘制调用在第一绘制调用之后。装置还可以包括:用于确定用于多个绘制调用中的第二绘制调用的第二共享常量数据的单元,第二共享常量数据与至少一个着色器相对应;用于更新用于第二绘制调用的第二共享常量数据的单元,第二共享常量数据是基于用于第二绘制调用的绘制调用更新来更新的;以及用于将用于第二绘制调用的更新的第二共享常量数据传送到GPU的至少一个寄存器的单元。
图7是示出在CPU 702与GPU 704之间的示例通信的调用流程图700。在708处,CPU702可以识别第一绘制调用的实例。在各方面中,在CPU 702上执行的应用可以向GPU驱动程序指示第一绘制调用。GPU驱动程序也可以在CPU 702上执行,使得CPU 702可以在708处,基于由应用进行的指示来识别第一绘制调用的实例。在710处,CPU 702可以确定和/或更新用于第一绘制调用的共享常量数据。在714处,CPU 702可以将用于第一绘制调用的更新的共享常量数据传送到GPU 704的上下文寄存器。
在712处,GPU 704可以在从CPU 702接收更新的共享常量数据之前,配置上下文寄存器。GPU还可以在712处配置在执行主着色器之前在GPU 704上执行的着色器前导。在将更新的共享常量数据提供给上下文寄存器之后,GPU 704可以在716处,基于更新的共享常量数据来配置上下文寄存器。在各方面中,GPU 704可以包括常量RAM 706。在718处,GPU 704可以将更新的共享常量数据发送给常量RAM 706以在720处存储,以用于一个或多个绘制调用。
在722处,CPU 702可以识别第二绘制调用的实例。在各方面中,在CPU 702上执行的应用可以向GPU驱动程序指示第二绘制调用,使得CPU 702可以基于由应用进行的指示来识别第二绘制调用的实例。在724处,CPU 702可以确定第二共享常量数据,并且更新用于第二绘制调用的第二共享常量数据。在726处,CPU 702可以将第二更新的共享常量数据传送到GPU 704的上下文寄存器,以用于第二绘制调用。也就是说,GPU 704可以在726处,接收第二更新的共享常量数据并且基于第二更新的共享常量数据来重新配置/更新上下文寄存器,第二更新的共享常量数据还可以被传送到常量RAM 706并且存储在常量RAM 706中。
应当理解的是,在所公开的过程/流程图中的方块的特定顺序或者层级是示例方法的说明。应当理解的是,基于设计偏好,可以重新排列在过程/流程图中的方块的特定顺序或者层级。此外,一些方块可以组合或省略。所附的方法权利要求以样本顺序给出各个方块的元素,以及不意在限于给出的特定顺序或层级。
提供先前描述,以使本领域技术任何人员能够实践本文所描述的各个方面。对这些方面的各种修改对于本领域技术人员将是显而易见的,并且本文定义的总体原理可以适用于其它方面。因此,权利要求不旨在限于本文所示出的各方面,而是要被赋予与权利要求的语言相一致的全部范围,其中,除非特别如此说明,否则用对单数元素的引用不旨在意指“一个且仅一个”,而是“一个或多个”。本文中使用“示例性的”一词来意指“用作示例、实例或说明”。本文中描述为“示例性”的任何方面未必要被解释为是优选的或者比其它方面有优势。
除非另外特别说明,否则术语“一些”指代一个或多个,并且在上下文未另行规定的情况下术语“或”可以被解释为“和/或”。比如“A、B或C中的至少一项”、“A、B或C中的一个或多个”、“A、B和C中的至少一项”、“A、B和C中的一个或多个”以及“A、B、C或者其任意组合”的组合,包括A、B和/或C的任意组合,并且可以包括A的倍数、B的倍数或者C的倍数。具体而言,比如“A、B或C中的至少一项”、“A、B或C中的一个或多个”、“A、B和C中的至少一项”、“A、B和C中的一个或多个”以及“A、B、C或者其任意组合”的组合,可以是仅A、仅B、仅C、A和B、A和C、B和C或者A和B和C,其中,任意这样的组合可以包含A、B或C中的一个或多个成员。贯穿本公开内容描述的各个方面的元素的对于本领域技术人员是公知的或将要是公知的所有结构和功能等价物通过引用的方式明确地并入本文中,并且旨在由权利要求包含。此外,本文中所公开的内容不旨在奉献给公众,不管这样的公开内容是否明确记载在权利要求书中。词语“模块”、“机制”、“元素”、“设备”等可能不是词语“单元”的替代词。因此,没有权利要求元素要被解释为功能模块,除非该元素是使用短语“用于……的单元”明确记载的。
在一个或多个示例中,本文所描述的功能可以用硬件、软件、固件或者其任意组合来实现。例如,尽管已经贯穿本公开内容使用了术语“处理单元”,但是这样的处理单元可以用硬件、软件、固件或者其任何组合来实现。如果本文所描述的任何功能、处理单元、技术或其它模块是用软件实现的,则本文所描述的功能、处理单元、技术或其它模块可以作为一个或多个指令或代码存储在计算机可读介质上或者通过计算机可读介质进行传输。
计算机可读介质可以包括计算机数据存储介质或通信介质,通信介质包括有助于将计算机程序从一个地方传送到另一个地方的任何介质。用这种方式,计算机可读介质通常可以对应于:(1)非暂时性的有形计算机可读存储介质;或者(2)比如信号或载波波形的通信介质。数据存储介质可以是可以由一个或多个计算机或者一个或多个处理器访问以取回用于实现在本公开内容中描述的技术的指令、代码和/或数据结构的任何可用介质。通过示例而非限制的方式,这样的计算机可读介质可以包括RAM、ROM、EEPROM、压缩光盘只读存储器(CD-ROM)或者其它光盘存储器、磁盘存储器或其它磁存储设备。如本文所使用的,磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字通用光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也应当被包括在计算机可读介质的范围内。计算机程序产品可以包括计算机可读介质。
本公开内容的技术可以在多种多样的设备或装置中实现,包括无线手机、集成电路(IC)或者一组IC(例如,芯片组)。在本公开内容中描述各种组件、模块或单元,以强调被配置为执行所公开的技术的设备的功能方面,但不一定需要由不同的硬件单元来实现。确切地说,如上文所描述的,各个单元可以被组合在任何硬件单元中,或者通过互操作的硬件单元集合(包括如上文所描述的一个或多个处理器)结合适当的软件和/或固件来提供。因此,如本文所使用的术语“处理器”可以指代任何前述结构或者适合于实现本文所描述的技术的任何其它结构。此外,所述技术可以在一个或多个电路或逻辑元件中完全地实现。
Claims (42)
1.一种图形处理的方法,包括:
在至少一个寄存器中,接收来自中央处理单元(CPU)的共享常量数据,所述共享常量数据与多个绘制调用中的第一绘制调用的绘制调用更新相对应;以及
基于与所述第一绘制调用的所述绘制调用更新相对应的所述共享常量数据,来配置所述至少一个寄存器。
2.根据权利要求1所述的方法,还包括:将与所述第一绘制调用的所述绘制调用更新相对应的所述共享常量数据发送给常量存储器或常量缓冲区中的至少一项。
3.根据权利要求2所述的方法,还包括:将所述共享常量数据存储在所述常量存储器或所述常量缓冲区中的所述至少一项中。
4.根据权利要求2所述的方法,其中,所述常量存储器是常量随机存取存储器(RAM)。
5.根据权利要求1所述的方法,还包括:在接收来自所述CPU的所述共享常量数据之前,配置用于至少一个着色器的着色器前导。
6.根据权利要求5所述的方法,其中,所述共享常量数据是基于用于所述至少一个着色器的所述着色器前导来接收的。
7.根据权利要求5所述的方法,其中,所述至少一个着色器包括顶点着色器、片段着色器或几何着色器中的至少一项。
8.根据权利要求1所述的方法,还包括:在接收来自所述CPU的所述共享常量数据之前,执行所述至少一个寄存器的初始配置。
9.根据权利要求1所述的方法,还包括:在所述至少一个寄存器中,接收来自所述CPU的更新的共享常量数据,所述更新的共享常量数据与所述多个绘制调用中的第二绘制调用的绘制调用更新相对应,所述第二绘制调用在所述第一绘制调用之后。
10.根据权利要求9所述的方法,其中,所述至少一个寄存器是基于所述更新的共享常量数据来更新的。
11.根据权利要求10所述的方法,其中,所述至少一个寄存器是独立于至少一个其它寄存器来更新的。
12.根据权利要求1所述的方法,其中,所述至少一个寄存器是上下文寄存器或管线寄存器中的至少一项。
13.根据权利要求1所述的方法,其中,所述共享常量数据与所述至少一个寄存器的至少一个上下文寄存器状态相关联。
14.一种图形处理的方法,包括:
确定用于多个绘制调用中的第一绘制调用的共享常量数据,所述共享常量数据与至少一个着色器相对应;
更新用于所述第一绘制调用的所述共享常量数据,所述共享常量数据是基于用于所述第一绘制调用的绘制调用更新来更新的;以及
将用于所述第一绘制调用的更新的共享常量数据传送给图形处理单元(GPU)的至少一个寄存器。
15.根据权利要求14所述的方法,还包括:识别所述多个绘制调用中的所述第一绘制调用的实例。
16.根据权利要求15所述的方法,其中,所述第一绘制调用的实例是基于与中央处理单元(CPU)的应用相关联的指示来识别的。
17.根据权利要求16所述的方法,还包括:识别被包括在所述多个绘制调用中的第二绘制调用的实例,所述第二绘制调用在所述第一绘制调用之后。
18.根据权利要求17所述的方法,其中,所述第二绘制调用的实例是基于与所述CPU的所述应用相关联的第二指示来识别的。
19.根据权利要求17所述的方法,还包括:
确定用于所述多个绘制调用中的所述第二绘制调用的第二共享常量数据,所述第二共享常量数据与所述至少一个着色器相对应;
更新用于所述第二绘制调用的所述第二共享常量数据,所述第二共享常量数据是基于用于所述第二绘制调用的绘制调用更新来更新的;以及
将用于所述第二绘制调用的更新的第二共享常量数据传送给所述GPU的所述至少一个寄存器。
20.一种用于图形处理的装置,包括:
存储器;以及
至少一个处理器,其耦合到所述存储器并且被配置为:
在至少一个寄存器中,接收来自中央处理单元(CPU)的共享常量数据,所述共享常量数据与多个绘制调用中的第一绘制调用的绘制调用更新相对应;以及
基于与所述第一绘制调用的所述绘制调用更新相对应的所述共享常量数据,来配置所述至少一个寄存器。
21.根据权利要求20所述的装置,其中,所述至少一个处理器还被配置为:将与所述第一绘制调用的所述绘制调用更新相对应的所述共享常量数据发送给常量存储器或常量缓冲区中的至少一项。
22.根据权利要求21所述的装置,其中,所述至少一个处理器还被配置为:将所述共享常量数据存储在所述常量存储器或所述常量缓冲区中的所述至少一项中。
23.根据权利要求21所述的装置,其中,所述常量存储器是常量随机存取存储器(RAM)。
24.根据权利要求20所述的装置,其中,所述至少一个处理器还被配置为:在接收来自所述CPU的所述共享常量数据之前,配置用于至少一个着色器的着色器前导。
25.根据权利要求24所述的装置,其中,所述共享常量数据是基于用于所述至少一个着色器的所述着色器前导来接收的。
26.根据权利要求24所述的装置,其中,所述至少一个着色器包括顶点着色器、片段着色器或几何着色器中的至少一项。
27.根据权利要求20所述的装置,其中,所述至少一个处理器还被配置为:在接收来自所述CPU的所述共享常量数据之前,执行所述至少一个寄存器的初始配置。
28.根据权利要求20所述的装置,其中,所述至少一个处理器还被配置为:在所述至少一个寄存器中,接收来自所述CPU的更新的共享常量数据,所述更新的共享常量数据与所述多个绘制调用中的第二绘制调用的绘制调用更新相对应,所述第二绘制调用在所述第一绘制调用之后。
29.根据权利要求28所述的装置,其中,所述至少一个寄存器是基于所述更新的共享常量数据来更新的。
30.根据权利要求29所述的装置,其中,所述至少一个寄存器是独立于至少一个其它寄存器来更新的。
31.根据权利要求20所述的装置,其中,所述至少一个寄存器是上下文寄存器或管线寄存器中的至少一项。
32.根据权利要求20所述的装置,其中,所述共享常量数据与所述至少一个寄存器的至少一个上下文寄存器状态相关联。
33.根据权利要求20所述的装置,其中,所述装置是无线通信设备。
34.一种用于图形处理的装置,包括:
存储器;以及
至少一个处理器,其耦合到所述存储器并且被配置为:
确定用于多个绘制调用中的第一绘制调用的共享常量数据,所述共享常量数据与至少一个着色器相对应;
更新用于所述第一绘制调用的所述共享常量数据,所述共享常量数据是基于用于所述第一绘制调用的绘制调用更新来更新的;以及
将用于所述第一绘制调用的更新的共享常量数据传送给图形处理单元(GPU)的至少一个寄存器。
35.根据权利要求34所述的装置,其中,所述至少一个处理器还被配置为:识别所述多个绘制调用中的所述第一绘制调用的实例。
36.根据权利要求35所述的装置,其中,所述第一绘制调用的实例是基于与中央处理单元(CPU)的应用相关联的指示来识别的。
37.根据权利要求36所述的装置,其中,所述至少一个处理器还被配置为:识别被包括在所述多个绘制调用中的第二绘制调用的实例,所述第二绘制调用在所述第一绘制调用之后。
38.根据权利要求37所述的装置,其中,所述第二绘制调用的实例是基于与所述CPU的所述应用相关联的第二指示来识别的。
39.根据权利要求37所述的装置,其中,所述至少一个处理器还被配置为:
确定用于所述多个绘制调用中的所述第二绘制调用的第二共享常量数据,所述第二共享常量数据与所述至少一个着色器相对应;
更新用于所述第二绘制调用的所述第二共享常量数据,所述第二共享常量数据是基于用于所述第二绘制调用的绘制调用更新来更新的;以及
将用于所述第二绘制调用的更新的第二共享常量数据传送给所述GPU的所述至少一个寄存器。
40.根据权利要求34所述的装置,其中,所述装置是无线通信设备。
41.一种存储计算机可执行代码的计算机可读介质,所述代码在被至少一个处理器执行时使所述至少一个处理器执行以下操作:
在至少一个寄存器中,接收来自中央处理单元(CPU)的共享常量数据,所述共享常量数据与多个绘制调用中的第一绘制调用的绘制调用更新相对应;以及
基于与所述第一绘制调用的所述绘制调用更新相对应的所述共享常量数据,来配置所述至少一个寄存器。
42.一种存储计算机可执行代码的计算机可读介质,所述代码在被至少一个处理器执行时使所述至少一个处理器执行以下操作:
确定用于多个绘制调用中的第一绘制调用的共享常量数据,所述共享常量数据与至少一个着色器相对应;
更新用于所述第一绘制调用的所述共享常量数据,所述共享常量数据是基于用于所述第一绘制调用的绘制调用更新来更新的;以及
将用于所述第一绘制调用的更新的共享常量数据传送给图形处理单元(GPU)的至少一个寄存器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/085,272 | 2020-10-30 | ||
US17/085,272 US11694384B2 (en) | 2020-10-30 | 2020-10-30 | Fast incremental shared constants |
PCT/US2021/052291 WO2022093462A1 (en) | 2020-10-30 | 2021-09-28 | Fast incremental shared constants |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116490893A true CN116490893A (zh) | 2023-07-25 |
Family
ID=78599119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180071736.6A Pending CN116490893A (zh) | 2020-10-30 | 2021-09-28 | 快速增量共享常量 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11694384B2 (zh) |
EP (1) | EP4238050A1 (zh) |
KR (1) | KR20230097004A (zh) |
CN (1) | CN116490893A (zh) |
TW (1) | TW202219887A (zh) |
WO (1) | WO2022093462A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11694384B2 (en) | 2020-10-30 | 2023-07-04 | Qualcomm Incorporated | Fast incremental shared constants |
US11657471B2 (en) | 2021-06-23 | 2023-05-23 | Qualcomm Incorporated | Methods and apparatus for constant data storage |
US11755336B2 (en) * | 2021-09-29 | 2023-09-12 | Advanced Micro Devices, Inc. | Distributed geometry |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7692660B2 (en) * | 2006-06-28 | 2010-04-06 | Microsoft Corporation | Guided performance optimization for graphics pipeline state management |
US8666712B2 (en) * | 2006-07-24 | 2014-03-04 | Ati Technologies Inc. | Physical simulations on a graphics processor |
US8593465B2 (en) | 2007-06-13 | 2013-11-26 | Advanced Micro Devices, Inc. | Handling of extra contexts for shader constants |
US8120608B2 (en) * | 2008-04-04 | 2012-02-21 | Via Technologies, Inc. | Constant buffering for a computational core of a programmable graphics processing unit |
US9799094B1 (en) * | 2016-05-23 | 2017-10-24 | Qualcomm Incorporated | Per-instance preamble for graphics processing |
US10430912B2 (en) * | 2017-02-14 | 2019-10-01 | Qualcomm Incorporated | Dynamic shader instruction nullification for graphics processing |
US10157443B1 (en) * | 2017-07-28 | 2018-12-18 | Qualcomm Incorporated | Deferred batching of incremental constant loads |
US11169811B2 (en) * | 2019-05-30 | 2021-11-09 | Advanced Micro Devices, Inc. | Graphics context bouncing |
US11694384B2 (en) | 2020-10-30 | 2023-07-04 | Qualcomm Incorporated | Fast incremental shared constants |
-
2020
- 2020-10-30 US US17/085,272 patent/US11694384B2/en active Active
-
2021
- 2021-09-27 TW TW110135805A patent/TW202219887A/zh unknown
- 2021-09-28 KR KR1020237013569A patent/KR20230097004A/ko active Search and Examination
- 2021-09-28 CN CN202180071736.6A patent/CN116490893A/zh active Pending
- 2021-09-28 EP EP21806436.8A patent/EP4238050A1/en active Pending
- 2021-09-28 WO PCT/US2021/052291 patent/WO2022093462A1/en active Application Filing
-
2023
- 2023-05-15 US US18/317,825 patent/US12056804B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
KR20230097004A (ko) | 2023-06-30 |
TW202219887A (zh) | 2022-05-16 |
WO2022093462A1 (en) | 2022-05-05 |
US12056804B2 (en) | 2024-08-06 |
EP4238050A1 (en) | 2023-09-06 |
US11694384B2 (en) | 2023-07-04 |
US20220139021A1 (en) | 2022-05-05 |
US20230290034A1 (en) | 2023-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12056804B2 (en) | Fast incremental shared constants | |
US11373268B2 (en) | Apparatus and method for graphics processing unit hybrid rendering | |
US11037358B1 (en) | Methods and apparatus for reducing memory bandwidth in multi-pass tessellation | |
CN116348904A (zh) | 用simo方法优化gpu内核以用于利用gpu高速缓存进行缩小 | |
CN116457830A (zh) | 基于区域不连续性的运动估计 | |
US11373267B2 (en) | Methods and apparatus for reducing the transfer of rendering information | |
US11087431B2 (en) | Methods and apparatus for reducing draw command information | |
US12067666B2 (en) | Run-time mechanism for optimal shader | |
US12079897B2 (en) | Visibility generation improvements in tile based GPU architectures | |
US20240256221A1 (en) | Floating point atomics using integer hardware | |
US20230269388A1 (en) | Adaptive block-based frame similarity encoding | |
US20240046543A1 (en) | Runtime mechanism to optimize shader execution flow | |
KR20240026992A (ko) | Gpu 스코핑에서의 성능 오버헤드 최적화 | |
CN117616446A (zh) | 基于图块的架构中的深度和阴影通道渲染的优化 | |
CN117501302A (zh) | 常数数据存储 | |
CN117980955A (zh) | 与样本空间相关联的聚焦分箱渲染 | |
CN117136375A (zh) | 用于图元批次的几何处理的可缩放图元速率结构 | |
CN116368527A (zh) | 基于gpu硬件的深度缓冲器方向跟踪 |
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 |