(57)【要約】  本開示は、グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行することと、フラッシュ動作を実行することなく、ＧＰＵによってクエリパスに基づいて条件真パスを実行することと、フラッシュ動作を実行することなく、ＧＰＵによってクエリパスに基づいて条件偽パスを実行することと、条件真パスおよび条件偽パスを実行することに応答して、ＧＰＵによってフラッシュ動作を実行することとを含む、タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするためのシステムおよび方法を提供する。【選択図】図６
2017505476.tif 000002
【特許請求の範囲】
【請求項１】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための方法において、
グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行することと、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件真パスを実行することと、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件偽パスを実行することと、
前記条件真パスおよび前記条件偽パスを実行することに応答して、前記ＧＰＵによってフラッシュ動作を実行することとを含む方法。
【請求項２】
前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む請求項１記載の方法。
【請求項３】
前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項２記載の方法。
【請求項４】
前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む請求項１記載の方法。
【請求項５】
直接レンダリングを実行することをさらに含む請求項１記載の方法。
【請求項６】
前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項５記載の方法。
【請求項７】
前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む請求項１記載の方法。
【請求項８】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするデバイスにおいて、
クエリパスを実行するようにと、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件真パスを実行するようにと、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件偽パスを実行するようにと、
前記条件真パスおよび前記条件偽パスを実行することに応答して、フラッシュ動作を実行するように構成されているＧＰＵを具備するデバイス。
【請求項９】
前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む請求項８記載のデバイス。
【請求項１０】
前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項９記載のデバイス。
【請求項１１】
前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む請求項８記載のデバイス。
【請求項１２】
直接レンダリングを実行することをさらに含む請求項８記載のデバイス。
【請求項１３】
前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項１２記載のデバイス。
【請求項１４】
前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む請求項８記載のデバイス。
【請求項１５】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするデバイスにおいて、
グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行する手段と、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件真パスを実行する手段と、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件偽パスを実行する手段と、
前記条件真パスおよび前記条件偽パスを実行することに応答して、前記ＧＰＵによってフラッシュ動作を実行する手段とを具備するデバイス。
【請求項１６】
前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む請求項１５記載のデバイス。
【請求項１７】
前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行する手段をさらに備える請求項１６記載のデバイス。
【請求項１８】
前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む請求項１５記載のデバイス。
【請求項１９】
直接レンダリングを実行することをさらに含む請求項１５記載のデバイス。
【請求項２０】
前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項１９記載のデバイス。
【請求項２１】
前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む請求項１５記載のデバイス。
【請求項２２】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための命令をその上に記憶したコンピュータ読取可能記憶媒体において、
前記命令は、実行される際に、１つ以上のグラフィック処理ユニット（ＧＰＵ）に、
クエリパスを実行させ、
フラッシュ動作を実行させることなく、前記クエリパスに基づいて条件真パスを実行させ、
フラッシュ動作を実行させることなく、前記クエリパスに基づいて条件偽パスを実行させ、
前記条件真パスおよび前記条件偽パスを実行させることに応答して、フラッシュ動作を実行させるコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【優先権の主張】
【０００１】
［０００１］
本出願は、２０１３年１２月２７日に出願され、そのすべての内容が参照によりここに組み込まれている米国仮出願第６１／９２１，１４５号の利益を主張する。
【技術分野】
【０００２】
［０００２］
本開示は、グラフィック処理のための技術に関連し、より具体的には、グラフィック処理においてプリミティブをレンダリングするための技術に関連している。
【背景】
【０００３】
［０００３］
グラフィカル処理ユニット（ＧＰＵ）は、タイルベースのレンダリングを実行してもよく、３次元シーンをレンダリングするために使用してもよい。このような３次元シーンのレンダリングは、メモリ帯域幅を非常にたくさん使うことがあることから、特化されたグラフィックメモリ（ＧＭＥＭ）をＧＰＵコアの近くに位置付けてもよい。ＧＰＵコアは一般的に、ＧＭＥＭを使用してシーンをレンダリングする。ＧＰＵまたは中央処理ユニット（ＣＰＵ）はその後、シーンを含む、ＧＭＥＭのコンテンツをシステムメモリにリゾルブしてもよい。言い換えると、シーンを表すデータは、ＧＭＥＭからシステムメモリに転送されてもよい。移動体環境中のＧＭＥＭのサイズは、物理的エリア制約およびメモリ帯域幅により制限されるかもしれないことから、ＧＰＵはレンダリングされることになるシーンをより小さなパーツに分け、したがって、これらのより小さなパーツを個々にレンダリングしてもよい。特に、ＧＭＥＭにレンダリングできる部分にシーンを分割し、シーンの各部分をＧＭＥＭに個々にレンダリングすることにより、ＧＰＵはシーンをレンダリングしてもよい。
【概要】
【０００４】
［０００４］
一般的に、本開示は、タイルベースのグラフィック処理ユニット（ＧＰＵ）アーキテクチャに対してグラフィックレンダリングを最適化するための技術を説明している。レンダリング命令を実行するときに、中央処理ユニット（ＣＰＵ）とＧＰＵとの間の通信およびデータ転送を減らすことにより、タイルベースのＧＰＵは、グラフィカルオブジェクトおよびシーンをレンダリングする際に、その性能を改善することができる。特に、タイルベースのレンダリングをするように構成されているＧＰＵは、ＣＰＵ対話を待つ必要なく、ＧＰＵ自体の上で、より多くの量のグラフィカルシーンのレンダリングを実行でき、このことは、ＧＰＵのレンダリング性能を改善する。
【０００５】
［０００５］
１つの例において、グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行することと、フラッシュ動作を実行することなく、ＧＰＵによってクエリパスに基づいて条件真パスを実行することと、フラッシュ動作を実行することなく、ＧＰＵによってクエリパスに基づいて条件偽パスを実行することと、条件真パスおよび条件偽パスを実行することに応答して、ＧＰＵによってフラッシュ動作を実行することとを含む方法を本開示は説明する。
【０００６】
［０００６］
別の例において、クエリパスを実行するようにと、フラッシュ動作を実行することなく、クエリパスに基づいて条件真パスを実行するようにと、フラッシュ動作を実行することなく、クエリパスに基づいて条件偽パスを実行するようにと、条件真パスおよび条件偽パスを実行することに応答して、フラッシュ動作を実行するように構成されているＧＰＵを含むデバイスを本開示は説明する。
【０００７】
［０００７］
別の例において、グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行する手段と、フラッシュ動作を実行することなく、ＧＰＵによってクエリパスに基づいて条件真パスを実行する手段と、フラッシュ動作を実行することなく、ＧＰＵによってクエリパスに基づいて条件偽パスを実行する手段と、条件真パスおよび条件偽パスを実行することに応答して、ＧＰＵによってフラッシュ動作を実行する手段とを含むデバイスを本開示は説明する。
【０００８】
［０００８］
別の例において、コンピュータ読取可能記憶媒体を本開示は説明する。命令をその上に記憶したコンピュータ読取可能記憶媒体において、命令は、実行される際に、１つ以上のプロセッサに、クエリパスを実行させ、フラッシュ動作を実行させることなく、クエリパスに基づいて条件真パスを実行させ、フラッシュ動作を実行させることなく、クエリパスに基づいて条件偽パスを実行させ、条件真パスおよび条件偽パスを実行させることに応答して、フラッシュ動作を実行させる。
【図面の簡単な説明】
【０００９】
【図１】［０００９］  図１は、本開示のいくつかの態様にしたがって、３次元シーンをレンダリングするために使用される、プロセッサ、グラフック処理ユニット、およびシステムメモリを図示しているブロックダイヤグラムである。
【図２】［００１０］  図２は、本開示のいくつかの態様にしたがって、タイルベースのレンダリングアーキテクチャ中のシーンのタイルを図示している概念のダイヤグラムである。
【図３】［００１１］  図３は、本開示の態様にしたがって、ビン間に分割されたプリミティブを示している概念のダイヤグラムである。
【図４】［００１２］  図４は、本開示の技術にしたがって、マルチパスレンダリングを実行するための技術を図示している概念のダイヤグラムである。
【図５】［００１３］  図５は、本開示中で説明する１つ以上の例にしたがって、ハードウェアによって実行することができる機能の例を図示している概念のダイヤグラムである。
【図６】［００１４］  図６は、本開示中で説明する１つ以上の例にしたがって、タイルベースのアーキテクチャ上でのマルチパスレンダリングのための例示的な方法を図示しているフローチャートである。
【図７】［００１５］  図７は、本開示の１つ以上の態様を実現するように構成されていてもよい、デバイスの例を図示しているブロックダイヤグラムである。
【詳細な説明】
【００１０】
［００１６］
グラフィック処理ユニット（ＧＰＵ）は、３次元（３Ｄ）シーンをレンダリングするために使用してもよい。３Ｄシーンのこのようなレンダリングはメモリ帯域幅を非常にたくさん使うことがあることから、特化されたグラフィックメモリ（ＧＭＥＭ）を使用してもよい。ＧＭＥＭが非常に広いメモリ帯域幅（すなわち、ＧＭＥＭへの読み出しおよび書き込みアクセスが比較的速い）を有するように、ＧＭＥＭはＧＰＵのグラフィック処理コアの近くに位置付けられていてもよい。ＧＰＵのグラフィック処理コアによって、シーンをＧＭＥＭにレンダリングすることができ、その後、シーンをディスプレイデバイスに表示できるように、シーンをＧＭＥＭからメモリ（例えば、フレームバッファ）にリゾルブすることができる。しかしながら、物理的エリア制約のために、ＧＭＥＭのサイズは、制限されるかもしれないことから、ＧＭＥＭは、３次元シーン全体（例えばフレーム全体）を含むのに十分なメモリ容量を有していないかもしれない。
【００１１】
［００１７］
いくつかの例において、ＧＰＵおよび他の処理デバイスは、３Ｄシーンをタイルに分けるように構成され、シーンを構成する各タイルがＧＭＥＭに適合するようにしてもよい。これは、タイルベースのレンダリングまたは「ビニング」として呼ばれている。例として、ＧＭＥＭが５１２ｋＢのデータを記憶することができる場合、各タイル中に含まれるピクセルデータが５１２ｋＢより少なくまたは等しくなるように、シーンをタイルに分割するかもしれない。このような方法で、ＧＭＥＭにレンダリングすることができるタイルにシーンを分割し、シーンの各タイルをＧＭＥＭに個々にレンダリングすることと、レンダリングされるタイルをＧＭＥＭからフレームバッファに記憶させることと、およびシーンの各タイルに対して、レンダリングと記憶を繰り返すこととによって、ＧＰＵまたは他のプロセッサは、シーンをレンダリングすることができる。したがって、ＧＰＵまたは他のプロセッサは、複数のレンダリングパスを使用して、シーンをタイル毎にレンダリングして、シーンの各タイルをレンダリングすることができる。
【００１２】
［００１８］
いくつかの例において、タイルベースのレンダリングを、いくつかのステップにおいて実行してもよい。例えば、タイルベースのアーキテクチャを実現するＧＰＵは、ビニングパスの間に、シーン全体を最初に処理する、または、事前に処理して、「タイル」としても呼ばれる多数のビンを規定してもよい。ビニングパスに、一連のレンダリングパスが続き、一連のレンダリングパスの間に、規定されたタイルのそれぞれがレンダリングされる。いくつかの例において、レンダリングパスのそれぞれは、３つのステージ、（１）クリア／アンリゾルブ、（２）レンダリング、（３）リゾルブ、で完了する。クリア／アンリゾルブステージの間、ＧＰＵは、新たなタイルのためにＧＭＥＭを初期化して、外部メモリから読み込まれる値をＧＭＥＭに記憶させてもよい。レンダリングの間、ＧＰＵは、現在のタイルに関係付けられている多角形を再生成させるとともに、ピクセル値を発生させて、現在のタイルを完成してもよく、したがって、タイルをディスプレイ上に表示できる。リゾルブステップは、完成したシーンを表示する際にディスプレイによって使用されるバッファのような、ＧＰＵの外部のメモリに、オンチップメモリ（ＧＭＥＭ）のコンテンツをＧＰＵがコピーすることを伴ってもよい。
【００１３】
［００１９］
ビニングパスの間、ＧＰＵは、シーンを構成する多角形（例えば、三角形）を発生させ、多角形を複数の「ビン」にソートしてもよい。ここで説明するように、ビニングパスの間に規定されるビンは、ディスプレイ上に提示される最終シーンのタイル（例えば、「スクリーンタイル」として呼ばれることがある）と同意語である。例えば、各ビンは、最終シーンの、一部分またはタイル（例えば、ビデオデータ、コンピュータ発生グラフィック画像、静止画像、またはこれらに類するもののフレームの予め規定された部分）を表す。したがって、用語「ビン」および「タイル」は、ここでは交換可能に使用するかもしれない。シーンを構成するタイルは、各それぞれのタイル中に含まれるプリミティブを記憶するメモリ中のビンにそれぞれ関係付けることができる。ビンは、メモリの一部分、例えば、ピクチャまたはフレームのタイル中のプリミティブである、ピクチャまたはフレームの一部分である。シーンのタイルをＧＭＥＭ中にレンダリングすることは、コマンドを実行して、関係付けられているビン中のプリミティブをＧＭＥＭ中にレンダリングすることを含んでいてもよい。ＧＰＵのビニングパスは、シーンを構成するプリミティブを適切なビンにソートすることができる。ＧＰＵのビニングパスは、最終のレンダリングされるシーン中で、ビン中の何らかのプリミティブが見えるであろうか否かを示す、各ビンに対する可視ストリームも生成させてもよい。可視ストリームは、レンダリングされるとき、プリミティブが各タイル中で見えるか否かを示すビットのストリームである。
【００１４】
［００２０］
ビン中のプリミティブをレンダリングするためのコマンドは、間接バッファ中にロードされてもよい。間接バッファは、例えば、ＧＭＥＭ、フレームバッファ、または他のメモリの一部であってもよい。しかしながら、一般的に、間接バッファはシステムメモリの一部であってもよい。ＧＰＵは、間接バッファ中に記憶されているコマンドを実行して、ビン中に含まれるプリミティブをレンダリングしてもよい。ビンに対する可視ストリームが、ビンが何らかの可視プリミティブを含んでいないと示す場合（すなわち、ビン中のプリミティブのすべてが、最終のレンダリングされるシーンにおいて見えないだろう）、ビンに関係付けられている間接バッファ中の命令の実行をスキップすることによって、ＧＰＵがビン中のプリミティブをレンダリングしない場合に、性能を向上させることができる。
【００１５】
［００２１］
マルチパスレンダリングのいくつかの例において、シーンおよび関係付けられているオブジェクトを複数回レンダリングしてもよい。オブジェクトが描かれる毎に、オブジェクトの外観の追加の態様が、計算され、以前の結果と結合されてもよい。一般的に、これは、粗い初期のレンダリングと第１の粗いパスのクエリ結果に基づく詳細な第２のレンダリングパスとを伴うかもしれない。クエリパス結果は、データ、例えば、ビニングパスが実行されるべきか否かを示すカウンタ値またはヒューリスティクスを含んでいてもよい。例えば、レンダリングされることになるオブジェクトが（相対的に言うと）単純である場合、レンダリングパスのみが続くクエリパスを実行することが有利であるかもしれない。代替的に、レンダリングされることになるオブジェクトが（相対的に言うと）複雑である場合、ビニングパスとレンダリングパスとが続くクエリパスを実行することが有利であるかもしれない。
【００１６】
［００２２］
いくつかの例において、深度テストを実行して多角形が他の多角形をおおい隠しているか否かを決定するような、ビニングパスの間に動作を実行して多角形のうちのどれがシーン中で見えるかを決定するようにもＧＰＵは構成されていてもよい。どの多角形がシーン中で見えるかを決定すると、ＧＰＵは、「可視ストリーム」として呼ばれるデータのストリームを発生させることができる。可視ストリームは、シーンの多角形のそれぞれに対する値を含んでいてもよく、値は多角形が見えるか否かを表してもよい（例えば、「１」の値は多角形が見えると示してもよく、「０」の値は多角形が見えないと示してもよい）。
【００１７】
［００２３］
ビニングパスの後、ＧＰＵは、タイルのそれぞれを再度処理することによって、タイルのそれぞれを別々にレンダリングしてもよい。いくつかの例において、ＧＰＵはビニングの間に発生させた可視ストリームを使用して、不可視多角形のレンダリングを省略またはスキップする。したがって、可視多角形のみ、すなわち、最終シーンに寄与する多角形のみが処理され、レンダリングされる。ＧＰＵは３つのステージ、（１）クリア／アンリゾルブ、（２）レンダリング、（３）リゾルブにおいて、タイルのそれぞれ上でレンダリングプロセスを実行してもよい。
【００１８】
［００２４］
クリア／アンリゾルブステージの間、ＧＰＵは、新たなタイルのために、ローカル（例えば、ＧＰＵに対してローカル、または、ＧＭＥＭとしても呼ばれるかもしれない、オンチップＧＰＵメモリに対してローカル）メモリリソースを初期化してもよい。いくつかの例では、クリアプロセスを実行してＧＭＥＭをクリアすることにより、ＧＰＵはＧＭＥＭを初期化する。他の例では、アンリゾルブプロセスを実行することにより、ＧＰＵはＧＭＥＭを初期化してもよい。アンリゾルブプロセスの間、ＧＰＵは、外部メモリからＧＭＥＭに値を読み込んでもよい。シーンの一部分が新たなデータにより更新されるときのみに、ＧＰＵはアンリゾルブプロセスを実現してもよい。例えば、１つのシーンから別のシーンで変化しなかったピクセルデータは、アンリゾルブプロセスを使用して、１つより多くのシーン（例えば、グラフィックデータのうちの１つより多くのフレーム）に渡って保持されてもよい。
【００１９】
［００２５］
レンダリングの間、ＧＰＵは現在のタイルに関係付けられている多角形を再生成させるとともに、ピクセル値を発生させ、現在のタイルを完成してもよく、したがって、ディスプレイ上にタイルを表示できる。例えば、レンダリングステージの間、ＧＰＵは適切なピクセル値を発生させてもよく、したがって、表示されるピクセルデータはシーンを正確に表す。いくつかの例において、ＧＰＵは、（ＧＰＵに対して）ローカルに、または、オンチップメモリ、すなわちＧＭＥＭに最終ピクセル値を記憶させてもよい。
【００２０】
［００２６］
レンダリングの後、完成したシーンを表示する際にディスプレイによって使用されるバッファのような、ＧＰＵの外部のメモリに、オンチップメモリのコンテンツをコピーすることによって、ＧＰＵは現在のタイルをリゾルブしてもよい。ＧＰＵは典型的に、ピクセルデータがレンダリングを完成するまで、ピクセルデータをリゾルブするのを待たなければならない。例えば、ピクセルが完全にレンダリングされる前に、ＧＭＥＭから外部メモリに、ＧＰＵがピクセルデータをリゾルブまたはコピーする場合、表示されるときに、結果のシーンは意図されるシーンの適切な属性を示さないだろう。
【００２１】
［００２７］
いくつかの例において、タイル全体がレンダリングを完成するまで、ＧＰＵはタイルをリゾルブするのを待ってもよい。例えば、ＧＭＥＭから外部メモリにタイルをコピーする前に、タイル全体が表示に対して準備完了となるまで、ＧＰＵは待ってもよい。次のタイルに対するＧＭＥＭをクリア／アンリゾルブし、次のタイルをレンダリングし、次のタイルをリゾルブすることにより、シーン全体が完成するまで、ＧＰＵはプロセスを繰り返す。
【００２２】
［００２８］
タイルベースのアーキテクチャにおいて、ビニングを両方のパス上で実行し、ビニング関連データが両方のパスに対して発生され、これは、余分なフラッシュポイントと中間シーンリゾルブとを伴うかもしれない。単一パスシナリオに渡るこの挙動によって、アプリケーションの性能が増加しないときでさえ、これはその通りであるかもしれない。したがって、いくつかのケースでは、マルチパスレンダリングは、第１のパスレンダリング、クエリ、第２のパスレンダリングを実行することを含んでいるかもしれない。クエリは、アプリケーションによってトリガされる、情報に対する任意の要求であってもよい。例えば、アプリケーションはＡＰＩ側で何かをレンダリングし、レンダリングされたオブジェクトをグラフィックカードにフラッシュしてもよい。これは特定のレンダリングを完了させる。その後クエリが送られてもよい。クエリは、ＡＰＩからグラフィックカードにレンダリングがフラッシュされたときに渡されるピクセルの数であってもよい。クエリは、ハードウェアによってサポートされる、最後のレンダリングジョブが、または、現在のレンダリングジョブが実行される状態についての情報に対する何らかの要求であることがある。いくつかのケースにおいて、アプリケーションは、何かをレンダリングし、クエリをトリガし、クエリ結果に基づいて、データのみを送ってもよい。本願のいくつかの例にしたがうと、アプリケーションは、クエリと複数のレベル２間接バッファ（ＩＢ２）とを送ってもよい。ＩＢ２はレンダリングパイプラインのさまざまな態様に対するコマンドを含んでいる。例えば、ＧＰＵの静的状態を初期化し、ＧＰＵの初期レンダリング状態を設定するコマンドのような、ＧＰＵによって実行可能なプリアンブルコマンドを、ＩＢ２は含んでいてもよい。ＧＰＵのレンダリング状態は、特定のアプリケーションに基づいて変化するかもしれないＧＰＵ設定を含んでいてもよい。ＩＢ２は、一連の状態コマンドと、ロードされたビン中に三角形を描画するための描画コマンドとを含んでいてもよい。各描画コマンドは、グラフィック処理パイプラインにしたがって、三角形を描画するようにＧＰＵに命令してもよい。ＩＢ２  ６８は、ＧＰＵによって実行されるグラフィック処理パイプラインの挙動に影響を及ぼすかもしれない。例えば、状態コマンドは、色、多角形モード（例えば、立体または線の代わりに点）、ブレンド化（オン／オフ）、深度テスト（オン／オフ）、テクスチャ化（オン／オフ）、選別、クリップ、および他の論理動作を変えてもよい。ＩＢ２状態コマンドは、三角形毎（またはプリミティブ毎）ベースで発行されてもよい。
【００２３】
［００２９］
例において、アプリケーションは各可能性あるクエリ結果に対して１つのＩＢ２を送ってもよい。したがって、各可能性あるクエリ結果に対するレンダリングパイプラインのさまざまな態様に対するコマンドを送ってもよい。１つの例において、２つのクエリ結果は、「真」および「偽」である可能性があるかもしれない。したがって、アプリケーションは２つのＩＢ２を、「真」のクエリ結果に対する１つのＩＢ２と、「偽」のクエリ結果に対する１つのＩＢ２とを送ってもよい。したがって、「真」のクエリ結果に対するレンダリングパイプラインのさまざまな態様に対するコマンドを送ってもよく、「偽」のクエリ結果に対するレンダリングパイプラインのさまざまな態様に対するコマンドを送ってもよい。アプリケーションは両方の可能性を、「真」のクエリ結果に対するＩＢ２と、「偽」のクエリ結果に対するＩＢ２とを送ってもよい。
【００２４】
［００３０］
「真」のクエリ結果に対するＩＢ２と、「偽」のクエリ結果に対するＩＢ２との両方をアプリケーションは送ることから、アプリケーションは、クエリ結果に基づいて、データを送るのを待つ必要はない。むしろ、ＧＰＵは、アプリケーションによって送られた、「真」のクエリ結果に対するＩＢ２と、「偽」のクエリ結果に対するＩＢ２との両方を有しており、ＧＰＵがクエリの結果を待ってもよい。したがって、アプリケーションを待たせるよりもむしろ、ＧＰＵがクエリ結果を待ち、その後、ＧＰＵがクエリパスを実行してもよい。クエリパスの結果が「真」である場合、ＧＰＵは条件真パスを実行してもよい。さらに、フラッシュ動作を実行することなく、条件真パスを実行してもよい。クエリパスの結果が「偽」である場合、ＧＰＵは条件偽パスを実行してもよい。フラッシュ動作を実行することなく、条件偽パスも実行してもよい。クエリパスの結果に基づいて、条件真パスまたは条件偽パスのうちの１つを条件付きで実行することに応答して、その後、ＧＰＵはフラッシュ動作を実行してもよい。
【００２５】
［００３１］
したがって、本開示のいくつかの態様では、クエリ結果を待つことは、アプリケーションからＧＰＵに移される。言い換えると、アプリケーションよりもむしろ、ＧＰＵがクエリの結果を待ってもよい。いくつかの例では、条件「真」のケースに対するＩＢ２と、条件「偽」のケースに対するＩＢ２との両方をアプリケーションがＧＰＵに送ることができることから、これは可能である。したがって、「真」のケースと「偽」のケースの両方に対して、アプリケーションがレンダリングするであろうものと、アプリケーションが実行したいものとをＧＰＵは有している。なぜなら、ＩＢ２のそれぞれは、そのそれぞれのケースに対する、例えば、「真」クエリ結果と「偽」クエリ結果とのそれぞれに対する条件「真」のケースと条件「偽」のケースとに対するレンダリングパイプラインのさまざまな態様に対するコマンドを含んでいるからである。
【００２６】
［００３２］
パスレンダリング上の追加のクエリおよび続くものは次の通りである。タイルシステムに対して、これは以下のシーケンスに対応していてもよい。（１）粗いパスまたはクエリパスとも呼ばれる、第１のパスレンダリング。第１のパスレンダリングでは、タイルシステムが、可視ストリームを発生させるビニングパスを実行し、第１のパスのレンダリングパスに対して、ロードを取り扱い、レンダリングし、記憶する。（２）（アプリケーションによるかもしれない）クエリチェック。クエリチェックは、クエリパス（第１のパス）の結果がチェックされる時間である。（３）第２のパス。第２のパスは、第１のパスのクエリ結果に基づいてなされるレンダリングのすべてを含んでいてもよい。このような例において、タイルベースのシステムは、ビニングパスを実行し、可視ストリームを発生させ、この第２のパス（第２のパスは、アプリケーションの挙動に基づいて詳細なジオメトリの異なるセットを有しているかもしれず、これは、そのケースである可能性が最も高い）のレンダリングパスに対して、ロード、レンダリング、記憶を実行してもよい。したがって、タイルベースのシステムでは、両方のパスに対するビン化されたレンダリングをトリガするかもしれないバスアクセスにより、ボトルネックが生じるかもしれない。したがって、可視ストリームの使用により得られる何らかの最適化は、最小化されるかもしれない。なぜなら、これらのステップを実現するアプリケーションが、クエリパスを実行して、データを、例えば、ビニングパスを実行すべきか否かを示すカウンタ値またはヒューリスティックス、を決定できるようにするために、余分なフラッシュを生じさせるかもしれないためである。これらのカウンタ値またはヒューリスティクスは、クエリパスレンダリング統計としても呼ばれることがある。さらに、一般的にデータを、例えば、ビニングパスを実行すべきか否かを示すカウンタ値またはヒューリスティクスを、初期パスの一部として、発生させ、または、決定してもよい。
【００２７】
［００３３］
一般的に、いくつかの例において、グラフィックアプリケーションは、クエリをトリガし、粗いパス（第１のパス）をレンダリングし、その後クエリを終了する。グラフィックアプリケーションは、クエリ値（すなわち、詳細なレンダリングが要求されるか否かを検出するために渡されるピクセルの数）をチェックしてもよい。クエリ結果に基づいて（グラフィックアプリケーションが第２のパスをトリガしてもよい）。クエリが真であるとき、詳細なシーンをレンダリングしてもよく、クエリが偽であるとき、シーンをまったくレンダリングしなくてもよいか、または、粗くてもよいか、あるいは、しかしながらカラーパイプイネーブルシーンをレンダリングしてもよい。したがって、第２のパスはレンダリングのすべてを含んでいてもよく、これは、第１のパスのクエリ結果に基づいて、実行されてもよく、または、実行されなくてもよい。
【００２８】
［００３４］
いくつかの例は、マルチパスレンダリングに対するそれらの利点においてタイルベースのアーキテクチャを使用するために、アプリケーションの挙動を修正してもよい。いくつかの例は、新たな実行ポイントを規定して、完全な制御をＧＰＵとグラフィックドライバに移してもよい。例えば、いくつかの例は、（１）導入されたクエリ条件を有する第１のパス中の、開始＿クエリ＿パスを呼び出し、（２）クエリ＿パスに対するレンダリングを呼び出しを実行依頼し、（３）クエリ＿パスを終了し（クエリ＿パス＿終了を呼び出し）、（４）開始＿条件＿真＿パスを呼び出し、（５）条件＿真＿パスに対するレンダリングを呼び出しを実行依頼し、（６）終了＿条件＿真＿パスを呼び出し、（７）開始＿条件＿偽＿パスを呼び出し、（８）条件＿偽＿パスに対するレンダリングを呼び出しを実行依頼し、（９）終了＿条件＿偽＿パスを呼び出してもよい。
【００２９】
［００３５］
１つの例では、間接バッファ１（ＩＢ１）は、クエリパス、ビニングパス、またはレンダリングパスを呼び出してもよい。クエリパス、ビニングパス、およびレンダリングパスは、間接バッファ２（ＩＢ２）の一部であってもよい。ＩＢ１およびＩＢ２は、バッファ、例えば、マルチレベルバッファである。最上レイヤバッファ（ＩＢ１）中のコマンドを使用して、より低いレベルのバッファ（ＩＢ２）中のコマンドのセット全体を呼び出してもよい。例において、クエリパスに対するすべてのコマンドを含んでいてもよいクエリパスＩＢ２を呼び出す、ＩＢ１中のコマンドによって、クエリパスを実行してもよい。別のＩＢ２は、ビニングに対するすべてのコマンドを含んでいてもよく、さらに別のＩＢ２は、レンダリング等に対するすべてのコマンドを含んでいてもよい。例えば、クエリパス、ビニングパス、およびレンダリングパスは、それぞれ別々のＩＢ２、すなわちＩＢ２レベルバッファ内の別々のエンティティであってもよい。クエリパスはビニングパスの前に実行してもよい。ビニングパスはレンダリングパスの前に実行してもよい。いくつかのケースでは、ビニングパスをスキップしてもよく、したがって、レンダリングパスはクエリパスの直後に実行される。いくつかのケースでは、ビニングパスもレンダリングパスもクエリパスの後に実行されない。
【００３０】
［００３６］
例えば、クエリパスは、データを、例えば、ビニングパスを実行すべきか否かを示す、カウンタ値またはヒューリスティクスを戻してもよい。例において、条件付き実行決定ユニットは、ビニングパスまたはレンダリングパスを実行すべきか否かを決定してもよい。ビニングパスを実行する際の決定は、レンダリングされることになるオブジェクトの複雑性に基づいていてもよい。例えば、単純なオブジェクトに対しては、ビニングパスをスキップしてもよい。逆に、より複雑なオブジェクトに対しては、ビニングパスを実行してもよい。したがって、より単純なオブジェクトに対しては、ビニングパスをスキップして、クエリパスの直後にレンダリングパスを実行してもよい。さらに、単純なオブジェクトに対しては、単一の繰り返しにおいて、レンダリングを実行してもよい。例えば、スクリーン全体が、一連のブロック中よりもむしろ単一のパス中で書かれてもよい。これは、とても単純な、反復スクリーンレンダリングに対して可能であるかもしれない。
【００３１】
［００３７］
図１は、本開示のいくつかの態様にしたがって、３次元（３Ｄ）シーンをレンダリングするために使用される、プロセッサ１０２、グラフィック処理ユニット（ＧＰＵ）１２０、およびシステムメモリ１１８を図示しているブロックダイヤグラムである。プロセッサ１０２は、ソフトウェアアプリケーション１１２、オペレーティングシステム（ＯＳ）１１４、およびグラフィックドライバ１１６を実行してもよい。プリミティブをレンダリングするためのコマンドストリームとともに、ＧＰＵ１２０によって実行されることになる２次コマンドを記憶する間接バッファを、システムメモリ１１８は含んでいてもよい。ＧＰＵ１２０は、ＧＭＥＭ１２２を含んでいてもよい。ＧＭＥＭ１２２は、上記で説明したＧＭＥＭであってもよい。いくつかの例において、ＧＭＥＭ１２２は、ＧＰＵ１２０に「オンチップ」であってもよい。いくつかのケースにおいて、図１中に示す、すべてのハードウェアエレメントは、例えば、オンチップシステム（ＳｏＣ）設計での、オンチップであってもよい。
【００３２】
［００３８］
図１の例において、プロセッサ１０２、システムメモリ１１８、およびＧＰＵ１２０は、デバイスの一部であってもよい。デバイスの例は、ビデオデバイスや、メディアプレーヤーや、セットトップボックスや、移動体電話機およびいわゆるスマートフォンのようなワイヤレスハンドセットや、パーソナルデジタルアシスタント（ＰＤＡ）や、デスクトップコンピュータや、ラップトップコンピュータや、ゲームコンソールや、テレビ会議ユニットや、タブレットコンピューティングデバイス、および、これらに類するものを含むが、これらに限定されない。
【００３３】
［００３９］
プロセッサ１０２は、中央処理ユニット（ＣＰＵ）であってもよい。ＧＰＵ１２０は、ディスプレイでの表示のためのグラフィックデータを発生させて、出力するような、グラフィック関連機能を実行するとともに、ＧＰＵ１２０によって提供される大量な並列処理を活用する、非グラフィック関連機能を実行するように構成されている処理ユニットであってもよい。例えば、ＧＰＵ１２０は、グラフィックアプリケーションおよび非グラフィックアプリケーションの両方を実行してもよい。ＧＰＵ１２０はグラフィック処理能力に加えて、汎用処理能力を提供することができることから、ＧＰＵ１２０は、汎用ＧＰＵ（ＧＰ−ＧＰＵ）として呼ばれることがある。
【００３４】
［００４０］
プロセッサ１０２およびＧＰＵ１２０の例は、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または他の同等な集積されたまたはディスクリートな論理回路を含むが、これらに限定されない。いくつかの例では、ＧＰＵ１２０は、グラフィックを処理するために大量な並列処理を提供するとともに、非グラフィック関連アプリケーションを実行するような、特定の使用法に対して設計されたマイクロプロセッサであってもよい。さらに、プロセッサ１０２およびＧＰＵ１２０は、別々のコンポーネントとして図示されているが、本開示の態様は、このように限定されない。例えば、プロセッサ１０２およびＧＰＵ１２０は、共通集積回路（ＩＣ）中に存在してもよい。
【００３５】
［００４１］
プロセッサ１０２上で実行するソフトウェアアプリケーション１１２は、プロセッサ１０２に命令して、グラフィックのデータを（示されていない）ディスプレイにレンダリングさせる、１つ以上のグラフィックレンダリング命令を含んでいてもよい。いくつかの例において、グラフィックレンダリング命令は、例えば、オープングラフィックライブラリ（オープンＧＬ（登録商標））アプリケーションプログラミングインターフェース（ＡＰＩ）、オープングラフィックライブラリ組み込みシステム（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、ダイレクト３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、レンダーマンＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、または他の何らかの公開またはプロプライエタリな標準グラフィックＡＰＩのような、グラフィックＡＰＩに準拠する、ソフトウェア命令を含んでいてもよい。グラフィックレンダリング命令を処理するために、プロセッサ１０２は、１つ以上のグラフィックレンダリングコマンドを（例えば、グラフィックドライバ１１６を通して）ＧＰＵ１２０に発行して、ＧＰＵ１２０に、グラフィックデータのレンダリングのうちのいくつかのまたはすべてを実行させてもよい。いくつかの例において、レンダリングされることになるグラフィックデータは、グラフィックプリミティブのリストを、例えば、点、線、三角形、四角形、三角形ストリップ等を含んでいてもよい。
【００３６】
［００４２］
ＧＰＵ１２０は、グラフィック動作を実行して、１つ以上のグラフィックプリミティブをディスプレイにレンダリングするように構成されていてもよい。したがって、プロセッサ１０２上で実行するソフトウェアアプリケーションのうちの１つがグラフィック処理を要求するとき、プロセッサ１０２は、ディスプレイへのレンダリングのために、グラフィックコマンドおよびグラフィックデータをＧＰＵ１２０に提供してもよい。グラフィックデータは、例えば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報等を含んでいてもよい。ＧＰＵ１２０は、いくつかの事例において、プロセッサ１０２よりも、複雑なグラフィック関連動作のより効率的な処理を提供する、高度に並列な構造で構築されていてもよい。例えば、ＧＰＵ１２０は、並列方法で、複数の頂点またはピクセルを操作するように構成されている、複数の処理エレメントを含んでいてもよい。プロセッサ１０２の高度に並列する性質は、いくつかの事例において、プロセッサ１０２を使用してシーンをディスプレイに直接描画するよりも、ＧＰＵ１２０がグラフィック画像（例えば、ＧＵＩならびに２次元（２Ｄ）および／または３次元（３Ｄ）グラフィックシーン）をディスプレイ上により速く描画することができるようにする。
【００３７】
［００４３］
ＧＰＵ１２０は、ＧＭＥＭ１２２に直接結合されていてもよい。言い換えると、ＧＰＵ１２０は、オフチップメモリの代わりに、ローカル記憶装置を使用して、データをローカルに処理してもよい。これは、多量のバストラフィックを経験するかもしれない、例えば、共有バスを介してＧＰＵ１２０がデータを読み書きする必要をなくすことにより、ＧＰＵ１２０が、より効率的な方法で動作できるようにする。しかしながら、いくつかの事例において、ＧＰＵ１２０は、別のメモリを含んでいないかもしれないが、代わりに、システムメモリ１１８を利用してもよい。ＧＭＥＭ１１２は、例えば、ランダムアクセスメモリ（ＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、および１つ以上のレジスタのような、１つ以上の揮発性または不揮発性メモリあるいは記憶デバイスを含んでいてもよい。
【００３８】
［００４４］
プロセッサ１０２および／またはＧＰＵ１２０は、レンダリングされる画像データをフレームバッファ１２４中に記憶させてもよい。フレームバッファ１２４は、独立したメモリであってもよく、または、システムメモリ１１８内に割り振られてもよい。（示されていない）ディスプレイプロセッサは、レンダリングされる画像データをフレームバッファ１２４から取り出して、レンダリングされる画像データをディスプレイ上に表示させてもよい。
【００３９】
［００４５］
システムメモリ１１８は、デバイスのシステムメモリであってもよく、プロセッサ１０２とＧＰＵ１２０との外部に存在し、すなわち、プロセッサ１０２に関してオフチップであり、ＧＰＵ１２０に関してオフチップであってもよい。システムメモリ１１８は、プロセッサ１０２とＧＰＵ１２０によって実行されるアプリケーションを記憶してもよい。さらに、システムメモリ１１８は、実行されるアプリケーションが操作するデータとともに、アプリケーションから結果的に生じるデータを記憶してもよい。しかしながら、すべての例において、このようなデータのすべてを、システムメモリ１１８中に記憶させる必要はない。いくつかの事例において、データは、プロセッサ１０２またはＧＰＵ１２０上にローカルに記憶させてもよい。例えば、データのうちのいくつかまたはデータのすべてを、オンチップＧＰＵメモリ（例えば、グラフィックメモリ、ＧＭＥＭ１２２）内にローカルに記憶させてもよい。
【００４０】
［００４６］
システムメモリ１１８は、プロセッサ１０２による実行のためにアクセス可能であるプログラムモジュール、命令、または両方、プロセッサ１０２上で実行するプログラムによる使用のためのデータ、あるいは、これらのうちの２つ以上を記憶してもよい。例えば、システムメモリ１１８は、プロセッサ１０２によって使用されるウインドウマネージャーアプリケーションを記憶して、ディスプレイ上にグラフィカルユーザインターフェース（ＧＵＩ）を提示してもよい。加えて、システムメモリ１１８は、ユーザアプリケーションと、アプリケーションに関係付けられているアプリケーションサーフェースデータとを記憶してもよい。システムメモリ１１８は、ＧＰＵ１２０のためのデバイスメモリとして機能してもよく、ＧＰＵ１２０によって操作されることになるデータとともに、ＧＰＵ１２０によって実行される操作から結果的に生じるデータを記憶してもよい。例えば、システムメモリ１１８は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファ、またはこれらに類するものの任意の組み合わせを記憶してもよい。
【００４１】
［００４７］
システムメモリ１１８は、コンピュータ読取可能記憶媒体の例であってもよい。例えば、システムメモリ１１８は、プロセッサ１０２およびＧＰＵ１２０に本開示中のそれぞれに与えられた機能を実行させる命令を記憶してもよい。システムメモリ１１８は、1つ以上のプロセッサ（例えば、プロセッサ１０２またはＧＰＵ１２０）にさまざまな機能を実行させる命令を含むコンピュータ読取可能記憶媒体として考えてもよい。
【００４２】
［００４８］
システムメモリ１１８の例は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、または、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ（登録商標））、あるいは、命令またはデータ構造の形態で所望のプログラムコードを伝えるまたは記憶させるために使用することができ、コンピュータまたはプロセッサによってアクセスできる他の何らかの媒体を含むが、これらに限定されない。１つの例として、システムメモリ１１８をデバイスから取り除き、別のデバイスへ移動してもよい。別の例として、システムメモリ１１８と実質的に類似する記憶デバイスを、デバイスに挿入してもよい。
【００４３】
［００４９］
本開示の技術にしたがうと、いくつかの例は、マルチパスレンダリングに対するそれらの利点においてタイルベースのアーキテクチャを使用するために、アプリケーションの挙動を修正してもよい。いくつかの例において、アプリケーションは新たな実行ポイント／バックドア／拡張を使用してもよく、ＧＰＵおよびグラフィックドライバに完全な制御を移す。
【００４４】
［００５０］
例えば、何がアプリケーションに実行依頼されているかの表示をＧＰＵがドライバに提供できるように、アプリケーションに「エクスポーズアウト」するさまざまなエントリポイントをＧＰＵは呼び出してもよい。「エクスポーズアウト」は、それらが必要とされるときに、コードブロックをトリガできる機能的ポインタを提供する、コードのブロックへのエントリポイントを指す。一般的に、アプリケーションが、何らかの開始手順を、すなわち、開始ＸＸＸを呼び出す場合、呼び出しはドライバ中で終わり、いくつかの例では、続くレンダリング／状態呼び出しは、終了呼び出しが、すなわち終了ＸＸＸが呼び出されるまでの、ＸＸＸパスに対するものである。結果として、関係付けられているパスの開始と終了の間の、すべてのレンダリング／状態呼び出しは、蓄積され、これらのパス対する間接バッファを構築するために使用されてもよい。例示的な呼び出しは、導入されたクエリ条件を有する開始＿クエリ＿パス（第１のパス）を含んでいる。ＧＰＵは、通常通りクエリ＿パスに対するレンダリング呼び出しを実行依頼してもよく、クエリ＿パス＿終了を呼び出してもよい。ＧＰＵは、開始＿条件＿真＿パスと設定クエリも呼び出してもよい。ＧＰＵは、条件＿真＿パスに対するレンダリング呼び出しを実行依頼してもよい。ＧＰＵはまた、終了＿条件＿真＿パスと開始＿条件＿偽＿パスを呼び出してもよい。ＧＰＵはまた、条件＿偽＿パスに対するレンダリング呼び出しを実行依頼し、終了＿条件＿偽＿パスを呼び出ししてもよい。したがって、例において、１つのフラッシュのみが必要とされるかもしれない。フラッシュは、すべての蓄積されたレンダリングコマンドをオペレーティングシステムに実行依頼または送ることである。グラフィックアプリケーションがレンダリングコマンドをトリガするときに、コマンドはハードウェアに、例えばスクリーンに直接送られない。むしろ、グラフィックドライバにより、コマンドは蓄積される（必要に応じて変換される）。フラッシュ呼び出しは境界であり、そこでは、レンダリングが取り扱われることが要求され、ドライバが、オペレーティングシステムカーネルを通して、すべての蓄積されたコマンド／バッファをハードウェアに送る／実行依頼する。
【００４５】
［００５１］
いくつかの例では、すべてのデータが送られるまで、アプリケーションはフラッシュする必要がないかもしれない。さらに、アプリケーションは、クエリデータを明示的にチェックする必要がないかもしれない。例では、ハードウェアは、クエリパス、ビニングパス、およびレンダリングパスを実行してもよい。結果として、ビニングパスは、クエリ結果に基づいて、マッチングするレンダリングパスに対して、一度トリガされてもよい。一般的に、よく書かれたアプリケーションに対して、このパスは、他のパスと比較して、実行するためにより多くの処理サイクルを要求するかもしれない。したがって、ハードウェアリソースのよりよい利用により、単一のフラッシュポイントにおいて、動作を完了してもよい。したがって、さまざまな例は、不必要なロード／記憶（リゾルブ／アンリゾルブ）およびフラッシュポイントをなくすかもしれない。
【００４６】
［００５２］
図２は、タイルベースのレンダリングアーキテクチャ中のシーンのタイルを図示している概念のダイヤグラムである。図２中に示すように、図１中で示すＧＰＵ１２０のようなＧＰＵによってレンダリングされることになる３Ｄグラフィカルオブジェクト２０６は、プリミティブ２０８のようなプリミティブから構成されていてもよい。図２中で示す例において、プリミティブは、３つの頂点を含む三角形であってもよい。他の例において、プリミティブは、点、線、およびこれらに類するものであってもよい。グラフィカルオブジェクト２０６を含んでいる３Ｄシーン２０２は、タイル２０４のような、タイルに分割できる。シーン２０２のタイル２０４のような、各タイルのサイズは、ＧＭＥＭのサイズに少なくとも部分的に基づいて決定してもよい。例えば、タイル中に含まれているシーン２０２の一部分が、図１中に示すＧＭＥＭ１２２のような、グラフィックメモリ中に完全にレンダリングされるように、シーン２０２の各タイルは、サイズが決められてもよい。シーン２０２の各タイルは、そのタイル中に三角形を含むビンであると考えてもよい。１つの例において、ビンの幅および高さは、３２ピクセルで整列させてもよい。シーン２０２は、５×５グリッドのタイルに分割されることから、図２中に示されているシーン２０２に対して合計２５タイルがある。
【００４７】
［００５３］
ＧＰＵ１２０は、三角形をレンダリングするためのコマンドを実行することによって、三角形をレンダリングしてもよい。したがって、グラフィカルオブジェクト２０６を構成する三角形のそれぞれをレンダリングするためのコマンドを実行することにより、ＧＰＵ１２０は、グラフィックオブジェクト２０６をレンダリングしてもよい。各ビンが、ビン中に含まれる三角形をレンダリングするためのコマンドストリーム（１組のコマンド）を含むように、ＧＰＵ１２０は、シーンの三角形をビンにソートしてもよい。シーン２０２に対して合計２５タイルがあることから、シーン２０２に対して２５の対応するビンがあってもよい。図１中に示すシステムメモリ１０８のような、メモリ中の間接バッファ中に、各ビンに対するコマンドストリームを記憶させてもよい。各ビンのコマンドストリームを実行して、ビンのそれぞれにおける三角形をＧＭＥＭ１２２上にレンダリングすることにより、ＧＰＵ１２０は、グラフィカルオブジェクト２０６をレンダリングする。
【００４８】
［００５４］
いくつかの例では、シーンをレンダリングするために、ＧＰＵ１２０は第１の粗いパスを実行する。ＧＰＵはその後第２の細かいパスを実行してもよい。第１の粗いパスの間、ＧＰＵ１２０は、ビンのそれぞれの中の三角形が見えるか否かを決定してもよい。以前の技術では、ＧＰＵが第１のパスを完了した後、ＣＰＵはフラッシュ動作を実行する。フラッシュ動作は第１のパスの結果を記憶して、結果をＣＰＵに戻す。結果は、例えば、どの三角形が見え、どの三角形が見えない等を含んでいてもよい。
【００４９】
［００５５］
クエリ動作の結果に、例えば、どの三角形が見え、どの三角形が見えないか、に基づいて、ＣＰＵは第２のパスに対するパラメータを発生させる。第２のパスの間、ＧＰＵは第２のビニングパスを実行する。ＧＰＵはまた、第２のパスの間に、可視ストリームを発生させる。ＧＰＵは、第２のパスの間に、新たな可視ストリームを発生させてもよい。この新たな可視ストリームを使用して、ＧＰＵは第２のレンダリングパスを実行する。第２のパスの後、ＧＰＵは別のフラッシュ動作を実行する。第２のフラッシュ動作中で、ＧＭＥＭのコンテンツは、グラフィックバッファまたはシステムメモリ１１８に書き込まれてもよい。
【００５０】
［００５６］
ＧＰＵ１２０が、ビン中に含まれるシーン２０２の一部分をＧＭＥＭ１２２上にレンダリングした後、シーン２０２のそのレンダリングされた部分は、ＧＭＥＭ１１２から、図１中に示すフレームバッファ１２４のようなメモリにロードしてもよい。ＧＰＵ１２０は、コマンドストリームを実行し、ビンの三角形をＧＭＥＭ１２２上にレンダリングし、シーン２０２のレンダリングされた部分をＧＭＥＭ１２２からフレームバッファ１２４にロードするプロセスを、各ビンに対して繰り返して、シーン２０２を完全にレンダリングしてもよい。
【００５１】
［００５７］
ここで説明するように、「ビニング」または「タイルベースのレンダリング」は３Ｄシーンをより小さなパーツでレンダリングするための方法である。３Ｄレンダリングは、メモリ帯域幅上で非常に重いことから、３Ｄコアに近く、高い帯域幅を有する、特化されたグラフィックメモリＧＭＥＭを使用することが有用である。しかしながら、移動体環境では、ＧＭＥＭのサイズは、エリア制約により制限されている。したがって、それぞれを別々にレンダリングすることができるように、シーンをより小さなパーツに分ける必要があるかもしれない。
【００５２】
［００５８］
別の例では、フェイスネスストリームを使用してもよいが、それは、各ビンに対して別々に適用される。他の例では、フェイスネスストリームは、三角形が正面を向いているかまたは背面を向いているかを示す、三角形毎のビットのデータを含んでいてもよい。このような例では、これは、可視ストリームに拡張してもよく、可視ストリームでは、所定のビンに対して三角形が少しでも見えるか否かを各ビットは示す。各ビンに対して、１つの可視ストリームがあり、そのビンに対して見える三角形をリストアップする。可視値は、複数のファクター、（１）三角形がバックフェースカリングされているか否か、（２）三角形が（Ｚ方向を含む）ビンエリアにヒットするか否か、（３）低解像度Ｚチェックによって、三角形が妨げられるか否か、を使用して計算してもよい。
【００５３】
［００５９］
例において、ビニングパスの間、各ビンに対して１つの可視ストリームである、複数の可視ストリームが生成される。レンダリングパスの間、（現在のビンに対して１つの）ただ１つの可視ストリームが読み取られる。さらに、可視ストリームは圧縮される。これは結果として、より小さなメモリ消費となる。また、レンダリングステージの間、見えない三角形の高速スキップも可能にする。
【００５４】
［００６０］
例において、ビニングパスの間に可視ストリームを発生させてもよい。これは、シーン全体のコマンドストリームを処理することを伴うかもしれない。しかしながら、一般的に、ピクセルシェーディングはされない。生成は以下のステージ、（１）ビンシェーダーによる頂点シェーディング、（２）、低解像度ラスター化（３）、低解像度Ｚテスト、および（４）可視ストリーム圧縮を含んでいてもよい。
【００５５】
［００６１］
両方の例において、ビニングパスは特定のビニングシェーダーを要求する。これは、頂点シェーダの修正バージョンであってもよく、唯一出力されるのは、頂点ポジションである。ビニングシェーダーからとともに、それに関連する任意の計算から、すべてのパラメータのエクスポートを取り除いてもよい。しかしながら、いくつかの例において、何らかの特定のビン関連シェーダーコードを追加する必要はない（その上、ドライバ開発の初期ステージの間、通常の頂点シェーダーをビニングシェーダーとして使用することも可能であるかもしれない。このケースにおいて、使用する適切なピクセルシェーダーも同様にあるべきであるが、それは、何らかのピクセルをただ受信するのではない）。
【００５６】
［００６２］
シェーディングされた頂点から、ラスタライザは三角形の低解像度表現を発生させ、各ピクセルは最終画像における４×４ピクセルエリアと等しい。発生させた低解像度ピクセルは、部分的におおい隠されている、または、完全におおい隠されている、２つの値をとることができる。ラスター化は、通常のラスター化である同じ選別ルール（フェイスネス、錐台等）を使用し、したがって、実際にシーンに寄与する三角形のみを生成させる。
【００５７】
［００６３］
プロセス中の第３のステージは、低解像度Ｚテストである。ＧＭＥＭは、ビニングパスの間、Ｚバッファとしても使用することができる。レンダリングは４×４ピクセルブロックでされることから、ＧＭＥＭ中のＺ−バッファもこの解像度中にある。さらに、ＧＭＥＭ中にカラーバッファは必要ない。これは、低解像度Ｚ−バッファ（ＬＲＺ−バッファ）が、フル解像度と比較して、とても広いオンスクリーンエリアをカバーできることを意味する。ＬＲＺ−バッファはフル解像度で動作しないことから、ＬＲＺ−処理は保守的にする必要がある。ＬＲＺ−バッファへの書き込みは、三角形によって完全におおい隠されるピクセルに対してのみなされ、部分的におおい隠されるピクセルは、Ｚ書き込みに寄与しない。三角形のエッジにギャップがあることがあるので、これもＬＲＺバッファが完全には正確でないことを意味する。ビニングパスの終りにおいて、ＬＲＺバッファを外部メモリに書き出すことができ、その後、これはレンダリングパスの間にＺ−バッファを初期化するために使用できる。これは、レンダリングの間、改善されたＺテストを提供する。
【００５８】
［００６４］
図３は、本開示の態様にしたがって、ビン間で分割されたプリミティブを示している概念のダイヤグラムである。図３中に示すように、それぞれが４×４グリッドのピクセルを含む、ビン３０２、３０４、３０６、および３０８が、複数のピクセル３１０を含むようにレンダリング／ラスター化される。一般的に、ビデオレンダリングは、既存のオブジェクトまたはモデルに基づいて、画像を発生させるプロセスである。ラスター化は、一般的に、ビデオディスプレイまたはプリンタ上の出力のために、あるいは、ビットマップファイルフォーマットでの記憶のために、ベクトルグラフィックフォーマット（例えば、形状）で記載された画像を取り、それをラスター画像（例えば、ピクセルまたはドット）に変換することである。
【００５９】
［００６５］
１つ以上のグラフィックプリミティブが、各ビン中で見えるかもしれない。例えば、三角形Ａ（三角形Ａ）の一部分は、ビン３０２およびビン３０６の両方の中で見えている。三角形Ｂ（三角形Ｂ）の一部分は、ビン３０２、ビン３０４、ビン３０６、およびビン３０８のそれぞれにおいて見えている。三角形Ｃ（三角形Ｃ）は、ビン３０４中においてのみ見えている。レンダリングパスの間、ＧＰＵ１２０は、シーンをビンに分けて、三角形をビンに割り当ててもよい。三角形が１つのビンより多くで見える場合、ビン３０２、３０４、３０６、３０８のそれぞれがレンダリングされるときに、三角形が複数回レンダリングされないように、ＧＰＵ１２０は、三角形が見える、ビンのうちのただ１つに三角形を割り当ててもよい。
【００６０】
［００６６］
ＧＰＵ１２０は、ビン中のどの三角形が、最終のレンダリングされるシーンにおいて実際に見えるかも決定してもよい。例えば、いくつかの三角形は、１つ以上の他の三角形の後ろにあるかもしれず、最終のレンダリングされるシーンにおいて見えないだろう。このような方法で、見えない三角形は、そのビンに対してレンダリングする必要はない。
【００６１】
［００６７］
特定のレンダリングパスを実行している間に、その特定のレンダリングパスに関係付けられている、ビンに対するピクセルデータは、図１中で示すＧＭＥＭ１２２のような、（時には、ビンバッファと呼ばれる）グラフィックメモリ中に記憶させてもよい。レンダリングパスを実行した後、ＧＰＵ１２０は、ＧＭＥＭ１２２のコンテンツをフレームバッファ１２４に転送してもよい。いくつかのケースにおいて、ＧＰＵ１２０は、フレームバッファ１２４中のデータの一部分を、ＧＭＥＭ１２２中に記憶されているデータで上書きしてもよい。他のケースにおいて、ＧＰＵ１２０は、ＧＭＥＭ１２２中に記憶されているデータと、フレームバッファ１２４中のデータとを合成または組み合わせてもよい。ＧＭＥＭ１２２のコンテンツをフレームバッファ１２４に転送した後、ＧＰＵ１２０は、ＧＭＥＭ１２２をデフォルト値に初期化して、異なるビンに関して、後続するレンダリングパスを開始してもよい。
【００６２】
［００６８］
図４は、本開示の技術にしたがって、マルチパスレンダリングを実行するための技術を図示している概念のダイヤグラムである。一般的に、これは、フラッシュを一度のみ実行することを可能にする。機能が図４で方向付けられているように、機能は、「上から下」および「左から右」へ実行することができる。より具体的には、図４で図示されているように、クエリパス４００が実行された後に、条件真パス４０４、条件偽パス４０６が続き、３つのパス、クエリパス４００、条件真４０４、条件偽４０６がいったん完了すると、フラッシュ動作４０８が実行される。したがって、いくつかの例では、本開示の技術は、タイルベースのＧＰＵアーキテクチャを利用するアプリケーションの挙動を修正することにより、ＧＰＵ１２０がクエリパスを完了した後に生じるフラッシュ動作４０８をなくすことができる。特に、いくつかの例では、本開示の技術は、新たな実行ポイント、バックドアコマンド、および／または拡張を含んでいてもよい。これらの新たな実行ポイント、バックドアコマンド、および／または拡張は、ＧＰＵ１２０およびグラフィックドライバが上記で説明した第２のクエリ動作をなくすことができるようにする。いくつかの例では、本開示の技術は、ＧＰＵ１２０がフラッシュコマンドをなくすことができるようにする、追加のレンダリングコマンドを含むように、ＤｉｒｅｃｔＸ１１グラフィックＡＰＩを修正する。
【００６３】
［００６９］
マルチパスタイルベースのレンダリングを実行するとき、ＧＰＵ１２０が一般的にクエリパス４００とクエリチェック４０２を実行した後に、条件真パス４０４と条件偽パス４０６が続く。クエリチェック４０２は、アプリケーションによってトリガされる情報に対する何らかの要求であってもよい。例えば、アプリケーションは、ＡＰＩ側で何かをレンダリングし、レンダリングされたオブジェクトをグラフィックカードにフラッシュしてもよい。これは、特定のレンダリングを完了させる。その後、クエリが送られてもよい。クエリは、ＡＰＩからグラフィックカードにレンダリングがフラッシュされたときに渡されるピクセルの数であってもよい。クエリは、ハードウェアによってサポートされる、最後のレンダリングジョブが、または、現在のレンダリングジョブが実行される状態の情報についての何らかの要求であることがある。いくつかのケースにおいて、アプリケーションは、何かをレンダリングし、クエリをトリガし、クエリ結果に基づいて、データのみを送ってもよい。
【００６４】
［００７０］
本願のいくつかの例にしたがうと、アプリケーションは、クエリと複数のＩＢ２とを送ってもよい。上記で説明したように、ＩＢ２はレンダリングパイプラインのさまざまな態様に対するコマンドを含んでいる。
【００６５】
［００７１］
１つの例において、２つのクエリ結果は、「真」および「偽」である可能性があるかもしれない。したがって、アプリケーションは２つのＩＢ２を、「真」のクエリ結果に対する１つのＩＢ２と、「偽」のクエリ結果に対する１つのＩＢ２とを送ってもよい。したがって、「真」のクエリ結果に対するレンダリングパイプラインのさまざまな態様に対するコマンドを送ってもよく、「偽」のクエリ結果に対するレンダリングパイプラインのさまざまな態様に対するコマンドを送ってもよい。アプリケーションは両方の可能性を、「真」のクエリ結果に対するＩＢ２と、「偽」のクエリ結果に対するＩＢ２とを送る。
【００６６】
［００７２］
「真」のクエリ結果に対するＩＢ２と、「偽」のクエリ結果に対するＩＢ２との両方をアプリケーションは送ることから、アプリケーションは、クエリ結果に基づいて、データを送るのを待つ必要はない。むしろ、ＧＰＵは、アプリケーションによって送られた、「真」のクエリ結果に対するＩＢ２と、「偽」のクエリ結果に対するＩＢ２との両方を有しており、ＧＰＵがクエリの結果を待ってもよい。したがって、アプリケーションを待たせるよりもむしろ、ＧＰＵがクエリ結果を待ち、その後、ＧＰＵがクエリパスを実行してもよい。クエリパスの結果が「真」である場合、ＧＰＵは条件真パスを実行してもよい。さらに、フラッシュ動作４０８を実行することなく、条件真パスを実行してもよい。クエリパスの結果が「偽」である場合、ＧＰＵは条件偽パスを実行してもよい。フラッシュ動作４０８を実行することなく、条件偽パスも実行してもよい。クエリパスの結果に基づいて、条件真パスまたは条件偽パスのうちの１つを条件付きで実行することに応答して、その後、ＧＰＵはフラッシュ動作４０８を実行してもよい。
【００６７】
［００７３］
したがって、本開示のいくつかの態様では、クエリ結果を待つことは、アプリケーションからＧＰＵに移る。言い換えると、アプリケーションよりもむしろ、ＧＰＵがクエリの結果を待ってもよい。いくつかの例では、条件「真」パスのケースに対するＩＢ２と、条件「偽」パスのケースに対するＩＢ２との両方をアプリケーションがＧＰＵに送ることができることから、これは可能である。したがって、「真」のケースと「偽」のケースの両方に対して、アプリケーションがレンダリングするであろうものと、アプリケーションが実行したいものとをＧＰＵは有している。なぜなら、ＩＢ２のそれぞれは、そのそれぞれのケースに対する、例えば、「真」クエリ結果と「偽」クエリ結果とのそれぞれに対する条件「真」のケースと条件「偽」のケースとに対するレンダリングパイプラインのさまざまな態様に対するコマンドを含んでいるからである。
【００６８】
［００７４］
クエリパス４００は、三角形が見えるか否かを決定し、条件真パス４０４と条件偽パス４０６とに対する条件を確立する。いったんＧＰＵ１２０がクエリパス４００を完了すると、ＧＰＵ１２０は条件真パス４０４を実行し、その後、条件偽パス４０６を実行する。条件真パスおよび条件偽パスは、異なるデータと、アプリケーションレンダリングシーケンスに基づいて、それらの中で蓄積されたレンダリングコマンドとを有している。
【００６９】
［００７５］
本開示の技術は、ＧＰＵ１２０が実行するレンダリングパスの開始と終了を特定するレンダリング命令を含んでいてもよい。したがって、本開示のいくつかの例示的な技術は、例えば、クエリパス４００、条件真パス４０４、および条件偽パス４０６の開始および終了を特定するレンダリング命令を含んでいる。特に、本開示のいくつかの例示的な技術は、開始＿クエリ＿パスコマンド、終了＿クエリ＿パスコマンド、開始＿条件＿真＿パス、終了＿条件＿真＿パス、および終了＿条件＿偽＿パスコマンドのような、エントリポイントを含んでいる。これらは、「エクスポーズアウト」されて、異なるコードのサブルーチンにアクセスできるようにするエントリポイントである。再度説明すると、「エクスポーズアウト」は、必要とされるときに、コードブロックをトリガすることができる機能的ポインタを提供する、コードのブロックへのエントリポイントを指す。ここで説明するように、これらはアプリケーションにエクスポーズアウトされるエントリポイントであり、したがって、アプリケーションによりドライバに実行依頼されるものの表示をアプリケーションがドライバに提供できる。
【００７０】
［００７６］
例では、対応するコマンドの各ペア間で、例えば、クエリパス開始とクエリパス終了、条件真開始と条件真終了、条件偽開始と条件偽終了間で、グラフィックドライバまたはアプリケーションは、ＧＰＵ１２０がそのレンダリングパスの間に実行するレンダリングコマンドを特定する。いったんパスのすべてが完了すると、ＧＰＵ１２０はフラッシュコマンドを実行する。フラッシュコマンドは３つのパス、クエリパス４００、条件真４０４、および条件偽４０６の結果をシステムメモリ１１８に書き込んでもよい。
【００７１】
［００７７］
ここで説明するように、クエリパス４００はビニングパスの前に実行してもよい。ビニングパスはレンダリングパス、例えば、条件真パス４０４に対するレンダリング、または、条件偽パス４０６に対するレンダリングの前に実行してもよい（ビニングパスは図４中に図示されていない。）。いくつかのケースでは、ビニングパスをスキップしてもよく、したがって、レンダリングパス４０４または４０６は、クエリパス４００の直後に実行される。いくつかのケースでは、ビニングパスもレンダリングパスも、例えば、条件真パス４０４に対するレンダリングも条件偽パス４０６に対するレンダリングも、クエリパス４００の後に実行されない。例えば、常にこのケースが起こるわけではないが、条件偽パスはビニングパスおよびレンダリングパスを実行させなくてもよい。しかしながら、いくつかの例では、ビニングパスおよびレンダリングパスは、条件偽パスに対して実行される。ビニングパスおよびレンダリングパスは、条件真パスに対して実行されてもよい。条件真パスと条件偽パスとの間の主な差は、異なるデータと、アプリケーションレンダリングシーケンスに基づいて、それらの中で蓄積された、レンダリングコマンドとを有することである。
【００７２】
［００７８］
クエリパス４００は、ビニングパスを実行すべきであるか否かを示すデータを戻してもよい。例において、条件付き実行決定ユニットは、ビニングパスまたはレンダリングパスを、例えば条件真パス４０４に対するレンダリング、または、条件偽パス４０６に対するレンダリングを実行すべきか否かを決定してもよい。ビニングパスを実行する際の決定は、レンダリングされることになるオブジェクトの複雑性に基づいていてもよい。例えば、単純なオブジェクトに対して、ビニングパスをスキップしてもよい。逆に、より複雑なオブジェクトに対して、ビニングパスを実行してもよい。ここで説明したように、条件真レンダリングと条件偽レンダリングとを生じさせてもよい。クエリパスと条件真レンダリングと条件偽は、フラッシュ４０８の前に生じてもよい。
【００７３】
［００７９］
ここで説明するように、いくつかの例は、すべてのデータがキューされるまでフラッシュしない。例えば、クエリパス４００、レンダリングパス４０４、およびレンダリングパス４０６は、クエリパス４００、レンダリングパス４０４、およびレンダリングパス４０６のそれぞれの後にフラッシュを実行するよりもむしろ、フラッシュ４０８のために、それぞれがキューされてもよい。したがって、単一のフラッシュ４０８を実行することができる。これは、条件付きであり、クエリに基づいていてもよい。ここで説明するように、いくつかの例では、ＧＰＵ１２０は、クエリパス４００、レンダリングパス４０４、およびレンダリングパス４０６とともに、フラッシュ４０８を完了する。フラッシュ４０８は、オペレーティングシステム１１４による使用のために、データをプロセッサ１０２に送ってもよい。データは、蓄積されたレンダリングコマンドからのデータであってもよい。ここで説明するように、いくつかの例では、フラッシュは、すべての蓄積されたレンダリングコマンドをオペレーティングシステム１１４に実行依頼するまたは送ることである。グラフィックアプリケーションがレンダリングコマンドをトリガするとき、グラフィックドライバは、蓄積されたレンダリングコマンドをハードウェアに直接送らない。レンダリングコマンドは、グラフィックドライバによって蓄積される（必要に応じて変換される）。
【００７４】
［００８０］
さらに、いくつかの例では、クエリ値が何であるかは問題ではない。したがって、例えば、メモリロケーションが上書きされるか否かは、問題にならないかもしれないことから、ロックされたメモリロケーションに値を書き込むことができないように、メモリロケーションをロックする必要はないかもしれない。コールバックを得ること等は必要ないかもしれない。いくつかの例では、メモリドライバは、可視ストリームに寄与しない、事前ビニングパス／クエリパスを実行してもよい。いくつかの例では、メモリドライバは、ビニングパスを実行してもよい。ビニングパスは、条件付きで実行される。クエリ結果は、クエリチェック４０２から戻されてもよい。クエリチェック４０２は、「真」または「偽」の値を戻してもよい。クエリの真または偽の結果に基づいて、シーンをレンダリングしてもよい。言い換えると、ビニングパスは、真または偽のクエリ結果に基づいて、条件付きで実行される。真のクエリ結果は、結果としてレンダリングパス４０４になるかもしれない一方で、偽のクエリ結果は、結果としてレンダリングパス４０６になるかもしれない。
【００７５】
［００８１］
ビニングパスによって戻される条件または値が真であるとき、条件真レンダリング４０４は、可視ストリームに寄与するかもしれない。代替的に、ビニングパスによって戻される条件または値が偽である場合、条件偽レンダリング４０６は、レンダリングＩＢ２として可視ストリームに寄与する。レンダリングパス４０４および４０６は、条件付きで実行される。補正レンダリングパスに対して、ビニングパスを一度トリガしてもよい。その後、補正可視ストリームおよび最適化を実行してもよい。クエリパス上ではなく、補正ジオメトリ上のみで、レンダリングパスを実行してもよい。単一のフラッシュポイントで、動作を完了してもよい。
【００７６】
［００８２］
例えば、いくつかのデバイスは、タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングのための方法を実行してもよい。このようなデバイスは、クエリチェック４０２と、フラッシュ動作４０８を実行することなく、クエリパスに基づく条件真パス４０４と、フラッシュ動作４０８を実行することなく、クエリパスに基づく条件偽パス４０６とを、実行するＧＰＵを含んでいてもよい。一般的に、条件真パス４０４または条件偽パス４０６のいずれかが、所定のクエリチェック４０２の結果に基づいて実行される。条件真パスおよび条件偽パスを実行することに応答して、ＧＰＵはフラッシュ動作４０８を実行してもよい。いくつかの例では、条件真または条件偽のいずれかが、結果として、可視ストリームを発生させるビニングパスとなってもよい。代替的に、これらのいずれか、条件真または条件偽は、シーンをレンダリングする際に、直接レンダリングパスを使用してもよい。
【００７７】
［００８３］
いくつかの例では、クエリパス、例えばクエリチェック４０２は、第１のクエリパスを含んでいてもよい。第１のクエリパスを実行することは、第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含んでいてもよい。さらに、いくつかの例では、第１のクエリパスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含んでいる。いくつかの例では、条件偽パスを実行することは、条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含んでいる。いくつかの例では、開始条件パスを実行することは、開始条件パスの終了を示すグラフィックレンダリングコマンドをさらに含んでいる。いくつかの例では、条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含んでいる。いくつかの例では、条件偽パスを実行することは、条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含んでいる。
【００７８】
［００８４］
図５は、本開示で説明する１つ以上の例にしたがって、ハードウェアによって実行できる機能の例を図示している概念のダイヤグラムである。図５に図示している例において、クエリパス５００は、ハードウェア中で実行してもよい。ビニングパス５０２も、ハードウェア中で実行してもよい。さらに、レンダリングパス５０４を、ハードウェア中で実行してもよい。いくつかの例では、ハードウェアは、ＧＰＵ１２０または他の処理ハードウェアを含んでいてもよい。クエリパス５００、ビニングパス５０２、およびレンダリングパス５０４は、オペレーティングシステム５０６によって制御してもよい。オペレーティングシステム５０６は、クエリパス５００を開始してもよい。いくつかの例では、レンダリングパスは、クエリ結果の結果に基づく、条件真パスと条件偽パスのうちの１つの実行を含んでいる。結果は、第２のパスのビニングとレンダリングの両方を制御してもよい。
【００７９】
［００８５］
予め定められたメモリまたは予め定められたレジスタにクエリ結果を戻すクエリブロック５０８において、クエリパス５００を実行してもよい。オペレーティングシステム５０６は、予め定められたメモリまたは予め定められたレジスタ中にクエリ結果を記憶させてもよい。さらに、予め定められたメモリまたは予め定められたレジスタ中に記憶されてもよいクエリ結果は、ビニングパス５０２、レンダリングパス５０４、または両方によって使用してもよい。例えば、シーンおよび関係付けられているオブジェクトをマルチパスレンダリングすることに関連して、クエリ結果を使用してもよい。マルチパスレンダリングでは、シーンおよび関係付けられているオブジェクトは、複数回レンダリングしてもよい。オブジェクトが描かれる毎に、オブジェクトの外観の追加の態様を計算して、以前の結果と組み合わせてもよい。一般的に、これは、粗い最初のレンダリングと、第１の粗いパスのクエリ結果に基づく、詳細な第２のレンダリングパスとを伴ってもよい。クエリチェックの間、クエリ結果をチェックしてもよく、クエリ結果は、結果として、条件真のクエリ結果または条件偽のクエリ結果となる。上記で説明したように、クエリは、アプリケーションによってトリガされる情報に対する何らかの要求であってもよい。クエリ結果は、その後、条件真キューを実行することにより、結果として条件真グラフィックレンダリング４０４となってもよく、または、クエリ結果はその後、条件偽キューを実行することにより、結果として、条件偽グラフィックレンダリング４０６となってもよい。
【００８０】
［００８６］
ビニングパス５０２は条件付きである。ビニングパス５０２の間、ＧＰＵは、シーンを構成する多角形（例えば、三角形）を発生させ、多角形を複数の「ビン」にソートしてもよい。ここで説明するように、ビニングパス５０２の間に規定されたビンは、ディスプレイ（例えば、「スクリーンタイル」として呼ばれることがある）上に提示される最終のシーンのタイルに直接関連していてもよい。例えば、各ビンは、最終のシーンの一部分またはタイル（例えば、ビデオデータ、コンピュータ発生グラフィック画像、静止画像、またはこれらに類するもののフレームの予め定められた一部分）を表す。したがって、用語「ビン」および「タイル」はここでは交換可能に使用するかもしれない。
【００８１】
［００８７］
いくつかの例では、ビニングパス５０２の間、ＧＰＵは、多角形が別の多角形をおおい隠すか否かを決定するために深度テストを実行するような動作も実行して、多角形のどれがシーン中で見えるかを決定する。シーン中でどの多角形が見えるかを決定すると、ＧＰＵは「可視ストリーム」として呼ばれるデータのストリームを発生させることができる。可視ストリームは、シーンの多角形のそれぞれに対する値を含んでいてもよく、値は、多角形が見えるか否かを表してもよい（例えば、「１」の値は多角形が見えることを示し、「０」の値は多角形が見えないことを示してもよい）。
【００８２】
［００８８］
レンダリングパス５０４も条件付きである。レンダリングパス５０４の間、規定されたタイルのそれぞれがレンダリングされる。いくつかの例では、レンダリングパスのそれぞれは、３つのステージ、（１）クリア／アンリゾルブ、（２）レンダリング、（３）リゾルブ、で完了してもよい。
【００８３】
［００８９］
いくつかの例では、メモリドライバは、可視ストリームに寄与しない事前ビニングパスを実行してもよい。いくつかの例では、メモリドライバは、ビニングパス５０２を実行してもよい。ビニングパス５０２は条件付きで実行される。例えば、直接レンダリングに対して、ビニングパス５０２をスキップしてもよい。いくつかの例では、ビニングパス５０２が条件付きで実行されるとき、ビニングパス５０２が可視ストリームに寄与するか否かを示す値をビニングパス５０２が戻してもよい。代替的に、ビニングパス５０２によって戻された条件または値が偽である場合、ビニングパス５０２は、レンダリングＩＢ２として、可視ストリームに寄与する。レンダリングパス５０４も、条件付きで実行される。条件が真のとき、レンダリングパス５０４は可視ストリームに寄与する。レンダリングパス５０４が条件付きで実行されるとき、レンダリングパス５０４は「真」または「偽」の値も戻してもよい。条件が偽のとき、レンダリングパス５０４は、レンダリングＩＢ２として、可視ストリームに寄与する。補正レンダリングパス５０４に対して、ビニングパス５０２を一度トリガしてもよい。その後、補正可視ストリームおよび最適化を実行してもよい。クエリパス５００上ではなく、補正ジオメトリ上のみで、レンダリングパス５０４を実行してもよい。単一のフラッシュポイントで、動作を完了してもよい。
【００８４】
［００９０］
１つの例では、間接バッファ１（ＩＢ１）はクエリパス５００、ビニングパス５０２、またはレンダリングパス５０４を呼び出してもよい。クエリパス５００、ビニングパス５０２、およびレンダリングパス５０４は、間接バッファ２（ＩＢ２）の一部であってもよい。例えば、クエリパス５００、ビニングパス５０２、およびレンダリングパス５０４は、それぞれ別々のＩＢ２、すなわち、ＩＢ２レベルバッファ内の別々のエンティティであってもよい。クエリパス５００は、ビニングパス５０２の前に実行してもよい。ビニングパス５０２は、レンダリング５０４の前に実行してもよい。いくつかのケースでは、ビニングパス５０２をスキップしてもよく、したがって、レンダリング５０４をクエリパス５００の直後に実行する。いくつかのケースでは、ビニングパス５０２もレンダリング５０４もクエリパス５００の後に実行されない。
【００８５】
［００９１］
例えば、クエリパス５００は、データを、例えば、ビニングパス５０２を実行すべきか否かを示す、カウンタ値またはヒューリスティクスを戻してもよい。例において、条件付き実行決定ユニットは、ビニングパス５０２またはレンダリングパス５０４を実行すべきか否かを決定してもよい。ビニングパス５０２を実行する際の決定は、レンダリングされることになるオブジェクトの複雑性に基づいていてもよい。例えば、単純なオブジェクトに対しては、ビニングパス５０２をスキップしてもよい。逆に、より複雑なオブジェクトに対しては、ビニングパス５０２を実行してもよい。したがって、より単純なオブジェクトに対しては、ビニングパス５０２をスキップして、クエリパス５００の直後にレンダリングパス５０４を実行してもよい。さらに、単純なオブジェクトに対しては、単一の繰り返しにおいて、レンダリングパス５０４を実行してもよい。例えば、スクリーン全体が一連のブロック中よりもむしろ単一のパス中で書かれてもよい。これは、例えば、とても単純な、反復スクリーンレンダリングに対して可能であるかもしれない。
【００８６】
［００９２］
ここで説明するように、いくつかの例は、すべてのデータが送られるまでフラッシュしない。さらに、いくつかの例では、クエリ値が何であるかは問題ではない。したがって、例えば、メモリロケーションが上書きされるか否かは、問題にはならないかもしれないことから、メモリロケーションをロックするは必要ないかもれない。コールバックを得ること等は必要ないかもしれない。いくつかの例では、メモリドライバは、可視ストリームに寄与しない、事前ビニングパス／クエリパスを実行してもよい。いくつかの例では、メモリドライバは、ビニングパス５０２を実行してもよい。ビニングパス５０２は条件付きで実行されてもよい。いくつかの例では、ビニングパス５０２が条件付きで実行されるとき、可視ストリームに寄与することを示す値を戻してもよい。代替的に、ビニングパス５０２によって戻される条件または値が偽である場合、ビニングパス５０２は、レンダリングＩＢ２として可視ストリームに寄与する。レンダリングパス５０４も条件付きで実行される。条件が真であるとき、レンダリングパス５０４は可視ストリームに寄与する。レンダリングパス５０４が条件付きで実行されるとき、レンダリングパス５０４は、「真」または「偽」の値も戻してもよい。条件が偽であるとき、レンダリングパス５０４は、レンダリングＩＢ２として可視ストリームに寄与する。補正レンダリングパスに対して、ビニングパスを一度トリガしてもよい。その後、補正可視ストリームおよび最適化を実行してもよい。クエリパス５００上ではなく、補正ジオメトリ上のみで、レンダリングパス５０４を実行してもよい。単一のフラッシュポイントで、動作を完了してもよい。
【００８７】
［００９３］
例えば、いくつかのデバイスは、タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための方法を実行してもよい。このようなデバイスは、クエリパスを実行し、フラッシュ動作を実行することなく、クエリパス５００に基づいて条件真パスを実行し、フラッシュ動作を実行することなく、クエリパス５００に基づいて条件偽パスを実行するＧＰＵを含んでいてもよく、条件真パスおよび条件偽パスを実行することに応答して、ＧＰＵはフラッシュ動作を実行してもよい。
【００８８】
［００９４］
いくつかの例では、クエリパス５００は、第１のクエリパスを含んでいてもよい。第１のクエリパスを実行することは、第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含んでいてもよい。さらに、いくつかの例では、第１のクエリパスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含んでいる。いくつかの例では、条件偽パスを実行することは、条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含んでいる。いくつかの例では、開始条件パスを実行することは、開始条件パスの終了を示すグラフィックレンダリングコマンドをさらに含んでいる。いくつかの例では、条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含んでいる。いくつかの例では、条件偽パスを実行することは、条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含んでいる。
【００８９】
［００９５］
図６は、本開示で説明した１つ以上の例にしたがうタイルベースアーキテクチャ上で、マルチパスグラフィックレンダリングをするための例示的な方法を図示しているフローチャートである。ＧＰＵ１２０は、クエリパスを発生させる（６００）。クエリパス５００は、第１のクエリパスをさらに含んでいてもよい。さらに、第１のクエリパスを実行することは、第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含んでいてもよい。いくつかの例では、第１のクエリパスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含んでいる。
【００９０】
［００９６］
ＧＰＵ１２０は、フラッシュ動作を実行することなく、クエリパス５００に基づいて、条件真パスを発生させる（６０２）。いくつかの例では、開始条件パスを実行することは、開始条件パスの終了を示すグラフィックレンダリングコマンドをさらに含んでいる。条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することもさらに含んでいる。
【００９１】
［００９７］
ＧＰＵ１２０は、フラッシュ動作を実行することなく、クエリパス５００に基づいて、条件偽パスを発生させる（６０４）。いくつかの例では、条件偽パスを実行することは、条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含んでいる。いくつかの例では、条件偽パスを実行することは、条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含んでいる。
【００９２】
［００９８］
ＧＰＵ１２０は、条件真パスおよび条件偽パスを実行することに応答して、フラッシュ動作を実行する（６０６）。３つのパス、クエリパス４００と、条件真４０４と、条件偽４０６とがいったん完了すると、フラッシュ動作を実行してもよい。一般的にこれは、単一のフラッシュ動作の実行を可能にする。フラッシュコマンド４０８は、３つのパス、クエリパス４００と、条件真４０４と、条件偽４０６との結果を、システムメモリ１１８に書き出してもよい。
【００９３】
［００９９］
図７は、本開示の１つ以上の態様を実現するように構成されているかもしれない、デバイスの例を図示しているブロックダイヤグラムである。例えば、図７は、デバイス７０２を図示している。デバイス７０２の例は、ビデオデバイス、メディアプレーヤー、セットトップボックス、移動体電話機およびいわゆるスマートフォンのようなワイヤレスハンドセット、パーソナルデジタルアシスタント（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲームコンソール、テレビ会議ユニット、タブレットコンピューティングデバイス、およびこれらに類するものを含むが、これらに限定されない。
【００９４】
［０１００］
図７の例において、デバイス７０２は、プロセッサ１０２、システムメモリ１１８、およびＧＰＵ１２０を含んでいてもよい。これらのコンポーネントは、図１に関して以前に説明しているので、簡潔さの目的で、プロセッサ１０２、システムメモリ１１８、およびＧＰＵ１２０は、図７に関してさらには記述しない。デバイス７０２は、ディスプレイプロセッサ７２４、トランシーバモジュール７２６、ユーザインターフェース７２８、およびディスプレイ７３０も含んでいてもよい。トランシーバモジュール７２６およびディスプレイプロセッサ７２４は、両方とも、プロセッサ１０２および／またはＧＰＵ１２０と同じ集積回路（ＩＣ）の一部であってもよい。別の例では、トランシーバモジュール７２６およびディスプレイプロセッサ７２４は、両方とも、プロセッサ１２０および／またはＧＰＵ１２０を含んでいるＩＣの外部にあってもよい。さらに別の例では、トランシーバモジュール７２６およびディスプレイプロセッサ７２４は、プロセッサ１２０および／またはＧＰＵ１２０を含んでいるＩＣの外部にあるＩＣ中に形成してもよい。
【００９５】
［０１０１］
デバイス７０２は、明確さの目的で、図７中に示されていない追加のモジュールまたはユニットを含んでいてもよい。例えば、デバイス７０２は、いずれも図７中に示されていない、スピーカーおよびマイクロフォンを含んでいてもよい。デバイス７０２が移動体ワイヤレス電話機である例では、電話通信を実現するために、スピーカーおよびマイクロフォンを使用してもよい。デバイス７０２がメディアプレーヤーであるとき、デバイス７０２は、サウンド出力を提供するためのスピーカーを含んでいてもよく、または、デバイス７０２は、出力ジャックを含んでいてもよい。デバイス７０２は、ビデオカメラも含んでいてもよい。さらに、デバイス７０２中に示されているさまざまなモジュールおよびユニットは、デバイス７０２のすべての例において必要ではないかもしれない。例えば、デバイス７０２がデスクトップコンピュータである、あるいは、外部のユーザインターフェースまたはディスプレイとインターフェースするように装備されている他のデバイスである例において、ユーザインターフェース７２８およびディスプレイ７３０は、デバイス７０２の外部にあってもよい。
【００９６】
［０１０２］
ユーザインターフェース７２８の例は、タッチスクリーン、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含むが、これらに限定されない。ユーザインターフェース７２８はまた、タッチスクリーンであってもよく、ディスプレイ７３０の一部として組み込まれていてもよい。トランシーバモジュール７２６は、デバイス７０２と他のデバイスまたはネットワークと間のワイヤレスまたはワイヤード通信を可能にする回路を含んでいてもよい。トランシーバモジュール７２６は、変調器、復調器、増幅器、およびワイヤードまたはワイヤレス通信のための他のこのような回路を含んでいてもよい。
【００９７】
［０１０３］
いくつかの例において、ＧＰＵ１２０は、システムメモリ１１８中に、完全に形成された画像を記憶させてもよい。ディスプレイプロセッサ７２４は、システムメモリ１１８から画像を取り出して、ディスプレイ７３０のピクセルを照光させて、画像を表示させる値を出力してもよい。ディスプレイ７３０は、ＧＰＵ１２０によって発生させた画像コンテンツを表示する、デバイス７０２のディスプレイであってもよい。ディスプレイ７３０は、液晶ディスプレイ（ＬＣＤ）、有機発光ダイオードディスプレイ（ＯＬＥＤ）、ブラウン管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、または他のタイプのディスプレイデバイスであってもよい。
【００９８】
［０１０４］
１つ以上の例において、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組み合わせで実現してもよい。ソフトウェアで実現する場合、機能は、１つ以上の命令またはコードとしてコンピュータ読取可能媒体上に記憶されていてもよく、あるいは、１つ以上の命令またはコードとしてコンピュータ読取可能媒体上で送信されてもよい。コンピュータ読取可能媒体は、１つの場所から別の場所へのコンピュータプログラムの転送を促進する任意の媒体を含む、コンピュータデータ記憶媒体または通信媒体を含んでいてもよい。データ記憶媒体は、本開示で説明した技術を実現するための命令、コード、および／またはデータ構造を取り出すために、１つ以上のコンピュータまたは１つ以上のプロセッサによってアクセスすることができる任意の利用可能な媒体であってもよい。限定ではなく、例として、このようなコンピュータ読取可能媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ（登録商標）、ＣＤ−ＲＯＭまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイスを備えることができる。ここで使用するような、ディスク（ｄｉｓｋ）およびディスク（ｄｉｓｃ）は、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、デジタル汎用ディスク（ＤＶＤ）、フロッピー（登録商標）ディスク、およびブルーレイ（登録商標）ディスクを含み、ここでディスク（ｄｉｓｋ）は通常、磁気的にデータを再生し、ディスク（ｄｉｓｃ）は、レーザーを用いて光学的にデータを再生する。上記の組み合わせもまた、コンピュータ読取可能媒体の範囲内に含まれるべきである。
【００９９】
［０１０５］
コードは、１つ以上のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の同等な集積またはディスクリートな論理回路のような、１つ以上のプロセッサによって実行してもよい。したがって、ここで使用されるように、用語「プロセッサ」は、前述の構造、またはここで説明した技術のインプリメンテーションに適した他の何らかの構造のいずれかを指してもよい。加えて、いくつかの態様では、ここで説明した機能性は、専用のハードウェア、ソフトウェアモジュール、または、エンコードおよびデコードするように構成されたこれらの組み合わせ内に提供することができ、あるいは、組み合わされたコーデック中に組み込むことができる。さらに、技術は、１つ以上の回路または論理エレメントにおいて十分に実現することができる。
【０１００】
［０１０６］
本開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（すなわち、チップセット）を含む、幅広いさまざまなデバイスまたは装置で実現してもよい。さまざまなコンポーネント、モジュール、またはユニットは、開示された技術を実行するように構成されているデバイスの機能的な態様を強調するためにここ説明されているが、それらは、異なるハードウェアユニットによる実現を必ずしも要求するわけではない。むしろ、上記で説明したように、さまざまなユニットは、コーデックハードウェアユニットにおいて組み合わされるか、あるいは、適切なソフトウェア、ファームウェア、または両方とともに、上記で説明したような１つ以上のプロセッサを含む、相互動作可能ハードウェアユニットの集合によって提供してもよい。
【０１０１】
［０１０７］
さまざまな例を説明してきた。これらおよび他の例は、以下の特許請求の範囲の範囲内にある。
【図１】
2017505476.tif 000003
【図２】
2017505476.tif 000004
【図３】
2017505476.tif 000005
【図４】
2017505476.tif 000006
【図５】
2017505476.tif 000007
【図６】
2017505476.tif 000008
【図７】
2017505476.tif 000009
【手続補正書】
【提出日】平成28年8月2日(2016.8.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための方法において、
グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行することと、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件真パスを実行することと、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件偽パスを実行することと、
前記条件真パスおよび前記条件偽パスを実行することに応答して、前記ＧＰＵによってフラッシュ動作を実行することとを含む方法。
【請求項２】
前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む請求項１記載の方法。
【請求項３】
前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項２記載の方法。
【請求項４】
前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む請求項１記載の方法。
【請求項５】
直接レンダリングを実行することをさらに含む請求項１記載の方法。
【請求項６】
前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項５記載の方法。
【請求項７】
前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む請求項１記載の方法。
【請求項８】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするデバイスにおいて、
メモリと、
ＧＰＵとを具備し、
前記ＧＰＵは、
クエリパスを実行するようにと、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件真パスを実行するようにと、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件偽パスを実行するようにと、
前記条件真パスおよび前記条件偽パスを実行することに応答して、フラッシュ動作を実行し、前記クエリパス、前記条件真パス、または前記条件偽パスのうちの少なくとも１つの結果を前記メモリに書き込むように構成されているデバイス。
【請求項９】
前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む請求項８記載のデバイス。
【請求項１０】
前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項９記載のデバイス。
【請求項１１】
前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む請求項８記載のデバイス。
【請求項１２】
直接レンダリングを実行することをさらに含む請求項８記載のデバイス。
【請求項１３】
前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む請求項１２記載のデバイス。
【請求項１４】
前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む請求項８記載のデバイス。
【請求項１５】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするデバイスにおいて、
クエリパスを実行する手段と、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件真パスを実行する手段と、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件偽パスを実行する手段と、
前記条件真パスおよび前記条件偽パスを実行することに応答して、フラッシュ動作を実行する手段とを具備するデバイス。
【請求項１６】
前記クエリパスは、第１のクエリパスを含み、
前記クエリパスを実行する手段は、前記第１のクエリパスを実行する手段を備え、前記第１のクエリパスを実行する手段は、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行する手段を含む請求項１５記載のデバイス。
【請求項１７】
前記第１のクエリパスを実行する手段は、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行する手段をさらに含む請求項１６記載のデバイス。
【請求項１８】
前記条件偽パスを実行する手段は、前記条件偽パスの終了を示すグラフィックコマンドを実行する手段をさらに備える請求項１５記載のデバイス。
【請求項１９】
直接レンダリングを実行する手段をさらに具備する請求項１５記載のデバイス。
【請求項２０】
前記条件真パスを実行する手段は、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行する手段をさらに備える請求項１９記載のデバイス。
【請求項２１】
前記条件偽パスを実行する手段は、前記条件偽パスの開始を示すグラフィックコマンドを実行する手段をさらに備える請求項１５記載のデバイス。
【請求項２２】
タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための命令をその上に記憶した非一時的コンピュータ読取可能記憶媒体において、
前記命令は、実行される際に、１つ以上のグラフィック処理ユニット（ＧＰＵ）に、
クエリパスを実行させ、
フラッシュ動作を実行させることなく、前記クエリパスに基づいて条件真パスを実行させ、
フラッシュ動作を実行させることなく、前記クエリパスに基づいて条件偽パスを実行させ、
前記条件真パスおよび前記条件偽パスを実行させることに応答して、フラッシュ動作を実行させる非一時的コンピュータ読取可能記憶媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１０１
【補正方法】変更
【補正の内容】
【０１０１】
［０１０７］
さまざまな例を説明してきた。これらおよび他の例は、以下の特許請求の範囲の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［１］  タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための方法において、
グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行することと、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件真パスを実行することと、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件偽パスを実行することと、
前記条件真パスおよび前記条件偽パスを実行することに応答して、前記ＧＰＵによってフラッシュ動作を実行することとを含む方法。
［２］  前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む［１］記載の方法。
［３］  前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む［２］記載の方法。
［４］  前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む［１］記載の方法。
［５］  直接レンダリングを実行することをさらに含む［１］記載の方法。
［６］  前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む［５］記載の方法。
［７］  前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む［１］記載の方法。
［８］  タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするデバイスにおいて、
クエリパスを実行するようにと、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件真パスを実行するようにと、
フラッシュ動作を実行することなく、前記クエリパスに基づいて条件偽パスを実行するようにと、
前記条件真パスおよび前記条件偽パスを実行することに応答して、フラッシュ動作を実行するように構成されているＧＰＵを具備するデバイス。
［９］  前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む［８］記載のデバイス。
［１０］  前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む［９］記載のデバイス。
［１１］  前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む［８］記載のデバイス。
［１２］  直接レンダリングを実行することをさらに含む［８］記載のデバイス。
［１３］  前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む［１２］記載のデバイス。
［１４］  前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む［８］記載のデバイス。
［１５］  タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするデバイスにおいて、
グラフィック処理ユニット（ＧＰＵ）によってクエリパスを実行する手段と、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件真パスを実行する手段と、
フラッシュ動作を実行することなく、前記ＧＰＵによって前記クエリパスに基づいて条件偽パスを実行する手段と、
前記条件真パスおよび前記条件偽パスを実行することに応答して、前記ＧＰＵによってフラッシュ動作を実行する手段とを具備するデバイス。
［１６］  前記クエリパスは、第１のクエリパスを含み、
前記第１のクエリパスを実行することは、前記第１のクエリパスの開始を示すグラフィックレンダリングコマンドを実行することを含む［１５］記載のデバイス。
［１７］  前記第１のクエリパスを実行することは、前記第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行する手段をさらに備える［１６］記載のデバイス。
［１８］  前記条件偽パスを実行することは、前記条件偽パスの終了を示すグラフィックコマンドを実行することをさらに含む［１５］記載のデバイス。
［１９］  直接レンダリングを実行することをさらに含む［１５］記載のデバイス。
［２０］  前記条件真パスを実行することは、第１のクエリパスの終了を示すグラフィックレンダリングコマンドを実行することをさらに含む［１９］記載のデバイス。
［２１］  前記条件偽パスを実行することは、前記条件偽パスの開始を示すグラフィックコマンドを実行することをさらに含む［１５］記載のデバイス。
［２２］  タイルベースのアーキテクチャ上でマルチパスグラフィックレンダリングをするための命令をその上に記憶したコンピュータ読取可能記憶媒体において、
前記命令は、実行される際に、１つ以上のグラフィック処理ユニット（ＧＰＵ）に、
クエリパスを実行させ、
フラッシュ動作を実行させることなく、前記クエリパスに基づいて条件真パスを実行させ、
フラッシュ動作を実行させることなく、前記クエリパスに基づいて条件偽パスを実行させ、
前記条件真パスおよび前記条件偽パスを実行させることに応答して、フラッシュ動作を実行させるコンピュータ読取可能記憶媒体。
【国際調査報告】
2017505476.tif 000010
2017505476.tif 000011