JP2004133608A - 画像生成装置 - Google Patents
画像生成装置 Download PDFInfo
- Publication number
- JP2004133608A JP2004133608A JP2002296338A JP2002296338A JP2004133608A JP 2004133608 A JP2004133608 A JP 2004133608A JP 2002296338 A JP2002296338 A JP 2002296338A JP 2002296338 A JP2002296338 A JP 2002296338A JP 2004133608 A JP2004133608 A JP 2004133608A
- Authority
- JP
- Japan
- Prior art keywords
- buffer
- cache
- block
- read address
- block number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Image Generation (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】近年の画像生成装置はポリゴン数の飛躍的増加のために計算処理及びバッファリード/ライトの高速化が強く望まれている。また、汎用プロセッサが複数個必要な従来装置は高価である。
【解決手段】描画回路12は、現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、そのバッファリードアドレスをバッファネクストリードアドレスとして予めキャッシュ制御部13へ出力する。キャッシュ制御部13は、算出したバッファブロック番号のバッファブロックがキャッシュメモリ14に格納されていないことを検出したときは、バッファネクストリードアドレスに対応するバッファブロック番号が示すバッファブロックをバッファ16からリードさせて、選択したキャッシュブロックに格納させる。
【選択図】 図1
【解決手段】描画回路12は、現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、そのバッファリードアドレスをバッファネクストリードアドレスとして予めキャッシュ制御部13へ出力する。キャッシュ制御部13は、算出したバッファブロック番号のバッファブロックがキャッシュメモリ14に格納されていないことを検出したときは、バッファネクストリードアドレスに対応するバッファブロック番号が示すバッファブロックをバッファ16からリードさせて、選択したキャッシュブロックに格納させる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は画像生成装置に係り、特にコンピュータグラフィックスによる3次元形状物体を隠面消去した画像を生成する画像生成装置に関する。
【0002】
【従来の技術】
コンピュータグラフィックスによる3次元形状物体を隠面消去した画像を生成する従来の画像生成装置として、Zバッファ法により隠面消去した画像を生成する装置が良く知られている。このZバッファ法とは、視点から物体までの距離である奥行き値(Z値)を各画素毎に格納するZバッファと、明るさを表す輝度値を各画素毎に格納するフレームバッファとを用い、各画素毎に3次元形状物体の奥行き値と輝度値を計算し、Zバッファ中の奥行き値と3次元形状物体の奥行き値とを比較して、視点から近い方の奥行き値及び輝度値をZバッファ及びフレームバッファに残すことで、最終的にある視点から見た場合に見えなくなる物体、あるいは物体の部分を表示させないように隠面消去された画像をフレームバッファ中に生成する方法である。
【0003】
また、従来の画像生成装置では、汎用プロセッサでフレームバッファに図形等の画像情報を描画するが、キャッシュメモリを使用してその描画速度を高速化しようとするものが知られている(特許文献1参照)。
【0004】
この従来の画像生成装置では、フレームバッファの一部の写しを有するキャッシュメモリ装置のキャッシュ単位を、2次元的な広がりを持つ矩形ブロックとし、かつ、コピーバック方式を適用する構成とすることにより、汎用プロセッサからフレームバッファへの書き込み要求が頻繁に発生する描画時には、一旦キャッシュミスとなっても、該当するフレームバッファ上の矩形ブロックのデータをキャッシュメモリ装置に読み込み、これに続くフレームバッファ上での2次元近傍への書き込み要求はキャッシュヒットする可能性が高くなり、フレームバッファへの書込み操作の高速化を図ろうとするものである。
【0005】
【特許文献1】
特開平6−59975号公報(第2−6頁、図1)
【0006】
【発明が解決しようとする課題】
しかるに、前述したZバッファ法を用いた従来の画像生成装置では、3次元形状物体を画面に投影したときの投影像に含まれる各画素毎に計算処理とバッファリード/ライトを行うが、Zバッファやフレームバッファには、スタティック・ランダム・アクセス・メモリ(SRAM)を使用した場合、計算処理、バッファリード/ライトの高速化が可能となるが、ダイナミック・ランダム・アクセス・メモリ(DRAM)に比べてコスト高となる。
【0007】
一方、従来のDRAMでは計算処理、バッファリード/ライト双方の高速化が不充分であり、3次元のコンピュータグラフィックスの表示の高画質化が益々要求されるようになった近年では、ポリゴン数の飛躍的増加のために計算処理及びバッファリード/ライトの高速化が強く望まれている。
【0008】
また、特許文献1記載の従来の画像生成装置では、汎用プロセッサを用いて画面上の各画素位置に対応した画素の輝度値をフレームバッファに格納し、また、バッファを所定サイズの矩形領域に分割し、バッファの一部の写しを矩形ブロック単位に保持するキャッシュメモリ装置を有する装置で、専用の描画ハードウェアによりフレームバッファに図形等を描画する装置よりも安価ではあるが、汎用プロセッサとてハードウェアであり、専用の描画ハードウェアと同等の性能を汎用プロセッサで得ようとすると、汎用プロセッサを複数個用いることになり、専用の描画ハードウェアを用いた場合に比べて高価な構成となってしまう。
【0009】
本発明は以上の点に鑑みなされたもので、画面を複数のブロックに分割し、そのブロック単位でバッファメモリ(以下、単にバッファという)とキャッシュメモリ間のデータ転送を行い、描画回路がキャッシュメモリに対してリード/ライトを行うことにより、バッファのリード/ライトを高速化し、更に描画回路の並列化、パイプライン化を図ることにより、3次元形状物体を隠面消去した画像を高速に生成し得る画像生成装置を提供することを目的とする。
【0010】
また、本発明の他の目的は、専用のハードウェア(描画回路)を設け、汎用プロセッサを用いた構成に比し安価な構成で画像を高速に生成し得る画像生成装置を提供することにある。
【0011】
【課題を解決するための手段】
上記の目的を達成するため、本発明の画像生成装置は、格子状に並んだ複数の画素で構成される画面を複数のバッファブロックに分割し、各々バッファブロック番号を付したバッファブロック単位で視点からの距離を表す奥行き値と輝度値を複数の画素毎に格納するバッファと、3次元形状物体を基本形状であるポリゴンの集合として定義し、ポリゴンの頂点毎に画面上の位置と視点からの距離を表す奥行き値及び輝度値が記述されているポリゴンデータを入力として受け、奥行き値及び輝度値を内挿することによりポリゴン内の画素の画素位置、奥行き値及び輝度値を求め、バッファから入力された画素位置に対応する奥行き値よりも内挿によって求めた奥行き値の方が小さいときにのみ、内挿によって求めた奥行き値及び輝度値を出力すると共に、バッファリードアドレス、バッファライトアドレス又はバッファネクストリードアドレスを出力する描画回路と、キャッシュ制御部と、キャッシュ制御部からの制御信号に基づき、選択したキャッシュブロックに格納されている奥行き値及び輝度値をキャッシュメモリからバッファへ転送した後、リードアドレス又はライトアドレスに対応したバッファブロック番号のバッファブロックの奥行き値及び輝度値をバッファから選択したキャッシュブロックに転送して格納させるバッファ制御部と、描画回路が少なくともリードアドレス、ライトアドレス及びバッファネクストリードアドレスを独立して出力するように描画回路の動作を制御すると共に、画面へのポリゴンの描画開始前にバッファ制御部を介してバッファを初期化させ、画面内の全てのポリゴンの描画終了時にバッファ制御部によりバッファからの輝度値をリードさせて出力させる演算手段とを有する構成としたものである。
【0012】
ここで、上記のキャッシュ制御部は、複数のバッファブロックの奥行き値及び輝度値を、このバッファブロック単位で格納する、各々キャッシュブロック番号を付した複数のキャッシュブロックからなるキャッシュメモリと、描画回路からバッファの画素位置に対応する奥行き値及び輝度値のバッファリードアドレス、バッファライトアドレス又はバッファネクストリードアドレスを入力として受け、入力されたリードアドレス又はライトアドレスに対応したバッファブロック番号を算出し、その算出したバッファブロック番号のバッファブロックがキャッシュメモリに格納されているかを、算出したバッファブロック番号とキャッシュブロック毎に記憶しているバッファブロック番号を比較することで検出し、キャッシュメモリに格納されているときにはキャッシュメモリからバッファリードアドレスに対応する奥行き値をリードして描画回路へ出力するか、又は描画回路から入力された奥行き値及び輝度値をキャッシュメモリのバッファライトアドレスに対応した場所にライトし、キャッシュメモリに格納されていないときには更新を行う一のキャッシュブロックを選択して、選択したキャッシュブロックに格納されている奥行き値及び輝度値をキャッシュメモリから出力させた後、算出したバッファブロック番号のバッファブロックを選択したキャッシュブロックに格納させる制御信号を出力し、また、算出したバッファブロック番号のバッファブロックがキャッシュメモリに格納されていないことを検出したときは、バッファネクストリードアドレスに対応するバッファブロック番号が示すバッファブロックをバッファからリードさせて、選択したキャッシュブロックに格納させる機能を備える。
【0013】
また、上記の描画回路は、現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、将来出力するそのバッファリードアドレスをバッファネクストリードアドレスとして予めキャッシュ制御部へ出力する機能を備える。
【0014】
この発明では、描画回路から将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出しすることで、描画中にバッファネクストリードアドレスによって示されたバッファブロックを予めキャッシュメモリに格納することにより、バッファリードアドレスが出力されたときのキャッシュミスヒットを減らすことができる。
【0015】
【発明の実施の形態】
次に、本発明の実施の形態について図面と共に説明する。図1は本発明になる画像生成装置の一実施の形態のブロック図を示す。この実施の形態の画像生成装置は、3次元空間中に配置した物体を基本形状であるポリゴンの集合として定義し、格子状に並んだ画素で構成される画面上の各画素位置に対応した、視点から物体までの距離を表す奥行き値(Z値)及び輝度値を格納するバッファを用いて、奥行き値に基づいて隠面消去した画像を生成する画像生成装置で、装置全体を統括的に制御する中央処理装置(CPU)11と、ポリゴンデータが入力される描画回路12と、描画回路12に接続されたキャッシュ制御部13と、キャッシュ制御部13により動作が制御されるキャッシュメモリ14と、バッファ制御部15と、バッファ制御部15により動作が制御され上記の奥行き値(Z値)及び輝度値を格納するバッファ16とから構成されている。
【0016】
描画回路12は専用の描画ハードウェアである。キャッシュメモリ14は、例えばスタティック・ランダム・アクセス・メモリ(SRAM)により構成されている。一方、バッファ16は、大容量が要求されるため、大容量が確保し易いシンクロナス・DRAM(SDRAM)により構成されている。SDRAMは、少ないデータをリード/ライトする場合に比べて、まとまった多くのデータをリード/ライトした方がデータの転送能力が向上する特徴がある。
【0017】
次に、本実施の形態の動作について説明する。本実施の形態はZバッファ法により、3次元形状物体を隠面消去した画像を生成する。Zバッファ法では、画面描画前にバッファ16の初期化が必要であるため、まず、CPU11からバッファ初期化リクエストが、バッファスタートアドレス、画面縦ライン数、画面横ピクセル数と共にバッファ制御部15に供給され、バッファ制御部15によりバッファ16の初期化が行われる。
【0018】
続いて、CPU11は描画命令を描画回路12へ出力する。描画回路12は、描画命令を入力として受けると、外部から入力されるポリゴンデータを取り込む。このポリゴンデータはポリゴンと呼ばれる平面多角形(例えば、三角形)として扱われる3次元座標の形状データで、ポリゴンの各頂点毎に画面上の位置と視点からの距離を表す奥行き値(Z値)及び輝度値が記述されている。描画回路12は、このポリゴンデータの奥行き値及び輝度値を内挿することで、ポリゴン内の画素の画素位置と奥行き値及び輝度値を求め、これらと共にポリゴン内の各画素位置から画素毎のバッファリードアドレスを計算し、キャッシュ制御部13に供給する。
【0019】
バッファ16は、格子状に並んだ画素で構成される画面上の各画素位置に対応した、視点からの距離を表す奥行き値及び輝度値を格納するためのメモリで、バッファ16には上記の奥行き値及び輝度値が、縦mライン、横nピクセル毎のブロック単位に分割されて格納されている。この各ブロック(以下、バッファブロックともいう)には、バッファブロック番号が付されている。
【0020】
一方、キャッシュメモリ14は、上記のバッファブロックを複数個格納するメモリで、各バッファブロックを格納するキャッシュブロック毎にキャッシュブロック番号を付している。キャッシュ制御部13は、各キャッシュブロックが格納しているバッファブロック番号を記憶している。
【0021】
ここで、上記のバッファ16が格納しているバッファブロックのバッファブロック番号と、キャッシュメモリ14が格納しているバッファブロック番号と、キャッシュ制御部13が格納しているキャッシュブロック番号とバッファブロック番号の対応関係について、図2と共に詳細に説明する。一例として、縦16ライン(画素)、横16ピクセル(画素)の画面の奥行き値及び輝度値を、縦4ライン(画素)、横4ピクセル(画素)毎のブロック単位に分割した場合、図2(a)に示すように、これら各バッファブロックをバッファ16が格納すると共に、各バッファブロックにはバッファブロック番号として0〜15のいずれか一の番号が付されている。
【0022】
一方、キャッシュメモリ14は一例として、4個のバッファブロックを格納する容量があったとすると、キャッシュメモリ14の容量は、図2(b)に示すように、4個のキャッシュブロックに分割され、それら各キャッシュブロックにはキャッシュブロック番号0〜3が付されている。
【0023】
ここで、描画回路12はポリゴン内の各画素位置から画素毎のバッファリードアドレスを計算し、キャッシュ制御部13に出力する。また、描画回路12は現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを、将来、バッファリードアドレスとして出力する場合、そのバッファリードアドレスをバッファネクストリードアドレスとしてキャッシュ制御部13に出力する。
【0024】
例えば、図2(a)において、ポリゴン内の画素位置がバッファブロック番号9、10の2つのバッファブロックに跨っており、描画開始画素がバッファブロック番号9のバッファブロックに含まれる場合、描画回路12はバッファブロック番号9に対応するバッファリードアドレスと、バッファブロック番号10に対応するバッファネクストリードアドレスをキャッシュ制御部13に出力する。
【0025】
キャッシュ制御部13は、各キャッシュブロックが格納しているバッファブロック番号を記憶しており、各キャッシュブロックが描画回路12によってライトされたことを記憶するライトフラグを持つ。
【0026】
図2(a)、(b)の場合、キャッシュブロック番号0はバッファブロック番号0のバッファブロックを、キャッシュブロック番号1はバッファブロック番号9のバッファブロックを、キャッシュブロック番号2はバッファブロック番号5のバッファブロックを、キャッシュブロック番号3はバッファブロック番号4のバッファブロックを格納していることをキャッシュ制御部13は記憶している。
【0027】
キャッシュ制御部13は、描画回路12からバッファリードアドレスが入力されると、それからリードするバッファブロック番号(バッファリードブロック番号)を算出し、キャッシュメモリ14内の各キャッシュブロックが保持しているバッファブロック番号と比較する。
【0028】
比較が一致した場合、キャッシュ制御部13は、画素位置に対応するリードアドレスをキャッシュメモリ14に出力し、キャッシュメモリ14から画素位置に対応する奥行き値をリードして描画回路12へ出力する。
【0029】
上記の比較が一致しない場合、キャッシュ制御部13は、CPU11へのキャッシュヒット信号をインアクティブにして、CPU11からの新たな描画命令出力を抑止すると共に、更新を行うキャッシュブロックを選択し、更新を行うキャッシュブロックに対応するバッファブロック番号からバッファライトスタートアドレスを算出し、更新を行うキャッシュメモリ14のキャッシュブロック番号からキャッシュスタートアドレスを算出し、バッファリードアドレスからバッファリードスタートアドレスを算出し、更新を行うキャッシュブロックのライトフラグ及びキャッシュ更新リクエストと共にバッファ制御部15に出力する。
【0030】
バッファ制御部15は、キャッシュ更新リクエストがキャッシュ制御部13から入力されると、同じくキャッシュ制御部13から入力されるライトフラグがアクティブな場合は、キャッシュ制御部13から入力されるキャッシュスタートアドレスから1バッファブロック分の奥行き値、輝度値をキャッシュメモリ14からリードし、それをバッファ16の上記バッファライトスタートアドレスで示された場所に格納する。ライトフラグがインアクティブの場合は上記のバッファライトは行わない。
【0031】
その後、バッファ制御部15は、入力されたバッファリードスタートアドレスで示されたバッファ16の場所から1バッファブロック分リードし、キャッシュメモリ14のキャッシュスタートアドレスで示された場所に格納する。その後、バッファ制御部15は、キャッシュ制御部13にキャッシュ更新アクノリッジを出力する。バッファ16はSDRAMで構成されているので、バッファ制御部15はSDRAMであるバッファ16にチップセレクト(CS)、ローアドレスストローブ(RAS)、カラムアドレスストローブ(CAS)、ライトイネーブル(WE)及びアドレスを出力し、奥行き値及び輝度値のライト/リードを行う。
【0032】
上記の比較が一致しない場合の動作について、図2と共に更に具体的に説明する。一例として、バッファ16に図2(a)に示す16個のバッファブロックが格納されているとし、また、図2(b)に示すキャッシュメモリ14の4つの記憶領域を示すキャッシュブロック番号0〜3のキャッシュブロックに、図2(a)に示したバッファブロック番号0、9、5、4のバッファブロックの奥行き値及び輝度値が格納されているものとする。
【0033】
この状態で、描画回路12がキャッシュ制御部13に出力したバッファリードアドレスが、バッファブロック番号10に対応した場合、キャッシュ制御部13は、4つのキャッシュブロックにはバッファブロック番号10のバッファブロックが格納されていないので、前記した比較をした結果、比較が一致しない。
【0034】
そこで、キャッシュ制御部13は、キャッシュメモリ14が図2(b)の状態の場合、容量一杯にバッファブロックが記憶されており、そのままではバッファブロック番号10のバッファブロックをキャッシュメモリ14にライトできないので、4つのキャッシュブロックの中で更新を行うキャッシュブロックを一つ選択し(ここでは、一例として、キャッシュブロック番号0とする)、選択したキャッシュブロックに格納されているバッファブロック番号0のバッファブロックの奥行き値及び輝度値をリードしてバッファ16にライトし、続いてバッファブロック番号10のバッファブロックの奥行き値と輝度値を、バッファ16からリードして更新を行うキャッシュブロックとして選択したキャッシュブロック番号0のキャッシュブロックに格納する。
【0035】
これにより、キャッシュメモリ14は、図2(c)に示すように、更新を行うキャッシュブロック番号0のキャッシュブロックにバッファブロック番号10のバッファブロックの奥行き値と輝度値が記憶された状態となる。記憶終了後、バッファ制御部15は、キャッシュ制御部13にキャッシュ更新アクノリッジを出力する。更新を行うキャッシュブロックをどれにするかは、アットランダムに選択してもよいが、比較が一致する確率(キャッシュヒット率)を上げるために、LRUアルゴリズム(全キャッシュブロックの中で描画回路12がアクセスしてから最も時間が経過しているキャッシュブロックを選択するアルゴリズム)を使用することが望ましい。
【0036】
再び図1に戻って説明する。キャッシュ制御部13は、キャッシュ更新アクノリッジが入力されると、キャッシュヒット信号をアクティブにすると共に、更新したキャッシュブロックのライトフラグをインアクティブにし、バッファリードブロック番号と、各キャッシュブロックが保持しているバッファブロック番号とを再比較し、比較が一致したキャッシュブロックのリードアドレスをキャッシュメモリ14に出力し、キャッシュメモリ14から奥行き値をリードして描画回路12に出力する。
【0037】
描画回路12はキャッシュメモリ14から奥行き値を入力として受けると、その入力奥行き値を、前述したポリゴンデータに記述されている頂点における奥行き値から内挿によって求めた奥行き値と比較し、内挿によって求めた奥行き値の方が入力された奥行き値よりも小さい場合は、内挿によって求めた画素の方が視点からの距離が近いので、内挿によって求めた奥行き値と輝度値をキャッシュメモリ14にライトするため、キャッシュ制御部13にキャッシュライトアドレス、ライトイネーブル、奥行き値、輝度値を出力する。なお、内挿によって求めた奥行き値の方が入力された奥行き値よりも大きい場合は、内挿によって求めた奥行き値と輝度値のキャッシュメモリ14へのライトは行わない。
【0038】
キャッシュ制御部13は、描画回路12からキャッシュライトアドレスが入力されると、それからバッファライトブロック番号を算出し、各キャッシュブロックが保持しているバッファブロック番号と比較する。比較が一致した場合、キャッシュ制御部13は比較が一致したキャッシュブロックのライトアドレス、ライトイネーブル、奥行き値、輝度値をキャッシュメモリ14に出力し、キャッシュメモリ14に奥行き値と輝度値をライトすると共に、比較が一致したキャッシュブロックのライトフラグをアクティブにする。
【0039】
上記の比較が一致しない場合、キャッシュ制御部13はCPU11へのキャッシュヒット信号をインアクティブにして、CPU11からの新たな描画命令出力を抑止すると共に、更新を行うキャッシュブロックを選択し、更新を行うキャッシュメモリ14が保持しているバッファブロックのバッファブロック番号からバッファライトスタートアドレスを算出し、更新を行うキャッシュメモリ14のキャッシュブロック番号からキャッシュスタートアドレスを算出し、バッファライトアドレスからバッファリードスタートアドレスを算出し、更新を行うキャッシュブロックのライトフラグ、キャッシュ更新リクエストと共にバッファ制御部15に出力する。
【0040】
バッファ制御部15は、キャッシュ更新リクエストがキャッシュ制御部13から入力されると、ライトフラグがアクティブな場合は、同じくキャッシュ制御部13から入力されるキャッシュスタートアドレスから1バッファブロック分の奥行き値及び輝度値をキャッシュメモリ14からリードし、同じくキャッシュ制御部13から入力されるバッファライトスタートアドレスで示されたバッファ16の場所に格納する。ライトフラグがインアクティブな場合は、バッファライトは行わない。
【0041】
その後、バッファ制御部15は、キャッシュ制御部13から入力されるバッファリードスタートアドレスで示された、バッファ16の格納場所から1バッファブロック分をリードし、その1バッファブロック分をキャッシュメモリ14のキャッシュスタートアドレスで示された場所に格納する。その後、バッファ制御部15は、キャッシュ制御部13にキャッシュ更新アクノリッジを出力する。
【0042】
バッファ16はSDRAMで構成されているので、バッファ制御部15はバッファ16にチップセレクト(CS)、ローアドレスストローブ(RAS)、カラムアドレスストローブ(CAS)、ライトイネーブル(WE)、アドレスを出力し、奥行き値と輝度値のライト/リードを行う。
【0043】
キャッシュ制御部13は、バッファ制御部15からキャッシュ更新アクノリッジが入力されると、CPU11へ出力するキャッシュヒット信号をアクティブにすると共に、更新したキャッシュブロックのライトフラグをインアクティブにし、バッファライトブロック番号と、各キャッシュブロックが保持しているバッファブロック番号とを再比較し、比較が一致したキャッシュブロックのライトアドレス、ライトイネーブル、輝度値、奥行き値をキャッシュメモリ14へ出力し、キャッシュメモリ14に輝度値及び奥行き値をライトすると共に、比較が一致したキャッシュブロックのライトフラグをアクティブにする。
【0044】
キャッシュ制御部13は、描画回路12から入力したバッファリードアドレス及びバッファライトアドレスから対応するバッファブロック番号を算出し、その算出したバッファブロック番号とキャッシュメモリ14のブロック毎に記憶しているバッファブロック番号とを比較し、一致した場合は描画回路12からバッファネクストリードアドレスを入力として受け、これに基づき対応するバッファブロック番号を算出し、算出したバッファブロック番号と各キャッシュブロックが保持しているバッファブロック番号とを比較する。
【0045】
比較が一致した場合、キャッシュ制御部13はキャッシュ更新リクエストをバッファ制御部15へ出力しない。これに対し、比較が一致しなかった場合は、キャッシュ制御部13はCPU11へ出力するキャッシュヒット信号をアクティブのままにして、CPU11からの新たな描画命令出力を抑止せずに、更新を行うキャッシュブロックを選択し、更新を行うキャッシュブロックのキャッシュブロック番号からキャッシュスタートアドレスを算出し、バッファネクストリードアドレスに対応するバッファブロック番号からバッファリードスタートアドレスを算出し、これらの算出したキャッシュスタートアドレス及びバッファリードスタートアドレスを、更新を行うキャッシュブロックのライトフラグ及びキャッシュ更新リクエストと共にバッファ制御部15に出力する。
【0046】
例えば、キャッシュメモリ14には図2(b)に示すように、キャッシュブロック番号0〜3のキャッシュブロックに、図2(a)に示したバッファ16に格納されているバッファブロック番号0、9、5、4のバッファブロックの奥行き値及び輝度値が格納されているものとする。この状態で、描画回路12がバッファブロック番号9(キャッシュブロック番号1)に対応するバッファリードアドレス、バッファブロック番号5(キャッシュブロック番号2)に対応するバッファライトアドレス、バッファブロック番号10に対応するバッファネクストリードアドレスを出力したものとすると、キャッシュ制御部13がキャッシュメモリ14のブロック毎に記憶しているバッファブロック番号は0、9、5、4であるので、バッファリードアドレス、バッファライトアドレスに対応するブロック番号は比較が一致するが、バッファネクストリードアドレスに対応するブロック番号は比較が一致しない。
【0047】
この場合、キャッシュ制御部13は、CPU11へ出力するキャッシュヒット信号をアクティブにしたままで、CPU11からの新たな描画命令を抑止せずに、バッファリードアドレス、バッファライトアドレス、バッファネクストリードアドレスのいずれにも対応していないバッファブロック番号0が格納されているキャッシュブロック番号0を選択し、バッファブロック番号0からバッファライトスタートアドレスを、キャッシュブロック番号0からキャッシュスタートアドレスを、バッファブロック番号10からバッファリードスタートアドレスを算出し、キャッシュブロック番号0のライトフラグ、キャッシュ更新リクエストと共にバッファ制御部15へ出力する。
【0048】
バッファ制御部15は、キャッシュ更新リクエストをキャッシュ制御部13から入力として受けると、ライトフラグがアクティブな場合はキャッシュスタートアドレスから1バッファブロック分の奥行き値及び輝度値をキャッシュメモリ14からリードし、バッファ16のバッファライトスタートアドレスで示された場所に格納する。ライトフラグがインアクティブの場合は、バッファライトは行わない。
【0049】
その後、バッファ制御部15はバッファ16のバッファリードスタートアドレスで示された場所からバッファ16を1バッファブロック分リードし、キャッシュメモリ14のキャッシュスタートアドレスで示された場所に格納する。その格納終了後、バッファ制御部15からキャッシュ制御部13にキャッシュ更新アクノリッジが出力される。
【0050】
前述したように、バッファ16はSDRAMで構成されているので、バッファ制御部15はバッファ16にチップセレクト(CS)、ローアドレスストローブ(RAS)、カラムアドレスストローブ(CAS)、ライトイネーブル(WE)、アドレスを出力し、奥行き値と輝度値のライト/リードを行う。キャッシュ制御部13は、キャッシュ更新アクノリッジをバッファ制御部15から入力されると、更新したキャッシュブロックのライトフラグをインアクティブにする。
【0051】
図2(b)に示したキャッシュメモリ14の記憶状態において、バッファブロック番号0から算出したバッファライトスタートアドレス、キャッシュブロック番号0から算出したキャッシュスタートアドレス、バッファブロック番号10から算出したバッファリードスタートアドレスをキャッシュブロック番号0のライトフラグ、キャッシュ更新リクエストと共にバッファ制御部15に出力した前述の例の場合、キャッシュ制御部13のキャッシュ更新アクノリッジ入力後のキャッシュメモリ14の格納状態は、図2(c)に示すように、キャッシュブロック番号0の領域にバッファブロック番号10の1ブロック分の奥行き値及び輝度値が格納された状態となる。
【0052】
画面の全てのポリゴンの描画が終了すると、CPU11はバッファ制御部15に画像出力リクエスト、バッファスタートアドレス、画面縦ライン数、画面横ピクセル数を出力する。バッファ制御部15は、画像出力リクエストが入力されると、入力されたバッファスタートアドレス、画面縦ライン数、画面横ピクセル数の情報が示す領域のバッファ16の場所から輝度値をリードし出力する。
【0053】
このように、本実施の形態によれば、描画回路12から将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出しすることで、バッファリードアドレスが出力されたときのキャッシュミスヒットを減らすことができ、これにより描画速度を上げることができ、キャッシュブロック更新時間を短縮できる。また、本実施の形態では、汎用プロセッサを複数個用いる場合と同等の描画速度を専用の描画ハードウェアである描画回路12だけで構成できるので、汎用プロセッサを複数個用いた従来装置に比べて安価な構成にできる。
【0054】
なお、本実施の形態では、描画回路12が現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、描画回路12はそのバッファリードアドレスをバッファネクストリードアドレスとして出力するようにしているが、本実施の形態のように、将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出ししない場合は、キャッシュ制御部13が描画回路12から入力されたバッファリードアドレス及びバッファライトアドレスから対応するバッファブロック番号を算出し、キャッシュメモリ14のブロック毎に記憶しているバッファブロック番号と比較し、一致しなかった場合、キャッシュ制御部13がキャッシュメモリ14の更新が終了するまでCPU11からの新たな描画命令出力を抑止することとなるため、描画速度が低下するが、本実施の形態では上述したように、描画速度を高速化できる。
【0055】
なお、本発明は以上の実施の形態に限定されるものではなく、例えばバッファ16はSDRAM以外の他の大容量が確保し易いメモリも使用可能である。
【0056】
【発明の効果】
以上説明したように、本発明によれば、描画回路から将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出しすることで、描画中にバッファネクストリードアドレスによって示されたバッファブロックを予めキャッシュメモリに格納することにより、バッファリードアドレスが出力されたときのキャッシュミスヒットを減らすようにしたため、描画命令出力抑止時間を短縮することができ、画像生成の高速化を実現することができる。
【図面の簡単な説明】
【図1】本発明の一実施の形態のブロック図である。
【図2】キャッシュメモリのキャッシュブロックと、バッファのバッファブロックとの対応関係と、キャッシュメモリの一つのキャッシュブロックの更新を説明する図である。
【符号の説明】
11 中央処理装置(CPU)
12 描画回路
13 キャッシュ制御部
14 キャッシュメモリ
15 バッファ制御部
16 バッファ(バッファメモリ)
【発明の属する技術分野】
本発明は画像生成装置に係り、特にコンピュータグラフィックスによる3次元形状物体を隠面消去した画像を生成する画像生成装置に関する。
【0002】
【従来の技術】
コンピュータグラフィックスによる3次元形状物体を隠面消去した画像を生成する従来の画像生成装置として、Zバッファ法により隠面消去した画像を生成する装置が良く知られている。このZバッファ法とは、視点から物体までの距離である奥行き値(Z値)を各画素毎に格納するZバッファと、明るさを表す輝度値を各画素毎に格納するフレームバッファとを用い、各画素毎に3次元形状物体の奥行き値と輝度値を計算し、Zバッファ中の奥行き値と3次元形状物体の奥行き値とを比較して、視点から近い方の奥行き値及び輝度値をZバッファ及びフレームバッファに残すことで、最終的にある視点から見た場合に見えなくなる物体、あるいは物体の部分を表示させないように隠面消去された画像をフレームバッファ中に生成する方法である。
【0003】
また、従来の画像生成装置では、汎用プロセッサでフレームバッファに図形等の画像情報を描画するが、キャッシュメモリを使用してその描画速度を高速化しようとするものが知られている(特許文献1参照)。
【0004】
この従来の画像生成装置では、フレームバッファの一部の写しを有するキャッシュメモリ装置のキャッシュ単位を、2次元的な広がりを持つ矩形ブロックとし、かつ、コピーバック方式を適用する構成とすることにより、汎用プロセッサからフレームバッファへの書き込み要求が頻繁に発生する描画時には、一旦キャッシュミスとなっても、該当するフレームバッファ上の矩形ブロックのデータをキャッシュメモリ装置に読み込み、これに続くフレームバッファ上での2次元近傍への書き込み要求はキャッシュヒットする可能性が高くなり、フレームバッファへの書込み操作の高速化を図ろうとするものである。
【0005】
【特許文献1】
特開平6−59975号公報(第2−6頁、図1)
【0006】
【発明が解決しようとする課題】
しかるに、前述したZバッファ法を用いた従来の画像生成装置では、3次元形状物体を画面に投影したときの投影像に含まれる各画素毎に計算処理とバッファリード/ライトを行うが、Zバッファやフレームバッファには、スタティック・ランダム・アクセス・メモリ(SRAM)を使用した場合、計算処理、バッファリード/ライトの高速化が可能となるが、ダイナミック・ランダム・アクセス・メモリ(DRAM)に比べてコスト高となる。
【0007】
一方、従来のDRAMでは計算処理、バッファリード/ライト双方の高速化が不充分であり、3次元のコンピュータグラフィックスの表示の高画質化が益々要求されるようになった近年では、ポリゴン数の飛躍的増加のために計算処理及びバッファリード/ライトの高速化が強く望まれている。
【0008】
また、特許文献1記載の従来の画像生成装置では、汎用プロセッサを用いて画面上の各画素位置に対応した画素の輝度値をフレームバッファに格納し、また、バッファを所定サイズの矩形領域に分割し、バッファの一部の写しを矩形ブロック単位に保持するキャッシュメモリ装置を有する装置で、専用の描画ハードウェアによりフレームバッファに図形等を描画する装置よりも安価ではあるが、汎用プロセッサとてハードウェアであり、専用の描画ハードウェアと同等の性能を汎用プロセッサで得ようとすると、汎用プロセッサを複数個用いることになり、専用の描画ハードウェアを用いた場合に比べて高価な構成となってしまう。
【0009】
本発明は以上の点に鑑みなされたもので、画面を複数のブロックに分割し、そのブロック単位でバッファメモリ(以下、単にバッファという)とキャッシュメモリ間のデータ転送を行い、描画回路がキャッシュメモリに対してリード/ライトを行うことにより、バッファのリード/ライトを高速化し、更に描画回路の並列化、パイプライン化を図ることにより、3次元形状物体を隠面消去した画像を高速に生成し得る画像生成装置を提供することを目的とする。
【0010】
また、本発明の他の目的は、専用のハードウェア(描画回路)を設け、汎用プロセッサを用いた構成に比し安価な構成で画像を高速に生成し得る画像生成装置を提供することにある。
【0011】
【課題を解決するための手段】
上記の目的を達成するため、本発明の画像生成装置は、格子状に並んだ複数の画素で構成される画面を複数のバッファブロックに分割し、各々バッファブロック番号を付したバッファブロック単位で視点からの距離を表す奥行き値と輝度値を複数の画素毎に格納するバッファと、3次元形状物体を基本形状であるポリゴンの集合として定義し、ポリゴンの頂点毎に画面上の位置と視点からの距離を表す奥行き値及び輝度値が記述されているポリゴンデータを入力として受け、奥行き値及び輝度値を内挿することによりポリゴン内の画素の画素位置、奥行き値及び輝度値を求め、バッファから入力された画素位置に対応する奥行き値よりも内挿によって求めた奥行き値の方が小さいときにのみ、内挿によって求めた奥行き値及び輝度値を出力すると共に、バッファリードアドレス、バッファライトアドレス又はバッファネクストリードアドレスを出力する描画回路と、キャッシュ制御部と、キャッシュ制御部からの制御信号に基づき、選択したキャッシュブロックに格納されている奥行き値及び輝度値をキャッシュメモリからバッファへ転送した後、リードアドレス又はライトアドレスに対応したバッファブロック番号のバッファブロックの奥行き値及び輝度値をバッファから選択したキャッシュブロックに転送して格納させるバッファ制御部と、描画回路が少なくともリードアドレス、ライトアドレス及びバッファネクストリードアドレスを独立して出力するように描画回路の動作を制御すると共に、画面へのポリゴンの描画開始前にバッファ制御部を介してバッファを初期化させ、画面内の全てのポリゴンの描画終了時にバッファ制御部によりバッファからの輝度値をリードさせて出力させる演算手段とを有する構成としたものである。
【0012】
ここで、上記のキャッシュ制御部は、複数のバッファブロックの奥行き値及び輝度値を、このバッファブロック単位で格納する、各々キャッシュブロック番号を付した複数のキャッシュブロックからなるキャッシュメモリと、描画回路からバッファの画素位置に対応する奥行き値及び輝度値のバッファリードアドレス、バッファライトアドレス又はバッファネクストリードアドレスを入力として受け、入力されたリードアドレス又はライトアドレスに対応したバッファブロック番号を算出し、その算出したバッファブロック番号のバッファブロックがキャッシュメモリに格納されているかを、算出したバッファブロック番号とキャッシュブロック毎に記憶しているバッファブロック番号を比較することで検出し、キャッシュメモリに格納されているときにはキャッシュメモリからバッファリードアドレスに対応する奥行き値をリードして描画回路へ出力するか、又は描画回路から入力された奥行き値及び輝度値をキャッシュメモリのバッファライトアドレスに対応した場所にライトし、キャッシュメモリに格納されていないときには更新を行う一のキャッシュブロックを選択して、選択したキャッシュブロックに格納されている奥行き値及び輝度値をキャッシュメモリから出力させた後、算出したバッファブロック番号のバッファブロックを選択したキャッシュブロックに格納させる制御信号を出力し、また、算出したバッファブロック番号のバッファブロックがキャッシュメモリに格納されていないことを検出したときは、バッファネクストリードアドレスに対応するバッファブロック番号が示すバッファブロックをバッファからリードさせて、選択したキャッシュブロックに格納させる機能を備える。
【0013】
また、上記の描画回路は、現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、将来出力するそのバッファリードアドレスをバッファネクストリードアドレスとして予めキャッシュ制御部へ出力する機能を備える。
【0014】
この発明では、描画回路から将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出しすることで、描画中にバッファネクストリードアドレスによって示されたバッファブロックを予めキャッシュメモリに格納することにより、バッファリードアドレスが出力されたときのキャッシュミスヒットを減らすことができる。
【0015】
【発明の実施の形態】
次に、本発明の実施の形態について図面と共に説明する。図1は本発明になる画像生成装置の一実施の形態のブロック図を示す。この実施の形態の画像生成装置は、3次元空間中に配置した物体を基本形状であるポリゴンの集合として定義し、格子状に並んだ画素で構成される画面上の各画素位置に対応した、視点から物体までの距離を表す奥行き値(Z値)及び輝度値を格納するバッファを用いて、奥行き値に基づいて隠面消去した画像を生成する画像生成装置で、装置全体を統括的に制御する中央処理装置(CPU)11と、ポリゴンデータが入力される描画回路12と、描画回路12に接続されたキャッシュ制御部13と、キャッシュ制御部13により動作が制御されるキャッシュメモリ14と、バッファ制御部15と、バッファ制御部15により動作が制御され上記の奥行き値(Z値)及び輝度値を格納するバッファ16とから構成されている。
【0016】
描画回路12は専用の描画ハードウェアである。キャッシュメモリ14は、例えばスタティック・ランダム・アクセス・メモリ(SRAM)により構成されている。一方、バッファ16は、大容量が要求されるため、大容量が確保し易いシンクロナス・DRAM(SDRAM)により構成されている。SDRAMは、少ないデータをリード/ライトする場合に比べて、まとまった多くのデータをリード/ライトした方がデータの転送能力が向上する特徴がある。
【0017】
次に、本実施の形態の動作について説明する。本実施の形態はZバッファ法により、3次元形状物体を隠面消去した画像を生成する。Zバッファ法では、画面描画前にバッファ16の初期化が必要であるため、まず、CPU11からバッファ初期化リクエストが、バッファスタートアドレス、画面縦ライン数、画面横ピクセル数と共にバッファ制御部15に供給され、バッファ制御部15によりバッファ16の初期化が行われる。
【0018】
続いて、CPU11は描画命令を描画回路12へ出力する。描画回路12は、描画命令を入力として受けると、外部から入力されるポリゴンデータを取り込む。このポリゴンデータはポリゴンと呼ばれる平面多角形(例えば、三角形)として扱われる3次元座標の形状データで、ポリゴンの各頂点毎に画面上の位置と視点からの距離を表す奥行き値(Z値)及び輝度値が記述されている。描画回路12は、このポリゴンデータの奥行き値及び輝度値を内挿することで、ポリゴン内の画素の画素位置と奥行き値及び輝度値を求め、これらと共にポリゴン内の各画素位置から画素毎のバッファリードアドレスを計算し、キャッシュ制御部13に供給する。
【0019】
バッファ16は、格子状に並んだ画素で構成される画面上の各画素位置に対応した、視点からの距離を表す奥行き値及び輝度値を格納するためのメモリで、バッファ16には上記の奥行き値及び輝度値が、縦mライン、横nピクセル毎のブロック単位に分割されて格納されている。この各ブロック(以下、バッファブロックともいう)には、バッファブロック番号が付されている。
【0020】
一方、キャッシュメモリ14は、上記のバッファブロックを複数個格納するメモリで、各バッファブロックを格納するキャッシュブロック毎にキャッシュブロック番号を付している。キャッシュ制御部13は、各キャッシュブロックが格納しているバッファブロック番号を記憶している。
【0021】
ここで、上記のバッファ16が格納しているバッファブロックのバッファブロック番号と、キャッシュメモリ14が格納しているバッファブロック番号と、キャッシュ制御部13が格納しているキャッシュブロック番号とバッファブロック番号の対応関係について、図2と共に詳細に説明する。一例として、縦16ライン(画素)、横16ピクセル(画素)の画面の奥行き値及び輝度値を、縦4ライン(画素)、横4ピクセル(画素)毎のブロック単位に分割した場合、図2(a)に示すように、これら各バッファブロックをバッファ16が格納すると共に、各バッファブロックにはバッファブロック番号として0〜15のいずれか一の番号が付されている。
【0022】
一方、キャッシュメモリ14は一例として、4個のバッファブロックを格納する容量があったとすると、キャッシュメモリ14の容量は、図2(b)に示すように、4個のキャッシュブロックに分割され、それら各キャッシュブロックにはキャッシュブロック番号0〜3が付されている。
【0023】
ここで、描画回路12はポリゴン内の各画素位置から画素毎のバッファリードアドレスを計算し、キャッシュ制御部13に出力する。また、描画回路12は現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを、将来、バッファリードアドレスとして出力する場合、そのバッファリードアドレスをバッファネクストリードアドレスとしてキャッシュ制御部13に出力する。
【0024】
例えば、図2(a)において、ポリゴン内の画素位置がバッファブロック番号9、10の2つのバッファブロックに跨っており、描画開始画素がバッファブロック番号9のバッファブロックに含まれる場合、描画回路12はバッファブロック番号9に対応するバッファリードアドレスと、バッファブロック番号10に対応するバッファネクストリードアドレスをキャッシュ制御部13に出力する。
【0025】
キャッシュ制御部13は、各キャッシュブロックが格納しているバッファブロック番号を記憶しており、各キャッシュブロックが描画回路12によってライトされたことを記憶するライトフラグを持つ。
【0026】
図2(a)、(b)の場合、キャッシュブロック番号0はバッファブロック番号0のバッファブロックを、キャッシュブロック番号1はバッファブロック番号9のバッファブロックを、キャッシュブロック番号2はバッファブロック番号5のバッファブロックを、キャッシュブロック番号3はバッファブロック番号4のバッファブロックを格納していることをキャッシュ制御部13は記憶している。
【0027】
キャッシュ制御部13は、描画回路12からバッファリードアドレスが入力されると、それからリードするバッファブロック番号(バッファリードブロック番号)を算出し、キャッシュメモリ14内の各キャッシュブロックが保持しているバッファブロック番号と比較する。
【0028】
比較が一致した場合、キャッシュ制御部13は、画素位置に対応するリードアドレスをキャッシュメモリ14に出力し、キャッシュメモリ14から画素位置に対応する奥行き値をリードして描画回路12へ出力する。
【0029】
上記の比較が一致しない場合、キャッシュ制御部13は、CPU11へのキャッシュヒット信号をインアクティブにして、CPU11からの新たな描画命令出力を抑止すると共に、更新を行うキャッシュブロックを選択し、更新を行うキャッシュブロックに対応するバッファブロック番号からバッファライトスタートアドレスを算出し、更新を行うキャッシュメモリ14のキャッシュブロック番号からキャッシュスタートアドレスを算出し、バッファリードアドレスからバッファリードスタートアドレスを算出し、更新を行うキャッシュブロックのライトフラグ及びキャッシュ更新リクエストと共にバッファ制御部15に出力する。
【0030】
バッファ制御部15は、キャッシュ更新リクエストがキャッシュ制御部13から入力されると、同じくキャッシュ制御部13から入力されるライトフラグがアクティブな場合は、キャッシュ制御部13から入力されるキャッシュスタートアドレスから1バッファブロック分の奥行き値、輝度値をキャッシュメモリ14からリードし、それをバッファ16の上記バッファライトスタートアドレスで示された場所に格納する。ライトフラグがインアクティブの場合は上記のバッファライトは行わない。
【0031】
その後、バッファ制御部15は、入力されたバッファリードスタートアドレスで示されたバッファ16の場所から1バッファブロック分リードし、キャッシュメモリ14のキャッシュスタートアドレスで示された場所に格納する。その後、バッファ制御部15は、キャッシュ制御部13にキャッシュ更新アクノリッジを出力する。バッファ16はSDRAMで構成されているので、バッファ制御部15はSDRAMであるバッファ16にチップセレクト(CS)、ローアドレスストローブ(RAS)、カラムアドレスストローブ(CAS)、ライトイネーブル(WE)及びアドレスを出力し、奥行き値及び輝度値のライト/リードを行う。
【0032】
上記の比較が一致しない場合の動作について、図2と共に更に具体的に説明する。一例として、バッファ16に図2(a)に示す16個のバッファブロックが格納されているとし、また、図2(b)に示すキャッシュメモリ14の4つの記憶領域を示すキャッシュブロック番号0〜3のキャッシュブロックに、図2(a)に示したバッファブロック番号0、9、5、4のバッファブロックの奥行き値及び輝度値が格納されているものとする。
【0033】
この状態で、描画回路12がキャッシュ制御部13に出力したバッファリードアドレスが、バッファブロック番号10に対応した場合、キャッシュ制御部13は、4つのキャッシュブロックにはバッファブロック番号10のバッファブロックが格納されていないので、前記した比較をした結果、比較が一致しない。
【0034】
そこで、キャッシュ制御部13は、キャッシュメモリ14が図2(b)の状態の場合、容量一杯にバッファブロックが記憶されており、そのままではバッファブロック番号10のバッファブロックをキャッシュメモリ14にライトできないので、4つのキャッシュブロックの中で更新を行うキャッシュブロックを一つ選択し(ここでは、一例として、キャッシュブロック番号0とする)、選択したキャッシュブロックに格納されているバッファブロック番号0のバッファブロックの奥行き値及び輝度値をリードしてバッファ16にライトし、続いてバッファブロック番号10のバッファブロックの奥行き値と輝度値を、バッファ16からリードして更新を行うキャッシュブロックとして選択したキャッシュブロック番号0のキャッシュブロックに格納する。
【0035】
これにより、キャッシュメモリ14は、図2(c)に示すように、更新を行うキャッシュブロック番号0のキャッシュブロックにバッファブロック番号10のバッファブロックの奥行き値と輝度値が記憶された状態となる。記憶終了後、バッファ制御部15は、キャッシュ制御部13にキャッシュ更新アクノリッジを出力する。更新を行うキャッシュブロックをどれにするかは、アットランダムに選択してもよいが、比較が一致する確率(キャッシュヒット率)を上げるために、LRUアルゴリズム(全キャッシュブロックの中で描画回路12がアクセスしてから最も時間が経過しているキャッシュブロックを選択するアルゴリズム)を使用することが望ましい。
【0036】
再び図1に戻って説明する。キャッシュ制御部13は、キャッシュ更新アクノリッジが入力されると、キャッシュヒット信号をアクティブにすると共に、更新したキャッシュブロックのライトフラグをインアクティブにし、バッファリードブロック番号と、各キャッシュブロックが保持しているバッファブロック番号とを再比較し、比較が一致したキャッシュブロックのリードアドレスをキャッシュメモリ14に出力し、キャッシュメモリ14から奥行き値をリードして描画回路12に出力する。
【0037】
描画回路12はキャッシュメモリ14から奥行き値を入力として受けると、その入力奥行き値を、前述したポリゴンデータに記述されている頂点における奥行き値から内挿によって求めた奥行き値と比較し、内挿によって求めた奥行き値の方が入力された奥行き値よりも小さい場合は、内挿によって求めた画素の方が視点からの距離が近いので、内挿によって求めた奥行き値と輝度値をキャッシュメモリ14にライトするため、キャッシュ制御部13にキャッシュライトアドレス、ライトイネーブル、奥行き値、輝度値を出力する。なお、内挿によって求めた奥行き値の方が入力された奥行き値よりも大きい場合は、内挿によって求めた奥行き値と輝度値のキャッシュメモリ14へのライトは行わない。
【0038】
キャッシュ制御部13は、描画回路12からキャッシュライトアドレスが入力されると、それからバッファライトブロック番号を算出し、各キャッシュブロックが保持しているバッファブロック番号と比較する。比較が一致した場合、キャッシュ制御部13は比較が一致したキャッシュブロックのライトアドレス、ライトイネーブル、奥行き値、輝度値をキャッシュメモリ14に出力し、キャッシュメモリ14に奥行き値と輝度値をライトすると共に、比較が一致したキャッシュブロックのライトフラグをアクティブにする。
【0039】
上記の比較が一致しない場合、キャッシュ制御部13はCPU11へのキャッシュヒット信号をインアクティブにして、CPU11からの新たな描画命令出力を抑止すると共に、更新を行うキャッシュブロックを選択し、更新を行うキャッシュメモリ14が保持しているバッファブロックのバッファブロック番号からバッファライトスタートアドレスを算出し、更新を行うキャッシュメモリ14のキャッシュブロック番号からキャッシュスタートアドレスを算出し、バッファライトアドレスからバッファリードスタートアドレスを算出し、更新を行うキャッシュブロックのライトフラグ、キャッシュ更新リクエストと共にバッファ制御部15に出力する。
【0040】
バッファ制御部15は、キャッシュ更新リクエストがキャッシュ制御部13から入力されると、ライトフラグがアクティブな場合は、同じくキャッシュ制御部13から入力されるキャッシュスタートアドレスから1バッファブロック分の奥行き値及び輝度値をキャッシュメモリ14からリードし、同じくキャッシュ制御部13から入力されるバッファライトスタートアドレスで示されたバッファ16の場所に格納する。ライトフラグがインアクティブな場合は、バッファライトは行わない。
【0041】
その後、バッファ制御部15は、キャッシュ制御部13から入力されるバッファリードスタートアドレスで示された、バッファ16の格納場所から1バッファブロック分をリードし、その1バッファブロック分をキャッシュメモリ14のキャッシュスタートアドレスで示された場所に格納する。その後、バッファ制御部15は、キャッシュ制御部13にキャッシュ更新アクノリッジを出力する。
【0042】
バッファ16はSDRAMで構成されているので、バッファ制御部15はバッファ16にチップセレクト(CS)、ローアドレスストローブ(RAS)、カラムアドレスストローブ(CAS)、ライトイネーブル(WE)、アドレスを出力し、奥行き値と輝度値のライト/リードを行う。
【0043】
キャッシュ制御部13は、バッファ制御部15からキャッシュ更新アクノリッジが入力されると、CPU11へ出力するキャッシュヒット信号をアクティブにすると共に、更新したキャッシュブロックのライトフラグをインアクティブにし、バッファライトブロック番号と、各キャッシュブロックが保持しているバッファブロック番号とを再比較し、比較が一致したキャッシュブロックのライトアドレス、ライトイネーブル、輝度値、奥行き値をキャッシュメモリ14へ出力し、キャッシュメモリ14に輝度値及び奥行き値をライトすると共に、比較が一致したキャッシュブロックのライトフラグをアクティブにする。
【0044】
キャッシュ制御部13は、描画回路12から入力したバッファリードアドレス及びバッファライトアドレスから対応するバッファブロック番号を算出し、その算出したバッファブロック番号とキャッシュメモリ14のブロック毎に記憶しているバッファブロック番号とを比較し、一致した場合は描画回路12からバッファネクストリードアドレスを入力として受け、これに基づき対応するバッファブロック番号を算出し、算出したバッファブロック番号と各キャッシュブロックが保持しているバッファブロック番号とを比較する。
【0045】
比較が一致した場合、キャッシュ制御部13はキャッシュ更新リクエストをバッファ制御部15へ出力しない。これに対し、比較が一致しなかった場合は、キャッシュ制御部13はCPU11へ出力するキャッシュヒット信号をアクティブのままにして、CPU11からの新たな描画命令出力を抑止せずに、更新を行うキャッシュブロックを選択し、更新を行うキャッシュブロックのキャッシュブロック番号からキャッシュスタートアドレスを算出し、バッファネクストリードアドレスに対応するバッファブロック番号からバッファリードスタートアドレスを算出し、これらの算出したキャッシュスタートアドレス及びバッファリードスタートアドレスを、更新を行うキャッシュブロックのライトフラグ及びキャッシュ更新リクエストと共にバッファ制御部15に出力する。
【0046】
例えば、キャッシュメモリ14には図2(b)に示すように、キャッシュブロック番号0〜3のキャッシュブロックに、図2(a)に示したバッファ16に格納されているバッファブロック番号0、9、5、4のバッファブロックの奥行き値及び輝度値が格納されているものとする。この状態で、描画回路12がバッファブロック番号9(キャッシュブロック番号1)に対応するバッファリードアドレス、バッファブロック番号5(キャッシュブロック番号2)に対応するバッファライトアドレス、バッファブロック番号10に対応するバッファネクストリードアドレスを出力したものとすると、キャッシュ制御部13がキャッシュメモリ14のブロック毎に記憶しているバッファブロック番号は0、9、5、4であるので、バッファリードアドレス、バッファライトアドレスに対応するブロック番号は比較が一致するが、バッファネクストリードアドレスに対応するブロック番号は比較が一致しない。
【0047】
この場合、キャッシュ制御部13は、CPU11へ出力するキャッシュヒット信号をアクティブにしたままで、CPU11からの新たな描画命令を抑止せずに、バッファリードアドレス、バッファライトアドレス、バッファネクストリードアドレスのいずれにも対応していないバッファブロック番号0が格納されているキャッシュブロック番号0を選択し、バッファブロック番号0からバッファライトスタートアドレスを、キャッシュブロック番号0からキャッシュスタートアドレスを、バッファブロック番号10からバッファリードスタートアドレスを算出し、キャッシュブロック番号0のライトフラグ、キャッシュ更新リクエストと共にバッファ制御部15へ出力する。
【0048】
バッファ制御部15は、キャッシュ更新リクエストをキャッシュ制御部13から入力として受けると、ライトフラグがアクティブな場合はキャッシュスタートアドレスから1バッファブロック分の奥行き値及び輝度値をキャッシュメモリ14からリードし、バッファ16のバッファライトスタートアドレスで示された場所に格納する。ライトフラグがインアクティブの場合は、バッファライトは行わない。
【0049】
その後、バッファ制御部15はバッファ16のバッファリードスタートアドレスで示された場所からバッファ16を1バッファブロック分リードし、キャッシュメモリ14のキャッシュスタートアドレスで示された場所に格納する。その格納終了後、バッファ制御部15からキャッシュ制御部13にキャッシュ更新アクノリッジが出力される。
【0050】
前述したように、バッファ16はSDRAMで構成されているので、バッファ制御部15はバッファ16にチップセレクト(CS)、ローアドレスストローブ(RAS)、カラムアドレスストローブ(CAS)、ライトイネーブル(WE)、アドレスを出力し、奥行き値と輝度値のライト/リードを行う。キャッシュ制御部13は、キャッシュ更新アクノリッジをバッファ制御部15から入力されると、更新したキャッシュブロックのライトフラグをインアクティブにする。
【0051】
図2(b)に示したキャッシュメモリ14の記憶状態において、バッファブロック番号0から算出したバッファライトスタートアドレス、キャッシュブロック番号0から算出したキャッシュスタートアドレス、バッファブロック番号10から算出したバッファリードスタートアドレスをキャッシュブロック番号0のライトフラグ、キャッシュ更新リクエストと共にバッファ制御部15に出力した前述の例の場合、キャッシュ制御部13のキャッシュ更新アクノリッジ入力後のキャッシュメモリ14の格納状態は、図2(c)に示すように、キャッシュブロック番号0の領域にバッファブロック番号10の1ブロック分の奥行き値及び輝度値が格納された状態となる。
【0052】
画面の全てのポリゴンの描画が終了すると、CPU11はバッファ制御部15に画像出力リクエスト、バッファスタートアドレス、画面縦ライン数、画面横ピクセル数を出力する。バッファ制御部15は、画像出力リクエストが入力されると、入力されたバッファスタートアドレス、画面縦ライン数、画面横ピクセル数の情報が示す領域のバッファ16の場所から輝度値をリードし出力する。
【0053】
このように、本実施の形態によれば、描画回路12から将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出しすることで、バッファリードアドレスが出力されたときのキャッシュミスヒットを減らすことができ、これにより描画速度を上げることができ、キャッシュブロック更新時間を短縮できる。また、本実施の形態では、汎用プロセッサを複数個用いる場合と同等の描画速度を専用の描画ハードウェアである描画回路12だけで構成できるので、汎用プロセッサを複数個用いた従来装置に比べて安価な構成にできる。
【0054】
なお、本実施の形態では、描画回路12が現在出力しているバッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、描画回路12はそのバッファリードアドレスをバッファネクストリードアドレスとして出力するようにしているが、本実施の形態のように、将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出ししない場合は、キャッシュ制御部13が描画回路12から入力されたバッファリードアドレス及びバッファライトアドレスから対応するバッファブロック番号を算出し、キャッシュメモリ14のブロック毎に記憶しているバッファブロック番号と比較し、一致しなかった場合、キャッシュ制御部13がキャッシュメモリ14の更新が終了するまでCPU11からの新たな描画命令出力を抑止することとなるため、描画速度が低下するが、本実施の形態では上述したように、描画速度を高速化できる。
【0055】
なお、本発明は以上の実施の形態に限定されるものではなく、例えばバッファ16はSDRAM以外の他の大容量が確保し易いメモリも使用可能である。
【0056】
【発明の効果】
以上説明したように、本発明によれば、描画回路から将来バッファリードアドレスとして出力されるアドレスを、バッファネスクトリードアドレスとして先出しすることで、描画中にバッファネクストリードアドレスによって示されたバッファブロックを予めキャッシュメモリに格納することにより、バッファリードアドレスが出力されたときのキャッシュミスヒットを減らすようにしたため、描画命令出力抑止時間を短縮することができ、画像生成の高速化を実現することができる。
【図面の簡単な説明】
【図1】本発明の一実施の形態のブロック図である。
【図2】キャッシュメモリのキャッシュブロックと、バッファのバッファブロックとの対応関係と、キャッシュメモリの一つのキャッシュブロックの更新を説明する図である。
【符号の説明】
11 中央処理装置(CPU)
12 描画回路
13 キャッシュ制御部
14 キャッシュメモリ
15 バッファ制御部
16 バッファ(バッファメモリ)
Claims (1)
- 格子状に並んだ複数の画素で構成される画面を複数のバッファブロックに分割し、各々バッファブロック番号を付したバッファブロック単位で視点からの距離を表す奥行き値と輝度値を前記複数の画素毎に格納するバッファと、
3次元形状物体を基本形状であるポリゴンの集合として定義し、前記ポリゴンの頂点毎に画面上の位置と視点からの距離を表す奥行き値及び輝度値が記述されているポリゴンデータを入力として受け、前記奥行き値及び輝度値を内挿することにより前記ポリゴン内の画素の画素位置、奥行き値及び輝度値を求め、前記バッファから入力された前記画素位置に対応する奥行き値よりも前記内挿によって求めた奥行き値の方が小さいときにのみ、前記内挿によって求めた奥行き値及び輝度値を出力すると共に、バッファリードアドレス、バッファライトアドレス又はバッファネクストリードアドレスを出力する描画回路と、
前記複数のバッファブロックの奥行き値及び輝度値を、このバッファブロック単位で格納する、各々キャッシュブロック番号を付した複数のキャッシュブロックからなるキャッシュメモリと、
前記描画回路から前記バッファの前記画素位置に対応する奥行き値及び輝度値のバッファリードアドレス、バッファライトアドレス又はバッファネクストリードアドレスを入力として受け、入力された前記リードアドレス又は前記ライトアドレスに対応したバッファブロック番号を算出し、その算出したバッファブロック番号のバッファブロックが前記キャッシュメモリに格納されているかを、算出したバッファブロック番号とキャッシュブロック毎に記憶しているバッファブロック番号を比較することで検出し、前記キャッシュメモリに格納されているときには前記キャッシュメモリから前記バッファリードアドレスに対応する奥行き値をリードして前記描画回路へ出力するか、又は前記描画回路から入力された前記奥行き値及び輝度値を前記キャッシュメモリの前記バッファライトアドレスに対応した場所にライトし、前記キャッシュメモリに格納されていないときには更新を行う一のキャッシュブロックを選択して、選択したキャッシュブロックに格納されている奥行き値及び輝度値を前記キャッシュメモリから出力させた後、前記算出したバッファブロック番号のバッファブロックを前記選択したキャッシュブロックに格納させる制御信号を出力するキャッシュ制御部と、
前記キャッシュ制御部からの前記制御信号に基づき、前記選択したキャッシュブロックに格納されている奥行き値及び輝度値を前記キャッシュメモリから前記バッファへ転送した後、前記リードアドレス又は前記ライトアドレスに対応したバッファブロック番号のバッファブロックの奥行き値及び輝度値を前記バッファから前記選択したキャッシュブロックに転送して格納させるバッファ制御部と、前記描画回路が少なくとも前記リードアドレス、前記ライトアドレス及び前記バッファネクストリードアドレスを独立して出力するように前記描画回路の動作を制御すると共に、前記画面へのポリゴンの描画開始前に前記バッファ制御部を介して前記バッファを初期化させ、前記画面内の全てのポリゴンの描画終了時に前記バッファ制御部により前記バッファからの輝度値をリードさせて出力させる演算手段と
を有し、前記描画回路は、現在出力している前記バッファリードアドレスに対応するバッファブロック番号と異なるバッファブロック番号に対応するバッファリードアドレスを将来バッファリードアドレスとして出力する場合、将来出力するそのバッファリードアドレスを前記バッファネクストリードアドレスとして予め前記キャッシュ制御部へ出力する機能を備え、前記キャッシュ制御部は、前記算出したバッファブロック番号のバッファブロックが前記キャッシュメモリに格納されていないことを検出したときは、前記バッファネクストリードアドレスに対応するバッファブロック番号が示すバッファブロックを前記バッファからリードさせて、前記選択したキャッシュブロックに格納させる機能を備えることを特徴とする画像生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002296338A JP2004133608A (ja) | 2002-10-09 | 2002-10-09 | 画像生成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002296338A JP2004133608A (ja) | 2002-10-09 | 2002-10-09 | 画像生成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004133608A true JP2004133608A (ja) | 2004-04-30 |
Family
ID=32286355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002296338A Pending JP2004133608A (ja) | 2002-10-09 | 2002-10-09 | 画像生成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004133608A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006209651A (ja) * | 2005-01-31 | 2006-08-10 | Mitsubishi Electric Corp | グラフィクスハードウェア |
-
2002
- 2002-10-09 JP JP2002296338A patent/JP2004133608A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006209651A (ja) * | 2005-01-31 | 2006-08-10 | Mitsubishi Electric Corp | グラフィクスハードウェア |
JP4699036B2 (ja) * | 2005-01-31 | 2011-06-08 | 三菱電機株式会社 | グラフィクスハードウェア |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100300972B1 (ko) | 텍스춰매핑수행장치및텍스춰캐시의데이터억세스방법 | |
JP3645024B2 (ja) | 描画装置及び描画方法 | |
JPH0348370A (ja) | メモリアクセス制御回路 | |
US20180144538A1 (en) | Method and apparatus for performing tile-based rendering | |
JP2019505939A (ja) | コンピューティングシステムにおけるアンチエイリアシング動作の実行 | |
JP2002506547A (ja) | 3次元の三角形描画におけるブロック及びバンド志向走査 | |
JP2004326678A (ja) | 描画処理装置、及び、描画処理方法 | |
US9239795B2 (en) | Efficient cache management in a tiled architecture | |
CN108492243B (zh) | 一种基于块处理的图像旋转装置、系统和方法 | |
JPH06251166A (ja) | 画像処理装置 | |
JP2006221650A (ja) | 幾何プリミティブのインデックスを外す方法、ラスタ化装置、コンピュータ可読媒体 | |
WO2005086096A2 (en) | Embedded system with 3d graphics core and local pixel buffer | |
JP4005083B2 (ja) | キャッシュメモリへのプリフェッチを制御するための方法ならびに装置 | |
JP2009099098A (ja) | コンピュータグラフィックス描画装置及び描画方法 | |
JP2882465B2 (ja) | 画像生成方法およびその装置 | |
KR20060116916A (ko) | 텍스쳐 캐쉬 및 이를 구비한 3차원 그래픽 시스템, 그리고그것의 제어 방법 | |
US6667930B1 (en) | System and method for optimizing performance in a four-bank SDRAM | |
JPH09212412A (ja) | メモリアクセス方法及びデータ処理装置 | |
US6992673B2 (en) | Memory access device, semiconductor device, memory access method, computer program and recording medium | |
US20150193907A1 (en) | Efficient cache management in a tiled architecture | |
JP2004133608A (ja) | 画像生成装置 | |
US11321241B2 (en) | Techniques to improve translation lookaside buffer reach by leveraging idle resources | |
US6590579B1 (en) | System for low miss rate replacement of texture cache lines | |
JPH09212678A (ja) | 3次元画像生成装置 | |
JP2003281564A (ja) | 画像生成装置 |