JP7122396B2 - グラフィックスパイプラインにおけるメモリ使用削減のためのコンパイラ支援技法 - Google Patents

グラフィックスパイプラインにおけるメモリ使用削減のためのコンパイラ支援技法 Download PDF

Info

Publication number
JP7122396B2
JP7122396B2 JP2020564864A JP2020564864A JP7122396B2 JP 7122396 B2 JP7122396 B2 JP 7122396B2 JP 2020564864 A JP2020564864 A JP 2020564864A JP 2020564864 A JP2020564864 A JP 2020564864A JP 7122396 B2 JP7122396 B2 JP 7122396B2
Authority
JP
Japan
Prior art keywords
shader program
shader
data
output
program
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.)
Active
Application number
JP2020564864A
Other languages
English (en)
Other versions
JP2021525414A (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.)
Advanced Micro Devices Inc
Original Assignee
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2021525414A publication Critical patent/JP2021525414A/ja
Application granted granted Critical
Publication of JP7122396B2 publication Critical patent/JP7122396B2/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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • 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
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Devices For Executing Special Programs (AREA)

Description

関連出願の相互参照
本願は、2018年5月30日に出願された米国特許出願第15/992,239号の利益を主張するものであり、上記米国特許出願に記載された内容を参照により本明細書に完全に明記されているかのように援用する。
3次元グラフィックス処理パイプラインは、ホスト(コンピューティングシステムの中央処理装置など)からコマンドを受け付けて、それらのコマンドを処理し、それによってディスプレイデバイス上にレンダリングするためのピクセルを生成する。グラフィックス処理パイプラインは、頂点位置及び頂点属性の変換、ピクセル色の計算などの個々のタスクを実行するいくつかのステージを含む。グラフィックス処理パイプラインは絶えず開発され、改良されている。
添付の図面と共に例として与えられた場合、以下の説明から、より詳細に理解することができる。
開示された1つ以上の実施形態を実施することができる例示的なデバイスのブロック図である。 図1のデバイスのブロック図であり、更なる詳細を示す。 図2に示すグラフィックス処理パイプラインの更なる詳細を示すブロック図である。 一実施例による、シェーダ間データ通信のためのメモリ使用率を改善する技法を示す。 一実施例による、ハルシェーダプログラム及びドメインシェーダプログラム対の分析を説明するブロック図である。 一実施例による、シェーダプログラム間で伝送されるデータのメモリフットプリントを削減するためにシェーダプログラムを変更する方法のフロー図である。
グラフィックス処理パイプラインのパイプラインステージ間通信用のメモリ使用量を改善する技法が開示される。本技法は、分析のためのシェーダプログラムを識別することを含む。このようなシェーダプログラムは、一方のシェーダプログラム(第1のシェーダプログラム)が、他方のシェーダプログラム(第2のシェーダプログラム)によって使用されるデータを出力する少なくとも2つのシェーダプログラムによって識別される。第1のシェーダプログラムの出力命令をコンパイラが分析して、そのような出力命令が、第2のシェーダプログラムによって入力されない何らかのデータを出力しているかどうかを判定する。そのような命令が1つ以上存在する場合に、コンパイラは、第1のシェーダプログラムによって出力されるとともに、第2のシェーダプログラムによって入力されるデータ点を識別し、第1のシェーダプログラムによって出力されるが、第2のシェーダプログラムによって入力されないデータ点を書き込むメモリ書き込みの生成を回避する。第1のシェーダプログラムに関してのメモリ書き込みにより、出力されるデータに「ギャップ」が生じる場合、コンパイラは、パック形式を使用してそのようなギャップを除去するようにメモリ書き込みを変更する。このギャップ除去により、メモリフットプリントが削減され、同様に、最初は分離されていた複数のメモリ書き込みまたはメモリ読み出しをより少ないメモリアクセス命令に集約することで、実行されるメモリアクセス命令の数もまた削減される。全体的に、これらの変更により、メモリアクセスが少なくなり、メモリフットプリントが小さくなり、有効帯域幅が増加するようになる。
この分析が役立つグラフィックスパイプラインの一特定部分は、テッセレーションを実施するパイプラインの一部であり、これは、ハルシェーダステージ及びドメインシェーダステージを含む。具体的には、ハルシェーダは、ドメインシェーダによる使用のために、制御点及びパッチ定数(テッセレーション係数など)などのデータを出力する。このデータは、通常は、テッセレーション以外のことに使用されている汎用メモリに出力される。ハルシェーダは、それぞれが複数のデータ項目(例えば、複数の制御点、複数のテッセレーション係数)を出力する命令を含む。更に、ハルシェーダは一般化可能であり、複数のドメインシェーダは、通常は、単一のハルシェーダと共に使用されるように記述されている。したがって、ハルシェーダは、一部のドメインシェーダで使われないデータを出力するのが普通である。ハルシェーダはまた、実行時に、パッチがカリングされるかどうかを、計算されたテッセレーション係数値に基づいて識別することができ、この結果としてハルシェーダは、全パッチのデータがドメインシェーダで使われるかどうかを把握している。本明細書で説明する技法は、ハルシェーダからドメインシェーダに伝送されるデータのメモリフットプリント及びメモリアクセスを削減するのに役立つ。
図1は、本開示の1つ以上の態様が実施される例示的なデバイス100のブロック図である。デバイス100には、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、またはタブレット型コンピュータが含まれる。デバイス100は、プロセッサ102、メモリ104、ストレージデバイス106、1つ以上の入力デバイス108、及び1つ以上の出力デバイス110を含む。デバイス100はまた、任意選択で入力ドライバ112及び出力ドライバ114を含む。デバイス100は、図1に示されない更なる構成要素を含み得ることが理解されよう。
プロセッサ102としては、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同一ダイ上に設置されたCPU及びGPU、または各プロセッサコアがCPUもしくはGPUであり得る1つ以上のプロセッサコアが含まれる。メモリ104は、プロセッサ102と同じダイ上に設置されるか、またはプロセッサ102とは別に設置され得る。メモリ104としては、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、またはキャッシュなどの揮発性または不揮発性のメモリが含まれる。
ストレージデバイス106としては、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、またはフラッシュドライブである固定式またはリムーバブル式のストレージデバイスが含まれる。入力デバイス108としては、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、またはネットワーク接続(例えば、無線IEEE802信号の送信及び/または受信用の無線ローカルエリアネットワークカード)が含まれる。出力デバイス110としては、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の照明、アンテナ、またはネットワーク接続(例えば、無線IEEE802信号の送信及び/または受信用の無線ローカルエリアネットワークカード)が含まれる。
入力ドライバ112はプロセッサ102及び入力デバイス108と通信し、入力ドライバ112により、プロセッサ102が入力デバイス108から入力を受け取ることが可能になる。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、出力ドライバ114により、プロセッサ102が出力デバイス110に出力を送ることが可能になる。出力ドライバ114は、ディスプレイデバイス118に結合されたアクセラレーテッド処理デバイス(APD)116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け付け、それらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、表示のためにディスプレイデバイス118にピクセル出力を供給するように構成されている。
APD116は、単一命令複数データ(「SIMD」)パラダイムに従って計算を実行するように構成された1つ以上の並列処理装置を含む。しかし、APD116によって実行されると説明される機能がまた、SIMDパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
図2は、デバイス100のブロック図であり、APD116での処理タスクの実行に関連する更なる詳細を示す。プロセッサ102は、システムメモリ104内に、プロセッサ102によって実行するための1つ以上の制御論理モジュールを保持する。この制御論理モジュールは、オペレーティングシステム120、ドライバ122、及びアプリケーション126を含み、任意選択で、図示しない他のモジュールを含んでもよい。これらの制御論理モジュールは、プロセッサ102及びAPD116の動作の様々な態様を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102で実行中の他のソフトウェアにハードウェアへのインタフェースを提供する。ドライバ122は、例えば、プロセッサ102で実行中のソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインタフェース(「API」)を提供して、APD116の様々な機能にアクセスすることにより、APD116の動作を制御する。ドライバ122はまた、シェーダコードを、APD116の処理構成要素(以下で更に詳細に説明するSIMD装置138など)によって実行するためのシェーダプログラムにコンパイルする実行時コンパイラを含む。
APD116は、グラフィックス演算及び非グラフィックス演算などの並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受け取ったコマンドに基づいて、ピクセル演算、幾何学的計算などのグラフィックスパイプライン演算を実行し、ディスプレイデバイス118に画像を描画するために使用され得る。APD116はまた、ビデオ、物理シミュレーション、計算流体力学、もしくは他のタスクに関連した演算など、グラフィックス演算に直接関連しない計算処理演算を、プロセッサ102から受け取ったコマンドに基づいて実行し、またはグラフィックス処理パイプラインの「通常」の情報フローの一部ではない計算処理演算を実行する。
APD116は、SIMDパラダイムに従いプロセッサ102の要求に応じて並列に演算を実行するように構成された1つ以上のSIMD装置138を含む(本明細書では、総称して「プログラマブル処理装置202」と呼ばれ得る)シェーダエンジン132を含む。SIMDパラダイムとは、複数の処理要素が、単一のプログラム制御フロー装置及びプログラムカウンタを共有し、したがって同一のプログラムを実行するが、そのプログラムを別のデータで実行することができるモデルのことである。一例では、各SIMD装置138は16個のレーンを含み、各レーンはSIMD装置138内の他のレーンと同時に同じ命令を実行するが、異なるデータでその命令を実行することができる。全てのレーンが所与の命令を実行する必要がない場合には、条件付き実行制御でレーンをオフに切り替えることができる。条件付き実行制御は、分岐制御フロー付きのプログラムを実行するために使用することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐または他の命令を含むプログラムについては、現在実行されていない制御フローパスに対応するレーンの条件付き実行制御と、種々の制御フローパスの直列実行とにより、任意の制御フローに従うことが可能になる。
シェーダエンジン132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるシェーダプログラムの単一のインスタンシエイションに相当する。ワークアイテムは、単一のSIMD装置138で「ウエーブフロント」として同時に実行することができる。複数のウエーブフロントが「ワークグループ」に含まれ得、このワークグループは、同じプログラムを実行するように指定されたワークアイテムの集まりを含む。ワークグループを構成するウエーブフロントのそれぞれを実行することにより、このワークグループを実行することができる。ウエーブフロントは、単一のSIMD装置138で順次実行され得、または別々のSIMD装置138で部分的もしくは完全に並列に実行され得る。ウエーブフロントは、シェーダプログラムの並列実行のインスタンスであると考えられ得、その場合、各ウエーブフロントは、SIMDパラダイムに則して(例えば、1つの命令制御装置が、命令の同一ストリームを複数のデータで実行する)、単一のSIMD装置138で同時に実行する複数のワークアイテムを含む。
各シェーダエンジン132内のローカルデータストアメモリ212は、シェーダプログラムが使用する値を格納する。ローカルデータストアメモリ212の物理的近接性により、シェーダエンジン132内に含まれないAPD116内のグローバルメモリ210、またはAPD116内にないメモリ104などの他のメモリと比べると待ち時間が改善される。スケジューラ136が、異なるシェーダエンジン132及びSIMD装置138で様々なウエーブフロントをスケジューリングすることに関連する演算を実行するように構成されている。
シェーダエンジン132によって提供される並列性は、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング演算、及びその他のグラフィックス演算などのグラフィックス関連演算に適している。したがって、プロセッサ102からグラフィックス処理コマンドを受け付けるグラフィックス処理パイプライン134が、計算タスクを並列に実行するためにシェーダエンジン132に提供する。
シェーダエンジン132はまた、グラフィックスに関係しない、またはグラフィックス処理パイプライン134の「通常」の演算の一部として実行されない計算タスク(例えば、グラフィックス処理パイプライン134の演算のために実行される処理を補う目的で実行されるカスタム演算)を実行するようにも使用される。プロセッサ102で実行中のアプリケーション126または他のソフトウェアは、そのような計算タスクを定義するプログラム(多くの場合、「計算シェーダプログラム」と呼ばれ、ドライバ122によってコンパイルされ得る)を、実行のためAPD116に送る。
図3は、図2に示すグラフィックス処理パイプライン134の更なる詳細を示すブロック図である。グラフィックス処理パイプライン134は、それぞれが特定の機能を実行するステージを含む。ステージは、グラフィックス処理パイプライン134の機能の一部を表す。各ステージは、プログラマブル処理装置202内で実行されるシェーダプログラムとして部分的もしくは完全に実装され、またはプログラマブル処理装置202の外部にある固定機能の非プログラマブルハードウェアとして部分的もしくは完全に実装される。
入力アセンブラステージ302は、ユーザ充填バッファ(例えば、プロセッサ102によって実行されたアプリケーション126などのソフトウェアの要求で充填されたバッファ)からプリミティブデータを読み出し、そのデータをアセンブルしてパイプラインのその他の部分で使用するためのプリミティブにする。入力アセンブラステージ302は、ユーザ充填バッファに含まれるプリミティブデータを基に、様々な種類のプリミティブを生成し得る。入力アセンブラステージ302は、パイプラインのその他の部分による使用のために、アセンブルしたプリミティブの形式を合わせる。
頂点シェーダステージ304は、入力アセンブラステージ302によってアセンブルされたプリミティブの頂点を処理する。頂点シェーダステージ304は、変換、スキニング、モーフィング、及び頂点ごとのライティングなどの様々な頂点ごとの演算を実行する。変換の演算は、頂点の座標を変換するための様々な演算を含み得る。これらの演算には、モデリング変換、ビューイング変換、投影変換、透視除算、及びビューポート変換のうちの1つ以上が含まれ得る。本明細書では、このような変換は、変換が実行される頂点の座標または「位置」を変更すると考えられている。座標以外の属性を変更する頂点シェーダステージ304の他の演算は、非位置属性を変更すると考えられている。
頂点シェーダステージ304は、1つ以上のシェーダエンジン132において実行すべき頂点シェーダプログラムとして部分的または完全に実装される。頂点シェーダプログラムは、コンピュータプログラマによって事前に書かれたプログラムとしてプロセッサ102によって提供される。ドライバ122は、そのようなコンピュータプログラムをコンパイルして、シェーダエンジン132内での実行に適した形式を有する頂点シェーダプログラムを生成する。
ハルシェーダステージ306、テッセレータステージ308、及びドメインシェーダステージ310は連携してテッセレーションを実施し、それにより、パッチプリミティブを指定のドメインに細分化を用いて変換する。ドメインタイプの例には、ポイント、ライン、トライ、及びクワッドが含まれ、これらのドメインタイプは、グラフィックス処理パイプライン200によってレンダリングされることが可能である。ハルシェーダステージ306及びドメインシェーダステージ310のいずれかまたは両方は、プログラマブル処理装置202で実行されることになるシェーダプログラムとして実装することができる。
ハルシェーダステージ306は、一組の頂点及び他の情報によって定義される入力プリミティブに基づいて、テッセレーションのためのパッチを生成する。より具体的には、ハルシェーダステージ306は、頂点シェーダステージ304から入力制御点を受け付け、その場合、これらの入力制御点は、ハルシェーダステージ306によって処理すべき幾何プリミティブ(例えば、三角形)を画定する。入力制御点は、パッチの形状及び位置を合わせて画定する位置情報を含む。ハルシェーダステージ306は、入力制御点と、プログラム可能なハルシェーダプログラムの命令とに基づいて、パッチ定数と共に出力パッチを生成する。出力パッチは、少なくとも部分的には、この場合もやはりハルシェーダプログラムの命令に基づいて、入力制御点と同じであり得る出力制御点、または入力制御点と同じでない場合がある出力制御点によって画定される。出力制御点は、テッセレータステージ308によって処理するためのパッチの形状及び位置を画定する。パッチ定数は、少なくともテッセレーション係数を含み、これは、出力パッチがテッセレータステージ308によってどのように細分化されるかを定義する。テッセレーション係数は、エッジテッセレーション係数を含み、内部テッセレーション係数を含む場合もある。内部テッセレーション係数は、出力パッチの内部部分の細分化の程度を定義する。エッジテッセレーション係数は、出力パッチのエッジに隣接する部分の細分化の程度を定義する。
テッセレータステージ308は、U及びV、またはU、V、及びWの座標で定義される一組のドメイン点を生成し、座標のそれぞれは0から1の範囲である。これらのドメイン点は、パッチ内の細分化頂点である。様々なパッチ分割技法が実行可能である。
ドメインシェーダ310は、単位空間U、V、及びWの位置をパッチの3次元空間ドメインに変換する。3次元空間(または「ワールド空間」)に入ると、頂点はクリップ空間と呼ばれる同次(x、y、z、w)座標系に変換される。このステップは、例えば、頂点バッファから頂点を読み出した後に頂点シェーダが行うことに似ている。ドメインシェーダステージ310は、対応するドメインシェーダプログラムの命令に基づいてワールド空間位置を生成し、テッセレータステージ308によって出力されたドメイン点に基づいてワールド空間位置を生成し、ハルシェーダステージ306によって出力された制御点に基づいてワールド空間位置を生成する。ドメインシェーダステージ310はまた、出力頂点を生成する際に、ハルシェーダステージ306が出力するテッセレーション係数などのパッチ定数を使用し得る。ドメインシェーダプログラムは、テッセレータステージ308によって出力されるドメイン点との定義可能な任意の関係を有する出力頂点を、ドメインシェーダプログラムが生成し得るという点で柔軟性がある。ただし、既知の技法が多く存在する。簡単な例では、ドメインシェーダステージ310は、U、VまたはU、V、W座標をテッセレータステージ308から制御点のワールド空間座標にマッピングして、ワールド空間位置を有する中間出力頂点を生成する。ドメインシェーダステージ310は、中間出力頂点のワールド空間位置を、パッチの平面に垂直な方向に(パッチの平面内の位置を変更せずに)そのような位置を移動させることによって変更する。ドメインシェーダステージ310は、出力頂点の位置を決定するために、ハルシェーダステージ306からのテッセレーション係数などのパッチ定数を使用し得る。ドメインシェーダステージ310はまた、任意選択で、出力頂点ごとに1つ以上の頂点パラメータを、制御点に関してテッセレータステージ308によって出力されるドメイン点の位置に基づいて、制御点の対応するパラメータを補間することなどによる実行可能な任意の方法で生成する。
ジオメトリシェーダステージ312は、プリミティブごとに頂点演算を実行する。ジオメトリシェーダプログラムは通常、プリミティブ全体(例えば、頂点の集合)を入力として受け付け、ジオメトリシェーダプログラムの命令によって指定されたプリミティブ全体に対して演算を実行する。ジオメトリシェーダステージ312により、ポイントスプライト拡張、動的パーティクルシステム演算、ファー/フィンの生成、シャドウボリュームの生成、キューブマップへのシングルパスレンダリング、プリミティブごとのマテリアルスワップ、及びプリミティブごとのマテリアルセットアップなどの演算を含む多種多様な演算を実行し得る。ジオメトリシェーダステージ312のための演算が、プログラマブル処理装置202で実行されるシェーダプログラムによって実行されてもよい。
ラスタライザステージ314は、上流で生成された単純プリミティブを受け付けてラスタライズする。ラスタ化は、どのスクリーンピクセル(またはサブピクセルサンプル)が特定のプリミティブによってカバーされているかを判定することからなる。ラスタ化は、固定機能ハードウェアによって実行されるか、またはプログラマブル処理装置202内で実行されるシェーダプログラムによって実行されてもよい。
ピクセルシェーダステージ316は、上流で生成されたプリミティブとラスタ化の結果とに基づいて、スクリーンピクセルの出力値(例えば、色の値)を計算する。ピクセルシェーダステージ316は、テクスチャメモリからのテクスチャを適用し得る。ピクセルシェーダステージ316のための演算は、プログラマブル処理装置202で実行されるシェーダプログラムによって実行される。
出力結合ステージ318は、ピクセルシェーダステージ316からの出力を受け付け、それらの出力を結合して、スクリーンピクセルの最終色を判定するためにzテストやアルファブレンディングなどの演算を実行し、それらの出力は、ディスプレイデバイス118への出力のためにフレームバッファに書き込まれる。
上記のように、図3に示され、グラフィックス処理パイプライン134内に含まれると説明されているステージの多くは、図2に示されるシェーダエンジン132内で実行されるシェーダプログラムとして実装することができる。シェーダエンジン132内のシェーダプログラムの実行を容易にするために、ドライバ122内及びAPD116内で様々な演算が行われる。
本明細書の他の箇所で説明されているように、シェーダプログラムは、多くの場合、アプリケーションプログラマによってコードに指定され、シェーダプログラムは、アプリケーションプログラムによる使用のためにコンパイラによってコンパイルされる。通常は、このコンパイルは、描画時(すなわち、アプリケーションの起動後に、アプリケーションが実際にオブジェクトのレンダリングを要求しているとき)ではなく、アプリケーションの起動中にドライバ122によって行われる。しかしながら、必要が生じた場合には、ドライバ122は、描画時にシェーダプログラムの実行時コンパイルを実行することが可能である。
アプリケーションは、グラフィックス処理パイプライン134の具体的な構成を定義する。この「グラフィックスパイプライン構成」は、任意選択のどのシェーダステージが使用されるか(例えば、ジオメトリシェーダステージ312が使用されるかどうか、及び/またはハルシェーダステージ306、テッセレータステージ308、及びドメインシェーダステージ310を使用するテッセレーションが使用されるかどうか)を含む、グラフィックス処理パイプライン134の様々な態様を定義する。グラフィックスパイプライン構成情報はまた、有効化され、シェーダプログラムを実行するシェーダステージ(例えば、頂点シェーダステージ304、ピクセルシェーダステージ316、及びハルシェーダステージ306、有効な場合、ドメインシェーダステージ310、及びジオメトリシェーダステージ312)に使用される特定のシェーダプログラムなど、これに限定されないグラフィックス処理パイプライン134の他の態様、ラスタライザステージ314の態様(三角形のどちらの面が前面であるか、ピクセルに深度値を適用する方法、カリングを実行する方法、三角形を塗りつぶす方法、及び他の態様など)、出力結合ステージ318で混合及び他の処理がどのように行われるかの態様、グラフィックス処理パイプライン134への入力(例えば、入力頂点)がどのように解釈されるかの態様、及びその他の態様を定義する。グラフィックスパイプライン構成を定義するプログラミング構造の一例は、Redmond,Washington,U.S.のMicrosoft Corporationが提供するDirect 3D 12アプリケーションプログラミングインタフェースのDirect 3Dバージョン12グラフィックスパイプライン状態構造体(D3D12_GRAPHICS_PIPELINE_STATE_DESC構造体)である。場合によっては(Microsoft Direct X 12が使用されるハードウェア及びソフトウェア構成などの場合)、様々な事前定義されたグラフィックスパイプライン構成が、アプリケーションの起動時にアプリケーションによってドライバ122に通信される。描画時に、アプリケーションは、特定の事前定義されたグラフィックスパイプライン構成に切り替えるようにドライバ122に要求を発行することにより、事前定義された種々のグラフィックスパイプライン構成を切り替えることができる。他の状況(Microsoft Direct X 11が使用されるハードウェア及びソフトウェア構成など)では、アプリケーションは、実行時に、ドライバ122にグラフィックスパイプライン構成を指定しない。その代わりに、アプリケーションは、状態変更コマンドを発行することにより、描画時に、どのパイプラインステージがレンダリングに関与することになるのか、どのシェーダプログラムが様々なパイプラインステージに使用されるのかなど、グラフィックスパイプライン構成を変更する。
シェーダプログラムは、シェーダステージ間でデータがどのように通信されるかを示す入力及び出力を有する。これらの入力及び出力は、グラフィックス処理パイプライン134の先行ステージからシェーダプログラムに提供されるべきデータが何であるかを表し、また同様に、シェーダプログラムから出力されてグラフィックス処理パイプライン134の後続ステージに提供されるべきデータが何であるかを表す。一部のシェーダプログラムは、メモリロード命令及び/またはメモリストア命令を利用して、それらの入力をメモリ(ローカルデータストアメモリ212またはグローバルメモリ210など)から読み出し、またそれらの出力をメモリ(ローカルデータストアメモリ212またはグローバルメモリ210など)に格納する。他のシェーダプログラムは、入力及び出力の直接宣言であって、ハードウェアによって解釈されると、ハードウェアが、先行ステージから特定値をインポートして、それらの値をシェーダプログラム用のローカルメモリ及び/またはレジスタに配置し、及び/またはシェーダ用のレジスタ及び/またはローカルメモリから、後続のシェーダステージで使用される位置に特定値をエクスポートする直接宣言などの他のタイプの命令を使用する。ステージ間の伝送は、汎用メモリ(ローカルデータストアメモリ212またはグローバルメモリ210など)を介して、または特定のデータタイプ専用のより特定のストレージ領域を介して行われ得る。
ある特定のシェーダプログラムが、パイプラインの後続の部分で使用されない何らかのデータを出力することが起こり得る。そのような出力データが、ローカルデータストアメモリ212またはグローバルメモリ210などのストレージに格納されている場合、グラフィックスレンダリングは、使用されないデータを格納するメモリや、使用されるデータ間のメモリにおけるギャップのため、効率が低下する。このような非効率性が生じる状況の一例は、ハルシェーダ及びドメインシェーダを含むシェーダプログラムの対を用いる状況である。この例示的な状況では、アプリケーションプログラマが、単一のバージョンまたは限られた数のバージョンの特定のハルシェーダプログラムを作成し、それ以上のバージョンのドメインシェーダプログラムを作成することが起こり得る(そして実際に頻繁に発生する)。このような状況では、1つ以上のハルシェーダプログラムは、それぞれ複数の異なるドメインシェーダプログラムと連携するように設計されている。したがって、1つ以上のハルシェーダプログラムは、そのような各ハルシェーダと連携し得る様々なドメインシェーダが使用できる可能な全ての出力を出力する必要がある。したがって、いずれかの特定のハルシェーダ/ドメインシェーダの組み合わせでは、ハルシェーダによって出力されたデータの一部がそのドメインシェーダによって使用されず、ハルシェーダのためのストレージスペースの少なくとも一部が無駄になる。更に、コンパイラの実装方法によっては、使用されるデータ間にメモリにおけるギャップが存在する場合がある。パック形式でメモリ内のデータを再編成することで、メモリフットプリントを削減し、有効なメモリ帯域幅を増加させる。いくつかのシナリオでは、コンパイラ450は、ハルシェーダによって出力された特定のデータ点が、グラフィックス処理パイプライン200の後続のステージによって使用されるかどうかを識別することができない。このような状況では、コンパイラは、控えめな推定または実行時の確認を使用する可能性がある。一例では、パッチは、0以下であるか、または数ではない、エッジテッセレーション係数を有する。このようなシナリオでは、コンパイラは、ハルシェーダに追加の命令を生成して、実行時にテッセレーション係数を確認する。
図4は、一実施例による、シェーダ間データ通信のためのメモリ使用率を改善する技法を示す。一般に、本技法は、1つ以上の他のシェーダプログラムがデータをどのように使用するかに関する情報に基づいて、そのデータを出力するシェーダプログラムを変更すること、及びそのデータを使用する1つ以上の他のシェーダプログラムを変更することを含む。コンパイラ450は、ドライバ122の一部として示されている。コンパイラ450は、アプリケーションプログラムに指定されたコードを受け付け、そのコードをコンパイルして、グラフィックス処理パイプライン134の様々なステージで使用するためのコンパイル済みシェーダプログラムを生成する。ドライバ122は、コンパイル済みシェーダプログラムを、実行のためグラフィックス処理パイプライン134に伝送する。コンパイラ450はドライバ122の一部として示されているが、当業者であれば、コンパイラ450は、代わりに独立したものであってもよく、または別のソフトウェアモジュールの一部であってもよいことを理解するであろう。
本明細書の他の箇所で説明するように、アプリケーションは、有効にされる任意選択のシェーダステージと、グラフィックス処理パイプライン134の様々なステージに使用されることになる特定のシェーダプログラムとを指定するグラフィックスパイプライン構成情報を指定する。このグラフィックスパイプライン構成情報は、図4にグラフィックスパイプライン状態470として示されている。
ドライバ122は、グラフィックスパイプライン状態470を調べて、どのシェーダステージが有効化されているか、ならびに、どの特定のシェーダプログラムがそれらのステージに使用されるかを判定する。ドライバ122は、第1のシェーダプログラム402がパイプラインステージの1つに使用され、かつ1つ以上の第2のシェーダプログラム410が後続のパイプラインステージに使用されることを判定し、その判定した情報をコンパイラ450に渡す。コンパイラ450は、第1のシェーダプログラム402の命令、及び場合によっては第2のシェーダプログラム(複数可)410の命令を分析して、第1のシェーダプログラム402が、第2のシェーダプログラム(複数可)410のいずれによっても使用されないデータを出力するかどうかを判定する(この分析は、本明細書の他の箇所では「出力使用分析」と呼ばれる)。
いくつかの実施態様では、コンパイラ450は、特定のシェーダプログラムからの特定の出力が、特定の他のシェーダプログラムによってのみ使用され得ることを把握している。そのような状況では、いずれかの特定の分析された第1のシェーダプログラム402について、コンパイラ450は、出力使用分析のために分析される第2のシェーダプログラム(複数可)410を、第1のシェーダプログラム402から出力されるデータを場合により使用し得るシェーダプログラムに限定する(例えば、ハルシェーダは、ドメインシェーダによってのみ使用されるデータを出力することが知られているので、コンパイラ450は、ハルシェーダプログラムが第1のシェーダプログラム402である出力使用分析の少なくとも1つのインスタンスを、ドメインシェーダプログラムのみが第2のシェーダプログラム410として分析されるように制限する)。他の実施態様では、コンパイラは、データを出力するシェーダプログラムの後に実行される各シェーダプログラムを分析して、そのデータ出力が他の何らかのシェーダプログラムによって使用されるかどうかを判定する。出力使用分析の実行に応答して、コンパイラ450は、第1のシェーダプログラム402によって出力されるデータの一部が、第2のシェーダプログラム410のいずれによっても使用されないと判定した場合に、コンパイラ450は、出力使用分析に基づいて、第1のシェーダプログラム402及び第2のシェーダプログラム410のうちの1つ以上を変更する。
コンパイラ450によって実行される出力使用分析は、第1のシェーダプログラム402によって出力されるデータを識別することを含む。より具体的には、コンパイラ450は、出力命令408を調べて、第1のシェーダプログラム402によって出力されるデータを識別する。いくつかの状況において、第1のシェーダプログラム402によって出力される特定の各データは、コンパイラ450が第2のシェーダプログラム410を調べて、第1のシェーダプログラム402によって出力されたデータのうち、第2のシェーダプログラム410のいずれによっても使用されていないデータがあるかどうかを判定する。
コンパイラ450は、第1のシェーダプログラム402によって出力されたデータのうち、第2のシェーダプログラム410のいずれによっても使用されていないデータがあるかどうかを判定するために、第2のシェーダプログラム410のそれぞれの入力命令412を調べて、入力命令412が第1のシェーダプログラム402の出力命令408によって出力されるデータの全てを入力するかどうかを判定する。第1のシェーダプログラム402の出力命令408によって出力されたデータのうち、第2のシェーダプログラム410のいずれの入力命令412によっても入力されないデータがある場合、コンパイラ450は、そのようなデータが第2のシェーダプログラム410のいずれによっても使用されていないと判定する。いくつかの状況では、データが第2のシェーダプログラム410によって使用されるかどうかに関する確認は、コンパイル時に実行することができない。そのような状況では、コンパイラ450は、実行時確認を実行する命令を挿入して、第1のシェーダプログラム402から出力されるデータが、後続のシェーダプログラムによって使用されるかどうかを検出する(その一例は、テッセレーション係数がゼロ以下であることに基づいて、パッチがカリングされるべきかどうかを判定するハルシェーダである)。
コンパイラ450が、第2のシェーダプログラム410によって使用されないデータが存在せず、かつメモリ内で第1のシェーダプログラムから第2のシェーダプログラムに渡されたデータの間にギャップが存在しないであろうことを判定した場合、コンパイラ450は、本明細書に記載の技法に従って、第1のシェーダプログラム402または第2のシェーダプログラム410を変更することはない。メモリ内の使用されるデータ間にギャップが存在する場合、コンパイラ450はデータにデータパッキングを適用する。コンパイラは、第1のシェーダプログラムの出力命令と第2のシェーダプログラムの入力命令との両方を変更して、パック形式に従ってメモリにアクセスする。コンパイラ450が、第2のシェーダプログラム410のいずれによっても使用されていないデータがあると判定した場合、コンパイラ450は、その第1のシェーダプログラムの使用されないデータのメモリ書き込みまたはメモリ格納を発生させない。使用されないデータを特定した後にデータパッキングが行われる状況では、コンパイラ450は、第1のシェーダプログラムにおける出力命令と、第2のシェーダプログラムにおける入力命令とを、パック形式のメモリデータにアクセスする形式で生成する。いくつかの状況では、コンパイラ450は、(テッセレーション係数の数が0未満であるかどうかを確認するなどのために)使用されないデータの実行時確認を実行するための命令を挿入する。
次に、データのパッキングの概念について更に詳細に説明する。第2のシェーダプログラム410のいずれによっても使用されないデータを出力する出力命令408には、複数のデータ項目を出力するものがある。一実施例では、ハルシェーダプログラムの出力命令は、ドメインシェーダプログラムによって消費される複数の制御点データ点を出力するが、それらの制御点データ点の少なくとも一部は、ドメインシェーダプログラムによって使用されない。複数のデータ項目を出力する出力命令の場合、コンパイラ450は、それらのデータ項目のうち、どれが第2のシェーダプログラム410のいずれによっても使用されないかを判定する。コンパイラ450は、それらのデータ項目の全てが使用されない場合には、メモリ書き込み命令またはメモリ格納命令を削除し、または使用されるデータの書き込みもしくは格納を行うだけの命令を生成する。元の出力命令に従って、または出力使用分析後に、データ間のギャップがメモリ内に存在する場合、コンパイラ450はデータパッキングを実行する。このデータパッキングは、第2のシェーダプログラムによって使用されるデータのメモリ位置を識別することを含む。コンパイラ450は、この情報を使用して、第1のシェーダプログラム420内のパッキング済みデータに対する変更済み出力命令426と、第2のシェーダプログラム430内の、それらのパッキング済みデータを使用する変更済み入力命令434とを生成する。データパッキングはまた、コンパイラ450が小さなサイズの出力命令及び入力命令を集約し、その結果、より大きなデータチャンクで動作するより少ない命令が実行されることを可能にする。
データ項目をパッキングすることで、データ項目に割り当てられる総メモリスペースが削減され、コンパイラ450が、複数のメモリアクセス命令を集約することが可能になる。使用されないデータを出力使用分析によって特定することは、データパッキングにおいて、使用されるデータのみをパッキングするのに有用である。一実施例では、第1の出力命令は4つのデータ項目を出力するが、1つのみが第2のシェーダプログラム410によって使用され、第2の出力命令は異なる4つのデータ項目を出力するが、3つのみが第2のシェーダプログラム410によって使用される。これらのデータ項目をパッキングすることにより、コンパイラ450は、使用される4つの項目(1つのデータ項目に3つのデータ項目を加えた4つの項目)を出力する1つの出力命令を生成することが可能になる。なお、生成された出力命令426が、いくつかの使用されないデータを出力する出力命令を少なくともいくつか含むように、パッキングが不完全である可能性があることに留意されたい。上記の実施例の変更においては、第1の出力命令と第2の出力命令とが共に1つのデータ項目を出力する場合には、結果として生じる出力命令は4つのデータ項目を出力し、そのうちの2つのみが使用され得る。しかし、そのシナリオでは、8つのデータ項目の代わりに4つのデータ項目のためにメモリを使用して、使用されるメモリが少なくなり、2つの出力命令の代わりに1つの出力命令を発行して、発行されるメモリ命令が少なくなるので、この結果は、それぞれ1つのデータ項目のみを出力する2つの出力命令よりも優れている。
コンパイラ450はまた、変更済み出力命令426を生成することに加えて、第2のシェーダプログラム410の入力命令412に基づいて、変更済み入力命令434を生成する。より具体的には、第2のシェーダプログラム410において、入力命令412は、出力命令408によって出力されるデータと同じ形式のデータを入力する。データがメモリにパッキングされると、コンパイラ450は、パック形式を有するデータを入力するために、第2のシェーダプログラム430内に変更済み入力命令434を生成する。上記の例を用いて、コンパイラ450は、第2のシェーダプログラム430の本体432で使用されるデータ項目を入力するための入力命令を1つ生成し、または、あまり理想的ではないパック形式(4つのデータ項目)で、そのうちの2つが本体432で使用される4つのデータ項目を入力するための入力命令を生成する。入力データは通常、シェーダプログラムのその他の部分で使用される前に、メモリからレジスタへ、またはローカルデータストアメモリ212などのローカルメモリへ読み出される。
上記のように、出力使用分析は、コンパイラ450が第1のシェーダプログラム402によって出力されるどのデータ項目が、他の第2のシェーダプログラム410によって使用されないかを判定し、特定のシェーダステージ(したがって、特定のグラフィックスパイプライン状態470によって定義される特定のプログラム)に限定され得る。コンパイラ450が分析を特定のシェーダプログラムに制限する状況の一実施例は、ハルシェーダステージ306及びドメインシェーダステージ310を含み、これらは固定機能テッセレータステージ308と共にテッセレーションを実装する。本実施例では、ハルシェーダプログラムは、テッセレーション係数を含むパッチ制御点及びパッチ定数を出力し、ドメインシェーダプログラムは、ハルシェーダから出力される制御点、テッセレーションステージ308から出力されるドメイン点、及びハルシェーダプログラムから出力されるパッチ定数を入力する。この状況では、コンパイラ450は、ハルシェーダプログラムの出力命令とドメインシェーダプログラムの入力命令とを分析して、ハルシェーダプログラムによって出力されたデータ(例えば、パッチ制御点またはパッチ定数)のうち、ドメインシェーダプログラムによって入力されていないデータがあるかどうかを判定する。そのようなデータが存在すると判定した時点で、コンパイラ450は、本明細書に記載の技法に従って、ハルシェーダプログラム及び/またはドメインシェーダプログラムを変更する。コンパイラ450は、他の任意のシェーダプログラム(ジオメトリシェーダプログラムまたはピクセルシェーダプログラムなど)を分析して、ハルシェーダプログラムの出力がそれらの他のシェーダプログラムのいずれかによって使用されるかどうかを判定することはしない。
異なるグラフィックスパイプライン状態470では、異なるバージョンのシェーダプログラムが使用されることが起こり得ることに留意されたい。コンパイラ450は、本明細書で説明される分析を様々なグラフィックスパイプライン状態に対して実行する。したがって、コンパイラ450は、様々な第1のシェーダプログラムを異なるように変更することが可能であり、または、あるグラフィックスパイプライン状態で使用される、あるシェーダプログラムを、異なるグラフィックスパイプライン状態で使用される同じシェーダプログラムとは異なる方法で変更することさえも可能である。例えば、第1のグラフィックスパイプライン状態において、ある第1のシェーダプログラムは、第2のシェーダプログラムと組み合わされて使用されるが、第2のグラフィックスパイプライン状態において、同じ第1のシェーダプログラムは、別の第2のシェーダプログラムと組み合わされて使用されることが可能である。この状況では、コンパイラ450は、グラフィックスパイプライン状態ごとに、本明細書で説明されるシェーダプログラムの分析及び変更を実行し、それによって、結果として、様々なグラフィックスパイプライン状態に対して、同じ第1のシェーダプログラムの異なる変更バージョンがもたらされ得る。
図5は、一実施例による、ハルシェーダプログラム及びドメインシェーダプログラム対の分析を説明するブロック図である。グラフィックスパイプライン状態570は、図4のグラフィックスパイプライン状態470に類似しており、テッセレーションが有効であることをグラフィックスパイプライン状態570が指定し、更にハルシェーダプログラム502及びドメインシェーダプログラム510が、それぞれハルシェーダステージ306及びドメインシェーダステージ310に使用されることになることをグラフィックスパイプライン状態570が指定する特定の特徴を有する。
入力ハルシェーダプログラム502及び入力ドメインシェーダプログラム510は、例えば、アプリケーションによって指定される事前コンパイルプログラムである。コンパイラ450は、これらのシェーダプログラムを、それぞれコンパイル済みハルシェーダプログラム520及びコンパイル済みドメインシェーダプログラム530に変換する。入力ハルシェーダプログラム502は、アプリケーションによって指定されるように、入力命令504、本体506、及び出力命令508を含む。入力命令504により、パッチ制御点などのハルシェーダ入力データは(例えば、頂点シェーダステージ304によって書き込まれた位置から)本体506内の命令が利用可能な位置に入力される。本体506は、入力の処理または変更を行って、入力ハルシェーダの入力データに少なくとも部分的に基づき、パッチ制御点及びパッチ定数データのうちの1つ以上を生成するなど、ハルシェーダの作業を実行するための命令を含む。出力命令508により、生成された1つ以上のパッチ制御点またはパッチ定数などのデータは、ドメインシェーダプログラム510(及びテッセレータステージ308)による入力に利用可能な出力位置に書き込まれる。いくつかの実施態様では、この出力位置は、ローカルデータストアメモリ212またはグローバルメモリ210などのメモリである。
ドメインシェーダプログラム510は、アプリケーションによって指定されるように、入力命令512、本体514、及び出力命令516を含む。入力命令512により、ハルシェーダプログラム502から出力される制御点、テッセレータステージ308によって生成されるドメイン点、及びハルシェーダプログラム502によって出力されるパッチ定数などのドメインシェーダ入力データが読み込まれ、本体414の命令が利用可能な位置(レジスタ内またはローカルデータストアメモリ212内など)に配置される。本体514は、入力データに基づいて出力頂点を生成する命令を含み、出力命令516は、後続のステージによる使用のための位置(特殊メモリ、ローカルデータストアメモリ212、またはグローバルメモリ210など)に出力頂点を出力する。
動作中、コンパイラ450は、グラフィックスパイプライン状態570を調べて、後続のジオメトリをレンダリングするために使用されるパイプラインがテッセレーションを有効にしており、ハルシェーダプログラム及びドメインシェーダプログラムが、図5に示されるハルシェーダプログラム502及びドメインシェーダプログラム510であることを判定する。コンパイラ450は、ハルシェーダプログラム502の出力命令508及びドメインシェーダプログラム510の入力命令512を分析する。コンパイラ450は、出力命令508の少なくともいくつかの命令が、入力命令512によって入力されない少なくともいくつかの制御点またはパッチ定数を出力することを判定する。この決定に応答して、コンパイラ450は、メモリ内のデータレイアウトがデータパッキングによって変更された場合、入力ハルシェーダプログラム502内の出力命令508から変更済み出力命令526を生成し、入力ドメインシェーダプログラム510内の入力命令512から変更済み入力命令534を生成する。「変更済み」という用語は、コンパイル済み命令が、本明細書に開示された技法が適用されなかった場合と異なることを意味する。コンパイラは、ドメインシェーダ510の入力命令512によって使用されない制御点またはパッチ定数を出力する出力命令を生成しない。制御点及びパッチ定数を含む使用されるデータの間にメモリにおいてギャップが存在する場合、コンパイラ450は、データパッキングを実行するように命令を構成する。具体的には、コンパイラ450は、パッキングされた制御点及びパッチ定数のデータのメモリ位置を追跡する。コンパイラ450は、この情報を使用して、入力ハルシェーダプログラム502内の出力命令508を、変更済みハルシェーダプログラム420内の変更済み出力命令526に変換して、制御点及びパッチ定数をパック形式でメモリに出力する。コンパイラ450はまた、この情報を使用して、入力ドメインシェーダプログラム510内の入力命令512を、生成されたドメインシェーダプログラム530内の変更済み入力命令534に変換して、制御点及びパッチ定数をパック形式でメモリから入力する。入力ハルシェーダプログラム502からの複数の出力命令は、それらの出力データがメモリ内で連続しており、組み合わされたデータサイズがメモリ出力命令に適合する場合、変更済み出力命令526に「集約」される。同様に、入力ドメインシェーダプログラム510の複数の入力命令512は、それらの入力データがメモリ内で連続しており、組み合わされたデータサイズがメモリ入力命令に適合する場合、変更済み入力命令534に集約される。変更済み入力命令534によって入力されるデータは、データが本体532のその他の部分によって使用される前に、レジスタか、またはローカルデータストアメモリ212などのローカルメモリにロードされる。ハルシェーダによって出力されたデータのうち、ドメインシェーダで使用されていないデータを識別するために、実行時確認が使用される場合がある。このような場合には、計算されたテッセレーション係数(例えば、テッセレーション係数は、0、0未満、または非数である)に基づいてカリングされるパッチのデータが含まれる。コンパイラ450は、パッチがカリングされるかどうかを判定するためにテッセレーション係数の値を確認するための追加の命令を生成し、それらのカリングされたパッチのデータについては変更済み出力命令526に出力命令を生成しない。
データパッキングと、データパッキングを用いたハルシェーダの出力命令の生成との具体例もまた示される。データパッキングなしで生成されたハルシェーダプログラムの出力命令のためのメモリ内のデータレイアウト580を示す。更に、データパッキングを用いて生成されたハルシェーダの出力命令に従ったメモリ内のデータレイアウト582を示す。データパッキングなしのハルシェーダ出力580は、6つの出力命令を含む。命令1から4はそれぞれ、対応するドメインシェーダによって入力された1つの制御点またはパッチ定数のデータ要素を出力する。命令5は、対応するドメインシェーダによって使用される制御点またはパッチ定数データ要素を出力しない。命令6によって出力された制御点またはパッチ定数データ要素は全て、対応するドメインシェーダによって使用される。制御点またはパッチ定数データ要素には、明確にするために、0から7までの任意の番号が付けられている。ドメインシェーダによって入力されないメモリ内の制御点またはパッチ定数データ要素には、「X」のマークが付けられている。
制御点またはパッチ定数データ要素0~7がドメインシェーダによって入力され、他の制御点またはパッチ定数データ要素はドメインシェーダによって入力されないことを識別したことに応答して、コンパイラは、変更済みハルシェーダ出力命令582を生成する。より具体的には、コンパイラ450は、データパッキングが施されたハルシェーダ出力582に示すように、8つのデータ要素全てをメモリにパッキングすることができると判定する。コンパイラ450はまた、最初の4つのデータ要素が単一の命令(変更済みHS出力命令1)によって出力され得、次の4つのデータ要素が別の単一の命令(変更済みHS出力命令2)によって出力され得ることを判定する。このパッキングにより、メモリフットプリントが24データ要素のサイズから8データ要素のサイズに削減され、メモリアクセス命令の数も6から2に削減される。更に、コンパイラ450は、パック形式でデータを入力するように構成された、ドメインシェーダプログラムの対応する入力命令を生成する。ドメインシェーダプログラムのこれらのパック形式の入力命令は、非パッキング済みデータを入力する命令がより少ない命令に集約されるので、使用される命令の数を減らすことになる。
状況次第で、コンパイラ450は、シェーダステージによって出力されたデータが、後続の何らかのシェーダステージによって使用されるかどうかを実行時に確認するための追加の命令を挿入する。具体的には、ハルシェーダとドメインシェーダとの組み合わせの場合、エッジテッセレーション係数がゼロ以下または非数のパッチがカリングされ、このパッチのデータはドメインシェーダで使用されないようになる。したがって、コンパイラ450は、一度計算されたテッセレーション係数の値を確認し、カリングされたパッチのデータを出力しないようにする命令を挿入する。
1つのグラフィックスパイプライン状態570は、ハルシェーダが特定のドメインシェーダと共に使用されるべきであると指定し、第2のグラフィックスパイプライン状態570は、同じハルシェーダが異なるドメインシェーダと共に使用されるべきであると指定することが可能である。この例の場合、コンパイラ450は、2つの異なるバージョンのハルシェーダを生成し、1つは各ドメインシェーダと共に使用するためのものである(もちろん、ドメインシェーダがハルシェーダによって出力されたデータを異なる方法で使用すると仮定している)。
図6は、一実施例による、メモリアクセスの数とシェーダプログラム間で伝送されるデータのメモリフットプリントとを削減するために、シェーダプログラムを変更する方法600のフロー図である。図1~5に関して示し、説明したシステムに関して説明されるが、技術的に実行可能な任意の順序で本方法を実行するように構成されるいずれのシステムも本開示の範囲内に含まれることが理解されるべきである。
方法600は、ステップ602で始まり、ここでコンパイラ450は、グラフィックスパイプライン構成(例えば、グラフィックスパイプライン状態470内またはグラフィックスパイプライン状態570内に含まれるグラフィックスパイプライン構成)に基づいて分析するシェーダプログラムを識別する。グラフィックスパイプライン構成は、(例えば、Direct3D 12の場合のように)アプリケーションの起動時に事前定義してもよく、または描画時に変更してもよい。アプリケーションの起動時に事前定義される場合、コンパイラ450は、シェーダコンパイルにおけるアプリケーションの起動時にも、方法600を実行して、シェーダプログラム間で伝送されるデータのメモリフットプリントを削減することができる。描画時に変更された場合、コンパイラ450は、分析されたシェーダプログラムの実行時コンパイル中に、描画時にも方法600を実行することができる。
グラフィックスパイプライン構成は、使用される特定のシェーダステージと、プログラマブルシェーダステージをサポートするステージで使用される特定のシェーダプログラムとを定義する。コンパイラ450は、分析する第1のシェーダプログラムを識別し、識別した第1のシェーダプログラムに基づいて、分析する1つ以上の第2のシェーダプログラムを識別する。第1のシェーダプログラムは、グラフィックスパイプライン構成によって指定される任意のシェーダプログラムであってよい。第2のシェーダプログラムは、第1のシェーダプログラムによって出力されたデータを使用することが知られているシェーダプログラムである。一実施例では、ハルシェーダが制御点及びパッチ定数などのデータを出力し、ドメインシェーダがそれらの制御点及びパッチ定数を入力する。
ステップ604において、コンパイラ450は、第1のシェーダプログラムによって出力されるが、任意の第2のシェーダプログラムによって使用されないデータを識別する。ステップ606において、コンパイラ450は、第2のシェーダプログラムでの使用法をコンパイル時に知ることができないデータを判定し、実行時確認と、そのようなデータが使用されない場合のデータ除去とのための命令を追加する。ステップ608において、メモリに書き込まれたときにギャップがある使用されるデータについて、コンパイラ450は、データパッキングを使用すべきかどうかと、どのように使用すべきかとを判定する。ステップ610において、コンパイラ450は、データパッキングを適用し、パック形式でデータの書き込み及び読み出しを行う、第1のシェーダのための出力命令と、第2のシェーダのための入力命令とを生成する。
1つ以上のシェーダプログラムのうちの少なくとも1つのシェーダプログラムを変更して、シェーダプログラム間で伝送されるデータのためのメモリ性能を改善する方法が、本明細書で提供される。本方法は、グラフィックスパイプライン状態に基づいて、分析するための第1のシェーダプログラム及び第2のシェーダプログラムを識別することと、第1のシェーダプログラムによって出力されるデータ点であって、第2のシェーダプログラムによって入力されないデータ点があるかどうかを判定することを含む第1の判定と、第1のシェーダプログラムによって出力されるが、第2のシェーダプログラムによって入力されないデータ点の識別が、コンパイル時に実行できず、実行時に実行することができる識別であるかどうかを判定することを含む第2の判定と、第1の判定及び第2の判定に基づいて、第1のシェーダプログラムを変更して、コンパイル済み第1のシェーダプログラムを生成することと、グラフィックス処理パイプラインでの実行のために、コンパイル済み第1のシェーダプログラムを出力することとを含む。
1つ以上のシェーダプログラムのうちの少なくとも1つのシェーダプログラムを変更して、シェーダプログラム間で伝送されるデータのためのメモリ性能を改善するコンピュータシステムが提供される。本コンピュータシステムは、シェーダプログラムを実行して、グラフィックスをレンダリングするように構成されたグラフィックス処理パイプラインを含むアクセラレーテッド処理デバイスと、コンパイラを実行するように構成されたプロセッサとを含む。コンパイラは、グラフィックスパイプライン状態に基づいて、分析するための第1のシェーダプログラム及び第2のシェーダプログラムを識別することと、第1のシェーダプログラムによって出力されるデータ点であって、第2のシェーダプログラムによって入力されないデータ点があるかどうかを判定することを含む第1の判定を実行することと、第1のシェーダプログラムによって出力されるが、第2のシェーダプログラムによって入力されないデータ点の識別が、コンパイル時に実行できず、実行時に実行することができる識別であるかどうかを判定することを含む第2の判定を実行することと、第1の判定及び第2の判定に基づいて、第1のシェーダプログラムを変更して、グラフィックス処理パイプラインでの実行のために出力されることになるコンパイル済み第1のシェーダプログラムを生成することとを行うように構成されている。
プロセッサによって実行されると、グラフィックスパイプライン状態に基づいて、分析するための第1のシェーダプログラム及び第2のシェーダプログラムを識別することと、第1のシェーダプログラムによって出力されるデータ点であって、第2のシェーダプログラムによって入力されないデータ点があるかどうかを判定することを含む第1の判定と、第1のシェーダプログラムによって出力されるが、第2のシェーダプログラムによって入力されないデータ点の識別が、コンパイル時に実行できず、実行時に実行することができる識別であるかどうかを判定することを含む第2の判定と、第1の判定及び第2の判定に基づいて、第1のシェーダプログラムを変更して、コンパイル済み第1のシェーダプログラムを生成することと、グラフィックス処理パイプラインでの実行のために、コンパイル済み第1のシェーダプログラムを出力することとにより、1つ以上のシェーダプログラムのうちの少なくとも1つのシェーダプログラムを変更して、シェーダプログラム間で伝送されるデータのためのメモリ性能を改善する命令を格納する、非一時的なコンピュータ可読媒体が提供される。
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴または要素は、他の特徴及び要素無しに単独で用いられてもよく、または他の特徴及び要素の有無に関わらず様々な組み合わせで用いられてもよい。
提供される方法は、汎用コンピュータ、プロセッサまたはプロセッサコアにおいて実施されてもよい。好適なプロセッサとしては、一例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連した1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他の種類の集積回路(IC)、及び/またはステートマシンが挙げられる。そのようなプロセッサは、処理されるハードウェア記述言語(HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体上に記憶されることが可能なそのような命令)の結果を用いて製造プロセスを構成することによって製造されてもよい。そのような処理の結果は、実施形態の態様を実施するプロセッサを製造する半導体製造プロセスにおいて次いで用いられるマスク作業であってもよい。
本明細書で提供される方法またはフローチャートは、汎用コンピュータまたはプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェアまたはファームウェアにおいて実施されてもよい。非一時的コンピュータ可読記憶媒体の例としては、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及び可搬型ディスクなどの磁気媒体、光磁気媒体、ならびにCD-ROMディスク及びデジタル多用途ディスク(DVD)などの光学媒体が挙げられる。

Claims (20)

  1. 1つ以上のシェーダプログラムのうちの少なくとも1つのシェーダプログラムを変更して、前記シェーダプログラム間で伝送されるデータのためのメモリ性能を改善する方法であって、
    グラフィックスパイプライン状態に基づいて、分析するための第1のシェーダプログラム及び第2のシェーダプログラムを識別することと、
    前記第1のシェーダプログラムによって出力されるデータ点であって、前記第2のシェーダプログラムによって入力されない前記データ点があるかどうかを判定することを含む第1の判定と、
    前記第1のシェーダプログラムによって出力されるが、前記第2のシェーダプログラムによって入力されないデータ点の識別が、コンパイル時に実行できず、実行時に実行することができる識別であるかどうかを判定することを含む第2の判定と、
    前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを変更して、コンパイル済み第1のシェーダプログラムを生成することと、
    グラフィックス処理パイプラインでの実行のために、前記コンパイル済み第1のシェーダプログラムを出力することと
    を含む、前記方法。
  2. 前記第1のシェーダプログラムの変更されていない命令に従って、使用されるデータの間にギャップが存在するかどうかを判定することを含む第3の判定を更に含む、請求項1に記載の方法。
  3. 前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを前記変更することは、
    前記第1のシェーダプログラムの少なくとも1つの出力命令を変更して、前記第2のシェーダプログラムによって使用されないデータを出力しないことを含む、請求項1に記載の方法。
  4. 前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを前記変更することは、
    前記第1のシェーダプログラムの少なくとも1つの出力命令を変更して、連続データの複数の出力を集約するパック形式でデータを出力することを含む、請求項1に記載の方法。
  5. 前記第1のシェーダプログラムの前記少なくとも1つの出力命令に加えられた前記変更に基づいて、前記第2のシェーダプログラムを変更して、パック形式でデータを入力することを更に含む、請求項4に記載の方法。
  6. 前記第1のシェーダプログラムがハルシェーダプログラムであり、前記第2のシェーダプログラムがドメインシェーダプログラムである、請求項1に記載の方法。
  7. 前記第1のシェーダプログラムによって出力される前記データ点が、制御点及びパッチ定数の一方または両方である、請求項6に記載の方法。
  8. 前記グラフィックスパイプライン状態が、アプリケーションの起動時に事前定義され、
    前記識別すること、前記判定すること、及び前記変更することのステップが、アプリケーションの起動時に行われる、請求項1に記載の方法。
  9. 前記グラフィックスパイプライン状態が描画時に指定され、
    前記識別すること、前記判定すること、及び前記変更することのステップが、描画時に行われる、請求項1に記載の方法。
  10. 1つ以上のシェーダプログラムのうちの少なくとも1つのシェーダプログラムを変更して、前記シェーダプログラム間で伝送されるデータのためのメモリ性能を改善するコンピュータシステムであって、
    シェーダプログラムを実行して、グラフィックスをレンダリングするように構成されたグラフィックス処理パイプラインを含むアクセラレーテッド処理デバイスと、
    コンパイラを実行するように構成されたプロセッサと、を備え、
    前記プロセッサが、
    グラフィックスパイプライン状態に基づいて、分析するための第1のシェーダプログラム及び第2のシェーダプログラムを識別することと、
    前記第1のシェーダプログラムによって出力されるデータ点であって、前記第2のシェーダプログラムによって入力されない前記データ点があるかどうかを判定することを含む第1の判定を実行することと、
    前記第1のシェーダプログラムによって出力されるが、前記第2のシェーダプログラムによって入力されないデータ点の識別が、コンパイル時に実行できず、実行時に実行することができる識別であるかどうかを判定することを含む第2の判定を実行することと、
    前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを変更して、前記グラフィックス処理パイプラインでの実行のために出力されることになるコンパイル済み第1のシェーダプログラムを生成することと、を行うように構成されている、コンピュータシステム。
  11. 前記コンパイラは、更に、
    前記第1のシェーダプログラムの変更されていない命令に従って、使用されるデータの間にギャップが存在するかどうかを判定することを含む第3の判定を実行するように構成されている、請求項10に記載のコンピュータシステム。
  12. 前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを前記変更することは、
    前記第1のシェーダプログラムの少なくとも1つの出力命令を変更して、前記第2のシェーダプログラムによって使用されないデータを出力しないことを含む、請求項10に記載のコンピュータシステム。
  13. 前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを前記変更することは、
    前記第1のシェーダプログラムの少なくとも1つの出力命令を変更して、連続データの複数の出力を集約するパック形式でデータを出力することを含む、請求項10に記載のコンピュータシステム。
  14. 前記コンパイラは、更に、
    前記第1のシェーダプログラムの前記少なくとも1つの出力命令に加えられた前記変更に基づいて、前記第2のシェーダプログラムを変更して、パック形式でデータを入力するように構成されている、請求項13に記載のコンピュータシステム。
  15. 前記第1のシェーダプログラムがハルシェーダプログラムであり、前記第2のシェーダプログラムがドメインシェーダプログラムである、請求項10に記載のコンピュータシステム。
  16. 前記第1のシェーダプログラムによって出力される前記データ点が、制御点及びパッチ定数の一方または両方である、請求項15に記載のコンピュータシステム。
  17. 前記グラフィックスパイプライン状態が、アプリケーションの起動時に事前定義され、
    前記識別すること、前記判定すること、及び前記変更することのステップが、アプリケーションの起動時に行われる、請求項10に記載のコンピュータシステム。
  18. 前記グラフィックスパイプライン状態が描画時に指定され、
    前記識別すること、前記判定すること、及び前記変更することのステップが、描画時に行われる、請求項10に記載のコンピュータシステム。
  19. プロセッサによって実行されると、
    グラフィックスパイプライン状態に基づいて、分析するための第1のシェーダプログラム及び第2のシェーダプログラムを識別することと、
    前記第1のシェーダプログラムによって出力されるデータ点であって、前記第2のシェーダプログラムによって入力されない前記データ点があるかどうかを判定することを含む第1の判定と、
    前記第1のシェーダプログラムによって出力されるが、前記第2のシェーダプログラムによって入力されないデータ点の識別が、コンパイル時に実行できず、実行時に実行することができる識別であるかどうかを判定することを含む第2の判定と、
    前記第1の判定及び前記第2の判定に基づいて、前記第1のシェーダプログラムを変更して、コンパイル済み第1のシェーダプログラムを生成することと、
    グラフィックス処理パイプラインでの実行のために、前記コンパイル済み第1のシェーダプログラムを出力することと
    により、1つ以上の前記シェーダプログラムのうちの少なくとも1つの前記シェーダプログラムを変更して、前記シェーダプログラム間で伝送されるデータのためのメモリ性能を改善する命令を格納する、非一時的なコンピュータ可読媒体。
  20. 前記第1のシェーダプログラムがハルシェーダプログラムであり、前記第2のシェーダプログラムがドメインシェーダプログラムである、請求項19に記載の非一時的なコンピュータ可読媒体。
JP2020564864A 2018-05-30 2019-03-25 グラフィックスパイプラインにおけるメモリ使用削減のためのコンパイラ支援技法 Active JP7122396B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/992,239 US10643369B2 (en) 2018-05-30 2018-05-30 Compiler-assisted techniques for memory use reduction in graphics pipeline
US15/992,239 2018-05-30
PCT/US2019/023933 WO2019231528A1 (en) 2018-05-30 2019-03-25 Compiler-assisted techniques for memory use reduction in graphics pipeline

Publications (2)

Publication Number Publication Date
JP2021525414A JP2021525414A (ja) 2021-09-24
JP7122396B2 true JP7122396B2 (ja) 2022-08-19

Family

ID=68694167

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020564864A Active JP7122396B2 (ja) 2018-05-30 2019-03-25 グラフィックスパイプラインにおけるメモリ使用削減のためのコンパイラ支援技法

Country Status (6)

Country Link
US (1) US10643369B2 (ja)
EP (1) EP3803777A4 (ja)
JP (1) JP7122396B2 (ja)
KR (1) KR102266962B1 (ja)
CN (1) CN112189215B (ja)
WO (1) WO2019231528A1 (ja)

Families Citing this family (5)

* 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
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
WO2022032452A1 (zh) * 2020-08-10 2022-02-17 厦门雅基软件有限公司 基于游戏引擎的着色数据处理方法、装置及电子设备
CN113342485A (zh) * 2021-05-19 2021-09-03 中天恒星(上海)科技有限公司 任务调度方法、装置、图形处理器、计算机系统及存储介质
CN116188243A (zh) * 2023-03-02 2023-05-30 格兰菲智能科技有限公司 图形绘制流水线管理方法和图形处理器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008505422A (ja) 2004-07-02 2008-02-21 エヌヴィディア コーポレイション 頂点及びフラグメントプログラムの最適化されたチェイニング
WO2016162669A1 (en) 2015-04-08 2016-10-13 Arm Limited Graphics processing systems
WO2018057294A1 (en) 2016-09-22 2018-03-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060071933A1 (en) * 2004-10-06 2006-04-06 Sony Computer Entertainment Inc. Application binary interface for multi-pass shaders
US7466318B1 (en) * 2005-04-13 2008-12-16 Nvidia Corporation Avoiding unnecessary uncovered texture fetches
GB2469526B (en) * 2009-04-17 2015-06-24 Advanced Risc Mach Ltd Generating and resolving pixel values within a graphics processing pipeline
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US9412193B2 (en) * 2011-06-01 2016-08-09 Apple Inc. Run-time optimized shader program
US9275498B2 (en) * 2012-08-09 2016-03-01 Qualcomm Incorporated GPU-accelerated path rendering
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
KR102066533B1 (ko) * 2013-11-19 2020-01-16 삼성전자 주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
JP6470766B2 (ja) 2014-07-10 2019-02-13 インテル・コーポレーション 現在の状態に基づいてシェーダプログラムをアップデートするための方法および装置
US10332308B2 (en) 2014-12-08 2019-06-25 Intel Corporation Graphic rendering quality improvements through automated data type precision control
US10210591B2 (en) * 2015-02-02 2019-02-19 Microsoft Technology Licensing, Llc Optimizing compilation of shaders
US10242419B2 (en) 2015-09-02 2019-03-26 Intel Corporation Compiler optimization to reduce the control flow divergence

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008505422A (ja) 2004-07-02 2008-02-21 エヌヴィディア コーポレイション 頂点及びフラグメントプログラムの最適化されたチェイニング
WO2016162669A1 (en) 2015-04-08 2016-10-13 Arm Limited Graphics processing systems
WO2018057294A1 (en) 2016-09-22 2018-03-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages

Also Published As

Publication number Publication date
KR20210002753A (ko) 2021-01-08
US10643369B2 (en) 2020-05-05
EP3803777A1 (en) 2021-04-14
JP2021525414A (ja) 2021-09-24
KR102266962B1 (ko) 2021-06-18
US20190371041A1 (en) 2019-12-05
WO2019231528A1 (en) 2019-12-05
CN112189215A (zh) 2021-01-05
CN112189215B (zh) 2022-12-06
EP3803777A4 (en) 2022-03-09

Similar Documents

Publication Publication Date Title
JP7122396B2 (ja) グラフィックスパイプラインにおけるメモリ使用削減のためのコンパイラ支援技法
KR102486347B1 (ko) 프리미티브 셰이더
JP6918919B2 (ja) 自動的にコンパイルされたコンピュートシェーダを用いるプリミティブカリング
JP7266021B2 (ja) 可変レートシェーディング
JP7253488B2 (ja) 複合ワールドスペースパイプラインシェーダステージ
US20180211434A1 (en) Stereo rendering
WO2018140223A1 (en) Stereo rendering
JP7121019B2 (ja) アウトオブオーダのピクセルシェーダのエクスポート
JP2023525725A (ja) データ圧縮の方法及び装置
US11972518B2 (en) Hybrid binning
US11741653B2 (en) Overlapping visibility and render passes for same frame
JP7308197B2 (ja) アクセラレーテッド処理デバイスの帯域幅を増加させるための並列データ転送
JP2023527323A (ja) 機械学習アクセラレータのための積層ダイ
US11900499B2 (en) Iterative indirect command buffers
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
US20240104685A1 (en) Device and method of implementing subpass interleaving of tiled image rendering
US20240087078A1 (en) Two-level primitive batch binning with hardware state compression
CN111417936B (zh) 用于增加加速处理装置的带宽的并行数据传送
JP2023518715A (ja) 部分的に常駐するテクスチャのサンプリング
JP2023532433A (ja) マルチサンプルアンチエイリアシングのためのロード命令

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220322

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20220322

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220617

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: 20220628

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20220727

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220808

R150 Certificate of patent or registration of utility model

Ref document number: 7122396

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150