JP2019533240A - プリミティブシェーダ - Google Patents

プリミティブシェーダ Download PDF

Info

Publication number
JP2019533240A
JP2019533240A JP2019515889A JP2019515889A JP2019533240A JP 2019533240 A JP2019533240 A JP 2019533240A JP 2019515889 A JP2019515889 A JP 2019515889A JP 2019515889 A JP2019515889 A JP 2019515889A JP 2019533240 A JP2019533240 A JP 2019533240A
Authority
JP
Japan
Prior art keywords
shader
primitive
vertex
primitives
screen
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019515889A
Other languages
English (en)
Other versions
JP7025415B2 (ja
Inventor
マーティン トッド
マーティン トッド
ピー. ニジャシャー マンゲッシュ
ピー. ニジャシャー マンゲッシュ
ダブリュー. ラムセイ ランディー
ダブリュー. ラムセイ ランディー
マントル マイケル
マントル マイケル
ルフェーブル ローラン
ルフェーブル ローラン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ATI Technologies ULC
Advanced Micro Devices Inc
Original Assignee
ATI Technologies ULC
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ATI Technologies ULC, Advanced Micro Devices Inc filed Critical ATI Technologies ULC
Publication of JP2019533240A publication Critical patent/JP2019533240A/ja
Application granted granted Critical
Publication of JP7025415B2 publication Critical patent/JP7025415B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

改良されたグラフィックス処理パイプラインが開示される。より具体的には、新たなプリミティブシェーダステージは、テッセレーションが有効である場合に頂点シェーダステージ又はドメインシェーダステージのタスクと、ジオメトリシェーダ(有効である場合)のタスクと、固定機能プリミティブアセンブラのタスクと、を実行する。プリミティブシェーダステージは、ユーザが提供した頂点又はドメインシェーダコード、ジオメトリシェーダコード、及び、プリミティブアセンブラの機能を実行するコードから、ドライバによってコンパイルされる。固定機能プリミティブアセンブラのタスクを、プログラマブルハードウェアで実行されるプリミティブシェーダに移動することによって、固定機能クロスバーの削除、一般的な計算モードでは使用できない専用パラメータ及び位置バッファの削除等のように、多くの利益がある。【選択図】図5

Description

(関連出願の相互参照)
本願は、2016年9月22日に出願された米国仮特許出願第62/398,211号と、2017年1月25日に出願された米国特許出願第15/415,823号と、2017年2月7日に出願された欧州特許出願第17155075.9号の利益を主張し、これらの内容は、本明細書に十分に記載されているかのように、言及したことによって本明細書に組み込まれる。
開示された実施形態は、概して、グラフィックス処理パイプラインに関し、具体的には、プリミティブシェーダに関する。
3次元グラフィックス処理パイプラインは、ホスト(コンピューティングシステムの中央処理装置等)からコマンドを受信し、当該コマンドを処理してディスプレイデバイスに表示するためのピクセルを生成する。グラフィックス処理パイプラインは、頂点位置及び属性の変換、ピクセルカラーの計算等の個々のタスクを実行するいくつかのステージを含む。グラフィックス処理パイプラインは、常に開発及び改良されている。
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
1つ以上の開示される実施形態を実装することができる例示的なデバイスのブロック図である。 さらなる詳細を示す図1のデバイスのブロック図である。 図2に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。 図2に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。 図2に示すグラフィックス処理パイプラインのさらなる詳細を示すブロック図である。 一例による、ワールドスペース(world-space)パイプラインにおける柔軟な処理と、ワールドスペースパイプラインからスクリーンスペースパイプラインへの柔軟な送信と、を可能にする、変更されたグラフィックス処理パイプラインを示す図である。 テッセレーションが無効である場合にプリミティブシェーダで実行されるシェーダプログラムの例を示す図である。 テッセレーションが有効である場合にプリミティブシェーダで実行されるシェーダプログラムの例を示す図である。 一例による、グラフィックス処理パイプラインのさらなる詳細を示す図である。 一例による、プリミティブシェーダの機能を実行する方法のフロー図である。
本開示は、改良されたグラフィックス処理パイプラインに関する。より具体的には、新たなプリミティブシェーダステージは、テッセレーションが有効である場合に頂点シェーダステージ又はドメインシェーダステージのタスクと、ジオメトリシェーダ(有効である場合)のタスクと、固定機能プリミティブアセンブラのタスクと、を実行する。プリミティブシェーダステージは、ユーザが提供した頂点又はドメインシェーダコード、ジオメトリシェーダコード、及び、プリミティブアセンブラの機能を実行するコードから、ドライバによってコンパイルされる。固定機能プリミティブアセンブラのタスクを、プログラマブルハードウェアで実行されるプリミティブシェーダに移動することによって、固定機能クロスバーの削除、一般的な計算モードでは使用できない専用パラメータ及び位置バッファの削除等のように、多くの利益がある。
図1は、本開示の1つ以上の態様が実装された例示的なデバイス100のブロック図である。デバイス100には、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等が含まれる。デバイス100は、プロセッサ102と、メモリ104と、ストレージデバイス106と、1つ以上入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、入力ドライバ112及び出力ドライバ114をオプションとして含む。デバイス100は、図1に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等)を含む。
ストレージデバイス106は、固定又は取り外し可能なストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含む。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信するのを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信するのを可能にする。出力ドライバ114は、ディスプレイデバイス118に接続されたアクセラレーテッド処理デバイス(APD)116を含む。APDは、プロセッサ102から計算コマンド(compute commands)及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス118に提供するように構成されている。
APD116は、単一命令複数データ(SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理ユニットを含む。しかしながら、APD116によって実行されるものとして説明した機能は、SIMDパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
図2は、APD116でのタスク処理の実行に関連するさらなる詳細を示すデバイス100のブロック図である。プロセッサ102は、プロセッサ102による実行のための1つ以上の制御論理モジュールをシステムメモリ104内に保持している。制御論理モジュールは、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を含み、図示されていない他のモジュールをオプションで含むことができる。制御論議モジュールは、プロセッサ102及びAPD116の様々な態様の動作を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ122は、例えば、APD116の様々な機能にアクセスするためにプロセッサ102上で実行中のソフトウェア(例えば、アプリケーション126)へのアプリケーションプログラミングインタフェース(API)を提供することによって、APD116の動作を制御する。また、ドライバ122は、APD116の処理コンポーネント(例えば、以下でさらに詳細に説明するSIMDユニット138等)による実行のために、シェーダコードをシェーダプログラムにコンパイルするジャストインタイムコンパイラを含む。
APD116は、例えばグラフィックス処理及び非グラフィックス処理等のように並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。APD116は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ102から受信したコマンドに基づいて画像をディスプレイデバイス118にレンダリングするために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、グラフィックス処理に直接関連しない計算処理動作(例えば、ビデオ、物理的シミュレーション、計算流体力学若しくは他のタスクに関連する動作等)、又は、グラフィックス処理パイプラインの「通常の」情報フローの一部ではない計算処理動作を実行する。
APD116は、SIMDパラダイムに従って、プロセッサ102の要求に応じて並列に動作を実行するように構成された1つ以上のSIMDユニット138を有するシェーダエンジン132(本明細書ではまとめて「プログラマブル処理ユニット202」と呼ばれる)を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるというものである。一例では、各SIMDユニット138は、16個のレーンを含んでおり、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行するのに必要とされない場合、レーンを予測によってスイッチオフにすることができる。予測を利用して、分岐した制御フローによってプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
シェーダエンジン132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並行して実行されるシェーダプログラムの単一のインスタンシエイション(instantiation)を表している。ワークアイテムは、単一のSIMDユニット138における「ウェーブフロント(wavefront)」として同時に実行することができる。複数のウェーブフロントが1つの「ワークグループ」に含まれてもよく、このワークグループは、同じプログラムを実行するように指定されたワークアイテムの集合を含む。ワークグループを構成するウェーブフロントの各々を実行することによって、当該ワークグループを実行することができる。ウェーブフロントは、単一のSIMDユニット138において順次実行されてもよいし、異なるSIMDユニット138において部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、シェーダプログラムの並列実行のインスタンスとして考えることができ、各ウェーブフロントは、SIMDパラダイムに従って、単一のSIMDユニット138で同時に実行する複数のワークアイテム(例えば、1つの命令制御ユニットが、複数のデータを用いて同じ命令ストリームを実行する)を含む。スケジューラ136は、異なるシェーダエンジン132及びSIMDユニット138上で様々なウェーブフロントをスケジュールすることに関する動作を実行するように、さらには、APD116上で様々なタスクを調整するための他の動作を実行するように構成されている。
シェーダエンジン132によって与えられる並列性は、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング動作及び他のグラフィックス動作等のグラフィックス関連動作に適している。グラフィックス処理コマンドをプロセッサ102から受信するグラフィックス処理パイプライン134は、並列に実行するように計算タスクをシェーダエンジン132に提供する。
また、シェーダエンジン132は、グラフィックスに関連しない計算タスク、又は、グラフィックス処理パイプライン134の「通常」の動作の一部として実行されない計算タスク(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補うために実行されるカスタム動作)を実行するために使用される。プロセッサ102上で実行されているアプリケーション126又は他のソフトウェアは、このような計算タスクを定義するプログラム(多くの場合、ドライバ122によってコンパイルされ得る「計算シェーダプログラム」と呼ばれる)を、実行のためにAPD116に送信する。
図3Aは、図2に示すグラフィックス処理パイプライン134のさらなる詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々が特定の機能を実行するステージを含む。ステージは、グラフィックス処理パイプライン134の機能の一部を表している。各ステージは、プログラマブル処理ユニット202において実行中のシェーダプログラムとして部分的若しくは完全に実装され、又は、プログラマブル処理ユニット202の外部の固定機能の非プログラマブルハードウェアとして部分的若しくは完全に実装される。
入力アセンブラステージ302は、ユーザ充填バッファ(例えば、アプリケーション126等のようにプロセッサ102によって実行されたソフトウェアの要求で充填されたバッファ)からプリミティブデータを読み出し、このデータをパイプラインの残りの部分で使用するためにプリミティブにアセンブルする。本明細書で使用される場合、「ユーザ」という用語は、レンダリングするためのシェーダコード及び3次元オブジェクトをグラフィックス処理パイプライン400に提供するアプリケーション126又は他のエンティティを指す。「ユーザ」という用語は、APD116によって実行されるアクティビティを区別するために使用される。入力アセンブラステージ302は、ユーザ充填バッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、パイプラインの残りの部分によって使用されるように、アセンブルされたプリミティブをフォーマットする。
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、例えば、変換、スキニング、モーフィング及び頂点毎のライティング等のように、様々な頂点毎の処理を実行する。変換処理は、頂点の座標を変換するための様々な処理を含むことができる。このような処理には、モデリング変換、ビューイング変換、投影変換、透視除算(perspective division)及びビューポート変換等のうち1つ以上が含まれてもよい。本明細書では、このような変換は、変換が実行される頂点の座標又は「位置」を変更するものと想定される。座標以外の属性を変更する頂点シェーダステージ304の他の処理は、位置以外の属性を変更するものと想定される。また、位置以外の属性は、本明細書において「パラメータ」と呼ばれる。
頂点シェーダステージ304は、1つ以上のシェーダエンジン132において実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、コンピュータプログラマによって事前に書き込まれたプログラムとして、プロセッサ102によって提供される。ドライバ122は、かかるコンピュータプログラムをコンパイルして、シェーダエンジン132での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。
ハルシェーダステージ306、テッセレータステージ308及びドメインシェーダステージ310は協働して、プリミティブを細分することによって単純なプリミティブをより複雑なプリミティブに変換するテッセレーションを実施する。ハルシェーダステージ306は、入力されたプリミティブに基づいて、テッセレーションに関するパッチを生成する。テッセレータステージ308は、パッチに関するサンプルのセット(重心座標で指定された頂点を含むことができる)を生成する。ドメインシェーダステージ310は、(例えば、重心座標をワールドスペース座標に変換することによって)パッチに関するサンプルに対応する頂点に関する頂点位置を計算する。ハルシェーダステージ306及びドメインシェーダステージ310は、プログラマブル処理ユニット202において実行されるシェーダプログラムとして実装することができる。
ジオメトリシェーダステージ312は、選択的に有効又は無効にすることができ、プリミティブ毎に動作を実行する。ジオメトリシェーダプログラムは、通常、プリミティブ全体(例えば、頂点の集合)を入力として受信し、ジオメトリシェーダプログラムの命令によって指定されるように、これらのプリミティブ全体に対して動作を行う。様々な異なるタイプの処理(例えば、ポイントスプリント拡張、動的パーティクルシステム処理、fur−finの生成、シャドウボリュームの生成、単一パスでのキューブマップへのレンダリング、プリミティブ単位のマテリアルスワッピング、及び、プリミティブ単位のマテリアルセットアップが含まれる)をジオメトリシェーダステージ312によって実行することができる。ジオメトリシェーダステージ312に関する動作は、プログラマブル処理ユニット202において実行されるシェーダプログラムによって実行されてもよい。
ラスタライザステージ314は、上流で生成された単純なプリミティブ(ワールドスペースパイプライン330の終わりでは「三角形」とも呼ばれる)を受信してラスタライズする。ラスタライズは、何れのスクリーンピクセル(又は、サブピクセルサンプル)が特定のプリミティブによってカバーされるかを決定することから構成されている。ラスタライズは、固定機能のハードウェアによって実行されてもよいし、プログラマブル処理ユニット202において実行されるシェーダプログラムによって実行されてもよい。
ピクセルシェーダステージ316は、上流で生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルに関する出力値(例えば、カラー値)を計算する。ピクセルシェーダステージ316は、テクスチャメモリからテクスチャを適用してもよい。ピクセルシェーダステージ316に関する処理は、プログラマブル処理ユニット202において実行されるシェーダプログラムによって実行される。
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受信し、これらの出力(ディスプレイデバイス118への出力のためにフレームバッファに書き込まれる)を統合して、zテスト及びアルファブレンディング等の処理を行うことによって、スクリーンピクセルに関する最終カラーを決定する。
頂点シェーダステージ304、ハルシェーダステージ306、テッセレータステージ308、ドメインシェーダステージ310及びジオメトリシェーダステージ312は、ワールドスペースパイプライン330の一部であり、ワールドスペースパイプライン330は、スクリーンスペースパイプライン350によって処理される三角形及び当該三角形の様々な属性を生成する。ラスタライザステージ314及びピクセルシェーダステージ316を含むスクリーンスペースパイプライン350は、ワールドスペースパイプライン330から受信した三角形によって何れのスクリーンピクセルがカバーされているのかを判別し、このスクリーンピクセルに何れのカラーを書き込むべきかを決定し、(出力マージャステージ318及び図示していない他のコンポーネントを介して)表示するために、カラーをスクリーンに出力する。
上述したように、APD116は、超並列コンピューティングデバイスである。3次元オブジェクトのレンダリングに関連する処理を並列化するために多くの技術が使用されている。このような技術の1つは、それぞれ独立したワークを並行して処理する複数のワールドスペースパイプライン330と、複数のスクリーンスペースパイプライン350と、を有する。このような技術は、図3B及び図3Cに関連して説明される。
図3Bは、スクリーンスペース320(スクリーンスペース320は、ディスプレイ(例えば、モニタに出力されるピクセルカラーを記憶するフレームバッファ等)に出力するために、又は、他の目的に(例えば、テクスチャとして)使用され得る表面を生成するために、ピクセルシェーダステージ316によって生成されたピクセルカラーが書き込まれる領域を表す)と、当該スクリーンスペース320を複数のスクリーン細分部324(1)に分割したものと、を示している。図3Cは、複数のワールドスペースパイプライン330と、複数のスクリーンスペースパイプライン350と、ワールドスペースパイプライン330及びスクリーンスペースパイプライン350の並列動作を容易にすることに関連する様々な他のコンポーネントと、を示している。
一時的に図3Cを参照すると、複数のワールドスペースパイプライン330が示されている。入力アセンブラステージ302は、異なるワールドスペースパイプライン330の間で3次元要素(例えば、頂点、テッセレーションデータ、プリミティブ等)を分配する。一例では、入力アセンブラステージ302は、頂点の第1セットを第1ワールドスペースパイプライン330に提供し、頂点の第2セットを第2ワールドスペースパイプライン330に提供する等である。ワールドスペースパイプライン330は、頂点を処理し、処理された頂点を、当該ワールドスペースパイプライン330に関連するプリミティブアセンブラ340に渡す。各プリミティブアセンブラ340は、特定のワールドスペースパイプライン330に割り当てられる。また、ワールドスペースパイプライン330は、処理された頂点位置を位置バッファ346に渡し、位置以外のパラメータ(例えば、照明データ、テクスチャ座標等)をパラメータバッファ348に渡す。位置バッファ346及びパラメータバッファ348は、頂点位置及び位置以外の頂点パラメータの各々を記憶するために、ワールドスペースパイプライン330によって使用される専用のメモリスペースである。これらのバッファは、スクリーンスペースパイプライン350によって使用される個々のデータを記憶する。
プリミティブアセンブラ340(プログラマブル処理ユニット202で実行されるシェーダプログラムとしてではなく、固定機能ハードウェアで実施される)は、頂点を、関連付するワールドスペースパイプライン330からプリミティブに収集し、カリング動作(例えば、バックフェースカリング、錐台カリング、ビューカリング等)を実行し、特定のプリミティブが属するスクリーンスペース細分部324(図3B)を識別し、スクリーンスペースパイプライン350への分配のために、プリミティブと、プリミティブが何れのスクリーンスペース細分部324に属するかの決定と、をクロスバー342に渡す。
クロスバー342は、プリミティブアセンブラ340からプリミティブを受信し、プリミティブを、プリミティブに関してプリミティブアセンブラ340によって識別されたスクリーン細分部324に関連する1つ以上のスクリーンスペースパイプライン350に渡す。また、クロスバー342は、プログラマブル処理ユニット202で実行されるシェーダプログラムとは対照的に、固定機能ハードウェアとして実施される。クロスバー342のハードウェアは複雑であり、多くのダイ領域を消費する。これは、プリミティブアセンブラ340によって出力されるプリミティブ記述が一般的に大きいからであり、また、クロスバー342は、プリミティブを、任意のワールドスペースパイプライン330から1つ以上の任意のスクリーンスペースパイプライン350に渡すことができるからであり、これにより、多数の物理的な電気的接続がもたらされる。スクリーンスペースパイプライン350は、クロスバー342から受信したプリミティブを処理し、実質的に図3Aに関連して上述したように、ピクセルのカラーを出力する。
図3Bに戻って参照すると、各スクリーンスペースパイプライン350は、スクリーンスペース320内のスクリーン細分部324の特定のセットに割り当てられる。図3Bでは、各スクリーン細分部324は、特定のスクリーンスペースパイプライン350の特定のラスタライザステージ314(各ラスタライザステージ314が特定のスクリーンスペースパイプライン350内にあるので、特定のスクリーンスペースパイプライン350)に関連するように示されている。例えば、スクリーン細分部324(1)、スクリーン細分部324(3)、スクリーン細分部324(5)、スクリーン細分部324(13)、スクリーン細分部324(15)及びスクリーン細分部324(17)の全ては、ラスタライザ1に関連付けられており、これにより、クロスバー342は、これらのスクリーン細分部324をカバーする三角形を、ラスタライザ1に関連するスクリーンスペースパイプライン350に送信する。他のスクリーン細分部324は、異なるラスタライザ(2、3及び4)に関連付けられており、これらのスクリーン細分部324をカバーするプリミティブは、関連するラスタライザに送信される。
図3Bには、三角形322が何れのスクリーン細分部324をカバーするのかに基づいて、これらの三角形322が異なるスクリーンスペースパイプライン350に分配される方法を示すために、いくつかの例示的な三角形322が示されている。例示的な三角形322(1)は、スクリーン細分部324(1)、スクリーン細分部324(2)、スクリーン細分部324(7)及びスクリーン細分部324(8)をカバーする。したがって、三角形322(1)は、4つのラスタライザの全て(したがって、4つのスクリーンスペースパイプライン350の全て)に送信されることになる。三角形322(2)は、スクリーン細分部324(3)及びスクリーン細分部324(9)をカバーしており、これにより、ラスタライザ1及びラスタライザ3に送信されることになる。三角形322(3)は、スクリーン細分部324(14)のみをカバーしており、これにより、ラスタライザ2に送信されることになる。三角形322(4)は、4つのラスタライザの全てに関連するスクリーン細分部324をカバーしており、これにより、全てのラスタライザに送信されることになる。三角形322(5)は、スクリーン細分部324(15)、スクリーン細分部324(16)及びスクリーン細分部324(22)をカバーしており、これにより、ラスタライザ1,2,4に送信されることになるが、ラスタライザ3には送信されない。
図3Cに戻って参照すると、固定機能プリミティブアセンブラ340及びクロスバー342の実装と、専用の位置バッファ346及び専用のパラメータバッファ348と、に関連するいくつかの性能上の問題がある。一例では、この構成は、クロスバー342から入ってくるプリミティブをバッファリングするバッファ345内の限られたスペースによって、ボトルネックとなる可能性がある。より具体的には、プリミティブは、いわゆる「API」順序(アプリケーションプログラミングインタフェース順序)でレンダリングされる。API順序は、オブジェクトがレンダリングされるのを要求したアプリケーション126によって要求された順序でオブジェクトがレンダリングされることを要求する。この順序付けの制約は、各スクリーンスペースパイプライン350が、各々の動作をAPI順序で実行することを意味する(いくつかの動作は、アウトオブオーダで発生してもよいが、オブジェクトが指定された順序でレンダリングされるように要求したアプリケーション126には見える必要がある)。しかしながら、(図3Bに関連して説明したスクリーン細分部324のカバレッジ技術を介して)複数のスクリーンスペースパイプライン350に送信される多くの三角形がある場合、及び、1つの(又は、それ以上の)スクリーンスペースパイプライン350が他のものよりも「好ましい」場合に、ボトルネックをもたらす可能性がある。より具体的には、クロスバー342がプリミティブをスクリーンスペースパイプライン350に送信した後に、バッファ345は、当該スクリーンスペースパイプラインのラスタライザステージ314による処理のために、プリミティブを記憶する。バッファ345が満杯になると、クロスバー342は、当該バッファ345を含むスクリーンスペースパイプライン350に対してこれ以上のプリミティブを送信することができない。
1つのスクリーンスペースパイプライン用のバッファ345が満杯であり、他のバッファ345が満杯ではないが、他のスクリーンスペースパイプライン350がこれに関係なく進行できない状況が起こる可能性がある。より具体的には、バッファ345が満杯になると、クロスバー342は、当該バッファ345を有するスクリーンスペースパイプライン350にこれ以上のプリミティブを送信することができない。しかしながら、クロスバー342は、続けて、満杯のバッファ345を有するスクリーンスペースパイプライン350に割り当てられることになる別のプリミティブを処理することができない。したがって、このプリミティブが、満杯のバッファ345に関連するスクリーン細分部324以外のスクリーン細分部324と重なる場合、満杯のバッファ345を有するスクリーンスペースパイプライン350以外のスクリーンスペースパイプライン350が効果的にストールされるが、このスクリーンスペースパイプライン350に関するバッファ345は満杯ではない。このストールは、概して、ワールドスペースパイプライン330からスクリーンスペースパイプライン350への三角形の送信を目的とした専用のメモリ要素の容量が限られているために発生する。
図3Cのアーキテクチャに関する別の問題は、クロスバー342自体が大きく複雑であり、大量のダイ領域を消費することである。また、クロスバー342を4×4のクロスバー342(4入力4出力)よりも大きくすることは、技術的に非常に困難又は実現不可能であり、ワールドスペースパイプライン330及びスクリーンスペースパイプライン350の数が制限されることを意味する。さらなる問題は、カリング動作がプリミティブアセンブラ340で行われるので、例えば頂点の位置以外のパラメータを決定する等のように、頂点シェーダで行われるいくつかの動作が不要になることである。より具体的には、カリングによって、最終的にドロップされる、シェードされた頂点の属性が決定される場合がある。
少なくとも上記の理由に関して、ワールドスペースパイプライン330からスクリーンスペースパイプライン350にデータを送信するための異なる技術を以下に説明する。図4Aは、ワールドスペースパイプラインにおけるより柔軟な処理と、ワールドスペースパイプライン430からスクリーンスペースパイプライン432へのより柔軟な送信と、を可能にする、変更されたグラフィックス処理パイプライン400を示す図である。
グラフィックス処理パイプライン400は、ワールドスペースパイプライン430が変更されていることを除いて、図3Aに示すグラフィックス処理パイプライン134と同様であり、図2のAPD116において使用される。グラフィックス処理パイプライン400のスクリーンスペースパイプライン432は、図3Aのグラフィックス処理パイプライン134のスクリーンスペースパイプライン350とほぼ同じ機能を実行する。ワールドスペースパイプライン430は、サーフェスシェーダ402と、プリミティブシェーダ404と、を含む。テッセレーションが有効になると、サーフェスシェーダ402が有効になる。テッセレーションが有効になると、サーフェスシェーダ402は、頂点シェーダステージ304及びハルシェーダステージ306の機能を実行する。テッセレータステージ308は、依然として固定機能ハードウェアで実施される。テッセレーションが無効になると、サーフェスシェーダ402が無効になる。サーフェスシェーダ402は、並列処理ユニット202で実行されるシェーダプログラムとして部分的又は完全に実施される。
テッセレーションが有効になると、プリミティブシェーダ404は、ドメインシェーダステージ310及びジオメトリシェーダステージ312(ジオメトリシェーダステージ312がアクティブである場合)の機能を実行する。テッセレーションが無効になると、プリミティブシェーダステージ404は、頂点シェーダステージ304の機能を実行する。プリミティブシェーダ404及びサーフェスシェーダ402は、プログラマブル処理ユニット202で実行されるシェーダプログラムとして部分的又は完全に実施される。シェーダプログラムとして実施されないプリミティブシェーダ404及びサーフェスシェーダ402の一部は、固定機能ハードウェアで実施される。
プリミティブシェーダ404は、図3Cのプリミティブアセンブラ340の特定の機能を実行する。具体的には、プリミティブシェーダ404は、プリミティブをアセンブルし、カリングを実行し、プリミティブが何れのスクリーン細分部324に重なるかを判別する。これらの動作は、シェーダステージ及び固定機能ハードウェアの組み合わせではなく、単一のシェーダステージで実行される。プリミティブシェーダ404は、ユーザ提供コードから、及び、ドライバ122又はAPD116に利用可能な他の命令からドライバ122によってコンパイルされた単一のシェーダプログラムタイプとして処理される。
図4Bは、テッセレーションが無効である場合にプリミティブシェーダ404で実行されるシェーダプログラムの例を示す図である。図4Cは、テッセレーションが有効である場合にプリミティブシェーダ404で実行されるシェーダプログラムの例を示す図である。テッセレーション無効プリミティブシェーダ450及びテッセレーション有効プリミティブシェーダ470は、(例えば、システムメモリ104において、又は、APD116等のデバイス100内の他のいくつかのメモリユニットにおいて)ユーザ提供シェーダコードから、及び、ドライバ122に利用可能な他のシェーダコードからドライバ122によって生成されたシェーダプログラムを表す。より具体的には、ドライバ122は、特定のユーザ提供シェーダコードをアプリケーション126又は他のエンティティから取得し、当該ユーザ提供シェーダコードをコンパイルし、コンパイルされたユーザ提供シェーダコードを他のコンパイルされたコードと統合し、テッセレーション無効プリミティブシェーダ450又はテッセレーション有効プリミティブシェーダ470を形成する。
ここで、図4Bを参照すると、テッセレーションが無効である場合、プリミティブシェーダステージ404は、頂点シェーダステージ304の機能と、ジオメトリシェーダが有効である場合にはジオメトリシェーダステージ312の機能と、を実行する。また、テッセレーション無効プリミティブシェーダ450は、プリミティブアセンブラ340の動作を実行するための他の様々なセグメントを含む。テッセレーション無効プリミティブシェーダ450は、頂点セグメントに関する実行マスク452と、頂点フェッチセグメント454と、位置計算セグメント456と、非保留パラメータ計算セグメント458(点線で示すように、オプションである)と、プリミティブセグメントに関する実行マスク460と、ジオメトリシェーダ動作セグメント462と、錐台カリング、バックフェースカリング及び小三角形廃棄セグメント464と、コンパクション及び取得順序セグメント465と、スクリーンスペース分割決定セグメント466と、保留パラメータ計算セグメント468と、を含む。テッセレーション無効プリミティブシェーダ450は、スクリーンスペースパイプライン432によって使用される位置及びパラメータをエクスポートする。
頂点セグメントに関する実行マスク452は、次の実行マスクの変更まで、ウェーブフロントの何れのワークアイテムがシェーダプログラムを実行するのか(そして、何れのワークアイテムが例えば予測によってオフにされるか)を示す実行マスクを設定する。実行マスクは、単一のウェーブフロントを生成して異なるタイプのワークを実行可能にするために使用される。より具体的には、APD116において生成された各ウェーブフロントは、特定のシェーダプログラムを実行するために生成される。テッセレーション無効プリミティブシェーダ450が単一のシェーダプログラムであるため、APD116は、当該シェーダプログラムを実行するためにウェーブフロントを生成する。しかしながら、このシェーダプログラムは、ウェーブフロントの異なる数のワークアイテムを要求するワークを実行する。頂点に関連するワーク(例えば、頂点フェッチセグメント454及び位置計算セグメント456)の場合、各ワークアイテムは、単一の頂点に作用する。プリミティブに関連するワーク(例えば、ジオメトリシェーダ動作セグメント462、錐台カリング、バックフェースカリング及び小三角形廃棄セグメント464、並びに、スクリーンスペース分割決定セグメント466)の場合、各ワークアイテムは、プリミティブに作用する。概して、プリミティブに関連する動作には、頂点に関連する動作よりも少ないワークアイテムが使用される。このため、実行マスクは、テッセレーション無効プリミティブシェーダ450を実行するウェーブフロントのワークタイプが変化した場合に、ウェーブフロントのワークアイテムを無効又は有効にするために使用される。
頂点セグメントに関する実行マスク452は、アクティブなワークアイテムの数を、頂点に関連する動作を実行するのに適切な数に設定する。頂点フェッチセグメント454は、受信したインデックスに基づいて、頂点データをフェッチする。より具体的には、(例えば、入力アセンブラステージ302における)テッセレーション無効プリミティブシェーダ450の前に、頂点データは、頂点データ自体としてではなく、頂点データへのポインタ(インデックス)として扱われる。インデックスは、頂点データに関連する大量のデータを処理せずに、重複した頂点の検出、選択されたプリミティブトポロジに基づく頂点からのプリミティブの識別、及び、他の動作を実行できるようにする、頂点データに対する軽量の「ポインタ」である。しかしながら、ある時点(例えば、頂点の位置変換を実行するとき等)で、実際の頂点データが処理される。この時点で、頂点データは、インデックスに基づいて取得される。頂点フェッチセグメント454は、これらの動作を実行し、インデックスに基づいて頂点データをメモリからフェッチし、頂点データを、テッセレーション無効プリミティブシェーダ450を実行するシェーダエンジン132による処理のためにレジスタにロードする。
位置計算セグメント456は、頂点シェーダステージ304に関するユーザ提供コードから導出され、頂点フェッチセグメント454によってフェッチされた頂点に関するユーザ提供の頂点シェーダコードで指定された位置変換(例えば、モデルビュー変換又は頂点シェーダステージ304に関連する他の変換を含む、モデルスペースからビュースペースへの頂点位置の変換)を実行する。ドライバ122は、位置計算セグメント456を生成するために、ユーザ提供の頂点シェーダコードから位置変換を実行することに関連する命令を抽出する。一例では、ドライバ122は、アプリケーション126によって提供された頂点シェーダコードによって指定された出力に基づいて、位置変換を実行することに関連する命令を識別する。より具体的には、頂点シェーダコードは、何れの出力が、変換された頂点位置に関連付けられているかを識別する。ドライバ122は、これらの出力が依存する命令を、位置計算セグメント456に含まれる命令として識別する。位置計算セグメント456は、テッセレーション無効プリミティブシェーダ450及びスクリーンスペースパイプライン350の他の部分による使用のために、計算された位置をローカルデータストア445にエクスポートする。
非保留パラメータ計算458は、(錐台カリング、バックフェースカリング及び小三角形廃棄セグメント464による)カリング及び小三角形廃棄の後まで保留されない頂点の位置以外の属性に関する計算を含む。これらの計算も、頂点シェーダステージ304に関するユーザ提供コードに基づいている。いくつかのパラメータ計算は、ドライバ122がこの計算を頂点シェーダプログラムから分離することができず、ひいては、カリングの後までこの計算を時間的にシフトすることができないため、保留することができない。ドライバ122は、位置計算セグメント456の頂点位置の変換と同様に、計算が保留されない属性に関連するユーザ提供の頂点シェーダコードによって指定された出力を検査することによって、及び、当該出力が依存する命令を識別することによって、位置以外の属性の計算に関する命令をユーザ提供の頂点シェーダコードから抽出する。
プリミティブセグメントに関する実行マスク460は、プリミティブ毎の動作を実行するワークアイテムの数に基づいて、ウェーブフロントのワークアイテムに関する実行マスクを設定する。プリミティブセグメントに関する実行マスク460は、アクティブなワークアイテムの数を減少又は増加させることができるが、通常、プリミティブ毎に複数の頂点が存在し、ワークアイテムが、頂点処理のために頂点毎に1つ割り当てられ、プリミティブ処理のためにプリミティブ毎に1つ割り当てられるので、アクティブなワークアイテムの数が減少する。ワークアイテムによって実行された頂点動作の結果に依存するプリミティブ処理に関するデータは、SIMDユニット138に利用可能なレジスタを介して、ローカルデータストア445を介して、又は、他のいくつかのメカニズムを介して、プリミティブ動作を実行するウェーブフロントのワークアイテムに利用可能である。ローカルデータストア445は、シェーダエンジン132のSIMDユニット138間で共有されるメモリユニットであり、ユニットシェーダエンジン132の外部のユニットにもアクセス可能である。図3Cの位置バッファ346及びパラメータバッファ348とは異なり、ローカルデータストア445は、頂点位置及び頂点属性に専用ではない。
ジオメトリシェーディングがアクティブである場合、テッセレーション無効プリミティブシェーダ450は、ジオメトリシェーダ動作セグメント462を含む。これらのプリミティブ毎の動作は、ジオメトリシェーダステージ312に関するユーザ提供コードによって指定された動作である。ドライバ122は、このユーザ提供コードを取り出し、当該コードをコンパイルし、これをテッセレーション無効プリミティブシェーダ450に挿入する。
錐台カリング、バックフェースカリング及び小三角形廃棄セグメント464は、プリミティブに対する錐台カリング、バックフェースカリング及び小三角形廃棄を行う。錐台カリングは、「視錐台」又はカメラから見える3次元空間の領域の外側にあるプリミティブを廃棄することを含む。バックフェースカリングは、背面(バックフェース)がカメラに面しているプリミティブを廃棄することを含む。小三角形廃棄は、(例えば、小さい三角形がスクリーンピクセルをカバーしていない等の理由によって)小さすぎて見えない三角形を廃棄することを含む。図3Cでは、固定機能プリミティブアセンブラ340がこれらの動作を実行するが、図4Aのプリミティブシェーダ404の場合、これらの動作は、プログラマブル処理ユニット202で実行される。
コンパクション及び取得順序セグメント465は、カリングされたデータを、スクリーンスペースパイプライン432による効率的な処理に適したフォーマットにコンパクト(圧縮)する。より具体的には、コンパクション及び取得順序セグメント465は、カリングされたプリミティブの頂点を削除し(これらは、カリングされていないプリミティブによっても使用されない)、残りのデータをパック形式にコンパクトする。また、コンパクション及び取得順序セグメント465は、順序番号をスケジューラ136から取得する。順序番号は、APIの順序を維持するのを補助し、ワールドスペースパイプライン430から受信したプリミティブを処理する順序に関して、スクリーンスペースパイプライン432に命令するのに役立つ。スケジューラ136は、グラフィックス処理パイプライン400を介して処理されたワークに関するグローバルな順序を維持し、ワークがグラフィックス処理パイプライン400を通過する場合に、当該ワークに順序番号を割り当てる。
スクリーンスペース分割決定セグメント466は、プリミティブ毎に、プリミティブが重なる1つ以上のスクリーン細分部324を決定する。このセグメントの目的は、異なるスクリーンスペースパイプライン432に割り当てられたスクリーンの一部に基づいて、何れのスクリーンスペースパイプライン432が何れのプリミティブを受信するのかを識別することである。図3Cの例では、この機能は、固定機能プリミティブアセンブラ340に実装されているが、図4A〜図4Dの並列処理ユニット202で実行される命令において実施される。いくつかの実施態様では、スクリーンスペース分割決定セグメント466は、オペコード(この機能は、所定の座標のセットに基づいて、座標が何れのスクリーン細分部324に属するかを識別することである)を含み、これにより、オペコードは、スクリーンスペース分割決定セグメント466のハードウェアアクセラレーションを提供する。
保留パラメータ計算セグメント468は、錐台カリング、バックフェースカリング及び小三角形廃棄セグメント464でプリミティブがカリングされた後に、属性計算を実行する。この時点でこれらの動作を実行する利点は、見えないプリミティブが廃棄されているので、最終シーンに寄与しないプリミティブに関する属性が決定されないことである。ドライバ122は、保留パラメータ計算セグメント468に対する命令を、頂点シェーダステージ304に関するユーザ提供コードから取得する。ドライバ122は、これらのパラメータに関連すると示された出力を識別し、出力が依存する頂点シェーダステージ304に関するコードの命令を識別することによって、これらのパラメータを決定するための命令を抽出する。錐台カリング、バックフェースカリング及び小三角形廃棄セグメント464に関連する動作の後まで属性処理を保留することは、カリングされて最終シーンに寄与しないプリミティブに対して属性処理が行われるのを抑制する。
テッセレーション有効プリミティブシェーダ470は、頂点シェーダステージ304に関する動作を実行する代わりに、テッセレーション有効プリミティブシェーダ470がドメインシェーダステージ310に関する動作を実行することを除いて、テッセレーション無効プリミティブシェーダ450と同様のセグメントを含む。したがって、テッセレーション有効プリミティブシェーダ470は、位置計算セグメント456での位置計算に関する頂点シェーダステージ304のアプリケーション提供コードから導出された命令を含む代わりに、ドメインシェーダステージ310の機能を実行するための命令を含むドメイン評価セグメント476を含む。この命令は、当該ステージに関連するアプリケーション提供コードから導出される。
プリミティブシェーダ404では、図3Cの例示的なグラフィックス処理パイプラインの固定機能ハードウェア(例えば、プリミティブアセンブラ340)で実行される機能の多くは、代わりに、プログラマブル処理ユニット202によって実行される。固定機能からプログラムハードウェアへのこのシフトは、図4Dに関連して説明する特定の利益をもたらす。
図4Dは、一例による、グラフィックス処理パイプライン400のさらなる詳細を示す図である。グラフィックス処理パイプライン400は、複数のワールドスペースパイプライン430と、複数のスクリーンスペースパイプライン432と、を含む。図4Dでは、ワールドスペースパイプライン430は、実質的に図4A〜図4Cに関連して上述したように、頂点及びプリミティブを処理する。とりわけ、プリミティブシェーダ404(具体的には、スクリーンスペース分割決定セグメント466)は、何れのスクリーンスペースパイプライン432がプリミティブを受信するのかを識別する。プリミティブアセンブラ435は、関連するスクリーンスペースパイプライン432(すなわち、プリミティブアセンブラ435が見つけられたスクリーンスペースパイプライン432)に指定されたデータをローカルデータストア445からフェッチし、当該データをラスタライザステージ314用の三角形にアセンブルし、三角形をラスタライザステージ314に渡す。プリミティブアセンブラ435は、プリミティブシェーダ404によって実行されないカリング等の他のプリミティブ動作を実行することができる。
クロスバー342を用いる代わりに、データは、ローカルデータストア445を介して、ワールドスペースパイプラインからスクリーンスペースパイプライン432に渡される。より具体的には、プリミティブシェーダ404は、スクリーンスペースパイプライン432によって処理されたプリミティブに関するデータ(例えば、頂点、何れの頂点がプリミティブを構成するかの指標、頂点属性等)をローカルデータストア445にエクスポートし、スクリーンスペースパイプライン432は、適切なデータをローカルデータストア445からフェッチする。図3Cの固定機能プリミティブアセンブラ340及びクロスバー342を用いると、限られた専用バッファメモリ(例えば、ラスタライザステージ314のバッファ345)によって、或る状況ではボトルネックになる。しかしながら、プリミティブシェーダ404は、ワールドスペースパイプライン430からスクリーンスペースパイプライン432へのデータの送信のために、はるかに柔軟なローカルデータストア445を使用することができ、したがって、専用メモリ(例えば、位置バッファ346及びパラメータバッファ348)の制限に影響されない。
また、柔軟なプリミティブシェーダ404は、スクリーンスペースパイプラインからのワールドスペースパイプラインの「分離」を可能にする。より具体的には、図3Cのクロスバー342は、ワールドスペースパイプライン330とスクリーンスペースパイプライン350との間に配線され、その機能を固定的に実現する。したがって、データパスは、ワールドスペースパイプライン330の出力からクロスバー342を介してスクリーンスペースパイプライン350に固定される。クロスバー342を使用せずにローカルデータストア445を使用することによって、データパスがより柔軟になる。ワールドスペースパイプラインエクスポートデータ(例えば、処理された頂点及びプリミティブ)は、ワールドスペースパイプライン430以外のユニット(プロセッサ102等)によって生成され、単にローカルデータストア445に供給され得る、或いは、ワールドスペースパイプライン430は、処理された頂点及びプリミティブを生成し、スクリーンスペースパイプライン432以外のユニット(プロセッサ102等)による取り出し及び処理のために、当該データをローカルデータストア445にエクスポートすることができる。
また、クロスバー342を使用しないことは、クロスバー342の複雑さのために、許容されているよりも多くのワールドスペースパイプライン及びスクリーンスペースパイプラインを可能にすることを意味する。クロスバー342が除去されると、固定数の入力及び出力を有するクロスバーが存在しないので、可変数のワールドスペースパイプライン330を可変数のスクリーンスペースパイプライン350に接続することも可能になる。
さらに、ローカルデータストア445は、汎用メモリであり、並列処理ユニット202で実行される計算シェーダ(すなわち、グラフィックス処理に必ずしも関連しない汎用プログラム)による使用に利用可能である。位置バッファ346及びパラメータバッファ348の専用メモリは、計算シェーダにとって利用可能ではない。したがって、クロスバー342の代わりにローカルデータストア445を使用することにより、計算シェーダが使用できない専用メモリをAPD116から除去することができ、これにより、チップ領域の消費や他の目的で専用メモリのために使用されるチップ領域の使用を減らすことができる。
図5は、一例による、プリミティブシェーダの機能を実行する方法500のフロー図である。図1〜図4Dに関連して示し及び説明したシステムについて説明を行うが、技術的に実行可能な順序で方法を行うように構成された任意のシステムが本開示の範囲内にあることを理解されたい。
示すように、方法500は、ステップ502で開始し、並列処理ユニット202で実行されるプリミティブシェーダ404に関するシェーダプログラムが、頂点毎の動作(例えば、位置計算セグメント456又はドメイン評価セグメント476に関する動作)を実行する。これらの頂点毎の動作は、テッセレーションが無効である場合に、頂点シェーダステージ304に関するアプリケーション提供コードで指定され、このコードから抽出された頂点位置の変換、又は、ドメインシェーダステージ310に関するアプリケーション提供コードで指定され、このコードから抽出された頂点位置の変換を含む。ステップ504において、シェーダプログラムは、プリミティブ毎の動作(例えば、ジオメトリシェーディング動作(462))を実行する。これらのプリミティブ毎の動作は、ジオメトリシェーダステージ312に関するアプリケーション提供コードで指定され、このコードから抽出される。ステップ504はオプションであり、ジオメトリシェーディングが有効であるかどうかに基づいて行われる。
ステップ506において、シェーダプログラムは、カリング動作を実行する(464)。カリング動作は、錐台カリング、バックフェースカリング及び小三角形廃棄のうち1つ以上を含む。ステップ508において、シェーダプログラムは、ステップ502〜ステップ506で実行されたワークに関連するプリミティブが重なるスクリーン細分部を識別する(466)。ステップ510において、シェーダプログラムは、スクリーンスペースパイプライン350によって使用されるために、頂点データ及びプリミティブデータをローカルデータストア445に送信する。ステップ512において、スクリーンスペースパイプライン350は、処理のために、頂点データをローカルデータストア445からフェッチする。
ステップ502〜ステップ508は、同じシェーダプログラムによって実行される。したがって、各ウェーブフロントは、単一のシェーダプログラムを実行するように生成されるので、個々のウェーブフロントは、ステップ502〜ステップ508を実行する。
3次元グラフィックスレンダリングを実行する方法が提供される。この方法は、並列処理ユニットで実行されるプリミティブシェーダプログラムを用いて、頂点のセットに対して頂点毎の動作を実行することを含む。この方法は、頂点のセットに関連するプリミティブのセットに対してカリング動作を実行して、カリングされたプリミティブのセットを生成することを含み、カリング動作は、プリミティブシェーダを用いて実行される。この方法は、プリミティブシェーダを用いて、カリングされたプリミティブのセットに関する1つ以上のスクリーン細分部を識別することを含む。この方法は、カリングされたプリミティブのセットの識別されたスクリーン細分部に基づいて、カリングされたプリミティブのセットをスクリーンスペースパイプラインのセットに送信することを含む。
アクセラレーテッド処理デバイス(APD)が提供される。APDは、グラフィックス処理パイプラインと、複数の並列処理ユニットと、を備える。グラフィックス処理パイプラインは、複数の並列処理ユニットでプリミティブシェーダプログラムを実行するように構成されたプリミティブシェーダステージを含む。プリミティブシェーダプログラムは、頂点のセットに対して頂点毎の動作を実行し、頂点のセットに関連するプリミティブのセットに対してカリングを実行して、カリングされたプリミティブのセットを生成し、プリミティブシェーダを用いて、カリングされたプリミティブのセットに関する1つ以上のスクリーン細分部を識別し、カリングされたプリミティブのセットの識別されたスクリーン細分部に基づいて、カリングされたプリミティブのセットを、グラフィックス処理パイプラインのスクリーンスペースパイプラインのセットに送信するように構成されている。
また、コンピューティングデバイスが提供される。コンピューティングデバイスは、中央処理装置と、アクセラレーテッド処理デバイス(APD)と、を含む。APDは、グラフィックス処理パイプラインと、複数の並列処理ユニットと、を備える。グラフィックス処理パイプラインは、複数の並列処理ユニットでプリミティブシェーダプログラムを実行するように構成されたプリミティブシェーダステージを含む。プリミティブシェーダプログラムは、中央処理装置から受信した頂点のセットに対して頂点毎の動作を実行し、頂点のセットに関連するプリミティブのセットに対してカリング動作を実行して、カリングされたプリミティブのセットを生成し、プリミティブシェーダを用いて、カリングされたプリミティブのセットに関する1つ以上のスクリーン細分部を識別し、カリングされたプリミティブのセットの識別されたスクリーン細分部に基づいて、カリングされたプリミティブのセットを、グラフィックス処理パイプラインのスクリーンスペースパイプラインのセットに送信するように構成されている。
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の複合で上記に説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な複合で使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD−ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。

Claims (20)

  1. 3次元グラフィックスレンダリングを実行する方法であって、
    並列処理ユニットで実行されるプリミティブシェーダプログラムを用いて、頂点のセットに対して頂点毎の動作を実行することと、
    前記頂点のセットに関連するプリミティブのセットに対してカリング動作を実行して、カリングされたプリミティブのセットを生成することであって、前記カリング動作は、プリミティブシェーダを用いて実行される、ことと、
    前記プリミティブシェーダを用いて、前記カリングされたプリミティブのセットに関する1つ以上のスクリーン細分部を識別することと、
    前記カリングされたプリミティブのセットの前記識別されたスクリーン細分部に基づいて、前記カリングされたプリミティブのセットをスクリーンスペースパイプラインのセットに送信することと、を含む、
    方法。
  2. テッセレーションが有効であり、前記頂点毎の動作は、グラフィックス処理パイプラインのテッセレータステージによって生成された重心座標を評価するためのドメインシェーダ動作を含む、
    請求項1の方法。
  3. テッセレーションが無効であり、前記頂点毎の動作は、グラフィックス処理パイプラインの頂点シェーダステージで頂点位置を変換するための頂点シェーダ動作を含む、
    請求項1の方法。
  4. 前記カリングされたプリミティブのセットに関連する頂点の位置以外の属性を決定する動作を実行することであって、前記位置以外の属性を決定する動作は、グラフィックス処理パイプラインの頂点シェーダステージに関する頂点シェーダコードから導出される、ことを含む、
    請求項1の方法。
  5. ジオメトリシェーディングが有効であり、前記方法は、前記頂点のセットに関連する前記プリミティブのセットに対してジオメトリシェーディング動作を実行することを含み、
    前記ジオメトリシェーディング動作は、グラフィックス処理パイプラインのジオメトリシェーダステージに関するジオメトリシェーダコードから導出される、
    請求項1の方法。
  6. 前記カリングされたプリミティブのセットを前記スクリーンスペースパイプラインのセットに送信することは、固定機能クロスバー又は専用の位置バッファ及びパラメータバッファを介することなく、汎用のローカルデータストアメモリを介して実行される、
    請求項1の方法。
  7. 前記カリングされたプリミティブのセットを前記スクリーンスペースパイプラインのセットに送信することは、
    前記カリングされたプリミティブのセットを前記ローカルデータストアメモリに送信することと、
    前記カリングされたプリミティブのセットを前記ローカルデータストアメモリから前記スクリーンスペースパイプラインのセットに送信することと、を含む、
    請求項6の方法。
  8. 前記1つ以上のスクリーン細分部を識別することは、
    前記カリングされたプリミティブのセットのプリミティブ毎に、プリミティブによってカバーされた1つ以上のスクリーン細分部を識別することを含む、
    請求項1の方法。
  9. 前記識別されたスクリーン細分部に基づいて、前記カリングされたプリミティブのセットを前記スクリーンスペースパイプラインのセットに送信することは、
    前記カリングされたプリミティブのセットのプリミティブ毎に、プリミティブによってカバーされた前記スクリーン細分部に関連する1つ以上のスクリーンスペースパイプラインを識別することと、
    前記プリミティブを、前記識別された1つ以上のスクリーンスペースパイプラインに送信することと、を含む、
    請求項8の方法。
  10. グラフィックス処理パイプラインと、
    複数の並列処理ユニットと、を備え、
    前記グラフィックス処理パイプラインは、前記複数の並列処理ユニットでプリミティブシェーダプログラムを実行するように構成されたプリミティブシェーダステージを含み、
    前記プリミティブシェーダプログラムは、
    頂点のセットに対して頂点毎の動作を実行し、
    前記頂点のセットに関連するプリミティブのセットに対してカリング動作を実行して、カリングされたプリミティブのセットを生成し、
    プリミティブシェーダを用いて、前記カリングされたプリミティブのセットに関する1つ以上のスクリーン細分部を識別し、
    前記カリングされたプリミティブのセットの前記識別されたスクリーン細分部に基づいて、前記カリングされたプリミティブのセットを、前記グラフィックス処理パイプラインのスクリーンスペースパイプラインのセットに送信する、
    ように構成されている、
    アクセラレーテッド処理デバイス(APD)。
  11. 前記グラフィックス処理パイプラインは、テッセレーションが有効である状態であり、
    前記頂点毎の動作は、グラフィックス処理パイプラインのテッセレータステージによって生成された重心座標を評価するためのドメインシェーダ動作を含む、
    請求項10のAPD。
  12. 前記グラフィックス処理パイプラインは、テッセレーションが無効である状態であり、
    前記頂点毎の動作は、グラフィックス処理パイプラインの頂点シェーダステージで頂点位置を変換するための頂点シェーダ動作を含む、
    請求項10のAPD。
  13. 前記プリミティブシェーダプログラムは、前記カリングされたプリミティブのセットに関連する頂点の位置以外の属性を決定する動作を実行するように構成されており、
    前記位置以外の属性を決定する動作は、前記グラフィックス処理パイプラインの頂点シェーダステージに関する頂点シェーダコードから導出される、
    請求項10のAPD。
  14. 前記グラフィックス処理パイプラインは、ジオメトリシェーディングが有効である状態であり、
    前記プリミティブシェーダプログラムは、前記頂点のセットに関連する前記プリミティブのセットに対してジオメトリシェーディング動作を実行するように構成されており、
    前記ジオメトリシェーディング動作は、前記グラフィックス処理パイプラインのジオメトリシェーダステージに関するジオメトリシェーダコードから導出される、
    請求項10のAPD。
  15. 汎用のローカルデータストアを備え、
    前記プリミティブシェーダプログラムは、前記カリングされたプリミティブのセットを、固定機能クロスバー又は専用の位置バッファ及びパラメータバッファを介することなく、前記汎用のローカルデータストアを介して前記スクリーンスペースパイプラインのセットに送信するように構成されている、
    請求項10のAPD。
  16. 前記プリミティブシェーダプログラムは、前記カリングされたプリミティブのセットのプリミティブ毎に、プリミティブによってカバーされた1つ以上のスクリーン細分部を識別することによって、1つ以上のスクリーン細分部を識別するように構成されている、
    請求項10のAPD。
  17. 前記プリミティブシェーダプログラムは、前記カリングされたプリミティブのセットのプリミティブ毎に、プリミティブによってカバーされた前記スクリーン細分部に関連する1つ以上のスクリーンスペースパイプラインを識別することと、前記プリミティブを前記識別された1つ以上のスクリーンスペースパイプラインに送信することと、によって、前記識別されたスクリーン細分部に基づいて、前記カリングされたプリミティブのセットを前記スクリーンスペースパイプラインのセットに送信するように構成されている、
    請求項16の方法。
  18. 中央処理装置と、
    アクセラレーテッド処理デバイス(APD)と、
    を備えるコンピューティングデバイスであって、
    前記APDは、
    グラフィックス処理パイプラインと、
    複数の並列処理ユニットと、を備え、
    前記グラフィックス処理パイプラインは、前記複数の並列処理ユニットでプリミティブシェーダプログラムを実行するように構成されたプリミティブシェーダステージを含み、
    前記プリミティブシェーダプログラムは、
    前記中央処理装置から受信した頂点のセットに対して頂点毎の動作を実行し、
    前記頂点のセットに関連するプリミティブのセットに対してカリング動作を実行して、カリングされたプリミティブのセットを生成し、
    プリミティブシェーダを用いて、前記カリングされたプリミティブのセットに関する1つ以上のスクリーン細分部を識別し、
    前記カリングされたプリミティブのセットの前記識別されたスクリーン細分部に基づいて、前記カリングされたプリミティブのセットを、前記グラフィックス処理パイプラインのスクリーンスペースパイプラインのセットに送信する、
    ように構成されている、
    コンピューティングデバイス。
  19. 前記グラフィックス処理パイプラインは、テッセレーションが有効である状態であり、
    前記頂点毎の動作は、グラフィックス処理パイプラインのテッセレータステージによって生成された重心座標を評価するためのドメインシェーダ動作を含み、
    前記ドメインシェーダ動作は、前記中央処理装置によって提供されたドメインシェーダプログラムから導出される、
    請求項18のコンピューティングデバイス。
  20. 前記グラフィックス処理パイプラインは、テッセレーションが無効である状態であり、
    前記頂点毎の動作は、グラフィックス処理パイプラインの頂点シェーダステージで頂点位置を変換するための頂点シェーダ動作を含み、
    前記頂点シェーダ動作は、前記中央処理装置によって提供された頂点シェーダプログラムから導出される、
    請求項18のコンピューティングデバイス。
JP2019515889A 2016-09-22 2017-09-06 プリミティブシェーダ Active JP7025415B2 (ja)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201662398211P 2016-09-22 2016-09-22
US62/398,211 2016-09-22
US15/415,823 US11379941B2 (en) 2016-09-22 2017-01-25 Primitive shader
US15/415,823 2017-01-25
EP17155075.9 2017-02-07
EP17155075.9A EP3300028B1 (en) 2016-09-22 2017-02-07 Primitive shader
PCT/US2017/050349 WO2018057295A1 (en) 2016-09-22 2017-09-06 Primitive shader

Publications (2)

Publication Number Publication Date
JP2019533240A true JP2019533240A (ja) 2019-11-14
JP7025415B2 JP7025415B2 (ja) 2022-02-24

Family

ID=57995077

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019515889A Active JP7025415B2 (ja) 2016-09-22 2017-09-06 プリミティブシェーダ

Country Status (6)

Country Link
US (1) US11379941B2 (ja)
EP (1) EP3300028B1 (ja)
JP (1) JP7025415B2 (ja)
KR (1) KR102486347B1 (ja)
CN (1) CN109690629B (ja)
WO (1) WO2018057295A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417734B2 (en) * 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US11227430B2 (en) 2019-06-19 2022-01-18 Samsung Electronics Co., Ltd. Optimized pixel shader attribute management
GB2592604B (en) * 2020-03-03 2023-10-18 Sony Interactive Entertainment Inc Image generation system and method
US11481967B2 (en) * 2020-08-31 2022-10-25 Advanced Micro Devices, Inc. Shader core instruction to invoke depth culling
EP4050479A1 (en) * 2021-02-25 2022-08-31 Imagination Technologies Limited Task repacking in a graphic pipeline
GB2610242A (en) * 2021-08-27 2023-03-01 Advanced Risc Mach Ltd Graphics processing
US20230094115A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. Load multiple primitives per thread in a graphics pipeline
US20230377086A1 (en) * 2022-05-18 2023-11-23 Advanced Micro Devices, Inc. Pipeline delay elimination with parallel two level primitive batch binning
CN115908102A (zh) * 2022-08-23 2023-04-04 芯动微电子科技(珠海)有限公司 图形处理方法及系统
CN116843540B (zh) * 2023-08-31 2024-01-23 南京砺算科技有限公司 图形处理器及图形处理设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130265309A1 (en) * 2012-04-04 2013-10-10 Qualcomm Incorporated Patched shading in graphics processing
US8704836B1 (en) * 2009-10-19 2014-04-22 Nvidia Corporation Distributing primitives to multiple rasterizers
US20160086299A1 (en) * 2014-09-24 2016-03-24 Saurabh Sharma Position-Only Shading Pipeline

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7750914B2 (en) * 2004-08-26 2010-07-06 Intel Corporation Subdividing geometry images in graphics hardware
US7468726B1 (en) * 2005-12-01 2008-12-23 Nvidia Corporation Culling in a vertex processing unit
US7728841B1 (en) * 2005-12-19 2010-06-01 Nvidia Corporation Coherent shader output for multiple targets
US8436854B2 (en) * 2009-05-29 2013-05-07 Qualcomm Incorporated Graphics processing unit with deferred vertex shading
US8542247B1 (en) * 2009-07-17 2013-09-24 Nvidia Corporation Cull before vertex attribute fetch and vertex lighting
US8692829B2 (en) * 2009-10-05 2014-04-08 Nvidia Corporation Calculation of plane equations after determination of Z-buffer visibility
US9536341B1 (en) * 2009-10-19 2017-01-03 Nvidia Corporation Distributing primitives to multiple rasterizers
US9177351B2 (en) * 2012-10-09 2015-11-03 Qualcomm Incorporated Multi-primitive graphics rendering pipeline
KR102066533B1 (ko) * 2013-11-19 2020-01-16 삼성전자 주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
US9483862B2 (en) * 2013-12-20 2016-11-01 Qualcomm Incorporated GPU-accelerated path rendering
GB2525636B (en) * 2014-04-30 2020-08-19 Geomerics Ltd Graphics processing systems
GB2527822B (en) * 2014-07-03 2020-10-07 Advanced Risc Mach Ltd Graphics processing
US9978171B2 (en) * 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US9754407B2 (en) * 2014-08-12 2017-09-05 Nvidia Corporation System, method, and computer program product for shading using a dynamic object-space grid
KR102327144B1 (ko) * 2014-11-26 2021-11-16 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8704836B1 (en) * 2009-10-19 2014-04-22 Nvidia Corporation Distributing primitives to multiple rasterizers
US20130265309A1 (en) * 2012-04-04 2013-10-10 Qualcomm Incorporated Patched shading in graphics processing
US20160086299A1 (en) * 2014-09-24 2016-03-24 Saurabh Sharma Position-Only Shading Pipeline

Also Published As

Publication number Publication date
KR20190051961A (ko) 2019-05-15
CN109690629A (zh) 2019-04-26
KR102486347B1 (ko) 2023-01-09
WO2018057295A1 (en) 2018-03-29
JP7025415B2 (ja) 2022-02-24
EP3300028A1 (en) 2018-03-28
US11379941B2 (en) 2022-07-05
EP3300028B1 (en) 2018-11-07
CN109690629B (zh) 2023-08-08
US20180082399A1 (en) 2018-03-22

Similar Documents

Publication Publication Date Title
JP7025415B2 (ja) プリミティブシェーダ
JP6918919B2 (ja) 自動的にコンパイルされたコンピュートシェーダを用いるプリミティブカリング
US20200035017A1 (en) Combined world-space pipeline shader stages
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
US10796483B2 (en) Identifying primitives in input index stream
US20180211434A1 (en) Stereo rendering
WO2018140223A1 (en) Stereo rendering
JP2020506474A (ja) アウトオブオーダのピクセルシェーダのエクスポート
TWI616844B (zh) 當複合物件在圖形影像中無法產生可見改變時促進圖形處理單元中此等物件之淘汰的技術
US11972518B2 (en) Hybrid binning
US20230298261A1 (en) Distributed visibility stream generation for coarse grain binning
US20220319091A1 (en) Post-depth visibility collection with two level binning
US20240169641A1 (en) Vertex index routing through culling shader for two level primitive batch binning
US20240070961A1 (en) Vertex index routing for two level primitive batch binning
US20210304349A1 (en) Iterative indirect command buffers
US20210407182A1 (en) Load instruction for multi sample anti-aliasing

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200828

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210608

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210622

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210917

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220125

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220210

R150 Certificate of patent or registration of utility model

Ref document number: 7025415

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150