(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-03
(45)【発行日】2024-07-11
(54)【発明の名称】深度カリングを呼び出すためのシェーダコア命令
(51)【国際特許分類】
G06T 15/00 20110101AFI20240704BHJP
【FI】
G06T15/00 501
(21)【出願番号】P 2023509659
(86)(22)【出願日】2021-08-27
(86)【国際出願番号】 US2021047914
(87)【国際公開番号】W WO2022047136
(87)【国際公開日】2022-03-03
【審査請求日】2023-08-16
(32)【優先日】2020-08-31
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マットハウス ジー. ハイダス
(72)【発明者】
【氏名】クリストファー ジェイ. ブレナン
【審査官】三沢 岳志
(56)【参考文献】
【文献】特表2020-506474(JP,A)
【文献】米国特許出願公開第2014/0354654(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00
(57)【特許請求の範囲】
【請求項1】
装置であって、
インターフェースと、
パイプラインと、を備え、
前記パイプラインは、
出力を伝達するように構成されたシェーダコアと、
前記パイプラインにおいて前記シェーダコアに続くラスタライザであって、前記シェーダコアから前記出力を受信するように構成されたラスタライザと、
前記ラスタライザに接続されたカリングユニットと、を備え、
前記シェーダコアは、
ドローコールを受信することと、
前記ドローコールに応じて、
カリング関数クエリを生成するための命令を実行することと、
前記カリング関数クエリを前記カリングユニットに伝達することと、
前記カリング関数クエリに対する応答を前記カリングユニットから受信することと、
前記カリングユニットから受信した前記応答に基づいて、前記ドローコールを取り消すか、継続するか、又は、変更するかどうかを決定することと、
を行うように構成されている、
装置。
【請求項2】
前記カリングユニットは、前記カリング関数クエリに応じて、ライブ深度バッファにアクセスするためにカリング関数を実行するように構成されている、
請求項1の装置。
【請求項3】
前記カリングユニットは、前記シェーダコアによって合成されたエンティティに対して前記カリング関数を実行するように構成されている、
請求項2の装置。
【請求項4】
前記応答は、ブール値又はカバレッジ値を含む、
請求項1の装置。
【請求項5】
前記シェーダコアは、前記命令を実行した結果として、モード及び座標を前記カリングユニットに提供するように更に構成されている、
請求項1の装置。
【請求項6】
前記シェーダコアは、前記命令を実行するメッシュシェーダを含む、
請求項1の装置。
【請求項7】
前記シェーダコアは、前記カリングユニットに送信された複数の未処理のカリング要求を追跡するように更に構成されている、
請求項1の装置。
【請求項8】
シェーダコアが、ドローコールを受信することと、
前記ドローコールに応じて、
前記シェーダコアが、カリング関数クエリを生成するための命令を実行することと、
前記ドローコールに関して、前記カリング関数クエリを前記シェーダコ
アからカリングユニットに伝達することであって、前記カリングユニットは、パイプラインにおいて前記シェーダコアの後に存在する、ことと、
前記カリング関数クエリに対する応答を前記カリングユニットから受信することと、
インターフェースを介して前記カリングユニットから受信した前記カリング関数クエリに対する応答に基づいて、前記ドローコールを取り消すか、継続するか、又は、変更するかどうかを決定することと、
レンダリングされたプリミティブに対応するデータを、前記シェーダコアから、前記パイプラインにおいて前記シェーダコアに続くラスタライザに伝達することと、を含む、
方法。
【請求項9】
前記カリングユニットが、前記カリング関数クエリに応じて、ライブ深度バッファにアクセスするためにカリング関数を実行することを更に含む、
請求項8の方法。
【請求項10】
前記カリングユニットが、前記シェーダコアによって合成されたエンティティに対して前記カリング関数を実行することを更に含む、
請求項9の方法。
【請求項11】
前記応答は、ブール値又はカバレッジ値を含む、
請求項8の方法。
【請求項12】
前記シェーダコアが、前記命令を実行した結果として、モード及び座標を前記カリングユニットに提供することを更に含む、
請求項8の方法。
【請求項13】
メッシュシェーダが前記命令を実行することを更に含む、
請求項8の方法。
【請求項14】
前記シェーダコアが、前記カリングユニットに送信された複数の未処理のカリング要求を追跡することを更に含む、
請求項8の方法。
【請求項15】
システムであって、
カリングユニットと、
ラスタライザと、
シェーダコアと、を備え、
前記シェーダコアは、パイプラインにおいて前記カリングユニットの前に存在し、
第1のインターフェースを介して、レンダリングされたプリミティブに対応するデータを前記ラスタライザに伝達することと、
ドローコールを受信することと、
前記ドローコールを受信したことに応じて、
カリング関数クエリを生成するための命令を実行することと、
前記第1のインターフェースとは異なる第2のインターフェースを介して、前記カリング関数クエリを前記カリングユニットに伝達することと、
前記第2のインターフェースを介して前記カリングユニットから受信した前記カリング関数クエリに対する応答に基づいて、前記ドローコールを取り消すか、継続するか、又は、変更するかどうかを決定することと、
を行うように構成されている、
システム。
【請求項16】
前記カリングユニットは、前記カリング関数クエリに応じて、深度バッファにアクセスするためにカリング関数を実行するように構成されている、
請求項15のシステム。
【請求項17】
前記カリングユニットは、前記シェーダコアによって合成されたエンティティに対して前記カリング関数を実行するように構成されている、
請求項16のシステム。
【請求項18】
前記応答は、ブール値又はカバレッジ値を含む、
請求項15のシステム。
【請求項19】
前記シェーダコアは、前記命令を実行した結果として、モード及び座標を前記カリングユニットに提供するように更に構成されている、
請求項15のシステム。
【請求項20】
前記シェーダコアは、前記カリングユニットに送信された複数の未処理のカリング要求を追跡するように更に構成されている、
請求項15のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
グラフィックスプロセッサは、幾何学的モデルからコンピュータ生成画像を生成するために、コンピュータグラフィックス処理システム内でよく使用される。幾何学的モデルは、仮想シーンの様々なオブジェクト、ディテール、光源及び他の要素を定義する。コンピューティングシステムは、幾何学的モデル及びソフトウェアアプリケーションからの他の入力に基づいて、所定のシーンをどのようにレンダリングするかを決定する。これらの入力は、点、線、多角形、メッシュレット(meshlet)、三次元オブジェクト、及び、他のオブジェクト等の図形オブジェクトを含む。これらのオブジェクトは、より一般的に「プリミティブ」と呼ばれ得る。
【0002】
グラフィックス処理ユニット(graphics processing unit、GPU)又は他のタイプのプロセッサは、入力及び幾何学的モデルを処理して、所望の画像又はビデオフレームを表すピクセルの色値の二次元又は三次元配列を生成する。フレームのそれぞれのピクセルは、色及びテクスチャを含む、それに関連付けられた複数の属性を有する。典型的に、シェーダは、ピクセルを表す最終値を達成するために、それぞれのピクセルの属性に対して算術演算及び論理演算を実行するために使用される。シェーダは、プログラム、固定関数ハードウェア、制御論理、又は、これら及び/若しくは他の処理要素の任意の組合せであり得る。最終値はフレームバッファに入れられ、ピクセルが表示装置に送られるときに使用される。
【0003】
複数のプリミティブがレンダリングされ、スクリーン上の同じピクセルに投影される場合、レンダリングエンジンは、何れのプリミティブが可視であり、何れのプリミティブが隠されているかを決定する必要がある。オクルージョン問題(occlusion issues)を解決するための1つの技術は、深度バッファを用いて深度テストを実行することを伴う。スクリーン上のそれぞれのピクセルについて、視点から最も近いオブジェクトまでの距離が深度バッファに記憶される。プリミティブがスクリーン空間の所定のピクセルに投影される場合、レンダリングされたプリミティブが、以前にレンダリングされた最も近いプリミティブよりもスクリーン(すなわち、視点)に近いかどうかを決定するために、深度テストが実行される。プリミティブが、以前にレンダリングされたプリミティブよりも視点に近い場合、プリミティブはテストに合格する。そうではなく、プリミティブが、以前にレンダリングされたプリミティブよりも視点から遠く離れている場合、プリミティブはテストに失敗する。視点は、ユーザの視点又は遠近感を表す仮想カメラによって定義される。
【0004】
以下の開示は上記のコンテキストを対象とするが、本明細書で説明される方法及びメカニズムは、スループットを増加させ、性能を改善し、電力消費を低減し、他の利点を達成するために他のコンテキストにおいても使用され得ることを理解されたい。
【0005】
本明細書に記載の方法及びメカニズムの利点は、添付の図面と併せて以下の説明を参照することによってよりよく理解され得る。
【図面の簡単な説明】
【0006】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】コンピューティングシステムの別の実施形態のブロック図である。
【
図3】コンピューティングシステムの別の実施形態のブロック図である。
【
図4】深度カリングを呼び出すためにシェーダコア命令を実行するための方法の一実施形態を示す一般化されたフロー図である。
【
図5】深度カリングを呼び出すためにシェーダコア命令を実行するための方法の一実施形態を示す一般化されたフロー図である。
【
図6】ドローコールをカリング関数クエリに変換するための方法の一実施形態を示す一般化されたフロー図である。
【
図7】カリングユニットのためのクエリを生成する場合にエンティティを合成するための方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【0007】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、当業者は、これらの具体的な詳細なしに様々な実施形態が実施され得ることを認識するべきである。いくつかの例では、本明細書に記載のアプローチを不明瞭にすることを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令、及び、技術が詳細に示されていない。説明を簡単且つ明確にするために、図示される要素は必ずしも縮尺どおりに描かれているわけではないことが理解されよう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
【0008】
深度カリングを呼び出すためにシェーダコア命令を実行するための様々なシステム、装置、及び、方法が本明細書で開示される。一実施形態では、シェーダコアは、対応するドローコールを完了する前に、1つ以上のエンティティ(例えば、プリミティブ、スクリーン空間矩形)に対するカリング関数を深度カリングユニット上で呼び出すための命令を実行する。シェーダコアは、命令を実行した結果として、モード及び座標を深度カリングユニットに提供する。一実施形態では、深度カリングユニットは、1つ以上のプリミティブが遮蔽(occluded)されているかどうかを決定するためにライブ深度バッファにアクセスするためのカリング関数を実装する。カリングユニットは、1つ以上のエンティティを処理した結果(複数可)に関する指標(複数可)をシェーダコアに返す。カリング関数結果(複数可)に関する指標(複数可)を受信したことに応じて、シェーダコアは、ドローコールを変更するか、取り消すか、又は、継続するかどうかを決定する。例えば、一実施形態では、カリングユニットからの結果が、プリミティブが遮蔽されていることを示す場合、シェーダコアは、プリミティブのためのドローコールを取り消す。他のタイプのアクションは、カリングユニットによって生成された結果に応じて、シェーダコアによって行われ得る。したがって、グラフィックス処理パイプラインは、ドローコールに関連付けられた任意の不要な処理タスクを回避し、グラフィックス処理パイプラインの性能を向上させる。
【0009】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ105A~105Nと、入力/出力(input/output、I/O)インターフェース120と、バス125と、メモリコントローラ130と、ネットワークインターフェース135と、メモリデバイス140と、表示コントローラ150と、ディスプレイ155と、を含む。他の実施形態では、コンピューティングシステム100は、他の構成要素を含み、及び/又は、コンピューティングシステム100は、別様に構成される。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0010】
一実施形態では、プロセッサ105Aは、中央処理ユニット(central processing unit、CPU)等の汎用プロセッサである。この実施形態では、プロセッサ105Aは、システム100内の他のプロセッサと通信するため、及び/又は、それらのプロセッサのうち1つ以上の演算を制御するためのドライバ110(例えば、グラフィックドライバ)を実行する。実施形態に応じて、ドライバ110は、ハードウェア、ソフトウェア及び/又はファームウェアの任意の好適な組み合わせを使用して実装することができることに留意されたい。一実施形態では、プロセッサ105Nは、高度に並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(digital signal processor、DSP)、フィールドプログラマブルゲートアレイ(field programmable gate array、FPGA)、特定用途向け集積回路(application specific integrated circuit、ASIC)等を含む。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。一実施形態では、プロセッサ105Nは、ディスプレイ155に送られるように表示コントローラ150にピクセルを提供するGPUである。
【0011】
メモリコントローラ130は、プロセッサ105A~105Nによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ130は、プロセッサ105A~105Nから分離されているものとして示されているが、これは単に1つの可能な実施形態を表すことを理解されたい。他の実施形態では、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上の内部に埋め込むことができ、及び/又は、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上と同じ半導体ダイ上に位置することができる。メモリコントローラ130は、任意の数及びタイプのメモリデバイス140に結合される。メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140内のメモリのタイプは、ダイナミックランダムアクセスメモリ(Dynamic Random Access Memory、DRAM)、スタティックランダムアクセスメモリ(Static Random Access Memory、SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(Ferroelectric Random Access Memory、FeRAM)等を含む。
【0012】
I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(peripheral component interconnect、PCI)バス、PCI-Extended(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(gigabit Ethernet、GBE)バス、ユニバーサルシリアルバス(universal serial bus、USB))を表す。様々なタイプの周辺デバイス(図示省略)がI/Oインターフェース120に結合される。そのような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶デバイス、ネットワークインターフェースカード等が含まれるが、これらに限定されない。ネットワークインターフェース135は、ネットワークを介してネットワークメッセージを受信及び送信することができる。
【0013】
様々な実施形態において、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム又はデバイスのうち何れかである。コンピューティングシステム100の構成要素の数は、実施形態ごとに変化することに留意されたい。例えば、他の実施形態では、
図1に示される数よりも多い又は少ない構成要素が存在する。また、他の実施形態では、コンピューティングシステム100は、
図1に示されていない他の構成要素を含むことにも留意されたい。加えて、他の実施形態では、コンピューティングシステム100は、
図1に示される以外の方法で構築される。
【0014】
図2を参照すると、コンピューティングシステム200の別の実施形態のブロック図が示されている。一実施形態では、システム200は、GPU205と、システムメモリ225と、ローカルメモリ230と、を含む。また、システム200は、図を不明瞭にすることを避けるために示されていない他の構成要素を含み得る。GPU205は、少なくとも、コマンドプロセッサ235と、制御ロジック240と、ディスパッチユニット250と、計算ユニット255A~255Nと、メモリコントローラ220と、グローバルデータシェア270と、レベル1(L1)キャッシュ265と、レベル2(L2)キャッシュ260と、を含む。他の実施形態では、GPU205は、他の構成要素を含み、図示された構成要素のうち1つ以上を省略し、
図2に1つのインスタンスのみが示されている場合であっても構成要素の複数のインスタンスを有し、及び/又は、他の適切な方法で編成される。一実施形態では、GPU205の回路は、(
図1の)プロセッサ105Nに含まれる。
【0015】
様々な実施形態において、コンピューティングシステム200は、様々なタイプのソフトウェアアプリケーションの何れかを実行する。所定のソフトウェアアプリケーションを実行することの一部として、コンピューティングシステム200のホストCPU(図示省略)は、GPU205上で実行される作業を開始する。一実施形態では、コマンドプロセッサ235は、ホストCPUからドローコールを受信し、コマンドプロセッサ235は、ディスパッチユニット250を使用して、ドローコールを計算ユニット255A~255Nに発行する。所定のメッシュレットのためのドローコールを開始することに応じて、計算ユニット255A~255Nは、所定のメッシュレットに対する深度カリング関数を呼び出して、所定のメッシュレットのためのドローコールを取り消すか、変更するか、又は、実行するかどうかを決定する。所定のメッシュレットは、任意の数の頂点を含み得る。これら及び他の技術に関する更なる詳細は、本開示の残りの部分全体を通して提供される。
【0016】
図3を参照すると、コンピューティングシステム300の別の実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム300は、少なくとも、制御ユニット305と、キャッシュ/メモリサブシステム310と、シェーダコア320と、ラスタライザ330と、カリングユニット340と、深度バッファ345と、を含む。制御ユニット305は、1つ以上のフレーム又はフレームの1つ以上の部分をレンダリングする一環として、システム300の様々なユニットによって実行される処理を調整する。制御ユニット305は、ソフトウェア及び/又はハードウェアの任意の好適な組み合わせを使用して実装され得る。制御ユニット305は、制御ロジック305と呼ばれ得ることに留意されたい。また、制御ユニット305の部分は、シェーダコア320及びカリングユニット340内に位置することができ、制御ユニット305の部分は、シェーダコア320及びカリングユニット340の外部に位置することができる。システム300全体に広がる制御ユニット305のロジックの任意の好適な構成が実装され得る。コンピューティングシステム300は、図を不明瞭にすることを避けるために示されていない任意の数の他の構成要素(例えば、メモリデバイス、フレームバッファ、ディスプレイ)を含み得る。
【0017】
シェーダコア320は、1~Nまでの任意の数のシェーダユニット325A~325Nを含み、Nは1より大きい正の整数である。シェーダユニット325A~325Nは、シェーダステージ325A~325Nと呼ばれ得ることに留意されたい。シェーダユニット325A~325Nは、頂点シェーダ、ハルシェーダ、テッセレータ、ライトシェーダ、ピクセルシェーダ、ジオメトリシェーダ、メッシュシェーダ、増幅シェーダ(amplification shader)、ドメインシェーダ、フラグメントシェーダ、計算シェーダ等のような、任意の数及びタイプのシェーダを含み得る。異なる実施形態における異なるシェーダコア320は、個々のシェーダユニット325A~325Nの異なる組み合わせ及び構成を有し得る。シェーダコア320は、本明細書ではシェーダパイプライン320とも呼ばれ得る。加えて、カリングユニット340は、本明細書では深度カリングユニット340と呼ばれ得る。
【0018】
一実施形態では、制御ユニット305は、1つ以上のプリミティブについてシェーダコア320にドローコールを発行する。ドローコールを受信したことに応じて、シェーダコア320は、キャッシュ/メモリサブシステム310から対応するプリミティブを取り出す。一実施形態では、シェーダコア320は、ドローコール中にカリングユニット340にアクセスするための命令を実行する。一実施形態では、命令は、シェーダコア320の対応するシェーダ325A~325Nから所定のインターフェース322A~322Nにアクセスする。複数のインターフェース322A~322Nが示されているが、これらは、カリングユニット340が任意のシェーダ325A~325Nからアクセス可能であることを表すように意図されている。言い換えれば、インターフェース322A~322Nは、いくつかの実施形態では、実際には単一のインターフェースからなり得る。また、カリングユニット340は、シェーダコア320から命令及び対応するパラメータを受信するためのインターフェース342を含む。
【0019】
シェーダコア320によって実行される命令は、シェーダコア320が、シェーディングプロセス中にカリングテストを実行するためにカリングユニット340にクエリする(query)ことを可能にする。一実施形態では、クエリは、1つ以上のプリミティブに関連付けられた1つ以上のパラメータを含む。別の実施形態では、クエリは、範囲を有するスクリーン空間矩形(screen-space rectangle)を定義するパラメータを含む。一実施形態では、クエリを受信したことに応じて、カリングユニット340は、深度バッファ345にアクセスすることによってカリング関数を実行する。シェーダコア320によって実行される命令(複数可)に応じてアクセスされる深度バッファ345は、実際の深度バッファのコピーではなく、ライブ深度バッファ(live depth buffer)345であることに留意されたい。深度バッファ345は、キャッシュ、メモリ又は別の場所に記憶され得る。
【0020】
一実施形態では、カリングユニット340は、カリング関数の結果をシェーダコア320に返し、シェーダコア320は、カリング関数の結果に基づいて、ドローコールを進めるかどうか、及び/又は、どのように進めるかを決定する。例えば、一実施形態では、カリングユニット340が、プリミティブがカリングされるべきではないという指標をシェーダコア320に返す場合、シェーダコア320は、プリミティブに対するドローコールを継続する。プリミティブに対するドローコールを完了した後、シェーダコア320は、フレームバッファ(図示省略)のためのシェーディングされたピクセルを生成するラスタライザ330にジオメトリをエクスポートする。別の実施形態では、ラスタライザ330は、追加の処理のためにピクセルをシェーダコア320に戻す。カリングユニット340が、所定のプリミティブが遮蔽されるという指標をシェーダコア320に返す場合、シェーダコア320は、所定のプリミティブのためのドローコールを取り消す。シェーダコア320は、カリングユニット340に重複するカリング要求を発行し、複数の保留中のカリング要求を有し得ることに留意されたい。シェーダコア320は、深度カリングユニットに送信された複数の未処理のカリング要求を、これらの要求への応答を受信する前に追跡する。所定のカリング要求に対する応答が受信されると、所定のカリング要求は、シェーダコア320によってリタイアされる。
【0021】
図4を参照すると、深度カリングを呼び出すためにシェーダコア命令を実行するための方法400の一実施形態が示されている。説明のために、この実施形態におけるステップ及び
図5~
図7のステップは、順番に示されている。しかしながら、記載された方法の様々な実施形態において、記載された要素のうち1つ以上が、示されたものとは異なる順序で同時に実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書に記載の様々なシステム又は装置の何れも、方法400を実施するように構成される。
【0022】
ドローコールがシェーダコアによって受信される(ブロック405)。一実施形態では、ドローコールは、1つ以上のプリミティブ、又は、その部分に対するものである。ドローコールを受信した後、シェーダコアは、深度カリングユニット上でカリング関数を呼び出すための命令を実行する(ブロック410)。次に、深度カリングユニットは、シェーダコア命令によって呼び出されたカリング関数を実行する(ブロック415)。一実施形態では、カリング関数は、プリミティブのピクセル、サブピクセル、フラグメント、又は、他の部分が観察者に最も近いか、又は、別のプリミティブの以前にレンダリングされたピクセルによって隠されているかどうかを決定する。「カリング関数」は、「深度テスト」又は「オクルージョンカリング関数」と呼ばれ得ることに留意されたい。他の実施形態では、錐台カリング(frustum culling)、バックフェースカリング(backface culling)、小プリミティブカリング(small primitive culling)、深度境界カリング(depth bound culling)、又は、他のタイプのカリング演算を実行するための関数等のような、他のカリング関数が採用され得る。一般的に言えば、「カリング関数」は、プリミティブがユーザに提示される最終画像に影響を及ぼさないか、又は、比較的小さい影響しか及ぼさない(例えば、見えない)と決定された場合に、後続のシェーディング操作からプリミティブを除去又はドロップするためのプロセスとして定義される。
【0023】
次に、深度カリングユニットは、カリング関数の結果をシェーダコアに送り返す(ブロック420)。クエリごとに、深度カリングユニットが、カリングが行われることを示す場合(条件ブロック425、「はい」)、シェーダコアは、ドローコールを変更(修正)するか又は取り消す(ブロック430)。また、シェーダコアは、ブロック430において、ドローコールに関連付けられた任意のプリミティブを破棄し得る。これは、シェーダコアを経由し、シェーダコアによって処理されるプリミティブの数を減らすのに役立つ。そうではなく、カリングが行われないことを深度カリングユニットが示す場合(条件ブロック430、「はい」)、シェーダコアは、ドローコールを継続する(ブロック435)。深度カリングユニットは、任意の可視のプリミティブに基づいて新しい深度値を有するそれらのスクリーンピクセルのための深度バッファを更新し得ることに留意されたい。ブロック430及び435の後に、方法400は終了する。
【0024】
図5を参照すると、深度カリングを呼び出すためにシェーダコア命令を実行するための方法500の一実施形態が示されている。シェーダコアは、1つ以上のエンティティ(例えば、プリミティブ、スクリーン空間矩形)について、深度カリングユニットによって深度カリングを呼び出すための命令を実行する(ブロック505)。命令を実行する一環として、シェーダコアは、1つ以上のエンティティについての少なくともモード及び座標を深度カリングユニットに送信する(ブロック510)。例えば、一実施形態では、シェーダコア命令は、深度カリングユニットに渡される以下のパラメータを含む。geometry_cull_quad<output>、<screen min XY>、<screen max XY>、<depth min>、<depth max>。別の実施形態では、シェーダコア命令は、深度カリングユニットに渡される以下のパラメータを含む。geometry_cull_triangle<output>、<vertex 0 XYZ>、<vertex 1 XYZ>、<vertex 2 XYZ>。他の実施形態では、シェーダコア命令は、他のパラメータを含み、及び/又は、他の適切な方法でフォーマットされる。
【0025】
次に、深度カリングユニットは、エンティティに対応する1つ以上のプリミティブが遮蔽されているかどうかを決定するためにライブ深度バッファにアクセスする(ブロック515)。次いで、深度カリングユニットは、それぞれのプリミティブについて、プリミティブがカリングされるかどうかを示す結果(例えば、ブール結果(Boolean result)、カバレッジ結果(coverage result))をシェーダコアに返す(ブロック520)。一実施形態では、深度カリングユニットは、異なる詳細レベルを選択するのに有用な部分的にカバーされた値を返す。これは、例えばプリミティブの大部分が隠されている場合に起こり得る。ブロック520の後に、方法500は終了する。一実施形態では、シェーダコアは、深度カリングユニットによって提供された結果(複数可)を使用して、1つ以上のプリミティブのためのドローコールを変更するか、取り消すか、又は、継続するかどうかを決定する。
【0026】
図6を参照すると、ドローコールをカリング関数クエリに変換するための方法600の一実施形態が示されている。ドローコールが制御ユニット(例えば、
図3の制御ユニット305)によって受信される(ブロック605)。制御ユニットは、ハードウェア及び/又はソフトウェアの任意の好適な組み合わせを使用して実装され得る。ドローコールの受信に応じて、制御ユニットは、ドローコールの一部としてカリング関数クエリを発行する(ブロック610)。次に、カリング関数がカリングユニット(例えば、
図3のカリングユニット340)上で実行される(ブロック615)。クエリの結果に基づいて、ドローコール又はドローコールの一部は、破棄されるか又はパイプラインの残りの部分全体を通して異なる方法で処理され得る(ブロック620)。言い換えれば、カリング関数の結果が、1つ以上のプリミティブ(又はその部分)がカリングされるか、又は、異なる方法で処理されることを示す場合、シェーダコアは、それに応じて1つ以上のプリミティブのためのドローコールを変更する。例えば、増幅シェーダは、カリングクエリの結果に基づいて、ドローコールの一部を取り消し得る。別の例では、メッシュシェーダは、カリングクエリの結果に基づいて、個々のプリミティブを破棄し得る。そうではなく、カリングクエリの結果が、プリミティブ(複数可)がカリングされないことを示す場合、プリミティブ(複数可)のためのドローコールは、シェーダコアによって未変更の形態で実行される。ブロック620の後に、方法600は終了する。
【0027】
図7を参照すると、カリングユニットについてのクエリを生成する場合にエンティティを合成するための方法700の一実施形態が示されている。ドローコールがグラフィックスドライバからシェーダコアに伝達される(ブロック705)。一実施形態では、「ドローコール」は、1つ以上のプリミティブをレンダリングするための要求として定義され、要求は、グラフィックスアプリケーションプログラミングインターフェース(application programming interface、API)と互換性がある。次に、シェーダコアは、カリングユニットに問い合わせる(クエリする)ためのエンティティを合成する(すなわち、計算する)(ブロック710)。一実施形態では、エンティティは、範囲を有する画面空間矩形である。例えば、一実施形態では、増幅シェーダは、ドローコールによって参照される1つ以上のプリミティブを封入するスクリーン空間境界ボックスを合成する。次いで、シェーダコアは、クエリをカリングユニットに送信し、クエリは、シェーダコアによって合成されたエンティティを含むか又は参照する(ブロック715)。一実施形態では、エンティティがスクリーン空間境界ボックスである場合、クエリは、スクリーン空間境界ボックスの最小値及び最大値を指定する。
【0028】
カリングユニットは、クエリを受信したことに応じて、エンティティについて1つ以上のテストを実行する(ブロック720)。例えば、一実施形態では、クエリによって定義されたエンティティがプリミティブである場合、カリングユニットは、Z平面(すなわち、深度平面)に対してプリミティブを検査する。別の実施形態では、クエリによって定義されたエンティティがスクリーン空間矩形である場合、カリングユニットは、矩形を階層タイル(HTile)に対して検査する。HTileは、ピクセルのブロック(例えば、8×8ピクセルブロック)についての深度情報を記憶する。次に、カリングユニットは、1つ以上のテストの結果をシェーダコアに送信する(ブロック725)。次いで、シェーダコアは、1つ以上のテストの結果に基づいてカリング決定を行う(ブロック730)。例えば、一実施形態では、シェーダコアは、カリングユニットから受信された結果に基づいて、ドローコールの一部又は全体を変更するかどうかの決定を行う。一実施形態では、計算シェーダは、結果に基づいて間接描画を行う場合にドローコール全体を停止することを決定し得る。別の実施形態では、ジオメトリシェーダ、ハルシェーダ、増幅シェーダ又は計算シェーダは、個々のプリミティブをカリングし得る。更なる実施形態では、ジオメトリシェーダ、ハルシェーダ又は増幅シェーダは、より少ないプリミティブを生成するか、又は、プリミティブを生成しないことを決定し得る。例えば、この実施形態では、シェーダが、閾値量(例えば、90%)だけカバーされていると識別される地形タイルをレンダリングしている場合、フルメッシュを生成する代わりに、比較的少数の三角形を使用して近似が実行される。他の実施形態では、カリングユニット結果に応答する他の方法が可能であり、企図される。ブロック730の後に、方法700は終了する。
【0029】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に記載の方法及び/又はメカニズムを実装する。例えば、汎用又は専用プロセッサによって実行可能なプログラム命令が企図される。様々な実施形態では、そのようなプログラム命令は、高レベルプログラミング言語によって表される。他の実施形態では、プログラム命令は、高レベルプログラミング言語からバイナリ、中間又は他の形式にコンパイルされる。あるいは、ハードウェアの動作又は設計を説明するプログラム命令が書かれる。そのようなプログラム命令は、C等の高レベルプログラミング言語によって表される。あるいは、Verilog等のハードウェア設計言語(hardware design language、HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体のうち何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に言えば、そのようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0030】
上記の実施形態は、実施形態の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されると、多数の変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図されている。