(57)【要約】【課題】  マルチパスレンダリングではパス切り替え時のオーバーヘッドが大きい。【解決手段】  シェーダ２０は、ＤＤＡ３４から投入された第１パスの先頭ピクセルがパイプライン処理の最終段に到達すると、「完全フル」信号をバッファ制御部３３に送り、第１パスの先頭ピクセルがパイプライン処理の途中段に到達すると、「ほとんどフル」信号をバッファ制御部３３とプリミティブ生成部９０に送る。プリミティブ生成部９０は、「ほとんどフル」信号を受けると、第１パスの描画プリミティブの生成を中断し、第２パスの描画プリミティブの生成を開始する。バッファ制御部３３は、「ほとんどフル」信号を受けると、セットアップ処理部３２からの第１パスの描画プリミティブをテンポラリバッファ３６経由でＤＤＡ３４に供給し、「完全フル」信号を受けると、第２パスに切り替え、セットアップ処理部３２からの第２パスの描画プリミティブを直接ＤＤＡ３４に供給する。【選択図】  図２
2006178571.tif 000002
【特許請求の範囲】
【請求項１】
描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングを行う描画処理装置であって、
マルチパスレンダリングの各演算パスで処理される描画プリミティブに関するデータを生成するプリミティブ生成部と、
前記プリミティブ生成部から入力される各演算パスの描画プリミティブに関するデータをラスタライズしてピクセルデータを順次生成するラスタライザと、
前記ピクセルデータに対して各演算パスの命令をパイプライン処理によって実行するシェーダとを含み、
前記シェーダは、現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達する前に、所定の時間余裕をもってパス切り替え信号を前記プリミティブ生成部に供給し、
前記プリミティブ生成部は、前記パス切り替え信号の供給を受けたことを契機に、現演算パスの描画プリミティブに関するデータの生成を中断し、次の演算パスの描画プリミティブに関するデータの生成を開始することを特徴とする描画処理装置。
【請求項２】
前記所定の時間余裕は、前記プリミティブ生成部により描画プリミティブの生成が開始されてからその描画プリミティブが前記ラスタライザによるラスタライズ処理に投入されるまでに要する時間に応じて設定されることを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記ラスタライザは、前記描画プリミティブに関するデータをデジタル微分解析処理によってピクセルデータに変換するデジタル微分解析部を含み、
前記所定の時間余裕は、前記プリミティブ生成部により描画プリミティブの生成が開始されてからその描画プリミティブが前記デジタル微分解析部によるデジタル微分解析処理に投入される直前までに要する時間に応じて設定されることを特徴とする請求項１に記載の描画処理装置。
【請求項４】
前記所定の時間余裕に応じて前記パイプライン処理の最終段から数えた残余段数を設定し、前記シェーダは、現演算パスの最初のピクセルデータが前記パイプライン処理の最終段よりも前記残余段数分だけ手前の位置に達したとき、前記パス切り替え信号を前記プリミティブ生成部に供給することを特徴とする請求項１から３のいずれかに記載の描画処理装置。
【請求項５】
前記シェーダは、現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達したとき、現演算パスのピクセルデータの投入を停止させるためのピクセル投入停止信号を前記ラスタライザに供給し、
前記ラスタライザは、前記ピクセル投入停止信号の供給を受けたことを契機に、現演算パスで処理対象となっている描画プリミティブに関するデータのラスタライズ処理を中断し、次の演算パスで処理対象となる描画プリミティブに関するデータのラスタライズ処理に切り替えることを特徴とする請求項１から４のいずれかに記載の描画処理装置。
【請求項６】
前記ラスタライザは、前記プリミティブ生成部から入力される描画プリミティブに関するデータを一時的に保持するテンポラリバッファを含み、
前記シェーダは、前記パス切り替え信号を前記ラスタライザにも供給し、前記ラスタライザは、前記パス切り替え信号の供給を受けてから、前記ピクセル投入停止信号の供給を受けるまでの間、現演算パスの描画プリミティブに関するデータを前記テンポラリバッファにバッファリングしながらラスタライズ処理することを特徴とする請求項５に記載の描画処理装置。
【請求項７】
前記ラスタライザは、前記ピクセル投入停止信号の供給を受けたとき、前記テンポラリバッファに残留する現演算パスの描画プリミティブに関するデータを破棄し、次の演算パスの描画プリミティブに関するデータを前記テンポラリバッファにバッファリングすることなくラスタライズ処理することを特徴とする請求項６に記載の描画処理装置。
【請求項８】
前記ラスタライザは、前記テンポラリバッファから破棄した現演算パスの描画プリミティブ数を前記プリミティブ生成部に通知し、
前記プリミティブ生成部は、現演算パスの処理を再開する際、前記破棄した描画プリミティブ数分だけ戻って描画プリミティブに関するデータを生成し、前記ラスタライザに入力することを特徴とする請求項７に記載の描画処理装置。
【請求項９】
描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングのために、描画プリミティブに関するデータを演算パス単位でラスタライズ処理するラスタライザであって、
各演算パスの描画プリミティブに関するデータに対してデジタル微分解析に関するパラメータを設定するセットアップ処理部と、
前記セットアップ処理部から出力される前記描画プリミティブに関するデータを一時的に保持するテンポラリバッファと、
前記デジタル微分解析に関するパラメータにもとづいて前記描画プリミティブに関するデータをピクセルデータに変換するデジタル微分解析部と、
前記セットアップ処理部から前記デジタル微分解析部への前記描画プリミティブに関するデータの供給を、前記テンポラリバッファを介した間接的供給と前記テンポラリバッファを介さない直接的供給との間で切り替えるバッファ制御部とを含むことを特徴とするラスタライザ。
【請求項１０】
前記バッファ制御部は、当該ラスタライザにより生成されるピクセルデータをパイプライン処理するシェーダから、現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達したことにより、現演算パスのピクセルデータの投入を停止させるためのピクセル投入停止信号を受けた場合に、現演算パスで処理対象となっている描画プリミティブに関するデータの前記デジタル微分解析部への供給を中断し、次の演算パスで処理対象となる描画プリミティブに関するデータの前記デジタル微分解析部への供給に切り替えることを特徴とする請求項９に記載のラスタライザ。
【請求項１１】
前記バッファ制御部は、当該ラスタライザにより生成されるピクセルデータをパイプライン処理するシェーダから、現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達する前に所定の時間余裕をもってパス切り替え信号を受けた場合に、前記パス切り替え信号を受けてから、前記ピクセル投入停止信号を受けるまでの間、現演算パスの描画プリミティブに関するデータを前記テンポラリバッファにバッファリングしながら前記デジタル微分解析部へ供給することを特徴とする請求項１０に記載のラスタライザ。
【請求項１２】
前記バッファ制御部は、前記ピクセル投入停止信号の供給を受けたとき、前記テンポラリバッファに残留する現演算パスの描画プリミティブに関するデータを破棄し、次の演算パスの描画プリミティブに関するデータを前記テンポラリバッファにバッファリングすることなく前記デジタル微分解析部に供給することを特徴とする請求項１１に記載のラスタライザ。
【請求項１３】
描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングによる描画処理方法であって、
マルチパスレンダリングの各演算パスで処理される描画プリミティブに関するデータを生成するステップと、
生成された各演算パスの描画プリミティブに関するデータをラスタライズしてピクセルデータを順次生成するステップと、
前記ピクセルデータに対して各演算パスの命令をパイプライン処理によって実行するステップとを含み、
現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達する前に、所定の時間余裕をもって、現演算パスの描画プリミティブに関するデータの生成を中断し、次の演算パスの描画プリミティブに関するデータの生成を開始するようにパス切り替えを制御することを特徴とする描画処理方法。
【請求項１４】
描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングのために、描画プリミティブに関するデータを演算パス単位でラスタライズ処理する描画処理方法であって、
各演算パスの描画プリミティブに関するデータに対してデジタル微分解析に関するパラメータをセットアップするステップと、
前記デジタル微分解析に関するパラメータにもとづいて前記描画プリミティブをピクセル化するステップとを含み、
演算パスの切り替えの際、次の演算パスの最初の描画プリミティブに関するデータに対して前記デジタル微分解析に関するパラメータのセットアップが完了するまでは、現演算パスの描画プリミティブに関するデータをバッファリングしながらピクセル化することを特徴とする描画処理方法。
【請求項１５】
演算パスの切り替えの際、次の演算パスの最初の描画プリミティブに関するデータに対して前記デジタル微分解析に関するパラメータのセットアップが完了したとき、バッファリングされた現演算パスの描画プリミティブに関するデータを破棄し、次の演算パスの描画プリミティブに関するデータをバッファリングすることなくピクセル化することを特徴とする請求項１４に記載の描画処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は描画データを演算処理する描画処理装置、ラスタライザおよび描画処理方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスにおけるレンダリングエンジンは、複雑で高度なシェーディングアルゴリズムに対応するため、プログラマビリティをもった、よりプロセッサライクなものに変わりつつある。特にレンダリングエンジンの中核であるピクセルシェーダは、固定のグラフィックス機能を実装したハードウエアから、ＣＰＵと同じような命令セットを備えた演算ユニットを内蔵し、プログラミングによってフレキシブルに機能を追加していくことができるプロセッサへとその姿を変えつつある。
【０００３】
現在のプログラマブルなピクセルシェーダでは、描画処理対象の３次元オブジェクトに対してポリゴンセットアップを行った後、各ポリゴンをラスタライズしたピクセルデータを演算処理し、最終的なカラー値を算出する。より複雑なシェーディング処理を実現するために、マルチパスレンダリングと呼ばれる手法が用いられる。マルチパスレンダリングは、シェーディング処理を複数の演算パスに分割し、同一の描画プリミティブに対して複数回異なる演算処理を施す手法であり、よりきめ細かな描画処理を行って描画品質を上げることができる。
【０００４】
マルチパスレンダリングでは、１つ以上の描画プリミティブに対する描画処理を複数のパスに分割して処理するが、先に処理されたパスにおける演算処理の中間結果を後続のパスにおいて利用するため、中間結果を保持するバッファが必要になる。中間結果を保持するバッファには容量制限があることから、各パスでは、すべての描画プリミティブを一度に処理することは不可能であり、一定のピクセル数の区間で区切り、その区間毎に各パスの演算処理を行う。たとえば、パス１からパスｎまである場合、パス１から順に演算処理を行い、パスｎまでの演算処理が終了すると、次の区間に移り、同様にパス１からパスｎまでの演算処理を行う。これを繰り返すことにより、すべての描画プリミティブのピクセルデータに対してマルチパスレンダリングが遂行される。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このように、マルチパスレンダリングでは、先のパスにおける演算結果を後続のパスの処理タイミングまで保持するバッファが必要であり、バッファのオーバーフローが生じないように、各パスで処理されるピクセル数がバッファの容量制限を超えないように制御する必要がある。しかしながら、ピクセル数がバッファの容量制限に達するかどうかは、描画プリミティブをラスタライズ処理するまで判明しない。たとえば、視点からの距離が近い描画プリミティブは画面上でより大きく描画されるため、ラスタライズ処理後にピクセル数が増大する。
【０００６】
ラスタライズ処理後にバッファがオーバーフローすることがわかると、処理途上のパスを中断し、それ以上、そのパスのピクセルデータが投入されないように制御しなければならない。その際、いったんラスタライズされた大量のピクセルデータは破棄されるという無駄が生じる。これは、ラスタライズ処理の単位は描画プリミティブであるのに対して、シェーディング処理の単位はピクセルであり、ピクセル数がわからなければ、各パスの演算結果の保持に必要なバッファのオーバーフローが判明しないことによる。
【０００７】
また、ラスタライズ処理後にバッファがオーバーフローすることが判明してから、パスの切り替え制御を行うため、次のパスの描画プリミティブのパラメータの取得、描画プリミティブの生成処理、セットアップ処理などに時間がかかり、パスの切り替え時のオーバーヘッドが大きく、マルチパスレンダリングの処理速度が低下する。さらに、オーバーフローによって処理できなかった描画プリミティブについては、そのパスの再開時に再度ラスタライズし、ピクセルデータを生成する処理が必要であり、効率が悪い。
【０００８】
本発明はこうした課題に鑑みてなされたものであり、その目的は、マルチパスレンダリングを効率良く行うことのできる描画処理技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明のある態様の描画処理装置は、描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングを行うものであって、マルチパスレンダリングの各演算パスで処理される描画プリミティブに関するデータを生成するプリミティブ生成部と、前記プリミティブ生成部から入力される各演算パスの描画プリミティブに関するデータをラスタライズしてピクセルデータを順次生成するラスタライザと、前記ピクセルデータに対して各演算パスの命令をパイプライン処理によって実行するシェーダとを含む。前記シェーダは、現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達する前に、所定の時間余裕をもってパス切り替え信号を前記プリミティブ生成部に供給し、前記プリミティブ生成部は、前記パス切り替え信号の供給を受けたことを契機に、現演算パスの描画プリミティブに関するデータの生成を中断し、次の演算パスの描画プリミティブに関するデータの生成を開始する。
【００１０】
本発明の別の態様は、ラスタライザである。このラスタライザは、描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングのために、描画プリミティブに関するデータを演算パス単位でラスタライズ処理するものであって、各演算パスの描画プリミティブに関するデータに対してデジタル微分解析に関するパラメータを設定するセットアップ処理部と、前記セットアップ処理部から出力される前記描画プリミティブに関するデータを一時的に保持するテンポラリバッファと、前記デジタル微分解析に関するパラメータにもとづいて前記描画プリミティブに関するデータをピクセルデータに変換するデジタル微分解析部と、前記セットアップ処理部から前記デジタル微分解析部への前記描画プリミティブに関するデータの供給を、前記テンポラリバッファを介した間接的供給と前記テンポラリバッファを介さない直接的供給との間で切り替えるバッファ制御部とを含む。
【００１１】
本発明のさらに別の態様は、描画処理方法である。この方法は、描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングによる描画処理方法であって、マルチパスレンダリングの各演算パスで処理される描画プリミティブに関するデータを生成するステップと、生成された各演算パスの描画プリミティブに関するデータをラスタライズしてピクセルデータを順次生成するステップと、前記ピクセルデータに対して各演算パスの命令をパイプライン処理によって実行するステップとを含む。現演算パスの最初のピクセルデータが前記パイプライン処理の最終段に到達する前に、所定の時間余裕をもって、現演算パスの描画プリミティブに関するデータの生成を中断し、次の演算パスの描画プリミティブに関するデータの生成を開始するようにパス切り替えを制御する。
【００１２】
本発明のさらに別の態様もまた、描画処理方法である。この方法は、描画プリミティブに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングのために、描画プリミティブに関するデータを演算パス単位でラスタライズ処理する描画処理方法であって、各演算パスの描画プリミティブに関するデータに対してデジタル微分解析に関するパラメータをセットアップするステップと、前記デジタル微分解析に関するパラメータにもとづいて前記描画プリミティブをピクセル化するステップとを含む。演算パスの切り替えの際、次の演算パスの最初の描画プリミティブに関するデータに対して前記デジタル微分解析に関するパラメータのセットアップが完了するまでは、現演算パスの描画プリミティブに関するデータをバッファリングしながらピクセル化する。演算パスの切り替えの際、次の演算パスの最初の描画プリミティブに関するデータに対して前記デジタル微分解析に関するパラメータのセットアップが完了したとき、バッファリングされた現演算パスの描画プリミティブに関するデータを破棄し、次の演算パスの描画プリミティブに関するデータをバッファリングすることなくピクセル化してもよい。
【００１３】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１４】
本発明によれば、マルチパスレンダリングの処理効率を改善することができる。
【発明を実施するための最良の形態】
【００１５】
図１は、実施の形態に係る描画処理装置１００の構成図である。描画処理装置１００は、３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理をマルチパスレンダリングの手法を用いて行う。
【００１６】
プリミティブ生成部９０は、描画対象となるプリミティブを生成してラスタライザ１０に与える。描画プリミティブは、３次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位であり、頂点単位で表されるデータである。本図では、プリミティブ生成部９０は、描画処理装置１００の一部を構成しているが、プリミティブ生成部９０は、ポリゴンモデル情報を生成する専用のプロセッサもしくは頂点シェーダであってもよく、描画処理装置１００の外部にあって、描画処理装置１００とネットワーク接続してもよい。
【００１７】
プリミティブ生成部９０は、描画プリミティブ生成の中断（サスペンド）と再開（レジューム）の機能をもち、シェーダ２０からの制御信号によって、マルチパスレンダリングのパスの切り替えを行い、それまでのパスについての描画プリミティブの生成を中断し、次のパスの描画プリミティブの生成を開始する。すべてのパスの処理が一巡して、再び最初のパスに戻る場合、前回中断した描画プリミティブの位置から描画プリミティブの生成を再開する。
【００１８】
ラスタライザ１０は、プリミティブ生成部９０から描画プリミティブの頂点データを取得し、描画プリミティブをスクリーンに対応した描画ユニットに変換する。
【００１９】
ここで、「描画ユニット」とは、一般には、所定の大きさのピクセル領域であり、１つのピクセルであることも、複数のピクセルの集合であることもある。あるいは、描画ユニットは、１つのピクセルをさらに細かく分割したサブピクセルの１つ、もしくはそのようなサブピクセルの集合であってもよい。以下では、説明の簡単のため、描画ユニットが複数のピクセルもしくは複数のサブピクセルからなる場合でも、描画ユニット内部での個々のピクセルもしくはサブピクセルの処理を隠蔽して、描画ユニット全体で１つのピクセルであるとみなして、本実施の形態に特徴的な描画処理技術を説明する。したがって、以下では「描画ユニット」を単にピクセルと称することにする。
【００２０】
描画プリミティブは一例として三角形の形状であり、ラスタライザ１０は、３次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、１列毎に量子化されたピクセルに変換する。ラスタライザ１０により、描画プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセル情報が算出される。
【００２１】
ラスタライザ１０のより詳細な構成を説明する。プリミティブ入力部３０は、プリミティブ生成部９０から受け取った描画プリミティブの頂点座標とパラメータを含むストリームを生成し、セットアップ処理部３２に与える。セットアップ処理部３２は、描画プリミティブのストリームをデジタル微分解析器（Digital Differential Analyzer；ＤＤＡ）により処理するための各種パラメータのセットアップを行う。具体的には、描画プリミティブを含む空間を区切るバウンダリボックスの設定や、エッジ係数などＤＤＡ処理の各種パラメータの設定を行う。
【００２２】
セットアップ処理部３２は、セットアップ後の描画プリミティブデータをテンポラリバッファ３６にバッファするか、もしくはＤＤＡ３４に直接与える。セットアップ処理部３２からＤＤＡ３４への描画プリミティブデータの供給には、描画プリミティブをテンポラリバッファ３６にバッファリングすることなく、ＤＤＡ３４に直接供給する「直接供給モード」と、描画プリミティブをテンポラリバッファ３６にいったんバッファリングした後にＦＩＦＯ順でＤＤＡ３４に供給する「間接供給モード」の２つがあり、いずれかのモードが選択される。
【００２３】
テンポラリバッファ３６は、セットアップ処理部３２が出力する描画プリミティブを一時的に保持するためのＦＩＦＯ（First-In First-Out）構造のバッファである。テンポラリバッファ３６は、プリミティブ生成部９０が描画プリミティブの投入を中断した後、中断する直前に投入された描画プリミティブのセットアップ処理が完了するまでにセットアップ処理部３２から出力される描画プリミティブを保持可能な容量が最低限確保されている。
【００２４】
ＤＤＡ３４は、テンポラリバッファ３６からＦＩＦＯ順で出力される描画プリミティブ、もしくはセットアップ処理部３２から直接与えられる描画プリミティブを、セットアップ処理部３２により設定された各種パラメータにもとづいてＤＤＡ処理して、ピクセルデータに変換する。ＤＤＡ３４は、描画プリミティブのピクセルデータをシェーダ２０に与える。
【００２５】
一般に、ＤＤＡ３４に入力される描画プリミティブの表面積が大きいほど、その描画プリミティブをピクセル化した場合のピクセル数が増える。また、描画プリミティブが視点から近い位置にあって、描画プリミティブを高い詳細度レベルで描画する必要がある場合は、描画プリミティブから生成されるピクセル数は増える。セットアップ処理部３２においては、頂点データで描画プリミティブが表されているため、データ量は少ないが、ＤＤＡ３４によりピクセル化処理した後は、ピクセル数が増大し、データ量が増える。また、描画プリミティブの表面積や詳細度によって生成されるピクセル数は変わるため、ＤＤＡ処理を経た後でないと、生成されるピクセル数は判明しない。
【００２６】
シェーダ２０は、ラスタライザ１０により算出されたピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値を求め、さらに、テクスチャマッピングを行う場合は、テクスチャユニット７０から得られるテクスチャのカラー値を合成して最終的なピクセルのカラー値を算出し、フレームバッファ５０にピクセルデータを書き込む。
【００２７】
テクスチャユニット７０は、シェーダ２０において処理されるピクセルにテクスチャデータをマッピングする処理を行う。ポリゴン面上のピクセルにマッピングされるテクスチャの位置を２次元パラメータ座標であるＵＶ座標系で表す。テクスチャユニット７０は、シェーダ２０からピクセルにマッピングされるテクスチャのＵＶ座標値を取得し、ＵＶ座標値を参照アドレスに変換した後、テクスチャから参照アドレスに対応するカラー値を取得して、シェーダ２０に供給する。
【００２８】
シェーダ２０は、さらに、フレームバッファ５０に保持された描画データに対して、フォギング、アルファブレンディング等の処理を行い、最終的なピクセルのカラー値を求め、フレームバッファ５０のピクセルデータを更新する。
【００２９】
シェーダ２０は、シェーディングプログラムをパイプライン処理で実行する。シェーダ２０は、パイプライン処理による演算結果をパイプラインの任意の段にフィードバックして入力として与える機構を備えている。このフィードバックループをマルチパスレンダリングにおいて活用し、先に処理されたパスにおける演算結果を次のパスに渡して重ね描きなどの処理を行うことができる。
【００３０】
フレームバッファ５０は、シェーダ２０により生成されたピクセルデータをスクリーン座標で格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。フレームバッファ５０に記憶されたピクセルデータは、表示装置に出力されて表示される。
【００３１】
図２は、ラスタライザ１０におけるラスタライズ処理の制御機構を説明する図である。図１では、図示しなかったが、セットアップ処理部３２の後段にはバッファ制御部３３が介在し、バッファ制御部３３は、セットアップ処理部３２から出力される描画プリミティブデータのＤＤＡ３４への供給を制御する。
【００３２】
バッファ制御部３３は、セットアップ処理部３２から出力される描画プリミティブデータをテンポラリバッファ３６を介さずにＤＤＡ３４に直接的に供給する動作と、テンポラリバッファ３６にバッファリングしながらＤＤＡ３４に間接的に供給する動作を切り替える。バッファ制御部３３は、通常時は直接供給モードで動作し、パス切り替えの際に間接供給モードで動作する。
【００３３】
シェーダ２０は、ラスタライザ１０により投入された第１パスの最初のピクセルデータ（以下、「先頭ピクセル」という）がピクセルパイプライン処理の最終段を通過し、フレームバッファ５０に出力されるタイミングで、符号８２で示すように、「完全フル（Completely Full）」信号をバッファ制御部３３とＤＤＡ３４に送る。
【００３４】
また、シェーダ２０は、「完全フル」信号を出す時点よりも前の時点であって、ピクセルパイプライン処理の途中段に先頭ピクセルが到達した時点で、符号８０で示すように「ほとんどフル（Almost Full）」信号をバッファ制御部３３とプリミティブ生成部９０に送る。すなわち、シェーダ２０は、先頭ピクセルがピクセルパイプライン処理の最終段に到達し、「完全フル」信号を出すに至る前に一定の時間余裕をもって、「ほとんどフル」信号を発行する。「ほとんどフル」信号を発行してから「完全フル」信号を発行するまでの時間余裕を「スラックタイム」と呼ぶ。
【００３５】
このスラックタイムは、プリミティブ生成部９０において描画プリミティブの生成が開始されてから、その描画プリミティブがＤＤＡ処理に投入される直前までのレイテンシに等しくなるように設定される。プリミティブ生成部９０が描画プリミティブを生成するのに要する時間、プリミティブ入力部３０が描画プリミティブのストリームを生成するのに要する時間、およびセットアップ処理部３２が描画プリミティブをセットアップするのに要する時間は、それぞれのハードウエア構成に依存して決まるため、スラックタイムはあらかじめ計算して設定することができる。
【００３６】
ピクセルパイプライン処理の最終段から数えた残余段数をこのスラックタイムに対応して設け、先頭ピクセルがピクセルパイプライン処理の残余段数の処理を通過するのにかかる時間がスラックタイムに等しくなるようにする。ピクセルパイプライン処理のスループットはシェーダ２０のハードウエア構成に依存して決まるため、残余段数はあらかじめ設定することができる。
【００３７】
シェーダ２０は、先頭ピクセルがピクセルパイプライン処理の最終段よりも残余段数分だけ手前の位置（この位置をクリティカルポイントという）に到達したときに、「ほとんどフル」信号を発行するようにする。シェーダプログラムにおいて、ピクセルパイプライン処理のクリティカルポイントに対応するプログラム位置に制御ポイントを設定し、「ほとんどフル」信号を発行する命令を入れておいてもよい。これにより、シェーダ２０は、先頭ピクセルの処理がシェーダプログラムの制御ポイントを通過したときに「ほとんどフル」信号を発行することができる。
【００３８】
このようにスラックタイムを定め、ピクセルパイプライン処理のクリティカルポイントを設定することにより、先頭ピクセルがピクセルパイプライン処理のクリティカルポイントに到達してから、ピクセルパイプライン処理の最終段を通過して出力されるまでの時間と、プリミティブ生成部９０により描画プリミティブの生成が開始されてから、その描画プリミティブがＤＤＡ処理に投入される直前までの時間とがほぼ一致するようになる。これにより、パス切り替え時でもＤＤＡ処理が停止することなく、継続して実行されることが保証される。
【００３９】
プリミティブ生成部９０は、シェーダ２０から「ほとんどフル」信号を受け取ると、現在処理中の第１パスの描画プリミティブの生成を直ちに中断し、第２パスに移行し、第２パスの描画プリミティブの生成を開始する。このように、「ほとんどフル」信号は、プリミティブ生成部９０に対してパス切り替えを指示する信号として作用する。
【００４０】
バッファ制御部３３は、シェーダ２０から「ほとんどフル」信号を受け取ると、セットアップ処理部３２から出力される第１パスの描画プリミティブデータをテンポラリバッファ３６経由でＤＤＡ３４に供給する間接供給動作に切り替える。バッファ制御部３３は、シェーダ２０からさらに「完全フル」信号を受け取り、第１パスの先頭ピクセルが実際にシェーダ２０のパイプライン処理の最終段まで達したことを確認してから、第２パスに切り替え、セットアップ処理部３２から出力される第２パスの描画プリミティブデータをＤＤＡ３４に直接供給する直接供給動作に切り替える。間接供給動作から直接供給動作に切り替える際、テンポラリバッファ３６に第１パスの描画プリミティブデータが残留している場合は、それを破棄し、破棄された第１パスの描画プリミティブ数をプリミティブ生成部９０に通知する。
【００４１】
ＤＤＡ３４は、ＤＤＡ処理の中断と再開機能をもち、シェーダ２０から「完全フル」信号を受け取ると、直ちに第１パスのＤＤＡ処理を中断し、中断した描画プリミティブのピクセル位置を記憶し、第１パスの再開時には記憶した中断位置からＤＤＡ処理を開始する。ＤＤＡ３４は、ＤＤＡ処理の始点と終点にそれぞれ対応する再開位置と中断位置を記憶する必要があり、再開時には、バッファ制御部３３から、セットアップ処理部３２により設定されたパラメータ係数とともに再開信号を受け取り、前回の中断位置からＤＤＡ処理を再開し、中断位置を再開位置にコピーする。
【００４２】
ＤＤＡ３４は、「完全フル」信号を受け取り、第１パスのＤＤＡ処理を中断した後、バッファ制御部３３から直ちに第２パスの最初の描画プリミティブの供給を受け、第２パスのＤＤＡ処理を開始する。このように、「完全フル」信号は、ＤＤＡ３４に対して、第１パスのＤＤＡ処理を中断して、第１パスのピクセル投入を停止し、第２パスのＤＤＡ処理に切り替える指示を与えるピクセル投入停止信号として作用する。
【００４３】
このように、本実施の形態では、シェーダ２０から発行される「ほとんどフル」信号と「完全フル」信号の２つの信号にもとづいてパスの切り替え制御が行われる。「ほとんどフル」信号の発行を契機として、第２パスの描画プリミティブの生成とセットアップ処理が前もって行われ、第１パスの先頭ピクセルがシェーダ２０のパイプライン処理の最終段を通過して、フレームバッファ５０に出力される「完全フル」のタイミングでは、セットアップ処理部３２は第２パスの最初の描画プリミティブのセットアップ処理を完了している。したがって、第１パスから第２パスへの切り替えの際、ＤＤＡ３４は、第１パスの描画プリミティブのラスタライズを中断した後、直ちに第２パスの描画プリミティブのラスタライズを開始することができ、ＤＤＡ処理はパス切り替えを挟んでも全く停止することない。
【００４４】
また、ＤＤＡ３４から第２パスの最初の描画プリミティブがピクセル化されてシェーダ２０に入力されるとき、シェーダ２０からは第１パスの処理結果が出力されているから、シェーダ２０は、第１パスの処理結果をフィードバックして、第２パスの演算処理に利用することができる。このフィードバックループにより、シェーダ２０は、前パスの中間結果を中間バッファなどを介さずに直接的に次のパスの演算処理に活用することができる。シェーダ２０自身が前パスの中間結果を保持するバッファとして機能しているとも言うことができる。第１パスの先頭ピクセルがシェーダ２０のピクセルパイプライン処理の途中段のクリティカルポイントを通過することを「ほとんどフル」と呼んだり、最終段を通過することを「完全フル」と呼ぶのも、シェーダ２０をバッファに見立てているからである。
【００４５】
バッファ制御部３３が、第１パスから第２パスへのパス切り替えの際に間接供給動作に切り替えることにより、シェーダ２０において第１パスのシェーディング処理に時間がかかり、ＤＤＡ３４にピクセルデータが滞留している場合でも、セットアップ処理部３２から出力される第１パスの描画プリミティブをテンポラリバッファ３６に一時的に退避することができる。これにより、セットアップ処理部３２は、第１パスの描画プリミティブを出力した後、第２パスの描画プリミティブのセットアップを先行して進めることができ、第２パスへの切り替え後に直ちに第２パスの描画プリミティブをＤＤＡ３４に直接的に供給することができる。したがって、第１パスから第２パスへの切り替えの際、ＤＤＡ３４に対して第１パスの描画プリミティブの供給と第２パスの描画プリミティブの供給が全く途切れることなく行われる。
【００４６】
図３は、バッファ制御部３３の詳細な構成を説明する図である。バッファ制御部３３は、切替制御部４０と、セレクタ４２と、第１スイッチ４４と、第２スイッチ４６とを含む。
【００４７】
切替制御部４０は、セットアップ処理部３２からＤＤＡ３４への描画プリミティブの供給ルートを切り替えるために、セレクタ４２、第１スイッチ４４、第２スイッチ４６、およびテンポラリバッファ３６に制御信号を与えてそれぞれを制御する。
【００４８】
第１スイッチ４４および第２スイッチ４６はそれぞれ、切替制御部４０からの制御信号によりオンに設定されたときは、入力されたデータを後段に出力し、オフに設定されたときは、入力されたデータを後段に出力しない。第１スイッチ４４は、セットアップ処理部３２とテンポラリバッファ３６の間に設けられ、セットアップ処理部３２から出力される描画プリミティブデータの入力を受け、オンに設定されている場合に限り、入力された描画プリミティブデータをテンポラリバッファ３６に出力する。第２スイッチ４６は、セレクタ４２とＤＤＡ３４の間に設けられ、セレクタ４２から出力される描画プリミティブデータの入力を受け、オンに設定されている場合に限り、入力された描画プリミティブデータをＤＤＡ３４に出力する。
【００４９】
セレクタ４２は、切替制御部４０からの制御信号にもとづいて、入力を第１入力Ａ側と第２入力Ｂ側のいずれかに切り替えて、入力されたデータを後段の第２スイッチ４６に出力する。セレクタ４２の第１入力Ａには、セットアップ処理部３２から出力される描画プリミティブデータが入力され、第２入力Ｂには、テンポラリバッファ３６にバッファリングされた描画プリミティブがＦＩＦＯ順で取り出されて入力される。
【００５０】
切替制御部４０は、シェーダ２０から「完全フル」信号と「ほとんどフル」信号を受け取る。また、プリミティブ生成部９０がパスの切り替えを行い、その結果、セットアップ処理部３２に新しいパスの描画プリミティブのストリームが投入され、セットアップ処理部３２において新しいパスの最初の描画プリミティブのセットアップが完了したとき、切替制御部４０には、セットアップ処理部３２から「パスチェンジ」信号が供給される。「パスチェンジ」信号は、第２パスの描画プリミティブをＤＤＡ３４に投入する準備が整ったことを意味する。
【００５１】
切替制御部４０は、「完全フル」、「ほとんどフル」、および「パスチェンジ」の各信号の有無によって、セットアップ処理部３２から出力される描画プリミティブの供給モードをＤＤＡ３４への直接供給モードまたはテンポラリバッファ３６経由の間接供給モードのいずれかに決定し、それぞれの供給モードを実現するために、セレクタ４２、第１スイッチ４４、第２スイッチ４６、およびテンポラリバッファ３６に制御信号を与える。
【００５２】
切替制御部４０は、「完全フル」、「ほとんどフル」、および「パスチェンジ」のいずれの信号も受け取っていない場合、通常の直接供給モードに設定する。直接供給モードの場合、切替制御部４０は、第１スイッチ４４をオフに設定し、セットアップ処理部３２から出力される描画プリミティブデータがテンポラリバッファ３６にバッファリングされずに、セレクタ４２の第１入力Ａに入力されるように制御する。また、切替制御部４０は、セレクタ４２の入力を第１入力Ａ側に切り替え、第２スイッチ４６をオンに設定する。これにより、セットアップ処理部３２から出力される描画プリミティブデータがセレクタ４２および第２スイッチ４６を経由してＤＤＡ３４に供給される。
【００５３】
切替制御部４０は、「ほとんどフル」信号を受け取った場合、間接供給モードに設定する。間接供給モードの場合、切替制御部４０は、第１スイッチ４４をオンに設定し、セットアップ処理部３２から出力される描画プリミティブがテンポラリバッファ３６にバッファリングされるように制御する。また、切替制御部４０は、セレクタ４２の入力を第２入力Ｂ側に切り替え、第２スイッチ４６をオンに設定する。これにより、テンポラリバッファ３６にバッファリングされた描画プリミティブデータがＦＩＦＯ順で取り出され、セレクタ４２および第２スイッチ４６を経由してＤＤＡ３４に供給される。
【００５４】
切替制御部４０は、新しいパスに切り替える際、テンポラリバッファ３６にバッファリングされた古いパスの描画プリミティブを破棄するために、テンポラリバッファ３６にリセット信号を供給する。テンポラリバッファ３６は、リセット信号を受け取ると、その時点で保持されている古いパスの描画プリミティブを破棄して、テンポラリバッファ３６をクリアする。プリミティブ入力部３０は、その古いパスの処理を再開するときに、破棄された描画プリミティブ数分だけ戻って描画プリミティブを生成する必要があるため、テンポラリバッファ３６は、破棄される描画プリミティブ数をプリミティブ入力部３０に送る。
【００５５】
以上の構成の描画処理装置１００による描画処理手順を図４および図５に示すフローチャートと、図６〜図１０に示すバッファ制御部３３の制御動作を参照しながら説明する。
【００５６】
図４は、マルチパスレンダリングの手順を説明するフローチャートである。第１パスから第ｎパスまでのｎ個のパスにシェーディングプログラムを分割して処理を行うとする。第１パスの処理を始めるにあたり、ラスタライザ１０の初期設定がなされる（Ｓ１０）。具体的には、テンポラリバッファ３６がクリアされ、ＤＤＡ３４が保持するピクセル化処理の再開位置および中断位置が初期化される。
【００５７】
プリミティブ生成部９０により第１パスの描画プリミティブが生成され、プリミティブ入力部３０によって第１パスの描画プリミティブのストリームがセットアップ処理部３２に投入される（Ｓ１２）。セットアップ処理部３２は、第１パスの描画プリミティブをＤＤＡ処理するためのセットアップ処理を行う（Ｓ１４）。
【００５８】
第１パスの処理において、バッファ制御部３３は、シェーダ２０から「ほとんどフル」信号を受け取るまでは、通常の直接供給モードで動作しており、セットアップ処理部３２から出力される描画プリミティブデータは直接ＤＤＡ３４に供給される。
【００５９】
図６は、バッファ制御部３３による直接供給動作を説明する図である。切替制御部４０は、「完全フル」、「ほとんどフル」、「パスチェンジ」のいずれの信号も受け取っていない。切替制御部４０は、直接供給モードを実現するために、第１スイッチ４４をオフに設定し、セレクタ４２の入力側を第１入力Ａに切り替え、さらに、第２スイッチ４６をオンに設定する。これにより、セットアップ処理部３２から出力される第１パスの描画プリミティブデータが、テンポラリバッファ３６にバッファリングされることなく、セレクタ４２と第２スイッチ４６を経由してＤＤＡ３４に直接供給される。
【００６０】
図４を参照し、ＤＤＡ３４は、セットアップ処理部３２によりセットアップされた第１パスの描画プリミティブをもとにＤＤＡ処理を行い、描画プリミティブをピクセルデータに変換し、シェーダ２０に与える（Ｓ１６）。シェーダ２０は、ＤＤＡ３４が生成したピクセルデータをもとに第１パスのシェーディング処理を行う（Ｓ１８）。
【００６１】
シェーダ２０は、第１パスの先頭ピクセルがパイプライン処理のクリティカルポイントに達したとき、「ほとんどフル」信号をプリミティブ生成部９０とバッファ制御部３３に与える。プリミティブ生成部９０は、「ほとんどフル」信号を受け取ると直ちに第１パスを中断し、第２パスに切り替える。バッファ制御部３３は、シェーダ２０から「ほとんどフル」信号を受け取った場合（Ｓ２０のＹ）、後述のパス切り替え処理を行う（Ｓ２２）。バッファ制御部３３は、シェーダ２０から「ほとんどフル」信号を受け取っていない場合（Ｓ２０のＮ）、ステップＳ１２の描画プリミティブ投入からステップＳ１８のシェーディング処理までの第１パスの処理を継続して行う。
【００６２】
図５は、ステップＳ２２のパス切り替え処理の詳細な手順を説明するフローチャートである。バッファ制御部３３は、第１パスから第２パスへの切り替えの際に、第１パスの描画プリミティブが無駄に破棄されずに、かつ、第１パスから第２パスへの切り替え時に間断なく描画プリミティブデータがＤＤＡ３４に供給されるように、バッファリングを利用して過渡的な制御を行う。
【００６３】
バッファ制御部３３は、セットアップ処理部３２から「パスチェンジ」信号を受け取ったかどうかを判断する（Ｓ５０）。プリミティブ生成部９０は、シェーダ２０から「ほとんどフル」信号を受け取り、第２パスの描画プリミティブの生成を開始するが、セットアップ処理部３２に第２パスの描画プリミティブのストリームが投入され、第２パスの最初の描画プリミティブデータがセットアップを完了して出力されるまでには処理時間がかかる。そこで、バッファ制御部３３は、セットアップ処理部３２から「パスチェンジ」信号を受け取ることにより、第２パスの最初の描画プリミティブのセットアップが完了したことを判断する。
【００６４】
バッファ制御部３３は、「パスチェンジ」信号をまだ受け取っていない場合（Ｓ５０のＮ）、次に「完全フル」信号を受け取ったかどうかを判断する（Ｓ５２）。「完全フル」信号をまだ受け取っていない場合（Ｓ５２のＮ）、バッファ制御部３３は、ステップＳＡ１０からＳＡ１４までの間接供給動作により第１パスの描画プリミティブデータの供給を行う。
【００６５】
バッファ制御部３３は、セットアップ処理部３２から出力される第１パスの描画プリミティブデータのＤＤＡ３４への直接供給を停止し（ＳＡ１０）、セットアップ処理部３２から出力される第１パスの描画プリミティブデータをテンポラリバッファ３６にバッファリングする（ＳＡ１２）。バッファ制御部３３は、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータをＦＩＦＯ順で取り出して、ＤＤＡ３４に入力する（ＳＡ１４）。
【００６６】
図７は、バッファ制御部３３によるステップＳＡ１０からＳＡ１４までの間接供給動作を説明する図である。切替制御部４０は、シェーダ２０から「ほとんどフル」信号だけを受け取っており、セットアップ処理部３２からはまだ「パスチェンジ」信号を受け取っていない。これは、プリミティブ生成部９０が「ほとんどフル」信号を受け取り、第１パスから第２パスに切り替え、第２パスの描画プリミティブの生成を開始したが、セットアップ処理部３２では、まだ第１パスの描画プリミティブのセットアップ処理が続いている状態である。
【００６７】
この状態において、切替制御部４０は、第１スイッチ４４をオンに切り替え、セットアップ処理部３２から出力される第１パスの描画プリミティブデータをテンポラリバッファ３６にいったんバッファリングする。また、切替制御部４０は、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータがＦＩＦＯ順で取り出され、セレクタ４２の第２入力Ｂに入力されるようにテンポラリバッファ３６を制御し、セレクタ４２の入力を第２入力Ｂ側に切り替える。これにより、図６で示したセットアップ処理部３２から出力される第１パスの描画プリミティブデータのＤＤＡ３４への直接供給が停止され、セットアップ処理部３２から出力される第１パスの描画プリミティブデータがテンポラリバッファ３６にいったんバッファリングされた後、セレクタ４２および第２スイッチ４６を経由してＤＤＡ３４に供給される。
【００６８】
図５を参照し、ステップＳ５０において、バッファ制御部３３が「パスチェンジ」信号を受け取り、第２パスの最初の描画プリミティブのセットアップ完了を確認した場合（Ｓ５０のＹ）、次に、「完全フル」信号を受け取ったかどうかを判断する（Ｓ５４）。「完全フル」信号をまだ受け取っていない場合（Ｓ５４のＮ）、バッファ制御部３３は、「完全フル」信号を受け取るまでの間は、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブをＤＤＡ３４に供給するステップＳＢ１０およびＳＢ１２の過渡的動作を行う。
【００６９】
バッファ制御部３３は、これまで行っていたセットアップ処理部３２から出力される第１パスの描画プリミティブデータをテンポラリバッファ３６にバッファリングする動作を停止する（ＳＢ１０）。一方、バッファ制御部３３は、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータをＦＩＦＯ順で取り出してＤＤＡ３４に入力する動作は継続する（ＳＢ１２）。
【００７０】
図８は、バッファ制御部３３によるステップＳＢ１０およびＳＢ１２の過渡的動作を説明する図である。切替制御部４０は、「ほとんどフル」信号と「パスチェンジ」信号を受け取っているが、「完全フル」信号はまだ受け取っていない。切替制御部４０は、第１スイッチ４４をオフに切り替えることにより、図７で示したセットアップ処理部３２から出力される描画プリミティブデータのテンポラリバッファ３６へのバッファリングを停止する。これは、既にセットアップ処理部３２からは第２パスの最初の描画プリミティブデータが出力されようとしているからである。
【００７１】
一方、切替制御部４０は、セレクタ４２を図７の状態のまま維持し、セレクタ４２の第２入力Ｂに入力されるデータを出力させることにより、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータがＦＩＦＯ順で取り出され、セレクタ４２および第２スイッチ４６を経由してＤＤＡ３４に続けて供給される。これにより、第２パスの描画プリミティブデータはテンポラリバッファ３６にはバッファリングされず、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータがＤＤＡ３４に供給され続けることになる。これは、切替制御部４０が「完全フル」信号を受け取るまでの過渡的動作である。
【００７２】
図５を参照し、ステップＳ５４において、バッファ制御部３３が「完全フル」信号を受け取った場合（Ｓ５４のＹ）、バッファ制御部３３は、第１パスの描画プリミティブデータの供給を中止するＳＣ１０からＳＣ１６までのバッファクリア動作を行う。
【００７３】
バッファ制御部３３は、これまで行っていたテンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータのＤＤＡ３４への供給を停止し（ＳＣ１０）、その時点でテンポラリバッファ３６内に残留している第１パスの描画プリミティブの個数をプリミティブ生成部９０へ通知する（ＳＣ１２）。バッファ制御部３３は、テンポラリバッファ３６にリセット信号を送ることにより、テンポラリバッファ３６をクリアし、第１パスの残留描画プリミティブデータを破棄する（ＳＣ１４）。バッファ制御部３３は、第２パス以降の処理を進めるにあたって、テンポラリバッファ３６をディセーブルする（ＳＣ１６）。バッファ制御部３３は、テンポラリバッファ３６をディセーブルした後、セレクタ４２の入力を第１入力Ａ側に切り替え、通常の直接供給モードに戻す。
【００７４】
図９は、バッファ制御部３３によるステップＳＣ１０からＳＣ１６までのバッファクリア動作を説明する図である。切替制御部４０は、「ほとんどフル」信号、「パスチェンジ」信号、および「完全フル」信号を受け取っている。「完全フル」信号を受け取ったことから、シェーダ２０において、第１パスの先頭ピクセルのパイプライン処理が完了し、第２パスの演算処理を開始するタイミングになっている。
【００７５】
切替制御部４０は、テンポラリバッファ３６を制御して、図８で示したテンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータのＤＤＡ３４への供給を停止する。この時点でテンポラリバッファ３６内に残留している第１パスの描画プリミティブがあれば、その残留プリミティブの数は、破棄プリミティブ数としてプリミティブ生成部９０に通知され、テンポラリバッファ３６は切替制御部４０からのリセット命令によってクリアされる。切替制御部４０は、セレクタ４２の入力を第１入力Ａ側に切り替える。これにより、第１パスの描画プリミティブデータのＤＤＡ３４への供給は停止し、これ以降は、図６の状態に戻り、セットアップ処理部３２から出力される第２パスの描画プリミティブデータがセレクタ４２と第２スイッチ４６を経由してＤＤＡ３４へ直接供給されるようになる。
【００７６】
以上述べたように、図６の直接供給動作から図７の間接供給動作に切り替わり、図８の過渡的動作および図９のバッファクリア動作を経て、再び図６の直接供給動作に戻るのが、第１パスから第２パスへのパス切り替え処理の通常の流れである。しかし、プリミティブ入力部３０、ラスタライザ１０、シェーダ２０における処理時間が必ずしも一定でないため、例外的な事象が発生することもある。特にシェーダ２０は、テクスチャユニット７０と連携するため、テクスチャマッピングにかかる時間により、ピクセルの処理に時間がかかることもあり、処理時間に不確定要素がある。図５および図１０を参照して、パス切り替え処理の例外動作を説明する。
【００７７】
図５を参照し、バッファ制御部３３が、「パスチェンジ」信号を受け取っていない場合（Ｓ５０のＮ）で、かつ、「完全フル」信号を受け取った場合（Ｓ５２のＹ）について説明する。これは、シェーダ２０において第１パスの先頭ピクセルがピクセルパイプライン処理の最終段を通過し、第２パスの処理を開始するタイミングになっているにもかかわらず、第２パスの最初の描画プリミティブのセットアップが完了していない状態であり、ＤＤＡ３４に第２パスの描画プリミティブデータを投入できず、ＤＤＡ３４が待ち状態で動作を停止するという例外的な状態である。このとき、シェーダ２０はピクセルパイプライン処理を止めることになり、パイプライン処理に「バブル」と呼ばれる空き時間が発生する。
【００７８】
この例外状態においては、バッファ制御部３３は、ステップＳＥ１０およびＳＥ１２の例外動作を行う。バッファ制御部３３は、セットアップ処理部３２から依然として出力される第１パスの描画プリミティブデータをテンポラリバッファ３６に退避する（ＳＥ１０）。バッファ制御部３３は、「完全フル」信号を受け取っているため、テンポラリバッファ３６にバッファリングされた第１パスの描画プリミティブデータがＤＤＡ３４にこれ以上供給されないように制御し、ＤＤＡ３４を待ち状態で停止させる（ＳＥ１２）。
【００７９】
図１０は、バッファ制御部３３によるステップＳＥ１０およびＳＥ１２の例外動作を説明する図である。切替制御部４０は、「ほとんどフル」信号および「完全フル」信号を受け取っているが、「パスチェンジ」信号は受け取っていない。切替制御部４０は、第１スイッチ４４をオンに切り替え、セットアップ処理部３２からの第１パスの描画プリミティブデータをテンポラリバッファ３６にバッファリングする。一方、切替制御部４０は、「完全フル」信号を受け取っているため、これ以上、ＤＤＡ３４に第１パスの描画プリミティブデータを供給することはできないから、第２スイッチ４６をオフに切り替えて、テンポラリバッファ３６からＦＩＦＯ順で取り出される第１パスの描画プリミティブデータがＤＤＡ３４に入力されないように制御する。
【００８０】
以上、例外的動作も含めて第１パスから第２パスへのパス切り替え処理を説明した。次に、図４に戻って、ステップＳ２２のパス切り替え処理の後の第２パス以降の処理手順を説明する。
【００８１】
第２パスの描画プリミティブのストリームがセットアップ処理部３２に投入され（Ｓ２４）、セットアップ処理部３２において第２パスの描画プリミティブのセットアップ処理が行われる（Ｓ２６）。なお、ステップＳ２２およびステップＳ２６は、ステップＳ２２のパス切り替え処理の最中から既に進行している。
【００８２】
ＤＤＡ３４は、セットアップ処理部３２から供給された第２パスの描画プリミティブが処理すべき最後の描画プリミティブであるかどうかを判定する（Ｓ２８）。この判定を行うのは、第１パスの処理がある描画プリミティブの途中のピクセル位置で中断したため、第２パスの処理についても同じ描画プリミティブの同一ピクセル位置で終了させる必要があるからである。最後の描画プリミティブである場合は（Ｓ２８のＹ）、ＤＤＡ３４は、第１パスで中断したピクセル位置と同一のピクセル位置まで、その描画プリミティブをＤＤＡ処理する（Ｓ３２）。最後の描画プリミティブでない場合は（Ｓ２８のＮ）、その描画プリミティブを最後までＤＤＡ処理する（Ｓ３０）。
【００８３】
シェーダ２０は、ＤＤＡ３４が生成したピクセルデータをもとに第２パスのシェーディング処理を行う（Ｓ３４）。すべてのパスについてまだ処理されていないなら（Ｓ３６のＮ）、ステップＳ２４に戻り、第３パス以降について、ステップＳ２４からステップＳ３４までの処理を同様に行う。
【００８４】
第２パスにおいては、第２パスの描画プリミティブは、第１パスで確定した描画プリミティブの数しかセットアップ処理部３２に投入されないため、第２パスから第３パスへのパス切り替えの際、第２パスの描画プリミティブは破棄されることがない。したがって、第２パスの描画プリミティブの供給と第３パスの描画プリミティブの供給は連続して行うことができ、第２パス以降は、セットアップ処理部３２から出力される描画プリミティブのＤＤＡ３４への供給は、テンポラリバッファ３６を用いない直接供給動作でも、テンポラリバッファ３６を用いた間接供給動作でもよい。
【００８５】
すべてのパスについて処理が終われば（Ｓ３６のＹ）、ＤＤＡ３４は、ＤＤＡ処理の中断位置を再開位置にコピーすることにより、ＤＤＡ処理の再開位置を更新する（Ｓ３８）。マルチパスレンダリングの処理対象の描画プリミティブがまだ残っているなら（Ｓ４０のＮ）、ステップＳ１２に戻り、第１パスについての処理、第２パスへの切り替え処理、第２パス以降の処理を同様に繰り返す。マルチパスレンダリングの処理対象のすべての描画プリミティブについて処理が終了すれば（Ｓ４０のＹ）、マルチパスレンダリングを終了する。
【００８６】
図１１は、マルチパスレンダリングのタイミングチャートを説明する図である。この例では、シェーディング処理が２つのパスに分割して行われる。描画プリミティブ生成、セットアップ処理、バッファ制御、ＤＤＡ入力、ＤＤＡ出力の順に第１パスと第２パスのデータの流れを横軸を時間として図示している。
【００８７】
プリミティブ生成部９０は、シェーダ２０から「ほとんどフル」信号を受け取るまでは第１パスの描画プリミティブの生成を続け、符号１０１で示した描画プリミティブ数分の描画プリミティブを生成する。生成された描画プリミティブは、プリミティブ入力部３０によりストリーム形式に変換されてセットアップ処理部３２に投入される。セットアップ処理部３２は、符号１０２で示すように、投入された第１パスの描画プリミティブのセットアップ処理を行う。
【００８８】
セットアップ後の第１パスの描画プリミティブは、符号１０３に示すようにバッファ制御部３３に供給される。シェーダ２０から「完全フル」信号を受け取ると、ＤＤＡ３４は、第１パスの描画プリミティブのＤＤＡ処理を中止し、バッファ制御部３３は、テンポラリバッファ３６に残留する第１パスの描画プリミティブを破棄する。バッファ制御部３３に供給された第１パスの描画プリミティブの内、符号２２０で示した部分は、テンポラリバッファ３６にバッファリングされたまま処理されずに破棄される描画プリミティブである。符号２００で示した部分は、「ほとんどフル」信号の後、テンポラリバッファ３６にバッファリングされ、テンポラリバッファ３６経由でＤＤＡ３４に入力される描画プリミティブであり、ＤＤＡ３４においてピクセル化されることにより、そのデータ量は符号２０２で示すように増えている。
【００８９】
プリミティブ生成部９０は、最初に投入した第１パスの描画プリミティブ数から破棄された描画プリミティブ数を引くことにより、破棄されずに処理された第１パスの描画プリミティブ数を確定する。プリミティブ生成部９０は、第２パスの描画プリミティブを生成する際は、符号１１０で示すように、第１パスで確定した描画プリミティブ数だけ描画プリミティブを生成すればよい。すなわち、符号１１０で示す第２パスの描画プリミティブ数は、符号１０３で示す第１パスの破棄されなかった描画プリミティブ数に等しい。
【００９０】
第２パスの描画プリミティブはセットアップ処理の後、符号１１２で示すようにバッファ制御部３３に供給される。シェーダ２０から「ほとんどフル」信号を受け取った後は、符号２１０で示す斜線部の描画プリミティブは、テンポラリバッファ３６にバッファリングされ、テンポラリバッファ３６経由でＤＤＡ３４に入力される。ＤＤＡ３４においてピクセル化されることにより、符号２１２で示すようにデータ量が増える。
【００９１】
「ほとんどフル」信号を受け取った後にテンポラリバッファ３６にバッファリングされた第２パスの描画プリミティブは、すべてＤＤＡ３４に供給されるため、破棄される描画プリミティブがなく、一切無駄は発生しない。
【００９２】
プリミティブ生成部９０において、シェーダ２０から２回目の「ほとんどフル」信号を受け取ると、第２パスまでの処理が終了したことがわかるため、符号１２０で示すように、第１パスに戻って、描画プリミティブの生成を再開する。ここで、符号２２２の部分は、１回目の第１パスの処理においてテンポラリバッファ３６から破棄された描画プリミティブ数に相当する。これは、破棄された描画プリミティブ分だけ開始位置を戻して、第１パスの処理を再開する必要があるからである。以下、２回目の第１パスのセットアップ処理、バッファ制御、ＤＤＡ処理は１回目の第２パスと同様である。また、２回目の第２パスについても同様に処理が進む。
【００９３】
ＤＤＡ入力とＤＤＡ出力のタイミングチャートを見ると、第１パスおよび第２パスの描画プリミティブのピクセルデータが隙間なく連続してＤＤＡ処理されている様子がわかる。この例では、３回目の第１パスおよび第２パスにおいて、すべての描画プリミティブの処理が完了し、マルチレンダリングを終えている。
【００９４】
以上述べたように、本実施の形態によれば、テンポラリバッファを利用して第１パスから第２パスへの切り替えを行うことで、パス切り替えに伴うオーバーヘッドをなくし、連続的にラスタライズ処理を進めることができ、マルチパスレンダリングの処理性能が向上する。
【００９５】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【００９６】
上記の説明では、プリミティブ生成部９０がラスタライザ１０の外部にあり、ラスタライザ１０内のプリミティブ入力部３０とは別構成であったが、ラスタライザ１０内のプリミティブ入力部３０にプリミティブ生成部９０の機能の全部または一部をもたせてもよい。たとえば、プリミティブ入力部３０が描画プリミティブのストリームデータの生成を中断および再開する機能をもち、シェーダ２０は、プリミティブ入力部３０に「ほとんどフル」信号を与えるようにし、プリミティブ入力部３０が「ほとんどフル」信号を受けてパス切り替えを行うようにしてもよい。
【００９７】
実施の形態では、シェーダ２０による直前パスの演算処理結果をフィードバックしてすぐ次のパスの演算処理に利用する構成を説明したが、たとえば第１パスの演算処理結果を第３パス以降での演算処理で利用するなど、２つ以上先のパスで中間結果を利用する場合は、フレームバッファ５０にフレーム位置に依存しないデータを保持できるバッファ領域を設け、そのバッファ領域に前パスの中間処理結果を格納し、後続のパスがバッファ領域から中間処理結果を読み込んで利用するようにしてもよい。その場合でも、本実施の形態のマルチパスレンダリングでは、パス切り替え時に間断なく次のパスの描画プリミティブのラスタライズ処理が行われるため、２つ以上前のパスの中間結果を利用した演算処理も同様に効率良く行うことができる。
【図面の簡単な説明】
【００９８】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１のラスタライザにおけるラスタライズ処理の制御機構を説明する図である。
【図３】図２のバッファ制御部の詳細な構成を説明する図である。
【図４】実施の形態に係るマルチパスレンダリングの手順を説明するフローチャートである。
【図５】図４のパス切り替え処理の詳細な手順を説明するフローチャートである。
【図６】図３のバッファ制御部による直接供給動作を説明する図である。
【図７】図３のバッファ制御部による間接供給動作を説明する図である。
【図８】図３のバッファ制御部による過渡的動作を説明する図である。
【図９】図３のバッファ制御部によるバッファクリア動作を説明する図である。
【図１０】図３のバッファ制御部による例外動作を説明する図である。
【図１１】実施の形態に係るマルチパスレンダリングのタイミングチャートを説明する図である。
【符号の説明】
【００９９】
１０  ラスタライザ、  ２０  シェーダ、  ３０  プリミティブ入力部、  ３２  セットアップ処理部、  ３３  バッファ制御部、  ３４  ＤＤＡ、  ３６  テンポラリバッファ、  ４０  切替制御部、  ４２  セレクタ、  ４４  第１スイッチ、  ４６  第２スイッチ、  ５０  フレームバッファ、  ７０  テクスチャユニット、  ９０  プリミティブ生成部、  １００  描画処理装置。
【図１】
2006178571.tif 000003
【図２】
2006178571.tif 000004
【図３】
2006178571.tif 000005
【図４】
2006178571.tif 000006
【図５】
2006178571.tif 000007
【図６】
2006178571.tif 000008
【図７】
2006178571.tif 000009
【図８】
2006178571.tif 000010
【図９】
2006178571.tif 000011
【図１０】
2006178571.tif 000012
【図１１】
2006178571.tif 000013