(57)【要約】改良したグラフィックス処理パイプラインが開示される。より具体的には、頂点変換を実行する頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージと、が複合される。テッセレーションが無効であり、ジオメトリシェーディングが有効である場合、グラフィックス処理パイプラインは、頂点シェーダステージとグラフィックスシェーダステージとの複合を含む。テッセレーションが有効である場合、グラフィックス処理パイプラインは、頂点シェーダステージとハルシェーダステージとの複合を含む。テッセレーション及びジオメトリシェーディングの両方が無効である場合、グラフィックス処理パイプラインは、複合シェーダステージを使用しない。複合シェーダステージは、シェーダプログラムの実行インスタンス及び予約された関連リソースの数を減らすことによって、効率を改善する。【選択図】図５Ｂ
2019535071.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行する方法であって、
前記複合シェーダステージの複合シェーダプログラムを取り出すことと、
前記複合シェーダプログラムを実行するために、複数のウェーブフロントに関するリソースを予約することと、
前記複合シェーダプログラムを実行するために、前記複数のウェーブフロントを生成することと、を含み、
前記複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む、
方法。
【請求項２】
前記複合シェーダステージは、テッセレーションが無効であるグラフィックス処理パイプラインの一部であり、
前記複合シェーダステージは、前記頂点シェーダステージとジオメトリシェーダステージとの複合を含む、
請求項１の方法。
【請求項３】
前記複合シェーダステージは、テッセレーションが有効であるグラフィックス処理パイプラインの一部であり、
前記複合シェーダステージは、前記頂点シェーダステージとハルシェーダステージとの複合を含む、
請求項１の方法。
【請求項４】
前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、の両方からの命令を含む単一のシェーダプログラムを含む、
請求項１の方法。
【請求項５】
前記頂点シェーダプログラムは、前記グラフィックス処理パイプラインの後続のステージに転送するために、頂点シェーダの出力値のグラフィックス処理ハードウェア位置を示す頂点シェーダ出力を指定し、
前記複合シェーダプログラムは、前記頂点シェーダ出力を含まない、
請求項４の方法。
【請求項６】
前記リソースを予約することは、
前記頂点シェーダプログラムを実行するための第１の数のレジスタと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第２の数のレジスタと、のうち大きい数のレジスタを選択することと、
前記大きい数のレジスタを予約することと、を含む、
請求項４の方法。
【請求項７】
前記複合シェーダステージの頂点シェーダ部によって処理される頂点の数と、前記ハルシェーダステージによって処理されるパッチの数又は前記ジオメトリシェーダステージによって処理されるプリミティブの数の何れかと、の指示を受信することと、
前記複合シェーダステージの前記頂点シェーダ部によって前記数の頂点を処理するためにウェーブフロントの数を決定することと、を含み、
前記複合シェーダプログラムを実行するために、前記複数のウェーブフロントを生成することは、前記複合シェーダプログラムを実行するために、決定された数のウェーブフロントを生成することを含む、
請求項４の方法。
【請求項８】
前記頂点シェーダプログラムを実行するための第１の数のワークアイテムと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第２の数のワークアイテムとの比に基づいて、１つ以上の前記ウェーブフロントを無効にすることを含み、
前記無効にすることは、１つ以上の前記ウェーブフロントをスリープさせること又は終了させることのうち１つを含む、
請求項７の方法。
【請求項９】
前記複合シェーダプログラムは、頂点シェーダ部と、ハルシェーダ部又はジオメトリシェーダ部と、の間にバリア命令を含み、
前記バリア命令は、前記ハルシェーダ部又は前記ジオメトリシェーダ部の処理が完了するまで、前記頂点シェーダ部の処理が開始するのを待機させる、
請求項１の方法。
【請求項１０】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するアクセラレーテッド処理デバイス（ＡＰＤ）であって、
レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、
スケジューラと、を備え、
前記スケジューラは、
前記複合シェーダステージの複合シェーダプログラムを取り出し、
前記複数のシェーダエンジンにおいて前記複合シェーダプログラムを実行するために、複数のウェーブフロントに関するリソースを予約し、
前記複数のシェーダエンジンにおいて前記複合シェーダプログラムを実行するために、前記複数のウェーブフロントを生成する、
ように構成されており、
前記複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む、
ＡＰＤ。
【請求項１１】
前記複合シェーダステージは、テッセレーションが無効であるグラフィックス処理パイプラインの一部であり、
前記複合シェーダステージは、前記頂点シェーダステージとジオメトリシェーダステージとの複合を含む、
請求項１０のＡＰＤ。
【請求項１２】
前記複合シェーダステージは、テッセレーションが有効であるグラフィックス処理パイプラインの一部であり、
前記複合シェーダステージは、前記頂点シェーダステージとハルシェーダステージとの複合を含む、
請求項１０のＡＰＤ。
【請求項１３】
前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、の両方からの命令を含む単一のシェーダプログラムを含む、
請求項１０のＡＰＤ。
【請求項１４】
前記頂点シェーダプログラムは、前記グラフィックス処理パイプラインの後続のステージに転送するために、頂点シェーダの出力値のグラフィックス処理ハードウェア位置を示す頂点シェーダ出力を指定し、
前記複合シェーダプログラムは、前記頂点シェーダ出力を含まない、
請求項１３のＡＰＤ。
【請求項１５】
前記スケジューラは、
前記頂点シェーダプログラムを実行するための第１の数のレジスタと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第２の数のレジスタと、のうち大きい数のレジスタを選択することと、
前記大きい数のレジスタを予約することと、
によって、前記リソースを予約するように構成されている、
請求項１３のＡＰＤ。
【請求項１６】
前記スケジューラは、
前記複合シェーダステージの頂点シェーダ部によって処理される頂点の数と、前記ハルシェーダステージによって処理されるパッチの数又は前記ジオメトリシェーダステージによって処理されるプリミティブの数の何れかと、の指示を受信し、
前記複合シェーダステージの前記頂点シェーダ部によって前記数の頂点を処理するためにウェーブフロントの数を決定するように構成されており、
前記複合シェーダプログラムを実行するために、前記複数のウェーブフロントを生成することは、前記複合シェーダプログラムを実行するために、決定された数のウェーブフロントを生成することを含む、
請求項１３のＡＰＤ。
【請求項１７】
前記スケジューラは、
前記頂点シェーダプログラムを実行するための第１の数のワークアイテムと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第２の数のワークアイテムとの比に基づいて、１つ以上の前記ウェーブフロントを無効にするように構成されており、
前記無効にすることは、１つ以上の前記ウェーブフロントをスリープさせること又は終了させることのうち１つを含む、
請求項１６のＡＰＤ。
【請求項１８】
前記複合シェーダプログラムは、頂点シェーダ部と、ハルシェーダ部又はジオメトリシェーダ部と、の間にバリア命令を含み、
前記バリア命令は、前記ハルシェーダ部又は前記ジオメトリシェーダ部の処理が完了するまで、前記頂点シェーダ部の処理が開始するのを待機させる、
請求項１０のＡＰＤ。
【請求項１９】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するコンピュータシステムであって、
アクセラレーテッド処理デバイス（ＡＰＤ）を制御するためのデバイスドライバを実行するプロセッサと、
前記ＡＰＤと、を備え、
前記ＡＰＤは、
レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、
スケジューラと、を備え、
前記スケジューラは、
前記複合シェーダステージの複合シェーダプログラムを前記デバイスドライバから受信し、
前記複数のシェーダエンジンにおいて前記複合シェーダプログラムを実行するために、複数のウェーブフロントに関するリソースを予約し、
前記複数のシェーダエンジンにおいて前記複合シェーダプログラムを実行するために、前記複数のウェーブフロントを生成する、
ように構成されており、
前記複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む、
コンピュータシステム。
【請求項２０】
前記複合シェーダステージは、テッセレーションが無効であるグラフィックス処理パイプラインの一部であり、
前記複合シェーダステージは、前記頂点シェーダステージとジオメトリシェーダステージとの複合を含む、
請求項１９のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年９月２２日に出願された米国仮特許出願第６２／３９８，２１１号と、２０１６年１２月２３日に出願された米国特許出願第１５／３８９，４８１号と、２０１７年１月５日に出願された欧州特許出願第１７１５０４４１．８号の利益を主張し、これらの内容は、本明細書に十分に記載されているかのように、言及したことによって本明細書に組み込まれる。
【０００２】
開示された実施形態は、概して、グラフィックス処理パイプラインに関し、具体的には、複合ワールドスペースパイプライン（combined world-space pipeline）シェーダステージに関する。
【背景技術】
【０００３】
３次元グラフィックス処理パイプラインは、ホスト（コンピューティングシステムの中央処理装置等）からコマンドを受信し、当該コマンドを処理してディスプレイデバイスに表示するためのピクセルを生成する。グラフィックス処理パイプラインは、頂点位置及び属性の変換、ピクセルカラーの計算等の個々のタスクを実行するいくつかのステージを含む。グラフィックス処理パイプラインは、常に開発及び改良されている。
【０００４】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００５】
【図１】１つ以上の開示される実施形態を実装することができる例示的なデバイスのブロック図である。
【図２】さらなる詳細を示す図１のデバイスのブロック図である。
【図３】図２に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。
【図４Ａ】一例による、グラフィックス処理パイプラインの構成を示す図である。
【図４Ｂ】一例による、グラフィックス処理パイプラインの構成を示す図である。
【図５Ａ】一例による、図２に示すドライバ及びスケジューラを含む複合シェーダステージの態様を示す図である。
【図５Ｂ】一例による、図２に示すドライバ及びスケジューラを含む複合シェーダステージの態様を示す図である。
【図６】一例による、シェーダステージ間の境界におけるワークロードの変化に適応するために、頂点及びハルシェーダステージ又はジオメトリシェーダステージの複合に関するウェーブフロントを有効又は無効にするための動作を示す図である。
【図７】一例による、頂点及びハルシェーダステージ又はジオメトリシェーダステージの複合に関する頂点及びハルシェーダプログラム又はジオメトリシェーダプログラムの複合を実行する方法のフロー図である。
【発明を実施するための形態】
【０００６】
本開示は、グラフィックス処理パイプラインの改良に関する。より具体的には、頂点変換を実行する頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージと、が複合される。テッセレーションが無効であって、ジオメトリシェーディングが有効である場合、グラフィックス処理パイプラインは、頂点シェーダステージと、グラフィックスシェーダステージと、の複合を含む。テッセレーションが有効である場合、グラフィックス処理パイプラインは、頂点シェーダステージと、ハルシェーダステージと、の複合を含む。テッセレーション及びジオメトリシェーディングの両方が無効である場合、グラフィックス処理パイプラインは、複合シェーダステージを使用しない。複合シェーダステージは、シェーダプログラムの実行インスタンス及び予約された関連リソースの数を減らすことによって、効率を改善する。
【０００７】
図１は、本開示の１つ以上の態様が実装された例示的なデバイス１００のブロック図である。デバイス１００には、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等が含まれる。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージデバイス１０６と、１つ以上入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４をオプションとして含む。デバイス１００は、図１に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【０００８】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含む。
【０００９】
ストレージデバイス１０６は、固定又は取り外し可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１０】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤは、プロセッサ１０２から計算コマンド（compute commands）及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス１１８に提供するように構成されている。
【００１１】
ＡＰＤ１１６は、単一命令複数データ(ＳＩＭＤ)パラダイムに従って計算を実行するように構成された１つ以上の並行処理ユニットを含む。しかしながら、ＡＰＤ１１６によって実行されるものとして説明した機能は、ＳＩＭＤパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【００１２】
図２は、ＡＰＤ１１６でのタスク処理の実行に関連するさらなる詳細を示すデバイス１００のブロック図である。プロセッサ１０２は、プロセッサ１０２による実行のための１つ以上の制御論理モジュールをシステムメモリ１０４内に保持している。制御論理モジュールは、オペレーティングシステム１２０と、ドライバ１２２と、アプリケーション１２６と、を含み、図示されていない他のモジュールをオプションで含むことができる。制御論議モジュールは、プロセッサ１０２及びＡＰＤ１１６の様々な態様の動作を制御する。例えば、オペレーティングシステム１２０は、ハードウェアと直接通信し、プロセッサ１０２上で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするためにプロセッサ１０２上で実行中のソフトウェア（例えば、アプリケーション１２６）へのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供することによって、ＡＰＤ１１６の動作を制御する。また、ドライバ１２２は、ＡＰＤ１１６の処理コンポーネント（例えば、以下でさらに詳細に説明するＳＩＭＤユニット１３８等）による実行のために、シェーダコードをシェーダプログラムにコンパイルするジャストインタイムコンパイラを含む。
【００１３】
ＡＰＤ１１６は、例えばグラフィックス処理及び非グラフィックス処理等のように並行処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングするために使用することができる。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンドに基づいて、グラフィックス処理に直接関連しない計算処理動作（例えば、ビデオ、物理的シミュレーション、計算流体力学若しくは他のタスクに関連する動作等）、又は、グラフィックス処理パイプラインの「通常の」情報フローの一部ではない計算処理動作を実行する。
【００１４】
ＡＰＤ１１６は、ＳＩＭＤパラダイムに従って、プロセッサ１０２の要求に応じて並列に動作を実行するように構成された１つ以上のＳＩＭＤユニット１３８を有するシェーダエンジン１３２（本明細書ではまとめて「プログラマブル処理ユニット２０２」と呼ばれる）を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるというものである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含んでおり、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行するのに必要とされない場合、レーンを予測によってスイッチオフにすることができる。予測を利用して、分岐した制御フローによってプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
【００１５】
シェーダエンジン１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並行して実行されるシェーダプログラムの単一のインスタンシエイション（instantiation）を表している。ワークアイテムは、単一のＳＩＭＤユニット１３８における「ウェーブフロント（wavefront）」として同時に実行することができる。複数のウェーブフロントが１つの「ワークグループ」に含まれてもよく、このワークグループは、同じプログラムを実行するように指定されたワークアイテムの集合を含む。ワークグループを構成するウェーブフロントの各々を実行することによって、当該ワークグループを実行することができる。ウェーブフロントは、単一のＳＩＭＤユニット１３８において順次実行されてもよいし、異なるＳＩＭＤユニット１３８において部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、シェーダプログラムの並列実行のインスタンスとして考えることができ、各ウェーブフロントは、ＳＩＭＤパラダイムに従って、単一のＳＩＭＤユニット１３８で同時に実行する複数のワークアイテム（例えば、１つの命令制御ユニットが、複数のデータを用いて同じ命令ストリームを実行する）を含む。
【００１６】
ＳＩＭＤユニット１３８は、例えば、シェーダプログラムの命令が、ワークアイテム毎に同じオペランド値を使用する場合に、ワークデータを、ベクトルレジスタ２０６（ＳＩＭＤユニット１３８において同じ命令を実行する異なるワークアイテムに対して異なる値を記憶するように構成されている）又はスカラレジスタ２０８（使用するために単一の値を記憶するように構成されている）に記憶する。各シェーダエンジン１３２のローカルデータストアメモリ２１２は、シェーダプログラムによって使用される値を記憶する。ローカルデータストアメモリ２１２は、ベクトルレジスタ２０６又はスカラレジスタ２０８に適合できないがシェーダプログラムによって使用されるデータ用に使用することができる。ローカルデータストアメモリ２１２の物理的近接は、シェーダエンジン１３２に含まれないＡＰＤ１１６のメモリ２１０、又は、ＡＰＤ１１６に存在しないメモリ１０４等の他のメモリと比較して、改善されたレイテンシを提供する。
【００１７】
スケジューラ１３６は、異なるシェーダエンジン１３２及びＳＩＭＤユニット１３８で様々なウェーブフロントをスケジュールすることに関する動作を実行するように構成されている。スケジューラ１３６内のウェーブフロントブックキーピング２０４は、起動して実行中又は「スリープ」中（例えば、実行を待機しているか、他の何等かの理由で現在実行されていない）のウェーブフロントである保留ウェーブフロントに関するデータを記憶する。ウェーブフロントブックキーピング２０４は、保留ウェーブフロントを識別する識別子に加えて、各ウェーブフロントによって使用されるリソース（例えば、ベクトルレジスタ２０６及び／又はスカラレジスタ２０８等のレジスタ、ウェーブフロントに割り当てられたローカルデータストアメモリ２１２の一部、任意の特定のシェーダエンジン１３２に対してローカルでないメモリ２１０の一部、又は、ウェーブフロントに割り当てられた他のリソースを含む）の指標も記憶する。
【００１８】
シェーダエンジン１３２によって与えられる並列性は、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング動作及び他のグラフィックス動作等のグラフィックス関連動作に適している。グラフィックス処理コマンドをプロセッサ１０２から受信するグラフィックス処理パイプライン１３４は、並列に実行するように計算タスクをシェーダエンジン１３２に提供する。
【００１９】
また、シェーダエンジン１３２は、グラフィックスに関連しない計算タスク、又は、グラフィックス処理パイプライン１３４の「通常」の動作の一部として実行されない計算タスク（例えば、グラフィックス処理パイプライン１３４の動作に対して行われる処理を補うために実行されるカスタム動作）を実行するために使用される。プロセッサ１０２上で実行されているアプリケーション１２６又は他のソフトウェアは、このような計算タスクを定義するプログラム（多くの場合、ドライバ１２２によってコンパイルされ得る「計算シェーダプログラム」と呼ばれる）を、実行のためにＡＰＤ１１６に送信する。
【００２０】
図３は、図２に示すグラフィックス処理パイプライン１３４のさらなる詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、各々が特定の機能を実行するステージを含む。ステージは、グラフィックス処理パイプライン１３４の機能の一部を表している。各ステージは、プログラマブル処理ユニット２０２において実行中のシェーダプログラムとして部分的若しくは完全に実装され、又は、プログラマブル処理ユニット２０２の外部の固定機能の非プログラマブルハードウェアとして部分的若しくは完全に実装される。
【００２１】
入力アセンブラステージ３０２は、ユーザ充填バッファ（例えば、アプリケーション１２６等のようにプロセッサ１０２によって実行されたソフトウェアの要求で充填されたバッファ）からプリミティブデータを読み出し、このデータをパイプラインの残りの部分で使用するためにプリミティブにアセンブルする。入力アセンブラステージ３０２は、ユーザ充填バッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ３０２は、パイプラインの残りの部分によって使用されるように、アセンブルされたプリミティブをフォーマットする。
【００２２】
頂点シェーダステージ３０４は、入力アセンブラステージ３０２によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ３０４は、例えば、変換、スキニング、モーフィング及び頂点毎のライティング等のように、様々な頂点毎の処理を実行する。変換処理は、頂点の座標を変換するための様々な処理を含むことができる。このような処理には、モデリング変換、ビューイング変換、投影変換、透視除算（perspective division）及びビューポート変換等のうち１つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標又は「位置」を変更するものと想定される。座標以外の属性を変更する頂点シェーダステージ３０４の他の処理は、位置以外の属性を変更するものと想定される。
【００２３】
頂点シェーダステージ３０４は、１つ以上のシェーダエンジン１３２において実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、コンピュータプログラマによって事前に書き込まれたプログラムとして、プロセッサ１０２によって提供される。ドライバ１２２は、かかるコンピュータプログラムをコンパイルして、シェーダエンジン１３２での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【００２４】
ハルシェーダステージ３０６、テッセレータステージ３０８及びドメインシェーダステージ３１０は協働して、プリミティブを細分することによって単純なプリミティブをより複雑なプリミティブに変換するテッセレーションを実施する。ハルシェーダステージ３０６は、入力されたプリミティブに基づいて、テッセレーションに関するパッチを生成する。テッセレータステージ３０８は、パッチに関するサンプルのセット（重心座標で指定された頂点を含むことができる）を生成する。ドメインシェーダステージ３１０は、（例えば、重心座標をワールドスペース座標に変換することによって）パッチに関するサンプルに対応する頂点に関する頂点位置を計算する。ハルシェーダステージ３０６及びドメインシェーダステージ３１０は、プログラマブル処理ユニット２０２において実行されるシェーダプログラムとして実装することができる。
【００２５】
ジオメトリシェーダステージ３１２は、プリミティブ毎に頂点処理を実行する。ジオメトリシェーダプログラムは、通常、プリミティブ全体（例えば、頂点の集合）を入力として受信し、ジオメトリシェーダプログラムの命令によって指定されるように、これらのプリミティブ全体に対して動作を行う。様々な異なるタイプの処理（例えば、ポイントスプリント拡張、動的パーティクルシステム処理、ｆｕｒ−ｆｉｎの生成、シャドウボリュームの生成、単一パスでのキューブマップへのレンダリング、プリミティブ単位のマテリアルスワッピング、及び、プリミティブ単位のマテリアルセットアップが含まれる）をジオメトリシェーダステージ３１２によって実行することができる。ジオメトリシェーダステージ３１２に関する動作は、プログラマブル処理ユニット２０２において実行されるシェーダプログラムによって実行されてもよい。
【００２６】
ラスタライザステージ３１４は、上流で生成された単純なプリミティブを受信してラスタライズする。ラスタライズは、何れのスクリーンピクセル（又は、サブピクセルサンプル）が特定のプリミティブによってカバーされるかを決定することから構成されている。ラスタライズは、固定機能のハードウェアによって実行されてもよいし、プログラマブル処理ユニット２０２において実行されるシェーダプログラムによって実行されてもよい。
【００２７】
ピクセルシェーダステージ３１６は、上流で生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルに関する出力値（例えば、カラー値）を計算する。ピクセルシェーダステージ３１６は、テクスチャメモリからテクスチャを適用してもよい。ピクセルシェーダステージ３１６に関する処理は、プログラマブル処理ユニット２０２において実行されるシェーダプログラムによって実行される。
【００２８】
出力マージャステージ３１８は、ピクセルシェーダステージ３１６からの出力を受信し、これらの出力（ディスプレイデバイス１１８への出力のためにフレームバッファに書き込まれる）を統合して、ｚテスト及びアルファブレンディング等の処理を行うことによって、スクリーンピクセルに関する最終カラーを決定する。
【００２９】
上述したように、図３に示され、グラフィックス処理パイプライン１３４に含まれものとして説明された多くのステージは、図２に示すシェーダエンジン１３２で実行されるシェーダプログラムとして実装することができる。シェーダエンジン１３２におけるシェーダプログラムの実行を容易にするために、ドライバ１２２及びＡＰＤ１１６内で様々な動作が行われる。
【００３０】
このような動作の１つは、シェーダ入力及び出力データ移送を容易にすることを含む。より具体的には、グラフィックス処理パイプライン１３４のステージは、通常、入力データを取得し、当該入力データに対して何等かの処理を実行し、これに応じて、グラフィックス処理パイプライン１３４の次のステージに対して出力データを提供する。グラフィックス処理パイプライン１３４の一部として実行されるシェーダプログラムは、シェーダプログラムの入力及び出力を指定するＡＰＤ１１６への命令又は「ヒント」を含む。これらのヒントは、特定のシェーダプログラムに対する入力を何処に（例えば、何れのレジスタに）配置し、特定のシェーダプログラムからの出力を何処で（例えば、何れレジスタで）取得するかに関して、ＡＰＤ１１６に通知する。この入力及び出力情報は、固定機能のハードウェア又は他のシェーダプログラム等のグラフィックス処理パイプライン１３４の他の部分に出力データを転送するために、特定のシェーダプログラムに対する入力を何処に配置するか、及び、特定のシェーダプログラムからの出力を何処でフェッチするかに関してＡＰＤ１１６に指示するために、少なくとも部分的に使用される。一例では、頂点シェーダプログラムは、入力が予想される位置（例えば、レジスタ）を指定する。ＡＰＤ１１６は、入力をフェッチし、それらの位置に入力を配置する。頂点シェーダプログラムは、入力頂点に対して頂点シェーディング動作を行い、修正された頂点を出力として提供する。ＡＰＤ１１６は、これらの修正された頂点をフェッチし、これらの頂点を、グラフィックス処理パイプライン１３４の次のステージによる入力として指定された位置（例えば、レジスタ）に配置する。
【００３１】
シェーダプログラムの実行を容易にするための別の動作は、シェーダプログラムを実行するためにウェーブフロントを起動する前に、シェーダプログラムを実行するウェーブフロントに関するリソース（例えば、ウェーブフロントブックキーピング２０４のエントリ、ウェーブフロントによって使用されるレジスタ、ローカルデータストアメモリ２１２の一部、メモリ２１０、他のメモリ、ウェーブフロントによって使用される他のリソース等）を予約することを含む。特定のシェーダプログラムに関するウェーブフロントのために予約されるリソースの量は、シェーダプログラムの命令に少なくとも部分的に基づいている。より具体的には、シェーダプログラムは、通常、命令を含み、各命令は、オペランドとして使用する特定のレジスタを指定することができる。ＡＰＤ１１６は、ウェーブフロントが実行するシェーダプログラムの命令において指定されたレジスタに基づいて、ウェーブフロントのために予約されるレジスタの数を決定する。一例では、１０個の異なるベクトルレジスタが、６４個のワークアイテムで実行される特定のウェーブフロントによって指定される。したがって、ＡＰＤ１１６は、当該ウェーブフロントを実行するために、１０×６４＝６４０のレジスタを予約する必要があると判別する。同様に、命令は、オペランドとしてメモリ内の位置を指定することができる。ＡＰＤ１１６は、シェーダプログラムの命令によって指定されたメモリ位置に基づいて、ウェーブフロントのために予約されるメモリの総量を決定する。ウェーブフロントに必要な他のリソースも、ウェーブフロントが実行するシェーダプログラムの特性に基づいて予約される。
【００３２】
実行するウェーブフロントを準備するために行われる別の動作は、前のシェーダステージからのウェーブフロントが実行を完了したという指示を受信することを含む。より具体的には、いくつかのシェーダステージは、他のシェーダステージに依存する。例えば、テッセレーション（ハルシェーダステージ３０６、テッセレータステージ３０８及びドメインシェーダステージ３１０を含む）が有効である場合、ハルシェーダステージ３０６は、頂点シェーダステージ３０４からの結果に依存して実行される。したがって、特定の頂点のセットに対してハルシェーダプログラムを実行するウェーブフロントは、頂点シェーダプログラムを、これらの同じ頂点に対する頂点シェーダプログラムの実行が完了するのを待機する。この「ハンドオフ」は、通常、スケジューラ１３６によって容易にされ、スケジューラ１３６は、特定のウェーブフロントが完了したという通知を受信し、これに応じて、後続のステージのためにウェーブフロントを起動する。
【００３３】
上記の動作は、シェーダプログラムを介して少なくとも部分的に実施されるグラフィックス処理パイプライン１３４の各ステージが、ある程度のオーバーヘッドに関連することを示している。例えば、異なるシェーダプログラムタイプに対して異なるウェーブフロントが起動する（例えば、頂点シェーダプログラムを実行するために、あるタイプのウェーブフロントが起動し、ハルシェーダプログラムを実行するために、他のタイプのウェーブフロントが起動する）。したがって、より多数のシェーダステージは、概して、スケジューラ１３６によって追跡されるより多数のウェーブフロントに関連付けられる。他のオーバーヘッドは、シェーダステージ間のデータ転送に関連するオーバーヘッドと、異なるシェーダプログラムタイプ毎に予約されるリソースの量に関連するオーバーヘッドと、を含む。このため、特定のシェーダステージを複合することによって、このようなオーバーヘッドを減らし、性能を向上させることができる。複合することができる２つのシェーダステージは、頂点シェーダステージとハルシェーダステージ、及び、頂点シェーダステージとジオメトリシェーダステージである。
【００３４】
図４Ａ及び図４Ｂは、一例による、グラフィックス処理パイプラインの構成を示す図である。これらの代替構成は、頂点シェーダステージ及びジオメトリシェーダステージ４２０が単一のシェーダステージ（頂点シェーダステージ及びジオメトリシェーダステージ４２０の複合）に複合される図４Ａの構成と、頂点シェーダステージ及びハルシェーダステージ３０６が単一のシェーダステージ（頂点シェーダステージ及びハルシェーダステージ４１０の複合）に複合される図４Ｂの構成と、を含む。本明細書では、図４Ａに示すグラフィックス処理パイプライン１３４の構成を「頂点／ジオメトリシェーダ構成４０２」と呼び、図４Ｂに示すグラフィックス処理パイプライン１３４の構成を「頂点／ハルシェーダ構成４０４」と呼ぶ。
【００３５】
グラフィックス処理パイプライン１３４の様々なステージを有効又は無効にすることができる。具体的には、ジオメトリシェーダステージ３１２によって実施されるジオメトリシェーディングを有効又は無効にすることができ、テッセレーションを実施するステージ（ハルシェーダステージ３０６、テッセレータステージ３０８及びドメインシェーダステージ３１０）を一緒に有効又は無効にすることができる。テッセレーション及びジオメトリシェーディングの両方が無効である場合、図４Ａ及び図４Ｂに示す構成の何れも使用されない。図４Ａ及び図４Ｂの両方では、無効なステージは、無効なステージの周囲を通ってグラフィックス処理パイプライン１３４の後続のステージに矢印が流れることによって示されている。ジオメトリシェーディングが有効であり、テッセレーションが無効である場合、図４Ａの頂点／ジオメトリシェーダ構成４０２が使用される。テッセレーションが有効である場合（ジオメトリシェーディングが有効であるかどうかに関わらず）、図４Ｂの頂点／ハルシェーダ構成４０４が使用される（ジオメトリシェーダステージ３１２が点線で示されており、当該ステージの使用がオプションであることを示している）。
【００３６】
２つのシェーダステージを「複合する」ことは、２つのシェーダステージに関するシェーダプログラムが（例えば、ドライバ１２２によって）単一のシェーダプログラムに複合され、複合されたシェーダプログラムを実行するためにウェーブフロントが起動されることを意味する。より具体的には、第１タイプのウェーブフロントを起動して頂点シェーダプログラムを実行し、第２タイプのウェーブフロントを起動してハルシェーダプログラム又はジオメトリシェーダプログラムを実行する代わりに、ＡＰＤ１１６は、単一タイプ（頂点シェーダタイプとハルシェーダタイプ又はジオメトリシェーダタイプとの複合）のウェーブフロントを起動して、複合パイプラインステージに関する複合シェーダプログラムを実行する。この複合は、ＡＰＤ１１６及びグラフィックス処理パイプライン１３４に対するいくつかの動作及び／又は変更（シェーダプログラムが宣言する入力及び出力の変更、ＡＰＤ１１６でのウェーブフロントの実行方法の変更、異なるシェーダプログラムへのリソースの割り当て方法の変更、本明細書で説明する他の動作を含む）を含む。
【００３７】
図５Ａ及び図５Ｂは、一例による、図２に示すドライバ１２２及びスケジューラ１３６を有する複合シェーダステージの態様を示す図である。比較のために、図５Ａは、複合されていないシェーダステージを示し、図５Ｂは、複合シェーダステージを示している。
【００３８】
図５Ａでは、ドライバ１２２は、頂点シェーダコード５０２と、ハルシェーダコード又はジオメトリシェーダコード５０４とを、かかるコードが頂点シェーダステージ３０４とハルシェーダステージ３０６又はジオメトリシェーダステージ３１２との一部としてＡＰＤ１１６で実行されるように要求するハードウェア又はソフトウェアから受信する。ハルシェーダコード又はジオメトリシェーダコード５０４は、ジオメトリシェーダコード又はハルシェーダコードの何れかを表している。
【００３９】
ドライバ１２２は、頂点シェーダコード５０２と、ハルシェーダコード又はジオメトリシェーダコード５０４とを受信したことに応じて、頂点シェーダコード５０２をコンパイルして頂点シェーダプログラム５０６を生成し、ハルシェーダコード又はジオメトリシェーダコード５０４をコンパイルしてハルシェーダプログラム又はジオメトリシェーダプログラム５０８を生成する。（例えば、アプリケーション１２６によって）ドライバ１２２に提供されるシェーダプログラムをコンパイルするための技術は、概して、ＡＭＤ中間言語等の高レベル言語で規定されたプログラムを、ハードウェアに関連付けられ及びＡＰＤ１１６によって理解される低レベル命令に変換することを含む。
【００４０】
ＡＰＤ１１６において、スケジューラ１３６は、コンパイルされた頂点シェーダプログラム５０６を取得し、ハルシェーダプログラム又はジオメトリシェーダプログラム５０８は、これらのシェーダプログラムを実行する。この実行の一部は、シェーダプログラムに必要なリソースを識別及び予約することを含む。この実行の他の部分は、シェーダプログラムを実行するためにウェーブフロントを起動することを含む。この実行のさらに他の部分は、パイプラインの異なるステージ間でウェーブフロントの実行を調整すること（つまり、後のステージのウェーブフロントが、前のステージのウェーブフロントの実行が完了するのを待機することを確実にし、後のステージの実行は前のステージの結果に依存する）を含む。
【００４１】
これらの実行の態様は、図５Ａに示されている。スケジューラ１３６は、リソースを予約し、頂点シェーダプログラムを実行する頂点シェーダウェーブフロントを起動する。次に、スケジューラ１３６は、未処理の頂点シェーダウェーブフロント５１０の「完了」信号を待機する。スケジューラ１３６は、「完了」信号を受信すると、ハルシェーダウェーブフロント又はジオメトリシェーダウェーブフロント５１２に関するリソースを予約して、これらを起動し、ハルシェーダプログラム又はジオメトリシェーダプログラム５０８を実行する。上述したように、リソースは、レジスタ、メモリ、ウェーブフロントの実行を追跡するための追跡リソース、及び、他のリソースを含む。
【００４２】
図５Ｂは、複合シェーダステージを示している。ドライバ１２２は、これらの複合されたシェーダステージに対して、（例えば、アプリケーション１２６から）頂点シェーダコード５０２とハルシェーダコード又はジオメトリシェーダコード５０４とを受信し、これらのコードの異なる部分を、単一の複合頂点及びハル又はジオメトリシェーダプログラム５３０にコンパイルする。ハルシェーダコード又はジオメトリシェーダコード５０４は、テッセレーションが無効であるがジオメトリシェーディングが有効であるグラフィックス処理パイプライン１３４の構成に関するジオメトリシェーダコード（図４Ａ）、又は、テッセレーションが無効であるグラフィックス処理パイプライン１３４の構成に関するハルシェーダコード（図４Ｂ）の何れかを表している。
【００４３】
ドライバ１２２は、シェーダステージを複合するために、頂点シェーダコード５０２とハルシェーダコード又はジオメトリシェーダコード５０４とをコンパイルして、コンパイル済シェーダプログラムを生成し、コンパイル済シェーダプログラムを「ステッチ（stitches）」する。２つのシェーダプログラムをステッチすることは、２つのシェーダプログラムを連結し、複合を適切に変更することを意味する。
【００４４】
連結されたシェーダプログラムを変更する１つの方法は、シェーダプログラムに対して定義された入力及び出力に関する。より具体的には、各シェーダプログラムは、シェーダプログラムへの入力及び出力を定義する。これらの定義された入力及び出力は、ＡＰＤ１１６へのヒントとして機能する。ウェーブフロントがシェーダプログラムの実行を開始する場合、ＡＰＤ１１６は、入力として示された値がシェーダプログラムによって指定された位置（例えば、レジスタ）に配置されることを確実にする。ウェーブフロントが実行を完了すると、ＡＰＤ１１６は、出力を記憶するように示された位置（例えば、レジスタ）からデータを取り出す。ＡＰＤ１１６は、このデータを、出力データを使用する後続のシェーダステージにおけるシェーダプログラムのために、他の位置（例えば、レジスタ）にコピーすることができる。例えば、図３に示すグラフィックス処理パイプライン１３４の場合、ＡＰＤ１１６は、シェードされた頂点を、頂点シェーダステージ３０４で実行される頂点シェーダプログラムの出力として指定された位置から、ハルシェーダステージ３０６で実行されるハルシェーダプログラムの入力として指定された位置にコピーする。
【００４５】
頂点シェーダコード５０２は、出力を定義し、ハルシェーダコード又はジオメトリシェーダコード５０４は、入力を定義する。しかしながら、複合頂点及びハル又はジオメトリシェーダプログラム５３０は、２つの別々のシェーダプログラムではなく単一のシェーダプログラムであるため、頂点シェーダコード５０２の定義された出力と、ハルシェーダコード又はジオメトリシェーダコード５０４の定義された入力とは、ＡＰＤ１１６によって明示的に「扱われる」必要がない。より具体的には、これらの定義された入力及び出力は、グラフィックス処理パイプライン１３４の異なるステージで実行されているシェーダプログラム間でデータを転送する方法に関するＡＰＤ１１６へのヒントであるため、複合頂点及びハル又はジオメトリシェーダプログラム５３０において必要とされない。したがって、ドライバ１２２は、複合頂点及びハル又はジオメトリシェーダプログラム５３０を生成する際に、頂点シェーダコード５０２の定義された出力と、ハルシェーダコード又はジオメトリシェーダコード５０４の定義された入力と、を削除する。また、ドライバ１２２は、入力から読み出すハルシェーダコード又はジオメトリシェーダコード５０４の命令を、代わりに、頂点シェーダコード５０２の出力が配置されている位置から読み出すように変更する。例えば、あるレジスタが頂点シェーダコードの出力を記憶するように指示され、あるレジスタがハルシェーダコード又はジオメトリシェーダコードの入力を記憶するように指示された場合、ドライバ１２２は、ハルシェーダコード又はジオメトリシェーダコードの命令を、ハルシェーダコード又はジオメトリシェーダコードの入力を記憶するように指示されたレジスタから読み出すのではなく、頂点シェーダコードの出力を記憶するように指示されたレジスタから読み出すように変更する。
【００４６】
スケジューラ１３６は、ウェーブフロントを起動してシェーダプログラムを実行するために、これらのウェーブフロントに関するリソースを予約する。リソースは、様々なメモリユニットの一部、レジスタ（ベクトルレジスタ２０６及びスカラレジスタ２０８等）、ウェーブフロントを追跡するウェーブフロントブックキーピング２０４のエントリ、及び、他のリソースを含む。複合頂点及びハル又はジオメトリシェーダプログラム５３０用に予約されたリソースは、いくつかの点で、独立した頂点シェーダプログラムとハルシェーダプログラム又はジオメトリシェーダプログラムとのために予約されたリソースと異なる。実際に起動するウェーブフロントの数は異なる。独立した頂点シェーダのために起動するウェーブフロントの数は、シェードされる頂点６１０の数に依存する。独立したハルシェーダ又はジオメトリシェーダのために起動するウェーブフロントの数は、シェードされるパッチ（ハル）又はプリミティブ（ジオメトリ）の数に依存する。しかしながら、複合頂点及びハル又はジオメトリシェーダプログラム５３０のために起動するウェーブフロントの数は、独立した頂点シェーダプログラムとハルシェーダプログラム又はジオメトリシェーダプログラムとのために起動するウェーブフロントの総数よりも少なくなる。これは、複合シェーダプログラムが、両方のシェーダプログラムに対する命令を有するためである。したがって、頂点シェーダステージの命令を実行する複合シェーダプログラムの少なくとも一部は、ハルシェーダステージ又はジオメトリシェーダステージの命令も実行することになる。
【００４７】
一例では、起動する複合シェーダステージウェーブフロントの数は、頂点シェーダステージで処理される頂点の数に基づいている。より具体的には、起動するワークアイテムの数は、頂点シェーダステージで処理される頂点６１０の数と等しい（又は、頂点６１０の数とほぼ等しい）。各ウェーブフロントは、固定数のワークアイテムの命令を実行するので、ウェーブフロントの数は、起動するワークアイテムの数に基づいている。また、ハルシェーダプログラム又はジオメトリシェーダプログラムは、頂点の集合６１４に対してワークを実行するので、頂点シェーダステージの頂点６１０を処理するためのワークアイテムの数は、ハルシェーダ又はジオメトリシェーダ動作を行うためのワークアイテムの数よりも多い。さらに、複合シェーダプログラムは、頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージとの両方の命令を含む。したがって、起動する複合シェーダプログラムの少なくとも一部は、頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージとの両方の命令を実行することになる。このため、起動する複合シェーダステージウェーブフロントの数は、頂点シェーダステージで処理される頂点６１０の数に基づいており、ハルシェーダステージ又はジオメトリシェーダステージで処理されるパッチ又はプリミティブの数に基づいていない。
【００４８】
また、頂点シェーダ命令に使用されるいくつかのレジスタ又はメモリ位置は、ハルシェーダ又はジオメトリシェーダ命令にも再利用される。したがって、頂点シェーダプログラムのウェーブフロントと、ハルシェーダプログラム又はジオメトリシェーダプログラムのウェーブフロントとを独立して実行する場合には、各シェーダプログラムに関するレジスタ及びメモリを予約する必要がある一方で、複合シェーダプログラムは、より少ないメモリ及びレジスタを予約することが可能になる。いくつかの例では、複合頂点及びハル又はジオメトリシェーダプログラム５３０のために予約されるリソースの量は、特定のリソース毎に、頂点シェーダコード５０２、又は、ハルシェーダコード若しくはジオメトリシェーダコード５０４によって必要とされるリソースの数の最大値である。例えば、頂点シェーダコードが４つのレジスタを必要とし、ハルシェーダコード又はジオメトリシェーダコード５０４が８つのレジスタを必要とする場合、スケジューラ１３６は、８つのレジスタを予約する。頂点シェーダコードが、ローカルデータストアメモリ２１２に１００バイト必要とし、ハルシェーダコード又はジオメトリシェーダコードが、ローカルデータストアメモリ２１２に２００バイト必要とする場合、スケジューラ１３６は、２００バイトを予約する。また、ステージ毎のデータが実行ユニットに対してローカルに維持されるので、複合シェーダステージを使用すると、レイテンシを短縮することが可能になる。したがって、待ち時間は、あるステージのデータを第１ステージの外付けメモリユニットに送信し、次いで、当該データを第２ステージで読み戻すことに関連するレイテンシを短縮する。
【００４９】
図６は、一例による、シェーダステージ間の境界におけるワークロードの変化に適応するために、頂点シェーダステージとハルシェーダステージ又はジオメトリシェーダステージとの複合に関するウェーブフロントを有効又は無効にするための動作を示す図である。より具体的には、図６は、図４Ａの構成に関する頂点シェーダプログラムとジオメトリシェーダプログラムとの複合、又は、図４Ｂの構成に関する頂点シェーダプログラムとハルシェーダプログラムとの複合の何れかを実行する、複合頂点及びハル又はジオメトリシェーダウェーブフロント５３２（複合シェーダプログラムは、Ｖ＋Ｈ／Ｇ５３０として示されている）の数を示している。複合シェーダプログラム５３０は、頂点シェーダ部６０６と、ハルシェーダ又はジオメトリシェーダ部６０８と、を含む。頂点シェーダ部６０６は、入力として頂点５１０を受け入れ、シェードされた頂点６１２をハル／ジオメトリシェーダ部６０８に出力する。ハル／ジオメトリシェーダ部６０８は、シェードされた頂点を入力制御点６１４として受け入れ、これに応じて出力制御点６１６を出力する。シェードされた出力頂点６１２は、出力パッチを生成する処理のためにまとめられているので、ハル／ジオメトリシェーダ部６０８のウェーブフロントの数は、頂点シェーダ部６０６によってシェードされる頂点６１４の数よりも少なくなることに留意されたい。
【００５０】
この変化に適応するために、いくつかの複合頂点及びハル又はジオメトリシェーダウェーブフロント５３２が、頂点シェーダステージでシェードされる識別された頂点を処理するために起動する。複合シェーダウェーブフロント５３２は、実行中に変化する実行フットプリント（execution footprint）を有するように構成されている。「実行フットプリントの変化」は、ハルシェーダ又はジオメトリシェーダ部６０８と比較して、異なる数のウェーブフロント５３２が頂点シェーダ部５０６に対して実行することを意味する。より具体的には、頂点シェーダプログラムは、個々の頂点に対して頂点シェーダ動作を行う。異なるワークアイテムに対応する頂点シェーダプログラムの複数のインスタンスが、プログラマブル処理ユニット２０２において並列に実行されるが、個々のワークアイテムは、データの単一の頂点のみに対して独立して動作し、当該データの頂点に指定された変換及び他の動作を実行する。
【００５１】
しかしながら、ハルシェーダプログラム又はジオメトリシェーダプログラムは、データの複数の頂点（例えば、ハルシェーダの場合には入力制御点の集合であり、ジオメトリシェーダの場合には頂点の集合）に対して動作する。より具体的には、各ワークアイテムは、複数の頂点を入力制御点として受け入れ、パッチを複数の出力制御点として出力する。ハルシェーダプログラム及びジオメトリシェーダプログラムが複数の頂点で動作するので、ハルシェーダ及びジオメトリシェーダ動作を行うためのワークアイテムの総数は、概して、頂点シェーダ動作を行うためのワークアイテムの数よりも少ない。
【００５２】
頂点シェーダのワークアイテムと、ハルシェーダ又はジオメトリシェーダのワークアイテムとの間の比が異なるので、複合シェーダプログラムを実行するために起動するウェーブフロント５３２の殆どは、実際にはハルシェーダ又はジオメトリシェーダ部に必要とされない。したがって、不要なウェーブフロントは、頂点シェーダ部６０６を実行した後にスリープ又は終了される。ウェーブフロント５３２をスリープの状態にすることは、ウェーブフロント５３２の追跡を継続すること、ウェーブフロント５３２の状態をメモリに記憶すること等を意味するが、何れかのＳＩＭＤユニット１３８に実行されるスリープ中のウェーブフロント５３２をスケジュールすることを意味していない。ウェーブフロント５３２を終了することは、ウェーブフロント５３２の実行を終了することと、例えばウェーブフロントブックキーピング２０４に記憶され得る、終了したウェーブフロント５３２に関する追跡データを破棄することと、を意味する。
【００５３】
図６において、図の左側は、頂点シェーダ部６０６を実行する複合ウェーブフロント５３２を示し、図の右側は、ハルシェーダ又はジオメトリシェーダ部６０８を実行する複合ウェーブフロント５３２を示している（非アクティブ部分が点線で示されている）。図の右側は、ハルシェーダ又はジオメトリシェーダ部５０８を実行する複合ウェーブフロント５３２を示しており、非アクティブウェーブフロント５３２及びシェーダプログラムの一部が点線で示されている。頂点シェーダ部５０６がウェーブフロント５３２によって実行されると、ＡＰＤ１１６は、ハルシェーダ又はジオメトリシェーダ部６０８を実行しない多くのウェーブフロント５３２を無効にする。図６の例では、ウェーブフロント５３２（１）は、ハルシェーダ又はジオメトリシェーダ部６０８を実行し、ウェーブフロント５３２（２）〜５３２（Ｎ）は、無効にされている。しかしながら、他の例では、ハルシェーダ又はジオメトリシェーダ部６０８の実行のために、異なる数のウェーブフロントを有効及び無効にすることができる。
【００５４】
無効ではない各ウェーブフロント５３２は、頂点シェーダ部６０６を実行する複数のウェーブフロント５３２によって生成された、シェードされた頂点を（入力制御点６１４として）集める。この「集めること」は、ドライバ１２２によって複合シェーダプログラム５３０に挿入された特定の命令によって実現することができる。より具体的には、ドライバ１２２は、頂点シェーダ部６０６の複数のウェーブフロント５３２に指定されるように、変更された頂点の位置から読み出す命令を挿入することができる。
【００５５】
複合シェーダプログラムのハルシェーダプログラム又はジオメトリシェーダプログラム６０８が、頂点シェーダ部６０６からの全ての入力制御点６１４を有することを確実にするために、ドライバ１２２は、複合頂点及びハル又はジオメトリシェーダプログラム５３０を生成する場合に、頂点シェーダ部６０６と、ハルシェーダ又はジオメトリシェーダ部６０８と、の間にバリア命令を挿入する。バリア命令は、ハルシェーダ又はジオメトリシェーダ部６０８のデータを生成するウェーブフロントが頂点シェーダ部６０６の実行を終了するまで、ハルシェーダ又はジオメトリシェーダ部６０８の処理を実行するのを待機させる。
【００５６】
図６は、複合シェーダプログラム５３０の頂点からハル又はジオメトリ部までの遷移と、対応するウェーブフロントを無効にすることと、を示す。しかしながら、複合頂点及びハル又はジオメトリシェーダプログラム５３０は、様々なウェーブフロントをスリープ及び開始させる多くの遷移を含み得ることを理解されたい。
【００５７】
別の例では、複合頂点及びハル又はジオメトリシェーダプログラム５３０内のワークロードの変化は、ウェーブフロント内のワークアイテムを有効又は無効にすることによって適応される。より具体的には、各ウェーブフロントが、頂点のセットにおいてワークを実行し、次に、同じウェーブフロントが、プリミティブのセットにおいてワークを実行する。各ワークアイテムは、頂点動作については単一の頂点で、プリミティブ動作については単一のプリミティブでワークするので、概して、プリミティブ処理に関するワークアイテムの数は、頂点処理に関するワークアイテムの数よりも少なくなる。この差に適応するために、ウェーブフロントは、不要なワークアイテムを無効にし、残りのワークアイテムがプリミティブ動作を行う。
【００５８】
図７は、一例による、頂点シェーダステージとハルステージ又はジオメトリシェーダステージとの複合に関する複合頂点及びハル又はジオメトリシェーダプログラムを実行する方法７００のフロー図である。図１〜図６に関して示されたシステムについて説明するが、技術的に実行可能な順序で本方法を行うように構成されたる任意のシステムが本開示の範囲に含まれることを理解されたい。
【００５９】
示すように、方法７００がステップ７０２で開始し、ＡＰＤ１１６は、複合頂点及びハル又はジオメトリシェーダステージに関する複合シェーダプログラムを取得する。複合シェーダプログラムは、例えば、アプリケーション１２６から受信した頂点シェーダコードと、ハルシェーダコード又はジオメトリシェーダコードと、に基づいて、ドライバ１２２によって生成することができる。より具体的には、ドライバ１２２は、頂点シェーダコードと、ハルシェーダコード又はジオメトリシェーダコードとをコンパイルして、頂点及びハル又はジオメトリシェーダのコンパイルされた命令を生成し、頂点シェーダ命令と、ハルシェーダ命令又はジオメトリシェーダ命令と、を単一の複合シェーダプログラムに複合する。ドライバ１２２は、頂点シェーダコードの指定された出力と、ハルシェーダコード又はジオメトリシェーダコードの指定された入力等の個々のシェーダプログラムの態様を変更することができる。
【００６０】
ステップ７０４において、ＡＰＤ１１６は、複合シェーダプログラムを実行するためにリソースを予約する。予約されたリソースは、レジスタ及びローカルデータストアメモリ２１２内のメモリ等のメモリと、ウェーブフロントの実行を追跡するためのウェーブフロントブックキーピング２０４のエントリと、他のリソースと、を含む。複合シェーダプログラムのために予約されたリソースの数は、頂点シェーダプログラム、及び、ハルシェーダプログラム又はジオメトリシェーダプログラムの各々のために予約されたリソースの数よりも少ない場合がある。これは、いくつかのリソース（例えば、レジスタ、メモリ）は、複合シェーダプログラムの頂点シェーダ部から複合シェーダプログラムのハルシェーダ又はジオメトリシェーダ部まで再利用することができるからである。
【００６１】
ステップ７０６において、ＡＰＤ１１６は、複合シェーダプログラムを実行するために、ウェーブフロントを生成及び起動する。各ウェーブフロントは、頂点シェーダコードと、ハルシェーダコード又はジオメトリシェーダコードと、の両方に基づく命令を含む複合シェーダプログラムを実行する。起動するウェーブフロントの数は、頂点シェーダコードを実行するウェーブフロントの数と、ハルシェーダコード又はジオメトリシェーダコードを実行するウェーブフロントの数と、のうち大きい方の数に基づいている。通常、頂点シェーダコードを実行するために使用されるウェーブフロントの数が多くなるので、生成されたウェーブフロントの数は、複合シェーダプログラムの頂点シェーダ部で処理される頂点の数に依存する。
【００６２】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行する方法が提供される。この方法は、複合シェーダステージの複合シェーダプログラムを取り出すことと、複合シェーダプログラムを実行するために複数のウェーブフロントに関するリソースを予約することと、複合シェーダプログラムを実行するために複数のウェーブフロントを生成することと、を含む。複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む。
【００６３】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するアクセラレーテッド処理デバイス（ＡＰＤ）が提供される。ＡＰＤは、レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、スケジューラと、を含む。スケジューラは、複合シェーダステージの複合シェーダプログラムを取り出し、複数のシェーダエンジンにおいて複合シェーダプログラムを実行するために、複数のウェーブフロントに関するリソースを予約し、複数のシェーダエンジンにおいて複合シェーダプログラムを実行するために、複数のウェーブフロントを生成するように構成されている。複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む。
【００６４】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するコンピュータシステムが提供される。コンピュータシステムは、アクセラレーテッド処理デバイス（ＡＰＤ）を制御するためのデバイスドライバを実行するプロセッサと、ＡＰＤと、を含む。ＡＰＤは、レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、スケジューラと、を含む。スケジューラは、複合シェーダステージの複合シェーダプログラムをデバイスドライバから受信し、複合シェーダプログラムを複数のシェーダエンジンで実行するために、複数のウェーブフロントに関するリソースを予約し、複数のシェーダエンジンにおいて複合シェーダプログラムを実行するために、複数のウェーブフロントを生成するように構成されている。複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む。
【００６５】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の複合で上記に説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な複合で使用されてもよい。
【００６６】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６７】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2019535071.tif 000003
【図２】
2019535071.tif 000004
【図３】
2019535071.tif 000005
【図４Ａ】
2019535071.tif 000006
【図４Ｂ】
2019535071.tif 000007
【図５Ａ】
2019535071.tif 000008
【図５Ｂ】
2019535071.tif 000009
【図６】
2019535071.tif 000010
【図７】
2019535071.tif 000011
【国際調査報告】
2019535071.tif 000012
2019535071.tif 000013
2019535071.tif 000014