CN110291563A - 图形处理中的多个着色器进程 - Google Patents

图形处理中的多个着色器进程 Download PDF

Info

Publication number
CN110291563A
CN110291563A CN201880011854.6A CN201880011854A CN110291563A CN 110291563 A CN110291563 A CN 110291563A CN 201880011854 A CN201880011854 A CN 201880011854A CN 110291563 A CN110291563 A CN 110291563A
Authority
CN
China
Prior art keywords
pixel coloring
coloring device
pel
pixel
output
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.)
Granted
Application number
CN201880011854.6A
Other languages
English (en)
Other versions
CN110291563B (zh
Inventor
I·内弗雷弗
M·J·I·富勒
A·J·迈尔斯
J·M·古尔德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN110291563A publication Critical patent/CN110291563A/zh
Application granted granted Critical
Publication of CN110291563B publication Critical patent/CN110291563B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Abstract

本发明提供了用于在计算机设备中绘制图形的方法和设备,方法包括:在图形处理单元(GPU)处接收待绘制的图元的部分的存储器位置地址连同针对图元的部分的一个或者多个像素着色器参数的一个或者多个值的指示;由GPU基于一个或者多个像素着色器参数的一个或者多个值的指示从多个可能的像素着色器中选择像素着色器;以及由GPU基于将像素着色器应用于图元的部分生成图元的部分的绘制目标的至少一个输出。

Description

图形处理中的多个着色器进程
背景技术
以下描述涉及一种计算机设备,并且更具体地涉及使用着色器来绘制计算机设备上的图形。
能够将二维(2D)对象或者来自三维(3D)世界(真实或者虚构)的对象绘制到2D显示屏上的计算机图形系统目前用于多种应用。例如,3D计算机图形可以被用于实时交互式应用(诸如,视频游戏、虚拟现实、科学研究等)以及离线应用(诸如,高分辨率电影的创作、图形艺术等)。通常,图形系统包括图形处理单元(GPU)。GPU可以被实现为计算机的中央处理单元(CPU)的协处理器组件,并且可以以插件卡(例如,视频卡)、协处理器的形式或者作为直接集成到计算机的主板或者诸如游戏设备等其他设备中的功能性被提供。
通常,GPU具有“逻辑图形流水线”,该“逻辑图形流水线”可以接受2D或者3D场景的一些表示作为输入并且输出定义2D图像的位图以进行显示。例如,包括DIRECT3D应用编程接口(API)在内的微软公司的应用编程接口的DRECTX集合是具有图形流水线模型的API的示例。另一示例包括开放图形库(OPENGL)API。图形流水线通常包括用以将一组顶点、纹理、缓冲区和状态信息转换为屏幕上的图像帧的多个阶段。例如,图形流水线的阶段之一是着色器。着色器是在专用处理单元上运行的一段代码,其也被称为着色器单元或者着色器处理器,通常一次执行多个数据线程,被编程为对正被绘制的片段(fragment)生成适当水平的颜色和/或特殊效果。特别地,例如,顶点着色器处理顶点的特征(位置、纹理坐标、颜色等),并且像素着色器处理像素的特征(纹理值、颜色、z深度和α值)。通常,图形流水线内的恒定采样率被用于绘制整个帧。由于对高保真图像的期望,因此像素着色通常以每像素速率执行。因此,计算机设备操作图形流水线以将关于3D对象的信息转换为能够被显示的位图,并且这个过程需要相当大的存储器和处理能力。
像素密度和显示分辨率持续增加,并且在这方面持续希望能够显示3D对象的显示设备的功率降低。
发明内容
以下呈现对一个或者多个示例的简要概述,以便提供对这些示例的基本理解。该概述不是对全部预期示例的全面概况,并且不旨在标识全部示例的关键或重要元素或者描述任何或全部示例的范围。其目的仅在于以简要形式呈现一个或者多个示例的一些概念作为稍后所呈现的更详细的描述的序言。
一个示例涉及一种用于在计算机设备、计算设备和/或计算机可读介质中绘制图形的方法,该计算机设备、该计算设备和/或该计算机可读介质被配置为:在图形处理单元(GPU)处接收待绘制的图元的部分的存储器位置地址连同针对图元的部分的一个或者多个像素着色器参数的一个或者多个值的指示;由GPU基于一个或者多个像素着色器参数的一个或者多个值的指示从多个可能的像素着色器中选择像素着色器;以及由GPU基于将像素着色器应用于图元的部分而生成图元的部分的绘制目标的至少一个输出。
在另一示例中,提供了一种计算设备,该计算设备包括存储器、被耦合至存储器并且被配置为执行与一个或者多个应用相对应的指令的处理器、用于显示由一个或者多个应用产生的一个或者多个图像的显示器和被配置为绘制一个或者多个图像的一个或者多个图元的GPU。GPU被配置为:接收待绘制的一个或者多个图元中的图元的部分的存储器位置地址连同针对图元的部分的一个或者多个像素着色器参数的一个或者多个值的指示;基于一个或者多个像素着色器参数的一个或者多个值的指示从多个可能的像素着色器中选择像素着色器;以及基于将像素着色器应用于图元的部分而生成图元的部分的绘制目标的至少一个输出。
为能达成前述及相关目的,一个或者多个示例包括在下文中充分描述并在所附权利要求中特别指出的特征。以下描述和附图详细阐述了一个或者多个示例的某些说明性特征。然而,这些特征仅仅是指示了可以采用各种示例的原理的各种方式中的若干种方式,并且本说明书旨在包括所有此类示例及其等同物。
附图说明
图1是根据所描述的示例配置的包括图形处理单元和图形流水线的计算机设备的示例架构的示意性框图;
图2是图1的计算机设备的图形流水线和图形存储器的示例的示意图;
图3是根据所描述的示例的基于图形流水线的操作来绘制图像的方法的示例的流程图;
图4是根据所描述的示例的基于图形流水线的操作来绘制图像的方法的示例的流程图,其中该操作用以使用一个像素着色器来生成到绘制目标的多个输出;
图5是根据所描述的示例的基于图形流水线的操作来绘制图像的方法的示例的流程图,其中该操作用以使用多个启动的像素着色器来生成到绘制目标的多个输出;
图6是图像的图元以及被图元覆盖的图块(tile)和子图块的示例和与在图3和/或图4的方法中描述的操作相关联的组件的示例的示意图;
图7是图像的图元以及被图元覆盖的图块和子图块的示例和与在图3和/或图5的方法中描述的操作相关联的组件的示例的示意图;以及
图8是能够应用所描述的示例的抗混叠(AA)的示例的图表。
具体实施方式
在下面结合附图阐述的详细描述旨在描述各种配置,并且不旨在表示其中可以实践本文所描述的构思的仅有配置。详细描述包括用于提供对各种构思的透彻理解的目的的特定细节。然而,对于本领域的技术人员而言将明显的是,这些构思可以在没有这些特定细节的情况下被实践。在一些情况下,众所周知的组件以框图的形式被示出,以免使这些构思模糊。
本公开描述了与为用以绘制图像(其部分)的光栅化(扫描转换的)图元的给定片段(例如,图块、子图块、象限、像素或者子像素区域)提供多个着色器进程连同选择器相关的各种示例,选择器用以选择多个着色器进程中的一个以用于对片段执行着色操作。在另一示例中,多个着色器进程中的一个以上的着色器进程可以被用来产生片段的多个绘制目标(它们可以被组合以产生单个绘制目标)。例如,图形处理单元(GPU)可以向显示器提供多个着色器进程、选择器、用于生成到绘制目标的多个输出的机制等,以用于绘制由多个片段组成的图形。
在一个示例中,网格着色器(其可以是光栅器阶段的部分,如在本文中进一步描述的)可以操作以执行一个或者多个线程向量,该一个或者多个线程向量中的每个线程向量可以包括用于独立或者并行执行的多个通道(例如,线程)(例如,在一些示例中是64个通道)。在该示例中,网格着色器可以启动像素着色器在多个通道中的每个通道上操作,以提供对图元的多个像素的大体上同时的着色,其中,像素着色器可以在每个通道中(例如,同时地)执行相同的指令,以用于对不同组的一个或者多个像素进行着色。
在示例中,网格着色器可以能够为给定图元的各部分提供不同的像素着色器参数值。例如,不同的像素着色器参数值可以包括变化率着色参数,使得不同的着色率(例如,每像素着色器线程1个像素、每像素着色器线程2个像素、每像素着色器线程4个像素等)能够被应用于给定图元的不同部分。在另一示例中,不同的像素着色器参数值可以包括来自可以用来确定像素值的模板缓冲区的不同模板值等。
因此,对于给定图元或者图像的其他片段,网格着色器可以压缩一个或者多个线程向量,该一个或者多个线程向量可以各自与图像的片段的部分相对应,诸如,32×32像素的粗图块、8×8像素的图块、4×4像素的子图块等,其中,给定线程向量的通道被确定为具有相同的像素着色器设置。网格着色器能够相应地基于像素着色器设置启动(多个)对应的像素着色器,以用于按照一个或者多个线程向量执行像素着色器进程。网格着色器能够相应地基于像素着色器设置针对不同组的线程向量启动不同的像素着色器以及对应的进程。附加地,在示例中,网格着色器可以按照图元和/或图像利用不同的像素着色器设置来启动多个正交像素着色器,这可以通过允许像素着色器的动态适应和多次执行提高对图元执行着色的效率。
在另一示例中,多个像素着色进程可以针对图元的给定部分被执行以生成到图元的部分的绘制目标的多个输出。例如,网格着色器可以通过启动针对图元的部分的多个像素着色器(例如,在大体上并行的执行期间)来启动多个像素着色器进程,其中,多个像素着色器中的每个像素着色器可以获得图元的相同部分作为输入,但是可以基于可能包括不同的着色率、模板等的不同的像素着色器参数而执行不同的着色进程,以生成针对图元的部分的到绘制目标的多个输出。在另一示例中,网格着色器可以启动能够生成针对图元的部分的到绘制目标的多个输出的单个像素着色器。在该示例中,像素着色器可以获得图元的部分作为输入,并且然后可以对输入执行不同的像素着色器进程(例如,在串行执行期间并且与不同的像素着色器参数相对应)以实现多个输出。在示例中,多个输出然后可以被用来生成绘制目标(例如,基于指定哪个输出将用于绘制目标的给定部分的掩码)。
参照图1,在一个示例中,计算机设备10包括被配置为实现提供多个着色器进程的所描述的示例的图形处理单元(GPU)12。例如,GPU 12可以配置为:对于给定图元、其部分、相关联的图像等,压缩线程向量以用于用相似的像素着色器参数进行处理;基于像素着色器参数为线程向量选择像素着色器;基于所选像素着色器启动多个像素着色器以处理线程向量;对图元或者其部分执行多个着色进程以产生到绘制目标的多个输出等。
例如,在一种实现中,计算机设备10包括CPU 34,该CPU 34可以是被特别配置或者编程以控制根据所描述的示例的计算机设备10的操作的一个或者多个处理器。例如,用户可以将输入提供给计算机设备10以使CPU 34执行一个或者多个软件应用46。在CPU 34上执行的软件应用46可以包括但不限于例如操作系统、文字处理器应用、电子邮件应用、电子数据表应用、媒体播放器应用、视频游戏应用、图形用户界面应用或者另一程序中的一个或者多个。附加地,CPU 34可以包括能够被执行以用于控制GPU 12的操作的GPU驱动程序48。用户可以经由一个或者多个输入设备51(诸如,键盘、鼠标、麦克风、触摸板或另一输入设备)将输入提供给计算机设备10,该另一输入设备经由输入/输出桥接器49(诸如,但不限于南桥芯片组或者集成电路)被耦合至计算机设备10。
在CPU 34上执行的软件应用46可以包括一个或者多个指令,该一个或者多个指令可执行以使CPU 34发出一个或者多个图形命令36,从而使得对与显示设备40上的图像24相关联的图形数据进行绘制。图像24可以包括例如一个或者多个对象,并且每个对象可以包括一个或者多个图元,如下面更详细地解释的。例如,在一些实现中,软件应用46将图形命令36放置在系统存储器56中的缓冲区中并且GPU 12的命令处理器64获取这些命令。在一些示例中,软件指令可能符合图形应用编程接口(API)52,诸如,但不限于DirectX和/或Direct3D API、开放图形库(OpenGL.RTM.)API、开放图形库嵌入式系统(OpenGL ES)API、X3D API、RenderMan API、WebGL API或者任何其他公共或专有标准图形API。为了处理图形绘制指令,CPU 34可以向GPU 12(例如,通过GPU驱动程序48)发出一个或者多个图形命令36,以使GPU 12执行图形数据的绘制中的一些或者全部。在一些示例中,待绘制的图形数据可以包括图形图元的列表,例如,点、线、三角形、四边形、三角带等。
计算机设备10还可以包括存储器桥54,该存储器桥54与CPU 34通信,这利于对进和出系统存储器56和/或图形存储器58的数据的传递。例如,存储器桥54可以接收存储器读取和写入命令,并且关于系统存储器56和/或图形存储器58服务这些命令,以便为计算机设备10中的组件提供存储器服务。存储器桥54经由一个或者多个总线60被通信地耦合至GPU12、CPU 34、系统存储器56、图形存储器58和输入/输出桥接器49。在示例中,例如,存储器桥54可以是北桥集成电路或者芯片组。
系统存储器56可以存储可存取以用于由CPU 34执行的程序模块和/或指令和/或用于由在CPU 34上执行的程序使用的数据。例如,系统存储器56可以存储用于启动计算机设备10的操作系统应用。进一步地,例如,系统存储器56可以存储被CPU 34用来在显示设备40上呈现图形用户界面(GUI)的窗口管理器应用。另外,系统存储器56可以存储用户应用46和用于由计算机设备10的其他组件使用和/或生成的其他信息。例如,系统存储器56可以充当用于GPU 12的设备存储器(尽管如图所示GPU 12通常可以具有到其自己的图形存储器58的直接连接),并且可以存储将被GPU 12操作的数据以及由GPU 12所执行的操作产生的数据。例如,系统存储器56可以存储纹理缓冲区、深度缓冲区、模板缓冲区、顶点缓冲区、帧缓冲区等的任何组合。系统存储器56可以包括一个或者多个易失性或者非易失性存储器或者存储设备,诸如,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁性数据介质或者光学存储介质。
附加地,在示例中,计算机设备10可以包括诸如CD-ROM或者其他可移除存储器设备的系统磁盘62或者可以与其通信地连接。系统磁盘62可以包括程序和/或指令,在从系统存储器56启动操作系统失败的情况下,计算机设备10可以用这些程序和/或指令来例如启动操作系统。系统磁盘62可以经由输入/输出桥接器49被通信地耦合至计算机设备10的其他组件。
如上所述,GPU 12可以被配置为执行图形操作以(例如,基于图形图元)将一个或者多个绘制目标44绘制至显示设备40来形成图像24。例如,当在CPU 34上执行的软件应用46中的一个需要图形处理时,CPU 34可以将与图像24相关联的图形命令和图形数据连同图形命令36提供给GPU 12,以用于绘制至显示设备40。图形数据可以包括例如绘图命令、状态信息、图元信息、纹理信息等。GPU 12可以包括一个或者多个处理器,该一个或者多个处理器包括:用于通过用于组合图元的至少一个图元处理器66接收图形命令36和发起或者控制后续图形处理的命令处理器64、用于处理针对GPU 12的顶点、表面、像素和其他数据的多个图形着色器处理器68、用于生成针对片段或者像素的纹理数据的一个或者多个纹理处理器67和用于生成颜色数据和深度数据并且合并着色输出的一个或者多个颜色和深度处理器69。例如,在示例中,图元处理器66可以实现逻辑图形流水线的输入组合器和光栅器阶段,如下所述。在一些实例中,GPU 12可以用高度并行结构来建立,与CPU 34相比较,该高度并行结构提供对复杂图形相关的操作的更有效的处理。例如,GPU 12可以包括多个处理元件,其被配置为以并行方式对多个顶点或者像素进行操作。在一些实例中,与使用CPU 34将图像24直接画到显示设备40上相比,GPU 12的高度并行性质允许GPU 12将图形图像24,例如,GUI和二维(2D)和/或三维(3D)图形场景,更快速地画到显示设备40上。
在一些实例中,GPU 12可以被集成到计算机设备10的主板中。在其他实例中,GPU12可以存在于安装在计算机设备10的主板中的端口中的图形卡上,或者也可以以其他方式被并入外围设备内,该外围设备被配置为与计算机设备10互操作。GPU 12可以包括一个或者多个处理器,诸如,一个或者多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或者其他等效集成或者离散逻辑电路装置。
在示例中,GPU 12可以被直接耦合至图形存储器58。例如,图形存储器58可以存储索引缓冲区、顶点缓冲区、纹理缓冲区、深度缓冲区、模板缓冲区、绘制目标缓冲区、帧缓冲区、状态信息、着色器资源、常量缓冲区、粗SRP地图(例如,在可以被用来基于地图中最接近变换顶点的点查找SRP值的粗分辨率下的可视区域的2D地图)、乱序存取视图资源、图形流水线流输出等的任何组合。如此,GPU 12可以在没有使用总线60的情况下从图形存储器58读取数据和将数据写入图形存储器58。换言之,GPU 12可以在本地使用对于图形卡而言是本地的存储装置而不是系统存储器56来处理数据。这允许GPU 12通过消除对GPU 12经由总线60来读取和写入数据的需要,而以更有效的方式操作,该总线60可能经历大量总线流量。然而,在一些实例中,GPU 12可能不包括分离的存储器,而是可以经由总线60利用系统存储器56。图形存储器58可以包括一个或者多个易失性或者非易失性存储器或者存储设备,诸如,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、磁性数据介质或者光学存储介质。
CPU 34和/或GPU 12可以将经过绘制的图像数据(例如,绘制目标44)存储在图形存储器58的绘制目标缓冲区中。应当注意,绘制目标缓冲区也可以是独立存储器或者可以被分配在系统存储器56内。GPU 12可以进一步包括解析器组件70,该解析器组件70被配置为从图形存储器58的绘制目标缓冲区取回数据并且将多样本数据转换成每像素颜色值以发送至显示设备40,从而显示由经过绘制的图像数据表示的图像24。在一些示例中,GPU 12可以包括数模转换器(DAC),该DAC被配置为将从解析的绘制目标缓冲区取回的数值转换成由显示设备40可消耗的模拟信号。在其他示例中,GPU 12可以通过用于附加处理和到模拟的转换的数字接口,诸如,高清多媒体接口(HDMI接口)或者DISPLAYPORT接口,将数值传递给显示设备40。如此,在一些示例中,GPU 12、图形存储器58和解析器组件70的组合可以被称为图形处理系统72。
显示设备40可以包括监视器、电视机、投影设备、液晶显示器(LCD)、等离子显示板、发光二极管(LED)阵列,诸如,有机LED(OLED)显示器、阴极射线管(CRT)显示器、电子报纸、表面传导电子发射显示器(SED)、激光电视显示器、纳米晶体显示器或者另一种类型的显示器单元。显示设备40可以被集成在计算机设备10内。例如,显示设备40可以是移动电话的屏幕。备选地,显示设备40可以是经由有线或者无线通信链路被耦合至计算机设备10的独立设备。例如,显示设备40可以是经由电缆或者无线链路被连接至个人计算机的计算机监视器或者平板显示器。在另一示例中,显示设备40(和计算机设备10)可以是诸如虚拟现实(VR)、混合现实(MR)或者增强现实(AR)设备等头戴式显示器的部分。
根据所描述的示例中的一个示例,图形API 52和GPU驱动程序48可以将GPU 12配置为执行逻辑图形流水线14,从而执行多个着色器进程,如本文所描述的。
参照图2,例如,在一个示例中,GPU 12可以被配置为实现如本文所描述的示例逻辑图形流水线14的阶段中的一个或者多个阶段。在示例中,各种阶段中的一个或者多个阶段可以是可编程的,例如以执行多个着色器进程,如上所述。而且,在示例中,共同着色器核心可以由圆形矩形块表示。这种可编程性使得图形流水线14非常灵活和适应性强。下面将简要描述每个阶段的目的,并且将进一步关于后续图描述附加功能性。
输入组合器阶段80可以向流水线供应数据(例如,三角形、线、点和索引),该数据可以从索引缓冲区100、顶点缓冲区102等获得。顶点着色器阶段82处理顶点,通常执行诸如变换、蒙皮和照明等操作。顶点着色器阶段82可以采取单输入顶点并且产生单输出顶点。外壳着色器阶段84、镶嵌器阶段86和/或域着色器阶段88可以定义镶嵌阶段,该镶嵌阶段可以将高阶表面转换为三角形或者其他图元22以在逻辑图形流水线14内进行绘制。
几何着色器阶段90处理全部图元22,并且例如,可以与光栅器阶段94等一起被称为图元着色器。其输入可以是完整的图元22(其是用于三角形的三个顶点、用于线的两个顶点、或用于点的单个顶点等)、象限或者矩形。另外,每个图元也可以包括针对任何邻边图元的顶点数据。这可以包括用于三角形的附加的三个顶点或者用于线的附加的两个顶点等。几何着色器阶段90也支持有限的几何放大和衰减。在给定输入图元22的情况下,几何着色器可以放弃图元,或者发出一个或者多个新图元。
流输出阶段92在行进到光栅器阶段94期间,将图元数据从图形流水线14流传输至图形存储器58。数据可以被流输出和/或传递到光栅器阶段94中。被流输出至图形存储器58的数据可以作为输入数据被再循环回到图形流水线14中,或者被从CPU 34读回(图1)。
光栅器阶段94可以剪辑图元,为像素着色器阶段96准备图元并且确定如何调用像素着色器。附加地,光栅器阶段94可以执行精细的扫描转换并且确定被片段覆盖的像素样本位置。例如,光栅器阶段94可以压缩与图元的部分相对应的一个或者多个线程向量,其中,一个或者多个线程向量被确定为是使用相同的像素着色器参数来着色的。例如,给定线程向量可以与待着色的图元(例如,粗图块——32×32像素、图块——8×8像素、子图块——4×4像素等)的片段相对应。相应地,光栅器阶段94可以通过组合(例如,在列表中)与待着色的一个或者多个线程向量相对应的存储器位置地址,使用相同的像素着色器参数连同像素着色器参数的对应表示来压缩一个或者多个线程向量。例如,(多个)像素着色器参数的表示可以包括插值、指定变化率着色器(或者用于执行变化率着色的相关参数,诸如,着色率)的整数值、来自被用来计算值的模板缓冲区的模板等。该表示在本文中可以被称为跳跃表槽参数的跳跃表槽值,通过该跳跃表槽值可以确定要启动的像素着色器(或者分支到哪个像素着色器,如本文进一步描述的)。
像素着色器阶段96接收针对图元和/或片段的插入数据、像素着色器设置等并且生成每像素数据,诸如,颜色和样本覆盖掩码。例如,像素着色器阶段96可以在由线程向量定义的多个通道中操作给定像素着色器,以执行像素着色器进程。而且,在示例中,像素着色器阶段96可以操作能够产生针对给定图元或者其部分的绘制目标的多个输出的像素着色器。像素着色器阶段96可以作为一个或者多个线程向量运行,以从图形存储器58连同相关联的像素着色器参数值(例如,跳跃表槽等)对在存储器位置地址中的像素进行着色。在该示例中,像素着色器阶段96可以发起一个或者多个像素着色器以对一个或者多个线程向量中的像素执行像素着色进程。例如,像素着色器阶段96可以基于与线程向量相关联的跳跃表槽为给定线程向量或者线程向量集确定要发起的像素着色器,该跳跃表槽可以由几何着色器阶段90(例如,图元着色器)指定。
例如,像素着色器阶段96可以基于由跳跃表槽指示的对应变化率着色器、模板等,来初始化可以使用与跳跃表槽值相对应的像素着色器参数值的像素着色器。像素着色器阶段96可以针对遇到的每个跳跃表槽值(例如,利用对应的像素着色器参数值)发起像素着色器。另外,像素着色器阶段96可以启动针对给定线程向量或者图元的其他部分的多个像素着色器进程,以将多个输出提供给其绘制目标。例如,像素着色器阶段96可以通过使用在相同的图元输入集上的不同的着色参数和/或对应的参数值(例如,不同的着色率),来初始化多个像素着色器,以产生到相同的图元或者其部分的绘制目标的多个输出。在另一示例中,像素着色器阶段96可以初始化能够产生到被输入像素着色器中的图元或者其部分的绘制目标的多个输出的像素着色器,其中,多个输出是通过使用不同的像素着色器参数和/或对应的参数值对图元或者其部分执行不同的像素着色器进程来生成的。
输出合并器阶段98将各种类型的流水线输出数据(像素着色器值,诸如,单个或者多个像素着色器的多个输出、深度和模板信息以及覆盖掩码)与绘制目标44(图1)的内容和深度/模板缓冲区组合,以生成图形流水线14的最终结果。
同样,如上所述并且如图2所示,图形流水线14可以与图形存储器58一起操作以用于交换和存储数据。例如,图形存储器58可以包括一个或者多个顶点缓冲区102,该一个或者多个顶点缓冲区102各自包含用以定义图像24(或者其他图像)的几何的顶点数据。顶点数据可以包括位置坐标、颜色数据、纹理坐标数据、标准数据等。顶点缓冲区102的最简单的示例是仅仅包含位置数据的顶点缓冲区。在示例中,顶点缓冲区102可以包含完全指定3D顶点的数据。这种顶点缓冲区的示例可以是包含每顶点位置、标准和纹理坐标的顶点缓冲区102。该数据可以被组织为每顶点元素的多个集合。
进一步地,在示例中,图形存储器58可以包括一个或者多个索引缓冲区100,该一个或者多个索引缓冲区100包含到顶点缓冲区102中的整数偏移并且被用来更有效地绘制图元22。每个索引缓冲区100可以包括索引的顺序集合;每个索引被用来标识顶点缓冲区中的顶点。
同样,在示例中,图形存储器58可以包括一个或者多个常量缓冲区104,其允许将着色器常量、着色器数据、模板和/或任何其他着色器资源有效地供应给图形流水线14。进一步地,图形存储器58中的一个或者多个缓冲区可以被用来存储流输出阶段92的结果。而且,图形存储器58可以包括一个或者多个纹理缓冲区或者纹理数据105,诸如,向对象给出纹理的外观的像素颜色的位图。
附加地,在示例中,图形存储器58可以包括一个或者多个乱序存取视图资源106(其包括缓冲区、纹理和纹理阵列——没有多重采样)。乱序存取视图资源106可以允许来自多个线程的暂时乱序的读取/写入存取。在这点上,例如,该资源类型可以在没有通过使用某些定义功能生成存储器冲突的情况下同时由多个线程来读取/写入。
而且,在示例中,图形存储器58可以包括一个或者多个绘制目标缓冲区108,该一个或者多个绘制目标缓冲区108可以包括由图形流水线14产生的图像24的每个像素32的绘制目标或者绘图。
参照图3至图7,操作根据所描述的示例的图形流水线14的示例可以参考图3至图5中的绘制图形的方法120、130和140、和参考图6和图7中的具有覆盖一个或者多个图块20的一个或者多个图元22的图像24、以及几何着色器阶段90/光栅器阶段94(例如,图元着色器)的对应组件来解释,该一个或者多个图块20可以包括每图块20一个或者多个子图块18(例如,子图块1和子图块2)和/或一个或者多个像素32。在示例中,一个或者多个图元22可以覆盖一个或者多个图块,该一个或者多个图块可以包括一个或者多个子图块。在一个示例中,多个图块可以覆盖32×32像素(也被称为粗图块),其中,每个图块可以是8×8像素,并且子图块可以是4×4像素。
参照图3、图6和图7,绘制计算机设备中的图形的方法120涉及从多个像素着色器中选择像素着色器,多个像素着色器可以被发起以用于基于不同的像素着色器参数值来提供着色。
在122处,方法120可选地包括基于具有一个或者多个相似的像素着色器参数值的部分压缩图元或者图像的部分的多个存储器位置地址。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或图块行走阶段可以被配置为:基于具有一个或者多个相似的像素着色器参数值的部分,压缩图元(例如,图元22)或者图像的部分的多个存储器位置地址(例如,在图形存储器58中)。例如,图块行走阶段121可以确定针对图元22的部分的像素着色器参数值,其中,该部分可以包括一个或者多个图块20、子图块18等。值被确定的像素着色器参数可以包括着色率(例如,使得图元的多个部分,诸如,粗图块、图块、子图块等,可以以不同的着色率被着色)、来自用于对图元的部分进行着色的模板缓冲器的一个或者多个模板等。图块行走阶段121可以基于每个对象(例如,针对属于待着色的对象的图元)、每个三角形、对屏幕空间区域(例如,针对虚拟现实显示器)的最优化等确定着色率、模板等。
在任何情况下,例如,图块行走阶段121可以将图元或者图像的部分与表示一个或者多个像素着色器参数值的跳跃表槽值相关联。例如,跳跃表槽值可以包括位中与着色率相对应的部分、位中与在对部分进行着色时源自模板缓冲区的模板相对应的部分等。在一个示例中,跳跃表槽可以与存储器位置地址组合以生成另一参数值,该另一参数值可以被提供给像素着色器阶段96,以允许像素着色器阶段96确定针对像素着色器的存储器位置地址连同用于选择适当的像素着色器的跳跃表槽值。在具体示例中,参数值的底部40个位可以包括存储器地址,并且顶部24个位可以包括可编程参数,该可编程参数可以包括跳跃表槽,该跳跃表槽然后可以由像素着色器阶段96通过隔离顶部24个位来确定。
在124处,方法120包括接收待绘制的图元的部分的存储器位置地址和/或针对图元的部分的一个或者多个像素着色器参数值的指示。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为接收待绘制的图元的部分的存储器位置地址和/或(连同)针对图元的部分的一个或者多个像素着色器参数值的指示。例如,线程启动器123可以接收具有相似的像素着色器参数的图元的一个或者多个部分(例如,与相同的跳跃表槽相关联的部分)的存储器位置地址。在示例中,线程启动器123可以接收指示(多个)存储器位置地址的值和对应跳跃表槽值。在一个示例中,存储器位置地址可以是具有相似的跳跃表槽值的地址列表的一部分。在另一示例中,线程启动器123也可以接收与针对一个或者多个像素着色器参数的不同值相关联的图元的其他部分的存储器位置地址。
在126处,方法120可选地包括初始化多个可能的像素着色器以用于应用于图元的部分。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:将多个可能的像素着色器初始化为线程组(例如,将被并行执行)以用于应用图元的部分。在一个示例中,线程启动器123可以初始化多个可能的像素着色器(例如,可以在128处选择的发起的或者可能发起的像素着色器)以基于相关联的像素着色器参数值(例如,基于像素着色器参数的可能的值的全部或者部分)操作,并且可以允许经由跳跃表选择给定像素着色器,该跳跃表允许基于跳跃表槽值分支到像素着色器(例如,其中跳跃表槽值与像素着色器参数值相对应,如前所述)。因此,考虑到具体跳跃表槽,初始化的多个像素着色器中的一个像素着色器可以被选择并且分支,如下面进一步详细描述的。
在另一示例中,图形流水线14可以在GPU代码的编译期间初始化可能的像素着色器,并且到基于跳跃表槽(例如,基于选择像素着色器,如下面参考动作128所描述的)的像素着色器的分支可以变成静态链接操作。线程启动器123也可以初始化(例如,分配)多个存储器寄存器,其中,要分配的存储器寄存器的数目可以与可能的像素着色器相关联(例如,由多个可能的像素着色器中的一个指定的存储器寄存器的最大数目)。在任何情况下,通过允许多个发起的像素着色器中的一个对图元的部分进行着色,这可能利于GPU 12处的变化率着色。另外,例如,要启动的像素着色器的数目可以用GPU 12的寄存器设置指示,该GPU12可以由线程启动器123确定,并且相应地被发起以可能供像素着色器阶段96连同对应的像素着色器参数值(例如,着色率)使用。
在128处,方法120包括基于一个或者多个像素着色器值的指示从多个可能的像素着色器选择像素着色器。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:基于一个或者多个像素着色器值的指示从多个可能的像素着色器选择像素着色器。在一个示例中,线程启动器123可以基于(例如,通过跳跃表槽)所指示的一个或者多个像素着色器参数值的值来启动像素着色器125,这可以包括基于对应的着色率、待使用的模板等启动像素着色器125。在示例中,线程启动器123可以生成像素着色器125的多个实例的线程向量以用于对图元的部分进行着色。线程启动器123可以生成具有为一个或者多个像素着色器参数(例如,着色率)指定的相似的值的针对图元的部分中的每个部分的线程向量,使得像素着色器可以被应用于线程向量(例如,如用所接收到的存储器位置地址所指示的)。
在示例中,多个可能的像素着色器中的每一个可以被定义为与一个或者多个像素着色器参数的可能的值相对应,并且因此,线程启动器123可以将像素着色器125确定为具有针对参数的匹配值的多个可能的像素着色器中的一个。在另一示例中,线程启动器123可以初始化或者选择像素着色器125以使用指定的像素着色器参数的值来操作。而且,例如,线程启动器123可以通过在与关联于跳跃表槽值的像素着色器相对应的GPU代码中指定入口点来选择像素着色器,并且可以相应地分支到相关联的像素着色器代码,和/或可以指定针对像素着色器代码的存储器位置地址。在一个示例中,如上所述,线程启动器123可以至少部分地基于跳跃表槽确定像素着色器125,该跳跃表槽可以被包括在参数值(例如,与存储器地址等组合)中作为来自几何着色器阶段90/光栅器阶段94的输出。
在任何情况下,像素着色器选择都可以由GPU 12执行,该GPU 12可以在基于所接收到的像素着色器参数值(例如,SV_JumpTableSlot)选择像素着色器125时执行类似于下面的代码:
其中,PixelShaderWithShadows.EntryPoint可以是像素着色器125中的一个像素着色器的分支位置,PixelShaderWithShadows.NumRegisters可以是用于像素着色器125的多个存储器寄存器(例如,通用寄存器(GPR)),PixelShaderWithoutShadows.EntryPoint可以是像素着色器127中的另一个像素着色器的分支位置,并且PixelShaderWithoutShadows.NumRegisters可以是用于像素着色器127的多个存储器寄存器。
在另一示例中,GPU 12可以在像素着色器阶段96选择一个像素着色器,并且可以向所选像素着色器指示跳跃表槽值(或者相关的像素着色器参数)。在该示例中,编译器可以生成能够对跳跃表槽值进行静态均匀分支的代码。
在129处,方法120可以可选地包括基于确定所选像素着色器使用存储器寄存器的第二部分,来解除分配存储器寄存器的第一部分。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为基于确定所选像素着色器使用存储器寄存器的第二部分来解除分配存储器寄存器(例如,在图形存储器58中)的第一部分。如所描述的,例如,线程启动器123可以初始化多个可能的像素着色器,该多个可能的像素着色器可以各自指定不同数目的存储器寄存器,并且线程启动器123可以相应地分配与可能的像素着色器中的一个所指定的最大数目相对应的多个存储寄存器,如上面参考动作126所描述的。因此,在所选像素着色器指定小于最大数目的寄存器的情况下,线程启动器123可以解除分配对于所选像素着色器不需要的存储器寄存器以允许存储器寄存器被另一进程使用(例如,执行图元或者另一图元的相同或者不同部分的另一种着色)。
在132处,方法120包括基于将像素着色器应用于部分,而生成到图元的部分的绘制目标的至少一个输出。例如,图形流水线14、像素着色器阶段96、像素着色器125和/或可选的像素着色器127可以基于将像素着色器(例如,像素着色器125或者127)应用于部分,来生成到图元的部分(例如,图块、子图块等)的绘制目标44的至少一个输出。在示例中,像素着色器125或者127可以通过将一个或者多个像素着色器参数(例如,着色率、模板等)应用于图元的部分,来生成到绘制目标44的相关联的输出。在一个示例中,如本文进一步描述的,像素着色器125可以能够生成到绘制目标44的多个输出131、133,和/或像素着色器阶段96可以启动多个像素着色器125和127(和/或附加像素着色器),它们中的每一个都可以生成到针对图元的给定部分的绘制目标44的输出131、133。
参照图4和图6,方法130可以包括方法120的一个或者多个步骤,并且一些相似的步骤被示出,但是为了易于解释,一些步骤可以被省略。特别地,在示例中,方法130描绘了用于使用像素着色器提供多个输出的动作,这些动作可以或者可以不使用方法120中描述的着色器选择步骤。例如,方法130可以包括用于压缩存储器位置地址、初始化可能的像素着色器等步骤。方法130涉及启动像素着色器以产生到图元的部分的绘制目标的多个输出。
在124处,方法130包括接收待绘制的图元的部分的存储器位置地址和/或针对图元的部分的一个或者多个像素着色器参数值的指示。如在示例中所描述的,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:接收待绘制的图元的部分的存储器位置地址和/或针对图元的部分的一个或者多个像素着色器参数值的指示。在一个示例中,线程启动器123可以接收具有相似的像素着色器参数的图元的一个或者多个部分(例如,与相同的跳跃表槽相关联的部分)的存储器位置地址,并且可以接收或者以其他方式确定针对相关联的像素着色器参数值的多个值(例如,基于接收多个跳跃表槽值或者值的其他指示)。在另一示例中,线程启动123可以接收用于启动能够输出绘制目标的多个输出131、133(例如,基于多个着色率)的像素着色器125的像素着色器参数值(例如,多个着色率)。
在128处,方法130可选地包括基于一个或者多个像素着色器值的指示从多个可能的像素着色器选择像素着色器。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:基于一个或者多个像素着色器值的指示从多个可能的像素着色器选择像素着色器。在一个示例中,线程启动器123可以基于针对至少一个像素着色器参数的多个值来启动像素着色器125,其中,像素着色器125可以能够基于多个像素着色器参数值应用多个像素着色器进程以生成多个绘制目标。在示例中,如所描述的,线程启动器123可以生成像素着色器125的多个实例的线程向量,以用于对图元的部分进行着色。线程启动器123可以生成针对具有为一个或者多个像素着色器参数指定的相似的值的图元的部分中的每个部分的线程向量,使得像素着色器可以被应用于线程向量(例如,如用所接收到的存储器位置地址所指示的)以生成绘制目标44的多个输出131、133。
在一个示例中,线程启动器123可以用多个像素着色器参数值来启动像素着色器125,并且像素着色器125可以在大体上串行的执行期间生成对应的输出131、133。在一个示例中,可能需要线程启动器123启动多个这样的像素着色器,这些像素着色器各自串行地执行多个着色器进程,如上面和本文进一步描述的。在该示例中,多个像素着色器(例如,与图7中的像素着色器125、127相似的像素着色器,但是每个像素着色器或者至少一个像素着色器输出多个输出)可以彼此并行执行。在该示例和/或其他示例中,(多个)像素着色器可以是从多个可能的像素着色器选择的,如动作128所描述的。
在132处,方法130包括基于将像素着色器应用于部分而生成到图元的部分的绘制目标的至少一个输出。如在示例中描述的,图形流水线14、像素着色器阶段96和/或像素着色器125可以基于将像素着色器(例如,像素着色器125)应用于部分,来生成到图元的部分(例如,图块、子图块等)的绘制目标44的至少一个输出。在示例中,像素着色器125可以通过将多个像素着色器参数值(例如,着色率、模板等)应用于图元的部分,来生成与绘制目标44相关联的多个输出131、133。
在一个示例中,如所描述的,像素着色器125可以能够基于针对像素着色器参数的不同值(例如,不同的着色率、不同的模板等)生成绘制目标的多个输出。因此,在132处生成至少一个绘制目标也可以可选地包括:在136处,基于将像素着色器应用于图元的部分来生成到图元的部分的至少一个绘制目标的一个或者多个附加输出。例如,图形流水线14、像素着色器阶段96和/或像素着色器125可以基于使用针对一个或者多个像素着色器参数的多个值的不同值将像素着色器125应用于图元的部分,来生成到图元的部分的至少一个绘制目标的一个或者多个附加输出131、133。在该示例中,图元的部分的数据可以在使用给定像素着色器参数的多个值来应用像素着色器125时被共享。
在一个示例中,像素着色器125可以使用不同的着色率执行像素着色器进程以生成多个输出131、133(例如,1×1像素着色率,2×1像素着色率、1×2像素着色率、2×2像素着色率、2×4像素着色率等)。因此,例如,像素着色器125可以输出图元的粗和/或细的着色部分,以便提供具有高光的一些区域,同时对图元的其他部分提供粗率着色。
在139处,方法130可以包括:将至少一个输出或者一个或者多个附加输出的至少部分输出到至少一个绘制目标以用于绘制图元的部分。例如,图形流水线14、像素着色器阶段96和/或输出合并器阶段98可以将至少一个输出或者一个或者多个附加输出的至少部分输出到至少一个绘制目标以用于绘制图元的部分。在具体示例中,像素着色器125可以生成具有不同的着色率(例如,线程向量的每通道1个像素、线程向量的每通道2个像素等)的图元的部分的多个输出131、133,并且一个或者多个输出131、133中的全部或者一部分可以被用来生成针对图元的部分的具有期望水平的可变着色的绘制目标44。在一个示例中,像素着色器阶段965、输出合并器98等可以将操纵掩码应用于一个或者多个输出,以指示来自输出的哪些样本被用来生成绘制目标44,从而实现期望的可变着色。在示例中,操纵掩码可以指示在生成图元的部分的绘制目标44时哪些样本从每个输出131、133导出。附加地,例如,使用操纵掩码,像素着色器125可以同时将单个值输出至多个输出131、133,或者将唯一值输出至每个输出131、133等。
在一个示例中,像素着色器125可以在没有用被确定为由其他输出133提供(例如,基于操纵掩码)的样本填充输出131的情况下生成输出131,和/或反之亦然,从而避免了对每个输出131、133的填充率惩罚,因为在生成输出131、133时可以避免未使用的样本。然后,在生成绘制目标44时,像素着色器阶段96可以适当地定位来自相应输出131、133的样本以用于绘制图元的部分,这可以是根据操纵掩码,如前所述。
在另一示例中,在基于多个输出131、133生成绘制目标时,像素着色器阶段96和/或输出合并器阶段98可以使用像素着色器125生成输出131,并且在生成绘制目标44时基于来自像素着色器125的输出131对绘制目标44的一个或者多个像素进行着色,同时基于来自像素着色器125的输出133(例如,基于指示哪些样本应从输出131或133导出的操纵掩码)对绘制目标44的其他像素进行着色。在另一示例中,像素着色器阶段96可以以指定的着色率参数的最高着色率使用像素着色器125生成输出131,并且然后可以基于绘制目标44通过导出不同比率的各种输出以较低着色率生成附加输出133。
在前向绘制中,例如,在一次绘制一个绘制目标的情况下,像素着色器125可以输出针对在已经被分配的给定像素中的每个样本的值。在4×多样本抗混叠(MSAA)的案例中,如下所述,针对给定像素存在要写入的4个样本。传统MSAA可以允许在像素完全被三角形覆盖的事件中(例如,在像素着色器仅运行一次时)单个颜色值被传播到所有4个样本。通过利用能够生成多个输出的像素着色器125,例如,唯一值可以提供给单个绘制目标的每个样本(例如,每个输出131、133),或者跨所有样本广播单个值。操纵掩码可以相应地指示哪些样本将用于每次导出。
导出单个绘制目标的多个输出的这种能力也可以与可以使用多个绘制目标的其他非前向绘制技术(诸如,延迟绘制)兼容。通过利用能够生成多个输出的像素着色器125,例如,值可以被广播给给定绘制目标(例如,因此可以是低频RT的MRT0)的所有样本,同时也将每个样本的唯一值提供给另一绘制目标(例如,因此可以是高频RT的MRT1)。因此,数据的两个(或者更多个)完整绘制目标可以由像素着色器125生成:具有每个样本的唯一值的像素着色器(MRT1);以及在像素的每个样本中具有共享/相同值的像素着色器(MRT0)。在绘制与绘制目标相对应的图像时,应用例如可以将这些MRT用于期望目的。
在生成延迟的缓冲区的具体示例中,对于一个绘制目标接收大小在两个尺寸之间的一半的着色的4K绘制案例,像素着色器125可以被用来生成以下输出(例如,输出131、133):1080p MRT0 4×MSAA——低着色率、1080p MRT1 4×MSAA——全着色率、1080pDepth 4×MSAA——具有全边解析的总是完全的比率。对应的绘制目标的样本位置可以被布置成规则网格,其中,样本位置碰撞全分辨率像素的中心。样本代码可以与下面的代码相似。
此时,到不同样本的多个导出可以通过写入样本掩码连同导出来执行,如上所述。
在另一示例中,对于前向绘制(例如,仅一个绘制目标),代码可以与下面的代码相似,以提供1080p MRT0 4×MSAA的输出131、133——混合着色率以及1080p Depth 4×MSAA——具有全边解析的总是完全的比率:
在另一示例中,像素着色器125可以被写入,使得其包含每个像素(逻辑上是全分辨率象限)能够完成的工作以及每个样本(全分辨率像素)能够完成的工作。例如,代码可以与下面的代码相似。
为了避免这里的在没有像素具有点亮的4个样本(例如,被激活以用于以4×MSAA进行着色),例如,但是在线程向量内,所有样本被至少一个像素“点亮”的情况下的差异,策略可以用来以迭代的方式执行着色,从而避免关闭线程和/或跳过样本。例如,如果没有线程具有3个以上的点亮的样本,则可以用3次迭代执行着色以避免关闭线程跳过该样本。
附加地,在示例中,利用对8×MSAA的支持,可以支持下面的着色率减少:输出每个样本——“全比率”;从可能是8个样本中输出4个样本——“半比率”;从可能是8个样本中输出2个样本——“四分之一比率”;和从可能是8个样本中输出1个样本——“八分之一比率”。
在没有MSAA的情况下,在示例中,线程启动器123可以发出线程向量,其中,一个通道与一个全比率像素相对应,并且然后减小针对低分辨率着色率的线程向量宽度。这可能意味着,像素着色器以全分辨率运行,并且可能需要从同一着色器等以全分辨率、四分之一分辨率、八分之一分辨率等导出。在该示例中,用于像素着色器125的代码可以与下面的代码相似:
在存在用于重新组合MRT0和象限以增加线程向量利用率的硬件辅助的案例中,这可能很吸引人。例如,如果在不需要许多线程向量时存在有效地重新压缩工作的指令,则这种方法可以通过多循环输出提供效率。
参照图5和图7,方法140可以包括方法120的一个或者多个步骤,并且一些相似的步骤被示出,但是为了易于解释,一些步骤可以省略。例如,方法140可以包括用于压缩存储器位置地址、初始化可能的像素着色器等步骤。方法140涉及启动多个像素着色器以产生到图元的部分的绘制目标的多个输出。
在124处,方法140包括接收待绘制的图元的部分的存储器位置地址和/或针对图元的部分的一个或者多个像素着色器参数值的指示。如在示例中描述的,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:接收待绘制的图元的部分的存储器位置地址和/或(例如,连同)针对图元的部分的一个或者多个像素着色器参数值的指示。例如,线程启动器123可以接收具有相似的像素着色器参数的图元的一个或者多个部分(例如,与相同的跳跃表槽相关联的部分)的存储器位置地址,并且可以接收或者以其他方式确定针对相关联的像素着色器参数值的多个值(例如,基于接收多个跳跃表槽值或者值的其他指示)。
在128处,方法140包括基于一个或者多个像素着色器值的指示从多个可能的像素着色器选择像素着色器。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:基于一个或者多个像素着色器值的指示从多个可能的像素着色器选择像素着色器。在示例中,在128处选择像素着色器可以可选地包括:在134处,从多个可能的像素着色器选择一个或者多个附加像素着色器。例如,图形流水线14、几何着色器阶段90/光栅器阶段94和/或线程启动器123可以被配置为:从多个可能的像素着色器选择一个或者多个附加像素着色器127。例如,像素着色器125、127可以输出单个绘制目标44的多个输出131、133,并且线程启动器123可以启动多个像素着色器125、127(例如,具有针对一个或者多个像素着色器参数的不同值)以获得多个输出131、133。在一个示例中,在生成相应输出131、133时,像素着色器125、127可以彼此同时(例如,并行)执行。
在132处,方法140包括基于将像素着色器应用于部分来生成到图元的部分的绘制目标的至少一个输出。如在示例中描述的,图形流水线14、像素着色器阶段96、像素着色器125和/或可选的像素着色器127可以基于将(多个)像素着色器(例如,像素着色器125或者127)应用于部分来生成到图元的部分(例如,图块、子图块等)的绘制目标44的至少一个输出。在示例中,像素着色器125或者127可以通过各自将一个或者多个像素着色器参数(例如,着色率、模板等)应用于图元的部分来生成与绘制目标44的相关联的输出131、133。
在一个示例中,在选择像素着色器和一个或者多个附加像素着色器时,像素着色器阶段96可以启动多个像素着色器125和127(和/或附加像素着色器,未示出),它们中的每一个能够基于针对像素着色器参数的不同值(例如,不同的着色率、不同的模板等)生成到针对图元的给定部分的绘制目标的输出131、133。例如,像素着色器125可以按照一个着色率对图元的部分进行着色以生成输出131,并且像素着色器127(例如,与像素着色器125并行)可以按照另一着色率对图元的部分进行着色以生成输出133。因此,在132处生成至少一个绘制目标可以可选地包括:在136处,基于将一个或者多个附加像素着色器应用于图元的部分来生成到图元的部分的至少一个绘制目标的一个或者多个附加输出。例如,图形流水线14、像素着色器阶段96和/或可选的像素着色器127可以基于使用针对一个或者多个像素着色器参数的不同值将一个或者多个附加像素着色器127应用于图元的部分,来生成到图元的部分的至少一个绘制目标的一个或者多个附加输出133。如上面相似地描述的,例如,像素着色器125可以输出图元的粗着色部分,和/或像素着色器127可以输出图元的细着色部分,以便提供具有高光的一些区域,同时对图元的其他部分提供粗率着色。
在139处,方法140可以包括:将至少一个输出或者一个或者多个附加输出的至少部分导出到至少一个绘制目标,以用于绘制图元的部分。例如,图形流水线14、像素着色器阶段96和/或输出合并器阶段98可以将至少一个输出或者一个或者多个附加输出的至少部分导出到至少一个绘制目标,以用于绘制图元的部分。在具体示例中,像素着色器125、127可以生成具有不同的着色率(例如,线程向量的每通道1个像素、线程向量的每通道2个像素等)的图元的部分的多个输出131、133,并且一个或者多个输出131、133中的全部或者一部分可以被用来生成针对图元的部分的具有期望水平的可变着色的绘制目标44。在一个示例中,像素着色器阶段965、输出合并器98等可以将操纵掩码应用于一个或者多个输出,以指示来自输出的哪些样本被用来生成绘制目标44,从而实现期望的可变着色。在示例中,操纵掩码可以指示在生成图元的部分的绘制目标44时哪些样本从每个输出131、133导出。附加地,例如,使用操纵掩码,像素着色器125和/或像素着色器127可以同时将单个值输出至多个输出131、133,或者将唯一值输出至每个输出131、133等。
在一个示例中,像素着色器125可以在没有用被确定为由其他输出133提供(例如,基于操纵掩码)的样本填充输出131的情况下生成输出131,和/或反之亦然,从而避免了对每个输出131、133的填充率惩罚,因为在生成输出131、133时可以避免未使用的样本。然后,在生成绘制目标44时,像素着色器阶段96可以适当地定位来自相应输出131、133的样本以用于绘制图元的部分,这可以是根据操纵掩码,如前所述。
在另一示例中,在基于多个输出131、133生成绘制目标时,像素着色器阶段96和/或输出合并器阶段98可以使用像素着色器125生成输出131,并且可以在生成绘制目标44时基于来自像素着色器125的输出131对绘制目标44的一个或者多个像素进行着色,同时基于来自像素着色器127的输出133(例如,基于指示哪些样本应从像素着色器125或像素着色器127导出的操纵掩码)对绘制目标44的其他像素进行着色。在另一示例中,像素着色器阶段96可以按照指定的着色率参数的最高着色率使用像素着色器125生成输出131,并且然后可以基于绘制目标44通过导出不同比率的各种输出以较低着色率生成附加输出133(例如,来自像素着色器127的输出133)。
在前向绘制中,例如,在一次绘制一个绘制目标的情况下,像素着色器125可以输出针对在已经被分配的给定像素中的每个样本的值。在4×MSAA的案例中,如下所述,存在针对给定像素要写入的4个样本。传统MSAA可以允许在像素完全被三角形覆盖的事件中(例如,在像素着色器仅运行一次时),单个颜色值被传播到所有4个样本。通过利用能够生成多个输出的多个像素着色器125、127,例如,唯一值可以被提供给单个绘制目标的每个样本(例如,每个输出131、133),或者跨所有样本广播单个值。操纵掩码可以相应地指示哪些样本用于每次导出。
导出单个绘制目标的多个输出的这种能力也可以与可以使用多个绘制目标的其他非前向绘制技术(诸如,延迟绘制)兼容。通过利用多个像素着色器125、127,例如,值可以被广播给给定绘制目标(例如,因此可以是低频RT的MRT0)的所有样本,同时也将每个样本的唯一值提供给另一绘制目标(例如,因此可以是高频RT的MRT1)。因此,数据的两个(或者更多个)完整绘制目标可以由像素着色器125和/或像素着色器127生成:具有每个样本的唯一值的像素着色器(MRT1)以及在像素的每个样本中具有共享/相同值的像素着色器(MRT0)。在绘制与绘制目标相对应的图像时,应用例如可以将这些MRT用于期望目的。
在具体示例中,像素着色器96可以暴露API以允许选择像素着色器125、127(和/或相关的像素着色器参数值)以生成输出131、133。在示例中,用于访问像素着色器阶段96以启动多个像素着色器125、127的代码可以与下面的代码相似:
由于发起低分辨率和高分辨率像素着色器的能力,这种技术可能对前向绘制有效。例如,线程启动器123可以以给定缩放因子启动每MRT的像素着色器线程向量。线程向量的输出131、133可以在执行之后被结合。
在示例中,参照图8的图表160,示出了图元22的MSAA的示例。在该示例中,针对GPU12(以及对应绘制目标44的配置)的最大AA被设置用于2×AA。如此,利用这种设置,存在通过光栅器阶段94在扫描期间在任何地方按照像素32评估的最多2个覆盖样本(例如,表示为空心圆圈和黑圆圈),并且2个位用覆盖掩码按照像素32来传递。
如此,在像素161的8×8子图块网格之外,T2的最左边的4×8像素具有在1×AA处基于针对T2的该区域的像素着色器参数完成的像素着色。对于图块T2,一共64个可能的样本中的58个被覆盖;而且,32个像素(例如,由像素162表示)中的30个将被启动以通过目标样本位置进行着色(例如,基于由黑圆圈表示的颜色样本)。对于30个启动的像素着色器线程中的每一个,两个覆盖位170可以被发送。
相比之下,对于像素166的最右边的4×8子图块网格,着色是基于针对该区域的像素着色器参数以1/2×AA比率(2宽×1高)完成的,并且四个覆盖位170可以针对被启动以进行着色的16个线程(与相应对的像素168相对应)中的每个线程被发送。因此,对最右边的4×8像素的所描述示例的操作可以节省大量图形处理成本。例如,在这种情况下,像素166的最右边的4×8子图块网格可以被视为特定区域内的一个或者多个片段,其中,一个或者多个片段包括每多个像素一种颜色并且具有针对属于多个像素的所有样本的样本覆盖掩码。
应当注意,在其他情况下,可以存在具有一个或者多个片段的特定区域,该一个或者多个片段包括每图块一种颜色和针对属于图块的像素的所有样本的简单覆盖掩码。
在示例中,基于光栅器阶段94利用像素或者与像素相对应的覆盖位来压缩线程向量以用于基于对应AA比率应用对图块的着色,上述示例可以被应用于AA配置。
如本申请所使用的,术语“组件”、“系统”等旨在包括计算机相关实体,诸如但不限于硬件、固件、硬件和软件的组合、软件或者在执行中的软件。例如,组件可以是但不限于在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。举例来说,在计算设备上运行的应用和计算设备都可以是组件。一个或者多个组件可以驻留在执行线程和/或进程内,并且组件可以在一个计算机上被本地化和/或被分布在两个或者更多个计算机之间。另外,这些组件可以从具有存储在其上的各种数据结构的各种计算机可读介质执行。组件可以借助本地和/或远程进程诸如根据具有一个或者多个数据分组的信号(诸如,来自一个组件的数据,该一个组件与本地系统、分布式系统中的另一组件交互,和/或跨诸如因特网等网络与其他系统借助信号交互)而通信。
此外,本文中结合可以为有线设备或无线设备的设备(例如,计算机设备10)描述各种示例。这种设备可以包括但不限于游戏设备或者控制台、膝上型计算机、平板计算机、个人数字助理、蜂窝式电话、卫星电话、无绳电话、会话发起协议(SIP)电话、无线本地回路(WLL)站、个人数字助理(PDA)、具有无线连接能力的手持式设备、计算设备或连接到无线调制解调器的其他处理设备。
此外,术语“或”旨在指包含性“或”而非排他性“或”。即,除非另外指定或从上下文清楚,否则短语“X采用A或者B”旨在表示自然包含性排列的任一者。即,短语“X采用A或B”由以下实例的任何实例满足:X采用A;X采用B;或X采用A和B两者。另外,如本申请和所附权利要求中使用的冠词“一”和“一个”应通常解释为表示“一个或多个”,除非另外指示或从上下文清楚针对单数形式。
将依据可以包括多个设备、组件、模块等的系统呈现各种示例或特征。应当了解并理解,各种系统可以包括附加设备、组件、模块等,和/或可以不包括结合附图讨论的所有设备、组件、模块等。还可以使用这些方法的组合。
结合本文所公开的实施例描述的各种说明性逻辑、逻辑块和方法的动作可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑设备、分立门或晶体管逻辑、分立硬件组件或经设计以执行本文描述的功能的其任何组合中的被专门编程的设备来实现或执行。通用处理器可以是微处理器,但在备选方案中,处理器可以是任何常规处理器、控制器、微控制器或者状态机。处理器还可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器的组合、一个或者多个微处理器与DSP核心的联合、或者任何其他此类配置。附加地,至少一个处理器可以包括可操作以执行上文描述的步骤和/或动作中的一个或者多个的一个或者多个组件。
进一步地,结合本文所公开的示例描述的方法和算法的步骤和/或动作可以直接体现在硬件、由处理器执行的软件模块或这二者的组合中。软件模块可以驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移除磁盘、CD-ROM或者本领域熟知的任何其他形式的存储介质中。示例性存储介质可以被耦合至处理器,以使处理器能够从该存储介质读取信息,并且向该存储介质写入信息。在备选方案中,存储介质可以是处理器的组成部分。进一步地,在一些示例中,处理器和存储介质可以驻留在ASIC中。附加地,ASIC可以驻留在计算机设备中(诸如但不限于游戏控制台)。在备选方案中,处理器和存储介质可以作为分立组件驻留在用户终端中。附加地,在一些示例中,方法或算法的步骤和/或动作可以作为代码和/或指令之一或其任何组合或集合驻留在机器可读介质和/或计算机可读介质上,机器可读介质和/或计算机可读介质可以被包含到计算机程序产品中。
在一个或者多个示例中,所描述的功能可以在硬件、软件、固件或者其任何组合中被实现。如果实现在软件中,则功能可以作为一个或者多个指令或者代码被存储在计算机可读介质上或者在其上进行传送。计算机可读介质包括计算机存储介质和通信介质两者,包括利于计算机程序从一地向另一地转移的任何介质。存储介质可以是能够被计算机访问的任何可用介质。通过示例而非限制,这种计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或者其他光盘存储装置、磁盘存储装置或者其他磁存储设备、或者能够被用来承载或存储期望程序代码的任何其他介质,期望程序代码是指令或数据结构形式的、并且能够由计算机访问。而且,任何连接可以被称为计算机可读介质。如本文所使用的磁盘和盘包括压缩盘(CD)、激光盘、光盘、数字多功能盘(DVD)、软盘和蓝光盘,其中,磁盘通常以磁的方式再现数据,而盘通常用激光以光学方式再现数据。上述组合还应被包括在计算机可读介质的范围内。
尽管已经结合其示例描述了本公开的示例,但是本领域的技术人员应当理解,在不脱离本公开的范围的情况下,可以对上述示例进行变型和修改。对于本领域的技术人员而言,从说明书考虑或通过根据本文所公开的示例的实践,其他示例将变得明显。

Claims (15)

1.一种在计算机设备中绘制图形的方法,包括:
在图形处理单元GPU处接收待绘制的图元的部分的存储器位置地址连同针对所述图元的所述部分的一个或者多个像素着色器参数的一个或者多个值的指示;
由所述GPU基于所述一个或者多个像素着色器参数的所述一个或者多个值的所述指示,从多个可能的像素着色器中选择多个像素着色器;以及
由所述GPU基于将所述多个像素着色器同时应用于所述图元的所述部分,生成所述图元的所述部分的绘制目标的多个输出。
2.根据权利要求1所述的方法,还包括:将所述多个输出中的所述至少一个输出导出到所述绘制目标以用于绘制所述图元的所述部分。
3.根据权利要求1所述的方法,其中导出所述多个输出中的所述至少一个输出包括:从所述多个输出中的每个输出选择样本以绘制所述图元的所述部分的所述绘制目标。
4.根据权利要求1所述的方法,其中导出所述多个输出中的所述至少一个输出包括:导出所述多个输出中的至少两个输出作为分离的绘制目标。
5.一种在计算机设备中绘制图形的方法,包括:
在图形处理单元GPU处接收待绘制的图元的部分的存储器位置地址连同针对所述图元的所述部分的一个或者多个像素着色器参数的一个或者多个值的指示;
由所述GPU基于所述一个或者多个像素着色器参数的所述一个或者多个值的所述指示,从多个可能的像素着色器中选择像素着色器;以及
由所述GPU基于将所述像素着色器应用于所述图元的所述部分,生成所述图元的所述部分的绘制目标的至少一个输出。
6.根据权利要求5所述的方法,其中所述指示是包括位的第一部分和位的第二部分的值,位的所述第一部分指示所述图元的所述部分的所述存储器位置地址,位的所述第二部分指示所述一个或者多个着色器参数的所述一个或者多个值。
7.根据权利要求5所述的方法,其中所述一个或者多个像素着色器参数包括着色率或者来自模板缓冲器的模板的指示。
8.根据权利要求5所述的方法,还包括:在所述GPU处接收待绘制的所述图元的部分的多个存储器位置地址连同所述一个或者多个像素着色器参数的所述一个或者多个值的所述指示,其中所述多个存储器位置地址包括在其上要应用所述像素着色器的多个线程向量的存储器位置地址。
9.根据权利要求8所述的方法,还包括:将所述多个线程向量压缩为存储器位置地址的列表,存储器位置地址的所述列表将与所述一个或者多个像素着色器参数的所述一个或者多个值的所述指示相关联。
10.根据权利要求5所述的方法,还包括:
在所述GPU处接收待绘制的所述图元的不同部分的第二存储器位置地址连同针对所述图元的所述不同部分的所述一个或者多个像素着色器参数的不同的一个或者多个值的指示;
由所述GPU基于所述一个或者多个像素着色器参数的所述不同的一个或者多个值的所述指示,初始化不同的像素着色器;以及
由所述GPU并且在生成所述绘制目标的所述至少一个输出的同时,基于将所述不同的像素着色器应用于所述图元的所述不同部分,生成所述图元的所述不同部分的不同的绘制目标的至少一个不同的输出。
11.根据权利要求5所述的方法,还包括:
由所述GPU在选择所述像素着色器之前针对所述多个可能的像素着色器分配多个存储器寄存器,其中所述多个存储器寄存器与由所述多个可能的像素着色器中的一个可能的像素着色器指定的最大数目的寄存器相对应;以及
在生成所述至少一个输出之前,基于确定所选择的所述像素着色器使用所述多个存储器寄存器的第二部分,解除分配所述多个存储器寄存器的第一部分。
12.根据权利要求11所述的方法,还包括:由所述GPU并且在选择所述像素着色器之前初始化所述多个可能的像素着色器。
13.根据权利要求5所述的方法,其中所述像素着色器被配置为:基于应用所述一个或者多个像素着色器参数的多个值,生成所述绘制目标的一个或者多个附加输出,并且其中由所述GPU生成所述绘制目标的所述至少一个输出包括:基于将所述像素着色器应用于所述图元的所述部分,生成所述绘制目标的所述一个或者多个附加输出。
14.根据权利要求13所述的方法,还包括:将所述至少一个输出或者所述一个或者多个附加输出的至少部分导出到所述绘制目标,以用于绘制所述图元的所述部分。
15.一种计算设备,包括:
存储器;
处理器,被耦合到所述存储器并且被配置为执行与一个或者多个应用相对应的指令;
显示器,用于显示由所述一个或者多个应用产生的一个或者多个图像;
图形处理单元GPU,被配置为绘制所述一个或者多个图像的一个或者多个图元,其中所述GPU被配置为:
接收待绘制的所述一个或者多个图元中的图元的部分的存储器位置地址连同针对所述图元的所述部分的一个或者多个像素着色器参数的一个或者多个值的指示;
基于所述一个或者多个像素着色器参数的所述一个或者多个值的所述指示,从多个可能的像素着色器中选择像素着色器;以及
基于将所述像素着色器应用于所述图元的所述部分,生成所述图元的所述部分的绘制目标的至少一个输出。
CN201880011854.6A 2017-02-15 2018-02-07 图形处理中的多个着色器进程 Active CN110291563B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762459468P 2017-02-15 2017-02-15
US62/459,468 2017-02-15
US15/639,527 US10650566B2 (en) 2017-02-15 2017-06-30 Multiple shader processes in graphics processing
US15/639,527 2017-06-30
PCT/US2018/017141 WO2018151981A1 (en) 2017-02-15 2018-02-07 Multiple shader processes in graphics processing

Publications (2)

Publication Number Publication Date
CN110291563A true CN110291563A (zh) 2019-09-27
CN110291563B CN110291563B (zh) 2024-03-15

Family

ID=63104737

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201880011854.6A Active CN110291563B (zh) 2017-02-15 2018-02-07 图形处理中的多个着色器进程

Country Status (4)

Country Link
US (1) US10650566B2 (zh)
EP (1) EP3552182B1 (zh)
CN (1) CN110291563B (zh)
WO (1) WO2018151981A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022242358A1 (zh) * 2021-05-17 2022-11-24 腾讯科技(深圳)有限公司 图像处理方法、装置、计算机设备及存储介质
CN116188243A (zh) * 2023-03-02 2023-05-30 格兰菲智能科技有限公司 图形绘制流水线管理方法和图形处理器
WO2024001699A1 (zh) * 2022-06-28 2024-01-04 华为技术有限公司 一种着色器输入数据的处理方法和图形处理装置
WO2024007293A1 (zh) * 2022-07-08 2024-01-11 卓永红 基于位图图元的图形处理系统,方法和gpu

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10460513B2 (en) 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
US10649521B2 (en) 2017-04-24 2020-05-12 Intel Corporation Compensating for high head movement in head-mounted displays
US10573055B2 (en) * 2017-08-31 2020-02-25 Intel Corporation Apparatus and method for a programmable depth stencil graphics pipeline stage
US11145105B2 (en) 2019-03-15 2021-10-12 Intel Corporation Multi-tile graphics processor rendering
US11475533B2 (en) 2020-05-18 2022-10-18 Qualcomm Incorporated GPR optimization in a GPU based on a GPR release mechanism
US11250611B1 (en) * 2021-01-29 2022-02-15 Arm Limited Graphics processing
CN113205580A (zh) * 2021-05-10 2021-08-03 万翼科技有限公司 图元渲染方法、装置、设备及存储介质
US20220414977A1 (en) * 2021-06-24 2022-12-29 Intel Corporation Compression and interleaving of spatially proximate data
CN116883228B (zh) * 2023-09-08 2023-12-01 武汉凌久微电子有限公司 一种gpu像素填充率测量方法

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070159488A1 (en) * 2005-12-19 2007-07-12 Nvidia Corporation Parallel Array Architecture for a Graphics Processor
US20090231348A1 (en) * 2008-03-11 2009-09-17 Eric Oliver Mejdrich Image Processing with Highly Threaded Texture Fragment Generation
US20110084976A1 (en) * 2009-10-08 2011-04-14 Duluk Jr Jerome F Shader Program Headers
US8081184B1 (en) * 2006-05-05 2011-12-20 Nvidia Corporation Pixel shader program thread assembly
US8429656B1 (en) * 2006-11-02 2013-04-23 Nvidia Corporation Thread count throttling for efficient resource utilization
US20140118369A1 (en) * 2012-10-26 2014-05-01 Nvidia Corporation Managing event count reports in a tile-based architecture
US20140168242A1 (en) * 2012-12-18 2014-06-19 Nvidia Corporation Techniques for setting up and executing draw calls
US20140176547A1 (en) * 2012-12-21 2014-06-26 Nvidia Corporation Programmable blending via multiple pixel shader dispatches
US20140198113A1 (en) * 2013-01-16 2014-07-17 Tomasz Janczak Serialized access to graphics resources
US20150279090A1 (en) * 2011-12-28 2015-10-01 Think Silicon Ltd Methods of and apparatus for assigning vertex and fragment shading operations to a multi-threaded multi-format blending device
US20150287166A1 (en) * 2014-04-05 2015-10-08 Sony Computer Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US20150287239A1 (en) * 2014-04-05 2015-10-08 Sony Computer Entertainment Europe Limited Graphics processing enhancement by tracking object and/or primitive identifiers
US20160035129A1 (en) * 2014-07-29 2016-02-04 Nvidia Corporation Control of a sample mask from a fragment shader program
US20160048999A1 (en) * 2014-08-12 2016-02-18 Nvidia Corporation System, method, and computer program product for shading using a dynamic object-space grid

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7218291B2 (en) 2004-09-13 2007-05-15 Nvidia Corporation Increased scalability in the fragment shading pipeline
US20060082593A1 (en) 2004-10-19 2006-04-20 Microsoft Corporation Method for hardware accelerated anti-aliasing in 3D
US8144149B2 (en) 2005-10-14 2012-03-27 Via Technologies, Inc. System and method for dynamically load balancing multiple shader stages in a shared pool of processing units
US7502035B1 (en) * 2005-12-19 2009-03-10 Nvidia Corporation Apparatus, system, and method for multi-sample pixel coalescing
US20080012874A1 (en) 2006-07-14 2008-01-17 Spangler Steven J Dynamic selection of high-performance pixel shader code based on check of restrictions
GB201004673D0 (en) 2010-03-19 2010-05-05 Imagination Tech Ltd Processing of 3D computer graphics data on multiple shading engines
US9530245B2 (en) 2011-12-29 2016-12-27 Qualcomm Incorporated Packing multiple shader programs onto a graphics processor
US10535185B2 (en) 2012-04-04 2020-01-14 Qualcomm Incorporated Patched shading in graphics processing
US9177351B2 (en) 2012-10-09 2015-11-03 Qualcomm Incorporated Multi-primitive graphics rendering pipeline
US9905046B2 (en) 2014-04-03 2018-02-27 Intel Corporation Mapping multi-rate shading to monolithic programs
US9652882B2 (en) 2014-04-05 2017-05-16 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070159488A1 (en) * 2005-12-19 2007-07-12 Nvidia Corporation Parallel Array Architecture for a Graphics Processor
US8081184B1 (en) * 2006-05-05 2011-12-20 Nvidia Corporation Pixel shader program thread assembly
US8429656B1 (en) * 2006-11-02 2013-04-23 Nvidia Corporation Thread count throttling for efficient resource utilization
US20090231348A1 (en) * 2008-03-11 2009-09-17 Eric Oliver Mejdrich Image Processing with Highly Threaded Texture Fragment Generation
US20110084976A1 (en) * 2009-10-08 2011-04-14 Duluk Jr Jerome F Shader Program Headers
US20150279090A1 (en) * 2011-12-28 2015-10-01 Think Silicon Ltd Methods of and apparatus for assigning vertex and fragment shading operations to a multi-threaded multi-format blending device
US20140118369A1 (en) * 2012-10-26 2014-05-01 Nvidia Corporation Managing event count reports in a tile-based architecture
US20140168242A1 (en) * 2012-12-18 2014-06-19 Nvidia Corporation Techniques for setting up and executing draw calls
US20140176547A1 (en) * 2012-12-21 2014-06-26 Nvidia Corporation Programmable blending via multiple pixel shader dispatches
US20140198113A1 (en) * 2013-01-16 2014-07-17 Tomasz Janczak Serialized access to graphics resources
US20150287166A1 (en) * 2014-04-05 2015-10-08 Sony Computer Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US20150287239A1 (en) * 2014-04-05 2015-10-08 Sony Computer Entertainment Europe Limited Graphics processing enhancement by tracking object and/or primitive identifiers
US20160035129A1 (en) * 2014-07-29 2016-02-04 Nvidia Corporation Control of a sample mask from a fragment shader program
US20160048999A1 (en) * 2014-08-12 2016-02-18 Nvidia Corporation System, method, and computer program product for shading using a dynamic object-space grid

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
WON-JONG LEE等: "SGRT: a mobile GPU architecture for real-time ray tracing", HPG \'13: PROCEEDINGS OF THE 5TH HIGH-PERFORMANCE GRAPHICS CONFERENCE, pages 109 - 119 *
孙悦;马久河;: "基于GPU的图像快速显示技术", 无线电工程, no. 09, pages 27 - 28 *
高月芳;冯志炜;徐东风;田绪红;: "新的图像几何矩快速算法", 小型微型计算机系统, no. 07, pages 1448 - 1451 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022242358A1 (zh) * 2021-05-17 2022-11-24 腾讯科技(深圳)有限公司 图像处理方法、装置、计算机设备及存储介质
WO2024001699A1 (zh) * 2022-06-28 2024-01-04 华为技术有限公司 一种着色器输入数据的处理方法和图形处理装置
WO2024007293A1 (zh) * 2022-07-08 2024-01-11 卓永红 基于位图图元的图形处理系统,方法和gpu
CN116188243A (zh) * 2023-03-02 2023-05-30 格兰菲智能科技有限公司 图形绘制流水线管理方法和图形处理器

Also Published As

Publication number Publication date
CN110291563B (zh) 2024-03-15
EP3552182A1 (en) 2019-10-16
US20180232936A1 (en) 2018-08-16
WO2018151981A1 (en) 2018-08-23
US10650566B2 (en) 2020-05-12
EP3552182B1 (en) 2020-09-30

Similar Documents

Publication Publication Date Title
CN110291563A (zh) 图形处理中的多个着色器进程
US10134175B2 (en) Gradient adjustment for texture mapping to non-orthonormal grid
CN110383337A (zh) 可变速率着色
CN103503032B (zh) 图形硬件中的纹理化
US7176919B2 (en) Recirculating shade tree blender for a graphics system
US9317960B2 (en) Top-to bottom path rendering with opacity testing
US8217934B2 (en) System and methods for rendering transparent surfaces in high depth complexity scenes using hybrid and coherent layer peeling
CN107392988A (zh) 利用投影几何失真用于以可变采样率渲染的系统、方法和计算机程序产品
CN109478310A (zh) 在计算环境中使用纹素着色器的多分辨率延迟着色
CN105321143A (zh) 来自片段着色程序的采样掩膜的控制
CN105122310B (zh) 用于基于瓦片的渲染的帧内时戳
CN107392836A (zh) 使用图形处理管线实现的立体多投影
US11238639B2 (en) Gradient adjustment for texture mapping to non-orthonormal grid
CN109978750A (zh) 执行基于采样的渲染的图形处理器和操作其的方法
CN106575429A (zh) 图形处理单元中的高阶滤波
US8810587B2 (en) Conversion of contiguous interleaved image data for CPU readback
CN106504310A (zh) 图形处理系统
CN109584140A (zh) 图形处理
CN110383339A (zh) 用于图像渲染的索引值混合
US6756989B1 (en) Method, system, and computer program product for filtering a texture applied to a surface of a computer generated object
CN106575428A (zh) 图形处理单元中的高阶滤波
CN106886974A (zh) 图像加速器设备及相关方法
US8823715B2 (en) Efficient writing of pixels to tiled planar pixel arrays
Chochlík Scalable multi-GPU cloud raytracing with OpenGL
US7825935B1 (en) System, method and computer program product for using textures as instructions for graphics processing

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