利用每像素着色器线程的高效超级采样的制作方法

文档序号:6525204阅读:237来源:国知局
利用每像素着色器线程的高效超级采样的制作方法
【专利摘要】利用每像素着色器线程的高效超级采样。公开了用于分派图形处理管线中的像素信息的技术。片段处理单元基于由第一线程所接收的图形基元的第一部分生成包括多个样本的第一像素。片段处理单元针对第一像素计算第一值,其中第一值针对该像素仅被计算一次。片段处理单元针对样本计算第一值集,其中第一值集中的每个值与不同样本相对应,并针对相对应的样本仅被计算一次。片段处理单元将第一值与第一值集中的每个值进行组合以创建第二值集。片段处理单元创建一个或多个个分派消息以将第二值集存储在输出寄存器集中。所公开的技术的一个优点是像素着色器程序以增加的效率实施每样本操作。
【专利说明】利用每像素着色器线程的高效超级采样
【技术领域】
[0001]本发明总地涉及三维(3D)图形处理,并且更具体地,涉及利用每像素着色器线程的高效超级采样。
【背景技术】
[0002]典型地,使用带有一个或多个多级图形处理管线的图形处理单元(GPU)来渲染包括3D图形对象的由计算机所生成的图像。这类图形管线包括各种可编程的和固定的功能级(stage)。可编程级包括各种处理单元,其执行着色器程序以渲染图形对象并生成各种与图形对象相关联的视觉效果。可编程级的一个示例是包括像素着色器程序的片段处理单元。像素着色器程序接收诸如线段和三角形的几何片段,并计算每个像素的颜色信息、深度信息以及其他属性。所得的像素信息存储在输出寄存器中。输出寄存器随后由被称为光栅操作单元或ROP的固定功能级进行读取。ROP从像素着色器程序接收像素颜色、深度和其他信息、将该像素信息与存储在一个或多个渲染目标中的相应像素信息进行混合、并将经混合的像素信息存储回一个或多个渲染目标中。典型地,ROP中的混合操作限于固定功能操作集。
[0003]由于ROP的固定功能性质,所以某些混合效果在ROP内是不可完成的。为了创建这类混合效果,像素着色器程序可包括一个或多个可编程混合特征,此处像素着色器程序直接从渲染目标读取像素信息(目标像素信息)、将像素信息与像素着色器程序所计算的像素信息(源像素信息)进行混合、并将经混合的像素信息存储到输出寄存器中。像素着色器程序灵活地对像素信息实施可编程混合。因此,混合不受包括在ROP中的固定功能混合操作的限制。该方法的一个缺点是,在带有像素着色器程序的多个实例同时运行、或在带有图形处理管线的GPU中通常无法保证像素着色器的处理次序。如果图形对象被以特定次序混合,那么混合操作的某些顺序集将正常实施。在一个示例中,两个图形对象可与给定像素相交。第一图形对象可由第一图形处理管线混合到渲染目标中。第二图形对象可由第二图形处理管线混合到渲染目标中。然而,混合操作的结果可能是不同的,取决于第一图形对象是在第二图形对象之前还是在第二图形对象之后被混合到渲染目标中。结果,GPU将不能正确地一致地混合图形对象。
[0004]在一些应用中,通过针对每个像素渲染多个样本来改善图像质量,此处每个样本可表示相应像素所覆盖的区域子集。这类模式被称为超级采样模式。在配置为超级采样的渲染目标中,每个像素被存储为多个样本,此处每个样本可包括颜色信息、深度信息和其他属性。利用超级采样,像素着色器程序的单个实例仅针对一个样本计算并存储颜色、深度和相关信息。一旦渲染完成,针对给定像素的样本被组合,这导致用于在显示设备上显示的最终的像素颜色。该方法的一个缺点是,像素着色器程序的每个实例消耗GPU中的分开的处理元件。针对包括四个样本的像素,与每像素仅消耗一个像素着色器相比,超级采样消耗四倍的像素着色器资源。
[0005]如前述所示,本领域所需要的是用于在图形处理管线中实施像素着色操作的改进的技术。

【发明内容】

[0006]本发明的一个实施例阐述了一种用于分派(dispatch)图形处理管线中的像素信息的方法。方法包括基于由第一线程所接收的图形基元的第一部分生成包括多个样本的像素。方法进一步包括针对像素计算第一值,其中第一值针对像素仅被计算一次。方法进一步包括针对多个样本中的样本计算第一值集,其中第一值集中的每个值与多个样本中的不同样本相对应,并针对相对应的样本仅被计算一次。方法进一步包括将第一值与第一值集中的每个值进行组合以创建第二值集。方法进一步包括创建一个或多个分派消息以将第二值集存储在输出寄存器集中。
[0007]其他实施例包括但不限于包括使处理单元能够实现所公开的方法的一个或多个方面的指令的计算机可读介质。其他实施例包括但不限于包括配置为实现所公开的方法的一个或多个方面的处理单元的子系统以及配置为实现所公开的方法的一个或多个方面的系统。
[0008]所公开的技术的一个优点是,像素着色器程序以增加的效率实施每样本操作。在典型的场景中,像素着色器程序以接近于每像素着色的性能达到每样本像素着色的较高的图像质量。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3A是根据本发明的一个实施例的、图2的PTO之一内的分区单元的框图;
[0013]图3B是根据本发明的一个实施例的、图2的通用处理集群(GPC)内的流多处理器(SM)的一部分的框图;
[0014]图4是根据本发明的一个实施例的、图2的并行处理单元中的一个或多个可经配置以实现的图形处理管线的概念图;
[0015]图5示出了根据本发明的一个实施例的、图4的图形处理管线的片段处理单元;
[0016]图6示出了根据本发明的一个实施例的、图5的片段处理单元内的像素着色器程序;
[0017]图7A示出了根据本发明的一个实施例的、图5的片段处理单元内的输出寄存器的一部分;
[0018]图7B示出了根据本发明的另一个实施例的、图5的片段处理单元内的输出寄存器的一部分;
[0019]图7C示出了根据本发明的再一个实施例的、图5的片段处理单元内的输出寄存器的一部分;
[0020]图8示出了根据本发明的一个实施例的、与多个像素相交的几何基元;
[0021]图9阐述了根据本发明的一个实施例的、用于分派(dispatch)来自图形处理管线中的像素着色器程序的像素值的方法步骤的流程图;以及
[0022]图10阐述了根据本发明的另一个实施例的、用于分派来自图形处理管线中的像素着色器程序的像素值的方法步骤的流程图。
【具体实施方式】
[0023]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,未描述公知特征以避免对本发明造成混淆。
[0024]系统概述
[0025]图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU) 102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106 (例如超传输(HyperTransport)链路)连接到输入/输出(I/O)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108 (例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113 (例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105 ;在一个实施例中,并行处理子系统112是将像素传递到显示设备110的图形子系统,所述显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等等。系统盘114也连接到I/O桥107并可配置为存储内容和应用和数据用于由CPU102和并行处理子系统112使用。系统盘114提供用于应用和数据的非易失性存储并可包括固定或可移动硬盘驱动器、闪速存储器设备以及压缩光盘只读存储器(CD-ROM)、数字通用光盘ROM (DVD-ROM)、蓝光、高清晰度DVD (HD-DVD)或其他磁、光、或固态存储设备。
[0026]交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-EXpreSS、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0027]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
[0028]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102以及两个或更多个并行处理子系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
[0029]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥I。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。[0030]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PTO可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0031]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0032]现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0033]在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0034]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0035]GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0036]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0037]任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口 214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口 214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
[0038]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0039]PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
[0040]如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0041]图3A为根据本发明的一个实施例的、图2的PPU202之一内的分区单元215的框图。如所示的,分区单元215包括L2高速缓存350、帧缓冲区(FB)DRAM接口 355以及光栅操作单元(ROP) 360。L2高速缓存350是配置为实施从交叉开关单元210和R0P360所接收的加载和存储操作的读/写高速缓存。读未命中(miss)和紧急写回请求由L2高速缓存350输出至FB DRAM接口 355用于处理。脏(dirty)更新也被发送到FB355用于伺机处理。
[0042]在图形应用中,R0P360是实施诸如模板、z测试、混合等等的光栅操作、并输出像素数据作为经处理的图形数据用于存储在图形存储器中的处理单元。在本发明的一些实施例中,R0P360包括在每个GPC208内而不是分区单元215内,并且通过交叉开关单元210传送像素读和写请求而不是像素片段数据。
[0043]经处理的图形数据可显示在显示设备110上或被路由用于由GPU或并行处理子系统112内的处理实体之一进行进一步处理。每个分区单元215包括R0P360以分布光栅操作的处理。在一些实施例中,R0P360可配置为压缩写入到存储器的z或颜色数据以及解压缩从存储器读取的z或颜色数据。
[0044]图3B为根据本发明的一个实施例的、在图2的通用处理集群(GPC) 208内的流多处理器(SM) 310的一部分的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。
[0045]经由将处理任务分布到一个或多个流多处理器(SM)310的管线管理器(未示出)来有利地控制GPC208的操作。其中每个SM310配置为处理一个或多个线程组。每个SM310包括指令LI高速缓存370,其配置为经由GPC208内的L1.5高速缓存(未示出)从存储器接收指令和常量。线程束调度器和指令单元312从指令LI高速缓存370接收指令和常量并根据该指令和常量控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec(执行或处理)单元302和P个加载-存储单元(LSU) 303。如本领域已知的,SM功能单元可被管线化,这允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
[0046]如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在包括M个流多处理器310的GPC208中的、在任何给定时间在GPC208中可以执行多达G*M个线程组的系统。
[0047]此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
[0048]在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0049]每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
[0050]SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302) —个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由任务元数据(TMD)(未示出)所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD的标识符。
[0051]如果TMD是网格TMD,则TMD的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD中或TMD可以存储指向将由CTA所处理的数据的指针。TMD还存储由CTA所执行的程序的开始地址。
[0052]如果TMD是队列TMD,那么使用TMD的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD中或与TMD分开存储,在该情况下TMD存储指向该队列的队列指针。有利地,当代表子任务的TMD正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
[0053]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
[0054]参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口 214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。
[0055]每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。
[0056]共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
[0057]每个SM310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和LI高速缓存320。
[0058]应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、LI高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
[0059]本领域普通技术人员应该理解图1-3所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
[0060]图形管线架构
[0061]图4是根据本发明的一个实施例的、图2的PPU202中的一个或多个可经配置以实现的图形处理管线400的概念图。例如,SM310中的一个可配置为实施顶点处理单元415、几何处理单元425、片段处理单元460中的一个或多个的功能。还可由GPC208内的其他处理引擎和相应的分区单元215实施数据汇编器410、基元汇编器420、光栅化器455和光栅操作单元465的功能。可替代地,可使用用于一个或多个功能的专用处理单元来实现图形处理管线400。
[0062]数据汇编器410处理单元收集用于高阶表面、基元等的顶点数据,并将包括顶点属性的顶点数据输出到顶点处理单元415。顶点处理单元415是可编程执行单元,其配置为执行顶点着色器程序,按顶点着色器程序所指定的来亮化和变换顶点数据。例如,顶点处理单元415可被编程以将顶点数据从基于对象的坐标表示(对象空间)变换到可替代地基于诸如世界空间或规格化设备坐标(NDC)空间的坐标系。顶点处理单元415可读取由数据汇编器410所存储在LI高速缓存320、并行处理存储器204、或系统存储器104中的数据用于在处理顶点数据中使用。[0063]基元汇编器420从顶点处理单元415接收顶点属性、按需要读取所存储的顶点属性、并构建图形基元用于由几何处理单元425处理。图形基元包括三角形、线段、点等等。几何处理单元425是可编程执行单元,其配置为执行几何着色器程序,按几何着色器程序所指定的来变换从基元汇编器420所接收的图形基元。例如,几何处理单元425可被编程以将图形基元细分成一个或多个新图形基元并计算用来将新图形基元光栅化的参数,诸如平面方程系数。
[0064]在一些实施例中,几何处理单元425还可在几何流中添加或删除元素。几何处理单元425将指定新图形基元的参数和顶点输出到视口缩放、剔除(cull)和裁剪(clip)单元450。几何处理单元425可读取存储在并行处理存储器204或系统存储器104中的数据用于在处理几何数据中使用。视口缩放、剔除和裁剪单元450实施裁剪、剔除和视口缩放,并将所处理的图形基元输出到光栅化器455。
[0065]光栅化器455扫描转换新图形基元并将片段和覆盖数据输出到片段处理单元460。此外,光栅化器455可配置为实施z剔除(z-culling)和其他基于z的优化。
[0066]互锁445检测片段处理单元460何时正对渲染目标中的、与在另一个图形处理管线400中的片段处理单元460相同的位置进行写。在一些实施例中,两个片段处理单元460可配置为对渲染目标中的相同(x,y)位置进行写,此处(x,y)表示像素的屏幕坐标。在这类情况下,在片段处理单元460上执行的片段着色器程序可能不在与在不同的片段处理单元460上的尚未完成的片段着色器程序相同的位置处被启动。互锁455使在后的片段着色器程序停顿,并阻止在后的着色器程序启动,直到第一片段着色器程序对给定(x,y)位置完成读-修改-写操作。该方法确保在后的片段着色器程序从指向相同(x,y)位置的在先的片段着色器程序接收最终值。一旦在先的片段着色器程序完成对(x,y)位置的写,互锁455就释放在后的片段着色器程序用于执行。
[0067]片段处理单元460是可编程的执行单元,其配置为执行片段着色器程序,按片段着色器程序所指定的来变换从光栅化器455所接收的片段。例如,片段处理单元460可被编程以实施诸如透视校正、纹理映射、着色、混合等操作,以产生输出到光栅操作单元465的经着色的片段。片段处理单元460可读取存储在并行处理存储器204或系统存储器104中的数据用于在处理片段数据中使用。可以像素、样本、或其他粒度对片段着色,这取决于所编程的米样率。
[0068]光栅操作单元465是处理单元,其实施诸如模板(Stencil)、Z测试、混合等的光栅操作,并输出像素数据作为经处理的图形数据用于存储在图形存储器中。经处理的图形数据可存储在图形存储器例如并行处理存储器204和/或系统存储器104中,用于在显示设备110上显示或用于由CPU102或并行处理子系统112进一步处理。在本发明的一些实施例中,光栅操作单元465配置为压缩写入到存储器的z或颜色数据以及解压缩从存储器中读取的z或颜色数据。在各实施例中,R0P465可位于存储器接口 214中、GPC208中、GPC之外的处理集群阵列230中、或PPU202内的分开的单元(未示出)中。
[0069]利用每像素着色器线程的高效超级采样
[0070]如上文结合所描述的,片段处理单元460配置为以像素、样本或其他粒度执行片段着色器程序,这取决于可编程的采样率。例如,片段处理单元460可执行对像素着色的像素着色器程序或分开地对给定像素的每个样本着色的样本着色器程序。片段处理单元460可通过以样本粒度、以与像素粒度相比减少的性能进行着色来达到较高的图形质量。如下文结合图5-9所进一步描述的,片段处理单元460可配置为尽可能每像素实施一次计算。在这类情况下,片段处理单元460将检测像素着色器程序何时有可能产生用于多个样本的相同结果,并且在这类情况下,针对多个样本实施一次每像素计算。
[0071]图5示出了根据本发明的一个实施例的、图4的图形处理管线400的片段处理单元460。如所示的,片段处理单元460包括输入寄存器510、像素着色器程序520、输出屏蔽(mask) 530以及输出寄存器540。
[0072]输入寄存器510组成片段处理单元460的本地寄存器集。输入寄存器510存储从光栅化器455所接收的片段和覆盖数据。片段表示已被光栅化并为片段或像素着色做好准备的图形基元的一部分。片段与可能被篡改(interpolate)的各种数据参数相关联,包括但不限于屏幕空间中的片段的位置、片段的深度值、诸如颜色或纹理元素或曲面法线的值、与片段相关联的模板屏蔽、以及用于片段的透明度值。覆盖数据包括屏幕空间中与片段相交的像素集或像素样本集。片段和覆盖数据随后被像素着色器程序520读取用于进一步处理。
[0073]像素着色器程序520是在片段处理单元460中的处理器(未示出)上执行的一系列指令。像素着色器程序520是如结合图4所描述的片段着色器程序的一种形式。如下文所进一步描述的,像素着色器程序520处理存储在输入寄存器中的片段和覆盖数据,并将经处理的数据传送到输出寄存器540和输出屏蔽530。取决于像素着色器程序520中的指令,所传送的数据可以像素信息的形式、或以如上文所描述的片段和覆盖数据的形式。像素信息包括但不限于典型地表示为红、绿、蓝分量的颜色信息以及深度信息。覆盖数据经由输出屏蔽530被传送,其指示输出寄存器540中的数据所覆盖的样本。
[0074]在一个示例中,像素着色器程序520包括实施可编程混合的指令。混合操作包括其中从渲染目标读取像素信息、根据给定功能修改像素信息以及将经修改的像素信息写回到渲染目标的任何像素操作。典型地,以原子方式实施这类混合操作,例如无需任何干预(intervene)的读或写操作而完成自/至渲染目标的读操作和其成对的写操作。利用可编程混合,像素着色器程序520可根据所编程的指令来实施混合操作。正因如此,混合操作将不限于R0P465中的固定功能的混合操作。由像素着色器程序520所计算的像素信息针对给定像素中的每个样本可能是不同的,因为即使源值针对所有样本可能是相同的,目标值针对每个样本也可能是不同的。可替代地,由像素着色器程序520所计算的像素信息针对给定像素中的两个或更多个样本可能是相同的。像素着色器程序520可从渲染目标读取数据并根据着色器程序520内所定义的混合功能来实施混合操作。像素着色器程序520随后将经由输出寄存器540把结果像素信息传送到渲染目标,并经由输出屏蔽530选择受到影响的样本。像素着色器程序520可经由多个分派器(dispatcher)传送像素信息,其中每个分派器将具有不同的输出屏蔽530,从而选择不同的样本。通常,像素中的全部样本与输出屏蔽530中的位存在 对应关系。
[0075]如果像素信息针对每个样本是不同的,那么像素着色器程序520将针对每个样本传送一个分派器。相应的输出屏蔽530将仅使能正确的样本用于写。如果像素信息针对两个或更多个样本是相同的,那么像素着色器程序520将针对具有相同像素信息的样本集传送一个分派器。相应的输出屏蔽530将仅使能正确的多个样本用于写。像素着色器程序520可检测用于像素的所有样本与在渲染目标中所存储的是同样的、并且由像素着色器程序520所计算的像素信息针对所有样本是相同的的条件。在这类情况中,像素着色器程序520实施仅操作一次的每样本可编程混合,并通过单个分派器传送一次结果像素信息。相应的输出屏蔽530将使能用于像素的所有样本用于写。
[0076]在应用可编程接口(API)级别,这类可编程混合功能可被暴露为像素着色器程序520,所述像素着色器程序520包括每像素传递(pass)和程序可选择的数目的基于样本的传递,此处每个基于样本的传递可影响多个样本。每个基于样本的传递将最多实施一个分派。像素着色器程序520可将多个基于样本的传递组合成单个分派,此处像素信息针对相应的样本是同样的。正因如此,像素着色器程序520将在单个线程中高效地执行,首先执行每像素计算,并且随后执行每样本计算。在API级别将该特征暴露为多个分派有利地对像素着色器程序520提供灵活性,其可在渲染时间将多个分派组合成单个分派。
[0077]在另一个示例中,像素着色器程序520包括在混合(hybrid)模式中实施前向渲染的指令,此处像素着色器程序520的一部分将每像素执行一次,并且像素着色器程序520的第二部分将每样本执行一次。典型地,图形处理管线400操作在多采样模式或超级采样模式这两个模式之一中。在多采样模式中,图形处理管线400针对每个像素位置处理一个像素信息集,其中像素信息表示颜色和深度值,典型地在每个像素的中心处。在图形处理管线400的最终输出处生成多个样本,例如,如R0P465中的混合操作。在超级采样模式中,图形处理管线400针对每个样本位置处理一个像素信息集,其中像素信息表示针对像素中的每个样本的颜色和深度值。每像素多个样本被从光栅化器455到图形处理管线400的其余部分所处理。超级采样模式以减少的性能达到较高的图像质量。例如,在每个像素包括四个样本的情况下,超级采样模式将以多采样模式的四分之一的性能来执行。也就是说,超级采样模式将以比多采样模式慢四倍的速度来执行。可替代地,超级采样模式将消耗图形处理管线400内的片段处理单元460的四倍于多采样模式的资源。
[0078]利用混合模式中的前向渲染,将达到性能接近于多采样模式的性能的超级采样模式的图像质量。图形处理管线400中是片段处理单元460的上游的级操作在多采样模式中。图形处理管线中时片段处理单元460的下游的级操作在超级采样模式中。在片段处理单元460中执行的像素着色器程序520操作在混合模式中,实施每像素一次的一些操作和每样本一次的其他操作,如下文结合图6所描述的。
[0079]在又一个实施例中,像素着色器程序520包括实施延迟(defer)渲染的指令。利用延迟渲染,输入寄存器510将针对像素中的每个样本被写入与高频属性相对应的片段数据,此处属性存储在几何缓冲区(G-buffer)(未示出)中。像素着色器程序520可将来自输入寄存器510的片段和覆盖数据直接传递到输出寄存器540。像素着色器程序520可处理片段或将片段传递到输出寄存器540而不对其进行处理。一个片段将被存储在渲染目标中的一个样本位置中。正因如此,当像素着色器程序520分派片段时,相应的输出屏蔽530使分派能够被写入到单个样本位置中。在稍后的时间,当多个片段已存储在渲染目标中时,像素着色器程序520从渲染目标检索片段。像素着色器程序520将处理片段,并针对与给定像素相关联的一个或多个样本位置来计算像素信息。像素着色器程序520可经由一个或多个分派将样本传送到输出寄存器540。输出寄存器将随后经由存储器接口 214把像素信息转移到渲染目标,或将把像素信息传送到R0P465用于ROP混合。[0080]在一些实施例中,互锁机制可检测多个像素着色器程序520何时正针对渲染目标中的相同(x,y)位置实施操作。互锁机制可在另一个像素着色器程序520正对相同(x,y)位置实施混合操作(诸如读-修改-写)时阻止像素着色器程序520访问渲染目标中的特定(X,y)位置。如果像素着色器程序520正实施有序的混合操作,那么图形对象以特定次序被混合到渲染目标中。诸如结合图4所描述的互锁445的互锁机制可使在后的像素着色器程序520停顿,直到在先的像素着色器程序520完成对(x,y)位置的混合操作。该技术允许在后的像素着色器程序520可靠地使用来自针对相同(x,y)位置运行的在先的像素着色器程序520的结果。
[0081]可替代地,像素着色器程序520可配置为无序(non-order)的混合操作。在这类情况中,互锁机制不需要确保特定混合次序。反而,互锁机制可允许像素着色器程序520以任何次序访问渲染目标中的位置。在这类情况中,互锁机制可采用软件锁来确保混合操作被原子地实施。像素着色器程序520在对(x,y)位置实施混合操作之前针对该给定(x,y)位置请求锁定。如果针对给定(x,y)位置的锁定是可用的,那么像素着色器程序520可获取锁定并完成对(x,y)位置的读-修改-写。像素着色器程序520可随后释放锁定。如果针对给定(X,y)位置的锁定是不可用的,那么另一个像素着色器程序520可正对相同(X,y)位置实施混合操作。像素着色器程序可等待直到锁定变成可用的。当锁定变成可用的时,像素着色器程序520可获取锁定并完成对(X,y)位置的读-修改-写。像素着色器程序520可随后释放锁定。
[0082]输出屏蔽530是使能或禁用从着色器程序520所接收的数据的一系列位。输出屏蔽530确定哪个样本被写入来自输出寄存器540的数据。如果具体位被设置为I,那么相应的样本存储位置将被写入由像素着色器程序520所计算的并被写入到输出寄存器540的数据。如果具体位被设置为0,那么相应的样本存储位置将不被写入数据。在另一个示例中,输入屏蔽530中的四位字段可与渲染目标中的四个样本存储位置的具体集相对应,此处四个样本组成特定像素。如果四位字段被设置为[1111],那么所有的四个相应样本存储位置将被写入由像素着色器程序520所计算的数据。如果四位字段被设置为[0000],那么四个相应样本存储位置将均不被写入数据。如果四位字段被设置为[0100],那么仅第二个相应仰恩存储位置被写入数据。如利用多个分派的进一步的示例,利用[1000]的第一分派将把输出寄存器值的第一集写入第一样本,利用[0100]的第二分派将把输出寄存器值的第二集写入第二样本,等等。每个分派可通过使输出寄存器值的多个子集中的每个被写入到相应的渲染目标来对多个渲染目标进行写。
[0083]输出寄存器540包括寄存器集,其是片段处理单元460的本地寄存器集。输出寄存器540存储来自像素着色器程序520的数据。如上文所描述的,这类数据可以是以像素信息的形式,包括颜色信息、深度信息和像素的其他属性。可替代地,数据可以是以片段和覆盖数据的形式,诸如在延迟渲染的情况中。取决于像素着色器程序520中的具体指令和图形处理管线400的状态,输出寄存器540中的数据可被传送到R0P465,或通过经由交叉开关单元210将数据传送到存储器接口 214而被直接写入到渲染目标。
[0084]在一些实施例中,输出寄存器540可能不直接支持来自像素着色器程序520的多个分派。在这类情况中,像素着色器输出寄存器540可以是标准的单个分派的着色器寄存器。在这类架构中,当着色器程序520结束时,单独的进程(未示出)读输出寄存器540并将相应值向下游发送到渲染目标或R0P465。对于支持多个分派的像素着色器的输出寄存器540,可经由任何技术上可行的方法来完成到渲染目标的转移,包括但不限于:(i)在每个分派之后使像素着色器程序520停顿直到输出寄存器540已被读,并且随后发出下一个分派;(ii)将数据存储到专用于特定分派的输出寄存器540中;(iii)将数据存储到寄存器的双缓冲集中,其中在所述寄存器中两个缓冲区在分派之间被交换;(iv)将专用数据存储到单缓冲寄存器集中并将每样本输出数据存储到双缓冲寄存器集中。
[0085]图6示出了根据本发明的一个实施例的、图5的片段处理单元460内的像素着色器程序520。如所示的,像素着色器程序520包括多个级,包括阴影映射级610、环境光遮蔽级620、子面(subsurface)散射级630、漫反射光照级640、阿尔法(alpha)测试级650以及镜面光照级660。
[0086]阴影映射级610创建在图形对象阻塞光源路径时产生的阴影。阴影映射级610在确定可见像素比在相同光路径中的另一个像素更靠近光源时创建阴影。阴影映射级610将阴影映射操作的结果传送到环境光遮蔽级620。
[0087]环境光遮蔽级620近似光源的辐射,此处图像中每个像素处的照明基于场景中的其他图形对象。环境光遮蔽级620将环境光遮蔽操作的结果传送到子面散射级630。
[0088]子面散射级630近似在下述情况下的效果:光在具体点处部分地穿透透明(translucent)图形对象的表面、被透明对象内部地散射并随后在不同点处退出透明对象。子面散射级630将子面散射操作的结果传送到漫反射光照级640。
[0089]漫反射光照级640近似下述情况下的效果:光触击(strike)到图形对象并被表面反射到许多方向中。漫反射光照以具有不规则或无光泽表面的对象为特点,并与下文所描述的镜面光照形成对比。漫反射光照级640将漫反射光照操作的结果传送到阿尔法测试级650。
[0090]典型地,由阴影映射级610、环境光遮蔽级620、子面散射级630以及漫反射光照级640所实施的计算展示低的空间频率。也就是说,来自这些级的像素信息在相邻像素之间可能不会明显地改变。正因如此,这些级可以每像素执行一次而在图像质量上没有显著损耗。在这些级完成之后,像素信息的单个集被传送到阿尔法测试级650(0) - 650(3),此处每个阿尔法测试级650每样本执行一次。
[0091]阿尔法测试级650对比先前存储在渲染目标中的像素来测试由像素着色器程序所计算的像素。如果所计算的像素具有的深度值小于渲染目标中的深度值,那么所计算的像素被存储在渲染目标中,否则所计算的像素被丢弃。在一些实施例中,所计算的像素基于各自的深度值和其他参数与所存储的像素混合。典型地,由阿尔法测试级650所实施的计算展示高的空间频率。也就是说,来自阿尔法测试级650的结果像素信息在相邻像素之间可明显地改变。正因如此,实施阿尔法测试每像素一次可导致图像质量的显著损耗。因此,阿尔法测试被每样本实施一次。阿尔法测试级650 (O)针对第一样本实施阿尔法测试,阿尔法测试级650(1)针对第二样本实施阿尔法测试,以此类推。每个阿尔法测试级650 (O) - 650 (3)将阿尔法测试操作的结果传送到相应的镜面光照级660 (O) - 660 (3)。
[0092]镜面光照级660近似下述效果:光触击到图形对象的表面并被表面反射到单个方向中。镜面光照以具有平滑的、高度反光的表面的对象为特点,并与上文所描述的漫反射光照形成对比。典型地,由镜面光照级660所实施的计算展示高的空间频率。也就是说,来自镜面光照级660的结果像素信息在相邻像素之间可明显地改变。正因如此,实施镜面光照每像素一次可导致图像质量的显著损耗。因此,镜面光照被每样本实施一次,如上文所描述的。镜面光照级660通过使用样本屏蔽530的不同值来将镜面光照操作的结果传送到输出寄存器540作为像素着色器程序520的每样本的输出。
[0093]图7示出了根据本发明的一个实施例的、图5的片段处理单元460内的输出寄存器700的一部分。如所示的,输出寄存器700的一部分包括多个渲染目标(MRT)缓冲区710,其被在片段处理单元460上同时执行的多个线程720所写。
[0094]MRT缓冲区710是输出寄存器700的一部分内的寄存器组。每个MRT缓冲区710包括与不同的渲染目标相对应的位置集。MRT缓冲区710 (O)与渲染目标O相对应,MRT缓冲区710(1)与渲染目标I相对应,以此类推。每个MRT缓冲区710包括存储与特定样本相对应的像素信息的数个样本位置730、740、750、760。线程720是像素着色器程序520的实例,并且八个线程720针对MRT缓冲区710(0)中的八个相应像素的第一样本在样本位置730 (O) - 730(7)处存储样本信息。同样地,线程720针对MRT缓冲区710 (I)中的第二样本在样本位置740(0) - 740(7)处、针对MRT缓冲区710(2)中的第三样本在样本位置750(0) - 750(7)处、针对MRT缓冲区710(3)中的第四样本在样本位置760 (O) - 760(7)处存储样本信息。在该安排中,针对特定线程的MRT缓冲区710针对特定渲染目的像素内的多个样本存储数据,而不是如在现有技术中的针对跨越多个渲染目标的单个像素。
[0095]线程720表示像素着色器程序520的分开的实例,此处每个实例针对给定像素中的一些样本计算像素信息。典型地,像素着色器程序520在给定MRT缓冲区710中仅对一个像素位置进行写,但对于给定线程720,渲染目标中的特定像素内的所有样本均由与该线程相对应的MRT缓冲区710的部分所覆盖。正因如此,像素着色器程序520在线程720 (O)处的实例将样本730 (O)写到被指向第一渲染目标的MRT缓冲区710 (O),像素着色器程序520在线程720 (O)处的实例将样本740 (O)写到被指向第二渲染目标的MRT缓冲区710 (I),以此类推。结果,线程720 (O)针对第一组的四个样本计算像素信息并存储样本730 (O)、740 (O)、750(0)和760(0)中的像素信息。这四个样本分别与MRT缓冲区710 (O) -710(3)相对应。类似地,线程720 (I)针对第二组的四个样本计算像素信息,并在样本位置730 (I)、740 (I)、750(1)和760(1)处存储像素信息,以此类推。一旦所有线程720(0) - 720(7)均填充了样本位置730、740、750、760,MRT缓冲区710 (O) - 710(3)可被转移到多个渲染目标中的相应像素。在一些实施例中,输出屏蔽530针对每个线程720可能是不同的。例如,针对线程720(0)的输出屏蔽可仅使能样本730 (O)和740 (O)用于在给定分派中写,线程720 (I)可仅使能样本760(1)用于写,并且线程720 (2)可使能在相同分派中的所有四个样本730(2)、740 (2)、750 (2)和 760(2)用于写。
[0096]图7B示出了根据本发明另一个实施例的、图5的片段处理单元460内的输出寄存器770的一部分。如所示的,输出寄存器770的一部分包括由线程720所填充的MRT缓冲区710。MRT缓冲区710和线程720的运作大体上与结合图7A所描述的相同,除了下文所进一步描述的。
[0097]如所示的,线程720中的每一个针对渲染目标中的相应像素775计算像素信息。线程720 (O)针对像素775 (O)的四个样本计算像素信息,并在样本位置730(0)、740 (O)、750(0)和760(0)处存储像素信息。类似地,线程720(1)针对像素775(1)的四个样本计算像素信息,并在样本位置730(1)、740(1)、750(1)和760(1)处存储像素信息,以此类推。虽然线程横跨MRT缓冲区710填充垂直条状的样本位置730、740、750、760,但是样本位置730、740、750、760可一次一个MRT缓冲区710地被高效地转移到多个渲染目标,如下文所进一步描述的。
[0098]图7C示出了根据本发明再一个实施例的、图5的片段处理单元460内的输出寄存器780的一部分。如所示的,输出寄存器780包括由线程720所填充的MRT缓冲区710。MRT缓冲区710和线程720的运作大体上与结合图7A-7B所描述的相同,除了下文所进一步描述的。
[0099]如所示的,MRT缓冲区710(0)包括样本位置730(0) - 730 (3),其与针对四个像素775(0) - 775(3)的组的第一样本相对应,如由线程720 (O) - 720(3)所计算的。来自输出寄存器780的一部分的单个转移可将样本位置730 (O) - 730(3)中的值转移到与多个渲染目标相关联的数据采集器(未示出)。MRT缓冲区710 (I)包括样本位置740 (O) - 740 (3),其与针对四个像素775(0) - 775(3)的组的第二样本相对应。来自输出寄存器780的一部分的单个转移可将样本位置740 (O) - 740(3)中的值转移到与多个渲染目标相关联的数据采集器。相似的转移可将第三和第四样本的值从输出寄存器780的一部分转移到数据采集器。一旦数据采集器包括针对四个像素775 (O) - 775(3)的所有样本值,那么数据采集器重新排列数据用于存储在针对四个像素775(0) - 775(3)的合适的渲染目标存储器位置。附加的转移可随后转移由线程720(4) - 720(7)针对第二组的四个像素(未示出)所计算的样本信息。在一些实施例中,MRT缓冲区710连同相应的输出屏蔽530在一个或多个分派中被从输出寄存器540转移到R0P465。在其他实施例中,像素着色器程序520在输出寄存器540中读MRT缓冲区710连同输出屏蔽530,并在一个或多个分派中将MRT缓冲区710和输出屏蔽530转移到渲染目标。
[0100]图8示出了根据本发明一个实施例的、与渲染目标中的多个像素830相交的几何基元810。如所示的,像素830中的每一个包括四个样本820。几何基元810完全覆盖像素830(0)的所有四个样本820(0) - 820(3)。因此,像素着色器程序520可利用单个分派来转移用于所有四个样本820 (O) - 820(3)的样本信息。几何基元810完全覆盖像素830 (I)的两个样本820 (4) 820 (6)0因此,像素着色器程序520可利用单个分派来转移用于样本820(4)820(6)的样本信息。几何基元部分地覆盖像素830 (2)的三个样本820 (8)-820 (10)。因此,像素着色器程序520可利用单个分派来转移用于样本820(8)-820(10)的样本信息。可替代地,针对样本820 (8)-820 (10)中的每一个的样本信息可能是不同的,因为几何基元对每个样本820 (8) -820 (10)覆盖不同的量,或者因为镜面高光(或某个其他着色效果)创建不同的颜色值。正因如此,像素着色器程序520可利用三个分派来转移用于样本820 (8)-820 (10)的样本信息。最后,几何基元810部分地覆盖像素830 (3)的一个样本820 (12)。因此,像素着色器程序520可利用单个分派来转移用于样本820 (12)的样本信息。
[0101]将理解的是,本文所描述的架构仅是示例性的,并且变形和修改是可能的。在一个示例中,本文在八个线程的环境中描述技术,每个针对每个包括四个样本的像素计算像素信息。然而,可采用所描述的技术来对每像素包括任何数目的样本的像素进行着色。此外,可跨任何数目的线程采用所描述的技术,此处直接的像素信息到任何数目的渲染目标。
[0102]图9阐述了根据本发明一个实施例的、用于分派来自图形处理管线400中的像素着色器程序520的像素值的方法步骤的流程图。虽然结合图1-7C的系统描述了方法步骤,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
[0103]如所示的,方法900开始于步骤902,此处片段处理单元460接收包括至少一个像素的片段,此处片段是图形基元的一部分。在步骤904,片段处理单元460基于所接收的片段生成包括多个样本的像素。在步骤906,片段处理单元460计算源值集,此处每个源值与像素的不同的样本相对应。在步骤908,片段处理单元460从渲染目标检索目标值,此处每个目标值与不同的源值相对应。在步骤910,片段处理单元460将每个源值与相应的目标值进行混合以创建最终值。在步骤912,创建一个或多个分派消息以将最终值存储在输出寄存器集中。随后方法900结束。
[0104]图10阐述了根据本发明另一个实施例的、用于分派来自图形处理管线400中的像素着色器程序520的像素值的方法步骤的流程图。虽然结合图1-7C的系统描述了方法步骤,但是本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统均在本发明的范围内。
[0105]如所示的,方法1000开始于步骤1002,此处片段处理单元接收包括至少一个像素的片段,此处片段是图形基元的一部分。在步骤1004,片段处理单元460基于所接收的片段生成包括多个样本的像素。在步骤1006,片段处理单元460实施每像素计算一次的一个或多个计算。在步骤1008,片段处理单元460实施针对像素的每个样本计算一次的一个或多个计算。在步骤1010,片段处理单元460将每像素计算的结果和每样本计算的结果进行组合,以创建用于像素的每个样本的最终值。在步骤1012,片段处理单元创建一个或多个分派消息以将最终值存储在输出寄存器集中。随后方法1000结束。
[0106]总而言之,片段处理单元包括配置为将用于每个像素的多个分派传送到一个或多个渲染目标的像素着色器程序。像素着色器程序在单个线程中执行,通过首先实施每像素计算并且随后实施每样本计算。每像素计算针对像素中的所有样本被实施一次。如果用于给定像素的多个样本具有同样的源和目标像素信息,那么多个样本包括在样本集中。每样本计算可针对每个样本集被实施一次,而不是针对每个样本一次。像素着色器程序随后针对每个样本集分派一次像素信息连同相应的输出屏蔽,以将经混合的样本存储回渲染目标中。
[0107]所公开的技术的一个优点是,像素着色器程序以增加的效率实施每样本操作。在典型的场景中,像素着色器程序以接近于每像素着色的性能达到每样本像素着色的较高的图像质量。
[0108]本发明的一个实施例可被实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由压缩光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存存储器、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息jP(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0109]以上已参照具体实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和改变而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
[0110]因此,本发明的实施例的范围在下面的权利要求中加以阐述。
【权利要求】
1.一种用于分派图形处理管线中的像素信息的方法,所述方法包括: 基于由第一线程所接收的图形基元的第一部分生成包括多个样本的第一像素; 针对所述第一像素计算第一值,其中所述第一值针对所述第一像素仅被计算一次;针对所述多个样本中的样本计算第一值集,其中所述第一值集中的每个值与所述多个样本中的不同样本相对应,并针对相对应的样本仅被计算一次; 将所述第一值与所述第一值集中的每个值进行组合以创建第二值集;以及 创建两个或更多个分派消息以将所述第二值集存储在输出寄存器集中。
2.—种子系统,包括: 片段处理单元,其配置为通过实施下述步骤来分派图形处理管线中的像素信息: 基于由第一线程所接收的图形基元的第一部分生成包括多个样本的第一像素; 针对所述第一像素计算第一值,其中所述第一值针对所述第一像素仅被计算一次;针对所述多个样本中的样本计算第一值集,其中所述第一值集中的每个值与所述多个样本中的不同样本相对应,并针对相对应的样本仅被计算一次; 将所述第一值与所述第一值集中的每个值进行组合以创建第二值集;以及 创建两个或更多个分派消息以将所述第二值集存储在输出寄存器集中。
3.根据权利要求2所述的子系统,其中所述片段处理单元进一步配置为实施下述步骤: 确定第二线程正对 所述第一像素实施操作; 使所述第二线程停顿直到所述第一线程完成执行与所述第一像素有关的操作;以及 释放所述第二线程。
4.根据权利要求2所述的子系统,其中创建两个或更多个分派消息包括: 确定所述第二值集中的两个或更多个值相等; 生成输出屏蔽,以使能与对应于所述两个或更多个值的样本位置相关的写操作并禁用与和所述第一像素相关联的其他样本位置相关的写操作;以及创建包括所述两个或更多个值的拷贝的分派消息。
5.根据权利要求2所述的子系统,其中所述片段处理单元进一步配置为实施将所述输出寄存器集的内容转移到光栅操作单元的步骤。
6.根据权利要求2所述的子系统,其中所述片段处理单元进一步配置为实施将所述输出寄存器集的内容转移到渲染目标的步骤。
7.根据权利要求6所述的子系统,其中转移所述输出寄存器集的内容包括: 对包括多个样本位置的值的输出寄存器进行读,其中每个样本位置与多个像素中的不同像素的第一样本相对应;以及 将所述多个样本位置中的每个样本位置的值写到所述渲染目标中的相对应的样本位置中。
8.根据权利要求7所述的子系统,其中所述多个样本位置中的每个样本位置的值由相同的线程来写。
9.根据权利要求2所述的子系统,其中所述第二值集包括与所述多个样本中的一个或多个样本相关的像素信息,其中所述像素信息包括颜色信息和深度信息中的至少一个。
10.根据权利要求2所述的子系统,其中所述第二值集包括与所述图形基元的所述第一部分相关联的片段信息,其中所述片段信息包括片段位置、颜色元素、纹理元素、模板屏蔽、透明度值和覆盖数据中的至`少一个。
【文档编号】G06T15/00GK103886634SQ201310718024
【公开日】2014年6月25日 申请日期:2013年12月23日 优先权日:2012年12月21日
【发明者】杰尔姆·F·小杜鲁克, 鲁斯兰·季米特洛夫, 埃里克·卢姆, 鲁伊·巴斯托斯 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1