CN102667814B - 一种保序分布式光栅化器 - Google Patents

一种保序分布式光栅化器 Download PDF

Info

Publication number
CN102667814B
CN102667814B CN201080057655.2A CN201080057655A CN102667814B CN 102667814 B CN102667814 B CN 102667814B CN 201080057655 A CN201080057655 A CN 201080057655A CN 102667814 B CN102667814 B CN 102667814B
Authority
CN
China
Prior art keywords
primitive
object space
descriptor
processing
screen
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
Application number
CN201080057655.2A
Other languages
English (en)
Other versions
CN102667814A (zh
Inventor
史蒂文·E·莫尔纳
埃米特·M·克奥加里夫
约翰尼·S·罗兹
蒂莫西·约翰·珀塞尔
肖恩·J·特赖希勒
齐亚德·S·哈库拉
富兰克林·C·克罗
詹姆斯·C·鲍曼
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
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 Nvidia Corp filed Critical Nvidia Corp
Publication of CN102667814A publication Critical patent/CN102667814A/zh
Application granted granted Critical
Publication of CN102667814B publication Critical patent/CN102667814B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

本发明的一个实施例描述了一种用于在维持API基元排序的同时并行地渲染图形基元的技术。多个独立的几何单元对不同的图形基元并发地执行几何处理。基元分布方案在维持用于每个像素的基元排序的同时,以每时钟多个基元的速率并发地发送基元至多个光栅化器。多个独立的光栅化器单元对一个或多个图形基元并发地执行光栅化,实现每系统时钟多个基元的渲染。

Description

一种保序分布式光栅化器
相关申请的交叉引用
本申请要求于2009年10月15日提交的序列号为12/580,017的美国专利申请的优先权。
技术领域
本发明总体上涉及图形处理,更具体地,涉及在保持基元顺序的同时,并行地光栅化多个基元。
背景技术
传统的图形处理器在保持应用编程接口(API)指定的基元顺序的同时,以达到每时钟一个三角形的速率处理基元。在有序流中接收诸如三角形的图形基元用于处理。DirectX和OpenGL API要求维持基元顺序,也就是说,必须按应用程序提供的顺序渲染基元。这一要求保证了贯穿的(intersecting)基元将被确定地渲染,以避免引入视觉伪像(artifact)。此外,由于渲染后面的基元的结果可取决于由渲染前面的基元所产生的帧缓冲区的状态,特别是当使用混色的时候,因此必须维持基元的顺序。
虽然很多图形处理器已经利用并行化以提高处理吞吐量,但是能够在从单个API输入流进行处理的同时每时钟渲染多于一个三角形的系统往往不以全速维持基元排序。
据此,本技术领域需要一种用于在维持API基元排序的同时每时钟渲染超过一个三角形的系统和方法。
发明内容
一种用于并行地渲染图形基元的系统和方法维持API基元排序,并且能每系统时钟渲染多个基元。多个独立的几何单元对不同的图形基元并发地执行几何处理。基元分布方案在维持用于每个像素的基元排序的同时,以每时钟若干基元的速率并发地输送基元给多个光栅化器。多个独立的光栅化器单元对一个或多个图形基元并发地执行光栅化。
用于并行地渲染基元的本发明方法的各种实施例包括:按第一顺序接收基元,其中基元被编码为顶点索引列表;以及分布表示所述基元的基元描述符用于在对象空间中进行并行处理以产生多个流,每个流均包括对象空间处理后基元描述符。基于屏幕空间的位置,路由对象空间处理后基元描述符的多个流,以产生表示贯穿屏幕的第一部分的基元的处理后基元描述符的第一流,以及产生表示贯穿屏幕的第二部分的基元的处理后基元描述符的第二流。将第一流中的对象空间处理后基元描述符重新排序,以和第一顺序相匹配,来产生对象空间处理后基元描述符的重排序的第一流。将第二流中的对象空间处理后基元描述符重新排序,以和第一顺序相匹配,来产生对象空间处理后基元描述符的重排序的第二流。并行地光栅化贯穿屏幕的第一部分并且由对象空间处理后基元描述符的第一流表示的基元、以及贯穿屏幕的第二个部分并且由对象空间处理后基元描述符的第二个流表示的基元,以产生图像的光栅化的像素。
本发明的各种实施例包括一种用于并行地渲染基元的系统。该系统包括处理器,经配置以:按第一顺序接收基元,其中所述基元被编码为顶点索引列表;以及分布表示基元的基元描述符用于在对象空间中进行并行处理以产生多个流,每个流均包括对象空间处理后基元描述符。该处理器经配置以基于屏幕位置来路由对象空间处理后基元的多个流,以产生表示贯穿屏幕的第一部分的基元的处理后基元描述符的第一流,以及产生表示贯穿屏幕的第二部分的基元的处理后基元描述符的第二流。该处理器经配置以重新排序第一个流中的对象空间处理后基元描述符,以和第一顺序相匹配,来产生对象空间处理后基元描述符的重排序的第一流,并且,重新排序第二流中的对象空间处理后基元描述符,以和第一顺序相匹配,来产生重新排序的对象空间处理后基元描述符的第二流。然后,该处理器并行地光栅化贯穿屏幕的第一部分并且由对象空间处理后基元描述符的第一流表示的基元、以及贯穿屏幕的第二部分并且由对象空间处理后基元描述符的第二流表示的基元,来产生图像的光栅化的像素。
附图说明
为了能够详细地理解本发明的上述特征,可以参考实施例对上面所简要说明的本发明进行更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对本发明范围的限制,本发明可以适用于其他等效的实施例。
图1为示出了被配置为实现本发明一个或多个方面的计算机系统的框图;
图2为根据本发明的一个实施例的,用于图1的计算机系统的并行处理子系统的框图;
图3A为根据本发明一个实施例的,图2的一个PPU内的GPC的框图;
图3B为根据本发明一个实施例的,图2的一个PPU内的分区单元的框图;
图3C为根据本发明一个实施例的,图3A的工作分布交叉开关的一部分的框图;
图4为根据本发明一个实施例的,图2的一个或多个PPU可经配置以实现的图形处理管线的示意图;以及
图5为根据本发明一个实施例的,用于在维持API基元排序的同时渲染基元的方法步骤的流程图。
具体实施方式
在下面的描述中,阐释了大量具体细节以提供对本发明更为彻底的理解。然而,对于本领域技术人员来讲将显而易见的是,在缺少这些具体细节中的一个或多个的情况下也可以实施本发明。在其他例子中,为了避免与本发明发生混淆,对公知特征没有进行描述。
系统概述
图1为示出了被配置为实施本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括中央处理单元(CPU)102和系统存储器104,两者经由可包括存储器桥105的互连路径通信。存储器桥105可以是例如北桥芯片,其可经由总线或通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以例如是南桥芯片,从一个或多个用户输入设备108(诸如键盘、鼠标)接收用户输入并且经由路径106和存储器桥105将所述输入转发(forward)到CPU 102。并行处理子系统112经由总线或其他通信路径113(例如PCIExpress、加速图形端口或超传输链路)耦合到存储器桥105;在一个实施例中,并行处理子系统112是将像素传输到显示设备110(例如常见的基于CRT或LCD的监视器)的图形子系统。系统盘114也连接到I/O桥107。开关116为I/O桥与诸如网络适配器118以及各种外插卡(add-in card)120和121的其他组件之间提供了连接。其他组件(未明确示出)也可以连接到I/O桥107,包括USB或其他端口连接、CD驱动器、DVD驱动器、胶片记录设备等。图1中将各种组件互连的通信路径可以采用任何适合的协议来实现,诸如PCI(外部组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或者点对点通信协议,并且不同设备间的连接可采用本技术领域已知的不同协议。
在一个实施例中,并行处理子系统112包含被优化用于图形和视频处理的电路,例如包括视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含被优化用于通用目的处理的电路,同时保留底层(underlying)的计算架构,本文将进行更为详细的描述。在另一个实施例中,并行处理子系统112可以与一个或多个其他系统元件集成,诸如存储器桥105、CPU 102以及I/O桥107,以形成片上系统(SoC)。
应该理解,本文所示系统是示例性的,可以对其进行变形和修改。可根据需要修改连接拓扑,包括桥的数量和布置、CPU 102的数量以及并行处理子系统112的数量。例如,在一些实施例中,系统存储器104直接连接到CPU 102而不是通过桥,其他设备经由存储器桥105以及CPU 102与系统存储器104通信。在其他替代拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU 102,而不是连接到存储器桥105。在又一些实施例中,I/O桥107和存储器桥105可被集成到单个芯片中。大量的实施例可包括两个或更多个CPU 102以及两个或更多个并行处理子系统112。本文所示的特定组件是可选的;例如,可以支持任意数量的外插卡或外围设备。在一些实施例中,开关116被去掉,网络适配器118和外插卡120、121直接连接到I/O桥107。
图2示出根据本发明的一个实施例的并行处理子系统112。如图所示,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元PPU均耦合到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,相似对象的多个实体用表示该对象的参考数字以及根据需要结合表示该实体的带括号的数字加以表示。)PPU 202和并行处理存储器204可使用一个或多个集成电路器件来实现,该集成电路器件诸如可编程处理器、专用集成电路(ASIC)或存储器器件,或以任何其他技术上可行的方式来实现。
再参考图1,在一些实施例中,并行处理子系统112中的一些或所有PPU 202是具有渲染管线的图形处理器,它可以被配置为执行与下述各项相关的各种任务:从由CPU 102和/或系统存储器104经由存储器桥105和总线113所提供的图形数据生成像素数据;与本地并行处理存储器204(可被用作图形存储器,包括例如常用的帧缓冲区)交互,以存储和更新像素数据;输送像素数据到显示设备110;等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU 202、以及用作通用计算的一个或多个其他PPU 202。这些PPU可以是相同的或不同的,并且每个PPU均可有其自己的专用并行处理存储器装置或非专用并行处理存储器装置。一个或多个PPU 202可输出数据到显示设备110,或每个PPU 202均可输出数据到一个或多个显示设备110。
在操作中,CPU 102是计算机系统100的主处理器,控制和协调其他系统组件的操作。具体地,CPU 102发出控制PPU 202的操作的命令。在一些实施例中,CPU 102将针对每个PPU 202的命令流写入到入栈缓冲区中(在图1或图2中未明确示出),所述入栈缓冲区可位于系统存储器104、并行处理存储器204或其他可由CPU 102和PPU 202访问的存储位置中。PPU 202从入栈缓冲区读取命令流,然后相对于CPU 102的操作异步地执行命令。
现在返回参考图2,每个PPU 202均包括I/O(输入/输出)单元205,该I/O单元205经由连接到存储器桥105(或,在一个替代实施例中,直接连接到CPU 102)的通信路径113而与计算机系统100的其余部分通信。PPU 202与计算机系统100的其余部分的连接也可以不同。在一些实施例中,并行处理子系统112可作为可被插入到计算机系统100的扩展插槽中的外插卡来实现。在其他实施例中,PPU 202可以和诸如存储器桥105或I/O桥107的总线桥一起集成在单个芯片上。在又一些实施例中,PPU 202的一些或所有元件可以和CPU 102一起集成在单个芯片上。
在一个实施例中,通信路径113是PCI-Express链路,其中给每个PPU202分配专用的通道(lane),如本技术领域所知。也可使用其他的通信路径。I/O单元205生成数据包(或其他信号)用于在通信路径113上传送,并且还从通信路径113接收所有传入的数据包(或其他信号),将传入的数据包引向PPU 202的适当组件。例如,可将与处理任务有关的命令引向主机接口206,而可将与存储器操作(例如,对并行处理存储器204的读取或写入)有关的命令引向存储器交叉开关(crossbar)单元210。主机接口206读取每个入栈缓冲区,并且将该入栈缓冲区指定的工作输出到前端212。
有利地,每个PPU 202都实现高度并行处理架构。如图中详细所示,PPU 202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC 208均能并发执行大量的(例如,几百或几千)线程,其中每个线程均是程序的实例(instance)。在各种应用中,可以分配不同的GPC 208用于处理不同类型的程序或用于执行不同类型的计算。例如,在图形应用中,可分配第一组GPC 208来执行曲面细分(tessellation)操作并为曲面元(patch)生成基元(primitive)拓扑,并且可分配第二组GPC 208来执行曲面细分着色以评估用于基元拓扑的曲面元参数以及确定顶点位置和其他的每顶点属性。GPC 208的分配可根据为每种类型的程序或计算所产生的工作量而不同。
GPC 208经由基元分布单元200接收将被执行的处理任务,所述基元分布单元200从前端单元212接收定义处理任务的命令。处理任务包括将被处理的数据的索引,所述数据例如为表面(曲面元)数据、基元数据、以及定义将如何处理数据(例如,将执行哪个程序)的命令和状态参数。基元分布单元200可以被配置为获取与该数据相对应的索引,或者基元分布单元200可以从前端212接收索引。前端212确保在进栈缓冲区所指定的处理启动前,GPC 208被配置为有效状态。
当PPU 202被用于图形处理时,例如,将每个曲面元的处理工作量分成大小近似相等的任务,以使曲面细分处理能够被分布到多个GPC 208。基元分布单元200可被配置为以能够提供任务给多个GPC 208进行处理的频率产生任务。在本发明的一些实施例中,GPC 208的各部分可被配置为执行不同类型的处理。例如,第一部分可被配置为执行顶点着色和拓扑生成,第二部分可被配置为执行曲面细分和几何着色,并且第三部分可被配置为在屏幕空间中执行像素着色以产生渲染后的图像。由GPC 208产生的诸如顶点属性的中间数据可以存储在缓冲区中,以允许该中间数据在GPC208之间传送以进一步处理。
存储器接口214包括D个分区单元215,每一个分区单元215均直接耦合到并行处理存储器204的一部分,其中D≥1。如图所示,分区单元215的数量通常等于DRAM 220的数量。在其他实施例中,分区单元215的数量可不等于存储器设备的数量。本技术领域的技术人员应该理解,DRAM220可以由其他合适的存储设备代替,并且可以是一般常规设计。因此省略详细的描述。渲染目标,诸如帧缓冲区或纹理映射,可以被跨DRAM 220存储,允许分区单元215并行地写入每个渲染目标的各部分,从而有效地使用并行处理存储器204的可用带宽。
任意一个GPC 208都可以处理将被写到并行处理存储器204内任意DRAM 220的数据。交叉开关单元210被配置为将每个GPC 208的输出路由到任一分区单元215的输入或路由到另一个GPC 208用于进一步处理。GPC 208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读写。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及具有到本地并行处理存储器204的连接,从而使得在不同GPC 208内的处理核能够与系统存储器104或相对于PPU 202来讲非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟通道(channel)来分开GPC 208与分区单元215之间的通信量(traffic)流。
再者,GPC 208可被编程为执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据转换、视频和/或音频数据的过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分着色、顶点着色、几何着色和/或像素着色程序)等等。PPU 202可将数据从系统存储器104和/或本地并行处理存储器204传输到内部(片上)存储器中、处理数据并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,在这里这样的数据可以由其他系统组件访问,所述其他系统组件包括CPU 102或另一并行处理子系统112。
PPU 202可设置有任意容量(amount)的本地并行处理存储器204,包括不设置本地存储器,并且可以以任意组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU 202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU 202会以排他的方式或几乎以排他的方式使用系统存储器。在UMA实施例中,PPU 202可被集成到桥式芯片或处理器芯片中,或作为分立芯片被提供,所述分立芯片具有经由桥式芯片或其他通信方式将PPU 202连接到系统存储器的高速链路(例如,PCI-Express)。
如上所述,并行处理子系统112可以包括任意数量的PPU 202。例如,在单个外插卡上可以提供多个PPU 202,或可以将多个外插卡连接到通信路径113,或可以将PPU 202中的一个或多个集成到桥式芯片中。多PPU系统中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同数量的处理核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行地操作这些PPU从而以高于单个PPU 202可能达到的吞吐量来处理数据。包括一个或多个PPU 202的系统可以以各种配置和形式因素来加以实现,包括桌上型电脑、膝上型电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等。
处理集群阵列概述
图3A为根据本发明一个实施例的,图2的一个PPU 202内的GPC 208的框图。每个GPC 208均可被配置为以并行方式执行大量的线程,其中术语“线程”是指针对特定的一组输入数据执行的特定程序的实例。在一些实施例中,使用单指令多数据(SIMD)指令发送技术来支持大量线程的并行执行,而无需提供多个独立的指令单元。在其他实施例中,采用单指令多线程(SIMT)技术,使用被配置为发送指令到每个GPC 208内一组处理引擎的公共指令单元,来支持大量通常同步化的线程的并行执行。与其中所有处理引擎一般都执行相同指令的SIMD执行机制不同,SIMT执行允许不同线程更容易地跟随(follow)通过给定线程程序的发散的执行路径。本技术领域的技术人员应该理解,SIMD处理机制代表SIMT处理机制的一个功能子集。
基元分布单元200经由交叉开关单元210分布处理任务至GPC 208内的每个TPC 310。具体地,基元分布单元200分布基元用于由TPC 310进行对象空间(几何)处理。每个GPC 208内的管线管理器305分布对象空间处理任务至每个TPC 310内的串流(streaming)多处理器。管线管理器305也可被配置为控制工作分布交叉开关接口330,以分布状态参数和命令至TPC 310用于对象空间处理和屏幕空间处理。
在一个实施例中,每个GPC 208均包括M个TPC 310,其中M≥1,每个TPC 310均被配置为处理一个或多个线程组。另外,如本技术领域所知,有利地,每个TPC 310包括相同的一组可被管线化的功能执行单元(例如,算术逻辑单元和加载-存储单元等等),以允许新的指令在前一个指令完成之前发送。可以提供功能执行单元的任意组合。在一个实施例中,这些功能单元支持各种操作,包括整数和浮点算法(例如,加法和乘法)、比较运算、布尔运算(AND、OR、XOR)、移位(bit-shifting)以及各种代数函数(例如,平面插值、三角、指数和对数函数等)的计算;并且相同的功能单元硬件可对执行不同操作起到杠杆作用。
传送到特定GPC 208的一系列指令构成线程,如本文前面所定义的,并且跨TPC 310内并行处理引擎(未示出)所并发执行的一定数量的线程的集合在本文中被称作“卷绕包(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,该组的每个线程被分配给TPC 310内的不同处理引擎。线程组可以包括比TPC 310内处理引擎的数量更少的线程,在这种情况下,在正在处理该线程组的周期期间,一些处理引擎将处于空闲状态。线程组也可以包括比TPC 310内处理引擎的数量更多的线程,在这种情况下,将在多个时钟周期进行处理。因为每个TPC 310均能并发地支持多达G个线程组,所以在任意给定的时间,GPC 208中都可以执行多达G×M个线程组。
另外,在TPC 310内,多个相关的线程组可同时处于激活状态(处于不同执行阶段)。这种线程组的集合在本文中被称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m×k,其中k是线程组中并发执行的线程的数量,并且一般是TPC 310内并行处理引擎的数量的整数倍,m是TPC 310内同时处于激活状态的线程组的数量。CTA的大小通常由编程人员和CTA可用的硬件资源例如存储器或寄存器的容量决定。
每个TPC 310均包含L1高速缓存335或者使用在用于执行加载和存储操作的TPC 310之外的对应的L1高速缓存中的空间。每个TPC 310也有权访问分区单元215内的L2高速缓存,所述分区单元215在所有GPC208之间被共享,并且可用于将在对象空间基元处理期间所产生的数据传送至TPC 310,以执行屏幕空间基元处理。最后,TPC 310也有权访问片外“全局”存储器,该存储器可以包括例如并行处理存储器204和/或系统存储器104。应予以理解的是,PPU 202外部的任何存储器都可被用作全局存储器。此外,L1.5高速缓存可被包括在GPC 208内,被配置为接收和保持由TPC 310请求的经由存储器接口从存储器获取的数据,包括指令、统一数据和常数数据,并且提供被请求的数据至TPC 310。在GPC 208中具有多个TPC 310的实施例受益地共享被高速缓存在L1.5高速缓存中的共同指令和数据。
每个GPC 208均包括网络接口328,其被配置为映射虚拟地址到物理地址。在其他实施例中,虚拟地址到物理地址的映射可在存储器接口214中执行。一组页表条目(PTE)被用于映射虚拟地址到像素块(tile)的物理地址和可选地高速缓存线索引(cache line index)的物理地址。地址转译后备缓冲区(translation lookaside buffer,TLB)或高速缓存可以驻留在TPC310或L1高速缓存335或GPC 208内。处理物理地址以分布表面数据访问位置,以允许在分区单元之间高效的请求交叉。所述高速缓存线索引可被用于确定对高速缓存线的请求是否命中或者未命中。
GPC 208可被配置为使每个TPC 310均包括纹理单元315,用于执行纹理映射操作,例如确定纹理采样位置、读取纹理数据以及过滤纹理数据。纹理数据从纹理L1高速缓存或者在一些实施例中从TPC 310内的L1高速缓存335读取,以及当需要的时候从L2高速缓存、并行处理存储器204或系统存储器104获取。
如前所述,TPC 310接收基元的批次(batch)并执行对象空间处理。每个TPC 310均输出对象空间处理后的基元描述符的流到网络分布交叉开关接口330,以便经由网络分布交叉开关结构334将对象空间处理后的基元描述符重新分布到一个或多个GPC 208用于屏幕空间处理。基元描述符包括基元类型(三角形带、三角形网格、线等等)、标记(flag)、顶点的索引。对象空间处理包括一个或多个顶点着色、曲面细分着色以及几何着色。屏幕空间处理为基元的光栅化,并且可包括一个或多个扫描转换、着色、深度/模版(stencil)操作以及混色。TPC 310也可输出对象空间处理后的基元数据,即顶点属性,用于经由交叉开关单元210存储在L2高速缓存、并行处理存储器204或系统存储器104中。
preROP(pre-raster operation,预光栅化操作)324被配置为从TPC 310接收数据(屏幕空间处理后的基元),将数据引向分区单元215中的ROP单元并执行对色彩混合的优化、组织像素色彩数据以及执行地址转译。
应该理解,本文所描述的核心架构是示例性的,可以对其进行各种变形和修改。GPC 208内可以包括任意数量的处理单元例如TPC 310、建立单元321、光栅化器322或者preROP 324。此外,虽然只示出了一个GPC208,但PPU 202可以包括任意数量的GPC 208,这些GPC 208最好功能上彼此相似,从而执行行为不依赖于哪个GPC 208接收到特定处理任务。此外,每个GPC 208最好使用单独的且各异的处理引擎、L1高速缓存等,独立于其他GPC 208操作。
分布式对象空间处理
应用程序经由主机接口206串行地提供图形基元到并行处理子系统112。图形基元可以是索引列表的形式,被存储于存储器中。通过主机接口206串行地发送渲染“绘制调用(drawcall)”,并且每个绘制调用可引用大量将被渲染的基元列表。重要的设计考虑是分布基元至TPC 310用于对象空间处理的粒度。为了最佳的负载平衡,理想的是至TPC 310的单个基元的细粒度(fine-grained)分布。然而,由于基元通常被编码为索引后的三角形网格或三角形带,具有在多个三角形中共享的顶点,因此最好以多基元批次分布基元,以使得共享顶点的三角形通常在相同的批次中。
在一些实施例中,基元分布单元200读取包含相关联的顶点缓冲区中的顶点的索引的缓冲区。索引隐含地定义基元,并指向存储在顶点缓冲区中的顶点数据。基元分布单元200将由顶点索引表示的基元分组为若干批次,用于分布至TPC 310。批次对表示为一组顶点索引和基元拓扑信息的大量的依次的基元,例如引用顶点索引组中的索引的基元(点、线、三角形或曲面元)列表,进行编码。批次可包括32个顶点指针,该指针数量足够大以利于顶点的重新使用,但足够小以在最小化需要用来存储用于处理的基元的缓冲区的同时,平衡跨TPC 310的并行几何处理负载。批次可以循环的方式分配至系统中的TPC 310,例如,第一GPC 208中的TPC 310、第二GPC 208中的TPC 310、依次类推,或者每个GPC 208内的第一TPC310、每个GPC 208中的第二TPC 310、依次类推,或者基于对象空间基元处理的当前负载条件而分配到系统内的TPC 310。对象空间基元处理包含几何处理,所述几何处理包括世界到屏幕空间(world-to-screen-space)变换、剔除(culling)、裁剪(clipping)以及顶点着色操作。由TPC 310执行的并行对象空间基元处理的结果是图形基元描述符的批次,其对定义点、线和三角形的变换后的顶点编码。基元描述符包含关于几何基元的对渲染由基元所覆盖的像素而言必要的信息:基元的类型(点、线、三角形)、指向存储顶点属性的缓冲区的顶点索引、控制标记。
将顶点属性经由网络接口328从TPC 310传送到分布式L2高速缓存。然后,顶点属性可由被配置为执行对象空间处理后基元的光栅化的任何TPC 310读取。
分布式屏幕空间处理
基元建立以及光栅化也在GPC 208上并行进行。每个GPC 208均包括建立321、光栅化器322以及preROP 324。每个GPC 208均负责处理一部分屏幕空间。理想的是在屏幕空间各部分中分布光栅化(rasterization)以使着色、纹理化和帧缓冲区访问具有局部性,并且每个部分中的基元的光栅化可并行且独立地执行。
基于图像中受每个对象空间处理后的基元所影响的部分,由工作分布交叉开关接口330将对象空间处理后的基元描述符通过工作分布交叉开关结构路由到GPC 208。为了实现这一任务,将称为渲染目标的图像细分为小的“屏幕像素块”,并且将屏幕像素块划分为覆盖图像的非重叠的组。将不同的GPC 208分配给每个屏幕像素块组。在一些实施例中,每个屏幕像素块组均包括被静态映射的16×16像素区域,并且GPC 208执行建立和光栅化,达到每时钟一个三角形。给定的GPC 208被配置为光栅化覆盖屏幕空间中分配给给定的GPC 208的部分内的至少一个像素的每个基元。大的基元可由每个GPC 208光栅化,而小的基元仅由一个GPC 208光栅化。
建立321将用于对象空间处理后基元的边缘和深度平面方程转发到光栅化器322。当内插其他属性时,建立321在缓冲区中存储部分平面方程用于帧着色器的后续检索。与每个建立321相关联的光栅化器322根据所述边缘方程在基元边界框内迭代,以识别具有采样覆盖的像素块。光栅化器322包含宏定位台(coarse stage),其识别可能包含采样覆盖的大像素块,以及精定位台(fine stage),其比对边缘方程测试采样位置。光栅化器322使用GPC屏幕像素块映射的知识,以立刻(in zero time)跳过分配给其他GPC 208处理的像素块。在一些实施例中,在两个光栅化器定位台之间包括有分级Z单元,所述分级Z单元可快速地丢弃已知是闭塞几何的原因的像素块。
工作分布交叉开关接口330和工作分布交叉开关结构334的组合实现在GPC 208之间路由基元数据的分布式拣选(sorting)结构。工作分布交叉开关接口330经由工作分布交叉开关结构334,从执行对象空间处理的TPC 310将对象空间处理后的基元描述符的并行流路由到并行的、有序的基元描述符的流中,用于执行屏幕空间处理的GPC 208。为了支持多个GPC208,将多个工作分布交叉开关接口330通过工作分布交叉开关结构334耦合在一起。经由工作分布交叉开关结构334,每个工作分布交叉开关接口330从执行对象空间处理的每个TPC 310接收对象空间处理后的基元描述符的流,并且路由每个对象空间处理后的基元描述符到一个或多个GPC208用于屏幕空间的基元处理。然后,每个工作分布交叉开关接口330重排序由将执行屏幕空间处理的每个GPC 208所接收的基元描述符,以和API基元排序相匹配。由于不是每个GPC 208均对每一个基元进行处理,因此基元描述符流中由GPC 208重排序的一些将不会包括在API基元排序中出现的每一个基元描述符。当在重排序的流中出现的基元描述符的顺序与出现在API基元排序中的相同的基元描述符的顺序相同时,认为被重排序的流与API基元排序相匹配。
虽然对象空间处理后的基元由工作分布交叉开关接口330重排序到前往每个光栅化器322的API基元排序中,但基元的实际处理被物理地分布。也就是,在基元通过所有基元都流过的基元分布单元200之后,不存在单个点。重要的是,基元分布的这种分布式实现允许系统每时钟分布多个基元,GPC 208内的每个光栅化器322达到每时钟基元的峰值速率。每个建立321接收可能会影响一个或多个它的屏幕像素块的处理后的基元流。光栅化器322继续为分配给它们的像素块组生成采样数据或像素。每个光栅化器322彼此独立地操作。由于每个光栅化器322对其自己单独的图像子集进行操作,所以光栅化器322不需要彼此保持同步,并且因此互不干扰。
由光栅化器322和TPC 310所产生的光栅化的并且之后被着色的片段数据由管线管理器305收集,并被输出到preROP 324。preROP 324被配置为从TPC 310接收着色后的片段数据(屏幕空间处理后的基元),指引着色后的片段数据到分区单元215内的ROP单元,并执行对色彩混合的优化、组织像素色彩数据以及执行地址转译。
总体的基元处理速率可达到每时钟C个三角形,其中C为GPC 208的数量。因此,基元描述符需要由工作分布交叉开关接口330通过工作分布交叉开关结构334而以每时钟C个三角形的汇聚速率(aggregaterate)——C*单个GPC 208的输入速率——传送到GPC 208。因为并行处理子系统112可扩展,所以通过在并行处理子系统112中增加GPC 208和/或TPC 310的数量可构建具有较高性能的系统。
图3B是根据本发明一个实施例的,图2的一个PPU内的分区单元215的框图。如图所示,分区单元215包括L2高速缓存350、帧缓冲区(FB)DRAM接口355和光栅操作单元(ROP)360。L2高速缓存350为读/写高速缓存,其被配置为对从交叉开关单元210和ROP 360所接收的操作进行加载和存储。由L2高速缓存350将读取未命中以及紧急回写请求输出给FB DRAM接口355用于处理。还将脏的更新(dirty update)发送给FB 355用于伺机处理。FB 355与DRAM 220直接接口,输出读和写请求并且接收从DRAM 220读取的数据。
在图形应用程序中,ROP 360是处理单元,其执行光栅操作,例如模版、z测试、混色等,并且输出像素数据作为处理后图形数据,用于存储在图形存储器中。在本发明的一些实施例中,ROP 360被包括在每个GPC208而非分区单元215中,并且像素读和写请求而不是像素片段数据通过交叉开关单元210进行传输。
处理后的图形数据可显示在显示设备110上,或者经路由以用于由CPU 102或由并行处理子系统112中的一个处理实体来进行进一步的处理。每个分区单元215均包括ROP 360以便对光栅操作进行分布处理。在一些实施例中,ROP 360可配置为对被写入存储器中z数据或者色彩数据进行压缩,以及对从存储器中读取出来的z数据或者色彩数据进行解压缩。
本领域技术人员将会理解:在图1、2、3A和3B中描述的架构不以任何方式对本发明的范围进行限制,而且在此教导的技术在不脱离本发明的范围的情况下,可在任何被适当设置的处理单元上实现,该处理单元包括但并非限于,一个或多个CPU、一个或多个多核CPU、一个或多个PPU 202、一个或多个GPC 208、一个或多个图形或者特殊用途处理单元等等。
图3C为根据本发明一个实施例的,包括图3A的工作分布交叉开关接口330的部分GPC 208的框图。工作分布单元330包括一组WWDX 340,每个WWDX 340均耦合到一个TPC 310以从GPC 208内的TPC 310接收对象空间基元描述符、基元边界框、属性缓冲区地址和批次标记的终点(end)。TPC 310为每个基元描述符计算边界框,并且接收边界框的WWDX 340将边界框与GPC 208的屏幕空间的分片式(tiled)映射相比较。基元边界框包含最小和最大屏幕空间维度X、Y,用于完全包含该基元的最小矩形。基于基元边界框尺寸和位置,WWDX 340确定哪些GPC 208可能需要通过贯穿(intersect)具有该边界框的每个GPC 208的屏幕像素块组来处理基元。WWDX 340在GPC(分布)掩码中设置与应该接收基元的具体GPC 208相对应的比特位。通常,小的基元(即,仅影响一个或几个像素的基元)将仅影响一个屏幕像素块,因此将被发送到单个GPC 208。影响几个屏幕像素块的较大基元将被发送到多个GPC 208。在极限情况下,对于小的基元,当有C个GPC 208时,系统可并发地处理C个不同的基元。
TPC 310按API基元顺序处理并输出用于由具体TPC 310处理的单个批次的基元描述符。然而,不同的TPC 310可按不同的速率对批次进行处理,从而使批次按照在批次级别(batch level)上与API基元顺序不匹配的顺序从TPC 310输出。因此,汇聚单元345重排序从WWDX 340接收的每个批次,以和API基元顺序相匹配。
汇聚单元345被配置为合并由WWDX 340输出的两个或更多个基元描述符流,并产生由工作分布交叉开关结构334路由到GPC 208用于对象空间处理的单个基元描述符流。在一些实施例中,汇聚单元345被省略,多个基元描述符流由WWDX 340组合并输出到工作分布交叉开关结构334,或者多个基元描述符流被直接(被组合或不被组合)输出到工作分布交叉开关单元334。可采用多种方式执行多个流的组合,无需考虑匹配API基元顺序。
由管线管理器305将API基元顺序信息提供给汇聚单元345。当基元分布单元200经由管线管理器305发送基元批次到TPC 310时,管线管理器305输出接收了所述批次的TPC 310的依次顺序,使得在每个工作分布交叉开关接口330内的汇聚单元345可重排序对象空间基元,以和API基元顺序相匹配,并产生有序的基元流用于输出到GPC 208进行屏幕空间处理。管线管理器305也可接收从基元分布单元200接收了批次的GPC 208的依次顺序,并将GPC 208的依次顺序输出至基元排序单元342,从而每个工作分布交叉开关接口330内的汇聚单元345和/或SWDX 346可重排序由每个GPC 208接收的对象空间基元,以和API基元顺序相匹配,并产生有序的基元流用于输出到建立321进行屏幕空间处理。
汇聚单元345通过从与当前TPC标识相对应的TPC 310接受基元描述符(基于由管线管理器305提供的依次顺序),对输出基元描述符执行重排序,直到在基元描述符流中检测到批次标记的终点。批次标记的终点可以是单个比特,其被设置在每个批次中的最后的基元描述符中,并且在该批次中的任何其他基元描述符中清除。当检测到批次标记的终点时,依次顺序中的下一个TPC标识符成为当前TPC标识符。汇聚单元345输出基于TPC标识符被重排序的对象空间处理后基元描述符的流。每个单独的GPC208所输出的流与API基元顺序相匹配。但每个接收GPC 208(配置为执行屏幕空间处理)可从GPC 208(配置为执行对象空间处理)所传送的一个或多个输出流接收基元描述符。在工作分布交叉开关结构334的接收侧,GPC标识符的序列可由每个SWDX 346来使用,以重排序从不同GPC 208接收的批次,从而使每个建立321接收用于光栅化的对象空间处理后基元描述符的有序列表。
由汇聚单元345通过专用的工作分布交叉开关结构334输出的对象空间处理后基元的输出有序流包括每个基元的以下基元数据:属性缓冲区地址、基元描述符、GPC标识符、TPC标识符和批次标记的终点。GPC标识符指出执行了对象空间处理的GPC 208。同样,TPC标识符指出执行了对象空间处理的TPC 310。属性缓冲区地址为指向存储基元的属性数据的存储器中的位置的指针。当很多属性与每个基元相关联时,有利的是,通过工作分布交叉开关接口330和工作分布交叉开关结构(fabric)334携带指向属性数据的指针而不是实际的属性数据。当WWDX 340直接输出多个基元流到工作分布交叉开关结构334时,即汇聚单元345被省略时,基元流包括GPC掩码、TPC标识符、GPC标识符、属性缓冲区地址、基元描述符和批次标记的终点。
工作分布交叉开关结构334根据GPC掩码将一个基元的基元数据从配置为执行对象空间处理的GPC 208路由到配置为执行屏幕空间处理的一个或多个GPC 208。在一些实施例中,在单个时钟周期根据GPC掩码将每个基元广播(broadcast)到每个GPC 208。在其他实施例中,在时钟周期内仅将基元输出到一个GPC 208,因此在单独的时钟周期将被路由到多个GPC 208的基元输出到不同GPC 208中的每一个。工作分布交叉开关结构334可被配置为采用贷记/借记(credit/debit)方案来在GPC 208之间传送基元数据。接收GPC 208输出指示能够接受的基元数据量的贷记。当GPC208每时钟周期只能接受一个基元时,工作分布交叉开关结构334也可被配置为在被路由至相同的GPC 208的两个或更多个基元之间进行仲裁。
每个屏幕空间单元336均具有GPC重排序缓冲区344,其接收和存储由工作分布交叉开关结构334输出的基元数据(不包括GPC掩码)。GPC重排序缓冲区可实现为多线程FIFO,用于采用每对象空间GPC 208一个线程来存储基元数据。在其他实施例中,独立的FIFO可被用于每个对象空间GPC 208。当基元经由工作分布交叉开关结构334被接收时,基元数据基于GPC标识符而置于适当的线程中。在省略汇聚单元345的实施例中,当基元数据经由工作分布交叉开关结构334被接收时,基元数据基于TPC标识符(以及GPC标识符,如果TPC标识符跨不同的GPC 208不是唯一的)而置于适当的线程中。
SWDX 346按照由管线管理器305所提供的依次的GPC标识符顺序所指定的顺序从多线程的FIFO去除基元描述符、属性缓冲区地址和批次标记的终点,并将基元描述符和属性缓冲区地址入栈(push)到输出FIFO中。SWDX 346从接收了基元数据批次的第一GPC的FIFO线程开始读取基元描述符、属性缓冲区地址和批次标记的终点。当SWDX 346看见设置在该FIFO线程中的批次标记的终点时,SWDX 346从接收了基元批次用于对象空间处理的下一个GPC 208的FIFO线程开始读取,以此类推。因此,SWDX 346按照API基元顺序将基元描述符和属性缓冲区地址从多线程FIFO当中出栈(pull),并按照API基元顺序将其入栈到SWDX 346内的输出FIFO中。各个GPC 208中的建立单元321从输出FIFO弹出基元描述符和属性缓冲区地址用于屏幕空间处理。输出FIFO应该足够深以使得,当将很多基元发送到相同的建立321时,该建立321不至于匮乏。在一些实施例中,每个光栅化器322可处理达到每时钟一个基元,与由建立单元321所输出的基元描述符的速率相匹配。
屏幕像素块组至光栅化器的分配分布了光栅化的负载。屏幕像素块为渲染目标内的N×M采样矩形。对像素块尺寸的选择为负载均衡与总开销之间的折衷,其中负载均衡利用较小屏幕像素块来提高,而总开销利用较大的屏幕像素块来提高。因为像素块尺寸太小或缩减的纹理区域(locality),因此总开销可采用需要由多个GPC 208处理的基元的形式。在一个实施例中,像素尺寸为16×16像素。将屏幕像素块以交错的方式分配给光栅化器322,来平衡跨光栅化器322的工作负载。例如,渲染目标的左上角像素块被分配给与数字0、1、2、3相对应的四个光栅化器322,按以下方式:
第一像素块行:0 1 2 3 0 1 2 3 0 1 2 3…
第二像素块行:1 2 3 0 1 2 3 0 1 2 3 0…
第三像素块行:2 3 0 1 2 3 0 1 2 3 0 1…
第四像素块行:3 0 1 2 3 0 1 2 3 0 1 2…
像素块分配的准确模式(pattern)可由表指定或者根据算法计算,并且可在不同系统之间变化。如上所示,一个实施例使用倾斜的、交错的分配,具有属性:如果基元边界框为至少C(C=光栅化器322的数量)个屏幕像素块宽或高,则基元必须被分布到所有光栅化器322。这一特征可被用于简化GPC掩码的计算。
图形管线架构
图4为根据本发明一个实施例的,图2的一个或多个PPU可经配置以实现的图形处理管线400的示意图。例如,TPC 310中的一个可被配置为执行片段处理单元460和几何处理单元425中的一个或多个的功能。基元分布器420、光栅化器455和光栅操作单元465也可由GPC 208和相应的分区单元215内的其他处理引擎来执行。可替代地,图形处理管线400可利用用于一个或多个功能的专用处理单元来实现。
用于高阶表面、基元等的顶点数据可被存储在L1高速缓存335、并行处理存储器204或系统存储器104中,并且需要时可被访问以渲染基元。基元分布器420的功能可由基元分布单元200执行。基元分布器420接收指向存储在存储器中的基元索引列表的指针。这些索引列表中的条目(entry)指向顶点属性列表(顶点缓冲区),其也被存储在存储器中。由于基元被紧凑地存储,并且很多基元可在单个绘制调用中被传到基元分布器420,因此索引后的基元列表和基元缓冲区是输送基元至基元管线400的最高效的方式。由于前端212可被配置为在顶点缓冲区中存储遗留内联的(legacy inline)和立即模式的顶点,因此基元汇编器420仅需要处理这种高效型的基元输入数据,即基元索引列表。在其他实施例中,代替接收指向基元索引列表的指针,基元分布器420可接收顶点数据。
在一些实施例中,GPC 208被配置为在几何处理之前执行曲面细分处理。在这些实施例中,基元分布器420将用于曲面细分处理的基元批次分布至多个TPC 310,并且产生曲面细分后的基元批次的流。通过利用与用于执行曲面细分的TPC 208相同的TPC 208来执行对象空间处理,可在基元的对象空间处理之前重存储API基元排序。可替代地,可在曲面细分之后将基元批次重排序以与API基元顺序相匹配,使得用于对象空间处理的基元批次可按照API基元顺序被生成和分布。
基元分布器420将索引列表分成根据J个顶点和K个基元指定的独立的(self-contained)索引批次以使得,带中在前两个顶点之后的每个顶点均指定一个新的三角形。在一些实施例中,J为32、K为30,并且根据基元的数量和类型,批次可占用1到4个32B数据包,并包含以下信息:顶点缓冲区中的顶点的索引和拓扑信息(该批次中的哪些顶点包括每个基元)。重要的是,基元分布器420完全利用基元索引来工作——它不接触顶点数据本身。顶点数据由分配用于顶点着色的TPC 310来随后获取。
在几何处理与光栅化之间传送的大部分数据(经由索引)为顶点属性。这些顶点属性是为每个顶点计算的参数,例如x、y、z位置、纹理坐标、顶点色彩和其他着色器参数。光栅化器需要一些参数例如x、y、z(位置)来确定基元覆盖和深度值。片段着色器需要其他属性,作为内插的值。属性的数量和类型取决于顶点和片段着色器。
顶点属性需要从它们由执行对象空间处理的TPC 310计算出时起,一直被缓存到它们为建立322或片段处理单元460所需要为止。需要被缓存的数据量是高度可变的,取决于每顶点属性的数量和类型。对于全屏基元,数据量可接近于零,而在高基元速率的情况下,数据量可以非常大。当大量的小基元落到单个屏幕像素块上时,每GPC 208的数据量也可是高度可变的。
由于这些潜在的大量的以及高度可变的缓冲需求,将顶点属性存储在L2高速缓存350中是有利的。L2高速缓存350为大的、池化的资源,其可被用于很多目的:高速缓存纹理、高速缓存渲染后的像素以及高速缓存基元属性。在高的三角形速率的情况下,需要较大量的属性缓冲,因此大部分L2高速缓存350可用于高速缓存属性数据,而非纹理数据。当针对属性缓冲的需求较低时,L2高速缓存350可主要用于高速缓存纹理数据。
执行对象空间处理的每个TPC 310均具备固定尺寸的线性缓冲区,该缓冲区可被虚拟地寻址并可高速缓存。被用于访问这些线性缓存区的地址卷绕包,因此线性缓冲区实际上为循环的FIFO(先入先出)缓冲区。当TPC 310将顶点属性串流入循环缓冲区时,TPC 310为写入工作分布交叉开关接口330的条目提供索引,其可被传送至执行屏幕空间处理的GPC208。需要读循环缓冲区条目(CBE)的GPC 208在两点上进行:建立以及片段着色器内插。GPC 208不需要的条目被跳过——不由GPC 208读取,但其他条目可由多个GPC 208读取。
由于对循环缓冲区使用虚拟地址,所以可以总是分配整个循环缓冲区,但只有存储有效数据的高速缓存线需要驻留在L2高速缓存350中。当CBE被写到L2高速缓存350时,高速缓存线可被标记为“不驱逐(no-evict)”状态,从而存储属性数据的高速缓存线将不会被从L2高速缓存350转储清除(flush)。工作分布交叉开关接口330也有当GPC 208不再需要CBE时释放CBE的任务。为了实现这一点,光栅化器322通过屏幕空间处理来跟踪CBE,并且当CBE可被释放时,发信号给工作分布交叉开关接口330。工作分布交叉开关接口330保持每CBE计数,该计数是关于有多少个屏幕空间管线(其中屏幕空间管线包括建立321、光栅化器322、preROP 324和TPC 310)正在使用CBE。当对于具体CBE的计数为零时,工作分布交叉开关接口330可释放该CBE。
几何处理单元425是被配置以执行几何着色器程序的可编程执行单元,按几何着色器程序的指定,变换从基元汇编器420接收的图形基元。例如,几何处理单元425可被编程以细分图形基元为一个或多个新的图形基元,并计算被用于光栅化新图形基元的参数,如平面方程系数。
在一些实施例中,几何处理单元425也可增加或删除几何流中的元素。几何处理单元425输出指定新的图形基元的参数和顶点至视窗缩放-剔除-裁剪单元450。几何处理单元425可读取存储在并行处理存储器204或系统存储器104中的数据,在处理几何数据中使用。视窗缩放-剔除-裁剪单元450执行裁剪、剔除和视窗缩放,并输出处理后的图形基元到光栅化器455。
光栅化器455扫描转换新的图形基元,并输出片段和覆盖数据至片段处理单元460。此外,光栅化器455可被配置为执行z剔除和其他基于z的优化。
片段处理单元460是被配置以执行片段着色器程序的可编程执行单元,按片段着色器程序的指定,变换从光栅化器455接收的片段。例如,片段处理单元460可被编程为执行例如透视校正、纹理映射、着色、混色等操作,来产生输出至光栅化器操作单元465的着色后的片段。片段处理单元460可读取存储在并行处理存储器204或系统存储器104中的数据,以在处理片段数据中使用。可以像素、采样或其他粒度对片段着色,取决于编程后的采样速率。
光栅操作单元465是执行例如模版、z测试、混色等光栅化操作的处理单元,并输出像素数据作为处理后的图形数据用于存储在图形存储器中。
处理后的图形数据可存储在图形存储器中,例如并行处理存储器204和/或系统存储器104中,用于显示在显示设备110上或者由CPU 102或并行处理子系统112进一步处理。在本发明的一些实施例中,光栅操作单元465被配置为压缩被写入存储器中的z或色彩数据,并解压缩从存储器读出的z和色彩数据。
图5为根据本发明一个实施例的,用于在维持API基元顺序的同时渲染基元的方法步骤的流程图。虽然结合图1、2、3A、3B和3C来描述图5的方法步骤,但本技术领域的技术人员将理解,配置为以任何顺序执行本方法步骤的任何系统都在本发明的范围内。
在步骤500,由基元分布单元200按API基元顺序接收基元。在步骤505,基元分布单元200生成基元的基元批次,用于由TPC 310进行并行对象空间(几何)处理。对每个基元批次,TPC 310接收顶点缓冲区的属性缓冲区地址和基元描述符,每个基元描述符包括基元类型(三角形带、三角形网格、线等等)、标记、顶点的索引。TPC 310利用属性缓冲区地址和索引来计算顶点属性的地址。TPC 310经由L2高速缓存350和交叉开关单元210从外部存储器加载顶点属性。不管涉及该顶点的批次中基元的数量多少,TPC 310每批次仅获取属性一次。一些顶点可被在不同TPC 310上处理的多个批次中的基元引用。顶点数据将由每个TPC 310通过交叉开关单元210单独获取,但L2高速缓存350通常将保留来自第一引用的顶点数据,因此,顶点数据通常仅从外部存储器获取一次。
在步骤510,基元分布单元200分布基元批次,用于由TPC 310进行并行几何处理。在步骤515,TPC 310对基元执行对象空间处理,以产生对象空间处理后的基元的流。处理一个顶点的时间不依赖于在屏幕上出现的基元有多大。通过将几何处理分布在顶点批次中,处理负载跨GPC 208分布。
在步骤520,TPC 310经由网络接口328将通过对基元进行对象空间处理所产生的顶点属性写入L2高速缓存350的循环缓冲区中。在一些实施例中,TPC 310也计算每个非剔除的(non-culled)基元的边界框,并输出具有基元描述符和属性缓冲区地址的边界框至工作分布交叉开关接口330内的相应的WWDX 340。
在步骤525,为每个基元计算GPC掩码,以基于映射到GPC 208的屏幕像素块来分类每个基元。在步骤530,由工作分布交叉开关接口330通过工作分布交叉开关结构334将基元路由至由GPC掩码所指示的GPC208,用于屏幕空间处理。注意到,单个GPC 208内的对象空间处理后基元的多个流在被GPC 208输出前,可由聚合单元345合并。在这种情况下,汇聚单元345将基元重排序,以和API基元顺序相匹配。
在步骤535,由GPC 208中的SWDX 346重排序基元以和API基元顺序相匹配。在步骤540,由建立321和TPC 310使用和每个基元描述符一起接收到的属性缓冲区地址来读取用于基元的屏幕空间处理所需的顶点属性。
在步骤545,由GPC 208对重排序基元执行并行屏幕空间处理。建立单元321将顶点属性转换为描述多边形边缘、深度值以及将被内插的其他参数的平面方程。建立321也计算用于光栅化器322的基元边界框和初始化参数,并执行各种剔除操作,例如背面和零区域剔除。建立321按API基元顺序从工作分布交叉开关接口330内的SWDX 346接收基元描述符。将每个基元描述符与属性缓冲区地址相关联,即,与指向存储在L2高速缓存350中的循环缓冲区的处理后顶点属性数据的指针相关联。建立321请求x、y、z位置属性,该属性对给定类型的所有基元是通用的,不管附加顶点属性的数量。当这些属性经由交叉330从L2高速缓存被返回时,建立321为基元计算边缘和部分平面方程。利用建立321所产生的部分平面方程,引擎(未示出)计算用于每个属性的最终的平面方程。引擎将计算后的最终的平面方程加载到平面方程RAM中,该RAM可由每个TPC310内的由串流多处理器所执行的片段着色器程序读取。在步骤545,光栅化器322根据边缘方程的指导在基元边界框内迭代,以识别具有采用覆盖的平面像素块。光栅化器322光栅化位于GPC 208所负责的屏幕空间像素块内的基元像素。有利地,光栅化器322跳过被分配给其他光栅化器322的屏幕像素块。在一些实施例中,光栅化器322被配置为立刻跳过屏幕像素块。
在步骤545,TPC 310也执行并行片段着色器。在一些实施例中,属性当由片段着色器请求时才被评价,所述片段着色器允许在像素内的任意要求的x、y位置执行内插,并且对每个像素不需要在相同的位置。当由片段着色器执行内插指令时,从平面方程RAM中读取相应的平面方程,在指定的(x,y)位置对其进行评价,并执行除以w的操作。在任意要求的(x,y)采样位置上,给定的属性可在片段着色器程序内被引用任意次数。没被请求的属性不进行评价。
片段着色器可执行纹理、数学或其他操作、读或写寄存器、以及读或写全局存储器。片段着色器将其结果存储在色彩(和可选地z)输出寄存器中。着色器输出逻辑从着色器输出寄存器将最终色彩出栈,并通过交叉开关单元210将其发送到与帧缓冲区分区相关联的ROP 360。在步骤550,输出并存储图像的光栅化像素。
交叉开关单元210不需要在所有数据包之间维持排序。交叉开关单元210不需要保证从具体GPC 208至具体ROP 360的所有数据按顺序被传送,该传送可使用确定的路由或本技术领域已知的其他方法。
并行渲染实现每系统时钟多个基元的渲染。为了实现每系统时钟多个基元的渲染,将对象空间基元处理负载(几何处理)跨多个处理内核分布。将对象空间处理后的基元跨工作分布交叉开关进行分布以用于并行光栅化。由并行光栅化器将对象空间处理后的基元重排序,以在基元被光栅化之前恢复API基元顺序。
本发明的一个实施例可以被实现为与计算机系统一同使用的程序产品。程序产品的程序定义实施例的功能(包括在此描述的方法),并且可被包含在各种各样的计算机可读存储介质内。说明性的计算机可读存储介质包括但不限于:(i)信息在其上永久保存的非可写存储介质(例如,计算机内的只读存储设备,诸如对CD-ROM驱动器可读的CD-ROM盘、闪存、ROM芯片或者任意类型的固态非易失性半导体存储器);以及(ii)其上存储有可改变的信息的可写存储介质(例如,软盘驱动器内的软盘或硬盘驱动器、或者任意类型的固态随机存取半导体存储器)。
以上已经参考具体实施例对本发明进行了描述。然而,本技术领域的技术人员应该理解,可以进行各种修改和变化,而不脱离如所附权利要求所阐释的本发明的较宽精神和范围。相应地,前面的描述和附图应被视为是示例性的而非限制性的。

Claims (9)

1.一种用于并行地渲染基元的方法,所述方法包括:
按第一顺序接收基元,所述基元被编码为顶点索引列表;
分布所述基元用于在对象空间中进行并行处理以产生多个流,每个流均包括表示单独的基元的对象空间处理后基元描述符;
基于屏幕空间位置对所述对象空间处理后基元描述符的所述多个流进行路由,以产生表示贯穿屏幕的第一部分的基元的处理后基元描述符的第一流和表示贯穿所述屏幕的第二部分的基元的处理后基元描述符的第二流;
重排序所述第一流中的对象空间处理后基元描述符,以匹配所述第一顺序,来产生对象空间处理后基元描述符的重排序后的第一流;
重排序所述第二流中的对象空间处理后基元描述符,以匹配所述第一顺序,来产生对象空间处理后基元描述符的重排序后的第二流;以及
并行地光栅化贯穿所述屏幕的所述第一部分并由对象空间处理后基元描述符的所述第一流所表示的基元、以及贯穿所述屏幕的所述第二部分并由对象空间处理后基元描述符的所述第二流所表示的基元,以产生图像的光栅化后的像素。
2.一种用于并行地渲染基元的系统,所述系统包括:
用于按第一顺序接收基元的模块,所述基元被编码为顶点索引列表;
用于分布表示所述基元的基元描述符用于在对象空间中进行并行处理以产生多个流的模块,每个流均包括对象空间处理后基元描述符;
用于基于屏幕空间位置对所述对象空间处理后基元描述符的所述多个流进行路由,以产生表示贯穿屏幕的第一部分的基元的处理后基元描述符的第一流和表示贯穿所述屏幕的第二部分的基元的处理后基元描述符的第二流的模块;
用于重排序所述第一流中的对象空间处理后基元描述符,以匹配所述第一顺序,来产生所述对象空间处理后基元描述符的重排序后的第一流的模块;
用于重排序所述第二流中的对象空间处理后基元描述符,以匹配所述第一顺序,来产生所述对象空间处理后基元描述符的重排序后的第二流的模块;以及
用于并行地光栅化贯穿所述屏幕的所述第一部分并由对象空间处理后基元描述符的所述第一流所表示的基元、以及贯穿所述屏幕的所述第二部分并由对象空间处理后基元描述符的所述第二流所表示的基元,以产生图像的光栅化后的像素的模块。
3.根据权利要求2所述的系统,其中,所述系统还包括:用于将所述基元描述符分为批次的模块,其中所述批次分布用于在对象空间中进行并行处理。
4.根据权利要求3所述的系统,其中,所述批次按循环的方式分布。
5.根据权利要求3所述的系统,其中,所述批次包含指向顶点数据的指针,并且对对象空间处理后基元描述符的所述多个流的路由传输所述指针,而不是所述顶点数据。
6.根据权利要求2所述的系统,其中,所述系统还包括:用于在对所述多个流进行路由之前,计算边界框的模块,所述边界框指示由对象空间处理后基元描述符所表示的每个基元的屏幕空间位置。
7.根据权利要求2所述的系统,其中,所述系统还包括:用于在对所述多个流进行路由之前,合并对象空间处理后基元描述符的所述流中的两个或更多个,并且重排序合并后的流中的对象空间处理后基元描述符,以匹配所述第一顺序的模块。
8.根据权利要求2所述的系统,其中,所述系统还包括:
用于将对象空间处理后基元描述符的所述第一流路由至被配置为光栅化贯穿所述屏幕的所述第一部分的部分所述基元的第一处理单元;以及
将对象空间处理后基元描述符的所述第二流路由至被配置为光栅化贯穿所述屏幕的所述第二部分的部分所述基元的第二处理单元的模块。
9.根据权利要求8所述的系统,其中,所述第一处理单元包括光栅化器,所述光栅化器被配置为,当光栅化贯穿所述屏幕的所述第一部分的部分所述基元时,跳过在所述屏幕的所述第一部分之外的分片模式的屏幕像素块。
CN201080057655.2A 2009-10-15 2010-10-13 一种保序分布式光栅化器 Active CN102667814B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/580,017 2009-10-15
US12/580,017 US8587581B2 (en) 2009-10-15 2009-10-15 Order-preserving distributed rasterizer
PCT/US2010/052561 WO2011047092A1 (en) 2009-10-15 2010-10-13 An order-preserving distributed rasterizer

Publications (2)

Publication Number Publication Date
CN102667814A CN102667814A (zh) 2012-09-12
CN102667814B true CN102667814B (zh) 2014-07-02

Family

ID=43876522

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080057655.2A Active CN102667814B (zh) 2009-10-15 2010-10-13 一种保序分布式光栅化器

Country Status (4)

Country Link
US (2) US8587581B2 (zh)
EP (1) EP2488993B1 (zh)
CN (1) CN102667814B (zh)
WO (1) WO2011047092A1 (zh)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436969B2 (en) * 2009-10-05 2016-09-06 Nvidia Corporation Time slice processing of tessellation and geometry shaders
EP2517169A4 (en) 2009-12-23 2017-10-18 Intel Corporation Image processing techniques
US8669989B2 (en) * 2010-05-19 2014-03-11 Pinebrook Imaging, Inc. Parallel image processing system
US20120019541A1 (en) * 2010-07-20 2012-01-26 Advanced Micro Devices, Inc. Multi-Primitive System
US9342322B2 (en) 2011-09-12 2016-05-17 Microsoft Technology Licensing, Llc System and method for layering using tile-based renderers
GB2497762B (en) * 2011-12-20 2018-05-23 Advanced Risc Mach Ltd Intermediate value storage within a graphics processing apparatus
US9123153B2 (en) * 2011-12-30 2015-09-01 Advanced Micro Devices, Inc. Scalable multi-primitive system
FR2996037B1 (fr) * 2012-09-24 2015-05-29 Allegorithmic Moteur hybride pour processeur central et processeur graphique
US9177351B2 (en) * 2012-10-09 2015-11-03 Qualcomm Incorporated Multi-primitive graphics rendering pipeline
US8941676B2 (en) * 2012-10-26 2015-01-27 Nvidia Corporation On-chip anti-alias resolve in a cache tiling architecture
US10032243B2 (en) * 2012-10-26 2018-07-24 Nvidia Corporation Distributed tiled caching
GB2546020B (en) * 2012-11-02 2017-08-30 Imagination Tech Ltd Method of scheduling discrete productions of geometry
US9087410B2 (en) 2013-01-17 2015-07-21 Qualcomm Incorporated Rendering graphics data using visibility information
KR102072656B1 (ko) * 2013-07-16 2020-02-03 삼성전자 주식회사 캐시를 포함하는 테셀레이션 장치, 그의 동작 방법, 및 상기 장치를 포함하는 시스템
US9659393B2 (en) * 2013-10-07 2017-05-23 Intel Corporation Selective rasterization
US9552667B2 (en) 2013-12-13 2017-01-24 Nvidia Corporation Adaptive shading in a graphics processing pipeline
US10733794B2 (en) 2013-12-13 2020-08-04 Nvidia Corporation. Adaptive shading in a graphics processing pipeline
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
US20150206596A1 (en) * 2014-01-21 2015-07-23 Nvidia Corporation Managing a ring buffer shared by multiple processing engines
US10096086B2 (en) * 2014-09-10 2018-10-09 Nvidia Corporation Enhanced anti-aliasing by varying sample patterns spatially and/or temporally
US10229468B2 (en) * 2015-06-03 2019-03-12 Intel Corporation Automated conversion of GPGPU workloads to 3D pipeline workloads
US10430989B2 (en) * 2015-11-25 2019-10-01 Nvidia Corporation Multi-pass rendering in a screen space pipeline
US9953395B2 (en) 2016-08-29 2018-04-24 Intel Corporation On-die tessellation distribution
US10062206B2 (en) * 2016-08-30 2018-08-28 Advanced Micro Devices, Inc. Parallel micropolygon rasterizers
US10049487B2 (en) * 2016-11-23 2018-08-14 Advanced Micro Devices, Inc. Identifying duplicate indices in an input index stream
KR102446865B1 (ko) * 2017-09-12 2022-09-23 삼성전자주식회사 경로 렌더링을 수행하는 그래픽 처리 장치 및 그래픽 처리 방법
TWI648604B (zh) 2017-12-27 2019-01-21 財團法人工業技術研究院 數位直接成像方法與系統、影像產生方法與電子裝置
CN110544291B (zh) * 2019-09-11 2023-05-09 珠海金山数字网络科技有限公司 一种图像渲染方法及装置
CN110570507B (zh) * 2019-09-11 2023-09-19 珠海金山数字网络科技有限公司 一种图像渲染方法及装置
US11769043B2 (en) 2019-10-25 2023-09-26 Samsung Electronics Co., Ltd. Batch size pipelined PIM accelerator for vision inference on multiple images
WO2021186034A1 (en) * 2020-03-20 2021-09-23 3Shape A/S Storage, rendering, and display of information of meshes through tessellation with serialized values
US20210398349A1 (en) * 2020-06-22 2021-12-23 Advanced Micro Devices, Inc. Fine grained replay control in binning hardware
CN117409088A (zh) * 2022-07-08 2024-01-16 格兰菲智能科技有限公司 可编程的像素混合流水线、方法、装置和计算机设备
GB2626228A (en) * 2022-11-17 2024-07-17 Advanced Risc Mach Ltd Graphics processing systems

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7023437B1 (en) * 1998-07-22 2006-04-04 Nvidia Corporation System and method for accelerating graphics processing using a post-geometry data stream during multiple-pass rendering
US7170515B1 (en) * 1997-11-25 2007-01-30 Nvidia Corporation Rendering pipeline

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5434967A (en) 1992-10-27 1995-07-18 International Business Machines Corporation Decision variable hardware logic and processing methods for graphics display system
US5794016A (en) 1995-12-11 1998-08-11 Dynamic Pictures, Inc. Parallel-processor graphics architecture
US6057847A (en) * 1996-12-20 2000-05-02 Jenkins; Barry System and method of image generation and encoding using primitive reprojection
US5986658A (en) 1997-01-31 1999-11-16 Hewlett-Packard Co. Method and apparatus for raster computer graphics display of rotation invariant line styles
US6532016B1 (en) 1997-10-23 2003-03-11 Texas Instruments Incorporated Method of processing print data using parallel raster image processing
US6426747B1 (en) * 1999-06-04 2002-07-30 Microsoft Corporation Optimization of mesh locality for transparent vertex caching
US7227556B2 (en) 2002-03-01 2007-06-05 O'driscoll Gerard High quality antialiased lines with dual sampling pattern
US7656416B2 (en) 2002-11-27 2010-02-02 Ati Technologies, Inc. Apparatus for generating anti-aliased and stippled 3d lines, points and surfaces using multi-dimensional procedural texture coordinates
US8933945B2 (en) 2002-11-27 2015-01-13 Ati Technologies Ulc Dividing work among multiple graphics pipelines using a super-tiling technique
US7280114B2 (en) 2003-06-30 2007-10-09 Intel Corporation Line stipple pattern emulation through texture mapping
US7221368B1 (en) 2003-12-18 2007-05-22 Nvidia Corporation Stippled lines using direct distance evaluation
US7505036B1 (en) * 2004-07-30 2009-03-17 3Dlabs Inc. Ltd. Order-independent 3D graphics binning architecture
US8059128B1 (en) 2006-04-19 2011-11-15 Nvidia Corporation Apparatus and method for performing blit operations across parallel processors
US7696993B2 (en) * 2007-02-08 2010-04-13 Via Technologies, Inc. Geometry primitive type conversion in a GPU pipeline
US9589310B2 (en) 2009-10-07 2017-03-07 Nvidia Corporation Methods to facilitate primitive batching

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7170515B1 (en) * 1997-11-25 2007-01-30 Nvidia Corporation Rendering pipeline
US7023437B1 (en) * 1998-07-22 2006-04-04 Nvidia Corporation System and method for accelerating graphics processing using a post-geometry data stream during multiple-pass rendering

Also Published As

Publication number Publication date
US8587581B2 (en) 2013-11-19
US20110090220A1 (en) 2011-04-21
WO2011047092A1 (en) 2011-04-21
US8941653B2 (en) 2015-01-27
US20140152652A1 (en) 2014-06-05
EP2488993B1 (en) 2016-12-07
CN102667814A (zh) 2012-09-12
EP2488993A4 (en) 2013-05-08
EP2488993A1 (en) 2012-08-22

Similar Documents

Publication Publication Date Title
CN102667814B (zh) 一种保序分布式光栅化器
US8860742B2 (en) Coverage caching
US8704836B1 (en) Distributing primitives to multiple rasterizers
Carr et al. The ray engine
CN101124613B (zh) 片段着色管线中增加按比例缩放性的图形处理子系统及方法
US8669999B2 (en) Alpha-to-coverage value determination using virtual samples
US9262797B2 (en) Multi-sample surface processing using one sample
US8072460B2 (en) System, method, and computer program product for generating a ray tracing data structure utilizing a parallel processor architecture
US8558842B1 (en) Parallel duplicate primitive vertex detection and batching
CN101371247B (zh) 用于图形处理器的并行阵列结构
CN109564699B (zh) 用于经优化光线追踪的装置和方法
US10055883B2 (en) Frustum tests for sub-pixel shadows
US6940512B2 (en) Image processing apparatus and method of same
CN101751344A (zh) 压缩状态位高速缓存和后备存储件
CN103793876A (zh) 分布式拼接式进行高速缓存
CN104050706A (zh) 用于低功率图形渲染的像素着色器旁路
US20120280992A1 (en) Grid walk sampling
US9721381B2 (en) System, method, and computer program product for discarding pixel samples
US20170084078A1 (en) System, method, and computer program product for rejecting small primitives
CN103871019A (zh) 优化三角形拓扑用于路径渲染
DE102022106500A1 (de) Tessellationsumverteilung zum Reduzieren von Latenzen in Prozessoren
Okuyan et al. Direct volume rendering of unstructured tetrahedral meshes using CUDA and OpenMP
US9286659B2 (en) Multi-sample surface processing using sample subsets
US9536341B1 (en) Distributing primitives to multiple rasterizers
US9501847B1 (en) Parallel line stipple computation

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant