(57)【要約】  デバイスは、３次元（３Ｄ）グラフィックスパイプラインの頂点処理ステージ、サブ画面分割ステージおよびピクセルレンダリングステージを処理するためのプロセッサを有する。プロセッサは、ピクセルレンダリングステージのための処理を他のステージより優先させることによって３Ｄグラフィックスパイプラインの作業負荷を分散する処理スレッドを含む。並行に独立して動作する各処理スレッドはサブ画面タスクのタスクリストにおけるタスクのレベルを検査する。レベルがしきい値より下にある、空である、またはサブ画面タスクがすべてロックされている場合、処理スレッドは頂点処理ステージにループする。そうでない場合、処理スレッドはピクセルレンダリングステージ中にサブ画面タスクを処理する。
2010516001.tif 000002
【特許請求の範囲】
【請求項１】
データが３次元グラフィックスパイプラインのピクセルレンダリング演算に利用可能であるときに、各処理スレッドが頂点処理演算より前記ピクセルレンダリング演算を優先させる複数の処理スレッドを備えるプロセッサ。
【請求項２】
前記複数の処理スレッドが並行に独立して動作する請求項１に記載のプロセッサ。
【請求項３】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは３Ｄグラフィックスイメージの頂点出力情報を作成する請求項１に記載のプロセッサ。
【請求項４】
各処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記サブ画面からタスクリストの中にサブ画面タスクを作成して格納し、前記サブ画面タスクはデータである請求項３に記載のプロセッサ。
【請求項５】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項４に記載のプロセッサ。
【請求項６】
複数の処理スレッドであって、各処理スレッドは、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定し、前記サブ画面タスクが利用可能である場合には、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行し、前記サブ画面タスクが利用可能でない場合には、頂点処理演算を実行し、これによって３次元（３Ｄ）グラフィックスパイプラインの作業負荷を分散する前記複数の処理スレッドを備えるプロセッサ。
【請求項７】
前記複数の処理スレッドが並行に独立して動作する請求項６に記載のプロセッサ。
【請求項８】
各処理スレッドが、前記頂点処理演算を実行するときに、前記頂点処理演算の中間階層のデータのためにキューを検査し、前記キューが前記データを有する場合、前記中間階層の前記データを処理する請求項６に記載のプロセッサ。
【請求項９】
前記処理スレッドが、前記頂点処理演算を実行するときに、前記中間階層の前記キューが空である場合には、前記頂点処理演算のより高い階層のキューからのデータを処理する請求項８に記載のプロセッサ。
【請求項１０】
前記処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは３Ｄグラフィックスイメージの頂点出力情報を作成する請求項８に記載のプロセッサ。
【請求項１１】
前記処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記タスクリストの中に前記サブ画面タスクを作成して格納する請求項１０に記載のプロセッサ。
【請求項１２】
前記処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項１１に記載のプロセッサ。
【請求項１３】
並行に独立して動作する前記複数の処理スレッドが、前記頂点処理演算より前記ピクセルレンダリング演算を優先させる請求項１２に記載のプロセッサ。
【請求項１４】
携帯情報端末（ＰＤＡ）、Ｐａｌｍ  Ｐｉｌｏｔ、移動電話、セルラ電話、衛星電話、ラップトップ、ノートブック、タブレット型ＰＣおよび無線通信デバイスのうちの１つに埋められた請求項６に記載のプロセッサ。
【請求項１５】
複数の処理スレッドを有するプロセッサであって、各処理スレッドが、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定し、前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行し、前記サブ画面タスクが利用可能でない場合、頂点処理演算を実行し、これによって３次元（３Ｄ）グラフィックスパイプラインの作業負荷を分散する、プロセッサと、
前記タスクリストを格納するために前記プロセッサに結合されたメモリと、を備える無線デバイス。
【請求項１６】
前記複数の処理スレッドが並行に独立して動作する請求項１５に記載のデバイス。
【請求項１７】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは３Ｄグラフィックスイメージの頂点出力情報を作成する請求項１５に記載のデバイス。
【請求項１８】
各処理スレッドが表示領域の前記頂点出力情報をサブ画面に分割し、前記サブ画面から前記タスクリストの中に前記サブ画面タスクを作成して格納する請求項１７に記載のデバイス。
【請求項１９】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項１８に記載のデバイス。
【請求項２０】
複数の処理スレッドを有するプロセッサであって、各処理スレッドが、データが３次元グラフィックスパイプラインのピクセルレンダリング演算に利用可能であるときに、頂点処理演算より前記ピクセルレンダリング演算を優先させるプロセッサと、
前記プロセッサに結合されたメモリと、を備える無線デバイス。
【請求項２１】
前記複数の処理スレッドが並行に独立して動作する請求項２０に記載のデバイス。
【請求項２２】
各処理スレッドが前記頂点処理演算を実行するときに、前記処理スレッドは３Ｄグラフィックスイメージの頂点出力情報を作成する請求項２０に記載のデバイス。
【請求項２３】
各処理スレッドが表示領域のための前記頂点出力情報をサブ画面に分割し、前記サブ画面から前記タスクリストの中に前記サブ画面タスクを作成して格納し、前記サブ画面タスクはデータである請求項２２に記載のデバイス。
【請求項２４】
各処理スレッドが、前記ピクセルレンダリング演算を実行するときに、前記サブ画面タスクのピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項２２に記載のデバイス。
【請求項２５】
コンピュータ可読媒体を含むコンピュータプログラム製品であって、前記コンピュータ可読媒体が、
ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを判定するための第１の命令列と、
前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記ピクセルレンダリング演算を実行するための第２の命令列と、
３次元（３Ｄ）グラフィックスパイプラインの作業負荷を分散するために、前記サブ画面タスクが利用可能でない場合、頂点処理演算を実行するための第３の命令列と、をコンピュータに実行させるための命令を有するコンピュータプログラム製品。
【請求項２６】
前記第３の命令列が３Ｄグラフィックスイメージの頂点出力情報を作成する請求項２５に記載のコンピュータプログラム製品。
【請求項２７】
表示領域に重ね合わせた前記頂点出力情報をサブ画面に分割し、前記タスクリストに前記サブ画面を表すサブ画面タスクを作成して格納するための第４の命令列をさらに備える請求項２６に記載のコンピュータプログラム製品。
【請求項２８】
前記第２の命令列が、前記サブ画面タスクにおけるピクセルのラスタ化、前記ピクセルのブレンディング、および前記ピクセルのテクスチャ化を実行する請求項２５に記載のコンピュータプログラム製品。
【請求項２９】
ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを処理スレッドによって判定し、
前記サブ画面タスクが利用可能である場合、前記サブ画面タスク上で前記処理スレッドによって前記ピクセルレンダリング演算を実行し、
前記サブ画面タスクが利用可能でない場合、前記処理スレッドによって頂点処理演算を実行し、これによって３次元（３Ｄ）グラフィックスパイプラインの作業負荷を分散することを備える方法。
【請求項３０】
前記判定と前記ピクセルレンダリング演算および頂点処理演算の前記実行またはこれらの置換を前記３Ｄグラフィックスパイプラインによって使用されるプロセッサの１セットの処理スレッドによって並行に繰り返し、一方で前記判定と前記ピクセルレンダリングの前記実行とを優先させることをさらに備える請求項２９に記載の方法。
【請求項３１】
前記頂点処理演算の前記実行は、前記頂点処理演算を実行する中間階層からのデータのためのキューを検査し、前記中間階層のための前記キューがデータを有する場合には前記中間階層のための前記データを処理することを含む請求項２９に記載の方法。
【請求項３２】
前記頂点処理演算の前記実行は、前記中間階層のための前記キューが空である場合、前記頂点処理演算を実行するより高い階層のキューからのデータを処理することをさらに含む請求項３１に記載の方法。
【請求項３３】
前記頂点処理演算の前記実行は、３Ｄグラフィックスイメージの頂点出力情報を作成することを含む請求項２９に記載の方法。
【請求項３４】
表示領域の前記頂点出力情報をサブ画面に分割することと、前記サブ画面のサブ画面タスクを前記タスクリストの中に作成して格納することとをさらに備える請求項３３に記載の方法。
【請求項３５】
前記ピクセルレンダリング演算は、前記サブ画面タスクのピクセルをラスタ化し、前記ピクセルをブレンディングし、前記ピクセルをテクスチャ化することを含む請求項３４に記載の方法。
【請求項３６】
前記判定と前記ピクセルレンダリング演算および頂点処理演算の前記実行またはこれらの置換を前記３Ｄグラフィックスによって使用されるプロセッサの１セットの処理スレッドによって並行に繰り返すことをさらに備える請求項３５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に画像処理に関し、より詳しくは、インタリーブ型マルチスレッドプロセッサによって処理される高速ピクセルレンダリング処理のための３次元（３Ｄ）グラフィックスパイプラインを負荷分散するための技術に関する。
【背景技術】
【０００２】
３Ｄオブジェクトに関する情報を表示可能なビットマップに変換することは、ピクセルレンダリングとして知られており、かなりのメモリと処理能力とを必要とする。過去において、３Ｄグラフィックスはパワフルなワークステーションにおいてのみ利用可能であったが、現在では、３Ｄグラフィックスアクセラレータはパーソナルコンピュータ（ＰＣ）中で一般に見られる。ハードウェアグラフィックスアクセラレータは、メモリ（たとえば命令ランダムアクセスメモリ（ＩＲＡＭ））と、３次元レンダリング演算の多くを処理するための専用マイクロプロセッサとを含む。デスクトップのためのＯｐｅｎ  ＧＬ（登録商標）（オープングラフィックスライブラリ）は、３Ｄおよび２Ｄコンピュータグラフィックスを作成する書込みアプリケーションのためのアプリケーションプログラミングインタフェース（ＡＰＩ）を定義している。ＡＰＩは、プリミティブから複雑な３次元場面を描画するための何百もの関数を含む。
【０００３】
ＯｐｅｎＧＬ（登録商標）ＥＳは、ソフトウェアとグラフィックスの間のインタフェースを作成するデスクトップＯｐｅｎＧＬ（登録商標）のサブセットである。３Ｄグラフィックスエンジン（ＯｐｅｎＧＬ（登録商標）ＥＳ）は、概して２つの部分に実装される。第１の部分は、頂点を処理する関数を含んでおり、デジタル信号処理（ＤＳＰ）ファームウェアに通常実装される。第２の部分は、ピクセルレンダリングのための関数を含んでおり、専用ハードウェアグラフィックスアクセラレータに実装される。ピクセルレンダリングを実行する第２の部分は、従来の３Ｄグラフィックスエンジンの最後のパイプラインステージである。最後のパイプラインステージは、グラフィックスイメージのピクセル表現を作成するために入力三角形集合を処理する。しかしながら、最後のパイプラインステージは通常、エンジンにおける全３Ｄグラフィックスパイプラインのパフォーマンスボトルネックである。したがって、ピクセルレンダリングのための最後のパイプラインステージのパフォーマンス（ピクセル毎秒）を高めることは非常に重要である。
【０００４】
通常、ピクセルレンダリング演算の間、各入力三角形は、三角形が入力されるのと同じ順序で順次処理される必要がある。したがって、マルチスレッドを有するプロセッサは、入力三角形を処理するためにインタリーブ型並行処理を利用することを防止される。
【０００５】
さらにまた、ハードウェアグラフィックスアクセラレータは、一般に柔軟ではなく、または容易にスケーラブルではない。したがって、ハードウェアグラフィックスアクセラレータは、新機能を容易に追加し、（ＯｐｅｎＧＬ（登録商標）ＥＳ  １．０、１．１．．．などの）３Ｄグラフィックス規格のより高いバージョンをサポートし、様々なアプリケーション構成をサポートし、要件をカスタマイズすることができない。さらにまた、ハードウェアグラフィックスアクセラレータは、シリコンコストおよびシステム電源消費を最適化するために、様々なパフォーマンス要件（フレーム率、画面サイズ、ピクセルレート、三角形描画率など）のために容易に基準化されない。
【０００６】
容易にわかるように、専用ハードウェアグラフィックスアクセラレータは、移動電話またはセルラ電話など小型携帯コンピューティングデバイス中でシリコン領域を占有する。したがって、専用ハードウェアグラフィックスアクセラレータは、使用される専用ハードウェアグラフィックスアクセラレータおよびＩＲＡＭの包含によって携帯コンピューティングデバイスの総コストを増加させる。専用ハードウェアグラフィックスアクセラレータの使用はまた、オーバヘッドを追加し電力を消費するＤＳＰによるデータトラフィックを生じる。
【０００７】
したがって、当技術分野では、より速いピクセルレンダリング処理を提供するために３次元（３Ｄ）グラフィックスパイプラインを負荷分散する技術が必要である。
【発明の概要】
【０００８】
専用ハードウェアグラフィックスアクセラレータなしでより速いピクセルレンダリング処理を提供する３次元（３Ｄ）グラフィックスパイプラインの技術を、本明細書で説明する。一態様では、複数の処理スレッドを備えるプロセッサが実装される。各処理スレッドは、ピクセルレンダリング演算のためのサブ画面タスクがタスクリストにおいて利用可能であるかどうかを決定する。サブ画面タスクが利用可能である場合、各処理スレッドはサブ画面タスク上でピクセルレンダリング演算をさらに実行する。しかしながら、サブ画面タスクが利用できない場合、各処理スレッドは３次元（３Ｄ）グラフィックスパイプラインの作業負荷を分散するために頂点処理演算を実行する。
【０００９】
別の態様では、複数の処理スレッドを有するプロセッサを備える無線デバイスが実装される。データがピクセルレンダリング演算に利用可能であるとき、各処理スレッドは頂点処理演算より３次元グラフィックスパイプラインのピクセルレンダリング演算を優先させる。プロセッサはメモリに結合される。
【００１０】
本開示の様々な態様および実施形態について以下でさらに詳細に説明する。
【００１１】
本開示の態様および実施形態は、同様の参照文字が全体を通じて対応して識別される図面と関連して、以下に示す詳細な説明からより明らかになろう。
【図面の簡単な説明】
【００１２】
【図１】３Ｄ画像化装置の全般的ブロック図を示す図。
【図２】共用メモリと接続されるインタリーブ型マルチスレッドプロセッサを示す図。
【図３】各スレッドの詳細が示されたインタリーブ型マルチスレッドプロセッサの詳細を示す図。
【図４】実行時間に対する、６つのスレッドを有するマルチスレッドプロセッサによって処理されるインタリーブ型命令のコアパイプラインのグラフを示す図。
【図５】２つのスレッドによって処理される２つの並列命令セットを示す図。
【図６】例示的３Ｄ画像化装置における３Ｄグラフィックスパイプラインの全般的流れ図を示す図。
【図７】３Ｄグラフィックスパイプラインのプロセスの全般的ブロック図を示す図。
【図８】（Ａ）は表示空間がＭ×Ｎグリッド（Ｍ＞１およびＮ＞１）に細分されていることを示す図、（Ｂ）は図８（Ａ）の細分された表示空間を処理するためのタスクリストを示す図。
【図９】表示空間がＭ×Ｎグリッド（Ｍ＝１およびＮ＞１）に細分されていることを示す図。
【図１０】表示空間がＭ×Ｎグリッド（Ｍ＞１およびＮ＝１）に細分されていることを示す図。
【図１１】複数のピクセルを有する頂点座標によって画定される三角形を示す図。
【図１２】１セットの４細分領域に細分された領域において三角形を処理するための命令演算のグラフィック表現を示す図。
【図１３】マルチスレッドプロセッサを用いる３Ｄグラフィックスパイプライン方法の流れ図を示す図。
【図１４】共用メモリにおけるパイプラインキューの全般的ブロック図を示す図。
【図１５】３Ｄグラフィックスパイプラインをスレッド当たりベースで負荷分散するための方法の流れ図を示す図。
【発明を実施するための形態】
【００１３】
「例示的」という語は、本明細書では「実施例、例または説明として役立つこと」を意味するために用いられる。本明細書で「例示的」として説明されるいかなる実施形態または設計も、必ずしも他の実施形態または設計より好ましいまたは有利であると解釈すべきではない。
【００１４】
多くのゲームアプリケーションは、２次元（２Ｄ）空間（たとえば、表示画面）において３Ｄオブジェクトを表示する３次元（３Ｄ）グラフィックスアプリケーションを必要とする。２Ｄグラフィックスにおけるピクセルは位置、色および輝度のプロパティを有するが、３Ｄピクセルは、点が想像上のＺ軸上のどこにあるかを指示する深度プロパティを追加する。各ピクセルがそれ自体の深度値を有する３Ｄピクセルが結合されるにつれて、テクスチャが作り出される。
【００１５】
次に図１を参照すると、全体的に１０で示された３Ｄ画像化装置の実施形態が示されている。３Ｄ画像化装置１０は、通信ユニット１２、デジタル信号プロセッサ（ＤＳＰ）２０、表示領域１８を有する画面１６、メモリ２４および入出力（Ｉ／Ｏ）装置４５を含む。共用メモリ２４は、ユーザによって所望されるように、または装置１０の機能群をサポートするために、ゲームアプリケーションまたは他のアプリケーションを（すなわち有線または無線ネットワークを有する双方向通信、および他のソフトウェアアプリケーションのために）格納することができる。入出力装置４５は、キーパッド、キーボードまたはデータ通信ポートを含むことができる。画面１６は、表示領域１８において２Ｄ情報ならびに３Ｄグラフィックスを表示する働きをする。
【００１６】
３Ｄ画像化装置１０は、携帯情報端末（ＰＤＡ）、および移動、セルラまたは衛星電話、ラップトップ、ノートブック、タブレット型ＰＣ、Ｐａｌｍ  Ｐｉｌｏｔ、無線通信デバイスなどのうちの１つを含むことができる。
【００１７】
次に図２〜図５を参照すると、例示的な実施形態では、ＤＳＰ２０はインタリーブ型マルチスレッドプロセッサ２２を含む。インタリーブ型マルチスレッドプロセッサ２２は、複数の処理スレッド（ＰＴ）ＰＴ１、ＰＴ２、．．．ＰＴＸを有する。各処理スレッド（ＰＴ）ＰＴ１、ＰＴ２、．．．ＰＴＸは、共用メモリ２４として表される同じメモリを共用する。各処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸは、それぞれのワンセットの命令２６１．．．２６Ｘ、コア２７１．．．２７Ｘ（処理装置）およびレジスタファイル２８１．．．２８Ｘを含む。各コア２７１．．．２７Ｘの出力は、共用メモリ２４と通信する。命令２６１．．．２６Ｘは、下記に定める演算、および３Ｄ画像化装置１０のマルチメディアなどの機能セットを実行するための他の演算を実行するプログラムコードを含む。コア２７１．．．２７Ｘは、命令２６１．．．２６Ｘを実行する。
【００１８】
レジスタファイル２８１．．．２８Ｘは１組の汎用レジスタであり、ＤＳＰ２０またはマイクロプロセッサの中心のステージである。これらのレジスタファイル２８１．．．２８Ｘは、すべてのオペランド（通常、メモリからロードされる）を保持し、すなわち、共用メモリ２４に結果を格納する前に（算術演算、論理演算など）すべての演算からのすべての結果を保持する。
【００１９】
一部のＤＳＰアーキテクチャは４つのスレッドを有する。とはいえ、ＤＳＰ２０は、限定はしないが、並行して動作する６つの処理スレッドなど、４つよりも多いスレッドを有することができる。例示的な実施形態では、各スレッド（ＰＴ）ＰＴ１、ＰＴ２、．．．ＰＴＸは、１秒当たり１００，０００，０００個の命令パケット（ＭＩＰＳ）を並行して提供する。各命令パケットは、４つの命令、２つの命令（Ｓｕｐスカラ）またはただ１つの命令であり得る。しかしながら、ＤＳＰ２０のアーキテクチャが命令間データの依存性によって生じる非効率性を取り除くので、１つの命令は効率のためには推奨されない。
【００２０】
スレッドまたはマルチスレッドという用語は、並行タスクの実行を説明するために使用される。単一パスの実行の代わりに、プログラム（演算）は、同時に実行する複数の実行スレッドに分割できる。例示的な実施形態では、開始スレッドがあり、これは関数呼出し（または命令）を必要とし、通常少なくとも２つの引数、すなわち（１）開始命令のアドレス、および（２）コンテキスト引数を必要とする。スレッドが動作および／または終了している間、このスレッドは、他の処理スレッドに関して２つの基本的なジョブを行うこと、すなわち（１）共用リソースを取得し、他のスレッドがそのようなリソースを使用するのを阻止すること、および（２）メッセージ（たとえば完了、準備完了など）を他のスレッドに安全に送信することが可能である。
【００２１】
次に図４を参照すると、インタリーブ型マルチスレッドパラレル処理のグラフが示されている。この例では、６つの処理スレッドＰＴ１、ＰＴ２、ＰＴ３、ＰＴ４、ＰＴ５およびＰＴ６がある。第１の処理スレッドＰＴ１は第１の命令セット１を処理する。これはコアパイプライン用の実行時間線の第１の（最上）行によって表される。コアパイプラインは、コア２７１、．．．２７Ｘによって表される。第１の命令セット１が第１の処理スレッドＰＴ１によって処理される間、第２の処理スレッドＰＴ２はその第１の命令セット１を処理する。これは実行時間線の第２の行によって表される。このように、第１の命令セット１は並行して処理されている。
【００２２】
第１および第２の処理スレッドＰＴ１およびＰＴ２がこれらの第１の命令セット１を処理する間に、第３の処理スレッドＰＴ３はその第１の命令セットを処理する。これはコアパイプライン用の実行時間線の第３の行によって表される。第４の処理スレッドＰＴ４はその第１の命令セット１を処理する。一方、第１、第２および第３の処理スレッドＰＴ１、ＰＴ２およびＰＴ３は、それらの関連する第１の命令セット１を処理し続ける。これはコアパイプライン用の実行時間線の第４の行によって表される。
【００２３】
第１、第２、第３および第４の処理スレッドＰＴ１、ＰＴ２、ＰＴ３およびＰＴ４がそれらの第１の命令セット１を処理し続ける間に、第５の処理スレッドＰＴ５はその第１の命令セット１を処理する。これはコアパイプライン用の実行時間線の第５の行によって表される。第１、第２、第３、第４および第５の処理スレッドＰＴ１、ＰＴ２、ＰＴ３、ＰＴ４およびＰＴ５がそれらの第１の命令セット１を処理し続ける間に、第６の処理スレッドＰＴ６はその第１の命令セット１を処理する。これはコアパイプライン用の実行時間線の第６の行によって表される。このように、処理スレッドによる命令の処理はインタリーブされる。
【００２４】
次に図４の第７の（最下）行を参照して、第１の処理スレッドＰＴ１がその第１の命令セット１を完了したと仮定すると、第２、第３、第４、第５および第６の処理スレッドＰＴ２、ＰＴ３、ＰＴ４、ＰＴ５およびＰＴ６がそれらの第１の命令セット１の処理を続ける間、第１の処理スレッドＰＴ１は第２の命令セット２を処理し始める。したがって、処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸの各々の処理は並行して行われ、インタリーブされる。
【００２５】
すべての処理スレッドのインタリーブ型処理を説明することは差し控える。したがって、説明のため、命令２６１および２６２を使用するインタリーブ型処理がミューテックスに関係するので、これを図５に示す。ミューテックスは、一度にただ１つの処理スレッドによって「所有される」ツールである。処理スレッドは、ミューテックスを取得しようとするとき、ミューテックスをＬＯＣＫする。しかしながら、ミューテックスがすでにＬＯＣＫされている場合、その処理スレッドは停止する。所有スレッドがミューテックスをＵＮＬＯＣＫすると、停止されたスレッドは再開され、ミューテックスのオーナー権を取得する。このプロセスを図５に示す。
【００２６】
第１の処理スレッドＰＴ１から開始して、命令２６１はステップＳ２２Ａから始まり、ここでノンクリティカルコードが実行される。ステップＳ２２Ａの後にステップＳ２４Ａが続き、そこで第１の処理スレッドＰＴ１がＬＯＣＫミューテックス１命令を実行する（ミューテックス１はＵＮＬＯＣＫされていると仮定する）。したがって、第１の処理スレッドＰＴ１はここでミューテックス１を所有する。ステップＳ２４Ａの後にステップＳ２６Ａが続き、そこでクリティカルコードが実行される。ステップＳ２６Ａの後にステップＳ２８Ａが続き、そこでクリティカルコードが完了した後に第１のスレッドＰＴ１がＵＮＬＯＣＫミューテックス１命令を実行する。その後、ステップＳ３０Ａにおいて、第１の処理スレッドＰＴ１はノンクリティカルコードの実行を再開する。
【００２７】
第１の処理スレッドＰＴ１と並行して、第２の処理スレッドＰＴ２は、ステップＳ２２Ｂにおいて命令２６２を開始し、ステップＳ２２Ｂではノンクリティカルコードが実行される。ステップＳ２２Ｂの後にステップＳ２４Ｂが続き、そこで第２の処理スレッドＰＴ２がステップＳ２４Ｂにおいてミューテックス１をＬＯＣＫすることを望む。しかしながら、ミューテックス１はＬＯＣＫＥＤ状態にある。したがって、第２の処理スレッドＰＴ２の演算は、第１の処理スレッドＰＴ１がステップＳ２８Ａにおいてミューテックス１をＵＮＬＯＣＫするまで停止される。次いでステップ２６Ｂが始まり、ここでクリティカルコードを実行することができる。ステップＳ２６Ｂの後にステップＳ２８Ｂが続き、そこでクリティカルコードが完了し、第２のスレッドＰＴ２がＵＮＬＯＣＫミューテックス１命令を実行する。その後、他の命令が続くことができる。
【００２８】
ミューテックスツールまたは別のトークンツールは、必要に応じてのみ、様々な処理スレッドにおけるクリティカルセクションの直列実行を保証するために使用される。これは直列化の実行でもあり、これは、一定のコードがそれが他のスレッドによるコードの実行と衝突する可能性があるときには並行して実行できないことを意味する。共用メモリ２４（共用リソース）が使用されるので、ミューテックスツールは有用である。
【００２９】
次に図６および図７を参照すると、全体的に１００で表された３Ｄグラフィックスパイプラインの全般的流れおよびブロック図の実施形態が示されている。３Ｄグラフィックスパイプライン１００は、画面１６の表示領域１８における３Ｄ表現の全タスクを概して３つのパイプラインステージ、すなわち、頂点処理（ＶＰ）ステージ１１０、画面細分（ＳＳＤ）ステージ１３０およびピクセルレンダリング（ＰＲ）ステージ１４０に分割する。動作中、頂点処理（ＶＰ）ステージ１１０は、ＯｐｅｎＧＬ（登録商標）またはＯｐｅｎＧＬ（登録商標）ＥＳにおいて現在実装されている関数または関数のサブセットのすべてを含み、デジタル信号プロセッサ（ＤＳＰ）２０によって処理される。画面１６は３Ｄグラフィックスパイプライン１００の一部ではないので、画面１６に向かう線はファントム線で示されている。
【００３０】
ＶＰステージ１１０は、モデルビュー変換演算１１２、射影演算１１４、選別演算１１６、照明およびカラーリング演算１１８、プリミティブアセンブリ演算１２０、クリッピング（すなわちユーザ定義のクリッピング）演算１２２、および透視分割およびビューポート演算１２４を含む。ＶＰステージ１１０のこれらの演算の各々はＯｐｅｎＧＬ（登録商標）またはＯｐｅｎＧＬ（登録商標）ＥＳにおいて明確に定義されている。
【００３１】
一般に、モデルビュー変換演算１１２は、オブジェクトモデルを所望の位置および方向に置く数学的演算を使用する。射影演算１１４は、近いものを大きくし、遠いものより小さくする数学的演算を使用する。オクルージョンは遠いオブジェクトの前の近いオブジェクトを描画する。選別およびクリッピング演算１１６および１２２は見えないものを破棄する。照明演算１１８は表面上のライトの効果を算出する。
【００３２】
例示的な実施形態では、ＶＰステージ１１０に１つの処理スレッドを実装することができる（図２および図３）。頂点出力情報は、三角形および表示領域１６におけるその位置を定めるための頂点情報を含む。頂点出力情報は表示領域１６の上で重ね合わされ、表示領域１６のピクセルはＯｐｅｎＧＬ（登録商標）、ＯｐｅｎＧＬ（登録商標）ＥＳまたは他のグラフィックスライブラリによる三角形を定めるために頂点出力情報を含む。
【００３３】
画面細分（ＳＳＤ）ステージ１３０は、表示領域１８をＭ×Ｎのサブ画面に分ける画面細分演算１３２を含む。表示領域１８は、頂点出力情報が重ね合わされた複数のピクセルＰ（図１１）から成り立っている。ＶＰステージ１１０からの頂点情報は、表示領域１８における重ね合わせのための三角形（たとえば、図８（Ａ）のＴ１およびＴ２）を画定する頂点情報（たとえば図１１のＶ１、Ｖ２およびＶ３）を提供する。頂点情報は頂点座標およびエッジ情報を含むことができる。一般に、各三角形の頂点出力情報は、閉じた区域を定めるためのただ１セットの数学的記述である。この数学的記述のセットは共用メモリ２４の中に格納され、その結果、各処理スレッド（ＰＴ１、ＰＴ２、．．．ＰＴＸ）は、数学的記述のセットを使用することができ、それ自体のサブ画面タスクの範囲内で各ピクセルＰ（図１１）を計算し、ピクセルが三角形内にあるかどうかを決定することができる。
【００３４】
図８（Ａ）は、表示領域１８の上に重ね合わされた頂点出力情報を示す。画面細分（ＳＳＤ）ステージ１３０中に、表示領域１８は、図８（Ｂ）において最もよくわかるように、表示領域１８を構成するピクセルをＭ×Ｎサブ画面タスクに分割またはグループ化することによって細分される。Ｍ×Ｎのサブ画面タスクはタスクリスト１３５に格納される（図６および図８（Ｂ））。Ｍ×Ｎのサブ画面タスクは、共用メモリ２４の中に格納されたＭ×Ｎの独立タスクである。ＳＳＤステージ１３０の演算は、ＶＰステージ１１０中に使用される処理スレッドとは別の処理スレッドを使用して実施できる。あるいは、ＳＳＤステージ１３０の演算を同じ処理スレッド上でＶＰステージ１１０の演算と結合することができる。
【００３５】
図８（Ａ）に示す実施例では、表示領域１８はＭ×Ｎのサブ画面（ここでＭ＞１およびＮ＞１）に分割され、１つのグリッドを作成する。説明のために、図９は、Ｍ×Ｎのサブ画面（ここでＭ＝１およびＮ＞１）に分割された表示領域１８’を示す。矢印は走査あるいはワークフローの方向を示す。図１０を参照すると、表示領域１８”はＭ×Ｎのサブ画面（ここでＭ＞１およびＮ＝１）に分割されている。したがって、表示領域１８”のサブ画面は一連のカラムを形成する。
【００３６】
ピクセルレンダリング（ＰＲ）ステージ１４０は、ラスタ化、ブレンディング、およびテクスチャアプリケーションの演算１４２および陰面除去演算１４４を含む。とはいえ、ピクセルレンダリングステージ１４０は、ＯｐｅｎＧＬ（登録商標）またはＯｐｅｎＧＬ（登録商標）ＥＳによって定義される他の演算を含むことができる。ＰＲステージ１４０は、ＶＰステージ１１０からの３Ｄオブジェクトに関する情報を、画面１６の表示領域１８に表示できるビットマップに変換する。ＰＲステージ１４０は、入力三角形セットを処理して、３Ｄグラフィックスイメージのピクセル表現を生成する。
【００３７】
典型的なピクセルレンダリング（ＰＲ）ステージは最初に頂点出力情報のリストから三角形をとることができる。次に、ＰＲステージは、表示領域からピクセルをとり、三角形に対してピクセルを計算し、ピクセルが三角形内にあるかどうかを確かめる。評価中のピクセルが三角形内にある場合、ＰＲステージは三角形から対応する色によるピクセルのカラーリングを実施することができる。評価中のピクセルが三角形内にない場合、ピクセルはスキップされる。次いでＰＲステージは表示領域１８における次のピクセルを取り上げるであろう。すべてのピクセルが三角形について評価または処理されるまで、ＰＲステージは表示領域１８における他のピクセルについて上記のプロセスを繰り返す。したがって、ピクセルは一度に１つ処理される。
【００３８】
次いで、典型的なＰＲステージは、頂点出力情報リストにおける次の三角形へ移動して、現在の三角形についてのピクセルの評価を繰り返すであろう。
【００３９】
ＰＲステージ１４０は複数のサブ画面またはサブ画面タスクによって同様な方法で働く。違いは、サブ画面が評価または処理すべきより少ないピクセル数を有し、複数のサブ画面が処理スレッド（ＰＴ１、ＰＴ２、．．．ＰＴＸ）によってそれぞれ独立して並行に処理され得ることである。したがって、ＰＲステージ１４０の処理時間は典型的なＰＲステージよりも非常に高速であるが、その理由は、より少ないピクセルが各サブ画面にあり、複数のサブ画面を並行で（各処理スレッドはそれぞれの１つのサブ画面におけるピクセルの処理に向かって独立して働き）処理できることにある。
【００４０】
例示的な実施形態では、ＰＲステージ１４０は、インタリーブ型マルチスレッドプロセッサ２２の１セットの複数処理スレッドＰＲ１、ＰＲ２、．．．ＰＲＸを使用して処理される。ＰＲステージ１４０のために使用されるこのセットにおけるスレッドの数は、Ｘのスレッドの最大値を有する２またはそれ以上であってもよい。
【００４１】
実施中は、ピクセルレンダリングステージ１４０に割り当てられた各処理スレッドＰＲ１、ＰＲ２、．．．ＰＲＸは、タスクリスト１３５から利用可能なサブ画面タスクを捕らえて、タスクリスト１３５からそれを取り除く。この１セットの処理スレッドＰＲ１、ＰＲ２、．．．ＰＲＸは、インタリーブ型並列演算において、入力三角形を処理し、サブ画面におけるピクセルをレンダリングする（入力三角形情報をサブ画面における表示のためにビットマップに変換する）。それぞれの１つの処理スレッドが、捕らえられたサブ画面タスクのためのピクセルレンダリング演算を完了した後、処理スレッドはタスクリスト１３５における次の利用可能なサブ画面タスクへ移動する。この演算は、すべてのサブ画面が処理され、ピクセルレンダリングステージ１４０が完了するまで、繰り返される。
【００４２】
図１、図２および図１２を参照すると、インタリーブ型マルチスレッドプロセッサ２２はマルチスレッド処理がスケーラブルで均一であることを可能にする。演算
【数１】
2010516001.tif 000003
【００４３】
は、
【数２】
2010516001.tif 000004
【００４４】
によって定義できる。
【００４５】
図１２には、単一の三角形Ｔを有する４つのサブ画面の１ブロックがピクセルレンダリングのために示されている。演算
【数３】
2010516001.tif 000005
【００４６】
は、各々が三角形Ｔの細分された部分（ｉ）を有する４つの（ｉ）サブ画面として表現されるサブ画面タスクＳ１１、Ｓ１２、Ｓ２１およびＳ２２を処理する。したがって、演算
【数４】
2010516001.tif 000006
【００４７】
は、サブ画面Ｓ１１の演算
【数５】
2010516001.tif 000007
【００４８】
プラスサブ画面Ｓ１２の演算
【数６】
2010516001.tif 000008
【００４９】
プラスサブ画面Ｓ２１の演算
【数７】
2010516001.tif 000009
【００５０】
プラスサブ画面Ｓ２２の演算
【数８】
2010516001.tif 000010
【００５１】
に等しい。演算
【数９】
2010516001.tif 000011
【００５２】
のすべてが並行に処理される場合、したがって、ピクセルレンダリングステージ１４０を処理するための全体的ピークパフォーマンスは、処理スレッドのためのピークパフォーマンスに使用された処理スレッドの数を乗算したものである。サブ画面Ｓ１１は、三角形Ｔのピクセルの細分された部分Ｔ１を有する。サブ画面Ｓ１２は、三角形Ｔのピクセルの細分された部分Ｔ２を有する。サブ画面Ｓ２１は、三角形Ｔのピクセルの細分された部分Ｔ３を有する。サブ画面Ｓ２２は、三角形Ｔのピクセルの細分された部分Ｔ４を有する。説明のために、スレッドの数は４である。したがって、この例では、パフォーマンスは、１つの処理スレッドのためのパフォーマンスに処理スレッドの数を乗算したものになるであろう。したがって、ＰＲステージ１４０は、複数のサブ画面からのピクセルを並行で処理するためのその能力による高速ピクセルレンダリングステージである。
【００５３】
加えて、ＭおよびＮの数は実アプリケーションによるプロファイリングの後に構成でき、その結果、パフォーマンスは様々な状況のためにさらに最適化できる。ＭおよびＮを構成することは、より大きな柔軟性およびスケーラビリティの別の次元を提供する。プロファイリングは、処理スレッドのローディング（ティックカウント）または操作上のタスクのサイズもしくは複雑さを識別することを含む。プロファイリングはまた、共用メモリ２４からのデータおよび記憶容量の転送に関連するパラメータなどの他のコンポーネントを評価することを含むこともできる。プロファイリングおよび調整によって、フレーム率、画面サイズ、ピクセルレート、三角形描画率などを、ＭおよびＮを変化させるか変えるため、および／またはＰＲステージ１４０において使用するための処理スレッドＰＲ１、ＰＲ２、．．．ＰＲＸの数を変化させるために使用することができよう。プロファイリングおよび調整によって、パフォーマンス全体を最適化するために、３Ｄパイプラインステージ１１０、１３０および１４０をバランスさせることができる。残りの処理スレッドＰＲ１、ＰＲ２、．．．ＰＲＸは、ゲームオーディオなどの同時に動作している他のアプリケーションのために使用される。
【００５４】
次に図１３を参照すると、３Ｄグラフィックスパイプライン１００が使用するための３Ｄグラフィックスパイプライン方法２００の流れ図が示されている。方法２００はステップＳ２０２から開始され、そこで頂点処理が頂点出力情報を作成するために実施される。ステップＳ２０２の後にステップＳ２０４が続き、そこで表示領域１８は、その中で重ね合わされた頂点出力情報を有し、Ｍ×Ｎのサブ画面に細分される。たとえば、図８（Ａ）において最もよくわかるように、三角形Ｔ１は、サブ画面Ｓ１１、Ｓ２１およびＳ２２にわたって広がり、図８（Ｂ）に示される、そのそれぞれの細分された部分Ｔ１１、Ｔ１２、Ｔ１３に細分される。したがって、図８（Ｂ）におけるタスクリスト１３５は、三角形Ｔ１およびＴ２の細分された部分を示す（説明のために、２つの三角形だけを示す）。明らかなように、関連する三角形を有しないか、または三角形のより小さな細分された部分を有する頂点出力情報からのタスクリスト１３５におけるそれらのエントリは、より速く処理できる。したがって、ピクセルレンダリングステージ１４０が表示領域１８上で三角形を表す３Ｄ画像を表示する前に、三角形のすべての細分された部分の処理は完了していなければならない。
【００５５】
ステップＳ２０４の後にステップＳ２０６が続き、そこで三角形のサブ部分を有するか有しないサブ画面タスクが作り出され、タスクリスト１３５に置かれる。ステップＳ２０６の後にステップＳ２０８１、２０８２および２０８Ｙが続き、そこでＹはピクセルレンダリングステージ１４０のために使用されるセットにおける処理スレッドの数（２つまたはそれ以上）である。ステップＳ２０８１において、第１の処理スレッド（以下「スレッド１」と呼ぶ）は（１番目の）利用可能サブ画面タスク（図８（Ｂ））を得て、ステップＳ２１０１において、サブ画面タスクにおける各ピクセルを処理し、特にこれらのピクセルはタスクと関連した三角形または三角形部分の内部または内側にあるように決定される。ステップＳ２１０１の後にステップＳ２１２１が続き、そこでそれがタスクリスト１３５の終了であるかどうかの判定がなされる。判定が「ＹＥＳ」である場合、スレッド１による処理は終わる。そうではなく、判定が「ＮＯ」である場合、ステップＳ２１２１はステップＳ２０８１に戻る。第２の処理スレッド（以下「スレッド２」と呼ぶ）の演算は本質的に同じものである。スレッド２は、タスクリスト１３５における次の利用可能なサブ画面タスクを得るかまたは捕らえる。ステップＳ２０８２の後にステップＳ２１０２が続き、そこでサブ画面タスクが処理される。ステップＳ２０８２の後にステップＳ２１０２が続く。ステップＳ２１０２の後にステップＳ２１２２が続く。ステップＳ２１２２において、それ以上のタスクがタスクリスト１３５にあるかどうかの判定がなされる。ステップＳ２１２２における判定が「ＮＯ」である場合、方法は終わる。そうではなく、判定が「ＹＥＳ」である場合、ステップＳ２１２２はステップＳ２０８２に戻る。
【００５６】
ステップＳ２０８Ｙは、スレッドＹによってＹ番目の利用可能なサブ画面タスクを得るかまたは捕らえる。ステップＳ２０８Ｙの後にステップＳ２１０Ｙが続き、そこでサブ画面タスクが処理される。ステップＳ２１０Ｙの後にステップＳ２１２Ｙが続き、それ以上のタスクがタスクリスト１３５にあるかどうかの判定がなされる。判定が「ＮＯ」である場合、方法は終わる。そうではなく、判定が「ＹＥＳ」である場合、ステップＳ２１２ＹはステップＳ２０８Ｙに戻る。
【００５７】
ステップＳ２１０１、Ｓ２１０２およびＳ２１０Ｙの間に達成される処理は、ラスタ化、ブレンディング、テクスチャアプリケーション演算１４２および陰面除去演算１４４を実行する。特に図１１を参照すると、中心のドットを有する正方形はピクセルＰを表す。ピクセルＰのいくつかは三角形Ｔ１１の内側にあり、いくつかのピクセルは三角形Ｔ１１の外側にある。各頂点Ｖ１、Ｖ２およびＶ３は、スムーズシェーディングによって与えられた色値を有する。各ピクセルＰにおける色値を算出するために線形補間が使用される。頂点Ｖ１、Ｖ２およびＶ３は、三角形Ｔ１１を形成して、そのような三角形を表示領域１８内で位置決めするために使用される。色は、正方形の中心に黒いドットで表された各ピクセル中心において計算される。Ｚ深度、アルファ、フォグおよびテクスチャを含む様々なパラメータが補間される。
【００５８】
再び図２〜図４を参照すると、この例では、６つのスレッドＰＴ１、ＰＴ２、ＰＴ３、ＰＴ４、ＰＴ５およびＰＴ６がある。第１のスレッドＰＴ１は、ＶＰステージ１１０を処理するために使用することができる。第２のスレッドＰＴ２は、ＳＳＤステージ１３０を処理するために使用することができる。残りの４つのスレッドＰＴ３、ＰＴ４、ＰＴ５およびＰＴ６は、タスクリスト１３５からのサブ画面タスクを並行で処理するために使用される。ここで、処理スレッドＰＴ３は、最初の利用可能サブ画面タスク１，１をとって、捕らえられた第１のサブ画面タスク１，１におけるピクセルを処理する。処理スレッドＰＴ４は、次の（２番目の）利用可能サブ画面タスク１，２をとって、捕らえられたサブ画面タスク１，２におけるピクセルを処理する。処理スレッドＰＴ５は、次の（３番目の）利用可能サブ画面タスク１，３をとって、捕らえられたサブ画面タスク１，３におけるピクセルを処理する（Ｍは３よりも大きいと仮定する）。
【００５９】
Ｍは４であると仮定して、処理スレッドＰＴ６は次の（４番目の）利用可能サブ画面タスク１，Ｍをとって、捕らえられたサブ画面タスク１，Ｍにおけるピクセルを処理するだろう。処理スレッドＰＴ３、ＰＴ４、ＰＴ５およびＰＴ６がそれらの各サブ画面タスクを完了するとき、タスクリスト１３５が空になるまで、追加のサブ画面タスクは捕らえられて、並行で処理される。
【００６０】
図１３に記載の実施形態では、３Ｄグラフィックスパイプライン１００の演算を負荷分散するために、３Ｄグラフィックスパイプライン１００によって使用される処理スレッドの少なくとも１つを、３つの３Ｄパイプラインのプロセス１１０、１３０および１４０のすべてを処理するために使用することができる。単に説明のために、スレッド１を、ステップＳ２０２、Ｓ２０４、Ｓ２０６ならびにステップＳ２０８１、２１０１および２１２１を実行するために使用することができる。
【００６１】
１つの処理スレッドが３メガピクセル／秒（ＭＩＰＳ）レンダリングを実行する場合、それは１ピクセルを処理するために約３０の命令パケットをとるであろう。これは平均して１ピクセル当たり約１００の命令である。ＶＰステージ１１０およびＳＳＤステージ１３０のための６つのスレッドのうちの２つ、およびＰＲステージ１４０のための残り４つの処理スレッドを確保することが、専用ハードウェアグラフィックスアクセラレータのパフォーマンス（１２メガピクセル／秒）の４倍であるＶＧＡ解像度をサポートする。
【００６２】
すべての処理スレッドが同じメモリ２４を共用するので、処理スレッドはすべてミューテックスツールを使用して、同一セットの入力三角形データ（サブ画面タスク）を非常に効率的に（デュープリケーションなしで）処理することができる。
【００６３】
ピクセルレンダリングステージ１４０は３Ｄグラフィックスパイプライン１００の最後のパイプラインステージである。ＰＲステージ１４０は、３Ｄグラフィックスイメージのピクセル表現を生成するために入力三角形リストを処理する。上記の３Ｄグラフィックスパイプライン１００は、ＰＲステージ１４０のパフォーマンス（ピクセル毎秒）を改善する。インタリーブ型マルチスレッドプロセッサ２２は、タスクリスト１３５を処理するために、並行に動作する処理スレッドの数の倍数だけパフォーマンスを増加させる。
【００６４】
３Ｄグラフィックスパイプライン方式の効果は、数ＭおよびＮの調整を可能にすることにおけるその柔軟性である。ＭおよびＮの数を増加させることによって、ピクセルレンダリングステージ１４０のためのＭＩＰＳ要件は減少する。各サブ画面がより小さくなるので、レンダリングタスクはより単純になる。これは複数処理スレッドのパフォーマンスを増加させるのを助ける。処理スレッドを、オーディオなどの他の同時並行アプリケーションのために使用することもできる。
【００６５】
容易にわかるように、３Ｄグラフィックスイメージをレンダリングするための、本明細書で説明されるソフトウェア実装は、専用のグラフィックスアクセラレータのハードウェア実装よりも高いパフォーマンスを有する。グラフィックスアクセラレータのハードウェア実装と比較して、本明細書に記載の実施形態は柔軟でスケーラブルである。この実施形態は柔軟であるので、新機能を追加するためのソフトウェアコードを拡張し、（ＯｐｅｎＧＬ  ＥＳ  １．０、１．１．．．などの）３Ｄグラフィックス規格のより高いバージョンをサポートして、様々なアプリケーション構成およびカスタム要件をサポートすることは容易である。実施形態のスケーラブルな機能は、様々なパフォーマンス要件（フレーム率、画面サイズ、ピクセルレート、三角形描画率など）を可能にして、シリコンコストおよびシステム電力消費を最適化する。
【００６６】
この実施形態はまた、同じパフォーマンスに達するためにマルチＧＨｚのクロックスピードを有するハイエンドプロセッサを使用する代わりに、ソフトウェア実装が低コストおよび低電力プロセッサで使用されることを可能にする。
【００６７】
次に図１４を参照すると、共用メモリ２４は３Ｄグラフィックスパイプライン１００のための様々なキューを含む。これらのキューは、頂点配列２５、プリミティブキュー２６およびタスクキュー２７を含む。とはいえ、追加のキューまたはバッファをＶＰステージ１４０の階層またはレイヤのために提供できる。図７に関して前述したように、ＶＰステージ１１０は、モデルビュー変換演算１１２、射影演算１１４、選別演算１１６、照明およびカラーリング演算１１８、プリミティブアセンブリ演算１２０、クリッピング（すなわちユーザ定義のクリッピング）演算１２２、および透視分割およびビューポート演算１２４を含む。プリミティブアセンブリ演算１２０およびクリッピング演算１２２などの下位レイヤまたは階層が、モデルビュー変換演算１１２などのより高い階層またはレイヤに依存するように、ＶＰステージ１１０における演算は段々に積まれるかまたは層にされる。
【００６８】
頂点配列２５はモデルビュー変換演算１１２からの頂点座標を含む。頂点配列２５は、モデル座標における頂点の位置、各頂点の色、およびテクスチャ座標などの、頂点ごとの属性を含む。プリミティブキュー２６はプリミティブアセンブリ演算１２０によって取り込まれる。タスクキュー２７はタスクリスト１３５によってＳＳＤステージ１３０から取り込まれる。しかしながら、プリミティブアセンブリ演算１２０の下のＶＰステージ１１０の階層またはレイヤは、ＳＳＤステージ１３０によって必要な頂点出力情報を作成するためにプリミティブキュー２６に取り込まれたデータによって決まる。ＳＳＤステージ１３０はＰＲステージ１４０用に必要なタスクリスト１３５を作成する。しかしながら、同時に、プリミティブアセンブリ演算１２０はモデルビュー変換演算１１２などのより高い階層またはレイヤからのデータに依存する。プリミティブアセンブリ演算１２０およびモデルビュー変換演算１１２に関する上の記述は、単に例証を目的とするもので、ＶＰステージ１１０においては他の階層またはレイヤに適用される。
【００６９】
次に図１５を参照すると、３Ｄグラフィックスパイプライン１００を処理スレッド当たりのベースで負荷分散するため方法３００の流れ図が示されている。この実施形態では、処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸの１つまたは複数によってＰＲステージ１４０を処理することは、３Ｄグラフィックスパイプライン１００におけるＶＰおよびＳＳＤステージ１１０および１３０より優先される。３Ｄグラフィックスパイプライン１００の演算に割り当てられた処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸまたは１サブセットの処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸは、３Ｄグラフィックスパイプライン１００の演算を並行に独立して処理する働きをする。方法３００は、３Ｄグラフィックスパイプライン１００の演算を処理するために割り当てられた処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸまたは１サブセットの処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸの１つまたは複数によって、個別に独立して実施されることになる。
【００７０】
方法３００はステップＳ３０２から開始され、そこで処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸのうちの１つが最初に、ＳＳＤステージ１３０中に作成された共用メモリ２４のタスクキュー２７におけるタスクリスト１３５内のサブ画面タスクの数を点検する。ＳＳＤステージ１３０の演算は図１３のステップＳ２０４およびＳ２０６に対応する。ステップＳ３０２の後にステップＳ３０４が続き、そこでタスクキュー２７が空であるかどうか、またはタスクリスト１３５における残りのサブ画面タスクのすべてが他の処理スレッドによってロックされているかどうか、の判定が行われる。ステップＳ３０４において判定が「ＮＯ」である場合、ステップＳ３０４の後にステップＳ３０６が続き、そこで処理スレッドが（ステップＳ２０８１、２１０１および２１２１などの）ＰＲステージ１４０の演算を実行し、１つのサブ画面タスクを消費または処理する。その後、ステップＳ３０６はループしてステップＳ３０２へ戻る。
【００７１】
しかしながら、ステップＳ３０４において判定が「ＹＥＳ」である場合、ステップＳ３０４の後にステップＳ３０８が続き、そこでそれ以上の３Ｄグラフィックス演算があるかどうかの判定がなされる。ステップＳ３０８における判定が「ＮＯ」であり、タスクキュー２７が空であるかまたは最後のパイプラインステージ（ＰＲステージ１４０）によって空にされている（ステップＳ３０４）場合、３Ｄグラフィックスパイプライン１００の演算は本質的に完了である。したがって、方法３００は終わる。ステップＳ３０８は、ただ方法３００を終えるために使用される基準の一実施例である。したがって、他の基準をそれに応じて方法３００において使用し、配置することができる。
【００７２】
ステップＳ３０８における判定が「ＹＥＳ」である場合、ステップＳ３０８の後にステップＳ３１０が続き、そこで、ＶＰステージ１１０における頂点処理が少なくとも１つの三角形を表す頂点出力情報を生成するために実行される。ステップＳ３１０の後にステップＳ３１２が続き、そこで、ステップＳ３１０において作成された頂点情報がタスクキュー２７におけるタスクリスト１３５への追加のためにＳＳＤステージ１３０に送られる。次いでステップＳ３１２はループしてステップＳ３０２へ戻り、そこで処理スレッドが再びタスクキュー２７を点検する。通常、ステップＳ３１０において、処理スレッドはＶＰステージ１１０の関数を呼び出す。
【００７３】
さらなる注記として、ステップＳ３０４における評価基準は変化してもよい。たとえば、始めに、ステップＳ３０４における評価基準は、サブ画面タスクの数を、ＰＲステージ１４０用にタスクキュー２７におけるサブ画面タスクの数を示すウォーターマーク（図６）またはしきい値と比較することができる。サブ画面タスクの数がウォーターマークより少ない、またはウォーターマークの下である（すなわち、多くのサブ画面タスクがピクセルレンダリングのためのタスクキューにないことを示す）場合、ステップＳ３０４の後にステップＳ３０８が続く。しかしながら、サブ画面タスクの数がウォーターマークより多いかまたはウォーターマークを超える場合、処理スレッドはステップＳ３０６においてＰＲステージ１４０の演算を実行する。
【００７４】
しかしながら、タスクキュー２７におけるサブ画面タスクの数が所定数のループの後にウォーターマークレベルより下に残っていると、評価基準を変える（下げる）ことができる。たとえば、評価基準は空に設定してもよく、および／または、すべてサブ画面タスクはロックされる。したがって、Ｓ３０４の評価基準を前後に変化させて、ＰＲステージ１４０とＶＰステージ１１０との間で、好ましくはＰＲステージ１４０の方へ、負荷を分散することができる。
【００７５】
ＶＰステージ１１０の階層またはレイヤに関して、あるいは図１５のステップＳ３１０において、様々なキューにおけるデータのための階層検査を評価することができる。たとえば、ステップＳ３１０中の処理スレッドは、最初にプリミティブキュー２６または他の中間階層もしくはレイヤを検査して、その後にＶＰステージ１１０においてその他のより高い階層またはレイヤのいずれかを検査することができる。中間階層またはレイヤにおけるデータが対応するキューの中にある場合、処理スレッドは、より低い階層またはレイヤ用に階層またはレイヤからのデータを処理して、頂点出力情報を生成することができる。
【００７６】
ＶＰステージバランシングのために、処理スレッドは、図１３に関して上に説明したものと同様の方法で、キューのいずれかにおけるデータを捕らえてロックする。
【００７７】
方法３００は、あらゆる処理スレッドＰＴ１、ＰＴ２、．．．ＰＴＸが等しく作られて、機能を維持して追加するためにより容易である同一のプログラムコードを動かすことを可能にする。方法３００はまた、処理スレッド間でオーバヘッドを切り替えることを回避することもできる。
【００７８】
方法３００は、ＰＲステージ１４０が優先される３Ｄグラフィックスパイプライン１００のステージ間で自動的に作業負荷を分散する。さらにまた、負荷分散は、マネージャスレッドなしでパイプラインステージ１１０、１３０および１４０の各々の間で自動的に作業負荷を分散する。負荷分散は、３Ｄグラフィックスパイプライン１００の処理演算からスレッドを追加または取り除くことによってスケーラブルとなる。負荷分散は、最小のオーバヘッドを有する処理スレッドの各々の間に、ほとんど通信を必要としない。
【００７９】
例示的な実施形態では、方法３００は、ハードウェア、ソフトウェア、ファームウェア、または１つまたは複数のコンピュータ実行可能命令を備えるコンピュータプログラム製品の形でのこれらの任意の組合せに、実装できる。ソフトウェアに実装されると、コンピュータプログラム製品は、コンピュータ記憶媒体およびコンピュータ通信媒体を含むコンピュータ可読媒体の上に格納でき、またはこれを使用して伝送できる。
【００８０】
「コンピュータ記憶媒体」という用語は、本明細書では、コンピュータに方法を実行させる命令を格納するようになっているいかなる媒体も指す。限定ではなく例として、コンピュータ記憶媒体は、電子メモリ素子（たとえば、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭなど）、光学的メモリ素子（たとえば、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）など）、または磁気記憶装置（たとえば、ハードディスク、フラッシュドライブ、テープ駆動装置など）、またはコンピュータプログラム製品を格納するようになっている他のメモリ素子、またはそのようなメモリ素子の組合せを含む、ソリッドステートメモリ素子を備えることができる。
【００８１】
「コンピュータ通信媒体」という用語は、本明細書では、たとえば、変調された搬送波、光学的信号、ＤＣまたはＡＣ電流、および類似の手段を使用してあちこち転転とコンピュータプログラム製品を伝送するようになっている、いかなる物理インタフェースも指す。限定ではなく例として、コンピュータ通信媒体は、ツイストワイヤペア、印刷ケーブルまたはフラットケーブル、同軸ケーブル、光ファイバーケーブル、デジタル加入者線（ＤＳＬ）、または他の有線、無線、または光学的直列または並列インタフェース、もしくはそれらの組合せを備えることができる。
【００８２】
開示された実施形態の上記の説明は、当業者が開示を作製または使用することを可能にするために提供される。これらの実施形態への様々な変更形態は、当業者にすぐに明らかになり、本明細書で定義された全体的な原理は本開示の精神または範囲から逸脱することなく他の実施形態に適用することができる。したがって、本開示は、本明細書で示される実施形態に限定されることが意図されず、本明細書で開示された原理と新規性のある特徴とに一致する最大範囲が認められるべきである。
【図１】
2010516001.tif 000012
【図２】
2010516001.tif 000013
【図３】
2010516001.tif 000014
【図４】
2010516001.tif 000015
【図５】
2010516001.tif 000016
【図６】
2010516001.tif 000017
【図７】
2010516001.tif 000018
【図８】
2010516001.tif 000019
【図９】
2010516001.tif 000020
【図１０】
2010516001.tif 000021
【図１１】
2010516001.tif 000022
【図１２】
2010516001.tif 000023
【図１３】
2010516001.tif 000024
【図１４】
2010516001.tif 000025
【図１５】
2010516001.tif 000026
【国際調査報告】
2010516001.tif 000027
2010516001.tif 000028
2010516001.tif 000029