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