Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7121019B2 - アウトオブオーダのピクセルシェーダのエクスポート - Google Patents
[go: Go Back, main page]

JP7121019B2 - アウトオブオーダのピクセルシェーダのエクスポート - Google Patents

アウトオブオーダのピクセルシェーダのエクスポート Download PDF

Info

Publication number
JP7121019B2
JP7121019B2 JP2019540524A JP2019540524A JP7121019B2 JP 7121019 B2 JP7121019 B2 JP 7121019B2 JP 2019540524 A JP2019540524 A JP 2019540524A JP 2019540524 A JP2019540524 A JP 2019540524A JP 7121019 B2 JP7121019 B2 JP 7121019B2
Authority
JP
Japan
Prior art keywords
fragment
pixel shader
order
shader stage
shaded
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
JP2019540524A
Other languages
English (en)
Other versions
JP2020506474A (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 JP2020506474A publication Critical patent/JP2020506474A/ja
Application granted granted Critical
Publication of JP7121019B2 publication Critical patent/JP7121019B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00Three-dimensional [3D] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00Three-dimensional [3D] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00Three-dimensional [3D] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/00Three-dimensional [3D] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/50Depth or shape recovery
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/70Determining position or orientation of objects or cameras
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)

Description

(関連出願の相互参照)
本願は、2017年1月27日に出願された米国特許出願第15/418,557号、及び、2017年2月3日に出願された欧州特許出願第17154680.7号の利益を主張するものであり、これらの内容は、言及することによって本明細書に完全に記載されているものとして援用される。
開示された実施形態は、概して、グラフィックス処理パイプラインに関し、特に、アウトオブオーダでピクセルシェーダをエクスポートすることに関する。
3次元グラフィックス処理パイプラインは、ホスト(コンピューティングシステムの中央処理装置等)からコマンドを受信し、これらのコマンドを処理して、ディスプレイデバイスに表示するピクセルを生成する。グラフィックス処理パイプラインは、頂点位置及び頂点属性の変換、ピクセルカラーの計算等の個々のタスクを実行するいくつかのステージを含む。グラフィックス処理パイプラインは、常に開発され、改良されている。
添付の図面と共に例として提供される以下の説明から、より詳細な理解を得ることができる。
1つ以上の開示された実施形態を実施し得る例示的なデバイスのブロック図である。 更なる詳細を示す図1のデバイスのブロック図である。 図2に示すグラフィックス処理パイプラインの更なる詳細を示すブロック図である。 一例による、アーリー(early)zモード及びレイト(late)zモードを示す図である。 アウトオブオーダエクスポートブロック及びスコアボードの詳細と、ピクセルシェーダステージからアウトオブオーダエクスポートを実行するための操作の例と、を示す図である。 一例による、グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをアウトオブオーダでエクスポートする方法のフロー図である。
本開示は、グラフィックス処理パイプラインの改良に関する。グラフィックス処理パイプラインは、アプリケーション又は他のエンティティによって要求された特定の順序(アプリケーションプログラミングインタフェースオーダ「APIオーダ」)でグラフィックスオブジェクトを処理する。但し、ピクセルシェーダステージ等のグラフィックス処理パイプライン内の特定のコンポーネントが、これらのオブジェクトを順不同(アウトオブオーダ)で処理する場合がある。本明細書では、ピクセルシェーダステージが処理済みのフラグメントをアウトオブオーダで完了及びエクスポートするのを可能にする技術が提供される。この技術は、スコアボードを用いて、ピクセルシェーダステージからエクスポートする準備ができているフラグメントが、APIオーダにおいて最新のフラグメントであるかどうかを判別することを含む。フラグメントがAPIオーダにおいて最新のものである場合、当該フラグメントがエクスポートされる。フラグメントがAPIオーダにおいて最新のものでない場合、当該フラグメントが破棄される。
図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を含む。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス118に提供するように構成されている。
APD116は、単一命令複数データ(SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列処理装置を含む。しかしながら、APD116によって実行されるものとして説明した機能は、SIMDパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
図2は、デバイス100のブロック図であり、APD116上の処理タスクの実行に関連する追加の詳細を示している。プロセッサ102は、プロセッサ102による実行のために、1つ以上の制御論理モジュールをシステムメモリ104内に保持している。制御論理モジュールは、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を含み、図示していない他のモジュールをオプションで含むことができる。これらの制御論理モジュールは、プロセッサ102及びAPD116の様々な態様の動作を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102で実行中の他のソフトウェアに対してハードウェアへのインタフェースを提供する。ドライバ122は、例えば、APD116の様々な機能にアクセスするために、アプリケーションプログラミングインタフェース(API)を、プロセッサ102で実行中のソフトウェア(例えば、アプリケーション126)に提供することによって、APD116の動作を制御する。また、ドライバ122は、APD116の処理コンポーネント(以下でさらに詳細に説明するSIMDユニット138等)による実行のために、シェーダコードをシェーダプログラムにコンパイルするジャストインタイムコンパイラを含む。
APD116は、例えばグラフィックス処理及び非グラフィックス処理等のように、並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。APD116は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ102から受信したコマンドに基づいて画像をディスプレイデバイス118にレンダリングするために使用することができる。また、APD116は、プロセッサ102から受信したコマンド、又は、グラフィックス処理パイプライン134の「通常の」情報フローの一部ではないコマンドに基づいて、例えばビデオ、物理シミュレーション、計算流体力学又は他のタスクに関係する動作等のようにグラフィックス処理に直接関連しない(若しくは関連していない)計算処理動作を実行する。
APD116は、SIMDパラダイムに従って、プロセッサ102の要求に応じて並列に動作を実行するように構成された1つ以上のSIMDユニット138を有する計算ユニット132(本明細書では、まとめて「プログラマブル処理装置202」と呼ばれる)を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各SIMDユニット138は、16個のレーンを含んでおり、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合には、レーンを予測によってスイッチオフにすることができる。予測を使用して、分岐制御フローを有するプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
シェーダエンジン132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるシェーダプログラムの単一のインスタンス化(instantiation)を表す。ワークアイテムは、通常、単一のSIMDユニット138上で「ウェーブフロント(wavefront)」として同時に実行することができる。複数のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれてもよい。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。ウェーブフロントは、単一のSIMDユニット138上で順次実行されてもよいし、異なるSIMDユニット138上で部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、シェーダプログラムの並列実行のインスタンスと考えることができ、各ウェーブフロントは、SIMDパラダイム(例えば、1つの命令制御ユニットが複数のデータを用いて同一の命令ストリームを実行する)に従って単一のSIMDユニット138上で同時に実行される複数のワークアイテムを含む。スケジューラ136は、異なるシェーダエンジン132及びSIMDユニット138上で様々なウェーブフロントをスケジューリングすることに関連する動作、並びに、APD116上で様々なタスクを調整するための他の動作を実行するように構成されている。
シェーダエンジン132によってもたらされる並列性は、例えば、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング演算及び他のグラフィックス動作等のグラフィックス関連動作に適している。プロセッサ102からグラフィックス処理コマンドを受信するグラフィックス処理パイプライン134は、並列実行のためにシェーダエンジン132に計算タスクを提供する。
また、シェーダエンジン132は、グラフィックスに関係しないか、グラフィックス処理パイプライン134の「通常」動作(例えば、グラフィックス処理パイプライン134の動作のために実行される処理を補足するために実行されるカスタム動作)の一部として実行されない計算タスクを実行するために使用される。プロセッサ102上で実行中のアプリケーション126又は他のソフトウェアは、係る計算タスクを定義するプログラム(ドライバ122によってコンパイルされ得る「計算シェーダプログラム」とよく呼ばれる)を、実行のためにAPD116に送信する。
図3は、図2に示すグラフィックス処理パイプライン134の更なる詳細を示すブロック図である。グラフィックス処理パイプライン134は、入力アセンブラステージ302と、ワールド空間(world-space)パイプライン304と、ラスタライザステージ314と、深度ブロック(depth block)315と、ピクセルシェーダステージと、出力マージャステージ318と、を含む。
入力アセンブラステージ302は、ユーザが充填したバッファ(例えば、プロセッサ102によって実行されるアプリケーション126等のソフトウェアの要求によって充填されたバッファ)からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。本明細書で使用される「ユーザ」という用語は、レンダリングするためのシェーダコード及び3次元オブジェクトをグラフィックス処理パイプライン134に提供するアプリケーション126又は他のエンティティを指す。「ユーザ」という用語は、APD116によって実行されるアクティビティを区別するために使用される。入力アセンブラステージ302は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ302は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
ワールド空間パイプライン304は、頂点及びプリミティブ操作を実行して、3次元ワールド空間で定義されたオブジェクトをスクリーン空間で定義された三角形に変換する。ワールド空間パイプライン304は、ユーザが充填したバッファ(例えば、プロセッサ102によって実行されるアプリケーション126等のソフトウェアの要求によって充填されたバッファ)からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。ワールド空間パイプライン304は、プロセッサ102から受信した入力を、スクリーンピクセルへのレンダリングにより適したフォーマットに変換する機能を実行する。より具体的には、ワールド空間パイプライン304は、頂点シェーディング機能と、テッセレーションが有効な場合にはテッセレーション機能と、ジオメトリシェーディングが有効な場合にはジオメトリシェーディング機能と、を実行する。
頂点シェーディングは、例えば、トランスフォーム、スキニング、モーフィング、頂点毎のライティング等の様々な頂点毎の操作を実行することを含む。トランスフォームは、頂点の座標をトランスフォーム(変換)するための様々な操作を含むことができる。これらの操作は、モデリングトランスフォーム、表示トランスフォーム(viewing transformations)、投影トランスフォーム、パースペクティブ(perspective)分割及びビューポートトランスフォームのうち1つ以上を含んでもよい。本明細書では、このようなトランスフォームは、トランスフォームが実行される頂点の座標、つまり「位置」を変更すると考えられる。頂点シェーディングの他の操作は、座標以外の属性を変更してもよい。頂点シェーディングは、1つ以上のシェーダエンジン132で実行される頂点シェーダプログラムとして部分的又は完全に実装される。いくつかの例では、頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に生成されたプログラムに基づいている。ドライバ122は、このようなプログラムをコンパイルして、シェーダエンジン132内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。他の例では、頂点シェーダプログラムは、ドライバ122によって直接提供されるか、APD116自体のメモリから取り出されるか、又は、他の技術的に実行可能な手段によって提供される。
テッセレーションは、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。テッセレーションは、入力プリミティブに基づいてテッセレーションのパッチを生成し、パッチのサンプルのセットを生成し、パッチのサンプルに対応する頂点の頂点位置を計算することを含む。テッセレーションは、プログラマブル処理装置202で実行されるシェーダプログラムによって、部分的又は完全に実行することができる。
ジオメトリシェーディングは、プリミティブ毎に頂点操作を実行する。様々なタイプの演算(例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン(fur-fin)生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等を含む)を、ジオメトリシェーディングを介して実行することができる。ジオメトリシェーディングの演算は、プログラマブル処理装置202上で実行されるシェーダプログラムによって実行されてもよい。
ワールド空間パイプライン304は、ハードウェア(固定機能及びプログラマブルハードウェアを含む)とソフトウェアとの組み合わせとして、全てのハードウェア(全ての固定機能ハードウェア、全てのプログラマブルハードウェア、若しくは、これらの組み合わせを含む)として、又は、ハードウェアプロセッサ上で実行されるソフトウェアとして完全に実装することができる。ワールド空間パイプライン304は、フレームバッファに書き込まれ、ディスプレイデバイス118に出力されるスクリーンピクセル、又は、深度バッファ、ステンシルバッファ若しくは他のバッファ等のフレームバッファ以外の表面に出力されるスクリーンピクセルへの最終的な変換のために、グラフィックス処理パイプライン134内の他のユニットによって処理されるプリミティブ(通常は三角形)を出力する。
ラスタライザステージ314は、ラスタライザステージ314の上流で生成された単純なプリミティブ(ワールド空間パイプライン330の終端の「三角形」とも呼ばれる)を受け入れてラスタライズする。ラスタライズは、特定のプリミティブによってカバーされるスクリーンピクセル(又はサブピクセルサンプル)を判別することと、カバーされているピクセル又はサブピクセルサンプル毎にフラグメントを出力することと、から構成されている。フラグメントは、グラフィックス処理パイプライン134の終端に出力される最終画像に影響を及ぼす場合もあれば、影響を及ぼさない場合もある、候補ピクセルである。フラグメントは、三角形のラスタライズの結果に基づいてラスタライザステージ314によって生成され、パイプラインの残りの部分で処理される。より具体的には、フラグメントは、ラスタライザステージ314で始まり、ラスタライズされている特定のトライアングルによってカバーされた各ピクセル又はサブピクセルサンプルに対応するフラグメントが出力される。ラスタライズは、固定機能ハードウェアによって実行されるか、プログラマブル処理装置202内で動作するシェーダプログラムによって実行されてもよい。
深度ブロック315は、zカリングを実行して、深度ブロック315によって既に処理された他のフラグメントによって遮られているフラグメントを除去する。zカリングは、フラグメントの深度値に基づいて実行される。zカリングを実行するために、深度ブロック315は、深度バッファ322を記憶する。深度バッファ322は、深度ブロック315によって処理されたフラグメントの深度値を記憶する。深度ブロック315は、ラスタライザステージ314からのフラグメントを、深度バッファ322に記憶された値と比較して、フラグメントが深度テストに合格したかどうかを判別する。フラグメントが深度テストに合格した場合、当該フラグメントはカリングされず、グラフィックス処理パイプライン134の残りの部分に進む。フラグメントが深度テストに合格しなかった場合には、当該フラグメントはカリングされる。
また、深度ブロック315は、スコアボード326を含むアウトオブオーダエクスポートブロック324を含む。アウトオブオーダエクスポートブロック324は、ピクセルシェーダステージ316からのアウトオブオーダエクスポートを容易にする。エクスポートは、ピクセルシェーダステージ316が並列処理ユニット202でフラグメントの処理を完了し(例えば、フラグメントの色を決定する)、グラフィックス処理パイプライン134の残りの部分による更なる処理のために、並列処理ユニット202からピクセルを送信するときに発生する。オブジェクトは、グラフィックス処理パイプライン134を介して「アプリケーションプログラミングインタフェースオーダ」(APIオーダ)で処理される。APIオーダは、CPU102(又はグラフィックスのレンダリングを要求する他のユニット)が、グラフィックス処理パイプライン134によって処理されるオブジェクトを要求する順序である。このオーダリングは、ピクセルシェーダステージ316が動作する方法に制限を課す。具体的には、ピクセルシェーダステージ316は、実際、APIオーダ外のフラグメントの処理を完了することができる。例えば、ピクセルシェーダステージ316は、古いフラグメントの前に新たなフラグメントを完了することができる。1つのアプローチでは、ピクセルシェーダステージ316は、APIオーダを維持するために、古いフラグメントが処理を完了するまで新たなフラグメントを保持し、次に、古いフラグメントをエクスポートしてから新たなフラグメントをエクスポートする必要がある。この「保持」アプローチでは、アウトオブオーダ値をバッファするために、少なくともいくつかのメモリを必要とする。したがって、別のアプローチでは、バッファを使用してピクセルシェーダエクスポートのAPIオーダを維持する代わりに、アウトオブオーダエクスポートブロック324は、ピクセルシェーダステージ316からのアウトオブオーダエクスポートを可能にするのを支援するスコアボード326を含む。アウトオブオーダエクスポートブロック324に関する更なる詳細を以下に提供する。
ピクセルシェーダステージ316は、上流で生成されたプリミティブとラスタライズの結果とに基づいて、スクリーンピクセルの出力値(例えば、カラー値)を計算する。ピクセルシェーダステージ316は、テクスチャメモリからテクスチャを適用することができる。ピクセルシェーダステージ316の動作は、プログラマブル処理装置202上で動作するシェーダプログラムによって実行される。
出力マージャステージ318は、ピクセルシェーダステージ316からの出力を受信し、これらの出力をマージして、スクリーンピクセルの最終色を決定するためにzテストやアルファブレンディング等の操作を実行して、ディスプレイデバイス118に出力するためにフレームバッファに書き込まれるスクリーンピクセルの最終色を決定する。
深度ブロック315によって実行されるzカリングは、2つのモード(すなわち、アーリーzカリング及びレイトzカリング)のうち1つのモードで実行される。図4は、一例による、アーリーzモード及びレイトzモードを示す図である。アーリーzカリング構成410では、深度ブロック315が、ラスタライザステージ314から受信したフラグメントに対してzカリングを実行し、その後、これらのフラグメントがピクセルシェーダステージ316によって処理される。レイトzカリング構成420では、フラグメントがピクセルシェーダステージ316によって処理された後、深度ブロック315が、ピクセルシェーダステージ316から受信したこれらのフラグメントに対してzカリングを実行する。
一般に、ピクセルシェーダステージ316より前にカリングされたフラグメントがピクセルシェーダステージ316によって処理されないので、アーリーzカリングは、レイトzカリングと比較して有利である。すなわち、レイトzカリングはピクセルシェーダステージ316の後にカリングするので、アーリーzカリングであれば、レイトzカリングが行われる場合よりも、ピクセルシェーダステージ316によって行われる「不要な」作業量が少なくなる。
レイトzカリングは、ピクセルシェーダステージ316がフラグメントの深度値を決定又は変更するとき等の特定の状況で実行される。より具体的には、ピクセルシェーダステージ316がフラグメントの深度値を決定又は変更をすることができる場合には、ピクセルシェーダステージ316の前にzカリングを行うことができない。その代わりに、レイトzカリングモードでは、ピクセルシェーダ316の後にzカリングが実行される。
アーリーzカリングとレイトzカリングの何れが実行されるかは、グラフィックス処理パイプライン134を流れるワーク(例えば、プリミティブ及びフラグメント)に対して設定されるモードである。モードは、ピクセルシェーダステージ316において、そのワークに対して深度値の更新又は生成が有効にされているかどうかに基づいて設定される。ピクセルシェーダステージ316において、深度値の更新又は生成が有効になっている場合にはレイトzカリングが用いられ、ピクセルシェーダステージ316において、当該ワークに対する深度値の更新及び生成が有効になっていない場合にはアーリーzカリングが用いられる。
zカリングはzテストを含み、その結果は、フラグメントがzテストを「クリア」し、グラフィックス処理パイプライン134内の後のユニットに渡されるか、それとも「カリング」されて破棄されるかを決定する。zテストは、入力フラグメントの深度値を、そのフラグメントに対応するスクリーン位置について、深度バッファ322に記憶されている深度値と比較して、そのフラグメントについてzテストが合格か不合格かを判別する。使用される特定のz関数は、zテストが実行される方法を決定する。zカリングは、深度バッファ322に記憶されている深度値の更新を必要とする場合がある。深度値が更新されるかどうかは、深度バッファ322の更新が有効であるかどうか、何れのz関数が使用されるか、及び、フラグメントがzテストに合格したか不合格であるかを含む、いくつかの要因によって決まる。
いくつかのz関数が可能である。可能なz関数には、「常に不合格(never)」、「バッファ値より小さい(less)」、「バッファ値より大きい(greater)」、「バッファ値より小さいか等しい(less than or equal)」、「バッファ値より大きいか等しい(greater than or equal)」、「バッファ値と等しい(equal)」、「バッファ値と等しくない(not equal)」、及び、「常に合格(always)」等がある。これらのz関数の各々については、深度バッファ322への書き込みを有効又は無効にすることができる。書き込みが有効かどうかは、特定のワーク(例えば、フラグメント又はトライアングル)に対して適用することができるモードである。概して、入力フラグメントが、深度バッファ322に記憶された深度値に関する条件を満たす場合、zテストは特定の関数について合格となる(例えば、入力フラグメントの深度値がz関数条件フレーズの前に配置され、深度バッファ322に記憶された深度値がz関数条件フレーズの後に配置される。したがって、z関数「less」に関するzテストは、入力フラグメントの深度値が、深度バッファ322に記憶されている深度値よりも小さいかどうかという条件を、その入力フラグメントのスクリーン位置について評価する)。実行されるzテストの比較は、フラグメントと、フラグメントのスクリーン位置に一致するスクリーン位置に関する深度バッファ322内の深度値と、の間で行われる。したがって、フラグメントのスクリーン位置がx=120、y=85の場合、実行されるzテストの比較は、そのフラグメントと、深度バッファ322に記憶されたスクリーン位置x=120、y=85に対応する深度値と、の間で行われる。
z関数「never」は、入力フラグメントを決して合格させない(したがって、常に破棄する)。z関数「always」は、常に入力フラグメントを合格させる(したがって、決して破棄しない)。「less」、「greater」、「less than or equal」、又は、「greater than or equal」のテストは、言及された条件(例えば、バッファ値よりも小さい、バッファ値よりも大きい等)が満たされる場合にはフラグメントを合格とし、言及された条件が満たされない場合にはフラグメントをカリングする。例えば、z関数が「less」であり、入力フラグメントが、深度バッファ322内の対応する深度値よりも小さい深度値を有する場合には、zテストはそのフラグメントを合格とし、フラグメントをカリングしない。z関数が「less」であり、入力フラグメントが、深度バッファ322内の対応する深度値以上の深度値を有する場合には、zテストはそのフラグメントを不合格とし、フラグメントをカリングする。z関数「equal」及び「not equal」は、フラグメントについて言及された条件が満たされる場合には、zテストはそのフラグメントを合格とし、このフラグメントをカリングせず、フラグメントについて言及された条件が満たされない場合には、zテストはそのフラグメントを不合格とし、深度ブロック315はこのフラグメントをカリングするという点で類似している。
上記のフラグメント毎に、深度バッファ322への書き込みを有効にすることも、無効にすることも可能である。深度バッファ322への書き込みが有効になっている場合、深度ブロック315は、フラグメントがzテストに合格したと判別したことに応じて、深度バッファ322を更新し、フラグメントがzテストに失敗した(不合格である)と判別した場合、深度バッファ322を更新しない。深度バッファの更新値は、入力フラグメントの深度値である。深度バッファ322への書き込みが有効になっていない場合には、フラグメントがzテストに合格したかどうかにかかわらず、深度バッファ322が更新されない。一例では、z関数が「less」であり、深度バッファ322への書き込みが有効である。この例において、入力フラグメントは、スクリーン位置x=80、y=50、深度値0.6を有する。スクリーン位置x=80、y=50に対応する深度バッファ322内の深度値は0.8である。フラグメントの深度値は、深度バッファ322に記憶されている深度値よりも小さいので、フラグメントがzテストに合格することを意味する。フラグメントがzテストに合格したので、そのフラグメントは、深度ブロック315から次のユニット(例えば、アーリーzが有効である場合にはピクセルシェーダステージ316、レイトzが有効である場合には出力マージャステージ318)に渡される。書き込みが有効にされ、フラグメントがzテストに合格したので、深度ブロック315は、スクリーン位置x=80、y=50についての深度バッファを、フラグメントの深度値(0.6に等しい)に更新する。
レイトzカリングとアーリーzカリングの何れが使われるかは、アウトオブオーダエクスポートブロック324が本明細書で説明する方法(例えば、図5)でフラグメントをアウトオブオーダでエクスポートするか、実質的に異なる方法(例えば、フラグメントをAPIオーダでエクスポートする等)でフラグメントをエクスポートするかに影響する。アーリーzカリングが適用される場合、アウトオブオーダエクスポートブロック324は、フラグメントをアウトオブオーダでエクスポートする。レイトzカリングが適用される場合、アウトオブオーダエクスポートブロック324がフラグメントをアウトオブオーダでエクスポートするかどうかは、特定の要因によって決まる。アーリーzカリングではzカリングが実行されるので、APIオーダで後のフラグメントは、前のフラグメントによって遮られないことがわかっている。したがって、最新のフラグメントでないフラグメントは、少なくとも1つの新たなフラグメントによって確実に上書きされることになる。レイトzカリングについては、ピクセルシェーダステージ316がフラグメントを処理した後に行われ、上述した技術は必ずしも適用されない(すなわち、フラグメントが順番にバッファリングされエクスポートされ、又は、ピクセルシェーダステージ316からフラグメントをエクスポートするために他の技術が使用される)。より具体的には、アーリーzカリングとは異なり、レイトzカリングが適用され、アウトオブオーダ技術が用いられる場合、深度テストがアウトオブオーダで実行され、誤った結果をもたらす可能性がある。このため、レイトzカリングが有効になっている場合には、アウトオブオーダ技術が特定のインスタンスに適用される。このような例は、以下の表1に反映されている。
Figure 0007121019000001
zカリング中の深度バッファへの書き込みが有効になっていない場合は、アウトオブオーダ技術が適用される。深度バッファへの書き込みが有効になっている場合には、z関数が「less than」若しくは「greater than」、「not equal」、又は、「always」の場合、アウトオブオーダ技術が用いられない。深度バッファへの書き込みが有効であり、z関数が「less than or equal」又は「greater than or equal」であり、特定の深度テストの結果が、入力フラグメントの深度値が深度バッファ内の深度値と等しいことである場合には、アウトオブオーダ技術が適用される。深度バッファへの書き込みが有効であり、z関数が「less than or equal」又は「greater than or equal」であり、特定の深度テストの結果が、入力フラグメントの深度値が深度バッファ内の深度値と等しくないことである場合には、アウトオブオーダ技術が適用されない。また、フラグメントのブレンディングが有効になっている場合には、アウトオブオーダ技術が適用されない。z関数が「less than」又は「greater than」である状況では、入力フラグメントの深度値が、深度バッファに記憶されている深度値と等しくない限り、アウトオブオーダ技術が適用されない。このような状況では、アウトオブオーダ技術が適用される。より具体的には、論理的なオーダで最も古いフラグメントは、この状況ではzテストに合格し、廃棄されない。
図5は、アウトオブオーダエクスポートブロック324及びスコアボード326の詳細と、ピクセルシェーダステージ316からアウトオブオーダエクスポートを実行するための操作の例と、を示す図である。これらの操作により、ピクセルシェーダステージ316は、シェーディングの済んだフラグメントを、APIオーダとは異なるオーダでエクスポートすることができるようになる。図5は、ピクセルシェーダステージ316からエクスポートされ、アウトオブオーダエクスポートブロック324に提供されたフラグメントのシーケンスを示しており、このシーケンスは、ピクセルシェーダステージ316から受信したオーダ(APIオーダに対してアウトオブオーダであってもよい)でこれらのフラグメントを処理して、処理済みフラグメントを出力マージャステージ318に出力する(但し、グラフィックス処理パイプラインの変形形態が可能であり、したがって、アウトオブオーダエクスポートブロック324が、処理済みフラグメントを出力マージャステージ318以外のブロックにエクスポートすることが可能であることを認識する必要がある)。
アウトオブオーダエクスポートブロック324は、ピクセルシェーダステージ316によって処理されているか処理されたフラグメントのフラグメントタイムスタンプ504を記憶するスコアボード326を含む。一時的に図3を参照すると、アウトオブオーダエクスポートブロック324を含む深度ブロック315は、ピクセルシェーダステージ316への入力を提供し、ピクセルシェーダステージ316からの出力を受信し、したがって、ピクセルシェーダステージ316に入力されるフラグメントと、ピクセルシェーダステージ316の出力でのフラグメントと、を処理することができる。
図5を再び参照すると、アウトオブオーダエクスポートブロック324は、グラフィックス処理パイプライン134の上流ステージ(例えば、ラスタライザステージ314)から受信したフラグメントに基づいて、スコアボード326を更新する。スコアボード326を更新することは、受信したフラグメントに基づいてフラグメントタイムスタンプ504を更新することを含む。より具体的には、アウトオブオーダエクスポートブロック324は、スクリーン位置毎に当該スクリーン位置のフラグメントタイムスタンプ504を更新し、ピクセルシェーダステージ316によって処理されているか以前に処理された最新のフラグメントを、APIオーダで反映する。したがって、各フラグメントタイムスタンプ504は、スクリーン位置と、当該スクリーン位置について最も新たに発生したフラグメントのタイムスタンプと、を含む。いくつかの例では、タイムスタンプは、相対的なAPIオーダの数値識別子であり、APIオーダの小さい数字は古いフラグメントを示し、大きい数字は新たなフラグメントを示す。
深度ブロック315は、処理のために、フラグメントをピクセルシェーダステージ316に送信する。ピクセルシェーダステージ316は、(例えば、ピクセルシェーダプログラムを実行することによって)フラグメントを処理し、かかる処理が完了すると、フラグメントをエクスポートする準備が整う。ピクセルシェーダステージ316がフラグメントをエクスポートする準備ができている場合、アウトオブオーダエクスポートブロック324は、そのエクスポート準備完了フラグメントがピクセルシェーダステージ316で発生した最新のフラグメントであることをスコアボード326が示すかどうかを判別する。エクスポート準備完了フラグメントがピクセルシェーダステージ316で発生した最新のフラグメントであることをスコアボード326が示す場合、アウトオブオーダエクスポートブロック324は、古いフラグメントがピクセルシェーダステージ316において処理を終了する前に当該フラグメントが出力される場合であっても、当該フラグメントを、グラフィックス処理パイプラインの残りの部分(例えば、出力マージャステージ318)による処理のためにエクスポートできるようにする。エクスポート準備完了フラグメントがピクセルシェーダステージ316で発生した最新のフラグメントではないことをスコアボード326が示している場合、エクスポートブロック324は、当該フラグメントを破棄する。
図5は、ピクセルシェーダステージ316からアウトオブオーダエクスポートブロック324によって受信されたいくつかの例示的なフラグメントに適用される上記の操作を示している。ピクセルシェーダステージ316からのいくつかの例示的なフラグメント502が示されている。これらのフラグメントがピクセルシェーダステージ316によってエクスポートの準備ができていると判別される順序は、図5の上から下へである。すなわち、一番上のフラグメント502(1)は、図示されたフラグメント502のうち最も古いものであり、最も下のフラグメント502(6)は、最も新しいものである。このオーダはAPIオーダではないが、フラグメントがピクセルシェーダステージ316によってエクスポートされる準備が整ったオーダである(APIオーダは、テキスト「オーダ」の後の番号として各フラグメント502に対して反映され、大きい番号が新たなフラグメントを示している)。
6つのフラグメント502が図5に示されている。図示されたフラグメントのうち最初に受信された第1フラグメント502(1)は、スクリーン位置32,16と、APIオーダ160と、を有する。図示されたフラグメントのうち2番目に受信された第2フラグメント502(2)は、スクリーン位置15,30と、APIオーダ102と、を有する。図示されたフラグメントのうち3番目に受信された第3フラグメント502(3)は、スクリーン位置15,30と、APIオーダ100と、を有する。第4フラグメント502(4)は、スクリーン位置14,1と、APIオーダ75と、を有する。第5フラグメント502(5)は、スクリーン位置32,16と、APIオーダ140と、を有する。第6フラグメント502(6)は、スクリーン位置32,16と、APIオーダ122と、を有する。
スコアボード列は、ピクセルシェーダからエクスポートする準備ができているフラグメント502を処理する直前のスコアボード326の状態を示している。第1フラグメントタイムスタンプ504(1)は、スクリーン位置15,30について最も新たに発生したフラグメントがAPIオーダ102を有することを示している。第2フラグメントタイムスタンプ504(2)は、スクリーン位置14,1について最も新たに発生したフラグメントがAPIオーダ75を有することを示している。第3フラグメントタイムスタンプ504(3)は、スクリーン位置32,16について最も新たに発生したフラグメントがAPIオーダ160を有することを示している。
第1フラグメント502(1)を受信する前に、スクリーン位置{15,30}、{14,1}及び{32,16}についてのエントリは、無効データを含む(これらのスクリーン位置に対してフラグメントが受信されていないと仮定する)。第1フラグメント502(1)を受信すると、アウトオブオーダエクスポートブロックは、第1フラグメント502(1)のものと一致するスクリーン位置のエントリについてスコアボードをチェックする。そのスクリーン位置に対する無効値を見つけると、アウトオブオーダエクスポートブロック324は、第1フラグメント502(1)をエクスポートし、スクリーン位置{32,16}のスコアボードエントリを更新して、第1フラグメント502(1)のAPIオーダタイムスタンプ(160である)を有するのを可能にする。
スクリーン位置{15,30}を有する第2フラグメント502(2)を受信すると、アウトオブオーダエクスポートブロック324は、スコアボード326をチェックし、そのスクリーン位置に対して無効なエントリが存在すると判別する。これに応じて、アウトオブオーダエクスポートブロック324は、第2フラグメント502(2)をエクスポートし、スクリーン位置{15,30}に対するスコアボード326のエントリを更新して、第2フラグメント502(2)のAPIオーダ値(102である)を記憶するのを可能にする。
スクリーン位置{15,30}を有する第3フラグメント502(3)を受信すると、アウトオブオーダエクスポートブロック324は、スコアボードをチェックし、第3フラグメント502(3)が、スクリーン位置{15,30}に対して現在記憶されているAPIオーダ値(102)よりも古いAPIオーダ値(100)を有していることから、スクリーン位置{15,30}のエントリが、第3フラグメントがAPIオーダで最後に発生したフラグメント502ではないことを示していると判別する。第3フラグメント502(3)が最後に発生したフラグメント502ではないと判別したことに応じて、アウトオブオーダエクスポートブロック324は、第3フラグメント502(3)をカリングし、スコアボード326を更新しない。
スクリーン位置{14,1}を有する第4フラグメント502(4)を受信すると、アウトオブオーダエクスポートブロック324は、スコアボード326をチェックし、そのスクリーン位置に対して無効なエントリが存在すると判別する。これに応じて、アウトオブオーダエクスポートブロック324は、第4フラグメント502(4)をエクスポートし、スクリーン位置{14,1}に対するスコアボード326のエントリを更新して、第4フラグメント502(4)のAPIオーダ値(75である)を記憶するのを可能にする。
スクリーン位置{32,16}を有する第5フラグメント502(5)を受信すると、アウトオブオーダエクスポートブロック324は、スコアボード326をチェックし、APIオーダ値140を有する第5フラグメント502(5)が、そのスクリーン位置の最後に発生したフラグメント502ではないと判別する。これに応じて、アウトオブオーダエクスポートブロック324は、そのフラグメントをカリングし、スコアボード326を更新しない。
スクリーン位置{32,16}を有する第6フラグメント502(6)を受信すると、アウトオブオーダエクスポートブロック324は、スコアボード326をチェックし、APIオーダ値122を有する第6フラグメント502(6)が、そのスクリーン位置の最後に発生したフラグメント502ではないと判別する。これに応じて、アウトオブオーダエクスポートブロック324は、そのフラグメントをカリングし、スコアボード326を更新しない。
特定のスクリーン位置に対する全てのフラグメントがエクスポートされた後、スコアボード326は、他のスクリーン位置で使用するメモリを節約するために、そのスクリーン位置に対するエントリの割り当てをスコアボード326から解除する。一実施例では、スコアボード326内のエントリを割り当てる必要があるが、それ以上エントリが利用できないフラグメントが見られる状況では、スコアボード326のエントリが解放されるまで、新たなフラグメントをピクセルシェーダステージ316に入れることができない。別の例では、フラグメントがピクセルシェーダステージ316に入るのを抑制する代わりに、新たなフラグメントを、ピクセルシェーダステージ316に入れて処理することができるが、エントリがスコアボード326において解放されるまで、エクスポートすることができない。
図6は、一例による、グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをアウトオブオーダでエクスポートする方法600のフロー図である。図1~図5に関して示し説明したシステムに関して説明するが、技術的に実行可能なオーダで方法を実行するように構成された任意のシステムも本開示の範囲内にあることを理解されたい。
方法600は、ステップ602で開始し、アウトオブオーダエクスポートブロック324がフラグメントを受信し、受信したフラグメントに基づいてスコアボード326を更新する。上述したように、スコアボード326を更新することは、受信したフラグメントのスクリーン位置について記憶されたAPIオーダ値を更新して、発生した最新のフラグメントのAPIオーダを示すことを含む。
ステップ604において、ピクセルシェーダステージ316は、フラグメントを処理する。この処理は、フラグメントに対してピクセルシェーダプログラムを実行することを含む。ステップ606において、アウトオブオーダエクスポートブロック324は、エクスポート準備完了フラグメントのAPIオーダが、スコアボード326内の同じスクリーン位置におけるAPIオーダと同じであるかどうかをチェックする。APIオーダが同じでない場合、そのAPIオーダは、そのフラグメントが最新のフラグメントではないことを示し、これにより、ステップ610において、アウトオブオーダエクスポートブロック324は、そのフラグメントを破棄する。ステップ606において、APIオーダが同じである場合、APIオーダは、そのフラグメントが最新のフラグメントであることを示し、これにより、ステップ610において、アウトオブオーダエクスポートブロック324は、そのフラグメントをグラフィックス処理パイプライン134の残りの部分にエクスポートするのを可能にする。
グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをエクスポートする方法が提供されている。方法は、アプリケーションプログラミングインタフェースオーダ(APIオーダ)に関して、ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することを含む。また、方法は、ピクセルシェーダ内のフラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成することを含む。さらに、方法は、スコアボードに基づいて、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントであるかどうかを判別することを含む。さらにまた、方法は、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、シェーディングされたフラグメントをエクスポートすることを含む。また、方法は、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントでない場合に、フラグメントを破棄することを含む。
グラフィックス処理パイプラインを含むアクセラレーテッド処理デバイス(APD)も提供されている。APDは、フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージと、アウトオブオーダエクスポートブロックと、を備える。アウトオブオーダエクスポートブロックは、アプリケーションプログラミングインタフェースオーダ(APIオーダ)に関して、ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持するように構成されている。また、アウトオブオーダエクスポートブロックは、スコアボードに基づいて、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントであるかどうかを判別するように構成されている。さらに、アウトオブオーダエクスポートブロックは、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、シェーディングされたフラグメントをエクスポートするように構成されている。さらにまた、アウトオブオーダエクスポートブロックは、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントでない場合に、フラグメントを破棄するように構成されている。
コンピューティングデバイスも提供されている。コンピューティングデバイスは、アクセラレーテッド処理デバイス(APD)と、アプリケーションプログラミングインタフェースオーダ(APIオーダ)でグラフィックスオブジェクトを処理するための要求を生成し、処理のためにAPDに要求を送信するように構成された中央処理装置と、を備える。APDは、フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージであって、フラグメントがグラフィックスオブジェクトに基づいている、ピクセルシェーダステージを含むグラフィックス処理パイプラインを備える。また、APDは、アプリケーションプログラミングインタフェースオーダ(APIオーダ)に関して、ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、スコアボードに基づいて、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントであるかどうかを判別することと、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、シェーディングされたフラグメントをエクスポートすることと、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントでない場合に、フラグメントを破棄することと、を行うように構成されたアウトオブオーダエクスポートブロックを備える。
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。

Claims (20)

  1. グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをエクスポートする方法であって、
    アプリケーションプログラミングインタフェースオーダ(APIオーダ)に関して、前記ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、
    前記ピクセルシェーダステージ内のフラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成することと、
    前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することと、
    前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントである場合に、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることと、
    前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントでない場合に、前記フラグメントを破棄することと、を含む、
    方法。
  2. 前記ピクセルシェーダステージ内のフラグメントを処理する前に、前記フラグメントに対してzカリングを実行することをさらに含む、
    請求項1の方法。
  3. 前記ピクセルシェーダステージ内のフラグメントを処理した後であって、前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別する前に、前記フラグメントに対してzカリングを実行することをさらに含む、
    請求項1の方法。
  4. 前記zカリングは、
    深度バッファへの書き込み無効
    「equal」z関数、又は、
    「less than or equal」z関数若しくは「greater than or equal」z関
    うち1つ以上を用いて実行される、
    請求項3の方法。
  5. 前記シェーディングされたフラグメントが、スクリーン位置及びアプリケーションプログラミングインタフェースオーダ(APIオーダ)に関連付けられており、
    前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することは、前記シェーディングされたフラグメントのAPIオーダを、前記スコアボード内のフラグメントの前記スクリーン位置に対して記憶されたAPIオーダと比較することを含む、
    請求項1の方法。
  6. 前記スコアボードを維持することは、
    前記ピクセルシェーダステージの上流にあるパイプラインステージからフラグメントを受信することと、
    前記フラグメントの前記スクリーン位置に対して、前記スコアボードに既に記憶されているAPIオーダと前記フラグメントのAPIオーダとのうち新しいオーダを反映するように、前記フラグメントの前記スクリーン位置に対するAPIオーダを前記スコアボードにおいて更新することと、を含む、
    請求項1の方法。
  7. 前記ピクセルシェーダステージの上流にあるパイプラインステージからフラグメントを受信することは、
    前記ピクセルシェーダステージのラスタライザステージからフラグメントを受信することを含む、
    請求項1の方法。
  8. 前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることは、前記グラフィックス処理パイプラインの出力マージャステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることを含む、
    請求項1の方法。
  9. 前記フラグメントを破棄する前に、前記フラグメントのブレンディングが無効になっていると判別することを含む、
    請求項1の方法。
  10. グラフィックス処理パイプラインを含むアクセラレーテッド処理デバイス(APD)であって、
    フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージと、
    アウトオブオーダエクスポートブロックと、を備え、
    前記アウトオブオーダエクスポートブロックは、
    アプリケーションプログラミングインタフェースオーダ(APIオーダ)に関して、前記ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、
    前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することと、
    前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントである場合に、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることと、
    前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントでない場合に、当該フラグメントを破棄することと、
    を行うように構成されている、
    アクセラレーテッド処理デバイス。
  11. 前記ピクセルシェーダステージでフラグメントを処理する前に、前記フラグメントに対してzカリングを実行するように構成された深度ブロックをさらに備える、
    請求項10のAPD。
  12. 前記ピクセルシェーダステージ内のフラグメントを処理した後であって、前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別する前に、前記フラグメントに対してzカリングを実行するように構成された深度ブロックをさらに備える、
    請求項10のAPD。
  13. 前記深度ブロックは、
    深度バッファへの書き込み無効
    「equal」z関数、又は、
    「less than or equal」z関数若しくは「greater than or equal」z関
    うち1つ以上を用いて前記zカリングを実行するように構成されている、
    請求項12のAPD。
  14. 前記シェーディングされたフラグメントが、スクリーン位置及びアプリケーションプログラミングインタフェースオーダ(APIオーダ)に関連付けられており、
    前記アウトオブオーダエクスポートブロックは、前記シェーディングされたフラグメントのAPIオーダを、前記スコアボード内のフラグメントの前記スクリーン位置に対して記憶されたAPIオーダと比較することによって、前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別するように構成されている、
    請求項10のAPD。
  15. 前記アウトオブオーダエクスポートブロックは、
    前記ピクセルシェーダステージの上流にあるパイプラインステージからフラグメントを受信することと、
    前記フラグメントの前記スクリーン位置に対して、前記スコアボードに既に記憶されているAPIオーダと前記フラグメントのAPIオーダとのうち新しいオーダを反映するように、前記フラグメントの前記スクリーン位置に対するAPIオーダを前記スコアボードにおいて更新することと、を行うことによって、前記スコアボードを維持するように構成されている、
    請求項10のAPD。
  16. 前記ピクセルシェーダステージの上流にあるパイプラインステージは、ラスタライザステージを備える、
    請求項10のAPD。
  17. 前記アウトオブオーダエクスポートブロックは、前記グラフィックス処理パイプラインの出力マージャステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることによって、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートするように構成されている、
    請求項10のAPD。
  18. 前記アウトオブオーダエクスポートブロックは、
    前記フラグメントを破棄する前に、前記フラグメントのブレンディングが無効になっていると判別するように構成されている、
    請求項10のAPD。
  19. アクセラレーテッド処理デバイス(APD)と、
    アプリケーションプログラミングインタフェースオーダ(APIオーダ)でグラフィックスオブジェクトを処理するための要求を生成し、処理のために前記APDに前記要求を送信するように構成された中央処理装置と、を備え、
    前記APDは、
    フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージであって、フラグメントがグラフィックスオブジェクトに基づいている、ピクセルシェーダステージと、
    アウトオブオーダエクスポートブロックと、を備え、
    前記アウトオブオーダエクスポートブロックは、
    アプリケーションプログラミングインタフェースオーダ(APIオーダ)に関して、前記ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、
    前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することと、
    前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることと、
    前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントでない場合に、当該フラグメントを破棄することと、
    を行うように構成されている、
    コンピューティングデバイス。
  20. 前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別する前に、前記フラグメントに対してzカリングを実行するように構成された深度ブロックをさらに備える、
    請求項19のコンピューティングデバイス。
JP2019540524A 2017-01-27 2018-01-10 アウトオブオーダのピクセルシェーダのエクスポート Active JP7121019B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/418,557 US10417815B2 (en) 2017-01-27 2017-01-27 Out of order pixel shader exports
US15/418,557 2017-01-27
EP17154680.7 2017-02-03
EP17154680.7A EP3355275B1 (en) 2017-01-27 2017-02-03 Out of order pixel shader exports
PCT/US2018/013226 WO2018140238A1 (en) 2017-01-27 2018-01-10 Out of order pixel shader exports

Publications (2)

Publication Number Publication Date
JP2020506474A JP2020506474A (ja) 2020-02-27
JP7121019B2 true JP7121019B2 (ja) 2022-08-17

Family

ID=57963141

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019540524A Active JP7121019B2 (ja) 2017-01-27 2018-01-10 アウトオブオーダのピクセルシェーダのエクスポート

Country Status (6)

Country Link
US (1) US10417815B2 (ja)
EP (1) EP3355275B1 (ja)
JP (1) JP7121019B2 (ja)
KR (1) KR102128028B1 (ja)
CN (1) CN110192225B (ja)
WO (1) WO2018140238A1 (ja)

Families Citing this family (4)

* 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
US11055904B2 (en) * 2019-08-27 2021-07-06 Arm Limited Optimizing depth testing in graphics processing systems that perform early and late depth testing
US11430080B2 (en) 2020-05-15 2022-08-30 Samsung Electronics Co., Ltd. Methods and apparatus for speculative execution of fragments in a graphics pipeline
US11481967B2 (en) * 2020-08-31 2022-10-25 Advanced Micro Devices, Inc. Shader core instruction to invoke depth culling

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008512771A (ja) 2004-09-13 2008-04-24 エヌヴィディア コーポレイション フラグメントシェーディングパイプラインにおけるスケーラビリティの向上
US20110080407A1 (en) 2009-10-07 2011-04-07 Duluk Jr Jerome F Pixel shader output map
US20140354654A1 (en) 2013-06-04 2014-12-04 Arm Limited Hidden surface removal in graphics processing systems

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1995033255A1 (en) * 1994-05-27 1995-12-07 Hughes Aircraft Company Low latency update of graphic objects in an air traffic control display
US6697064B1 (en) * 2001-06-08 2004-02-24 Nvidia Corporation System, method and computer program product for matrix tracking during vertex processing in a graphics pipeline
GB0319697D0 (en) * 2003-08-21 2003-09-24 Falanx Microsystems As Method of and apparatus for differential encoding and decoding
US8325184B2 (en) * 2007-09-14 2012-12-04 Qualcomm Incorporated Fragment shader bypass in a graphics processing unit, and apparatus and method thereof
US8719553B2 (en) 2008-01-31 2014-05-06 Arm Norway As Method for re-circulating a fragment through a rendering pipeline
US8760460B1 (en) 2009-10-15 2014-06-24 Nvidia Corporation Hardware-managed virtual buffers using a shared memory for load distribution
KR101719485B1 (ko) * 2010-09-20 2017-03-27 삼성전자주식회사 그래픽 처리 유닛에서의 사전 픽셀 제거를 위한 장치 및 방법
GB201103699D0 (en) * 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing
US8842122B2 (en) * 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
GB2511176B (en) * 2012-12-17 2015-04-15 Advanced Risc Mach Ltd Hidden surface removal in graphic processing systems
US9153070B2 (en) * 2012-12-17 2015-10-06 Arm Limited Hidden surface removal in graphics processing systems
US10169906B2 (en) * 2013-03-29 2019-01-01 Advanced Micro Devices, Inc. Hybrid render with deferred primitive batch binning
US9489344B2 (en) * 2013-06-27 2016-11-08 Arm Limited Methods of and apparatus for approximating a function
US9514563B2 (en) * 2013-08-30 2016-12-06 Arm Limited Graphics processing systems
US9978171B2 (en) * 2014-07-29 2018-05-22 Nvidia Corporation Control of a sample mask from a fragment shader program
US9824412B2 (en) * 2014-09-24 2017-11-21 Intel Corporation Position-only shading pipeline
GB2537137B (en) * 2015-04-08 2021-02-17 Advanced Risc Mach Ltd Graphics processing systems
US10002404B2 (en) * 2015-04-15 2018-06-19 Mediatek Singapore Pte. Ltd. Optimizing shading process for mixed order-sensitive and order-insensitive shader operations
US10664942B2 (en) * 2016-10-21 2020-05-26 Advanced Micro Devices, Inc. Reconfigurable virtual graphics and compute processor pipeline

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008512771A (ja) 2004-09-13 2008-04-24 エヌヴィディア コーポレイション フラグメントシェーディングパイプラインにおけるスケーラビリティの向上
US20110080407A1 (en) 2009-10-07 2011-04-07 Duluk Jr Jerome F Pixel shader output map
US20140354654A1 (en) 2013-06-04 2014-12-04 Arm Limited Hidden surface removal in graphics processing systems

Also Published As

Publication number Publication date
CN110192225A (zh) 2019-08-30
JP2020506474A (ja) 2020-02-27
EP3355275A1 (en) 2018-08-01
KR102128028B1 (ko) 2020-06-29
WO2018140238A1 (en) 2018-08-02
CN110192225B (zh) 2020-12-29
KR20190109413A (ko) 2019-09-25
EP3355275B1 (en) 2019-05-22
US10417815B2 (en) 2019-09-17
US20180218532A1 (en) 2018-08-02

Similar Documents

Publication Publication Date Title
US10102662B2 (en) Primitive culling using automatically compiled compute shaders
CN109690629B (zh) 图元着色器
KR102480787B1 (ko) 순서에 관계 없는 캐시 리턴
US9830741B2 (en) Setting downstream render state in an upstream shader
US12505604B2 (en) Hybrid binning
JP7741110B2 (ja) ビニングハードウェアにおけるきめ細かなリプレイ制御
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
JP7086073B2 (ja) Zカリング後の重複フラグメントの除去又は識別
JP7121019B2 (ja) アウトオブオーダのピクセルシェーダのエクスポート
US12406425B2 (en) Vertex index routing for two level primitive batch binning
US9401004B2 (en) State shadowing to support a multi-threaded driver environment
US10049487B2 (en) Identifying duplicate indices in an input index stream
WO2023224885A1 (en) Pipeline delay elimination with parallel two level primitive batch binning
US12488528B2 (en) Vertex index routing through culling shader for two level primitive batch binning
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
WO2022211966A1 (en) Post-depth visibility collection with two level binning
JP2023518715A (ja) 部分的に常駐するテクスチャのサンプリング

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210107

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211109

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220208

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220804

R150 Certificate of patent or registration of utility model

Ref document number: 7121019

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250