(57)【要約】【課題】パスの切り替えのオーバーヘッドを低減することが可能で、高速にマルチパスの切り替えが可能な画像処理装置およびその方法、並びにプログラムを提供する。【解決手段】頂点パラメータ読み込み部１６−１，１６−２で読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点シェーダ１１−１，１１−２と、頂点シェーダの処理結果をピクセル単位に変換するラスタライザ１２−１，１２−２と、ラスタライザの出力に対してピクセル単位の処理を行うピクセルシェーダ１３−１，１３−２と、ピクセルシェーダの処理結果が記憶されるメモリ１４と、ラスタライザからの通知に応じて頂点パラメータ読み込み部へのリクエストを制御するコントローラ１５と、有し、ラスタライザ１２−１，１２−２は、フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号をコントローラに通知する機能を有し、停止したピクセル位置も知る機能を含む。【選択図】図９
2008282256.tif 000002
【特許請求の範囲】
【請求項１】
リクエストに応答して頂点パラメータを読み込む頂点パラメータ読み込み部と、
読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点シェーダと、
頂点シェーダの処理結果をピクセル単位に変換するラスタライザと、
上記ラスタライザの出力に対してピクセル単位の処理を行うピクセルシェーダと、
上記ピクセルシェーダの処理結果が記憶されるメモリと、
上記ラスタライザからの通知に応じて上記頂点パラメータ読み込み部へのリクエストを制御するコントローラと、を有し、
上記ラスタライザは、
フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号をコントローラに通知する機能を有し、停止したピクセル位置も知る機能を含む
画像処理装置。
【請求項２】
上記コントローラは、
頂点番号をもとに、上記頂点パラメータ読み込み部にリクエストする際に、開始頂点番号と終了頂点番号あるいは開始頂点番号と頂点数を設定する機能を有する
請求項１記載の画像処理装置。
【請求項３】
各ハードウェアブロックの設定は描画パイプライン上を流れる
請求項１記載の画像処理装置。
【請求項４】
上記コントローラは、
あるパスの頂点パラメータのリクエストが終了したらすぐに、あらかじめ次のパスの頂点パラメータをリクエストする
請求項２記載の画像処理装置。
【請求項５】
上記ラスタライザからのフル通知がコントローラに発行された場合、
上記コントローラは、
再度次のパスの頂点パラメータから流しなおす、一方、フルが発生しない場合、先行して投入されたパスがそのまま処理されるように制御する
請求項４に記載の画像処理装置。
【請求項６】
上記コントローラおよび頂点パラメータ読み込み部は、頂点パラメータ読み込みのキャンセル機能を有する
請求項２に記載の画像処理装置。
【請求項７】
上記ラスタライザは、
フル発生の手前のあらかじめ指定されたピクセル数で、プレフル通知を上記コントローラに行うことができる
請求項６に記載の画像処理装置。
【請求項８】
上記ラスタライザは、
プレフルが発生した後もピクセルの発生は継続する一方、フルに達した場合には、ピクセルの発生を停止する
請求項７に記載の画像処理装置。
【請求項９】
プレフルを通知されると、上記コントローラは、
ただちに上記頂点パラメータ読み込み部にキャンセルを発行する一方、
上記頂点パラメータ読み込み部は、
投入完了した頂点番号を上記コントローラに伝える機能を有する
請求項８に記載の画像処理装置。
【請求項１０】
上記ラスタライザは、
実際に処理を行ったピクセルの位置を記憶しておき、次のパスの実行時には、外部から設定を行うことなく、その位置までのピクセルの発行を行う
請求項９に記載の画像処理装置。
【請求項１１】
上記メモリに格納されたテクスチャデータによりテクスチャ処理を行うテクスチャユニットを有する
請求項１〜１０のいずれか一に記載の画像処理装置。
【請求項１２】
リクエストに応答して頂点パラメータを読み込む頂点パラメータ読み込みステップと、
読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点処理ステップと、
頂点シェーダの処理結果をピクセル単位に変換するラスタライズ処理ステップと、
上記ラスタライザの出力に対してピクセル単位の処理を行うピクセル処理ステップと、
上記ピクセルシェーダの処理結果が記憶されるステップと、
上記ラスタライズ処理ステップからの通知に応じて上記頂点パラメータ読み込みステップへのリクエストを制御する制御ステップと、有し、
上記ラスタライズ処理ステップは、
フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号を制御ステップに通知するステップと、停止したピクセル位置も知るステップと、を含む
画像処理方法。
【請求項１３】
リクエストに応答して頂点パラメータを読み込む頂点パラメータ読み込み処理と、
読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点処理と、
頂点シェーダの処理結果をピクセル単位に変換するラスタライズ処理と、
上記ラスタライザの出力に対してピクセル単位の処理を行うピクセル処理と、
上記ピクセルシェーダの処理結果が記憶される記憶処理と、
上記ラスタライズ処理ステップからの通知に応じて上記頂点パラメータ読み込みステップへのリクエストを制御する制御処理と、有し、
上記ラスタライズ処理は、
フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号を制御ステップに通知するステップと、停止したピクセル位置も知るステップと、を含む
画像処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３次元画像処理等を行う画像処理装置およびその方法、並びにプログラムに関するものである。
【背景技術】
【０００２】
図１は、一般的な３次元画像処理装置における処理を簡略化して示す図である。
【０００３】
図１の頂点パラメータは典型的には頂点座標や頂点の法線などを含んでいる。
頂点単位の処理（ＳＴ１）では、たとえば頂点座標や法線の変換、頂点色の計算が行われる場合が多い。
ラスタライズ処理（ＳＴ２）では、頂点座標や頂点色をピクセル単位に変換し、ピクセル単位処理（ＳＴ３）では、たとえばテクスチャマッピングなどの処理を行いピクセル単位の描画色を計算する場合が多い。ただしこれらは実際には描画するオブジェクトの種類により変化する。
【０００４】
一方、近年では上記頂点単位の処理やピクセル単位の処理を、より一般化した手続きとし、プログラマブルにしようという方向がある。
このような場合、頂点単位の処理、ピクセル単位の処理は、それぞれ頂点シェーダ、ピクセルシェーダと呼ばれることがある。
近年のシェーダのプログラミングモデルでは、仮想的に、ほぼ無限のリソースを取り扱えるようにしている場合も多い。OpenGLのGLSL（OpenGL  Shading  Language）はその一例である。
【０００５】
実際にはこれらの処理は、図２に示すように、頂点シェーダ１、ラスタライザ２、ピクセルシェーダ３といったハードウェア（H/W）ブロックで実現される場合が多い。頂点シェーダやピクセルシェーダでは、ユーザが記述したプログラムを実行することが可能である。
【０００６】
図２にはさらに、フォンシェーディングを行う場合にこれらのシェーダで行う計算の例を示している。
頂点シェーダ１にはあらかじめ座標系の変換用行列MVP,N,MVおよび視野座標系における光源ベクトルｌが設定される。
頂点パラメータとして頂点のオブジェクト空間での座標xyzwin、法線ベクトルninが入力されると、頂点シェーダ１はxyzwinの座標系を変換しxyzwとしてラスタライザ２に出力する。また、視野座標系における法線ベクトルｎ、ハーフベクトルｈを計算し出力する。
【０００７】
ラスタライザ２は、座標系xyzw、法線ベクトルｎ、ハーフベクトルｈをピクセル単位の値に線形補間し、ピクセルシェーダ３に出力する。
ピクセルシェーダ３にはあらかじめ拡散係数Kd、鏡面反射係数Ksおよび鏡面率shininess、環境光成分Caおよび視野座標系における光源ベクトルｌが設定される。
ピクセルパラメータとして視野座標系における法線ベクトルｎ、ハーフベクトルｈがピクセルシェーダ３に入力されると、この値を用いて、拡散光成分Cd、鏡面反射光成分Csを計算し、Cd、Cs、Caを加算することによって、描画色Cを得ることができる。
【０００８】
実際には、頂点シェーダ１、ラスタライザ２、ピクセルシェーダ３などのH/Wブロックは、レジスタ数やラスタライズ可能なパラメータ数、一度に利用できるテクスチャ数などに制限があるため、仮想的に無限のリソースを取り扱えるようにするためには何らかの仕組みが必要となる。
【０００９】
図３は、上記仕組みを実現する手法の例を２パスの場合について示している。
図３はピクセルシェーダのプログラムがH/Wのリソース量をこえるような場合を示しており、この場合、複数パスでの描画を行い、パス間に中間パラメータを保存するようなＦＩＦＯ４を介在させることによって、仮想的に無限のリソースを取り扱うピクセルシェーダを実現できる。
ただし、ＦＩＦＯ４は実際には有限であり、有限個の中間データしか格納できない。そのため、ラスタライザ２は出力ピクセル数をカウントし、カウントした分のピクセルのみ後段に流す仕組みを所持する。ラスタライザ２はＦＩＦＯ４がフルになる個数のピクセルを発生した場合はフル通知をコントローラ５に発生する。
一方、ＦＩＦＯ４がフルにならないで全てのピクセルを発生完了した場合は、完了通知をコントローラ５に発生する。
コントローラ５は、フル通知あるいは完了通知を受けて、頂点パラメータ読み込み部６−１，６−２に頂点パラメータの読み込みを依頼する。
【００１０】
以下この処理についてより具体的に記述する。
全体のシステムはコントローラ５により動作が制御される。この動作は以下の通りに実行される。
【００１１】
(1)コントローラ５は、完全にパイプラインが空くのを待って、１パス目の設定を各H/Wブロックに対して行った後、頂点パラメータ読み込み部６−１に対して、１パス目の頂点パラメータの読み込みをリクエストする。１パス目の設定には、たとえば頂点シェーダ１−１やピクセルシェーダ３−１のプログラム、ラスタライザ２−１の補間パラメータ数といった設定が含まれる。
【００１２】
(2)頂点パラメータ読み込み部６−１はリクエストに応じて、メモリ上の頂点パラメータを読み込む。また頂点パラメータの最後には、これが最後ということが分かるデリミタをつける。これは(3)においてラスタライザ２−１が最後のピクセル発生時に完了通知を作成するために必要となる。
【００１３】
(3)頂点シェーダ１−１は頂点パラメータが入力されると、１パス目のプログラムを実行し、その結果をラスタライザ２−１へ入力する。
【００１４】
(4)ラスタライザ２−１はＦＩＦＯ４がオーバーフローするピクセル数（以下ではNピクセルとする）をあらかじめ設定されており、このピクセル数Nをこえてピクセルを発生しようとするとフルの通知をコントローラ５に発行する。また、これ以降のピクセルはラスタライザ２−１から後段へは発行しない。一方、フルに達せずに、全てのピクセルが発行し終わった場合は、完了通知をコントローラ５に発行する。
【００１５】
(5)ピクセルシェーダ３−１は、１パス目の実行を行い、中間結果をＦＩＦＯ４に保存していく。(4)の制御によってＦＩＦＯ４はオーバーフローしないようになっている。
【００１６】
(6)コントローラ５はフルの通知を受けた場合、完全にパイプラインが空くのを待って、２パス目の設定を行った後、頂点パラメータ読み込み部６−２に対して、２パス目の頂点パラメータの読み込みをリクエストする。
なお、この設定の中には、ラスタライザ２の状態のリセット（再度ピクセルを発行するようにする）も含まれる。
【００１７】
(7)頂点シェーダ１−２は頂点パラメータが入力されると、２パス目のプログラムを実行し、その結果をラスタライザ２−２へ入力する。
【００１８】
(8)ラスタライザ２−２は１パス目と同様に、あらかじめ設定されたピクセル数Nをこえるとコントローラにフルを発生する。同時にこれ以降のピクセルはラスタライザ２−２からは発行しない。
【００１９】
(9)ピクセルシェーダ３−１は２パス目の実行を行う。このとき１パス目の計算結果をＦＩＦＯ４から取得する。また、最終計算結果をフレームバッファに格納する。
【００２０】
(10)コントローラ５はラスタライザ２−２に、すでに処理が完了している先頭のNピクセルをスキップするように設定をし、その後１パス目から(1)〜(9)の処理を繰り返す。
【００２１】
(11)全てのピクセルの処理がオーバーフローせずに完了した場合、ラスタライザ２−２はコントローラ５に完了通知を行う。コントローラ５は２パス目までオーバーフローせずに完了したならば、描画処理を終了する。
【００２２】
このような処理を施すことによって、仮想的に無限長のピクセルシェーダを実現することが可能となる。
【００２３】
図４は、このときの１パス目、２パス目の処理の時間経過を示している。各パスをNピクセルでスライスして順番に実行する。
【００２４】
図５は、図２に示した処理を図３のように２パスで実行する場合の例を具体的に示す図である。
【００２５】
１パス目では頂点シェーダ１−１にはあらかじめ座標系の変換用行列MVP,Nが設定される。
頂点パラメータとして頂点のオブジェクト空間での座標xyzwin、法線ベクトルｎinが入力されると、頂点シェーダ１−１はxyzwinの座標系を変換しxyzwとしてラスタライザ２−２に出力する。また視野座標系における法線ベクトルｎを計算し出力する。
ラスタライザ２−１は，xyzw、nをピクセル単位の値に線形補間し、ピクセルシェーダ３−１に出力する。
ピクセルシェーダ３−１にはあらかじめ拡散係数Kdおよび視野座標系における光源ベクトルｌが設定される。
ピクセルパラメータとして視野座標系における法線ベクトルｎがピクセルシェーダ３−１に入力されると、この値を用いて、拡散光成分Cdを得る。Cdと正規化した法線ベクトルｎを中間パラメータとしてＦＩＦＯ４に格納する。
【００２６】
２パス目では頂点シェーダ１−２にはあらかじめ座標系の変換用行列MVP,N,MVおよび視野座標系における光源ベクトルｌが設定される。
頂点パラメータとして頂点のオブジェクト空間での座標xyzwinが入力されると、頂点シェーダ１−２はxyzwinの座標系を変換しxyzwとしてラスタライザ２−２に出力する。また視野座標系におけるハーフベクトルｈを計算し出力する。
ラスタライザ２−２は、xyzw、hをピクセル単位の値に線形補間し、ピクセルシェーダ３−２に出力する。
ピクセルシェーダ３−２にはあらかじめ鏡面反射係数Ksおよび鏡面率shininess、環境光成分Caが設定される。
ピクセルパラメータとして視野座標系におけるハーフベクトルｈがピクセルシェーダ３−１に入力されると同時にＦＩＦＯ４から拡散光成分Cd、法線ベクトルｎ'が入力される。
これらの値を用いて、鏡面反射光成分Csを計算し、Cd、Cs、Caを加算することによって、描画色Cを得ることができる。
【００２７】
なおこの場合、頂点数や頂点パラメータに含まれる頂点座標および頂点シェーダにおける座標変換処理についてはパス間で同一であるとする。図３や図５の場合、もしも２つのパスで頂点数、頂点パラメータ中の頂点座標および座標変換処理が異なると、ＦＩＦＯの送り側、受け側の対応が破綻してしまう。
【発明の開示】
【発明が解決しようとする課題】
【００２８】
前述した制御手法では、以下に述べるような性能面での問題がある。
【００２９】
各パスは常に頂点パラメータの先頭から読み込みを開始するため、常に頂点シェーダは先頭の頂点から動作を行うことになる。フルを繰り返す回数が増加すると、本来は必要がない頂点の処理を繰り返し行うため、処理速度は大幅に低下する。
【００３０】
パスを切り替える際に、各H/Wブロックの設定を行うために、パイプラインが全て空くことを待つ必要がある。このため、パスの切り替え時にオーバーヘッドが発生する。
たとえフルが発生しない場合であっても、パスの切り替え時にパイプラインに空きが発生しオーバーヘッドが発生する。これは非常に小さいオブジェクトを大量に描画するような際に問題となる。
フル発生後も、頂点パラメータ読み込み部にリクエストされた全ての頂点パラメータは投入され続け処理を行われる。従って、これによるパスの切り替えのオーバーヘッドが発生する。
フルの検知はラスタライザの出力段で行われるため、頂点の入力からラスタライザの出力までのパイプラインの段数分のオーバーヘッドが発生する。
【００３１】
図６は、従来手法におけるオーバーヘッドを示している。
パスＰ１で最初にＮピクセルの発生をラスタライザ２−１が検知すると、フル通知をコントローラ５に発生する。これは実際には頂点シェーダ１−１の入り口からラスタライザ２−１の出口までのパイプライン段数のオーバーヘッド分遅れてコントローラ５に通知されることになる（上記(5)のオーバーヘッド）。
これに続いてパスＰ２の最初のＮピクセルの処理を行うが、これはパスＰ１の全てのピクセルが処理されてからとなる（実際にはラスタライザでピクセルは破棄するが、ラスタライザまで全ての頂点パラメータは入力される）。（上記(4)のオーバーヘッド）。
【００３２】
図７および図８は、従来手法におけるオーバーヘッドが発声する場合を模式的に示す図である。
図７において、フルが発生された後も、後続する頂点列の処理が続くため、より多くオーバーヘッドが発生する。
またパスＰ２の入力を行う前にパスＰ２の設定を行うが、パイプラインの中に全くデータが入っていないことを検知してから行う必要がある（上記(2)のオーバーヘッド）。
パスＰ２の処理が完了してから、パスＰ１の次のＮピクセルの処理を行うが、この場合も頂点パラメータは先頭頂点から与えるため、先頭に無駄な頂点パラメータの処理が行われてしまう（上記(1)のオーバーヘッド）。
【００３３】
図８において、オブジェクトが小さいため、フルの通知がない場合であっても、パイプライン起因のオーバーヘッドが発生する（上記(3)のオーバーヘッド）。
これは完了通知はラスタライザの出力段で発行されるため、頂点の入力段からラスタライザの出力段までのパイプラインの段数分のオーバーヘッドが発生するためである。
【００３４】
本発明は、パスの切り替えのオーバーヘッドを低減することが可能で、高速にマルチパスの切り替えを行えることができる画像処理装置およびその方法、並びにプログラムを提供することにある。
【課題を解決するための手段】
【００３５】
本発明の第１の観点の画像処理装置は、リクエストに応答して頂点パラメータを読み込む頂点パラメータ読み込み部と、読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点シェーダと、頂点シェーダの処理結果をピクセル単位に変換するラスタライザと、上記ラスタライザの出力に対してピクセル単位の処理を行うピクセルシェーダと、上記ピクセルシェーダの処理結果が記憶されるメモリと、上記ラスタライザからの通知に応じて上記頂点パラメータ読み込み部へのリクエストを制御するコントローラと、を有し、上記ラスタライザは、フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号をコントローラに通知する機能を有し、停止したピクセル位置も知る機能を含む。
【００３６】
好適には、上記コントローラは、頂点番号をもとに、上記頂点パラメータ読み込み部にリクエストする際に、開始頂点番号と終了頂点番号あるいは開始頂点番号と頂点数を設定する機能を有する。
【００３７】
好適には、各ハードウェアブロックの設定は描画パイプライン上を流れる。
【００３８】
好適には、上記コントローラは、あるパスの頂点パラメータのリクエストが終了したらすぐに、あらかじめ次のパスの頂点パラメータをリクエストする。
【００３９】
好適には、上記ラスタライザからのフル通知がコントローラに発行された場合、上記コントローラは、再度次のパスの頂点パラメータから流しなおす、一方、フルが発生しない場合、先行して投入されたパスがそのまま処理されるように制御する。
【００４０】
好適には、上記コントローラおよび頂点パラメータ読み込み部は、頂点パラメータ読み込みのキャンセル機能を有する。
【００４１】
好適には、上記ラスタライザは、フル発生の手前のあらかじめ指定されたピクセル数で、プレフル通知を上記コントローラに行うことができる。
【００４２】
好適には、上記ラスタライザは、プレフルが発生した後もピクセルの発生は継続する一方、フルに達した場合には、ピクセルの発生を停止する。
【００４３】
好適には、プレフルを通知されると、上記コントローラは、ただちに上記頂点パラメータ読み込み部にキャンセルを発行する一方、上記頂点パラメータ読み込み部は、投入完了した頂点番号を上記コントローラに伝える機能を有する。
【００４４】
好適には、上記ラスタライザは、実際に処理を行ったピクセルの位置を記憶しておき、次のパスの実行時には、外部から設定を行うことなく、その位置までのピクセルの発行を行う。
【００４５】
好適には、上記メモリに格納されたテクスチャデータによりテクスチャ処理を行うテクスチャユニットを有する。
【００４６】
本発明の第２の観点の画像処理方法は、リクエストに応答して頂点パラメータを読み込む頂点パラメータ読み込みステップと、読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点処理ステップと、頂点シェーダの処理結果をピクセル単位に変換するラスタライズ処理ステップと、上記ラスタライザの出力に対してピクセル単位の処理を行うピクセル処理ステップと、上記ピクセルシェーダの処理結果が記憶されるステップと、上記ラスタライズ処理ステップからの通知に応じて上記頂点パラメータ読み込みステップへのリクエストを制御する制御ステップと、有し、上記ラスタライズ処理ステップは、フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号を制御ステップに通知するステップと、停止したピクセル位置も知るステップと、を含む。
【００４７】
本発明の第３の観点は、リクエストに応答して頂点パラメータを読み込む頂点パラメータ読み込み処理と、読み込まれた頂点パラメータを用いて頂点単位の処理を行う頂点処理と、頂点シェーダの処理結果をピクセル単位に変換するラスタライズ処理と、上記ラスタライザの出力に対してピクセル単位の処理を行うピクセル処理と、上記ピクセルシェーダの処理結果が記憶される記憶処理と、上記ラスタライズ処理ステップからの通知に応じて上記頂点パラメータ読み込みステップへのリクエストを制御する制御処理と、有し、上記ラスタライズ処理は、フル発生時にそれ以降のピクセルの発行を停止し、停止した頂点番号を制御ステップに通知するステップと、停止したピクセル位置も知るステップと、を含む。
【００４８】
本発明によれば、リクエストに応答して読み込む頂点パラメータ読み込み部により頂点パラメータを読み込む頂点パラメータが読み込まれる。
頂点シェーダにおいて、読み込まれた頂点パラメータを用いて頂点単位の処理が行われ、ラスタライザで頂点シェーダの処理結果がピクセル単位に変換され、ピクセルシェーダでラスタライザの出力に対してピクセル単位の処理が行われる。
そして、ラスタライザにおいては、フル発生時にそれ以降のピクセルの発行が停止され、停止した頂点番号がコントローラに通知される。ラスタライザは、このとき、停止したピクセル位置も知ることができる。
【発明の効果】
【００４９】
本発明によれば、パスの切り替えのオーバーヘッドを低減することが可能で、高速にマルチパスの切り替えを行えることができる。
【発明を実施するための最良の形態】
【００５０】
以下、本発明の実施の形態を図面に関連付けて説明する。
【００５１】
図９は、本発明の実施形態に係る画像処理装置の構成を示すブロック図である。
【００５２】
本画像処理装置１０は、２パスＰ１、Ｐ２に対応し、図９に示すように、頂点シェーダ１１−１，１１−２、ラスタライザ１２−１，１２−２、ピクセルシェーダ１３−１，１３−２、ＦＩＦＯ１４、コントローラ１５、および頂点パラメータ読み込み部１６−１，１６−２を有する。
【００５３】
図９に示すように、本画像処理装置１０のラスタライザ１２−１，１２−２は、フル発生時に、フル発生した頂点番号をコントローラ１５に通知する仕組みを有する。また、同時にラスタライザ１２−１，１２−２はフル発生したピクセル位置も知る機能を有する。
【００５４】
コントローラ１５は、頂点番号をもとに、頂点パラメータ読み込み部１６−１，１６−２にリクエストする際に、開始頂点番号と終了頂点番号（あるいは頂点番号と頂点数）を設定する機能を有する。
【００５５】
図１０および図１１は、従来（図３）と本実施形態とのフル発生時の処理を対比して示す図であって、図１０は従来の場合の処理を示し、図１１が本実施形態の処理を示す。
【００５６】
図１０ではフルが発生した場合、常に先頭の頂点から入力を行い直す。これはコントローラがどの頂点から入力し直せばよいかが分からなかったためである。これによって無駄な頂点処理が発生することになる。
【００５７】
これに対して、本実施形態においては、ラスタライザ１２−１，１２−２がフル発生時に頂点番号をコントローラ１５に通知することで、図１１に示すように、途中の頂点から入力することが可能となる。これによって無駄な頂点処理をなくすことが可能となっている。
【００５８】
また、パスを切り替える際に、各H/Wブロックの設定を行うために、パイプラインが全て空くことを待つ必要がある。このため、パスの切り替え時にオーバーヘッドが発生することがないように、図１２に示すように、本画像処理装置１０の各ブロック設定は、描画パイプライン上を流れるように設計する。
これによって、コントローラ１５はパイプラインの空きをチェックすることなく各ブロックの設定を行える。図１２において、設定A、データA、設定B、データBは入力された順にH/Wブロックに処理される。H/Wブロックで処理されたデータや後段へ出力される設定は入力順序を変えずに出力される。
H/Wブロックとしては、たとえば頂点シェーダ１１−１，１１−２、ラスタライザ１２−１，１２−２、ピクセルシェーダ１３−１，１３−２が含まれる。
【００５９】
図１３は、パスの切り替え時にオーバーヘッドが発生することがないようにするための従来のH/Wブロックの設定の方法を示す図である。
この場合、データと設定の入力のデータパスが異なる。このためコントローラはH/Wブロックの処理が完了し、パイプラインが開いたことを検知してから、はじめて設定を行うことになる。一般にH/Wブロックは複数パイプラインで構成されることが多いため、この処理にはオーバーヘッドが発生することになる。
【００６０】
図１４は、本実施形態において、図２に示した処理に関して、パスＰ１からパスＰ２に切り替える場合の例を示す図である。
図１４のようにデータと設定を混在して流すことで、上記オーバーヘッドをなくすことが可能となる。
【００６１】
図１５は、本実施形態に係る画像処理装置のコントローラが頂点パラメータのリクエストが終了したらすぐに、あらかじめ次のパスの頂点パラメータをリクエストする場合を示す図である。
図１６は、ラスタライザからのフル通知がコントローラに発行された場合を示す図である。
【００６２】
たとえフルが発生しない場合であっても、パスの切り替え時にパイプラインに空きが発生しオーバーヘッドが発生することを防止するために、本画像処理装置１０のコントローラ１５は、図１５に示すように、あるパスの頂点パラメータのリクエストが終了したらすぐに、あらかじめ次のパスの頂点パラメータをリクエストする。
このとき、図１６に示すように、コントローラ１５は再度、次のパスの頂点パラメータから流しなおす。一方、図１５はフルが発生しない場合を示す。このときは先行して投入されたパスがそのまま処理される。これによってフルが発生しない場合のパス切り替えオーバーヘッドを削減できる。
【００６３】
また、フル発生後も、頂点パラメータ読み込み部にリクエストされた全ての頂点パラメータは投入され続け処理を行われことによるパスの切り替えのオーバーヘッドが発生することを防止するために、本画像処理装置１０のコントローラ１５および頂点パラメータ読み込み部１６−１，１６−２は、図９に示すように、頂点読み込みのキャンセル機能を持つ。これによってフル発生後の、無駄な頂点パラメータがパイプラインを流れることを回避できる。
【００６４】
図１７はこの場合の動作を図７との対比で示している。
図７では後続する頂点列の処理のためオーバーヘッドが余計にかかっているが、図１７では頂点パラメータ読み込みのキャンセルを行うことで後続頂点パラメータの処理を少なくすることができる。
【００６５】
また、フルの検知はラスタライザの出力段で行われるため、頂点の入力からラスタライザの出力までのパイプラインの段数分のオーバーヘッドが発生することを防止するために、本画像処理装置１０のラスタライザ１２−１，１２−２は、フル発生の手前のあらかじめ指定されたピクセル数で、プレフル通知をコントローラ１５に行うことができる。
フルとは異なり、ラスタライザはプレフルが発生した後もピクセルの発生は継続する。コントローラ１５はプレフルが発生すると、直ちに頂点パラメータ読み込み部１６−１，１６−２にキャンセルを発行する。
頂点パラメータ読み込み部１６−１，１６−２は、キャンセルが完了後、投入完了した頂点番号をコントローラに通知する機能を有する。
コントローラ１５は、頂点パラメータ読み込み部１６−１，１６−２に対し、頂点パラメータの読み込みキャンセルした後、２パス目をすぐに投入する。
【００６６】
一方、ラスタライザ１２−１，１２−２は実際に処理を行ったところまでの頂点番号、ピクセル番号を記憶する機能を有する。以下この点についてより詳細に説明する。
【００６７】
ラスタライザ１２−１，１２−２は、ピクセルの開始位置や終了位置をピクセル単位で制御する。一方、コントローラ１５は頂点単位で投入を制御する。
図１８に関連付けてこの様子を説明する。なお、図１８は、トライアングル−ストリップ（TRIANGLE-STRIP）の描画を意図して示している。
【００６８】
図１８では、２つの三角形を描画する。その際、最初は２つ目の三角形の途中までを描画し、次は２つ目の三角形の途中から再開する。
このとき、コントローラ１５は、最初は頂点番号＜１＞から順番に投入し、次は頂点番号＜２＞から順番に投入する。ラスタライザ１２−１，１２−２はこの三角形の何番目のピクセルで処理を終了したか、あるいは何番目のピクセルから処理を再開するか、を知る必要がある。
すなわち，ラスタライザ１２−１，１２−２は、頂点番号、三角形内のピクセル番号のペアによって開始位置や終了位置を覚えておく。
【００６９】
頂点パラメータ読み込み部１６−１，１６−２が、投入完了した頂点番号をコントローラ１５に返す機能は性能上重要である。
ラスタライザ１２−１，１２−２でプレフルが発生した段階では、実際に処理されるピクセル数は確定しない。一方、次のパスの投入を行う際は、先頭の頂点番号と終了の頂点番号を頂点パラメータ読み込み部１６−１，１６−２に与える必要がある。
したがって、もしもラスタライザ１２−１，１２−２からこの情報を得ようとするならば、コントローラ１５はラスタライザ１２−１，１２−２からのフル通知あるいは完了通知を待つ必要がある。
頂点パラメータ読み込み部１６−１，１６−２から、投入済み頂点数を返すことで、このオーバーヘッドを低減することができる。
【００７０】
コントローラ１５は、ラスタライザ１２−１，１２−２のフル通知や完了通知を待たずに、次のパスの頂点パラメータを投入する。前述の通り、ラスタライザ１２−１，１２−２は先行するパスで、どこで終了したかを覚える機能を持っており、これによって、次のパスも同じピクセルで終了することが可能となる。
【００７１】
図１９および図２０にこの様子を模式的に示している。
図１９ではプレフルが発生してキャンセルを行ったが、その後ピクセル数はフルに達した場合である。この場合、２パス目で発生した頂点パラメータは実際に利用されるよりも多くなるが、フル以降のピクセルはラスタライザが後段に出力しないため、結果として２パス目もＮピクセルだけ後段に出力することになる。この結果、１パス目と２パス目で同じピクセル数が処理されることになる。
一方、図２０は、プレフルを受けてキャンセルした結果、発行されたピクセル数がフルに達しない場合である。この場合もやはり１パス目と２パス目で同じピクセル数が処理されることになる。
【００７２】
図２１は、本実施形態に係る画像処理装置の処理を説明するためのフローチャートである。
この例では、ピクセルシェーダが２パスに分割される場合を示す。
なお、ＦＩＦＯ１４に格納可能なピクセル数N、プレフルの発生するピクセル数Pとする。ここでP<Nとする。
また、コントローラ１５は以下の変数を管理するものとする。
開始頂点番号ｓ、
終了頂点番号ｅ、
ただし、ｓの初期値は０、ｅの初期値は∞とする。
【００７３】
（ステップＳＴ１１）
コントローラ１５は、１パス目に必要な各種H/Wブロックの設定を行う。
【００７４】
（ステップＳＴ１２）
コントローラ１５は、１パス目の頂点パラメータの投入を、頂点パラメータ読み込み部１６−１に依頼する。この際、開始頂点番号、終了頂点番号はそれぞれｓ、ｅとする。
【００７５】
（ステップＳＴ１３）
ラスタライザ１２−１はピクセル数がPに達したらプレフルをコントローラ１５に発行する。ラスタライザ１２−１はプレフルを発生後も、ピクセルは後段に発生する。ラスタライザ１２−１はプレフルを発生した場合、その後にフルあるいは完了通知をコントローラ１５に通知するが、その情報はコントローラ１５では利用しない。
ラスタライザ１２−１は、フルあるいは完了通知をコントローラに通知した後、終了時のピクセル位置を（頂点番号、ピクセル番号）のペアで記憶しておく。また、ラスタライザ１２−１は、それ以降のピクセルは後段に出力しない。
一方、ピクセル数がPに達しない場合は、最後のピクセルの処理を終了した段階で、完了通知をコントローラ１５に発行する。またラスタライザ１２−１は、終了時のピクセル位置を（頂点番号、ピクセル番号）のペアで記憶しておく。
【００７６】
（ステップＳＴ１４）
コントローラ１５は、プレフルを検知したら、すぐに頂点読み込み部をキャンセルする。そして、コントローラ１５は、キャンセル後投入された最終頂点番号Xを取得する。
【００７７】
（ステップＳＴ１５）
コントローラ１５は、２パス目に必要な各種H/Wブロックの設定を行う。この際はラスタライザ１２−２の初期化（すなわち再度ラスタライズを開始する設定）も同時に行う。ラスタライザ１２−２の終了ピクセルについては、ラスタライザ１２−２が自ら記憶しており、その結果はステップＳＴ１７でコントローラ１５が取得する。
【００７８】
（ステップＳＴ１６）
コントローラ１５は、２パス目の頂点パラメータの投入を、頂点パラメータ読み込み部１６−１に依頼する。この際、開始頂点番号、終了頂点番号はそれぞれｓ、ｅとする。ここでｅは以下のように計算することによって無駄な頂点パラメータの読み込みを減らすことができる。
（プレフル発生時）ｅ←X
（プレフル非発生時）ｅ←∞
【００７９】
（ステップＳＴ１７）
ラスタライザ１２−２は、ステップＳＴ１３の結果として記憶している終了時のピクセル位置まで実行し、完了通知をコントローラ１５に発行する。
この際、ラスタライザ１２−２は最終の頂点番号Yをコントローラ１５に与える。次の開始頂点位置、終了頂点位置を以下のように変更する。
ｓ←Y、ｅ←∞
【００８０】
（ステップＳＴ１８）
ステップＳＴ１３で、プレフルが発生した場合は次の頂点パラメータを投入するために、ステップＳＴ１１からやり直す。
一方、ステップＳＴ１３でプレフルが発生していない場合は、描画処理終了となる。
【００８１】
以上説明したように、本実施形態によれば、高速にパスの切り替えが可能となり、結果として、長いシェーダプログラムを限られたH/Wリソースの画像処理装置で実現することが可能となる。
また、本手法を用いることによって、長いシェーダプログラムの場合だけではなく、テクスチャマッピングなどのメモリアクセスにおけるメモリレイテンシーを隠蔽し、高速な描画を行うことが可能になる。
【００８２】
図２２は、ピクセルシェーダがテクスチャマッピングを行う一般的な手法を示す図である。ここで、ピクセルシェーダ１３はテクスチャアドレスを計算し、これをテクスチャユニット１７にリクエストする。テクスチャデータはピクセルシェーダ１３に戻り、ピクセルシェーダ１３はこのデータを利用して描画色を計算する。
ここで、一般にテクスチャはメモリに格納されるため、この取得には時間がかかる。したがって、ピクセルシェーダ１３はリクエストから、データ取得までの間ストールすることになる。これは全体の描画速度を大幅に低下させる。
【００８３】
図２３は、本実施形態に係るテクスチャマッピングをマルチパスを用いて描画する場合を示す図である。
【００８４】
テクスチャユニット１７との間にはＦＩＦＯ１４−１，１４−２を用意し、テクスチャリクエストあるいはテクスチャデータが保持できるとする。
この場合、ある程度の大きさのＦＩＦＯをメモリ上に確保すれば、ＦＩＦＯがオーバーフローしない範囲で、テクスチャマッピングはストールなしに２パスのプログラムとして動作することが可能となる。この場合、ＦＩＦＯを用いるため、オーバーフローの回避を行う必要があるが、これは本発明による手法を用いることにより比較的オーバーヘッドの少ない描画が可能になる。
【００８５】
なお、本実施形態では、２パスでの説明を中心に行ったが、２パス以上での描画についても同様に効果的に利用することができる。
また、本実施形態はピクセルシェーダを分割する説明を中心に行ったが、頂点シェーダを分割する際にも、ラスタライザからのフルやプレフル以外の機能については、同様にオーバーヘッドの低減に利用することが可能である。
【００８６】
また、以上詳細に説明した方法は、上記手順に応じたプログラムとして形成し、ＣＰＵ等のコンピュータで実行するように構成することも可能である。
また、このようなプログラムは、半導体メモリ、磁気ディスク、光ディスク、フロッピー（登録商標）ディスク等の記録媒体、この記録媒体をセットしたコンピュータによりアクセスし上記プログラムを実行するように構成可能である。
【図面の簡単な説明】
【００８７】
【図１】一般的な３次元画像処理装置における処理を簡略化して示す図である。
【図２】図１の処理を実現するハードウェアブロックを示す図である。
【図３】頂点シェーダ、ラスタライザ、ピクセルシェーダなどのH/Wブロックが２パスの場合の画像処理装置の構成例を示す図である。
【図４】１パス目、２パス目の処理の時間経過を示す図である。
【図５】図２に示した処理を図３のように２パスで実行する場合の例を具体的に示す図である。
【図６】従来手法におけるオーバーヘッドを示す図である。
【図７】従来手法におけるオーバーヘッドが発声する場合を模式的に示す図である。
【図８】従来手法におけるオーバーヘッドが発声する場合を模式的に示す図である。
【図９】本発明の実施形態に係る画像処理装置の構成を示すブロック図である。
【図１０】従来（図３）と本実施形態とのフル発生時の処理を対比して示す図であって、従来の場合の処理を示す図である。
【図１１】従来（図３）と本実施形態とのフル発生時の処理を対比して示す図であって、本実施形態の処理を示す図である。
【図１２】本画像処理装置の各ブロック設定が、描画パイプライン上を流れるように設計されることを説明するための図である。
【図１３】パスの切り替え時にオーバーヘッドが発生することがないようにするための従来のH/Wブロックの設定の方法を示す図である。
【図１４】本実施形態において、図２に示した処理に関して、パスＰ１からパスＰ２に切り替える場合の例を示す図である。
【図１５】本実施形態に係る画像処理装置のコントローラが頂点パラメータのリクエストが終了したらすぐに、あらかじめ次のパスの頂点パラメータをリクエストする場合を示す図である。
【図１６】ラスタライザからのフル通知がコントローラに発行された場合を示す図である。
【図１７】本実施形態の動作を図７との対比で示す図である。
【図１８】トライアングル−ストリップ（TRIANGLE-STRIP）の描画を意図して示す図である。
【図１９】プレフルが発生してキャンセルを行ったが、その後ピクセル数はフルに達した場合を示す図である。
【図２０】プレフルを受けてキャンセルした結果、発行されたピクセル数がフルに達しない場合を示す図である。
【図２１】本実施形態に係る画像処理装置の処理を説明するためのフローチャートである。
【図２２】ピクセルシェーダがテクスチャマッピングを行う一般的な手法を示す図である。
【図２３】本実施形態に係るテクスチャマッピングをマルチパスを用いて描画する場合を示す図である。
【符号の説明】
【００８８】
１０・・・画像処理装置、１１−１，１１−２・・・頂点シェーダ、１２−１，１２−２・・・ラスタライザ、１３−１，１３−２・・・ピクセルシェーダ、１４,１４−１，１４−２・・・ＦＩＦＯ、１５・・・コントローラ、１６−１，１６−２・・・頂点パラメータ読み込み部、１７・・・テクスチャユニット。
【図１】
2008282256.tif 000003
【図２】
2008282256.tif 000004
【図３】
2008282256.tif 000005
【図４】
2008282256.tif 000006
【図５】
2008282256.tif 000007
【図６】
2008282256.tif 000008
【図７】
2008282256.tif 000009
【図８】
2008282256.tif 000010
【図９】
2008282256.tif 000011
【図１０】
2008282256.tif 000012
【図１１】
2008282256.tif 000013
【図１２】
2008282256.tif 000014
【図１３】
2008282256.tif 000015
【図１４】
2008282256.tif 000016
【図１５】
2008282256.tif 000017
【図１６】
2008282256.tif 000018
【図１７】
2008282256.tif 000019
【図１８】
2008282256.tif 000020
【図１９】
2008282256.tif 000021
【図２０】
2008282256.tif 000022
【図２１】
2008282256.tif 000023
【図２２】
2008282256.tif 000024
【図２３】
2008282256.tif 000025