(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-30
(45)【発行日】2024-05-10
(54)【発明の名称】レンダリング中の領域テストによってジオメトリの効率的なマルチGPUレンダリングを行うためのシステム及び方法
(51)【国際特許分類】
G06T 15/00 20110101AFI20240501BHJP
【FI】
G06T15/00 501
(21)【出願番号】P 2023132982
(22)【出願日】2023-08-17
(62)【分割の表示】P 2022546702の分割
【原出願日】2021-01-29
【審査請求日】2023-09-15
(32)【優先日】2020-02-03
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-02-03
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100099324
【氏名又は名称】鈴木 正剛
(72)【発明者】
【氏名】マーク イー. サーニー
(72)【発明者】
【氏名】フロリアン ストラウス
(72)【発明者】
【氏名】トビアス バーグオフ
【審査官】村松 貴士
(56)【参考文献】
【文献】特表2013-541746(JP,A)
【文献】特開2008-071261(JP,A)
【文献】米国特許出願公開第2019/0206023(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00 - 15/87
(57)【特許請求の範囲】
【請求項1】
グラフィックス処理を行うための方法であって、
複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングし、
前記グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて前記複数のGPU間で分割し、前記複数のGPUの各GPUは、前記複数のGPUに知られた前記レスポンシビリティの対応するディビジョンを有するものであり、
前記分割されるジオメトリの前記レンダリングについてのレスポンシビリティでは、前記各GPUが前記レスポンシビリティの前記対応するディビジョンを有する対応するスクリーン領域について、当該対応するスクリーン領域をオーバーラップする一つ以上の対応するジオメトリに対して、前記各GPUがZバッファテストを実行し、
GPUが、そのGPUが前記レスポンシビリティのディビジョンを有している第1スクリーン領域をオーバーラップするジオメトリの一つまたは複数のピースを判定し、
前記GPUが、画像についてのジオメトリのピースに対するレンダリングのプリパスフェーズ中にジオメトリの前記ピースに対するZ値を決定し、ジオメトリの前記ピースは、前記GPUが前記レスポンシビリティのディビジョンを有する前記第1スクリーン領域とオーバーラップするものであり、
前記GPUは、前記画像内の、前記第1スクリーン領域をオーバーラップするジオメトリの1つ以上のピースだけに前記Zバッファテストを実行し、
ジオメトリの前記ピースに対する前記プリパスフェーズ中の前記Zバッファテストでの
Zバッファ値と前記Z値との比較を行い、
レンダリングのフルレンダリングフェーズ中にジオメトリの前記ピースをレンダリングするときに、前記GPUが用いるように、前記プリパスフェーズ中の前記Zバッファ値と前記Z値との前記比較の結果を含む情報を生成し、
前記複数のGPUの前記各GPUは、前記複数のGPUの前記各GPUがレンダリングの前記フルレンダリングフェーズを実行する前に、前記画像内の前記1つ以上の対応するジオメトリに対して、レンダリングの対応するプリパスフェーズを完了する、
方法。
【請求項2】
前記情報に基づいてジオメトリの前記ピースが隠れていないときに、前記レンダリングのフルレンダリングフェーズ中に、ジオメトリの前記ピースに対する複数のピクセルを前記GPUによってレンダリングする、
請求項1に記載の方法。
【請求項3】
前記Z値と前記Zバッファ値との前記比較では、
前記Z値が前記Zバッファ値以下であると判定して、ジオメトリの前記ピースが隠れていないことを示し、前記情報はジオメトリの前記ピースが隠れていないことを示すものである、
請求項1に記載の方法。
【請求項4】
前記プリパスフェーズ中にジオメトリの前記ピースの1つ以上のプリミティブを複数のピクセルにラスタライズし、
前記複数のピクセルに対する複数のZ値を前記Zバッファ値と比較することによって深さテストを行い、前記深さテストの結果は前記情報に含まれるものであり、
前記情報に基づいて、前記深さテストに耐えた前記複数のピクセル内のピクセルをレンダリングする、
請求項1に記載の方法。
【請求項5】
前記複数のピクセルのいずれも前記深さテストに耐えなかったときに、ジオメトリの前記ピースのレンダリングをスキップする、
請求項4に記載の方法。
【請求項6】
ジオメトリの前記ピースの1つ以上のプリミティブを複数のピクセルにラスタライズし、
前記複数のピクセルに対するテクスチャのアルファ値をチェックし、
閾値を下回るアルファ値を有する前記複数のピクセル内のピクセルを削除し、前記アルファ値を前記チェックした結果は前記情報に含まれるものである、
請求項1に記載の方法。
【請求項7】
前記複数のピクセルのいずれも対応するアルファ値が前記閾値以上でないときに、ジオメトリの前記ピースのレンダリングをスキップすることを含む、
請求項6に記載の方法。
【請求項8】
前記複数のGPUのうちの1つ以上は、複数の仮想GPUとして構成される、より大きいGPUの一部である、
請求項1に記載の方法。
【請求項9】
ジオメトリの前記ピースのZバッファ値を取得するためにZバッファにアクセスし、前記Zバッファは、1つ以上のZバッファ値を含む、
請求項1に記載の方法。
【請求項10】
方法を実行するためのコンピュータ可読媒体であって、前記コンピュータ可読媒体は、
複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を有し、
前記グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて前記複数のGPU間で分割するためのプログラム命令を有し、前記複数のGPUの各GPUは、前記複数のGPUに知られた前記レスポンシビリティの対応するディビジョンを有するものであり、
前記分割されるジオメトリの前記レンダリングについてのレスポンシビリティでは、前記各GPUが前記レスポンシビリティの前記対応するディビジョンを有する対応するスクリーン領域について、当該対応するスクリーン領域をオーバーラップする一つ以上の対応するジオメトリに対して、前記各GPUがZバッファテストを実行し、
GPUに、前記GPUが前記レスポンシビリティの前記ディビジョンを有している第1スクリーン領域をオーバーラップするジオメトリを判定させるためのプログラムを有し、
画像に対する前記GPUにおけるジオメトリのピースに対するレンダリングのプリパスフェーズ中にジオメトリの前記ピースに対するZ値を決定するためのプログラム命令を有し、ジオメトリの前記ピースは、前記GPUが前記レスポンシビリティのディビジョンを有する前記第1スクリーン領域とオーバーラップするものであり、
前記GPUは、前記画像内の、前記第1スクリーン領域をオーバーラップするジオメトリの1つ以上のピースだけに前記Zバッファテストを実行し、
ジオメトリの前記ピースに対する前記プリパスフェーズ中の前記Zバッファテストでの
Zバッファ値と前記Z値との比較を行うためのプログラム命令を有し、
レンダリングのフルレンダリングフェーズ中にジオメトリの前記ピースをレンダリングするときに、前記GPUが用いるように、前記プリパスフェーズ中の前記Zバッファ値と前記Z値との前記比較の結果を含む情報を生成するためのプログラム命令を有し、
前記複数のGPUの前記各GPUは、前記複数のGPUの前記各GPUがレンダリングの前記フルレンダリングフェーズを実行する前に、前記画像内の前記1つ以上の対応するジオメトリに対して、レンダリングの対応するプリパスフェーズを完了する、
コンピュータ可読媒体。
【請求項11】
前記情報に基づいてジオメトリの前記ピースが隠れていないときに、前記レンダリングのフルレンダリングフェーズ中に、ジオメトリの前記ピースに対する複数のピクセルを前記GPUによってレンダリングするためのプログラム命令をさらに有する、
請求項10に記載のコンピュータ可読媒体。
【請求項12】
前記Z値を前記Zバッファ値と比較するための前記プログラム命令は、
前記Z値が前記Zバッファ値以下であると判定して、ジオメトリの前記ピースが隠れていないことを示すプログラム命令を有し、前記情報はジオメトリの前記ピースが隠れていないことを示すものである、
請求項10に記載のコンピュータ可読媒体。
【請求項13】
さらに、前記プリパスフェーズ中にジオメトリの前記ピースの1つ以上のプリミティブを複数のピクセルにラスタライズするためのプログラム命令と、
前記複数のピクセルに対する複数のZ値を前記Zバッファ値と比較することによって深さテストを行うためのプログラム命令を有し、前記深さテストの結果は前記情報に含まれるものであり、
前記情報に基づいて、前記深さテストに耐えた前記複数のピクセル内のピクセルをレンダリングするためのプログラム命令を有する、
請求項10に記載のコンピュータ可読媒体。
【請求項14】
前記複数のピクセルのいずれも前記深さテストに耐えなかった場合にジオメトリの前記ピースのレンダリングをスキップするためのプログラム命令をさらに有する、
請求項13に記載のコンピュータ可読媒体。
【請求項15】
ジオメトリの前記ピースの1つ以上のプリミティブを複数のピクセルにラスタライズするためのプログラム命令を有し、
前記複数のピクセルに対するテクスチャのアルファ値をチェックするためのプログラム命令を有し、
閾値を下回るアルファ値を有する前記複数のピクセル内のピクセルを削除するためのプログラム命令を有し、前記アルファ値を前記チェックした結果は前記情報に含まれるものである、
請求項10に記載のコンピュータ可読媒体。
【請求項16】
前記複数のピクセルのいずれも対応するアルファ値が前記閾値以上でないときに、ジオメトリの前記ピースのレンダリングをスキップするためのプログラム命令をさらに有する、
請求項15に記載のコンピュータ可読媒体。
【請求項17】
前記方法において、前記複数のGPUのうちの1つ以上は、複数の仮想GPUとして構成される、より大きいGPUの一部である、
請求項10に記載のコンピュータ可読媒体。
【請求項18】
ジオメトリの前記ピースのZバッファ値を取得するためにZバッファにアクセスするためのプログラム命令を有し、前記Zバッファは、1つ以上のZバッファ値を含む、
請求項10に記載のコンピュータ可読媒体。
【請求項19】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに結合され、命令が記憶されたメモリとを有し、前記命令は、前記コンピュータシステムによって実行されると、前記コンピュータシステムに、グラフィックスパイプラインをインプリメントするための方法を実行させるものであり、
複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングし、
前記グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて前記複数のGPU間で分割し、前記複数のGPUの各GPUは、前記複数のGPUに知られた前記レスポンシビリティの対応するディビジョンを有するものであり、
前記分割されるジオメトリの前記レンダリングについてのレスポンシビリティでは、前記各GPUが前記レスポンシビリティの前記対応するディビジョンを有する対応するスクリーン領域について、当該対応するスクリーン領域をオーバーラップする一つ以上の対応するジオメトリに対して、前記各GPUがZバッファテストを実行し、
GPUが、そのGPUが前記レスポンシビリティのディビジョンを有している第1スクリーン領域をオーバーラップするジオメトリの一つまたは複数のピースを判定し、
前記GPUが、画像についてのジオメトリのピースに対するレンダリングのプリパスフェーズ中にジオメトリの前記ピースに対するZ値を決定し、ジオメトリの前記ピースは、前記GPUが前記レスポンシビリティのディビジョンを有する前記第1スクリーン領域とオーバーラップするものであり、
前記GPUは、前記画像内の、前記第1スクリーン領域をオーバーラップするジオメトリの1つ以上のピースだけに前記Zバッファテストを実行し、
ジオメトリの前記ピースに対する前記プリパスフェーズ中の前記Zバッファテストでの
Zバッファ値と前記Z値との比較を行い、
レンダリングのフルレンダリングフェーズ中にジオメトリの前記ピースをレンダリングするときに、前記GPUが用いるように、前記プリパスフェーズ中の前記Zバッファ値と前記Z値との前記比較の結果を含む情報を生成し、
前記複数のGPUの前記各GPUは、前記複数のGPUの前記各GPUがレンダリングの前記フルレンダリングフェーズを実行する前に、前記画像内の前記1つ以上の対応するジオメトリに対して、レンダリングの対応するプリパスフェーズを完了する、
コンピュータシステム。
【請求項20】
前記方法では、さらに、
前記情報に基づいてジオメトリの前記ピースが隠れていないときに、前記レンダリングのフルレンダリングフェーズ中に、ジオメトリの前記ピースに対する複数のピクセルを前記GPUによってレンダリングすることを含む、
請求項19に記載のコンピュータシステム。
【請求項21】
前記方法では、前記Z値と前記Zバッファ値との前記比較で、
前記Z値が前記Zバッファ値以下であって、ジオメトリの前記ピースが隠れていないことを示すと判定し、前記情報はジオメトリの前記ピースが隠れていないことを示すものである、
請求項19に記載のコンピュータシステム。
【請求項22】
前記方法では、さらに、
前記プリパスフェーズ中にジオメトリの前記ピースの1つ以上のプリミティブを複数のピクセルにラスタライズし、
前記複数のピクセルに対する複数のZ値を前記Zバッファ値と比較することによって深さテストを行い、前記深さテストの結果は前記情報に含まれるものであり、
前記情報に基づいて、前記深さテストに耐えた前記複数のピクセル内のピクセルをレンダリングする、
請求項19に記載のコンピュータシステム。
【請求項23】
前記方法では、
前記複数のピクセルのいずれも前記深さテストに耐えなかったときに、ジオメトリの前記ピースのレンダリングをスキップすることを含む、
請求項22に記載のコンピュータシステム。
【請求項24】
前記方法では、
ジオメトリの前記ピースの1つ以上のプリミティブを複数のピクセルにラスタライズし、
前記複数のピクセルに対するテクスチャのアルファ値をチェックし、
閾値を下回るアルファ値を有する前記複数のピクセル内のピクセルを削除し、前記アルファ値を前記チェックした結果は前記情報に含まれるものである、
請求項19に記載のコンピュータシステム。
【請求項25】
前記方法では、
前記複数のピクセルのいずれも対応するアルファ値が前記閾値以上でないときに、ジオメトリの前記ピースのレンダリングをスキップすることを含む、
請求項24に記載のコンピュータシステム。
【請求項26】
前記方法では、
ジオメトリの前記ピースのZバッファ値を取得するためにZバッファにアクセスし、前記Zバッファは、1つ以上のZバッファ値を含む、
請求項19に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、グラフィックス処理に関し、より具体的には、アプリケーションに対する画像をレンダリングするときのマルチGPU連携に関する。
【背景技術】
【0002】
近年、クラウドゲーミングサーバと、ネットワークを通して接続されたクライアントとの間で、ストリーミングフォーマットでオンラインまたはクラウドゲーミングを行うことを可能にするオンラインサービスに対する継続的な取り組みがある。ストリーミングフォーマットはますます人気が出ている。なぜならば、オンデマンドでゲームタイトルが利用できること、より複雑なゲームが実行できること、マルチプレイヤーゲーミングの場合にプレーヤ間でネットワーク接続できること、プレーヤ間で資産を共有できること、プレーヤ及び/または観戦者の間で瞬時の経験を共有できること、友人がビデオゲームをプレイする様子を友人が観戦できること、友人の進行中のゲームプレイに友人が参加できることなどがあるからである。
【0003】
クラウドゲーミングサーバは、1つ以上のクライアント及び/またはアプリケーションにリソースを提供するように構成される場合がある。すなわち、クラウドゲーミングサーバは、高スループットが可能なリソースとともに構成される場合がある。たとえば、個々のグラフィックス処理ユニット(GPU)が達成できる性能には限界がある。さらに複雑なシーンをレンダリングするために、またはシーンを生成するときにさらに複雑なアルゴリズム(たとえば、材料、照明など)を用いるために、複数のGPUを用いて単一画像をレンダリングすることが望ましい場合がある。しかし、これらのグラフィックス処理ユニットを均等に用いることは、実現が難しい。さらに、従来の技術を用いてアプリケーションに対する画像を処理するために複数のGPUがある場合でも、スクリーンピクセル数及びジオメトリ密度の両方での対応する増加をサポートすることはできない(たとえば、4つのGPUが、画像に対して4倍のピクセルを書き込むこと及び/または4倍の頂点またはプリミティブを処理することはできない)。
【0004】
本開示の実施形態は、このような背景の下になされたものである。
【発明の概要】
【0005】
本開示の実施形態は、複数のGPUを連携して用いて単一画像をレンダリングすること、たとえば、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことに関する。
【0006】
本開示の実施形態は、グラフィックス処理を行うための方法に開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングする。本方法は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを、複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られた、レスポンシビリティの対応するディビジョンあるいは分割を有する。本方法は、第2のGPUにおいて画像についてジオメトリのピースあるいは断片あるいは一部をレンダリングする間に、第1のGPUがレスポンシビリティの第1のディビジョンを有する第1のスクリーン領域について、ジオメトリのピースに関する情報を生成する。本方法は、情報を用いて第1のGPUにおいてジオメトリのピースをレンダリングする。
【0007】
本開示の他の実施形態は、方法を実行するための非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割するためのプログラム命令を有し、各GPUは、複数のGPUに知られた、レスポンシビリティの対応するディビジョンを有するものである。コンピュータ可読媒体は、第2のGPUにおいて画像についてジオメトリのピースあるいは一部をレンダリングする間に、第1のGPUがレスポンシビリティの第1ディビジョンを有する第1のスクリーン領域について、ジオメトリのピースに関する情報を生成するためのプログラム命令を含む。コンピュータ可読媒体は、情報を用いて第1のGPUにおいてジオメトリのピースをレンダリングするためのプログラム命令を含む。
【0008】
本開示のさらに他の実施形態は、コンピュータシステムであって、プロセッサと、プロセッサに結合され、命令が記憶されたメモリとを有し、この命令は、コンピュータシステムによって実行されると、コンピュータシステムに方法を実行させるものであるコンピュータシステムを開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングする。本方法は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られた、レスポンシビリティの対応するディビジョン有するものである。本方法は、画像に対する第2のGPUにおいてジオメトリのピースをレンダリングする間に、第1のGPUがレスポンシビリティの第1ディビジョンを有する第1のスクリーン領域について、ジオメトリのピースに関する情報を生成する。本方法は、情報を用いて第1のGPUにおいてジオメトリのピースをレンダリングする。
【0009】
本開示の実施形態は、グラフィックス処理を行うための方法に開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングする。本方法は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティをスクリーン領域に基づいてGPU間で分割し、各GPUは、GPUに知られた、レスポンシビリティの対応するディビジョンを有する。本方法は、画像に対する第1のGPUにおけるレンダリングのプリパスフェーズ中にジオメトリのピースに対するZ値を決定し、ジオメトリのピースは、第1のGPUがレスポンシビリティのディビジョンを有する第1のスクリーン領域とオーバーラップする、決定することを含む。本方法は、Z値をジオメトリのピースに対するZバッファ値と比較することを含む。本方法は、レンダリングのフルレンダリングフェーズ中にジオメトリのピースをレンダリングするときにGPUが用いるように、Z値をZバッファ値と比較する結果を含む情報を生成することを含む。
【0010】
本開示の他の実施形態は、方法を行うための非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティをスクリーン領域上に基づいてGPU間で分割し、各GPUは、GPUに知られた、レスポンシビリティの対応するディビジョンを有する、分割するためのプログラム命令を含む。コンピュータ可読媒体は、画像に対する第1のGPUにおけるレンダリングのプリパスフェーズ中にジオメトリのピースに対するZ値を決定し、ジオメトリのピースは、第1のGPUがレスポンシビリティのディビジョンを有する第1のスクリーン領域とオーバーラップする、決定するためのプログラム命令を含む。コンピュータ可読媒体は、Z値をジオメトリのピースに対するZバッファ値と比較するためのプログラム命令を含む。コンピュータ可読媒体は、レンダリングのフルレンダリングフェーズ中にジオメトリのピースをレンダリングするときにGPUが用いるように、Z値をZバッファ値と比較する結果を含む情報を生成するためのプログラム命令を含む。
【0011】
本開示のさらに他の実施形態は、コンピュータシステムであって、プロセッサと、プロセッサに結合され、命令が記憶されたメモリであって、コンピュータシステムによって実行されると、コンピュータシステムに方法を実行させるメモリと、を含むコンピュータシステムを開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティをスクリーン領域上に基づいてGPU間で分割し、各GPUは、GPUに知られた、レスポンシビリティの対応するディビジョンを有する、分割することを含む。本方法は、画像に対する第1のGPUにおけるレンダリングのプリパスフェーズ中にジオメトリのピースに対するZ値を決定し、ジオメトリのピースは、第1のGPUがレスポンシビリティのディビジョンを有する第1のスクリーン領域とオーバーラップする、決定することを含む。本方法は、Z値をジオメトリのピースに対するZバッファ値と比較することを含む。本方法は、レンダリングのフルレンダリングフェーズ中にジオメトリのピースをレンダリングするときに、GPUが用いるようにZ値をZバッファ値と比較する結果を含む情報を生成することを含む。
【0012】
本開示の他の態様は、以下の詳細な説明と併せて、一例として本開示の原理を例示する添付図面から明らかになる。
【0013】
本開示は、以下の説明と併せて添付図面を参照することにより最良に理解され得る。
【図面の簡単な説明】
【0014】
【
図1】本開示の一実施形態により、複数のGPU(グラフィックス処理ユニット)を連携で実施あるいはインプリメントして単一画像をレンダリングするように構成された1つ以上のクラウドゲーミングサーバ間でネットワークを介してゲーミングを提供するためのシステムの図であり、レンダリング中の領域テストによってアプリケーションに対するジオメトリのレンダリングを行うマルチGPUを含む図である。
【
図2】本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするマルチGPUアーキテクチャの図である。
【
図3】本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成された複数のグラフィックス処理ユニットリソースの図である。
【
図4】本開示の一実施形態により、マルチGPU処理を行って複数のGPUが連携して単一画像をレンダリングするように構成されたグラフィックスパイプラインをインプリメントするレンダリングアーキテクチャの図である。
【
図5】本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことを含むグラフィックス処理を行うための方法を例示するフロー図である。
【
図6A】本開示の一実施形態により、マルチGPUレンダリングを行うときに四分円に細分割されるスクリーンの図である。
【
図6B】本開示の一実施形態により、マルチGPUレンダリングを行うときに複数のインターリーブ領域に細分割されるスクリーンの図である。
【
図7A】本開示の一実施形態により、連携して単一画像をレンダリングする複数のGPUによって共有されるレンダリングコマンドバッファの図である。
【
図7B-1】本開示の一実施形態により、複数のGPUによってレンダリングされる4つのオブジェクトを含む画像を例示する図であり、画像のオブジェクトをレンダリングするときの各GPUに対するスクリーン領域レスポンシビリティを示す図である。
【
図7B-2】本開示の一実施形態により、
図7B-1の4つのオブジェクトをレンダリングするときに各GPUが行うレンダリングを例示する表である。
【
図7C】本開示の一実施形態により、複数のGPUの連携を通して画像フレーム(たとえば、
図7B-1の画像)をレンダリングするときに各GPUが行う各オブジェクトのレンダリングを例示する図である。
【
図8A】本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトテストを例示する図である。
【
図8B】本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトの一部のテストを例示する図である。
【
図9】A~Cは、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときにスクリーン領域を対応するGPUに割り当てるための種々の方策を例示する図である。
【
図10A】本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うときのマルチパスレンダリングを例示する図である。
【
図10B】本開示の一実施形態により、レンダリングするときに同じGPUが後で用いるようにレンダリングのZのみプリパスフェーズを行うことを含むグラフィックス処理を行うための方法を例示するフロー図である。
【
図11】本開示の種々の実施形態の態様を実行するために用いることができる例示的なデバイスのコンポーネントを例示する図である。
【発明を実施するための形態】
【0015】
以下の詳細な説明には、説明の目的上、多くの特定の詳細が含まれているが、当業者であれば分かるように、以下の詳細に対する多くの変形及び修正も本開示の範囲内である。したがって、以下に説明する本開示の態様は、この説明に続く特許請求の範囲に対する一般性を何ら失うことなく、また特許請求の範囲に限定を課すことなく、述べられている。
【0016】
一般的に言って、個々のGPUが達成できる性能には限界があり、これは、たとえばGPUをどのくらい大きくできるかに対する限界から導かれる。本開示の実施形態では、さらに複雑なシーンをレンダリングするために、またはさらに複雑なアルゴリズム(たとえば、材料、照明など)を用いるために、複数のGPUを用いて単一画像をレンダリングすることが望ましい。詳細には、本開示の種々の実施形態では、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成された方法及びシステムを説明する。具体的には、複数のGPUが連携して、アプリケーションの画像を生成する。アプリケーションのグラフィックスのレンダリングについてのレスポンシビリティ(responsibility)、または義務、あるいはレンダリングへの対応を、対応するスクリーン領域に基づいて複数のGPU間で分割する。画像に対するジオメトリをレンダリングする間、複数のGPUはそれぞれ、ジオメトリと、他のGPUがレスポンシビリティを負い得るスクリーン領域に対するその関係とに関する情報を生成する。この情報によって、他のGPUは、ジオメトリをより効率的にレンダリングすることまたはそのレンダリングを完全に回避することができる。利点として、たとえば、これによって、複数のGPUがより複雑なシーン及び/または画像を同じ時間でレンダリングすることができる。
【0017】
種々の実施形態の前述した全般的な理解に基づき、次に実施形態の詳細例について、種々の図面を参照して説明する。
【0018】
明細書の全体にわたって、「アプリケーション」または「ゲーム」または「ビデオゲーム」または「ゲーミングアプリケーション」に言及した場合、入力コマンドの実行を通して指示される任意のタイプの対話型アプリケーションを表すことが意図されている。例示のみを目的として、対話型アプリケーションには、ゲーミング、文書処理、ビデオ処理、ビデオゲーム処理などに対するアプリケーションが含まれる。さらに、前述で導入した用語は交換可能である。
【0019】
明細書の全体にわたって、本開示の種々の実施形態は、4つのGPUを有する典型的なアーキテクチャを用いてアプリケーションに対するジオメトリのマルチGPU処理またはレンダリングを行うことについて説明される。しかし、当然のことながら、アプリケーションに対するジオメトリをレンダリングするときに任意の数のGPU(たとえば、2つ以上のGPU)が連携してもよい。
【0020】
図1は、本開示の一実施形態により、アプリケーションに対する画像をレンダリングするときにマルチGPU処理を行うためのシステムの図である。本開示の実施形態により、システムは、1つ以上のクラウドゲーミングサーバ間でネットワークを介してゲーミングを提供するように構成されており、より具体的には、複数のGPUを連携してアプリケーションの単一画像をレンダリングするように構成されている。クラウドゲーミングには、サーバにおいてビデオゲームを実行して、ゲームレンダリングされたビデオフレームを生成することが含まれる。これは次に、クライアントに送られて表示される。詳細には、システム100は、レンダリング中の領域テストによりアプリケーションに対するジオメトリの効率的なマルチGPUレンダリングを行うように構成されている。
【0021】
図1では、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間でのジオメトリのマルチGPUレンダリングの実施態様を例示しているが、本開示の他の実施形態では、スタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むもの)内でレンダリング中に領域テストを行うことによってアプリケーションに対するジオメトリの効率的なマルチGPUレンダリングを行うことが提供される。
【0022】
また当然のことながら、ジオメトリのマルチGPUレンダリングを、物理GPU、または仮想GPU、または両方の組み合わせを種々の実施形態で(たとえば、クラウドゲーミング環境においてまたはスタンドアロンシステム内で)用いて、行ってもよい。たとえば、仮想マシン(たとえば、インスタンス)を、ハードウェア層の1つ以上のコンポーネント(たとえば、複数のCPU、メモリモジュール、GPU、ネットワークインターフェース、通信コンポーネントなど)を用いるホストハードウェア(たとえば、データセンタに配置される)のハイパーバイザを用いて、形成してもよい。これらの物理リソースを、ラック(たとえば、CPUのラック、GPUのラック、メモリのラックなど)内に配列してもよい。ラック内の物理リソースにはトップオブラックスイッチを用いてアクセスしてもよく、これにより、インスタンスに対して用いるコンポーネントの組み立て及びアクセスを行うための構造を容易にする(たとえば、インスタンスの仮想化コンポーネントを構築するときに)。一般的に、ハイパーバイザは、仮想リソースを用いて構成される複数のインスタンスの複数のゲストオペレーティングシステムを示すことができる。すなわち、オペレーティングシステムはそれぞれ、1つ以上のハードウェアリソース(たとえば、対応するデータセンタに配置される)によってサポートされる対応する組の仮想化リソースを用いて構成してもよい。たとえば、各オペレーティングシステムを、仮想CPU、複数の仮想GPU、仮想メモリ、仮想化通信コンポーネントなどによってサポートしてもよい。加えて、あるデータセンタから別のデータセンタへ移される得るインスタンスの構成によって待ち時間を減らす。ユーザのゲーミングセッションを節約するときに、ユーザまたはゲームに対して規定されるGPU稼働率を用いることができる。GPU稼働率には、ゲーミングセッションに対するビデオフレームの高速レンダリングを最適化するための本明細書で説明する任意の数の構成を含むことができる。一実施形態では、ゲームまたはユーザに対して規定されるGPU稼働率を、構成可能な設定としてデータセンタ間で移すことができる。異なるジオロケーションからゲームをプレイするためにユーザが接続する場合には、GPU稼働率設定を移せることで、データセンタからデータセンタへゲームプレイを効率的に移行することができる。
【0023】
本開示の一実施形態により、システム100は、クラウドゲームネットワーク190を介してゲーミングを提供する。ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス110(たとえば、シンクライアント)から遠隔で実行されている。システム100は、シングルプレイヤーモードまたはマルチプレイヤーモードのいずれかでネットワーク150を介してクラウドゲームネットワーク190を通して1つ以上のゲームをプレイしている1人以上のユーザに対するゲーミングコントロールを提供してもよい。いくつかの実施形態では、クラウドゲームネットワーク190は、ホストマシンのハイパーバイザ上で実行される複数の仮想マシン(VM)を含んでいてもよい。1つ以上の仮想マシンが、ホストのハイパーバイザにとって利用可能なハードウェアリソースを用いるゲームプロセッサモジュールを実行するように構成されている。ネットワーク150は1つ以上の通信技術を含んでいてもよい。いくつかの実施形態では、ネットワーク150は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含んでいてもよい。
【0024】
いくつかの実施形態では、無線技術を用いて通信を促進してもよい。このような技術には、たとえば、5G無線通信技術が含まれていてもよい。5Gは第5世代のセルラーネットワーク技術である。5Gネットワークはデジタルセルラーネットワークであり、ここでは、プロバイダがカバーするサービスエリアが、セルと言われる小さい地理的領域に分割される。音及び画像を表すアナログ信号は、電話機内でデジタル化され、アナログデジタル変換器によって変換されて、ビットのストリームとして送信される。セル内のすべての5G無線デバイスは、セル内のローカルアンテナアレイ及び低パワー自動化送受信装置(送信部及び受信部)を用いて電波によって通信し、この通信は、他のセル内で再使用される周波数のプールから送受信装置によって割り当てられた周波数チャネル上で行われる。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって電話ネットワーク及びインターネットと接続される。他のセルネットワークの場合と同様に、モバイルデバイスがあるセルから別のセルへ横断すると、新しいセルに自動的に移される。当然のことながら、5Gネットワークは単に通信ネットワークのタイプ例であり、本開示の実施形態では、前の世代の無線または有線通信、ならびに5Gの後に来る後の世代の有線または無線技術を用いてもよい。
【0025】
図示したように、クラウドゲームネットワーク190には、複数のビデオゲームにアクセスするゲームサーバ160が含まれる。ゲームサーバ160は、クラウド内で利用できる任意のタイプのサーバコンピューティングデバイスであってもよく、1つ以上のホスト上で実行される1つ以上の仮想マシンとして構成してもよい。たとえば、ゲームサーバ160は、ユーザに対するゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理してもよい。したがって、複数の仮想マシンに対応付けられるゲームサーバ160の複数のゲームプロセッサは、複数のユーザのゲームプレイに対応付けられる1つ以上のゲームの複数のインスタンスを実行するように構成されている。このように、バックエンドサーバサポートは、複数のゲーミングアプリケーションのゲームプレイの媒体(たとえば、ビデオ、オーディオなど)のストリーミングを、複数の対応するユーザに提供する。すなわち、ゲームサーバ160は、データ(たとえば、対応するゲームプレイのレンダリング画像及び/またはフレーム)を、対応するクライアントデバイス110にネットワーク150を通してストリーミングによって戻すように構成されている。このように、コンピュータ的に複雑なゲーミングアプリケーションを、クライアントデバイス110が受け取って転送するコントローラ入力に応じて、バックエンドサーバで実行してもよい。各サーバは画像及び/またはフレームをレンダリングすることができ、これらは次に、エンコード(たとえば圧縮)され、対応するクライアントデバイスにストリーミングされて表示される。
【0026】
たとえば、複数のユーザは、ストリーミングメディアを受け取るように構成された対応するクライアントデバイス110を用いて、通信ネットワーク150を介してクラウドゲームネットワーク190にアクセスしてもよい。一実施形態では、クライアントデバイス110をシンクライアントとして構成して、計算機能(たとえば、ゲームタイトル処理エンジン111を含む)を提供するように構成されたバックエンドサーバ(たとえば、クラウドゲームネットワーク190)との相互連絡を提供してもよい。別の実施形態では、クライアントデバイス110を、ビデオゲームの少なくとも何らかのローカル処理を行うためのゲームタイトル処理エンジン及びゲームロジックを用いて構成してもよく、さらに、バックエンドサーバで実行されるビデオゲームが生成するストリーミングコンテンツを受け取るために、またはバックエンドサーバサポートが提供する他のコンテンツに対して用いてもよい。ローカル処理に対しては、ゲームタイトル処理エンジンには、ビデオゲームに対応付けられるビデオゲーム及びサービスを実行するための基本プロセッサベースの機能が含まれる。その場合、ゲームロジックを、ローカルクライアントデバイス110に記憶して、ビデオゲームを実行するために用いてもよい。
【0027】
クライアントデバイス110はそれぞれ、クラウドゲームネットワークから異なるゲームへのアクセスをリクエストしていてもよい。たとえば、クラウドゲームネットワーク190は、ゲームサーバ160のCPUリソース163及びGPUリソース365を用いて実行されるように、ゲームタイトル処理エンジン111上に構築される1つ以上のゲームロジックを実行していてもよい。たとえば、ゲームロジック115aはゲームタイトル処理エンジン111と連携して、1つのクライアントに対してゲームサーバ160上で実行していてもよく、ゲームロジック115bはゲームタイトル処理エンジン111と連携して、2番目のクライアントに対してゲームサーバ160上で実行していてもよく、・・・またゲームロジック115nはゲームタイトル処理エンジン111と連携して、n番目のクライアントに対してゲームサーバ160上で実行していてもよい。
【0028】
詳細には、対応するユーザ(図示せず)のクライアントデバイス110は、通信ネットワーク150(たとえば、インターネット)を介してゲームへのアクセスをリクエストするように、またゲームサーバ160が実行するビデオゲームによって生成される表示画像をレンダリングするように、構成されている。エンコード画像は、クライアントデバイス110に送出されて、対応するユーザに関連して表示される。たとえば、ユーザは、ゲームサーバ160のゲームプロセッサ上で実行されているビデオゲームのインスタンスと、クライアントデバイス110を通してやり取りしていてもよい。より詳細には、ビデオゲームのインスタンスはゲームタイトル処理エンジン111によって実行される。ビデオゲームを実施する対応するゲームロジック(たとえば、実行可能コード)115は、データストア(図示せず)を通して記憶されてアクセス可能であり、ビデオゲームを実行するために用いられる。ゲームタイトル処理エンジン111は、複数のゲームロジック(たとえば、ゲーミングアプリケーション)(それぞれ、ユーザによって選択可能である)を用いて、複数のビデオゲームをサポートすることができる。
【0029】
たとえば、クライアントデバイス110は、対応するユーザのゲームプレイに関連するゲームタイトル処理エンジン111と、たとえば、ゲームプレイを駆動するために用いる入力コマンドを通して、相互に作用するように構成されている。詳細には、クライアントデバイス110は、種々のタイプの入力デバイス、たとえば、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによって取り込まれたジェスチャ、マウス、タッチパッドなどから入力を受け取ってもよい。クライアントデバイス110は、ネットワーク150を介してゲームサーバ160に接続することができるメモリ及びプロセッサモジュールを少なくとも有する任意のタイプのコンピューティングデバイスとすることができる。バックエンドのゲームタイトル処理エンジン111は、レンダリング画像を生成するように構成されている。レンダリング画像は、ネットワーク150を介して送出されて、クライアントデバイス110に関連する対応するディスプレイにおいて表示される。たとえば、クラウドベースのサービスを通して、ゲームレンダリング画像を、ゲームサーバ160のゲーム実行エンジン111上で実行されている対応するゲーム(たとえば、ゲームロジック)のインスタンスが送出してもよい。すなわち、クライアントデバイス110は、エンコード画像(たとえば、ビデオゲームの実行を通して生成されるゲームレンダリング画像からエンコードされる)を受け取るように、またレンダリングされる画像をディスプレイ11に表示するように構成されている。一実施形態では、ディスプレイ11は、HMD(たとえば、VRコンテンツを表示する)を含む。いくつかの実施形態では、レンダリング画像を、スマートフォンまたはタブレットに、無線または有線で、クラウドベースのサービスから直接にまたはクライアントデバイス110(たとえば、プレイステーション(登録商標)リモートプレイ)を介して、ストリーミングしてもよい。
【0030】
一実施形態では、ゲームサーバ160及び/またはゲームタイトル処理エンジン111には、ゲーミングアプリケーションに対応付けられるゲーム及びサービスを実行するための基本プロセッサベースの機能が含まれる。たとえば、ゲームサーバ160には、プロセッサベースの機能(たとえば、2Dまたは3Dレンダリング、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、照明、シェーディング、ラスタライゼーション、レイトレーシング、シャドーイング、選抜除去、変換、人工知能など)を行うように構成された中央処理ユニット(CPU)リソース163及びグラフィックス処理ユニット(GPU)リソース365が含まれる。加えて、CPU及びGPUグループは、ゲーミングアプリケーションに対するサービス(メモリ管理、マルチスレッド管理、サービスの質(QoS)、バンド幅テスト、ソーシャルネットワーキング、ソーシャルフレンズの管理、フレンズのソーシャルネットワークとの通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどを部分的に含む)を実施してもよい。一実施形態では、1つ以上のアプリケーションは特定のGPUリソースを共有する。一実施形態では、複数のGPUデバイスを結合して、対応するCPU上で実行されている単一アプリケーションに対するグラフィックス処理を実行してもよい。
【0031】
一実施形態では、クラウドゲームネットワーク190は分散ゲームサーバシステム及び/またはアーキテクチャである。詳細には、ゲームロジックを実行する分散ゲームエンジンは、対応するゲームの対応するインスタンスとして構成される。一般的に、分散ゲームエンジンは、ゲームエンジンの機能のそれぞれを取って、それらの機能を多数の処理エンティティが実行するように分配する。個々の機能をさらに、1つ以上の処理エンティティにわたって分配することができる。処理エンティティを異なる構成(たとえば、物理ハードウェア)で、及び/または仮想コンポーネントまたは仮想マシンとして、及び/または仮想コンテナとして構成してもよい。コンテナは、仮想化オペレーティングシステム上で実行されるゲーミングアプリケーションのインスタンスを仮想化するため、仮想マシンとは異なる。処理エンティティは、クラウドゲームネットワーク190のサーバ及びその基礎をなすハードウェア(1つ以上のサーバ(計算ノード)上にある)を使用し及び/またはそれらに依拠してもよい。サーバは1つ以上のラック上に配置してもよい。種々の処理エンティティに対するこれらの機能の実行の調整、割り当て、及び管理は、分散同期層が行う。このように、これらの機能の実行を分散同期層が制御して、プレーヤによるコントローラ入力に応じたゲーミングアプリケーションに対する媒体(たとえばビデオフレーム、オーディオなど)の生成を可能にする。分散同期層は、これらの機能を、分散させた処理エンティティにわたって効率的に実行して(たとえば、ロードバランシングを通して)、重要なゲームエンジンコンポーネント/機能を分散させて再組み立てして、より効率的な処理が行われるようにすることができる。
【0032】
図2は、本開示の一実施形態により、複数のGPUが連携して対応するアプリケーションの単一画像をレンダリングする典型的なマルチGPUアーキテクチャ200の図である。当然のことながら、本開示の種々の実施形態において、複数のGPUが連携して単一画像をレンダリングする多くのアーキテクチャが可能であるが、明示的に説明することも図示することもしない。たとえば、レンダリング中に領域テストを行うことによるアプリケーションに対するジオメトリのマルチGPUレンダリングを、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間で実施してもよいし、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内で実施してもよい。
【0033】
マルチGPUアーキテクチャ200には、アプリケーションに対する単一画像及び/またはアプリケーションに対する画像列内の各画像のマルチGPUレンダリングを行うように構成されたCPU163及び複数のGPUが含まれている。詳細には、CPU163及びGPUリソース365は、プロセッサベースの機能(たとえば、前述したように、2Dまたは3Dレンダリング、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、照明、シェーディング、ラスタライゼーション、レイトレーシング、シャドーイング、選抜除去、変換、人工知能など)を行うように構成されている。
【0034】
たとえば、マルチGPUアーキテクチャ200のGPUリソース365には4つのGPUが示されているが、アプリケーションに対する画像をレンダリングするときには任意の数のGPUを用いてもよい。各GPUは、対応する専用メモリ(たとえば、ランダムアクセスメモリ(RAM))に高速バス220を介して接続されている。詳細には、GPU-Aはメモリ210A(たとえば、RAM)にバス220を介して接続され、GPU-Bはメモリ210B(たとえば、RAM)にバス220を介して接続され、GPU-Cはメモリ210C(たとえば、RAM)にバス220を介して接続され、GPU-Dはメモリ210D(たとえば、RAM)にバス220を介して接続されている。
【0035】
さらに、各GPUは、バス240を介して互いに接続されている。バス240は、アーキテクチャに応じて、対応するGPUとその対応するメモリとの間の通信に対して用いるバス220と速度がほぼ等しいかまたはそれよりも遅い場合がある。たとえば、GPU-Aは、GPU-B、GPU-C、及びGPU-Dのそれぞれと、バス240を介して接続されている。また、GPU-Bは、GPU-A、GPU-C、及びGPU-Dのそれぞれと、バス240を介して接続されている。加えて、GPU-Cは、GPU-A、GPU-B、及びGPU-Dのそれぞれと、バス240を介して接続されている。さらに、GPU-Dは、GPU-A、GPU-B、及びGPU-Cのそれぞれと、バス240を介して接続されている。
【0036】
CPU163は、GPUのそれぞれと、より低速度のバス230を介して接続されている(たとえば、バス230は、対応するGPUとその対応するメモリとの間の通信に対して用いるバス220よりも遅い)。詳細には、CPU163は、GPU-A、GPU-B、GPU-C、及びGPU-Dのそれぞれと接続されている。
【0037】
いくつかの実施形態では、4つのGPUは別個のGPUであり、それぞれ独自のシリコンダイ上にある。他の実施形態では、4つのGPUは、ダイ上の高速の相互配線及び他のユニットを利用するためにダイを共有してもよい。さらに他の実施形態では、単一のより強力なGPUとしてかまたは4つのそれほど強力でない「仮想」GPU(GPU-A、GPU-B、GPU-C、及びGPU-D)として用いるように構成することができる1つの物理GPU250がある。言い換えれば、グラフィックスパイプラインを(
図4に示すように)動作させるGPU-A、GPU-B、GPU-C、及びGPU-Dそれぞれに対する十分な機能があり、チップは、全体として、グラフィックスパイプラインを(
図4に示すように)動作させることができ、構成は、2つの構成の間で(たとえば、レンダリングパス間で)フレキシブルに切り替えることができる。
【0038】
図3は、本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対する単一画像をレンダリングするときに、ジオメトリのマルチGPUレンダリングを行うように構成されたグラフィックス処理ユニットリソース365の図である。たとえば、ゲームサーバ160を、
図1のクラウドゲームネットワーク190内のGPUリソース365を含むように構成してもよい。図示するように、GPUリソース365は、複数のGPU(たとえば、GPU365a、GPU365b・・・GPU365n)を含んでいる。前述したように、種々のアーキテクチャに、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって、複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間でジオメトリのマルチGPUレンダリングを実施すること、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内でジオメトリのマルチGPUレンダリングを実施することである。
【0039】
詳細には、一実施形態では、ゲームサーバ160は、アプリケーションの単一画像をレンダリングするときにマルチGPU処理を実行するように構成されていて、複数のGPUが連携して単一画像をレンダリングし、及び/またはアプリケーションを実行するときに画像列の1つ以上の各画像をレンダリングする。たとえば、一実施形態では、ゲームサーバ160は、アプリケーションの画像列内の1つ以上の各画像のマルチGPUレンダリングを実行するように構成されたCPU及びGPUグループを含んでいてもよい。ここで、1つのCPU及びGPUグループが、グラフィックスを実施していることができ、及び/またはアプリケーションに対するパイプラインをレンダリングしていることができる。CPU及びGPUグループを、1つ以上の処理デバイスとして構成することができる。前述したように、GPU及びGPUグループは、CPU163及びGPUリソース365を含んでいてもよい。CPU163及びGPUリソース365は、プロセッサベースの機能(たとえば、2Dまたは3Dレンダリング、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、照明、シェーディング、ラスタライゼーション、レイトレーシング、シャドーイング、選抜除去、変換、人工知能など)を行うように構成されている。
【0040】
GPUリソース365は、オブジェクトのレンダリング(たとえば、オブジェクトのピクセルに対する色または法線ベクトル値を複数のレンダリングターゲット-MRTに書き込むこと)及び同期型計算カーネルの実行(たとえば、結果として生じるMRTに対するフルスクリーン効果)にレスポンシビリティを有しており及び/またはこれらを行うように構成されている。実行すべき同期型計算及びレンダリングすべきオブジェクトは、GPUが実行する複数のレンダリングコマンドバッファ325に含まれるコマンドによって指定される。詳細には、GPUリソース365は、レンダリングコマンドバッファ325からのコマンドを実行するときに、オブジェクトをレンダリングして、(たとえば、同期型計算カーネルを実行する間に)同期型計算を行なうように構成され、コマンド及び/または動作は、それらが順次行われるように、他の動作に依存し得る。
【0041】
たとえば、GPUリソース365は、同期型計算を行うように、及び/または1つ以上のレンダリングコマンドバッファ325(たとえば、レンダリングコマンドバッファ325a、レンダリングバッファ325b・・・レンダリングコマンドバッファ325n)を用いてオブジェクトのレンダリングを行うように、構成されている。一実施形態では、GPUリソース365における各GPUはその独自のコマンドバッファを有していてもよい。他の形態として、実質的に同じ組のオブジェクトが各GPUによってレンダリングされているとき(たとえば、領域のサイズが小さいことに起因する)、GPUリソース365におけるGPUは、同じコマンドバッファまたは同じ組のコマンドバッファを用いてもよい。さらに、GPUリソース365におけるGPUのそれぞれが、コマンドをある1つのGPUによって実行するアビリティをサポートできるが、他のGPUでは実行できないようにしてもよい。たとえば、レンダリングコマンドバッファ内の描画コマンドまたは叙述上にフラッグがあると、対応するコマンドバッファ内の1つ以上のコマンドを単一のGPUが実行可能であるが、他のGPUはコマンドを無視する。たとえば、レンダリングコマンドバッファ325aはフラッグ330aをサポートしてもよく、レンダリングコマンドバッファ325bはフラッグ330bをサポートしてもよく・・・レンダリングコマンドバッファ325nはフラッグ330nをサポートしてもよい。
【0042】
同期型計算を行うこと(たとえば、同期型計算カーネルの実行)及びオブジェクトのレンダリングは、レンダリング全体の一部分である。たとえば、ビデオゲームが60Hz(たとえば、60フレーム/秒)で実行されている場合、画像フレームに対するすべてのオブジェクトレンダリング及び同期型計算カーネルの実行は通常、ほぼ16.67ms(たとえば、60Hzで1フレーム)内で完了しなければならない。前述したように、オブジェクトをレンダリングし及び/または同期型計算カーネルを実行するときに行う動作は順序付けされており、動作は他の動作に依存し得る(たとえば、レンダリングコマンドバッファ内のコマンドは、そのレンダリングコマンドバッファ内の他のコマンドが実行できる前に、実行を完了する必要があり得る)。
【0043】
詳細には、レンダリングコマンドバッファ325はそれぞれ、種々のタイプのコマンドを含んでいる(たとえば、対応するGPU構成に影響するコマンド(たとえば、レンダリングターゲットの場所及びフォーマットを指定するコマンド)、ならびにオブジェクトをレンダリングし及び/または同期型計算カーネルを実行するコマンド)。説明の目的上、同期型計算カーネルを実行するときに行う同期型計算には、オブジェクトがすべて1つ以上の対応する複数のレンダリングターゲット(MRT:multiple render targets)にレンダリングされたときにフルスクリーン効果を行うことが含まれていてもよい。
【0044】
加えて、GPUリソース365が画像フレームに対するオブジェクトをレンダリングするとき、及び/または画像フレームを生成するときに同期型計算カーネルを実行するときに、GPUリソース365は各GPU365a、365b・・・365nのレジスタを介して構成される。たとえば、GPU365aは、そのレジスタ340(たとえばレジスタ340a、レジスタ340b・・・レジスタ340n)を介して、そのレンダリングを行うかまたは特定の方法でカーネル実行を計算するように構成される。すなわち、レジスタ340に記憶される値は、画像フレームに対するオブジェクトをレンダリングし及び/または同期型計算カーネルを実行するために用いるレンダリングコマンドバッファ325内のコマンドを実行するときに、GPU365aに対するハードウェアコンテキスト(たとえば、GPU構成またはGPU状態)を規定する。GPUリソース365におけるGPUのそれぞれを同様に構成して、GPU365bが、そのレジスタ350(たとえば、レジスタ350a、レジスタ350b・・・レジスタ350n)を介して、そのレンダリングを実行するかまたは特定の方法でカーネル実行を計算するように構成され、・・・GPU365nが、そのレジスタ370(たとえば、レジスタ370a、レジスタ370b・・・レジスタ370n)を介して、そのレンダリングを実行するかまたは特定の方法でカーネル実行を計算するように構成されるようにしてもよい。
【0045】
GPU構成のいくつかの例としては、レンダリングターゲット(たとえば、MRT)の場所及びフォーマットが挙げられる。また、GPU構成の他の例としては、操作手順が挙げられる。たとえば、オブジェクトをレンダリングするとき、オブジェクトの各ピクセルのZ値を、Zバッファと種々の方法で比較することができる。たとえば、オブジェクトピクセルを書き込むのは、オブジェクトZ値がZバッファ内の値とマッチする(オブジェクトピクセルが隠れていないことを示す)場合のみである。あるいは、オブジェクトピクセルを書き込むことができるのは、オブジェクトZ値がZバッファ内の値と同じかまたはそれを下回る(オブジェクトピクセルが隠れていないことを示す)場合のみである。行うテストのタイプはGPU構成内で規定される。
【0046】
図4は、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするようにマルチGPU処理用に構成されたグラフィックスパイプライン400をインプリメントあるいは実施するレンダリングアーキテクチャの略図である。グラフィックスパイプライン400は、3D(3次元)ポリゴンレンダリングプロセスを用いて画像をレンダリングするための一般的なプロセスを例示する。レンダリング画像に対するグラフィックスパイプライン400は、ディスプレイ内の各ピクセルに対する対応する色情報を出力する。色情報は、テクスチャ及びシェーディング(たとえば、色、シャドーイングなど)を表し得る。グラフィックスパイプライン400は、
図1及び3のクライアントデバイス110、ゲームサーバ160、ゲームタイトル処理エンジン111、及び/またはGPUリソース365内でインプリメント可能であり得る。すなわち、種々のアーキテクチャは、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって、複数のGPUが連携して単一画像をレンダリングすることを含んでいてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間でジオメトリのマルチGPUレンダリングをインプリメントあるいは実行すること、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内でジオメトリのマルチGPUレンダリングを実施することである。
【0047】
図示したように、グラフィックスパイプラインは入力ジオメトリ405を受け取る。たとえば、ジオメトリ処理ステージ410が入力ジオメトリ405を受け取る。たとえば、入力ジオメトリ405としては、3Dゲーミング世界内の頂点及び各頂点に対応する情報を挙げてもよい。ゲーミング世界内の所与のオブジェクトを、頂点によって規定されるポリゴン(たとえば、三角形)を用いて表すことができる。次に、グラフィックスパイプライン400を通じて対応するポリゴンの表面を処理し、最終的な効果(たとえば、色、テクスチャなど)を実現する。頂点属性としては、法線(たとえば、どの方向がジオメトリのその場所に垂直であるか)、色(たとえば、RGB-赤色、緑色、及び青色の三色など)、及びテクスチャ座標/マッピング情報を挙げてもよい。
【0048】
ジオメトリ処理ステージ410は、頂点処理(たとえば、頂点シェーダーを介して)及びプリミティブ処理の両方にレスポンシビリティを有する(またこれらを行うことができる)。詳細には、ジオメトリ処理ステージ410は、プリミティブを規定してそれをグラフィックスパイプライン400の次のステージに送出する頂点の組、ならびにそれらの頂点に対する位置(正確には、同次座標)及び他の種々のパラメータを出力してもよい。位置は、後のシェーダーステージによるアクセスに備えて、位置キャッシュ450に配置される。他のパラメータは、やはり後のシェーダーステージによるアクセスに備えて、パラメータキャッシュ460に配置される。
【0049】
種々の動作をジオメトリ処理ステージ410によって行ってもよい。たとえば、プリミティブ及び/またはポリゴンに対する照明及びシャドーイング計算を行うことである。一実施形態では、ジオメトリステージは、プリミティブを処理することができるため、バックフェース選抜除去及び/またはクリッピング(たとえば、視錐台に対するテスト)を実行することができ、その結果、下流ステージ(たとえば、ラスタライゼーションステージ420など)に対する負荷が減る。別の実施形態では、ジオメトリステージは、プリミティブを生成してもよい(たとえば、従来のジオメトリシェーダーと同等の機能により)。
【0050】
ジオメトリ処理ステージ410によって出力されたプリミティブを、ラスタライゼーションステージ420内に供給し、そこでプリミティブを、ピクセルからなるラスター画像に変換する。詳細には、ラスタライゼーションステージ420は、シーン内のオブジェクトを、3Dゲーミング世界内の視認場所(たとえば、カメラ場所、ユーザ眼場所など)によって規定される2次元(2D)像平面に投影するように構成されている。単純化したレベルでは、ラスタライゼーションステージ420は、各プリミティブを見て、どのピクセルが対応するプリミティブの影響を受けるかを判定する。詳細には、ラスタライザ420はプリミティブをピクセルサイズのフラグメントに分割する。各フラグメントはディスプレイ内のピクセルに対応する。画像を表示するときに、1つ以上のフラグメントが、対応するピクセルの色に寄与し得ることに留意することは重要である。
【0051】
前述したように、ラスタライゼーションステージ420によってさらなる動作を行ってもよい。たとえば、視認場所に対するクリッピング(視錐台の外側のフラグメントを特定して無視する)及び選抜除去(より近いオブジェクトによって隠されるフラグメントを無視する)である。クリッピングに関連して、ジオメトリ処理ステージ410及び/またはラスタライゼーションステージ420を、ゲーミング世界内の視認場所によって規定される視錐台の外側にあるプリミティブを特定して無視するように構成してもよい。
【0052】
ピクセル処理ステージ430は、ジオメトリ処理ステージによって形成されるパラメータ(ならびに他のデータ)を用いて、ピクセルの結果として生じる色などの値を生成してもよい。詳細には、ピクセル処理ステージ430は根本的に、フラグメントに対してシェーディング動作を実行して、プリミティブの色及び輝度が、利用可能な照明によってどのように異なるかを決定する。たとえば、ピクセル処理ステージ430は、各フラグメントに対する深さ、色、法線、及びテクスチャ座標(たとえば、テクスチャ詳細)を決定してもよく、さらに、フラグメントに対する光、暗さ、及び色の適切なレベルを決定してもよい。詳細には、ピクセル処理ステージ430は各フラグメントの特徴を計算する。たとえば、色及び他の属性(たとえば、視認場所からの距離に対するz深度、及び透明性に対するアルファ値)である。加えて、ピクセル処理ステージ430は、対応するフラグメントに影響する利用可能な照明に基づいてフラグメントに照明効果を適用する。さらに、ピクセル処理ステージ430は、各フラグメントに対してシャドーイング効果を適用してもよい。
【0053】
ピクセル処理ステージ430の出力は、処理されたフラグメント(たとえば、テクスチャ及びシェーディング情報)を含み、グラフィックスパイプライン400の次のステージにある440出力マージャーステージに送出される。出力マージャーステージ440は、ピクセル処理ステージ430の出力、ならびに他のデータ(たとえば、すでにメモリ内にある値)を用いて、ピクセルに対する最終色を生成する。たとえば、出力マージャーステージ440は、ピクセル処理ステージ430から決定されたフラグメント及び/またはピクセルと、そのピクセルに対してMRTにすでに書き込まれた値との間の値の任意的なブレンディングを実行してもよい。
【0054】
ディスプレイ内の各ピクセルに対する色値を、フレームバッファ(図示せず)に記憶してもよい。これらの値を、対応するピクセルにスキャンすることを、シーンの対応する画像を表示するときに行う。詳細には、ディスプレイは、各ピクセルに対するフレームバッファから色値を、行ごとに、左から右へまたは右から左へ、上から下へまたは下から上へ、または任意の他のパターンで読み出し、画像を表示するときにこれらのピクセル値を用いるピクセルを照明する。
【0055】
図1~3のクラウドゲームネットワーク190(たとえば、ゲームサーバ160内の)及びGPUリソース365の詳細な説明により、
図5のフロー
図500は、本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを実施するときにグラフィックス処理を行うための方法を例示する。このように、複数のGPUリソースを用いて、アプリケーションを実行するときにオブジェクトのレンダリング及び/または同期型計算操作を実行する。前述したように、種々のアーキテクチャには、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって、複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ内において、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内においてである。
【0056】
510において、本方法は、画像を生成するために連携する複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。詳細には、マルチGPU処理は、単一画像及び/またはリアルタイムアプリケーションに対する画像列の1つ以上の各画像をレンダリングするときに行う。
【0057】
520において、本方法は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割することを含む。すなわち、各GPUは、すべてのGPUに知られた、レスポンシビリティの対応するディビジョン(たとえば、対応するスクリーン領域)を有する。
【0058】
GPUは、対応する画像を同時にレンダリングする。ジオメトリをレンダリングする間、GPUは、ジオメトリと他のGPUがレスポンシビリティを有するスクリーン領域に対するその関係とに関する情報を生成する。これによって、他のGPUは、ジオメトリをより効率的にレンダリングし、及び/またはそのジオメトリのレンダリングを完全に回避することができる。言い換えれば、レンダリングにおいて他よりも「先行している」GPUは、他のGPUに、それらの処理を加速する情報を与えることができる。詳細には、530において、本方法は、第1のGPUがレスポンシビリティの第1のディビジョン(division)を有する第1のスクリーン領域に対するジオメトリのピースあるいは断片(piece)あるいは一部に関する情報を生成し、一方で、画像に対して第2のGPUにおいてジオメトリのピースをレンダリングすることを含む。より具体的には、GPUはそれぞれ、複数のスクリーン領域のうちの対応する組のスクリーン領域においてジオメトリをレンダリングすることにレスポンシビリティを有し、対応する組のスクリーン領域には1つ以上のスクリーン領域が含まれる。たとえば、第1のGPUは、第1の組のスクリーン領域(たとえば、第1のスクリーン領域を含む)においてオブジェクトをレンダリングするためのレスポンシビリティの第1のディビジョンを有する。また、第2のGPUは、第2の組のスクリーン領域においてオブジェクトをレンダリングするためのレスポンシビリティの第2のディビジョンを有する。したがって、各GPUは、オブジェクトのレンダリングを同時に開始し、オブジェクトのレンダリングにおいて先行しているあるGPUは、ジオメトリのそのピースのレンダリングにレスポンシビリティを有していてもよいしそうでなくてもよい別のGPUにとって有用なジオメトリのピースについてのヒントを生成し得る。
【0059】
たとえば、ジオメトリのピースをレンダリングする間に、GPUは、他のGPUがレスポンシビリティを有するスクリーン領域に関してジオメトリをテストする。テスト結果(たとえば、情報)はこれらの他のGPUに送られる。詳細には、レンダリングする間に、第2のGPUが画像のジオメトリをテストする。第2のGPUは、第1のGPUにレスポンシビリティが割り当てられたスクリーン領域または領域(複数)に関するジオメトリについての、第1のGPUに対する情報を生成する。テストには、たとえば、ジオメトリのピースが、第1のGPUにレスポンシビリティが割り当てられたスクリーン領域または領域(複数)とオーバーラップするか否かが含まれていてもよい。
【0060】
540において、本方法は、情報を用いて第1のGPUにおいてジオメトリのピースをレンダリングすることを含む。具体的には、いくつかのアーキテクチャにおいて、対応するレンダリングGPUが、対応する情報をそれを用いるのに間に合って受け取った場合、GPUはその情報を、対応する画像内でどのジオメトリをレンダリングすべきかを決定するときに用いる。すなわち、情報はヒントとして取られ得る。そうでない場合には、レンダリングGPUはジオメトリのピースを、通常行うように処理する。ジオメトリが、第1のGPU(たとえばレンダリングGPU)に割り当てられたスクリーン領域または領域(複数)とオーバーラップする否かを情報が示し得る例を用いて、ジオメトリのオーバーラップはないと情報が示す場合、第1のGPUはジオメトリのレンダリングを完全にスキップしてもよい。また、ジオメトリのピースのみがオーバーラップしないと情報が示す場合、第1のGPUは、第1のGPUにレスポンシビリティが割り当てられたスクリーン領域(複数可)とオーバーラップしないジオメトリのピースをスキップしてもよい。他方では、ジオメトリに対するオーバーラップがあると情報は示すことがあり、この場合、第1のGPUはジオメトリをレンダリングする。また、ジオメトリの特定のピースが、第1のGPUにレスポンシビリティが割り当てられたスクリーン領域または領域(複数)とオーバーラップすると情報は示す場合がある。その場合、第1のGPUは、オーバーラップするジオメトリのピースのみをレンダリングする。さらなる他の実施形態では、情報がない場合、または情報の生成もしくは受け取りが間に合わない場合、第1のGPUはレンダリングを通常通りに実行する(たとえば、ジオメトリをレンダリングする)。したがって、ヒントとして提供された情報は、間に合って受け取られた場合には、グラフィックス処理システムの全体的効率を増加させ得る。一実施形態では、情報が間に合って受け取られなかった場合、グラフィックス処理システムは、このような情報がない状態でもやはり適切に動作する。
【0061】
図6A-6Bに、純粋に説明を目的として、領域に細分割されたスクリーンに対するレンダリングを示す。当然のことながら、細分割する領域の数は、画像及び/または画像列の1つ以上の各画像の効率的なマルチGPU処理に対して選択可能である。すなわち、細分割する領域の数には2つ以上の領域が含まれていてもよい。本開示の一実施形態では、
図6Aに示すように、スクリーンを4つの四分円に細分割する。本開示の別の実施形態では、
図6Bに示すように、スクリーンをより大きい数のインターリーブ領域、あるいはインターリーブ領域に細分割する。以下の
図6A-6Bの説明は、複数のGPUに割り当てられた複数のスクリーン領域にマルチGPUレンダリングを行うときに生じる非効率性を例示することを意図している。
図7A-7C及び
図8A-8Bは、本発明のいくつかの実施形態による、より効率的なレンダリングを示している。
【0062】
詳細には、
図6Aは、マルチGPUレンダリングを行うときに四分円(たとえば、4つの領域)に細分割されるスクリーン610Aの図である。図示したように、スクリーン610Aは4つの四分円に細分割される(たとえば、B、C、及びD)。各四分円は、4つのGPU[GPU-A、GPU-B、GPU-C、及びGPU-D]のうちの1つに、1対1の関係で割り当てられる。たとえば、GPU-Aは四分円Aに割り当てられ、GPU-Bは四分円Bに割り当てられ、GPU-Cは四分円Cに割り当てられ、GPU-Dは四分円Dに割り当てられる。
【0063】
ジオメトリを選抜除去することができる。たとえば、CPU163は、各四分円の錐台に対して境界ボックスをチェックすることができ、各GPUに、その対応する錐台とオーバーラップするオブジェクトのみをレンダリングするようにリクエストすることができる。その結果、各GPUは、ジオメトリの一部のみをレンダリングすることにレスポンシビリティを有する。説明の目的上、スクリーン610はジオメトリのピースを示し、各ピースは対応するオブジェクトであり、スクリーン610はオブジェクト611~617(たとえば、ジオメトリのピース)を示している。四分円Aとオーバーラップするオブジェクトはないため、GPU-Aはオブジェクトをレンダリングしない。GPU-Bは、オブジェクト615及び616をレンダリングする(オブジェクト615の一部は四分円B内に存在するため、CPUの選抜除去テストは、GPU-Bはそれをレンダリングしなければならないと正しく結論する)。GPU-Cは、オブジェクト611及び612をレンダリングする。GPU-Dは、オブジェクト612、613、614、615、及び617をレンダリングする。
【0064】
図6Aにおいて、スクリーン610Aが四分円A~Dに分割されると、各GPUが実行しなければならない作業量は非常に異なるものとなり得る。なぜならば、場合によっては、不均一な数量のジオメトリが1つの四分円の中にあり得るからである。たとえば、四分円Aには何らジオメトリのピースはないが、四分円Dにはジオメトリの5つのピースまたはジオメトリの少なくとも5つのピースの少なくとも一部がある。したがって、四分円Aに割り当てられたGPU-Aは使われないが、四分円Dに割り当てられたGPU-Dは、対応する画像内でオブジェクトをレンダリングするときに不釣り合いに、あるいは突出してビジーとなる。
【0065】
図6Bに、スクリーンを領域に細分割するときの別の手法を例示する。詳細には、単一画像または画像列内の1つ以上の各画像のマルチGPUレンダリングを行うときに、四分円に細分割するのではなくて、スクリーン610Bを複数のインターリーブ領域に細分割する。その場合、スクリーン610Bを、より大きい数のインターリーブ領域に細分割し(たとえば、4つの四分円よりも多い)、一方で、同じ数量のGPUをレンダリング用に用いる(たとえば、4つ)。スクリーン610Aに示したオブジェクト(611~617)を、スクリーン610Bの同じ対応する場所にも示す。
【0066】
詳細には、4つのGPU[GPU-A、GPU-B、GPU-C、及びGPU-D]を用いて、対応するアプリケーションに対する画像をレンダリングする。GPUはそれぞれ、対応する領域とオーバーラップするジオメトリをレンダリングすることにレスポンシビリティを有する。すなわち、各GPUは対応する組の領域に割り当てられる。たとえば、GPU-Aは、対応する組においてAとラベル付けされた領域のそれぞれにレスポンシビリティを有し、GPU-Bは、対応する組においてBとラベル付けされた領域のそれぞれにレスポンシビリティを有し、GPU-Cは、対応する組においてCとラベル付けされた領域のそれぞれにレスポンシビリティを有し、GPU-Dは、対応する組においてDとラベル付けされた領域のそれぞれにレスポンシビリティを有している。
【0067】
さらに、領域は特定のパターンでインターリーブ、あるいは交互配置されている。領域をインターリーブする(かつ領域数をより多く)ことで、各GPUが実行しなければならない作業量は、はるかにバランスされ得る。たとえば、スクリーン610Bをインターリーブするパターンには、交互に変わる行(たとえば、領域A-B-A-Bなど、及び領域C-D-C-Dなど)が含まれる。本開示の実施形態では、領域をインターリーブする他のパターンもサポートされる。たとえば、パターンには、反復配列の領域、均一に分布する領域、不均一に分布する領域、反復行の配列の領域、ランダム配列の領域、ランダム行の配列の領域などが含まれていてもよい。
【0068】
領域の数を選ぶことは重要である。たとえば、領域の分配が細かすぎる(たとえば、領域の数が多すぎて最適ではない)場合、各GPUはやはりジオメトリの大部分または全部を処理しなければならない。たとえば、GPUがレスポンシビリティを有するすべての領域に対してオブジェクトの境界ボックスをチェックすることは難しい場合がある。また、境界ボックスを適時にチェックできるとしても、領域サイズが小さいために、結果として、各GPUはほとんどのジオメトリを処理しなければならない可能性がある。なぜならば、画像内のすべてのオブジェクトが、各GPUの少なくとも1つの領域とオーバーラップするからである(たとえば、GPUは、オブジェクトの一部のみが、そのGPUに割り当てられた領域の組内の少なくとも1つの領域とオーバーラップしたとしても、オブジェクト全体を処理する)。
【0069】
その結果、領域の数を選ぶことや、インターリーブのパターンなどが重要である。インターリーブ少なすぎるかもしくは多すぎる領域を選ぶ、またはインターリーブに対して少なすぎる領域もしくは多すぎる領域を選ぶ、またはインターリーブに対して非効率なパターン選ぶと、GPU処理を行うときの非効率につながり得る(たとえば、各GPUがジオメトリの大部分または全部を処理する)。このような場合、画像のレンダリング用に複数のGPUがある場合でも、GPUの非効率のために、スクリーンピクセル数及びジオメトリ密度の両方における対応する増加をサポートすることはできない(すなわち、4つのGPUが、4倍のピクセルを書き込むこと及び4倍の頂点またはプリミティブを処理することはできない)。以下の実施形態では、とりわけ、選抜除去方策(
図7A-7C)及び選抜除去の粒度(
図8A-8B)における改善を対象にする。
【0070】
図7A-7Cは、本開示の実施形態において、複数のGPUを用いて、単一画像及び/または画像列内の少なくとも1つ以上の各画像をレンダリングすることを例示する図である。4つのGPUの選択は単に、アプリケーションを実行しながら画像をレンダリングするときのマルチGPUレンダリングを簡単に例示するために行っており、当然のことながら、種々の実施形態におけるマルチGPUレンダリングに対して任意の数のGPUを用いてもよい。
【0071】
詳細には、
図7Aは、本開示の一実施形態により、連携して単一画像をレンダリングする複数のGPUによって共有されるレンダリングコマンドバッファ700Aの図である。すなわち、本実施例では、複数のGPUはそれぞれ、同じレンダリングコマンドバッファ(たとえば、バッファ700A)を使用し、GPUはそれぞれ、レンダリングコマンドバッファ内ですべてのコマンドを実行する。複数のコマンド(完全セット)が、レンダリングコマンドバッファ700A内にロードされて、対応する画像をレンダリングするために用いられる。当然のことながら、対応する画像を生成するために1つ以上のレンダリングコマンドバッファを用いてもよい。一例では、CPUは、画像フレームに対して1つ以上のドローコールを生成する。ドローコールには、対応する画像のマルチGPUレンダリングを行うときに
図3のGPUリソース365のうちの1つ以上のGPUによって実行されるように1つ以上のレンダリングコマンドバッファ内に配置されるコマンドが含まれる。いくつかの実施態様では、CPU163は1つ以上のGPUに、対応する画像をレンダリングするために用いるドローコールの全部または一部を生成するように要求してもよい。さらに、コマンドの全セットを
図7Aに示している場合があり、すべてレンダリングコマンドバッファ700A内に含まれているか、または
図7Aは、レンダリングコマンドバッファ700A内に含まれるコマンドの全セットの一部を示している場合がある。
【0072】
画像または画像列内の1つ以上の各画像のマルチGPUレンダリングを行うときに、GPUは同時にレンダリングする。画像のレンダリングは複数のフェーズに分解することができる。フェーズのそれぞれにおいて、GPUは同期させる必要があり、より速いGPUが、より遅いGPUの完了まで待機しなければならない。レンダリングコマンドバッファ700Aに対して
図7Aに示すコマンドは1つのフェーズを示している。レンダリングコマンドバッファ700Aは、画像をレンダリングするときの1つ以上のフェーズに対するコマンドを含んでいてもよい。1つのフェーズを例示する
図7Aに示すレンダリングコマンドバッファ700Aのピースにおいて、レンダリングすべき4つのオブジェクトがある(たとえば、オブジェクト0、オブジェクト1、オブジェクト2、及びオブジェクト3)。これを
図7B-1に示す。
【0073】
図示したように、
図7Aに示すレンダリングコマンドバッファ700Aのピースには、オブジェクトをレンダリングするためのコマンドと、レンダリングコマンドバッファ700Aからのコマンドを実行するための1つ以上のレンダリングGPUの状態を構成するためのコマンドとが含まれる。コマンドはさらに、コマンドのセクションに分離され得る、各セクションには1つ以上のコマンドが含まれる。オブジェクトレンダリング及び/または同期型計算に対するコマンドは、対応する画像(たとえば、画像フレーム)のレンダリングの一部分として行われる。いくつかの実施態様では、その画像に対するオブジェクトのレンダリング及び/または同期型計算カーネルの実行は、フレーム周期内で行わなければならない。単に説明の目的上、
図7Aに示すレンダリングコマンドバッファ700Aのピースには、対応するアプリケーションに対する対応する画像をレンダリングするときにオブジェクトをレンダリングし及び/または同期型計算カーネルを実行するために使用するコマンドの8つのセクション(710~717)が含まれる。
【0074】
たとえば、
図7Aに示すレンダリングコマンドバッファ700Aのピースには、コマンドの4つのセクション710、712、714、及び716が含まれる。それぞれ、レンダリングコマンドバッファ700A内のコマンドを実行している1つ以上のレンダリングGPUの状態を構成するために用いられる。前述したように、レジスタに記憶される値は、対応する画像に対してオブジェクトをレンダリングし及び/または同期型計算カーネルを実行するために使用するレンダリングコマンドバッファ700A内のコマンドを実行するときの対応するGPUに対するハードウェアコンテキスト(たとえばGPU構成)を規定する。図示したように、GPU状態は、レンダリングコマンドバッファ700A内のコマンドの処理の全体にわたって変更してもよい。コマンドの以後の各セクションを、GPU状態を構成するために用いてもよい。
【0075】
また、
図7Aに示すレンダリングコマンドバッファ700Aのピースには、対応するオブジェクトをレンダリングするために用いるコマンド711、713、715、及び717のセクションが含まれる。たとえば、セクション711における1つ以上のコマンドはオブジェクト0を描画及び/またはレンダリングするために用いられ、セクション713における1つ以上のコマンドはオブジェクト1を描画及び/またはレンダリングするために用いられ、セクション715における1つ以上のコマンドはオブジェクト2を描画及び/またはレンダリングするために用いられ、セクション717における1つ以上のコマンドはオブジェクト3を描画及び/またはレンダリングするために用いられる。
図7Aには、GPU状態を構成するために用いるセクションが、オブジェクトレンダリングのために用いるコマンドのセクションのそれぞれに先行すると示しているが、当然のことながら、GPU状態を1つ以上のオブジェクトをレンダリングするように構成してもよい。
【0076】
複数のGPUが情報(たとえば「ヒント」)を共有して、どのオブジェクトを対応するGPUによってレンダリングする必要があるかを判定するのに役立たせている。各GPUは、スクリーンの特定の領域(たとえば、オブジェクトレンダリングするために対応するGPUに割り当てられた領域の組)内でレンダリングすることにレスポンシビリティを有し得る。対応するGPUは、その領域または領域の組と完全に及び/または部分的にオーバーラップするオブジェクトをレンダリングする。レンダリング中に、第2のGPUは、オブジェクト及びスクリーン内でのその場所に関するヒントを生成し得る。図示したように、ヒント721は、オブジェクト0に対するレンダリング動作を行う間に第2のGPUによって生成され得て、他のGPUのそれぞれに提供され得る。同様に、ヒント723は、オブジェクト1に対するレンダリング動作を行う間に第2のGPUによって生成され得て、他のGPUのそれぞれに提供され得る。さらに、ヒント725はオブジェクト2に対するレンダリング動作を行う間に第2のGPUによって生成され得る。また、ヒント727はオブジェクト3に対するレンダリング動作を行う間に第2のGPUによって生成され得る。
【0077】
詳細には、レンダリング中に、第2のGPUは、他のGPUがレンダリングレスポンシビリティを有するスクリーン領域に関連する画像内のオブジェクトのうちの少なくとも1つ(たとえば、ジオメトリ)をテストし得る。テスト結果を含む情報をそれら他のGPUに送って、それら他のGPUが、オブジェクトのその独自のテストを軽減し及び/またはそれらのオブジェクトを効率的にレンダリングする目的でその情報を適時に受け取った場合に用い得るようにしてもよい。たとえば、情報は、第1のGPUがジオメトリのピースのレンダリングを完全にスキップすべきであると示してもよい(たとえば、ジオメトリのピースが、第1のGPUにオブジェクトレンダリングのレスポンシビリティが割り当てられたスクリーン領域とオーバーラップしない)。別の例では、情報が第1のGPUにヒントとして提供されて、情報が、第1のGPUにおいてジオメトリのその第1のピースに対するレンダリングが始まる前に受け取られた場合に、第1のGPUによって考えられるようにする。一実施形態では、情報が間に合って受け取られなかった場合には、ジオメトリの第1のピースを第1のGPUによって完全にレンダリングする。
【0078】
単に説明の目的上、4つのGPUが、対応するスクリーンをそれらの間の領域に分割する。矢印が、領域テストの他のGPUの通知を示している。たとえば、レンダリング中にヒントを生成する第2のGPUが、そのヒント(たとえば、情報)を他のGPU(たとえば、第1のGPU)に提供する。前述したように、対応する組の領域内でオブジェクトをレンダリングすることに各GPUがレスポンシビリティを有する。対応する組には1つ以上の領域が含まれる。
【0079】
一実施形態では、レンダリングコマンドバッファ700Aは、連携して単一画像をレンダリングする複数のGPUによって共有される。すなわち、単一画像または画像列内の1つ以上の各画像のマルチGPUレンダリングに対して用いるGPUが、共通のコマンドバッファを共有する。このように、オブジェクトに対するヒントを、同じオブジェクトをレンダリングしてもよいしそうでなくてもよい別のGPU(たとえば、第1のGPU)に提供する第2のGPUがそれぞれ、同じコマンドバッファを共有する。別の実施形態では、各GPUはそれ自身のコマンドバッファを有していてもよい。
【0080】
他の形態として、さらなる他の実施形態では、GPUはそれぞれ、ある程度異なるオブジェクト組をレンダリングしていてもよい。特定のGPUが特定のオブジェクトをレンダリングする必要がなく、なぜならば、それが、対応する組においてその対応するスクリーン領域とオーバーラップしないからであると判定できるときには、これは成り立ち得る。前述したように、コマンドをあるGPUによって実行できるが、別のコマンドでは実行できないことをコマンドバッファがサポートする限り、複数のGPUはやはり同じコマンドバッファを用いる(たとえば、1つのコマンドバッファを共有する)ことができる。たとえば、共有のレンダリングコマンドバッファ700A内のコマンドの実行を、レンダリングGPUの1つに限定してもよい。これは種々の方法で達成することができる。別の例では、フラッグを対応するコマンド上で用いて、どのGPUがそれを実行するべきかを示してもよい。また、どのGPUがどの条件下で何をするかを示すビットを用いて、レンダリングコマンドバッファ内で叙述を実施してもよい。叙述の例としては、「これがGPU-Aならば、次のXコマンドをスキップする」が挙げられる。
【0081】
さらなる他の実施形態では、実質的に同じ組のオブジェクトが各GPUによってレンダリングされているので、複数のGPUはやはり同じコマンドバッファを用い得る。たとえば、前述したように、領域が比較的小さいときには、各GPUはオブジェクトをすべてレンダリングしてもよい。
【0082】
図7B-1にスクリーン700Bを例示する。スクリーン700Bは、本開示の一実施形態により、
図7Aのレンダリングコマンドバッファ700Aを用いて複数のGPUによってレンダリングされる4つのオブジェクトを含む画像を示す。ジオメトリのマルチGPUレンダリングは、対応する画像内のジオメトリのレンダリング中に領域テストを行うことによってアプリケーションに対して行われる。
【0083】
詳細には、ジオメトリのレンダリングに対するレスポンシビリティは、複数のGPU間のスクリーン領域によって分割される。複数のスクリーン領域は、複数のGPU間のレンダリング時間のアンバランスを減らすように構成されている。たとえば、スクリーン700Bに、画像のオブジェクトをレンダリングするときの各GPUに対するスクリーン領域レスポンシビリティを示す。4つのGPU(GPU-A、GPU-B、GPU-C、及びGPU-D)を、スクリーン700Bに示す画像内のオブジェクトをレンダリングするために用いる。GPU間でのピクセル及び頂点ロードのバランスを取るために、スクリーン700Bを
図6Aに示す四分円よりも細かく分割する。加えて、スクリーン700Bを、インターリーブされる領域に分割する。たとえば、インターリーブには複数行の領域が含まれる。行731及び733はそれぞれ、領域Aが領域Bと交互に現れている。行732及び734はそれぞれ、領域Cが領域Dと交互に現れている。より詳細には、パターン内で、領域AとBを含む行は、領域CとDを含む行と交互に現れている。
【0084】
前述したように、GPU処理効率を達成するために、スクリーンを領域に分割するときに種々の技術を用いてもよい。たとえば、領域の数を増加または減少させる(たとえば、正確な領域量を選ぶために)、領域をインターリーブする、領域をインターリーブするときに特定のパターンをインターリーブして選択するために領域の数を増加または減少させる等である。一実施形態では、複数のスクリーン領域はそれぞれ、均一サイズである。一実施形態では、複数のスクリーン領域はそれぞれ、サイズが均一でない。さらなる他の実施形態では、複数のスクリーン領域の数及びサイジングは動的に変化する。
【0085】
GPUはそれぞれ、対応する組の領域内のオブジェクトのレンダリングにレスポンシビリティを有する。各組には1つ以上の領域が含まれていてもよい。したがって、GPU-Aは、対応する組における各A領域内のオブジェクトのレンダリングにレスポンシビリティを有し、GPU-Bは、対応する組における各B領域内のオブジェクトのレンダリングにレスポンシビリティを有し、GPU-Cは、対応する組における各C領域内のオブジェクトのレンダリングにレスポンシビリティを有し、GPU-Dは、対応する組における各D領域内のオブジェクトのレンダリングにレスポンシビリティを有する。他のレスポンシビリティを有するGPUがあってもよく、それらはレンダリングを行わないでもよい(たとえば、複数のフレーム周期にわたって実行される非同期型計算カーネルを行う、レンダリングGPUに対する選抜除去を行う等)。
【0086】
行うべきレンダリングの量はGPUごとに異なる。
図7B-2に、本開示の一実施形態により、
図7B-1の4つのオブジェクトをレンダリングするときに各GPUが行うレンダリングを示す表を例示する。表に示すように、GPU Aはオブジェクト2をレンダリングし、GPU Bはオブジェクト0、2、及び3をレンダリングし、GPU Cはオブジェクト1及び3をレンダリングし、GPU Dはオブジェクト1、2、及び3をレンダリングする。GPU Aは、オブジェクト2のみをレンダリングする必要があり、GPU Dは、オブジェクト1、2、及び3をレンダリングする必要があるため、さらにいくつかのアンバランスなレンダリングが存在し得る。しかし、全体として、スクリーン領域のインターリーブにより、画像内のオブジェクトのレンダリングは、画像のマルチGPUレンダリングまたは画像列内の1つ以上の各画像のレンダリングに対して用いる複数のGPU間で合理的にバランスされる。
【0087】
図7Cは、本開示の一実施形態により、複数のGPUが連携して
図7B-1に示す単一画像をレンダリングするときに、各GPUが行う各オブジェクトのレンダリングを例示する図である。詳細には、
図7Cに、
図7Aの共有のレンダリングコマンドバッファ700Aを用いて4つのGPUそれぞれ(たとえば、GPU-A、GPU-B、GPU-C、及びGPU-D)が行うオブジェクト0~3のレンダリングプロセスを示す。
【0088】
詳細には、2つのレンダリングタイミング図を時間軸740に対して示す。レンダリングタイミング
図700C-1は、レンダリングの1つのフェーズにおける対応する画像のオブジェクト0~3のマルチGPUレンダリングを示す。GPUはそれぞれ、オブジェクト0~3とスクリーン領域との間のオーバーラップに関する何らのヒントもない場合には、レンダリングを行う。レンダリングタイミング
図700C-2は、レンダリングの同じフェーズにおける対応する画像のオブジェクト0~3のマルチGPUレンダリングを示す。オブジェクト0~3とスクリーン領域との間のオーバーラップに関するヒントが、各GPUへのレンダリング中に共有される。レンダリングタイミング
図700C-1及び700C-2はそれぞれ、ジオメトリの各ピースを処理するために各GPUが取る時間を示す。一実施形態では、ジオメトリのピースはオブジェクト全体である。別の実施形態では、ジオメトリのピースはオブジェクトの一部であってもよい。説明の目的上、
図7Cの例はジオメトリのピースのレンダリングを示す。ジオメトリの各ピースはオブジェクトに対応する(たとえば、その全体において)。レンダリングタイミング
図700C-1及び700C-2のそれぞれにおいて、対応するGPUの少なくとも1つのスクリーン領域(たとえば、対応する組の領域内で)とオーバーラップするジオメトリ(たとえば、オブジェクトのプリミティブ)がないオブジェクト(たとえば、ジオメトリのピース)を、破線で描いたボックスで表している。他方で、対応するGPUの少なくとも1つのスクリーン領域(たとえば、対応する組の領域内で)とオーバーラップするジオメトリを有するオブジェクトを、実線で描いたボックスで表している。
【0089】
レンダリングタイミング
図700C-1は、4つのGPU(たとえばGPU-A、GPU-B、GPU-C、及びGPU-D)を用いたオブジェクト0~3のレンダリングを示す。レンダリングタイミング
図700C-1において、垂直線755aはオブジェクトに対するレンダリングのフェーズの開始を示し、垂直線755bはオブジェクトに対するレンダリングのフェーズの終了を示している。図示したレンダリングのフェーズに対する時間軸740に沿った開始点と終了点は、同期点を表している。4つのGPUはそれぞれ、対応するGPUパイプラインを実行するときに同期されている。たとえば、レンダリングのフェーズの終了を示す垂直線755bにおいて、すべてのGPUは、レンダリングの次のフェーズに移動する前に、最も遅いGPU(たとえば、GPU-B)が、対応するグラフィックスパイプラインを通してオブジェクト0~3のレンダリングを終えるのを待たなければならない。
【0090】
レンダリングタイミング
図700C-1に示すオブジェクトをレンダリングする間、ヒンティングは提供されない。したがって、各GPUは、対応するグラフィックスパイプラインを通して各オブジェクトを処理しなければならない。オブジェクトレンダリングに対して対応するGPUに割り当てられた領域(たとえば、対応する組の領域内で)においてオブジェクトに対して描くべきピクセルがない場合、GPUはグラフィックスパイプラインを通してオブジェクトを完全にはレンダリングしない場合がある。たとえば、オブジェクトがオーバーラップしないとき、グラフィックスパイプラインのジオメトリ処理ステージのみが実行される。しかし、ヒンティングがないと、これはやはり処理に多少の時間がかかる。
【0091】
詳細には、GPU-Aはオブジェクト0、1、及び3を完全にはレンダリングしない。なぜならば、それらが、オブジェクトレンダリングに対してGPU-Aに割り当てられたスクリーン領域のいずれともオーバーラップしないからである。これら3つのオブジェクトのレンダリングを、破線を伴うボックス内に示す。これは、少なくともジオメトリ処理ステージは行われているが、グラフィックスパイプラインは完全には行われていないことを示している。GPU-Aはオブジェクト2を完全にレンダリングする。なぜならば、そのオブジェクトは、レンダリングに対してGPU-Aに割り当てられた少なくとも1つのスクリーン領域(たとえば、対応する組における)とオーバーラップするからである。オブジェクト2のレンダリングを、実線を伴うボックス内に示す。これは、対応するグラフィックスパイプラインのすべてのステージが行われることを示している。同様に、GPU-Bはオブジェクト1(破線を伴うボックスで示す)を完全にはレンダリングしない(すなわち、少なくともジオメトリ処理ステージを行う)が、オブジェクト0、2、及び3(実線を伴うボックスで示す)を完全にレンダリングする。なぜならば、これらのオブジェクトは、レンダリングに対してGPU-Bに割り当てられた少なくとも1つのスクリーン領域(たとえば、対応する組における)とオーバーラップするからである。また、GPU-Cはオブジェクト0及び2(破線を伴うボックスで示す)を完全にはレンダリングしない(すなわち、少なくともジオメトリ処理ステージを行う)が、オブジェクト(実線を伴うボックスで示す)を完全にレンダリングする。なぜならば、これらのオブジェクトは、レンダリングに対してGPU-Cに割り当てられた少なくとも1つのスクリーン領域(たとえば、対応する組における)とオーバーラップするからである。さらに、GPU-Dはオブジェクト0(破線を伴うボックスで示す)を完全にはレンダリングしない(すなわち、少なくともジオメトリ処理ステージを行う)が、オブジェクト1、2、及び3(実線を伴うボックスで示す)を完全にレンダリングする。なぜならば、これらのオブジェクトは、レンダリングに対してGPU-Dに割り当てられた少なくとも1つのスクリーン領域(たとえば、対応する組における)とオーバーラップするからである。
【0092】
レンダリングタイミング
図700C-2は、ヒントの共有を伴ってマルチGPUレンダリングを行うときのオブジェクト0~3のレンダリングを示す。具体的には、ヒントは、各GPU(たとえば、GPU-A、GPU-B、GPU-C、及びGPU-D)の間で共有されて、対応するGPUパイプラインを通してオブジェクト0~3をレンダリングするときに考慮される。レンダリングタイミング
図700C-2において、垂直線750aはオブジェクトに対するレンダリングのフェーズの開始を示し、垂直線750bはオブジェクトに対するレンダリングのフェーズの終了を示す。タイミング
図700C-2に図示したレンダリングのフェーズに対する時間軸740に沿った開始点と終了点は、同期点を表している。前述したように、4つのGPUはそれぞれ、対応するGPUパイプラインを実行するときに同期される。たとえば、レンダリングのフェーズの終了を示す垂直線750bにおいて、すべてのGPUは、レンダリングの次のフェーズに移動する前に、最も遅いGPU(たとえば、GPU-B)が、対応するグラフィックスパイプラインを通してオブジェクト0~3のレンダリングを終えるのを待たなければならない。
【0093】
垂直線750aは垂直線755aと位置合わせされていて、レンダリングタイミング
図700C-1及び700C-2がそれぞれ同時に始まって、オブジェクト0~1をレンダリングするようになっている。しかし、レンダリングタイミング
図700C-2に示すオブジェクト0~3のレンダリングは、レンダリングタイミング
図700C-1に示すレンダリングよりも短い時間で行われる。すなわち、下部のタイミング
図700C-2に対するレンダリングのフェーズの終了を示す垂直線750bは、垂直線755bによって示される上部のタイミング
図700C-1に対するレンダリングのフェーズの終了よりも早く現れる。具体的には、領域テストを行ってこれらのテストの結果をヒントによって提供するときに、アプリケーションに対する画像のジオメトリのマルチGPUレンダリングを行うときに、オブジェクト0~3をレンダリングするときの速度増加745が実現される。図示したように、速度増加745は、タイミング
図700C-2の垂直線750bとタイミング
図700C-1の垂直線755bとの間の時間差である。
【0094】
速度増加はヒントの生成及び共有を通して実現される。詳細には、GPUがグラフィックスパイプラインを通してオブジェクトを処理するときに、各GPUは、オブジェクトをチェックして、オブジェクトがこれらのGPUのスクリーンレスポンシビリティをどのように関係付けるかについての情報をヒントとして他のGPUに送る。たとえば、レンダリングタイミング
図700C-2では3つのヒント761~763が提供される。これによって、オブジェクト0~3をレンダリングするために用いる全体時間が減る。ヒントを矢印として表す場合がある。対応する矢印は、1つのGPUが第2のGPUに、それがオブジェクトをスキップし得ると通知し、第2のGPUはそのオブジェクトのスキップに成功する様子を示している。ヒントはレンダリングの間(たとえば、ジオメトリ処理ステージの間)の任意の点で生成され得るため、GPUがオブジェクトを完全にレンダリングする(すなわち、グラフィックスパイプラインのすべてのステージを通る)ことをしない場合であっても、GPUはやはりそのオブジェクトについてのヒントを生成して、レンダリングに対する他のGPUに提供し得る。
【0095】
たとえば、GPU-Aは、オブジェクト1に対するジオメトリ処理を行って、オブジェクト1はGPU-Bによってスキップできると判定する。なぜならば、オブジェクト1は、オブジェクトレンダリングに対してGPU-Bに割り当てられたどんな領域(たとえば、対応する組における)ともオーバーラップしないからである。加えて、オブジェクト1はGPU-Aによって完全にはレンダリングされていない。なぜならば、オブジェクト1は、オブジェクトレンダリングに対してGPU-Aに割り当てられたどんな領域(たとえば、対応する組における)ともオーバーラップしないからである。GPU-Bに割り当てられた領域によるオブジェクト1とのオーバーラップはないという判定は、GPU-Bがオブジェクト1に対するジオメトリ処理を始める前になされるため、GPU-Bはオブジェクト1のレンダリングをスキップする。詳細には、GPU-Aが、オブジェクト1のレンダリングを始めて(たとえば、ジオメトリ処理ステージにおいて)、オブジェクト1が、オブジェクトレンダリングに対してGPU-Bに割り当てられたどんな領域ともオーバーラップしないことを知る。したがって、GPU-Aは、GPU-Bがオブジェクト1をレンダリングする必要はないことを示す情報を伴うヒント761を生成して送出してもよい。ヒント761は適時に(すなわち、オブジェクト1のレンダリングがGPU-Bによって始まる前に)送出される。参考までに、ヒント761は、上部のタイミング
図700C-1においてオブジェクト1のレンダリングがGPU-Bによって行われる前(すなわち、GPU-Bは現在オブジェクト0をレンダリングしているとき)であっても提供される。その場合、GPU-Bはオブジェクト1に対するレンダリングプロセスを完全にスキップしてもよく、そのオブジェクトに対して、対応するグラフィックスパイプラインのステージのどれも行われない(たとえば、第1のステージとしてのジオメトリ処理ステージは行われない)。
【0096】
レンダリングタイミング
図700C-2の例を続けると、GPU-Bはオブジェクト2を完全にレンダリングする。オブジェクト2のレンダリングの間に、GPU-Bは、オブジェクト2(たとえば、ジオメトリ処理ステージ中)が、オブジェクトレンダリングに対するGPU-Cに割り当てられた任意の領域(たとえば、対応する組における)とオーバーラップしないと判定する。この判定は、GPU-Cがオブジェクト2に対するジオメトリ処理を始める前になされるため、GPU-Cはオブジェクト2のレンダリングをスキップすることができる。たとえば、GPU-Bは、GPU-Cがオブジェクト2をレンダリングする必要はないことを示す情報を伴うヒント762を生成して送出してもよい。ヒント762は適時に、すなわちオブジェクト2のレンダリングがGPU-Cによって始まる前(たとえば、GPU-Cは現在オブジェクト1をレンダリングしているとき)に、送出される。参考までに、ヒント762は、上部のタイミング
図700C-1においてオブジェクト2のレンダリングがGPU-Cによって行われる前であっても提供される。その場合、GPU-Cはオブジェクト2に対するレンダリングプロセスを完全にスキップしてもよく、そのオブジェクトに対して、対応するグラフィックスパイプラインのステージのどれも行われない(たとえば、第1のステージとしてのジオメトリ処理ステージは行われない)。
【0097】
またGPU-Bはオブジェクト3を完全にレンダリングする。レンダリングの間に、GPU-Bは、オブジェクト3(たとえば、ジオメトリ処理ステージ中)が、オブジェクトレンダリングに対するGPU-Aに割り当てられた任意の領域(たとえば、対応する組における)とオーバーラップしないと判定する。この判定は、GPU-Aがオブジェクト3に対するジオメトリ処理を始める前になされるため、GPU-Aはオブジェクト3のレンダリングをスキップすることができる。たとえば、GPU-Bは、GPU-Aがオブジェクト3をレンダリングする必要はないことを示す情報を伴うヒント763を生成して送出してもよい。ヒント763は適時に、すなわちオブジェクト3のレンダリングがGPU-Aによって始まる前(たとえば、GPU-Aは現在オブジェクト2をレンダリングしているとき)に、送出される。その場合、GPU-Aは、オブジェクト3に対するレンダリングプロセスを完全にスキップしてもよく、そのオブジェクトに対して、対応するグラフィックスパイプラインのステージのどれも行われない(たとえば、第1のステージとしてのジオメトリ処理ステージは行われない)。
【0098】
図8A~8Bに、スクリーン領域820A及び820Bに対するオブジェクトテストを示す。スクリーン領域はインターリーブ領域であってもよい(たとえば、スクリーン領域820A及び820Bはディスプレイの一部を示す)。詳細には、オブジェクトのマルチGPUレンダリングは、スクリーン内のオブジェクトをレンダリングする間の領域テストによって、単一画像または画像列内の1つ以上の各画像に対して行われる。GPU-Aには、スクリーン領域820A内のオブジェクトをレンダリングするレスポンシビリティが割り当てられる。GPU-Bには、スクリーン領域820B内のオブジェクトをレンダリングするレスポンシビリティが割り当てられる。「ジオメトリのピース」に対する情報が生成される。ジオメトリのピースは、オブジェクト全体またはオブジェクトの一部とすることができる。たとえば、ジオメトリのピースは、オブジェクト810またはオブジェクト810の一部とすることができる。
【0099】
図8Aは、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトテストを例示する図である。前述したように、ジオメトリのピースはオブジェクトとすることができ、ピースは、対応するドローコールが使用または生成するジオメトリに対応する。テストの間に、オブジェクト810は領域820Aとオーバーラップすると判定され得る。すなわち、オブジェクト810の部分810Aは領域820Aとオーバーラップする。その場合、GPU-Aにはオブジェクト810をレンダリングすることが課される。また、テストの間に、オブジェクト810は領域820Bとオーバーラップすると判定され得る。すなわち、オブジェクト810の部分810Bは領域820Bとオーバーラップする。その場合、GPU-Bにもオブジェクト810をレンダリングすることが課される。
【0100】
図8Bは、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトの一部のテストを例示する図である。すなわち、ジオメトリのピースをオブジェクトの一部とすることができる。たとえば、オブジェクト810をピースに分割してもよく、ドローコールが使用または生成するジオメトリはジオメトリのより小さいピースに細分割される。一実施形態では、ジオメトリのピースはそれぞれ大まかに、位置キャッシュ及び/またはパラメータキャッシュが割り当てられるサイズである。その場合、ジオメトリのそれらのより小さいピースに対して、情報(たとえば、ヒントまたはヒント(複数))が生成される。前述したように、情報はレンダリングGPUによって用いられる。
【0101】
たとえば、オブジェクト810はオブジェクトに分割される。領域テスト及びヒンティングに対して用いるジオメトリのピースは、これらのより小さいオブジェクトに対応する。図示したように、オブジェクト810は、ジオメトリのピース「a」、「b」、「c」、「d」、「e」、及び「f」に分割される。領域テストの後に、GPU-Aは、ジオメトリのピース「a」、「b」、「c」、「d」、及び「e」のみをレンダリングする。すなわち、GPU-Aは、ジオメトリのピース「f」のレンダリングをスキップすることができる。また、領域テストの後に、GPU-Bは、ジオメトリのピース「d」、「e」、及び「f」のみをレンダリングする。すなわち、GPU-Bは、ジオメトリのピース「a」、「b」、及び「c」のレンダリングをスキップすることができる。
【0102】
一実施形態では、ジオメトリ処理ステージは頂点処理及びプリミティブ処理の両方を行うように構成されているため、ジオメトリ処理ステージにおいて用いるシェーダーにおいてジオメトリのピースのテストを行うことができる。たとえば、ジオメトリ処理ステージは、GPUスクリーン領域に対してジオメトリに対する境界錐台をテストすること(ソフトウェアシェーダー動作によって行われ得る)などによって、情報(たとえば、ヒント)を生成する。一実施形態では、このテストは、ハードウェアを通して実施される専用命令または命令(複数)を用いることを通して加速され、その結果、ソフトウェア/ハードウェア解決策が実施される。すなわち、専用命令または命令(複数)を用いて、ジオメトリのピースとスクリーン領域に対するその関係とに関する情報の生成を加速する。たとえば、ジオメトリのピースのプリミティブの頂点の同次座標が、ジオメトリ処理ステージにおける領域テストに対する命令への入力として提供される。テストによって、各GPUに対して、プリミティブがそのGPUに対して割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするか否かを示すブール戻り値を、生成してもよい。したがって、対応するジオメトリピースとスクリーン領域に対するその関係とに関する情報(たとえば、ヒント)が、ジオメトリ処理ステージにおけるシェーダーによって生成される。
【0103】
別の実施形態では、ジオメトリのピースのテストを、ハードウェアラスタライゼーションステージにおいて行うことができる。たとえば、ハードウェアスキャンコンバータをマルチGPU領域テストを行うように構成してもよい。詳細には、GPUはその独自のスクリーン領域に対してジオメトリをテストしなければならないため、他のGPUのスクリーン領域に対する情報をスキャンコンバータが生成するようにハードウェアを変更してもよい。したがって、ハードウェアスキャンコンバータを、対応するジオメトリピースとレンダリングGPU(たとえば、別のGPU)がレスポンシビリティを有するスクリーン領域に対するその関係とに関するラスタライゼーションステージにおいて、情報を生成するように構成してもよい。
【0104】
さらなる他の実施形態では、ジオメトリのピースはプリミティブとすることができる。すなわち、領域テストに対して用いるオブジェクトの一部はプリミティブであってもよい。したがって、1つのGPUがヒントとして生成する情報は、個々の三角形(たとえば、プリミティブを表す)を別のレンダリングGPUがレンダリングする必要があるか否かを示す。
【0105】
一実施形態では、ヒントとして提供される情報には、オブジェクトレンダリングに対して対応するGPUに割り当てられたスクリーン領域(たとえば、対応する組における)とオーバーラップするプリミティブの数(たとえば、残存しているプリミティブ数)が含まれる。また情報には、これらのプリミティブを構築または規定するために用いられる頂点の数が含まれていてもよい。すなわち、情報には残存している頂点数が含まれる。したがって、レンダリングするとき、対応するレンダリングGPUは、供給された頂点数を用いて位置キャッシュ及びパラメータキャッシュにスペースを割り当ててもよい。たとえば、一実施形態では、必要でない頂点に割り当てられるスペースはないため、レンダリングの効率が増加し得る。
【0106】
他の実施形態では、ヒントとして提供される情報には、オブジェクトレンダリングに対して対応するGPUに割り当てられたスクリーン領域(たとえば、対応する組における)とオーバーラップする特定のプリミティブ(たとえば、完全一致として残存しているプリミティブ)が含まれる。すなわち、レンダリングGPUに対して生成される情報には、レンダリング用の特定の組のプリミティブが含まれる。また情報には、これらのプリミティブを構築または規定するために用いられる特定の頂点が含まれていてもよい。すなわち、レンダリングGPUに対して生成される情報には、レンダリング用の特定の組の頂点が含まれる。この情報によって、たとえば、ジオメトリのピースをレンダリングするときのそのジオメトリ処理ステージ中に他のレンダリングGPU時間が節約され得る。
【0107】
さらに他の実施形態では、情報の生成に対応付けられる処理オーバヘッド(ソフトウェアまたはハードウェアのいずれか)があり得る。その場合、ジオメトリの特定のピースに対してはヒントとして情報を生成することをスキップすることが有用であり得る。すなわち、ヒントとして提供される情報は、特定のオブジェクトに対しは生成されるが、他に対しては生成されない。たとえば、スカイボックスまたは大きな地形ピースを表すジオメトリのピース(たとえば、オブジェクトまたはオブジェクトのピース)には、大きな三角形が含まれていてもよい。その場合、画像または画像列内の1つ以上の各画像のマルチGPUレンダリングに対して用いる各GPUが、ジオメトリのこれらのピースをレンダリングする必要があるという可能性がある。すなわち、対応するジオメトリピースの特性に応じて、情報を生成してもよいし生成しなくてもよい。
【0108】
図9A~9Cに、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときにスクリーン領域を対応するGPUに割り当てるための種々の方策を例示する。GPU処理効率を達成するために、スクリーンを領域に分割するときに種々の技術を用いてもよい。たとえば、領域の数を増加または減少させる(たとえば、正確な領域量を選択するために)、領域をインターリーブする、領域をインターリーブするときに特定のパターンをインターリーブして選択するために領域の数を増加または減少させる等である。たとえば、複数のGPUは、対応する画像内のオブジェクトをレンダリングする間の領域テストによって、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成されている。
図9A~9Cのスクリーン領域の構成は、複数のGPU間のレンダリング時間のわずかなアンバランスも減らすようにデザインされている。テストの複雑さ(たとえば、対応するスクリーン領域にオーバーラップする)は、スクリーン領域がGPUにどのように割り当てられたかに応じて変化する。
図9A~9Cに示す図に示すように、太字のボックス910は、画像をレンダリングするときに用いる対応するスクリーンまたはディスプレイのアウトラインである。
【0109】
一実施形態では、複数のスクリーン領域または複数の領域はそれぞれ、均一サイズである。一実施形態では、複数のスクリーン領域はそれぞれ、サイズが均一でない。さらなる他の実施形態では、複数のスクリーン領域の数及びサイジングは動的に変化する。
【0110】
詳細には、
図9Aに、スクリーン910に対する簡単なパターン900Aを例示する。スクリーン領域はそれぞれ、均一サイズである。たとえば、各領域のサイズは、2ピクセルの累乗である寸法の矩形であってもよい。たとえば、各領域はサイズが256×256ピクセルであってもよい。図示するように、領域割り当てはチェックボードパターンであり、A及びB領域のある行がB及びC領域の別の行と交互になっている。パターン900Aは容易にテストされ得る。しかし、いくつかのレンダリング非効率さが存在し得る。たとえば、各GPUに割り当てられたスクリーン面積は実質的に異なっている(すなわち、スクリーン910内でスクリーン領域C及び領域Dに対するカバレージの方が小さい)。そのため、各GPUに対するレンダリング時間のアンバランスにつながり得る。
【0111】
図9Bに、スクリーン910に対するスクリーン領域のパターン900Bを例示する。スクリーンまたはサブ領域はそれぞれ、均一サイズである。スクリーン領域は、GPU間のレンダリング時間のアンバランスを減らすように割り当てられて分配されている。たとえば、パターン900BでGPUをスクリーン領域に割り当てると、スクリーン910にわたって各GPUに割り当てられるスクリーンピクセルの数量がほぼ等しくなる。すなわち、スクリーン910内のスクリーン面積またはカバレージが等しくなるように、スクリーン領域はGPUに割り当てられている。たとえば、各領域が256×256ピクセルのサイズである場合、スクリーン910内での各領域のカバレージはほぼ同じである。詳細には、スクリーン領域Aの組は、6×256×256ピクセルのサイズの面積をカバーし、スクリーン領域Bの組は、5.75×256×256ピクセルのサイズの面積をカバーし、スクリーン領域Cの組は、5.5×256×256ピクセルのサイズの面積をカバーし、スクリーン領域Dの組は、5.5×256×256ピクセルのサイズの面積をカバーする。
【0112】
図9Cに、スクリーン910に対するスクリーン領域のパターン900Cを例示する。スクリーン領域はそれぞれ、サイズが均一でない。すなわち、GPUにオブジェクトをレンダリングするレスポンシビリティが割り当てられたスクリーン領域は、サイズが均一でない場合がある。詳細には、各GPUが同一数のピクセルに割り当てられるようにスクリーン910は分割されている。たとえば、4Kディスプレイ(3840×2160)を垂直方向に4つの領域に等しく分割した場合、各領域は高さが520ピクセルになる。しかし、通常、GPUは32×32ブロックのピクセルにおいて多くの動作を行い、520ピクセルは32ピクセルの倍数ではない。したがって、一実施形態では、パターン900Cには、高さが512ピクセル(32の倍数)のブロックと、高さが544ピクセル(やはり32の倍数)の他のブロックとが含まれていてもよい。他の実施形態では、異なるサイズのブロックを用いてもよい。パターン900Cは、不均一のスクリーン領域を用いることによって等しい数量のスクリーンピクセルが各GPUに割り当てられている様子を示している。
【0113】
さらなる他の実施形態では、画像のレンダリングを行うときのアプリケーションのニーズが時間とともに変化し、スクリーン領域が動的に選択される。たとえば、レンダリング時間のほとんどがスクリーンの下半分上で費やされることが分かっている場合、ディスプレイの下半分におけるほぼ等しい数量のスクリーンピクセルが、対応する画像をレンダリングするために用いる各GPUに割り当てられるように、領域を割り当てることが好都合である。すなわち、対応する画像をレンダリングするために用いる各GPUに割り当てる領域を動的に変えてもよい。たとえば、ゲームモード、異なるゲーム、スクリーンのサイズ、領域に対して選択されるパターンなどに基づいて、変更を適用してもよい。
【0114】
図10Aは、本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うときのマルチパスレンダリングを例示する図である。各GPU(GPU-A、GPU-B、GPU-C、及びGPU-D)が行う第1のパスは、Zのみプリパス1000Aであり、
図7Cのレンダリングタイミング
図700C-2と同様である。第1のパスは、レンダリングの第1のフェーズと考えてもよい。各GPUが行う第2のパスはレンダリングパス1000Bである。GPUは、対応する各GPUが生成及び使用する内部ヒントを考慮して、オブジェクトを完全にレンダリングする。第2のパスは、レンダリングの第2のフェーズと考えてもよい。
【0115】
詳細には、レンダリングのあるフェーズ(たとえば第1のパス)において生成されたジオメトリのピースに対する情報が、レンダリングの別のフェーズ(たとえば、第2のパス)において用いられる。すなわち、GPUによるレンダリングの1つのフェーズに対して生成された内部ヒントが、同じGPUによるレンダリングの別のフェーズにおいて用いられる。したがって、ジオメトリの同じピースが2回処理される。すなわち、Zのみプリパスフェーズ1000Aにおいて一度、そしてフルレンダリングフェーズ1000Bにおいて一度である。具体的には、プリパスフェーズ1000Aはジオメトリのすべてのピースに対してZ値のみを書き込む。そして、前述したように、フルレンダリングフェーズ1000Bの間に、ピクセルZ値を以前に記憶したZバッファ内の値と比較する。一実施態様では、完全一致がある場合には、そのピクセルに対してピクセルシェーダー(たとえば、ピクセル処理ステージ)を実行する。
【0116】
GPUが他のGPUに対して情報を生成する
図7Cとは異なり、この場合は、GPUが、次のパスで用いるためにそれ自身に対する情報を生成している場合もあり得る。すなわち、GPUが、次のパスにおいて用いるべきそれ自身に対するヒントを提供するように、GPUはその独自の情報を用いる。ジオメトリのピースがそれがレスポンシビリティを有する少なくとも1つの対応するスクリーン領域とオーバーラップするか否かを知ることは有用であるが(
図7Cで前述したように)、いくつかの実施形態では、GPUは、後のレンダリングフェーズにおいて単独で使用できるより広範囲な情報を生成することができる。
【0117】
一実施形態では、Zのみプリパス1000Aの間に、対応するGPUが、ジオメトリ処理フェーズが出力するプリミティブをラスタライズして、深さテストを行う。深さテストでは、GPUはそれらのピクセルのZ値を対応するZバッファと比較する。GPUは、第1のフェーズ中にジオメトリのピース内の任意のピクセルが深さテストに耐えたか否かに関する情報を生成する(そして後にそれ自身が利用できるようにする)。第1のフェーズにおいてテストに耐えたピクセルがない場合、第2のフェーズにおいてジオメトリのピースのレンダリングをすべてスキップすることができる。
【0118】
別の実施形態では、Zのみプリパスフェーズ1000Aの間に、ピクセルシェーダーを実行する。たとえば、テクスチャのアルファ値をチェックした後に、アルファ値が低くすぎるピクセルを削除する。詳細には、GPUは、ジオメトリのピース内の任意のピクセルが第1のフェーズ中に書き込まれた否かに関する情報を生成し(そして後にそれ自身が利用できるようにして)、これらのピクセルが深さテスト及びピクセル削除テストの両方に耐えるようにする。第1のフェーズ1000Aにおいて書き込まれたピクセルがない場合、第2のフェーズ1000Bにおいてジオメトリのピースのレンダリングをすべてスキップすることができる。たとえば、矢印1020は、GPU-Cがオブジェクト3に関する情報をそれ自身に送る様子を示している。情報は、フルレンダリングフェーズ1000BにおいてGPU-Cがオブジェクト3のレンダリングをスキップできることを示している。加えて、矢印1030は、GPU-Dがオブジェクト1に関する情報をそれ自身に送る様子を示している。情報は、フルレンダリングフェーズ1000BにおいてGPU-Dがオブジェクト1のレンダリングをスキップできることを示している。なお、この例では、GPUが、あるフェーズ(たとえば、Zのみプリパスフェーズ1000A)において生成された情報をそれ自身に送って、以後のフェーズ(たとえばフルレンダリングフェーズ1000B)において使用するようにすることにフォーカスしている。他の実施形態では、GPUが、あるフェーズ(たとえば、Zのみプリパスフェーズ1000A)において生成された情報を他のGPUにも送って、それらが以後のフェーズ(たとえばフルレンダリングフェーズ1000B)において使用し得るようにしてもよい。
【0119】
図1~3のクラウドゲームネットワーク190(たとえば、ゲームサーバ160内の)及びGPUリソース365の詳細な説明、ならびに
図4~9に付随する補足説明により、
図10Bのフロー
図1050は、本開示の一実施形態により、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを実施するときのマルチパスレンダリングを含むグラフィックス処理のための方法を例示する。フロー
図1050は、一実施形態における、
図10Aに示すマルチパスレンダリングを実施するための方法である。加えて、フロー
図1050には、
図5のフロー
図500の動作のうちの1つ以上が組み込まれ得る。前述したように、種々のアーキテクチャには、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ内において、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内においてである。
【0120】
1060において、本方法は、連携して画像を生成する複数のGPUを用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。具体的には、マルチGPU処理は、単一画像及び/またはリアルタイムアプリケーションに対する画像列の1つ以上の各画像をレンダリングするときに行う。
【0121】
1065において、本方法は、グラフィックスのジオメトリのレンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割することを含む。すなわち、各GPUは、すべてのGPUに知られた、レスポンシビリティの対応するディビジョン(たとえば、対応するスクリーン領域)を有する。
【0122】
GPUはそれぞれ、画像のジオメトリのマルチパスレンダリングを実行する。これには、レンダリングのZのみプリパスフェーズである第1のパスと、レンダリングのフルレンダリングフェーズである第2のパスとが含まれる。GPUによって第1のパスにおいて生成されたジオメトリのピースに対する情報を、同じGPUがジオメトリのピースをレンダリングするときに第2のパスにおいて用いてもよい。
【0123】
より具体的には、1070において、本方法は、画像に対するGPUにおけるジオメトリのピースに対するレンダリングのプリパスフェーズ中にジオメトリのピースに対するZ値を決定することを含む。ジオメトリのピースが、GPUがオブジェクトをレンダリングするレスポンシビリティのディビジョンを有するスクリーン領域とオーバーラップすると判定してもよい。
【0124】
1075において、本方法は、Z値をジオメトリのピースに対するZバッファ値と比較することを含む。前述したように、GPUは、ジオメトリのピースに対するプリミティブをラスタライズしてもよい(たとえば、プリミティブをピクセルからなるラスター画像に変換してもよい)。深さテストを行い、ジオメトリのピースのピクセルのZ値を、対応するZバッファ値(たとえば、そこに記憶された値)と比較する。たとえば、それを比較するときに、ジオメトリのピースのZ値がZバッファ値以下であると判定してもよい。これは、ジオメトリのピースが隠れていないことを示す。その場合、以下で生成される任意の情報が、ジオメトリのピースが隠れていないことを示し得る。
【0125】
1080において、本方法は、レンダリングのフルレンダリングフェーズ中にジオメトリのピースをレンダリングするときに、GPUが用いるようにZ値をZバッファ値と比較する結果を含む情報を生成することを含む。具体的には、情報は、ジオメトリのピース内の任意のピクセルが深さテストに耐えたか否かを示してもよい。深さテストに耐えたピクセルがない場合、第2のパス(たとえば、レンダリングフェーズ)においてジオメトリのピースをスキップすることができる。たとえば、本方法は、プリパスフェーズ中にジオメトリのピースの1つ以上のプリミティブを複数のピクセルにラスタライズすることを含んでいてもよい。深さテストは、複数のピクセルに対する複数のZ値を1つ以上の対応するZバッファ値と比較することによって行う。深さテストの結果が情報に含まれる。情報に基づいて深さテストに耐えない複数のピクセル中のピクセルは、レンダリングしない。一実施態様では、複数のピクセルのうち深さテストに耐えるものがないときには、ジオメトリのピースのレンダリングをスキップしてもよい。他方で、ジオメトリのピース内の任意のピクセルが深さテストに耐えた場合には、第2のパスにおいてジオメトリのピースをGPUがレンダリングする(たとえば、深さテストに耐えるピクセルをレンダリングする)。
【0126】
さらなる他の実施形態では、本方法は、プリパスフェーズ中にジオメトリのピースの1つ以上のプリミティブを複数のピクセルにラスタライズすることを含んでいてもよい。複数のピクセルに対するテクスチャのアルファ値をチェックする。複数のピクセル内でアルファ値が閾値を下回るピクセルを削除して、チェックした結果が情報に含まれるようにする。一実施態様では、複数のピクセルのうちどれも、対応するアルファ値が閾値でもなく閾値を上回ってもいないときに、ジオメトリのピースのレンダリングをスキップしてもよい。
【0127】
いくつかの実施形態では、GPUはまた、ジオメトリのピースと他のGPUがレスポンシビリティを有するスクリーン領域に対するその関係とに関する情報を生成し、この情報を、以後のフェーズ(たとえば、レンダリングのフルレンダリングフェーズ)において用いる。さらに他の実施形態では、Z値をZバッファと比較することによって生成される情報がなく、その代わりに、GPUは、ジオメトリのピースとすべてのGPU(それ自身を含む)がレスポンシビリティを有するスクリーン領域に対するその関係とに関する情報のみを生成しており、この情報は、以後のフェーズ(たとえば、レンダリングのフルレンダリングフェーズ)において用いる。
【0128】
図11に、本開示の種々の実施形態の態様を実行するために使用できるデバイス例1100のコンポーネントを例示する。たとえば、
図11では、本開示の実施形態により、画像に対するオブジェクトのレンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うのに適した典型的なハードウェアシステムを例示する。このブロック図で例示するデバイス1100は、パーソナルコンピュータ、サーバコンピュータ、ゲーミングコンソール、モバイルデバイス、または他のデジタルデバイス(それぞれ、本発明の実施形態を実行するのに適している)を組み込むことができるかまたはそれらであることができる。デバイス1100は、ソフトウェアアプリケーション及び随意的にオペレーティングシステムを実行するための中央処理ユニット(CPU)1102を含んでいる。CPU1102は、1つ以上の同種または異種の処理コアから構成され得る。
【0129】
種々の実施形態により、CPU1102は1つ以上の処理コアを有する1つ以上の汎用マイクロプロセッサである。さらなる実施形態を、ゲームの実行中にグラフィックス処理を行うように構成されたアプリケーションの高並列で計算集約型のアプリケーション(たとえば、媒体及びインタラクティブエンターテインメントアプリケーション)に具体的に適応されたマイクロプロセッサアーキテクチャを伴う1つ以上のCPUを用いて実施することができる。
【0130】
メモリ1104は、CPU1102及びGPU1116が用いるアプリケーション及びデータを記憶する。記憶装置1106は、アプリケーション及びデータ用の不揮発性記憶装置及び他のコンピュータ可読媒体であり、固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリ装置、及びCD-ROM、DVD-ROM、ブルーレイ(登録商標)、HD-DVD、または他の光学記憶装置、ならびに信号伝送及び記憶媒体を含んでいてもよい。ユーザ入力デバイス1108は、1人以上のユーザからのユーザ入力をデバイス1100に伝達する。その例としては、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチールまたはビデオレコーダ/カメラ、及び/またはマイクロフォンを挙げてもよい。ネットワークインターフェース1109によって、デバイス1100は、電子通信ネットワークを介して他のコンピュータシステムと通信することができる。ネットワークインターフェース1109としては、ローカルエリアネットワーク及びワイドエリアネットワーク(たとえば、インターネット)を介した有線または無線通信を挙げてもよい。オーディオプロセッサ1112は、CPU1102、メモリ1104、及び/または記憶装置1106が提供する命令及び/またはデータからアナログまたはデジタルオーディオ出力を生成するように適応されている。デバイス1100のコンポーネント(たとえば、CPU1102、グラフィックスサブシステム、たとえば、GPU1116、メモリ1104、データ記憶装置1106、ユーザ入力デバイス1108、ネットワークインターフェース1109、及びオーディオプロセッサ1112)は、1つ以上のデータバス1122を介して接続されている。
【0131】
グラフィックスサブシステム1114がさらに、データバス1122及びデバイス1100のコンポーネントと接続されている。グラフィックスサブシステム1114は、少なくとも1つのグラフィックス処理ユニット(GPU)1116及びグラフィックスメモリ1118を含んでいる。グラフィックスメモリ1118は、出力画像の各ピクセルに対するピクセルデータを記憶するために用いるディスプレイメモリ(たとえば、フレームバッファ)を含んでいる。グラフィックスメモリ1118は、GPU1116と同じデバイスに統合すること、個別のデバイスとしてGPU1116と接続すること、及び/またはメモリ1104内に実装することができる。ピクセルデータをCPU1102から直接グラフィックスメモリ1118に提供することができる。他の形態として、CPU1102は、GPU1116に、所望の出力画像を規定するデータ及び/または命令を提供する。所望の出力画像から、GPU1116が1つ以上の出力画像のピクセルデータを生成する。所望の出力画像を規定するデータ及び/または命令を、メモリ1104及び/またはグラフィックスメモリ1118に記憶することができる。一実施形態では、GPU1116は、シーンに対するジオメトリ、照明、シェーディング、模様付け、動き、及び/またはカメラパラメータを規定する命令及びデータから、出力画像用のピクセルデータを生成するための3Dレンダリング能力を含む。GPU1116はさらに、シェーダープログラムを実行することができる1つ以上のプログラマブル実行ユニットを含むことができる。
【0132】
グラフィックスサブシステム1114は、グラフィックスメモリ1118から、ディスプレイデバイス1110に表示すべき、または投影システム(図示せず)によって投影すべき画像用のピクセルデータを定期的に出力する。ディスプレイデバイス1110は、デバイス1100からの信号に応じて視覚情報を表示することができる任意のデバイスとすることができる。たとえば、CRT、LCD、プラズマ、及びOLEDディスプレイである。デバイス1100は、ディスプレイデバイス1110に、たとえば、アナログまたはデジタル信号を提供することができる。
【0133】
グラフィックスサブシステム1114を最適化するための他の実施形態には、画像に対するオブジェクトのレンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことを含むことができる。グラフィックスサブシステム1114を、1つ以上の処理デバイスとして構成することができる。
【0134】
たとえば、一実施形態では、グラフィックスサブシステム1114を、レンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成してもよい。複数のグラフィックスサブシステムが、グラフィックスを実施していることができ、及び/または単一アプリケーションに対するパイプラインをレンダリングしていることができる。すなわち、グラフィックスサブシステム1114は、アプリケーションを実行するときに画像または画像列の1つ以上の各画像をレンダリングするために用いる複数のGPUを含んでいる。
【0135】
他の実施形態では、グラフィックスサブシステム1114は複数のGPUデバイスを含んでいる。これらは、対応するCPU上で実行されている単一アプリケーションに対するグラフィックス処理を実行するために結合される。たとえば、複数のGPUは、画像に対するオブジェクトのレンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことができる。他の例では、複数のGPUは交互形式のフレームレンダリングを実行することができる。ここでは、GPU1が第1のフレームをレンダリングし、GPU2が第2のフレームをレンダリングして、これを連続的なフレーム周期で行うことなどを、最後のGPUに達するまで続ける。その上で、最初のGPUが次のビデオフレームをレンダリングする(たとえば、2つのGPUのみが存在する場合には、GPU1が第3のフレームをレンダリングする)。すなわち、フレームをレンダリングするときにGPUが回転する。レンダリング動作はオーバーラップすることができる。GPU1が第1のフレームのレンダリングを終了する前に、GPU2が第2のフレームのレンダリングを開始してもよい。別の実施態様では、複数のGPUデバイスに、レンダリング及び/またはグラフィックスパイプラインにおいて異なるシェーダー動作を割り当てることができる。マスタGPUが主なレンダリング及び合成を行っている。たとえば、3つのGPUを含むグループでは、マスタGPU1が、スレーブGPU2及びスレーブGPU3からの出力の主なレンダリング(たとえば、第1のシェーダー動作)及び合成を実行することができる。スレーブGPU2は、第2のシェーダー(たとえば、河などの流体効果)動作を実行することができ、スレーブGPU3は、第3のシェーダー(たとえば、粒子煙)動作を実行することができる。マスタGPU1は、GPU1、GPU2、及びGPU3のそれぞれからの結果を合成する。このように、異なるシェーダー動作(たとえば、旗を振ること、風、発煙、火災など)を実行するために異なるGPUを割り当てて、ビデオフレームをレンダリングすることができる。さらなる他の実施形態では、3つのGPUをそれぞれ、ビデオフレームに対応するシーンの異なるオブジェクト及び/または部分に割り当てることができる。前述の実施形態及び実施態様では、これらの動作を同じフレーム周期(同時に並列)でまたは異なるフレーム周期(順次に並列)で行うことができる。
【0136】
したがって、本開示では、アプリケーションを実行するときの画像または画像列内の1つ以上の各画像に対するオブジェクトのレンダリング中の領域テストによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成された方法及びシステムを説明している。
【0137】
当然のことながら、本明細書で規定した種々の実施形態を、本明細書で開示した種々の特徴を用いて具体的な実施に結合するかまたは組み立ててもよい。したがって、提供した例は単にいくつかの可能な例であり、種々の要素を結合してさらに多くの実施態様を規定することによって可能な種々の実施態様に限定されない。いくつかの例では、開示した実施態様または同等な実施態様の趣旨から逸脱することなく、いくつかの実施態様にはさらに少ない要素が含まれていてもよい。
【0138】
本開示の実施形態は、種々のコンピュータシステム構成(たとえば、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラマブル民生用エレクトロニクス、ミニコンピュータ、メインフレームコンピュータなど)によって実施してもよい。また本開示の実施形態は、分散コンピューティング環境において実行することもできる。ここでは、タスクが、有線ベースまたは無線ネットワークを通してリンクされたリモート処理デバイスによって行われる。
【0139】
前述の実施形態を念頭において、当然のことながら、本開示の実施形態は、コンピュータシステムに記憶されたデータを伴う種々のコンピュータ実装動作を用いることができる。これらの動作は、物理量の物理的な操作を必要とするものである。本開示の実施形態の一部分を構成する本明細書で説明した動作のいずれも、有用なマシン動作である。また本開示の実施形態は、これらの動作を行うためのデバイスまたは装置に関する。装置は必要な目的に対して特別に構成することもできるし、または装置を、コンピュータに記憶されたコンピュータプログラムによって選択的に作動または構成される汎用コンピュータとすることもできる。詳細には、種々の汎用マシンを本明細書の教示により書き込まれたコンピュータプログラムによって用いることもできるし、または必要な動作を実行するために、さらに特化された装置を構成することがより好都合であり得る。
【0140】
また本開示を、コンピュータ可読媒体上のコンピュータ可読コードとして具体化することができる。コンピュータ可読媒体は、データを記憶することができる任意のデータ記憶装置とすることができる。データはその後にコンピュータシステムによって読み出すことができる。コンピュータ可読媒体の例としては、ハードドライブ、ネットワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、ならびに他の光学及び非光学データ記憶装置が挙げられる。コンピュータ可読媒体としては、コンピュータ可読コードが分散的に記憶及び実行されるようにネットワーク結合コンピュータシステム上に分散されたコンピュータ可読有形的表現媒体を挙げることができる。
【0141】
本方法の動作を特定の順序で説明したが、当然のことながら、動作の合間に他のハウスキーピング動作を行ってもよいし、または動作を調整してわずかに異なる時間に行われるようにしてもよいし、またはオーバーレイ動作の処理が所望の方法で行われる限り、処理動作を処理に対応付けられる種々の間隔で可能にするシステムにおいて分散させるようにしてもよい。
【0142】
前述の開示内容は、理解を明瞭にするために少し詳しく説明しているが、添付の特許請求の範囲内で特定の変形及び変更を実施できることが明らかである。したがって、本実施形態は例示的であって限定的ではないと考えるべきであり、本開示の実施形態は、本明細書で示した詳細に限定してはならないが、添付の特許請求の範囲及び均等物内で変更してもよい。