(57)【要約】【課題】  条件分岐を伴う描画処理プログラムをマルチパスレンダリングで効率良く実行することは難しい。【解決手段】  オブジェクト入力部１０、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８、分配部３０、およびシェーダ４０の各演算処理部は、パイプラインステージを構成する。シェーダ４０は、プログラムを条件分岐に応じて複数のパスに分割して実行する。シェーダ４０は、各ピクセルが分岐条件を満たすかどうかを判定したイネーブルフラグを生成する。フラグ生成部７０は、各ピクセルのイネーブルフラグを各パイプラインステージにおける処理粒度でまとめたバインドイネーブルフラグＦ１〜Ｆ４を生成し、各パイプラインステージにフィードバックする。各パイプラインステージの演算処理部は、分岐先のパスにおいて、バインドイネーブルフラグを参照することにより、演算処理対象とならないデータの投入を制限する。【選択図】  図１
2006331206.tif 000002
【特許請求の範囲】
【請求項１】
描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングを行う描画処理装置であって、
前記描画オブジェクトをそれぞれ異なる粒度の処理単位で演算処理する複数の演算処理部が処理粒度の細かくなる順に複数段のパイプラインステージを構成してなるパイプライン処理機構を備え、
各演算処理部は、当該演算処理部における処理粒度で各処理単位が次以降の演算パスで演算処理の対象となるか否かを示すフラグを取得し、次以降の演算パスにおいて、そのフラグを参照することにより演算処理の対象となる処理単位のみを演算処理し、演算処理後のデータを後段の演算処理部に供給することを特徴とする描画処理装置。
【請求項２】
最終段の前記演算処理部が、当該最終段の演算処理部における処理粒度において各処理単位が次以降の演算パスで演算処理の対象となるか否かを判定した判定フラグを生成し、その判定フラグを各段の演算処理部における処理粒度でまとめることにより、各段の演算処理部における処理粒度において各処理単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを各段の演算処理部に供給することを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記描画処理は、描画オブジェクトに対して実行される描画プログラムの条件分岐毎に複数の演算パスに分割されており、前記最終段の演算処理部は、当該最終段の演算処理部における処理粒度において各処理単位が条件分岐における条件を満たすか否かにより、当該最終段の演算処理部における処理粒度において各処理単位が次以降の分岐先の演算パスで演算処理の対象となるか否かを判定することを特徴とする請求項２に記載の描画処理装置。
【請求項４】
各演算処理部は、当該演算処理部における処理粒度で前段の演算処理部における処理単位の区切りを示すデリミタを生成して後段の演算処理部に送出し、
前記最終段の演算処理部は、各段の演算処理部により生成された前記デリミタが示す区切りで前記判定フラグをまとめることにより、各段の演算処理部に供給すべき前記まとめフラグを生成することを特徴とする請求項２または３に記載の描画処理装置。
【請求項５】
描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングを行う描画処理装置であって、
前記描画オブジェクトをラスタライズしてピクセルデータを生成するラスタライザと、
前記ラスタライザにより生成されたピクセルデータに対して演算処理を行うピクセル処理部とを備え、
前記ピクセル処理部は、各ピクセルが次以降の演算パスで演算処理の対象となるか否かを判定した判定フラグを生成し、その判定フラグを前記ラスタライザに供給するフラグ生成部を有することを特徴とする描画処理装置。
【請求項６】
前記ラスタライザは、前記判定フラグを参照することにより、次以降の演算パスにおいて、演算処理の対象となるピクセルのみを生成し、生成したピクセルデータを前記ピクセル処理部に供給することを特徴とする請求項５に記載の描画処理装置。
【請求項７】
前記描画処理は、前記描画オブジェクトに対して実行される描画プログラムの条件分岐毎に複数の演算パスに分割されており、前記フラグ生成部は、各ピクセルが条件分岐における条件を満たすか否かにより、各ピクセルが次以降の分岐先の演算パスで演算処理の対象となるか否かを判定することを特徴とする請求項５または６に記載の描画処理装置。
【請求項８】
前記ラスタライザは、前記描画オブジェクトをそれぞれ異なる粒度の処理単位で演算処理する複数の演算処理部が処理粒度が細かくなる順に複数段のパイプラインステージを構成してなるパイプライン処理機構を備え、
前記フラグ生成部は、ピクセル単位で判定された前記判定フラグを各段の演算処理部における処理粒度でまとめることにより、各段の演算処理部において各処理単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを各段の演算処理部に供給することを特徴とする請求項５から７のいずれかに記載の描画処理装置。
【請求項９】
各演算処理部は、当該演算処理部における処理粒度で前段の演算処理部における処理単位の区切りを示すデリミタを生成して後段の演算処理部に送出し、
前記フラグ生成部は、各段の演算処理部により生成された前記デリミタが示す区切りで前記判定フラグをまとめることにより、各段の演算処理部に供給すべき前記まとめフラグを生成することを特徴とする請求項８に記載の描画処理装置。
【請求項１０】
前記ラスタライザは、前記描画オブジェクトを構成する１つ以上の描画プリミティブに関するデータを生成するプリミティブ生成部を有し、
前記フラグ生成部は、ピクセル単位で判定された前記判定フラグを前記描画プリミティブの単位でまとめることにより、前記描画プリミティブ単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを前記プリミティブ生成部に供給することを特徴とする請求項５から７のいずれかに記載の描画処理装置。
【請求項１１】
前記ラスタライザは、前記描画プリミティブをデジタル微分解析処理によって走査ライン毎にピクセルデータに変換するデジタル微分解析部をさらに有し、
前記フラグ生成部は、ピクセル単位で判定された前記判定フラグを前記デジタル微分解析処理の単位でまとめることにより、前記デジタル微分解析処理単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを前記デジタル微分解析処理部に供給することを特徴とする請求項１０に記載の描画処理装置。
【請求項１２】
描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングによる描画処理方法であって、
前記描画オブジェクトをそれぞれ異なる粒度の処理単位で演算処理する複数のパイプラインステージが処理粒度の細かくなる順に連結されてなるパイプライン処理機構において、最終段のパイプラインステージが、各パイプラインステージにおける処理粒度において各処理単位が次以降の演算パスで演算処理の対象となるか否かを判定したフラグを生成し、そのフラグを各パイプラインステージにフィードバックし、各パイプラインステージは、そのフィードバックされたフラグを参照して、次以降の演算パスにおいて演算処理の対象となる処理単位のみを演算処理し、演算処理後のデータを後段のパイプラインステージに供給することを特徴とする描画処理方法。
【請求項１３】
描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングによる描画処理方法であって、
前記描画オブジェクトをラスタライズしてピクセルデータを生成するステップと、
生成されたピクセルデータに対して演算処理を行うステップと、
前記演算処理の過程で各ピクセルが次以降の演算パスで演算処理の対象となるか否かを判定するステップとを含み
前記ピクセルデータを生成するステップは、次以降の演算パスにおいて、前記判定するステップによる判定結果を参照することにより、演算処理の対象となるピクセルデータのみを生成することを特徴とする描画処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は描画データを演算処理する描画処理装置および描画処理方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスにおけるレンダリングエンジンは、複雑で高度なシェーディングアルゴリズムに対応するため、プログラマビリティをもった、よりプロセッサライクなものに変わりつつある。特にレンダリングエンジンの中核であるピクセルシェーダは、固定のグラフィックス機能を実装したハードウエアから、ＣＰＵと同じような命令セットを備えた演算ユニットを内蔵し、プログラミングによってフレキシブルに機能を追加していくことができるプロセッサへとその姿を変えつつある。
【０００３】
現在のプログラマブルなピクセルシェーダでは、描画処理対象の３次元オブジェクトに対してポリゴンセットアップを行った後、各ポリゴンをラスタライズしたピクセルデータを演算処理し、最終的なカラー値を算出する。より複雑なシェーディング処理を実現するために、マルチパスレンダリングと呼ばれる手法が用いられる。マルチパスレンダリングは、シェーディング処理を複数の演算パスに分割し、同一の描画プリミティブに対して複数回異なる演算処理を施す手法であり、よりきめ細かな描画処理を行って描画品質を上げることができる。
【０００４】
マルチパスレンダリングでは、１つ以上の描画プリミティブに対する描画処理を複数のパスに分割して処理するが、各パスでは、バッファの容量制限上、すべての描画プリミティブを一度に処理しきれない場合があり、一定のピクセル数の区間で区切り、その区間毎に各パスの演算処理を行う。たとえば、パス１からパスｎまである場合、パス１から順に演算処理を行い、パスｎまでの演算処理が終了すると、次の区間に移り、同様にパス１からパスｎまでの演算処理を行う。これを繰り返すことにより、すべての描画プリミティブのピクセルデータに対してマルチパスレンダリングが遂行される。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
プログラミングのフレキシビリティを高めるためには、プログラムに条件分岐やループなどの制御構造を多用することになる。マルチパスレンダリングにおいて条件分岐などの制御構造を導入すると、パスをまたいでプログラムを制御することが必要になり、そのために必要な条件データを処理ピクセルすべてから収集し、解析する必要があり、これには大きな処理コストがかかる。また、パスをまたいでプログラムの制御を行うと、パス切り替えによるオーバーヘッドが大きくなり、処理効率が犠牲になる。そのため、マルチパスレンダリングにおいては、プログラムの制御構造をパス内に限定したものとせざるを得ないのが現状であった。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、その目的は、複雑な描画処理プログラムをマルチパスレンダリングにより効率良く実行することのできる描画処理技術を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明のある態様の描画処理装置は、描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングを行う描画処理装置であって、前記描画オブジェクトをそれぞれ異なる粒度の処理単位で演算処理する複数の演算処理部が処理粒度の細かくなる順に複数段のパイプラインステージを構成してなるパイプライン処理機構を備える。各演算処理部は、当該演算処理部における処理粒度で各処理単位が次以降の演算パスで演算処理の対象となるか否かを示すフラグを取得し、次以降の演算パスにおいて、そのフラグを参照することにより演算処理の対象となる処理単位のみを演算処理し、演算処理後のデータを後段の演算処理部に供給する。
【０００８】
最終段の前記演算処理部が、当該最終段の演算処理部における処理粒度において各処理単位が次以降の演算パスで演算処理の対象となるか否かを判定した判定フラグを生成し、その判定フラグを各段の演算処理部における処理粒度でまとめることにより、各段の演算処理部における処理粒度において各処理単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを各段の演算処理部に供給してもよい。ここで、「最終段」とは、いま着目している複数段のパイプラインステージにおける最終段という意味であり、その着目している複数段のパイプラインステージの後ろに、さらに別の１以上のパイプラインステージが存在してもよい。
【０００９】
本発明の別の態様もまた、描画処理装置である。この装置は、描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングを行う描画処理装置であって、前記描画オブジェクトをラスタライズしてピクセルデータを生成するラスタライザと、前記ラスタライザにより生成されたピクセルデータに対して演算処理を行うピクセル処理部とを備える。前記ピクセル処理部は、各ピクセルが次以降の演算パスで演算処理の対象となるか否かを判定した判定フラグを生成し、その判定フラグを前記ラスタライザに供給するフラグ生成部を有する。このピクセル処理部は、特定のピクセル演算回路からなる固定ハードウエアであってもよく、ソフトウエアと協働して機能を発揮する汎用的なピクセルシェーダであってもよい。
【００１０】
前記ラスタライザは、前記描画オブジェクトをそれぞれ異なる粒度の処理単位で演算処理する複数の演算処理部が処理粒度が細かくなる順に複数段のパイプラインステージを構成してなるパイプライン処理機構を備えてもよい。前記フラグ生成部は、ピクセル単位で判定された前記判定フラグを各段の演算処理部における処理粒度でまとめることにより、各段の演算処理部において各処理単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを各段の演算処理部に供給してもよい。
【００１１】
前記ラスタライザは、前記描画オブジェクトを構成する１つ以上の描画プリミティブに関するデータを生成するプリミティブ生成部を有してもよい。前記フラグ生成部は、ピクセル単位で判定された前記判定フラグを前記描画プリミティブの単位でまとめることにより、前記描画プリミティブ単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを前記プリミティブ生成部に供給してもよい。
【００１２】
前記ラスタライザは、前記描画プリミティブをデジタル微分解析処理によって走査ライン毎にピクセルデータに変換するデジタル微分解析部をさらに有してもよい。前記フラグ生成部は、ピクセル単位で判定された前記判定フラグを前記デジタル微分解析処理の単位でまとめることにより、前記デジタル微分解析処理単位が次以降の演算パスで演算処理の対象となるか否かを示すまとめフラグを生成し、そのまとめフラグを前記デジタル微分解析処理部に供給してもよい。
【００１３】
本発明のさらに別の態様は、描画処理方法である。この方法は、描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングによる描画処理方法であって、前記描画オブジェクトをそれぞれ異なる粒度の処理単位で演算処理する複数のパイプラインステージが処理粒度の細かくなる順に連結されてなるパイプライン処理機構において、最終段のパイプラインステージが、各パイプラインステージにおける処理粒度において各処理単位が次以降の演算パスで演算処理の対象となるか否かを判定したフラグを生成し、そのフラグを各パイプラインステージにフィードバックし、各パイプラインステージは、そのフィードバックされたフラグを参照して、次以降の演算パスにおいて演算処理の対象となる処理単位のみを演算処理し、演算処理後のデータを後段のパイプラインステージに供給する。
【００１４】
本発明のさらに別の態様もまた、描画処理方法である。この方法は、描画オブジェクトに対する描画処理を複数の演算パスに分割して処理するマルチパスレンダリングによる描画処理方法であって、前記描画オブジェクトをラスタライズしてピクセルデータを生成するステップと、生成されたピクセルデータに対して演算処理を行うステップと、前記演算処理の過程で各ピクセルが次以降の演算パスで演算処理の対象となるか否かを判定するステップとを含み前記ピクセルデータを生成するステップは、次以降の演算パスにおいて、前記判定するステップによる判定結果を参照することにより、演算処理の対象となるピクセルデータのみを生成する。
【００１５】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１６】
本発明によれば、マルチパスレンダリングの処理効率を改善することができる。
【発明を実施するための最良の形態】
【００１７】
図１は、実施の形態に係る描画処理装置１００の構成図である。描画処理装置１００は、描画対象となるオブジェクトの３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理をマルチパスレンダリングの手法を用いて行う。マルチパスレンダリングは、描画オブジェクトに対して実行されるプログラムを複数のパスに分割して処理するものであり、描画オブジェクトがパス毎に繰り返し処理される。
【００１８】
オブジェクト入力部１０は、描画オブジェクト（以下、単に「オブジェクト」という）のポリゴンモデル情報をラスタライザ２０に与える。オブジェクト入力部１０は、ポリゴンモデル情報を生成する専用のプロセッサもしくは頂点シェーダであってもよい。
【００１９】
ラスタライザ２０は、プリミティブ生成部２２とＤＤＡ２４を含む。プリミティブ生成部２２は、オブジェクト入力部１０から受け取ったオブジェクトのポリゴン情報をもとに、オブジェクトを構成する１つ以上の描画プリミティブ（以下、単に「プリミティブ」という）の頂点座標とパラメータを含むストリームを生成する。プリミティブは、３次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位である。
【００２０】
また、プリミティブ生成部２２は、プリミティブのストリームをデジタル微分解析器（Digital Differential Analyzer；ＤＤＡ）により処理するための各種パラメータのセットアップを行う。具体的には、プリミティブを含む空間を区切るバウンディングボックスの設定や、エッジ係数などＤＤＡ処理の各種パラメータの設定を行う。
【００２１】
プリミティブ生成部２２は、プリミティブ生成の中断（サスペンド）と再開（レジューム）の機能をもつ。プリミティブ生成部２２は、シェーダ４０からの制御信号によって、マルチパスレンダリングのパスの切り替えを行い、次のパスの処理を実行する。すべてのパスの処理が一巡して、再び最初のパスに戻る際、プリミティブ生成部２２は、前回中断したプリミティブの位置からプリミティブの生成を再開する。
【００２２】
プリミティブ生成部２２は、生成したプリミティブのストリームデータをＤＤＡ２４に供給する。ＤＤＡ２４は、プリミティブ生成部２２からプリミティブの頂点データを取得し、プリミティブを描画スクリーンに対応したピクセルに変換する。
【００２３】
プリミティブは一例として三角形の形状であり、ＤＤＡ２４は、３次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、ラスタライン毎に量子化されたピクセルに変換する。ＤＤＡ２４により、プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセル情報が算出される。
【００２４】
ＤＤＡ２４は、ラスタ部２６とピクセル化部２８を含む。ラスタ部２６は、プリミティブを一例として水平方向に走査し、プリミティブを複数のラスタラインに分割する。ここでいうラスタラインとは、１ピクセルの並びではなく、所定のピクセル幅をもつものである。ラスタ部２６は、複数のラスタラインからなるストリームをピクセル化部２８に供給する。ピクセル化部２８は、ラスタ部２６から供給されたラスタラインを所定の大きさの矩形領域（以下、この矩形領域を「スタンプ」と呼ぶ）に分割し、スタンプ単位でラスタラインをピクセル化する。
【００２５】
一般に、ＤＤＡ２４に入力されるプリミティブの表面積が大きいほど、そのプリミティブをピクセル化した場合のピクセル数が増える。また、プリミティブが視点から近い位置にあって、プリミティブを高い詳細度レベルで描画する必要がある場合は、プリミティブから生成されるピクセル数は増える。プリミティブ生成部２２においては、頂点データでプリミティブが表されているため、データ量は少ないが、ＤＤＡ２４によりピクセル化処理した後は、ピクセル数が増大し、データ量が増える。
【００２６】
分配部３０は、ピクセル化部２８により生成されたスタンプをシェーダ４０に供給する。スタンプは、ＤＤＡ処理の単位であると同時に、シェーダ４０による描画処理の単位でもある。シェーダ４０は、複数のスタンプを並列にパイプライン処理するために複数のパイプラインユニットを備えている。分配部３０は複数のスタンプをいずれかのパイプラインユニットに分配する。
【００２７】
シェーダ４０は、ラスタライザ２０により算出されたピクセル情報をもとに、シェーディング処理を行ってピクセルのカラー値を求め、さらに、テクスチャマッピングを行う場合は、テクスチャのカラー値を合成して最終的なピクセルのカラー値を算出し、フレームバッファ５０にピクセルデータを書き込む。
【００２８】
シェーダ４０は、さらに、フレームバッファ５０に保持された描画データに対して、フォギング、アルファブレンディング等の処理を行い、最終的なピクセルのカラー値を求め、フレームバッファ５０のピクセルデータを更新する。
【００２９】
シェーダ４０は、描画処理プログラムをパイプライン処理で実行する。シェーダ４０は、パイプライン処理による演算結果をパイプラインの任意の段にフィードバックして入力として与える機構を備えている。このフィードバックループをマルチパスレンダリングにおいて活用し、先に処理されたパスにおける演算結果を次のパスに渡して重ね描きなどの処理を行うことができる。
【００３０】
フレームバッファ５０は、シェーダ４０により生成されたピクセルデータをスクリーン座標で格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。フレームバッファ５０に記憶されたピクセルデータは、表示装置に出力されて表示される。
【００３１】
描画処理装置１００のオブジェクト入力部１０、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８、分配部３０、およびシェーダ４０の各演算処理部は、この順に複数段のパイプラインステージを構成している。オブジェクト入力部１０、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８、分配部３０、およびシェーダ４０における処理単位は、それぞれオブジェクト、プリミティブ、ラスタライン、スタンプ、ピクセルであり、この順に処理粒度が細かくなっている。
【００３２】
このように、描画処理装置１００は、パイプラインステージが進むにつれて、オブジェクト、プリミティブ、ラスタライン、スタンプ、ピクセルの順に処理粒度を段階的に細かくしながら、演算処理を進めるパイプライン処理機構を備えており、オブジェクト入力部１０、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８、分配部３０、およびシェーダ４０の各演算処理部は、パイプライン処理機構の各パイプラインステージにおけるパイプ処理ユニットとして動作する。
【００３３】
シェーダ４０は、描画処理プログラムを複数のパスに分割して実行するが、パスの長さは可変であり、本実施の形態では、プログラム中の条件分岐によりプログラムのコード列を分割し、分岐先を新たなパスとすることでプログラムを複数のパスに分割する。
【００３４】
オブジェクトをラスタライズし、１オブジェクト内のすべてのピクセルに対して描画処理プログラムを実行することは、１つの命令で複数のデータを同時に処理するＳＩＭＤ（Single Instruction Multiple Data）演算と捉えることができる。ピクセルはシェーダ４０のパイプラインユニットに連続的に投入されるため、ＳＩＭＤ演算の並列性は時間軸方向に展開されている。プログラムが条件分岐した場合、分岐先でオブジェクトのすべてのピクセルが演算処理の対象となるとは限らない。むしろオブジェクトのすべてのピクセルが同一条件であることはまれである。
【００３５】
描画処理プログラムの条件分岐が複雑になり、分岐が増えると、分岐先のプログラムにオブジェクトのすべてのピクセルを投入することは無駄が多くなり、処理効率が悪化する。一般にマルチパスレンダリングが条件分岐により効率を低下するのはそのためである。そこで、本実施の形態では、条件分岐にしたがってプログラムをパスに分割しておき、分岐先のパスでは、分岐条件を満たさないピクセルはできる限りそのパスに投入されないように制御する。
【００３６】
図２は、描画処理装置１００により実行される描画処理プログラムの流れを説明する図である。描画処理プログラムは、第１条件分岐３０１〜第３条件分岐３０３を区切りとして、第１コード列３５１〜第７コード列３５７に分割される。描画処理装置１００は、条件分岐を区切りとして描画処理プログラムを複数のパスに分割するため、第１コード列３５１〜第７コード列３５７がそのまま第１パス〜第７パスに相当する。同図の矢印は、描画処理プログラムの実行順序を示す。
【００３７】
プログラムの第１コード列３５１が第１パスとして実行され、第１条件分岐３０１に到達し、分岐先の第２コード列３５２が第２パスとして実行される。プログラムは、第２条件分岐３０２に到達し、分岐先の第３コード列３５３が第３パスとして実行され、その後、第２条件分岐３０２による分岐元に戻り、第４コード列３５４が第４パスとして実行される。
【００３８】
さらにその後、プログラムは、第１条件分岐３０１による分岐元に戻り、第５コード列３５５が第５パスとして実行される。プログラムは、第３条件分岐３０３に到達し、分岐先の第６コード列３５６が第６パスとして実行され、その後、第３条件分岐３０３による分岐元に戻り、第７コード列３５７が第７パスとして実行され、全プログラムの実行が終了する。
【００３９】
第１条件分岐３０１は、一例として、プログラムにおける変数Ａが０であるか１であるかによって条件分岐するものであり、Ａ＝０の場合、第２コード列３５２に分岐し、Ａ＝１の場合、第５コード列３５５に分岐する。第２条件分岐３０２は、変数Ｂが０であるか１であるかによって条件分岐するものであり、Ｂ＝０の場合、第３コード列３５３に分岐し、Ｂ＝１の場合、第４コード列３５４に分岐する。第３条件分岐３０３は、変数Ｂが０であるか１であるかによって条件分岐するものであり、Ｂ＝０の場合、第６コード列３５６に分岐し、Ｂ＝１の場合、第７コード列３５７に分岐する。
【００４０】
第１パスにおいて第１コード列３５１が実行されたときに、オブジェクト内の各ピクセルに対して変数ＡおよびＢの値が調べられ、各分岐条件を満足するかどうかが判定される。
【００４１】
Ａ＝０、Ｂ＝０のピクセルは、分岐先の第３コード列３５３で処理され、Ａ＝０、Ｂ＝１のピクセルは、分岐先の第４コード列３５４で処理される。Ａ＝１、Ｂ＝０のピクセルは、分岐先の第６コード列３５６で処理され、Ａ＝１、Ｂ＝１のピクセルは、分岐先の第７コード列３５７で処理される。
【００４２】
したがって、描画処理装置１００は、第３パスではＡ＝０、Ｂ＝０の条件を満たすピクセルだけを投入し、第４パスでは、Ａ＝０、Ｂ＝１の条件を満たすピクセルだけを投入し、第６パスでは、Ａ＝１、Ｂ＝０の条件を満たすピクセルだけを投入し、第７パスでは、Ａ＝１、Ｂ＝１の条件を満たすピクセルだけを投入する。各分岐条件を満たすピクセル数が、全ピクセル数の１／４であるとすると、分岐先の第３、第４、第６、第７パスに投入されるデータ量は１／４に制限されることになるため、処理効率が上がる。
【００４３】
このパス単位でのピクセル投入制御を実現するために、パイプライン処理の最下段のシェーダ４０が、各ピクセルが分岐条件を満たすかどうかを判定したイネーブルフラグ（Enable Flag）を生成する。描画処理装置１００は、分岐先のパスにおいて、イネーブルフラグが１であるピクセルは投入され、イネーブルフラグが０であるピクセルは投入されないように制御する。ピクセルが分岐条件を満たすかどうかは最下段のシェーダ４０において判定されるが、分岐先のパスにおけるピクセル投入制御は、上位段のパイプラインステージにおいて、より粒度が大きい単位で行う方が効率的である。
【００４４】
そこで、シェーダ４０に設けられたフラグ生成部７０は、各ピクセルのイネーブルフラグを各パイプラインステージにおける処理粒度でまとめたバインドイネーブルフラグ（Bind Enable Flag）を生成する。バインドイネーブルフラグは、各パイプラインステージの処理単位に含まれる複数のピクセルのイネーブルフラグの論理和であり、各パイプラインステージの処理単位で見た場合に、その処理単位でデータを投入するかどうかを示すものである。その処理単位に含まれる複数のピクセルの内、一つでも分岐条件を満たすものがあれば、バインドイネーブルフラグは１であり、その処理単位に含まれるいずれのピクセルも分岐条件を満たさない場合、バインドイネーブルフラグは０である。
【００４５】
フラグ生成部７０は、バインドイネーブルフラグを各パイプラインステージの演算処理部にフィードバックする。各パイプラインステージの演算処理部は、分岐先のパスにおいて、バインドイネーブルフラグが１である処理単位は演算処理に投入するが、バインドイネーブルフラグが０である処理単位は演算処理に投入しない。これにより、分岐先のパスでは、各パイプラインステージにおける処理粒度でデータの投入が制御される。
【００４６】
フラグ生成部７０は、各パイプラインステージの処理粒度でイネーブルフラグをまとめるために、各パイプラインステージにおける処理単位の区切りを示すデリミタの情報を必要とする。このため、各パイプラインステージには、処理単位の区切りを示すデリミタを各パイプラインステージの処理粒度で生成する機構が設けられる。すなわち、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８、分配部３０の各パイプラインステージに、第１デリミタ送出部６１、第２デリミタ送出部６２、第３デリミタ送出部６３、第４デリミタ送出部６４が設けられ、第１デリミタ送出部６１〜第４デリミタ送出部６４により、オブジェクト、プリミティブ、ラスタライン、スタンプの各処理単位の区切りを示すデリミタがストリームデータに挿入される。
【００４７】
フラグ生成部７０は、オブジェクト、プリミティブ、ラスタライン、スタンプの各処理単位の区切りを示すデリミタを参照して、オブジェクト単位のバインドイネーブルフラグＦ１（以下、第１バインドイネーブルフラグＦ１という）、プリミティブ単位のバインドイネーブルフラグＦ２（第２バインドイネーブルフラグＦ２という）、ラスタライン単位のバインドイネーブルフラグＦ３（第３バインドイネーブルフラグＦ３という）、スタンプ単位のバインドイネーブルフラグＦ４（第４バインドイネーブルフラグＦ４という）をそれぞれオブジェクト入力部１０、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８にフィードバックする。
【００４８】
各パイプラインステージには、フラグ生成部７０からフィードバックされるバインドイネーブルフラグを分岐先のパスの実行までにバッファリングしておくためのバッファが設けられる。すなわち、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８に、プリミティブ用フラグバッファ８１、ラスタライン用フラグバッファ８２、スタンプ用フラグバッファ８３が設けられる。オブジェクト入力部１０にもフラグ生成部７０から第１バインドイネーブルフラグＦ１がフィードバックされるが、第１バインドイネーブルフラグＦ１はオブジェクト単位で次のパスにデータを投入するかどうかを決めるものであり、バッファリングの必要はないため、オブジェクト入力部１０にはフラグバッファは設けられていない。
【００４９】
オブジェクト入力部１０、プリミティブ生成部２２、ラスタ部２６、ピクセル化部２８はそれぞれ第１バインドイネーブルフラグＦ１〜第４バインドイネーブルフラグＦ４を参照してオブジェクト、プリミティブ、ラスタライン、スタンプの各処理単位を分岐先のパスに投入するかどうかを決める。
【００５０】
以下、まず第１デリミタ送出部６１〜第４デリミタ送出部６４によるデリミタの生成機構を説明し、その後、フラグ生成部７０によるバインドイネーブルフラグの生成機構を説明する。
【００５１】
図３は、第１デリミタ送出部６１〜第４デリミタ送出部６４の構成を説明する図であり、図４は、第１デリミタ送出部６１〜第４デリミタ送出部６４によりデリミタが生成される様子を一例として示す図である。以下、図３および図４を参照しながら、第１デリミタ送出部６１〜第４デリミタ送出部６４の構成と動作を説明する。
【００５２】
まず、第１デリミタ送出部６１の構成と動作を説明する。プリミティブ生成部２２は、前段のオブジェクト入力部１０により供給されたオブジェクトのデータを複数のプリミティブに分割し、複数のプリミティブで構成されるストリームを生成し、後段のラスタ部２６に供給している。プリミティブ生成部２２は、このストリームにおいてオブジェクト単位の区切りで見たときに最後尾に位置するプリミティブの処理タイミングで、第１デリミタ送出部６１に第１デリミタＤ１の出力を指示する。
【００５３】
第１デリミタ送出部６１のデリミタ生成部６５ａは、プリミティブ生成部２２から第１デリミタＤ１の出力指示信号を受け取ると、第１デリミタＤ１を生成する。
【００５４】
図４の例を参照すると、１つのオブジェクトが３つのプリミティブ１〜３から構成されており、第１デリミタＤ１の値は、最初の２つのプリミティブ１、２の処理タイミングでは０で、最後のプリミティブ３の処理タイミングで１となる。第１デリミタＤ１は、オブジェクトの区切りをプリミティブの粒度で示すものである。なお、図４では、説明の便宜上、デリミタを０または１の値をとるパルス信号のように描いているが、実際には、１の値をとるタイミングでデリミタがストリームデータ内に挿入されて送出される。
【００５５】
第１デリミタ送出部６１は、生成された第１デリミタＤ１をプリミティブのストリームデータの一部として送出し、後段の第２デリミタ送出部６２に伝達する。これにより、プリミティブ生成部２２からラスタ部２６に流れるプリミティブのストリームデータにオブジェクトの区切りを示す第１デリミタＤ１が挿入される。
【００５６】
次に、第２デリミタ送出部６２の構成と動作を説明する。ラスタ部２６は、前段のプリミティブ生成部２２により供給されたプリミティブを複数のラスタラインに分割し、複数のラスタラインで構成されるストリームを生成し、後段のピクセル化部２８に供給している。ラスタ部２６は、このストリームにおいてプリミティブ単位の区切りで見たときに最後尾に位置するラスタラインの処理タイミングで、第２デリミタ送出部６２に第２デリミタＤ２の出力を指示する。
【００５７】
第２デリミタ送出部６２のデリミタ生成部６５ｂは、ラスタ部２６から第２デリミタＤ２の出力指示信号を受け取ると、第２デリミタＤ２を生成する。
【００５８】
図４の例を参照すると、プリミティブ１は４つのラスタライン１〜４から構成され、プリミティブ２は３つのラスタライン１〜３から構成され、プリミティブ３は４つのラスタライン１〜４から構成されている。第２デリミタＤ２の値は、各プリミティブの最後のラスタラインの処理タイミングで、０から１に切り替わる。第２デリミタＤ２は、プリミティブの区切りをラスタラインの粒度で示すものである。
【００５９】
第２デリミタ送出部６２は、生成された第２デリミタＤ２をラスタラインのストリームデータの一部として送出し、後段の第３デリミタ送出部６３に伝達する。これにより、ラスタ部２６からピクセル化部２８に流れるラスタラインのストリームデータにプリミティブの区切りをラスタラインの粒度で示す第２デリミタＤ２が挿入される。
【００６０】
また、第２デリミタ送出部６２の論理積回路６６ｂは、前段の第１デリミタ送出部６１から入力された第１デリミタＤ１と、デリミタ生成部６５ｂにより生成された第２デリミタＤ２との論理積Ｄ１２を求める。
【００６１】
図４の例を参照すると、斜線で示すように、１つのオブジェクト内の最後のプリミティブ３で１となっていた第１デリミタＤ１が、その最後のプリミティブ３内の最後のラスタライン４で初めて１となる第１デリミタＤ１２に変換されている。このように、第１デリミタＤ１は、プリミティブの粒度からラスタラインの粒度に変換され、変換後の第１デリミタＤ１２は、オブジェクトの区切りをラスタラインの粒度で示すものになる。
【００６２】
第２デリミタ送出部６２は、変換された第１デリミタＤ１２をラスタラインのストリームデータの一部として送出し、後段の第３デリミタ送出部６３に伝達する。これにより、ラスタ部２６からピクセル化部２８に流れるラスタラインのストリームデータにオブジェクトの区切りをラスタラインの粒度で示す第１デリミタＤ１２がさらに挿入される。
【００６３】
次に、第３デリミタ送出部６３の構成と動作を説明する。ピクセル化部２８は、前段のラスタ部２６により供給されたラスタラインを複数のスタンプに分割し、複数のスタンプで構成されるストリームを生成し、後段の分配部３０に供給している。ピクセル化部２８は、このストリームにおいてラスタライン単位の区切りで見たときに最後尾に位置するスタンプの処理タイミングで、第３デリミタ送出部６３に第３デリミタＤ３の出力を指示する。
【００６４】
第３デリミタ送出部６３のデリミタ生成部６５ｃは、ピクセル化部２８から第３デリミタＤ３の出力指示信号を受け取ると、第３デリミタＤ３を生成する。
【００６５】
図４の例を参照すると、たとえば、プリミティブ１について見れば、ラスタライン１は２つのスタンプから構成され、ラスタライン２は６つのスタンプから構成され、ラスタライン３は４つのスタンプから構成され、ラスタライン４は２つのスタンプから構成されている。第３デリミタＤ３は、各ラスタラインの最後のスタンプの処理タイミングで、０から１に切り替わる。第３デリミタＤ３は、ラスタラインの区切りをスタンプの粒度で示すものである。
【００６６】
第３デリミタ送出部６３は、生成された第３デリミタＤ３をスタンプのストリームデータの一部として送出し、後段の第４デリミタ送出部６４に伝達する。これにより、ピクセル化部２８から分配部３０に流れるスタンプのストリームデータにラスタラインの区切りをスタンプの粒度で示す第３デリミタＤ３が挿入される。
【００６７】
また、第３デリミタ送出部６３の論理積回路６６ｃは、前段の第２デリミタ送出部６２から入力された第１デリミタＤ１２と、デリミタ生成部６５ｃにより生成された第３デリミタＤ３との論理積Ｄ１２３を求める。また、論理積回路６７ｃは、前段の第２デリミタ送出部６２から入力された第２デリミタＤ２と、デリミタ生成部６５ｃにより生成された第３デリミタＤ３との論理積Ｄ２３を求める。
【００６８】
図４の例を参照すると、斜線で示すように、第１デリミタＤ１２および第２デリミタＤ２は、ラスタラインの粒度からスタンプの粒度に変換され、変換後の第１デリミタＤ１２３、第２デリミタＤ２３は、それぞれオブジェクトの区切り、プリミティブの区切りをスタンプの粒度で示すものになる。
【００６９】
第３デリミタ送出部６３は、変換された第１デリミタＤ１２３および第２デリミタＤ２３をスタンプのストリームデータの一部として送出し、後段の第４デリミタ送出部６４に伝達する。これにより、ピクセル化部２８から分配部３０に流れるスタンプのストリームデータに、オブジェクトの区切りをスタンプの粒度で示す第１デリミタＤ１２３と、プリミティブの区切りをスタンプの粒度で示す第２デリミタＤ２３とがさらに挿入される。
【００７０】
次に、第４デリミタ送出部６４の構成と動作を説明する。分配部３０は、前段のピクセル化部２８により供給されたスタンプに含まれる複数のピクセルを取り出し、複数のピクセルで構成されるストリームを後段のシェーダ４０に供給している。分配部３０は、このストリームにおいてスタンプ単位の区切りで見たときに最後尾に位置するピクセルをシェーダ４０に送出するタイミングで、第４デリミタ送出部６４に第４デリミタＤ４の出力を指示する。
【００７１】
第４デリミタ送出部６４のデリミタ生成部６５ｄは、分配部３０から第４デリミタＤ４の出力指示信号を受け取ると、第４デリミタＤ４を生成する。
【００７２】
図４の例を参照すると、第４デリミタＤ４は、同図において最も狭い幅のパルスで示された、各スタンプの最後のピクセルの送出タイミングで、０から１に切り替わる。
【００７３】
第４デリミタ送出部６４は、生成された第４デリミタＤ４をピクセルのストリームデータの一部として送出し、後段のフラグ生成部７０に伝達する。これにより、分配部３０からシェーダ４０に流れるピクセルのストリームデータにスタンプの区切りをピクセルの粒度で示す第４デリミタＤ４が挿入される。
【００７４】
また、第４デリミタ送出部６４の論理積回路６６ｄは、前段の第３デリミタ送出部６３から入力された第１デリミタＤ１２３と、デリミタ生成部６５ｄにより生成された第４デリミタＤ４との論理積Ｄ１２３４を求める。また、論理積回路６７ｄは、前段の第３デリミタ送出部６３から入力された第２デリミタＤ２３と、デリミタ生成部６５ｄにより生成された第４デリミタＤ４との論理積Ｄ２３４を求める。さらに、論理積回路６８ｄは、前段の第３デリミタ送出部６３から入力された第３デリミタＤ３と、デリミタ生成部６５ｄにより生成された第４デリミタＤ４との論理積Ｄ３４を求める。
【００７５】
図４の例を参照すると、第１デリミタＤ１２３、第２デリミタＤ２３、および第３デリミタＤ３は、スタンプの粒度からピクセルの粒度に変換され、変換後の第１デリミタＤ１２３４、第２デリミタＤ２３４、および第３デリミタＤ３４は、それぞれオブジェクトの区切り、プリミティブの区切り、ラスタラインの区切りをピクセルの粒度で示すものとなる。
【００７６】
第４デリミタ送出部６４は、変換された第１デリミタＤ１２３４、第２デリミタＤ２３４、および第３デリミタＤ３４をピクセルのストリームデータの一部として送出し、後段のフラグ生成部７０に伝達する。これにより、分配部３０からシェーダ４０に流れるピクセルのストリームデータに、オブジェクトの区切りをピクセルの粒度で示す第１デリミタＤ１２３４と、プリミティブの区切りをピクセルの粒度で示す第２デリミタＤ２３４と、ラスタラインの区切りをピクセルの粒度で示す第３デリミタＤ３４とがさらに挿入される。
【００７７】
なお、図１では、説明上、第１デリミタ送出部６１から、第２デリミタ送出部６２、第４デリミタ送出部６４、第４デリミタ送出部６４を経て、フラグ生成部７０までを流れるデリミタの経路と、オブジェクト入力部１０から、ラスタライザ２０の各構成、分配部３０を経てシェーダ４０までのパイプラインを流れる描画処理データの経路とを区別して図示したが、実際にはデリミタは描画処理データとともにパイプラインを流れる。
【００７８】
図５は、フラグ生成部７０の構成を説明する図である。フラグ生成部７０は、第４デリミタ送出部６４から第１デリミタＤ１２３４、第２デリミタＤ２３４、第３デリミタＤ３４、および第４デリミタＤ４の入力を受け、シェーダ４０から各ピクセルのイネーブルフラグの入力を受ける。フラグ生成部７０は、４つのレジスタＲ１〜Ｒ４（符号７１〜７４）と４つの論理和回路７５〜７８を有する。
【００７９】
第１デリミタＤ１２３４、第２デリミタＤ２３４、第３デリミタＤ３４、第４デリミタＤ４は、それぞれストリームデータにおいてオブジェクト、プリミティブ、ラスタライン、スタンプの各処理単位の区切りをピクセルの粒度で示すものであり、フラグ生成部７０は、これらのデリミタを参照して、複数のピクセルのイネーブルフラグの列をオブジェクト、プリミティブ、ラスタライン、スタンプの各処理単位の区切りでまとめた第１バインドイネーブルフラグＦ１〜第４バインドイネーブルフラグＦ４を生成する。
【００８０】
第１レジスタＲ１は第１バインドイネーブルフラグＦ１の値を保持する。第１レジスタＲ１に保持された値は、第１論理和回路７５にフィードバックされて入力される。第１論理和回路７５は、フィードバック入力された第１レジスタＲ１の値と、シェーダ４０から入力される各ピクセルのイネーブルフラグとの論理和を計算し、その結果を第１レジスタＲ１に書き込む。第１レジスタＲ１に入力される第１デリミタＤ１２３４の値が１になったとき、第１レジスタＲ１に保持された第１バインドイネーブルフラグＦ１の値が出力され、第１レジスタＲ１の値は０にリセットされる。
【００８１】
第１論理和回路７５の働きにより、シェーダ４０からピクセルのイネーブルフラグとして１回でも値１が入力され、第１レジスタＲ１に値１が書き込まれると、第１レジスタＲ１の値は、第１デリミタＤ１２３４によってリセットされるまでは１に保持される。したがって、第１レジスタＲ１に記憶される第１バインドイネーブルフラグＦ１は、ピクセル単位のイネーブルフラグのビット列を第１デリミタＤ１２３４によって区切って論理和を計算したものとなる。
【００８２】
言い換えれば、オブジェクト内でいずれかのピクセルが分岐条件を満たした場合、第１バインドイネーブルフラグＦ１は１になり、オブジェクト内のいずれのピクセルも分岐条件を満たさない場合、第１バインドイネーブルフラグＦ１は０になる。
【００８３】
第２レジスタＲ２と第２論理和回路７６により、第２バインドイネーブルフラグＦ２が生成される機構も同様であり、第２レジスタＲ２に記憶される第２バインドイネーブルフラグＦ２は、ピクセル単位のイネーブルフラグの列を第２デリミタＤ２３４によって区切って論理和を計算したものとなる。すなわち、プリミティブ内でいずれかのピクセルが分岐条件を満たした場合、第２バインドイネーブルフラグＦ２は１になり、プリミティブ内のいずれのピクセルも分岐条件を満たさない場合、第２バインドイネーブルフラグＦ２は０になる。
【００８４】
同様に、第３レジスタＲ３に記憶される第３バインドイネーブルフラグＦ３は、ピクセル単位のイネーブルフラグの列を第３デリミタＤ３４によって区切って論理和を計算したものであり、ラスタライン内でいずれかのピクセルが分岐条件を満たした場合、第３バインドイネーブルフラグＦ３は１になり、ラスタライン内のいずれのピクセルも分岐条件を満たさない場合、第３バインドイネーブルフラグＦ３は０になる。
【００８５】
また、第４レジスタＲ４に記憶される第４バインドイネーブルフラグＦ４は、ピクセル単位のイネーブルフラグの列を第４デリミタＤ４によって区切って論理和を計算したものであり、スタンプ内でいずれかのピクセルが分岐条件を満たした場合、第４バインドイネーブルフラグＦ４は１になり、スタンプ内のいずれのピクセルも分岐条件を満たさない場合、第４バインドイネーブルフラグＦ４は０になる。
【００８６】
フラグ生成部７０は、第１デリミタＤ１２３４が１になったとき、第１レジスタＲ１から出力される第１バインドイネーブルフラグＦ１をオブジェクト入力部１０にフィードバック入力する。オブジェクト入力部１０は、分岐先のパスにおいて、第１バインドイネーブルフラグＦ１が１であればオブジェクトを投入するが、第１バインドイネーブルフラグＦ１が０であればオブジェクトを投入しない。これにより、オブジェクト単位でデータの投入を制御することができ、オブジェクト内のいずれのピクセルも分岐先のパスで処理対象とならない場合は、そのオブジェクトはラスタライズされることがない。
【００８７】
また、フラグ生成部７０は、第２デリミタＤ２３４が１になったとき、第２レジスタＲ２から出力される第２バインドイネーブルフラグＦ２をプリミティブ生成部２２に設けられたプリミティブ用フラグバッファ８１にフィードバック入力する。プリミティブ用フラグバッファ８１はプリミティブ毎に第２バインドイネーブルフラグＦ２を保持する。
【００８８】
プリミティブ生成部２２は、プリミティブ用フラグバッファ８１に格納された第２バインドイネーブルフラグＦ２をプリミティブ毎に参照し、分岐先のパスにおいて、第２バインドイネーブルフラグＦ２が０であるプリミティブはスキップし、第２バインドイネーブルフラグＦ２が１であるプリミティブのみを処理する。これにより、プリミティブ単位でデータの投入を制御することができ、プリミティブ内のいずれのピクセルも分岐先のパスで処理対象とならない場合は、そのプリミティブはラスタライズされることがない。
【００８９】
また、フラグ生成部７０は、第３デリミタＤ３４が１になったとき、第３レジスタＲ３から出力される第３バインドイネーブルフラグＦ３をラスタ部２６に設けられたラスタライン用フラグバッファ８２にフィードバック入力する。ラスタライン用フラグバッファ８２はラスタライン毎に第３バインドイネーブルフラグＦ３の値を記憶する。
【００９０】
ラスタ部２６は、ラスタライン用フラグバッファ８２に格納された第３バインドイネーブルフラグＦ３をラスタライン毎に参照し、分岐先のパスにおいて、第３バインドイネーブルフラグＦ３が０であるラスタラインはスキップし、第３バインドイネーブルフラグＦ３が１であるラスタラインのみを処理する。これにより、ラスタライン単位でデータの投入を制御することができ、ラスタライン内のいずれのピクセルも分岐先のパスで処理対象とならない場合は、そのラスタラインはラスタライズされることがない。
【００９１】
また、フラグ生成部７０は、第４デリミタＤ４が１になったとき、第４レジスタＲ４から出力される第４バインドイネーブルフラグＦ４をピクセル化部２８に設けられたスタンプ用フラグバッファ８３にフィードバック入力する。スタンプ用フラグバッファ８３は、ラスタライン毎に第４バインドイネーブルフラグＦ４の値を記憶する。
【００９２】
ピクセル化部２８は、スタンプ用フラグバッファ８３に格納された第４バインドイネーブルフラグＦ４をスタンプ毎に参照し、分岐先のパスにおいて、第４バインドイネーブルフラグＦ４が０であるスタンプはスキップし、第４バインドイネーブルフラグＦ４が１であるスタンプのみを処理する。これにより、スタンプ単位でデータの投入を制御することができ、スタンプ内のいずれのピクセルも分岐先のパスで処理対象とならない場合は、そのスタンプはラスタライズされることがない。
【００９３】
図６は、フラグ生成部７０により生成される第１バインドイネーブルフラグＦ１〜第４バインドイネーブルフラグＦ４を説明する図である。第４バインドイネーブルフラグＦ４は、スタンプを構成するいずれかのピクセルのイネーブルフラグが１である場合に１となる。同図においてイネーブルフラグが０であるピクセルを白丸で示し、イネーブルフラグが１であるピクセルは斜線を付した丸で示している。各スタンプについての第４バインドイネーブルフラグＦ４の値を示すビット列が、スタンプ用フラグバッファ８３にバッファされる。
【００９４】
第３バインドイネーブルフラグＦ３は、第４バインドイネーブルフラグＦ４をラスタライン単位でまとめたものである。ラスタライン内のスタンプについて１つでも第４バインドイネーブルフラグＦ４が１であるものがあれば、そのラスタラインの第３バインドイネーブルフラグＦ３は１であり、ラスタライン内のいずれのスタンプの第４バインドイネーブルフラグＦ４も０であれば、そのラスタラインの第３バインドイネーブルフラグＦ３は０である。各ラスタラインについての第３バインドイネーブルフラグＦ３の値を示すビット列がラスタライン用フラグバッファ８２にバッファされる。
【００９５】
第２バインドイネーブルフラグＦ２は、第３バインドイネーブルフラグＦ３をプリミティブ単位でまとめたものである。プリミティブ内のラスタラインについて１つでも第３バインドイネーブルフラグＦ３が１であるものがあれば、そのプリミティブの第２バインドイネーブルフラグＦ２は１であり、プリミティブ内のいずれのラスタラインの第３バインドイネーブルフラグＦ３も０であれば、そのプリミティブの第２バインドイネーブルフラグＦ２は０である。各プリミティブについての第２バインドイネーブルフラグＦ２の値を示すビット列がプリミティブ用フラグバッファ８１にバッファされる。
【００９６】
第１バインドイネーブルフラグＦ１は、第２バインドイネーブルフラグＦ２をオブジェクト単位でまとめたものである。オブジェクト内のプリミティブについて１つでも第２バインドイネーブルフラグＦ２が１であるものがあれば、そのオブジェクトの第１バインドイネーブルフラグＦ１は１であり、オブジェクト内のいずれのプリミティブの第２バインドイネーブルフラグＦ２も０であれば、そのオブジェクトの第１バインドイネーブルフラグＦ１は０である。
【００９７】
図７は、フラグ生成部７０によるバインドイネーブルフラグの生成手順を示すフローチャートである。
【００９８】
フラグ生成部７０の第１レジスタＲ１〜第４レジスタＲ４の値をゼロに初期設定する（Ｓ１０）。
【００９９】
シェーダ４０にピクセルが順次投入される。このとき第１デリミタＤ１２３４、第２デリミタＤ２３４、第３デリミタＤ３４、および第４デリミタＤ４のいずれかが当該ピクセルの後に挿入されていれば、そのデリミタも合わせて入力される（Ｓ１２）。
【０１００】
プリミティブはスタンプ単位でラスタライズされる。プリミティブの境界線上に位置するスタンプ内には、プリミティブの内側に属する有効なピクセルと、プリミティブの外側に属する無効なピクセルがある。シェーダ４０は、投入されたピクセルが有効かどうかを調べる（Ｓ１４）。ピクセルが有効かどうかはスタンプ単位でラスタライズされたときに判定されており、有効／無効を区別するためのフラグがピクセル毎に設けられている。シェーダ４０はそのフラグを参照して、有効なピクセルであれば（Ｓ１４のＹ）、ステップＳ１６に処理を進め、無効なピクセルであれば（Ｓ１４のＮ）、ステップＳ２０に処理を進める。
【０１０１】
シェーダ４０は、投入されたピクセルが分岐条件を満たすかどうかを調べる（Ｓ１６）。シェーダ４０は、ピクセルが分岐条件を満たす場合（Ｓ１６のＹ）、イネーブルフラグを１に設定し、そのピクセルのイネーブルフラグをフラグ生成部７０に与える。フラグ生成部７０は、イネーブルフラグが１であるため、第１レジスタＲ１〜第４レジスタＲ４の値を１に設定する（Ｓ１８）。
【０１０２】
シェーダ４０は、ピクセルが分岐条件を満たさない場合（Ｓ１６のＮ）、イネーブルフラグを０に設定し、そのピクセルのイネーブルフラグをフラグ生成部７０に与える。フラグ生成部７０は、イネーブルフラグが０であるため、第１レジスタＲ１〜第４レジスタＲ４の値を１に設定することなく、ステップＳ２０に処理を進める。
【０１０３】
フラグ生成部７０は、第１デリミタＤ１２３４、第２デリミタＤ２３４、第３デリミタＤ３４、および第４デリミタＤ４のいずれかの入力があった場合（Ｓ２０のＹ）、第１レジスタＲ１〜第４レジスタＲ４の内、入力のあったデリミタに対応するレジスタに保持されたバインドイネーブルフラグを該当するパイプラインステージに送出する（Ｓ２２）。フラグ生成部７０は、バインドイネーブルフラグが送出されたレジスタの値を０にリセットする（Ｓ２４）。
【０１０４】
現在処理中のパスが終了すると（Ｓ２６のＹ）、一連の処理は終了する。現在処理中のパスが終了していなければ（Ｓ２６のＮ）、ステップＳ１２に戻り、次のピクセルの処理を行う。
【０１０５】
図８および図９を参照して、描画処理装置１００により、分岐先のパスでデータの投入が制御される様子を説明する。
【０１０６】
図８（ａ）〜（ｄ）は、ラスタライザ２０によりプリミティブがラスタライズされ、シェーダ４０によりピクセル毎に分岐条件が判定される様子を説明する図である。
【０１０７】
図８（ａ）は、ラスタライザ２０においてプリミティブ生成部２２からＤＤＡ２４に供給されるプリミティブ２００を示す。ＤＤＡ２４においてラスタ部２６は、図８（ｂ）に示すように、プリミティブ２００を水平方向の第１ラスタライン２１１〜第４ラスタライン２１４に分割する。ピクセル化部２８は、図８（ｃ）に示すように、各ラスタライン２１１〜２１４をスタンプに分割し、各スタンプをピクセル化する。ここでは、スタンプの縦横の幅は４ピクセルである。ピクセル化部２８は、各スタンプを１６個のピクセルに変換する。
【０１０８】
シェーダ４０は、各ピクセルが分岐条件を満たすかどうかを判定する。図８（ｄ）は、シェーダ４０による分岐条件の判定結果を示すものであり、斜線を付したピクセルが分岐条件を見たし、分岐先のパスで演算処理の対象となる。
【０１０９】
図８（ｄ）において、第３ラスタライン２１３については、いずれのスタンプにも分岐条件を満たすピクセルがないため、分岐先のパスでは第３ラスタライン２１３は投入する必要がない。第３ラスタライン２１３に対する第３バインドイネーブルフラグＦ３は０に設定され、第３ラスタライン２１３は分岐先のパスでディスエーブルされる。
【０１１０】
第２ラスタライン２１２および第４ラスタライン２１４においては、分岐条件を満たすピクセルが少なくとも１つ含まれるスタンプと、分岐条件を満たすピクセルが全く含まれないスタンプとがある。分岐条件を満たすピクセルが全く含まれないスタンプについては、分岐先のパスで投入する必要がなく、第４バインドイネーブルフラグＦ４が０に設定され、分岐先のパスでディスエーブルされる。
【０１１１】
図９（ａ）〜（ｃ）は、ラスタライザ２０による分岐先のパスにおける処理を説明する図である。
【０１１２】
図９（ａ）は、図８（ａ）と同じプリミティブ２００であり、分岐先のパスにおいてプリミティブ生成部２２からＤＤＡ２４に供給される。ＤＤＡ２４においてラスタ部２６は、第３バインドイネーブルフラグＦ３を参照して、図９（ｂ）に示すように、プリミティブ２００を第１ラスタライン２１１、第２ラスタライン２１２、および第４ラスタライン２１４に分割する。第３ラスタライン２１３は、第３バインドイネーブルフラグＦ３によりディスエーブルされており、生成されない。
【０１１３】
ピクセル化部２８は、第４バインドイネーブルフラグＦ４を参照して、図９（ｃ）に示すように、第１ラスタライン２１１、第２ラスタライン２１２、および第４ラスタライン２１４をスタンプに分割し、各スタンプをピクセル化する。
【０１１４】
第１ラスタライン２１１を構成する２つのスタンプ２２１、２２２はいずれもピクセル化される。第２ラスタライン２１２を構成する４つのスタンプ２２３〜２２６の内、第４バインドイネーブルフラグＦ４によりディスエーブルされた２つのスタンプ２２３、２２５は生成されず、第４バインドイネーブルフラグＦ４によりイネーブルされた残り２つのスタンプ２２４、２２６だけが生成される。第４ラスタライン２１４を構成する３つのスタンプ２２７〜２２９の内、第４バインドイネーブルフラグＦ４によりディスエーブルされた２つのスタンプ２２７、２２９は生成されず、第４バインドイネーブルフラグＦ４によりイネーブルされた残り１つのスタンプ２２８だけが生成される。
【０１１５】
図１０および図１１を参照して、オブジェクトを構成する複数のプリミティブについて、分岐先のパスでデータの投入が制御される様子を説明する。
【０１１６】
あるオブジェクトが、図１０（ａ）、（ｅ）、（ｉ）で示す第１プリミティブ２００、第２プリミティブ２０１、第３プリミティブ２０２により構成されているとする。プリミティブ生成部２２は、第１プリミティブ２００〜第３プリミティブ２０２を順次ＤＤＡ２４にストリームデータとして供給する。
【０１１７】
図１０（ａ）〜（ｄ）は、第１プリミティブ２００がラスタライズされ、ピクセル毎に分岐条件が判定される様子を示す。ラスタライザ２０により、第１プリミティブ２００は、４つのラスタラインに分割され（図１０（ｂ））、各ラスタラインがスタンプに分割され、ピクセル化される（図１０（ｃ））。シェーダ４０により、ピクセル毎に分岐条件が判定される（図１０（ｄ））。同図では、簡単のため、分岐条件を満たすピクセルが１つでも含まれるスタンプを斜線を付して表し、分岐条件を満たすピクセルが含まれないスタンプには斜線を付していない。第１プリミティブ２００の第３ラスタラインについては、いずれのスタンプも分岐条件を満たすピクセルが含まれないため、第３バインドイネーブルフラグＦ３が０に設定される。第２ラスタライン、第４ラスタラインにおいては、分岐条件を満たすピクセルが含まれないスタンプについてのみ、第４バインドイネーブルフラグＦ４が０に設定される。
【０１１８】
同様に、図１０（ｅ）〜（ｈ）は、第２プリミティブ２０１がラスタライズされ、ピクセル毎に分岐条件が判定される様子を示す。ラスタライザ２０により、第２プリミティブ２０１は、４つのラスタラインに分割され（図１０（ｆ））、各ラスタラインがスタンプに分割され、ピクセル化される（図１０（ｇ））。シェーダ４０により、ピクセル毎に分岐条件が判定されるが、第２プリミティブ２０１については、どのスタンプにも分岐条件を満たすピクセルが含まれない（図１０（ｈ））。第２プリミティブ２０１については、第２バインドイネーブルフラグＦ２が０に設定される。
【０１１９】
また、図１０（ｉ）〜（ｌ）は、第３プリミティブ２０２がラスタライズされ、ピクセル毎に分岐条件が判定される様子を示す。第３プリミティブ２０２は、４つのラスタラインに分割され（図１０（ｊ））、各ラスタラインがスタンプに分割され、ピクセル化され（図１０（ｋ））、ピクセル毎に分岐条件が判定される（図１０（ｌ））。第３プリミティブ２０２のいずれのラスタラインについても第３バインドイネーブルフラグＦ３は１に設定され、各ラスタライン内では、分岐条件を満たすピクセルが含まれないスタンプについてのみ、第４バインドイネーブルフラグＦ４が０に設定される。
【０１２０】
図１１（ａ）〜（ｇ）は、ラスタライザ２０による分岐先のパスにおける処理を説明する図である。
【０１２１】
図１１（ａ）、（ｄ）、（ｅ）は、それぞれ図１０（ａ）、（ｅ）、（ｉ）と同じ第１プリミティブ２００、第２プリミティブ２０１、第３プリミティブ２０２を示すが、分岐先のパスにおいて、プリミティブ生成部２２は、第２プリミティブ２０１を処理に投入しないでスキップする。第２プリミティブ２０１は、第２バインドイネーブルフラグＦ２によりディスエーブルされているからである。
【０１２２】
第１プリミティブ２００については、図１１（ｂ）のように、第３バインドイネーブルフラグＦ３によりディスエーブルされた第２ラスタラインはスキップされ、第１、第２、第４ラスタラインのみが生成される。また、図１１（ｃ）のように、第４バインドイネーブルフラグＦ４によりディスエーブルされたスタンプはスキップされ、第４バインドイネーブルフラグＦ４によりイネーブルされたスタンプのみが生成される。
【０１２３】
同様に、第３プリミティブ２０２については、図１１（ｆ）のように、第１ラスタライン〜第４ラスタラインが生成され、図１１（ｃ）のように、各ラスタラインについて、第４バインドイネーブルフラグＦ４によりディスエーブルされたスタンプはスキップされ、第４バインドイネーブルフラグＦ４によりイネーブルされたスタンプのみが生成される。
【０１２４】
以上述べたように、本実施の形態によれば、マルチパスレンダリングにおいて、描画処理プログラムに条件分岐が存在する場合、分岐条件を満たすピクセルを判定して、分岐先のパスの実行の際、上位のパイプラインステージにおける処理粒度で演算処理対象とならないデータの投入を制限することができる。レンダリングのパイプラインは、パイプラインステージが下流に進むほどデータの粒度が細かくなり、データ量が増えるため、データの滞留が生じ、処理が重くなる。可能な限り上位のパイプラインステージにおいて、分岐条件を満たさない処理単位を投入しないように制御することで、処理効率の向上を図ることができる。特に、データ量が増大する前、すなわちピクセル化される前のプリミティブやオブジェクトの粒度でデータの投入をカットできれば、処理のオーバーヘッドを大幅に削減することができる。これにより、条件分岐の多い複雑な描画処理プログラムであっても、マルチパスレンダリングにより効率良く実行することができるようになる。
【０１２５】
本実施の形態によれば、パイプライン機構によりマルチパスレンダリングを行う際、あるパスの処理時に各ピクセルが次以降のパスで処理対象となるかどうかを判定し、その判定結果を異なる処理粒度でまとめて、異なるパイプラインステージにフィードバックし、次以降のパスの実行に反映させることで、細かい粒度のプログラムの実行制御が可能となる。これによりマルチパスレンダリングにおける制御性を高め、プログラミングの柔軟性を高めることができる。
【０１２６】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【０１２７】
上記の説明では、分岐先のパスにおいて、各パイプラインステージで処理単位を投入するかどうかを判断するための情報としてバインドイネーブルフラグが生成され、各パイプラインステージでバッファリングされた。あるパスにおけるピクセルの演算処理過程で、次以降の複数の分岐先パスについてピクセルが演算処理の対象となるかどうかが判定されることもあるため、バインドイネーブルフラグは、複数の分岐先のパスについて生成され、各パイプラインステージでバッファリングされてもよい。
【０１２８】
また、上記の説明では、描画処理プログラムを条件分岐に応じて複数のパスに分割したが、描画処理プログラムのパス分割は、必ずしも条件分岐に応じて行われなくてもよく、プログラムは他の基準によりパスに分割されてもよい。たとえば、ループを含むコード列をパス分割の単位としてもよい。また、シェーダは、ピクセルが次以降の各パスにおいて処理対象となるかを、各ピクセルが分岐条件を満たすかどうかで判定したが、この判定についても、必ずしも分岐条件によらなくてもよく、他の判定基準によりピクセルが次以降のパスで処理対象となるかどうかを判定してもよい。たとえば、プログラムのコード列において参照される範囲のピクセルであるかどうかによって、ピクセルが次以降のパスで処理対象となるかどうかを判定してもよい。
【図面の簡単な説明】
【０１２９】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１の描画処理装置により実行される描画処理プログラムの流れを説明する図である。
【図３】図１のデリミタ送出部の構成を説明する図である。
【図４】図３のデリミタ送出部によりデリミタが生成される様子を示す図である。
【図５】図１のフラグ生成部の構成を説明する図である。
【図６】図５のフラグ生成部により生成されるバインドイネーブルフラグを説明する図である。
【図７】図５のフラグ生成部によるバインドイネーブルフラグの生成手順を示すフローチャートである。
【図８】図１のラスタライザによりプリミティブがラスタライズされ、シェーダによりピクセル毎に分岐条件が判定される様子を説明する図である。
【図９】図１のラスタライザによる分岐先のパスにおける処理を説明する図である。
【図１０】図１のラスタライザによりオブジェクトがラスタライズされ、シェーダによりピクセル毎に分岐条件が判定される様子を説明する図である。
【図１１】図１のラスタライザによってオブジェクトが分岐先のパスにおいて処理される様子を説明する図である。
【符号の説明】
【０１３０】
１０  オブジェクト入力部、  ２０  ラスタライザ、  ２２  プリミティブ生成部、  ２４  ＤＤＡ、  ２６  ラスタ部、  ２８  ピクセル化部、  ３０  分配部、  ４０  シェーダ、  ５０  フレームバッファ、  ６１  第１デリミタ送出部、  ６２  第２デリミタ送出部、  ６３  第３デリミタ送出部、  ６４  第４デリミタ送出部、  ７０  フラグ生成部、  ８１  プリミティブ用フラグバッファ、  ８２  ラスタライン用フラグバッファ、  ８３  スタンプ用フラグバッファ、  １００  描画処理装置。
【図１】
2006331206.tif 000003
【図２】
2006331206.tif 000004
【図３】
2006331206.tif 000005
【図４】
2006331206.tif 000006
【図５】
2006331206.tif 000007
【図６】
2006331206.tif 000008
【図７】
2006331206.tif 000009
【図８】
2006331206.tif 000010
【図９】
2006331206.tif 000011
【図１０】
2006331206.tif 000012
【図１１】
2006331206.tif 000013