説明

グラフィック処理装置、及び、グラフィック処理プログラム

【課題】外部メモリへのアクセス量を抑えつつ、処理量を最小限にしたグラフィック処理装置、及びグラフィック処理プログラムを提供することにある。
【解決手段】複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうち、N個を上限とするポリゴンが位置するブロックを、M個を上限とするチャンクバッファに割り当てるチャンク割り当て部と、N個のポリゴンのうちチャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成し前記チャンクバッファに書き込むチャンク生成部と、チャンクバッファに書き込まれた画素データを前記フレームバッファに書き出すチャンク書き出し部とを有し、各部の処理を有する処理フェーズを、複数のポリゴンについて繰り返し実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、グラフィック処理装置、及び、グラフィック処理プログラムに関する。
【背景技術】
【0002】
3次元グラフィクスにおいて、グラフィクス・エンジンは、立体オブジェクトを示す3次元データに基づいて、立体オブジェクトを所定の視点から見た場合の2次元画像を生成し、当該2次元画像の画素毎データをメモリに書き込むことにより2次元の画像データを生成する。そして、メモリに格納された画像データは、ディスプレイ・エンジンによって読み出されディスプレイ装置に表示される。
【0003】
上記のような画像処理装置において、一般的に、画像データを書き込むメモリにはDRAMが用いられる。DRAMは、連続するアドレスのメモリアクセスは高速だが、不連続なアドレスのメモリアクセスは低速であるという特徴を有する。具体的に、DRAMにはページと呼ばれる処理単位が存在し、同一ページ内(連続するアドレス)へのアクセスは高速であり、異なるページ(不連続なアドレス)に対してアクセスする場合、ページミスと呼ばれる処理が発生する。ページミスが発生すると、DRAMコントローラは、新たにワード線を立ち上げてメモリセルからデータを読み出す必要があり、この間、DRAMへの新たな読み出しを行うことができない。
【0004】
しかし、立体オブジェクトは、一般的に小さい直線や三角形の集合体として描画されるため、DRAMに描画するときに不連続なメモリアクセスが大量に発生し、メモリアクセス効率が大きく低下する。
【0005】
そこで、タイリングアーキテクチャと呼ばれる方法が知られている。タイリングアーキテクチャによると、画像処理装置は、描画空間を所定のサイズ(例えば、8×8ピクセル)に分割したタイル毎に、タイル内に画素を有する全ての図形の描画処理をSRAM等の内部メモリに対して行い、内部メモリに生成した画像データを外部メモリに書き出す(特許文献1)。画像データがタイル単位に外部メモリに書き出されることにより、DRAMに対して連続したアクセスが行われ、アクセス効率が良くなる。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特表2002−529865号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、タイリングアーキテクチャによると、グラフィクス・エンジンは、タイル毎に、描画対象の全てのポリゴンについて、ポリゴンの頂点パラメータ(座標、深度、パラメータ値等)に基づいて、ポリゴンの各辺、及びスパンの増分値を有する描画パラメータを生成し、全てポリゴンのうちタイル内に画素を有するポリゴンを判定する。従って、タイル毎に、全ポリゴンの描画パラメータの生成処理が発生し、処理量が増大していた。
【0008】
そこで、予め、描画対象の全てのポリゴンについて描画パラメータを生成して外部メモリへ書き出しておき、タイルの描画処理を行う時に、外部メモリから描画パラメータを読み出してタイル内に画素を有するポリゴンを判定する方法が考えられる。しかし、この方法によると、グラフィクス・エンジンは、描画パラメータの読み書き処理の都度、外部メモリへのアクセスを要することになる。
【0009】
そこで、本発明では、外部メモリへのアクセス量を抑えつつ、処理量を最小限にしたグラフィック処理装置、及びグラフィック処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
第1の側面は、複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうち、N個を上限とするポリゴンが位置する前記ブロックを、M個を上限とするチャンクバッファに割り当てるチャンク割り当て部と、
前記N個のポリゴンのうち前記チャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成し前記チャンクバッファに書き込むチャンク生成部と、
前記チャンクバッファに書き込まれた前記画素データを前記フレームバッファに書き出すチャンク書き出し部とを有し、
前記チャンク割り当て部によるチャンクバッファ割り当て処理と、前記チャンク生成部による画素データの生成と書き込み処理と、前記チャンク書き出し部によるフレームバッファへの画素データの書き出し処理とを有する処理フェーズを、前記複数のポリゴンについて繰り返し実行する。
【発明の効果】
【0011】
第1の側面によれば、外部メモリへのアクセス量を抑えつつ、処理量を最小限にすることができる。
【図面の簡単な説明】
【0012】
【図1】本実施の形態例におけるグラフィック処理装置を表す図である。
【図2】本実施の形態例におけるグラフィクス・エンジンの構成の一例を示す図である。
【図3】ジオメトリ処理部が生成するポリゴンの頂点パラメータの一例を示す図である。
【図4】描画パラメータの一例を示す図である。
【図5】ポリゴンパラメータバッファの一例を表す図である。
【図6】チャンクディサイダー部の構成の一例を表す図である。
【図7】グラフィクス・エンジンの各メモリに格納される情報を表す図である。
【図8】グラフィクス・エンジンの描画処理の詳細を説明するフローチャート図である。
【図9】描画対象のポリゴン群の一例を表す図である。
【図10】第1フェーズの描画処理の割り当て処理を説明する図である。
【図11】ポリゴンパラメータ指示バッファIB1の一例を表す図である。
【図12】ポリゴンパラメータ指示バッファIB3の一例を表す図である。
【図13】第2、3フェーズのポリゴンパラメータバッファの一例を表す図である。
【図14】第2フェーズの描画処理の割り当て処理を説明する図である。
【図15】第2フェーズの描画処理におけるポリゴンパラメータ指示バッファIB1の一例を表す図である。
【発明を実施するための形態】
【0013】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【0014】
本実施の形態例におけるグラフィック処理装置は、複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうちN個を上限とするポリゴンが位置するブロックを、M個を上限とするチャンクバッファに割り当てる。そして、グラフィック処理装置は、N個のポリゴンのうちチャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成してチャンクバッファに書き込み、当該チャンクバッファ内に書き込まれた画素データをフレームバッファに書き出す。グラフィック処理装置は、これらの処理を描画対象の複数のポリゴンに対して繰り返す。
【0015】
これにより、N個を上限とするポリゴンの画素データがM個を上限とするブロックに対応付けられたチャンクバッファに、外部メモリにアクセスすることなく生成される。また、生成された画素データがチャンクバッファ単位にフレームバッファに書き出されることによって、フレームバッファに対して連続したアドレスのアクセスが行われる。
【0016】
図1は、本実施の形態例におけるグラフィック処理装置の構成の一例を示す図である。同図において、グラフィック処理装置は、グラフィクス・コントローラ10、DRAM11、ディスプレイ装置12、CPU13、アプリケーションプログラム14を有する。そして、グラフィクス・コントローラ10は、メモリコントローラ15、本実施の形態例におけるグラフィクス処理装置を表すグラフィクス・エンジン16、及びディスプレイ表示装置であるディスプレイ・エンジン17を有する。本実施の形態例におけるフレームバッファは、DRAMで構成されている。
【0017】
図1において、アプリケーションからグラフィクス・エンジン16に対して、複数のポリゴンから構成される立体オブジェクトの3次元データと描画コマンドが渡される。グラフィクス・エンジン16は、3次元データに基づいて、立体オブジェクトを所定の視点から見たときに見えるべき2次元画像の画素データを生成し、メモリコントローラ15を介してDRAM11に書き込む。そして、ディスプレイ・エンジン17がメモリコントローラ15を介してDRAM11から描画データを読み出し、ディスプレイ装置12の表示画面に表示する。
【0018】
図2は、グラフィクス・エンジン16の構成の一例を示す図である。グラフィクス・エンジン16は、ジオメトリ処理部20とラスタ処理部30とを有する。
【0019】
一般に立体オブジェクトは、多数のポリゴンの集合体として表現される。また、一般的に、ポリゴンには三角形が用いられる。ジオメトリ処理部20は、描画コマンドを解釈し、3次元データをバーテックスシェーダ部21に渡して、ユーザープログラムに従って任意の加工処理を実行させ、表示画面上の2次元座標であるポリゴン頂点パラメータを生成する。生成された頂点パラメータは、ラスタ処理部30に渡される。
【0020】
図3は、ジオメトリ処理部20が生成するポリゴンの頂点パラメータの一例を示す図である。ポリゴンPGの頂点パラメータは、表示画面DIS上の各頂点PK1〜3の座標(x1,y1)、(x2,y2)、(x3,y3)とそれぞれの頂点座標における画像パラメータであるRGB各色の階調値(以下、色)p1〜p3、奥行き方向の距離(以下、深度)z1〜z3を有する。同図の例では、画像パラメータとして色と深度を例示しているが、画像パラメータは、さらに、テクスチャ表示のためのテクスチャ座標値、アルファブレンディングのためのアルファ値等を含んでいてもよい。
【0021】
図2に戻り、ラスタ処理部30は、ポリゴンの頂点パラメータで画定されるポリゴン領域内の各画素について、頂点パラメータに基づいて画素データを生成する。本実施の形態例のラスタ処理部30は、フレームバッファを例えば「8×8ピクセル」サイズに分割したブロック毎に、X、Y方向に走査してブロックに位置するポリゴンの各画素の画素データを生成する。
【0022】
ラスタ処理部30は、ポリゴンセットアップ部31、ポリゴンパラメータバッファPB、ポリゴンカウンター部33、チャンクディサイダー部34、RPO(Rasterizer and Pixel Operator)部36、フラグメントシェーダ部35、チャンクバッファ・コントローラ37、チャンクバッファCB、メモリアクセスI/F39、ポリゴンパラメータ指示バッファIBを有する。
【0023】
ポリゴンセットアップ部31は、ジオメトリ処理部20からポリゴンの頂点パラメータを順次受け取り、頂点パラメータに基づいて描画パラメータを生成する。描画パラメータとは、ポリゴンの各辺に沿ったX座標と各画像パラメータの傾き(増分値)、及び、各スパンに沿った画像パラメータの増分値である。
【0024】
図4は、描画パラメータの一例を示す図である。同図において、辺41〜43はポリゴンPGの各辺であり、横線46はポリゴンPGのスパンの一例を表す。スパン46とは、ポリゴンPGの左端44と右端45間のラスタ走査方向(X方向)に沿った画素一列である。ポリゴンセットアップ部31は、ポリゴンPGの各辺41〜43に沿ったX座標の増分値(dXdy、dXLdy、dXUdy)、画像パラメータである色の増分値(dPdy、dPLdy、dPUdy)、深度の増分値(dZdy、dZLdy、dZUdy)、及び、各スパン46に沿った各画像パラメータの増分値(dPdx、dZdx)を、描画パラメータとして算出する。
【0025】
そして、ポリゴンセットアップ部31は、ポリゴンの頂点パラメータと生成した描画パラメータを、N個を上限としてポリゴンパラメータバッファPBに順次格納する。本実施の形態例において、ポリゴンパラメータバッファPBに格納するポリゴン数の上限数NはN=4とする。
【0026】
図5は、ポリゴンパラメータバッファPBの一例を表す図である。同図のように、最大で4個のポリゴンのパラメータが格納される。なお、パラメータは、例えば「1〜4」のようなエントリー番号に関連付けて格納される。また、各エントリーは、ポリゴンのパラメータに加え、当該ポリゴンの画素データの生成が完了したか否かを表すフラグを有する。なお、初めは、画素データの生成が未完了であるため、フラグ「未完了」が書き込まれる。
【0027】
図2に戻り、ポリゴンカウンター部33は、ポリゴンパラメータバッファPB内にパラメータが格納されたポリゴンの数をカウントし、4個に達した場合にチャンクディサイダー部34を起動する。チャンクディサイダー部34は、4個のポリゴンが位置するフレームバッファ上のブロックを、M個を上限とするチャンクバッファCBに割り当てる。チャンクバッファCBは、例えば高速アクセス可能なSRAMで構成され、M個を上限とするブロックと同サイズのバッファであり、画素毎に画素データが書き込まれる。画素データは、例えば、RGB各色の階調値、深度を表すZ値等を有する。本実施の形態例において、チャンクバッファ数の上限数Mは、M=8とする。
【0028】
図6は、チャンクディサイダー部34の構成の一例を表す図である。チャンクディサイダー部34は、チャンクポジションコンパレータ61、チャンクアサイナー62、チャンクバッファ・コントローラI/F63を有する。各部の処理の詳細については、フローチャート図にて後述する。
【0029】
図2に戻り、RPO部36は、チャンクバッファCBを割り当てた各ブロックについて、ポリゴンパラメータ指示バッファIB内のエントリー番号の生成処理を行う。ポリゴンパラメータ指示バッファIBは、例えば高速アクセス可能なSRAMで構成され、M個を上限とするブロックの画素数分のエントリー番号を格納可能なバッファであり、その画素毎に当該画素に描画されるポリゴンのポリゴンパラメータバッファPBにおけるエントリー番号(本実施の形態例では、1〜4)が格納される。従って、ポリゴンが重なる画素については、最も手前に描画されるポリゴンのエントリー番号が格納される。
【0030】
そして、RPO部36は、ポリゴンパラメータ指示バッファIBを参照して、チャンクバッファCBに割り当てられたブロックに位置するポリゴンの各画素の画素データを生成する。また、RPO部36は、隣接する4画素(クアッド)を一単位としてフラグメントシェーダ部35に渡して、ユーザープログラムに従って画素データの任意の加工処理を実行させる。そして、RPO部36は、生成された画素データをチャンクバッファCBに書き込む。
【0031】
チャンクバッファ・コントローラ37は、画素データが書き込まれたチャンクバッファCBを、メモリアクセスI/F39を介して、DRAM等の外部メモリ内のフレームバッファ11に書き込む。
【0032】
図7は、図1のグラフィクス・エンジン16の各メモリに格納される情報を表す図である。同図のように、グラフィクス・エンジン16は、DRAM等の外部メモリ75(図1のDRAM11)と、外部メモリよりアクセスが高速なSRAM等の内部メモリ71とを有する。そして、内部メモリ71は、4個(N個)を上限とするポリゴンのパラメータを格納したポリゴンパラメータバッファPBと、8個(M個)を上限とするチャンクバッファCB(CB1〜8)及びポリゴンパラメータ指示バッファIB(IB1〜8)とを有する。さらに、内部メモリ71には、各チャンクバッファCBがフレームバッファ76におけるいずれのブロック(CP00〜)に対応するかを示すチャンク割り当て情報72を有する。即ち、チャンク割り当て情報72には、チャンクバッファの番号「CB1〜8」とフレームバッファ76内のブロック番号「CP00〜」との対応情報が格納される。
【0033】
また、前述したとおり、チャンクバッファCBの各画素73はRGB各色の階調値、Z値等の画素データを有し、ポリゴンパラメータ指示バッファIBの各画素74は、描画されるポリゴンのポリゴンパラメータバッファPBにおけるエントリー番号を有する。
【0034】
一方、外部メモリ75は、本実施の形態例におけるグラフィクス・エンジン16によって生成される画素データを格納するフレームバッファ76を有する。本実施の形態例におけるフレームバッファ76は、例えば、8×8ピクセルのブロック(CP00〜)に分割され、各ブロックの各画素77は、チャンクバッファCBと同様に、RGB各色の階調値、Z値等を有する。なお、描画処理前のフレームバッファ76には、デフォルトの画素データが格納される。
【0035】
図8は、本実施の形態例におけるグラフィクス・エンジン16の描画処理の詳細を説明するフローチャート図である。まず、図2のポリゴンセットアップ部31は、ポリゴンのセットアップ処理として、ジオメトリ処理部20からポリゴンの頂点パラメータを順次受け取り、ポリゴンの描画パラメータを生成する(S11)。そして、ポリゴンセットアップ部31は、生成した描画パラメータと頂点パラメータとをポリゴンパラメータバッファPBに格納する(S12)。ポリゴンセットアップ部31は、ポリゴンパラメータバッファPBに、4個(N個)のポリゴンのパラメータが格納されるまで、または、フレームバッファに描画される全ポリゴンのパラメータの格納が完了するまで(S13のYES)、処理S11、S12を行う。
【0036】
S13がYESの場合、チャンクディサイダー部34は、ポリゴンパラメータバッファPBからポリゴンのパラメータを順に読み出す(S14)。続いて、図6に示すチャンクディサイダー部34内のチャンクポジションコンパレータ61は、読み出したポリゴンの画素の座標を含むブロックが、チャンクバッファCBに割り当て済みか否かを判定する(S15)。具体的には、チャンクポジションコンパレータ61は、まず、チャンクバッファ・コントローラ37からチャンクバッファCBに割り当て済みのブロックの座標情報を取得し、ポリゴンの座標が当該ブロック内の座標領域に含まれているか否かを判定する。
【0037】
S15がNOなら、続いて、チャンクポジションコンパレータ61は、空きのチャンクバッファがある場合(S16のYES)、ポリゴンの画素の座標を含むブロックのチャンクバッファCBへ割り当てをチャンクアサイナー62に指示する(S17)。具体的には、チャンクアサイナー62は、割り当て対象のブロックの座標情報を、チャンクバッファの割り当て要求と共に、チャンクバッファ・コントローラ37(図2)に送る。そして、チャンクバッファ・コントローラ37は、割り当て済みのチャンクバッファCBが8個に達していない場合、空きのチャンクバッファCBがあると判定し、対象ブロックをチャンクバッファCBに割り当てると共に、チャンクバッファの番号(以下、チャンク番号CB1〜8)をチャンクアサイナー62に通知する。また、ブロックの座標情報とチャンク番号との対応情報が割り当て情報72(図7)として記録される。
【0038】
そして、チャンクポジションコンパレータ61(図6)は、チャンク番号とポリゴンのパラメータとをRPO部36(図2)に渡し、RPO部36は、それらの情報に基づいて、チャンクバッファCBに割り当てられたブロックについてポリゴンパラメータ指示バッファIBのエントリー番号を生成する(S18)。RPO部36は、具体的に、次のようにポリゴン指示バッファIBのエントリー番号を生成する。
【0039】
まず、新たにブロックがチャンクバッファCBに割り当てられた場合、RPO部36は、チャンク番号に対応するブロックの画素データをフレームバッファから読み出して対応するチャンクバッファCBに書き込む。そして、RPO部36は、ポリゴンのパラメータに基づいて、チャンクバッファCBに割り当てられたブロック内のポリゴンの各画素のZ値を生成する。具体的に、例えば、RPO部36は、ポリゴンの左辺上(図4の41)の各画素について、ポリゴンの最上部の頂点(図4のPK1)のZ値(頂点パラメータ)に左辺41のZ値の増分値(描画パラメータ)を順次加算していくことにより、左辺41上の各画素のZ値を求める。そして、RPO部36は、各スパン(図4の46)について、左端画素(図4の44)のZ値に各スパンのZ値の増分値を順次加算していくことにより、スパン上の各画素のZ値を取得する。
【0040】
そして、RPO部36は、ブロック内のポリゴンの各画素のZ値と、チャンクバッファCBの対応する画素のZ値とを比較して深度テストを行う。具体的に、RPO部36は、ポリゴンのZ値がチャンクバッファCBのZ値よりも小さい場合、そのポリゴンが手前に描画されるため、ポリゴンパラメータ指示バッファIBの対応する画素に当該ポリゴンのポリゴンパラメータバッファPBにおけるエントリー番号を書き込む。このようにして、RPO部36は、画素毎に描画されるポリゴンのエントリー番号を生成し、ポリゴンパラメータ指示バッファIBに格納する。
【0041】
続いて、ポリゴンパラメータ指示バッファIBのエントリー番号の生成後(S18)、チャンクディサイダー部34は、読み出したポリゴンの全画素について、当該画素を含むブロックをチャンクバッファCBに割り当てる処理(以下、チャンク割り当て処理)を完了したか否かを判定する(S19)。ポリゴンの全画素について割り当て処理を完了していない場合(S19のNO)、S15に戻り、チャンクディサイダー部34は、ポリゴンの画素であって、チャンクバッファCBに割り当て済みのブロックの外にある画素について、チャンク割り当て処理を行う(S15〜S19)。
【0042】
一方、読み出したポリゴンの全画素についてチャンク割り当て処理を完了した場合(S19のYES)、チャンクディサイダー部34は、読み出したポリゴンのポリゴンパラメータバッファPB内のフラグ(図5参照)を「未完了」から「完了」に書き換えると共に、ポリゴンパラメータバッファPB内の全ポリゴンについてチャンク割り当て処理を一通り実施したか否かを判定する(S20)。割り当て処理を実施していないポリゴンがある場合(S20のNO)、チャンクディサイダー部34は、ポリゴンパラメータバッファPBから次のポリゴンのパラメータを読み出す(S14)。そして、同様に、次のポリゴンについてチャンク割り当て処理を行う(S15〜S19)。
【0043】
一方、S15において、ポリゴンの画素の座標を含むブロックが既にチャンクバッファCBに割り当て済みの場合(S15のYES)、そのチャンク番号とポリゴンのパラメータがチャンクポジションコンパレータ61からRPO部36に渡され、RPO部35は、当該情報に基づいて、既に生成されているポリゴンパラメータ指示バッファIB内のエントリー番号を更新する(S18)。具体的に、RPO部36は、ブロック内のポリゴンの各画素のZ値を算出し、当該Z値がチャンクバッファCBの対応する画素のZ値よりも小さい場合に、ポリゴンパラメータ指示バッファIBの対応する画素に当該ポリゴンのエントリー番号を上書きする。
【0044】
他方、ポリゴンの画素の座標を含むブロックがチャンクバッファに未割り当てであり(S15のNO)、空きのチャンクバッファがない場合(S16のNO)、ポリゴンの全画素についてのチャンク割り当て処理を完了していない場合であっても、そのポリゴンのチャンク割り当て処理を終了する。そして、チャンクディサイダー部34は、ポリゴンパラメータバッファPB内の全ポリゴンのチャンク割り当て処理を実施したか否かを判定し(S20)、実施していない場合は(S20のNO)次のポリゴンのパラメータを読み出し(S14)、実施した場合は(S20のYES)チャンクバッファCBの画素データの生成処理をRPO部36に指示する。
【0045】
ポリゴンパラメータバッファPB内の4個の全ポリゴンについてチャンク割り当て処理を実施した結果(S20のYES)、全ポリゴンの全画素にチャンクバッファCBが割り当てられる場合もあれば、ポリゴン内の一部の画素にチャンクバッファCBが割り当てられない場合、一部のポリゴン自体にチャンクバッファがひとつも割り当てられない場合もある。これは、チャンクバッファCBの容量が8個のブロック分に制限されていることに因る。逆に、全ポリゴンの全画素にチャンクバッファが割り当てられているが、一部のチャンクバッファが未割り当て状態となる場合もある。
【0046】
そして、RPO部36は、チャンクバッファ毎に生成されたポリゴンパラメータ指示バッファIBを参照して、チャンクバッファCBの各画素の画素データを生成する(S21)。RPO部36は、ポリゴンパラメータ指示バッファIBの各画素に格納されたエントリー番号に基づいて、ポリゴンパラメータバッファPBから当該画素に描画するポリゴンのパラメータを取得し画素データを生成する。
【0047】
具体的には、例えば、RPO部36は、パラメータに基づいて、まず、ポリゴンの左辺上(図4の41)の各画素について、ポリゴンの最上部の頂点(図4のPK1)の画像パラメータの値(頂点パラメータ)に左辺41の各画像パラメータ増分値(描画パラメータ)を順次加算していくことにより、左辺41上の各画素の画素データを求める。そして、RPO部36は、各スパン(図4の46)について、左端画素(図4の44)の各画像パラメータの値に増分値を順次加算していくことにより、スパン上の各画素の画素データを取得する。
【0048】
フラグメントシェーダ部35は隣接する複数画素(クアッド)を一単位として画像データの加工を行うため、RPO部36は、フラグメントシェーダ部35にクアッド単位の画素データを渡す。そして、RPO部36は、フラグメントシェーダ部35によって加工された画素データをチャンクバッファ・コントローラI/F63を介してチャンクバッファCBに書き込む。
【0049】
このように、RPO部36は、ポリゴンパラメータ指示バッファIB内のエントリー番号に基づいて、クアッド内の各画素に描画されるポリゴンのパラメータを取得して画素データを生成する。これにより、RPO部36は、ポリゴンパラメータ指示バッファIBのエントリー番号に基づいて、クアッド内の各画素に描画対象のポリゴンのパラメータを直接関連付けることができ、クアッド単位の画素データを高速に生成することができる。
【0050】
チャンクバッファCBの画素データを生成すると(S21)、チャンクバッファ・コントローラ37は、メモリアクセスI/F39を介して、チャンクバッファCB内の画素データをフレームバッファ11へ書き出す(S22)。このように、画素データが、ポリゴン毎ではなくチャンクバッファCB毎に書き出されることにより、フレームバッファ(DRAM)11の連続したアドレスに対してアクセスが行われ、フレームバッファ(DRAM)11へのアクセス効率を上げることができる。
【0051】
チャンクバッファCB内の画素データのフレームバッファ11内への書き込みが終わると、グラフィクス・エンジン16は、次のフェーズでのポリゴンセットアップ処理(S11〜S13)と、チャンク割り当て処理(S14〜S20)とチャンクバッファCB内の画素データの生成処理(S21、22)を行う。ただし、前フェーズにおいて画素データの生成処理が未完了のポリゴンがある場合、グラフィクス・エンジン16は、次のフェーズで当該ポリゴンを含めて処理を行う。そこで、ポリゴンセットアップ部31は、ポリゴンパラメータバッファPBにフラグが「未完了」のポリゴンがあるか否かを判定すると共に(S23)、ポリゴンパラメータバッファPB内の全ポリゴンのフラグが「未完了」であるか否かを判定する(S25)。
【0052】
まず、ポリゴンパラメータバッファPB内の一部のポリゴンのフラグが「未完了」である場合(S23のYES、S25のNO)、ポリゴンセットアップ部31は、当該一部のポリゴンのエントリーのパラメータを残存させたまま(S26)、その他のエントリーに新たなポリゴンのパラメータを書き込み、ポリゴンパラメータバッファPBを更新する(S11、S12)。一方、ポリゴンパラメータバッファ内の全ポリゴンのフラグが「未完了」である場合(S23のYES、S25のYES)、ポリゴンセットアップ部31は、ポリゴンパラメータバッファPBを更新しない。
【0053】
つまり、前のフェーズで画素データの生成が未完了のポリゴンについては、既に生成済みのポリゴンパラメータが利用され、引き続き次のフェーズでチャンク割り当て処理、チャンクバッファCB内への画素データの生成処理等が行われる。
【0054】
他方、ポリゴンパラメータバッファPB内の全ポリゴンのフラグが「完了」である場合(S23のNO)、チャンクディサイダー部34は、さらに、フレームバッファに描画される全ポリゴンについて画素データの生成が完了したか否かを判定する(S24)。全ポリゴンの画素データの生成が完了した場合(S24のYES)、描画処理は終了し、全ポリゴンの画素データの生成が完了していない場合は(S24のNO)、全ポリゴンの画素データの生成が完了するまでS11〜S23の処理を行う。
【0055】
図9は、フレームFL内の描画対象のポリゴン群の一例を表す図である。図9の例には、フレームFLが「5×9=45個」のブロックCP00〜CP48に分割され、10個のポリゴンPG1〜PG10が含まれている。このフレームFLの画素データが生成され、フレームバッファFB(DRAM11)に格納される。以下、上記で説明した描画処理によって図9の10個のポリゴン(PG1〜10)をフレームバッファFL(FB)に描画する処理を説明する。この具体例では、3回の描画処理フェーズで描画処理が完了する。同図において、斜線は第1フェーズ、破線の斜線は第2フェーズ、横線は第3フェーズにおけるチャンクバッファCBを表す。なお、本実施の形態例におけるフレームバッファFL(FB)は、8×8ピクセルの各ブロックCP00〜CP48に分割されているものとする。
【0056】
<第1フェーズの描画処理>
まず、ポリゴンのセットアップ処理が行われる。ポリゴンセットアップ部31は、最初の4個のポリゴンPG1〜4の頂点パラメータから描画パラメータを生成し(S11)、図5のように、ポリゴンパラメータバッファPB10にポリゴンPG1〜4の頂点パラメータ、及び描画パラメータを格納する(S12)。なお、まだ各ポリゴンの画素データが生成されていないため、ポリゴンパラメータバッファPB10におけるポリゴンPG1〜4のフラグは「未完了」である。
【0057】
次に、ポリゴンパラメータバッファPB10に4つのポリゴンのパラメータが格納されると(S13のYES)、チャンク割り当て処理に入り、チャンクディサイダー部34は、ポリゴンパラメータバッファPB10からエントリー1の「ポリゴンPG1」のパラメータを読み出す(S14)。続いて、チャンクポジションコンパレータ61は、「ポリゴンPG1」の最上部の頂点座標を含むブロックが、チャンクバッファに割り当て済みか否かを判定する(S15)。
【0058】
図10は、第1フェーズの描画処理におけるチャンクバッファの割り当て処理を説明する図である。同図において、左にチャンクバッファCB1〜8と当該チャンクバッファに描画されるポリゴンの対応関係、右にチャンクバッファCB1〜8とフレームFL内のブロック(CP00〜)及びその座標の対応関係が表されている。描画処理の初めは、割り当て済みのチャンクバッファがないため(S15のNO、S16のYES)、チャンクアサイナー62は、「ポリゴンPG1」の最上部の頂点座標101を含む「ブロックCP01」に「チャンクバッファCB1」を割り当てる(S17)。そして、「チャンクバッファCB1」のチャンク番号「CB1」と「ポリゴンPG1」のパラメータがRPO部36に渡され、RPO部36は、チャンク番号「CB1」のポリゴンパラメータ指示バッファIB1(図7、11参照)のエントリー番号を生成する(S18)。
【0059】
具体的に、RPO部36は、チャンク番号「CB1」に対応する「ブロックCP01」のフレームバッファFL(FB)上のデフォルト(初期値)の画素データを読み出し、「チャンクバッファCB1」に書き込む。フレームバッファFL(FB)のデフォルトの画素データには値の大きいZ値が格納されるため、深度テストの結果、ポリゴンパラメータ指示バッファIB1の「ポリゴンPG1」が描画される各画素に、「ポリゴンPG1」のポリゴンパラメータバッファ(図5のBP10)のエントリー番号「1」が書き込まれる。
【0060】
図11は、「チャンクバッファCB1」のポリゴンパラメータ指示バッファIB1の一例を表す図である。上記の処理S18により、「ポリゴンPG1」が描画される画素にポリゴンパラメータバッファPB10のエントリー番号「1」が書き込まれる。
【0061】
図10に戻り、「ポリゴンPG1」の全画素のチャンク割り当て処理が完了していないため(S19のNO)、続いて、チャンクポジションコンパレータ61は、「ポリゴンPG1」の画素であって、「ブロックCP01」外の画素102を含む「ブロックCP02」が、チャンクバッファに割り当て済みか否かを判定する(S15)。「ブロックCP02」はチャンクバッファに未割り当てであり(S15のNO)、空きのチャンクバッファがあるため(S16のYES)、チャンクアサイナー62は、「ブロックCP02」を「チャンクバッファCB2」に割り当てる(S17)。同様にして、RPO部36は、「チャンクバッファCB2」に対応するポリゴンパラメータ指示バッファIB2内に「ポリゴンPG1」のエントリー番号「1」を書き込む(S18)。
【0062】
引き続き、「ポリゴンPG1」についてチャンク割り当て処理(S15〜S19)が行われ、ポリゴンPG1について、「ブロックCP10〜12」に「チャンクバッファCB3〜5」が割り当てられ、各ポリゴンパラメータ指示バッファIB3〜5内のエントリー番号が生成される。この時点でポリゴンPG1の全画素のチャンク割り当て処理が完了するため(S19のYES)、チャンクディサイダー部34は、ポリゴンパラメータバッファPB1の「ポリゴンPG1」のフラグを「完了」に書き換える。
【0063】
続いて、チャンクディサイダー部34は、ポリゴンパラメータバッファPB1から「ポリゴンPG2」のパラメータを読み出し(S14)、チャンクポジションコンパレータ61は、チャンクバッファに割り当て済みの「ブロックCP01〜02、CP10〜12」の座標情報を取得する。そして、チャンクポジションコンパレータ61は、「ポリゴンPG2」の最上部の頂点座標103が、割り当て済みのブロックに含まれるか否かを判定する(S15)。頂点座標103は「チャンクバッファCB3」に割り当てた「ブロックCP11」に含まれるため(S15のYES)、RPO部36は、深度テストを行いポリゴンパラメータ指示バッファIB3内の対応する画素に、「ポリゴンPG2」のエントリー番号を書き込む(S18)。
【0064】
図12は、「チャンクバッファCB3」のポリゴンパラメータ指示バッファIB3の一例を表す図である。同図のように、「ポリゴンPG2」が描画される画素にポリゴンパラメータバッファPB10(図5)の「ポリゴンPG2」のエントリー番号「2」が書き込まれる。なお、ポリゴンPG1とポリゴンPG2は、重複していない。
【0065】
図10に戻り、引き続き、「ポリゴンPG2」について、「ポリゴンPG2」の画素を有する「ブロックCP12」が「チャンクバッファCB4」に割り当て済みであるため、RPO部36は、深度テストを行いポリゴンパラメータ指示バッファIB4内のエントリー番号を更新する。また、「ブロックCP21、22」が「チャンクバッファCB6、7」に割り当てられる。
【0066】
同様にして、「ポリゴンPG3」について、「ポリゴンPG3」の画素を有する「ブロックCP21、22」が「チャンクバッファCB6、7」に割り当て済みであるため、RPO部36は、深度テストを行いポリゴンパラメータ指示バッファIB6、7内のエントリー番号を更新する。そして、「ポリゴンPG4」について、「ポリゴンPG4」の画素を有するブロックが「チャンクバッファCB7」に割り当て済みであるため、ポリゴンパラメータ指示バッファIB7内のエントリー番号が更新されると共に、「ブロックCP23」が「チャンクバッファCB8」に割り当てられる。そして、ポリゴンパラメータバッファPB10における「PG2〜4」のフラグが「完了」に書き換えられる。
【0067】
このように、ポリゴンPG1〜4の全画素について、当該画素を含むブロックが動的に8個のブロックがチャンクバッファCB1〜8に割り当てられ、それぞれのチャンクバッファに対応するポリゴンパラメータ指示バッファIB1〜8のエントリー番号が生成される。なお、「チャンクバッファCB8」に対応する「ブロックCP23」には「ポリゴンPG5」も描画されるが、ポリゴンパラメータバッファPB10に「ポリゴンPG5」は含まれていないため、「ポリゴンPG5」の描画処理は行われない。
【0068】
続いて、RPO部36は、ポリゴンパラメータ指示バッファIB1〜8の各画素に格納されたエントリー番号に基づいて、各画素に描画されるポリゴンのパラメータをポリゴンパラメータバッファPB10から取得して画素データを生成し、チャンクバッファCB1〜8内に格納する(S21)。そして、チャンクバッファCB1〜8内の画素データはフレームバッファFL(FB)に書き出され(S22)、内部メモリに保持されたブロックのチャンクバッファとの割り当て情報72がクリアされる。
【0069】
ところで、画素データは、ポリゴンパラメータ指示バッファIB1〜8にエントリー番号が書き込まれた各画素についてのみ生成される。従って、チャンクバッファ・コントローラ37は、ポリゴンパラメータ指示バッファIB1〜8にエントリー番号が書き込まれた画素についてのみ、チャンクバッファCB1〜8の画素データをフレームバッファFL(FB)に書き出してもよい。これにより、フレームバッファFL(FB)に書き出される画素データの量が抑えられる。
【0070】
続いて、ポリゴンセットアップ部31は、ポリゴンパラメータバッファPB10内の全ポリゴンのフラグが「完了」であるため、全エントリーの情報をクリアして、新たにポリゴンPG5〜8のパラメータを格納する(S11、12)。
【0071】
<第2フェーズの描画処理>
図13は、第2、3フェーズの描画処理におけるポリゴンパラメータバッファの一例を表す図である。同図のポリゴンパラメータバッファPB20は、第2フェーズの描画処理におけるポリゴンパラメータバッファであり、新たなポリゴンPG5〜8のパラメータがフラグ「未完了」で格納される。
【0072】
図14は、第2フェーズの描画処理におけるチャンクバッファの割り当て処理を説明する図である。図10と同様にして、左にチャンクバッファCB1〜8と当該チャンクバッファに描画されるポリゴンの対応関係、右にチャンクバッファCB1〜8とフレームFL内のブロック(CP00〜)及びその座標の対応関係が表されている。チャンクアサイナー62は、「ポリゴンPG5」の最上部の頂点座標141を含む「ブロックCP23」に「チャンクバッファCB1」を割り当てる(S17)。そして、RPO部36は、「チャンクバッファCB1」に対応するポリゴンパラメータ指示バッファIB1のエントリー番号を生成する(S18)。
【0073】
この時、フレームバッファの「ブロックCP23」には、既に「ポリゴンPG4」の画素データが格納されている。従って、ポリゴンパラメータ指示バッファIB1のエントリー番号生成時に、フレームバッファFL(FB)から「ポリゴンPG4」の画素データが格納された「ブロックCP23」の画素データが読み出され、「チャンクバッファCB1」に書き込まれる。RPO部36は、「ポリゴンPG5」の画素のZ値が、「ポリゴンPG4」の画素データが書き込まれた「チャンクバッファCB1」の対応する画素のZ値よりも小さい場合に、ポリゴンパラメータ指示バッファIB1に「ポリゴンPG5」のエントリー番号を書き込む。
【0074】
図15は、第2フェーズの描画処理におけるチャンクバッファCB1のポリゴンパラメータ指示バッファIB1の一例を表す図である。太線で囲んだ画素群151は、「ポリゴンPG4」と「ポリゴンPG5」が重複する画素である。「ポリゴンPG5」は「ポリゴンPG4」よりも手前に描画されるため、「ポリゴンPG5」のZ値は「チャンクバッファCB1」のZ値よりも小さい。従って、同図のように、画素群151に、「ポリゴンPG5」のポリゴンパラメータバッファPB20におけるエントリー番号「1」が書き込まれる。
【0075】
1回の描画処理で対象とするポリゴン数を4個(N個)に制限したことにより、「ブロックCP23」のように同じブロックに描画される複数のポリゴンが異なる描画処理フェーズで処理される場合がある。この場合は、RPO部36は、フレームバッファFL(FB)からそのブロックの画素データを読み出してチャンクバッファCBに格納し、深度テストを経て、当該ブロックに位置し画素データが未生成のポリゴンの画素データをチャンクバッファCBに上書きする。
【0076】
図14に戻り、「ポリゴンPG5」の全画素についてチャンク割り当て処理が完了すると(S19のYES)、チャンクディサイダー部34は、ポリゴンパラメータバッファPB20の「ポリゴンPG5」のフラグを完了に書き換える。続いて、チャンクディサイダー部34は、ポリゴンパラメータバッファPB20(図13)から「ポリゴンPG6」のパラメータを読み出す(S14)。
【0077】
同様にして、チャンクアサイナー62は、「ポリゴンPG6」について、「ブロックCP24,25:チャンクバッファCB2,3、ブロックCP34〜36:チャンクバッファCB4〜6、ブロックCP44,45:チャンクバッファCB7,8」のように、ポリゴンPG6が位置する各ブロックをそれぞれチャンクバッファに割り当てる(S15〜S17)。また、RPO部36は、各「チャンクバッファCB2〜8」に対応するポリゴンパラメータ指示バッファIB2〜8にエントリー番号を生成する(S18)。
【0078】
そして、チャンクアサイナー62は、「ポリゴンPG6」の画素座標143について、「ブロックCP46」をチャンクバッファに割り当てようとするが、既にチャンクバッファ数が8個に達しており、空きチャンクバッファがない(S16のNO)。従って、チャンクアサイナー62は、「ポリゴンPG6」の割り当て処理を終了し、ポリゴンパラメータバッファPB20の「ポリゴンPG6」のエントリー「2」にチャンクバッファに割り当てできなかったブロックの座標(48,32)を書き込む。これにより、チャンクディサイダー部34は、次の描画処理フェーズにおいて、「ポリゴンPG6」の割り当て処理途中の座標を認識することができる。そして、この時、ポリゴンパラメータバッファPB20(図13)の「ポリゴンPG6」のフラグは「未完了」のままとなる。
【0079】
続いて、「ポリゴンPG7、8」の割り当て処理が未実施であるため(S20のNO)、チャンクディサイダー部34は、ポリゴンパラメータバッファPB20(図13)から「ポリゴンPG7」のパラメータを読み出す(S14)。「ポリゴンPG7」の画素は「チャンクバッファCB3」が割り当て済みの「ブロックCP25」に含まれるため、RPO部36は、ポリゴンパラメータ指示バッファIB3に「ポリゴンPG7」のエントリー番号「3」(図13のPB20)を書き込む。そして、チャンクディサイダー部34は、ポリゴンパラメータバッファPB20における「ポリゴンPG7」のフラグを「完了」に書き換える。
【0080】
続いて、チャンクディサイダー部34は、ポリゴンパラメータバッファPB20から「ポリゴンPG8」のパラメータを読み出し(S14)、「ポリゴンPG8」の画素の座標を含む「ブロックCP37」を新たなチャンクバッファに割り当てようとする。しかし、割り当て済みのチャンクバッファ数が8個に達しているため(S16のNO)、チャンクディサイダー部34は「ポリゴンPG8」の割り当て処理を終了する。「ポリゴンPG8」の全画素の割り当て処理が完了していないため、ポリゴンパラメータバッファPB20における「ポリゴンPG8」のフラグは「未完了」のままとなる。
【0081】
ポリゴンパラメータバッファの全ポリゴンPG5〜8の割り当て処理が実施されたため(S20のYES)、RPO部36は、ポリゴンパラメータ指示バッファIB1〜8に基づいて、ポリゴンPG5〜7の画素データを生成し、チャンクバッファCB1〜8に書き込む(S21)。そして、チャンクバッファCB1〜8内の画素データはフレームバッファFL(FB)に書き出され(S22)、チャンクバッファCB1〜8とブロックとの割り当て情報72(図7)がクリアされる。
【0082】
<第3フェーズの描画処理>
第2フェーズが終了した時点で、この時、ポリゴンパラメータバッファ(図13のPB21)には、「未完了」のフラグを有する「ポリゴンPG6、8」が存在する(S23のYES)。そのため、ポリゴンセットアップ部31は、ポリゴンパラメータバッファPB21について、ポリゴンPG6、8のパラメータ(エントリー2、4)は残存させたまま、その他のエントリー1、3(131)に新たなポリゴンPG9,10のパラメータを格納する(S11、S12)。即ち、図13のポリゴンパラメータバッファPB30の通りである。
【0083】
次に、チャンクディサイダー部34は、このポリゴンパラメータバッファ(図13のPB30)から「ポリゴンPG6、8〜10」のパラメータを順に読み出して、各ポリゴンの画素が含まれるブロックを、8個を上限とするチャンクバッファに割り当てる。そして、チャンクポジションコンパレータ61は、「ポリゴンPG6」の割り当て処理を行う際、ポリゴンパラメータバッファPB30に格納された座標(48,32)を読み出し、当該座標の画素からチャンク割り当て処理を再開する。
【0084】
このように、本実施の形態例におけるグラフィクス・エンジン16は、「ポリゴンPG6,8」のように、第2フェーズで8個(M個)のチャンクバッファに割り当てきれないポリゴンであっても、当該ポリゴンのパラメータを次回の第3描画処理フェーズのポリゴンパラメータバッファPB30に残存させる。これにより、グラフィクス・エンジン16は、第3描画処理フェーズで、描画パラメータの再生成または退避させた描画パラメータの外部メモリからの読み出し処理を行うことなく、当該ポリゴンの描画処理を行うことができ、無駄な処理を省くことができる。そして、「ポリゴンPG6」のように、チャンク割り当て処理が途中のポリゴンについて、処理途中の座標をポリゴンパラメータバッファPBにあわせて書き込むことにより、チャンクディサイダー部34は、次回の描画処理フェーズで、処理途中のポリゴンのチャンク割り当て処理を再開することができる。
【0085】
このようにして、「ポリゴンPG6、8〜10」について、各ポリゴンを含む「ブロックCP37,38、CP46〜48」が「チャンクバッファCB1〜5」に割り当てられ、各ポリゴンパラメータ指示バッファIB1〜5にエントリー番号が書き込まれる(S15〜S20、図9)。そして、フレームバッファ内の画素データが「チャンクバッファCB1〜5」に格納された後、「ポリゴンPG6〜10」の画素データが生成され「チャンクバッファCB1〜5」内に書き込まれ(S21)、フレームバッファFL(FB)に書き出される(S22)。この場合は、ポリゴンパラメータバッファPB30内の全「ポリゴンPG8〜10」が「完了」フラグを有し(S23)、フレームバッファFL(FB)に描画される全てのポリゴン(PG1〜10)の画素データの生成処理が完了しているため(S24のYES)、グラフィクス・エンジン16(図1)は、描画処理を終了する。
【0086】
なお、チャンクディサイダー部34は、「ポリゴンPG6」について、ポリゴンパラメータバッファPB20に、処理途中の座標に加え、チャンクバッファCBに割り当てられなかったブロックと、割り当てたブロックとの境界画素(図9の90)画素データをポリゴンパラメータバッファPB20に保持しておいてもよい。具体的には、RPO部36は、「チャンクバッファCB8」の画素データの生成時に、「ブロックCP45」と「ブロックCP46」との境界画素90の画素データをポリゴンパラメータバッファPB21、30に格納しておく。これにより、RPO部36は、次回の描画処理フェーズにおいて「ブロックCP46」の画素データを生成する際に、ポリゴンの各スパンの左端画素(図4の44)の画素データではなく、境界画素90の画素データに各画像パラメータの増分値を加算すればよいため、画素データをさらに高速に生成することができる。
【0087】
以上のようにして、本実施の形態例におけるグラフィクス・エンジンは、M個を上限とするチャンクバッファを使用してN個を上限とするポリゴンの画素データを生成し、チャンクバッファに上書きする。これにより、グラフィクス・エンジンは、ポリゴンの画素データを生成する前後の一括アクセス以外はフレームバッファにアクセスすることがなく、最小限の容量の高速内部メモリによるチャンクバッファを利用し当該チャンクバッファに上書きすることによってポリゴンの画素データを生成する。従って、グラフィクス・エンジンは、低コストでかつ高速に描画処理を行うことができる。
【0088】
また、ポリゴン単位ではなくチャンクバッファ単位で、画素データがフレームバッファから読み出され、または生成済みの画素データがフレームバッファに書き出されることにより、フレームバッファに対して連続したアドレスのアクセスが行われ、フレームバッファへのアクセス効率が向上する。
【0089】
また、グラフィクス・エンジンは、1回の描画処理におけるチャンクバッファの数(M個)を制限することによって、チャンクバッファ及びポリゴンパラメータ指示バッファを少ないデータ容量で構成でき、内部メモリの容量を最小限に収めることができる。さらに、1回の描画処理におけるポリゴンの数(N個)を制限することにより、ポリゴンパラメータバッファも少ない容量で構成でき、同様に、内部メモリの容量を最小限にできる。
【0090】
また、本実施の形態例におけるグラフィクス・エンジンは、ポリゴンパラメータ指示バッファに基づいて、クアッドの各画素データを生成する。このように、グラフィクス・エンジンは、ポリゴンパラメータ指示バッファIBのエントリー番号に基づいて、クアッド内の各画素に、描画対象のポリゴンのパラメータを直接関連付けることにより、クアッド単位の画素データを高速に生成することができる。
【0091】
さらに、本実施の形態例におけるグラフィクス・エンジンは、1回の描画処理におけるポリゴン数の上限をN個とするため、同ブロックに描画される複数のポリゴンが異なる描画処理フェーズに処理されることがある。その場合は、グラフィクス・エンジンは、処理対象のブロックの画素データをフレームバッファから読み出してチャンクバッファに格納し、深度テストを経て当該ブロックにおける各ポリゴンの画素データを生成しチャンクバッファCB1〜8内に上書きする。これにより、グラフィクス・エンジンは、1回の描画処理におけるポリゴン数をN個に制限する場合であっても、各ポリゴンの画素データを生成することができる。
【0092】
そして、本実施の形態例におけるグラフィクス・エンジンは、M個のチャンクバッファを上限として1回の描画処理を行うため、M個のチャンクバッファに収まらないポリゴンがある。その場合は、グラフィクス・エンジンは、全ての画素データの生成が完了していないポリゴンのパラメータを次回の描画処理フェーズのポリゴンパラメータバッファに残存させる。これにより、グラフィクス・エンジンは、次回の描画処理フェーズで、新たに当該ポリゴンの描画パラメータの生成処理や、退避させた描画パラメータの外部メモリからの読み出し処理を行うことなく、当該ポリゴンの描画処理を行うことができる。つまり、グラフィクス・エンジンは、各ポリゴンの描画パラメータを1回生成するだけでよく、描画パラメータの生成処理を何度も繰り返すことによって処理量が増大することを回避できる。
【0093】
なお、本実施の形態例のグラフィクス・エンジンがポリゴンパラメータ指示バッファを用いる例を述べたが、グラフィクス・エンジンは、必ずしもポリゴンパラメータ指示バッファを用いる必要はない。グラフィクス・エンジンは、各ブロックについて、背面に描画されるポリゴンから順に画素データを生成しチャンクバッファに上書きしていくことによって、ブロック内の各画素の画素データを確定してもよい。
【0094】
なお、本実施の形態例における画素データは深度値を有するが、画素データは深度値を有していなくてもよい。また、本実施の形態例における画素データは、さらに、RGB各色の階調値に加えアルファ値等を有していてもよい。
【0095】
なお、上記の説明において、外部メモリはDRAMであるとして説明したが、外部メモリはDRAMに限定されるものではなく不揮発性メモリ等のいずれのメモリであってもよい。本実施の形態例では外部メモリのアクセス頻度が最小限に抑えられているため、いずれの種類の外部メモリであっても、それらのメモリアクセスによる処理効率の低下は少ない。また、外部メモリがキャッシュシステムにより階層化されている場合においても、キャッシュミスの発生を抑えた効率的なメモリアクセスを実現することができる。
【0096】
以上の実施の形態をまとめると、次の付記のとおりである。
【0097】
(付記1)
複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうち、N個を上限とするポリゴンが位置する前記ブロックを、M個を上限とするチャンクバッファに割り当てるチャンク割り当て部と、
前記N個のポリゴンのうち前記チャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成し前記チャンクバッファに書き込むチャンク生成部と、
前記チャンクバッファに書き込まれた前記画素データを前記フレームバッファに書き出すチャンク書き出し部とを有し、
前記チャンク割り当て部によるチャンクバッファ割り当て処理と、前記チャンク生成部による画素データの生成と書き込み処理と、前記チャンク書き出し部によるフレームバッファへの画素データの書き出し処理とを有する処理フェーズを、前記複数のポリゴンについて繰り返し実行することを特徴とするグラフィック処理装置。
【0098】
(付記2)
付記1において、
前記チャンク生成部は、前記処理フェーズ毎に、前記チャンクバッファに割り当てられたブロックの画素データを前記フレームバッファから読み出して前記チャンクバッファに書き込み、前記読み出した画素データが書き込まれた前記チャンクバッファに、前記生成した画素データを書き込むことを特徴とするグラフィック処理装置。
【0099】
(付記3)
付記1または2において、
前記グラフィック処理装置は、さらに、
前記処理フェーズ毎に、前記N個のポリゴンの頂点データに基づいて描画パラメータを生成しポリゴンパラメータバッファに書き込むポリゴンパラメータバッファ生成部を有し、
前記チャンク生成部は、前記ポリゴンパラメータバッファの前記描画パラメータに基づいて前記N個を上限とするポリゴンの画素データを生成することを特徴とするグラフィック処理装置。
【0100】
(付記4)
付記3において、
前記ポリゴンパラメータバッファ生成部は、第1の処理フェーズにおいて、前記ポリゴンパラメータバッファに書き込んだ前記N個のポリゴンの描画パラメータのうち、前記画素データの生成が完了していないポリゴンの描画パラメータを、第1の処理フェーズに続く第2の処理フェーズにおいて前記ポリゴンパラメータバッファに残存させ、当該描画パラメータを残存させたポリゴンとあわせて前記N個のポリゴンの描画パラメータを生成し前記ポリゴンパラメータバッファに書き込むことを特徴とするグラフィック処理装置。
【0101】
(付記5)
付記3または4において、
前記画素データはさらに奥行きを示す深度値を有し、
前記チャンク生成部は、前記生成した画素データの前記深度値が、前記フレームバッファから読み出した画素データの対応する画素の深度値よりも小さい場合に、当該生成した画素データを前記チャンクバッファに書き込むことを特徴とするグラフィック処理装置。
【0102】
(付記6)
付記5において、
前記ポリゴンパラメータバッファの描画パラメータは識別情報に関連付けて格納され、
前記チャンク生成部は、さらに、前記ブロックの各画素について、当該ブロック内に位置するポリゴンのうち前記深度値が最も小さいポリゴンに対応付けられた前記ポリゴンパラメータバッファ内の前記識別情報をポリゴンパラメータ指示バッファに格納し、当該ポリゴンパラメータ指示バッファ内の識別情報に基づいて前記描画パラメータを参照して前記N個を上限とするポリゴンの画素データを生成することを特徴とするグラフィック処理装置。
【0103】
(付記7)
付記4において、
前記チャンク割り当て部は、前記第1のフェーズにおいて、前記画素データの生成が完了していないポリゴンについて、当該生成が完了していない画素を示す座標情報を前記ポリゴンパラメータバッファに書き込み、
前記チャンク割り当て部は、前記第2のフェーズにおいて、前記画素データの生成が完了していないポリゴンについて、前記ポリゴンパラメータバッファ内の前記座標情報の示す前記画素が位置する前記ブロックを前記チャンクバッファに割り当てることを特徴とするグラフィック処理装置。
【0104】
(付記8)
付記1乃至7のいずれかにおいて、
前記チャンク割り当て部は、前記N個を上限とするポリゴンを順次、当該ポリゴンが位置する前記ブロックを、前記ポリゴンがN個に達するかまたは前記チャンクバッファがM個に達するまで前記チャンクバッファに割り当てることを特徴とするグラフィック処理装置。
【0105】
(付記9)
付記1または2において、
前記チャンクバッファは、前記フレームバッファよりもアクセス速度が速いことを特徴とすることを特徴とするグラフィック処理装置。
【0106】
(付記10)
付記3において、
前記ポリゴンパラメータバッファは、前記フレームバッファよりもアクセス速度が速いことを特徴とすることを特徴とするグラフィック処理装置。
【0107】
(付記11)
複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうち、N個を上限とするポリゴンが位置する前記ブロックを、M個を上限とするチャンクバッファに割り当てるチャンク割り当て工程と、
前記N個のポリゴンのうち前記チャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成し前記チャンクバッファに書き込むチャンク生成工程と、
前記チャンクバッファに書き込まれた前記画素データを前記フレームバッファに書き出すチャンク書き出し工程と、
を前記複数のポリゴンについて繰り返しコンピュータに実行させることを特徴とするコンピュータ読み取り可能なグラフィック処理プログラム。
【0108】
(付記12)
付記11において、
前記チャンク生成工程は、前記処理フェーズ毎に、前記チャンクバッファに割り当てられたブロックの画素データを前記フレームバッファから読み出して前記チャンクバッファに書き込み、前記読み出した画素データが書き込まれた前記チャンクバッファに、前記生成した画素データを書き込むことを特徴とするグラフィック処理プログラム。
【0109】
(付記13)
付記11または12において、さらに、
前記処理フェーズ毎に、前記N個のポリゴンの頂点データに基づいて描画パラメータを生成しポリゴンパラメータバッファに書き込むポリゴンパラメータバッファ生成工程を有し、
前記チャンク生成工程は、前記ポリゴンパラメータバッファの前記描画パラメータに基づいて前記N個を上限とするポリゴンの画素データを生成することを特徴とするグラフィック処理プログラム。
【0110】
(付記14)
付記13において、
前記ポリゴンパラメータバッファ生成工程は、第1の処理フェーズにおいて、前記ポリゴンパラメータバッファに書き込んだ前記N個のポリゴンの描画パラメータのうち、前記画素データの生成が完了していないポリゴンの描画パラメータを、第1の処理フェーズに続く第2の処理フェーズにおいて前記ポリゴンパラメータバッファに残存させ、当該描画パラメータを残存させたポリゴンとあわせて前記N個のポリゴンの描画パラメータを生成し前記ポリゴンパラメータバッファに書き込むことを特徴とするグラフィック処理プログラム。
【0111】
(付記15)
付記14において、
前記チャンク割り当て工程は、前記第1のフェーズにおいて、前記画素データの生成が完了していないポリゴンについて、当該生成が完了していない画素を示す座標情報を前記ポリゴンパラメータバッファに書き込み、
前記チャンク割り当て工程は、前記第2のフェーズにおいて、前記画素データの生成が完了していないポリゴンについて、前記ポリゴンパラメータバッファ内の前記座標情報の示す前記画素が位置する前記ブロックを前記チャンクバッファに割り当てることを特徴とするグラフィック処理プログラム。
【0112】
(付記16)
付記11乃至15のいずれかにおいて、
前記チャンク割り当て工程は、前記N個を上限とするポリゴンを順次、当該ポリゴンが位置する前記ブロックを、前記ポリゴンがN個に達するかまたは前記チャンクバッファがM個に達するまで前記チャンクバッファに割り当てることを特徴とするグラフィック処理プログラム。
【符号の説明】
【0113】
10:グラフィクス・コントローラ、11:DRAM、12:ディスプレイ、
13:CPU、14:アプリケーションプログラム、15:メモリコントローラ、
16:グラフィクス・エンジン、17:ディスプレイ・エンジン

【特許請求の範囲】
【請求項1】
複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうち、N個を上限とするポリゴンが位置する前記ブロックを、M個を上限とするチャンクバッファに割り当てるチャンク割り当て部と、
前記N個のポリゴンのうち前記チャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成し前記チャンクバッファに書き込むチャンク生成部と、
前記チャンクバッファに書き込まれた前記画素データを前記フレームバッファに書き出すチャンク書き出し部とを有し、
前記チャンク割り当て部によるチャンクバッファ割り当て処理と、前記チャンク生成部による画素データの生成と書き込み処理と、前記チャンク書き出し部によるフレームバッファへの画素データの書き出し処理とを有する処理フェーズを、前記複数のポリゴンについて繰り返し実行することを特徴とするグラフィック処理装置。
【請求項2】
請求項1において、
前記チャンク生成部は、前記処理フェーズ毎に、前記チャンクバッファに割り当てられたブロックの画素データを前記フレームバッファから読み出して前記チャンクバッファに書き込み、前記読み出した画素データが書き込まれた前記チャンクバッファに、前記生成した画素データを書き込むことを特徴とするグラフィック処理装置。
【請求項3】
請求項1または2において、
前記グラフィック処理装置は、さらに、
前記処理フェーズ毎に、前記N個のポリゴンの頂点データに基づいて描画パラメータを生成しポリゴンパラメータバッファに書き込むポリゴンパラメータバッファ生成部を有し、
前記チャンク生成部は、前記ポリゴンパラメータバッファの前記描画パラメータに基づいて前記N個を上限とするポリゴンの画素データを生成することを特徴とするグラフィック処理装置。
【請求項4】
請求項3において、
前記ポリゴンパラメータバッファ生成部は、第1の処理フェーズにおいて、前記ポリゴンパラメータバッファに書き込んだ前記N個のポリゴンの描画パラメータのうち、前記画素データの生成が完了していないポリゴンの描画パラメータを、第1の処理フェーズに続く第2の処理フェーズにおいて前記ポリゴンパラメータバッファに残存させ、当該描画パラメータを残存させたポリゴンとあわせて前記N個のポリゴンの描画パラメータを生成し前記ポリゴンパラメータバッファに書き込むことを特徴とするグラフィック処理装置。
【請求項5】
請求項3または4において、
前記画素データはさらに奥行きを示す深度値を有し、
前記チャンク生成部は、前記生成した画素データの前記深度値が、前記フレームバッファから読み出した画素データの対応する画素の深度値よりも小さい場合に、当該生成した画素データを前記チャンクバッファに書き込むことを特徴とするグラフィック処理装置。
【請求項6】
請求項4において、
前記チャンク割り当て部は、前記第1のフェーズにおいて、前記画素データの生成が完了していないポリゴンについて、当該生成が完了していない画素を示す座標情報を前記ポリゴンパラメータバッファに書き込み、
前記チャンク割り当て部は、前記第2のフェーズにおいて、前記画素データの生成が完了していないポリゴンについて、前記ポリゴンパラメータバッファ内の前記座標情報の示す前記画素が位置する前記ブロックを前記チャンクバッファに割り当てることを特徴とするグラフィック処理装置。
【請求項7】
請求項1乃至6のいずれかにおいて、
前記チャンク割り当て部は、前記N個を上限とするポリゴンを順次、当該ポリゴンが位置する前記ブロックを、前記ポリゴンがN個に達するかまたは前記チャンクバッファがM個に達するまで前記チャンクバッファに割り当てることを特徴とするグラフィック処理装置。
【請求項8】
請求項1または2において、
前記チャンクバッファは、前記フレームバッファよりもアクセス速度が速いことを特徴とすることを特徴とするグラフィック処理装置。
【請求項9】
請求項3において、
前記ポリゴンパラメータバッファは、前記フレームバッファよりもアクセス速度が速いことを特徴とすることを特徴とするグラフィック処理装置。
【請求項10】
複数のブロックに分割されたフレームバッファに描画される複数のポリゴンのうち、N個を上限とするポリゴンが位置する前記ブロックを、M個を上限とするチャンクバッファに割り当てるチャンク割り当て工程と、
前記N個のポリゴンのうち前記チャンクバッファに割り当てられたブロック内に位置するポリゴンの画素データを生成し前記チャンクバッファに書き込むチャンク生成工程と、
前記チャンクバッファに書き込まれた前記画素データを前記フレームバッファに書き出すチャンク書き出し工程と、
を前記複数のポリゴンについて繰り返しコンピュータに実行させることを特徴とするコンピュータ読み取り可能なグラフィック処理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2012−63922(P2012−63922A)
【公開日】平成24年3月29日(2012.3.29)
【国際特許分類】
【出願番号】特願2010−206860(P2010−206860)
【出願日】平成22年9月15日(2010.9.15)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】