(57)【特許請求の範囲】
【請求項１】
非直交状態（ＮＯＳ）に依存して変更を要する第１の複数の命令を前記ＮＯＳに依存しない第２の複数の命令から識別する段階と、
前記第１の複数の命令の各々をマークする段階と、
現在のＮＯＳを検出する段階と、
前記現在のＮＯＳに従ってマーク済みの前記第１の複数の命令を動的にパッチする段階とを備え、
前記識別する段階および前記マークする段階は、コンパイル時間中に実行され、前記検出する段階および前記パッチする段階は、シェーダ実行時間中に実行される、方法。
【請求項２】
前記第１の複数の命令は、グラフィックスシェーダを実装するための複数のシェーダ命令を含む、請求項１に記載の方法。
【請求項３】
前記第１の複数の命令の各々をマークする段階は、前記第１の複数の命令が依存する複数のＮＯＳを示すように前記第１の複数の命令の各々における１または複数のビットを設定する段階を有する、請求項１または２に記載の方法。
【請求項４】
前記第１の複数の命令と前記第２の複数の命令とを含むパッチ可能カーネルに、シェーダプログラムコードをコンパイルする段階を更に有する、請求項２に記載の方法。
【請求項５】
前記パッチ可能カーネルは、前記現在のＮＯＳのためのマーク済みの前記第１の複数の命令を動的にパッチする段階を実行することにより、シェーダ実行時間中にアップデートされる、請求項４に記載の方法。
【請求項６】
前記グラフィックスシェーダは、ピクセルシェーダ、頂点シェーダ、ジオメトリシェーダ、ハルシェーダ、およびドメインシェーダからなる群から選択される、請求項２に記載の方法。
【請求項７】
前記現在のＮＯＳに適合するグラフィックスシェーダを実装するべくパッチ済みの前記第１の複数の命令を実行する段階を更に備える、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
非直交状態（ＮＯＳ）に依存して変更を要する第１の複数の命令を前記ＮＯＳに依存しない第２の複数の命令から識別し、前記第１の複数の命令の各々をマークする命令マーキングロジックを用いるシェーダコンパイラと、
シェーダ実行時間中に現在のＮＯＳを検出して、前記現在のＮＯＳに従ってマーク済みの前記第１の複数の命令を動的にパッチする命令パッチロジックとを備える、装置。
【請求項９】
前記第１の複数の命令は、グラフィックスシェーダを実装するための複数のシェーダ命令を含む、請求項８に記載の装置。
【請求項１０】
前記現在のＮＯＳを検出することおよび前記現在のＮＯＳのためのマーク済みの前記第１の複数の命令を動的にパッチすることは、シェーダ実行機能がアプリケーションにより呼び出されるとき、またはその後に実行される、請求項９に記載の装置。
【請求項１１】
前記第１の複数の命令の各々をマークすることは、前記第１の複数の命令が依存する複数のＮＯＳを示すように前記第１の複数の命令の各々における１または複数のビットを設定することを含む、請求項８〜１０のいずれか１項に記載の装置。
【請求項１２】
前記シェーダコンパイラは、前記第１の複数の命令と前記第２の複数の命令とを含むパッチ可能カーネルに、シェーダプログラムコードをコンパイルする、請求項９に記載の装置。
【請求項１３】
前記パッチ可能カーネルは、前記現在のＮＯＳのためのマーク済みの前記第１の複数の命令を動的にパッチすることを実行することにより、シェーダ実行時間中にアップデートされる、請求項１２に記載の装置。
【請求項１４】
前記グラフィックスシェーダは、ピクセルシェーダ、頂点シェーダ、ジオメトリシェーダ、ハルシェーダ、およびドメインシェーダからなる群から選択される、請求項９に記載の装置。
【請求項１５】
前記現在のＮＯＳに適合するグラフィックスシェーダを実装するべくパッチされた前記第１の複数の命令を実行する複数の実行ユニット（ＥＵ）を更に備える、請求項８〜１４のいずれか１項に記載の装置。
【請求項１６】
コンピュータに、
非直交状態（ＮＯＳ）に依存して変更を要する第１の複数の命令を前記ＮＯＳに依存しない第２の複数の命令から識別する手順と、
前記第１の複数の命令の各々をマークする手順と、
現在のＮＯＳを検出する手順と、
前記現在のＮＯＳに従ってマーク済みの前記第１の複数の命令を動的にパッチする手順とを実行させ、
前記識別する手順および前記マークする手順は、コンパイル時間中に実行され、前記検出する手順および前記パッチする手順は、シェーダ実行機能がアプリケーションにより呼び出されるとき、またはその後に実行される、コンピュータプログラム。
【請求項１７】
前記第１の複数の命令は、グラフィックスシェーダを実装するための複数のシェーダ命令を含む、請求項１６に記載のコンピュータプログラム。
【請求項１８】
前記第１の複数の命令の各々をマークする前記手順は、前記第１の複数の命令が依存する複数のＮＯＳを示すように前記第１の複数の命令の各々における１または複数のビットを設定する手順を有する、請求項１６または１７に記載のコンピュータプログラム。
【請求項１９】
前記第１の複数の命令と前記第２の複数の命令とを含むパッチ可能カーネルに、シェーダプログラムコードをコンパイルする追加の手順を備える、請求項１７に記載のコンピュータプログラム。
【請求項２０】
前記パッチ可能カーネルは、前記現在のＮＯＳのためのマーク済みの前記第１の複数の命令を動的にパッチする前記手順を実行することにより、シェーダ実行時間中にアップデートされる、請求項１９に記載のコンピュータプログラム。
【請求項２１】
前記グラフィックスシェーダは、ピクセルシェーダ、頂点シェーダ、ジオメトリシェーダ、ハルシェーダ、およびドメインシェーダからなる群から選択される、請求項１７に記載のコンピュータプログラム。
【請求項２２】
前記現在のＮＯＳに適合するグラフィックスシェーダを実装するべくパッチ済みの前記第１の複数の命令を実行する手順を実行させる追加の手順を備える、請求項１６〜２１のいずれか１項に記載のコンピュータプログラム。
【請求項２３】
請求項１６〜２２のいずれか１項に記載のコンピュータプログラムを格納するコンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概ねコンピュータプロセッサの分野に関する。より詳細には、本発明は、現在の状態に基づいてシェーダプログラムをアップデートするための装置および方法に関する。
【背景技術】
【０００２】
ＯｐｅｎＧＬまたはＤｉｒｅｃｔＸのようなグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）においては、複数の固定機能ユニットおよびシェーディングプログラム（「シェーダ」と呼ばれる）に関連付けられて識別される状態が存在し得る。具体的には、シェーダは、この状態により定義される環境において、グラフィックス処理ユニット（ＧＰＵ）上で実行される。グラフィックスＡＰＩは、抽象的マシンモデルを記述する場合、このモデルの状態を現在のハードウェアアーキテクチャに変換するいくつかの形態が常に存在する。従って、複数の状態は、通常、シェーダプログラムを実行することによって既存のハードウェアにおいてエミュレートされる固定機能ユニットの機能を記述する場合がある。例えば、いくつかの実装において、複数の実行ユニット（ＥＵ）は、複数の固定機能ユニットのグラフィックス機能をエミュレートするべく、特定の状態において複数のシェーダプログラムを実行する場合がある。
【０００３】
ほとんどの場合、ハードウェアの設計を理由としてそのようなエミュレーションが必要とされ、アプリケーションにより提供される複数のシェーダプログラムにおいて追加または修正される複数の命令により実行される。そのような設計は、シェーダプログラムが現在の状態に依存し得、シェーダコードが再コンパイルされることをそのような状態の変更が必要とする状況をもたらす。そのような状態は、「非直交状態」（「ＮＯＳ」）と称され得る。
【０００４】
シェーダプログラムは、ＮＯＳに依存するので、いくつかの実装において、シェーダは、現在のＮＯＳを反映するべく、画像フレームレンダリング中に再コンパイルされ得る。コンパイル処理は、複雑で時間がかかるので、これは、レンダリング処理におけるストールおよびアニメーションのジャギーをもたらし得る。そのような状況を阻止するべく、複数のシェーダは、最も普及した複数のＮＯＳ設定用の異なるバージョンへとコンパイルされ、次にキャッシュされ得る。これにより、シェーダ再コンパイルの量を低減するが、それらを完全に除くことはない。なぜなら、あまりにも多くのＮＯＳ変更が存在するからである。これは、コンパイルされる複数のシェーダの追加のコピーを格納するのに必要とされる追加のメモリ、およびこれらのコピーのコンパイルに必要とされる追加の電力消費に関連するコストももたらす。
【図面の簡単な説明】
【０００５】
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得られ得る。
【０００６】
【図１】プロセッサが１または複数のプロセッサコアおよびグラフィックスプロセッサを有するコンピュータシステムの実施形態のブロック図である。
【０００７】
【図２】プロセッサが１または複数のプロセッサコア、統合メモリコントローラ、および統合グラフィックスプロセッサを有する一実施形態のブロック図である。
【０００８】
【図３】ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサの一実施形態のブロック図である。
【０００９】
【図４】グラフィックスプロセッサ用のグラフィックス処理エンジンの実施形態のブロック図である。
【００１０】
【図５】グラフィックスプロセッサの別の実施形態のブロック図である。
【００１１】
【図６】複数の処理要素のアレイを含むスレッド実行ロジックのブロック図である。
【００１２】
【図７】一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示する。
【００１３】
【図８】グラフィックスパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、およびレンダリング出力パイプラインを含むグラフィックスプロセッサの別の実施形態のブロック図である。
【００１４】
【図９Ａ】一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図である。
【００１５】
【図９Ｂ】一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。
【００１６】
【図１０】一実施形態のよるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。
【００１７】
【図１１】現在の状態に基づいてシェーダプログラムをアップデートするためのアーキテクチャの一実施形態を図示する。
【００１８】
【図１２】現在の状態に基づいてシェーダプログラムをアップデートするためのアーキテクチャに関する更なる詳細を図示する。
【００１９】
【図１３】現在の状態に基づいてシェーダプログラムをアップデートするための方法の一実施形態を図示する。
【発明を実施するための形態】
【００２０】
以下の説明において、説明の目的のために、下記の本発明の複数の実施形態の完全な理解を提供するべく、多数の具体的な詳細が記載される。しかし、当業者には、本発明の複数の実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。本発明の複数の実施形態の基礎となる原理を不明瞭にするのを避けるべく、複数の他の例において、周知の複数の構造およびデバイスがブロック図の形態で示される。
【００２１】
例示的なグラフィックスプロセッサアーキテクチャおよびデータタイプ
［概要−図１〜３］
図１は、実施形態による、データ処理システム１００のブロック図である。データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８とを含み、多数のプロセッサ１０２またはプロセッサコア１０７を有するシングルプロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、またはサーバシステムであってもよい。実施形態において、データ処理システム１００は、モバイル、ハンドヘルド型、またはエンベデッドデバイスにおいて用いるためのシステムオンチップ集積回路（ＳＯＣ）である。
【００２２】
データ処理システム１００の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォーム、ゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム１００は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８により生成されるグラフィカルインターフェースとを有するテレビまたはセットトップボックスデバイスである。
【００２３】
１または複数のプロセッサ１０２は各々、実行されると、システムおよびユーザソフトウェアのための複数のオペレーションを実行する複数の命令を処理するべく、１または複数のプロセッサコア１０７を含む。一実施形態において、１または複数のプロセッサコア１０７の各々は、特定の命令セット１０９を処理するように構成される。命令セット１０９は、複合命令セット演算（ＣＩＳＣ）、縮小命令セット演算（ＲＩＳＣ）、または超長命令語（ＶＬＩＷ）による演算を容易にし得る。複数のプロセッサコア１０７は各々、複数の他の命令セットのエミュレーションを容易にする複数の命令を含み得る、異なる命令セット１０９を処理し得る。プロセッサコア１０７は、デジタル信号プロセッサ（ＤＳＰ）等の複数の他の処理デバイスも含み得る。
【００２４】
一実施形態において、プロセッサ１０２は、キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。一実施形態において、キャッシュメモリは、プロセッサ１０２の様々なコンポーネント間で共有される。一実施形態において、プロセッサ１０２は、既知の複数のキャッシュコヒーレンシ技術を用いる複数のプロセッサコア１０７間で共有され得る外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュまたはラストレベルキャッシュ（ＬＬＣ））（図示せず）も用いる。更に、レジスタファイル１０６は、複数の異なるタイプのデータを格納する複数の異なるタイプのレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ）を含み得る、プロセッサ１０２内に含まれる。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ１０２の設計に固有であってもよい。
【００２５】
プロセッサ１０２は、システム１００におけるプロセッサ１０２と複数の他のコンポーネントとの間で複数のデータ信号を送信するべく、プロセッサバス１１０と結合される。システム１００は、メモリコントローラハブ１１６および入力・出力（Ｉ／Ｏ）コントローラハブ１３０を含む、例示的な「ハブ」システムアーキテクチャを用いる。メモリコントローラハブ１１６は、システム１００のメモリデバイスと複数の他のコンポーネントとの間の通信を容易にするが、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏデバイスへの複数の接続を提供する。
【００２６】
メモリデバイス１２０は、処理メモリとして機能する好適な性能を有する、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、またはいくつかの他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２が処理を実行するときに用いられるデータ１２２および複数の命令１２１を格納し得る。メモリコントローラハブ１１６は、任意選択の外部グラフィックスプロセッサ１１２にも結合し、任意選択の外部グラフィックスプロセッサ１１２は、グラフィックスおよびメディアオペレーションを実行するべく、プロセッサ１０２において１または複数のグラフィックスプロセッサ１０８と通信し得る。
【００２７】
ＩＣＨ１３０は、複数の周辺機器が高速Ｉ／Ｏバスを介してメモリ１２０およびプロセッサ１０２に接続することを可能にする。Ｉ／Ｏ周辺機器は、オーディオコントローラ１４６、ファームウェアインターフェース１２８、無線トランシーバ１２６（例えば、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標））、データストレージデバイス１２４（例えば、ハードディスクドライブ、フラッシュメモリ等）、および複数のレガシ（例えば、パーソナルシステム２（ＰＳ／２））デバイスをシステムと結合するためのレガシＩ／Ｏコントローラを含む。１または複数のユニバーサルシリアルバス（ＵＳＢ）コントローラ１４２は、キーボードおよびマウス１４４の組み合わせのような複数の入力デバイスを接続する。ネットワークコントローラ１３４も、ＩＣＨ１３０と結合し得る。一実施形態において、高性能ネットワークコントローラ（図示せず）は、プロセッサバス１１０と結合する。
【００２８】
図２は、１または複数のプロセッサコア２０２Ａ〜Ｎ、統合メモリコントローラ２１４、および統合グラフィックスプロセッサ２０８を有するプロセッサ２００の実施形態のブロック図である。プロセッサ２００は、破線ボックスにより表される追加のコア２０２Ｎまでの複数の追加のコアを含み得る。コア２０２Ａ〜Ｎの各々は、１または複数の内部キャッシュユニット２０４Ａ〜Ｎを含む。一実施形態において、各コアは、１または複数の共有キャッシュユニット２０６へのアクセスも有する。
【００２９】
内部キャッシュユニット２０４Ａ〜Ｎ、および共有キャッシュユニット２０６は、プロセッサ２００内におけるキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも１つのレベルの複数の命令およびデータキャッシュ、ならびにレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または複数の他のレベルのキャッシュのような１または複数のレベルの中間レベルの共有キャッシュを含み得、外部メモリの前の最高レベルのキャッシュは、ラストレベルキャッシュ（ＬＬＣ）として分類される。一実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット２０６および２０４Ａ〜Ｎ間のコヒーレンシを維持する。
【００３０】
プロセッサ２００は、１または複数のバスコントローラユニット２１６およびシステムエージェント２１０のセットも含み得る。１または複数のバスコントローラユニットは、１または複数の周辺構成要素相互接続バス（例えば、ＰＣＩ、ＰＣＩエクスプレス）のような複数の周辺機器バスのセットを管理する。システムエージェント２１０は、様々なプロセッサコンポーネントのための管理機能を提供する。一実施形態において、システムエージェント２１０は、様々な外部メモリデバイス（図示せず）へのアクセスを管理するべく、１または複数の統合メモリコントローラ２１４を含む。
【００３１】
一実施形態において、コア２０２Ａ〜Ｎのうちの１または複数は、同時のマルチスレッディングのためのサポートを含む。そのような実施形態において、システムエージェント２１０は、マルチスレッド処理中にコア２０２Ａ〜Ｎを調整および動作させるための複数のコンポーネントを含む。更に、システムエージェント２１０は、電力制御ユニット（ＰＣＵ）を含み得、電力制御ユニットは、コア２０２Ａ〜Ｎおよびグラフィックスプロセッサ２０８の電力状態を調整するロジックおよび複数のコンポーネントを含む。
【００３２】
更に、プロセッサ２００は、複数のグラフィックス処理オペレーションを実行するグラフィックスプロセッサ２０８を含む。一実施形態において、グラフィックスプロセッサ２０８は、共有キャッシュユニット２０６、および１または複数の統合メモリコントローラ２１４を含むシステムエージェントユニット２１０のセットと結合する。一実施形態において、ディスプレイコントローラ２１１は、１または複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するべく、グラフィックスプロセッサ２０８と結合される。ディスプレイコントローラ２１１は、少なくとも１つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ２０８もしくはシステムエージェント２１０内に統合されてもよい。
【００３３】
一実施形態において、リングベースの相互接続ユニット２１２は、プロセッサ２００の複数の内部コンポーネントを結合するべく用いられる。しかし、当技術分野において周知の複数の技術を含む、ポイントツーポイント相互接続、スイッチ相互接続、または他の複数の技術等、代替的な相互接続ユニットが用いられてもよい。一実施形態において、グラフィックスプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続２１２と結合する。
【００３４】
例示的なＩ／Ｏリンク２１３は、様々なプロセッサコンポーネントとｅＤＲＡＭモジュールのような高性能エンベデッドメモリモジュール２１８との間の通信を容易にするパッケージＩ／Ｏ相互接続を含む、複数の様々なＩ／Ｏ相互接続のうちの少なくとも１つを表す。一実施形態において、コア２０２〜Ｎおよびグラフィックスプロセッサ２０８の各々は、共有ラストレベルキャッシュとしてエンベデッドメモリモジュール２１８を用いる。
【００３５】
一実施形態において、コア２０２Ａ〜Ｎは、同一の命令セットアーキテクチャを実行する同種のコアである。別の実施形態において、コア２０２Ａ〜Ｎは、命令セットアーキテクチャ（ＩＳＡ）の観点からは異種であり、コア２０２Ａ〜Ｎのうちの１または複数は、第１の命令セットを実行するが、複数の他のコアのうちの少なくとも１つは、第１の命令セットまたは異なる命令セットのサブセットを実行する。
【００３６】
プロセッサ２００は、いくつかの処理技術、例えば、相補型金属酸化膜半導体（ＣＭＯＳ）、バイポーラ接合／相補型金属酸化膜半導体（ＢｉＣＭＯＳ）またはＮ型金属酸化膜半導体ロジック（ＮＭＯＳ）のいずれかを用いる、１または複数の基板の一部であるか、またはこれらの上に実装され得る。更に、プロセッサ２００は、複数の他のコンポーネントに加えて、１または複数のチップ上に実装され、または図示される複数のコンポーネントを有するシステムオンチップ（ＳＯＣ）集積回路として実装され得る。
【００３７】
図３は、ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサ３００の一実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上の複数のレジスタにメモリマッピングされたＩ／Ｏインターフェースと、プロセッサメモリ内に置かれる複数のコマンドにより通信される。グラフィックスプロセッサ３００は、メモリにアクセスするためのメモリインターフェース３１４を含む。メモリインターフェース３１４は、ローカルメモリ、１または複数の内部キャッシュ、１または複数の共有外部キャッシュ、および／またはシステムメモリへのインターフェースであり得る。
【００３８】
グラフィックスプロセッサ３００は、ディスプレイ出力データをディスプレイデバイス３２０に駆動するディスプレイコントローラ３０２も含む。ディスプレイコントローラ３０２は、ディスプレイ用の１または複数のオーバーレイ平面のためのハードウェアと、動画またはユーザインターフェース要素の複数の層の構成物とを含む。一実施形態において、グラフィックスプロセッサ３００は、ＭＰＥＧ２のようなムービングピクチャエクスパーツグループ（ＭＰＥＧ）フォーマット、Ｈ．２６４／ＭＰＥＧ４  ＡＶＣのようなアドバンスドビデオコーディング（ＡＶＣ）フォーマット、および米国映画テレビ技術者協会（ＳＭＰＴＥ）４２１Ｍ／ＶＣ−１、ならびにＪＰＥＧ、およびモーションＪＰＥＧ（ＭＪＰＥＧ）フォーマットのようなジョイントフォトグラフィックエクスパーツグループ（ＪＰＥＧ）フォーマットを含むがこれらに限定されない、１または複数のメディアエンコードフォーマットへ、これらから、またはこれらの間でメディアをエンコード、デコード、またはトランスコードするビデオコーデックエンジン３０６を含む。
【００３９】
一実施形態において、グラフィックスプロセッサ３００は、例えば、ビット境界ブロック転送を含む、複数の２次元（２Ｄ）ラスタライザオペレーションを実行するブロック画像転送（ＢＬＩＴ）エンジン３０４を含む。しかし、一実施形態において、複数の２Ｄグラフィックスオペレーションは、グラフィックス処理エンジン（ＧＰＥ）310の１または複数のコンポーネントを用いて実行される。グラフィックス処理エンジン310は、複数の３次元（３Ｄ）グラフィックスオペレーションおよびメディアオペレーションを含む、グラフィックスオペレーションを実行するためのコンピューティングエンジンである。
【００４０】
ＧＰＥ３１０は、３Ｄプリミティブ図形（例えば、矩形、トライアングル等）に対して機能する複数の処理機能を用いて、複数の３次元画像およびシーンをレンダリングするなど、複数の３Ｄオペレーションを実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内の様々なタスクを実行し、および／または３Ｄ／メディアサブシステム３１５に複数の実行スレッドをスポーン（ｓｐａｗｎ）するプログラミング可能な複数の固定関数要素を含む。３Ｄパイプライン３１２は、複数のメディアオペレーションを実行するべく用いられ得るが、ＧＰＥ310の実施形態は、具体的には、動画の後処理および画像強調等の複数のメディアオペレーションを実行するべく用いられるメディアパイプライン３１６も含む。
【００４１】
一実施形態において、メディアパイプライン３１６は、ビデオコーデックエンジン３０６の代替に、またはこれの代わりに動画デコードの加速、動画のインターレース解除、および動画エンコードの加速等、１または複数の専用メディアオペレーションを実行する、固定関数またはプログラミング可能なロジックユニットを含む。実施形態において、メディアパイプライン３１６は更に、３Ｄ／メディアサブシステム３１５において実行するための複数のスレッドをスポーンする、スレッドスポーンユニットを含む。スポーンされた複数のスレッドは、３Ｄ／メディアサブシステムに含まれる１または複数のグラフィックス実行ユニット上で複数のメディアオペレーションのための演算を実行する。
【００４２】
３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２およびメディアパイプライン３１６によりスポーンされた複数のスレッドを実行するためのロジックを含む。一実施形態において、複数のパイプラインは、複数のスレッド実行要求を３Ｄ／メディアサブシステム３１５に送信する。３Ｄ／メディアサブシステム３１５は、利用可能な複数のスレッド実行リソースに対する様々な要求を調整およびディスパッチするためのスレッドディスパッチロジックを含む。複数の実行リソースは、３Ｄおよびメディアスレッドを処理する複数のグラフィックス実行ユニットのアレイを含む。一実施形態において、３Ｄ／メディアサブシステム３１５は、複数のスレッド命令およびデータのための１または複数の内部キャッシュを含む。一実施形態において、サブシステムは、複数のスレッド間のデータを共有し、出力データを格納する複数のレジスタおよびアドレス指定可能メモリを含む、共有メモリも含む。
【００４３】
［３Ｄ／メディア処理−図４］
図４は、グラフィックスプロセッサ用のグラフィックス処理エンジン４１０の実施形態のブロック図である。一実施形態において、グラフィックス処理エンジン（ＧＰＥ）４１０は、図３に示されるＧＰＥ３１０の１つのバージョンである。ＧＰＥ４１０は、３Ｄパイプライン４１２およびメディアパイプライン４１６を含み、その各々は、図３の３Ｄパイプライン３１２およびメディアパイプライン３１６の実装と異なるか、またはこれに類似するかのいずれかであり得る。
【００４４】
一実施形態において、ＧＰＥ４１０は、コマンドストリーマ４０３と結合し、コマンドストリーマ４０３は、コマンドストリームをＧＰＥ３Ｄパイプライン４１２およびメディアパイプライン４１６に提供する。コマンドストリーマ４０３は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの１または複数であり得るメモリと結合される。コマンドストリーマ４０３は、メモリから複数のコマンドを受信し、これらのコマンドを３Ｄパイプライン４１２および／またはメディアパイプライン４１６に送信する。３Ｄパイプラインおよびメディアパイプラインは、各パイプライン内のロジックによる複数のオペレーションを実行し、または１または複数の実行スレッドを実行ユニットアレイ４１４にディスパッチすることにより、複数のコマンドを処理する。一実施形態において、実行ユニットアレイ４１４はスケーラブルであり、その結果、アレイは、ＧＰＥ４１０のターゲット電力および性能レベルに基づいて変わり得る数の実行ユニットを含む。
【００４５】
サンプリングエンジン４３０は、メモリ（例えば、キャッシュメモリまたはシステムメモリ）および実行ユニットアレイ４１４と結合する。一実施形態において、サンプリングエンジン４３０は、実行アレイ４１４がグラフィックスおよびメディアデータをメモリから読み取ることを可能にするスケーラブルな実行ユニットアレイ４１４のためのメモリアクセスメカニズムを提供する。一実施形態において、サンプリングエンジン４３０は、メディアに対する複数の専用画像サンプリングオペレーションを実行するロジックを含む。
【００４６】
サンプリングエンジン４３０における専用メディアサンプリングロジックは、ノイズ除去／インターレース解除モジュール４３２、動き推定モジュール４３４、および画像スケーリング・フィルタリングモジュール４３６を含む。ノイズ除去／インターレース解除モジュール４３２は、デコードされる動画データにノイズ除去またはインターレース解除アルゴリズムのうちの１または複数を実行するロジックを含む。インターレース解除ロジックは、インターレース済みの動画コンテンツの複数の交互フィールドを組み合わせて１つのフレームの動画にする。ノイズ除去ロジックは、動画および画像データからデータノイズを低減または除去する。一実施形態において、ノイズ除去ロジックおよびインターレース解除ロジックは、動き適応型であり、動画データにおいて検出された動きの量に基づく空間的または時間的フィルタリングを用いる。一実施形態において、ノイズ除去／インターレース解除モジュール４３２は、（例えば、動き推定エンジン４３４内に）専用の動き検出ロジックを含む。
【００４７】
動き推定エンジン４３４は、動きベクトル推定および動画データに関する予測等の複数の動画加速機能を実行することにより、複数の動画オペレーションのためのハードウェアの加速を提供する。動き推定エンジンは、複数の連続的動画フレーム間の画像データ変換を記載する複数の動きベクトルを決定する。一実施形態において、グラフィックスプロセッサのメディアコーデックは、別の場合には汎用プロセッサの使用を実行するべく演算集約的であり得るマクロブロックレベルで動画に複数のオペレーションを実行する、動画動き推定エンジン４３４を用いる。一実施形態において、動き推定エンジン４３４は一般に、動画データ内の動きの方向および大きさに感応性または適応性である動画デコードおよび複数の処理機能を支援するべく、複数のグラフィックスプロセッサコンポーネントに利用可能である。
【００４８】
画像スケーリング・フィルタリングモジュール４３６は、生成される画像および動画の視覚的質を高めるべく複数の画像処理オペレーションを実行する。一実施形態において、画像スケーリング・フィルタリングモジュール４３６は、データを実行ユニットアレイ４１４に提供する前に、サンプリングオペレーション中に画像および動画データを処理する。
【００４９】
一実施形態において、グラフィックス処理エンジン４１０は、データポート４４４を含み、データポート４４４は、メモリにアクセスするために複数のグラフィックスサブシステム用の追加のメカニズムを提供する。データポート４４４は、レンダリングターゲット書き込み、コンスタントバッファ読み取り、スクラッチメモリ空間の読み取り／書き込み、およびメディアサーフェスアクセスを含む複数のオペレーションのためのメモリアクセスを容易にする。一実施形態において、データポート４４４は、メモリへの複数のアクセスをキャッシュするキャッシュメモリ空間を含む。キャッシュメモリは、１つのデータキャッシュであり、またはデータポートを介してメモリにアクセスする複数のサブシステム用の複数のキャッシュ（例えば、レンダリングバッファキャッシュ、コンスタントバッファキャッシュ等）に分離され得る。一実施形態において、実行ユニットアレイ４１４における実行ユニット上で実行される複数のスレッドは、グラフィックス処理エンジン４１０の複数のサブシステムの各々を結合するデータ配信相互接続を介して複数のメッセージを交換することにより、データポートと通信する。
【００５０】
［実行ユニット−図５〜図７］  図５は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、リング相互接続５０２、パイプラインフロントエンド５０４、メディアエンジン５３７、およびグラフィックスコア５８０Ａ〜Ｎを含む。リング相互接続５０２は、複数の他のグラフィックスプロセッサ、または１または複数の汎用プロセッサコアを含む複数の他の処理ユニットに、グラフィックスプロセッサを結合する。一実施形態において、グラフィックスプロセッサは、マルチコア処理システム内に統合される多くのプロセッサのうちの１つである。
【００５１】
グラフィックスプロセッサは、リング相互接続５０２を介して複数のコマンドのバッチを受信する。複数の受信コマンドは、パイプラインフロントエンド５０４におけるコマンドストリーマ５０３により変換される。グラフィックスプロセッサは、グラフィックスコア５８０Ａ〜Ｎを介して３Ｄジオメトリ処理およびメディア処理を実行する、スケーラブルな実行ロジックを含む。３Ｄジオメトリ処理コマンドについては、コマンドストリーマ５０３は、複数のコマンドをジオメトリパイプライン５３６に提供する。少なくともいくつかのメディア処理コマンドについては、コマンドストリーマ５０３は、複数のコマンドを、メディアエンジン５３７と結合するビデオフロントエンド５３４に提供する。メディアエンジン５３７は、動画および画像の後処理のための画質エンジン（ＶＱＥ）５３０と、ハードウェアにより加速されるメディアデータのエンコードおよびデコードを提供するマルチフォーマットエンコード／デコード（ＭＦＸ）エンジン５３３とを含む。ジオメトリパイプライン５３６およびメディアエンジン５３７は各々、少なくとも１つのグラフィックスコア５８０Ａにより提供されるスレッド実行リソース用の複数の実行スレッドを生成する。
【００５２】
グラフィックスプロセッサは、モジュラコア５８０Ａ〜Ｎ（コアスライスと称される場合がある）を特徴付けるスケーラブルなスレッド実行リソースを含み、各々は、複数のサブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎ（コアサブスライスと称される場合がある）を有する。グラフィックスプロセッサは、任意の数のグラフィックスコア５８０Ａ〜５８０Ｎを有し得る。一実施形態において、グラフィックスプロセッサは、少なくとも第１のサブコア５５０Ａおよび第２のサブコア５６０Ａを有するグラフィックスコア５８０Ａを含む。別の実施形態において、グラフィックスプロセッサは、１つのサブコア（例えば５５０Ａ）を有する低電力プロセッサである。一実施形態において、グラフィックスプロセッサは、複数のグラフィックスコア５８０Ａ〜Ｎを含み、それらの各々は、複数の第１のサブコアのセット５５０Ａ〜Ｎと、複数の第２のサブコアのセット５６０Ａ〜Ｎとを含む。複数の第１のサブコアのセット５５０Ａ〜Ｎにおける各サブコアは、少なくとも複数の実行ユニット５５２Ａ〜Ｎと、複数のメディア／テクスチャサンプラ５５４Ａ〜Ｎとの第１のセットを含む。複数の第２のサブコアのセット５６０Ａ〜Ｎにおける各サブコアは、少なくとも複数の実行ユニット５６２Ａ〜Ｎと、複数サンプラ５６４Ａ〜Ｎとの第２のセットを含む。一実施形態において、各サブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎは、複数の共有リソース５７０Ａ〜Ｎのセットを共有する。一実施形態において、複数の共有リソースは、共有キャッシュメモリおよびピクセルオペレーションロジックを含む。他の複数の共有リソースも、グラフィックスプロセッサの様々な実施形態に含まれてもよい。
【００５３】
図６は、グラフィックス処理エンジンの一実施形態において使用される複数の処理要素のアレイを含むスレッド実行ロジック６００を図示する。一実施形態において、スレッド実行ロジック６００は、ピクセルシェーダ６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜Ｎを含むスケーラブルな実行ユニットアレイ、サンプラ６１０、データキャッシュ６１２、およびデータポート６１４を含む。一実施形態において、含まれる複数のコンポーネントは、複数のコンポーネントの各々とリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、および実行ユニットアレイ６０８Ａ〜Ｎのうちの１または複数を介して、システムメモリまたはキャッシュメモリのようなメモリへの１または複数の接続を含む。一実施形態において、各実行ユニット（例えば６０８Ａ）は、複数の同時のスレッドを実行してスレッド毎に並行に複数のデータ要素を処理することができる個別のベクトルプロセッサである。実行ユニットアレイ６０８Ａ〜Ｎは、任意の数の個別の実行ユニットを含む。
【００５４】
一実施形態において、実行ユニットアレイ６０８Ａ〜Ｎは主に、「シェーダ」プログラムを実行するべく用いられる。一実施形態において、アレイ６０８Ａ〜Ｎにおける実行ユニットは、多くの標準的３Ｄグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行し、従って複数のグラフィックスライブラリからのシェーダプログラム（例えば、Ｄｉｒｅｃｔ  ３ＤおよびＯｐｅｎＧＬ）は、最小の変換で実行される。複数の実行ユニットは、頂点およびジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）、および汎用処理（例えば、演算およびメディアシェーダ）をサポートする。
【００５５】
実行ユニットアレイ６０８Ａ〜Ｎにおける各実行ユニットは、複数のデータ要素のアレイ上で動作する。データ要素の数は、命令に対する「実行サイズ」またはチャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および複数の命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサに対する物理ＡＬＵまたはＦＰＵの数から独立している場合がある。実行ユニット６０８Ａ〜Ｎは、整数および浮動小数点のデータタイプをサポートする。
【００５６】
実行ユニット命令セットは、複数の単一命令多重データ（ＳＩＭＤ）命令を含む。様々なデータ要素は、パックドデータのタイプとしてレジスタに格納され得、実行ユニットは、複数の要素のデータサイズに基づいて様々な要素を処理する。例えば、２５６ビット幅のベクトル上で動作する場合、ベクトルの２５６ビットは、レジスタに格納され、実行ユニットは、４個の別個の６４ビットパックドデータ要素（クワッドワード（ＱＷ）サイズのデータ要素）、８個の別個の３２ビットパックドデータ要素（ダブルワード（ＤＷ）サイズのデータ要素）、１６個の別個の１６ビットパックドデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２個の別個の８ビットデータ要素（バイト（ｂ）サイズのデータ要素）としてベクトル上で動作する。しかし、異なる複数のベクトル幅およびレジスタサイズが可能である。
【００５７】
１または複数の内部命令キャッシュ（例えば、６０６）は、スレッド実行ロジック６００に含まれ、実行ユニットのための複数のスレッド命令をキャッシュする。一実施形態において、スレッド実行中にスレッドデータをキャッシュする１または複数のデータキャッシュ（例えば６１２）が含まれる。複数の３Ｄオペレーションのためのテクスチャサンプリングおよび複数のメディアオペレーションのためのメディアサンプリングを提供するサンプラ６１０が含まれる。一実施形態において、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャまたはメディアデータを処理する専用テクスチャまたはメディアサンプリング機能を含む。
【００５８】
実行中に、グラフィックスおよびメディアパイプラインは、スレッドスポーンおよびディスパッチロジックにより複数のスレッド開始要求をスレッド実行ロジック６００に送信する。スレッド実行ロジック６００は、グラフィックスおよびメディアパイプラインからの複数のスレッド開始要求を調整し、１または複数の実行ユニット６０８Ａ〜Ｎ上で要求された複数のスレッドをインスタンス化する、ローカルのスレッドディスパッチャ６０４を含む。例えば、ジオメトリパイプライン（例えば、図５の５３６）は、頂点処理、テセレーション、またはジオメトリ処理のスレッドをスレッド実行ロジック６００にディスパッチする。スレッドディスパッチャ６０４は、実行される複数のシェーダプログラムからのランタイムスレッドスポーン要求も処理し得る。
【００５９】
複数の幾何学的オブジェクトのグループが処理され、ラスタライズされてピクセルデータになると、ピクセルシェーダ６０２が呼び出され、更に出力情報を演算することで、結果が出力面に書き込まれる（例えば、色バッファ、デプスバッファ、ステンシルバッファ等）。一実施形態において、ピクセルシェーダ６０２は、ラスタライズされたオブジェクトにわたって補間される様々な頂点属性の値を算出する。次に、ピクセルシェーダ６０２は、ＡＰＩにより提供されるピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するべく、ピクセルシェーダ６０２は、スレッドディスパッチャ６０４により複数のスレッドを実行ユニット（例えば６０８Ａ）にディスパッチする。ピクセルシェーダ６０２は、メモリに格納された複数のテクスチャマップにおけるテクスチャデータにアクセスするべく、サンプラ６１０におけるテクスチャサンプリングロジックを用いる。テクスチャデータおよび入力ジオメトリデータに対する複数の算術オペレーションは、幾何学フラグメント毎にピクセルカラーデータを演算するか、または１または複数のピクセルを更なる処理から破棄する。
【００６０】
一実施形態において、データポート６１４は、スレッド実行ロジック６００の出力処理されたデータのためのメモリアクセスメカニズムを、グラフィックスプロセッサ出力パイプライン上で処理するためのメモリに提供する。一実施形態において、データポート６１４は、データポートを介するメモリアクセスのためにデータをキャッシュする１または複数のキャッシュメモリ（例えば、データキャッシュ６１２）を含み、またはこれと結合する。
【００６１】
図７は、一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示するブロック図である。一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線で囲まれた複数のボックスは、一般に実行ユニット命令に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数の命令のサブセットのみに含まれる複数のコンポーネントを含む。説明され、図示される命令フォーマットは、命令が処理されると、命令のデコードからもたらされる複数のマイクロオペレーションとは異なり、実行ユニットに提供される命令であるという点で、マクロ命令である。
【００６２】
一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、１２８ビットフォーマット７１０の複数の命令をネイティブにサポートする。６４ビット圧縮命令フォーマット７３０は、選択される命令、命令オプション、およびオペランドの数に基づいていくつかの命令に対して利用可能である。ネイティブな１２８ビットフォーマット７１０は、全ての命令オプションにアクセスを提供するが、いくつかのオプションおよびオペレーションは、６４ビットフォーマット７３０において制限されている。６４ビットフォーマット７３０において利用可能であるネイティブな命令は、実施形態により異なる。一実施形態において、命令は、インデックスフィールド７１３における複数のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、複数のインデックス値に基づいて複数の圧縮テーブルのセットを参照し、１２８ビットフォーマット７１０において複数のネイティブ命令を再構成するべく、複数の圧縮テーブル出力を用いる。
【００６３】
フォーマット毎に、命令オペコード７１２は、実行ユニットが実行するオペレーションを規定する。複数の実行ユニットは、各オペランドの複数のデータ要素にわたって並行に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素または画素を表す各色チャネルにわたって同時の加算オペレーションを実行する。デフォルトで、実行ユニットは、複数のオペランドの全てのデータチャネルにわたって各命令を実行する。命令制御フィールド７１２は、チャネル選択（例えば予測）およびデータチャネルの順序（例えばスウィズル）のような特定の実行オプションに対する制御を可能にする。１２８ビット命令７１０については、実行サイズフィールド７１６は、並行に実行されるデータチャネルの数を制限する。実行サイズフィールド７１６は、６４ビットの圧縮命令フォーマット７３０で用いるために利用可能である。
【００６４】
いくつかの実行ユニット命令は、２つのソースオペランドｓｒｃ０  ７２０、ｓｒｃ１  ７２２、およびデスティネーション７１８を含む、最大３つのオペランドを有する。一実施形態において、複数の実行ユニットは、デュアルのデスティネーション命令をサポートし、デスティネーションのうちの１つが暗に示される。複数のデータ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２７２４）を有し得、命令オペコードＪＪ１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡されるイミディエイト値（例えば、ハードコードされた）であり得る。
【００６５】
一実施形態において、複数の命令は、オペコードデコード７４０を単純化するべく、オペコードビットフィールドに基づいてグループ化される。８ビットのオペコードについては、ビット４、５、および６は、実行ユニットがオペコードのタイプを決定することを可能にする。示される厳密なオペコードのグループ化は、例示的なものである。一実施形態において、移動およびロジックオペコードグループ７４２は、データ移動およびロジック命令（例えば、ｍｏｖ、ｃｍｐ）を含む。移動およびロジックグループ７４２は、５つの最も重要なビット（ＭＳＢ）を共有し、移動命令は、００００ｘｘｘｘｂ（例えば、０ｘ０ｘ）の形式であり、ロジック命令は、０００１ｘｘｘｘｂ（例えば、０ｘ０１）の形式である。フロー制御命令グループ７４４（例えば、ｃａｌｌ、ｊｍｐ）は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の複数の命令を含む。その他の命令グループ７４６は、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、ｗａｉｔ、ｓｅｎｄ）を含む、複数の命令のミックスを含む。並列マス命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネント様式の複数の算術命令（例えば、ａｄｄ、ｍｕｌ）を含む。並列マスグループ７４８は、複数のデータチャネルにわたって並行に複数の算術オペレーションを実行する。ベクトルマスグループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の複数の算術命令（例えば、ｄｐ４）を含む。ベクトルマスグループは、点乗積計算のような算術を複数のベクトルオペランド上で実行する。
【００６６】
［グラフィックスパイプライン−図８］
図８は、グラフィックスパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、およびレンダリング出力パイプライン８７０を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、１または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、１または複数の制御レジスタ（図示せず）へのレジスタ書き込みにより、またはリング相互接続８０２を介してグラフィックスプロセッサに発行された複数のコマンドにより、制御される。リング相互接続８０２は、他のグラフィックスプロセッサまたは汎用プロセッサ等の複数の他の処理コンポーネントに、グラフィックスプロセッサを結合する。リング相互接続からの複数のコマンドは、グラフィックスパイプライン８２０またはメディアパイプライン８３０の個別のコンポーネントに複数の命令を提供するコマンドストリーマ８０３により、変換される。
【００６７】
コマンドストリーマ８０３は、頂点データをメモリから読み取り、コマンドストリーマ８０３により提供された複数の頂点処理コマンドを実行する、頂点フェッチャ８０５のコンポーネントのオペレーションを管理する。頂点フェッチャ８０５は、頂点データを頂点シェーダ８０７に提供し、頂点シェーダ８０７は、座標空間変換および複数のライティングオペレーションを各頂点に実行する。頂点フェッチャ８０５および頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して複数の実行スレッドを実行ユニット８５２Ａ、８５２Ｂにディスパッチすることにより、複数の頂点処理命令を実行する。
【００６８】
一実施形態において、実行ユニット８５２Ａ、８５２Ｂは、グラフィックスおよびメディアオペレーションを実行するための命令セットを有する複数のベクトルプロセッサのアレイである。実行ユニット８５２Ａ、８５２Ｂは、各アレイに固有であるか、または複数のアレイ間で共有される取り付け済みのＬ１キャッシュ８５１を有する。キャッシュは、パーティショニングされるデータキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
【００６９】
一実施形態において、グラフィックスパイプライン８２０は、複数の３Ｄオブジェクトのハードウェア加速テセレーションを実行する複数のテセレーションコンポーネントを含む。プログラミング可能なハルシェーダ８１１は、複数のテセレーションオペレーションを構成する。プログラミング可能なドメインシェーダ８１７は、テセレーション出力のバックエンド評価を提供する。テセレータ８１３は、ハルシェーダ８１１の指示で動作し、入力としてグラフィックスパイプライン８２０に提供される粗幾何学モデルに基づいて、詳細な複数の幾何学的オブジェクトのセットを生成する専用ロジックを含む。テセレーションが用いられない場合、テセレーションコンポーネント８１１、８１３、８１７は、バイパスされ得る。
【００７０】
完全な複数の幾何学的オブジェクトは、実行ユニット８５２Ａ、８５２Ｂにディスパッチされる１または複数のスレッドを通じてジオメトリシェーダ８１９により処理され得、またはクリッパ８２９に直接に進み得る。ジオメトリシェーダは、グラフィックスパイプラインの先行する複数の段階におけるような頂点または頂点のパッチよりはむしろ、複数の幾何学的オブジェクト全体で動作する。テセレーションが無効にされると、ジオメトリシェーダ８１９は、入力を頂点シェーダ８０７から受信する。ジオメトリシェーダ８１９は、テセレーションユニットが無効にされる場合、ジオメトリテセレーションを実行するように、ジオメトリシェーダプログラムによりプログラミング可能である。
【００７１】
ラスタライズする前に、頂点データは、クリッパ８２９により処理される。クリッパ８２９は、固定関数クリッパ、またはクリッピングおよびジオメトリシェーダ関数を有するプログラミング可能なクリッパのいずれかである。一実施形態において、レンダリング出力パイプライン８７０におけるラスタライザ８７３は、複数のピクセルシェーダをディスパッチして、複数の幾何学的オブジェクトをそれらのピクセル毎の表現に変換する。一実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック８５０に含まれる。
【００７２】
グラフィックスエンジンは、データおよびメッセージがグラフィックスエンジンの複数の主要コンポーネント間を通ることを可能にする相互接続バス、相互接続ファブリック、またはいくつかの他の相互接続メカニズムを有する。一実施形態において、実行ユニット８５２Ａ、８５２Ｂおよび関連付けられるキャッシュ８５１、テクスチャおよびメディアサンプラ８５４、ならびにテクスチャ／サンプラキャッシュ８５８は、メモリアクセスを実行するべくデータポート８５６を介して相互接続し、グラフィックスエンジンの複数のレンダリング出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ８５４、キャッシュ８５１、８５８、および実行ユニット８５２Ａ、８５２Ｂは各々、別個のメモリアクセスパスを有する。
【００７３】
一実施形態において、レンダリング出力パイプライン８７０は、頂点ベースの複数のオブジェクトをそれらの関連付けられるピクセルベースの表現に変換する、ラスタライザおよびデプステストコンポーネント８７３を含む。一実施形態において、ラスタライザロジックは、固定関数トライアングルおよびラインラスタライズを実行するウィンドウア（ｗｉｎｄｏｗｅｒ）／マスカ（ｍａｓｋｅｒ）ユニットを含む。一実施形態において、関連付けられたレンダリングバッファキャッシュ８７８およびデプスバッファキャッシュ８７９も利用可能である。ピクセルオペレーションコンポーネント８７７は、ピクセルベースの複数のオペレーションをデータ上で実行するが、いくつかの例において、２Ｄオペレーション（例えば、ブレンドを用いるビットブロック画像転送）に関連付けられるピクセルオペレーションは、２Ｄエンジン８４１により実行され、またはオーバーレイディスプレイ平面を用いるディスプレイコントローラ８４３により表示時間に代用される。一実施形態において、共有Ｌ３キャッシュ８７５は、全てのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを用いることなくデータの共有を可能にする。
【００７４】
グラフィックスプロセッサのメディアパイプライン８３０は、メディアエンジン３３７およびビデオフロントエンド８３４を含む。一実施形態において、ビデオフロントエンド８３４は、複数のパイプラインコマンドをコマンドストリーマ８０３から受信する。しかし、一実施形態において、メディアパイプライン８３０は、別個のコマンドストリーマを含む。動画フロントエンド８３４は、コマンドをメディアエンジン８３７に送信する前に、複数のメディアコマンドを処理する。一実施形態において、メディアエンジンは、スレッドディスパッチャ８３１を通じてスレッド実行ロジック８５０にディスパッチするための複数のスレッドをスポーンする、スレッドスポーン機能を含む。
【００７５】
一実施形態において、グラフィックスエンジンは、ディスプレイエンジン８４０を含む。一実施形態において、ディスプレイエンジン８４０は、グラフィックスプロセッサの外部にあり、リング相互接続８０２またはいくつかの他の相互接続バスもしくはファブリックを介してグラフィックスプロセッサと結合する。ディスプレイエンジン８４０は、２Ｄエンジン８４１およびディスプレイコントローラ８４３を含む。ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することができる専用ロジックを含む。ディスプレイコントローラ８４３は、ディスプレイデバイス（図示せず）と結合する。ディスプレイデバイスは、ラップトップコンピュータにおけるようなシステム統合ディスプレイデバイスまたはディスプレイデバイスコネクタにより取り付けられる外部ディスプレイデバイスであってもよい。
【００７６】
グラフィックスパイプライン８２０およびメディアパイプライン８３０は、複数のグラフィックスおよびメディアプログラミングインターフェースに基づいて複数のオペレーションを実行するように構成可能であり、いずれか１つのアプリケーションプログラミングインターフェース（ＡＰＩ）に固有のものではない。一実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに固有のＡＰＩ呼び出しを、グラフィックスプロセッサにより処理され得る複数のコマンドに変換する。様々な実施形態において、サポートは、クロノスグループによりサポートされるオープングラフィックスライブラリ（ＯｐｅｎＧＬ）およびオープンコンピューティング言語（ＯｐｅｎＣＬ）、マイクロソフトコーポレーションのＤｉｒｅｃｔ３Ｄライブラリ、または一実施形態においてはＯｐｅｎＧＬおよびＤｉｒｅｃｔ３Ｄの両方に提供される。サポートは、オープンソースコンピュータビジョンライブラリ（ＯｐｅｎＣＶ）にも提供され得る。将来のＡＰＩのパイプラインからグラフィックスプロセッサのパイプラインにマッピングが行われ得る場合には、互換性のある３Ｄパイプラインを用いる将来のＡＰＩも、サポートされるであろう。
【００７７】
［グラフィックスパイプラインのプログラミング−図９Ａ〜図９Ｂ］
図９Ａは、一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図であり、図９Ｂは、一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。図９Ａにおける実線で囲まれた複数のボックスは、グラフィックスコマンドに一般に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数のグラフィックスコマンドのサブセットのみに含まれる複数のコンポーネントを含む。図９Ａの例示的なグラフィックスプロセッサコマンドフォーマット９００は、コマンドのターゲットクライアント９０２、コマンドオペレーションコード（オペコード）９０４、およびコマンドのための関連するデータ９０６を識別する複数のデータフィールドを含む。サブオペコード９０５およびコマンドサイズ９０８もいくつかのコマンドに含まれる。
【００７８】
クライアント９０２は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けて、コマンドデータを適切なクライアントユニットにルーティングするべく、各コマンドのクライアントフィールドを検査する。一実施形態において、グラフィックスプロセッサのクライアントユニットは、メモリインターフェースユニット、レンダリングユニット、２Ｄユニット、３Ｄユニット、およびメディアユニットを含む。各クライアントユニットは、複数のコマンドを処理する、対応する処理パイプラインを有する。クライアントユニットによりコマンドが受信されると、クライアントユニットは、オペコード９０４を読み取り、存在する場合には、サブオペコード９０５は、実行するオペレーションを決定する。クライアントユニットは、コマンドのデータ９０６のフィールドにおける情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ９０８は、コマンドのサイズを指定することが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて複数のコマンドの少なくともいくつかのサイズを自動的に決定する。一実施形態において、複数のコマンドは、ダブルワードの倍数によりアラインされる。
【００７９】
図９Ｂのフロー図は、例示のコマンドシーケンス９１０を示す。一実施形態において、グラフィックスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、複数のグラフィックスオペレーションのセットを設定、実行、および終了するように示されたコマンドシーケンスのバージョンを用いる。例示的目的で例示のコマンドシーケンスが示され、説明されている。しかし、複数の実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。更に、これらのコマンドは、コマンドシーケンスにおける複数のコマンドのバッチとして発行されてもよく、従ってグラフィックスプロセッサは、少なくとも部分的に同時に複数のコマンドのシーケンスを処理する。
【００８０】
例示のコマンドシーケンス９１０は、パイプラインフラッシュコマンド９１２で開始し、任意のアクティブなグラフィックスパイプラインにパイプライン用の現在保留中の複数のコマンドを完了させ得る。一実施形態において、３Ｄパイプライン９２２およびメディアパイプライン９２４は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるべく実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな複数の描画エンジンが保留中の複数のオペレーションを完了し、関連する複数の読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択で、「ダーティ」とマークを付けられたレンダリングキャッシュ内の任意のデータは、メモリにフラッシュされ得る。パイプラインフラッシュコマンド９１２は、パイプライン同期のために、つまりグラフィックスプロセッサを低電力状態にする前に用いられ得る。
【００８１】
パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックスプロセッサに複数のパイプライン間で明確に切り替えるように要求するときに用いられる。パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインのためのコマンドを発行しない限り、パイプラインコマンドを発行する前に実行コンテキスト内で１度だけ必要とされる。一実施形態において、パイプラインフラッシュコマンド９１２は、パイプラインがパイプライン選択コマンド９１３により切り替えられる直前に必要とされる。
【００８２】
パイプライン制御コマンド９１４は、オペレーションのためのグラフィックスパイプラインを構成し、３Ｄパイプライン９２２およびメディアパイプライン９２４をプログラミングするべく用いられる。パイプライン制御コマンド９１４は、アクティブなパイプラインのためのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド９１４は、複数のコマンドのバッチを処理する前に、アクティブなパイプライン内の１または複数のキャッシュメモリからのデータをクリアするべく、パイプライン同期に用いられる。
【００８３】
複数のリターンバッファ状態コマンド９１６は、データを書き込む各パイプライン用の複数のリターンバッファのセットを構成するべく用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む、１または複数のリターンバッファの割り当て、選択、または構成を必要とする。また、グラフィックスプロセッサは、出力データを格納して相互のスレッド通信を実行するべく、１または複数のリターンバッファも用いる。リターンバッファ状態９１６は、複数のパイプラインオペレーションのセットに用いる複数のリターンバッファのサイズおよび数の選択を含む。
【００８４】
コマンドシーケンスにおける残りの複数のコマンドは、複数のオペレーション用のアクティブなパイプラインに基づいて異なる。パイプラインの決定９２０に基づいて、コマンドシーケンスは、３Ｄパイプライン状態９３０で開始する３Ｄパイプライン９２２、またはメディアパイプライン状態９４０で開始するメディアパイプライン９２４に対して調整される。
【００８５】
３Ｄパイプライン状態９３０のための複数のコマンドは、３Ｄプリミティブコマンドが処理される前に構成される頂点バッファ状態、頂点要素状態、一定な色状態、デプスバッファ状態、および他の状態変数に対する複数の３Ｄ状態設定コマンドを含む。これらのコマンドの値は、用いられる特定の３Ｄ  ＡＰＩに少なくとも部分的に基づいて決定される。それらの要素が用いられない場合、複数の３Ｄパイプライン状態９３０コマンドは、特定のパイプライン要素を選択的に無効またはバイパスすることもできる。
【００８６】
３Ｄプリミティブ９３２のコマンドは、３Ｄパイプラインにより処理される複数の３Ｄプリミティブを送るべく用いられる。３Ｄプリミティブ９３２のコマンドによりグラフィックスプロセッサに渡される複数のコマンドおよび関連付けられるパラメータは、グラフィックスパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、複数の頂点データ構造体を生成するべく３Ｄプリミティブ９３２のコマンドデータを用いる。複数の頂点データ構造体は、１または複数のリターンバッファに格納される。３Ｄプリミティブ９３２のコマンドは、複数の頂点シェーダにより複数の３Ｄプリミティブに頂点オペレーションを実行するべく用いられる。複数の頂点シェーダを処理するべく、３Ｄパイプライン９２２は、複数のシェーダ実行スレッドを複数のグラフィックスプロセッサ実行ユニットにディスパッチする。
【００８７】
３Ｄパイプライン９２２は、実行９３４のコマンドまたはイベントによりトリガされる。一実施形態において、レジスタ書き込みは、コマンド実行をトリガする。一実施形態において、実行は、コマンドシーケンスにおける「ｇｏ」または「ｋｉｃｋ」コマンドによりトリガされる。一実施形態において、パイプライン同期コマンドを用いて、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュするコマンド実行がトリガされる。３Ｄパイプラインは、複数の３Ｄプリミティブのためのジオメトリ処理を実行する。複数のオペレーションが完了すると、もたらされる複数の幾何学的オブジェクトがラスタライズされ、ピクセルエンジンは、もたらされるピクセルをカラーリングする。ピクセルシェーディングおよびピクセルバックエンドオペレーションを制御する追加の複数のコマンドもそれらのオペレーションのために含まれ得る。
【００８８】
例示のコマンドシーケンス９１０は、複数のメディアオペレーションを実行する場合、メディアパイプライン９２４のパスをたどる。一般に、メディアパイプライン９２４のためのプログラミングの特定の使用および態様は、メディアまたは実行される演算動作に依存する。特定のメディアデコードオペレーションは、メディアデコード中にメディアパイプラインにオフロードされ得る。メディアパイプラインもバイパスされ得、メディアデコードは、１または複数の汎用プロセッシングコアにより提供される複数のリソースを全体的または部分的に用いて実行され得る。一実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット（ＧＰＧＰＵ）の動作のための複数の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明らかに関係しない演算シェーダプログラムを用いてＳＩＭＤベクトルオペレーションを実行するべく用いられる。
【００８９】
メディアパイプライン９２４は、３Ｄパイプライン９２２と同様に構成される。複数のメディアパイプライン状態コマンド９４０のセットは、メディアオブジェクトコマンド９４２の前のコマンド行列にディスパッチされ、または配置される。複数のメディアパイプライン状態コマンド９４０は、複数のメディアオブジェクトを処理するべく用いられる、複数のメディアパイプライン要素を構成するデータを含む。これは、エンコードまたはデコードフォーマットのようなメディアパイプライン内の動画デコードおよび動画エンコードロジックを構成するデータを含む。複数のメディアパイプライン状態コマンド９４０は、複数の状態設定のバッチを含む「間接的」状態要素に対する１または複数のポインタの使用もサポートする。
【００９０】
複数のメディアオブジェクトコマンド９４２は、メディアパイプラインにより処理するための複数のメディアオブジェクトに複数のポインタを提供する。複数のメディアオブジェクトは、処理されるべき動画データを含む複数のメモリバッファを含む。一実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド９４２を発行する前に有効でなければならない。パイプライン状態が構成され、複数のメディアオブジェクトコマンド９４２が待ち行列に入れられると、メディアパイプライン９２４は、実行９３４のコマンドまたは同等の実行イベント（例えばレジスタ書き込み）によりトリガされる。次に、メディアパイプライン９２４からの出力は、３Ｄパイプライン９２２またはメディアパイプライン９２４により提供される複数のオペレーションにより後処理され得る。一実施形態において、複数のＧＰＧＰＵオペレーションは、メディアオペレーションと同様に構成され、実行される。
【００９１】
［グラフィックスソフトウェアアーキテクチャ−図１０］
図１０は、一実施形態のよるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。ソフトウェアアーキテクチャは、３Ｄグラフィックスアプリケーション１０１０、オペレーティングシステム１０２０、および少なくとも１つのプロセッサ１０３０を含む。プロセッサ１０３０は、グラフィックスプロセッサ１０３２、および１または複数の汎用プロセッサコア１０３４を含む。グラフィックスアプリケーション１０１０およびオペレーティングシステム１０２０は各々、データ処理システムのシステムメモリ１０５０において実行される。
【００９２】
一実施形態において、３Ｄグラフィックスアプリケーション１０１０は、複数のシェーダ命令１０１２を含む、１または複数のシェーダプログラムを含む。複数のシェーダ言語命令は、高水準シェーダ言語（ＨＬＳＬ）またはＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）のような高水準シェーダ言語によるものであってもよい。アプリケーションは、汎用プロセッサコア１０３４により実行するのに好適な機械言語による複数の実行可能命令１０１４も含む。アプリケーションは、頂点データにより定義される複数のグラフィックスオブジェクト１０１６も含む。
【００９３】
オペレーティングシステム１０２０は、マイクロソフトコーポレーションのマイクロソフト（登録商標）ウィンドウズ（登録商標）オペレーティングシステム、プロプライエタリＵＮＩＸ（登録商標）様式のオペレーティングシステム、またはＬｉｎｕｘ（登録商標）カーネルの変形を用いるオープンソースＵＮＩＸ（登録商標）様式のオペレーティングシステムであり得る。Ｄｉｒｅｃｔ３Ｄ  ＡＰＩが用いられる場合、オペレーティングシステム１０２０は、フロントエンドのシェーダコンパイラ１０２４を用いて、ＨＬＳＬの任意のシェーダ命令１０１２をより低水準のシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルであってもよく、またはアプリケーションは、共有プリコンパイルを実行し得る。一実施形態において、複数の高水準シェーダは、３Ｄグラフィックスアプリケーション１０１０のコンパイル中により低水準のシェーダへとコンパイルされる。
【００９４】
ユーザモードグラフィックスドライバ１０２６は、複数のシェーダ命令１０１２をハードウェア固有の表現に変換する、バックエンドのシェーダコンパイラ１０２７を含んでもよい。ＯｐｅｎＧＬ  ＡＰＩが用いられる場合、ＧＬＳＬ高水準言語のシェーダ命令１０１２は、コンパイルのためにユーザモードグラフィックスドライバ１０２６に渡される。ユーザモードグラフィックスドライバは、カーネルモードグラフィックスドライバ１０２９と通信するべく、オペレーティングシステムカーネルモード機能１０２８を用いる。カーネルモードグラフィックスドライバ１０２９は、複数のコマンドおよび命令をディスパッチするべく、グラフィックスプロセッサ１０３２と通信する。
【００９５】
様々なオペレーションまたは機能が本明細書において説明される限度において、それらはハードウェア回路、ソフトウェアコード、命令、構成、および／またはデータとして説明または定義され得る。コンテンツは、ハードウェアロジックで、または直接に実行可能なソフトウェア（「オブジェクト、または「実行可能な」形式）、ソースコード、グラフィックスエンジン上での実行のために設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックスコア用の命令セットによる低水準アセンブリ言語コードとして実施され得る。本明細書に説明される複数の実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品、または通信インターフェースを介してデータを送信するように通信インターフェースを動作させる方法により提供され得る。
【００９６】
非一時的機械可読ストレージ媒体は、機械に、説明される複数の機能またはオペレーションを実行させ得、記録可能／非記録可能媒体（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等）のような機械（例えば、コンピューティングデバイス、電子システム等）によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インターフェースは、メモリバスインターフェース、プロセッサバスインターフェース、インターネット接続、ディスクコントローラ等のような別のデバイスに通信するハードワイヤード、無線、光等の媒体のいずれかにインターフェース接続する任意のメカニズムを含む。通信インターフェースは、複数の構成パラメータを提供し、または通信インターフェースを準備して、ソフトウェアコンテンツを記載するデータ信号を提供するべく複数の信号を送信することにより構成される。通信インターフェースは、通信インターフェースに送信される１または複数のコマンドまたは信号によりアクセスされ得る。
【００９７】
説明される様々なコンポーネントは、説明される動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。複数のコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）等）、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。本明細書において説明されるもの以外にも、本発明の開示される複数の実施形態および実装に対して、その範囲を逸脱することなく、様々な修正がなされ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲および趣旨は、以下の特許請求の範囲を参照することのみにより判断されるべきである。
【００９８】
現在の状態に基づいてシェーダプログラムをアップデートするための装置および方法
コンパイル処理は複雑であり、コンパイルの異なる複数の段階においてシェーダプログラムコードを記述するべくいくつかの中間言語表現を必要とする。最終的なシェーダプログラムカーネルを生成する前に、最も時間がかかる複数の動作が、低水準中間言語表現（ＬＬＩＲ）と呼ばれる複数のプログラム命令の抽象的表現に実行される。
【００９９】
ランタイム中の時間がかかるこれらの再コンパイル動作のマイナスの影響を低減するべく、本発明の一実施形態は、シェーダプログラムを終了段階までコンパイルするが、任意の非直交状態（ＮＯＳ）とインタラクトする場合に複数の最終命令をマークする。次に、コンパイルされたシェーダプログラムは、パッチ可能シェーダーカーネルとして保存される。実行中に、複数のマークされた命令は次に、ＧＰＵハードウェア上で実行されるパッチ済みシェーダカーネルを生成するべく、現在のＮＯＳについて動的にパッチされ得る。
【０１００】
図１１に概して図示されるように、本発明の一実施形態において、シェーダソースコード１１２４は、異なる複数のＮＯＳに依存する複数の命令に対してマーク済みシェーダ命令１１０４を生成し、複数のＮＯＳに依存しない複数の命令に対してマークされないシェーダ命令１１２５を生成するべく、命令マーキングロジック１１２３を用いるコンパイラによりコンパイルされる。一実施形態において、これらの命令は、所与の命令セットアーキテクチャに別の場合には用いられない複数のビットのシーケンスを用いてマークされる。シーケンス内の各ビットは、命令が特定のＮＯＳに依存するか否かを示し得る。例えば、ビット０は、命令がＮＯＳ＃０に依存するか否かを示し得（例えば、１＝ＮＯＳに依存する、０＝ＮＯＳに依存しない）、ビット１は、命令がＮＯＳ＃１に依存するか否かを示し得、ビット２は、命令がＮＯＳ＃２に依存するか否かを示し得る、等である。しかし、本発明の基礎となる原理は、ＮＯＳへの依存を識別するためのいずれの特定のエンコードにも限定されないことに留意されたい。
【０１０１】
実行時間に、マーク済みシェーダ命令１１０４は、現在のＮＯＳに従ってパッチされる。例えば、図１１において、命令パッチロジック１１０３は、複数のパッチ済みシェーダ命令１１０５を生成するべく、現在のＮＯＳ１１０１に従って複数のマーク済みシェーダ命令１１０４を動的にパッチする。複数のパッチ済みシェーダ命令１１０５およびマークされない複数のシェーダ命令１１２５は、（複数のシェーダ命令がパッチされたので、現在のＮＯＳに対して特に適合された）パッチ済みシェーダカーネル内に共に保存され得る。
【０１０２】
図１１に図示されるように、スケジューラ／ディスパッチユニット１１１０は次に、シェーダを実装するべく、１または複数の実行ユニット１１１１〜１１１８において実行するための複数のパッチ済みシェーダ命令１１０５およびマークされない複数のシェーダ命令１１２５をディスパッチし得る。本発明の基礎となる原理は、上述のものを含む任意のタイプのシェーダに対して実装され得る。これは、例えば、（単にいくつかを挙げれば）図６に示されるピクセルシェーダ６０２、ならびに図８に示される頂点シェーダ８０７、ジオメトリシェーダ８１９、ハルシェーダ８１１、およびドメインシェーダ８１７を含み得る。更に、一実施形態において、図１０に示されるバックエンドのシェーダコンパイラ１０２７（ユーザモードグラフィックスドライバ１０２６内に実装されている）は、本明細書に説明される複数のマーク済みシェーダ命令およびパッチ済みシェーダ命令を生成するべく用いられ得る。
【０１０３】
本発明の一実施形態の更なる詳細は、グラフィックスＡＰＩ（例えば、Ｄｉｒｅｃｔ３Ｄ、ＯｐｅｎＧＬ等）を用いるアプリケーションコンポーネント１１２０と、本明細書に説明される複数のＮＯＳに従って複数の命令をマークし、複数の命令をパッチするためのドライバコンポーネント１１３０と、複数のパッチ済み命令を実行するためのハードウェアコンポーネント１１４０とを含む図１２に図示される。アプリケーション１２２０により呼び出されるＡＰＩコンパイル機能１２０１は、高水準シェーダ言語（ＨＬＳＬ）コードまたはＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）コードのようなシェーディング言語コードを、より低水準のシェーダ言語にコンパイルする。具体的には、コンパイル機能１２０１に応答して、ＨＬＳＬまたはＧＬＳＬコードは、コードを低水準中間言語表現（ＬＬＩＲ）に変換することと、ＬＬＩＲ最適化を実行することと、レジスタ割り当て情報を生成することとを含む、様々なコンパイル動作を実行するドライバコンポーネント１２３０内のコンパイラブロック１２０３に入力される。更に、コンパイラブロック１２０３は、複数の命令を評価して複数のＮＯＳ依存命令を識別し、次に、複数のＮＯＳ依存命令（図１２において「Ｘ＿ＮＯＳ」命令と識別される）をマークする。次に、複数のマークされた命令およびマークされない命令は、実行時間において用いられるべきパッチ可能シェーダーカーネル１２０４へと組み合わされる。
【０１０４】
実行時間において、アプリケーション１２２０により呼び出された設定状態機能１２０５および設定シェーダ機能１２０９に応答して、ドライバ１１３０の処理状態モジュール１２０６は、シェーダ１２０４を実装するパッチ可能カーネルが実行される現在のＮＯＳ１２０７を決定する。具体的には、シェーダ機能１２０９は、用いられるパッチ可能シェーダーカーネル１２０４をポイントし、図１２における点線の矢印により示されるように、処理状態１２０６は、シェーダカーネル１２０４に依存し得る。
【０１０５】
ドライバの命令パッチモジュール１２０８は、現在のＮＯＳ１２０７に依存するパッチ可能シェーダーカーネル１２０４内の複数のマーク済み命令を識別する。次に、命令パッチモジュール１２０８は、現在のＮＯＳ１２０７に従って（例えば、カーネルが実行されることを示す実行機能１２１１に応答して）複数の実行命令をパッチする。複数のパッチ済み命令は、（例えば、上記のような複数の実行ユニットとして実装され得る）ハードウェアコンポーネント１２４０の複数の実行リソース１２１４上で実行されるパッチ済みシェーダカーネル１２１３を生成するべく、（複数のパッチされない命令と共に）用いられる。また、ハードウェアユニット状態１２１２は、現在の処理状態１２０６（例えば、パッチ済みカーネル１２１３の複数の命令がパッチされている現在のＮＯＳ）を反映するべくアップデートされる。
【０１０６】
本発明の一実施形態による方法は、図１３に図示される。本方法は、上記の複数のシステムアーキテクチャ（例えば、図１１〜図１２に示される）の文脈において実装され得るが、いずれの特定のシステムアーキテクチャにも限定されない。
【０１０７】
１３０１において、ＮＯＳに依存する複数の命令が識別され、１３０２において、新たなシェーダがパッチ可能なバイナリカーネルにコンパイルされる。パッチ可能なバイナリカーネルにおいて、複数のＮＯＳ依存命令は、異なる複数のＮＯＳとの依存を示すようにマークされる。例えば、上述のように、各命令のビットフィールドは、命令が依存する（例えば、ビットフィールドの各ビット位置が異なるＮＯＳを示す）複数のＮＯＳを示すべく用いられ得る。１３０３において、複数のＮＯＳ依存命令を含む最適化済みパッチ可能カーネルが保存される。
【０１０８】
１３０４において、現在のＮＯＳは、シェーダ実行中に（例えば、シェーダの実行に応答して）決定される。１３０５において、各々の特別にマークされた命令（動作１３０２においてマークされる）は、現在のＮＯＳ仕様を実装するように（つまり、検出された現在のＮＯＳに基づいて）修正される。もたらされる複数のマーク済み命令は、パッチ済みシェーダカーネル内に含まれる。１３０６において、パッチ済みシェーダカーネルは、現在のＮＯＳに従って実行される。
【０１０９】
一実施形態において、上記の複数の技術は、部分的にのみ用いられ得る。例えば、一実施形態において、ほとんどの場合に同一の態様で構成される複数のＮＯＳは、（本明細書に説明される複数のパッチ技術を用いるのではなく）直接にコンパイルされ得る。
【０１１０】
本明細書に説明される複数の技術を用いることにより、複数のカーネルが動的にパッチされ得るので、複数のインスタンスの命令（各ＮＯＳに１つ）を用いる複数のシェーダカーネルをキャッシュする必要性をなくす。そのようなアプローチは、コンパイルの時間、実行、および電力使用量を低減し、従ってエンドユーザエクスペリアンスを改善する。
【０１１１】
本発明の複数の実施形態は、上記された様々な段階を含み得る。複数の段階は、汎用または専用プロセッサに複数の段階を実行させるべく用いられ得る複数の機械実行可能命令で実施され得る。あるいは、これらの段階は、複数の段階を実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
【０１１２】
本明細書において説明されるように、複数の命令は、特定の複数のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体に実施されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路（ＡＳＩＣ）等のハードウェアの特定の構成を指し得る。従って、図面に示される複数の技術は、１または複数の電子デバイス（例えば、終端局およびネットワーク要素等）上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読ストレージ媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ）および一時的コンピュータ機械可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号等の電気、光、音響、又は他の形態の伝搬信号）等、コンピュータ機械可読媒体を用いてコードおよびデータを（内部で、および／またはネットワークを介して他の電子デバイスを用いて）格納および通信する。更に、そのような電子デバイスは通常、１もしくは複数のストレージデバイス（非一時的機械可読ストレージ媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン、および／またはディスプレイ）、ならびにネットワーク接続等、１もしくは複数の他のコンポーネントに結合された１もしくは複数のプロセッサのセットを含む。複数のプロセッサのセットおよび他の複数のコンポーネントの結合は通常、１または複数のバスおよびブリッジ（バスコントローラとも呼ばれる）を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、各々、１または複数の機械可読ストレージ媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの１または複数のプロセッサのセット上で実行するためのコードおよび／またはデータを格納する。勿論、本発明の実施形態の１または複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には本発明がこれら具体的な詳細のいくつかがなくても実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。
【図１】
0006470766.tif 000002
【図２】
0006470766.tif 000003
【図３】
0006470766.tif 000004
【図４】
0006470766.tif 000005
【図５】
0006470766.tif 000006
【図６】
0006470766.tif 000007
【図７】
0006470766.tif 000008
【図８】
0006470766.tif 000009
【図９Ａ】
0006470766.tif 000010
【図９Ｂ】
0006470766.tif 000011
【図１０】
0006470766.tif 000012
【図１１】
0006470766.tif 000013
【図１２】
0006470766.tif 000014
【図１３】
0006470766.tif 000015