説明

高速ピクセル・レンダリング処理

最終ステージ(ピクセル・レンダリング)において、サブスクリーンのピクセルを並列かつ独立に処理する、三次元(3D)グラフィックス・パイプライン。サブスクリーンタスクは共有メモリーのリストに保存されている。共有メモリーは、ピクセル・レンダリング処理に割り当てられた複数個の処理スレッドからアクセスされる。処理スレッドは、サブスクリーンタスクを順序に従って、捕捉し、ロックし、スクリーン上に表示するビットマップを生成するタスクを実行する。タスクは、頂点情報が重ねあわされている表示エリアを分割することにより、M×Nサブスクリーンタスクに生成される。システム分析に基づいて、MおよびNの値は変化する。

【発明の詳細な説明】
【背景】
【0001】
I. 分野
本発明は、一般に画像処理に関するものであり、特に、専用のハードウエア・グラフィックス・アクセラレーターを使わずに、高速ピクセル・レンダリング処理を提供するための三次元(three−dimensional)(3D)グラフィックス・パイプライン技術に関するものである。
【0002】
II. 背景
3D物体に関する情報を、表示できるビットマップに変換することはピクセル・レンダリングとして知られている。この変換には、かなり大きなメモリーと処理能力とを必要とする。過去には、3Dグラフィックスは高性能なワークステーションでのみ利用可能であった。現在では、3Dグラフィックス・アクセラレーターが大半のパーソナルコンピューター(PC)に使われている。ハードウエア・グラフィックス・アクセラレーターでは、メモリー(例えば命令ランダム・アクセス・メモリー(instruction random access memory)(IRAM))と専用のマイクロプロセッサーを用いて、3Dレンダリングの大半を処理している。デスクトップ・コンピューター向けのOpen GL(R)(注:「(R)」は、○内にRが入った文字を意味する。以下同様。) (Open Graphics Library)では、3Dおよび2Dのコンピューター・グラフィックスを生成するアプリケーション・プログラムとのインターフェイス(application programming interface:API)を定義している。このAPIは、プリミティブ(primitive)から複雑な三次元のシーンを描画する数百の機能を有している。
【0003】
Open GL(R) ESは、ソフトウエアとグラフィックスとのインターフェイスを形成するdesktop Open GL(R)のサブセットである。ソ。この3Dグラフィックス・エンジン(Open GL(R) ES)は通常、二つの部分から構成される。第1の部分は、頂点を処理する機能を有し、一般に、ディジタル信号処理プロセッサー(DSP)のファームウエア中に構成される。第2の部分は、ピクセル・レンダリングを行う機能を有しており、専用ハードウエアグラフィックス・アクセラレーターとして構成される。ピクセルのレンダリングを実行する機能を含んでいる第2の部分は、従来の3Dグラフィックス・エンジンのパイプラインの最終段である。パイプラインの最終段では、入力された三角形のセットを処理し、グラフィック・イメージのピクセル表示を作り出す。しかしながら、パイプラインの最終段は、一般に、エンジンにおける3Dグラフィックス・パイプライン全体の性能のボトルネックとなる。したがって、ピクセル・レンダリングを行うパイプラインの最終段の性能(ピクセル/秒)を改善することは極めて重要である。
【0004】
一般に、ピクセル・レンダリング操作を行っている間、入力された三角形のデータは、三角形のデータが入力された順に、連続して処理する必要がある。このため、マルチスレッドを持つプロセッサーを使っても、入力された三角形を処理するのに、インターリーブ並列処理を利用することができない。
【0005】
さらに、ハードウエアのグラフィック・アクセラレーターは、一般に、柔軟ではなく、容易に変更可能ではない。このように、ハードウエアで構成したグラフィック・アクセラレーターでは、新しい機能を追加したり、より高いバージョンの3Dグラフィクス規格(たとえばOpenGL(R)ES 1.0,1.1 …)を使えるようにしたり、異なるアプリケーション・プログラムの設定を使えるようにしたり、要求仕様にあわせたりすることは簡単にはできない。さらに、ハードウエア・グラフィック・アクセラレーターでは、シリコンコストおよびシステムの消費パワーを最適化するために、種々の性能要求(フレーム・レート、スクリーンサイズ、ピクセル・レート、三角形レート等)を満たすように変更することはそんなに簡単ではない。
【0006】
容易に理解できるように、専用ハードウエアのグラフィックス・アクセラレーターは、携帯用パソコンや携帯電話のような小型の携帯型コンピューター機器に使うシリコン面積を占める。したがって、専用ハードウエアで構成したグラフィックス・アクセラレーターを携帯型コンピューター機器に使うと、専用ハードウエアのグラフィックス・アクセラレーターとIRAMが必要なため、携帯型コンピューター機器全体のコストが増加してしまう。専用ハードウエアのグラフィックス・アクセラレーターを使うと、さらに、オーバーヘッドを加え、パワーを消費するDSPとのデータのやり取りが生じる。
【0007】
したがって、専用ハードウエアのグラフィックス・アクセラレーターを使わずに、さらに高速のピクセル・レンダリング処理を提供する、三次元(3D)グラフィックス・パイプラインに係わる技術が必要とされている。
【発明の概要】
【0008】
専用ハードウエアのグラフィックス・アクセラレーターを使わずに、より高速のピクセル・レンダリング処理を提供する、三次元(3D)グラフィックス用パイプラインに関する技術について、以下に説明をする。一つの実施例では、三次元(3D)グラフィックス用パイプラインは、3Dグラフィックス画像用の頂点情報を出力することができる頂点情報処理ステージを含んでいる。表示のサブ分割ステージ(sub−dividing stage)では、その上に重ね合わせた出力頂点情報がある表示エリアに複数のピクセルを分割し、サブスクリーンとする。そのサブスクリーンがサブスクリーン・タスクリストを形成する。ピクセル・レンダリング・ステージでは、サブスクリーン・タスクリストにおける複数のサブスクリーンタスクを並列にかつ独立に処理する。
【0009】
別の態様において、無線機器には、複数の処理スレッドを有するディジタル信号処理プロセッサー、複数の処理スレッドからアクセスされる一つの共有メモリー、と一つのプロセッサーがある。共有メモリーに記憶されたサブスクリーン・タスクリストに存在する、複数のサブスクリーンタスクにおいてピクセルに対する処理を並列かつ独立に行うことにより、このプロセッサーは、専用のグラフィックス・アクセラレーターを使わずに、ピクセル・レンダリング処理を行うことができる。サブスクリーンタスクは、重ね合わされた頂点出力情報がある表示エリアのピクセルの一部を含んでいる。
【0010】
本発明の種々の態様や実施例は、さらに、詳細に下で説明される。
【0011】
本発明の態様と実施例は、後述の発明の詳細な説明と、同一の参照文字が全体にわたってそれに相当するものとして識別する図面と組み合わせて理解することにより、さらに明確になるであろう。
【図面の簡単な説明】
【0012】
【図1】3D画像処理装置の一般的なブロック・ダイアグラムを示す。
【図2】共有メモリーとのインターフェイスを持つ、インターリーブ・複数スレッド・プロセッサーを示す。
【図3】各スレッドの詳細が示されたインターリーブ・複数スレッド・プロセッサーの詳細を示す。
【図4】6個のスレッドを有するマルチスレッド・プロセッサーにより処理されるインターリーブ命令のコア・パイプライン対実行時間のグラフを示す。
【図5】2つのスレッドで処理される2つの並列命令を示す。
【図6】典型的な3D画像処理装置における、3Dグラフィックス・パイプラインの一般的な処理の流れ図を示す。
【図7】3Dグラフィックス・パイプラインのプロセスの一般的な構成図を示す。
【図8A】M×Nのグリッド(M>1、N>1)にサブ分割した表示エリア示す。
【図8B】、図8Aのサブ分割した表示エリアを処理するためにタスクリストを示す。
【図9】M×Nのグリッド(M=1、N>1)にサブ分割した表示エリアを示す。
【図10】M×Nのグリッド(M>1、N=1)にサブ分割した表示エリアを示す。
【図11】複数個のピクセルの頂点座標により定義された三角形を示す。
【図12】あるエリアの三角形を、4個のサブ分割されたエリアの組にサブ分割する処理のために実行する命令のグラフ表示を示す。
【図13】複数スレッド・プロセッサーを使用した3Dグラフィック・パイプライン方法のフローチャートを示す。
【発明の詳細な説明】
【0013】
ここにおいて、“典型的な”という言葉は、“実例、事例、一例である”という意味で使っている。本明細書に“典型的”として示されている実施例や設計例は、他の実施例や設計例と比較して、必ずしもより好ましく、有利なものと解釈する必要はない。
【0014】
多くのゲームアプリケーションでは、二次元(2D)空間(例えばディスプレイのスクリーン)上に、3D物体を表示する三次元(3D)グラフィックスアプリケーションを必要とする。2Dグラフィックのピクセルは、位置および色と明るさの特性を有するのに対して、3Dのピクセルでは、仮想のZ軸軸上でピクセルがどこに存在するのかを示す、奥行き(depth)の特性が加わる。3Dピクセルが各々それ自身の奥行き値に結合されるので、テクスチャー(texture)が形成される。
【0015】
ここで、図1を参照すると、番号10で一般に指定している3D表示装置の実施例が示される。3D表示装置10は、通信装置12、ディジタル信号プロセッサー(DSP)20、表示エリア18を含むスクリーン16、メモリー24、および入出力(I/O)ユニット45を含んでいる。共有メモリー24は、ユーザーにより望まれるような、または装置10の機能セットをサポートするために、ゲームアプリケーションやその他のアプリケーション(すなわち、有線および無線ネットワークにおける双方向通信やその他のソフトウエア・アプリケーション)を記憶することができる。入出力ユニット45は、キーパッド、キーボードまたはデータ通信ポートから構成することができる。スクリーン16は、その表示エリア18に2D情報および3Dグラフィックスを表示することができる。
【0016】
3D画像処理装置10は、携帯情報端末(PDA)や、移動(mobile)電話、携帯電話または衛星電話、ラップトップ、ノートブック、タブレット型PC、パームパイロット(palm pilot)、無線通信機器などの内の一つを含み得る。
【0017】
ここで図2−5を参照すると、典型的な実施例においては、DSP20はインターリーブ・複数スレッド・プロセッサー(interleaved multi−threading processor)22を含んでいる。インターリーブ・複数スレッド・プロセッサー22は複数の処理スレッド(PT)PT1,PT2, ...PTXを有している。それぞれの処理スレッド(processing threads:PT)PT1,PT2, ...PTXは、共有メモリー24で表示した、同一のメモリーを共有する。それぞれの処理スレッド1, ...Xは、それぞれに対応付けられた命令26...26、コア27...27(処理ユニット)およびレジスターファイル28...28を含んでいる。各コアの出力27...27は、共有メモリー24と通信する。命令26...26は、この後に定義を示す操作、および、3D画像処理装置10のマルチメディアようなの機能セットを実行するための他の操作を実行するためのプログラミング・コードを含んでいる。コア27...27は、命令26...26を実行する。
【0018】
レジスターファイル28...28は一組の汎用レジスターであり、DSP20またはマイクロプロセッサーの中心となるステージである。これらのレジスターファイル28...28は、すべてのオペランド(一般にメモリーから読み出される)を保持している。すなわち、処理結果を共有メモリー24に保存するまでは、全ての処理(演算処理、ロジック処理など)により得た結果を保持している。
【0019】
いくつかのDSPアーキテクチャーは4個のスレッドを持つ。しかしながら、DSP29は、(限定されずに)並列動作する6個のスレッドのごとく、4個より多くのスレッドを持っていてもよい。典型的な実施例では、それぞれの処理スレッド(PT)PT1,PT2, ...PTXは、並列に、一秒間に1億回(100MIPS)の命令パケットを供給する。それぞれの命令パケットは、4個の命令、2個の命令(Sup−スカラー)、あるいは単に1個の命令を含む。しかしながら、DSP20のアーキテクチャーは、命令相互間のデータ依存性によって生じる、効率低下を除去するので、1個の命令は、効率の点で薦められない。
【0020】
スレッドおよびマルチスレッディングという言葉は、同時に実行されるタスクを説明するために使われる用語である。単一パスの実行に代わって、プログラム(操作)は複数個の同時に実行するスレッドに分けることができる。典型的な実施例において、 関数呼出し(あるいは命令)を必要とし、通常の場合には、少なくとも2個の引数(argument):(1)開始命令のアドレス;(2)コンテキスト引数、を必要とする開始スレッドがある。スレッドが操作中および(または)終了するときは、そのスレッドは、他の処理スレッドに関して、2つの基本的なジョブ:(1)共有リソースを獲得し、他のスレッドにそのリソースを使わせない;(2)メッセージ(行われた(done)、準備ができている(ready)等)を他のスレッドに確実に伝える、を実行できるようにする必要がある。
【0021】
次に、図4には、インターリーブ複数スレッド並列処理の図を示す。この例では、6個の処理スレッドPT1、PT2、PT3、PT4、PT5、PT6が存在する。最初の処理スレッドPT1は、最初の命令セット1を処理する。これは、コア・パイプラインに対する実行時間ラインで、最初(一番上)の列に示されている。コア・パイプラインは、コア27,...27により示されている。最初の命令セット1が1番目の処理スレッドPT1により処理されている間に、2番目の処理スレッドPT2はその最初の命令セット1を処理する。これは、実行時間ラインの2列目に示されている。このようにして、最初の命令セット1は並列に処理される。
【0022】
1番目と2番目の処理スレッド、PT1,PT2が、最初の命令セット1を実行している間に、3番目の処理スレッドPT3は、最初の命令セット1を処理する。これは、コア・パイプラインに対する実行時間ラインで、3行目に示されている。ついで、4番目の処理スレッドPT4が、その最初の命令セット1を処理する。この時、1番目、2番目、3番目のスレッドPT1,PT2,PT3は、それぞれに与えられた、最初の命令セット1の処理を継続している。これは、コア・パイプラインに対する実行時間ラインで、4列目に示されている。
【0023】
1番目、2番目、3番目、4番目のスレッドPT1,PT2,PT3,PT4が、それぞれに与えられた、最初の命令セット1の処理を継続している間に、5番目の処理スレッドPT5が、その最初の命令セット1を処理する。これは、コア・パイプラインと実行時間ラインで、5列目に示されている。1番目、2番目、3番目、4番目、5番目のスレッドPT1,PT2,PT3,PT4,PT5が、それぞれに与えられた、最初の命令セット1の処理を継続している間に、6番目の処理スレッドPT6が、その最初の命令セット1を処理する。これは、コア・パイプラインに対する実行時間ラインで、6列目に示されている。このように、処理スレッドによる命令の処理はインターリーブされている。
【0024】
次に、図4の7番目(最後)の列を参照すると、最初の処理スレッドPT1は最初の命令セット1を終了したとすると、最初の処理スレッドPT1は2番目の命令セット2を開始する。一方、2番目、3番目、4番目、5番目、6番目の処理スレッド、PT2、PT3、PT4、PT5、PT6は、それぞれの命令セット1の処理を継続している。したがって、それぞれの処理スレッドPT1,PT2...PTXは、並列に、かつインターリーブされている。
【0025】
全てのスレッドについてのインターリーブ処理を説明するのは、ひどく手間がかかる。そこで、説明の目的のために、命令26、26を用いたインターリーブ処理はミューテックス(mutex)に関わるものとして図5に示される。このミューテックスは、同一時刻に、ただ一つの制御スレッドにより「所有される(owned)」ツールである。ある処理スレッドがあるミューテックスの権限を得ようとするときには、そのスレッドはそのミューテックスをロックする。これに対して、そのミューテックスが既にロックされている場合には、その処理スレッドは停止される。所有している処理スレッドがロックを解除すると、処理を停止していたスレッドは処理を再開し、そのミューテックスの所有権(ownership)を得る。この処理は図5に示される。
【0026】
1番目の処理スレッドPT1から開始する場合に、非重要コード(non−critical code)であるステップS22Aの命令26が実行される。ステップS22Aに引き続いて、ステップS24Aが実行される。そこにおいては、最初の処理スレッドPT1がミューテックス1をロックする命令(ミューテックス1はロック解除されているものと仮定)を実行する。このようにして、最初の処理スレッドPT1は、この時点で、ミューテックス1を所有する。ステップS24Aに後に、重要コード(critical code)が実行されるステップS26Aが続く。ステップS26Aの後に、ステップS28Aが続く。そこでは重要コードの実行が終了した後に、最初の処理スレッドPT1が、ミューテックス1のロックを解除する命令を実行する。その後、最初の処理スレッドPT1は、ステップS30Aで非重要コードの実行を再開する。
【0027】
1番目の処理スレッドPT1と並列に、2番目の処理スレッドPT2が命令26を、非重要コードが実行されるステップS22Bから開始する。ステップS22Bに続いて、ステップS24Bが実行される。このステップS24Bで、2番目の処理スレッドPT2がミューテックス1をロックすることを望む。しかしながら、ミューテックス1はロックされた状態になっている。したがって、ステップS28Aにおいて、1番目の処理スレッドPT1がミューテックス1をロック解除するまで、2番目の処理スレッドPT2の動作は停止される。引き続いて、重要コードが実行され得るステップS26Bが開始される。S26Bの後にステップS28Bが続く。そこでは重要コードの処理が終了した後、2番目の処理スレッドPT2が、ミューテックス1のロック解除する命令を実行する。他の命令が引き続いて実行され得る。
【0028】
ミューテックスまたは他のトークンツールは、必要とされる場合にのみ、異なる処理スレッド間で重要な部分の順次実行を保証するために使用される。これは、さらに、他の処理スレッドによるコードの実行と衝突する場合に、あるコードは並列に処理することができないことを意味する直列化実行である。共有メモリー24(共有リソース)が使用されるので、ミューテックス・ツールは、有用である。
【0029】
次に図6、図7を参照すると、一般に番号100で指定された3Dグラフィックス・パイプラインの一般的なフローと構成の一実施例が示される。3Dグラフィックス・パイプライン100は、スクリーン(screen)16の表示エリア(display area)18における、3D表示のタスク全体を、一般に、3つのパイプライン・ステージ(頂点処理(vertex processing:VP)ステージ110、スクリーンのサブ分割(screen sub−dividing:SSD)ステージ130、およびピクセル・レンダリング(pixel rendering:PR)ステージ140)に分割する。動作において、頂点処理(VP)ステージ110は、OpenGL(R)またはOpenGL(R)ESに従って既にインプリメントされている全ての関数またはその関数のサブセットを含んでおり、ディジタル信号処理プロセッサー(DSP)20により処理される。スクリーン16への線は、スクリーン16が3Dグラフィックス・パイプライン100の一部ではないので、二点鎖線で示されている。
【0030】
VPステージ110は、モデルビュー変換操作(model view transform operation)112、プロジェクション操作(projection operation)114、カリング操作(culling operation)116、ライトニングとカラーリング操作(lighting and coloring operation)118、プリミティブ組み立て操作(primitive assembly operation)120、クリッピング(clipping)(すなわちユーザー定義のクリッピング)操作122、遠近法による分割およびビューポート操作(perspective division and viewport operation)124を含んでいる。VPステージ110におけるこれらの操作それぞれは、OpenGL(R)またはOpenGL(R)ESにおいて、適切に定義されている。
【0031】
一般に、モデルビュー変換操作112では、オブジェクト・モデルを所望の位置および方向に配置するために、演算操作を使用する。プロジェクション操作114では、近くにある物体を大きく、遠くにある物体を小さくする、演算操作を使用する。オクルージョン(occlusion)では、近くにある物体を遠くにある物体の前に描く。カリング(culling)操作116とクリッピング操作122では、見えない物を取り除く。ライトニング(lighting)操作118では、表面に対する光の影響を計算する。
【0032】
典型的な実施例では、VPステージ110は一つの処理スレッド(図2、図3)により構成できる。頂点出力情報は、表示エリア16における三角形の形状とその場所とを規定する頂点の情報を含んでいる。表示エリア16において、頂点出力情報は、表示エリア16におけるピクセルが、OpenGL(R)、OpenGL(R)ESまたは他のグラフィクス・ライブラリーに従って、三角形を指定する頂点出力情報を含んでいるように、重ねられる。
【0033】
スクリーンサブ分割(screen sub−dividing:SSD)ステージ130は、表示エリア18をM×Nのサブスクリーンに分割する、スクリーンサブ分割操作132を含んでいる。表示エリア18は、頂点出力情報を重ね合わせた、複数個のピクセルP(図11)から構成されている。VPステージ110からの頂点情報により、表示エリア18に重ね合わせるために、三角形(たとえば図8AのT1、T2)を定義する頂点情報(たとえば図11のV1、V2、V3)が与えられる。頂点情報は、頂点の座標とそのエッジ情報を含み得る。一般に、それぞれの三角形の頂点出力情報は、単に閉じた領域を定義する数学的表現のセットである。この数学的表現のセットは、共有メモリー24に記憶されていて、それぞれの処理スレッド(PT1,PT2,…PTX)は、それ自身のサブスクリーンタスク内の各ピクセルP(図11)を計算するために、かつ、そのピクセルが三角形の中に含まれているかどうかを判定するためにこの数学的表現のセットを使用することができる。
【0034】
図8Aは、表示エリア18に重ね合わせる頂点出力情報を示している。スクリーンサブ分割(SSD)ステージ130の間に、表示エリア18を構成するピクセルを、図8Bにもっとも良く示されるように、M×Nのサブスクリーンタスクに分割または組分けることにより、表示エリア18はサブ分割される。M×Nのサブスクリーンのタスクは、共有メモリー24に記憶される、M×Nの独立したタスクとなる。SSDステージ130の操作は、VPステージ110の間に使用される処理スレッドから離れている処理スレッドを使用することによって実行することができる。あるいは、SSDステージ130の操作は、同じ処理スレッドでVPステージ110の操作と組み合わせることができる。
【0035】
図8Aに示す実施例では、表示アリア18はM×Nのサブスクリーンに分割される。ここで、1個のグリッドを作成するために、M>1およびN>1。説明の目的のために、図9は、M×Nのサブスクリーンに分割された表示エリア18’を示している。ここでM=1およびN>1。矢印は、走査、すなわちワークフローの方向を示している。図10を参照して、表示エリア18”は、M×Nのサブスクリーンに分割されている。ここでM>1およびN=1。このように、表示エリア18”のサブスクリーンは、一連のカラムを形成する。
【0036】
ピクセル・レンダリング(PR)・ステージ140は、ラスター化(rasterization)、ブレンディング(blending)、テクスチャー(texture)アプリケーション操作142および陰面消去操作(hidden surface removal operation)144を含んでいる。しかしながら、ピクセル・レンダリング・ステージ140は、OpenGL(R)またはOpenGL(R)ESで規定されている、その他の操作を含めることができる。PRステージ140は、VPステージ110からの3D物体(object)に関する情報を、スクリーン16上の表示エリア18に表示することのできる、ビットマップに変換する。PRステージ140では、入力された三角形のセットを処理し、3Dグラフィックス画像のピクセル表現を作り出す。
【0037】
典型的なピクセル・レンダリング(PR)・ステージは、最初に、頂点出力情報のリストから1つの三角形を取り出す。次に、PRステージは、表示エリアの1つのピクセルを取り出し、そのピクセルがその三角形の中にあるかどうかを確かめるために三角形に対するピクセルを計算するだろう。評価の下のピクセルが三角形の中にある場合には、PRステージは、そのピクセルに、その三角形に対応する色を使ってカラーリング(coloring)を行う。評価の下のピクセルが三角形の中にない場合には、そのピクセルはスキップされる。次に、PRステージは、表示エリア18にある次のピクセルの処理をするだろう。PRステージは、すべてのピクセルが、三角形に対して評価され、あるいは処理されてしまうまで、以上の処理を、表示エリア内の他のピクセルに対して繰り返す。このように、ピクセルは1個ずつ処理をされる。
【0038】
ついで、典型的なPRステージは、頂点出力情報のリストにある、次の三角形に移り、現在の三角形に対するピクセルの評価をくり返す。
【0039】
PRステージ140は、複数のサブスクリーンあるいはサブスクリーンタスクについて同様に動作する。違いは、サブスクリーンは評価と処理をするピクセルの数が少ないことであり、そして、複数のサブスクリーンは、処理スレッド(PT1,PT2,…PTX)により、独立にかつ並列に処理されることが可能なことである。したがって、PRステージ140における処理時間は、それぞれのサブスクリーンのピクセル数が少なく、複数のサブスクリーンを並列に処理(それぞれの処理スレッドが、それぞれのサブスクリーン内のピクセルについての処理を独立に行う)できるので、典型的なPRステージよりはるかに迅速である。
【0040】
典型的な実施形態において、PRステージ140は、インターリーブ複数スレッド・プロセッサー22の1セットの多重処理スレッド、PR1,PR2,…PRXを使って処理される。PRステージ140で使われる、スレッドのセットの数は、2または2より大きく、最大値はXである。
【0041】
実際の動作では、ピクセル・レンダリング・ステージ140に割り当てられた各処理スレッド、PR1,PR2,…PRXは、タスクリスト135から処理可能なサブスクリーンタスクを捕捉し、そしてタスクリスト135からそれを除去する。処理スレッドのセット、PR1、PR2、…PRXは、インターリーブ・並列処理により、入力三角形を、サブスクリーンのピクセルにレンダリング(入力された三角形の情報をサブスクリーンに表示するビットマップに変換)するために処理する。それぞれ一つの処理スレッドが、捕捉したサブスクリーンタスクのピクセル・レンダリング処理を完了した後、その処理スレッドは、タスクリスト135内の次に処理可能なサブスクリーンタスクに移る。この操作は、全てのサブスクリーンが処理されるまで繰り返され、そしてピクセル・レンダリング・ステージ140は完了する。
【0042】
インターリーブ・複数スレッド・プロセッサー22は、複数スレッド処理を拡張可能かつ均質にすることができる。操作
【数1】

【0043】
は次の式で定義される。
【数2】

【0044】
図12を参照すると、単一の三角形Tがある4個のサブスクリーンのブロックが、ピクセル・レンダリングのために示される。操作
【数3】

【0045】
は、三角形Tのサブ分割された部分(i)を有する4個のサブスクリーン(i)各々に対して、サブスクリーンタスクS11、S12、S21、S22を処理する。したがって、操作
【数4】

【0046】
は、サブスクリーンS11に対する処理
【数5】

【0047】
に、サブスクリーンS12に対する処理
【数6】

【0048】
、サブスクリーンS21に対する処理
【数7】

【0049】
、およびサブスクリーンS22に対する処理
【数8】

【0050】
を加えた操作になる。全ての操作
【数9】

【0051】
が並列に実行されるとすると、ピクセル・レンダリング・ステージ140を実行する際の、全体としてのピーク性能は、一つのスレッドのピーク性能に使用している処理スレッドの数を乗じた値となる。サブスクリーンS11は、三角形Tのピクセルのサブ分割部分Tを有している。サブスクリーンS12は、三角形Tのピクセルのサブ分割部分Tを有している。サブスクリーンS21は、三角形Tのピクセルのサブ分割部分Tを有している。サブスクリーンS22は、三角形Tのピクセルのサブ分割部分Tを有している。図示の目的のために、スレッドの数は4である。したがって、この例における全体の性能は、一つの処理スレッドの性能に処理スレッドの数を乗じた値となる。このように、PRステージ140は、複数のサブスクリーンのピクセルを並列に処理する能力による、高速ピクセル・レンダリング・ステージである。
【0052】
さらに、MおよびNの数は、実際のアプリケーションでのプロファイリングの後に、適切な値に設定することができる。そのため、種々の状況に対して、さらに性能を最適化することができる。MおよびNの値の設定は、別の次元でのより大きな柔軟性(flexibility)とスケーラビリティ(scalability)を提供する。プロファイリングは、処理スレッドのローディングを識別すること(ティックカウント(tick count))または処理タスクの大きさや複雑さを識別することを含んでいる。プロファイリングは、さらに、共有メモリー24からのデータ転送量および共有メモリー24のメモリー容量に関連するパラメーター等の、他の構成要素についての評価を含むことができる。プロファイリングおよび調節により、フレーム・レート、スクリーンサイズ、ピクセル・レート、三角形のレート等は、MおよびNの値を変更または変化させ、および/または、PRステージ140において使用される処理スレッドPR1、PR2、…PRXの数を変化させるために使用され得るだろう。残っている処理スレッドPR1、PR2、…PRXは、同時に動作している他のアプリケーション、例えば、ゲーム−オーディオに使用される。
【0053】
次に図13を参照すると、3Dグラフィックス・パイプライン100に用いる、3Dグラフィックス・パイプライン方法200のフローチャートが示される。方法200は、頂点処理を実行し、頂点出力情報を生成するステップS202から開始する。ステップ202の次にステップ204が続き、そこでは頂点出力情報が重ね合わせて表示されている表示エリア18が、M×Nのサブスクリーンにサブ分割される。例えば、図8Aにおいて最も良く見られるように、三角形T1がサブスクリーンS11、S21、S22にまたがって展開していて、図8Bに示されるように、それぞれのサブ分割部分T11,T12,T1にサブ分割されている。このように、図8Bのタスクリスト135は、三角形T1,T2(説明目的のために三角形を2個だけを示した)のサブ分割された部分を示す。認識することができるように、三角形とは関連付けられていない、または、三角形のサブ分割した小さい部分を有する、頂点出力情報によるタスクリスト135におけるそれらのエントリは、より迅速に処理され得る。したがって、ピクセル・レンダリング・ステージ140が、表示エリア18に三角形の3Dイメージの標本を表示する前に、三角形のすべてのサブ分割部分の処理が完了している必要がある。
【0054】
ステップS204にステップS206が続く。そこでは、三角形のサブ部分を持っているか、持っていないサブスクリーンタスクが生成され、タスクリスト135に置かれる。ステップS206にステップS208,S208,およびS208が続く。ここで、Yは、ピクセル・レンダリング・ステージ140で使われている処理スレッドのセットにおける数(2またはより多くの)である。ステップS208では、第1の処理スレッド(以下、スレッド1と呼ぶ)は、(最初の)利用可能なサブスクリーンタスク(図8B)を得て、ステップS210でサブスクリーンタスクにおける各ピクセルを処理する(特に、タスクに関係する三角形または三角形の一部分の内部か内側にあると決定されたそれらのピクセル)。ステップS210にステップS212が続く。そこでは、タスクリスト135が終了であるかどうかを判定する。判定が、“YES”であれば、スレッド1による処理は終了する。その逆に、判定が“NO”である場合、ステップS212からステップS208に戻る。2番目の処理スレッド(以下、スレッド2と呼ぶ)の操作は、本質的にはスレッド1と同じである。スレッド2は、タスクリスト135における、次の利用可能なサブスクリーンタスクを得るか、または捕捉する。ステップS208にステップS210が続く。そこでは、サブスクリーンタスクを実行する。ステップS208にステップS210が続く。ステップS210にステップS212が続く。ステップS212において、タスクリスト135にさらにタスクがあるかどうかを判定する。ステップS212における判定が“NO”であると、この方法は終了する。一方に、判定が“YES”であると、ステップS212からステップS208に戻る。
【0055】
ステップS208は、スレッドYにより、Y番目のサブスクリーンタスクを得るか、捕捉する。ステップS208に、ステップS210が実行される。S210では、サブスクリーンタスクが処理される。ステップS210にステップS212が続く。そこでは、タスクリスト135にタスクがあるかどうかを判定する。判定が“NO”であると、この方法は終了する。反対に、判定が”YES”であると、ステップS212からステップS208に戻る。
【0056】
ステップS210,S210およびS210の間に実行される処理は、ラスター化、ブレンディング、テクスチャー・アプリケーション操作142、および陰面消去処理144である。特に図11に示すように、中央に点を有する正方形はピクセルPを示している。ピクセルPのうちいくつかは、三角形T11の内側に存在するが、一方、いくつかのピクセルは、T11の外側に存在する。頂点V1、V2、V3は、それぞれ、スムースシェーディングが付けられたカラー値を持つ。それぞれのピクセルPにおけるカラー値を計算するために線形補間が使用される。頂点情報V1、V2、V3は、三角形T11を形成するために、および、表示エリア18の内にこの三角形を位置決めするために使用される。正方形の中央に黒の点で示される、それぞれのピクセルの中心で、カラー値は計算される。種々のパラメーターは、Z方向の深さ(Z−depth)、アルファ(alpha)、フォッグ(fog)、テクスチャー(texture)を含んで、書き加えられる。
【0057】
再度、図2−4を参照する。この例では、6個のスレッド、PT1,PT2、PT3、PT4、PT5、PT6がある。最初のスレッドPT1は、VPステージ110を処理するのに使うことができる。2番目のスレッドPT2はSSDステージ130を処理するのに使うことができる。残りのスレッド、PT3、PT4、PT5、PT6は、タスクリスト135からのサブスクリーンタスクを並列に処理するのに使うことができる。ここでは、処理スレッドPT3は、最初に利用可能なサブスクリーンタスク1,1を得て、捕捉した最初のサブスクリーンタスク1,1のピクセルを処理するだろう。処理スレッドPT4は、次の(2番目の)利用可能なサブスクリーンタスク1,2を得て、捕捉したサブスクリーンタスク1,2のピクセルを処理するだろう。処理スレッドPT5は、次の(3番目の)利用可能なサブスクリーンタスク1,3(ここでは、Mは3より大きいものと仮定する。)を得て、捕捉したサブスクリーンタスク1,3のピクセルを処理するだろう。
【0058】
Mの値を4とすると、処理スレッドPT6は、次の(4番目の)実行可能なサブスクリーンタスク1,Mを得て、捕捉したサブスクリーンタスク1,Mのピクセルを処理するだろう。処理スレッド、PT3、PT4、PT5、PT6が、それらの各サブスクリーンタスクを終了すると、タスクリスト135が空になるまで追加のサブスクリーンタスクは捕捉され、並列に処理されるだろう。
【0059】
一つの処理スレッドが3Mピクセル/秒のレンダリングを実行する場合、一つのピクセルの処理をするのに、およそ30個の命令パケットを必要とすることになる。ピクセル1個について平均100命令である。6個中2個の処理スレッドをVPステージ110およびSSDステージ130に割り当てて、残りの4個の処理スレッドをピクセル・レンダリングの実行に割り当てると、専用ハードウエアによるグラフィックス・アクセラレーターを用いた場合の4倍の性能(12Mピクセル/秒)となるVGAの分解能をサポートするだろう。
【0060】
全ての処理スレッドが同じメモリー24を共有しているので、処理スレッドは、ミューテックス・ツールを使って、非常に効率良く(重複せずに)、入力三角形データの同じセット(サブスクリーンタスク)をすべて処理することができる。
【0061】
ピクセル・レンダリング・ステージ140は、3Dグラフィックス・パイプライン100の中で、最後のパイプライン・ステージである。このPRステージ140は入力三角形リストを処理して3Dグラフィックス・イメージのピクセル表示を生成する。以上で説明した、3Dグラフィックス・パイプライン100は、PRステージ140の性能(ピクセル/秒)を改善する。インターリーブ・複数スレッド・プロセッサー22は、タスクリスト135を処理するために並列に動作する処理スレッド数の倍数だけ、性能を向上させる。
【0062】
3Dグラフィックス・パイプライン・アーキテクチャーの利点は、MおよびNの値の調節を可能にする、柔軟性にある。MおよびNの値を大きくすることにより、ピクセル・レンダリング・ステージ140における、MIPSの要求値を小さくする。それぞれのサブスクリーンが小さくなるので、レンダリング・タスクは簡単になる。この結果、複数個の処理スレッドの性能を向上することを助長する。この処理スレッドは、オーディオのような他の並列処理のアプリケーションにも使用することができる。
【0063】
容易に理解することができるように、また、ここに開示した、3Dグラフィックス・イメージのレンダリングをソフトウエアによる構成は、専用のグラフィックス・アクセラレーターを用いたハードウエアによる構成よりも、高い性能を持つ。グラフィックス・アクセラレーターのハードウエア構成と比較して、ここに説明した実施例は、柔軟性があり、かつ、拡張性がある。実施例は柔軟であるので、新しい機能を追加するためにソフトウエアコードを拡張すること、高水準の3Dグラフィックス規格(例えば、OpenGL ES 1.0,1.1 ...)をサポートすること、および、種々のアプリケーション構成やカスタム要求をサポートすることが容易である。実施例の拡張性のある特徴は、種々の性能要求(フレーム・レート、スクリーンサイズ、ピクセルのレート、三角形のレート等)を満たすことが可能であり、シリコンコストおよびシステムの消費電力を最適化することができる。
【0064】
本実施例は、さらに、同じ性能を得るために、クロックスピードが、数GHzのハイエンド・プロセッサーを使わずに、低価格の低消費電力のプロセッサーを使ったソフトウエア構成の使用も可能にする。
【0065】
典型的な実施例において、ここで説明されたたプロセスや方法は、ハードウエア、ソフトウエア、ファームウエア、またはこれらの任意の組み合わせにより、コンピューターで実行可能な1つ以上の命令から構成されたコンピューター・プログラム製品の形で実現される。ソフトウエアで構成された場合には、コンピューター・プログラム製品は、コンピューター記憶媒体かコンピューター通信媒体を含むコンピューター可読媒体上に記憶されるか、伝送され得る。
【0066】
“コンピューター記憶媒体”という言葉は、ここにおいては、方法をコンピューターで実行させる命令を、記憶するために使われる、任意のメディアを指す。限定ではなく一例として、コンピューター記憶媒体は、電子記憶素子(例えば、RAM、ROM、EEPROM等)、光記憶素子(例えば、コンパクト・ディスク(CD)、ディジタル多用途ディスク(DVD)等)、磁気記憶素子(例えば、ハード・ドライブ、フラッシュ・ドライブ、テープ・ドライブ等)やその他のコンピューター・プログラム製品を記憶するのに適合した記憶素子を含む固体記憶素子、およびこのような記憶素子の組み合わせを含み得る。
【0067】
“コンピューター通信媒体”という用語は、ここにおいては、例えば、変調された搬送波、光信号、DCまたはAC電流等の手段を使用して、ある場所から他の場所にコンピューター・プログラム製品を伝送するのに適合した、任意の物理的インターフェイスを表す。限定ではなく一例として、コンピューター通信媒体は、ツイストペア線、プリント配線ケーブル、フラットケーブル、同軸ケーブル、光ファイバーケーブル、ディジタル加入者線(digital subscriber line:DSL)やその他の有線および無線、光の直列/並列インターフェイスまたはそれらの組み合わせを含み得る。
【0068】
開示された実施例についての以上の説明は、当業者が、開示されたものを作成したり、利用したりすることができるように提供されている。実施例に関する種々の変更は、当業者とっては、容易に類推できるものであろう。ここに定義されている一般的な原理は、この開示の精神や範囲から乖離することなく、他の実施例にも適用される得るものである。以上のように、この開示は、ここに記載された実施例に限定されるものではなく、ここに開示されている、原理と新規な特徴と矛盾しない最も広い範囲に権利を与えられるべきものである。

【特許請求の範囲】
【請求項1】
三次元(3D)グラフィックス画像に用いる頂点情報を出力する機能を有する頂点処理ステージと、
サブスクリーン・タスクリストを構成しているサブスクリーンに、出力頂点情報を重ね合わせた表示エリアのピクセルを分割する機能を有する表示のサブ分割ステージと、
サブスクリーン・タスクリストにおける複数のサブスクリーンタスクを並列にかつ独立に処理する機能を有するピクセル・レンダリング・ステージと、
を備える三次元(3D)グラフィックス・パイプライン。
【請求項2】
前記ピクセル・レンダリング・ステージは、前記複数のサブスクリーンタスクのそれぞれの一つを並列かつ独立に処理する1セットの個別処理スレッドを有するインターリーブ複数スレッド・プロセッサーを使用する、請求項1に記載のパイプライン。
【請求項3】
前記インターリーブ複数スレッド・プロセッサーは、前記頂点情報を処理する処理スレッドを含む、請求項2に記載のパイプライン。
【請求項4】
前記表示のサブ分割ステージは、前記頂点情報を処理するために使用する処理スレッドを共有する請求項3に記載のパイプライン。
【請求項5】
前記表示のサブ分割ステージは他の処理スレッドを使用する、請求項3に記載のパイプライン。
【請求項6】
前記ピクセル・レンダリング・ステージは、前記3Dグラフィックス画像のビットマップを生成するために、ラスター化、ブレンディング、テクスチャー処理、および陰面消去操作を含む、請求項1に記載のパイプライン。
【請求項7】
前記表示エリアは、携帯情報端末(PDA)、パームパイロット(palm pilot)、移動電話、携帯電話、衛星電話、ラップトップ、ノートブック、およびタブレット型PCのうちの1つと関連している、請求項1に記載のパイプライン。
【請求項8】
三次元(3D)グラフィックス画像用の頂点情報を出力するために頂点オブジェクトの頂点処理を行うことと、
表示エリアに前記出力頂点情報を重ね合わせることと、
タスクリストにサブスクリーンタスクを生成するために、ピクセルを含んでいる前記表示エリアを複数個のサブスクリーンに分割することと、
前記タスクリストにおける複数個のサブスクリーンタスクのそれらのピクセルに並列かつ独立にピクセル・レンダリングを行うこと、
を含む処理方法。
【請求項9】
前記ピクセル・レンダリングのステップは、
インターリーブ複数スレッド・プロセッサーの処理スレッドにより前記タスクリストにおけるそれぞれ一つの利用可能なサブスクリーンタスクを捕捉しロックすることと、
捕捉した場合には前記それぞれ一つのサブスクリーンタスクにおけるそれらのピクセルを独立に処理することと、
前記捕捉とロックのステップ、および引き続いて利用可能となるサブスクリーンタスクそれぞれについてのインターリーブ複数スレッド・プロセッサーの他の処理スレッドによる処理ステップをくり返すこと、
のステップを含む、請求項8に記載の方法。
【請求項10】
前記頂点処理のステップは、
前記頂点情報出力を生成するために、前記インターリーブ複数スレッド・プロセッサーの他の処理スレッドにより、前記頂点オブジェクトを処理すること、
のステップを含む、請求項9に記載の方法。
【請求項11】
前記分割するステップは、前記他の処理スレッドを、前記頂点処理ステップと共有するステップを含む、請求項10に記載の方法。
【請求項12】
前記ピクセル・レンダリング・ステップは、前記3Dグラフィックス画像のビットマップを生成するために、前記タスクリストが空になるまで、各々のサブスクリーンタスクのそれらのピクセルのラスター化、ブレンディング、およびテクスチャー処理を行うステップを含む、請求項8に記載の方法。
【請求項13】
前記ピクセル・レンダリング・ステップは、携帯情報端末(PDA)、パームパイロット(palm pilot)、移動電話、携帯電話、衛星電話、ラップトップ、ノート、およびタブレット型PCのうちの一つに関連する前記表示エリアにおける表示のためのビットマップを生成するステップを含む、請求項8に記載の方法。
【請求項14】
三次元(3D)グラフィックス画像用の頂点出力情報を生成する頂点処理と、
タスクリストにおける、ピクセルを含むサブスクリーンタスクを生成するように、重ね合わせた頂点出力情報を有する表示エリアをサブスクリーンに分割することと、
複数のサブスクリーンタスクのピクセルを並列かつ独立に処理するようにピクセル・レンダリングを行うこと、
をコンピューターに実行させる命令を含むコンピューター可読媒体を含む、コンピューター・プログラム製品。
【請求項15】
前記ピクセル・レンダリングを行う命令は、
インターリーブ・複数スレッド・プロセッサーの一つの処理スレッドにより、前記タスクリストにおける、それぞれ一つの利用可能なサブスクリーンタスクを捕捉およびロックすることと、
前記処理スレッドにより捕捉されているとき、前記それぞれ一つのサブスクリーンタスクのそれらのピクセルを独立して処理することと、
捕捉とロック、および引き続いて利用可能となるサブスクリーンタスクそれぞれについてインターリーブ・複数スレッド・プロセッサーの他のスレッドによる処理を行うように操作可能な命令をくり返すこと、
を含む、請求項14に記載のコンピューター・プログラム製品。
【請求項16】
前記頂点処理のための命令は、
前記頂点情報出力を生成するために、前記インターリーブ・複数スレッド・プロセッサーのもう一つの処理スレッドを使用して頂点処理するように、
操作可能な命令を含む、請求項15に記載のコンピューター・プログラム製品。
【請求項17】
前記分割するための命令は、前記もう一つの処理スレッドを頂点処理のための命令と共有する命令を含む、請求項16に記載のコンピューター・プログラム製品。
【請求項18】
前記コンピューター可読媒体は、無線通信デバイスの共有プロセッサー可読媒体を含む、請求項17に記載のコンピューター・プログラム製品。
【請求項19】
前記ピクセル・レンダリングを行うための命令は、3Dグラフィックス画像のビットマップを生成するために、それぞれのサブスクリーンタスクにおけるピクセルに対してラスター化、ブレンディング、およびテクスチャー処理を行う命令を含む、請求項14に記載のコンピューター・プログラム製品。
【請求項20】
複数の処理スレッドを有するディジタル信号処理プロセッサーと、
前記複数の処理スレッドによりアクセスされる共有メモリーと、
頂点出力情報を重ね合わせた表示エリアのピクセルの一部分を含むサブスクリーンタスクであって、前記共有メモリーに保存されたサブスクリーン・タスクリスト内の複数のサブスクリーンタスクにおけるピクセルを並列かつ独立に処理することにより、専用のグラフィックス・アクセラレーターを使わずに、ピクセル・レンダリングを可能とした処理手段、
を備える無線通信装置。
【請求項21】
前記装置は、携帯情報端末(PDA)、パームパイロット(palm pilot)、移動電話、携帯電話、衛星電話、ラップトップ、ノートブック、およびタブレット型PCうちの一つを含む、請求項20に記載の装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公表番号】特表2010−515122(P2010−515122A)
【公表日】平成22年5月6日(2010.5.6)
【国際特許分類】
【出願番号】特願2009−543223(P2009−543223)
【出願日】平成19年12月20日(2007.12.20)
【国際出願番号】PCT/US2007/088386
【国際公開番号】WO2008/079984
【国際公開日】平成20年7月3日(2008.7.3)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】