IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソニー・コンピュータエンタテインメントの特許一覧

特許7564399レンダリング前にインターリーブスクリーン領域に対して事前テストを行うことによってジオメトリの効率的なマルチGPUレンダリングを行うシステム及び方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-30
(45)【発行日】2024-10-08
(54)【発明の名称】レンダリング前にインターリーブスクリーン領域に対して事前テストを行うことによってジオメトリの効率的なマルチGPUレンダリングを行うシステム及び方法
(51)【国際特許分類】
   G06T 15/00 20110101AFI20241001BHJP
【FI】
G06T15/00 501
【請求項の数】 20
(21)【出願番号】P 2024071532
(22)【出願日】2024-04-25
(62)【分割の表示】P 2023132609の分割
【原出願日】2021-02-01
(65)【公開番号】P2024091921
(43)【公開日】2024-07-05
【審査請求日】2024-05-13
(31)【優先権主張番号】16/780,680
(32)【優先日】2020-02-03
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/780,745
(32)【優先日】2020-02-03
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/780,722
(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)
【文献】特表2017-505476(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00
(57)【特許請求の範囲】
【請求項1】
複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングし、
前記グラフィックスのジオメトリの前記レンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて前記複数のGPU間で分割し、各GPUは、前記複数のGPUに知られた前記レスポンシビリティの対応するディビジョンを有し、
事前テストGPUで、フレーム期間内で、ジオメトリテストを前記アプリケーションにより生成された画像フレームの複数のジオメトリピースに対して実行して、前記複数のジオメトリピースのそれぞれと前記複数のスクリーン領域のそれぞれとの間の関係に関する情報を生成し、
前記ジオメトリテストは、前記複数のジオメトリピースのそれぞれと前記複数のスクリーン領域のそれぞれとが重なるかを判定し、
前記複数のGPUのそれぞれで、前記複数のジオメトリピースのそれぞれについて生成された前記情報を用いて、前記フレーム期間内で前記複数のジオメトリピースをレンダリングし、前記フレーム期間内での前記複数のジオメトリピースのレンダリングでは、前記情報に基づいて、レンダリングのために前記GPUに割り当てられたスクリーン領域に重なる対応するジオメトリピースをGPUがレンダリングし、
複数のフレーム期間のそれぞれは、複数の画像フレームのうち対応する画像フレームがディスプレイ用に生成されるターゲット周期を定義する、
方法。
【請求項2】
前記事前テストGPUは、前記複数のGPUのうちの1つである、
請求項1に記載の方法。
【請求項3】
ジオメトリピースとレンダリングGPUに割り当てられた任意のスクリーン領域とがオーバーラップしないと前記情報が示す場合に、前記グラフィックスのジオメトリの前記レンダリングに対する分割された前記レスポンシビリティに基づいて、前記レンダリングGPUにおける前記ジオメトリピースのレンダリングをスキップし、
前記レンダリングGPUは前記複数のGPUのうちの1つである、
請求項1に記載の方法。
【請求項4】
前記ジオメトリピースは、ドローコールが使用または生成するジオメトリに対応する、
請求項3に記載の方法。
【請求項5】
前記アプリケーションの前記ドローコールが使用または生成する前記ジオメトリが、前記ジオメトリピースを含めて、第2の複数のジオメトリピースに細分割され、前記第2の複数のジオメトリピースに対して前記事前テストGPUが前記情報を生成する、
請求項4に記載の方法。
【請求項6】
前記ジオメトリピースは個々のプリミティブである、
請求項4に記載の方法。
【請求項7】
ジオメトリピースに関する前記情報は、頂点数またはプリミティブ数を含む、
請求項1に記載の方法。
【請求項8】
ラスタ化ステージの中でスキャンコンバータを用いて前記情報を生成するか、または、ジオメトリプロセスステージの中で1つ以上のシェーダーを用いて前記情報を生成する、
請求項1に記載の方法。
【請求項9】
前記複数のGPUのうちの1つまたは複数が、複数の仮想GPUとして構成されたより大きなGPUの部分である、
請求項1に記載の方法。
【請求項10】
方法を実行するためのコンピュータプログラムが記録されたコンピュータ可読媒体であって、
複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を有し、
前記グラフィックスのジオメトリの前記レンダリングについてのレスポンシビリティを複数のスクリーン領域に基づいて前記複数のGPU間で分割するためのプログラム命令を有し、各GPUは、前記複数のGPUに知られた前記レスポンシビリティの対応するディビジョンを有するものであり、
事前テストGPUで、フレーム期間内で、ジオメトリテストを前記アプリケーションにより生成された画像フレームの複数のジオメトリピースに対して実行して、前記複数のジオメトリピースのそれぞれと前記複数のスクリーン領域のそれぞれとの間の関係に関する情報を生成するためのプログラム命令を有し、前記ジオメトリテストは、前記複数のジオメトリピースのそれぞれと前記複数のスクリーン領域のそれぞれとが重なるかを判定し、
前記複数のGPUのそれぞれで、前記複数のジオメトリピースのそれぞれについて生成された前記情報を用いて、前記フレーム期間内で前記複数のジオメトリピースをレンダリングするためのプログラム命令を有し、前記複数のジオメトリピースをレンダリングするためのプログラム命令により、前記情報に基づいて、レンダリングのために前記GPUに割り当てられたスクリーン領域に重なる対応するジオメトリピースをGPUがレンダリングし、
複数のフレーム期間のそれぞれは、複数の画像フレームのうち対応する画像フレームがディスプレイ用に生成されるターゲット周期を定義する、
コンピュータ可読媒体。
【請求項11】
前記方法では、前記事前テストGPUは、前記複数のGPUのうちの1つである、
請求項10に記載のコンピュータ可読媒体。
【請求項12】
前記ジオメトリピースとレンダリングGPUに割り当てられた任意のスクリーン領域とがオーバーラップしないと前記情報が示す場合に、前記グラフィックスのジオメトリの前記レンダリングに対する分割された前記レスポンシビリティに基づいて、前記レンダリングGPUにおけるジオメトリピースのレンダリングをスキップするためのプログラム命令を有し、
前記レンダリングGPUは前記複数のGPUのうちの1つである、
請求項10に記載のコンピュータ可読媒体。
【請求項13】
前記方法では、前記ジオメトリピースは、ドローコールが使用または生成するジオメトリに対応し、
前記方法では、前記アプリケーションの前記ドローコールが使用または生成する前記ジオメトリが、前記ジオメトリピースを含めて、第2の複数のジオメトリピースに細分割され、前記第2の複数のジオメトリピースに対して前記事前テストGPUが前記情報を生成する、
請求項12に記載のコンピュータ可読媒体。
【請求項14】
前記方法では、ジオメトリピースに関する前記情報は、頂点数またはプリミティブ数を含む、
請求項10に記載のコンピュータ可読媒体。
【請求項15】
ラスタ化ステージの中でスキャンコンバータを用いて前記情報を生成するためのプログラム命令か、または、ジオメトリプロセスステージの中で1つ以上のシェーダーを用いて前記情報を生成するためのプログラム命令を有する、
請求項10に記載のコンピュータ可読媒体。
【請求項16】
コンピュータシステムであって、
プロセッサと、
前記プロセッサに結合され、命令が記憶されたメモリとを有し、前記命令は、前記コンピュータシステムによって実行されると、前記コンピュータシステムに、グラフィックスパイプラインをインプリメントするための方法を実行させるものであり、前記方法は、
複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングし、
前記グラフィックスのジオメトリの前記レンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて前記複数のGPU間で分割し、各GPUは、前記複数のGPUに知られた前記レスポンシビリティの対応するディビジョンを有し、
事前テストGPUで、フレーム期間内で、ジオメトリテストを前記アプリケーションにより生成された画像フレームの複数のジオメトリピースに対して実行して、前記複数のジオメトリピースのそれぞれと前記複数のスクリーン領域のそれぞれとの間の関係に関する情報を生成し、
前記ジオメトリテストは、前記複数のジオメトリピースのそれぞれと前記複数のスクリーン領域のそれぞれとが重なるかを判定し、
前記複数のGPUのそれぞれで、前記複数のジオメトリピースのそれぞれについて生成された前記情報を用いて、前記フレーム期間内で前記複数のジオメトリピースをレンダリングし、前記フレーム期間内での前記複数のジオメトリピースのレンダリングでは、前記情報に基づいて、レンダリングのために前記GPUに割り当てられたスクリーン領域に重なる対応するジオメトリピースをGPUがレンダリングし、
複数のフレーム期間のそれぞれは、複数の画像フレームのうち対応する画像フレームがディスプレイ用に生成されるターゲット周期を定義する、
コンピュータシステム。
【請求項17】
前記方法では、前記事前テストGPUは、前記複数のGPUのうちの1つである、
請求項16に記載のコンピュータシステム。
【請求項18】
前記ジオメトリピースとレンダリングGPUに割り当てられた任意のスクリーン領域とがオーバーラップしないと前記情報が示す場合に、前記グラフィックスのジオメトリの前記レンダリングに対する分割された前記レスポンシビリティに基づいて、前記レンダリングGPUにおけるジオメトリピースのレンダリングをスキップし、
前記レンダリングGPUは前記複数のGPUのうちの1つである、
請求項16に記載のコンピュータシステム。
【請求項19】
前記方法では、前記ジオメトリピースは、ドローコールが使用または生成するジオメトリに対応し、
前記方法では、前記アプリケーションの前記ドローコールが使用または生成する前記ジオメトリが、前記ジオメトリピースを含めて、第2の複数のジオメトリピースに細分割され、前記第2の複数のジオメトリピースに対して前記事前テストGPUが前記情報を生成する、
請求項18に記載のコンピュータシステム。
【請求項20】
前記方法では、ジオメトリピースに関する前記情報は、頂点数またはプリミティブ数を含む、
請求項16に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、グラフィックス処理に関し、より具体的には、アプリケーションに対する画像をレンダリングするときのマルチGPU連携に関する。
【背景技術】
【0002】
近年、クラウドゲーミングサーバと、ネットワークを通して接続されたクライアントとの間で、ストリーミングフォーマットでオンラインまたはクラウドゲーミングを行うことを可能にするオンラインサービスに対する継続的な取り組みがある。ストリーミングフォーマットはますます人気が出ている。なぜならば、オンデマンドでゲームタイトルが利用できること、より複雑なゲームが実行できること、マルチプレイヤーゲーミングの場合にプレーヤ間でネットワーク接続できること、プレーヤ間で資産を共有できること、プレーヤ及び/または観戦者の間で瞬時の経験を共有できること、友人がビデオゲームをプレイする様子を友人が観戦できること、友人の進行中のゲームプレイに友人が参加できることなどがあるからである。
【0003】
クラウドゲーミングサーバは、1つ以上のクライアント及び/またはアプリケーションにリソースを提供するように構成される場合がある。すなわち、クラウドゲーミングサーバは、高スループットが可能なリソースとともに構成される場合がある。たとえば、個々のグラフィックス処理ユニット(GPU)が達成できる性能には限界がある。さらに複雑なシーンをレンダリングするために、またはシーンを生成するときにさらに複雑なアルゴリズム(たとえば、材料、照明など)を用いるために、複数のGPUを用いて単一画像をレンダリングすることが望ましい場合がある。しかし、これらのグラフィックス処理ユニットを均等に用いることは、実現が難しい。さらに、従来の技術を用いてアプリケーションに対する画像を処理するために複数のGPUがある場合でも、スクリーンピクセル数及びジオメトリ密度の両方での対応する増加をサポートすることはできない(4個のGPUにより、画像に対して4倍のピクセルを書き込むこと及び/または4倍の頂点またはプリミティブを処理することは不可能である)。
【0004】
本開示の実施形態は、このような背景の下になされたものである。
【発明の概要】
【0005】
本開示の実施形態は、複数のGPUを連携して用いて単一画像をレンダリングすること、たとえば、レンダリング前にスクリーン領域(インターリーブされ得る)に対する事前テストを行うことによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことに関する。
【0006】
本開示の実施形態では、グラフィックス処理を行うための方法を開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。スクリーン領域はインターリーブされる。本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。本方法は、GPUに、アプリケーションによって生成された画像フレームのジオメトリのピースを、ジオメトリテストのために割り当てることを含む。本方法は、GPUにおいてジオメトリテストを行って、ジオメトリのピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。本方法は、複数のGPUのそれぞれにおいて情報を用いてジオメトリのピースをレンダリングすることを含み、情報を用いることは、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップすることを含むことができる。
【0007】
別の実施形態では、方法を行うための非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割するためのプログラム命令であって、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有し、複数のスクリーン領域におけるスクリーン領域はインターリーブされている、プログラム命令を含む。コンピュータ可読媒体は、GPUに、アプリケーションによって生成された画像フレームのジオメトリのピースを、ジオメトリ事前テストのために割り当てるためのプログラム命令を含む。コンピュータ可読媒体は、GPUにおいてジオメトリ事前テストを行って、ジオメトリのピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成するためのプログラム命令を含む。コンピュータ可読媒体は、画像フレームをレンダリングするときに複数のGPUのそれぞれにおいて情報を用いるためのプログラム命令を含む。
【0008】
さらなる他の実施形態では、コンピュータシステムが開示される。コンピュータシステムは、プロセッサと、プロセッサに結合され、命令が記憶されたメモリであって、命令は、コンピュータシステムによって実行されると、コンピュータシステムに、グラフィックス処理を行うための方法を実行させる、メモリと、を含む。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有し、複数のスクリーン領域におけるスクリーン領域はインターリーブされる。本方法は、GPUに、アプリケーションによって生成された画像フレームのジオメトリのピースを、ジオメトリ事前テストのために割り当てることを含む。本方法は、GPUにおいてジオメトリ事前テストを行って、ジオメトリのピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。本方法は、画像フレームをレンダリングするときに複数のGPUのそれぞれにおいて情報を用いることを含む。
【0009】
本開示の実施形態では、グラフィックス処理を行うための方法を開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する、分割することを含む。本方法は、アプリケーションによって生成された画像フレームのジオメトリの複数のピースに対するGPU事前テストにおいてジオメトリテストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。本方法は、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングすることであって、情報を用いることは、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップすることを含む、レンダリングすることを含む。
【0010】
別の実施形態では、方法を行うための非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割するためのプログラム命令であって、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する、プログラム命令を含む。コンピュータ可読媒体は、アプリケーションによって生成された画像フレームのジオメトリの複数のピースに対するGPU事前テストにおいてジオメトリテストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成するためのプログラム命令を含む。コンピュータ可読媒体は、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングするためのプログラム命令であって、情報を用いることは、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする、プログラミング命令を含む。
【0011】
さらなる他の実施形態では、コンピュータシステムが開示される。コンピュータシステムは、プロセッサと、プロセッサに結合され、命令が記憶されたメモリであって、命令は、コンピュータシステムによって実行されると、コンピュータシステムに、グラフィックス処理を行うための方法を実行させる、メモリと、を含む。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。本方法は、アプリケーションによって生成された画像フレームのジオメトリの複数のピースに対するGPU事前テストにおいてジオメトリテストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。本方法は、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングし、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0012】
本開示の実施形態では、グラフィックス処理を行うための方法を開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する、分割することを含む。本方法は、アプリケーションによって生成された以前の画像フレームのレンダリングフェーズの間に、複数のGPUにおいてジオメトリの第1の複数のピースをレンダリングすることを含む。本方法は、以前の画像フレームのレンダリングに対する統計値を生成することを含む。本方法は、統計値に基づいて、アプリケーションによって生成された現在の画像フレームのジオメトリの第2の複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。本方法は、現在の画像フレームにおいてジオメトリの第2の複数のピースに対してジオメトリテストを行って、ジオメトリの第2の複数のピースの各ピースと、複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成し、ジオメトリテストは複数のGPUのそれぞれにおいて割り当てに基づいて行われる。本方法は、ジオメトリの第2の複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの第2の複数のピースをレンダリングし、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする含む。
【0013】
別の実施形態では、方法を行うための非一時的コンピュータ可読媒体を開示する。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割するためのプログラム命令であって、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する、プログラミング命令を含む。コンピュータ可読媒体は、アプリケーションによって生成された以前の画像フレームのレンダリングフェーズの間に、複数のGPUにおいてジオメトリの第1の複数のピースをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、以前の画像フレームのレンダリングに対する統計値を生成するためのプログラム命令を含む。コンピュータ可読媒体は、統計値に基づいて、アプリケーションによって生成された現在の画像フレームのジオメトリの第2の複数のピースを、ジオメトリテストのために複数のGPUに割り当てるためのプログラム命令を含む。コンピュータ可読媒体は、現在の画像フレームにおいてジオメトリの第2の複数のピースに対してジオメトリテストを行って、ジオメトリの第2の複数のピースの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成するためのプログラミング命令を有し、ジオメトリテストは複数のGPUのそれぞれにおいて割り当てに基づいて行われる。コンピュータ可読媒体は、ジオメトリの第2の複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの第2の複数のピースをレンダリングするためのプログラミング命令を有し、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップすることができる。
【0014】
さらなる他の実施形態では、コンピュータシステムが開示される。コンピュータシステムは、プロセッサと、プロセッサに結合され、命令が記憶されたメモリであって、命令は、コンピュータシステムによって実行されると、コンピュータシステムに、グラフィックス処理を行うための方法を実行させる、メモリと、を含む。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。本方法は、アプリケーションによって生成された以前の画像フレームのレンダリングフェーズの間に、複数のGPUにおいてジオメトリの第1の複数のピースをレンダリングする。本方法は、以前の画像フレームのレンダリングに対する統計値を生成することを含む。本方法は、統計値に基づいて、アプリケーションによって生成された現在の画像フレームのジオメトリの第2の複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。本方法は、現在の画像フレームにおいてジオメトリの第2の複数のピースに対してジオメトリテストを行って、ジオメトリの第2の複数のピースの各ピースと、複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成し、ジオメトリテストは複数のGPUのそれぞれにおいて割り当てに基づいて行われる。本方法は、ジオメトリの第2の複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの第2の複数のピースをレンダリングし、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップすることを含むことができる。
【0015】
本開示の実施形態は、グラフィックス処理を行うための方法を開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てる。本方法は、ジオメトリテストを実行するように1つ以上のシェーダーを構成する第1の状態を設定することを含む。本方法は、複数のGPUにおいてジオメトリの複数のピースに対してジオメトリテストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。本方法は、レンダリングを実行するように1つ以上のシェーダーを構成する第2の状態を設定することを含む。本方法は、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングし、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0016】
別の実施形態では、方法を行うための非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割するためのプログラム命令を有し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。コンピュータ可読媒体は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てるためのプログラム命令を含む。コンピュータ可読媒体は、ジオメトリテストを実行するように1つ以上のシェーダーを構成する第1の状態を設定するためのプログラム命令を含む。コンピュータ可読媒体は、複数のGPUにおいてジオメトリの複数のピースに対してジオメトリテストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成するためのプログラム命令を含む。コンピュータ可読媒体は、レンダリングを実行するように1つ以上のシェーダーを構成する第2の状態を設定するためのプログラム命令を含む。コンピュータ可読媒体は、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングするためのプログラム命令を有し、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0017】
さらなる他の実施形態では、コンピュータシステムが開示される。コンピュータシステムは、プロセッサと、プロセッサに結合され、命令が記憶されたメモリであって、命令は、コンピュータシステムによって実行されると、コンピュータシステムに、グラフィックス処理を行うための方法を実行させる、メモリと、を含む。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。本方法は、ジオメトリテストを実行するように1つ以上のシェーダーを構成する第1の状態を設定することを含む。本方法は、複数のGPUにおいてジオメトリの複数のピースに対してジオメトリテストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。本方法は、レンダリングを実行するように1つ以上のシェーダーを構成する第2の状態を設定することを含む。本方法は、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングし、情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0018】
本開示の実施形態は、グラフィックス処理を行うための方法を開示する。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。本方法は、ジオメトリの第1の組のピースに対してジオメトリテスト及びレンダリングを実行する第1の組のシェーダーと、ジオメトリの第2の組のピースに対してジオメトリテスト及びレンダリングを実行する第2の組のシェーダーとを、インターリーブすることを含む。ジオメトリテストは、第1の組または第2の組内のジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する対応する情報を生成する。対応する情報を複数のGPUが用いて、第1の組または第2の組内のジオメトリの各ピースをレンダリングする。情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0019】
別の実施形態では、方法を行うための非一時的コンピュータ可読媒体が開示される。コンピュータ可読媒体は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングするためのプログラム命令を含む。コンピュータ可読媒体は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割するためのプログラム命令を有し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。コンピュータ可読媒体は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てるためのプログラム命令を含む。コンピュータ可読媒体は、ジオメトリの第1の組のピースに対してジオメトリテスト及びレンダリングを実行する第1の組のシェーダーと、ジオメトリの第2の組のピースに対してジオメトリテスト及びレンダリングを実行する第2の組のシェーダーとをインターリーブするためのプログラミング命令を含む。ジオメトリテストは、第1の組または第2の組内のジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する対応する情報を生成する。対応する情報を複数のGPUが用いて、第1の組または第2の組内のジオメトリの各ピースをレンダリングする。情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0020】
さらなる他の実施形態では、コンピュータシステムが開示される。コンピュータシステムは、プロセッサと、プロセッサに結合され、命令が記憶されたメモリであって、命令は、コンピュータシステムによって実行されると、コンピュータシステムに、グラフィックス処理を行うための方法を実行させる、メモリと、を含む。本方法は、複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。本方法は、グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割し、各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。本方法は、ジオメトリの第1の組のピースに対してジオメトリテスト及びレンダリングを実行する第1の組のシェーダーと、ジオメトリの第2の組のピースに対してジオメトリテスト及びレンダリングを実行する第2の組のシェーダーとをインターリーブする。ジオメトリテストは、第1の組または第2の組内のジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する対応する情報を生成する。対応する情報を複数のGPUが用いて、第1の組または第2の組内のジオメトリの各ピースをレンダリングする。情報を用いるときに、たとえば、ジオメトリのピースが、所与のGPUに割り当てられた任意のスクリーン領域とオーバーラップしないと判定された場合に、レンダリングを完全にスキップする。
【0021】
本開示の他の態様は、以下の詳細な説明と併せて、一例として本開示の原理を例示する添付図面から明らかになる。
【0022】
本開示は、以下の説明と併せて添付図面を参照することにより最良に理解され得る。
【図面の簡単な説明】
【0023】
図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の画像)1つ以上のGPUによって行われるジオメトリの事前テスト及びジオメトリのレンダリングを行うことを例示する図である。
図8A】本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトテストを例示する図である。
図8B】本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトの一部のテストを例示する図である。
図9】A~Cは、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときにスクリーン領域を対応するGPUに割り当てるための種々の方策を例示する図である。
図10】本開示の実施形態により、ジオメトリの複数のピースに対してジオメトリ事前テストを行うためのGPU割り当ての種々の分配を例示する図である。
図11A】本開示の一実施形態により、複数のGPUによる以前の画像フレームのジオメトリの事前テスト及びレンダリングと、レンダリング中に収集した統計値を用いて、現在の画像フレームのジオメトリの事前テストを現在の画像フレームにおける複数のGPUに割り当てることに影響を与えることと、を例示する図である。
図11B】本開示の一実施形態により、複数のGPUによる以前の画像フレームのジオメトリの事前テスト及びレンダリングと、レンダリング中に収集した統計値を用いて、現在の画像フレームのジオメトリの事前テストを現在の画像フレームにおける複数のGPUに割り当てることに影響を与えることと、を含むグラフィックス処理を行うための方法を例示するフロー図である。
図12A】本開示の一実施形態により、コマンドバッファの一部を通る2回のパスにおいて画像フレームのジオメトリの事前テスト及びレンダリングの両方を実行するように構成されたシェーダーを用いることを例示する図である。
図12B】本開示の一実施形態により、コマンドバッファの一部を通る2回のパスにおいて同じ組のシェーダーを用いて画像フレームのジオメトリの事前テスト及びレンダリングの両方を行うことを含むグラフィックス処理を行うための方法を例示するフロー図である。
図13A】本開示の一実施形態により、ジオメトリテスト及びレンダリングの両方を実行するように構成されたシェーダーを用いることを例示する図であり、ジオメトリの異なる組のピースに対して行われるジオメトリテスト及びレンダリングが、対応するコマンドバッファの別個の部分を用いてインターリーブされる図である。
図13B】本開示の一実施形態により、ジオメトリの異なる組のピースに対する画像フレームのジオメトリの事前テスト及びレンダリングを、対応するコマンドバッファの別個の部分を用いてインターリーブすることを含むグラフィックス処理を行うための方法を例示するフロー図である。
図14】本開示の種々の実施形態の態様を実行するために用いることができるデバイス例のコンポーネントを例示する図である。
【発明を実施するための形態】
【0024】
以下の詳細な説明には、説明の目的上、多くの特定の詳細が含まれているが、当業者であれば分かるように、以下の詳細に対する多くの変形及び修正も本開示の範囲内である。したがって、以下に説明する本開示の態様は、この説明に続く特許請求の範囲に対する一般性を何ら失うことなく、また特許請求の範囲に限定を課すことなく、述べられている。
【0025】
一般的に言って、個々のGPUが達成できる性能には限界があり、これは、たとえばGPUをどのくらい大きくできるかに対する限界から導かれる。本開示の実施形態では、さらに複雑なシーンをレンダリングするために、またはさらに複雑なアルゴリズム(たとえば、材料、照明など)を用いるために、複数のGPUを用いて単一画像をレンダリングすることが望ましい。詳細には、本開示の種々の実施形態では、スクリーン領域(インターリーブされ得る)に対してジオメトリの事前テストを行うことによってアプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成された方法及びシステムについて説明する。複数のGPUは連携して画像を生成する。レンダリングに対するレスポンシビリティ(responsibility)あるいは義務あるいは応答能力を、スクリーン領域に基づいて複数のGPU間で分割する。ジオメトリをレンダリングする前に、GPUは、ジオメトリとスクリーン領域に対するその関係とに関する情報を生成する。これにより、GPUは、ジオメトリをより効率的にレンダリングすることまたはレンダリングを完全に回避することができる。たとえば、これによって、複数のGPUが、より複雑なシーン及び/または画像を同じ時間でレンダリングすることができるという利点がある。
【0026】
種々の実施形態の前述した全般的な理解に基づき、次に実施形態の詳細例について、種々の図面を参照して説明する。
【0027】
明細書の全体にわたって、「アプリケーション」または「ゲーム」または「ビデオゲーム」または「ゲーミングアプリケーション」に言及した場合、入力コマンドの実行を通して指示される任意のタイプの対話型アプリケーションを表すことが意図されている。例示のみを目的として、対話型アプリケーションには、ゲーミング、文書処理、ビデオ処理、ビデオゲーム処理などに対するアプリケーションが含まれる。さらに、前述で導入した用語は交換可能である。
【0028】
明細書の全体にわたって、本開示の種々の実施形態は、4つのGPUを有する典型的なアーキテクチャを用いてアプリケーションに対するジオメトリのマルチGPU処理またはレンダリングを行うことについて説明される。しかし、当然のことながら、アプリケーションに対するジオメトリをレンダリングするときに任意の数のGPU(たとえば、2つ以上のGPU)が連携してもよい。
【0029】
図1は、本開示の一実施形態により、アプリケーションに対する画像(たとえば画像フレーム)をレンダリングするときにマルチGPU処理を行うためのシステムの図である。本開示の実施形態により、システムは、1つ以上のクラウドゲーミングサーバ間でネットワークを介してゲーミングを提供するように構成されており、より具体的には、複数のGPUを連携してアプリケーションの単一画像をレンダリングするように構成されている。クラウドゲーミングには、サーバにおいてビデオゲームを実行して、ゲームレンダリングされたビデオフレームを生成することが含まれる。これは次に、クライアントに送られて表示される。詳細には、システム100は、レンダリング前にスクリーン領域(インターリーブあるいは交互配置され得る)に対して事前テストを行うことによって、アプリケーションに対するジオメトリの効率的なマルチGPUレンダリングを行うように構成されている。
【0030】
図1では、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間でのジオメトリのマルチGPUレンダリングの実施態様を例示しているが、本開示の他の実施形態では、スタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むもの)内でレンダリング中に領域テストを行うことによってアプリケーションに対するジオメトリの効率的なマルチGPUレンダリングを行うことが提供される。
【0031】
また当然のことながら、ジオメトリのマルチGPUレンダリングを、物理GPU、または仮想GPU、または両方の組み合わせを種々の実施形態で(たとえば、クラウドゲーミング環境においてまたはスタンドアロンシステム内で)用いて、行ってもよい。たとえば、仮想マシン(たとえば、インスタンス)を、ハードウェア層の1つ以上のコンポーネント(たとえば、複数のCPU、メモリモジュール、GPU、ネットワークインターフェース、通信コンポーネントなど)を用いるホストハードウェア(たとえば、データセンタに配置される)のハイパーバイザを用いて、形成してもよい。これらの物理リソースを、ラック(たとえば、CPUのラック、GPUのラック、メモリのラックなど)内に配列してもよい。ラック内の物理リソースにはトップオブラックスイッチを用いてアクセスしてもよく、これにより、インスタンスに対して用いるコンポーネントの組み立て及びアクセスを行うための構造を容易にする(たとえば、インスタンスの仮想化コンポーネントを構築するときに)。一般的に、ハイパーバイザは、仮想リソースを用いて構成される複数のインスタンスの複数のゲストオペレーティングシステムを示すことができる。すなわち、オペレーティングシステムはそれぞれ、1つ以上のハードウェアリソース(たとえば、対応するデータセンタに配置される)によってサポートされる仮想化リソースの対応する組を用いて構成してもよい。たとえば、各オペレーティングシステムを、仮想CPU、複数の仮想GPU、仮想メモリ、仮想化通信コンポーネントなどによってサポートしてもよい。さらに、あるデータセンタから別のデータセンタへインスタンスの設定を転送し、レイテンシを短縮し得る。ユーザのゲーミングセッションを保存するときに、ユーザまたはゲームに対して規定されるGPU稼働率を用いることができる。GPU稼働率は、ゲーミングセッションに対するビデオフレームの高速レンダリングを最適化するための本明細書で説明する任意の数の構成を含むことができる。一実施形態では、ゲームまたはユーザに対して規定されるGPU稼働率を、構成可能な設定としてデータセンタ間で移すことができる。異なるジオロケーションからゲームをプレイするためにユーザが接続する場合には、GPU稼働率設定を移せることで、データセンタからデータセンタへゲームプレイを効率的に移行することができる。
【0032】
本開示の一実施形態により、システム100は、クラウドゲームネットワーク190を介してゲーミングを提供する。ゲームは、ゲームをプレイしている対応するユーザのクライアントデバイス110(たとえば、シンクライアント)から遠隔で実行されている。システム100は、シングルプレイヤーモードまたはマルチプレイヤーモードのいずれかでネットワーク150を介してクラウドゲームネットワーク190を通して1つ以上のゲームをプレイしている1人以上のユーザに対するゲーミングコントロールを提供してもよい。いくつかの実施形態では、クラウドゲームネットワーク190は、ホストマシンのハイパーバイザ上で実行される複数の仮想マシン(VM)を含んでいてもよい。1つ以上の仮想マシンが、ホストのハイパーバイザにとって利用可能なハードウェアリソースを用いるゲームプロセッサモジュールを実行するように構成されている。ネットワーク150は1つ以上の通信技術を含んでいてもよい。いくつかの実施形態では、ネットワーク150は、高度な無線通信システムを有する第5世代(5G)ネットワーク技術を含んでいてもよい。
【0033】
いくつかの実施形態では、無線技術を用いて通信を容易にしてもよい。このような技術には、たとえば、5G無線通信技術が含まれていてもよい。5Gは第5世代のセルラーネットワーク技術である。5Gネットワークはデジタルセルラーネットワークであり、ここでは、プロバイダがカバーするサービスエリアが、セルと言われる小さい地理的領域に分割される。音及び画像を表すアナログ信号は、電話機内でデジタル化され、アナログデジタル変換器によって変換されて、ビットのストリームとして送信される。セル内のすべての5G無線デバイスは、セル内のローカルアンテナアレイ及び低パワー自動化送受信装置(送信部及び受信部)を用いて電波によって通信し、この通信は、他のセル内で再使用される周波数のプールから送受信装置によって割り当てられた周波数チャネル上で行われる。ローカルアンテナは、高帯域幅光ファイバまたは無線バックホール接続によって電話ネットワーク及びインターネットと接続される。他のセルネットワークの場合と同様に、モバイルデバイスがあるセルから別のセルへ横断すると、新しいセルに自動的に移される。当然のことながら、5Gネットワークは単に通信ネットワークのタイプ例であり、本開示の実施形態では、前の世代の無線または有線通信、ならびに5Gの後に来る後の世代の有線または無線技術を用いてもよい。
【0034】
図示したように、クラウドゲームネットワーク190には、複数のビデオゲームにアクセスを提供するゲームサーバ160が含まれる。ゲームサーバ160は、クラウド内で利用できる任意のタイプのサーバコンピューティングデバイスであってもよく、1つ以上のホスト上で実行される1つ以上の仮想マシンとして構成してもよい。たとえば、ゲームサーバ160は、ユーザに対するゲームのインスタンスをインスタンス化するゲームプロセッサをサポートする仮想マシンを管理してもよい。したがって、複数の仮想マシンに対応付けられるゲームサーバ160の複数のゲームプロセッサは、複数のユーザのゲームプレイに対応付けられる1つ以上のゲームの複数のインスタンスを実行するように構成されている。このように、バックエンドサーバサポートは、複数のゲーミングアプリケーションのゲームプレイの媒体(たとえば、ビデオ、オーディオなど)のストリーミングを、複数の対応するユーザに提供する。すなわち、ゲームサーバ160は、データ(たとえば、対応するゲームプレイのレンダリング画像及び/またはフレーム)を、対応するクライアントデバイス110にネットワーク150を通してストリーミングによって戻すように構成されている。このように、コンピュータ的に複雑なゲーミングアプリケーションを、クライアントデバイス110が受け取って転送するコントローラ入力に応じて、バックエンドサーバで実行してもよい。各サーバは画像及び/またはフレームをレンダリングすることができ、これらは次に、エンコード(たとえば圧縮)され、対応するクライアントデバイスにストリーミングされて表示される。
【0035】
たとえば、複数のユーザは、ストリーミングメディアを受け取るように構成された対応するクライアントデバイス110を用いて、通信ネットワーク150を介してクラウドゲームネットワーク190にアクセスしてもよい。一実施形態では、クライアントデバイス110をシンクライアントとして構成して、計算機能(たとえば、ゲームタイトル処理エンジン111を含む)を提供するように構成されたバックエンドサーバ(たとえば、クラウドゲームネットワーク190)との相互連絡を提供してもよい。別の実施形態では、クライアントデバイス110を、ビデオゲームの少なくとも何らかのローカル処理を行うためのゲームタイトル処理エンジン及びゲームロジックを用いて構成してもよく、さらに、バックエンドサーバで実行されるビデオゲームが生成するストリーミングコンテンツを受け取るために、またはバックエンドサーバサポートが提供する他のコンテンツに対して用いてもよい。ローカル処理に対しては、ゲームタイトル処理エンジンには、ビデオゲームに対応付けられるビデオゲーム及びサービスを実行するための基本プロセッサベースの機能が含まれる。その場合、ゲームロジックを、ローカルクライアントデバイス110上に記憶して、ビデオゲームを実行するために用いてもよい。
【0036】
クライアントデバイス110はそれぞれ、クラウドゲームネットワークから異なるゲームへのアクセスをリクエストしていてもよい。たとえば、クラウドゲームネットワーク190は、ゲームサーバ160のCPUリソース163及びGPUリソース365を用いて実行されるように、ゲームタイトル処理エンジン111上に構築される1つ以上のゲームロジックを実行していてもよい。たとえば、ゲームロジック115aはゲームタイトル処理エンジン111と連携して、1つのクライアントに対してゲームサーバ160上で実行していてもよく、ゲームロジック115bはゲームタイトル処理エンジン111と連携して、2番目のクライアントに対してゲームサーバ160上で実行していてもよく、・・・またゲームロジック115nはゲームタイトル処理エンジン111と連携して、n番目のクライアントに対してゲームサーバ160上で実行していてもよい。
【0037】
詳細には、対応するユーザ(図示せず)のクライアントデバイス110は、通信ネットワーク150(たとえば、インターネット)を介してゲームへのアクセスをリクエストするように、またゲームサーバ160が実行するビデオゲームによって生成される表示画像(たとえば、画像フレーム)をレンダリングするように、構成されている。エンコード画像は、クライアントデバイス110に送出されて、対応するユーザに関連して表示される。たとえば、ユーザは、ゲームサーバ160のゲームプロセッサ上で実行されているビデオゲームのインスタンスと、クライアントデバイス110を通してやり取りしていてもよい。より詳細には、ビデオゲームのインスタンスはゲームタイトル処理エンジン111によって実行される。ビデオゲームを実施する対応するゲームロジック(たとえば、実行可能コード)115は、データストア(図示せず)を通して記憶されてアクセス可能であり、ビデオゲームを実行するために用いられる。ゲームタイトル処理エンジン111は、複数のゲームロジック(たとえば、ゲーミングアプリケーション)を用いて、複数のビデオゲームをサポートすることができ、各ゲームロジックは、ユーザによって選択可能である。
【0038】
たとえば、クライアントデバイス110は、対応するユーザのゲームプレイに関連するゲームタイトル処理エンジン111と、たとえば、ゲームプレイを駆動するために用いる入力コマンドを通して、相互に作用するように構成されている。詳細には、クライアントデバイス110は、種々のタイプの入力デバイス、たとえば、ゲームコントローラ、タブレットコンピュータ、キーボード、ビデオカメラによって取り込まれたジェスチャ、マウス、タッチパッドなどから入力を受け取ってもよい。クライアントデバイス110は、ネットワーク150を介してゲームサーバ160に接続することができるメモリ及びプロセッサモジュールを少なくとも有する任意のタイプのコンピューティングデバイスとすることができる。バックエンドのゲームタイトル処理エンジン111は、レンダリング画像を生成するように構成されている。レンダリング画像は、ネットワーク150を介して送出されて、クライアントデバイス110に関連する対応するディスプレイにおいて表示される。たとえば、クラウドベースのサービスを通して、ゲームレンダリング画像を、ゲームサーバ160のゲーム実行エンジン111上で実行されている対応するゲーム(たとえば、ゲームロジック)のインスタンスが送出してもよい。すなわち、クライアントデバイス110は、エンコード画像(たとえば、ビデオゲームの実行を通して生成されるゲームレンダリング画像からエンコードされる)を受け取るように、またレンダリングされる画像をディスプレイ11上に表示するように構成されている。一実施形態では、ディスプレイ11は、HMD(たとえば、VRコンテンツを表示する)を含む。いくつかの実施形態では、レンダリング画像を、スマートフォンまたはタブレットに、無線または有線で、クラウドベースのサービスから直接にまたはクライアントデバイス110(たとえば、プレイステーション(登録商標)リモートプレイ)を介して、ストリーミングしてもよい。
【0039】
一実施形態では、ゲームサーバ160及び/またはゲームタイトル処理エンジン111には、ゲーミングアプリケーションに対応付けられるゲーム及びサービスを実行するための基本プロセッサベースの機能が含まれる。たとえば、ゲームサーバ160には、プロセッサベースの機能(たとえば、2Dまたは3Dレンダリング、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、照明、シェーディング、ラスタライゼーション、レイトレーシング、シャドーイング、カリング、変換、人工知能など)を行うように構成された中央処理ユニット(CPU)リソース163及びグラフィックス処理ユニット(GPU)リソース365が含まれる。加えて、CPU及びGPUグループは、ゲーミングアプリケーションに対するサービス(メモリ管理、マルチスレッド管理、サービスの質(QoS)、バンド幅テスト、ソーシャルネットワーキング、ソーシャルフレンズの管理、フレンズのソーシャルネットワークとの通信、通信チャネル、テキスティング、インスタントメッセージ、チャットサポートなどを部分的に含む)を実行してもよい。一実施形態では、1つ以上のアプリケーションは特定のGPUリソースを共有する。一実施形態では、複数のGPUデバイスを結合して、対応するCPU上で実行されている単一アプリケーションに対するグラフィックス処理を実行してもよい。
【0040】
一実施形態では、クラウドゲームネットワーク190は分散ゲームサーバシステム及び/またはアーキテクチャである。詳細には、ゲームロジックを実行する分散ゲームエンジンは、対応するゲームの対応するインスタンスとして構成される。一般的に、分散ゲームエンジンは、ゲームエンジンの機能のそれぞれを取って、それらの機能を多数の処理エンティティが実行するように分配する。個々の機能をさらに、1つ以上の処理エンティティにわたって分配することができる。処理エンティティを異なる構成(たとえば、物理ハードウェア)で、及び/または仮想コンポーネントまたは仮想マシンとして、及び/または仮想コンテナとして構成してもよい。コンテナは、仮想化オペレーティングシステム上で実行されるゲーミングアプリケーションのインスタンスを仮想化するため、仮想マシンとは異なる。処理エンティティは、クラウドゲームネットワーク190のサーバ及びその基礎をなすハードウェア(1つ以上のサーバ(計算ノード)上にある)を使用し及び/またはそれらに依拠してもよい。サーバは1つ以上のラックに配置してもよい。種々の処理エンティティに対するこれらの機能の実行の調整、割り当て、及び管理は、分散同期層が行う。このように、これらの機能の実行を分散同期層が制御して、プレーヤによるコントローラ入力に応じたゲーミングアプリケーションに対する媒体(たとえばビデオフレーム、オーディオなど)の生成を可能にする。分散同期層は、これらの機能を、分散させた処理エンティティにわたって効率的に実行して(たとえば、ロードバランシングを通して)、重要なゲームエンジンコンポーネント/機能を分散させて再組み立てして、より効率的な処理が行われるようにすることができる。
【0041】
図2は、本開示の一実施形態により、複数のGPUが連携して対応するアプリケーションの単一画像をレンダリングする典型的なマルチGPUアーキテクチャ200の図である。当然のことながら、本開示の種々の実施形態において、複数のGPUが連携して単一画像をレンダリングする多くのアーキテクチャが可能であるが、明示的に説明することも図示することもしない。たとえば、レンダリング中に領域テストを行うことによるアプリケーションに対するジオメトリのマルチGPUレンダリングを、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間で実行してもよいし、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内で実行してもよい。
【0042】
マルチGPUアーキテクチャ200には、アプリケーションに対する単一画像及び/またはアプリケーションに対する画像列内の各画像のマルチGPUレンダリングを行うように構成されたCPU163及び複数のGPUが含まれている。詳細には、CPU163及びGPUリソース365は、プロセッサベースの機能(たとえば、前述したように、2Dまたは3Dレンダリング、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、照明、シェーディング、ラスタライゼーション、レイトレーシング、シャドーイング、カリング、変換、人工知能など)を行うように構成されている。
【0043】
たとえば、マルチ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を介して接続されている。
【0044】
さらに、各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を介して接続されている。
【0045】
CPU163は、GPUのそれぞれと、より低速度のバス230を介して接続されている(たとえば、バス230は、対応するGPUとその対応するメモリとの間の通信に対して用いるバス220よりも遅い)。詳細には、CPU163は、GPU-A、GPU-B、GPU-C、及びGPU-Dのそれぞれと接続されている。
【0046】
図3は、本開示の一実施形態により、レンダリング前にスクリーン領域(インターリーブされ得る)に対して事前テストを行うことによって、アプリケーションよって生成された画像フレームに対するジオメトリのマルチGPUレンダリングを行うように構成されたグラフィックス処理ユニットリソース365の図である。たとえば、ゲームサーバ160を、図1のクラウドゲームネットワーク190内のGPUリソース365を含むように構成してもよい。図示するように、GPUリソース365は、複数のGPU(たとえば、GPU365a、GPU365b・・・GPU365n)を含んでいる。前述したように、種々のアーキテクチャに、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって、複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間でジオメトリのマルチGPUレンダリングを実施すること、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内でジオメトリのマルチGPUレンダリングを実施することである。
【0047】
詳細には、一実施形態では、ゲームサーバ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レンダリング、物理シミュレーション、スクリプティング、オーディオ、アニメーション、グラフィックス処理、照明、シェーディング、ラスタライゼーション、レイトレーシング、シャドーイング、カリング、変換、人工知能など)を行うように構成されている。
【0048】
GPUリソース365は、オブジェクトのレンダリング(たとえば、オブジェクトのピクセルに対する色または法線ベクトル値を複数のレンダリングターゲット-MRTに書き込むこと)及び同期型計算カーネルの実行(たとえば、結果として生じるMRTに対するフルスクリーン効果)にレスポンシビリティを有し及び/またはこれらを行うように構成されている。実行すべき同期型計算及びレンダリングすべきオブジェクトは、GPUが実行するレンダリングコマンドバッファ325に含まれるコマンドによって指定される。詳細には、GPUリソース365は、レンダリングコマンドバッファ325からのコマンドを実行するときに、オブジェクトをレンダリングして、(たとえば、同期型計算カーネルを実行する間に)同期型計算を行うように構成され、コマンド及び/または動作は、それらが順次行われるように、他の動作に依存し得る。
【0049】
たとえば、GPUリソース365は、同期型計算を行うように、及び/または1つ以上のレンダリングコマンドバッファ325(たとえば、レンダリングコマンドバッファ325a、レンダリングバッファ325b・・・レンダリングコマンドバッファ325n)を用いてオブジェクトのレンダリングを行うように、構成されている。一実施形態では、GPUリソース365における各GPUはその独自のコマンドバッファを有していてもよい。代替的に、実質的に同じ組のオブジェクトが各GPUによってレンダリングされているとき(たとえば、領域のサイズが小さいために)、GPUリソース365におけるGPUは、同じコマンドバッファまたは同じ組のコマンドバッファを用いてもよい。さらに、GPUリソース365におけるGPUのそれぞれが、コマンドをあるGPUによって実行できるが、別のコマンドでは実行できないことをサポートしてもよい。たとえば、レンダリングコマンドバッファ内の描画コマンドまたはプレディケーション(predication)上にフラッグがあると、単一のGPUが、対応するコマンドバッファ内の1つ以上のコマンドを実行できるが、他のGPUはコマンドを無視する。たとえば、レンダリングコマンドバッファ325aはフラッグ330aをサポートしてもよく、レンダリングコマンドバッファ325bはフラッグ330bをサポートしてもよく・・・レンダリングコマンドバッファ325nはフラッグ330nをサポートしてもよい。
【0050】
同期型計算を行うこと(たとえば、同期型計算カーネルの実行)及びオブジェクトのレンダリングは、レンダリング全体の一部分である。たとえば、ビデオゲームが60Hz(たとえば、60フレーム/秒)で実行されている場合、画像フレームに対するすべてのオブジェクトレンダリング及び同期型計算カーネルの実行は通常、ほぼ16.67ms(たとえば、60Hzで1フレーム)内で完了しなければならない。前述したように、オブジェクトをレンダリングし及び/または同期型計算カーネルを実行するときに行う動作は順序付けされており、動作は他の動作に依存し得る(たとえば、レンダリングコマンドバッファ内のコマンドは、そのレンダリングコマンドバッファ内の他のコマンドが実行できる前に、実行を完了する必要があり得る)。
【0051】
詳細には、レンダリングコマンドバッファ325はそれぞれ、種々のタイプのコマンドを含んでいる(たとえば、対応するGPU構成に影響するコマンド(たとえば、レンダリングターゲットの場所及びフォーマットを指定するコマンド)、ならびにオブジェクトをレンダリングし及び/または同期型計算カーネルを実行するコマンド)。説明の目的上、同期型計算カーネルを実行するときに行う同期型計算には、オブジェクトがすべて1つ以上の対応する複数のレンダリングターゲット(MRT:Multiple Render Targets)にレンダリングされたときにフルスクリーン効果を行うことが含まれていてもよい。
【0052】
加えて、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)を介して、そのレンダリングを実行するかまたは特定の方法でカーネル実行を計算するように構成されるようにしてもよい。
【0053】
GPU構成のいくつかの例としては、レンダリングターゲット(たとえば、MRT)の場所及びフォーマットが挙げられる。また、GPU構成の他の例としては、操作手順が挙げられる。たとえば、オブジェクトをレンダリングするとき、オブジェクトの各ピクセルのZ値を、Zバッファと種々の方法で比較することができる。たとえば、オブジェクトピクセルを書き込むのは、オブジェクトZ値がZバッファ内の値とマッチする場合のみである。あるいは、オブジェクトピクセルを書き込むことができるのは、オブジェクトZ値がZバッファ内の値と同じかまたはそれを下回る場合のみである。行うテストのタイプはGPU構成内で規定される。
【0054】
図4は、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするようにマルチGPU処理用に構成されたグラフィックスパイプライン400を実施するレンダリングアーキテクチャの略図である。グラフィックスパイプライン400は、3D(3次元)ポリゴンレンダリングプロセスを用いて画像をレンダリングするための一般的なプロセスを例示する。レンダリング画像に対するグラフィックスパイプライン400は、ディスプレイ内の各ピクセルに対する対応する色情報を出力する。色情報は、テクスチャ及びシェーディング(たとえば、色、シャドーイングなど)を表し得る。グラフィックスパイプライン400は、図1及び3のクライアントデバイス110、ゲームサーバ160、ゲームタイトル処理エンジン111、及び/またはGPUリソース365内で実施可能であり得る。すなわち、種々のアーキテクチャは、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって複数のGPUが連携して単一画像をレンダリングすることを含んでいてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ間でジオメトリのマルチGPUレンダリングを実施すること、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内でジオメトリのマルチGPUレンダリングを実施することである。
【0055】
図示したように、グラフィックスパイプラインは入力ジオメトリ405を受け取る。たとえば、ジオメトリ処理ステージ410が入力ジオメトリ405を受け取る。たとえば、入力ジオメトリ405としては、3Dゲーミング世界内の頂点及び各頂点に対応する情報を挙げてもよい。ゲーミング世界内の所与のオブジェクトを、頂点によって規定されるポリゴン(たとえば、三角形)を用いて表すことができる。次に、対応するポリゴンの表面をグラフィックスパイプライン400を通して処理して、最終的な効果(たとえば、色、テクスチャなど)を実現する。頂点属性としては、法線(たとえば、どの方向がジオメトリのその場所に垂直であるか)、色(たとえば、RGB-赤色、緑色、及び青色の三色など)、及びテクスチャ座標/マッピング情報を挙げてもよい。
【0056】
ジオメトリ処理ステージ410は、頂点処理(たとえば、頂点シェーダーを介して)及びプリミティブ処理の両方にレスポンシビリティを有する(またこれらを行うことができる)。詳細には、ジオメトリ処理ステージ410は、プリミティブを規定してそれをグラフィックスパイプライン400の次のステージに送出する頂点の組、ならびにそれらの頂点に対する位置(正確には、同次座標)及び他の種々のパラメータを出力してもよい。位置は、後のシェーダーステージによるアクセスに備えて、位置キャッシュ450に配置される。他のパラメータは、やはり後のシェーダーステージによるアクセスに備えて、パラメータキャッシュ460に配置される。
【0057】
種々の動作をジオメトリ処理ステージ410によって行ってもよい。たとえば、プリミティブ及び/またはポリゴンに対する照明及びシャドーイング計算を行うことである。一実施形態では、ジオメトリステージは、プリミティブを処理することができるため、バックフェースカリング及び/またはクリッピング(たとえば、視錐台に対するテスト)を実行することができ、その結果、下流ステージ(たとえば、ラスタライゼーションステージ420など)に対する負荷が減る。別の実施形態では、ジオメトリステージは、プリミティブを生成してもよい(たとえば、従来のジオメトリシェーダーと同等の機能により)。
【0058】
ジオメトリ処理ステージ410によって出力されたプリミティブを、ラスタライゼーションステージ420内に供給し、そこでプリミティブを、ピクセルからなるラスター画像に変換する。詳細には、ラスタライゼーションステージ420は、シーン内のオブジェクトを、3Dゲーミング世界内の視認場所(たとえば、カメラ場所、ユーザ眼場所など)によって規定される2次元(2D)像平面に投影するように構成されている。単純化したレベルでは、ラスタライゼーションステージ420は、各プリミティブを見て、どのピクセルが対応するプリミティブの影響を受けるかを判定する。詳細には、ラスタライザ420はプリミティブをピクセルサイズのフラグメントに分割する。各フラグメントはディスプレイ内のピクセルに対応する。画像を表示するときに、1つ以上のフラグメントが、対応するピクセルの色に寄与し得ることに留意することは重要である。
【0059】
前述したように、ラスタライゼーションステージ420によってさらなる動作を行ってもよい。たとえば、視認場所に対するクリッピング(視錐台の外側のフラグメントを特定して無視する)及びカリング(より近いオブジェクトによって隠されるフラグメントを無視する)である。クリッピングに関連して、ジオメトリ処理ステージ410及び/またはラスタライゼーションステージ420を、ゲーミング世界内の視認場所によって規定される視錐台の外側にあるプリミティブを特定して無視するように構成してもよい。
【0060】
ピクセル処理ステージ430は、ジオメトリ処理ステージによって形成されるパラメータ(ならびに他のデータ)を用いて、ピクセルの結果として生じる色などの値を生成してもよい。詳細には、ピクセル処理ステージ430は根本的に、フラグメントに対してシェーディング動作を実行して、プリミティブの色及び輝度が、利用可能な照明によってどのように異なるかを判定する。たとえば、ピクセル処理ステージ430は、各フラグメントに対する深さ、色、法線、及びテクスチャ座標(たとえば、テクスチャ詳細)を決定してもよく、さらに、フラグメントに対する光、暗さ、及び色の適切なレベルを決定してもよい。詳細には、ピクセル処理ステージ430は各フラグメントの特徴を計算する。たとえば、色及び他の属性(たとえば、視認場所からの距離に対するz深度、及び透明性に対するアルファ値)である。加えて、ピクセル処理ステージ430は、対応するフラグメントに影響する利用可能な照明に基づいてフラグメントに照明効果を適用する。さらに、ピクセル処理ステージ430は、各フラグメントに対してシャドーイング効果を適用してもよい。
【0061】
ピクセル処理ステージ430の出力は、処理されたフラグメント(たとえば、テクスチャ及びシェーディング情報)を含み、グラフィックスパイプライン400の次のステージにある440出力マージャーステージに送出される。出力マージャーステージ440は、ピクセル処理ステージ430の出力、ならびに他のデータ(たとえば、すでにメモリ内にある値)を用いて、ピクセルに対する最終色を生成する。たとえば、出力マージャーステージ440は、ピクセル処理ステージ430から決定されたフラグメント及び/またはピクセルと、そのピクセルに対してMRTにすでに書き込まれた値との間の値の任意的なブレンディングを実行してもよい。
【0062】
ディスプレイ内の各ピクセルに対する色値を、フレームバッファ(図示せず)に記憶してもよい。これらの値を、対応するピクセルにスキャンすることを、シーンの対応する画像を表示するときに行う。詳細には、ディスプレイは、各ピクセルに対するフレームバッファから色値を、行ごとに、左から右へまたは右から左へ、上から下へまたは下から上へ、または任意の他のパターンで読み出し、画像を表示するときにこれらのピクセル値を用いるピクセルを照明する。
【0063】
図1~3のクラウドゲームネットワーク190(たとえば、ゲームサーバ160内の)及びGPUリソース365の詳細な説明により、図5のフロー図500は、本開示の一実施形態により、レンダリング前にインターリーブスクリーン領域に対してジオメトリの事前テストを行うことによって、アプリケーションよって生成された画像フレームに対するジオメトリのマルチGPUレンダリングを実施するときに、グラフィックス処理を行うための方法を例示する。このように、複数のGPUリソースを用いて、アプリケーションを実行するときにオブジェクトのレンダリングを効率的に実行する。前述したように、種々のアーキテクチャには、レンダリング中の領域テストを通してアプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。レンダリングは、たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ内において、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むもの)内において等、行われる。
【0064】
510において、本方法は、画像を生成するために連携する複数のグラフィックス処理ユニット(GPU)を用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。詳細には、マルチGPU処理は、単一画像フレーム及び/またはリアルタイムアプリケーションに対する画像フレーム列の1つ以上の各画像フレームをレンダリングするときに行う。
【0065】
520において、本方法は、グラフィックスのジオメトリをレンダリングするレスポンシビリティを複数のスクリーン領域に基づいて複数のGPU間で分割することを含む。すなわち、各GPUは、すべてのGPUに知られたレスポンシビリティの対応するディビジョンあるいは分割部(たとえば、対応するスクリーン領域)を有する。より具体的には、GPUはそれぞれ、複数のスクリーン領域のうちの対応する組のスクリーン領域内のジオメトリをレンダリングすることにレスポンシビリティを有している。対応する組のスクリーン領域は1つ以上のスクリーン領域を含んでいる。たとえば、第1のGPUは、第1の組のスクリーン領域内のオブジェクトをレンダリングするためのレスポンシビリティの第1のディビジョンを有する。また、第2のGPUは、第2の組のスクリーン領域内のオブジェクトをレンダリングするためのレスポンシビリティの第2のディビジョンを有する。このことは、残りのGPUに対して繰り返し適用される。
【0066】
530において、本方法は、ジオメトリテストのために、第1のGPUに、アプリケーションの実行中に生成された画像フレームのジオメトリの第1のピース(piece)あるいは断片を割り当てることを含む。たとえば、画像フレームは1つ以上のオブジェクトを含んでいてもよい。各オブジェクトはジオメトリの1つ以上のピースによって規定され得る。すなわち、一実施形態では、ジオメトリ事前テスト及びレンダリングを、オブジェクト全体であるジオメトリのピースに対して行う。他の実施形態では、ジオメトリ事前テスト及びレンダリングを、オブジェクト全体の一部であるジオメトリのピースに対して行う。
【0067】
たとえば、複数のGPUをそれぞれ、画像フレームに対応付けられるジオメトリの対応部分に割り当てる。詳細には、ジオメトリ事前テストを目的として、ジオメトリのすべての部分を対応するGPUに割り当てる。一実施形態では、ジオメトリを複数のGPU間で均一に割り当ててもよい。たとえば、複数に4つのGPUがある場合、GPUはそれぞれ、画像フレーム内のジオメトリの4分の1を処理してもよい。他の実施形態では、ジオメトリを複数のGPU間で不均一に割り当ててもよい。たとえば、画像フレームのマルチGPUレンダリングのために4つのGPUを用いる例では、あるGPUが処理する画像フレームのジオメトリが、別のGPUより多くてもよい。
【0068】
540において、本方法は、第1のGPUにおいてジオメトリ事前テストを行って、ジオメトリのピースが複数のスクリーン領域にどのように関係するかに対する情報を生成することを含む。詳細には、第1のGPUは、ジオメトリのピース及びそれが複数のスクリーン領域のそれぞれにどのように関係するかに対する情報を生成する。たとえば、第1のGPUによるジオメトリ事前テストは、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた特定のスクリーン領域とオーバーラップするか否かを判定してもよい。ジオメトリの第1のピースは、他のGPUがオブジェクトレンダリングを行うレスポンシビリティを有するスクリーン領域とオーバーラップしてもよく、及び/または第1のGPUがオブジェクトレンダリングを行うレスポンシビリティを有するスクリーン領域とオーバーラップしてもよい。一実施形態では、複数のGPUのうちのいずれかがジオメトリのレンダリングを行う前に、第1のGPUが行う対応するコマンドバッファ内のシェーダーがジオメトリテストを行う。他の実施形態では、ジオメトリテストを、たとえばグラフィックスパイプライン400のラスタライゼーションステージ420において、ハードウェアによって行う。
【0069】
ジオメトリ事前テストは通常、実施形態において、複数のGPUにより、対応する画像フレームのすべてのジオメトリに対して同時に行われる。すなわち、各GPUは、対応する画像フレームのジオメトリのその部分に対してジオメトリ事前テストを実行する。このように、GPUがジオメトリ事前テストを行うことで、各GPUは、ジオメトリのどのピースをレンダリングするか、ジオメトリのどのピースをスキップするかを知ることができる。詳細には、対応するGPUがジオメトリ事前テストを行うときに、対応するGPUは、ジオメトリのその部分を、画像フレームをレンダリングするために用いる複数の各GPUのスクリーン領域に対してテストする。たとえば、4つのGPUがある場合、特にジオメトリテストを目的として、ジオメトリがGPUに均一に割り当てられる場合、各GPUは、画像フレームのジオメトリの4分の1上でジオメトリテストを実行してもよい。したがって、各GPUが、対応する画像フレームのジオメトリのその部分に対してのみジオメトリ事前テストを行っていても、ジオメトリ事前テストは通常、実施形態において、複数のGPUにわたって画像フレームのすべてのジオメトリに対して同時に行われるため、生成された情報は、画像フレーム内のすべてのジオメトリ(たとえば、ジオメトリのピース)がすべてのGPUのスクリーン領域にどのように関係するかを示す。スクリーン領域はそれぞれ、オブジェクトレンダリングのために対応するGPUに割り当てられ、及び/またはレンダリングは、ジオメトリのピース(たとえば、オブジェクト全体またはオブジェクトの一部)に対して行ってもよい。
【0070】
550において、本方法は、ジオメトリのピースをレンダリングするときに、複数のGPUのそれぞれにおいて情報を用いることを含む(たとえば、ジオメトリのピースを完全にレンダリングすることまたはそのジオメトリのピースのレンダリングをスキップすることを含むために)。すなわち、複数のGPUのそれぞれにおいて情報を用いてジオメトリのピースをレンダリングする。ジオメトリのテスト結果(たとえば、情報)を他のGPUに送って、情報が各GPUに知られるようにする。たとえば、画像フレーム内のジオメトリ(たとえば、ジオメトリのピース)は通常、実施形態において、複数のGPUによって同時にレンダリングされる。詳細には、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域とオーバーラップするとき、GPUは、情報に基づいて、そのジオメトリのピースをレンダリングする。他方では、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられたどのスクリーン領域ともオーバーラップしないとき、GPUは、情報に基づいて、ジオメトリのそのピースのレンダリングをスキップすることができる。したがって、情報によって、すべてのGPUは、画像フレーム内のジオメトリをより効率的にレンダリングすること、及び/またはそのジオメトリのレンダリングを完全に回避することができる。たとえば、レンダリングを、複数のGPUによって実行されるように、対応するコマンドバッファ内のシェーダーによって行ってもよい。図7A、12A、及び13Aにおいて以下でより十分に説明するように、シェーダーを、対応するGPU構成に基づいて、ジオメトリテスト及び/またはレンダリングの一方または両方を実行するように構成してもよい。
【0071】
本開示の一実施形態により、いくつかのアーキテクチャでは、対応するレンダリングGPUが、対応する情報をそれを用いるのに間に合って受け取った場合、GPUはその情報を、対応する画像内でどのジオメトリをレンダリングすべきかを決定するときに用いる。すなわち、情報はヒントとして取られ得る。そうでない場合には、レンダリングGPUはジオメトリのピースを、通常行うように処理する。ジオメトリが、レンダリングGPU(たとえば、第2のGPU)に割り当てられた任意のスクリーン領域とオーバーラップするか否かを情報が示し得る例を用いて、ジオメトリのオーバーラップはないと情報が示す場合、レンダリングGPUはジオメトリのレンダリングを完全にスキップしてもよい。また、ジオメトリのピースのみがオーバーラップしない場合、第2のGPUは、少なくとも、オブジェクトレンダリングのために第2のGPUに割り当てられたスクリーン領域のいずれともオーバーラップしないジオメトリのピースのレンダリングをスキップしてもよい。他方で、ジオメトリに対するオーバーラップがあると情報が示すことがあり、この場合、第2のまたはレンダリングGPUはジオメトリをレンダリングする。また、ジオメトリの特定のピースが、オブジェクトレンダリングのために第2のまたはレンダリングGPUに割り当てられた任意のスクリーン領域とオーバーラップすると、情報は示す場合がある。その場合、第2のまたはレンダリングGPUは、オーバーラップするジオメトリのピースのみをレンダリングする。さらなる他の実施形態では、情報がない場合、または情報の生成もしくは受け取りが間に合わない場合、第2のGPUはレンダリングを通常どおりに実行する(たとえば、ジオメトリをレンダリングする)。したがって、ヒントとして提供された情報は、間に合って受け取られた場合には、グラフィックス処理システムの全体的効率を増加させ得る。情報が間に合って受け取られなかった場合、グラフィックス処理システムは、このような情報がない場合でもやはり適切に動作する。
【0072】
一実施形態では、あるGPU(たとえば、事前テストGPU)は、ジオメトリ事前テストを行って情報を生成する専用である。すなわち、専用のGPUは、対応する画像フレーム内のオブジェクト(たとえば、ジオメトリのピース)のレンダリングには用いない。具体的には、前述したように、アプリケーションに対するグラフィックスを複数のGPUを用いてレンダリングする。グラフィックスのジオメトリのレンダリングに対するレスポンシビリティを、複数のスクリーン領域(インターリーブされ得る)に基づいて複数のGPU間で分割する。各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。ジオメトリテストを、事前テストGPUにおいて、アプリケーションによって生成された画像フレームのジオメトリの複数のピースに対して行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成する。ジオメトリの複数のピースを、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いて、複数のGPUのそれぞれにおいてレンダリングする。すなわち、画像フレームをレンダリングするために用いるGPUからの対応するレンダリングGPUによってジオメトリの各ピースをレンダリングするときに、情報を用いる。
【0073】
図6A~6Bに、純粋に説明を目的として、領域及びサブ領域に細分割されたスクリーンに対するレンダリングを示す。当然のことながら、細分割する領域及びサブ領域の数は、画像及び/または画像列の1つ以上の各画像の効率的なマルチGPU処理に対して選択可能である。すなわち、スクリーンを2つ以上の領域に細分割してもよく、各領域をさらにサブ領域に分割してもよい。本開示の一実施形態では、図6Aに示すように、スクリーンを4つの四分円に細分割する。本開示の別の実施形態では、図6Bに示すように、スクリーンをより大きい数のインターリーブ領域に細分割する。以下の図6A~6Bの説明は、複数のGPUに割り当てられた複数のスクリーン領域にマルチGPUレンダリングを行うときに生じる非効率を例示することを意図している。図7A~7C及び図8A~8Bは、本発明のいくつかの実施形態による、より効率的なレンダリングを示している。
【0074】
詳細には、図6Aは、マルチGPUレンダリングを行うときに四分円(たとえば、4つの領域)に細分割されるスクリーン610Aの図である。図示したように、スクリーン610Aは4つの四分円(たとえば、A、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に割り当てられる。
【0075】
ジオメトリをカリングすることができる。たとえば、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をレンダリングする。
【0076】
図6Aにおいて、スクリーン610Aが四分円A~Dに分割されると、各GPUが実行しなければならない作業量は非常に異なり得る。なぜならば、場合によっては、不釣り合いな数量のジオメトリが1つの四分円の中にあり得るからである。たとえば、四分円Aには何らジオメトリのピースはないが、四分円Dにはジオメトリの5つのピースまたはジオメトリの少なくとも5つのピースの少なくとも一部がある。したがって、四分円Aに割り当てられたGPU-Aは使われないが、四分円Dに割り当てられたGPU-Dは、対応する画像内でオブジェクトをレンダリングするときに不釣り合いにビジーである。
【0077】
図6Bに、スクリーンを領域に細分割するときの別の手法を例示する。詳細には、単一画像または画像列内の1つ以上の各画像のマルチGPUレンダリングを行うときに、四分円に細分割するのではなくて、スクリーン610Bを複数のインターリーブ領域に細分割する。その場合、スクリーン610Bを、より大きい数のインターリーブ領域に細分割し(たとえば、4つの四分円よりも多い)、一方で、同じ数量のGPUをレンダリングのために用いる(たとえば、4つ)。スクリーン610Aに示したオブジェクト(611~617)を、スクリーン610Bの同じ対応する場所にも示す。
【0078】
詳細には、4つのGPU(たとえば、GPU-A、GPU-B、GPU-C、及びGPU-D)を用いて、対応するアプリケーションに対する画像をレンダリングする。GPUはそれぞれ、対応する領域とオーバーラップするジオメトリをレンダリングすることにレスポンシビリティを有する。すなわち、各GPUは対応する組の領域に割り当てられる。たとえば、GPU-Aは、対応する組においてAとラベル付けされた領域のそれぞれにレスポンシビリティを有し、GPU-Bは、対応する組においてBとラベル付けされた領域のそれぞれにレスポンシビリティを有し、GPU-Cは、対応する組においてCとラベル付けされた領域のそれぞれにレスポンシビリティを有し、GPU-Dは、対応する組においてDとラベル付けされた領域のそれぞれにレスポンシビリティを有している。
【0079】
さらに、領域は特定のパターンでインターリーブされている。領域をインターリーブする(及び領域の数がより多い)ために、各GPUが実行しなければならない作業量は、はるかにバランスされ得る。たとえば、スクリーン610Bをインターリーブするパターンには、交互に変わる行(たとえば、領域A-B-A-Bなど、及び領域C-D-C-Dなど)が含まれる。本開示の実施形態では、領域をインターリーブする他のパターンもサポートされる。たとえば、パターンには、反復配列の領域、均一に分布する領域、不均一に分布する領域、反復可能な行の配列の領域、ランダム配列の領域、ランダム行の配列の領域などが含まれていてもよい。
【0080】
領域の数を選ぶことは重要である。たとえば、領域の分配が細かすぎる(たとえば、領域の数が多すぎて最適ではない)場合、各GPUはやはりジオメトリの大部分または全部を処理しなければならない。たとえば、GPUがレスポンシビリティを有するすべての領域に対してオブジェクトの境界ボックスをチェックすることは難しい場合がある。また、境界ボックスを適時にチェックできるとしても、領域サイズが小さいために、結果として、各GPUはほとんどのジオメトリを処理しなければならない可能性がある。なぜならば、画像内のすべてのオブジェクトが、各GPUの少なくとも1つの領域とオーバーラップするからである(たとえば、GPUは、オブジェクトの一部のみが、そのGPUに割り当てられた領域の組内の少なくとも1つの領域とオーバーラップしたとしても、オブジェクト全体を処理する)。
【0081】
その結果、領域の数を選ぶこと、インターリーブのパターンなどが重要である。少なすぎるかもしくは多すぎる領域を選ぶ、またはインターリーブに対して少なすぎる領域もしくは多すぎる領域を選ぶ、またはインターリーブに対して非効率なパターン選ぶと、GPU処理を行うときの非効率につながり得る(たとえば、各GPUがジオメトリの大部分または全部を処理する)。このような場合、画像のレンダリングのために複数のGPUがある場合でも、GPUの非効率のために、スクリーンピクセル数及びジオメトリ密度の両方における対応する増加をサポートすることはできない(すなわち、4つのGPUが、4倍のピクセルを書き込むこと及び4倍の頂点またはプリミティブを処理することはできない)。以下の実施形態では、とりわけ、カリング方策(図7A~7C)及びカリングの粒度(図8A~8B)における改善を対象にする。
【0082】
図7A~7Cは、本開示の実施形態において、複数のGPUを用いて、単一画像及び/または画像列内の少なくとも1つ以上の各画像をレンダリングすることを例示する図である。4つのGPUの選択は単に、アプリケーションを実行しながら画像をレンダリングするときのマルチGPUレンダリングを簡単に例示するために行っており、当然のことながら、種々の実施形態におけるマルチGPUレンダリングのために任意の数のGPUを用いてもよい。
【0083】
詳細には、図7Aは、本開示の一実施形態により、連携して単一画像フレームをレンダリングする複数のGPUによって共有されるレンダリングコマンドバッファ700Aの図である。すなわち、本実施例では、複数のGPUはそれぞれ、同じレンダリングコマンドバッファ(たとえば、バッファ700A)を使用し、GPUはそれぞれ、レンダリングコマンドバッファ内ですべてのコマンドを実行する。複数のコマンド(完全セット)が、レンダリングコマンドバッファ700A内にロードされて、対応する画像フレームをレンダリングするために用いられる。当然のことながら、対応する画像フレームを生成するために1つ以上のレンダリングコマンドバッファを用いてもよい。一例では、CPUは、画像フレームに対して1つ以上のドローコールを生成する。ドローコールには、対応する画像のマルチGPUレンダリングを行うときに図3のGPUリソース365のうちの1つ以上のGPUによって実行されるように1つ以上のレンダリングコマンドバッファ内に配置されるコマンドが含まれる。いくつかの実施態様では、CPU163は1つ以上のGPUに、対応する画像をレンダリングするために用いるドローコールの全部または一部を生成するように要求してもよい。さらに、図7Aに、レンダリングコマンドバッファ700A内に含まれるコマンドの全セットを示している場合があるか、または図7Aに、レンダリングコマンドバッファ700A内に含まれるコマンドの全セットの一部を示している場合がある。
【0084】
GPUは通常、実施形態において、画像または画像列内の1つ以上の各画像のマルチGPUレンダリングを行うときに同時にレンダリングする。画像のレンダリングは複数のフェーズに分解することができる。各フェーズにおいて、GPUは同期させる必要があり、より速いGPUが、より遅いGPUの完了まで待機しなければならない。レンダリングコマンドバッファ700Aに対して図7Aに示すコマンドは1つのフェーズを示している。図7Aでは、たった1つのフェーズに対するコマンドを示しているが、レンダリングコマンドバッファ700Aは、画像をレンダリングするときに1つ以上のフェーズに対するコマンドを含んでいてもよい。図7Aでは、すべてのコマンドの一部のみを示して、他のフェーズに対するコマンドは示していない。1つのフェーズを例示する図7Aに示すレンダリングコマンドバッファ700Aのピースにおいて、レンダリングすべき4つのオブジェクトがある(たとえば、オブジェクト0、オブジェクト1、オブジェクト2、及びオブジェクト3)。これを図7B-1に示す。
【0085】
図示するように、図7Aに示すレンダリングコマンドバッファ700Aのピースは、ジオメトリテスト、オブジェクト(たとえば、ジオメトリのピース)のレンダリングに対するコマンド、及びレンダリングコマンドバッファ700Aからのコマンドを実行している1つ以上のレンダリングGPUの状態を構成するためのコマンドを含む。単に説明の目的上、図7Aに示すレンダリングコマンドバッファ700Aのピースは、ジオメトリ事前テスト、オブジェクトのレンダリング、及び/または対応するアプリケーションに対する対応する画像をレンダリングするときの同期型計算カーネルの実行のために用いるコマンド(710~728)を含む。いくつかの実施態様では、ジオメトリ事前テスト、及びその画像に対するオブジェクトのレンダリング、及び/または同期型計算カーネルの実行は、フレーム周期内に行わなければならない。レンダリングコマンドバッファ700A内に2つの処理セクションを示す。詳細には、処理セクション1は事前テストまたはジオメトリテスト701を含み、セクション2はレンダリング702を含む。
【0086】
セクション1は、画像フレーム内のオブジェクトのジオメトリテスト701を行うことを含む。各オブジェクトは、ジオメトリの1つ以上のピースによって規定され得る。事前テストまたはジオメトリテスト701は、1つ以上のシェーダーによって行われ得る。たとえば、対応する画像フレームのマルチGPUレンダリングにおいて用いる各GPUに、画像フレームのジオメトリの一部を割り当てて、ジオメトリテストを実行する。一実施形態では、事前テストのためにすべての部分を割り当ててもよい。割り当てた部分には、ジオメトリの1つ以上のピースが含まれていてもよい。各ピースは、オブジェクト全体を含んでいてもよいし、またはオブジェクトの一部(たとえば、頂点、プリミティブなど)を含んでいてもよい。詳細には、ジオメトリテストをジオメトリのピースに対して行って、ジオメトリのそのピースが複数のスクリーン領域のそれぞれにどのように関係するかについての情報を生成する。たとえば、ジオメトリテストは、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた特定のスクリーン領域とオーバーラップするか否かを判定してもよい。
【0087】
図7Aに示すように、セクション1のジオメトリテスト701(たとえば、ジオメトリの事前テスト)は、レンダリングコマンドバッファ700Aからのコマンドを実行する1つ以上のGPUの状態を構成するためのコマンド、及びジオメトリテストを行うためのコマンドを含む。詳細には、各GPUのGPU状態は、GPUが、対応するオブジェクトに対してジオメトリテストを実行する前に構成する。たとえば、コマンド710、713、及び715はそれぞれ、ジオメトリテストに対するコマンドを実行する目的で1つ以上のGPUのGPU状態を構成するために用いられる。図示したように、コマンド710は、ジオメトリテストコマンド711~712が適切に行えるようにGPU状態を構成する。コマンド711はオブジェクト0に対してジオメトリテストを実行し、コマンド712はオブジェクト1に対してジオメトリテストを実行する。同様に、コマンド713は、ジオメトリテストコマンド714がオブジェクト2に対してジオメトリテストを実行できるようにGPU状態を構成する。また、コマンド715は、ジオメトリテストコマンド716がオブジェクト3に対してジオメトリテストを実行できるようにGPU状態を構成する。当然のことながら、GPU状態を1つ以上のジオメトリテストコマンド(たとえば、テストコマンド711及び712)に対して構成してもよい。
【0088】
前述したように、ジオメトリテスト及び/またはオブジェクトのレンダリング及び/または対応する画像に対する同期型計算カーネルの実行に対して用いるレンダリングコマンドバッファ700A内のコマンドを実行するときに、レジスタに記憶された値は、対応するGPUに対するハードウェアコンテキスト(たとえば、GPU構成)を規定する。図示したように、GPU状態は、レンダリングコマンドバッファ700A内のコマンドの処理の全体にわたって変更してもよい。コマンドの以後の各セクションを、GPU状態を構成するために用いてもよい。図7Aに適用されるように、ならびに明細書の全体にわたって、GPU状態の設定に言及するときに、GPU状態は種々の方法で設定してもよい。たとえば、CPUまたはGPUはランダムアクセスメモリ(RAM)内の値を設定することができる。GPUはRAM内の値をチェックする。別の例では、状態はGPUの内部である可能性があり、これは、たとえば、コマンドバッファをサブルーチンとして2回呼び出して、内部のGPU状態が2つのサブルーチン呼び出しの間で異なるときである。
【0089】
セクション2には、画像フレーム内のオブジェクトのレンダリング702を行うことが含まれる。ジオメトリのピースがレンダリングされる)。レンダリング702は、コマンドバッファ700A内の1つ以上のシェーダーによって行われ得る。図7Aに示すように、セクション2のレンダリング702は、レンダリングコマンドバッファ700Aからのコマンドを実行する1つ以上のGPUの状態を構成するためのコマンドと、レンダリングを行うためのコマンドとを含む。詳細には、GPUが、対応するオブジェクト(たとえば、ジオメトリのピース)をレンダリングする前に、各GPUのGPU状態が構成される。たとえば、コマンド721、723、725、及び727がそれぞれ、レンダリングに対するコマンドを実行する目的で1つ以上のGPUのGPU状態を構成するために用いられる。図示したように、コマンド721は、レンダリングコマンド722がオブジェクト0をレンダリングできるように、GPU状態を構成する。コマンド723は、レンダリングコマンド724がオブジェクト1をレンダリングできるように、GPU状態を構成する。コマンド725は、レンダリングコマンド726がオブジェクト2をレンダリングできるように、GPU状態を構成する。またコマンド727は、レンダリングコマンド728がオブジェクト3をレンダリングできるように、GPU状態を構成する。図7Aでは、GPU状態が各レンダリングコマンド(たとえば、オブジェクト0をレンダリングする等)に対して構成されていると示しているが、当然のことながら、GPU状態を1つ以上のレンダリングコマンドに対して構成してもよい。
【0090】
前述したように、対応する画像フレームのマルチGPUレンダリングにおいて用いる各GPUは、ジオメトリ事前テストの間に生成された情報に基づいてジオメトリの対応するピースをレンダリングする。具体的には、各GPUに知られた情報は、オブジェクトとスクリーン領域との間の関係を提供する。ジオメトリの対応するピースをレンダリングするときに、GPUは、それらのジオメトリのピースを効率的にレンダリングする目的で、その情報を適時に受け取った場合に用い得る。具体的には、情報が示すように、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域または領域(複数)とオーバーラップするときに、GPUはジオメトリのそのピースに対するレンダリングを実行する。他方では、第1のGPUはジオメトリのピースのレンダリングを完全にスキップしなければならないと、情報は示すことがある(たとえば、ジオメトリのピースが、オブジェクトレンダリングを行うレスポンシビリティが第1のGPUに割り当てられたどのスクリーン領域ともオーバーラップしない)。このように、各GPUは、それがオブジェクトレンダリングを行うレスポンシビリティを有するスクリーン領域または領域(複数)とオーバーラップするジオメトリのピースのみをレンダリングする。したがって、情報は各GPUに対するヒントとして提供され、情報は、レンダリングが始まる前に受け取られた場合に、ジオメトリのピースのレンダリングを行っている各GPUによって考慮される。一実施形態では、情報が間に合って受け取られなかった場合にはレンダリングは正常に進む。たとえば、ジオメトリの対応するピースが、オブジェクトレンダリングのためにGPUに割り当てられた任意のスクリーン領域とオーバーラップするか否かとは関わりなく、ジオメトリのそのピースは、対応するGPUによって完全にレンダリングされる。
【0091】
単に説明の目的上、4つのGPUが、対応するスクリーンをそれらの間の領域に分割している。前述したように、各GPUは、領域の対応する組におけるオブジェクトをレンダリングするレスポンシビリティを有する。対応する組には1つ以上の領域が含まれる。一実施形態では、レンダリングコマンドバッファ700Aは、連携して単一画像をレンダリングする複数のGPUによって共有される。すなわち、単一画像または画像列内の1つ以上の各画像のマルチGPUレンダリングのために用いられるGPUは、共通のコマンドバッファを共有する。別の実施形態では、各GPUはそれ自身のコマンドバッファを有していてもよい。
【0092】
代替的に、さらなる他の実施形態では、GPUはそれぞれ、ある程度異なるオブジェクト組をレンダリングしていてもよい。特定のGPUが特定のオブジェクトをレンダリングする必要がなく、なぜならば、それが、たとえば対応する組においてその対応するスクリーン領域とオーバーラップしないからであると判定できるときには、これは成り立ち得る。前述したように、コマンドをあるGPUによって実行できるが、別のコマンドでは実行できないことをコマンドバッファがサポートする限り、複数のGPUはやはり同じコマンドバッファを用いる(たとえば、1つのコマンドバッファを共有する)ことができる。たとえば、共有のレンダリングコマンドバッファ700A内のコマンドの実行を、レンダリングGPUの1つに限定してもよい。これは種々の方法で達成することができる。別の例では、フラッグを対応するコマンド上で用いて、どのGPUがそれを実行するべきかを示してもよい。また、どのGPUがどの条件下で何をするかを示すビットを用いて、レンダリングコマンドバッファ内でプレディケーションを実行してもよい。プレディケーションの例としては、「これがGPU-Aならば、次のXコマンドをスキップする」が挙げられる。
【0093】
さらなる他の実施形態では、実質的に同じ組のオブジェクトが各GPUによってレンダリングされているので、複数のGPUはやはり同じコマンドバッファを用い得る。たとえば、前述したように、領域が比較的小さいときには、各GPUはオブジェクトをすべてレンダリングしてもよい。
【0094】
図7B-1にスクリーン700Bを例示する。スクリーン700Bは、本開示の一実施形態により、図7Aのレンダリングコマンドバッファ700Aを用いて複数のGPUによってレンダリングされる4つのオブジェクトを含む画像を示す。本開示の一実施形態により、ジオメトリのマルチGPUレンダリングは、画像フレーム内のオブジェクトに対応するジオメトリのピースをレンダリングする前に、スクリーン領域(インターリーブされ得る)に対してジオメトリを事前テストすることによってアプリケーションに対して行われる。
【0095】
詳細には、ジオメトリのレンダリングに対するレスポンシビリティは、複数の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を含む行と交互に現れている。
【0096】
前述したように、GPU処理効率を達成するために、スクリーンを領域に分割するときに種々の技術を用いてもよい。たとえば、領域の数を増加または減少させる(たとえば、正確な領域量を選ぶために)、領域をインターリーブする、領域及び/またはサブ領域をインターリーブするときに特定のパターンをインターリーブして選択するために領域の数を増加または減少させる等である。一実施形態では、複数のスクリーン領域はそれぞれ、均一サイズである。一実施形態では、複数のスクリーン領域はそれぞれ、サイズが均一でない。さらなる他の実施形態では、複数のスクリーン領域の数及びサイジングは動的に変化する。
【0097】
GPUはそれぞれ、対応する組の領域内のオブジェクトのレンダリングにレスポンシビリティを有する。各組には1つ以上の領域が含まれていてもよい。したがって、GPU-Aは、対応する組における各A領域内のオブジェクトのレンダリングにレスポンシビリティを有し、GPU-Bは、対応する組における各B領域内のオブジェクトのレンダリングにレスポンシビリティを有し、GPU-Cは、対応する組における各C領域内のオブジェクトのレンダリングにレスポンシビリティを有し、GPU-Dは、対応する組における各D領域内のオブジェクトのレンダリングにレスポンシビリティを有する。他のレスポンシビリティを有するGPUがあってもよく、それらはレンダリングを行わないでもよい(たとえば、複数のフレーム周期にわたって実行される非同期型計算カーネルを行う、レンダリングGPUに対するカリングを行う等)。
【0098】
行うべきレンダリングの量はGPUごとに異なる。図7B-2に、本開示の一実施形態により、図7B-1の4つのオブジェクトをレンダリングするときに各GPUが行うレンダリングを示す表を例示する。表に示したように、ジオメトリ事前テストの後に、オブジェクト0がGPU-Bによってレンダリングされていること、オブジェクト1がGPU-C及びGPU-Dによってレンダリングされていること、オブジェクト2がGPU-A、GPU-B、及びGPU-Dによってレンダリングされていること、ならびにオブジェクト3がGPU-B、GPU-C、及びGPU-Dによってレンダリングされていることを判定してもよい。GPU Aは、オブジェクト2のみをレンダリングする必要があり、GPU Dは、オブジェクト1、2、及び3をレンダリングする必要があるため、さらにいくつかのアンバランスなレンダリングが存在し得る。しかし、全体として、スクリーン領域のインターリーブにより、画像内のオブジェクトのレンダリングは、画像のマルチGPUレンダリングまたは画像列内の1つ以上の各画像のレンダリングのために用いる複数のGPU間で合理的にバランスされる。
【0099】
図7Cは、本開示の一実施形態により、複数のGPUが連携して単一画像フレーム(たとえば、図7B-1に示す画像フレーム700B)をレンダリングするときに、各GPUが行う各オブジェクトのレンダリングを例示する図である。詳細には、図7Cに、図7Aの共有のレンダリングコマンドバッファ700Aを用いて4つのGPUそれぞれ(たとえば、GPU-A、GPU-B、GPU-C、及びGPU-D)が行うオブジェクト0~3のレンダリングプロセスを示す。
【0100】
詳細には、2つのレンダリングタイミング図を時間軸740に対して示す。レンダリングタイミング図700C-1は、レンダリングの1つのフェーズにおける対応する画像のオブジェクト0~3のマルチGPUレンダリングを示す。GPUはそれぞれ、オブジェクト0~3とスクリーン領域との間のオーバーラップに関する何らの情報もない場合には、レンダリングを行う。レンダリングタイミング図700C-2は、レンダリングの同じフェーズにおける対応する画像のオブジェクト0~3のマルチGPUレンダリングを示す。スクリーン領域のジオメトリテスト(たとえば、レンダリングの前に行われる)の間に生成された情報は、各GPUによって共有されて、対応するGPUパイプラインを通してオブジェクト0~3をレンダリングするために用いられる。レンダリングタイミング図700C-1及び700C-2はそれぞれ、ジオメトリの各ピースを処理する(たとえば、ジオメトリテスト及びレンダリングを実行する)ために各GPUが要する時間を示す。一実施形態では、ジオメトリのピースはオブジェクト全体である。別の実施形態では、ジオメトリのピースはオブジェクトの一部であってもよい。説明の目的上、図7Cの例はジオメトリのピースのレンダリングを示す。ジオメトリの各ピースはオブジェクトに対応する(たとえば、その全体において)。レンダリングタイミング図700C-1及び700C-2のそれぞれにおいて、対応するGPUの少なくとも1つのスクリーン領域(たとえば、対応する組の領域内で)とオーバーラップするジオメトリ(たとえば、オブジェクトのプリミティブ)がないオブジェクト(たとえば、ジオメトリのピース)を、破線で描いたボックスで表している。他方で、対応するGPUの少なくとも1つのスクリーン領域(たとえば、対応する組の領域内で)とオーバーラップするジオメトリを有するオブジェクトを、実線で描いたボックスで表している。
【0101】
レンダリングタイミング図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のレンダリングを終えるのを待たなければならない。
【0102】
レンダリングタイミング図700C-1において、ジオメトリ事前テストは行われていない。したがって、各GPUは、対応するグラフィックスパイプラインを通して各オブジェクトを処理しなければならない。オブジェクトレンダリングのために対応するGPUに割り当てられた任意の領域(たとえば、対応する組内で)においてオブジェクトに対して描くべきピクセルがない場合、GPUはグラフィックスパイプラインを通してオブジェクトを完全にはレンダリングしない場合がある。たとえば、オブジェクトがオーバーラップしないとき、グラフィックスパイプラインのジオメトリ処理ステージのみが実行される。しかし、これはやはり処理に多少の時間がかかる。
【0103】
詳細には、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つのスクリーン領域(たとえば、対応する組における)とオーバーラップするからである。
【0104】
レンダリングタイミング図700C-2は、複数のGPUを用いるオブジェクト0~3のジオメトリ事前テスト701’とレンダリング702’とを示す。レンダリングタイミング図700C-2において、垂直線750aは、オブジェクトに対するレンダリングのフェーズ(たとえば、ジオメトリ事前テスト及びレンダリングを含む)の開始を示し、垂直線750bは、オブジェクトに対するレンダリングのフェーズの終了を示す。タイミング図700C-2に示すレンダリングのフェーズに対する時間軸740に沿った開始点及び終了点は、同期点を表す。前述したように、4つのGPUはそれぞれ、対応するGPUパイプラインを実行するときに同期される。たとえば、レンダリングのフェーズの終了を示す垂直線750bにおいて、すべてのGPUは、次のレンダリングフェーズに移動する前に、対応するグラフィックスパイプラインを通してオブジェクト0~3のレンダリングを終了するために、最も遅いGPU(たとえば、GPU-B)を待たなければならない。
【0105】
最初に、ジオメトリ事前テスト701’をGPUが行う。各GPUは、画像フレームのジオメトリのサブ組に対するジオメトリ事前テストを、すべてのスクリーン領域に対して実行する。各スクリーン領域は、オブジェクトレンダリングのために対応するGPUに割り当てられている。前述したように、GPUはそれぞれ、画像フレームに対応付けられるジオメトリの対応部分に割り当てられている。ジオメトリ事前テストは、ジオメトリの特定のピースがスクリーン領域のそれぞれにどのように関係するか(たとえば、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするか否か)についての情報を生成する。この情報は、画像フレームをレンダリングするために用いる各GPUによって共有される。たとえば、図7Cに示す701’ジオメトリ事前テストには、GPU-Aにオブジェクト0に対するジオメトリ事前テストを実行させること、GPU-Bにオブジェクト1に対するジオメトリ事前テストを実行させること、GPU-Cにオブジェクト2に対するジオメトリ事前テストを実行させること、及びGPU-Dにオブジェクト3に対するジオメトリ事前テストを実行させることが含まれる。テストしているオブジェクトに応じて、ジオメトリ事前テストを行うための時間は変わり得る。たとえば、オブジェクト0のジオメトリ事前テストにかかる時間は、オブジェクト1に対してジオメトリ事前テストを実行する場合よりも短い。これは、オブジェクトサイジング、オーバーラップするスクリーン領域の数などに起因する場合がある。
【0106】
ジオメトリ事前テストの後で、各GPUは、そのスクリーン領域と交差するジオメトリのすべてのオブジェクトまたはピースに対してレンダリングを実行する。一実施形態では、各GPUは、ジオメトリテストが終了したらすぐに、ジオメトリのそのピースのレンダリングを始める。すなわち、ジオメトリテストとレンダリングとの間に同期点はない。これは可能である。なぜならば、生成されているジオメトリテスト情報は、ハード依存ではなくてヒントとして処置されるからである。たとえば、GPU-Aがオブジェクト2のレンダリングを始めるのは、GPU-Bがオブジェクト1のジオメトリ事前テストを終了する前、したがってGPU-Bがオブジェクト0、2、及び3のレンダリングを始める前である。
【0107】
垂直線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との間の時間差である。
【0108】
速度増加は、ジオメトリ事前テストの間に生成された情報の生成及び共有を通して実現される。たとえば、ジオメトリ事前テストの間に、GPU-Aは、オブジェクト0をGPU-Bでレンダリングするだけでよいことを示す情報を生成する。したがって、GPU-Bにはオブジェクト0をレンダリングすべきであることが通知され、他のGPU(たとえばGPU-A、GPU-C、及びGPU-D)は、オブジェクト0のレンダリングを完全にスキップし得る。なぜならば、オブジェクト0は、オブジェクトレンダリングのためにこれらのGPUに割り当てられたどの領域(たとえば、対応する組における)ともオーバーラップしないからである。たとえば、これらのGPUはジオメトリ処理ステージを実行する必要はないが、一方で、タイミング図700C-1に示すように、これらのGPUがオブジェクト0を完全にはレンダリングしない場合でも、ジオメトリ事前テストなしでこの段階は処理された。また、ジオメトリ事前テストの間に、GPU-Bは、オブジェクト1はGPU-C及びGPU-Dがレンダリングすべきであり、GPU-A及びGPU-Bはオブジェクト1のレンダリングを完全にスキップしてもよいことを示す情報を生成する。これは、なぜならば、オブジェクト1は、オブジェクトレンダリングのためにGPU-AまたはGPU-Bに割り当てられたどの領域(たとえば、個々の対応する組における)ともオーバーラップしないからである。また、ジオメトリ事前テストの間に、GPU-Cは、オブジェクト2が、GPU-A、GPU-B、及びGPU-Dによってレンダリングされるべきであり、GPU-Cはオブジェクト2のレンダリングを完全にスキップしてもよいことを示す情報を生成する。これは、なぜならば、オブジェクト2は、オブジェクトレンダリングのためにGPU-Cに割り当てられたどの領域(たとえば、対応する組における)ともオーバーラップしないからである。さらに、ジオメトリ事前テストの間に、GPU-Dは、オブジェクト3が、GPU-B、GPU-C、及びGPU-Dによってレンダリングされるべきであり、GPU-Aはオブジェクト3のレンダリングを完全にスキップしてもよいことを示す情報を生成する。これは、なぜならば、オブジェクト3は、オブジェクトレンダリングのためにGPU-Aに割り当てられたどの領域(たとえば、対応する組における)ともオーバーラップしないからである。
【0109】
ジオメトリ事前テストから生成された情報はGPU間で共有されるため、各GPUは、どのオブジェクトをレンダリングするかを決定することができる。したがって、ジオメトリ事前テストを行って、テストからの結果がすべてのGPUによって共有された後で、各GPUは、ジオメトリのどのオブジェクトまたはピースを、対応するGPUがレンダリングする必要があるかに対する情報を有する。たとえば、GPU-Aはオブジェクト2をレンダリングし、GPU-Bはオブジェクト0、2、及び3をレンダリングし、GPU-Cはオブジェクト1及び3をレンダリングし、ならびにGPU-Dはオブジェクト1、2、及び3をレンダリングする。
【0110】
詳細には、GPU Aはオブジェクト1に対するジオメトリ処理を実行して、オブジェクト1はGPU-Bがスキップできると判定する。なぜならば、オブジェクト1は、オブジェクトレンダリングのためにGPU-Bに割り当てられたどの領域(たとえば、対応する組における)ともオーバーラップしないからである。加えて、オブジェクト1は、GPU-Aによって完全にはレンダリングされない。なぜならば、オブジェクト1は、オブジェクトレンダリングのためにGPU-Aに割り当てられたどの領域(たとえば、対応する組における)ともオーバーラップしないからである。オブジェクト1はGPU-Bに割り当てられたどの領域ともオーバーラップしないという判定は、GPU-Bがオブジェクト1に対するジオメトリ処理を始める前になされるため、GPU-Bはオブジェクト1のレンダリングをスキップする。
【0111】
図8A~8Bに、スクリーン領域820A及び820Bに対するオブジェクトテストを示す。スクリーン領域はインターリーブされていてもよい(たとえば、スクリーン領域820A及び820Bはディスプレイの一部を示す)。詳細には、オブジェクトのマルチGPUレンダリングを単一画像フレームまたは画像フレーム列内の1つ以上の各画像フレームに対して、スクリーン内のオブジェクトをレンダリングする前にジオメトリテストを実行することによって行う。図示したように、GPU-Aには、スクリーン領域820A内のオブジェクトをレンダリングするレスポンシビリティが割り当てられる。GPU-Bには、スクリーン領域820B内のオブジェクトをレンダリングするレスポンシビリティが割り当てられる。「ジオメトリのピース」に対する情報が生成される。ジオメトリのピースは、オブジェクト全体またはオブジェクトの一部とすることができる。たとえば、ジオメトリのピースは、オブジェクト810またはオブジェクト810の一部とすることができる。
【0112】
図8Aは、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときのスクリーン領域に対するオブジェクトテストを例示する図である。前述したように、ジオメトリのピースはオブジェクトとすることができ、ピースは、対応するドローコールが使用または生成するジオメトリに対応する。ジオメトリ事前テストの間に、オブジェクト810は領域820Aとオーバーラップすると判定され得る。すなわち、オブジェクト810の部分810Aは領域820Aとオーバーラップする。その場合、GPU-Aにはオブジェクト810をレンダリングすることが課される。また、ジオメトリ事前テストの間に、オブジェクト810は領域820Bとオーバーラップすると判定され得る。すなわち、オブジェクト810の部分810Bは領域820Bとオーバーラップする。その場合、GPU-Bにもオブジェクト810をレンダリングすることが課される。
【0113】
図8Bは、本開示の一実施形態により、複数のGPUが連携して単一画像フレームをレンダリングするときのスクリーン領域及び/またはスクリーンサブ領域に対するオブジェクトの一部のテストを例示する図である。すなわち、ジオメトリのピースをオブジェクトの一部とすることができる。たとえば、オブジェクト810をピースに分割してもよく、ドローコールが使用または生成するジオメトリはジオメトリのより小さいピースに細分割される。一実施形態では、ジオメトリのピースはそれぞれ大まかに、位置キャッシュ及び/またはパラメータキャッシュが割り当てられるサイズである。その場合、ジオメトリテストに間にジオメトリのそれらのより小さいピースに対して、情報(たとえば、ヒントまたはヒント(複数))が生成される。前述したように、情報はレンダリングGPUによって用いられる。
【0114】
たとえば、オブジェクト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」のレンダリングをスキップすることができる。
【0115】
一実施形態では、ジオメトリ処理ステージは頂点処理及びプリミティブ処理の両方を行うように構成されているため、ジオメトリ処理ステージにおいてシェーダーを用いてジオメトリのピースに対してジオメトリ事前テストを行うことができる。たとえば、ジオメトリ処理ステージは、GPUスクリーン領域に対してジオメトリに対する境界錐台をテストすること(ソフトウェアシェーダー動作によって行われ得る)などによって、情報(たとえば、ヒント)を生成する。一実施形態では、このテストは、ハードウェアを通して実施される専用命令または命令(複数)を用いることを通して加速され、その結果、ソフトウェア/ハードウェア解決策が実施される。すなわち、専用命令または命令(複数)を用いて、ジオメトリのピースとスクリーン領域に対するその関係とに関する情報の生成を加速する。たとえば、ジオメトリのピースのプリミティブの頂点の同次座標が、ジオメトリ処理ステージにおけるジオメトリ事前テストに対する命令への入力として提供される。テストによって、各GPUに対して、プリミティブが、オブジェクトレンダリングのためにそのGPUに対して割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするか否かを示すブール戻り値を、生成してもよい。したがって、対応するジオメトリピースとスクリーン領域に対するその関係とに関してジオメトリ事前テストの間に生成される情報(たとえば、ヒント)が、ジオメトリ処理ステージにおけるシェーダーによって生成される。
【0116】
別の実施形態では、ジオメトリのピースに対するジオメトリ事前テストを、ハードウェアラスタライゼーションステージにおいて行うことができる。たとえば、ハードウェアスキャンコンバータを、ジオメトリ事前テストを実行するように構成して、スキャンコンバータが、対応する画像フレームのオブジェクトレンダリングのために複数のGPUに割り当てられたすべてのスクリーン領域に関する情報を生成するようにしてもよい。
【0117】
さらなる他の実施形態では、ジオメトリのピースはプリミティブとすることができる。すなわち、ジオメトリ事前テストのために用いるオブジェクトの一部はプリミティブであってもよい。したがって、あるGPUがジオメトリ事前テストの間に生成した情報(たとえばヒント)は、個々の三角形(たとえば、プリミティブを表す)を別のレンダリングGPUがレンダリングする必要があるか否かを示す。
【0118】
一実施形態では、ジオメトリ事前テストの間に生成され、レンダリングのために用いるGPUによって共有される情報には、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするプリミティブの数(たとえば、残存しているプリミティブ数)が含まれる。また情報には、これらのプリミティブを構築または規定するために用いられる頂点の数が含まれていてもよい。すなわち、情報には残存している頂点数が含まれる。したがって、レンダリングするとき、対応するレンダリングGPUは、供給された頂点数を用いて位置キャッシュ及びパラメータキャッシュにスペースを割り当ててもよい。たとえば、一実施形態では、必要でない頂点に割り当てられるスペースはないため、レンダリングの効率が増加し得る。
【0119】
他の実施形態では、ジオメトリ事前テストの間に生成される情報(たとえばヒント)には、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップする特定のプリミティブ(たとえば、完全一致として残存しているプリミティブ)が含まれる。すなわち、レンダリングGPUに対して生成される情報には、レンダリングのために特定の組のプリミティブが含まれる。また情報には、これらのプリミティブを構築または規定するために用いられる特定の頂点が含まれていてもよい。すなわち、レンダリングGPUに対して生成される情報には、レンダリングのために特定の組の頂点が含まれる。この情報によって、たとえば、ジオメトリのピースをレンダリングするときのそのジオメトリ処理ステージ中に他のレンダリングGPU時間が節約され得る。
【0120】
さらに他の実施形態では、ジオメトリテスト中の情報の生成に対応付けられる処理オーバーヘッド(ソフトウェアまたはハードウェアのいずれか)があり得る。その場合、ジオメトリの特定のピースに対しては情報の生成をスキップすることが有用であり得る。すなわち、ヒントとして提供される情報は、特定のオブジェクトに対しては生成されるが、他に対しては生成されない。たとえば、スカイボックスまたは大きな地形ピースを表すジオメトリのピース(たとえば、オブジェクトまたはオブジェクトのピース)には、大きな三角形が含まれていてもよい。その場合、画像フレームまたは画像フレーム列内の1つ以上の各画像フレームのマルチGPUレンダリングのために用いる各GPUが、ジオメトリのこれらのピースをレンダリングする必要があるという可能性がある。すなわち、対応するジオメトリのピースの特性に応じて、情報を生成してもよいし生成しなくてもよい。
【0121】
図9A~9Cに、本開示の一実施形態により、複数のGPUが連携して単一画像をレンダリングするときにスクリーン領域を対応するGPUに割り当てるための種々の方策を例示する。GPU処理効率を達成するために、スクリーンを領域に分割するときに種々の技術を用いてもよい。たとえば、領域の数を増加または減少させる(たとえば、正確な領域量を選択するために)、領域をインターリーブする、領域をインターリーブするときに特定のパターンをインターリーブして選択するために領域の数を増加または減少させる等である。たとえば、複数のGPUは、アプリケーションよって生成された画像フレームに対するジオメトリのマルチGPUレンダリングを、対応する画像内のオブジェクトをレンダリングする前にインターリーブされたスクリーン領域に対してジオメトリの事前テストを行うことによって実行するように構成されている。図9A~9Cのスクリーン領域の構成は、複数のGPU間のレンダリング時間のわずかなアンバランスも減らすようにデザインされている。テストの複雑さ(たとえば、対応するスクリーン領域にオーバーラップする)は、スクリーン領域がGPUにどのように割り当てられたかに応じて変化する。図9A~9Cに示す図に示すように、太字のボックス910は、画像をレンダリングするときに用いる対応するスクリーンまたはディスプレイのアウトラインである。
【0122】
一実施形態では、複数のスクリーン領域または複数の領域はそれぞれ、均一サイズである。一実施形態では、複数のスクリーン領域はそれぞれ、サイズが均一でない。さらなる他の実施形態では、複数のスクリーン領域におけるスクリーン領域の数及びサイジングは動的に変化する。
【0123】
詳細には、図9Aに、スクリーン910に対する簡単なパターン900Aを例示する。スクリーン領域はそれぞれ、均一サイズである。たとえば、各領域のサイズは、2ピクセルの累乗である寸法の矩形であってもよい。たとえば、各領域はサイズが256×256ピクセルであってもよい。図示するように、領域割り当てはチェックボードパターンであり、A及びB領域のある行がB及びC領域の別の行と交互になっている。パターン900Aは、ジオメトリ事前テストの間に容易にテストされ得る。しかし、いくつかのレンダリング非効率さが存在し得る。たとえば、各GPUに割り当てられたスクリーン面積は実質的に異なっている(すなわち、スクリーン910内でスクリーン領域C及び領域Dに対するカバレージの方が小さい)。そのため、各GPUに対するレンダリング時間のアンバランスにつながり得る。
【0124】
図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ピクセルのサイズの面積をカバーする。
【0125】
図9Cに、スクリーン910に対するスクリーン領域のパターン900Cを例示する。スクリーン領域はそれぞれ、サイズが均一でない。すなわち、GPUにオブジェクトをレンダリングするレスポンシビリティが割り当てられたスクリーン領域は、サイズが均一でない場合がある。詳細には、各GPUが同一数のピクセルに割り当てられるようにスクリーン910は分割されている。たとえば、4Kディスプレイ(3840×2160)を垂直方向に4つの領域に等しく分割した場合、各領域は高さが520ピクセルになる。しかし、通常、GPUは32×32ブロックのピクセルにおいて多くの動作を行い、520ピクセルは32ピクセルの倍数ではない。したがって、一実施形態では、パターン900Cには、高さが512ピクセル(32の倍数)のブロックと、高さが544ピクセル(やはり32の倍数)の他のブロックとが含まれていてもよい。他の実施形態では、異なるサイズのブロックを用いてもよい。パターン900Cは、不均一のスクリーン領域を用いることによって等しい数量のスクリーンピクセルが各GPUに割り当てられている様子を示している。
【0126】
さらなる他の実施形態では、画像のレンダリングを行うときのアプリケーションのニーズが時間とともに変化し、スクリーン領域が動的に選択される。たとえば、レンダリング時間のほとんどがスクリーンの下半分上で費やされることが分かっている場合、ディスプレイの下半分におけるほぼ等しい数量のスクリーンピクセルが、対応する画像をレンダリングするために用いる各GPUに割り当てられるように、領域を割り当てることが好都合である。すなわち、対応する画像をレンダリングするために用いる各GPUに割り当てる領域を動的に変えてもよい。たとえば、ゲームモード、異なるゲーム、スクリーンのサイズ、領域に対して選択されるパターンなどに基づいて、変更を適用してもよい。
【0127】
図10は、本開示の一実施形態により、ジオメトリ事前テストを行う目的で、ジオメトリのピースに対するGPUの割り当ての種々の分配を例示する図である。すなわち、図10は、複数のGPU間でジオメトリ事前テストを行う間に情報を生成するためのレスポンシビリティの分配を示す。前述したように、各GPUは、画像フレームのジオメトリの対応部分に割り当てられる。その部分はさらに、オブジェクト、オブジェクトの一部、ジオメトリ、ジオメトリのピースなどに分割され得る。ジオメトリ事前テストには、ジオメトリの特定のピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域またはスクリーン領域(複数)とオーバーラップするか否かを判定することが含まれる。ジオメトリ事前テストは通常、実施形態において、対応する画像フレームのすべてのジオメトリ(たとえば、ジオメトリのすべてのピース)に対して、GPUによって同時に行われる。このように、ジオメトリテストは、GPUによって連携的に行われ、これによって、前述したように、各GPUは、ジオメトリのどのピースをレンダリングするか、ジオメトリのどのピースのレンダリングをスキップするかを知ることができる。
【0128】
図10に示すように、ジオメトリの各ピースはオブジェクト、オブジェクトの一部などであり得る。たとえば、前述したように、ジオメトリのピースは、オブジェクトの一部(たとえば、大よそ、位置及び/またはパラメータキャッシュが割り当てられるサイズであるピース)であり得る。純粋に説明用に、オブジェクト0(たとえば、レンダリングコマンドバッファ700A内のコマンド722によってレンダリングされると指定されている)を、ピース「a」、「b」、「c」、「d」、「e」、及び「f」(たとえば、図8Bにおけるオブジェクト810)に分割する。また、オブジェクト1(たとえばレンダリングコマンドバッファ700A内のコマンド724によってレンダリングされると指定されている)を、ピース「g」、「h」、及び「i」に分割する。さらに、オブジェクト2(たとえばレンダリングコマンドバッファ700A内のコマンド724によってレンダリングされると指定されている)を、ピース「j」、「k」、「l」、「m」、「n」、及び「o」に分割する。ジオメトリテストに対するレスポンシビリティをGPUに分配する目的で、ピースを順序付けしてもよい(たとえば、a~o)。
【0129】
分配1010(たとえば、ABCDABCDABCD...行)は、ジオメトリテストに対するレスポンシビリティの、複数のGPU間での均一分配を示す。詳細には、あるGPUに、ジオメトリの第1の4分の1を取らせて(たとえば、ブロックにおいて、たとえばGPU Aは、ジオメトリテストのために「a」、「b」、「c」、及び「d」を含む全体でほぼ16のピースのうちの第1の4つのピースを取る)、第2のGPUに第2の4分の1を取らせる等ではなく、GPUに対する割り当てをインターリーブする。すなわち、ジオメトリの連続的なピースが、異なるGPUに割り当てられる。たとえば、ピース「a」はGPU-Aに割り当てられ、ピース「b」はGPU-Bに割り当てられ、ピース「c」はGPU-Cに割り当てられ、ピース「d」はGPU-Dに割り当てられ、ピース「e」はGPU-Aに割り当てられ、ピース「f」はGPU-Bに割り当てられ、ピース「g」はGPU-Cに割り当てられる等である。その結果、ジオメトリテストの処理は、GPU(たとえば、GPU-A、GPU-B、GPU-C、及びGPU-D)間で大まかにバランスされる。
【0130】
分配1020(たとえば、ABBCDABBCDABBCD...行)は、ジオメトリテストに対するレスポンシビリティの、複数のGPU間での非対称の分配を示す。非対称の分配は、対応する画像フレームをレンダリングするときに特定のGPUがジオメトリテストを実行する時間が他のGPUよりも長い場合に、好都合であり得る。たとえば、あるGPUは、シーンの以前のフレームまたはフレーム(複数)に対するオブジェクトのレンダリングを、他のGPUよりも早く終了していることがあり、したがって(このフレームもまた、より早く終了することが予想されるため)、そのGPUに、ジオメトリテストを行うためのジオメトリのピースをより多く割り当てることができる。この場合もやはり、GPUに対する割り当てがインターリーブされる。図示したように、GPU-Bに、ジオメトリ事前テストのためのジオメトリのピースを他のGPUよりも多く割り当てる。説明するために、ピース「a」はGPU-Aに割り当てられ、ピース「b」はGPU-Bに割り当てられ、ピース「c」もGPU-Bに割り当てられ、ピース「d」はGPU-Cに割り当てられ、ピース「e」はGPU-Dに割り当てられ、ピース「f」はGPU-Aに割り当てられ、ピース「g」はGPU-Bに割り当てられ、ピース「h」もGPU-Bに割り当てられ、ピース「i」はGPU-Cに割り当てられる等である。GPUに対するジオメトリテストの割り当てはバランスされていない場合があるが、完全なフェーズの複合された処理(たとえば、ジオメトリ事前テスト及びジオメトリのレンダリング)は、大まかにバランスされていることが判明する場合がある(たとえば、各GPUが、ジオメトリ事前テスト及びジオメトリのレンダリングの実行にほぼ同じ時間を費やす)。
【0131】
図11A~11Bに、ジオメトリテストに対するレスポンシビリティを複数のGPU間で割り当てるときに、1つ以上の画像フレームに対する統計値を用いることを例示する。たとえば、統計値に基づいて、いくつかのGPUは、ジオメトリテストの間にジオメトリのピースをより多くまたはより少なく処理して、レンダリングするときに有用な情報を生成してもよい。
【0132】
詳細には、図11Aは、本開示の一実施形態により、複数のGPUによる以前の画像フレームのジオメトリの事前テスト及びレンダリングと、レンダリング中に収集した統計値を用いて、現在の画像フレームのジオメトリの事前テストを現在の画像フレームにおける複数のGPUに割り当てることに影響を与えることと、を例示する図である。純粋に説明用に、図11Aの第2のフレーム1100Bにおいて、GPU-Bは、他のGPU(たとえばGPU-A、GPU-C、及びGPU-D)の2倍の数のジオメトリのピースを処理する(たとえば、事前テストの間に)。GPU-Bにジオメトリのピースをより多く分配して割り当て、現在の画像フレームにおいてジオメトリ事前テストを実行することは、以前の画像フレームまたは以前の画像フレーム(複数)のレンダリングの間に収集した統計値に基づく。
【0133】
たとえば、タイミング図1100Aは、以前の画像フレームに対するジオメトリ事前テスト701A及びレンダリング702Aを示している。両プロセスに対して、4つのGPU(たとえば、GPU-A、GPU-B、GPU-C、及びGPU-D)を用いている。以前の画像フレームのジオメトリ(たとえば、ジオメトリのピース)の割り当ては、GPU間で均一に分配されている。これは、各GPUによるジオメトリ事前テスト701Aの大まかにバランスされた性能によって示される。
【0134】
1つ以上の画像フレームから収集したレンダリング統計値を用いて、現在の画像フレームのジオメトリテスト及びレンダリングをどのように実行するかを決定してもよい。すなわち、統計値を、以後の画像フレーム(たとえば、現在の画像フレーム)のジオメトリテスト及びレンダリングを行うときに用いるための情報として提供してもよい。たとえば、以前の画像フレームのオブジェクト(たとえば、ジオメトリのピース)のレンダリング中に収集した統計値は、GPU-Bが他のGPUよりも早くレンダリングを終了したことを示す場合がある。詳細には、GPU-Bは、オブジェクトレンダリングのためにGPU-Bに割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするジオメトリのその一部をレンダリングした後にアイドルタイム1130Aを有する。他のGPU-A、GPU-C、及びGPU-Dはそれぞれ、以前の画像フレームの対応するフレーム周期のほぼ終了710までレンダリングを実行する。
【0135】
以前の画像フレーム及び現在の画像フレームは、アプリケーションを実行するときに特定のシーンに対して生成され得る。したがって、シーンからシーンへのオブジェクトは、数及び場所がほぼ同様であり得る。その場合、ジオメトリ事前テスト及びレンダリングを行うための時間は、画像フレーム列における複数の画像フレーム間でGPUに対して同様である。すなわち、統計値に基づいて、GPU-Bが現在の画像フレームにおいてジオメトリテスト及びレンダリングを行うときにもアイドルタイムを有すると推定することは妥当である。したがって、GPU-Bに、現在フレームにおいてジオメトリ事前テストのためのジオメトリのピースをより多く割り当ててもよい。たとえば、GPU-Bにジオメトリ事前テストの間にジオメトリのピースをより多く処理させる結果、GPU-Bは、現在の画像フレームにおいてオブジェクトをレンダリングした後、他のGPUとほぼ同じ時間に終了する。すなわち、GPU-A、GPU-B、GPU-C、及びGPU-Dはそれぞれ、現在の画像フレームの対応するフレーム周期のほぼ終了711までレンダリングを実行する。一実施形態では、現在の画像フレームをレンダリングする合計時間が短くなり、レンダリング統計値を用いたときに現在の画像フレームをレンダリングする時間がより短くなる。したがって、以前のフレーム及び/または以前のフレーム(複数)のレンダリングに対する統計値を用いて、ジオメトリ事前テスト(たとえば、現在の画像フレームにおいてGPU間でのジオメトリ(たとえば、ジオメトリのピース)の割り当ての分配)を調整してもよい。
【0136】
図11Bは、本開示の一実施形態により、グラフィックス処理を行うための方法を例示するフロー図1100Bであり、複数のGPUによる以前の画像フレームのジオメトリの事前テスト及びレンダリングと、レンダリング中に収集した統計値を用いて、現在の画像フレームのジオメトリの事前テストを現在の画像フレームにおける複数のGPUに割り当てることに影響を与えることと、を含む。図11Aの図は、フロー図1100Bの方法において統計値を用いて、画像フレームに対するGPU間でのジオメトリ(たとえば、ジオメトリのピース)の割り当ての分配を決定することを例示する。前述したように、種々のアーキテクチャには、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ内において、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むものなど)内においてである。
【0137】
詳細には、1110において、本方法は、前述したように、複数のGPUを用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。1120において、本方法は、グラフィックスのジオメトリをレンダリングするためのレスポンシビリティを、複数のスクリーン領域に基づいて複数のGPU間で分割することを含む。各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。より具体的には、前述したように、GPUはそれぞれ、複数のスクリーン領域のうちの対応する組のスクリーン領域内のジオメトリをレンダリングすることにレスポンシビリティを有している。対応する組のスクリーン領域には、1つ以上のスクリーン領域が含まれる。一実施形態では、スクリーン領域はインターリーブされる(たとえば、ディスプレイが、ジオメトリ事前テスト及びレンダリングのためにスクリーン領域の組に分割されるときに)。
【0138】
1130において、本方法は、アプリケーションによって生成された以前の画像フレームの複数のGPUにおいてジオメトリの第1の複数のピースをレンダリングすることを含む。たとえば、タイミング図1100Aは、以前の画像フレームにおけるジオメトリのピースのジオメトリテスト及びオブジェクト(たとえば、ジオメトリのピース)のレンダリングを行うタイミングを例示する。1140において、本方法は、以前の画像フレームのレンダリングに対する統計値を生成することを含む。すなわち、以前の画像フレームをレンダリングするときに統計値を収集してもよい。
【0139】
1150において、本方法は、統計値に基づいて、アプリケーションによって生成された現在の画像フレームのジオメトリの第2の複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。すなわち、これらの統計値を用いて、ジオメトリテストに対するジオメトリのピースを、次のまたは現在の画像フレームをレンダリングするときに特定のGPUに、同じで、より少なく、またはより多く割り当ててもよい。ある場合には、ジオメトリテストを行うときに、ジオメトリの第2の複数のピース内のピースを複数のGPUに均一に割り当てなければならないことを、統計値は示すことがある。
【0140】
別の場合では、ジオメトリテストを行うときに、ジオメトリの第2の複数のピース内のピースを複数のGPUに不均一に割り当てなければならないことを、統計値は示すことがある。たとえば、時間軸1100Aに示すように、以前の画像フレームにおいてGPU-Bが他のGPUのいずれかよりも前にレンダリングを終了すると統計値は示すことがある。詳細には、第2のGPU(たとえば、GPU-A)がジオメトリの第1の複数のピース(たとえば、ジオメトリのピースのその一部)のレンダリングを終了する前に、第1のGPU(たとえば、GPU-B)がジオメトリの第1の複数のピースのレンダリングを終了したと判定される場合があり得る。前述したように、第1のGPU(たとえば、GPU-B)は、オブジェクトレンダリングのために第1のGPUに割り当てられた任意のスクリーン領域とオーバーラップするジオメトリの第1の複数のピースのうちの1つ以上のピースをレンダリングし、第2のGPU(たとえば、GPU-A)は、オブジェクトレンダリングのために第2のGPUに割り当てられた任意のスクリーン領域とオーバーラップするジオメトリの第1の複数のピースのうちの1つ以上のピースをレンダリングする。したがって、統計値に基づいて、第1のGPU(たとえば、GPU-B)がジオメトリの第2の複数のピースのレンダリングのために必要とする時間は、第2のGPU(たとえば、GPU-A)よりも短いと予想されるため、現在の画像フレームをレンダリングするときにジオメトリ事前テストのために第1のGPUにジオメトリのピースをより多く割り当ててもよい。たとえば、ジオメトリの第1の数の第2の複数のピースを、ジオメトリテストのために第1のGPU(たとえば、GPU-B)に割り当ててもよく、ジオメトリの第2の数の第2の複数のピースを、ジオメトリテストのために第2のGPU(たとえば、GPU-A)に割り当ててもよい。第1の数は第2の数よりも大きい(時間アンバランスが十分に大きい場合には、GPU-Aにピースを全く割り当てなくてよい)。このように、ジオメトリテストの間にGPU-Bが処理するジオメトリのピースはGPU-Aよりも多い。たとえば、タイミング図1100Bは、GPU-Bは、ジオメトリのピースがより多く割り当てられていて、ジオメトリテストの実行に他のGPUよりも長い時間を費やすことを示している。
【0141】
1160において、本方法は、現在の画像フレームにおいてジオメトリの第2の複数のピースに対してジオメトリ事前テストを行って、ジオメトリの第2の複数のピースの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。ジオメトリ事前テストを、割り当てに基づいて複数のGPUのそれぞれにおいて行う。ジオメトリ事前テストを、事前テストGPにおいて、アプリケーションによって生成された画像フレームのジオメトリの複数のピースに対して行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成する。
【0142】
1170において、本方法は、ジオメトリの第2の複数のピースのそれぞれに対して生成された情報を用いて、レンダリングフェーズの間にジオメトリの複数のピースをレンダリングすることを含む(たとえば、対応するGPUにおいて、ジオメトリのピースを完全にレンダリングすること、またはジオメトリのそのピースのレンダリングをスキップすることを含む)。レンダリングは通常、実施形態において、各GPUにおいて同時に行われる。詳細には、現在の画像フレームのジオメトリの複数のピースは、ジオメトリの各ピースに対して生成された情報を用いて、複数のGPUのそれぞれにおいてレンダリングされる。
【0143】
他の実施形態では、情報を生成するためにGPUにジオメトリのピースを分配することは、動的に調整される。すなわち、ジオメトリ事前テストを行うために現在の画像フレームに対してジオメトリのピースを割り当てることは、現在の画像フレームのレンダリングの間に動的に調整してもよい。たとえば、タイミング図1100Bの例では、GPU-Aがジオメトリのその割り当てられたピースのジオメトリ事前テストを、予想よりも遅いレートで行っていたと判定され得る。したがって、ジオメトリ事前テストのためにGPU-Aに割り当てられたジオメトリのピースをその場で再割り当てすることができ(たとえば、ジオメトリのピースをGPU-AからGPU-Bに再割り当てする)、GPU-Bに今度は、現在の画像フレームをレンダリングするために用いるフレーム周期の間に、ジオメトリのそのピースに対してジオメトリ事前テストを実行することが課される。
【0144】
図12A~12Bに、レンダリングコマンドバッファを処理するための別の方策を例示する。以前に、図7A~7Cに関連してある方策について説明した。ここでは、コマンドバッファが、オブジェクト(たとえば、ジオメトリのピース)に対してジオメトリ事前テストを行うためのコマンド、それに続いてオブジェクト(たとえば、ジオメトリのピース)をレンダリングするためのコマンドを収容する。図12A~12Bに、ジオメトリ事前テスト及びレンダリング方策であって、GPU構成に応じていずれかの動作を行うことができるシェーダーを用いる方策を示す。
【0145】
詳細には、図12Aは、本開示の一実施形態により、コマンドバッファ1200Aの一部を通る2回のパスにおいて画像フレームのジオメトリの事前テスト及びレンダリングの両方を実行するように構成されたシェーダーを用いることを例示する図である。すなわち、コマンドバッファ1200A内のコマンドを実行するために用いるシェーダーを、適切に構成されたときにジオメトリ事前テストを実行するか、または適切に構成されたときにレンダリングを実行するように構成してもよい。
【0146】
図示したように、図12Aに示すコマンドバッファ1200Aの一部を2回実行し、各実行から異なる動作が生じる。第1の実行はジオメトリ事前テストをもたらし、第2の実行はジオメトリのレンダリングをもたらす。これは種々の方法で達成することができる。たとえば、1200Aに示すコマンドバッファの一部を、サブルーチンとして2回、明示的に呼び出すことができる。各呼び出しの前に、異なる状態(たとえば、レジスタ設定またはRAM内の値)が、異なる値に明示的に設定されている。代替的に、1200Aに示すコマンドバッファの一部を暗黙的に2回実行することが、たとえば、特別なコマンドを用いて、その一部の開始及び終了をマークして2回実行し、またコマンドバッファのその一部の第1及び第2の実行に対して異なる構成(たとえば、レジスタ設定)を暗黙的に設定することによって、可能である。コマンドバッファ1200Aの一部におけるコマンド(たとえば、状態を設定するコマンドまたはシェーダーを実行するコマンド)が実行されたときに、GPU状態に基づいて、コマンドの結果は異なる(たとえば、ジオメトリ事前テストを行うこと対レンダリングを行うことになる)。すなわち、コマンドバッファ1200A内のコマンドを、ジオメトリ事前テストまたはレンダリングのために構成してもよい。詳細には、コマンドバッファ1200Aの一部は、レンダリングコマンドバッファ1200Aからのコマンドを実行する1つ以上のGPUの状態を構成するためのコマンドと、状態に応じてジオメトリ事前テストまたはレンダリングのいずれかを実行するシェーダーを実行するためのコマンドとを含む。たとえば、コマンド1210、1212、1214、及び1216はそれぞれ、状態に応じてジオメトリ事前テストまたはレンダリングのいずれかを実行するシェーダーを実行する目的で、1つ以上のGPUの状態を構成するために用いられる。図示したように、コマンド1210は、シェーダー0がコマンド1211を介して実行されてジオメトリ事前テストまたはレンダリングのいずれかを実行し得るように、GPU状態を構成する。またコマンド1212は、シェーダー1がコマンド1213を介して実行されてジオメトリ事前テストまたはレンダリングを実行し得るように、GPU状態を構成する。加えて、コマンド1214は、シェーダー2がコマンド1215を介して実行されてジオメトリ事前テストまたはレンダリングのいずれかを実行し得るように、GPU状態を構成する。最後に、コマンド1216は、シェーダー3がコマンド1217を介して実行されてジオメトリ事前テストまたはレンダリングのいずれかを実行し得るように、GPU状態を構成する。
【0147】
コマンドバッファ1200Aを通る第1の横断1291では、前述したように明示的または黙示的に設定されるGPU状態、ならびにコマンド1210、1212、1214、及び1216によって構成されるGPU状態に基づいて、対応するシェーダーがジオメトリ事前テストを実行する。たとえば、シェーダー0は、オブジェクト0(たとえば、ジオメトリのピース)(たとえば、図7B-1に示すオブジェクトに基づいて)に対してジオメトリ事前テストを実行するように構成され、シェーダー1は、オブジェクト1に対してジオメトリ事前テストを実行するように構成され、シェーダー2は、オブジェクト2に対してジオメトリ事前テストを実行するように構成され、またシェーダー3は、オブジェクト3に対してジオメトリ事前テストを実行するように構成されている。
【0148】
一実施形態では、GPU状態に基づいて、コマンドをスキップするかまたは異なって解釈してもよい。たとえば、状態を設定する特定のコマンド(1210、1212、1214、及び1216の部分)を、前述したように明示的または黙示的に設定されるGPU状態に基づいてスキップしてもよい。たとえば、コマンド1210を介して実行されるシェーダー0を構成するときに、ジオメトリ事前テストのために構成する必要があるGPU状態が、ジオメトリのレンダリングのために構成するときよりも少ない場合、GPU状態の不要な部分の設定をスキップすることが有用であり得る。なぜならば、GPU状態を設定するとオーバーヘッドを持ち得るからである。別の例を示すために、状態(1210、1212、1214、及び1216の一部)を設定する特定のコマンドを、前述したように明示的または黙示的に設定されるGPU状態に基づいて異なって解釈してもよい。たとえば、コマンド1210を介して実行されるシェーダー0が、ジオメトリのレンダリングのために構成される場合とは異なるGPU状態を、ジオメトリの事前テストのために構成する必要がある場合、またはコマンド1210を介して実行されるシェーダー0が、ジオメトリ事前テストとジオメトリのレンダリングとの場合で異なる入力を必要とする場合である。
【0149】
一実施形態では、ジオメトリ事前テストのために構成されたシェーダーは、前述したように、位置及びパラメータキャッシュにスペースを割り当てない。別の実施形態では、単一のシェーダーを用いて事前テストまたはレンダリングのいずれかを実行する。これは種々の方法で行うことができる。たとえば、シェーダーがチェックすることができる外部のハードウェア状態を介して(たとえば、前述したように明示的または黙示的に設定されるように)、またはシェーダーに対する入力を介して(たとえば、コマンドバッファを通る第1及び第2のパスにおいて異なって解釈されるコマンドによって設定されるように)行うことができる。
【0150】
コマンドバッファ1200Aを通る第2の横断1292では、前述したように明示的または黙示的に設定されるGPU状態、ならびにコマンド1210、1212、1214、及び1216によって構成されるGPU状態に基づいて、対応するシェーダーは、対応する画像フレームに対するジオメトリのピースのレンダリングを実行する。たとえば、シェーダー0は、オブジェクト0(たとえば、ジオメトリのピース)のレンダリングを実行するように構成されている(たとえば、図7B-1に示すオブジェクトに基づいて)。また、シェーダー1はオブジェクト1のレンダリングを実行するように構成されており、シェーダー2はオブジェクト2のレンダリングを実行するように構成されており、またシェーダー3はオブジェクト3のレンダリングを実行するように構成されている。
【0151】
図12Bは、本開示の一実施形態により、コマンドバッファの一部を通る2回のパスにおいて同じ組のシェーダーを用いて画像フレームのジオメトリの事前テスト及びレンダリングの両方を行うことを含むグラフィックス処理を行うための方法を例示するフロー図1200Bである。前述したように、種々のアーキテクチャには、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ内において、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むもの)内において等である。
【0152】
詳細には、1210において、本方法は、前述したように、複数のGPUを用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。1220において、本方法は、グラフィックスのジオメトリをレンダリングするためのレスポンシビリティを、複数のスクリーン領域に基づいて複数のGPU間で分割することを含む。各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。より具体的には、前述したように、GPUはそれぞれ、複数のスクリーン領域のうちの対応する組のスクリーン領域内のジオメトリをレンダリングすることにレスポンシビリティを有している。対応する組のスクリーン領域には、1つ以上のスクリーン領域が含まれる。一実施形態では、スクリーン領域はインターリーブされる(たとえば、ディスプレイが、ジオメトリ事前テスト及びレンダリングのためにスクリーン領域の組に分割されるときに)。
【0153】
1230において、本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。詳細には、複数のGPUのそれぞれを、ジオメトリテストを行う目的で、画像フレームに対応付けられるジオメトリの対応部分に割り当てる。前述したように、ジオメトリのピースの割り当てを均一または不均一に分配してもよい。実施形態において、各部分には、ジオメトリの1つ以上のピースが含まれているか、または潜在的にジオメトリのピースが全く含まれていない。
【0154】
1240において、本方法は、1つ以上のシェーダーをジオメトリ事前テストを実行するように構成する第1のGPU状態をロードすることを含む。たとえば、GPU状態に応じて、対応するシェーダーを異なる動作を実行するように構成してもよい。したがって、第1のGPU状態は、対応するシェーダーをジオメトリ事前テストを実行するように構成する。図12Aの例では、これは種々の方法で設定することができる。たとえば、前述したように、1200Aに示したコマンドバッファの一部に外部から状態を明示的または黙示的に設定することによって行う。詳細には、GPU状態を種々の方法で設定してもよい。たとえば、CPUまたはGPUは、ランダムアクセスメモリ(RAM)内に値を設定することができる。GPUはRAM内の値をチェックする。別の例では、状態はGPUの内部である可能性がある。たとえば、コマンドバッファをサブルーチンとして2回呼び出して、内部のGPU状態が2つのサブルーチン呼び出しの間で異なるときである。代替的に、図12Aのコマンド1210を、前述したように、明示的または黙示的に設定される状態に基づいて、異なって解釈するかまたはスキップすることができる。この第1のGPU状態に基づいて、コマンド1211によって実行されるシェーダー0は、ジオメトリ事前テストを実行するように構成されている。
【0155】
1250において、本方法は、複数のGPUにおいてジオメトリの複数のピースに対してジオメトリ事前テストを行って、ジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する情報を生成することを含む。前述したように、ジオメトリ事前テストは、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするか否かを判定してもよい。ジオメトリ事前テストは通常、実施形態において、GPUにより、対応する画像フレームのすべてのジオメトリに対して同時に行われるため、各GPUは、ジオメトリのどのピースをレンダリングするか、ジオメトリのどのピースをスキップするかを知ることができる。これにより、コマンドバッファを通る第1の横断が終了する。シェーダーを、GPU状態に応じて、ジオメトリ事前テスト及び/またはレンダリングのそれぞれを実行するように構成してもよい。
【0156】
1260において、本方法は、1つ以上のシェーダーをレンダリングを実行するように構成する第2のGPU状態をロードすることを含む。前述したように、GPU状態に応じて、対応するシェーダーを異なる動作を実行するように構成してもよい。したがって、第2のGPU状態は、対応するシェーダー(ジオメトリ事前テストを実行するために以前に用いた同じシェーダー)を、レンダリングを実行するように構成する。図12Aの例では、この第2のGPU状態に基づいて、コマンド1211によって実行されるシェーダー0は、レンダリングを実行するように構成されている。
【0157】
1270において、本方法は、複数のGPUのそれぞれにおいて、ジオメトリの複数のピースをレンダリングするときに、ジオメトリの複数のピースのそれぞれに対して生成された情報を用いることを含む(たとえば、対応するGPUにおいてジオメトリのピースを完全にレンダリングすることまたはジオメトリのそのピースのレンダリングをスキップすることを含むために)。前述したように、情報は、ジオメトリのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられた任意のスクリーン領域(たとえば、対応する組における)とオーバーラップするか否かを示すことがある。この情報を、複数のGPUのそれぞれにおいてジオメトリの複数のピースのそれぞれをレンダリングするために用いてもよく、各GPUは、オブジェクトレンダリングのためにその対応するGPUに割り当てられた少なくとも1つのスクリーン(たとえば、対応する組における)とオーバーラップするジオメトリのピースのみを、効率的にレンダリングすることができる。これにより、コマンドバッファを通る第2の横断が終了する。シェーダーを、GPU状態に応じて、ジオメトリ事前テスト及び/またはレンダリングのそれぞれを実行するように構成してもよい。
【0158】
図13A~13Bに、レンダリングコマンドバッファを処理するための別の方策を例示する。以前に、図7A~7Cに関連してある方策について説明した。ここでは、コマンドバッファが、オブジェクト(たとえば、ジオメトリのピース)のジオメトリ事前テストに対するコマンド、それに続いてオブジェクト(たとえば、ジオメトリのピース)をレンダリングするためのコマンドを収容する。また図12A~12Bにおいて、GPU構成に応じていずれかの動作を行うことができるシェーダーを用いる別の方策について説明した。図13A~13Bに、ジオメトリ事前テストまたはレンダリングのいずれかを行うことができるシェーダーを用いるジオメトリテスト及びレンダリング方策を示す。ここでは、本開示の実施形態により、ジオメトリ事前テスト及びレンダリングのプロセスが、ジオメトリの異なる組のピースに対してインターリーブされる。
【0159】
詳細には、図13Aは、ジオメトリ事前テスト及びレンダリングの両方を実行するように構成されたシェーダーを用いることを例示する図である。本開示の一実施形態により、ジオメトリの異なる組のピースに対して行われるジオメトリ事前テスト及びレンダリングは、対応するコマンドバッファ1300Aの別個の部分を用いてインターリーブされる。すなわち、コマンドバッファ1300Aの一部を開始から終了まで実行するのでなくて、ジオメトリ事前テスト及びレンダリングがジオメトリの異なる組のピースに対してインターリーブされるように、コマンドバッファ1300Aを動的に構成して実行する。たとえば、コマンドバッファにおいて、いくつかのシェーダー(たとえば、コマンド1311及び1313を介して実行される)は、ジオメトリの第1の組のピースに対してジオメトリ事前テストを行うように構成されている。ジオメトリテストを行った後で、これらの同じシェーダー(たとえば、コマンド1311及び1313によって実行される)は次に、レンダリングを行うように構成されている。ジオメトリの第1の組のピースに対してレンダリングを行った後で、コマンドバッファ内の他のシェーダー(たとえば、コマンド1315及び1317を介して実行される)は、ジオメトリの第2の組のピースに対してジオメトリ事前テストを行うように構成されている。ジオメトリ事前テストを行った後で、これらの同じシェーダー(たとえば、コマンド1315及び1317を介して実行される)は次に、レンダリングを行うように構成されており、レンダリングはジオメトリの第2の組のピースに対してこれらのコマンドを用いて行われる。この方策の利点は、GPU間のアンバランスに動的に対処することが、たとえば、レンダリングの全体にわたってジオメトリテストの非対称のインターリーブを用いることによって可能となることである。ジオメトリテストの非対称のインターリーブの例は、以前に図10の分配102において導入した。
【0160】
ジオメトリ事前テスト及びレンダリングのインターリーブは動的に行われるため、GPUの構成(たとえば、レジスタ設定またはRAM内の値を介して)は暗黙的に行われる。つまり、GPU構成の態様はコマンドバッファの外部で起こる。たとえば、GPUレジスタを、0(ジオメトリ事前テストを行うべきであることを示す)または1(レンダリングを行うべきであることを示す)に設定してもよい。コマンドバッファのインターリーブの横断及びこのレジスタの設定を、処理されるオブジェクトの数、処理されるプリミティブ、GPU間のアンバランスなどに基づいて、GPUによって制御してもよい。代替的に、RAM内の値を用いることができる。この外部構成(コマンドバッファに外部から設定することを意味する)の結果として、コマンドバッファ1300Aの一部におけるコマンド(たとえば、状態を設定するコマンドまたはシェーダーを実行するコマンド)が実行されたときに、GPU状態に基づいて、コマンドの結果は異なる(たとえば、ジオメトリ事前テストを行うこと対レンダリングを行うことになる)。すなわち、コマンドバッファ1300A内のコマンドを、ジオメトリ事前テスト1391またはレンダリング1392に対して構成してもよい。詳細には、コマンドバッファ1300Aの一部は、レンダリングコマンドバッファ1300Aからのコマンドを実行する1つ以上のGPUの状態を構成するためのコマンドと、状態に応じてジオメトリ事前テストまたはレンダリングのいずれかを実行するシェーダーを実行するためのコマンドとを含む。たとえば、コマンド1310、1312、1314、及び1316はそれぞれ、状態に応じてジオメトリ事前テストまたはレンダリングのいずれかを実行するシェーダーを実行する目的で、GPUの状態を構成するために用いられる。図示したように、コマンドバッファ1310は、シェーダー0がオブジェクト0のジオメトリ事前テストまたはレンダリングのいずれかを行うようにコマンド1311を介して実行され得るように、GPU状態を構成する。また、コマンドバッファ1312は、シェーダー1がオブジェクト1のジオメトリ事前テストまたはレンダリングのいずれかを行うようにコマンド1313を介して実行され得るように、GPU状態を構成する。また、コマンドバッファ1314は、シェーダー2がオブジェクト2のジオメトリ事前テストまたはレンダリングのいずれかを行うようにコマンド1315を介して実行され得るように、GPU状態を構成する。さらに、コマンドバッファ1316は、シェーダー3がオブジェクト3のジオメトリ事前テストまたはレンダリングのいずれかを行うようにコマンド1317を介して実行され得るように、GPU状態を構成する。
【0161】
ジオメトリ事前テスト及びレンダリングを、ジオメトリの異なる組のピースに対してインターリーブしてもよい。例示のみを目的として、コマンドバッファ1300Aを、1番目にオブジェクト0及び1のジオメトリ事前テスト及びレンダリングを実行するように構成してもよく、次にコマンドバッファ1300Aは、2番目にオブジェクト2及び3のジオメトリ事前テスト及びレンダリングを実行するように構成されている。当然のことながら、ジオメトリの異なる数のピースを異なるセクションにおいてインターリーブしてもよい。たとえば、セクション1はコマンドバッファ1300Aを通る第1の横断を示す。前述したように暗黙的に設定されるGPU状態、ならびにコマンド1310及び1312によって構成されるGPU状態に基づいて、対応するシェーダーはジオメトリ事前テストを実行する。たとえば、シェーダー0は、オブジェクト0(たとえば、ジオメトリのピース)(たとえば、図7B-1に示すオブジェクトに基づいて)に対してジオメトリ事前テストを実行するように構成されており、シェーダー1は、オブジェクト1に対してジオメトリ事前テストを実行するように構成されている。セクション2は、コマンドバッファ1300Aを通る第2の横断を示す。前述したように暗黙的に設定されるGPU状態、ならびにコマンド1310及び1312によって構成されるGPU状態に基づいて、対応するシェーダーがレンダリングを実行する。たとえば、シェーダー0は次にオブジェクト0のレンダリングを実行するように構成され、シェーダー1は次にオブジェクト1のレンダリングを実行するように構成されている。
【0162】
図13Aに、ジオメトリの異なる組のピースに対してジオメトリ事前テスト及びレンダリングの実行をインターリーブすることを示す。詳細には、セクション3は、コマンドバッファ1300Aを通る第3の部分的な横断を示す。前述したように暗黙的に設定されるGPU状態、ならびにコマンド1314及び1316によって構成されるGPU状態に基づいて、対応するシェーダーがジオメトリ事前テストを実行する。たとえば、シェーダー2(コマンド1315を介して実行される)は、オブジェクト2(たとえば、ジオメトリのピース)(たとえば図7B-1に示すオブジェクトに基づいて)に対してジオメトリテストを実行し、シェーダー3(コマンド1317を介して実行される)は、オブジェクト3に対してジオメトリテストを実行する。セクション4は、コマンドバッファ1300Aを通る第4の部分的な横断を示す。前述したように暗黙的に設定されるGPU状態、ならびにコマンド1314及び1316によって構成されるGPU状態に基づいて、対応するシェーダーがレンダリングを実行する。たとえば、シェーダー2(コマンド1315を介して実行される)はオブジェクト2のレンダリングを実行し、シェーダー3(コマンド1317を介して実行される)はオブジェクト3のレンダリングを実行する。
【0163】
なお、ハードウェアコンテキストは保持されているか、または記録(あるいはセーブ)及び読み出し(あるいはリストア)がなされることに留意されたい。たとえば、セクション1の終わりにおけるジオメトリ事前テストGPUコンテキストは、ジオメトリ事前テストを行うためにセクション3の始まりにおいて必要である。また、セクション2の終わりにおけるレンダリングGPUコンテキストは、レンダリングを行うためにセクション4の始まりに対して必要である。
【0164】
一実施形態では、GPU状態に基づいて、コマンドをスキップするかまたは異なって解釈してもよい。たとえば、状態を設定する特定のコマンド(1310、1312、1314、及び1316の部分)を、前述したように暗黙的に設定されるGPU状態に基づいてスキップしてもよい。たとえば、コマンド1310を介して実行されるシェーダー0を構成するときに、ジオメトリテストのために構成する必要があるGPU状態が、ジオメトリのレンダリングのために構成するときよりも少ない場合、GPU状態の不要な部分の設定をスキップすることが有用であり得る。なぜならば、GPU状態を設定するとオーバーヘッドを持ち得るからである。別の例を示すために、状態を設定する特定のコマンド(1310、1312、1314、及び1316の部分)を、前述したように暗黙的に設定されるGPU状態に基づいて異なって解釈してもよい。たとえば、コマンド1310を介して実行されるシェーダー0が、ジオメトリのレンダリングのために構成される場合とは異なるGPU状態を、ジオメトリの事前テストのために構成する必要がある場合、またはコマンド1310を介して実行されるシェーダー0が、ジオメトリテストとジオメトリのレンダリングとの場合で異なる入力を必要とする場合である。
【0165】
一実施形態では、ジオメトリ事前テストのために構成されたシェーダーは、前述したように、位置及びパラメータキャッシュにスペースを割り当てない。別の実施形態では、単一のシェーダーを用いて事前テストまたはレンダリングのいずれかを実行する。これは種々の方法で行うことができる。たとえば、シェーダーがチェックすることができる外部のハードウェア状態を介して(たとえば、前述したように暗黙的に設定されるように)、またはシェーダーに対する入力を介して(たとえば、コマンドバッファを通る第1及び第2のパスにおいて異なって解釈されるコマンドによって設定されるように)行うことができる。
【0166】
図13Bは、本開示の一実施形態により、ジオメトリの異なる組のピースに対する画像フレームのジオメトリの事前テスト及びレンダリングを、対応するコマンドバッファの別個の部分を用いてインターリーブすることを含むグラフィックス処理を行うための方法を例示するフロー図である。前述したように、種々のアーキテクチャには、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うことによって複数のGPUが連携して単一画像をレンダリングすることが含まれていてもよい。たとえば、クラウドゲーミングシステムの1つ以上のクラウドゲーミングサーバ内において、またはスタンドアロンシステム(たとえば、パーソナルコンピュータまたはゲーミングコンソールであって、複数のGPUを有するハイエンドグラフィックスカードを含むもの)内において等である。
【0167】
詳細には、1310において、本方法は、前述したように、複数のGPUを用いてアプリケーションに対するグラフィックスをレンダリングすることを含む。1320において、本方法は、グラフィックスのジオメトリをレンダリングするためのレスポンシビリティを、複数のスクリーン領域に基づいて複数のGPUに分割することを含む。各GPUは、複数のGPUに知られたレスポンシビリティの対応するディビジョンを有する。より具体的には、前述したように、GPUはそれぞれ、複数のスクリーン領域のうちの対応する組のスクリーン領域内のジオメトリをレンダリングすることにレスポンシビリティを有している。対応する組のスクリーン領域には、1つ以上のスクリーン領域が含まれる。一実施形態では、スクリーン領域はインターリーブされる(たとえばディスプレイが、ジオメトリ事前テスト及びレンダリングのためにスクリーン領域の組に分割されるときに)。
【0168】
1330において、本方法は、画像フレームのジオメトリの複数のピースを、ジオメトリテストのために複数のGPUに割り当てることを含む。詳細には、複数のGPUのそれぞれを、ジオメトリテストを行う目的で、画像フレームに対応付けられるジオメトリの対応部分に割り当てる。前述したように、ジオメトリのピースの割り当てを均一または不均一に分配してもよい。各部分には、ジオメトリの1つ以上のピースが含まれているか、または潜在的にジオメトリのピースが全く含まれていない。
【0169】
1340において、本方法は、コマンドバッファ内の第1の組のシェーダーを第2の組のシェーダーとインターリーブすることを含む。シェーダーは、ジオメトリ事前テスト及びレンダリングの両方を実行するように構成されている。詳細には、第1の組のシェーダーは、ジオメトリの第1の組のピースに対してジオメトリ事前テスト及びレンダリングを実行するように構成されている。その後、第2の組のシェーダーは、ジオメトリの第2の組のピースに対してジオメトリ事前テスト及びレンダリングを実行するように構成されている。前述したように、ジオメトリ事前テストは、第1の組または第2の組内のジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する対応する情報を生成する。対応する情報を複数のGPUが用いて、第1の組または第2の組内のジオメトリの各ピースをレンダリングする。前述したように、GPU状態を、ジオメトリ事前テストまたはレンダリングのいずれかを実行するために種々の方法で設定してもよい。たとえば、CPUまたはGPUはランダムアクセスメモリ(RAM)内に値を設定することができる。GPUはRAM内の値をチェックする。別の例では、状態はGPUの内部である可能性がある。たとえば、コマンドバッファをサブルーチンとして2回呼び出して、内部のGPU状態が2つのサブルーチン呼び出しの間で異なるときである。
【0170】
インターリーブプロセスについてさらに説明する。詳細には、前述したように、コマンドバッファの第1の組のシェーダーは、ジオメトリの第1の組のピースに対してジオメトリ事前テストを実行するように構成されている。ジオメトリ事前テストを複数のGPUにおいてジオメトリの第1の組のピースに対して行って、第1の組におけるジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する第1の情報を生成する。そして、前述したように、第1の組のシェーダーは、ジオメトリの第1の組のピースのレンダリングを実行するように構成されている。その後、第1の情報は、複数のGPUのそれぞれにおいてジオメトリの複数のピースをレンダリングするときに用いる(たとえば、対応するGPUにおいてジオメトリの第1の組のピースを完全にレンダリングすることまたはジオメトリの第1の組のピースのレンダリングをスキップすることを含むために)。前述したように、情報は、ジオメトリのどのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられたスクリーン領域とオーバーラップするかを示す。たとえば、情報を用いてGPUにおけるジオメトリのピースのレンダリングをスキップすることを、ジオメトリのピースが、オブジェクトレンダリングのためにGPUに割り当てられたどのスクリーン領域(たとえば、対応する組における)ともオーバーラップしないとその情報が示すときに行ってもよい。
【0171】
そして、第2の組のシェーダーを、ジオメトリの第2の組のピースのジオメトリテスト及びレンダリングのために用いる。詳細には、前述したように、コマンドバッファの第2の組のシェーダーは、ジオメトリの第2の組のピースに対してジオメトリ事前テストを実行するように構成されている。そして、ジオメトリテストを複数のGPUにおいてジオメトリの第2の組のピースに対して行って、第2の組におけるジオメトリの各ピースと複数のスクリーン領域のそれぞれに対するその関係とに関する第2の情報を生成する。そして、前述したように、第2の組のシェーダーはジオメトリの第2の組のピースのレンダリングを実行するように構成されている。その後、ジオメトリの第2の組のピースのレンダリングを複数のGPUのそれぞれにおいて第2の情報を用いて行う。前述したように、情報は、ジオメトリのどのピースが、オブジェクトレンダリングのために対応するGPUに割り当てられたスクリーン領域(たとえば、対応する組の)とオーバーラップするかを示す。
【0172】
前述では、複数のGPUがジオメトリをロックステップで処理する(すなわち、複数のGPUがジオメトリ事前テストを実行し、そして複数のGPUがレンダリングを実行する)と説明しているが、いくつかの実施形態では、GPUは互いに明示的に同期してはいない。たとえば、あるGPUがジオメトリの第1の組のピースをレンダリングしている間に、第2のGPUがジオメトリの第2の組のピースに対してジオメトリ事前テストを行っていてもよい。
【0173】
図14に、本開示の種々の実施形態の態様を実行するために使用できるデバイス例1400のコンポーネントを例示する。たとえば、図14では、本開示の実施形態により、画像フレームに対するオブジェクトをレンダリングする前に、スクリーン領域(インターリーブされ得る)に対してジオメトリの事前テストを行うことによって、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うのに適した典型的なハードウェアシステムを例示する。このブロック図で例示するデバイス1400は、パーソナルコンピュータ、サーバコンピュータ、ゲーミングコンソール、モバイルデバイス、または他のデジタルデバイス(それぞれ、本発明の実施形態を実行するのに適している)を組み込むことができるかまたはそれらであることができる。デバイス1400は、ソフトウェアアプリケーション及び随意的にオペレーティングシステムを実行するための中央処理ユニット(CPU)1402を含んでいる。CPU1402は、1つ以上の同種または異種の処理コアから構成され得る。
【0174】
種々の実施形態により、CPU1402は1つ以上の処理コアを有する1つ以上の汎用マイクロプロセッサである。さらなる実施形態を、ゲームの実行中にグラフィックス処理を行うように構成されたアプリケーションの高並列で計算集約型のアプリケーション(たとえば、媒体及びインタラクティブエンターテインメントアプリケーション)に具体的に適応されたマイクロプロセッサアーキテクチャを伴う1つ以上のCPUを用いて実施することができる。
【0175】
メモリ1404は、CPU1402及びGPU1416が用いるアプリケーション及びデータを記憶する。記憶装置1406は、アプリケーション及びデータ用の不揮発性記憶装置及び他のコンピュータ可読媒体であり、固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリ装置、及びCD-ROM、DVD-ROM、ブルーレイ、HD-DVD、または他の光学記憶装置、ならびに信号伝送及び記憶媒体を含んでいてもよい。ユーザ入力デバイス1408は、1人以上のユーザからのユーザ入力をデバイス1400に伝達する。その例としては、キーボード、マウス、ジョイスティック、タッチパッド、タッチスクリーン、スチールまたはビデオレコーダ/カメラ、及び/またはマイクロフォンを挙げてもよい。ネットワークインターフェース1409によって、デバイス1400は、電子通信ネットワークを介して他のコンピュータシステムと通信することができる。ネットワークインターフェース1409としては、ローカルエリアネットワーク及びワイドエリアネットワーク(たとえば、インターネット)を介した有線または無線通信を挙げてもよい。オーディオプロセッサ1412は、CPU1402、メモリ1404、及び/または記憶装置1406が提供する命令及び/またはデータからアナログまたはデジタルオーディオ出力を生成するように適応されている。デバイス1400のコンポーネント(たとえば、CPU1402、グラフィックスサブシステム、たとえば、GPU1416、メモリ1404、データ記憶装置1406、ユーザ入力デバイス1408、ネットワークインターフェース1409、及びオーディオプロセッサ1412)は、1つ以上のデータバス1422を介して接続されている。
【0176】
グラフィックスサブシステム1414がさらに、データバス1422及びデバイス1400のコンポーネントと接続されている。グラフィックスサブシステム1414は、少なくとも1つのグラフィックス処理ユニット(GPU)1416及びグラフィックスメモリ1418を含んでいる。グラフィックスメモリ1418は、出力画像の各ピクセルに対するピクセルデータを記憶するために用いるディスプレイメモリ(たとえば、フレームバッファ)を含んでいる。グラフィックスメモリ1418は、GPU1416と同じデバイスに統合すること、個別のデバイスとしてGPU1416と接続すること、及び/またはメモリ1404内に実装することができる。ピクセルデータをCPU1402から直接グラフィックスメモリ1418に提供することができる。代替的に、CPU1402は、GPU1416に、所望の出力画像を規定するデータ及び/または命令を提供する。所望の出力画像から、GPU1416が1つ以上の出力画像のピクセルデータを生成する。所望の出力画像を規定するデータ及び/または命令を、メモリ1404及び/またはグラフィックスメモリ1418に記憶することができる。一実施形態では、GPU1416は、シーンに対するジオメトリ、照明、シェーディング、模様付け、動き、及び/またはカメラパラメータを規定する命令及びデータから、出力画像用のピクセルデータを生成するための3Dレンダリング能力を含む。GPU1416はさらに、シェーダープログラムを実行することができる1つ以上のプログラマブル実行ユニットを含むことができる。
【0177】
グラフィックスサブシステム1414は、グラフィックスメモリ1418から、ディスプレイデバイス1410に表示すべき、または投影システム(図示せず)によって投影すべき画像用のピクセルデータを定期的に出力する。ディスプレイデバイス1410は、デバイス1400からの信号に応じて視覚情報を表示することができる任意のデバイスとすることができる。たとえば、CRT、LCD、プラズマ、及びOLEDディスプレイである。デバイス1400は、ディスプレイデバイス1410に、たとえば、アナログまたはデジタル信号を提供することができる。
【0178】
グラフィックスサブシステム1414を最適化するための他の実施形態には、画像フレームに対するオブジェクトをレンダリングする前にスクリーン領域(インターリーブされ得る)に対してジオメトリを事前テストすることによって、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うことを、含むことができる。グラフィックスサブシステム1414を、1つ以上の処理デバイスとして構成することができる。
【0179】
たとえば、一実施形態では、グラフィックスサブシステム1414を、アプリケーションに対するジオメトリのマルチGPUレンダリングを行うように構成してもよい。複数のグラフィックスサブシステムが、グラフィックスを実行していることができ、及び/または単一アプリケーションに対するパイプラインをレンダリングしていることができる。すなわち、グラフィックスサブシステム1414は、アプリケーションを実行するときに画像または画像列の1つ以上の各画像をレンダリングするために用いる複数のGPUを含んでいる。
【0180】
他の実施形態では、グラフィックスサブシステム1414は複数の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をそれぞれ、ビデオフレームに対応するシーンの異なるオブジェクト及び/または一部分に割り当てることができる。前述の実施形態及び実施態様では、これらの動作を同じフレーム周期(同時に並列)でまたは異なるフレーム周期(順次に並列)で行うことができる。
【0181】
したがって、本開示では、アプリケーションを実行するときに画像フレームまたは画像フレーム列における1つ以上の各画像フレームに対するオブジェクトのレンダリングを行う前にスクリーン領域(インターリーブされ得る)に対してジオメトリを事前テストすることによって、アプリケーションに対するジオメトリのマルチGPUレンダリングするように構成された方法及びシステムについて説明している。
【0182】
当然のことながら、本明細書で規定した種々の実施形態を、本明細書で開示した種々の特徴を用いて具体的な実施に結合するかまたは組み立ててもよい。したがって、提供した例は単にいくつかの可能な例であり、種々の要素を結合してさらに多くの実施態様を規定することによって可能な種々の実施態様に限定されない。いくつかの例では、開示した実施態様または同等な実施態様の趣旨から逸脱することなく、いくつかの実施態様にはさらに少ない要素が含まれていてもよい。
【0183】
本開示の実施形態は、種々のコンピュータシステム構成(たとえば、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラマブル民生用エレクトロニクス、ミニコンピュータ、メインフレームコンピュータなど)によって実行してもよい。また本開示の実施形態は、分散コンピューティング環境において実行することもできる。ここでは、タスクが、有線ベースまたは無線ネットワークを通してリンクされたリモート処理デバイスによって行われる。
【0184】
前述の実施形態を念頭において、当然のことながら、本開示の実施形態は、コンピュータシステムに記憶されたデータを伴う種々のコンピュータ実装動作を用いることができる。これらの動作は、物理量の物理的な操作を必要とするものである。本開示の実施形態の一部分を構成する本明細書で説明した動作のいずれも、有用なマシン動作である。また本開示の実施形態は、これらの動作を行うためのデバイスまたは装置に関する。装置は必要な目的に対して特別に構成することもできるし、または装置を、コンピュータに記憶されたコンピュータプログラムによって選択的に作動または構成される汎用コンピュータとすることもできる。詳細には、種々の汎用マシンを本明細書の教示により書き込まれたコンピュータプログラムによって用いることもできるし、または必要な動作を実行するために、さらに特化された装置を構成することがより好都合であり得る。
【0185】
また本開示を、コンピュータ可読媒体上のコンピュータ可読コードとして具体化することができる。コンピュータ可読媒体は、データを記憶することができる任意のデータ記憶装置とすることができる。データはその後にコンピュータシステムによって読み出すことができる。コンピュータ可読媒体の例としては、ハードドライブ、ネットワーク接続ストレージ(NAS)、読み出し専用メモリ、ランダムアクセスメモリ、CD-ROM、CD-R、CD-RW、磁気テープ、ならびに他の光学及び非光学データ記憶装置が挙げられる。コンピュータ可読媒体としては、コンピュータ可読コードが分散的に記憶及び実行されるようにネットワーク結合コンピュータシステム上に分散されたコンピュータ可読有形的表現媒体を挙げることができる。
【0186】
本方法の動作を特定の順序で説明したが、当然のことながら、動作の合間に他のハウスキーピング動作を行ってもよいし、または動作を調整してわずかに異なる時間に行われるようにしてもよいし、またはオーバーレイ動作の処理が所望の方法で行われる限り、処理動作を処理に対応付けられる種々の間隔で可能にするシステムにおいて分散させるようにしてもよい。
【0187】
前述の開示内容は、理解を明瞭にするために少し詳しく説明しているが、添付の特許請求の範囲内で特定の変形及び変更を実施できることが明らかである。したがって、本実施形態は例示的であって限定的ではないと考えるべきであり、本開示の実施形態は、本明細書で示した詳細に限定してはならないが、添付の特許請求の範囲及び均等物内で変更してもよい。
図1
図2
図3
図4
図5
図6A
図6B
図7A
図7B-1】
図7B-2】
図7C
図8A
図8B
図9
図10
図11A
図11B
図12A
図12B
図13A
図13B
図14