(57)【特許請求の範囲】
【請求項１】
表示領域が分割された部分領域のそれぞれについて、２次元領域と重なる複数のピクセルからなるピクセル群を決定するラスタライザと、
前記２次元領域の各位置について色計算情報を格納するメモリと、
前記複数のピクセル群に属するピクセルを、複数の処理グループであってそれぞれ所定の並列数以下のピクセルを含むことができる処理グループのいずれかに割り当てる割当部と、
前記メモリに格納された色計算情報に基づいて、前記処理グループに属するピクセルのそれぞれの色を並列に算出する並列演算ユニットと、
前記算出された色に基づいて、画像のデータを出力する画像生成部と、
を含み、
前記割当部は、前記ピクセル群のそれぞれについて、当該ピクセル群に属するピクセルが割当てられる処理グループの数が、必要最小数になるように、前記ピクセルを複数の処理グループのうち少なくとも１つに割り当てる、
画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において、
前記メモリに連続して格納される前記色計算情報の位置は、互いに離間していない、
画像処理装置。
【請求項３】
請求項１または２に記載の画像処理装置において、
前記割当部は、処理グループに割り当てられたピクセルの数が前記所定の並列数より小さく、かつ前記所定の並列数から前記割り当てられたピクセルの数を引いた数が他のピクセル群に属する未割当のピクセルの数より大きい場合は、前記他のピクセル群に属するピクセルを前記処理グループに割り当てる、
画像処理装置。
【請求項４】
請求項１または２に記載の画像処理装置において、
前記割当部は、
直前にピクセルが割り当てられた処理グループに属するピクセルの数を前記並列数から引いた数を空き数として求め、
次のピクセル群に属するピクセルの数を並列数で割った余りが前記空き数より小さい場合に、前記余りの数のピクセルを最近にピクセルが割り当てられた前記処理グループに割り当て、
次のピクセル群に属するピクセルの数を並列数で割った余りが前記空き数より大きい場合に、新たな１または複数の処理グループに、前記次のピクセル群に属するピクセルを割り当てる、
画像処理装置。
【請求項５】
請求項１または２に記載の画像処理装置において、
前記割当部は、
ピクセルの数が並列数より大きいピクセル群に含まれる並列数のピクセルをそれぞれ処理グループに割り当て、
未割当のピクセルを有する前記ピクセル群のうちいずれかのピクセルの数が処理グループの空き数以下の場合に、当該処理グループに前記いずれかのピクセル群に属する未割当のピクセルを割り当て、
未割当のピクセルを有する前記ピクセル群のうちいずれのピクセルの数も処理グループの空き数より大きい場合に、前記ピクセル群のうちいずれかのピクセルが割り当てられる新たな処理グループを生成する、
画像処理装置。
【請求項６】
２次元領域の各位置について色計算情報を格納するメモリと、前記メモリに格納された色計算情報に基づいて、複数の処理グループであってそれぞれ所定の並列数以下のピクセルを含むことができる処理グループに属するピクセルのそれぞれの色を並列に算出する並列演算ユニットと、を含む装置の画像処理方法であって、
表示領域が分割された部分領域のそれぞれについて、２次元領域と重なる複数のピクセルからなるピクセル群を決定するステップと、
前記複数のピクセル群に属するピクセルを、前記複数の処理グループのいずれかに割り当てるステップと、
前記並列演算ユニットにより算出された色に基づいて、画像のデータを出力するステップと、
を含み、
前記ピクセルを割り当てるステップでは、前記ピクセル群のそれぞれについて、当該ピクセル群に属するピクセルが割当てられる処理グループの数が、必要最小数になるように、前記ピクセルを複数の処理グループのうち少なくとも１つに割り当てる、
画像処理方法。
【請求項７】
２次元領域の各位置について色計算情報を格納するメモリと、前記メモリに格納された色計算情報に基づいて、複数の処理グループであってそれぞれ所定の並列数以下のピクセルを含むことができる処理グループに属するピクセルのそれぞれの色を並列に算出する並列演算ユニットと、を含み、前記並列演算ユニットにより算出された色に基づいて画像のデータを出力するコンピュータに、
表示領域が分割された部分領域のそれぞれについて、２次元領域と重なる複数のピクセルからなるピクセル群を決定するステップと、
前記複数のピクセル群に属するピクセルを、複数の処理グループのいずれかに割り当てるステップと、
を実行させ、
前記ピクセルを割り当てるステップでは、前記ピクセル群のそれぞれについて、当該ピクセル群に属するピクセルが割当てられる処理グループの数が、必要最小数になるように、前記ピクセルを複数の処理グループのうち少なくとも１つに割り当てる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は画像処理装置、画像処理方法およびプログラムに関する。
【背景技術】
【０００２】
近年は、高精細な３次元画像をディスプレイに表示させるために、ＧＰＵ（Graphic Processing Unit）の処理速度が重要になっている。【０００３】
一般的なＧＰＵは、表示領域を複数のタイルに分割し、そのタイルのそれぞれと、例えば三角形のようなプリミティブの領域と、が重なる領域に存在するピクセルを抽出している。そして、ＧＰＵは抽出されたピクセルを複数の並列処理のグループのいずれかに割り当て、そのグループごとに並列にテクスチャマッピングやバンプマッピングといった処理をして各ピクセルの色を算出する。【０００４】
特許文献１には、プリミティブが表示されるスクリーンが複数のブロックに分割され、複数のブロックのそれぞれがビンに対応づけられること。ＧＰＵが、プリミティブと重なるビンを検出し、ビンに属するピクセルをユニファイドシェーダーシステムに処理させることが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１４／０２９２７５６号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例えばテクスチャマッピングやバンプマッピングのように、色を計算するためのデータを複数の位置についてメモリに格納し、そのデータを用いてピクセルの色を求める場合、並列度を上げても処理時間があまり短縮されない場合がある。【０００７】
本発明は上記課題を鑑みてなされたものであり、その目的は、色を計算するためのデータを用いてピクセルの色を計算する処理の速度を向上させることである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明にかかる画像処理装置は、表示領域が分割された部分領域のそれぞれについて、２次元領域と重なる複数のピクセルからなるピクセル群を決定するラスタライザと、前記２次元領域の各位置について色計算情報を格納するメモリと、前記複数のピクセル群に属するピクセルを、複数の処理グループであってそれぞれ所定の並列数以下のピクセルを含むことができる処理グループのいずれかに割り当てる割当部と、前記メモリに格納された色計算情報に基づいて、前記処理グループに属するピクセルのそれぞれの色を並列に算出する並列演算ユニットと、前記算出された色に基づいて、画像のデータを出力する画像生成部と、を含む。前記割当部は、前記ピクセル群のそれぞれについて、当該ピクセル群に属するピクセルが割当てられる処理グループの数が、必要最小数になるように、前記ピクセルを複数の処理グループのうち少なくとも１つに割り当てる。【０００９】
また、本発明にかかる画像処理方法は、２次元領域の各位置について色計算情報を格納するメモリと、前記メモリに格納された色計算情報に基づいて、複数の処理グループであってそれぞれ所定の並列数以下のピクセルを含むことができる処理グループに属するピクセルのそれぞれの色を並列に算出する並列演算ユニットと、を含む装置の画像処理方法であって、表示領域が分割された部分領域のそれぞれについて、２次元領域と重なる複数のピクセルからなるピクセル群を決定するステップと、前記複数のピクセル群に属するピクセルを、前記複数の処理グループのいずれかに割り当てるステップと、前記並列計算ユニットにより算出された色に基づいて、画像のデータを出力するステップと、を含む。前記ピクセルを割り当てるステップでは、前記ピクセル群のそれぞれについて、当該ピクセル群に属するピクセルが割当てられる処理グループの数が、必要最小数になるように、前記ピクセルを複数の処理グループのうち少なくとも１つに割り当てる。【００１０】
また、本発明にかかるプログラムは、２次元領域の各位置について色計算情報を格納するメモリと、前記メモリに格納された色計算情報に基づいて、複数の処理グループであってそれぞれ所定の並列数以下のピクセルを含むことができる処理グループに属するピクセルのそれぞれの色を並列に算出する並列演算ユニットと、を含み、前記並列計算ユニットにより算出された色に基づいて画像のデータを出力するコンピュータに、表示領域が分割された部分領域のそれぞれについて、２次元領域と重なる複数のピクセルからなるピクセル群を決定するステップと、前記複数のピクセル群に属するピクセルを、複数の処理グループのいずれかに割り当てるステップと、を実行させる。前記ピクセルを割り当てるステップでは、前記ピクセル群のそれぞれについて、当該ピクセル群に属するピクセルが割当てられる処理グループの数が、必要最小数になるように、前記ピクセルを複数の処理グループのうち少なくとも１つに割り当てる。【００１１】
本発明によれば、色を計算するためのデータを用いてピクセルの色を計算する処理の速度を向上させることができる。【００１２】
本発明の一形態では、前記メモリに連続して格納される前記色計算情報の位置は、互いに離間していなくてよい。【００１３】
本発明の一形態では、前記割当部は、処理グループに割り当てられたピクセルの数が前記所定の並列数より小さく、かつ前記所定の並列数から前記割り当てられたピクセルの数を引いた数が他のピクセル群に属する未割当のピクセルの数より大きい場合は、前記他のピクセル群に属するピクセルを前記処理グループに割り当ててよい。【００１４】
本発明の一形態では、前記割当部は、直前にピクセルが割り当てられた処理グループに属するピクセルの数を前記並列数から引いた数を空き数として求め、次のピクセル群に属するピクセルの数を並列数で割った余りが前記空き数より小さい場合に、前記余りの数のピクセルを最近にピクセルが割り当てられた前記処理グループに割り当て、次のピクセル群に属するピクセルの数を並列数で割った余りが前記空き数より大きい場合に、新たな１または複数の処理グループに、前記次のピクセル群に属するピクセルを割り当ててよい。【００１５】
本発明の一形態では、前記割当部は、ピクセルの数が並列数より大きいピクセル群に含まれる並列数のピクセルをそれぞれ処理グループに割り当て、未割当のピクセルを有する前記ピクセル群のうちいずれかのピクセルの数が処理グループの空き数以下の場合に、当該処理グループに前記いずれかのピクセル群に属する未割当のピクセルを割り当て、未割当のピクセルを有する前記ピクセル群のうちいずれのピクセルの数も処理グループの空き数より大きい場合に、前記ピクセル群のうちいずれかのピクセルが割り当てられる新たな処理グループを生成してよい。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態にかかる画像処理装置のハードウェア構成の一例を示す図である。
【図２】画像処理装置が行う処理の一例を概略的に示すフロー図である。
【図３】表示領域内に生成されるプリミティブの一例を示す図である。
【図４】パターンとプリミティブとの対応の一例を示す図である。
【図５】コントローラがピクセルを並列処理グループに割り当てる処理の一例を示すフロー図である。
【図６】並列処理グループへのピクセルの割り当ての一例を説明する図である。
【図７】並列処理グループへのピクセルの割り当ての比較例を示す図である。
【図８】並列処理グループへのピクセルの割り当ての他の一例を説明する図である。
【図９】並列処理グループへのピクセルの割り当ての他の一例を説明する図である。
【図１０】並列演算器が担当する領域の一例を示す図である。
【図１１】コントローラがピクセルを並列処理グループに割り当てる処理の他の一例を示すフロー図である。
【図１２】並列処理グループへのピクセルの割り当ての一例を説明する図である。
【発明を実施するための形態】
【００１７】
以下では、本発明の実施形態について図面に基づいて説明する。出現する構成要素のうち同一機能を有するものには同じ符号を付し、その説明を省略する。
【００１８】
図１は、本発明の実施形態にかかる画像処理装置１のハードウェア構成の一例を示す図である。画像処理装置１は、パーソナルコンピュータや家庭用ゲーム機、またはタブレット端末などである。画像処理装置１は、主プロセッサ１１、画像処理ユニット１２、メモリコントローラ１３、入出力ユニット１４、ＤＲＡＭ（Dynamic Random Access Memory）１６、表示信号生成部１８を含む。
【００１９】
主プロセッサ１１は、ＤＲＡＭ１６に格納されているプログラムに従って動作し、画像処理ユニット１２、入出力ユニット１４等を制御する。なお、上記プログラムは、フラッシュメモリ等のコンピュータで読み取り可能な記憶媒体に格納されて提供されるものであってもよいし、インターネット等のネットワークを介して提供されるものであってもよい。
【００２０】
画像処理ユニット１２は、いわゆるＧＰＵの主要機能を実現する部分である。画像処理ユニット１２は、頂点管理部２１、ラスタライザ２２、コントローラ２３、ＲＯＰユニット２４、シェーダーユニット２５を含む。
【００２１】
頂点管理部２１は、３次元のローカル座標をグローバル座標に変換する処理や、３次元の座標から、視点からみた場合の表示平面上の２次元座標を生成する処理をシェーダーユニット２５と連携して行う。これにより、頂点管理部２１は３次元の形状が変換された２次元の領域を生成している。
【００２２】
ラスタライザ２２は、生成された２次元座標に基づいて、表示領域が分割された部分領域（以下では「タイル」と表記する）のそれぞれについて、そのタイルに属するピクセルのうちその２次元の領域と重なる複数のピクセルからなるピクセル群を決定する。以下では、あるタイルについて決定されたピクセル群に属するピクセルのことを、そのタイルに属するピクセルと記載する。
【００２３】
コントローラ２３は、ラスタライザ２２が決定した各タイルのピクセル群に基づいて、そのピクセル群に属するピクセルの色を算出する処理を、シェーダーユニット２５と連携して行う。なお、コントローラ２３は、汎用的なプログラムを実行するプロセッサであってもよいし、プログラムにより、頂点管理部２１に相当する動作をしてもよい。
【００２４】
シェーダーユニット２５は、複数の並列演算器２７を含む。並列演算器２７のそれぞれは、一つのインストラクションに対して予め定められた数（以下、「並列数Ｐ」と表記する）の処理を並列に行うことができる。並列演算器２７は、いわゆるＳＩＭＤの演算装置である。シェーダーユニット２５は、頂点管理部２１の制御により、３次元の座標をある視点からみた場合の表示平面上の２次元の座標に変換する。また、シェーダーユニット２５は、コントローラ２３の制御により、ＤＲＡＭ１６内のデータにアクセスし、２次元の領域を構成するピクセルの色を計算する。シェーダーユニット２５は、キャッシュメモリを有していてもよい。
【００２５】
ＲＯＰユニット２４は、コントローラ２３およびシェーダーユニット２５により算出された、複数の２次元領域についてのピクセルの色に基づいて、複数の２次元領域の画像を合成し、表示画像のデータをいわゆるフレームバッファに出力する。
【００２６】
なお、画像処理ユニット１２は、頂点管理部２１、ラスタライザ２２、コントローラ２３、ＲＯＰユニット２４、シェーダーユニット２５のセットを、複数含んでいてもよい。
【００２７】
メモリコントローラ１３は、主プロセッサ１１からＤＲＡＭ１６への読み書きのアクセスや、画像処理ユニット１２からＤＲＡＭ１６への読み書きのアクセスを制御する。メモリコントローラ１３は、主プロセッサ１１や画像処理ユニット１２がアクセスするアドレスをＤＲＡＭ１６のアクセス先を特定する信号（ローやカラム）に変換する。またメモリコントローラ１３は変換された信号により特定されるＤＲＡＭ１６内の位置にあるデータを読み出し、ＤＲＡＭ１６内のその位置にデータを書き込む。図示しないが、メモリコントローラ１３は、より高速に動作するキャッシュメモリと接続されている。キャッシュメモリにより、繰り返しアクセスされるデータを高速に読み出すことが可能になる。
【００２８】
入出力ユニット１４は、主プロセッサ１１と、図示しない通信デバイスおよび入出力デバイスとを接続する。通信デバイスは例えば有線ＬＡＮを構成する集積回路や端子、無線ＬＡＮを構成する集積回路やアンテナを含み、入出力デバイスはキーボードやポインティングデバイス、オーディオデバイスを含む。
【００２９】
なお、主プロセッサ１１、画像処理ユニット１２、メモリコントローラ１３、入出力ユニット１４は、同じパッケージに格納されていてもよい。
【００３０】
ＤＲＡＭ１６は、プログラムや、表示用の画像生成に必要なデータ、例えば３次元のテクスチャやバンプマップ等のデータ（以下では「パターン」と記載する）を格納する。また、ＤＲＡＭ１６は、フレームバッファのデータも格納する。図１の例では、メモリコントローラ１３およびＤＲＡＭ１６は主プロセッサ１１と画像処理ユニット１２とで共通のように書かれているが、メモリコントローラ１３およびＤＲＡＭ１６は、主プロセッサ１１と画像処理ユニット１２とのそれぞれと対になるように設けられていてもよい。また、フレームバッファがＤＲＡＭ１６と異なるメモリ素子に格納されていてもよい。なお、ＤＲＡＭ１６は複数のチップにより構成されていてもよい。
【００３１】
表示信号生成部１８は、フレームバッファに格納される画像データに基づいて、表示信号を生成し、ディスプレイ１９に向けて出力することで、ディスプレイ１９に画像を表示させる。ディスプレイ１９は、例えば画像処理装置１の外にあるテレビ装置や、画像処理装置１に内蔵される表示デバイスである。
【００３２】
図２は、画像処理装置１が行う処理の一例を概略的に示すフロー図である。図２には、画像処理装置１が３次元の形状を構成する１または複数のプリミティブを２次元の領域に変換し、変換された領域についてピクセルの色を算出する例が示されている。プリミティブは、例えば３次元空間に配置された三角形などのポリゴンや円板のように、頂点や中心、半径のような簡易なパラメータで位置や形状を特定できる図形である。図２に示される処理は、主プロセッサ１１が予めデータを準備し、画像処理ユニット１２が主プロセッサからの命令やプログラムに基づいてデータを演算することにより実現されている。主プロセッサ１１がデータを準備するステップおよび指令するステップの詳細については説明を省略する。
【００３３】
はじめに、頂点管理部２１は、３次元のプリミティブのデータをＤＲＡＭ１６から取得する（ステップＳ１０１）。３次元のプリミティブのデータは、例えば、ポリゴンの頂点の座標である。
【００３４】
次に、頂点管理部２１は、シェーダーユニット２５を制御し、そのシェーダーユニット２５にプリミティブの頂点の座標を視点からみた表示平面上の２次元の座標に変換させる（ステップＳ１０２）。ここで、プリミティブの頂点の座標がローカル座標系で示されている場合は、頂点管理部２１はシェーダーユニット２５の演算により、頂点の座標をグローバル座標系に変換し、さらに２次元の座標に変換してもよい。３次元座標を表示平面上の２次元座標へ変換することは透視投影と呼ばれており、公知技術であるので詳細の説明は省略する。頂点管理部２１は、変換された２次元の座標を示す情報を取得することで、描画対象となる２次元のプリミティブを取得する（ステップＳ１０３）。
【００３５】
次に、ラスタライザ２２は、タイルのそれぞれについて、プリミティブと重なるピクセルからなるグループを選択する（ステップＳ１０４）。ここで、タイルは表示領域が分割された部分領域であり、タイルのそれぞれは矩形の領域である。表示領域には、例えば、ａ行ｂ列（ａ，ｂは正の整数）のタイルが配置されている。タイルは、三角形などの領域であってもよい。以下では、選択されたピクセルのグループを対象タイルとも表記し、ピクセルのグループに属するピクセルを、対象タイルに属するピクセルと記載する。
【００３６】
図３は、表示領域内に生成されるプリミティブの一例を示す図である。図３には、表示領域７１、矩形のタイル７２、プリミティブ７３が模式的に示されている。実際のタイル７２の数は図３より多い。図３ではプリミティブ７３は直角三角形であり、タイル７２のうちいくつかと重なっている。ラスタライザ２２は、上から２行目の左側の４つのタイル７２について、それぞれ、プリミティブ７３と重なる領域にあるピクセルからなる対象タイル７４１，７４２，７４３，７４４を決定している。ラスタライザ２２は、他のタイル７２についても対象タイル７４を決定している。
【００３７】
ラスタライザ２２により対象タイル７４が決定されると、コントローラ２３は、対象タイル７４に属するピクセルを、１たたは複数の並列処理グループ８１に割り当てる（ステップＳ１０５）。ここで、並列処理グループ８１は、並列演算器２７がまとめて並列に演算できる複数のスレッドのグループであり、スレッドの最大の数は並列数Ｐである。本実施形態では１ピクセルの処理を１スレッドで行うため、１つの並列処理グループに割り当てられるピクセルの数も並列数Ｐとなる。なお、複数のピクセルを１つのスレッドで処理する場合など、１つの並列処理グループに割り当てられるピクセルの最大数は、処理についての並列数Ｐと異なっていてもよい。ステップＳ１０５の処理の詳細については後述する。
【００３８】
並列処理グループ８１にピクセルが割り当てられると、シェーダーユニット２５に含まれる並列演算器２７は、並列処理グループ８１ごとに、メモリに格納されたパターンに基づいて、並列処理グループ８１に割り当てられたピクセルの色を並列に算出する（ステップＳ１０６）。この色を算出する処理は、いわゆるテクスチャマッピングやバンプマッピングの処理を含んでおり、公知であるので詳細の説明は省略する。
【００３９】
図４は、パターン７６と３次元のプリミティブ７３との対応の一例を示す図である。図４の例では、パターン７６は２次元の所定の外形を有し、パターン７６の中に複数のテクセル７７が設けられている。図４の例では、パターン７６はいわゆるテクスチャであり、各テクセル７７の色情報を含む。パターン７６は、バンプマッピングに用いられるバンプマップであってもよい。この場合、パターン７６は各テクセル７７の高低の情報または法線の情報を含む。また、プリミティブ７３内の平面上の位置７５とパターン７６内のテクセル７７とは予め対応付けられている。また、プリミティブ７３が変換された２次元領域におけるピクセルに相当するプリミティブ７３内の位置は一意に求まるので、２次元領域内のピクセルの位置とテクセル７７とも対応付けられている。パターン７６は２次元領域内の各位置についての、例えば色や高低や法線といった色計算情報である。また、メモリに格納されるパターン７６について、近くのテクセル７７の色計算情報がより近いアドレスに格納されるようなデータ構造を有し、ＤＲＡＭ１６に連続して格納される色計算情報の位置は、互いに離間していない。例えば、パターン７６内の一辺が２のべき乗の矩形の領域にあるテクセルの色情報は、連続したアドレスに格納される。
【００４０】
ピクセルの色が算出されると、ＲＯＰユニット２４は、算出された２次元領域のピクセルの色に基づいて、表示画像のデータをフレームバッファに出力する（ステップＳ１０７）。なお、画像のデータが、テクスチャ等として、フレームバッファの代わりに、他のメモリに出力されてもよい。また、表示信号生成部１８は、フレームバッファに出力された表示画像データからディスプレイに出力するための表示信号を生成し、そのディスプレイに向けて表示信号を出力する（ステップＳ１０８）。
【００４１】
次に、ステップＳ１０５の処理についてさらに詳細に説明する。図５は、コントローラ２３がピクセルを並列処理グループに割り当てる処理の一例を示すフロー図である。なお、この処理は、コントローラ２３がプログラムを実行することにより実行される。コントローラ２３は、図５に示される処理を、プリミティブ７３から生成される２次元領域ごとに行ってもよいし、複数のプリミティブ７３から生成される２次元領域についてまとめて行ってもよい。また、対象タイルを複数の並列演算器２７ごとに割り当てる場合は、並列演算器２７ごとに図５に示される処理を行ってもよい。
【００４２】
はじめに、コントローラ２３は、１番目の並列処理グループ８１を生成する（ステップＳ２０１）。コントローラ２３は、この時点では並列処理グループについて処理を実行する命令を発行しない。そして、コントローラ２３は以降の処理で用いるために、並列処理グループ８１の空スレッドの数Ｎを求める（ステップＳ２０２）。コントローラ２３は１番目の対象タイルを選択する（ステップＳ２０３）。
【００４３】
そして、コントローラ２３は選択された対象タイルに属する未割当のピクセルの数Ｍを並列数Ｐで割った余りを算出し（ステップＳ２０４）、その余りがＮより大きい場合には（ステップＳ２０４のＮ）、コントローラ２３は以下のステップＳ２０５からステップＳ２１０の処理をスキップし、後述のステップＳ２１１の処理を行う。
【００４４】
一方、その余りがＮ以下である場合には（ステップＳ２０４のＹ）、コントローラ２３はステップＳ２０５以降の処理を実行する。ステップＳ２０５では、対象タイルに含まれる未割当のピクセルのうち一部を並列処理グループ８１のスレッドに割り当てる（ステップＳ２０５）。ここで、割り当てられるピクセルの数は、ＭとＮのうち小さい方の数である。また、１つのスレッドには１つのピクセルが割り当てられるものとする。
【００４５】
そして、コントローラ２３は割り当て後の並列処理グループ８１の空スレッドの数Ｎを求める（ステップＳ２０６）。より具体的には、空スレッドの数Ｎは並列数からその並列処理グループ８１に割り当てられたピクセルの数を引いた数である。コントローラ２３は、単に割り当て前のＮから今回割り当てられたピクセルの数を引いて空スレッドの数Ｎを求めてよい。
【００４６】
そして、コントローラ２３は対象タイルに未割当のピクセルがないか判定し（ステップＳ２０７）、未割当のピクセルがある場合には（ステップＳ２０７のＮ）、コントローラ２３はステップＳ２０７からＳ２０９の処理をスキップする。未割当のピクセルがない場合には（ステップＳ２０７のＹ）、コントローラ２３は選択されていない対象タイルがあるか判定する（ステップＳ２０８）。選択されていない対象タイルがない場合は（ステップＳ２０８のＮ）すべての対象タイルについて処理がされているのでコントローラ２３はステップＳ１０５の処理を終了する。一方、選択されていない対象タイルが存在する場合には（ステップＳ２０８のＹ）、コントローラ２３は選択されていない対象タイルから新たな対象タイルを選択し（ステップＳ２０９）、ステップＳ２１０の処理へ進む。
【００４７】
ステップＳ２１０では、コントローラ２３は並列処理グループの空きスレッドの数Ｎが０であるか判定する（ステップＳ２１０）。Ｎが０の場合には（ステップＳ２１０のＹ）、コントローラ２３は新たな並列処理グループ８１を生成し、空スレッドの数Ｎとして並列数を設定し（ステップＳ２１１）ステップＳ２０４の処理から繰り返す。一方、Ｎが０でない場合には、ステップＳ２１１の処理を経ずにステップＳ２０４の処理から繰り返す（ステップＳ２１０のＮ）。
【００４８】
図５に示される処理により、コントローラ２３は、対象タイルのそれぞれについて、対象タイルに属するピクセルが割当てられる並列処理グループの数が必要最小数になる条件を満たすようにピクセルを並列処理グループ８１に割り当てる。より具体的には、ある対象タイルに含まれるピクセルの数をＴとすると、対象タイルに属するピクセルが割当てられる並列処理グループの数Ｋは以下の式を満たす。
【００４９】
Ｋ＝Ｃｅｉｌ（Ｔ／Ｐ）
【００５０】
ここで、Ｃｅｉｌ（ｘ）は、ｘ以上の最小の整数を求める関数である。これにより、対象タイルに属するピクセルが必要最低限の数の並列処理グループに存在するようになる。
【００５１】
図６は、並列処理グループ８１へのピクセルの割り当ての一例を説明する図である。図６は、図５に示される処理により、並列数Ｐが６４であり、３つの対象タイル７２１１，７２１２，７２１３に属するそれぞれ１０個、４０個、５０個のピクセルを並列処理グループ８１１１，８１１２に割り付けた場合の例を示す。図６の例では、同じ対象タイルに属するピクセルが割り付けられる並列処理グループ８１の数は１になっており、対象タイル７２１１，７２１２に属するピクセルは１つの並列処理グループ８１１１に割り当てられている。
【００５２】
すると、ステップＳ１０６での並列計算において、メモリアクセスを効率化できる。一般的に、同じ対象タイルに属するピクセルに対応するテクセル７７のメモリ内のアドレスは互いに近くなる。一方、ＤＲＡＭ１６などへのメモリアクセスでは、バースト読出しがあるため、近いアドレスへのアクセスであれば、ＤＲＡＭ１６への少ない回数のアクセスによってデータを読み出すことができる。また、仮にＤＲＡＭ１６から一度にデータを読み出せなくても、キャッシュやアドレス指定などのハードウェア上の都合により、ある程度アドレスが近ければより短時間でアクセスすることが可能になる。近年のＧＰＵは並列度の向上により計算速度は速くなっており、メモリがボトルネックになりやすくなっている。このような状況下ではメモリアクセスの効率化により全体の処理速度を効果的に向上させることが可能になる。
【００５３】
図７は、並列処理グループ８１へのピクセルの割り当ての比較例を示す図である。図７の例は、図６と同じ構成の対象タイル７２０１，７２０２，７２０３に属するピクセルを、先行する並列処理グループ８１のスレッドの空きを最小にするアルゴリズムで割り当てしている。この場合、１つの対象タイル７２０３に属するピクセルが複数の並列処理グループ８１０１，８１０２に割り当てられるため、ステップＳ１０６の処理において、並列処理グループ８１０１の処理と並列処理グループ８１０２の処理とで、図６の例では１回で済んだ２回のメモリアクセスが発生しやすくなり、処理速度が低下しやすくなる。
【００５４】
図８は、並列処理グループ８１へのピクセルの割り当ての他の一例を説明する図である。図８は、図５に示される処理により、３つの対象タイル７２２１，７２２２，７２２３に属するそれぞれ１０個、４０個、１３２個のピクセルを並列処理グループ８１２１，８１２２に割り付けた場合の例を示す。図８の例では、対象タイル７２２３に属するピクセルの数が１３２であるが、それが割り当てられる並列処理グループ８１２１，８１２２，８１２３の数が３である一方、３つの対象タイル７２２１，７２２２に属するピクセルと対象タイル７２２３に属するピクセルの一部とが同じ並列処理グループ８１２１に割り当てられている。
【００５５】
コントローラ２３は、ある対象タイルに属するピクセルが割り当てられる並列処理グループの数を最小にしつつも、複数の対象タイルに属するピクセルが１つの並列処理グループに割り当てできるように制御している。これにより、単に対象タイルごとに並列処理グループ８１を設ける場合より処理の並列度を向上させることができ、並列処理グループの数が増えることによる悪影響を抑え、より確実に処理速度を向上させることができる。
【００５６】
なお、並列度は低くなってしまうが、並列処理グループ８１のそれぞれには１つの対象タイルに属するピクセルが割り当てられてもよい。図９は、並列処理グループ８１へのピクセルの割り当ての他の一例を説明する図である。図９の例では、並列処理グループ８１３１，８１３２，８１３３のそれぞれには、１つの対象タイルに属するピクセルが割り当てられている。
【００５７】
なお、ある並列演算器２７について順番が隣り合う対象タイルの位置は、必ずしも隣り合っていない。図１０は、並列演算器２７が担当する領域の一例を示す図である。図１０は４つの並列演算器２７を用いる場合のタイルの割り当ての例であり、Ｓ１からＳ４はその記号が付された対象タイルが割り当てられる並列演算器２７を特定するＩＤを示している。また、一点鎖線を有する矢印は、ラスタライザ２２がタイルを処理する順序を示す。タイルを処理する順序は、図１０の例と異なっていてもよい。
【００５８】
図１０の例では、対象タイルを並列演算器２７にラウンドロビンで割り当てている。このため、ある並列演算器２７についてみると、対象タイルの位置は互いに隣り合わない。このため、異なる対象タイルに属するピクセルについてのメモリアクセスが一度に行われる可能性は低くなる。このような状況では、本発明を実施する場合としない場合とでメモリアクセスの効率の差がさらに大きくなり、より大きな速度の向上の効果を得ることができる。
【００５９】
また、本実施形態により、メモリアクセスの効率化だけではなく、処理速度そのものの向上も期待できる。例えば、ＤＲＡＭ１６に格納されるパターン７６がバンププマップである場合、陰影を表すために法線の向きに応じて分岐処理をする場合がある。このような場合、並列演算の場合には、分岐処理でピクセルにより分岐先が異なると、分岐先の処理を２回にわけて計算する必要が生じる。本実施形態では１つの並列処理グループに属する対象タイルの数が１になる可能性が高くなる一方、パターンの局所性から同じ対象タイルに属するピクセルの法線が似た方向になる可能性が高くなり、複数の分岐先が生じる可能性を減らすことができる。
【００６０】
もし、対象タイルに含まれるピクセルの数の最大値が並列数と同じ場合には、図５に示される処理は簡略化されてよい。この場合、ステップＳ２０４は単に未割当のピクセルの数ＭがＮ以下か判定する処理となり、ステップＳ２０５は、単にＮこのピクセルを並列処理グループのスレッドに割り当てる処理になり、ステップＳ２０７は不要になる。
【００６１】
ここで、ステップＳ１０５において、コントローラ２３は、対象タイルのそれぞれについて、対象タイルに属するピクセルが割当てられる並列処理グループの数が必要最小数になる条件を満たしつつ、さらに並列度を高める処理をしてもよい。
【００６２】
図１１は、コントローラ２３がピクセルを並列処理グループ８１に割り当てる処理の他の一例を示すフロー図である。コントローラ２３は、図１１に示される処理を、予め定められたバッファ数の対象タイルごとに行う。より具体的には、コントローラ２３はバッファ数の対象タイルをローカルのメモリ等にバッファし、そのバッファされた対象タイルについて図１１の処理を実行する。またコントローラ２３は対象タイルがなくなるまで図１１に示される処理を繰り返す。
【００６３】
はじめに、コントローラ２３は、バッファされた対象タイルのうち未処理のものから、新たな対象タイルを選択する（ステップＳ４０１）。次に、コントローラ２３は、選択された対象タイルに属する未割当のピクセルの数Ｍを求め、その数Ｍが並列数以上の場合には（ステップＳ４０２のＹ）、コントローラ２３は新たな並列処理グループを生成し、対象タイルに属する未割当のピクセルのうち、並列数のピクセルを、その生成された並列処理グループのスレッドに割り当てる（ステップＳ４０３）。そして、ステップＳ４０２の処理から繰り返す。一方、数Ｍが並列数より小さい場合には（ステップＳ４０２のＮ）、コントローラ２３はバッファされたすべての対象タイルが選択されたか確認する（ステップＳ４０４）。バッファされたすべての対象タイルが選択されていない場合には（ステップＳ４０４のＮ）、ステップＳ４０１から繰り返す。バッファされたすべての対象タイルが選択された場合には（ステップＳ４０４のＹ）、コントローラ２３はステップＳ４０５以降の処理を実行する。
【００６４】
ステップＳ４０１からＳ４０４の処理は、対象タイルに属するピクセルのうち並列数の倍数のピクセルを並列数のピクセルごとに並列処理グループ８１に割り当てる処理であり、これにより、各対象タイルに属する未割当のピクセルの数は、並列数未満になる。
【００６５】
ステップＳ４０５では、コントローラ２３は、ステップＳ４０１の処理の前に生成された並列処理グループの空きスレッドがない場合は並列処理グループを生成する（ステップＳ４０５）。そして、コントローラ２３は以降の処理のために並列処理グループの空きスレッドの数Ｎを取得する（ステップＳ４０６）。
【００６６】
コントローラ２３は、バッファされた対象タイルの中に未割当のピクセルを含む対象タイルが存在するか判定し（ステップＳ４０７）、その対象タイルが存在しない場合には（ステップＳ４０７のＮ）処理を終了する。
【００６７】
一方、その対象タイルが存在する場合には（ステップＳ４０７のＹ）、コントローラ２３は未割当のピクセルの数ＭがＮ以下の対象タイル（以下「対象タイル候補」と記載する）があるか判定する。未割当のピクセルの数ＭがＮ以下の対象タイルがない場合には、ステップＳ４０９、Ｓ４１０の処理をスキップする。一方、未割当のピクセルの数ＭがＮ以下の対象タイルが存在する場合には、コントローラ２３は、その条件を満たす対象タイル候補のうちＭが最大のものに属するピクセルを並列処理グループ８１に割り当て、空スレッドの数Ｎを再計算する（ステップＳ４０９）。そして、空きスレッドの数Ｎが０の場合は（ステップＳ４１０のＹ）、コントローラ２３は新たな並列処理グループを生成し、空きスレッドの数Ｎとして並列数を設定し（ステップＳ４１１）、ステップＳ４０７からの処理を繰り返す。一方、空きスレッドの数Ｎが０でない場合は（ステップＳ４１０のＮ）、ステップＳ４１１を実行することなく、ステップＳ４０７からの処理を繰り返す。
【００６８】
図１２は、並列処理グループ８１へのピクセルの割り当ての一例を説明する図である。図１２は、図１１に示される処理により、対象タイル７２４１，７２４２，７２４３，７２４４に属するピクセルが並列処理グループ８１４１，８１４２，８１４３に割り当てられた場合の例である。図５の例と異なり、順番が隣り合う対象タイルに属するピクセルが同じ並列処理グループ８１に割り当てられるため、処理の並列度が向上する。例えば、対象タイル７２４１，７２４２，７２４３，７２４４について図５に示される処理をすると、並列処理グループ８１の数は４になる。
【００６９】
本実施形態では、３次元の形状を構成するプリミティブを２次元の領域に変換し、変換された領域についてピクセルの色を算出する場合に本発明を適用する例を説明しているが、３次元のプリミティブを２次元の領域に変換しなくても本発明を適用できる。例えば、予め定められた２次元の領域にテクスチャマッピングをするような場合であっても本発明を適用できる。
【図１】
0006801001.tif 000002
【図２】
0006801001.tif 000003
【図３】
0006801001.tif 000004
【図４】
0006801001.tif 000005
【図５】
0006801001.tif 000006
【図６】
0006801001.tif 000007
【図７】
0006801001.tif 000008
【図８】
0006801001.tif 000009
【図９】
0006801001.tif 000010
【図１０】
0006801001.tif 000011
【図１１】
0006801001.tif 000012
【図１２】
0006801001.tif 000013