(57)【要約】【課題】ピクセル演算処理の排他制御を効率良く行うことは難しい。【解決手段】ＤＤＡ３４は、ラスタライズ処理されたピクセルの座標を排他制御部４０に通知し、そのピクセル位置に対応づけられる一意の識別番号を排他制御部４０から取得し、ピクセルデータにその識別番号を付加してシェーダ２０に与える。シェーダ２０内の複数のシェーダパイプ２２は、ピクセルの描画演算処理を並列に実行し、処理結果をフレームバッファ５０に書き込む。各シェーダパイプ２２は、ピクセルに対して排他制御の必要な演算命令を実行する際、そのピクセルに付加された識別情報を排他制御部４０に通知することにより当該ピクセルのロック要求を行う。シェーダパイプ２２は、ロック要求が許可されると、そのピクセルの演算処理を実行し、ロック要求が拒絶されると、そのピクセルの演算処理を中断したまま待ち状態にし、別のピクセルの演算処理を実行する。【選択図】図１
2007122537.tif 000002
【特許請求の範囲】
【請求項１】
描画プリミティブに関するデータを順次ラスタライズして複数のピクセルのデータを生成するラスタライザと、
前記複数のピクセルのデータを並列に演算処理する複数の演算処理部を有するシェーダと、
同一ピクセルに対する前記複数の演算処理部による演算処理を排他制御する排他制御部とを含み、
前記排他制御部は、前記ラスタライザによりピクセルのデータが生成される度に、演算処理の実行順序を示す実行順序カウンタの値を更新し、更新された前記実行順序カウンタの値を生成されたピクセルに割り当て、複数の前記演算処理部から演算処理対象のピクセルをロックする要求を受けた場合、その演算処理対象のピクセルに割り当てられた前記実行順序カウンタの値の順にロック要求を許可することにより、同一ピクセルに対する複数の前記演算処理部による演算処理の実行順序を制御することを特徴とする描画処理装置。
【請求項２】
前記排他制御部は、ピクセルのデータの生成の度に更新される前記実行順序カウンタの値と、実際にそのピクセルのデータが前記演算処理部により演算処理される度に更新される実行済みカウンタの値とをピクセル座標に対応づけて格納するキャッシュメモリを有することを特徴とする請求項１に記載の描画処理装置。
【請求項３】
前記排他制御部は、演算処理対象のピクセルに割り当てられた前記実行順序カウンタの値が、前記キャッシュメモリに保持された前記実行済みカウンタの値に一致する場合に、前記演算処理部からの前記ロック要求を許可することを特徴とする請求項２に記載の描画処理装置。
【請求項４】
複数の処理単位を並列に演算処理する複数の演算処理部と、
各処理単位に対して複数の前記演算処理部により実行が想定される演算処理の実行順序を示す実行順序カウンタの値をあらかじめ割り当てる割り当て部と、
いずれかの前記演算処理部から、実際に演算処理を行う際に、演算処理対象の前記処理単位をロックする要求を受け、その演算処理対象の前記処理単位に割り当てられた前記実行順序カウンタの値の順にロック要求を許可することにより、同一の処理単位に対する複数の前記演算処理部による演算処理の実行順序を制御する排他制御部とを含むことを特徴とする並列処理装置。
【請求項５】
処理単位毎に前記実行順序カウンタの値を記憶するキャッシュメモリをさらに含むことを特徴とする請求項４に記載の並列処理装置。
【請求項６】
前記キャッシュメモリは、処理単位に対して前記演算処理部により実行が想定される演算処理が特定される度に更新される前記実行順序カウンタの値と、実際にその処理単位が前記演算処理部により演算処理される度に更新される実行済みカウンタの値とを前記処理単位に対応づけて格納することを特徴とする請求項５に記載の並列処理装置。
【請求項７】
前記排他制御部は、前記演算処理部から演算処理対象の前記処理単位をロックする要求を受けた際、演算処理対象の前記処理単位に割り当てられた前記実行順序カウンタの値が、前記キャッシュメモリに保持された前記実行済みカウンタの値に一致する場合に、前記演算処理部からのロック要求を許可することを特徴とする請求項６に記載の並列処理装置。
【請求項８】
複数の処理単位を並列に演算処理する装置における排他制御方法であって、
各処理単位に対して実行が想定される演算処理の実行順序を示す実行順序カウンタの値をあらかじめ各処理単位に割り当て、前記処理単位に対して実際に演算処理が行われる際に、演算処理対象の前記処理単位をロックする要求を受け付け、その演算処理対象の前記処理単位に割り当てられた前記実行順序カウンタの値の順にロック要求を許可することにより、同一の処理単位に対する演算処理の実行順序を制御することを特徴とする排他制御方法。
【請求項９】
各処理単位が演算処理される度に更新される実行済みカウンタの値を処理単位毎にキャッシュメモリに保持し、演算処理対象の前記処理単位に割り当てられた前記実行順序カウンタの値が、前記キャッシュメモリに保持された前記実行済みカウンタの値に一致する場合に、前記ロック要求を許可し、前記処理単位に対する演算処理を実行状態にし、一致しない場合には、前記ロック要求を拒絶し、前記処理単位に対する演算処理を待ち状態にすることを特徴とする請求項８に記載の排他制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はデータを並列に演算処理する並列処理装置、描画データを演算処理する描画処理装置、およびそれらの装置における排他制御方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックスにおけるレンダリングエンジンは、複雑で高度なシェーディングアルゴリズムに対応するため、プログラマビリティをもった、よりプロセッサライクなものに変わりつつある。特にレンダリングエンジンの中核であるピクセルシェーダは、固定のグラフィックス機能を実装したハードウエアから、ＣＰＵと同じような命令セットを備えた演算ユニットを内蔵し、プログラミングによってフレキシブルに機能を追加していくことができるプロセッサへとその姿を変えつつある。
【０００３】
ピクセルシェーダによるピクセル演算処理は、汎用プロセッサによる演算処理に比べて、並列度が非常に高い。また、ピクセルシェーダは、パイプライン処理におけるレイテンシを隠蔽するためにマルチスレッド方式やインターリーブ方式の制御機構をもち、見かけ上の並列度も高くなっている。ピクセルシェーダの並列度が高くなると、同一ピクセルを同じタイミングで演算処理する可能性が高くなり、ピクセルのリードモディファイライト（ＲＭＷ）の最中に他の演算処理が混入し、期待通りの演算結果が得られなくなる恐れがある。同一ピクセルに対する複数の演算処理の整合性を確保するためには、ピクセルシェーダにおいて演算処理の排他制御が不可欠である。
【０００４】
従来は、ピクセル演算処理の排他制御を実現するために、ピクセルシェーダからＲＭＷ機能を分離し、ピクセルシェーダから切り離されたＲＭＷユニットがフレームバッファへの読み書きを排他制御することで対処していた。ピクセルシェーダは、フレームバッファにアクセスすることがないため、排他制御が不要となり、ＲＭＷユニットにおいてのみ排他制御を実現すればよいため、排他制御を容易に実装することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、ピクセルシェーダからＲＭＷ機能を分離させる従来の方法では、ピクセルシェーダがフレームバッファに対してＲＭＷ操作を実行することができないため、中間結果をフレームバッファに出力し、その中間結果を読み込んでさらに演算処理するといった繰り返し演算ができないなど、ピクセル演算のバリエーションが極めて限定される。ピクセルシェーダに複雑なシェーディングアルゴリズムを実行させたり、画像処理などの高度な演算処理を行わせるために、ピクセルシェーダにＲＭＷ機能を含め、描画処理全体をより一層、高機能化したいというニーズも高まっており、ピクセルシェーダからＲＭＷ機能を切り離して排他制御を行う方法では自ずと限界がある。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、その目的は、並列処理において排他制御を効率良く行うことのできる排他制御技術、およびその排他制御技術を利用した並列処理技術ならびに描画処理技術を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明のある態様の描画処理装置は、複数の描画プリミティブに関するデータを順次ラスタライズして複数のピクセルのデータを生成するラスタライザと、前記複数のピクセルのデータを並列に演算処理する複数の演算処理部を有するシェーダと、同一ピクセルに対する前記複数の演算処理部による演算処理を排他制御する排他制御部とを含む。前記排他制御部は、前記ラスタライザによりピクセルのデータが生成される度に、演算処理の実行順序を示す実行順序カウンタの値を更新し、更新された前記実行順序カウンタの値を生成されたピクセルに割り当て、複数の前記演算処理部から演算処理対象のピクセルをロックする要求を受けた場合、その演算処理対象のピクセルに割り当てられた前記実行順序カウンタの値の順にロック要求を許可することにより、同一ピクセルに対する複数の前記演算処理部による演算処理の実行順序を制御する。
【０００８】
本発明の別の態様は、並列処理装置である。この装置は、複数の処理単位を並列に演算処理する複数の演算処理部と、各処理単位に対して複数の前記演算処理部により実行が想定される演算処理の実行順序を示す実行順序カウンタの値をあらかじめ割り当てる割り当て部と、いずれかの前記演算処理部から、実際に演算処理を行う際に、演算処理対象の前記処理単位をロックする要求を受け、その演算処理対象の前記処理単位に割り当てられた前記実行順序カウンタの値の順にロック要求を許可することにより、同一の処理単位に対する複数の前記演算処理部による演算処理の実行順序を制御する排他制御部とを含む。
【０００９】
本発明のさらに別の態様は、排他制御方法である。この方法は、複数の処理単位を並列に演算処理する装置における排他制御方法であって、各処理単位に対して実行が想定される演算処理の実行順序を示す実行順序カウンタの値をあらかじめ各処理単位に割り当て、前記処理単位に対して実際に演算処理が行われる際に、演算処理対象の前記処理単位をロックする要求を受け付け、その演算処理対象の前記処理単位に割り当てられた前記実行順序カウンタの値の順にロック要求を許可することにより、同一の処理単位に対する演算処理の実行順序を制御する。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、並列処理において排他制御を効率良く行うことができる。
【発明を実施するための最良の形態】
【００１２】
図１は、実施の形態に係る描画処理装置１００の構成図である。描画処理装置１００は、３次元モデル情報にもとづいて２次元画面に表示するための描画データを生成するレンダリング処理を行う。
【００１３】
プリミティブ生成部９０は、描画対象となるプリミティブを生成してラスタライザ１０に与える。描画プリミティブは、３次元オブジェクトをポリゴンモデルで表した場合の点、線、三角形、四角形などの幾何学図形の描画単位であり、頂点単位で表されるデータである。本図では、プリミティブ生成部９０は、描画処理装置１００の一部を構成しているが、プリミティブ生成部９０は、ポリゴンモデル情報を生成する専用のプロセッサもしくは頂点シェーダであってもよく、描画処理装置１００の外部にあって、描画処理装置１００とネットワーク接続してもよい。
【００１４】
ラスタライザ１０は、プリミティブ生成部９０から描画プリミティブの頂点データを取得し、描画プリミティブをスクリーンに対応した描画ユニットに変換する。
【００１５】
ここで、「描画ユニット」とは、一般には、所定の大きさのピクセル領域であり、１つのピクセルであることも、複数のピクセルの集合であることもある。あるいは、描画ユニットは、１つのピクセルをさらに細かく分割したサブピクセルの１つ、もしくはそのようなサブピクセルの集合であってもよい。以下では、説明の簡単のため、描画ユニットが複数のピクセルもしくは複数のサブピクセルからなる場合でも、描画ユニット内部での個々のピクセルもしくはサブピクセルの処理を隠蔽して、描画ユニット全体で１つのピクセルであるとみなして、本実施の形態に特徴的な描画処理技術を説明する。したがって、以下では「描画ユニット」を単にピクセルと称することにする。
【００１６】
描画プリミティブは一例として三角形の形状であり、ラスタライザ１０は、３次元空間上の三角形を投影変換により描画平面上の三角形に変換するビュー変換を行い、さらに、描画平面上の三角形を描画平面の水平方向に沿ってスキャンしながら、１列毎に量子化されたピクセルに変換する。ラスタライザ１０により、描画プリミティブがピクセル展開され、各ピクセルについて、ＲＧＢ３原色で表されるカラー値、透明度を示すアルファ値、奥行きを示すＺ値、テクスチャ属性を参照するためのパラメータ座標であるＵＶ座標値などを含むピクセルデータが算出される。
【００１７】
ラスタライザ１０のより詳細な構成を説明する。プリミティブ入力部３０は、プリミティブ生成部９０から受け取った描画プリミティブの頂点座標とパラメータを含むストリームを生成し、セットアップ処理部３２に与える。
【００１８】
セットアップ処理部３２は、描画プリミティブのストリームをデジタル微分解析器（Digital Differential Analyzer；ＤＤＡ）により処理するための各種パラメータのセットアップを行う。具体的には、描画バウンディングボックスの設定や、エッジ係数などＤＤＡ処理の各種パラメータの設定を行う。セットアップ処理部３２は、セットアップ後の描画プリミティブデータをＤＤＡ３４に与える。
【００１９】
ＤＤＡ３４は、セットアップ処理部３２から直接与えられる描画プリミティブを、セットアップ処理部３２により設定された各種パラメータにもとづいてＤＤＡ処理して、ピクセルデータに変換する。
【００２０】
ＤＤＡ３４は、生成されたピクセルのスクリーン座標（ｘ，ｙ）を排他制御部４０に通知し、そのピクセル位置に対してＤＤＡ処理以降のパイプライン処理において一意性のある識別番号を排他制御部４０から取得する。この識別番号を「シンク（ｓｙｎｃ）ＩＤ」という。ＤＤＡ３４は、描画プリミティブのピクセルデータにこのシンクＩＤを付加してシェーダ２０に与える。
【００２１】
シェーダ２０は、非同期動作する複数のシェーダパイプ２２（以下、シェーダパイプ０〜ｎと呼ぶ）をもち、それぞれが担当するピクセルデータを処理することでピクセルの描画処理を並列にパイプライン処理で実行し、ピクセルデータの処理結果をフレームバッファ５０に対して読み書きする。
【００２２】
各シェーダパイプ２２がピクセルデータを演算処理してフレームバッファ５０に書き込むとき、他のシェーダパイプ２２がフレームバッファ５０に保持されたピクセルデータを読み書きしないように排他制御を行う必要がある。この排他制御のために、各シェーダパイプ２２は、ピクセルに対して排他制御の必要な演算命令を実行する際、そのピクセルに付加されたシンクＩＤを排他制御部４０に通知することにより当該ピクセルのロック要求を行う。また、各シェーダパイプ２２は、当該ピクセルに対する排他制御の必要な演算命令の実行が終わると、アンロック要求を排他制御部４０に発行する。
【００２３】
排他制御部４０は、シェーダ２０の各シェーダパイプ２２からピクセルのロック要求を受け付け、ロック要求を許可するかどうかを決定し、許可した場合、各シェーダパイプ２２に許可したことを示す情報を通知する。シェーダパイプ２２は、ロック要求が許可された場合、そのピクセルの演算処理を実行する。ロック要求が許可されなかった場合は、排他制御部４０から何も通知されないため、シェーダパイプ２２は、ロック要求が許可されるまでそのピクセルの演算処理を中断したまま待ち状態にしておき、別のピクセルの演算処理を実行する。
【００２４】
排他制御部４０は、ロック要求のあったピクセルがいずれのシェーダパイプ２２によってもロックされていなければ、ロック要求を許可し、ロック要求元のシェーダパイプ２２が排他的にそのピクセルを演算処理してフレームバッファ５０に対して読み書き可能に制御する。ロック要求のあったピクセルが他のシェーダパイプ２２によりロックされていれば、そのロックしたシェーダパイプ２２が当該ピクセルに対するロックを解放するまではロック要求を許可しない。排他制御部４０は、ＤＤＡ３４により生成された全ピクセル分のロック情報を効率よく扱うために、ロック情報をキャッシュメモリに保持する。
【００２５】
シェーダ２０は、上記の排他制御のもとで、ラスタライザ１０により算出されたピクセルデータをもとに、シェーディング処理を行ってピクセルのカラー値を求め、さらに、テクスチャマッピングを行う場合は、テクスチャユニット７０から得られるテクスチャのカラー値を合成して最終的なピクセルのカラー値を算出し、フレームバッファ５０にピクセルデータを書き込む。
【００２６】
テクスチャユニット７０は、シェーダ２０において処理されるピクセルにテクスチャデータをマッピングする処理を行う。ポリゴン面上のピクセルにマッピングされるテクスチャの位置を２次元パラメータ座標であるＵＶ座標系で表す。テクスチャユニット７０は、シェーダ２０からピクセルにマッピングされるテクスチャのＵＶ座標値を取得し、ＵＶ座標値を参照アドレスに変換した後、テクスチャから参照アドレスに対応するカラー値を取得して、シェーダ２０に供給する。
【００２７】
シェーダ２０は、さらに、フレームバッファ５０に保持された描画データに対して、フォギング、アルファブレンディング等の処理を行い、最終的なピクセルのカラー値を求め、フレームバッファ５０のピクセルデータを更新する。
【００２８】
フレームバッファ５０は、シェーダ２０により生成されたピクセルデータをスクリーン座標で格納するバッファであり、格納されたピクセルデータは、最終描画画像であることも、シェーディング処理過程にある中間画像であることもある。フレームバッファ５０に記憶されたピクセルデータは、表示装置に出力されて表示される。
【００２９】
図２は、排他制御部４０の構成図である。排他制御部４０は、ロックキュー４２、調停部４４、ロックキャッシュ４６、インクリメント部４７、およびディスパッチャ４８を含む。以下、図３〜５も合わせて参照しながら、これらの各機能の詳細な構造と動作を説明する。
【００３０】
ロックキュー４２は、シェーダパイプ２２からのピクセルに対するロック／アンロック要求をＦＩＦＯ（First-In First-Out）方式でキューイングするものであり、シェーダパイプ０〜ｎに対応してロックキュー０〜ｎが設けられる。キューイングされたロック／アンロック要求は順次、キューの先頭から取り出されて調停部４４に供給される。調停部４４により許可されたロック要求は、キューから消去されるが、調停部４４により拒絶されたロック要求は、ロックキュー４２の末尾に再入力される。一方、アンロック要求は調停部４４において必ず許可され、キューから消去される。
【００３１】
ここで、ロック／アンロック要求には、ロック／アンロック命令、ピクセル位置（ｘ，ｙ）、要求元のシェーダパイプ２２のＩＤ（以下、「パイプＩＤ」という）、およびシンクＩＤが含まれる。このパイプＩＤはシェーダパイプ２２の物理的な識別番号であってもよく、パイプ処理の論理的な単位を示す識別番号であってもよい。たとえば、シェーダパイプ２２がマルチスレッド動作をする機構を有する場合は、各スレッドを個別に識別する番号である。
【００３２】
ロックキュー４２の詳細な構成を図３に示す。ロックキュー４２は、アンロック要求をキューイングするアンロックＦＩＦＯ１１０と、ロック要求をキューイングするロックＦＩＦＯ１１２をもつ。シェーダパイプ２２からのアンロック要求はアンロックＦＩＦＯ１１０に入力され、シェーダパイプ２２からのロック要求はセレクタ１１４に入力される。このセレクタ１１４は、調停部４４によって拒絶されたロック要求の入力も受け取り、シェーダパイプ２２から入力される新規のロック要求と調停部４４から入力される拒絶されたロック要求を切り替えて、ロックＦＩＦＯ１１２のキューの末尾に入力する。
【００３３】
アンロックＦＩＦＯ１１０およびロックＦＩＦＯ１１２の出力側に設けられたセレクタ１１６は、アンロックＦＩＦＯ１１０およびロックＦＩＦＯ１１２のキューの先頭から取り出されるアンロック要求およびロック要求の入力を受け取り、ロック要求よりもアンロック要求を優先して調停部４４に供給する。アンロックＦＩＦＯ１１０の優先度を高めることにより、デッドロックを回避することができる。なお、アンロック要求については調停部４４において拒絶されることがないため、アンロックＦＩＦＯ１１０に再入力されることはない。
【００３４】
調停部４４は、各ロックキュー４２から供給されるロック／アンロック要求を優先度にしたがって調停した上でロックキャッシュ４６に与える。すべてのロックキュー４２にロック／アンロック要求が絶えずキューイングされるとは限らないため、調停部４４からロックキャッシュ４６への入力ポート数は、ロックキュー４２の本数よりも少なくてよい。
【００３５】
調停部４４の詳細な構成を図４に示す。調停部４４は、ユニークセレクタ１２０とマルチプレクサ１２２を有する。ユニークセレクタ１２０は、複数のロックキュー４２から同一ピクセル位置に対するロック要求の入力を同時に受けた場合に、優先度の高いロック要求を１つだけ選択してマルチプレクサ１２２に与え、それ以外のロック要求は拒絶してロックキュー４２に戻す。ここで、優先度はロックキュー４２単位で割り当てられ、ロック要求はランドロビン方式でスケジューリングされる。ロック要求がロックキュー４２から取り出され実行されると、そのロックキュー４２の優先度は相対的に低くなり、ロック要求が取り出されていないロックキュー４２の優先度が相対的に高くなるように制御される。
【００３６】
マルチプレクサ１２２は、ユニークセレクタ１２０から出力されるロック要求を時分割多重化してロックキャッシュ４６に与える。ロックキャッシュ４６がビジーである場合は、処理に空きが生じるまでロック要求の送出を遅延させる。ユニークセレクタ１２０およびマルチプレクサ１２２は、いずれも優先度付きのラウンドロビン方式によりロック要求をロックキャッシュ４６に与えることが望ましい。なお、アンロック要求は、ユニークセレクタ１２０およびマルチプレクサ１２２を通過させてもよく、ユニークセレクタ１２０およびマルチプレクサ１２２をバイパスして、ロックキャッシュ４６に直接供給するように構成してもよい。
【００３７】
ロックキャッシュ４６は、ピクセル座標（ｘ，ｙ）を論理的なアドレスとして、その論理アドレスに対応づけて当該ピクセルのロック情報をキャッシュする。
【００３８】
ロックキャッシュ４６に格納されるキャッシュデータの構造を図５に示す。各キャッシュラインのデータフィールドには、ピクセル位置に対応するアドレスに対応づけて、シンクスタート１３０とシンクエンド１３２の２つのカウンタからなるロック情報が格納されている。
【００３９】
シンクスタート１３０は、ＤＤＡ３４によりピクセルデータが生成される度にインクリメントされるカウンタであり、そのピクセルに対する演算処理の実行順序を示すシンクＩＤとして利用される。一方、シンクエンド１３２は、実際にそのピクセルに対して演算処理がなされる度にインクリメントされるカウンタであり、実行済みの演算処理の番号を示す。これら２つのカウンタの初期値はともに０である。
【００４０】
ロックキャッシュ４６は、ＤＤＡ３４からピクセルの座標値（ｘ，ｙ）の入力を受けると、そのピクセル位置に対応するロック情報がキャッシュされているかどうかを調べ、キャッシュミスの場合は、メモリ６０に格納されたロック情報をいったんキャッシュした上で、キャッシュされたシンクスタート１３０の値を取得する。ロックキャッシュ４６は、ピクセル座標（ｘ，ｙ）に対応するシンクスタート１３０の値をシンクＩＤとしてピクセル座標（ｘ，ｙ）とともにＤＤＡ３４に供給し、インクリメント部４７は、そのピクセル座標（ｘ，ｙ）に対応するシンクスタート１３０の値を１だけインクリメントする。
【００４１】
ロックキャッシュ４６は、調停部４４からロック要求が送られてきた場合、ロック要求に含まれるピクセル座標（ｘ，ｙ）をアドレスとしてキャッシュを検索し、ピクセル座標（ｘ，ｙ）に対応するシンクエンド１３２の値を取得する。
【００４２】
ロックキャッシュ４６は、ロック要求に含まれるシンクＩＤの値が、キャッシュされたシンクエンド１３２の値と異なる場合、そのロック要求を拒絶し、調停部４４からのロック要求をそのまま調停部４４に送り返す。調停部４４は、ロックキャッシュ４６により拒絶されたロック要求をロックキュー４２に送り返し、ロックキュー４２は、拒絶されたロック要求をロックＦＩＦＯ１１２の末尾に入れ直す。
【００４３】
ロックキャッシュ４６は、ロック要求に含まれるシンクＩＤの値が、キャッシュされたシンクエンド１３２の値と一致する場合、ロック要求に含まれるパイプＩＤをディスパッチャ４８に供給する。
【００４４】
また、ロックキャッシュ４６は、調停部４４からアンロック要求を受け取った場合、アンロック要求に含まれるピクセル座標（ｘ，ｙ）に対応するシンクエンド１３２の値を１だけインクリメントする。
【００４５】
ディスパッチャ４８は、ロックキャッシュ４６からパイプＩＤを受け取ると、パイプＩＤに対応するシェーダパイプ２２にそのパイプＩＤを返す。
【００４６】
図６は、シェーダパイプ２２の詳細な構成図である。各シェーダパイプ２２は、シェーダコア２４をもち、ＤＤＡ３４から供給されるピクセルデータをシェーダプログラムによってパイプライン処理し、フレームバッファ５０に出力する。シェーダコア２４は、テクスチャユニット７０にテクスチャ座標を指定し、テクスチャユニット７０からテクスチャデータを受け取り、ピクセルの演算処理に利用する。また、シェーダコア２４は、ピクセルの中間処理結果をフィードバック入力して、次のピクセル演算に利用することができる。さらに、シェーダコア２４は、フレームバッファ５０に保持されたピクセルデータを読み取り、さらに演算処理を施して、その結果をフレームバッファ５０に書き込むＲＭＷ（Read Modify Write）操作を行うこともできる。
【００４７】
シェーダコア２４により実行されるパイプライン処理は、数サイクルから十数サイクルかかることもあるため、シェーダコア２４は、効率化のためにマルチスレッド方式またはインタリーブ方式により複数のピクセルを並列に処理する機構を有する。ここではシェーダコア２４がマルチスレッド方式の並列処理機構を有するものとして説明する。
【００４８】
各シェーダパイプ２２の同期制御部２６は、命令キャッシュ２８からピクセルに対する命令を取得し、シェーダコア２４を駆動するが、ピクセルに対する命令がロック命令の場合、そのピクセルに対する演算処理を中断し、排他制御部４０にロック要求を発行する。同期制御部２６は、ロック要求が許可されるまでの間、他のスレッドに切り替えて実行する。
【００４９】
排他制御部４０がロック要求を許可した場合、シェーダパイプ２２の同期制御部２６は、排他制御部４０からパイプＩＤの通知を受け取る。同期制御部２６は、パイプＩＤに対応するスレッドを実行に移し、そのスレッドにロック命令から先の演算処理を実行させる。排他制御の必要がなくなり、アンロック命令が発行されたり、シェーダプログラムが終了した場合、同期制御部２６は、アンロック要求を排他制御部４０に送り、そのピクセルのロックを解放する。
【００５０】
このように、各シェーダパイプ２２は、排他制御すべきピクセル演算を実行する際、ロック要求を排他制御部４０に発行し、ロック要求が許可されるまでそのピクセル演算をウエイト状態にする。排他制御部４０は、同一ピクセルに対するロック要求を任意の時刻において１つしか許可しないため、あるシェーダパイプ２２があるピクセルに対してフレームバッファ５０に対する読み書きを伴うピクセル演算を実行している間に、他のシェーダパイプ２２がフレームバッファ５０に対して同一ピクセルを読み書きすることはない。これにより、同一ピクセルに対する複数の演算処理部による読み書きの排他的な同期制御が実現される。
【００５１】
図７は、以上の構成の描画処理装置１００により、同一ピクセルに対する演算処理が排他制御される手順を例示して説明する図である。ここでは、ピクセル位置（ｘ１，ｙ１）に対する演算処理の排他制御を説明する。
【００５２】
時刻ｔ０において、ピクセル座標（ｘ１，ｙ１）に対応付けられたロック情報であるシンクスタート１３０とシンクエンド１３２はともに０である。
【００５３】
時刻ｔ１において、ＤＤＡ３４がポリゴン１について、ピクセル座標（ｘ１，ｙ１）のピクセルデータを生成したとする。ＤＤＡ３４は、ピクセル座標値（ｘ１，ｙ１）を排他制御部４０に与える。排他制御部４０は、ＤＤＡ３４に対して、時刻ｔ０におけるシンクスタート１３０の値である「０」をシンクＩＤとしてピクセル座標値（ｘ１，ｙ１）に対応づけて通知するともに、シンクスタート１３０の値を「０」から「１」にインクリメントする。
【００５４】
時刻ｔ２において、ＤＤＡ３４がポリゴン２について、ピクセル座標（ｘ１，ｙ１）のピクセルデータを生成したとする。既にポリゴン１に対してピクセル座標（ｘ１，ｙ１）のピクセルデータが生成されており、ポリゴン２に対して同一座標のピクセルデータが生成されることになる。ＤＤＡ３４は、ピクセル座標値（ｘ１，ｙ１）を排他制御部４０に与える。
【００５５】
排他制御部４０は、ピクセル座標値（ｘ１，ｙ１）に対応するシンクスタート１３０をキャッシュから読み出す。シンクスタート１３０の値は、時刻ｔ１で「１」となっており、排他制御部４０は、時刻ｔ１におけるシンクスタート１３０の値「１」をシンクＩＤとしてピクセル座標値（ｘ１，ｙ１）に対応づけて通知するともに、シンクスタート１３０の値を「１」から「２」にインクリメントする。
【００５６】
時刻ｔ３において、第１のシェーダパイプ２２がポリゴン１についてピクセル（ｘ１，ｙ１）の演算処理を行う際、排他制御部４０に対して、ピクセル座標値（ｘ１，ｙ１）とシンクＩＤの値「０」を含むロック要求を発行する。
【００５７】
排他制御部４０は、現在のシンクエンド１３２の値が０であり、第１のシェーダパイプ２２からロック要求として通知されたシンクＩＤの値も０であり、両者の値が一致するため、そのロック要求を許可し、第１のシェーダパイプ２２はロック要求の許可を受けて、そのピクセル（ｘ１，ｙ１）に対する演算処理を実行する。
【００５８】
時刻ｔ４において、第２のシェーダパイプ２２がポリゴン２について同一ピクセル（ｘ１，ｙ１）の演算処理を行う際、排他制御部４０に対して、ピクセル座標値（ｘ１，ｙ１）とシンクＩＤ「１」を含むロック要求を発行する。
【００５９】
排他制御部４０は、現在のシンクエンド１３２の値が０であり、第２のシェーダパイプ２２からロック要求として通知されたシンクＩＤの値が１であり、両者の値が一致しないため、そのロック要求を拒絶し、第２のシェーダパイプ２２はそのピクセルの演算処理を実行せず、待機する。拒絶されたロック要求は再度キューイングされる。
【００６０】
時刻ｔ５において、第１のシェーダパイプ２２のピクセル（ｘ１，ｙ１）に対する演算処理が終了し、第１のシェーダパイプ２２は、ピクセル座標値（ｘ１，ｙ１）を含むアンロック要求を排他制御部４０に供給する。排他制御部４０は、アンロック要求を受け、ピクセル座標値（ｘ１，ｙ１）に対応するシンクエンド１３２の値を「０」から「１」にインクリメントする。これにより、第１のシェーダパイプ２２によるピクセル（ｘ１，ｙ１）に対するロック状態は解放される。
【００６１】
時刻ｔ６において、拒絶された第２のシェーダパイプ２２からのロック要求がキューから取り出されたとする。排他制御部４０は、そのロック要求のシンクＩＤの値が１であり、ピクセル（ｘ１，ｙ１）に対応する現在のシンクエンド１３２の値も１であり、両者の値が一致するため、そのロック要求を許可する。第２のシェーダパイプ２２はロック要求の許可を受けて、そのピクセル（ｘ１，ｙ１）に対する演算処理を実行する。
【００６２】
時刻ｔ７において、第２のシェーダパイプ２２のピクセル（ｘ１，ｙ１）に対する演算処理が終了し、第２のシェーダパイプ２２は、ピクセル座標値（ｘ１，ｙ１）を含むアンロック要求を排他制御部４０に供給する。排他制御部４０は、アンロック要求を受け、ピクセル座標値（ｘ１，ｙ１）に対応するシンクエンド１３２を「１」から「２」にインクリメントする。これにより、第２のシェーダパイプ２２によるピクセル（ｘ１，ｙ１）に対するロック状態は解放される。
【００６３】
上記の手順例では、第１のシェーダパイプ２２によるピクセル（ｘ１，ｙ１）に対するロック要求の後に、第２のシェーダパイプ２２による同一ピクセル（ｘ１，ｙ１）に対するロック要求がなされたが、これらのロック要求の順序は逆になることもある。第２のシェーダパイプ２２によるピクセル（ｘ１，ｙ１）に対するロック要求が先になされた場合であっても、ポリゴン２のピクセル（ｘ１，ｙ１）に割り当てられたシンクＩＤは「１」であるから、第１のシェーダパイプ２２によりポリゴン１のピクセル（ｘ１，ｙ１）の処理が開始され、その処理が終了するまでは、第２のシェーダパイプ２２によるロック要求は許可されない。したがって、全く同様の手順で第２のシェーダパイプ２２によるピクセル（ｘ１，ｙ１）の処理は待ち状態となり、ピクセル（ｘ１，ｙ１）に対する演算処理の実行順序は、ＤＤＡ３４によりポリゴン１、２が生成された順序と同じになり、同期処理により実行順序が保証される。
【００６４】
以上述べたように、本実施の形態の描画処理装置１００によれば、ラスタライズ処理後のピクセルデータに対するロック情報を一括して管理する同期機構を設け、各ピクセルパイプにおいて、ピクセルに対するＲＭＷ操作を行う前にピクセルをロックし、ＲＭＷ操作後にロックを解放することでピクセルに対する演算処理の排他制御が可能になる。これにより、排他制御の必要のないピクセル演算は任意の実行順序で並列に処理するとともに、排他制御が必要となるＲＭＷ操作を伴うようなピクセル演算は、正しい実行順序で排他的に処理することができる。描画すべきピクセル数が多量にある場合でも、描画処理の性能を低下させることなく、排他制御を行うことができる。
【００６５】
本実施の形態の描画処理装置１００によれば、たとえば、ピクセル単位のソート処理のような排他制御を要する複雑な演算も並列処理により効率良く行うことができる。
【００６６】
本実施の形態の同期機構により、ＲＭＷ操作を伴うピクセル演算処理の排他制御が可能であるため、シェーダ２０からＲＭＷユニットを分離する必要がなくなり、シェーダ２０は、フレームバッファ５０に対する読み書きを行いながら、ピクセル演算を行うことができるため、ピクセル演算の自由度が飛躍的に高まる。
【００６７】
もっとも、ＲＭＷユニットをシェーダ２０から分離してＲＭＷの排他制御を独立して行うようにした構成であっても、シェーダ２０においてピクセル演算の並列度が一層高くなり、高速にピクセル演算されるようになると、複数のシェーダパイプ２２間で同一ピクセルを処理する可能性もある。そのため、ＲＭＷ操作を伴わないピクセル演算であっても、同一ピクセルに対する演算処理の排他制御が必要となる。本実施の形態の同期機構は、このようなＲＭＷ操作を伴わないピクセル演算処理の排他制御にも同様に適用することができる。
【００６８】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。そのような変形例を説明する。
【００６９】
上記の説明では、ラスタライズされたピクセルデータの描画演算の実行順序を保証するための同期機構を説明したが、本発明は、ラスタライズ後のピクセルデータの描画演算に限らず、ジオメトリ演算にも適用することができる。ポリゴンメッシュを計算する場合など、同一位置に対する計算が繰り返し行われ、排他制御を要する場合に、本発明の同期機構は有効である。
【００７０】
また、本発明は、ピクセル演算以外の分野にも適用可能であり、同一アドレスに対して複数のプロセッサもしくは複数のスレッドから処理要求があり、処理順序を保証して排他制御をする必要がある場合に、本発明の同期機構を有効に適用することができる。特に並列度が高い計算の場合には、あらかじめ処理単位毎に実行順序カウンタと実行済みカウンタからなるロック情報をキャッシュしておくことで、効率良く排他制御を行うことが可能である。
【図面の簡単な説明】
【００７１】
【図１】実施の形態に係る描画処理装置の構成図である。
【図２】図１の排他制御部の構成図である。
【図３】図２のロックキューの詳細な構成図である。
【図４】図２の調停部の詳細な構成図である。
【図５】図２のロックキャッシュに格納されるキャッシュデータの構造を示す図である。
【図６】図１のシェーダパイプの詳細な構成図である。
【図７】図１の描画処理装置により、同一ピクセルに対する演算処理が排他制御される手順を例示して説明する図である。
【符号の説明】
【００７２】
１０  ラスタライザ、  ２０  シェーダ、  ２２  シェーダパイプ、  ２４  シェーダコア、  ２６  同期制御部、  ２８  命令キャッシュ、  ３０  プリミティブ入力部、  ３２  セットアップ処理部、  ３４  ＤＤＡ、  ４０  排他制御部、  ４２  ロックキュー、  ４４  調停部、  ４６  ロックキャッシュ、  ４８  ディスパッチャ、  ５０  フレームバッファ、  ６０  メモリ、  ７０  テクスチャユニット、  ９０  プリミティブ生成部、  １００  描画処理装置、  １１０  アンロックＦＩＦＯ、  １１２  ロックＦＩＦＯ。
【図１】
2007122537.tif 000003
【図２】
2007122537.tif 000004
【図３】
2007122537.tif 000005
【図４】
2007122537.tif 000006
【図５】
2007122537.tif 000007
【図６】
2007122537.tif 000008
【図７】
2007122537.tif 000009