CN102016798A - 处理支持固定管线的三维图形 - Google Patents

处理支持固定管线的三维图形 Download PDF

Info

Publication number
CN102016798A
CN102016798A CN2009801164167A CN200980116416A CN102016798A CN 102016798 A CN102016798 A CN 102016798A CN 2009801164167 A CN2009801164167 A CN 2009801164167A CN 200980116416 A CN200980116416 A CN 200980116416A CN 102016798 A CN102016798 A CN 102016798A
Authority
CN
China
Prior art keywords
microcode
api
pipeline
renderer
code generator
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.)
Pending
Application number
CN2009801164167A
Other languages
English (en)
Inventor
禹炫在
朴贞爱
禹正皓
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.)
Korea Advanced Institute of Science and Technology KAIST
Core Logic Inc
Original Assignee
Korea Advanced Institute of Science and Technology KAIST
Core Logic Inc
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
Application filed by Korea Advanced Institute of Science and Technology KAIST, Core Logic Inc filed Critical Korea Advanced Institute of Science and Technology KAIST
Publication of CN102016798A publication Critical patent/CN102016798A/zh
Pending legal-status Critical Current

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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • G06F9/453Help systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/32Image data format

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Processing Or Creating Images (AREA)

Abstract

提供了用于处理3D图形的技术、设备、和系统。一种图形处理器包括:固定管线代码生成器,用于把支持固定管线的应用编程接口(API)转换为第一微代码;渲染器管线代码生成器,用于把支持可编程管线的API转换为第二微代码;以及渲染器管线,用于通过使用渲染器程序来处理第一或第二微代码。

Description

处理支持固定管线的三维图形
技术领域
本公开涉及处理三维(3D)图形。
背景技术
可以获得各种三维(3D)图形应用,以用于在诸如移动电话、个人数字助理(PDA)和便携式游戏机的移动环境上执行。为了处理3D应用,可以获得针对移动环境而设计的3D图形应用编程接口(API)。3D图形API中的一些支持固定管线(fixed pipeline),而其它支持可编程管线。
发明内容
技术问题
针对处理3D图形来描述技术、设备和系统。具体地,3D图形处理技术、设备和系统支持可编程管线和固定管线二者。
技术方案
一方面,提供了一种用于处理3D图形的图形处理器。所述图形处理器包括:固定管线代码生成器,用于把支持固定管线的应用编程接口(API)转换为第一微代码;以及渲染器(shader)管线代码生成器,用于把支持可编程管线的API转换为第二微代码。所述图形处理器包括:与固定管线代码生成器和渲染器管线代码生成器相通信的渲染器管线,用于通过使用渲染器程序来处理第一和第二微代码中的至少一个。
实现能够可选择地包括一个或多个以下特征。所述处理器可以进一步包括:与固定管线代码生成器和渲染器管线代码生成器相通信的API选择器,用于接收输入API,并确定所接收的输入API是否支持固定管线或可编程管线。
另外,所述渲染器管线可以包括顶点渲染器和片段渲染器。所述固定管线代码生成器可以包括状态单元,用于解析所接收的输入API的对象的属性,并基于该属性来输出状态信息。所述固定管线代码生成器可以包括:代码生成器,用于基于该状态信息来生成第一微代码;以及代码缓冲器,用于存储所生成的第一微代码。
所述处理器可以进一步包括:危险(hazard)控制器,用于检查第一和第二微代码中的至少一个的处理顺序和执行时间,以便标识指示停止(stall)的危险的发生并响应于该危险而执行处理。所述危险控制器可以包括:危险检查器,用于检查每个微代码的处理顺序和执行时间,以检查危险是否已经发生;以及重排序单元,用于对产生危险的微代码的处理顺序重排序。所述危险控制器可以进一步包括:转发单元,用于转发产生危险的微代码的先前微代码的结果值,以用于任何其它微代码的执行。
所述支持固定管线的API可以是OpenGL ES 1.x,而所述支持可编程管线的API可以是OpenGL ES 2.x。
另一方面,提供了一种由用于处理3D图形的图形处理器执行的方法。该方法包括:把支持固定管线的应用编程接口(API)转换为可由支持可编程管线的渲染器识别的第一微代码;以及处理所述微代码,以处理3D图形。所处理的3D图形能够存储在诸如缓冲器的存储器上。而且,所处理的3D图形能够显示在移动环境的显示单元上。
方法的实现能够可选择地包括一个或多个以下特征。所述方法可以进一步包括把支持可编程管线的API转换为可由渲染器识别的微代码。
把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤可以包括:基于输入API的对象的属性来获取状态信息,以及基于所述状态信息来生成第一和第二微代码中的至少一个。
把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤可以进一步包括:检查危险是否已经发生以致停止随后微代码的执行。
把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤可以进一步包括:当确定危险已经发生时,重排序产生危险的微代码。把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤可以进一步包括:当确定危险已经发生时,把产生危险的微代码的先前微代码的结果值转发到不同的微代码。
再一方面,一种计算装置包括:中央处理单元(CPU);以及图形处理器,与该CPU耦接来处理3D图形。所述图形处理器包括:固定管线代码生成器,用于把支持固定管线的API转换为第一微代码;渲染器管线代码生成器,用于把支持可编程管线的API转换为第二微代码;以及与固定管线代码生成器和渲染器管线代码生成器相通信的渲染器管线,用于接收第一和第二微代码中的至少一个,并处理渲染器程序。
计算装置的实现能够可选择地包括一个或多个以下特征。所述图形处理器能够包括:与固定管线代码生成器和渲染器管线代码生成器相通信的API选择器,用于接收输入API,并确定所接收的输入API是否支持固定管线或可编程管线。所述渲染器管线能够包括顶点渲染器和片段渲染器。所述固定管线代码生成器能够包括状态单元,用于解析输入API的对象的属性,并基于所解析的属性来输出状态信息。所述渲染器管线能够包括:代码生成器,用于基于输出的状态信息来生成第一微代码。而且,所述渲染器管线能够包括:代码缓冲器,用于存储第一微代码。所述图形处理器能够进一步包括:与固定管线代码生成器和渲染器管线代码生成器相通信的危险控制器,用于检查第一和第二微代码中的至少一个的处理顺序和执行时间,以便发现指示停止的危险的发生并响应于该危险而执行处理。此外,所述危险控制器能够包括:危险检查器,用于检查每个微代码的处理顺序和执行时间,以检查危险是否已经发生;以及重排序单元,用于对产生危险的微代码的处理顺序重排序。
有益效果
技术、设备和系统的实现能够潜在地提供一个或多个以下优势。所提出的图形处理设备、系统和方法能够提供缩小的硬件尺寸和功耗。对于可编程管线或固定管线,不要求附加的命令或编译,并且所要求的存储器能够最小化。另外,由危险所导致的渲染器的停止能够被抑制,以由此改进3D图形的性能。
附图说明
图1图示了使用渲染器的可编程管线的结构。
图2是实现3D图形处理的计算机装置的示例性示意框图。
图3是用于处理3D图形的图形处理器的示例性示意框图。
图4是固定管线代码生成器的示例性示意框图。
图5图示了根据属性的状态的示例。
图6图示了用于普通操作的64位微代码的格式。
图7图示了用于流程控制的64位微代码的格式。
图8图示了在雾化状态中微代码的生成。
图9图示了危险发生的情况。
图10是图示了固定管线代码生成器的控制器和代码缓冲器的示意框图。
图11是图示了图形处理方法的流程图。
具体实施方式
OpenGL ES(用于嵌入式系统的OpenGL)是针对诸如移动电话、个人数字助理(PDA)、和控制台的嵌入式装置而设计的OpenGL 3D图形应用编程接口(API)的子集。OpenGL ES由非营利技术联盟Khronos集团有限公司管理。
可以获得OpenGL ES规范的几个版本。例如,OpenGL ES 1.0针对OpenGL 1.3规范来拟订,OpenGL ES 1.1相对于OpenGL 1.5规范来描述,而OpenGL ES 2.0相对于OpenGL 2.0规范来描述。2007年3月公布的OpenGLES 2.0消除了固定功能绘制管线的大部分,而支持可编程的管线。该变换和光照(lighting)管线的几乎全部绘制特征(诸如,固定功能API先前指定的材料和光参数的规范)被图形程序员所写的渲染器所取代。
OpenGL ES 1.x包括OpenGL ES 1.0、1.1、1.5的至少一个版本。OpenGLES 2.x包括OpenGL ES 2.0的至少一个版本。
OpenGL ES 1.x针对固定功能硬件而设计,并提供加速、图像质量、和性能。而且,OpenGL ES 1.x着重于API的硬件加速。与OpenGL ES 1.x相比,OpenGL ES 2.x使能完全可编程的3D图形。而且,OpenGL ES 2.x着重于具有创建渲染器和程序对象的能力及写顶点和片断渲染器的能力的可编程3D图形管线。OpenGL ES 2.x不支持OpenGL ES 1.x的固定功能变换和片段管线。因此,OpenGL ES 2.x不与OpenGL ES 1.x后向兼容。
如上所述,OpenGL ES 1.x支持固定管线,而OpenGL ES 2.x支持可编程管线。OpenGL ES 2.x支持的可编程管线使用渲染器。渲染器是软件指令的集合,其最初用于以高度灵活性来计算图形硬件上的绘制效果。
例如,Direct3D、OpenGL、和OpenGL ES图形库使用下述三种类型的渲染器。
(1)顶点渲染器针对给予图形处理器的每个顶点运行一次。其目的是把虚拟空间中每个顶点的3D位置变换为3D位置显现在屏幕上的2D坐标(以及Z缓冲器的深度值)。顶点渲染器能够操纵诸如位置、色彩、及纹理坐标的特性。顶点渲染器的输出提供至管线中的下一级,其当呈现时是几何渲染器,或者在其它情况下是光栅化器(rasterizer)。
(2)几何渲染器能够从网格添加和去除顶点。几何渲染器能够用来按程序生成几何,或者把体积的细节添加到现存网格,其成本太高以致不能在中央处理单元(CPU)上处理。当几何渲染器正被使用时,该输出然后发送至光栅化器。
(3)片断渲染器(也称为像素渲染器)能够计算个别片断(或像素)的色彩。对此级的输入来自光栅化器,该光栅化器填充正经由图形管线发送的多边形。片断渲染器典型地能够用于场景光照及诸如凹凸映射(bumpmapping)和调色的相关效果。固定管线通过把有限状态变量调整到固定结构来仅仅提供有限形式的计算。与之相比,片断渲染器通过编程而允许总体的复杂的计算,并且理论上能够提供无限状态变量。
图1图示了使用渲染器的可编程管线的结构。顶点渲染器110接收用户定义的属性变量,并计算坐标变换和/或光照。顶点渲染器110的输出由光栅化器120变换为光栅格式。片断渲染器130执行诸如纹理计算(即,计算、操作)或调色的处理。片断渲染器130的输出发送至帧缓冲器140,以便被处理以进行显示。
由于固定管线和可编程管线之间的差异,所以OpenGL ES 2.x不与OpenGL ES 1.x后向兼容。可编程管线能够向用户提供灵活性,而固定管线在处理速度方面有优势。
并非图形场景中包括的全部对象都需要渲染器。由此,可以基于OpenGLES 1.x规范而不是OpenGL ES 2.x来表达不要求壮观、华丽图形效果的场景部分、或要求快速计算处理的部分。由此,本说明书中描述的技术、设备、和系统能够用来支持可编程管线和固定管线二者。通过支持可编程和固定管线二者,硬件尺寸和功率使用能够对于具体移动环境而降低并有效率。
下面描述的技术、设备、和系统能够实现为用于处理诸如Direct3D、OpenGL、OpenGL ES等等的不同3D图形API(应用编程接口)的硬件和/或软件。OpenGL ES 1.x可以包括OpenGL ES 1.0、1.1、1.5的至少一个版本。OpenGL ES 2.x可以包括OpenGL ES 2.0。
出于阐释性目的,OpenGL ES 1.x在本说明书中描述为支持固定管线的图形API,而OpenGL ES 2.x描述为支持可编程管线的图形API。本说明书中描述的技术、设备、和系统能够应用于支持固定管线或可编程管线的其它图形API。
下面的文档的内容通过引用而并入于此:
“OpenGL ES 1.1规范”,该规范能够作为http://www.khronos.org/registry/gles/specs/1.1/es_full_spec.1.1.12.pdf而获得;以及
“OpenGL ES 2.0规范”,该规范能够作为http://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.23.pdf而获得。
图2是用于实现3D图形处理的计算机装置的示例性示意框图。计算机装置200可以是诸如移动电话、个人数字助理(PDA)、控制台、移动个人计算机等等的移动装置。计算机装置200包括中央处理单元(CPU)210、存储器220、图形处理器230、及接口单元240。计算机装置200的各个元件可以经由系统总线290而连接。CPU 210能够运行软件应用。存储器220存储CPU 220所使用的应用和数据。
图形处理器230执行3D图形处理。图形处理器230可以处理支持固定管线的图形API和/或支持可编程管线的图形API。例如,图形处理器230可以处理支持OpenGL ES 1.x和/或OpenGL ES 2.x的API。关于FIGS X来在下文公开图形处理器230的详细操作。
图3是根据本说明书实施例的图形处理器的示例性示意框图。图形处理器300包括API选择器310、固定管线代码生成器330、渲染器管线代码生成器340、及渲染器管线360。
API选择器310接收API,并确定所接收的API是否支持固定管线和/或可编程管线。当确定所接收的API支持固定管线时,API选择器310把固定管线支持API发送至固定管线代码生成器330。当确定所接收的API支持可编程管线时,API选择器310把可编程管线支持API发送至渲染器管线代码生成器340。
固定管线代码生成器330把支持固定管线的API转换为能够由渲染器管线360识别的微代码(即,第一微代码)。所转换的第一微代码标识渲染器管线360要执行的操作。例如,固定管线代码生成器330可以基于OpenGL ES1.x来把该API转换为基于渲染的微代码。
渲染器管线代码生成器340把支持可编程管线的API转换为能够由渲染器管线360识别的其它微代码(即,第二微代码)。所转换的第二管线微代码标识渲染器管线360要执行的另一操作。例如,渲染器管线代码生成器340可以基于OpenGL ES 2.x来把该API转换为基于渲染器的微代码。
当固定管线代码生成器330所生成的第一微代码和/或渲染器管线代码生成器340所生成的第二微代码在渲染器管线360中执行时,危险控制器350检查可能导致停止的危险。当危险发生时,危险控制器350执行处理来抑制停止。即,在生成这样的危险的情况下,危险控制器350可以对第一和第二微代码进行重排序、转发和/或互锁。
渲染器管线360通过抽取(fetch)、解码、和执行第一和第二微代码的处理来处理渲染器程序。如图1所示,渲染器管线360可以包括顶点渲染器和片断渲染器。顶点渲染器接收各个顶点和用来计算所述顶点所需要的常数,计算坐标变换和光照,并输出变换的值。所变换的值可以经受剪切和光栅化处理,其然后输入至片断渲染器。片断渲染器处理纹理操作和调色。
支持可编程管线的OpenGL ES 2.x基本上使用渲染器程序。由此,渲染器管线代码生成器340能够生成用于渲染器管线360的第二微代码。
根据支持固定管线的OpenGL ES 1.x来生成基于渲染器的微代码并不简单。只要对象的属性改变为支持OpenGL ES 1.x,编译就能够实时地执行。然而,这将要求硬件的附加代码存储器。当仅仅单个代码存储器被选择来使用时,只要从OpenGL ES 2.x到OpenGL ES 1.x和/或从OpenGL ES 1.x到OpenGL ES 2.x的转换发生时,就将生成开销来删除先前代码存储器的命令,并插入新编译的命令。
附加代码存储器或移动环境中开销的增加将伴随着硬件尺寸和附加功耗的增加。如此,图形处理器300应当被设计为具有小硬件、低功耗、和高性能。
图4是根据本说明书实施例的固定管线代码生成器的示例性示意框图。固定管线代码生成单元330包括状态单元331、代码生成器332、代码缓冲器333、和控制器334。
状态单元331解析输入对象的属性,并且根据所解析的属性来输出状态信息。状态单元331利用有限状态机、基于用户定义的属性来改变状态。每个状态可以包括多个子状态。
代码生成器332基于状态信息来生成微代码。每个状态输入至微代码多路复用器(未示出),至少一个微代码从该微代码多路复用器选择性地输出。单个微代码可以具有64位。
代码缓冲器333存储代码生成器332生成的微代码,并且基于来自控制器334的指令来把所存储的微代码发送至渲染器。
控制器334管理状态单元331、代码生成器332、和代码缓冲器333。控制器334可以基于对象的属性来控制状态单元331的状态的改变或保持。
如在本说明书中描述的固定管线代码生成单元330可以具有常规代码存储器的仅仅5%的尺寸。由此,硬件的尺寸和功耗能够降低。
现在,将通过实质的示例更详细地描述固定管线代码生成单元330的操作。
图5图示了基于属性的状态的示例。基于输入的属性,当前的状态改变为初始状态、顶点状态、纹理状态、光照状态、和雾化状态中的至少一个。每个状态可以包括五十(50)到一百七十(170)个子状态。
例如,考虑OpenGL ES 1.1规范中的雾化状态。当被使能时,雾化状态使用混合因子f来混合雾化色彩与光栅化片断的后纹理色彩。此因子f根据以下三个等式之一来计算:
数学式1
[数学.1]
f=exp(-d·c)
数学式2
[数学.2]
f=exp(-(d·c)2)
数学式3
[数学.3]
f = e - c e - s
其中,c是目坐标系中从眼睛(0;0;0;1)到片断中心的目坐标距离。该等式及d或e和s由以下指定:
void Fog{xf}(enum pname,Tparam);
void Fog{xf}v(enumpname,Tparams);
如果pname是FOG MODE(雾化模式),则param和/或params应当指向作为符号常数EXP(指数)、EXP2(指数2)、或LINEAR(线性)之一的整数,在EXP、EXP2、LINEAR的情况下,等式(1)、(2)、(3)分别被选择以用于雾化计算。当pname是FOG DENSITY(雾化密度)、FOG START(雾化开始)和/或FOG END(雾化结束)时,那么param和/或params分别指向作为d、s、或e的值。
由此,上述等式(1)、(2)、(3)所表示的雾化模式EXP、EXP2、及LINEAR指示雾被绘制得多么浓厚。EXP、EXP2、及LINEAR是雾化状态的子状态。即,当雾化模式被使能并且雾化API被提供为输入时,当前状态改变为雾化状态(或当已经处于雾化状态时,保持在雾化状态中),并且EXP、EXP2、及LINEAR之一被指定为雾化状态的子状态。
能够由渲染器管线360识别的微代码可以具有64位格式。与微代码相关联的指令的类型可以划分为两类:普通操作和流程控制。
图6图示了用于普通操作的64位微代码的示例格式,而图7图示了用于流程控制的64位微代码的示例格式。每个字段表示为如下面表1所示。
表1
[表1]
下面的表2示出了支持OpenGL ES渲染器的指令集合的示例。
表2
[表2]
  OPCODE   SYNTAX(句法)   运算
  MUL   MUL DST SRC1SRC2   DST=SRC1*SRC2
  MAD   MAD DST SRC1SRC2SRC2   DST=SRC1*SRC2*SRC3
  ADD   ADD DST SRC1SRC2   DST=SRC1+SRC2
  SUB   SUB DST SRC1SRC2   DST=SRC1-SRC2
  RCP   RCP DST SRC   DST=1/SRC
  EXP   EXP DST SRC   DST=2SRC
  RSQ   RSQ DSR SRC   DST=1/SQRT(SRC)
  MOV   MOV DSR SRC
图8图示了在雾化状态中微代码的示例生成。当雾化模式被选择为当前状态时,代码生成器332基于每个子状态来生成微代码。生成的微代码输入至渲染器并在渲染器中处理。
仅仅为了阐释性目的来描述根据LINEAR、EXP、EXP2而生成的微代码。
如下地描述使得渲染器管线360能够有效地处理微代码的危险防止。随着API被转换为渲染器可识别的微代码,当渲染器引导或处理微代码时可能发生停止。此停止的发生称为危险。
例如,假定渲染器按顺序执行四个步骤:抽取(F)、解码(D)、执行(E)、和写回(W)。
图9图示了危险发生的示例情况。Opcode RSQ总体上要求比OpcodeADD或SUB更长的执行时间。例如,假定RSQ要求总共5个单位时间(F/D/E1/E2/W),而ADD或SUB要求总共4个单位时间(F/D/E/W)。还假定微代码‘RSQ R2R0’、‘ADD R3R1R2’、和‘SUB R6R4R5’以1个单位时间的间隔而按顺序执行。在此情况下,为了处理‘ADD R3R1R2’,‘RSQ R2R0’应当被首先执行并完成。然而,由于在用于‘ADD R3R1R2’的开始时间点,‘RSQ R2R0’还尚未被完成,因此渲染器对‘ADD R3R1R2’的执行进行延迟。这称为互锁。因为‘ADD R3R1R2’的引导被延迟,因此下一微代码‘SUB R6R4R5’处理也被延迟。
同时,在上述示例中,‘SUB R6R4R5’能够被处理,而不论先前的微代码‘RSQ R2R0’和‘ADD R3R1R2’是否执行。因此,改变‘ADD R3R1R2’和‘SUB R6R4R5’的处理顺序将最小化渲染器的停止并提高处理速度。这称为重排序。
图10是根据本说明书实施例的危险控制器的示例性示意框图。危险控制器800包括危险检查器810、重排序单元820、和转发单元830。
缓冲器单元850包括多个缓冲器,所述多个缓冲器包括缓冲器#0、缓冲器#1、......缓冲器#M,并且每个缓冲器存储微代码。缓冲器单元850可以包括在固定管线代码生成器330中或包括在渲染器管线代码生成器340中,并且可以把微代码经由系统总线290而发送至危险控制器800。在一些实现中,缓冲器单元850可以包括在危险控制器800中。
危险检查器810检查每个微代码的处理顺序和执行时间,以确定危险是否已经发生。当确定危险已经发生时,危险检查器810检查产生危险的微代码的先前或随后的微代码的执行时间和处理顺序,并确定是否执行重排序。
危险检查器810把重排序信息发送至重排序单元820,以使得重排序单元820能够重排序微代码。在图9的示例中,‘ADD R3R1R2’和‘SUB R6R4R5’可以以它们的处理顺序来重排序,以降低渲染器处停止的发生。
当产生危险的微代码的先前微代码的结果值用于执行任何其它微代码时,转发单元830把该结果值转发至其它微代码。
当产生危险时,重排序和/或转发被执行来防止可能由停止所导致的延迟,并由此改进渲染器的性能。而且,图形处理器和CPU之间的数据传输能够降低以防止总线带宽的浪费。
图11是图示了根据本说明书实施例的图形处理方法的示例性流程图。在步骤S810,图形处理器(例如,包括API选择器310的图形操作器300)确定输入的API是否支持固定管线或可编程管线。例如,图形处理器确定输入的API是否是与OpenGL ES 1.x相对应的API和/或与OpenGL ES 2.x相对应的API。
在步骤S820,图形处理器把支持可编程管线的API转换为能够由渲染器识别的第一微代码。
在步骤S830,图形处理器把支持固定管线的API转换为能够由渲染器识别的第二微代码。为了把API转换为微代码,可以获取基于API对象属性的状态信息,并且微代码可以基于状态信息而生成。
在步骤S840,图形处理器检查危险是否已经发生以致停止所生成的微代码的执行。
在步骤S850,当图形处理器确定危险已经发生时,图形处理器确定停止是否能够通过重排序产生危险的微代码或转发先前的微代码而降低。在步骤S860,图形处理器重排序和/或转发微代码,或者在步骤S870,图形处理器互锁微代码。
在步骤S890,图形处理器处理微代码来处理3D图形。所处理的3D图形能够显示在移动环境的显示单元上或者存储在移动环境的存储单元(例如,缓冲器或其它存储器)上。
在本说明书中描述的主题和功能操作的实施例能够实现在包括本说明书中公开的结构及其结构等效物的数字电子电路中、或者计算机软件、固件、或硬件中、或者实现在它们中的一个或多个的组合中。本说明书中描述的主题的实施例能够实现为一个或多个计算机程序产品,即,在有形计算机可读介质上编码以用来由数据处理设备执行或控制数据处理设备的操作的计算机程序指令的一个或多个模块。计算机可读介质能够是机器可读存储装置、机器可读存储基底、存储器装置、实现机器可读的传播信号的物体的合成物、或者它们中的一个或多个的组合。
计算机程序(也称为程序、软件、软件应用、脚本、或代码)能够以任何形式的编程语言编写,所述编程语音包括编译的或解释的语言、或者说明的或过程的语言,并且它能够以任何形式来部署,所述形式包括作为独立程序或作为模块、组件、子例程、或适合用于计算环境的其它单元。计算机程序不必然与文件系统中的文件相对应。程序能够存储在保存其它程序或数据的文件的一部分(例如,在标记语言文档中存储的一个或多个脚本)中,专用于所涉及的程序的单个文件中,或者多个协作的文件(例如,存储一个或多个模块、子程序、或代码的一部分的文件)中。计算机程序能够被配置为在一个计算机上执行,或在位于一个站点或跨越多个站点而分布并由通信网络互联的多个计算机上执行。
在本说明书中描述的处理和逻辑流程能够由执行一个或多个计算机程序以通过在输入数据上进行操作并生成输出来执行功能的一个或多个可编程处理器来执行。所述处理和逻辑流程还能够由特定用途逻辑电路来执行,并且设备还能够实现为特定用途逻辑电路,所述特定用途逻辑电路例如FPGA(现场可编程门阵列)或ASIC(特定应用集成电路)。
适合于执行计算机程序的处理器例如包括通用及专用微处理器二者、以及任何类型的数字计算机的任意一个或多个处理器。总体上,处理器将从只读存储器或随机存取存储器或二者接收指令和数据。计算机的实质元件是用于执行指令的处理器及用于存储指令和数据的一个或多个存储器装置。总体上,计算机将还包括用于存储数据的一个或多个大容量存储装置,或者计算机被可操作地耦接来从用于存储数据的一个或多个大容量存储装置接收数据或者向用于存储数据的一个或多个大容量存储装置传送数据,或者进行上述二者,所述大容量存储装置例如磁盘、磁光盘、或光盘。然而,计算机不必需具有这样的装置。而且,计算机能够嵌入在另一装置中。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器装置,所述装置作为示例包括:半导体存储器装置,例如EPROM、EEPROM和闪存装置;磁盘,例如内部硬盘或可移动盘;磁光盘;及CD ROM和DVD-ROM盘。处理器和存储器能够由特定用途逻辑电路来补充,或者并入特定用途逻辑电路中。
尽管本说明书包含许多具体细节,但是这些细节不应当被理解为对任何发明或可以要求的范围的限制,而相反地,应当被理解为可以特定于具体发明的具体实施例的特征的描述。在分离的实施例的情境中在本说明书中描述的特定特征也能够按照组合而实现在单个实施例中。相反,在单个实施例的情境中描述的各种特征也能够分离地实现在多个实施例中或以任何适当的子组合来实现。而且,虽然特征可以在上面描述为在特定组合中动作,甚至可以最初地照此要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下能够从组合中移除,并且所要求保护的组合可以针对子组合或子组合的变体。
类似地,尽管操作以具体顺序而描绘在附图中,但是这不应当被理解为要求这样的操作以所示的具体顺序或以相继的顺序而执行来实现希望的结果,或者要求所有图示的操作都被执行来实现希望的结果。在特定环境下,多任务和并行处理可能是有利的。而且,上述的实施例中的各种系统组件的分离不应当被理解为在所有实施例中都要求这样的分离,并且应当理解,所描述的程序组件和系统总体上能够在单个软件产品中集成到一起或者打包到多个软件产品中。
仅仅描述了一些实现和示例,并且其它实现、加强、和变体能够基于在本申请中所描述和图示的内容来做出。

Claims (20)

1.一种用于处理3D图形的图形处理器,包括:
固定管线代码生成器,用于把支持固定管线的应用编程接口(API)转换为第一微代码;
渲染器管线代码生成器,用于把支持可编程管线的API转换为第二微代码;以及
与固定管线代码生成器和渲染器管线代码生成器相通信的渲染器管线,用于通过使用渲染器程序来处理第一和第二微代码中的至少一个。
2.根据权利要求1的图形处理器,还包括:
与固定管线代码生成器和渲染器管线代码生成器相通信的API选择器,用于接收输入的API,并确定所接收的输入API是否支持固定管线或可编程管线。
3.根据权利要求1的图形处理器,其中,所述渲染器管线包括顶点渲染器和片段渲染器。
4.根据权利要求2的图形处理器,其中,所述固定管线代码生成器包括:
状态单元,用于解析所接收的输入API的对象的属性,并基于所解析的属性来输出状态信息;
代码生成器,用于基于输出的状态信息来生成第一微代码;以及
代码缓冲器,用于存储第一微代码。
5.根据权利要求1的图形处理器,还包括:
与固定管线代码生成器和渲染器管线代码生成器相通信的危险控制器,用于检查第一和第二微代码中的至少一个的处理顺序和执行时间,以便标识指示停止的危险的发生并响应于该危险而执行处理。
6.根据权利要求5的图形处理器,其中,所述危险控制器包括:
危险检查器,用于检查每个微代码的处理顺序和执行时间,以检查危险是否已经发生;以及
重排序单元,用于对产生危险的微代码的处理顺序重排序。
7.根据权利要求6的图形处理器,其中,所述危险控制器还包括:
转发单元,用于转发产生危险的微代码的先前微代码的结果值,以用于任何其它微代码的执行。
8.根据权利要求1的图形处理器,其中,所述支持固定管线的API包括OpenGL ES 1.x,而所述支持可编程管线的API包括OpenGL ES 2.x。
9.一种由用于处理3D图形的图形处理器执行的方法,包括:
把支持固定管线的应用编程接口(API)转换为能够由支持可编程管线的渲染器识别的第一微代码;以及
处理所转换的第一微代码,以处理3D图形。
10.根据权利要求9的方法,还包括:
把支持可编程管线的API转换为能够由渲染器管线识别的第二微代码。
11.根据权利要求10的方法,其中,把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤包括:
基于输入的API的对象的属性来获取状态信息;以及
基于所获取的状态信息来生成第一和第二微代码。
12.根据权利要求10的方法,其中,把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤还包括:
检查每个微代码,以确定危险是否已经发生以致停止随后微代码的执行。
13.根据权利要求12的方法,其中,把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤还包括:
当确定危险已经发生时,重排序产生危险的微代码。
14.根据权利要求12的方法,其中,把支持固定管线的API和支持可编程管线的API转换为第一和第二微代码的步骤还包括:
当确定危险已经发生时,把产生危险的微代码的先前微代码的结果值转发到不同的微代码。
15.一种计算装置,包括:
中央处理单元(CPU);以及
图形处理器,与该CPU耦接来处理3D图形,其中,所述图形处理器包括:
固定管线代码生成器,用于把支持固定管线的API转换为第一微代码;
渲染器管线代码生成器,用于把支持可编程管线的API转换为第二微代码;以及
与固定管线代码生成器和渲染器管线代码生成器相通信的渲染器管线,用于接收第一和第二微代码中的至少一个,并处理渲染器程序。
16.根据权利要求15的计算装置,其中,所述图形处理器包括:
与固定管线代码生成器和渲染器管线代码生成器相通信的API选择器,用于接收输入的API,并确定所接收的输入API是否支持固定管线或可编程管线。
17.根据权利要求15的计算装置,其中,所述渲染器管线包括顶点渲染器和片段渲染器。
18.根据权利要求15的计算装置,其中,所述固定管线代码生成器包括:
状态单元,用于解析输入的API的对象的属性,并基于所解析的属性来输出状态信息;
代码生成器,用于基于输出的状态信息来生成第一微代码;以及
代码缓冲器,用于存储第一微代码。
19.根据权利要求15的计算装置,其中,所述图形处理器还包括:
与固定管线代码生成器和渲染器管线代码生成器相通信的危险控制器,用于检查第一和第二微代码中的至少一个的处理顺序和执行时间,以便标识指示停止的危险的发生并响应于该危险而执行处理。
20.根据权利要求19的计算装置,其中,所述危险控制器包括:
危险检查器,用于检查每个微代码的处理顺序和执行时间,以检查危险是否已经发生;以及
重排序单元,用于对产生危险的微代码的处理顺序重排序。
CN2009801164167A 2008-03-11 2009-03-11 处理支持固定管线的三维图形 Pending CN102016798A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR10-2008-0022611 2008-03-11
KR20080022611 2008-03-11
PCT/KR2009/001218 WO2009113811A2 (en) 2008-03-11 2009-03-11 Processing 3d graphics supporting fixed pipeline

Publications (1)

Publication Number Publication Date
CN102016798A true CN102016798A (zh) 2011-04-13

Family

ID=41062533

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009801164167A Pending CN102016798A (zh) 2008-03-11 2009-03-11 处理支持固定管线的三维图形

Country Status (6)

Country Link
US (1) US20090231332A1 (zh)
EP (1) EP2266027A2 (zh)
JP (1) JP2011513874A (zh)
KR (1) KR101057977B1 (zh)
CN (1) CN102016798A (zh)
WO (1) WO2009113811A2 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8561038B1 (en) 2009-12-31 2013-10-15 Google Inc. High performance execution environment
US8516578B1 (en) 2010-12-22 2013-08-20 Google Inc. Vertex array access bounds checking
US8711166B1 (en) 2011-02-25 2014-04-29 Google Inc. Simulating non power of two texture behavior
US8416250B1 (en) * 2011-05-13 2013-04-09 Google Inc. Simulating vertex attribute zero
KR101926570B1 (ko) 2011-09-14 2018-12-10 삼성전자주식회사 포스트 프레그먼트 쉐이더를 사용하는 그래픽 처리 방법 및 장치
US10255651B2 (en) 2015-04-15 2019-04-09 Channel One Holdings Inc. Methods and systems for generating shaders to emulate a fixed-function graphics pipeline
US20210294579A1 (en) * 2020-03-19 2021-09-23 Advanced Micro Devices, Inc. Graphics pipeline optimizations

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4409956B2 (ja) * 2002-03-01 2010-02-03 ティーファイヴ ラブズ リミテッド 集中型対話グラフィカルアプリケーションサーバ
US7015909B1 (en) * 2002-03-19 2006-03-21 Aechelon Technology, Inc. Efficient use of user-defined shaders to implement graphics operations
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
US8035646B2 (en) * 2003-11-14 2011-10-11 Microsoft Corporation Systems and methods for downloading algorithmic elements to a coprocessor and corresponding techniques
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
EP1687732A4 (en) * 2003-11-19 2008-11-19 Lucid Information Technology Ltd METHOD AND SYSTEM FOR A MULTIPLEXED 3D GRAPHIC PIPELINE VIA A PC BUS
US7385607B2 (en) * 2004-04-12 2008-06-10 Nvidia Corporation Scalable shader architecture
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7324106B1 (en) * 2004-07-27 2008-01-29 Nvidia Corporation Translation of register-combiner state into shader microcode
US20070022277A1 (en) * 2005-07-20 2007-01-25 Kenji Iwamura Method and system for an enhanced microprocessor

Also Published As

Publication number Publication date
JP2011513874A (ja) 2011-04-28
KR101057977B1 (ko) 2011-08-19
EP2266027A2 (en) 2010-12-29
WO2009113811A3 (en) 2009-12-03
KR20090097816A (ko) 2009-09-16
WO2009113811A2 (en) 2009-09-17
US20090231332A1 (en) 2009-09-17

Similar Documents

Publication Publication Date Title
US10134102B2 (en) Graphics processing hardware for using compute shaders as front end for vertex shaders
CN102016798A (zh) 处理支持固定管线的三维图形
US9202303B2 (en) System and method for compositing path color in path rendering
US9177351B2 (en) Multi-primitive graphics rendering pipeline
CN109564699B (zh) 用于经优化光线追踪的装置和方法
KR102477264B1 (ko) 텍스쳐를 처리하는 방법 및 장치
US10762700B2 (en) Generating random sampling distributions using stochastic rasterization
US20180005427A1 (en) Devices and methods for generating elementary geometries
CN103999128A (zh) 具有命令处理器的图形处理单元
KR20100127834A (ko) 그래픽 렌더링을 위한 멀티-스테이지 테셀레이션
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
CN108780582B (zh) 可见性信息修改
CN108885796B (zh) 利用平面重复使用的降低精度的光线遍历
KR20170040698A (ko) 그래픽스 파이프라인을 수행하는 방법 및 장치
CN103871019A (zh) 优化三角形拓扑用于路径渲染
US9858708B2 (en) Convex polygon clipping during rendering
US11763514B1 (en) Hard ware-assisted emulation of graphics pipeline
CN101754039A (zh) 面向移动设备的3d参数解码系统
CN117495989B (zh) 数据处理方法、装置、设备及可读存储介质
CN115836317A (zh) 增量三元组索引压缩
CN111383314A (zh) 一种验证着色器函数的方法、装置及计算机存储介质
Ioannidis et al. Multithreaded rendering for cross-platform 3D visualization based on Vulkan Api
Nery et al. Efficient hardware implementation of Ray Tracing based on an embedded software for intersection computation
WO2016105218A1 (en) Facilitating culling of composite objects in graphics processing units when such objects produce no visible change in graphics images
Kang et al. Development of lightweight BIM shape format structure to represent large volume geometry objects using GIS with facility management

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20110413