CN106462375B - 图形管线状态对象和模型 - Google Patents
图形管线状态对象和模型 Download PDFInfo
- Publication number
- CN106462375B CN106462375B CN201580028651.4A CN201580028651A CN106462375B CN 106462375 B CN106462375 B CN 106462375B CN 201580028651 A CN201580028651 A CN 201580028651A CN 106462375 B CN106462375 B CN 106462375B
- Authority
- CN
- China
- Prior art keywords
- gpu
- immutable
- pipeline state
- code
- state object
- 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
- 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
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
-
- 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)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Computer Graphics (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种创新型GPU框架和相关的API,所述创新型GPU框架和相关的API呈现所述目标硬件的更准确的表示,以使得所述GPU的固定功能与可编程特征之间的区别被开发者感知。这使得程序和/或通过所述程序生成或操纵的图形对象被理解为不仅仅是代码,而且是与所述代码相关联的机器状态。当限定此类对象时,需要可编程GPU特征的所述定义部件可仅被编译一次,并且根据需要可被反复再利用。类似地,在进行状态变化时,所述硬件也作出对应于所述状态变化的状态变化。另外,这些不可变对象的创建防止了开发者无意地改变所述程序或对象的使其与预期的表现不同的部分。
Description
版权声明
本专利文档的公开内容的一部分包含受到(版权或光罩作品)保护的材料。由于本专利文档或本专利公开内容出现在专利与商标局专利文件或记录中,因此(版权或光罩作品)所有人不反对任何人对本专利文档或本专利公开内容的拓制,但会以其他方式保留任何形式的所有(版权或光罩作品)权利。
背景技术
本公开整体涉及计算机编程领域。更具体地讲,但并非作为限制,本公开涉及用于对图形和计算应用进行编程以在多种图形和计算处理器上执行的技术。
计算机和其他计算设备通常具有至少一个可编程处理元件,通常称为中央处理单元(CPU)。它们通常还具有其他用于各种类型的专业化处理的可编程处理器,诸如用于图形处理操作,因此通常称为图形处理单元(GPU)。GPU通常包括被设计用于在并行数据流上执行相同指令的多个核或处理元件,从而使得它们比用于其中并行地进行大数据块处理的算法的通用CPU更有效。一般来讲,CPU充当主机并且将专业化并行任务交给GPU。
已经开发出用于具有CPU和GPU的异构计算平台的若干框架。这些框架包括OpenGLTM。OpenGL聚焦于使用GPU进行图形处理并且提供API以渲染2D和3D图形。
OpenGL框架提供类似C的开发环境,其中用户可创建应用以在多种不同类型的CPU、GPU、数字信号处理器(DSP)和其他处理器上运行。OpenGL还提供编译器和运行环境,其中可在异构计算系统内编译和执行代码。当使用OpenGL时,开发者可使用单一的统一语言瞄准OpenGL驱动器适用的所有处理器。这是通过向开发者呈现抽象平台模型和以类似的方式使所有这些架构概念化的应用程序编程接口(API)以及在整个异构架构上支持数据和任务并行性的执行模型来实现的。
当执行OpenGL程序时,一系列API调用对系统进行配置以供执行,嵌入式编译器编译OpenGL代码,并且运行时异步地协调并行任务之间的执行。典型的基于OpenGL的系统通过嵌入式编译器在终端用户系统上运行源代码,以生成在该系统上可用的目标GPU的可执行代码。然后,将可执行代码或可执行代码的部分发送到目标GPU并执行。然而,该方法,具体地讲编译步骤,对于一些类型的应用诸如图形密集的游戏可能耗时太长。
在某种意义上,OpenGL本身可被视为状态机,其中每个命令可能导致状态变化,该状态变化需要生成和/或编译新的GPU代码。这是由以下事实引起的:某些GPU功能依赖于GPU中的专用电路,而其他GPU功能需要使用GPU的可编程特征。根据所用的特定GPU硬件,从计算时间角度来看这些类型的状态变化可能非常昂贵。另外,近年来,GPU硬件的演化已超过OpenGL的演化,使得在某种意义上,OpenGL API与其中程序将运行的硬件环境失配。结果是开发者可能无意地编写代码,所述代码对于其将在上面运行的至少一些硬件而言特别无效。
因此,本领域需要用于GPU编程的框架,其将API与底层硬件更紧密地联系,使得开发者意识到现代GPU的固定功能部分与可编程部分之间的区别。这种意识可使得开发者能够编写在现代设备上更有效执行的代码。
发明内容
一个公开的实施方案包括非暂态计算机可读介质,其具有存储在其上以支持包含用于图形处理单元(GPU)的代码的不可变管线状态对象的指令。在被执行时,所述指令可使得一个或多个处理器创建不可变管线状态对象,所述不可变管线状态对象包含关于用于显示图形对象的一个或多个图形操作的编译信息。所述不可变管线状态对象可在应用加载时间被编译,以封装用于GPU的可执行指令并且使在改变时需要重新编译的可变属性外在化。一个或多个图形操作可包括选自顶点着色器、片段着色器和顶点拾取配置的类型的一种或多种着色器。一个或多个图形操作可包括选自混合状态、光栅化启用和多重采样掩蔽的至少一个项目。
该第一公开的实施方案的非暂态计算机可读介质还可包括使得一个或多个处理器创建用于不可变状态对象的一组一个或多个相关联的状态选项的指令。所述一组一个或多个相关联的状态选项可包括数据属性,该数据属性可变化而不会导致用于GPU的可执行指令以及相关联的不可变状态对象的对应变化。此类属性的示例包括输入纹理或输入顶点数据、视口尺寸和/或遮挡查询数据。
另一个公开的实施方案涉及在应用程序中生成用于图形操作的GPU代码的方法。该方法可包括将一个或多个对象(诸如目标帧缓冲区配置)限定为在由GPU执行的整个渲染过程中是持久的。该方法还可包括限定多个不可变管线状态对象,每个对象与图形操作相关联并且包含用于GPU的编译的可执行指令。该方法还可包括限定与所述不可变状态对象相关联的一个或多个状态选项。所述一个或多个状态选项可包括数据属性,该数据属性可变化以改变对应的图形操作,而不会导致用于GPU的可执行指令的变化。在该实施方案的公开方法中,用于GPU的编译的可执行指令可被布置为在除图形操作的绘制时间以外的时间仅被编译一次,并且被缓存以供以后重复使用。这个时间可为将应用安装到目标系统上的时间或将应用加载到目标系统的存储器中以供执行的时间。不可变管线状态对象还可包括影响用于GPU的编译的可执行指令的另外的参数。不可变管线状态对象还可包括诸如顶点着色器、片段着色器和顶点拾取配置的至少一种着色器以及诸如混合状态、光栅化启用和多重采样掩蔽的至少一个所选的另外的项目。
另一个公开的实施方案涉及具有存储器和处理器的计算设备,所述处理器包括CPU和GPU。处理设备可被配置为执行存储器中存储的程序代码,从而创建不可变管线状态对象以及用于该不可变状态对象的一组一个或多个相关联的状态选项。不可变管线状态对象可包含关于用于显示图形对象的一个或多个图形操作的编译信息,并且可适于在除渲染图形对象的时间之外的时间被编译,以便封装用于GPU的可执行指令并且使在改变时需要重新编译的可变属性外在化(externalize)。用于不可变状态对象的一组一个或多个相关联的状态选项可包括数据属性,该数据属性可变化而不会导致用于GPU的可执行指令以及相关联的不可变状态对象的对应变化。一个或多个图形操作可包括一种或多种着色器,诸如顶点着色器、片段着色器或顶点拾取配置。一个或多个图形操作可包括诸如混合状态、光栅化启用和多重采样掩蔽的至少一个项目。除渲染图形对象的时间之外的时间可为将包含程序代码的应用安装到计算设备上的时间或将包含程序代码的应用加载到计算设备的存储器中以供执行的时间。
附图说明
图1为示出根据一个实施方案的程序的编译、链接和执行的框图。
图2为示出根据一个实施方案的用于在图形处理单元上执行程序的计算机系统的框图。
图3为示出根据一个实施方案的用于编译以及链接程序的计算机系统的框图。
图4为示出根据一个实施方案的联网系统的框图。
图5A为示出根据一个实施方案的示例性管线状态对象的框图。
图5B为示出根据一个实施方案的渲染命令编码器的操作的框图。
具体实施方式
创新型GPU框架和相关的API呈现目标硬件的更准确的表示,以使得GPU的固定功能与可编程特征之间的区别被开发者感知。这使得程序和/或通过该程序生成或操纵的图形对象被理解为不仅仅是代码,而且是与代码相关联的机器状态。当限定此类对象时,需要可编程GPU特征的定义部件可仅被编译一次,并且根据需要可被反复再利用。类似地,在进行状态变化时,状态变化对应于在硬件上进行的状态变化。另外,这些不可变对象的创建防止了开发者无意地改变程序或对象的使其与预期的表现不同的部分。
在以下描述中,为了解释的目的,阐述了很多具体细节以便提供对本发明的彻底理解。然而,对本领域的技术人员而言显而易见的是,可以在不存在这些具体细节的情况下实践本发明。在其他实例中,结构和设备被以框图的形式示出,以便避免模糊本发明。对没有下标或后缀的数字的引用应当理解为引用对应于所引用数字的所有下标和后缀实例。此外,本公开中所使用的语言已主要被选择用于可读性和指导性目的,并且可能没有被选择为划定或限定本发明的主题,从而诉诸于所必需的权利要求以确定此类发明主题。在说明书中提到“一个实施方案”或“一种实施方案”意指在本发明的至少一个实施方案中包括的结合该实施方案描述的特定特征、结构或特性,并且多次提到“一个实施方案”或“一种实施方案”不应被理解为全部必然地参考相同的实施方案。
如本文所用,术语“计算机系统”可以指单个计算机或共同工作以执行被描述为在计算机系统上执行或被计算机系统执行的功能的多个计算机。相似地,机器可读介质可以指单个物理介质或可共同包含存储在其上的指示的信息的多个介质。处理器可以指在单个芯片上或在多个处理芯片上实施的单个处理元件或多个处理元件。
应当理解,在任何实际具体实施的开发中(如在任何开发项目中那样),必须要作出许多决策以实现开发者的特定目标(如,符合与系统和商务相关的约束条件),并且这些目标可在不同具体实施之间变化。还应当理解,此类开发工作可能是复杂并且耗时的,但尽管如此,对于在受益于本公开而设计系统的实施的那些普通技术人员而言,这仍然是他们的日常工作。
现在转向图1,开发者计算机系统100和目标计算机系统105以根据一个实施方案的框图形式示出。开发者可在统一编程接口110中创建和提交源代码,该统一编程接口可为GPU特定编程语言。统一编程接口110可以为开发者提供单个框架,以在该框架上编写其GPU程序代码。一旦写入代码,其可被引导至编译器115,该编译器可为用于GPU特定编程语言的编译器,并且可以解析源代码并且生成与机器无关与编程语言无关的表示。然后可以将结果从开发者计算机系统100分发到应用120。应用120可包含独立于设备形式的着色器代码(除其他之外,该应用包含:CPU代码、文本、其他源等)。
可以按任何所需的方式将应用120递送至目标机器105,包括通过网络的电子传输以及机器可读介质的物理传输。这通常涉及将应用120递送至服务器(图1中未示出),目标系统105通过该服务器可以获得应用120。应用120可绑定有其他数据,诸如运行时库、安装程序等,它们可用于将应用120安装到目标系统105上。在一些情况下,应用120可被作为较大软件包的一部分提供。
在启动应用120后,由该应用执行的一个动作可为创建管线对象155的集合,所述对象可以包括状态信息125、片段着色器130和顶点着色器135,该应用可被嵌入式GPU编译器145编译,该编译器145将由编译器115提供的表示编译成用于GPU 150的本地二进制代码。编译的本地代码可高速缓存到高速缓存140中或存储到目标系统105中的其他地方,以在稍后重新创建相同管线时,诸如在将来启动应用的过程中提高性能。最后,GPU 150可以执行本地二进制代码,从而执行用于数据并行操作的图形和计算内核。
现在参见图2,框图示出了根据一个实施方案的可充当开发者系统100的计算机系统200。虽然图2示出了计算机系统的各种部件,但是其并不旨在表示使这些部件互连的任何特定构造或方式,因为此类细节与本公开并无密切关系。具有更少部件或也许更多部件的网络计算机和其他数据处理系统(例如,手持式计算机、个人数字助理(PDA)、蜂窝电话、娱乐系统、消费电子设备等)也可用于实施一个或多个实施方案。
如图2所示,数据处理系统形式的计算机系统200包括总线222(其耦接到一个或多个微处理器216(其可为CPU和/或GPU))、存储器212(其可包括易失性读/写随机存取存储器(RAM)和只读存储器(ROM)中的一者或两者)以及非易失性存储设备214。该一个或多个微处理器216可以从存储器212和存储设备214检索指令并使用高速缓存218执行所述指令以执行上述操作。链路222与这些各种部件互连在一起,并且将这些部件216、218、212和214互连至显示控制器206和显示设备220,以及互连至外围设备诸如输入/输出(I/O)设备204,该输入/输出(I/O)设备可以是鼠标、键盘、触摸屏、调制解调器、网络接口、打印机和本领域熟知的其他设备。通常,输入/输出设备204通过输入/输出控制器202耦接到系统。如果易失性RAM包含于存储器212中,那么RAM通常被实施为需要连续供电以刷新或保持存储器中的数据的动态RAM(DRAM)。显示控制器206和显示设备220可以任选地包括一个或多个GPU以处理显示数据。
存储设备214通常为磁性硬盘驱动器、光驱、非易失性固态存储器设备或即使在系统断电后也保持数据(例如,大量数据)的其他类型的存储器系统。虽然图2显示存储设备214为直接耦接到数据处理系统中的其余部件的本地设备,但实施方案可利用远离系统的非易失性存储器,诸如通过网络接口210(其可为有线或无线网络接口)耦接到数据处理系统的网络存储设备。链路222可包括通过本领域熟知的各种桥接器、控制器和/或适配器相互连接的一条或多条链路。虽然为了清楚起见图2中仅示出了每种类型的单个元件,但根据需要可以使用多种元件类型中的任何一者或全部的多个元件。
现在参见图3,框图示出了根据一个实施方案的可充当目标计算机系统150的计算系统300。虽然图3示出了计算机系统的各种部件,但是其并不旨在表示使这些部件互连的任何特定构造或方式,因为此类细节与本公开并无密切关系。具有更少部件或也许更多部件的网络计算机和其他数据处理系统(例如,手持式计算机、个人数字助理(PDA)、蜂窝电话、娱乐系统、消费电子设备等)也可用于实施一个或多个实施方案。
计算系统300包括CPU 310、GPU 330。在图3所示的实施方案中,CPU 310和GPU 330包含于单独的集成电路(IC)或封装中。然而在其他实施方案中,CPU 310和GPU 330或它们的集体功能可以包含于单个IC或封装中。
此外,计算系统300还包括可被CPU 310和GPU 330访问的系统存储器340。在多个实施方案中,计算系统300可以包括巨型计算机、台式计算机、膝上型计算机、视频游戏控制台、嵌入式设备、手持式设备(例如,移动电话、智能电话、MP3播放器、相机、GPS设备或其他移动设备)或者包括或被配置为包括GPU的任何其他设备。虽然图3中未示出,但计算系统300还可包括计算系统的常规元件,包括用于显示计算系统300的内容(例如,图形、视频等)的显示设备(例如,阴极射线管、液晶显示器、等离子体显示器等),以及输入设备(例如,键盘、触摸板、鼠标等)、存储设备(例如,硬盘、光盘等)以及通信设备(例如,网络接口)。可以根据需要包括任何其他元件。虽然示出为通过通用通信链路350耦接,但根据需要可以采用多条链路350,其中CPU 310与GPU 330连接到单独但互连的链路350。
GPU 330通过执行某些特殊功能辅助CPU 310,诸如图形处理任务和数据并行一般计算任务,通常比CPU 310可在软件中执行这些任务的速度更快。
GPU 330在链路350上与CPU 310和系统存储器340耦接。链路350可以是用于计算机系统的任何类型的总线或通信结构,包括外围部件接口(PCI)总线、加速图形端口(AGP)总线、PCI快速(PCIE)总线,或者另一种类型的链路,包括非总线链路。如果采用多条链路350,它们可以是不同的类型。
除系统存储器340之外,计算系统300可以包括耦接到GPU 330以及链路350的局部存储器320。局部存储器320可被GPU 330利用,从而比数据存储于系统存储器340中时可能的速度更快地访问某些数据(诸如频繁使用的数据)。另外,CPU 310和GPU 330内均可包含高速缓存或局部存储器。
虽然图3中示出单个CPU 310和GPU 330,但实施方案可以根据需要采用任何数量的CPU 310和GPU 330。如果采用多个CPU 310或GPU 330,则CPU 310和GPU 330中的每一者可以是不同类型和架构。可以根据需要在不同的GPU 330上执行应用120的部分。此外,计算机系统300可以采用一个或多个专业协同处理器设备(图3中未示出),诸如密码协同处理器,所述协同处理器可以根据需要使用链路350或其他链路耦接到CPU 310和GPU 330中的一者或多者。
现在转向图4,框图示出了互连的可编程设备400的网络,包括服务器430和相关联的数据库440,以及台式计算机410、膝上型电脑412、平板电脑414和移动电话416。这些可编程设备中的任一者可以是图1的开发者系统100或目标系统105。使可编程设备互连的网络420可以是使用用于将数据从一个系统传输到另一个系统的任何所需的网络通信协议的任何类型的网络,其为有线或无线、局域或广域、公共或专用的。虽然示出为单个网络420,但可以使用任何数量的互连网络连接多个可编程设备,所述可编程设备可以采用不同的网络技术。在一个示例中,桌面工作站410可以是图1的开发者系统100,其将应用120分发到服务器430,该服务器继而可以将应用120分发到多个设备412、414和416,这些设备中的每个设备可以采用不同的GPU以及其他不同的部件。
可以使用统一编程接口在通常与上文相对于图2所述的系统相对应的系统上开发软件,以供在通常与上文相对于图3所述的系统相对应的系统上执行。此类统一编程接口的示例在2014年5月30日提交的并且名称为“System and Method for Unified ApplicationProgramming Interface and Model”的共同待审的美国临时专利申请62/005,821中有所公开,所述临时专利申请以引用方式并入本文。
创新型GPU编程框架和相关联的API的多个方面可以被最好地理解为具有三个层次的分层结构:
第一层次为必须在渲染过程开始时限定并且在渲染过程完成前不能改变的事物。其中首要的是正在渲染的图像,即帧缓冲区配置。帧缓冲区配置可包括缓冲区大小和维度、颜色参数等。在渲染过程开始时和过程中固定帧缓冲区配置与现有技术GPU框架/API形成对比,在现有技术GPU框架/API中对帧缓冲区配置的变化的处理正如任何其他命令一样,并且因此这种变化可能出现在任何时间点,包括在渲染过程的中途。帧缓冲区配置的其他方面在上文以引用方式并入的共同待审的专利申请中有所描述。
第二层次是选择管线状态对象,包括必须被编译成GPU代码的所有图形状态。因为在目标系统上运行GPU编译器在计算上是昂贵的,所以优选的是同时完成所有这些操作,通常不是在运行时间,而是在将应用安装到目标系统上时或者在加载应用以供执行时。管线状态对象的其他方面和细节在下文有更详细的论述。通过引入功能性触发GPU代码到管线状态对象的重新编译,可以开发API,使得开发者知道正在编写的代码何时将导致计算上昂贵和耗时的重新编译。管线状态对象的其他方面在下文有所描述。
第三层次为在运行中(例如,在执行应用的过程中)容易/便宜地改变而不需要编译新的GPU代码的状态选项。这些状态选项的其他方面在下文以及在上文以引用方式并入的共同待审的专利申请中有所描述。
一旦限定了帧缓冲区,即可创建将对象渲染到帧缓冲区的命令或命令序列。在一些实施方案中,该任务可落入如图5B所示的渲染命令编码器544。渲染命令编码器544用作输入纹理对象510、缓冲区对象504、采样器对象508、深度模板状态对象538和管线状态对象542,以创建可在目标处渲染的渲染命令。帧缓冲区描述符可被配置为开始渲染命令的一部分。然后,应用可附加一系列SetPipelineState、SetInexpensiveState和Draw命令,以声明将被画入帧缓冲区的一组对象。换句话说,对于每个FramebufferDescriptor和/或RenderCommand,可以公布输入对象和绘制命令中的一者或多者,然后可以通过应用终止RenderCommand,以告诉图形系统不再附加更多命令。
采样器508可以是使用将采样器描述符对象520用作输入值的设备方法newSamplerWithDescriptor构造的不可变对象。采样器描述符对象520可以继而是用于采样器属性的可变容器,包括过滤选项、定址模式、最大各向异性、细节层次参数和深度比较模式。为了构造采样器508,可以在采样器描述符对象520中设定采样器属性所需的值,然后将其用作构造采样器508的输入。
深度模板状态对象538可以是用于构造渲染命令编码器对象544的可变对象。可以使用深度模板状态描述符对象530构造深度模板状态对象538本身,深度模板状态描述符对象530可以是包含深度和/或模板状态的设置的可变状态对象。例如,深度模板状态描述符对象530可以包括用于设置深度的深度值,用于对正面和背面图元指定单独的模板状态的模板背面状态和模板正面状态属性,以及用于指定执行深度测试的方式的深度比较函数属性。例如,使深度比较函数属性的值留在其默认值表明深度测试总是通过,这意味着传入片段仍然是替换指定位置的数据的候选者。如果片段的深度值未通过深度测试,那么废弃传入片段。构造定制的深度模板状态描述符对象530本身可能需要创建可为不可变状态对象的模板状态对象522。其他图形状态也可以是管线的一部分。
管线状态542的示例在下文有所描述,其可以是包含编译的图形渲染状态的对象,诸如光栅化(包括多重采样)、可见度和混合状态管线状态542还可以包含可编程状态,诸如将在GPU上执行的两个图形着色器功能。这些着色器功能中的一者可以用于顶点操作并且另一者用于片段操作。管线状态对象542中的状态通常可以在运行时被汇编和编译。可以使用管线状态描述符对象540构造管线状态对象542,所述管线状态描述符对象540可以是用于图形渲染状态的可变描述符对象和容器。
一般来讲,为构造管线状态对象542,首先可以构造管线状态描述符对象540,然后可以根据需要设定其值。例如,光栅化启用属性(BOOL型)可以设定为“否”,以使得所有图元在光栅化之前减少,并且没有片段被处理。禁止光栅化可用于从只有顶点的变换获得反馈。其他可以设定的可能的值包括有助于指定顶点和片段着色器的顶点和片段函数属性,以及指定被指定帧缓冲区附件的混合状态的用于混合状态的值。如果帧缓冲区附件支持多重采样,那么可以对每个片段创建多个样本,并且可以设定以下管线状态属性以确定覆盖率:用于每个片段的样本数的sampleCount属性,用于指定位掩码的sampleMask属性,该位掩码最初用由光栅化器产生的覆盖掩码进行逐位AND运算(默认情况下,sampleMask位掩码通常可以是一致的,所以用该位掩码进行的逐位AND运算不改变任何值);用于指定α通道片段输出是否可以用作覆盖掩码的alphaToCoverageEnabled属性,用于设定α通道片段值的alphaToOneEnabled属性,以及指定用于生成覆盖掩码的值(介于0.0和1.0之间,包括0.0和1.0)的sampleCoverage属性,该覆盖掩码然后可用由光栅化器产生的覆盖率值进行逐位AND运算。
可以使用一个或多个对象构造管线状态描述符对象540本身,所述一个或多个对象包括函数对象524、混合状态526和像素格式528。函数对象524可以代表在GPU上运行的单个函数的处理,并且可以通过从输入值字符串编译源代码来创建。函数对象524通常仅涉及图形应用而非计算应用上的状态值。混合状态526可以是包含用于混合的值的可变对象。混合可以是使用高度可配置的混合函数将传入片段的颜色数据(源)与帧缓冲区(目标)中的值混合的片段操作。混合函数可以确定源和目标片段值与混合因子组合的方式。限定混合状态的属性中的一些可以包括1)用于启用混合的混合启用属性(BOOL值);2)用于指定位掩码的writeMask属性,该位掩码限制哪一种颜色位被混合;3)用于对RGB和α片段数据分配混合函数的rgbBlendFunciton和alphaBlendFunction属性;以及4)用于分配源和目标混合因子的sourceRGBBlendFactor、sourceAlphaBlendFactor、destinationRGBBlendFactor和destinationAlphaBlendFactor属性。
一般来讲,可能有利的是知道作为构建RenderPipelineState的一部分的每个渲染目标(多种颜色、深度和模板)的像素格式。这可使得编译器知道格式化输出存储器的方式。另外,可以在任何时间创建管线对象,但可能有利的是在应用启动初期创建这些对象。这允许在上述执行的第二层次期间选择预创建的管线。
一旦构造了所有所需的对象,则可以使用那些对象构造渲染命令编码器对象544。因此,概括地说,在一个实施方案中,为了构造和初始化渲染命令编码器对象544,首先可以构造一个或多个帧缓冲区附件532,所述附件中的每个包含用于渲染命令的目标(例如,颜色缓冲区、深度缓冲区或模板缓冲区)的状态。接下来,可以构造包含帧缓冲区状态的可变帧缓冲区描述符对象534,包括其相关联的附件。然后使用帧缓冲区描述符对象534,可通过调用命令缓冲区方法(例如,renderCommandEncoderWithFramebuffer)构造渲染命令编码器对象544。
这时,可以通过首先创建可变描述符对象、管线状态描述符540以及设定管线状态描述符对象540的渲染到纹理操作所需的图形渲染状态来构造管线状态对象542,以代表编译的管线状态,诸如着色器、光栅化(包括多重采样)、可见度和混合状态。在创建管线状态对象542之后,可以调用渲染命令编码器方法(例如,setPipelineState)以使管线状态对象542与渲染命令编码器544相关联。
再次重申,因为管线调用编译器,所以它们的创建可能是相当昂贵的。理想地,应用在启动后或在加载内容时将创建许多管线,然后对于每个帧创建渲染命令编码器,并依次设定每个对象绘制所需的管线、其他状态和源。在任何给定时间,渲染命令可具有一个可随时间推移而变化的“当前”管线。预期切换到已创建的管线的动作可能是低成本的。应用还可在任何时候创建管线,包括正好在执行前,但如果在动画期间创建可能耗费令人不满意的较长时间。因此,一旦创建,即可将管线与许多不同的渲染命令一起使用。(例如,应用可创建一个管线并永远保持,其中对于每个帧可创建新的渲染命令,并且对于每个帧,管线可用于绘制对象)。
示例性管线状态对象542在图5A中示出。管线状态对象可与例如待绘制的对象相关联。示出的管线状态对象542包括五个部件:顶点拾取501、顶点着色器502、光栅化503、片段着色器504和帧缓冲区506。从历史观点上说,这些对象中的每个将被单独的API控制。然而,在与实际具体实施相关联的任何给定的实例中,这些对象中存在预定义的数据流。例如,从顶点着色器到片段着色器的数据流为与供GPU上执行的代码生成联系非常紧密的交互作用。类似地,示出的混合操作508从帧缓冲区读取数据,在某种程度上修改数据,并将其写回到帧缓冲区。该操作也与GPU代码生成和编译紧密联系。
由于对象之间的固定关系和这些关系与GPU代码生成和编译过程之间的联系,有利的是将它们组合为单个管线状态对象。这允许在将应用安装到目标系统上时或在加载应用时仅一次生成和编译必要的GPU代码。然后存储这样生成的GPU机器代码,从而允许代码被检索,传到GPU,以及无论何时绘制特定对象时执行。这避免了在运行中每次绘制特定对象时生成和编译相关联的代码的必要性。
换句话讲,管线状态对象为代表编译的机器代码的不可变对象。通过对不同的图形操作使用不同的管线状态对象,当对于与特定管线状态对象相关联的对象进行绘制调用时,不必考虑API的状态来确定例如着色器是否必须被编译,因为与应用程序相关联的所有状态已具有生成、编译和存储的对应GPU代码,以便准备好执行,无论在运行中在应用运行时间提供何种参数。
在现有技术中,通常通过对每个编译和缓存的GPU代码区段生成散列函数来确定代码重新编译是否必要。当状态改变为可能需要新的代码生成时,可生成状态的对应散列函数,并且对于可用的缓存的编译的状态进行检查,以确定所需的可执行代码是否已经可用。虽然这对于其中已编译必需代码的情况节省了一些时间,但在一些应用中即使是检查过程也可能过度耗时。因此,在程序执行过程中使用如上所述的管线状态对象可节省大量时间,因为所有所需的GPU代码的生成和编译可在应用安装或初始化之前加载,而非在渲染操作过程中进行。
虽然影响代码生成的参数结合到不可变管线状态对象中,但仍然存在不影响代码生成或需要重新编译GPU代码的多种其他参数。这些数据和参数,例如视口尺寸、输入纹理、输入顶点数据、遮挡查询等,可以通过API调用修改。简而言之,可以按如下所述理解:改变被操纵的数据是简易并且在计算上是便宜的,因此数据被封装于可变对象中并且可通过API调用修改。改变操纵数据的方式更加困难并且是计算密集型的,因此数据被封装于一次并且不在绘制时间构造和编译的不可变对象中。因此,管线状态对象的目标是封装需要代码生成的任何事物。需要代码生成/编译与GPU到GPU不同,因此有利地是创建所有此类函数的组合,以使得通用API可与多种GPU硬件一起使用。示例性管线状态对象可封装以下:顶点拾取配置、顶点着色器、片段着色器、混合状态、附接到帧缓冲区的颜色格式、多重采样掩蔽、深度写入启用状态以及光栅化启用状态。
代表和体现所述技术和机制的程序指令和/或数据库可以存储于机器可读存储介质上。程序指令可以包括在被机器执行时使得机器执行本文所述技术的动作的机器可读指令。
机器可读存储介质可以包括在使用中可被计算机访问以对计算机提供指令和/或数据的任何存储介质,并且可以包括物理介质的多个实例,犹如它们是单个物理介质一样。例如,机器可读存储介质可以包括诸如磁性或光学介质的存储介质,例如,盘(固定或可拆卸)、带、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW或蓝光。存储介质还可以包括易失性或非易失性存储介质,诸如RAM、ROM、可通过诸如USB接口等的外围设备接口访问的非易失性存储器(例如,闪存存储器)。存储介质可以包括微机电系统(MEMS)以及可通过诸如网络和/或无线链路的通信媒介访问的存储介质。
应当理解,以上描述旨在是示例性的而非限制性的。例如,可彼此结合地使用上述实施方案。在回顾以上描述时,许多其他实施方案对于本领域的技术人员而言将是显而易见的。因此应当参考所附权利要求以及命名此类权利要求的等同形式的完整范围来确定本发明的范围。
Claims (18)
1.一种用于在图形处理器中进行处理的方法,包括:
创建管线状态对象,所述管线状态对象限定图形处理的路径,该路径包括至少顶点着色器阶段、光栅化阶段和片段着色器阶段;
在运行时间之前将所述管线状态对象编译成用于在目标GPU上操作以生成不可变管线状态对象的GPU特定代码;
在运行时间汇编第一可变参数,所述第一可变参数指示设置用于渲染操作的希望的图形渲染状态,其中所述第一可变参数不会导致生成的代码也不需要GPU特定代码的重新编译;
基于所述不可变管线状态对象和所述第一可变参数编码用于渲染操作的图形命令。
2.根据权利要求1所述的方法,其中基于所述不可变管线状态对象和所述第一可变参数编码用于渲染操作的图形命令包括:
在运行时间构造用于渲染操作的渲染命令编码器,其中,所述渲染命令编码器包括所述不可变管线状态对象。
3.根据权利要求1所述的方法,其中所述不可变管线状态对象在应用加载时或在安装所述应用时被编译,其中所述应用与所述不可变管线状态对象相关联,因为所述应用显示由所述不可变管线状态对象得到的图形。
4.根据权利要求1所述的方法,其中所述GPU特定代码为二进制代码。
5.根据权利要求1所述的方法,其中所述渲染操作是渲染到纹理操作。
6.根据权利要求1所述的方法,进一步包括接收与图形的帧相关联的图形代码的中间表示,其中所述中间表示与目标GPU无关,并且其中所述中间表示代表与应用程序绑定的并且编译的源代码。
7.根据权利要求1所述的方法,其中所述第一可变参数包括视口尺寸、输入纹理、输入顶点数据或遮挡查询中的一者或多者。
8.根据权利要求1所述的方法,其中所述第一可变参数能通过API调用进行修改。
9.一种用于处理图形处理器的系统,包括:
CPU;
与所述CPU相关联的存储器,用于保持用于所述CPU的指令;
用于生成图形的目标GPU,其中用于所述CPU的所述指令在被执行时使得通过以下方式生成图形:
创建管线状态对象,所述管线状态对象限定图形处理的路径,该路径包括至少顶点着色器阶段、光栅化阶段和片段着色器阶段;
在运行时间之前将所述管线状态对象编译成用于在目标GPU上操作以生成不可变管线状态对象的GPU特定代码;
在运行时间汇编第一可变参数,所述第一可变参数指示设置用于渲染操作的希望的图形渲染状态,其中所述第一可变参数不会导致生成的代码也不需要GPU特定代码的重新编译;
基于所述不可变管线状态对象和所述第一可变参数编码用于渲染操作的图形命令。
10.根据权利要求9所述的系统,其中基于所述不可变管线状态对象和所述第一可变参数编码用于渲染操作的图形命令包括:
在运行时间构造用于渲染操作的渲染命令编码器,其中,所述渲染命令编码器包括所述不可变管线状态对象。
11.根据权利要求9所述的系统,其中所述不可变管线状态对象在应用加载时或在安装所述应用时被编译,其中所述应用与所述不可变管线状态对象相关联,因为所述应用显示由所述不可变管线状态对象得到的图形。
12.根据权利要求9所述的系统,其中所述GPU特定代码为二进制代码。
13.根据权利要求9所述的系统,其中所述渲染操作是渲染到纹理操作。
14.根据权利要求9所述的系统,其中所述第一可变参数包括视口尺寸、输入纹理、输入顶点数据或遮挡查询中的一者或多者。
15.根据权利要求9所述的系统,其中所述第一可变参数能通过API调用进行修改。
16.一种设备,所述设备包括:
一个或多个处理器;和
一个或多个非暂态计算机可读存储介质,存储有指令,所述指令在由所述一个或多个处理器执行时使得所述设备执行根据权利要求1-8中任一项所述的方法。
17.一种包括用于执行根据权利要求1-8中任一项所述的方法的部件的装置。
18.一种在其上存储有指令的非暂态计算机可读存储介质,所述指令在被一个或多个处理器执行时使得执行根据权利要求1-8中任一项所述的方法。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462005131P | 2014-05-30 | 2014-05-30 | |
US62/005,131 | 2014-05-30 | ||
US14/501,933 US20150348224A1 (en) | 2014-05-30 | 2014-09-30 | Graphics Pipeline State Object And Model |
US14/501,933 | 2014-09-30 | ||
PCT/US2015/032518 WO2015183855A1 (en) | 2014-05-30 | 2015-05-27 | Graphics pipeline state object and model |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106462375A CN106462375A (zh) | 2017-02-22 |
CN106462375B true CN106462375B (zh) | 2019-06-07 |
Family
ID=53476973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580028651.4A Active CN106462375B (zh) | 2014-05-30 | 2015-05-27 | 图形管线状态对象和模型 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150348224A1 (zh) |
EP (1) | EP3137985B1 (zh) |
CN (1) | CN106462375B (zh) |
WO (1) | WO2015183855A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160316040A1 (en) * | 2015-04-27 | 2016-10-27 | Microsoft Technology Licensing, Llc | Providing pipeline for unified service and client interface |
US10768935B2 (en) * | 2015-10-29 | 2020-09-08 | Intel Corporation | Boosting local memory performance in processor graphics |
US9881352B2 (en) * | 2015-11-13 | 2018-01-30 | Intel Corporation | Facilitating efficient graphics commands processing for bundled states at computing devices |
US10460513B2 (en) * | 2016-09-22 | 2019-10-29 | Advanced Micro Devices, Inc. | Combined world-space pipeline shader stages |
US11055807B2 (en) | 2017-06-12 | 2021-07-06 | Apple Inc. | Method and system for a transactional based display pipeline to interface with graphics processing units |
US11080927B2 (en) * | 2017-11-30 | 2021-08-03 | Advanced Micro Devices, Inc. | Method and apparatus of cross shader compilation |
CN109710229B (zh) * | 2018-12-11 | 2022-03-15 | 中国航空工业集团公司西安航空计算技术研究所 | 一种面向gpu芯片图形管线单元的架构验证方法及平台 |
CN111459584B (zh) * | 2020-03-12 | 2024-04-12 | 支付宝(杭州)信息技术有限公司 | 页面渲染方法、装置和电子设备 |
US20210294579A1 (en) * | 2020-03-19 | 2021-09-23 | Advanced Micro Devices, Inc. | Graphics pipeline optimizations |
US11868759B2 (en) | 2021-12-08 | 2024-01-09 | Advanced Micro Devices, Inc. | Shader source code performance prediction |
CN116841739B (zh) * | 2023-06-30 | 2024-04-19 | 沐曦集成电路(杭州)有限公司 | 用于异构计算平台的数据包重用系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102027446A (zh) * | 2008-05-15 | 2011-04-20 | 微软公司 | 软件光栅化优化 |
CN102099788A (zh) * | 2008-06-06 | 2011-06-15 | 苹果公司 | 用于在多处理器上进行数据并行计算的应用编程接口 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8035646B2 (en) * | 2003-11-14 | 2011-10-11 | Microsoft Corporation | Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques |
US7746347B1 (en) * | 2004-07-02 | 2010-06-29 | Nvidia Corporation | Methods and systems for processing a geometry shader program developed in a high-level shading language |
US20060012604A1 (en) * | 2004-07-15 | 2006-01-19 | Avinash Seetharamaiah | Legacy processing for pixel shader hardware |
US8111260B2 (en) * | 2006-06-28 | 2012-02-07 | Microsoft Corporation | Fast reconfiguration of graphics pipeline state |
US8610731B2 (en) * | 2009-04-30 | 2013-12-17 | Microsoft Corporation | Dynamic graphics pipeline and in-place rasterization |
US9324175B2 (en) * | 2009-09-11 | 2016-04-26 | Nvidia Corporation | Memory coherency in graphics command streams and shaders |
US8766988B2 (en) * | 2009-10-09 | 2014-07-01 | Nvidia Corporation | Providing pipeline state through constant buffers |
US9176794B2 (en) * | 2010-12-13 | 2015-11-03 | Advanced Micro Devices, Inc. | Graphics compute process scheduling |
US20130159630A1 (en) * | 2011-12-20 | 2013-06-20 | Ati Technologies Ulc | Selective cache for inter-operations in a processor-based environment |
US9361079B2 (en) * | 2012-01-30 | 2016-06-07 | Nvidia Corporation | Method for compiling a parallel thread execution program for general execution |
US10535185B2 (en) * | 2012-04-04 | 2020-01-14 | Qualcomm Incorporated | Patched shading in graphics processing |
US20140354658A1 (en) * | 2013-05-31 | 2014-12-04 | Microsoft Corporation | Shader Function Linking Graph |
US20150179142A1 (en) * | 2013-12-20 | 2015-06-25 | Nvidia Corporation | System, method, and computer program product for reduced-rate calculation of low-frequency pixel shader intermediate values |
US9235871B2 (en) * | 2014-02-06 | 2016-01-12 | Oxide Interactive, LLC | Method and system of a command buffer between a CPU and GPU |
-
2014
- 2014-09-30 US US14/501,933 patent/US20150348224A1/en not_active Abandoned
-
2015
- 2015-05-27 EP EP15730892.5A patent/EP3137985B1/en active Active
- 2015-05-27 WO PCT/US2015/032518 patent/WO2015183855A1/en active Application Filing
- 2015-05-27 CN CN201580028651.4A patent/CN106462375B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102027446A (zh) * | 2008-05-15 | 2011-04-20 | 微软公司 | 软件光栅化优化 |
CN102099788A (zh) * | 2008-06-06 | 2011-06-15 | 苹果公司 | 用于在多处理器上进行数据并行计算的应用编程接口 |
Also Published As
Publication number | Publication date |
---|---|
EP3137985B1 (en) | 2022-01-26 |
US20150348224A1 (en) | 2015-12-03 |
WO2015183855A1 (en) | 2015-12-03 |
EP3137985A1 (en) | 2017-03-08 |
CN106462375A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106462375B (zh) | 图形管线状态对象和模型 | |
US10747519B2 (en) | Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit | |
US20160350968A1 (en) | Run-Time Optimized Shader Programs | |
US20190251656A1 (en) | System And Method For Unified Application Programming Interface And Model | |
KR100909153B1 (ko) | 그래픽 파이프라인 서브유닛을 디버깅하기 위한 방법 및시스템 | |
US9495722B2 (en) | Developer controlled layout | |
CN106415496A (zh) | 统一中间表示 | |
CN106575228A (zh) | 图形处理中的渲染目标命令重新排序 | |
US8203558B2 (en) | Dynamic shader generation | |
KR102617106B1 (ko) | 데이터 처리 시스템 | |
KR102459322B1 (ko) | 자동으로 컴파일되는 컴퓨트 셰이더를 사용하는 프리미티브 컬링 | |
US10719303B2 (en) | Graphics engine and environment for encapsulating graphics libraries and hardware | |
US20140347371A1 (en) | Graphics processing using dynamic resources | |
CN105493030A (zh) | 着色器函数链接图表 | |
CN104067225B (zh) | 对用于图形处理单元的具有相关联的纹理加载指令的控制流指令的判定 | |
CN108139897B (zh) | 在不预处理宏的情况下使用Ubershader变体的系统和方法 | |
US11094036B2 (en) | Task execution on a graphics processor using indirect argument buffers | |
US10319068B2 (en) | Texture not backed by real mapping | |
CN108140233A (zh) | 具有像素块级别粒度的图形处理单元抢占 | |
US20130120381A1 (en) | Fast rendering of knockout groups using a depth buffer of a graphics processing unit | |
US10157440B2 (en) | Static data sharing mechanism for a heterogeneous processing environment | |
CN115375821A (zh) | 一种图像渲染方法、装置及服务器 | |
US9971580B2 (en) | Fast access and use of common data values relating to applications in parallel computing environments | |
US20240094999A1 (en) | Automatically replacing code in program that manipulates two vectors of data to improve execution time | |
US11829736B2 (en) | Method of optimizing register memory allocation for vector instructions and a system thereof |
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 |