(57)【要約】  本開示は、画像をレンダリングするために適用されるべきフォビエーションの量を決定するための例を記述する。例示的な技法は、適用されるべきフォビエーションの量を決定するために、グラフィックス処理ユニット(GPU)の性能を示す情報を使用してもよい。GPUは、決定されたフォビエーションの量に基づいて画像をレンダリングしてもよい。
2019528514.tif 000002
【特許請求の範囲】
【請求項１】
データを処理する方法であって、
グラフィックス処理ユニット(GPU)の性能を示す情報を受信するステップと、
前記受信された情報に基づいて、適用すべきフォビエーションの量を決定するステップと、
前記決定された適用すべきフォビエーションの量に基づいて、前記GPUが画像をレンダリングするために、前記決定された適用すべきフォビエーションの量の情報を出力するステップと
を含む、方法。
【請求項２】
適用されるべきフォビエーションの量を示す情報を受信するステップ
をさらに含み、前記適用すべきフォビエーションの量を決定するステップが、適用されるべき前記フォビエーションの量を調整するステップを含む、
請求項1に記載の方法。
【請求項３】
前記GPUの前記性能を示す情報を受信するステップが、消費電力、帯域幅使用率、GPUコア使用率、および温度のうちの1つまたは複数を示す情報を受信するステップを含み、
前記方法が、
前記消費電力、前記帯域幅使用率、前記GPUコア使用率、および前記温度のうちの1つまたは複数に基づいて、GPU性能値を決定するステップと、
前記GPU性能値をGPU性能しきい値と比較するステップと
をさらに含み、前記適用すべきフォビエーションの量を決定するステップが、前記比較に基づいて前記適用すべきフォビエーションの量を決定するステップを含む、
請求項1に記載の方法。
【請求項４】
前記比較に基づいて前記適用すべきフォビエーションの量を決定するステップが、前記GPU性能値が前記GPU性能しきい値以下になるまで、適用されるフォビエーションの量を繰り返し増加させるステップを含む、請求項3に記載の方法。
【請求項５】
前記GPUの前記性能を示す情報を受信するステップが、前記GPUの前記性能を示す第1の値と、前記GPUの前記性能を示す第2の値とを受信するステップを含み、
前記方法が、
第1の重み付き係数を生成するために、前記第1の値を第1の加重係数で重み付けするステップと、
第2の重み付き係数を生成するために、前記第2の値を第2の異なる加重係数で重み付けするステップと
をさらに含み、前記適用すべきフォビエーションの量を決定するステップが、前記第1の重み付き係数および前記第2の重み付き係数に少なくとも部分的に基づいて、前記適用すべきフォビエーションの量を決定するステップを含む、
請求項1に記載の方法。
【請求項６】
前記GPUの前記性能を示す情報を受信するステップが、温度、消費電力、帯域幅使用率、GPUコア使用率、ならびに選択およびグラフィックスアプリケーションプログラミングインターフェース(API)使用量のうちの1つまたは複数を受信するステップを含み、
前記適用すべきフォビエーションの量を決定するステップが、前記温度、前記消費電力、前記帯域幅使用率、前記GPUコア使用率、ならびに前記選択およびグラフィックスAPI使用量のうちの1つまたは複数に基づいて、前記適用すべきフォビエーションの量を決定するステップを含む、
請求項1に記載の方法。
【請求項７】
前記受信された情報に基づいて、前記適用すべきフォビエーションの量を決定するステップが、前記画像の前記レンダリング中に前記適用すべきフォビエーションの量を決定するステップを含み、前記決定された適用すべきフォビエーションの量に基づいて、前記GPUに前記画像をレンダリングさせるステップが、前記画像の前記レンダリング中に前記適用すべきフォビエーションの量を更新するステップを含む、請求項1に記載の方法。
【請求項８】
前記画像が、バーチャルリアリティ(VR)アプリケーションのためのものである、請求項1に記載の方法。
【請求項９】
データを処理するためのデバイスであって、
グラフィックス処理ユニット(GPU)と、
前記GPUの性能を示す情報を受信するように構成される性能推定回路と、
フォビエーションゲート回路であって、
前記受信された情報に基づいて、適用すべきフォビエーションの量を決定し、
前記決定された適用すべきフォビエーションの量に基づいて、前記GPUが画像をレンダリングするために、前記決定された適用すべきフォビエーションの量の情報を出力する
ように構成されるフォビエーションゲート回路と
を備える、デバイス。
【請求項１０】
前記フォビエーションゲート回路が、適用されるべきフォビエーションの量を示す情報を受信するように構成され、前記適用すべきフォビエーションの量を決定するために、前記フォビエーション回路が、適用されるべき前記フォビエーションの量を調整するように構成される、請求項9に記載のデバイス。
【請求項１１】
前記GPUの前記性能を示す情報を受信するために、前記性能推定回路が、消費電力、帯域幅使用率、GPUコア使用率、および温度のうちの1つまたは複数を示す情報を受信するように構成され、
前記性能推定回路が、
前記消費電力、前記帯域幅使用率、前記GPUコア使用率、および前記温度のうちの1つまたは複数に基づいてGPU性能値を決定し、
前記GPU性能値をGPU性能しきい値と比較する
ように構成され、
前記適用すべきフォビエーションの量を決定するために、前記フォビエーションゲート回路が、前記比較に基づいて前記適用すべきフォビエーションの量を決定するように構成される、
請求項9に記載のデバイス。
【請求項１２】
前記比較に基づいて前記適用すべきフォビエーションの量を決定するために、前記フォビエーションゲート回路が、前記GPU性能値が前記GPU性能しきい値以下になるまで、適用されるフォビエーションの量を繰り返し増加させるように構成される、請求項11に記載のデバイス。
【請求項１３】
前記GPUの前記性能を示す情報を受信するために、前記性能推定回路が、前記GPUの前記性能を示す第1の値と、前記GPUの前記性能を示す第2の値とを受信するように構成され、
前記性能推定回路が、
第1の重み付き係数を生成するために、前記第1の値を第1の加重係数で重み付けし、
第2の重み付き係数を生成するために、前記第2の値を第2の異なる加重係数で重み付けする
ように構成され、
前記適用すべきフォビエーションの量を決定するために、前記フォビエーションゲート回路が、前記第1の重み付き係数および前記第2の重み付き係数に少なくとも部分的に基づいて、前記適用すべきフォビエーションの量を決定するように構成される、
請求項9に記載のデバイス。
【請求項１４】
前記GPUの前記性能を示す情報を受信するために、前記性能推定回路が、温度、消費電力、帯域幅使用率、GPUコア使用率、ならびに選択およびグラフィックスアプリケーションプログラミングインターフェース(API)使用量のうちの1つまたは複数を受信するように構成され、
前記適用すべきフォビエーションの量を決定するために、前記フォビエーションゲート回路が、前記温度、前記消費電力、前記帯域幅使用率、前記GPUコア使用率、ならびに前記選択およびグラフィックスAPI使用量のうちの1つまたは複数に基づいて、前記適用すべきフォビエーションの量を決定するように構成される、
請求項9に記載のデバイス。
【請求項１５】
前記受信された情報に基づいて前記適用すべきフォビエーションの量を決定するために、前記フォビエーションゲート回路が、前記画像の前記レンダリング中に、前記適用すべきフォビエーションの量を決定するように構成される、請求項9に記載のデバイス。
【請求項１６】
前記画像が、バーチャルリアリティ(VR)アプリケーションのためのものである、請求項9に記載のデバイス。
【請求項１７】
データを処理するためのデバイスであって、
グラフィックス処理ユニット(GPU)の性能を示す情報を受信するための手段と、
前記受信された情報に基づいて、適用すべきフォビエーションの量を決定するための手段と、
前記決定された適用すべきフォビエーションの量に基づいて、前記GPUが画像をレンダリングするために、前記決定された適用すべきフォビエーションの量の情報を出力するための手段と
を備える、デバイス。
【請求項１８】
適用されるべきフォビエーションの量を示す情報を受信するための手段をさらに含み、
前記適用すべきフォビエーションの量を前記決定するための手段が、適用されるべき前記フォビエーションの量を調整するための手段を備える、
請求項17に記載のデバイス。
【請求項１９】
前記GPUの前記性能を示す情報を前記受信するための手段が、消費電力、帯域幅使用率、GPUコア使用率、および温度のうちの1つまたは複数を示す情報を受信するための手段を備え、
前記デバイスが、
前記消費電力、前記帯域幅使用率、前記GPUコア使用率、および前記温度のうちの1つまたは複数に基づいて、GPU性能値を決定するための手段と、
前記GPU性能値をGPU性能しきい値と比較するための手段と
をさらに備え、
前記適用すべきフォビエーションの量を前記決定するための手段が、前記比較に基づいて前記適用すべきフォビエーションの量を決定するための手段を備える、
請求項17に記載のデバイス。
【請求項２０】
前記比較に基づいて前記適用すべきフォビエーションの量を前記決定するための手段が、前記GPU性能値が前記GPU性能しきい値以下になるまで、適用されるフォビエーションの量を繰り返し増加させるための手段を備える、請求項19に記載のデバイス。
【請求項２１】
命令を含むコンピュータ可読記憶媒体であって、前記命令が、実行されると、データを処理するためのデバイスの1つまたは複数のプロセッサに、
グラフィックス処理ユニット(GPU)の性能を示す情報を受信させ、
前記受信された情報に基づいて、適用すべきフォビエーションの量を決定させ、
前記決定された適用すべきフォビエーションの量に基づいて、前記GPUが画像をレンダリングするために、前記決定された適用すべきフォビエーションの量の情報をGPUへ出力させる、
コンピュータ可読記憶媒体。
【請求項２２】
前記1つまたは複数のプロセッサに、
適用されるべきフォビエーションの量を示す情報を受信させる
命令をさらに備え、
前記1つまたは複数のプロセッサに、前記適用すべきフォビエーションの量を決定させる前記命令が、前記1つまたは複数のプロセッサに、適用されるべき前記フォビエーションの量を調整させる命令を備える、
請求項21に記載のコンピュータ可読記憶媒体。
【請求項２３】
前記1つまたは複数のプロセッサに、前記GPUの前記性能を示す情報を受信させる前記命令が、前記1つまたは複数のプロセッサに、消費電力、帯域幅使用率、GPUコア使用率、および温度のうちの1つまたは複数を示す情報を受信させる命令を備え、
前記命令が、前記1つまたは複数のプロセッサに、
前記消費電力、前記帯域幅使用率、前記GPUコア使用率、および前記温度のうちの1つまたは複数に基づいて、GPU性能値を決定させ、
前記GPU性能値をGPU性能しきい値と比較させる
命令をさらに備え、
前記1つまたは複数のプロセッサに、前記適用すべきフォビエーションの量を決定させる前記命令が、前記1つまたは複数のプロセッサに、前記比較に基づいて前記適用すべきフォビエーションの量を決定させる命令を備える、
請求項21に記載のコンピュータ可読記憶媒体。
【請求項２４】
前記1つまたは複数のプロセッサに、前記比較に基づいて前記適用すべきフォビエーションの量を決定させる命令が、前記GPU性能値が前記GPU性能しきい値以下になるまで、前記1つまたは複数のプロセッサに、適用されるフォビエーションの量を繰り返し増加させる命令を備える、請求項23に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィックス処理に関する。
【背景技術】
【０００２】
コンピューティングデバイスは多くの場合、表示のためのグラフィックスデータのレンダリングを加速させるためにグラフィックス処理ユニット(GPU)を利用する。そのようなコンピューティングデバイスとしては、たとえばコンピュータワークステーション、いわゆるスマートフォンなどのモバイルフォン、組み込みシステム、パーソナルコンピュータ、タブレットコンピュータ、およびビデオゲームコンソールを含んでもよい。GPUは通常、グラフィックス処理コマンドを実行するために一緒に動作する複数の処理段階を含むグラフィックス処理パイプラインを実行する。ホスト中央処理装置(CPU)は、GPUに対して1つまたは複数のグラフィックス処理コマンドを発することによって、GPUの動作を制御してもよい。現代のCPUは、通常複数のアプリケーションを同時に実行することができ、その各々は、実行中にGPUを利用する必要がある場合がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
本開示は、レンダリング中にグラフィックス処理ユニット(GPU)によって適用されるフォビエーション(FOVEATION)の量を動的に制御することを対象とする。GPUが適用するフォビエーションの量は、GPUが消費する電力の量に影響する。いくつかの例では、GPUは、中央処理装置(CPU)またはGPU自体が、適用されるフォビエーションの量を制御するために使用する性能測定値を出力する。本開示は、GPUの性能を特定の範囲内に維持するために適用されるフォビエーションを調整するためのフィードバックとして、性能測定値を使用することを記載する。
【０００４】
一例では、本開示は、データを処理する方法について記載しており、本方法は、グラフィックス処理ユニット(GPU)の性能を示す情報を受信するステップと、受信された情報に基づいて、適用すべきフォビエーションの量を決定するステップと、決定された適用すべきフォビエーションの量に基づいて、GPUが画像をレンダリングするために、決定された適用すべきフォビエーションの量の情報をGPUに出力するステップとを含む。
【０００５】
一例では、本開示は、データを処理するためのデバイスについて記載しており、本デバイスは、グラフィックス処理ユニット(GPU)と、GPUの性能を示す情報を受信するように構成される性能推定回路と、受信された情報に基づいて、適用すべきフォビエーションの量を決定し、決定されたフォビエーションの量に基づいて、GPUが画像をレンダリングするために、決定された適用すべきフォビエーションの量の情報をGPUに出力するように構成されるフォビエーションゲート回路とを備える。
【０００６】
一例では、本開示は、データを処理するためのデバイスについて記載しており、本デバイスは、グラフィックス処理ユニット(GPU)の性能を示す情報を受信するための手段と、受信された情報に基づいて、適用すべきフォビエーションの量を決定するための手段と、決定された適用すべきフォビエーションの量に基づいて、GPUが画像をレンダリングするために、決定された適用すべきフォビエーションの量の情報をGPUに出力するための手段とを備える。
【０００７】
一例では、本開示は、命令を記憶したコンピュータ可読記憶媒体について記載しており、命令は、実行されると、データを処理するためのデバイスの1つまたは複数のプロセッサに、グラフィックス処理ユニット(GPU)の性能を示す情報を受信させ、受信された情報に基づいて、適用すべきフォビエーションの量を決定させ、決定された適用すべきフォビエーションの量に基づいて、GPUが画像をレンダリングするために、決定された適用すべきフォビエーションの量の情報をGPUへ出力させる。
【０００８】
本開示の1つまたは複数の例の詳細が、添付図面および以下の説明に記載される。本開示の他の特徴、目的、および利点は、説明および図面から、また特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】本開示の技法を実装するために使用されてもよい例示的なコンピューティングデバイスを示すブロック図である。
【図２】図1のコンピューティングデバイスのCPU、GPU、およびメモリをさらに詳細に示すブロック図である。
【図３】本開示で説明する1つまたは複数の例示的な技法による例示的なプロセスフローを示す概念図である。
【図４】データを処理する例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
グラフィックス処理ユニット(GPU)は、システムの熱需要に合うように消費電力をスケールバックする方法を考慮して設計される。電力をスケールバックする1つの方法は、GPUがクロックレートを低下させ、グラフィックスデータをより遅く処理するサーマルスロットリングである。しかしながら、クロックレートの低下は、フレームレートを低下させ、場合によっては、フレームジッタ(たとえば、コンテンツ内のマイクロスタッター)を引き起こす。バーチャルリアリティ(VR)設定では、フレームレートおよびフレームジッタが低いと、乗り物酔い、および視聴者エクスペリエンスに悪影響を及ぼす他の望ましくない影響が生じる可能性がある。
【００１１】
クロック周波数および電圧制御の使用に加えて、またはその代わりに、本開示で説明する技法は、GPUの電力消散を制御するために画像に適用されるフォビエーションのゲーティングを含む。フォビエーションは、視聴者が視聴していない画像の部分をぼかす方法である。いくつかの場合には、GPUは、画像の他の部分をぼかすことによって、画像の特定の部分に視聴者を誘導するために、フォビエーションを適用する。他の場合には、目の動きを追跡し、視聴者が視聴している画像内の位置を決定することによって、GPUは、画像の他の部分をぼかすためにフォビエーションを適用してもよい。
【００１２】
フォビエーションは、GPUが画像のレンダリングに費やす電力量を低減する可能性がある。たとえば、ぼかしを引き起こす1つの方法は、他の部分と比較していくつかの部分で解像度を低減することである。低減された解像度部分では、処理されている各フラグメントのサイズが比較的大きく、これは、解像度がより低い部分には、解像度がより高い部分よりもフラグメントが少ないことを意味する。フラグメントが少ないので、フラグメントシェーダが実行されるインスタンスの数が減少し、結果として消費電力が低減する。
【００１３】
本開示で説明する例示的な技法では、ホストプロセッサ上で実行されるアプリケーションは、GPUが実行すべきレンダリングコマンド、および(たとえば、どの程度ぼかすか、どのくらいの大きさのエリアをぼかすかによって)フォビエーションの品質を示す情報を生成する。ホストプロセッサ上で実行されるグラフィックスドライバは、グラフィックス処理のためにフォビエーションの品質を示す情報をGPUに送信するように構成されてもよい。
【００１４】
しかしながら、本開示で説明した技法では、グラフィックスドライバは、GPUが消費する必要のある電力量を低減するために、フォビエーション品質情報を修正してもよい。たとえば、フォビエーションコントローラ(たとえば、ハードウェアまたはソフトウェアユニット)は、データを処理する際にGPUがどの程度忙しいかを示すカウンタ、システムの温度、実際の電力測定値、および他のそのような情報などの情報を性能測定ユニットから受信する。性能情報から、フォビエーションコントローラは、電力使用量の推定値を決定し、電力使用量の推定値を所望の電力使用量と比較する。次いで、フォビエーションコントローラは、電力を低減するためにGPUが適用すべきぼかしの量を増加させる、またはGPUが適用すべきぼかしの量を低減させる、または十分な電力バジェットがある場合は変更しないようにグラフィックスドライバに命令する。
【００１５】
ぼかしを適用する様々な方法があってもよい。たとえば、ぼかしを適用する1つの方法は、画面の対応する領域を埋めるために、より低いサンプリング解像度から領域をアップサンプリングすることである。この場合、アップサンプリングされた画像は、ぼやけて見える他の部分と比較してよりクリアに見える。言い換えれば、最終画像上でこのアップサンプリングを行った結果は、画像の周辺にぼかしを適用することと非常によく似ている。
【００１６】
図1は、本開示の技法を実装するために使用されてもよい例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはコンソール、ワイヤレス通信デバイス(たとえば、モバイル電話、セルラー電話、衛星電話、および/もしくは携帯電話ハンドセットなど)、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、またはグラフィカルデータを処理および/もしくは表示する任意の他のタイプのデバイスを備えてもよい。
【００１７】
図1の例に示すように、コンピューティングデバイス2は、ユーザ入力インターフェース4、CPU6、メモリコントローラ8、システムメモリ10、グラフィックス処理ユニット(GPU)12、GPU12のローカルメモリ14、ディスプレイインターフェース16、ディスプレイ18、およびバス20を含む。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12およびディスプレイインターフェース16は、バス20を使用して互いと通信してもよい。バス20は、第3世代バス(たとえば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(たとえば、アドバンストグラフィックスポートバス、周辺構成要素相互接続(PCI)エクスプレスバス、またはAdvanced eXentisibleインターフェース(AXI)バス)、または別のタイプのバスもしくはデバイス相互接続などの様々なバス構造のいずれかであってもよい。図1に示す異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、同じまたは異なる構成要素を有するコンピューティングデバイスおよび/または他のグラフィックス処理システムの他の構成が本開示の技法を実装するために使用されてもよいことに留意されたい。
【００１８】
CPU6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを備えてもよい。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるために、入力をコンピューティングデバイス2に与えてもよい。CPU6上で実行するソフトウェアアプリケーションは、たとえばオペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含んでもよい。ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合されるキーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、入力をコンピューティングデバイス2に与えてもよい。
【００１９】
CPU6上で実行するソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを引き起こすようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含んでもよい。いくつかの例では、ソフトウェア命令は、たとえばオープングラフィックスライブラリ(OpenGL(登録商標))API、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、または任意の他の公的もしくはプロプライエタリ規格グラフィックスAPIなどのグラフィックスアプリケーションプログラミングインターフェース(API)に準拠してもよい。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実行させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に発行する場合がある。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブ、たとえば点、線、三角形、四角形、三角形ストリップなどのリストを含んでもよい。
【００２０】
メモリコントローラ8は、システムメモリ10を出入りするデータの転送を容易にする。たとえば、メモリコントローラ8は、コンピューティングデバイス2の中の構成要素にメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信してもよく、メモリ10に対してそのようなコマンドをサービスしてもよい。メモリコントローラ8は、システムメモリ10に通信可能に結合されている。メモリコントローラ8は、CPU6とシステムメモリ10の両方とは別個の処理モジュールであるものとして、図1の例示的なコンピューティングデバイス2に示されるが、他の例では、メモリコントローラ8の機能性の一部または全部が、CPU6およびシステムメモリ10のうちの一方または両方において実施されてもよい。
【００２１】
システムメモリ10は、CPU6が実行するためにアクセス可能なプログラムモジュールおよび/または命令ならびに/あるいはCPU6上で実行されるプログラムが使用するためのデータを記憶してもよい。たとえば、システムメモリ10は、ユーザアプリケーション、およびアプリケーションに関連するグラフィックスデータを記憶してもよい。システムメモリ10はさらに、コンピューティングデバイス2の他の構成要素が使用するための、および/またはそれらの構成要素によって生成される情報を記憶してもよい。たとえば、システムメモリ10は、GPU12用のデバイスメモリとして働いてもよく、GPU12による操作を受けるべきデータならびにGPU12によって実施された動作から生じたデータを記憶してもよい。たとえば、システムメモリ10は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶してもよい。さらに、システムメモリ10は、GPU12によって処理するためのコマンドストリームを記憶してもよい。システムメモリ10は、たとえばランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体、または光記憶媒体などの1つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスを含んでもよい。
【００２２】
GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ18にレンダリングするためのグラフィックス演算を実行するように構成されてもよい。したがって、CPU6上で実行するソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6はディスプレイ18にレンダリングするためにグラフィックスコマンドおよびグラフィックスデータをGPU12に与えてもよい。グラフィックスコマンドは、たとえばドローコール、GPU状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどの描画コマンドを含んでもよい。いくつかの例では、CPU6は、GPU12によってアクセスされてもよいメモリ10にコマンドとグラフィックスデータとを書き込むことによって、そのコマンドとグラフィックスデータとをGPU12に提供してもよい。いくつかの例では、GPU12は、CPU6上で実行されるアプリケーションのための汎用コンピューティングを実行するようにさらに構成されてもよい。
【００２３】
GPU12は、いくつかの事例では、CPU6よりも効率的なベクトル演算処理を提供する高度並列構造を用いて構築されてもよい。たとえば、GPU12は、複数の頂点またはピクセル上で並行して動作するように構成される複数の処理要素を含んでもよい。GPU12の高度並列の性質は、いくつかの事例では、CPU6を使用してシーンを直接ディスプレイ18に描画するよりも速く、GPU12がグラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上に描画することを可能にしてもよい。さらに、GPU12の高度並列の性質は、GPU12が、CPU6よりも速く、汎用コンピューティングアプリケーションのためのいくつかのタイプのベクトル演算および行列演算を処理することを可能にしてもよい。
【００２４】
GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに統合されてもよい。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード内のポートにインストールされるグラフィックスカード上に存在してもよく、またはそうでなければコンピューティングデバイス2と相互動作するように構成される周辺デバイス内に組み込まれてもよい。さらなる事例では、GPU12は、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上にあってもよい。GPU12は、1つもしくは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の等価な集積論理回路もしくはディスクリート論理回路などの1つまたは複数のプロセッサを含んでもよい。
【００２５】
GPU12は、GPUローカルメモリ14に直接結合されてもよい。したがって、GPU12は、必ずしもバス20を使用することなしに、GPUローカルメモリ14からデータを読み取り、GPUローカルメモリ14にデータを書き込んでもよい。言い換えれば、GPU12は、オフチップメモリの代わりにローカルストレージを使用して、データをローカルに処理することができる。これは、重いバストラフィックを経験する場合がある、GPU12がバス20を介してデータの読取りおよび書込みを行う必要をなくすことによって、GPU12がより効率的に動作することを可能にする。しかしながら、いくつかの事例では、GPU12は別個のキャッシュを含まないが、代わりにバス20を介してシステムメモリ10を利用する場合がある。GPUローカルメモリ14は、たとえばランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体などの1つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含んでもよい。
【００２６】
CPU6および/またはGPU12は、システムメモリ10内に割り振られるフレームバッファ内にレンダリングされた画像データを記憶してもよい。ディスプレイインターフェース16は、フレームバッファからデータを取り出し、ディスプレイ18をレンダリングされた画像データによって表現された画像を表示するように構成してもよい。いくつかの例では、ディスプレイインターフェース16は、フレームバッファから取り出されたデジタル値をディスプレイ18によって消費可能なアナログ信号に変換するように構成されるデジタルアナログコンバータ(DAC)を含んでもよい。他の例では、ディスプレイインターフェース16は、処理のためにデジタル値を直接ディスプレイ18に渡してもよい。ディスプレイ18は、モニタ、テレビ、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含んでもよい。ディスプレイ18は、コンピューティングデバイス2内に統合されてもよい。たとえば、ディスプレイ18は、モバイル電話ハンドセットまたはタブレットコンピュータのスクリーンであってもよい。代替的に、ディスプレイ18は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されるスタンドアロンデバイスであってもよい。たとえば、ディスプレイ18は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであってもよい。
【００２７】
いくつかの例では、GPU12は、バーチャルリアリティ(VR)アプリケーションのためのグラフィックスデータを生成してもよい。たとえば、CPU6は、アプリケーションを実行し、VRコンテンツ用のそのコマンドおよびデータ、GPU12は、そのコマンドおよびデータを受信し、表示のためのグラフィックスVRコンテンツを生成する。デバイス2のユーザは、デバイス2をユーザが着用するヘッドギアに接続してもよい。ディスプレイ18は、ユーザの目に対向している。VRコンテンツは、ゲームアプリケーションで特に人気があるが、本開示で説明する技法は、VRアプリケーションまたはゲームアプリケーションに限定されない。
【００２８】
グラフィカルコンテンツの生成によって、GPU12は電力を消費し、GPU12は熱くなり、それによってGPU12を含む集積回路が熱くなる。1つの非限定的な例としてのVRアプリケーションなど大量の処理を必要とするアプリケーションの場合、GPU12は、所望のレベルの熱と比較して過熱することがある。GPU12が過熱し、それによってGPU12を収容する集積回路が過熱するのを回避するために、サーマルスロットリングなどの様々な技法が使用されてもよい。
【００２９】
サーマルスロットリングでは、GPU12は、そのフレームレートを低下させてもよい。たとえば、高品質のユーザエクスペリエンスのために、GPU12は、毎秒約60〜120画像フレームを生成することができ、各画像フレームは、アプリケーションの画像コンテンツのスナップショットを含む。60〜120fps(フレーム毎秒)のフレームレートで、ユーザは、アプリケーション内のオブジェクトのシームレスな動きを知覚し、VR世界に没頭していると感じることがある。
【００３０】
VRアプリケーションで必要とされてもよいように、常に60〜120fpsでグラフィカルコンテンツを生成することによって、GPU12は、平均よりも過熱し、および/またはより多くの電力を消費し、デバイス2の動作長が短くなる可能性がある。GPU12は、60〜120fpsでグラフィカルコンテンツを生成するのではなく、15〜30fpsでグラフィカルコンテンツを生成する場合があり、それによって生成される必要があるグラフィカルコンテンツの量が低減し、結果としてGPU12の消費電力が低減し、GPU12が冷却することがある。
【００３１】
しかしながら、フレームレートを低下させる、または低いフレームレートと高いフレームレートの間で変動すると、フレームジッタが生じる可能性があり、この場合、動いているグラフィカルコンテンツは滑らかに動くように見えない。VRアプリケーションでは、フレームレートを低下させる、または低いフレームレートと高いフレームレートの間で変動するためのサーマルスロットリングは、乗り物酔いを引き起こし、イマージョンエクスペリエンスに悪影響を及ぼす可能性がある。
【００３２】
消費電力を低減し、それによって過熱を回避する1つの方法は、フォービエイテッドレンダリングによるものである。フォービエイテッドレンダリングでは、GPU12は、画像フレームのすべての部分が同じ解像度でレンダリングされる通常のレンダリングと比較して、画像フレームのある部分を高解像度で、画像フレームの他の部分を低解像度でレンダリングする。
【００３３】
一般に、フォービエイテッドレンダリングでは、GPU12は、ユーザが注目しないエリアにおいて、より少ないフラグメント(たとえば、画像ピクセル)をレンダリングしてもよい。たとえば、視線追跡から、または実行アプリケーションからの情報に基づいて、GPU12は、ユーザが実際に見ている部分、またはユーザが見ているはずである部分を他の部分と比較してより高い解像度でレンダリングしてもよい。
【００３４】
より高い解像度でグラフィックスコンテンツをレンダリングすることによって、より低い解像度でのグラフィックスコンテンツのレンダリングと比較して、GPU12の消費電力および加熱がより高くなる傾向がある。しかしながら、グラフィックスコンテンツを比較的低い解像度でのみレンダリングすると、ユーザエクスペリエンスが乏しくなる。したがって、異なる解像度の画像フレームエリアを有することによって、高解像度のエリアは、視聴者が視聴している、または視聴しているはずであるエリアであり、視聴者が視聴していない、または視聴していないはずのエリアは低い解像度であるので、視聴者エクスペリエンスを高く保つことができ、それによって電力を節約することができる。
【００３５】
一例として、GPU12がVRコンテンツをレンダリングし、画像フレーム全体が同じベースライン解像度でレンダリングされる場合、GPU12は約1100mWを消費することになる。フォビエーションレンダリングでは、GPU12は約300mWを消費する可能性があり、これは、電力の約70%の低減を表す。
【００３６】
節電に加えて、GPU12は、レンダリングすべきピクセルが少ないので、フィルレートを向上させることができてもよい。より速いフィルレートは、所望のフレームレートを達成することを可能にし、しかしGPU12は所望のレベルを超えるまで加熱されない(たとえば、可動の熱エンベロープにおいて高品質のVRレンダリングを可能にする)。
【００３７】
フォビエーションレンダリングでは、CPU6上で実行されるアプリケーションは、フォビエーションゲイン(たとえば、どこに、およびどの程度フォビエーションが適用されるか)を定義する。フォビエーションゲインは、GPU12が適用すべきフォビエーションの量を定義する(より多くのフォビエーションは、ぼやけたコンテンツを意味し、より少ないフォビエーションは、よりシャープな画像コンテンツを意味する)。
【００３８】
しかしながら、フォビエーションゲインおよび部分は、アプリケーションによって静的に定義される。CPU6上で実行されるアプリケーションは、GPU12の性能を決定するように構成されていない可能性があり、したがってGPU12の性能がフォビエーションゲインまたは部分が変更されるべきでものであると積極的に決定できない可能性がある。フォビエーションゲインはコンテンツ依存であり、デバイス2が動作している環境の周囲条件に依存するので、アプリケーションは、フォビエーションゲインを正確に決定できない可能性がある。アプリケーションは、コンテンツに基づいてフォビエーションゲインを設定できてもよいが、フォビエーションゲインを設定するための周囲条件に関する情報を有していない可能性がある。
【００３９】
本開示で説明する例では、処理回路(たとえば、CPU6、GPU12、またはCPU6およびGPU12の外部の回路)は、GPU12が正しい性能レベルで動作していることを確実にするために、どの程度のフォビエーションをGPU12が実際に適用するかを決定するように構成されてもよい。上記は、GPU12またはGPU12を含む集積回路の温度が過熱しないことを確実にすることに関して説明しているが、これらの例は、そのように限定されず、GPU12の性能を所望のレベルに維持するように、より一般的に拡張されてもよい。たとえば、GPU12の性能の例は、GPU12またはGPU12を収容する集積回路の温度、GPU12の消費電力、GPU12の帯域幅使用率(たとえば、メモリ10へのアクセス)、GPUコア使用率、GPUコア選択およびグラフィックスAPI使用量を含む(たとえば、どの程度フォビエーションが適用されるかを調整するかどうかは、消費電力に影響する)。処理回路は、これらのファクタのうちの1つまたは複数を利用して、GPU12の1つまたは複数の性能値を決定してもよい。いくつかの例では、処理回路は、1つまたは複数の性能値を決定するために、これらのファクタを異なるように重み付けしてもよい。
【００４０】
本開示で説明する例では、処理回路は、性能値に基づいて、適用すべきフォビエーションの量(たとえば、どの程度フォビエーションを適用すべきか、およびフォビエーションを適用すべき場所)を決定してもよい。たとえば、性能値は、性能値を性能しきい値と比較する性能推定回路にフィードバックされてもよい。性能値が性能しきい値よりも大きい場合、性能推定回路は、フォビエーションゲート回路に、CPU6上で実行されるアプリケーションが決定したフォビエーションゲインからフォビエーションゲインを増加させる(たとえば、適用されるフォビエーションの量を増加させる)ために、性能値が性能しきい値よりも大きいかどうかを示す情報を(たとえば、制御信号の形で)フォビエーションゲートに出力してもよい。性能値が性能しきい値以下である場合、性能推定回路は、フォビエーションゲート回路が、アプリケーションによって決定されたフォビエーションゲインに変更を加えないように、フォビエーションゲート回路にいかなる情報も出力しない、またはフォビエーションゲート回路に制御信号を出力しない、またはフォビエーションゲインを減少させるためにフォビエーションゲート回路に制御信号または情報を出力するようにしてもよい。
【００４１】
このようにして、性能推定回路およびフォビエーションゲート回路はともに、周囲条件(たとえば、温度)およびGPU12の使用量など様々な性能ファクタに基づいて、GPU12が適用すべきフォビエーションを動的に(たとえばランタイム中に)決定する比例積分微分(PID)回路24を形成する。性能しきい値は、GPU12の所望の最大性能レベル以下であってもよい(たとえば、電力、温度、GPUコア使用率、帯域幅使用率などのうちの1つもしくは複数または組合せなど)。PID回路は、GPU12の性能を連続的に監視し、監視された性能に基づいて、フォビエーションゲインを増幅するか、または増幅しない。
【００４２】
いくつかの例では、CPU6上で実行されるアプリケーションは、フォビエーションゲインを定義するように構成されなくてもよい。そのような例では、PID回路は、フォビエーションゲイン値の調整ではなく、フォビエーションゲイン値を決定してもよい。したがって、本開示では、適用すべきフォビエーションの量を決定することは、どの程度フォビエーションを適用すべきか、およびレンダリングされるフレーム内のどこにフォビエーションを適用すべきかを決定すること、またはアプリケーションによって決定されるフォビエーションをどの程度調整するか、およびレンダリングされるフレーム内のフォビエーションが適用される場所の調整を決定することを指す。
【００４３】
図2は、図1のコンピューティングデバイス2のCPU6、GPU12、およびメモリ10をさらに詳細に示すブロック図である。図2に示すように、CPU6は、GPU12およびメモリ10に通信可能に結合され、GPU12は、CPU6およびメモリ10に通信可能に結合される。GPU12は、いくつかの例では、CPU6とマザーボード上で統合されてもよい。追加の例では、GPU12は、CPU6を含むマザーボードのポートにインストールされたグラフィックスカード上に実装されてもよい。さらなる例では、GPU12は、CPU6と相互動作するように構成される周辺デバイス内に組み込まれてもよい。追加の例では、GPU12は、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上にあってもよい。CPU6は、アプリケーション22、グラフィックスAPI30、GPUドライバ32、およびオペレーティングシステム34を実行するように構成される。
【００４４】
同じく示されるように、比例積分微分(PID)回路24は、フォビエーションゲート(FG)回路26および性能推定(PE)回路28を含む。PID回路24は、固定機能ハードウェア回路、プログラマブル回路、またはその組合せとして実装されてもよい。単に理解しやすいように、PID回路24は、固定機能ハードウェア回路として説明される。
【００４５】
PID回路24がそれ自体の固定機能ハードウェア回路として形成される例では、PID回路24は、バス20を介してCPU6、GPU12、およびメモリ10に結合されるスタンドアロン回路であってもよい。しかしながら、いくつかの例では、PID回路24は、CPU6、または場合によってはGPU12内の固定機能回路として特別に形成されてもよい。いくつかの例では、CPU6、GPU12、およびPID回路24は、共通のマイクロチップ中に、または共通の集積回路として形成されてもよく、そのような例では、CPU6、GPU12、およびPID回路24は、統合バス(integrate bus)を介して互いに通信してもよい。
【００４６】
PID回路24がプログラマブル回路である例では、2つの非限定的な例として、PID回路24がCPU6またはGPU12の一部として形成されてもよい。PID回路24がプログラマブル回路である例では、メモリ10は、PID回路24上で実行されるコマンドを記憶し、本開示で説明した例をPID回路に実行させてもよい。PID回路24が実行するコマンドは、CPU6のコンパイラがコンパイルするアプリケーションの形態であってもよく、または直接的なオブジェクトストア、もしくはメモリ10に記憶されるファームウェアであってもよい。説明および図示を容易にするために、PID回路24は、CPU6およびGPU12の外部の固定機能回路として示される。
【００４７】
PID回路24は、画像フレームをレンダリングする際にGPU12が適用すべきフォビエーションの量を決定するように構成されてもよい。たとえば、PID回路24は、GPU12が適用すべきフォビエーションの量を決定し、決定された適用すべきフォビエーションの量に基づいて、GPU12が画像フレームをレンダリングするために、決定された適用すべきフォビエーションの量の情報を出力してもよい。PID回路24は、決定された適用すべきフォビエーションの量の情報をGPUドライバ32に出力し、GPUドライバ32は、GPU12に画像フレームをレンダリングするために決定されたフォビエーションの量を適用させる。PID回路24は、本開示で説明する例示的な技法に従って、フォビエーションゲインを決定するように構成される処理回路の一例である。
【００４８】
GPU12は、コントローラ36と、シェーダコア38と、1つまたは複数の固定機能ユニット40と、性能測定回路42とを含む。別個の構成要素として図示されるが、いくつかの例では、性能測定回路42は、コントローラ36の一部であってもよい。本開示で説明した例では、性能測定回路42は、温度、消費電力、シェーダコア38、および/または固定機能ユニット40使用量などのGPU12またはGPU12を収容するSOCの様々な性能ファクタを決定してもよい。PID回路24は、この情報を使用して、GPU12が画像フレームに適用すべきフォビエーションの量を決定してもよい。
【００４９】
ソフトウェアアプリケーション22は、グラフィックコンテンツを表示させる1つまたは複数の命令、またはGPU12上で非グラフィックタスク(たとえば、汎用コンピューティングタスク)を実行させる1つまたは複数の命令の少なくとも一部を含んでもよい。ソフトウェアアプリケーション22は、グラフィックスAPI30に命令を出してもよい。グラフィックスAPI30は、ソフトウェアアプリケーション22から受信された命令をGPUドライバ32によって消費可能なフォーマットに変換するランタイムサービスであってもよい。いくつかの例では、グラフィックスAPI30およびGPUドライバ32は、同じソフトウェアサービスの一部であってもよい。
【００５０】
GPUドライバ32は、グラフィックスAPI30を介してソフトウェアアプリケーション22から命令を受信し、命令を処理するようにGPU12の動作を制御する。たとえば、GPUドライバ32は、1つまたは複数のコマンドストリームを策定し、コマンドストリームをメモリ10に配置し、コマンドストリームを実行するようにGPU12に命令してもよい。GPUドライバ32は、コマンドストリームをメモリ10に配置し、(たとえば、1つまたは複数のシステムコールを介して)オペレーティングシステム34を介してGPU12と通信することができる。
【００５１】
コントローラ36は、コマンドストリームに記憶されたコマンドを取り出し、シェーダコア38および1つまたは複数の固定機能ユニット40上で実行するためのコマンドをディスパッチするように構成される。コントローラ36は、1つまたは複数の固定機能ユニット40またはシェーダコア38のサブセットおよび1つまたは複数の固定機能ユニット40上で実行するためにコマンドストリームからコマンドをディスパッチしてもよい。コントローラ36は、GPU12のハードウェアであってもよく、GPU12上で実行されるソフトウェアまたはファームウェアであってもよく、または両方の組合せであってもよい。
【００５２】
シェーダコア38は、プログラマブル回路(たとえば、ソフトウェアが実行する処理コア)を含む。1つまたは複数の固定機能ユニット40は、最小の機能的フレキシビリティで限定された動作を実行するように構成される固定機能回路を含む。シェーダコア38および1つまたは複数の固定機能ユニット40は一緒に、グラフィックス処理を実行するように構成されるグラフィックスパイプラインを形成する。
【００５３】
シェーダコア38は、CPU6からGPU12上にダウンロードされる1つまたは複数のシェーダプログラムを実行するように構成されてもよい。シェーダプログラムは、いくつかの例では、(たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語などの)高水準シェーディング言語で書かれるプログラムのコンパイルされたバージョンであってもよい。いくつかの例では、シェーダコア38は、並列に動作するように構成される複数の処理ユニット(たとえば、SIMDパイプライン)を含んでもよい。シェーダコア38は、実行されているプログラム命令中の現在の命令またはフェッチされることになる次の命令を示すシェーダプログラム命令および実行状態レジスタ(たとえば、プログラムカウンタレジスタ)を記憶するプログラムメモリを有してもよい。シェーダコア38上で実行されるシェーダプログラムの例には、たとえば頂点シェーダ、ピクセルシェーダ(フラグメントシェーダとも呼ばれる)、ジオメトリシェーダ、ハルシェーダ、ドメインシェーダ、計算シェーダ、および/またはユニファイドシェーダがある。
【００５４】
固定機能ユニット40は、いくつかの機能を実施するように配線接続されるハードウェアを含んでもよい。機能固定のハードウェアは、たとえば1つまたは複数の制御信号を介して、異なる機能を実行するように構成可能であってもよいが、機能固定のハードウェアは通常、ユーザによりコンパイルされるプログラムを受け入れることが可能なプログラムメモリを含まない。いくつかの例では、1つまたは複数の固定機能ユニット40は、たとえばラスタ演算(たとえば、深度テスト、シザーテスト、アルファブレンディングなど)を実行する処理ユニットを含んでもよい。
【００５５】
CPU6のGPUドライバ32は、メモリ10にコマンドストリームを書き込むように構成され、GPU12のコントローラ36は、メモリ10からコマンドストリームの1つまたは複数のコマンドを読み取るように構成されてもよい。いくつかの例では、コマンドストリームの一方または両方がリングバッファとしてメモリ10に記憶されてもよい。リングバッファは、CPU6およびGPU12が、リングバッファへのデータの書込みおよびリングバッファからのデータの読取りに関連する同期した状態変数を維持する循環アドレス指定方式(circular addressing scheme)によるバッファであってもよい。たとえば、第1のコマンドストリームがリングバッファである場合、CPU6およびGPU12の各々は、リングバッファに書き込むべき次のアドレスを示す書込みポインタと、リングバッファから読み取られるべき次のアドレスを示す読取りポインタとを記憶してもよい。
【００５６】
CPU6が新しいコマンドをリングバッファに書き込むとき、CPU6は、CPU6内の書込みポインタを更新し、GPU12内の書込みポインタを更新するようGPU12に命令する。同様に、GPU12が新しいコマンドをリングバッファから読み取るとき、GPU12は、GPU12内の読取りポインタを更新し、CPU6内の読取りポインタを更新するようCPU6に命令する。他の同期機構も可能である。読取りおよび/または書込みポインタがリングバッファに割り振られたアドレスの範囲内の最高アドレスに達すると、読取りポインタおよび/または書込みポインタは、循環アドレス指定方式を実装するために最下位アドレスにラップアラウンドしてもよい。
【００５７】
次に、例示的なGPUドライバ32および例示的なGPUコントローラ36の例示的な動作について、図2に関して説明する。GPUドライバ32は、ソフトウェアアプリケーション22から、GPU12によって実行されるべきグラフィックス動作および/または汎用コンピューティング動作を指定する1つまたは複数の命令を受信する。GPUドライバ32は、GPUコントローラ36によってアクセス可能な、出力されたコマンドストリームをメモリ10に配置する。GPUドライバ32は、ソフトウェアアプリケーション22に対応するコマンドストリームが処理に利用可能であることをGPUコントローラ36に通知する。たとえば、GPUドライバ32は、コマンドストリームが実行の準備ができていることを示す1つまたは複数の値をGPUレジスタ(たとえば、GPU12によってポーリングされたGPUハードウェアレジスタおよび/またはGPU12によってポーリングされたGPUメモリマップレジスタ)に書き込んでもよい。
【００５８】
コマンドストリームが実行の準備ができていることを通知すると、GPU12のコントローラ36は、コマンドストリームの実行を開始するために、リソースがGPU12上で現在利用可能であるかどうかを判定してもよい。リソースが利用可能である場合、コントローラ36は、コマンドストリーム内のコマンドをディスパッチし始める。
【００５９】
グラフィックス処理の一部として、CPU6は、いくつかのグラフィックス処理タスクをGPU12にオフロードしてもよい。たとえば、アプリケーション22は、グラフィカルオブジェクトを形成するために相互接続するプリミティブの複数の頂点の属性の属性データを生成してもよい。アプリケーション22は、属性データをメモリ10内の頂点バッファに記憶してもよい。グラフィックスドライバ32は、表示すべきグラフィックスデータを生成する処理のために、頂点の属性の属性データを取り出すようコントローラ36に命令してもよい。
【００６０】
本開示で説明した例では、アプリケーション22は、GPUドライバ32がGPU12に送信すべきフォビエーション情報を生成する。フォビエーション情報は、GPU12が適用すべきフォビエーションの量(たとえば、どの程度のフォビエーション、およびフォビエーションが適用されるべきエリア)を定義する。この場合も、ぼやけたエリアがどのように見えるかを定義する。
【００６１】
一例として、アプリケーション22は、頂点バッファに記憶された属性データの一部として、頂点の各々についてフォビエーション情報を定義してもよい。この例では、ユーザが視聴している部分に配置されたプリミティブの頂点の場合、アプリケーション22は、これらのエリアを低いフォビエーションを有する、またはフォビエーションがないものとして定義し、ユーザが視聴していない他の部分を高いフォビエーションを有するものと定義してもよい。異なるエリアに異なるフォビエーションレベルが存在してもよい(たとえば、第1の部分にはフォビエーションがなく、第2の部分には中程度のフォビエーションがあり、第3の部分には高いフォビエーションがある)。このようにして、アプリケーション22は、フォビエーションの量を定義してもよい。
【００６２】
本開示で説明する技法では、GPUドライバ32がGPU12に適用されるべきフォビエーションの量を出力するのではなく、PID回路24は、適用されるべきフォビエーションの量を示す情報をインターセプトし、実際に適用されるフォビエーションの量を調整してもよい。たとえば、PID回路24は、性能測定回路42によって生成された情報に基づいて実際に適用されるフォビエーションの量を更新してもよい。
【００６３】
例示のためにすぎない一例として、PID回路24は、GPUドライバ32から、または場合によってはアプリケーション22から適用されるべきフォビエーションの量を示す情報を受信してもよい。PID回路24は、性能測定回路42によって生成された情報に基づいて実際に適用されるフォビエーションの量を更新し、決定された適用すべきフォビエーション量の情報をGPUドライバ32に出力してもよい。次いで、GPUドライバ32は、決定された適用すべきフォビエーションの量に基づいて、GPU12が画像フレームをレンダリングするために、決定された適用すべきフォビエーションの量の情報をGPU12に出力する。
【００６４】
例示のためにすぎない別の例として、PID回路は、GPUドライバ32から、または場合によってはアプリケーション22から適用されるべきフォビエーションの量を示す情報を受信してもよい。PID回路24は、性能測定回路42によって生成された情報に基づいて実際に適用されるフォビエーションの量を更新してもよい。この例では、PID回路24は、GPUドライバ32を使用せずに、決定された適用すべきフォビエーションの量の情報をGPU12に出力してもよい。
【００６５】
性能測定回路42は、GPU12またはSoCの様々な例示的な性能メトリックを決定し、結果として得られるメトリック値を1つまたは複数の性能値44としてメモリ10に記憶するように構成されてもよい。性能測定回路42が決定してもよい1つの例示的な性能メトリック(またはファクタ)は、GPU12の電力である。性能測定回路42は、GPU12によって消費されている電圧および電流を連続的にまたは定期的に測定し、GPU12の消費電力を決定するために2つの数を、次いで。性能測定回路42は、消費電力値を性能値44の1つとして記憶してもよい。
【００６６】
性能測定回路42が決定してもよい別の例示的な性能メトリックまたはファクタは、GPU12の帯域幅使用率である。コントローラ36は、バス20を介してメモリ10からデータを受信する、またはメモリ10にデータを出力するたびに、GPU12がメモリ10に送信する、またはメモリ10から受信されるデータの量を示す情報を性能測定回路42に出力してもよい。性能測定回路42は、GPU12の帯域幅使用率を決定するために、一定の時間期間にわたって送信または受信されるデータの量を分割してもよい。性能測定回路42は、帯域幅使用値を性能値44の1つとして記憶してもよい。
【００６７】
性能測定回路42が決定してもよい別の例示的な性能メトリックまたはファクタは、GPUコア使用率である。シェーダコア38または固定機能ユニット40が動作を実行するクロックサイクルごとに、シェーダコア38または固定機能ユニット40は、動作を実行したことを示すデジタルハイを出力してもよい。性能測定回路42は、クロックサイクル中に動作が実行されたかどうかを示すこれらの信号をシェーダコア38または固定機能ユニット40から受信するORゲートを含んでもよい。シェーダコア38または固定機能ユニット40のうちの少なくとも1つが動作を実行した場合、ORゲートの出力はデジタル1であり、シェーダコア38または固定機能ユニット40のいずれも動作を実行しない場合、ORゲートの出力はデジタル0である。性能測定回路42は、GPUコア使用率を示すものとして、あるクロックサイクル数にわたってORゲートの出力がデジタル1であった回数を決定してもよい。性能測定回路42は、結果として得られたGPUコア使用値を性能値44の1つとして記憶してもよい。
【００６８】
いくつかの例では、図示されていないが、GPU12またはSoCは、抵抗が温度に応じて変化するサーミスタなどの温度センサーを含んでもよい。性能測定回路42は、サーミスタの抵抗を決定し、抵抗値を温度値にマッピングするテーブルと抵抗とを比較してもよい。性能測定回路42は、温度値を性能値44の1つとして記憶してもよい。
【００６９】
いくつかの例では、コントローラ36は、使用されたグラフィックスAPIを性能測定回路42に示し、性能測定回路42は、グラフィックスAPIに基づいて性能値を決定してもよい。性能測定回路42は、グラフィックスAPI使用量から決定された性能値を性能値44の1つとして記憶してもよい。
【００７０】
性能測定回路42は、API使用情報を利用して、フォビエーションゲインを調整することが消費電力に影響を及ぼすかどうかを判定してもよい。たとえば、CPU6は、様々なAPIを利用してGPU12にアクセスしてもよい。一例として、グラフィックスAPI30は、いくつかの動作のためにOpenGL APIに準拠する命令をGPU12に提供し、いくつかの他の命令(たとえば、非グラフィックス関連処理)のためにOpenCL APIに準拠する命令をGPU12に提供してもよい。OpenCL API命令上で動作するGPU12は、いかなるグラフィックス処理ももたらさず、しかし消費電力の増加をもたらす可能性がある。そのような場合、GPU12が主にOpenCL APIを使用して動作している場合、フォビエーションゲインを調整しても、消費電力は実際には測定可能な量だけ変化しない可能性がある。
【００７１】
たとえば、GPU12は、グラフィックスデータのレンダリングに直接関係しないものを含む様々な動作を課されることがある。そのような場合、GPU12の温度および消費電力は増加してもよいが、消費電力の増加の原因はグラフィックスレンダリングとは無関係であるので、フォビエーションゲインのいかなる調整によっても消費電力は減少しない可能性がある。
【００７２】
性能測定回路42は、グラフィックス処理に関連する命令の実行、および非グラフィックス処理に関連する命令の実行の際にGPU12がどの程度実行しているかを追跡してもよい。性能測定回路42は、この情報をPE回路28に提供することができる。PE回路28は、その情報を利用してフォビエーションゲインを調整するかどうかを判定してもよい。
【００７３】
一例として、ユーザが拡張現実ビデオゲームをプレイしていると仮定する。レンダリングは簡単であってもよいが、カメラが常に実行中である可能性がある。この場合、CPU6は、非グラフィック関連API(たとえば、OpenCL)を介してGPU計算(たとえば、非グラフィック関連命令)を使用してもよい。電力ドローの大部分はOpenCLによる影響を受けないGPU計算によるものであるので、フォビエーションゲインのいかなる調整によっても消費電力は変わらない可能性があるので、フォビエーションゲインに変更はない可能性がある。
【００７４】
PE回路28は、温度および消費電力が増加したと判断したが、GPU12が主に非グラフィックス関連の命令を実行していたと判断した場合、フォビエーションゲインを調整しても消費電力は低減しない可能性があるので、フォビエーションゲインに変化がないはずであると決定してもよい。このようにして、PE回路28は、フォビエーションを調整するかどうかを判定するためのファクタとしてそれ自体でAPI使用情報を使用してもよく、またはフォビエーションを調整するかどうかを判定するために、API使用情報を他のファクタと併用してもよい。
【００７５】
PID回路24のPE回路28は、システムメモリ10から1つまたは複数の性能値44を取り出し、1つまたは複数の性能値44をそれぞれの性能しきい値45と比較してもよい(たとえば、電力使用量をしきい値電力使用量と比較する帯域幅使用率をしきい値帯域幅使用率と比較するなど)。一定数の性能値がそれぞれの性能しきい値45よりも大きいとPE回路28が決定した場合、PE回路28は、(たとえば、PE回路28が出力する情報に基づいて、または制御信号を介して)適用すべきフォビエーションの量を増加させるようFG回路26に命令してもよい。
【００７６】
上記で説明したように、いくつかの例では、PID回路24は、適用されるべきフォビエーションの量を示すGPUドライバ32からの出力をインターセプトする。FG回路26は、アプリケーション22によって決定された量から適用されるべきフォビエーションの量を増加させてもよい。次いで、GPUドライバ32は、更新されたフォビエーションゲイン値(たとえば、適用すべきフォビエーションの量を示す情報)をシステムメモリ10に出力してもよい。たとえば、上記で説明したように、GPUドライバ32は、コマンドストリームをメモリ10に記憶してもよい。さらに、GPUドライバ32は、フォビエーションゲイン(たとえば、適用すべきフォビエーションの量)をメモリ10に記憶してもよい。図示のように、GPUドライバ32は、レンダリングする旨のコマンドおよびフォビエーションゲインをレンダリングコマンド/フォビエーションゲイン46としてメモリ10に記憶してもよい。
【００７７】
GPUドライバ32および/またはオペレーティングシステム34は、性能しきい値を定義し、それらを性能しきい値45としてメモリ10に記憶してもよい。GPUドライバ32および/またはオペレーションシステム34は、各性能メトリックまたはファクタの最大レベルを示す情報で事前プログラムされてもよい。GPUドライバ32および/またはオペレーティングシステム34は、それぞれの性能しきい値を各性能メトリックまたはファクタの最大レベル以下に設定し、性能しきい値を性能しきい値45としてメモリ10に記憶してもよい。
【００７８】
いくつかの場合には、GPU12によって決定された性能値44が短い時間期間に変動する可能性がある。この変動によって、性能値44は、性能しきい値45よりも大きく、および小さく変動する可能性がある。性能しきい値45よりも小さい、または大きい性能値44がフォビエーションゲインを決定するので、性能しきい値45よりも小さく、次いで性能しきい値45よりも大きくなる性能値44の変動は、フォビエーションゲインを連続的に変化させる可能性がある。そのようなフォビエーションゲインの一定の増加および減少は、ユーザエクスペリエンスに悪影響を及ぼす可能性がある。
【００７９】
いくつかの例では、PE回路28は、継続的に増加および減少するフォビエーションゲインを最小限に抑えるために、性能値44の移動平均(または何らかの他のタイプの平均化)を決定してもよい。そのような例では、PE回路28は、適用されるフォビエーションの量をFGゲート回路26に増加させるかどうかを判定するために、ある時間期間にわたって平均性能値44をそれぞれの性能しきい値45と比較してもよい。
【００８０】
上記の例では、PE回路28は、それぞれの性能値44をそれぞれの性能しきい値45と比較するものとして記述されている。したがって、PE回路28は、性能値44のうちの1つを性能しきい値45のうちの1つと比較してもよい。いくつかの例では、PE回路28は、1つまたは複数の性能値45を複合性能値に結合してもよい。そのような例では、PE回路28は、複合性能値を複合性能しきい値と比較してもよい。複合性能しきい値は、性能しきい値45の別の例であってもよく、他の性能しきい値45および/またはGPUドライバ32の代わりに、またはそれに加えて記憶されてもよく、あるいはオペレーティングシステム34は、動作中の複合性能しきい値を性能しきい値45から決定してもよい。
【００８１】
性能測定回路42は、複数の性能値44を決定してもよいが、性能値44の各々は、フォビエーションゲインを増加させるかどうかの決定に等しく寄与しない場合がある。たとえば、温度は、帯域幅使用率と比較してフォビエーションゲインを制御する際により重要であってもよい。PE回路28は、性能値を異なるように重み付けし、重み付けされた値を一緒に結合して、複合重み付き性能値を決定するように構成されてもよい。たとえば、PE回路28は、温度による性能値に第1の比率(たとえば、0.9)を掛け、帯域幅使用率による性能値に第2の比率(たとえば、0.1)を掛けてもよい。PE回路28は、2つの重み付き性能値を加算し、その値を2で除算してもよい。この例では、温度による性能値は、帯域幅使用率よりも複合重み付き性能値に寄与する。温度および帯域幅の重み付け、使用される比率、および重み付けが実行される方法はすべて例として提供され、限定的であると見なされないものとする。
【００８２】
そのような例では、PE回路28は、複合重み付き性能値を複合しきい値重み付き性能値と比較してもよい。複合しきい値重み付き性能値は、性能しきい値45の別の例であってもよく、他の性能しきい値45および/またはGPUドライバ32の代わりに、またはそれに加えて記憶されてもよく、あるいはオペレーティングシステム34は、動作中の複合しきい値重み付き性能値を性能しきい値45から決定してもよい。
【００８３】
上記の例では、PID回路24は、アプリケーション22によって定義されるように、適用すべきフォビエーションの量を調整するものとして記述されている。アプリケーション22が適用すべきフォビエーションの量を定義しない場合、PE回路28は、さらに性能値44を性能しきい値45(実際、複合、または重み付き複合値)と比較してもよい。FG回路26は、比較に基づいて、適用すべきフォビエーションの量を決定してもよい。たとえば、FG回路26は、画像の中心にフォビエーションがないこと、および中心から外側にフォビエーションが適用されるべき部分を規定してもよい。
【００８４】
混乱を回避するため、GPU性能値は、実際の性能値44、性能値44の平均、性能値44の複合、または複合重み付き性能値44を指すために使用される総称語である。GPU性能しきい値は、実際の性能しきい値45、性能しきい値45の平均、性能しきい値45の複合、または複合重み付き性能しきい値45を指すために使用される総称語である。
【００８５】
上記の例では、性能測定回路42、PE回路28、およびFG回路26がフィードバック回路を形成する。フォビエーションゲインを調整または設定する際、FG回路26は、毎回設定量だけフォビエーションゲインを増加させ、GPU性能値がGPU性能しきい値以下になるまで、適用されるフォビエーションの量を増加させることを繰り返してもよい。別の例として、FG回路26は、フォビエーションゲインを大幅に増加させ、次いでGPU性能値がGPU性能しきい値にほぼ等しくなるまで、フォビエーションゲインをゆっくり低減してもよい。
【００８６】
いくつかの例では、CPU6のローカルメモリは、GPU性能値とGPU性能しきい値との間の様々な差について、フォビエーションゲインがどうであるべきかのいくつかの近似値を提供するルックアップテーブルを記憶してもよい。FG回路26は、ルックアップテーブルに基づいて、適用すべきフォビエーションゲインの量を決定してもよい。
【００８７】
GPU12が適用すべきフォビエーションの量をFG回路26が決定すると、GPUドライバ32は、レンダリングコマンド/フォビエーションゲイン46として情報を記憶してもよい。GPUドライバ32は、決定された適用すべきフォビエーションの量に基づいて、GPU12に画像をレンダリングさせてもよい。コントローラ36は、レンダリングコマンド/フォビエーションゲイン46からフォビエーションゲイン情報を取り出し、GPU12に適切なレベルのフォビエーションを適用させてもよい。その結果、GPU12がフレームバッファ48に記憶するレンダリングされた画像フレームが得られる。
【００８８】
GPU12がフォビエーションを実行する様々な方法があってもよい。一例として、フォビエーションゲイン情報は、どの程度フォビエーションを適用すべきか、およびフォビエーションが適用されるべき画像フレームの部分を示してもよい。一例として、各頂点情報は、フォビエーションゲインを含んでもよい。コントローラ36は、フォビエーションゲイン情報に基づいて、シェーダコア38上で実行される頂点シェーダが、頂点座標データにどの射影行列を乗算すべきかを決定してもよい。射影行列は、頂点によって形成されるプリミティブがどの程度エリアを包含するかを定義し、プリミティブ内の解像度(たとえば、ピクセル数)をより高い解像度(たとえば、より少ないフォビエーション)が必要とされる他のプリミティブよりも小さくなるように設定してもよい。GPU12がプリミティブをレンダリングするとき、プリミティブのピクセル数は他のエリアよりも小さくてもよい。プリミティブ内のピクセル数は他のエリアよりも少ないので、コントローラ36は、他のエリアと比較してフラグメントシェーダのインスタンス化をより少なく実行してもよい。
【００８９】
フォビエーションの別の例として、コントローラ36は、シェーダコア38および固定機能ユニット40に、同じ「より低い」解像度で画像全体を生成させてもよい。次いで、コントローラ36は、シェーダコア38および固定機能ユニット40に、画像フレームのいくつかの部分を高品質のフィルタリングでアップサンプリングさせてもよい。他の例は、可変レートシェーディング(VRS)を含む。
【００９０】
上記は様々な非限定的な例を提供することを理解されたい。一般に、性能測定回路42は、上述したものに加えてまたはその代わりに、性能値を決定してもよい。PE回路28は、GPU性能値を決定し、GPU性能値とGPU性能しきい値との間の比較を上記の技法または他の技法のいずれかを使用して実行してもよい。FG回路26は、上記の技法または他の技法のいずれかまたは任意の組合せを使用して適用されるべきフォビエーションの量を増加または場合によっては減少させてもよい。コントローラ36は、上記で説明した例示的な技法のいずれかを使用して、GPU12にフォビエーションを実行させてもよい。
【００９１】
したがって、PE回路28は、GPU12の性能を示す情報を受信してもよい。FG回路26は、受信された情報に基づいて、適用すべきフォビエーションの量を決定してもよい。たとえば、PE回路28は、消費電力、帯域幅使用率、GPUコア使用率、および温度のうちの1つまたは複数に基づいて、GPU性能値を決定し、GPU性能値をGPU性能しきい値と比較してもよい。FG回路26は、比較に基づいて、GPU12が画像フレームに適用すべきフォビエーションの量を決定してもよい。一例として、PE回路28は、GPU性能値がGPU性能しきい値よりも大きいと判断してもよい。FG回路26は、GPU性能値がGPU性能しきい値以下になるまで、GPU12によって適用されるフォビエーションの量を繰り返し増加させてもよい。
【００９２】
このようにして、FG回路26およびPE回路28は、フォビエーションを増加させるかどうかを連続的に判定してもよい。たとえば、FG回路26およびPE回路28は、GPU12による画像のレンダリング中にフォビエーションを増加させるかどうかを判定してもよい。
【００９３】
いくつかの例では、PE回路28は、重み付き複合性能値を決定してもよい。たとえば、PE回路28は、GPU12の性能(たとえば、温度)を示す第1の値、およびGPU12の性能(たとえば、帯域幅使用率)を示す第2の値を受信してもよい。PE回路28は、第1の加重係数によって第1の値を重み付けして第1の重み付き係数を生成し(たとえば、第1の値に第1の比率を乗算する)、第2の異なる加重係数によって第2の値を重み付けして第2の重み付き係数を生成してもよい(たとえば、第2の値に第2の比率を乗算する)。FG回路26は、第1の重み付き係数および第2の重み付き係数に少なくとも部分的に基づいて、適用すべきフォビエーションの量を決定してもよい。たとえば、PE回路28は、GPU性能値(たとえば、第1および第2の重み付き係数の平均)を決定するために第1および第2の重み付き係数を使用し、GPU性能値とGPU性能しきい値の比較に基づいて、FG回路26は、適用すべきフォビエーションの量を決定してもよい。
【００９４】
たとえば、PE回路28は、GPU性能値がGPU性能しきい値よりも大きいかどうかを示す情報をFG回路26に出力し、FG回路26は、応答して、GPU12が適用すべきフォビエーションの量を決定してもよい。別の例として、PE回路28は、GPU性能値とGPU性能しきい値との間の差を示す情報をFG回路26に出力し、FG回路26は、応答して(たとえば、GPU性能値およびGPU性能しきい値の差をマッピングするルックアップテーブル、および適用されるべきフォビエーションの量を介して)GPU12が適用すべきフォビエーションの量を決定してもよい。
【００９５】
GPUドライバ32は、決定された適用すべきフォビエーションの量に基づいて、GPU12に画像をレンダリングさせてもよい。たとえば、GPUドライバ32は、適用すべきフォビエーションの量を示す情報をメモリ10に記憶してもよい。適用すべきフォビエーションの量が連続的に決定されているので、いくつかの例では、GPUドライバ32は、GPU12が画像のレンダリング中に適用すべきフォビエーションの量を更新してもよい。
【００９６】
図3は、本開示で説明する1つまたは複数の例示的な技法による例示的なプロセスフローを示す概念図である。アプリケーション22は、CPU6上で実行され、レンダリングコマンドおよびフォビエーションゲイン(たとえば、GPU12が適用されるべきフォビエーションの量)を生成する。GPUドライバ32は、レンダリングコマンドをレンダリングコマンド/フォビエーションゲイン46の一部としてメモリ10に記憶する。しかしながら、GPUドライバ(GD)32および/またはオペレーティングシステム(OS)34は、フォビエーションゲインをメモリ10に直ちに記憶しない。むしろ、FG回路26は、フォビエーションゲイン値を受信し、フォビエーションゲインを調整する。GPUドライバ32は、得られた調整または更新されたフォビエーションゲイン値をレンダリングコマンド/フォビエーションゲイン46の一部としてメモリ10に記憶する。
【００９７】
GPU12が画像フレームをレンダリングしている間、GPU12の性能測定回路42は、性能測定回路42がメモリ10に記憶する複数の性能値44を生成する。PE回路28は、GPU12の性能を示す情報を受信する(たとえば、性能値44を受信する)。PE回路28は、性能値44に基づいて、GPU性能値を決定し、GPU性能値をGPU性能しきい値と比較してもよい。FG回路26は、比較に基づいて、適用すべきフォビエーションの量を決定してもよい。
【００９８】
たとえば、PE回路28は、GPU性能値がGPU性能しきい値よりも大きいと判断してもよい。FG回路26は、フォビエーションゲインおよびPE回路28の出力に基づいて、GPU性能値がGPU性能しきい値以下になるまで、適用されるフォビエーションの量を繰り返し増加させてもよい(たとえば、PE回路28の出力は、性能値と性能しきい値との差を示す情報、FG回路26がフォビエーションゲインを増加または減少させることを示す制御信号などでもよい)。FG回路26は、画像のレンダリング中にGPU12が適用すべきフォビエーションの量を更新することによって、GPU12によって適用されるべきフォビエーションの量を決定してもよい。上述のように、GPU12は、低減された解像度でレンダリングし、射影行列に基づいてレンダリングされるプリミティブの一部をアップサンプリングする、またはプリミティブのサイズを変更することによって、フォビエーションを適用してもよい。
【００９９】
図示の例では、FG回路26は、適用されるべきフォビエーションの量を示す情報を受信してもよい。たとえば、アプリケーション22は、適用されるべきフォビエーションの量を決定している可能性がある。FG回路26は、適用されるべきフォビエーションの量を調整することによって、適用すべきフォビエーションの量を決定してもよい。アプリケーション22が適用されるべきフォビエーションの量を提供しない例では、FG回路26は、依然として適用すべきフォビエーションの量を決定してもよい。たとえば、この例では、アプリケーション22は、適用すべきフォビエーションの量がゼロであると決定すると考えられ、FG回路26は、適用すべきフォビエーションの量として非ゼロ値を決定してもよい。
【０１００】
このようにして、FG回路26、性能測定回路42、およびPE回路28は、比例積分微分(PID)ループ50を形成する。PIDループ50は、フォビエーションの量の変化が必要かどうかを連続的にまたは定期的(たとえば、1フレームに1回またはNフレームごとに1回)に決定するためのフィードバックループである。適用されるべきフォビエーションの量を変更することによって、GPU12は、ユーザエクスペリエンスに与える悪影響を最小限に抑えながら、所望のフレームレートを達成するのに十分速いレートでグラフィックスコンテンツをレンダリングすることができてもよい。たとえば、フォービエイテッドされている部分は、ユーザが視聴している部分ではないので、高忠実度はこれらの部分には必要ないが、ぼやけ過ぎるとユーザエクスペリエンスに影響を与える可能性がある。適用されるフォビエーションの量を動的に制御することによって、VRコンテンツをサーマルスロットリングで表示する際の問題が低減されてもよい。
【０１０１】
GPUドライバ32は、決定された適用すべきフォビエーションの量に基づいて、GPU12に画像をレンダリングさせてもよい。その結果、GPU12がフレームバッファ48に記憶するレンダリングされた画像が得られる。ディスプレイ18は、フレームバッファ48に記憶されたコンテンツを表示してもよい。
【０１０２】
図4は、データを処理する例示的な方法を示すフローチャートである。この例は、仮想現実(VR)アプリケーションのための画像をレンダリングするために適用可能である。しかしながら、これらの技法は、VRアプリケーションのための画像のレンダリングに限定されず、一般にグラフィックス処理に適用可能である。
【０１０３】
図示のように、アプリケーション22は、たとえばVRコンテンツを生成するためにCPU6上で実行する(52)。実行の結果、アプリケーション22は、コマンドストリームを生成し(54)、適用されるべきフォビエーションの量を示す情報を生成する(56)。
【０１０４】
本開示で説明された技法では、FG回路26は、GPU12の性能に基づいて、適用されるべきフォビエーションの量を調整してもよい(58)。たとえば、PE回路28は、性能測定回路42によって決定された1つまたは複数の性能値44を受信してもよい。性能値44は、GPU12の性能を示してもよい。性能値44の例は、温度、消費電力、帯域幅使用率、GPUコア使用率、ならびに選択およびグラフィックスAPI使用を含む。
【０１０５】
FG回路26は、受信された情報に基づいて、適用すべきフォビエーションの量を決定してもよい。たとえば、PE回路28は、性能値44に基づいて、GPU性能値を決定してもよい。GPU性能値を決定する際に、PE回路28は、性能値44の異なるものに異なる重み付けを適用してもよい(たとえば、GPU12の性能を示す第1の値を第1の加重係数で重み付けして第1の重み付き係数を生成し、GPU12の性能を示す第2の値を第2の異なる加重係数で重み付けして第2の重み付き係数を生成する)。FG回路26は、第1の重み付き係数および第2の重み付き係数に少なくとも部分的に基づいて、適用すべきフォビエーションの量を決定してもよい。
【０１０６】
たとえば、PE回路28は、性能値の異なる重み付け(たとえば、異なる重み付けに基づく重み付き平均)に基づいて複合性能値を決定し、複合性能値をしきい値と比較してもよい。複合性能値がしきい値よりも大きい場合、PE回路28は、その差を示す情報または制御信号(たとえば、フォビエーションゲインが調整されることを示す情報)をFG回路26に出力し、FG回路26は、適用すべきフォビエーションを決定する。このようにして、FG回路26は、第1の重み付き係数および第2の重み付き係数に少なくとも部分的に基づいて、適用すべきフォビエーションの量を決定する。
【０１０７】
FG回路26は、GPU性能値がGPU性能しきい値以下になるまで、適用されるフォビエーションの量を繰り返し増加させてもよい。したがって、FG回路26は、GPUが画像のレンダリング中に更新されたフォビエーション量を適用できるように、画像のレンダリング中に適用すべきフォビエーションの量を決定してもよい。
【０１０８】
FG回路26は、決定された適用すべきフォビエーションの量に基づいてGPU12が画像をレンダリングするために、決定された適用すべきフォビエーションの量の情報を出力してもよい(60)。FG回路26は、決定されたフォビエーションの量の情報をグラフィックスドライバ32に出力し、グラフィックスドライバ32は、フォビエーションの量に基づいて画像をGPU12にレンダリングさせてもよい。たとえば、グラフィックスドライバ32は、コントローラ36がレンダリングコマンド/フォビエーションゲイン46をメモリ10から取り出すべき場所を示す情報を出力してもよい。次いで、GPU12は、レンダリングコマンド/フォビエーションゲイン46に基づいて、画像をレンダリングすることができ、FG回路26は、アプリケーション22から受信された値からフォビエーションゲインを調整する。PE回路28がGPU12の性能を連続的に監視している可能性があり、必要に応じて、画像フレームのレンダリング中でも、FG回路26に、フォビエーションゲインを調整させる可能性があるので、グラフィックスドライバ32は、画像のレンダリング中に適用されるべきフォビエーションの量をGPU12に更新させてもよい。
【０１０９】
GPU12は、異なる射影行列による頂点情報の選択的乗算、または低解像度での画像のレンダリング、およびフォビエーションゲインが最小である場合、これらの部分のアップサンプリングなどの様々な技法を利用してもよい。GPU12は、アプリケーション22が部分を規定していない場合、アプリケーション22によって規定されたある部分、または画像フレームの中心にフォビエーションを適用してもよい。GPU12が適用すべきフォビエーションの量を調整することによって、例示的な技法は、GPU12によって消費される電力量を制御し、場合によっては、視聴者エクスペリエンスへの影響を最小限に抑えて、GPU12の温度を制御してもよい。GPU12の電力および温度(ならびに帯域幅など他のパラメータ)を最大動作点未満に保つことによって、例示的な技法は、フレームの過度の低下、または視聴者エクスペリエンスに影響を与える他の変化なしに、GPU12がVRコンテンツを生成することを可能にしてもよい。
【０１１０】
本開示で説明する技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装されてもよい。たとえば、説明する技法の様々な態様は、1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または任意の他の等価な集積論理回路もしくはディスクリート論理回路、ならびにそのような構成要素の任意の組合せを含む、1つまたは複数のプロセッサ内で実装されてもよい。「プロセッサ」または「処理回路」という用語は、一般に、単独の、もしくは他の論理回路と組み合わせた前述の論理回路のいずれか、または処理を実行するディスクリートハードウェアなどの任意の他の等価な回路を指すことがある。
【０１１１】
そのようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明する様々な動作および機能をサポートするために、同じデバイス内または別個のデバイス内で実装されてもよい。さらに、説明するユニット、モジュール、または構成要素のいずれも、一緒に、またはディスクリートであるが相互動作可能な論理デバイスとして別個に実装されてもよい。異なる特徴をモジュールまたはユニットとして図示することは、異なる機能的態様を強調することを意図したものであり、必ずしも、そのようなモジュールまたはユニットが別個のハードウェアまたはソフトウェア構成要素によって実現されなければならないことを暗示するとは限らない。むしろ、1つまたは複数のモジュールまたはユニットに関連する機能は、別個のハードウェア、ファームウェア、および/もしくはソフトウェア構成要素によって実行されるか、または共通もしくは別個のハードウェアもしくはソフトウェア構成要素内で統合されてもよい。
【０１１２】
本開示で説明する技法はまた、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体内で記憶、具現化、または符号化されてもよい。コンピュータ可読媒体内で埋め込まれたかまたは符号化された命令は、たとえば命令が1つまたは複数のプロセッサによって実行されるとき、1つまたは複数のプロセッサに本明細書で説明する技法を実行させてもよい。コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、ハードディスク、CD-ROM、フロッピーディスク、カセット、磁気媒体、光媒体、または有形の他のコンピュータ可読記憶媒体を含んでもよい。
【０１１３】
様々な態様および例について説明した。しかしながら、以下の特許請求の範囲から逸脱することなく、本開示の構造または技法に修正を行うことができる。
【符号の説明】
【０１１４】
2  コンピューティングデバイス
4  ユーザ入力インターフェース
6  CPU
8  メモリコントローラ
10  システムメモリ
12  グラフィックス処理ユニット(GPU)
14  ローカルメモリ
16  ディスプレイインターフェース
18  ディスプレイ
20  バス
22  アプリケーション
24  比例積分微分(PID)回路
26  フォビエーションゲート(FG)回路
28  性能推定(PE)回路
30  グラフィックスAPI
32  GPUドライバ
34  オペレーティングシステム
36  コントローラ
38  シェーダコア
40  固定機能ユニット
42  性能測定回路
44  性能値
45  性能しきい値
46  レンダリングコマンド/フォビエーションゲイン
48  フレームバッファ
50  比例積分微分(PID)ループ
【図１】
2019528514.tif 000003
【図２】
2019528514.tif 000004
【図３】
2019528514.tif 000005
【図４】
2019528514.tif 000006
【国際調査報告】
2019528514.tif 000007
2019528514.tif 000008