(57)【要約】【課題】テクスチャマッピングにおけるアニソトロピックフィルタ処理を高速に実行することを可能にする。【解決手段】処理対象のピクセルと水平走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における距離と処理対象のピクセルと垂直走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における距離とを算出し、短い方に基づいて詳細度を決定する。次いで、当該詳細度と長い方の距離とに応じて処理対象のピクセルの画素値の算出の際に用いるテクセルのサンプル数を算出し、上記長い方の距離の中点を中心として当該長い方に沿って並んだ上記サンプル数分のテクセルの各々のアドレスを、当該処理対象のピクセルの画素値をアニソトロピックフィルタ処理により算出する際のサンプルのアドレスとして算出する。【選択図】図８
2015200916.tif 000002
【特許請求の範囲】
【請求項１】
処理対象のピクセルと水平走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における距離と前記処理対象のピクセルと垂直走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における距離とを算出し、前記処理対象のピクセルにマッピングするテクセルの詳細度を前記２種類の距離のうちの短い方に基づいて決定する詳細度決定手段と、
前記詳細度決定手段により決定された詳細度と前記２種類の距離のうちの長い方とに応じて前記処理対象のピクセルの画素値の算出の際に用いるテクセルのサンプル数を算出するとともに、前記２種類の距離のうちの長い方の中点を中心として当該長い方に沿って並んだ前記サンプル数分のテクセルの各々のアドレスを算出するアドレス算出手段と、
前記アドレス算出手段により算出されるアドレスの示すテクセルの画素値から前記処理対象のピクセルの画素値を算出するフィルタ処理を実行するフィルタ処理手段と、
を有することを特徴とする画像処理装置。
【請求項２】
外部メモリに記憶されているテクスチャデータを読み出して記憶するキャッシュであって、複数のアドレスを与えられた場合に各アドレスの示すテクセルの画素値を表すデータを同時並列に出力するキャッシュを有し、
前記アドレス算出手段は、算出した各アドレスを前記キャッシュに与え、
前記フィルタ処理手段は、前記キャッシュから出力されるデータを用いて前記フィルタ処理を実行する
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記アドレス算出手段は、前記中心の近くほどサンプルの密度が高くなるようにアドレスを算出し、
前記フィルタ処理手段は、前記各サンプルの画素値に前記中心からの距離に応じた重みを付与して前記処理対象のピクセルの画素値を算出することを特徴とする請求項１または請求項２に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、テクスチャマッピング技術に関し、特に透視変換のかかったポリゴンに対するテクスチャマッピング技術に関する。
【背景技術】
【０００２】
テクスチャマッピングとは、ポリゴンの集合により表現された３Ｄモデルの表面にテクスチャと呼ばれる画像を貼り付けることで質感を表現する技法である。例えば、不均等な多面体の表面に岩肌のテクスチャを貼り付けることで岩山等を表現するといった具合である。テクスチャマッピングを利用することにより、岩肌の細かな凸凹を逐一ポリゴンで表現することなく、現実感のある岩山を表現することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１３８１０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
テクスチャマッピングによるテクスチャの貼り付け先となるポリゴンには、拡大や縮小などの変形が加えられている場合がある。ポリゴンが変形されても縦横比がそれほど変わらず、縮小画像になるだけであればミップマップテクスチャを使うことで画質を改善することができる。ミップマップとは、１つの画像における各々Ｌｏｄ（Level of Detail）の異なる複数のテクスチャの集合体である。Ｌｏｄとは、テクスチャの詳細度を表す値であり、縮小されていないテクスチャのＬｏｄを０とし、Ｌｏｄの値が大きいほど縮小の度合いが大きいこと（すなわち、詳細度が低い）ことを表す。
【０００５】
これに対して、透視変換によって縦横比が変わる場合（以下、異方性を有する場合）には、単にミップマップテクスチャを使うだけでは画質は改善されない。このような場合の画質の改善には、アニソトロピックフィルタ処理が有効であることが一般に知られている。アニソトロピックフィルタ処理では、テクスチャを貼り付けるときに、貼り付けた後の奥行き側になる方向の画素を元のテクスチャからより多くサンプリングして最終的な画素の色が決められるからである。ただし、アニソトロピックフィルタ処理を実行する場合、変形度合い（すなわち、異方性の度合い）に応じてテクスチャデータのサンプルアドレス、サンプル数を１ピクセルずつ計算しなければならず、処理時間がかかるという問題がある。
【０００６】
本発明は上記課題に鑑みて為されたものであり、テクスチャマッピングにおけるアニソトロピックフィルタ処理を高速に実行することを可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために本発明は、処理対象のピクセルと水平走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における距離と前記処理対象のピクセルと垂直走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における距離とを算出し、前記処理対象のピクセルにマッピングするテクセルの詳細度を前記２種類の距離のうちの短い方に基づいて決定する詳細度決定手段と、前記詳細度決定手段により決定された詳細度と前記２種類の距離のうちの長い方とに応じて前記処理対象のピクセルの画素値の算出の際に用いるテクセルのサンプル数を算出するとともに、前記２種類の距離のうちの長い方の中点を中心として当該長い方に沿って並んだ前記サンプル数分のテクセルの各々のアドレスを算出するアドレス算出手段と、前記アドレス算出手段により算出されるアドレスの示すテクセルの画素値から前記処理対象のピクセルの画素値を算出するフィルタ処理を実行するフィルタ処理手段と、を有することを特徴とする画像処理装置を提供する。
【０００８】
本発明によれば、上記２種類の距離の長さが互いに異なっている場合（すなわち、異方性のある場合）であっても、フィルタ処理にて用いる各サンプルのアドレスを同時に算出することができ、フィルタ処理を高速に実行することが可能になる。つまり、本発明によれば、アニソトロピックフィルタ処理を高速に実行することが可能になる。
【０００９】
特許文献１には、アニソトロピックフィルタリングを用いたシングルパス画像ワーピング技術が開示されている。特許文献１に開示の技術では、アニソトロピックフィルタのサンプリング範囲が楕円によって決定される。しかし、特許文献１に開示の技術では同時に複数のサンプリングアドレスを計算することは困難であり、処理が遅くなる。したがって、特許文献１に開示の技術は、本願発明とは全く異なる技術である。
【００１０】
より好ましい態様においては、外部メモリに記憶されているテクスチャデータを読み出して記憶するキャッシュであって、複数のアドレスを与えられた場合に各アドレスの示すテクセルの画素値を表すデータを同時並列に出力するキャッシュを有し、前記アドレス算出手段は、算出した各アドレスを前記キャッシュに与え、前記フィルタ処理手段は、前記キャッシュから出力されるデータを用いて前記フィルタ処理を実行することを特徴とする。このような態様によれば、同一のテクスチャデータが複数回重複して外部メモリから読み出されることを回避しつつ、アニソトロピックフィルタ処理を高速に実行することが可能になる。
【００１１】
ここで、上記フィルタ処理の具体例としては、上記の要領で算出した各アドレスの示すテクセルの画素値の算術平均（所謂相加平均）を処理対象のピクセルの画素値とする態様が考えられる。また、前記アドレス算出手段には、前記中心の近くほどサンプルの密度が高くなるようにアドレスを算出させ、前記フィルタ処理手段には、前記各サンプルの画素値に前記中心からの距離に応じた重み（例えば、中心からの距離が短いほど大きな重み）を付与する重みづけ平均により処理対象のピクセルの画素値を算出させるようにしても良い。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態のキャッシュ装置２０を含む画像処理装置１の構成例を示すブロック図である。
【図２】画像処理装置１と外部メモリ２との間のデータ転送単位であるブロックを説明するとともに、ＵＶアドレスを説明するための図である。
【図３】キャッシュ装置２０の構成例を示すブロック図である。
【図４】Ｌ１キャッシュ２１０−ｍの構成例を示すブロック図である。
【図５】キャッシュメモリ２１００の構成例とキャッシュメモリ２１００におけるテクスチャデータの格納例を示す図である。
【図６】キャッシュメモリ２１００を構成する各物理メモリの構成例を示す図である。
【図７】キャッシュテーブル２１１０を構成する１つのテーブルを示す図である。
【図８】アニソトロピックフィルタ処理にて用いる各サンプルのＵＶアドレスの算出方法を説明するための図である。
【図９】重複チェック部２１２４における重複チェックを説明するための図である。
【図１０】データ読み出し部２１２８の構成例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照しつつ、本発明の実施形態について説明する。
図１は、本発明の一実施形態の画像処理装置１の構成例を示すブロック図である。画像処理装置１には、ＤＤＲ３メモリにより構成された外部メモリ２が接続されている。外部メモリ２には、様々なテクスチャの画像データ（テクスチャを構成する各画素（テクセル）の画素値を表す画素データの集合体、以下、テクスチャデータ）が予め格納されている。画像処理装置１は、例えば画像処理ＬＳＩであり、外部メモリ２に格納されているテクスチャデータを読み出してテクスチャマッピングを行う。本実施形態では、外部メモリ２には、ＡＲＧＢ（３２ビット）形式のテクスチャデータが格納されている。ＡＲＧＢ（３２ビット）形式のテクスチャデータとは、１テクセルの画素値が透明度（Ａ）８ビット、Ｒ成分の強さ８ビット、Ｇ成分の強さ８ビット、およびＢ成分の強さ８ビットの合計３２ビットで表された画像データである。本実施形態では、外部メモリ２にＡＲＧＢ（３２ビット）形式のテクスチャデータが格納されている場合について説明するが、他の形式（例えば、ＡＹＵＶ４４４形式など）のテクスチャデータが格納されていても良い。また、外部メモリ２に格納されるテクスチャデータは、ＥＴＣ圧縮などの圧縮符号化の施されたデータであっても良い。
【００１４】
画像処理装置１は、図１に示すように、ピクセルシェーダ１０、キャッシュ装置２０、テクスチャフィルタ３０、およびメモリインタフェース４０を含んでいる。外部メモリ２はメモリインタフェース４０に接続されている。外部メモリ２から画像処理装置１へのテクスチャデータの読み出しはメモリインタフェース４０を介して行われる。
【００１５】
図２は、外部メモリ２に格納されているテクスチャデータの論理データ構造（テクスチャ空間におけるデータ配列）を表す図である。図２に示すように、テクスチャは、複数のテクセルの配列として表現される。外部メモリ２から画像処理装置１へのテクスチャデータの読み出しは、８×８のマトリクス状に並んだ６４テクセルを１ブロックとし、このブロック単位で行われる。図２に示す例では、ａ００〜ａ７７、ｂ００〜ｂ７７、ｃ００〜ｃ７７およびｄ００〜ｄ７７によって各々１つのブロックが形成される。前述したように、外部メモリ２に格納されているテクスチャデータはＡＲＧＢ（３２ビット）形式のテクスチャデータであり、１テクセルあたりのデータサイズは３２ビットである。したがって、１ブロックのデータサイズは３２×８×８＝２０４８ビット（２５６バイト）となる。
【００１６】
図２におけるＵアドレスおよびＶアドレスは、テクスチャを構成する各テクセルの左上隅から見た相対位置（すなわち、テクスチャ座標）を表す各々１６ビットの論理アドレスである。図２に示すように、Ｕアドレスは水平方向の相対位置を表し、Ｖアドレスは垂直方向の相対位置を表す。より詳細に説明すると、Ｕアドレスの上位１３ビット（Ｕ[１５：３]）およびＶアドレスの上位１３ビット（Ｖ[１５：３]）は、テクセルの属するブロックを表す。つまり、同じブロックに属するテクセルであれば、Ｕ[１５：３]の値は同一であり、Ｖ[１５：３]の値も同一である。そして、Ｕ[２：０]はテクセルのブロック内での水平方向の相対位置を表し、Ｖ[２：０]はテクセルのブロック内での垂直方向の相対位置を表す。以下では、１つのテクセルを示す１組のＵアドレスおよびＶアドレスを「ＵＶアドレス」と呼ぶ場合がある。
【００１７】
ピクセルシェーダ１０には、描画対象の３Ｄモデルを構成するポリゴンの各頂点の座標位置を表す頂点情報と当該３Ｄモデルに貼り付けるテクスチャに関する情報（当該テクスチャの識別子、およびポリゴンの各頂点に対応させるテクセルのＵＶアドレス）とが上位装置から与えられる。ピクセルシェーダ１０は、上記３Ｄモデルをラスタライズして得られるラスタ画像を構成する各ピクセルの画素値を、当該３Ｄモデルに貼り付けるテクスチャの画素値に基づいて編集する。本実施形態では、３Ｄモデルをラスタライズして得られるラスタ画像の２次元座標とテクスチャデータ上のＵＶアドレスの縮尺が同じ場合について説明する。より詳細に説明すると、ピクセルシェーダ１０は、上記３Ｄモデルを構成するポリゴンの各頂点の座標位置を表す頂点情報と当該３Ｄモデルに貼り付けるテクスチャに関する情報とから、上記各ピクセルに対応させるテクセルのＵＶアドレスを算出してキャッシュ装置２０に与える。本実施形態のピクセルシェーダ１０は、上記ラスタ画像を４×４ピクセルのマッピング単位に分割し、１クロック当たり４マッピング単位分のＵＶアドレスをキャッシュ装置２０に与える。前述したように本実施形態では３Ｄモデルをラスタライズして得られるラスタ画像の２次元座標とテクスチャデータ上のＵＶアドレスの縮尺は同じであるため、ラスタ画像上のピクセル（画素）のアドレスとＵＶアドレスとは１対１の関係がある。つまり、１マッピング単位分のＵＶアドレスの個数は１６個となる。
【００１８】
キャッシュ装置２０は、外部メモリ２から画像処理装置１にテクスチャデータを読み出す際に、同じブロック（８×８のマトリクス状に並んだ６４テクセル）のデータが複数回読み出されることを回避するためのものである。キャッシュ装置２０には、マッピング単位を構成する各ピクセルに対応させるテクセルのＵＶアドレス（本実施形態では、合計１６個のＵＶアドレス）がピクセルシェーダ１０から与えられる。実際には、１クロック当たり４マッピング単位分のＵＶアドレス（すなわち、６４個のＵＶアドレス）がピクセルシェーダ１０からキャッシュ装置２０に与えられるのであるが、ここではマッピング単位で記載する。キャッシュ装置２０は、ＵＶアドレス毎に、そのＵＶアドレスに対応するピクセルのフィルタ処理に用いる画素値データを外部メモリ２から読み出してテクスチャフィルタ３０に出力する。テクスチャフィルタ３０は上記フィルタ処理を実行するためのものである。テクスチャフィルタ３０にて実行されるフィルタ処理の具体例としては、バイリニアフィルタ処理やトライリニアフィルタ処理、アニソトロピックフィルタ処理などが挙げられる。
【００１９】
キャッシュ装置２０は、外部メモリ２から読み出したテクスチャデータを記憶するキャッシュを有している。キャッシュ装置２０は、上記フィルタ処理にて用いる画素データが上記キャッシュに記憶されている場合には、当該画素データをキャッシュから読み出してテクスチャフィルタ３０に与える。
【００２０】
これに対して、上記フィルタ処理にて用いる画素データがキャッシュに記憶されていない場合には、キャッシュ装置２０は該当する画素データを含むブロックを外部メモリ２から読み出してキャッシュに記憶させた後に、該当する画素データをテクスチャフィルタ３０へ出力する。このようなキャッシュ装置２０を設けたため、本実施形態によれば、外部メモリ２から同じブロックのデータが複数回読み出されることが回避される。
【００２１】
ここで留意すべき点は、１つのピクセルについての上記フィルタ処理にて用いる各テクセルが常に同一のブロックに属するとは限らない、という点である。また、テクスチャフィルタ３０の実行するフィルタ処理がミップマップ対応のフィルタ処理である場合、１つのピクセルについての上記フィルタ処理にて用いる各テクセルが互いにＬｏｄの異なる複数のテクスチャに属していることがある。
【００２２】
画像処理装置１による描画性能の低下が生じないようにするためには、各マッピング単位を同時並列に処理できること、および１マッピング単位の処理にて使用するテクセルが同一のブロックに属しているか否かを問わずに、これらテクセルの画素データを同時並列に読み出せることがキャッシュ装置２０に対して要求される。また、テクスチャフィルタ３０におけるフィルタ処理がミップマップ対応の処理であれば、各々Ｌｏｄの異なる複数のテクスチャのブロックから複数のテクセルの画素データを同時並列に読み出せることがキャッシュ装置２０に対して要求される。本実施形態のキャッシュ装置２０は、この要求に応えることができるように構成されており、この点に本実施形態の特徴が現れている。キャッシュ装置２０の構成については後に詳細に説明する。なお、外部メモリ２に格納されているテクスチャデータのデータ形式がＡＲＧＢ（３２ビット）形式とは異なる場合には、キャッシュ装置２０からテクスチャフィルタ３０へのデータの受け渡しの際にフォーマット変換を行えば良い。また、外部メモリ２に記憶されているテクスチャデータにＥＴＣ圧縮などの圧縮が施されている場合には、キャッシュ装置２０からテクスチャフィルタ３０へのデータの受け渡しの際にデコードを行うようにすれば良い。
【００２３】
図３は、キャッシュ装置２０の構成例を示す図である。
図３に示すようにキャッシュ装置２０は、Ｌ２キャッシュ２００と、Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）とを含んでいる。なお、以下では、Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）の各々を区別する必要がない場合には、単に「Ｌ１キャッシュ２１０」と表記する。
【００２４】
Ｌ１キャッシュ２１０のアドレス入力ポートはピクセルシェーダ１０に接続されている。Ｌ１キャッシュ２１０のアドレス入力ポートには、読み出し対象のデータを指定する読み出しアドレスとして、１マッピング単位分のＵＶアドレス（本実施形態では、１６個のＵＶアドレス）がピクセルシェーダ１０から与えられる。Ｌ１キャッシュ２１０のデータ出力ポートはテクスチャフィルタ３０に接続されている。Ｌ１キャッシュ２１０は、アドレス入力ポートを介して与えられた各ＵＶアドレスに対して、当該ＵＶアドレスに対応するピクセルのフィルタ処理に用いる画素値データをデータ出力ポートから出力する。例えば、当該フィルタ処理がバイリニアフィルタ処理である場合には、Ｌ１キャッシュ２１０は、アドレス入力ポートを介して与えられた１つのＵＶアドレスに対して、当該ＵＶアドレスの示すテクセルおよびその最寄りの３つのテクセルの合計４テクセルの画素値を表すデータをデータ出力ポートから出力する。この場合、Ｌ１キャッシュ２１０は、１マッピング単位の１６個のＵＶアドレスに対して６４テクセルの画素値を表すデータをデータ出力ポートから出力する。
【００２５】
より詳細に説明すると、Ｌ１キャッシュ２１０は、上記フィルタ処理にて用いるテクセルの画素値を示すデータのうち自身のキャッシュメモリに記憶されているものについては当該データをキャッシュメモリから読み出して出力する。これに対して、自身のキャッシュメモリに記憶されていないものについては、Ｌ１キャッシュ２１０は、該当するテクセルを含むブロックのデータをＬ２キャッシュ２００経由で取得して自身のキャッシュメモリに記憶させた後に、該当するデータを出力する。本実施形態においては、Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）の各々からのデータの読み出しは並列かつ独立して行われる。
【００２６】
Ｌ２キャッシュ２００は、Ｌ１キャッシュ２１０から読み出しを指示されたブロックのデータが自身のキャッシュメモリに記憶されている場合には、該当するブロックのデータをＬ１キャッシュ２１０に出力し、自身のキャッシュメモリに記憶されていない場合には、該当するブロックのデータを外部メモリ２から読み出して自身のキャッシュメモリに記憶させた後に、当該ブロックのデータをＬ１キャッシュ２１０に出力する。つまり、Ｌ２キャッシュ２００は、Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）と外部メモリ２との間に介在し、Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）に対して共有メモリとして機能する。このようなＬ２キャッシュ２００を設けた理由は以下の通りである。
【００２７】
Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）の夫々から独立かつ並列に読み出されるデータは、異なるブロックに属している場合もあれば、同じブロックに属している場合もある。Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）のうちの複数に対して同じブロックに属する互いに異なるテクセルについての読み出し要求が為されると、要求先のＬ１キャッシュ２１０には同じブロックのデータが保持されることになる。例えば、テクスチャフィルタ３０の実行するフィルタ処理がバイリニアフィルタ処理である場合において、ピクセルシェーダ１０からＬ１キャッシュ２１０−１に与えられた１マッピング単位分のＵＶアドレスのうちの１つがａ００（図２参照）のＵＶアドレスであり、ピクセルシェーダ１０からＬ１キャッシュ２１０−２に与えられた１マッピング単位分のＵＶアドレスのうちの１つがａ６６（図２参照）のＵＶアドレスであったとする。Ｌ１キャッシュ２１０−１では、ａ００の最寄の３つのテクセルのＵＶアドレスとしてａ０１、ａ１０およびａ１１のＵＶアドレスが生成される。そして、Ｌ１キャッシュ２１０−１は、ａ００、ａ０１、ａ１０およびａ１１の属するブロック（すなわち、ａ００〜０７７のブロック）が自身のキャッシュメモリに記憶されているか否かを判定し、記憶されていない場合には、該当するブロックをＬ２キャッシュ２００経由で外部メモリから読み出して記憶する。一方、Ｌ１キャッシュ２１０−２では、ａ６６の最寄の３つのテクセルのＵＶアドレスとしてａ６７、ａ７６およびａ７７のＵＶアドレスが生成される。そして、Ｌ１キャッシュ２１０−２は、ａ６６、ａ６７、ａ７６およびａ７７の属するブロック（すなわち、ａ００〜０７７のブロック）が自身のキャッシュメモリに記憶されているか否かを判定し、記憶されていない場合には、該当するブロックをＬ２キャッシュ２００経由で外部メモリから読み出して記憶する。この場合、Ｌ１キャッシュ２１０−１とＬ１キャッシュ２１０−２の各々のキャッシュメモリには、ａ００〜ａ７７の６４個のテクセルよりなるブロックのデータが夫々格納される。
【００２８】
ここで、ピクセルシェーダ１０からＵＶアドレスを与えられる時点では、Ｌ１キャッシュ２１０−１およびＬ１キャッシュ２１０−２の各々のキャッシュメモリには、ａ００〜ａ７７の６４個のテクセルよりなるブロックのデータが格納されていなかったとする。このような場合、Ｌ１キャッシュ２１０が外部メモリ２から直接データを読み出す構成であったとすると、Ｌ１キャッシュ２１０−１とＬ１キャッシュ２１０−２の夫々がａ００〜ａ７７の６４個のテクセルよりなるブロックのデータを外部メモリ２から読み出すことになる。つまり、画像処理装置１と外部メモリ２との間のデータ転送帯域が全く同一のデータの転送に消費されてしまい、無駄である。
【００２９】
これに対して、本実施形態のように、Ｌ１キャッシュ２１０−ｍ（ｍ＝１〜４）がＬ２キャッシュ２００を介して外部メモリ２からデータを読み出す態様であれば、上記のようなデータ転送帯域の無駄使いを回避することができる。例えば、Ｌ１キャッシュ２１０−１による上記ブロックの読み出しが先行する場合には、その読み出しが完了する時点で当該ブロックはＬ２キャッシュ２００のキャッシュメモリに記憶され、Ｌ１キャッシュ２１０−２による上記ブロックの読み出し時点では当該ブロックのデータを外部メモリ２から読み出す必要はないからである。このように、画像処理装置１と外部メモリ２との間のデータ転送帯域が全く同一のデータの転送に消費されてしまうことを回避するために、本実施形態ではＬ２キャッシュ２００を設けたのである。
【００３０】
次いでＬ１キャッシュ２１０の構成について説明する。
図４は、Ｌ１キャッシュ２１０の構成例を示すブロック図である。図４に示すように、Ｌ１キャッシュ２１０は、キャッシュメモリ２１００、キャッシュテーブル２１１０、およびキャッシュコントローラ２１２０を含んでいる。
【００３１】
キャッシュメモリ２１００は、テクスチャデータをブロック単位で管理するためのメモリである。キャッシュメモリ２１００は、図５（ａ）に示すように、４つの物理メモリ（図５（ａ）に示す例では、物理メモリＭｅｍ００、Ｍｅｍ０１、Ｍｅｍ１０およびＭｅｍ１１）により構成されている。各物理メモリには最大で４ブロック分のデータが格納される。なお、図５（ａ）に示す例では、ａ００〜ａ７７の６４個のテクセルよりなるブロックが単に「ａ」と表記されている（ｂ〜ｎも同様に各々６４個のテクセルよりなるブロックを表す）。つまり、Ｌ１キャッシュ２１０−ｍは、１６ブロック分のデータを格納することができる。なお、本実施形態では、Ｌ１キャッシュ２１０−ｍに１６ブロック分のデータを格納化可能な場合について説明するが、１マッピング単位を処理する際に１６個より多い数のブロックが必要となる場合には複数クロックに分けて処理を行えば良い。逆に、１マッピング単位を処理する際に１６個以下のブロックで充分な場合には１マッピング単位分を１クロックで処理することができる。
【００３２】
キャッシュメモリ２１００を構成する各物理メモリは、各々１ブロック分の記憶容量（すなわち、２５６バイト）を有する４つのページにより構成されている。より詳細に説明すると、上記各物理メモリは、各々３２ビットの記憶容量を有する２５６個のメモリチップを図６に示すように４行６４列に配列して構成されており、行方向に並んだ６４個のメモリチップにより１つのページが形成される。１ページを構成する６４個のメモリチップの各々には、１テクセルの画素データ（３２ビット）が格納される。物理メモリＭｅｍｘｘ（ｘｘは００、０１，１０および１１の何れか）を構成する４つのページの夫々は、ページアドレスｘｘ＿００、ｘｘ＿０１、ｘｘ＿１０およびｘｘ＿１１により識別される。
【００３３】
詳細については後述するが、本実施形態では、上記４行６４列に配列されたメモリチップに対して、１メモリチップ分のデータを読み出すセレクタが列毎に設けられている（図６参照）。このため、ページアドレスを指定して上記セレクタを適宜選択することで、１つのブロックに属する複数のテクセルの画素値を同時並列に読み出すことができる。また、本実施形態では、前掲図５（ａ）に示すように、テクスチャにおいて互いに隣り合うブロックのデータは異なる物理メモリに格納され、この点にも本実施形態の特徴の１つがある。テクスチャを構成する各ブロックを何れの物理メモリに格納するのかについては、当該ブロックに属するテクセルのＵアドレスおよびＶアドレス（より正確にはＵ[５：３]およびＶ[３]）に応じて図５（ｂ）に示すように予め定められている。例えば、物理メモリへの格納対象のブロックに属するテクスチャのＵアドレスのＵ［５：３］が“０００”であり、ＶアドレスのＶ［３］が“０”であれば、当該ブロック（図５（ｂ）に示す例では、ａ００〜ａ７７よりなるブロックａ）の格納先は物理メモリＭｅｍ００と定まるといった具合である。同様に、物理メモリへの格納対象のブロックに属するテクスチャのＵアドレスのＵ［５：３］が“００１”であり、ＶアドレスのＶ［３］が“０”であれば当該ブロック（図５（ｂ）に示す例では、ｂ００〜ｂ７７よりなるブロックｂ）の格納先は物理メモリＭｅｍ０１と定まり、ＵアドレスのＵ［５：３］が“０００”であり、ＶアドレスのＶ［３］が“１”であれば当該ブロック（図５（ｂ）に示す例では、ｃ００〜ｃ７７よりなるブロックｃ）の格納先は物理メモリＭｅｍ１０と定まる。そして、物理メモリへの格納対象のブロックに属するテクスチャのＵアドレスのＵ［５：３］が“００１”であり、ＶアドレスのＶ［３］が“１”であれば当該ブロック（図５（ｂ）に示す例では、ｄ００〜ｄ７７よりなるブロックｄ）の格納先は物理メモリＭｅｍ１１と定まる。物理メモリへの格納対象のブロックに属するテクスチャのＵアドレスのＵ［５：３］が“０１０”、“０１１”、“１００”、“１０１”、“１１０”、“１１１”の場合も、ＶアドレスのＶ［３］が“０”であるか、“１”であるかに応じて、図５（ｂ）に示すように、当該ブロックの格納先の物理メモリが定まる。上記の要領で定まった物理メモリの何れのページにブロックを記憶させるのかについては後に明らかにする。
【００３４】
キャッシュテーブル２１１０は、キャッシュメモリ２１００を構成する４個の物理メモリの各ページに何れのブロックのデータが格納されているのかを管理するためのものである。キャッシュテーブル２１１０は、上記４個の物理メモリに１つずつ対応する４つのテーブルにより構成されている。図７は、キャッシュテーブル２１１０を構成する各テーブルの構成例を示す図である。図７に示すように、キャッシュテーブル２１１０を構成するテーブルは、当該テーブルに対応する物理メモリＭｅｍｘｘの各ページに１つずつ対応する４個のレコードを含んでいる。各レコードには、当該レコードに対応するページに格納されているブロックを示すブロック識別子と、そのブロック識別子の示すデータが有効であるか否かを示すＶａｌｉｄビットと、当該データに対してアクセス中であるか否かを示すＡｃｃ１ビットおよびＡｃｃ２[７：０]と、ＬＲＵ制御に使用されるｄｃｎｔ[１：０]とが格納される。Ｖａｌｉｄビット、Ａｃｃ１ビット、Ａｃｃ２、ｄｃｎｔおよびこれらに対応付けられたブロック識別子は、アクセスが終了した時点（例えば、フレームの描画が終了し、次のフレームの描画開始時）にクリアされる。
【００３５】
本実施形態では、上記ブロック識別子として、ＵＶアドレスに基づいて以下の数１にしたがって算出される３２ビットのリニアアドレスＬＡの上位２４ビット（ＬＡ［３１：８］）が用いられる。なお、数１における[Ｂａｓｅ−ａｄｄｒｅｓｓ]は物理メモリ内で基準とする所定位置のアドレスであり、[Ｕ−ｗｉｄｔｈ]はブロックサイズに応じて定まる定数である。また、数１を参照すれば明らかように、ＬＡ［３１：８］はＵ[１５：３]およびＶ［１５：３］に基づいて算出され、前述したように、同じブロックに属するテクセルであればＵ[１５：３]およびＶ［１５：３］のそれぞれの値は同一である。換言すれば、ＬＡ［３１：８］の値はブロック毎に異なる値となり、このため、ブロックを識別する識別子としての役割を果たすのである。
【数１】
2015200916.tif 000003
【００３６】
前述したように本実施形態では１クロック当たり４マッピング単位分のＵＶアドレスがピクセルシェーダ１０からキャッシュ装置２０に与えられる。キャッシュ装置２０は４個のＬ１キャッシュ２１０を有しており、これら４個のＬ１キャッシュ２１０の各々のキャッシュコントローラ２１２０には上記４マッピング単位分の中から１マッピング単位分ずつＵＶアドレスが与えられる。キャッシュコントローラ２１２０は、前掲図４に示すように、アドレス変換部２１２２、重複チェック部２１２４、キャッシュミス判定部２１２６、およびデータ読み出し部２１２８により構成されている。アドレス変換部２１２２には、１クロック当たり１マッピング単位分のＵＶアドレス（１６個のＵＶアドレス）がピクセルシェーダ１０から与えられる。本実施形態では、Ｌ１キャッシュが４個あるので、６４組のＵＶアドレスが１６組ずつ各々のキャッシュコントローラ２１２０に与えられる。アドレス変換部２１２２は、このようにして与えられる１６個のＵＶアドレスの各々に対応するピクセルのフィルタ処理にて用いる各画素データのＵＶアドレスを算出する。ここで、アドレス変換部２１２２によるＵＶアドレスの具体的な算出態様は、テクスチャフィルタ３０におけるフィルタ処理の種類に応じて異なる。
【００３７】
テクスチャフィルタ３０におけるフィルタ処理がバイリニアフィルタ処理である場合には、アドレス変換部２１２２は、ピクセルシェーダ１０から与えられる１６個のＵＶアドレスの各々について当該ＵＶアドレスの示すテクセルの最寄りの３テクセルのＵＶアドレスを算出する。例えば、ピクセルシェーダ１０からアドレス変換部２１２２に与えられた１６個のＵＶアドレスのうちの１つが（ｕ０，ｖ０）である場合には、アドレス変換部２１２２は上記最寄の３テクセルの各々のＵＶアドレスとして（ｕ０＋１，ｖ０）、（ｕ０，ｖ０＋１）および（ｕ０＋１，ｖ０＋１）を発生させる。この場合、ピクセルシェーダ１０からアドレス変換部２１２２に与えられた１６個のＵＶアドレスとこれらＵＶアドレスの各々に対して発生させた３組のＵＶアドレス、すなわち、１６＋１６×３＝６４個のＵＶアドレスが、テクスチャフィルタ３０におけるバイリニアフィルタ処理にて使用される各テクセルを表すことになる。
【００３８】
これに対して、テクスチャフィルタ３０におけるフィルタ処理がアニソトロピックフィルタ処理である場合には、アドレス変換部２１２２はマッピング単位を構成する各ピクセルに対応するＵＶアドレスの各々について、当該ピクセルの画素値をアニソトロピックフィルタ処理により算出する際に使用する各テクセルのＵＶアドレスを以下の要領で算出する。この場合、テクスチャフィルタ３０は上記の要領で算出された各ＵＶアドレスの示すテクセルの画素値の算術平均を当該ピクセルの画素値として算出する。
【００３９】
アドレス変換部２１２２は、まず、マッピング単位において左上隅に位置するピクセルを処理対象とし、当該処理対象のピクセルに対応させるテクセルとマッピング単位において当該処理対象のピクセルに対して水平走査方向に並んだピクセル（すなわち、水平走査方向の隣接ピクセル）に対応させるテクセルとの間のテクセル空間における距離ｄｓｘを算出する。具体的には、アドレス変換部２１２２は、図８に示すように、両テクセルのＵアドレスの差ｄｓｘｕの２乗と両テクセルのＶアドレスの差ｄｓｘｖの２乗の和の平方根を距離ｄｓｘとする。また、アドレス変換部２１２２は、処理対象のピクセルに対応させるテクセルとマッピング単位において当該処理対象のピクセルに対して垂直走査方向に並んだピクセル（すなわち、垂直走査方向の隣接ピクセル）に対応させるテクセルとの間のテクセル空間における距離ｄｓｙを算出する。具体的には、アドレス変換部２１２２は、図８に示すように、両テクセルのＵアドレスの差ｄｓｙｕの２乗と両テクセルのＶアドレスの差ｄｓｙｖの２乗の和の平方根を距離ｄｓｙとする。そして、アドレス変換部２１２２は、上記２種類の距離のうちの短い方を前述したＬｏｄとする。
【００４０】
つまり、本実施形態のアドレス変換部２１２２は、処理対象のピクセルと水平走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における第１の距離と、当該処理対象のピクセルと垂直走査方向の隣接ピクセルの各々にマッピングするテクセルのテクスチャ空間における第２の距離とを算出し、当該処理対象のピクセルにマッピングするテクセルの詳細度（Ｌｏｄ）を上記２種類の距離のうちの短い方に基づいて決定する詳細度決定処理を実行する詳細度決定手段の役割を果たす。
【００４１】
次いで、アドレス変換部２１２２は、上記の要領で算出した２種類の距離のうちの長い方と上記Ｌｏｄとを用いて、アニソトロピックフィルタ処理におけるサンプル数を算出するための値Ｓｎを算出する。
ｄｓｘ≧ｄｓｙの場合
ｄｓｕ＝ｄｓｘｕ
ｄｓｖ＝ｄｓｘｖ
Ｓｎ＝ｄｓｘ／２Ｉｎｔ（Ｌｏｄ）（ただし、Ｌｏｄ＜１．０の場合は、Ｓｎ＝ｄｓｘ）
ｄｓｙ＞ｄｓｘの場合
ｄｓｕ＝ｄｓｙｕ
ｄｓｖ＝ｄｓｙｖ
Ｓｎ＝ｄｓｙ／２Ｉｎｔ（Ｌｏｄ）（ただし、Ｌｏｄ＜１．０の場合は、Ｓｎ＝ｄｓｙ）
【００４２】
従来は、ｄｓｘおよびｄｓｙのうちの大きい方をそのままサンプル数として用いていた。これに対して、本実施形態では、距離ｄｓｘおよびｄｓｙのうちの短い方をＬｏｄとし、他方を当該Ｌｏｄで規格化することでサンプル数を算出するための値Ｓｎが算出される。このように、距離ｄｓｘおよびｄｓｙのうちの短い方をＬｏｄとし、他方を当該Ｌｏｄで規格化することで値Ｓｎを算出するようにした理由は次の通りである。Ｌｏｄ＝０のテクスチャの場合は、Ｓｎ＝ｄｓｘまたはＳｎ＝ｄｓｙとなる。Ｌｏｄ＝１のテクスチャの場合は、ｄｓｘの値が同じであっても、テクスチャサイズはＬｏｄ＝０のテクスチャに対して１／２となっている。このため、サンプルすべきテクスチャの大きさ（テクセル数）は１／２となり、Ｓｎ＝ｄｓｘ／２となる。同様にＬｏｄ＝２のテクスチャの場合は、テクスチャサイズはＬｏｄ＝０のテクスチャに比較して１／４となり、サンプル数Ｓｎ＝ｄｓｘ／４となる。したがって、任意のＬｏｄの値に対してはＳｎ＝ｄｓｘ／２Ｉｎｔ（Ｌｏｄ）となるのである。
【００４３】
上記の要領で値Ｓｎが求まると、アドレス変換部２１２２は、当該値Ｓｎの大きさに応じて以下のようにサンプル数を決定する。
1.0≧Ｓｎ     ：サンプル数＝１
2.0≧Ｓｎ＞1.0：サンプル数＝２
4.0≧Ｓｎ＞2.0：サンプル数＝４
8.0≧Ｓｎ＞4.0：サンプル数＝８
Ｓｎ＞8.0     ：サンプル数＝１６
【００４４】
次いで、アドレス変換部２１２２は、上記の要領で求めたサンプル数分のサンプルの各々のＵＶアドレスを、上記長い方の距離の中点のＵＶアドレスを中心座標として以下の演算を行って求める。つまり、本実施形態のアドレス変換部２１２２は、前述した詳細度決定処理により決定された詳細度と２種類の距離のうちの長い方とに応じて処理対象のピクセルの画素値の算出の際に用いるテクセルのサンプル数を算出するとともに、当該２種類の距離のうちの長い方の中点を中心として当該長い方に沿って並んだ上記サンプル数分のテクセルの各々のアドレスを算出するアドレス算出手段の役割を果たすのである。
サンプル数＝  １：中心座標
サンプル数＝  ２：中心座標±（ｄｓｕ／４，ｄｓｖ／４）
サンプル数＝  ４：中心座標±（ｄｓｕ／８，ｄｓｖ／８）
中心座標±（ｄｓｕ×３／８，ｄｓｖ×３／８）
サンプル数＝  ８：中心座標±（ｄｓｕ／１６，ｄｓｖ／１６）
中心座標±（ｄｓｕ×３／１６，ｄｓｖ×３／１６）
中心座標±（ｄｓｕ×５／１６，ｄｓｖ×５／１６）
中心座標±（ｄｓｕ×７／１６，ｄｓｖ×７／１６）
サンプル数＝１６：中心座標±（ｄｓｕ／３２，ｄｓｖ／３２）
中心座標±（ｄｓｕ×３／３２，ｄｓｖ×３／３２）
中心座標±（ｄｓｕ×５／３２，ｄｓｖ×５／３２）
中心座標±（ｄｓｕ×７／３２，ｄｓｖ×７／３２）
中心座標±（ｄｓｕ×９／３２，ｄｓｖ×９／３２）
中心座標±（ｄｓｕ×１１／３２，ｄｓｖ×１１／３２）
中心座標±（ｄｓｕ×１３／３２，ｄｓｖ×１３／３２）
中心座標±（ｄｓｕ×１５／３２，ｄｓｖ×１５／３２）
【００４５】
ここで、注目すべき点は、上記各サンプルの座標（ＵＶアドレス）を求める演算は、何れも中心座標に対する所定値の加減算であって、並列に実行できるという点である。このため、本実施形態によれば、テクスチャフィルタ３０におけるフィルタ処理がアニソトロピックフィルタ処理であっても、そのフィルタ処理にて用いる全てのテクセルのＵＶアドレスを、中心座標、ｄｓｕおよびｄｓｖに基づいて同時並列に算出することができ、特許文献１等に開示の従来技術に比較してアニソトロピックフィルタ処理を高速に実行することが可能になるのである。
【００４６】
テクスチャフィルタ３０におけるフィルタ処理にて使用する各テクセルのＵＶアドレスが求まると、アドレス変換部２１２２は、各ＵＶアドレスについて前掲数１の演算を行ってリニアアドレスＬＡに変換する。そして、アドレス変換部２１２２は、このようにして得られたリニアアドレスＬＡの上位２４ビット（ＬＡ[３１：８]）をブロック識別子として重複チェック部２１２４に与える。また、アドレス変換部２１２２は、上記ＵアドレスおよびＶアドレスの各々の下位３ビット（Ｕ［２：０］およびＶ[２：０]）をデータ読み出し部２１２８に与える。以下、本実施形態では、サンプル数＝４の場合、すなわち、処理対象のピクセル１つ当たり４組のＵＶアドレスが算出される場合（すなわち、合計６４個のＵＶアドレスが算出される場合）を例にとって重複チェック部２１２４、キャッシュミス判定部２１２６、およびデータ読み出し部２１２８の構成および動作を説明する。なお、以下では、アドレス変換部２１２２により算出される６４組のＵＶアドレスをＵＶｎ（或いは、ＵｎおよびＶｎ：ただし、ｎ＝０〜６３）と表記し、ＵｎアドレスおよびＶｎアドレスに基づいて算出されるリニアアドレスをリニアアドレスＬＡｎと表記する。
【００４７】
重複チェック部２１２４は、まず、アドレス変換部２１２２から与えられるブロック識別子の各々について、当該ブロック識別子の示すブロックの格納先となる物理メモリを当該ブロック識別子の下位５ビット（すなわち、ＬＡｎ[１２：８]）を参照して特定する。前述したように、各ブロックを何れの物理メモリに格納するのかについては当該ブロックのＵアドレスのＵ［５：３］およびＶアドレスのＶ[３]に応じて定まる一方、前掲数１を参照すれば明らかように、ブロック識別子の下位５ビットからＵ［５：３］およびＶアドレスのＶ[３]を算出することができるからである。重複チェック部２１２４は、上記特定結果に応じて、格納先となる物理メモリを示す２ビットの選択信号ＴＬＳｎを６４個並列にデータ読み出し部２１２８に出力する（図４参照）。例えば、ブロック識別子ＬＡｎ[３１：８]の示すブロックの格納先が物理メモリＭｅｍｘｘであった場合には、重複チェック部２１２４は選択信号ＴＬＳｎ[１：０]にｘｘをセットして出力する。選択信号ＴＬＳｎを２ビットの信号としたのは、ブロック識別子ＬＡｎ[３１：８]の示すブロックの格納先が物理メモリＭｅｍｘｘ（ｘｘは、００、０１、１０、１１の何れか）を示すためには２ビット必要だからである。
【００４８】
次いで、重複チェック部２１２４は、アドレス変換部２１２２から与えられるブロック識別子（本実施形態では、ＬＡｎ[３１：８]（ｎ＝０〜６３））に重複があるか（同じブロックを示すものがあるか）否かをチェックする。前述したように、同じブロックに属するテクセルの場合、ＬＡｎ[３１：８]の値は同じになる。つまり、重複チェック部２１２４は、読み出し対象のテクセル（テクスチャフィルタ３０におけるフィルタ処理にて使用されるテクセル）が何個のブロックに跨っているのかを判定する。例えば、図９（ａ）に示す４×４テクセルがマッピング単位であったとする。図９（ａ）に示すマッピング単位の左上隅に位置するテクセルａ７７の最寄の３テクセルはｂ７０、ｃ０７およびｄ００であり、同マッピング単位の右上隅に位置するテクセルｂ７２の最寄の３テクセルはｂ７３、ｄ０２およびｄ０３である（図２参照）。そして、同マッピング単位の左下隅に位置するテクセルｃ２７の最寄の３テクセルはｄ２０、ｃ３７およびｄ３０であり、同マッピング単位の右下隅に位置するテクセルｄ２２の最寄の３テクセルはｄ２３、ｄ３２およびｄ３３である（図２参照）。このように、図９（ａ）に示すマッピング単位の４×４テクセルの各々のＵＶアドレス（合計１６個のＵＶアドレス）とこれら１６個のＵＶアドレスに基づいて生成した４８個のＵＶアドレスよりなる６４個のＵＶアドレスの中には重複するものがあり、その重複を無くすと、図９（ｂ）に示す５×５画素の各々を示す合計２５個のＵＶアドレスが残る。これら５×５画素よりなる領域はブロックａ、ブロックｂ、ブロックｃおよびブロックｄの４つのブロックに跨っている。したがって、この場合、重複チェック部２１２４は、互いに重複しないブロック識別子ＬＡｎ[３１：８]の個数として４を算出する。なお、重複チェック部２１２４による重複チェックの結果、読み出し対象の６４個のテクセルが５個以上のブロックに跨っていた場合には、最大４ブロックを区切りとして複数クロックで処理するようにすれば良い。よって、以下では、読み出し対象の６４個のテクセルが最大で４個のブロックに跨る場合について説明する。
【００４９】
重複チェック部２１２４は、ブロック識別子ＬＡｎ[３１：８]（ｎ＝０〜６３）についての重複チェックのチェック結果に応じたデータをブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１と、ｆｌａｇ[３：０] （図４では、単に「ｆｌａｇ」と表記）にセットしてキャッシュミス判定部２１２６に与えるとともに、ｆｌａｇ[３：０]をデータ読み出し部２１２８に与える（図４参照）。図４におけるブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１の各々は、物理メモリＭｅｍ００、Ｍｅｍ０１、Ｍｅｍ１０およびＭｅｍ１１に対応している。ブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１の各々には、重複チェックにおいて互いに重複しないと判定されたブロック識別子（最大で４個のブロック識別子）の各々が重複チェック部２１２４によってセットされる。より詳細に説明すると、ブロック識別子Ｌａ００には、互いに重複しないと判定されたブロック識別子のうち物理メモリＭｅｍ００に格納されるブロックのブロック識別子が重複チェック部２１２４によってセットされる。なお、互いに重複しないと判定されたブロック識別子の各々についてのそのブロック識別子の示すブロックの格納先の物理メモリについては、当該ブロック識別子の下位５ビットを参照して特定すれば良い。同様に、ブロック識別子Ｌａ０１には互いに重複しないと判定されたブロック識別子のうち物理メモリＭｅｍ０１に格納されるブロックのブロック識別子が、ブロック識別子Ｌａ１０には互いに重複しないと判定されたブロック識別子のうち物理メモリＭｅｍ１０に格納されるブロックのブロック識別子が、ブロック識別子Ｌａ１１には互いに重複しないと判定されたブロック識別子のうち物理メモリＭｅｍ１１に格納されるブロックのブロック識別子が重複チェック部２１２４によってそれぞれセットされる。
【００５０】
重複チェック部２１２４からキャッシュミス判定部２１２６に与えるブロック識別子としてブロック識別子Ｌａ００〜Ｌａ１１の４つを用意した理由は以下の通りである。本実施形態では１マッピング単位についてのフィルタ処理において用いる６４個のテクセルが複数のブロックに跨る場合、重複チェック部２１２４は、１クロックで最大４ブロックの処理を行う。本実施形態では互いに隣り合うブロックは異なる物理メモリに格納されるため、重複チェック部２１２４により互いに重複しないと判別されたブロック識別子が複数ある場合であっても、それらブロック識別子の各々の示すブロックが同一の物理メモリに格納されていることはない。したがって、重複チェックのチェック結果を格納するブロック識別子として、物理メモリＭｅｍｘｘ（ｘｘ＝００，０１，１０，１１）の各々に対応する４つ（すなわち、ブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１）を用意しておけば良いのである。以下では、ブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１のうち、重複チェック部２１２４によって互いに重複しないと判定されたブロック識別子のセットされたものを「有効なブロック識別子」と呼ぶ。
【００５１】
重複チェック部２１２４は、常に４つのブロック識別子（ブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１）をキャッシュミス判定部２１２６に出力するのであるが、これら４つのブロック識別子の全てが常に「有効なブロック識別子」であるとは限らない。図４のｆｌａｇ[３：０]は、これら４つのブロック識別子の何れが有効であるかを示すデータである。より詳細に説明すると、ｆｌａｇ[３：０]の各ビットは、ブロック識別子Ｌａ００、Ｌａ０１、Ｌａ１０およびＬａ１１の各々に対応している。具体的には、ｆｌａｇの第０ビットはブロック識別子Ｌａ００に、ｆｌａｇの第１ビットはブロック識別子Ｌａ０１に、ｆｌａｇの第２ビットはブロック識別子Ｌａ１０に、ｆｌａｇの第３ビットはブロック識別子Ｌａ１１に夫々対応している。重複チェック部２１２４は、「有効なブロック識別子」に対応するｆｌａｇ[３：０]のビットには“１”をセットし、他のビットには“０”をセットする。例えば、重複チェックにおいて他のものとは重複していないと判別されたブロック識別子の個数が１であり、かつ当該ブロック識別子の示すブロックの格納先が物理メモリＭｅｍ００であれば、重複チェック部２１２４は当該ブロック識別子をブロック識別子Ｌａ００にセットしてキャッシュミス判定部２１２６に出力するとともに、ｆｌａｇ[３：０]の第０ビットに１を他のビットに０をセットしてキャッシュミス判定部２１２６およびデータ読み出し部２１２８に出力する。また、重複チェックにおいて他のものとは重複していないと判別されたブロック識別子の個数が２であり、かつ、これらブロック識別子の示す各ブロックの格納先が物理メモリＭｅｍ０１および物理メモリＭｅｍ１０であれば、重複チェック部２１２４は、物理メモリＭｅｍ０１に格納されるブロックのブロック識別子をブロック識別子Ｌａ０１にセットするとともに、物理メモリＭｅｍ１０に格納されるブロックのブロック識別子をブロック識別子Ｌａ１０にセットしてキャッシュミス判定部２１２６に出力するとともに、ｆｌａｇ[３：０]の第１および第２ビットに１をセットし他のビットに０をセットしてキャッシュミス判定部２１２６およびデータ読み出し部２１２８に出力する。
【００５２】
そして、重複チェックにおいて他のものとは重複していないと判別されたブロック識別子の個数が４であれば、重複チェック部２１２４は、物理メモリＭｅｍｘｘ（ｘｘは、００、０１、１０および１１の何れか）に格納されるブロックのブロック識別子をブロック識別子Ｌａｘｘにセットしてキャッシュミス判定部２１２６に出力するとともに、ｆｌａｇ[３：０]の第０〜第３の各ビットに１をセットしてキャッシュミス判定部２１２６およびデータ読み出し部２１２８に出力する。
【００５３】
キャッシュミス判定部２１２６は、重複チェック部２１２４から出力されたブロック識別子Ｌａｘｘ（ｘｘ＝００，０１，１０、１１）のうちの有効なもの（すなわち、ｆｌａｇ［３：０］における対応するビットの値が１であるもの）について、そのブロック識別子の示す物理メモリＭｅｍｘｘに対応するキャッシュテーブルを参照し当該ブロックの格納先のページを示すページアドレスをページアドレスＴＮｘｘにセットしてデータ読み出し部２１２８に出力する。例えば、重複チェック部２１２４から出力されたブロック識別子Ｌａｘｘ（ｘｘ＝００，０１，１０、１１）のうちブロック識別子Ｌａ００のみが有効（すなわち、ｆｌａｇ［３：０］の第０ビットのみが１であり、他のビットは０）であれば、キャッシュミス判定部２１２６からデータ読み出し部２１２８に与えられる４つのページアドレス（ページアドレスＴＮ００、ＴＮ０１、ＴＮ１０、ＴＮ１１）のうち、実際にページアドレスがセットされるのはページアドレスＴＮ００のみである。つまり、ｆｌａｇ［３：０］は、重複チェック部２１２４から出力されたブロック識別子Ｌａｘｘ（ｘｘ＝００，０１，１０、１１）のうちの有効なものを示すとともに、キャッシュミス判定部２１２６から出力されたページアドレスＴＮｘｘ（ｘｘ＝００，０１，１０、１１）のうちの有効なものを示す。
【００５４】
より詳細に説明すると、キャッシュミス判定部２１２６は、重複チェック部２１２４から出力されたブロック識別子Ｌａｘｘ（ｘｘ＝００，０１，１０、１１）のうちの有効なブロック識別子について、そのブロック識別子の示すブロックの有効なデータがキャッシュメモリ２１００に格納されているか否かをキャッシュテーブル２１１０を参照して判定する。前述したように、重複チェック部２１２４からキャッシュミス判定部２１２６に与えられる有効なブロック識別子は最大で４個であるから、キャッシュミス判定部２１２６では、最大で４個のブロックについてキャッシュテーブルを参照してキャッシュミスの判定を行えば良く、アドレス変換部２１２２の出力する６４個のブロック識別子の全てについてキャッシュミスの判定を行う場合に比較して同じブロックについてキャッシュミスの判定が複数回行われることが回避される。
【００５５】
キャッシュミス判定部２１２６は、有効なブロック識別子がキャッシュテーブル２１１０に格納されており、かつ当該ブロック識別子に対応付けてキャッシュテーブル２１１０に格納されているＶａｌｉｄビットが有効を示す値であれば、有効なデータがキャッシュメモリ２１００に格納されていると判定する。この場合、キャッシュミス判定部２１２６は、有効なブロック識別子の示すブロックの格納先のページを示すページアドレス（すなわち、当該ブロック識別子の格納されているレコードに対応するページアドレス）をページアドレスＴＮｘｘ（ｘｘ＝００，０１，１０，１１）のうちの有効なブロック識別子に対応するものにセットしてデータ読み出し部２１２８に与え、該当するレコードに対応するｄｃｎｔおよび“有効”を示す値のＶａｌｉｄビットに対応付けられている他のレコードを更新する。このｄｃｎｔの更新や他のレコードの更新については周知のＬＲＵ制御におけるものと同様である。
【００５６】
例えば、重複チェック部２１２４から与えられたブロック識別子Ｌａｘｘ（ｘｘ＝００，０１，１０および１１）のうちブロック識別子Ｌａ００が有効であったとする。この場合、キャッシュミス判定部２１２６は、キャッシュテーブル２１１０を構成する４つのテーブルのうち物理メモリＭｅｍ００に対応するテーブル（図７参照）を参照し、ブロック識別子Ｌａ００が当該テーブルに格納されており、かつ当該ブロック識別子に対応付けて当該テーブルに格納されているｖａｌｉｄフラグの値が有効を示す値であれば、ブロック識別子Ｌａ００の示すブロックの有効なデータが物理メモリＭｅｍ００に格納されていると判定し、当該ブロックの物理メモリＭｅｍ００における格納先のページアドレスをページアドレスＴＮ００にセットしてデータ読み出し部２１２８に出力する。例えば、上記格納先のページアドレスが００＿０１であった場合には、キャッシュミス判定部２１２６は、ページアドレスＴＮ００に００＿０１をセットしてデータ読み出し部２１２８に出力する。
【００５７】
これに対して、有効なブロック識別子がキャッシュテーブル２１１０を構成する４つのテーブルのうちの対応するものに格納されていない場合、または当該ブロック識別子が当該テーブルに格納されているものの、当該ブロック識別子に対応づけて当該テーブルに格納されているＶａｌｉｄビットが無効を示す値である場合には、キャッシュミス判定部２１２６は、当該ブロック識別子の示すブロックのデータをＬ２キャッシュから読み出す。該当ブロックのデータがＬ２キャッシュに格納されていない場合は、キャッシュミス判定部２１２６は、Ｌ２キャッシュ２００を介して外部メモリ２から該当するブロックのデータを読み出し、キャッシュメモリ２１００に格納するとともに、キャッシュテーブル２１１０の格納内容を更新する。この場合、キャッシュミス判定部２１２６は、上記ブロックの格納先となる物理メモリに空きページが有る場合には、当該ページに上記ブロックを格納し、当該ページのページアドレスをページアドレスＴＮｘｘ（ｘｘ＝００，０１，１０および１１）のうち有効なブロック識別子に対応するもの（有効なブロック識別子がＬａ００であればページアドレスＴＮ００）にセットしてデータ読み出し部２１２８に出力する。上記ブロックの格納先となる物理メモリに空きページが無い場合には、キャッシュミス判定部２１２６はＬＲＵ制御により格納先となるページを確保し、当該ページに上記ブロックを格納するとともに当該ページのページアドレスをページアドレスＴＮｘｘ（ｘｘ＝００，０１，１０および１１）のうち有効なブロック識別子に対応するものにセットしてデータ読み出し部２１２８に与える。
【００５８】
図１０は、データ読み出し部２１２８の構成例を示す図である。図１０に示すように、データ読み出し部２１２８は、物理メモリＭｅｍ００〜Ｍｅｍ１１の各々に対応させて１つずつ設けられたデータ選択回路２１２８ａ＿００、２１２８ａ＿０１、２１２８ａ＿１０および２１２８ａ＿１１と、６４ブロック分の記憶容量を有するレジスタ２１２８ｂと、セレクタ２１２８ｃ＿ｍ（ｍ＝０〜６３）とを含んでいる。なお、以下では、レジスタ２１２８ｂ内の記憶領域を１ブロック分ずつ６４個の記憶領域に区分し、先頭から順に０番目の記憶領域、１番目の記憶領域、・・・６３番目の記憶領域と呼ぶ。データ選択回路２１２８ａ＿ｘｘ（ｘｘ＝００、０１、１０または１１）は、対応する物理メモリＭｅｍｘｘを構成する４行６４列のメモリチップ（前掲図６参照）の列毎に設けられた６４個のセレクタを含んでいる（図１０では図示略）。本実施形態のデータ読み出し部２１２８は、これら２５６個のセレクタを制御して、１マッピング単位に対応する６４個のテクセルのうちのｍ（ｍ＝０〜６３）番目のテクセルを含むブロックのデータ（すなわち、６４テクセル分の画素データ）をレジスタ２１２８ｂのｍ番目の記憶領域に書き込み、当該ｍ番目の記憶領域に格納されたブロックのうちから上記ｍ番目のテクセルに対応する画素データをセレクタ２１２８ｃ＿ｍにより読み出して出力する。
【００５９】
より詳細に説明すると、データ読み出し部２１２８には、アドレス変換部２１２２から６４個のＵＶアドレスの下位３ビット（Ｕｎ[２：０]（ｎ＝０〜６３）、Ｖｎ[２：０]（ｎ＝０〜６３））が与えられる。また、データ読み出し部２１２８には、選択信号ＴＳＬｎ（ｎ＝０〜６３）およびｆｌａｇ[３：０]が重複チェック部２１２４から与えられる。そして、データ読み出し部２１２８には、キャッシュミス判定部２１２６からページアドレスＴＮｘｘ（ｘｘ＝００、０１、１０および１１）が与えられる。
【００６０】
データ選択回路２１２８ａ＿ｘｘには、ページアドレスＴＮｘｘとｆｌａｇ[３：０]と選択信号ＴＬＳｎ（ｎ＝０〜６３）とが与えられる。データ選択回路２１２８ａ＿ｘｘは、ｆｌａｇ[３：０]において物理メモリＭｅｍｘｘに対応するビットの値が１である場合（すなわち、ページアドレスＴＮｘｘが有効である場合）に、物理メモリＭｅｍｘｘにおけるページアドレスＴＮｘｘの示すページを選択する。例えば、データ選択回路２１２８ａ＿００は、ｆｌａｇ[３：０]の第０ビットが１であれば、物理メモリＭｅｍ００におけるページアドレスＴＮ００の示すページを選択し、ｆｌａｇ[３：０]の第０ビットが０であれば、ページの選択を行わない。そして、データ選択回路２１２８ａ＿ｘｘは、選択信号ＴＬＳｎ（ｎ＝０〜６３）の各々について、その値がｘｘであれば上記選択したページに格納されている１ブロック分のデータ（すなわち、１ブロックを構成する６４個のテクセルの各画素データ）を前掲図６の６４個のセレクタの各々により選択してレジスタ２１２８ｂのｎ番目の記憶領域に書き込む。セレクタ２１２８ｃ＿ｍ（ｍ＝０〜６３）の各々にはアドレス変換部２１２２から出力されたＵｍ[２：０]とＶｍ[２：０]が与えられる。セレクタ２１２８ｃ＿ｍは、レジスタ２１２８ｂのｍ番目の記憶領域からちＵｍ[２：０]およびＶｍ[２：０]の示す画素データを読み出し、テクスチャフィルタ３０に与える６４個のデータのうちのｍ番目のデータとして出力する。セレクタ２１２８ｃ＿ｍ（ｍ＝０〜６３）の各々は上記処理を同時並列に実行するため、テクスチャフィルタ３０に与える６４個のデータが同時並列に読み出される。
【００６１】
例えば、バイリニアフィルタ処理に用いる６４個のテクセルが１つのブロックに属し、当該ブロックが物理メモリＭｅｍ００の第１ページ（ページアドレスが００＿０１のページ）に格納されていたとする。この場合、ページアドレスＴＮ００のみが有効となり、このページアドレスＴＮ００には上記第１ページのページアドレス００＿０１がセットされる。また、選択信号ＴＬＳｎ（ｎ＝０〜６３）の各々の値は全て００となる。したがって、レジスタ２１２８ｂの６４個の記憶領域の各々には、物理メモリＭｅｍ００の第１ページに格納されているブロックのデータが格納される。そして、セレクタ２１２８ｃ＿ｍ（ｍ＝０〜６３）の各々によって上記６４個の記憶領域の各々から同時並列に画素データが１つずつ読み出され、これら６４個のデータがキャッシュ装置２０からテクスチャフィルタ３０に出力される。また、バイリニアフィルタ処理に用いる６４個のテクセルが互いに隣り合う２つのブロックに跨り、これら２つのブロックが物理メモリＭｅｍ０１の第２ページと物理メモリＭｅｍ１０の第３ページに格納されていた場合には、ページアドレスＴＮ０１およびＴＮ１０が有効となり、ページアドレスＴＮ０１には上記第２ページのページアドレス０１＿１０が、ページアドレスＴＮ１０には上記第３ページのページアドレス１０＿１１が、それぞれセットされる。また、選択信号ＴＬＳｎ（ｎ＝０〜６３）には値が０１のものと値が１０のものとが含まれることになる。この場合、レジスタ２１２８ｂのｎ番目の記憶領域には、選択信号ＴＬＳｎの値が０１であればページアドレスＴＮ０１の示すブロックのデータが格納され、選択信号ＴＬＳｎの値が１０であればページアドレスＴＮ１０の示すブロックのデータが格納される。そして、セレクタ２１２８ｃ＿ｍ（ｍ＝０〜６３）の各々によって上記６４個の記憶領域の各々から同時並列に画素データが１つずつ読み出され、これら６４個のデータがキャッシュ装置２０からテクスチャフィルタ３０に出力される。これにより、バイリニアフィルタ処理に用いる各テクセルの画素値を表す６４個のデータが同時並列に読み出される。
【００６２】
そして、バイリニアフィルタ処理に用いる６４個のテクセルが互いに隣り合う４つのブロックに跨り、これら４つのブロックが物理メモリＭｅｍ００〜Ｍｅｍ１１に各々１つずつ格納さていた場合には、ページアドレスＴＮ００〜ＴＮ１１の全てが有効となり、選択信号ＴＬＳｎ（ｎ＝０〜６３）には値が００のもの、値が０１のもの、値が１０のもの、値が１１のものが含まれることになる。この場合、レジスタ２１２８ｂのｎ番目の記憶領域には、選択信号ＴＬＳｎの値が００であればページアドレスＴＮ００の示すブロックのデータが格納され、選択信号ＴＬＳｎの値が０１であればページアドレスＴＮ０１の示すブロックのデータが格納され、選択信号ＴＬＳｎの値が１０であればページアドレスＴＮ１０の示すブロックのデータが格納され、選択信号ＴＬＳｎの値が１１であればページアドレスＴＮ１１の示すブロックのデータが格納される。そして、セレクタ２１２８ｃ＿ｍ（ｍ＝０〜６３）の各々によって上記６４個の記憶領域の各々から同時並列に画素データが１つずつ読み出され、これら６４個のデータがキャッシュ装置２０からテクスチャフィルタ３０に出力される。これにより、バイリニアフィルタ処理に用いる各テクセルの画素値を表す６４個のデータが同時並列に読み出される。
【００６３】
このように、本実施形態によれば、処理対象の４×４テクセルに対してフィルタ処理にて使用する６４テクセルが１つのブロックに収まっている場合は勿論、これら６４テクセルが互いに隣り合う複数のブロックに跨っている場合であっても、最大で４つのブロックに跨っているのであれば、それら６４テクセルの各画素値を表すデータを１クロックで同時並列に読み出してテクスチャフィルタ３０に与えることが可能になる。また、本実施形態において一度読み出したテクスチャデータの再利用が可能であることは前述した通りである。つまり、本実施形態によれば、一度読み出したテクスチャデータの再利用を可能としつつ、複数のテクスチャの複数のテクセルを同時に読み出すことが可能になる。加えて、本実施形態によれば、テクスチャフィルタ３０におけるフィルタ処理がアニソトロピックフィルタ処理であっても、そのフィルタ処理にて用いる全てのテクセルのＵＶアドレスを、中心座標、ｄｓｕおよびｄｓｖに基づいて同時並列に算出することができ、特許文献１等に開示の従来技術に比較してアニソトロピックフィルタ処理を高速に実行することが可能になる。
【００６４】
以上本発明の一実施形態について説明したが、この実施形態を以下のように変形しても勿論良い。
（１）上記実施形態では、処理対象のピクセルに対応したテクスチャ領域の長い距離の方向の中点（中心座標）を中心としてその方向に沿ってサンプルの座標を均等に設定する場合について説明した。しかし、当該中心の近くはサンプルの密度が高くなり、当該中心から離れるほどサンプルの密度が疎になるように各サンプルを発生させるようにしても良い。また、これらサンプルの画素値に基づいて処理対象のピクセルの画素値を算出する際には、例えば上記中心に近いテクセルほど重みを重くし、上記中心から遠ざかるほど重みを軽くするといった重みづけを行って処理対象のピクセルの画素値を算出するようにしても良い。
【００６５】
（２）データ選択回路２１２８ａ＿ｘｘ（ｘｘ＝００、０１、１０、１１）の各々により１マッピング単位に対応させる６４個のテクセルを選択してレジスタ２１２８ｂに書き込むようにしても良い。この場合、レジスタ２１２８ｂは、各々が１テクセル分の記憶容量の６４個の記憶領域を有していれば良く、レジスタ２１２８ｃ−ｍは上記６４個の記憶領域のうちのｍ番目の記憶領域に格納されている１テクセル分のデータを読み出して出力すれば良い。これは以下の要領で実現できる。まず、データ選択回路２１２８ａ＿ｘｘにページアドレスＴＮｘｘとｆｌａｇ[３：０]と選択信号ＴＬＳｎ（ｎ＝０〜６３）に加えてＵｎ[２：０] （ｎ＝０〜６３）とＶｎ[２：０] （ｎ＝０〜６３）を与えるようにする。ページアドレスＴＮｘｘとｆｌａｇ[３：０]とに応じてデータ選択回路２１２８ａ＿ｘｘにページの選択を行わせる点は上記実施形態と同様である。そして、選択信号ＴＬＳｎ（ｎ＝０〜６３）の各々について、その値がｘｘであれば、当該データ選択回路２１２８ａ＿ｘｘに含まれる６４個のレジスタの各々にＵｎ[２：０]およびＶｎ[２：０]を与え、上記選択されたページに格納されているブロックからＵｎ[２：０]およびＶｎ[２：０]の示すセレクタにより１つのテクセルを選択してレジスタ２１２８ｂのｎ番目の記憶領域に書き込む処理をデータ選択回路２１２８ａ＿ｘｘに実行させるのである。
【符号の説明】
【００６６】
１…画像処理装置、２…外部メモリ、１０…ピクセルシェーダ、２０…キャッシュ装置、２００…Ｌ２キャッシュ、２１０−ｎ（ｎ＝１〜４）…Ｌ１キャッシュ、２１００…キャッシュメモリ、２１１０…キャッシュテーブル、２１２０…キャッシュコントローラ、２１２２…アドレス変換部、２１２４…重複チェック部、２１２６…キャッシュミス判定部、２１２８…データ読み出し部、２１２８ａ＿ｘｘ（ｘｘ＝００、０１，１０、１１）…データ選択回路、２１２８ｂ…レジスタ、２１２８ｃ−ｍ（ｍ＝０〜６３）…セレクタ、３０…テクスチャフィルタ、４０…メモリインタフェース。
【図１】
2015200916.tif 000004
【図２】
2015200916.tif 000005
【図３】
2015200916.tif 000006
【図４】
2015200916.tif 000007
【図５】
2015200916.tif 000008
【図６】
2015200916.tif 000009
【図７】
2015200916.tif 000010
【図８】
2015200916.tif 000011
【図９】
2015200916.tif 000012
【図１０】
2015200916.tif 000013