(57)【特許請求の範囲】
【請求項１】
グラフィックスデータを処理する方法であって、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、
前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、
前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することと
を備え、前記メトリックのうちの少なくとも２つを評価することが、前記少なくとも２つのメトリックに重み付け方式を適用することを備える、方法。
【請求項２】
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、請求項１に記載の方法。
【請求項３】
前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集することをさらに備える、請求項１に記載の方法。
【請求項４】
少なくとも２つのメトリックを評価することが、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を評価することを備える、請求項１に記載の方法。
【請求項５】
レンダリングモードを自動的に選択することが、前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択することを備える、請求項１に記載の方法。
【請求項６】
レンダリングのために前記ＧＰＵに前記現在レンダリングユニットの前記グラフィックスデータを与えることと、
前記グラフィックスデータ中のレンダリング境界に達すると、前記現在レンダリングユニットから後続のレンダリングユニットに切り替えることとをさらに備える、請求項１に記載の方法。
【請求項７】
前記メトリックのうちの少なくとも２つを評価することが、少なくともＧＰＵ帯域幅の量とフレームのために定義されたレンダターゲットの数とを評価することを備える、請求項１に記載の方法。
【請求項８】
前記メトリックのうちの少なくとも２つを評価することは、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測することを備える、請求項１に記載の方法。
【請求項９】
レンダリングモードを自動的に選択することが、前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択することを備える、請求項１に記載の方法。
【請求項１０】
ＧＰＵを構成することは、前記レンダリングモードとして前記直接レンダリングモードが選択されたとき、前記現在レンダリングユニットのグラフィックスデータをフレームバッファに直接レンダリングするように前記ＧＰＵのレンダリングエンジンを構成することを備える、請求項１に記載の方法。
【請求項１１】
ＧＰＵを構成することは、前記レンダリングモードとして前記据置きレンダリングモードが選択されたとき、前記現在レンダリングユニットを複数のタイルに分割するタイリングパスを実行することと、前記複数のタイルの各々のグラフィックスデータをタイルバッファにレンダリングすることと、前記レンダリングされたタイルのための各々を前記タイルバッファからフレームバッファに読み込むこととを行うように前記ＧＰＵのレンダリングエンジンを構成することを備える、請求項１に記載の方法。
【請求項１２】
前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信することをさらに備え、ＧＰＵを構成することが、前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成することを備える、請求項１に記載の方法。
【請求項１３】
手動で選択されたレンダリングモードを受信することが、ユーザから前記手動で選択されたレンダリングモードを受信するためにグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）を実行することを備える、請求項１２に記載の方法。
【請求項１４】
グラフィックスデータを処理するためのグラフィックスデバイスであって、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを記憶するメモリバッファと、
前記メトリックのうちの少なくとも２つを評価することと、前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを行う１つまたは複数のプロセッサと
を備え、前記プロセッサが、前記メトリックのうちの少なくとも２つを、前記少なくとも２つのメトリックに重み付け方式を適用することによって評価する、グラフィックスデバイス。
【請求項１５】
前記１つまたは複数のプロセッサが、中央処理ユニット（ＣＰＵ）および前記ＧＰＵのうちの１つまたは複数を備える、請求項１４に記載のグラフィックスデバイス。
【請求項１６】
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、請求項１４に記載のグラフィックスデバイス。
【請求項１７】
前記プロセッサが、前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集する、請求項１４に記載のグラフィックスデバイス。
【請求項１８】
前記メトリックが、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を備える、請求項１４に記載のグラフィックスデバイス。
【請求項１９】
前記プロセッサが、前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択する、請求項１４に記載のグラフィックスデバイス。
【請求項２０】
前記プロセッサが、
レンダリングのために前記ＧＰＵに前記現在レンダリングユニットの前記グラフィックスデータを与え、
前記グラフィックスデータ中のレンダリング境界に達すると、前記現在レンダリングユニットから後続のレンダリングユニットに切り替える、請求項１４に記載のグラフィックスデバイス。
【請求項２１】
前記プロセッサが、少なくともＧＰＵ帯域幅の量とレンダターゲットの数とを評価する、請求項１４に記載のグラフィックスデバイス。
【請求項２２】
前記プロセッサは、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測するために、前記メトリックのうちの少なくとも２つを評価する、請求項１４に記載のグラフィックスデバイス。
【請求項２３】
前記プロセッサが、前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択する、請求項１４に記載のグラフィックスデバイス。
【請求項２４】
前記ＧＰＵがレンダリングエンジンを含み、前記レンダリングモードとして前記直接レンダリングモードが選択されたとき、前記プロセッサは、前記現在レンダリングユニットのグラフィックスデータをフレームバッファに直接レンダリングするように前記ＧＰＵの前記レンダリングエンジンを構成する、請求項１４に記載のグラフィックスデバイス。
【請求項２５】
前記ＧＰＵがレンダリングエンジンを含み、前記レンダリングモードとして前記据置きレンダリングモードが選択されたとき、前記プロセッサは、前記現在レンダリングユニットを複数のタイルに分割するタイリングパスを実行することと、前記複数のタイルの各々のグラフィックスデータをタイルバッファにレンダリングすることと、前記レンダリングされたタイルのための各々を前記タイルバッファからフレームバッファに読み込むこととを行うように前記ＧＰＵの前記レンダリングエンジンを構成する、請求項１４に記載のグラフィックスデバイス。
【請求項２６】
前記プロセッサが、前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信することと、前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成することとを行う、請求項１４に記載のグラフィックスデバイス。
【請求項２７】
前記プロセッサが、ユーザから前記手動で選択されたレンダリングモードを受信するためにグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）を実行する、請求項２６に記載のグラフィックスデバイス。
【請求項２８】
グラフィックスデータを処理するためのグラフィックスデバイスであって、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価するための手段と、
前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択するための手段と、
前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成するための手段と
を備え、前記メトリックのうちの少なくとも２つを評価するための前記手段が、前記少なくとも２つのメトリックに重み付け方式を適用するための手段を備える、グラフィックスデバイス。
【請求項２９】
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、請求項２８に記載のグラフィックスデバイス。
【請求項３０】
前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集するための手段をさらに備える、請求項２８に記載のグラフィックスデバイス。
【請求項３１】
前記メトリックが、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を備える、請求項２８に記載のグラフィックスデバイス。
【請求項３２】
前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択するための手段をさらに備える、請求項２８に記載のグラフィックスデバイス。
【請求項３３】
前記メトリックのうちの少なくとも２つを評価するための前記手段は、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測するための手段を備える、請求項２８に記載のグラフィックスデバイス。
【請求項３４】
前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択するための手段をさらに備える、請求項２８に記載のグラフィックスデバイス。
【請求項３５】
前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信するための手段と、
前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成するための手段とをさらに備える、請求項２８に記載のグラフィックスデバイス。
【請求項３６】
実行されたとき、１つまたは複数のプログラマブルプロセッサに、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、
前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、
前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することと
を行わせる、グラフィックスデータを処理するための命令を備え、前記命令が、前記プログラマブルプロセッサに、前記メトリックのうちの少なくとも２つを、前記少なくとも２つのメトリックに重み付け方式を適用することによって評価することを行わせるコンピュータ可読媒体。
【請求項３７】
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、請求項３６に記載のコンピュータ可読媒体。
【請求項３８】
前記プログラマブルプロセッサに、前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集することを行わせる命令をさらに備える、請求項３６に記載のコンピュータ可読媒体。
【請求項３９】
前記命令が、前記プログラマブルプロセッサに、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を評価することを行わせる、請求項３６に記載のコンピュータ可読媒体。
【請求項４０】
前記命令が、前記プログラマブルプロセッサに、前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択することを行わせる、請求項３６に記載のコンピュータ可読媒体。
【請求項４１】
前記命令は、前記プログラマブルプロセッサに、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測するために、前記メトリックのうちの少なくとも２つを評価することを行わせる、請求項３６に記載のコンピュータ可読媒体。
【請求項４２】
前記命令が、前記プログラマブルプロセッサに、前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択することを行わせる、請求項３６に記載のコンピュータ可読媒体。
【請求項４３】
前記プログラマブルプロセッサに、
前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信することと、
前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成することとを行わせる命令をさらに備える、請求項３６に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データを処理することに関し、より詳細には、グラフィックス処理ユニット（ＧＰＵ）を使用してデータを処理することに関する。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ）は、ディスプレイデバイス上でコンピュータグラフィックスを処理し、表示するために利用される専用グラフィックスレンダリングデバイスである。ＧＰＵは、様々な複雑なアルゴリズムについて典型的な汎用中央処理ユニット（ＣＰＵ）よりも効率的な処理を行う高度並列構造で構築される。たとえば、複雑なアルゴリズムは、２次元（２Ｄ）または３次元（３Ｄ）コンピュータグラフィックスの表現に対応し得る。
【０００３】
ＧＰＵは、モバイルワイヤレス電話、携帯情報端末（ＰＤＡ）、ビデオゲームデバイス、ビデオゲームコンソール、ビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、テレビジョンセットトップボックス、一体型テレビジョングラフィックスデバイス、デジタル記録デバイス、デジタルメディアプレーヤ、全地球測位システム（ＧＰＳ）デバイス、デジタルカメラ、自動車ディスプレイなど、グラフィックスデバイス内に含まれ得る。グラフィックスデバイス上で実行されるグラフィックスアプリケーションは、アプリケーションプログラミングインターフェース（ＡＰＩ）呼、または命令を呼び出すことによって、グラフィックスシーンのコンテンツを記述または定義し得、それらの呼または命令は、今度はＧＰＵを使用して、表示のために画像をレンダリングする。
【０００４】
ＧＰＵのレンダリングエンジンは、直接レンダリングモード（an immediate rendering mode）または据置きレンダリングモード（a deferred rendering mode）のいずれかに従って動作し得る。直接レンダリングモードに従って動作するとき、ＧＰＵのレンダリングエンジンは、グラフィックスデータをフレームバッファに直接レンダリングする。据置きレンダリングモードに従って動作するとき、ＧＰＵのレンダリングエンジンは、グラフィックスデータを複数のタイル（tile）に分割するためのタイリングパス（a tiling pass）を実行し、複数のタイルの各々をローカルタイルバッファにレンダリングし、レンダリングされたタイルのための各々をタイルバッファからフレームバッファに読み込む。現在、直接レンダリングモードは、電力およびシステム帯域幅がそれほど問題ではないグラフィックスデバイスにおいて最も一般的に使用されており、据置きレンダリングモードは、電力およびシステム帯域幅が貴重であるモバイルデバイスにおいて最も一般的に使用されている。
【発明の概要】
【０００５】
本開示では、表示のためにグラフィックスデータをレンダリングするためにグラフィックス処理ユニット（ＧＰＵ）が使用するレンダリングモードを自動的に選択するための技法について説明する。より詳細には、それらの技法は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、評価されたメトリックに基づいて現在レンダリングユニットのための直接レンダリングモードまたは据置きレンダリングモードのいずれかを自動的に選択することとを含む。レンダリングユニットは、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を備え得る。現在レンダリングユニットは、ＧＰＵによって現在レンダリングされているレンダリングユニットを備え得る。レンダリングモードを自動的に選択するための技法は、グラフィックスデータ中の各レンダリング境界において、すなわち、ＧＰＵが、前のレンダリングユニットをレンダリングし終え、現在レンダリングユニットをレンダリングし始めるとき、実行され得る。
【０００６】
最も効率的なレンダリングモードは、あるグラフィックスデータをレンダリングするときのＧＰＵのパフォーマンスに基づいて変動し得る。したがって、選択されたレンダリングモードは、評価されたメトリックに基づいて、グラフィックスデータの現在レンダリングユニットをレンダリングするために、より少ない電力および／またはより少ないシステム帯域幅を使用することを予測されたレンダリングモードのうちの１つであり得る。本開示の技法は、選択されたレンダリングモードに従って動作するようにＧＰＵを構成することを含む。いくつかの場合には、それらの技法は、自動的に選択されたレンダリングモードをオーバーライド（override）する、手動で選択されたレンダリングモードを受信することをも含み得る。手動で選択されたレンダリングモードが受信されたとき、ＧＰＵは、手動で選択されたレンダリングモードに従って動作するように構成され得る。
【０００７】
一例では、本開示は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、選択されたレンダリングモードに従って現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを備える、グラフィックスデータを処理する方法を対象とする。
【０００８】
別の例では、本開示は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを記憶するメモリバッファと、上記メトリックのうちの少なくとも２つを評価することと、評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、選択されたレンダリングモードに従って現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを行う１つまたは複数のプロセッサとを備える、グラフィックスデータを処理するためのグラフィックスデバイスを対象とする。
【０００９】
さらなる一例では、本開示は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価するための手段と、評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択するための手段と、選択されたレンダリングモードに従って現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成するための手段とを備える、グラフィックスデータを処理するためのグラフィックスデバイスを対象とする。
【００１０】
別の例では、本開示は、実行されたとき、１つまたは複数のプログラマブルプロセッサに、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、選択されたレンダリングモードに従って現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを行わせる、グラフィックスデータを処理するための命令を備えるコンピュータ可読媒体を対象とする。
【００１１】
１つまたは複数の例の詳細を添付の図面および以下の説明に記載する。他の特徴、目的、および利点は、その説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１２】
【図１】グラフィックス処理ユニット（ＧＰＵ）が使用するレンダリングモードを自動的に選択するように構成されたグラフィックスドライバを含むグラフィックスデバイスを示すブロック図。
【図２】ＧＰＵが使用するレンダリングモードを自動的に選択するためにグラフィックスドライバによって使用されるグラフィックスデバイスの機能ブロックをより詳細に示すブロック図。
【図３】ＧＰＵが使用するレンダリングモードを自動的に選択するように構成されたグラフィックスドライバの例示的な機能ブロックを示すブロック図。
【図４】ＧＰＵが使用するレンダリングモードを自動的に選択する、グラフィックスドライバの例示的な動作を示すフローチャート。
【図５】１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集する、グラフィックスドライバの例示的な動作を示すフローチャート。
【図６】重み付け方式を使用してメトリックを評価する、グラフィックスドライバの例示的な動作を示すフローチャート。
【発明を実施するための形態】
【００１３】
本開示では、表示のためにグラフィックスデータをレンダリングするためにグラフィックス処理ユニット（ＧＰＵ）が使用するレンダリングモードを自動的に選択するための技法について説明する。より詳細には、それらの技法は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、評価されたメトリックに基づいて現在レンダリングユニットのための直接レンダリングモードまたは据置きレンダリングモードのいずれかを自動的に選択することとを含む。選択されたレンダリングモードは、評価されたメトリックに基づいて、グラフィックスデータの現在レンダリングユニットをレンダリングするために、より少ない電力および／またはより少ないシステム帯域幅を使用することを予測されたレンダリングモードのうちの１つであり得る。レンダリングユニットは、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を備え得る。現在レンダリングユニットは、ＧＰＵによって現在レンダリングされているレンダリングユニットを備え得る。レンダリングモードを自動的に選択するための技法は、グラフィックスデータ中の各レンダリング境界において、すなわち、ＧＰＵが、前のレンダリングユニットをレンダリングし終え、レンダリングし始めるとき、実行され得る。
【００１４】
図１は、グラフィックス処理ユニット（ＧＰＵ）６が使用するレンダリングモードを自動的に選択するように構成されたグラフィックスドライバ１０を含むグラフィックスデバイス２を示すブロック図である。本開示の技法によれば、グラフィックスドライバ１０は、グラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、評価されたメトリックに基づいて現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成することとを行い得る。
【００１５】
グラフィックスデバイス２は、グラフィックスデータを送信および受信することと、様々なグラフィックスデータ処理アプリケーションをサポートすることと、ユーザへの提示のために処理済みグラフィックスデータを出力することとが可能である。グラフィックスデバイス２の例には、限定はしないが、モバイルワイヤレス電話、携帯情報端末（ＰＤＡ）、ビデオゲームデバイス、ビデオゲームコンソール、ビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、テレビジョンセットトップボックス、一体型テレビジョングラフィックスデバイス、デジタル記録デバイス、デジタルメディアプレーヤ、全地球測位システム（ＧＰＳ）デバイス、デジタルカメラ、自動車ディスプレイなどがある。グラフィックスデータは、静止画像データ、ビデオデータ、または他のマルチメディアデータを備え得る。本開示では、グラフィックスデータは、しばしば、複数の連続フレームを含むビデオデータとして説明され得る。ただし、それは、本開示の技法に従ってレンダリングされ得るグラフィックスデータのタイプを限定するものではない。
【００１６】
図１に示す例では、グラフィックスデバイス２は、グラフィックスドライバ１０をもつ中央処理ユニット（ＣＰＵ）４と、レンダリングエンジン１２をもつＧＰＵ６と、デバイスメモリ８と、トランシーバモジュール１４と、ユーザ入力デバイス１６と、ディスプレイ１８とを含む。他の場合には、たとえば、グラフィックスデバイス２がデスクトップコンピュータであるとき、ディスプレイ１８および／またはユーザ入力デバイス１６はグラフィックスデバイス２の外部にあり得る。ＣＰＵ４およびＧＰＵ６は、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路を備え得る。ＣＰＵ４はＧＰＵ６を制御することが可能であり得る。
【００１７】
グラフィックスデバイス２は、ＣＰＵ４上で１つまたは複数のグラフィックスアプリケーションを実行し得る。グラフィックスアプリケーションの例には、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、コンピュータ支援設計（ＣＡＤ）アプリケーション、デジタルカメラアプリケーション、ビデオ会議アプリケーション、シミュレーションおよび視覚化ツール、ビデオストリーミングアプリケーション、またはディスプレイ１８を介したユーザへの提示のために視覚出力を生成する他のアプリケーションがある。
【００１８】
ＣＰＵ４は、グラフィックスアプリケーションのためのアプリケーション命令を呼び出すことによってグラフィックスアプリケーションを実行し、それらの命令は、ＣＰＵ４および／またはＧＰＵ６を使用して画像を生成する。いくつかの場合には、アプリケーション命令はグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）呼から生成され得る。グラフィックスアプリケーションを書き込むためのグラフィックスＡＰＩは、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））、ＯｐｅｎＧＬ（登録商標）  ｆｏｒ  ｅｍｂｅｄｄｅｄ  ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ（登録商標）  ＥＳ）、またはＯｐｅｎＶＧ（ｖｅｃｔｏｒ  ｇｒａｐｈｉｃｓ）のＡＰＩを含み得る。図示の実施形態では、グラフィックスドライバ１０はＣＰＵ４上で動作する。グラフィックスドライバ１０は、アプリケーション命令またはＡＰＩ呼をＣＰＵ４および／またはＧＰＵ６上で実行されるべきコマンドに変換し得る。いくつかの場合には、ＧＰＵ６は、１つまたは複数のグラフィックスアプリケーションを別個に実行し得る。この場合、ＧＰＵ６は、それ自体のグラフィックスドライバをも実行し得る。他の例では、グラフィックスドライバ１０は、ＣＰＵ４またはＧＰＵ６のいずれかが、その処理ユニットによる実行のためにグラフィックスドライバ１０をロードし得るように、デバイスメモリ８に記憶され得る。
【００１９】
ＧＰＵ６は、ディスプレイ１８を介したユーザへの提示のためにグラフィックスデータを画像にレンダリングするために、グラフィックスアプリケーションに従ってＣＰＵ４上のグラフィックスドライバ１０によって発行されたコマンドを実行し得る。たとえば、ＧＰＵ６は、頂点シェーディング、三角形ラスタライゼーション、フラグメントシェーディング、およびピクセルブレンディングのうちの１つまたは複数を実行し得る。ＧＰＵ６は、次いで、レンダリングされたグラフィックスデータをデバイスメモリ８中のフレームバッファに記憶し得る。グラフィックスデータは、レンダリングユニットごとにＧＰＵ６によってレンダリングされ得る。上記で説明したように、レンダリングユニットは、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を備え得る。いくつかの場合には、フレームは１つまたは複数のレンダターゲットを含み得る。レンダターゲットは、テクスチャデータ、カラーデータ、および深度（depth）データなど、フレームのための一定のタイプのグラフィックスデータをそれぞれ保持する、デバイスメモリ８に記憶されたフレームバッファを備え得る。ＧＰＵ６は、フレームに関連するレンダターゲットの各々内のグラフィックスデータをレンダリングし、次いで、単一のフレームとしてデバイスメモリ８に記憶するためにおよびディスプレイ１８上で提示するために、レンダリングされたグラフィックスデータを合成し得る。
【００２０】
図示の例では、ＧＰＵ６は、グラフィックスデータをレンダリングするために直接レンダリングモードまたは据置きレンダリングモードのいずれかに従って動作し得るレンダリングエンジン１２を含む。直接レンダリングモードに従って動作するとき、ＧＰＵ６内のレンダリングエンジン１２は、レンダリングユニットのグラフィックスデータをデバイスメモリ８中のフレームバッファに直接レンダリングする。したがって、レンダリングエンジン１２は、ＧＰＵ６の外部のデバイスメモリ８にレンダリングされているグラフィックスデータについて、すべての読取りおよび書込み呼を行う。このモードは、グラフィックスデータをレンダリングするために、ピクセルブレンディングおよび深度テストなど、デバイスメモリ８において多くの読取り−修正−書込みを必要とするいくつかのグラフィックス演算を実行するとき、大量のシステム帯域幅および電力を使用し得る。
【００２１】
据置きレンダリングモードに従って動作するとき、ＧＰＵ６内のレンダリングエンジン１２は、最初に、現在レンダリングユニットを複数のタイルに分割するためのタイリングパスを実行し得る。複数のタイルの各々について、レンダリングエンジン１２は、次いで、タイルのグラフィックスデータをＧＰＵ６上にローカルに位置するタイルバッファにレンダリングし、完了したとき、レンダリングされたグラフィックスデータをタイルバッファからデバイスメモリ８中のフレームバッファに読み込む。したがって、レンダリングエンジン１２は、ＧＰＵ６上のタイルバッファにレンダリングされているグラフィックスデータについて、大部分の読取りおよび書込み呼を行う。このモード、すなわち、据置きレンダリングは、タイルバッファにおいて読取り−修正−書込みを実行するために少量の電力を使用し、システム帯域幅を使用しないが、タイリングパスをセットアップすることと、レンダリングユニットの各タイルをレンダリングすることとの追加のオーバーヘッドコストを含む。
【００２２】
従来、ラップトップまたはデスクトップコンピュータ内の、あるいは電力および帯域幅の使用量が問題ではない、別のタイプの壁に接続されたグラフィックスデバイス内のＧＰＵは、直接レンダリングモードに従って動作するようにおそらく設計されるであろう。反対に、モバイルワイヤレス電話内の、または電力および帯域幅が貴重である他のモバイルデバイス内のＧＰＵは、据置きレンダリングモードに従って動作するようにおそらく設計されるであろう。しかしながら、最も効率的なレンダリングモードは、あるグラフィックスデータをレンダリングするときのＧＰＵのパフォーマンスに基づいて変動し得る。
【００２３】
本開示における技法によれば、グラフィックスドライバ１０は、ディスプレイ１８上でのユーザへの提示のためにグラフィックスデータをレンダリングするために、ＧＰＵ６が使用するレンダリングモードを自動的に選択し得る。より詳細には、グラフィックスドライバ１０は、グラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価し、評価されたメトリックに基づいて現在レンダリングユニットのための直接レンダリングモードまたは据置きレンダリングモードのいずれかを自動的に選択し得る。それらのメトリックは、前のレンダリングユニットまたは現在レンダリングユニットのグラフィックスデータをレンダリングするときのＣＰＵ４およびＧＰＵ６のパフォーマンスメトリック、電力メトリック、または他のメトリックを含み得る。選択されたレンダリングモードは、評価されたメトリックに基づいて、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ないシステム帯域幅および／またはより少ない電力を使用することを予測されたレンダリングモードのうちの１つであり得る。いくつかの場合には、選択されたレンダリングモードはまた、評価されたメトリックに基づいて、ＣＰＵ４および／またはＧＰＵ６におけるより高い頂点スループットを可能にすること、グラフィックスドライバ１０のオーバーヘッドを低減すること、あるいはさもなければパフォーマンスおよび電力消費を改善することを予測されたレンダリングモードであり得る。
【００２４】
グラフィックスドライバ１０は、次いで、選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成し得る。いくつかの場合には、グラフィックスドライバ１０はまた、自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信し得る。たとえば、グラフィックスドライバ１０は、ＣＰＵ４上で実行されるグラフィックスＡＰＩを介して開発者または他のユーザから、手動で選択されたレンダリングモードを受信し得る。手動で選択されたレンダリングモードが受信されたとき、グラフィックスドライバ１０は、手動で選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成し得る。
【００２５】
メトリックを収集し、評価することと、レンダリングモードを自動的に選択することと、ＧＰＵ６を構成することとを含む、本開示の技法は、各レンダリング境界において実行され得る。レンダリング境界は、たとえば、ＧＰＵ６が、前のレンダリングユニットをレンダリングし終え、現在レンダリングユニットをレンダリングし始めるときの、レンダリングユニット間の移行期間を備え得る。ＧＰＵ６が前のレンダリングユニットのレンダリングを完了すると、ＧＰＵ６は、前のレンダリングユニットのデータを受信することから、レンダリングされるべき現在レンダリングユニットのデータを受信することに切り替える。そのとき、本技法によれば、グラフィックスドライバ１０は、評価されたメトリックに基づいて現在レンダリングユニットのためのレンダリングモードを自動的に選択し得る。現在レンダリングユニットのために選択されたレンダリングモードが、前のレンダリングユニットのために使用されたレンダリングユニットとは異なる場合、グラフィックスドライバ１０はまた、新たに選択されたレンダリングモードに従って動作するようにＧＰＵ６を再構成し得る。ＣＰＵ４は、トランシーバモジュール１４を介して１つまたは複数のグラフィックスアプリケーションをダウンロードし得る。さらに、ＣＰＵ４は、トランシーバモジュール１４を介してグラフィックスアプリケーションに従ってＣＰＵ４および／またはＧＰＵ６によって処理されるべきグラフィックスデータをダウンロードし得る。トランシーバモジュール１４は、グラフィックスデバイス２と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール１４は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。
【００２６】
ＣＰＵ４は、グラフィックスアプリケーションの各々のためのアプリケーション命令をデバイスメモリ８内に記憶し得る。さらに、デバイスメモリ８は、グラフィックスアプリケーションに従ってＣＰＵ４および／またはＧＰＵ６によって処理されるべきグラフィックスデータを記憶し得、ＣＰＵ４および／またはＧＰＵ６から受信された処理済みグラフィックスデータをも記憶し得る。たとえば、デバイスメモリ８は、現在レンダリングユニットのレンダリングされたグラフィックスデータをフレームバッファに記憶し得る。別の例として、デバイスメモリ８は、テクスチャデータ、カラーデータ、および深度データなど、フレームのための一定のタイプのグラフィックスデータをそれぞれ保持する、フレームに関連する１つまたは複数のレンダターゲットを記憶し得る。いくつかの場合には、デバイスメモリ８はまた、フレームのレンダリングされたグラフィックスデータがディスプレイ１８上での提示のためにそれの中にコピーされ得るデスクトップまたはディスプレイ専用フレームバッファを含み得る。
【００２７】
デバイスメモリ８は１つまたは複数のコンピュータ可読記憶媒体を備え得る。デバイスメモリ８の例には、限定はしないが、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。
【００２８】
ディスプレイ１８はグラフィックスデバイス２のための出力デバイスを備える。一例として、ディスプレイ８は、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、または別のタイプのディスプレイデバイスを備え得る。いくつかの場合には、グラフィックスデバイス２は、スピーカーまたは他のタイプのビデオおよびオーディオ出力デバイスを含み得る。ＧＰＵ６は、提示のために処理されたグラフィックスデータをディスプレイ１８に与え得る。たとえば、ＧＰＵ６は、ディスプレイ１８を介してユーザにフレームを提示するために、フレームのレンダリングされたグラフィックスデータを、あるフレームバッファからデバイスメモリ８内のデスクトップまたはディスプレイ専用フレームバッファにコピーし得る。
【００２９】
ユーザ入力デバイス１６は、グラフィックスデバイス２のための１つまたは複数のユーザ入力デバイスを備える。たとえば、ユーザ入力デバイス１６は、トラックボール、マウス、キーボード、マイクロフォンおよび／または他のタイプの入力デバイスを含み得る。いくつかの例では、ユーザ入力デバイス１６は、タッチスクリーンを備え得、ディスプレイ１８の一部として組み込まれ得る。ユーザは、ユーザ入力デバイス１６を介してＣＰＵ４によって実行されるべき１つまたは複数のグラフィックスアプリケーションを選択し得る。図示の例では、ディスプレイ１８およびユーザ入力デバイス１６はグラフィックスデバイス２中に含まれる。他の例では、ディスプレイ１８および／またはユーザ入力デバイス１６はグラフィックスデバイス２の外部にあり得る。
【００３０】
図２は、ＧＰＵ６が使用するレンダリングモードを自動的に選択するためにグラフィックスドライバ１０によって使用されるグラフィックスデバイス２の機能ブロックをより詳細に示すブロック図である。より詳細には、図２は、グラフィックスドライバ１０によって実行されるレンダリングモード選択プロセス中のＣＰＵ４と、ＧＰＵ６と、デバイスメモリ８との間の対話（interaction）を示している。
【００３１】
図２の図示の例では、ＣＰＵ４は、グラフィックスアプリケーション２０と、グラフィックスＡＰＩ２２と、グラフィックスドライバ１０とを実行する。グラフィックスアプリケーション２０は、たとえば、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、コンピュータ支援設計（ＣＡＤ）アプリケーション、デジタルカメラアプリケーション、ビデオ会議アプリケーション、シミュレーションおよび視覚化ツール、ビデオストリーミングアプリケーション、または視覚出力を生成する他のアプリケーションを含み得る。
【００３２】
ＣＰＵ４は、アプリケーション命令を呼び出すことによってグラフィックスアプリケーション２０を実行し得、それらの命令は、ＣＰＵ４および／またはＧＰＵ６を使用して画像を生成する。アプリケーション命令はデバイスメモリ８に記憶され得る。いくつかの場合には、アプリケーション命令は、画像に関連するプリミティブまたは三角形を描くための呼など、グラフィックスＡＰＩ２２によって行われるグラフィックスＡＰＩ呼から生成され得る。グラフィックスＡＰＩ２２は、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））、ＯｐｅｎＧＬ（登録商標）  ｆｏｒ  ｅｍｂｅｄｄｅｄ  ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ（登録商標）  ＥＳ）、またはＯｐｅｎＶＧ（ｖｅｃｔｏｒ  ｇｒａｐｈｉｃｓ）のＡＰＩのうちの１つを備え得る。グラフィックスドライバ１０は、グラフィックスＡＰＩ２２からのアプリケーション命令またはＡＰＩ呼を、グラフィックスアプリケーション２０に従ってＣＰＵ４および／またはＧＰＵ６によって実行されるべきコマンドに変換し得る。
【００３３】
図２の図示の例では、ＧＰＵ６は、レンダリングエンジン１２と、タイルバッファ３０と、ＧＰＵパフォーマンスカウンタ３２とを含む。レンダリングエンジン１２は、表示のためにグラフィックスデータを処理するために使用される１つまたは複数の処理ユニットを含み得る。たとえば、レンダリングエンジン１２は、頂点シェーダ、三角形ラスタライザ、フラグメントシェーダ、および／またはピクセルブレンダを備え得る。ＧＰＵパフォーマンスカウンタ３２は、レンダリング中にＧＰＵ６によって使用されるシステム帯域幅の量を含む、ＧＰＵ６に関連する処理情報を記録するハードウェアカウンタを備え得る。
【００３４】
ＧＰＵ６は、ディスプレイ上での提示のためにグラフィックスデータを画像にレンダリングするために、グラフィックスアプリケーションに従ってＣＰＵ４上のグラフィックスドライバ１０によって発行されたコマンドを実行し得る。たとえば、ＧＰＵ６のレンダリングエンジン１２は、デバイスメモリ８からグラフィックスデータを受信し、頂点シェーディング、三角形ラスタライゼーション、フラグメントシェーディング、およびピクセルブレンディングのうちの１つまたは複数を実行し得る。ＧＰＵ６は、次いで、最終的に、レンダリングされたグラフィックスデータをデバイスメモリ８中のフレームバッファ２８に記憶し得る。グラフィックスデータは、レンダリングユニットごとにレンダリングエンジン１２によってレンダリングされ得る。レンダリングユニットは、たとえば、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を含み得る。
【００３５】
いくつかの場合には、フレームのために１つまたは複数のレンダターゲット２６が定義され得る。レンダターゲット２６は、テクスチャデータ、カラーデータ、および深度データなど、フレームのための一定のタイプのグラフィックスデータをそれぞれ保持する、デバイスメモリ８に記憶されたフレームバッファを備える。所与のフレームに関連するレンダターゲット２６の各々内のグラフィックスデータが、レンダリングエンジン１２によって別個にレンダリングされ、次いでデバイスメモリ８中のフレームバッファ２８中で合成され得る。いくつかの場合には、レンダターゲット２６は、フレームのための同じタイプのデータ、たとえば、カラーデータを保持する、複数のレンダターゲットを含み得る。レンダリングエンジン１２は、複数のレンダターゲット中のグラフィックスデータを同時にレンダリングし得る。グラフィックスデータの各フレームのために異なる数のレンダターゲット２６が定義され得る。
【００３６】
ＧＰＵ６のレンダリングエンジン１２は、グラフィックスデータをレンダリングするために直接レンダリングモードまたは据置きレンダリングモードのいずれかに従って動作し得る。直接レンダリングモードに従って動作するとき、ＧＰＵ６内のレンダリングエンジン１２は、レンダリングユニットのグラフィックスデータをデバイスメモリ８中のフレームバッファ２８に直接レンダリングする。したがって、レンダリングエンジン１２は、ＧＰＵ６の外部に位置するデバイスメモリ８にレンダリングされているグラフィックスデータについて、すべての読取りおよび書込み呼を行う。
【００３７】
据置きレンダリングモードに従って動作するとき、ＧＰＵ６内のレンダリングエンジン１２は、最初に、レンダリングユニットを複数のタイルに分割するためのタイリングパスを実行する。複数のタイルの各々について、レンダリングエンジン１２は、次いで、タイルのグラフィックスデータをＧＰＵ６上にローカルに位置するタイルバッファ３０にレンダリングし、完了したとき、レンダリングされたグラフィックスデータをタイルバッファ３０からデバイスメモリ８中のフレームバッファ２８に読み込む。したがって、レンダリングエンジン１２は、ＧＰＵ６上のタイルバッファ３０にレンダリングされているグラフィックスデータについて、大部分の読取りおよび書込み呼を行う。フレームのために１つまたは複数のレンダターゲット２６が定義された場合、レンダリングエンジン１２は、レンダターゲット２６の各々のためのタイリングパスを実行し、次いでフレームに関連するレンダターゲット２６の各々のための各タイルをレンダリングしなければならない。
【００３８】
タイルバッファ３０は、ＧＰＵ６とともにオンチップで配置された少量の超高帯域幅メモリである。しかしながら、タイルバッファ３０のサイズは、レンダリングユニット全体のためのグラフィックスデータを保持するには小さすぎであり、したがって、レンダリングエンジン１２は、レンダリングユニット全体をレンダリングするために複数のレンダリングパスを実行しなければならない。たとえば、レンダリングエンジン１２は、フレームの各タイルについて１つのレンダリングパスを実行し得るか、またはフレームに関連するレンダターゲット２６の各々のための各タイルについて１つのレンダリングパスを実行し得る。いくつかの場合には、レンダリングエンジン１２はまた、タイルの各々内でレンダリングユニットのどのプリミティブが可視であるかを判断するためにビニング（binning）を実行し得る。ビニングが実行されない場合、ＧＰＵ６のレンダリングエンジン１２は、レンダリングされている各タイルについてレンダリングユニット中に含まれるすべてのプリミティブまたは三角形を描くためにラスタシザーズ（raster scissors）を使用し得る。ビニングを実行することによって、レンダリングエンジン１２は、レンダリングされている所与のタイル内で可視である、レンダリングユニット中のプリミティブのみを描き得る。
【００３９】
グラフィックスデータが、多くの読取り−修正−書込み機能を必要とするピクセルブレンディングと深度テストとを用いた複雑なグラフィックスシーンを表すとき、据置きレンダリングモードは、そのグラフィックスデータをレンダリングするために、より少ない電力およびシステム帯域幅を使用し得る。しかしながら、据置きレンダリングモードは、タイリングパスをセットアップすることと、レンダリングユニットの各タイルのためのグラフィックスデータをレンダリングすることとの追加のオーバーヘッドコストを含む。据置きレンダリングモードは、タイリングパスをセットアップすることと、各レンダリングユニットのための複数のタイルをレンダリングすることとのオーバーヘッドコストが、据置きレンダリングモードの帯域幅低減をオーバーライドしないとき、最も効率的なレンダリングモードであり得る。
【００４０】
反対に、グラフィックスデータが、据置きレンダリングモードが、帯域幅低減を行わないが、処理リソースの消耗の働きをする、単純なグラフィックスシーンを表すとき、直接レンダリングモードは、そのグラフィックスデータをレンダリングするために、より少ない電力およびシステム帯域幅を使用し得る。直接レンダリングモードは、タイリングパスをセットアップすることと、各レンダリングユニットのための複数のタイルをレンダリングすることとのオーバーヘッドコストが、据置きレンダリングモードのいかなる帯域幅低減をもオーバーライドするとき、最も効率的なモードであり得る。
【００４１】
本開示の技法によれば、グラフィックスドライバ１０は、直接レンダリングモードまたは据置きレンダリングモードのどちらが、現在レンダリングユニットのグラフィックスデータをレンダリングするために最少量のシステム帯域幅および／または電力を使用することを予測されるかに基づいて、ＧＰＵ６が使用する直接レンダリングモードまたは据置きレンダリングモードのいずれかを自動的に選択し得る。概して、グラフィックスドライバ１０は、グラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、評価されたメトリックに基づいて直接レンダリングモードまたは据置きレンダリングモードのいずれかを選択することと、選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成することとを行い得る。自動レンダリングモード選択プロセスについて以下でより詳細に説明する。
【００４２】
グラフィックスドライバ１０は、ＧＰＵ６が前のレンダリングユニットから現在レンダリングユニットに切り替えているとき、グラフィックスデータ中のレンダリング境界において現在レンダリングユニットのためのレンダリングモードを選択し得る。上記で説明したように、レンダリングユニットは、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を含み得る。レンダリング境界は、たとえば、ＧＰＵ６が、前のレンダリングユニットをレンダリングし終え、現在レンダリングユニットをレンダリングし始めるときの、レンダリングユニット間の移行期間を備え得る。ＧＰＵ６が前のレンダリングユニットのレンダリングを完了すると、ＧＰＵ６は、前のレンダリングユニットのデータを受信することから、レンダリングされるべき現在レンダリングユニットのデータを受信することに切り替える。そのとき、グラフィックスドライバ１０は、現在レンダリングユニットのためのレンダリングモードを自動的に選択し得る。
【００４３】
このようにして、グラフィックスデータが変化するにつれて、ならびにグラフィックスデータをレンダリングするときのＣＰＵ４および／またはＧＰＵ６のパフォーマンスが変化するにつれて、グラフィックスドライバ１０は、現在の状況のためにＧＰＵ６によって使用されるレンダリングモードを切り替え得る。たとえば、現在レンダリングユニットのために選択されたレンダリングモードが、前のレンダリングユニットのために使用されたレンダリングユニットとは異なる場合、グラフィックスドライバ１０は、新たに選択されたレンダリングモードに従って動作するようにＧＰＵ６を再構成し得る。本技法によれば、グラフィックスドライバ１０は、フレームに関連する単一または複数のレンダターゲット２６の各々について、グラフィックスデータの各フレームについて、あるいはグラフィックスデータのフレームのあらかじめ定義された各セットについて、レンダリングモードを切り替え得る。
【００４４】
所与のレンダリング境界において、グラフィックスドライバ１０は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集し得る。それらのメトリックは、前のレンダリングユニットおよび現在レンダリングユニットのグラフィックスデータをレンダリングするときのＣＰＵ４および／またはＧＰＵ６のパフォーマンスに関連し得る。グラフィックスデータの処理中に、ＧＰＵ６はＣＰＵ４に数フレーム遅れていることがある。したがって、グラフィックスドライバ１０は、前のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＧＰＵ６から収集し、現在レンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＣＰＵ４から収集し得る。
【００４５】
それらのメトリックは、レンダリングユニット中の頂点の数、レンダリングユニット中のフラグメントの数、レンダリングユニット中のフラグメントのロケーション、レンダリング中に使用されるＧＰＵ帯域幅の量、レンダリング中のＧＰＵ６のレジスタに対する負荷量、レンダリング中のＣＰＵ４のレジスタに対する負荷量、フレームのために定義されたレンダターゲット２６の数、フレームのために定義された複数のレンダターゲット（ＭＲＴ：multiple render targets）の数、レンダターゲット２６の次元（たとえば、高さ、幅、ビット／ピクセル）、レンダリングユニットのために深度テストが有効化される（enabled）かどうか、レンダリングユニットのためにブレンディングが有効化されるかどうか、そのユニットのためにステンシルテスト（stencil testing）が有効化されるかどうか、ＧＰＵ６上で実行されるアプリケーションのタイプ、レンダリングユニットのためのプリミティブを描くためのグラフィックスＡＰＩ呼の数、およびＧＰＵパフォーマンスカウンタ３２からの追加情報を含み得る。さらに、それらのメトリックはまた、レンダリングユニットのためにシーンオーバードロー（overdraw）が発生するかどうか、レンダリング中にレンダターゲット２６中で中間レンダ更新（mid-render updates）が発生するかどうか、変換フィードバックが使用されるかどうか、フレームバッファ２８からレンダリングユニット中のフラグメントが読み取られるかどうか、レンダリングユニットのための状態更新の数を含み得、および中間フレーム解像（mid-frame resolve）を示し得る他のメトリックを含み得る。
【００４６】
概して、グラフィックスドライバ１０が、フレームごとまたはレンダターゲットごとでも、メトリックを収集することは、比較的安価である。ただし、一部のハードウェア上では、ＧＰＵパフォーマンスカウンタ３２を読み取るためにＧＰＵ６のパフォーマンスストール（a performance stall）が必要とされ得るので、ＧＰＵパフォーマンスカウンタ３２からの情報は、より低い頻度で収集され得る。グラフィックスドライバ１０は、次いで、収集されたメトリックをメトリックバッファ２４に記憶し得る。メトリックを収集するプロセスについては、図３および図５に関してより詳細に説明する。
【００４７】
グラフィックスドライバ１０は、次に、直接レンダリングモードおよび据置きレンダリングモードのうちのどちらが、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することになるかを予測するために、上記メトリックを評価する。グラフィックスドライバ１０は上記メトリックのうちの少なくとも２つを評価する。２つ以上のメトリックを評価することによって、グラフィックスドライバ１０は、効率的なレンダリングモード選択を行うために、現在レンダリングユニットをレンダリングすることに関連するパフォーマンスおよび電力の制約の完全な理解を得ることがある。
【００４８】
たとえば、グラフィックスドライバ１０は、少なくともＧＰＵ帯域幅とフレームのために定義されたレンダターゲットの数とのメトリックを評価し得る。グラフィックスドライバ１０は、ＧＰＵ帯域幅のみを評価した場合、据置きレンダリングモードでタイリングパスをセットアップすることと、レンダリングユニットの各タイルをレンダリングすることとを行うために必要とされる処理リソースを考慮に入れることができないであろう。ＧＰＵ帯域幅とレンダターゲットの数との両方を評価することによって、グラフィックスドライバ１０は、ＧＰＵ６が使用する最も効率的なレンダリングモードを予測するために、現在レンダリングユニットのグラフィックスデータをレンダリングするためのオーバーヘッドコストと帯域幅コストを比較し得る。
【００４９】
グラフィックスドライバ１０は上記少なくとも２つのメトリックに重み付け方式を適用し得る。たとえば、グラフィックスドライバ１０は、上記メトリックのうちの２つ以上に一定量の重みを割り当てるアルゴリズムを実行し得る。重み付け方式は、上記メトリックのうちの２つ以上に等しい量の重みを適用し得るか、または上記メトリックの各々に異なる量の重みを適用し得る。いくつかの場合には、重み付け方式アルゴリズムはグラフィックスドライバ１０中にプリプログラムされ得る。他の場合には、重み付け方式アルゴリズムはグラフィックスＡＰＩ２２を介して開発者によって設定され得る。このようにして、重み付け方式アルゴリズムは、レンダリングされるべきグラフィックスデータのタイプ、ＣＰＵ４およびＧＰＵ６のシステム要件およびパフォーマンス、または他の考慮事項に基づいて、時間とともに変更され得る。２つ以上のメトリックを評価するプロセスについては、図３および図６に関してより詳細に説明する。
【００５０】
グラフィックスドライバ１０は、次いで、評価されたメトリックに基づいて直接レンダリングモードまたは据置きレンダリングモードを自動的に選択する。より詳細には、グラフィックスドライバ１０は、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することを予測されたレンダリングモードを選択し得る。いくつかの場合には、グラフィックスドライバ１０は、評価されたメトリックに基づいて、ＣＰＵ４および／またはＧＰＵ６におけるより高い頂点スループットを可能にすること、グラフィックスドライバ１０のオーバーヘッドを低減すること、あるいはさもなければパフォーマンスおよび電力消費を改善することをも予測されたレンダリングモードを選択し得る。
【００５１】
いくつかの場合には、グラフィックスドライバ１０はまた、開発者または他のユーザから、手動で選択されたレンダリングモードを受信し得る。たとえば、グラフィックスドライバ１０は、ＣＰＵ４上で実行されるグラフィックスＡＰＩ２２を介して、手動で選択されたレンダリングモードを受信し得る。いくつかの場合には、手動選択は、グラフィックスドライバ１０へのレンダリングモードのうちの好適な１つに関する指示またはヒントを備え得る。グラフィックスドライバ１０によって受信された手動で選択されたレンダリングモードは、自動的に選択されたレンダリングモードをオーバーライドし得る。このようにして、開発者は、どちらのレンダリングモードがレンダリング中により少ない電力および／またはシステム帯域幅を使用することを予測されるかにかかわらず、ＧＰＵ６によって使用されるレンダリングモードを制御することが可能であり得る。
【００５２】
レンダリングモードが、評価されたメトリックに基づいて自動的に選択されたのか、ユーザによって手動で選択されたのかにかかわらず、グラフィックスドライバ１０は、現在レンダリングユニットのグラフィックスデータをレンダリングするために、選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成する。ＧＰＵ６を構成することは、レンダリングエンジン１２から出力されたレンダリングされたグラフィックスデータを、直接レンダリングモードの場合はフレームバッファ２８に直接送るように、または据置きレンダリングモードの場合はタイルバッファ３０に送るように、ＧＰＵ６のレジスタをプログラムすることを備え得る。たとえば、直接レンダリングモードが選択されたとき、グラフィックスドライバ１０は、現在レンダリングユニットのグラフィックスデータをデバイスメモリ８中のフレームバッファ２８に直接レンダリングするようにＧＰＵ６のレンダリングエンジン１２を構成し得る。反対に、据置きレンダリングモードが選択されたとき、グラフィックスドライバ１０は、現在レンダリングユニットを複数のタイルに分割するタイリングパスを実行することと、複数のタイルの各々のグラフィックスデータをタイルバッファ３０にレンダリングすることと、レンダリングされたタイルのための各々をタイルバッファからフレームバッファ２８に読み込むこととを行うようにＧＰＵ６のレンダリングエンジン１２を構成し得る。
【００５３】
グラフィックスドライバ１０は、次いで、選択されたレンダリングモードに従ってレンダリングされるべき現在レンダリングユニットのグラフィックスデータをＧＰＵ６のレンダリングエンジン１２に与え得る。ＧＰＵ６がグラフィックスデータ中のレンダリング境界に達したとき、ＧＰＵ６は次のレンダリングユニットに切り替えることになる。上記で説明したように、レンダリング境界は、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分など、レンダリングユニット間の移行期間を備え得る。ＧＰＵ６が次のレンダリングユニットに切り替えるとき、グラフィックスドライバ１０は、今の現在レンダリングユニットのためのレンダリングモードを自動的に選択するために、上記で説明したプロセスを再び実行する。したがって、連続するレンダリングユニットのために異なるレンダリングモードが使用され得る。図３は、ＧＰＵ６が使用するレンダリングモードを自動的に選択するように構成されたグラフィックスドライバ１０の例示的な機能ブロックを示すブロック図である。上記で説明したように、グラフィックスドライバ１０は、グラフィックスアプリケーションのためのアプリケーション命令またはＡＰＩ呼をＣＰＵ４および／またはＧＰＵ６によって実行されるべきコマンドに変換し得る。たとえば、ＧＰＵ６は、グラフィックスアプリケーションからのコマンドに応答して表示のために画像を準備するためにグラフィックスデータをレンダリングし得る。レンダリングプロセス中に電力およびシステム帯域幅を維持するために、グラフィックスドライバ１０は、評価されたメトリックに基づいて、ＧＰＵ６が使用する直接レンダリングモードまたは据置きレンダリングモードのいずれかを自動的に選択し得る。グラフィックスドライバ１０は、最初に、メトリックを収集し、それらのメトリックをメトリックバッファ２４に記憶し得、次いで、グラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することを予測されたレンダリングモードを選択するために、それらのメトリックを評価し得る。
【００５４】
図３の図示の例では、ＣＰＵ４によって実行されるとき、グラフィックスドライバ１０は、メトリック収集ユニット４０と、メトリック評価ユニット４２と、レンダリングモード選択ユニット４４とを含む。上記で説明したように、メトリックバッファ２４は、ＣＰＵ４内のローカルメモリバッファを備え得る。他の例では、メトリックバッファ２４は、ＣＰＵ４の外部に位置するデバイスメモリ８内のメモリバッファを備え得る。
【００５５】
図示の例では、メトリックバッファ２４は、ＧＰＵ帯域幅４６と、レンダターゲットの数４８と、レンダターゲットの次元４９と、ＧＰＵ負荷５０と、ＣＰＵ負荷５２と、頂点／フラグメントの数５４と、フラグメントのロケーション５４と、深度テスト／ブレンディング有効化５６と、アプリケーションのタイプ５７と、ＡＰＩ呼の数５８とを含む。いくつかの場合には、メトリックバッファ２４は、グラフィックスデータをレンダリングすることに関連する、より多いまたはより少ないメトリックを含み得る。たとえば、メトリックバッファ２４は、図２中のＧＰＵ６のＧＰＵパフォーマンスカウンタ３２から収集された追加情報を含み得る。さらに、メトリックバッファ２４はまた、レンダリングユニットのためにシーンオーバードローが発生するかどうか、レンダリング中にレンダターゲット２６中で中間レンダ更新が発生するかどうか、変換フィードバックが使用されるかどうか、フレームバッファ２８からレンダリングユニット中のフラグメントが読み取られるかどうか、レンダリングユニットのための状態更新の数に関するメトリックを含み得、および中間フレーム解像を示し得る他のメトリックを含み得る。メトリックバッファ２４は、ＧＰＵ帯域幅４６およびレンダターゲットの数４８など、少なくとも２つのメトリックを含むべきである。
【００５６】
グラフィックスドライバ１０は、グラフィックスデータ内の各レンダリング境界において、ＧＰＵ６が使用するレンダリングモードを自動的に選択するために、上記メトリックを収集し、評価し得る。上記で説明したように、レンダリング境界は、たとえば、ＧＰＵ６が、前のレンダリングユニットをレンダリングし終え、現在レンダリングユニットをレンダリングし始めるときの、レンダリングユニット間の移行期間を備え得る。レンダリングユニットは、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を含み得る。所与のレンダリング境界において、ＣＰＵ４上で動作している、グラフィックスドライバ１０は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集するためにメトリック収集ユニット４０を実行する。たとえば、メトリック収集ユニット４０は、前のレンダリングユニットおよび／または現在レンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集し得る。グラフィックスデータの処理中に、ＧＰＵ６はＣＰＵ４に数フレーム遅れていることがある。したがって、メトリック収集ユニット４０は、現在レンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＣＰＵ４から収集し得る。同時に、メトリック収集ユニット４０はまた、前のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＧＰＵ６から収集し得る。
【００５７】
一例として、メトリック収集ユニット４０は、ＧＰＵ６のＧＰＵパフォーマンスカウンタ３２から、前のレンダリングユニットのグラフィックスデータをレンダリングしている間に使用されたＧＰＵ帯域幅４６の量を収集し得る。いくつかの場合には、ＧＰＵパフォーマンスカウンタ３２から情報を収集することは、ＧＰＵ６のパフォーマンスストールを必要とし得る。ＧＰＵ６のパフォーマンスを頻繁にストールさせることは、グラフィックスデータをレンダリングすることのパフォーマンスコストの望ましくない増加を引き起こし得る。したがって、メトリック収集ユニット４０は、特に、レンダリング境界が、各フレーム間でまたはフレームに関連する各レンダターゲット間で発生する場合、あらゆるレンダリング境界においてＧＰＵパフォーマンスカウンタ３２から情報を収集するとは限らないことがある。他の場合には、ＧＰＵ帯域幅の量は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から収集された前のレンダリングユニットまたは現在レンダリングユニットのための頂点／フラグメントの数５４に基づいて判断され得る。グラフィックスデータをレンダリングするためにＧＰＵ６によって使用される大量のシステム帯域幅は、ＧＰＵ６が直接レンダリングモードでデバイスメモリ８に対して多数の読取りおよび／または書込み要求を行っていることを示し得る。
【００５８】
メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、フレームのために定義されたレンダターゲットの数４８をも収集し得る。上記で説明したように、レンダターゲット２６は、テクスチャデータ、カラーデータ、および深度データなど、関連するフレームのための一定のタイプのグラフィックスデータをそれぞれ保持する、デバイスメモリ８に記憶されたフレームバッファを備える。フレームをレンダリングするために、ＧＰＵ６は、フレームに関連するレンダターゲット２６の各々内のグラフィックスデータを別個にレンダリングし、次いで、レンダリングされたグラフィックスデータをフレームバッファ２８中で合成する。所与のフレームのために定義されたレンダターゲットの数が大きいほど、表示のためにそのフレームを完全にレンダリングするために必要とされるレンダリングパスの数は大きくなる。いくつかの場合には、レンダターゲットの数４８は、レンダターゲット２６中に含まれる複数のレンダターゲットの数を含み得る。上記で説明したように、複数のレンダターゲットは、フレームのための同じタイプのデータ、たとえば、カラーデータを保持する、フレームバッファを備え、同時にレンダリングされ得る。
【００５９】
さらに、メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、フレームのために定義されたレンダターゲットの次元４９を収集し得る。その次元は、所与のフレームのための、デバイスメモリ８に記憶されたレンダターゲット２６の各々のための高さおよび幅を備え得る。その次元はまた、レンダターゲット２６の各々のための深度またはビット／ピクセル値を含み得る。所与のフレームのために定義された大きいレンダターゲットは、そのフレームが、多くの読取り−修正−書込み演算を必要とし得るレンダリングのための複雑なグラフィックスシーンを含むことを示し得る。
【００６０】
別の例として、メトリック収集ユニット４０は、前のレンダリングユニットのグラフィックスデータのレンダリング中のＧＰＵ６のレジスタに対するＧＰＵ負荷５０の量を収集し得る。メトリック収集ユニット４０は、前のレンダリングユニットまたは現在レンダリングユニットのグラフィックスデータのレンダリング中のＣＰＵ４のレジスタに対するＣＰＵ負荷５２の量をも収集し得る。ＧＰＵ６およびＣＰＵ４の負荷量は、グラフィックスデータのレンダリング中に任意のパフォーマンスボトルネックがどこで発生していることがあるかを示し得る。
【００６１】
メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、前のレンダリングユニットまたは現在レンダリングユニットのための頂点／フラグメントの数５４をも収集し得る。上述のように、所与のフレーム中に含まれる頂点および／またはフラグメントの数は、そのフレームのグラフィックスデータをレンダリングするために必要とされることになるＧＰＵ帯域幅の量を判断するために使用され得る。さらに、メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、前のレンダリングユニットまたは現在レンダリングユニット中のフラグメントのロケーション５５を収集し得る。フラグメントのロケーション５５は、多数のフラグメントが、単純なグラフィックスシーンにおけるレンダリングユニットにわたって広がっているのか、複雑なグラフィックスシーンとしてのレンダリングユニットの１つのエリアに集まっているのかを示し得る。
【００６２】
さらなる一例では、メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、前のレンダリングユニットまたは現在レンダリングユニットが深度テスト／ブレンディング有効化されるかどうか５６を収集する。所与のレンダリングユニットのために有効化され、実行されるとき、深度テストとピクセルブレンディングとのグラフィックス演算は、多くの読取り−修正−書込み演算を必要とする。いくつかの場合には、深度テスト／ブレンディング有効化５６は、ステンシルテストが有効化されるかどうかをも示し得る。
【００６３】
メトリック収集４０は、前のレンダリングユニットまたは現在レンダリングユニットのためにＣＰＵ４および／またはＧＰＵ６上で実行されるアプリケーションのタイプ５７をも収集する。ＣＰＵ４および／またはＧＰＵ６上で実行される、アプリケーション、すなわち、グラフィックスアプリケーション２０のタイプ５７は、レンダリングのために生成されるグラフィックスシーンのための一般的な複雑さ（complexity）レベルを示し得る。さらに、メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスＡＰＩ２２から、前のレンダリングユニットまたは現在レンダリングユニットのためのＡＰＩ呼、たとえば、グラフィックスデータを用いてプリミティブまたは三角形を描くための呼の数５８を収集し得る。所与のレンダリングユニットが多数のＡＰＩ呼を含むとき、多数のプリミティブが据置きレンダリングモードで複数のタイルのために再び描かれることになる可能性が高いことがある。
【００６４】
上記メトリックが収集され、メトリックバッファ２４に記憶されると、グラフィックスドライバ１０は、メトリック評価ユニット４２を実行して、直接レンダリングモードおよび据置きレンダリングモードのうちのどちらが、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することになるかを予測するために、上記メトリックのうちの少なくとも２つを評価する。メトリック評価ユニット４２は、メトリックバッファ２４に記憶された収集されたメトリックに重み付け方式を適用し得る。たとえば、メトリック評価ユニット４２は、上記メトリックのうちの２つ以上に一定量の重みを割り当てるアルゴリズムを実行し得る。重み付け方式は、上記メトリックのうちの２つ以上に等しい量の重みを適用し得るか、または上記メトリックの各々に異なる量の重みを適用し得る。いくつかの場合には、重み付け方式アルゴリズムはグラフィックスドライバ１０中にプリプログラムされ得る。他の場合には、重み付け方式アルゴリズムはグラフィックスＡＰＩ２２を介して開発者によって設定され得る。このようにして、重み付け方式アルゴリズムは、レンダリングされるべきグラフィックスデータのタイプ、ＣＰＵ４およびＧＰＵ６のシステム要件およびパフォーマンス、または他の考慮事項に基づいて、時間とともに変更され得る。
【００６５】
１つの具体的な例として、メトリック評価ユニット４２は、ＧＰＵ帯域幅４６とレンダターゲットの数４８とのメトリックに最も大きい重みを適用し得る。いくつかの場合には、メトリック評価ユニット４２は、ＧＰＵ帯域幅４６とレンダターゲットの数４８とに等しい量の重みを適用し得る。他の場合には、メトリック評価ユニット４２は、ＧＰＵ帯域幅４６とレンダターゲットの数４８とのうちの１つにわずかにより多くの重みを適用し得る。
【００６６】
レンダリング中にＧＰＵ帯域幅４６が高いとき、それは、ＧＰＵ６のレンダリングエンジン１２が、ＧＰＵ６の外部にあるデバイスメモリ８に対して多数の読取りおよび／または書込み要求を実行していることを示し得る。これは、レンダリングエンジン１２が、直接レンダリングモードでデバイスメモリ８との多数の読取り−修正−書込み演算を必要とするカラーブレンディングまたは深度テスト演算を実行しているとき、発生し得る。したがって、ＧＰＵ帯域幅４６の量が高いとき、システム帯域幅使用量を低減するために据置きレンダリングモードに切り替えることが、より効率的であり得る。据置きレンダリングモードでは、ＧＰＵ６は、電力をほとんど使用せずにおよびシステム帯域幅をまったく使用せずに、ＧＰＵ６上にローカルに位置するタイルバッファ３０に対して読取りおよび／または書込み要求を実行し得る。このようにして、据置きレンダリングモードは、現在レンダリングユニットのためのグラフィックスデータのレンダリング中にＧＰＵ６によって使用されるシステム帯域幅の量をおそらく低減することになる。
【００６７】
ただし、メトリック評価は１つのメトリックのみに依拠（rely）するべきでない。たとえば、単にＧＰＵ帯域幅４６に依拠することは、レンダリングユニットをタイルに分割するためのタイリングパスをセットアップすることと、次いで各タイルを別個にレンダリングすることとを行うために必要とされる処理リソースを考慮に入れることができない。代わりに、メトリック評価ユニット４２は、ＧＰＵ６が使用する最も効率的なレンダリングモードを予測するために、現在レンダリングユニット中のグラフィックスデータをレンダリングするためのオーバーヘッドコストと帯域幅コストを比較し得る。
【００６８】
オーバーヘッドコストを判断するために、パフォーマンス評価ユニット４２は、現在レンダリングユニットのために定義されたレンダターゲットの数４８を評価し得る。上記で説明したように、フレームをレンダリングするために、ＧＰＵ６は、フレームに関連するレンダターゲットの各々内のグラフィックスデータを別個にレンダリングし、次いで、レンダリングされたグラフィックスデータをフレームバッファ２８中で合成する。所与のフレームのために定義されたレンダターゲットの数４８が高いとき、表示のためにそのフレームを完全にレンダリングするために、より多数のレンダリングパスが必要とされる。したがって、レンダターゲットの数４８が高いとき、各レンダターゲットのためのタイリングパスをセットアップすることと、フレームに関連する各レンダターゲットの各タイルをレンダリングすることとを行う必要をなくすことによって、オーバーヘッドコストを低減するために、直接レンダリングモードに切り替えることが、より効率的であり得る。
【００６９】
直接レンダリングモードでは、ＧＰＵ６は、各レンダターゲットのための別個のタイリングパスおよびタイルレンダリングを実行することなしに、フレームに関連する各レンダターゲット中のグラフィックスデータをフレームバッファ２８に直接レンダリングし得る。このようにして、直接レンダリングモードを使用することは、現在レンダリングユニットのためのグラフィックスデータのレンダリング中にＣＰＵ４および／またはＧＰＵ６によって使用される処理リソースの量をおそらく低減することになる。
【００７０】
したがって、ＧＰＵ帯域幅４６が高く、レンダターゲットの数４８が低いとき、メトリック評価ユニット４２は、現在レンダリングユニットのために据置きレンダリングモードが最も効率的であることを予測し得る。上記で説明したように、レンダリングユニットのグラフィックスデータが、多くの読取り−修正−書込み機能を必要とするピクセルブレンディングと深度テストとを用いた複雑なグラフィックスシーンを表すとき、据置きレンダリングモードは、そのグラフィックスデータをレンダリングするために、より少ない電力およびシステム帯域幅を使用し得る。ＧＰＵ帯域幅４６が高いが、レンダターゲットの数４８が低いとき、タイリングパスをセットアップすることと、各レンダターゲットのための複数のタイルをレンダリングすることとのオーバーヘッドコストは、据置きレンダリングモードの帯域幅低減をオーバーライドしない。
【００７１】
一方、ＧＰＵ帯域幅４６が低く、レンダターゲットの数４８が高いとき、メトリック評価ユニット４２は、現在レンダリングユニットのために直接レンダリングモードが最も効率的であることを予測し得る。上記で説明したように、レンダリングユニットのグラフィックスデータが、据置きレンダリングモードが、帯域幅低減を行わないが、処理リソースの消耗の働きをする、単純なグラフィックスシーンを表すとき、直接レンダリングモードは、そのグラフィックスデータをレンダリングするために、より少ない電力およびシステム帯域幅を使用し得る。ＧＰＵ帯域幅４６が低いが、レンダターゲットの数４８が高いとき、タイリングパスをセットアップすることと、各レンダターゲットのための複数のタイルをレンダリングすることとのオーバーヘッドコストは、据置きレンダリングモードのいかなる帯域幅低減をもオーバーライドする。
【００７２】
いくつかの場合には、ＧＰＵ帯域幅４６およびレンダターゲットの数４８に基づいて、どちらのレンダリングモードがレンダリング中により少ない電力および／またはシステム帯域幅を使用することになるかは、直ちに明白でないことがある。たとえば、ＧＰＵ帯域幅４６とレンダターゲットの数４８とが両方とも低いかまたは両方とも高いとき、据置きレンダリングモードのためにタイリングパスをセットアップすることとタイルレンダリングとのオーバーヘッドコストが、据置きレンダリングモードの帯域幅低減をオーバーライドすることになるかどうかは、不明瞭であり得る。それらの場合には、メトリック評価ユニット４２は、現在レンダリングユニットのための最も効率的なレンダリングモードを予測するために次の重み付けされたメトリックに頼り得る。
【００７３】
メトリック評価ユニット４２は、次いで、レンダリング中に任意のボトルネックがどこで発生していることがあるかを判断するために、たとえば、ＧＰＵ負荷５０およびＣＰＵ負荷５２を評価し得る。ＣＰＵ負荷５２が高いとき、それは、据置きレンダリングモードに伴うグラフィックスドライバ１０における追加のオーバーヘッドコストによるＣＰＵ４におけるボトルネックを示し得る。この場合、直接レンダリングモードを使用し、より多くの処理負担をＧＰＵ６上にシフトすることが、より効率的であり得る。他の例では、パフォーマンス評価ユニット４２は、レンダリングユニットのためのプリミティブまたは三角形のドロー（draw）の数を判断するためにＡＰＩ呼の数５８を評価し得る。ＡＰＩ呼の数５８が高いとき、たとえば、レンダリングユニット当たり２，０００呼よりも多いとき、レンダリングユニットの各タイルのための多数のプリミティブを再び描かなければならないことのオーバーヘッドコストが据置きレンダリングモードの帯域幅低減をオーバーライドし得るので、直接レンダリングモードを使用することが、より効率的であり得る。
【００７４】
メトリックが評価されると、グラフィックスドライバ１０は、評価されたメトリックに基づいて直接レンダリングモードまたは据置きレンダリングモードを選択するためにレンダリングモード選択ユニット４４を実行する。より詳細には、レンダリングモード選択ユニット４４は、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することをメトリック評価ユニット４２によって予測されたレンダリングモードを選択し得る。レンダリングモード選択ユニット４４は、次いで、現在レンダリングユニットのグラフィックスデータをレンダリングするために、選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成し得る。ＧＰＵ６を構成することは、レンダリングエンジン１２から出力されたレンダリングされたグラフィックスデータを、直接レンダリングモードの場合はフレームバッファ２８に直接送るように、または据置きレンダリングモードの場合はタイルバッファ３０に送るように、ＧＰＵ６のレジスタをプログラムすることを備え得る。
【００７５】
いくつかの場合には、グラフィックスドライバ１０のレンダリングモード選択ユニットは、グラフィックスＡＰＩ２２を介して開発者または他のユーザから、手動で選択されたまたは示されたレンダリングモードをも受信し得る。手動で選択されたレンダリングモードは、自動的に選択されたレンダリングモードをオーバーライドし得る。手動で選択されたレンダリングモードが受信されたとき、レンダリングモード選択ユニット４４は、手動で選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成し得る。このようにして、開発者は、どちらのレンダリングモードがレンダリング中により少ない電力および／またはシステム帯域幅を使用することを予測されるかにかかわらず、ＧＰＵ６によって使用されるレンダリングモードを制御することが可能であり得る。
【００７６】
図４は、ＧＰＵ６が使用するレンダリングモードを自動的に選択する、グラフィックスドライバ１０の例示的な動作を示すフローチャートである。図示のフローチャートについて、図２からのグラフィックスデバイス２を参照しながら説明する。ＣＰＵ４上のグラフィックスアプリケーション２０の実行中に、グラフィックスドライバ１０は、表示のために画像を生成するためにグラフィックスデータをレンダリングするようにＧＰＵ６に指令し得る。グラフィックスドライバ１０はまた、直接レンダリングモードまたは据置きレンダリングモードのどちらが、グラフィックスデータをレンダリングするために最少量の電力および／またはシステム帯域幅を使用することを予測されるかに基づいて、ＧＰＵ６が使用する直接レンダリングモードまたは据置きレンダリングモードのいずれかを自動的に選択し得る。
【００７７】
グラフィックスデータは複数のレンダリングユニットを備え得る。グラフィックスデータのレンダリングユニットは、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、または単一のレンダターゲットの一部分を含み得る。グラフィックスドライバ１０は、ＧＰＵ６が前のレンダリングユニットから現在レンダリングユニットに切り替えているとき、レンダリング境界において現在レンダリングユニットのためのレンダリングモードを選択し得る。
【００７８】
所与のレンダリング境界において、ＣＰＵ４上で動作しているグラフィックスドライバ１０は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集する（６０）。一般に、グラフィックスドライバ１０は、前のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＧＰＵ６から収集し、現在レンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＣＰＵ４から収集する。グラフィックスドライバ１０は、次いで、収集されたメトリックをメトリックバッファ２４に記憶し得る。メトリックを収集する例示的な動作については、図５でより詳細に説明する。
【００７９】
グラフィックスドライバ１０は、次に、重み付け方式を使用して上記メトリックのうちの少なくとも２つを評価する（６２）。このようにして、グラフィックスドライバ１０は、直接レンダリングモードおよび据置きレンダリングモードのうちのどちらが、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することになるかを予測し得る。たとえば、グラフィックスドライバ１０は、少なくともＧＰＵ帯域幅とフレームのために定義されたレンダターゲットの数とのメトリックに、重み付け方式を適用し得る。グラフィックスドライバ１０は、次いで、据置きレンダリングモードをセットアップすることに関連するオーバーヘッドコストが、現在レンダリングユニットのグラフィックスデータのための据置きレンダリングモードの帯域幅低減をオーバーライドするかどうかを評価し得る。メトリックを評価する例示的な動作については、図６でより詳細に説明する。
【００８０】
メトリックが評価されると、グラフィックスドライバ１０は、その評価に基づいて直接レンダリングモードまたは据置きレンダリングモードを自動的に選択する（６４）。より詳細には、レンダリングモード選択ユニット４４は、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することを予測されたレンダリングモードを選択し得る。
【００８１】
いくつかの場合には、グラフィックスドライバ１０は、グラフィックスＡＰＩ２２を介して開発者または他のユーザから、手動で選択されたレンダリングモードをも受信し得る。（６６のＹＥＳブランチ）。グラフィックスドライバ１０によって受信された手動で選択されたレンダリングモードは、自動的に選択されたレンダリングモードをオーバーライドし得る（６８）。このようにして、開発者は、どちらのレンダリングモードがレンダリング中により少ない電力および／またはシステム帯域幅を使用することを予測されるかにかかわらず、ＧＰＵ６によって使用されるレンダリングモードを制御することが可能であり得る。
【００８２】
レンダリングモードが、評価されたメトリックに基づいて自動的に選択されたのか（６６のＮＯブランチ）、ユーザによって手動で選択されたのか（６６のＹＥＳブランチ、６８）にかかわらず、グラフィックスドライバ１０は、現在レンダリングユニットのグラフィックスデータをレンダリングするために、選択されたレンダリングモードに従って動作するようにＧＰＵ６を構成する（７０）。ＧＰＵ６を構成することは、レンダリングエンジン１２から出力されたレンダリングされたグラフィックスデータを、直接レンダリングモードの場合はフレームバッファ２８に直接送るように、または据置きレンダリングモードの場合はタイルバッファ３０に送るように、ＧＰＵ６のレジスタをプログラムすることを備え得る。
【００８３】
グラフィックスドライバ１０は、次いで、選択されたレンダリングモードに従って動作するように構成されたＧＰＵ６のレンダリングエンジン１２に現在レンダリングユニットのグラフィックスデータを与え得る（７２）。ＧＰＵ６がグラフィックスデータ中のレンダリング境界に達するまで（７４のＮＯブランチ）、グラフィックスドライバ１０は、ＧＰＵ６のレンダリングエンジン１２に現在レンダリングユニットのグラフィックスデータを与え続けることになる（７２）。ＧＰＵ６が、レンダリング境界に達し、現在レンダリングユニットから後続のレンダリングユニットに切り替えると（７４のＹＥＳブランチ）、グラフィックスドライバ１０も後続のレンダリングユニットに切り替える（７６）。グラフィックスドライバ１０は、次いで、後続のレンダリングユニットのために、上記で説明した自動レンダリングモード選択プロセスを実行する。
【００８４】
図５は、１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集する（図４からのステップ６０）、グラフィックスドライバ１０の例示的な動作を示すフローチャートである。図示のフローチャートについて、図３からのグラフィックスドライバ１０のメトリック収集ユニット４０を参照しながら説明する。所与のレンダリング境界において、グラフィックスドライバ１０は、前のレンダリングユニットおよび／または現在レンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを収集するためにメトリック収集ユニット４０を実行する。たとえば、メトリック収集ユニット４０は、現在レンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＣＰＵ４から収集し、前のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックをＧＰＵ６から収集し得る。
【００８５】
メトリック収集ユニット４０は、ＧＰＵ６のＧＰＵパフォーマンスカウンタ３２から、前のレンダリングユニットのレンダリング中に使用されたＧＰＵ帯域幅４６の量を収集し得る（８０）。いくつかの場合には、メトリック収集ユニット４０は、あらゆるレンダリング境界においてＧＰＵパフォーマンスカウンタ３２から情報を収集するとは限らないことがある。ＧＰＵ帯域幅の量は、その場合、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から収集された前のレンダリングユニットまたは現在レンダリングユニットのための頂点／フラグメントの数５４に基づいて判断され得る（以下のステップ８８）。グラフィックスデータをレンダリングするためにＧＰＵ６によって使用される大量の帯域幅は、ＧＰＵ６がデバイスメモリ８に対して多数の読取りおよび／または書込み要求を行っていることを示し得る。
【００８６】
メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、現在レンダリングユニットに関連するフレームのために定義されたレンダターゲットの数４８をも収集し得る（８２）。所与のフレームのために定義されたレンダターゲットの数が大きいほど、表示のためにそのフレームを完全にレンダリングするために必要とされるレンダリングパスの数は大きくなる。メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、現在レンダリングユニットに関連するフレームのために定義されたレンダターゲットの次元４９を収集し得る（８３）。その次元は、所与のフレームのための、デバイスメモリ８に記憶されたレンダターゲット２６の各々のための高さ、幅、およびビット／ピクセルを備え得る。所与のフレームのために定義された大きいレンダターゲットは、そのフレームが、多くの読取り−修正−書込み演算を必要とし得るレンダリングのための複雑なグラフィックスシーンを含むことを示し得る。
【００８７】
メトリック収集ユニット４０は、前のレンダリングユニットのレンダリング中のＧＰＵ６のレジスタに対するＧＰＵ負荷５０の量を収集し得る（８４）。メトリック収集ユニット４０は、前のレンダリングユニットのレンダリング中のＣＰＵ４のレジスタに対するＣＰＵ負荷５２の量をも収集し得る（８６）。ＧＰＵ６およびＣＰＵ４の負荷量は、グラフィックスデータのレンダリング中に任意のパフォーマンスボトルネックがどこで発生していることがあるかを示し得る。
【００８８】
メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、現在レンダリングユニットのための頂点／フラグメントの数５４を収集し得る（８８）。上述のように、所与のレンダリングユニットのグラフィックスデータ中に含まれる頂点および／またはフラグメントの数は、そのレンダリングユニットのグラフィックスデータをレンダリングするために必要とされることになるＧＰＵ帯域幅の量を判断するために使用され得る。メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、現在レンダリングユニット中のフラグメントのロケーション５５をも収集し得る（８９）。フラグメントのロケーションは、多数のフラグメントが、単純なグラフィックスシーンにおけるレンダリングユニットにわたって広がっているのか、複雑なグラフィックスシーンとしてのレンダリングユニットの１つのエリアに集まっているのかを示し得る。
【００８９】
メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスアプリケーション２０から、現在レンダリングユニットが深度テスト／ブレンディング有効化されるかどうか５６を収集し得る（９０）。所与のレンダリングユニットのために有効化され、実行されるとき、深度テストとピクセルブレンディングとのグラフィックス演算は、多くの読取り−修正−書込み演算を必要とする。メトリック収集４０は、現在レンダリングユニットのためにＣＰＵ４および／またはＧＰＵ６上で実行されるアプリケーションのタイプ５７をも収集し得る（９１）。ＣＰＵ４および／またはＧＰＵ６上で実行される、アプリケーション、すなわち、グラフィックスアプリケーション２０のタイプは、レンダリングのために生成されるグラフィックスシーンのための一般的な複雑さレベルを示し得る。
【００９０】
さらに、メトリック収集ユニット４０は、ＣＰＵ４上で実行されるグラフィックスＡＰＩ２２から、前のレンダリングユニットまたは現在レンダリングユニットのためのＡＰＩ呼、たとえば、グラフィックスデータを用いてプリミティブまたは三角形を描くための呼の数５６を収集し得る（９２）。所与のレンダリングユニットが多数のＡＰＩ呼を含むとき、多数のプリミティブが据置きレンダリングモードで複数のタイルのために再び描かれる必要があることになる可能性が高いことがある。グラフィックスドライバ１０のメトリック収集ユニット４０は、次いで、収集されたメトリックをメトリックバッファ２４に記憶し得る。
【００９１】
図６は、重み付け方式を使用してメトリックを評価する（図４からのステップ６２）、グラフィックスドライバ１０の例示的な動作を示すフローチャートである。図示のフローチャートについて、図３からのグラフィックスドライバ１０のメトリック評価ユニット４２を参照しながら説明する。上記メトリックが収集され、メトリックバッファ２４に記憶されると、グラフィックスドライバ１０は、メトリック評価ユニット４２を実行して、直接レンダリングモードおよび据置きレンダリングモードのうちのどちらが、現在レンダリングユニットのグラフィックスデータをレンダリングするために、より少ない電力および／またはシステム帯域幅を使用することになるかを予測するために、上記メトリックのうちの少なくとも２つを評価する。
【００９２】
メトリック評価ユニット４２は、メトリックバッファ２４に記憶された収集されたメトリックに重み付け方式を適用する（９４）。たとえば、メトリック評価ユニット４２は、上記メトリックのうちの２つ以上に一定量の重みを割り当てるアルゴリズムを実行し得る。図示の例示的な動作では、メトリック評価４２は、ＧＰＵ帯域幅４６とレンダターゲットの数４８とのメトリックに最も大きい重みを適用する（９６）。
【００９３】
ＧＰＵ帯域幅４６が高く、レンダターゲットの数４８が低いとき（９８のＹＥＳブランチ）、メトリック評価ユニット４２は、現在レンダリングユニットのために据置きレンダリングモードが最も効率的であることを予測し得る（１００）。上記で説明したように、レンダリングユニットのグラフィックスデータが、多くの読取り−修正−書込み機能を必要とするピクセルブレンディングと深度テストとを用いた複雑なグラフィックスシーンを表すとき、据置きレンダリングモードは、そのグラフィックスデータをレンダリングするために、より少ないシステム帯域幅および電力を使用し得る。ＧＰＵ帯域幅４６が高いが、レンダターゲットの数４８が低いとき、タイリングパスをセットアップすることと、各レンダターゲットのための複数のタイルをレンダリングすることとのオーバーヘッドコストは、据置きレンダリングモードの帯域幅低減をオーバーライドしない。
【００９４】
ＧＰＵ帯域幅４６が低く、レンダターゲットの数４８が高いとき（９８のＮＯブランチおよび１０２のＹＥＳブランチ）、メトリック評価ユニット４２は、現在レンダリングユニットのために直接レンダリングモードが最も効率的であることを予測し得る（１０４）。上記で説明したように、レンダリングユニットのグラフィックスデータが、据置きレンダリングモードが、帯域幅低減を行わないが、処理リソースの消耗の働きをする、単純なグラフィックスシーンを表すとき、直接レンダリングモードは、そのグラフィックスデータをレンダリングするために、より少ないシステム帯域幅および電力を使用し得る。ＧＰＵ帯域幅４６が低いが、レンダターゲットの数４８が高いとき、タイリングパスをセットアップすることと、各レンダターゲットのための複数のタイルをレンダリングすることとのオーバーヘッドコストは、据置きレンダリングモードのいかなる帯域幅低減をもオーバーライドする。
【００９５】
ＧＰＵ帯域幅４６が低く、レンダターゲットの数４８も低いとき、またはＧＰＵ帯域幅４６が高く、レンダターゲットの数４８も高いとき（９８のＮＯブランチおよび１０２のＮＯブランチ）、メトリック評価ユニット４２は、現在レンダリングユニットのための最も効率的なレンダリングモードを予測するために次の重み付けされたメトリックに頼り得る（１０６）。たとえば、ＧＰＵ帯域幅４６とレンダターゲットの数４８とが両方とも低いかまたは両方とも高いとき、据置きレンダリングモードのためにタイリングパスをセットアップすることとタイルレンダリングとのオーバーヘッドコストが、据置きレンダリングモードの帯域幅低減をオーバーライドすることになるかどうかは、不明瞭であり得る。この場合、ＧＰＵ帯域幅４６およびレンダターゲットの数４８に基づいて、どちらのレンダリングモードがレンダリング中により少ないシステム帯域幅および／または電力を使用することになるかが、直ちに明白でないとき、任意の追加の重み付けされたメトリックが使用され得る。
【００９６】
図６の図示のフローチャートは、重み付け方式を使用してメトリックを評価することの一例にすぎない。他の例では、異なる量の重みが異なるメトリックに適用され得る。たとえば、最も効率的なレンダリングモードを予測するために２つ以上の他のメトリックが最も大きい重みを与えられ得、またはすべてのメトリックが等しい重みを与えられ得る。さらに他の例では、最も効率的なレンダリングモードを予測するために異なる評価方式が使用され得る。
【００９７】
１つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能または動作は、１つまたは複数の命令またはコードとして非一時的コンピュータ可読媒体上に記憶され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、（１）非一時的である有形コンピュータ可読記憶媒体、あるいは（２）信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび／またはデータ構造を取り出すために１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
【００９８】
限定ではなく例として、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリなど、非一時的媒体、あるいは命令またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線（ＤＳＬ）、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、ＤＳＬ、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびブルーレイ（登録商標）ディスク（disc）を含み、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【００９９】
命令は、１つまたは複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、あるいは他の等価な集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび／またはソフトウェアモジュール内に与えられ得、あるいは複合コーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【０１００】
本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明した１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
【０１０１】
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
グラフィックスデータを処理する方法であって、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、
前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、
前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを備える、方法。
［Ｃ２］
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、［Ｃ１］に記載の方法。
［Ｃ３］
前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集することをさらに備える、［Ｃ１］に記載の方法。
［Ｃ４］
少なくとも２つのメトリックを評価することが、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を評価することを備える、［Ｃ１］に記載の方法。
［Ｃ５］
レンダリングモードを自動的に選択することが、前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択することを備える、［Ｃ１］に記載の方法。
［Ｃ６］
レンダリングのために前記ＧＰＵに前記現在レンダリングユニットの前記グラフィックスデータを与えることと、
前記グラフィックスデータ中のレンダリング境界に達すると、前記現在レンダリングユニットから後続のレンダリングユニットに切り替えることとをさらに備える、［Ｃ１］に記載の方法。
［Ｃ７］
前記メトリックのうちの少なくとも２つを評価することが、前記少なくとも２つのメトリックに重み付け方式を適用することを備える、［Ｃ１］に記載の方法。
［Ｃ８］
前記メトリックのうちの少なくとも２つを評価することが、少なくともＧＰＵ帯域幅の量とフレームのために定義されたレンダターゲットの数とを評価することを備える、［Ｃ１］に記載の方法。
［Ｃ９］
前記メトリックのうちの少なくとも２つを評価することは、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測することを備える、［Ｃ１］に記載の方法。
［Ｃ１０］
レンダリングモードを自動的に選択することが、前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択することを備える、［Ｃ１］に記載の方法。
［Ｃ１１］
ＧＰＵを構成することは、前記レンダリングモードとして前記直接レンダリングモードが選択されたとき、前記現在レンダリングユニットのグラフィックスデータをフレームバッファに直接レンダリングするように前記ＧＰＵのレンダリングエンジンを構成することを備える、［Ｃ１］に記載の方法。
［Ｃ１２］
ＧＰＵを構成することは、前記レンダリングモードとして前記据置きレンダリングモードが選択されたとき、前記現在レンダリングユニットを複数のタイルに分割するタイリングパスを実行することと、前記複数のタイルの各々のグラフィックスデータをタイルバッファにレンダリングすることと、前記レンダリングされたタイルのための各々を前記タイルバッファからフレームバッファに読み込むこととを行うように前記ＧＰＵのレンダリングエンジンを構成することを備える、［Ｃ１］に記載の方法。
［Ｃ１３］
前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信することをさらに備え、ＧＰＵを構成することが、前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成することを備える、［Ｃ１］に記載の方法。
［Ｃ１４］
手動で選択されたレンダリングモードを受信することが、ユーザから前記手動で選択されたレンダリングモードを受信するためにグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）を実行することを備える、［Ｃ１３］に記載の方法。
［Ｃ１５］
グラフィックスデータを処理するためのグラフィックスデバイスであって、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連するメトリックを記憶するメモリバッファと、
前記メトリックのうちの少なくとも２つを評価することと、前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを行う１つまたは複数のプロセッサとを備える、グラフィックスデバイス。
［Ｃ１６］
前記１つまたは複数のプロセッサが、中央処理ユニット（ＣＰＵ）および前記ＧＰＵのうちの１つまたは複数を備える、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ１７］
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ１８］
前記プロセッサが、前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ１９］
前記メトリックが、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を備える、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２０］
前記プロセッサが、前記前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２１］
前記プロセッサが、
レンダリングのために前記ＧＰＵに前記現在レンダリングユニットの前記グラフィックスデータを与え、
前記グラフィックスデータ中のレンダリング境界に達すると、前記現在レンダリングユニットから後続のレンダリングユニットに切り替える、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２２］
前記プロセッサが、前記メトリックのうちの少なくとも２つを、前記少なくとも２つのメトリックに重み付け方式を適用することによって評価する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２３］
前記プロセッサが、少なくともＧＰＵ帯域幅の量とレンダターゲットの数とを評価する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２４］
前記プロセッサは、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測するために、前記メトリックのうちの少なくとも２つを評価する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２５］
前記プロセッサが、前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２６］
前記ＧＰＵがレンダリングエンジンを含み、前記レンダリングモードとして前記直接レンダリングモードが選択されたとき、前記プロセッサは、前記現在レンダリングユニットのグラフィックスデータをフレームバッファに直接レンダリングするように前記ＧＰＵの前記レンダリングエンジンを構成する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２７］
前記ＧＰＵがレンダリングエンジンを含み、前記レンダリングモードとして前記据置きレンダリングモードが選択されたとき、前記プロセッサは、前記現在レンダリングユニットを複数のタイルに分割するタイリングパスを実行することと、前記複数のタイルの各々のグラフィックスデータをタイルバッファにレンダリングすることと、前記レンダリングされたタイルのための各々を前記タイルバッファからフレームバッファに読み込むこととを行うように前記ＧＰＵの前記レンダリングエンジンを構成する、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２８］
前記プロセッサが、前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信することと、前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成することとを行う、［Ｃ１５］に記載のグラフィックスデバイス。
［Ｃ２９］
前記プロセッサが、ユーザから前記手動で選択されたレンダリングモードを受信するためにグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）を実行する、［Ｃ２８］に記載のグラフィックスデバイス。
［Ｃ３０］
グラフィックスデータを処理するためのグラフィックスデバイスであって、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価するための手段と、
前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択するための手段と、
前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成するための手段とを備える、グラフィックスデバイス。
［Ｃ３１］
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３２］
前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集するための手段をさらに備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３３］
前記メトリックが、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３４］
前記前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択するための手段をさらに備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３５］
前記メトリックのうちの少なくとも２つを評価するための前記手段が、前記少なくとも２つのメトリックに重み付け方式を適用するための手段を備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３６］
前記メトリックのうちの少なくとも２つを評価するための前記手段は、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測するための手段を備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３７］
前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択するための手段をさらに備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３８］
前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信するための手段と、
前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成するための手段とをさらに備える、［Ｃ３０］に記載のグラフィックスデバイス。
［Ｃ３９］
実行されたとき、１つまたは複数のプログラマブルプロセッサに、
１つまたは複数のレンダリングユニットのグラフィックスデータをレンダリングすることに関連する少なくとも２つのメトリックを評価することと、
前記評価されたメトリックに基づいて直接レンダリングモードおよび据置きレンダリングモードのうちの１つとして現在レンダリングユニットのためのレンダリングモードを自動的に選択することと、
前記選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするようにグラフィックス処理ユニット（ＧＰＵ）を構成することとを行わせる、グラフィックスデータを処理するための命令を備えるコンピュータ可読媒体。
［Ｃ４０］
前記レンダリングユニットの各々が、フレームのセット、フレーム、フレームの一部分、フレームに関連する複数のレンダターゲット、フレームに関連する単一のレンダターゲット、またはフレームに関連する単一のレンダターゲットの一部分のうちの１つを備える、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４１］
前記プログラマブルプロセッサに、前のレンダリングユニットおよび現在レンダリングユニットのうちの少なくとも１つのグラフィックスデータをレンダリングすることに関連するメトリックを収集することを行わせる命令をさらに備える、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４２］
前記命令が、前記プログラマブルプロセッサに、頂点の数、フラグメントの数、フラグメントのロケーション、ＧＰＵ帯域幅の量、ＧＰＵに対する負荷量、中央処理ユニット（ＣＰＵ）に対する負荷量、フレームのために定義されたレンダターゲットの数、フレームのために定義された複数のレンダターゲット（ＭＲＴ）の数、深度テスト有効化、ブレンディング有効化、ステンシルテスト有効化、レンダターゲットの次元、ＧＰＵ上で実行されるアプリケーションのタイプ、グラフィックスアプリケーションプログラムインターフェース（ＡＰＩ）呼の数、およびＧＰＵハードウェアパフォーマンスカウンタ情報のうちの２つ以上を評価することを行わせる、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４３］
前記命令が、前記プログラマブルプロセッサに、前のレンダリングユニットと前記現在レンダリングユニットとの間の前記グラフィックスデータ中のレンダリング境界において前記現在レンダリングユニットのための前記レンダリングモードを自動的に選択することを行わせる、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４４］
前記命令が、前記プログラマブルプロセッサに、前記メトリックのうちの少なくとも２つを、前記少なくとも２つのメトリックに重み付け方式を適用することによって評価することを行わせる、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４５］
前記命令は、前記プログラマブルプロセッサに、前記直接レンダリングモードおよび前記据置きレンダリングモードのうちのどちらの１つが、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することになるかを予測するために、前記メトリックのうちの少なくとも２つを評価することを行わせる、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４６］
前記命令が、前記プログラマブルプロセッサに、前記評価されたメトリックに基づいて、前記現在レンダリングユニットの前記グラフィックスデータをレンダリングするために、より少ない電力およびより少ないシステム帯域幅のうちの少なくとも１つを使用することを予測された前記直接レンダリングモードおよび前記据置きレンダリングモードのうちの前記１つを自動的に選択することを行わせる、［Ｃ３９］に記載のコンピュータ可読媒体。
［Ｃ４７］
前記プログラマブルプロセッサに、
前記自動的に選択されたレンダリングモードをオーバーライドする、手動で選択されたレンダリングモードを受信することと、
前記手動で選択されたレンダリングモードに従って前記現在レンダリングユニットのグラフィックスデータをレンダリングするように前記ＧＰＵを構成することとを行わせる命令をさらに備える、［Ｃ３９］に記載のコンピュータ可読媒体。
【図１】
0005855743.tif 000002
【図２】
0005855743.tif 000003
【図３】
0005855743.tif 000004
【図４】
0005855743.tif 000005
【図５】
0005855743.tif 000006
【図６】
0005855743.tif 000007