(57)【特許請求の範囲】
【請求項１】
オブジェクトを構成する頂点又はプリミティブに対して幾何学的な画像処理を行うパイプラインが，複数種類のシェーダステージから構成されている画像処理装置にあって，
前記複数種類のシェーダステージ毎に記録領域が分けられており， 
第１のシェーダステージ用の記憶領域は，
前記第１のシェーダステージに入力される頂点データの物理メモリにおけるアドレスが記憶される入力側のアドレスバッファと，
前記入力側のアドレスバッファ上のアドレスを記録し，当該アドレスの並びが前記プリミティブに属する前記頂点データの順列を維持した態様となる入力側のインデックスバッファと，を有し，
第２のシェーダステージ用の記憶領域は，
前記第１のシェーダステージにおいて処理がなされて出力された前記頂点データの前記物理メモリにおけるアドレス，及び当該頂点データに対する処理が完了しているか否かを示すライフタイム情報が記録される出力側のアドレスバッファと，
前記出力側のアドレスバッファ上のアドレスを記録し，当該アドレスの並びが前記プリミティブに属する前記頂点データの順列を維持した態様となる出力側のインデックスバッファと，
前記第２のシェーダステージにおいて処理が行われる頂点データの前記入力側のインデックスバッファ及び前記出力側のインデックスバッファにおけるアドレス同士の対応関係が記録されるタスクキューと，を有し，
出力データのための記録領域の割り当てを行うインデックストランスレータをさらに備え，
前記インデックストランスレータは，
前記入力側のインデックスバッファの解析を行い，同インデックスバッファ上の入力データが既に前記第２のシェーダステージにおいて処理が実行されたか否かの判定を実施し，
当該判定により，処理がまだ実行されていない場合には，
前記入力データの前記第１のシェーダステージにおける処理結果である出力データが記録される記憶領域を，前記出力側のアドレスバッファ，及び前記出力側のインデックスバッファに割り当てる工程と，
前記入力データの前記入力側のインデックスバッファ上のアドレスと，これに対応する出力データが記憶されるために割り当てられた前記出力側のインデックスバッファ上のアドレスとの対応関係を前記タスクキュー上に記憶させる工程と，
を実行し，
前記インデックストランスレータは，さらに，
前記出力側のアドレスバッファに記録されている前記ライフタイム情報に基づいて，前記出力側のインデックスバッファ及び出力側のアドレスバッファにおける前記出力データを，処理が行なわれた前記第２のシェーダステージの下流工程にある別の第３のシェーダステージへの前記入力データとしてそれぞれ再利用するか，又は当該出力データに対する記憶領域の割り当てを解除するかを判断する
画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において，
前記第２のシェーダステージにおける処理が終了後に当該タスクキューに記憶された前記入力側のインデックスバッファのアドレスを参照して，該当する前記入力側のインデックスバッファに記憶された前記入力データを解放する
画像処理装置。
【請求項３】
請求項１または２に記載の画像処理装置において，
前記入力側のインデックスバッファ，又は出力側のインデックスバッファは前記頂点データから構成されるプリミティブの先頭にプリミティブのサイズを示すサイズデータが記憶されており，同サイズデータは当該プリミティブを構成するインデックス値がフェッチされるごとに，１ずつ減少され同サイズ値が０となった際に同プリミティブからのフェッチが完了される
画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，複数のシェーダステージを通じて３Ｄ画像の処理を行う画像処理装置に関する。
【背景技術】
【０００２】
近年，ゲームやカーナビゲーションなどにおいては，立体的に描画を行う三次元の画像表示が普及している。三次元の画像表示は，例えばプログラマが画像生成アルゴリズムを定義するシェーダステージが組み込まれた画像処理に特化したプロセッサを搭載したグラフィック処理チップなどにより実現されている。
【０００３】
グラフィック処理チップで三次元の画像表示を行う方法としては，CPU側で処理を行うほか，グラフィック処理チップにおいて実装されたシェーダステージをプログラム可能に構成し，各シェーダステージを通じて最終的にレンダリングされるオブジェクトに対して処理を行うようになっている。シェーダの具体的な例としては，頂点に対して処理を行う頂点シェーダや，プリミティブを構成する頂点数を増減する処理を行うジオメトリシェーダなどを含みこのような画像処理装置の例としては例えば，特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２８８９９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら，上述のように複数のシェーダステージを通じて処理が行なわれる画像処理装置の場合，各シェーダステージにおいて入力，及び出力されるデータの形式が異なることから，同時に異なるシェーダステージからデータを利用したい場合などは各シェーダ毎にデータを最適化する処理が必要であった。また，ジオメトリシェーダにおいては，プリミティブの頂点数の増減が行なわれ，出力される頂点数がいくつになるのかは，処理が開始されるまでは把握することができないため，共通のバッファでの記録を行う場合は，ジオメトリシェーダでの処理が完了するまで他のシェーダからの書き込みをできなくするなどの処理が必要であり，処理の複雑化の原因となっていた。
【０００６】
そこで，本発明は，複数種類のシェーダステージを含んだ画像処理装置において，シェーダプロラムにおける入出力データをより簡易な形で管理することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本発明は，オブジェクトを構成する頂点又はプリミティブに対して幾何学的な画像処理を行うパイプラインが，複数種類のシェーダステージから構成されている画像処理装置にあって，シェーダステージに入力される頂点データの物理メモリにおけるアドレスが記憶される入力アドレスバッファと，入力アドレスバッファ上のアドレスを記録し，当該アドレスの並びがプリミティブに属する頂点データの順列を維持した態様となる入力インデックスバッファと，シェーダステージにおいて処理がなされて出力された頂点データの物理メモリにおけるアドレス，及び当該頂点データに対する処理が完了しているか否かを示すライフタイム情報が記録される出力アドレスバッファと，出力アドレスバッファ上のアドレスを記録し，当該アドレスの並びがプリミティブに属する頂点データの順列を維持した態様となる出力インデックスバッファと，シェーダステージにおいて処理が行われる頂点データの入力インデックスバッファ及び出力インデックスバッファにおけるアドレス同士の対応関係が記録されるタスクキューと，出力データのための記録領域の割り当てを行うインデックストランスレータとを備えている。
このインデックストランスレータは入力インデックスバッファの解析を行い，同インデックスバッファ上の入力データが既にシェーダステージにおいて処理が実行されたか否かの判定を実施し，当該判定により，処理がまだ実行されていない場合には，入力データのシェーダステージにおける処理結果である出力データが記録される記憶領域を，出力アドレスバッファ，及び出力インデックスバッファに割り当てる工程と，入力データの入力インデックスバッファ上のアドレスと，これに対応する出力データが記憶されるために割り当てられた出力インデックスバッファ上のアドレスとの対応関係をタスクキュー上に記憶させる工程と，を実行し，出力インデックスバッファ，及び出力アドレスバッファにおける出力データは，処理が行なわれたシェーダステージの下流工程にある別のシェーダステージへの入力データとしてそれぞれ再利用される。
【０００８】
また，シェーダステージにおける処理が終了後に当該タスクキューに記憶された入力インデックスバッファのアドレスを参照して，該当する入力インデックスバッファに記憶された入力データを解放する方式も採用可能である。
【０００９】
更には，入力インデックスバッファ，又は出力インデックスバッファは頂点データから構成されるプリミティブの先頭に同配列のサイズを示すサイズデータが記憶されており，同サイズデータは当該プリミティブ列を構成するインデックス値がフェッチされるごとに，１ずつ減少され同サイズ値が０となった際に同プリミティブ列からのフェッチが完了されるようにしてもよい。
【発明の効果】
【００１０】
本発明によれば，シェーダプロラムにおける入出力データをより簡易な形で管理することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は，本発明のコンピュータグラフィックスシステムの概略構成を示すブロック図である。
【図２】図２は，コンピュータグラフィックスシステムに搭載されたグラフィック処理チップの概略構成を示すブロック図である。
【図３】図３（ａ），（ｂ）は，頂点バッファ及びインデックスバッファのデータ構造を示す概略図である。
【図４】図４は，記録領域のデータ構造を示すブロック図である。
【図５】図５は，インデックストランスレータがデータを処理する手順を示した動作図である。
【図６】図６は，インデックストランスレータがデータを処理する手順を示した動作図である。
【図７】図７は，インデックストランスレータがデータを処理する手順を示した動作図である。
【図８】図８は，インデックストランスレータがデータを処理する手順を示した動作図である。
【発明を実施するための形態】
【００１２】
以下，発明を実施するための形態について説明する。本発明は，以下に説明する実施態様に限定されるものではない。本発明は，以下に説明する実施態様から当業者に自明な範囲で適宜修正される範囲を含む。
【００１３】
図１は，画像処理装置であるコンピュータグラフィックスシステム１００の１つの実施形態の模式ブロック図である。図示されているコンピュータグラフィックスシステム１００は，ＤＭＡユニット１３０とグラフィックス処理ユニット（ＧＰＵ）１４０を含んでいる。コンピュータグラフィックスシステム１００はまた，ＧＰＵ１４０に結合された表示装置１７０も含む。更に，ＤＭＡユニット１３０はメモリインタフェース１１０を介してホストメモリ装置１２０に結合されている。このＧＰＵ１４０には，チップ上に設けられたオンチップメモリ１５０と，頂点やプリミティブ，ピクセル等に対して各種のシェーダ処理を行うシェーダパイプライン１６０とが設けられている。図示されているコンピュータグラフィックスシステム１００はある構成要素部品を示しているが，コンピュータグラフィックスシステム１００としては構成要素を適宜変更することもできる。
【００１４】
このコンピュータグラフィックスシステム１００は対象物をモデル化し，モデル化された対象物を表示装置１７０上に表示するように構成される。対象物は３つの頂点と，この３つの頂点を接続する３つのエッジまたは辺を有する三角形のような多角形によりモデル化されることがよくある。また，三角形以外にもその他の多頂点形のプリミティブを扱うことも可能である。
【００１５】
対象物はこれらの三角形や多頂点形のプリミティブを１〜数万個組み合わせることによりモデル化できる。対象物をモデル化するために，コンピュータグラフィックスシステム１００は各プリミティブの頂点を格納および参照できる。
１つの実施形態において，ＤＭＡユニット１３０は，シェーダパイプライン１６０に対して供給するコマンドストリームと種々のＤＭＡ頂点ストリームの入力トラフィックを制御する。ＤＭＡユニット１３０は，ホストメモリ１２０に記憶されている頂点情報をフェッチし，これをグラフィック処理チップ１４０上のオンチップメモリ１５０に転送する。この転送された頂点データは，シェーダパイプライン１６０において含まれる頂点シェーダ（図２に示す）において処理されることから，転送の際に頂点シェーダに入力するための要素組み立ても行う。ホストメモリ１２０には，頂点を記録するデータ領域として頂点バッファ１２１と，インデックスバッファ１２２とが設けられている。
【００１６】
図２は，ＧＰＵ１４０の詳細の構成を示したブロック図である。シェーダパイプライン１６０には，頂点シェーダ１６１，ジオメトリシェーダ１６２，ラスタライザ１６３，ピクセルシェーダ１６４が含まれている。頂点シェーダ１６１は頂点の集合に対して作用し，位置，色，テクスチャマッピング座標といった頂点の属性を参照・変更可能である。頂点シェーダ１６１で計算された頂点は通常はジオメトリシェーダ１６２に渡されるか，そのままピクセルシェーダ１６４に渡される。
【００１７】
ジオメトリシェーダ１６２は，ラスタライザ１６３やピクセルシェーダ１６４に渡されるオブジェクト内の頂点の集合を加工するために使用される。ジオメトリシェーダ１６２では実行時に頂点数を増減させることが可能となる。この場合，入力されるプリミティブに属する頂点の数が出力されるプリミティブでは変更されることもありうる。このような頂点数が変わるプリミティブを可変長サイズのプリミティブと称する。また，ジオメトリシェーダ１６２では，複数のステージを通じて処理が行われる場合も存在する。すなわち，一度ジオメトリシェーダ１６２にて処理を行われたプリミティブが，キャッシュに保存され，再度ジオメトリシェーダ１６２に入力されるような処理である。
【００１８】
ラスタライザ１６３は，頂点によって構成されるプリミティブ情報からフラグメントを生成する。各フラグメントには位置情報だけではなく法線やテクスチャ座標などの情報も付随する。このラスタ化されたフラグメントは次ぐピクセルシェーダ１６４に入力され，基本的には頂点シェーダ１６１からの情報を元にテクスチャを合成したり表面色を適用したりする。
これをプログラミングし，グラフィック処理チップ１４０で実行することにより，バンプマッピング等のより高度なエフェクトを それをＣＰＵですべて実行するよりもはるかに高いパフォーマンスで実現することができるようになる。なお，ラスタライザ１６３とピクセルシェーダ１６４は一体に構成することもできる。また，これらの各シェーダステージは個別に構成するのではなく，統合型のユニファイドシェーダとして構成することも可能である。
【００１９】
シェーダパイプライン１６０には，シェーダスケジューラ１６５，及びインデックストランスレータ１６６が設けられている。シェーダスケジューラ１６５は，各シェーダステージに対して処理タスクの割り当てを行う他，シェーダステージから処理が完了した旨の命令セットを受け，後述するインデックストランスレータ１６６に対して入力データ用に割り当てられていた記憶容量の割当の解放と，出力データを記録する際に次のシェーダステージにて出力データを利用可能であることを示すフラグのセットとを行う。
【００２０】
インデックストランスレータ１６６は，各シェーダステージに入力される入力シーケンスを読み取って，これらを組み立ててシェーダステージに入力されるフォーマットへと変換する。また，シェーダステージからの出力データに対して各記憶領域におけるメモリの割り当てを行い，出力データの記録先をあらかじめ確保する。また，シェーダステージにおけるある入力データに対する処理状況をシェーダスケジューラ１６５と逐次情報をやり取りすることで把握し，その入力データのライフタイム情報を更新する作業も担当する。
【００２１】
オンラインチップ１５０には，様々なデータ用のバッファが設けられている。例示すると，物理的な記録領域であり頂点データ自体が記録される物理メモリ１５１の他，アドレスバッファ１５２，インデックスバッファ１５３，タスクキュー１５４などのデータ構造が設けられている。
物理メモリ１５１は，頂点データの座標データ，オフセット値，属性データ，ベクトルデータ等の情報が，１つの頂点データ毎に１つの物理アドレスが割り当てられる形で記録される。
【００２２】
アドレスバッファ１５２は，物理メモリ１５１に記録された頂点データへの参照データとして，物理メモリ１５１上の物理アドレスが記録される。またこの物理アドレスと関連付けられて，そのデータのライフタイム情報が記録される。ライフタイム情報とは上述したインデックストランスレータ１５５によって記録・更新されるものであり，そのデータを再利用するか否か，記録領域の割り当てを解除するか否か等を判断するための情報である。
【００２３】
インデックスバッファ１５３は，シェーダステージへ入力されるデータ項目をシーケンシャルに取り扱う。インデックスバッファ１５３は，プリミティブを構成する頂点データの配列が記録され，頂点の並び順に沿って頂点のアドレスバッファ１５２におけるアドレス情報が記録される。このインデックスバッファ１５３は，ホストメモリ１２０において設けられたインデックスバッファ１２２とは異なり，シェーダステージごとに最適化された形でデータが記憶される。
また，タスクキュー１５４には，各パイプラインにて処理が行われる入力データと出力データのインデックスバッファ１５３における参照値が記録される。
【００２４】
図３では，ホストメモリ１２０における頂点バッファ１２１，及びインデックスバッファ１２２のデータ構造を示したブロック図である。インデックスバッファ図３（ａ）の場合では，複数の三角形からなるプリミティブ２０１が頂点バッファ１２１とインデックスバッファ１２２に記憶された頂点データにより表されている。頂点バッファ１２１においては，Ｖ０〜ＶＮのＮ個の頂点データが記録されている。インデックスバッファ１２２においては，プリミティブ２０１が三角形を単位に配列として記録されていき，「０，１，２」「２，１，３」「２，３，４」の頂点からなる三角形と「３，１，５」「３，５，６」の２つの三角形に分割された四角形の単位で記録されている。インデックスバッファ１２２においては，３つの頂点の単位で頂点バッファ１２１への参照が記録されていく。また，他のインデックスバッファ１２２における記録の仕方としては図３（ｂ）に図示される。図３（ｂ）においては，プリミティブ２０２の配列情報は隣接する三角形のうち共通する２点の頂点については，再度インデックスバッファ１２２に記録せずに，異なる頂点データへの参照値のみが記録されていく。この場合，インデックスバッファ１２２の記録容量を抑制することができるため，オブジェクトの形状によっては有利に働く。
【００２５】
続いて，図４においてこの各バッファのデータ構造の詳細を説明する。図４に示されるように，物理メモリ１５１，アドレスバッファ１５２，インデックスバッファ１５３，タスクキュー１５４が示されている。なお，アドレスバッファ１５２は，頂点シェーダ１６１とジオメトリシェーダ１６２ではデータ構造が異なることから，異なる態様を示している。
【００２６】
タスクキュー１５４には，入力リファレンス用の記憶領域と出力リファレンス用の記憶領域とが設けられており，これらは一対一で対応している。この各リファレンス用の記憶領域に入力される値は，入力データが記憶されるインデックスバッファ１５３と出力データが記憶されるインデックスバッファ１５３のそれぞれのアドレスが入力されている。すなわち，タスクキュー１５４を参照することにより，入力データが記憶されるインデックスバッファ１５３における位置と，出力データが記憶されるインデックスバッファ１５３における位置との対応関係を把握可能になるのである。なお，頂点シェーダ１６１においては，入力頂点数と出力頂点数とは同じ数であるため，頂点数だけ対応関係が記録される。一方，ジオメトリシェーダ１６２の場合は，入力されたプリミティブの頂点数の増減が行われることから，タスクキュー１５４に記録される対応関係は異なることとなる。具体的には，ジオメトリシェーダ１６２において頂点数が３から１に減少される場合は，タスクキュー１５４には，「０→０」，「１→０」，「２→０」の３つの関連が記録されることとなる。
【００２７】
インデックスバッファ１５３は，アドレスバッファ１５２のアドレスへの参照値である頂点インデックス値がシーケンスで記録されるとともに，このシーケンスの先頭データの位置に，プリミティブのサイズを記録するために入力サイズが記録される領域が設けられている。この入力サイズのための記録領域が設けられることで，インデックスバッファ１５３の開始位置とサイズを把握可能となるため，プリミティブに属する頂点を識別することが可能となる。この入力サイズを参照することで，インデックスバッファ１５３から頂点データをフェッチしていく際には，入力サイズを参照し，データを１フェッチするごとにこの入力サイズの値が記録されたカウンタの値がマイナスされ，０になった際に
【００２８】
アドレスバッファ１５２は，頂点シェーダ１６１の入出力データが記録される場合は，頂点データが記録されている物理メモリ１５１のアドレスのほか，ＤＭＡユニット１３０によってパイプライン１６０に転送される前のホストメモリ１２０におけるインデックスバッファ１２２の値（以下，「オリジナルインデックス」とする）が記録される。また，アドレスバッファ１５２には，参照カウントが記録される。この参照カウントは，その頂点データがどれだけのプロセスによって参照されているかを示す値であり，参照される処理が増えると＋１され，参照が解除されると−１される。この参照カウントが０になった場合には，このキャッシュされている頂点データを削除可能であることを示すものである。この参照カウントもライフタイム情報を構成する要素である。
【００２９】
また，ジオメトリシェーダ１６２の入出力データが記憶されるアドレスバッファ１５２の場合には，頂点データが記録されている物理メモリ１５１のアドレスが記録される。ジオメトリシェーダ１６２で処理がされる場合においては，頂点シェーダ１６１のときのようにオリジナルインデックスや参照カウントなどの値は記憶されずに，プリミティブＩＤが記録される。プリミティブＩＤは，頂点データが属するプリミティブを識別する値であり，キャッシュにプリミティブのジオメトリシェーダ１６２における処理結果を記録する際にもそのキーとして利用される。したがって，このアドレスバッファ１５２では，このプリミティブＩＤを参照することで，そのプリミティブが既に処理が行われているか否か，他のシェーダステージでの処理が行なわれうるか否かを判別することができ，データのライフサイクルを管理するライフタイム情報として利用可能である。
【００３０】
続いて，このようなシェーダパイプライン１６０における実際の頂点，及びプリミティブの処理の流れを，図５〜図８を通じて説明する。
【００３１】
図５に示されている各バッファのうち頂点バッファ１２１，及びインデックスバッファ１２２はホストメモリ１２０上に設けられている。頂点バッファ１２１，及びインデックスバッファ１２２においては，その記憶領域の一部のみ，具体的には０〜３のアドレスに記憶されたデータが示されている。頂点バッファ１２１には，頂点Ｖ４，Ｖ５，Ｖ６，Ｖ７の頂点のデータが記録されており，インデックスバッファ１２２はこの頂点バッファ１２２のアドレスへの参照値が配列として記録されている。頂点バッファ１２１，及びインデックスバッファ１２２に記録されたデータは，ＤＭＡユニット１３０，及びＤＭＡインデックストランスレータ１３１によって，頂点入力アドレスバッファ１５２ａ，頂点入力インデックスバッファ１５３ａ，物理メモリ（図示せず）にそれぞれ転送される。この転送の際に，データの記録構造は，シェーダステージに対応した形に適宜変更される。ＤＭＡインデックストランスレータ１３１は，この転送の際に各バッファにおける記録領域の割当を行う。具体的には，インデックスバッファ１２２に記録されているプリミティブのサイズ情報をフェッチし，このサイズ情報から出力側に必要な記録領域の容量を把握し，割当を行う。この処理を通じて，頂点入力アドレスバッファ１５２ａには，「Ｖ４，Ｖ５，Ｖ６，Ｖ７」のオリジナルインデックスが記録される。また，頂点入力インデックスバッファ１５３ａには，「１，３，０，１」の頂点入力アドレスバッファ１５２ａのアドレスへの参照値が記録される。「１」は頂点入力アドレスバッファ１５２ａにおいては頂点「Ｖ５」を，「３」は頂点入力アドレスバッファ１５２ａにおいては頂点「Ｖ７」を，「０」は頂点入力アドレスバッファ１５２ａにおいては頂点「Ｖ４」をそれぞれ参照している。
【００３２】
続いて，図６では，続く頂点シェーダ１６１に対して各頂点データが渡され，その処理結果が出力側のバッファに記録されていく手順を示している。ここでは，一つ目の頂点に対して処理が行われ，バッファに記録される態様が示されている。まずは，頂点入力インデックスバッファ１５３ａから取得した頂点データが既に出力側のアドレスバッファに記録されているか否かを判定する。この頂点データが存在しない場合は，頂点シェーダ１６１において頂点Ｖ５に対する処理が行なわれ際に，頂点インデックストランスレータ１６６ａは各バッファへの記録領域の割り当てを行う。この時まずは，頂点入力インプットバッファ１７１をフェッチし，このプリミティブに含まれる頂点数を入力サイズから把握する。このプリミティブは３つの頂点から構成されているため，頂点出力アドレスバッファ１５２ｂには３つのアドレス０〜２が割り当てられる。また，この時物理アドレス１５１にも同様に記憶領域が割り当てられる。そして，頂点出力アドレスバッファ１５２ｂには，頂点Ｖ５の物理メモリ１５１上のアドレスと，頂点Ｖ５への参照が記録されたオリジナルインデックスとがアドレス「２」に記録される。次いで，頂点入力インデックスバッファ１５３ｂにこの頂点出力アドレスバッファ１５２ｂのアドレスに対する参照がアドレス「０」に記録される。
【００３３】
次いで，図７において，この頂点インデックストランスレータ１６６ａは，ＶＳタスクキュー１５４ａに頂点入力インデックスバッファ１５３ａにおけるアドレスと，頂点出力インデックスバッファ１５３ｂにおけるアドレスとの対応関係を記録する。ここでは，この頂点は双方ともアドレス「０」に記録されていることから「０→０」と記録される。
このような処理を繰り返すと，図８に示された状態となり，頂点出力アドレスバッファ１５２ｂ，頂点出力インデックスバッファ１５３ｂ，ＶＳタスクキュー１５４ａに各データが記録される。なお，頂点Ｖ５においては，既に一度処理が行なわれていることから，前述した頂点データが既に出力側のアドレスバッファに記録されているか否かの判定の結果，このデータがキャッシュされているため，頂点出力アドレスバッファ１５２ｂのアドレス「２」を再度参照する値が記録される。この記録されたバッファ上のデータは続くジオメトリシェーダ１６２等への入力値として利用される。以降のジオメトリシェーダ１６２，ラスタライザ１６３，ピクセルシェーダ１６４においても同様の処理が繰り返される。
【００３４】
以上の実施形態において示された本発明に係る画像処理装置の作用，及び効果を以下に示す。
本発明では，シェーダステージ毎に記録領域が分けられており，それぞれに物理メモリ１５１に記録された頂点データへの物理アドレスを記録するアドレスバッファ１５２と，このアドレスバッファ１５２への参照値をシーケンスに記録したインデックスバッファ１５３とを備えている。そして，シェーダステージ毎に設けられたインデックストランスレータ１６６が，プログラム毎に異なるデータに必要な記録領域の割り当てを行うことができる。具体的には，例えば頂点シェーダ１６１のステージは，アドレスバッファ１５２に参照カウント及びオリジナルインデックスを記録するが，ジオメトリシェーダ１６２のステージではプリミティブＩＤを記録する。こうしたシェーダステージ毎の違いを吸収し，記録領域の効率的な利用を実施することができる。
【００３５】
また，インデックストランスレータ１６６は，シェーダステージ間での処理やデータのやり取りを行うことで，シェーダ内だけではなく，シェーダ間のやり取りも含めてその結果をライフタイム値に反映することでき，以降のプロセスにて使用されなくなったデータに対するバッファの割当を解除することで，記録領域を効率的に使用することができるようになる。
【００３６】
本発明では，物理メモリ１５１にではなく，アドレスバッファ１５２にデータの再利用，及び消去を判断するためのライフタイム情報を記録することとした。ライフタイム情報は，シェーダステージ毎にその形式が異なることからデータのサイズも異なってくる。これを，頂点データなどを格納する記録領域と同じ領域に記録するのであれば，サイズの大きい頂点データと同様の記録容量を各データ毎に必要となってくることから，メモリに無駄が生じるが，データサイズの小さいアドレスバッファ１５２を活用することでメモリ利用効率を向上させることができるようになる。
【００３７】
また，タスクキュー１５４にインデックスバッファ１５２の入出力双方のアドレスを記録することで，この該当する頂点が以降のプロセス等でも不要となったときには，このタスクキュー１５４の値を参照してインデックスバッファ１５２の領域の割り当てを解除することができるようになる。
【産業上の利用可能性】
【００３８】
本発明は，３Ｄの画像処理を行う機能を搭載したゲーム機，パチンコ機，携帯電話などに有効である。
【符号の説明】
【００３９】
１００  コンピュータグラフィックスシステム
１１０  メモリインタフェース
１２０  ホストメモリ
１２１  頂点バッファ
１２２  インデックスバッファ
１３０  ＤＭＡユニット
１４０  グラフィック処理ユニット
１５０  オンチップメモリ
１５１  物理メモリ
１５２  アドレスバッファ
１５３  インデックスバッファ
１５４  タスクキュー
１６０  シェーダパイプライン
１６１  頂点シェーダ
１６２  ジオメトリシェーダ
１６３  ラスタライザ
１６４  ピクセルシェーダ
１６５  シェーダスケジューラ
１６６  インデックストランスレータ
１７０  表示装置
２０１，２０２  プリミティブ
【図１】
0005670723.tif 000002
【図２】
0005670723.tif 000003
【図３】
0005670723.tif 000004
【図４】
0005670723.tif 000005
【図５】
0005670723.tif 000006
【図６】
0005670723.tif 000007
【図７】
0005670723.tif 000008
【図８】
0005670723.tif 000009