(57)【特許請求の範囲】
【請求項１】
プロセッサにより実行される方法であって、
前記プロセッサにより、バッファから取得した複数の画素の領域内における１つの画素内の複数のサンプルを解析して、前記領域内でサンプルごとのシェーディングを使用するかどうかを決定する段階と、
前記領域内で前記サンプルごとのシェーディングを使用しないと決定した場合、前記プロセッサにより、前記バッファから取得した前記複数の画素の前記領域内における各画素の代表サンプルを解析して、画素ごとのシェーディングを使用するかどうかを決定する段階と、
前記画素ごとのシェーディングを使用しないと決定した場合、前記プロセッサにより、複数の画素の領域ごとのシェーディングを使用すると決定する段階と、
を含む方法。
【請求項２】
前記画素ごとのシェーディングを使用すると決定した場合、前記プロセッサにより、前記１つの画素内の前記複数のサンプルに対してシェーディング結果を再利用する段階を含む、請求項１に記載の方法。
【請求項３】
前記複数の画素の領域ごとのシェーディングを使用すると決定した場合、前記プロセッサにより、前記領域内における前記複数の画素に対してシェーディング結果を再利用する段階を含む、請求項１または２に記載の方法。
【請求項４】
前記サンプルを解析する段階が、サンプルが基準サンプルとどのくらい異なるかを決定する段階を含む、請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記サンプルを解析する段階が、前記領域がどのくらい滑らかであるかを決定する段階を含む、請求項１から４のいずれか一項に記載の方法。
【請求項６】
プロセッサにより実行されると、前記プロセッサの実行ロジックに、
バッファから取得した複数の画素の領域内における１つの画素内の複数のサンプルを解析して、前記領域内でサンプルごとのシェーディングを使用するかどうかを決定すること、
前記領域内で前記サンプルごとのシェーディングを使用しないと決定した場合、前記バッファから取得した前記複数の画素の前記領域内における各画素の代表サンプルを解析して、画素ごとのシェーディングを使用するかどうかを決定すること、
前記画素ごとのシェーディングを使用しないと決定した場合、複数の画素の領域ごとのシェーディングを使用すると決定すること、
を含むシーケンスを実行させる、コンピュータプログラム。
【請求項７】
前記画素ごとのシェーディングを使用すると決定した場合、前記シーケンスが、前記１つの画素内の前記複数のサンプルに対してシェーディング結果を再利用することを含む、請求項６に記載のコンピュータプログラム。
【請求項８】
前記複数の画素の領域ごとのシェーディングを使用すると決定した場合、前記シーケンスが、前記領域内における前記複数の画素に対してシェーディング結果を再利用することを含む、請求項６または７に記載のコンピュータプログラム。
【請求項９】
前記サンプルを解析することが、サンプルが基準サンプルとどのくらい異なるかを決定することを含む、請求項６から８のいずれか一項に記載のコンピュータプログラム。
【請求項１０】
前記サンプルを解析することが、前記領域がどのくらい滑らかであるかを決定することを含む、請求項６から９のいずれか一項に記載のコンピュータプログラム。
【請求項１１】
複数の画素の領域内における１つの画素内の複数のサンプルを解析して、前記領域内でサンプルごとのシェーディングを使用するかどうかを決定し、
前記領域内で前記サンプルごとのシェーディングを使用しないと決定した場合、前記複数の画素の前記領域内における各画素の代表サンプルを解析して、画素ごとのシェーディングを使用するかどうかを決定し、
前記画素ごとのシェーディングを使用しないと決定した場合、複数の画素の領域ごとのシェーディングを使用すると決定する、
プロセッサを含む装置。
【請求項１２】
前記画素ごとのシェーディングを使用すると決定した場合、前記プロセッサが、前記１つの画素内における前記複数のサンプルに対してシェーディング結果を再利用する、請求項１１に記載の装置。
【請求項１３】
前記複数の画素の領域ごとのシェーディングを使用すると決定した場合、前記プロセッサが、前記領域内における前記複数の画素に対してシェーディング結果を再利用する、請求項１１または１２に記載の装置。
【請求項１４】
前記サンプルを解析することが、サンプルが基準サンプルとどのくらい異なるかを決定することを含む、請求項１１から１３のいずれか一項に記載の装置。
【請求項１５】
前記サンプルを解析することが、前記領域がどのくらい滑らかであるかを決定することを含む、請求項１１から１４のいずれか一項に記載の装置。
【請求項１６】
請求項６から１０のいずれか一項に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィックス処理に関する。
【背景技術】
【０００２】
シェーディングは、描画されるオブジェクトに照明効果を適用するプロセスである。遅延シェーディングは、可視性（カバレッジ）が解決された後でレンダリングが実行されるシーンをレンダリングする一般的な方法である。特に、シェーディングは、すべてのオクルージョンが解決されるまで遅延される。通常、これは２回のパスで行われる。最初のパスは、ジオメトリまたはＧバッファと呼ばれるバッファにシェーディングに必要な入力（表面法線、深度、ビューベクトルなど）を書き出す。２番目のパスは、シェーディング計算が行われるフルスクリーンパス（または計算シェーダパス）である。
【０００３】
各Ｇバッファサンプルについて、シェーディングは、その時点のサンプルのＧバッファを読み出し、すべての照明の寄与を累積して最終的な表面色を出力することによって行われる。
【０００４】
遅延シェーディングの利点の１つは、目に見える表面のフラグメントのみがシェーディングされることである。シェーディングは、すべてのジオメトリ処理が完了するまで遅延される。
【０００５】
視認率がシェーディング率と異なる場合（例えば、マルチサンプル方式のアンチエイリアシング（ＭＳＡＡ）または粗い画素シェーディング（ＣＰＳ））、Ｇバッファは完全な視認率で利用可能であるため、実行されるシェーディングに必要なレートを（画素単位またはサンプル単位で）決めることは難しい。Ｇバッファを視認率でシェーディングするのは、安全ではあるが、非常に非効率的である（また、多くの場合、必要でない）。
【図面の簡単な説明】
【０００６】
いくつかの実施形態は、以下の図面に関して説明される。
【図１】スクリーン領域を解析し、サンプル、画素または粗い画素としてスクリーン領域を分類し、可能な限りシェーディング率を低減させるためのフローチャートである。
【図２】一実施形態によるデータ処理システムのブロック図である。
【図３】一実施形態による、図２に示すプロセッサのブロック図である。
【図４】一実施形態による、図２のグラフィックスプロセッサのブロック図である。
【図５】一実施形態によるグラフィックス処理エンジンのブロック図である。
【図６】別の実施形態によるグラフィックスプロセッサのブロック図である。
【図７】一実施形態のスレッド実行ロジックを示す図である。
【図８】一実施形態によるグラフィックスプロセッサ実行ユニットの命令フォーマットのブロック図である。
【図９】グラフィックスプロセッサの別の実施形態のブロック図である。
【図１０Ａ】一実施形態によるグラフィックスプロセッサのコマンドフォーマットのブロック図である。
【図１０Ｂ】一実施形態によるグラフィックスプロセッサのコマンドシーケンスのブロック図である。
【図１１】一実施形態のグラフィックス・ソフトウェア・アーキテクチャである。
【発明を実施するための形態】
【０００７】
シェーディング率を、スクリーンのある領域にわたってその領域内のサンプルを解析することによって、画素ごとに１回または画素ごとに１回未満（例えば、２×２画素ごとに１回）に低減することができる。レンダリング方程式の特定の成分を他の成分よりも低いレートでシェーディングすることを選択することが可能である。本明細書で説明される構想は、このようなマルチレート遅延シェーディングに等しく適用可能である。
【０００８】
ＭＳＡＡが生成するシェーディング結果を複製するには、画素が単一のプリミティブで完全にカバーされているときに画素ごとに１回シェーディングし、複数のプリミティブがその画素をカバーしている場合は、プリミティブの数だけシェーディングすることになる。ただし、所与の画素をカバーするプリミティブの数とそれらのカバレッジに関する情報は、通常、Ｇバッファでは利用できない。
【０００９】
１つの技術は、画素内のサンプルが単一のプリミティブによってカバーされているか否かを、ビュー空間の深度、ビュー空間の深度の微分値、および法線の画素内での変化を解析することによって明らかにする。  Ｌａｕｒｉｔｚｅｎらによる「Ｄｅｆｅｒｒｅｄ  Ｒｅｎｄｅｒｉｎｇ  ｆｏｒ  Ｃｕｒｒｅｎｔ  ａｎｄ  Ｆｕｔｕｒｅ  Ｒｅｎｄｅｒｉｎｇ  Ｐｉｐｅｌｉｎｅｓ」，ＳＩＧＧＲＡＰＨ２０１０，Ｃｏｕｒｓｅ：「Ｂｅｙｏｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｓｈａｄｉｎｇ」，Ｊｕｌｙ  ２９，２０１０を参照。表面が局所的に滑らかであると決定された場合、シェーディング率を画素ごとに１回に減らし、その画素内のすべてのサンプルに対してシェーディング結果を再利用することができる。
【００１０】
１画素より大きな領域（例えば、２×２）を同様の方法で解析することができる。Ｇバッファ面が２ｘ２領域またはタイル上で局所的に滑らかであると決定された場合、シェーディング率を２ｘ２領域ごとに１回（または粗い画素ごとに１回）に減らすことができる。シェーディング方程式が低周波成分を有する場合、そのような成分のシェーディング率を２×２領域ごとに１回に減らし、関与する画素にわたってシェーディングを再利用することができる。
【００１１】
粗い画素を複数の粗さのレベルに識別し、階層的なシェーディング構造を構築するこの見解を拡張することができる。特定のレベルの子画素は、その後、親画素のシェーディング結果を再利用することができる。図１は、１つのアルゴリズムによるフローチャートを示している。
【００１２】
図１に示すシーケンスを、ソフトウェア、ファームウェア、および／またはハードウェアで実施することができる。ソフトウェアおよびファームウェアの実施形態では、磁気ストレージ、光学ストレージ、または半導体ストレージなどの１つまたは複数の非一時的なコンピュータ可読媒体に格納されたコンピュータ可読命令によって実行されてもよい。
【００１３】
図１のシーケンスは、最悪の場合に基準サンプルの値とどのくらい異なるかを調べるために、１画素位置、すなわちスクリーン位置ｕ，ｖ内のサンプルを解析することから開始する。つまり、領域がどのくらい局所的に滑らかであるかについての決定がなされる。一実施形態では、ビュー空間の深度、ビュー空間の深度の微分値、および法線の１つまたは複数が基準画素に対して画素ごとにどれだけ変化するかに関する決定を行うことができる。基準画素は、領域内の任意の画素とすることができ、例えば、左上の画素を基準画素とすることができる。  ここで重要なのは、ある画素が基準画素とあまりにも異なってはならないことである。すべての画素がチェックされるので、基準画素としてどの画素が選択されても問題ではない。この情報は、例えば深度バッファから取得することにより、Ｇバッファから利用可能になる。
【００１４】
菱形１２のチェックは、平滑度の決定に基づいて、サンプルごとのシェーディング（ＭＳＡＡなど）を使用すべきかどうかを決定する。サンプルごとのシェーディングを使用しない場合、ブロック１４に示すように、２×２ブロックの画素の各画素からの代表サンプルを解析することができる。他のブロックサイズを使用することもできる。
【００１５】
菱形１６のチェックは、平滑度の決定に基づいて、画素ごとのシェーディングを利用すべきかどうかを決定する。画素ごとのシェーディングを利用しない場合、ブロック２０において粗い画素シェーディング成分についてブロックが解析される。機能的には、このブロックは、２ｘ２ブロック内の各画素から代表サンプル（例えば、サンプル０）を読み取ることができる。次いで、画素１，２および３からのサンプルを画素０からのサンプルと比較して（サンプルがブロック１２の基準サンプルと同じ画素内で比較されたのと同様）、画素ごとにシェーディングが必要かどうかを判断する。粗い画素シェーディングは、フレームまたは画像にわたって異なるレートでシェーディングする。画素ごとのシェーディングが必要な場合、ブロック１８に示すように、ブロックは画素ごとのシェーディング成分について評価される。次に、ブロック２２で最終シェーディング色が実現される。
【００１６】
サンプルごとのシェーディングについての最初のチェックで、シェーディングがサンプルごとに必要であると決定された場合、次に、ブロック２４でサンプルごとの成分が評価され、ブロック２２の最終シェーディング色に続く。このようにして、ブロックは、単純な画素シェーディングまたは粗い画素シェーディングの１つとして識別される。次に、この分類を用いてシェーディング率を得ることができる。シェーディング率は可能な限り低減されるのが好適である。
【００１７】
いくつかの実装形態では、ハードウェアアクセラレーションを使用してスクリーン空間の領域上の値の分散を計算するアルゴリズムの部分を実装することを選択できる。このような一実装形態では、マシンクリエーションサービス（Ｍａｃｈｉｎｅ  Ｃｒｅａｔｉｏｎ  Ｓｅｒｖｉｃｅｓ，ＭＣＳ）圧縮ビットおよび新しいサンプラコマンドｓａｍｐｌｅ＿ＬｏａｄＤｅｌｔａが使用される。これと併せて、次の拡張を使用することができる：  ＜Ｔ＞ＬｏａｄＤｅｌｔａ（ｕｉｎｔ２  ｕｖ，ｕｉｎｔ  ｒｅｆＳａｍｐｌｅ）
【００１８】
ユーザは、上記のコマンドを呼び出して、スクリーン空間位置ｕｖの画素位置内の表面値を解析し、ｒｅｆＳａｍｐｌｅ（最悪の場合）の値とどのくらい異なるかを調べる。すべての値が同じであるため、すべてのビットが同じサンプルを指す場合、システムはＭＣＳビットを利用して０を返すことができる。
【００１９】
そうでない場合、次に、実行ユニットはコマンド  ｓａｍｐｌｅ＿ＬｏａｄＤｅｌｔａをサンプラに発行する。次に、サンプラはすべてのサンプルをロードし、ｒｅｆＳａｍｐｌｅで指定された基準サンプル値とのチャネルに関する差を計算する。
【００２０】
計算をサンプラにオフロードし、ＭＣＳを使用することにより、ソフトウェアで実行するよりも電力効率の高いアルゴリズムとすることができる。その結果、帯域幅はＭＣＳ＝＝０の場合に保存されるが、テクスチャの読み込みはスキップされる。ＭＣＳ！＝０の場合、サンプラからＥＵへの帯域幅が保存される。
【００２１】
同様に、１つまたは複数の色圧縮方式（ＭＣＳに類似）を使用して、特定の位置の指定されたＮ×Ｎ領域（または粗い画素）上で動作するシェーダ命令の変形を考えることもできる。このような命令を使用して、シェーディング率を画素率よりも低いレートに低減することができる。
【００２２】
これらの技術は、遅延シェーディングに適用可能なだけでなく、例えば、色相回転、彩度、コントラスト調整などの色補正のようなローカルの後処理アルゴリズムにも適用可能である。通常、解決操作がアーチファクトを表示した後に、後処理アルゴリズムが適用される。この技術を用いて、可能な限り、画素率でのみ後処理パスを実行し、解決を行うことができる。深度や法線がユーザ定義の閾値を超えて変化するたびに、ＭＳＡＡレートで後処理に戻ることができる。
【００２３】
Ｌａｕｒｉｔｚｅｎは画素単位およびサンプル単位間のシェーディング率を制御することを提案した。Ｇバッファは、ビュー空間位置、ビュー空間の微分値Ｚ、および表面法線を含むように作成される。ｌｓＰｅｒｓａｍｐｌｅ（．．）関数は、以下で何かをシェーディングする必要がある場合を返す。
【表１】
0006464538.tif 000002
【００２４】
この解析の結果を、ｐｅｒＳａｍｐｌｅ［］配列に集めることができる。各画素が画素率でシェーディングされていると決定された場合にのみ、同様の解析をスクリーン空間の２ｘ２領域にわたって行うことができる。一実施形態では、寄与する画素を解析する間に許容される最大許容ビュー空間の深度―デルタが２倍である代表サンプル（例えば、サンプル０）を使用して、２ｘ２領域にわたって解析を行うことができる。
【００２５】
領域のシェーディング率が識別されると、同時に同様のシェーディング率ですべての領域をシェーディングし、中間結果をメモリ（共有ローカルメモリ（ＳＬＭ）またはグローバルメモリのいずれか）に格納することによって、シングル・インストラクション・マルチプル・データ（ＳＩＭＤ）効率を向上させるか、または最大化することができる。次のより高いレートの領域がシェーディングされるとき、親の出力データを読み取ることによって、その親からの寄与が加えられる。
【００２６】
テクスチャリングは、粗いレートでシェーディングしながら慎重に行われる必要がある。  通常、遅延シェーディングの場合、テクスチャリングはＧバッファ生成パスで行われる。シェーディング周波数（２ｘ２サイズの画素または１画素であり得る）をサンプリング周波数と一致させるには、（バイアスされたサンプラを使用して）ミップ（ｍｉｐ）レベルを調整する必要があるか、より高いミップ（ｍｉｐ）レベルのサンプルがフィルタリングされ得る。慎重に処理しないと、低周波シェーディング成分にエイリアシングが見られる。
【００２７】
図２は、一実施形態によるデータ処理システム１００のブロック図である。データ処理システム１００は、１つまたは複数のプロセッサ１０２および１つまたは複数のグラフィックスプロセッサ１０８を含み、単一プロセッサのデスクトップシステム、マルチ・プロセッサ・ワークステーション・システム、または多数のプロセッサ１０２もしくはプロセッサコア１０７を有するサーバシステムであってもよい。一実施形態では、データ処理システム１００は、モバイル、ハンドヘルド、または埋め込みデバイスで使用するためのチップ集積回路（ＳＯＣ）上のシステムである。
【００２８】
データ処理システム１００の実施形態は、サーバベースのゲームプラットフォームや、ゲームおよびメディアコンソール、モバイル・ゲーム・コンソール、ハンドヘルド・ゲーム・コンソール、またはオンライン・ゲーム・コンソールを含む、ゲームコンソールを含むことができるか、またはこれらに組み込むことができる。一実施形態では、データ処理システム１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイスまたはモバイルインターネットデバイスである。データ処理システム１００は、スマート・ウォッチ・ウェアラブル・デバイス、スマート・アイウェア・デバイス、拡張現実感デバイス、またはバーチャル・リアリティ・デバイスなどのウェアラブルデバイスを含むか、これと連結するか、またはこれに統合されることもできる。一実施形態では、データ処理システム１００は、１つまたは複数のプロセッサ１０２と、１つまたは複数のグラフィックスプロセッサ１０８によって生成されたグラフィカルインタフェースとを有するテレビまたはセット・トップ・ボックス・デバイスである。
【００２９】
１つまたは複数のプロセッサ１０２は、それぞれ、実行されると、システムおよびユーザソフトウェアの操作を実行する命令を処理するための１つまたは複数のプロセッサコア１０７を含む。一実施形態では、１つまたは複数のプロセッサコア１０７のそれぞれは、特定の命令セット１０９を処理するように構成されている。命令セット１０９は、複雑な命令セット演算（ＣＩＳＣ）、縮小命令セット演算（ＲＩＳＣ）、または超長命令語（ＶＬＩＷ）による演算を容易にすることができる。複数のプロセッサコア１０７はそれぞれ、他の命令セットのエミュレーションを容易にする命令を含むことができる異なる命令セット１０９を処理することができる。プロセッサコア１０７は、デジタル信号プロセッサ（ＤＳＰ）のような他の処理デバイスを含むこともできる。
【００３０】
一実施形態では、プロセッサ１０２はキャッシュメモリ１０４を含む。  アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数レベルの内部キャッシュを有することができる。一実施形態では、キャッシュメモリは、プロセッサ１０２のさまざまなコンポーネント間で共有される。また、一実施形態では、プロセッサ１０２は、既知のキャッシュコヒーレンシ技術を使用してプロセッサコア１０７間で共有され得る外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュまたは最終レベルキャッシュ（ＬＬＣ））（図示せず）を使用する。異なるタイプのデータ（例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ）を格納するための異なるタイプのレジスタを含み得るレジスタファイル１０６が、プロセッサ１０２に追加的に含まれる。いくつかのレジスタは汎用レジスタであってもよく、他のレジスタはプロセッサ１０２の設計に固有であってもよい。
【００３１】
プロセッサ１０２は、プロセッサ１０２とシステム１００内の他のコンポーネントとの間でデータ信号を送信するために、プロセッサバス１１０に連結されている。システム１００は、メモリ・コントローラ・ハブ１１６および入出力（Ｉ／Ｏ）コントローラハブ１３０を含む例示的な「ハブ」システムアーキテクチャを使用する。メモリ・コントローラ・ハブ１１６は、メモリデバイスとシステム１００の他のコンポーネントとの間の通信を容易にし、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏデバイスへの接続を提供する。
【００３２】
メモリデバイス１２０は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）デバイス、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）デバイス、フラッシュ・メモリ・デバイス、またはプロセスメモリとして機能するのに適した性能を有する他の何らかのメモリデバイスであってもよい。メモリ１２０は、プロセッサ１０２がプロセスを実行するときに使用するためのデータ１２２および命令１２１を格納することができる。また、メモリ・コントローラ・ハブ１１６は、プロセッサ１０２内の１つまたは複数のグラフィックスプロセッサ１０８と通信してグラフィックスおよびメディア操作を実行することができる任意の外部グラフィックスプロセッサ１１２と連結する。
【００３３】
ＩＣＨ１３０は、高速Ｉ／Ｏバスを介して周辺機器をメモリ１２０およびプロセッサ１０２に接続することを可能にする。Ｉ／Ｏ周辺機器は、オーディオコントローラ１４６、ファームウェアインタフェース１２８、無線トランシーバ１２６（例えば、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標））、データ記憶デバイス１２４（例えば、ハードディスクドライブ、フラッシュメモリなど）、およびレガシ（例えば、パーソナルシステム２（ＰＳ／２））デバイスをシステムに連結するためのレガシＩ／Ｏコントローラを含む。１つまたは複数のユニバーサル・シリアル・バス（ＵＳＢ）コントローラ１４２は、キーボードおよびマウス１４４の組み合わせなどの入力デバイスを接続する。また、ネットワークコントローラ１３４は、ＩＣＨ１３０に連結することができる。一実施形態では、高性能ネットワークコントローラ（図示せず）がプロセッサバス１１０に連結する。
【００３４】
図３は、１つまたは複数のプロセッサコア２０２Ａ〜Ｎ、統合メモリコントローラ２１４、および統合グラフィックスプロセッサ２０８を有するプロセッサ２００の実施形態のブロック図である。プロセッサ２００は、破線のボックスによって表される追加のコア２０２Ｎまでの追加のコアを含むことができる。コア２０２Ａ〜Ｎのそれぞれは、１つまたは複数の内部キャッシュユニット２０４Ａ〜Ｎを含む。また、一実施形態では、各コアは、１つまたは複数の共有キャッシュユニット２０６へのアクセスを有する。
【００３５】
内部キャッシュユニット２０４Ａ〜Ｎおよび共有キャッシュユニット２０６は、プロセッサ２００内のキャッシュメモリ階層を表している。キャッシュメモリ階層は、各コア内の命令およびデータキャッシュの少なくとも１つのレベル、ならびにレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）のような共有中間レベルキャッシュの１つまたは複数のレベル、またはキャッシュの他のレベルを含むことができ、外部メモリより前の最高レベルのキャッシュが最終レベルキャッシュ（ＬＬＣ）として分類される。一実施形態では、キャッシュ・コヒーレンシ・ロジックは、さまざまなキャッシュユニット２０６と２０４Ａ〜Ｎとの間のコヒーレンシを維持する。
【００３６】
また、プロセッサ２００は、１つまたは複数のバス・コントローラ・ユニット２１６およびシステムエージェント２１０のセットを含むことができる。１つまたは複数のバス・コントローラ・ユニットは、１つまたは複数の周辺機器相互接続バス（例えば、ＰＣＩ、ＰＣＩエクスプレス）などの一連の周辺バスを管理する。システムエージェント２１０は、さまざまなプロセッサコンポーネントのための管理機能を提供する。一実施形態では、システムエージェント２１０は、さまざまな外部メモリデバイス（図示せず）へのアクセスを管理するための１つまたは複数の統合メモリコントローラ２１４を含む。
【００３７】
一実施形態では、１つまたは複数のコア２０２Ａ〜Ｎは、同時マルチスレッディングのためのサポートを含む。このような実施形態では、システムエージェント２１０は、マルチスレッド処理中にコア２０２Ａ〜Ｎを調整して動作させるためのコンポーネントを含む。システムエージェント２１０は、コア２０２Ａ〜Ｎおよびグラフィックスプロセッサ２０８の電力状態を調整するロジックおよびコンポーネントを含む電力制御ユニット（ＰＣＵ）をさらに含むことができる。
【００３８】
プロセッサ２００は、グラフィックス処理操作を実行するためのグラフィックスプロセッサ２０８をさらに含む。一実施形態では、グラフィックスプロセッサ２０８は、１つまたは複数の統合メモリコントローラ２１４を含む、一連の共有キャッシュユニット２０６およびシステムエージェントユニット２１０と連結する。一実施形態では、ディスプレイコントローラ２１１がグラフィックスプロセッサ２０８に連結され、グラフィックスプロセッサの出力を１つまたは複数の連結されたディスプレイに駆動する。ディスプレイコントローラ２１１は、少なくとも１つの相互接続を介してグラフィックスプロセッサと連結された別個のモジュールであってもよく、グラフィックスプロセッサ２０８またはシステムエージェント２１０内に統合されてもよい。
【００３９】
一実施形態では、リングベースの相互接続ユニット２１２が、プロセッサ２００の内部コンポーネントを連結するために使用されるが、ポイントツーポイント相互接続、交換相互接続、または当技術分野で公知の技術を含む他の技術などの代替の相互接続ユニットが使用されてもよい。一実施形態では、グラフィックスプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続部２１２と連結する。
【００４０】
例示的なＩ／Ｏリンク２１３は、さまざまなプロセッサコンポーネントと、ｅＤＲＡＭモジュールなどの高性能組み込みメモリモジュール２１８との間の通信を容易にするオンパッケージＩ／Ｏ相互接続を含む、複数の種類のＩ／Ｏ相互接続のうちの少なくとも１つを表している。一実施形態では、コア２０２Ａ〜Ｎおよびグラフィックスプロセッサ２０８のそれぞれは、共有された最終レベルキャッシュとして組み込みメモリモジュール２１８を使用する。
【００４１】
一実施形態では、コア２０２Ａ〜Ｎは、同じ命令セットアーキテクチャを実行する同種コアである。別の実施形態では、コア２０２Ａ〜Ｎは命令セットアーキテクチャ（ＩＳＡ）の点で異種であり、１つまたは複数のコア２０２Ａ〜Ｎが第１の命令セットを実行し、他のコアの少なくとも１つが第１の命令セットのサブセットまたは異なる命令セットを実行する。
【００４２】
プロセッサ２００を、例えば、相補型金属酸化膜半導体（ＣＭＯＳ）、バイポーラ接合／相補型金属酸化膜半導体（ＢｉＣＭＯＳ）、またはＮ型金属酸化膜半導体ロジック（ＮＭＯＳ）のような、いくつかのプロセス技術のいずれかを使用して、１つまたは複数の基板の一部とすることができ、または、１つまたは複数の基板上に実装することができる。さらに、プロセッサ２００を、他のコンポーネントに加えて、図示されたコンポーネントを有する１つまたは複数のチップにまたはシステム・オン・チップ（ＳＯＣ）集積回路として実装することができる。
【００４３】
図４は、グラフィックスプロセッサ３００の一実施形態のブロック図であり、このグラフィックスプロセッサ３００は、ディスクリートなグラフィックス処理ユニットであってもよく、または複数の処理コアと統合されたグラフィックスプロセッサであってもよい。一実施形態では、グラフィックスプロセッサは、メモリマップＩ／Ｏインタフェースを介して、グラフィックスプロセッサ上のレジスタに、およびプロセッサメモリに配置されたコマンドを介して通信される。グラフィックスプロセッサ３００は、メモリにアクセスするためのメモリインタフェース３１４を含む。メモリインタフェース３１４を、ローカルメモリ、１つまたは複数の内部キャッシュ、１つまたは複数の共有外部キャッシュに、および／またはシステムメモリに対するインタフェースとすることができる。
【００４４】
また、グラフィックスプロセッサ３００は、ディスプレイ出力データをディスプレイデバイス３２０に駆動するためのディスプレイコントローラ３０２を含む。ディスプレイコントローラ３０２は、ディスプレイのための１つまたは複数のオーバーレイプレーン、およびビデオまたはユーザインタフェース要素の複数層の構成のためのハードウェアを含む。一実施形態では、グラフィックスプロセッサ３００は、１つまたは複数のメディア・エンコード・フォーマットに、１つまたは複数のメディア・エンコード・フォーマットから、または１つまたは複数のメディア・エンコード・フォーマット間で、メディアをエンコード、デコード、またはトランスコードするビデオ・コーデック・エンジン３０６を含み、フォーマットには、ＭＰＥＧ−２のようなＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）フォーマット、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣなどのＡＶＣ（Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ）フォーマットや米国映画テレビ技術者協会（ＳＭＰＴＥ）の４２１Ｍ／ＶＣ−１規格、ＪＰＥＧなどのＪＰＥＧ（Ｊｏｉｎｔ  Ｐｈｏｔｏｇｒａｐｈｉｃ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）フォーマット、およびＭＪＰＥＧ（Ｍｏｔｉｏｎ  ＪＰＥＧ）フォーマットが含まれるが、これらに限定されるものではない。
【００４５】
一実施形態では、グラフィックスプロセッサ３００は、例えば、ビット境界ブロック転送を含む２次元（２Ｄ）ラスタライザ操作を実行するブロック画像転送（ＢＬＩＴ）エンジン３０４を含む。ただし、一実施形態では、グラフィックス処理エンジン（ＧＰＥ）３１０の１つまたは複数のコンポーネントを使用して、２Ｄグラフィックス操作が実行される。グラフィック処理エンジン３１０は、３次元（３Ｄ）グラフィックス操作およびメディア操作を含むグラフィックス操作を実行するための計算エンジンである。
【００４６】
ＧＰＥ３１０は、３Ｄプリミティブ形状（例えば、矩形、三角形など）に作用する処理機能を使用して３次元画像およびシーンをレンダリングするなどの、３Ｄ操作を実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内でさまざまなタスクを実行する、および／または実行スレッドを３Ｄ／メディアサブシステム３１５に生成するプログラム可能な固定された機能要素を含む。３Ｄパイプライン３１２を、メディア操作を実行するために使用することができるが、ＧＰＥ３１０の実施形態は、ビデオ後処理および画像強調などのメディア操作を実行するために特に使用されるメディアパイプライン３１６も含む。
【００４７】
一実施形態では、メディアパイプライン３１６は、ビデオ・コーデック・エンジン３０６の代わりに、またはビデオ・コーデック・エンジン３０６のために、ビデオデコードアクセラレーション、ビデオインタレース解除、およびビデオ・エンコード・アクセラレーションなどの１つまたは複数の特殊なメディア操作を実行する固定機能またはプログラム可能ロジックユニットを含む。一実施形態では、メディアパイプライン３１６は、３Ｄ／メディアサブシステム３１５上での実行のためにスレッドを生成するスレッド生成ユニットをさらに含む。生成されたスレッドは、３Ｄ／メディアサブシステムに含まれる１つまたは複数のグラフィックス実行ユニットでメディア操作のための計算を実行する。
【００４８】
３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２およびメディアパイプライン３１６によって生成されたスレッドを実行するためのロジックを含む。一実施形態では、パイプラインは、スレッド実行要求を３Ｄ／メディアサブシステム３１５に送信し、この要求には、さまざまな要求を調停して利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ・ロジックが含まれる。実行リソースは、３Ｄおよびメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。一実施形態では、３Ｄ／メディアサブシステム３１５は、スレッド命令およびデータ用の１つまたは複数の内部キャッシュを含む。一実施形態では、サブシステムはまた、スレッド間でデータを共有し、出力データを格納するために、レジスタおよびアドレス可能なメモリを含む共有メモリを含む。
【００４９】
図５は、グラフィックスプロセッサ用のグラフィックス処理エンジン４１０の一実施形態のブロック図である。一実施形態では、グラフィックス処理エンジン（ＧＰＥ）４１０は、図４に示すＧＰＥ３１０のバージョンである。ＧＰＥ４１０は、３Ｄパイプライン４１２およびメディアパイプライン４１６を含み、それぞれ、図４の３Ｄパイプライン３１２およびメディアパイプライン３１６の実装と異なるかまたは類似することができる。
【００５０】
一実施形態では、ＧＰＥ４１０は、コマンドストリームをＧＰＥの３Ｄパイプライン４１２およびメディアパイプライン４１６に提供するコマンドストリーマ４０３と連結する。コマンドストリーマ４０３は、システムメモリ、または１つまたは複数の内部キャッシュメモリおよび共有キャッシュメモリとすることができるメモリに連結される。コマンドストリーマ４０３は、メモリからコマンドを受信し、コマンドを３Ｄパイプライン４１２および／またはメディアパイプライン４１６に送信する。３Ｄパイプラインおよびメディアパイプラインは、それぞれのパイプライン内のロジックを介して操作を実行することによって、または実行ユニットアレイ４１４に１つまたは複数の実行スレッドをディスパッチすることによってコマンドを処理する。一実施形態では、実行ユニットアレイ４１４は、アレイがＧＰＥ４１０の目標電力および性能レベルに基づいて可変数の実行ユニットを含むようにスケーラブルである。
【００５１】
サンプリングエンジン４３０は、メモリ（例えば、キャッシュメモリまたはシステムメモリ）および実行ユニットアレイ４１４と連結する。一実施形態では、サンプリングエンジン４３０は、実行ユニットアレイ４１４がメモリからグラフィックスおよびメディアデータを読み取ることを可能にする、スケーラブル実行ユニットアレイ４１４のためのメモリアクセス機構を提供する。一実施形態では、サンプリングエンジン４３０は、メディアに対する特殊な画像サンプリング操作を実行するロジックを含む。
【００５２】
サンプリングエンジン４３０内の特殊メディア・サンプリング・ロジックは、ノイズ除去／インタレース解除モジュール４３２、動き推定モジュール４３４、ならびに画像スケーリングおよびフィルタリングモジュール４３６を含む。ノイズ除去／インタレース解除モジュール４３２は、デコードされたビデオデータに対して１つまたは複数のノイズ除去またはインタレース解除アルゴリズムを実行するロジックを含む。インタレース解除ロジックは、インタレースされたビデオコンテンツの交番磁界をビデオの単一フレームに結合する。ノイズ除去ロジックは、ビデオおよび画像データからのデータノイズを低減または除去する。一実施形態では、ノイズ除去ロジックおよびインタレース除去ロジックは動き適応型であり、ビデオデータで検出された動きの量に基づいて空間的または時間的フィルタリングを使用する。一実施形態では、ノイズ除去／インタレース解除モジュール４３２は、（例えば、動き推定エンジン４３４内の）専用の動き検出ロジックを含む。
【００５３】
動き推定エンジン４３４は、動きベクトル推定およびビデオデータの予測などのビデオアクセラレーション機能を実行することによって、ビデオ操作のためのハードウェアアクセラレーションを提供する。動き推定エンジンは、連続するビデオフレーム間の画像データの変換を記述する動きベクトルを決定する。一実施形態では、グラフィックス・プロセッサ・メディア・コーデックは、ビデオ動き推定エンジン４３４を使用して、マクロブロックレベルでビデオに操作を実行し、そうでなければ汎用プロセッサを使用して実行するために計算的に集中的である可能性がある。一実施形態では、動き推定エンジン４３４は、ビデオデータ内の動きの方向または大きさに敏感なまたは適応するビデオデコードおよび処理機能を支援するために、グラフィックス・プロセッサ・コンポーネントに一般に利用可能である。
【００５４】
画像スケーリングおよびフィルタリングモジュール４３６は、生成された画像およびビデオの視覚的品質を向上させるために画像処理操作を実行する。一実施形態では、スケーリングおよびフィルタリングモジュール４３６は、データを実行ユニットアレイ４１４に提供する前に、サンプリング操作中に画像およびビデオデータを処理する。
【００５５】
一実施形態では、グラフィックス処理エンジン４１０は、メモリにアクセスするためにグラフィックスサブシステムに追加機構を提供するデータポート４４４を含む。データポート４４４は、レンダリングターゲット書き込み、定数バッファ読み出し、スクラッチメモリ空間読み出し／書き込み、およびメディア表面アクセスを含む操作のためのメモリアクセスを容易にする。一実施形態では、データポート４４４は、メモリへのアクセスをキャッシュするためのキャッシュメモリ空間を含む。キャッシュメモリは、データポートを介してメモリにアクセスする複数のサブシステムに対して、単一のデータキャッシュであってもよく、複数のキャッシュに分割されていてもよい（例えば、レンダリング・バッファ・キャッシュ、定数バッファキャッシュなど）。一実施形態では、実行ユニットアレイ４１４内の実行ユニット上で実行するスレッドは、グラフィックス処理エンジン４１０の各サブシステムを連結するデータ配信相互接続を介してメッセージを交換することによってデータポートと通信する。
【００５６】
図６は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態では、グラフィックスプロセッサは、リング相互接続部５０２、パイプラインフロントエンド５０４、メディアエンジン５３７、およびグラフィックスコア５８０Ａ〜Ｎを含む。リング相互接続部５０２は、グラフィックスプロセッサを他のグラフィックスプロセッサまたは１つまたは複数の汎用プロセッサコアを含む他の処理ユニットに連結する。一実施形態では、グラフィックスプロセッサは、マルチコア処理システム内に統合された多くのプロセッサの１つである。
【００５７】
グラフィックスプロセッサは、リング相互接続部５０２を介してコマンドのバッチを受信する。受信コマンドは、パイプラインフロントエンド５０４内のコマンドストリーマ５０３によって解釈される。グラフィックスプロセッサは、グラフィックスコア５８０Ａ〜Ｎを介して３Ｄジオメトリ処理およびメディア処理を実行するスケーラブルな実行ロジックを含む。３Ｄジオメトリ処理コマンドの場合、コマンドストリーマ５０３はコマンドをジオメトリパイプライン５３６に提供する。少なくともいくつかのメディア処理コマンドの場合、コマンドストリーマ５０３は、メディアエンジン５３７と連結するビデオ・フロント・エンド５３４にコマンドを提供する。メディアエンジン５３７は、ビデオおよび画像後処理のためのビデオクオリティエンジン（ＶＱＥ）５３０と、ハードウェア加速のメディア・データ・エンコードおよびデコードを提供するマルチ・フォーマット・エンコード／デコード（ＭＦＸ）５３３エンジンとを含む。ジオメトリパイプライン５３６およびメディアエンジン５３７はそれぞれ、少なくとも１つのグラフィックスコア５８０Ａによって提供されるスレッド実行リソースのための実行スレッドを生成する。
【００５８】
グラフィックスプロセッサは、それぞれが複数のサブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎ（コアサブスライスと呼ばれることもある）を有するモジュラコア５８０Ａ〜Ｎ（コアスライスと呼ばれることもある）を特徴とするスケーラブルなスレッド実行リソースを含む。グラフィックスプロセッサは、任意の数のグラフィックスコア５８０Ａ〜５８０Ｎを有することができる。一実施形態では、グラフィックスプロセッサは、少なくとも第１のサブコア５５０Ａおよび第２のサブコア５６０Ａを有するグラフィックスコア５８０Ａを含む。別の実施形態では、グラフィックスプロセッサは、単一のサブコア（例えば、５５０Ａ）を有する低電力プロセッサである。一実施形態では、グラフィックスプロセッサは、それぞれ一連の第１のサブコア５５０Ａ〜Ｎと一連の第２のサブコア５６０Ａ〜Ｎを含む複数のグラフィックスコア５８０Ａ〜Ｎを含む。一連の第１のサブコア５５０Ａ〜Ｎ内の各サブコアは、少なくとも第１の一連の実行ユニット５５２Ａ〜Ｎおよびメディア／テクスチャサンプラ５５４Ａ〜Ｎを含む。一連の第２のサブコア５６０Ａ〜Ｎ内の各サブコアは、少なくとも第２の一連の実行ユニット５６２Ａ〜Ｎおよびサンプラ５６４Ａ〜Ｎを含む。一実施形態では、各サブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎは、一連の共有リソース５７０Ａ〜Ｎを共有する。一実施形態では、共有リソースは、共有キャッシュメモリおよび画素操作ロジックを含む。グラフィックスプロセッサのさまざまな実施形態には、他の共有リソースも含まれ得る。
【００５９】
図７は、グラフィックス処理エンジンの一実施形態で使用される処理要素のアレイを含むスレッド実行ロジック６００を示している。一実施形態では、スレッド実行ロジック６００は、画素シェーダ６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜Ｎを含むスケーラブル実行ユニットアレイ、サンプラ６１０、データキャッシュ６１２、およびデータポート６１４を含む。一実施形態では、含まれるコンポーネントは、各コンポーネントにリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、および実行ユニットアレイ６０８Ａ〜Ｎのうちの１つまたは複数を介して、システムメモリまたはキャッシュメモリなどのメモリへの１つまたは複数の接続を含む。一実施形態では、各実行ユニット（例えば、６０８Ａ）は、複数の同時スレッドを実行し、各スレッドに対して複数のデータ要素を並列に処理することができる個別のベクトルプロセッサである。実行ユニットアレイ６０８Ａ〜Ｎは、任意の数の個別の実行ユニットを含む。
【００６０】
一実施形態では、実行ユニットアレイ６０８Ａ〜Ｎは、主に、「シェーダ」プログラムを実行するために使用される。一実施形態では、アレイ６０８Ａ〜Ｎ内の実行ユニットは、グラフィックライブラリ（例えば、Ｄｉｒｅｃｔ３ＤおよびＯｐｅｎＧＬ）からのシェーダプログラムが最小限の変換で実行されるように、多くの標準３Ｄグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行する。実行ユニットは、頂点およびジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、画素処理（例えば、画素シェーダ、フラグメントシェーダ）、および汎用処理（例えば、計算およびメディアシェーダ）をサポートする。
【００６１】
実行ユニットアレイ６０８Ａ〜Ｎ内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」、すなわち命令用チャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および命令内でのフロー制御のための論理的な実行ユニットである。チャネルの数は、特定のグラフィックスプロセッサのための物理ＡＬＵまたはＦＰＵの数とは無関係であってもよい。実行ユニット６０８Ａ〜Ｎは、整数および浮動小数点データ型をサポートする。
【００６２】
実行ユニット命令セットは、単一命令複数データ（ＳＩＭＤ）命令を含む。さまざまなデータ要素を、パック化されたデータ型としてレジスタに格納することができ、実行ユニットは、要素のデータサイズに基づいてさまざまな要素を処理し得る。例えば、２５６ビット幅のベクトル上で動作する場合、２５６ビットのベクトルはレジスタに格納され、実行ユニットは、４つの別々の６４ビットパックデータ要素（クワドワード（ＱＷ）サイズのデータ要素）、８つの別々の３２ビットパックデータ要素（ダブルワード（ＤＷ）サイズのデータ要素）、１６個の別々の１６ビットパックデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２個の別々の８ビットデータ要素（バイト（Ｂ）サイズのデータ要素）として、ベクトル上で動作する。ただし、異なるベクトル幅およびレジスタサイズが可能である。
【００６３】
実行ユニットに対するスレッド命令をキャッシュするために、１つまたは複数の内部命令キャッシュ（例えば、６０６）がスレッド実行ロジック６００に含まれる。一実施形態では、スレッド実行中にスレッドデータをキャッシュするために、１つまたは複数のデータキャッシュ（例えば、６１２）が含まれる。サンプラ６１０は、３Ｄ操作のためのテクスチャサンプリングとメディア操作のためのメディアサンプリングを提供するために含まれる。一実施形態では、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前に、サンプリングプロセス中にテクスチャまたはメディアデータを処理する特殊なテクスチャまたはメディアサンプリング機能を含む。
【００６４】
実行中、グラフィックスおよびメディアパイプラインは、スレッド生成およびディスパッチロジックを介してスレッド実行ロジック６００にスレッド開始要求を送信する。スレッド実行ロジック６００は、グラフィックスおよびメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを１つまたは複数の実行ユニット６０８Ａ〜Ｎ上でインスタンス化するローカルスレッドディスパッチャ６０４を含む。例えば、ジオメトリパイプライン（例えば、図６の５３６）は、頂点処理、テッセレーション、またはジオメトリ処理スレッドをスレッド実行ロジック６００にディスパッチする。スレッドディスパッチャ６０４は、実行中のシェーダプログラムからの実行時スレッド生成要求を処理することもできる。
【００６５】
幾何学的オブジェクトのグループが処理されて画素データにラスタライズされると、画素シェーダ６０２が呼び出されて、出力情報をさらに計算し、結果が出力面に書き込まれる（例えば、カラーバッファ、深度バッファ、ステンシルバッファなど）。一実施形態では、画素シェーダ６０２は、ラスタライズされたオブジェクトにわたって補間されるべきさまざまな頂点属性の値を計算する。次に、画素シェーダ６０２は、ＡＰＩ提供の画素シェーダプログラムを実行する。画素シェーダプログラムを実行するために、画素シェーダ６０２は、スレッドディスパッチャ６０４を介して実行ユニット（例えば、６０８Ａ）にスレッドをディスパッチする。画素シェーダ６０２は、サンプラ６１０内のテクスチャ・サンプリング・ロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータおよび入力ジオメトリデータの算術演算は、各幾何学的フラグメントについての画素カラーデータを計算するか、またはさらなる処理から１つまたは複数の画素を破棄する。
【００６６】
一実施形態では、データポート６１４は、スレッド実行ロジック６００がグラフィックスプロセッサ出力パイプライン上での処理のための処理データをメモリに出力するためのメモリアクセス機構を提供する。一実施形態では、データポート６１４は、データポートを介してメモリアクセスのためのデータをキャッシュするために、１つまたは複数のキャッシュメモリ（例えば、データキャッシュ６１２）を含むか、またはそれに連結する。
【００６７】
図８は、一実施形態によるグラフィックスプロセッサ実行ユニットの命令フォーマットを示すブロック図である。一実施形態では、グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、一般に実行ユニット命令に含まれるコンポーネントを示し、破線は、任意であるか、または命令のサブセットにのみ含まれるコンポーネントを含む。説明され図示された命令フォーマットは、命令が処理された後に命令デコードから生じるマイクロオペレーションとは対照的に、実行ユニットに提供される命令であるというマクロ命令である。
【００６８】
一実施形態では、グラフィックスプロセッサ実行ユニットは、１２８ビットフォーマット７１０で命令をネイティブにサポートする。選択された命令、命令オプション、およびオペランドの数に基づいて、いくつかの命令に対して６４ビットの圧縮された命令フォーマット７３０が利用可能である。ネイティブの１２８ビットフォーマット７１０は、すべての命令オプションへのアクセスを提供し、いくつかのオプションおよび操作は、６４ビットフォーマット７３０に制限される。６４ビットフォーマット７３０で利用可能なネイティブ命令は、実施形態によって異なる。一実施形態では、命令は、インデックスフィールド７１３内の一連のインデックス値を使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて一連の圧縮テーブルを参照し、コンパクションテーブル出力を使用して、１２８ビットフォーマット７１０のネイティブ命令を再構成する。
【００６９】
各フォーマットについて、命令オペコード７１２は、実行ユニットが実行すべき操作を画定する。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各カラーチャネルにわたって同時加算操作を実行する。デフォルトでは、実行ユニットは、各命令をオペランドのすべてのデータチャネルにわたって実行する。命令制御フィールド７１２は、チャネル選択（例えば、プレディケーション）およびデータチャネルオーダ（例えば、スウィズル）などの特定の実行オプションに対する制御を可能にする。１２８ビット命令７１０の場合、実行サイズフィールド７１６は、並列に実行され得るデータチャネルの数を制限する。実行サイズフィールド７１６は、６４ビットコンパクト命令フォーマット７３０での使用に利用可能できない。
【００７０】
いくつかの実行ユニット命令は、２つのソースオペランドｓｒｃ０（７２０）およびｓｒｃ１（７２２）、ならびに１つのデスティネーション７１８を含む３つまでのオペランドを有する。一実施形態では、実行ユニットは、２つのデスティネーション命令をサポートし、デスティネーションのうちの１つは黙示されている。データ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２（７２４））を有することができ、命令オペコードＪＪ１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される（例えば、ハードコードされた）即値であってもよい。
【００７１】
一実施形態では、オペコードビットフィールドに基づいて命令をグループ化し、オペコードデコード７４０を単純化する。８ビットのオペコードの場合、ビット４，５，および６は、実行ユニットがオペコードのタイプを決定することを可能にする。示された正確なオペコードグループは例示的なものである。一実施形態では、移動および論理オペコードグループ７４２は、データ移動および論理命令（例えば、ｍｏｖ、ｃｍｐ）を含む。移動および論理グループ７４２は、５つの最上位ビット（ＭＳＢ）を共有し、移動命令は００００ｘｘｘｘｂ（例えば、０ｘ０ｘ）の形式であり、論理命令は０００１ｘｘｘｘｂ（例えば、０ｘ０１）の形式である。フロー制御命令グループ７４４（例えば、ｃａｌｌ、ｊｍｐ）は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の命令を含む。その他の命令グループ７４６は、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、ｗａｉｔ、ｓｅｎｄ）を含む命令の混合を含む。並列演算命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネントに関する算術命令（例えば、ａｄｄ、ｍｕｌ）を含む。並列演算グループ７４８は、データチャネルにわたって並列に算術演算を実行する。ベクトル演算グループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の算術命令（例えば、ｄｐ４）を含む。ベクトル演算グループは、ベクトルオペランドにドット積演算などの演算を実行する。
【００７２】
図９は、グラフィックスパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、およびレンダリング出力パイプライン８７０を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態では、グラフィックスプロセッサは、１つまたは複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、１つまたは複数の制御レジスタ（図示せず）へのレジスタ書き込みによって、またはリング相互接続部８０２を介してグラフィックスプロセッサに発行されるコマンドによって制御される。リング相互接続部８０２は、グラフィックスプロセッサを他のグラフィックスプロセッサまたは汎用プロセッサなどの他の処理コンポーネントに連結する。リング相互接続部からのコマンドは、グラフィックスパイプライン８２０またはメディアパイプライン８３０の個々のコンポーネントに命令を提供するコマンドストリーマ８０３によって解釈される。
【００７３】
コマンドストリーマ８０３は、頂点データをメモリから読み出し、コマンドストリーマ８０３によって提供される頂点処理コマンドを実行する頂点フェッチャ８０５コンポーネントの操作を指示する。頂点フェッチャ８０５は、頂点シェーダ８０７に頂点データを提供し、頂点シェーダ８０７は、各頂点に座標空間変換および照明操作を実行する。頂点フェッチャ８０５および頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して実行スレッドを実行ユニット８５２Ａ，８５２Ｂにディスパッチすることによって、頂点処理命令を実行する。
【００７４】
一実施形態では、実行ユニット８５２Ａ，８５２Ｂは、グラフィックスおよびメディア操作を実行するための命令セットを有するベクトルプロセッサのアレイである。実行ユニット８５２Ａ，８５２Ｂは、各アレイに特有の、またはアレイ間で共有される、取り付けられたＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティション内のデータおよび命令を含むように区分された単一のキャッシュとして構成され得る。
【００７５】
一実施形態では、グラフィックスパイプライン８２０は、３Ｄオブジェクトのハードウェア加速テッセレーションを実行するためのテッセレーションコンポーネントを含む。プログラム可能なハルシェーダ８１１は、テッセレーション操作を構成する。プログラム可能なドメインシェーダ８１７は、テッセレーション出力のバックエンド評価を提供する。テッセレータ８１３は、ハルシェーダ８１１の方向に動作し、グラフィックスパイプライン８２０への入力として提供される粗い幾何学モデルに基づいて一連の詳細な幾何学的オブジェクトを生成する専用のロジックを含む。テッセレーションが使用されない場合、テッセレーションコンポーネント８１１，８１３，８１７はバイパスされ得る。
【００７６】
完全な幾何学的オブジェクトは、実行ユニット８５２Ａ，８５２Ｂにディスパッチされる１つまたは複数のスレッドを介してジオメトリシェーダ８１９によって処理され得るか、またはクリッパ８２９に直接進むことができる。ジオメトリシェーダは、グラフィックスパイプラインの前のステージのように、頂点または頂点のパッチではなく、幾何学的オブジェクト全体に動作する。テッセレーションが無効にされている場合、ジオメトリシェーダ８１９は、頂点シェーダ８０７から入力を受け取る。ジオメトリシェーダ８１９はジオメトリシェーダプログラムによってプログラム可能であり、テッセレーションユニットが無効にされている場合、ジオメトリテッセレーションを実行する。
【００７７】
ラスタライゼーションの前に、頂点データはクリッパ８２９によって処理され、クリッパ８２９は、固定機能クリッパまたはクリッピングおよびジオメトリシェーダ機能を有するプログラム可能クリッパのいずれかである。一実施形態では、レンダリング出力パイプライン８７０内のラスタライザ８７３は、画素シェーダをディスパッチして、幾何学的オブジェクトを画素ごとの表現に変換する。一実施形態では、画素シェーダロジックがスレッド実行ロジック８５０に含まれる。
【００７８】
グラフィックスエンジンは、相互接続バス、相互接続ファブリック、またはグラフィックスエンジンの主要なコンポーネント間でデータおよびメッセージの受け渡しを可能にする他の何らかの相互接続機構を有する。一実施形態では、実行ユニット８５２Ａ，８５２Ｂおよび関連するキャッシュ８５１、テクスチャおよびメディアサンプラ８５４、およびテクスチャ／サンプラキャッシュ８５８は、データポート８５６を介して相互接続し、メモリアクセスを実行し、グラフィックスエンジンのレンダリング出力パイプラインコンコンポーネントと通信する。一実施形態では、サンプラ８５４、キャッシュ８５１，８５８および実行ユニット８５２Ａ，８５２Ｂはそれぞれ別々のメモリアクセス経路を有する。
【００７９】
一実施形態では、レンダリング出力パイプライン８７０は、頂点ベースのオブジェクトを関連する画素ベースの表現に変換するラスタライザおよび深度テストコンポーネント８７３を含む。一実施形態では、ラスタライザロジックは、固定機能の三角形および線のラスタライズを実行するためのウインドウ／マスカユニットを含む。また、関連するレンダリングキャッシュ８７８および深度バッファキャッシュ８７９が、一実施形態において利用可能である。画素操作コンポーネント８７７は、データに画素ベースの操作を実行するが、いくつかの例では、２Ｄ操作に関連する画素操作（例えば、ブレンディングを伴うビットブロック画像転送）は、２Ｄエンジン８４１によって実行されるか、またはオーバーレイ表示面を使用してディスプレイコントローラ８４３によって表示時に置換される。一実施形態では、共有Ｌ３キャッシュ８７５がすべてのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを使用せずにデータの共有を可能にする。
【００８０】
グラフィックスプロセッサメディアパイプライン８３０は、メディアエンジン８３７およびビデオ・フロント・エンド８３４を含む。一実施形態では、ビデオ・フロント・エンド８３４は、コマンドストリーマ８０３からパイプラインコマンドを受信する。ただし、一実施形態では、メディアパイプライン８３０は、別個のコマンドストリーマを含む。ビデオ・フロント・エンド８３４は、コマンドをメディアエンジン８３７に送信する前に、メディアコマンドを処理する。一実施形態では、メディアエンジンは、スレッドディスパッチャ８３１を介してスレッド実行ロジック８５０にディスパッチするスレッドを生成するためのスレッド生成機能を含む。
【００８１】
一実施形態では、グラフィックスエンジンはディスプレイエンジン８４０を含む。一実施形態では、ディスプレイエンジン８４０は、グラフィックスプロセッサの外部にあり、リング相互接続部８０２または他の何らかの相互接続バスもしくはファブリックを介してグラフィックスプロセッサと連結する。ディスプレイエンジン８４０は、２Ｄエンジン８４１とディスプレイコントローラ８４３とを含む。ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することができる専用のロジックを含む。ディスプレイコントローラ８４３は、ラップトップコンピュータでのように、システム統合ディスプレイデバイスであってもよいディスプレイデバイス（図示せず）、またはディスプレイデバイスコネクタを介して取り付けられた外部ディスプレイデバイスと連結する。
【００８２】
グラフィックスパイプライン８２０およびメディアパイプライン８３０は、複数のグラフィックスおよびメディア・プログラミング・インタフェースに基づいて操作を実行するように構成可能であり、いずれか１つのアプリケーション・プログラミング・インタフェース（ＡＰＩ）に固有ではない。一実施形態では、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに特有のＡＰＩコールを、グラフィックスプロセッサによって処理され得るコマンドに変換する。さまざまな実施形態では、クロノスグループによってサポートされるＯｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ）およびＯｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ（ＯｐｅｎＣＬ）、マイクロソフト社のＤｉｒｅｃｔ３Ｄライブラリ、または一実施形態ではＯｐｅｎＧＬおよびＤ３Ｄの両方に対するサポートが提供される。また、Ｏｐｅｎ  Ｓｏｕｒｃｅ  Ｃｏｍｐｕｔｅｒ  Ｖｉｓｉｏｎ  Ｌｉｂｒａｒｙ（ＯｐｅｎＣＶ）に対するサポートも提供される。次世代のＡＰＩのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングが可能な場合、互換性のある３Ｄパイプラインを備えた次世代のＡＰＩもサポートされ得る。
【００８３】
図１０Ａは、一実施形態によるグラフィックス・プロセッサ・コマンド・フォーマットを示すブロック図であり、図１０Ｂは、一実施形態によるグラフィックス・プロセッサ・コマンド・シーケンスを示すブロック図である。図１０Ａの実線のボックスは、一般にグラフィックスコマンドに含まれるコンポーネントを示し、破線は、任意であるか、またはグラフィックスコマンドのサブセットにのみ含まれるコンポーネントを含む。図１０Ａの例示的なグラフィックス・プロセッサ・コマンド・フォーマット９００は、コマンドのターゲットクライアント９０２、コマンドオペレーションコード（オペコード）９０４、およびコマンドの関連データ９０６を識別するデータフィールドを含む。一部のコマンドにはサブオペコード９０５およびコマンドサイズ９０８も含まれる。
【００８４】
クライアント９０２は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態では、グラフィックス・プロセッサ・コマンド・パーサは、各コマンドのクライアントフィールドを検査して、コマンドのさらなる処理を条件付けし、コマンドデータを適切なクライアントユニットにルーティングする。一実施形態では、グラフィックス・プロセッサ・クライアント・ユニットは、メモリ・インタフェース・ユニット、レンダリングユニット、２Ｄユニット、３Ｄユニット、およびメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受信されると、クライアントユニットは、オペコード９０４および、存在する場合、サブオペコード９０５を読み取り、実行する操作を決定する。クライアントユニットは、コマンドのデータ９０６フィールド内の情報を用いてコマンドを実行する。一部のコマンドでは、コマンドのサイズを指定するために明示的なコマンドサイズ９０８が期待される。一実施形態では、コマンドパーサは、コマンドオペコードに基づいて、少なくともいくつかのコマンドのサイズを自動的に決定する。一実施形態では、コマンドはダブルワードの倍数を介して整列される。
【００８５】
図１０Ｂのフローチャートは、サンプル・コマンド・シーケンス９１０を示している。一実施形態では、グラフィックスプロセッサの一実施形態を特徴とするデータ処理システムのソフトウェアまたはファームウェアが、一連のグラフィックス操作をセットアップし、実行し、終了するために示されたコマンドシーケンスのバージョンを使用する。例示的な目的のために、サンプル・コマンド・シーケンスが示され、説明されるが、実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックスプロセッサが少なくとも部分的に並行してコマンドのシーケンスを処理し得るように、コマンドシーケンス内のコマンドのバッチとして発行されてもよい。
【００８６】
サンプル・コマンド・シーケンス９１０は、パイプライン・フラッシュ・コマンド９１２で始まり、任意のアクティブグラフィックスパイプラインにパイプラインのためのその時点での保留中のコマンドを完了させることができる。一実施形態では、３Ｄパイプライン９２２とメディアパイプライン９２４は同時に動作しない。パイプラインフラッシュは、アクティブグラフィックスパイプラインに保留中の任意のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサのためのコマンドパーサは、アクティブな描画エンジンが保留中の操作を完了し、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止し得る。任意に、レンダリングキャッシュ内の「ｄｉｒｔｙ」とマークされた任意のデータを、メモリにフラッシュすることができる。パイプライン・フラッシュ・コマンド９１２を、パイプライン同期のために、またはグラフィックスプロセッサを低電力状態に置く前に使用することができる。
【００８７】
パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックスプロセッサにパイプライン間を明示的に切り替えることが必要な場合に使用される。パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプラインコマンドを発行する前に実行コンテキスト内で１回だけ必要とされる。一実施形態では、パイプライン選択コマンド９１３を介してパイプラインスイッチの直前にパイプライン・フラッシュ・コマンド９１２が必要とされる。
【００８８】
パイプライン制御コマンド９１４は、操作のためのグラフィックスパイプラインを構成し、３Ｄパイプライン９２２およびメディアパイプライン９２４をプログラムするために使用される。パイプライン制御コマンド９１４は、アクティブパイプラインのためのパイプライン状態を構成する。一実施形態では、パイプライン制御コマンド９１４は、パイプライン同期に使用され、コマンドのバッチを処理する前にアクティブパイプライン内の１つまたは複数のキャッシュメモリからデータをクリアする。
【００８９】
リターンバッファ状態コマンド９１６は、それぞれのパイプラインがデータを書き込むための一連のリターンバッファを構成するために使用される。いくつかのパイプライン操作では、１つまたは複数のリターンバッファの割り当て、選択、または構成が必要であり、その操作によりそこに処理中に中間データが書き込まれる。グラフィックスプロセッサはまた、出力データを格納し、クロススレッド通信を実行するために、１つまたは複数のリターンバッファを使用する。リターンバッファ状態９１６は、一連のパイプライン操作に使用するリターンバッファのサイズおよび数を選択することを含む。
【００９０】
コマンドシーケンスの残りのコマンドは、操作のためのアクティブなパイプラインに基づいて異なる。パイプライン決定９２０に基づいて、コマンドシーケンスは、３Ｄパイプライン状態９３０で始まる３Ｄパイプライン９２２、またはメディアパイプライン状態９４０で始まるメディアパイプライン９２４に合わせて調整される。
【００９１】
３Ｄパイプライン状態９３０のためのコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態、および３Ｄプリミティブコマンドが処理される前に構成されるべき他の状態変数に対する３Ｄ状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の３ＤのＡＰＩに少なくとも部分的に基づいて決定される。３Ｄパイプライン状態９３０のコマンドは、これらの要素が使用され得ない場合、特定のパイプライン要素を選択的に無効にするか、またはバイパスすることも可能である。
【００９２】
３Ｄプリミティブ９３２のコマンドは、３Ｄパイプラインによって処理される３Ｄプリミティブをサブミットするために使用される。３Ｄプリミティブ９３２のコマンドを介してグラフィックスプロセッサに渡されるコマンドおよび関連するパラメータは、グラフィックスパイプラインの頂点フェッチ機能に転送される。頂点フェッチ機能は、３Ｄプリミティブ９３２のコマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、１つまたは複数のリターンバッファに格納される。３Ｄプリミティブ９３２のコマンドは、頂点シェーダを介して３Ｄプリミティブ上で頂点操作を実行するために使用される。頂点シェーダを処理するために、３Ｄパイプライン９２２は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【００９３】
３Ｄパイプライン９２２は、実行９３４のコマンドまたはイベントを介してトリガされる。一実施形態では、レジスタ書き込みが、コマンド実行をトリガする。一実施形態では、コマンドシーケンス中の「ｇｏ」または「ｋｉｃｋ」コマンドを介して実行がトリガされる。一実施形態では、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュする。３Ｄパイプラインは、３Ｄプリミティブのためのジオメトリ処理を実行し得る。操作が完了すると、結果として得られる幾何学的オブジェクトはラスタライズされ、画素エンジンは結果として生じる画素を色付けする。画素シェーディングおよび画素バックエンド操作を制御するための追加のコマンドも、これらの操作に含めることができる。
【００９４】
サンプル・コマンド・シーケンス９１０は、メディア操作を実行するときにメディアパイプライン９２４の経路に続く。一般に、メディアパイプライン９２４のためのプログラミングの特定の使用および方法は、実行されるメディアまたは計算操作に依存する。特定のメディアデコード操作は、メディアデコード中にメディアパイプラインにオフロードされてもよい。また、メディアパイプラインをバイパスすることができ、メディアデコードは、１つまたは複数の汎用処理コアによって提供されるリソースを使用して、全体にまたは部分的に実行され得る。一実施形態では、メディアパイプラインはまた、汎用グラフィックスプロセッサユニット（ＧＰＧＰＵ）演算用の要素を含み、グラフィックスプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してＳＩＭＤベクトル演算を実行するためにグラフィックスプロセッサが使用される。
【００９５】
メディアパイプライン９２４は、３Ｄパイプライン９２２と同様に構成されている。一連のメディアパイプライン状態コマンド９４０が、メディア・オブジェクト・コマンド９４２の前にコマンドキューにディスパッチされるか、または配置される。メディアパイプライン状態コマンド９４０は、メディアオブジェクトを処理するために使用され得るメディアパイプライン要素を構成するためのデータを含む。これには、エンコードまたはデコードフォーマットなどの、メディアパイプライン内のビデオデコードおよびビデオ・エンコード・ロジックを構成するためのデータが含まれる。また、メディアパイプライン状態コマンド９４０は、状態設定のバッチを含む「間接」状態要素への１つまたは複数のポインタの使用をサポートする。
【００９６】
メディア・オブジェクト・コマンド９４２は、メディアパイプラインによる処理のためにメディアオブジェクトにポインタを提供する。メディアオブジェクトは、処理されるビデオデータを含むメモリバッファを含む。一実施形態では、メディア・オブジェクト・コマンド９４２を発行する前に、すべてのメディアパイプライン状態が有効でなければならない。パイプライン状態が構成され、メディア・オブジェクト・コマンド９４２がキューに入れられると、メディアパイプライン９２４は、実行９３４のコマンドまたは同等の実行イベント（例えば、レジスタ書き込み）を介してトリガされる。メディアパイプライン９２４からの出力は、その後、３Ｄパイプライン９２２またはメディアパイプライン９２４によって提供される操作によって後処理されてもよい。一実施形態では、ＧＰＧＰＵ演算は、メディア操作と同様に構成され実行される。
【００９７】
図１１は、一実施形態によるデータ処理システムのための例示的なグラフィックス・ソフトウェア・アーキテクチャを示している。ソフトウェアアーキテクチャは、３Ｄグラフィックスアプリケーション１０１０、オペレーティングシステム１０２０、および少なくとも１つのプロセッサ１０３０を含む。プロセッサ１０３０は、グラフィックスプロセッサ１０３２および１つまたは複数の汎用プロセッサコア１０３４を含む。グラフィックスアプリケーション１０１０およびオペレーティングシステム１０２０はそれぞれ、データ処理システムのシステムメモリ１０５０内で実行する。
【００９８】
一実施形態では、３Ｄグラフィックスアプリケーション１０１０は、シェーダ命令１０１２を含む１つまたは複数のシェーダプログラムを含む。シェーダ言語命令は、高水準シェーダ言語（ＨＬＳＬ）またはＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）などの高水準シェーダ言語であってもよい。アプリケーションはまた、汎用プロセッサコア１０３４による実行に適した機械語の実行可能命令１０１４を含む。アプリケーションはまた、頂点データによって画定されるグラフィックスオブジェクト１０１６を含む。
【００９９】
オペレーティングシステム１０２０は、マイクロソフト社のＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム、独自のＵＮＩＸ（登録商標）ライクなオペレーティングシステム、またはＬｉｎｕｘ（登録商標）カーネルの変形を使用するオープンソースのＵＮＩＸ（登録商標）ライクなオペレーティングシステムであってもよい。  Ｄｉｒｅｃｔ３ＤのＡＰＩが使用されているとき、オペレーティングシステム１０２０は、フロントエンドシェーダコンパイラ１０２４を使用して、ＨＬＳＬの任意のシェーダ命令１０１２を低水準シェーダ言語にコンパイルする。コンパイルはジャストインタイムコンパイルであってもよく、またはアプリケーションが共有プリコンパイルを実行することができる。一実施形態では、高水準シェーダは、３Ｄグラフィックスアプリケーション１０１０のコンパイル中に低水準シェーダにコンパイルされる。
【０１００】
ユーザ・モード・グラフィックス・ドライバ１０２６は、シェーダ命令１０１２をハードウェア特有の表現に変換するためのバックエンドシェーダコンパイラ１０２７を含むことができる。ＯｐｅｎＧＬのＡＰＩが使用されているとき、ＧＬＳＬ高水準言語のシェーダ命令１０１２は、コンパイルのためにユーザ・モード・グラフィックス・ドライバ１０２６に渡される。ユーザ・モード・グラフィックス・ドライバは、オペレーティング・システム・カーネル・モード機能１０２８を使用してカーネル・モード・グラフィックス・ドライバ１０２９と通信する。カーネル・モード・グラフィックス・ドライバ１０２９はグラフィックスプロセッサ１０３２と通信し、コマンドおよび命令をディスパッチする。
【０１０１】
本明細書で説明される範囲のさまざまな動作または機能を、ハードウェア回路、ソフトウェアコード、命令、構成、および／またはデータとして記述または画定することができる。コンテンツを、ハードウェアロジックに、または直接実行可能なソフトウェア（「オブジェクト」または「実行可能」形式）、ソースコード、グラフィックスエンジン上で実行するように設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックスコア用の命令セット内の低水準アセンブリ言語コードとして実現することができる。本明細書で説明される実施形態のソフトウェアコンテンツは、コンテンツが格納された製品によって、または通信インタフェース経由でデータを送信するために通信インタフェースを操作する方法によって提供され得る。
【０１０２】
非一時的機械可読記憶媒体は、記述された機能または動作を機械に実行させることができ、機械（例えば、コンピューティングデバイス、電子システムなど）によってアクセス可能な形式で情報を記憶する任意の機構、例えば、記録可能／記録不可能な媒体（読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュ・メモリ・デバイスなど）を含むことができる。通信インタフェースは、メモリ・バス・インタフェース、プロセッサ・バス・インタフェース、インターネット接続、ディスクコントローラなどの、他のデバイスと通信するために、ハードワイヤード、ワイヤレス、光などの媒体のいずれかにインタフェースする任意の機構を含む。通信インタフェースは、ソフトウェアコンテンツを記述するデータ信号を提供するために、通信インタフェースを準備するための構成パラメータまたは送信信号を提供することによって構成される。通信インタフェースは、通信インタフェースに送信される１つまたは複数のコマンドまたは信号を介してアクセスされ得る。
【０１０３】
説明されたさまざまコンポーネントを、記述された動作または機能を実行するための手段とすることができる。本明細書に記載される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。コンポーネントを、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）など）、組み込みコントローラ、ハードワイヤード回路などとして実装することができる。本明細書に記載されたものに加えて、本発明の範囲から逸脱することなく、本発明の開示された実施形態および実装形態にさまざまな修正を行うことができる。したがって、本明細書における説明および例は、例示的なものであり、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の特許請求の範囲を参照することによってのみ判断されるべきである。
【０１０４】
以下の項および／または例は、さらなる実施形態に関する。  例示的な一実施形態は、画素内のサンプルを解析すること、画素の領域（region of pixels）に対して粗い画素、画素またはサンプルシェーディングを使用するかどうかを決定する段階、および、決定されたシェーディングのタイプに基づいてシェーディング率を設定する段階を含む方法であってもよい。方法はまた、領域内でサンプルごとのシェーディングを使用するかどうかを決定する段階を含むことができる。方法はまた、領域内でサンプルごとのシェーディングを使用しない場合、画素の領域内の各画素について代表サンプルを解析する段階を含むことができる。方法はまた、画素ごとのサンプル成分を評価する段階を含むことができる。方法はまた、画素ごとのシェーディングを使用するかどうかを決定する段階を含むことができる。方法はまた、画素ごとのシェーディングを使用しない場合、画素ごとのシェーディング成分を評価する段階を含むことができる。方法はまた、画素ごとのシェーディングを使用する場合、粗い画素ごとのシェーディング成分を評価する段階を含むことができる。方法はまた、サンプルを解析する段階が、サンプルが基準サンプルとどのくらい異なるかを決定する段階を含むことができる。方法はまた、サンプルを解析する段階が、領域がどのくらい滑らかであるかを決定する段階を含むことができる。方法はまた、同時に同じシェーディング率ですべての領域をシェーディングする段階を含むことができる。
【０１０５】
別の例示的な実施形態は、画素内のサンプルを解析すること、画素の領域に対して粗い画素、画素またはサンプルシェーディングを使用するかどうかを決定すること、および、決定されたシェーディングのタイプに基づいてシェーディング率を設定することを含むシーケンスを実行するために、プロセッサによって実行される命令を格納する１つまたは複数の非一時的なコンピュータ可読媒体であってもよい。媒体は、領域内でサンプルごとのシェーディングを使用するかどうかを決定することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、領域内でサンプルごとのシェーディングを使用しない場合、画素の領域内の各画素について代表サンプルを解析することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、領域内でサンプルごとのシェーディングを使用する場合、画素ごとのサンプル成分を評価することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、画素ごとのシェーディングを使用するかどうかを決定することを含むシーケンスを実行するための命令をさらに格納することができる。媒体は、画素ごとのシェーディングを使用しない場合、画素ごとのシェーディング成分を評価することを含む前記シーケンスを実行するための命令をさらに格納することができる。媒体は、画素ごとのシェーディングを使用する場合、粗い画素ごとのシェーディング成分を評価することを含む前記シーケンスを実行するための命令をさらに格納することができる。媒体は、サンプルを解析することが、サンプルが基準サンプルとどのくらい異なるかを決定することを含む、前記シーケンスを実行するための命令をさらに格納することができる。媒体は、サンプルを解析することが、領域がどのくらい滑らかであるかを決定することを含む、前記シーケンスを実行するための命令をさらに格納することができる。媒体は、同時に同じシェーディング率ですべての領域をシェーディングすることを含むシーケンスを実行するための命令をさらに格納することができる。
【０１０６】
別の例示的な実施形態は、画素内のサンプルを解析し、画素の領域に対して粗い画素、画素またはサンプルシェーディングを使用するかどうかを決定し、決定されたシェーディングのタイプに基づいてシェーディング率を設定するためのプロセッサと、前記プロセッサに連結されたストレージとを含む装置であってもよい。装置は、領域内でサンプルごとのシェーディングを使用するかどうかを決定するための前記プロセッサを含むことができる。装置は、領域内でサンプルごとのシェーディングを使用しない場合、画素の領域内の各画素について代表サンプルを解析するための前記プロセッサを含むことができる。装置は、領域内でサンプルごとのシェーディングを使用する場合、画素ごとのサンプル成分を評価するための前記プロセッサを含むことができる。装置は、画素ごとのシェーディングを使用するかどうかを決定するための前記プロセッサを含むことができる。装置は、画素ごとのシェーディングを使用しない場合、画素ごとのシェーディング成分を評価するための前記プロセッサを含むことができる。装置は、画素ごとのシェーディングを使用する場合、粗い画素ごとのシェーディング成分を評価するための前記プロセッサを含むことができる。装置は、オペレーティングシステム、バッテリおよびファームウェア、ならびに前記ファームウェアを更新するためのモジュールを含むことができる。
【０１０７】
本明細書で説明するグラフィックス処理技術は、さまざまなハードウェアアーキテクチャで実施され得る。例えば、グラフィックス機能がチップセット内に統合されてもよい。あるいは、別個のグラフィックスプロセッサを使用してもよい。さらに別の実施形態として、グラフィックス機能は、マルチコアプロセッサを含む汎用プロセッサによって実施されてもよい。
【０１０８】
本明細書にわたる「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」または「実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」という言及は、実施形態に関連して説明される特定の特徴、構造、または特性が、本開示に包含される少なくとも１つの実装形態に含まれることを意味する。したがって、「一実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」または「実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」という表現の出現は、必ずしも同じ実施形態を指しているとは限らない。さらに、特定の特徴、構造、または特性は、図示の特定の実施形態以外の他の適切な形態で実施されてもよく、このような形態はすべて本出願の特許請求の範囲内に包含されてもよい。
【０１０９】
限られた数の実施形態について説明してきたが、当業者であれば、多くの修正および変形が可能とされよう。添付の特許請求の範囲は、本開示の真の趣旨および範囲内にあるそのような修正および変形のすべてを含めることが意図されている。
【図１】
0006464538.tif 000003
【図２】
0006464538.tif 000004
【図３】
0006464538.tif 000005
【図４】
0006464538.tif 000006
【図５】
0006464538.tif 000007
【図６】
0006464538.tif 000008
【図７】
0006464538.tif 000009
【図８】
0006464538.tif 000010
【図９】
0006464538.tif 000011
【図１０Ａ】
0006464538.tif 000012
【図１０Ｂ】
0006464538.tif 000013
【図１１】
0006464538.tif 000014