(57)【特許請求の範囲】
【請求項１】
グラフィクス処理ユニットを使用するための方法であって、
頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能なシェーダユニットがフラグメントシェーディングをバイパスすべきかどうかの決定を行なうために、グラフィックスプリミティブのバッチをレンダする前に構成情報を使用することと、
前記シェーダユニットを使用して頂点シェーディングを実行することと、
前記シェーダユニットがフラグメントシェーディングをバイパスするという決定に基づいて、前記シェーダユニットによってフラグメントシェーディングをバイパスすることと、
前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記シェーダユニットのある数の算術論理演算ユニットの電力をオフにし、前記算術論理演算ユニットの残りに電力を供給することと、なお、前記残りは、前記シェーダユニットの減らされた数の前記算術論理演算ユニットを備えている、
を備える方法。
【請求項２】
前記減らされた数の算術論理ユニットを使用して頂点シェーディングを実行するために、ある数の頂点シェーダスレッドをスケジュールすることと、なお、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；
をさらに備えている、請求項１に記載の方法。
【請求項３】
前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記方法は、
前記シェーダユニットの少なくとも１つのスレッドパッキングバッファと、前記少なくとも１つのスレッドパッキングバッファから前記シェーダユニットへと情報を通信するために使用される入力バスと、の電力をオフにすることと、
をさらに備えている、請求項１に記載の方法。
【請求項４】
前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記方法は、
前記シェーダユニット以外の処理ユニットを使用してフラグメントシェーディングを実行することと；
前記の他の処理ユニットのためのバッファとして前記シェーダユニットのレジスタバンクを使用することと、なお、前記シェーダユニットのレジスタバンクは、フラグメントシェーディングを実行する前記の他の処理ユニットによる使用のために、ピクセルカラーデータを含んでいるピクセル属性データを保存するために使用されている；
他の場合には前記シェーダユニットによって使用されるテクスチャデータを前記他の処理ユニットに転送することと；
をさらに備えている、請求項１に記載の方法。
【請求項５】
前記の他の処理ユニットはピクセルブレンダを備えている、請求項４に記載の方法。
【請求項６】
フラグメントシェーディングを実行するために使用される前記の他の処理ユニットは、プログラマブルグラフィクス処理ユニットを備えており、前記方法は、
前記プログラマブルグラフィクス処理エレメントによって、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを実行することと、
をさらに備えている、請求項４に記載の方法。
【請求項７】
コンピュータ実行可能プログラムコードが保存されるコンピュータ可読メモリ媒体であって、前記プログラムコードは、グラフィクス処理ユニットを使用するための前記プログラムコードで、
頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能なシェーダユニットがフラグメントシェーディングをバイパスすべきかどうかの決定を行なうために、グラフィックスプリミティブのバッチをレンダする前に、構成情報を使用するコード、
前記シェーダユニットを使用して頂点シェーディングを実行するコード、
前記シェーダユニットがフラグメントシェーディングをバイパスするという決定に基づいて、前記シェーダユニットによってフラグメントシェーディングをバイパスするコード、
前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記シェーダユニットのある数の算術論理演算ユニットの電力をオフにし、前記算術論理演算ユニットの残りに電力を供給するコード、なお、前記残りは、前記シェーダユニットの減らされた数の前記算術論理演算ユニットを備えている；
を備えている、
媒体。
【請求項８】
前記減らされた数の算術論理ユニットを使用して頂点シェーディングを実行するために、ある数の頂点シェーダスレッドをスケジュールするコードと、なお、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；
をさらに備えている、請求項７に記載の媒体。
【請求項９】
前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記コードは、
前記シェーダユニットの少なくとも１つのスレッドパッキングバッファと、前記少なくとも１つのスレッドパッキングバッファから前記シェーダユニットへと情報を通信するために使用された入力バスと、の電力をオフにするコードと、
をさらに備えている、請求項７に記載の媒体。
【請求項１０】
前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記コードは、
前記シェーダユニット以外の処理ユニットを使用してフラグメントシェーディングを実行するコードと；
前記の他の処理ユニットのためのバッファとして前記シェーダユニットのレジスタバンクを使用するコードと、なお、前記シェーダユニットのレジスタバンクは、フラグメントシェーディングを実行する前記の他の処理ユニットによる使用のために、ピクセルカラーデータを含んでいるピクセル属性データを保存するために使用されている；
他の場合には前記シェーダユニットによって使用されるテクスチャデータを前記他の処理ユニットに転送するコードと；
をさらに備えている、請求項７に記載の媒体。
【請求項１１】
前記の他の処理ユニットはピクセルブレンダを備えている、請求項１０に記載の媒体。
【請求項１２】
前記の他の処理ユニットは、プログラマブルグラフィクス処理ユニットを備えており、前記コードは、フラグメントシェーディングを実行するために前記プログラマブルグラフィクス処理ユニットを構成するコードをさらに備えており、フラグメントシェーディングは、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを備えている、請求項１０に記載の媒体。
【請求項１３】
グラフィクス処理手段と、前記グラフィクス処理手段は、
頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能なシェーディング手段がフラグメントシェーディングをバイパスするかどうかについて、グラフィックスプリミティブのバッチをレンダする前に構成情報を使用して、決定を行なうためのコマンド復号手段を備えており、
前記シェーディング手段は、前記グラフィクス処理手段に結合されており、前記シェーディング手段は、頂点シェーディングを実行し、オプションとしてフラグメントシェーディングを実行するためのものであり、前記シェーディング手段は、前記シェーディング手段がフラグメントシェーディングをバイパスするという前記コマンド復号手段の決定に基づいて、フラグメントシェーディングをバイパスし、前記シェーディング手段は複数の算術論理演算手段を備え、
前記複数の算術処理手段の電力の供給を管理するための電力管理手段と、
を備え、
前記電力管理手段は、ある数の前記算術処理手段の電力がオフにされ、前記算術処理手段の残りに対して電力が供給され、前記残りは、減らされた数の前記複数の算術処理手段を備えるように、前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記複数の算術処理手段の電力を管理している、
装置。
【請求項１４】
前記シェーディング手段のスケジューリング手段をさらに備え、なお、前記スケジューリング手段は、シェーダスレッドをスケジュールするためのものであり、前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記スケジューリング手段は、前記減らされた数の算術処理手段を使用して前記頂点シェーディングを実行するためにある数の頂点シェーダスレッドをスケジュールし、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；
請求項１３に記載の装置。
【請求項１５】
前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記電力管理手段は、スレッドパッキングバッファと、前記スレッドパッキングバッファから前記シェーディング手段に対し情報を通信するために使用される入力バスと、の電力をオフにするために、電力の供給を管理する、請求項１３に記載の装置。
【請求項１６】
前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記シェーディング手段以外の処理手段がフラグメントシェーディングのために使用されており、前記シェーディング手段のレジスタバンクは、前記の他の処理手段のためのバッファとして使用されており、前記バッファは、ピクセルカラーデータを含んでいるピクセル属性データを保存している、請求項１３に記載の装置。
【請求項１７】
前記の他の処理エレメントは、ピクセルブレンダを備えている、請求項１６に記載の装置。
【請求項１８】
フラグメントシェーディングを実行するために使用される前記の他の処理ユニットは、プログラマブルグラフィクス処理エレメントを備えており、前記プログラマブルグラフィクス処理エレメントは、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを実行するように構成されている、請求項１６に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィック処理ユニット(graphics processing units)に関し、より具体的には、グラフィック処理ユニットを用いてイメージを処理することに関する。
【背景技術】
【０００２】
グラフィック処理ユニット(graphics processing unit)（ＧＰＵ）は、ディスプレイデバイス上のディスプレイのためにコンピュータ化されたグラフィックスを生成するために使用される専用グラフィックスレンダリングデバイス(a dedicated graphics rendering device)である。ＧＰＵｓは、複雑アルゴリズムの範囲について、一般よりもより効率的な処理を提供する、高度並列構造の汎用セントラルプロセッシングユニット（ＣＰＵｓ）で作られている。例えば、複雑なアルゴリズムは、三次元コンピュータ化されたグラフィックスの表示に対応することができる。そのような場合では、ＧＰＵは、ディスプレイデバイス上のディスプレイのためのイメージを描くＣＰＵを使用することよりも早く、ディスプレイデバイス上のディスプレイのための３次元イメージを作成する、ある数のプリミティブグラフィクスオペレーション(a number of primitive graphics operations)をインプリメントすることができる。
【０００３】
例えば、一般的なＧＰＵは、イメージジオメトリを受信し、例えばディスプレイデバイス上のディスプレイのために出力されることができるグラフィックスを生成するパイプラインアプローチを使用する。一般的なグラフィックスパイプラインは、並列に動作する多数のステージ(a number of stages)を含んでおり、１ステージからの出力は、パイプラインの別のステージでおそらく使用される(possibly being used)。例えば、一般的なグラフィックスパイプラインは、頂点シェーダ、プリミティブアセンブリ(primitive assembly)、ビューポート変換(viewport transformation)、プリミティブセットアップ(primitive setup)、ラスター化(rasterization)、隠れプリミティブ及びピクセル拒絶(hidden primitive and pixel rejection)、属性セットアップ(attribute setup)、属性補間(attribute interpolation)、そして、フラグメントシェーダのステージを備えている。
【０００４】
頂点シェーダは、イメージのためのイメージジオメトリに適用されており、イメージジオメトリ内で、頂点座標と頂点の属性を生成する。頂点属性は、例えば、頂点に関連づけられた、カラー(color)、法線(normal)、及びテクスチャ(texture)の座標を含む。プリミティブアセンブリは、イメージジオメトリに基づいて頂点から、プリミティブ、例えば点、線、そして三角のプリミティブ、を形成する。形成されたプリミティブは、変換、例えば法線化されたデバイススペースからスクリーンスペースにプリミティブを変換するビューポート変換、を使用して１つのスペースから別のへと変換されることができる。プリミティブのエリア、すなわちエッジ係数(edge coefficients)、を決定し、オクルージョン選択(occlusion culling)（例バックフェース選択(backface culling)）、及び３Ｄクリッピングオペレーションを実行するために、プリミティブセットアップが使用されることができる。
【０００５】
ラスター化は、プリミティブ内の頂点のＸＹ座標と、プリミティブに含まれるピクセルの数と、に基づいて、プリミティブをピクセルに変換する。隠れプリミティブ及びピクセル拒絶は、プリミティブのｚ座標、及び／または、隠されるように決定されたプリミティブ及びピクセルを決定し拒絶するピクセル（例、イメージフレームにおいて別のプリミティブあるいはピクセルの後ろに位置しているプリミティブあるいはピクセル、トランスパレントプリミティブあるいはピクセル）、を使用する。属性セットアップ(attribute setup)は、プリミティブ内のピクセルに関連づけられた属性について、属性グラディエント(attribute gradients)、例えば横（Ｘ）方向、あるいは、縦（Ｙ）方向のいずれかに動くプリミティブ内の第１ピクセルにおける属性値と第２ピクセルにおける属性値との差異、を決定する。属性補間は、その決定された属性グラディエント値に基づいて、プリミティブ内のピクセル全体にわたって、属性を補間する。補間された属性値は、ピクセルレンダリングのために、フラグメントシェーダに送られる。フラグメントシェーダの結果は、ディスプレイデバイス上で処理されたイメージのプレゼンテーションについて、ポスト処理ブロック及びフレームバッファに出力されることができる。
【発明の概要】
【０００６】
本開示は、当技術分野の欠点に取り組み、入力イメージジオメトリ(an input image geometry)にしたがって１つまたは複数のプログラマブルプロセッサを使用するためにグラフィクスイメージ処理における効率の良さを提供することを努める。ＧＰＵは、グラフィックスパイプラインを使用するための強力な処理機能を提供する、１つまたは複数のプロセッサを備えることができる。しかしながら、ある状況下では、アプリケーションは、ＧＰＵによって提供される処理機能のすべてを必要としない可能性があり、例えば、アプリケーションは、あまり強力ではない代替物(less-powerful alternative)を必要とすることができる。そのような場合に、例えばＧＰＵを使用しているアプリケーションの必要性に基づいてＧＰＵのリソースを効率的に使用するために、ＧＰＵのある部分、例えばフラグメントシェーダをバイパスすることができることは利点であろう。
【０００７】
グラフィクス処理ユニットのシェーダユニットによってフラグメントシェーディングをバイパスするあるいはそれなしで済ませる(forego)、という決定を行なうために構成情報を使用する、システム、方法、及び装置がここにおいて開示されており、なお、シェーダユニットは、頂点シェーディングとフラグメントシェーダの両方を実行することが可能である。その決定にしたがって、シェーダユニットは頂点シェーディング(vertex shading)と、バイパスフラグメントシェーディング(bypasses fragment shading)を実行する。なんらかのフラグメントシェーディングがグラフィクス処理ユニットによって実行される予定である場合には、シェーダユニット以外の処理エレメント(a processing element other than the shader unit)、例えばピクセルブレンダは、フラグメントシェーディングを実行するために使用されることができる。シェーダユニットによって使用される算術論理ユニットに対して供給される電力は、フラグメントシェーディングがバイパスされる場合に、ある数の算術論理ユニット(a number of the arithmetic logic unit)の電力がオフにされるように、管理されることができる。シェーダユニットは、頂点シェーディングを実行するために、減らされた数の算術論理演算ユニットを使用する。スレッドパッキングバッファと、そのスレッドパッキングバッファからシェーダユニットに対して情報をトランスポートするために使用される入力バス、のような他のコンポーネントの電力はまた切られることができる。シェーダユニットによって典型的に使用される少なくとも１つのレジスタバンクは、他の処理エレメントによるフラグメントシェーディングオペレーションを実行することにおいて、テクスチャデータと一緒に、使用ピクセル属性データ(pixel attribute data for use)をバッファリングするバッファとして使用されることができる。
【０００８】
本開示の１つまたは複数の実施形態にしたがって、頂点及びフラグメントシェーディングの両方を実行するように構成された、プログラマブル処理エレメント、すなわちシェーダユニットは、頂点シェーディングを実行するように、ＧＰＵに対して提供された情報に基づいて、フラグメントシェーディングをバイパスするあるいはそれなしで済ませるように、動的に「再構成(re-configured)」される。この配置によって、再構成されたパイプラインにおいて「不要である(unnecessary)」と決定されたコンポーネントは、バイパスされることができる。フラグメントシェーディングがバイパスされるという場合に使用されないコンポーネントは、代替目的に使用されることができる。あるいは、電力は、「そのようなコンポーネントの電力をオフにすること(turning off power to such components)によって節約されることができる。減らされた数の頂点を有する頂点シェーダスレッドのような、他の効率の良さが達成されることができる。
【０００９】
少なくとも１つの実施形態で、グラフィクス処理ユニットを使用するための方法が説明されており、そしてそれは、頂点シェーディング及びフラグメントシェーディングの両方を実行することができるシェーダユニットにおけるフラグメントシェーディングをバイパスあるいはそれなしで済ませる、という決定を行なうために構成情報を使用し、シェーダユニットを使用して頂点シェーディングを実行し、そして、その決定に基づいてシェーダユニットによってフラグメントシェーディングを実行することをバイパスする。
【００１０】
１つまたは複数の実施形態にしたがって、グラフィック処理ユニットとシェーダユニットを備えている装置(apparatus)が説明されている。グラフィック処理ユニットは、シェーダユニットにおけるフラグメントシェーディングを、バイパスし、あるいはそれなしで済ませる、という決定を行なうために、構成情報を使用するように構成されたコマンドデコーダを備えている。シェーダユニットは、頂点シェーディング及びフラグメントシェーディングの両方を実行することができる。シェーダユニットは、頂点シェーディングを実行し、その決定に基づいてフラグメントシェーディングを実行することをバイパスするように構成されている。
【００１１】
本発明の本質がすぐに理解することができるように簡単な概要(summary)が提供されている。本発明のより完全な理解は、添付図面と関連して、それらの好ましい実施形態（単数または複数）の詳細な説明を参照することにより得られることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本開示の１つまたは複数の実施形態にしたがった、使用のためのグラフィック処理ユニット(graphics processing unit)を含んでいる例示的なデバイスを図示しているブロック図である。
【図２】図２は、本開示の１つまたは複数の実施形態にしたがって、頂点シェーダ及びフラグメントシェーダの処理エレメントをインプリメントすることができるシェーダユニットのコンポーネントの概観を提供する。
【図３】図３は、本開示の１つまたは複数の実施形態にしたがった、使用のためのグラフィック処理ユニットのグラフィックスパイプラインの例を提供する。
【図４】図４は、本開示の１つまたは複数の実施形態を使用するためのプログラマブルグラフィックス処理エレメントを図示している例示的なブロック図の例を提供する。
【発明を実施するための形態】
【００１３】
本開示の、上述された特徴及び目的は、同様の参照数字が同様の構成要素を示している添付図面と共に、以下の説明を参照して明らかとなるであろう。
【００１４】
本開示のある実施形態が、前述の図を参照して説明されており、ここでは、同様の参照数字は同様のコンポーネントを指している。
【００１５】
１つまたは複数の実施形態にしたがって、システム、方法、及び装置が開示されており、ここにおいては、シェーダユニットは、グラフィクス処理ユニットに対して提供される構成情報にしたがって構成されている。構成情報を使用して、フラグメントシェーディング及び頂点シェーディングの両方を実行することができるシェーダユニットは、頂点シェーディングを実行するように、そして、フラグメントシェーディングなしで済ませるように、構成されることができる。シェーダユニット以外の別の処理エレメントは、なんらかのフラグメントシェーディングを実行するために使用されることができる。別な方法でフラグメントシェーディングを実行するようにシェーダユニットによって使用される１つまたは複数のコンポーネント(one or more components that would otherwise be used by the shader unit to perform fragment shading)は、別の目的のために使用されることができ、あるいは他の点で、使用されないコンポーネント（components that are not otherwise used）の電力はオフにされることができる。
【００１６】
図１は、本開示の１つまたは複数の実施形態にしたがって、使用のためのグラフィック処理ユニット（ＧＰＵ）１０４を含む、例示的なコンピューティングデバイス１００を図示しているブロック図である。コンピューティングデバイス１００は、パソコン、デスクトップコンピュータ、ラップトップコンピュータ、ワークステーション、ビデオゲームプラットフォームあるいはコンソール、セルラあるいは衛星無線電話、地上通信線電話、インターネット電話、ポータブルビデオゲームデバイスあるいは携帯情報端末のようなハンドヘルドデバイス、パーソナルミュージックプレイヤー、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、あるいはグラフィカル情報を出力する別のタイプのデバイス、を備えることができる。
【００１７】
図１の例では、コンピューティングデバイス１００は、セントラルプロセッシングユニット（ＣＰＵ）１０２、ＧＰＵ１０４、及びメモリモジュール１１６、例えばランダムアクセスメモリ（ＲＡＭ）メモリモジュール（単数または複数）、を含む。ＣＰＵ１０２、ＧＰＵ１０４、及びメモリモジュール１１６は、バス１０６を使用して通信し、そしてそれは、今知られているあるいは後で発見される、いずれのタイプのバスあるいはデバイス相互接続を備えることができる。ＣＰＵ１０２は、汎用あるいは専用のマイクロプロセッサを備えることができる。例えば、ＣＰＵ１０２は、カリフォルニア州のサンタクララのインテル社によって提供されているコア２プロセッサ、あるいは別のタイプのマイクロプロセッサを備えることができる。ＧＰＵ１０４は、専用グラフィックスレンダリングデバイスである。ＧＰＵ１０４は、例えば、コンピューティングデバイス１００のマザーボードに組み込まれることができ、コンピューティングデバイスのマザーボードにおけるポートにおいてインストールされるグラフィクスカード上で存在することができ、あるいは、そうでなければコンピューティングデバイス１００と補間するように構成されることができる。
【００１８】
コンピューティングデバイス１００に結合されているディスプレイユニット１２４は、例えば、モニタ、テレビ、プロジェクションデバイス、液晶ディスプレイ、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、カソードレイチューブディスプレイ (a cathode ray tube display)、電子ペーパー、表面伝導の電子放射されたディスプレイ (a surface-conduction electron-emitted display)（ＳＥＤ）、レーザーテレビディスプレイ、ナノクリスタルディスプレイ、あるいは、別のタイプのディスプレイユニット、を備えることができる。図１の例では、ディスプレイユニット１２４は、コンピューティングデバイス１００の一部であることができる。例えば、ディスプレイユニット１２４は、モバイル電話のスクリーンであることができる。あるいは、ディスプレイユニット１２４は、コンピュータデバイス１００に外付けであることができ、例えばワイヤードあるいはワイヤレス通信接続あるいは他の接続を介して、コンピューティングデバイス１００と通信することができる。非限定の例として、ディスプレイユニット１２４は、ワイヤードあるいはワイヤレス接続を介して、パーソナルコンピュータに接続されたコンピュータモニタあるいはフラットパネルディスプレイであることができる。
【００１９】
ソフトウェアアプリケーション１１０は、ＣＰＵ１０２を介して実行されることができる。ソフトウェアアプリケーション１１０は、限定されないが、例えばビデオゲーム、グラフィカルユーザインタフェースエンジン、キャド(a computer-aided design program for engineering or artistic applications)、あるいは、２次元（２Ｄ）あるいは３次元（３Ｄ）グラフィクスを使用する別のタイプのソフトウェアアプリケーション、のようなＣＰＵ１０２を介して実行することが可能であるいずれのソフトウェアアプリケーションを備えることができる。
【００２０】
ＣＰＵ１０２がソフトウェアアプリケーション１１０を実行しているとき、ソフトウェアアプリケーション１１０は、限定されない例として、例えば、ＯｐｅｎＶＧ ＡＰＩ、ＯｐｅｎＧＬ ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ ＡＰＩ、グラフィクスデバイスインタフェース (Graphics Device Interface)(ＧＤＩ)、Ｑｕａｒｔｚ、ＱｕｉｃｋＤｒａｗ、あるいは別のタイプの２Ｄあるいは３Ｄグラフィクス処理ＡＰＩのうちのいずれか１つまたは複数のような、グラフィクス処理アプリケーションプログラミングインタフェース（ＡＰＩ）１１２のサブルーチンを呼び出す(invoke)ことができる。
【００２１】
少なくとも１つの実施形態にしたがって、ソフトウェアアプリケーション１１０がグラフィックス処理ＡＰＩ１１２のサブルーチンを呼び出すとき、グラフィックス処理ＡＰＩ１１２は、ＧＰＵドライバ１１４のサブルーチンのうちの１つまたは複数を呼び出し、そしてそれは、コンピューティングデバイス１００上でＣＰＵ１０２を介して実行する。ＧＰＵドライバ１１４は、例えばグラフィックス処理ＡＰＩ１１２及びＧＰＵ１０４間でインターフェースを提供する１セットのソフトウェア及び／またはファームウェアインストラクションを備えることができる。グラフィックス処理ＡＰＩ１１２がＧＰＵドライバ１１４のサブルーチンを呼び出すとき、ＧＰＵドライバ１１４は、ＧＰＵ１０４に表示可能グラフィクス情報を生成させるコマンドを公式化し(formulates)、発行する。例えば、グラフィックス処理ＡＰＩ１１２がグラフィックスプリミティブのバッチをレンダするためにＧＰＵドライバ１１４のサブルーチンを呼び出すとき、ＧＰＵドライバ１１４は、処理構成(a processing configuration)をＧＰＵ１０４に提供し、そしてそれはＧＰＵドライバ１１４がグラフィクスプリミティブのパッチをレンダするために使用する。ＧＰＵ１０４は、例えば、グラフィックスプリミティブのバッチをレンダし、グラフィックスプリミティブのラスタイメージを出力する。
【００２２】
ＧＰＵドライバ１１４によって公式化されたコマンドは、ＧＰＵ１０４がコマンドを実行するために使用する予定であるグラフィクス処理構成（単数または複数）を識別することができ、構成（単数または複数）は、ＧＰＵ１０４によって実行される予定である１セットのインストラクション、１セットのステートレジスタ値、そして、ＧＰＵ１０４がコマンドを実行する必要がありうる他のタイプの情報、を識別することができる。
【００２３】
ＧＰＵドライバ１１４がメモリ１１６にグラフィックス処理構成（単数または複数）を保存する場合において、ＧＰＵドライバ１１４は、ＧＰＵドライバ１１４によって公式化されたコマンドにおけるグラフィクス処理構成（単数または複数）に対応しているメモリモジュール１１６におけるストレージロケーション(storage locations)を参照することができる。ＧＰＵ１０４がコマンドを受信するとき、ＧＰＵ１０４は、ＧＰＵドライバ１１４から受信されたコマンドで参照されたグラフィックス処理構成（単数または複数）をメモリ１１６から検索することができる。
【００２４】
少なくとも１つの実施形態にしたがって、ＧＰＵ１０４のコマンドデコーダ１２６は、ＧＰＵドライバ１１４からコマンドを復号し、コマンドを実行するために処理エレメント１２８のうちの１つあるいは複数を構成する。限定されない例として、コマンドデコーダ１２６は、メモリ１１６からグラフィックス処理構成（単数または複数）を検索し、処理エレメント（単数または複数）１２８に、グラフィックス処理構成（単数または複数）によって識別された１セットのインストラクションをロードする。コマンドデコーダ１２６はまた、１つまたは複数の処理エレメント１２８に、入力データを提供するように構成されることができる。
【００２５】
１つまたは複数の実施形態にしたがって、処理エレメント１２８は、グラフィックスパイプライン１０８をインプリメントする。そのような実施形態にしたがって、処理エレメント１２８は、並列モードで、グラフィックスパイプライン１０８をインプリメントすることができる。パラレルモードでは、処理エレメント１２８は、並行してデータ上で操作することができ、処理エレメント１２８からの出力は、別の処理エレメント１２８への入力として使用される。限定されない例として、処理エレメント１２８Ａは、コマンドデコーダ１２６から受信された第１セットの初期入力データ上で第１グラフィクスオペレーションを実行し、処理エレメント１２８Ｂに対し、第１セットの中間結果を出力する。初期入力データは、１つまたは複数の頂点に対応するデータを備えることができ、そしてそのデータは、例えば座標及び属性データを備えることができる。頂点座標は、例えば、Ｘ、Ｙ、及びＺ（幅、高さ、及び深さ）座標と、遠近パラメータを備えたＷ座標と、を備えた４次元座標システムに基づいて、イメージ内でロケーションを識別する。頂点属性は、例えば、頂点に関連づけられた、カラー(color)、法線(normal)、及びテクスチャ(texture)の座標を含むことができる。処理エレメント１２８Ｂは、処理エレメント１２８Ａによって出力された第１セットの中間結果に関して別のグラフィクスオペレーションを実行し、そして、処理エレメント１２８の別のものに対し、第２セットの中間結果を出力すること等ができる。処理エレメント１２８Ｂが第２のグラフィックスオペレーションを実行しているが、処理エレメント１２８Ａは、コマンドデコーダ１２６から受信された第２セットの初期入力データに関する第１のグラフィックスオペレーションを実行することができる。
【００２６】
処理エレメント１２８は、処理エレメント１２８Ｎがメモリモジュール１１６における１以上のバッファに対してピクセルオブジェクトを出力する、あるいは、ある他の目的先 (destination)に対しこの新しいピクセルオブジェクトを出力するまで、この方法で継続することができる。ピクセルオブジェクトは、ピクセルを説明するデータである。各ピクセルオブジェクトは、マルチプルカラー値を規定することができ、また、透明レベルのピクセル(a transparency level of the pixel)を規定することができる。いくつかの状況において、ピクセルオブジェクトは、第１のカラーフォーマットにおける第１のカラー、及び、第２のカラーフォーマットにおける第２のカラー、を規定することができる。
【００２７】
本開示の１つまたは複数の実施形態にしたがって、処理エレメント１２８のうちの１つは、それぞれが頂点データで動作する１つまたは複数の頂点シェーディングオペレーションを実行するように、また、それぞれがピクセルデータ上で動作する１つまたは複数のフラグメントシェーディングオペレーションを実行するように、構成されることができるシェーダユニットを備えている。したがって、１つまたは複数の実施形態にしたがって、処理エレメント１２８は、一体化されたシェーダユニット(a unified shader unit)として構成されることができ、そしてそれは頂点データ上で動作する頂点シェーダとして実行することが可能であり、また、ピクセルデータ上で動作するフラグメントシェーダとして実行することがさらに可能である。１つまたは複数の実施形態にしたがって、シェーダユニットは、プログラマブル処理エレメントである。
【００２８】
図２は、本開示の１つまたは複数の実施形態にしたがって、頂点シェーダ及びフラグメントシェーダの処理エレメントをインプリメントすることができるシェーダユニットのコンポーネントの全体像(overview)を供給する。ここで詳細に説明されているように、コマンドデコーダ１２６は、いずれのシェーディングオペレーションがメモリモジュール１１６から検索されたグラフィクス処理構成情報（単数または複数）に基づいて、シェーダユニット２０６を使用して実行されることになっているとしたらどうなるのかを決定する。ある場合においては、アプリケーション１１０は、いずれの、あるいは、非常に最小限度のフラグメントシェーディングも必要としなくてもよい。最小限度のフラグメントシェーディングが必要とされている場合には、ＧＰＵ１０４は、ここでさらに説明されているように、最小限度のフラグメントシェーディングを実行するためにシェーダユニット２０６以外の処理エレメント１２８を構成することができる。
【００２９】
本開示の１つまたは複数の実施形態にしたがって、ＧＰＵ１０４は、シェーダユニット２０６を使用して実行される頂点シェーダスレッドの頂点データを処理するためにシェーダユニット２０６が使用されるように、構成されることができる。さらに、ここで開示されているように、ＧＰＵ１０４の他の処理エレメント１２８は、フラグメントシェーダ処理エレメントの不在に適応するように構成されることができる。
【００３０】
シェーダユニット２０６は、２以上の算術論理演算ユニット(arithmetic logic unit)（ＡＬＵ）グループ２２８を備えており、それらのそれぞれは、多数のＡＬＵｓ２５８を備えている。各ＡＬＵ２５８は、インストラクションキャッシュ２２４からフェッチされたインストラクションとの順応(conformance)において、１以上のオペランドに関するオペレーションを実行する。オペランドは、通信回線２４８を介してＲＡＭ２２６から検索された１以上の定数と、及び／または、通信回線２５０を介してレジスタバンク２６２のうちの１つにおけるレジスタから検索された１以上の一時的に保存された値と、を備えることができる。ここで識別された、通信回線２４８及び２５０のような通信回線は、例えばバス、であることができる。シェーダユニット２０６の内部にある通信回線は、単独バスあるいは複数バス(multiple buses)を備えることができる。１つまたは複数の実施形態にしたがって、ロード制御モジュール、ここではロードコントローラ２２２と呼ばれる、はＲＡＭに対する定数２２６のストレージ（通信回線２６４を介して）、及び／または、レジスタファイルバンク２６２に対する一時的な値のストレージ及びレジスタファイルバンク２６２からの一時的な値の検索(storage of temporary values to and retrieval of temporary values from register file banks 262)（通信回線２６０を介して）、を制御する。１つまたは複数の実施形態にしたがって、ＲＡＭ２２６は、例えばメモリモジュール１１６のある部分を備えることができる。
【００３１】
ＲＡＭ２２６において保存された定数は、シェーダスレッド２１０による使用のための広域の値(global value)であることができる。限定されない例として、ロード制御モジュール２２２の制御の下で、ＲＡＭ２２６は、ＧＰＵドライバ１１４から受信されたコマンドを処理するために使用されたシェーダスレッド２１０のすべてを使用するために定数を保存することができる。レジスタファイルバンク２６２は、それに対するアクセスもまたロードコントローラ２２２の制御の下にあり、値を一時的に保存するために使用されるレジスタのバンクを備えることができる。１セットのあるいは１郡のレジスタは、シェーダスレッド２１０のうちの与えられた１つを使用する値を一時的に保存するために使用されることができる。ＡＬＵｓ２５８は、通信回線２５０を介して、レジスタバンク２６２において、一時的な値にアクセスすることができる（例えば、保存する、あるいは検索する）。
【００３２】
１つまたは複数の実施形態にしたがって、シェーダユニット２０６は、スレッドスケジューラ及びコンテキストレジスタ（ＴＳＣＲ）２２０をさらに備えており、そしてそれは、シェーダスレッド２１０をスケジュールするように、そして、与えられたシェーダスレッド２１０のためのコンテキストレジスタに含まれる情報にしたがってロード制御モジュール２２２でスレッドスイッチを同期化するように、動作する。ＴＳＣＲ２２０によってスケジュールされたシェーダスレッド２１０は、頂点及びフラグメントシェーダスレッドであることができる。頂点シェーダスレッド２１０は、グラフィックスパイプライン１０８で使用された頂点シェーダをインプリメントする多数のスレッドのうちの１つであり、各頂点シェーダスレッド２１０は、グラフィックスパイプライン１０８のための頂点シェーダを提供するために、シェーダユニット２０６によって実行されることができるある数の頂点シェーディングオペレーションを備える。同様に、フラグメントシェーダスレッド２１０は、フラグメントシェーダをインプリメントする多数のスレッドのうちの１つであり、各フラグメントシェーダスレッド２１０は、グラフィックスパイプライン１０８のためのフラグメントシェーダを提供するために、シェーダユニット２０６によって実行されることができるある数のフラグメントシェーディングオペレーションを備えている。本開示の実施形態にしたがって、シェーダユニット２０６は、頂点シェーダスレッド２１０をスケジュールするように構成されている。シェードユニット２０６は、ＧＰＵドライバ１１４から得られた情報に基づいて、フラグメントシェーダスレッド２１０をスケジュールするように、さらに構成されている。
【００３３】
ＴＳＣＲ２２０は、実行のためにシェーダスレッド２１０をスケジュールし、そして、通信回線２３６を介してロード制御モジュール２２２と通信するので、スケジュールされたシェーダスレッド２１０についてのコンテキストは、ロードコントローラ２２２によってロードされることができる。シェーダスレッド２１０のコンテキスト(context)は、シェーダスレッド２１０と関連して、シェーダユニット２０６によって処理されるべきインストラクション、を含む。ロードコントローラ２２２は、スケジュールされたシェーダスレッド２１０のためのＡＬＵｓ２５８によって実行される予定であるインストラクションがインストラクションキャッシュ２２４においてロードされ、ＲＡＭ２２６に対するポインタ及びレジスタファイルバンク２６２におけるレジスタが、スケジュールされたシェーダスレッド２１０に対応する値（広域で一時的な）を保存するロケーション／レジスタを指すように、インストラクションキャッシュ２２４を制御する。そのため、スケジュールされたシェーダスレッド２１０に関連して実行するためにインストラクションキャッシュ２２４からフェッチされたインストラクションは、スケジュールされたシェーダスレッド２１０のコンテキストにおいて動作する。例えば、インストラクションは、インストラクションキャッシュ２２４からフェッチされ、スケジュールされたシェーダスレッド２１０のためにＡＬＵｓ２５８のうちの１つまたは複数によって実行される。スケジュールされたシェーダスレッド２１０は、スケジュールされたシェーダスレッド２１０に関連づけられたレジスタファイルバンク２６２からの１つまたは複数の一時的な値、及び／または、フェッチされたインストラクションにしたがったスケジュールされたシェーダスレッド２１０に関連づけられたＲＡＭ２２６からの１つまたは複数のグローバル値、を使用することができる。
【００３４】
スレッドパッキングバッファ２０２は、シェーダスレッド２１０のために、データを保存することができる。スケジュールされたシェーダスレッド２１０のためのシェーダインストラクションあるいはプログラムは、バス（図２に示されていない）を介してＧＰＵパイプライン１０８における外部メモリあるいはＬ２キャッシュから、ロードコントローラ２２２によってインストラクションキャッシュ２２４へプリロードされる、あるいは、実行時間ロードされる(runtime-loaded)ことができ、データは、スケジュールされたシェーダスレッド２１０を識別するＴＳＣＲ２２０によってロードコントローラ２２２に提供される情報に基づいて、スケジュールされたシェーダスレッド２１０に対応しているレジスタバンク２６２へとロードされることができる。定数ＲＡＭ(Constant RAM)２２６は、シェーダスレッド２１０のすべてに対して利用可能なグローバル値のような値を保存する。ロード制御は、スケジュールされたシェーダスレッド２１０を使用するために、テクスチャエンジン２１２から、テクスチャサンプルをリクエストすることができる。
【００３５】
本開示の１つまたは複数の実施形態にしたがって、シェーダユニット２０６は、グラフィックスパイプライン１０８のクロックレート／スピードよりも速いかもしれない、クロックレートで動作する。アシンクロナスインタフェース(asynchronous interface)は、シェーダユニット２０６に外付けされているコンポーネントと通信するために、シェーダユニットを通信することを可能にするために使用される。通信回線２３０、２３２、２３４、２３８、及び２４０は、１つまたは複数の通信バスストラクチャを備えることができ、シェーダユニット２０６は、例えば１つまたは複数の外部コンポーネントと通信する。
【００３６】
シェーダユニット２０６は、他のグラフィクスパイプラインコンポーネントよりも高いクロックスピードで動作できるが、それは必要ではない。より高いクロックレートは、例えば、他のグラフィクスパイプラインスループットを整合させる頂点シェーダ及び／またはフラグメントシェーダのためのシェーダオペレーションのスループットを達成するために、望まれる場合に、オプションで使用される。あるいは、シェーダのコンピューテーション仕事量が軽い場合には、シェーダユニット２０６のクロックスピードはグラフィクスパイプライン１０８のクロックスピードよりも低いことがありうる。フラグメントシェーディングが本開示の実施形態にしたがってバイパスされるとき、シェーダユニット２０６は、頂点シェーダオペレーションについて排他的に使用されることができるので、たとえ、スレッドあたりの減らされた数の頂点及び減らされた数のＡＬＵｓ２５８、例グループ２２８ＡにおけるＡＬＵｓ、を有していたとしても、ＡＬＵｓ２５８のフルコンプリメント(full complement)で達成されるのと同じ頂点シェーディングスループットは、ユニット時間期間において減らされた数のＡＬＵｓ２５８を使用して達成されることができ、例えば、シェーダユニット２０６は、減らされた数のシェーダユニット２０６のＡＬＵｓ２５８を使用するある数の頂点シェーダスレッドをスケジュールする。フラグメントシェーディングがバイパスされないとき、シェーダユニット２０６は、頂点シェーダ及びフラグメントシェーダオペレーションの両方によって、例えば適切なスループットを保持するためにＡＬＵｓ２５８のフルコンプリメント及びより大きなスレッドサイズ（例、スレッドごとにより多くの頂点）を使用して、共有される。
【００３７】
限定されない例として、シェーダユニット２０６の各クロックサイクルにおいて、両方のＡＬＵグループ２２８Ａ及び２２８ＢにおけるＡＬＵｓ２５８は、ＡＬＵグループ２２８Ａ及び２２８ＢにおけるＡＬＵｓ２５８の数に等しい、ある数の頂点、あるいはピクセル上で動作することができる。例えば、Ｎが２に等しい場合、ＡＬＵグループ２２８Ａ及び２２８Ｂは、シェーダユニット２０６のクロックサイクルあたりの４つの頂点、あるいはピクセル上で動作することができる。スケジュールされたシェーダスレッド２１０が頂点シェーダスレッド２１０である場合には、シェーダスレッド２１０における４つの頂点は、シェーダユニット２０６の与えられたクロックサイクルの間に、動作されており、それぞれは、ＡＬＵグループ２２８Ａあるいは２２８ＢのＡＬＵ２５８、あるいは２２８Ａ及び２２８Ｂの両方のＡＬＵ２５８によるものである。同様に、スケジュールされたスレッド２１０がフラグメントシェーダスレッド２１０である場合、フラグメントシェーダスレッド２１０における４つのピクセルは、動作されており、それぞれは、ＡＬＵグループ２２８Ａあるいは２２８ＢのＡＬＵ２５８、あるいは２２８Ａ及び２２８Ｂの両方のＡＬＵ２５８によるものである。
【００３８】
図２で示される例において、ＡＬＵグループ２２８Ａ及び２２８Ｂは、同数のＡＬＵｓ２５８を有する。１つまたは複数の実施形態にしたがって、ＡＬＵグループ２２８Ａは、ＡＬＵグループ２２８ＢにおけるＡＬＵｓ２５８の数とは異なる数のＡＬＵｓ２５８を有することができる。さらに、本開示の実施形態にしたがって、頂点シェーディングオペレーション（及び処理された頂点）の数は、フラグメントシェーディングオペレーション（及び処理されたピクセル）の数と同じである必要はない。いくつかの場合において、例えば、頂点シェーディングオペレーションとフラグメントシェーディングオペレーションとの仕事量の比は、１：４、１：２、１：１、２：１、あるいはいずれの他の比であることができる。同様に、レジスタファイルバンク２６２Ａは、サイズにおいて、レジスタファイルバンク２６２Ｂと異なることができ、それらの両方のサイズは、静的に(statically)あるいは動的に(dynamically)構成されることができる。一般的に、ユニット時間期間において、そして、頂点シェーディングオペレーションのための仕事量が処理された頂点の数についての「ＮＶ」として指定され、フラグメントシェーディングオペレーションのための仕事量が処理されたピクセルの数についての「ＭＰ」として指定されている場合、シェーダユニット２０６は、ユニット時間期間の間に時間共有方法で、ＮＶ頂点を及びＭＰピクセルを終了する。時間共有の代替として、別の構成あるいは実施形態にしたがって、ＡＬＵグループ２２８Ａは、頂点シェーダスレッド２１０上で動作するようにスケジュールされることができるが、ＡＬＵグループ２２８Ｂは、シェーダユニット２０６のクロックサイクルのときにフラグメントシェーダスレッド２１０上で動作するために並列でスケジュールされることができる。
【００３９】
上記で説明されているように、ＧＰＵ１０４、例えばＧＰＵ１０４のコマンドデコーダ１２６は、例えばアプリケーション１１０によって提供される情報に基づいて、フラグメントシェーディングが必要とされていないあるいは最小限度のフラグメントシェーディングが必要とされるということを決定することができる。１つまたは複数の実施形態にしたがって、フラグメントシェーディングが必要とされていないあるいは最小限度のフラグメントシェーディングが必要とされる場合には、フラグメントシェーディングオペレーションは、シェーダユニット２０６においてバイパスされ、シェーダユニット２０６は、いずれのフラグメントシェーダスレッド２１０も処理する必要がない。さらに、また、１つまたは複数のそのような実施形態にしたがって、各頂点シェーダスレッド２１０に関連づけられた頂点の数は、下記で詳細に説明されるように、減らされることができ、また、グラフィックスパイプライン１０８のクロックサイクルごとに同じレベルの出力(the same level of output)を生成しながら、減らされた数のＡＬＵｓ２５８を使用してシェーダユニット２０６を動作することが可能である。そうすることで、シェーダユニット２０６の性能におけるいかなる顕著な低下、あるいは、シェーダユニット２０６による出力のレベルにおける変更、なしに節電(power conservation)は達成されることができる。フラグメントシェーディングが示されていないあるいは最小限度のフラグメントシェーディングが示されている、且つ、シェーダユニット２０６がフラグメントシェーディングオペレーションの除外に対し頂点シェーディングオペレーションをインプリメントする場合、フラグメントシェーディングオペレーションに関連して使用される限り、スレッドパッキングバッファ２０２及び対応する入力バス２３２、例、スレッドパッキングバッファ２０２Ｂ及び入力バス２３２Ｂ、は、ディスエーブルされることができ、これらのコンポーネントの電力はオフにされることができる。さらに、フラグメントシェーダスレッド２１０によって使用されるレジスタファイルバンク２６２は、属性インタポラータ２０４によって出力された、属性データ、例えばカラーデータ(color data)、を保存するのに利用可能である。そうすることで、例えばピクセルブレンダ２０８への入力のためのカラーあるいは他のデータを保存するために、先入れ先出し方式（ＦＩＦＯ）バッファとして、レジスタファイルバンク２６２Ｂを使用することが可能である。ＦＩＦＯとしてのレジスタファイルバンク、例えばレジスタファイルバンク２６２Ｂ、の使用は、例えばテクスチャエンジン２１２を介して実行されるいくつかのテクスチャローディング／検索のレイテンシをカバーすることができる。
【００４０】
１つまたは複数の実施形態にしたがって、電力管理ユニット、すなわち電力コントローラは、シェーダユニット２０６に外付けされているコンポーネントに対する電力、例えばスレッドパッキングバッファ２０２及び入力バス２３２、に加えて、ＡＬＵｓ２５８を含んでいるシェーダユニット２０６のコンポーネントに供給される電力を制御するために使用されることができる。コンポーネント、例えばＡＬＵ２５８、スレッドパッキングバッファ２０２、入力バス２３２等は、シェーダユニット２０６によって使用されない場合、電力管理ユニットは、コンポーネントに対して供給された電力を調節する、例えばオフにする、ことができる。そうすることにより、シェーダユニット２０６がフラグメントシェーディングオペレーションの除外に対して頂点シェーディングオペレーションを実行する場合に使用されないコンポーネント、使用されていない１つまたは複数のコンポーネントに対する電力は、ＧＰＵ１０４によって減らされたレベルの電力消費を達成するために、減らされるあるいは完全にシャットオフされる(shut off)ことができる。そのような実施形態にしたがって、電力管理ユニットは、他のコンポーネントと独立した１つのコンポーネントに対して供給される電力を制御することができる。非限定の例として、電力管理ユニットは、他のＡＬＵｓ２５８と独立したＡＬＵｓ２５８のそれぞれに対し電力を制御することができる。この例において、電力管理ユニットは、ＡＬＵｓ２５８Ａ及び２５８Ｂのうちの１つまたは複数の電力供給をオフにし、ＡＬＵｓ２５８Ａ及び２５８Ｂの他に電力を供給するように動作する。あるいは、コンポーネントがＡＬＵグループを備える場合には、電力管理ユニットは、ＡＬＵグループ２２８の他のものと独立したＡＬＵグループ２２８に対し供給された電力を制御することができる。非限定の例として、電力管理ユニットは、ＡＬＵグループ２２８ＢにおけるＡＬＵｓ２５８Ｂと独立したＡＬＵグループ２２８ＡにおけるＡＬＵｓ２５８Ａの電力を制御することができる。この例において、電力管理ユニットは、ＡＬＵｓ２５８Ａの電力供給をオフにするように、また、ＡＬＵグループ２２８ＢのＡＬＵｓ２５８Ｂの電力を供給するように動作する。
【００４１】
最小限度のフラグメントシェーディングが必要とされる場合では、ＧＰＵ１０４は、フラグメントシェーディングを実行するためにシェーダユニット２０６以外の処理エレメント１２８を構成することができる。１つまたは複数の実施形態にしたがって、必要とされる最小限度のフラグメントシェーディングは、下記で詳細に説明されるように、フラグメントシェーディングオペレーションを実行するようにプログラムされることができる処理エレメント１２８によって実行されることができる。そうすることにおいて、シェーダユニット２１０のリソースは、より関係するシェーディングオペレーション(more involved shading operations)に焦点を当てられることができ、シェーダユニット２１０のリソースは、電力を切られる(being power down)より関係するシェーディングオペレーションを実行するのに必要でない。
【００４２】
シェーダユニット２０６がフラグメントシェーディングオペレーションを実行しないように構成される場合には、ＴＳＣＲ２２０は、頂点シェーダスレッド２１０をスケジュールし、それらのそれぞれは、減らされた数の頂点を含むことができる。より具体的には、シェーダユニット２０６は、減らされた数のＡＬＵｓ２５８を使用して頂点を処理するように構成されており、一方で、同じユニット時間期間において同じレベルの出力（例、ＮＶ頂点）を生成しており、それは、シェーダユニット２０６が、シェーダユニット２０３がそう構成される各ユニット時間期間においてＡＬＵグループ２２８Ａ上で動作するために排他的に頂点シェーダスレッドをスケジュールするためである。
【００４３】
本開示の実施形態は、限定されない例として説明されているが、ＡＬＵグループ２２８あたりのＡＬＵｓ２５８の数は２である。そのような場合には、シェーダユニット２０６、特にＴＳＣＲ２２０は、ユニット時間期間において頂点シェーダスレッド２１０の数をスケジュールすることができる。各頂点シェーダスレッド２１０に関連づけられた頂点は、ＡＬＵグループ２２８Ａ及び２２８Ｂのうちの１つ、例えばＡＬＵグループ２２８Ａ、を使用して操作される。シェーダユニット２０６の第１のクロックサイクルにおいて、ＴＳＣＲ２２０は、第１頂点シェーダスレッド２１０をスケジュールしており、そしてそれは、ＡＬＵグループ２２８Ａを使用しているシェーダユニット２０６によって処理されている第１の頂点シェーダスレッド２１０に対応している第１セットの２つの頂点をもたらす。シェーダユニット２０６の第２クロックサイクルにおいて、ＴＳＣＲ２２０は、第２頂点シェーダスレッド２１０をスケジュールし、そしてそれは、別の２つの頂点をもたらし、それらの頂点は第２頂点シェーダスレッド２１０にあり、シェーダユニット２０６及びＡＬＵ２２８による処理である。したがって、ユニット時間期間において、期待された数の頂点を備えている１セットの頂点は、シェーダユニット２０６のＡＬＵｓ２５８の半分を使用して処理される。この配置により、ある数のＡＬＵｓ２５８はバイパスされることができ、そうでなければそのバイパスされたＡＬＵｓ２５８を動作するために消費された電力(the power otherwise consumed to operate the bypassed ALUs 258)は、使用されていないＡＬＵｓ２５８の電力を、縮小することによって、あるいは、完全にシャットオフすることによって、節電されることができる。
【００４４】
図３は、本開示の１つまたは複数の実施形態にしたがって使用のためにＧＰＵ１０４のグラフィックスパイプライン１０８の例を提供する。図３で示されているように、グラフィックスパイプライン１０８は、図１のコマンドデコーダ１２６、及び、図２の属性インタポラータ２０４、ピクセルブレンダ２０８、及びテクスチャエンジン２１２、を含んでいる。頂点シェーダ３０６はシェーダユニット２０６を使用してインプリメントされることができる。図３で示される例においては、１つまたは複数の実施形態にしたがって、フラグメントシェーダ３１８は、バイパスされており、そうでなければグラフィクスパイプライン１０８においてシェーダユニット２０６を使用してインプリメントされるであろう。ここにおいて開示される実施形態にしたがって、フラグメントシェーダ３１８がバイパスされる場合、フラグメントシェーダに転送されたであろう入力、例えばテクスチャエンジン２１２によって出力されたテクスチャ及び属性インタポラータ２０４によって出力されたカラー及び属性データ、はピクセルブレンダ２０８に転換される(diverted)。シェーダユニット２０６によって実行されないなんらかのフラグメントシェーディングが必要とされるように決定される場合、ピクセルブレンダ２０８は、そのブレンディングオペレーションに加えてフラグメントシェーディングを実行するように構成されることができる。
【００４５】
頂点シェーダ３０６に加えて、ＧＰＵ１０４のグラフィックス１０８は、プリミティブセットアップ及び拒絶モジュール３０８、属性グラディエントセットアップモジュール(attribute gradient setup module)３１０、ラスタライザ(rasterizer)３１２、隠れプリミティブ及びピクセル拒絶モジュール３１４、属性インタポラータ２０４、ピクセルブレンダ２０８、及びテクスチャエンジン２１２、を含む。
【００４６】
頂点シェーダ３０６は、イメージ内の頂点において、イメージの表面プロパティを決定する。このように、頂点シェーダ３０６は、イメージジオメトリ内で、頂点の頂点座標及び属性のそれぞれを生成する。頂点座標は、例えばイメージジオメトリ内で頂点のロケーションを識別するＸ、Ｙ、及びＺ（幅、高さ及び深さ）座標と、イメージジオメトリのための遠近パラメータを備えるＷ座標と、を備えた４次元座標システムに基づいてイメージジオメトリ内で頂点を識別する。頂点属性は、例えば、頂点に関連づけられた、カラー、法線、及びテクスチャの座標、を含むことができる。ここに開示された実施形態にしたがって、ＧＰＵ１０４内の頂点シェーダ３０６は、パイプライン１０８の他のステージに対し、頂点シェーダ３０６によって処理される頂点のための属性及び／または座標を作る。
【００４７】
プリミティブセットアップ及び拒絶モジュール３０８、属性グラディエントセットアップモジュール３１０、ラステライザ３１２、隠れプリミティブ及びピクセル拒絶モジュール３１４、及び属性インタポラータ２０４はそれぞれ、イメージジオメトリを処理するために頂点座標あるいは頂点属性を使用する。プリミティブセットアップ及び拒絶モジュール３０８は、イメージジオメトリ内で１つまたは複数の頂点でプリミティブをアセンブルし、プリミティブ頂点に関し遠隔プロジェクション及びビューポート変換を適用し、各プリミティブエッジについてエッジ係数を決定する。さらに、プリミティブセットアップ及び拒絶モジュール３０８は、例えば与えられたイメージフレームについての検討(consideration)からプリミティブあるいはその一部分を拒絶するかどうかを決定するためにプリミティブの頂点のＸＹ座標を使用してシザリング(scissoring)あるいはバックフェース選択(backface culling)を実行することにより、プリミティブを拒絶するどうかを決定するプリミティブを考察する(examine)ことができる。例えば、プリミティブあるいはプリミティブ部分は、例えばイメージフレーム内でオブジェクトの後方に位置されており、不可視にするように決定されることができ、その場合には、プリミティブあるいはその部分は、プリミティブセットアップ及び拒絶モジュール３０８によって拒絶されることができる。
【００４８】
属性グラディエントセットアップモジュール３１０は、イメージジオメトリのためのプリミティブに関連づけられた属性のグラディエントを計算する。現在開示されている実施形態にしたがって、属性グラディエントは、横方向（Ｘ）あるいは縦方向（Ｙ）のいずれかにおいて動いているプリミティブ内の、第１ピクセルにおける属性値と第２ピクセルにおける属性値との差異を備えている。属性グラディエントセットアップモジュール３１０は、属性グラディエントを計算するために頂点属性を使用する。
【００４９】
いったん属性グラディエント値が計算されると、ラステライザ３１２は、プリミティブ内の頂点のそれぞれのＸＹ座標と、プリミティブに含まれるピクセルの数と、に基づいて、ピクセルにイメージジオメトリのためのプリミティブを変換する。隠れプリミティブ及びピクセル拒絶モジュール３１４は、例えばプリミティブ内の頂点のＺ座標に基づいて初期深さ及びステンシルテスト(early depth and stencil test)を使用して、プリミティブ内で隠れプリミティブ及び隠れピクセルを拒絶する。プリミティブあるいはプリミティブ内のピクセルは、隠れであると検討され(considered)、例えばプリミティブあるいはプリミティブ内のピクセルがイメージフレーム内で別のオブジェクトの後ろに位置されるとき、イメージの特定フレームの処理の間、検討から拒絶されることができる。
【００５０】
属性インタポラータ２０４は、属性グラディエント値に基づいて、プリミティブ内のピクセルにわたって、属性を補間する。フラグメントシェーダスレッドは、属性インタポラータ２０４による処理の最後にパッキングされ(packed)、通信回線２３４を介してシェーダユニット２０６に通信される。属性インタポラータ２０４は、イメージジオメトリ内で拒絶されたプリミティブに関連づけられた頂点の属性を無視することができる。１つまたは複数の実施形態にしたがって、補間された属性値は、フラグメントシェーダ３１８をバイパスして、ピクセルブレンダ２０８への入力となる。ピクセルブレンダ２０８の結果は、ディスプレイユニット１２４のような、出力デバイスを使用して、処理された画像のプレゼンテーション(presentation)のために出力されることができる。
【００５１】
図３の例で図示されているように、頂点シェーダ３０６からの出力、例えば頂点シェーダ３０６によって生成されるテクスチャデータ、は、グラフィクスパイプライン１０８による後続処理における使用のために、テクスチャエンジン２１２に対して出力することができる。さらに、頂点シェーダ３０６は、頂点シェーダ３０６を使用するテクスチャデータを検索するために、テクスチャエンジン２１２に対しテクチャデータルックアップリクエスト(texture data lookup request)を投入(submit)ことができる。図２を参照すると、ロード制御モジュール２２２は、例えばテクスチャエンジン２１２を介して、頂点シェーダスレッド２１０のためにテクスチャデータをサンプリングすることができる。
【００５２】
フラグメントシェーダ３１８がグラフィクスパイプライン１０８で実行される場合に（例えば、それはバイパスされていない）、属性インタポラータ２０４は、フラグメントシェーダ３１８に対して、その出力、例えばピクセル属性／カラーデータ、を転送する。さらに、属性インタポラータ２０４は、テクスチャエンジン２１２に対し、初期テクスチャのためのリクエストを投入する。これに応じて、テクスチャエンジン２１２は、フラグメント３１８をインプリメントしているシェーダスレッド２１０による使用のために、そのリクエストされたテクスチャを得て、ロードコントローラ２２２と通信回線２３８及び２６０とを介してレジスタファイルバンク２６２にそれらを転送する。
【００５３】
あるいは、フラグメントシェーダ３１８がバイパスされ、ある最小限度のフラグメントシェーディングが実行される予定である場合、初期テクスチャのためのリクエストは、属性インタポラータ２０４からテクスチャエンジン２１２に投入される。これに応じて、テクスチャエンジン２１２は、ピクセルブレンダ２０８にそのリクエストされたテクスチャを転送し、そしてそれは、ピクセルブレンダ２０８によって実行されるフラグメントシェーディングオペレーションにおいてテクスチャデータを使用する。再び図２を参照すると、入力／出力（Ｉ／Ｏ）バス２３８は、テクスチャ、例えば前のオペレーションから生じるテクスチャを備えている従属テクスチャを、ロードコントローラ２２２を介して、テクスチャエンジン２１２に及びテクスチャエンジン２１２から、受け渡す。属性インタポラータ２０４は、通信回線２５４を介してテクスチャエンジン２１２から、初期テクスチャをリクエストする。これに応じて、テクスチャエンジン２１２は、通信回線２５２を介して、ピクセルブレンダ２０８に対して、初期テクスチャを転送する。上記で説明されるように、フラグメントシェーダスレッド２１０によって使用されていないレジスタファイルバンク、例えばレジスタファイルバンク２６２Ｂは、ピクセルブレンダ２０８に対し入力のために属性インタポラータ２０４によって出力された、カラー値、そしてノンテクスチャデータのような他のデータ、を保存するためにＦＩＦＯバッファとして使用されることができる。レジスタファイルバンク２６２のある部分を備えているＦＩＦＯバッファに保存されたデータは、通信回線２４０を介して、ピクセルブレンダに対して入力される。シェーダユニット２０６がフラグメントシェーディングをバイパスするときに属性／カラー値はピクセルブレンダ２０８に対してシェーダユニット２０６のレジスタファイルバンク２６２を介して送信されるということをさらに図示するために、図３の中で、属性インタポラータ２０４とフラグメントシェーダ３１８の間で、フラグメントシェーダ３１８とピクセルブレンダ２０８の間で点線が示されている。
【００５４】
ピクセルブレンダ２０８による初期処理の間に、レジスタファイルバンク２６２ＦＩＦＯからのカラーデータは、テクスチャエンジン２１２から、ピクセルブレンダ２０８によって受信される初期テクスチャで同期化される。１つまたは複数の実施形態にしたがって、また、なんらかのフラグメントシェーディング、例えばテクスチャ組み合わせ(texture combining)、が実行される予定である場合に、ピクセルブレンダ２０８は、フラグメントシェーディング機能あるいはテクスチャ組み合わせ機能を、実行するあるいはエミュレートするように構成されている。ピクセルブレンダ２０８、ピクセルブレンダ２０８によって実行されるフラグメントシェーディングオペレーション（単数または複数）の結果に関して、ブレンディング、例えばアルファブレンディング、を実行するようにさらに構成されている。
【００５５】
ここにおいて開示されたそのような実施形態のうちの１つまたは複数にしたがって、プログラマブルグラフィックス処理エレメント(programmable graphics processing element)（ＰＧＰＥ）は、プログラムエレメント１２８のうちの１つまたは複数をインプリメントするために使用されることができる。例えば、そのような実施形態にしたがって、ＰＧＰＥは、ピクセルブレンダをインプリメントするために使用されることができ、そしてそれは、いずれかが必要である場合、シェーダユニット２０６によって実行されないフラグメントシェーディングに加えて、ブレンディングを実行するようにプログラムされる。そのような実施形態の１つまたは複数にしたがって、ＰＧＰＥは、例えば、「プログラマブルグラフィクス処理エレメント(Programmable Graphics Processing Element)」（クァルコムドケット番号070380）、と題された米国出願番号  ／    において説明されているようなＰＧＰＥであることができ、その内容は、参照によってここにおいて組み込まれている。
【００５６】
１つまたは複数の実施形態にしたがって、ＰＧＰＥは、インストラクションセットを実行することができ、そしてそれは、ＰＧＰＥを使用して実行されることが必要な機能によって変わることができる。図４は、例示的なＰＧＰＥ４０５を図示しているブロック図である。図４の例で図示されているように、ＰＧＰＥ４０５は、入力モジュール４３０を備えており、そしてそれは、入力として、ここではピクセルオブジェクトと呼ばれるピクセルに対応するデータを受信する。例えば、ＰＧＰＥ４０５は、処理エレメント１２８、メモリモジュール１１６、レジスタファイルバンク２６２、等のうちの１つまたは複数から、１つまたは複数のピクセルオブジェクトを受信することができる。
【００５７】
１つまたは複数の実施形態にしたがって、入力モジュール４３０は、フォーマット変換を実行するために１つまたは複数の算術論理演算ユニット（ＡＬＵｓ）４４４を使用する。示された例において、ＡＬＵｓ（単数または複数）４４４は、ＡＬＵアレイの一部であるＡＬＵ４３４である。ＡＬＵｓ４４４のそれぞれは、いくつかの非限定の例として、他のタイプの算術演算を含んでいる、単独乗算(single-multiplication)、ダブル乗算(double-multiplication)、２Ｄ内積(2D dot product)、最大オペレーション(maximum operation)、レジスタコピーオペレーション(register copy operation)、ガンマエンコーディング(gamma-encoding)、ガンマデコーディングオペレーション(gamma-decoding operation)、及び／または、他のタイプのオペレーション、のような算術演算を実行することができる。ＡＬＵアレイ４３４は、例えば、カラーコンポーネントあたり、８ビット整数、１０ビット整数、１６ビット浮動小数点、３２ビット浮動小数点、等の値を使用することができる。ＡＬＵｓ４４４は、単一スレッド(single threaded)あるいはマルチスレッド(multi-threaded)であってもよい。
【００５８】
入力モジュール４３０は、単一化されたレジスタファイル４３２におけるレジスタにおいて、中間値、例えばフォーマット変換の結果、を保存することができ、例えば、レジスタファイルは、ある数のハードウェアレジスタを備えている。ＡＬＵアレイ４３４のインプリメンテーションに依拠して、例えば、各ハードウェアレジスタは、カラーコンポーネントを表す４つの８ビット整数、カラーコンポーネントを表す４つの１０ビット整数、カラーコンポーネントを表す４つの１６ビット浮動小数点値、等を保存することができる。
【００５９】
ＰＧＰＥ４０５におけるインストラクション実行モジュール(instruction execution module)（ＩＥＭ）４３６は、インストラクションモジュール４３８から、プログラムカウンタ４４６を使用して、識別される１つまたは複数のインストラクションをフェッチする。インストラクションモジュール４３８は、例えば、ハードウェアレジスタ、同期化されたランダムアクセスメモリ(synchronized random access memory)（ＳＲＡＭ）等を使用して、多数のインストラクション(a number of instruction)を保存することなどができる。ＩＥＭ４３６は、フェッチされたインストラクションを復号し、そして、その復号されたインストラクションによって規定されるようなオペランドをフェッチする。ＩＥＭ４３６は、例えば単一化されたレジスタファイル(unified register file)４３２、及び／または、定数レジスタファイル(constant register file)４４０から、オペランドをフェッチすることができる。レジスタファイル４３２と同様に、定数レジスタファイル４４０は、例えば、ハードウェアレジスタ及び／またはＳＲＡＭを備えることができる。定数レジスタファイル４４０は、限定されない例として、ブレンディングファクタ、レガシ２Ｄラスタオペレーション(Raster Operation)（ＲＯＰ）のためのパターン、あるいは、他の定数値、を保存することができる。
【００６０】
インストラクションは、ＩＥＭ４３６に、一体化されたレジスタファイル４３２における１つまたは複数のレジスタにおいて保存されるピクセルオブジェクトから１つまたは複数のカラーコンポーネントを抽出させ、そして、オペランドとしてこれらのカラーコンポーネントを使用させることができる。例えば、一体化されたレジスタファイル４３２におけるレジスタに保存されたピクセルオブジェクトは、カラーコンポーネントにあたり８ビットを有しているＲＧＢＡフォーマットにフォーマットされることができる。ピクセルオブジェクトがＲＧＢＡフォーマットにフォーマット化されるとき、ビット０−７は、赤コンポーネントを表し、ビット８−１５は、緑コンポーネントを表し、ビット１６−２３は、青コンポーネントを表し、そして、ビット２４−３１は、アルファコンポーネントを表すことができる。ピクセルのアルファコンポーネントは、ピクセルの透明のレベル(level of transparency of the pixel)を表す。この例を使用して、また、１つの例示的なインストラクションにしたがって、ＩＥＭ４３６は、ピクセルオブジェクトの赤コンポーネントを抽出し、オペランドとしてその赤コンポーネントを使用し、例えば、ピクセルオブジェクトのビット０−７である。他のインストラクションは、ＩＥＭ４３６に、ピクセルオブジェクトから、異なるあるいはマルチプルのコンポーネント、例えばカラー及び／またはアルファコンポーネント、を抽出するように、命令することができる。別の例において、深さ／ステンシルグラフィクスオペレーションにおけるインストラクションは、ＩＥＭ４３６に、一体化されたレジスタファイル４３２におけるレジスタのうちの１つにおけるピクセルオブジェクトから、ステンシル値あるいはＺ値を抽出するように、命令することができる。
【００６１】
インストラクションは、ＡＬＵアレイ４３４に対してオペランドを提供する前に、ＩＥＭ４３６に、オペランドを修正するように、命令することができる。いくつかの例では、インストラクションは、どのようにオペランドを修正するかをＩＥＭ４３６に命令するために、いわゆるソース識別子を使用することができる。例えば、インストラクションは、ＩＥＭ４３６に、オペランドの負（”−”）を提供するように、オペランドの絶対値（” abs”）を提供するように、あるいは、オペランドの逆数値(inverted value)「”~”」を提供するように、命令することができる。逆オペレーション(inverting operation)は、法線化された整数表示(normalized integer representation)における(1.0-x)のオペレーションを計算する。
【００６２】
オペランドをフェッチした後で、ＩＥＭ４３６は、ＡＬＵアレイ４３４、特にＡＬＵアレイ４３４における１つまたは複数のＡＬＵｓ４４４、にフェッチされたオペランドを使用して復号されたインストラクションによって規定された１つまたは複数の算術演算を実行するように、命令することができる。ＡＬＵアレイ４３４が算術演算を実行し終わるとき、ＡＬＵアレイ４３４は、ＩＥＭ４３６に戻って、結果として生じる値(resulting value(s))（単数または複数）を通信することができる。ＩＥＭ４３６がＡＬＵアレイ４３４から結果（単数または複数）を受信するとき、ＩＥＭ４３６は、一体化されたレジスタファイル４３２において結果（単数または複数）を保存する。ＩＥＭ４３６は、別の算術演算に関連して、１つまたは複数のオペランドとして、ＡＬＵアレイ４３４に対する一体化されたレジスタファイル４３２において保存された値（単数または複数）を提供することができる。
【００６３】
プログラムカウンタ４４６は、インストラクションモジュール４３８における次のインストラクションを識別するためにインクリメントされ(incremented)、そしてそれは、新しい「現在のインストラクション(current instruction)」として実行のためにフェッチされることができる。これは、インストラクションのすべてが処理されるまで、継続する。
【００６４】
図４の例で図示されるように、ＰＧＰＥ４０５は、出力モジュール４４２を含むことができる。出力モジュール４４２は、例えば、一体化されたレジスタファイル４３２からデータを読み取り、グラフィクスパイプライン１０８の別の処理エレメント１２８における使用のためにデータを出力することができる。出力モジュール４４２は、例えば連続あるいは並列な方法で、複数のロケーションにデータを出力できる。出力モジュール４４２は、データを出力する前に、データに関して１つまたは複数のフォーマット変換を実行するために、ＡＬＵアレイ４３４を使用することができる。
【００６５】
１つまたは複数の実施形態にしたがって、例として図４を使用して、ＡＬＵｓ４４４は、入力モジュール４３０、ＩＥＭ４３６、及びモジュール４４２、によって共有されており、それらのそれぞれは、ＡＬＵ４４４によって動作される予定であるデータを得て、そして、インストラクションとその得られたデータを実行のためにＡＬＵ４４４に対し送信することに責任を有する。オペレーションの完成の後で、ＡＬＵ４４４は、ＡＬＵ４４４への入力を供給するモジュールに対して、結果を戻す。したがって、そのような例では、ＡＬＵ４４４は、別のモジュールのコマンドの下でオペレーションを実行することに責任を有するスレーブ(slave)として作用しており、そしてそれは、ＡＬＵ４４４に、ＡＬＵ４４４によって操作される予定である入力を、また、ＡＬＵ４４４によって実行される予定であるインストラクションを、供給する。そのような場合では、ＡＬＵ４４４は、レジスタファイルから、例えば一体化されたレジスタファイル４３２及び／または定数レジスタファイル４４０、ソース入力を読み取ること、あるいは、レジスタファイルに結果を書き込むこと、について責任を有さない。
【００６６】
代わりに、１つまたは複数の実施形態にしたがって、ＡＬＵｓ４４４は、入力モジュール４３０、ＩＥＭ４３６、及び出力モジュール４４２によって共有されるが、ＡＬＵｓ４４４は、１つまたは複数のレジスタファイルから入力ソースデータを読み取ることについて責任を有し、そして、１つまたは複数のレジスタファイルに対し結果を出力することに責任を有することができる。そのような場合では、ＡＬＵ４４４は、別のモジュール、例えば入力モジュール４３０、ＩＥＭ４３６、及び出力モジュール４４２、からインストラクションを受信し、レジスタファイルのうちの１つまたは複数から入力ソースデータを読み取り、入力モジュール４３０、ＩＥＭ４３６、あるいは出力モジュール４４２から受信されたインストラクション／コマンドに基づいて１つまたは複数のオペレーションを実行し、そして、１つまたは複数のレジスタファイルにその結果として生じているデータを書き込む。
【００６７】
そのような代わりのケースでは、ＡＬＵアレイ４３４と一体化されたレジスタファイル４３２との間の読み取り／書き込みの通信経路（図４で示されていない）は、入力モジュール４３０、ＩＥＭ４３６、あるいは出力モジュール４４２から受信された制御信号情報に基づいて、一体化されたレジスタファイル４３４への／からの、データ入力／出力のためにＡＬＵ４４４によって使用されることができる。同様に、読み取り通信経路（図４に示されていない）は、入力モジュール４３０、ＩＥＭ４３６、あるいは出力モジュール４４２から受信された制御信号情報に基づいて、定数レジスタファイル４４０からＡＬＵ４４４までの定数データ(constant data)の入力のためにＡＬＵアレイ４３４によって使用されることができる。通信経路は、例えば、定数レジスタファイル４４０あるいは一体化されたレジスタファイル４３４と、入力モジュール４３０のうちの１つまたは複数、ＩＥＭ４３６、及び出力モジュール４４２、との間の通信経路の代わりに生じることができる。
【００６８】
１つまたは複数の実施形態にしたがって、ＡＬＵアレイ４３４は、同じ、あるいは、異なるクロックサイクルにおいて同時に、カラーコンポーネント及びアルファコンポーネントのためのインストラクションを実行することができる。
【００６９】
１つまたは複数の実施形態にしたがって、ＰＧＰＥ４０５を使用して実行される各インストラクションは、オペレーションコード（opcode）を規定する単独シンタクス、ある数のデスティネーションレジスタ、例１つまたは２つのデスティネーションレジスタ、そして、ある数のソースレジスタ、例４つのソースレジスタ、に適合させることができる。インストラクションで規定されたソースレジスタは、例えば、単一化されたレジスタファイル４３２におけるレジスタ、定数レジスタファイル４４０におけるレジスタ、あるいは、データを保存する別の場所(location)、であってもよい。
【００７０】
本開示の実施形態にしたがって使用するためのインストラクションセットは、いずれの数及びタイプのインストラクションを備えることができ、各インストラクションは、多数のオペランド上で操作することができる。インストラクションセットは、入力／出力、算術（例えば、加算、乗算、引き算、逆数、ガンマ復号、ガンマエンコード、等）、比較（例、最小、最大、比較、等）、ロジック（例、もし(if)、他に(else)、他に(else)、そしてその場合(endif)、等）、バイナリ（例、及び(and)、あるいは(or)、排他的論理和をとる(xor)、ない(not)、等）、バインディング(binding)、移動(move)、及びエンドインストラクション(end instruction)、を含むことができる。
【００７１】
ある数の様々な及び異なるグラフィクスオペレーションのいずれもが、ＰＧＰＥ４０５を使用してインプリメントされるインストラクションセット、を使用して実行されることができる。１つまたは複数の実施形態にしたがって、ＰＧＰＥ４０５は、シェーダユニット２０６を使用して実行されないフラグメントシェーディングオペレーションに加え、そのようなインストラクションセットを使用している１つまたは複数のブレンディングオペレーションをインプリメントするように構成されることができる。
【００７２】
１つまたは複数の実施形態にしたがって、ピクセルブレンダ２０８は、テクスチャデータで、レジスタファイルバンク２６２を使用してインプリメントされるＦＩＦＯから受信されたカラーデータを同期させる。その後で、ピクセルブレンダ２０８は、テクスチャ組み合わせオペレーションを使用して、例えばプライマリ及びセカンダリ入力ピクセルオブジェクトを使用して、ある量のフラグメントシェーディングを実行することができる。そのような場合においては、ピクセルブレンダ２０８は、属性インタポラータ２０４からプライマリ入力ピクセルオブジェクトを、例えばレジスタファイルバンク２６２を使用して提供されるＦＩＦＯを介して、そしてセカンダリ入力ピクセルオブジェクトを、受信する。セカンダリ入力ピクセルオブジェクトは、例えばテクスチャエンジン２１２によって実行されることができるフィルタリングファクタ及び／または重みと一緒に、テクスチャフィルタリングオペレーションを使用して生成されるテクスチャマッピングされるピクセルのためのテクスチャカラーと、近隣テクセルとして識別されるテクスチャピクセル（テクセル）のカラーと、を規定する、ピクセルオブジェクトであることができる。
【００７３】
テクスチャフィルタリングオペレーションを使用して生成された新しいピクセルオブジェクトは、セカンダリ入力ピクセルオブジェクトによって規定された近くのテクセル(nearby texels)のカラーを使用している、テクスチャマッピングされたピクセルのためのテクスチャカラーを規定する。新しいピクセルオブジェクトは、フラグメントシェーディングオペレーション、例えばテクスチャ組み合わせオペレーション、を実行するために、ピクセルブレンダ２０８に対するピクセルオブジェクト入力のうちの１つとして、ピクセルブレンダ２０８に対して供給されることができる。ピクセルブレンダ２０８がＰＧＰＥ４０５を使用してインプリメントされる場合では、テクスチャ組み合わせオペレーションを実行するために、ＰＧＰＥ４０５は、プライマリ入力ピクセルオブジェクトと、セカンダリ入力ピクセルオブジェクトと、を使用する。その結果は、結果に関してピクセルブレンディングオペレーションを実行することにおいて、ピクセルブレンダ２０８によるアクセスのために保存されることができる。１つまたは複数の実施形態にしたがって、ＰＧＰＥ４０５は、ＯｐｅｎＶＧ ＡＰＩの、ＶＧ ＢＬＥＮＤ ＭＵＬＴＩＰＬＹモード、ＶＧ ＢＬＥＮＤ ＳＣＲＥＥＮモード、ＶＧ ＢＬＥＮＤ Ｄ ＡＲＫＥＮモード、あるいは、いくつかの限定されない例としてのＰｏｒｔｅｒ−Ｄｕｆｆ「ソース」オペレーション、「デスティネーション・オーバー・ソース(destination over source)」オペレーション、「ソース・イン・デスティネーション(source in destination)」オペレーション、及び「デスティネーション・イン・ソース(destination in source)」オペレーション、のようなＰｏｒｔｅｒ−Ｄｕｆｆブレンディンググラフィクスオペレーション、をインプリメントするために使用されることができる。ＰＧＰＥ４０５は、シェーダユニット２０６と比較してサイズが比較的小さいので、ＰＧＰＥ４０５上で同じ量のオペレーションを実行するのに、より少ない電力を消費することができる。
【００７４】
１つまたは複数の例示的な実施形態において、説明された機能は、ハードウェア、ソフトウェア、及び／または、ファームウェア、あるいは、それらのいずれの組み合わせ、においてインプリメントされることができる。ハードウェアでインプリメントされる場合には、機能は、１つまたは複数のマイクロプロセッサ、マイクロコントローラ、デジタルシグナルプロセッサ（ＤＳＰｓ）、特定用途向け集積回路（ＡＳＩＣｓ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡｓ）、あるいは同様なもの、においてインプリメントされることができる。そのようなコンポーネントは、通信システム、データ書き込み及び／または読み取りシステム、あるいは他のシステム、の中で存在することができる。ソフトウェアでインプリメントされる場合には、機能は、コンピュータ可読媒体上の１つまたは複数のインストラクションあるいはコードとして、保存されあるいは送信されることができる。コンピュータ可読媒体(Computer-readable media)は、タンジブルコンピュータストレージ媒体(tangible computer storage media)と、１つの場所から別の場所へとコンピュータプログラムの転送を容易にするいずれの媒体をも含む通信媒体と、を含んでいる。ストレージ媒体は、コンピュータによってアクセスされることができる、いずれの利用可能な媒体であることができる。例として、限定されるものではなく、そのようなコンピュータ可読媒体は、ＲＡＭ、フラッシュメモリ、読み取り専用メモリ（ＲＯＭ）、電子的に消去可能なプログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）あるいは他の光学ディスクストレージ、磁気ディスクストレージあるいは他の磁気ストレージデバイス、あるいは、インストラクションあるいはデータストラクチャの形で望ましいプログラムコードを保存するために使用されることができる、また、コンピュータによってアクセスされることができる、いずれの他の媒体、を備えることができる。用語「コンピュータ可読媒体(computer-readable medium)」はまた、タンジブルコンピュータプログラムプロダクト(tangible computer program product)として、定義されることができる。ここ
に使用されているように、ディスク(disk)とディスク(disc)は、コンパクトディスク(compact disc)（ＣＤ）、レーザーディスク（登録商標）(laser disc)、光学ディスク(optical disc)、デジタル汎用ディスク(digital versatile disc)（ＤＶＤ）、フロッピー（登録商標）ディスク(disk)およびブルーレイディスク(blu-ray disc)を含んでおり、「ディスク(disks’)」は、大抵、データを磁気で再生しているが、「ディスク(discs’)」は、レーザーで光学的に再生する。上記の組み合わせはまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【００７５】
装置及び方法が最も実践的で好ましい実施形態であると現在考えられている点から説明されているが、本開示は開示された実施形態に限定される必要はないと理解されるべきである。特許請求の範囲の精神及び範囲内に含まれる、様々な修正及び同様の組み合わせ(arrangement)を包含するように意図されており、その範囲は、すべてのそのような修正及び同様な構造を含有するように最も広い解釈を与えられるべきである。本開示は、特許請求の範囲のいずれの及びすべての実施形態を含む。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［付記］
［１］グラフィクス処理ユニットを使用するための方法であって、
頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能なシェーダユニットがフラグメントシェーディングをバイパスすべきかどうかの決定を行なうために構成情報を使用することと、
前記シェーダユニットを使用して頂点シェーディングを実行することと、
前記シェーダユニットがフラグメントシェーディングをバイパスするという決定に基づいて、前記シェーダユニットによってフラグメントシェーディングをバイパスすることと、を備える方法。
［２］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記方法は、
前記シェーダユニットのある数の算術論理演算ユニットの電力をオフにし、前記算術論理演算ユニットの残りに電力を供給することと、なお、前記残りは、前記シェーダユニットの減らされた数の前記算術論理演算ユニットを備えている；
前記減らされた数の算術論理ユニットを使用して頂点シェーディングを実行するために、ある数の頂点シェーダスレッドをスケジュールすることと、なお、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；
をさらに備えている、［１］記載の方法。
［３］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記方法は、
前記シェーダユニットの少なくとも１つのスレッドパッキングバッファと、前記少なくとも１つのスレッドパッキングバッファから前記シェーダユニットへと情報を通信するために使用される入力バスと、の電力をオフにすることと、
をさらに備えている、［１］記載の方法。
［４］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記方法は、
前記シェーダユニット以外の処理ユニットを使用してフラグメントシェーディングを実行することと；
前記の他の処理ユニットのためのバッファとして前記シェーダユニットのレジスタバンクを使用することと、なお、前記シェーダユニットのレジスタバンクは、フラグメントシェーディングを実行する前記の他の処理ユニットによる使用のために、ピクセルカラーデータを含んでいるピクセル属性データを保存するために使用されている；
他の場合には前記シェーダユニットによって使用されるテクスチャデータを前記他の処理ユニットに転送することと；
をさらに備えている、方法。
［５］前記の他の処理ユニットはピクセルブレンダを備えている、［４］記載の方法。
［６］フラグメントシェーディングを実行するために使用される前記の他の処理ユニットは、プログラマブルグラフィクス処理ユニットを備えており、前記方法は、
前記プログラマブルグラフィクス処理エレメントによって、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを実行することと、
をさらに備えている、［４］記載の方法。
［７］頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能であるシェーダユニットがフラグメントシェーディングをバイパスすべきかどうかの決定を行なうために、構成情報を使用するように構成されたコマンドデコーダを備えているグラフィクス処理ユニットと、
を備えており、前記グラフィクス処理ユニットに結合されている前記シェーダユニットは、
頂点シェーディングを実行するように、
前記シェーダユニットがフラグメントシェーディングをバイパスするという決定に基づいてフラグメントシェーディングをバイパスするように、
構成されている、装置。
［８］前記シェーダユニットは、複数の算術論理演算ユニットを備えており、前記装置は、前記複数の算術論理演算ユニットに結合された電力管理ユニットと、なお、前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記電力管理ユニットは、ある数の前記算術論理演算ユニットの電力をオフにし、前記算術論理演算ユニットの残りに電力を供給するように構成されており、前記残りは、減らされた数の前記複数の算術論理ユニットを備えている；
前記シェーダユニットのスケジューラと、なお、前記スケジューラは、前記減らされた数の算術論理演算ユニットを使用して前記頂点シェーディングを実行するためにある数の頂点シェーダスレッドをスケジュールするように構成されており、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；
を備えている、［７］記載の装置。
［９］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記電力管理ユニットは、スレッドパッキングバッファと、前記スレッドパッキングバッファから前記シェーダユニットに情報を通信するために使用された入力バスと、の電力の供給をオフにするようにさらに構成されている、［８］記載の装置。
［１０］前記シェーダユニットが前記シェーダユニットによってフラグメントシェーディングをバイパスするという決定に基づいて、前記シェーダユニット以外の処理ユニットは、フラグメントシェーディングを実行するように構成されており、前記シェーダユニットのレジスタバンクは、前記の他の処理ユニットのためのバッファとして使用されており、前記シェーダユニットのバッファは、フラグメントシェーディングを実行する前記他の処理ユニットによる使用のために、ピクセルカラーデータを含んでいるピクセル属性データを保存している、［７］記載の装置。
［１１］前記の他の処理ユニットは、ピクセルブレンダを備えており、前記ピクセルブレンダは、前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいてフラグメントシェーディングを実行するように構成されている、［１０］記載の装置。
［１２］フラグメントシェーディングを実行するために使用された前記の他の処理ユニットは、プログラマブルグラフィクス処理エレメントを備えている、［１０］記載の装置。
［１３］前記プログラマブルグラフィクス処理エレメントは、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを実行するように構成されている、［１２］記載の装置。
［１４］コンピュータ実行可能プログラムコードが保存されるコンピュータ可読メモリ媒体であって、前記プログラムコードは、グラフィクス処理ユニットを使用するための前記プログラムコードで、
頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能なシェーダユニットがフラグメントシェーディングをバイパスすべきかどうかの決定を行なうために構成情報を使用するコード、
前記シェーダユニットを使用して頂点シェーディングを実行するコード、
前記シェーダユニットがフラグメントシェーディングをバイパスするという決定に基づいて、前記シェーダユニットによってフラグメントシェーディングをバイパスするコード、
を備えている、媒体。
［１５］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記コードは、
前記シェーダユニットのある数の算術論理演算ユニットの電力をオフにし、前記算術論理演算ユニットの残りに電力を供給するコードと、なお、前記残りは、前記シェーダユニットの減らされた数の前記算術論理演算ユニットを備えている；
前記減らされた数の算術論理ユニットを使用して頂点シェーディングを実行するために、ある数の頂点シェーダスレッドをスケジュールするコードと、なお、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；
をさらに備えている、［１４］記載の媒体。
［１６］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記コードは、
前記シェーダユニットの少なくとも１つのスレッドパッキングバッファと、前記少なくとも１つのスレッドパッキングバッファから前記シェーダユニットへと情報を通信するために使用された入力バスと、の電力をオフにするコードと、をさらに備えている、［１５］記載の媒体。
［１７］前記シェーダユニットがフラグメントシェーディングをバイパスするという前記決定に基づいて、前記コードは、
前記シェーダユニット以外の処理ユニットを使用してフラグメントシェーディングを実行するコードと；
前記の他の処理ユニットのためのバッファとして前記シェーダユニットのレジスタバンクを使用するコードと、なお、前記シェーダユニットのレジスタバンクは、フラグメントシェーディングを実行する前記の他の処理ユニットによる使用のために、ピクセルカラーデータを含んでいるピクセル属性データを保存するために使用されている；
他の場合には前記シェーダユニットによって使用されるテクスチャデータを前記他の処理ユニットに転送するコードと；
をさらに備えている、［１４］記載の媒体。
［１８］前記の他の処理ユニットはピクセルブレンダを備えている、［１７］記載の媒体。
［１９］前記の他の処理ユニットは、プログラマブルグラフィクス処理ユニットを備えており、前記コードは、フラグメントシェーディングを実行するために前記プログラマブルグラフィクス処理ユニットを構成するコードをさらに備えており、フラグメントシェーディングは、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを備えている、［１７］記載の媒体。
［２０］グラフィクス処理手段を備える装置であって、前記グラフィクス処理手段は、
頂点シェーディング及びフラグメントシェーディングの両方を実行することが可能なシェーディング手段がフラグメントシェーディングをバイパスするかどうかについて、構成情報を使用して、決定を行なうためのコマンド復号手段を備えており、
前記シェーディング手段は、前記グラフィクス処理手段に結合されており、前記シェーディング手段は、頂点シェーディングを実行し、オプションとしてフラグメントシェーディングを実行するためのものであり、前記シェーディング手段は、前記シェーディング手段がフラグメントシェーディングをバイパスするという前記コマンド復号手段の決定に基づいて、フラグメントシェーディングをバイパスする、装置。
［２１］前記シェーディング手段は複数の算術論理演算ユニットを備えており、前記装置は、前記複数の算術処理手段の電力の供給を管理するための電力管理手段と、なお、前記電力管理手段は、ある数の前記算術処理手段の電力がオフにされ、前記算術処理手段の残りに対して電力が供給され、前記残りは、減らされた数の前記複数の算術処理手段を備えるように、前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記複数の算術処理手段の電力を管理している；
前記シェーディング手段のスケジューリング手段と、なお、前記スケジューリング手段は、シェーダスレッドをスケジュールするためのものであり、前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記スケジューリング手段は、前記減らされた数の算術処理手段を使用して前記頂点シェーディングを実行するためにある数の頂点シェーダスレッドをスケジュールし、各頂点シェーダスレッドは、減らされた数の頂点上で動作する；［２０］記載の装置。
［２２］前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記電力管理手段は、スレッドパッキングバッファと、前記スレッドパッキングバッファから前記シェーディング手段に対し情報を通信するために使用される入力バスと、の電力をオフにするために、電力の供給を管理する、［２１］記載の装置。
［２３］前記シェーディング手段がフラグメントシェーディングをバイパスするという前記決定に基づいて、前記シェーディング手段以外の処理手段がフラグメントシェーディングのために使用されており、前記シェーディング手段のレジスタバンクは、前記の他の処理手段のためのバッファとして使用されており、前記バッファは、ピクセルカラーデータを含んでいるピクセル属性データを保存している、［２０］記載の装置。
［２４］前記の他の処理エレメントは、ピクセルブレンダを備えている、［２３］記載の装置。
［２５］フラグメントシェーディングを実行するために使用される前記の他の処理ユニットは、プログラマブルグラフィクス処理エレメントを備えており、前記プログラマブルグラフィクス処理エレメントは、テクスチャ組み合わせ及びピクセルブレンディングのオペレーションを実行するように構成されている、［２３］記載の装置。
【図１】
0005563054.tif 000002
【図２】
0005563054.tif 000003
【図３】
0005563054.tif 000004
【図４】
0005563054.tif 000005