CN1702692B - 提供增强的图形流水线的系统和方法 - Google Patents

提供增强的图形流水线的系统和方法 Download PDF

Info

Publication number
CN1702692B
CN1702692B CN2005100649200A CN200510064920A CN1702692B CN 1702692 B CN1702692 B CN 1702692B CN 2005100649200 A CN2005100649200 A CN 2005100649200A CN 200510064920 A CN200510064920 A CN 200510064920A CN 1702692 B CN1702692 B CN 1702692B
Authority
CN
China
Prior art keywords
common core
core element
pixel
summit
pel
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
CN2005100649200A
Other languages
English (en)
Other versions
CN1702692A (zh
Inventor
A·帕特尔
C·N·博伊德
D·R·布莱斯
J·M·J·诺尔
M·A·特勒
S·H·怀特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft 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
Priority claimed from US10/934,249 external-priority patent/US7570267B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN1702692A publication Critical patent/CN1702692A/zh
Application granted granted Critical
Publication of CN1702692B publication Critical patent/CN1702692B/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
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers

Abstract

提供了一种增强的图形流水线,使得公共核心硬件能够表现为图形流水线的不同组件,流水线中的组件对包括线和三角形的图元的可编程性,以及在流水线中用数据绘制图形显示之前或同时的流输出。编程者不必优化代码,因为公共核心将平衡必要的功能的负荷,并动态地将那些指令分配到公共核心硬件上。编程者可使用算法来对图元编程,以通过用线和三角形构成的拓扑来替代来简化所有的顶点运算。编程者在输出数据被绘制之前或同时可取出计算出的输出数据并能进行读取。从而,编程者在编程时具有很大的灵活性。通过使用增强的图形流水线,编程者可优化流水线中的硬件的使用,对顶点、线或三角形拓扑全体进行编程,而不是仅对每个顶点单独进行编程,并且可从流水线能够输出计算出的信息的存储器中读取任何计算出的数据。

Description

提供增强的图形流水线的系统和方法
技术领域
本发明针对允许增强的图形流水线的图形处理单元(GPU),使用为硬件开发的软件将新的和改进的功能添加到图形流水线中。
背景技术
计算机系统普遍地用于在显示屏上显示图形对象。三维(3-D)计算机图形的目的一般是在计算机屏幕上创建逼真地以三维方式表示对象的二维(2-D)图像。在真实世界中,三维对象具有实际的高度、实际的宽度和实际的深度。照片是3-D空间的2-D表示的例子。3-D计算机图形通常与照片的类似之处在于它们在计算机屏幕的2-D空间上表示3-D世界,不同在于底层图像一般用3-D几何图形和表面纹理来模型化。
利用3-D计算机图形创建的图像用于广泛的应用中,从视频娱乐游戏到飞行模拟器,在给定的时间点以逼真的方式描绘出屏幕的单个视图。3-D计算机图形的众所周知的例子包括诸如终结者II(Terminator II)、侏罗纪公园(Jurassic Park)、玩具总动员(Toy Story)等之类的好莱坞电影中的特效。
最近几年里飞速发展的一个行业是计算机游戏行业,并且当前一代的计算机游戏以不断增长的趋势采用3-D图形技术。同时,游戏速度越来越快。这种组合推动了对在相对低廉的系统中快速和灵活地绘制3-D图形的真正需要。
为了创建3-D计算机图形表示,典型地把要描绘的对象表现为计算机中的数学模型。例如,3-D模型可由由例如分别对应于宽度、高度和深度的x、y和z轴构成的坐标系中的几何点来构成。由一系列的点(称为顶点)来定义对象。点或顶点的位置由其x、y和z坐标(或其它坐标系)来定义。在图形术语中,一个顶点确定一个点,两个顶点确定一条线或线段,三个顶点确定一个三角形,这三种都是“图元”(primitive)。当这些点中的三个或更多个连接起来时,就形成了多边形,其中三角形是最简单的多边形。
在屏幕上绘制和显示三维(3-D)图形一般涉及许多计算和运算。在简单的图形系统中,这些计算是根据中央处理单元(CPU)与图形处理单元(GPU)某种级别的合作或共享处理来进行的。在示例性的情况中,在指令被处理并且CPU中发生某些初始计算之后,定义了要被绘制的对象的一组坐标点或顶点被存储在图像存储器中,用于由GPU在图形流水线中进一步处理。多边形细分器(tessellator)可根据设计用来有效地覆盖要被呈现的对象的表面的预定算法,将图形数据分解成简单多边形,这被称为是多边形细分。当前,在大多数图形流水线中,随后可由一个或多个程序着色器(shader)根据传递给GPU的指令对数据进行操作。
程序着色器是GPU的专门处理子单元,用于对图形数据执行专门操作。程序着色器的一个例子是顶点着色器,一般对顶点进行操作。例如,顶点着色器能够对各个顶点施加位置、颜色和纹理坐标的计算。顶点着色器对图形流水线的图像存储器中规定的顶点流进行固定的或可编程的函数计算。顶点着色器不能产生其它几何图形(顶点),而是对规定用于通过从主机下载到顶点着色器的程序进行算法变换的顶点起作用。
通常在顶点着色器之后进行分级,程序着色器的另一例子是像素着色器。例如,顶点着色器的输出能通过不可编程的单元,称为设置引擎(setup engine),它是定义了像素着色器操作的像素的色域(gamut)的非程序着色器单元。随后可由像素着色器对像素的色域起作用,像素着色器接着对每个单独的像素起作用。输出值从像素着色器发送到帧缓冲器中等待被显示在屏幕上,或等待由主机系统取回。虽然一般利用三角形(3顶点组)将3-D几何图形进行啮合,但是不存在直接操作这样的(三个相关顶点的组)三角形、或线段、或线、任一(相关两个顶点的组)的程序着色器。
在可编程的情况下,注意到术语“着色器”会使人误解,因为“着色器”可以指代执行着色的GPU的硬件子单元,“着色器”也可以指代下载到GPU的、顺序装载到例如寄存器存储器之类的由着色器(硬件)使用来进行着色的存储器中的指令或标记(token)集。从而,虽然这里所使用的单词一般涉及任一含义,并因此应被看作是包含了两种含义,但是,在与术语着色器相关联地也使用术语“子单元”的情况下,这些术语应被解释成指代执行与着色(shading)有关的处理的GPU的子单元。
还注意到,在当今的图形架构中术语“帧缓冲器”不是一般地指代仅仅预备用于图形处理单元的设置引擎或像素处理单元的输出的图形存储器的预先划分的、预先分配的和预先定义的部分,相反,帧缓冲器一般指代与光栅化处理(rasterization)和/或数字模拟转换器(DAC)输出处理有关而使用的任何存储器(包含的用于与GPU互操作的一般的图像存储器)。在这一点上,虽然术语光栅化处理有时更为普遍地被使用,但是与图形流水线中像素处理或设置引擎处理有关而执行的处理一般被称为光栅化处理。另一方面,扫描输出或DAC输出是根据帧缓冲器的内容将信号传送到监视器或LCD的处理。
当今,帧缓冲器中的值可用于向屏幕显示之外的其它目的,但是这些用途是有限的。例如,可能希望将这些值在像素着色器或顶点着色器处理之后返回给主机上的应用程序,用于保存、打印、进一步变换等等。在这些情况下,可“在技术上”读取这些值;然而,除了专门用于对用于显示的图像进行缓冲的有限部分之外,检索图像存储器中的值是极其艰巨的任务,要求与主机存储器、CPU协作,并要求关于图像存储器如何被设置用于连同特定图形硬件一起使用的先验知识。如果除了帧缓冲器之外,要读取图像存储器的任一部分,则这种情况尤其存在。虽然并非不可能,但是实际上,远不能直接读取用于由多边形细分器、顶点着色器和像素着色器输出的图像存储器的中间存储器。在某些情况下,多边形细分器、顶点着色器和像素着色器的输出从不到达图像存储器,而是可能局限于GPU图形处理阶段之间使用的专门数据通路(例如,顶点着色器的输出一般通过预定义的通路而不到达图像存储器来传送到像素着色器)。GPU运算如此之快并且根据专门架构进行,从而在当前图形流水线中读取中间图像存储器是不可行的,直到输出到达帧缓冲器用于光栅化或其它操作为止。
虽然在传统系统中接收像素着色器的输出的帧缓冲器可由主机CPU以已知的方式访问,以保存(或另外操作)由CPU处理的诸如图像之类的图形数据,但是数据仍然必须被访问并取回到主机CPU中用于这种进一步的操作。图1B例示出图形流水线该对帧缓冲器存储器的输出数据做什么以实现对数据的进一步操作。在CPU操作表示的流水线处理周期的操作之后,以及在从帧缓冲器把值取回到主机CPU之后,CPU随后协作以将值发送返回通过图形流水线,用于进一步处理。从而,在现有技术中所需要的是两件事:(1)在从图形流水线中的诸如顶点着色器或像素着色器之类的子组件输出的数据到达帧缓冲器存储器之前,重新使用,即重新处理数据的能力,以及(2)如此循环进行而不影响主机资源和存储器的能力。
如图1A所例示的那样,计算系统被划分为主机CPU和图形硬件。CPU便于通过请求使用图形API的应用程序和服务作出对图形API的调用。传统上,应用程序和驱动器位于CPU侧,来自那些源的信息被发送以在监视器上显示。首先,信息按照CPU根据API封装的形式从CPU发送到GPU。然后,来自应用程序的信息在存储器中等待,直到由顶点着色器访问为止。在顶点着色器结束其操作之后,作为顶点着色器的输出,信息通过专门的数据通路被输出到像素着色器(将输出置于图像存储器中一般太慢)直到由像素着色器访问为止,像素着色器置于空闲或继续处理更多数据。在像素着色器完成了其操作之后,信息置于帧缓冲器中,以被扫描输出到显示器或发送回主机用于进一步操作。
已开发了专门的3-D图形API,它们开放了(expose)当今的顶点和像素着色器的专门功能。就这一点而言,开发者能够将指令或小程序下载到顶点着色器单元,有效地对顶点着色器进行编程以执行专门的行为。例如,API开放了与顶点着色器中的增加数量的寄存器相关联的功能,例如与寄存器级别的浮点数有关的专门顶点着色功能。此外,可能实现使得极快的顶点着色器仅返回浮点数的小数部分的指令集。通过下载这些指令,假设不超过顶点着色器的指令计数限制和相关的寄存器存储器,则能实现各种功能。
最显著的是,顶点着色器级的功能是用于变换,照明(lighting)和偶尔的纹理变换。基本上,变换采用位置数据,该数据是关于顶点在被显示时应处于的位置的数据,将其变换为用于监视器的数据,即用于二维屏幕空间的数据。传统上,顶点变换处理或者不经修改地传送位置数据,或者使用矩阵来修改数据。顶点着色器级通常受限于进行变换功能、照明功能和某些纹理功能。
随着游戏增加了图形细节水平,多边形密度增加,且作为顶点处理步骤,照明和其它顶点着色技术变得更为重要。静态照明由于其高质量而受欢迎,它通常在顶点着色器中计算并作为纹理来存储。由于它将所有的照明信息置于纹理之中,就难于在运行时间修改信息而使得动态照明成为可能,除非预先给出每个顶点的指令。有时,顶点着色器施加矩阵变换,从顶点坐标到纹理坐标。这通常是用于球面和立方体反射映射和纹理动画。
纹理着色器执行的典型的照明类型包括:位置、方向、或聚光灯。为了添加这种照明,数学运算(大多数是矩阵操作)改变顶点以反映出应用程序中定义的照明类型。存在不同的光线,一般模仿现实,类似阳光的光源和街道光具有不同的特性。这些光可以是位置的、方向的或电光源,创建了多种组合用于顶点着色器级进行运算。
从而,使用顶点着色器进行的几何图形处理包括某种类型的变换以施加给数据,用于顶点的照明环境,以及用于纹理变换的材质。固定功能和可编程的顶点着色器都通常在流水线的该级中以这种方式工作。如果应用程序需要在这些区域中处理更多的信息,则顶点着色器中将存在瓶颈,图形流水线中的其它组件将置于空闲。
就像素着色器而言,可通过将指令下载到像素着色器来实现专门的像素着色功能。例如,开放了这样的功能,即在像素着色器中提供线性插补机制。此外,向开发者开放了许多不同的运算修改器的功能,以及适用于像素着色器的指令集。例如,对于希望有效的像素着色的许多图形应用程序来说,求反(negating)、重映射(remapping)、偏移(biasing)以及其它功能是极其有用的,可是,由于它们是作为单个指令的一部分来执行的,因此,它们最佳地被表示成对该指令的修改器。简而言之,上述功能对于图形运算来说是有利的,并且将它们的功能结合于已专门化的像素和顶点着色器指令集是有极大的价值的,能简化开发和提高性能。从而,如果没有超过像素着色器的指令计数限制和其它硬件限制,则可通过下载这些指令来实现各种功能。
虽然像素着色器不进行某些矩阵运算(例如用于照明的矢量变换),但是,它可能有用于把像素着色器的功能看作是具有或多或少的直接的数学运算能力,这是与顶点着色器用于变换顶点而进行的更为复杂的矩阵计算相反的,在矩阵计算中每个顶点可由要求处理的许多值来表示。涉及像素着色器的数学很可能是浮点计算,这些计算对像素着色,以创建反射、光泽和碰撞。可作为传送通过像素着色器的信息而进行的计算的数量是有限的。由于这些限制,某些信息要求多通道(multi-pass)运算以在每个像素上创建多个纹理。每个通道包含流水线中的若干时钟周期。
顶点着色器在一给定顶点上计算矩阵,而像素着色器能够计算大多数的浮点运算。当编程者可能希望看到顶点的数学变换而不是值作为屏幕显示时,存在实例。在这一点上,编程者本应已从帧缓冲器中读取存储器,而如上所述,这是被禁止的。
像素着色器和顶点着色器能够对像素和顶点操作。在图形编程中,图元(primitive)是基本形状,从图元可创建任何给定的三维图形。常用的和定义的图元包括顶点、线和三角形。当今,像素着色器和顶点着色器能够对顶点进行给定指令的操作。即使着色器是可编程的,着色器也仅能对作为图元的顶点或点进行操作。
当这些具体的着色器,像素着色器或顶点着色器,在图形流水线中操作时,由于每级中发生的操作,常常存在瓶颈。如果编程者试图平衡和限制发送到用于每个顶点的每个着色器的指令,可解决这些瓶颈。然而,当设计复杂的3-D显示图形时,例如游戏,平衡指令数成为压倒性的任务。大多数编程者在图形在给定的程序中显著变慢之前不进行任何形式的优化。即使在编程者可能使用的最佳的优化方案中,将发现硬件置于空闲和无用,等待信息通过,这仅仅是由于与图形子系统的请求的不同种类的任务相关联的变化。此外,为了优化任何图形程序,编程者首先必须识别瓶颈的源头,这可能是乏味的任务。从而,希望能够动态地重配置图形子系统的核心,使得数据的核心处理自动地适应于请求被执行的任务。
从而,计算机系统中的图形数据的绘制是资源密集型处理的集合。着色处理,即对用于确定用于与图形数据结构相关联的诸如颜色等之类的某些图元的值的专门图形数据结构集进行复杂算法的处理,给出了这种运算密集和复杂的处理的例子。一般来说,着色处理已被标准化到某种程度。通过将设计用于对着色器起作用的源代码传送到应用程序中,着色器变成应用程序可创建/利用的对象,以便促进有效地绘制复杂的视频图形。顶点着色器和像素着色器是这种着色器的例子。
从而,以每个顶点和每个像素为基础的可编程运算变得在当今的图形硬件中越来越普遍。这种通常的可编程性以增加的性能水平使得有限的创造性算法成为可能。然而,除了上述之外,对于当今所能实现的有某些限制。典型地,利用当今的顶点和像素着色器级的绘制流水线,几何图形数据流输入到顶点着色器以进行顶点的某种运算,结果是几何图形数据被变换成像素数据,输出像素数据流。顶点着色器可接收将顶点着色器编程为执行专门功能的指令,但是对于顶点着色器指令的大小和复杂性有限制。类似地,像素着色器能够对数据任选地执行一个或多个变换,输出像素数据流。像素着色器还可接收将像素着色器编程为执行专门功能的指令,但是对于像素着色器指令的大小和复杂性有限制。
如今,编程者常使用顶点着色器和像素着色器。当前可编程硬件具有某些有限的可编程机制,然而,它们不允许编程者在值到达流水线结尾之前,在对值进行光栅化处理之前重新使用这些值。编程者可试图平衡他们对图形流水线中不同组件的使用,以避免一个或多个着色器中的瓶颈,然而,图形硬件是固定的。虽然构件了某些专门硬件用于专门的任务,这些专门硬件具有用于这些专门任务的程序着色器的专门组合和配置,但是不能为其它任务重新配置这些硬件。从而,当执行除了那些专门任务之外的其它任务,并且需要通过仅用于一个着色器的指令专门修改信息时,修改可能必须等待,也许是不可接受的,这取决于应用程序。此外,虽然可通过着色器创建顶点,然而,编程者不能通过图形API来规定直接对其它图元如此起作用的操作。换言之,除了顶点之外,编程者不能任意地将图元封装用于作为图元在图形流水线中进行处理。
细分(tesselation)是一般置于图形流水线的开始处的处理,它涉及利用一种类型或若干中类型的相同的平面图无间隙或无重叠地覆盖有界的几何图形区域。虽然现存的细分器实现一些基本算法,用于根据少量的控制点(control-point)顶点创建一格新的顶点,但是该处理是基于预先固定的算法,并局限于流水线的前端,因此不可编程来在程序着色器的处理之后在流水线的中段创建其它的任意的几何图形。而且,一旦细分器产生了顶点,流水线中没有任何地方可产生顶点。换言之,当今的顶点着色器能够接收、处理和输出顶点,但不能产生新的顶点。
从而希望实现克服了与现有的图形流水线架构、API和硬件有关的,由于指令计数的限制、输出形式的限制和流水线中数据共享的缺乏而造成的现有的可编程能力的缺点的系统和方法。
发明内容
鉴于本领域中的上述缺点,本发明提供了通过使得图形流水线具有能够充当像素着色器、顶点着色器或几何图形着色器的公共核心,来优化图形流水线中的硬件的使用的系统和方法,其中几何图形着色器是可编程的着色器,它能够对任何图元进行操作,图元包括作为输入或输出的三角形,从而可直接对图形数据进行操作而不用将数据变换成顶点或其它中间格式。此外,利用本发明,可在流水线内,在细分级或通过几何图形着色器来生成新的顶点。在一个实施例中,细分器可用于在程序着色器已经操作了图形数据之后在流水线内生成几何图形,而几何图形着色器可用于以可编程的方式补充现存的几何图形,以实现图形形状的传输过程中改变和施加到流水线内的效果。
有利的是,公共核心是可编程或可动态配置成为像素着色器、顶点着色器或几何图形着色器,从而图形流水线能够根据具体应用程序的运算需要的优化,来采用所有的像素着色器、顶点着色器、或几何图形着色器、或着色器的组合。可根据主机对图形流水线的需求来动态地配置(和重配置)公共核心。
就几何图形着色器而言,通过流输出,本发明的图形API和相关硬件使得应用程序开发者能够可编程地在图形流水线内重新循环数据一次,而不牵涉CPU的帮助来读取图像存储器和将数据重新封装用于流水线重新使用。在一个实施例中,本发明包括进入图形流水线的每图元有唯一的索引,这有助于对到达GPU的工作项的调度,以及浮点和整数运算的精确性符合IEEE标准。几何图形着色器还能够处理GPU正在处理的图形数据流的相邻图元或像素的信息。
下面描述本发明的其它优点和特征。
附图说明
参考附图进一步描述根据本发明的用于增强的图形流水线的系统和方法,附图中:
图1A是说明图形流水线的现有技术实施方式的框图;
图1B是说明多通道计算的现有技术实施方式的框图;
图2A是表示可实施本发明的具有各种计算设备的示例性网络环境的框图;
图2B是表示可实施本发明的示例性非限制性的计算设备的框图;
图2C是表示可实施本发明的示例性非限制性联网的远程计算机的框图;
图3A是图形流水线中发明的组件的示例性非限制性的实施方式的框图;
图3B是使用流输出功能的多通道计算的示例性非限制性的实施方式的框图;
图4A是表示公共核心的硬件和软件组件的框图;
图4B是说明可接收和输出来自单个拓扑的多个顶点的几何图形着色器的示例性功能的示图;
图4C是说明根据本发明的用于根据图形流水线处理的图形流的每图元或每像素索引值的产生的示图;
图5说明了用于利用本发明的图形流水线的增强的能力的示例性非限制性的流程图。
具体实施方式
综述
如所述,本发明通过对像素着色器、顶点着色器和几何图形着色器使用动态可配置的公共着色器核心,对已有的硬件添加了更大的功能性,增强了图形流水线。公共着色器核心允许简化的优化,因为不同着色器的相同的硬件单元通过在作为流水线的一部分的着色器不被需要时重新配置或禁用该着色器,从而对仍然活动的级释放资源,来提供负载平衡。本发明引入了一种几何图形着色器,能够对包括点、线和三角形的图元进行操作,从而有利的是能够通过以有限数量的预先设置的模式操作的细分器、或由可编程几何图形着色器相对任意地在流水线内产生新的几何图形。本发明的另一个实施例包括流输出,其中图元数据可流输出到缓冲器,用于在流水线中的任何地方重新使用,允许流水线的递归可编程算法的应用程序。其它特征包括通过图形流水线的每个图元的唯一索引,以及在图形流水线中进行精确的整数和浮点计算。
示例性联网和分布式环境
本领域的普通技术人员能够理解,可利用按照计算机网络或分布式计算环境中的一部分而部署的任何计算机或其它客户端或服务器设备来实施本发明。就这一点而言,本发明适合于具有任何数量的存储器或存储单元、发生在任何数量的存储单元或存储容量之间的任何数量的应用程序和进程的任何计算机系统或环境,可根据本发明与用于实现增强的图形流水线的非限制性实施方式的处理一起使用。本发明可适用于部属于网络环境或分布式计算环境中的具有远程和本地存储器的服务器计算机和客户端计算机的环境中。本发明还可适用于具有编程语言功能、用于产生、接收和发送与远程或本地服务有关的信息的解释和执行能力的单独的计算设备。在游戏环境中,图形流水线尤其与网络或分布式计算环境中工作的计算设备有关,从而根据本发明的增强的图形流水线技术可以极大的有效性适用于这些环境中。
分布式计算通过在计算设备和系统之间进行交换来提供对计算机资源和服务的共享。这些资源和服务包括信息交换、文件的高速缓存和盘存储。分布式利用了网络的互联性,允许客户端利用他们的集体力量来有益于整个事业。就这一点而言,各种设备可具有可涉及本发明的图形流水线处理的应用程序、对象或资源。
图2A提供了示例性联网或分布式计算环境的示意图。该分布式计算环境包括计算对象10a、10b等,以及计算对象或设备110a、110b、110c等。这些对象可包括程序、方法、数据存储、可编程逻辑等等。这些对象可包括诸如PDA、音频/视频设备、MP3播放器、个人计算机等之类的相同或不同的设备中的一部分。每个对象可通过通信网络14与另一个对象进行通信。该网络本身可包括对图2A的系统提供服务的其它计算对象和计算设备,并且其本身可表示多个互联的网络。根据本发明的一方面,每个对象10a、10b等或110a、110b、110c等可包含可利用API、其它对象、软件、固件和/或硬件的应用程序,以请求使用根据本发明的图形流水线处理。
还能理解到,诸如110c之类的对象可在另一计算设备10a、10b等或110a、110b等上得到控制。从而,虽然所描述的实际环境可能示出连接的设备为计算机,但是这些示例仅仅是示例性的,实际环境可以改变以包含诸如PDA、电视机、MP3播放器等之类的各种数字设备,诸如接口、COM对象等之类的软件对象。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可通过有线和无线系统、通过局域网或广域分布网络连接在一起。当前,许多网络都与因特网相耦合,因特网提供了用于广域分布式计算的架构,并包含了许多不同的网络。对于与根据本发明的增强的图形流水线有关的示例性通信,可使用任何基础结构。
在家庭联网环境中,至少存在四种完全不同的网络传输媒介,每一种可支持唯一的协议,诸如输电线、数据(无线或有线)、话音(如电话)以及娱乐媒介。诸如电灯开关和用具之类的大多数家庭控制设备可使用输电线进行连接。数据服务(Data Service)可以宽带方式(例如DSL或电缆调制解调器(Cable modem))进入家庭,可使用无线(例如家庭红外线(HomeRF)或802.11B)或有线(例如家庭PNA(Home PNA)、Cat 5、因特网、甚至是输电线)连接以在家庭中访问数据服务。话音通信可按照有线(例如Cat 3)或无线(例如移动电话)进入家庭,可使用Cat 3布线分布于家庭之中。娱乐媒介或其它图形数据可通过卫星或电缆进入家庭,并一般使用同轴电缆来分布于家庭中。IEEE1394和DVI也是用于媒体设备群的数字互联技术。所有这些网络环境以及可能呈现为协议标准的其它环境都可进行互联来形成诸如内联网之类的网络,可通过因特网将内联网与外部连接。简而言之,存在各种不同的源用于数据的存储和传输,因此,计算设备将需要共享诸如与程序对象有关而被访问或使用的数据之类的数据的方式,这利用了根据本发明的增强的图形流水线。
因特网通常涉及利用计算机联网领域中公知的TCP/IP协议组的网络和网关的集合。TCP/IP是“传输控制协议/网际协议”首字母缩写形式。因特网能够被描述成通过执行允许用户在网络上交互和共享信息的联网协议的计算机进行互联的地理上分布的远程计算机网络的系统。由于这种广泛的信息共享,诸如因特网之类的远程网络至今已经发展成一种开放式系统,开发者能够设计软件应用程序来进行专门的操作或服务,而实际上没有任何限制。
从而,网络基础结构允许一大批网络拓扑,例如客户端/服务器、对等式、或混合架构。“客户端”是一类或一组成员,它利用了与该类或改组成员无关的另一类或一组成员的服务。从而,在计算过程中,客户端是一个进程,即一般来说是一组指令或任务,请求另一程序提供的服务。客户端进程利用请求的服务而本身不必“知道”关于其它程序或该服务的任何工作细节。在客户端/服务器架构中,特别是联网系统中,客户端通常是访问又例如服务器的另一计算机提供的共享网络资源的计算机。在图2A的例子中,计算机110a、110b等可以被看作是客户端,而计算机10a、10b等可以被看作是服务器,其中服务器10a、10b等保持着随后在客户端计算机110a、110b等中被复制的数据,但是,根据不同的环境,任何计算机都可以被认为是客户端、服务器或两者皆是。这些计算设备的任一个都可以处理数据或请求可能包含了专门用于实现本发明的增强的图形流水线的图形编程技术的服务或任务。
服务器一般是在诸如因特网之类的远程或本地网络上可被访问的远程计算机。客户端进程可在第一计算机系统中活动,而服务器进程可在第二计算机系统中活动,第一和第二计算机系统通过通信媒介彼此通信,从而提供分布式功能,并允许多个客户端利用服务器的信息收集能力。按照增强的图形流水线的图形编程技术而利用的任何软件对象可分布于多个计算设备或对象上。
客户端和服务器利用协议层提供的功能而彼此通信。例如,超文本传输协议(HTTP)是用于连同万维网(WWW)(或简称为“web”)一起使用的常用协议。一般来说,诸如网际协议(IP)地址之类的计算机网络地址或诸如统一资源定位符(URL)之类的其它引用可用于在服务器或客户端计算机之间进行彼此识别。网络地址可被称为URL地址。可通过通信媒介提供通信,例如,可通过TCP/IP连接而将客户端和服务器彼此耦合,用于进行高容量通信。
从而,图2A例示出示例性的联网的或分布式环境,服务器与客户端计算机通过网络/总线进行通信,在该环境中可采用本发明。详细来说,若干服务器10a、10b等通过通信网络/总线14与若干客户端或远程计算设备110a、110b、110c、110d、110e等互联,通信网络/总线14可以是LAN、WAN、内联网、因特网等等,而客户端或远程计算设备例如是根据本发明的便携式计算机、手持计算机、瘦客户机、联网设备或诸如VCR、Ty、烤箱、灯、加热器等之类的其它设备。从而,本发明可适用于希望实施采用本发明的增强的图形流水线的图形接口的任何计算设备。
在通信网络/总线14是例如因特网的网络环境中,服务器10a、10b等可以是Web服务器,客户端110a、110b、110c、110d、110e等通过诸如HTTP之类的若干已知协议中的任何一种协议与服务器通信。服务器10a、10b等也可作为客户端110a、110b、110c、110d、110e等,这是分布式计算环境的特征。通信可以是有线的或无线的,这视情况而定。客户端设备110a、110b、110c、110d、110e等可以或可以不通过通信网络/总线14进行通信,并可具有与之关联的独立通信。例如,在TV或VCR的情况下,在对其控制的方面可能或可能不存在联网特征。每个客户端计算机110a、110b、110c、110d、110e等和服务器计算机10a、10b等可配备有各种程序模块或对象135,以及与各种类型的存储元件或对象的连接或访问接口,文件或数据流可存储于这些存储元件,或者文件或数据流可下载、传送或转移到这些存储元件。计算机10a、10b、110a、110b等中的任一个或多个可负责数据库20或其它存储元件(例如用于存储根据本发明处理的数据的数据库或存储器20)的维护和更新。从而,可在具有能与计算机网络/总线14进行访问和交互的客户端计算机110a、110b等以及能与客户端计算机110a、110b等和其它类似设备进行交互的服务器计算机10a、10b等,以及数据库20的计算机网络环境中利用本发明。
示例性计算设备
图2B和下面的讨论意图给出可实施本发明的适当的计算环境的总体描述。然而,应理解到的是,各种类型的便携式和其它计算设备和计算对象可用于本发明,即GPU存在于计算环境中的任何情况都可适用本发明。虽然下面描述了通用计算机,但是这仅仅是一个例子,本发明可用具有网络/总线互操作性和交互能力的瘦客户机来实施。从而,可在包含非常少的或最少的客户端资源的联网的主控服务的环境中实施本发明,例如这样一种联网环境:其中客户端设备仅仅充当对网络/总线的接口,例如置于设备中的对象。本质上,可存储数据或可从中将数据取回或发送到另一计算机的任何环境都是所希望的或适当的用于根据本发明的图形优化技术的操作的环境。
虽然不是必须的,但是可通过用于服务的开发者用于设备或对象的操作系统来实施本发明,和/或包含于连同本发明中的用于图形流水线的图形编程技术一起操作的应用程序软件中。可在由诸如客户端工作站、服务器或其它设备之类的一个或多个计算机执行的诸如程序模块之类的计算机可执行指令的一般上下文环境中描述软件。一般来说,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。典型地,程序模块的功能可按照各种实施例中的需要而进行组合或分布。而且,本领域的技术人员将理解到,可用其它计算机系统配置和协议来实施本发明。可适用于本发明的其它已知的计算系统、环境和/或配置包括但不限于:个人计算机(PC)、自动取款机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、网络PC、电器、灯、环境控制元件、小型机、大型机等等。还可在分布式计算环境中实施本发明,其中由通过通信网络/总线或其它数据传输媒介链接的远程处理设备来进行任务。在分布式计算环境中,程序模块可位于本地或远程的包括存储器存储设备的计算机存储媒介中,客户端节点也可表现为服务器节点。
图2B例示出可实施本发明的适当的计算系统环境100的例子,虽然上面已经作出清楚描述,但是计算系统环境100仅仅是适用的计算环境的一个例子,不应被解释成对本发明的使用和功能范围的任何限制。不应把计算环境100解释成对示例性操作环境100中例示出的任一组件或它们的组合有任何依赖或要求。
参考图2B,用于实施本发明的示例性系统包括采用计算机110形式的通用计算设备。计算机110的组件可包括但不限于:处理单元120、系统存储器130、以及将包括系统存储器的各类系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的中的任一种的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线,也称为夹层(Mezzanine)总线。
计算机110通常包括各种计算机可读媒介。计算机可读媒介可以是可由计算机110访问的任一可用媒介,包括易失性和非易失性媒介、可移动的和不可移动的媒介。作为示例而非局限,计算机可读媒介包括计算机存储媒介和通信媒介。计算机存储媒介包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性、可移动的和不可移动的媒介。计算机存储媒介包括但不限于:RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储器、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它媒介。通信媒介通常在诸如载波或其它传输机制的已调数据信号中嵌入计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传送媒介。术语“已调数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信媒介包括有线媒介,如有线网络或直接线缆连接,以及无线媒介,如声音、RF、红外和其它无线媒介。上述任一的组合也应当包括在计算机可读媒介的范围之内。
系统存储器130包括采用易失性和/或非易失性存储器形式的计算机存储媒介,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,通常储存在ROM 131中。RAM 132通常包含处理单元120立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图2B示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可包括其它可移动的/不可移动的、易失性/非易失性计算机存储媒介。仅作示例,图2B示出了对不可移动的、非易失性的磁媒介进行读写的硬盘驱动器141;对可移动的、非易失性的磁盘152进行读写的磁盘驱动器151;以及对可移动的、非易失性的光盘156,如CD-ROM或其它光媒介,进行读写的光盘驱动器155。可以在示例性操作环境中使用的其它可移动的/不可移动的、易失性/非易失性的计算机存储媒介包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器141通常通过不可移动的存储器接口,如接口140,连接到系统总线121,磁盘驱动器151和光盘驱动器155通常通过可移动的存储器接口,如接口150,连接到系统总线121。
图2B讨论并示出的驱动器及其关联的计算机存储媒介为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图2B中,示出硬盘驱动器141储存操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同,也可以与它们不同。这里对操作系统144、应用程序145、其它程序模块146和程序数据147给予不同的标号来说明至少它们是不同的副本。用户可以通过输入设备,如键盘162和定点设备161(通常称为鼠标、轨迹球或触摸板)向计算机110输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线的用户输入接口160连接至处理单元120,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。诸如北桥之类的图形接口182也可连接至系统总线121。北桥是与CPU或主处理单元120进行通信的芯片组,它承担加速图形接口(AGP)通信。一个或多个图形处理单元(GPU)184可与图形接口182通信。就这一点而言,GPU 184一般包括片载存储器,例如寄存器存储器,GPU 184与图像存储器186通信,其中本发明的应用程序变量可对图像存储器其作用。然而,GPU184仅仅是协处理器的一个例子,从而,各种协处理设备可包含于计算机110中,可包括各种程序着色器,例如像素和顶点着色器。监视器191或其它类型的显示设备也通过接口,如视频接口190,连接至系统总线121。除监视器之外,计算机也可包括其它外围输出设备,如扬声器197和打印机196,它们可通过输出外围接口195连接。
计算机110可以在使用到一个或多个远程计算机(如远程计算机180)的逻辑连接的网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公共网络节点,并通常包括许多或所有上述与计算机110相关的元件(尽管图2B中仅例示出存储器存储设备181)。图2B描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其它网络/总线。这类网络环境常见于家庭、办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接至LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或其它装置,用于通过WAN 173(如因特网)建立通信。调制解调器172可以是内置或外置的,通过用户输入接口160或其它适当的机制连接至系统总线121。在网络化环境中,描述的与计算机110相关的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图2B示出远程应用程序185驻留在远程计算机180上。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它手段。
示例性分布式计算框架或架构
由于个人计算和因特网的会聚性,已经开发了且正在开发各种分布式计算框架。个人或商业用户同样配备有用于应用程序和计算设备的无缝互操作的和网络使能的接口,使得计算活动日益面向Web或面向网络。
例如,微软的管理代码平台,即.NET,包括服务器、基本组件块服务,例如基于Web的数据存储和可下载的设备软件。一般来说,.NET平台提供了(1)使得整个范围的计算设备一起工作,并使得在所有计算设备上用户信息自动被更新和同步化的能力,(2)对网页的增强的交互能力,通过更多的使用XML而不是HTML来成为可能,(3)在线服务,以从用于管理诸如电子邮件之类的各种应用程序或诸如Office.Net之类的软件的中央起始点向用户进行产品和服务的定制访问和传递为特征,(4)集中化的数据存储,这增加了对信息访问的有效性和简便性,以及增加了用户和设备之间的信息同步性,(5)集成诸如电子邮件、传真和电话之类的各种通信媒介的能力,(6)为开发者提供了创建可重复使用的模块的能力,从而提高了生产力,降低了编程差错数,以及(7)许多其它的交叉平台和语言集成特征。
虽然这里与驻留于计算设备上的软件有关地描述了某些示例性实施例,但是本发明的一个或多个部分还可通过操作系统、应用程序编程接口(API)或“中间人”(middle man)对象、控制对象、硬件、固件、中间语言指令或对象等来实施,使得本发明的方法可通过诸如.NET代码之类的管理代码所赋予的所有语言和服务来被包含、支持或访问,也可包含于其它分布式计算框架中。
用于提供增强的图形流水线的系统和方法
如本发明的背景和综述部分所描述的那样,本发明通过引入用于优化资源的使用、平衡图形流水线中的工作负荷、允许利用符合IEEE的整数或浮点值访问计算出的信息、以及提供附加的可编程能力的图形流水线的系统和方法,改进了本领域中现有的图形处理技术的状态。本发明针对几何图形处理和可编程着色器。增强的图形流水线包括用于所有着色器的公共核心、用于流水线中发生的计算的流输出、以及考虑到编程图元以及新的几何图形的生成的几何图形着色器。
图3A示出诸如显卡之类的示例性图形子单元,它包括图形处理单元(GPU)184’以及用于相关图形流水线184’-1的示例性硬件配置。如所示,图形流水线184’-1的示例性非限制性的实施例包括公共核心元件184’-1a的多个实例,例如顶点着色器184’-1a1和184’-1a2、具有相关流输出184’-2的几何图形着色器184’-1a3以及像素着色器184’-1a4。在GPU 184’的外部,本实施例包括向第一公共核心184’-1a1发送数据的输入组件。如所示,本实施例的第一公共核心按照顶点着色器来配置。数据随后被发送到细分器184’-1b,进行数据细分。细分器184’-1b之后,存在流水线中的另一公共核心,可用作对数据执行后细分顶点着色(post tessellation vertex shading)。在该实施例中,细分器步骤是可任选的。第二公共核心后接着第三公共核心,第三公共核心按照几何图形着色器184’-1a3来配置。几何图形着色器取一个图元,并输出零个、一个或多个图元。输出的图元可包含比顶点着色器或像素着色器输出的数据更多的数据。在第三公共核心之后,可以是流输出184’-2,到达该点的图元可以数据流的方式输出到一个或多个输出缓冲器。出于提供样本的目的,图3A中包含流输出。流水线中的下一个组件是光栅化处理器184’-1c,其常规功能可包括裁剪、透视划分(perspective divide)、视口(viewport)或剪取(scissor)选择和实现。光栅化处理器之后是第四公共核心184’-1a4,它充当像素着色器,其中它取一个像素并在某个位置输出该像素。在对数据执行了所有功能之后,数据显示在监视器上。
由公共核心、几何图形着色器、流输出以及在本发明的流水线内生成新的几何图形的能力所反映出的本发明的更进一步的实施例在下文中详细描述。
用于流水线中的着色器的公共着色器核心
如背景技术中所描述的那样,有时会由于图形流水线的不同组件的需求而发生资源争用(contention)问题,其中特定的任务要求特定的组件,这会导致流水线的该区域中产生瓶颈。当前的图形流水线要求编程者进行优化,以便最有效地使用流水线中的资源。然而,即使利用最佳优化方案,现有技术硬件本身是固定的,从而经常会出现例如像素着色器或顶点着色器保持空闲,计算涉及大量的矩阵操作,而顶点着色器不能足够快地计算这些值。从而,由于顶点着色器的过度处理而像素着色器置于空闲,流水线可能有瓶颈,反之亦然。根据本发明,由于着色器能够彼此替代,其中像素着色器可重新配置成顶点着色器,因此,可为图形芯片的被要求的任务优化图形芯片的底层资源。此外,如所述那样,本发明引入了一类新的着色器,这里称为几何图形着色器,它提供了另一组专门的处理能力。本发明所提供的公共核心从而能够被配置成顶点着色器、像素着色器和几何图形着色器中的任何一个。
在示例性的非限制性的实施例中,GPU包含一系列单元184’-1a,这些单元184’-1a可按需被安排成不同的级。这种负载平衡意味着编程者不必为使用每一级而担心。任一级都可被动态地使能或禁用、配置或重配置,从而为活动的级释放和重新专门设置。公共核心能够根据其配置而表现为顶点着色器级、几何图形着色器级、以及像素着色器级。
图4A示出了内部公共核心184’-1a的示例性非限制性的实施例。输入数据由前一级提供,该前一级可以是来自流水线中的任何地方。输入寄存器500可以是动态可索引的数组,或二维(2D)数组,这取决于该公共核心表现为哪一级。数据发送到着色器代码510,代码处理所有的矢量浮点和整数算法、存储器取数或抽样运算。
着色器代码接收来自抽样器513、纹理化器514和常数缓冲器515的信息。抽样器513定义了如何抽样纹理。然而,也可不经过过滤来读取存储器,且抽样器在每一个实施例中并非是必需的。因为抽样器对象是静态产生的,因此它使得硬件能够在流水线的行程中维持多个抽样器的坐标(reference),而不必改变或转储清除(flush)流水线(因为抽样器对象维持着它们的定义,并不被修改)。纹理化器514与着色器代码协作,以提供纹理抽样。在该特定实施例中,唯一被允许的资源是那些每纹理像素(texel)包含单个元素格式的资源。着色器代码从常数缓冲器515接收常数。在该实施例中,常数缓冲器将充当一维(1D)纹理,它是为低等待时间和更快频率的更新而优化的。着色器代码500还具有与临时寄存器511和子例程返回地址堆栈512的双向通信。临时寄存器511用作为临时存储器。在示例性的非限制性的实施例中,寄存器可以保持高达临时存储器的极限的任何尺寸和数量的任何不可索引的或可索引的数组。在该特定的非限制性的示例性实施例中,子例程返回地址堆栈512是固定高度的。此外,该堆栈对于直接着色器访问来说是不可见的,而仅仅透明地存储返回地址。它也允许递归算法的定义。
在代码通过着色器代码510之后,数据到达输出寄存器520。在该示例性非限制性的实施例中,输出寄存器由四个矢量输出的动态可索引的数组组成。此外,某些级可具有额外的专门输出。数据然后输出到下一着色器级,作为流输出或某一绘制级,这取决于流水线。
所列出的数据结构可从1D数组改变成2D数据或列表。所有的数据结构都可改变,这取决于GPU的大小和存储能力。在GPU内,由于动态分配以及对信息施加压缩算法以节省空间,因此,对存储极限和固定高度的改变可能发生。抽样器和常数缓冲器可具有纹理化器的性质,然而,随着资源的变化,可修改这些组件的定义。如果重新定义纹理化器,抽样器和常数缓冲器都可改变,并不仅限于纹理化器的功能。此外,所有的数据结构都可实现新的优化算法,这出于速度和使用目的。这里所描述的各种实施例仅仅是使用公共核心的图形流水线的例子,公共核心可被动态地配置成提供顶点着色器、像素着色器和几何图形着色器的功能。
几何图形着色器对图元操作
当今,随着图形编程者通过一组可利用的图形API开发图形应用程序,编程者一般指示一组顶点要由一组算法元素来操作。规定了信息之后,数据发送到图形流水线,每个顶点流过顶点着色器和像素着色器,如图1A所例示的那样。虽然可规定适合于顶点和像素着色器的输入结构的任何数据,但是顶点着色器通常被适应于和用于对顶点进行操作,而像素着色器通常被适应于和用于对像素进行操作。
就这一点而言,根据本发明的几何图形着色器是一种用于图形子系统中的GPU的新型的着色器,能够采用包括顶点、线或三角形中的任一种的不同类型的“图元”(primitive)输入,而现有技术着色器(即顶点着色器)限于能够输入、操作和输出顶点。在区别上,除了对顶点流的操作之外,本发明的几何图形着色器能够对定义线(二顶点组)和三角形(三顶点组)的图元进行操作,根据本发明的图形架构,在流水线内接收这些图元作为输入,并在流水线内输出图元用于进一步的操作。
根据本发明的图元处理的一个更进一步的方面是,几何图形着色器不仅仅对整个图元本身进行操作,还在某些额外的附近的顶点的上下文中进行操作。例如,可利用读取一条折线中的一个线段之前和之后的顶点的能力来处理该线段。虽然这种机制是普通的(图形数据不需要是“图形”数据,它可以是为GPU的处理而定义的任何数据),对于这种处理图元的相邻顶点的能力的经常的用途是:几何图形着色器能够在当前的计算中考虑到3-D几何空间中的相邻点的信息。
在图4B中,示出了几何图形着色器的功能的实施例,其中TV0、TV1、TV2、LV0、LV1是输入数据。输出数据可包括额外的点,由前缀AV来指示出。从而几何图形着色器可取一个图元,而输出多个图元,任选地处理相邻的图元,例如相邻的顶点。输出的某些例子包括类似三角形带(triangle strip)、线条或点列表的拓扑结构。在该示例性的非限制性的实施例中,几何图形着色器的输出输出到光栅化处理器用于进行绘制,和/或输出到缓冲器用于流输出。
该概念在图4C中进一步说明。根据本发明,可选地,要由图形流水线处理的图形数据的数据也可被赋予索引。为了索引数据,将预先用与正通过流水线的数据一起使用的索引信息预先填充单独的存储器。除了与该现有技术方法有关的同步化问题(将索引与正被处理的图形数据同步)之外,也存在清楚的速度暗示。虽然产生索引信息是快速的,但是将索引信息写入图像存储器以及从要与流化的图形数据一起使用的图像存储器读取是耗时的。
从而,利用本发明,输入汇编器IA输出要由公共核心操作的数据,还带有任何可选的相邻信息(关于图元或数据流中的邻居的信息),并且可对图形数据所表示的每个元素(图元、数据点、像素值等)生成对应的索引流。在一个实施例中,索引起始于0,按数据的每个新的元素而加1,但是可使用任何其它的索引值作为起始索引值。而且,对于某些应用,产生有序的索引也许不是很有用,因此,在一般情况下,本发明对每个图形数据元素产生唯一的标识(ID)值,它可以是或不需要是有序的。
索引能力具有广泛的含义,使用范围是巨大的。例如,对于几何图形示例,存储器的第一区域可具有定义了树的图形数据以及描述了树的位置的另一张表。根据流水线处理的计数或索引,GPU可对图像存储器的部分进行取数,将树的变量置于表所定义的位置。本发明使得能够在处理数据的同时,使用索引值作为图像存储器寻址方案的一部分,即索引可表示在何处以及何时来检索(和/或写入)图像存储器的部分用于处理。作为另一个例子,将不同的算法施加到三角形流中的每四个三角形,并对该流的每八个三角形执行该算法两次,这是有用的。对图元进行索引的能力正好使该能力成为可能。从而下载到着色器的程序可程序化地使用与图形数据相关联的索引值,同时检索图像存储器或写入图像存储器,还同时处理图形数据。
帧缓冲器光栅化处理之前的存储器流输出
如背景部分中所讨论的那样,利用当今的图形流水线,从GPU使用的图像存储器中进行读取以察看流水线中进行的计算的结果,这几乎是不可能的。知道在数据被GPU的程序着色器处理时如何定位和提取数据的知识,但是在当今的架构中,实际上从图像存储器提取数据太过困难。图1B示出了编程者如何能够着手从图形流水线的输出(即帧缓冲器)中取回数据,并暗示主机资源以便将数据发送回流水线用于进一步的处理。如所解释的那样,该任务要求编程者从帧缓冲器或显示器中获得数据。一般来说,如果在数据通过流水线之后对数据的进一步处理是必需的,则编程者等待帧缓冲器接收的信息,并调用CPU的资源以实现该进一步的处理。
考虑到当前的图形流水线在流水线内的图形数据的再循环方面的缺点,本发明允许编程者在数据位于流水线内的同时“接入”(tap into)流水线,其中接头(tap)可以打开或关闭。当打开时,流水线包括可从存储器读取用于主机检索或其它操作、或重新循环到流水线内以执行递归或循环功能的数据输出流。此外,如有必要,信息可以流的方式输出,同时相同的数据进入光栅化处理器,从而不会减慢数据的绘制,或者按照图像根据操作数据的递归算法元素而经受变换来显示图像。
图3B示出了根据本发明的流输出的一个实施例。在该实施例中,上述的公共核心表现为几何图形着色器184-1a3,它对数据执行计算或操作,并且存在流输出184’-2,从而,当打开时,根据本发明数据被写入缓冲器。在图中,流输出示为将数据循环到着色器本身。例如在编程者希望对给定的数据执行多通道操作时,这种类型的循环是有用的。然而,按照下载到GPU的程序的规定,还存在其它的方法使用流输出来循环数据。循环数据的另一方法是将数据再次发送通过流水线,再次将数据输入到输入汇编器。本发明的流输出能力是可任选的,应用程序可以仅仅允许流水线发送通过数据,而不将数据读取到流输出缓冲器。此外,流输出缓冲器是可用于存储流化的数据的存储器类型中的一个例子。常常会出现不同类型的存储器可用于这种功能,例如微处理器中的高速缓冲存储器。
最后,存储器受限于其空间,因此,流输出跟踪取决于缓冲器大小的数据量。当存储器存储空间满时,在一个示例性的实施例中,着色器继续其对所有数据的运算,同时计算存储所有的输出数据所需要的字节数。当不能预期运算将产生多少数据的时候,这是有用的。流输出可用于图形,但不仅限于图形。虽然这是对图形流水线的增强,但是GPU可用于数学运算,并可使用GPU和CPU两者的处理能力。对流输出的使用覆盖了较大的范围,因为流输出并不会停止图形流水线的光栅化处理功能,仅仅通过在下载到GPU的专门程序的灵活性方面向开发者提供了更多的程序方面的能力而增强了流水线的性能。如所述,根据本发明的能够接入公共核心的输出的能力所带来的非常有用的结果是可将数据在程序上重新循环到流水线的其它部分,即编程者可将执行数据的递归操作(递归地通过相同的算法重新循环数据)或另外用预先固定的次数循环数据的程序下载到GPU。
流水线内几何图形的生成
如所述,当今,随着图形编程者通过一组可用的图形API来开发图形应用程序,编程者一般指示出要由一组算法元素操作的一组顶点。规定了信息之后,数据发送到图形流水线中,每个顶点以流的方式通过固定的一组GPU子单元,例如图1A所例示的细分器、顶点着色器和像素着色器。虽然可规定适合于用于顶点和像素着色器的输入结构的任何数据,但是顶点着色器一般适应于和用于对顶点的操作,像素着色器一般适应于和用于对像素的操作。然而,除了能够根据位于根据预定的算法的程序着色之前的预先定义的控制点生成几何图形的固定级细分之外,当今的流水线中没有任何地方能够用于产生新的顶点或几何图形用于进一步的处理。
而且,本发明的细分器可用于在一个或多个程序着色级之后使用,以接收流水线内生成的一组控制点,并根据配置图形API下载的流水线的程序,进行程序操作,以生成任何新数量的几何图形点。例如,在希望对粗网眼(mesh)进行粗操作,但随后希望对网眼进行精制以用于要求更多的实际形状模型的其它操作的情况下,这是有帮助的。几何图形的细分器生成预先被局限于流水线的开始级,并限制为对预先规定的控制点输入的预先固定的操作。考虑到这些限制,本发明在流水线的起始处使得公共核心能够任意地在流水线内生成控制点(细分器的上行流),将这些控制点输出到细分器,细分器生成下行流操作的额外的几何图形,作为细分器的输出。
如所述,本发明的几何图形着色器还可用于以更一般的和可编程的方式生成新的几何图形,这与细分器不同--细分器是固定功能的(不可编程),但与可编程的几何着色器相比能生成任意数量的数据(n×n网眼,对于n没有限制),但受限于能够生成多少新的几何图形。
对于某些示例性的非限制性的情况,本发明的几何图形着色器通过使用拓扑而不是单个顶点来创建输出顶点,以帮助编程者。算法的某些例子包括点子图形(point sprite)细分、粗线细分、毛边(fin)生成、阴影量生成、以及单通道绘制到多纹理立方体面。为了执行点子图形细分,着色器将取单个顶点,并生成四个顶点,或表示四边形的四个角的两个输出三角形,而执行粗线细分时,着色器接收两个线顶点,类似于图4B中的LV0和LV1,生成用于表示加宽的线的四边形的四个顶点。此外,几何图形着色器可使用相邻的线顶点AV0和AV1,以进行对线端点的斜接(miter)。
几何图形着色器还可用于生成毛或毛边,但不限于毛或毛边,而是包含单个拓扑的第三方向中添加的任何额外的顶点。例子包括毛发、鳞片、草地等,其中描述几何图形的图元馈入几何图形着色器,几何图形着色器使几何图形任意地生长以补充形状。从而,例如,利用毛发,根据输入到几何图形着色器的三角形,几何图形着色器能够在每个顶点添加表示毛发的一些顶点。有利的是,由于到几何图形着色器的三角形流包括关于顶点的邻居的信息,可以在处理过程中考虑顶点的邻居的几何图形的近似和特性(颜色、深度等)。
虽然当前本发明的几何图形着色器局限于按照由图形API下载到几何图形着色器的程序规定,能够生成最多数量的新的任意的几何图形,但是,当与下面更详细地描述出的流输出所使能的本发明的递归能力相组合时,本发明使得非限制的几何图形的任意生成成为可能。
对几何图形着色器的另一示例性的非限制性的使用包括阴影量生成,其中使用相邻信息来决定是否要挤压(extrude)。此外,应用程序可能希望生成新的几何图形,例如毛或毛边,从中挤压阴影量。在这些情况中,将采用几何着色器的多通道功能,使用通过使用流输出来输出数据流并将其循环返回的能力。
图5说明了示出应用程序如何作出图形调用以实现本发明的架构的上述好处的示例性非限制性的流程图。在550处,规定要被操作的图形数据。如所述,与过去相比,在前端需要规定的图形数据量更少,因为根据本发明,即使是递归地,也可在流水线内生成任意量的几何图形。在560处,用于GPU执行的程序可下载到GPU,以定义GPU操作的算法元素。在570处,输入汇编器(例如见图3A)自动地取550处规定的图形数据和560处规定的程序,并根据本发明优化公共核心的配置。从而,在顶点或像素运算作为560处传递到GPU的程序元素和550处规定的图形数据的说明的一部分是密集的场合,本发明可配置流水线核心以分别包括许多顶点着色器或像素着色器。另一方面,在希望对三角形作复杂运算的场合,输入汇编器可重新配置核心,以包括多个几何图形着色器。此外,可以添加诸如流输出特征和预细分程序着色级以及后细分程序着色级。在580处,输入汇编器察看为图形流水线的处理而规定的工作项,将工作分配给核心。在该级,可把索引添加到通过流水线的图元上,例如每个图元一个索引或每个像素一个索引。
其实,可以很快地看到能够动态地为请求执行的任务进行定制的高度专门化的和快速的硬件的好处。这包括能够通过流输出规定递归程序、能够动态地重配置核心、能够快速地操作顶点,同时并发地取与顶点的邻居有关的输入、能够在流水线中的任意位置任意生成新的几何图形(几何图形的预细分生成、几何图形的细分器生成以及几何图形的后细分生成)。因此,从更接近于仅受限于对根据本发明对图形数据能够实现什么的想像力的开发者的观点来看,本发明的优点几乎是无限的。
从而,本发明的增强的流水线包括了一种公共核心,它是能够动态重配置的,以对于流水线请求的任务最适合的方式分配像素着色器、几何图形着色器和顶点着色器。本发明还包括一种新的程序着色器,称为几何图形着色器,它能够对任何点、线和三角形的流进行操作。而且,本发明包括能够通过细分器或几何图形着色器在流水线内生成新的几何图形的能力。本发明还包括流输出,在数据到达帧缓冲器用于光栅化处理之前可接入流水线内,使得能够对数据进行程序递归和循环算法。此外,本发明还包括对进入图形流水线或在图形流水线中创建的每个图元进行索引的能力。图形流水线还能够根据IEEE标准执行整数和浮点运算。
实现本发明的方法有许多,例如适当的API、工具包、驱动器代码、操作系统、控制、独立的或可下载的软件对象等,它们能够使得应用程序和服务使用本发明的增强的图形流水线的系统和方法。本发明从API(或其它软件对象)的观点考虑了本发明的使用,还从接受上述任何技术(包括根据本发明的公共核心、几何图形着色器或流输出的技术)的观点考虑了本发明的使用。从而,这里所描述的本发明的各种实现可具有完全硬件、部分硬件和部分软件、以及完全软件的各种特征。
如上所述,虽然已经连同各种计算设备和网络架构描述了本发明的示例性的实施例,但是其基础概念可适用于希望采用具有增强的图形流水线的GPU的任何计算设备或系统。例如,本发明的算法和硬件实现可适用于计算设备的操作系统、作为设备上的单独对象、作为另一对象的一部分、作为可重复使用的控制、作为可从服务器下载的对象、作为设备或对象与网络之间的“中间件”、作为分布式对象、作为硬件、存储于存储器中、或上述的任何组合。虽然这里选择示例性的编程语言、名称和例子作为各种选择的代表,但是这些语言、名称和例子不是任何限制。本领域的普通技术人员将理解到存在各种方式来提供能够实现与本发明的各种实施例所实现的功能相同、相类似或相等价的功能的对象代码和术语。
如所述,此处所描述的各种技术可以结合硬件或软件,或在适当时用两者的组合来实现。由此,本发明的方法和装置,或其某些方面或部分,可采用诸如软盘、CD-ROM、硬盘或任一其它机器可读存储介质等有形介质中所包含的程序代码(即,指令)的形式,其中,当程序代码被加载到诸如计算机等机器中并由其执行时,该机器变为用于实施本发明的装置。在可编程计算机上的程序代码执行的情况下,计算装置一般包括处理器、处理器可读的存储介质(包括易失和非易失存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。可例如通过使用数据处理API或其类似于来利用本发明的域专用编程模型各方面的创建和/或实现的一个或多个程序较佳地以高级过程语言或面向对象的编程语言来实现,以与计算机系统通信。然而,如有需要,程序可以用汇编语言或机器语言来实现。在任何情况下,语言可以是已编译或已解释语言,并与硬件实现相组合。
本发明的方法和装置也能经过以程度代码形式实施的通信来实现,它通过某些传输介质传输,如通过电线或电缆、通过光纤或通过其它传输方式,其中,当程序代码被如EPROM、门阵列、可编程逻辑器件(PLD)、客户计算机等机器接收、加载和执行时,该机器就成为实施本发明的机器。当在通用处理器上实现时,程序代码与处理器结合以提供调用本发明的功能的唯一的机器。此外,用于本发明的任何存储技术可以不变地是硬件和软件的组合。
尽管连同各种附图的较佳实施例描述了本发明,但是可理解到可使用其它类似的实施例,或者可对所描述的实施例作出修改和添加,用于执行与本发明相同的功能,而不背离本发明。例如,虽然本发明的示例性的网络环境以联网环境的上下文来描述,例如对等联网环境,但是本领域的技术人员将认识到本发明不限于此,本发明中所描述的方法可适用于任何计算设备和环境,例如游戏控制台、手持计算机、便携式计算机等,它们可以是有线的或无线的,并且可将本发明的方法适用于通过通信网络链接的和在网络上进行交互的任何数量的此类计算设备。此外,应强调的是,还考虑到各种计算平台(包括手持设备操作系统和其它应用专用的操作系统),尤其是在无线联网设备的数量持续增长的情况下更是如此。
虽然示例性的实施例涉及在图形流水线的上下文中利用本发明,但是本发明不限于此,而是可实施来提供第二处理单元。例如,如果编程者希望将显示画面绘制到屏幕上,并在使用CPU执行另一功能的同时处理数学运算,则处理单元可能需要完全被使用,而不管图形显示是否包含在最终的输出中。进一步,本发明可在多个处理芯片或设备上实施,并且,存储在多个设备上都是类似有效的。因此,本发明不应限于单个实施例,而应按照所附权利要求书的宽度及范围来予以解释。

Claims (34)

1.一种动态配置图形流水线的方法,其特征在于,包括:
通过图形应用程序编程接口API,规定要由图形处理单元GPU的多个公共核心元件执行的一个或多个工作项,其中每个公共核心元件可动态地配置成执行用于顶点、像素或图元的专门处理;
通过输入汇编器接收所述API的输出;
根据所述一个或多个工作项,按照为处理顶点而配置的公共核心元件、为处理像素而配置的公共核心元件、以及为处理图元而配置的公共核心元件中的至少一个的组合,由所述输入汇编器确定所述多个公共核心元件的最优配置,其中所述确定包括动态地将所述多个公共核心元件配置成顶点着色器、像素着色器或几何图形着色器,用于分别处理顶点、像素和图元;
由所述多个公共核心元件接收来自所述输入汇编器的输入,所述输入汇编器用于定义:根据基于所述GPU上的资源需求的所述多个公共核心元件的动态优化,规定公共核心元件用于处理顶点、像素还是图元;
将对公共核心元件进行编程的软件下载到公共核心元件,一旦被配置用于处理顶点、像素或图元,则以程序方式执行对顶点、像素和图元中的一个的所述处理。
2.如权利要求1所述的方法,其特征在于,所述规定包括规定要被执行的至少一个任务和要对其执行所述至少一个任务的图形数据。
3.如权利要求1所述的方法,其特征在于,所述确定包括动态地配置所述多个公共核心元件中的一个或多个公共核心元件的子元件,使得一个公共核心元件的子元件的配置规定了所述公共核心元件用于处理顶点、像素和图元中的一个。
4.如权利要求3所述的方法,其特征在于,所述动态可配置的子元件包括输入门、寄存器存储器、处理单元子元件和输出门。
5.如权利要求1所述的方法,其特征在于,所述下载包括根据公共核心元件的配置将程序下载到公共核心元件以对所述顶点、像素或图元计算算法元素,从而所述算法元素完全与IEEE浮点和整数算法标准兼容。
6.如权利要求1所述的方法,其特征在于,所述程序方式包括递归。
7.如权利要求1所述的方法,其特征在于,所述下载包括下载允许流输出的指令,从而在公共核心元件中要计算的信息在存储到可光栅化处理的帧缓冲器存储器中之前,可任选地输出到可检索的图像存储器。
8.如权利要求1所述的方法,其特征在于,还包括通过对图形数据进行索引来调度所述一个或多个工作项,其中所述图形数据包括顶点、像素和图元中的一个。
9.一种包含于图形处理单元中的公共核心元件,其特征在于,包括:
动态可配置的子元件,对所述公共核心元件的所述子元件的配置规定所述公共核心元件用于处理顶点、像素和图元中的一个,
其中,所述公共核心元件是可按顶点着色器、像素着色器或几何图形着色器来配置的,用于分别处理顶点、像素和图元,
其中,所述公共核心元件接收来自输入汇编器的输入,所述输入汇编器用于定义:规定所述公共核心元件用于处理顶点、像素还是图元,
其中,所述公共核心元件接收从所述输入汇编器输入的对所述公共核心元件进行编程的软件程序,一旦被配置用于处理顶点、像素或图元,则以程序方式执行对顶点、像素和图元中的一个的所述处理。
10.如权利要求9所述的公共核心元件,其特征在于,所述动态可配置的子元件包括输入门、寄存器存储器、处理单元子元件和输出门。
11.如权利要求9所述的公共核心元件,其特征在于,从输入汇编器接收的输入定义了输入门、寄存器存储器、处理单元子元件和输出门的内部配置。
12.如权利要求9所述的公共核心元件,其特征在于,所述程序方式包括递归。
13.如权利要求9所述的公共核心元件,其特征在于,所述公共核心元件接收由输入汇编器索引的要被操作的工作数据。
14.如权利要求9所述的公共核心元件,其特征在于,还包括流输出,从而在公共核心元件中要计算的信息在存储到可光栅化处理的帧缓冲器存储器中之前,可任选地输出到可检索的图像存储器。
15.如权利要求9所述的公共核心元件,其特征在于,所述公共核心元件支持下载程序对公共核心元件进行编程,以对所述顶点、像素或图元计算算法元素,从而所述算法元素完全与IEEE浮点和整数算法标准兼容。
16.一种图形处理单元,其特征在于,包括:
多个公共核心元件,每个公共核心元件包括动态可配置的子元件,对所述公共核心元件的所述子元件的配置规定所述公共核心元件用于处理顶点、像素和图元中的一个,
其中,所述多个公共核心元件是可根据图形处理单元要处理的工作项所需的优化定义的动态资源,按照用于处理顶点、像素和图元的顶点着色器、像素着色器或几何图形着色器的任意组合来配置的,
其中,所述多个公共核心元件接收来自输入汇编器的输入,所述输入汇编器用于定义:根据基于所述图形处理单元上的资源需求的所述多个公共核心元件的动态优化,规定公共核心元件用于处理顶点、像素还是图元,
其中,所述多个公共核心元件中的一个或多个接收从所述输入汇编器输入的对公共核心元件进行编程的软件程序,一旦被配置用于处理顶点、像素或图元,则以程序方式执行对顶点、像素和图元中的一个的所述处理。
17.如权利要求16所述的图形处理单元,其特征在于,所述动态可配置的子元件包括输入门、寄存器存储器、处理单元子元件和输出门。
18.如权利要求16所述的图形处理单元,其特征在于,从输入汇编器接收的输入定义了所述多个公共核心元件中的每一个公共核心元件的输入门、寄存器存储器、处理单元子元件和输出门的内部配置。
19.如权利要求16所述的图形处理单元,其特征在于,所述程序方式包括递归。
20.如权利要求16所述的图形处理单元,其特征在于,所述多个公共核心元件中的一个或多个公共核心元件接收由输入汇编器索引的要被操作的工作数据。
21.如权利要求16所述的图形处理单元,其特征在于,所述多个公共核心元件中的一个或多个公共核心元件包括流输出,从而在一个或多个公共核心元件中要计算的信息在存储到可光栅化处理的帧缓冲器存储器中之前,可任选地输出到可检索的图像存储器。
22.如权利要求16所述的图形处理单元,其特征在于,所述多个公共核心元件中的每一个支持下载程序对相关的公共核心元件进行编程,以对所述顶点、像素或图元计算算法元素,从而所述算法元素完全与IEEE浮点和整数算法标准兼容。
23.一种具有动态可配置的图形流水线的图形子系统,其特征在于,包括:
用于通过图形应用程序编程接口API,接收要由图形处理单元GPU的多个公共核心元件执行的一个或多个工作项的装置,其中每个公共核心元件可动态地配置成执行用于顶点、像素或图元的专门处理;
用于通过输入汇编器接收所述API的输出的装置;
用于根据所述一个或多个工作项,按照为处理顶点而配置的公共核心元件、为处理像素而配置的公共核心元件、以及为处理图元而配置的公共核心元件中的至少一个的组合,确定所述多个公共核心元件的最优配置的装置,其中所述用于确定的装置包括动态地将所述多个公共核心元件配置成顶点着色器、像素着色器或几何图形着色器,用于分别处理顶点、像素和图元的装置;
用于由所述多个公共核心元件接收来自所述输入汇编器的输入的装置,所述输入汇编器用于定义:根据基于所述GPU上的资源需求的所述多个公共核心元件的动态优化,规定公共核心元件用于处理顶点、像素还是图元;
用于将对公共核心元件进行编程的软件下载到公共核心元件的装置,一旦被配置用于处理顶点、像素或图元,则以程序方式执行对顶点、像素和图元中的一个的所述处理。
24.如权利要求23所述的图形子系统,其特征在于,所述用于接收的装置包括用于接收要被执行的至少一个任务和要对其执行所述至少一个任务的图形数据的装置。
25.如权利要求23所述的图形子系统,其特征在于,所述用于确定的装置包括动态地配置所述多个公共核心元件中的一个或多个公共核心元件的子元件的装置,使得一个公共核心元件的子元件的配置规定了所述公共核心元件用于处理顶点、像素和图元中的一个。
26.如权利要求23所述的图形子系统,其特征在于,所述动态可配置的子元件包括输入门、寄存器存储器、处理单元子元件和输出门。
27.如权利要求23所述的图形子系统,其特征在于,所述下载到公共核心元件的程序根据公共核心元件的配置对公共核心元件进行编程,以对顶点、像素或图元计算算法元素,从而所述算法元素完全与IEEE浮点和整数算法标准兼容。
28.如权利要求23所述的图形子系统,其特征在于,所述程序方式包括递归。
29.如权利要求23所述的图形子系统,其特征在于,所述用于下载的装置包括下载允许流输出的指令的装置,从而在公共核心元件中要计算的信息在存储到可光栅化处理的帧缓冲器存储器中之前,可任选地输出到可检索的图像存储器。
30.如权利要求23所述的图形子系统,其特征在于,还包括通过对所述图形数据进行索引来调度所述一个或多个工作项的装置,其中所述图形数据包括顶点、像素和图元中的一个。
31.一种数据处理方法,其特征在于,包括:
由输入汇编器对图形处理单元GPU的公共核心元件进行编程,使其配置成执行第一功能,所述输入汇编器用于定义:根据基于所述GPU上的资源需求的所述多个公共核心元件的动态优化,规定公共核心元件用于处理顶点、像素还是图元;
将第一数据流输入到公共核心元件;
对第一数据流执行所述第一功能;
由所述输入汇编器对所述公共核心元件进行动态重编程,使其配置成执行第二功能;
将第二数据流输入到公共核心元件;
对所述第二数据流执行所述第二功能,
其中,所述第二功能包括像素着色器、顶点着色器和几何图形着色器中的一个的功能,分别用于对于像素、顶点和图元中的一个执行操作,
其中,由所述输入汇编器将对所述公共核心元件进行编程的软件程序下载到所述公共核心元件,一旦被配置用于处理顶点、像素或图元,则以程序方式执行对顶点、像素和图元中的一个的所述处理。
32.如权利要求31所述的方法,其特征在于,所述动态重编程步骤包括允许流输出,其中公共核心元件中计算的信息在存入帧缓冲器用于绘制之前,以非图形格式输出到所述流输出。
33.如权利要求32所述的方法,其特征在于,所述流输出包括用于分别对所述第一数据流和所述第二数据流执行所述第一功能或第二功能而产生的数据。
34.如权利要求32所述的方法,其特征在于,所述流输出包括符合IEEE兼容的浮点和整数运算标准所定义的运算标准的数据。
CN2005100649200A 2004-05-03 2005-04-04 提供增强的图形流水线的系统和方法 Active CN1702692B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US56749004P 2004-05-03 2004-05-03
US60/567,490 2004-05-03
US10/934,249 US7570267B2 (en) 2004-05-03 2004-09-03 Systems and methods for providing an enhanced graphics pipeline
US10/934,249 2004-09-03

Publications (2)

Publication Number Publication Date
CN1702692A CN1702692A (zh) 2005-11-30
CN1702692B true CN1702692B (zh) 2010-09-08

Family

ID=35632419

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005100649200A Active CN1702692B (zh) 2004-05-03 2005-04-04 提供增强的图形流水线的系统和方法

Country Status (2)

Country Link
US (3) US7671862B1 (zh)
CN (1) CN1702692B (zh)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7671862B1 (en) * 2004-05-03 2010-03-02 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7728841B1 (en) * 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
CN101433048B (zh) * 2006-03-28 2012-11-07 雷帝系统加拿大有限公司 并行多核心计算结构的多媒体处理
US20080174598A1 (en) * 2007-01-12 2008-07-24 Max Risenhoover Design visualization system, apparatus, article and method
JP4987070B2 (ja) * 2007-04-11 2012-07-25 パナソニック株式会社 画像生成装置及び画像生成方法
US20090033659A1 (en) * 2007-07-31 2009-02-05 Lake Adam T Real-time luminosity dependent subdivision
KR101076807B1 (ko) * 2009-05-29 2011-10-25 주식회사 실리콘아츠 레이 트레이싱 장치 및 방법
US20110043518A1 (en) * 2009-08-21 2011-02-24 Nicolas Galoppo Von Borries Techniques to store and retrieve image data
US9390539B2 (en) * 2009-11-04 2016-07-12 Intel Corporation Performing parallel shading operations
EP2517169A4 (en) * 2009-12-23 2017-10-18 Intel Corporation Image processing techniques
US8587594B2 (en) * 2010-05-21 2013-11-19 International Business Machines Corporation Allocating resources based on a performance statistic
US8629867B2 (en) 2010-06-04 2014-01-14 International Business Machines Corporation Performing vector multiplication
US8692825B2 (en) 2010-06-24 2014-04-08 International Business Machines Corporation Parallelized streaming accelerated data structure generation
US20120127183A1 (en) * 2010-10-21 2012-05-24 Net Power And Light, Inc. Distribution Processing Pipeline and Distributed Layered Application Processing
JP5808424B2 (ja) * 2010-12-15 2015-11-10 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation ネットワーク対応アプリケーションのためのハードウェア・アクセラレーテッド・グラフィックス
US9442780B2 (en) * 2011-07-19 2016-09-13 Qualcomm Incorporated Synchronization of shader operation
US8810572B2 (en) * 2011-10-31 2014-08-19 Qualcomm Incorporated Tessellation cache for object rendering
US9691117B2 (en) * 2011-11-30 2017-06-27 Intel Corporation External validation of graphics pipelines
US9607435B2 (en) * 2012-01-10 2017-03-28 Thomson Licensing Method for rendering an image synthesis and corresponding device
US10559123B2 (en) 2012-04-04 2020-02-11 Qualcomm Incorporated Patched shading in graphics processing
CN102819819B (zh) * 2012-08-14 2015-09-16 长沙景嘉微电子股份有限公司 Gpu中一种快速读取顶点的实现方法
TWI482118B (zh) * 2012-10-18 2015-04-21 Wistron Corp 處理圖形運算負載平衡之方法及系統
US9269120B2 (en) * 2012-11-06 2016-02-23 Intel Corporation Dynamically rebalancing graphics processor resources
US9465620B2 (en) 2012-12-20 2016-10-11 Intel Corporation Scalable compute fabric
US9418616B2 (en) * 2012-12-20 2016-08-16 Nvidia Corporation Technique for storing shared vertices
US9299123B2 (en) * 2013-01-22 2016-03-29 Qualcomm Incorporated Indexed streamout buffers for graphics processing
CN103164839B (zh) 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
US9984430B2 (en) * 2013-04-15 2018-05-29 Intel Corporation Ordering threads as groups in a multi-threaded, multi-core graphics compute system
US9256976B2 (en) * 2013-07-09 2016-02-09 Intel Corporation Techniques for extracting and displaying partially processed graphics information
US9760968B2 (en) 2014-05-09 2017-09-12 Samsung Electronics Co., Ltd. Reduction of graphical processing through coverage testing
US9842428B2 (en) * 2014-06-27 2017-12-12 Samsung Electronics Co., Ltd. Dynamically optimized deferred rendering pipeline
CN104537706B (zh) * 2014-07-31 2017-05-10 浙江大学 一种基于代码移动的着色器简化方法、装置及图形渲染方法
US9665975B2 (en) * 2014-08-22 2017-05-30 Qualcomm Incorporated Shader program execution techniques for use in graphics processing
US9613392B2 (en) * 2014-09-03 2017-04-04 Mediatek Inc. Method for performing graphics processing of a graphics system in an electronic device with aid of configurable hardware, and associated apparatus
EP3029940B1 (en) * 2014-12-04 2017-03-15 Axis AB Method and device for post processing of a video stream
US9710876B2 (en) * 2015-01-16 2017-07-18 Intel Corporation Graph-based application programming interface architectures with equivalency classes for enhanced image processing parallelism
GB2536964B (en) * 2015-04-02 2019-12-25 Ge Aviat Systems Ltd Avionics display system
US10108321B2 (en) 2015-08-31 2018-10-23 Microsoft Technology Licensing, Llc Interface for defining user directed partial graph execution
CN106201268B (zh) * 2016-07-11 2019-06-07 合肥速显微电子科技有限公司 一种基于变换矩阵的人机交互界面图形渲染方法及系统
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11055807B2 (en) * 2017-06-12 2021-07-06 Apple Inc. Method and system for a transactional based display pipeline to interface with graphics processing units
US10600142B2 (en) * 2017-11-02 2020-03-24 Advanced Micro Devices, Inc. Compression and decompression of indices in a graphics pipeline
US10620980B2 (en) * 2018-03-28 2020-04-14 Microsoft Technology Licensing, Llc Techniques for native runtime of hypertext markup language graphics content
EP3785016A4 (en) * 2018-04-26 2022-02-09 Becton, Dickinson and Company BIEXPONENTIAL TRANSFORMATION FOR PARTICLE SORTER
US11379577B2 (en) 2019-09-26 2022-07-05 Microsoft Technology Licensing, Llc Uniform resource locator security analysis using malice patterns
US11509667B2 (en) 2019-10-19 2022-11-22 Microsoft Technology Licensing, Llc Predictive internet resource reputation assessment
CN111062855B (zh) * 2019-11-18 2023-09-05 中国航空工业集团公司西安航空计算技术研究所 一种图形流水线性能分析方法
US11210821B2 (en) * 2019-11-27 2021-12-28 Arm Limited Graphics processing systems
US11216993B2 (en) 2019-11-27 2022-01-04 Arm Limited Graphics processing systems
US11170555B2 (en) 2019-11-27 2021-11-09 Arm Limited Graphics processing systems
US11210847B2 (en) 2019-11-27 2021-12-28 Arm Limited Graphics processing systems
US11431751B2 (en) 2020-03-31 2022-08-30 Microsoft Technology Licensing, Llc Live forensic browsing of URLs
CN115018955B (zh) * 2021-09-01 2023-05-16 荣耀终端有限公司 一种图像生成方法及设备
CN115659443B (zh) * 2022-12-29 2023-06-27 摩尔线程智能科技(北京)有限责任公司 几何形状流数据处理方法和装置、计算设备和存储介质
CN115829825B (zh) * 2023-01-10 2023-05-05 南京砺算科技有限公司 图元数据的装载控制方法、图形处理器、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1339764A (zh) * 2000-08-23 2002-03-13 任天堂株式会社 用于图形系统的再循环浓淡树混合器
US6483505B1 (en) * 2000-03-17 2002-11-19 Ati International Srl Method and apparatus for multipass pixel processing

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4885703A (en) * 1987-11-04 1989-12-05 Schlumberger Systems, Inc. 3-D graphics display system using triangle processor pipeline
JP3051438B2 (ja) 1989-10-12 2000-06-12 テキサス インスツルメンツ インコーポレイテッド 拡張グラフィック機能を与える方法
US5269021A (en) 1989-10-12 1993-12-07 Texas Instruments Incorporated Multiprocessor software interface for a graphics processor subsystem employing partially linked dynamic load modules which are downloaded and fully linked at run time
US5821940A (en) 1992-08-03 1998-10-13 Ball Corporation Computer graphics vertex index cache system for polygons
US5388206A (en) 1992-11-13 1995-02-07 The University Of North Carolina Architecture and apparatus for image generation
US5745125A (en) 1996-07-02 1998-04-28 Sun Microsystems, Inc. Floating point processor for a three-dimensional graphics accelerator which includes floating point, lighting and set-up cores for improved performance
US6496190B1 (en) 1997-07-02 2002-12-17 Mental Images Gmbh & Co Kg. System and method for generating and using systems of cooperating and encapsulated shaders and shader DAGs for use in a computer graphics system
US6496185B1 (en) * 1999-06-29 2002-12-17 Microsoft Corporation Method and apparatus for processing a mesh of triangles
US7159041B2 (en) * 2000-03-07 2007-01-02 Microsoft Corporation Method and system for defining and controlling algorithmic elements in a graphics display system
US6724394B1 (en) 2000-05-31 2004-04-20 Nvidia Corporation Programmable pixel shading architecture
US6828975B2 (en) 2001-03-01 2004-12-07 Microsoft Corporation Method and system for managing graphics objects in a graphics display system
EP1255227A1 (en) * 2001-04-27 2002-11-06 STMicroelectronics Limited Vertices index processor
US7564460B2 (en) 2001-07-16 2009-07-21 Microsoft Corporation Systems and methods for providing intermediate targets in a graphics system
JP2003208187A (ja) 2001-09-17 2003-07-25 Matsushita Electric Ind Co Ltd 情報更新装置、再生装置、情報付加装置、情報検出装置、情報除去装置
US6747653B2 (en) 2001-12-31 2004-06-08 Intel Corporation Efficient object storage for zone rendering
US6919896B2 (en) 2002-03-11 2005-07-19 Sony Computer Entertainment Inc. System and method of optimizing graphics processing
US6765584B1 (en) 2002-03-14 2004-07-20 Nvidia Corporation System and method for creating a vector map in a hardware graphics pipeline
US7015909B1 (en) 2002-03-19 2006-03-21 Aechelon Technology, Inc. Efficient use of user-defined shaders to implement graphics operations
US7154502B2 (en) 2002-03-19 2006-12-26 3D Labs, Inc. Ltd. 3D graphics with optional memory write before texturing
US6809732B2 (en) 2002-07-18 2004-10-26 Nvidia Corporation Method and apparatus for generation of programmable shader configuration information from state-based control information and program instructions
US6864893B2 (en) 2002-07-19 2005-03-08 Nvidia Corporation Method and apparatus for modifying depth values using pixel programs
US7176917B1 (en) 2002-08-09 2007-02-13 Avid Technology, Inc. Visual programming interface for a three-dimensional animation system for defining real time shaders using a real-time rendering engine application programming interface
US20050140672A1 (en) 2003-02-18 2005-06-30 Jeremy Hubbell Shader editor and compiler
US6839062B2 (en) 2003-02-24 2005-01-04 Microsoft Corporation Usage semantics
US20040169671A1 (en) 2003-03-01 2004-09-02 Aronson David Floyd Effects framework pipeline integration with programmable shader
US7530062B2 (en) 2003-05-23 2009-05-05 Microsoft Corporation Optimizing compiler transforms for a high level shader language
US7091979B1 (en) * 2003-08-29 2006-08-15 Nvidia Corporation Pixel load instruction for a programmable graphics processor
US7202872B2 (en) * 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US8035646B2 (en) 2003-11-14 2011-10-11 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US6897871B1 (en) 2003-11-20 2005-05-24 Ati Technologies Inc. Graphics processing architecture employing a unified shader
US7015914B1 (en) * 2003-12-10 2006-03-21 Nvidia Corporation Multiple data buffers for processing graphics data
US7109987B2 (en) * 2004-03-02 2006-09-19 Ati Technologies Inc. Method and apparatus for dual pass adaptive tessellation
US20050275760A1 (en) * 2004-03-02 2005-12-15 Nvidia Corporation Modifying a rasterized surface, such as by trimming
US7554538B2 (en) 2004-04-02 2009-06-30 Nvidia Corporation Video processing, such as for hidden surface reduction or removal
US7570267B2 (en) 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7671862B1 (en) 2004-05-03 2010-03-02 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
CN100595794C (zh) * 2004-08-04 2010-03-24 松下电器产业株式会社 绘制装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6483505B1 (en) * 2000-03-17 2002-11-19 Ati International Srl Method and apparatus for multipass pixel processing
CN1339764A (zh) * 2000-08-23 2002-03-13 任天堂株式会社 用于图形系统的再循环浓淡树混合器

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Styles,H.Luk,W..Customising graphics applications: techniquesandprogramminginterface.Field-Programmable Custom Computing Machines,2000 IEEE Symposium.2000,77-87. *
Thomas Haaker et al.A DistributedFrameBufferwithinaWindow-OrientedHighPerformanceGraphicsSystem.Advances in Computer Graphics Hardware IV (Eurographics'89 Workshop)workshop 4.1991,workshop 4261-274. *

Also Published As

Publication number Publication date
US20110234592A1 (en) 2011-09-29
US7978205B1 (en) 2011-07-12
US9064334B2 (en) 2015-06-23
CN1702692A (zh) 2005-11-30
US7671862B1 (en) 2010-03-02

Similar Documents

Publication Publication Date Title
CN1702692B (zh) 提供增强的图形流水线的系统和方法
US7570267B2 (en) Systems and methods for providing an enhanced graphics pipeline
CN100507832C (zh) 在图形系统内提供中间目标的系统和方法
CN101479701B (zh) 图形流水线状态的快速重新配置
US7283135B1 (en) Hierarchical tile-based data structure for efficient client-server publishing of data over network connections
CN101421761B (zh) 视件和场景图接口
US7119813B1 (en) Variable bit field encoding
CN100401325C (zh) 用于提供可控制的纹理采样的系统和方法
US5973699A (en) System and method for increasing the performance for real-time rendering of three-dimensional polygonal data
CN101057261B (zh) 三维图形处理
CN102169596B (zh) 一种在嵌入式设备上实现3d渲染的方法及装置
CN101167102B (zh) 图像处理方法及影像处理装置
CN109478310A (zh) 在计算环境中使用纹素着色器的多分辨率延迟着色
CN110415158A (zh) 可缩放gpu中的数据分布组构
CN109564700A (zh) 用于取决于纹理的丢弃操作的分级式Z剔除(HiZ)优化
CN109564699A (zh) 用于经优化光线追踪的装置和方法
CN1989543A (zh) 媒体集成层
KR20070011062A (ko) 모델 3d 구성 애플리케이션 프로그램 인터페이스
Haegler et al. Grammar‐based encoding of facades
CN107392836A (zh) 使用图形处理管线实现的立体多投影
CN110515657A (zh) 用于图形处理的间接命令缓冲区
Marvie et al. Gpu shape grammars
CN110383339A (zh) 用于图像渲染的索引值混合
CN114247138B (zh) 图像渲染方法、装置、设备及存储介质
CN115409972A (zh) 一种可编辑的基于区块链技术的元宇宙应用方法及系统

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
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150428

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150428

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.