(57)【特許請求の範囲】
【請求項１】
フレームをレンダリングするためのレンダリングコマンドを生成することであって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、
グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを探知することと、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定することであって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することと
を備えるグラフィックス処理の方法。
【請求項２】
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しないこと
をさらに備える請求項１に記載の方法。
【請求項３】
実行コマンドを第１のバッファに保存することと、
前記レンダリングコマンドを第２のバッファに保存することと
をさらに備え、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるように前記レンダリングコマンドを変更することを備える請求項２に記載の方法。
【請求項４】
前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加することと、
前記第１のバッファ内の前記実行コマンドを実行することと
をさらに備える請求項３に記載の方法。
【請求項５】
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含む請求項１に記載の方法。
【請求項６】
前記複数のレンダリングモードのうちの１つを決定することは、現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定することをさらに備える請求項５に記載の方法。
【請求項７】
前記複数のレンダリングモードのうちの１つを決定することは、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定することをさらに備える請求項５に記載の方法。
【請求項８】
ビニングモード特有の情報を第１のレジスタに保存することと、前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、グラフィックス・メモリ・アドレス、および視認性ストリームが使用されているか否かのうちの少なくとも１つを含む、
直接レンダリングモード特有の情報を第２のレジスタに保存することと、前記直接レンダリングモード特有の情報は、システム・メモリ・アドレスを含む、
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用することと
をさらに備える請求項１に記載の方法。
【請求項９】
グラフィックス処理のために構成された装置であって、
フレームをレンダリングするためのレンダリングコマンドを生成するための手段であって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成するための手段と、
グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを探知するための手段と、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定するための手段であって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定するための手段と、
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更するための手段と
を備える装置。
【請求項１０】
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しないための手段
をさらに備える請求項９に記載の装置。
【請求項１１】
実行コマンドを第１のバッファに保存するための手段と、
前記レンダリングコマンドを第２のバッファに保存するための手段と
をさらに備え、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるように前記レンダリングコマンドを変更することを備える請求項１０に記載の装置。
【請求項１２】
前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加するための手段と、
前記第１のバッファ内の前記実行コマンドを実行するための手段と
をさらに備える請求項１１に記載の装置。
【請求項１３】
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含む請求項９に記載の装置。
【請求項１４】
前記複数のレンダリングモードのうちの１つを決定するための前記手段は、現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するための手段をさらに備える請求項１３に記載の装置。
【請求項１５】
前記複数のレンダリングモードのうちの１つを決定するための前記手段は、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するための手段をさらに備える請求項１３に記載の装置。
【請求項１６】
ビニングモード特有の情報を第１のレジスタに保存するための手段と、前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、グラフィックス・メモリ・アドレス、および視認性ストリームが使用されているか否かのうちの少なくとも１つを含む、
直接レンダリングモード特有の情報を第２のレジスタに保存するための手段と、前記直接レンダリングモード特有の情報は、システム・メモリ・アドレスを含む、
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用するための手段と
をさらに備える請求項９に記載の装置。
【請求項１７】
グラフィックス処理のために構成された装置であって、
フレームをレンダリングするためのレンダリングコマンドを生成することであって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、
グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを探知することと、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定することであって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することと
を行うように構成された１つ以上のプロセッサを備える装置。
【請求項１８】
前記１つ以上のプロセッサが、
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しない
ようにさらに構成された請求項１７に記載の装置。
【請求項１９】
前記１つ以上のプロセッサが、
実行コマンドを第１のバッファに保存し、
前記レンダリングコマンドを第２のバッファに保存する
ようにさらに構成され、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるように前記レンダリングコマンドを変更することを備える請求項１８に記載の装置。
【請求項２０】
前記１つ以上のプロセッサが、前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加するようにさらに構成され、
前記装置が、前記第１のバッファ内の前記実行コマンドを実行するように構成されたグラフィックスプロセッサをさらに備える請求項１９に記載の装置。
【請求項２１】
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含む請求項１７に記載の装置。
【請求項２２】
前記１つ以上のプロセッサが、現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するようにさらに構成される請求項２１に記載の装置。
【請求項２３】
前記１つ以上のプロセッサが、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するようにさらに構成された請求項２１に記載の装置。
【請求項２４】
前記１つ以上のプロセッサが、
ビニングモード特有の情報を第１のレジスタに保存し、前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、グラフィックス・メモリ・アドレス、および視認性ストリームが使用されているか否かのうちの少なくとも１つを含む、
直接レンダリングモード特有の情報を第２のレジスタに保存し、前記直接レンダリングモード特有の情報は、システム・メモリ・アドレスを含む、
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用する
ようにさらに構成された請求項１７に記載の装置。
【請求項２５】
前記１つ以上のプロセッサが、モバイルデバイス内にある請求項１７に記載の装置。
【請求項２６】
命令群を格納しているコンピュータ読取可能な記憶媒体であって、
前記命令群が、実行されたときに、グラフィックス処理のために構成されたデバイスの１つ以上のプロセッサに、
フレームをレンダリングするためのレンダリングコマンドを生成することであって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成すること、
グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを探知すること、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定することであって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定すること、および
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更すること
を実行させるコンピュータ読取可能な記憶媒体。
【請求項２７】
前記命令群が、前記１つ以上のプロセッサに、
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しないこと
をさらに実行させる請求項２６に記載のコンピュータ読取可能な記憶媒体。
【請求項２８】
前記命令群が、前記１つ以上のプロセッサに、
実行コマンドを第１のバッファに保存すること、および
前記レンダリングコマンドを第２のバッファに保存すること
をさらに実行させ、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるように前記レンダリングコマンドを変更することを備える請求項２７に記載のコンピュータ読取可能な記憶媒体。
【請求項２９】
前記命令群が、前記１つ以上のプロセッサに、
前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加すること、および
前記第１のバッファ内の前記実行コマンドをグラフィックスプロセッサに実行させること
をさらに実行させる請求項２８に記載のコンピュータ読取可能な記憶媒体。
【請求項３０】
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含む請求項２６に記載のコンピュータ読取可能な記憶媒体。
【請求項３１】
前記命令群が、前記１つ以上のプロセッサに、
現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定すること
をさらに実行させる請求項３０に記載のコンピュータ読取可能な記憶媒体。
【請求項３２】
前記命令群が、前記１つ以上のプロセッサに、
現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定すること
をさらに実行させる請求項３０に記載のコンピュータ読取可能な記憶媒体。
【請求項３３】
前記命令群が、前記１つ以上のプロセッサに、
ビニングモード特有の情報を第１のレジスタに保存すること、前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、グラフィックス・メモリ・アドレス、および視認性ストリームが使用されているか否かのうちの少なくとも１つを含む、
直接レンダリングモード特有の情報を第２のレジスタに保存すること、前記直接レンダリングモード特有の情報は、システム・メモリ・アドレスを含む、および
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用すること
をさらに実行させる請求項２６に記載のコンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本出願は、２０１１年１１月３０日に出願された米国仮出願第６１／５６５，３９７号の利益を主張し、この米国仮出願は、その全体が参照により本明細書に組み込まれる。
【０００２】
[0002]本開示は、グラフィックス処理のための技法に関し、より詳しくは、グラフィックス処理における直接レンダリング（ｄｉｒｅｃｔ  ｒｅｎｄｅｒｉｎｇ）とビニング（ｂｉｎｎｉｎｇ）との間で切り換えるための技法に関する。
【背景技術】
【０００３】
[0003]グラフィカル・ユーザ・インターフェイスおよびビデオゲームに関するコンテンツなど、表示のためのビジュアルコンテンツは、グラフィックス・プロセシング・ユニット（ＧＰＵ）によって生成されうる。ＧＰＵは、二次元または三次元（３Ｄ）のオブジェクトを、表示されうる二次元（２Ｄ）のピクセル表現に変換することができる。３Ｄのオブジェクトについての情報を表示されうるビットマップに変換することは、ピクセルレンダリングとして知られており、かなりのメモリおよび処理パワーを必要とする。過去において、３Ｄグラフィックスの能力は、強力なワークステーションにおいてのみ利用可能であった。しかしながら、今や３Ｄグラフィックスアクセラレータ（ａｃｃｅｌｅｒａｔｏｒｓ）が、パーソナルコンピュータ（ＰＣ）、ならびにスマートフォン、タブレットコンピュータ、ポータブル・メディア・プレイヤー、携帯型のテレビゲーム機などの組み込みデバイス（ｅｍｂｅｄｄｅｄ  ｄｅｖｉｃｅｓ）に普通に見つけられる。典型的には、組み込みデバイスは通常のＰＣと比べて小さい演算パワーおよびメモリ容量を有する。したがって、３Ｄグラフィックスレンダリング技法において複雑さが増すと、そのような技法を組み込みデバイスにおいて実行することが難しくなる。
【発明の概要】
【０００４】
[0004]一般に、本開示は、グラフィックス処理における直接レンダリングとビニングとの間で切り換えるための技法、およびレンダリングモードを決定するための技法を説明する。
【０００５】
[0005]本開示の一例においては、グラフィックス処理の方法が、フレームをレンダリングするためのレンダリングコマンドを生成することであって、レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知することと、レンダリング特性に基づいて、フレームについて、複数のレンダリングモードのうちの１つを決定することであって、複数のレンダリングモードはビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することとを備える。
【０００６】
[0006]本開示の別の例では、グラフィックス処理の方法が、シーンのプリミティブ（ｐｒｉｍｉｔｉｖｅｓ）についてビニング操作を実行することであって、プリミティブはビンに分けられる、実行することと、シーンの一領域内でプリミティブのオーバードロー（ｏｖｅｒｄｒａｗ）の量を表すオーバードロー数を計算することと、計算されたスコア基づいてレンダリングモードを決定することとを備える。
【０００７】
[0007]本開示の別の例では、グラフィックス処理の方法が、グラフィックス操作の実行のための操作コマンドを第１のバッファに保存することと、書き込みコマンドを第２のバッファに保存することとを備え、書き込みコマンドが、実行されたときに、第１のバッファ内の操作コマンドを変更し、変更された操作コマンドを生成する。
【０００８】
[0008]本開示の技法は、装置ならびに上記技法をプロセッサに実行させるための命令群を格納するコンピュータ読取可能な記憶媒体に関しても説明される。１または複数の例の詳細が、添付図面および以下の説明において述べられる。他の特徴、目的、および利点が、説明と図面から、および特許請求の範囲から明らかになるだろう。
【図面の簡単な説明】
【０００９】
【図１】図１は、本開示の技法を使用するように構成された例示的なコンピュータデバイスを示すブロック図である。
【図２】図２は、本開示の技法を使用するように構成された例示的な処理ユニットを示すブロック図である。
【図３】図３は、ビニング・レンダリング・モードにおいて使用されるときのフレームのビンを示す概念図である。
【図４】図４は、ビニング・レンダリング・モードにおいて使用されるときのフレームのビンをさらに詳しく示す概念図である。
【図５】図５は、「ソフトウェア」ビニングを使用するビニング・レンダリング・モードに関するコマンドバッファを説明する概念図である。
【図６】図６は、「ハードウェア」ビニングを使用するビニング・レンダリング・モードに関するコマンドバッファを説明する概念図である。
【図７】図７は、直接レンダリングモードに関するコマンドバッファを説明する概念図である。
【図８】図８は、本開示の一例によるレンダリングコマンドパッチング（ｐａｔｃｈｉｎｇ）を説明する概念図である。
【図９】図９は、本開示の一例によるオーバードロートラッキング（ｔｒａｃｋｉｎｇ）を説明する概念図である。
【図１０】図１０は、本開示の一例による４つのビンにおけるオーバードローを説明する概念図である。
【図１１】図１１は、本開示の一例によるレンダリングモードの選択を説明する概念図である。
【図１２】図１２は、本開示の別の例によるレンダリングコマンドパッチングを説明する概念図である。
【図１３】図１３は、本開示の一例による方法を説明するフローチャートである。
【図１４】図１４は、本開示の別の例による方法を説明するフローチャートである。
【図１５】図１５は、本開示の他の例による方法を説明するフローチャートである。
【図１６】図１６は、本開示の別の例による方法を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
[0025]本開示は、グラフィックス処理のための技法に関し、より詳しくは、グラフィックス処理システムにおけるレンダリングモードを決定する、およびレンダリングモード間で切り換えるための技法に関する。
【００１１】
[0026]現在のグラフィックス・レンダリング・システムは、典型的には、シーンをレンダリングするためにビニング・レンダリング・モード（タイルベースの（ｔｉｌｅ−ｂａｓｅｄ）単位レンダリングと呼ばれることもある）または直接レンダリングモードを利用する。ビニングレンダリングにおいては、２Ｄまたは３Ｄシーンの一フレームが、このフレームをより小さな部分（例えば、矩形のビンまたはタイル（ｔｉｌｅｓ））に分割すること、およびこれらのビンの各々を別々にレンダリングすることによってレンダリングされる。ビニングレンダリングは、例えばモバイルアプリケーションなど、専用の高速なグラフィックメモリ（ＧＭＥＭ）があまり利用できない用途において有用である。タイルのサイズは、ＧＭＥＭにおいて利用可能であるデータの量を表すように構成されうる。例えば、ＧＭＥＭが５１２ｋＢを保存できる場合には、タイルのサイズは、このタイルに含まれるピクセルデータが５１２ｋＢ以下であるように構成されうる。
【００１２】
[0027]一方、直接レンダリングモードにおけるグラフィックス処理は、フレームをより小さなビンに分割することがない。代わりに、フレームの全体が一度にレンダリングされる。いくつかのグラフィックス処理システム（例えば、モバイルデバイスにおけるグラフィックス処理システム）においては、フレーム全体のピクセルデータを保持するための充分なＧＭＥＭが存在しない。代わりに、直接レンダリングモードにおいて、より低速なシステムメモリが、フレームをレンダリングするために使用される。
【００１３】
[0028]本開示は、レンダリングモード（例えば、ビニング・レンダリング・モードおよび直接レンダリングモード）を決定するための技法および構造、ならびにそのようなレンダリングモードの間で切り換えるための技法および構造を提供する。
【００１４】
[0029]本開示の一例においては、グラフィックス処理の方法が、フレームをレンダリングするためのレンダリングコマンドを生成することであって、レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知することと、レンダリング特性に基づいて、フレームについて、複数のレンダリングモードのうちの１つを決定することであって、複数のレンダリングモードはビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することとを備える。
【００１５】
[0030]本開示の別の例では、グラフィックス処理の方法が、シーンのプリミティブ（ｐｒｉｍｉｔｉｖｅｓ）についてビニング操作を実行することであって、プリミティブはビンに分けられる、実行することと、シーンの一領域におけるプリミティブのオーバードロー（ｏｖｅｒｄｒａｗ）の量を表すオーバードロー数を計算することと、計算されたスコア基づいてレンダリングモードを決定することとを備える。
【００１６】
[0031]本開示の別の例では、グラフィックス処理の方法が、グラフィックス操作を実行するための操作コマンドを第１のバッファに保存することと、書き込みコマンドを第２のバッファに保存することとを備え、書き込みコマンドが、第１のバッファ内の操作コマンドを変更し、変更された操作コマンドを生成する。
【００１７】
[0032]図１が、レンダリングモードを決定する、およびレンダリングモード間（例えば、ビニング・レンダリング・モードと直接レンダリングモードとの間）で切り換えるための本開示の技法を実装するために使用されうる例示的なコンピュータデバイス２を説明するブロック図である。コンピュータデバイス２は、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、テレビゲームプラットフォームまたはテレビゲーム機、例えばセルラー電話または衛星電話などの携帯電話、有線電話、インターネット電話、携帯型のテレビゲームデバイスまたはパーソナル・デジタル・アシスタント（ＰＤＡ）などのハンドヘルドデバイス、パーソナル・ミュージック・プレイヤー、ビデオプレイヤー、ディスプレイデバイス、テレビ、テレビ・セットトップ・ボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、あるいはグラフィックデータを処理および／または表示する任意の他のタイプのデバイスを備えることができる。
【００１８】
[0033]図１の例に示されるとおり、コンピュータデバイス２は、ユーザ入力インターフェイス４と、中央演算ユニット（ＣＰＵ）６と、メモリコントローラ８と、システムメモリ１０と、グラフィックス・プロセシング・ユニット（ＧＰＵ）１２と、グラフィックスメモリ１４と、ディスプレイインターフェイス１６と、ディスプレイ１８と、バス２０および２２とを含みうる。いくつかの例では、グラフィックスメモリ１４が、ＧＰＵ１２と「一体（ｏｎ−ｃｈｉｐ）」であってよいことに、留意すべきである。いくつかの場合には、図１に示されるすべてのハードウェア構成要素が、例えばシステム・オン・チップ（ＳｏＣ）の設計にて一体であってよい。ユーザ入力インターフェイス４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびディスプレイインターフェイス１６は、バス２０を使用して互いに通信することができる。メモリコントローラ８およびシステムメモリ１０も、バス２２を使用して互いに通信することができる。バス２０、２２は、第３世代バス（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバスまたはＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（例えば、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）Ｅｘｐｒｅｓｓバス、またはＡｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バス）、あるいは他のタイプのバスまたはデバイス相互接続など、種々のバス構造のいずれかであってよい。図１に示した種々の構成要素の間のバスおよび通信インターフェイスの具体的構成は、単に例示にすぎず、同じまたは異なる構成要素を有するコンピュータデバイスおよび／または他のグラフィックス処理システムの他の構成が、本開示の技法を実装するために使用されうることに、留意すべきである。
【００１９】
[0034]ＣＰＵ６は、コンピュータデバイス２の操作を制御する汎用または専用のプロセッサを備えることができる。ユーザが、ＣＰＵ６に１つ以上のソフトウェアアプリケーションを実行させるための入力をコンピュータデバイス２にもたらすことができる。ＣＰＵ６上で実行されるソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワード・プロセッサ・アプリケーション、電子メールアプリケーション、スプレッド・シート・アプリケーション、メディア・プレイヤー・アプリケーション、テレビゲームアプリケーション、グラフィカル・ユーザ・インターフェイス・アプリケーション、または他のプログラムを含みうる。さらに、ＣＰＵ６は、ＧＰＵ１２の操作を制御するためのＧＰＵドライバ７を実行することができる。ユーザは、キーボード、マウス、マイクロホン、タッチパッド、またはユーザ入力インターフェイス４を介してコンピュータデバイス２に結合される他の入力デバイスなどの１つ以上の入力デバイス（図示されていない）によって、コンピュータデバイス２に入力をもたらすことができる。
【００２０】
[0035]ＣＰＵ６上で実行されるソフトウェアアプリケーションは、ＣＰＵ６に対してディスプレイ１８へのグラフィックスデータのレンダリングを生じさせるように指示する１つ以上のグラフィックスレンダリング命令群を含むことができる。いくつかの例では、ソフトウェア命令群が、例えばＯｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、あるいは任意の他の公開またはプロプライエタリな（ｐｒｏｐｒｉｅｔａｒｙ）標準的なグラフィックスＡＰＩなど、グラフィックス・アプリケーション・プログラミング・インターフェイス（ＡＰＩ）に従うことができる。グラフィックスレンダリング命令群を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングの一部またはすべてを実行させるために、（例えば、ＧＰＵドライバ７を通じて）ＧＰＵ１２に１つ以上のグラフィックス・レンダリング・コマンドを発する（ｉｓｓｕｅ）ことができる。いくつかの例では、レンダリングされるべきグラフィックスデータが、例えば点、線、三角形、四角形、トライアングルストリップ（ｔｒｉａｎｇｌｅ  ｓｔｒｉｐｓ）などのグラフィックスプリミティブ（ｇｒａｐｈｉｃｓ  ｐｒｉｍｉｔｉｖｅｓ）のリストを含むことができる。
【００２１】
[0036]メモリコントローラ８が、システムメモリ１０へのデータの出し入れを手助けする。例えば、メモリコントローラ８が、メモリ読み出しおよび書き込みコマンドを受信し、コンピュータデバイス２の構成要素にメモリサービスを提供するために、そのようなコマンドをメモリシステム１０に対して提供しうる。メモリコントローラ８は、メモリバス２２を介してシステムメモリ１０に通信可能に結合される。図１においては、メモリコントローラ８が、ＣＰＵ６およびシステムメモリ１０の両者とは別の処理モジュールとして示されているが、他の例では、メモリコントローラ８の機能の一部またはすべては、ＣＰＵ６およびシステムメモリ１０の一方または両方の上に実装されうる。
【００２２】
[0037]システムメモリ１０は、ＣＰＵ６によって実行のためにアクセス可能であるプログラムモジュールおよび／または命令群、ならびに／あるいはＣＰＵ６上で実行されるプログラムによって使用するためのデータを記憶することができる。例えば、システムメモリ１０は、グラフィカル・ユーザ・インターフェイス（ＧＵＩ）をディスプレイ１８上に提示するためにＣＰＵ６によって使用されるウインドウ・マネージャ・アプリケーションを記憶することができる。さらに、システムメモリ１０は、ユーザアプリケーションおよびアプリケーションに関するアプリケーション表面データを記憶することができる。さらに、システムメモリ１０は、コンピュータデバイス２の他の構成要素によって使用するための、さらには／あるいはコンピュータデバイス２の他の構成要素によって生成される情報を記憶することができる。例えば、システムメモリ１０は、ＧＰＵ１２のためのデバイスメモリとして機能することができ、ＧＰＵ１２によって操作されるデータならびにＧＰＵ１２によって実行される操作からもたらされるデータを記憶することができる。例えば、システムメモリ１０は、テクスチャバッファ、デプスバッファ（ｄｅｐｔｈ  ｂｕｆｆｅｒｓ）、ステンシルバッファ（ｓｔｅｎｃｉｌ  ｂｕｆｆｅｒｓ）、バーテクスバッファ（ｖｅｒｔｅｘ  ｂｕｆｆｅｒｓ）、フレームバッファなどの任意の組み合わせを記憶することができる。システムメモリ１０は、例えばランダム・アクセス・メモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ）、Ｆｌａｓｈメモリ、磁気データ媒体、または光学記憶媒体など、１つ以上の揮発性または不揮発性メモリまたは記憶デバイスを含むことができる。
【００２３】
[0038]ＧＰＵ１２は、１つ以上のグラフィックスプリミティブをディスプレイ１８にレンダリングするためのグラフィックス操作を実行するように構成されうる。したがって、ＣＰＵ６上で実行されるソフトウェアアプリケーションのうちの１つがグラフィックス処理を必要とするとき、ＣＰＵ６が、ディスプレイ１８へレンダリングするためのグラフィックスコマンドおよびグラフィックスデータをＧＰＵ１２にもたらすことができる。グラフィックスデータは、例えば描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含むことができる。ＧＰＵ１２は、いくつかの事例においては、複雑なグラフィック関連の操作についてＣＰＵ６よりも効率的な処理をもたらす高度に並列な（ｈｉｇｈｌｙ−ｐａｒａｌｌｅｌ）構造にて構築されうる。例えば、ＧＰＵ１２は、複数の頂点（ｖｅｒｔｉｃｅｓ）またはピクセルについて並列な方法で動作するように構成された複数の処理要素を含むことができる。ＧＰＵ１２の高度に並列な性質は、いくつかの場合において、ＧＰＵ１２が、ＣＰＵ６を使用してディスプレイ１８に直接シーンを描画する場合よりも迅速にディスプレイ１８にグラフィックス画像（例えば、ＧＵＩならびに二次元（２Ｄ）および／または三次元（３Ｄ）のグラフィックスシーン）を描画することを可能にする。
【００２４】
[0039]ＧＰＵ１２は、いくつかの場合においては、コンピュータデバイス２のマザーボードに統合されうる。他の場合には、ＧＰＵ１２は、コンピュータデバイス２のマザーボードのポートに設置されるグラフィックスカード上に存在させられ得、あるいはコンピュータデバイス２と相互運用する（ｉｎｔｅｒｏｐｅｒａｔｅ）ように構成された周辺デバイス内に他のやり方で組み込まれうる。ＧＰＵ１２は、１つ以上のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の同等の論理集積回路または個別の集積回路など、１つ以上のプロセッサを含むことができる。
【００２５】
[0040]ＧＰＵ１２は、グラフィックスメモリ１４に直接結合されうる。したがって、ＧＰＵ１２が、バス２０を使用することなくグラフィックスメモリ１４からのデータの読み出しおよびグラフィックスメモリ１４へのデータの書き込みを行うことができる。換言すると、ＧＰＵ１２が、オフチップ（ｏｆｆ−ｃｈｉｐ）メモリの代わりに、ローカル記憶装置を使用して局所的にデータを処理することができる。これにより、ＧＰＵ１２が、バスの混雑に直面しかねないバス２０を介したデータの読み書きが不要になることで、より効率的なやり方で動作することができる。しかしながら、いくつかの場合には、ＧＰＵ１２が別途のメモリを含まず、代わりにバス２０を介してシステムメモリ１０を利用してもよい。グラフィックスメモリ１４は、例えばランダム・アクセス・メモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能なプログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ）、Ｆｌａｓｈメモリ、磁気データ媒体、または光学記憶媒体など、１つ以上の揮発性または不揮発性メモリまたは記憶デバイスを含むことができる。
【００２６】
[0041]ＣＰＵ６および／またはＧＰＵ１２は、レンダリングされた画像データをフレームバッファ１５に保存することができる。フレームバッファ１５は、独立したメモリであってよく、あるいはシステムメモリ１０において割り当てられてもよい。ディスプレイインターフェイス１６が、フレームバッファ１５からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ１８を構成することができる。いくつかの例では、ディスプレイインターフェイス１６が、フレームバッファから取り出されたデジタル値をディスプレイ１８によって消費できるアナログ信号に変換するように構成されたデジタル−アナログコンバータ（ＤＡＣ）を含むことができる。他の例では、ディスプレイインターフェイス１６が、デジタル値を処理のためにディスプレイ１８に直接渡すことができる。ディスプレイ１８は、モニタ、テレビ、プロジェクションデバイス（ｐｒｏｊｅｃｔｉｏｎ  ｄｅｖｉｃｅ）、液晶ディスプレイ（ＬＣＤ）、プラズマ・ディスプレイ・パネル、有機ＬＥＤ（ＯＬＥＤ）ディスプレイなどの発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導型電子放出ディスプレイ（ＳＥＤ）、レーザ・テレビジョン・ディスプレイ、ナノ結晶ディスプレイ、または他のタイプのディスプレイユニットを含むことができる。ディスプレイ１８は、コンピュータデバイス２に統合されうる。例えば、ディスプレイ１８が、携帯電話の画面であってよい。代替的に、ディスプレイ１８が、有線または無線の通信リンクを介してコンピュータデバイス２に結合されるスタンドアロンデバイスであってよい。例えば、ディスプレイ１８は、ケーブルまたは無線リンクによってパーソナルコンピュータに接続されたコンピュータモニタまたはフラット・パネル・ディスプレイであってよい。
【００２７】
[0042]本開示の一例によれば、ＣＰＵ６および／またはＧＰＵドライバ７は、フレームをレンダリングするためのレンダリングコマンドを生成することであって、レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知することと、レンダリング特性に基づいて、フレームについて、複数のレンダリングモードのうちの１つを決定することであって、複数のレンダリングモードはビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することとを行わせるように構成されうる。
【００２８】
[0043]本開示の別の例によれば、ＣＰＵ６および／またはグラフィックスドライバ７は、シーンのプリミティブについてビニング操作を実行することであって、プリミティブはビンに分けられる、実行することと、シーンの一領域におけるプリミティブのオーバードローの量を表すオーバードロー数を計算することと、計算されたスコア基づいてレンダリングモードを決定することとを行うように構成されうる。
【００２９】
[0044]本開示の別の例によれば、ＣＰＵ６および／またはグラフィックスドライバ７は、グラフィックス操作を実行するための操作コマンドを第１のバッファに保存することと、書き込みコマンドを第２のバッファに保存することであって、書き込みコマンドは第１のバッファ内の操作コマンドを変更して変更された操作コマンドを生成する、保存することとを行うように構成されうる。
【００３０】
[0045]図２が、図１のＣＰＵ６、ＧＰＵ１２、およびシステムメモリ１０の例示的な実装をさらに詳しく説明するブロック図である。ＣＰＵ６が、各々がＣＰＵ６上で実行される１つ以上のソフトウェアアプリケーションまたはサービスであってよい少なくとも１つのソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、およびＧＰＵドライバ７を含むことができる。ＧＰＵ１２は、グラフィックス処理コマンドを実行するために協働する複数のグラフィックス処理ステージを含むグラフィックス処理パイプライン３０を含むことができる。ＧＰＵ１２は、ビニング・レンダリング・モードおよび直接レンダリングモードを含む種々のレンダリングモードにてグラフィックス処理パイプライン３０を実行するように構成されうる。図２に示されるとおり、グラフィックス処理パイプライン３０は、コマンドエンジン３２、ジオメトリ処理ステージ３４、ラスタライゼーション（ｒａｓｔｅｒｉｚａｔｉｏｎ）ステージ３６、およびピクセル処理パイプライン３８を含むことができる。グラフィックス処理パイプライン３０の各々の構成要素は、固定された機能の構成要素、プログラマブルな構成要素（例えば、プログラマブルなシェーダユニット（ｓｈａｄｅｒ  ｕｎｉｔ）において実行されるシェーダプログラムの一部）、あるいは固定された機能の構成要素とプログラマブルな構成要素との組み合わせとして実装されうる。ＣＰＵ６およびＧＰＵ１２にとって利用可能なメモリは、システムメモリ１０およびフレームバッファ１５を含むことができる。フレームバッファ１５は、システムメモリ１０の一部であってよく、あるいはシステムメモリ１０とは別であってよい。フレームバッファ１５は、レンダリングされた画像データを保存することができる。
【００３１】
[0046]ソフトウェアアプリケーション２４は、ＧＰＵ１２の機能を利用する任意のアプリケーションであってよい。例えば、ソフトウェアアプリケーション２４は、ＧＵＩアプリケーション、オペレーティングシステム、ポータブル・マッピング・アプリケーション、エンジニアリングまたは芸術の用途のためのコンピュータ支援設計プログラム、テレビゲームアプリケーション、あるいは２Ｄまたは３Ｄグラフィックスを使用する任意のタイプのソフトウェアアプリケーションであってよい。
【００３２】
[0047]ソフトウェアアプリケーション２４は、ＧＰＵ１２に対してグラフィカル・ユーザ・インターフェイス（ＧＵＩ）および／またはグラフィックスシーンをレンダリングするように指示する１つ以上の描画命令群を含むことができる。例えば、描画命令群は、ＧＰＵ１２によってレンダリングされるべき１つ以上のグラフィックスプリミティブのセットを定める命令群を含むことができる。いくつかの例では、描画命令群が、集合的に、ＧＵＩにおいて使用される複数のウインドウ生成表面（ｗｉｎｄｏｗｉｎｇ  ｓｕｒｆａｃｅｓ）のすべてまたは一部を定めることができる。さらなる例では、描画命令群が、集合的に、アプリケーションによって定められるモデル空間またはワールド空間内に１つ以上のグラフィックスオブジェクトを含むグラフィックスシーンのすべてまたは一部を定めることができる。
【００３３】
[0048]ソフトウェアアプリケーション２４は、１つ以上のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための１つ以上のコマンドをＧＰＵ１２に発するために、グラフィックスＡＰＩ２６を介してＧＰＵドライバ７を呼び出すことができる。例えば、ソフトウェアアプリケーション２４は、プリミティブの定義をＧＰＵ１２にもたらすためにグラフィックスＡＰＩ２６を介してＧＰＵドライバ７を呼び出すことができる。いくつかの場合には、プリミティブの定義は、例えば三角形、矩形、トライアングルファン（ｔｒｉａｎｇｌｅ  ｆａｎｓ）、トライアングルストリップなどの描画プリミティブのリストの形態でＧＰＵ１２にもたらされうる。プリミティブの定義は、レンダリングされるべきプリミティブに関連付けられた１つ以上の頂点を指定する頂点指定を含むことができる。頂点指定は、各々の頂点の位置座標を含むことができ、いくつかの場合には、例えば色座標、法線ベクトル、およびテクスチャ座標など、頂点に関連付けられた他の属性を含むことができる。また、プリミティブの定義は、プリミティブタイプ情報（例えば、三角形、矩形、トライアングルファン、トライアングルストリップなど）、スケーリング情報、回転情報などを含むことができる。ソフトウェアアプリケーション２４によってＧＰＵドライバ７に発せられる命令群に基づき、ＧＰＵドライバ７が、プリミティブをレンダリングするためにＧＰＵ１２が実行すべき１つ以上の操作を指定する１つ以上のコマンドを作成する（ｆｏｒｍｕｌａｔｅ）ことができる。ＧＰＵ１２がＣＰＵ６からのコマンドを受信したとき、グラフィックス処理パイプライン３０がコマンドをデコードし、グラフィックス処理パイプライン３０内の１つ以上の処理要素を、コマンドにおいて指定された操作を実行するように構成する。指定された操作が実行された後で、グラフィックス処理パイプライン３０は、レンダリングされたデータを、ディスプレイデバイスに関連付けられたフレームバッファ４０に出力する。グラフィックスパイプライン３０は、ビニング・レンダリング・モードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの１つで実行するように構成されうる。ビニング・レンダリング・モードおよび直接レンダリングモードの操作は、さらに詳しく後述される。
【００３４】
[0049]さらに、ＧＰＵドライバ７は、１つ以上のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムをＧＰＵ１２に含まれる１つ以上のプログラマブルなシェーダユニットにダウンロードするように構成されうる。シェーダプログラムは、例えばＯｐｅｎＧＬ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＧＬＳＬ）、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）、Ｃ  ｆｏｒ  Ｇｒａｐｈｉｃｓ（Ｃｇ）Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅなどといった高レベルシェーディング言語にて記述されうる。コンパイルされたシェーダプログラムは、ＧＰＵ１２内のプログラマブルなシェーダユニットの操作を制御する１つ以上の命令群を含むことができる。例えば、シェーダプログラムは、バーテックス・シェーダ・プログラムおよび／またはピクセル・シェーダ・プログラムを含むことができる。バーテックス・シェーダ・プログラムは、プログラマブルなバーテックス・シェーダ・ユニットまたは統合されたシェーダユニット（ｕｎｉｆｉｅｄ  ｓｈａｄｅｒ  ｕｎｉｔ）の実行を制御することができ、１つ以上のパーバーテックス（ｐｅｒ−ｖｅｒｔｅｘ）操作を指定する命令群を含むことができる。ピクセル・シェーダ・プログラムは、プログラマブルなピクセル・シェーダ・ユニットまたは統合されたシェーダユニットの実行を制御するピクセル・シェーダ・プログラムを含むことができ、１つ以上のパーピクセル（ｐｅｒ−ｐｉｘｅｌ）操作を指定する命令群を含むことができる。本開示のいくつかの例示的な実施形態によれば、ピクセル・シェーダ・プログラムが、ソースピクセルについて、ソースピクセルの対応するデスティネーションアルファ値に基づいてテクスチャ値の取り出しを選択的に生じさせる命令群をさらに含むことができる。
【００３５】
[0050]さらに、本開示の技法によれば、ＧＰＵドライバ７は、ＧＭＥＭアドレスを利用するビニング・レンダリング・モードにおいてレンダリングするために生成されるコマンドを探知するように構成されうる。ＧＭＥＭアドレスを利用する各コマンドについて、ＧＰＵドライバ７は、直接レンダリングモードに使用されると考えられる対応するシステム・メモリ・アドレスを保存することができる。レンダリングモードがビニング・レンダリング・モードから直接レンダリングモードに切り換わる場合、ＧＰＵドライバ７は、ＧＭＥＭアドレスをシステム・メモリ・アドレスで置き換えるようにレンダリングコマンドにパッチを当てる（すなわち、変更する）ことができる。ＧＭＥＭアドレスにシステム・メモリ・アドレスでパッチを適用するためのさらなる技法は、さらに詳しく後述される。
【００３６】
[0051]グラフィックス処理パイプライン３０は、グラフィックスドライバ２８を介してＣＰＵ６から１つ以上のグラフィックス処理コマンドを受信し、グラフィックス処理コマンドを実行して表示可能なグラフィックス画像を生成するように構成されうる。上述のように、グラフィックス処理パイプライン３０は、グラフィックス処理コマンドを実行するために協働する複数のステージを含む。しかしながら、そのようなステージは、必ずしも別々のハードウェアブロックにて実装される必要はないことに、留意すべきである。例えば、ジオメトリ処理ステージ３４およびピクセル処理パイプライン３８の各部分は、統合されたシェーダユニットの一部分として実装されうる。やはり、グラフィックスパイプライン３０は、ビニング・レンダリング・モードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの１つで実行するように構成されうる。
【００３７】
[0052]コマンドエンジン３２が、グラフィックス処理コマンドを受信し、グラフィックス処理パイプライン３０の残りの処理ステージを、グラフィックス処理コマンドを実行するための種々の操作を行うように構成することができる。グラフィックス処理コマンドは、例えば描画コマンドおよびグラフィックス状態コマンドを含むことができる。描画コマンドは、１つ以上の頂点の位置座標を指定する頂点指定コマンドを含むことができ、いくつかの場合には、例えば色座標、法線ベクトル、テクスチャ座標、およびフォグ（ｆｏｇ）座標など、各々の頂点に関連付けられた他の属性値を含むことができる。グラフィックス状態コマンドは、プリミティブタイプコマンド、変形コマンド、照明コマンドなどを含むことができる。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプおよび／またはプリミティブを形成するために頂点を組み合わせるやり方を指定することができる。変形コマンドは、頂点について実行すべき変形のタイプを指定することができる。照明コマンドは、グラフィックスシーンにおける種々の光のタイプ、方向、および／または配置を指定することができる。コマンドエンジン３２が、受信された１つ以上のコマンドに関連付けられた頂点および／またはプリミティブについてのジオメトリ処理を、ジオメトリ処理ステージ３４に実行させることができる。
【００３８】
[0053]ジオメトリ処理ステージ３４は、ラスタライゼーションステージ３６のためのプリミティブデータを生成するために、１つ以上の頂点についてパーバーテックス操作および／またはプリミティブセットアップ操作を実行することができる。各々の頂点は、例えば位置座標、色値、法線ベクトル、およびテクスチャ座標などといった属性のセットに関連付けられうる。ジオメトリ処理ステージ３４が、種々のパーバーテックス操作に従ってこれらの属性のうちの１つ以上を修正する。例えば、ジオメトリ処理ステージ３４は、頂点の位置座標について１つ以上の変換を実行し、修正された頂点の位置座標を生成することができる。ジオメトリ処理ステージ３４は、例えばモデリング変換、ビューイング（Ｖｉｅｗｉｎｇ）変換、プロジェクション（ｐｒｏｊｅｃｔｉｏｎ）変換、ＭｏｄｅｌＶｉｅｗ変換、ＭｏｄｅｌＶｉｅｗＰｒｏｊｅｃｔｉｏｎ変換、ビューポート（Ｖｉｅｗｐｏｒｔ）変換、およびデプス（ｄｅｐｔｈ）範囲スケーリング変換のうちの１つ以上を頂点の位置座標に適用し、修正された頂点の位置座標を生成することができる。いくつかの場合には、頂点の位置座標が、モデル空間座標であってよく、修正された頂点の位置座標が、スクリーン空間座標であってよい。スクリーン空間座標は、モデリング、ビューイング、プロジェクション、およびビューポート変換の適用後に得られることができる。いくつかの場合には、ジオメトリ処理ステージ３４が、頂点についてパーバーテックス照明操作をさらに実行し、頂点の修正された色座標を生成することができる。さらに、ジオメトリ処理ステージ３４は、例えば正規変換、法線正規化操作、ビュー・ボリューム・クリッピング（Ｖｉｅｗ  ｖｏｌｕｍｅ  ｃｌｉｐｐｉｎｇ）、一様分割（ｈｏｍｏｇｅｎｏｕｓ  ｄｉｖｉｓｉｏｎ）、および／またはバックフェースカリング操作（ｂａｃｋｆａｃｅ  ｃｕｌｌｉｎｇ  ｏｐｅｒａｔｉｏｎｓ）を含む他の操作を実行することができる。
【００３９】
[0054]ジオメトリ処理ステージ３４は、ラスタライズされるべきプリミティブを定める１つ以上の修正された頂点のセットと、プリミティブを形成するために頂点を組み合わせるやり方を指定するデータとを含むプリミティブデータを生成することができる。修正された頂点の各々は、例えば、修正された頂点の位置座標および頂点に関連付けられた処理された頂点の属性値を含むことができる。プリミティブデータは、集合的に、グラフィックス処理パイプライン３０のさらなるステージによってラスタライズされるべきプリミティブに対応しうる。概念的に、各々の頂点が、プリミティブの２つのエッジ（ｅｄｇｅｓ）が出会うプリミティブの角に対応しうる。ジオメトリ処理ステージ３４は、プリミティブデータをさらなる処理のためにラスタライゼーションステージ３６に提供することができる。
【００４０】
[0055]いくつかの例では、ジオメトリ処理ステージ３４のすべてまたは一部は、１つ以上のシェーダユニットにおいて実行される１つ以上のシェーダプログラムによって実装されうる。例えば、ジオメトリ処理ステージ３４は、そのような例においては、バーテックスシェーダ、ジオメトリシェーダ、またはこれらの任意の組み合わせによって実装されうる。他の例では、ジオメトリ処理ステージ３４は、固定された機能のハードウェア処理パイプラインとして実装され得、あるいは固定された機能のハードウェアと１つ以上のシェーダユニットにおいて実行される１つ以上のシェーダプログラムとの組み合わせとして実装されうる。
【００４１】
[0056]ラスタライゼーションステージ３６は、ラスタライズされるべきプリミティブを表すプリミティブデータをジオメトリ処理ステージ３４から受信し、プリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソースピクセルを生成するように構成される。いくつかの例では、ラスタライゼーションステージ３６が、どのスクリーンピクセル位置がラスタライズされるべきプリミティブによってカバーされるかを判断し、プリミティブによってカバーされると判断された各々のスクリーンピクセル位置についてソースピクセルを生成することができる。ラスタライゼーションステージ３６は、どのスクリーンピクセル位置がプリミティブによってカバーされるかを、例えばエッジウォーキング（ｅｄｇｅ−ｗａｌｋｉｎｇ）技法、エッジの式（ｅｑｕａｔｉｏｎｓ）の評価などといった当業者にとって公知の技法を使用することによって判断することができる。ラスタライゼーションステージ３６は、得られたソースピクセルを、さらなる処理のためにピクセル処理パイプライン３８に提供することができる。
【００４２】
[0057]ラスタライゼーションステージ３６によって生成されるソースピクセルは、例えばデスティネーションピクセルなどのスクリーンピクセル位置に対応でき、１つ以上の色属性に関連付けられうる。特定のラスタライズされたプリミティブについて生成されたすべてのソースピクセルは、ラスタライズされたプリミティブに関連付けられたソースピクセルと呼ばれうる。ラスタライゼーションステージ３６によってプリミティブにカバーされると判断されたピクセルは、概念的に、プリミティブの頂点を表すピクセル、プリミティブのエッジを表すピクセル、およびプリミティブの内部を表すピクセルを含むことができる。
【００４３】
[0058]ピクセル処理パイプライン３８が、ラスタライズされたプリミティブに関連付けられたソースピクセルを受信し、ソースピクセルについて１つ以上のパーピクセル操作を実行するように構成される。ピクセル処理パイプライン３８によって実行されうるパーピクセル操作は、例えばアルファテスト、テクスチャマッピング、色計算、ピクセルシェーディング（ｓｈａｄｉｎｇ）、パーピクセルライティング（ｌｉｇｈｔｉｎｇ）、フォグ処理、ブレンディング（ｂｌｅｎｄｉｎｇ）、ピクセル・オーナーシップ・テキスト、ソース・アルファ・テスト、ステンシル（ｓｔｅｎｃｉｌ）テスト、デプステスト、シザーズ（ｓｃｉｓｓｏｒｓ）テスト、および／またはスティップリング（ｓｔｉｐｐｌｉｎｇ）操作を含む。さらに、ピクセル処理パイプライン３８は、１つ以上のパーピクセル操作を実行するために１つ以上のピクセル・シェーダ・プログラムを実行することができる。ピクセル処理パイプライン３８によって生成されて得られたデータは、本明細書においては、デスティネーション・ピクセル・データと呼ばれ得、フレームバッファ１５に保存されうる。デスティネーション・ピクセル・データは、処理されたソースピクセルと同じディスプレイ位置を有するフレームバッファ１５内のデスティネーションピクセルに関連付けられうる。デスティネーション・ピクセル・データは、例えば色値、デスティネーションアルファ値、デプス値などのデータを含むことができる。
【００４４】
[0059]フレームバッファ１５が、ＧＰＵ１２のためのデスティネーションピクセルを保存する。各々のデスティネーションピクセルは、一意のスクリーンピクセル位置に関連付けられうる。いくつかの例では、フレームバッファ１５が、各々のデスティネーションピクセルについて色成分およびデスティネーションアルファ値を保存することができる。例えば、フレームバッファ１５は、各々のピクセルの赤、緑、青、アルファ（ＲＧＢＡ）成分を保存することができ、ここで「ＲＧＢ」成分が色値に相当し、「Ａ」成分がデスティネーションアルファ値に相当する。フレームバッファ１５およびシステムメモリ１０が別々のメモリユニットとして示されているが、他の例においては、フレームバッファ１５がシステムメモリ１０の一部であってもよい。
【００４５】
[0060]上述のように、グラフィックス処理パイプライン３０は、ビニング・レンダリング・モードおよび直接レンダリングモードを含む特定のレンダリングモードに従ってグラフィックス画像をレンダリングすることができる。ビニング・レンダリング・モードによるレンダリングの場合、グラフィックス処理パイプライン３０は、プリミティブのバッチ（ｂａｔｃｈ）（すなわち、１つ以上のプリミティブ）を受信してレンダリングし、グラフィックス画像を得ることができる。プリミティブのバッチをレンダリングするために、得られるグラフィックス画像は、複数のより小さな部分（例えば、ピクセルのタイルまたはビン）に分割され得、グラフィックス処理パイプライン３０が、グラフィックス画像の各々の部分を別々のレンダリングパス（ｐａｓｓ）としてレンダリングすることができる。
【００４６】
[0061]図３が、ビニング・レンダリング・モードのためのビンに分割されたフレームを説明する概念図である。フレーム４０は、ビン４２などの複数のビンに分割されうる。典型的には、グラフィックスハードウェアは、少なくとも１つのビンのデータを保持するために充分なサイズの高速メモリ（例えば、図２のグラフィックスメモリ１４）を含むと考えられる。フレームの特定の部分のための１つのレンダリングパスの一部分として、グラフィックス処理パイプライン３０は、フレームのデスティネーションピクセルの特定のサブセット（ｓｕｂｓｅｔ）（例えば、デスティネーションピクセルの特定のビン）に関するプリミティブのバッチのすべてまたはサブセットをレンダリングすることができる。第１のビンに関する第１のレンダリングパスの実行後に、グラフィックス処理パイプライン３０は、第２のビンに関する第２のレンダリングパスを実行することができ、以下同様である。グラフィックス処理パイプライン３０は、すべてのビンに関連付けられたプリミティブがレンダリングされるまで、ビンを増加的に横断する（ｔｒａｖｅｒｓｅ）ことができる。
【００４７】
[0062]図４が、ビニング・レンダリング・モードにおいて使用されるビンをさらに詳しく示す概念図である。ビン４４、４６、４８、および５０が、複数のピクセル５２を含むようにレンダリング／ラスタライズされる。１つ以上のグラフィックスプリミティブは、各々のビンにおいて視認できる。例えば、三角形Ａ（Ｔｒｉ  Ａ）の一部分は、ビン４４およびビン４８の両方において視認できる。三角形Ｂ（Ｔｒｉ  Ｂ）の一部分は、ビン４４、ビン４６、ビン４８、およびビン５０の各々において視認できる。三角形Ｃ（Ｔｒｉ  Ｃ）は、ビン４６においてのみ視認できる。レンダリングパスの間、ビニング・レンダリング・モードの一例では、シーンがビンに分割され、ビン内のすべての三角形がレンダリングされる（これは、ソフトウェアビニングと称されることもある）。ビニング・レンダリング・モードの別の例では、ビン内のどの三角形が最終的にレンダリングされるシーンにおいて実際に視認されるのかを判断するために追加のステップが、レンダリングの前に行われる（これは、ハードウェアレンダリングと称されることもある）。例えば、いくつかの三角形が１つ以上の他の三角形の背後に位置し、最終的にレンダリングされたシーンにおいて視認されない可能性がある。このやり方で、視認されない三角形は、そのビンについてレンダリングされる必要がない。
【００４８】
[0063]特定のレンダリングパスを実行する間、その特定のレンダリングパスに関連付けられたビンのピクセルデータは、グラフィックスメモリ１４（ビンバッファと称されることもある）に保存されうる。レンダリングパスの実行後に、グラフィックス処理パイプライン３０は、グラフィックスメモリ１４の内容をフレームバッファ１５に移すことができる。いくつかの場合には、グラフィックス処理パイプライン３０が、フレームバッファ１５内のデータの一部をグラフィックスメモリ１４に保存されたデータで上書きすることができる。他の場合には、グラフィックス処理パイプライン３０が、フレームバッファ１５内のデータをグラフィックスメモリ１４に保存されたデータと合成し、あるいは組み合わせることができる。グラフィックスメモリ１４のコンテンツをフレームバッファ１５に移した後で、グラフィックス処理パイプライン３０は、グラフィックスメモリ１４をデフォルト値に初期化し、別のビンに関する次のレンダリングパスを開始することができる。
【００４９】
[0064]図５が、「ソフトウェア」ビニングを用いるビニング・レンダリング・モードを使用してシーンをレンダリングするための例示的なコマンド構造を示す概念図である。レベル１間接バッファ（ＩＢ１）６０が、ＧＰＵ１２にグラフィックス・メモリ・パイプライン３０の種々のステップの実行を指示するための一連の実行コマンドを含む。ＩＢ１  ６０内の各々の実行コマンドは、基本的に、レンダリングパイプラインの種々の態様についてのコマンドを含む１つ以上のレベル２間接バッファ（ＩＢ２）へのポインタ（ｐｏｉｎｔｅｒ）である。このやり方で、２つ以上のレベルの構造が、グラフィックス・レンダリング・パイプラインを実行するために確立される。ＧＰＵ１２が、ＩＢ１  ６０内の各々の実行コマンドを順次に通過でき、ＩＢ１  ６０内の各々の実行は、ＩＢ２に保存されたコマンドの特定のスタック（ｓｔａｃｋ）を指す。ＩＢ１およびＩＢ２は、ＧＰＵ１２と一体のメモリであってよく、あるいはシステムメモリ１０などのＧＰＵ１２に対して外部のメモリであってよい。
【００５０】
[0065]ＩＢ１  ６０内のプリアンブル実行コマンドが、ＧＰＵ１２によって実行できるプリアンブルコマンドを含むプリアンブルＩＢ２  ６２を指す。例えば、プリアンブルＩＢ２  ６２は、ＧＰＵ１２のその静的な状態を初期化し、ＧＰＵ１２の初期レンダリング状態を設定するコマンドを含むことができる。ＧＰＵの静的状態は、特定のアプリケーションに基づいて変化しない設定を含む。一方、レンダリング状態は、特定のアプリケーションに基づいて変化しうるＧＰＵ設定を含む（例えば、ＯｐｅｎＧＬアプリケーション  対  Ｄｉｒｅｃｔ  Ｘアプリケーション）。プリアンブルＩＢ２内のコマンドの完了後に、制御はＩＢ１  ６０に戻り、次の実行コマンドが実行される。
【００５１】
[0066]ＩＢ１  ６０における次の実行コマンドは、使用されているレンダリングモードのためのレンダーパス（ｒｅｎｄｅｒ  ｐａｓｓ）を設定する。やはり、図５の例において、レンダリングモードは、ソフトウェアビニングを用いるビニング・レンダリング・モードである。次に、ＩＢ１  ６０内のロードビン実行コマンドが、ロード（ｌｏａｄ）ＩＢ２  ６６内のコマンドを指す。ソフトウェアビニングにおいては、特定のビンのためのデータが、ＧＭＥＭ１４にロードされる（ＧＭＥＭへロードする）。次いで、制御はＩＢ１  ６０に戻り、レンダービン実行コマンドが、レンダリングＩＢ２内のコマンドを指す。レンダリングＩＢ２  ６８は、ロードされたビンの三角形を描画するための一連の状態コマンドおよび描画コマンドで構成される。各々の描画コマンドが、コマンドおよび／またはＧＰＵハードウェアによって確立されたグラフィックス処理パイプライン３０（例えば、ジオメトリ処理状態３４、ラスタライゼーション状態３６、および／またはピクセル処理パイプライン３８を含む）に従って三角形を描くようにＧＰＵ１２に指示する。レンダリングＩＢ２  ６８に示されるとおり、各々の描画コマンドは、特定の三角形がビンにおいて実際に視認可能であるか否かを判断するために、視認性ストリーム（ｖｉｓｉｂｉｌｉｔｙ  ｓｔｒｅａｍ）が使用されないことを示している。視認性ストリームは、「ハードウェア」ビニングを使用するビニング・レンダリング・モードにおいて生成され、図６に関連してさらに詳しく説明される。レンダリングＩＢ２  ６８内の状態コマンドが、ＧＰＵ１２によって実行されるグラフィックス処理パイプラインの挙動（ｂｅｈａｖｉｏｒ）を左右する。例えば、状態コマンドは、色、ポリゴン（ｐｏｌｙｇｏｎ）モード（例えば、ソリッド（ｓｏｌｉｄｓ）または線の代わりに点）、ブレンディング（オン／オフ）、デプステスト（オン／オフ）、テクスチャリング（オン／オフ）、カリング（ｃｕｌｌｉｎｇ）、クリッピング、および他の論理演算を変更することができる。レンダリングＩＢ２  ６８に示されるとおり、状態コマンドは、三角形ごと（または、プリミティブごと）のやり方で発せられてよい。すなわち、コマンド「状態  Ｔｒｉ  Ａ」が、三角形Ａを描画するときのＧＰＵ１２の挙動を左右できる一方で、コマンド「状態  Ｔｒｉ  Ｂ１」および「状態  Ｔｒｉ  Ｂ２」が、三角形Ｂを描画するときのＧＰＵ１２の挙動を左右できる。コマンド「状態  Ｔｒｉ  Ｂ１」および「状態  Ｔｒｉ  Ｂ２」は、単に各々の三角形について複数の状態コマンドが実行されうることを示しているにすぎない。
【００５２】
[0067]すべてのコマンドがレンダリングＩＢ２  ６８において実行された後（例えば、すべての三角形が描画された後）で、制御はＩＢ１  ６０に戻る。ビン保存実行コマンドが、レンダリングされたビンをＧＭＥＭ１４からメモリ（例えば、フレームバッファ１５）に保存するコマンドを含むストアＩＢ２  ７０へのポインタを含むことができる。次いで、レンダーパス（例えば、ＩＢ１  ６０に示されるとおりのレンダーパスの設定からビンの保存までの実行コマンド）が、１つ以上のフレームに関して各々のビン７２について繰り返される。
【００５３】
[0068]図６が、「ハードウェア」ビニングを用いるビニング・レンダリング・モードを使用してシーンをレンダリングするための例示的なコマンド構造を示す概念図である。ＩＢ１  ６１における実行コマンドは、「ビニング」パスに関するコマンドを除き、図６のＩＢ１  ６０の実行コマンドと同様である。「ビニング」パスが、ビン内の特定の三角形が最終的にレンダリングされるシーンにおいて実際に視認可能であるか否かを示す視認性ストリームを生成するために使用される。例えば、いくつかの三角形がシーン内の他の三角形の背後に位置し、いくつかのシナリオ（例えば、前方の三角形が不透明である（ｏｐａｑｕｅ）場合、またはブレンディングが使用されない場合）において視認できない可能性がある。ビン７２のレンダリングに先立ち、ＩＢ１  ６１は、ビニングＩＢ２  ７４内のコマンドを指すビニングパス実行コマンドを含むことができる。ビニングＩＢ２  ７４は、簡略版のグラフィックスパイプライン（例えば、簡略版のレンダリングＩＢ２  ６９）をＧＰＵ１２に実行させるコマンドを含むが、ビン内の各々の三角形についての視認性ストリームを、三角形が最終的にレンダリングされるシーンにおいて視認可能であるか否かを判断するデプステスト（Ｚテスト）に基づいて更新するステップを追加する。
【００５４】
[0069]ビニングパスの目標は、現在のビンに交わる三角形を識別することにある。したがって、三角形が特定のビンに交わるか否かを識別するために、三角形の頂点の位置が判断される必要があるだけである。ビニングパスは、頂点の位置に影響を及ぼす命令群だけを含む簡略化されたバーテックスシェーダを利用する。例えば、カラー命令群、テクスチャ座標、および三角形のバーテックスの位置に影響を及ぼさない他の命令群が、ビニングパスに使用される簡略化されたバーテックスシェーダから取り除かれうる。また、ビニングパスは、各々の三角形のおおよそのデプスを判断するために、細かいラスタライゼーションよりもむしろ粗いラスタライゼーションを使用する。粗いラスタライゼーションは、細かいラスタライゼーションよりも低い精度で（例えば、より少数のビットを使用して）デプス値を計算する。三角形がビンにおいて視認可能であるか否かを判断するために、おおまかなデプス値で充分である。ピクセルシェーダは、ビニングパスにおいては使用されない。
【００５５】
[0070]次いで、ビニングパスは、粗いデプス値についてデプス値テストを利用し、三角形がビン内の他の三角形に関してビン内で視認可能であるか否かを判断する。このデプステストに基づき、視認性ストリームが更新される。視認性ストリームは、レンダリングされるビン内の特定の三角形が視認可能であるか否かを示すビット列であってよい（例えば、１が三角形が視認可能であることを示し、０が三角形が視認不可能であることを示す）。
【００５６】
[0071]レンダリングＩＢ２  ６９内のコマンドは、視認性ストリームの使用を別にすれば、図５のレンダリングＩＢ  ６８のコマンドと同様である。レンダリングＩＢ２  ６９内の描画コマンド（例えば、Ｔｒｉ  Ａを描画する、Ｔｒｉ  Ｂを描画する、Ｔｒｉ  Ｃを描画するなど）が、ビニングパスによって生成された視認性ストリームを使用して、特定の三角形を描画する必要があるか否かを判断する。例えば、視認性ストリームによって視認可能でないと示される三角形について、描画が省略されうる。
【００５７】
[0072]ビニング・レンダリング・モードにおけるビンごとのフレームのレンダリングと対照的に、直接レンダリングは、フレーム全体をグラフィックスパイプラインの１回の通過（ｏｎｅ  ｐａｓｓ）にてレンダリングする。直接レンダリングは、典型的には、グラフィックスメモリの量が限られているビニングベースのアーキテクチャにおいて実行される場合、より低速なシステムメモリを利用する。
【００５８】
[0073]図７が、直接レンダリングモードを使用してシーンをレンダリングするための例示的なコマンド構造を示す概念図である。直接レンダリングモードのためのコマンドは、図５のソフトウェアビニングのためのコマンドに類似するが、ビンごとのやり方でのレンダリングに代えて、フレーム全体が１回のパスでレンダリングされる。例えば、ＩＢ１  ８０における実行コマンドは、ＩＢ１  ６０における実行コマンドに類似するが、ＩＢ１  ８０における実行コマンドは、ビンのロード、レンダリング、および保存よりもむしろ、フレームをロード、レンダリング、および保存するそれぞれのＩＢ２のコマンドを指す。より具体的には、ＩＢ１  ８０内のフレームロード実行コマンドは、フレームのデータをシステムメモリにロードするコマンド（システムメモリへロードする）を含むロードＩＢ２  ８６を指す。ＩＢ１  ８０内のコマンドは、プリアンブル、プリアンブル／リストア（ｒｅｓｔｏｒｅ）、レンダーパスの設定、フレームのロード、フレームのレンダリング、およびフレームの保存を含むことができる。ＩＢ１  ８０におけるフレームレンダリング実行コマンドは、ＧＰＵ１２にフレーム内のプリミティブの描画を実行させる命令群を含むレンダリングＩＢ２  ８８を指す。ソフトウェアビニングと同様に、直接レンダリングモードにおけるレンダリングは、ハードウェア・ビニング・パスまたは視認性ストリームを利用することがない。レンダリングＩＢ２  ８８における描画コマンド（例えば、Ｔｒｉ  Ａを描画する、Ｔｒｉ  Ｂを描画する、Ｔｒｉ  Ｃを描画する）は、レンダリングされた三角形を保存するためにシステムメモリを利用すると考えられる。フレーム保存実行コマンドが、レンダリングされたフレームをシステムメモリから別のメモリ（例えば、フレームバッファ１５）に保存するための命令群（システムメモリから保存する）を含むストアＩＢ２  ９０を指している。
【００５９】
[0074]ＩＢ１  ８０のプリアンブル実行コマンドが、ＧＰＵ１２の静的状態および初期のレンダリング状態を確立するための命令群を含むプリアンブルＩＢ２  ８２を指している。これらのコマンドは、図６のプリアンブルＩＢ２  ６２のコマンドと同様に機能するが、ビニング・レンダリング・モードよりもむしろ直接レンダリングモードのためのレンダリング状態をセットアップする。
【００６０】
[0075]本開示の技法によれば、アプリケーション（例えば、図２のソフトウェアアプリケーション２４）がシーンのレンダリングを始める前に、１つ以上のプロセッサ（例えば、ＣＰＵ６）上で実行されるグラフィックスドライバ（例えば、グラフィックスドライバ７）が、望ましいレンダリングパスに関する発見的（ｈｅｕｒｉｓｔｉｃ）データに基づいて、レンダリングモードの決定（例えば、ビニングレンダリングと直接レンダリングとの間の決定）を行う。いくつかの技法においては、現在のレンダリングパスに関する発見的データは、以前のレンダリングパスから集められうる。しかしながら、この技法は、アプリケーションが新たなシーンのレンダリングの前にレンダリング技法を切り換える可能性があるため、レンダリングモードを決定するための最適なやり方でない場合もありうる。したがって、この技法は、適切なレンダリングモードへ切り換えるための新しいデータが充分に蓄積されるまで、非効率なレンダリングにつながる可能性がある。
【００６１】
[0076]さらに、過去のレンダリングに関する発見的データは、現在のシーンが以前のシーンとは異なる場合、現在のシーンにとって最適なレンダリングモードを、常にはもたらさない可能性がある。例えば、素早く切り換わるレンダリングモードを最適に使用するアプリケーションは、そのような発見的解析を使用すると、多数の誤った予測につながる可能性がある。理想的には、グラフィックスドライバが、所与のレンダリングターゲットについてレンダリングロードを判断し、レンダリングモードの決定を速やかに行うことができる。本開示は、レンダリングモードのより最適な決定のための技法およびレンダリングモード間で切り換えるための技法を提案する。
【００６２】
[0077]以下の技法は、任意のグラフィックス・アプリケーション・プログラム・インターフェイス（ＡＰＩ）を使用するグラフィックス処理システムに適用可能であり、特にビニングレンダリングを利用するグラフィックスＡＰＩに適している。そのようなＡＰＩの例は、ＭｉｃｒｏｓｏｆｔのＤｉｒｅｃｔＸ９（ＤＸ９）、ＤＸ１０、およびＤＸ１１、ならびにＯｐｅｎＧＬおよびＯｐｅｎＧＬ  ＥＳなどのオープンソースのグラフィックスＡＰＩを含む。
【００６３】
[0078]図８は、本開示の一例によるレンダリングコマンドパッチングを説明する概念図である。最初に、グラフィックス処理システム（例えば、図１のコンピュータデバイス２）が、特定のアプリケーションがビニングモードにおいて現在のレンダリングターゲット（例えば、１つ以上のフレーム）をより最適にレンダリングすると仮定する。特定のレンダリングモード（例えば、ビニングまたは直接レンダリング）の選択は、グラフィックスドライバ７によって処理されうる。ビニングが有効にされるとき、グラフィックスドライバ７は、所与のレンダリングターゲットについてのロード、保存、レンダリング、およびブロック転送（ＢＬＴ）のコマンドのすべてを、フラッシュ（ｆｌｕｓｈ）が求められるまでバッチにまとめる（ｂａｔｃｈ）。この文脈において、フラッシュ（ｆｌｕｓｈ）は、ドライバによってバッチにまとめられたレンダリングコマンドをハードウェア（例えば、ＧＰＵ１２）に送信することを意味する。ロード、保存、レンダリング、およびＢＬＴのためのコマンドは、別々のバッファ（例えば、別々のＩＢ２バッファ）に保存されうる。例えば、レンダリングコマンドは、ビニング・レンダリング・モードＩＢ２  ６８に保存されうる。
【００６４】
[0079]ビニング・レンダリング・モードにおけるレンダリングコマンドは、高速なグラフィックメモリ（ＧＭＥＭ）にアクセスされうるように、特定のレジスタに書き込まれた専用のアドレスを使用する。グラフィックスドライバ７が、最初にすべてのレンダリングについてビニングが有効にされると仮定するため、システムメモリに対するＧＭＥＭの選択を有するすべてのレジスタが、ＧＭＥＭアドレスを使用する。図８のビニング・レンダリング・モードＩＢ２  ６８が、三角形の描画（Ｔｒｉを描画する）に関する一連のコマンドを示し、コマンド１、４、および５がＧＭＥＭアドレスを利用する。
【００６５】
[0080]レンダリングがフラッシュされるべき場合、グラフィックスドライバが、実行されようとしているすべてのレンダリングコマンドにアクセスする。本開示の技法によれば、グラフィックスドライバ７が、レンダリングコマンドを解析するように構成されてよく、１つ以上のレンダリング特性（すなわち、レンダリングパスに関する発見的データ）を考慮に入れることができる。そのようなレンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストが有効にされているか否かのインジケーション、使用されるシェーダの複雑さ、描画されたプリミティブの数、テクスチャリード（ｔｅｘｔｕｒｅ  ｒｅａｄｓ）の数、テクスチャリードのサイズ、および／または使用されるすべての表面のマイクロタイリングモード（ｍｉｃｒｏ−ｔｉｌｉｎｇ  ｍｏｄｅ）を含むことができる。
【００６６】
[0081]例えば、レンダリングターゲットのサイズに基づき、ＧＰＵドライバ７は、ビニングのオーバーヘッド（例えば、ＧＭＥＭへのロード／保存サイクルおよびビニングパスを実行するための時間）がビニングのプラスの効果によってオフセットされるか否かを判断することができる。例えば、小さなレンダリングターゲット（例えば、１６×１６）は、たとえシステムメモリへの節約の場合でも、直接レンダリングモードにおいてより高速に実行できる。
【００６７】
[0082]別の例として、デプステストを利用しないグラフィックスパイプラインは、ビニング・レンダリング・モードの利点を利用しなくてもよい。典型的には、ビニングが使用されない場合、デプステストは、既存のデプス値を読み出し、テストを実行し、次いで新たなデプス値をシステムメモリ内のバッファに書き戻すために適用されなければならない。ビニングにおいては、デプステストのプロセスがＧＭＥＭにおいて行われ、それを「フリー（ｆｒｅｅ）」にする（すなわち、きわめて高速であり、オーバーヘッド時間が最小限である）。したがって、特定のグラフィックスパイプラインについて有効にされたデプステストが存在しない場合、ビニング・レンダリング・モードは、デプステストに関係するいかなるメモリ帯域の節約ももたらさないと考えられる。したがって、デプステストが無効にされ、あるいは使用されていない場合、ＧＰＵドライバ７は、直接レンダリングモードが好ましいと判断することができる。
【００６８】
[0083]別の例として、ビニング・レンダリング・モードは、デプスの複雑さ（例えば、種々のデプスにおけるプリミティブ）および三角形の間のオーバーラップが存在する場合に、最大の利益をもたらす。描画されるプリミティブの数が少ないと、ビニング・レンダリング・モードからの利益も、小さくなりうる。したがって、ＧＰＵドライバ７は、描画すべきプリミティブの数が少ないときに、直接レンダリングモードが好ましいと判断することができる。同様に、ＧＰＵドライバ７は、多数のプリミティブが描画されるべき場合に、ビニング・レンダリング・モードが好ましいと判断することができる。
【００６９】
[0084]別の例として、テクスチャを実行するとき、システムメモリへの余分な保存およびシステムメモリからの余分な読み出しが、システムメモリの帯域幅に負の影響をもたらす。したがって、テクスチャリングの際には、ビニング・レンダリング・モードが、より迅速なメモリへのアクセスをもたらす（すなわち、大部分の保存および読み出しが、より高速なＧＭＥＭにおいて実行される）。描画されるシーンにおけるテクスチャ操作の数および頻度が、ビニング・レンダリング・モードからの利益を無駄にする可能性がある。すなわち、テクスチャ操作が少ないということが、ビニング・レンダリング・モードによってもたらす利益が少なく、代わりに直接レンダリングモードを使用すべきであることを示唆できる。
【００７０】
[0085]レンダリングコマンドの解析の結果は、上述した種々の特性のうちの１つ以上を例えば重み付けまたは重み付けなしのやり方で考慮することができる「スコア」として計算されうる。このスコアが所与のしきい値を下回る場合、直接レンダリングモードが使用される。このスコアが所与のしきい値を上回る場合、ビニング・レンダリング・モードが使用される。したがって、この技法は、現在のレンダリングモードを決定するための現在のレンダリングターゲットのジャスト・イン・タイム（ＪＩＴ）の解析を提供する。過去のレンダリングパスの発見的解析は、不要である。しかしながら、過去のレンダリングパスの発見的解析は、現在のレンダリングターゲットの解析に代え、あるいは現在のレンダリングターゲットの解析と合わせて使用されうる。例えば、現在のレンダリングモードのＪＩＴ解析は、過去のレンダリングについて蓄積された統計量の発見的解析から決定されたレンダリングモードが無効である旨のインジケータとして使用されうる。
【００７１】
[0086]本開示の別の例によれば、レンダリングモードの決定（例えば、ビニング・レンダリング・モードと直接レンダリングモードとの間の決定）は、「ハードウェア」ビニングを利用するグラフィックス処理システムにおいてオーバードロートラッカー（ｏｖｅｒｄｒａｗ  ｔｒａｃｋｅｒ）を使用して行われうる。
【００７２】
[0087]図９は、本開示の一例によるオーバードロートラッキングを説明する概念図である。ビニング・レンダリング・モードは、大量のオーバードローが存在する場合に、直接レンダリングモードと比べて最も効果的である。オーバードローは、オーバーラップするいくつかのグラフィックスプリミティブが存在する場合に生じる。そのようなプリミティブをすべて描画することは、いくつかのプリミティブの一部分が最終的なシーンにおいて見えない（例えば、別の不透明なプリミティブの後方に位置する）可能性があるため、効率的でない可能性がある。「ハードウェア」ビニングは、（例えば、上述のとおりの視認性ストリームを生成することによって）フレームの特定のタイルにおいてオーバードローを減らすために使用されうる。
【００７３】
[0088]ビニングを利用するグラフィックスアーキテクチャにおいては、典型的には２つの段階が存在し、すなわち１）プリミティブを変換後の頂点の位置に基づいて画面に整列したビンに仕分けするビニング段階、および２）これらのビンの各々（すなわち、ビン内のプリミティブ）がレンダリングされるレンダリング段階が存在する。仕分けのステップに加えて、いくつかのグラフィックス処理アーキテクチャは、（例えば、いわゆる「ハードウェア」ビニングにおいて）プリミティブごとの視認性ストリームおよび領域に関連付けられた粗いデプス（Ｚ）値も生成する。しかしながら、この「ハードウェア」ビニングが、ビンにおけるプリミティブの分布および関連のオーバードローについての直接的な情報を生み出すことができないことに、留意すべきである。本開示は、粗いＺラスタライザと同じ粒度のオーバードロートラッカーを追加することを提案する（すなわち、ビニングＩＢ２  ９４におけるコマンド）。例えば、各々のビンについてオーバードローの量を計算し、計算されたオーバードローの量に基づいてオーバードロートラッカーを更新するようにＧＰＵ１２に指示するコマンド（例えば、「オーバードロー計算」および「オーバードロートラッカー更新」）を、ビニングＩＢ２  ９４に追加されうる。
【００７４】
[0089]この「オーバードロー」は、各領域（ここで、領域は、ピクセル、ビンの一部分、ビン、または複数のビンであってよい）においてラスタライズされるプリミティブの間のオーバーラップを表し、したがってビニングレンダリングの使用の利益を表す領域ごとの整数値であってよい。グラフィックスドライバ７が、オーバードロー数にアクセスすることができ、オーバードロー数を使用してレンダリングモードの決定を行うことができる。次いで、この技法は、この値をビン内のすべての領域に集め、さらにはシーン内のすべてのビンに集めるように拡張されうる。これは、ソフトウェアアプリケーションおよび／またはドライバ（例えば、グラフィックスドライバ７）が、ビニングレンダリングが有益であるか否かについて（他の経験則よりも）速やかな判断を行うことを可能にする。さらに、これらの技法は、複雑なレンダリングのシナリオにおいて活動の領域を視覚化するためのデバッグツールとして使用されることもできる。
【００７５】
[0090]図１０が、４つの１６×１６のビンにおいてオーバードローを計算する一例を示している。この例では、「オーバーラップ」が各々のピクセルについて最初に計算される。オーバーラップは、ピクセルに触れる２つ以上のプリミティブの数として定義される。ビン９５および９９のすべてのピクセルが、０というオーバーラップスコアを有すると考えられる一方で、例えばビン１０１のピクセル９６は、２つの三角形がこのピクセルにあるため、１というオーバーラップスコアを有すると考えられる。「オーバードロー」数は、ビンについてのオーバーラップスコアの合計を、このビンのピクセルの総数で割り算したものと定義されうる（例えば、オーバードロー＝（ピクセルごとのオーバーラップの合計）／（ピクセルの数））。図１０に示した例では、ビン１０１が、３０／１６というオーバードロー数を有すると考えられる一方で、ビン９５および９９の両方は、０というオーバードロースコアを有すると考えられる。特定のしきい値を超えるオーバードロー数が、このオーバードロー数に関連付けられた領域についてビニング・レンダリング・モードが使用されるべきであることを示すことができる一方で、特定のしきい値を下回るオーバードロー数は、このオーバードロー数に関連付けられた領域について直接レンダリングモードが使用されるべきであることを示すことができる。
【００７６】
[0091]図８に戻ると、スコアに基づき（レンダリングコマンドおよび／またはオーバードロートラッカーの解析に基づき）、グラフィックスドライバ７が、最適なモードを決定する。より最適なレンダリングモードの決定と併せて、グラフィックスドライバ７は、ＧＭＥＭアドレスを利用するすべてのビニング・レンダリング・コマンド（例えば、図８の例におけるコマンド１、４、および５）を探知するようにさらに構成されうる。グラフィックスドライバ７は、ＧＭＥＭアドレスを使用するビニング・レンダリング・コマンドがシステム・メモリ・アドレスを使用するように変更されるよう、（例えば、システムメモリ１０において）これらのコマンドの各々について対応するシステム・メモリ・アドレスを保存することができる。直接レンダリングがより最適なモードであると判断される場合、グラフィックスドライバ７は、ＧＭＥＭアドレスをシステム・メモリ・アドレスで置き換えるようにビニング・レンダリング・モードＩＢ２  ６８にパッチを当て、直接レンダリングモードＩＢ２  ８８を生成することができる。このやり方で、直接レンダリングのためのレンダリングコマンドは、直接レンダリングモードＩＢ２のコマンド構造の全体を作り直すことなく、生成されうる。最後に、フラッシュの時点において、グラフィックスドライバ７は、ＢＬＴ  ＩＢ２およびレンダリングＩＢ２（この場合には、システム・メモリ・アドレスを使用するように変更されたレンダリングＩＢ２）を実行するためのコマンドをＩＢ１（例えば、図７のＩＢ１  ８０）に追加し、ＧＰＵ７はＩＢ１の実行を開始するためにシグナリングされる。
【００７７】
[0092]本開示の別の例では、レンダリングに使用される各々のレジスタは、ハードウェアにて実装されうる。図１１が、本開示のこの例によるレンダリングモードの選択を説明する概念図である。グローバル制御レジスタ１０２は、所与のレンダリングモードにどのレジスタのセット（例えば、ビニング・レンダリング・モード・レジスタ１０４または直接レンダリング・モード・レジスタ１０６）が使用されるかを制御するために使用されうる。ビニング・レンダリング・モード・レジスタ１０４は、デスティネーション表面情報（すなわち、ビン）、ＧＭＥＭのアドレスレジスタ、および（ハードウェアベースのビニングレンダリングにおける）視認性ストリームの使用を処理する（ｈａｎｄｌｅ）ことができる。直接レンダリング・モード・レジスタ１０６は、システムメモリへのアドレスを含むことができる。グローバル制御レジスタ１０２が、上述のように、例えばレンダリングモードのＪＩＴ解析に基づいて、レンダリングＩＢ２  １１８のコマンドを配置するために上述のレジスタのうちのどのバージョンが使用されるかを制御する。グラフィックスドライバ７が、ビニング・レンダリング・モード・レジスタ１０４または直接レンダリング・モード・レジスタ１０６を選択するようにグローバル制御レジスタ１０２を制御することができる。上述のようにソフトウェアにてＩＢ２にパッチを適用するよりもむしろ、この技法は、ハードウェアレジスタを使用する。グローバル制御レジスタ１０２は、ＩＢ１に位置してもよい。
【００７８】
[0093]本開示の別の例では、コマンドバッファのパッチ適用のための技法が提案される。図１２が、本開示のこの例によるレンダリングコマンドパッチングを説明する概念図である。この例の提案される技法は、ビニング・レンダリング・モードから直接レンダリングモードへ切り換える際のコマンドバッファのパッチ適用に使用されうる。しかしながら、以下の技法は、コマンドバッファのパッチ適用が望まれる任意の状況において利用されうる。例えば、コマンドは、グラフィックスメモリの仮想化をサポートし、より低いＭＩＰにおいてリソース詳細レベル（ＬＯＤ）のＭＩＰレベルを変更し、あるいはコマンドバッファの実行前にコレクトネススキャナ（ｃｏｒｒｅｃｔｎｅｓｓ  ｓｃａｎｎｅｒ）を実行するためにパッチが適用されうる。ビニング・レンダリング・モードから直接レンダリングモードへ切り換えるためのコマンドバッファへのパッチ適用に必要なＣＰＵサイクルが、特定のシナリオにおいては高価につく可能性がある。この例は、ＣＰＵオーバーヘッドの軽減を目的とする。
【００７９】
[0094]一般に、この技法は、コマンドバッファにパッチを適用するために（ＧＰＵドライバ７の代わりに）ＧＰＵ１２を使用することによって、ＣＰＵのオーバーヘッドを最小限にするやり方を、グラフィックスドライバ７に提供する。図８の例において、グラフィックスドライバ７がビニングと直接レンダリングとの間で切り換える場合に、グラフィックスドライバ７は、ＩＢ１への実行コマンドの追加に先立って、すべてのＩＢ２コマンドを探知し、パッチを適用する。この例は、パッチリスト（例えば、図８のシステムメモリ１０に示されているパッチリスト）を構築する代わりに、グラフィックスドライバ７が、別のＩＢ２のコマンド（例えば、任意の全体操作コマンド）を変更する書き込みコマンドを含む別のパッチングＩＢ２  ９８を作成することを提案する。例えば、書き込みコマンドのデスティネーションが、グラフィックスドライバ７によって直接レンダリングモードが選択される場合にシステム・メモリ・アドレスを使用するための変更を必要とするビニング・レンダリング・モードＩＢ２  ６８内の場所であってよい。グラフィックスドライバ７は、コマンドをフラッシュ（ｆｌｕｓｈ）しようとするとき、直接レンダリングモードに入るために「パッチングＩＢ２」のコマンドを実行するか、あるいはパッチングＩＢ２を省略してビニングモードを継続するかの選択を有する。グラフィックスドライバ７は、ＩＢ１  ８０の実行コマンドに実行コマンド（パッチレンダーＩＢ２）を加えることによってパッチングＩＢ２  ９８の実行を達成できる。このやり方で、ＧＰＵ１２は、ＩＢ２  ６８のレンダリングコマンドを実行する前にＩＢ２  ９８のパッチングコマンドを実行する。このように、ＣＰＵ６にパッチを作成させるよりもむしろ、ＧＰＵ１２自身が、レンダリングモードの切り換えを達成するためのレンダリングＩＢ２  ６８へのパッチを作成する。
【００８０】
[0095]図１３は、本開示の一例による方法を説明するフローチャートである。図１３の方法は、コンピュータデバイス２に存在するＣＰＵ６、ＧＰＵ１２、ならびに／あるいは任意の他のハードウェア、ファームウェア、ソフトウェア要素、またはこれらの組み合わせによって実行されうる。ＣＰＵ６は、フレームのレンダリングのためのレンダリングコマンドを生成するように構成され得、ここでレンダリングコマンドは、ビニング・レンダリング・モードのためのレンダリングコマンドである（１３０２）。ＣＰＵ６は、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知するようにさらに構成されうる（１３０４）。
【００８１】
[0096]次いで、ＣＰＵ６は、レンダリング特性に基づいて、フレームのために、複数のレンダリングモードのうちの１つを決定することができ、ここで複数のレンダリングモードはビニング・レンダリング・モードおよび直接レンダリングモードを含む（１３０６）。レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含む。複数のレンダリングモードのうちの１つを決定することは、現フレームのレンダリング特性に基づいて複数のレンダリングモードのうちの１つを決定することを含むことができる。他の例では、複数のレンダリングモードのうちの１つを決定することが、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて複数のレンダリングモードのうちの１つを決定することを含むことができる。
【００８２】
[0097]次いで、ＣＰＵ６は、決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することができる（１３０８）。決定されたレンダリングモードがビニング・レンダリング・モードである場合には、ＣＰＵ６は、レンダリングコマンドを変更しない。
【００８３】
[0098]さらに、ＣＰＵ６は、実行コマンドを第１のバッファに保存し、レンダリングコマンドを第２のバッファに保存するように構成されうる。実行コマンドが、レンダリングコマンドを指す。レンダリングコマンドを変更すること（１３０８）は、第２のバッファにパッチを適用することによってグラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えることを含むことができる。さらに、ＣＰＵ６は、第２のバッファ内のレンダリングコマンドを指す実行コマンドを第１のバッファに追加することができる。次いで、ＧＰＵ１２が、第１のバッファ内の実行コマンドを実行することができる。
【００８４】
[0099]別の例では、ＣＰＵ６は、ビニングモード特有の情報を第１のレジスタに保存し、直接レンダリングモード特有の情報を第２のレジスタに保存し、決定されたレンダリングモードに基づいて第１のレジスタおよび第２のレジスタの間で選択を行うためにグローバルレジスタを利用するように構成されうる。ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、グラフィックス・メモリ・アドレス、および視認性ストリームの使用のうちの少なくとも１つを含み、直接レンダリングモード特有の情報は、システム・メモリ・アドレスを含む。
【００８５】
[0100]図１４は、本開示の一例による方法を説明するフローチャートである。図１４の方法は、コンピュータデバイス２に存在するＣＰＵ６、ＧＰＵ１２、ならびに／あるいは任意の他のハードウェア、ファームウェア、ソフトウェア要素、またはこれらの組み合わせによって実行されうる。ＣＰＵ６は、シーンのプリミティブについてのビニング操作を実行し、ここでプリミティブがビンに分割され（１４０２）、シーンの一領域におけるプリミティブのオーバードローの量を表すオーバードロー数を計算し（１４０４）、計算されたオーバードロー数に基づいてレンダリングモードを決定する（１４０６）ように構成される。オーバードロー数が何らかのしきい値よりも大きい場合、ビニング・レンダリング・モードは、レンダリングモードとして決定されうる。オーバードロー数が何らかのしきい値よりも小さい場合、直接レンダリングモードが、レンダリングモードとして決定されうる。次いで、ＧＰＵ１２が、決定されたレンダリングモードに従ってシーンをレンダリングすることができる（１４０８）。
【００８６】
[0101]オーバードロー数は、ビンの一領域について、複数のビン上で、および／またはシーン全体について計算されうる。ビンについてオーバードロー数を計算（１４０４）する１つの例示的な技法は、ビン内の各ピクセルについてオーバーラップ値を計算し、ビン内の各ピクセルについて計算された各々のオーバーラップ値を合計して総オーバーラップ値を生成し、総オーバーラップ値をビン内のピクセルの数で割り算することによってオーバードロー数を生成することを含むことができる。オーバーラップ値は、ピクセルに触れる２つ以上のプリミティブの数として定義される。
【００８７】
[0102]図１５が、本開示の一例による方法を説明するフローチャートである。図１５の方法は、コンピュータデバイス２に存在するＣＰＵ６、ＧＰＵ１２、ならびに／あるいは任意の他のハードウェア、ファームウェア、ソフトウェア要素、またはこれらの組み合わせによって実行されうる。ＣＰＵ６は、グラフィックス操作を実行するための操作コマンドを第１のバッファに保存し（１５０２）、書き込みコマンドを第２のバッファに保存し、ここで書き込みコマンドは第１のバッファ内の操作コマンドを変更して変更された操作コマンドを生成する（１５０４）ように構成されうる。操作コマンドおよび書き込みコマンドは、グラフィックスプロセッサによって実行可能である。さらに、ＣＰＵ６は、第２のバッファ内の書き込みコマンドの実行を生じさせ（１５０６）、第２のバッファ内の書き込みコマンドの実行を生じさせた後で第１のバッファ内の変更された操作コマンドの実行を生じさせる（１５０８）ように構成されうる。一例においては、操作コマンドが、ビニング・レンダリング・モードのためのレンダリングコマンドを含み、書き込みコマンドが、ビニング・レンダリング・モードのためのレンダリングコマンドを直接レンダリングモードのためのレンダリングコマンドに変更する。
【００８８】
[0103]図１６が、図１５に示した一般的な技法を利用する例示的な方法を説明するフローチャートである。図１６の方法は、コンピュータデバイス２に存在するＣＰＵ６、ＧＰＵ１２、ならびに／あるいは任意の他のハードウェア、ファームウェア、またはソフトウェア要素によって実行されうる。ＣＰＵ６は、フレームをレンダリングするための操作コマンドを生成し、ここで操作コマンドはビニング・レンダリング・モードのためのものである（１６０２）、グラフィックス・メモリ・アドレスを使用する操作コマンドを探知する（１６０４）ように構成されうる。さらに、ＣＰＵ６は、書き込みコマンドを生成し、ここで書き込みコマンドはグラフィックス・メモリ・アドレスを使用する操作コマンドを変更してシステム・メモリ・アドレスを使用する操作コマンドにする（１６０６）ように構成されうる。ＣＰＵ６は、操作コマンドを第１のバッファに保存し（１６０８）、書き込みコマンドを第２のバッファに保存する（１６１０）。
【００８９】
[0104]さらに、ＣＰＵは、レンダリング特性に基づいて、フレームについて、複数のレンダリングモードのうちの１つを決定し、ここで複数のレンダリングモードはビニング・レンダリング・モードおよび直接レンダリングモードを含む（１６１２）ように構成されうる。レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含むことができる。複数のレンダリングモードのうちの１つを決定することは、現フレームのレンダリング特性に基づいて複数のレンダリングモードのうちの１つを決定することを含むことができる。他の例では、複数のレンダリングモードのうちの１つを決定することが、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて複数のレンダリングモードのうちの１つを決定することを含むことができる。
【００９０】
[0105]さらに、ＣＰＵ６は、決定されたレンダリングモードが直接レンダリングモードである場合に、第２のバッファ内の書き込みコマンドの（例えば、ＧＰＵ１２による）実行を生じさせる（１６１４）ように構成されうる。
【００９１】
[0106]１つ以上の例において、上述の機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組み合わせにて実装されうる。ソフトウェアにて実装される場合、これらの機能は、１つ以上の命令群またはコードとして、非一時的なコンピュータ読取可能な媒体を備える製造物に格納されうる。コンピュータ読取可能な媒体は、コンピュータデータ記憶媒体を含むことができる。データ記憶媒体は、本開示において記述された技法を実装するための命令群、コード、および／または、データ構造を取得するために１または複数のコンピュータまたは１または複数のプロセッサによってアクセスされうる任意の利用可能な媒体でありうる。例として、これらに限られるわけではないが、そのようなコンピュータ読取可能な媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイス、Ｆｌａｓｈメモリ、あるいは所望のプログラムコードを命令群またはデータ構造の形態で搬送または保存するために使用され得、コンピュータによるアクセスが可能である任意の他の媒体を備えることができる。本明細書において使用されるとき、ディスク（ｄｉｓｋおよびｄｉｓｃ）は、コンパクトディスク（ＣＤ）、レーザディスク（登録商標）、光ディスク、デジタル多用途ディスク（ＤＶＤ）、フロッピー（登録商標）ディスク、およびＢｌｕ−ｒａｙ（登録商標）ディスクを含み、ここでディスク（ｄｉｓｋ）が、通常はデータを磁気的に再生する一方で、ディスク（ｄｉｓｃ）は、データをレーザで光学的に再生する。上記の組み合わせもまた、コンピュータ読取可能な媒体の範囲内に含まれるべきである。
【００９２】
[0107]コードは、１つ以上のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、あるいは他の同等の論理集積回路または個別な論理回路など、１つ以上のプロセッサによって実行されうる。さらに、いくつかの態様においては、本明細書に記載の機能は、専用のハードウェアおよび／またはソフトウェアモジュールにおいて提供されうる。さらに、これら技法は、１または複数の回路または論理要素で完全に実装されうる。
【００９３】
[0108]本開示の技法は、無線ハンドセット、集積回路（ＩＣ）、またはＩＣのセット（例えば、チップセット）を含む種々さまざまなデバイスまたは装置において実装されうる。さまざまな構成要素、モジュール、またはユニットは、本開示では、開示された技法を実行するように構成されたデバイスの機能態様を強調するように記載されているが、異なるハードウェア・ユニットによる実現を必ずしも必要とするわけではない。むしろ、前述されたように、さまざまなユニットは、適切なソフトウェアおよび／またはハードウェアと連携する、前述されたような１または複数のプロセッサを含む共通のハードウェア・ユニットの集合によって提供されうるか、コーデック・ハードウェア・ユニットに結合されうる。
【００９４】
[0109]さまざまな例が記載された。これらの例およびその他の例は、以下の特許請求の範囲の範囲内である。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
フレームをレンダリングするためのレンダリングコマンドを生成することであって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、
グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知することと、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定することであって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することと
を備えるグラフィックス処理の方法。
［Ｃ２］
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しないこと
をさらに備えるＣ１に記載の方法。
［Ｃ３］
実行コマンドを第１のバッファに保存することと、
前記レンダリングコマンドを第２のバッファに保存することと
をさらに備え、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変化させることは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるために前記第２のバッファにパッチを適用することを備えるＣ２に記載の方法。
［Ｃ４］
前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加することと、
前記第１のバッファ内の前記実行コマンドを実行することと
をさらに備えるＣ３に記載の方法。
［Ｃ５］
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含むＣ１に記載の方法。
［Ｃ６］
前記複数のレンダリングモードのうちの１つを決定することは、現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定することをさらに備えるＣ５に記載の方法。
［Ｃ７］
前記複数のレンダリングモードのうちの１つを決定することは、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定することをさらに備えるＣ５に記載の方法。
［Ｃ８］
ビニングモード特有の情報を第１のレジスタに保存することと、
直接レンダリングモード特有の情報を第２のレジスタに保存することと、
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用することと
をさらに備えるＣ１に記載の方法。
［Ｃ９］
前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、前記グラフィックス・メモリ・アドレス、および視認性ストリームの使用のうちの少なくとも１つを含み、前記直接レンダリングモード特有の情報は、前記システム・メモリ・アドレスを含むＣ８に記載の方法。
［Ｃ１０］
グラフィックス処理のために構成された装置であって、
フレームをレンダリングするためのレンダリングコマンドを生成するための手段であって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成するための手段と、
グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知するための手段と、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定するための手段であって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定するための手段と、
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更するための手段と
を備える装置。
［Ｃ１１］
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しないための手段
をさらに備えるＣ１０に記載の装置。
［Ｃ１２］
実行コマンドを第１のバッファに保存するための手段と、
前記レンダリングコマンドを第２のバッファに保存するための手段と
をさらに備え、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるために前記第２のバッファにパッチを適用することを備えるＣ１１に記載の装置。
［Ｃ１３］
前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加するための手段と、
前記第１のバッファ内の前記実行コマンドを実行するための手段と
をさらに備えるＣ１２に記載の装置。
［Ｃ１４］
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含むＣ１０に記載の装置。
［Ｃ１５］
前記複数のレンダリングモードのうちの１つを決定するための前記手段は、現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するための手段をさらに備えるＣ１４に記載の装置。
［Ｃ１６］
前記複数のレンダリングモードのうちの１つを決定するための前記手段は、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するための手段をさらに備えるＣ１４に記載の装置。
［Ｃ１７］
ビニングモード特有の情報を第１のレジスタに保存するための手段と、
直接レンダリングモード特有の情報を第２のレジスタに保存するための手段と、
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用するための手段と
をさらに備えるＣ１０に記載の装置。
［Ｃ１８］
前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、前記グラフィックス・メモリ・アドレス、および視認性ストリームの使用のうちの少なくとも１つを含み、前記直接レンダリングモード特有の情報は、前記システム・メモリ・アドレスを含むＣ１７に記載の装置。
［Ｃ１９］
グラフィックス処理のために構成された装置であって、
フレームをレンダリングするためのレンダリングコマンドを生成することであった、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成することと、
グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知することと、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定することであって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定することと、
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更することと
を行うように構成された１つ以上のプロセッサを備える装置。
［Ｃ２０］
前記１つ以上のプロセッサが、
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しない
ようにさらに構成されたＣ１９に記載の装置。
［Ｃ２１］
前記１つ以上のプロセッサが、
実行コマンドを第１のバッファに保存し、
前記レンダリングコマンドを第２のバッファに保存する
ようにさらに構成され、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるように前記第２のバッファにパッチを適用することを備えるＣ２０に記載の装置。
［Ｃ２２］
前記１つ以上のプロセッサが、前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加するようにさらに構成され、
前記装置が、前記第１のバッファ内の前記実行コマンドを実行するように構成されたグラフィックスプロセッサをさらに備えるＣ２１に記載の装置。
［Ｃ２３］
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含むＣ１９に記載の装置。
［Ｃ２４］
前記１つ以上のプロセッサが、現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するようにさらに構成されるＣ２３に記載の装置。
［Ｃ２５］
前記１つ以上のプロセッサが、現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定するようにさらに構成されたＣ２３に記載の装置。
［Ｃ２６］
前記１つ以上のプロセッサが、
ビニングモード特有の情報を第１のレジスタに保存し、
直接レンダリングモード特有の情報を第２のレジスタに保存し、
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用する
ようにさらに構成されたＣ１９に記載の装置。
［Ｃ２７］
前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、前記グラフィックス・メモリ・アドレス、および視認性ストリームの使用のうちの少なくとも１つを含み、前記直接レンダリングモード特有の情報は、前記システム・メモリ・アドレスを含むＣ２６に記載の装置。
［Ｃ２８］
前記１つ以上のプロセッサが、モバイルデバイス内にあるＣ１９に記載の装置。
［Ｃ２９］
命令群を格納しているコンピュータ読取可能な記憶媒体であって、
前記命令群が、実行されたときに、グラフィックス処理のために構成されたデバイスの１つ以上のプロセッサに、
フレームをレンダリングするためのレンダリングコマンドを生成することであって、前記レンダリングコマンドはビニング・レンダリング・モードのためのものである、生成すること、
グラフィックス・メモリ・アドレスを使用するレンダリングコマンドを探知すること、
レンダリング特性に基づいて、前記フレームについて、複数のレンダリングモードのうちの１つを決定することであって、前記複数のレンダリングモードは前記ビニング・レンダリング・モードおよび直接レンダリングモードを含む、決定すること、および
前記決定されたレンダリングモードが直接レンダリングモードである場合に、グラフィックス・メモリ・アドレスを使用する前記レンダリングコマンドを、システム・メモリ・アドレスを使用するように変更すること
を実行させるコンピュータ読取可能な記憶媒体。
［Ｃ３０］
前記命令群が、前記１つ以上のプロセッサに、
前記決定されたレンダリングモードが前記ビニング・レンダリング・モードである場合に、前記レンダリングコマンドを変更しないこと
をさらに実行させるＣ２９に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３１］
前記命令群が、前記１つ以上のプロセッサに、
実行コマンドを第１のバッファに保存すること、および
前記レンダリングコマンドを第２のバッファに保存すること
をさらに実行させ、
前記実行コマンドは、前記レンダリングコマンドを指し、
前記レンダリングコマンドを変更することは、グラフィックス・メモリ・アドレスをシステム・メモリ・アドレスで置き換えるために前記第２のバッファにパッチを適用することを備えるＣ３０に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３２］
前記命令群が、前記１つ以上のプロセッサに、
前記第２のバッファ内の前記レンダリングコマンドを指す実行コマンドを前記第１のバッファに追加すること、および
前記第１のバッファ内の前記実行コマンドをグラフィックスプロセッサに実行させること
をさらに実行させるＣ３１に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３３］
前記レンダリング特性は、レンダリングターゲットのサイズおよびタイプ、デプステストのステータス、シェーダの複雑さ、描画されるプリミティブの数、テクスチャリードの数、テクスチャのサイズ、およびマイクロタイリングモードのうちの少なくとも１つを含むＣ２９に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３４］
前記命令群が、前記１つ以上のプロセッサに、
現フレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定すること
をさらに実行させるＣ３３に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３５］
前記命令群が、前記１つ以上のプロセッサに、
現フレームおよび以前にレンダリングされたフレームのレンダリング特性に基づいて前記複数のレンダリングモードのうちの１つを決定すること
をさらに実行させるＣ３３に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３６］
前記命令群が、前記１つ以上のプロセッサに、
ビニングモード特有の情報を第１のレジスタに保存すること、
直接レンダリングモード特有の情報を第２のレジスタに保存すること、および
前記レンダリングコマンドを変更するために、前記決定されたレンダリングモードに基づいて、前記第１のレジスタと前記第２のレジスタとの間の選択を行うために、グローバルレジスタを利用すること
をさらに実行させるＣ２９に記載のコンピュータ読取可能な記憶媒体。
［Ｃ３７］
前記ビニングモード特有の情報は、デスティネーション表面情報を処理するレジスタアドレス、グラフィックス・メモリ・アドレス、および視認性ストリームの使用のうちの少なくとも１つを含み、前記直接レンダリングモード特有の情報は、システム・メモリ・アドレスを含むＣ３６に記載のコンピュータ読取可能な記憶媒体。
【図１】
0005847960.tif 000002
【図２】
0005847960.tif 000003
【図３】
0005847960.tif 000004
【図４】
0005847960.tif 000005
【図５】
0005847960.tif 000006
【図６】
0005847960.tif 000007
【図７】
0005847960.tif 000008
【図８】
0005847960.tif 000009
【図９】
0005847960.tif 000010
【図１０】
0005847960.tif 000011
【図１１】
0005847960.tif 000012
【図１２】
0005847960.tif 000013
【図１３】
0005847960.tif 000014
【図１４】
0005847960.tif 000015
【図１５】
0005847960.tif 000016
【図１６】
0005847960.tif 000017