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