全体ブロック図上で、汎用シェーダユニット~SIMDアレイの右側に接続されているのはテクスチャの読み出しを統括するテクスチャユニット(Texture Unit)だ。
このように、テクスチャユニットは先代Radeon X1000シリーズと同じく、シェーダユニットからは分離、実装され、全シェーダユニットから共有されて活用されるような設計となっている。この分離実装/共有活用されるテクスチャユニットはNVIDIAのGeForce 6000シリーズ以降でも同じだ。
これは、GPU進化と共にシェーダの数が極端に増やされのに対し、テクスチャアクセス(=メモリアクセス)がそれほど高速化されていないことから来る、必然的な設計方針だ。たとえシェーダとテクスチャユニットを1対1に割り当てて実装したところで、メモリアクセスで待たされてしまうため意味がないのだ。テクスチャユニットの数や仕様は、そのGPUに組み合わされるメモリのバス速度、アクセス速度の兼ね合いから自ずと決定されるのである。
さて、そのテクスチャユニットだが、個数自体はRadeon HD 2900シリーズとX1900シリーズを比較すると同じ4基構成のデザインとなっている。
しかし、統合型シェーダアーキテクチャに対応させる意図と、DirectX 10/SM4.0に対応させる狙いから、そのテクスチャユニット1つ1つは大幅に機能向上が図られている。
図は、そのテクスチャユニットを拡大したものだ。
なお、この図は、Radeon HD 2900シリーズのものを拡大したもので、Radeon HD 2600シリーズでは2基構成に、HD 2400シリーズでは1基構成となっている点に留意したい。
さて、Radeon HD 2000シリーズのテクスチャユニットは、全部で3種類の実行ユニットで構成されている。1つ1つを見ていくことにしよう。
テクスチャアドレスプロセッサ」(Texture Adress Processor)
図中で黄色い■で表されているのが、テクスチャアドレスを計算する「テクスチャアドレスプロセッサ」(Texture Adress Processor)だ。
テクスチャアドレス計算とは、今ピクセルシェーダが処理中のピクセルに対応するテクセルはビデオメモリ上のどこにあるのかを計算すること。
1基あたりのテクスチャユニットにおいて、テクスチャアドレスプロセッサは8基ある(HD 2900全体では8×4=32基)。大きい黄色い■が4基(最上段)と、小さい黄色い■が4基(最下段)の2タイプがあるが、小さい方は「テクスチャフィルタ処理無し」用のもので、大きい方は「テクスチャフィルタ有り」用のものだ。これらは同時に機能できる。
ちなみに、「テクスチャフィルタ処理無し」のテクスチャアクセスは主にテクスチャを配列データのような数値データテーブルとして活用する場合や、頂点バッファからの頂点データの読み出しなどに利用され、「テクスチャフィルタ処理有り」のテクスチャアクセスは一般的な画像テクスチャなどのアクセスで利用される。
テクスチャサンプラ(Texture Smapler)
図中でオレンジ色の■で表されているのが、実際にビデオメモリ上のテクスチャから、テクセル読み出しを行う「テクスチャサンプラ」(Texture Smapler)だ。なお、図中の「Decompress」とは、圧縮されたテクスチャを展開してデコードして読み出す補助ユニットを表している。
1基あたりのテクスチャユニットにおいて、テクスチャサンプラは20基実装されているのが分かるだろうか(HD 2900全体では20×4=80基)。2×2(=4)で並んだ■と4×4(=16)で並んだ■を合わせて20基という計算だ(4+16=20)。
これらのテクスチャサンプラは全て32ビット浮動小数点の値をデコードできるポテンシャルを持っている。
2×2のテクスチャサンプラからの出力データは「テクスチャフィルタ処理無し」のデータとしてそのまま出力され、4×4のテクスチャサンプラからの出力はその後ろに続くテクスチャフィルタ処理ユニット(Texture Filter Unit)へと受け渡される。
テクスチャフィルタ処理ユニット(Texture Filter Unit)
図中でピンク色の■で表されているのが、テクスチャの各種フィルタ処理を行う「テクスチャフィルタ処理ユニット」(Texture Filter Unit)だ。
テクスチャフィルタとは、取りだした複数のテクセルの値から多様な平均計算、補間計算を行う処理のこと。バイリニア、トライリニア、アニソトロピック…といったキーワードを聞いたことがあると思うが、テクスチャに対してああいったフィルタ処理を行うのがこのテクスチャフィルタ処理ユニットだ。
1基あたりのテクスチャユニットにおいて、テクスチャフィルタ処理ユニットは4基実装されており、その全てが32ビット浮動小数点(FP32)演算に対応している(HD 2900全体では4×4=16基)。つまり、バイリニアフィルタであれば、1クロックあたりに、フィルタ処理されたFP32テクセルを同時に4個出力できるのだ。あるいは、バイリニアフィルタ処理付き64ビット浮動小数点(FP16×4)テクセルであれば1クロックあたり1個、バイリニアフィルタ処理付き128ビット浮動小数点(FP32×4)テクセルだと2クロックで1個の出力が可能ということになる。AMDによれば、これは実測でRadeon X1000シリーズの7倍近い性能アップになったとしている。
より負荷はかかることになるが、64ビット浮動小数点テクセル、128ビット浮動小数点テクセルの双方に対して、バイリニア以外の、トライリニア、アニソトロピックの全3種類のテクスチャフィルタリングの適用も可能になっている。まさにHDRレンダリング時代に全方位対応したテクスチャユニット…といったところだろうか。今やテクスチャ関連で残された課題をあえて挙げるとすれば、HDRテクスチャの圧縮メソッドの実装くらいだろう。