IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7253488複合ワールドスペースパイプラインシェーダステージ
<>
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図1
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図2
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図3
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図4A
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図4B
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図5A
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図5B
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図6
  • 特許-複合ワールドスペースパイプラインシェーダステージ 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-29
(45)【発行日】2023-04-06
(54)【発明の名称】複合ワールドスペースパイプラインシェーダステージ
(51)【国際特許分類】
   G06T 15/00 20110101AFI20230330BHJP
【FI】
G06T15/00 501
【請求項の数】 14
(21)【出願番号】P 2019515836
(86)(22)【出願日】2017-09-06
(65)【公表番号】
(43)【公表日】2019-12-05
(86)【国際出願番号】 US2017050345
(87)【国際公開番号】W WO2018057294
(87)【国際公開日】2018-03-29
【審査請求日】2020-09-02
【審判番号】
【審判請求日】2022-05-17
(31)【優先権主張番号】62/398,211
(32)【優先日】2016-09-22
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/389,481
(32)【優先日】2016-12-23
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17150441.8
(32)【優先日】2017-01-05
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マンゲッシュ ピー. ニジャシャー
(72)【発明者】
【氏名】ランディー ダブリュー. ラムセイ
(72)【発明者】
【氏名】トッド マーティン
【合議体】
【審判長】五十嵐 努
【審判官】川崎 優
【審判官】田中 啓介
(56)【参考文献】
【文献】特表2015-524092(JP,A)
【文献】米国特許出願公開第2011/0063294(US,A1)
【文献】特表2017-528820(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00
G06F 9/46-54,15/80
(57)【特許請求の範囲】
【請求項1】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行する方法であって、
前記複合シェーダステージの複合シェーダプログラムを取り出すことであって、前記複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合、及び、頂点シェーダステージとジオメトリシェーダステージとの複合のうち何れかを含み、前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、からの命令を含む、ことと、
テッセレーションが無効でジオメトリシェーディングが有効な第1プリミティブに対して、前記グラフィックス処理パイプラインを頂点シェーダ/ジオメトリシェーダ構成にして、前記頂点シェーダステージと、前記頂点シェーダステージと前記ハルシェーダステージとの複合を含むテッセレーション用のステージとをバイパスすることと、
テッセレーションが有効な第2プリミティブに対して、前記グラフィックス処理パイプラインを頂点シェーダ/ハルシェーダ構成にして、前記頂点シェーダステージをバイパスし、前記頂点シェーダと前記ジオメトリシェーダとの複合が前記第2プリミティブを処理しないようにすることと、
前記複合シェーダプログラムを実行するために、いくつかのウェーブフロントを生成することと、を含む、
方法。
【請求項2】
前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、の両方からの命令を含む単一のシェーダプログラムを含む、
請求項1の方法。
【請求項3】
前記頂点シェーダプログラムは、前記グラフィックス処理パイプラインの後続のステージに転送するために、頂点シェーダの出力値のグラフィックス処理ハードウェア位置を示す頂点シェーダ出力を指定し、
前記複合シェーダプログラムは、前記頂点シェーダ出力を含まない、
請求項の方法。
【請求項4】
リソースを予約することを含み、
前記リソースを予約することは、
前記頂点シェーダプログラムを実行するための第1の数のレジスタと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第2の数のレジスタと、のうち大きい数のレジスタを選択することと、
前記大きい数のレジスタを予約することと、を含む、
請求項の方法。
【請求項5】
前記複合シェーダステージの頂点シェーダ部によって処理される頂点の数と、前記ハルシェーダステージによって処理されるパッチの数又は前記ジオメトリシェーダステージによって処理されるプリミティブの数の何れかと、の指示を受信することと、
前記複合シェーダステージの前記頂点シェーダ部によって前記数の頂点を処理するためにウェーブフロントの数を決定することと、を含み、
前記複合シェーダプログラムを実行するために、前記いくつかのウェーブフロントを生成することは、前記複合シェーダプログラムを実行するために、決定された数のウェーブフロントを生成することを含む、
請求項の方法。
【請求項6】
前記頂点シェーダプログラムを実行するための第1の数のワークアイテムと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第2の数のワークアイテムとの比に基づいて、1つ以上の前記ウェーブフロントを無効にすることを含み、
前記無効にすることは、1つ以上の前記ウェーブフロントをスリープさせること又は終了させることのうち1つを含む、
請求項の方法。
【請求項7】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するアクセラレーテッド処理デバイス(APD)であって、
レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、
スケジューラと、を備え、
前記スケジューラは、
前記複合シェーダステージの複合シェーダプログラムを取り出すことであって、前記複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合、及び、頂点シェーダステージとジオメトリシェーダステージとの複合のうち何れかを含み、前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、からの命令を含む、ことと、
テッセレーションが無効でジオメトリシェーディングが有効な第1プリミティブに対して、前記グラフィックス処理パイプラインを頂点シェーダ/ジオメトリシェーダ構成にして、前記頂点シェーダステージと、前記頂点シェーダステージと前記ハルシェーダステージとの複合を含むテッセレーション用のステージとをバイパスすることと、
テッセレーションが有効な第2プリミティブに対して、前記グラフィックス処理パイプラインを頂点シェーダ/ハルシェーダ構成にして、前記頂点シェーダステージをバイパスし、前記頂点シェーダと前記ジオメトリシェーダとの複合が前記第2プリミティブを処理しないようにすることと、
前記複数のシェーダエンジンにおいて前記複合シェーダプログラムを実行するために、いくつかののウェーブフロントを生成することと、
を行うように構成されている、
APD。
【請求項8】
前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、の両方からの命令を含む単一のシェーダプログラムを含む、
請求項のAPD。
【請求項9】
前記頂点シェーダプログラムは、前記グラフィックス処理パイプラインの後続のステージに転送するために、頂点シェーダの出力値のグラフィックス処理ハードウェア位置を示す頂点シェーダ出力を指定し、
前記複合シェーダプログラムは、前記頂点シェーダ出力を含まない、
請求項のAPD。
【請求項10】
前記スケジューラは、
前記頂点シェーダプログラムを実行するための第1の数のレジスタと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第2の数のレジスタと、のうち大きい数のレジスタを選択することと、
前記大きい数のレジスタを予約することと、
によって、リソースを予約するように構成されている、
請求項のAPD。
【請求項11】
前記スケジューラは、
前記複合シェーダステージの頂点シェーダ部によって処理される頂点の数と、前記ハルシェーダステージによって処理されるパッチの数又は前記ジオメトリシェーダステージによって処理されるプリミティブの数の何れかと、の指示を受信し、
前記複合シェーダステージの前記頂点シェーダ部によって前記数の頂点を処理するためにウェーブフロントの数を決定するように構成されており、
前記複合シェーダプログラムを実行するために、前記いくつかのウェーブフロントを生成することは、前記複合シェーダプログラムを実行するために、決定された数のウェーブフロントを生成することを含む、
請求項のAPD。
【請求項12】
前記スケジューラは、
前記頂点シェーダプログラムを実行するための第1の数のワークアイテムと、前記ハルシェーダプログラム又は前記ジオメトリシェーダプログラムの何れかを実行するための第2の数のワークアイテムとの比に基づいて、1つ以上の前記ウェーブフロントを無効にするように構成されており、
前記無効にすることは、1つ以上の前記ウェーブフロントをスリープさせること又は終了させることのうち1つを含む、
請求項11のAPD。
【請求項13】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するコンピュータシステムであって、
アクセラレーテッド処理デバイス(APD)を制御するためのデバイスドライバを実行するプロセッサと、
前記APDと、を備え、
前記APDは、
レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、
スケジューラと、を備え、
前記スケジューラは、
前記複合シェーダステージの複合シェーダプログラムを前記デバイスドライバから受信することであって、前記複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合、及び、頂点シェーダステージとジオメトリシェーダステージとの複合のうち何れかを含み、前記複合シェーダプログラムは、頂点シェーダプログラムと、ハルシェーダプログラム又はジオメトリシェーダプログラムと、からの命令を含む、ことと、
テッセレーションが無効でジオメトリシェーディングが有効な第1プリミティブに対して、前記グラフィックス処理パイプラインを頂点シェーダ/ジオメトリシェーダ構成にして、前記頂点シェーダステージと、前記頂点シェーダステージと前記ハルシェーダステージとの複合を含むテッセレーション用のステージとをバイパスすることと、
テッセレーションが有効な第2プリミティブに対して、前記グラフィックス処理パイプラインを頂点シェーダ/ハルシェーダ構成にして、前記頂点シェーダステージをバイパスし、前記頂点シェーダと前記ジオメトリシェーダとの複合が前記第2プリミティブを処理しないようにすることと、
前記複数のシェーダエンジンにおいて前記複合シェーダプログラムを実行するために、いくつかのウェーブフロントを生成することと、
を行うように構成されている、
コンピュータシステム。
【請求項14】
前記複合シェーダステージは、テッセレーションが無効であるグラフィックス処理パイプラインの一部であり、
前記複合シェーダステージは、前記頂点シェーダステージとジオメトリシェーダステージとの複合を含む、
請求項13のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2016年9月22日に出願された米国仮特許出願第62/398,211号と、2016年12月23日に出願された米国特許出願第15/389,481号と、2017年1月5日に出願された欧州特許出願第17150441.8号の利益を主張し、これらの内容は、本明細書に十分に記載されているかのように、言及したことによって本明細書に組み込まれる。
【0002】
開示された実施形態は、概して、グラフィックス処理パイプラインに関し、具体的には、複合ワールドスペースパイプライン(combined world-space pipeline)シェーダステージに関する。
【背景技術】
【0003】
3次元グラフィックス処理パイプラインは、ホスト(コンピューティングシステムの中央処理装置等)からコマンドを受信し、当該コマンドを処理してディスプレイデバイスに表示するためのピクセルを生成する。グラフィックス処理パイプラインは、頂点位置及び属性の変換、ピクセルカラーの計算等の個々のタスクを実行するいくつかのステージを含む。グラフィックス処理パイプラインは、常に開発及び改良されている。
【0004】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【0005】
図1】1つ以上の開示される実施形態を実装することができる例示的なデバイスのブロック図である。
図2】さらなる詳細を示す図1のデバイスのブロック図である。
図3図2に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。
図4A】一例による、グラフィックス処理パイプラインの構成を示す図である。
図4B】一例による、グラフィックス処理パイプラインの構成を示す図である。
図5A】一例による、図2に示すドライバ及びスケジューラを含む複合シェーダステージの態様を示す図である。
図5B】一例による、図2に示すドライバ及びスケジューラを含む複合シェーダステージの態様を示す図である。
図6】一例による、シェーダステージ間の境界におけるワークロードの変化に適応するために、頂点及びハルシェーダステージ又はジオメトリシェーダステージの複合に関するウェーブフロントを有効又は無効にするための動作を示す図である。
図7】一例による、頂点及びハルシェーダステージ又はジオメトリシェーダステージの複合に関する頂点及びハルシェーダプログラム又はジオメトリシェーダプログラムの複合を実行する方法のフロー図である。
【発明を実施するための形態】
【0006】
本開示は、グラフィックス処理パイプラインの改良に関する。より具体的には、頂点変換を実行する頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージと、が複合される。テッセレーションが無効であって、ジオメトリシェーディングが有効である場合、グラフィックス処理パイプラインは、頂点シェーダステージと、グラフィックスシェーダステージと、の複合を含む。テッセレーションが有効である場合、グラフィックス処理パイプラインは、頂点シェーダステージと、ハルシェーダステージと、の複合を含む。テッセレーション及びジオメトリシェーディングの両方が無効である場合、グラフィックス処理パイプラインは、複合シェーダステージを使用しない。複合シェーダステージは、シェーダプログラムの実行インスタンス及び予約された関連リソースの数を減らすことによって、効率を改善する。
【0007】
図1は、本開示の1つ以上の態様が実装された例示的なデバイス100のブロック図である。デバイス100には、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等が含まれる。デバイス100は、プロセッサ102と、メモリ104と、ストレージデバイス106と、1つ以上入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、入力ドライバ112及び出力ドライバ114をオプションとして含む。デバイス100は、図1に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【0008】
プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等)を含む。
【0009】
ストレージデバイス106は、固定又は取り外し可能なストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。
【0010】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信するのを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信するのを可能にする。出力ドライバ114は、ディスプレイデバイス118に接続されたアクセラレーテッド処理デバイス(APD)116を含む。APDは、プロセッサ102から計算コマンド(compute commands)及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス118に提供するように構成されている。
【0011】
APD116は、単一命令複数データ(SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並行処理ユニットを含む。しかしながら、APD116によって実行されるものとして説明した機能は、SIMDパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【0012】
図2は、APD116でのタスク処理の実行に関連するさらなる詳細を示すデバイス100のブロック図である。プロセッサ102は、プロセッサ102による実行のための1つ以上の制御論理モジュールをシステムメモリ104内に保持している。制御論理モジュールは、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を含み、図示されていない他のモジュールをオプションで含むことができる。制御論議モジュールは、プロセッサ102及びAPD116の様々な態様の動作を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ122は、例えば、APD116の様々な機能にアクセスするためにプロセッサ102上で実行中のソフトウェア(例えば、アプリケーション126)へのアプリケーションプログラミングインタフェース(API)を提供することによって、APD116の動作を制御する。また、ドライバ122は、APD116の処理コンポーネント(例えば、以下でさらに詳細に説明するSIMDユニット138等)による実行のために、シェーダコードをシェーダプログラムにコンパイルするジャストインタイムコンパイラを含む。
【0013】
APD116は、例えばグラフィックス処理及び非グラフィックス処理等のように並行処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。APD116は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ102から受信したコマンドに基づいて画像をディスプレイデバイス118にレンダリングするために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、グラフィックス処理に直接関連しない計算処理動作(例えば、ビデオ、物理的シミュレーション、計算流体力学若しくは他のタスクに関連する動作等)、又は、グラフィックス処理パイプラインの「通常の」情報フローの一部ではない計算処理動作を実行する。
【0014】
APD116は、SIMDパラダイムに従って、プロセッサ102の要求に応じて並列に動作を実行するように構成された1つ以上のSIMDユニット138を有するシェーダエンジン132(本明細書ではまとめて「プログラマブル処理ユニット202」と呼ばれる)を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるというものである。一例では、各SIMDユニット138は、16個のレーンを含んでおり、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行するのに必要とされない場合、レーンを予測によってスイッチオフにすることができる。予測を利用して、分岐した制御フローによってプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
【0015】
シェーダエンジン132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並行して実行されるシェーダプログラムの単一のインスタンシエイション(instantiation)を表している。ワークアイテムは、単一のSIMDユニット138における「ウェーブフロント(wavefront)」として同時に実行することができる。複数のウェーブフロントが1つの「ワークグループ」に含まれてもよく、このワークグループは、同じプログラムを実行するように指定されたワークアイテムの集合を含む。ワークグループを構成するウェーブフロントの各々を実行することによって、当該ワークグループを実行することができる。ウェーブフロントは、単一のSIMDユニット138において順次実行されてもよいし、異なるSIMDユニット138において部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、シェーダプログラムの並列実行のインスタンスとして考えることができ、各ウェーブフロントは、SIMDパラダイムに従って、単一のSIMDユニット138で同時に実行する複数のワークアイテム(例えば、1つの命令制御ユニットが、複数のデータを用いて同じ命令ストリームを実行する)を含む。
【0016】
SIMDユニット138は、例えば、シェーダプログラムの命令が、ワークアイテム毎に同じオペランド値を使用する場合に、ワークデータを、ベクトルレジスタ206(SIMDユニット138において同じ命令を実行する異なるワークアイテムに対して異なる値を記憶するように構成されている)又はスカラレジスタ208(使用するために単一の値を記憶するように構成されている)に記憶する。各シェーダエンジン132のローカルデータストアメモリ212は、シェーダプログラムによって使用される値を記憶する。ローカルデータストアメモリ212は、ベクトルレジスタ206又はスカラレジスタ208に適合できないがシェーダプログラムによって使用されるデータ用に使用することができる。ローカルデータストアメモリ212の物理的近接は、シェーダエンジン132に含まれないAPD116のメモリ210、又は、APD116に存在しないメモリ104等の他のメモリと比較して、改善されたレイテンシを提供する。
【0017】
スケジューラ136は、異なるシェーダエンジン132及びSIMDユニット138で様々なウェーブフロントをスケジュールすることに関する動作を実行するように構成されている。スケジューラ136内のウェーブフロントブックキーピング204は、起動して実行中又は「スリープ」中(例えば、実行を待機しているか、他の何等かの理由で現在実行されていない)のウェーブフロントである保留ウェーブフロントに関するデータを記憶する。ウェーブフロントブックキーピング204は、保留ウェーブフロントを識別する識別子に加えて、各ウェーブフロントによって使用されるリソース(例えば、ベクトルレジスタ206及び/又はスカラレジスタ208等のレジスタ、ウェーブフロントに割り当てられたローカルデータストアメモリ212の一部、任意の特定のシェーダエンジン132に対してローカルでないメモリ210の一部、又は、ウェーブフロントに割り当てられた他のリソースを含む)の指標も記憶する。
【0018】
シェーダエンジン132によって与えられる並列性は、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング動作及び他のグラフィックス動作等のグラフィックス関連動作に適している。グラフィックス処理コマンドをプロセッサ102から受信するグラフィックス処理パイプライン134は、並列に実行するように計算タスクをシェーダエンジン132に提供する。
【0019】
また、シェーダエンジン132は、グラフィックスに関連しない計算タスク、又は、グラフィックス処理パイプライン134の「通常」の動作の一部として実行されない計算タスク(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補うために実行されるカスタム動作)を実行するために使用される。プロセッサ102上で実行されているアプリケーション126又は他のソフトウェアは、このような計算タスクを定義するプログラム(多くの場合、ドライバ122によってコンパイルされ得る「計算シェーダプログラム」と呼ばれる)を、実行のためにAPD116に送信する。
【0020】
図3は、図2に示すグラフィックス処理パイプライン134のさらなる詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々が特定の機能を実行するステージを含む。ステージは、グラフィックス処理パイプライン134の機能の一部を表している。各ステージは、プログラマブル処理ユニット202において実行中のシェーダプログラムとして部分的若しくは完全に実装され、又は、プログラマブル処理ユニット202の外部の固定機能の非プログラマブルハードウェアとして部分的若しくは完全に実装される。
【0021】
入力アセンブラステージ302は、ユーザ充填バッファ(例えば、アプリケーション126等のようにプロセッサ102によって実行されたソフトウェアの要求で充填されたバッファ)からプリミティブデータを読み出し、このデータをパイプラインの残りの部分で使用するためにプリミティブにアセンブルする。入力アセンブラステージ302は、ユーザ充填バッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、パイプラインの残りの部分によって使用されるように、アセンブルされたプリミティブをフォーマットする。
【0022】
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、例えば、変換、スキニング、モーフィング及び頂点毎のライティング等のように、様々な頂点毎の処理を実行する。変換処理は、頂点の座標を変換するための様々な処理を含むことができる。このような処理には、モデリング変換、ビューイング変換、投影変換、透視除算(perspective division)及びビューポート変換等のうち1つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標又は「位置」を変更するものと想定される。座標以外の属性を変更する頂点シェーダステージ304の他の処理は、位置以外の属性を変更するものと想定される。
【0023】
頂点シェーダステージ304は、1つ以上のシェーダエンジン132において実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、コンピュータプログラマによって事前に書き込まれたプログラムとして、プロセッサ102によって提供される。ドライバ122は、かかるコンピュータプログラムをコンパイルして、シェーダエンジン132での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
【0024】
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は協働して、プリミティブを細分することによって単純なプリミティブをより複雑なプリミティブに変換するテッセレーションを実施する。ハルシェーダステージ306は、入力されたプリミティブに基づいて、テッセレーションに関するパッチを生成する。テッセレータステージ308は、パッチに関するサンプルのセット(重心座標で指定された頂点を含むことができる)を生成する。ドメインシェーダステージ310は、(例えば、重心座標をワールドスペース座標に変換することによって)パッチに関するサンプルに対応する頂点に関する頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、プログラマブル処理ユニット202において実行されるシェーダプログラムとして実装することができる。
【0025】
ジオメトリシェーダステージ312は、プリミティブ毎に頂点処理を実行する。ジオメトリシェーダプログラムは、通常、プリミティブ全体(例えば、頂点の集合)を入力として受信し、ジオメトリシェーダプログラムの命令によって指定されるように、これらのプリミティブ全体に対して動作を行う。様々な異なるタイプの処理(例えば、ポイントスプリント拡張、動的パーティクルシステム処理、fur-finの生成、シャドウボリュームの生成、単一パスでのキューブマップへのレンダリング、プリミティブ単位のマテリアルスワッピング、及び、プリミティブ単位のマテリアルセットアップが含まれる)をジオメトリシェーダステージ312によって実行することができる。ジオメトリシェーダステージ312に関する動作は、プログラマブル処理ユニット202において実行されるシェーダプログラムによって実行されてもよい。
【0026】
ラスタライザステージ314は、上流で生成された単純なプリミティブを受信してラスタライズする。ラスタライズは、何れのスクリーンピクセル(又は、サブピクセルサンプル)が特定のプリミティブによってカバーされるかを決定することから構成されている。ラスタライズは、固定機能のハードウェアによって実行されてもよいし、プログラマブル処理ユニット202において実行されるシェーダプログラムによって実行されてもよい。
【0027】
ピクセルシェーダステージ316は、上流で生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルに関する出力値(例えば、カラー値)を計算する。ピクセルシェーダステージ316は、テクスチャメモリからテクスチャを適用してもよい。ピクセルシェーダステージ316に関する処理は、プログラマブル処理ユニット202において実行されるシェーダプログラムによって実行される。
【0028】
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受信し、これらの出力(ディスプレイデバイス118への出力のためにフレームバッファに書き込まれる)を統合して、zテスト及びアルファブレンディング等の処理を行うことによって、スクリーンピクセルに関する最終カラーを決定する。
【0029】
上述したように、図3に示され、グラフィックス処理パイプライン134に含まれものとして説明された多くのステージは、図2に示すシェーダエンジン132で実行されるシェーダプログラムとして実装することができる。シェーダエンジン132におけるシェーダプログラムの実行を容易にするために、ドライバ122及びAPD116内で様々な動作が行われる。
【0030】
このような動作の1つは、シェーダ入力及び出力データ移送を容易にすることを含む。より具体的には、グラフィックス処理パイプライン134のステージは、通常、入力データを取得し、当該入力データに対して何等かの処理を実行し、これに応じて、グラフィックス処理パイプライン134の次のステージに対して出力データを提供する。グラフィックス処理パイプライン134の一部として実行されるシェーダプログラムは、シェーダプログラムの入力及び出力を指定するAPD116への命令又は「ヒント」を含む。これらのヒントは、特定のシェーダプログラムに対する入力を何処に(例えば、何れのレジスタに)配置し、特定のシェーダプログラムからの出力を何処で(例えば、何れレジスタで)取得するかに関して、APD116に通知する。この入力及び出力情報は、固定機能のハードウェア又は他のシェーダプログラム等のグラフィックス処理パイプライン134の他の部分に出力データを転送するために、特定のシェーダプログラムに対する入力を何処に配置するか、及び、特定のシェーダプログラムからの出力を何処でフェッチするかに関してAPD116に指示するために、少なくとも部分的に使用される。一例では、頂点シェーダプログラムは、入力が予想される位置(例えば、レジスタ)を指定する。APD116は、入力をフェッチし、それらの位置に入力を配置する。頂点シェーダプログラムは、入力頂点に対して頂点シェーディング動作を行い、修正された頂点を出力として提供する。APD116は、これらの修正された頂点をフェッチし、これらの頂点を、グラフィックス処理パイプライン134の次のステージによる入力として指定された位置(例えば、レジスタ)に配置する。
【0031】
シェーダプログラムの実行を容易にするための別の動作は、シェーダプログラムを実行するためにウェーブフロントを起動する前に、シェーダプログラムを実行するウェーブフロントに関するリソース(例えば、ウェーブフロントブックキーピング204のエントリ、ウェーブフロントによって使用されるレジスタ、ローカルデータストアメモリ212の一部、メモリ210、他のメモリ、ウェーブフロントによって使用される他のリソース等)を予約することを含む。特定のシェーダプログラムに関するウェーブフロントのために予約されるリソースの量は、シェーダプログラムの命令に少なくとも部分的に基づいている。より具体的には、シェーダプログラムは、通常、命令を含み、各命令は、オペランドとして使用する特定のレジスタを指定することができる。APD116は、ウェーブフロントが実行するシェーダプログラムの命令において指定されたレジスタに基づいて、ウェーブフロントのために予約されるレジスタの数を決定する。一例では、10個の異なるベクトルレジスタが、64個のワークアイテムで実行される特定のウェーブフロントによって指定される。したがって、APD116は、当該ウェーブフロントを実行するために、10×64=640のレジスタを予約する必要があると判別する。同様に、命令は、オペランドとしてメモリ内の位置を指定することができる。APD116は、シェーダプログラムの命令によって指定されたメモリ位置に基づいて、ウェーブフロントのために予約されるメモリの総量を決定する。ウェーブフロントに必要な他のリソースも、ウェーブフロントが実行するシェーダプログラムの特性に基づいて予約される。
【0032】
実行するウェーブフロントを準備するために行われる別の動作は、前のシェーダステージからのウェーブフロントが実行を完了したという指示を受信することを含む。より具体的には、いくつかのシェーダステージは、他のシェーダステージに依存する。例えば、テッセレーション(ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310を含む)が有効である場合、ハルシェーダステージ306は、頂点シェーダステージ304からの結果に依存して実行される。したがって、特定の頂点のセットに対してハルシェーダプログラムを実行するウェーブフロントは、頂点シェーダプログラムを、これらの同じ頂点に対する頂点シェーダプログラムの実行が完了するのを待機する。この「ハンドオフ」は、通常、スケジューラ136によって容易にされ、スケジューラ136は、特定のウェーブフロントが完了したという通知を受信し、これに応じて、後続のステージのためにウェーブフロントを起動する。
【0033】
上記の動作は、シェーダプログラムを介して少なくとも部分的に実施されるグラフィックス処理パイプライン134の各ステージが、ある程度のオーバーヘッドに関連することを示している。例えば、異なるシェーダプログラムタイプに対して異なるウェーブフロントが起動する(例えば、頂点シェーダプログラムを実行するために、あるタイプのウェーブフロントが起動し、ハルシェーダプログラムを実行するために、他のタイプのウェーブフロントが起動する)。したがって、より多数のシェーダステージは、概して、スケジューラ136によって追跡されるより多数のウェーブフロントに関連付けられる。他のオーバーヘッドは、シェーダステージ間のデータ転送に関連するオーバーヘッドと、異なるシェーダプログラムタイプ毎に予約されるリソースの量に関連するオーバーヘッドと、を含む。このため、特定のシェーダステージを複合することによって、このようなオーバーヘッドを減らし、性能を向上させることができる。複合することができる2つのシェーダステージは、頂点シェーダステージとハルシェーダステージ、及び、頂点シェーダステージとジオメトリシェーダステージである。
【0034】
図4A及び図4Bは、一例による、グラフィックス処理パイプラインの構成を示す図である。これらの代替構成は、頂点シェーダステージ及びジオメトリシェーダステージ420が単一のシェーダステージ(頂点シェーダステージ及びジオメトリシェーダステージ420の複合)に複合される図4Aの構成と、頂点シェーダステージ及びハルシェーダステージ306が単一のシェーダステージ(頂点シェーダステージ及びハルシェーダステージ410の複合)に複合される図4Bの構成と、を含む。本明細書では、図4Aに示すグラフィックス処理パイプライン134の構成を「頂点/ジオメトリシェーダ構成402」と呼び、図4Bに示すグラフィックス処理パイプライン134の構成を「頂点/ハルシェーダ構成404」と呼ぶ。
【0035】
グラフィックス処理パイプライン134の様々なステージを有効又は無効にすることができる。具体的には、ジオメトリシェーダステージ312によって実施されるジオメトリシェーディングを有効又は無効にすることができ、テッセレーションを実施するステージ(ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310)を一緒に有効又は無効にすることができる。テッセレーション及びジオメトリシェーディングの両方が無効である場合、図4A及び図4Bに示す構成の何れも使用されない。図4A及び図4Bの両方では、無効なステージは、無効なステージの周囲を通ってグラフィックス処理パイプライン134の後続のステージに矢印が流れることによって示されている。ジオメトリシェーディングが有効であり、テッセレーションが無効である場合、図4Aの頂点/ジオメトリシェーダ構成402が使用される。テッセレーションが有効である場合(ジオメトリシェーディングが有効であるかどうかに関わらず)、図4Bの頂点/ハルシェーダ構成404が使用される(ジオメトリシェーダステージ312が点線で示されており、当該ステージの使用がオプションであることを示している)。
【0036】
2つのシェーダステージを「複合する」ことは、2つのシェーダステージに関するシェーダプログラムが(例えば、ドライバ122によって)単一のシェーダプログラムに複合され、複合されたシェーダプログラムを実行するためにウェーブフロントが起動されることを意味する。より具体的には、第1タイプのウェーブフロントを起動して頂点シェーダプログラムを実行し、第2タイプのウェーブフロントを起動してハルシェーダプログラム又はジオメトリシェーダプログラムを実行する代わりに、APD116は、単一タイプ(頂点シェーダタイプとハルシェーダタイプ又はジオメトリシェーダタイプとの複合)のウェーブフロントを起動して、複合パイプラインステージに関する複合シェーダプログラムを実行する。この複合は、APD116及びグラフィックス処理パイプライン134に対するいくつかの動作及び/又は変更(シェーダプログラムが宣言する入力及び出力の変更、APD116でのウェーブフロントの実行方法の変更、異なるシェーダプログラムへのリソースの割り当て方法の変更、本明細書で説明する他の動作を含む)を含む。
【0037】
図5A及び図5Bは、一例による、図2に示すドライバ122及びスケジューラ136を有する複合シェーダステージの態様を示す図である。比較のために、図5Aは、複合されていないシェーダステージを示し、図5Bは、複合シェーダステージを示している。
【0038】
図5Aでは、ドライバ122は、頂点シェーダコード502と、ハルシェーダコード又はジオメトリシェーダコード504とを、かかるコードが頂点シェーダステージ304とハルシェーダステージ306又はジオメトリシェーダステージ312との一部としてAPD116で実行されるように要求するハードウェア又はソフトウェアから受信する。ハルシェーダコード又はジオメトリシェーダコード504は、ジオメトリシェーダコード又はハルシェーダコードの何れかを表している。
【0039】
ドライバ122は、頂点シェーダコード502と、ハルシェーダコード又はジオメトリシェーダコード504とを受信したことに応じて、頂点シェーダコード502をコンパイルして頂点シェーダプログラム506を生成し、ハルシェーダコード又はジオメトリシェーダコード504をコンパイルしてハルシェーダプログラム又はジオメトリシェーダプログラム508を生成する。(例えば、アプリケーション126によって)ドライバ122に提供されるシェーダプログラムをコンパイルするための技術は、概して、AMD中間言語等の高レベル言語で規定されたプログラムを、ハードウェアに関連付けられ及びAPD116によって理解される低レベル命令に変換することを含む。
【0040】
APD116において、スケジューラ136は、コンパイルされた頂点シェーダプログラム506を取得し、ハルシェーダプログラム又はジオメトリシェーダプログラム508は、これらのシェーダプログラムを実行する。この実行の一部は、シェーダプログラムに必要なリソースを識別及び予約することを含む。この実行の他の部分は、シェーダプログラムを実行するためにウェーブフロントを起動することを含む。この実行のさらに他の部分は、パイプラインの異なるステージ間でウェーブフロントの実行を調整すること(つまり、後のステージのウェーブフロントが、前のステージのウェーブフロントの実行が完了するのを待機することを確実にし、後のステージの実行は前のステージの結果に依存する)を含む。
【0041】
これらの実行の態様は、図5Aに示されている。スケジューラ136は、リソースを予約し、頂点シェーダプログラムを実行する頂点シェーダウェーブフロントを起動する。次に、スケジューラ136は、未処理の頂点シェーダウェーブフロント510の「完了」信号を待機する。スケジューラ136は、「完了」信号を受信すると、ハルシェーダウェーブフロント又はジオメトリシェーダウェーブフロント512に関するリソースを予約して、これらを起動し、ハルシェーダプログラム又はジオメトリシェーダプログラム508を実行する。上述したように、リソースは、レジスタ、メモリ、ウェーブフロントの実行を追跡するための追跡リソース、及び、他のリソースを含む。
【0042】
図5Bは、複合シェーダステージを示している。ドライバ122は、これらの複合されたシェーダステージに対して、(例えば、アプリケーション126から)頂点シェーダコード502とハルシェーダコード又はジオメトリシェーダコード504とを受信し、これらのコードの異なる部分を、単一の複合頂点及びハル又はジオメトリシェーダプログラム530にコンパイルする。ハルシェーダコード又はジオメトリシェーダコード504は、テッセレーションが無効であるがジオメトリシェーディングが有効であるグラフィックス処理パイプライン134の構成に関するジオメトリシェーダコード(図4A)、又は、テッセレーションが無効であるグラフィックス処理パイプライン134の構成に関するハルシェーダコード(図4B)の何れかを表している。
【0043】
ドライバ122は、シェーダステージを複合するために、頂点シェーダコード502とハルシェーダコード又はジオメトリシェーダコード504とをコンパイルして、コンパイル済シェーダプログラムを生成し、コンパイル済シェーダプログラムを「ステッチ(stitches)」する。2つのシェーダプログラムをステッチすることは、2つのシェーダプログラムを連結し、複合を適切に変更することを意味する。
【0044】
連結されたシェーダプログラムを変更する1つの方法は、シェーダプログラムに対して定義された入力及び出力に関する。より具体的には、各シェーダプログラムは、シェーダプログラムへの入力及び出力を定義する。これらの定義された入力及び出力は、APD116へのヒントとして機能する。ウェーブフロントがシェーダプログラムの実行を開始する場合、APD116は、入力として示された値がシェーダプログラムによって指定された位置(例えば、レジスタ)に配置されることを確実にする。ウェーブフロントが実行を完了すると、APD116は、出力を記憶するように示された位置(例えば、レジスタ)からデータを取り出す。APD116は、このデータを、出力データを使用する後続のシェーダステージにおけるシェーダプログラムのために、他の位置(例えば、レジスタ)にコピーすることができる。例えば、図3に示すグラフィックス処理パイプライン134の場合、APD116は、シェードされた頂点を、頂点シェーダステージ304で実行される頂点シェーダプログラムの出力として指定された位置から、ハルシェーダステージ306で実行されるハルシェーダプログラムの入力として指定された位置にコピーする。
【0045】
頂点シェーダコード502は、出力を定義し、ハルシェーダコード又はジオメトリシェーダコード504は、入力を定義する。しかしながら、複合頂点及びハル又はジオメトリシェーダプログラム530は、2つの別々のシェーダプログラムではなく単一のシェーダプログラムであるため、頂点シェーダコード502の定義された出力と、ハルシェーダコード又はジオメトリシェーダコード504の定義された入力とは、APD116によって明示的に「扱われる」必要がない。より具体的には、これらの定義された入力及び出力は、グラフィックス処理パイプライン134の異なるステージで実行されているシェーダプログラム間でデータを転送する方法に関するAPD116へのヒントであるため、複合頂点及びハル又はジオメトリシェーダプログラム530において必要とされない。したがって、ドライバ122は、複合頂点及びハル又はジオメトリシェーダプログラム530を生成する際に、頂点シェーダコード502の定義された出力と、ハルシェーダコード又はジオメトリシェーダコード504の定義された入力と、を削除する。また、ドライバ122は、入力から読み出すハルシェーダコード又はジオメトリシェーダコード504の命令を、代わりに、頂点シェーダコード502の出力が配置されている位置から読み出すように変更する。例えば、あるレジスタが頂点シェーダコードの出力を記憶するように指示され、あるレジスタがハルシェーダコード又はジオメトリシェーダコードの入力を記憶するように指示された場合、ドライバ122は、ハルシェーダコード又はジオメトリシェーダコードの命令を、ハルシェーダコード又はジオメトリシェーダコードの入力を記憶するように指示されたレジスタから読み出すのではなく、頂点シェーダコードの出力を記憶するように指示されたレジスタから読み出すように変更する。
【0046】
スケジューラ136は、ウェーブフロントを起動してシェーダプログラムを実行するために、これらのウェーブフロントに関するリソースを予約する。リソースは、様々なメモリユニットの一部、レジスタ(ベクトルレジスタ206及びスカラレジスタ208等)、ウェーブフロントを追跡するウェーブフロントブックキーピング204のエントリ、及び、他のリソースを含む。複合頂点及びハル又はジオメトリシェーダプログラム530用に予約されたリソースは、いくつかの点で、独立した頂点シェーダプログラムとハルシェーダプログラム又はジオメトリシェーダプログラムとのために予約されたリソースと異なる。実際に起動するウェーブフロントの数は異なる。独立した頂点シェーダのために起動するウェーブフロントの数は、シェードされる頂点610の数に依存する。独立したハルシェーダ又はジオメトリシェーダのために起動するウェーブフロントの数は、シェードされるパッチ(ハル)又はプリミティブ(ジオメトリ)の数に依存する。しかしながら、複合頂点及びハル又はジオメトリシェーダプログラム530のために起動するウェーブフロントの数は、独立した頂点シェーダプログラムとハルシェーダプログラム又はジオメトリシェーダプログラムとのために起動するウェーブフロントの総数よりも少なくなる。これは、複合シェーダプログラムが、両方のシェーダプログラムに対する命令を有するためである。したがって、頂点シェーダステージの命令を実行する複合シェーダプログラムの少なくとも一部は、ハルシェーダステージ又はジオメトリシェーダステージの命令も実行することになる。
【0047】
一例では、起動する複合シェーダステージウェーブフロントの数は、頂点シェーダステージで処理される頂点の数に基づいている。より具体的には、起動するワークアイテムの数は、頂点シェーダステージで処理される頂点610の数と等しい(又は、頂点610の数とほぼ等しい)。各ウェーブフロントは、固定数のワークアイテムの命令を実行するので、ウェーブフロントの数は、起動するワークアイテムの数に基づいている。また、ハルシェーダプログラム又はジオメトリシェーダプログラムは、頂点の集合614に対してワークを実行するので、頂点シェーダステージの頂点610を処理するためのワークアイテムの数は、ハルシェーダ又はジオメトリシェーダ動作を行うためのワークアイテムの数よりも多い。さらに、複合シェーダプログラムは、頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージとの両方の命令を含む。したがって、起動する複合シェーダプログラムの少なくとも一部は、頂点シェーダステージと、ハルシェーダステージ又はジオメトリシェーダステージとの両方の命令を実行することになる。このため、起動する複合シェーダステージウェーブフロントの数は、頂点シェーダステージで処理される頂点610の数に基づいており、ハルシェーダステージ又はジオメトリシェーダステージで処理されるパッチ又はプリミティブの数に基づいていない。
【0048】
また、頂点シェーダ命令に使用されるいくつかのレジスタ又はメモリ位置は、ハルシェーダ又はジオメトリシェーダ命令にも再利用される。したがって、頂点シェーダプログラムのウェーブフロントと、ハルシェーダプログラム又はジオメトリシェーダプログラムのウェーブフロントとを独立して実行する場合には、各シェーダプログラムに関するレジスタ及びメモリを予約する必要がある一方で、複合シェーダプログラムは、より少ないメモリ及びレジスタを予約することが可能になる。いくつかの例では、複合頂点及びハル又はジオメトリシェーダプログラム530のために予約されるリソースの量は、特定のリソース毎に、頂点シェーダコード502、又は、ハルシェーダコード若しくはジオメトリシェーダコード504によって必要とされるリソースの数の最大値である。例えば、頂点シェーダコードが4つのレジスタを必要とし、ハルシェーダコード又はジオメトリシェーダコード504が8つのレジスタを必要とする場合、スケジューラ136は、8つのレジスタを予約する。頂点シェーダコードが、ローカルデータストアメモリ212に100バイト必要とし、ハルシェーダコード又はジオメトリシェーダコードが、ローカルデータストアメモリ212に200バイト必要とする場合、スケジューラ136は、200バイトを予約する。また、ステージ毎のデータが実行ユニットに対してローカルに維持されるので、複合シェーダステージを使用すると、レイテンシを短縮することが可能になる。したがって、待ち時間は、あるステージのデータを第1ステージの外付けメモリユニットに送信し、次いで、当該データを第2ステージで読み戻すことに関連するレイテンシを短縮する。
【0049】
図6は、一例による、シェーダステージ間の境界におけるワークロードの変化に適応するために、頂点シェーダステージとハルシェーダステージ又はジオメトリシェーダステージとの複合に関するウェーブフロントを有効又は無効にするための動作を示す図である。より具体的には、図6は、図4Aの構成に関する頂点シェーダプログラムとジオメトリシェーダプログラムとの複合、又は、図4Bの構成に関する頂点シェーダプログラムとハルシェーダプログラムとの複合の何れかを実行する、複合頂点及びハル又はジオメトリシェーダウェーブフロント532(複合シェーダプログラムは、V+H/G530として示されている)の数を示している。複合シェーダプログラム530は、頂点シェーダ部606と、ハルシェーダ又はジオメトリシェーダ部608と、を含む。頂点シェーダ部606は、入力として頂点510を受け入れ、シェードされた頂点612をハル/ジオメトリシェーダ部608に出力する。ハル/ジオメトリシェーダ部608は、シェードされた頂点を入力制御点614として受け入れ、これに応じて出力制御点616を出力する。シェードされた出力頂点612は、出力パッチを生成する処理のためにまとめられているので、ハル/ジオメトリシェーダ部608のウェーブフロントの数は、頂点シェーダ部606によってシェードされる頂点614の数よりも少なくなることに留意されたい。
【0050】
この変化に適応するために、いくつかの複合頂点及びハル又はジオメトリシェーダウェーブフロント532が、頂点シェーダステージでシェードされる識別された頂点を処理するために起動する。複合シェーダウェーブフロント532は、実行中に変化する実行フットプリント(execution footprint)を有するように構成されている。「実行フットプリントの変化」は、ハルシェーダ又はジオメトリシェーダ部608と比較して、異なる数のウェーブフロント532が頂点シェーダ部506に対して実行することを意味する。より具体的には、頂点シェーダプログラムは、個々の頂点に対して頂点シェーダ動作を行う。異なるワークアイテムに対応する頂点シェーダプログラムの複数のインスタンスが、プログラマブル処理ユニット202において並列に実行されるが、個々のワークアイテムは、データの単一の頂点のみに対して独立して動作し、当該データの頂点に指定された変換及び他の動作を実行する。
【0051】
しかしながら、ハルシェーダプログラム又はジオメトリシェーダプログラムは、データの複数の頂点(例えば、ハルシェーダの場合には入力制御点の集合であり、ジオメトリシェーダの場合には頂点の集合)に対して動作する。より具体的には、各ワークアイテムは、複数の頂点を入力制御点として受け入れ、パッチを複数の出力制御点として出力する。ハルシェーダプログラム及びジオメトリシェーダプログラムが複数の頂点で動作するので、ハルシェーダ及びジオメトリシェーダ動作を行うためのワークアイテムの総数は、概して、頂点シェーダ動作を行うためのワークアイテムの数よりも少ない。
【0052】
頂点シェーダのワークアイテムと、ハルシェーダ又はジオメトリシェーダのワークアイテムとの間の比が異なるので、複合シェーダプログラムを実行するために起動するウェーブフロント532の殆どは、実際にはハルシェーダ又はジオメトリシェーダ部に必要とされない。したがって、不要なウェーブフロントは、頂点シェーダ部606を実行した後にスリープ又は終了される。ウェーブフロント532をスリープの状態にすることは、ウェーブフロント532の追跡を継続すること、ウェーブフロント532の状態をメモリに記憶すること等を意味するが、何れかのSIMDユニット138に実行されるスリープ中のウェーブフロント532をスケジュールすることを意味していない。ウェーブフロント532を終了することは、ウェーブフロント532の実行を終了することと、例えばウェーブフロントブックキーピング204に記憶され得る、終了したウェーブフロント532に関する追跡データを破棄することと、を意味する。
【0053】
図6において、図の左側は、頂点シェーダ部606を実行する複合ウェーブフロント532を示し、図の右側は、ハルシェーダ又はジオメトリシェーダ部608を実行する複合ウェーブフロント532を示している(非アクティブ部分が点線で示されている)。図の右側は、ハルシェーダ又はジオメトリシェーダ部508を実行する複合ウェーブフロント532を示しており、非アクティブウェーブフロント532及びシェーダプログラムの一部が点線で示されている。頂点シェーダ部506がウェーブフロント532によって実行されると、APD116は、ハルシェーダ又はジオメトリシェーダ部608を実行しない多くのウェーブフロント532を無効にする。図6の例では、ウェーブフロント532(1)は、ハルシェーダ又はジオメトリシェーダ部608を実行し、ウェーブフロント532(2)~532(N)は、無効にされている。しかしながら、他の例では、ハルシェーダ又はジオメトリシェーダ部608の実行のために、異なる数のウェーブフロントを有効及び無効にすることができる。
【0054】
無効ではない各ウェーブフロント532は、頂点シェーダ部606を実行する複数のウェーブフロント532によって生成された、シェードされた頂点を(入力制御点614として)集める。この「集めること」は、ドライバ122によって複合シェーダプログラム530に挿入された特定の命令によって実現することができる。より具体的には、ドライバ122は、頂点シェーダ部606の複数のウェーブフロント532に指定されるように、変更された頂点の位置から読み出す命令を挿入することができる。
【0055】
複合シェーダプログラムのハルシェーダプログラム又はジオメトリシェーダプログラム608が、頂点シェーダ部606からの全ての入力制御点614を有することを確実にするために、ドライバ122は、複合頂点及びハル又はジオメトリシェーダプログラム530を生成する場合に、頂点シェーダ部606と、ハルシェーダ又はジオメトリシェーダ部608と、の間にバリア命令を挿入する。バリア命令は、ハルシェーダ又はジオメトリシェーダ部608のデータを生成するウェーブフロントが頂点シェーダ部606の実行を終了するまで、ハルシェーダ又はジオメトリシェーダ部608の処理を実行するのを待機させる。
【0056】
図6は、複合シェーダプログラム530の頂点からハル又はジオメトリ部までの遷移と、対応するウェーブフロントを無効にすることと、を示す。しかしながら、複合頂点及びハル又はジオメトリシェーダプログラム530は、様々なウェーブフロントをスリープ及び開始させる多くの遷移を含み得ることを理解されたい。
【0057】
別の例では、複合頂点及びハル又はジオメトリシェーダプログラム530内のワークロードの変化は、ウェーブフロント内のワークアイテムを有効又は無効にすることによって適応される。より具体的には、各ウェーブフロントが、頂点のセットにおいてワークを実行し、次に、同じウェーブフロントが、プリミティブのセットにおいてワークを実行する。各ワークアイテムは、頂点動作については単一の頂点で、プリミティブ動作については単一のプリミティブでワークするので、概して、プリミティブ処理に関するワークアイテムの数は、頂点処理に関するワークアイテムの数よりも少なくなる。この差に適応するために、ウェーブフロントは、不要なワークアイテムを無効にし、残りのワークアイテムがプリミティブ動作を行う。
【0058】
図7は、一例による、頂点シェーダステージとハルステージ又はジオメトリシェーダステージとの複合に関する複合頂点及びハル又はジオメトリシェーダプログラムを実行する方法700のフロー図である。図1図6に関して示されたシステムについて説明するが、技術的に実行可能な順序で本方法を行うように構成されたる任意のシステムが本開示の範囲に含まれることを理解されたい。
【0059】
示すように、方法700がステップ702で開始し、APD116は、複合頂点及びハル又はジオメトリシェーダステージに関する複合シェーダプログラムを取得する。複合シェーダプログラムは、例えば、アプリケーション126から受信した頂点シェーダコードと、ハルシェーダコード又はジオメトリシェーダコードと、に基づいて、ドライバ122によって生成することができる。より具体的には、ドライバ122は、頂点シェーダコードと、ハルシェーダコード又はジオメトリシェーダコードとをコンパイルして、頂点及びハル又はジオメトリシェーダのコンパイルされた命令を生成し、頂点シェーダ命令と、ハルシェーダ命令又はジオメトリシェーダ命令と、を単一の複合シェーダプログラムに複合する。ドライバ122は、頂点シェーダコードの指定された出力と、ハルシェーダコード又はジオメトリシェーダコードの指定された入力等の個々のシェーダプログラムの態様を変更することができる。
【0060】
ステップ704において、APD116は、複合シェーダプログラムを実行するためにリソースを予約する。予約されたリソースは、レジスタ及びローカルデータストアメモリ212内のメモリ等のメモリと、ウェーブフロントの実行を追跡するためのウェーブフロントブックキーピング204のエントリと、他のリソースと、を含む。複合シェーダプログラムのために予約されたリソースの数は、頂点シェーダプログラム、及び、ハルシェーダプログラム又はジオメトリシェーダプログラムの各々のために予約されたリソースの数よりも少ない場合がある。これは、いくつかのリソース(例えば、レジスタ、メモリ)は、複合シェーダプログラムの頂点シェーダ部から複合シェーダプログラムのハルシェーダ又はジオメトリシェーダ部まで再利用することができるからである。
【0061】
ステップ706において、APD116は、複合シェーダプログラムを実行するために、ウェーブフロントを生成及び起動する。各ウェーブフロントは、頂点シェーダコードと、ハルシェーダコード又はジオメトリシェーダコードと、の両方に基づく命令を含む複合シェーダプログラムを実行する。起動するウェーブフロントの数は、頂点シェーダコードを実行するウェーブフロントの数と、ハルシェーダコード又はジオメトリシェーダコードを実行するウェーブフロントの数と、のうち大きい方の数に基づいている。通常、頂点シェーダコードを実行するために使用されるウェーブフロントの数が多くなるので、生成されたウェーブフロントの数は、複合シェーダプログラムの頂点シェーダ部で処理される頂点の数に依存する。
【0062】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行する方法が提供される。この方法は、複合シェーダステージの複合シェーダプログラムを取り出すことと、複合シェーダプログラムを実行するために複数のウェーブフロントに関するリソースを予約することと、複合シェーダプログラムを実行するために複数のウェーブフロントを生成することと、を含む。複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む。
【0063】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するアクセラレーテッド処理デバイス(APD)が提供される。APDは、レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、スケジューラと、を含む。スケジューラは、複合シェーダステージの複合シェーダプログラムを取り出し、複数のシェーダエンジンにおいて複合シェーダプログラムを実行するために、複数のウェーブフロントに関するリソースを予約し、複数のシェーダエンジンにおいて複合シェーダプログラムを実行するために、複数のウェーブフロントを生成するように構成されている。複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む。
【0064】
グラフィックス処理パイプラインの複合シェーダステージのシェーダプログラムを実行するコンピュータシステムが提供される。コンピュータシステムは、アクセラレーテッド処理デバイス(APD)を制御するためのデバイスドライバを実行するプロセッサと、APDと、を含む。APDは、レジスタとローカルデータストアメモリとを含む複数のシェーダエンジンと、スケジューラと、を含む。スケジューラは、複合シェーダステージの複合シェーダプログラムをデバイスドライバから受信し、複合シェーダプログラムを複数のシェーダエンジンで実行するために、複数のウェーブフロントに関するリソースを予約し、複数のシェーダエンジンにおいて複合シェーダプログラムを実行するために、複数のウェーブフロントを生成するように構成されている。複合シェーダステージは、頂点シェーダステージとハルシェーダステージとの複合と、頂点シェーダステージとジオメトリシェーダステージとの複合と、のうち一方を含む。
【0065】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の複合で上記に説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な複合で使用されてもよい。
【0066】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【0067】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。
図1
図2
図3
図4A
図4B
図5A
図5B
図6
図7