以下、本発明の好ましい実施の形態について、図面を参照しながら説明する。
本発明に係る描画装置は、例えば図1に示すような構成のビデオゲーム装置に適用される。本発明に係る描画方法は、このビデオゲーム装置において実施される。
このビデオゲーム装置は、例えば光学ディスク等の補助記憶装置に記憶されているゲームプログラムを読み出して実行することにより、使用者からの指示に応じてゲームを行うものであって、図1に示すような構成を有している。
すなわち、このビデオゲーム装置は、2種類のバスすなわち、メインバス1とサブバス2を備える。
上記メインバス1とサブバス2は、バスコントローラ10を介して接続されている。
そして、上記メインバス1には、マイクロプロセッサなどからなる主中央演算処理装置(メインCPU:Central Processing Unit)11、ランダムアクセスメモリ(RAM:Random Access Memory)からなる主記憶装置(メインメモリ)12、主ダイナミックメモリアクセスメモリコントローラ(メインDMAC: Dinamic Memory Access Controller)13、MPEGデコーダ(MDEC:MPEG Decorder)14及び画像処理装置(GPU: Graphic Processing Unit)15が接続されている。また、上記サブバス2には、マイクロプロセッサなどからなる副中央演算処理装置(サブCPU: Central Processing Unit)21、ランダムアクセスメモリ(RAM: Random Access Memory)からなる副記憶装置(サブメモリ)22、副ダイナミックメモリアクセスメモリコントローラ(サブDMAC:Dinamic Memory Access Controller)23、オペレーティングシステム等のプログラムが格納されたリードオンリーメモリ(ROM: Read Only Memory)24、音声処理装置(SPU: Sound Processing Unit)25、通信制御部(ATM: Asynchronous Transimission mode)26、補助記憶装置27及び入力デバイス28が接続されている。
上記バスコントローラ10は、メインバス1とサブバス2との間のスイッチングを行う上記メインバス1上のデバイスであって、初期状態ではオープンになっている。
また、上記メインCPU11は、上記メインメモリ12上のプログラムで動作する上記メインバス1上のデバイスである。このメインCPU11は、起動時には上記バスコントローラ10がオープンになっていることにより、上記サブバス2上のROM24からブートプログラムを読み込んで実行し、補助記憶装置27からアプリケーションプログラム及び必要なデータを上記メインメモリ12や上記サブバス2上のデバイスにロードする。このメインCPU11には、座標変換等の処理を行うジオミトリトランスファエンジン(GTE: Geometry TransferEngine )17が搭載されている。上記GTE17は、例えば複数の演算を並列に実行する並列演算機構を備え、上記メインCPU11からの演算要求に応じて座標変換,光源計算,行列あるいはベクトルなどの演算を高速に行う。そして、上記メインCPU11は、上記GTE17による演算結果に基づいて3角形や4角形などの基本的な単位図形(ポリゴン)の組み合わせとして3次元モデルを定義して3次元画像を描画するための各ポリゴンに対応する描画命令を作成し、この描画命令をパケット化してコマンドパケットとして上記GPU15に送る。
また、上記メインDMAC13は、メインバス1上のデバイスを対象とするDMA転送の制御等を行う上記メインバス1上のデバイスである。このメインDMAC13は、上記バスコントローラ10がオープンになっているときにはサブバス2上のデバイスも対象とする。
また、上記GPU15は、レンダリングプロセッサとして機能する上記メインバス1上のデバイスである。このGPU15は、メインCPU11又はメインDMAC13からコマンドパケットとして送られてきた描画命令を解釈して、頂点の色データと奥行きを示すZ値から、ポリゴンを構成する全ての画素の色とZ値を考慮して、画素データをフレームバッファ18すなわち画像メモリに書き込むレンダリング処理を行う。
また、上記MDEC14は、CPUと並列に動作可能なI/O接続デバイスであって、画像伸張エンジンとして機能する上記メインバス1上のデバイスである。このMDEC14は、離散コサイン変換などの直行変換により圧縮されて符号化された画像データを復号化する。
また、上記サブCPU21は、上記サブメモリ22上のプログラムで動作する上記サブバス2上のデバイスである。
また、上記サブDMAC23は、サブバス2上のデバイスを対象とするDMA転送の制御等を行う上記サブバス2上のデバイスである。このサブDMAC23は、上記バスコントローラ10がクローズなっているときにのみバス権利を獲得することができる。
また、上記SPU25は、サウンドプロセッサとして機能する上記サブバス2上のデバイスである。このSPU25は、上記サブCPU21又はサブDMAC23からコマンドパケットとして送られてくるサウンドコマンドに応じて、サウンドメモリ29から音声データ読み出して出力する。
また、上記ATM26は、サブバス2上の通信用デバイスである。
また、上記補助記憶装置27は、サブバス2上のデータ入力デバイスであって、ディスクドライブなどからなる。
さらに、上記入力デバイス28は、サブバス2上のコントロールパッド、マウスなどのマンマシンインターフェースや、画像入力、音声入力などの他の機器からの入力用デバイスである。
すなわち、このビデオゲーム装置では、座標変換やクリッピング、光源計算等のジオメトリ処理を行い、3角形や4角形などの基本的な単位図形(ポリゴン)の組み合わせとして3次元モデルを定義して3次元画像を描画するための描画命令を作成し、各ポリゴンに対応する描画命令をコマンドパケットとしてメインバス1に送出するジオメトリ処理系が上記メインバス1上のメインCPU11及びGTU17などにより構成され、上記ジオメトリ処理系からの描画命令に基づいて各ポリゴンの画素データを生成してフレームバッファ18に書き込むレンダリング処理を行い、フレームバッファ18に図形を描画するレンダリング処理系が上記GPU15により構成されている。
以下、上述したGPU15について具体的に説明する。
上記GPU15は、その具体的な構成を図2に示してあるように、上記メインバス1に接続されたパケットエンジン31を備え、上記メインCPU11又はメインDMAC13から上記メインバス1を介して上記パケットエンジン31にコマンドパケットとして送られてくる描画命令に従って、プリプロセッサ32と描画エンジン33により各ポリゴンの画素データを上記フレームバッファ18に書き込むレンダリング処理を行い、上記フレームバッファ18に描画された画像の画素データを読み出して表示制御部(CRTC: CRT Controler)34を介してビデオ信号として図示しないテレビジョン受像機やモニタ受像機に供給するようになっている。
上記パケットエンジン31は、上記メインCPU11又はメインDMAC13から上記メインバス1を介して送られてくるコマンドパケットを上記パケットエンジン31により図示しないレジスタ上に展開する。
また、上記プリプロセッサ32は、上記パケットエンジン31にコマンドパケットとして送られてきた描画命令に従ってポリゴンデータを生成して後述するポリゴンの分割処理などの所定の前処理をポリゴンデータに施し、上記描画エンジン33が必要とする各ポリゴンの頂点座標情報、テクスチャやミップマップテクスチャのアドレス情報、ピクセルインターリーブの制御情報などの各種データを生成する。
さらに、上記描画エンジン33は、上記プリプロセッサ32に接続されたN個のポリゴンエンジン33A1,33A2・・・33ANと、各ポリゴンエンジン33A1,33A2・・・33ANに接続されたN個のテクスチャエンジン33B1,33B2・・・33BNと、各テクスチャエンジン33B1,33B2・・・33BNに接続された第1のバススイッチャ33Cと、この第1のバススイッチャ33Cに接続されたM個のピクセルエンジン33D1,33D2・・・33DMと、各ピクセルエンジン33D1,33D2・・・33DMに接続された第2のバススイッチャ33Eと、この第2のバススイッチャ33Eに接続されたテクスチャキャッシュ33Fと、このテクスチャキャッシュ33Fに接続されたCLUTキャッシュ33Gを備える。
この描画エンジン33において、上記N個のポリゴンエンジン33A1,33A2・・・33ANは、上記プリプロセッサ32により前処理が施されたポリゴンデータに基づいて、上記N個のポリゴンエンジン33A1,33A2・・・33ANは、描画命令に応じたポリゴンを順次生成してポリゴン毎にシェーディング処理などを並列処理により行う。
また、上記N個のテクスチャエンジン33B1,33B2・・・33BNは、上記ポリゴンエンジン33A1,33A2・・・33ANにより生成されたポリゴン毎に、上記テクスチャキャッシュ33Fからカラールックアップテーブル(CLUT:Color Lock Up Table)キャッシュ33Gを介して与えられるテクスチャデータに基づいて、テクスチャマッピング処理やミップマップ処理を並列処理により行う。
ここで、上記テクスチャキャッシュ33Fには、上記N個のテクスチャエンジン33B1,33B2・・・33BNが処理するポリゴンに張り付けるテクスチャやミップマップテクスチャのアドレス情報が上記プリプロセッサ32から事前に与えられ、上記アドレス情報に基づいて上記フレームバッファ18上のテクスチャ領域からテクスチャマッピング処理に必要なテクスチャデータが転送されるとともに、該当するテクスチャデータからミップマッピング処理に必要となる解像度のデータのみが選択されてミップマップテクスチャデータとして転送される。さらに、上記CLUTキャッシュ33Gには、上記ポリゴンの描画を行なう際に参照すべきCLUTデータが上記フレームバッファ18上のCLUT領域から転送される。
上記N個のテクスチャエンジン33B1,33B2・・・33BNによりテクスチャマッピング処理やミップマップ処理が施されたポリゴンデータは、上記第1のバススイッチャ33Cを介してM個のピクセルエンジン33D1,33D2・・・33DMに転送される。
上記M個のピクセルエンジン33D1,33D2・・・33DMは、Zバッファ処理やアンチエリアシング処理等の各種画像処理を並列処理により行い、M個の画素データを生成する。
そして、上記M個のピクセルエンジン33D1,33D2・・・33DMで生成されたM個の画素データは、この第2のバススイッチャ33Eを介して上記フレームバッファ18に書き込まれる。
ここで、上記第2のバススイッチャ33Eは、上記プリプロセッサ32からピクセルインターリーブの制御情報が供給されており、上記M個のピクセルエンジン33D1,33D2・・・33DMで生成されたM個の画素データのうちのL個の画素データを上記制御情報に基づいて選択することにより、上記フレームバッファ18上に描画するポリゴンの形状に応じたM個の記憶場所をアクセス単位として画素データをM個づつ書き込むピクセルインターリーブ処理を行う機能を有している。
上記描画エンジン33は、上記プリプロセッサ32により前処理が施されたポリゴンデータに基づいて、各ポリゴンの全ての画素データを生成して上記フレームバッファ18に書き込むことにより、上記描画命令によりポリゴンの組合せとして定義された画像を上記フレームバッファ18上に描画する。そして、上記フレームバッファ18に描画された画像の画素データを読み出してCRTC34を介してビデオ信号として図示しないテレビジョン受像機やモニタ受像機に供給する。
このような構成のGPU15において、上記プリプロセッサ32は、例えば、ポリゴンの頂点座標[(X0,Y0),(X1,Y1),(X2,Y2)]やテクスチャ座標[(U0,V0),(U1,V1),(U2,V2)]に基づいて、上記N個のテクスチャエンジン33B1,33B2・・・33BNが処理するポリゴンに張り付けるテクスチャの先読みを行うためのアドレス情報を生成し、また、ポリゴンの辺の傾き[(X1−X0)/(Y1−Y0),(X2−X0)/(Y2−Y0),(X1−X2)/(Y1−Y2)]、テクスチャアドレスの傾き[(U1−U0)/(Y1−Y0),(U2−U0)/(Y2−Y0),(U1−U2)/(Y1−Y2)],[(V1−V0)/(Y1−Y0),(V2−V0)/(Y2−Y0),(V1−V2)/(Y1−Y2)]・・・やポリゴンの面積などからミップマップの選択情報を再生して、これらの情報をテクスチャキャッシュ33Fに供給する。また、ポリゴンの頂点座標[(X0,Y0),(X1,Y1),(X2,Y2)]を左エッジの頂点順(X0,Y0)→(X1,Y1)→(X2,Y2)又は右エッジの頂点順(X2,Y2)→(X1,Y1)→(X0,Y0)でソーティングしたり、両端点のスキャンやテクスチャアドレスのスキャンを行う。
そして、上記プリプロセッサ32は、ポリゴンデータを前処理した情報を図示しないワークメモリに蓄えておき、描画エンジン33が次のポリゴンを処理できるようにになった段階で、1ポリゴンを処理できる情報をワークメモリから上記N個のポリゴンエンジン33A1,33A2・・・33ANに転送する。これにより、上記描画エンジン33は、新たなポリゴンの描画処理を開始する。
すなわち、このGPU15では、その基本的な構成を図3に示すように、上記プリプロセッサ32と描画エンジン33でパイプラインにより描画処理を行い、描画命令によりポリゴンの組合せとして定義された画像を上記フレームバッファ18上に描画する。
このパイプライン処理による描画処理を再度説明する。
上記プリプロセッサ32は、上述のようにポリゴンデータに所定前処理を施し、上記描画エンジン33が必要とする各ポリゴンの頂点座標情報、テクスチャやミップマップテクスチャのアドレス情報、ピクセルインターリーブの制御情報などの各種データを上記描画エンジン33に供給する。
上記描画エンジン33は、上記プリプロセッサ32からデータを受け取り、必要とするテキスチャデータをテキスチャキャッシュ33Dから読み出し、画素データを生成して上記フレームバッファ18に書き込む。上記テキスチャキャッシュ33Dは、上記プリプロセッサ32における前処理により算出された必要とするテクスチャアドレスに対応するテクスチャ領域のテキスチャデータを上記フレームバッファ18から読み出す。テキスチャデータの読み出しは、描画エンジン33が実際に必要とする前に完了するように行われる。また、ミップマッッピング処理で必要とする解像度に対応するテクスチャデータのみを上記テクスチャ領域から読み込むことにより、上記テクスチャ領域のアクセス回数を減らすことができる。
なお、上記テキスチャキャッシュ33F内のデータ構造は、その一例を図4に示してあるように、テクスチャアドレスからなるタグ部TAG、必要となるテクスチャデータが格納されておいる格納部DATA、未だテクスチャデータが使用されていないことを示すフラグLを有する。そして、上記テキスチャキャッシュ33は、フラグLがリセットされたエントリを使用すべく、上記フレームバッファ18のテクスチャ領域からテクスチャデータを読み込み、そのフラグLをセットする。描画エンジン33は、フラグLがセットされているエントリから該当するテクスチャデータを読み出して描画処理を行い、描画を終了してそのテクスチャデータをもはや必要としなくなった段階でそのエントリのフラグlをリセットする。
このようにテクスチャマッピング処理を行う描画装置において、プリプロセッサ32と描画エンジン33をパイプラインで構成し、テクスチャメモリすなわち上記フレームバッファ18上のテキスチャ領域から上記描画エンジン33が必要とするテキスチャデータを上記プリプロセッサ32による前処理の段階でキャッシュメモリ33Fに転送することによって、上記描画エンジン33を停止させることなく描画処理を行うことができる。また、ミップマッッピング処理で必要とする解像度に対応するテクスチャデータのみを上記テクスチャ領域から読み込むことにより、上記テクスチャ領域のアクセス回数及びアクセス時間を減らすことができ、全体の描画速度を上げることができる。
なお、上記プリプロセッサ32におけるポリゴンの分割処理は、例えば図5に示すフローチャートに従って行われる。
すなわち、ポリゴンの分割処理は、ポリゴンの数を示すポリゴンカウントCを1に初期設定して開始される。
そして、第1の処理ステップS1では、ポリゴンを分割する必要があるか否かの判定処理を行う。この処理ステップS1における判定処理では、例えば、描画エンジン33においてこれから処理するポリゴンがテクスチャキャッシュ33F内に収まる否かを判定する。この判定処理は、例えばポリゴンの頂点のテクスチャ座標[(U0,V0),(U1,V1),(U2,V2)]を算出して、全てが1テクスチャページ内に収まっているか否かを判定すればよい。
そして、上記処理ステップS1における判定結果が「NO」すなわちポリゴンを分割する必要がある場合には、次の処理ステップS2に進んで、ポリゴンのN分割処理を行う。この処理ステップS2におけるポリゴンのN分割処理は、例えば次に示すように、ポリゴンの全ての辺を中点で分割することにより行われる。
X0'=(X0+X1)/2
Y0'=(Y0+Y1)/2
Z0'=(Z0+Z1)/2
X1'=(X1+X2)/2
Y1'=(Y1+Y2)/2
Z1'=(Z1+Z2)/2
X2'=(X2+X0)/2
Y2'=(Y2+Y0)/2
Z2'=(Z2+Z0)/2
U0'=(U0+U1)/2
V0'=(V0+V1)/2
Z0'=(Z0+Z1)/2
U1'=(U1+U2)/2
V1'=(V1+V2)/2
Z1'=(Z1+Z2)/2
U2'=(U2+U0)/2
V2'=(V2+V0)/2
Z2'=(Z2+Z0)/2
R0'=(R0+R1)/2
G0'=(G0+G1)/2
B0'=(B0+B1)/2
R1'=(R1+R2)/2
G1'=(G1+G2)/2
B1'=(B1+B2)/2
R2'=(R2+R0)/2
G2'=(G2+G0)/2
B2'=(B2+B0)/2
すなわち、この処理ステップS2におけるポリゴンのN分割処理では、ポリゴンの全ての辺を中点で分割することにより、例えば三角形のポリゴンはN=4個の新たなポリゴンに分割される。
次の処理ステップS2では、ポリゴンカウントCをC=C+N−1としてポリゴンの数を変更する。そして、最初の処理ステップS1に戻り、分割された新たなポリゴンをさらに分割する必要があるか否かの判定処理を行い、分割した新たなポリゴンが上記テクスチャキャシュ内に収まるようになるまで、上記各処理ステップS1〜S3を繰り返し行う。
また、上記処理ステップS1における判定結果が「YES」すなわちポリゴンを分割する必要がない場合には次の処理ステップS4に進む。
この処理ステップS4では、ポリゴンエンジン33A1,33A2・・・33ANPに1ポリゴン分の前処理情報を渡して、レンダリング処理を開始させ、レンダリング処理の終了を待つことなく次の処理ステップS5に進む。
この処理ステップS5では、ポリゴンカウントCをデクリメントする。
次の処理ステップS6では、ポリゴンカウントCが「0」になったか否かの判定処理を行う。そして、この処理ステップS6における判定結果が「NO」すなわちC≠0で処理すべきポリゴンがある場合には最初の処理ステップS1に戻って、次のポリゴンの処理に入る。また、この処理ステップS6における判定結果が「YES」すなわち全てのポリゴンをレンダリングして分割すべきポリゴンが無くなれば、処理を終了する。
すなわち、上記プリプロセッサ32では、描画エンジン33においてこれから処理するポリゴンがテクスチャキャッシュ33F内に収まる否か(以下、判定条件1という)を判定し、その判定結果に基づいて分割処理を行うことによって、分割した新たなポリゴンが上記テクスチャキャシュ33F内に収まるように上記描画命令に基づくポリゴンを複数に分割する。これにより、上記描画エンジン33において、テクスチャキャッシュ33FからCLUTチャッシュ33Gを介して読み出されるテクスチャデータに基づいてテクスチャマッピグ処理を確実且つ効率よく行うことができる。
ここで、上記プリプロセッサ32におけるポリゴンの分割処理では、上述の最初の処理ステップS1においてポリゴン内の画素数が規定値以下であるか否か(以下、判定条件2という)によりポリゴンを分割する必要があるか否かを判定し、その判定結果に基づいて、分割した新たなポリゴン内の画素数が上記規定値以下となるように処理ステップS2で上記描画命令に基づくポリゴンを2次元空間で複数に分割しても良い。これにより、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化することができる。なお、上記ポリゴン内の画素数は、例えば、そのポリゴンの頂点の外積値として面積を求め、その値が適正な値よりも小さいか否かにより判定することができる。
また、上記プリプロセッサ32におけるポリゴンの分割処理では、上述の処理ステップS2において上記描画命令に基づくポリゴンを3次元空間で複数に分割するようにしても良い。
この場合、上述の処理ステップS1において、ポリゴンの頂点のZ値の最小値と最大値との差が適正な範囲内に収まっているか否か(以下、判定条件3という)により、ポリゴンを分割する必要があるか否かを判定し、その判定結果に基づいて、分割した新たなポリゴン内の画素数が上記規定範囲内に収まるように上記処理ステップS2で上記描画命令に基づくポリゴンを3次元空間で複数に分割して、1ポリゴンの大きさを制限することによって、テクスチャキャッシュ33FからCLUTチャッシュ33Gを介して読み出されるテクスチャデータに基づいてテクスチャの歪みの少ない状態でテクスチャマッピグ処理を行うことができる。
また、この場合、上述の処理ステップS1において、ポリゴンの頂点のZ値の最小値と最大値で参照するミップマップテキスチャを跨いでいるか否か(以下、判定条件4という)によりポリゴンを分割する必要があるか否かを判定し、その判定結果に基づいて、分割した新たなポリゴンがミップマップテキスチャを跨がないように、上記処理ステップS2で上記描画命令に基づくポリゴンを3次元空間で複数に分割して、1ポリゴンの参照するミップマップテキスチャの参照範囲を制限を制限することによって、テクスチャキャッシュ33FからCLUTチャッシュ33Gを介して読み出されるミップマップテクスチャデータに基づいてミップマッピング処理を効率よく行うことができる。
さらに、この場合、上述の処理ステップS1において、ポリゴン内の画素数が規定値以下であるか否かにより、ポリゴンを分割する必要があるか否かを判定し、その判定結果に基づいて、分割した新たなポリゴン内の画素数が上記規定値以下となるように上記描画命令に基づくポリゴンを上記処理ステップS2により3次元空間で複数に分割するようにしても良い。
また、上述の処理ステップS1において、ポリゴンに対する描画エンジン33に描画処理時間を例えばポリゴン内の画素数に基づいて予測し、当該プリプロセッサ32による前処理時間と上記描画エンジン33による描画処理時間がバランスいるか否か(以下、判定条件5という)により、ポリゴンを分割する必要があるか否かを判定し、その判定結果に基づいて、当該プリプロセッサ32による前処理時間と上記描画エンジン33による描画処理時間がバランスするように上記描画命令に基づくポリゴンを上記処理ステップS2で複数に分割するようにしても良い。これにより、上記プリプロセッサ32と描画エンジン33の各処理時間のバランスを保ち、上記プリプロセッサ32と描画エンジン33とパイプラインで構成して効率よく高速描画処理を行うことができる。
また、上述の処理ステップS1において、描画エンジン33で処理するポリゴンがピクセルインターリーブ処理に適した形状であるか否か(以下、判定条件6という)により、ポリゴンを分割する必要があるか否かを判定し、その判定結果に基づいて、上記処理ステップS2により上記描画命令に基づくポリゴンをピクセルインターリーブ処理に適した形状の複数の新たなポリゴンに分割するようにしても良い。これにより、描画エンジン33でフレームバッファ18を効率よくアクセスして高速の描画処理を行うことができる。
さらに、上述の処理ステップS1において、上述の各種判定条件を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが各種判定条件を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割するようにしても良い。
上述の各種判定条件を組み合わせとしては、例えば、描画エンジン33においてテキスチャマッピングを行う場合には、上記判定条件1と他の判定条件2〜判定条件6との組み合わせが採用される。
すなわち、上述の処理ステップS1において、上記判定条件1と判定条件2を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件1と判定条件2を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化し、上記テクスチャキャッシュ33FからCLUTチャッシュ33Gを介して読み出されるテクスチャデータに基づいてテクスチャマッピグ処理を確実且つ効率よく行うことができる。
また、上述の処理ステップS1において、上記判定条件1と判定条件3を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件1と判定条件3を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、上記テクスチャキャッシュ33FからCLUTチャッシュ33Gを介して読み出されるテクスチャデータに基づいてテクスチャの歪みの少ない状態でテクスチャマッピグ処理を確実且つ効率よく行うことができる。さらに、上記判定条件2を組み合わせるようにすれば、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化して、テクスチャマッピグ処理を行うことができる。
また、上述の処理ステップS1において、上記判定条件1と判定条件4を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件1と判定条件4を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、上記テクスチャキャッシュ33FからCLUTチャッシュ33Gを介して読み出されるテクスチャデータに基づいて、ミップマッピング処理を確実且つ効率よく行うことができる。さらに、上記判定条件2や判定条件3を組み合わせて、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化したり、テクスチャの歪みを軽減するようにしても良い。
また、上述の処理ステップS1において、上記判定条件1と判定条件5を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件1と判定条件5を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、上記プリプロセッサ32と描画エンジン33の各処理時間のバランスを保ちパイプラインで効率よく高速のテクスチャマッピグ処理を行うことができる。さらに、上記判定条件2や判定条件3を組み合わせて、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化したり、テクスチャの歪みを軽減するようにしても良い。上記判定条件4を組み合わせて、ミップマッピング処理を行うようにしても良い。
さらに、上述の処理ステップS1において、上記判定条件1と判定条件6を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件1と判定条件6を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、描画エンジン33でテクスチャマッピグ処理を確実且つ効率よく行UTOともに、フレームバッファ18を効率よくアクセスして高速の描画処理を行うことができる。さらに、上記判定条件2や判定条件3を組み合わせて、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化したり、テクスチャの歪みを軽減するようにしても良い。上記判定条件4を組み合わせてミップマッピング処理を行うようにしたり、上記判定条件5を組み合わせてパイプラインによる高速化を図るようにしても良い。
また、描画エンジン33においてテキスチャマッピングを行わない場合には、上記判定条件2、判定条件5、判定条件6の組み合わせが上述の各種判定条件を組み合わせとして採用される。
すなわち、上述の処理ステップS1において、上記判定条件2と判定条件5を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件2と判定条件5を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化して、上記プリプロセッサ32と描画エンジン33の各処理時間のバランスを保ちパイプラインで効率よく高速の描画処理を行うことができる。
また、上述の処理ステップS1において、上記判定条件2と判定条件6を組み合わせてポリゴンを分割する必要があるか否かを判定して、その判定結果に基づいて、分割した新たなポリゴンが上記判定条件2と判定条件6を満たすように上記描画命令に基づくポリゴンを上記処理ステップS2により複数に分割することにより、上記描画エンジン33において処理するポリゴンの大きさすなわち画素数を均等化し、フレームバッファ18を効率よくアクセスして高速の描画処理を行うことができる。さらに、上記判定条件5を組み合わせてパイプラインによる高速化を図るようにしても良い。
さらに、上述した第2のバススイッチャ33Eにおけるピクセルインターリーブ処理は、次のようにして行われる。
すなわち、第2のバススイッチャ33Eは、図6に示すように、上記図2に示したプリプロセッサ32の出力が供給される制御回路101と、制御回路101の出力が供給されるセレクタ102と、セレクタ102の出力が各々供給される複数のマルチプレクサ/デマルチプレクサ(MUX: Multiplexer/DMUX:Demultiplexer)103a,103b,103c,103d,・・・とを備えている。
そして、MUX/DMUX103a,103b,103c,103d,・・・は、各々、上記図2に示したフレームバッファ18と描画エンジン33に接続されている。
ここで、フレームバッファ18は、複数のメモリバンク[1],[2],・・・,[X],・・・,[L]からなり、複数のメモリバンク[1],[2],・・・,[X],・・・,[L]は、各々、16個のアドレスで現される短形(以下、インターリーブパターンと言う。)の各アドレスを同時にアクセスすることができるようになされている。
したがって、フレームバッファ18の、例えば、メモリバンク[X]は、アドレスA0 〜A15をアクセスするための16個の入出力ポートP0 〜P15を備えており、複数のMUX/DMUX103a,103b,103c,103d,・・・のうちの4個のMUX/DMUX103a,103b,103c,103dは、各々、16個の入出力ポートP0〜P15と接続されている。
また、4個のMUX/DMUX103a,103b,103c,103dは、描画エンジン33の4個のピクセルエンジン33DX1,33DX2,33DX3,33DX4と対応して接続されている。
なお、メモリバンク[X]以外の他の各メモリバンクは、上述したメモリバンク[X]と同様の構成をしているため、その詳細な説明は省略する。また、第2のバススイッチャ33Eが行う上記他の各メモリバンクに対するアクセス処理についても、後述する第2のバススイッチャ33Eが行うメモリバンク[X]に対するアクセス処理と同様であるため、以下の説明では、第2のバススイッチャ33Eが行うメモリバンク[X]に対するアクセス処理についてのみ説明する。
まず、第2のバススイッチャ33Eの一連の動作について説明する。
例えば、メモリバンク[X]上に描画するポリゴンの形状が図7に示すような三角形TABC (第1のポリゴンの形状)であった場合、先ず、プリプロセッサ32から制御回路101には、ピクセルインターリーブの制御情報が供給される。
制御回路101は、プリプロセッサ32からのピクセルインターリーブの制御情報に基いて、三角形TABC 内部をアクセスする際に用いるインターリーブパターンを、例えば、(4×4)のインターリーブパターンPに切り換える。
なお、制御回路101におけるインターリーブパターンの切換方法についての詳細は後述する。
そして、制御回路101は、(4×4)のインターリーブパターンPを用いて、メモリバンク[X]上に形成される複数のインターリーブパターンのうち、アクセスすべきインターリーブパターン、すなわち三角形TABC 内部を全てアクセスすることができるようなインターリーブパターンを検出する。
したがって、三角形TABC では、メモリバンク[X]上の各インターリーブパターンをP(x方向のパターンインデックス,y方向のパターンインデックス)で示した場合、図8に示すように、
P(x,y)=P(3,1),P(4,1),P(1,2),P(2,2),
P(3,2),P(4,2),P(1,3),P(2,3),
P(3,3),P(4,3),P(5,3),P(2,4),
P(3,4),P(4,4),P(5,4),P(3,5),
P(4,5),P(5,5),P(4,6),P(5,6)
で示される合計20個のインターリーブパターンが検出される。
そして、制御回路101は、上述のようにして検出した20個のインターリーブパターンを示すパターン情報をインターリーブパターン単位でセレクタ102に供給する。また、1アドレス単位でメモリアクセスを行う場合には、制御回路101は、三角形TABC の形状に基いたマスク情報をセレクタ102に供給する。
セレクタ102は、制御回路101からインターリーブパターン単位で供給されたパターン情報に基いて、アクセスすべき(4×4)のインターリーブパターンPに対応したアドレスをMUX/DMUX103a,103b,103c,103dに指定する。
また、セレクタ102は、制御回路101からマスク情報が供給された場合には、そのマスク情報に基いて、図9に示すように、(4×4)のインターリーブパターンPのなかでマスクを行った結果得られるアクセスすべきアドレスをMUX/DMUX103a,103b,103c,103dに指定する。したがって、例えば、図10に示すように、上記図9に示したP(4,1)で示されるインターリーブパターン内のアドレスA0 〜A15において、マスクを行った結果得られるアクセスすべきアドレスは、A4,A5,A6,A8,A9,A10,A13,A14,A15(斜線部分)となる。
MUX/DMUX103a,103b,103c,103dは、各々、メモリバンク[X]のアドレスA0 〜A15のうち、セレクタ102により指定されたアドレスをアクセスする。
ここで、上述したように、ピクセルエンジン33DX1,33DX2,33DX3,33DX4からMUX/DMUX103a,103b,103c,103dには、各々、画素データが供給されるようになされている。
そこで、例えば、MUX/DMUX103aは、セレクタ102により指定されたアドレスをアクセスすることにより、入出力ポートP0 〜P15のうち上記アドレスに対応した入出力ポートを介して、ピクセルエンジンXaからの画素データをメモリバンク[X]の上記アドレスにより示される領域に書き込む。
また、MUX/DMUX103aは、セレクタ102により指定されたアドレスをアクセスすることにより、入出力ポートP0 〜P15のうち上記アドレスに対応した入出力ポートを介して、メモリバンク[X]の上記アドレスにより示される領域に書き込まれているデータを読み出す。そして、MUX/DMUX103aは、メモリバンク[X]から読み出したデータに対して所定の処理を行う。
なお、MUX/DMUX103b〜103dの動作については、上述したMUX/DMUX103aの動作と同様であるため、その詳細な説明は省略する。
つぎに、上述した制御回路101におけるインターリーブパターンの切換方法について具体的に説明する。
まず、メモリバンク[X]上に描画するポリゴンの形状が、例えば、図11に示すようにな横長の三角形TDEF (第2のポリゴンの形状)であり、三角形TDEF を(4×4)のインターリーブパターンPでアクセスする場合のアクセス回数について説明する。
この場合、アクセスすべきインターリーブパターンの個数は、図12に示すように、
P(x,y)=P(1,1),P(2,1),P(3,1),
P(4,1),P(5,1),P(0,2),
P(1,2),P(2,2),P(3,2),
P(4,2),P(5,2),P(6,2),
P(7,2),P(8,2),P(7,3),
P(8,3),P(9,3)
の合計17個となる。
すなわち、(4×4)のインターリーブパターンPで三角形TDEF をアクセスする場合、三角形TDEF 内部を全てアクセスするためのアクセス回数は、17回となる。
また、1アドレス単位でアクセスする場合には、上述した三角形TABC のアクセス時と同様に、図13に示すように、(4×4)のインターリーブパターンPのなかでマスクを行うことにより、必要なメモリアドレスのみをアクセスすることとなる。
つぎに、図14に示すように、三角形TDEF を(8×2)のインターリーブパターンP1 でアクセスする場合、アクセスすべきインターリーブパターンの個数は、図15に示すように、
P1(x,y)=P1(1,2),P1(2,2),P1(0,3),
P1(1,3),P1(2,3),P1(0,4),
P1(1,4),P1(2,4),P1(3,4),
P1(1,5),P1(2,5),P1(3,5),
P1(4,5),P1(3,6),P1(4,6)
の合計15個となる。
すなわち、(8×2)のインターリーブパターンP1 で三角形TDEF をアクセスする場合、三角形TDEF 内部を全てアクセスするためのアクセス回数は、15回となる。
また、1アドレス単位でアクセスする場合には、上述した三角形TABC のアクセス時と同様に、図16に示すように、(8×2)のインターリーブパターンP1 のなかでマスクを行うことにより、必要なメモリアドレスのみをアクセスすることとなる。
つぎに、図17に示すように、三角形TDEF を(16×1)のインターリーブパターンP2 でアクセスする場合、アクセスすべきインターリーブパターンの個数は、図18に示すように、
P2(x,y)=P2(0,5),P2(1,5),P2(0,6),
P2(1,6),P2(0,7),P2(1,7),
P2(0,8),P2(1,8),P2(0,9),
P2(1,9),P2(0,10),P2(1,10),
P2(2,10),P2(1,11),P2(2,11),
P2(1,12),P2(2,12),P2(2,13)
の合計18個となる。
すなわち、(16×1)のインターリーブパターンP2 で三角形TDEF をアクセスする場合、三角形TDEF 内部を全てアクセスするためのアクセス回数は、18回となる。
また、1アドレス単位でアクセスする場合には、上述した三角形TABC のアクセス時と同様に、図19に示すように、(8×2)のインターリーブパターンP2 のなかでマスクを行うことにより、必要なメモリアドレスのみをアクセスすることとなる。
上述のように、(4×4)のインターリーブパターンPで三角形TDEF をアクセスする場合のアクセス回数は17回、(8×2)のインターリーブパターンP1で三角形TDEF をアクセスする場合のアクセス回数は15回、(16×1)のインターリーブパターンP2 で三角形TDEF をアクセスする場合のアクセス回数は18回となり、この結果、(8×2)のインターリーブパターンP1 で三角形TDEF をアクセスする場合のアクセス回数が最少のアクセス回数となる。したがって、三角形TDEF に対する適切なインターリーブパターンは、(8×2)のインターリーブパターンP1ということがわかる。
そこで、制御回路101は、メモリバンク[X]をアクセスする際に用いるインターリーブパターンを、アクセスするポリゴンの形状に応じた適切なインターリーブパターンに切り換えるために、以下のような処理を行う。
例えば、メモリバンク[X]上に描画するポリゴンの形状が図20に示すような三角形THIJ であった場合、先ず、制御回路101には、上述したように、プリプロセッサ32からピクセルインターリーブの制御情報が供給される。このピクセルインターリーブの制御情報は、例えば、三角形THIJの3つの頂点H,I,Jのxy座標H(Xh,Yh),I(Xi,Yi),J(Xj,Yj)等の情報である。
次に、制御回路101は、上記図20に示すように、プリプロセッサ32からのピクセルインターリーブの制御情報を用いて、三角形THIJ の縦横比Rを、X方向の最大値MAXx及び最少値MINx、Y方向の最大値MAXy及び最少値MINyを持って、
R=dy/dx
=(MAXx−MINx)/(MAXy−MINy)
なる演算により求める。
なお、三角形THIJ では、
MAXx=Xj
MINx=Xi
MAXy=Yh
MINy=Yi
となる。
そして、制御回路101は、上述のようにして求めた縦横比Rに応じて、図21に示すような、(1×16)、(2×8)、(4×4)、(8×2)、(16×1)の5種類のインターリーブパターンPa〜Peのうち適切なインターリーブパターンを選出し、三角形THIJ をアクセスする際に用いるインターリーブパターンを、選出したインターリーブパターンに切り換える。
ここで、制御回路101は、表1に示すような、縦横比Rとインターリーブパターンと対応表からなるテーブルを有している。このテーブルには、縦横比Rに応じた適切なインターリーブパターン、すなわちアクセス回数が最小となるようなインターリーブパターンが予め設定されている。したがって、制御回路101は、上記テーブルを用いることにより、上述のようにして得られた縦横比Rに基いた適切なインターリーブパターンを選出することとなる。
上述のように、第2のバススイッチャ33Eでは、メモリバンク[X]上に描画するポリゴンの形状に応じて、上記図21に示したような5種類のインターリーブパターンPa〜Peから適切なインターリーブパターンを選出し、選出したインターリーブパターンでメモリバンク[X]をアクセスするため、最小のアクセス回数でメモリバンク[X]上に上記ポリゴンを描画することができる。したがって、第2のバススイッチャ33Eは、メモリアクセスを効率良く行うことができる。
また、GPU15は、上述のような、メモリアクセスの効率化を図った第2のバススイッチャ33Eにより、フレームバッファ18をアクセスしてデータ処理を行うため、そのデータ処理を効率良く行うことができる。
1 メインバス、11 メインCPU、12 メインメモリ、13 メインDMAC、 15 GPU、17 GTE、18 フレームバッファ、31 パケットエンジン、32 プリプロセッサ、33 描画エンジン、33A1,33A2・・・33AN ポリゴンエンジン、33B1,33B2・・・33BN テクスチャエンジン、33C 第1のバススイッチャ、33D1,33D2・・・33DM、33E 第2のバススイッチャ、33F テクスチャキャッシュ