[0001] 本
申请是
申请人英特尔公司于2000年1月12日提交的同名中国
专利申请No.00802788.9的分案申请。
技术领域
[0002] 本
发明涉及
电子装置的图形显示。更具体地说,本发明涉及对由电子装置显示的图形的伸拉位闪(stretch blitting)操作。
背景技术
[0003] 经过二十多年个人计算机已经走入了日常家用。用于教育和娱乐的游戏已经有用于PC的强大的应用
软件并且由于三维(3D)图示技术的引入而得以增强。特定纹理的实时图片3D图示技术将提供对具有全视点
自由度、可见到的真实世界
位置的准确模拟。
[0004] 高
质量实时3D图示技术的关键是,要具有支持杂乱场景的着色的系统结构和
存储器访问方案,在所述杂乱场景中有抬高了
像素存储器访问次数的多层对象。相关的处理负荷必须不会把系统刷新率降低到我们所认为的实时(30Hz)以下。一些提出的解决方案把处理卸载给应用程序(application’s shoulders),因而在对简单场景进行实时着色时有困难。更好的
加速器将加速那些处理器增强的
硬件功能,留着处理器用于高级功能。一般,定制的加速硬件(专用集成
电路ASIC-
硅)执行着色功能更快,为软件应用程序留有更多时间。这种图形3D着色引擎,即3D流水线,使用大量的乘法和加法电路。
[0005] 电视会议和其他视频
图像处理也提到日程中。一个期望用在可视电信会议中的特征是在传输前把视频图像缩放到各种大小的能
力。图像越小、同时提供的细节越少,则需要的通信带宽越小并且能被接收者计算机越快地再现。一般,摄相机将产生其最大尺寸由摄相机图像
传感器限定的视频图像。然后可由缩放装置把该图像缩放成更小或更大的图像。
[0006] 采用对源像素的进行数字滤波来提供缩放的输出的现有的视频摄相机被设计成在源
像素时钟的单个周期内产生每个输出像素。换言之,多抽头
滤波器的抽头中的每个必须用在同一个时钟周期中。因此,需要大量乘法和加法电路来并行处理每个单独的滤波器抽头。随着乘法和加法电路的数量增加,滤波器传播延迟和功耗也增加。而且,当缩放装置是用集成电路(IC)来实现时,加法和乘法电路的增加的数量转变为增加的实现IC的芯片尺寸。最终结果是更昂贵的缩放引擎。
[0007] 如果
计算机系统包括3D着色以及视频成像系统,则用于辅助加速计算的硬件就面积和
门而论变得昂贵。因而,如果减少用于包括三维着色和视频缩放的成像系统的门数量,则会有好处。
发明内容
[0008] 本发明提供用于图像缩放的方法和装置。3D流水线包括启动矩形模式的命令流
控制器。所述3D流水线包括产生由各
顶点定义的矩形的地址的窗口器(windower)。滤波器在基于相对位置的相邻点之间进行内插,以产生每个像素的属性。色彩计算器调整输出数据并且把输出数据写到目标表面。
附图说明
[0009] 在附图中,以举例的方式、而不是以限定的方式说明本发明,并且在附图中类似的标号表示类似的元件,其中:
[0010] 图1是本发明可以在其中实现的计算机系统的方
框图;
[0011] 图2是用于处理视频图像的3D流水线的一个
实施例的方框图;
[0012] 图3是视频图像伸拉处理的一个实施例的
流程图;
[0013] 图4说明用于16比12的矩形的目标数据;
[0014] 图5A说明由用于3D着色和用于伸拉位闪的窗口器执行的边缘测试;
[0015] 图5B说明由用于3D着色和用于伸拉位闪的窗口器执行的边缘测试。
具体实施方式
[0016] 现在描述用于以纹理映射引擎进行图示技术的伸拉位闪的方法和装置。在以下描述中,为说明起见,给出大量特定细节以便提供对本发明的全面理解。但是显然,对于本专业的技术人员,可以不用这些特定的细节来实践本发明。另外,以方框图的形式表示结构和装置以避免使本发明模糊不清。
[0017] 在
说明书中提到“一个实施例”或“实施例”指的是联系实施例描述的具体特征、结构或特性是被包括在本发明的至少一个实施例中的。“在一个实施例中”这个短语在说明书中各个位置的出现不一定都指的是同一实施例。
[0018] 在包括三维着色和视频的计算机系统中,实现重复使用辅助3D着色和伸拉位闪的硬件所用的门的系统。用于伸拉位闪和3D着色的计算是类似的。因而,可以使用带有
修改的、用于对三维图像着色的3D流水线来对视频图像放大和缩小、滤波、改变表面格式,以及改变彩色空间。如下所述,在3D流水线中用纹理映射引擎来进行图像处理。这是有好处的,因为用于修改3D流水线以允许图像处理的门数量,与单独地实现这些功能相比,大大地减少了。
[0019] 采用3D流水线来执行伸拉位闪导致性能改善、并且节省了孤立的伸拉位闪引擎所需要的门。还通过利用3D流水线的功能性由于具有更好缩放和滤波而改进了伸拉位闪引擎。而且,3D流水线的高度流水格式被有利地用来提高伸拉位闪引擎的性能。
[0020] 实现对标准3D流水线的很多变化。修改设置引擎和窗口器以使3D流水线能处理除三
角形之外的矩形。另外,修改映射地址产生器以便能够在4:2:2和4:2:0数据中寻址。另外,修改高速缓存以便能够对这些类型的数据寻址。下面将更详细地讨论所有这些变化。
[0021] 图1是本发明可以在其中实现的计算机系统的方框图。该系统可包括一个或一个以上的处理器110。可把所述处理器110耦合到主机总线115。可把所述主机总线115耦合到主机桥接器120,以便把图形卡或图形子系统130耦合到处理器110。也可把存储器125耦合到主机桥接器120。可进一步把所述主机桥接器120耦合到
系统总线150上,如
PCI总线150。可把PCI总线150耦合到PCI至ISA桥接器160。可把端口以及扩展ISA总线耦合到PCI至ISA桥接器160。
[0022]
图形加速器130包括用于对三维图像着色的3D引擎140。正如下面将要描述的,3D引擎140还可用于伸拉位闪。可把各种输入和输出装置耦合到图形卡130,如视频输入、显示器、电视机等。图形卡130还可包括用于加速图形操作的局部内存147。另外,中央单元140、145可包括局部
高速缓冲存储器,如下所述。可把图形卡130经总线135或类似的连接装置耦合到主机桥接器120上。
[0023] 图2是3D流水线的方框图。3D引擎210包括纹理流水线215。如本领域中众所周知的,可把这种3D引擎用于三维着色。如下面将要描述的,还可把3D流水线用于伸拉位闪。在一个实施例中,响应
指定了矩形基元类型的、在这里称为GFXPRIMITIVE的具体命令(以下称为GFX矩形命令)而执行伸拉位闪解码;但是,也可以使用其他命令名称和格式。
[0024] 命令流控制器220连接成从外部信源例如处理器或
缓冲器接收命令。命令流控制器220对命令分析和解码以执行适当的控制功能。如果收到的命令不是GFX矩形命令,命令流控制器220把控制
信号和数据传递给设置引擎225。命令流控制器220还控制关于非GFX矩形命令的内存管理、状态变量管理、二维操作等等。
[0025] 在一个实施例中,当命令流控制器220收到GFX矩形命令时,把顶点信息送到设置引擎225。在一个实施例中,命令流控制器220为设置引擎225提供矩形的左上顶点、右下顶点和左下顶点。设置引擎225用这些顶点来计算平面方程的三项:关于X、关于Y以及原点的属性变化率。
[0026] 另外,当执行纹理映射时,设置引擎225确定包含由顶点定义的三角形的有边界框。
[0027] 设置引擎225从命令流控制器220接收目标位置的左上顶点、右下顶点和左下顶点。设置引擎225还接收定义原始尺寸、在每个顶点处的第二组坐标。设置引擎225计算两组坐标的比值以确定伸拉的比例,在尺寸上或者扩展或者缩小。目标坐标是相对窗口的,而源的坐标是相对于源图像的左上角、即左上角坐标总是(0,0)。注意,设置引擎方程是为用于3D着色的三角形所做计算的子集。因而,不需要附加的硬件。设置引擎225还产生边缘,定义矩形基元的有边界框。设置引擎225向窗口器230提供有边界框信息。
[0028] 窗口器230产生目标平面的地址。窗口器230一般通过划出经过每对顶点的线来产生这些地址。顶端线510以上的区域被标为负的,而顶端线510以下的区域被赋予正值。底线520以下区域被标为负的,而底线520以上区域被赋予正值。在边缘线530以内的区域被赋予正值,而在边缘线530以外的区域被标为负的。这称为边缘测试。这确定了显示的三角形
540。在图5A和5B中说明了这些。
[0029] 对于伸拉位闪,使用了窗口器230的另一方面。窗口器230永远不显示在由设置引擎225传递给窗口器230的有边界框590以外的区域。因而,迫使边缘测试总为正,由此把该区域定义为有边界框590的整个区域。窗口器230在有边界框内
迭代像素以产生由GFX矩形命令写入的数据的读和写地址。换言之,总是传递三角形边缘方程,这使窗口器230能处理整个矩形而不是停留在三角形边界上。这些读和写地址被传递给映射地址发生器。
[0030] 窗口器230产生像素读写地址以把数据接入高速缓冲存储器,在图2中未示出。窗口器230还向色彩计算器280提供用于阿尔法(α)混合步骤的目标项。窗口器230从
帧缓冲器获得目标信息。
[0031] 窗口器230利用在3D流水线中可获得的深
层流水线作业。当窗口器230从设置引擎225接收了有边界框和顶点时,窗口器230开始产生地址。用于这些地址的数据是从存储器中取出的。存储器具有相对长的延迟。因而,当窗口器230产生地址时,
请求对数据进行流水作业,以FIFO(先进先出)方式设置每个请求的控制部分。因而,对用于每个产生的地址的数据的请求随着地址产生而连续地被送往存储器。因而,存储器延迟仅影响所请求的第一像素数据。通过流水线作业,消除了存储器延迟对随后的像素数据的影响,并且可以按每一个时钟脉冲产生像素,维持通过量。流水线作业就面积而论是昂贵的,而把现有的流水线作业再用于3D引擎是有利的。
[0032] 映射地址产生器240产生实际地址以在纹理映射中提取特定的像素。在一个实施例中,映射地址发生器240按照以下方程计算目标区
[0033]
[0034] 域:
[0035] 这个方程对于那些熟悉3D着色的人是众所周知的。
[0036] 通过使用下表中的值,复杂的纹理映射方程可以被简化以用于伸拉位闪计算,由此使硬件能用于两个目的。Cxs和Cos被直接发送给映射地址产生器240作为平面系数。
[0037] 变量 说明 值
Cxs S(源平面中的水平尺寸)相对于x的变化率 由设置引擎计算
Cos 对S的偏移 由设置引擎计算
Cys S相对于y的变化率 由设置引擎计算
CxT T相对于x的变化率 由设置引擎计算
Cos 对T的偏移 由设置引擎计算
CyT T相对于y的变化率 由设置引擎计算
Cxiw 1/W相对于x的变化率 设置为0.0
[0038] Coiw 对1/W的偏移 设置为1.0
Cyiw 1/W相对于y的变化率 设置为0.0
Pou 对u的偏移 由设置引擎计算,但通常设
置为0.0
Pov 对v的偏移 由设置引擎计算,但通常设
置为0.0
[0039] 这迫使在上述方程中的分母为1。这产生简化的方程:
[0040] u(x,y)=CxS·x+CyX·y+COS
[0041] 这个方程定义了一个简单平面Ax+By+C。进一步修改映射地址产生器240以接受对于顶点的非归一化值。视频地址一般都不是归一化的,而3D着色坐标组一般是归一化的。通过修改映射地址产生器240可操作的值,使3D流水线可用于伸拉位闪。
[0042] 读取单元245执行存储器管理和串行化。读取单元245请求存储在高速缓存260或存储器中的源映射。读取单元245把由映射地址产生器240提供的读取地址转换成高速缓存地址。由读取单元245产生的高速缓存地址被送往高速缓存260。如果在高速缓存260中未发现数据,读取单元245向存储器请求数据,并且当数据到达时把它放入高速缓存。
[0043] 存储在高速缓存地址中的像素数据被送往滤波器250。映射地址产生器240把部分像素
定位数据和关于相邻像素的高速缓存地址发送到滤波器250。在本领域中滤波技术是众所周知的,这里不再进一步讨论。
[0044] 内插器270可用于产生用于混合的内插α值。α混合使部分已经在帧缓冲器中的图像和部分源图像能被看到。术语α定义源的不透明度。对于一个实施例,α值对于伸拉位闪是固定的,并且未使用内插器270。如果α值不固定,则使用如上所述关于映射地址产生器240的同样方程。对于另一个实施例,指定所有三个顶点的α值,并且内插器270产生在各顶点的α值之间的光滑混合。α值被传递到色彩计算器280。
[0045] 在下表中说明彩色空间转换和通道分配格式的一个实施例。
[0046] 源→目标 操作 源表面 目标表面
表面
4:2:0→4:2:0 动作补偿和
算法伸拉 分开处理4:2:0表面 4:2:0位闪 的每个通道,需要3遍
4:2:0→4:2:2 算法伸拉位闪 4:2:2 分开处理4:2:0
表面的每个通道,
需要3遍
4:2:2→4:2:2 算法伸拉位闪 4:2:2 4:2:2
4:2:2→4:2:0 算法伸拉位闪 4:2:2 分开处理4:2:0
表面的每个通道,
需要3遍
4:2:2→16bpp 算法伸拉位闪 4:2:2带有彩色空间 16bpp表面
RGB 转换
8bpt Y→16bpp 利用
纹理合成的3
亮度纹理映射调制另 16bpp反向缓冲RGB D着色 一映射
16bptAI→16bpp 利用纹理合成的3 α及强度纹理映射混 16bpp反向缓冲RGB D着色 合和/或调制另一映射
8bpt索引RGB→ 3D着色 8比特索引用于调色 16bpp反向缓冲
16bpp RGB 纹理映射
16bpt RGB→16 3D着色 16bpt纹理映射 16bpp反向缓冲
bpp RGB
[0047] 注:bpp-每像素位数,bpt-
[0048] 对于另一个实施例,可从支持的源表面和输出方式中产生其他目标表面。
[0049] 通道操作单元255执行
颜色通道分配操作(Y、U和V通道)。它还执行从YUV到RGB的彩色空间转换。对于另一个实施例,通道操作单元255可以既进行通道分配、又进行彩色空间转换。对于一个实施例,对YUV通道转换要用三遍。首先,每个像素被上抽样(up sampled)为4:4:4格式,对中间像素内插U和V值。然后,可能发生三遍表面格式转换。在第一遍中,写入Y值,在第二遍中写入U值,而在第三遍中写入V值。这提供了从平面到打包格式的便宜转换,并且不需要三个地址流式磁带机。这些转换可能用于电视会议和其他用途。
[0050] 对于一个实施例,在色彩计算器280的数据校准寄存器中进行从4:2:0到4:2:2的通道转换。
[0051] 对于一个实施例,色彩计算器280尤其是使用以下混合方程:
[0052] 色彩=α*源+(1-α)*目标
[0053] 色彩计算器280接收三个输入值:来自通道操作单元255的源色彩;由窗口器230取出的、来自存储器的目标色彩;以及来自内插器270的α值(它可能是固定的)。在色彩计算器280中的打包逻辑(packing logic)对数据进行校准并且把它写到目标平面。
[0054] 图3是图像伸拉过程的流程图。在
块310中,启动矩形基元类型。矩形基元类型使3D引擎能识别由三个点描述为矩形的对象。所述矩形是由按照与启动的淘汰顺序(culling order)一致的正确提升顺序(winding order)的三个顶点描述的轴校准的矩形。这些顶点描述了一个直角三角形,其中三角形的底边与X轴平行而三角形的垂直边与Y轴平行。基于这三个顶点而知道第四点。对于一个实施例,如果当开始伸拉位闪时已经启动矩形基元类型,这个步骤可以删去。
[0055] 在块320,矩形命令被送到3D引擎,矩形命令向3D引擎指出以下信息将被伸拉位闪,而不是三维着色信息。
[0056] 在块330,该过程测试3D流水线是否被刷新。对于一个实施例,因为3D流水线允许并行操作,所以,在开始视频伸拉之前它被刷新。对于一个实施例,这一步骤和步骤335可被删去。如果3D流水线未被刷新,则过程继续到块335,其中过程等待直到3D流水线被刷新。然后该过程继续到块340。如果3D流水线已被刷新,则过程直接继续到块340。
[0057] 在块340,矩形数据被送到3D流水线210中的设置引擎225。矩形数据定义所操作的数据的矩形。
[0058] 在块345,在窗口器中计算XY坐标。XY坐标定义图象目标表面。
[0059] 在块350,在映射地址产生器(MAG)中计算UV坐标。U和V坐标定义图像源平面。
[0060] 在块360,提取像素数据并将其高速缓存。对于一个实施例,这在产生像素地址后发生。对于一个实施例,像素数据以4×4数据块被高速缓存。
[0061] 在块370,内插像素值。这产生在目标表面上每个像素的属性。
[0062] 在块380,执行通道分配和彩色空间转换步骤。对于一个实施例,仅在被请求时才执行这些步骤。对于另一实施例,总是执行这些步骤。
[0063] 在块390,色彩计算器对数据进行α混合、校准数据并把它写到目标表面。这产生目标图像。在这个过程的结尾,在目标图像中的每个像素都是已知的,并且显示出目标图像。
[0064] 在前述的说明书中,已经参照其特定的示例性实施例描述了本发明。但是,显然,只要不违背如所附
权利要求书中所陈述的本发明的更广的精神和范围,可以做各种修改和变化。因此,说明书和附图是为了说明而非为了限定。