图形处理单元中的三维裁剪的制作方法

文档序号:6456300阅读:157来源:国知局

专利名称::图形处理单元中的三维裁剪的制作方法
技术领域
:本发明大体上涉及电子器件,且更具体地说,涉及用于在图形处理单元(GPU)中执行3D裁剪的技术。冊双^图形处理单元(GPU)是用于针对各种应用渲染二维(2D)和/或三维(3D)图像的专门硬件单元,所述应用例如为视频游戏、图形、计算机辅助设计(CAD)、模拟和显像工具、成像等。3D图像可用数个表面建模,且每一表面可用数个基元近似。基元是基本几何单位且可包括三角形、线条等。GPU可执行例如变换、光栅化、着色、掺合等各种图形操作以渲染3D图像。这些图形操作可能为计算密集的。此外,用于表示3D图像的基元的数目可能较大,例如达数百万。因此,可能消耗许多处理和存储器资源来对大量几何数据执行计算以便渲染3D图像。可执行3D裁剪以识别并抛弃不能看见且因此无需渲染的基元。可通过省略用于被抛弃的基元的计算来实现改进的性能。然而,3D裁剪本身是项复杂的操作。GPU可具有专用硬件来执行所有3D裁剪操作。然而,此专用3D裁剪硬件将增加GPU的成本和功耗,这可能对于例如移动和手持式装置等某些应用来说是不合需要的。可通过在可在中央处理单元(CPU)、数字信号处理器(DSP)等上执行的软件中执行3D裁剪来避免使用专用3D裁剪硬件。然而,使用CPU或DSP(其还用于其它目的)执行3D裁剪可能引起其它问题,例如用于输送基元数据和3D裁剪结果的数据总线上的较髙负载、发送出以用于3D裁剪的基元与待渲染的其它基元之间的同步等。
发明内容本文描述一种图形处理单元(GPU),其使用用于其它图形功能的一个或一个以上处理单元来有效地执行3D裁剪。所述GPU可通过在硬件中执行3D裁剪来提供改进的性能,通过不必调用CPU或DSP执行3D裁剪来降低对3D图形管线的破坏,且提供其它好处。在一种设计中,所述GPU包括第一和第二硬件单元以及至少一个缓冲器。所述第7一硬件单元使用用于第一图形功能的第一处理单元来执行对基元的3D裁剪,所述第一处理单元例如为用于三角形设置、深度梯度设置等的算术逻辑单元(ALU)。第一硬件单元可通过以下操作来执行3D裁剪(a)计算用于每一基元的每一顶点的裁剪代码;(b)基于用于每一基元的所有顶点的裁剪代码而确定是传递、抛弃还是裁剪所述基元;以及(c)相对于裁剪平面裁剪待裁剪的每一基元。所述第二硬件单元计算用于从3D裁剪产生的新顶点的属性分量值。第二硬件单元使用用于第二图形功能的第二处理单元,例如用于属性梯度设置、属性内插等的ALU。缓冲器存储第一硬件单元所进行的3D裁剪的中间结果。下文进一步详细描述本发明的各种方面和特征。图1展示用于没有3D裁剪的GPU的3D图形管线。图2展示用于具有3D裁剪的GPU的3D图形管线。图3展示用于3D图形的视见平截头体。图4展示相对于视口的基元。图5展示用于一个顶点的裁剪代码的位图。图6说明相对于裁剪平面裁剪三角形。图7展示用于3D裁剪的缓冲器的设计。图8展示图2中的GPU中的单元220的框图。图9展示图2中的GPU中的单元250的框图。图io展示无线通信装置的框图。具体实施例方式3D图像可用数个基元(例如,三角形、线条、其它多边形等)表示。每一基元由一个或一个以上顶点界定,例如用于三角形的三个顶点。每一顶点与例如空间坐标、色彩、纹理坐标等各种属性相关联。每一属性可具有多达四个分量。举例来说,空间坐标可由三个分量x、y和z或四个分量x、y、z和w给定,其中x和y是水平和垂直坐标,z是深度,且w是齐次坐标。色彩可由三个分量r、g和b或四个分量r、g、b和a给定,其中r是红色,g是绿色,b是蓝色,且a是确定像素透明度的透明度因数。纹理坐标通常由水平和垂直坐标(u和v)给定。顶点还可与其它属性相关联。图1展示用于GPU100的3D图形管线的框图。顶点着色器110对几何数据执行顶点处理,所述几何数据可包含例如三角形和线条等基元。举例来说,顶点着色器512可针对顶点计算光量值,针对几何形状执行掺合等。顶点着色器110还可确定每一顶点的坐标(例如,x、y、z、w)和属性分量值,向三角形设置和深度(z)梯度设置单元120提供顶点坐标,且向顶点高速缓冲存储器180提供顶点属性分量值。顶点高速缓冲存储器180存储属性分量值,且可能存储用于顶点和基元的其它数据。单元120计算用于后续光栅化过程的参数。举例来说,单元120可执行视口变换以将基元从裁剪坐标系(或裁剪空间)转换为屏幕坐标系(或屏幕空间)。裁剪空间是具有四个维度x、y、z、w的标准化齐次坐标系。屏幕空间是用于显示屏或某种其它输出装置的3维坐标系。单元120还可执行剪切以抛弃不在剪切窗口内的对象,执行背面剔除以抛弃对象背侧上的基元等。单元120可执行三角形/基元设置且计算用于每一基元的边缘的线性等式的系数、用于深度(z)梯度的系数等。光栅化器130将每一基元分解为数个像素且产生用于每一像素的屏幕坐标。早期深度/模版测试单元140可执行用于像素的模版测试(如果启用的话)以确定应渲染还是抛弃所述像素。术语"抛弃"、"丢弃"和"拒绝"是同义的。术语"传递"和"接受"也是同义的。单元140可将用于像素的存储在模版缓冲器(图1中未展示)中的模版值与参考值进行比较,且基于比较结果而传递或抛弃所述像素。单元140还可对像素执行深度测试(其还称为z测试)(如果适用的话)以确定应渲染还是抛弃所述像素。单元140可将用于像素的z值(当前z值)与z缓冲器中的对应z值(所存储z值)进行比较,在当前z值比所存储z值更接近/更靠近的情况下传递所述像素并更新所述z缓冲器和(可能)模版缓冲器,且在当前z值比所存储z值更向后的情况下抛弃所述像素。属性梯度设置和属性内插单元150内插用于基元顶点的属性分量值,以获得用于所述基元内的像素的属性分量值。单元150可首先基于顶点的属性分量值而计算用于属性内插的参数。这些参数可为用于属性内插的线性等式的属性梯度或系数。单元150可接着基于所述像素的屏幕坐标和内插参数而计算用于每一基元内的每一像素的属性分量值。像素/片段着色器160可对像素和片段执行各种图形操作。片段是像素或其相关联信息。举例而言,像素/片段着色器160可执行纹理映射(如果启用的话)以向像素施加纹理。通过在由像素的纹理坐标所指示的位置处用纹理图像的色彩修改所述像素的色彩来实现纹理化。后处理器170可对每一片段执行其它图形操作,例如a测试、雾化掺合、a掺合、逻辑操作、抖动操作等。后处理器170向色彩缓冲器提供输出像素以供在显示装置上呈现(所述两者均未在图1中展示)。GPU100不具有专用3D裁剪硬件,其可能由于3D裁剪所需的复杂计算而为昂贵的且在仅裁剪较小百分比的基元的情况下可能为不合理的。在此情况下,可在CPU或DSP上所执行的软件中执行3D裁剪。在完成顶点处理之后,GPU100可将基元数据发送到CPU或DSP以用于3D裁剪(如果必要的话)。GPU100可接着等待来自CPU或DSP的3D裁剪结果,这将在GPU闲置时浪费GPU资源。或者,GPU100可处理新基元且将结果存储在缓冲器中。在从CPU或DSP接收到具有新基元的3D裁剪结果时,GPU100可将新基元发送到下一级且在缓冲器中绕过所述基元。这避免在等待3D裁剪结果时浪费GPU资源,但需要较多缓冲,且可能引起同步和其它问题。图2展示用于GPU200的3D图形管线的框图,所述GPU200使用用于其它图形功能的处理单元来有效地支持3D裁剪。GPU200包括顶点着色器110、光栅化器130、早期深度/模版测试单元140、像素/片段着色器160、后处理器170和顶点高速缓冲存储器180,其如上文针对图1描述那样操作。GPU200进一步包括(a)3D裁剪、三角形设置和深度梯度设置单元220代替图1中的单元120,以及(b)新顶点属性计算、属性梯度设置和属性内插单元250代替图1中的单元150。单元220使用用于三角形设置和深度梯度设置的处理单元(例如,ALU)执行用于基元的3D裁剪。对于3D裁剪,单元220确定是传递、抛弃还是裁剪每一基元,且针对待裁剪的每一基元,确定从3D裁剪产生的新顶点的坐标和内插系数。下文描述单元220对3D裁剪所进行的处理。单元250计算用于来自3D裁剪的新顶点的属性分量值。单元250可使用用于属性梯度设置和属性内插的处理单元(例如,ALU)执行此计算。单元250可接着针对新基元连同其它基元执行属性梯度设置和属性内插。如图2所示执行3D裁剪可提供某些优点,例如(a)通过在硬件中执行3D裁剪实现的改进的性能,(b)通过借用用于其它图形功能的处理单元实现的用以支持3D裁剪的较小额外硬件成本,(c)通过不必调用CPU或DSP执行3D裁剪实现的对3D图形管线的较少破坏,以及(d)可能其它好处。图3展示用于3D图形的视见平截头体300。用于渲染引擎的相机位于3D(x,y,z)坐标系的原点处。所述视见平截头体是可能在屏幕上显示的建模世界中的3D空间容积。所述视见平截头体类似经裁剪四面体且由六个平面形成——四个平面用于经裁剪四面体的四个侧面,一个平面(称为z近平面)用于四面体的经裁剪顶部且另一个平面(称为z远平面)用于四面体的底面。位于视见平截头体外部的对象不被渲染且可被抛弃。所述Z远平面可放置于无限距离处,使得可渲染对象而不管其距相机的距离如何。在此情况下,视见平截头体由用于四个侧面的四个平面和z近平面形成。图4展示相对于视口400的各种基元。视口是3D场景投影到其中的2D矩形且可对应于视见平截头体的底部。存在z近平面但未在图4的2D表示中展示。安全带410是等于或大于所述视口的矩形。可相对于所述安全带而非所述视口来执行3D裁剪。较大安全带可导致裁剪较少基元(这是合乎需要的),但还导致将较多经裁剪基元传递到下一级。对于较小安全带,情况相反。在一种设计中,如果基元的顶点全部位于用于所述视口的五个平面中的任何一者外部,那么抛弃所述基元。如果任何顶点位于用于安全带的五个平面中的任何一者外部,那么裁剪未被抛弃的基元。如果基元未被抛弃或裁剪,那么传递所述基元。在图4所示的实例中,抛弃基元l、6、9、11和12,传递基元2、7、8和10,且裁剪基元3、4、5、13和14。还可基于其它准则而抛弃、传递或裁剪基元。可如下执行3D裁剪1.确定用于每一基元的每一顶点的裁剪代码,2.做出用于每一基元的裁剪决策且基于用于所述基元的所有顶点的裁剪代码而确定是传递、抛弃还是裁剪所述基元,3.计算用于每一经裁剪基元的新顶点的坐标,且4.计算用于每一经裁剪基元的新顶点的属性分量值。图2的GPU200内的单元220可执行步骤1、2和3(例如,在执行视口变换和三角形设置之前),如下文所描述。裁剪基元可产生在一个或一个以上裁剪平面的交点处的一个或一个以上新顶点。举例来说,相对于安全带裁剪图4中的三角形4将产生相对于顶部平面的两个新顶点和相对于右侧平面的两个新顶点。经裁剪的三角形将是具有五个顶点的多边形,其可被划分为三个新三角形。单元220计算用于新基元的顶点坐标。以与3D裁剪所传递的基元类似的方式,这些新基元被传递到3D图形管线的后续级并由所述后续级处理。GPU200的单元250可执行步骤4,如下文所描述。可将用于新顶点的属性分量值的计算交由单元250,以便免除对可能由单元220、130禾口/或140拒绝的顶点的计算。新顶点属性计算可被推迟,因为管线200中的单元220、130和140不对属性进行操作。或者,单元220也可计算用于新顶点的属性分量值。可相对于安全带裁剪基元,所述安全带可相对于视口通过分别用于x、y和z坐标的三个安全带参数GB—Scale—X、GB—Scale—Y和GB—Scale_Z来界定。GB—Scale—X是针11对X方向的安全带大小与视口大小的比率。如果安全带大小与视口大小相同,那么GB—Scale—X等于1.0,且如果安全带大小大于视口大小,那么GB—Scale一X大于1.0。以类似方式针对y和z方向界定GB—Scale—Y和GB—Scale—Z。对于3D裁剪,最初针对每一基元的每一顶点确定裁剪代码。可通过四个分量x、y、z和w界定顶点,其中x、y和z界定顶点在3D空间中的位置,且w界定透视深度。对于安全带,z近平面被给定为-GB—Scale_Z*w,左侧平面被给定为-GB一Scale—X*w,右侧平面被给定为GB_Scale—X*w,底部平面被给定为GB_Scale—Y*w,且顶部平面被给定为-GB一Scale—Y^w。此处忽略z远平面,因为在z远平面处裁剪的机率较低。用z远平面裁剪可等效地通过后续设置管线级以其它方式执行,且未在本文中描述。图5展示用于一个顶点的裁剪代码的位图500。所述位图包括用于九个裁剪平面的九个位,其中每一裁剪平面使用一个位。位l用于z近平面,且适用于视口和安全带两者。位2、4、6和8分别用于视口的左侧、顶部、右侧和底部平面。位3、5、7和9分别用于安全带的左侧、顶部、右侧和底部平面。如果顶点位于对应裁剪平面外部,那么可将位图中的每一位设定为一("1")。位于安全带的裁剪平面外部的顶点也位于视口的对应裁剪平面外部。因此,当顶点位于安全带的裁剪平面外部时,设定两个位(一个用于安全带,且另一个用于视口)。当顶点位于视口的裁剪平面与安全带的对应裁剪平面之间时,仅设定一个位。可基于以下伪代码来确定用于顶点的裁剪代码。100If(z<-GB—scale—z*w)ClipCode=0x2;〃z近平面110If(x<-GB—scale_x*w)ClipCode|=Oxc;〃安全带左侧平面120Elseif(x<-w)ClipCode|=0x4;〃视口左侧平面130If(y<-GB—scale—Y*w)ClipCode|=0x30;〃安全带顶部平面140Elseif(y<-w)ClipCode|=0x10;〃视口顶部平面150If(x>GB—Scale一x*w)ClipCode|=0xc0;〃安全带右侧平面160Elseif(x>ClipCode|=0x40;〃视口右侧平面170If(y>GB—scale—Y*w)ClipCode|=0x300;〃安全带底部平面180Elseif(y>w)ClipCode|=0x100;〃视口底部平面在所述伪代码中,表示当前值与"|="右侧的值的逐位"或"运算。在以上伪代码中,如果顶点在z近平面后面,那么行100将位图的位1设定为一12("1")。如果顶点在安全带的左侧平面外部(或左侧),那么行110设定位2和3。如果顶点位于视口与安全带的左侧平面之间,那么行120设定位2。如果顶点位于安全带的顶部平面上方,那么行130设定位4和5。如果顶点位于视口与安全带的顶部平面之间,那么行140设定位4。如果顶点位于安全带的右侧平面外部(或右侧),那么行150设定位6和7。如果顶点位于视口与安全带的右侧平面之间,那么行160设定位6。如果顶点位于安全带的底部平面下方,那么行170设定位8和9。如果顶点位于视口与安全带的底部平面之间,那么行180设定位8。基于用于所述基元的所有顶点的裁剪代码而针对每一基元做出裁剪决策。可基于以下伪代码来获得裁剪决策。200Clip—And=VO.ClipCodeANDVl.ClipCodeANDV2.ClipCode;210Clip—Or=VO.ClipCodeORVl.ClipCodeORV2.ClipCode;220If(Clip_And#0)Discardtheprimitive;230Elseif(Clip_OrAND0x2AA)Cliptheprimitive;240ElsePasstheprimitive;在以上伪代码中,VO.ClipCode是具有用于基元的第一顶点的裁剪代码的位图,Vl.ClipCode是用于第二顶点的裁剪代码位图,且V2.ClipCode是用于第三顶点的裁剪代码位图。如果基元是线条,那么仅使用用于两个顶点的VO.ClipCode和Vl.ClipCode。如果基元是点,那么仅使用用于一个顶点的V0.ClipCode。行200执行用于基元的三个顶点的三个裁剪代码位图的逐位逻辑"与"。行210执行用于基元的三个裁剪代码位图的逐位逻辑"或"。如果所有三个顶点均位于视口的裁剪平面中的任一者外部,那么行220抛弃所述基元。如果所述基元不被抛弃且任何顶点位于安全带的任何裁剪平面外部,那么行230裁剪所述基元。如果所述基元不被抛弃或裁剪,那么行240传递所述基元。对于3D裁剪,可相对于安全带的五个裁剪平面以一次一个裁剪平面的方式来裁剪基元。对于每一裁剪平面,可检査基元的每一边缘以确定是传递、抛弃还是相对于所述裁剪平面裁剪边缘。对于待裁剪的每一边缘,针对所述边缘与裁剪平面之间的交点确定新顶点,丢弃位于裁剪平面外部的顶点,且添加新顶点。图6说明相对于一个裁剪平面裁剪一个三角形。所述三角形具有标记为V0、VI和V2的三个顶点。可如下确定是否应裁剪顶点V0与VI之间的顶部边缘。顶点VO与裁剪平面之间的带符号距离DO可通过顶点V0坐标与裁剪平面系数的点积或DP4(C0,CP)获得,其中DP4表示四元素点积,C0包括顶点V0的(x,y,z,w)坐标,且CP包括裁剪平面的(x,y,z,w)系数。顶点V1与裁剪平面之间的带符号距离(Dl)也可通过顶点V1坐标与裁剪平面系数的点积获得。如果顶点位于裁剪平面内,那么用于所述顶点的带符号距离为正,且如果顶点位于裁剪平面外部,那么所述顶点的带符号距离为负。所述两个顶点可(a)如果其距离均为正,那么被保留,(b)如果其距离均为负,那么被抛弃,或(c)如果一个距离为正且另一个距离为负,那么被裁剪。如果顶点VO位于裁剪平面内部(具有正D0)且顶点Vl位于裁剪平面外部(具有负D1),如图6所示,那么可通过如下计算内插系数来裁剪所述边缘t=^i~。等式(1)D0-D1位于裁剪平面与边缘的交点处的新顶点V3的坐标可如下计算C3=C0*t+Cl*(l-t),等式(2)其中C0、Cl和C3分别是顶点V0、VI和V3的坐标。如果裁剪平面更靠近顶点V0而非顶点V1,那么t将较大,且将给予C0而非C1较多权重。如果裁剪平面较靠近V1而非V0,那么情况相反。如果顶点VI位于裁剪平面内部(具有正D1)且顶点VO位于裁剪平面外部(具有负D0),(其未在图6中展示),那么可如下计算内插系数t':t'=^^~。等式(3)D1-D0接着可如下计算新顶点V3的坐标<formula>formulaseeoriginaldocumentpage14</formula>等式(4)在等式(1)到(4)中,从内部顶点向外部顶点内插新顶点。用于内插系数和新顶点坐标的等式依据哪个顶点在裁剪平面内部且哪个顶点在裁剪平面外部。可以与顶部边缘类似的方式裁剪图6中的三角形的底部边缘以获得新顶点V4。用于右侧边缘的两个顶点位于裁剪平面外部,且将具有负距离。将抛弃这两个顶点。由现有顶点V0以及新顶点V3和V4形成新三角形。可相对于另一裁剪平面裁剪此新三角形。用于基元(例如,三角形)的3D裁剪可在针对五个裁剪平面的五个裁剪进程中执行。表1列举所述五个裁剪平面、可执行裁剪的次序和用于每一裁剪平面的系数。在此设计中,相对于z近平面执行裁剪,接着相对于左侧平面,接着是顶部平面,接着是右侧平面,且最后是底部平面。还可以其它次序执行裁剪。表1<table>tableseeoriginaldocumentpage15</column></row><table>一般来说,可相对于裁剪平面通过以下操作来裁剪多边形(a)围绕多边形的边缘穿越以及(b)相对于裁剪平面裁剪每一边缘。对于每一边缘,首先确定所述边缘是否与裁剪平面相交,且如果是,那么针对交点计算新顶点且替换位于裁剪平面外部的顶点。顶点数目可在相对于裁剪平面裁剪之后增加。图7展示用于基元(例如,三角形或线条)的3D裁剪的缓冲器的设计。可在3D裁剪过程期间针对所述基元获得多达八个顶点。顶点缓冲器710存储用于待裁剪的基元的顶点坐标和属性内插系数。顶点缓冲器710具有索引为0到8的九个位置。每一顶点缓冲器位置可存储用于一个顶点的(x,y,z,w)坐标和属性内插系数(a,(3)。每一顶点缓冲器位置还具有有效/无效旗标,其指示所述缓冲器位置是否正存储有效顶点。顶点缓冲器710在第一裁剪进程之前初始化且在每一裁剪进程期间和之后被更新。读取索引缓冲器720存储裁剪进程开始时的用于所述基元的顶点的索引。这些索引指向顶点缓冲器710的存储所述顶点的位置。读取索引缓冲器720具有索引为0到7的八个位置。每一读取索引缓冲器位置可存储用于一个顶点缓冲器位置的指针(或索引)。读取索引缓冲器720在每一裁剪进程之前确定。写入索引缓冲器730存储在裁剪进程期间和之后的用于所述基元的顶点的索引。写入索引缓冲器730具有索引为0到7的八个位置。每一写入索引缓冲器位置可存储用于一个顶点缓冲器位置的指针(或索引)。写入索引缓冲器730在每一裁剪进程期间和之后被更新。系数缓冲器740存储用于顶点的属性内插系数。系数缓冲器740包括索引为0到T-l的T个位置,其中T可为任何值。每一系数缓冲器位置可存储用于一个顶点的属性内插系数。每一系数缓冲器位置还具有已用/未用旗标,其指示所述缓冲器位置是否正存储用于有效顶点的系数。在完成所有五个裁剪进程之后,在系数缓冲器740的未用位置中保存用于顶点缓冲器710中的所有有效顶点的属性内插系数。如果稍后抛弃给定顶点(例如,通过图2中的光栅化器130或早期深度/模版测试单元140),那么将用于所述顶点的旗标设定为未用,且缓冲器位置可用于存储用于另一顶点的系数。缓冲器710、720和730在针对z近平面的第一裁剪进程之前被初始化。缓冲器710可在位置0中存储用于顶点VO的顶点坐标CO和属性内插系数AO,在位置1中存储用于顶点VI的坐标C1和系数Al,且在位置2中存储用于顶点V2的坐标C2和系数A2。Ck包括用于顶点Vk的(x,y,z,w)坐标,且Ak包括用于顶点Vk的(a,P)系数,其中k=0,1,2。AO等于用于顶点VO的(1.0,0.0),Al等于用于顶点VI的(0.0,1.0),且A2等于用于顶点V2的(0.0,0.0)。缓冲器710的位置0、l和2被设定为有效,且位置3到8被设定为有效。读取索引缓冲器720分别在读取索引缓冲器位置0、1、2和3中存储顶点缓冲器索引O、1、2、0(其是到缓冲器710中的顶点VO、VI、V2禾QV0的指针)。所述四个顶点缓冲器索引0、1、2、0围绕待裁剪的基元做出一个完整环路。变量Count—old指示裁剪进程开始时的顶点数目且针对三角形而初始化为三。写入顶点缓冲器730在每一裁剪进程开始时为空(图7中未展示)。变量Count—new指示当前裁剪进程的顶点数目,且在裁剪进程开始时初始化为零。对于线条,仅存在两个顶点VO和VI。在第一裁剪进程之前,顶点缓冲器710的位置O存储用于第一顶点的CO和A0,且位置1存储用于第二顶点的Cl和Al。读取索引缓冲器720在前两个位置中存储0和1。Count—old被设定为一。可基于以下伪代码来执行相对于安全带的第i个裁剪平面(其中i=0,...,4)裁剪基元。300If((Clip—OrAND(2(2*i)))==0)Skipclippingforthisplane;310Else{320Count—new=0;330Last—dist=DP4(VB[readlB],plane[i]);340For(k=1;k^Count—old){350New—dist=DP4(VB[readlB[k]],plane[i]);16360If(Last—dist^0ANDNew—dist^0)〃V[k-1]和V[k]两者均在平面内部370writeIB[Count—new++]=readIB[k-l];〃直接接受V[k-l]380Else(Last—dist20ANDNew—dist<0){〃V[k-1]在内部且V[k]在外部3卯writeIB[Count—new++]=readIB[k-l];〃直接接受V[k-l]400t=-New—dist/(Last—dist-New—dist);〃内插新顶点410VB[J]=VB[readIB[k-l]]*t+VB[readIB[k]]*(1-t);420writeIB[Count—new++]=J;}〃J是VB中的空位置430Elseif(Last—dist<0ANDNew—dist^0){〃V[k-1]在外部且V[k]在内部440t=Last一dist/(Last—dist-New—dist);〃内插新顶点450VB[J]=VB[readIB[k]]*t+VB[readIB[k-l]]*(1-t);460writeIB[Count—new++]=J;}470Else〃V[k-1]和V[k]两者均在外部480donothing;490Last—dist-New—dist;}}500If(triangletype){510writeIB[Count—new]=writeIB;520If(Count_new<3)Droptheprimitive;}530Elseif(New_dist20){540writeIB[l]=readIB[l];}550Elseif(Count—new<1)Droptheprimitive;560ElseCount—new=1;570UpdateVBvalidflagswithwriteIB;580SwitchrolesofreadIBandwriteIB;590Countold=Count—new;〃三角形类型〃可省略最后一个平面〃现在简并三角形〃线条类型在以上伪代码中,如果没有顶点位于第i个平面外部,那么行300跳过针对第i个平面的裁剪。否则,行310到5卯相对于第i个平面执行裁剪。行330计算顶点V与第i个平面之间的带符号距离,其中""表示存储在读取索引缓冲器的位置O中的顶点缓冲器索弓1。行340循环穿过读取索引缓冲器中的剩余顶点(其中k=l,...,C0unt_0ld),且本质上穿越所述基元的所有边缘。行350到4卯针对顶点V[k-l]与V[k]之间的第k个边缘执行裁剪(如果需要的话)。行350计算顶点V[k]与第i个平面之间的带符号距离。17行360确定顶点V[k-l]和V[k]是否具有正距离且两者均在第i个平面内部。如果是,那么行370将顶点V[k-l]保存在写入索引缓冲器中。行380确定是否顶点V[k-l]在第i个平面内部且顶点V[k]在第i个平面外部。如果是,那么行3卯将顶点V[k-l]保存在写入索引缓冲器中。行400计算内插系数,如等式(1)中所示。行410计算新顶点的坐标,如等式(2)中所示,且将所述新顶点坐标保存在顶点缓冲器的空位置J中。不在顶点V[k]坐标上保存新顶点坐标,所述顶点V[k]坐标用于下一边缘。从第i个平面内部向外部且针对六个分量x、y、z、w、a和p执行内插。行420将新顶点保存在写入索引缓冲器中。行430确定是否顶点V[k-l]在第i个平面外部且顶点V[k]在第i个平面内部。如果是,那么行440计算内插系数,如等式(3)中所示。行450计算新顶点的坐标,如等式(4)中所示,且将所述新顶点坐标保存在顶点缓冲器的空位置J中。行460将新顶点而非顶点V[k-l]保存在写入索引缓冲器中。如果顶点V[k-l]和V[k]两者均在第i个平面外部,那么到达行470。在此情况下,不保存顶点V[k-l]。在已相对于第i个平面裁剪所有边缘之后,行490将顶点V[k]的距离保存为下一边缘的最后距离。行500到590执行用于相对于下一平面裁剪的准备。如果基元为三角形,那么行510将顶点V[O]保存在写入索引缓冲器中作为最后顶点。这形成闭合多边形,其中顶点V[O]作为所述多边形的第一和最后顶点。如果顶点数目小于三,那么行520丢弃所述基元。如果基元为线条,那么行530确定顶点V[l]是否在第i个平面内部。如果是,那么行540将顶点V[l]保存在写入索引缓冲器中。行550确定顶点数目是否小于一,且如果是,那么抛弃所述基元。行570通过将未包括在写入索引缓冲器中的所有位置标记为无效来更新顶点缓冲器。通过行580针对第(i+l)个平面切换读取和写入索引缓冲器的针对第i个平面的角色。用于第i个平面的写入索引缓冲器用作用于第(i+l)个平面的读取索引缓冲器,且用于第i个平面的读取索引缓冲器用作用于第(i+l)个平面的写入索引缓冲器。在相对于第i个平面裁剪之后的顶点数目在行5卯中用作用于第(i+l)个平面的裁剪进程开始时的顶点数目。接着可以与针对第i个平面相同的方式执行针对第(i+l)个平面的裁剪。参看图6中所示的实例,如果顶点VO在裁剪平面内部且顶点VI和V2在裁剪平面外部,那么顶点缓冲器、读取索引缓冲器和写入索引缓冲器的在裁剪进程开始和结束时的内容可给定为18裁剪进程的开始裁剪进程的结束VB={V0,VI,V2,x,x,x,x,x}ReadIB={0,1,2,0,x,x,x,x}WriteIB={x,x,x,x,x,x,x,VB={V0,x,x,V3,V4,x,x,x}ReadIB={0,1,2,0,x,x,x,x}WriteIB={0,3,4,0,x,x,x,x}其中"x"表示有效条目。顶点缓冲器的位置1和2在裁剪平面期间存储顶点VI和V2。行500在裁剪平面结束时将这些位置标记为无效。所述基元在裁剪之后由顶点VO、V3禾卩V4界定。如果顶点VO在裁剪平面外部且顶点VI和V2在裁剪平面内部,那么所述缓冲器的内容可给定为-VB={VO,VI,V2,x,x,x,x,x}VB={x,VI,V2,V3,V4,x,x,x}ReadIB={0,1,2,0,x,x,x,x}ReadIB={0,1,2,0,x,x,x,x}WriteIB={x,x,x,x,x,x,x,x}WriteIB={3,1,2,4,3,x,x,x}所述基元在裁剪之后由四个顶点V3、VI、V2和V4界定。在相对于所有五个平面裁剪之后,所述结果可为具有三个以上顶点的多边形。在此情况下,可使用存储在顶点缓冲器中的有效顶点的坐标来针对所述多边形形成新的三角形。3D裁剪所产生的所有三角形可发送到管线中的下一级。用于新顶点的属性内插系数可存储在系数缓冲器中以供单元250使用。单元250计算用于3D裁剪所产生的新顶点的属性分量值。单元250可在执行属性梯度设置和属性内插之前计算这些属性分量值。单元250还可借用用于属性梯度设置和属性内插的ALU来执行新顶点属性计算。单元250可如下计算用于新顶点的属性分量值。如果选择恒定属性内插模式,那么将用于新顶点的属性分量值设置为用于领先顶点的属性分量值。否则,可用存储在系数缓冲器740中的系数(a,(3)执行线性内插,如下newV.comp[j]=VO.comp[j]*a+Vl.comp[j]*(3+V2.comp[j]*(l隱a-卩),等式(5)其中Vk.comp[j]是用于顶点Vk的第j个分量,其中k-0,1,2,且newV.comp[j]是用于新顶点的第j个分量。裁剪进程的开始裁剪进程的结束在等式(5)中,顶点V0、V1和V2是已被裁剪且产生新顶点的原始基元的顶点。基于用于顶点V0、V1和V2的属性分量值(其可由顶点高速缓冲存储器180提供)以及针对新顶点计算的内插系数a和P(其存储在系数缓冲器740中)来确定用于新顶点的属性分量值。可针对每一属性分量执行等式(5)中的计算。可将用于新顶点的属性分量值传递到属性梯度设置和属性内插。单元250可首先计算用于所有新顶点的所有分量的属性分量值,且接着执行属性梯度设置和属性内插。或者,单元250可同时处理一个或一些分量。对于每一分量子集,单元250可针对此分量子集执行新顶点属性计算,接着进行属性梯度设置和属性内插。图2所示的设计使用用于其它3D图形功能的处理单元来有效地执行3D裁剪。可通过借用单元220中用于视口变换的ALU来执行相对于裁剪平面裁剪基元。可通过借用单元250中用于属性梯度设置和属性内插的ALU来执行新顶点属性计算。当使用恰当安全带大小时,必须裁剪基元的可能性可能较低(例如,较少百分比)。在此情况下,再次使用ALU来执行3D裁剪可在最小程度上影响性能。少量额外硬件可足以在硬件中支持3D裁剪。GB—Scale的一些小倍增和一些比较器可用于产生裁剪代码且做出裁剪决策。少量小缓冲器710、720、730和740可用于存储相对于平面裁剪的中间结果且存储用于新顶点的属性内插系数。图8展示图2中的GPU200内的3D裁剪、三角形设置和深度梯度设置单元220的设计的框图。裁剪代码产生器810接收顶点在裁剪空间中的坐标(或顶点裁剪坐标)和安全带参数,例如GB—Scale—X、GB_Scale—Y禾tlGB—Scale—Z。单元810产生用于每一顶点的裁剪代码,例如上文用伪代码的行IOO到180所描述。单元820接收用于顶点的裁剪代码和指示每一基元的顶点的基元信息。单元820基于用于基元的所有顶点的裁剪代码来针对每一基元做出裁剪决策,例如上文用伪代码的行200到240所描述。裁剪执行单元830基于单元820所提供的裁剪决策而传递、抛弃或裁剪每一基元,并将顶点坐标提供到顶点缓冲器710。针对待裁剪的每一基元,单元830基于安全带参数和顶点坐标而裁剪所述基元,例如上文用伪代码的行300到590所描述。单元840对单元830所提供且存储在顶点缓冲器710中的基元执行视口变换、三角形设置和可能其它图形功能(例如,剪切和背面剔除)。单元850计算基元的深度梯度系数。三角形设置单元840和深度梯度设置单元850使用一个或一个以上ALU860。ALU860可由裁剪执行单元830借用且用于执行裁剪。图9展示图2中的GPU200内的新顶点属性计算、属性梯度设置和属性内插单元20250的设计的框图。新顶点属性计算单元910接收基元信息、用于基元的顶点的属性分量值和用于新顶点的系数(a,P)。单元910计算用于每一新顶点的属性分量值,例如等式(5)中所示。单元920基于用于顶点的属性分量值而计算属性梯度。单元930基于像素的屏幕坐标和属性梯度而计算用于每一基元内的每一像素的属性分量值。属性梯度设置单元920和属性内插单元930使用一个或一个以上ALU940。ALU940可由新顶点属性计算单元910借用且用于计算用于新顶点的属性分量值。在图8所示的设计中,由单元220内的三角形设置单元840在视口变换之前执行3D裁剪。接着可在视口变换之后由单元840对屏幕空间中的基元执行剪切和背面剔除。在另一设计中,3D裁剪被推迟且在视口变换之后执行。可通过背面剔除抛弃一些基元,这因而可减少待针对3D裁剪处理的基元的数目。基元可存储在缓冲器(例如,顶点高速缓冲存储器180)中,直到完成背面剔除为止,且未被背面剔除抛弃的基元可从缓冲器中检索且经受3D裁剪。或者,通过背面剔除的基元可从屏幕空间变换回到裁剪空间且经受3D裁剪。本文中所描述的3D裁剪技术可用于无线通信装置、手持式装置、游戏装置、计算装置、消费型电子装置等。下文描述所述技术针对无线通信装置的示范性使用。图10展示无线通信系统中的无线通信装置1000的设计的框图。无线装置1000可为蜂窝式电话、计算机、终端、手持机、个人数字助理(PDA)或某种其它装置。无线通信系统可为码分多址(CDMA)系统、全球移动通信系统(GSM)系统或某种其它系统。无线装置1000能够经由接收路径和传输路径提供双向通信。在接收路径上,基站所传输的信号由天线1012接收且提供到接收器(RCVR)1014。接收器1014调节并数字化所接收的信号且将样本提供到数字区段1020以供进一步处理。在传输路径上,传输器(TMTR)1016接收待从数字区段1020传输的数据,处理并调节所述数据,且产生经调制的信号,所述信号经由天线1012传输到基站。数字区段1020包括各种处理、接口和存储器单元,例如调制解调器处理器1022、视频处理器1024、控制器/处理器1026、显示处理器1028、高级RSIC机器/数字信号处理器(ARM/DSP)1032、GPU1034、内部存储器1036和外部总线接口(EBI)1038。调制解调器处理器1022执行用于数据传输和接收的处理(例如,编码、调制、解调和解码)。视频处理器1024针对诸如摄像机、视频回放和视频会议等视频应用对视频内容(例如,静止图像、移动视频和移动文本)执行处理。控制器/处理器1026可指导数字区段1020内的各种处理和接口单元的操作。显示处理器1028执行处理以促进视频、图形21和文本在显示单元1030上的显示。ARM/DSP1032可针对无线装置1000执行各种类型的处理。GPU1034执行图形处理且可实施图2中的GPU200、图7中的缓冲器710到740、图8中的单元220、图9中的单元250等。内部存储器1036存储用于数字区段1020内的各种单元的数据和/或指令。EBI1038促进在数字区段1020(例如,内部存储器1036)与主存储器1040之间的数据传送。数字区段1020可用一个或一个以上DSP、微处理器、RISC等实施。数字区段1020还可制造在一个或一个以上专用集成电路(ASIC)和/或某种其它类型的集成电路(IC)上。本文中所描述的3D裁剪技术可通过各种方式来实施。举例来说,这些技术可在硬件、固件、软件或其组合中实施。对于硬件实施方案来说,用于执行3D裁剪的单元(例如,图7中的缓冲器710到740、图8中的单元220、图9中的单元250等)可在一个或一个以上ASIC、DSP、数字信号处理装置(DSPD)、可编程逻辑装置(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、电子装置、经设计以执行本文中所描述的功能的其它电子单元或其组合内实施。本文中所描述的GPU和其它单元可为独立单元或可为装置的一部分。所述装置可为(i)独立IC,例如图形IC,(ii)一组一个或一个以上IC,其可包括用于存储数据和/或指令的存储器IC,(iii)ASIC,例如移动台调制解调器(MSM),其具有集成图形处理功能,(iv)可嵌入在其它装置内的模块,(v)蜂窝式电话、无线装置、手持机或移动单元,(vi)等等。提供先前对本发明的描述是为了使得所属领域的技术人员能够制作或使用本发明。所属领域的技术人员将容易明白对本发明的各种修改,且本文所界定的一般原理可在不脱离本发明的精神或范围的情况下应用于其它变型。因此,本发明不希望限于本文中所描述的实例,而是应被赋予与本文中所揭示的原理和新颖特征一致的最宽范围。权利要求1.一种图形处理单元,其包含第一硬件单元,其用以使用用于第一图形功能的第一处理单元执行对基元的三维(3D)裁剪;以及至少一个缓冲器,其用以存储所述第一硬件单元所进行的所述3D裁剪的中间结果。2.根据权利要求l所述的图形处理单元,其进一步包含第二硬件单元,其用以使用用于第二图形功能的第二处理单元计算用于从所述3D裁剪产生的新顶点的属性分量值。3.根据权利要求1所述的图形处理单元,其中所述第一处理单元是用于三角形设置和深度梯度设置中的至少一者的算术逻辑单元(ALU)。4.根据权利要求2所述的图形处理单元,其中所述第二处理单元是用于属性梯度设置和属性内插中的至少一者的算术逻辑单元(ALU)。5.根据权利要求1所述的图形处理单元,其中所述第一处理单元在三角形设置和光栅化之前执行3D裁剪。6.根据权利要求2所述的图形处理单元,其中所述第二处理单元在深度和模版测试之后且在属性梯度设置和属性内插之前计算用于新顶点的属性分量值。7.根据权利要求1所述的图形处理单元,其中所述基元中的每一者包含至少一个顶点,且其中针对每一基元,所述第一硬件单元产生用于所述基元的每一顶点的裁剪代码且基于用于所述基元的所有顶点的裁剪代码而确定是传递、抛弃还是裁剪所述基元。8.根据权利要求7所述的图形处理单元,其中所述第一硬件单元相对于多个裁剪平面执行3D裁剪,且其中用于每一顶点的所述裁剪代码指示所述顶点是在所述多个裁剪平面内部还是外部。9.根据权利要求7所述的图形处理单元,用于每一顶点的所述裁剪代码通过包含用于多个裁剪平面中的每一者的一个位的位图来表示,且其中针对每一顶点,所述第一硬件单元基于所述顶点的坐标和用于所述裁剪平面的参数而确定用于每一裁剪平面的位值。10.根据权利要求8所述的图形处理单元,其中针对每一基元,所述第一硬件单元在所述基元的所有顶点均在用于视口的裁剪平面中的至少一者外部的情况下抛弃所述基元,在所述基元的至少一个顶点在用于安全带的裁剪平面外部的情况下裁剪所述基元,及在其它情况下传递所述基元。11.根据权利要求1所述的图形处理单元,其中针对待裁剪的每一基元,所述第一硬件单元相对于多个裁剪平面以一次一个裁剪平面的方式裁剪所述基元。12.根据权利要求11所述的图形处理单元,其中所述第一硬件单元再次使用所述至少一个缓冲器来存储相对于所述多个裁剪平面中的每一者裁剪的中间结果。13.根据权利要求11所述的图形处理单元,其中为了相对于裁剪平面裁剪基元,所述第一硬件单元以一次一个边缘的方式处理所述基元的至少一个边缘,确定是否要相对于所述裁剪平面裁剪每一边缘,及确定用于待相对于所述裁剪平面裁剪的每一边缘的新顶点。14.根据权利要求11所述的图形处理单元,其中为了相对于裁剪平面裁剪基元,所述第一硬件单元使用所述第一处理单元计算所述基元的顶点与所述裁剪平面之间的距离,基于所述距离而确定是否要裁剪所述基元的边缘,及使用所述第一处理单元而计算用于待裁剪的每一边缘的新顶点的坐标。15.根据权利要求14所述的图形处理单元,其中所述第一硬件单元进一步使用所述第一处理单元计算用于待裁剪的每一边缘的所述新顶点的内插系数,所述内插系数用于计算用于所述新顶点的属性分量值。16.根据权利要求l所述的图形处理单元,其中所述至少一个缓冲器包含第一缓冲器,其用以存储被裁剪基元的顶点的坐标。17.根据权利要求16所述的图形处理单元,其中所述第一缓冲器进一步存储用于计算用于所述被裁剪基元的新顶点的属性分量值的系数。18.根据权利要求16所述的图形处理单元,其中所述至少一个缓冲器进一步包含第二缓冲器,其用以在相对于裁剪平面执行裁剪之前存储所述基元的顶点的索引,以及第三缓冲器,其用以在相对于所述裁剪平面执行裁剪期间和之后存储所述基元的顶点的索引。19.根据权利要求l所述的图形处理单元,其中所述至少一个缓冲器包含缓冲器,其用以存储用于计算用于所裁剪基元的新顶点的属性分量值的系数。20.根据权利要求19所述的图形处理单元,其中用于在后续管线级中被拒绝的所裁剪基元的系数从所述缓冲器中释放。21.—种集成电路,其包含第一硬件单元,其用以使用用于第一图形功能的第一处理单元执行对基元的三维(3D)裁剪;以及至少一个缓冲器,其用以存储所述第一硬件单元所进行的所述3D裁剪的中间结果。22.根据权利要求21所述的集成电路,其进一步包含第二硬件单元,其用以使用用于第二图形功能的第二处理单元计算用于从所述3D裁剪产生的新顶点的属性分量值。23.根据权利要求21所述的集成电路,其中所述基元中的每一者包含至少一个顶点,且其中针对每一基元,所述第一硬件单元产生用于所述基元的每一顶点的裁剪代码,基于用于所述基元的所有顶点的裁剪代码而确定是传递、抛弃还是裁剪所述基元,及在所述基元待被裁剪的情况下相对于多个裁剪平面以一次一个裁剪平面的方式裁剪所述基元。24.根据权利要求21所述的集成电路,其中所述至少一个缓冲器存储被裁剪基元的顶点的坐标和用于计算用于所述被裁剪基元的新顶点的属性分量值的系数。25.—种方法,其包含在硬件中使用用于第一图形功能的第一处理单元执行对基元的三维(3D)裁剪;以及将所述3D裁剪的中间结果存储在至少一个缓冲器中。26.根据权利要求25所述的方法,其进一步包含在硬件中使用用于第二图形功能的第二处理单元计算用于从所述3D裁剪产生的新顶点的属性分量值。27.根据权利要求25所述的方法,其中所述基元中的每一者包含至少一个顶点,且其中所述执行3D裁剪包含,针对每一基元,产生用于所述基元的每一顶点的裁剪代码,基于用于所述基元的所有顶点的裁剪代码而确定是传递、抛弃还是裁剪所述基元,以及在所述基元待被裁剪的情况下,使用所述第一处理单元相对于多个裁剪平面以一次一个裁剪平面的方式裁剪所述基元。28.—种设备,其包含用于在硬件中使用用于第一图形功能的第一处理单元执行对基元的三维(3D)裁剪的装置;以及用于存储所述3D裁剪的中间结果的装置。29.根据权利要求28所述的设备,其进一步包含用于在硬件中使用用于第二图形功能的第二处理单元计算用于从所述3D裁剪产生的新顶点的属性分量值的装置。30.—种无线装置,其包含图形处理单元,其可操作以执行图形操作且包含第一硬件单元,其用以使用用于第一图形功能的第一处理单元执行对基元的三维(3D)裁剪,以及至少一个缓冲器,其用以存储所述第一硬件单元所进行的所述3D裁剪的中间结果;以及存储器,其用以存储用于所述图形处理单元的数据。31.根据权利要求30所述的无线装置,其中所述图形处理单元进一步包含第二硬件单元,其用以使用用于第二图形功能的第二处理单元计算用于从所述3D裁剪产生的新顶点的属性分量值。全文摘要本发明提供一种图形处理单元(GPU),其使用用于其它图形功能的处理单元来有效地执行三维(3D)裁剪。所述GPU包括第一和第二硬件单元和至少一个缓冲器。所述第一硬件单元使用用于第一图形功能的第一处理单元执行对基元的3D裁剪,所述第一处理单元例如为用于三角形设置、深度梯度设置等的ALU。所述第一硬件单元可通过以下操作执行3D裁剪(a)计算用于每一基元的每一顶点的裁剪代码;(b)基于用于所述基元的所有顶点的所述裁剪代码而确定是传递、抛弃还是裁剪所述基元;以及(c)相对于裁剪平面裁剪待裁剪的每一基元。所述第二硬件单元例如使用用于属性梯度设置、属性内插等的ALU计算用于从所述3D裁剪产生的新顶点的属性分量值。所述缓冲器存储所述3D裁剪的中间结果。文档编号G06T15/00GK101529473SQ200780039025公开日2009年9月9日申请日期2007年10月23日优先权日2006年10月23日发明者春于,令军·弗兰克·陈,云杜,焦国方申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1