3次元グラフィックスパイプラインの自動負荷分散
デバイスは、3次元(3D)グラフィックスパイプラインの頂点処理ステージ、サブ画面分割ステージおよびピクセルレンダリングステージを処理するためのプロセッサを有する。プロセッサは、ピクセルレンダリングステージのための処理を他のステージより優先させることによって3Dグラフィックスパイプラインの作業負荷を分散する処理スレッドを含む。並行に独立して動作する各処理スレッドはサブ画面タスクのタスクリストにおけるタスクのレベルを検査する。レベルがしきい値より下にある、空である、またはサブ画面タスクがすべてロックされている場合、処理スレッドは頂点処理ステージにループする。そうでない場合、処理スレッドはピクセルレンダリングステージ中にサブ画面タスクを処理する。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に画像処理に関し、より詳しくは、インタリーブ型マルチスレッドプロセッサによって処理される高速ピクセルレンダリング処理のための3次元(3D)グラフィックスパイプラインを負荷分散するための技術に関する。
【背景技術】
【0002】
3Dオブジェクトに関する情報を表示可能なビットマップに変換することは、ピクセルレンダリングとして知られており、かなりのメモリと処理能力とを必要とする。過去において、3Dグラフィックスはパワフルなワークステーションにおいてのみ利用可能であったが、現在では、3Dグラフィックスアクセラレータはパーソナルコンピュータ(PC)中で一般に見られる。ハードウェアグラフィックスアクセラレータは、メモリ(たとえば命令ランダムアクセスメモリ(IRAM))と、3次元レンダリング演算の多くを処理するための専用マイクロプロセッサとを含む。デスクトップのためのOpen GL(登録商標)(オープングラフィックスライブラリ)は、3Dおよび2Dコンピュータグラフィックスを作成する書込みアプリケーションのためのアプリケーションプログラミングインタフェース(API)を定義している。APIは、プリミティブから複雑な3次元場面を描画するための何百もの関数を含む。
【0003】
OpenGL(登録商標)ESは、ソフトウェアとグラフィックスの間のインタフェースを作成するデスクトップOpenGL(登録商標)のサブセットである。3Dグラフィックスエンジン(OpenGL(登録商標)ES)は、概して2つの部分に実装される。第1の部分は、頂点を処理する関数を含んでおり、デジタル信号処理(DSP)ファームウェアに通常実装される。第2の部分は、ピクセルレンダリングのための関数を含んでおり、専用ハードウェアグラフィックスアクセラレータに実装される。ピクセルレンダリングを実行する第2の部分は、従来の3Dグラフィックスエンジンの最後のパイプラインステージである。最後のパイプラインステージは、グラフィックスイメージのピクセル表現を作成するために入力三角形集合を処理する。しかしながら、最後のパイプラインステージは通常、エンジンにおける全3Dグラフィックスパイプラインのパフォーマンスボトルネックである。したがって、ピクセルレンダリングのための最後のパイプラインステージのパフォーマンス(ピクセル毎秒)を高めることは非常に重要である。
【0004】
通常、ピクセルレンダリング演算の間、各入力三角形は、三角形が入力されるのと同じ順序で順次処理される必要がある。したがって、マルチスレッドを有するプロセッサは、入力三角形を処理するためにインタリーブ型並行処理を利用することを防止される。
【0005】
さらにまた、ハードウェアグラフィックスアクセラレータは、一般に柔軟ではなく、または容易にスケーラブルではない。したがって、ハードウェアグラフィックスアクセラレータは、新機能を容易に追加し、(OpenGL(登録商標)ES 1.0、1.1...などの)3Dグラフィックス規格のより高いバージョンをサポートし、様々なアプリケーション構成をサポートし、要件をカスタマイズすることができない。さらにまた、ハードウェアグラフィックスアクセラレータは、シリコンコストおよびシステム電源消費を最適化するために、様々なパフォーマンス要件(フレーム率、画面サイズ、ピクセルレート、三角形描画率など)のために容易に基準化されない。
【0006】
容易にわかるように、専用ハードウェアグラフィックスアクセラレータは、移動電話またはセルラ電話など小型携帯コンピューティングデバイス中でシリコン領域を占有する。したがって、専用ハードウェアグラフィックスアクセラレータは、使用される専用ハードウェアグラフィックスアクセラレータおよびIRAMの包含によって携帯コンピューティングデバイスの総コストを増加させる。専用ハードウェアグラフィックスアクセラレータの使用はまた、オーバヘッドを追加し電力を消費するDSPによるデータトラフィックを生じる。
【0007】
したがって、当技術分野では、より速いピクセルレンダリング処理を提供するために3次元(3D)グラフィックスパイプラインを負荷分散する技術が必要である。
【発明の概要】
【0008】
専用ハードウェアグラフィックスアクセラレータなしでより速いピクセルレンダリング処理を提供する3次元(3D)グラフィックスパイプラインの技術を、本明細書で説明する。一態様では、複数の処理スレッドを備えるプロセッサが実装される。各処理スレッドは、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを決定する。サブ画面タスクが利用可能である場合、各処理スレッドはサブ画面タスク上でピクセルレンダリング演算をさらに実行する。しかしながら、サブ画面タスクが利用できない場合、各処理スレッドは3次元(3D)グラフィックスパイプラインの作業負荷を分散するために頂点処理演算を実行する。
【0009】
別の態様では、複数の処理スレッドを有するプロセッサを備える無線デバイスが実装される。データがピクセルレンダリング演算に利用可能であるとき、各処理スレッドは頂点処理演算より3次元グラフィックスパイプラインのピクセルレンダリング演算を優先させる。プロセッサはメモリに結合される。
【0010】
本開示の様々な態様および実施形態について以下でさらに詳細に説明する。
【0011】
本開示の態様および実施形態は、同様の参照文字が全体を通じて対応して識別される図面と関連して、以下に示す詳細な説明からより明らかになろう。
【図面の簡単な説明】
【0012】
【図1】3D画像化装置の全般的ブロック図を示す図。
【図2】共用メモリと接続されるインタリーブ型マルチスレッドプロセッサを示す図。
【図3】各スレッドの詳細が示されたインタリーブ型マルチスレッドプロセッサの詳細を示す図。
【図4】実行時間に対する、6つのスレッドを有するマルチスレッドプロセッサによって処理されるインタリーブ型命令のコアパイプラインのグラフを示す図。
【図5】2つのスレッドによって処理される2つの並列命令セットを示す図。
【図6】例示的3D画像化装置における3Dグラフィックスパイプラインの全般的流れ図を示す図。
【図7】3Dグラフィックスパイプラインのプロセスの全般的ブロック図を示す図。
【図8】(A)は表示空間がM×Nグリッド(M>1およびN>1)に細分されていることを示す図、(B)は図8(A)の細分された表示空間を処理するためのタスクリストを示す図。
【図9】表示空間がM×Nグリッド(M=1およびN>1)に細分されていることを示す図。
【図10】表示空間がM×Nグリッド(M>1およびN=1)に細分されていることを示す図。
【図11】複数のピクセルを有する頂点座標によって画定される三角形を示す図。
【図12】1セットの4細分領域に細分された領域において三角形を処理するための命令演算のグラフィック表現を示す図。
【図13】マルチスレッドプロセッサを用いる3Dグラフィックスパイプライン方法の流れ図を示す図。
【図14】共用メモリにおけるパイプラインキューの全般的ブロック図を示す図。
【図15】3Dグラフィックスパイプラインをスレッド当たりベースで負荷分散するための方法の流れ図を示す図。
【発明を実施するための形態】
【0013】
「例示的」という語は、本明細書では「実施例、例または説明として役立つこと」を意味するために用いられる。本明細書で「例示的」として説明されるいかなる実施形態または設計も、必ずしも他の実施形態または設計より好ましいまたは有利であると解釈すべきではない。
【0014】
多くのゲームアプリケーションは、2次元(2D)空間(たとえば、表示画面)において3Dオブジェクトを表示する3次元(3D)グラフィックスアプリケーションを必要とする。2Dグラフィックスにおけるピクセルは位置、色および輝度のプロパティを有するが、3Dピクセルは、点が想像上のZ軸上のどこにあるかを指示する深度プロパティを追加する。各ピクセルがそれ自体の深度値を有する3Dピクセルが結合されるにつれて、テクスチャが作り出される。
【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)、および移動、セルラまたは衛星電話、ラップトップ、ノートブック、タブレット型PC、Palm Pilot、無線通信デバイスなどのうちの1つを含むことができる。
【0017】
次に図2〜図5を参照すると、例示的な実施形態では、DSP20はインタリーブ型マルチスレッドプロセッサ22を含む。インタリーブ型マルチスレッドプロセッサ22は、複数の処理スレッド(PT)PT1、PT2、...PTXを有する。各処理スレッド(PT)PT1、PT2、...PTXは、共用メモリ24として表される同じメモリを共用する。各処理スレッドPT1、PT2、...PTXは、それぞれのワンセットの命令261...26X、コア271...27X(処理装置)およびレジスタファイル281...28Xを含む。各コア271...27Xの出力は、共用メモリ24と通信する。命令261...26Xは、下記に定める演算、および3D画像化装置10のマルチメディアなどの機能セットを実行するための他の演算を実行するプログラムコードを含む。コア271...27Xは、命令261...26Xを実行する。
【0018】
レジスタファイル281...28Xは1組の汎用レジスタであり、DSP20またはマイクロプロセッサの中心のステージである。これらのレジスタファイル281...28Xは、すべてのオペランド(通常、メモリからロードされる)を保持し、すなわち、共用メモリ24に結果を格納する前に(算術演算、論理演算など)すべての演算からのすべての結果を保持する。
【0019】
一部のDSPアーキテクチャは4つのスレッドを有する。とはいえ、DSP20は、限定はしないが、並行して動作する6つの処理スレッドなど、4つよりも多いスレッドを有することができる。例示的な実施形態では、各スレッド(PT)PT1、PT2、...PTXは、1秒当たり100,000,000個の命令パケット(MIPS)を並行して提供する。各命令パケットは、4つの命令、2つの命令(Supスカラ)またはただ1つの命令であり得る。しかしながら、DSP20のアーキテクチャが命令間データの依存性によって生じる非効率性を取り除くので、1つの命令は効率のためには推奨されない。
【0020】
スレッドまたはマルチスレッドという用語は、並行タスクの実行を説明するために使用される。単一パスの実行の代わりに、プログラム(演算)は、同時に実行する複数の実行スレッドに分割できる。例示的な実施形態では、開始スレッドがあり、これは関数呼出し(または命令)を必要とし、通常少なくとも2つの引数、すなわち(1)開始命令のアドレス、および(2)コンテキスト引数を必要とする。スレッドが動作および/または終了している間、このスレッドは、他の処理スレッドに関して2つの基本的なジョブを行うこと、すなわち(1)共用リソースを取得し、他のスレッドがそのようなリソースを使用するのを阻止すること、および(2)メッセージ(たとえば完了、準備完了など)を他のスレッドに安全に送信することが可能である。
【0021】
次に図4を参照すると、インタリーブ型マルチスレッドパラレル処理のグラフが示されている。この例では、6つの処理スレッドPT1、PT2、PT3、PT4、PT5およびPT6がある。第1の処理スレッドPT1は第1の命令セット1を処理する。これはコアパイプライン用の実行時間線の第1の(最上)行によって表される。コアパイプラインは、コア271、...27Xによって表される。第1の命令セット1が第1の処理スレッドPT1によって処理される間、第2の処理スレッドPT2はその第1の命令セット1を処理する。これは実行時間線の第2の行によって表される。このように、第1の命令セット1は並行して処理されている。
【0022】
第1および第2の処理スレッドPT1およびPT2がこれらの第1の命令セット1を処理する間に、第3の処理スレッドPT3はその第1の命令セットを処理する。これはコアパイプライン用の実行時間線の第3の行によって表される。第4の処理スレッドPT4はその第1の命令セット1を処理する。一方、第1、第2および第3の処理スレッドPT1、PT2およびPT3は、それらの関連する第1の命令セット1を処理し続ける。これはコアパイプライン用の実行時間線の第4の行によって表される。
【0023】
第1、第2、第3および第4の処理スレッドPT1、PT2、PT3およびPT4がそれらの第1の命令セット1を処理し続ける間に、第5の処理スレッドPT5はその第1の命令セット1を処理する。これはコアパイプライン用の実行時間線の第5の行によって表される。第1、第2、第3、第4および第5の処理スレッドPT1、PT2、PT3、PT4およびPT5がそれらの第1の命令セット1を処理し続ける間に、第6の処理スレッドPT6はその第1の命令セット1を処理する。これはコアパイプライン用の実行時間線の第6の行によって表される。このように、処理スレッドによる命令の処理はインタリーブされる。
【0024】
次に図4の第7の(最下)行を参照して、第1の処理スレッドPT1がその第1の命令セット1を完了したと仮定すると、第2、第3、第4、第5および第6の処理スレッドPT2、PT3、PT4、PT5およびPT6がそれらの第1の命令セット1の処理を続ける間、第1の処理スレッドPT1は第2の命令セット2を処理し始める。したがって、処理スレッドPT1、PT2、...PTXの各々の処理は並行して行われ、インタリーブされる。
【0025】
すべての処理スレッドのインタリーブ型処理を説明することは差し控える。したがって、説明のため、命令261および262を使用するインタリーブ型処理がミューテックスに関係するので、これを図5に示す。ミューテックスは、一度にただ1つの処理スレッドによって「所有される」ツールである。処理スレッドは、ミューテックスを取得しようとするとき、ミューテックスをLOCKする。しかしながら、ミューテックスがすでにLOCKされている場合、その処理スレッドは停止する。所有スレッドがミューテックスをUNLOCKすると、停止されたスレッドは再開され、ミューテックスのオーナー権を取得する。このプロセスを図5に示す。
【0026】
第1の処理スレッドPT1から開始して、命令261はステップS22Aから始まり、ここでノンクリティカルコードが実行される。ステップS22Aの後にステップS24Aが続き、そこで第1の処理スレッドPT1がLOCKミューテックス1命令を実行する(ミューテックス1はUNLOCKされていると仮定する)。したがって、第1の処理スレッドPT1はここでミューテックス1を所有する。ステップS24Aの後にステップS26Aが続き、そこでクリティカルコードが実行される。ステップS26Aの後にステップS28Aが続き、そこでクリティカルコードが完了した後に第1のスレッドPT1がUNLOCKミューテックス1命令を実行する。その後、ステップS30Aにおいて、第1の処理スレッドPT1はノンクリティカルコードの実行を再開する。
【0027】
第1の処理スレッドPT1と並行して、第2の処理スレッドPT2は、ステップS22Bにおいて命令262を開始し、ステップS22Bではノンクリティカルコードが実行される。ステップS22Bの後にステップS24Bが続き、そこで第2の処理スレッドPT2がステップS24Bにおいてミューテックス1をLOCKすることを望む。しかしながら、ミューテックス1はLOCKED状態にある。したがって、第2の処理スレッドPT2の演算は、第1の処理スレッドPT1がステップS28Aにおいてミューテックス1をUNLOCKするまで停止される。次いでステップ26Bが始まり、ここでクリティカルコードを実行することができる。ステップS26Bの後にステップS28Bが続き、そこでクリティカルコードが完了し、第2のスレッドPT2がUNLOCKミューテックス1命令を実行する。その後、他の命令が続くことができる。
【0028】
ミューテックスツールまたは別のトークンツールは、必要に応じてのみ、様々な処理スレッドにおけるクリティカルセクションの直列実行を保証するために使用される。これは直列化の実行でもあり、これは、一定のコードがそれが他のスレッドによるコードの実行と衝突する可能性があるときには並行して実行できないことを意味する。共用メモリ24(共用リソース)が使用されるので、ミューテックスツールは有用である。
【0029】
次に図6および図7を参照すると、全体的に100で表された3Dグラフィックスパイプラインの全般的流れおよびブロック図の実施形態が示されている。3Dグラフィックスパイプライン100は、画面16の表示領域18における3D表現の全タスクを概して3つのパイプラインステージ、すなわち、頂点処理(VP)ステージ110、画面細分(SSD)ステージ130およびピクセルレンダリング(PR)ステージ140に分割する。動作中、頂点処理(VP)ステージ110は、OpenGL(登録商標)またはOpenGL(登録商標)ESにおいて現在実装されている関数または関数のサブセットのすべてを含み、デジタル信号プロセッサ(DSP)20によって処理される。画面16は3Dグラフィックスパイプライン100の一部ではないので、画面16に向かう線はファントム線で示されている。
【0030】
VPステージ110は、モデルビュー変換演算112、射影演算114、選別演算116、照明およびカラーリング演算118、プリミティブアセンブリ演算120、クリッピング(すなわちユーザ定義のクリッピング)演算122、および透視分割およびビューポート演算124を含む。VPステージ110のこれらの演算の各々はOpenGL(登録商標)またはOpenGL(登録商標)ESにおいて明確に定義されている。
【0031】
一般に、モデルビュー変換演算112は、オブジェクトモデルを所望の位置および方向に置く数学的演算を使用する。射影演算114は、近いものを大きくし、遠いものより小さくする数学的演算を使用する。オクルージョンは遠いオブジェクトの前の近いオブジェクトを描画する。選別およびクリッピング演算116および122は見えないものを破棄する。照明演算118は表面上のライトの効果を算出する。
【0032】
例示的な実施形態では、VPステージ110に1つの処理スレッドを実装することができる(図2および図3)。頂点出力情報は、三角形および表示領域16におけるその位置を定めるための頂点情報を含む。頂点出力情報は表示領域16の上で重ね合わされ、表示領域16のピクセルはOpenGL(登録商標)、OpenGL(登録商標)ESまたは他のグラフィックスライブラリによる三角形を定めるために頂点出力情報を含む。
【0033】
画面細分(SSD)ステージ130は、表示領域18をM×Nのサブ画面に分ける画面細分演算132を含む。表示領域18は、頂点出力情報が重ね合わされた複数のピクセルP(図11)から成り立っている。VPステージ110からの頂点情報は、表示領域18における重ね合わせのための三角形(たとえば、図8(A)のT1およびT2)を画定する頂点情報(たとえば図11のV1、V2およびV3)を提供する。頂点情報は頂点座標およびエッジ情報を含むことができる。一般に、各三角形の頂点出力情報は、閉じた区域を定めるためのただ1セットの数学的記述である。この数学的記述のセットは共用メモリ24の中に格納され、その結果、各処理スレッド(PT1、PT2、...PTX)は、数学的記述のセットを使用することができ、それ自体のサブ画面タスクの範囲内で各ピクセルP(図11)を計算し、ピクセルが三角形内にあるかどうかを決定することができる。
【0034】
図8(A)は、表示領域18の上に重ね合わされた頂点出力情報を示す。画面細分(SSD)ステージ130中に、表示領域18は、図8(B)において最もよくわかるように、表示領域18を構成するピクセルをM×Nサブ画面タスクに分割またはグループ化することによって細分される。M×Nのサブ画面タスクはタスクリスト135に格納される(図6および図8(B))。M×Nのサブ画面タスクは、共用メモリ24の中に格納されたM×Nの独立タスクである。SSDステージ130の演算は、VPステージ110中に使用される処理スレッドとは別の処理スレッドを使用して実施できる。あるいは、SSDステージ130の演算を同じ処理スレッド上でVPステージ110の演算と結合することができる。
【0035】
図8(A)に示す実施例では、表示領域18はM×Nのサブ画面(ここでM>1およびN>1)に分割され、1つのグリッドを作成する。説明のために、図9は、M×Nのサブ画面(ここでM=1およびN>1)に分割された表示領域18’を示す。矢印は走査あるいはワークフローの方向を示す。図10を参照すると、表示領域18”はM×Nのサブ画面(ここでM>1およびN=1)に分割されている。したがって、表示領域18”のサブ画面は一連のカラムを形成する。
【0036】
ピクセルレンダリング(PR)ステージ140は、ラスタ化、ブレンディング、およびテクスチャアプリケーションの演算142および陰面除去演算144を含む。とはいえ、ピクセルレンダリングステージ140は、OpenGL(登録商標)またはOpenGL(登録商標)ESによって定義される他の演算を含むことができる。PRステージ140は、VPステージ110からの3Dオブジェクトに関する情報を、画面16の表示領域18に表示できるビットマップに変換する。PRステージ140は、入力三角形セットを処理して、3Dグラフィックスイメージのピクセル表現を生成する。
【0037】
典型的なピクセルレンダリング(PR)ステージは最初に頂点出力情報のリストから三角形をとることができる。次に、PRステージは、表示領域からピクセルをとり、三角形に対してピクセルを計算し、ピクセルが三角形内にあるかどうかを確かめる。評価中のピクセルが三角形内にある場合、PRステージは三角形から対応する色によるピクセルのカラーリングを実施することができる。評価中のピクセルが三角形内にない場合、ピクセルはスキップされる。次いでPRステージは表示領域18における次のピクセルを取り上げるであろう。すべてのピクセルが三角形について評価または処理されるまで、PRステージは表示領域18における他のピクセルについて上記のプロセスを繰り返す。したがって、ピクセルは一度に1つ処理される。
【0038】
次いで、典型的なPRステージは、頂点出力情報リストにおける次の三角形へ移動して、現在の三角形についてのピクセルの評価を繰り返すであろう。
【0039】
PRステージ140は複数のサブ画面またはサブ画面タスクによって同様な方法で働く。違いは、サブ画面が評価または処理すべきより少ないピクセル数を有し、複数のサブ画面が処理スレッド(PT1、PT2、...PTX)によってそれぞれ独立して並行に処理され得ることである。したがって、PRステージ140の処理時間は典型的なPRステージよりも非常に高速であるが、その理由は、より少ないピクセルが各サブ画面にあり、複数のサブ画面を並行で(各処理スレッドはそれぞれの1つのサブ画面におけるピクセルの処理に向かって独立して働き)処理できることにある。
【0040】
例示的な実施形態では、PRステージ140は、インタリーブ型マルチスレッドプロセッサ22の1セットの複数処理スレッドPR1、PR2、...PRXを使用して処理される。PRステージ140のために使用されるこのセットにおけるスレッドの数は、Xのスレッドの最大値を有する2またはそれ以上であってもよい。
【0041】
実施中は、ピクセルレンダリングステージ140に割り当てられた各処理スレッドPR1、PR2、...PRXは、タスクリスト135から利用可能なサブ画面タスクを捕らえて、タスクリスト135からそれを取り除く。この1セットの処理スレッドPR1、PR2、...PRXは、インタリーブ型並列演算において、入力三角形を処理し、サブ画面におけるピクセルをレンダリングする(入力三角形情報をサブ画面における表示のためにビットマップに変換する)。それぞれの1つの処理スレッドが、捕らえられたサブ画面タスクのためのピクセルレンダリング演算を完了した後、処理スレッドはタスクリスト135における次の利用可能なサブ画面タスクへ移動する。この演算は、すべてのサブ画面が処理され、ピクセルレンダリングステージ140が完了するまで、繰り返される。
【0042】
図1、図2および図12を参照すると、インタリーブ型マルチスレッドプロセッサ22はマルチスレッド処理がスケーラブルで均一であることを可能にする。演算
【数1】
【0043】
は、
【数2】
【0044】
によって定義できる。
【0045】
図12には、単一の三角形Tを有する4つのサブ画面の1ブロックがピクセルレンダリングのために示されている。演算
【数3】
【0046】
は、各々が三角形Tの細分された部分(i)を有する4つの(i)サブ画面として表現されるサブ画面タスクS11、S12、S21およびS22を処理する。したがって、演算
【数4】
【0047】
は、サブ画面S11の演算
【数5】
【0048】
プラスサブ画面S12の演算
【数6】
【0049】
プラスサブ画面S21の演算
【数7】
【0050】
プラスサブ画面S22の演算
【数8】
【0051】
に等しい。演算
【数9】
【0052】
のすべてが並行に処理される場合、したがって、ピクセルレンダリングステージ140を処理するための全体的ピークパフォーマンスは、処理スレッドのためのピークパフォーマンスに使用された処理スレッドの数を乗算したものである。サブ画面S11は、三角形Tのピクセルの細分された部分T1を有する。サブ画面S12は、三角形Tのピクセルの細分された部分T2を有する。サブ画面S21は、三角形Tのピクセルの細分された部分T3を有する。サブ画面S22は、三角形Tのピクセルの細分された部分T4を有する。説明のために、スレッドの数は4である。したがって、この例では、パフォーマンスは、1つの処理スレッドのためのパフォーマンスに処理スレッドの数を乗算したものになるであろう。したがって、PRステージ140は、複数のサブ画面からのピクセルを並行で処理するためのその能力による高速ピクセルレンダリングステージである。
【0053】
加えて、MおよびNの数は実アプリケーションによるプロファイリングの後に構成でき、その結果、パフォーマンスは様々な状況のためにさらに最適化できる。MおよびNを構成することは、より大きな柔軟性およびスケーラビリティの別の次元を提供する。プロファイリングは、処理スレッドのローディング(ティックカウント)または操作上のタスクのサイズもしくは複雑さを識別することを含む。プロファイリングはまた、共用メモリ24からのデータおよび記憶容量の転送に関連するパラメータなどの他のコンポーネントを評価することを含むこともできる。プロファイリングおよび調整によって、フレーム率、画面サイズ、ピクセルレート、三角形描画率などを、MおよびNを変化させるか変えるため、および/またはPRステージ140において使用するための処理スレッドPR1、PR2、...PRXの数を変化させるために使用することができよう。プロファイリングおよび調整によって、パフォーマンス全体を最適化するために、3Dパイプラインステージ110、130および140をバランスさせることができる。残りの処理スレッドPR1、PR2、...PRXは、ゲームオーディオなどの同時に動作している他のアプリケーションのために使用される。
【0054】
次に図13を参照すると、3Dグラフィックスパイプライン100が使用するための3Dグラフィックスパイプライン方法200の流れ図が示されている。方法200はステップS202から開始され、そこで頂点処理が頂点出力情報を作成するために実施される。ステップS202の後にステップS204が続き、そこで表示領域18は、その中で重ね合わされた頂点出力情報を有し、M×Nのサブ画面に細分される。たとえば、図8(A)において最もよくわかるように、三角形T1は、サブ画面S11、S21およびS22にわたって広がり、図8(B)に示される、そのそれぞれの細分された部分T11、T12、T13に細分される。したがって、図8(B)におけるタスクリスト135は、三角形T1およびT2の細分された部分を示す(説明のために、2つの三角形だけを示す)。明らかなように、関連する三角形を有しないか、または三角形のより小さな細分された部分を有する頂点出力情報からのタスクリスト135におけるそれらのエントリは、より速く処理できる。したがって、ピクセルレンダリングステージ140が表示領域18上で三角形を表す3D画像を表示する前に、三角形のすべての細分された部分の処理は完了していなければならない。
【0055】
ステップS204の後にステップS206が続き、そこで三角形のサブ部分を有するか有しないサブ画面タスクが作り出され、タスクリスト135に置かれる。ステップS206の後にステップS2081、2082および208Yが続き、そこでYはピクセルレンダリングステージ140のために使用されるセットにおける処理スレッドの数(2つまたはそれ以上)である。ステップS2081において、第1の処理スレッド(以下「スレッド1」と呼ぶ)は(1番目の)利用可能サブ画面タスク(図8(B))を得て、ステップS2101において、サブ画面タスクにおける各ピクセルを処理し、特にこれらのピクセルはタスクと関連した三角形または三角形部分の内部または内側にあるように決定される。ステップS2101の後にステップS2121が続き、そこでそれがタスクリスト135の終了であるかどうかの判定がなされる。判定が「YES」である場合、スレッド1による処理は終わる。そうではなく、判定が「NO」である場合、ステップS2121はステップS2081に戻る。第2の処理スレッド(以下「スレッド2」と呼ぶ)の演算は本質的に同じものである。スレッド2は、タスクリスト135における次の利用可能なサブ画面タスクを得るかまたは捕らえる。ステップS2082の後にステップS2102が続き、そこでサブ画面タスクが処理される。ステップS2082の後にステップS2102が続く。ステップS2102の後にステップS2122が続く。ステップS2122において、それ以上のタスクがタスクリスト135にあるかどうかの判定がなされる。ステップS2122における判定が「NO」である場合、方法は終わる。そうではなく、判定が「YES」である場合、ステップS2122はステップS2082に戻る。
【0056】
ステップS208Yは、スレッドYによってY番目の利用可能なサブ画面タスクを得るかまたは捕らえる。ステップS208Yの後にステップS210Yが続き、そこでサブ画面タスクが処理される。ステップS210Yの後にステップS212Yが続き、それ以上のタスクがタスクリスト135にあるかどうかの判定がなされる。判定が「NO」である場合、方法は終わる。そうではなく、判定が「YES」である場合、ステップS212YはステップS208Yに戻る。
【0057】
ステップS2101、S2102およびS210Yの間に達成される処理は、ラスタ化、ブレンディング、テクスチャアプリケーション演算142および陰面除去演算144を実行する。特に図11を参照すると、中心のドットを有する正方形はピクセルPを表す。ピクセルPのいくつかは三角形T11の内側にあり、いくつかのピクセルは三角形T11の外側にある。各頂点V1、V2およびV3は、スムーズシェーディングによって与えられた色値を有する。各ピクセルPにおける色値を算出するために線形補間が使用される。頂点V1、V2およびV3は、三角形T11を形成して、そのような三角形を表示領域18内で位置決めするために使用される。色は、正方形の中心に黒いドットで表された各ピクセル中心において計算される。Z深度、アルファ、フォグおよびテクスチャを含む様々なパラメータが補間される。
【0058】
再び図2〜図4を参照すると、この例では、6つのスレッドPT1、PT2、PT3、PT4、PT5およびPT6がある。第1のスレッドPT1は、VPステージ110を処理するために使用することができる。第2のスレッドPT2は、SSDステージ130を処理するために使用することができる。残りの4つのスレッドPT3、PT4、PT5およびPT6は、タスクリスト135からのサブ画面タスクを並行で処理するために使用される。ここで、処理スレッドPT3は、最初の利用可能サブ画面タスク1,1をとって、捕らえられた第1のサブ画面タスク1,1におけるピクセルを処理する。処理スレッドPT4は、次の(2番目の)利用可能サブ画面タスク1,2をとって、捕らえられたサブ画面タスク1,2におけるピクセルを処理する。処理スレッドPT5は、次の(3番目の)利用可能サブ画面タスク1,3をとって、捕らえられたサブ画面タスク1,3におけるピクセルを処理する(Mは3よりも大きいと仮定する)。
【0059】
Mは4であると仮定して、処理スレッドPT6は次の(4番目の)利用可能サブ画面タスク1,Mをとって、捕らえられたサブ画面タスク1,Mにおけるピクセルを処理するだろう。処理スレッドPT3、PT4、PT5およびPT6がそれらの各サブ画面タスクを完了するとき、タスクリスト135が空になるまで、追加のサブ画面タスクは捕らえられて、並行で処理される。
【0060】
図13に記載の実施形態では、3Dグラフィックスパイプライン100の演算を負荷分散するために、3Dグラフィックスパイプライン100によって使用される処理スレッドの少なくとも1つを、3つの3Dパイプラインのプロセス110、130および140のすべてを処理するために使用することができる。単に説明のために、スレッド1を、ステップS202、S204、S206ならびにステップS2081、2101および2121を実行するために使用することができる。
【0061】
1つの処理スレッドが3メガピクセル/秒(MIPS)レンダリングを実行する場合、それは1ピクセルを処理するために約30の命令パケットをとるであろう。これは平均して1ピクセル当たり約100の命令である。VPステージ110およびSSDステージ130のための6つのスレッドのうちの2つ、およびPRステージ140のための残り4つの処理スレッドを確保することが、専用ハードウェアグラフィックスアクセラレータのパフォーマンス(12メガピクセル/秒)の4倍であるVGA解像度をサポートする。
【0062】
すべての処理スレッドが同じメモリ24を共用するので、処理スレッドはすべてミューテックスツールを使用して、同一セットの入力三角形データ(サブ画面タスク)を非常に効率的に(デュープリケーションなしで)処理することができる。
【0063】
ピクセルレンダリングステージ140は3Dグラフィックスパイプライン100の最後のパイプラインステージである。PRステージ140は、3Dグラフィックスイメージのピクセル表現を生成するために入力三角形リストを処理する。上記の3Dグラフィックスパイプライン100は、PRステージ140のパフォーマンス(ピクセル毎秒)を改善する。インタリーブ型マルチスレッドプロセッサ22は、タスクリスト135を処理するために、並行に動作する処理スレッドの数の倍数だけパフォーマンスを増加させる。
【0064】
3Dグラフィックスパイプライン方式の効果は、数MおよびNの調整を可能にすることにおけるその柔軟性である。MおよびNの数を増加させることによって、ピクセルレンダリングステージ140のためのMIPS要件は減少する。各サブ画面がより小さくなるので、レンダリングタスクはより単純になる。これは複数処理スレッドのパフォーマンスを増加させるのを助ける。処理スレッドを、オーディオなどの他の同時並行アプリケーションのために使用することもできる。
【0065】
容易にわかるように、3Dグラフィックスイメージをレンダリングするための、本明細書で説明されるソフトウェア実装は、専用のグラフィックスアクセラレータのハードウェア実装よりも高いパフォーマンスを有する。グラフィックスアクセラレータのハードウェア実装と比較して、本明細書に記載の実施形態は柔軟でスケーラブルである。この実施形態は柔軟であるので、新機能を追加するためのソフトウェアコードを拡張し、(OpenGL ES 1.0、1.1...などの)3Dグラフィックス規格のより高いバージョンをサポートして、様々なアプリケーション構成およびカスタム要件をサポートすることは容易である。実施形態のスケーラブルな機能は、様々なパフォーマンス要件(フレーム率、画面サイズ、ピクセルレート、三角形描画率など)を可能にして、シリコンコストおよびシステム電力消費を最適化する。
【0066】
この実施形態はまた、同じパフォーマンスに達するためにマルチGHzのクロックスピードを有するハイエンドプロセッサを使用する代わりに、ソフトウェア実装が低コストおよび低電力プロセッサで使用されることを可能にする。
【0067】
次に図14を参照すると、共用メモリ24は3Dグラフィックスパイプライン100のための様々なキューを含む。これらのキューは、頂点配列25、プリミティブキュー26およびタスクキュー27を含む。とはいえ、追加のキューまたはバッファをVPステージ140の階層またはレイヤのために提供できる。図7に関して前述したように、VPステージ110は、モデルビュー変換演算112、射影演算114、選別演算116、照明およびカラーリング演算118、プリミティブアセンブリ演算120、クリッピング(すなわちユーザ定義のクリッピング)演算122、および透視分割およびビューポート演算124を含む。プリミティブアセンブリ演算120およびクリッピング演算122などの下位レイヤまたは階層が、モデルビュー変換演算112などのより高い階層またはレイヤに依存するように、VPステージ110における演算は段々に積まれるかまたは層にされる。
【0068】
頂点配列25はモデルビュー変換演算112からの頂点座標を含む。頂点配列25は、モデル座標における頂点の位置、各頂点の色、およびテクスチャ座標などの、頂点ごとの属性を含む。プリミティブキュー26はプリミティブアセンブリ演算120によって取り込まれる。タスクキュー27はタスクリスト135によってSSDステージ130から取り込まれる。しかしながら、プリミティブアセンブリ演算120の下のVPステージ110の階層またはレイヤは、SSDステージ130によって必要な頂点出力情報を作成するためにプリミティブキュー26に取り込まれたデータによって決まる。SSDステージ130はPRステージ140用に必要なタスクリスト135を作成する。しかしながら、同時に、プリミティブアセンブリ演算120はモデルビュー変換演算112などのより高い階層またはレイヤからのデータに依存する。プリミティブアセンブリ演算120およびモデルビュー変換演算112に関する上の記述は、単に例証を目的とするもので、VPステージ110においては他の階層またはレイヤに適用される。
【0069】
次に図15を参照すると、3Dグラフィックスパイプライン100を処理スレッド当たりのベースで負荷分散するため方法300の流れ図が示されている。この実施形態では、処理スレッドPT1、PT2、...PTXの1つまたは複数によってPRステージ140を処理することは、3Dグラフィックスパイプライン100におけるVPおよびSSDステージ110および130より優先される。3Dグラフィックスパイプライン100の演算に割り当てられた処理スレッドPT1、PT2、...PTXまたは1サブセットの処理スレッドPT1、PT2、...PTXは、3Dグラフィックスパイプライン100の演算を並行に独立して処理する働きをする。方法300は、3Dグラフィックスパイプライン100の演算を処理するために割り当てられた処理スレッドPT1、PT2、...PTXまたは1サブセットの処理スレッドPT1、PT2、...PTXの1つまたは複数によって、個別に独立して実施されることになる。
【0070】
方法300はステップS302から開始され、そこで処理スレッドPT1、PT2、...PTXのうちの1つが最初に、SSDステージ130中に作成された共用メモリ24のタスクキュー27におけるタスクリスト135内のサブ画面タスクの数を点検する。SSDステージ130の演算は図13のステップS204およびS206に対応する。ステップS302の後にステップS304が続き、そこでタスクキュー27が空であるかどうか、またはタスクリスト135における残りのサブ画面タスクのすべてが他の処理スレッドによってロックされているかどうか、の判定が行われる。ステップS304において判定が「NO」である場合、ステップS304の後にステップS306が続き、そこで処理スレッドが(ステップS2081、2101および2121などの)PRステージ140の演算を実行し、1つのサブ画面タスクを消費または処理する。その後、ステップS306はループしてステップS302へ戻る。
【0071】
しかしながら、ステップS304において判定が「YES」である場合、ステップS304の後にステップS308が続き、そこでそれ以上の3Dグラフィックス演算があるかどうかの判定がなされる。ステップS308における判定が「NO」であり、タスクキュー27が空であるかまたは最後のパイプラインステージ(PRステージ140)によって空にされている(ステップS304)場合、3Dグラフィックスパイプライン100の演算は本質的に完了である。したがって、方法300は終わる。ステップS308は、ただ方法300を終えるために使用される基準の一実施例である。したがって、他の基準をそれに応じて方法300において使用し、配置することができる。
【0072】
ステップS308における判定が「YES」である場合、ステップS308の後にステップS310が続き、そこで、VPステージ110における頂点処理が少なくとも1つの三角形を表す頂点出力情報を生成するために実行される。ステップS310の後にステップS312が続き、そこで、ステップS310において作成された頂点情報がタスクキュー27におけるタスクリスト135への追加のためにSSDステージ130に送られる。次いでステップS312はループしてステップS302へ戻り、そこで処理スレッドが再びタスクキュー27を点検する。通常、ステップS310において、処理スレッドはVPステージ110の関数を呼び出す。
【0073】
さらなる注記として、ステップS304における評価基準は変化してもよい。たとえば、始めに、ステップS304における評価基準は、サブ画面タスクの数を、PRステージ140用にタスクキュー27におけるサブ画面タスクの数を示すウォーターマーク(図6)またはしきい値と比較することができる。サブ画面タスクの数がウォーターマークより少ない、またはウォーターマークの下である(すなわち、多くのサブ画面タスクがピクセルレンダリングのためのタスクキューにないことを示す)場合、ステップS304の後にステップS308が続く。しかしながら、サブ画面タスクの数がウォーターマークより多いかまたはウォーターマークを超える場合、処理スレッドはステップS306においてPRステージ140の演算を実行する。
【0074】
しかしながら、タスクキュー27におけるサブ画面タスクの数が所定数のループの後にウォーターマークレベルより下に残っていると、評価基準を変える(下げる)ことができる。たとえば、評価基準は空に設定してもよく、および/または、すべてサブ画面タスクはロックされる。したがって、S304の評価基準を前後に変化させて、PRステージ140とVPステージ110との間で、好ましくはPRステージ140の方へ、負荷を分散することができる。
【0075】
VPステージ110の階層またはレイヤに関して、あるいは図15のステップS310において、様々なキューにおけるデータのための階層検査を評価することができる。たとえば、ステップS310中の処理スレッドは、最初にプリミティブキュー26または他の中間階層もしくはレイヤを検査して、その後にVPステージ110においてその他のより高い階層またはレイヤのいずれかを検査することができる。中間階層またはレイヤにおけるデータが対応するキューの中にある場合、処理スレッドは、より低い階層またはレイヤ用に階層またはレイヤからのデータを処理して、頂点出力情報を生成することができる。
【0076】
VPステージバランシングのために、処理スレッドは、図13に関して上に説明したものと同様の方法で、キューのいずれかにおけるデータを捕らえてロックする。
【0077】
方法300は、あらゆる処理スレッドPT1、PT2、...PTXが等しく作られて、機能を維持して追加するためにより容易である同一のプログラムコードを動かすことを可能にする。方法300はまた、処理スレッド間でオーバヘッドを切り替えることを回避することもできる。
【0078】
方法300は、PRステージ140が優先される3Dグラフィックスパイプライン100のステージ間で自動的に作業負荷を分散する。さらにまた、負荷分散は、マネージャスレッドなしでパイプラインステージ110、130および140の各々の間で自動的に作業負荷を分散する。負荷分散は、3Dグラフィックスパイプライン100の処理演算からスレッドを追加または取り除くことによってスケーラブルとなる。負荷分散は、最小のオーバヘッドを有する処理スレッドの各々の間に、ほとんど通信を必要としない。
【0079】
例示的な実施形態では、方法300は、ハードウェア、ソフトウェア、ファームウェア、または1つまたは複数のコンピュータ実行可能命令を備えるコンピュータプログラム製品の形でのこれらの任意の組合せに、実装できる。ソフトウェアに実装されると、コンピュータプログラム製品は、コンピュータ記憶媒体およびコンピュータ通信媒体を含むコンピュータ可読媒体の上に格納でき、またはこれを使用して伝送できる。
【0080】
「コンピュータ記憶媒体」という用語は、本明細書では、コンピュータに方法を実行させる命令を格納するようになっているいかなる媒体も指す。限定ではなく例として、コンピュータ記憶媒体は、電子メモリ素子(たとえば、RAM、ROM、EEPROMなど)、光学的メモリ素子(たとえば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)など)、または磁気記憶装置(たとえば、ハードディスク、フラッシュドライブ、テープ駆動装置など)、またはコンピュータプログラム製品を格納するようになっている他のメモリ素子、またはそのようなメモリ素子の組合せを含む、ソリッドステートメモリ素子を備えることができる。
【0081】
「コンピュータ通信媒体」という用語は、本明細書では、たとえば、変調された搬送波、光学的信号、DCまたはAC電流、および類似の手段を使用してあちこち転転とコンピュータプログラム製品を伝送するようになっている、いかなる物理インタフェースも指す。限定ではなく例として、コンピュータ通信媒体は、ツイストワイヤペア、印刷ケーブルまたはフラットケーブル、同軸ケーブル、光ファイバーケーブル、デジタル加入者線(DSL)、または他の有線、無線、または光学的直列または並列インタフェース、もしくはそれらの組合せを備えることができる。
【0082】
開示された実施形態の上記の説明は、当業者が開示を作製または使用することを可能にするために提供される。これらの実施形態への様々な変更形態は、当業者にすぐに明らかになり、本明細書で定義された全体的な原理は本開示の精神または範囲から逸脱することなく他の実施形態に適用することができる。したがって、本開示は、本明細書で示される実施形態に限定されることが意図されず、本明細書で開示された原理と新規性のある特徴とに一致する最大範囲が認められるべきである。
【技術分野】
【0001】
本開示は、一般に画像処理に関し、より詳しくは、インタリーブ型マルチスレッドプロセッサによって処理される高速ピクセルレンダリング処理のための3次元(3D)グラフィックスパイプラインを負荷分散するための技術に関する。
【背景技術】
【0002】
3Dオブジェクトに関する情報を表示可能なビットマップに変換することは、ピクセルレンダリングとして知られており、かなりのメモリと処理能力とを必要とする。過去において、3Dグラフィックスはパワフルなワークステーションにおいてのみ利用可能であったが、現在では、3Dグラフィックスアクセラレータはパーソナルコンピュータ(PC)中で一般に見られる。ハードウェアグラフィックスアクセラレータは、メモリ(たとえば命令ランダムアクセスメモリ(IRAM))と、3次元レンダリング演算の多くを処理するための専用マイクロプロセッサとを含む。デスクトップのためのOpen GL(登録商標)(オープングラフィックスライブラリ)は、3Dおよび2Dコンピュータグラフィックスを作成する書込みアプリケーションのためのアプリケーションプログラミングインタフェース(API)を定義している。APIは、プリミティブから複雑な3次元場面を描画するための何百もの関数を含む。
【0003】
OpenGL(登録商標)ESは、ソフトウェアとグラフィックスの間のインタフェースを作成するデスクトップOpenGL(登録商標)のサブセットである。3Dグラフィックスエンジン(OpenGL(登録商標)ES)は、概して2つの部分に実装される。第1の部分は、頂点を処理する関数を含んでおり、デジタル信号処理(DSP)ファームウェアに通常実装される。第2の部分は、ピクセルレンダリングのための関数を含んでおり、専用ハードウェアグラフィックスアクセラレータに実装される。ピクセルレンダリングを実行する第2の部分は、従来の3Dグラフィックスエンジンの最後のパイプラインステージである。最後のパイプラインステージは、グラフィックスイメージのピクセル表現を作成するために入力三角形集合を処理する。しかしながら、最後のパイプラインステージは通常、エンジンにおける全3Dグラフィックスパイプラインのパフォーマンスボトルネックである。したがって、ピクセルレンダリングのための最後のパイプラインステージのパフォーマンス(ピクセル毎秒)を高めることは非常に重要である。
【0004】
通常、ピクセルレンダリング演算の間、各入力三角形は、三角形が入力されるのと同じ順序で順次処理される必要がある。したがって、マルチスレッドを有するプロセッサは、入力三角形を処理するためにインタリーブ型並行処理を利用することを防止される。
【0005】
さらにまた、ハードウェアグラフィックスアクセラレータは、一般に柔軟ではなく、または容易にスケーラブルではない。したがって、ハードウェアグラフィックスアクセラレータは、新機能を容易に追加し、(OpenGL(登録商標)ES 1.0、1.1...などの)3Dグラフィックス規格のより高いバージョンをサポートし、様々なアプリケーション構成をサポートし、要件をカスタマイズすることができない。さらにまた、ハードウェアグラフィックスアクセラレータは、シリコンコストおよびシステム電源消費を最適化するために、様々なパフォーマンス要件(フレーム率、画面サイズ、ピクセルレート、三角形描画率など)のために容易に基準化されない。
【0006】
容易にわかるように、専用ハードウェアグラフィックスアクセラレータは、移動電話またはセルラ電話など小型携帯コンピューティングデバイス中でシリコン領域を占有する。したがって、専用ハードウェアグラフィックスアクセラレータは、使用される専用ハードウェアグラフィックスアクセラレータおよびIRAMの包含によって携帯コンピューティングデバイスの総コストを増加させる。専用ハードウェアグラフィックスアクセラレータの使用はまた、オーバヘッドを追加し電力を消費するDSPによるデータトラフィックを生じる。
【0007】
したがって、当技術分野では、より速いピクセルレンダリング処理を提供するために3次元(3D)グラフィックスパイプラインを負荷分散する技術が必要である。
【発明の概要】
【0008】
専用ハードウェアグラフィックスアクセラレータなしでより速いピクセルレンダリング処理を提供する3次元(3D)グラフィックスパイプラインの技術を、本明細書で説明する。一態様では、複数の処理スレッドを備えるプロセッサが実装される。各処理スレッドは、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを決定する。サブ画面タスクが利用可能である場合、各処理スレッドはサブ画面タスク上でピクセルレンダリング演算をさらに実行する。しかしながら、サブ画面タスクが利用できない場合、各処理スレッドは3次元(3D)グラフィックスパイプラインの作業負荷を分散するために頂点処理演算を実行する。
【0009】
別の態様では、複数の処理スレッドを有するプロセッサを備える無線デバイスが実装される。データがピクセルレンダリング演算に利用可能であるとき、各処理スレッドは頂点処理演算より3次元グラフィックスパイプラインのピクセルレンダリング演算を優先させる。プロセッサはメモリに結合される。
【0010】
本開示の様々な態様および実施形態について以下でさらに詳細に説明する。
【0011】
本開示の態様および実施形態は、同様の参照文字が全体を通じて対応して識別される図面と関連して、以下に示す詳細な説明からより明らかになろう。
【図面の簡単な説明】
【0012】
【図1】3D画像化装置の全般的ブロック図を示す図。
【図2】共用メモリと接続されるインタリーブ型マルチスレッドプロセッサを示す図。
【図3】各スレッドの詳細が示されたインタリーブ型マルチスレッドプロセッサの詳細を示す図。
【図4】実行時間に対する、6つのスレッドを有するマルチスレッドプロセッサによって処理されるインタリーブ型命令のコアパイプラインのグラフを示す図。
【図5】2つのスレッドによって処理される2つの並列命令セットを示す図。
【図6】例示的3D画像化装置における3Dグラフィックスパイプラインの全般的流れ図を示す図。
【図7】3Dグラフィックスパイプラインのプロセスの全般的ブロック図を示す図。
【図8】(A)は表示空間がM×Nグリッド(M>1およびN>1)に細分されていることを示す図、(B)は図8(A)の細分された表示空間を処理するためのタスクリストを示す図。
【図9】表示空間がM×Nグリッド(M=1およびN>1)に細分されていることを示す図。
【図10】表示空間がM×Nグリッド(M>1およびN=1)に細分されていることを示す図。
【図11】複数のピクセルを有する頂点座標によって画定される三角形を示す図。
【図12】1セットの4細分領域に細分された領域において三角形を処理するための命令演算のグラフィック表現を示す図。
【図13】マルチスレッドプロセッサを用いる3Dグラフィックスパイプライン方法の流れ図を示す図。
【図14】共用メモリにおけるパイプラインキューの全般的ブロック図を示す図。
【図15】3Dグラフィックスパイプラインをスレッド当たりベースで負荷分散するための方法の流れ図を示す図。
【発明を実施するための形態】
【0013】
「例示的」という語は、本明細書では「実施例、例または説明として役立つこと」を意味するために用いられる。本明細書で「例示的」として説明されるいかなる実施形態または設計も、必ずしも他の実施形態または設計より好ましいまたは有利であると解釈すべきではない。
【0014】
多くのゲームアプリケーションは、2次元(2D)空間(たとえば、表示画面)において3Dオブジェクトを表示する3次元(3D)グラフィックスアプリケーションを必要とする。2Dグラフィックスにおけるピクセルは位置、色および輝度のプロパティを有するが、3Dピクセルは、点が想像上のZ軸上のどこにあるかを指示する深度プロパティを追加する。各ピクセルがそれ自体の深度値を有する3Dピクセルが結合されるにつれて、テクスチャが作り出される。
【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)、および移動、セルラまたは衛星電話、ラップトップ、ノートブック、タブレット型PC、Palm Pilot、無線通信デバイスなどのうちの1つを含むことができる。
【0017】
次に図2〜図5を参照すると、例示的な実施形態では、DSP20はインタリーブ型マルチスレッドプロセッサ22を含む。インタリーブ型マルチスレッドプロセッサ22は、複数の処理スレッド(PT)PT1、PT2、...PTXを有する。各処理スレッド(PT)PT1、PT2、...PTXは、共用メモリ24として表される同じメモリを共用する。各処理スレッドPT1、PT2、...PTXは、それぞれのワンセットの命令261...26X、コア271...27X(処理装置)およびレジスタファイル281...28Xを含む。各コア271...27Xの出力は、共用メモリ24と通信する。命令261...26Xは、下記に定める演算、および3D画像化装置10のマルチメディアなどの機能セットを実行するための他の演算を実行するプログラムコードを含む。コア271...27Xは、命令261...26Xを実行する。
【0018】
レジスタファイル281...28Xは1組の汎用レジスタであり、DSP20またはマイクロプロセッサの中心のステージである。これらのレジスタファイル281...28Xは、すべてのオペランド(通常、メモリからロードされる)を保持し、すなわち、共用メモリ24に結果を格納する前に(算術演算、論理演算など)すべての演算からのすべての結果を保持する。
【0019】
一部のDSPアーキテクチャは4つのスレッドを有する。とはいえ、DSP20は、限定はしないが、並行して動作する6つの処理スレッドなど、4つよりも多いスレッドを有することができる。例示的な実施形態では、各スレッド(PT)PT1、PT2、...PTXは、1秒当たり100,000,000個の命令パケット(MIPS)を並行して提供する。各命令パケットは、4つの命令、2つの命令(Supスカラ)またはただ1つの命令であり得る。しかしながら、DSP20のアーキテクチャが命令間データの依存性によって生じる非効率性を取り除くので、1つの命令は効率のためには推奨されない。
【0020】
スレッドまたはマルチスレッドという用語は、並行タスクの実行を説明するために使用される。単一パスの実行の代わりに、プログラム(演算)は、同時に実行する複数の実行スレッドに分割できる。例示的な実施形態では、開始スレッドがあり、これは関数呼出し(または命令)を必要とし、通常少なくとも2つの引数、すなわち(1)開始命令のアドレス、および(2)コンテキスト引数を必要とする。スレッドが動作および/または終了している間、このスレッドは、他の処理スレッドに関して2つの基本的なジョブを行うこと、すなわち(1)共用リソースを取得し、他のスレッドがそのようなリソースを使用するのを阻止すること、および(2)メッセージ(たとえば完了、準備完了など)を他のスレッドに安全に送信することが可能である。
【0021】
次に図4を参照すると、インタリーブ型マルチスレッドパラレル処理のグラフが示されている。この例では、6つの処理スレッドPT1、PT2、PT3、PT4、PT5およびPT6がある。第1の処理スレッドPT1は第1の命令セット1を処理する。これはコアパイプライン用の実行時間線の第1の(最上)行によって表される。コアパイプラインは、コア271、...27Xによって表される。第1の命令セット1が第1の処理スレッドPT1によって処理される間、第2の処理スレッドPT2はその第1の命令セット1を処理する。これは実行時間線の第2の行によって表される。このように、第1の命令セット1は並行して処理されている。
【0022】
第1および第2の処理スレッドPT1およびPT2がこれらの第1の命令セット1を処理する間に、第3の処理スレッドPT3はその第1の命令セットを処理する。これはコアパイプライン用の実行時間線の第3の行によって表される。第4の処理スレッドPT4はその第1の命令セット1を処理する。一方、第1、第2および第3の処理スレッドPT1、PT2およびPT3は、それらの関連する第1の命令セット1を処理し続ける。これはコアパイプライン用の実行時間線の第4の行によって表される。
【0023】
第1、第2、第3および第4の処理スレッドPT1、PT2、PT3およびPT4がそれらの第1の命令セット1を処理し続ける間に、第5の処理スレッドPT5はその第1の命令セット1を処理する。これはコアパイプライン用の実行時間線の第5の行によって表される。第1、第2、第3、第4および第5の処理スレッドPT1、PT2、PT3、PT4およびPT5がそれらの第1の命令セット1を処理し続ける間に、第6の処理スレッドPT6はその第1の命令セット1を処理する。これはコアパイプライン用の実行時間線の第6の行によって表される。このように、処理スレッドによる命令の処理はインタリーブされる。
【0024】
次に図4の第7の(最下)行を参照して、第1の処理スレッドPT1がその第1の命令セット1を完了したと仮定すると、第2、第3、第4、第5および第6の処理スレッドPT2、PT3、PT4、PT5およびPT6がそれらの第1の命令セット1の処理を続ける間、第1の処理スレッドPT1は第2の命令セット2を処理し始める。したがって、処理スレッドPT1、PT2、...PTXの各々の処理は並行して行われ、インタリーブされる。
【0025】
すべての処理スレッドのインタリーブ型処理を説明することは差し控える。したがって、説明のため、命令261および262を使用するインタリーブ型処理がミューテックスに関係するので、これを図5に示す。ミューテックスは、一度にただ1つの処理スレッドによって「所有される」ツールである。処理スレッドは、ミューテックスを取得しようとするとき、ミューテックスをLOCKする。しかしながら、ミューテックスがすでにLOCKされている場合、その処理スレッドは停止する。所有スレッドがミューテックスをUNLOCKすると、停止されたスレッドは再開され、ミューテックスのオーナー権を取得する。このプロセスを図5に示す。
【0026】
第1の処理スレッドPT1から開始して、命令261はステップS22Aから始まり、ここでノンクリティカルコードが実行される。ステップS22Aの後にステップS24Aが続き、そこで第1の処理スレッドPT1がLOCKミューテックス1命令を実行する(ミューテックス1はUNLOCKされていると仮定する)。したがって、第1の処理スレッドPT1はここでミューテックス1を所有する。ステップS24Aの後にステップS26Aが続き、そこでクリティカルコードが実行される。ステップS26Aの後にステップS28Aが続き、そこでクリティカルコードが完了した後に第1のスレッドPT1がUNLOCKミューテックス1命令を実行する。その後、ステップS30Aにおいて、第1の処理スレッドPT1はノンクリティカルコードの実行を再開する。
【0027】
第1の処理スレッドPT1と並行して、第2の処理スレッドPT2は、ステップS22Bにおいて命令262を開始し、ステップS22Bではノンクリティカルコードが実行される。ステップS22Bの後にステップS24Bが続き、そこで第2の処理スレッドPT2がステップS24Bにおいてミューテックス1をLOCKすることを望む。しかしながら、ミューテックス1はLOCKED状態にある。したがって、第2の処理スレッドPT2の演算は、第1の処理スレッドPT1がステップS28Aにおいてミューテックス1をUNLOCKするまで停止される。次いでステップ26Bが始まり、ここでクリティカルコードを実行することができる。ステップS26Bの後にステップS28Bが続き、そこでクリティカルコードが完了し、第2のスレッドPT2がUNLOCKミューテックス1命令を実行する。その後、他の命令が続くことができる。
【0028】
ミューテックスツールまたは別のトークンツールは、必要に応じてのみ、様々な処理スレッドにおけるクリティカルセクションの直列実行を保証するために使用される。これは直列化の実行でもあり、これは、一定のコードがそれが他のスレッドによるコードの実行と衝突する可能性があるときには並行して実行できないことを意味する。共用メモリ24(共用リソース)が使用されるので、ミューテックスツールは有用である。
【0029】
次に図6および図7を参照すると、全体的に100で表された3Dグラフィックスパイプラインの全般的流れおよびブロック図の実施形態が示されている。3Dグラフィックスパイプライン100は、画面16の表示領域18における3D表現の全タスクを概して3つのパイプラインステージ、すなわち、頂点処理(VP)ステージ110、画面細分(SSD)ステージ130およびピクセルレンダリング(PR)ステージ140に分割する。動作中、頂点処理(VP)ステージ110は、OpenGL(登録商標)またはOpenGL(登録商標)ESにおいて現在実装されている関数または関数のサブセットのすべてを含み、デジタル信号プロセッサ(DSP)20によって処理される。画面16は3Dグラフィックスパイプライン100の一部ではないので、画面16に向かう線はファントム線で示されている。
【0030】
VPステージ110は、モデルビュー変換演算112、射影演算114、選別演算116、照明およびカラーリング演算118、プリミティブアセンブリ演算120、クリッピング(すなわちユーザ定義のクリッピング)演算122、および透視分割およびビューポート演算124を含む。VPステージ110のこれらの演算の各々はOpenGL(登録商標)またはOpenGL(登録商標)ESにおいて明確に定義されている。
【0031】
一般に、モデルビュー変換演算112は、オブジェクトモデルを所望の位置および方向に置く数学的演算を使用する。射影演算114は、近いものを大きくし、遠いものより小さくする数学的演算を使用する。オクルージョンは遠いオブジェクトの前の近いオブジェクトを描画する。選別およびクリッピング演算116および122は見えないものを破棄する。照明演算118は表面上のライトの効果を算出する。
【0032】
例示的な実施形態では、VPステージ110に1つの処理スレッドを実装することができる(図2および図3)。頂点出力情報は、三角形および表示領域16におけるその位置を定めるための頂点情報を含む。頂点出力情報は表示領域16の上で重ね合わされ、表示領域16のピクセルはOpenGL(登録商標)、OpenGL(登録商標)ESまたは他のグラフィックスライブラリによる三角形を定めるために頂点出力情報を含む。
【0033】
画面細分(SSD)ステージ130は、表示領域18をM×Nのサブ画面に分ける画面細分演算132を含む。表示領域18は、頂点出力情報が重ね合わされた複数のピクセルP(図11)から成り立っている。VPステージ110からの頂点情報は、表示領域18における重ね合わせのための三角形(たとえば、図8(A)のT1およびT2)を画定する頂点情報(たとえば図11のV1、V2およびV3)を提供する。頂点情報は頂点座標およびエッジ情報を含むことができる。一般に、各三角形の頂点出力情報は、閉じた区域を定めるためのただ1セットの数学的記述である。この数学的記述のセットは共用メモリ24の中に格納され、その結果、各処理スレッド(PT1、PT2、...PTX)は、数学的記述のセットを使用することができ、それ自体のサブ画面タスクの範囲内で各ピクセルP(図11)を計算し、ピクセルが三角形内にあるかどうかを決定することができる。
【0034】
図8(A)は、表示領域18の上に重ね合わされた頂点出力情報を示す。画面細分(SSD)ステージ130中に、表示領域18は、図8(B)において最もよくわかるように、表示領域18を構成するピクセルをM×Nサブ画面タスクに分割またはグループ化することによって細分される。M×Nのサブ画面タスクはタスクリスト135に格納される(図6および図8(B))。M×Nのサブ画面タスクは、共用メモリ24の中に格納されたM×Nの独立タスクである。SSDステージ130の演算は、VPステージ110中に使用される処理スレッドとは別の処理スレッドを使用して実施できる。あるいは、SSDステージ130の演算を同じ処理スレッド上でVPステージ110の演算と結合することができる。
【0035】
図8(A)に示す実施例では、表示領域18はM×Nのサブ画面(ここでM>1およびN>1)に分割され、1つのグリッドを作成する。説明のために、図9は、M×Nのサブ画面(ここでM=1およびN>1)に分割された表示領域18’を示す。矢印は走査あるいはワークフローの方向を示す。図10を参照すると、表示領域18”はM×Nのサブ画面(ここでM>1およびN=1)に分割されている。したがって、表示領域18”のサブ画面は一連のカラムを形成する。
【0036】
ピクセルレンダリング(PR)ステージ140は、ラスタ化、ブレンディング、およびテクスチャアプリケーションの演算142および陰面除去演算144を含む。とはいえ、ピクセルレンダリングステージ140は、OpenGL(登録商標)またはOpenGL(登録商標)ESによって定義される他の演算を含むことができる。PRステージ140は、VPステージ110からの3Dオブジェクトに関する情報を、画面16の表示領域18に表示できるビットマップに変換する。PRステージ140は、入力三角形セットを処理して、3Dグラフィックスイメージのピクセル表現を生成する。
【0037】
典型的なピクセルレンダリング(PR)ステージは最初に頂点出力情報のリストから三角形をとることができる。次に、PRステージは、表示領域からピクセルをとり、三角形に対してピクセルを計算し、ピクセルが三角形内にあるかどうかを確かめる。評価中のピクセルが三角形内にある場合、PRステージは三角形から対応する色によるピクセルのカラーリングを実施することができる。評価中のピクセルが三角形内にない場合、ピクセルはスキップされる。次いでPRステージは表示領域18における次のピクセルを取り上げるであろう。すべてのピクセルが三角形について評価または処理されるまで、PRステージは表示領域18における他のピクセルについて上記のプロセスを繰り返す。したがって、ピクセルは一度に1つ処理される。
【0038】
次いで、典型的なPRステージは、頂点出力情報リストにおける次の三角形へ移動して、現在の三角形についてのピクセルの評価を繰り返すであろう。
【0039】
PRステージ140は複数のサブ画面またはサブ画面タスクによって同様な方法で働く。違いは、サブ画面が評価または処理すべきより少ないピクセル数を有し、複数のサブ画面が処理スレッド(PT1、PT2、...PTX)によってそれぞれ独立して並行に処理され得ることである。したがって、PRステージ140の処理時間は典型的なPRステージよりも非常に高速であるが、その理由は、より少ないピクセルが各サブ画面にあり、複数のサブ画面を並行で(各処理スレッドはそれぞれの1つのサブ画面におけるピクセルの処理に向かって独立して働き)処理できることにある。
【0040】
例示的な実施形態では、PRステージ140は、インタリーブ型マルチスレッドプロセッサ22の1セットの複数処理スレッドPR1、PR2、...PRXを使用して処理される。PRステージ140のために使用されるこのセットにおけるスレッドの数は、Xのスレッドの最大値を有する2またはそれ以上であってもよい。
【0041】
実施中は、ピクセルレンダリングステージ140に割り当てられた各処理スレッドPR1、PR2、...PRXは、タスクリスト135から利用可能なサブ画面タスクを捕らえて、タスクリスト135からそれを取り除く。この1セットの処理スレッドPR1、PR2、...PRXは、インタリーブ型並列演算において、入力三角形を処理し、サブ画面におけるピクセルをレンダリングする(入力三角形情報をサブ画面における表示のためにビットマップに変換する)。それぞれの1つの処理スレッドが、捕らえられたサブ画面タスクのためのピクセルレンダリング演算を完了した後、処理スレッドはタスクリスト135における次の利用可能なサブ画面タスクへ移動する。この演算は、すべてのサブ画面が処理され、ピクセルレンダリングステージ140が完了するまで、繰り返される。
【0042】
図1、図2および図12を参照すると、インタリーブ型マルチスレッドプロセッサ22はマルチスレッド処理がスケーラブルで均一であることを可能にする。演算
【数1】
【0043】
は、
【数2】
【0044】
によって定義できる。
【0045】
図12には、単一の三角形Tを有する4つのサブ画面の1ブロックがピクセルレンダリングのために示されている。演算
【数3】
【0046】
は、各々が三角形Tの細分された部分(i)を有する4つの(i)サブ画面として表現されるサブ画面タスクS11、S12、S21およびS22を処理する。したがって、演算
【数4】
【0047】
は、サブ画面S11の演算
【数5】
【0048】
プラスサブ画面S12の演算
【数6】
【0049】
プラスサブ画面S21の演算
【数7】
【0050】
プラスサブ画面S22の演算
【数8】
【0051】
に等しい。演算
【数9】
【0052】
のすべてが並行に処理される場合、したがって、ピクセルレンダリングステージ140を処理するための全体的ピークパフォーマンスは、処理スレッドのためのピークパフォーマンスに使用された処理スレッドの数を乗算したものである。サブ画面S11は、三角形Tのピクセルの細分された部分T1を有する。サブ画面S12は、三角形Tのピクセルの細分された部分T2を有する。サブ画面S21は、三角形Tのピクセルの細分された部分T3を有する。サブ画面S22は、三角形Tのピクセルの細分された部分T4を有する。説明のために、スレッドの数は4である。したがって、この例では、パフォーマンスは、1つの処理スレッドのためのパフォーマンスに処理スレッドの数を乗算したものになるであろう。したがって、PRステージ140は、複数のサブ画面からのピクセルを並行で処理するためのその能力による高速ピクセルレンダリングステージである。
【0053】
加えて、MおよびNの数は実アプリケーションによるプロファイリングの後に構成でき、その結果、パフォーマンスは様々な状況のためにさらに最適化できる。MおよびNを構成することは、より大きな柔軟性およびスケーラビリティの別の次元を提供する。プロファイリングは、処理スレッドのローディング(ティックカウント)または操作上のタスクのサイズもしくは複雑さを識別することを含む。プロファイリングはまた、共用メモリ24からのデータおよび記憶容量の転送に関連するパラメータなどの他のコンポーネントを評価することを含むこともできる。プロファイリングおよび調整によって、フレーム率、画面サイズ、ピクセルレート、三角形描画率などを、MおよびNを変化させるか変えるため、および/またはPRステージ140において使用するための処理スレッドPR1、PR2、...PRXの数を変化させるために使用することができよう。プロファイリングおよび調整によって、パフォーマンス全体を最適化するために、3Dパイプラインステージ110、130および140をバランスさせることができる。残りの処理スレッドPR1、PR2、...PRXは、ゲームオーディオなどの同時に動作している他のアプリケーションのために使用される。
【0054】
次に図13を参照すると、3Dグラフィックスパイプライン100が使用するための3Dグラフィックスパイプライン方法200の流れ図が示されている。方法200はステップS202から開始され、そこで頂点処理が頂点出力情報を作成するために実施される。ステップS202の後にステップS204が続き、そこで表示領域18は、その中で重ね合わされた頂点出力情報を有し、M×Nのサブ画面に細分される。たとえば、図8(A)において最もよくわかるように、三角形T1は、サブ画面S11、S21およびS22にわたって広がり、図8(B)に示される、そのそれぞれの細分された部分T11、T12、T13に細分される。したがって、図8(B)におけるタスクリスト135は、三角形T1およびT2の細分された部分を示す(説明のために、2つの三角形だけを示す)。明らかなように、関連する三角形を有しないか、または三角形のより小さな細分された部分を有する頂点出力情報からのタスクリスト135におけるそれらのエントリは、より速く処理できる。したがって、ピクセルレンダリングステージ140が表示領域18上で三角形を表す3D画像を表示する前に、三角形のすべての細分された部分の処理は完了していなければならない。
【0055】
ステップS204の後にステップS206が続き、そこで三角形のサブ部分を有するか有しないサブ画面タスクが作り出され、タスクリスト135に置かれる。ステップS206の後にステップS2081、2082および208Yが続き、そこでYはピクセルレンダリングステージ140のために使用されるセットにおける処理スレッドの数(2つまたはそれ以上)である。ステップS2081において、第1の処理スレッド(以下「スレッド1」と呼ぶ)は(1番目の)利用可能サブ画面タスク(図8(B))を得て、ステップS2101において、サブ画面タスクにおける各ピクセルを処理し、特にこれらのピクセルはタスクと関連した三角形または三角形部分の内部または内側にあるように決定される。ステップS2101の後にステップS2121が続き、そこでそれがタスクリスト135の終了であるかどうかの判定がなされる。判定が「YES」である場合、スレッド1による処理は終わる。そうではなく、判定が「NO」である場合、ステップS2121はステップS2081に戻る。第2の処理スレッド(以下「スレッド2」と呼ぶ)の演算は本質的に同じものである。スレッド2は、タスクリスト135における次の利用可能なサブ画面タスクを得るかまたは捕らえる。ステップS2082の後にステップS2102が続き、そこでサブ画面タスクが処理される。ステップS2082の後にステップS2102が続く。ステップS2102の後にステップS2122が続く。ステップS2122において、それ以上のタスクがタスクリスト135にあるかどうかの判定がなされる。ステップS2122における判定が「NO」である場合、方法は終わる。そうではなく、判定が「YES」である場合、ステップS2122はステップS2082に戻る。
【0056】
ステップS208Yは、スレッドYによってY番目の利用可能なサブ画面タスクを得るかまたは捕らえる。ステップS208Yの後にステップS210Yが続き、そこでサブ画面タスクが処理される。ステップS210Yの後にステップS212Yが続き、それ以上のタスクがタスクリスト135にあるかどうかの判定がなされる。判定が「NO」である場合、方法は終わる。そうではなく、判定が「YES」である場合、ステップS212YはステップS208Yに戻る。
【0057】
ステップS2101、S2102およびS210Yの間に達成される処理は、ラスタ化、ブレンディング、テクスチャアプリケーション演算142および陰面除去演算144を実行する。特に図11を参照すると、中心のドットを有する正方形はピクセルPを表す。ピクセルPのいくつかは三角形T11の内側にあり、いくつかのピクセルは三角形T11の外側にある。各頂点V1、V2およびV3は、スムーズシェーディングによって与えられた色値を有する。各ピクセルPにおける色値を算出するために線形補間が使用される。頂点V1、V2およびV3は、三角形T11を形成して、そのような三角形を表示領域18内で位置決めするために使用される。色は、正方形の中心に黒いドットで表された各ピクセル中心において計算される。Z深度、アルファ、フォグおよびテクスチャを含む様々なパラメータが補間される。
【0058】
再び図2〜図4を参照すると、この例では、6つのスレッドPT1、PT2、PT3、PT4、PT5およびPT6がある。第1のスレッドPT1は、VPステージ110を処理するために使用することができる。第2のスレッドPT2は、SSDステージ130を処理するために使用することができる。残りの4つのスレッドPT3、PT4、PT5およびPT6は、タスクリスト135からのサブ画面タスクを並行で処理するために使用される。ここで、処理スレッドPT3は、最初の利用可能サブ画面タスク1,1をとって、捕らえられた第1のサブ画面タスク1,1におけるピクセルを処理する。処理スレッドPT4は、次の(2番目の)利用可能サブ画面タスク1,2をとって、捕らえられたサブ画面タスク1,2におけるピクセルを処理する。処理スレッドPT5は、次の(3番目の)利用可能サブ画面タスク1,3をとって、捕らえられたサブ画面タスク1,3におけるピクセルを処理する(Mは3よりも大きいと仮定する)。
【0059】
Mは4であると仮定して、処理スレッドPT6は次の(4番目の)利用可能サブ画面タスク1,Mをとって、捕らえられたサブ画面タスク1,Mにおけるピクセルを処理するだろう。処理スレッドPT3、PT4、PT5およびPT6がそれらの各サブ画面タスクを完了するとき、タスクリスト135が空になるまで、追加のサブ画面タスクは捕らえられて、並行で処理される。
【0060】
図13に記載の実施形態では、3Dグラフィックスパイプライン100の演算を負荷分散するために、3Dグラフィックスパイプライン100によって使用される処理スレッドの少なくとも1つを、3つの3Dパイプラインのプロセス110、130および140のすべてを処理するために使用することができる。単に説明のために、スレッド1を、ステップS202、S204、S206ならびにステップS2081、2101および2121を実行するために使用することができる。
【0061】
1つの処理スレッドが3メガピクセル/秒(MIPS)レンダリングを実行する場合、それは1ピクセルを処理するために約30の命令パケットをとるであろう。これは平均して1ピクセル当たり約100の命令である。VPステージ110およびSSDステージ130のための6つのスレッドのうちの2つ、およびPRステージ140のための残り4つの処理スレッドを確保することが、専用ハードウェアグラフィックスアクセラレータのパフォーマンス(12メガピクセル/秒)の4倍であるVGA解像度をサポートする。
【0062】
すべての処理スレッドが同じメモリ24を共用するので、処理スレッドはすべてミューテックスツールを使用して、同一セットの入力三角形データ(サブ画面タスク)を非常に効率的に(デュープリケーションなしで)処理することができる。
【0063】
ピクセルレンダリングステージ140は3Dグラフィックスパイプライン100の最後のパイプラインステージである。PRステージ140は、3Dグラフィックスイメージのピクセル表現を生成するために入力三角形リストを処理する。上記の3Dグラフィックスパイプライン100は、PRステージ140のパフォーマンス(ピクセル毎秒)を改善する。インタリーブ型マルチスレッドプロセッサ22は、タスクリスト135を処理するために、並行に動作する処理スレッドの数の倍数だけパフォーマンスを増加させる。
【0064】
3Dグラフィックスパイプライン方式の効果は、数MおよびNの調整を可能にすることにおけるその柔軟性である。MおよびNの数を増加させることによって、ピクセルレンダリングステージ140のためのMIPS要件は減少する。各サブ画面がより小さくなるので、レンダリングタスクはより単純になる。これは複数処理スレッドのパフォーマンスを増加させるのを助ける。処理スレッドを、オーディオなどの他の同時並行アプリケーションのために使用することもできる。
【0065】
容易にわかるように、3Dグラフィックスイメージをレンダリングするための、本明細書で説明されるソフトウェア実装は、専用のグラフィックスアクセラレータのハードウェア実装よりも高いパフォーマンスを有する。グラフィックスアクセラレータのハードウェア実装と比較して、本明細書に記載の実施形態は柔軟でスケーラブルである。この実施形態は柔軟であるので、新機能を追加するためのソフトウェアコードを拡張し、(OpenGL ES 1.0、1.1...などの)3Dグラフィックス規格のより高いバージョンをサポートして、様々なアプリケーション構成およびカスタム要件をサポートすることは容易である。実施形態のスケーラブルな機能は、様々なパフォーマンス要件(フレーム率、画面サイズ、ピクセルレート、三角形描画率など)を可能にして、シリコンコストおよびシステム電力消費を最適化する。
【0066】
この実施形態はまた、同じパフォーマンスに達するためにマルチGHzのクロックスピードを有するハイエンドプロセッサを使用する代わりに、ソフトウェア実装が低コストおよび低電力プロセッサで使用されることを可能にする。
【0067】
次に図14を参照すると、共用メモリ24は3Dグラフィックスパイプライン100のための様々なキューを含む。これらのキューは、頂点配列25、プリミティブキュー26およびタスクキュー27を含む。とはいえ、追加のキューまたはバッファをVPステージ140の階層またはレイヤのために提供できる。図7に関して前述したように、VPステージ110は、モデルビュー変換演算112、射影演算114、選別演算116、照明およびカラーリング演算118、プリミティブアセンブリ演算120、クリッピング(すなわちユーザ定義のクリッピング)演算122、および透視分割およびビューポート演算124を含む。プリミティブアセンブリ演算120およびクリッピング演算122などの下位レイヤまたは階層が、モデルビュー変換演算112などのより高い階層またはレイヤに依存するように、VPステージ110における演算は段々に積まれるかまたは層にされる。
【0068】
頂点配列25はモデルビュー変換演算112からの頂点座標を含む。頂点配列25は、モデル座標における頂点の位置、各頂点の色、およびテクスチャ座標などの、頂点ごとの属性を含む。プリミティブキュー26はプリミティブアセンブリ演算120によって取り込まれる。タスクキュー27はタスクリスト135によってSSDステージ130から取り込まれる。しかしながら、プリミティブアセンブリ演算120の下のVPステージ110の階層またはレイヤは、SSDステージ130によって必要な頂点出力情報を作成するためにプリミティブキュー26に取り込まれたデータによって決まる。SSDステージ130はPRステージ140用に必要なタスクリスト135を作成する。しかしながら、同時に、プリミティブアセンブリ演算120はモデルビュー変換演算112などのより高い階層またはレイヤからのデータに依存する。プリミティブアセンブリ演算120およびモデルビュー変換演算112に関する上の記述は、単に例証を目的とするもので、VPステージ110においては他の階層またはレイヤに適用される。
【0069】
次に図15を参照すると、3Dグラフィックスパイプライン100を処理スレッド当たりのベースで負荷分散するため方法300の流れ図が示されている。この実施形態では、処理スレッドPT1、PT2、...PTXの1つまたは複数によってPRステージ140を処理することは、3Dグラフィックスパイプライン100におけるVPおよびSSDステージ110および130より優先される。3Dグラフィックスパイプライン100の演算に割り当てられた処理スレッドPT1、PT2、...PTXまたは1サブセットの処理スレッドPT1、PT2、...PTXは、3Dグラフィックスパイプライン100の演算を並行に独立して処理する働きをする。方法300は、3Dグラフィックスパイプライン100の演算を処理するために割り当てられた処理スレッドPT1、PT2、...PTXまたは1サブセットの処理スレッドPT1、PT2、...PTXの1つまたは複数によって、個別に独立して実施されることになる。
【0070】
方法300はステップS302から開始され、そこで処理スレッドPT1、PT2、...PTXのうちの1つが最初に、SSDステージ130中に作成された共用メモリ24のタスクキュー27におけるタスクリスト135内のサブ画面タスクの数を点検する。SSDステージ130の演算は図13のステップS204およびS206に対応する。ステップS302の後にステップS304が続き、そこでタスクキュー27が空であるかどうか、またはタスクリスト135における残りのサブ画面タスクのすべてが他の処理スレッドによってロックされているかどうか、の判定が行われる。ステップS304において判定が「NO」である場合、ステップS304の後にステップS306が続き、そこで処理スレッドが(ステップS2081、2101および2121などの)PRステージ140の演算を実行し、1つのサブ画面タスクを消費または処理する。その後、ステップS306はループしてステップS302へ戻る。
【0071】
しかしながら、ステップS304において判定が「YES」である場合、ステップS304の後にステップS308が続き、そこでそれ以上の3Dグラフィックス演算があるかどうかの判定がなされる。ステップS308における判定が「NO」であり、タスクキュー27が空であるかまたは最後のパイプラインステージ(PRステージ140)によって空にされている(ステップS304)場合、3Dグラフィックスパイプライン100の演算は本質的に完了である。したがって、方法300は終わる。ステップS308は、ただ方法300を終えるために使用される基準の一実施例である。したがって、他の基準をそれに応じて方法300において使用し、配置することができる。
【0072】
ステップS308における判定が「YES」である場合、ステップS308の後にステップS310が続き、そこで、VPステージ110における頂点処理が少なくとも1つの三角形を表す頂点出力情報を生成するために実行される。ステップS310の後にステップS312が続き、そこで、ステップS310において作成された頂点情報がタスクキュー27におけるタスクリスト135への追加のためにSSDステージ130に送られる。次いでステップS312はループしてステップS302へ戻り、そこで処理スレッドが再びタスクキュー27を点検する。通常、ステップS310において、処理スレッドはVPステージ110の関数を呼び出す。
【0073】
さらなる注記として、ステップS304における評価基準は変化してもよい。たとえば、始めに、ステップS304における評価基準は、サブ画面タスクの数を、PRステージ140用にタスクキュー27におけるサブ画面タスクの数を示すウォーターマーク(図6)またはしきい値と比較することができる。サブ画面タスクの数がウォーターマークより少ない、またはウォーターマークの下である(すなわち、多くのサブ画面タスクがピクセルレンダリングのためのタスクキューにないことを示す)場合、ステップS304の後にステップS308が続く。しかしながら、サブ画面タスクの数がウォーターマークより多いかまたはウォーターマークを超える場合、処理スレッドはステップS306においてPRステージ140の演算を実行する。
【0074】
しかしながら、タスクキュー27におけるサブ画面タスクの数が所定数のループの後にウォーターマークレベルより下に残っていると、評価基準を変える(下げる)ことができる。たとえば、評価基準は空に設定してもよく、および/または、すべてサブ画面タスクはロックされる。したがって、S304の評価基準を前後に変化させて、PRステージ140とVPステージ110との間で、好ましくはPRステージ140の方へ、負荷を分散することができる。
【0075】
VPステージ110の階層またはレイヤに関して、あるいは図15のステップS310において、様々なキューにおけるデータのための階層検査を評価することができる。たとえば、ステップS310中の処理スレッドは、最初にプリミティブキュー26または他の中間階層もしくはレイヤを検査して、その後にVPステージ110においてその他のより高い階層またはレイヤのいずれかを検査することができる。中間階層またはレイヤにおけるデータが対応するキューの中にある場合、処理スレッドは、より低い階層またはレイヤ用に階層またはレイヤからのデータを処理して、頂点出力情報を生成することができる。
【0076】
VPステージバランシングのために、処理スレッドは、図13に関して上に説明したものと同様の方法で、キューのいずれかにおけるデータを捕らえてロックする。
【0077】
方法300は、あらゆる処理スレッドPT1、PT2、...PTXが等しく作られて、機能を維持して追加するためにより容易である同一のプログラムコードを動かすことを可能にする。方法300はまた、処理スレッド間でオーバヘッドを切り替えることを回避することもできる。
【0078】
方法300は、PRステージ140が優先される3Dグラフィックスパイプライン100のステージ間で自動的に作業負荷を分散する。さらにまた、負荷分散は、マネージャスレッドなしでパイプラインステージ110、130および140の各々の間で自動的に作業負荷を分散する。負荷分散は、3Dグラフィックスパイプライン100の処理演算からスレッドを追加または取り除くことによってスケーラブルとなる。負荷分散は、最小のオーバヘッドを有する処理スレッドの各々の間に、ほとんど通信を必要としない。
【0079】
例示的な実施形態では、方法300は、ハードウェア、ソフトウェア、ファームウェア、または1つまたは複数のコンピュータ実行可能命令を備えるコンピュータプログラム製品の形でのこれらの任意の組合せに、実装できる。ソフトウェアに実装されると、コンピュータプログラム製品は、コンピュータ記憶媒体およびコンピュータ通信媒体を含むコンピュータ可読媒体の上に格納でき、またはこれを使用して伝送できる。
【0080】
「コンピュータ記憶媒体」という用語は、本明細書では、コンピュータに方法を実行させる命令を格納するようになっているいかなる媒体も指す。限定ではなく例として、コンピュータ記憶媒体は、電子メモリ素子(たとえば、RAM、ROM、EEPROMなど)、光学的メモリ素子(たとえば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)など)、または磁気記憶装置(たとえば、ハードディスク、フラッシュドライブ、テープ駆動装置など)、またはコンピュータプログラム製品を格納するようになっている他のメモリ素子、またはそのようなメモリ素子の組合せを含む、ソリッドステートメモリ素子を備えることができる。
【0081】
「コンピュータ通信媒体」という用語は、本明細書では、たとえば、変調された搬送波、光学的信号、DCまたはAC電流、および類似の手段を使用してあちこち転転とコンピュータプログラム製品を伝送するようになっている、いかなる物理インタフェースも指す。限定ではなく例として、コンピュータ通信媒体は、ツイストワイヤペア、印刷ケーブルまたはフラットケーブル、同軸ケーブル、光ファイバーケーブル、デジタル加入者線(DSL)、または他の有線、無線、または光学的直列または並列インタフェース、もしくはそれらの組合せを備えることができる。
【0082】
開示された実施形態の上記の説明は、当業者が開示を作製または使用することを可能にするために提供される。これらの実施形態への様々な変更形態は、当業者にすぐに明らかになり、本明細書で定義された全体的な原理は本開示の精神または範囲から逸脱することなく他の実施形態に適用することができる。したがって、本開示は、本明細書で示される実施形態に限定されることが意図されず、本明細書で開示された原理と新規性のある特徴とに一致する最大範囲が認められるべきである。
【特許請求の範囲】
【請求項1】
データが3次元グラフィックスパイプラインのピクセルレンダリング演算に利用可能であるときに、各処理スレッドが頂点処理演算より前記ピクセルレンダリング演算を優先させる複数の処理スレッドを備えるプロセッサ。
【請求項2】
前記複数の処理スレッドが並行に独立して動作する請求項1に記載のプロセッサ。
【請求項3】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項1に記載のプロセッサ。
【請求項4】
各処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記サブ画面からタスクリストの中にサブ画面タスクを作成して格納し、前記サブ画面タスクはデータである請求項3に記載のプロセッサ。
【請求項5】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項4に記載のプロセッサ。
【請求項6】
複数の処理スレッドであって、各処理スレッドは、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定し、前記サブ画面タスクが利用可能である場合には、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行し、前記サブ画面タスクが利用可能でない場合には、頂点処理演算を実行し、これによって3次元(3D)グラフィックスパイプラインの作業負荷を分散する前記複数の処理スレッドを備えるプロセッサ。
【請求項7】
前記複数の処理スレッドが並行に独立して動作する請求項6に記載のプロセッサ。
【請求項8】
各処理スレッドが、前記頂点処理演算を実行するときに、前記頂点処理演算の中間階層のデータのためにキューを検査し、前記キューが前記データを有する場合、前記中間階層の前記データを処理する請求項6に記載のプロセッサ。
【請求項9】
前記処理スレッドが、前記頂点処理演算を実行するときに、前記中間階層の前記キューが空である場合には、前記頂点処理演算のより高い階層のキューからのデータを処理する請求項8に記載のプロセッサ。
【請求項10】
前記処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項8に記載のプロセッサ。
【請求項11】
前記処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記タスクリストの中に前記サブ画面タスクを作成して格納する請求項10に記載のプロセッサ。
【請求項12】
前記処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項11に記載のプロセッサ。
【請求項13】
並行に独立して動作する前記複数の処理スレッドが、前記頂点処理演算より前記ピクセルレンダリング演算を優先させる請求項12に記載のプロセッサ。
【請求項14】
携帯情報端末(PDA)、Palm Pilot、移動電話、セルラ電話、衛星電話、ラップトップ、ノートブック、タブレット型PCおよび無線通信デバイスのうちの1つに埋められた請求項6に記載のプロセッサ。
【請求項15】
複数の処理スレッドを有するプロセッサであって、各処理スレッドが、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定し、前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行し、前記サブ画面タスクが利用可能でない場合、頂点処理演算を実行し、これによって3次元(3D)グラフィックスパイプラインの作業負荷を分散する、プロセッサと、
前記タスクリストを格納するために前記プロセッサに結合されたメモリと、を備える無線デバイス。
【請求項16】
前記複数の処理スレッドが並行に独立して動作する請求項15に記載のデバイス。
【請求項17】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項15に記載のデバイス。
【請求項18】
各処理スレッドが表示領域の前記頂点出力情報をサブ画面に分割し、前記サブ画面から前記タスクリストの中に前記サブ画面タスクを作成して格納する請求項17に記載のデバイス。
【請求項19】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項18に記載のデバイス。
【請求項20】
複数の処理スレッドを有するプロセッサであって、各処理スレッドが、データが3次元グラフィックスパイプラインのピクセルレンダリング演算に利用可能であるときに、頂点処理演算より前記ピクセルレンダリング演算を優先させるプロセッサと、
前記プロセッサに結合されたメモリと、を備える無線デバイス。
【請求項21】
前記複数の処理スレッドが並行に独立して動作する請求項20に記載のデバイス。
【請求項22】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項20に記載のデバイス。
【請求項23】
各処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記サブ画面から前記タスクリストの中に前記サブ画面タスクを作成して格納し、前記サブ画面タスクはデータである請求項22に記載のデバイス。
【請求項24】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項22に記載のデバイス。
【請求項25】
コンピュータ可読媒体を含むコンピュータプログラム製品であって、前記コンピュータ可読媒体が、
ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定するための第1の命令列と、
前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行するための第2の命令列と、
3次元(3D)グラフィックスパイプラインの作業負荷を分散するために、前記サブ画面タスクが利用可能でない場合、頂点処理演算を実行するための第3の命令列と、をコンピュータに実行させるための命令を有するコンピュータプログラム製品。
【請求項26】
前記第3の命令列が3Dグラフィックスイメージの頂点出力情報を作成する請求項25に記載のコンピュータプログラム製品。
【請求項27】
表示領域に重ね合わせた前記頂点出力情報をサブ画面に分割し、前記タスクリストに前記サブ画面を表すサブ画面タスクを作成して格納するための第4の命令列をさらに備える請求項26に記載のコンピュータプログラム製品。
【請求項28】
前記第2の命令列が、前記サブ画面タスクにおけるピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項25に記載のコンピュータプログラム製品。
【請求項29】
ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを処理スレッドによって判定し、
前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記処理スレッドによって前記ピクセルレンダリング演算を実行し、
前記サブ画面タスクが利用可能でない場合、前記処理スレッドによって頂点処理演算を実行し、これによって3次元(3D)グラフィックスパイプラインの作業負荷を分散することを備える方法。
【請求項30】
前記判定と前記ピクセルレンダリング演算および頂点処理演算の前記実行またはこれらの置換を前記3Dグラフィックスパイプラインによって使用されるプロセッサの1セットの処理スレッドによって並行に繰り返し、一方で前記判定と前記ピクセルレンダリングの前記実行とを優先させることをさらに備える請求項29に記載の方法。
【請求項31】
前記頂点処理演算の前記実行は、前記頂点処理演算を実行する中間階層からのデータのためのキューを検査し、前記中間階層のための前記キューがデータを有する場合には前記中間階層のための前記データを処理することを含む請求項29に記載の方法。
【請求項32】
前記頂点処理演算の前記実行は、前記中間階層のための前記キューが空である場合、前記頂点処理演算を実行するより高い階層のキューからのデータを処理することをさらに含む請求項31に記載の方法。
【請求項33】
前記頂点処理演算の前記実行は、3Dグラフィックスイメージの頂点出力情報を作成することを含む請求項29に記載の方法。
【請求項34】
表示領域の前記頂点出力情報をサブ画面に分割することと、前記サブ画面のサブ画面タスクを前記タスクリストの中に作成して格納することとをさらに備える請求項33に記載の方法。
【請求項35】
前記ピクセルレンダリング演算は、前記サブ画面タスクのピクセルをラスタ化し、前記ピクセルをブレンディングし、前記ピクセルをテクスチャ化することを含む請求項34に記載の方法。
【請求項36】
前記判定と前記ピクセルレンダリング演算および頂点処理演算の前記実行またはこれらの置換を前記3Dグラフィックスによって使用されるプロセッサの1セットの処理スレッドによって並行に繰り返すことをさらに備える請求項35に記載の方法。
【請求項1】
データが3次元グラフィックスパイプラインのピクセルレンダリング演算に利用可能であるときに、各処理スレッドが頂点処理演算より前記ピクセルレンダリング演算を優先させる複数の処理スレッドを備えるプロセッサ。
【請求項2】
前記複数の処理スレッドが並行に独立して動作する請求項1に記載のプロセッサ。
【請求項3】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項1に記載のプロセッサ。
【請求項4】
各処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記サブ画面からタスクリストの中にサブ画面タスクを作成して格納し、前記サブ画面タスクはデータである請求項3に記載のプロセッサ。
【請求項5】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項4に記載のプロセッサ。
【請求項6】
複数の処理スレッドであって、各処理スレッドは、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定し、前記サブ画面タスクが利用可能である場合には、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行し、前記サブ画面タスクが利用可能でない場合には、頂点処理演算を実行し、これによって3次元(3D)グラフィックスパイプラインの作業負荷を分散する前記複数の処理スレッドを備えるプロセッサ。
【請求項7】
前記複数の処理スレッドが並行に独立して動作する請求項6に記載のプロセッサ。
【請求項8】
各処理スレッドが、前記頂点処理演算を実行するときに、前記頂点処理演算の中間階層のデータのためにキューを検査し、前記キューが前記データを有する場合、前記中間階層の前記データを処理する請求項6に記載のプロセッサ。
【請求項9】
前記処理スレッドが、前記頂点処理演算を実行するときに、前記中間階層の前記キューが空である場合には、前記頂点処理演算のより高い階層のキューからのデータを処理する請求項8に記載のプロセッサ。
【請求項10】
前記処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項8に記載のプロセッサ。
【請求項11】
前記処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記タスクリストの中に前記サブ画面タスクを作成して格納する請求項10に記載のプロセッサ。
【請求項12】
前記処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項11に記載のプロセッサ。
【請求項13】
並行に独立して動作する前記複数の処理スレッドが、前記頂点処理演算より前記ピクセルレンダリング演算を優先させる請求項12に記載のプロセッサ。
【請求項14】
携帯情報端末(PDA)、Palm Pilot、移動電話、セルラ電話、衛星電話、ラップトップ、ノートブック、タブレット型PCおよび無線通信デバイスのうちの1つに埋められた請求項6に記載のプロセッサ。
【請求項15】
複数の処理スレッドを有するプロセッサであって、各処理スレッドが、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定し、前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行し、前記サブ画面タスクが利用可能でない場合、頂点処理演算を実行し、これによって3次元(3D)グラフィックスパイプラインの作業負荷を分散する、プロセッサと、
前記タスクリストを格納するために前記プロセッサに結合されたメモリと、を備える無線デバイス。
【請求項16】
前記複数の処理スレッドが並行に独立して動作する請求項15に記載のデバイス。
【請求項17】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項15に記載のデバイス。
【請求項18】
各処理スレッドが表示領域の前記頂点出力情報をサブ画面に分割し、前記サブ画面から前記タスクリストの中に前記サブ画面タスクを作成して格納する請求項17に記載のデバイス。
【請求項19】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項18に記載のデバイス。
【請求項20】
複数の処理スレッドを有するプロセッサであって、各処理スレッドが、データが3次元グラフィックスパイプラインのピクセルレンダリング演算に利用可能であるときに、頂点処理演算より前記ピクセルレンダリング演算を優先させるプロセッサと、
前記プロセッサに結合されたメモリと、を備える無線デバイス。
【請求項21】
前記複数の処理スレッドが並行に独立して動作する請求項20に記載のデバイス。
【請求項22】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは3Dグラフィックスイメージの頂点出力情報を作成する請求項20に記載のデバイス。
【請求項23】
各処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記サブ画面から前記タスクリストの中に前記サブ画面タスクを作成して格納し、前記サブ画面タスクはデータである請求項22に記載のデバイス。
【請求項24】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項22に記載のデバイス。
【請求項25】
コンピュータ可読媒体を含むコンピュータプログラム製品であって、前記コンピュータ可読媒体が、
ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定するための第1の命令列と、
前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行するための第2の命令列と、
3次元(3D)グラフィックスパイプラインの作業負荷を分散するために、前記サブ画面タスクが利用可能でない場合、頂点処理演算を実行するための第3の命令列と、をコンピュータに実行させるための命令を有するコンピュータプログラム製品。
【請求項26】
前記第3の命令列が3Dグラフィックスイメージの頂点出力情報を作成する請求項25に記載のコンピュータプログラム製品。
【請求項27】
表示領域に重ね合わせた前記頂点出力情報をサブ画面に分割し、前記タスクリストに前記サブ画面を表すサブ画面タスクを作成して格納するための第4の命令列をさらに備える請求項26に記載のコンピュータプログラム製品。
【請求項28】
前記第2の命令列が、前記サブ画面タスクにおけるピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項25に記載のコンピュータプログラム製品。
【請求項29】
ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを処理スレッドによって判定し、
前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記処理スレッドによって前記ピクセルレンダリング演算を実行し、
前記サブ画面タスクが利用可能でない場合、前記処理スレッドによって頂点処理演算を実行し、これによって3次元(3D)グラフィックスパイプラインの作業負荷を分散することを備える方法。
【請求項30】
前記判定と前記ピクセルレンダリング演算および頂点処理演算の前記実行またはこれらの置換を前記3Dグラフィックスパイプラインによって使用されるプロセッサの1セットの処理スレッドによって並行に繰り返し、一方で前記判定と前記ピクセルレンダリングの前記実行とを優先させることをさらに備える請求項29に記載の方法。
【請求項31】
前記頂点処理演算の前記実行は、前記頂点処理演算を実行する中間階層からのデータのためのキューを検査し、前記中間階層のための前記キューがデータを有する場合には前記中間階層のための前記データを処理することを含む請求項29に記載の方法。
【請求項32】
前記頂点処理演算の前記実行は、前記中間階層のための前記キューが空である場合、前記頂点処理演算を実行するより高い階層のキューからのデータを処理することをさらに含む請求項31に記載の方法。
【請求項33】
前記頂点処理演算の前記実行は、3Dグラフィックスイメージの頂点出力情報を作成することを含む請求項29に記載の方法。
【請求項34】
表示領域の前記頂点出力情報をサブ画面に分割することと、前記サブ画面のサブ画面タスクを前記タスクリストの中に作成して格納することとをさらに備える請求項33に記載の方法。
【請求項35】
前記ピクセルレンダリング演算は、前記サブ画面タスクのピクセルをラスタ化し、前記ピクセルをブレンディングし、前記ピクセルをテクスチャ化することを含む請求項34に記載の方法。
【請求項36】
前記判定と前記ピクセルレンダリング演算および頂点処理演算の前記実行またはこれらの置換を前記3Dグラフィックスによって使用されるプロセッサの1セットの処理スレッドによって並行に繰り返すことをさらに備える請求項35に記載の方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【公表番号】特表2010−516001(P2010−516001A)
【公表日】平成22年5月13日(2010.5.13)
【国際特許分類】
【出願番号】特願2009−545664(P2009−545664)
【出願日】平成20年1月9日(2008.1.9)
【国際出願番号】PCT/US2008/050654
【国際公開番号】WO2008/086432
【国際公開日】平成20年7月17日(2008.7.17)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】
【公表日】平成22年5月13日(2010.5.13)
【国際特許分類】
【出願日】平成20年1月9日(2008.1.9)
【国際出願番号】PCT/US2008/050654
【国際公開番号】WO2008/086432
【国際公開日】平成20年7月17日(2008.7.17)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】
[ Back to top ]