(57)【要約】      （修正有）【課題】固定機能パイプラインを効率的に使用して処理の高速化と低消費電力化を実現するシェーダプログラムに従って画像を描画する画像処理装置を提供する。【解決手段】実行する演算処理をプログラム可能なメインユニット１０と，予め決められた演算処理を行う複数の演算器を有し，前段の演算器による演算結果が後段の演算器に入力されるように各演算器が直列に連結されたサブユニット２０と，サブユニット２０を構成する演算器の連結パターンに応じてシェーダプログラムからサブユニット２０で実行可能なコードを抽出し，抽出したコードをサブユニット２０で実行可能なサブユニット用コードに書き換えるコンパイル処理部３０とを備える。メインユニット１０は，コンパイル処理部３０による書き換え済みのシェーダプログラムに従い，サブユニット用コードをサブユニット２０に実行させるとともに，それ以外のコードをメインユニット１０自身で実行する。【選択図】図１
2017123034.tif 000002
【特許請求の範囲】
【請求項１】
シェーダプログラムに従って画像を描画する画像処理装置であって，
実行する演算処理をプログラム可能なメインユニット（１０）と，
予め決められた演算処理を行う複数の演算器を有し，前段の演算器による演算結果が後段の演算器に入力されるように各演算器が直列に連結された一又は複数のサブユニット（２０）と，
前記サブユニット（２０）を構成する演算器の連結パターンに応じて，シェーダプログラムから前記サブユニット（２０）で実行可能なコードを抽出し，抽出したコードを前記サブユニット（２０）で実行可能なサブユニット用コードに書き換えるコンパイル処理部（３０）と，を備え，
前記メインユニット（１０）は，前記コンパイル処理部（３０）による書き換え済みのシェーダプログラムに従い，前記サブユニット用コードを前記サブユニット（２０）に実行させるとともに，それ以外のコードを前記メインユニット（１０）で実行する
画像処理装置。
【請求項２】
シェーダプログラムは，命令に従った演算から得られる変数を規定した複数のコードを含み，当該複数のコードには，あるコードの変数が他のコードの命令の中に含まれるコード間の依存関係が存在しており，
前記コンパイル処理部（３０）は，コード間の依存関係が前記サブユニットを構成する演算器間の依存関係と一致するものをシェーダプログラムの中から抽出して，前記サブユニット（２０）で実行可能なサブユニット用コードに書き換える
請求項１に記載の画像処理装置。
【請求項３】
前記コンパイル処理部（３０）が前記サブユニット用コードとして書き換えるコードを抽出する場合は，そのコードの変数を使用する命令の集合のすべてを，シェーダプログラムの中から前記サブユニット用コードに書き換えるものとして抽出できる場合に限られる
請求項２に記載の画像処理装置。
【請求項４】
前記サブユニット（２０）が複数備わっており，各サブユニット（２０）を構成する演算器の連結パターンが異なる
請求項１に記載の画像処理装置。
【請求項５】
前記メインユニット（１０）は，演算処理で使用する変数の値を格納した複数のコンテキストを有しており，使用するコンテキストを切り替えることで，演算処理の内容を切り替えることができる
請求項１に記載の画像処理装置。
【請求項６】
前記サブユニット（２０）を構成する演算器の段数は４段である
請求項１に記載の画像処理装置。
【請求項７】
前記サブユニット（２０）を構成する演算器は加算器及び乗算器からなる
請求項１に記載の画像処理装置。
【請求項８】
前記メインユニット（１０）は，前記サブユニット（２０）と同時には演算処理を行わない処理部を含み，当該処理部を構成する演算器と前記サブユニット（２０）を構成する演算器は，少なくとも一部が共有されている
請求項１に記載の画像処理装置。
【請求項９】
シェーダプログラムに従って画像を描画する画像処理装置であって，
実行する演算処理をプログラム可能なメインユニット（１０）と，
予め決められた演算処理を行う複数の演算器を有し，前段の演算器による演算結果が後段の演算器に入力されるように各演算器が直列に連結された一又は複数のサブユニット（２０）と，を備え，
前記シェーダプログラムは，前記サブユニット（２０）を構成する演算器の連結パターンに応じて，前記サブユニット（２０）で実行可能なコードが，前記サブユニット（２０）で実行可能なサブユニット用コードに書き換えられたものであり，
前記メインユニット（１０）は，前記書き換え済みのシェーダプログラムに従い，前記サブユニット用コードを前記サブユニット（２０）に実行させるとともに，それ以外のコードを前記メインユニット（１０）で実行する
画像処理装置。
【請求項１０】
シェーダプログラムに従って画像を描画する画像処理装置によって実行される画像処理方法であって，
前記画像処理装置は，
実行する演算処理をプログラム可能なメインユニット（１０）と，
予め決められた演算処理を行う複数の演算器を有し，前段の演算器による演算結果が後段の演算器に入力されるように各演算器が直列に連結された一又は複数のサブユニット（２０）と，を備えたものであり，
前記画像処理方法は，
前記サブユニット（２０）を構成する演算器の連結パターンに応じて，シェーダプログラムから前記サブユニット（２０）で実行可能なコードを抽出し，抽出したコードを前記サブユニット（２０）で実行可能なサブユニット用コードに書き換えるコンパイル処理工程と，
前記メインユニット（１０）が，前記コンパイル処理工程において書き換え済みのシェーダプログラムに従い，前記サブユニット用コードを前記サブユニット（２０）に実行させるとともに，それ以外のコードを前記メインユニット（１０）で実行する実行工程と，を含む
画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，固定機能パイプラインとして機能するＣＩＰ（Combined Instruction Processor）を備えた画像処理装置，及び当該装置によって実行される画像処理方法に関する。具体的に説明すると，本発明は，プログラマブルパイプライン（メインユニット）で実行する演算処理の一部を，固定機能パイプライン（サブユニット：ＣＩＰ）によって実行させることで，コンピュータグラフィックを高速かつ低消費電力で描画する装置及び方法に関するものである。
【背景技術】
【０００２】
従来から，コンピュータグラフィックの描画は，実装が容易で高速かつ小型な固定機能パイプラインによって行われていた。しかし，コンピュータの発達により，固定機能パイプラインによる画像処理は，より柔軟で様々な処理が可能なプログラマブルパイプラインによる画像処理に置き換わり，現在ではその殆どがプログラマブルパイプラインにより行われている（特許文献１，特許文献２）。プログラマブルパイプラインは，例えばプログラマが画像生成のアルゴリズムを定義するプログラマブルシェーダが組み込まれており，様々な用途に用いることができる。プログラマブルシェーダの例としては，頂点シェーダや，ジオメトリシェーダ，フラグメントシェーダ（ピクセルシェーダー）等をそれぞれ個別に構成する他，これらを統合して統合シェーダとして構成するといった構成が可能である。このプログラム可能なシェーダプロセッサのハードウェア上の実装方法としては，必要な処理能力を参酌して，複数のプログラマブルシェーダが実装されたプロセッサをチップ上又は基板上に複数セットするという態様を採ることが一般的である。このようなプログラマブルパイプラインでは自由なシェーダプログラムを使用できるため，柔軟な表現が可能になり，従来の固定機能パイプラインでは実現できなかった複雑な陰影も描画することができる。
【０００３】
ところが，プロセッサにプログラマブルパイプラインを搭載する場合，プログラマブルパイプラインが様々な処理を汎用的に演算可能なようになっていることから，そのプロセッサは固定機能パイプラインのみ場合の構成に比べて大型化する傾向にある。また，所定の演算能力を得ようとするとプログラマブルパイプラインの構成をさらに大型化させる必要が生じるが，これは搭載空間の限られた携帯ゲーム機等においては特に顕著な問題であった。そこで，本願出願人は，ＣＰＵによって処理された情報が入力される画像処理装置であって，予め決められた演算処理を行う固定機能パイプラインと，実行する演算処理をプログラム可能なプログラマブルパイプラインの両方を搭載したハイブリッド型の画像処理装置を開発した（特許文献３）。この画像処理装置において，ＣＰＵによって処理された情報は，固定機能パイプライン又はプログラマブルパイプラインのいずれかに入力されて選択的に演算処理されることとなる。これにより，電力消費とチップ搭載スペースを抑制しつつ，画像処理の高速化を実現した。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−３２２２２４号公報
【特許文献２】特開２０１０−２５０６２５号公報
【特許文献３】特開２０１２−１６４２３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら，特許文献３に開示された画像処理装置は，固定機能パイプラインとプログラマブルパイプラインの両方を実装するものの，画像処理を行う際にはどちらか一方のみを動作させるものであった。つまり，この画像処理装置は，ＣＰＵによって処理された情報が固定機能パイプラインとプログラマブルパイプラインのいずれかに選択的に入力されるものであり，例えば見る者の注目を集める部位や特殊な演算処理を要する部分のような複雑な処理はプログラマブルパイプラインで実行し，一方でそれ以外の単純な処理は固定機能パイプラインで実行される。このように，この画像処理装置は，入力されたシェーダプログラムを固定機能パイプラインとプログラマブルパイプラインのどちらか一方で処理するものであり，これらを同時に動作させる機能を備えるものではなかった。また，この画像処理装置は，プログラマブルパイプラインと固定機能パイプラインを選択的に動作させるものであるため，シェーダプログラムが固定機能パイプラインの処理能力を少しでも上回る場合には必ずプログラマブルパイプラインを動作させることとなるが，そのような処理が続くと固定機能パイプラインが一切機能しなくなり，固定機能パイプラインを利用することによる画像処理の高速化を実現できないばかりか，固定機能パイプラインを搭載したスペースが無駄になるおそれがあった。
【０００６】
そこで，本発明は，固定機能パイプラインとプログラマブルパイプラインの両方を備えた画像処理装置において，固定機能パイプラインを効率的に使用して，画像処理のさらなる高速化と低消費電力化を実現することを解決課題とする。
【課題を解決するための手段】
【０００７】
本発明の発明者らは，上記課題の解決手段について鋭意検討した結果，コンパイル処理により，オリジナルのシェーダプログラムから固定機能パイプライン（サブユニット）によって実行可能なコード（行）を抽出し，その抽出したコードを固定機能パイプラインで実行可能なコードに書き換えるとともに，そのコンパイル処理済みのシェーダプログラムをプログラマブルパイプライン（メインユニット）に入力して，プログラマブルパイプラインの制御の下で，書き換え済みのコード部分を固定機能パイプラインに実行させるという知見を得た。これにより，固定機能パイプラインの処理能力を超えたシェーダプログラムが入力された場合であっても，そのシェーダプログラムの一部を固定機能パイプラインに実行させることができ，またこれと同時にその他の部分をプログラマブルパイプラインにおいて実行することができるため，固定機能パイプラインを効率的に使用して，画像処理のさらなる高速化と低消費電力化を実現することができる。そして，本発明者らは，上記知見に基づけば従来技術の課題を解決できることに想到し，本発明を完成させた。具体的に説明すると，本発明は以下の構成・工程を有する。
【０００８】
本発明の第１の側面は，シェーダプログラムに従って画像を描画する画像処理装置に関する。本発明に係る画像処理装置は，メインユニット１０と，サブユニット２０と，コンパイル処理部３０とを備える。
メインユニット１０は，プログラマブルパイプラインであって，実行する演算処理をプログラム可能である。
サブユニット２０は，固定機能パイプラインであって，予め決められた演算処理を行う複数の演算器を有しており，前段の演算器による演算結果が後段の演算器に入力されるように各演算器が直列に連結されている。サブユニット２０は，画像処理装置の中に一又は複数備わっている。なお，このように複数の演算器が直列に接続された構成を，本願明細書ではＣＩＰ（Combined Instruction Processor）と称している。
コンパイル処理部３０は，サブユニット２０を構成する演算器の連結パターンに応じて，シェーダプログラムからサブユニット２０で実行可能なコードを抽出し，抽出したコードをサブユニット２０で実行可能なサブユニット用コードに書き換えるコンパイル処理を行う。コンパイル処理部３０によってコンパイルされたシェーダプログラムは，メインユニット１０に入力される。
メインユニット１０は，コンパイル処理部３０による書き換え済みのシェーダプログラムに従い，サブユニット用コードをサブユニット２０に実行させるとともに，それ以外のコードをメインユニット自身で実行する。
【０００９】
本発明において，シェーダプログラムは，命令に従った演算から得られる変数を規定した複数のコード（行）を含む。例えば図２（ａ）に示された例において，“Ａ＝ＡＤＤ  Ｂ，Ｃ”というコードでは，“Ａ”の部分が「変数」を意味し，“ＡＤＤ  Ｂ，Ｃ”の部分が「命令」を意味する。また，シェーダプログラムに含まれる複数のコードには，あるコードの変数が他のコードの命令の中に含まれるコード間の依存関係が存在している。この場合に，コンパイル処理部３０は，コンパイル処理において，コード間の依存関係がサブユニット２０を構成する演算器間の依存関係と一致するものをシェーダプログラムの中から抽出して，サブユニット２０で実行可能なサブユニット用コードに書き換える。
【００１０】
本発明において，コンパイル処理部３０がサブユニット用コードとして書き換えるコードを抽出する場合は，そのコードの変数を使用する命令の集合のすべてを，シェーダプログラムの中からサブユニット用コードに書き換えるものとして抽出できる場合に限られることが好ましい。
【００１１】
本発明の画像処理装置は，サブユニット２０を複数備えることが好ましい。この場合に，各サブユニット２０を構成する演算器の連結パターンは，それぞれ異なることが好ましい。このように，サブユニット２０の設定を複数用意しておき，メインユニット１０からサブユニット２０に処理を依頼するときに，どの設定で動作するかを指定するように設計することで，シェーダプログラム中の複数個所にサブユニット２０の処理を割り当てることができ，サブユニット２０の使用頻度をより高めることができる。
【００１２】
本発明において，メインユニット１０は，演算処理で使用する変数の値を格納した複数のコンテキストを有しており，使用するコンテキストを切り替えることで，演算処理の内容を切り替え可能であることが好ましい。このように，メインユニット１０がコンテキストを切り替えるスイッチ機能を有することで，サブユニット２０に特定の処理を実行させている間，メインユニット１０自身では別の演算処理を行うことが可能となる。これにより，サブユニット２０による演算結果の待ち時間を隠蔽することが可能となり，画像処理の更なる効率化を図ることができる。
【００１３】
本発明の画像処理装置において，サブユニット２０を構成する演算器の段数は４段であることが好ましい。画像処理装置を構成する回路の大きさと性能を考慮した場合，サブユニット２０が持つ演算器の段数は，統計上，４段とすることが好ましいといえる。
【００１４】
本発明の画像処理装置において，サブユニット２０を構成する演算器は加算器及び乗算器からなることが好ましい。コンピュータグラフィックスの画像処理においては，加算と乗算を行うことが多く，これをサブユニット２０に実行させることで，より効率的にサブユニット２０を活用することができる。
【００１５】
本発明の画像処理装置において，メインユニット１０は，サブユニット２０と同時には演算処理を行わない処理部（例えばテクスチャ処理部）を含み，当該処理部を構成する演算器とサブユニット２０を構成する演算器は，少なくとも一部が共有されていることが好ましい。このように，メインユニット１０を構成する演算器の一部をサブユニット２０を構成する演算器と共有化することで，画像処理装置全体の回路規模をさらに小型化することができる。
【００１６】
本発明に係る画像処理装置において，上記したコンパイル処理部３０は，その画像処理装置自体には備わっていなくてもよい。すなわち，シェーダプログラムは，別のコンピュータ等によって，予め，サブユニット２０を構成する演算器の連結パターンに応じて，サブユニット２０で実行可能なコードが，サブユニット２０で実行可能なサブユニット用コードに書き換えられたものであってもよい。この場合，メインユニット１０は，予め書き換え済みのシェーダプログラムに従い，サブユニット用コードをサブユニット２０に実行させるとともに，それ以外のコードをメインユニットで実行する。
【００１７】
本発明の第２の側面は，シェーダプログラムに従って画像を描画する画像処理装置によって実行される画像処理方法に関する。画像処理装置は，上記した第１の側面と同様に，実行する演算処理をプログラム可能なメインユニット１０と，予め決められた演算処理を行う複数の演算器を有し前段の演算器による演算結果が後段の演算器に入力されるように各演算器が直列に連結された一又は複数のサブユニット２０と，を備える。
ここで，画像処理方法は，コンパイル処理工程と実行工程とを含む，
コンパイル処理工程では，サブユニット２０を構成する演算器の連結パターンに応じて，シェーダプログラムからサブユニット２０で実行可能なコードを抽出し，抽出したコードをサブユニット２０で実行可能なサブユニット用コードに書き換える。
実行工程では，メインユニット１０が，コンパイル処理工程において書き換え済みのシェーダプログラムに従い，サブユニット用コードをサブユニット２０に実行させるとともに，それ以外のコードをメインユニット自身で実行する。
【発明の効果】
【００１８】
本発明によれば，固定機能パイプラインとプログラマブルパイプラインの両方を備えた画像処理装置において，固定機能パイプラインを効率的に使用して，画像処理のさらなる高速化と低消費電力化を実現することができる。
【００１９】
具体的に説明すると，本発明では，コンパイル処理において，オリジナルのシェーダプログラムからサブユニット２０（固定機能パイプライン）によって実行可能なコードを抽出し，その抽出したコードをサブユニット２０で実行可能なコードに書き換える。そして，このコンパイル処理済みのシェーダプログラムをメインユニット１０（プログラマブルパイプライン）に入力し，このメインユニット１０による制御の下で，書き換え済みのコード部分をサブユニット２０に実行させる。これにより，全体としてはサブユニット２０の処理能力を超えたシェーダプログラムが入力された場合であっても，そのシェーダプログラムの一部をサブユニット２０に実行させることができ，またこれと同時にその他の部分をメインユニット１０において実行することができる。このように，メインユニット１０とサブユニット２０とを同時に動作させて画像処理を実行することが可能となるため，回路規模の増大を抑えつつも演算能力を高めて画像処理の高速化を実現できる。また，固定機能パイプラインであるサブユニット２０は，メインユニット１０に比べて消費電力がはるかに小さいため，実行可能な部分をサブユニット２０に積極的に担当させることで，画像処理装置全体の消費電力を低く抑えることができる。
【００２０】
また，サブユニット２０の処理能力を超えたシェーダプログラムが入力された場合であっても，その一部の処理をサブユニット２０にも担当させることができるようになるため，サブユニット２０を積極的に活用できるようになり，このサブユニット２０の搭載スペースが無駄になることもない。
【００２１】
さらに，本発明では，コンパイル処理において，オリジナルのシェーダプログラムを，サブユニット２０を構成する演算器の連結パターンに応じて解析することで，そのサブユニット２０で実行可能なコードを抽出して，サブユニット２０用のコードに自動的に書き換えることができる。このため，プログラマがサブユニット２０における演算器の連結パターンを想定してシェーダプログラムを作成しなくても，シェーダプログラムがサブユニット２０で実行可能なものに自動的に書き換えられるため，プログラマの負担を軽減することができる。また，過去に作成された既存のシェーダプログラムをそのまま本発明の画像処理装置に入力した場合でも，そのシェーダプログラムが自動的に書き換えられるため，あらゆるシェーダプログラムを汎用的に利用することができる。
【００２２】
また，複数の演算器が直列に連結されたサブユニット２０を利用することで，演算処理の中間の変数をコンテキストに読み書きする回数が減るため，コンテキストの大きさを小さく抑えることができる。また，コンテキストに対する変数の読み書きの回数が減少することで，メモリアクセスのバスの負担を軽減できる。さらに，バスの負担が軽くなると，テクスチャ等の画像へのアクセスの競合が減少するため，各ユニットがスムーズに動作するようになる。
【図面の簡単な説明】
【００２３】
【図１】図１は，画像処理装置及び画像処理方法の基本概念を示したブロック図である。
【図２】図２は，画像処理装置の具体的構成を示したブロック図である。
【図３】図３は，サブユニットの構成例を示したブロック図である。
【図４】図４は，コンパイル処理部による処理の基本概念を示している
【図５】図５は，サブユニットの具体的構成を示したブロック図である。
【図６】図６は，コンパイル処理部による処理の具体例を示している。
【図７】図７は，コンパイル処理部による処理の条件に関する説明図である。
【図８】図８は，コンパイル処理部による最適化処理の一例を示している。
【図９】図９は，サブユニットのハードウェア構成の一例を示している。
【図１０】図１０は，画像処理装置の一実施形態を示したブロック図である。
【図１１】図１１は，画像処理装置の他の実施系形態を示したブロック図である。
【発明を実施するための形態】
【００２４】
以下，図面を用いて本発明を実施するための形態について説明する。本発明は，以下に説明する形態に限定されるものではなく，以下の形態から当業者が自明な範囲で適宜変更したものも含む。
【００２５】
図１は，本発明に係る画像処理装置及び画像処理方法の基本概念を示したブロック図である。図１に示されるように，複数のコード（行）から構成されたオリジナルのシェーダプログラムが，コンパイル処理部３０に入力される。コンパイル処理部３０は，プログラミング言語で書かれた形式のシェーダプログラム（ソースコード）を，コンピュータが直接実行可能な機械語形式のシェーダプログラム（バイナリコード）に書き換えるコンパイル処理を行う。このコンパイル処理において，コンパイル処理部３０は，オリジナルのシェーダプログラムの中から，演算機能が固定されたサブユニット２０（ＣＩＰ）で実行可能なコードを抽出し，抽出したコードをサブユニット２０で実行可能なサブユニット用コードに書き換える処理を行う。このコンパイル処理の詳細については後述する。また，コンパイル済みのシェーダプログラムは，ＧＰＵ１００（Graphics Processing Unit）に入力される。ＧＰＵ１００は，実行する演算処理を任意にプログラム可能なメインユニット１０と，演算機能が固定された一又は複数のサブユニット２０（ＣＩＰ）を含んで構成されている。メインユニット１０は，コンパイル済みのシェーダプログラムを受け取ると，このプログラムに従って，サブユニット用コードについてはサブユニット２０に実行させるとともに，それ以外のコードについては自分自身で実行する。そして，メインユニット１０は，自身による演算結果とサブユニット２０による演算結果をまとめて外部メモリ２００又はその他の外部回路へと出力する。
【００２６】
ここで，コンパイル処理部３０は，ＧＰＵ１００と同じ画像処理装置（コンピュータ）内に実装されていることが好ましい。ただし，コンパイル処理部３０は，ＧＰＵ１００が実装されたコンピュータとは別のコンピュータに実装することもできる。この場合，別のコンピュータが備えるコンパイル処理部３０によってコンパイル済みのシェーダプログラムが，記録媒体やインターネットなどの通信網を介して，ＧＰＵ１００と同じ画像処理装置に入力されることとなる。
【００２７】
図２は，図１に示したＧＰＵ１００の構成をより詳しく示したブロック図である。ＧＰＵ１００は，メインユニット１０と一又は複数のサブユニット２０（ＣＩＰ）とを含んで構成されており，このサブユニット２０はメインユニット１０の制御に基づいて動作する。例えば，メインユニット１０は，ＯｐｅｎＧＬ２．ｘ系以降に対応したプログラマブルパイプラインとして機能するハードウェアを実装することができ，サブユニットは，旧来のＯｐｅｎＧＬ１．ｘ系に対応した固定機能パイプラインとして機能するハードウェアを実装することができる。
【００２８】
ＧＰＵ１００を構成するメインユニット１０は，典型的には，管理部１１と，頂点処理部１２と，ラスタライズ処理部１３と，フラグメント処理部１４と，テクスチャ処理部１５と，カラーアップデート処理部１６と，内部メモリ１７とを含む。また，メインユニット１０は，ＧＰＵ１００の外部に置かれた外部メモリ２００とも接続されている。
【００２９】
管理部１１は，コンパイル処理部３０からコンパイル済みのシェーダプログラムを受け取り，このシェーダプログラムに従って各処理部１２〜１６を制御する。管理部１１は，外部メモリ２００からポリゴンデータ（３次元モデル）の頂点情報を読み込んで頂点処理部１２に受け渡す。
【００３０】
頂点処理部１２は，ポリゴンデータを構成する各頂点に対して，座標変換や照明計算を含む頂点処理を行う。頂点処理では，例えば，モデリング座標系で表現された頂点の座標値をワールド座標系，カメラ座標系，又は投影座標系に変換する座標変換処理や，各頂点と光源の距離や各頂点と光源の角度に基づいてその頂点の輝度を計算する照明計算処理，あるいはテクスチャマッピングのためのテクスチャ座標値を計算するテクスチャ処理などが行われる。頂点処理部１２は，頂点処理の結果として得られた頂点情報をラスタライズ処理部１３に受け渡す。
【００３１】
ラスタライズ処理部１３は，頂点処理で得られた頂点情報に基づいて，ポリゴンデータのピクセル毎のデータ（フラグメント）を生成するラスタライズ処理を行う。頂点処理によって計算された結果は，その頂点のためだけの計算結果であり，実際にコンピュータグラフィックスの描画を行うには，複数の頂点で構成されるポリゴンデータの内部全てのピクセルに対して描画色を計算する必要がある。このため，ラスタライズ処理部１３は，頂点と線分（ベクタ）の組み合わせで表わされた図形を，ピクセルの集合に置き換えて表すラスタライズ処理を行う。また，グローシェーディングにおける頂点の輝度値からのポリゴン内部の輝度値の補間なども，ラスタライズ処理において行うこととしてもよい。ラスタライズ処理部１３は，ラスタライズ処理によって生成したフラグメントをフラグメント処理部１４に受け渡す。
【００３２】
フラグメント処理部１４は，ラスタライズ処理で生成されたフラグメントに対する演算処理（フラグメント処理）を行う。フラグメント処理部１４は，例えばフラグメント毎に，色値や輝度，透過度などの色に関する各種計算を行う。また，フラグメント処理部１４は，計算各フラグメントの持つ輝度値と参照可能なテクスチャの値に基づく演算を行うことが可能であり，その場合にはフラグメントの輝度値に対するテクスチャ値の混合値（加算値や乗算値）の演算を行う。具体的に，フラグメント処理部１４は，三次元オブジェクトの表面に質感を与えるためのテクスチャ画像を貼り付けるテクスチャ処理を行うことができる。テクスチャ処理により，テクスチャ画像に対応したテクスチャ座標（ｕ，ｖ）がピクセルデータに付与される。また，フラグメント処理部１４は，光の角度と光源からの距離を考慮して，オブジェクトを構成する各ピクセルのカラー値（色調や階調）を変化させるシェーディング処理を行うことができる。例えば，頂点処理部１２は，頂点処理において光源計算を行い，シェーディング処理用の光源の情報や，照明モデルや，オブジェクトの各頂点の法線ベクトルなどを求め，これらの頂点情報に基づいて，ポリゴンの各頂点のカラー値（ＲＧＢ）を求める。そして，フラグメント処理部１４は，頂点処理で求められた各頂点のカラー値に基づいて，ポリゴンに対応する各ピクセルのカラー値を，例えば，ホンシェーディングや，グローシェーディングなどにより求めることができる。その後，フラグメント処理部１４は，フラグメントの色に関する演算の結果などを表示画面用の外部メモリ２００に書き込む。
【００３３】
テクスチャ処理部１５は，３次元モデルの画像処理を行う上で外部メモリ２００に格納されたテクスチャデータを必要とする場合に，この外部メモリ２００の中から必要なテクスチャデータを読み込んで，頂点処理部１２や，ラスタライズ処理部１３，あるいはフラグメント処理部１４に受け渡す。また，テクスチャ処理部１５が外部メモリ２００から読み出したテクスチャデータを，内部メモリ１７に一時的に格納することもでき，その場合に頂点処理部１２などは，内部メモリ１７から必要なテクスチャデータを読み出すことができる。
【００３４】
カラーアップデート処理部１６は，任意の要素である。カラーアップデート処理部１６は，フラグメント処理の結果を外部メモリ２００（又は内部メモリ１７）上のフレームバッファに記憶されたコンテンツにマージしたり，あるいはフラグメントごとのコンテンツに関する情報を更新する。
【００３５】
内部メモリ１７は，基本的に，各処理部１２〜１６と接続されており，各処理部１２〜１６が演算処理を行うにあたり必要な情報の書き出しや読み出しが行われる。内部メモリ１７には，ＧＰＵ１００が実行するシェーダプログラムの一部や全部を一時的に格納したり，計算途中に現れる変数の値が格納したりすることが可能であり，内部メモリ１７はキャッシュとしての役割も持つ。なお，最終的には，外部メモリ２００に，シェーダプログラム，最終的な結果画像，参照されるテクスチャ画像，頂点情報など全ての情報が格納される。
【００３６】
なお，ここで説明したメインユニット１０の構成は一例に過ぎず，適宜公知の構成を採用することができる。例えば，頂点処理部１２とフラグメント処理部１４は同一の装置として実装されており，頂点処理とフラグメント処理を同一の装置とし，時分割で実行することもできる。また，フラグメント処理部１４とテクスチャ処理部１５とを直接結線するか，あるいは内部メモリ１７を介してデータを送受信可能にするかなど様々な構成が考えられる。これらの構成の詳細は，本発明の仕様条件を制限するものではない。
【００３７】
ＧＰＵ１００を構成するサブユニット２０（ＣＩＰ）は，本来であればメインユニット１０で実行可能な処理の一部を，処理の高速化及び低消費電力化のために分担して実行するものである。つまり，サブユニット２０が処理を実行している間，これと同時にメインユニット１０も他の処理を実行することが可能である。サブユニット２０は，メインユニット１０を構成する各処理部（頂点処理部１２，ラスタライズ処理部１３，フラグメント処理部１４，テクスチャ処理部１５，及びカラーアップデート処理部１６）の１つ又は複数に接続することができる。図２に示した実施形態においては，サブユニット２０は，頂点処理部１２とフラグメント処理部１４に接続されている。このように，サブユニット２０は，頂点処理部１２とフラグメント処理部１４とが実行する頂点処理及び／又はフラグメント処理の一部を分担して実行するものであることが好ましい。ただし，サブユニット２０が接続される処理部は，これらのものに限定されない。また，図２に示された例において，サブユニット２０は画像処理装置内に１つ実装されているが，サブユニット２０を２つ以上実装することも可能である。
【００３８】
図３は，サブユニット２０の構成の一例を示している。図３に示されるように，サブユニット２０は，予め決められた演算処理を行う複数の演算器２１，２２，２３を有している。これらの複数の演算器２１〜２３は，前段の演算器による演算結果が後段の演算器に入力されるように，各演算器が直列に連結されている。すなわち，図３に示した例においては，第１の演算器２１の演算結果が第２の演算器２２に入力され，第２の演算器２２は第２の演算器２２の演算結果に基づいた演算を行う。さらに，第２の演算器２２の演算結果が第３の演算器２３に入力され，第３の演算器２３は第２の演算器２２の演算結果に基づいた演算を行う。そして，第３の演算器２３による演算結果は，メインユニット１０へと戻される。このように直列に接続された複数の演算器２１〜２３を持つサブユニット２０（固定機能パイプライン）の構成を，本願明細書ではＣＩＰ（Combined Instruction Processor）と称している。また，サブユニット２０は，各演算器による演算結果を書き出したり，あるいは各演算器で演算を行う際にデータを読み出すための内部メモリを持たない。サブユニット２０は，各演算器が直列に接続されているため，内部メモリを利用することなく演算を行うことができる。内部メモリに対する書き込みや読み出しを行わないため，サブユニット２０は高速かつ低消費電力で演算処理を完了させることができる。なお，サブユニット２０を構成する演算器の段数は，２段であってもよいし，３段以上であってもよい。特に演算器の段数は，統計上，４段であることが好ましい。
【００３９】
サブユニット２０を構成する演算器としては公知のものを採用できる。例えば，演算器としては，少なくとも加算器（ＡＤＤ）と乗算器（ＭＵＬ）を含むことが好ましい。また，その他に，ＭＡＤＤ，ＥＱＵＡＬ，ＮＥＱＵＡＬ，ＬＥＳＳ，ＬＥＱＵＡＬ，ＳＵＭ，ＲＳＱ，ＳＥＬ，ＥＸＰ，及びＬＯＧの中から１種又は２種以上の演算器を採用することもできる。また，図３に示されるように，各演算器は，２入力であってもよいし，１入力又は３入力以上であってもよい。例えば，２入力の演算器は，加算又は乗算の演算を行うものであることが好ましく，３入力の演算器は，乗算可算命令を行うものであることが好ましい。また，１入力の演算器は，“ＲＳＱ（ｘ）  ＝  １／ｓｑｒｔ（ｘ）”の演算を行うものであることが好ましい。それぞれの演算器がどの演算処理を実行するのかは，描画処理が開始される前にドライバプログラムに従って事前に設定される。このような演算器の設定は，コンパイル処理部３０がオリジナルのシェーダプログラムを変換するときに作成するようにすればよい。また，画像処理装置内にサブユニット２０が複数設けられている場合，各サブユニット２０を構成する演算器のパターンは異なることが好ましい。異なる設定のサブユニット２０を複数設けることで，シェーダプログラム中の複数個所にサブユニット２０の処理を割り当てることができ，サブユニット２０の使用頻度をより高めることができる。
【００４０】
また，図２に示されるように，サブユニット２０は，メインユニット１０を構成する処理部と演算器の一部又は全部を共有することとしてもよい。すなわち，メインユニット１０は，サブユニット２０と同時には演算処理を行わない処理部を含んでいる。この場合に，メインユニット１０の処理部を構成する演算器とサブユニット２０を構成する演算器の一部又は全部を共有化することにより，画像処理装置に搭載する演算器の数を減少させることができるため，画像処理装置をさらに小型化することが可能である。図２に示された例において，メインユニット１０は，テクスチャ処理部１５を備えているが，このテクスチャ処理部１５は，基本的にはサブユニット２０と同時には動作しない。このため，テクスチャ処理部１５を構成する演算器とサブユニット２０を構成する演算器を共有化しても，画像処理に影響を及ぼすことはない。このため，図２に示された例では，テクスチャ処理部１５とサブユニット２０とで演算器の共有化が可能である。
【００４１】
ここで，コンパイル処理部３０は，上記のようなサブユニット２０を構成する演算器の連結パターンを把握しており，この演算器の連結パターンに応じて，オリジナルのシェーダプログラムを，サブユニット２０によって実行可能なコードを含むものに書き換える処理を含む，コンパイル処理を行う。ここにいう「演算器の連結パターン」とは，サブユニット２０を構成する演算器の段数と，各段を構成する演算器の種類に関する情報を含む情報である。例えば，サブユニット２０を構成する演算器の数が３段であり，各演算器が“ＡＤＤ→ＡＤＤ→ＡＤＤ”のように連結されている場合に，コンパイル処理部３０は，「演算器の連結パターン」として，演算器の段数が３段であることと，各演算器の組み合わせ（依存関係）が“ＡＤＤ→ＡＤＤ→ＡＤＤ”であることを把握している。
【００４２】
図４は，コンパイル処理部３０が行うコードの抽出・書き換え処理の概念を示した説明図である。図４に示されるように，シェーダプログラムは，「命令」に従った演算から得られる「変数」を規定した複数のコードを含む。すなわち，図４（ａ）に示した例において，プログラム１（シェーダプログラム）は，“Ａ＝ＡＤＤ  Ｂ，Ｃ”という１行目のコードと，その他２行のコードを含む合計３行のコードからなるものであり，１行目のコードは，“Ａ”の部分が「変数」を意味し，“ＡＤＤ  Ｂ，Ｃ”の部分が「命令」を意味する。つまり，この１行目のコードは，定数Ｂと定数Ｃを加算して変数Ａを得る演算を行うことを意味している。ここで，図４（ａ）に示されたプログラム１は，各コードに規定された変数が，他のコードの命令に組み込まれていない。このため，プログラム１では，各コードの間に依存関係は存在していない。このプログラム１に従って演算を行うためには，ＧＰＵ１００は，コンテキスト１のように，定数の値が既に格納され，変数の値を格納するための空間が設けられたコンテキストを参照する必要がある。プログラム１は，各コードが依存関係を有していないため，図３に示したようなＣＩＰの構成を持つサブユニット２０に処理を担当させることはできない。このため，コンパイル処理部３０は，プログラム１をサブユニット２０用に書き換えることはできない。なお，ここでは，変数の値を格納するテーブルをコンテキストと呼ぶ。
【００４３】
これに対して，図４（ｂ）に示されるように，プログラム２（シェーダプログラム）は，１行目のコードの変数“Ａ”が２行目のコードの命令に組み込まれ，また２行目のコードの変数“Ｅ”が３行目のコードの命令に組み込まれている。このため，プログラム２を構成する３行のコードは，１行目→２行目→３行目といった依存関係を有しているといえる。ただし，プログラム２のような命令文の記述方法では，まず１行目の演算を行って変数“Ａ”を求めて，その値をコンテキスト２に格納し，２行目の演算を行う際には，コンテキスト２を参照して変数“Ａ”の値を読み出して変数“Ｅ”を求め，その値をコンテキスト２に格納し，さらに３行目の演算を行う際には，コンテキスト２を参照して変数“Ｅ”の値を読み出して変数“Ｇ”を求めて，その値をコンテキスト３に格納するといった処理が行われる。このように，コンテキストに対するデータの書き出しや読み出しが必要な場合には，内部メモリ１７を有するメインユニット１０によって演算処理を行う必要があり，内部メモリを持たないサブユニット２０によっては演算処理を行うことができない。
【００４４】
そこで，コンパイル処理部３０は，内部メモリを持たないサブユニット２０であっても実行可能なように，プログラム２を書き換える処理を行う。例えば，図３に示されるように，サブユニット２０が３段の演算器からなり，各演算器が全て乗算器（ＡＤＤ）であるような場合には，サブユニット２０を構成する演算器間の依存関係と，プログラム２を構成するコード間の依存関係が完全に一致することとなる。この場合，コンパイル処理部３０は，プログラム２の全てのコードを抽出し，抽出したコードをサブユニット２０で実行可能なコードに書き換えて，コンパイル済みのプログラム３（シェーダプログラム）を出力する。図４（ｂ）に示された例において，プログラム３は，１行目と２行目の変数部分が削除され，２行目と３行目の命令部分に［ＰＲＥＶ］が記述されている。この［ＰＲＥＶ］は，前段のコード（演算式）での演算結果を直接代入するという意味である。このため，プログラム３では，１行目の演算結果は２行目の命令部分にそのまま代入され，２行目の演算結果は３行目の命令部分にそのまま代入される。このように，各コード間の演算結果を他のコードに直接代入することができるため，プログラム３では，演算結果を読み書きするためのコンテキストが不要となる。そして，プログラム３におけるコードの依存関係は，サブユニット２０における演算器の依存関係と一致するため，プログラム３は，サブユニット２０において実行することが可能となる。コンパイル処理部３０は，このように，オリジナルのシェーダプログラムの一部又は全部を，サブユニット２０を構成する演算器の結合パターンに一致するように書き換える機能を持つ。
【００４５】
また，図５と図６を参照して，コンパイル処理部３０によるコードの抽出・書き換え処理についてさらに詳しく説明する。図５は，サブユニット２０を構成する演算器の結合パターンを示している。図５に示した例において，サブユニット２０は，３段の演算器２１〜２３が直列に接続された構成であり，第１の演算器２１は加算器（ＡＤＤ），第２の演算器２２は乗算器（ＭＵＬ），第３の演算器２３は加算器（ＡＤＤ）となっている。コンパイル処理部３０は，このようなサブユニット２０を構成する演算器の結合パターンを把握している。
【００４６】
図６は，コンパイル処理部３０によるコードの抽出・書き換え処理の流れを示している。まず，コンパイル処理部３０には，オリジナルのシェーダプログラムとして，プログラム４が入力される。プログラム４は，合計８行のコードから構成されている。コンパイル処理部３０は，このプログラム４を解析し，複数のコードの中から，コード間の依存関係がサブユニット２０を構成する演算器間の依存関係と一致するものを抽出する。具体的には，上述したとおりサブユニット２０を構成する演算器間の依存関係は，“ＡＤＤ→ＭＵＬ→ＡＤＤ”となっているため，コンパイル処理部３０は，プログラム４の中からこの依存関係と一致するコードを抽出する。図６に示した例においては，プログラム４における１行目，５行目，及び７行目のコードの依存関係が，演算器間の依存関係に対応していることがわかる。そこで，コンパイル処理部３０は，これら１行目，５行目，及び７行目を抽出して適切な順位に並び替えたプログラム５に書き換える。プログラム４では，バラバラに並べられていた１行目，５行目，及び７行目の３行のコードが，プログラム５では，５行目〜７行目に整列するように書き換えられていることがわかる。さらに，コンパイル処理部３０は，プログラム５における５行目〜７行目のコードをまとめて，サブユニット２０（ＣＩＰ）で簡単に実行可能な１行のコードに書き換えたプログラム６を生成することができる。プログラム６においては，５行目のコードが“Ｒ１５＝ＣＩＰ（Ｒ２，Ｒ１，Ｒ１２，Ｒ１２）”のように書き換えられている。このコードは，図５に示されるように，サブユニット（ＣＩＰ）の入力１に“Ｒ２”，入力２に“Ｒ１”，入力３に“Ｒ１２”，入力４に“Ｒ１２”をそれぞれ入力し，サブユニット（ＣＩＰ）によって変数“Ｒ１５”を求める演算を行うことを意味している。このように，プログラム６における５行目のコードは，サブユニット２０における演算器の連結パターンに対応するものであるため，サブユニット２０によって実行可能である。その他，プログラム６における１行目〜４行目，及び６行目のコードは，サブユニット２０では実行できないため，メインユニット１０によって実行する。
【００４７】
このように，オリジナルのシェーダプログラム（プログラム４）を，サブユニット２０で実行可能なコードとそれ以外のコードを含むプログラム（プログラム６）に書き換えることで，サブユニット２０とメインユニット１０とを同時に動作させて，両ユニットで並列的に演算を行うことができる。これにより演算処理の高速化を実現できる。また，固定機能パイプラインからなるサブユニット２０は，メインユニット１０と比較して消費電力がはるかに低いものであるため，シェーダプログラムに記述された演算処理の一部をサブユニット２０に担当させることで，画像処理装置全体としての消費電力を抑えることができる。また，複数の演算器で構成されたサブユニット２０は，その回路規模がプログラマブルなメインユニット１０よりも小さいものであるため，加算器や乗算器といった必要な計算ユニットを狭い面積に多く実装することができる。このため，処理性能を維持しつつ，画像処理装置全体の回路規模を小さくすることができる。
【００４８】
続いて，図７及び図８を参照して，シェーダプログラムに含まれるコードをサブユニット２０が実行可能なものに書き換えるための条件について説明する。図７に示されたシェーダプログラム（プログラム７）は，５行目〜７行目のコードが，図６に示したプログラム６の５行目〜７行目と一致している。このため，プログラム７の５行目〜７行目を，図５に示したサブユニット２０によって実行可能なコードに書き換えることも考えられる。しかし，プログラム７では，８行目のコードの命令部分に，５行目の演算によって求められる変数“Ｒ３”を使用することが必要である。ここで，プログラム７における５行目〜７行目のコードを，サブユニット２０用のコードに書き換えてサブユニット２０において実行した場合，変数“Ｒ３”がコンテキストに書き出されることなくサブユニット２０内でのみ消費されてしまう。そうすると，変数“Ｒ３”を，プログラム７における８行目のコードに使用することができなくなり，８行目のコードの演算結果が求めることができなくなる。従って，このような場合には，プログラム７の中にサブユニット２０を構成する演算器間の依存関係に一致するコードが含まれている場合であっても，そのコードをサブユニット２０用のコードに書き換えることができない。このように，コンパイル処理部３０がサブユニット用コードとして書き換えるコードを抽出する場合は，そのコードの変数を使用する命令の集合のすべてを，シェーダプログラムの中からサブユニット用コードに書き換えるものとして抽出できる場合に限られる。
【００４９】
つまり，コンパイル処理部３０がシェーダプログラムの中からサブユニット２０で実行するものとして選択するコード群は，以下の２つの条件を満たすことが必要となる。
（条件１）シェーダプログラム全体において同じ変数への代入が一度きりであること。
（条件２）選択するコード群の変数を使用する命令の集合は残らずサブユニット用のコード群の中に取り込まれること。
【００５０】
なお，ここで上記条件１及び条件２は，コンパイル処理部３０によって最適化を行った後のシェーダプログラムが満たしていればよい。具体的に説明すると，図８に示したシェーダプログラム（プログラム９）においては，１行目と２行目において同じ変数“Ｒ３”への代入が行われている。このため，最適化前のプログラム９は，上記条件１を満たさない。ただし，１行目のコードはデッドコードであるため，コンパイル処理部３０は最適化処理の過程においてこの１行目のコードを削除し，変数“Ｒ３”への代入を省略するはずである。そうすると，１行目のコードを削除した後においては，上記条件１を満たすものとなる。また，プログラム９においては，最後の変数“Ｒ１８”を求めるコードの命令部分において変数“Ｒ３”が利用されている。このため，最適化前のプログラム９は，上記条件２を満たさない。ただし，最終行のコードもデッドコードであるため，コンパイル処理部３０は最適化処理の過程においてこの最終行のコードを削除するはずである。そうすると，最終行のコードを削除した後においては，上記条件２を満たすものとなる。このように，プログラム９は，最適前の状態ではサブユニット２０への割り当てを行うことができないが，最適化を行ってデッドコードを削除することで条件１及び条件２を満たすようになり，サブユニット２０への割り当てが可能となる
【００５１】
図９は，サブユニット２０のハードウェア構成の好ましい例を示している。サブユニット２０は，図９に示されるように，複数の演算器（ＳＴＡＧＥ  ０〜ＳＴＡＧＥ  Ｎ）が直列に接続されており，前段の演算器による演算結果が後段の演算器に直接入力されるように構成されている。サブユニット２０は，さらに，メインユニット１０から供給された演算値（特に変数）を一時的に保持するための複数の入力レジスタ（ＩＮ  ０〜ＩＮ  ３）とともに，ドライバプログラムなどから供給された定数を一時的に保持するための複数の定数レジスタ（ＣＯＮＳＴ  ０〜ＣＯＮＳＴ  ７）を備えている。入力レジスタと定数レジスタによって保持されている値は，必要に応じて複数の演算器に入力され，各演算器での演算に使用される。ただし，図９に示されるように，サブユニット２０は，各演算機による演算結果を記憶するためのメモリやレジスタは備えていない。各演算器を通して演算された値は，メモリ等に記憶されることなく，そのままメインユニット１０へと出力されるようになっている。このように，サブユニット２０の構成はメモリ等を備えない簡素なものであるため，消費電力が少なく，しかも演算処理を高速に行うことができる。
【００５２】
また，本発明の画像処理装置において，メインユニット１０は，演算処理で使用する変数の値を格納した複数のコンテキストを有しており，使用するコンテキストを切り替えることで，演算処理の内容を切り替え可能であることが好ましい。メインユニット１０のコンテキストスイッチ機能は，例えばサブユニット２０による演算結果が出力されるまでに長い時間のかかる命令がある場合に，その待ち時間の間，他のコンテキストを使用して他の演算処理を行う機能である。メインユニット１０は，同一のシェーダプログラムであっても，変数の内容が異なる複数の処理を同時に実行している。このため，メインユニット１０には，変数の内容を記載したコンテキスト（変数の組のテーブル）を複数備えておき，あるコンテキストに基づく処理について待ち時間が発生する場合には，他のコンテキストに切り替えて他の処理を実行することで効率化を図ることができる。本発明の画像処理装置においては，このようなコンテキストの切替機能を有するメインユニット１０を用いることで，メインユニット１０と複数のサブユニット２０を効果的に協働させることができる。つまり，メインユニット１０がコンテキストを切り替えるスイッチ機能を有することで，サブユニット２０に特定の処理を実行させている間，メインユニット１０自身では別の演算処理を行うことが可能となる。これにより，サブユニット２０による演算結果の待ち時間を隠蔽することが可能となり，画像処理の更なる効率化を図ることができる。
【００５３】
続いて，図１０を及び図１１を参照して，コンパイル処理部３０が設けられる部位について説明する。図１０及び図１１に示されるように，画像処理機能を持つコンピュータ（画像処理装置）１０００は，一般的に，ＧＰＵ１００（グラフィックス処理装置）と，外部メモリ２００（記憶装置）と，ＣＰＵ３００（中央処理装置）とを備えており，これらの装置が互いにバスなどを通じて接続されている。ＣＰＵ３００は，オペレーティングシステムプログラムを実行するとともに，外部メモリ２００に格納されているアプリケーションプログラムやドライバプログラムを適宜読み出してこれらを実行する。また，グラフィックスを描画する必要が生じた場合，ＣＰＵ３００は，ＧＰＵ１００用のドライバプログラムを実行して，ドライバプログラムに従ってＧＰＵ１００に必要な設定（定数の設定など）を行う。その後，ＧＰＵ１００が，外部メモリ２００に格納されているシェーダプログラムに従って，外部メモリ２００上に所望のグラフィックスの描画を行う。ＣＰＵ３００は，必要に応じて外部メモリ２００に格納された画像を表示装置へと送る。
【００５４】
ここで，ＯｐｅｎＧＬなどのグラフィックス処理系では，ＧＰＵ１００によって実行されるシェーダプログラムが，コンピュータ（画像処理装置）１０００に対して，コンパイル処理を済ませたバイナリコードの状態で提供される場合と，コンパイル処理前のソースコードの状態で提供される場合の２通りがある。
【００５５】
図１０は，画像処理装置１０００に対して，別のコンピュータ２０００から，シェーダプログラムがコンパイル処理を済ませたバイナリコードの状態で提供される場合の例を示している。なお，コンパイル済みのシェーダプログラムは，ＣＤ−ＲＯＭなどの記録媒体を介して画像処理装置１０００に提供することもできるし，あるいはインターネット等の情報通信回線を通じて画像処理装置１０００に提供することも可能である。このような態様は，携帯ゲーム機などで多く見受けられる。携帯ゲーム機などのようにＧＰＵ１００とＣＰＵ３００の処理能力が限定されている場合，画像処理装置１０００（携帯ゲーム機）に対しては，シェーダプログラムがバイナリコードの状態で提供される。この場合，画像処理装置１０００自身において，シェーダプログラムをコンパイルする必要がなくなるため，ＧＰＵ１００は，外部メモリ２００に格納されているシェーダプログラムをそのままロードして実行することができる。図１０に示した態様の場合，シェーダプログラムをコンパイルする機能を担うのは，別のコンピュータ２０００である。このため，このような態様では，コンパイル処理部３０は，別のコンピュータ２０００に備わっていることとなる。
【００５６】
一方，図１１は，画像処理装置１０００に対して，別のコンピュータ２０００から，シェーダプログラムがコンパイル前のソースコードの状態で提供される場合の例を示している。デスクトップＰＣなどのような処理装置では，一般的に，グラフィックス用のシェーダプログラムがソースコードで提供され，ＧＰＵ１００のためのコンパイルプログラムはドライバプログラムの中に同梱されている。これは，デスクトップＰＣなどのような処理装置では，ＧＰＵ１００とＣＰＵ３００がそれぞれ異なるメーカーから提供されることが一般的であり，両者のインターフェースを統一する必要があるからである。このような態様では，ＧＰＵ１００が使用するシェーダプログラムは，描画を実行する直前に，ＧＰＵメーカーが提供してドライバに組み込まれた独自のコンパイルプログラムによってバイナリプログラムへと変換される。すなわち，ＣＰＵ３００が，ドライバプログラムに同梱されているシェーダ用のコンパイルプグラムを実行し，外部メモリ２００に記憶されているソースコード状態のシェーダプログラムを読み出して，これをバイナリコードに書き換えるコンパイル処理を行う。そして，ＣＰＵ３００は，バイナリコード状態になったシェーダプログラムをＧＰＵ１００に対して提供し，ＧＰＵ１００は，このコンパイル済みのシェーダプログラムに従ってグラフィックス処理を実行する。このように，図１１に示した態様の場合，シェーダプログラムをコンパイルする機能を担うのは，画像処理装置１０００内のＣＰＵ３００である。このため，このような態様では，コンパイル処理部３０は，画像処理装置１０００内のＣＰＵ３００に備わっていることとなる。
【００５７】
以上のように，ＧＰＵ用のコンパイルは大変に重い処理であるため，デスクトップＰＣなどでは描画直前にＣＰＵによってシェーダプログラムをコンパイルすることが可能である。しかし，携帯ゲーム機などでは，ＣＰＵの能力が低いことや，ＧＰＵの機種が予め決まっていることを理由に，事前にシェーダプログラムをコンパイルしてバイナリプログラムに変換しておく場合が多い。本発明において，ＧＰＵ用のシェーダプログラムのコンパイル処理は，図１０に示されるように，画像処理装置とは別のコンピュータによって実行され，コンパイル済みのシェーダプログラムが画像処理装置に格納されていてもよいし，あるいは図１１に示されるように，画像処理装置が備えるＣＰＵによって描画直前に実行されてもよい。すなわち，本発明は，図１０及び図１１の両方の態様を含むものである。
【００５８】
以上，本願明細書では，本発明の内容を表現するために，図面を参照しながら本発明の実施形態の説明を行った。ただし，本発明は，上記実施形態に限定されるものではなく，本願明細書に記載された事項に基づいて当業者が自明な変更形態や改良形態を包含するものである。
【産業上の利用可能性】
【００５９】
本発明は，コンピュータグラフィックス用の画像処理装置及び画像処理方法に関するものである。従って，本発明はコンピュータ関連産業において好適に利用し得る。
【符号の説明】
【００６０】
１０…メインユニット                １１…管理部
１２…頂点処理部                    １３…ラスタライズ処理部
１４…フラグメント処理部            １５…テクスチャ処理部
１６…カラーアップデート処理部      １７…内部メモリ
２０…サブユニット                  ２１…第１の演算器
２２…第２の演算器                  ２３…第３の演算器
３０…コンパイル処理部              １００…ＧＰＵ
２００…外部メモリ                  ３００…ＣＰＵ
１０００…画像処理装置              ２０００…別のコンピュータ
【図１】
2017123034.tif 000003
【図２】
2017123034.tif 000004
【図３】
2017123034.tif 000005
【図４】
2017123034.tif 000006
【図５】
2017123034.tif 000007
【図６】
2017123034.tif 000008
【図７】
2017123034.tif 000009
【図８】
2017123034.tif 000010
【図９】
2017123034.tif 000011
【図１０】
2017123034.tif 000012
【図１１】
2017123034.tif 000013