(57)【要約】シェーダプロセッサの複数の動作を行うためにテクスチャユニットを使用するための技法が説明される。シェーダプロセッサのいくつかの複数の動作は、条件が満たされるまで繰り返し実行され、各実行反復において、シェーダプロセッサはテクスチャユニットにアクセスする。条件が満たされるまでテクスチャユニットがそのような複数の動作を行うための技法が説明される。【選択図】図３
2019509555.tif 000002
【特許請求の範囲】
【請求項１】
データを処理する方法であって、前記方法は、
命令において定義された条件が満たされることに基づいて複数の動作を繰り返し実行することをテクスチャユニットに命令する前記命令を、前記テクスチャユニットで受信することと、
前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を前記テクスチャユニットで繰り返し実行することと、
前記複数の動作の前記繰り返される実行から生じるデータを前記テクスチャユニットでおよびグラフィックス処理ユニット（ＧＰＵ）に出力することと
を備える方法。
【請求項２】
前記命令を受信することは前記ＧＰＵのシェーダプロセッサから前記命令を受信することを備え、ここにおいて、出力することは前記データを前記ＧＰＵの前記シェーダプロセッサに出力することを備える、請求項１に記載の方法。
【請求項３】
前記複数の動作の前記繰り返される実行の第１の反復中にテクセル値を前記テクスチャユニットで読み取ることと、
前記テクセル値に基づく値を、前記命令において定義された変数と比較することによって、前記条件が満たされるのか満たされないのかを、前記テクスチャユニットで決定することと、
前記命令において定義された前記条件が満たされるのか満たされないのかの前記決定に基づいて、前記複数の動作の実行の第２の反復が必要とされるかどうかを、前記テクスチャユニットで決定することと
をさらに備え、
ここにおいて、前記複数の動作を繰り返し実行することは、前記複数の動作の実行の前記第２の反復が必要とされるという前記決定に基づいて、前記テクスチャユニットの出力をフィードバック信号として前記テクスチャユニットの入力に、前記テクスチャユニットで出力することを備え、
ここにおいて、データを出力することは、前記複数の動作の実行の前記第２の反復が必要とされないという前記決定に基づいて、前記複数の動作の前記繰り返される実行から生じる前記データを出力することを備える、
請求項１に記載の方法。
【請求項４】
前記複数の動作を繰り返し実行することが、前記複数の動作を実行するために何も追加命令を受け取らずに、前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行することを備える、請求項１に記載の方法。
【請求項５】
前記複数の動作はシェーダプログラムの複数の動作を備える、請求項１に記載の方法。
【請求項６】
前記複数の動作はテクスチャ座標を変更するための複数の動作を備える、請求項１に記載の方法。
【請求項７】
前記複数の動作は、視差遮蔽マッピング（ＰＯＭ）、スクリーン空間光線追跡（ＳＳＲＴ）、被写界深度（ＤｏＦ）処理、ボリュームレンダリング、あるいは動的高さフィールドを用いた水または地形レンダリングのうちの１つまたは複数のための複数の動作を備える、請求項１に記載の方法。
【請求項８】
前記複数の動作を繰り返し実行することは、前記条件が満たされるまで、または前記条件が満たされる限り、前記複数の動作を繰り返し実行することを備える、請求項１に記載の方法。
【請求項９】
前記複数の動作の前記繰り返される実行から生じる前記データを出力することは、前記複数の動作の前記繰り返される実行の全ての反復が完了した後にのみ、前記データをシェーダプロセッサに出力することを備える、請求項１に記載の方法。
【請求項１０】
データを処理するためのデバイスであって、前記デバイスは、
シェーダプロセッサを備えるグラフィックス処理ユニット（ＧＰＵ）と、
テクスチャユニットとを備え、前記テクスチャユニットは、
命令において定義された条件が満たされることに基づいて複数の動作を繰り返し実行することを前記テクスチャユニットに命令する前記命令を、前記ＧＰＵの前記シェーダプロセッサから受信することと、
前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行することと、
前記複数の動作の前記繰り返される実行から生じるデータを、前記ＧＰＵに出力することと
を行うように構成された、デバイス。
【請求項１１】
前記テクスチャユニットは、前記ＧＰＵの前記シェーダプロセッサに、前記複数の動作の前記繰り返される実行から生じる前記データを出力するように構成された、請求項１０に記載のデバイス。
【請求項１２】
前記テクスチャユニットは、
入力ユニットと、
前記複数の動作の前記繰り返される実行の第１の反復中にテクセル値を読み取るように構成された読取りユニットと、
前記テクセル値に基づく値を、前記命令において定義された変数と比較することによって、前記条件が満たされるのか満たされないのかを決定することと、
前記命令において定義された前記条件が満たされるのか満たされないのかの前記決定に基づいて、前記複数の動作の実行の第２の反復が必要とされるかどうかを決定することと
を行うように構成された出力ユニットと
を備え、
ここにおいて、前記複数の動作を繰り返し実行するために、前記出力ユニットは、前記複数の動作の実行の前記第２の反復が必要とされるという前記決定に基づいて、前記テクスチャユニットの前記入力ユニットにフィードバック信号を出力するように構成され、
ここにおいて、データを出力するために、前記出力ユニットは、前記複数の動作の実行の前記第２の反復が必要とされないという前記決定に基づいて、前記複数の動作の前記繰り返される実行から生じる前記データを出力するように構成された、
請求項１０に記載のデバイス。
【請求項１３】
前記テクスチャユニットは、前記複数の動作を実行するために何も追加命令を受け取らずに、前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行するように構成された、請求項１０に記載のデバイス。
【請求項１４】
前記複数の動作がシェーダプログラムの複数の動作を備える、請求項１０に記載のデバイス。
【請求項１５】
前記複数の動作がテクスチャ座標を変更するための複数の動作を備える、請求項１０に記載のデバイス。
【請求項１６】
前記複数の動作は、視差遮蔽マッピング（ＰＯＭ）、スクリーン空間光線追跡（ＳＳＲＴ）、被写界深度（ＤｏＦ）処理、ボリュームレンダリング、あるいは動的高さフィールドを用いた水または地形レンダリングのうちの１つまたは複数のための複数の動作を備える、請求項１０に記載のデバイス。
【請求項１７】
前記テクスチャユニットは、前記条件が満たされるまで、または前記条件が満たされる限り、前記動作を繰り返し実行するように構成された、請求項１０に記載のデバイス。
【請求項１８】
前記テクスチャユニットは、前記複数の動作の前記繰り返される実行の全ての反復が完了した後にのみ、前記複数の動作の前記繰り返される実行から生じる前記データを前記ＧＰＵの前記シェーダプロセッサに出力するように構成された、請求項１０に記載のデバイス。
【請求項１９】
前記デバイスは、
集積回路、
マイクロプロセッサ、または
ワイヤレス通信デバイス
のうちの１つを備える、請求項１０に記載のデバイス。
【請求項２０】
前記ＧＰＵは前記テクスチャユニットを備える、請求項１０に記載のデバイス。
【請求項２１】
データを処理するためのデバイスであって、前記デバイスは、
命令において定義された条件が満たされることに基づいて複数の動作を繰り返し実行することをテクスチャユニットに命令する前記命令を受信するための手段と、
前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行するための手段と、
前記複数の動作の前記繰り返される実行から生じるデータを、グラフィックス処理ユニット（ＧＰＵ）に出力するための手段と
を備える、デバイス。
【請求項２２】
前記複数の動作の前記繰り返される実行の第１の反復中にテクセル値を読み取るための手段と、
前記テクセル値に基づく値を、前記命令において定義された変数と比較することによって、前記条件が満たされるのか満たされないのかを決定するための手段と、
前記命令において定義された前記条件が満たされるのか満たされないのかの前記決定に基づいて、前記複数の動作の実行の第２の反復が必要とされるかどうかを決定するための手段と
をさらに備え、
ここにおいて、前記複数の動作を繰り返し実行するための前記手段は、前記複数の動作の実行の前記第２の反復が必要とされるという前記決定に基づいて、前記テクスチャユニットの出力をフィードバック信号として前記テクスチャユニットの入力に出力するための手段を備え、
ここにおいて、データを出力するための前記手段は、前記複数の動作の実行の前記第２の反復が必要とされないという前記決定に基づいて、前記複数の動作の前記繰り返される実行から生じる前記データを出力するための手段を備える、
請求項２１に記載のデバイス。
【請求項２３】
前記複数の動作を繰り返し実行するための前記手段は、前記複数の動作を実行するために何も追加命令を受け取らずに、前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行するための手段を備える、請求項２１に記載のデバイス。
【請求項２４】
前記複数の動作の前記繰り返される実行から生じる前記データを出力するための前記手段は、前記複数の動作の前記繰り返される実行の全ての反復が完了した後にのみ、前記データをシェーダプロセッサに出力するための手段を備える、請求項２１に記載のデバイス。
【請求項２５】
非一時的コンピュータ可読記憶媒体であって、
命令において定義された条件が満たされることに基づいて複数の動作を繰り返し実行することをテクスチャユニットに命令する前記命令を受信することと、
前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行することと、
前記複数の動作の前記繰り返される実行から生じるデータを、グラフィックス処理ユニット（ＧＰＵ）に出力することとを、
実行されたとき、データを処理するためのデバイスの１つまたは複数のプロセッサに行わせる、複数の命令を記憶している、非一時的コンピュータ可読記憶媒体。
【請求項２６】
前記複数の動作の前記繰り返される実行の第１の反復中にテクセル値を読み取ることと、
前記テクセル値に基づく値を、前記命令において定義された変数と比較することによって、前記条件が満たされるのか満たされないのかを決定することと、
前記命令において定義された前記条件が満たされるのか満たされないのかの前記決定に基づいて、前記複数の動作の実行の第２の反復が必要とされるかどうかを決定することと
を前記１つまたは複数のプロセッサに行わせる複数の命令をさらに備え、
ここにおいて、前記１つまたは複数のプロセッサに前記複数の動作を繰り返し実行させる前記複数の命令は、前記１つまたは複数のプロセッサに、前記複数の動作の実行の前記第２の反復が必要とされるという前記決定に基づいて、前記テクスチャユニットの出力をフィードバック信号として前記テクスチャユニットの入力に出力させる複数の命令を備え、
ここにおいて、前記１つまたは複数のプロセッサにデータを出力させる前記複数の命令は、前記１つまたは複数のプロセッサに、前記複数の動作の実行の前記第２の反復が必要とされないという前記決定に基づいて、前記複数の動作の前記繰り返される実行から生じる前記データを出力させる複数の命令を備える、請求項２５に記載の非一時的コンピュータ可読記憶媒体。
【請求項２７】
前記１つまたは複数のプロセッサに前記複数の動作を繰り返し実行させる前記複数の命令は、前記１つまたは複数のプロセッサに、前記複数の動作．２４を実行するために何も追加命令を受け取らずに、前記命令において定義された前記条件が満たされることまたは満たされないことに基づいて、前記複数の動作を繰り返し実行させる命令を備える、請求項２５に記載の非一時的コンピュータ可読記憶媒体。
【請求項２８】
前記１つまたは複数のプロセッサに前記複数の動作の前記繰り返される実行から生じる前記データを出力させる前記複数の命令は、前記１つまたは複数のプロセッサに、前記複数の動作の前記繰り返される実行の全ての反復が完了した後にのみ、前記データをシェーダプロセッサに出力させる複数の命令を備える、請求項２５に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本開示は、グラフィックス処理システムに関し、より詳細には、テクスチャユニットを利用するグラフィックス処理システムに関する。
【背景技術】
【０００２】
[0002]  コンピューティングデバイスは、しばしば、表示のためのグラフィックスデータのレンダリングを加速するために、グラフィックス処理ユニット（ＧＰＵ）を利用する。そのようなコンピューティングデバイスは、例えば、コンピュータワークステーション、いわゆるスマートフォンなどのモバイルフォン、組込みシステム、パーソナルコンピュータ、タブレットコンピュータ、およびビデオゲームコンソールを含み得る。ＧＰＵは、一般に、グラフィックス処理コマンドを実行するために一緒に動作する複数の処理段を含むグラフィックス処理パイプラインを実行する。ホスト中央処理ユニット（ＣＰＵ）は、１つまたは複数のグラフィックス処理コマンドをＧＰＵに発行することでＧＰＵの動作を制御し得る。
【発明の概要】
【０００３】
[0003]  本開示は、テクスチャユニットへの呼出しを制限するようにグラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサの複数の動作を実施(implement)するためにテクスチャユニットを使用することを意図する。シェーダプロセッサが行うべきテクスチャユニットへの複数の呼出しを含む複数の動作は、代わりに、テクスチャユニットによって行われる。シェーダプロセッサが行うべきこれら動作の各々は、代わりに、テクスチャユニット内のハードウェア構成要素によって行われ得る。このようにして、ＧＰＵは、シェーダプロセッサが行うべき複数の動作を行うためにテクスチャユニットのハードウェアを活用し、テクスチャユニットへの呼出しを制限する。
【０００４】
[0004]  一例において、本開示は、データを処理する例示的な方法であって、命令において定義された条件が満たされることに基づいて複数の動作を繰り返し実行することをテクスチャユニットに命令する１つの命令をテクスチャユニットで受け取ることと、この命令において定義された条件が満たされることまたは満たされないことに基づいてこれら動作をテクスチャユニットで繰り返し実行することと、これら動作の繰り返される実行から生じるデータを、グラフィックス処理ユニット（ＧＰＵ）にテクスチャユニットで出力することとを備える方法について説明する。
【０００５】
[0005]  一例において、本開示は、データを処理するための例示的なデバイスであって、シェーダプロセッサを備えるグラフィックス処理ユニット（ＧＰＵ）と、テクスチャユニットとを備え、このテクスチャユニットは、命令において定義された条件が満たされることに基づいて動作を繰り返し実行することをテクスチャユニットに命令する命令を、ＧＰＵのシェーダプロセッサから受け取ることと、命令において定義された条件が満たされることまたは満たされないことに基づいて動作を繰り返し実行することと、動作の繰り返される実行から生じるデータをＧＰＵに出力することとを行うように構成される、デバイスについて説明する。
【０００６】
[0006]  一例において、本開示は、データを処理するための例示的なデバイスであって、命令において定義された条件が満たされることに基づいて動作を繰り返し実行することをテクスチャユニットに命令する命令を受け取るための手段と、命令において定義された条件が満たされることまたは満たされないことに基づいて動作を繰り返し実行するための手段と、動作の繰り返される実行から生じるデータをグラフィックス処理ユニット（ＧＰＵ）に出力するための手段とを備えるデバイスについて説明する。
【０００７】
[0007]  一例において、本開示は、例示的な非一時的コンピュータ可読記憶媒体であって、実行されたとき、データを処理するためのデバイスの１つまたは複数のプロセッサに、命令において定義された条件が満たされることに基づいて動作を繰り返し実行することをテクスチャユニットに命令する命令を受け取ることと、命令において定義された条件が満たされることまたは満たされないことに基づいて動作を繰り返し実行することと、動作の繰り返される実行から生じるデータをグラフィックス処理ユニット（ＧＰＵ）に出力することとを行わせる複数の命令を記憶している非一時的コンピュータ可読記憶媒体について説明する。
【０００８】
[0008]  本開示の１つまたは複数の例の詳細が添付の図面および以下の説明に記載される。本開示の他の特徴、目的、および利点は、本説明および図面、並びに特許請求の範囲から明らかになるはずである。
【図面の簡単な説明】
【０００９】
【図１】本開示の技法を実施するために使用され得る例示的なコンピューティングデバイスを示すブロック図。
【図２】図１のコンピューティングデバイスのＣＰＵ、ＧＰＵおよびメモリをさらに詳細に示すブロック図。
【図３】図２のテクスチャユニットの一例をさらに詳細に示すブロック図。
【図４】本開示で説明される１つまたは複数の例示的な技法による、データを処理する例示的な方法を示すフローチャート。
【発明を実施するための形態】
【００１０】
[0013]  本開示は複数の動作を行うためにテクスチャユニットを活用することを意図するもので、これら動作はそうでなければグラフィックス処理ユニット（ＧＰＵ）のシェーダプロセッサがこれら動作を行うために複数の呼出しをテクスチャユニットに発行することを要求することになる。様々なグラフィックス処理アルゴリズムに関し、シェーダプロセッサは、テクスチャユニットがテクスチャデータを取り出し、テクスチャデータを処理し、処理されたテクスチャデータ（例えば、テクセル）をシェーダプロセッサに出力することの複数の要求を出力する。
【００１１】
[0014]  テクスチャユニットにアクセスすることをシェーダプロセッサに繰り返し行わせる様々なグラフィックス処理アルゴリズムにおける１つの共通要因は、シェーダプロセッサ上で実行する複数の命令の構造である。例えば、これら命令の構造は、一般に終了条件をもつループと、テクスチャ座標を進める／変更するためのロジックと、これら命令において定義された動作の結果を計算するためのロジックとを含む。
【００１２】
[0015]  本開示で説明される技法において、テクスチャユニットへの繰り返される呼出しを含む複数の命令をシェーダプロセッサに実行させるのでなく、これら命令はテクスチャユニットのハードウェア構成要素によって行われるようにマッピングされ得る。例えば、テクスチャユニットは、テクスチャユニットの出力が入力を受け取るテクスチャユニットの構成要素にフィードバックするフィードバック経路を含み得る。このフィードバックで、テクスチャユニットは、シェーダプロセッサのような別のユニットからテクスチャユニットへの繰り返される呼出しを必要とせずに、ループの反復を実施するように構成され得る。こうして、シェーダプロセッサは、データのセット（例えば、シェーダプロセッサがそれに対して動作を行おうとしたデータ）をテクスチャユニットに出力することをシェーダプロセッサにさせる１つの命令を実行し得、テクスチャユニットは、次いで、ループにおける複数の命令の反復を内部フィードバック経路を使用して行い、最終データ（テクセル）を伴う結果をシェーダプロセッサに１回出力する。従って、シェーダプロセッサは、中間データを伴って複数回出力するのでなく、テクスチャユニットに１回出力することが必要であり、テクスチャユニットに複数回アクセスすることをシェーダプロセッサにさせるのでなく（例えば、中間出力をテクスチャユニットから複数回受け取って、複数の呼出しでテクスチャユニットを起動するのでなく）、データをテクスチャユニットから１回受け取り得る。
【００１３】
[0016]  いくつかの例において、ＧＰＵとテクスチャユニットとは、同じ集積回路内に存在し得るかまたは異なる集積回路内に存在し得る。テクスチャユニットは、命令において定義された条件（例えば、終了条件）の生起に基づいて動作（例えば、ループされた複数の命令）を繰り返し実行することをテクスチャユニットに命令する命令をＧＰＵのシェーダプロセッサから受け取るように構成され得る。それに応じて、テクスチャユニットは、命令において定義された条件が満たされるかまたは満たされなくなるまで、動作を繰り返し実行し、動作の繰り返される実行から生じるデータをＧＰＵに出力し得る。
【００１４】
[0017]  図１は、本開示の技法を実施するために使用され得る例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、ワイヤレス通信デバイス（例えば、携帯電話、セルラー電話、衛星電話、および／または携帯電話ハンドセットなど）、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末（ＰＤＡ）のようなハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、あるいはグラフィカルデータを処理および／または表示する任意の他のタイプのデバイスを備え得る。
【００１５】
[0018]  図１の例に示されるように、コンピューティングデバイス２は、ユーザ入力インターフェース４と、ＣＰＵ６と、メモリコントローラ８と、システムメモリ１０と、グラフィックス処理ユニット（ＧＰＵ）１２と、ローカルメモリ１４と、ディスプレイインターフェース１６と、ディスプレイ１８と、バス２０とを含む。ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２およびディスプレイインターフェース１６は、バス２０を使用して互いと通信し得る。バス２０は、第３世代バス（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバスまたはＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（例えば、アドバンストグラフィックスポートバス、周辺構成要素相互接続（ＰＣＩ）エクスプレスバス、またはアドバンストエクステンシブルインターフェース（ＡＸＩ：Advanced eXentisible Interface）バス）、あるいは別のタイプのバスまたはデバイスの相互接続などの様々なバス構造のいずれかであり得る。図１に示される異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、コンピューティングデバイスの他の構成および／あるいは同じまたは異なる構成要素をもつ他のグラフィックス処理システムが、本開示の技法を実施するために使用され得ることに留意されたい。
【００１６】
[0019]  ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるためにコンピューティングデバイス２に入力を与え得る。ＣＰＵ６上で実行するソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーションまたは別のプログラムを含み得る。ユーザは、ユーザ入力インターフェース４を介してコンピューティングデバイス２に結合されたキーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスのような１つまたは複数の入力デバイス（図示せず）を介して、コンピューティングデバイス２に入力を与え得る。
【００１７】
[0020]  ＣＰＵ６上で実行するソフトウェアアプリケーションは、ディスプレイ１８へのグラフィックスデータのレンダリングを行うことをＣＰＵ６に命令する１つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例において、複数のソフトウェア命令は、例えば、オープングラフィックスライブラリ（ＯｐｅｎＧＬ（登録商標）：Open Graphics Library）アプリケーションプログラミングインターフェース（ＡＰＩ）、オープングラフィックスライブラリ組込みシステムズ（ＯｐｅｎＧＬ  ＥＳ：Open Graphics Library Embedded Systems）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、あるいは任意の他の公開またはプロプライエタリ(proprietary)標準グラフィックスＡＰＩなどのグラフィックスＡＰＩに準拠し得る。複数のグラフィックスレンダリング命令を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングの一部または全部を行わせるために、１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行し得る。いくつかの例において、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブのリスト、例えば、点、線、三角形、四角形、三角形ストリップなどを含み得る。
【００１８】
[0021]  メモリコントローラ８は、システムメモリ１０に入るおよびそれから出るデータの転送を容易にする(facilitate)。例えば、メモリコントローラ８はメモリ読取りおよび書込みコマンドを受け取り、コンピューティングデバイス２内の構成要素にメモリサービスを提供するためにメモリ１０に関してそうしたコマンドをサービスし得る。メモリコントローラ８はシステムメモリ１０に通信可能に結合される。メモリコントローラ８は、ＣＰＵ６およびシステムメモリ１０の両方と別個である処理モジュールとして図１の例示的なコンピューティングデバイス２内に示されるが、他の例では、メモリコントローラ８の機能の一部または全部がＣＰＵ６およびシステムメモリ１０の一方または両方上で実施され得る。
【００１９】
[0022]  システムメモリ１０は、ＣＰＵ６が実行するためにアクセス可能である複数のプログラムモジュールおよび／または複数の命令、並びに／あるいはＣＰＵ６上で実行しているプログラムによる使用のためのデータを記憶し得る。例えば、システムメモリ１０は、ユーザアプリケーションと、アプリケーションに関連するグラフィックスデータとを記憶し得る。システムメモリ１０は、コンピューティングデバイス２の他の構成要素による使用のための情報、および／または他の構成要素によって生成される情報をさらに記憶し得る。例えば、システムメモリ１０は、ＧＰＵ１２のためのデバイスメモリとして働き得、ＧＰＵ１２によってそれに対して演算されるべきデータ、並びにＧＰＵ１２によって行われる演算から生じるデータを記憶し得る。例えば、システムメモリ１０は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。さらに、システムメモリ１０は、ＧＰＵ１２による処理のためのコマンドストリームを記憶し得る。システムメモリ１０は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
【００２０】
[0023]  ＧＰＵ１２は、１つまたは複数のグラフィックスプリミティブをディスプレイ１８にレンダリングするためにグラフィックス演算を行うように構成され得る。従って、ＣＰＵ６上で実行しているソフトウェアアプリケーションのうちの１つがグラフィックス処理を必要とするとき、ＣＰＵ６は、ディスプレイ１８にレンダリングするためのグラフィックスコマンドおよびグラフィックスデータをＧＰＵ１２に与え得る。グラフィックスコマンドは、例えば、描画呼出しなどの描画コマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含み得る。いくつかの例において、ＣＰＵ６は、ＧＰＵ１２によってアクセスされ得る、コマンドおよびグラフィックスデータをメモリ１０に書き込むことによって、コマンドおよびグラフィックスデータをＧＰＵ１２に与え得る。いくつかの例において、ＧＰＵ１２は、ＣＰＵ６上で実行しているアプリケーションのための汎用コンピューティングを行うようにさらに構成され得る。
【００２１】
[0024]  ＧＰＵ１２は、いくつかの事例において、ベクトル演算の、ＣＰＵ６よりも効率的な処理を行う高度並列構造で構築され得る。例えば、ＧＰＵ１２は、複数の頂点またはピクセル上で並列様式で演算するように構成された複数の処理要素を含み得る。ＧＰＵ１２の高度並列特質は、いくつかの事例において、ＧＰＵ１２が、ＣＰＵ６を使用して直接ディスプレイ１８にシーンを描画するよりも速く、グラフィックス画像（例えば、ＧＵＩ、並びに２次元（２Ｄ）および／または３次元（３Ｄ）グラフィックスシーン）をディスプレイ１８上に描画することを可能にし得る。さらに、ＧＰＵ１２の高度並列特質は、ＧＰＵ１２が、ＣＰＵ６よりも速く、汎用コンピューティングアプリケーションのためのいくつかのタイプのベクトルおよび行列演算を処理することを可能にし得る。
【００２２】
[0025]  ＧＰＵ１２は、いくつかの事例において、コンピューティングデバイス２のマザーボードに組み込まれ得る。他の事例において、ＧＰＵ１２は、コンピューティングデバイス２のマザーボードにおけるポートに設置されたグラフィックスカード上に存在し得るか、または場合によっては、コンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる事例において、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。ＧＰＵ１２とＣＰＵ６とは、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積またはディスクリート論理回路など、１つまたは複数のプロセッサを含み得る。
【００２３】
[0026]  ＧＰＵ１２はローカルメモリ１４に直接結合され得る。従って、ＧＰＵ１２は、必ずしもバス２０を使用せずに、ローカルメモリ１４からデータを読み取り、ローカルメモリ１４にデータを書き込み得る。言い換えれば、ＧＰＵ１２は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルに処理し得る。これは、ＧＰＵ１２が、重いバストラフィックを経験し得る、バス２０を介したデータの読取りおよび書込みを行う必要をなくすことによって、ＧＰＵ１２がより効率的な様式で動作することを可能にする。しかしながら、いくつかの事例において、ＧＰＵ１２は、別個のキャッシュを含まないことがあるが、代わりに、バス２０を介してシステムメモリ１０を利用し得る。ローカルメモリ１４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリあるいはストレージデバイスを含み得る。
【００２４】
[0027]  ＣＰＵ６および／またはＧＰＵ１２は、レンダリングされた画像データを、システムメモリ１０内で割り振られたフレームバッファに記憶し得る。ディスプレイインターフェース１６は、フレームバッファからデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ１８を構成し得る。いくつかの例において、ディスプレイインターフェース１６は、フレームバッファから取り出されたデジタル値を、ディスプレイ１８で消費できるアナログ信号に変換するように構成されたデジタルアナログ変換器（ＤＡＣ）を含み得る。他の例において、ディスプレイインターフェース１６は、処理のために、デジタル値をディスプレイ１８に直接受け渡し得る。ディスプレイ１８は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ（ＳＥＤ）、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ１８は、コンピューティングデバイス２内に組み込まれ得る。例えば、ディスプレイ１８は、携帯電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイ１８は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス２に結合されたスタンドアロンデバイスであり得る。例えば、ディスプレイ１８は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００２５】
[0028]  説明されたように、ＣＰＵ６は、グラフィックス処理をＧＰＵ１２にオフロードし得る。ＧＰＵ１２は、次に、グラフィックスデータをレンダリングするために、様々なグラフィックス処理アルゴリズムを行い得る。グラフィックス処理アルゴリズムの例は、視差遮蔽マッピング（ＰＯＭ：parallax occlusion mapping）、スクリーン空間光線追跡（ＳＳＲＴ：screen space ray tracing）、被写界深度（ＤｏＦ：depth of field）処理、ボリュームレンダリング、あるいは動的高さフィールドを用いた水または地形レンダリングを含む。追加のグラフィックス処理アルゴリズムも存在し、上記は、いくつかの例として与えられるにすぎない。
【００２６】
[0029]  例示的なグラフィックス処理アルゴリズムにおけるグラフィックス処理の一部は、テクスチャリングを含む。テクスチャリングは、テクスチャバッファからビットマップを取り出し、ビットマップをグラフィカルオブジェクトの上に重ねる、テクスチャユニットを伴う。いくつかの例において、ＧＰＵ１２はテクスチャユニットを含むが、テクスチャユニットはＧＰＵ１２の外部にあり得る。いくつかの例において、テクスチャユニット、ＧＰＵ１２、およびＣＰＵ６は全て、同じ集積回路（ＩＣ）またはマイクロコントローラの一部であり得る。本開示において、テクスチャユニットは、ＧＰＵ１２の内部にあるものとして説明される。
【００２７】
[0030]  グラフィックス処理を行うために、ＧＰＵ１２のシェーダプロセッサはシェーダプログラムの複数の動作を実行し得る。シェーダプログラムのこれら動作の実行の一部は、テクスチャユニットへの繰り返されるアクセスを含み得る。例えば、シェーダプロセッサによって実施されるグラフィックス処理アルゴリズムは、以下の構造、すなわち反復カウントに対して上限をもつループ、ループにおける終了条件、テクスチャ座標を進める／変更するための単純ロジック、および動作の結果を計算するための単純ロジック、を形成する複数の動作を含み得る。
【００２８】
[0031]  これら動作を行う際に、ループの各反復について、シェーダプロセッサは、データを取り出し、そのデータに対する処理を行い、そのデータをシェーダプロセッサに戻すように出力するためにテクスチャユニットへの要求を出力し得る。これは、テクスチャユニットへの複数の要求を生じ、これは、テクスチャユニットがＧＰＵ１２の外部にある例において、電力と、クロックサイクルと、ＧＰＵ１２との接続線の帯域幅またはバス２０の帯域幅とを消費する。
【００２９】
[0032]  本開示で説明される技法では、ＧＰＵ１２のシェーダプロセッサによって実行されるべきである複数の動作が、代わりに、テクスチャユニットによって実行される。例えば、ＧＰＵ１２のシェーダプロセッサが実行すべきであったこれら動作は、条件が満たされるまで繰り返し実行されるべきであるこれら動作（例えば、反復カウントに対する上限をもつ複数の動作のループ）を含む。テクスチャユニットは、代わりに、シェーダプロセッサによる繰り返される要求の必要なしに、条件が満たされるかまたは満たされなくなるまで、これらの命令を繰り返し実行し得る。例えば、条件は、上限が到達されるまで繰り返す（例えば、Ａ＜Ｂである限り繰り返す）ことであり得る。この場合、テクスチャユニットは、条件が満たされる限り繰り返し実行する。条件は、条件がもはや満たされなくなるまで繰り返す（例えば、Ａ≧Ｂまで繰り返す）ことであり得る。この場合、テクスチャユニットは、条件が満たされない限り繰り返し実行する。
【００３０】
[0033]  例えば、テクスチャユニット（例えば、ＧＰＵ１２内またはＧＰＵ１２外にあるもの）は、命令において定義された条件（例えば、反復カウントの上限に到達することなど）の生起に基づいて複数の動作を繰り返し実行することをテクスチャユニットに命令する命令を受け取り得る。テクスチャユニットは、命令において定義された条件が満たされるかまたは満たされなくなるまで、これら動作を繰り返し実行し得、これら動作の繰り返される実行から生じるデータを出力し得る。
【００３１】
[0034]  一例として、テクスチャユニットは、これら動作の実行の第１の反復中に（例えば、テクスチャバッファからの）テクセル値を読み取り得る。テクスチャユニットは、テクセル値の、命令において定義された変数との比較に基づいて、条件が満たされるのか満たされないのかを決定し、命令において定義された条件が満たされるのか満たされないのかの決定に基づいて、これら動作の実行の第２の反復が必要とされるかどうかを決定し得る。
【００３２】
[0035]  これら動作の繰り返される実行は、動作の実行の第２の反復が必要とされるという決定に基づいて、テクスチャユニットの出力をフィードバック信号としてテクスチャユニットの入力に出力するテクスチャユニットを含む。テクスチャユニットは、これら動作の実行の第２の反復が必要とされないという決定に基づいて、これら動作の繰り返される実行から生じるデータをＧＰＵに出力し得る。
【００３３】
[0036]  このように、シェーダプロセッサがテクスチャユニットへの１つの命令を発行して、テクスチャユニットにこれら動作を繰り返し実行させることが可能であり得ることから、シェーダプロセッサの作業量は、シェーダプロセッサがループにおいてこれら動作を実行しなければならない例と比較して低減され得る。これはまた、ループを形成したこれら動作の全てが、テクスチャユニットへの単一命令として表され得るので、より少ないシェーダコードが、ＧＰＵ１２の命令キャッシュに記憶されることになり得る。
【００３４】
[0037]  電力使用量の減少および処理効率の増加もあり得る。シェーダプロセッサがより少数の動作を実行するので、シェーダプロセッサはより少ない電力を消費し得る。テクスチャユニットの処理ハードウェアユニット（例えば、算術論理ユニット（ＡＬＵ：arithmetic logic unit））は、シェーダプロセッサと比較してより電力効率的であり得、従って、これら動作の実行をテクスチャユニットにシフトすることによって、電力の全体的な低減があり得る。テクスチャユニットの処理ハードウェアユニットはまた、シェーダプロセッサよりも高いスループットを与え、その結果、テクスチャユニットがこれら動作を繰り返し実行する場合よりもこれら動作のより速い処理をもたらし得る（例えば、テクスチャユニットは、シェーダプロセッサからの複数の命令を待つアイドルでなく、シェーダプロセッサに繰り返し出力するクロックサイクルを浪費する必要がない）。
【００３５】
[0038]  シェーダプロセッサが、ループの条件が満たされるまでループのこれら動作を繰り返し実行する例と比較して、シェーダプロセッサの汎用レジスタ（ＧＰＲ：general purpose register）のサイズも低減され得る。ＧＰＲは、シェーダプロセッサが１つの動作の実行から生じるデータを一時的に記憶するために使用するレジスタである。シェーダプロセッサがこれら動作を繰り返し実行すべきである場合、シェーダプロセッサは、各動作について得られたデータをＧＰＲに記憶し、比較的大きいＧＰＲが、実行の各反復から生じるデータを記憶することを必要とすることになる。本開示で説明される例示的な技法があれば、テクスチャユニットは、実行の反復から生じる何らかの中間データを記憶し、シェーダプロセッサのＧＰＲが他の目的のために使用されること、またはＧＰＲのサイズが低減されることを可能にする。
【００３６】
[0039]  図２は、図１のコンピューティングデバイス２のＣＰＵ６、ＧＰＵ１２、およびメモリ１０をさらに詳細に示すブロック図である。図２に示されるように、ＣＰＵ６はＧＰＵ１２およびメモリ１０と通信可能に結合され、ＧＰＵ１２はＣＰＵ６およびメモリ１０と通信可能に結合される。ＧＰＵ１２は、いくつかの例において、マザーボード上でＣＰＵ６と一体化され得る。追加の例において、ＧＰＵ１２は、ＣＰＵ６を含むマザーボードのポートに設置されたグラフィックスカード上に実装され(implemented)得る。さらなる例において、ＧＰＵ１２は、ＣＰＵ６と相互動作するように構成された周辺デバイス内に組み込まれ得る。追加の例において、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じ集積回路またはマイクロプロセッサ上に配置され得る。ＣＰＵ６は、ソフトウェアアプリケーション（Ａｐｐ）２４と、グラフィックスＡＰＩ２６と、ＧＰＵドライバ２８と、オペレーティングシステム３０とを実行するように構成される。
【００３７】
[0040]  ＧＰＵ１２は、コントローラ３２と、テクスチャユニット３４と、シェーダプロセッサ３６と、１つまたは複数の固定機能ユニット３８と、ローカルメモリ１４とを含む。図２において、ローカルメモリ１４およびテクスチャユニット３４は、ＧＰＵ１２内にあるように示されるものの、ローカルメモリ１４およびテクスチャユニット３４はＧＰＵ１２外にあってもよい。
【００３８】
[0041]  ソフトウェアアプリケーション２４は、各々、グラフィックコンテンツが表示されるようにさせる１つまたは複数の命令、または非グラフィックスタスク（例えば、汎用コンピューティングタスク）がＧＰＵ１２上で行われるようにさせる１つまたは複数の命令のうちの少なくとも１つを含み得る。ソフトウェアアプリケーション２４は、複数の命令をグラフィックスＡＰＩ２６に発行し得る。グラフィックスＡＰＩ２６は、ソフトウェアアプリケーション２４から受け取ったこれら命令を、ＧＰＵドライバ２８で消費できるフォーマットに変換するランタイムサービスであり得る。
【００３９】
[0042]  ＧＰＵドライバ２８は、グラフィックスＡＰＩ２６を介して、ソフトウェアアプリケーション２４からこれら命令を受け取り、これら命令をサービスするためにＧＰＵ１２の動作を制御する。例えば、ＧＰＵドライバ２８は、１つまたは複数のコマンドストリームを作り、コマンドストリームをメモリ１０に入れ、コマンドストリームを実行することをＧＰＵ１２に命令し得る。ＧＰＵドライバ２８は、コマンドストリームをメモリ１０に入れ、オペレーティングシステム３０を介して、例えば、１つまたは複数のシステム呼出しを介してＧＰＵ１２と通信し得る。
【００４０】
[0043]  コントローラ３２は、ＧＰＵ１２のハードウェアであり得るか、ＧＰＵ１２上で実行するソフトウェアまたはファームウェアであり得るか、あるいはその両方の組合せである。コントローラ３２は、ＧＰＵ１２の様々な構成要素の複数の動作を制御し得る。例えば、コントローラ３２は、複数の命令およびデータが構成要素に与えられたときに制御し、複数の命令およびデータの受け取りを制御し、ＧＰＵ１２からのデータの出力を制御し得る。
【００４１】
[0044]  シェーダプロセッサ３６および固定機能ユニット３８は一緒に、ＧＰＵ１２がグラフィックス処理をそれを介して行うグラフィックス処理パイプラインを形成するグラフィックス処理段を与える。シェーダプロセッサ３６は、プログラマブルフレキシビリティを与えるように構成され得る。例えば、シェーダプロセッサ３６は、ＣＰＵ６を介してＧＰＵ１２上にダウンロードされた１つまたは複数のシェーダプログラムを実行するように構成され得る。シェーダプログラムは、いくつかの例において、例えば、ＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）、高レベルシェーディング言語（ＨＬＳＬ）、グラフィックスのためのＣ（Ｃｇ）シェーディング言語のような高レベルシェーディング言語で書き込まれたプログラムのコンパイルされたバージョンであり得る。
【００４２】
[0045]  いくつかの例において、シェーダプロセッサ３６は、例えば、単一命令複数データ（ＳＩＭＤ）パイプラインとして、並列に動作するように構成された複数の処理ユニットを含む。シェーダプロセッサ３６は、複数のシェーダプログラム命令を記憶するプログラムメモリと、処理されるべきであるデータおよび得られたデータを記憶する汎用レジスタ（ＧＰＲ）と、実行状態レジスタ、例えば、実行されているプログラムメモリにおける現在の命令またはフェッチされるべき次の命令を示すプログラムカウンタレジスタとを有し得る。シェーダプロセッサ３６上で実行するシェーダプログラムの例は、例えば、頂点シェーダ、ピクセルシェーダ、ジオメトリシェーダ、ハルシェーダ、ドメインシェーダ、コンピュートシェーダ、および／またはユニファイドシェーダを含む。
【００４３】
[0046]  １つまたは複数の固定機能ユニット３８は、いくつかのファンクションを行うために配線接続されたハードウェアを含み得る。固定機能ハードウェアは、１つまたは複数の制御信号を介して、例えば、異なるファンクションを行うように構成可能であり得るが、１つまたは複数の固定機能ユニット３８の固定機能ハードウェアは、一般に、ユーザによってコンパイルされたプログラムを受け取ることが可能であるプログラムメモリを含まない。いくつかの例において、１つまたは複数の固定機能ユニット３８は、例えば、深度テスト、シザーテスト、アルファブレンディングのようなラスタ動作を行う、例えば、処理ユニットを含む。
【００４４】
[0047]  ＧＰＵ１２はまた、ＧＰＵ１２のうちの１つのハードウェアユニットであってテクスチャリングアルゴリズムにおいて使用されるテクスチャユニット３４を含む。テクスチャリングは、システムメモリ１０の一部であり得るテクスチャバッファからビットマップを取り出すことと、そのビットマップを処理することと、この処理されたビットマップをグラフィカルオブジェクトの上に置くこととを含み得る。ビットマップは、シェーダプロセッサ３６または１つまたは複数の固定機能ユニット３８が、グラフィカルオブジェクトの上に置くことができるような、テクスチャユニット３４が処理する２次元画像と見なされ得る。ビットマップのピクセルはテクセルと呼ばれ得、テクスチャユニット３４がシェーダプロセッサ３６への出力のために生成するデータはテクセルデータと呼ばれ得る。
【００４５】
[0048]  単純な例として、ビットマップは、世界地図の平坦化された２次元画像であり得る。テクスチャユニット３４は、世界地図のこの２次元画像を処理し得、（例えば、シェーダプロセッサ３６および／または固定機能ユニット３８を介した）ＧＰＵ１２は、この画像をグラフィカルな地球を形成する球状グラフィカルオブジェクトの上に置き得る。
【００４６】
[0049]  グラフィカルな地球を形成するためにテクスチャリングを使用することは一例であるが、テクスチャリングの様々な他の例があり得る。テクスチャリングアルゴリズムのいくつかの例は、視差遮蔽マッピング（ＰＯＭ）、スクリーン空間光線追跡（ＳＳＲＴ）、被写界深度（ＤｏＦ）、ボリュームレンダリング、および動的高さフィールドを用いた水／地形レンダリングを含む。本開示で説明される例は、これらのテクスチャリングアルゴリズム、これらのテクスチャリングアルゴリズムのサブセット、これらの例の他のテクスチャリングアルゴリズム、または上記の任意の組合せに適用可能である。
【００４７】
[0050]  テクスチャリングを行うために、アプリケーション２４は、グラフィックスＡＰＩ２６への命令を発行し、次に、ＧＰＵドライバ２８への命令を発行し得る。ＧＰＵドライバ２８は、データの処理を行うことをテクスチャユニット３４に命令するテクスチャユニット３４への呼出しを含む複数の動作を実行するために複数の命令をシェーダプロセッサ３６に発行し得る。いくつかの例において、テクスチャリングを行うために、シェーダプロセッサ３６は、満たされるべき条件（例えば、ループの反復カウントに対する限界が満たされるまでループが続く）を有するループされたファンクション(looped function) （例えば、「ｗｈｉｌｅ」ループまたは「ｆｏｒ」ループなど）を実行し得る。各反復中に、シェーダプロセッサ３６は、テクスチャユニット３４への呼出しを出力し、テクスチャユニット３４からデータを受け取り得る。
【００４８】
[0051]  一例として、ループされたファンクションの構造は、以下の通りであり得る。
【００４９】
【数１】
2019509555.tif 000003
【００５０】
[0052]  ループされたファンクションをさらに示すために、以下は、シェーダプロセッサ３６がＰＯＭレンダリングのために実行する複数の動作の一例である。
【００５１】
【数２】
2019509555.tif 000004
【００５２】
[0053]  上記の例において、シェーダプロセッサ３６が実行するシェーダプログラムは、「ｒｅａｄ＿ｉｍａｇｅｆ」ファンクションを介して１つの動作を実行することをシェーダプロセッサ３６にさせる。「ｒｅａｄ＿ｉｍａｇｅｆ」ファンクションは、ロケーションｔｅｘ＿ｔｅｘＯｆｆｓｅｔにおいてｈｅｉｇｈｔｍａｐテクスチャをサンプリングするために使用され、ｔｅｘＯｆｆｓｅｔ＋＝ｄＴｅｘはテクスチャ座標を変更する。わかるように、シェーダプロセッサ３６は、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔが高さに等しくなるという条件が満たされるまで、「ｒｅａｄ＿ｉｍａｇｅｆ」ファンクションを繰り返し実行する。各実行中に、テクセル値が読み取られ（例えば、ｈｅｉｇｈｔｍａｐ値）、変数（例えば、高さ）に割り当てられる。条件が満たされるかどうかは、テクセル値の、変数との比較（例えば、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔが高さよりも大きいかどうかを決定するために、高さは、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔと比較される）に基づく。
【００５３】
[0054]  ＰＯＭレンダリングのための複数の動作を行うために、シェーダプロセッサ３６は、テクスチャユニット３４への要求を出力し（例えば、ｒｅａｄ＿ｉｍａｇｅｆの動作を実行することをテクスチャユニット３４に命令する）、次に、ＧＰＲに記憶するためのテクセルデータを受け取り得る。シェーダプロセッサ３６は、上記のコードにおいて複数の追加動作を行い、条件が満たされるかどうかを決定し得る。条件がまだ満たされている場合、シェーダプロセッサ３６は、テクスチャユニット３４への要求を繰り返し、次に、ＧＰＲに記憶するためのテクセルデータを受け取り、条件が満たされるかどうかに基づいてこれらのステップを繰り返し続け得る。
【００５４】
[0055]  いくつかの例において、シェーダプロセッサ３６は、条件が満たされるまで複数の動作にわたってループ（例えば、上限が到達されるまでループ）し得るか、または条件が満たされる限り（例えば、第１の値が第２の値未満である限り）これら動作にわたってループし得る。これらの例において、シェーダプロセッサ３６は、条件が、満たされること（例えば、条件が満たされる限り）、または満たされなくなること（例えば、条件が満たされるまで）に基づいて、これら動作にわたってループし得る。
【００５５】
[0056]  条件が満たされることは、「ｗｈｉｌｅループ」の一部であり得、条件が満たされないことは、「ｄｏループ」の一部であり得る。例えば、条件は、Ａ＜Ｂである間、複数の動作の１つのセットを行う、であり得る。この場合、テクスチャユニット３４は、条件が満たされることに基づいて、これら動作を繰り返し実行し得る（例えば、ＡがＢ未満である場合、テクスチャユニット３４はこれら動作のさらなる反復を実行する）。別の例として、条件は、Ａ≧Ｂまで繰り返すことであり得る。この場合、テクスチャユニット３４は、条件が満たされないことに基づいて、これら動作を繰り返し実行し得る（例えば、ＡがＢに等しくないかまたはそれよりも大きくない場合、テクスチャユニット３４はこれら動作のさらなる反復を実行する）。本開示で説明される技法は、両方の場合（例えば、どのようにループが定義されるかというファンクションである、条件が満たされることに基づいて繰り返し実行することと、条件が満たされないことに基づいて繰り返し実行することと）に適用可能である。容易さのために、本説明は、テクスチャユニット３４が、条件が満たされることに基づいて繰り返し実行する場合を指し得るが、そのような説明は、テクスチャユニット３４が、条件が満たされないことに基づいて繰り返し実行する場合に技法が適用可能でないことを意味すると解釈されるべきでない。
【００５６】
[0057]  シェーダプロセッサ３６による、テクスチャユニット３４への繰り返される呼出しは、シェーダプロセッサ３６の作業量を増加させ、ループが実行されている間、他の目的のために利用不可能である比較的大きいＧＰＲをシェーダプロセッサ３６が含むことを必要とし、並びにループの複数の動作の全てを記憶するためにローカルメモリ１４においてより大きい命令キャッシュを使用し得る。本開示で説明される技法では、シェーダプロセッサ３６が、テクスチャユニット３４へのアクセスを伴うこれら動作を繰り返し実行するのでなく、テクスチャユニット３４がシェーダプロセッサ３６からのアクセスに応答してこれら動作を繰り返し実行し、シェーダプロセッサ３６がテクスチャユニット３４に繰り返しアクセスする必要がないように構成され得る。
【００５７】
[0058]  例えば、テクスチャユニット３４は、シェーダプロセッサ３６による単一のアクセスに応答して、複数の動作を繰り返し実行するように構成され得る。そのような複数の動作のうちの少なくともいくつかは、従来、シェーダプロセッサ３６による複数の多重アクセスの各々に応答して行われること、例えば、１つのアクセスに応答した１つの動作になる。対照的に、本開示の様々な例によれば、テクスチャユニット３４は、シェーダプロセッサ３６による、テクスチャユニット３４への所与のアクセスに応答して、複数の動作(multiple operations)を実行し得る。
【００５８】
[0059]  シェーダプロセッサ３６によるテクスチャユニット３４へのアクセスの数を低減して複数の動作の１つのセットを遂行することによって、シェーダプロセッサ３６の作業量が低減され得る。さらに、いくつかの場合に、テクスチャユニット３４は、条件テスト（例えば、条件検査）、ループにおける数学演算、および他のそのようなファンクションをより高いスループットで行い、シェーダプロセッサ３６よりも少ない電力を利用することが可能であり得る。
【００５９】
[0060]  例えば、ＰＯＭレンダリングの例示的なシェーダコード（例えば、シェーダプログラムの複数の動作）は、シェーダプロセッサ３６がテクスチャユニット３４に出力する１つの単一命令（例えば、シェーダプロセッサ３６がテクスチャユニット３４にアクセスするという１つのインスタンス）であり得る。一例として、シェーダプロセッサ３６がテクスチャユニット３４に出力し得る命令は、以下の通りであり得る。
【００６０】
【数３】
2019509555.tif 000005
【００６１】
[0061]  シェーダプロセッサ３６がテクスチャユニット３４に出力する命令中に、シェーダプロセッサ３６は、テクスチャユニット３４が行うべきである複数の動作の変数（例えば、ｈｅｉｇｈｔＭａｐ、ｔｅｘ、ｄＴｅｘ、ｌａｙｅｒＨｅｉｇｈｔ）、並びに条件の定義を含める。次に、テクスチャユニット３４は、シェーダプロセッサ３６から受け取られた命令において定義された条件が満たされることに基づいて、これら動作を繰り返し実行し得る。
【００６２】
[0062]  テクスチャユニット３４がこれら動作を繰り返し実行する場合、テクスチャユニット３４は、単一のファンクション呼出しが、複数の動作の特定セットを行うことをテクスチャユニット３４に命令するものであると認識するように構成される必要があり得る。例えば、テクスチャユニット３４の設計中に、テクスチャユニット３４は、テクスチャユニット３４が特定の名前を有するファンクションを受け取るか、あるいは複数の変数の特定セットまたは複数の変数の順序を有するファンクションを受け取った場合、テクスチャユニット３４は複数の動作の特定セットを繰り返し実行すべきであるように、設計され得る。一例として、テクスチャユニット３４がｔｅｘｔｕｒｅＬｏｏｐファンクションを含む命令を受け取った場合、テクスチャユニット３４は、テクスチャユニット３４が、シェーダプロセッサ３６によって実行されるものとして上記で説明されたもののような複数の動作を繰り返し実行すべきであると決定し得る。テクスチャユニット３４が異なるファンクション（例えば、ＳＳＲＴのためのファンクション）を含む命令を受け取った場合、テクスチャユニット３４は、通常ならば、シェーダプロセッサ３６によって実行されるであろう複数の動作を、テクスチャユニット３４が繰り返し実行すべきであると決定し得る。
【００６３】
[0063]  テクスチャユニット３４は、異なるタイプのテクスチャリングのための複数の動作を繰り返し実行するように予め構成され得、より多くのテクスチャリングアルゴリズムが開発されるにつれて、テクスチャユニット３４は、これらのテクスチャリングアルゴリズムのための複数の動作も繰り返し実行するように構成され得る。より一般的には、例はテクスチャリングアルゴリズムのためのものであるとして説明されるが、本開示で説明される技法はそのように限定されない。例えば、本開示で説明される技法は、複数のループ動作がテクスチャリング目的のために使用されていない場合でも、テクスチャユニット３４へのアクセスを必要とするこれらループ動作が使用される、他の場合に拡張され得る。このようにして、テクスチャユニット３４は、プログラム可能なテクスチャ処理ユニットにより厳密に匹敵し得る様式で構成され得る。
【００６４】
[0064]  ＧＰＵ１２のための開発者ガイドは、テクスチャユニット３４が、どのループされた複数の動作を行うように構成されたかを示す情報と、これら動作をテクスチャユニット３４に行わせるためのファンクション呼出しのための命令とを含み得る。テクスチャ座標を変更するために使用されるシェーダプログラムの開発中に、開発者は、ループされた複数の動作でなく、ファンクション呼出しのための命令をシェーダプログラムのコードに含め得る。
【００６５】
[0065]  別の例として、開発者が、ループされたこれら動作を実行するためにテクスチャユニット３４の能力を活用することに依拠するのでなく、シェーダプログラムをコンパイルする、ＣＰＵ６上で実行するコンパイラが、ループされたこれら動作を、テクスチャユニット３４への特定のファンクション呼出しを含む単一命令にコンパイルし得る。代替的にまたは追加として、ＧＰＵドライバ２８またはＧＰＵドライバ２８のためのラッパーは、シェーダプログラムのコードの高水準言語を読み取り、テクスチャユニット３４が実行するように構成された特定のループされた複数の動作を含むコード中の場所を決定するように構成され得る。ＧＰＵドライバ２８またはＧＰＵドライバ２８のためのラッパーは、ループされたこれら動作をテクスチャユニット３４に実行させるための特定のファンクション呼出しをもつ単一命令を含めるためにシェーダプログラムのコードを変更し得る。
【００６６】
[0066]  従って、テクスチャユニット３４は、命令において定義された条件が満たされること（または満たされないこと）に基づいて複数の動作を繰り返し実行することをテクスチャユニット３４に命令する、シェーダプロセッサ３６によって出力された命令を受け取るように構成され得る。これら動作は、シェーダプログラムの複数の動作であり、テクスチャ座標を変更するための複数の動作を含み得る。
【００６７】
[0067]  テクスチャユニット３４は、この命令において定義された条件が満たされることまたは満たされないことに基づいて（例えば、条件が満たされる限り、または条件が満たされるまで）、複数の動作を繰り返し実行し、これら動作を実行するために何も追加命令をシェーダプロセッサ３６から受け取らずに繰り返し実行し得る。このようにして、シェーダプロセッサ３６の作業量、並びにシェーダプロセッサ３６とテクスチャユニット３４との間の対話の頻度が低減され得る。
【００６８】
[0068]  テクスチャユニット３４は、これら動作の繰り返される実行から生じるデータを出力し得る。例えば、テクスチャユニット３４は、これら動作の繰り返される実行の全ての反復が完了した後にのみ、データをシェーダプロセッサ３６に出力し得る。言い換えれば、テクスチャユニット３４は、ループが完了するまで、繰り返される実行から生じるデータを出力しないことがある。従って、テクスチャユニット３４がシェーダプロセッサ３６に出力する必要がある回数も制限され得る。しかしながら、いくつかの例において、テクスチャユニット３４は、周期的にまたは１つの反復の終わりにおいて、実行から生じるデータをシェーダプロセッサ３６に出力し得る。従って、繰り返される実行から生じるデータの出力の例としては、全ての反復が完了した後の最終データ、または繰り返される実行中の周期的なものを含む。
【００６９】
[0069]  図３は、図２のテクスチャユニットの一例をさらに詳細に示すブロック図である。図３において、シェーダプロセッサ３６は、命令において定義された条件が満たされることまたは満たされないことに基づいて複数の動作を繰り返し実行することをテクスチャユニット３４に命令する１つの命令を、テクスチャユニット３４に出力し得る。例えば、シェーダプロセッサ３６がテクスチャユニット３４に出力する命令は、テクスチャユニット３４がそれについて動作する複数の変数と、ループされたこれら動作がいつ完了するかを定義する条件とを含む。
【００７０】
[0070]  図示のように、テクスチャユニット３４は、入力ユニット４０と、（テクスチャユニット３４のローカルキャッシュまたはローカルメモリ１４の一部であり得る）キャッシュ４２と、フォーマッティングユニット４４と、フィルタユニット４６と、カラーフォーマットユニット４８と、出力ユニット５０とを含む。例示的なテクスチャユニット３４において、出力ユニット５０と入力ユニット４０とは、フィードバック信号５２を介して互いに接続される。より詳細に説明されるように、フィードバック信号５２は、条件が満たされるのか満たされないのかを決定するための機構を与える。
【００７１】
[0071]  図３に示されるテクスチャユニット３４のユニットは、理解を容易にするために示される。異なるタイプのテクスチャユニット３４は、図示されるものに対して多かったり、少なかったり、または異なったりするユニットを含み得、構成要素間の相互接続は必ずしも図示のようである必要があるとは限らない。本開示で説明される技法は、テクスチャユニット３４のそのような例にも適用可能である。
【００７２】
[0072]  （例えば、テクスチャユニット３４が、シェーダプロセッサ３６によって一般に行われる複数の動作を行うために再利用されない）通常動作において、入力ユニット４０は、アドレス指定目的のために使用され得る。入力ユニット４０は、（ｕ，ｖ）座標をメモリアドレスに変換し得る。キャッシュ４２は、入力ユニット４０によってアドレス指定された情報を記憶し得る。フォーマッティングユニット４４は、テクスチャリングアルゴリズムによって定義されるように、ビットマップに対して様々なフォーマッティングを行い得る。フィルタユニット４６は、双線形フィルタ処理／補間を行い得る。カラーフォーマットユニット４８は、ビットマップの色をフォーマットし得る。出力ユニット５０は、カラーフォーマットユニット４８からの出力を受け取り、テクセルデータを出力するためのシェーダプロセッサ３６に対する出力インターフェースである。
【００７３】
[0073]  但し、本開示で説明される例示的な技法において、これら様々なユニットは、シェーダプログラムの複数の動作を繰り返し実行に再利用され得る。例えば、上記で説明されたように、ループされたこれら動作の構造は以下の通りであり得る。
【００７４】
【数４】
2019509555.tif 000006
【００７５】
[0074]  いくつかの例において、入力ユニット４０は、初期化およびｔｅｘＯｆｆｓｅｔ動作を行うように構成され得る。フィルタユニット４６は、条件の動作を行うように構成され得る。カラーフォーマットユニット４８は、ｌｏｏｐＢｏｄｙの動作を行うように構成され得る。出力ユニット５０は、条件が満たされるかどうかを決定するように構成され得る。
【００７６】
[0075]  例えば、出力ユニット５０は、命令において定義された条件が満たされるのか満たされないのかに基づいて、複数の動作の実行の反復が必要とされるかどうかを決定するように構成され得る。ｗｈｉｌｅループの例において、出力ユニット５０は、満たされるべき条件が依然として真であるかどうかを決定し得る。満たされるべき条件が依然として真である場合、出力ユニット５０は、これら動作の実行の反復（すなわち、ループにわたるさらなるパス）が必要とされると決定し得る。この場合、これら動作を繰り返し実行するために、出力ユニット５０は、これら動作の実行の反復が必要とされるという決定に基づいて、テクスチャユニット３４から、入力ユニット４０にフィードバック信号５２を出力（例えば、ループの１つの反復から生じるデータを出力）するように構成される。満たされるべき条件が偽である場合、出力ユニット５０は、これら動作の実行の反復がもはや必要とされない（すなわち、ループが完了した）と決定し得る。この場合、出力ユニット５０は、これら動作の実行の反復が必要とされないという決定に基づいて、これら動作の繰り返される実行から生じるデータを出力する。いくつかの例において、入力ユニット４０は、フィードバック信号５２に、シェーダプロセッサ３６からのどの出力よりも高い優先度を与えるように構成され得る。
【００７７】
[0076]  いくつかの例において、ループの実行の各反復中に、テクスチャユニット３４はテクセル値を読み取り得る。例えば、入力ユニット４０またはフォーマッティングユニット４４は、（例えば、ローカルメモリ１４または可能なシステムメモリ１０内にある）テクスチャバッファからの、またはキャッシュ４２からのテクセル値を読み取るように構成され得、各反復中にテクセル値を読み取り得る。出力ユニット５０は、反復のさらなるラウンドが必要とされるかどうかを決定するために、この読み取られたテクセル値（または読み取られたテクセル値の処理されたバージョン）を、命令において定義された変数と比較し得る。これらの例において、読み取られたテクセル値は、命令において定義された変数との比較に基づいて、実行のより多くの反復が必要とされるかどうかを制御する。
【００７８】
[0077]  例えば、読取りユニット（例えば、入力ユニット４０および／またはフォーマッティングユニット４４、あるいは場合によってはテクスチャユニット３４の何らかの他のユニット）は、複数の動作の実行の第１の反復中にテクセル値を読み取り得る。出力ユニット５０は、テクセル値に基づく値（例えば、テクセル値自体またはテクセル値を処理することから決定された値）と、命令において定義された変数との比較に基づいて、条件が満たされるかどうかを決定し得る。出力ユニット５０は、命令において定義された条件が満たされるかどうかの決定に基づいて、これら動作の実行の第２の反復が必要とされるかどうかを決定し得る。
【００７９】
[0078]  一例において、これら動作を繰り返し実行するために、出力ユニット５０は、これら動作の実行の第２の反復が必要とされるという決定に基づいて、入力ユニット４０にフィードバック信号を出力し得る。別の例において、出力ユニット５０は、これら動作の実行の第２の反復が必要とされないという決定に基づいて、これら動作の繰り返される実行から生じるデータを出力し得る。
【００８０】
[0079]  一例として、上記のＰＯＭアルゴリズムの場合、ｗｈｉｌｅループの条件はｗｈｉｌｅ（ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔ＞高さ）であり、ｌｏｏｐＢｏｄｙは高さ＝ｒｅａｄ＿ｉｍａｇｅｆ（ｈｅｉｇｈｔＭａｐ．ｔｅｘ＋ｔｅｘＯｆｆｓｅｔ）であった。この例では、読取りユニット（例えば、２つの非限定的な例として、入力ユニット４０またはフォーマッティングユニット４４）が、これら動作の第１の実行中にテクセル値（例えば、ｈｅｉｇｈｔＭａｐ．ｔｅｘ＋ｔｅｘＯｆｆｓｅｔにおいて記憶された値）を読み取り得る。
【００８１】
[0080]  ｗｈｉｌｅループのこれら動作の実行の１つの反復の後に、出力ユニット５０は、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔが依然として高さよりも大きいかどうかを決定し得る。例えば、出力ユニット５０は、テクセル値に基づく値（この場合、高さの値、テクセル値自体）と、命令において定義された変数（例えば、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔ）との比較に基づいて、条件が満たされるかどうかを決定し得る。出力ユニット５０は、命令において定義された条件が満たされるかどうかの決定に基づいて、これら動作の実行の第２の反復が必要とされるかどうかを決定し得る。
【００８２】
[0081]  例えば、真である（例えば、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔが依然として高さよりも大きい）場合、出力ユニット５０は、前に計算されたような高さの値を、フィードバック信号５２として入力ユニット４０に出力し得、従って、テクスチャユニット３４のユニットはこれら動作の反復を実行する。従って、これら動作を繰り返し実行するために、出力ユニット５０は、これら動作の実行の第２の反復が必要とされるという決定に基づいて、入力ユニット４０にフィードバック信号５２を出力するように構成され得る。この処理は、条件がもはや真でなくなるまで繰り返す。
【００８３】
[0082]  偽である（例えば、ｃｕｒｒｅｎｔＬａｙｅｒＨｅｉｇｈｔがもはや高さよりも大きくない）場合、出力ユニット５０は、高さの最終値を、これら動作の繰り返される実行を介して決定されたものとして、シェーダプロセッサ３６に出力し得る。従って、出力ユニット５０は、これら動作の実行の第２の反復が必要とされないという決定に基づいて、これら動作の繰り返される実行から生じるデータを出力し得る。
【００８４】
[0083]  この例において、第１の反復および第２の反復は、理解を支援する様式として使用される。複数の反復があり得、各反復について、出力ユニット５０は、読み取られたテクセル値に基づく値（例えば、テクセル値自体または処理されたテクセル値）と、命令において定義された変数との間の比較に基づいて、入力ユニット４０にフィードバック信号５２を出力し得る。さらなる反復が必要とされる場合、出力ユニット５０は、入力ユニット４０にフィードバック信号５２を出力し得、さらなる反復が必要とされない場合、出力ユニット５０はＧＰＵ１２に出力し得る。
【００８５】
[0084]  上記は、ＰＯＭを使用する一例を与えた。以下は、ＰＯＭを使用することの別の例を含む、いくつかの追加の例示的な使用を与える。さらに、ＰＯＭの上記の例は、テクスチャユニット３４のどのユニットがどの複数の動作を行うかについての一例を与えた。しかしながら、本開示で説明される技法はそのように限定されず、テクスチャユニット３４のユニットは、上記で与えられたＰＯＭの例とは異なる複数の動作を行い得る。いくつかの例において、これら動作は、テクスチャ座標（例えば、ｔｅｘＯｆｆｓｅｔ）を変更するための複数の動作を含む。また、本開示で説明される技法は、テクスチャリングに限定されると見なされるべきでなく、光線追跡および他の例など、他の目的のために使用され得る。いくつかの例において、出力ユニット５０は、これら動作の実行の全ての反復の完了後のみでなく、周期的にシェーダプロセッサ３６にデータを出力し得る。
【００８６】
[0085]  ＰＯＭの別の例として、ループ構造において、初期化動作はｃｕｒｒＨｅｉｇｈｔ＝１であり、条件は（ｃｕｒｒＨｅｉｇｈｔ＞高さ、およびｃｕｒｒＨｅｉｇｈｔ＞０）であり、ｔｅｘＯｆｆｓｅｔ動作はｔｅｘＣｏｏｒｄ＋＝ｄＴｅｘであり、ｌｏｏｐＢｏｄｙはｃｕｒｒＨｅｉｇｈｔ−＝ｌａｙｅｒＨｅｉｇｈｔである。この例において、入力ユニット４０は、ｃｕｒｒＨｅｉｇｈｔ＝１を設定し、ｔｅｘＣｏｏｒｄ＋＝ｄＴｅｘの動作を行い得る。フォーマッティングユニット４４は、ｃｕｒｒＨｅｉｇｈｔ＞高さの条件が満たされるかどうかに基づいて、真値または偽値を割り当て得る。フィルタユニット４６は、ｃｕｒｒＨｅｉｇｈｔ−＝ｌａｙｅｒＨｅｉｇｈｔの動作を行い得る。
【００８７】
[0086]  出力ユニット５０は、命令において定義された条件が満たされるかどうかに基づいて（例えば、フォーマッティングユニット４４によって行われた真または偽の決定に基づいて）、これら動作の実行の反復が必要とされるかどうかを決定し得る。この例において、これら動作を繰り返し実行するために、出力ユニット５０は、これら動作の実行の反復が必要とされるという決定に基づいて、テクスチャユニット３４から、入力ユニット４０に（例えば、これら動作の１つの反復からのデータ）フィードバック信号５２を出力する。場合によっては、データを出力するために、出力ユニット５０は、これら動作の実行の反復が必要とされないという決定に基づいて、これら動作の繰り返される実行から生じるデータを出力する。各場合において、ループのさらなる反復が必要とされるかどうかは、テクセル値（またはテクセル値から決定された値）と命令において定義された変数との比較に基づき得る。
【００８８】
[0087]  スクリーン空間光線追跡（ＳＳＲＴ）の一例として、初期化動作がないことがある。条件は（Ｐ．ｘ＊ｓｔｅｐＤｉｒ≦ｅｎｄＰおよびｓｔｅｐＣｏｕｎｔ＞ｍａｘＳｔｅｐｓ）である。ｔｅｘＯｆｆｓｅｔ動作は、（Ｐ，Ｑ．ｚ，ｋ）＋＝（ｄＰ，ｄＱ．ｚ，ｄＫ）である。ｌｏｏｐＢｏｄｙ動作は、ｒａｙＺｍａｘ＝（ｄＱ．ｚ＊０．５＋Ｑ．ｚ）／（ｄＫ＊０．５＋ｋ）である。上記と同様に、この例において、入力ユニット４０は、（Ｐ，Ｑ．ｚ，ｋ）＋＝（ｄＰ，ｄＱ．ｚ，ｄＫ）の動作を行い得る。フォーマッティングユニット４４は、Ｐ．ｘ＊ｓｔｅｐＤｉｒ≦ｅｎｄＰおよびｓｔｅｐＣｏｕｎｔ＞ｍａｘＳｔｅｐｓの条件が満たされるかどうかに基づいて、真値または偽値を割り当て得る。フィルタユニット４６は、ｒａｙＺｍａｘ＝（ｄＱ．ｚ＊０．５＋Ｑ．ｚ）／（ｄＫ＊０．５＋ｋ）の動作を行い得る。
【００８９】
[0088]  出力ユニット５０は、命令において定義された条件が満たされるかどうかに基づいて、複数の動作の実行の反復が必要とされるかどうかを決定し得る。真である場合、出力ユニット５０は、さらなる実行反復のために、入力ユニット４０にフィードバック信号５２を出力する。偽である場合、出力ユニット５０は、シェーダプロセッサ３６に、テクスチャユニット３４による繰り返される実行から生じる最終データを出力する。
【００９０】
[0089]  本開示で説明される例示的な技法は、ツリートラバーサルアルゴリズムにも適用可能であり得る。例えば、光線追跡のためのバウンディングボリューム階層（ＢＶＨ：bounding volume hierarchy）ツリートラバーサルにおいて、テクスチャユニット３４は、レイ−ボックス交差テストのために、およびループにおける複数の動作の多くの実行反復を使用してツリーをトラバースするように構成され得る。クアッドツリートラバーサル（例えば、スクリーン空間光線追跡、被写界深度、ボリュームレンダリング、ビュー合成など）の場合、開発者は、深度バッファの上にクアッドツリーを構築し得る。ツリーをトラバースするために、テクスチャユニット３４は、レイ−ボックス交差テストおよびレイ−平面交差テストに加えて複数のループ動作を実行するように構成され得る。レイ−平面交差テストは、簡略化されたレイ−ボックス交差テストである。
【００９１】
[0090]  図４は、本開示で説明される１つまたは複数の例示的な技法による、データを処理する例示的な方法を示すフローチャートである。テクスチャユニット３４は、命令において定義された条件が満たされることに基づいて複数の動作を繰り返し実行することをテクスチャユニット３４に命令する、ＧＰＵ１２のシェーダプロセッサ３６からの命令を受け取る（５４）。これら動作は、シェーダプログラムの複数の動作と、テクスチャ座標を変更するための複数の動作とであり得る。これら動作の例は、ＰＯＭ、ＳＳＲＴ、ＤｏＦ処理、ボリュームレンダリング、あるいは動的高さフィールドを用いた水または地形レンダリングを含む。
【００９２】
[0091]  テクスチャユニット３４は、命令において定義された条件が満たされることまたは満たされないことに基づいて、これら動作を繰り返し実行する（５６）。例えば、テクスチャユニット３４は、条件が満たされるまで複数の動作を繰り返し実行する（例えば、条件が満たされない場合、繰り返し実行する）、または条件が満たされる限り複数の動作を繰り返し実行する（例えば、条件が満たされる場合、繰り返し実行する）。また、テクスチャユニット３４は、複数の動作を実行するために何も追加命令を受け取らずに、命令において定義された条件が満たされることまたは満たされることに基づいて、複数の動作を実行する。
【００９３】
[0092]  テクスチャユニット３４は、シェーダプロセッサ３６にこれら動作の繰り返される実行から生じるデータを出力する（５８）。一例において、テクスチャユニット３４は、これら動作の繰り返される実行の全ての反復が完了した後にのみ、データをシェーダプロセッサ３６に出力する。
【００９４】
[0093]  いくつかの例において、テクスチャユニット３４の出力ユニット５０は、命令において定義された条件が満たされるのか満たされないのかに基づいて、これら動作の実行の反復が必要とされるかどうかを決定するように構成され得る。出力ユニット５０は、これら動作の実行の反復が必要とされるという決定に基づいて、テクスチャユニット３４から、入力ユニット４０にフィードバック信号５２を出力するように構成され得る。場合によっては、出力ユニット５０は、これら動作の実行の反復が必要とされないという決定に基づいて、これら動作の繰り返される実行から生じるデータを出力するように構成され得る。いくつかの例において、さらなる反復を実行すべきかどうかを決定する際に、出力ユニット５０は、読み取られたテクセル値またはテクセル値に基づく値を、命令において定義された変数と比較し得る。
【００９５】
[0094]  本開示で説明された技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェアまたはそれらの任意の組合せで実施され得る。例えば、説明された技法の様々な態様は、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路、並びにそのような構成要素の任意の組合せを含む、１つまたは複数のプロセッサ内で実施され得る。「プロセッサ」または「処理回路」という用語は、概して、単独のまたは他の論理回路と組み合わせられた上記の論理回路のいずれか、あるいは処理を行う個別ハードウェアのような任意の他の等価な回路を指し得る。
【００９６】
[0095]  そのようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明された複数の様々な動作および機能をサポートするために、同じデバイス内にまたは別個のデバイス内で実施され得る。さらに、説明されたユニット、モジュールまたは構成要素のいずれも、一緒に、または個別であるが相互動作可能な論理デバイスとして別々に実施され得る。モジュールまたはユニットとしての異なる特徴の記述は、異なる機能的態様を強調するものであり、そのようなモジュールまたはユニットが、別個のハードウェアまたはソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。むしろ、１つまたは複数のモジュールまたはユニットに関連する機能が、別個のハードウェア、ファームウェア、および／またはソフトウェア構成要素によって行われるか、あるいは共通または別個のハードウェアまたはソフトウェア構成要素内に組み込まれ得る。
【００９７】
[0096]  本開示で説明された技法はまた、複数の命令を記憶するコンピュータ可読記憶媒体など、コンピュータ可読媒体内に記憶、具現または符号化され得る。コンピュータ可読媒体内に埋め込まれたまたは符号化された複数の命令は、例えば、これら命令が１つまたは複数のプロセッサによって実行されたとき、１つまたは複数のプロセッサに本明細書で説明された技法を行わせ得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、プログラマブル読取り専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭ）、電子的に消去可能なプログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、カセット、磁気媒体、光媒体、または有形である他のコンピュータ可読記憶媒体を含み得る。
【００９８】
[0097]  様々な態様および例が説明された。しかしながら、以下の請求項の範囲から逸脱することなく、本開示の構造または技法に変更が行われ得る。
【図１】
2019509555.tif 000007
【図２】
2019509555.tif 000008
【図３】
2019509555.tif 000009
【図４】
2019509555.tif 000010
【国際調査報告】
2019509555.tif 000011
2019509555.tif 000012