CN110515657B - 用于图形处理的间接命令缓冲区 - Google Patents
用于图形处理的间接命令缓冲区 Download PDFInfo
- Publication number
- CN110515657B CN110515657B CN201910420574.7A CN201910420574A CN110515657B CN 110515657 B CN110515657 B CN 110515657B CN 201910420574 A CN201910420574 A CN 201910420574A CN 110515657 B CN110515657 B CN 110515657B
- Authority
- CN
- China
- Prior art keywords
- command
- command buffer
- commands
- indirect
- processor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本发明题为“用于图形处理的间接命令缓冲区”。本发明描述了用于编码和执行间接命令缓冲区的系统、方法和计算机可读介质。处理器创建被配置用于在后来的时间点由图形处理器编码到的间接命令缓冲区。处理器在命令缓冲区内编码引用所述间接命令缓冲区的生成命令,其中所述生成命令触发在所述图形处理器上执行在数据结构内编码一组命令的第一操作。处理器也在命令缓冲区内编码触发在所述图形处理器上执行第二操作的消耗命令,所述第二操作执行在所述数据结构内编码的所述一组命令。在编码所述命令缓冲区之后,处理器提交所述命令缓冲区用于在所述图形处理器上执行。
Description
背景技术
本公开整体涉及图形处理领域。更具体地,但并非限制性地,本公开涉及在图形处理器诸如图形处理单元(GPU)上编码和执行间接命令缓冲区。
计算机、移动设备和其他计算系统通常具有至少一个可编程处理器,诸如中央处理单元(CPU)和专用于执行某些过程或功能(例如,图形处理)的其他可编程处理器。专用于执行图形处理操作的可编程处理器的示例包括但不限于GPU、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、和/或模拟GPU的CPU。GPU具体地讲包括被设计用于在并行数据流上执行命令的多个执行核心(也被称为着色器核心),使得其对于并行处理大数据块的操作比通用处理器更有效。例如,CPU充当主机并且将专门的并行任务交给GPU。具体地讲,CPU可以执行包括与视频帧相关联的图形数据的存储在系统存储器中的应用。不是处理图形数据,CPU而是将图形数据转发给GPU以进行处理;由此,释放CPU来与GPU处理图形数据同时地执行其他任务。
为了执行图形处理,应用利用图形应用程序接口(APl)诸如 或/>来与图形处理器诸如GPU交互(OPENGL是Silicon Graphics,Inc.的注册商标;DIRECT3D是Microsoft Corporation的注册商标;而METAL是Apple inc.的注册商标)。为了利用某些GPU能力,应用和/或开发者可以经由对GPU的一个或多个API调用来分配和传递一组图形API资源。每个API调用可以具有与生成API调用相关联的相当大的开销成本和/或延迟。另外,在特定一组API调用从帧到帧被使用的情况下,在多个帧上重复传递这组API调用常常是对系统资源相对低效的使用,并且是耗时的。因此,具有允许应用和/或设计者有效地管理API调用的图形API就可以有利于提高应用性能。
发明内容
在一个具体实施中,描述了一种创建被配置用于在稍后的时间点被图形处理器编码和执行的数据结构的方法。该方法在命令缓冲区内编码引用所述数据结构的第一命令,其中第一命令将由图形处理器执行并且使得图形处理器在所述数据结构内编码一组命令。该方法还在命令缓冲区内编码将由图形处理器执行的第二命令,其中第二命令的执行使得执行在所述数据结构内编码的所述一组命令。在编码命令缓冲区之后,该方法提交包括第一命令和第二命令的命令缓冲区用于在图形处理器上执行,其中处理器在提交命令缓冲区用于执行之后不能编码命令缓冲区。
在另一具体实施中,一种系统包括存储器和能操作以与存储器交互的处理器。处理器能够创建被配置用于由图形处理器在稍后的时间点编码的间接命令缓冲区,并且在命令缓冲区内编码引用所述间接命令缓冲区的生成命令,其中生成命令使得在图形处理器上执行在所述间接命令缓冲区中编码一组命令的第一操作。处理器也在所述命令缓冲区中编码使得在图形处理器上执行第二操作的消耗命令,第二操作执行在所述间接命令缓冲区内编码的所述一组命令。处理器然后提交包括生成命令和消耗命令的命令缓冲区用于在图形处理器上执行。当命令缓冲区被提交用于执行时,间接命令缓冲区不被填充以任何命令。
在另一具体实施中,描述了一种用于获取包括引用数据结构的生成命令和消耗命令的命令缓冲区的方法。当所述方法获取命令缓冲区时,所述数据结构不被填充以任何命令。该方法然后执行引用所述数据结构的生成命令以执行用于在所述数据结构内编码一组命令的第一操作,并且在编码这组命令之后执行消耗命令以执行用于执行在所述数据结构内编码的这组命令的第二操作。
在再一具体实施中,一种系统包括存储器和能操作以与存储器交互的图形处理器。图形处理器能够获取包括引用间接命令缓冲区的生成命令和消耗命令的命令缓冲区。当处理器获取命令缓冲区时,间接命令缓冲区不被填充以任何命令。处理器然后执行引用数据结构的生成命令以执行用于在所述数据结构内编码一组命令的第一操作,并且在编码这组命令之后执行消耗命令以执行用于执行在所述数据结构内编码的这组命令的第二操作。
在一种具体实施中,上述方法中的每一者及其变型形式可以被实施为在可编程控制设备上执行的一系列计算机可执行指令。此类指令可以使用任何一种或多种方便的编程语言。此类指令可以被收集到引擎和/或程序中,并且可以被存储在计算机系统或其他可编程控制设备可读和可执行的任何介质中。
附图说明
虽然将结合本文所示的例示性具体实施来描述某些具体实施,但本公开并不限于那些具体实施。相反,所有替代形式、修改形式和等同形式被包括在由权利要求限定的本发明的实质和范围内。在不按比例绘制的附图中,对于具有相同结构的部件和元件,在整个说明书和附图中使用相同的附图标号,并且对于具有与具有相同不带撇附图标号的那些部件和元件类似的功能和构造的部件和元件,使用带撇的附图标号。
图1是本公开的具体实施可在其中操作的图形处理路径的示意图。
图2是本公开的具体实施可在其中操作的系统的框图。
图3是包括生成和消耗间接命令缓冲区的命令的命令缓冲区的具体实施。
图4是包括用于间接命令缓冲区的多个消耗命令的命令缓冲区的具体实施。
图5是包括引用相同间接命令缓冲区的消耗命令的多个命令缓冲区的具体实施。
图6示出了间接命令缓冲区可以从与同一父命令编码器关联的命令继承状态和参数。
图7示出了未优化的间接命令缓冲区可以被优化以形成经优化的间接命令缓冲区。
图8示出了例示用于在命令缓冲区内编码命令以填充和执行间接命令缓冲区的图形处理操作的流程图。
图9示出了例示用于填充和执行间接命令缓冲区的图形处理操作的流程图。
图10是本公开的具体实施可在其中操作的计算系统的框图。
图11是本公开的具体实施可在其中操作的软件层和架构的具体实施的框图。
图12是本公开的具体实施可在其中操作的软件层和架构的另一具体实施的框图。
具体实施方式
本公开包括利用图形处理器编码和执行间接命令缓冲区的各种示例性具体实施。在一个具体实施中,图形API允许开发者和/或应用通过创建间接命令缓冲区来延迟编码一组命令。图形API允许CPU构建包括引用间接命令缓冲区的生成命令的命令缓冲区。图形API也允许CPU在命令缓冲区内编码消耗命令,以执行最终填充在间接命令缓冲区内的命令。在CPU向GPU呈现和提交命令缓冲区用于执行之后,图形调度器(例如,GPU驱动器和/或GPU固件)调度所提交的命令缓冲区内的命令用于GPU执行。当GPU从图形调度器接收生成命令时,GPU将命令填充在间接命令缓冲区内。GPU也可以接收在填充命令之后且在执行间接命令缓冲区之前优化(例如,存储器压缩)间接命令缓冲区的命令。一旦GPU完成编码和优化间接命令缓冲区,GPU就在从图形调度器接收消耗命令之后执行间接命令缓冲区内的命令。
在以下描述中,为了解释的目的,阐述了很多具体细节,以便提供对发明构思的彻底理解。作为本说明书的一部分,本公开的附图中的一些附图以框图形式表示结构和设备,以避免使所公开的原理复杂难懂。为了清晰起见,实际具体实施的并非所有特征都有必要进行描述。此外,本公开中所使用的语言已主要被选择用于可读性和指导性目的,并且可能没有被选择为划定或限定本发明的主题,从而诉诸于所必需的权利要求以确定此类发明主题。在本公开中对“一个具体实施”或“具体实施”的提及意指结合该具体实施所述的特定特征、结构或特性被包括在至少一个具体实施中,并且对“一个具体实施”或“具体实施”的多个提及不应被理解为必然地全部是指同一具体实施。
除非明确限定,否则术语“一个”、“一种”和“该”并非旨在指代单数实体,而是包括其特定示例可以被用于举例说明的一般性类别。因此,术语“一个”或“一种”的使用可以意指至少一个的任意数目,包括“一个”、“一个或多个”、“至少一个”和“一个或不止一个”。术语“或”意指可选项中的任意者以及可选项的任何组合,包括所有可选项,除非可选项被明确指示是相互排斥的。短语“中的至少一者”在与项目列表组合时是指列表中的单个项目或列表中项目的任何组合。所述短语并不要求所列项目的全部,除非明确如此限定。
如本文所用,本公开中的术语“内核”是指通常与相对较高或最高的安全级别相关联的操作系统(例如,Mac OSXTM)的核心层的一部分的计算机程序。“内核”能够执行某些任务,诸如管理硬件交互(例如,硬件驱动器的使用)和处理操作系统的中断。为了防止用户空间内的应用程序或其他进程干扰“内核”,“内核”的代码通常被加载到存储器的单独的受保护区域中。在这个上下文内,术语“内核”在本公开通篇可以与术语“操作系统内核”互换。
本公开还使用术语“计算内核”,其具有另一含义,并且不应与术语“内核”或“操作系统内核”混淆。具体地讲,术语“计算内核”是指用于图形处理器(例如GPU、DSP或FPGA)的程序。在图形处理操作的上下文中,用于图形处理器的程序被分类为“计算内核”或“着色器”。术语“计算内核”是指执行一般计算操作(例如,计算命令)的图形处理器的程序,术语“着色器”是指执行图形操作(例如,渲染命令)的图形处理器的程序。
如本文所用,本公开中的术语“命令”是指在数据结构诸如命令缓冲区或命令列表内编码的图形API命令。术语“命令”可以是指图形处理器能够执行的渲染命令(例如,用于绘制调用)和/或计算命令(例如,用于分派调用)。术语“渲染命令”和“计算命令”是图形处理领域的技术人员所理解的熟知的术语。
对于本公开的目的,术语“处理器”是指能够处理来自一个或多个数据源诸如存储器的数据的可编程硬件设备。一种类型的“处理器”是未被定制用于执行特定操作(例如,过程、计算、功能、或任务)、而是被构建用于执行一般计算操作的通用处理器(例如,CPU)。其他类型的“处理器”是被定制用于执行特定操作(例如,过程、计算、功能、或任务)的专用处理器。专用处理器的非限制性示例包括GPU、浮点处理单元(FPU)、DSP、FPGA、专用集成电路(ASIC)、和嵌入式处理器(例如通用串行总线(USB)控制器)。
如本文所用,术语“图形处理器”是指用于执行图形处理操作的专用处理器。“图形处理器”的示例包括但不限于GPU、DSP、FPGA和/或模拟GPU的CPU。在一个或多个具体实施中,图形处理器也能够执行通用处理器能执行的非特定操作。如前所述,这些一般计算操作的示例是与计算内核相关联的计算命令。
图1是本公开的具体实施可在其中操作的图形处理路径100的示意图。图1示出了图形处理路径100利用处理器资源110和图形处理器资源112。处理器资源110包括一个或多个通用处理器(例如CPU),其中每个处理器具有一个或多个核心。处理器资源110也可以包含存储器(例如,高速缓存存储器)、微控制器和/或处理器可以用来处理供图形处理器资源112执行的命令的任何其他硬件资源,和/或与存储器(例如,高速缓存存储器)、微控制器和/或处理器可以用来处理供图形处理器资源112执行的命令的任何其他硬件资源通信。图形处理器资源112包括一个或多个图形处理器(例如GPU),其中每个图形处理器具有一个或多个执行核心和用于执行图形和/或一般计算操作的其他计算逻辑。换句话讲,图形处理器资源112也可以涵盖存储器(例如,高速缓存存储器)和/或用于执行程序的其他硬件资源诸如着色器或计算内核,和/或与存储器(例如,高速缓存存储器)和/或用于执行程序的其他硬件资源诸如着色器或计算内核通信。例如,图形处理器资源112能够利用渲染流水线来处理着色器并且利用计算流水线来处理计算内核。
图1示出了应用101为了编码用于图形处理器资源112执行的命令的目的而生成图形API调用。为了生成图形API调用,应用101包括以图形API编写的代码。图形API(例如,)表示定义应用101能够以图形处理器具有的功能和/或其他操作的所发布和/或标准化的图形库和框架。例如,图形API允许应用101能够控制渲染和计算命令的组织、处理和提交,以及那些命令的相关数据和资源的管理。
在一个或多个具体实施中,应用101是调用图形API传送图形场景的描述的图形应用。具体地讲,用户空间驱动器102接收来自应用101的图形API调用,并将图形API调用映射到图形处理器资源112所理解且能执行的操作。例如,在被传输给内核驱动器103之前,用户空间驱动器102可以将API调用转换成在命令缓冲区内编码的命令。转换操作可以涉及用户空间驱动器102将着色器和/或计算内核编译成能被图形处理器资源112执行的命令。命令缓冲区然后被发送给内核驱动器103以准备命令缓冲区用于在图形处理器资源112上执行。例如,内核驱动器103可以执行要被发送给图形处理器资源112的命令缓冲区的存储器分配和调度。出于本公开的目的并且为了便于描述和解释,除非另外指明,否则用户空间驱动器102和内核驱动器103统称为图形驱动器。
图1示出了可以在图形处理器内的嵌入式微控制器上执行的图形处理器固件104获取处理器资源110提交用于执行的命令缓冲区。图形处理器固件104可以执行用于管理图形处理器硬件105的多种操作,包括使图形处理器硬件105上电和/或调度图形处理器硬件105接收用于执行的命令的顺序。在调度命令之后,在图1中,图形处理器固件104向图形处理器硬件105发送命令流。图形处理器硬件105于是根据图形处理器硬件105接收命令的顺序来执行命令流内的命令。图形处理器硬件105包括多个执行核心,并且因此可以并行地执行多个所接收的命令。图形处理器硬件105然后将所渲染的帧输出给帧缓冲区106。在一个具体实施中,帧缓冲区106是包含驱动显示器107的位图的存储器的一部分诸如存储器缓冲区。显示器107随后访问帧缓冲区106并且(例如,利用显示控制器)将所渲染的帧(例如,位图)转换成视频信号以用于显示。
为了填充和执行间接命令缓冲区,图形驱动器(例如,用户空间驱动器102和内核驱动器103)接收生成用于生成和消耗间接命令缓冲区的命令的一个或多个图形API调用。在本公开中也被称为“生成命令”的填充间接命令缓冲区的命令引用图形处理器稍后可以编码到其中的间接命令缓冲区。当图形处理器硬件105执行生成命令时,图形处理器硬件105开始将命令编码到所引用的间接命令缓冲区中。换句话讲,图形处理器硬件105基于生成命令的执行将命令填充到所引用的间接命令缓冲区中。执行所引用的间接命令缓冲区的命令在本公开中被称为“消耗命令”。当图形处理器硬件105接收到消耗命令时,图形处理器硬件105执行被填充在间接命令缓冲区内的命令。出于本公开的目的,术语“编码”与术语“填充”同义。
在基于图形API调用创建间接命令缓冲区时,图形驱动器可以为间接命令缓冲区建立多个设置。图形驱动器可以为间接命令缓冲区建立的设置的示例包括(1)可以被填充在间接命令缓冲区内的命令的类型;(2)命令缓冲区内每个命令的最大逻辑步长(例如,以字节为单位),(3)在间接命令缓冲区中使用的特征;(4)渲染或计算流水线是否从父命令编码器继承缓冲区;(5)可以每个命令设置的不同参数缓冲区(例如,顶点参数缓冲区、片段参数缓冲区、内核参数缓冲区)的最大绑定计数;和(6)间接命令缓冲区可以包含的最大命令数。在创建间接命令缓冲区之后,但在对间接命令缓冲区进行编码之前,间接命令缓冲区表示被存储在存储器内的不透明数据结构,并且适于在稍后的时间点编码渲染命令(例如,绘制调用)或计算命令(例如,分派调用)。在图形驱动器创建间接命令缓冲区之后,间接命令缓冲区可以由图形处理器或通用处理器在稍后的时间点进行编码。
与图形驱动器通常生成的命令缓冲区相比,图形处理器硬件105可以重新执行相同的间接命令缓冲区任意次数。例如,图形驱动器可以生成包括引用相同间接命令缓冲区的多个消耗命令的单个命令缓冲区。消耗命令可以位于相同命令编码器内,或者可以位于不同的命令编码器上。除此之外或另选地,图形驱动器可以生成多个命令缓冲区,其中每个命令缓冲区包括引用相同间接命令缓冲区的消耗命令。只要间接命令缓冲区没有已经在飞行中,图形处理器硬件就可以重新执行间接命令缓冲区。
图形驱动器也可以接收生成其他类型的用于间接命令缓冲区的命令的图形API调用。所述其他类型的命令可以被编码在同一命令缓冲区内或被编码在另一命令缓冲区内。其他类型的命令的示例包括用于复制间接命令缓冲区、优化间接命令缓冲区、以及重置间接命令缓冲区的命令。用于复制间接命令缓冲区的命令在被图形处理器硬件105执行时将内容从源间接命令缓冲区复制到目标间接命令缓冲区。在一些示例中,用于优化间接命令缓冲区的命令在被图形处理器硬件105执行时移除冗余状态设置和/或执行将间接命令缓冲区内的未编码命令空间移动到间接命令缓冲区内的特定位置(例如,朝间接命令缓冲区的末端移动)的存储器压缩操作。在一些示例中,用于重置间接命令缓冲区的命令在被图形处理器硬件105执行时删除间接命令缓冲区的内容以允许图形处理器硬件105编码新的命令。具体地,在执行重置之后,当图形处理器硬件105接收到后续生成命令时,图形处理器硬件105能够在间接命令缓冲区内编码新的命令,图形处理器硬件105可以在接收消耗命令之后执行所述新的命令。
虽然图1示出了图形处理路径100的特定具体实施,但本公开并不限于图1所示的特定具体实施。例如,图形处理路径100可以包括图1中未具体示出的其他框架、API和/或应用层服务。例如,应用101可以具有对核心动画的访问以动画化应用101的视图和/或用户界面。图1也没有示出图形处理路径100可以利用的所有硬件资源和/或部件(例如,电源管理单元或存储器资源,诸如高速缓存或系统存储器)。除此之外或另选地,尽管图1示出了处理器资源110和图形处理器资源112是分开的设备,但是其他具体实施可以将处理器资源110和图形处理器资源112集成在单个设备(例如片上系统)上。图1的使用和讨论仅仅是便于描述和解释的示例。
图2是本公开的具体实施可在其中操作的系统200的框图。图2示出了包括处理器资源110和图形处理器资源112的系统200。图2示出了处理器线程204A和204B。处理器线程204A负责利用命令编码器206A和206B,并且处理器线程204B负责利用命令编码器206C和206D。命令编码器206A和206B在命令缓冲区208A内编码命令,并且命令编码器206C和206D在命令缓冲区208B内编码命令。在其他具体实施中可以包括与图2的示例中所示的两个处理器线程和四个命令编码器相比不同数量的处理器线程和命令编码器。命令编码器206A-206D表示将命令写入命令缓冲区208A和208B中用于图形处理器资源112执行的编码器。命令编码器类型的示例包括但不限于Blit命令编码器(例如,图形API资源复制和图形API资源同步命令)、计算命令编码器(例如,计算命令)、和渲染命令编码器(例如,渲染命令)。
也被称为“命令列表”的命令缓冲区208A和208B表示存储用于图形处理器资源112执行的被编码命令的序列的数据结构。当一个或多个图形API调用呈现和提交命令缓冲区208A和208B给图形驱动器(例如,图1所示的用户空间驱动器102)时,处理器资源110将命令缓冲区208A和208B组织到命令队列210中。命令队列210组织命令缓冲区208被发送给图形处理器资源112用于执行的顺序。以图2为例,命令队列210包含命令缓冲区208C-208N,其中命令缓冲区208C位于命令队列210的顶部,并且是要被发送到图形处理器资源112用于执行的下一命令缓冲区208C。当处理器资源110提交命令缓冲区208A和208B用于执行时,处理器资源110不能将任何附加命令编码到命令缓冲区208A和208B中。
在提交命令缓冲区208之后,系统200内的图形调度器212获取命令缓冲区208并且对命令缓冲区208内的命令进行调度和优先级排序以用于执行。例如,参考图1,图形调度器212可以由执行图形处理器固件104的微控制器来实现。具体地,微控制器可以与图形处理器资源112内的图形处理器被嵌入在同一封装中,并设置用于预处理图形处理器的命令。在其他具体实施中,微控制器与图形处理器物理地分开。除此之外或另选地,图形调度器212执行的调度操作中的至少一些可以在在处理器资源110上执行的图形驱动器内核上运行。在图1中,图形驱动器内核将对应于内核驱动器103。
图2示出了图形调度器212已经调度了命令214A-214E用于在图形处理器资源112上执行。在图2的示例中,命令214A表示生成命令,生成命令当在稍后的时间点执行时在所引用的间接命令缓冲区222内填充命令226A-226Z。命令214A充当中间API调用(例如,不是来自图1中所示应用101的图形API调用)用于访问图形处理器资源112内的执行核心。换句话讲,使图形处理器资源112在稍后的时间点在间接命令缓冲区222内编码命令就将流水线状态暴露给开发者。在一个具体实施中,命令214A是使得图形处理器资源112填充渲染命令226A-226Z的间接渲染命令。在另一具体实施中,命令214A是使得图形处理器资源112填充计算命令226A-226Z的间接计算命令。当图形处理器资源112执行命令214A时,图形处理器资源112可以获取所引用的间接命令缓冲区222的大小以及图形处理器资源112编码和输出命令的存储器目标。然后,为了编码和输出命令,图形处理器线程218A-218Z各自负责利用编码器220A-220Z来在间接命令缓冲区222内编码命令226A-226Z。如图2所示,每个图形处理器线程218A-218Z可以并行地在间接命令缓冲区内编码不同的命令226A-226Z。
使命令214A充当中间API调用(例如,不是来自图1所示应用101的图形API调用)用于访问图形处理器资源112执行核心就为开发者提供了额外的灵活性来在间接命令缓冲区222内填充命令226A-226Z。具体地,命令226A-226Z被直接编码成图形处理器资源112的硬件能够理解的语言。这样,间接命令缓冲区222可以包括利用不同的基元类型或绘制调用类型的命令226A-226Z。例如,图形处理器资源112编码用于利用三角基元类型来绘制对象的命令226B并且编码用于利用点基元类型来绘制另一对象的命令226D。图形处理器资源112也可以为命令226A-226Z编码不同的绘制调用类型,诸如:(1)包括基元列表的绘制调用;(2)包括基元索引列表的绘制调用;(3)包括面片列表的镶嵌绘制调用;和/或(4)包括面片索引列表的镶嵌绘制调用。例如,图形处理器资源112编码用于利用包括基元列表的绘制调用的命令226B和用于利用包括基元索引列表的绘制调用的命令226E。
相比之下,一些图形API使开发者声明编码间接缓冲区的图形API调用(例如,绘制调用)的固定格式结构。通常,图形驱动器(例如,图1中所示的用户空间驱动器102)执行附加转换步骤将命令转换成图形处理器资源112的可执行数据。然而,固定格式结构和附加转换步骤阻止来自间接缓冲区的命令利用不同的基元类型或绘制调用类型。以图2为例,处理器资源110可以编码用于为间接缓冲区将基元类型设置为三角的命令214B。间接缓冲区内的命令利用所声明的三角基元类型来绘制对象。即,间接缓冲区内的命令继承命令214B所设置的基元类型。间接缓冲区内的命令将不能利用其他基元类型诸如点、线、线条带或三角条带来绘制对象。另外,间接缓冲区内的命令将具有与命令214B相同的绘制类型。
图2还示出了命令214E表示消耗命令,消耗命令使得执行所引用的间接命令缓冲区222内的被编码命令226A-226Z。如前所述,图形处理器资源112基于命令214A的执行来编码命令226A-226Z。一旦图形处理器资源112完成编码命令226A-226Z,图形调度器212就可以随后调度命令214E用于执行。当图形处理器资源112执行命令214E时,图形处理器资源112利用图形流水线224执行间接命令缓冲区222。如果间接命令缓冲区222包括计算命令,则图形流水线224是计算流水线。相反,如果间接命令缓冲区222包括渲染命令,则图形流水线224是图形渲染流水线。
虽然图2示出了用于编码和消耗间接命令缓冲区222的系统200的特定具体实施,但本公开并不限于图2中所示的特定具体实施。例如,虽然图2示出了利用图形处理器资源112来编码命令226A-Z,但系统200也可以被配置为利用处理器资源110来编码间接命令缓冲区222。另外,尽管图2示出了单个命令队列210;但本领域的普通技术人员知道,命令缓冲区208可以被放置到图2中未示出的附加命令队列210中。图2的使用和讨论仅仅是便于描述和解释的示例。
图3是包括生成和消耗间接命令缓冲区222的命令的命令缓冲区208的具体实施。回顾通用处理器(例如,CPU)呈现并提交命令缓冲区208用于在图形处理器上执行。在通用处理器提交命令缓冲区208之后,通用处理器不能将附加命令编码到命令缓冲区208中。图3示出了命令缓冲区208包括两个不同的区部302和304。区部302表示命令编码器(例如,计算命令编码器)添加到命令缓冲区208的命令,区部304表示另一命令编码器(例如,渲染命令编码器)添加到命令缓冲区208的命令。每个命令编码器可以与用于在命令缓冲区208的每个区部302和304内编码命令的特定图形API资源(例如,缓冲区和纹理)以及状态(例如,模板状态和流水线状态)相关联。
在区部302内,命令214A表示允许在稍后的时间点在间接命令缓冲区222内填充命令的生成命令。例如,命令214A可以是启动用于在间接命令缓冲区222内编码命令的图形流水线的计算内核(例如,分派调度)。区部304包含表示触发间接命令缓冲区222的执行的消耗命令的命令214E。例如,命令214A可以是启动用于执行间接命令缓冲区222内的命令的图形流水线的着色器(例如,绘制调度)。
图4是包括用于间接命令缓冲区222的多个消耗命令的命令缓冲区208的具体实施。图4与图3类似,不同的是图4示出了附加区部306和命令214P和214R。附加区部306对应于另一命令编码器(例如,另一渲染命令编码器)添加到命令缓冲区208的命令。命令214P和214R表示在图形处理器执行命令214E之后使得图形处理器重新执行间接命令缓冲区222的附加消耗命令。如图4所示,命令214P使得图形处理器在与命令214E相同的命令编码器内重新执行间接命令缓冲区222。命令214R使得图形处理器在另一命令编码器处重新执行间接命令缓冲区222。
图5是包括引用间接命令缓冲区222的消耗命令的多个命令缓冲区208A和208B的具体实施。图5与图3类似,不同的是图5示出了包括命令214P和214R的附加命令缓冲区208B。如图5所示,命令缓冲区208A包括使得图形处理器生成间接命令缓冲区222的命令214A和使得图形处理器执行间接命令缓冲区222的命令214E。另一命令缓冲区208B包括区部402和404,其中每个区部402和404对应于不同命令编码器(例如,渲染命令编码器)添加到命令缓冲区208B的命令。命令214P和214R表示在图形处理器执行命令214E之后使得图形处理器重新执行相同间接命令缓冲区222内的被编码命令的附加消耗命令。
图6示出了间接命令缓冲区222可以从与同一父命令编码器关联的命令继承状态和参数。在图6中,图形调度器212包括对应于命令缓冲区208的命令214A-214Z。命令214B表示设置某些状态诸如流水线状态的图形API命令。例如,如果父命令编码器是渲染命令编码器,则命令214B设置后续命令214诸如命令214C-214E可以利用的渲染流水线状态。如果父命令编码器是计算命令编码器,则命令214B为后续命令214设置计算流水线状态。命令214C表示为图形流水线设置一个或多个参数(例如,流水线状态的参量)的图形API命令。命令214D和214E分别表示不修改命令214B或214C所设置的状态或参数的命令。例如,命令214D和214E利用着色器和命令214B和214C所设置的着色器参量来执行绘制调用。
命令缓冲区608的区部602对应于父命令编码器添加到命令缓冲区208的命令(例如,命令214A-214G)。父命令编码器是指添加表示执行间接命令缓冲区222的消耗命令的命令214F的命令编码器。当图形处理器执行间接命令缓冲区222内的被编码命令时,间接命令缓冲区222可以能够继承父命令编码器在命令缓冲区208内设置的一个或多个状态和/或一个或多个参数。例如,当图形处理器执行间接命令缓冲区222中的命令时,图形处理器可以仅继承命令214B设置的状态,仅继承命令214C设置的参数,或者继承分别由命令214B和214C设置的状态和参数两者。换句话说,间接命令缓冲区222能够在执行间接命令缓冲区222之前独立地继承父命令编码器设置的最后状态和/或参数。
当间接命令缓冲区222不从与父命令编码器相关联的先前命令(例如,214B和214C)继承状态和/或参数时,间接命令缓冲区222内的命令可以随后设置状态和/或参数。例如,回顾图形API当在间接命令缓冲区222内填充命令时将流水线状态暴露给开发者。如果间接命令缓冲区222不从父命令编码器继承流水线状态,则间接命令缓冲区222内的每个命令可以设置和覆写先前流水线状态值。在一些具体实施中,间接命令缓冲区222可能无法从父命令编码器继承某些状态和/或参数。例如,间接命令缓冲区222可以被配置为不从父命令编码器继承纹理和采样器。另外,间接命令缓冲区222可能无法从父命令编码器继承状态,诸如深度模板状态、剔除模式、绕序、视口和剪裁矩形。
图6也示出了间接命令缓冲区222修改的任何状态或参数,图形驱动器能够随后将修改的状态和/或参数恢复回在执行间接命令缓冲区222之前的值。当图形处理器执行间接命令缓冲区222内的命令时,命令214B和214C分别初始设置的状态和/或参数可以改变。为了防止命令缓冲区208内的后续命令214(例如,命令214G)利用由执行间接命令缓冲区222生成的经修改的状态和/或参数,图形驱动器将状态和/或参数恢复到在执行间接命令缓冲区222之前的值。例如,在图形处理器完成执行间接命令缓冲区222之后,图形驱动器可以在执行命令214G之前恢复分别由命令214B和214C设置的状态和/或参数。
图7示出了未优化的间接命令缓冲区700可以被优化以形成经优化的间接命令缓冲区702。为了生成经优化的间接命令缓冲区702,图形处理器可以在填充间接命令缓冲区222之后但在执行间接命令缓冲区222之前执行优化命令。例如参考图2,优化命令可以对应于命令214C,其在图形调度器212内位于命令214A(例如,生成命令)之后并且位于命令214E(例如,消耗命令)之前。当图形处理器执行优化命令时,图形处理器执行将未优化的间接命令缓冲区700转换成经优化的间接命令缓冲区702的优化操作。在一个或多个具体实施中,优化操作执行存储器压缩操作以生成经优化的间接命令缓冲区702。除此之外或另选地,优化操作移除在已编码命令空间704内编码的命令的冗余状态设置。
图7描绘了执行存储器压缩命令以将已编码的命令空间704A-704Z聚集在一起以及将未编码的命令空军706A-706E聚集在一起的优化命令。回顾在填充间接命令缓冲区222之前,间接命令缓冲区222是以存储器存储的不透明数据结构。由于图形处理器包括用于执行并行处理的多个不同线程,因此不同的线程可以同时在间接命令缓冲区222内填充不同命令。因此,被编码的间接命令缓冲区222可以包括未编码命令空间706的一个或多个面片。图7示出了未优化的间接命令缓冲区700包括未编码的命令空间706的单个面片。
如前所述,图形处理器可以包括读取和调度命令以供图形处理器的执行核心执行的微控制器。例如,微控制器可以读取包含三角基元的绘制命令,并且将顶点处理调度到执行核心上,然后将像素片段调度到执行核心上。微控制器从未优化的间接命令缓冲区700串行地读取和调度命令。使微控制器读取未编码的命令空间706将处理时间浪费在空命令上。以图7为例,微控制器浪费时间处理未优化的间接命令缓冲区700的未编码命令空间706A-706E内的空命令。
与未优化的间接命令缓冲区700相比,优化操作已将所有未编码的命令空间706A-706E移到经优化的间接命令缓冲区702的后面,并且将所有已编码的命令空间704A-704Z移到经优化的间接命令缓冲区702的前面。通过使已编码的命令空间704A-704Z移到经优化的间接命令缓冲区702的前面,微控制器能够处理已编码的命令空间704A-704Z内的命令,而不处理未编码的命令空间706A-706E。一旦微控制器处理已编码的命令空间704Z内的最后一个命令,微控制器就返回到命令缓冲区以继续执行。这样,微控制器忽略未编码的命令空间706A-706E。
在一个或多个具体实施中,优化命令能够移除在已编码命令空间704内编码的命令的冗余状态设置。不从父命令编码器继承状态的结果是,未优化的间接命令缓冲区700中的命令可以连续地设置状态,即使是冗余的。以图7为例,已编码的命令空间704A、704B和704C内的命令可以具有相同的状态设置。在先前没有从父命令编码器继承状态的情况下,图形处理器在执行未优化的间接命令缓冲区700时将花费时间为已编码的命令空间704A、704B和704C内的每个命令设置状态。为了减少在执行未优化的间接命令缓冲区700时的冗余状态设置和相关联的成本,优化操作能够移除经优化的间接命令缓冲区702内的冗余状态设置。在一个或多个具体实施中,图形处理器可以移除指定命令范围内的冗余状态。具有冗余状态被移除的指定命令范围(例如,在64或128个绘制调度上移除冗余状态)可以实现所期望的并行性,同时减少冗余状态。尽管移除经优化的间接命令缓冲区702内的所有冗余状态可以减少图形处理器在设置状态值上花费的时间量,但是图形处理器不再能够并行地处理命令,而是缓慢地串行地处理整个经优化的间接命令缓冲区702。
图8示出了例示用于在命令缓冲区内编码命令以填充和执行间接命令缓冲区的图形处理操作800的流程图。在一个具体实施中,操作800可以由图1和图2所示的处理器资源110来实现。例如,操作800可以由计算系统的CPU实现。具体地,操作800内的框可以由图1所示的用户空间驱动器102和内核驱动器103来实现。图8的使用和讨论仅仅是有利于解释的示例,并不旨在将本公开限制于这个具体示例。例如,框806可以是任选的,使得操作800可以不在操作800的所有具体实施中都执行框806。
操作800可以在框802处开始并且创建间接命令缓冲区。当操作800创建间接命令缓冲区时,操作800可以为间接命令缓冲区建立多个设置。操作800可以为间接命令缓冲区建立的设置的示例包括(1)可以被填充在间接命令缓冲区内的命令的类型;(2)命令缓冲区内每个命令的最大逻辑步长(例如,以字节为单位),(3)在间接命令缓冲区中使用的特征;(4)渲染或计算流水线是否从父命令编码器继承缓冲区;(5)可以每个命令设置的不同参数缓冲区(例如,顶点参数缓冲区、片段参数缓冲区、内核参数缓冲区)的最大绑定计数;和(6)间接命令缓冲区可以包含的最大命令数。在一个或多个具体实施中,间接命令缓冲区可以被配置为具有恒定步长,使得图形处理器线程能够独立且同时在间接命令缓冲区内编码每个命令。
在框804处,操作800在命令缓冲区内编码引用间接命令缓冲区的生成命令。回顾在操作800创建间接命令缓冲区之后,间接命令表示以存储器存储的不透明数据结构。操作800不限定间接命令缓冲区的布局。相反,间接命令缓冲区的布局在图形处理器随后执行在命令缓冲区内编码的生成命令时发生。通过使图形处理器编码间接命令缓冲区,间接命令缓冲区内的命令被直接编码成图形处理器的硬件能够理解和执行的语言。
操作800然后可以移动到框806,并且在命令缓冲区内编码引用间接命令缓冲区的一个或多个其他命令。例如,操作800可以编码优化命令,优化命令使得图形处理器执行存储器压缩操作和/或移除指定数量的命令的冗余状态设置。又如,操作800可以将所引用的间接命令缓冲区复制到目标间接命令缓冲区。操作800然后可以移动到框808,并且在命令缓冲区内编码引用间接命令缓冲区的消耗命令。图形处理器可以在图形处理器在稍后的时间点执行消耗命令时执行所引用的间接命令缓冲区。之后,操作800然后可以移动到框810并且提交包括生成命令、优化命令和消耗命令的命令缓冲区用于在图形处理器上执行。一旦操作800提交命令缓冲区,操作800就不能将任何附加命令编码到命令缓冲区。
图9示出了例示用于填充和执行间接命令缓冲区的图形处理操作900的流程图。在一个具体实施中,操作900可以由图1和图2所示的图形处理器资源112来实现。例如,操作900可以由计算系统的GPU实现。具体地,操作900内的框可以由GPU内的嵌入式微控制器和执行核心来实现。图9的使用和讨论仅仅是有利于解释的示例,并不旨在将本公开限制于这个具体示例。例如,框908可以是任选的,使得操作900可以不在操作900的所有具体实施中都执行框906。
操作900可以在框902处开始并且接收包括生成命令、消耗命令和引用间接命令缓冲区的一个或多个其他命令的命令缓冲区。可以在命令缓冲区中找到的其他命令的示例包括用于将间接命令缓冲区复制到目标命令缓冲区的命令、用于优化间接命令缓冲区的命令、以及用于重置间接命令缓冲区以在间接命令缓冲区内编码新命令的命令。之后,操作900前进到框904并且调度生成命令、消耗命令和所述其他命令用于在图形处理器上执行。
在框906处,操作900执行生成命令以在间接命令缓冲区内编码命令。如先前所公开,生成命令充当中间API调用,其访问将流水线状态暴露给开发者的图形处理器内的执行核心并且将间接命令缓冲区内的命令直接编码成图形处理器的硬件能够理解的语言。这样,间接命令缓冲区的命令可以利用不同的基元类型或绘制调用类型。例如,操作900可以编码一个命令用于利用三角基元类型来绘制对象,并且编码后续命令用于利用点基元类型来绘制另一对象。
操作900然后移动到框908并且执行引用间接命令缓冲区的一个或多个所述其他命令。例如,操作900可以在同一命令缓冲区内接收用于重置和删除间接命令缓冲区内的内容的命令。通过重置间接命令缓冲区,操作900可以在执行间接命令缓冲区之前在间接命令缓冲区内编码新的命令。其他具体实施可以使操作900从其他命令缓冲区接收所述其他命令。操作900然后可以继续到框910并且执行消耗命令以执行间接命令缓冲区内的命令。
示例性硬件和软件
本公开可在各式各样的电子设备中以及相对于各式各样的电子设备有所涉及和使用,包括单处理器和多处理器计算系统和包含单处理或多处理计算系统的直立式设备(例如,相机、游戏系统、电器等)。本文的讨论是参照多种不同电子计算设备(例如,计算机、膝上型计算机、移动设备等)的常见计算配置来进行的。这个常见计算配置可以具有包括一个或多个微处理器的CPU资源和包括一个或多个GPU的图形处理资源。具有其它(现在或未来)已知或常见硬件配置的其它计算系统也完全被设想和预期。虽然一些具体实施的关注点涉及采用最小化GPU的移动系统,但是硬件配置也可以例如存在于服务器、工作站、膝上型计算机、平板计算机、台式计算机、游戏平台(不管是否是便携式的)、电视机、娱乐系统、智能电话、电话、或任何其它计算设备(不管是移动式的还是固定式的、直立式的还是通用的)中。
参见图10,所公开的具体实施可以由代表性计算系统1000来执行。例如,代表性计算机系统可以充当最终用户设备或生成或显示图形的任何其它设备。例如,计算系统1000可以在电子设备中实施,诸如通用计算机系统、电视机、机顶盒、媒体播放器、多媒体娱乐系统、图像处理工作站、手持式设备、或可与本文所述显示器或展示设备耦接或者可包含本文所述显示器或展示设备的任何设备。计算系统1000可以包括一个或多个处理器1005、存储器1010(110A和110B)、一个或多个存储设备115、以及(例如包括一个或多个图形处理器的)图形硬件1020。计算系统1000也可以具有设备传感器1025,设备传感器可以包括以下中的一者或多者:深度传感器(诸如深度相机)、3D深度传感器、成像设备(诸如固定图像捕捉单元和/或支持视频的图像捕捉单元)、RGB传感器、接近传感器、环境光传感器、加速度计、陀螺仪、任何类型的静止或视频相机、LIDAR设备、SONAR设备、麦克风、CCD(或其它图像传感器)、红外传感器、温度计等。这些及其它传感器可与适当编程一起结合一个或多个GPU、DSP或传统微处理器工作,使得传感器输出可被正确地解释和/或组合并解释。
返回图10,系统1000也可以包括通信接口1030、用户接口适配器1035、和显示器适配器1040,所有这些都可以经由系统总线、背板、织物或网络1045耦接。存储器1010可以包括处理器1005和图形硬件120使用的一种或多种不同类型的非暂态介质(例如固态、DRAM、光学、磁等)。例如,存储器1010可以包括存储器高速缓存、只读存储器(ROM)、和/或随机存取存储器(RAM)。存储装置1015可以包括一个或多个非暂态存储介质,包括例如磁盘(固定盘、软盘和可移除盘)和磁带、光学介质诸如CD-ROM和数字视频光盘(DVD)、以及半导体存储器设备诸如电可编程只读存储器(EPROM)、固态存储设备、和电可擦除可编程只读存储器(EEPROM)。存储器1010和存储装置1015可以被用于保持媒体数据(例如音频、图像、和视频文件)、偏好信息、设备配置文件信息、被组织成一个或多个模块且以任何期望的计算机编程语言编写的计算机程序指令、和任何其他合适的数据。当被处理器1005和/或图形硬件1020执行时,此类计算机程序代码可以实施本文所述操作或过程中的一者或多者。此外,系统可以采用微控制器(未示出),微控制器也可以执行此类计算机程序代码以实现本文所示的操作或计算机可读介质权利要求中的一者或多者。在一些具体实施中,微控制器可以作为图形处理器或通用处理器资源的陪伴而操作。
通信接口1030可以包括基于半导体的电路,并且可以被用于将计算系统1000连接到一个或多个网络。示例性网络包括但不限于:本地网络,诸如USB网络;商业局域网;以及广域网络诸如互联网,并且可使用任何合适的技术(例如,有线或无线)。可实施的通信技术包括基于蜂窝的通信(例如,LTE、CDMA、GSM、HSDPA等)或其它通信(Apple lightning、以太网、USB、/>等)。(WIFI是Wi-Fi AllianceCorporation的注册商标。BLUETOOTH是Bluetooth Sig,Inc.的注册商标,THUNDERBOLT和FIREWIRE是Apple Inc.的注册商标)。用户接口适配器135可用于连接键盘150、麦克风155、指针设备160、扬声器165、和其他用户接口设备诸如触摸板和/或触摸屏(未示出)。显示器适配器140可以被用于连接一个或多个显示器170。
处理器1005可以执行实施或控制由计算系统1000所执行的多种功能(例如评估、转换、数学计算、或图形程序编译等)的操作所必要的指令。处理器1005可以例如驱动显示器1070并且可以从用户接口适配器1035或系统所实施的任何其他用户接口接收用户输入。用户接口适配器1035例如可以呈现多种形式诸如按钮、小键盘、触摸板、鼠标、拨号盘、点击轮、键盘、显示屏和/或触摸屏。此外,处理器1005可以基于精简指令集计算机(RISC)或复杂指令集计算机(CISC)架构或任何其他合适的架构,并且可以包括一个或多个处理核心。图形硬件1020可以是用于处理图形和/或辅助处理器1005执行计算任务的专用计算硬件。在一些具体实施中,图形硬件1020可以包括CPU集成的图形和/或一个或多个独立的可编程GPU。计算系统1000(实现本文所讨论的一个或多个具体实施)可以允许一个或多个用户通过用户活动来控制相同系统(例如,计算系统1000)或另一系统(例如,另一计算机或娱乐系统),所述用户活动可以包括音频指令、自然活动、和/或预先确定的手势诸如手部手势。
本公开内的各种具体实施可以使用传感器诸如相机。相机和类似的传感器系统可以包括自动对焦系统,以准确地捕捉最终被用于各种应用诸如照片应用、増强现实应用、虚拟现实应用和游戏的视频或图像数据。处理图像以及在通过相机传感器(或以其它方式)接收的图像上执行识别可以在主机设备上本地地执行,或者与网络可访问资源(例如,通过互联网访问的云服务器)组合来执行。
返回图10,设备传感器1025可以捕捉情景和/或环境现象,诸如时间;位置信息;设备相对于光、重力和磁北极的状态;甚至还有静态和视频图像。此外,网络能够访问的信息诸如天气信息也可用作上下文的一部分。所捕捉的所有情景和环境现象可用于为用户活动或关于用户活动的信息提供情景。例如,在访问用户的手势或表情或情绪中,情景信息可以被用作为分析的一部分,分析可以利用本文所讨论的技术来执行。
来自设备传感器1025的输出可以至少部分地由处理器1005和/或图形硬件1020、和/或结合在计算系统1000内或没有计算系统100的专用图像处理单元来处理。如此捕捉的信息可以被存储在存储器1010和/或存储装置1015和/或在所附接的网络上能访问的任何存储装置中。存储器1010可以包括由处理器1005、图形硬件1020和设备传感器1025用于执行设备功能的一种或多种不同类型的介质。存储装置1015可以存储数据,诸如媒体(例如音频、图像和视频文件);媒体的元数据;计算机程序指令;图形编程指令和图形资源;以及其它软件,包括数据库应用((例如存储角色帧的数据库)、偏好信息、设备配置文件信息和任何其它合适的数据。存储器1010和存储装置1015可以被用于保持经编译形式的或者以任何期望的计算机编程语言编写的被组织成一个或多个模块的计算机程序指令或代码。当由例如微控制器、GPU或处理器1005执行时,此类计算机程序代码可以实现本文描述的一个或多个动作或功能(例如,解释和响应包括命令和/或手势的用户活动)。
如上所示,本公开内的具体实施包括软件。就此,提供常见计算软件架构的描述,如图11中的层图中所表述。与硬件示例类似,这里讨论的软件架构并不旨在以任何方式是排他性的,相反是例示性的。这对于层类型图尤其如此,软件开发者往往会以略微不同的方式对层类型图进行表述。在这种情况下,该描述开始于层以例示硬件层1140的基本硬件层1195开始,其可以包括存储器、通用处理器、图形处理器、微控制器、或其他处理和/或计算机硬件诸如存储器控制器和专用硬件。在硬件层上方是将一个示例示为操作系统内核1145的操作系统内核层1190,其是可以执行存储器管理、设备管理和系统调用的内核软件。操作系统内核层1190是硬件驱动器诸如图形处理器驱动器的典型位置。这里采用的标记一般性地旨在说明层中所示的软件元素使用来自下面的层的资源并为上面的层提供服务。然而在实践中,特定软件元素的所有部件可能并不完全按该方式作用。
回到图11,操作系统服务层1185由操作系统服务1150来例示。操作系统服务1150可以在受保护环境中提供核心操作系统功能。此外,操作系统服务层1185中所示的操作系统服务可以包括OpenGL/OpenCL 1151等、/>1152、用户空间驱动器1153、和软件光栅器1154的框架。(CUDA是NVIDIA Corporation的注册商标)。虽然这些示例中的大多数均涉及图形处理器处理或图形和/或图形库,但是通过改变本公开的具体实施设想了其他类型的服务。这些具体示例还表示可在框架的较低等级中操作的图形框架/库,使得开发者可使用着色和基元和/或获得对图形硬件的相当紧密耦接的控制。此外,图11中指定的具体示例还可将其工作产物传递给硬件或硬件驱动器,诸如图形处理器驱动器,用于显示相关材料或计算操作。
再次参见图11,1151表示熟知的用于图形处理器计算操作和图形渲染(包括2D和3D图形)的库和应用编程接口的示例。(OPENGL是Silicon GraphicsInternational Corporation的注册商标。OPENCL是Apple Inc.的注册商标)。Metal 1152还表示所发布的图形库和框架,但其通常被认为比OpenGL/OpenCL 1151低的层级,从而支持组织、处理和提交图形和计算命令以及管理那些命令的相关联数据和资源的细粒度低层级控制。用户空间驱动器1153是与由于通常与特定设备或功能相关的原因而在用户空间中存在的硬件的控制有关的软件。在许多具体实施中,用户空间驱动器1153与内核驱动器和/或固件协同工作以执行硬件驱动器的总体功能。软件光栅器1154一般是指用于在没有专门的图形硬件(例如只利用CPU)的情况下生成图形信息诸如像素的软件。在操作系统服务层1185内示出的这些库或框架仅仅是示例性的,并且旨在用于展示层的一般层级以及其在样本布置中如何与其它软件有关(例如内核操作通常在下面,并且高层级应用服务1160通常在上面)。此外,可能有用的是要注意,Metal 1152表示本领域开发人员已知的Apple Inc.的所发布框架/库。此外,OpenGL/OpenCL 1151可以表示Apple Inc.所发布软件的当前版本中存在的框架/库。
在操作系统服务层1185上方有应用服务层1180,其包括Sprite Kit 1161、SceneKit 1162、核心动画1163、核心图形1164、和其它应用服务1160。操作系统服务层1185表示通常被应用程序直接访问的高层级框架。在本公开的一些具体实施中,操作系统服务层1185包括图形有关的框架,其是高层级,因为其对下面的图形库(诸如参考操作系统服务层1185讨论的那些)是不可知的。在此类具体实施中,这些高层级图形框架意在以用户/开发者更加友好的方式为开发者提供对图形功能性的访问并允许开发者免除与着色和基元的工作。以举例的方式,Sprite Kit 1161是Apple Inc.提供的图形渲染和动画基础结构。Sprite Kit 1161可以被用于将纹理图像或“子图形”动画化。Scene Kit 1162是来自AppleInc.的3D渲染框架,其支持在比具有类似能力的框架诸如OpenGL高的层级导入、操纵和渲染3D资产。核心动画1163是Apple Inc.提供的图形渲染和动画基础结构。核心动画1163可以被用于将视图以及应用的其它视觉元素动画化。核心图形1164是来自Apple Inc.的二维绘制引擎,其提供应用的2D渲染。
在应用服务层1180上方有应用层1175,其可以包括任何类型的应用程序。以举例的方式,图11示出了三个特定应用:照片1171(照片管理、编辑和分享程序)、1172(财务管理程序)、和/>1173(电影制作和分享程序)。(QUICKEN是Intuit Inc.的注册商标,IMOVIE是Apple Inc.的注册商标)。应用层1175还示出了两个一般性应用1170和1174,其表示存在任何其它应用可以与本文所公开的发明具体实施交互或可以是本文所公开的发明具体实施的一部分。一般来讲,本公开的一些具体实施采用生成可显示和/或可查看内容或生成适于GPU处理的计算操作的应用和/或与该应用交互。
在评估操作系统服务层1185和应用服务层1180中,可能有用的是认识到不同框架具有较高或较低层级应用程序接口,即使框架被表示在图11示意图的相同层中也是如此。图11的例示用于提供一般性指导以及提出后面可能要讨论的示例性框架。此外,本公开的一些具体实施可以表明,应用服务层1180中的框架利用操作系统服务层1185中表示的库。因此,图11提供用于这些示例的知识强化。重要地,图11并非意图限制可以任何特定方式或在任何特定具体实施中使用的框架或库的类型。一般来讲,本公开的许多具体实施涉及层1175中的应用或层1180或1185中的框架将长的连续图形处理器任务划分为较小块的能力。此外,本公开的许多具体实施涉及操作系统内核层1190中的图形处理器(例如GPU)驱动器软件和/或体现为硬件层1195中的微控制器固件;此类驱动器执行用于图形处理器资源(例如GPU)的调度功能。
图12示出了与图11中所示的标准架构类似的软件架构。作为区别,图12的架构示出:用户空间图形驱动器1205A和1205B;操作系统内核1145中的内核图形驱动器1210A和1210B;微控制器1215,伴有微控制器固件1220,包括硬件层1140中的图形驱动器固件1225;以及硬件层1140中的执行核心1230。图形驱动器的多个实例(用户空间图形驱动器1205A和1205B、内核图形驱动器1210A和1210B、以及微控制器固件1220中的图形驱动器固件1225)的存在指示用于实现图形驱动器的各种选项。作为技术可能性,所示的这三个驱动器中的任意者可以独立地作为唯一的图形驱动器操作。在本公开的一些具体实施中,总体图形驱动器以内核图形驱动器1210A和120B以及图形驱动器固件1225(例如,分别在操作系统内核和微控制器固件中)的组合实现。在其他具体实施中,总体图形驱动器可以通过所有三个所示驱动器1205A和1205B、1210A和1210B、以及1225的组合努力来实现。
公开了至少一个具体实施,并且本领域的普通技术人员所做的所述具体实施和/或所述具体实施的特征的变型、组合和/或修改在本公开的范围内。由组合、集成和/或省略具体实施的特征而得到的另选具体实施也在本公开的范围内。在明确说明数值范围或限制的情况下,此类表述范围或限制可以被理解为包括落入明确指出的范围或限制内的类似量值的迭代范围或限制(例如,从约1至约10包括2、3、4等;大于0.10包括0.11、0.12、0.13等)。除非另外指明,否则术语“约”的使用是指后面数的±10%。
在仔细研究以上描述时,许多其他具体实施对于本领域的技术人员而言将是显而易见的。因此,应当参考所附权利要求以及赋予此类权利要求的等同形式的完整范围来确定本发明的范围。在所附权利要求书中,术语“包括(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的通俗英语等同形式。
Claims (20)
1.一种非暂态程序存储设备,所述非暂态程序存储设备能够被处理器读取并且包括存储在其上的指令,所述指令用于使得所述处理器:
创建被配置用于由图形处理器编码到的间接命令缓冲区;
在命令缓冲区内编码引用所述间接命令缓冲区的第一命令,其中所述第一命令将由所述图形处理器执行并且使得所述图形处理器在所述间接命令缓冲区内编码一组命令;
在所述命令缓冲区内编码将由所述图形处理器执行的第二命令,其中所述第二命令的执行使得执行在所述间接命令缓冲区内编码的所述一组命令;以及
提交包括所述第一命令和所述第二命令的所述命令缓冲区用于在所述图形处理器上执行,其中所述处理器在提交所述命令缓冲区用于执行之后不进一步将命令编码到所述命令缓冲区中。
2.根据权利要求1所述的非暂态程序存储设备,其中所述处理器是通用处理器。
3.根据权利要求1所述的非暂态程序存储设备,其中所述间接命令缓冲区被配置为允许编码具有不同基元类型的所述一组命令中的命令。
4.根据权利要求1所述的非暂态程序存储设备,其中所述间接命令缓冲区被配置为允许编码具有不同绘制类型的所述一组命令中的命令。
5.根据权利要求1所述的非暂态程序存储设备,其中所述指令进一步使得所述处理器:
在第二命令缓冲区内编码触发由所述图形处理器重新执行在所述间接命令缓冲区内编码的所述一组命令的第三命令;以及
提交包括所述第三命令的所述第二命令缓冲区用于在所述图形处理器上执行,其中所述处理器在提交所述第二命令缓冲区用于执行之后不将命令编码到所述第二命令缓冲区中。
6.根据权利要求1所述的非暂态程序存储设备,其中所述指令进一步使得所述处理器:
在所述命令缓冲区内编码触发所述图形处理器删除所述间接命令缓冲区内的所述一组命令的重置命令;
在所述命令缓冲区内编码引用所述间接命令缓冲区的第三命令,其中所述第三命令触发在所述图形处理器上执行在所述间接命令缓冲区内编码第二组命令的第三操作;以及
在所述命令缓冲区内编码触发在所述图形处理器上执行第四操作的第四命令,所述第四操作执行所述间接命令缓冲区内的所述第二组命令。
7.根据权利要求1所述的非暂态程序存储设备,其中所述指令进一步使得所述处理器:
在所述命令缓冲区内编码用于触发所述图形处理器执行优化操作的优化命令,所述优化操作移除所述一组命令中的多个命令上冗余的状态设置。
8.根据权利要求1所述的非暂态程序存储设备,其中所述指令进一步使得所述处理器:
在所述命令缓冲区内编码用于触发所述图形处理器执行存储器压缩操作的优化命令,所述存储器压缩操作将所述一组命令移动到所述间接命令缓冲区的前部并且将未编码的面片移动到所述间接命令缓冲区的后部。
9.根据权利要求1所述的非暂态程序存储设备,其中所述指令进一步使得所述处理器:
在所述命令缓冲区内编码用于触发所述图形处理器执行将所述间接命令缓冲区内的命令复制到目标间接命令缓冲区的复制操作的复制命令。
10.一种用于图形处理的系统,包括:
存储器;和
处理器,所述处理器能够操作以与所述存储器交互,并且被配置为:
创建被配置用于在后来的时间点由图形处理器编码到的间接命令缓冲区;
在命令缓冲区内编码引用所述间接命令缓冲区的生成命令,其中所述生成命令使得在所述图形处理器上执行在所述间接命令缓冲区内编码一组命令的第一操作;
在所述命令缓冲区中编码使得在所述图形处理器上执行第二操作的消耗命令,所述第二操作执行在所述间接命令缓冲区内编码的所述一组命令;以及
提交包括所述生成命令和所述消耗命令的所述命令缓冲区用于在所述图形处理器上执行,其中当所述命令缓冲区被提交用于执行时,所述间接命令缓冲区不被填充以任何命令。
11.根据权利要求10所述的系统,其中所述处理器是通用处理器。
12.根据权利要求10所述的系统,其中所述间接命令缓冲区被配置为允许编码具有不同基元类型的所述一组命令中的命令。
13.根据权利要求10所述的系统,其中所述处理器被进一步配置为:
在第二命令缓冲区内编码触发重新执行在所述间接命令缓冲区内编码的所述一组命令的第二消耗命令;以及
提交包括所述第二消耗命令的所述第二命令缓冲区用于在所述图形处理器上执行,其中所述处理器在提交所述第二命令缓冲区用于执行之后不能编码所述第二命令缓冲区。
14.根据权利要求10所述的系统,其中所述处理器被进一步配置为:
在所述命令缓冲区内编码触发所述图形处理器删除所述间接命令缓冲区内的所述一组命令的重置命令;
在所述命令缓冲区内编码引用所述间接命令缓冲区的第二生成命令,其中所述第二生成命令触发在所述图形处理器上执行在所述间接命令缓冲区内编码第二组命令的第三操作;以及
在所述命令缓冲区内编码触发在所述图形处理器上执行第四操作的第二消耗命令,所述第四操作执行所述间接命令缓冲区内的所述第二组命令。
15.根据权利要求10所述的系统,其中所述处理器被进一步配置为:
在所述命令缓冲区内编码用于触发所述图形处理器执行优化操作的优化命令,所述优化操作移除所述一组命令中的多个命令上冗余的状态设置。
16.根据权利要求10所述的系统,其中所述处理器被进一步配置为:
在所述命令缓冲区内编码用于触发所述图形处理器执行存储器压缩操作的优化命令,所述存储器压缩操作将所述一组命令移动到所述间接命令缓冲区的前部并且将未编码的面片移动到所述间接命令缓冲区的后部。
17.根据权利要求10所述的系统,其中所述处理器被进一步配置为:
在所述命令缓冲区内编码用于触发所述图形处理器执行将所述间接命令缓冲区内的命令复制到目标间接命令缓冲区的复制操作的复制命令。
18.一种非暂态程序存储设备,所述非暂态程序存储设备能够被图形处理器读取并且包括存储在其上的指令,所述指令使得所述图形处理器:
获取包括引用间接命令缓冲区的生成命令和消耗命令的命令缓冲区,其中当所述图形处理器获取所述命令缓冲区时,所述间接命令缓冲区不被填充以任何命令,其中,所述间接命令缓冲区是由通用处理器创建的;
执行引用所述间接命令缓冲区的所述生成命令以执行用于在所述间接命令缓冲区内编码一组命令的第一操作;以及
在编码所述一组命令之后执行消耗命令以执行用于执行在所述间接命令缓冲区内编码的所述一组命令的第二操作。
19.根据权利要求18所述的非暂态程序存储设备,其中所述图形处理器是图形处理单元(GPU)。
20.根据权利要求18所述的非暂态程序存储设备,其中所述指令进一步使得所述图形处理器:
在执行所述第二操作之后获取第二消耗命令;以及
执行所述第二消耗命令以执行重新执行在所述间接命令缓冲区内编码的所述一组命令的第三操作。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/984,931 US10269167B1 (en) | 2018-05-21 | 2018-05-21 | Indirect command buffers for graphics processing |
US15/984,931 | 2018-05-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110515657A CN110515657A (zh) | 2019-11-29 |
CN110515657B true CN110515657B (zh) | 2023-10-10 |
Family
ID=66175053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910420574.7A Active CN110515657B (zh) | 2018-05-21 | 2019-05-21 | 用于图形处理的间接命令缓冲区 |
Country Status (3)
Country | Link |
---|---|
US (2) | US10269167B1 (zh) |
EP (1) | EP3572942B1 (zh) |
CN (1) | CN110515657B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017034008A1 (ja) * | 2015-08-25 | 2017-03-02 | 株式会社Seltech | ハイパーバイザーを有するシステム |
US11436783B2 (en) * | 2019-10-16 | 2022-09-06 | Oxide Interactive, Inc. | Method and system of decoupled object space shading |
US11372645B2 (en) * | 2020-06-12 | 2022-06-28 | Qualcomm Incorporated | Deferred command execution |
US11170462B1 (en) * | 2020-06-26 | 2021-11-09 | Advanced Micro Devices, Inc. | Indirect chaining of command buffers |
US20210117246A1 (en) | 2020-09-25 | 2021-04-22 | Intel Corporation | Disaggregated computing for distributed confidential computing environment |
CN112230931B (zh) * | 2020-10-22 | 2021-11-02 | 上海壁仞智能科技有限公司 | 适用于图形处理器的二次卸载的编译方法、装置和介质 |
CN115861511B (zh) * | 2022-12-30 | 2024-02-02 | 格兰菲智能科技有限公司 | 绘制命令的处理方法、装置、系统和计算机设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105518742A (zh) * | 2013-09-10 | 2016-04-20 | 高通股份有限公司 | 用于图形处理的任意控制点处的容错抢占机制 |
CN105940388A (zh) * | 2014-02-20 | 2016-09-14 | 英特尔公司 | 用于图形处理单元的工作负荷批量提交机制 |
CN106462393A (zh) * | 2014-05-30 | 2017-02-22 | 苹果公司 | 用于统一应用编程接口和模型的系统和方法 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1555005A (zh) * | 2003-12-29 | 2004-12-15 | ����ͨѶ�ɷ�����˾ | 动态循环流水线的交叠式命令提交方法 |
US7701460B2 (en) * | 2004-11-15 | 2010-04-20 | Hewlett-Packard Development Company, L.P. | Graphics systems and methods |
US7586492B2 (en) * | 2004-12-20 | 2009-09-08 | Nvidia Corporation | Real-time display post-processing using programmable hardware |
US7950003B1 (en) * | 2006-12-07 | 2011-05-24 | Sony Computer Entertainment Inc. | Heads-up-display software development tool for analyzing and optimizing computer software |
US8310492B2 (en) | 2009-09-03 | 2012-11-13 | Ati Technologies Ulc | Hardware-based scheduling of GPU work |
US8675002B1 (en) | 2010-06-09 | 2014-03-18 | Ati Technologies, Ulc | Efficient approach for a unified command buffer |
US20120001925A1 (en) | 2010-06-30 | 2012-01-05 | Ati Technologies, Ulc | Dynamic Feedback Load Balancing |
US9195501B2 (en) * | 2011-07-12 | 2015-11-24 | Qualcomm Incorporated | Instruction culling in graphics processing unit |
US9117302B2 (en) * | 2011-11-30 | 2015-08-25 | Qualcomm Incorporated | Switching between direct rendering and binning in graphics processing using an overdraw tracker |
JP5436526B2 (ja) * | 2011-12-06 | 2014-03-05 | 株式会社ソニー・コンピュータエンタテインメント | グラフィックスコマンド生成装置、グラフィックスコマンド生成方法、サーバ装置、およびクライアント装置 |
US8803900B2 (en) | 2011-12-22 | 2014-08-12 | Ati Technologies Ulc | Synchronization with semaphores in a multi-engine GPU |
US9449410B2 (en) * | 2013-04-11 | 2016-09-20 | Qualcomm Incorporated | Intra-frame timestamps for tile-based rendering |
US9286649B2 (en) | 2013-05-31 | 2016-03-15 | Qualcomm Incorporated | Conditional execution of rendering commands based on per bin visibility information with added inline operations |
US9165337B2 (en) * | 2013-05-31 | 2015-10-20 | Qualcomm Incorporated | Command instruction management |
WO2015172227A1 (en) * | 2014-05-13 | 2015-11-19 | Pcp Vr Inc. | Method, system and apparatus for generation and playback of virtual reality multimedia |
US9799088B2 (en) * | 2014-08-21 | 2017-10-24 | Qualcomm Incorporated | Render target command reordering in graphics processing |
CN106687927B (zh) * | 2014-09-12 | 2021-11-05 | 英特尔公司 | 促进在计算装置上的图形处理单元的命令分组的动态并行调度 |
CN107743636B (zh) * | 2015-06-07 | 2021-07-23 | 苹果公司 | 用于高效实时渲染预先不知道的图形的图形引擎和环境 |
US10402931B2 (en) * | 2015-06-07 | 2019-09-03 | Apple Inc. | Systrace visualization tool |
US10013734B1 (en) * | 2017-04-01 | 2018-07-03 | Intel Corporation | Programmable controller and command cache for graphics processors |
-
2018
- 2018-05-21 US US15/984,931 patent/US10269167B1/en active Active
-
2019
- 2019-04-22 US US16/390,654 patent/US10789756B2/en active Active
- 2019-05-20 EP EP19175500.8A patent/EP3572942B1/en active Active
- 2019-05-21 CN CN201910420574.7A patent/CN110515657B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105518742A (zh) * | 2013-09-10 | 2016-04-20 | 高通股份有限公司 | 用于图形处理的任意控制点处的容错抢占机制 |
CN105940388A (zh) * | 2014-02-20 | 2016-09-14 | 英特尔公司 | 用于图形处理单元的工作负荷批量提交机制 |
CN106462393A (zh) * | 2014-05-30 | 2017-02-22 | 苹果公司 | 用于统一应用编程接口和模型的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3572942A1 (en) | 2019-11-27 |
US10789756B2 (en) | 2020-09-29 |
EP3572942B1 (en) | 2023-11-01 |
US20190355163A1 (en) | 2019-11-21 |
US10269167B1 (en) | 2019-04-23 |
CN110515657A (zh) | 2019-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110515657B (zh) | 用于图形处理的间接命令缓冲区 | |
US20220284539A1 (en) | Method and apparatus for efficient loop processing in a graphics hardware front end | |
KR101563098B1 (ko) | 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛 | |
CN110554976B (zh) | 用于图形处理的存储器高速缓存管理 | |
CN107743636B (zh) | 用于高效实时渲染预先不知道的图形的图形引擎和环境 | |
US9342322B2 (en) | System and method for layering using tile-based renderers | |
US9916634B2 (en) | Facilitating efficient graphics command generation and execution for improved graphics performance at computing devices | |
US10719970B2 (en) | Low latency firmware command selection using a directed acyclic graph | |
US11094036B2 (en) | Task execution on a graphics processor using indirect argument buffers | |
US11550632B2 (en) | Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment | |
US10410311B2 (en) | Method and apparatus for efficient submission of workload to a high performance graphics sub-system | |
US10319068B2 (en) | Texture not backed by real mapping | |
US10628909B2 (en) | Graphics processing unit resource dependency viewer | |
CN107408293B (zh) | 支持计算装置处的图形命令流中对命令缓冲器的多级嵌套 | |
TW201810026A (zh) | 用於在計算環境中資料之邏輯處理的暫存器檔案之延伸 | |
CN108352051B (zh) | 促进对计算装置处的捆绑状态的高效图形命令处理 | |
US11403223B2 (en) | De-prioritization supporting frame buffer caching | |
US10692169B2 (en) | Graphics driver virtual channels for out-of-order command scheduling for a graphics processor | |
US9971580B2 (en) | Fast access and use of common data values relating to applications in parallel computing environments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |