(57)【特許請求の範囲】
【請求項１】
メインメモリとグラフィックスプロセッシングユニットとを含むグラフィックス処理装置であって、
前記グラフィックスプロセッシングユニットは、符号化テーブルの各行の符号がラン数の範囲とレベル値の範囲のペアに対応する識別符号および即値フィールドを含み、前記即値フィールドにはラン数の即値およびレベル値の即値の少なくとも一方が格納された前記符号化テーブルにもとづいて圧縮テクスチャの可変長復号を実行する可変長復号部と、可変長復号されたテクスチャを逆空間周波数変換することによりテクスチャを復元する逆空間周波数変換部とを含み、
前記符号化テーブルは、異なる符号間でラン数の範囲とレベル値の範囲が重複することを許しており、
前記可変長復号部は、２以上の符号のラン数の範囲とレベル値の範囲に当てはまる場合、より符号長の短い符号を優先的に用いて可変長復号を実行し、
前記メインメモリは、復元されたテクスチャを部分的にキャッシュするテクスチャプールを含むことを特徴とするグラフィックス処理装置。
【請求項２】
前記可変長復号部は、コンピュートシェーダの複数のスレッドによって実行されることを特徴とする請求項１に記載のグラフィックス処理装置。
【請求項３】
前記圧縮テクスチャは前記メインメモリに格納され、前記可変長復号部は前記メインメモリから前記圧縮テクスチャを読み出すことを特徴とする請求項１または２に記載のグラフィックス処理装置。
【請求項４】
メインメモリとグラフィックスプロセッシングユニットとを含むグラフィックス処理装置におけるグラフィックス処理方法であって、
グラフィックスプロセッシングユニットが、
コンピュートシェーダによって、符号化テーブルの各行の符号がラン数の範囲とレベル値の範囲のペアに対応する識別符号および即値フィールドを含み、前記即値フィールドにはラン数の即値およびレベル値の即値の少なくとも一方が格納された前記符号化テーブルにもとづいて圧縮テクスチャの可変長復号を実行し、
可変長復号されたテクスチャを逆空間周波数変換することによりテクスチャを復元し、テクスチャを部分的にキャッシュする前記メインメモリ内のテクスチャプールに復元されたテクスチャを格納し、
前記符号化テーブルは、異なる符号間でラン数の範囲とレベル値の範囲が重複することを許しており、
前記可変長復号を実行するステップは、２以上の符号のラン数の範囲とレベル値の範囲に当てはまる場合、より符号長の短い符号を優先的に用いて可変長復号を実行することを特徴とするグラフィックス処理方法。
【請求項５】
メインメモリとグラフィックスプロセッシングユニットとを含むグラフィックス処理装置において利用されるプログラムであって、
符号化テーブルの各行の符号がラン数の範囲とレベル値の範囲のペアに対応する識別符号および即値フィールドを含み、前記即値フィールドにはラン数の即値およびレベル値の即値の少なくとも一方が格納された前記符号化テーブルにもとづいて圧縮テクスチャの可変長復号を実行するステップをグラフィックスプロセッシングユニットのコンピュートシェーダに実行させ、
可変長復号されたテクスチャを逆空間周波数変換することによりテクスチャを復元し、テクスチャを部分的にキャッシュする前記メインメモリ内のテクスチャプールに復元されたテクスチャを格納するステップをグラフィックスプロセッシングユニットのコンピュートシェーダに実行させ、
前記符号化テーブルは、異なる符号間でラン数の範囲とレベル値の範囲が重複することを許しており、
前記可変長復号を実行するステップは、２以上の符号のラン数の範囲とレベル値の範囲に当てはまる場合、より符号長の短い符号を優先的に用いて可変長復号を実行することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像を復号する技術、特に圧縮テクスチャを伸張するグラフィックス処理技術に関する。
【背景技術】
【０００２】
パーソナルコンピュータやゲーム専用機において、高品質な３次元コンピュータグラフィックスを用いたゲームやシミュレーションなどのアプリケーションを実行したり、実写とコンピュータグラフィックスを融合させた映像コンテンツの再生を行うなど、高画質のグラフィックスの利用が広がっている。
【０００３】
一般に、グラフィックス処理は、ＣＰＵとグラフィックスプロセッシングユニット（ＧＰＵ）が連携することで実行される。ＣＰＵが汎用的な演算を行う汎用プロセッサであるのに対して、ＧＰＵは高度なグラフィックス演算を行うための専用プロセッサである。ＣＰＵはオブジェクトの３次元モデルにもとづいて投影変換などのジオメトリ演算を行い、ＧＰＵはＣＰＵから頂点データなどを受け取ってレンダリングを実行する。ＧＰＵはラスタライザやピクセルシェーダなどの専用ハードウェアから構成され、パイプライン処理でグラフィックス処理を実行する。最近のＧＰＵには、プログラマブルシェーダと呼ばれるように、シェーダ機能がプログラム可能なものもあり、シェーダプログラミングをサポートするために、一般にグラフィックスライブラリが提供されている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
グラフィックス処理では、オブジェクトの表面の質感を表現するためにテクスチャをオブジェクトの表面に貼り付けるテクスチャマッピングが行われる。ゲームなどのアプリケーションで利用される画像の高精細化にともない、テクスチャも高解像度のデータが利用されるようになり、テクスチャデータは大容量化している。たとえば、ゲームで利用されるテクスチャはＧｉＢ（ギビバイト）のオーダーであり、必要なテクスチャデータをすべてメモリ上に格納することは困難である。
【０００５】
そこで非圧縮テクスチャまたはＧＰＵが直接扱える低圧縮テクスチャをハードディスクなどの記憶装置に格納しておき、必要に応じてメモリ上のテクスチャバッファにロードして描画に用いることが行われている。ハードディスクからテクスチャをロードするのに要する時間は通常数十ミリ秒から時には数秒になることもあり、安定しない。そのため、ハードディスクからのテクスチャのロードが間に合わなかった場合、本来表示したいテクスチャが利用できないという問題が生じる。
【０００６】
一方、高圧縮テクスチャであれば、メインメモリ容量を上回るテクスチャであってもメモリに保持することができ、ハードディスクからのロードなしにテクスチャを扱うことができるようになる。しかし、この場合、高圧縮テクスチャは一般にＧＰＵが直接扱えるものでないため、高圧縮テクスチャをリアルタイムで伸張するための専用ハードウェアが必要になる。専用ハードウェアが利用できなければ、ＣＰＵで圧縮テクスチャを伸張してテクスチャバッファに展開することになるが、この場合は伸張に時間がかかり、描画をリアルタイムで行うことが難しくなる。
【０００７】
本発明はこうした課題に鑑みてなされたものであり、その目的は、圧縮テクスチャを効率良く伸張することのできるグラフィックス処理技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様の画像復号装置は、ラン数の範囲とレベル値の範囲のペアに対応する符号を、ラン数の即値およびレベル値の即値の少なくとも一方を示す即値フィールドとともに割り当てる符号化テーブルにもとづいて圧縮画像の可変長復号を実行する可変長復号部と、可変長復号された画像を逆空間周波数変換することにより画像を復元する逆空間周波数変換部とを含む。
【０００９】
本発明の別の態様は、グラフィックス処理装置である。この装置は、メインメモリとグラフィックスプロセッシングユニットとを含むグラフィックス処理装置であって、前記グラフィックスプロセッシングユニットは、ラン数の範囲とレベル値の範囲のペアに対応する符号を、ラン数の即値およびレベル値の即値の少なくとも一方を示す即値フィールドとともに割り当てる符号化テーブルにもとづいて圧縮テクスチャの可変長復号を実行する可変長復号部と、可変長復号されたテクスチャを逆空間周波数変換することによりテクスチャを復元する逆空間周波数変換部とを含む。前記メインメモリは、復元されたテクスチャを部分的にキャッシュするテクスチャプールを含む。
【００１０】
本発明のさらに別の態様は、画像復号方法である。この方法は、ラン数の範囲とレベル値の範囲のペアに対応する符号を、ラン数の即値およびレベル値の即値の少なくとも一方を示す即値フィールドとともに割り当てる符号化テーブルにもとづいて圧縮画像の可変長復号を実行するステップと、可変長復号された画像を逆空間周波数変換することにより画像を復元するステップとを含む。
【００１１】
本発明のさらに別の態様は、グラフィックス処理方法である。この方法は、メインメモリとグラフィックスプロセッシングユニットとを含むグラフィックス処理装置におけるグラフィックス処理方法であって、グラフィックスプロセッシングユニットが、コンピュートシェーダによって、ラン数の範囲とレベル値の範囲のペアに対応する符号を、ラン数の即値およびレベル値の即値の少なくとも一方を示す即値フィールドとともに割り当てる符号化テーブルにもとづいて圧縮テクスチャの可変長復号を実行し、可変長復号されたテクスチャを逆空間周波数変換することによりテクスチャを復元し、テクスチャを部分的にキャッシュする前記メインメモリ内のテクスチャプールに復元されたテクスチャを格納する。
【００１２】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１３】
本発明によれば、符号化された画像、特に圧縮テクスチャを効率良く伸張することができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態に係るグラフィックス処理装置の構成図である。
【図２】図２（ａ）〜図２（ｃ）は、ミップマップテクスチャを説明する図である。
【図３】本実施の形態のＰＲＴの仕組みを説明する図である。
【図４】図１の即値フィールド付き符号化テーブルの一例を示す図である。
【図５】図１の即値フィールド付き符号化テーブルの別の例を示す図である。
【図６】図１の即値フィールド付き符号化テーブルのさらに別の例を示す図である。
【図７】比較のため、分岐先に偏りがない場合のスレッドの実行過程を説明する図である。
【図８】分岐先に偏りがある場合のスレッドの実行過程を説明する図である。
【図９】符号化データが図６の即値フィールド付き符号化テーブルのいずれの行に当てはまるかをサーチする際の分岐を説明する図である。
【図１０】図９で説明した分岐を有するプログラムコードを示す図である。
【図１１】図１の即値フィールド付き符号化テーブルの実施例を示す図である。
【発明を実施するための形態】
【００１５】
図１は、実施の形態に係るグラフィックス処理装置の構成図である。グラフィックス処理装置は、メインプロセッサ１００、グラフィックスプロセッシングユニット（ＧＰＵ）２００、およびメインメモリ３００を含む。
【００１６】
メインプロセッサ１００は、単一のメインプロセッサであってもよく、複数のプロセッサを含むマルチプロセッサシステムであってもよく、あるいは、複数のプロセッサコアを１個のパッケージに集積したマルチコアプロセッサであってもよい。メインプロセッサ１００はバスを介してメインメモリ３００に対してデータを読み書きすることができる。
【００１７】
ＧＰＵ２００は、グラフィックプロセッサコアを搭載したグラフィックチップであり、バスを介してメインメモリ３００に対してデータを読み書きすることができる。
【００１８】
メインプロセッサ１００とＧＰＵ２００は、バスで接続されており、メインプロセッサ１００とＧＰＵ２００は互いにバスを介してデータをやりとりすることができる。
【００１９】
同図は、グラフィックス処理の中で特にテクスチャ処理に関する構成を図示しており、それ以外の処理に関する構成は省略している。
【００２０】
メインメモリ３００のメモリ領域はＧＰＵ２００からアクセスできるようにＧＰＵ２００が参照するアドレス空間にメモリマッピングされており、ＧＰＵ２００は、メインメモリ３００からテクスチャデータを読み取ることができる。テクスチャデータは、ＰＲＴ（Partially Resident Textures）と呼ばれる方法を用いて、部分的にメインメモリ３００にキャッシュされる。
【００２１】
メインプロセッサ１００は、グラフィックス演算部２０およびＰＲＴ制御部１０を含む。グラフィックス演算部２０は、ＧＰＵ２００のグラフィックス処理部５０からテクスチャの詳細度を示すＬＯＤ（level of detail）値を受け取り、ＰＲＴ制御部１０にＬＯＤ値を渡す。ＰＲＴ制御部１０は、グラフィックス処理部５０から受け取ったＬＯＤ値にもとづいて、今後必要となるであろうミップマップテクスチャを算出し、テクスチャプールであるＰＲＴキャッシュ３２０への展開を指示したり、使わなくなったページをはがしたりすることでＰＲＴのマッピングを更新する。
【００２２】
図２（ａ）〜図２（ｃ）は、ミップマップテクスチャを説明する図である。ミップマップテクスチャは、詳細度（ＬＯＤ）に応じて解像度を異ならせた複数のテクスチャである。図２（ａ）のミップマップテクスチャ３４０は、高解像度のテクスチャである。図２（ｂ）のミップマップテクスチャ３４２は、図２（ａ）の高解像度のミップマップテクスチャ３４０の縦、横のサイズをそれぞれ１／２にした、中解像度のテクスチャである。図２（ｃ）のミップマップテクスチャ３４４は、図２（ｂ）の中解像度のミップマップテクスチャ３４２の縦、横のサイズをそれぞれ１／２にした、低解像度のテクスチャである。
【００２３】
図１に戻り、ＰＲＴ制御部１０は、グラフィックス演算部２０に指定された詳細度のミップマップテクスチャを読み出すようにＧＰＵ２００に指示する。より具体的には、ＰＲＴ制御部１０は、ＧＰＵ２００の可変長復号部３０および逆離散コサイン変換（ＩＤＣＴ）部４０を制御し、また、メインメモリ３００に格納されたＰＲＴキャッシュ３２０のスワップイン、スワップアウトを制御する。
【００２４】
ＧＰＵ２００は、可変長復号部３０、ＩＤＣＴ部４０、およびグラフィックス処理部５０を含む。
【００２５】
可変長復号部３０は、ＰＲＴ制御部１０から指定された詳細度に対応する圧縮テクスチャ３１０をメインメモリ３００から読み出し、即値フィールド付き符号化テーブル６０（以下、略して「符号化テーブル６０」と呼ぶこともある）を参照して圧縮テクスチャ３１０を可変長復号し、ＤＣＴブロックリングバッファ８０に格納する。
【００２６】
ＩＤＣＴ部４０は、ＤＣＴブロックリングバッファ８０に格納された可変長復号後のテクスチャのＤＣＴブロックを逆離散コサイン変換し、ＰＲＴキャッシュ３２０に格納する。
【００２７】
グラフィックス処理部５０は、ＰＲＴキャッシュ３２０から必要なミップマップテクスチャを読み出す。ＰＲＴキャッシュ３２０は、テクスチャを部分的にキャッシュするテクスチャタイルプールであり、必要なテクスチャをスワップインし、不要なものはスワップアウトする。
【００２８】
図３は、本実施の形態のＰＲＴの仕組みを説明する図である。
【００２９】
仮想メモリ上にはミップマップテクスチャ３４０、３４２、３４４の領域が配置される。テクスチャの領域を一定のサイズのチャンクに分け、ページテーブル３３０を用いて、必要なテクスチャ領域だけをテクスチャタイルプール３６０に格納する。ここで、テクスチャは圧縮テクスチャ３１０としてメインメモリ３００に存在しているため、テクスチャタイルプール３６０にテクスチャ領域をキャッシュする際、圧縮テクスチャ３１０を伸張する処理が必要になる。ＰＲＴ制御部１０は、グラフィックス処理部５０からの要求に従い、可変長復号部３０およびＩＤＣＴ部４０を制御して、必要に応じて圧縮テクスチャ３１０を伸張させる。
【００３０】
同図の例では、高解像度のミップマップテクスチャ３４０のチャンク３５２、中解像度のミップマップテクスチャ３４２のチャンク３５８は、それぞれページテーブル３３０のページ３３２、３３８に対応づけられており、物理メモリがテクスチャタイルプール３６０からマップされている。
【００３１】
他方、高解像度のミップマップテクスチャ３４０のチャンク３５４、中解像度のミップマップテクスチャ３４２のチャンク３５６は、それぞれページテーブル３３０のページ３３４、３３６に対応づけられているが、いずれも物理メモリがまだテクスチャタイルプール３６０からマップされていない。この場合、前述のように、ＰＲＴ制御部１０は、グラフィックス処理部５０から受け取ったＬＯＤ値にもとづいて必要なテクスチャがテクスチャタイルプール３６０にあるように制御し、テクスチャタイルプール３６０の物理メモリが割り当てられ、圧縮テクスチャ３１０から必要なテクスチャデータが伸張されてテクスチャタイルプール３６０に格納される。一方、グラフィックス処理部５０は、メインプロセッサ１００を介することなく、自分自身が計算したＬＯＤ値を使ってミップマップテクスチャをテクスチャタイルプール３６０から読み出す。このとき、もし計算したＬＯＤ値に対応するミップマップテクスチャがテクスチャタイルプール３６０に存在しない場合は、グラフィックス処理部５０はフォールバックして、要求する詳細度を下げ、解像度の低いミップマップテクスチャをテクスチャタイルプール３６０から読み出し、描画する。
【００３２】
ここで、テクスチャのデータフォーマットについて説明する。圧縮される前の元のテクスチャデータは、たとえばＲＧＢ３２ビットフォーマットで与えられる。ＧＰＵ２００が直接扱うことのできるテクスチャフォーマットとして、ＢＣ５またはＢＣ７と呼ばれるテクスチャ圧縮方式により圧縮されたテクスチャがあり、これによれば、品質を比較的良好に保ったまま、元のテクスチャデータに比べておよそ１／４の圧縮率でデータ量を削減できる。品質が比較的低くなってもよいのであれば、ＢＣ１またはＤＸＴ１と呼ばれるテクスチャ圧縮方式により圧縮されたテクスチャを利用することもでき、この場合、元のテクスチャデータに比べておよそ１／８の圧縮率でデータ量を削減できる。
【００３３】
他方、ＧＰＵ２００が直接扱えなくなるが、ＪＰＥＧにより圧縮されたテクスチャを利用すれば、元のテクスチャデータに比べておよそ１／２０の圧縮率でデータ量を削減できる。この場合、ＧＰＵ２００のコンピュートシェーダではＪＰＥＧ伸張のような複雑なアルゴリズムを実行することは非効率であり、ＪＰＥＧ伸張を行うことのできる専用ハードウェアがなければ、リアルタイムで圧縮テクスチャを伸張してグラフィックス処理に利用することは難しい。
【００３４】
本実施の形態では、ＤＣＴと即値フィールド付きの符号化テーブルを用いた可変長符号化を行うことで、およそ１／２０の圧縮率でデータ量を削減できる。ここまで高圧縮されると、圧縮テクスチャ３１０はメインメモリ３００に常駐させることが可能になる。ＧＰＵ２００は、メインメモリ３００から圧縮テクスチャ３１０を読み出し、コンピュートシェーダによって、リアルタイムで即値フィールド付きの符号化テーブルを用いた可変長復号および逆離散コサイン変換（ＩＤＣＴ）を実行してテクスチャを復元することが可能である。
【００３５】
ＪＰＥＧ圧縮されたテクスチャは、ＧＰＵ２００が直接利用することができないため、ＪＰＥＧデコーダによっていったん復号する必要がある。ＪＰＥＧのコーデックが搭載されたグラフィックス装置であれば、ＪＰＥＧ圧縮されたテクスチャにも対応可能であるが、一般にはＪＰＥＧのコーデックを利用可能ではない。ＪＰＥＧ圧縮は、画像を離散コサイン変換し、量子化した後、ハフマン符号化を行うものである。ハフマン符号化は複雑な圧縮アルゴリズムであるから、仮にＧＰＵ２００のコンピュートシェーダがＪＰＥＧ圧縮されたテクスチャのハフマン復号を行ったとすると、計算量が膨大なものになってしまう。
【００３６】
それに対して、即値フィールド付き符号化テーブル６０を用いた可変長符号化は、即値フィールドを用いたことで符号化テーブルを小さくすることができるため、通常のハフマン符号化とは違って、ＧＰＵ２００のコンピュートシェーダによって効率的に実行することができる。
【００３７】
通常のハフマン符号化では、連続する「０」の数を示す「ラン数（Run）」と「０」以外の値である「レベル値（Level）」の組み合わせに対して１個のハフマン符号を割り当てて符号化する。出現頻度の高いラン数とレベル値の組み合わせに対しては短い符号を、出現頻度の低いラン数とレベル値の組み合わせに対しては長い符号を割り当てることで、データの平均符号長を最小にすることができる。
【００３８】
これに対して、即値フィールド付き符号化テーブル６０を用いた可変長符号化は、「ラン数」と「レベル値」のペアに、指数ゴロム的な「即値フィールド」を組み合わせて符号を作ることで、符号化テーブルの行数を小さくする。符号化テーブルの行数は高々１２行程度であり、符号化テーブルの各行は、行毎に決められた「ラン数の範囲」と「レベル値の範囲」のペアを表しており、実際のラン数とレベル値は各行の即値フィールドに与えられる「即値」によって与えられる。ここで、「ラン数の範囲」と「レベル値の範囲」のペアについて、出願頻度の高いペアを短いビット長の符号で、出願頻度の低いペアを長いビット長の符号（コード）で表現する。
【００３９】
即値フィールド付き符号化テーブル６０を用いた可変長復号時には、符号化テーブル６０のいずれの行に当てはまるかをまずサーチし、当てはまった行から「ラン数の範囲」と「レベル値の範囲」のペアが特定され、その行の即値フィールドからラン数の即値とレベル値の即値を取得すればよい。通常のハフマン符号化のテーブルの場合、行数が多く、テーブルサーチが複雑でＧＰＵ２００では実行することが難しいが、即値フィールド付き符号化テーブル６０は行数が少ないため、条件分岐を少なくすることができ、ＧＰＵ２００で複数のスレッドを並列実行することで効率良く可変長復号することができる。
【００４０】
図４は、即値フィールド付き符号化テーブル６０の一例を示す図である。この符号化テーブル６０は４行であり、ラン数の範囲とレベル値の範囲のペアに対して異なるビット長の符号（コード）を割り当てる。ここでは、ＤＣＴブロックは１６×１６であり、１２ビットのＤＣＴ係数の値を２５６個毎に区切って符号化するため、ラン数は０〜２５５の値を取り、レベル値は０〜４０９５の値を取る。
【００４１】
コード１「１ＲＲｓＬＬ」は、ラン数の範囲０〜３（２ビット）、レベル値の範囲０〜３（２ビット）のペアに対応し、ビット長６である。先頭の「１」はコード１であることを識別する符号である。「ＲＲ」はラン数の即値であり、０〜３のいずれかの値を取る。「ＬＬ」はレベル値の即値であり、０〜３のいずれかの値を取る。「ｓ」は符号（sign）ビットであり、レベル値の正負を示す（以下、同じ）。
【００４２】
コード２「０１ＲＲＲＲＲｓＬＬＬＬＬ」は、ラン数の範囲０〜３１（５ビット）、レベル値の範囲０〜３１（５ビット）のペアに対応し、ビット長１３である。先頭の「０１」はコード２であることを識別する符号である。「ＲＲＲＲＲ」はラン数の即値であり、０〜３１のいずれかの値を取る。「ＬＬＬＬＬ」はレベル値の即値であり、０〜３１のいずれかの値を取る。
【００４３】
コード３「００１ＲＲＲＲＲＲＲＲｓＬＬＬＬＬＬＬＬＬＬＬＬ」は、ラン数の範囲０〜２５５（８ビット）、レベル値の範囲０〜４０９５（１２ビット）のペアに対応し、ビット長２４である。先頭の「００１」はコード３であることを識別する符号である。「ＲＲＲＲＲＲＲＲ」はラン数の即値であり、０〜２５５のいずれかの値を取る。「ＬＬＬＬＬＬＬＬＬＬＬＬ」はレベル値の即値であり、０〜４０９５のいずれかの値を取る。
【００４４】
コード４「０００１」は、これ以降はすべて０であることを示す、ブロックの終わりを示す符号ＥＯＢ（End of Block）に対応し、ビット長４である。「０００１」はコード４であることを識別する符号である。
【００４５】
このように、即値フィールド付き符号化テーブル６０の各行は、ラン数の範囲とレベル値の範囲のペアに対応するコード識別符号と、ラン数の即値、レベル値の即値、およびレベル値の正負を示す符号ビットを表現した即値フィールドとを含む。
【００４６】
本実施の形態のテクスチャ圧縮では、画像のブロックに対して離散コサイン変換（ＤＣＴ）がなされた後、量子化され、可変長符号化される。自然画を離散コサイン変換すると、周波数成分のほとんどが低周波領域に集中し、高周波成分は無視できるほど小さくなる。特に量子化により、高周波成分のＤＣＴ係数はほとんどゼロになる。このことから、可変長符号化の入力データはゼロが多数連続することが多くなる。
【００４７】
あるテクスチャ画像の量子化ＤＣＴ係数に対して図４の符号化テーブル６０にもとづいて可変長符号化すると、各コードの出現個数は、コード１が７，２００個、コード２が８１０個、コード３が６２個、コード４が２６０個であった。出現個数に各コードのビット長を乗じて合計すると、圧縮テクスチャ全体の符号量は５６，２５８ビットである。
【００４８】
図５は、即値フィールド付き符号化テーブル６０の別の例を示す図である。図４の符号化テーブル６０では、ラン数の範囲０〜３、レベル値の範囲０〜３のペアに対応するコード１の出現個数が非常に多かったことから、図５の符号化テーブル６０では、図４の４行の符号化テーブル６０に、ラン数の範囲０〜１、レベル値１のペアに対応する３ビットのコード１を追加することで５行のテーブルとした。
【００４９】
図５の符号化テーブル６０では、コード１「１０ｓ」（３ビット）、コード２「０１ＲＲｓＬＬ」（７ビット）、コード３「００１ＲＲＲＲＲｓＬＬＬＬＬ」（１４ビット）、コード４「０００１ＲＲＲＲＲＲＲＲｓＬＬＬＬＬＬＬＬＬＬＬＬ」（２５ビット）、コード５「００００１」（５ビット）で符号化される。
【００５０】
図４の符号化テーブル６０では、コード１（６ビット）の出現個数は７，２００個であり、コード１の合計ビット数は４３，２００ビットであったのに対して、図５の符号化テーブル６０では、これが３，９００個のコード１（３ビット）と３，３００個のコード２（７ビット）に分かれ、コード１とコード２の合計ビット数は、１１，７００＋２３，１００＝３４，８００ビットに減少する。図５の符号化テーブル６０を用いた場合、圧縮テクスチャ全体の符号量は４８，９９０ビットであり、図４の符号化テーブル６０を用いた場合よりも符号量を減らすことができる。
【００５１】
図６は、即値フィールド付き符号化テーブル６０のさらに別の例を示す図である。図６の符号化テーブル６０は、図５の符号化テーブル６０に比べて、さらに行数、すなわち、ラン数の範囲とレベル値の範囲のペアの組み合わせの数を増やして１０行、すなわち１０コードのテーブルとした。
【００５２】
コード１「１Ｒｓ」は、ラン数の範囲０〜１（１ビット）、レベル値１のペアに対応し、ビット長３である。「Ｒ」は０または１の値を取り、ラン数の即値をそのまま表す。コード１は、（Ｒｕｎ，Ｌｅｖｅｌ）＝（０，１）、（１，１）を符号化するコードである。
【００５３】
コード２「０１０ＲｓＬ」は、ラン数の範囲０〜１（１ビット）、レベル値の範囲２〜３（１ビット）のペアに対応し、ビット長６である。「Ｒ」は０または１の値を取り、ラン数の即値をそのまま表す。「Ｌ」は０または１の値を取り、オフセット２を加算することで、レベル値の即値を表す。
【００５４】
コード３「０１１ＲＲｓＬＬ」は、ラン数の範囲２〜５（２ビット）、レベル値の範囲１〜４（２ビット）のペアに対応し、ビット長８である。「ＲＲ」は０〜３のいずれかの値を取り、オフセット２を加算することで、ラン数の即値を表す。「ＬＬ」は０〜３のいずれかの値を取り、オフセット１を加算することで、レベル値の即値を表す。
【００５５】
コード４「００１０ＲｓＬＬ」は、ラン数の範囲０〜１（１ビット）、レベル値の範囲４〜７（２ビット）のペアに対応し、ビット長８である。「Ｒ」は０または１の値を取り、ラン数の即値をそのまま表す。「ＬＬ」は０〜３のいずれかの値を取り、オフセット４を加算することで、レベル値の即値を表す。
【００５６】
コード５「００１１ＲＲｓＬＬ」は、ラン数の範囲６〜９（２ビット）、レベル値の範囲１〜４（２ビット）のペアに対応し、ビット長９である。「ＲＲ」は０〜３のいずれかの値を取り、オフセット６を加算することで、ラン数の即値を表す。「ＬＬ」は０〜３のいずれかの値を取り、オフセット１を加算することで、レベル値の即値を表す。
【００５７】
コード６「０００１０ＲＲＲＲＲＲｓ」は、ラン数の範囲１０〜７３（６ビット）、レベル値１のペアに対応し、ビット長１２である。「ＲＲＲＲＲＲ」は０〜６３のいずれかの値を取り、オフセット１０を加算することで、ラン数の即値を表す。
【００５８】
コード７「０００１１ＲＲＲＲＲｓＬＬＬＬＬ」は、ラン数の範囲０〜３１（５ビット）、レベル値の範囲０〜３１（５ビット）のペアに対応し、ビット長１６である。「ＲＲＲＲＲ」は０〜３１のいずれかの値を取り、ラン数の即値をそのまま表す。「ＬＬＬＬＬ」は０〜３１のいずれかの値を取り、レベル値の即値をそのまま表す。
【００５９】
コード８「００００１ｓＬＬＬＬＬＬＬＬＬＬＬＬ」は、ラン数０、レベル値の範囲０〜４０９５（１２ビット）のペアに対応し、ビット長１８である。「ＬＬＬＬＬＬＬＬＬＬＬＬ」は０〜４０９５のいずれかの値を取り、レベル値の即値をそのまま表す。
【００６０】
コード９「０００００１」は、これ以降はすべて０であることを示す、ブロックの終わりを示す符号ＥＯＢ（End of Block）に対応し、ビット長６である。
【００６１】
コード１０「００００００１ＲＲＲＲＲＲＲＲｓＬＬＬＬＬＬＬＬＬＬＬＬ」は、ラン数の範囲０〜２５５（８ビット）、レベル値の範囲０〜４０９５（１２ビット）のペアに対応し、ビット長２８である。「ＲＲＲＲＲＲＲＲ」は０〜２５５のいずれかの値を取り、ラン数の即値をそのまま表す。「ＬＬＬＬＬＬＬＬＬＬＬＬ」は０〜４０９５のいずれかの値を取り、レベル値の即値をそのまま表す。
【００６２】
コード１〜１０のそれぞれの出現個数および合計ビット数は図示の通りである。図６の符号化テーブル６０を用いた場合、ビット長の短いコードが増えたことで、各行の合計ビット数を小さく抑えることができ、その結果、圧縮テクスチャ全体の符号量は４３，５３６ビットであり、図５の符号化テーブル６０を用いた場合よりもさらに符号量を減らすことができる。
【００６３】
本実施の形態の即値フィールド付き符号化テーブル６０はいずれも、異なるコード間でラン数の範囲とレベル値の範囲が重複することを許している。２以上のコードのラン数の範囲とレベル値の範囲に当てはまる場合は、より符号長の短いコードが優先的に用いられる。
【００６４】
図４の即値フィールド付き符号化テーブル６０を参照して、即値フィールド付き符号化テーブル６０を用いた可変長復号を説明する。符号化データが図４の符号化テーブル６０のコード１〜４のいずれに当てはまるかをサーチするために、符号化データのビット列において最初に１が現れるのは何番目のビットであるかを調べる。
【００６５】
１番目のビットに最初に１が現れた場合（「分岐Ａ」と呼ぶ）、コード１であり、残りの５ビットの即値フィールドからラン数の即値（２ビット）、符号ビット、レベル値の即値（２ビット）を順に読み出す。
【００６６】
２番目のビットに最初に１が現れた場合（「分岐Ｂ」と呼ぶ）、コード２であり、残りの１１ビットの即値フィールドからラン数の即値（５ビット）、符号ビット、レベル値の即値（５ビット）を順に読み出す。
【００６７】
３番目のビットに最初に１が現れた場合（「分岐Ｃ」と呼ぶ）、コード３であり、残りの２１ビットの即値フィールドからラン数の即値（８ビット）、符号ビット、レベル値の即値（１２ビット）を順に読み出す。
【００６８】
４番目のビットに最初に１が現れた場合（「分岐Ｄ」と呼ぶ）、コード４であり、ＥＯＢである。
【００６９】
図４に示した各コードの出現個数の例から、図４の符号化テーブル６０を用いて可変長符号化された圧縮テクスチャデータを可変長復号すると、分岐Ａを通ることがきわめて多くなることがわかる。図４のような符号化テーブル６０を用いた可変長符号化の性質によって、ＧＰＵ２００のコンピュートシェーダが効率良く可変長復号することができる。なぜなら、ＧＰＵ２００は、ＳＩＭＤ（Single Instruction Multiple Data）アーキテクチャであり、複数のスレッドが異なるデータに対して同じインストラクションを同時に実行するため、分岐条件に偏りがあれば、並列度が高まり、実行効率が上がる。
【００７０】
ＧＰＵ２００は、一つのプログラムカウンタ（ＰＣ）がインストラクションキャッシュに格納されたインストラクションを参照し、たとえば１６個のＡＬＵ（Arithmetic Logic Unit）が同時にＰＣが参照するインストラクションを実行する。ｉｆ−ｔｈｅｎ−ｅｌｓｅ文のループやｓｗｉｔｃｈ−ｃａｓｅ文のループの分岐毎に異なる命令を１６個のスレッドにセットして同時に実行することになる。１６個のスレッドに対して、ｉｆ−ｔｈｅｎ−ｅｌｓｅ文による条件分岐では、ｉｆ条件が成立する場合（Ｔｒｕｅ）のピクセルを担当するスレッドを有効にして並列に実行し、ｅｌｓｅ分岐では、ｅｌｓｅ条件が成立する場合（Ｆａｌｓｅ）のピクセルを担当するスレッドを有効にして並列に実行する。ｓｗｉｔｃｈ−ｃａｓｅ文による条件分岐では、条件が成立したｃａｓｅのピクセルを担当するスレッドを有効にして並列に実行する。
【００７１】
ｉｆ−ｔｈｅｎ−ｅｌｓｅ文による条件分岐では、ｉｆ条件が成立する場合とｅｌｓｅ条件が成立する場合がほぼ同数である場合、Ｔｒｕｅの場合とＦａｌｓｅの場合で有効化するスレッドの入れ替えを頻繁に行うことになるが、ｉｆ条件成立が８割、ｅｌｓｅ条件成立が２割のように偏っていれば、Ｔｒｕｅの場合に有効化するスレッドの集合を繰り返し使えるため、実行効率が高まる。ｓｗｉｔｃｈ−ｃａｓｅ文による条件分岐では、各ｃａｓｅが成立する場合がほぼ同数である場合、ｃａｓｅ毎に有効化するスレッドの入れ替えを頻繁に行うことになるが、各ｃａｓｅの成立の頻度が偏っていれば、成立頻度の高いｃａｓｅで有効化するスレッドの集合を繰り返し使えるため、実行効率が高まる。図７および図８を参照してこの点をより詳しく説明する。
【００７２】
図７は、比較のため、分岐先に偏りがない場合のスレッドの実行過程を説明する図である。
【００７３】
ＧＰＵ２００は複数の計算ユニット（Computing Unit）を含む。ＧＰＵ２００の１つの計算ユニットで同時に実行されるスレッドの数は計算ユニット内の演算器の数によって決まるが、ここではこれを１６個とする。１つの計算ユニットに同時に投入可能な最大１６スレッドの集まりを「スレッドセット」と呼ぶ。スレッドセットに含まれる各スレッドは、同じシェーダプログラムを実行するが、処理するデータはそれぞれ異なり、プログラム内に分岐がある場合は、それぞれ別の分岐先をもつことがある。１つの計算ユニットはあるサイクルでは、１つのスレッドセット（ここでは最大１６スレッド）を並列に実行する。
【００７４】
たとえば、各分岐先での必要な命令数が数個であっても、プラグラムカウンタが１個であり、計算ユニット内のすべての演算器は同一の命令を実行するＳＩＭＤ構造であるため、スレッドマスクによって実行するスレッドを変えながら各分岐の一つ一つの命令を実行することになる。
【００７５】
一例として、図４の符号化テーブル６０を用いて可変長復号する際の分岐Ａは４命令、分岐Ｂは４命令、分岐Ｃは４命令、分岐Ｄは２命令で実行されるとする。図７の例では、スレッドセット４５０内の１６個のスレッドの分岐先が順にＡ、Ａ、Ｂ、Ａ、Ａ、Ａ、Ｂ、Ｃ、Ｂ、Ａ、Ｂ、Ａ、Ｂ、Ａ、Ｂ、Ｄである場合を説明している。
【００７６】
サイクル１において、分岐Ａを実行するスレッドのみ（この場合、８個のスレッド）を有効にし、プログラムカウンタを１つずつ進めながら、分岐Ａの４命令Ａ−１、Ａ−２、Ａ−３、Ａ−４を実行する。
【００７７】
サイクル５において、分岐Ｂを実行するスレッドのみ（この場合、６個のスレッド）を有効にし、プログラムカウンタを１つずつ進めながら、分岐Ｂの４命令Ｂ−１、Ｂ−２、Ｂ−３、Ｂ−４を実行する。
【００７８】
サイクル９において、分岐Ｃを実行するスレッドのみ（この場合、１個のスレッド）を有効にし、プログラムカウンタを１つずつ進めながら、分岐Ｃの４命令Ｃ−１、Ｃ−２、Ｃ−３、Ｃ−４を実行する。
【００７９】
サイクル１３において、分岐Ｄを実行するスレッドのみ（この場合、１個のスレッド）を有効にし、プログラムカウンタを１つずつ進めながら、分岐Ｄの２命令Ｄ−１、Ｄ−２を実行する。
【００８０】
このように、図７の例では、スレッドセットに含まれる１６個のスレッドが４つの分岐Ａ〜Ｄのすべての命令を実行するために、１４サイクルが必要となる。
【００８１】
図８は、分岐先に偏りがある場合のスレッドの実行過程を説明する図である。図８の例では、スレッドセット４５２内の１６個のスレッドの分岐先が順にＡ、Ａ、Ｂ、Ａ、Ａ、Ａ、Ｂ、Ｂ、Ｂ、Ａ、Ｂ、Ａ、Ａ、Ａ、Ａ、Ａである場合を説明している。この例では、シェーダプログラム上は分岐先が４種類あるが、分岐条件が成立するピクセルが偏っており、分岐先が分岐Ａと分岐Ｂの２種類しかない。スレッドセットに含まれる１６個のスレッドはこの２種類の分岐だけを実行すればよい。
【００８２】
サイクル１において、分岐Ａを実行するスレッドのみ（この場合、１１個のスレッド）を有効にし、プログラムカウンタを１つずつ進めながら、分岐Ａの４命令Ａ−１、Ａ−２、Ａ−３、Ａ−４を実行する。
【００８３】
サイクル５において、分岐Ｂを実行するスレッドのみ（この場合、５個のスレッド）を有効にし、プログラムカウンタを１つずつ進めながら、分岐Ｂの４命令Ｂ−１、Ｂ−２、Ｂ−３、Ｂ−４を実行する。
【００８４】
このように、図８の例では、スレッドセットに含まれる１６個のスレッドが２つの分岐Ａ、Ｂのすべての命令を実行すればよく、必要サイクル数は８サイクルに減る。
【００８５】
このように入力されるデータの性質によってプログラムの分岐先に偏りが生じる場合は、同じスレッドマスクをそのまま使って繰り返し命令を実行することができ、実行効率が向上する。分岐先にばらつきがあると、分岐毎にスレッドマスクを切り替えることになり、実行効率が低下する。
【００８６】
自然画由来のＤＣＴ係数の特性から、ＤＣＴ係数行列の左上の低周波成分に０以外の値が集中し、ＤＣＴ係数行列の右下の高周波成分に０が連続するようになる。したがって、離散コサイン変換後の画像ブロックをジグザグパターンにより１次元配列にすると、どのブロックのＤＣＴ係数も最初は非ゼロの値が続き、後半に０が連続するデータ列となる傾向がある。
【００８７】
このＤＣＴ係数の傾向を踏まえて、スレッドセットの各スレッドには、異なるＤＣＴブロックのＤＣＴ係数を処理するように可変長符号化データを割り当て、各スレッドがＤＣＴブロック内で相対的に同じ位置のＤＣＴ係数の可変長復号を行うようにスレッドセットを構成する。図４の符号化テーブル６０の場合、分岐先が分岐Ａ〜Ｄのいずれかになる。スレッドセットの構成から、ＤＣＴブロック内の相対的に同じ位置ではＤＣＴ係数の傾向が似るため、スレッドセット内の各スレッドの分岐先は同じものに偏るようになる。これにより、図７のように分岐先がばらつくのではなく、図８のように分岐先が偏るようになり、スレッドセットの効率的な実行状態を長く続けることができる。その結果、スレッドセットによって可変長復号は効率良く実行される。
【００８８】
図６の即値フィールド付き符号化テーブル６０を用いた可変長復号の手順を詳しく説明する。図９は、符号化データが図６の符号化テーブル６０のいずれの行に当てはまるかをサーチする際の分岐を説明する図である。符号化データのビット列において最初に１が現れるのが何番目のビットであるかを調べる。
【００８９】
１番目のビットに最初に１が現れた場合、ｃａｓｅ０であり、２番目のビットに最初に１が現れた場合、ｃａｓｅ１であり、３番目のビットに最初に１が現れた場合、ｃａｓｅ２であり、４番目のビットに最初に１が現れた場合、ｃａｓｅ３であり、５番目のビットに最初に１が現れた場合、ｃａｓｅ４であり、６番目のビットに最初に１が現れた場合、ｃａｓｅ５であり、７番目のビットに最初に１が現れた場合、ｃａｓｅ６である。
【００９０】
ｃａｓｅ０はコード１に対応し、ｃａｓｅ４はコード８に対応し、ｃａｓｅ５はコード９に対応し、ｃａｓｅ６はコード１０に対応するから、残りの即値フィールドから適宜、ラン数の即値、レベル値の即値を読み出せばよい。
【００９１】
ｃａｓｅ１はコード２およびコード３に対応し、３ビット目が０であればコード２、３ビット目が１であればコード３であることが判明するから、その後は、残りの即値フィールドからラン数の即値、レベル値の即値を読み出せばよい。
【００９２】
同様に、ｃａｓｅ２はコード４およびコード５に対応し、４ビット目が０であればコード４、４ビット目が１であればコード５である。また、ｃａｓｅ３はコード６およびコード７に対応し、５ビット目が０であればコード６、４ビット目が１であればコード７である。いずれのコードであるかが特定されたなら、残りの即値フィールドから、適宜、ラン数の即値、レベル値の即値を読み出す。
【００９３】
図１０は、図９で説明した分岐を有するプログラムソースコードを示す。clz=FirstSetBit_Hi_MSB(code)は、符号化データのビット列において最初に１が現れる列番号ｃｌｚを求める演算式である。列番号は０からカウントしているから、プログラムコードのswitch文のcase 0〜case 6は図９のｃａｓｅ０〜ｃａｓｅ６に対応する。関数BITAT(code,n-1,m)は符号化データのビット列の第ｎ列から前方にｍビットのビット列を読み出す演算である。
【００９４】
switch文のcase 1のソースコードを説明すると、if(BITAT(code,2,1)==0)は、符号化データのビット列の３ビット目が０である場合であり、これは図９のコード２である。コード２では、４ビット目からラン数の即値を読み出せばよいから、run=BITAT(code,3,1)を実行する。次に６ビット目からレベル値の即値を読み出すが、オフセットとして２を加算する必要があるため、level=BITAT(code,5,1)+2を実行する。符号ビットは、５ビット目から読み出せばよいから、sign=BITAT(code,4,1)を実行する。
【００９５】
if(BITAT(code,2,1)==0)が成立しない場合、符号化データのビット列の３ビット目が１であるから、これは図９のコード３である。この場合、else文が実行される。コード３では、４ビット目と５ビット目からラン数の即値を読み出すが、オフセットとして２を加算する必要があるため、run=BITAT(code,4,2)+2を実行する。ここで、BITAT(code,4,2)は、５ビット目から前方へ２ビットのビット列を読み出す演算であるから、結果的に４ビット目と５ビット目が読み出されることに留意する。次に７ビット目と８ビット目からレベル値の即値を読み出すが、オフセットとして１を加算する必要があるため、level=BITAT(code,7,2)+1を実行する。符号ビットは、６ビット目から読み出せばよいから、sign=BITAT(code,5,1)を実行する。
【００９６】
switch文のcase 2〜case 6についても同様に各行で決められたラン数の範囲、レベル値の範囲に応じて即値フィールドからラン数の即値、レベル値の即値を読み出して、適宜オフセットを加算する演算を行えばよい。
【００９７】
図１１は、即値フィールド付き符号化テーブル６０の実施例を示す図である。図６の符号化テーブル６０よりもさらに２行増やして、１２種類のコードで符号化する。各行のコードのラン数の範囲、レベル値の範囲、ビット長、出現個数は図示した通りである。
【００９８】
図１１の符号化テーブル６０のコードの性質は次のようにまとめることができる。
（１）０〜７３個の連続する０に続くレベル値１に対して３〜１２ビットのコードを割り当てる。
（２）０〜９個の連続する０に続くレベル値２〜４に対して６〜９ビットのコードを割り当てる。
（３）１個以内の０に続くレベル値４〜７に対して８ビットのコードを割り当てる。
（４）０〜３１個の連続する０に続くレベル値０〜３１に対して１６ビットのコードを割り当てる。
（５）３２以上の連続するレベル値に対して１８ビットのコードを割り当てる。
（６）その他の任意の連続する０に続く任意のレベル値に対して２９ビットのコードを割り当てる。
【００９９】
ハフマン符号化では、与えられた画像に対して、出現頻度の高いラン数とレベル値の組み合わせに対して短い符号を、出現頻度の低いラン数とレベル値の組み合わせに対しては長い符号を割り当てた符号化テーブルが動的に生成される。それに対して、本実施の形態の即値フィールド付き符号化テーブル６０を用いた可変長符号化では、即値フィールド付き符号化テーブル６０は動的に生成されるのではなく、あらかじめ決められたものが用いられる。もっとも、複数の異なる即値フィールド付き符号化テーブル６０を用意しておき、何らかの条件でいずれかのテーブルに切り替えて用いてもよく、複数の即値フィールド付き符号化テーブル６０の中から、与えられた画像を実際に可変長符号化した場合の符号量が最も小さくなるテーブルを最適なテーブルとして選択してもよい。
【０１００】
本実施の形態のグラフィックス処理装置によれば、離散コサイン変換後に即値フィールド付き符号化テーブルを用いて可変長符号化されたテクスチャを用いるため、テクスチャ容量を大きく削減することができる。ＧＰＵ２００のコンピュートシェーダが圧縮テクスチャを即値フィールド付き符号化テーブルを用いて可変長復号し、逆離散コサイン変換するため、高速に圧縮テクスチャを伸張してグラフィックス処理に投入することができる。高圧縮されたテクスチャはメモリに常駐させることができるため、大容量のテクスチャをハードディスクなどの記憶装置から読み出す必要がなく、オンメモリでＰＲＴを実行することが可能である。圧縮テクスチャがオンメモリ化されているため、必要に応じて圧縮テクスチャを読み出し、伸張してＰＲＴキャッシュにスワップインする構成にしても、レイテンシは短く、リアルタイムでテクスチャ処理を実行することができる。
【０１０１】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【０１０２】
上記の実施の形態では、圧縮テクスチャをメモリに格納したが、圧縮テクスチャをハードディスクや光ディスクなどの記録媒体に格納してもよい。テクスチャは高圧縮されているため、記憶容量を抑えることができ、また、オンメモリの場合のレイテンシにはかなわないが、記録媒体からの読み出しのレイテンシをある程度抑えることもできる。
【０１０３】
上記の実施の形態では、画像の空間領域を空間周波数領域に変換する空間周波数変換の一例として、離散コサイン変換を用いたが、これ以外の空間周波数変換、たとえば離散フーリエ変換を用いてもよい。
【０１０４】
上記の実施の形態では、ＧＰＵ２００が可変長復号部３０とＩＤＣＴ部４０を含む構成において圧縮テクスチャを伸張する手順を説明したが、本実施の形態の即値フィールド付き符号化テーブル６０を用いた可変長復号は、グラフィックス処理装置における圧縮テクスチャの伸張以外にも、一般的な画像処理装置において可変長符号化された画像を復号する場合にも利用することができる。
【符号の説明】
【０１０５】
１０  ＰＲＴ制御部、  ２０  グラフィックス演算部、  ３０  可変長復号部、  ４０  逆離散コサイン変換部、  ５０  グラフィックス処理部、  ６０  即値フィールド付き符号化テーブル、  ８０  ＤＣＴブロックリングバッファ、  １００  メインプロセッサ、  ２００  ＧＰＵ、  ３００  メインメモリ、  ３１０  圧縮テクスチャ、  ３２０  ＰＲＴキャッシュ、  ３３０  ページテーブル、  ３４０  ミップマップテクスチャ、  ３６０  テクスチャタイルプール。
【図１】
0006465606.tif 000002
【図２】
0006465606.tif 000003
【図３】
0006465606.tif 000004
【図４】
0006465606.tif 000005
【図５】
0006465606.tif 000006
【図６】
0006465606.tif 000007
【図７】
0006465606.tif 000008
【図８】
0006465606.tif 000009
【図９】
0006465606.tif 000010
【図１０】
0006465606.tif 000011
【図１１】
0006465606.tif 000012