(57)【要約】【課題】  複雑なシェーダプログラムではサブルーチンコールを多用するため、処理効率が悪くなる。【解決手段】  参照アドレス生成部７２は、シェーダ３０からＵＶ座標値を受け取り、テクスチャを参照するための参照アドレスに変換し、参照アドレスにもとづいてテクスチャメモリ７６に格納されたテクスチャマップまたは命令マップを参照する。テクスチャマップから参照された値は、補間部７４に供給され、命令マップから参照された値は、命令バッファ５２に書き込まれる。補間部７４は、テクスチャマッピング処理を行い、ピクセルのＵＶ座標値に対応したカラー値を生成し、データパスを介してシェーダ３０に供給する。命令デコーダ６２は、命令バッファ５２に保持された命令コードを読み出し、デコードし、デコードされた命令を実行するための制御信号をシェーダ３０に与える。【選択図】  図２
2006146721.tif 000002
【特許請求の範囲】
【請求項１】
命令に関するデータを２次元座標に対応づけて格納した命令マップを記憶する命令マップ記憶部と、
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、
前記演算処理部から前記命令マップを参照するための２次元座標を指定するデータを受け取り、その指定された２次元座標に対応する命令に関するデータを前記命令マップから読み出して前記演算処理部に供給する制御部とを含むことを特徴とする描画処理装置。
【請求項２】
前記演算処理部は、前記命令マップが適用される前記描画対象物の表面に関する２次元パラメータ座標を、前記命令マップを参照するための２次元座標として指定することを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記制御部は、
前記指定された２次元座標を参照して前記命令マップから読み出された命令に関するデータを保持する命令バッファと、
前記命令バッファに保持された命令に関するデータを取得し、その命令を解読して前記演算処理部に供給する命令処理部とを含むことを特徴とする請求項１または２に記載の描画処理装置。
【請求項４】
前記演算処理部は、
前記描画ユニットのデータを保持するレジスタと、
前記レジスタから前記描画ユニットのデータを読み出して命令を実行する演算器とを含み、
前記制御部は、
前記指定された２次元座標を参照して前記命令マップから読み出された命令に関するデータを制御信号の供給経路を通じて前記演算器に供給することを特徴とする請求項１から３のいずれかに記載の描画処理装置。
【請求項５】
所定の値を２次元座標に対応づけて格納したマップを記憶するマップ記憶部と、
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、
前記演算処理部から前記マップを参照するための２次元座標を指定するデータを受け取り、その指定された２次元座標に対応する値を前記マップから読み出して前記演算処理部に供給する制御部とを含み、
前記マップは、前記描画ユニットに適用されるべきテクスチャの属性値または前記描画ユニットに適用されるべき命令に関するデータを２次元座標に対応づけて格納したものであることを特徴とする描画処理装置。
【請求項６】
前記演算処理部は、前記マップが適用される前記描画対象物の表面に関する２次元パラメータ座標を、前記マップを参照するための２次元座標として指定することを特徴とする請求項５に記載の描画処理装置。
【請求項７】
前記制御部は、前記指定された２次元座標を参照して前記マップから読み出された値が前記描画ユニットに適用されるべき命令に関するデータである場合は、その命令を前記演算処理部に対する制御信号の供給経路を通じて供給することを特徴とする請求項５に記載の描画処理装置。
【請求項８】
前記制御部は、
前記指定された２次元座標を参照して前記マップから読み出された値が前記描画ユニットに適用されるべき命令に関するデータである場合に、その命令に関するデータを保持する命令バッファと、
前記命令バッファに保持された命令に関するデータを取得し、その命令を解読して前記演算処理部に供給する命令処理部とを含むことを特徴とする請求項５から７のいずれかに記載の描画処理装置。
【請求項９】
前記演算処理部は、
前記描画ユニットのデータを保持するレジスタと、
前記レジスタから前記描画ユニットのデータを読み出して命令を実行する演算器とを含み、
前記制御部は、
前記指定された２次元座標を参照して前記マップから読み出された値が前記描画ユニットに適用されるべきテクスチャの属性値である場合、そのテクスチャの属性値に基づいたデータを前記レジスタに供給し、
前記指定された２次元座標を参照して前記マップから読み出された値が前記描画ユニットに適用されるべき命令に関するデータである場合、その命令を実行するための制御信号を前記演算器に供給することを特徴とする請求項５から８のいずれかに記載の描画処理装置。
【請求項１０】
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、
前記演算処理部により描画ユニット単位で描画演算処理された前記描画対象物の描画データを記憶するフレームバッファと、
前記描画ユニットに適用されるべき命令を前記演算処理部に供給する制御部とを含み、
前記フレームバッファは、命令に関するデータを２次元座標に対応づけて格納した命令マップも記憶し、
前記制御部は、前記演算処理部から前記命令マップを参照するための２次元座標を指定するデータを受け取り、その指定された２次元座標に対応する命令に関するデータを前記命令マップから読み出して前記演算処理部に供給することを特徴とする描画処理装置。
【請求項１１】
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、
前記演算処理部により描画ユニット単位で描画演算処理された前記描画対象物の描画データを記憶するフレームバッファと、
前記描画ユニットに適用されるべき命令を前記演算処理部に供給する制御部とを含み、
前記制御部は、前記フレームバッファに中間データとして記憶された前記描画データの少なくとも一部を取得して、前記描画ユニットに適用されるべき命令に利用することを特徴とする描画処理装置。
【請求項１２】
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータを保持するレジスタと、
前記レジスタから前記描画ユニットのデータを読み出して命令を実行する演算器と、
前記描画ユニットに適用されるべき命令を前記演算器に供給する制御部とを含み、
前記レジスタは、前記演算器による演算結果も中間データとして保持し、
前記制御部は、前記レジスタに保持された中間データの少なくとも一部を取得して、前記描画ユニットに適用されるべき命令に利用することを特徴とする描画処理装置。
【請求項１３】
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットに適用されるべき命令に関するデータを２次元座標に対応づけて格納した命令マップを参照して、前記命令マップが適用される前記描画対象物の表面に関する２次元パラメータ座標に対応する命令に関するデータを読み出し、読み出した命令に関するデータにしたがって前記描画ユニットを演算処理することを特徴とする描画処理方法。
【請求項１４】
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットに適用されるべきテクスチャの属性値または該各々の描画ユニットに適用されるべき命令に関するデータを２次元座標に対応づけて格納したマップを参照して、前記マップが適用される前記描画対象物の表面に関する２次元パラメータ座標に対応する値を読み出し、その読み出した値が前記命令に関するデータである場合には、その命令にしたがって前記描画ユニットを演算処理し、その読み出した値が前記テクスチャの属性値である場合には、その属性値にしたがってテクスチャを前記描画ユニットに適用することを特徴とする描画処理方法。
【請求項１５】
描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットに適用されるべき命令に関するデータを前記描画対象物の表面に関する２次元パラメータ座標に対応づけて格納したことを特徴とする命令マップのデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は描画データを演算処理する描画処理装置および描画処理方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスにおけるレンダリングエンジンは、複雑で高度なシェーディングアルゴリズムに対応するため、プログラマビリティをもった、よりプロセッサライクなものに変わりつつある。特にレンダリングエンジンの中核であるピクセルシェーダは、固定のグラフィックス機能を実装したハードウエアから、ＣＰＵと同じような命令セットを備えた演算ユニットを内蔵し、プログラミングによってフレキシブルに機能を追加していくことができるプロセッサへとその姿を変えつつある。
【０００３】
現在のプログラマブルなピクセルシェーダでは、描画処理対象の３次元オブジェクトに対してポリゴンセットアップを行った後、各ポリゴンをラスタライズしたピクセルデータを演算処理し、最終的なカラー値を算出する。このとき、シェーダプログラムは描画処理対象のオブジェクト単位で持たせるため、ポリゴン内のすべてのピクセルに対して同一のシェーダプログラムが実行されることになる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
高品質の描画データを生成するためには、オブジェクトの各ポリゴンについて同一の処理をするだけでは足りず、ピクセル単位で細かな描画処理を行う必要がある。従来のピクセルシェーダでは、オブジェクト単位で同一のシェーダプログラムを実行するため、ピクセル単位でプログラマビリティを持たせるには、サブルーチンコールを用いてプログラムを分岐させ、飛び先のサブルーチンで個別のプログラムを実行する、もしくは実行するかしないかをフラグで制御する条件付き（conditional）実行を行うことで対応するしかなかった。しかし、ピクセル単位でシェーダプログラムを条件分岐させると、分岐によるペナルティが大きくなり、プログラム全体の処理速度の低下が問題となる。また、条件付き実行の場合、実行しない部分も実行時間にカウントされる。このように、ピクセル単位の多様な描画処理を実現すると、非常に効率が悪くなる。
【０００５】
本発明はこうした課題に鑑みてなされたものであり、その目的は、描画演算処理単位でプログラマビリティをもたせることのできる描画処理技術を提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明のある態様の描画処理装置は、命令に関するデータを２次元座標に対応づけて格納した命令マップを記憶する命令マップ記憶部と、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、前記演算処理部から前記命令マップを参照するための２次元座標を指定するデータを受け取り、その指定された２次元座標に対応する命令に関するデータを前記命令マップから読み出して前記演算処理部に供給する制御部とを含む。
【０００７】
ここで「描画ユニット」とは、描画対象物の描画演算処理単位であり、たとえば、単一のピクセル、複数のピクセルの集まりなどである。「命令に関するデータ」とは、描画演算処理単位に適用される命令に関するデータであり、命令コードや描画演算処理のプログラムの分岐先アドレスなどを含む。
【０００８】
演算処理部は、複数の描画ユニットに対して並列に命令を実行してもよく、複数の描画ユニットに対して順に命令を実行してもよい。演算処理部は、描画ユニットに対する命令をパイプライン処理によって実行してもよい。
【０００９】
この態様によると、描画ユニットを演算処理する際に、命令マップを参照して描画ユニット毎に命令を切り替えて実行することができる。
【００１０】
本発明の別の態様もまた、描画処理装置である。この装置は、所定の値を２次元座標に対応づけて格納したマップを記憶するマップ記憶部と、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、前記演算処理部から前記マップを参照するための２次元座標を指定するデータを受け取り、その指定された２次元座標に対応する値を前記マップから読み出して前記演算処理部に供給する制御部とを含む。前記マップは、前記描画ユニットに適用されるべきテクスチャの属性値または前記描画ユニットに適用されるべき命令に関するデータを２次元座標に対応づけて格納したものである。
【００１１】
ここで「テクスチャの属性値」とは、テクスチャの属性に関する値であり、たとえば、テクスチャ画像のカラー値、カラー値のインデックスなどである。「マップ」とは、２次元座標に対応づけて何らかの値が格納されたものであり、座標を指定してそれに対応する値を参照することができるように構成されたデータ構造をもつ。
【００１２】
この態様によると、テクスチャマッピングの構成を利用して、描画ユニット単位で命令を適用することができる。また、マップのデータ構造をテクスチャの属性値または命令に関するデータを格納するために共用し、マップに格納された値がテクスチャの属性値であっても、命令に関するデータであっても区別することなくマップを参照して、マップから参照される値を描画ユニットに適用することができる。
【００１３】
本発明のさらに別の態様もまた、描画処理装置である。この装置は、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、前記演算処理部により描画ユニット単位で描画演算処理された前記描画対象物の描画データを記憶するフレームバッファと、前記描画ユニットに適用されるべき命令を前記演算処理部に供給する制御部とを含む。前記フレームバッファは、命令に関するデータを２次元座標に対応づけて格納した命令マップも記憶し、前記制御部は、前記演算処理部から前記命令マップを参照するための２次元座標を指定するデータを受け取り、その指定された２次元座標に対応する命令に関するデータを前記命令マップから読み出して前記演算処理部に供給する。
【００１４】
この態様によると、フレームバッファに格納された命令マップを参照するため、命令マップからのデータの転送が高速であり、描画ユニット単位での命令の切り替え実行の処理性能を向上させることができる。
【００１５】
本発明のさらに別の態様もまた、描画処理装置である。この装置は、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータに対してそれぞれ命令を実行する演算処理部と、前記演算処理部により描画ユニット単位で描画演算処理された前記描画対象物の描画データを記憶するフレームバッファと、前記描画ユニットに適用されるべき命令を前記演算処理部に供給する制御部とを含む。前記制御部は、前記フレームバッファに中間データとして記憶された前記描画データの少なくとも一部を取得して、前記描画ユニットに適用されるべき命令に利用する。
【００１６】
この態様によると、フレームバッファの値を描画ユニット単位の命令に利用することができる。フレームバッファは、演算処理部により描画演算処理された描画対象物の描画データと１対１に対応しているため、フレームバッファのアドレスを指定して、必要な値を直ちに取り出して、描画演算処理のプログラムに利用することができる。
【００１７】
本発明のさらに別の態様もまた、描画処理装置である。この装置は、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットのデータを保持するレジスタと、前記レジスタから前記描画ユニットのデータを読み出して命令を実行する演算器と、前記描画ユニットに適用されるべき命令を前記演算器に供給する制御部とを含む。前記レジスタは、前記演算器による演算結果も中間データとして保持し、前記制御部は、前記レジスタに保持された中間データの少なくとも一部を取得して、前記描画ユニットに適用されるべき命令に利用する。
【００１８】
この態様によると、演算器による演算結果を描画ユニット単位の命令に利用することができる。
【００１９】
本発明のさらに別の態様は、描画処理方法である。この方法は、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットに適用されるべき命令に関するデータを２次元座標に対応づけて格納した命令マップを参照して、前記命令マップが適用される前記描画対象物の表面に関する２次元パラメータ座標に対応する命令に関するデータを読み出し、読み出した命令に関するデータにしたがって前記描画ユニットを演算処理する。
【００２０】
本発明のさらに別の態様もまた、描画処理方法である。この方法は、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットに適用されるべきテクスチャの属性値または該各々の描画ユニットに適用されるべき命令に関するデータを２次元座標に対応づけて格納したマップを参照して、前記マップが適用される前記描画対象物の表面に関する２次元パラメータ座標に対応する値を読み出し、その読み出した値が前記命令に関するデータである場合には、その命令にしたがって前記描画ユニットを演算処理し、その読み出した値が前記テクスチャの属性値である場合には、その属性値にしたがってテクスチャを前記描画ユニットに適用する。
【００２１】
本発明のさらに別の態様は、命令マップのデータ構造である。この命令マップのデータ構造は、描画ユニット単位で描画演算処理される描画対象物の該各々の描画ユニットに適用されるべき命令に関するデータを前記描画対象物の表面に関する２次元パラメータ座標に対応づけて格納してなる。
【００２２】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００２３】
本発明によれば、描画処理単位の高いプログラマビリティを実現するとともに、処理性能を向上させることができる。
【発明を実施するための最良の形態】
【００２４】
図１は、実施の形態に係る描画処理装置１００の構成図である。描画処理装置１００は、３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理を行う。
【００２５】
ラスタライザ１０は、メモリもしくは他のプロセッサや頂点シェーダなどから描画プリミティブの頂点データを取得し、描画するスクリーンに対応したピクセル情報に変換する。描画プリミティブは一般的には三角形であり、ラスタライザ１０は、３次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、１列毎に量子化されたピクセルに変換する。ラスタライザ１０により、描画プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセル情報が算出される。
【００２６】
ラスタライザ１０は、スキャンラインに沿って描画ユニットを生成し、シェーダユニット２０に与える。ラスタライザ１０からシェーダユニット２０に供給された描画ユニットは、キューにスタックされ、シェーダユニット２０は、キューにスタックされた描画ユニットを順に処理する。
【００２７】
ここで、「描画ユニット」とは、一般には、所定の大きさのピクセル領域であり、１つのピクセルであることも、複数のピクセルの集合であることもある。あるいは、描画ユニットは、１つのピクセルをさらに細かく分割したサブピクセルの１つ、もしくはそのようなサブピクセルの集合であってもよい。以下では、説明の簡単のため、描画ユニットが複数のピクセルもしくは複数のサブピクセルからなる場合でも、描画ユニット内部での個々のピクセルもしくはサブピクセルの処理を隠蔽して、描画ユニット全体で１つのピクセルであるとみなして、本実施の形態に特徴的な描画処理方法を説明する。したがって、以下では「描画ユニット」を単にピクセルと称することにする。
【００２８】
シェーダユニット２０は、ピクセルをパイプライン処理するシェーダ３０と、シェーダ３０における描画演算処理の制御機構を含む。
【００２９】
シェーダ３０は、ラスタライザ１０により算出されたピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値を求め、さらに、テクスチャマッピングを行う場合は、テクスチャユニット７０から得られるテクスチャのカラー値を合成して最終的なピクセルのカラー値を算出し、フレームバッファ４０にピクセルデータを書き込む。シェーダ３０は、さらに、フレームバッファ４０に保持された描画データに対して、フォギング、アルファブレンディング等の処理を行い、最終的なピクセルのカラー値を求め、フレームバッファ４０のピクセルデータを更新する。フレームバッファ４０に記憶されたピクセルデータは、表示装置に出力されて表示される。
【００３０】
シェーダ３０は、レジスタファイル３２、演算部３４、および合成部３６を含む。レジスタファイル３２は、汎用レジスタやテクスチャロード命令の結果を保持するレジスタなどの各種レジスタを集めたレジスタ群であり、ラスタライザ１０から投入されるピクセルデータを保持するとともに、演算部３４による演算の中間データや、テクスチャユニット７０から供給されるテクスチャデータを保持する。また、レジスタファイル３２は、フレームバッファ４０に記憶されたピクセルデータの一部や中間処理データなどを保持することもできる。
【００３１】
演算部３４は、複数の演算器の集合体であり、シェーディング処理に係る演算を行う。演算部３４は、レジスタファイル３２からピクセルデータを読み出し、シェーダプログラムを実行してピクセルデータをパイプライン処理し、その結果をレジスタファイル３２に書き戻すか、合成部３６に供給する。
【００３２】
合成部３６は、ピクセルデータのフォーマット変換を行い、フレームバッファ４０に対してリード・モディファイ・ライト（ＲＭＷ）を行う。より具体的には、合成部３６は、フレームバッファ４０に記憶された生成済みのピクセルデータを読み込み、演算部３４により算出されたピクセルデータと比較し、Ｚテストや、アルファブレンディングなどのピクセルデータの合成処理などを行い、更新されたピクセルデータをフレームバッファ４０に書き戻す。
【００３３】
フレームバッファ４０は、シェーダ３０により生成されたピクセルデータをスクリーン座標で格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。
【００３４】
テクスチャユニット７０は、シェーダユニット２０において処理されるピクセルにテクスチャデータをマッピングする処理を行う。ポリゴン面上のピクセルにマッピングされるテクスチャの位置を２次元パラメータ座標であるＵＶ座標系で表す。テクスチャユニット７０は、シェーダ３０からピクセルにマッピングされるテクスチャのＵＶ座標値を取得し、ＵＶ座標値を参照アドレスに変換した後、テクスチャから参照アドレスに対応する属性値を取得して、シェーダ３０に供給する。
【００３５】
テクスチャユニット７０は、ＵＶ座標値に対応づけてテクスチャの属性値を格納したテクスチャマップだけでなく、ＵＶ座標値に対応づけて命令に関するデータを格納した命令マップを用いて、テクスチャマッピングと同様の方法で、命令をポリゴン面上のピクセルにマッピングして、ピクセル毎に異なる命令を適用することができる。
【００３６】
以下、テクスチャマップと命令マップを総称して「マップ」と呼ぶ。また、ＵＶ座標値にもとづいてマップから読み出される値を「被参照値」と呼ぶ。
【００３７】
命令マップは、ＵＶ値にもとづいて値が参照されるという構造上はテクスチャマップと同じであるが、マップに格納される値が命令に関するデータである点で、一般的な意味でのテクスチャマップとは処理の性質が異なり、区別される。すなわち、テクスチャマップにおいては、テクスチャマッピングにより、マップから参照されたテクスチャのカラー値がピクセルのカラー値に合成されるが、命令マップでは、マップから参照された命令がピクセルに適用されて実行されるのであり、両者の間では、ピクセルに適用される内容にデータとプログラムの違いがある。
【００３８】
命令マップに格納される命令に関するデータは、命令コードそのものであるか、プログラムの分岐先アドレスである。前者の場合、命令マップの各要素のビット長で識別可能な命令コードが命令マップに格納される。たとえば、命令マップに格納される被参照値のビット長が２４ビットであるとすれば、２４ビットで表現可能な命令コードが命令マップに直接格納される。分岐先アドレスが命令マップに格納される場合は、プログラムの分岐先アドレスにはサブルーチンが格納される。命令マップをポリゴン面にマッピングすることにより、ポリゴン面の各ピクセルに対して実行すべき命令コードもしくはサブルーチンが決定される。
【００３９】
テクスチャマップに格納されるテクスチャの属性値は、テクスチャのカラー値もしくはカラー値を参照するためのインデックスである。後者のインデックスの場合は、カラールックアップテーブルを参照して実際のカラー値に変換される。
【００４０】
テクスチャユニット７０は、ＵＶ座標値にもとづいてマップから取得される被参照値がテクスチャの属性値であれば、データパス９２を介してシェーダ３０のレジスタファイル３２に書き込み、マップから取得される被参照値が命令に関するデータであれば、命令バッファ５２にバッファリングする。命令バッファ５２には、テクスチャユニット７０から与えられた命令コードまたは分岐先アドレスが格納されることになる。
【００４１】
命令処理部６０は、処理対象のオブジェクトに対するシェーダプログラムを命令メモリ６６から取得し、命令コードをフェッチ、デコードした後、デコードされた命令を実行する。命令メモリ６６は、メインメモリなどからロードした命令をキャッシュするインストラクションキャッシュとして構成されてもよい。また、命令処理部６０は、命令バッファ５２に保持された命令コードも同様に、デコードして実行する。
【００４２】
命令処理部６０は、デコードされた命令を実行するために、命令パス９４を介してシェーダ３０に対して実行すべき命令に関する制御信号ＣＮＴＬを与え、シェーダ３０のレジスタファイル３２、演算部３４および合成部３６を制御する。シェーダ３０は、命令処理部６０から供給される制御信号ＣＮＴＬにより制御されてピクセルに関する演算をパイプライン処理によって実行する。
【００４３】
命令バッファ５２には、テクスチャユニット７０に格納された命令マップから読み出された命令に関するデータが書き込まれる以外に、フレームバッファ４０から読み出された命令に関するデータが書き込まれてもよい。その場合、フレームバッファ４０に命令マップが設けられ、ＵＶ座標値に応じた被参照値がフレームバッファ４０からレジスタファイル３２へのデータパス９６を介して、いったんレジスタファイル３２に書き込まれ、その後、レジスタファイル３２から命令バッファ５２へのＵＶ座標値のパス９０を介して、命令バッファ５２に命令に関するデータが書き込まれる。あるいは、レジスタファイル３２を経由しないで、直接フレームバッファ４０から命令バッファ５２へ命令に関するデータが書き込まれてもよい。
【００４４】
フレームバッファ４０からレジスタファイル３２へのデータ転送にかかる時間は、シェーダ３０がテクスチャユニット７０にＵＶ座標値を指定してから、テクスチャマッピングにより命令マップの被参照値を取得するまでのレイテンシーよりも短いため、フレームバッファ４０に命令マップを格納しておけば、命令バッファ５２への命令に関するデータの供給を高速に行うことができ、処理性能がさらに向上する。
【００４５】
また、命令マップの形ではなく、フレームバッファ４０に格納されたピクセルデータの中間値や演算結果を、レジスタファイル３２を経由して、もしくはレジスタファイル３２を経由せずに直接、命令バッファ５２に書き込み、命令に関するデータとして利用してもよい。これにより、中間値や演算結果をプログラムの一部として直接的に利用することも可能になる。また、レジスタファイル３２には、演算部３４による演算の中間結果も保持されるため、その中間結果を、レジスタファイル３２から命令バッファ５２へのＵＶ座標値のパス９０を介して命令バッファ５２に供給し、プログラムの一部として利用してもよい。
【００４６】
図２は、シェーダユニット２０の制御機構の詳細を説明する図である。同図は、シェーダ３０の描画演算処理を制御する制御部５０の構成を詳細に示したものであり、参照アドレス生成部７２、補間部７４、およびテクスチャメモリ７６は、図１のテクスチャユニット７０に相当し、命令デコーダ６２およびプログラムカウンタ６４は、図１の命令処理部６０に相当する。
【００４７】
参照アドレス生成部７２は、シェーダ３０からＵＶ座標値を受け取り、テクスチャを参照するための参照アドレスに変換し、参照アドレスをアドレスバスに供給することにより、テクスチャメモリ７６を参照する。テクスチャメモリ７６は参照アドレスに対応する被参照値をデータバスに出力する。
【００４８】
テクスチャメモリ７６から参照アドレスに応じてデータバスに出力された被参照値がテクスチャの属性値であれば、補間部７４に供給され、命令に関するデータであれば、命令バッファ５２に供給される。
【００４９】
補間部７４は、テクスチャの属性値にもとづいてバイリニア補間などの補間処理を行って、ピクセルのＵＶ座標値に対応したカラー値を生成する。ここでテクスチャの属性値は、ＲＧＢ値またはＲＧＢ値のインデックスであり、後者の場合は、補間部７４は、カラールックアップテーブルを参照することによりインデックスをＲＧＢ値に変換する。補間部７４は補間処理後のカラー値をデータパスを介してシェーダ３０に供給する。
【００５０】
命令バッファ５２は、テクスチャメモリ７６から参照アドレスに応じて読み出された命令に関するデータ、すなわち命令コードまたは分岐先アドレスを保持する。命令バッファ５２は、命令メモリ６６と同様に、命令コードをキャッシュするメモリとして機能し、命令メモリ６６と一体に構成されてもよく、命令メモリ６６とは別個に構成されてもよい。
【００５１】
プログラムカウンタ６４は、シェーダプログラムにおける次に読み込むべき命令コードのアドレスを記憶するレジスタであり、命令メモリ６６からプログラムカウンタ６４で指定された命令コードが読み込まれるたびに、カウントアップされる。
【００５２】
命令デコーダ６２は、プログラムカウンタ６４にしたがって、命令メモリ６６に格納されたシェーダプログラムから命令コードを読み出し、デコードする。このとき、プログラムカウンタ６４が命令メモリ６６のアドレスではなく、命令バッファ５２のアドレスを指している場合は、命令バッファ５２から命令コードを読み出してデコードする。
【００５３】
命令デコーダ６２は、命令をデコードし、デコードされた命令を実行するための制御信号を命令バッファ５２、参照アドレス生成部７２、補間部７４、およびシェーダ３０に与え、それぞれを制御する。
【００５４】
シェーダ３０内では、レジスタファイル３２、演算部３４、合成部３６のそれぞれに制御信号が与えられるが、それぞれのパイプラインの段階に合わせて制御信号の供給タイミングをシフトさせる。命令を実行するための制御信号をパイプラインの位置に応じたサイクル数だけシフトして供給することにより、ピクセルに対するパイプライン処理の段階が進むにつれて、その段階に該当する命令がレジスタファイル３２、演算部３４、および合成部３６に供給され、ピクセルに対するパイプライン処理が遂行される。
【００５５】
以上の構成の描画処理装置１００による描画制御の手順をフローチャートおよびプログラム例を用いて説明する。
【００５６】
図３は、制御部５０による描画制御手順を説明するフローチャートである。参照アドレス生成部７２は、シェーダ３０からＵＶ座標値を取得する（Ｓ１０）。参照アドレス生成部７２は、ＵＶ座標値からマップを参照するための参照アドレスを生成する（Ｓ１２）。参照アドレス生成部７２は、参照アドレスをテクスチャメモリ７６に与え、テクスチャメモリ７６に格納されたマップから参照アドレスに対応する被参照値を読み出す（Ｓ１４）。
【００５７】
読み出された被参照値がテクスチャの属性値であれば（Ｓ１６のＹ）、補間部７４はバイリニア補間を行い（Ｓ１８）、補間後のカラー値をシェーダ３０に出力する（Ｓ２０）。
【００５８】
読み出された被参照値がテクスチャの属性値ではない、すなわち命令に関するデータであれば（Ｓ１６のＮ）、その命令に関するデータは命令バッファ５２に格納され（Ｓ２２）、命令デコーダ６２は、命令バッファ５２から命令に関するデータを読み取り、デコードして実行する（Ｓ２４）。
【００５９】
図４は、命令デコーダ６２によるシェーダプログラムのデコード手順を説明するフローチャートである。命令メモリ６６からシェーダプログラムの命令コードがフェッチされる（Ｓ４０）。命令デコーダ６２は、フェッチされた命令コードをデコードし、その命令がテクスチャを取得するためのＴＥＸ命令であれば（Ｓ４２のＹ）、ステップＳ６０に進み、ＴＥＸ命令でなければ（Ｓ４２のＮ）、ステップＳ４４に進む。
【００６０】
ステップＳ６０において、命令デコーダ６２は、ＴＥＸ命令の出力先が命令バッファ５２であるかどうかを調べる。ＴＥＸ命令の出力先が命令バッファ５２であるかどうかは、出力先として指定されたレジスタの種類によって判別することができる。
【００６１】
ＴＥＸ命令の出力先が命令バッファ５２でない場合（Ｓ６０のＮ）、そのＴＥＸ命令は、テクスチャマップを参照してテクスチャをピクセルにマッピングするためのテクスチャロード命令であり、テクスチャメモリ７６に格納されたテクスチャマップからテクスチャデータが取得され（Ｓ６６）、補間部７４においてバイリニア補間が行われ（Ｓ６８）、シェーダ３０のレジスタファイル３２の所定のレジスタに補間後のカラー値が書き込まれる（Ｓ７０）。これら一連のテクスチャマッピングの処理の後、ステップＳ４０に戻り、次の命令の処理が続行する。
【００６２】
ＴＥＸ命令の出力先が命令バッファ５２である場合（Ｓ６０のＹ）、そのＴＥＸ命令は、命令マップを参照して命令をピクセルに適用するためのテクスチャロード命令であり、テクスチャメモリ７６に格納された命令マップから命令に関するデータが取得され（Ｓ６２）、命令バッファ５２に格納される（Ｓ６４）。
【００６３】
ステップＳ４４において、デコードした命令がサブルーチンを呼び出すＣＡＬＬ命令である場合（Ｓ４４のＹ）、ステップＳ５０に進み、ＣＡＬＬ命令でなければ（Ｓ４４のＮ）、ステップＳ４６に進む。
【００６４】
ステップＳ５０において、命令デコーダ６２は、コール先が命令バッファ５２であるかどうかを調べる。コール先が命令バッファ５２であるかどうかはコールすべきアドレスを格納したレジスタの種類によって判別することができる。
【００６５】
コール先が命令バッファ５２ではない、すなわち通常のコール命令である場合（Ｓ５０のＮ）、スタックに現在のプログラムカウンタ６４の値を格納して退避し（Ｓ５６）、プログラムカウンタ６４に命令メモリ６６のコール先アドレスを投入する（Ｓ５８）。プログラムカウンタ６４に命令メモリ６６のコール先アドレスが投入されることにより、命令メモリ６６からコール先アドレスの命令コードがフェッチされ、命令デコーダ６２によりデコードされて実行に移される。このように、シェーダプログラムにコール命令がある場合は、サブルーチンに分岐してサブルーチンが実行される。
【００６６】
コール先が命令バッファ５２である場合（Ｓ５０のＹ）、スタックに現在のプログラムカウンタ６４の値を格納して退避し（Ｓ５２）、プログラムカウンタ６４に命令バッファ５２のコール先アドレスを投入する（Ｓ５４）。プログラムカウンタ６４に命令バッファ５２のコール先アドレスが投入されることにより、命令バッファ５２からコール先アドレスの命令コードがフェッチされ、命令デコーダ６２によりデコードされて実行に移される。これにより、描画対象のオブジェクト単位で実行されるシェーダプログラム自身は分岐することなく、命令マップによりピクセル単位でサブルーチンが切り替えられて実行される。
【００６７】
一連のＣＡＬＬ命令の処理が終わると、ステップＳ４０に戻り、次の命令の処理が続行する。
【００６８】
ステップＳ４６において、命令デコーダ６２は、ＴＥＸ命令、ＣＡＬＬ命令以外のＬＤ命令やＳＴ命令などの各種命令を実行する。プログラムの終端に達し、次に実行するべき命令がない場合（Ｓ４８のＹ）、命令デコーダ６２によるプログラムのデコード処理を終了し、そうでない場合（Ｓ４８のＮ）、ステップＳ４０に戻り、次の命令のデコード処理が続行する。
【００６９】
図５（ａ）〜（ｃ）は、あるオブジェクトをレンダリングするためのシェーダプログラムの例を説明する図である。図５（ａ）は、シェーダプログラムの０番地から４番地までを示すもので、通常のテクスチャマッピングを実行するプログラムである。
【００７０】
プログラムの０番地は、ロード（ＬＤ）命令であり、ラスタライザ１０から取得した第２引数のパラメータ＄Ｐ０の値を第１引数のレジスタ＄０にロードする。パラメータ＄Ｐ０にはピクセルのＵ座標値が格納されている。プログラムの１番地も、ＬＤ命令であり、ラスタライザ１０から取得した第２引数のパラメータ＄Ｐ１の値を第１引数のレジスタ＄１にロードする。パラメータ＄Ｐ１にはピクセルのＶ座標値が格納されている。
【００７１】
プログラムの２番地は、テクスチャロード（ＴＥＸ）命令であり、第２、第３引数のレジスタ＄０、＄１に格納されたＵＶ座標値にもとづいてテクスチャユニット７０に格納されたテクスチャマップからテクスチャの属性値を取得し、第１引数のレジスタ＄２に出力する。
【００７２】
プログラムの３番地は、ＬＤ命令であり、ラスタライザ１０から取得した第２引数のパラメータ＄Ｐ２の値を第１引数のレジスタ＄３にロードする。パラメータ＄Ｐ２にはピクセルのカラー値が格納されている。
【００７３】
プログラムの４番地は、乗算（ＭＵＬ）命令であり、第２引数のレジスタ＄２の値に第３引数のレジスタ＄３の値を乗算し、第１引数のレジスタ＄４に代入する。第２引数のレジスタ＄２にはピクセルにマッピングされるテクスチャのカラー値が格納されており、第３引数のレジスタ＄３にはピクセルの元のカラー値が格納されているから、これらを掛け合わせることでテクスチャのカラー値がピクセルのカラー値に合成され、テクスチャマッピング後のカラー値が得られる。
【００７４】
図５（ｂ）は、シェーダプログラムの５番地から８番地までを示すもので、命令マップにもとづいてピクセル単位でサブルーチンを実行するプログラムである。
【００７５】
プログラムの５番地は、ＬＤ命令であり、ラスタライザ１０から取得した第２引数のパラメータ＄Ｐ３の値を第１引数のレジスタ＄０にロードする。パラメータ＄Ｐ３には命令マップのＵ座標値が格納されている。プログラムの６番地も、ＬＤ命令であり、ラスタライザ１０から取得した第２引数のパラメータ＄Ｐ４の値を第１引数のレジスタ＄１にロードする。パラメータ＄Ｐ４には命令マップのＶ座標値が格納されている。
【００７６】
プログラムの７番地は、ＴＥＸ命令であり、第２、第３引数のレジスタ＄０、＄１に格納されたＵＶ座標値にもとづいて命令マップから被参照値を取得し、第１引数のレジスタ＄ＩＭ０で指定された命令バッファ５２のアドレスに書き込む命令である。命令マップからＵＶ座標値にもとづいて読み出された被参照値は、この場合、プログラムの飛び先アドレスである。
【００７７】
プログラムの８番地は、コール（ＣＡＬＬ）命令であり、第１引数のレジスタ＄ＩＭ０で指定された命令バッファ５２のアドレスをコールする。これにより、命令バッファ５２の＄ＩＭ０番地に格納された飛び先アドレスに格納されているサブルーチンが命令マップから読み出され、処理中のピクセルに対してそのサブルーチンが実行される。
【００７８】
図６は、ＵＶ座標値に対応づけてサブルーチンを格納した命令マップを説明する図である。ＵＶ座標値が（０，０）、（０，１）、（１，０）、（１，１）である４つのテクセルのそれぞれに対応づけて、ＩＭ０からＩＭ３までのコール先アドレスが設けられ、各コール先アドレス毎にサブルーチンが格納されている。シェーダ３０から指定されたＵＶ座標値にもとづいて、コール先アドレスが読み出され、命令デコーダ６２がそのコール先アドレスをコールすることで、ピクセル単位でサブルーチンが切り替えられて実行される。
【００７９】
ＵＶ座標値（０，０）に対応するコール先アドレスＩＭ０には、ノーオペレーション（ＮＯＰ）、すなわち何もしないでリターンするサブルーチンが格納されている。
【００８０】
ＵＶ座標値（０，１）に対応するコール先アドレスＩＭ１には、加算（ＡＤＤ）命令、すなわち第２引数のレジスタ＄３の値に第３引数のレジスタ＄４の値を加算し、第１引数のレジスタ＄５に格納するサブルーチンが格納されている。
【００８１】
ＵＶ座標値（１，０）に対応するコール先アドレスＩＭ２には、減算（ＳＵＢ）命令、すなわち第２引数のレジスタ＄３の値から第３引数のレジスタ＄４の値を減算し、第１引数のレジスタ＄５に格納するサブルーチンが格納されている。
【００８２】
ＵＶ座標値（１，１）に対応するコール先アドレスＩＭ３には、転送（ＭＯＶ）命令、すなわち第２引数のレジスタ＄４の値を第１引数のレジスタ＄５に転送するサブルーチンが格納されている。
【００８３】
図５（ｃ）に戻り、シェーダプログラムの続きを説明する。図５（ｃ）は、シェーダプログラムの９番地からＤ番地までを示すもので、フレームバッファ４０に格納されているピクセルデータとの間でアルファブレンディングをして最終的なピクセルデータをフレームバッファ４０に書き戻すプログラムである。
【００８４】
プログラムの９番地は、ＬＤ命令であり、ラスタライザ１０から取得した第２引数のパラメータ＄Ｐ５の値を第１引数のレジスタ＄７にロードする命令である。パラメータ＄Ｐ５にはアルファ（α）値が格納されている。
【００８５】
プログラムのＡ番地は、ＬＤ命令であり、第２引数のレジスタ＄ＤＢ０で指定されたフレームバッファ４０のアドレスからピクセルカラー値を取得し、第１引数のレジスタ＄６にロードする。
【００８６】
プログラムのＢ番地は、ＳＵＢ命令であり、第２引数のレジスタ＄５の値から第３引数のレジスタ＄６の値を減算し、第１引数のレジスタ＄８に格納する。
【００８７】
プログラムのＣ番地は、積和（ＭＡＤ）命令であり、第２引数のレジスタ＄７の値に第３引数のレジスタ＄８の値を掛け算し、第４引数のレジスタ＄６の値を加算した結果を第１引数のレジスタ＄９に格納する。これにより、２つのレジスタ＄５、＄６の値について、α・（＄５−＄６）＋＄６＝α・＄５＋（１−α）・＄６の計算がなされ、２つのピクセル値を（１−α）：αの比で混合するアルファブレンディングが行われる。
【００８８】
プログラムのＤ番地は、ストア（ＳＴ）命令であり、第２引数のレジスタ＄９に格納されているアルファブレンディング後のピクセルカラー値を第１引数のレジスタ＄ＤＢ０で指定されたフレームバッファ４０のアドレスにストアする。
【００８９】
図７（ａ）、（ｂ）は、あるオブジェクトに対して命令マップにもとづいてピクセル単位でサブルーチンが実行され、描画処理される様子を説明する図である。
【００９０】
図７（ａ）は、命令マップ８０の例を示す図である。命令マップ８０は、テクスチャと同様のデータ構造をもち、ＵＶ座標値で規定される各要素には命令に関するデータ、ここではサブルーチンのコール先アドレスが格納される。
【００９１】
命令マップ８０の第１領域８２では、マッピング先のピクセルに対して図６で説明したＡＤＤ命令を実行すべく、コール先アドレスＩＭ１が格納されている。また、命令マップ８０の第２領域８４では、マッピング先のピクセルに対して図６で説明したＳＵＢ命令を実行すべく、コール先アドレスＩＭ２が格納されている。
【００９２】
同様に、命令マップ８０の第３領域８６では、マッピング先のピクセルに対して図６で説明したＭＯＶ命令を実行すべく、コール先アドレスＩＭ３が格納されている。また、それ以外の領域では、マッピング先のピクセルに何ら命令を適用しないため、図６で説明したＮＯＰを実行すべく、コール先アドレスＩＭ０が格納されている。
【００９３】
図７（ｂ）は、図７（ａ）の命令マップ８０にもとづいて描画演算処理されたオブジェクト２００のフレームバッファ４０における描画データを示す図である。図７（ａ）の命令マップ８０がオブジェクト２００の表面にマッピングされることにより、マッピング先の各ピクセルにおいて命令マップ８０に指定されたコール先アドレスのサブルーチンが実行される。
【００９４】
オブジェクト２００の第１領域４２には、命令マップ８０の第１領域８２がマッピングされ、マッピング先の各ピクセルにおいて、命令マップ８０に格納されていたコール先アドレスＩＭ１のサブルーチンであるＡＤＤ命令が実行される。また、オブジェクト２００の第２領域４４には、命令マップ８０の第２領域８４がマッピングされ、マッピング先の各ピクセルにおいて、命令マップ８０に格納されていたコール先アドレスＩＭ２のサブルーチンであるＳＵＢ命令が実行される。
【００９５】
同様に、オブジェクト２００の第３領域４６には、命令マップ８０の第３領域８６がマッピングされ、マッピング先の各ピクセルにおいて、命令マップ８０に格納されていたコール先アドレスＩＭ２のサブルーチンであるＭＯＶ命令が実行される。また、オブジェクト２００のそれ以外の領域には、命令マップ８０のＩＭ０が格納されている領域がマッピングされるため、コール先アドレスＩＭ０のサブルーチンであるＮＯＰが実行されるだけであり、シェーディング効果に変化は生じない。
【００９６】
このようにして、命令マップに基づいてオブジェクトの表面の領域によってマッピングされる命令を異ならせることにより、ピクセル単位で異なるシェーディング効果をもたせることができる。描画対象のオブジェクトのピクセル単位で異なるシェーディングアルゴリズムを適用する例として、たとえば、自動車の車体のある部分にだけさびを表示し、他の部分は光沢のある状態のままにすることで同一のオブジェクトの表面であっても箇所により質感の違いをもたせることができる。
【００９７】
以上述べたように、本実施の形態によれば、テクスチャマッピングの方法によって命令マップをオブジェクト表面にマッピングすることにより、ピクセル毎に適用されるべき命令を切り替え、きめ細かな描画制御を行い、高品質の描画データを生成することができる。描画対象のオブジェクトを同一のシェーダプログラムで描画処理する場合でも、命令マップにおいてピクセル単位で実行すべき命令を指定することができるため、プログラマビリティが格段に向上し、複雑なシェーダプログラムを簡単に実現することができる。
【００９８】
また、命令マップを用いることにより、オブジェクト単位で実行されるシェーダプログラム内ではサブルーチンコールをしない、もしくはサブルーチンコールをしても高速化できるため、サブルーチンの呼び出しと分岐先からのリターンによるペナルティが発生せず、処理効率が犠牲になることがない。したがって、複雑なシェーダプログラムであってもピクセルパイプライン処理によって高速に実行することができる。
【００９９】
一般に、ピクセルシェーダにおいては、短いプログラムをピクセル単位で何度も繰り返し実行することになるから、シェーダプログラム内に直接的に分岐命令を取り入れると実行効率が著しく低下する。しかし、本実施の形態では、コアプログラムの全体は最初にロードしたままプログラムを入れ替える必要はなく、命令マップをマッピングすることでピクセル毎に指定されたサブルーチンを読み込み、ピクセル単位でサブルーチンを切り替えて異なる描画アルゴリズムを実行することができる。本実施の形態の描画処理装置は、テクスチャマッピングの手法を命令のマッピングに利用して、シェーダプログラムのサブルーチンをプリフェッチする機構を提供していると言うことができる。
【０１００】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【０１０１】
実施の形態では、テクスチャマップまたは命令マップとして、ＵＶ座標値にテクスチャの属性値や命令に関するデータなどの被参照値を対応づけた２次元構造のマップを例に挙げて説明したが、そのような２次元構造のテクスチャマップまたは命令マップを複数階層化して設けて、ＵＶ座標値の他に、レイヤ番号を指定することにより、いずれかのレイヤのマップの被参照値を読み出すことのできるレイヤ構造のテクスチャマップまたは命令マップを用いてもよい。
【０１０２】
ポリゴン面にテクスチャ画像をマッピングするとともに、命令マップもマッピングする場合は、１つのコンフィギュレーションで複数のテクスチャを同時に扱えるようにし、テクスチャロード命令にテクスチャ番号を指示するための添え字をつけて、テクスチャマップを格納したテクスチャと、命令マップを格納したテクスチャを使い分けるように構成してもよい。たとえば、ＴＥＸ１、ＴＥＸ２などの命令を設け、ＴＥＸ１の場合は、テクスチャのカラー値を格納した第１のテクスチャを用い、ＴＥＸ２の場合は、命令に関するデータを格納した第２のテクスチャを用いるなどの区別をしてもよい。これにより、同一のポリゴンにテクスチャ画像をマッピングした上で、命令マップもマッピングしてピクセル単位で命令を実行することができる。前述のレイヤ構造のテクスチャは、このような目的で用いることもでき、たとえば、第１レイヤのテクスチャはテクスチャマップ、第２レイヤのテクスチャは命令マップのように構成してもよい。
【０１０３】
テクスチャマップは、テクスチャ画像に限らず、バンプマッピングに用いる法線ベクトルやディスプレースメントマッピング（Displacement Mapping）に用いる高さデータなどをＵＶ座標値に対応づけて格納したものであってもよい。このような法線ベクトルや高さデータ、関数値などをＵＶ座標値に対応づけて格納したマップもテクスチャマップとして扱い、テクスチャマッピングにより、ピクセルにマッピングすることができる。
【０１０４】
命令マップは、たとえば、オブジェクトに適用すべきシェーダプログラムをプログラミングするときにあらかじめ作成される。命令マップの作成を支援するために、描画領域毎にシェーディング処理を指定するためのユーザインタフェースを設け、指定されたシェーディング処理に関する命令コードをその描画領域に含まれるピクセルの座標値に対応づけて格納することにより、自動的に命令マップを生成する自動生成装置を設けたり、そのような自動生成を支援するツールをコンピュータプログラムとして提供してもよい。命令マップの自動生成支援ツールを用いれば、オブジェクトの表面に適用すべきシェーディング効果を指定するだけで、ピクセル単位の命令マップを自動生成することができ、プログラミングの知識を持たないコンピュータグラフィックスのデザイナであっても、ピクセル単位の複雑なシェーダプログラムを作成することができる。
【０１０５】
実施の形態の描画処理装置１００では、テクスチャユニット７０のテクスチャメモリ７６に命令マップを格納したが、フレームバッファ４０に命令マップを記憶し、フレームバッファ４０に記憶された命令マップから命令に関するデータを読み出してレジスタファイル３２に保持し、制御部５０がレジスタファイル３２から命令に関するデータを取得して命令バッファ５２に保持する構成でもよい。また、制御部５０が直接フレームバッファ４０に記憶された命令マップから命令に関するデータを読み出し、命令バッファ５２に保持する構成でもよい。また、テクスチャメモリ７６内の命令マップとフレームバッファ４０内の命令マップとを併用する構成であってもよい。
【０１０６】
また、実施の形態の描画処理装置１００において、テクスチャユニット７０を含まない構成にし、制御部５０が、テクスチャマッピングの方法によらないで、フレームバッファ４０に格納されたデータをフレームバッファ４０のアドレスを直接指定して取得し、命令バッファ５２に保持するようにしてもよい。この場合、フレームバッファ４０に格納された描画データの一部や中間データを命令のパラメータなどに利用してもよい。同様に、制御部５０が、レジスタファイル３２に保持された演算部３４による演算の中間結果を取得し、命令バッファ５２に保持するようにしてもよい。レジスタファイル３２やフレームバッファ４０に保持された値を命令に利用することにより、たとえば、演算結果をシェーダプログラムにフィードバックして、演算結果によって異なる命令を描画ユニットに適用することもできるようになる。
【０１０７】
実施の形態の描画処理装置１００では、命令バッファ５２には、命令マップから参照された命令に関するデータが保持されたが、命令バッファ５２に命令マップ自体もしくは命令マップの一部が保持されるように構成してもよい。
【図面の簡単な説明】
【０１０８】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１のシェーダユニットの制御機構の詳細を説明する図である。
【図３】図２の制御部による描画制御手順を説明するフローチャートである。
【図４】図２の命令デコーダによるシェーダプログラムのデコード手順を説明するフローチャートである。
【図５】図２の命令メモリに格納されたシェーダプログラムの例を説明する図である。
【図６】図２のテクスチャメモリに格納された命令マップの例を説明する図である。
【図７】図６の命令マップにもとづいて描画処理された結果を説明する図である。
【符号の説明】
【０１０９】
１０  ラスタライザ、  ２０  シェーダユニット、  ３０  シェーダ、  ３２  レジスタファイル、  ３４  演算部、  ３６  合成部、  ４０  フレームバッファ、  ５０  制御部、  ５２  命令バッファ、  ６０  命令処理部、  ６２  命令デコーダ、  ６４  プログラムカウンタ、  ６６  命令メモリ、  ７０  テクスチャユニット、  ７２  参照アドレス生成部、  ７４  補間部、  ７６  テクスチャメモリ、  ８０  命令マップ、  １００  描画処理装置。
【図１】
2006146721.tif 000003
【図２】
2006146721.tif 000004
【図３】
2006146721.tif 000005
【図４】
2006146721.tif 000006
【図５】
2006146721.tif 000007
【図６】
2006146721.tif 000008
【図７】
2006146721.tif 000009