用于图形渲染的多阶段细分的制作方法

文档序号:6593125阅读:367来源:国知局
专利名称:用于图形渲染的多阶段细分的制作方法
技术领域
本发明涉及计算装置,且明确地说,涉及由计算装置进行的图形渲染。
背景技术
计算装置越来越多地需要高级二维(2D)和三维(3D)图形应用程序。举例来说, 计算装置越来越多地提供游戏、角色动画、图形菜单系统和其它需要高级图形渲染的应用 程序。此高级图形渲染(尤其是对于3D图形)涉及大量数据处理。高级图形渲染的质量 可能受到处理资源量、可用处理资源的能力、可用功率量等的限制。举例来说,需要以高渲染速率(例如,按帧/秒测量)进行的高级图形渲染的应用 程序可能会对可用的计算资源造成相当大的负担。对可用计算资源的造成的负担可能会因 对计算资源造成的重负荷而导致其它应用程序中的性能降低、低质量的图形渲染或以上两 种情况。在移动计算装置(例如个人数字助理(PDA)、无线通信装置、全球定位装置等)的 环境下,图形渲染所需要的计算密集的数据处理可能消耗移动计算装置的大量可用功率。多媒体处理器可包括耦合到图形处理单元(GPU)的通用中央处理单元(CPU)。GPU 专用于执行图形渲染操作以将经计算机化的图形显示于显示器上。GPU构建有高度并行的 结构,对于一系列复杂图形相关算法来说,所述结构提供比常规的通用CPU更高效的处理。 当在CPU上执行的图形相关算法需要图形处理时,CPU细分所述图形,并将细分结果提供给 GPU以供渲染到显示器。GPU的高度并行性质允许GPU比用CPU将图像直接绘制到显示器 更快地在显示器上创建复杂的三维图像。GPU可用于各种各样的应用,且在图形密集应用 (例如视频游戏应用)、复杂图形用户接口应用、用于工程设计或艺术应用的计算机辅助设 计程序、或任何其它类型的使用2D或3D图形的软件应用程序中非常常见。

发明内容
本发明描述一种用于在图形渲染期间细分曲线的多阶段细分技术。在至少两个细 分阶段中细分所述曲线。第一细分阶段将曲线细分为第一组线段,所述线段各表示所述曲 线的一部分。第二细分阶段进一步将所述曲线的由第一组线段中的每一者表示的部分细分 为额外线段,所述额外线段更精细地表示所述曲线的形状。以此方式,曲线的在第一细分阶 段后由仅一个线段表示的每一部分在第二细分阶段后由一个以上线段表示。在一个实例 中,第一细分阶段可(例如)由中央处理单元(CPU)执行,且第二细分阶段可由细分组件执 行,所述细分组件例如为图形处理单元(GPU)或专用细分硬件。在一些例子中,多阶段细分 技术可涉及两个以上细分阶段。在一个方面中,一种方法包含用第一计算单元来细分曲线,以将所述曲线划分为 若干第一线段;以及用第二计算单元将所述曲线的由所述第一线段中的一者表示的部分细 分为若干第二线段。在另一方面中,一种装置包含第一计算单元,其细分曲线,以将所述曲线划分为 若干第一线段;以及第二计算单元,其将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。在另一方面中,一种装置包含第一装置,其用于细分曲线,以将所述曲线划分为 若干第一线段;以及第二装置,其将所述曲线的由所述第一线段中的一者表示的部分细分 为若干第二线段。本发明中所描述的技术可以硬件、软件、固件或其任一组合来实施。如果以软件实 施,那么所述软件可在处理器中执行,所述处理器可指代一个或一个以上处理器(例如微 处理器)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或数字信号处理器(DSP)或其 它等效的集成或离散逻辑电路。包含用以执行所述技术的指令的软件最初可存储在计算机 可读媒体内,并由处理器加载和执行。因此,本发明还涵盖计算机可读媒体,其包含用以致 使处理器执行本发明中所描述的多种技术中的任一技术的指令。在一些情况下,所述计算 机可读媒体可形成计算机程序产品的一部分,所述计算机程序产品可被销售给制造商且/ 或用于装置中。所述计算机程序产品可包括计算机可读媒体,且在一些情况下,还可包括包 装材料。附图和以下描述中陈述一个或一个以上方面的细节。将从描述内容和图式且从所 附权利要求书中明白所述技术的其它特征、目标和优点。


图1是说明执行多阶段细分的实例计算装置的框图。图2是说明一起操作以执行多阶段细分的CPU和GPU的框图。图3A到图3D是说明曲线的实例两阶段细分的图。图4A到图4D是说明曲线的另一实例多阶段细分的图。图5是说明根据本发明中所描述的多阶段细分技术来细分曲线的计算装置的实 例操作的流程图。图6是说明执行细分的顶点着色器的实例操作的流程图。图7是说明执行多阶段细分的另一实例计算装置的框图。图8是说明根据本发明中所描述的技术执行细分的实例细分硬件电路的示意图。图9是说明经配置以作为两个并行的三阶段乘法与累加(MAC)阵列而操作的细分 硬件电路的示意图,所述两个阵列各计算一个三次多项式。图10是说明经配置以作为三个并行的两阶段MAC阵列而操作的细分硬件电路的 示意图,所述三个阵列各计算一个二次多项式。图11是说明根据本发明中所描述的技术来执行细分的计算装置的实例操作的流 程图。
具体实施例方式本发明描述用于在图形渲染期间细分曲线的技术。明确地说,本发明描述一种多 阶段细分技术,其在两个或两个以上细分阶段期间,将曲线细分为多个线段。第一细分阶段 将曲线细分为第一组线段,所述线段各表示曲线的一部分。在一些情况下,第一细分阶段可 将曲线细分为足以粗略地表示曲线的形状的线段。在一个实例中,第一细分阶段可由计算 装置的第一计算单元执行,所述第一计算单元例如是计算装置的中央处理单元(CPU)或图
7形处理单元(GPU)。第二细分阶段进一步将曲线细分为若干额外线段。明确地说,第二细分阶段将曲 线的由第一组的线段中的每一者表示的部分细分为若干额外线段,所述额外线段更精细地 表示曲线的形状。换句话说,曲线的在第一细分阶段后由仅一个线段表示的每一部分在第 二细分阶段后由一个以上线段表示。第二细分阶段可由计算装置的第二计算单元执行。在 一些方面中,第二计算单元可为GPU,其专用于执行图形操作,包括第二细分阶段。在一些例 子中,GPU可具有高度并行的结构,所述结构可用于并行地细分曲线的多个部分。在另一方 面中,第二计算单元可为执行第二细分阶段的专用细分硬件电路。如下文将描述,多阶段细 分可包括两个以上细分阶段。图1是说明根据本发明中所描述的技术来执行多阶段细分的实例计算装置2的框 图。计算装置2可包含个人计算机、桌上型计算机、膝上型计算机、计算机工作站、视频游戏 平台或控制台、蜂窝式或卫星电话、陆线电话、因特网电话、手持式装置(例如便携式视频 游戏装置或个人数字助理(PDA))、个人音乐播放器、视频播放器、电视机、服务器、中间网络 装置、大型计算机或另一类型的输出图形信息的装置。如图1的实例中所说明,计算装置2包括用户输入接口 4、CPU 6、装置存储器8、 GPU 10、GPU存储器12、显示器接口 14和显示器16。用户输入接口 4、CPU 6、装置存储器8、 GPU 10和显示器接口 14可使用总线18进行通信。总线18可为多种总线结构中的任一者, 例如第三代总线(例如,超传输总线(HyperTransport bus)或无限频带总线(InfiniBand bus))、第二代总线(例如,高级图形端口总线、外围组件互连(PCI)快捷总线或高级可扩展 接口(AXI)总线)或另一类型的总线或装置互连。CPU 6可包含通用或专用处理器,其控制计算装置2的操作。用户可将输入提供给 计算装置2,以致使CPU 6执行一个或一个以上软件应用程序。在CPU 6上执行的软件应 用程序可包括文字处理应用程序、电子表格应用程序、媒体播放器应用程序、视频游戏应用 程序、图形用户接口应用程序或另一最终用户程序。用户可经由一个或一个以上输入装置 (未图示)将输入提供给计算装置2,所述输入装置例如是键盘、鼠标、麦克风、触摸板或另 一经由用户输入接口 4耦合到计算装置2的输入装置。装置存储器8可存储装置配置信息,所述信息可在启动或复位时用于配置计算装 置2。装置存储器还可存储数据和/或程序模块,所述数据和/或程序模块可由CPU 6立即 存取和/或目前正被CPU 6操作。装置存储器8可额外存储来自计算装置2的其它组件的 信息,例如由GPU 10输出的信息。装置存储器8可为一个或一个以上易失性或非易失性存 储器或存储装置,例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、只读存储 器(ROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据 媒体或光学存储媒体。GPU 10可专用于执行图形操作以在显示器16上渲染经计算机化的图形。因此, 当在CPU 6上执行的软件应用程序之一需要图形处理时,CPU 6将图形信息提供给GPU 10 以供渲染到显示器16。在一些例子中,GPU 10可构建有并行结构,所述并行结构与CPTO相 比提供对复杂的图形相关操作的更高效处理。GPU 10的并行性质可允许GPU 10比用CPU 6将图像直接制图到显示器16更快地在显示器16上创建复杂的二维(2D)或三维(3D)图 像。在一些例子中,GPU 10可集成到计算装置2的母板中。在其它例子中,GPU 10可存在于安装在计算装置2的母板中的端口中的图形卡上,或可以其它方式并入经配置以与计算 装置2互操作的外围装置内。GPU 10可为一个或一个以上处理器(例如一个或一个以上微 处理器)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它 等效的集成或离散逻辑电路。GPU 10可直接耦合到GPU存储器12。因此,GPU 10无需使用总线18即可从GPU 存储器12读取数据和将数据写入到GPU存储器12。换句话说,GPU 10可使用局部存储装置 (代替芯片外存储器)来在本地处理数据。这通过使GPU 10无需经由总线18读取和写入 数据(经由总线18读取和写入数据可能会经历繁重的总线业务)来允许GPU 10以较高效 的方式操作。然而,在一些例子中,GPU 10可能并不包括单独的存储器,而是经由总线18利 用装置存储器8。GPU存储器12可为一个或一个以上易失性或非易失性存储器或存储装置, 例如随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、 电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。CPU 6和/或GPU 10可将图像信息提供给显示器接口 14以用于经由显示器16 呈现。在复杂的2D和3D图形的情况下,图像信息通常由GPU 10为显示器16而产生。显 示器16可包含监视器、电视机、投影装置、液晶显示器(LCD)、等离子体显示面板、发光二极 管(LED)阵列、阴极射线管显示器、电子纸(electronic paper)、表面传导电子发射显示器 (SED)、激光电视机显示器、纳米晶体显示器或另一类型的显示单元。显示器16可集成在计 算装置2内。举例来说,显示器16可为移动电话的屏幕。或者,显示器16可为经由有线或 无线通信链路耦合到计算机装置2的独立装置。举例来说,显示器16可为经由电缆或无线 链路连接到个人计算机的计算机监视器或平板显示器。当在CPU 6上执行的软件应用程序之一想要呈现复杂的2D或3D图形图像时, CPTO与GPU 10—起操作以将图形渲染到显示器16。举例来说,在视频游戏应用程序的情 况下,软件应用程序可能想要依次呈现一系列视频帧,以向用户提供视频游戏体验。所述软 件应用程序包括定义形成待显示的图形图像的一个或一个以上曲线的命令。例如,在视频 游戏应用程序的情况下,所述视频游戏应用程序可包括定义视频游戏的场景的图形图像的 曲线的命令。举例来说,所述命令可定义若干曲线,所述曲线界定角色和对象在背景内的边 界。在一个实例中,所述软件应用程序可包括根据如在2005年7月28日的文献 “OpenVG规范,版本1.0”中定义的OpenVG来定义多个路径(即曲线)的命令。OpenVG为一 组命令,其允许使用一个或一个以上分段命令来指定2D或3D形式的图形图像。根据OpenVG 规范,分段命令可定义直线段、贝塞尔(Bezier)曲线段或椭圆弧段。OpenVG的扩展可指定 其它类型的片段。因此,本发明的技术不限于OpenVG规范中目前所定义的分段命令。此 外,尽管本发明的技术是在OpenVG的背景中进行描述,但所述技术可用于其它图形创作标 准的背景中,所述标准例如是OpenGL、Direct3D、图形装置接口(⑶I)、Quartz、QuickDraw寸。为了将曲线渲染到显示器16,CPU 6和/或GPU 10使用本发明中所描述的多阶段 细分技术将曲线细分为若干线段。在一个方面中,CPU 6可执行第一细分阶段,以将所述曲 线划分为若干线段,且GPU 10可执行第二细分阶段,以将所述曲线进一步划分为若干额外 线段。在此实例中,在第一细分阶段期间,CPU 6将曲线细分为第一组线段,其粗略表示曲
9线的形状。所述曲线的线段中的每一者表示曲线的一部分。在第二细分阶段期间,GPU 10 将曲线的由所述线段中的每一者表示的部分细分为若干额外线段,所述额外线段更精细地 表示曲线的形状。换句话说,曲线的在第一细分阶段后由仅一个线段表示的每一部分在第 二细分阶段后由一个以上线段表示。GPU 10可利用并行结构来并行地细分曲线的由两个或 两个以上线段表示的多个部分。在一些方面中,以此方式,计算装置2可利用GPU 10的加 速能力来完全并行地同时对曲线的多个部分进行操作,从而产生改进的渲染性能。CPU 6执行的细分的量可依据CPU 6上的处理负荷和/或GPU 10上的处理负荷 而变化。如上文所述,CPU 6可一次执行多个软件应用程序,每一软件应用程序均使用CPTO 的处理资源来执行计算任务。如果当图形相关应用程序想要进行图形处理时,CPU 6轻微 地负担有其它计算任务(例如,当CPU 6的处理负荷小于或等于阈值时),那么CPTO可将曲 线细分为较多线段。这将使得GPU 10的细分工作负荷减轻,因为GPU将必须把曲线的若干 部分细分为较少的额外线段。如果当图形相关应用程序想要进行图形处理时,CPU 6较重地负担有其它计算任 务(例如,当CPU 6的处理负荷大于阈值时),那么CPU 6可将曲线细分为较小数目的线段。 举例来说,当要求CPU 6运行例如使计算机与人类玩家对决的人工智能、计算游戏中的物 理效应、提供声效、显示游戏图形等任务的游戏应用程序在CPU 6上执行时,CPU 6可能会 负担较重。这将使得CPU 6的细分工作负荷减轻,但增加GPU 10的细分工作负荷,因为GPU 10将必须把曲线的若干部分细分为较多的额外线段。可同样基于GPU 10的负荷或CPU 6 与GPU 10上的负荷的组合来平衡细分处理工作负荷。以此方式,计算装置2可依据可用处 理资源来动态地平衡CPU 6与GPU 10之间的细分工作负荷。在另一实例中,曲线的多阶段细分可在GPU 10内发生。在此实例中,CPU 6不执 行对曲线的任何细分。代替的是,GPU 10内的第一计算单元执行第一细分阶段,以将曲线 划分为若干第一线段,而GPU 10内的第二计算单元执行第二细分阶段,以进一步将曲线的 由第一线段表示的部分划分为若干额外线段。在此实例中,计算装置2可利用GPU 10的加 速能力在所述两个细分阶段期间完全并行地对曲线的多个部分同时进行操作。在一些例子中,曲线的多阶段细分可包括两个以上细分阶段。举例来说,第一细分 阶段可将曲线细分为第一组线段,所述线段各表示曲线的一部分。在第二细分阶段期间,将 曲线的由第一线段中的每一者表示的部分细分为第二组线段,使得曲线的在第一细分阶段 之后仅由第一组线段中的一者表示的每一部分在第二细分阶段之后由一个以上线段表示。 在第三细分阶段期间,将曲线的由第二线段中的每一者表示的部分细分为若干额外线段。 可执行任何数目的细分阶段。细分阶段可由CPU 6、GPU 10和/或专用细分硬件(图1中 未说明)执行。许多其它元件也可包括在计算装置2中,但为说明简单和容易起见,图1中未具体 说明。举例来说,计算装置2可包括专用细分硬件,例如下文在图7中详细说明和描述的细 分硬件72。此外,图1中所说明的架构只是示范性的,因为本发明中所描述的技术可用多种 其它架构来实施。图2是更详细地说明图1的CPU 6和GPU 10的框图。CPU 6和GPU 10 一起操 作以使用本发明中所描述的多阶段细分来细分2D或3D图形图像的一个或一个以上曲线。 CPU 6包括至少一个在CPU 6上执行的软件应用程序20。在CPU 6上执行的软件应用程序
1020可为视频游戏应用程序、图形用户接口应用程序、便携式绘图应用程序、可缩放向量图形 (SVG)应用程序、用于工程设计或艺术应用的计算机辅助设计程序或另一类型的使用2D或 3D图形的软件应用程序。如上文所述,软件应用程序20可包括定义形成待显示的图形图像的一个或一个 以上曲线的命令。所述指令可符合多种图形创作标准(即应用编程接口(API))中的任一 者,例如 OpenVG、OpenGL、Direct3D、图形装置接口 (GDI)、Quartz、QuickDraw 等。举例来 说,在OpenVG的情况下,曲线由序列分段命令定义。OpenVG的每一分段命令可指定移动、直 线段、二次或三次贝塞尔曲线段或椭圆弧段。因此,每一分段命令可定义曲线的一部分。软 件应用程序20可包括用以产生任何形状的曲线的分段命令序列。为了准备用于渲染到显示器16的曲线,CPU 6和/或GPU 10使用本发明中所描 述的多阶段细分技术将曲线细分为若干线段。在一个方面中,CPU 6执行第一细分阶段,而 GPU 10执行第二细分阶段。软件应用程序20可调用图形API 26,其与GPU驱动程序21交 互以致使CPU 6执行第一细分阶段。明确地说,GPU驱动程序21调用GPU驱动程序21内 的细分模块22,以在第一细分阶段期间细分曲线。细分模块22可个别地细分曲线的每一片 段(即,命令)。换句话说,细分模块22可一次对曲线的一个片段进行操作,以将曲线的所 述片段划分为若干线段。在其它例子中,细分模块22可细分整个曲线。因此,本文中所使 用的术语“曲线”可指代对象的曲线或曲线的片段。细分模块22将曲线细分为第一组线段。所述线段中的每一者表示曲线的一部分。 在一些例子中,第一组线段可至少近似曲线的大体形状。然而,第一组线段无需提供对曲线 形状的高分辨率近似。细分模块22可(例如)将曲线细分为保存曲线的大体形状所需的 最小数目的线段。换句话说,细分模块22可细分所述曲线以产生尽可能少的线段,同时仍 保留曲线的大体形状。在另一实例中,细分模块22可在CPU 6负担较重时(例如,当CPU 6 的处理负荷超出阈值时)不执行曲线的任何细分。代替的是,CPU 6可将曲线信息提供给 GPU 10以进行多阶段细分。然而,这导致GPU 10上的工作负荷增加。因此,CPU 6可经配 置以平衡CPU 6与GPU 10之间的细分负荷。为了产生第一组线段,细分模块22计算落在曲线上的一个或一个以上顶点点。细 分模块22可(例如)使用对应于特定命令片段的数学表示来产生一个或一个以上顶点点, 所述特定命令片段可在图形创作规范(例如,OpenVG)中指定。举例来说,在使用OpenVG定 义为椭圆弧曲线的曲线的情况下,细分模块22可使用以下等式来计算顶点点x = -a*cos ( 0)(1)y = b*sin(0),(2)其中(X,y)为曲线上的顶点点在对象空间中的位置坐标,a为椭圆的半长轴、b为 椭圆的半短轴,且0 <2^1。第一组线段中的每一者均为直线段,其将每一顶点点连接 到其相邻的顶点点。在一些例子中,细分模块22或CPU 6的其它组件可如关于图7详细描 述的那样计算曲线的展开多项式表示。细分模块22可细分曲线,以将曲线均等划分为第一组线段。举例来说,细分模块 22可将曲线均等地划分为N个线段,其中N等于任何正整数值。举例来说,在以上椭圆弧曲 线实例中,细分模块22可以步长(es-ee)/N将e的值从开始角度es递增地增加到结束 角度、,以便将椭圆弧曲线均等地划分为N个相等的线段。举例来说,如果椭圆弧曲线是具有开始角度0S = O和结束角度ee = 2Ji的完整椭圆,且N = 8,那么细分模块22可产 生八个线段,其连接位于 9 o = 9 s = 0、0 ! = Ji /4、02 = Ji /2、e 3 = 3 Ji /4、04 = Ji、 e 5 = 5 JI /4、e 6 = 3 JI /2、e 7 = 7 JI /4、e8 = Qe = 2n 处的顶点点。在其它例子中,细 分模块22可自适应地细分曲线,以针对曲线的其中曲线曲率较大的部分,将曲线划分为较 多线段,且针对曲线的其中曲线曲率较小的部分,将曲线划分为较少线段。以此方式,步长 是非线性的,使得在曲线的曲率越大的地方,细分越密集。再次参考椭圆形曲线实例,细分 模块22可基于比率b/a产生e的步长,使得在e =0和e = ji附近产生较多线段(即 e的步长较小),且在e = /2和e = 3 /2附近产生较少线段(即e的步长较大)。GPU驱动程序21的细分负荷控制器24可基于CPU 6的负荷和/或GPU 10的负荷 来计算线段数目N。细分负荷控制器24可(例如)从监视CPU 6的负荷的操作系统(未图 示)接收关于CPU 6的负荷的数据。因此,CPU 6可监视其自身的工作负荷。细分负荷控 制器24可另外监视GPU 10的负荷。因为CPU 6通过将任务发送到GPU 10且监视GPU 10 的进程来控制GPU 10,所以细分负荷控制器24可基于发送到GPU 10的命令数目来确定负 荷细分模块22可使用所产生的线段来产生制图基元列表。细分模块22可(例如) 使用线段的顶点点作为用于基元的顶点点的至少一部分来形成制图基元列表。细分模块22 可产生许多制图基元中的任一者,包括点、线条带、线环、单独的线、三角形条带、三角形扇、 单独的三角形、四边形条带、单独的四边形或其它类型的多边形。CPU 6可调用图形API 26,以经由GPU驱动程序21将所述制图基元(例如三角形) 列表传送给GPU 10。图形API 26可包含一组软件指令,所述指令提供CPU 6与GPU 10之 间的接口。明确地说,GPU驱动程序21可制定并发布一个或一个以上命令,所述命令致使 GPU 10将制图基元渲染成可显示的图形信息。所述命令可包括基元的顶点点、与基元的每 一顶点点相关联的色彩信息、与基元的每一顶点点相关联的纹理信息、基元的缩放信息、基 元的旋转信息等。GPU驱动程序21可制定指定要对基元执行的操作的命令。举例来说,GPU 驱动程序21可制定指示GPU 10执行曲线的细分和/或渲染的命令。当GPU 10接收到来自CPU 6的命令时,命令解码器28对命令进行解码,且配置 GPU 10的一个或一个以上处理元件以执行命令中指定的操作。命令解码器28可另外存储 包含于GPU存储器12中的命令内或GPU 10内的一个或一个以上缓冲区(未图示)内的信 息(例如,基元或曲线信息)。命令解码器28可将一组指令加载到GPU 10的处理元件的 每一者中,所述指令致使处理元件执行特定的图形处理操作。在图2所说明的实例中,GPU 10的处理元件包括顶点着色器30、几何形状着色器32、光栅化器34和像素着色器36。在 一些例子中,GPU 10还可包括专用细分硬件38。其它处理元件也可包括于GPU 10内,但出 于说明的简单和容易起见,未在图2中具体说明。顶点着色器30、几何形状着色器32、光栅化器34和像素着色器36作为图形管线 而操作。当作为图形管线而操作时,顶点着色器30对从命令解码器28或GPU存储器12接 收到的第一组输入数据执行第一组一个或一个以上图形操作,并将第一组中间结果输出到 几何形状着色器32。几何形状着色器32对从顶点着色器30接收到的中间结果执行第二 组一个或一个以上图形操作,并将第二组中间结果输出到光栅化器34。当几何形状着色器 32执行第二组图形操作时,顶点着色器30对从命令解码器22接收到的第二组初始输入数据执行第一组图形操作。图形处理以类似方式继续,直到产生图形图像以供显示为止。此外,GPU 10可具有高度并行的结构,与CPU 6相比,所述结构提供对复杂图形相 关操作的更高效处理。尽管图2中仅说明一个图形管线,但GPU 10可包括多个类似图形管 线,其并行地对多个数据基元进行操作。换句话说,GPU 10可包括多个顶点着色器、几何形 状着色器、光栅化器和像素着色器,其可完全并行地对若干数据基元进行操作。因此,在一 些例子中,GPU 10的高度并行性质允许GPU 10比用CPU 6将图形图像直接绘制到显示器 16更快地在显示器16上产生复杂的2D或3D图形图像。顶点着色器30 —次对单个顶点进行操作。顶点着色器可经配置以接收定义单个 顶点的一个或一个以上顶点属性的序列。常规顶点属性包括位置属性、普通属性、一个或一 个以上色彩属性、一个或一个以上纹理属性、一个或一个以上明暗分布属性等。此外,顶点 着色器30可经配置以依据顶点着色器30正被用于的图形操作而接收一个或一个以上定制 顶点属性。在一些例子中,可用于定义每一顶点的顶点属性的数目可限于属性的特定最大 数目。顶点着色器30可对顶点执行许多图形操作。举例来说,顶点着色器30可经配置 以将输入顶点变换到不同坐标系中。明确地说,顶点着色器30将作为输入而被接收的顶点 的位置属性从对象坐标空间变换到装置坐标空间。对象坐标空间表示图形图像如何由软件 应用程序20的指令定义。装置坐标空间表示图形图像将如何显示在装置(例如显示器16) 上。顶点着色器30可(例如)使用仿射运算(例如旋转、平移、按比例缩放等)来变换顶 点坐标。在一个实例中,顶点着色器30可使用以下等式来变换顶点坐标
Scale _xRotate 一 y0
(x,,Y'’ 1) = (X,Y, 1)*Rotate 一 xScale _y0Trans一 xTrans一 y1
(3)其中(X',Y',1)是在装置坐标空间内的顶点位置,(X,Y,l)是在对象坐标空 间内的顶点位置,Scale_X是沿x轴的比例缩放因子,SCale_y是沿y轴的比例缩放因子, Rotate_x是围绕x轴的旋转,Rotate_y是围绕y轴的旋转,Trans_x是沿x轴的平移,且 Trans_y是沿y轴的平移。这些变量可在软件应用程序20的指令中指定,经由图形API 26 提供给GPU 10,且在顶点着色器30内由命令解码器28配置。在一些例子中,顶点着色器30可对曲线计算一次转换。换句话说,顶点着色器30 可计算等式的用于定义曲线的变换,而不是计算针对路径中的每个顶点点的变换。在上述 椭圆弧曲线实例的情况下,顶点着色器30可变换曲线以将变换后的椭圆弧曲线的数学表 示定义为x' = xt-a*cos( 0 ) *Sf(4)y' = yt+b*sin( 0 )*Sf,(5)其中(x',y')是在装置坐标空间内的位置坐标,xt是沿x轴的平移,yt是沿y 轴的平移,且Sf是变换的比例因子。等式(4)和(5)假定顶点着色器30仅平移和按比例 缩放所述曲线(即,曲线不旋转)。在一些例子中,代替顶点着色器30,CPU 6可执行变换。顶点着色器30可对输入顶点属性执行许多其它操作。顶点着色器30可执行一个 或一个以上操作,以改变顶点的色彩属性中的一者或一者以上、顶点的纹理属性中的一者 或一者以上、顶点的明暗分布属性中的一者或一者以上,等等。顶点着色器30可经配置以
13便以相同方式改变每个顶点,或仅改变具有某些特性的顶点。因此,顶点着色器30可经配 置以对一个顶点执行一组操作,且接着经重新配置以对下一顶点执行不同的一组操作。几何形状着色器32对基元而不是个别顶点点进行操作。几何形状着色器32接收 一串顶点点(或定义顶点点的属性)且形成基元。在三角形基元的情况下,几何形状着色 器32可输入三组顶点属性,其定义三角形基元的三个顶点点。在一些情况下,几何形状着 色器32可另外输入邻近基元的顶点点的顶点属性。几何形状着色器32可丢弃基元,或使 用输入基元的顶点点的顶点属性产生一个或一个以上新基元。在一些情况下,GPUlO可不 包括几何形状着色器32。光栅化器34基于顶点属性将由几何形状着色器32或顶点着色器(在无几何形状 着色器32的情况下)输出的基元转换成像素。光栅化器34可对基元执行裁剪操作,并为 像素着色器36准备基元。光栅化器34可确定屏幕内的哪些像素在对象的几何形状内,且 因此需要绘制。此外,光栅化器34执行顶点数据的内插以产生像素数据。光栅化器34的 输出被提供给像素着色器36。像素着色器36 (有时称为断片着色器)对将显示于显示器 16上的每一像素执行图形操作。像素着色器36可(例如)执行每像素纹理化、雾化和上色 操作,以产生要显示于每一像素位置处的色彩值。根据本发明的技术,GPU 10可经配置以执行至少第二细分阶段,以便将曲线细分 为若干额外线段。举例来说,着色器30、32或36可执行第二细分阶段,以便将曲线的由来 自CPU 6的线段表示的部分再分为更准确地表示曲线的所述部分的若干额外线段。作为另 一实例,专用细分硬件38可执行第二细分阶段,以便将曲线的由来自CPU 6的线段表示的 部分再分为更准确地表示曲线的所述部分的若干额外线段。在任一情况下,第二细分阶段 均导致曲线的由CPU 6产生的线段 中的每一者所表示的部分被再分为第二组更详细的线 段(或子片段)。着色器30、32或36或细分硬件38将原始曲线细分为若干额外线段。换 句话说,着色器30、32或36或细分硬件38并不将CPU 6所产生的线段划分为若干额外线 段,而是划分为由软件应用程序20定义的实际曲线。以此方式,曲线的在第一细分阶段之 后仅由一个线段表示的每一部分在第二细分阶段之后由一个以上线段表示。额外线段产生 对曲线的较佳表示,例如对曲线的较高分辨率表示。着色器30、32或36或细分硬件38可基于在变换期间执行的按比例缩放的量而执 行第二细分阶段。明确地说,着色器30、32或36或细分硬件38将曲线的由线段中的每一 者表示的部分细分为的额外线段的数目是比例因子的函数。比例因子是在将顶点点从对象 坐标空间变换到装置坐标空间期间发生的按比例缩放的量的近似值。CPU 6可计算比例因 子,并将其提供给GPU 10的一个或一个以上组件,以用于确定用于第二细分阶段的额外线 段的数目。CPU 6可使用多种不同技术中的任一种来计算比例因子。所述技术可产生比例 因子的不同值,但所有的所得值均大体表示变换期间执行的按比例缩放的量。CPU 6可使用 变换矩阵来计算比例因子。举例来说,CPU 6可将比例因子计算为(即 在坐标空间的变换期间使用的比例缩放变量)的相乘。在另一实例中,CPU 6可将比例缩 放因子计算为Scale_X和SCale_y的最大值。在3D的情况下,CPU 6可通过视口比例因子 和/或变换矩阵来计算比例因子。着色器30、32或36或细分硬件38随比例因子的增加而将曲线的由线段表示的部 分再分为更多的额外线段。因此,可依据比例因子而计算曲线的每一部分被细分为的额外线段(或子片段)的数目M。依据比例因子来再分曲线的所述部分允许着色器30、32或36 或细分硬件38在曲线被严重按比例缩放时保留曲线的较多细节,同时在曲线未被按比例 缩放或仅被轻微地按比例缩放时允许曲线的较少细节。以此方式,本发明中所描述的多阶 段细分技术允许适应于图形图像的分辨率要求的动态细分。当需要高分辨率(例如,较大 的按比例缩放)时,着色器30、32或36或细分硬件38较多地细分曲线,而当高分辨率不必 要(例如,较少按比例缩放或无按比例缩放)时,着色器30、32或36或细分硬件38较少地 细分曲线,且节省了 GPU的处理资源。因此,本发明的技术并不是将曲线过度细分以确保质 量,而是基于按比例缩放来按需要产生额外线段。因此,并不经由图形管线发送额外线段, 因此通过以更高效的方式利用计算资源而改进管线性能和功率消耗。将曲线的每一部分细分为的额外线段或子片段的数目可被作为全局常数而加载 到着色器30、32或36或细分硬件38中。着色器30、32或36或细分硬件38将曲线的由 CPU 6提供的线段中的一者所表示的部分细分为M个额外线段。由着色器30、32或36或细 分硬件38产生的M个额外线段表示对原始曲线的进一步细分。因此,不是用CPTO产生的 单个线段表示曲线的所述部分,而是由M个线段来表示曲线的所述部分。同样,所述M个子 片段表示原始曲线的细分,而不是由CPU 6提供的线段的细分。以此方式,着色器30、32或 36或细分硬件38进一步近似所述曲线,而不是进一步近似由CPU 6提供的线段。关于由上述等式(1)和(2)定义的椭圆弧曲线,着色器30、32或36或细分硬件38 可将曲线的由来自CPU 6的线段中的一者表示的部分划分为若干额外线段。举例来说,着 色器30、32或36或细分硬件38可将曲线的与从位于θ ^ = 0处的顶点到位于θ i = π/4 处的顶点的线段对应的部分划分为M个额外线段。举例来说,如果M = 4,那么着色器30、32 或36或细分硬件38将曲线的从位于θ ^ = O处的顶点到位于Q1 = π/4处的顶点的部分 进一步细分为四个额外线段。明确地说,在此实例中,着色器30、32或36或细分硬件38可 产生四个额外线段,其连接位于θ QQ = θ Q = 0,θ Q1 = Ji /16,θ02 = π /8,θ Q3 = 3 π /16, θ O4= Q1= ^/4处的顶点点。可在如上述等式⑷和(5)中提供的变换之后,使用椭圆 形曲线的数学表示来计算所述四个额外线段的顶点点。GPU 10可用类似方式完全并行地细分曲线的由CPU 6产生的其它七个线段44所 表示的其它曲线部分。因此,GPU 10同时对曲线的多个部分执行第二细分阶段。以此方式, 计算装置2可利用GPU 10的并行结构来完全并行地对曲线的由CPU 6产生的线段中的其 它线段所表示的部分执行第二细分阶段。此做法使得GPU加速对曲线的细分,从而改进渲 染性能。在一个例子中,几何形状着色器32可执行对曲线的多个部分的第二细分阶段。如 上文所述,几何形状着色器32 —次对多个顶点(例如,基元)进行操作,而不是对个别顶点 进行操作。由此,几何形状着色器32可输出多个顶点点,从而在单个步骤中将曲线的部分 细分为M个额外线段。在一些情况下,几何形状着色器32可经配置以使得将曲线的每一不 同部分划分为不同数目的额外线段,且因此可基于曲线的部分的形状动态地细分曲线的所 述部分。更详细地参看图3描述使用几何形状着色器32将曲线的所述部分细分为若干额 外线段。在另一例子中,顶点着色器30可执行对曲线的若干部分的第二细分阶段。举例来 说,当GPU 10不包括几何形状着色器32时,可能会是这种情况。如上文所述,顶点着色器
1530 一次对单个顶点进行操作,且因此通常无法产生额外顶点。然而,顶点着色器30可经配 置以输入一个或一个以上定制顶点属性,以执行第二细分阶段。明确地说,顶点着色器30 可经配置以使得经输入以定义顶点的顶点属性实际上定义线段而不是线段的单个顶点。以 此方式,顶点着色器30可被视为输入“虚拟顶点”,因为其实际上并不表示单个顶点。举例 来说,顶点着色器30可经配置以输入包括线段的开始顶点属性和结束顶点属性的顶点属 性。开始顶点属性表示线段开始于的顶点,且结束顶点属性表示线段结束于的顶点。顶点 着色器30对开始顶点属性和结束顶点属性进行操作,以将曲线的所述部分细分为若干额 外线段。参看图4更详细描述使用顶点着色器30将曲线的所述部分细分为若干额外线段 的实例。在另一例子中,像素着色器36可执行对曲线的若干部分的第二细分阶段。与顶点 着色器30 —样,像素着色器36 —次对单个像素进行操作。因此,像素着色器36经配置以 输入一个或一个以上定制像素属性,其定义线段而不是线段的单个像素。像素着色器36产 生进一步定义额外线段的额外像素属性。在另一例子中,细分硬件38可执行对曲线的若干部分的第二细分阶段。细分硬件 38可(例如)包括一个或一个以上乘法与累加(MAC)运算单元以执行第二细分阶段。在 一个例子中,细分硬件38可由MAC运算单元的管线化阵列形成,所述MAC运算单元可配置 以如下文详细描述那样计算不同次数的多项式。在此情况下,细分硬件38输入来自CPU 6 的多项式系数以及沿曲线的至少一个位置(将再所述位置处产生顶点点)。沿曲线的将产 生顶点点的位置可(例如)在贝塞尔曲线的情况下为值t,或在椭圆弧曲线的情况下为值 θ。细分硬件38的MAC运算单元对多项式系数进行运算,以在特定位置处产生顶点点的一 个或一个以上坐标。细分硬件38的操作大体上类似于下文详细描述的细分硬件电路72的 操作。尽管上文所描述的多阶段细分是分布于CPU 6与GPU 10之间,但多阶段细分可在 GPU 10内执行且/或分布于GPU 10与专用细分硬件(例如图7中所说明的细分硬件72) 之间。因此,CPU 6不必执行对曲线的任何细分。代替地,GPU 10内的第一计算单元执行第 一细分阶段,以将曲线划分为若干线段,而第二计算单元与GPU 10执行第二细分阶段,以 进一步将曲线划分为若干额外线段。举例来说,细分可在顶点着色器30、几何形状着色器 32、像素着色器36和细分硬件38的任一组合之间或在那些组件与专用细分硬件(例如细 分硬件72)之间划分。尽管上文将多阶段细分技术描述为包括两个阶段,但多阶段细分技术可包括两个 以上阶段。举例来说,多阶段细分可包括第一细分阶段,其可将曲线细分为第一组线段; 第二细分阶段,其将曲线的由第一组线段中的每一者表示的部分细分为第二组线段;以及 第三细分阶段,其将曲线的由第二组线段中的每一者表示的部分细分为额外线段。可执行 任一数目的细分阶段。细分阶段可分布于CPU 6、顶点着色器30、几何形状着色器32、像素 着色器36和/或细分硬件38、72(图7)中的任一者之间。图2中说明的架构仅是示范性的,因为本发明中所描述的技术可用多种其它架构 来实施。举例来说,GPU 10可利用单个着色器核心,其可执行归于顶点着色器30、几何形状 着色器32和像素着色器36的功能。单个着色器核心可(例如)基于图形操作所处的管线 的级而由命令解码器28配置以用作顶点着色器30、几何形状着色器32和像素着色器36。作为另一实例,细分硬件38可不位于GPU 10内,而是作为计算装置2(图1)的单独组件, 且如图7中所说明经由总线18耦合到GPU 10。此外,图1中所说明的特征可通过硬件和/ 或软件组件的任一合适组合来实现。图3A到图3D是说明曲线40的实例两阶段细分的图。图3A说明如由软件应用程 序20 (图2)定义的曲线40。曲线40被定义为以下四个贝塞尔曲线段的序列从点A到点 B的第一贝塞尔曲线段42A、从点B到点C的第二贝塞尔曲线段42B、从点C到点D的第三贝 塞尔曲线段42C以及从点D返回到点A的第四贝塞尔曲线段42D。为了将曲线40渲染到显 示器16,CPU 6和/或GPU 10使用本发明所描述的多阶段细分技术将曲线40细分为若干 线段。如上文所述,在一些方面中,CPU 6的细分模块22可一次细分曲线40的一部分。在 图3B到图3D所说明的细分的实例中,CPU 6和/或GPU 10细分贝塞尔曲线段42A。CPU 6 和/或GPU 10可用类似方式来细分贝塞尔曲线段42B到42D。图3B说明曲线40的由点A与点B之间的贝塞尔曲线段42A定义的部分。贝塞尔 曲线段42A可由软件应用程序20定义为使用参数表示来定义的多项式曲线。明确地说,贝 塞尔曲线段42A可表示为(x(t),y(t))形式的点集合,其中x(t)和y(t)是t的多项式,且 t从0到1连续变动。图3中所说明的贝塞尔曲线段42A是三次贝塞尔曲线段,其可在对象 坐标空间中由以下等式表示x(t) = xs*(l-t)3+3*(l-t)2*t*xcl+3*(l_t)*t2*xc2+t3*xe(6)y(t) = ys*(l-t)3+3*(l-t)2*t*xcl+3*(l_t)*t2*yc2+t3*ye,(7)其中(xs,ys)是贝塞尔曲线段42A的开始点,(xe,ye)是贝塞尔曲线段42A的结束 点,且(Xca,ycl)和(χ ,yc2)是两个内部控制点。第一计算单元将贝塞尔曲线段42A(即,曲线40的位于点A与点B之间的部分) 细分为多个线段44A到44G(统称为“线段44”)。图3C说明由第一计算单元细分之后的贝 塞尔曲线段42A。在一个例子中,执行第一细分阶段的第一计算单元可为CPU 6的细分模 块22。在其它例子中,第一计算单元可为着色器30、32或36或细分硬件38中的一者。在 图3C所说明的实例中,第一计算单元将贝塞尔曲线段42A细分为七个线段44。明确地说, 第一计算单元使用上述等式(6)和(7)来计算沿贝塞尔曲线段42A的顶点点。当第一计算单元为细分模块22时,细分负荷控制器24可配置细分模块22以依据 CPU 6的负荷、GPU 10的负荷或其组合而将曲线细分为特定数目的线段。细分负荷控制器 24可(例如)在CPU 6的负荷小于或等于阈值时增加细分模块22所产生的线段的数目, 且在CPU 6的负荷超出阈值时减少线段的数目。在图3C所说明的实例中,细分负荷控制器 24配置细分模块22,以将贝塞尔曲线段42A细分为七个线段44。细分负荷控制器24可配 置细分模块22,以使用上述细分负荷平衡技术将贝塞尔曲线段42A细分为更多线段或更少 线段。在图3C的实例中,线段44粗略地表示曲线(即贝塞尔曲线段42A)的形状。为了将贝塞尔曲线段42A细分为若干线段44,第一计算单元计算开始点(xs,ys) (其等于顶点点Atl)与结束点(^,yj (其等于顶点点A7)之间的一个或一个以上顶点点。 为了这样做,第一计算单元可使用表示贝塞尔曲线段42A的等式(即等式(6)和(7))来计 算Atl(即A)与~(即B)之间的顶点点。在图3C所说明的实例中,第一计算单元计算顶点 点A1到A60 A0和A7是已知的,因为其分别等于开始点(xs, ys)和结束点(xe, ye)。第一计算单元接着将贝塞尔曲线段42A表示为所产生的顶点点之间的多个线段
1744。明确地说,第一计算单元将贝塞尔曲线段42A表示为从顶点点Ac^其与图3A和图3B的 点A相同)到顶点点A1的线段44A、从顶点点A1到顶点点A2的线段44B、从顶点点A2到顶 点点A3的线段44C等等。在图3C所说明的实例中,第一计算单元将贝塞尔曲线段44A均等地划分为若干线 段44。换句话说,第一计算单元以恒定的步长递增地增加t。然而,在一些例子中,第一计算 单元可使用自适应细分技术,基于曲线的形状(即,针对每一线段以不同步长)来细分贝塞 尔曲线段44A。举例来说,第一计算单元可在曲线的曲率较大(例如,在所述实例中的顶点 点八5与~之间)时以较小的步长递增t,而在曲线的曲率较小(例如,在点Atl与A5之间) 时以较大的步长递增t。不作任何进一步细分而渲染线段44可能会对贝塞尔曲线42A的一些部分(尤其 是在顶点点之间)导致不良图像质量。这在曲线被放大到高分辨率时(例如,在由 GPU 10变换到装置坐标空间中期间应用大比例因子时)尤其如此。因此,第二计算单元执 行第二细分阶段,以将贝塞尔曲线段42A细分为若干额外线段。第二计算单元可(例如) 为着色器30、32或36或细分硬件38中的一者。如下文将更详细地描述,第二细分阶段细 分贝塞尔曲线段42A的由线段44表示的部分而不是实际上细分线段44。出于实例目的,将 根据细分贝塞尔曲线段42A的由线段44A表示的部分来描述将贝塞尔曲线段42A细分为若 干额外线段。然而,第二计算单元可用类似方式完全并行地细分线段44B到44G。在执行第二细分阶段之前,GPU 10的顶点着色器30或CPU 6将曲线从对象坐标空 间变换到装置坐标空间。顶点着色器30或CPU 6可(例如)使用上述等式(3)来变换定 义曲线的点,而不是转换每一线段的每一顶点点。顶点着色器30或CPU 6可将开始点(xs, ys)、结束点(xe,ye)和内部控制点(x&yj和(x。2,y。2)变换到装置坐标空间(x' s,y' s)、 (χ' e,y' e)> (χ' cl,y'。》和(χ'。2,y ‘。2)中。以此方式,贝塞尔曲线42A的所述部 分被变换到装置坐标空间中,且可定义为χ ‘ (t) = χ ‘ s*(l-t)3+3*(l_t)2*t*x ‘ cl+3*(l_t)*t2*x ‘ c2+t3*x ‘ e (8)y ‘ (t) = y ‘ s* (l_t) 3+3* (l_t) 2*t*x ‘ cl+3* (l_t) *t2*y ‘ c2+t3*y ‘ e, (9)在变换之后,第二计算单元执行第二细分阶段,以将贝塞尔曲线段42A的由线段 44A( S卩,贝塞尔曲线段42A的从乂到A1的部分)表示的部分细分为若干额外线段。贝塞 尔曲线段42A的由线段44A表示的部分是贝塞尔曲线段42A的在顶点点A0与A1之间的部 分。在图3D所说明的实例中,第二计算单元将贝塞尔曲线段42A的在顶点点A0与A1之间 的部分细分为四个线段。明确地说,第二计算单元在顶点点A0与A1之间产生顶点点k0i、k02 和A03 0第二细分阶段使得贝塞尔曲线段42A在顶点点A0与A1之间的部分由四个线段而不 是仅单个线段表示,因此相对于曲线的部分提供更多细节。如图3D所说明,在第二细分阶 段期间产生的额外线段提供对曲线(尤其是在顶点点A5与A7之间)的较佳表示。在一个方面中,第二计算单元将曲线的由所述线段中的每一者表示的部分细分为 的额外线段的数目可为比例因子的函数。第二计算单元随比例因子的增加而将曲线的由线 段44表示的部分再分为更多的额外线段。依据比例因子而再分曲线的所述部分允许第二 计算单元在曲线被严重按比例缩放时保留曲线的较多细节,同时在曲线未被按比例缩放或仅被轻微按比例缩放时允许曲线的较少细节。所述技术可以相似方式应用于OpenVG中所定义的其它曲线,例如根据等式(1)和 ⑵定义的椭圆弧曲线,或包括(xs,ys)处的开始点、结束点(xe,ye)和控制点(x。,y。)且可 在对象坐标空间中定义如下的二次贝塞尔曲线x(t) = xs*(l-t)2+2*(l_t)*t*xc+t2*xe ;(10)y(t) = ys*(l-t)2+2*(l_t)*t*yc+t2*ye。(11)此外,可配合通过任何扩展而添加到OpenVG标准的任何曲线定义而利用所述技 术。同样,可使用所述技术来细分使用其它图形创作标准定义的曲线。图4A到图4D是说明曲线的多阶段细分的实例的图。图4A说明在点A与点B之 间的贝塞尔曲线段42A。如上文参看图3所述,可在对象坐标空间中由上述等式(6)和(7) 表示贝塞尔曲线段42A。第一计算单元将贝塞尔曲线段42A( S卩,曲线40的位于点A与点B之间的部分) 细分为多个线段44A到44G(统称为“线段44”)。在一个例子中,执行第一细分阶段的第一 计算单元可为CPU 6的细分模块22。在其它例子中,第一计算单元可为着色器30、32或36 或细分硬件38中的一者。图4B说明由第一计算单元细分之后的贝塞尔曲线段42A。在图 4B所说明的实例中,第一计算单元计算顶点点A0到A7以将贝塞尔曲线段42A细分为七个 线段44A到44G,其使顶点点中的每一者与相邻顶点点连接。如上文在图3A到3D中所述,不作任何进一步细分而渲染线段44可能会对贝塞尔 曲线42A的至少一些部分(尤其是在顶点点A5与A7之间)导致不良图像质量。因此,第二 计算装置执行第二细分阶段,以将贝塞尔曲线段42A细分为若干额外线段。出于实例目的, 将参看细分贝塞尔曲线段42A的由线段44A表示的部分来描述将贝塞尔曲线段42A细分为 若干额外线段。然而,第二计算单元可用类似方式完全并行地细分贝塞尔曲线段42A的由 线段44B到44G表示的部分。在执行第二细分阶段之前,顶点着色器30或GPU 10或CPU 6的某一其它组件将 贝塞尔曲线段42A从对象坐标空间变换到装置坐标空间,以产生在上文等式(10)和(11) 中定义的数学表示。在变换到装置坐标空间中之后,第二计算单元执行第二细分阶段,以将 贝塞尔曲线段42A的由线段44A( S卩,贝塞尔曲线段42A的从Atl到A1的部分)表示的部分 细分为若干额外线段。举例来说,在顶点着色器30的情况下,顶点着色器30可经配置以输入实际上定义 线段而不是线段的单个顶点的顶点属性。举例来说,顶点着色器30可经配置以输入包括 分别表示线段开始的顶点和结束的顶点的线段的开始顶点属性(例如Atl)和结束顶点属性 (例如A1)的顶点属性。顶点着色器30可计算位于顶点Atl与A1之间的至少一个额外顶点。 如上文所述,可用于定义每一顶点的顶点属性的数目可限于属性的特定最大数目。因此,顶 点着色器30可仅能够在单遍中计算有限数目的额外顶点点。图4C说明在第二细分阶段之 后的贝塞尔曲线段42A。在图4C所说明的实例中,顶点着色器30可仅能够计算表示新顶点 点Atll的一个额外顶点属性。因此,顶点着色器30可仅将贝塞尔曲线42A的部分细分为一 组额外的线段。然而,在其它例子中,顶点着色器30可在每遍计算一个以上额外顶点属性。在一些情况下,最大数目的可用顶点属性可足以完全细分贝塞尔曲线段42A的所 述部分。然而,如果最大数目的可用顶点属性不够,那么顶点着色器30可以递归方式(即,通过执行第三细分阶段)计算更多额外线段。换句话说,顶点着色器30可以递归方式(即, 第二细分阶段后接第三细分阶段)执行一个以上细分阶段。举例来说,在第二细分阶段之 后,顶点着色器30可输入新的一组顶点属性,其包括表示在第二细分阶段期间产生的线段 的开始顶点属性A0和结束顶点属性Atll。顶点着色器30在第三细分阶段期间计算顶点A0与 A01之间的至少一个额外顶点。图4D说明在由顶点着色器30进行的第三细分阶段之后的 贝塞尔曲线段42A。在图4D所说明的实例中,顶点着色器30现在已将贝塞尔曲线段42A的 在Atl与A1之间的部分细分为四个线段而不是一个线段。以此方式,顶点着色器30可以递 归方式将曲线的所述部分细分为若干额外线段,其提供对曲线42A(尤其是在顶点点A5与 A7之间)的较佳表示。尽管在上述实例中顶点着色器30执行第二和第三细分阶段,但GPU 10的其它计算单元也可执行第二和第三细分阶段。举例来说,第二和第三细分阶段可由顶 点着色器30、几何形状着色器32、像素着色器36和细分硬件38的任一组合执行。图5是说明根据本发明中所描述的多阶段细分技术来细分曲线的计算装置的实 例操作的流程图。计算装置2的第一计算单元将曲线细分为若干第一线段(50)。为了产生 第一组线段,第一计算单元计算位于曲线上的一个或一个以上顶点点。所述第一计算单元 可(例如)使用曲线的数学表示(例如,曲线的多项式表示)来产生一个或一个以上顶点 点。所述第一线段将顶点点中的每一者连接到相邻的顶点点。线段中的每一者表示曲线的 一部分。在一个实例中,第一计算单元可为CPU 6的细分模块22。在此情况下,细分负荷控 制器24可基于CPU 6上的处理负荷和/或GPU 10上的处理负荷而控制由细分模块22执 行的细分的量。在另一实例中,第一计算单元可为GPU 10的组件中的一者(例如,着色器 30,32或36或细分硬件38中的一者)。第一计算单元将线段提供给第二计算单元(52)。举例来说,当第一计算单元是细 分模块22时,细分模块22可使用线段的顶点点来产生制图基元的列表,并将所述制图基元 经由图形API 26和GPU驱动程序21提供给GPU 10。细分模块22可产生许多制图基元中 的任一者,包括点、线条、线环、单独的线、三角形条带、三角形扇、单独的三角形、四边形条 带、单独的四边形或其它类型的多边形。第一或第二计算单元将曲线从对象坐标空间变换到装置坐标空间(54)。举例来 说,GPU 10的顶点着色器30可使用上文的等式(3)将曲线变换到装置坐标空间中。所述 变换可每曲线计算一次。换句话说,可在用于定义曲线的点中的每一者处计算变换,而不是 计算针对路径中的每个顶点点的变换。第一或第二计算单元计算表示在变换中执行的按比 例缩放的量的比例因子(56)。可基于在变换中所使用的比例缩放变量(例如,等式(3)的
SCale_y)来计算所述比例因子。第二计算单元执行第二细分阶段,以将曲线的所述部分细分为若干额外线段 (58)。第二计算单元可(例如)为GPU 10的组件中的一者。因此,GPU 10计算由第一计 算单元计算的每一线段的顶点点中的每一者之间的额外顶点点。可(例如)在变换之后使 用曲线在装置坐标空间内的数学表示来计算额外的顶点点。GPU 10因此以若干线段而不是 由第一计算单元产生的单个线段来表示曲线的由第一计算单元产生的线段所表示的部分 中的每一者。以此方式,由GPU 10执行的第二细分阶段产生曲线的额外线段以更准确地表 示所述曲线。在一些例子中,针对曲线的若干部分而产生的额外线段的数目可为比例因子 的函数,使得随着比例因子增加,计算更多的额外线段以保留更多细节。
20
GPU 10可使用一个或一个以上着色器(例如,顶点着色器30、几何形状着色器32 或像素着色器36)来执行第二细分阶段。GPU 10的着色器可并行地细分曲线的一个以上 部分。因此,GPU 10同时对曲线的多个部分执行第二细分阶段。这样做使得GPU加速对曲 线的细分,从而改进渲染性能。在其它例子中,GPU 10内的细分硬件38可执行第二细分阶 段。在其它例子中,GPU 10外部的细分硬件可执行第二细分阶段,例如图7的细分硬件72。 在执行第二细分阶段之后,GPU 10使用经细分的线段来将曲线渲染到显示器(59)。尽管将 图5的流程图描述为两阶段细分,但所述技术可经扩展而包括两个以上细分阶段。图6是说明执行细分的着色器(例如图2的顶点着色器30)的实例操作的流程图。 像素着色器36可使用类似技术将曲线细分为若干额外线段。顶点着色器30输入定义线段 的多个顶点属性(60)。举例来说,顶点着色器30可输入顶点属性,其包括表示线段开始于 的顶点点的位置坐标的开始顶点属性(例如Atl)和表示线段(其表示顶点)结束于的顶点 点的位置坐标的结束顶点属性(例如A1)。以此方式,由顶点着色器30输入的顶点属性表 示一线段而不是单个顶点点。顶点着色器30计算顶点A0与A1之间的额外顶点点的坐标,以将曲线细分为额外 线段(62)。顶点着色器30可将额外顶点点计算为另一顶点属性。顶点着色器30可(例 如)在变换之后使用曲线在装置坐标空间中的数学表示来计算顶点点Atl与A1之间的额外 顶点点的坐标。顶点着色器30确定顶点着色器30是否已将曲线的所述部分细分为所要数 目(M)的额外线段(64)。如果顶点着色器30在第一遍期间产生的所要线段数目小于M,那么顶点着色器30 确定是否已达到最大顶点属性数目(66)。如上文所述,顶点属性的数目可限于特定的最大 顶点属性数目。因此,顶点着色器30可仅能够在单遍中计算有限数目的额外顶点点。如果尚未达到最大顶点属性数目,那么顶点着色器30计算额外顶点点的另一坐 标(62)。然而,如果已达到最大顶点属性数目,那么顶点着色器30输出所计算的顶点属性 (68)。顶点着色器30可输入表示在第一遍期间产生的额外线段中的一者的新的一组顶点 属性(60)。换句话说,最大数目的可用顶点属性不足以产生足够的额外顶点点来完全细分 曲线的所述部分。顶点着色器30可因此以递归方式(S卩,通过执行一个以上细分阶段)来 计算更多的额外线段。如果在第一遍期间产生的所要线段数目大于或等于M,那么顶点着色器30输出所 计算的顶点属性(68)。换句话说,最大数目的可用顶点属性足以产生足够的额外顶点点来 完全细分曲线的所述部分。顶点着色器30接着输入表示由CPU 6产生的另一线段的多个 顶点属性(60)。图7是说明根据本发明中所描述的技术来执行细分的另一实例计算装置70的框 图。图7的计算装置70大体上类似于图1的计算装置2,区别仅在于图7的计算装置70不 包括GPU 10。代替地,计算装置70包括专用细分硬件电路72,其如下文详细描述那样执行 第二细分阶段。图形渲染功能可由CPU 6而不是GPU 10执行。如上文详细描述,为了将曲线渲染到显示器16,CPU 6执行第一细分阶段以将曲 线划分为第一组线段,其各表示曲线的一部分。明确地说,CPU 6计算沿曲线的定义线段的 顶点点。CPU 6可使用与曲线类型相关联的等式来计算顶点点,例如在椭圆弧曲线的情况下 使用等式⑴和(2)、在三次贝塞尔曲线的情况下使用等式(6)和(7)或在二次贝塞尔曲线的情况下使用等式(10)和(11)来计算顶点点。CPU 6在第一细分阶段期间执行的细分的 量可依据CPU 6上的处理负荷而变动。CPU 6可包括图2所说明的CPU 6的所有特征。在第二细分阶段期间,细分硬件电路72将曲线的由线段中的每一者表示的部分 细分为若干额外线段,所述额外线段更精细地表示曲线的形状。细分硬件电路72可(例 如)包括一个或一个以上乘法与累加(MAC)运算单元,以执行第二细分阶段。在一个例子 中,细分硬件电路72可由MAC运算单元的管线化阵列形成,所述MAC运算单元可配置以如 下文详细描述那样计算不同次数的多项式。在此情况下,细分硬件72输入来自CPU 6的多 项式系数和沿曲线的至少一个位置(将在所述位置处产生顶点点)。沿曲线的待产生顶点 点的位置可(例如)在贝塞尔曲线的情况下为值t,或在椭圆弧曲线的情况下为值θ。细 分硬件电路72的MAC运算单元对多项式系数进行运算,以产生特定位置处的顶点点的一个 或一个以上坐标。CPU 6可计算曲线的展开多项式表示,以确定待加载到细分硬件电路72内的多项 式系数。换句话说,CPU 6可将曲线表示为展开的多项式P(X)ρ (χ) =Σ (Kjxi),(12)其中Ki是多项式的第i次项的多项式系数,χ是变量,i = 0、1、…、n-l、n,且η 是多项式的次数。CPU 6可使用多项式展开来计算曲线的展开多项式表示。举例来说,CPU 6可对等式(10)和(11)执行多项式展开,以将二次贝塞尔曲线的展开多项式表示计算为px (t) = P2x*t2+Plx*t+P0x,(13)Py(t) = p2y*t2+piy*t+p0y,(14)其中P2x、Plx、P。x、P2y、Ply 和 P。y 是定义为 P2x = (xs-2*xc+xe)、Plx = 2*(xc-xs)、P0x =xs>P2y = (ys_2*y。+ye)、Ply = 2*(y。-ys)和 Ptly = ys 的多项式系数。在其它例子中,CPU 6 可使用许多多项式近似算法中的任一者来计算多项式表示。在使用等式(1)和(2)定义的 椭圆弧曲线的情况下,CPU 6可使用泰勒(Taylor)展开、最小平方近似或另一近似技术来 计算多项式表示。举例来说,CPU 6可通过用多项式S2* θ 2+S,θ +S0近似表示sin( θ )且 用c2* θ θ +Ctl近似表示cos( θ )来计算椭圆弧曲线的展开多项式表示,其中SySpSp C2, C1和Ctl是使用特定近似技术计算的多项式系数。此外,CPU 6可根据上述等式(3)将曲线从对象坐标空间转换到装置坐标空间。 CPU 6可在计算曲线的多项式表示之前或在计算曲线的多项式表示之后,将曲线从对象坐 标空间变换到装置坐标空间。如上文所述,CPU 6可每曲线计算所述变换一次。换句话说, CPU 6可计算用于定义曲线的点中的每一者处的变换,而不是计算针对沿曲线的每个顶点 点的变换。举例来说,在二次贝塞尔曲线的情况下,CPU 6可计算开始点(xs,ys)、结束点 (xe, ye)和控制点(x。,y。)的变换,而不是计算针对第一组线段的所计算的顶点点中的每一 者的变换。在其它例子中,细分硬件电路72或计算装置70的某一其它组件可执行所述变 换。在变换期间,CPU 6可确定比例因子,其近似在变换期间执行的按比例缩放的量。 在一些例子中,在第二细分阶段期间发生的细分的程度可为比例因子的函数。举例来说, CPU 6可基于比例因子来计算将曲线的每一部分细分为的额外线段的数目。在CPU 6计算 出将曲线的每一部分细分为的额外线段的数目之后,CPU 6确定沿曲线的所述部分的将产 生新顶点点的位置。举例来说,对于椭圆形曲线的从9(| = 0到θ1= π/4的将划分为四
22个额外线段的部分来说,CPU 6可确定需在位置θ Μ = π /16、θ02 = Ji /8、θ 03 = 3 π /16 处计算新顶点,以将曲线的从θ ^ = 0到θ工=π /4的部分均等地划分为四个额外线段。CPU 6为细分硬件电路72提供用于曲线的展开多项式表示的多项式系数和曲线 上将产生顶点点坐标的一个或一个以上位置。在上述椭圆弧曲线实例中,曲线上将产生新 顶点点的坐标的位置是值Gc^etl2* θ Μ或对所述值的十进制近似。CPU 6可将所计算的 多项式系数和位置直接加载到细分硬件电路72中,或将指针编程到细分硬件电路72中,在 此情况下,细分硬件电路72加载多项式系数和位置。在任一情况下,基于正被细分的曲线 的类型而将多项式系数和位置动态地加载到细分硬件电路72中。如下文将详细描述,细分硬件电路72使用CPU 6所指定的多项式系数和位置来计 算指定位置处的顶点点的坐标。以此方式,计算装置70可使用细分硬件电路72将细分工 作负荷的一部分从CPU 6卸载到细分硬件电路72。在一些例子中,细分硬件电路72可(例 如)在CPU 6正经历高处理负荷时执行所有的细分。细分硬件电路72可将顶点点的坐标 输出到CPU 6,CPU 6可执行额外图形渲染操作以将曲线呈现在显示器16上。或者,CPU 6 或细分硬件电路72可将新的顶点点存储在装置存储器8中以供稍后处理。在细分硬件电 路72位于GPU 10内的例子(例如图2所说明的例子)中,细分硬件电路72可将顶点点的 坐标输出到GPU 10的其它组件,例如顶点着色器30、几何形状着色器32或像素着色器36。许多其它组件也可包括于计算装置70内,但为说明简单和容易起见,图7中未具 体说明。举例来说,计算装置70可包括GPU(例如图IWGPU 10),其经由总线18耦合到其 它组件。此外,图7所说明的架构只是示范性的,因为本发明中所描述的技术可配合多种其 它架构来实施。图8是说明根据本发明中所描述的技术来执行细分的实例细分硬件电路72的示 意图。细分硬件电路72包括多个寄存器82(图8中标记为“REG”)、多个多路复用器84(图 8中标记为“MUX”)、多个乘法运算单元86和多个累加运算单元88。乘法运算单元86后接 累加运算单元88组成MAC运算单元,其由虚线89说明。细分硬件电路72包含布置成管线 的可配置MAC阵列。因此,除了最后一个MAC运算单元的输出(其为所产生的顶点坐标) 以外,每一 MAC运算单元的输出均为对后续MAC运算单元的输入。MUX 84为细分硬件电路72提供可配置性。明确地说,MUX 84可经配置以输出两 个输入中的一者。由实线表示的对MUX 84中的每一者的输入对应于所述MUX 84将传递通 过的输入。换句话说,以实线展示的输入中的每一者的值是MUX 84中的每一者将分别输出 的值。由虚线表示的对MUX 84中的每一者的输入对应于MUX 84将不传递通过的输入。如 参看图9和图10更详细地描述,因此可通过改变将由MUX 84传递通过的MUX输入来配置 细分硬件电路72。图8中所说明的细分硬件电路72是六阶段可配置MAC阵列,其可经配置以计算至 多达六次多项式。细分硬件电路72可被配置成多个较短管线,其计算较小次数的多项式。 举例来说,图8所说明的六阶段可配置MAC阵列可经配置以作为各计算一个三次多项式的 两个并行三阶段MAC阵列(图9)、各计算一个二次多项式的三个并行两阶段MAC阵列(图 10)等而操作。以此方式,细分硬件电路72可经配置以在细分处理期间提供硬件加速,从而 得到改进的渲染性能。尽管被说明为六阶段可配置MAC阵列,但细分硬件电路72可包括更 多或更少的可配置管线化MAC阶段。
23
可基于正被细分的曲线的类型而在运行时间动态地重新配置细分硬件电路72。举 例来说,当细分二次贝塞尔曲线或椭圆弧曲线(其被表示为二次多项式)时,CPU 6可配置 细分硬件电路72以使其作为三个并行的两阶段MAC阵列而操作。当细分三次贝塞尔曲线 (其被表示为三次多项式)时,CPU 6可配置细分硬件电路72以使其作为两个并行的三阶 段MAC阵列而操作。细分硬件电路72从CPU 6接收多项式系数PO到P6以用于计算顶点点。多项式 系数可为用于计算顶点点的X坐标的多项式系数,或用于计算顶点点的y坐标的多项式系 数。在其中细分硬件电路72作为一个以上多阶段MAC阵列而操作的例子中,多项式系数可 为用于计算顶点点的χ坐标和y坐标的多项式系数。如上文所述,CPU 6计算多项式系数 PO到06,并将所计算的多项式系数PO到P6提供给细分硬件电路72。CPU 6可将所计算的 多项式系数PO到P6直接加载到细分硬件电路72中,或将指针编程到细分硬件电路72中, 在此情况下,细分硬件电路72加载多项式系数PO到P6。在任一情况下,均基于正被细分的 曲线的类型而动态地加载多项式系数PO到P6。此外,CPU 6为细分硬件电路72提供与沿曲线的将产生顶点点的位置对应的输入 (I)。在使用OpenVG定义的椭圆弧曲线的情况下,所述输入可为特定值θ。在使用OpenVG 定义的贝塞尔曲线的情况下,所述输入可为特定值t。细分硬件电路72使用多项式系数PO 到P6对所述输入执行各种乘法与累加运算,以计算输出(0)。所述输出表示由所述输入识 别的沿曲线的位置处的顶点点的坐标(例如,χ坐标或y坐标)。细分硬件电路72输出以 下形式的六次多项式0 = P6*I6+P5*I5+P4*I4+P3*I3+P2*I2+P1*I+P0。(15)细分硬件电路继续接收沿曲线的输入位置以及多项式系数,直到细分硬件电路72 计算出所产生的所要数目的线段的顶点点为止。举例来说,对于椭圆形曲线的从= 0 到Q1= π/4的将划分为四个额外线段的部分来说,CPU 6可为细分硬件电路72提供输入 θ Q1 = π /16、θ02 = π /8、θ Q3 = 3 π /16以产生顶点点,以用于将曲线的从θ Q = 0到Q1 =η/4的部分均等地划分为四个额外线段。图9是说明经配置以作为两个并行的三阶段MAC阵列而操作的细分硬件电路72 的示意图,所述两个阵列各计算一个三次多项式。明确地说,前三个MAC运算单元作为输出 以下形式的第一三次多项式的第一三阶段MAC阵列而操作O0 = Ρ3*Ι03+Ρ2*Ι02+Ρ1*Ι0+ΡΟ。(16)后三个MAC运算单元作为输出以下形式的第二三次多项式的第二三阶段MAC阵列 而操作O1 = ΡθΦ ^+ΡδΦ ^+Ρ^^+ΡΟ'。(17)细分硬件电路72使用输入I。和I1以及多项式系数Ρ0、Ρ0'、Ρ1、Ρ2、Ρ3、Ρ4、Ρ5和 Ρ6来计算两个坐标。在一个例子中,细分硬件电路72可计算定义位置I处的顶点点的两个 坐标。换句话说,细分硬件电路72可计算定义位置I处的顶点点的χ坐标和y坐标(即, (X,y))。在此情况下,输入Itl和I1相等,且多项式系数P0、P1、P2和P3与用于计算χ坐标 的多项式的多项式系数对应,且多项式系数PO ‘、Ρ4、Ρ5和Ρ6与用于计算y坐标的多项式 的多项式系数对应。在其它例子中,细分硬件电路72可计算与不同顶点点对应的两个坐标。举例来
24说,细分硬件电路72可计算两个χ坐标,其表示位于沿曲线的不同位置Itl和I1处的两个顶 点点的χ坐标。在此情况下,I0与I1不相等,且多项式系数P0、P1、P2和P3以及多项式系 数PO'、P4、P5和P6均与用于计算χ坐标的多项式的多项式系数对应。在计算顶点点的χ 坐标之后,细分硬件72输入与顶点点的y坐标相关联的系数,且计算沿曲线的各种位置I 的顶点点的y坐标。在任一情况下,细分硬件电路72均在细分过程期间通过在单遍中输出 顶点点的两个坐标值而提供硬件加速。图10是说明经配置以作为三个并行的两阶段MAC阵列而操作的细分硬件电路72 的示意图,所述三个阵列各计算一个二次多项式。明确地说,第一对MAC运算单元作为输出 以下形式的第一二次多项式的第一两阶段MAC阵列而操作O0 = P2*I02+P1*I0+POo(18)第二对MAC运算单元作为输出以下形式的第二二次多项式的第二两阶段MAC阵列 而操作O1 = Ρβ^Ι^+Ρ^Ι+ΡΟ'。(19)最后一对MAC运算单元作为输出以下形式的第三二次多项式的第二三阶段MAC阵 列而操作O2 = P6*I22+P5*I2+P0〃。(20)细分硬件电路72使用输入IciU1和I2以及多项式系数P0、P0'、P0"、P1、P2、P3、 P4、P5和P6来计算三个坐标。如上文所述,细分硬件电路72可计算与不同顶点点对应的 三个坐标。举例来说,细分硬件电路72可计算三个χ坐标,其表示位于沿曲线的不同位置 W1和I2的三个顶点点的χ坐标。在此情况下,W1和I2不相等,且多项式系数P0、P1、 P2;多项式系数PO'、P3和P4以及多项式系数P0"、P5和P6各与用于计算χ坐标的二次 多项式的多项式系数对应。在计算顶点点的χ坐标之后,细分硬件72输入与顶点点的y坐 标相关联的系数,且计算沿曲线在Io、I1和I2处的顶点点的y坐标。或者,细分硬件电路72可计算沿曲线的顶点点的χ坐标和y坐标二者的组合。换 句话说,细分硬件电路72可计算在沿曲线的各个位置I处的两个χ坐标和一 y坐标或两个 y坐标和一 χ坐标。在此情况下,输入Itl和I1相等,且多项式系数P0、P1和P2与用于计算 χ坐标的多项式的多项式系数对应,且多项式系数PO ‘、P3和P4与用于计算y坐标的多项 式的多项式系数对应。另一方面,I2不同于Itl和I1,且多项式系数P0"、P5和P6可为X坐 标或1坐标的多项式系数。在任一情况下,细分硬件电路72均在细分过程期间通过在单遍 中输出顶点点的三个坐标值而提供硬件加速。图11是说明根据本发明所描述的技术来执行细分的计算装置的实例操作的流程 图。软件应用程序20调用CPU 6的细分模块22以将曲线细分为第一组线段(90)。为了 产生第一组线段,细分模块22计算位于曲线上的一个或一个以上顶点点。细分模块22可 (例如)使用曲线的数学表示来产生一个或一个以上顶点点。所述线段将所述顶点点中的 每一者连接到相邻的顶点点。所述线段中的每一者表示曲线的一部分。CPU 6计算曲线的展开多项式表示(92)。CPU 6可(例如)通过用多项式 S2* θ 2+S,θ +S0近似表示sin ( θ )且用多项式C2* θ θ +C0近似表示cos ( θ )来计算根 据等式(1)和(2)定义的椭圆弧曲线的展开多项式表示。以下提供展开多项式表示。ρχ( θ ) = Ρ2χ* θ 2+Ρ1χ* θ +P0x,(21)
Py ( θ ) = P2y* θ 2+Ply* θ +P0y,(22)其中Ρ2χ、Ρ1χ、P0x, P2y、Ply 和 Ptly 是定义为 = _a*C2、Plx = _a*Cl、P0x = _a*C0、 P2y = b*C2、Ply = b*Cl 和 Ptly = b*C0 的多项式系数。此外,CPU 6可将曲线从对象坐标空间变换到装置坐标空间(94)。CPU 6可在计 算曲线的多项式表示之前或在计算曲线的多项式表示之后变换到装置坐标空间。如上文所 述,CPU 6可每曲线计算所述变换一次。换句话说,CPU 6可计算用于定义曲线的点中的每 一者处的变换,而不是计算针对沿曲线的每个顶点点的变换。例如在二次贝塞尔曲线的情 况下,CPU 6可计算开始点(xs,ys)、结束点(xe,ye)和控制点(x。,y。)的变换,而不是计算针 对第一组线段的所计算的顶点点中的每一者的变换。在其它例子中,细分硬件电路72或计 算装置70的某一其它组件可执行所述变换。在变换期间,CPU 6可确定比例因子(其近似在变换期间执行的按比例缩放的量) (96)。CPU 6基于所述比例因子而确定第二细分阶段的额外线段的数目(98)。明确地说, CPU 6可确定第二细分阶段随比例因子的增加而将曲线的由线段表示的部分再分为更多的 额外线段。在CPU 6计算出将曲线的每一部分细分为的额外线段的数目之后,CPTO确定沿 曲线的所述部分的将产生新的顶点点的位置(100)。举例来说,对于椭圆形曲线的从Qtl = 0到θι = π/4的将划分为四个额外线段的部分来说,CPU 6可确定需在位置Qtll= π/16、
θ 02 = π /8、θ 03 = 3 π /16处计算新顶点,以将曲线的从θ Q = 0到θ i = JI/4的部分均 等地划分为四个额外线段。CPU 6配置细分硬件电路72以细分所述曲线(102)。CPU 6可(例如)为细分硬 件电路72提供曲线的展开多项式表示的多项式系数。CPU 6可将所计算的多项式系数直接 加载到细分硬件电路72中,或将指针编程到细分硬件电路72内,在此情况下,细分硬件电 路72加载多项式系数和位置。在任一情况下,均基于正被细分的曲线的类型(例如,椭圆 弧曲线、二次贝塞尔曲线、三次贝塞尔曲线等)将多项式系数动态地加载到细分硬件电路 72中。CPU 6为细分硬件电路72提供识别沿曲线的将产生一个或一个以上顶点点的坐 标的位置的一个或一个以上输入(104)。如上文所述,细分硬件电路72可经配置以作为各 计算顶点点的一坐标的两个并行三阶段MAC阵列(图9)而操作,或经配置以作为各计算顶 点点的一坐标的三个并行两阶段MAC阵列(图10)而操作。细分硬件电路可经配置以计算 一个以上顶点点的χ坐标、一个以上顶点点的y坐标、同一顶点点的χ坐标和y坐标,或其 组合。CPU 6接收由细分硬件72计算的一个或一个以上坐标(106)。CPU 6确定是否存 在要为顶点点计算的更多坐标(108)。当存在要为顶点点计算的更多坐标时,CPU 6继续 配置细分硬件电路102,并提供用于计算额外坐标的输入。当不存在要计算的更多坐标时, CPU 6使用经细分的线段将曲线渲染到显示器(110)。本文中所描述的技术可以硬件、软件、固件或其任一组合来实施。描述为模块或 组件的任何特征可在集成逻辑装置内一起实施,或作为离散但可互操作的逻辑装置单独实 施。在一些情况下,各种特征可实施为集成电路装置,例如集成电路芯片或芯片组。如果 以软件实施,那么所述技术可至少部分地由计算机可读媒体实现,所述计算机可读媒体包 含在被执行时实施上述方法中的一者或一者以上的指令。计算机可读媒体可形成计算机
26程序产品(其可包括包装材料)的一部分。计算机可读媒体可包含随机存取存储器(RAM) (例如同步动态随机存取存储器(SDRAM))、只读存储器(ROM)、非易失性随机存取存储器 (NVRAM)、电可擦除可编程只读存储器(EEPROM)、快闪存储器、磁性或光学数据存储媒体等。 所述技术另外或替代地可至少部分地由计算机可读通信媒体实现,所述媒体携载或传送呈 指令或数据结构的形式且可被计算机存取、读取和/或执行的代码。所述代码可由一个或一个以上处理器执行,所述处理器例如为一个或一个以上 DSP、通用微处理器、ASIC、现场可编程逻辑阵列FPGA或其它等效集成或离散逻辑电路。因 此,本文中使用的术语“处理器”可指代前述结构中的任一者,或任何其它适合实施本文中 所描述的技术的结构。此外,在一些方面中,本文中描述的功能性可提供于经配置以用于细 分图形图像的专用软件应用程序或硬件模块内。因此,本发明还涵盖包括用以实施本发明 所描述的技术中的一种或一种以上技术的电路的多种集成电路装置中的任一者。此电路可 提供于单个集成电路芯片中或多个可互操作的集成电路芯片中。已描述了各种方面。这些和其它方面均在所附权利要求书的范围内。
权利要求
一种方法,其包含用第一计算单元细分曲线以将所述曲线划分为若干第一线段;用第二计算单元将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段。
2.根据权利要求1所述的方法,其进一步包含将所述曲线从第一坐标空间变换到第二坐标空间,其中细分所述曲线的由所述第一线段中的一者表示的所述部分包含基于变换所述曲线时 所使用的比例因子,用所述第二计算单元将所述曲线的由所述线段中的一者表示的所述部 分细分为所述第二线段。
3.根据权利要求2所述的方法,其中基于所述比例因子将所述曲线的由所述第一线段 中的一者表示的所述部分细分为若干第二线段包含在所述比例因子增加时,将所述曲线的 由所述第一线段中的一者表示的所述部分细分为较大数目的第二线段。
4.根据权利要求1所述的方法,其进一步包含基于所述第一计算单元的至少一负荷, 动态地平衡由所述第一计算单元执行的对所述曲线的细分的量。
5.根据权利要求4所述的方法,其中基于所述第一计算单元的负荷而动态地平衡由所 述第一计算单元执行的对所述曲线的细分的所述量包含在所述第一计算单元的所述负荷 高于阈值时,细分所述曲线以将所述曲线划分为较少的第一线段。
6.根据权利要求1所述的方法,其中所述第一计算单元包含中央处理单元(CPU),且所 述第二计算单元包含图形处理单元(GPU),其中用所述GPU来细分所述曲线的由所述第一 线段中的一者表示的所述部分包含细分所述曲线的由所述第一线段中的第一者表示的第 一部分,所述方法进一步包含并行地细分所述曲线的由所述第一线段中的第二者表示的第 二部分。
7.根据权利要求6所述的方法,其中细分所述曲线的由所述第一线段中的所述第一者 和第二者表示的所述第一和第二部分中的每一者包含用所述GPU的着色器单元细分所述 曲线的由相应第一线段表示的相应部分。
8.根据权利要求7所述的方法,其中所述着色器包含顶点着色器,所述方法进一步包含用所述顶点着色器接收多个顶点属性,所述多个顶点属性包括指定所述第一线段中的 一者的顶点点的至少两个顶点属性;以及产生表示位于所述曲线的由所述第一线段中的所述一者表示的所述部分上的额外点 的额外顶点属性,以将所述曲线的所述部分细分为所述第二线段。
9.根据权利要求1所述的方法,其中所述第二计算单元包含专用细分硬件,且细分所 述曲线的由所述第一线段中的一者表示的所述部分包含接收至少一个输入;以及基于所述至少一个输入而产生对应于所述第二线段中的一者的至少一顶点点的至少 一个坐标。
10.根据权利要求9所述的方法,其中所述细分硬件包括多个乘法与累加运算单元的 管线,且产生所述至少一个顶点点的至少一个坐标包含实施所述曲线的多项式表示,以基 于所述至少一个输入而产生对应于所述第二线段中的所述一者的所述顶点点的至少一个
11.根据权利要求10所述的方法,其进一步包含配置所述多个乘法与累加运算单元的 所述管线,使得所述细分硬件作为各自产生顶点点的坐标的两个或两个以上并行管线而操作。
12.根据权利要求1所述的方法,其中第一计算单元是图形处理单元(GPU)的第一组 件,且所述第二计算单元是所述GPU的第二组件。
13.根据权利要求1所述的方法,其进一步包含渲染所述第二线段以将所述曲线呈现给显示器。
14.根据权利要求1所述的方法,其进一步包含用所述第一计算单元、所述第二计算单 元和第三计算单元中的一者将所述曲线的由所述第二线段中的一者表示的部分细分为若 干第三线段。
15.一种装置,其包含第一计算单元,其细分曲线以将所述曲线划分为若干第一线段; 第二计算单元,其将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二 线段。
16.根据权利要求15所述的装置,其中所述第一和第二计算单元中的一者将所述曲线 从第一坐标空间变换到第二坐标空间,且所述第二计算单元基于变换所述曲线时所使用的 比例因子,将所述曲线的由所述第一线段中的一者表示的所述部分细分为所述第二线段。
17.根据权利要求16所述的装置,其中所述第二计算单元在所述比例因子增加时,将 所述曲线的由所述第一线段中的所述一者表示的所述部分细分为较大数目的第二线段。
18.根据权利要求15所述的装置,其中所述第一计算单元基于所述第一计算单元的至 少一负荷,动态地平衡由所述第一计算单元执行的对所述曲线的细分的量。
19.根据权利要求18所述的装置,其中所述第一计算单元在所述第一计算单元的所述 负荷高于阈值时,细分所述曲线以将所述曲线划分为较小数目的第一线段。
20.根据权利要求15所述的装置,其中所述第一计算单元包含中央处理单元(CPU),且 所述第二计算单元包含图形处理单元(GPU),其中所述GPU并行地细分所述曲线的由所述 第一线段中的第一者表示的第一部分,且细分所述曲线的由所述第一线段中的第二者表示 的第二部分。
21.根据权利要求20所述的装置,其中所述GPU用所述GPU的着色器单元细分所述曲 线的所述第一和第二部分中的每一者。
22.根据权利要求21所述的装置,其中所述着色器单元包含顶点着色器,所述顶点着 色器接收多个顶点属性,所述多个顶点属性包括指定所述第一线段中的所述一者的顶点 点的至少两个顶点属性;且产生额外顶点属性,其表示位于所述曲线的由所述第一线段中 的所述一者表示的所述部分上的额外顶点点。
23.根据权利要求15所述的装置,其中所述第二计算单元包含专用细分硬件,其接收 至少一个输入且基于所述至少一个输入而产生对应于所述第二线段中的一者的至少一个 顶点点的至少一个坐标。
24.根据权利要求23所述的装置,其中所述细分硬件包含布置成管线配置的多个乘法 与累加运算单元,其实施所述曲线的多项式表示,以基于所述至少一个输入而产生对应于所述第二线段中的所述一者的所述至少一个顶点点的至少一个坐标。
25.根据权利要求24所述的装置,其中所述多个乘法与累加运算单元的所述管线经配 置以使得所述细分硬件作为各自产生所述至少一个顶点点的坐标的两个或两个以上并行 管线而操作。
26.根据权利要求15所述的装置,其中第一计算单元是图形处理单元(GPU)的第一组 件,且所述第二计算单元是所述GPU的第二组件。
27.根据权利要求15所述的装置,其进一步包含显示器,其中所述第一和第二计算单 元中的一者渲染所述第二线段,以将所述曲线呈现给所述显示器。
28.根据权利要求15所述的装置,其中所述第一计算单元、所述第二计算单元和第三 计算单元中的一者将所述曲线的由所述第二线段中的一者表示的部分细分为若干第三线 段。
29.一种装置,其包含用于细分曲线以将所述曲线划分为若干第一线段的第一装置;用于将所述曲线的由所述第一线段中的一者表示的部分细分为若干第二线段的第二直ο
30.根据权利要求29所述的装置,其进一步包含用于将所述曲线从第一坐标空间变换到第二坐标空间的装置,其中所述第二细分装置基于变换所述曲线时所使用的比例因子,将所述曲线的由所述第一 线段中的所述一者表示的所述部分细分为所述第二线段。
31.根据权利要求30所述的装置,其中所述第二细分装置在所述比例因子增加时,将 所述曲线的由所述第一线段中的所述一者表示的所述部分细分为较大数目的第二线段。
32.根据权利要求29所述的装置,其进一步包含用于基于所述第一细分装置的至少一 负荷而动态地平衡由所述第一细分装置执行的对所述曲线的细分的量的装置。
33.根据权利要求23所述的装置,其中所述第一细分装置在所述第一细分装置的所述 负荷超出阈值时,细分所述曲线以将所述曲线划分为较小数目的第一线段。
34.根据权利要求29所述的装置,其中所述第二细分装置并行地细分所述曲线的由所 述第一线段中的第一者表示的第一部分和所述曲线的由所述第一线段中的第二者表示的 第二部分。
35.根据权利要求29所述的装置,其中所述第二细分装置接收多个顶点属性,所述多 个顶点属性包括指定所述第一线段中的所述一者的顶点点的至少两个顶点属性;且产生表 示位于所述曲线的由所述第一线段中的所述一者表示的所述部分上的额外点的额外顶点 属性,以将所述曲线的所述部分细分为所述第二线段。
36.根据权利要求29所述的装置,其中所述第二细分装置包含专用细分硬件,其包括 用于基于所述至少一个输入而产生对应于所述第二线段中的一者的至少一个顶点点的至 少一个坐标的装置。
37.根据权利要求36所述的装置,其中所述产生装置包含多个乘法与累加运算单元的 管线,其实施所述曲线的多项式表示,以基于所述至少一个输入而产生对应于所述第二线 段中的所述一者的所述至少一个顶点点的至少一个坐标。
38.根据权利要求37所述的装置,其进一步包含用于配置所述多个乘法与累加运算单元的所述管线以使得所述细分硬件作为各自产生顶点点的坐标的两个或两个以上并行管 线而操作的装置。
39.根据权利要求29所述的装置,其中所述第一细分装置是图形处理单元(GPU)的第 一组件,且所述第二细分装置是所述GPU的第二组件。
40.根据权利要求29所述的装置,其进一步包含用于渲染所述第二线段以将所述曲线 呈现给显示器的装置。
41.根据权利要求29所述的装置,其进一步包含用于将所述曲线的由所述第二线段中 的一者表示的部分细分为若干第三线段的第三装置。
42.根据权利要求29所述的装置,其中所述第一细分装置和所述第二细分装置中的一 者将所述曲线的由所述第二线段中的一者表示的部分细分为若干第三线段。
全文摘要
本发明描述一种用于在图形渲染期间细分曲线的多阶段细分技术。明确地说,第一细分阶段将所述曲线细分为第一组线段,所述线段各表示所述曲线的一部分。第二细分阶段将所述曲线的由所述第一组的所述线段中的每一者表示的所述部分进一步细分为若干额外线段,所述额外线段更精细地表示所述曲线的形状。以此方式,所述曲线的在所述第一细分阶段后由仅一个线段表示的每一部分在所述第二细分阶段后由一个以上线段表示。在一些例子中,可执行两个以上细分阶段以细分所述曲线。
文档编号G06T11/20GK101978393SQ200980109895
公开日2011年2月16日 申请日期2009年3月19日 优先权日2008年3月20日
发明者吴车辉, 毕宁, 焦国方, 魏建 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1