优化三角形拓扑用于路径渲染的制作方法

文档序号:6523757阅读:324来源:国知局
优化三角形拓扑用于路径渲染的制作方法
【专利摘要】本发明公开了优化三角形拓扑用于路径渲染。用于高效地渲染路径图像的技术将路径轮廓曲面细分成包括特征描述三角形的集合的三角形扇。随后为了更大的光栅化效率,通过将翻转操作器应用到特征描述三角形的集合内的所选择的三角形对来优化特征描述三角形的集合的拓扑。随后使用诸如模板和覆盖的路径渲染技术渲染经优化的三角形对。
【专利说明】优化三角形拓扑用于路径渲染
【技术领域】
[0001 ] 本发明总地涉及路径渲染,并且更具体地,涉及优化三角形拓扑用于路径渲染。
【背景技术】
[0002]路径渲染表示一种分辨率无关的二维(2D)渲染,其形成用于本领域中已知的若干重要的图形渲染标准的基础,图形渲染标准如PostScript、Java2D、苹果的Quartz2D、PDF、TrueType字体、OpenType字体、PostScript字体、可缩放矢量图形(SVG)、OpenVG、微软的Silverlight、Adobe Flash、微软的 XML 页面规范(XPS)等等。
[0003]用于实施路径渲染的一类技术至少包括曲面细分(tessellation)步骤和路径覆盖步骤。在曲面细分步骤中路径元素被曲面细分成特征描述(representative)三角形。路径覆盖步骤画出许多被曲面细分的三角形,并且由这些三角形所覆盖的样本在模板(stencil)或颜色缓冲区中被计数,其用来确定每个样本在相关联的路径之内还是之外。正面(front-facing)三角形增大所覆盖的样本计数并且反面(back-facing)三角形减小所覆盖的样本计数。被计数为在路径之内的样本根据相关联的路径填充颜色被渲染,而被计数为在路径之外的样本不被渲染为路径填充颜色。
[0004]许多常见曲面细分技术生成具有非常窄的、似片(silver)的三角形的网眼和三角形扇,其典型地以相对差的效率来渲染。因此,整体路径渲染效率和性能可能相对差,这会降低用户体验的质量。
[0005]如前文所示出的,本领域所需要的是用于改进路径渲染效率的技术。

【发明内容】

[0006]本发明的一个实施例阐述用于处理路径图像用于高效的光栅化的方法,方法包括将定义路径图像的一个或多个轮廓(contour)曲面细分成三角形的第一集合,其中三角形的第一集合的每个三角形包括绕序(winding order);基于三角形的第一集合内的三角形的拓扑和绕序生成经优化以减少光栅化成本的三角形的第二集合;以及保存三角形的第二
口 O
[0007]本发明的其他实施例包括但不限于计算机可读存储介质,其包括指令,当由处理单元执行该指令时,使处理单元实施本文所描述的技术,以及计算设备,该计算设备包括配置为实施本文所描述的技术的处理单元。
[0008]所公开的技术的一个优点是它改进由图形处理单元所渲染的路径图像的渲染效率。
【专利附图】

【附图说明】
[0009]因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
[0010]图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
[0011]图2是根据本发明的一个实施例的、用于图1的计算机系统的并行处理子系统的框图;
[0012]图3是根据本发明的一个实施例的、图2的通用处理集群内的流多处理器的一部分的框图;
[0013]图4是根据本发明的一个实施例的、图2的PPU中的一个或多个能够经配置以实现的图形处理管线的概念图;
[0014]图5A示出根据本发明的一个实施例的、对从路径元素所曲面细分的三角形对进行的翻转操作;
[0015]图5B示出根据本发明的一个实施例的、与三角形对相关联的处理成本;
[0016]图5C示出根据本发明的一个实施例的、与经翻转的三角形对相关联的处理成本;
[0017]图6示出根据本发明的一个实施例的、对具有不同的面向(facing)属性的三角形对进行的翻转操作;
[0018]图7示出根据本发明的一个实施例的、用于改进的整体拓扑优化的顺序翻转操作;
[0019]图8是根据本发明的一个实施例的、用于采用经优化的三角形拓扑实施路径渲染的方法步骤的流程图;以及
[0020]图9是根据本发明的一个实施例的、用于实施拓扑优化的方法步骤的流程图。【具体实施方式】
[0021]在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
[0022]系统概述
[0023]图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)或其他磁、光、或固态存储设备。
[0024]交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字通用光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PC1-EXpreSS、AGP (加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0025]在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。[0026]应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、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。
[0027]图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PI3U) 202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
[0028]再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据生成像素数据,与本地并行处理存储器204 (可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其他PPU202。这些PPU202可以是同样的或不同的,并且每个PPU202可具有一个或多个专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0029]在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的另一存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0030]现在返回参考图2和图1,每个PPU202包括经由连接到存储器桥105 (或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O (输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0031]在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口 206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0032]有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202 (O)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0033]GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口 206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0034]存储器接口 214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM) 220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。[0035]任何一个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之间的业务流。
[0036]另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器、顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0037]PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
[0038]如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理核心、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PI3U从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0039]可以在GPC208上并发执行多个处理任务并且处理任务在执行期间可以生成一个或多个“子”处理任务。任务/工作单元207接收任务并动态调度处理任务和子处理任务用于由GPC208执行。
[0040]图3是根据本发明的一个实施例的、图2的GPC208内的流多处理器(SM)310的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SMD处理机制代表SMT处理机制的功能子集。
[0041]经由将处理任务分布到一个或多个流多处理器(SM)310的管线管理器(未示出)来有利地控制GPC208的操作,其中每个SM310配置为处理一个或多个线程组。每个SM310包括指令LI高速缓存370,其配置为经由GPC208内的L1.5高速缓存(未示出)从存储器接收指令和常数。线程束(warp)调度器和指令单元312从指令LI高速缓存370接收指令和常数并根据指令和常数控制本地寄存器堆304和SM310功能单元。SM310功能单元包括N个exec (执行或处理)单元302和P个加载-存储单元(LSU) 303。如本领域已知的,SM功能单元可被管线化,允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点运算(例如加法和乘法)、比较操作、布尔操作(AND、OR、X0R)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来实施不同的操作。
[0042]如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,所以结果是在包括M个流多处理器310的GPC208中,在任何给定时间在GPC208中可以执行多达G*M个线程组的系统。
[0043]此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
[0044]在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0045]每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
[0046]SM310提供具有不同级别的可访问性的片上(内部)数据存储。特殊寄存器(未示出)对于LSU303可读但不可写并且用于存储定义每个线程的“位置”的参数。在一个实施例中,特殊寄存器包括每线程(或SM310内的每exec单元302) —个的存储线程ID的寄存器;每个线程ID寄存器仅由各自的exec单元302可访问。特殊寄存器还可以包括附加寄存器,其对于执行由TMD322所代表的同一个处理任务的所有线程(或由所有LSU303)可读,其存储CTA标识符、CTA维数、CTA所属网格(grid)的维数(或队列位置,如果TMD322编码队列任务而不是网格任务的话)、以及CTA被指派到的TMD322的标识符。
[0047]如果TMD322是网格TMD,则TMD322的执行会启动和执行固定数目的CTA以处理存储在队列525中的固定量的数据。将CTA的数目指定为网格宽度、高度和深度的乘积。可以将固定量的数据存储在TMD322中或TMD322可以存储指向将由CTA所处理的数据的指针。TMD322还存储由CTA所执行的程序的开始地址。
[0048]如果TMD322是队列TMD,那么使用TMD322的队列特点,这意味着将要被处理的数据量不一定是固定的。队列条目存储用于由指派到TMD322的CTA所处理的数据。队列条目还可以代表在线程执行期间由另一个TMD322所生成的子任务,从而提供嵌套并行性。通常线程或包括线程的CTA的执行被挂起直到子任务的执行完成。可以将队列存储在TMD322中或与TMD322分开存储,在该情况下TMD322存储指向该队列的队列指针。有利地,当代表子任务的TMD322正在执行时可以将由子任务所生成的数据写到队列。队列可以实现为循环队列以使得数据的总量不限于队列的大小。
[0049]属于网格的CTA具有指示网格内各自CTA的位置的隐含网格宽度、高度和深度参数。在初始化期间响应于经由前端212从设备驱动程序103所接收的命令来写特殊寄存器并且在处理任务的执行期间特殊寄存器不改变。前端212调度每个处理任务用于执行。每个CTA与具体TMD322相关联用于一个或多个任务的并发执行。此外,单个GPC208可以并发执行多个任务。
[0050]参数存储器(未示出)存储可由同一个CTA内的任何线程(或任何LSU303)读取但不可由其写入的运行时间参数(常数)。在一个实施例中,设备驱动程序103在引导SM310开始执行使用参数的任务之前将这些参数提供给参数存储器。任何CTA内的任何线程(或SM310内的任何exec单元302)可以通过存储器接口 214访问全局存储器。可以将全局存储器的各部分存储在LI高速缓存320中。
[0051]每个线程将本地寄存器堆304用作暂存空间;每个寄存器被分配以专用于一个线程,并且在本地寄存器堆304的任何部分中的数据仅对于寄存器被分配到的线程可访问。本地寄存器堆304可以实现为物理上或逻辑上分为P个通道的寄存器堆,每个通道具有一定数目的条目(其中每个条目可以存储例如32位字)。将一个通道指派到N个exec单元302和P个下载-存储单元LSU303的每一个,并且利用用于执行同一个程序的不同线程的数据来填充不同通道中的相应条目以帮助SIMD执行。可以将通道的不同部分分配到G个并发线程组中的不同线程组,以使得本地寄存器堆304中的给定条目仅对于特定线程可访问。在一个实施例中,保留本地寄存器堆304内的某些条目用于存储线程标识符,实现特殊寄存器之一。此外,一致LI高速缓存375存储用于N个exec单元302和P个下载-存储单元LSU303的每个通道的一致值或常数值。
[0052]共享存储器306对于单个CTA内的线程可访问;换言之,共享存储器306中的任何位置对于同一个CTA内的任何线程(或对于SM310内的任何处理引擎)可访问。共享存储器306可以实现为具有允许任何处理引擎对共享存储器中的任何位置读取或写入的互连的共享寄存器堆或共享片上高速缓存存储器。在其他实施例中,共享状态空间可能映射到片外存储器的每CTA区上并被高速缓存在LI高速缓存320中。参数存储器可以实现为在实现共享存储器306的同一个共享寄存器堆或共享高速缓存存储器内的指定部分,或者实现为LSU303对其具有只读访问权限的分开的共享寄存器堆或片上高速缓存存储器。在一个实施例中,实现参数存储器的区域还用于存储CTA ID和任务ID,以及CTA和网格维数或队列位置,实现特殊寄存器的各部分。SM310中的每个LSU303耦连到统一地址映射单元352,统一地址映射单元352将为在统一存储器空间中所指定的加载和存储指令所提供的地址转换为每个各异存储器空间中的地址。因此,指令可以用于通过指定统一存储器空间中的地址来访问本地、共享或全局存储器空间中的任何一个。
[0053]每个SM310中的LI高速缓存320可以用于高速缓存私有的每线程本地数据还有每应用全局数据。在一些实施例中,可以将每CTA共享数据高速缓存在LI高速缓存320中。LSU303经由存储器和高速缓存互连380耦连到共享存储器306和LI高速缓存320。
[0054]应该理解本文所述的核心架构是示例性的并且变化和修改都是可能的。GPC208内可包括任何数目的处理单元例如SM310。进一步地,如图2所示,PPU202可包括任何数目的GPC208,该任何数目的GPC208有利地在功能上相互类似使得执行行为不取决于哪个GPC208接收特定的处理任务。进一步地,每个GPC208有利地使用单独且各异的处理单元、LI高速缓存独立于其他GPC208进行操作以执行用于一个或多个应用程序的任务。
[0055]本领域普通技术人员将理解的是,图1-3中所描述的架构绝不限制本发明的范围,并且本文所教导的技术可实现在任何经适当配置的处理单元上,包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等,而不脱离本发明的范围。
[0056]图4是根据本发明的一个实施例的、图2的PPU202中的一个或多个能够配置为实现的图形处理管线400的概念图。例如,SM310中的一个可配置为实施顶点处理单元415、几何处理单元425、片段处理单元460中的一个或多个的功能。还可由GPC208内的其他处理引擎和相应的分区单元215实施数据汇编器410、基元汇编器420、光栅化器455和颜色光栅操作(CROP)单元465的功能。可替代地,可使用用于一个或多个功能的专用处理单元来实现图形处理管线400。
[0057]数据汇编器410处理单元收集用于高阶表面、基元等的顶点数据,并将包括顶点属性的顶点数据输出到顶点处理单元415。顶点处理单元415是可编程执行单元,其配置为执行顶点着色器程序,按顶点着色器程序所指定的来亮化和变换顶点数据。例如,顶点处理单元415可被编程以将顶点数据从基于对象的坐标表示(对象空间)变换到可替代地基于诸如世界空间或规格化设备坐标(NDC)空间的坐标系。顶点处理单元415可读取由数据汇编器410所存储在LI高速缓存320、并行处理存储器204、或系统存储器104中的数据用于在处理顶点数据中使用。
[0058]基元汇编器420从顶点处理单元415接收顶点属性、按需要读取所存储的顶点属性、并构建图形基元用于由几何处理单元425处理。图形基元包括三角形、线段、点等等。几何处理单元425是可编程执行单元,其配置为执行几何着色器程序,按几何着色器程序所指定的来变换从基元汇编器420所接收的图形基元。例如,几何处理单元425可被编程以将图形基元细分成一个或多个新图形基元并计算用来将新图形基元光栅化的参数,诸如平面方程系数。
[0059]在一些实施例中,几何处理单元425还可在几何流中添加或删除元素。几何处理单元425将指定新图形基元的参数和顶点输出到视口缩放、剔除(cull)和裁剪(clip)单元450。几何处理单元425可读取存储在并行处理存储器204或系统存储器104中的数据用于在处理几何数据中使用。视口缩放、剔除和裁剪单元450实施裁剪、剔除和视口缩放,并将所处理的图形基元输出到光栅化器455。
[0060]光栅化器455扫描转换新图形基元并将片段和覆盖数据输出到片段处理单元460。此外,光栅化器455可配置为实施z剔除(z-culling)和其他基于z的优化。
[0061]片段处理单元460是可编程的执行单元,其配置为执行片段着色器程序,按片段着色器程序所指定的来变换从光栅化器455所接收的片段。例如,片段处理单元460可被编程以实施诸如透视校正、纹理映射、着色、混合等操作,以产生输出到CROP单元465的经着色的片段。片段处理单元460可读取存储在并行处理存储器204或系统存储器104中的数据用于在处理片段数据中使用。可以像素、样本、或其他粒度对片段着色,这取决于所编程的米样率。
[0062]CROP单元465是处理单元,其实施诸如模板、z测试、混合等的光栅操作,并输出像素数据作为经处理的图形数据用于存储在图形存储器中。经处理的图形数据可存储在图形存储器例如并行处理存储器204和/或系统存储器104中,用于在显示设备110上显示或用于由CPU102或并行处理子系统112进一步处理。在某些实施例中,每个像素包括多个颜色样本。在这类实施例中,CROP单元465配置为压缩写入到存储器的z样本数据、颜色样本数据或其任何组合以及解压缩从存储器中读取的z样本数据和颜色样本数据。该压缩技术的目的不是为了减小存储器中的图像的大小,而是通过由要求处理的样本值的一个集合表示用于给定像素的所有样本来减少与图像相关联的处理。在典型的场景中,大多数像素包括等值的颜色样本并且该压缩技术使能改进的处理性能。多个颜色样本被组合以生成结果图像中的抗锯齿的像素用于显示或进一步处理。当与特定像素相关联的所有颜色样本在值上相等时,为像素存储一个颜色样本并设置用于像素的状态信息以指示样本经压缩。在一个实施例中,当相应片段完全覆盖像素时,与像素相关联的样本将具有相等的颜色。可组合用于图像内的每个像素的颜色样本以生成抗锯齿的像素用于显示。
[0063]拓扑优化
[0064]在某些实施例中,图形处理管线400配置为渲染由从包括路径图像的复杂路径元素所曲面细分的三角形扇所定义的图像。常规地关于锚点将三角形扇曲面细分,以保留被覆盖的样本的卷绕数(winding number)。三角形扇扫过(sweep)路径图像内的每个路径元素以覆盖与路径图像内的路径元素相对应的面积。该类型的曲面细分过程是明确的并产生正确的路径覆盖和正确的样本卷绕数。然而,结果三角形趋向于相对窄,导致后续光栅化步骤的低效。本发明的实施例经由拓扑优化来使能改进的路径渲染性能以增加平均三角形宽度或减小平均三角形面积,从而改进平均光栅化效率。
[0065]在某些实施例中,在路径图像的路径渲染之前实施拓扑优化。在其他实施例中,结合路径图像的编着(authoring)实施拓扑优化。在这类实施例中,随后采用优化的拓扑保存路径图像。通过对定义路径图像的经曲面细分的三角形的集合进行一系列拓扑翻转操作的应用来完成拓扑优化。
[0066]图5A示出根据本发明的一个实施例的、对从路径元素所曲面细分的三角形对进行的翻转操作500。给定的三角形由三个顶点来定义并可唯一地由三个顶点来指代。例如,具有顶点ABC的三角形可称为三角形ABC或简单地“ Λ ABC”。如所示,三角形510 ( Λ ABC)由顶点ABC来定义,三角形512 (AAOT)由顶点A⑶来定义,三角形514 (AABD)由顶点ABD来定义,并且三角形516 ( ΛΒ⑶)由顶点B⑶来定义。每个三角形具有相关联的绕序,典型地指定为顺时针或逆时针。每个三角形还具有相关联的面积,其当三角形具有逆时针绕序时可以是正的或者当三角形具有顺时针绕序时可以是负的。如果三角形具有负的面积那么其可被视为是正面的,并且如果具有正的面积那么可被视为是反面的。
[0067]用于图像内的每个样本的覆盖累积为卷绕数。典型地在渲染之前指派缺省卷绕数为零(未覆盖)。当反面三角形覆盖样本时,用于样本的卷绕数减小。当正面三角形覆盖样本时,用于样本的卷绕数增大。多个三角形可覆盖相同样本,并且用于样本的最终卷绕数计算为用于覆盖样本的每个三角形的卷绕数的和。可在模板缓冲区、颜色缓冲区、或包括二维阵列值的其他技术上可行的缓冲区内累积用于被渲染的图像内的样本的卷绕数。给定的卷绕数确定相应的样本是否在相关联的路径之内。在典型的实现方案中,等于零的卷绕数指示样本不在相关联的路径之内,而非零的卷绕数指示样本在路径之内。此处,卷绕数提供用于样本的路径包含指示符。在某些可替代实现方案中,维持单个状态位作为用于每个样本的路径包含指示符。在这类实现方案中,当被新三角形所覆盖时每个状态位改变状态。
[0068]翻转操作500接收作为输入的AABC和ΛΑ⑶,并生成作为输出的AABD和ΛΒ⑶。顶点A到D在几何上保持原位,并且用于每个三角形区的面向属性被保留。此外,Λ ABC+Λ A⑶的面积等于Λ ABD+Λ B⑶的面积。本领域已知的一个适当的翻转操作是bistellar翻转操作。
[0069]图5B示出根据本发明的一个实施例的、与三角形对相关联的处理成本。在某些渲染架构中,渲染窄三角形比渲染宽三角形的效率低。具体来讲,可由图4的光栅化器455所实施的三角形的光栅化引发每个与精细光栅化区520相交的三角形边一个时钟周期的周期成本。如所示 ,图5A的三角形对510、512投影在十二个精细光栅化区520上。区520
(O)包括五个三角形边,区520 (I)包括两个三角形边,以及区520 (2)包括四个三角形边。在十二个精细光栅化区内将与三角形对相关联的所有三角形边加起来得到共三十个三角形边,指示要求三十个周期来将三角形对光栅化。
[0070]图5C示出根据本发明的一个实施例的、与经翻转的三角形对相关联的处理成本。如所示,图5A的三角形对514、516在精细光栅化区520内包括共二十一个三角形边。共二十一个三角形边指示要求二十一个周期以将经翻转的三角形对光栅化。在该示例中,作为采用较宽三角形514和516来表示区的结果,与由三角形510和512所覆盖的区相关联的光栅化成本从三十个周期减少到二十一个周期。[0071]图6示出根据本发明的一个实施例的、对具有不同的面向属性的三角形对进行的翻转操作600。此处,Λ EGH是正面三角形,而AEHF是反面三角形。因为三角形对中的每个三角形具有不同的面向属性,所以用于三角形对的重叠区中的样本的卷绕数相互抵消到零,指示路径不覆盖那些样本。用于非重叠区中的样本的卷绕数是非零的,指示路径覆盖那些样本。
[0072]翻转操作600生成反面的Λ EGF和正面的Λ GHF。区EJH不被三角形Λ EGF或AGHF的二者之一所覆盖,并且驻留在其中的样本不被AEGF或ΛGHF的二者之一所更改。区FGJ被Λ EGF和Λ GHF 二者所覆盖,并且驻留在其中的样本基于来自Λ EGF和Λ GHF的贡献具有相互抵消到零的卷绕数。
[0073]如此处示出的,通过翻转操作500和翻转操作600, bistellar翻转操作生成适合于确定用于与三角形对相关联的路径的覆盖的三角形对。在图6的示例中,作为翻转操作600的结果获得较大的光栅化效率,因为与Λ EGH和AEHF的组合相比,Λ EGF和Λ GHF的组合在光栅化期间要求生成较少样本。
[0074]图7示出根据本发明的一个实施例的、用于改进的整体拓扑优化的顺序翻转操作710,720ο如所示,翻转操作710将Λ KLM和Λ KMN变换成包括Λ KLN和Λ LMN的拓扑。翻转操作710还将Λ KNP和Λ KPQ变换成包括Λ KNQ和Λ NPQ的拓扑。在翻转操作710之后,每个三角形更宽以用于更高效的光栅化。翻转操作720生成AKLQ、ALNQ、ALMN和ANPQ,其一般更宽以用于更加高效的光栅化。针对示出的四个三角形的每个不同集合,使用卷绕数来确定哪些区被覆盖得到同样的覆盖。
[0075]图8是根据本发明的一个实施例的、用于采用经优化的三角形拓扑实施路径渲染的方法步骤的流程图。虽然结合图1-4的系统描述了方法步骤,但本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统在本发明的范围内。在一个实施例中,由诸如图1的CPU102的CPU单元实施方法步骤。在另一个实施例中,由诸如并行处理子系统112的GPU单元实施方法步骤。
[0076]如所示,方法800开始于步骤810,此处接收包括路径元素的路径图像。在步骤820中,将路径图像曲面细分成特征描述三角形的集合。用于将路径图像曲面细分的一个技术涉及选择锚点,以及形成围绕锚点的三角形扇。包括三角形扇的给定的三角形可以是正面或反面的,并可对与由三角形所覆盖的样本相关联的卷绕数贡献正值或负值。特征描述三角形的整体集合提供路径图像的分辨率无关的表示,其可包括分辨率无关的轮廓。
[0077]在步骤830中,使用选择性地作用于共享公共边的三角形对的翻转操作器来优化用于特征描述三角形的集合的拓扑。如果结果拓扑是根据至少一个翻转度量(metric)改进的,那么将翻转操作器应用到给定三角形对,否则不将翻转操作器应用到该三角形对。一个翻转度量是包括三角形对的三角形的面积和。重叠的正面三角形和反面三角形可能相互抵消其各自面积的至少一部分并要求较少的光栅化工作,如图6所示。因此当面积和减小时该度量是改进的。另一翻转度量是用于三角形对的三角形薄度(sliveriness)(或窄度度量),其可被定义为与三角形对相关联的任何两个边之间的最小角。因此当最小角增加、使三角形对的最窄三角形变宽时,该度量增大。下文在图9中更详细地示出步骤830的一个实现方案。
[0078]在步骤840中,保存三角形的经优化的集合。三角形的经优化的集合可包括特征描述三角形的集合和应用到其的拓扑优化。可将三角形的经优化的集合保存到存储器子系统内的临时缓冲区用于渲染。还可将三角形的经优化的集合保存到非易失性介质以在将来某时间渲染。在步骤850中,渲染三角形的经优化的集合以生成具有指定分辨率的相应图像。在一个实施例中,根据路径渲染模板和覆盖技术渲染三角形的经优化的集合。可实现模板和覆盖的任何技术上可行的实现方案而不脱离本发明的范围和精神。模板和覆盖的典型实现方案首先通过基于覆盖定义路径图像的三角形累积用于不同样本的卷绕数来渲染用于二维缓冲区的每个样本的卷绕数。随后在相应图像中覆盖具有非零卷绕数的样本以生成路径图像的渲染。方法终止于步骤890。
[0079]图9是根据本发明的一个实施例的、用于实施拓扑优化的方法步骤的流程图。虽然结合图1-4的系统描述了方法步骤,但本领域普通技术人员将理解的是,配置为以任何次序实施方法步骤的任何系统在本发明的范围内。在一个实施例中,由诸如图1的CPU102的CPU单元实施方法步骤。在另一个实施例中,由诸如并行处理子系统112的GPU单元实施方法步骤。
[0080]如所示,方法900开始于步骤910,此处接收用于路径图像的特征描述三角形的集合。特征描述三角形的集合包括从路径图像曲面细分所生成的三角形。在步骤920中,如果不满足终止度量,那么方法前进到步骤922。终止度量可包括超时机制、迭代计数阈值、成本函数、或用于确定终止的任何其他技术上可行的度量。迭代计数可反映经过三角形的工作集的遍历次数,该工作集可包括来自特征描述三角形的集合的三角形、来自特征描述三角形的集合的经翻转的三角形对、或其任何组合。三角形的工作集包括在任意优化状态中的定义路径图像的三角形。
[0081]在步骤922中,计算三角形的工作集内的至少一对三角形的翻转度量。翻转度量可包括先前在图8中所描述的面积和或窄度度量、或用作测量给定三角形拓扑的相对最优性的任何其他技术上可行的度量。在步骤924中,选择来自该至少一对三角形的、满足翻转度量标准的三角形对。在一个实施例中,贪婪选择算法顺序地遍历三角形的工作集内的所有三角形并选择满足翻转度量要求的三角形对。在步骤926中,对所选择的三角形对实施翻转操作。
[0082]返回到步骤920,如果满足终止度量,那么方法终止于步骤990。
[0083]总而言之,公开了用于高效地渲染路径图像的技术。诸如轮廓的包括路径图像的路径元素被曲面细分成结构化为三角形扇的特征描述三角形的集合。为了光栅化效率,对满足翻转度量要求的三角形对使用翻转操作器来优化从特征描述三角形的集合中所选择的三角形对。可对特征描述三角形的集合实施一个或多个优化遍数(optimization pass)以减少整体光栅化成本。随后使用任何技术上可行的技术诸如模板和覆盖渲染来渲染结果三角形的集合。所公开的技术的一个优点是其提高了由图形处理单元所渲染的路径图像的渲染效率。
[0084]虽然上述内容针对本发明的实施例,但可对本发明的其他和进一步的实施例进行设计而不脱离其基本范围。例如,可以以硬件或软件或硬件和软件的组合来实现本发明的各方面。本发明的一个实施例可被实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的CD-ROM盘、闪存存储器、ROM芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0085]以上已参照具体实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和改变而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
[0086]因此,本发明的范围由下面的权利要求来确定。
【权利要求】
1.一种用于处理路径图像以促进光栅化的方法,所述方法包括: 将定义所述路径图像的一个或多个轮廓曲面细分成三角形的第一集合,其中包括在所述三角形的第一集合中的至少一个三角形覆盖至少一个样本,并且其中所述至少一个样本包括路径包含指示符; 基于包括在所述三角形的第一集合中的一个或多个三角形生成配置为减少光栅化成本的三角形的第二集合;以及 将所述三角形的第二集合存储在存储器中。
2.根据权利要求1所述的方法,其中包括在所述三角形的第一集合中的每个三角形包括绕序,并且其中所述路径包含指示符包括基于与覆盖三角形相关联的绕序的卷绕数。
3.根据权利要求1所述的方法,进一步包括通过实施以下步骤来渲染图像缓冲区中具有指定分辨率的图像: 基于所述三角形的第二集合,在模板缓冲区中渲染每个样本的路径包含指示符;以及 基于驻留在所述模板缓冲区中的相应路径包含指示符渲染图像颜色。
4.根据权利要求1所述的方法,其中曲面细分包括: 选择用于所述路径图像的锚点;以及 针对所述一个或多个轮廓中的每一个,生成不同三角形扇, 其中与一个或多个三角形扇相关联的三角形包括在所述三角形的第一集合中。
5.根据权利要求1所述的方法,其`中生成所述三角形的第二集合包括: 针对包括在所述三角形的第一集合中的一个或多个三角形对或针对包括在所述三角形的第二集合中的一个或多个三角形对计算翻转度量; 从所述一个或多个三角形对中选择满足翻转度量标准的至少一个三角形对; 对所述至少一个三角形对实施翻转操作以生成至少一个结果三角形对;以及 将所述结果三角形对添加到所述三角形的第二集合。
6.根据权利要求5所述的方法,进一步包括确定终止度量尚未满足。
7.根据权利要求5所述的方法,其中针对给定的三角形对,所述翻转度量包括包括所述给定的三角形对的两个三角形的三角形面积的和。
8.根据权利要求5所述的方法,其中针对给定的三角形对,所述翻转度量包括与包括所述给定的三角形对的两个三角形相关联的最小角。
9.根据权利要求5所述的方法,其中选择至少一个三角形对包括: 遍历所述三角形的第一集合以生成三角形对的序列; 计算所述三角形对的序列内的每个三角形对的不同翻转度量;以及 标识满足翻转度量标准的至少一个三角形对。
10.一种计算设备,包括: 存储器;以及 处理单元,其耦连到所述存储器并配置为通过进行以下内容来渲染路径图像: 将定义所述路径图像的一个或多个轮廓曲面细分成三角形的第一集合,其中包括在所述三角形的第一集合中的至少一个三角形覆盖至少一个样本,并且其中所述至少一个样本包括路径包含指示符; 基于包括在所述三角形的第一集合中的一个或多个三角形生成配置为减少光栅化成本的三角形的第二集合; 将所述三角形的第二集合存储在存储器中;以及 使用所述三角形的`第二集合的模板和覆盖渲染来渲染指定分辨率的图像。
【文档编号】G06T1/20GK103871019SQ201310686968
【公开日】2014年6月18日 申请日期:2013年12月13日 优先权日:2012年12月17日
【发明者】杰弗里·A·博尔兹, 马克·J·基尔加德 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1