(57)【要約】【課題】  メモリアクセスとピクセルシェーダ本来の演算処理を並列に実行することにより、メモリアクセスのレイテンシを隠蔽することを可能とする、マルチスレッド型のピクセルシェーダを用いた図形描画装置を提供することを目的とする。【解決手段】  図形描画装置は、頂点データを処理する頂点シェーダ３００と、ビューポートクリッピング回路３０１と、セットアップ回路３０２と、ラスタライザ３０３と、テクスチャデータを保存するテクスチャメモリ３０５と、ピクセルデータを保存するフレームバッファ３０６と、ピクセルデータとテクスチャデータにアクセスしてピクセル単位のピクセルスレッドを生成して並列処理するマルチスレッドシェーダ３０４とを備えている。【選択図】        図１
2006318404.tif 000002
【特許請求の範囲】
【請求項１】
テクスチャデータを保存するテクスチャメモリと、
ピクセルデータを保存するフレームバッファと、
前記ピクセルデータと前記テクスチャデータとにアクセスしてピクセル単位のピクセルスレッドを生成し、複数の前記ピクセルスレッドを並列処理するマルチスレッドシェーダとを備えた図形描画装置。
【請求項２】
前記マルチスレッドシェーダが、
前記ピクセルスレッドをスレッド単位で保持するレジスタセットからなるピクセルレジスタウインドウと、
前記レジスタセットを指定して処理対象のピクセルスレッドを切り替えるスレッドスケジューラと、
前記処理対象のピクセルスレッドに対して演算処理を実行するシェーダコアとを備え、
前記処理対象のピクセルスレッドに対して、前記テクスチャデータまたは前記ピクセルデータへのアクセスと、前記シェーダコアでの演算処理とを所定のシーケンスで実行することを特徴とする請求項１記載の図形描画装置。
【請求項３】
前記スレッドスケジューラが、前記ピクセルスレッド毎に前記テクスチャデータまたは前記ピクセルデータへのアクセスと、前記シェーダコアでの演算処理とを切り替えることにより、複数の前記ピクセルスレッドを並列処理することを特徴とする請求項２記載の図形描画装置。
【請求項４】
前記レジスタセットが、
前記ピクセルスレッド単位で前記ピクセルのＸＹ座標を保持するＸＹレジスタを備え、
前記スレッドスケジューラが、前記ＸＹ座標を識別子として前記ピクセルスレッドを管理することを特徴とする請求項３記載の図形描画装置。
【請求項５】
前記シェーダコアが、
入力データに対して所定の修飾処理を行なう入力引数修飾部と、
前記修飾処理された入力データに対して所定の演算処理を行なう演算器と、
前記演算処理された入力データに対して所定の逓倍処理を行なうスケール修飾部と、
前記逓倍処理された入力データに対してクランプ処理を行なう出力修飾部とを備えていることを特徴とする請求項４記載の図形描画装置。
【請求項６】
前記マルチスレッドシェーダが、
複数の前記シェーダコアを備えていることを特徴とする請求項２から請求項５のうちのいずれか１項記載の図形描画装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ディスプレイ上にコンピュータグラフィクスの画像を表示する図形描画装置に関しており、特に、ピクセルの描画処理をプログラマブルに行なうマルチスレッド型のピクセルシェーダを用いた図形描画装置に関するものである。
【背景技術】
【０００２】
一般に３Ｄグラフィクスの処理は座標変換やライティング計算等を行なうジオメトリ処理と、三角形等をピクセルに分解してテクスチャマッピング等を施してフレームバッファへ描画するレンダリング処理に分類できる。近年、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）で予め決められた古典的なジオメトリ処理やレンダリング処理を用いるのではなく、プログラマブルなグラフィクスアルゴリズムによるフォトリアルな表現手法が用いられるようになってきた。
【０００３】
この手法の一つとして頂点シェーダとピクセルシェーダがある。頂点シェーダとピクセルシェーダをもつグラフィクスパイプラインの一例について説明する（例えば、非特許文献１参照）。頂点シェーダでは、アプリケーションプログラマがアセンブリ言語や高レベルのシェーディング言語等によりプログラマ自身のアルゴリズムをハードウェアでアクセラレーションすることができる。モデリングデータを変えることなく頂点データに対して移動、変形、回転、ライティング処理等を自由に加えることができる。これにより３Ｄモーフィング、屈折エフェクト、スキニング（間接等の頂点の不連続部分を滑らかに表現する）等が可能となり、ＣＰＵに負荷をかけずにリアリスティックな表現が可能である。
【０００４】
一方、ピクセルシェーダは、ピクセル単位でプログラマブルなピクセル演算をするためのもので、頂点シェーダ同様アセンブリ言語や高レベルのシェーディング言語を用いてプログラムする。これにより、テクスチャデータとして法線ベクトルを用いてピクセル単位でライティング処理を行なったり、テクスチャデータとして摂動データ（揺らぎ）を用いてバンプマップを行なう等の処理が可能となる。またピクセルシェーダはテクスチャアドレスの計算手法を変えるだけでなく、テクスチャカラーとピクセルのブレンド演算もプログラマブルに行なうことができる。これにより階調反転、色空間の変換等の画像処理も可能である。一般に頂点シェーダとピクセルシェーダは組み合わせて用いられ、頂点処理とピクセル処理を組み合わせることにより多彩な表現が可能となる。
【０００５】
以下、頂点シェーダとピクセルシェーダを含むグラフィクスパイプラインをより具体的に説明する。非特許文献１記載のグラフィックスパイプラインは、データ処理順に、頂点シェーダ、ビューポートクリッピング回路、セットアップ回路、ラスタライザ、ピクセルシェーダ、フォグブレンド、フラグメントテスト、アルファブレンドを備えている。また、テクスチャの色値（ＲＧＢ）やアルファ値（透明度）等のテクスチャデータを保存するテクスチャメモリと、デスティネーションデータやソースデータ、最終カラーを保存するフレームバッファを有している。
【０００６】
次に、動作について説明する。頂点シェーダは、頂点データに対する回転、移動、拡大縮小等の座標変換処理とライティング処理を行なう。頂点シェーダはプログラマブルであるので、プログラマが独自のアルゴリズムを用いて処理を行なうことも可能である。ビューポートクリッピング回路は、頂点シェーダで計算された座標を表示デバイス座標へ変換し、頂点座標が画面枠からはみ出すかどうかのチェックを行い、はみ出した場合は画面内に収まるように三角形を分割する。セットアップ回路は、頂点データから描画処理に必要な増分値の計算を行なう。ラスタライザは、その増分値を用いてピクセルの補間処理を行ない、三角形をピクセルに分解する。ピクセルシェーダは、ラスタライザで生成されたテクスチャ座標を使ってテクスチャメモリにアクセスしてテクスチャデータを読み出す。そして、読み出されたテクスチャデータとカラーデータのブレンド処理等を行なう。ピクセルシェーダはプログラマブルな処理が可能で、テクスチャのアドレス計算やブレンド処理を、所望の演算式を用いて行なうことができる。フォグブレンドは、遠近感を付加するためのフォグ（霧）の生成とセカンダリカラー（以下、スペキュラーカラー）の加算処理を行なう。フラグメントテストは、フレームバッファから物体の奥行き情報（以下、デプスデータ）や同形状の重ね合せ情報（以下、ステンシルデータ）を読み出し、ソースデータとデスティネーションデータの間で比較処理行い、陰面消去等を行う。アルファテストもこのステージで処理する。アルファブレンドは、フレームバッファから読み出したデスティネーションデータとソースデータを使ってアルファブレンドの透過処理を行ない、最終カラーをフレームバッファへ書き込む。
【０００７】
【非特許文献１】Ｍｉｃｒｏｓｏｆｔ、「ＤｉｒｅｃｔＸ８プログラマーズリファレンスマニュアル」、２０００年１１月８日
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来の図形描画装置は、以上のように構成されていたので、通常、ピクセルシェーダのプログラムではテクスチャのアドレス計算、テクスチャのフェッチ、テクスチャカラーとピクセルのブレンド演算の順番で処理されることが多い。この処理の中でテクスチャのフェッチは、テクスチャアドレスを指定することによりテクスチャメモリからデータを読み出すので、所望のデータが実際に読み出されて次の処理が可能になるまでに待ち時間が発生する。一般に、テクスチャ読み出しにはテクスチャキャッシュ等が利用されるが、そうした場合でもミスヒットが発生すると、相当大きな遅延時間（以下、レイテンシ）が発生してしまう。そして、このレイテンシの発生により、次の処理であるテクスチャカラーとピクセルのブレンド演算が待たされてしまうという課題があった。
【０００９】
更に、ピクセルシェーダのプログラムの中でフレームバッファからデプスデータを読み出して陰面消去を行なったり、フレームバッファから読み出したデスティネーションのピクセルを使ってブレンド処理をする場合は、メモリからデータを読み出すまでの待ち時間が更に長くなってしまうという課題があった。
【００１０】
このような現象は、演算器がメモリアクセスのレイテンシのために有効に活用されていないこと示しており、メモリアクセスのために全体の性能が低下してしまうことになる。大容量ＦＩＦＯ等を用いてメモリアクセスのレイテンシを隠蔽すること等も考えられるが、本質的な解決にはならず演算器の稼働率はあまり向上しない。また組み込み分野においてはゲート規模ＬＳＩコストに与える影響が大きいので、効果のあまり期待できないＦＩＦＯを実装することは得策ではない。
【００１１】
この発明は上記のような課題を解消するためになされたもので、メモリからの読み出しや書き込み処理の完了を待たずに次の処理に移行し、メモリアクセスとピクセルシェーダ本来の演算処理を並列に実行することにより、メモリアクセスのレイテンシを隠蔽することを可能とする、マルチスレッド型のピクセルシェーダを用いた図形描画装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係る図形描画装置は、テクスチャデータを保存するテクスチャメモリと、ピクセルデータを保存するフレームバッファと、前記ピクセルデータと前記テクスチャデータとにアクセスしてピクセル単位のピクセルスレッドを生成し、複数の前記ピクセルスレッドを並列処理するマルチスレッドシェーダとを備えている。
【発明の効果】
【００１３】
この発明によれば、メモリアクセスのレイテンシに影響を受けることなく、プログラマブルな３Ｄレンダリング処理を効率よく行なうことができる。
【発明を実施するための最良の形態】
【００１４】
実施の形態１．
以下、この発明の実施の形態１について説明する。図１は、この発明の実施の形態１に係るマルチスレッド型のピクセルシェーダを用いた図形描画装置の構成図である。図１において、図形描画装置は、頂点シェーダ３００、ビューポートクリッピング回路３０１、セットアップ回路３０２、ラスタライザ３０３、マルチスレッドシェーダ３０４、テクスチャメモリ３０５、フレームバッファ３０６を備えている。
【００１５】
次に、動作について説明する。頂点シェーダ３００は、頂点データに対する回転、移動、拡大縮小等の座標変換処理とライティング処理を行なう。頂点シェーダ３００は、プログラマブルなのでプログラマが独自のアルゴリズムを用いて処理を行なうことも可能である。ビューポートクリッピング回路３０１は、頂点シェーダ３００で計算された座標を表示デバイス座標へ変換し、頂点座標が画面枠からはみ出すかどうかのチェックを行い、はみ出した場合は画面内に収まるように三角形（プリミティブ）を分割する。セットアップ回路３０２は、頂点データから、描画処理に必要な増分値の計算を行なう。ラスタライザ３０３は、その増分値を用いてピクセルの移動と三角形の内外判定処理を行なう。通常ラスタライザは、ピクセルの補間処理やパースペクティブコレクション（遠近補正）等も行なうが、これらの処理は後述のマルチスレッドシェーダ３０４が行なう。これにより、ラスタライザにおける、ピクセル補間処理とシェーダ処理との負荷バランスの問題が発生せず、効率よく処理することができる。また、ピクセル補間処理のための専用ユニットが不要となることから、ハードウェア規模も削減できる。
【００１６】
マルチスレッドシェーダ３０４は、上記のラスタライズのためのピクセル補間処理の他に、テクスチャのアドレス計算、テクスチャのフィルタ処理、ピクセルブレンド処理、フォグブレンド、スペキュラー加算、フラグメントテスト（アルファテスト、デプステスト、ステンシルテスト）、アルファブレンド処理等を統合的に行なう。テクスチャは、テクスチャメモリ３０５から読み出す。そして、演算された最終カラーはフレームバッファ３０６へ書き込まれる。また、デスティネーションデータが必要な場合はフレームバッファ３０６から読み出しを行なう。
【００１７】
なお、一般のピクセルシェーダのシェーダプログラムではテクスチャのアドレス計算とピクセルのブレンド演算のみ行なわれ、それ以外のフラグメント処理は別ユニットで処理される。本発明はレンダリング処理のほとんど全てをマルチスレッドシェーダ３０４で処理するのでハードウェア規模を削減できると同時に将来サポートされるであろう機能にもプログラマブルに柔軟に対応できる。
【００１８】
本発明のシェーダプログラムはレンダリングに必要な固定処理（例えば、ラスタライズのための平面の方程式計算、デプステスト、アルファブレンド等）と、ユーザが自由に設定できるプログラマブルな演算処理に分類される。早期のＺ値（奥行き方向の距離を示す）比較を行う場合、まずＺ値のピクセル補間処理（平面の方程式でデプスを計算）とデプステストを行い、その後デプス以外の要素のピクセル補間処理を行なう。これによりデプステストに失敗したときの無駄な処理を最小限に抑えることができる。
【００１９】
以上のように、この実施の形態１によれば、メモリアクセスのレイテンシに影響を受けることなく、プログラマブルな３Ｄレンダリング処理を効率よく行なうことができる。
【００２０】
実施の形態２．
以下、この発明の実施の形態２について説明する。図２は、図１中のマルチスレッドシェーダ３０４の一例を示す構成図である。図２において、マルチスレッドシェーダ３０４は、ピクセルレジスタウインドウ４００、マルチプレクサ４０１、スレッドスケジューラ４０２、シェーダコア４０３、シェーダプログラム４０４、定数レジスタ４０５、テクスチャキャッシュ４０６、ピクセルキャッシュ４０７を備えている。
【００２１】
次に、動作について説明する。ピクセルレジスタウインドウ４００は、図１のラスタライザ３０３から出力される増分値情報、シェーダコア４０３で処理された演算結果等を格納するためのレジスタセットである。ピクセルレジスタウインドウ４００は、これらのリソースをピクセルスレッド単位でレジスタに保持する。マルチプレクサ４００は、ピクセルレジスタウインドウ４００中の、ピクセルスレッド単位の複数のレジスタセットから、処理対象のピクセルスレッドのレジスタセットを選択し、シェーダコア４０３と接続する。スレッドスケジューラ４０２は、処理対象のピクセルスレッドの切り替え処理（演算に割り当るか、メモリアクセスに割り当てるかの決定）等を行う。
【００２２】
シェーダコア４０３は、実施の形態１で説明した演算処理を行なう演算器で、シェーダプログラム４０４で記述された命令を逐次実行する。定数レジスタ４０５には、演算に使用する定数が設定される。定数レジスタ４０５は一般に複数個で構成され、シェーダプログラム４０４を読み込む際に同時に更新される。シェーダプログラム４０４が実行中の場合には、定数レジスタ４０５は更新されない。
【００２３】
シェーダコア４０３では、従来ラスタライザで行なっていたピクセル補間処理、パースペクティブコレクションを行なう。例えば、テクスチャ座標（ｓ，ｔ，ｑ）に対するピクセル補間処理とパースペクティブコレクション（ｓ＿ｐｅｒｓ，ｔ＿ｐｅｒｓ）は以下の式で計算される。
ｓ＝Ａｓ＊Ｘ＋Ｂｓ＊Ｙ＋Ｃｓ
ｔ＝Ａｔ＊Ｘ＋Ｂｔ＊Ｙ＋Ｃｔ
ｑ＝Ａｑ＊Ｘ＋Ｂｑ＊Ｙ＋Ｃｑ
ｓ＿ｐｅｒｓ＝ｓ／ｑ
ｔ＿ｐｅｒｓ＝ｔ／ｑ
ここで、Ａｓ、Ｂｓ、Ｃｓ、Ａｔ、Ｂｔ、Ｃｔ、Ａｑ、Ｂｑ、Ｃｑは、頂点座標のテクスチャ座標から算出される平面の方程式の係数である。Ｘ、Ｙはラスタライザ３０３で行なわれる三角形の内外判定処理にパスした（即ち、三角形の内部に含まれる）表示デバイス座標である。
【００２４】
テクスチャキャッシュ４０６は、図１のテクスチャメモリ３０５からテクスチャデータを読み出すためのキャッシュで、シェーダコア４０３へ読み出されたテクスチャデータを出力する。従来のピクセルシェーダでは処理しないテクスチャのフィルタ処理も、このシェーダコア４０３で実行する。例えば、バイリニアフィルタでは以下の演算処理を行なう。
Ｔ０１＝Ｔ０＊（１−ｕｆｒａｃ）＋Ｔ１＊ｕｆｒａｃ
Ｔ２３＝Ｔ２＊（１−ｕｆｒａｃ）＋Ｔ２＊ｕｆｒａｃ
Ｔ＝Ｔ０１＊（１−ｖｆｒａｃ）＋Ｔ２３＊ｖｆｒａｃ
ここで、Ｔ０、Ｔ１、Ｔ２、Ｔ３は、テクスチャ座標で示された近傍の４テクセル（テクスチャを構成するピクセル）のカラー値である。また、ｕｆｒａｃ、ｖｆｒａｃは、それぞれテクセルの中心座標と真のテクスチャ座標のＵ方向及びＶ方向の差分（小数点以下の端数値）である。更に、Ｔ０１はＴ０〜Ｔ１間の線形補間を、Ｔ２３はＴ２〜Ｔ３間の線形補間を、ＴはＴ０１〜Ｔ２３間の線形補間を示す。
【００２５】
ピクセルキャッシュ４０７はフレームバッファ、デプスバッファ、ステンシルバッファ等に対してピクセルデータの読み書きを行なうためのキャッシュで、シェーダコア４０３に対してデスティネーションデータを出力し、シェーダコアで計算された演算結果（例えばカラーやデプス等）が書き込まれる。
【００２６】
図３は、図２中のピクセルレジスタウインドウ４００の一例を示す図である。説明を簡単にするため、ピクセルスレッドを４個までサポートする場合について説明する。図３において、ピクセルスレッド０〜３の各レジスタセットには、プログラムカウンタレジスタ、ステータス情報レジスタ、ＸＹアドレスレジスタ、増分値情報レジスタ、カラーレジスタ、デプスレジスタ、テクスチャ座標レジスタ、テンポラリレジスタが含まれる。
【００２７】
プログラムカウンタレジスタは、そのピクセルスレッドにおけるシェーダプログラムのプログラムカウンタの値を示すもので、ピクセルスレッドが切り替わる場合、その直前まで実行していたプログラムカウンタの値が保持される。
【００２８】
ステータス情報レジスタは、ピクセルスレッドの状態を記録するためのもので、状態の種類は“ＲＵＮ”、“ＷＡＩＴ”、“ＳＵＳＰＥＮＤ”、“ＩＤＬＥ”の４種類に分類される。シェーダプログラム４０４の演算が実行中であるピクセルスレッドには“ＲＵＮ”がマークされ、テクスチャリード等のメモリアクセスが発生しデータ待ち状態にあるピクセルスレッドには“ＷＡＩＴ”がマークされる。一方、演算やメモリアクセスを要求しているが、他のピクセルスレッドが使用中であるために待機中であるピクセルスレッドには“ＳＵＳＰＥＮＤ”がマークされる。“ＩＤＬＥ”がマークされた場合は、未だ一度も実行されていないピクセルスレッド、またはプログラムの実行が完了したピクセルスレッドであることを示している。
【００２９】
ＸＹアドレスレジスタは、ラスタライザ３０３から出力されるピクセルのＸＹ座標を保持する読み出し専用レジスタである。スレッドスケジューラ４０２は、ピクセルスレッドの状態を切り替えるときに、このＸＹ座標を識別子として使用する。もし同一ＸＹ座標をもつピクセルがラスタライザ３０３から新規に入力された場合は、既に登録されている同じ識別子を持つピクセルスレッドが“ＩＤＬＥ”状態になるまで、そのピクセルはシェーダコア４０３に入力されない。つまりシェーダコア４０３内で同じ識別子（ＸＹ座標）を持つピクセルスレッドが処理されることがない。これにより、フレームバッファ３０６のピクセルデータのコヒーレンシを保つことができ、不整合が発生しない。
【００３０】
増分値情報レジスタは、ラスタライザ３０３から出力される各種成分（拡散カラー、スペキュラーカラー、デプス、テクスチャ等）の増分値情報が格納される読み出し専用のレジスタである。
【００３１】
カラーレジスタは、拡散カラーレジスタとスペキュラーカラーレジスタとから成り、平面の方程式の演算結果を格納するためのレジスタである。同様に、デプスレジスタ、テクスチャ座標レジスタには、それぞれデプス、テクスチャ座標に対する平面の方程式の演算結果を格納する。通常テクスチャ座標は、マルチテクスチャに対応するためレイヤの数だけ用意される。
【００３２】
一方、テンポラリレジスタは、演算の途中結果を格納するためのレジスタである。通常テンポラリレジスタは複数個用意される。なお、テンポラリレジスタ、カラーレジスタ、及びテクスチャ座標レジスタは、要素が４個のベクトルデータである。カラーは（ｒ，ｇ，ｂ，ａ）、座標は（ｓ，ｔ，ｒ，ｑ）で表現される。
【００３３】
ピクセルレジスタウインドウ４００は、ピクセルスレッド単位に、以上のレジスタからなるレジスタセットを備えている。図３の場合は、各ピクセルスレッド０〜３の合計４個分のレジスタセットが用意される。
【００３４】
図４は、マルチスレッドを用いない処理とマルチスレッドを用いた処理の違いを説明するための図である。図４において、マルチスレッドを用いない従来のピクセルシェーダによる処理シーケンス（以下、非マルチスレッド処理シーケンス）６０１と、マルチスレッドシェーダ３０４による並列処理シーケンス（以下、マルチスレッド処理シーケンス）６０２を説明する。なお、シェーダプログラム６００は、図２中のシェーダプログラム４０４と同等である。
【００３５】
シェーダプログラム６００は、演算Ａ、テクスチャリードＴ、演算Ｂ、ピクセルリードＲ、演算Ｃ、ピクセルライトＷの順に、演算とメモリアクセスを交互に行うプログラムであると仮定する。非マルチスレッド処理シーケンス６０１では、最初のピクセルに対してシェーダプログラム６００の演算処理とメモリアクセスを順番に行なう。一連の処理が完了したら、次のピクセルに対して同じ処理を続けていく。このようにピクセル毎にシーケンシャルな処理が行われるので、メモリアクセスでレイテンシが発生すると、そのレイテンシの分だけ全体の処理が遅延してしまう。
【００３６】
一方、マルチスレッド処理シーケンス６０２では、スレッドスケジューラ４０２が、最初のピクセルスレッド０に対してシェーダコア４０３の演算器を割り当てる。演算器がピクセルスレッド０において演算Ａを実行した後、テクスチャリードＴでキャッシュがミスヒットした場合、データ待ち状態となる。この場合、前述したようにピクセルスレッド０のステータスが“ＷＡＩＴ”となる（図３のステータス情報レジスタにおいて、ピクセルスレッド０に“ＷＡＩＴ”がマークされる）。
【００３７】
ここで、シェーダコア４０３の演算器は空き状態となるので、スレッドスケジューラ４０２は次のピクセルスレッド１に対して同演算器を割り当てる。ピクセルスレッド０と同様に、ピクセルスレッド１において演算Ａが実行される。同様に、ピクセルスレッド１の演算Ａの終了後、スレッドスケジューラ４０２はピクセルスレッド２に対してシェーダコア４０３の演算器を割り当て、演算Ａが実行される。
【００３８】
その後、ピクセルスレッド０のテクスチャリードＴが完了してテクスチャデータの準備ができたら、スレッドスケジューラ４０２は、シェーダコア４０３の演算器の割り当てをピクセルスレッド２から切り離し、ピクセルスレッド０に再び割り当てて、ピクセルスレッド０の演算が再開される。即ち、ピクセルスレッド０において演算Ｂが実行される。それと並行して、ピクセルスレッド１において、演算Ａの次処理であるテクスチャリードＴが行なわれる。
【００３９】
以上のように、あるピクセルスレッドがテクスチャデータやピクセルデータへのアクセスで待ち状態となった場合、別のピクセルスレッドに対してシェーダコア４０３の演算処理を続行させ、演算器をできるだけ稼動状態にする。これにより演算器の処理、テクスチャデータへのアクセス、ピクセルデータへのアクセスを並列に実行させることができる。その結果、メモリアクセスのレイテンシを隠蔽でき、効率よく処理を行なうことができる。
【００４０】
図４の例では、マルチスレッド処理シーケンス６０２は、非マルチスレッド処理シーケンス６０１に比べて、スループットを約２倍向上することができる。一般に、シェーダプログラム６００の中で、演算よりもメモリアクセスの占める割合が大きいほど、この効果は大きくなる。
【００４１】
図５は、図４中のマルチスレッド処理シーケンス６０２において、スレッドスケジューラ４０２が、ピクセルスレッドをどのようにスケジューリングするかを説明するための図である。図５において、各ピクセルスレッドのステータス情報の変遷を示している。
【００４２】
斜線の部分はピクセルスレッドのステータスが“ＲＵＮ”（演算実行状態）であることを示している。図５において、シェーダコア４０３の演算器の稼働率を上げたことにより、常にいずれかのピクセルスレッドのステータスが“ＲＵＮ”になっていることが示されている。
【００４３】
処理中のピクセルスレッドが“ＷＡＩＴ”状態か“ＳＵＳＰＥＮＤ”状態になった場合、シェーダコア４０３の演算器が稼動していないことになるので、新たにピクセルスレッドを割り当てて稼動状態にする。なお、各ピクセルスレッドの処理の優先順位は、最も古く割り当てられたピクセルスレッドほど高くなる。従って、ピクセルスレッド間で追い越しが発生することがなく、ピクセルスレッドが入力された順序で正しく処理される。
【００４４】
以上のように、この実施の形態２によれば、マルチスレッド処理シーケンス６０２により、演算器の処理、テクスチャデータへのアクセス、ピクセルデータへのアクセスを並列に実行させることができる。その結果、メモリアクセスのレイテンシを隠蔽でき、効率よく処理を行なうことができる。
【００４５】
実施形態３．
以下、この発明の実施の形態３について説明する。図６は、図２中のシェーダコア４０３の一例を示す構成図である。通常データは要素が４個のベクトルデータであるので、図６で示されるシェーダコア４０３が４組使用される。例えば、テクスチャアドレスは（ｓ，ｔ，ｒ，ｑ）、カラーは（ｒ，ｇ，ｂ，ａ）で表現される。図６において、シェーダコア４０３は、入力引数修飾部８００、除算器８０１、Ｐｏｗｅｒ演算器８０２、複合演算器８０３、比較器８０４、スケール修飾部８０５、出力修飾部８０６を備えている。
【００４６】
次に、動作について説明する。入力引数修飾部８００は、入力されるデータに対してマイナス（−）、補数、バイアス（０．５を引く）処理をモードに応じて施す。
【００４７】
除算器８０１は、パースペクティブコレクションに必要な割り算処理等を行う。Ｐｏｗｅｒ演算器８０２は、ａ＾Ｘのべき乗計算を行うためのもので、平方根等の計算も行なう。複合演算器８０３は、入力引数修飾部８００で処理されたデータに対して、「ａ＊Ｘ＋ｂ＊Ｙ＋ｃ」の複合演算を行う。この演算式はピクセルの補間処理である平面の方程式の計算に最適化されている。比較器８０４は、デプステスト、ステンシルテスト、アルファテストやその他のデータの大小比較を行うときに使用する。例えば、アルファテストやデプステストで“Ｆａｉｌ”が確定したら、それ以降の描画処理は行なう必要がないので、そのピクセルスレッドは破棄される。
【００４８】
スケール修飾部８０５は、上記の演算器８０１〜８０４による演算結果に対して、１／２倍、２倍、４倍の逓倍処理を行なう。出力修飾部８０６は、スケール修飾部８０５による逓倍処理の後に、クランプ処理を行なう。演算を繰り返しているときには途中結果をクランプする必要がないが、最終結果をピクセルキャッシュ４０７に書き込むときにはクランプ処理を施す。
【００４９】
入力修飾処理部８００、演算器８０１〜８０４、スケール修飾部８０５、出力修飾部８０６の動作は、シェーダプログラム４０４の命令コードのあるフィールドで定義される。
【００５０】
各演算器のフォーマットとしては、３２ｂｉｔのフル浮動小数点（符号：指数：仮数＝１．８．２３）、１６ｂｉｔのハーフ浮動小数点（符号：指数：仮数＝１．５．１０）、または固定小数点等が考えられる。
【００５１】
以上のように、この実施の形態３によれば、図６に示したシェーダコア４０３の演算器を用いることにより、例えば、ＯｐｅｎＧＬの拡張機能であるフラグメントプログラム（ピクセルシェーダ）の命令セットや、より高レベルなＯｐｅｎＧＬシェーディング言語等にも効率よく対応することができる。
【００５２】
実施の形態４．
以下、この発明の実施の形態４について説明する。図７は、図２のマルチスレッドシェーダ３０４を並列構成（マルチコア化）にした場合の一例を示す構成図である。図７において、マルチコア化したマルチスレッドシェーダ３０４は、ピクセルレジスタウインドウ９００、クロスバースイッチ９０１、スレッドスケジューラ９０２、シェーダプログラム９０３、定数レジスタ９０４、シェーダコアモジュール９０５〜９０７を備えている。更に、シェーダコアモジュール９０５〜９０７は、それぞれシェーダコア４０３、テクスチャキャッシュ４０６、ピクセルキャッシュ４０７を有している。
【００５３】
次に、動作について説明する。図７のマルチスレッドシェーダ３０４の基本的な動作は、図２のマルチスレッドシェーダ３０４と同様である。異なるのは、図２の場合は、シェーダコアモジュール（シェーダコア４０３、テクスチャキャッシュ４０６、ピクセルキャッシュ４０７）が１つだったのに対して、図９では複数用意されている。従って、複数のピクセルスレッドが、複数のシェーダコアモジュール９０５〜９０７に同時に割り当てらられる。ピクセルレジスタウインドウ９００とシェーダコアモジュール９０５〜９０７は、クロスバースイッチ９０１を通して接続されている。従って、ピクセルレジスタウインドウ９００のリソース（ピクセルスレッド）を、複数のシェーダコアモジュール９０５〜９０７が同時に使用することができる。
【００５４】
以上のように、この実施の形態４によれば、マルチスレッドシェーダ３０４をマルチコア化することで、ピクセルスレッドの並列処理が可能となる。その結果、容易にピクセル処理のスループットを向上させることができるので、ハードウェア規模が限定される組み込み向け分野向けからハイエンド向けまで、柔軟に幅広く対応することができる。
【図面の簡単な説明】
【００５５】
【図１】この発明の実施の形態１に係るマルチスレッド型のピクセルシェーダを用いた図形描画装置の構成図である。
【図２】図１中のマルチスレッドシェーダの一例を示す構成図である。
【図３】図２中のピクセルレジスタウインドウの一例を示す図である。
【図４】マルチスレッドを用いない処理とマルチスレッドを用いた処理の違いを説明するための図である。
【図５】図４中のマルチスレッド処理シーケンスにおいて、スレッドスケジューラがピクセルスレッドをどのようにスケジューリングするかを説明するため図である。
【図６】図２中のシェーダコアの一例を示す構成図である。
【図７】図４のマルチスレッドシェーダを並列構成（マルチコア化）にした場合の一例を示す構成図である。
【符号の説明】
【００５６】
３００  頂点シェーダ、３０１  ビューポートクリッピング回路、３０２  セットアップ回路、３０３  ラスタライザ、３０４  マルチスレッドシェーダ、３０５  テクスチャメモリ、３０６  フレームバッファ、４００  ピクセルレジスタウインドウ、４０１  マルチプレクサ、４０２  スレッドスケジューラ、４０３  シェーダコア、４０４  シェーダプログラム、４０５  定数レジスタ、４０６  テクスチャキャッシュ、４０７  ピクセルキャッシュ、６００  シェーダプログラム、６０１  非マルチスレッド処理シーケンス、６０２  マルチスレッド処理シーケンス、８００  入力引数修飾部、８０１  除算器、８０２  Ｐｏｗｅｒ演算器、８０３  復号演算器、８０４  比較器、８０５  スケール修飾部、８０６  出力修飾部、９００  ピクセルレジスタウインドウ、９０１  クロスバースイッチ、９０２  スレッドスケジューラ、９０３  シェーダプログラム、９０４  定数レジスタ、９０５〜９０７  シェーダコアモジュール。
【図１】
2006318404.tif 000003
【図２】
2006318404.tif 000004
【図３】
2006318404.tif 000005
【図４】
2006318404.tif 000006
【図５】
2006318404.tif 000007
【図６】
2006318404.tif 000008
【図７】
2006318404.tif 000009