(57)【特許請求の範囲】
【請求項１】
画像をレンダリングするための方法であって、
コンピューティングデバイスの１つ以上のプロセッサが、最初のビニング構成に関するビジビリティ情報を生成することであって、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上のビンへの前記画像の可視のプリミティブの最初のタイルに基づく配分を示すことと、
前記１つ以上のプロセッサが、前記最初のビニング構成に関連して修正されたビニング構成を用いて前記画像をレンダリングすることと、を備え、前記修正されたビニング構成は、前記ビジビリティ情報に基づく、方法。
【請求項２】
前記修正されたビニング構成は、前記最初のビニング構成のうちの前記１つ以上のビンとは１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記修正されたビニング構成を用いて前記画像をレンダリングすることは、直接的レンダリング及び前記修正されたビニング構成のうちの前記１つ以上の異なるビンの組み合わせを用いて前記画像をレンダリングすることを備える請求項１に記載の方法。
【請求項３】
前記修正されたビニング構成は、前記最初のビニング構成からの１つ以上のビンを直接レンダリングすべきかどうかの指示を備える請求項１に記載の方法。
【請求項４】
前記修正されたビニング構成は、１つ以上の新しいビンへの前記可視のプリミティブの修正された配分を有する前記１つ以上の新しいビンの指示を備える請求項１に記載の方法。
【請求項５】
ビジビリティ情報を生成することは、前記可視のプリミティブを示すビジビリティストリームを生成することと、前記画像のプリミティブに関連するヒューリスティックデータを生成することと、を備え、前記修正されたビニング構成は、前記ビジビリティストリームと前記ヒューリスティックデータとのうちの少なくとも１つに基づく請求項１に記載の方法。
【請求項６】
前記ヒューリスティックデータを生成することは、前記プリミティブに関連するオーバードローの量を示すデータを生成することを備える請求項５に記載の方法。
【請求項７】
前記ヒューリスティックデータを生成することは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを生成することを備える請求項５に記載の方法。
【請求項８】
前記ヒューリスティックデータを生成することは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを生成することを備える請求項５に記載の方法。
【請求項９】
前記コンピューティングデバイスのディスプレイに前記レンダリングされた画像を表示することをさらに備える請求項１に記載の方法。
【請求項１０】
画像をレンダリングするための装置であって、
前記画像の少なくとも一部を記憶するように構成されたメモリと、
最初のビニング構成に関するビジビリティ情報を生成し、ここにおいて、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上のビンへの前記画像の可視のプリミティブの最初のタイルに基づく配分を示し、及び
前記最初のビニング情報に関連して修正されたビニング構成を用いて前記画像をレンダリングするように構成された１つ以上のプロセッサを備え、前記修正されたビニング構成は、前記ビジビリティ情報に基づく、装置。
【請求項１１】
前記修正されたビニング構成は、前記最初のビニング構成のうちの前記１つ以上のビンとは１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記修正されたビニング構成を用いて前記画像をレンダリングするために、前記１つ以上のプロセッサは、直接的レンダリング及び前記修正されたビニング構成のうちの前記１つ以上の異なるビンの組み合わせを用いて前記画像をレンダリングするように構成される請求項１０に記載の装置。
【請求項１２】
前記修正されたビニング構成は、前記最初のビニング構成からの１つ以上のビンを直接レンダリングすべきかどうかの指示を備える請求項１０に記載の装置。
【請求項１３】
前記修正されたビニング構成は、１つ以上の新しいビンへの前記可視のプリミティブの修正された配分を有する前記１つ以上の新しいビンの指示を備える請求項１０に記載の装置。
【請求項１４】
ビジビリティ情報を生成するために、前記１つ以上のプロセッサは、前記可視のプリミティブを示すビジビリティストリームを生成するように、及び前記画像のプリミティブに関連するヒューリスティックデータを生成するように構成され、前記修正されたビニング構成は、前記ビジビリティストリームと前記ヒューリスティックデータとのうちの少なくとも１つに基づく請求項１０に記載の装置。
【請求項１５】
前記ヒューリスティックデータを生成するために、前記１つ以上のプロセッサは、前記プリミティブに関連するオーバードローの量を示すデータを生成するように構成される請求項１４に記載の装置。
【請求項１６】
前記ヒューリスティックデータを生成するために、前記１つ以上のプロセッサは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを生成するように構成される請求項１４に記載の装置。
【請求項１７】
前記ヒューリスティックデータを生成するために、前記１つ以上のプロセッサは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを生成するように構成される請求項１４に記載の装置。
【請求項１８】
前記レンダリングされた画像を表示するように構成されたディスプレイデバイスをさらに備える請求項１０に記載の装置。
【請求項１９】
画像をレンダリングするための装置であって、
最初のビニング構成に関するビジビリティ情報を生成するための手段、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上のビンへの前記画像の可視のプリミティブの最初のタイルに基づく配分を示す手段と、
前記最初のビニング構成に関連して修正されたビニング構成を用いて前記画像をレンダリングするための手段と、を備え、前記修正されたビニング構成は、前記ビジビリティ情報に基づく、装置。
【請求項２０】
前記修正されたビニング構成は、前記最初のビニング構成のうちの前記１つ以上のビンとは１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記修正されたビニング構成を用いて前記画像をレンダリングするための前記手段は、直接的レンダリング及び前記修正されたビニング構成のうちの前記１つ以上の異なるビンの組み合わせを用いて前記画像をレンダリングするための手段を備える請求項１９に記載の装置。
【請求項２１】
ビジビリティ情報を生成するための前記手段は、前記可視のプリミティブを示すビジビリティストリームを生成するための手段と、前記画像のプリミティブに関連するヒューリスティックデータを生成するための手段と、を備え、前記修正されたビニング構成は、前記ビジビリティストリームと前記ヒューリスティックデータとのうちの少なくとも１つに基づく請求項１９に記載の装置。
【請求項２２】
前記レンダリングされた画像を表示するための手段をさらに備える請求項１９に記載の装置。
【請求項２３】
非一時的なコンピュータによって読み取り可能な記憶媒体であって、実行されたときに、
最初のビニング構成に関するビジビリティ情報を生成すること、ここにおいて、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上のビンへの画像の可視のプリミティブの最初のタイルに基づく配分を示すこと、
前記最初のビニング構成に関連して修正されたビニング構成を用いて前記画像をレンダリングすることを１つ以上のプロセッサに行わせる命令が格納され、前記修正されたビニング構成は、前記ビジビリティ情報に基づく、非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項２４】
前記修正されたビニング構成は、前記最初のビニング構成のうちの前記１つ以上のビンとは１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記修正されたビニング構成を用いて前記画像をレンダリングするために、前記命令は、直接的レンダリング及び前記修正されたビニング構成のうちの前記１つ以上の異なるビンの組み合わせを用いて前記画像をレンダリングすることを前記１つ以上のプロセッサに行わせる請求項２３に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項２５】
ビジビリティ情報を生成するために、前記命令は、前記可視のプリミティブを示すビジビリティストリームを生成すること、及び前記画像のプリミティブに関連するヒューリスティックデータを生成することを前記１つ以上のプロセッサに行わせ、前記修正されたビニング構成は、前記ビジビリティストリームと前記ヒューリスティックデータとのうちの少なくとも１つに基づく請求項２３に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項２６】
コンピューティングデバイスのディスプレイに前記レンダリングされた画像を表示することを前記１つ以上のプロセッサに行わせる命令をさらに備える、請求項２３に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項２７】
画像をレンダリングするための方法であって、
コンピューティングデバイスの１つ以上のプロセッサが、最初のビニング構成に関するビジビリティ情報を受信することであって、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上のビンへの前記画像の可視のプリミティブの最初のタイルに基づく配分を示すことと、
前記１つ以上のプロセッサが、前記最初のビニング構成に関連して修正されたビニング構成を決定することであって、前記修正されたビニング構成は、前記ビジビリティ情報に基づいて、１つ以上の第２のビンへの前記画像の前記可視のプリミティブの配分を備える、ことと、を備える、方法。
【請求項２８】
前記ビジビリティ情報を受信することは、ビジビリティストリームを受信することと、複数のプリミティブに関連するヒューリスティックデータを受信することと、を備える請求項２７に記載の方法。
【請求項２９】
前記ヒューリスティックデータは、前記複数のプリミティブに関連するオーバードローの量を示すデータを備える請求項２８に記載の方法。
【請求項３０】
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを備える請求項２８に記載の方法。
【請求項３１】
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを備える請求項２８に記載の方法。
【請求項３２】
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記修正されたビニング構成を決定することは、前記ビジビリティストリームのうちの少なくとも２つをマージすることを備える請求項２７に記載の方法。
【請求項３３】
予め決定されたビン配置及び前記画像をレンダリングするグラフィックス処理ユニット（ＧＰＵ）に関連するメモリの量に基づいて前記最初のタイルに基づく配分を備える前記最初のビニング構成を、前記１つ以上のプロセッサが、決定することをさらに備える請求項２７に記載の方法。
【請求項３４】
前記修正されたビニング構成を決定することは、前記１つ以上の第２のビンが指定された１つ以上の第１のビンを含むように、前記１つ以上の第１のビンのうちの１つ以上を直接レンダリングされるように指定することを備える請求項３３に記載の方法。
【請求項３５】
前記修正されたビニング構成は、前記１つ以上の第２のビンが前記１つ以上の第１のビンとは異なるように、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備える請求項３３に記載の方法。
【請求項３６】
画像をレンダリングするための装置であって、
最初のビニング構成に関するビジビリティ情報を受信し、ここにおいて、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上の第１のビンへの前記画像の可視のプリミティブの最初のタイルに基づく配分を示し及び
前記最初のビニング構成に関連して修正されたビニング構成を決定するように構成され、前記修正されたビニング構成は、前記ビジビリティ情報に基づいて、１つ以上の第２のビンへの前記画像の前記可視のプリミティブの配分を備える１つ以上のプロセッサと、
前記修正されたビニング構成を記憶するように構成されたメモリとを備える、装置。
【請求項３７】
前記ビジビリティ情報を受信するために、前記１つ以上のプロセッサは、ビジビリティストリームを受信し及び複数のプリミティブに関連するヒューリスティックデータを受信するように構成される請求項３６に記載の装置。
【請求項３８】
前記ヒューリスティックデータは、前記複数のプリミティブに関連するオーバードローの量を示すデータを備える請求項３７に記載の装置。
【請求項３９】
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを備える請求項３７に記載の装置。
【請求項４０】
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを備える請求項３７に記載の装置。
【請求項４１】
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記修正されたビニング構成を決定するために、前記１つ以上のプロセッサは、前記ビジビリティストリームのうちの少なくとも２つをマージするように構成される請求項３６に記載の装置。
【請求項４２】
前記１つ以上のプロセッサは、
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいて前記最初のタイルに基づく配分を備える前記最初のビニング構成を決定するようにさらに構成される請求項３６に記載の装置。
【請求項４３】
前記修正されたビニング構成を決定するために、前記１つ以上のプロセッサは、前記１つ以上の第２のビンが指定された１つ以上の第１のビンを含むように、前記１つ以上の第１のビンのうちの１つ以上を直接レンダリングされるように指定するように構成される請求項４２に記載の装置。
【請求項４４】
前記修正されたビニング構成は、前記１つ以上の第２のビンが前記１つ以上の第１のビンとは異なるように、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備える請求項４２に記載の装置。
【請求項４５】
画像をレンダリングするための装置であって、
最初のビニング構成に関するビジビリティ情報を受信するための手段であって、前記ビジビリティ情報は、最初のビニング構成のうちの１つ以上の第１のビンへの前記画像の可視のプリミティブの最初のタイルに基づく配分を示す手段と、
前記最初のビニング構成に関連して修正されたビニング構成を決定するための手段であって、前記修正されたビニング構成は、前記ビジビリティ情報に基づいて、１つ以上の第２のビンへの前記画像の前記可視のプリミティブの配分を備える手段と、を備える、装置。
【請求項４６】
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記修正されたビニング構成を決定するための前記手段は、前記ビジビリティストリームのうちの少なくとも２つをマージするための手段を備える請求項４５に記載の装置。
【請求項４７】
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいてタイルに基づく前記最初のタイルに基づく配分を備える前記最初のビニング構成を決定するための手段をさらに備える請求項４５に記載の装置。
【請求項４８】
前記修正されたビニング構成を決定するための前記手段は、前記１つ以上の第２のビンが指定された１つ以上の第１のビンを含むように、前記１つ以上の第１のビンのうちの１つ以上を直接レンダリングされるように指定するための手段を備える請求項４７に記載の装置。
【請求項４９】
前記修正されたビニング構成は、前記１つ以上の第２のビンが前記１つ以上の第１のビンとは異なるように、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備える請求項４７に記載の装置。
【請求項５０】
非一時的なコンピュータによって読み取り可能な記憶媒体であって、実行されたときに、
最初のビニング構成に関するビジビリティ情報を受信することであって、前記ビジビリティ情報は、前記最初のビニング構成のうちの１つ以上の第１のビンへの画像の可視のプリミティブの最初のタイルに基づく配分を示すこと、及び
前記最初のビニング構成に関連して修正されたビニング構成を決定することであって、前記修正されたビニング構成は、前記ビジビリティ情報に基づいて、１つ以上の第２のビンへの前記画像の前記可視のプリミティブの配分を備えることを１つ以上のプロセッサに行わせる命令が格納されている、非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項５１】
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記修正されたビニング構成を決定するために、前記命令は、前記ビジビリティストリームのうちの少なくとも２つをマージすることを前記１つ以上のプロセッサに行わせる請求項５０に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項５２】
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいて前記最初のタイルに基づく配分を備える前記最初のビニング構成を決定することを前記１つ以上のプロセッサに行わせる命令をさらに備える請求項５０に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項５３】
前記修正されたビニング構成を決定するために、前記命令は、前記１つ以上の第２のビンが指定された１つ以上の第１のビンを含むように、前記１つ以上の第１のビンのうちの１つ以上を直接レンダリングされるように指定することを前記１つ以上のプロセッサに行わせる請求項５２に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【請求項５４】
前記修正されたビニング構成は、前記１つ以上の第２のビンが前記１つ以上の第１のビンとは異なるように、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備える請求項５２に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［０００１］本開示は、コンピュータグラフィックスのレンダリングに関するものである。
【背景技術】
【０００２】
［０００２］電子ディスプレイ上でのビジュアル提示のためのコンテンツを提供するデバイスは、概して、グラフィックス処理ユニット（ＧＰＵ）を含む。ＧＰＵは、ディスプレイ上のコンテンツを表すピクセルをレンダリングする。ＧＰＵは、ディスプレイ上の各ピクセルに関する１つ以上のピクセル値を生成し、各ピクセルを提示のためにレンダリングするためにディスプレイ上の各ピクセルに関するピクセル値に対するグラフィックス処理を行う。
【発明の概要】
【０００３】
［０００３］本開示の技法は、概して、グラフィックスデータをレンダリングすることに関するものである。例えば、本開示の技法は、レンダリングを最適化するためにビジビリティ（ｖｉｓｉｂｉｌｉｔｙ可視性）情報を利用することを含む。幾つかの態様により、レンダリングが行われる方法、例えば、直接的レンダリング又はタイルに基づくレンダリング、は、レンダリング中のプリミティブ（ｐｒｉｍｉｔｉｖｅ）に関連するビジビリティ情報を用いて動的に決定することができる。例えば、タイルに基づくレンダリングは、見えないプリミティブのレンダリングをスキップするためにオクルード（ｏｃｃｌｕｄｅ）（遮蔽）されたプリミティブを含む画像エリアをレンダリングするために使用することができる。さらに、直接的レンダリングは、オクルードされたプリミティブをほとんど又はまったく有さない画像エリアをレンダリングするために使用することができる。
【０００４】
［０００４］一例においては、本開示の態様は、画像の可視のプリミティブを示すビジビリティ情報を生成することと、ビニング（ｂｉｎｎｉｎｇ）構成を用いて画像をレンダリングすることと、を含む画像をレンダリングするための方法に関するものであり、ビニング構成は、ビジビリティ情報に基づく。
【０００５】
［０００５］他の例においては、本開示の態様は、画像の可視のプリミティブを示すビジビリティ情報を生成するように、及びビニング構成を用いて画像をレンダリングするように構成された１つ以上のプロセッサを含む画像をレンダリングするための装置に関するものであり、ビニング構成は、ビジビリティ情報に基づく。
【０００６】
［０００６］他の例においては、本開示の態様は、画像の可視のプリミティブを示すビジビリティ情報を生成するための手段と、ビニング構成を用いて画像をレンダリングするための手段と、を含む画像をレンダリングするための装置に関するものであり、ビニング構成は、ビジビリティ情報に基づく。
【０００７】
［０００７］他の例においては、本開示の態様は、実行されたときに、画像の可視のプリミティブを示すビジビリティ情報を生成すること、及び、ビニング構成を用いて画像をレンダリングすることを１つ以上のプロセッサに行わせる命令が格納されている非一時的なコンピュータによって読み取り可能な記憶媒体に関するものであり、ビニング構成は、ビジビリティ情報に基づく。
【０００８】
［０００８］他の例においては、本開示の態様は、画像の可視のプリミティブを示すビジビリティ情報を受信することと、ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分（ｄｉｓｔｒｉｂｕｔｉｏｎ）を備えるビニング構成を決定することと、を含む画像をレンダリングするための方法に関するものである。
【０００９】
［０００９］他の例においては、本開示の態様は、画像の可視のプリミティブを示すビジビリティ情報を受信し、及び、ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を備えるビニング構成を決定するように構成された１つ以上のプロセッサを含む画像をレンダリングするための装置に関するものである。
【００１０】
［００１０］他の例においては、本開示の態様は、画像の可視のプリミティブを示すビジビリティ情報を受信するための手段と、ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を備えるビニング構成を決定するための手段と、を含む画像をレンダリングするための装置に関するものである。
【００１１】
［００１１］他の例においては、本開示の態様は、実行されたときに、画像の可視のプリミティブを示すビジビリティ情報を受信すること、及びビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を備えるビニング構成を決定することを１つ以上のプロセッサに行わせる命令が格納されている非一時的なコンピュータによって読み取り可能な媒体記憶に関するものである。
【００１２】
［００１２］本開示の１つ以上の例の詳細が添付図面及び以下の説明において示されている。これらの説明及び図面から、及び請求項からその他の特徴、目的、及び利点が明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】［００１３］本開示の態様を実装するように構成することができるコンピューティングデバイスを例示したブロック図である。
【図２】［００１４］本開示の態様を実装するように構成することができる他のコンピューティングデバイスを例示したブロック図である。
【図３】［００１５］画像を例示した概略図である。
【図４】［００１６］図３の画像を例示した他の概略図である。
【図５】［００１７］図３の画像を例示した他の概略図である。
【図６】［００１８］本開示の態様による、グラフィックスをレンダリングするためのプロセス例を示した流れ図である。
【図７】［００１９］本開示の態様による、グラフィックスをレンダリングするための他のプロセス例を示した流れ図である。
【図８】［００２０］本開示の態様による、グラフィックスをレンダリングするための他のプロセス例を示した流れ図である。
【発明を実施するための形態】
【００１４】
［００２１］伝統的なグラフィックス処理ユニット（ＧＰＵ）アーキテクチャは、（画像と呼ぶことができる）グラフィックスデータのフレームをレンダリングするときに相対的に大量のデータをシステムメモリから読み出すこと又はシステムに書き込むことを要求する。モバイルアーキテクチャは、データフレーム全体を処理するために要求される帯域幅容量を欠いていることがある。従って、画像を複数のタイルに分割するタイルに基づくアーキテクチャが開発されている。それらのタイルは、小量（例えば、２５６ｋＢ）の高帯域幅のオンチップグラフィックスメモリを用いて処理することができるようなサイズが設定される。すなわち、各タイルのサイズは、利用可能なオンチップグラフィックスメモリの量に依存することができる。次に、画像は、各タイルを個々に処理した後に再構築される。
【００１５】
［００２２］タイルに基づくレンダリングは、幾つかの処理パス（ｐｒｏｃｅｓｓｉｎｇ  ｐａｓｓ）に関して説明することができる。例えば、タイルに基づくレンダリングを行うときには、ＧＰＵは、ビニングパス及びレンダリングパスを行うことができる。ビニングパスに関しては、ＧＰＵは、フレーム全体を処理し、ラスタライズされたプリミティブ（例えば、三角形）をビンと呼ばれるタイルサイズのエリアにソートすることができる。すなわち、ＧＰＵは、画像全体に関するコマンドストリームを処理し、画像のラスタライズされたプリミティブをビンに割り当てる。
【００１６】
［００２３］幾つかの例においては、ＧＰＵは、ビニングパス中に１つ以上のビジビリティストリームを生成する。ビジビリティストリームは、最終画像において可視であるプリミティブ及び最終画像において不可視であるプリミティブを示す。例えば、プリミティブは、１つ以上のその他のプリミティブによって遮蔽される場合は不可視であり、従って、そのプリミティブは、シェーディングされた完成画像では見ることができない。
【００１７】
［００２４］ビジビリティストリームは、画像全体に関して生成することができ、又は、各々のビンごとに（例えば、各ビンに関して１つのビジビリティストリーム）生成することができる。概して、ビジビリティストリームは、一連の１及び０を含むことができ、各“１”又は“０”は、特定のプリミティブと関連付けられる。各“１”は、プリミティブが最終画像において可視であることを示す。各“０”は、プリミティブが最終画像において不可視であることを示す。ビジビリティストリームは、レンダリングパス（後述）を制御することができる。例えば、ビジビリティストリームは、レンダリング中に不可視のプリミティブのシーケンスをスキップするために使用することができる。従って、ビンに実際に貢献する、すなわち、最終画像において可視であるプリミティブのみがレンダリング及びシェーディングされ、それにより、シェーディング動作を低減させることができる。
【００１８】
［００２５］各レンダリングパスは、クリア／アンリゾルブ（ｃｌｅａｒ／ｕｎｒｅｓｏｌｖｅ）段階と、レンダリング段階と、リゾルブ（ｒｅｓｏｌｖｅ）段階と、を含むことができる。クリア／アンリゾルブ段階中には、ＧＰＵは、レンダリングされるべき新しいタイルに関してオンチップメモリを初期化することができる。例えば、ＧＰＵは、オンチップメモリをある一定の値に初期化することができ（クリア）、又は、外部のメモリからオンチップメモリに値を読み取ることができる（アンリゾルブ）。レンダリング段階中には、ＧＰＵは、タイルを処理し、処理されたタイルをオンチップメモリに格納することができる。すなわち、ＧＰＵは、グラフィックス処理パイプラインを実装してピクセル値を決定し、オンチップメモリにピクセル値を書き込むことができる。リゾルブ段階中には、ＧＰＵは、タイルの完成されたピクセル値をオンチップメモリから外部のメモリに転送することができる。画像のすべてのタイルを完成させた後は、画像は、出力（例えば、表示）可能な状態である。
【００１９】
［００２６］ビジビリティストリームを用いたタイルに基づくレンダリングは、（不可視のプリミティブをスキップすることによって）より少ない数のプリミティブを処理するのを可能にする一方で、画像をビンごとにレンダリングすることに関連する計算上のコストが存在する。各ビンは、データのチャンク（ｃｈｕｎｋ）と呼ぶことができる。タイルに基づくレンダリングの場合は、上述されるように、各チャンクはローカルのオンチップＧＰＵメモリ内にローディングされ（ロード）、レンダリングされ（レンダー）、システムメモリに格納される（格納）。
【００２０】
［００２７］対照的に、ＧＰＵは、ビジビリティ情報を使用しない直接的レンダリングを行うことができる。直接的レンダリングを行うときには、ＧＰＵは、プリミティブが可視であるかどうかにかかわらず、各々のすべてのプリミティブをシェーディングして直接システムメモリに書き込む。すなわち、不可視のプリミティブは、システムメモリに書き込まれるが、のちにその他のプリミティブ情報によって上書きされるにすぎない。従って、直接的レンダリングは、レンダリング前にチャンク全体がオンチップメモリにローディングされ、レンダリング後にオンチップメモリからシステムメモリに転送されることを要求しない。
【００２１】
［００２８］従って、ビジビリティ情報を決定してタイルに基づくレンダリング（ビンに基づくレンダリングとも呼ばれる）を行うプロセスは、典型的には、画像の少なくとも一部分が相対的に大量のオーバードロー（ｏｖｅｒｄｒａｗ）を有する状況において最も有益である。オーバードローは、１つのプリミティブを他のプリミティブの上に描くことを意味し、従って、オーバードローされたプリミティブの少なくとも一部分は可視ではない。オーバードローがほとんどない事例では、タイルに基づくレンダリングに関連するローカルメモリとシステムメモリとの間での余分のデータ転送がレーテンシーを招くことがある。
【００２２】
［００２９］しかしながら、ＧＰＵ用のドライバ（典型的には、他の処理ユニット、例えば、中央処理装置（ＧＰＵ）によって実行される）が、典型的には、ビンの構成を決定することを担当することができる。さらに、いったん生成された時点で、ＧＰＵは、典型的には、ビジビリティストリームを変更することができず、ビジビリティストリームに従って画像をレンダリングすることにロックされる。すなわち、ＧＰＵは、各チャンクをローディングし、そのチャンクをレンダリングし、そのチャンクをメモリに格納しなければならない。従って、ＧＰＵは、概して、レンダリング中の画像に基づいてタイルに基づくレンダリングと直接的レンダリングとの間で選択することはできない。すなわち、例えば、ＧＰＵは、典型的には、相対的に大量のオーバードローを有するエリアに関するタイルに基づくレンダリング及び相対的に小量のオーバードローを有するエリアに関する直接的レンダリングを動的に選択することはできない。むしろ、上記のように、ＧＰＵは、概して、画像全体に関してタイルに基づくレンダリング又は直接的レンダリングのいずれを行うかにロックされる。
【００２３】
［００３０］本開示の技法は、概して、レンダリングを最適化するためにビジビリティ情報を利用することに関するものである。例えば、本開示の態様により、レンダリングが行われる方法、例えば、直接的レンダリング又はタイルに基づくレンダリング、は、ビジビリティ情報に基づいて動的に決定することができる。幾つかの例においては、ビジビリティ情報は、いずれのプリミティブが可視であるかを記述したデータと、画像の複雑さを記述したデータと、を含むことができる。例えば、ビジビリティ情報は、ビジビリティストリームと、ヒューリスティックデータ（ｈｅｕｒｉｓｔｉｃ  ｄａｔａ）と、を含むことができる。ヒューリスティックデータは、例えば、ビン内のプリミティブの数、ビン内の可視のプリミティブの数、ビン内の不可視のプリミティブの数、プリミティブのサイズ、等を含むことができる。幾つかの例においては、ビジビリティ情報に基づいてスコアをビンに割り当て、ビンの全体的な複雑さ、ビンに関するオーバードローの量、等を示すことができる。
【００２４】
［００３１］このビジビリティに基づき、直接ビンをレンダリングすべか又はビジビリティストリームを用いてビンをレンダリングすべきであるか（タイルに基づくレンダリング）に関する決定を行うことができる。すなわち、例えば、最初のビニング構成が画像に関して決定され、及び、すべてのビンが最初にタイルに基づくレンダリングを用いてレンダリングされるように設定されると仮定する。この例では、最初にタイルに基づくレンダリングが行われるように設定され、相対的に小量のオーバードローを有するビンは、直接的レンダリングに切り換えることができる。さらに加えて又は代替で、新しいビニング構成を決定及び実装することができる。例えば、タイルに基づくレンダリングのためにプリミティブがビンに配分される方法は、ビジビリティ情報に基づいて変更することができる。
【００２５】
［００３２］従って、本開示の態様により、ビジビリティストリームを用いたタイルに基づくレンダリングは、ビジビリティ情報から利益を得ることができる画像部分をレンダリングするために使用することができる（例えば、数多くのプリミティブ及び／又は大量のオーバードローを有する相対的に複雑なエリア）。さらに、直接的レンダリングは、タイルに基づくレンダリングの結果としてローカルのオンチップメモリからシステムメモリへのデータの転送に関連するレーテンシーが発生することになる画像部分をレンダリングするために使用することができる。該技法を実装することは、画像がレンダリングされる効率を向上させることができる。
【００２６】
［００３３］以下においてさらに詳細に説明されるように、ビニング構成は、ＧＰＵ、ＧＰＵドライバ（例えば、中央処理装置（ＣＰＵ）によって実行）、又はそれらの組み合わせによって決定することができる。すなわち、一例においては、ＧＰＵドライバは、最初のビニング構成を生成することができる。ＧＰＵは、最初のビニング構成を処理し、最初のビニング構成に基づいてビジビリティ情報を生成することができる。ＧＰＵは、ビジビリティ情報をＧＰＵドライバに送信することができ、それは、ビジビリティ情報に基づいて修正されたビニング構成を決定することができる。他の例においては、ビジビリティ情報をＧＰＵドライバに送信するのではなく、ＧＰＵは、ビジビリティ情報に基づいて修正されたビニング構成を決定することができる。さらに他の例においては、ＧＰＵドライバ及びＧＰＵは、ビジビリティ情報に基づいて修正されたビニング構成を決定する責任を分担することができる。
【００２７】
［００３４］図１は、グラフィックスデータをレンダリングするために本開示の技法を実装することができるコンピューティングデバイス３０を例示したブロック図である。コンピューティングデバイス３０の例は、無線デバイス、いわゆるスマートフォンを含む携帯電話、パーソナルデジタルアシスタント（ＰＤＡ）、ビデオディスプレイを含むビデオゲームプレーコンソール、モバイルビデオゲームプレイ装置、モバイル映像会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、テレビセットトップボックス、タブレットコンピューティングデバイス、電子書籍リーダー、固定型又はモバイルメディアプレイヤー、等を含み、ただしそれらに限定されない。
【００２８】
［００３５］図１の例において、コンピューティングデバイス３０は、ＣＰＵメモリ３４を有する中央処理装置（ＣＰＵ）３２と、ＧＰＵメモリ３８及び１つ以上のシェーディングユニット４０を有するグラフィックス処理ユニット（ＧＰＵ）３６と、表示装置４２と、レンダリングされたデータ４５（“ｒｅｎ．ｄａｔａ”）を格納するディスプレイバッファユニット４４と、ユーザインタフェースユニット４６と、データ記憶装置４８と、を含む。さらに、記憶装置４８は、コンパイラ５４を有するＧＰＵドライバ、ＧＰＵプログラム５２、及びローカルでコンパイルされたＧＰＵプログラム５６を格納することができる。
【００２９】
［００３６］ＣＰＵ３２の例は、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルロジックアレイ（ＦＰＧＡ）、又はその他の同等の集積回路又はディスクリートロジック回路を含み、ただしそれらに限定されない。ＣＰＵ３２及びＧＰＵ３６は、図１の例では別個のユニットとして例示されているが、幾つかの例においては、ＣＰＵ３２及びＧＰＵ３６は、単一のユニットとして一体化することができる。ＣＰＵ３２は、１つ以上のアプリケーションを実行することができる。アプリケーションの例は、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、音声及び／又は映像キャプチャ、再生又は編集アプリケーション、又は、表示装置４２を介して提示される画像データに関する生成を開始するその他のアプリケーションを含むことができる。
【００３０】
［００３７］図１において示される例では、ＣＰＵ３２は、ＣＰＵメモリ３４を含む。ＣＰＵメモリ３４は、機械コード又はオブジェクトコードを実行する際に使用されるオンチップ記憶装置又はメモリを代表することができる。ＣＰＵメモリ３４は、固定された数のデジタルビットを格納することが可能なハードウェアメモリレジスタを各々備えることができる。ＣＰＵ３２は、例えば、システムバスを通じてアクセスすることができる記憶装置４８から値を読み取るか又は記憶装置４８に値を書き込むよりも素早くローカルＣＰＵメモリ３４から値を読み取ること又はローカルＣＰＵメモリ３４に値を書き込むことができる。
【００３１】
［００３８］ＧＰＵ３６は、グラフィック動作を行うための１つ以上の専用プロセッサを代表する。すなわち、例えば、ＧＰＵ３６は、グラフィックスをレンダリングし及びＧＰＵアプリケーションを実行するための固定された機能及びプログラマブルコンポーネントを有する専用のハードウェアユニットであることができる。ＧＰＵ３６は、ＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はその他の同等の集積回路又はディスクリートロジック回路を含むこともできる。
【００３２】
［００３９］ＧＰＵ３６は、ＧＰＵメモリ３８も含み、それは、機械コード又はオブジェクトコードを実行する際に使用されるオンチップ記憶装置又はメモリを代表することができる。ＧＰＵメモリ３８は、固定された数のデジタルビットを格納することが可能なハードウェアメモリレジスタを各々備えることができる。ＧＰＵ３６は、例えば、システムバスを通じてアクセスすることができる記憶装置４８から値を読み取るか又は記憶装置４８に値を書き込むよりも素早くローカルＧＰＵメモリ３８から値を読み取ること又はローカルＧＰＵメモリ３８に値を書き込むことができる。
【００３３】
［００４０］表示装置４２は、ビューワによる消費のために映像データ、画像、テキスト又はその他のタイプのデータを表示することが可能なユニットを代表する。表示装置４２は、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイ、有機ＬＥＤ（ＯＬＥＤ）、アクティブマトリクスＯＬＥＤ（ＡＭＯＬＥＤ）ディスプレイ、等を含むことができる。
【００３４】
［００４１］ディスプレイバッファユニット４４は、表示装置４２のための画像の提示のためのデータ、例えば、コンピュータによって生成されたグラフィックス、静止画像、映像フレーム、等（レンダリングされたデータ４５）、を格納するのを専用とするメモリ又は記憶装置を代表する。ディスプレイバッファユニット４４は、複数の記憶場所を含む二次元バッファを代表することができる。ディスプレイバッファユニット４４内の記憶場所の数は、表示装置４２上に表示されるべきピクセル数と実質的に同じであることができる。例えば、表示装置４２が６４０×４８０ピクセルを含むように構成される場合は、ディスプレイバッファユニット４４は、ピクセルの色及び強度に関する情報、例えば、赤、緑及び青のピクセル値、又はその他の色値、を格納する６４０×４８０の記憶場所を含むことができる。
【００３５】
［００４２］ディスプレイバッファユニット４４は、ＧＰＵ３６によって処理された各々のピクセルに関する最終的なピクセル値を格納することができる。表示装置４２は、最終的なピクセル値をディスプレイバッファユニット４４から取り出し、ディスプレイバッファユニット４４に格納されたピクセル値に基づいて最終画像を表示することができる。
【００３６】
［００４３］ユーザインタフェースユニット４６は、ユーザがコンピューティングデバイス３０のその他のユニット、例えば、ＣＰＵ３２、と通信するために対話することができる又はその他の方法でインタフェースすることができるユニットを代表する。ユーザインタフェースユニット４６の例は、トラックボールと、マウスと、キーボードと、その他のタイプの入力デバイスと、を含み、ただしそれらに限定されない。ユーザインタフェースユニット４６は、タッチ画面であること又はタッチ画面を含むこともでき、及び、タッチ画面は、表示装置４２に一部として組み入れることができる。
【００３７】
［００４４］記憶装置４８は、１つ以上のコンピュータによって読み取り可能な記憶媒体を備えることができる。記憶装置４８の例は、希望されるプログラムコードを命令又はデータ構造の形態で格納することができ及びコンピュータ又はプロセッサによってアクセスすることができるランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、ＣＤ−ＲＯＭ又はその他の光学ディスク記憶装置、磁気ディスク記憶装置、又はその他の磁気記憶デバイス、フラッシュメモリ、又はその他のいずれかの媒体を備えることができる。
【００３８】
［００４５］幾つかの実装例においては、記憶装置４８は、本開示においてＣＰＵ３２及びＧＰＵ３６に帰する機能をＣＰＵ３２及び／又はＧＰＵ３６に実行させる命令を含むことができる。記憶装置４８は、幾つかの例においては、非一時的な記憶媒体であるとみなすことができる。用語“非一時的な”は、搬送波又は伝搬される信号において具現化されないことを示すことができる。しかしながら、用語“非一時的な”は、記憶装置４８が移動できないことを意味するとは解釈されるべきでない。一例として、記憶装置４８は、コンピューティングデバイス３０から取り外して他のデバイスに移動させることができる。他の例として、記憶装置４８と実質的に同じである記憶装置は、コンピューティングデバイス３０内に挿入することができる。幾つかの例においては、非一時的な記憶媒体は、経時で変化する可能性があるデータを（例えば、ＲＡＭ内に）格納することができる。
【００３９】
［００４６］記憶装置４８は、ＧＰＵドライバ５０、コンパイラ５４、ＧＰＵプログラム５２、及びローカルでコンパイルされたＧＰＵプログラム５６を格納する。ＧＰＵドライバ５０は、ＧＰＵ３６にアクセスするためのインタフェースを提供するコンピュータプログラム又は実行可能なコードを代表する。ＣＰＵ３２は、ＧＰＵ３６とインタフェースするためにＧＰＵドライバ又はその一部分を実行し、この理由で、ＧＰＵドライバ５０は、図１の例では、ＣＰＵ３２内において“ＧＰＵドライバ５０”というラベルが付けられた破線のボックスとして示される。ＧＰＵドライバは、ＣＰＵ３２によって実行されるプログラム又はその他のエクセキュータブル（ｅｘｅｃｕｔａｂｌｅ）にアクセス可能であり、ＧＰＵプログラム５２を含む。
【００４０】
［００４７］ＧＰＵプログラム５２は、高水準（ＨＬ）プログラミング言語で、例えば、アプリケーションプログラミングインタフェース（ＡＰＩ）を用いて、書かれたコードを含むことができる。ＡＰＩの例は、Ｍｉｃｒｏｓｏｆｔ，Ｉｎｃ．によって開発された、Ｏｐｅｎ−Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ（“ＯｐｅｎＣＬ”）、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（“ＯｐｅｎＧＬ”）、及びＤｉｒｅｃｔＸ、を含む。概して、ＡＰＩは、関連付けられたハードウェアによって実行される予め決定された、標準化されたコマンドの組を含む。ＡＰＩコマンドは、ユーザがＧＰＵのハードウェアコンポーネントの詳細に関する知識なしにコマンドを実行するようにハードウェアコンポーネントに命令するのを可能にする。
【００４１】
［００４８］ＧＰＵプログラム５２は、ＧＰＵドライバ５０によって提供される１つ以上の機能を呼び出すこと又はその他の形で含めることができる。ＣＰＵ３２は、概して、ＧＰＵプログラム５２が埋め込まれているプログラムを実行し、ＧＰＵプログラム５２に出くわした時点で、ＧＰＵプログラム５２をＧＰＵドライバ５０に渡す。ＣＰＵ３２は、ＧＰＵプログラム５２を処理するためにこのコンテキストでＧＰＵドライバ５０を実行する。すなわち、例えば、ＧＰＵドライバ５０は、ＧＰＵプログラム５２をＧＰＵ３６によって実行可能なオブジェクトコード又は機械コードにコンパイルすることによってＧＰＵプログラム５２を処理することができる。このオブジェクトコードは、図１の例では、ローカルでコンパイルされたＧＰＵプログラム５６として示されている。
【００４２】
［００４９］幾つかの例においては、コンパイラ５４は、ＧＰＵプログラム５２が埋め込まれているプログラムの実行中にＧＰＵプログラム５２をコンパイルするためにリアルタイムで又はほぼリアルタイムで動作することができる。例えば、コンパイラ５４は、概して、ＨＬプログラミング言語に従って定義されたＨＬ命令を低水準（ＬＬ）プログラミング言語のＬＬ命令に変換するユニットを代表する。コンパイル後は、これらのＬＬ命令は、特定のタイプのプロセッサ又はその他のタイプのハードウェア、例えば、ＦＰＧＡ、ＡＳＩＣ、等（例えば、ＣＰＵ３２及びＧＰＵ３６を含む）によって実行することができる。
【００４３】
［００５０］図１の例においては、コンパイラ５４は、ＧＰＵプログラム５２を含むＨＬコードを実行するときにＣＰＵ３２からＧＰＵプログラム５２を受信することができる。コンパイラ５４は、ＬＬプログラミング言語に準拠するローカルでコンパイルされたＧＰＵプログラム５６を生成するためにＧＰＵプログラム５２をコンパイルすることができる。次に、コンパイラ５４は、ＬＬ命令を含むローカルでコンパイルされたＧＰＵプログラム５６を出力する。
【００４４】
［００５１］ＧＰＵ３６は、概して、（ＧＰＵ３６内において“ローカルでコンパイルされたＧＰＵプログラム５６”というラベルが付けられた破線のボックスとして示される）ローカルでコンパイルされたＧＰＵプログラム５６を受信し、幾つかの例において、ＧＰＵ３６は、１つ以上の画像をレンダリングし、レンダリングされた画像をディスプレイバッファユニット４４に出力する。例えば、ＧＰＵ３６は、表示装置４２において表示されるべき幾つかのプリミティブを生成することができる。プリミティブは、線（曲線、スプライン、等を含む）、点、円、楕円、ポリゴン（典型的には、ポリゴンは、１つ以上のプリミティブの集合であると定義される）又はその他の二次元（２Ｄ）プリミティブのうちの１つ以上を含むことができる。用語“プリミティブ”は、三次元（３Ｄ）プリミティブ、例えば、立方体、円筒、球体、円錐、ピラミッド、トーラス、等を意味することもできる。概して、“プリミティブ”は、表示装置４２を介して画像（又は映像データのコンテキストにおけるフレーム）としての表示のためにＧＰＵ３６によってレンダリングすることが可能な基本的幾何学形又は要素を意味する。
【００４５】
［００５２］ＧＰＵ３６は、１つ以上のモデル変換（状態データでも指定することができる）を適用することによってプリミティブ及びそれらのプリミティブのその他の属性（例えば、色、テクスチャ、照明、カメラ構成、又はその他の側面を定義）をいわゆる“ワールドスペース”に変換することができる。いったん変換された時点で、ＧＰＵ３６は、プリミティブ及びライトの座標をカメラ又は視点座標系に変換するためにアクティブなカメラ（同じく、カメラを定義する状態データにおいて指定することもできる）に関してビュー変換を適用することができる。ＧＰＵ３６は、アクティブなライトを考慮してプリミティブの外観をレンダリングするために頂点シェーディングを行うこともできる。ＧＰＵ３６は、上記のモデル、ワールドスペース又はビュースペースのうちの１つ以上において頂点シェーディングを行うことができる（ただし、それは、一般的にはワールドスペースで行われる）。
【００４６】
［００５３］プリミティブがいったんシェーディングされた時点で、ＧＰＵ３６は、一例として（−１、−１、−１）及び（１、１、１）において、極点を有する単位立方体に画像を投影するための投影を行うことができる。この単位立方体は、一般的には、正規化ビューボリューム（ｃａｎｏｎｉｃａｌ  ｖｉｅｗ  ｖｏｌｕｍｅ）と呼ばれる。モデルを視点座標系から正規化ビューボリュームに変換した後は、ＧＰＵ３６は、ビューボリューム内に少なくとも部分的に常在しないプリミティブを除去するためのクリッピングを行うことができる。換言すると、ＧＰＵ３６は、カメラのフレーム内に存在しないプリミティブを除去することができる。次に、ＧＰＵ３６は、プリミティブの座標をビューボリュームからスクリーン空間にマッピングし、有効的にプリミティブの３Ｄ座標を２Ｄ座標に変換することができる。
【００４７】
［００５４］関連するシェーディングデータでプリミティブを定義する変換及び投影された頂点が与えられた場合、ＧＰＵ３６は、プリミティブをラスタライズすることができる。ラスタライズ中には、ＧＰＵ３６は、プリミティブに関連するテクスチャを適用することができる（テクスチャは、状態データを備えることができる）。ＧＰＵ３６は、いずれのプリミティブ及び／又はオブジェクトがその他のオブジェクトによってオクルードされるかを決定するためにラスタライズ中に深度試験とも呼ばれるＺバッファアルゴリズムを実行することもできる。Ｚバッファアルゴリズムは、プリミティブをそれらの深度に従ってソートし、このため、ＧＰＵ３６は、各プリミティブを画面に描く順序を知っている。ビニング時には（例えば、タイルに基づくレンダリングの場合）、ラスタライズ中にシェーディングを行うことができない。しかしながら、プリミティブをレンダリング時には、ＧＰＵ３６は、プリミティブによってカバーされた画面のピクセルに関する色を計算して設定することができる。次に、ＧＰＵ３６は、レンダリングされたピクセルをディスプレイバッファユニット４４に出力する。
【００４８】
［００５５］ディスプレイバッファユニット４４は、画像全体がレンダリングされるまで、レンダリングされた画像のレンダリングされたピクセルを一時的に格納することができる。ディスプレイバッファユニット４４は、このコンテキストでは画像フレームバッファであるとみなすことができる。ディスプレイバッファユニット４４は、表示装置４２上に表示されるべきレンダリングされた画像を送信することができる。ディスプレイバッファユニット４４は、別個に示されて説明されているが、幾つかの例においては、記憶装置４８の一部を形成することができる。
【００４９】
［００５６］幾つかの例においては、ＧＰＵ３６は、画像をレンダリングするためにタイルに基づくレンダリングを実装することができる。例えば、ＧＰＵ３６は、画像をタイルと呼ばれる複数の部分に分割することによって画像をレンダリングするタイルに基づくアーキテクチャを実装することができる。タイルは、ＧＰＵメモリ３８のサイズに基づいてサイズを決めることができる。例えば、ＧＰＵ３６は、ＧＰＵメモリ３８に合わせてタイルをレンダリングすることができる。タイルが完成した時点で、ＧＰＵ３６は、ＧＰＵメモリ３８から記憶装置４８及び／又はディスプレイバッファユニット４４にタイルを転送することができる（レンダリングされたデータ４５）。ＧＰＵ３６がこのようにしてフレームに関連するすべてのタイルをレンダリングした後で、ディスプレイバッファユニット４４は、完成した画像を表示装置４２に出力することができる。複数のタイルを用いて画像をレンダリングすることは、ＧＰＵメモリ３８と記憶装置４８との間におけるデータ転送の量及び／又は頻度を低減させることができる。
【００５０】
［００５７］タイルに基づくレンダリングを行うときには、ＧＰＵドライバ５０は、画像をレンダリングするためのビニング構成を最初に決定することができる。例えば、ＧＰＵドライバ５０は、ＧＰＵメモリ３８のサイズに基づいてビンのサイズを決定することができる。さらに、ＧＰＵドライバ５０は、予め決定されたビンのレイアウトを適用することができる。例えば、ＧＰＵドライバ５０は、画像の左上隅において最初のビンを設定することができる。ＧＰＵドライバ５０は、画像全体がビンに分割されるまで画像の左から右に及び上から下にビンを加えることができる。
【００５１】
［００５８］ＧＰＵドライバ５０は、ＧＰＵプログラム５２を用いてコマンドストリームも生成する。例えば、コマンドストリームは、ＧＰＵプログラム５２から画像をレンダリングするための命令を入れることができる。ＧＰＵドライバ５０は、コマンドストリームに命令を追加することができ、それらは、ストリーム内で現れる順序でＧＰＵ３６によって実行される。コマンドストリームは、ＧＰＵプログラム５２から画像を成すプリミティブを定義することができる。
【００５２】
［００５９］最初のビニング構成及びコマンドストリームがＧＰＵドライバ５０によって設定された後は、ＧＰＵ３６は、ビニングパス及びレンダリングパスを行うことができる。ビニングパスに関して、ＧＰＵ３６は、フレーム全体を処理し、ラスタライズされたプリミティブを（ＧＰＵドライバ５０によって設定された）最初のビニング構成のビンにソートすることができる。ＧＰＵ３６は、ビニングパス中にビジビリティストリームを生成することもでき、それは、ビンに従って分離することができる。例えば、各ビンには、画像に関するビジビリティストリームの対応する部分を割り当てることができる。
【００５３】
［００６０］ＧＰＵドライバ５０は、ビジビリティストリームにアクセスし、各ビンをレンダリングするためのコマンドストリームを生成することができる。従って、コマンドストリームは、最初のビニング構成に従って設定することができる。すなわち、コマンドストリームは、ＧＰＵ３６が最初のビニング構成の順序で画像のタイルをレンダリングするように生成して順序を決めることができる。
【００５４】
［００６１］タイルをレンダリングするときには、ＧＰＵ３６は、クリア／アンリゾルブ段階、レンダリング段階、及びリゾルブ段階を実行することができる。クリア／アンリゾルブ段階中には、ＧＰＵ３６は、レンダリングされるべき新しいタイルに関してＧＰＵメモリを初期化する。レンダリング段階中には、ＧＰＵ３６は、タイルをレンダリングし、レンダリングされたタイルをＧＰＵメモリ３８に格納することができる。すなわち、ＧＰＵ３６は、タイルの各ピクセルに関するピクセル値を決定し、ＧＰＵメモリ３８にピクセル値を書き込むことができる。リゾルブ段階中には、ＧＰＵ３６は、タイルの完成されたピクセル値をＧＰＵメモリ３８からディスプレイバッファユニット４４（又は記憶装置４８）に転送することができる。
【００５５】
［００６２］ビジビリティストリームを用いたタイルに基づくレンダリングは、（不可視のプリミティブをスキップすることによって）より少ない数のプリミティブを処理するのを可能にする一方で、データのローディング及びＧＰＵメモリ３８への格納、及びＧＰＵメモリ３８からディスプレイバッファユニット４４へのタイル全体の転送に関連する計算上のコストが存在する。例えば、タイルに基づくレンダリングとは対照的に、ＧＰＵ３６は、ピクセル値をＧＰＵメモリ３８に格納するのではなく、レンダリングに引き続いてディスプレイバッファユニット４４（又は記憶装置４８）にピクセル値を格納することによって直接データをレンダリングすることができる。直接的レンダリングの場合は、ＧＰＵドライバ５０は、最終画像内で不可視であるプリミティブを識別してスキップするためにビットストリームを使用しない。むしろ、コマンドストリームは、プリミティブが可視であるかどうかにかかわらず、すべてのプリミティブをレンダリングするための命令を含む。従って、記憶装置４８及び／又はディスプレイバッファユニット４４内の不可視のプリミティブは、最終的には、１つ以上のその他のプリミティブに関連するピクセル値によって上書きすることができる。
【００５６】
［００６３］ビジビリティ情報を決定してタイルに基づくレンダリング（ビンに基づくレンダリングとも呼ばれる）を行うプロセスは、典型的には、画像の少なくとも一部分が相対的に大量のオーバードローを有する状況において最も有益である。オーバードローは、１つのプリミティブを他のプリミティブの上に描くことを意味し、従って、オーバードローされたプリミティブの少なくとも一部分は可視ではない。オーバードローがほとんどない事例では、タイルに基づくレンダリングに関連するローカルメモリとシステムメモリとの間での余分のデータ転送がレーテンシーを招くことがある。
【００５７】
［００６４］しかしながら、上記のように、ＧＰＵドライバ５０は、ビンの最初の構成を決定する。さらに、ＧＰＵ３６は、ビンの最初の構成に基づいてビジビリティストリームを生成するためにビンに従って可視のプリミティブをソートする。従って、ビンの最初の構成に基づいてビジビリティストリームがいったん生成された時点で、ＧＰＵドライバ５０は、プリミティブをレンダリングするためにコマンドストリームを変更することはできない。すなわち、例えば、ＧＰＵドライバ５０は、典型的には、相対的に大量のオーバードローを有するエリアに関するタイルに基づくレンダリングコマンドストリームを生成する一方で、大量のオーバードローを有さないエリアを直接レンダリングするためにコマンドストリームを生成することはできない。むしろ、ＧＰＵドライバ５０及びＧＰＵ３６は、典型的には、画像全体に関してタイルに基づくレンダリング又は直接的レンダリングのいずれかを行うことにロックされる。
【００５８】
［００６５］本開示の技法は、概して、レンダリングを最適化するためにビジビリティ情報を利用することに関するものである。例えば、本開示の態様により、ＧＰＵ３６及びＧＰＵドライバ５０は、特定の画像に関連するビジビリティ情報に基づいてその画像をレンダリングする方法を動的に決定することができる。このように、ＧＰＵ３６及びＧＰＵドライバ５０は、画像の幾つかのエリアにおいて（ビジビリティストリームを使用せず及びディスプレイバッファユニット４４に直接データを格納することによって）直接的レンダリングを行うことができ、他方、同じ画像のその他のエリアでは（ビジビリティストリームを使用し及びＧＰＵメモリ３８にデータを格納することによって）タイルに基づくレンダリングを行うことができる。
【００５９】
［００６６］従って、本開示の態様により、ＧＰＵ３６は、ビジビリティ情報から利益を得ることができる画像部分をレンダリングするためにタイルに基づくレンダリングを使用することができる（例えば、数多くのプリミティブ及び／又は大量のオーバードローを有する相対的に複雑なエリア）。さらに、ＧＰＵ３６は、タイルに基づくレンダリングの結果としてローカルのオンチップメモリからシステムメモリへのデータの転送に関連するレーテンシーが発生することになる画像部分をレンダリングするために直接的レンダリングを使用することができる。該技法を実装することは、画像がレンダリングされる効率を向上させることができる。
【００６０】
［００６７］コンピューティングデバイス３０は、単なる一例として提供され、本開示の技法を実行するその他のコンピューティングデバイス３０を異なる形で配置できることが理解されるべきである。例えば、ディスプレイバッファユニット４４は記憶装置４８と切り離されて示され及び説明されているが、その他の例においては、ディスプレイユニットバッファ４４及び記憶装置４８は、同じコンポーネント内に組み入れることができる。
【００６１】
［００６８］さらに、コンピューティングデバイス３０は、明確化を目的として図１に示されていない追加のモジュール又はユニットを含むことができることが理解されるべきである。例えば、コンピューティングデバイス３０は、データを送信及び受信するためのトランシーバユニットを含むことができ、及び、コンピューティングデバイス３０と他のデバイス又はネットワークとの間での無線又は有線の通信を可能にする回路を含むことができる。コンピューティングデバイス３０は、コンピューティングデバイス３０がモバイル無線電話、例えば、スマートフォン、である例において電話通信を行うためのスピーカ及びマイク（いずれも図１には示されていない）、又はコンピューティングデバイス３０がメディアプレーヤ又はタブレットコンピュータである場合のスピーカ及び／又はマイクも含むことができる。幾つかの例においては、ユーザインタフェースユニット４６及び表示装置４２は、コンピューティングデバイス３０が外部ユーザインタフェース又はディスプレイとインタフェースするために装備されるデスクトップコンピュータ又はその他のデバイスである例ではコンピューティングデバイス３０の外部に存在することができる。
【００６２】
［００６９］図２は、コンピューティングデバイス３０の一部分をより詳細に例示したブロック図である。図２の例においては、ＧＰＵ３６は、ＧＰＵメモリ３８と、コマンドプロセッサ６０と、１つ以上のシェーダプロセッサ６４と、ラスタライザ６８と、ビジビリティユニット７２と、を含む。さらに、ＣＰＵ３２は、ＣＰＵメモリ３４と、ＧＰＵドライバ５０と、コンパイラ５４と、コマンドストリーム再構成ユニット７６と、を含む。図２の幾つかのユニットは、高度に一体化することができるが、概念上の目的で別々に例示されることが理解されるべきである。さらに、幾つかのユニットは、概念上の目的で単一のユニットに関して説明されるが、１つ以上の機能上のユニットを含むことができる。
【００６３】
［００７０］図２は、グラフィックスデータをレンダリングするために本開示の技法を利用することができるＧＰＵの単なる一例として提供される。その他の例においては、グラフィックスデータをレンダリングするための技法は、その他のコンポーネントを有する様々なその他のＧＰＵによって実行することができる。例えば、ＧＰＵ３６は、画像を解析及びレンダリングすることに関連する様々なその他のコンポーネント及びユニット、例えば、入力アセンブリユニット、テクスチャユニット、スケジューリングユニット、算術論理ユニット（ＡＬＵ）、又はその他の固定された機能の又はプログラマブルなＧＰＵコンポーネントも含むことができる。
【００６４】
［００７１］ＧＰＵ３６のコンポーネントは、外部のメモリ、例えば、記憶装置４８（図１）、にアクセスするよりも相対的に低いレーテンシーでＧＰＵメモリ３８にアクセスすることができる。例えば、ＧＰＵメモリ３８は、ＧＰＵ３６とオンチップであり、ＧＰＵコンポーネントと相対的に近接しているオンチップメモリであることができ、及び、ＧＰＵ３６内の専用メモリバスと関連付けることができる。対照的に、記憶装置４８に格納されているデータにアクセスするためには、ＧＰＵ３６は、コンピューティングデバイス３０のその他のコンポーネント（例えば、ＣＰＵ３２）とメモリバスを共有しなければならないことがあり、その結果、利用可能な帯域幅がより制限されることがある。
【００６５】
［００７２］上述されるように、高帯域幅、低レーテンシーＧＰＵメモリ３８を利用するために、ＧＰＵ３６は、タイルに基づくレンダリングアーキテクチャを用いてグラフィックスをレンダリングすることができる。ＧＰＵ３６は、画像（シーンと呼ぶこともできる）をより小さい部分（例えば、タイル）に分割することができる。ＧＰＵメモリ３８は、ＧＰＵ３６がタイルをレンダリングする間にそのタイルに関連するデータを格納することができる。タイルをレンダリング後は、ＧＰＵ３６は、レンダリングされたピクセルデータをリゾルブ（ｒｅｓｏｌｖｅ）するか、又は、メモリバスを介してＧＰＵメモリ３８から記憶装置４８にコピーすることができる。
【００６６】
［００７３］コマンドプロセッサ６０は、ＧＰＵドライバ５０からコマンドストリームを読み取ることを担当することができる。例えば、図１に関して上述されるように、ＧＰＵドライバ５０は、ＧＰＵ３６による実行のための命令を出すことができ、それらは、コマンドストリームと呼ぶことができる。コマンドプロセッサ６０は、コマンドストリームの命令を読み取ること及び／又は復号することができる。幾つかの例においては、コマンドプロセッサ６０は、コマンドストリームの命令が入ったバッファから読み取ることができる。コマンドプロセッサ６０は、ＧＰＵ３６における命令の実行を開始することもできる。例えば、コマンドプロセッサ６０は、シェーダプロセッサ６４によって実行されるべき命令をスケジューリングするスレッドスケジューラに命令を供給することができる。
【００６７】
［００７４］シェーダプロセッサ６４は、命令を実行するのを担当することができる。例えば、シェーダプロセッサ６４は、頂点、幾何、及びピクセルシェーディング動作を担当するプログラマブルなシェーディングユニットであることができる。例えば、シェーダプロセッサ６４のうちの１つ以上は、シーンの三角形メッシュを生成するためにそのシーンを構成するプリミティブ（例えば、三角形）の頂点位置を決定することを担当することができる。さらに、シェーダプロセッサ６４のうちの１つ以上は、三角形メッシュからプリミティブを生成すること、及びピクセルフィリング動作及びシェーディング動作を担当することができる。
【００６８】
［００７５］シェーダプロセッサ６４は、同一の形で構成することができ、又は、特定のタスクを実行するように個別に構成することができる。例えば、シェーダプロセッサ６４のうちの１つは、ビニング動作を担当する“ビニングシェーダ”として指定することができ、他方、残りのシェーダプロセッサ６４は、上述される頂点、幾何、又はピクセルシェーディング動作を担当することができる。
【００６９】
［００７６］ラスタライザ６８は、頂点情報を受信することができ及びシーンのプリミティブの表現を生成することができる。幾つかの例においては、ラスタライザ６８は、いずれのプリミティブが最終画像において可視であるかを決定するために受信された頂点情報に予め定義された規則を適用する。ラスタライザ６８は、シーンのすべての不可視のプリミティブをカリング、又は取り除くことができる。例えば、ラスタライザ６８は、その他のプリミティブによって覆われており、従って、最終画像では可視ではないプリミティブを識別するためにｚバッファリングを行うことができる。
【００７０】
［００７７］ビジビリティユニット７２は、固定機能ハードウェアコンポーネント及び／又はプログラマブル処理ユニットの組み合わせを含むことができる。ビジビリティユニット７２は、ラスタライズされたデータをラスタライザ６８から受信し、１つ以上のビジビリティストリームを生成することができる。ビジビリティストリームを生成するために、ビジビリティユニット７２は、ラスタライザ６８によって決定された各々のビジビリティプリミティブをビンに配分することができる。各ビンは、完成されたシーンのタイルを表すことができる。
【００７１】
［００７８］幾つかの例においては、ビジビリティユニット７２は、各々のビンに関する別々のビジビリティストリームを生成することができる。例えば、ビジビリティユニット７２は、特定のビンのいずれのプリミティブが可視であり及び特定のビンのいずれのプリミティブが不可視であるかを示すためのフラグを設定することによって特定のビンに関するビジビリティストリームを生成することができる。幾つかの態様により、ビジビリティユニット７２は、最終シーンにおいてプリミティブが可視であることを示すために“１”のフラグ値、最終画像においてプリミティブが可視でないことを示すために“０”のフラグ値を設定することができる。
【００７２】
［００７９］従って、ビジビリティユニット７２は、各ビンの可視プリミティブを示すフラグを備える複数のビジビリティストリームを生成することができる。幾つかの例においては、ビジビリティユニット７２は、ビジビリティストリームを圧縮することができる。例えば、ビジビリティユニット７２は、“０”のフラグの大きいストリングを小さくし及びビジビリティストリームを復元するために要求されるメモリの量を低減させるための圧縮方式を適用することができる。
【００７３】
［００８０］本開示の態様により、ビジビリティユニット７２は、シーンの各ビンに関するヒューリスティックデータを生成することもできる。概して、ヒューリスティックデータは、ビンの特徴を記述する。例えば、ビジビリティユニット７２は、ビンのビジビリティ特徴を記述するために１つのビジビリティストリームごとに生成することができる。幾つかの例においては、ヒューリスティックデータは、ビン内のプリミティブの数、ビン内の可視プリミティブの数、ビン内の不可視の又は遮蔽されたプリミティブの数、ビン内のプリミティブのサイズ、等を含むことができる。
【００７４】
［００８１］幾つかの例においては、本開示の態様により、ビジビリティユニット７２は、ビジビリティストリーム及び／又はヒューリスティックデータに基づいて各ビンにスコアを割り当てることができる。例えば、ビジビリティユニット７２は、各ビンの全体的な複雑さ、各ビンに関するオーバードローの量、等を示すスコアを各ビンに割り当てることができる。例示することを目的とする一例においては、ビジビリティユニット７２は、各ビンに関するオーバードローの量に従って数字で各ビンのランクを付けることができ、ここで、０のランキングは、オーバーラップしているプリミティブがビン内に存在しないことを示し、１０のランキングは、数多くのオーバーラップしているプリミティブが存在することを示す。
【００７５】
［００８２］幾つかの例においては、１つ以上のビジビリティストリーム、ヒューリスティックデータ、及びビジビリティスコアは、すべて、概してビジビリティ情報と呼ぶことができる。すなわち、ビジビリティ情報は、ビジビリティストリーム、ヒューリスティックデータ、及びビジビリティスコアの部分組を含むことができる。
【００７６】
［００８３］本開示の態様により、ビジビリティユニット７２は、ＧＰＵドライバ５０に送信されるべきビジビリティ情報を準備することができる。例えば、ビジビリティユニット７２は、幾つかの例においては、ヒューリスティックデータ及び／又はビジビリティスコアをビジビリティストリームの最後に添付することができる。その他の例においては、ビジビリティユニット７２は、ヒューリスティックデータ及び／又はビジビリティスコアをビジビリティストリームから別々に提供することができる。
【００７７】
［００８４］いずれの場合も、図２において示される例では、ビジビリティ情報は、コマンドストリーム再構成ユニット７６によって受信することができる。コマンドストリーム再構成ユニット７６は、説明上の目的で別々に示されているが、ＧＰＵドライバ５０と一体化することができ、従って、ＧＰＵドライバ５０は、コマンドストリーム再構成ユニット７６に関して本開示の技法を実行する。
【００７８】
［００８５］コマンドストリーム再構成ユニット７６は、ビジビリティユニット７２からビジビリティ情報を受信することができる。以下においてさらに詳細に説明されるように、コマンドストリーム再構成ユニット７６は、ビジビリティ情報に基づいてコマンドストリームを再構成することができる。例えば、コマンドストリーム再構成ユニット７６は、元来はタイルに基づいてレンダリングされるように設定された幾つかのビンを直接的にレンダリングされるように指定することができる。他の例においては、コマンドストリーム再構成ユニット７６は、新しいビンを形成するためにビニング構成を変更することができる。すなわち、コマンドストリーム再構成ユニット７６は、新しいビンを生成するために１つ以上のビジビリティストリーム（又は１つ以上のビジビリティストリームの一部分）をマージすることができる。
【００７９】
［００８６］例示することを目的とする一例においては、ＧＰＵドライバ５０は、ＣＰＵ３２において実行されるプログラムに従ってレンダリングするために画像を定義するコマンドストリームを生成することができる。コマンドストリームは、最初のビニング構成を示すことができる。例えば、ＧＰＵドライバ５０は、ＧＰＵメモリ３８のサイズに基づいてビンサイズを決定することができる。さらに、ＧＰＵドライバ５０は、画像を適当な数のビンに分割するために（ビンの位置に対する）予め決定されたビン配置を使用することができる。
【００８０】
［００８７］コマンドストリームは、ＧＰＵ３６のコマンドプロセッサ６０によって受信することができる。ＧＰＵ３６は、（図１に関して上述されるように）ビニングパスを実行し、画像のプリミティブに関する１つ以上のビジビリティストリームを生成することができる。すなわち、例えば、ビジビリティユニット７２は、画像のいずれのプリミティブが最初のビニング構成において可視であるかを示す１つ以上のビジビリティストリームを生成することができる。
【００８１】
［００８８］さらに、本開示の態様により、ビジビリティユニット７２は、ビジビリティストリームに関するヒューリスティックデータ及び／又はビジビリティスコアを生成することができる。例えば、上述されるように、ビジビリティユニット７２は、各ビン内のプリミティブの数、各ビン内の可視プリミティブの数、各ビン内の不可視プリミティブの数、プリミティブのサイズ、等を決定することができ、及び、ビジビリティユニット７２は、ビジビリティ情報に基づいてビジビリティスコアをビンに割り当てることができる。
【００８２】
［００８９］幾つかの例においては、ビジビリティユニット７２は、ヒューリスティックデータ及び／又はスコアをビジビリティストリームの最後に添付することができる。その他の例においては、ビジビリティユニット７２は、ヒューリスティックデータ及び／又はスコアをビジビリティストリームから別々に提供することができる。いずれの場合も、ビジビリティユニット７２は、ＣＰＵ３２におけるコマンドストリーム再構成ユニット７６にビジビリティ情報（例えば、ビジビリティストリーム、ヒューリスティックデータ及び／又はスコア）を送信することができる。
【００８３】
［００９０］本開示の態様により、コマンドストリーム再構成ユニット７６は、ビジビリティストリーム、及びビジビリティストリームを記述する追加データ（例えば、ヒューリスティックデータ及び／又はビジビリティスコアであり、復号されたビジビリティ情報と呼ぶことができる）を受信することができる。コマンドストリーム再構成ユニット７６は、ビジビリティ情報に基づいてコマンドストリームを再構成するために受信されたデータを使用することができる。すなわち、コマンドストリーム再構成ユニット７６は、ビジビリティ情報に基づいて画像をレンダリングするためのコマンドストリームを決定する。
【００８４】
［００９１］幾つかの例においては、コマンドストリーム再構成ユニット７６は、タイルに基づくレンダリングパスから１つ以上のビンを取り除くことができる。すなわち、コマンドストリーム再構成ユニット７６は、最初のビニング構成からの１つ以上のビンを、タイルに基づいてレンダリングされるのではなく、直接レンダリングされるように指定することができる。他の例においては、コマンドストリーム再構成ユニット７６は、レンダリングのための１つ以上のビンへのプリミティブの修正された配分を決定することができる。すなわち、コマンドストリーム再構成ユニット７６は、ビジビリティ情報に基づいてタイルに基づくレンダリングパスに関する新しい修正されたビニング構成を動的に生成することができる。
【００８５】
［００９２］幾つかの例においては、コマンドストリーム再構成ユニット７６は、新しいビニング配置を生成するために生成されたビジビリティストリームのうちの１つ以上をマージすることができる。すなわち、コマンドストリーム再構成ユニット７６は、代替のプリミティブの組を包含するために１つ以上のビンの境界を変更することによってビニング構成を変更することができる。該例においては、ビンはもはや均等には配分することができず、むしろ、ビンは、画像の複雑さに基づいて配置することができる。例えば、ビンは、オーバードローを有する画像の相対的に複雑なエリアを包含するために使用することができ、他方、画像のその他の部分は、直接レンダリングすることができる。
【００８６】
［００９３］幾つかの例により、コマンドストリーム再構成ユニット７６は、予め決定された複雑さに関するメトリックが達成されるまでビジビリティストリームをマージするためにヒューリスティックデータを使用することができる。例えば、コマンドストリーム再構成ユニット７６は、制限領域成長アルゴリズム（ｒｅｓｔｒｉｃｔｅｄ  ｒｅｇｉｏｎ  ｇｒｏｗｉｎｇ  ａｌｇｏｒｉｔｈｍ）に基づいて（ビジビリティストリームを用いて）ビンの最初の構成の一部分をマージすることができる。このようにして、コマンドストリーム再構成ユニット７６は、（タイルに基づくレンダリングから最も利益を得ることができる）画像の最も複雑なエリアをグループとしてまとめることができる。さらに、コマンドストリーム再構成ユニット７６は、画像内の対象領域に従って直接的レンダリング及びタイルに基づくレンダリングをミックス及びマッチングすることができる。該アプローチ法は、ＧＰＵ３６が各パスに関してバランスのとれたレンダリングロードを達成させ、同時に空のバッチを排除するのを可能にする。
【００８７】
［００９４］上記の幾つかの技法は、コンピューティングデバイス３０の特定のコンポーネントによって実行されるとして説明されている。しかしながら、該例は、説明することのみを目的として提供されることが理解されるべきである。従って、コンピューティングシステム３０の１つのコンポーネントに関する技法は、１つ以上のその他のコンポーネントによって実行することができる。例えば、ビジビリティユニット７２は、ビジビリティストリームからヒューリスティックデータ及びビジビリティスコアを生成するものとして説明されるが、該機能は、幾つかの例においては、ＣＰＵ３２によって、例えば、コマンドストリーム再構成ユニット７６又はＧＰＵドライバ５０によって、実行することができる。
【００８８】
［００９５］他の例においては、別個のユニットに関して説明される一方で、コマンドストリーム再構成ユニット７６は、ＣＰＵ３２及び／又はＧＰＵ３６のその他のコンポーネントと高度に一体化することができることが理解されるべきである。例えば、コマンドストリーム再構成ユニット７６は、ＧＰＵドライバ５０と一体化することができ、従って、ＣＰＵ３２は、（ＧＰＵドライバ５０を介して）ビジビリティ情報に基づいてコマンドストリームを再構成することを担当する。この例においては、ＣＰＵ３２は、最初のコマンドストリーム及び再構成されたコマンドストリームを生成するのを担当することができる。再構成されたコマンドストリームは、最初のコマンドストリームに関連するタイルに基づくレンダリングパスから１つ以上のビンを取り除くことができ、又は、直接的レンダリングのための新しい、異なるビン及び／又は指定されたエリアを含む新しいビニング配置を含めることができる。
【００８９】
［００９６］その他の例においては、コマンドストリーム再構成ユニット７６は、ＧＰＵ３６と一体化することができ、従って、ＧＰＵは、ビジビリティ情報に基づいてコマンドストリームを再構成することを担当する。該例においては、ビジビリティ情報は、すべてＧＰＵ３６によって生成し及び利用することができる。すなわち、（ＧＰＵドライバ５０を介しての）ＣＰＵ３２は、最初のコマンドストリームを生成することを担当することができる一方で、ＧＰＵ３６は、最初のコマンドストリームを再構成することを担当することができる。上記のように、再構成されたコマンドストリームは、最初のコマンドストリームに関連するタイルに基づくレンダリングパスから１つ以上のビンを取り除くことができ、又は、直接的レンダリングのための新しい、異なるビン及び／又は指定されたエリアを含む新しいビニング配置を含めることができる。
【００９０】
［００９７］図３は、レンダリングのためのオブジェクト９４を有する画像９０を例示した概略図である（図３の例ではツリーとして示される）。幾つかの例においては、画像９０は、上において図１及び２に関して示されて説明されるように、コンピューティングデバイス３０によってレンダリングすることができる。
【００９１】
［００９８］例えば、ＧＰＵドライバ５０は、ＧＰＵ３６によるレンダリングのための画像９０を定義するコマンドストリームを生成することができる。コマンドストリームは、オブジェクト９４のプリミティブをレンダリングするための命令、及び、ビン０乃至ビン３が入っている最初のビニング構成を含むことができる。幾つかの例においては、上記のように、ＧＰＵドライバ５０は、ＧＰＵメモリ３８のサイズに基づいてビン０乃至３のサイズを決定することができる。例えば、ＧＰＵドライバ５０は、各々のビンに関連するデータをＧＰＵメモリ３８に格納することができるような形でビン０乃至３のサイズを設定することができる。さらに、ＧＰＵドライバ５０は、画像９０をビン０乃至３に分割するために予め決定されたビン配置を使用することができる。すなわち、図３の例においては、ＧＰＵドライバ５０は、画像９０の左から右に及び上から下にビンを配置することができる。従って、ＧＰＵ３６は、画像を左から右に及び上から下にレンダリングすることができ、最初にビン０をレンダリングし、ビン１、ビン２、及びビン３が後続する。ＧＰＵドライバ５０は、最初のビニング構成を決定するように予め構成することができる。
【００９２】
［００９９］上記のように、直接的レンダリングとタイルに基づくレンダリングとの間には１つのトレードオフが存在する。ビジビリティ情報を用いたタイルに基づくレンダリングは、幾つかのオクルードされているプリミティブをスキップしてシェーダプロセッサ６４の負担を軽くするのを可能にすることができる。しかしながら、データのビン全体をローカルのＧＰＵメモリ３８にローディングすること（ロード）、及び、完成されたタイルをローカルのＧＰＵメモリ３８から記憶装置４８に転送すること（リゾルブ）に関連するコストが存在する。対照的に、直接的レンダリングは、すべてのプリミティブをシェーディングして直接記憶装置４８に書き込むことによってこれらのロードコスト及びリゾルブコストを排除する。しかしながら、幾つかのプリミティブは、記憶装置４８に書き込まれ、その後に１つ以上のその他のプリミティブによって上書きされ、不必要なシェーディングをシェーダプロセッサ６４に行わせる場合がある。
【００９３】
［０１００］従って、ビジビリティ情報を決定してタイルに基づくレンダリングを行うプロセスは、典型的には、画像の少なくとも一部分が相対的に大量のオーバードローを有する状況において最も有益である。すなわち、不可視のプリミティブをスキップしてシェーディング負荷を軽減する能力は、相対的に大量のオーバードローを呈する画像エリアにおいてタイルに基づくレンダリングのロード段階及びリゾルブ段階に関連するレーテンシーよりも重要である。逆に、小量のオーバードローが存在する例においては、記憶装置４８に直接データを格納する能力（直接的レンダリング）は、タイルに基づくレンダリングのロード段階及びリゾルブ段階に関連するレーテンシーよりも重要である。
【００９４】
［０１０１］図３において示されるように、オブジェクト９４のほとんどは、画像９０の左側に向かって配置される。さらに、オブジェクト９４のうちの幾つかの部分のみがオーバードローの対象となる。例えば、ビン０内のオブジェクト９４の最上部分（ツリーの最上部分）のみがオーバードローの対象となる。画像９０の残りの部分は、有意な量のオーバードローの対象にはならない。
【００９５】
［０１０２］（ビジビリティストリームを用いて）ビン０乃至３をレンダリングするためのタイルに基づくレンダリングを実装することによって、ＧＰＵ３６は、直接的レンダリングに関して要求されることになるよりも少ないプリミティブをレンダリングすることができる。すなわち、オーバードローを有するビン０のエリアでは、ＧＰＵ３６は、オブジェクト９４のオクルードされている部分に関連するプリミティブをスキップするためにビジビリティストリームを使用することができる。しかしながら、ビン１乃至３に関連するオブジェクト９４の部分は、ほとんど又はまったくオーバードローを有さない。
【００９６】
［０１０３］概して、ＧＰＵドライバ５０は、ＧＰＵ３６によって生成されたビジビリティストリームを変更することができず、最初のビニング構成に従って画像９０をレンダリングするためのコマンドストリームを生成することにロックされる。すなわち、ビン１乃至３はほとんど又はまったくオーバードローを有さないにもかかわらず、ＧＰＵドライバ５０は、動作中にタイルに基づくレンダリングから直接的レンダリングに切り換わることができない。さらに、ＧＰＵドライバ５０は、ビンの配置を変えることはできない。
【００９７】
［０１０４］本開示の技法は、概して、レンダリングを最適化するためにビジビリティ情報を利用することに関するものである。例えば、以下において図４及び５に関して説明されるように、画像９０をレンダリングする方法は、ビジビリティ情報に基づいて動的に決定することができる。
【００９８】
［０１０５］図４は、図３の画像を例示する他のブロック図である。図４の例は、概して、画像９０をレンダリングするための修正されたビニング構成を例示する。例えば、図４において示される修正されたビニング構成は、図３において示される最初のビニング構成から直接１つ以上のビンをレンダリングするかどうかを示す。
【００９９】
［０１０６］本開示の態様により、ＧＰＵ３６は、最初のビニングパスを行うときにビジビリティストリームに加えてヒューリスティックデータを生成することができる。ヒューリスティックデータは、例えば、各ビン内のプリミティブの数、各ビン内の可視プリミティブの数、各ビン内の不可視プリミティブの数、プリミティブのサイズ、等を含むことができる。幾つかの例においては、ＧＰＵ３６は、ヒューリスティックデータ及び／又はビジビリティストリームに基づいてビジビリティスコアを生成することもできる。ビジビリティスコアは、ビンの複雑さ、ビンの相対的なオーバードロー量、等を示すことができる。
【０１００】
［０１０７］ＧＰＵ３６は、ビジビリティ情報（例えば、ビジビリティストリーム、ヒューリスティックデータ、及び／又はビジビリティスコア）をＧＰＵドライバ５０に送信することができる。本開示の態様により、ＧＰＵドライバ５０は、ビジビリティ情報に基づいてビニング構成を修正することができる。例えば、最初のビニング構成にロックされるのではなく（図３）、ＧＰＵドライバ５０は、レンダリングを最適化するために修正されたビニング構成を動的に決定することができる。
【０１０１】
［０１０８］図４の例においては、修正されたビニング構成は、図３において示される最初のビニング構成から直接ビンをレンダリングすることを含む。例えば、ＧＰＵドライバ５０は、ビジビリティ情報に基づいてオリジナルのビン０乃至３の特徴を決定することができる（図３）。すなわち、ＧＰＵドライバ５０は、オリジナルのビニング構成のビン１、ビン２、及びビン３は、レンダリングされるべきプリミティブをほとんど有さず、大量のオーバードローは含まないと決定することができる。
【０１０２】
［０１０９］ＧＰＵドライバ５０は、直接的レンダリングを用いてオリジナルのビニング構成のビン１、ビン２、及びビン３をレンダリングするためにビニング構成を修正することができる。例えば、ＧＰＵドライバ５０は、タイルに基づくレンダリングを用いてビン０（オーバードローを有するオブジェクト９４を含む）をレンダリングし及び直接的レンダリングを用いてビン１乃至３（プリミティブ及びオーバードローをほとんど有さない）をレンダリングするための命令を生成することができる。従って、ＧＰＵドライバ５０は、タイルに基づくレンダリングパスからビン１乃至３を取り除き、その代わりに、ＧＰＵ３６が直接的レンダリングを用いて該ビンをレンダリングするための命令を出す。
【０１０３】
［０１１０］このようにして、ＧＰＵドライバ５０は、画像９０のレンダリングパスを最適化する。例えば、オクルードされたプリミティブをスキップする利益がロード段階及びリゾルブ段階に関連するコストよりも重要である画像９０の部分をレンダリングするためにタイルに基づくレンダリングが使用される。さらに、ロード段階及びリゾルブ段階が不必要なレーテンシーを招く画像９０の部分をレンダリングするために直接的レンダリングが使用される。
【０１０４】
［０１１１］図５は、図３の画像を例示した他のブロック図である。図５の例は、概して、画像９０をレンダリングするための他の修正されたビニング構成を例示する。例えば、図５において示される修正されたビニング構成は、新しいビン０へのプリミティブ９４の修正された配分を含む。
【０１０５】
［０１１２］図４に関して上記されるように、本開示の態様により、ＧＰＵドライバ５０は、受信されたビジビリティ情報に基づいてビニング構成を修正することができる。例えば、最初のビニング構成にロックするのではなく（図３）、ＧＰＵドライバ５０は、レンダリングを最適化するために修正されたビニング構成を動的に決定することができる。
【０１０６】
［０１１３］ＧＰＵドライバ５０は、最初に、ビジビリティ情報に基づいてオリジナルのビン０乃至３の特徴を決定することができる（図３）。すなわち、ＧＰＵドライバ５０は、オリジナルのビニング構成のビン１、ビン２、及びビン３は、レンダリングされるべきプリミティブをほとんど有さず、大量のオーバードローは含まないと決定することができる。ＧＰＵドライバ５０は、ビンの代替の配置を有する新しいビニング構成を生成することができる。
【０１０７】
［０１１４］図５の例においては、ＧＰＵドライバ５０は、オブジェクト９４を含む新しいビン０を決定することができる。例えば、ＧＰＵドライバ５０は、新しいビン０に関するビジビリティストリームを生成するためにオリジナルのビン０乃至３に関するビジビリティストリームの部分をマージすることができる（図３）。このようにして、ＧＰＵドライバ５０は、オブジェクト９４を包含するためにオリジナルのビン０乃至３の境界を変更することができる。
【０１０８】
［０１１５］従って、ＧＰＵドライバ５０は、画像９０の最も複雑なエリアを包含するために新しいビン０を配置することができ、その一方で、画像９０のその他の部分を直接レンダリングするように指定することができる（“直接的”）。幾つかの例においては、ＧＰＵドライバ５０は、予め決定された複雑さに関するメトリックが達成されるまでビジビリティストリームをマージするためにビジビリティ情報を使用することができる。例えば、ＧＰＵドライバ５０は、制限領域成長アルゴリズムに基づいてビンの最初の構成の一部分をマージすることができる。複雑さに関するメトリックを達成させることができない場合は、ＧＰＵドライバ５０は、ビンの残りの部分を直接レンダリングするように指定することができる。
【０１０９】
［０１１６］図５の例においては、ＧＰＵドライバ５０は、オブジェクト９４の周囲における領域を成長させることを開始する領域成長アルゴリズムを実装することができる。ＧＰＵドライバ５０は、予め決定されたビンのサイズが達成されるまで領域を成長させることを続けることができ、それによって新しいビン０が生成される。次に、ＧＰＵドライバ５０は、他の領域成長アルゴリズムを開始することができる。画像９０の残りの部分は複雑でない、例えば、相対的にプリミティブをほとんど有さず、相対的にオーバードローがほとんどないため、ＧＰＵドライバ５０は、画像９０の残りの部分は直接レンダリングされるように指定することができる（ビニング及び／又はビジビリティ情報を有さない）。
【０１１０】
［０１１７］このようにして、ＧＰＵドライバ５０は、画像９０のレンダリングパスを最適化する。例えば、オクルードされたプリミティブをスキップする利益がロード段階及びリゾルブ段階に関連するコストよりも重要である画像９０の部分をレンダリングするためにタイルに基づくレンダリングが使用される。さらに、ロード段階及びリゾルブ段階が不必要なレーテンシーを招く画像９０の部分をレンダリングするために直接的レンダリングが使用される。
【０１１１】
［０１１８］幾つかの例により、ＧＰＵドライバ５０は、２つ以上の画像（フレーム）に関して特定のビニング配置を利用することができる。例えば、図５に関して、画像９０に関するレンダリングパスを最適化した時点で、ＧＰＵドライバ５０は、画像９０に関連する最適化されたビニング構成を画像のシーケンス内の１つ以上のその他の画像に適用することができる。すなわち、画像の一部分は画像のシーケンス内では大きく変化しないと認識して（例えば、バックグラウンドオブジェクト）、ＧＰＵドライバ５０は、画像９０に関する最適化されたビニング構成を１つ以上の後続する画像に関する最初のビニング構成として利用することができる。このようにして、ＧＰＵドライバ５０は、画像のシーケンス内の画像の部分組に関してしか図４及び５に関して説明される最適化を実行することができない。
【０１１２】
［０１１９］図３乃至５において示される例は、コンピューティングデバイス３０に関して説明される一方で、技法は、様々なその他のコンポーネントを有する様々なその他のコンピューティングデバイスによって実行できることが理解されるべきである。
【０１１３】
［０１２０］図６は、ビニングプロセス例を示した流れ図である。図６において示されるプロセスは、ＣＰＵ３２及び／又はＧＰＵ３６によって実行されるとして説明されるが（図１及び２）、技法は、様々なその他の処理ユニットによって実装することができる。
【０１１４】
［０１２１］図６の例においては、ＧＰＵドライバ５０は、ＣＰＵ３２によって実行され、最初に、グラフィックスデータをレンダリングするために最初のビニング構成を有する最初のコマンドストリームを生成する（１２０）。例えば、ＧＰＵドライバ５０は、ＧＰＵ３６の構成、例えば、ＧＰＵメモリ３８のサイズ、に基づいてビンサイズを決定するように構成することができる。ＧＰＵドライバ５０は、決定されたビンサイズのビンを用いて予め決定されたビン配置を適用するように構成することもできる。
【０１１５】
［０１２２］ＧＰＵ３６は、最初のビニング構成に関するビジビリティストリームを決定することができる（１２２）。例えば、ＧＰＵ３６は、レンダリング中の画像のプリミティブを生成するためにコマンドストリームを処理することができる。ＧＰＵ３６は、最初のビニング構成のビンにプリミティブを配分することもできる。ＧＰＵ３６は、各ビンにおいていずれのプリミティブが可視であるかを示すためのビジビリティストリームを生成することができる。
【０１１６】
［０１２３］本開示の態様により、ＧＰＵ３６は、最初のビニング構成のビンに関するヒューリスティックデータを生成することもできる（１２４）。ヒューリスティックデータは、例えば、各ビン内のプリミティブの数、各ビン内の可視プリミティブの数、各ビン内の不可視プリミティブの数、プリミティブのサイズ、等を含むことができる。幾つかの例においては、ＧＰＵ３６は、ビジビリティスコアをビンに割り当てるためにビジビリティストリーム及び／又はヒューリスティックデータを使用することができる。ビジビリティスコアは、ビンの複雑さ、ビンのオーバードローの量、等を示すことができる。
【０１１７】
［０１２４］ＧＰＵドライバ５０は、ビジビリティストリーム及びヒューリスティックデータを受信することができ及びビジビリティ情報を解析することができる（１２６）。例えば、ＧＰＵドライバ５０は、画像の複雑さを決定し、オーバードローを有する画像エリアを識別し、等であることができる。ＧＰＵドライバ５０は、ビジビリティストリーム及び／又はヒューリスティックデータに基づいてデータをレンダリングするために、最初のコマンドストリームと異なる第２のコマンドストリームを生成するためにビジビリティ情報を使用することもできる（１２８）。例えば、ＧＰＵドライバ５０は、最初のビニング構成からのビンのうちの１つ以上を直接レンダリングされるように指定することができる。他の例においては、ＧＰＵドライバ５０は、１つ以上の新しいビンを含む、最初のビニング構成と異なる新しいビニング構成を生成することができる。
【０１１８】
［０１２５］ＧＰＵ３６は、第２のコマンドストリームを受信し、第２のコマンドストリームに基づいて画像をレンダリングすることができる（１３０）。すなわち、ＧＰＵ３６は、第２のコマンドストリームを用いて画像のピクセルに関するピクセル値を決定することができ及び提示のために画像を出力することができる。
【０１１９】
［０１２６］図６において示されるステップは、単なる一例として提供されることが理解されるべきである。すなわち、図６において示されるステップは、必ずしも示される順序で実行される必要はなく、それよりも少ない、追加の、又は代替のステップを実行することができる。さらに、幾つかの機能は、ＧＰＵドライバ５０及びＧＰＵ３６に関するものであるが、該機能は、異なるコンポーネントによって実行することができる。例えば、代替態様により、上述されるようにＧＰＵ３６ではなく、ＧＰＵドライバ５０が、生のビジビリティストリームからヒューリスティックデータを生成することを担当することができる。
【０１２０】
［０１２７］さらに、図６は、最初のビニング構成及び修正されたビニング構成に関して説明される。本開示の技法は、このようには限定されない。例えば、ＧＰＵ３６は、最初のビニング構成を考慮せずに、画像全体に関するビジビリティ情報を生成することができる。この例では、ＧＰＵドライバ５０は、画像全体に関するビジビリティ情報に基づいてデータをレンダリングするために最適なコマンドストリームを生成することができる。
【０１２１】
［０１２８］図７は、本開示の態様による、グラフィックスをレンダリングするためのプロセス例を示した流れ図である。図７において示されるプロセスは、ＧＰＵ３６によって実行されるとして説明されるが（図１及び２）、技法は、様々なその他の処理ユニットによって実装することができる。
【０１２２】
［０１２９］図７の例においては、ＧＰＵ、例えば、ＧＰＵ３６、は、グラフィックスデータの画像をレンダリングするための最初のビニング構成を有するコマンドストリームを受信する（１５０）。コマンドストリームは、画像を記述する命令を含むことができる。ＧＰＵ３６は、最初のビニング構成に関する１つ以上のビジビリティストリームを生成することができる（１５２）。例えば、ＧＰＵ３６は、コマンドストリームを用いて画像に関するプリミティブを生成することができる。ＧＰＵ３６は、画像内の可視のプリミティブを識別し、一連のフラグを用いてコマンドストリーム内においてそれらの可視のプリミティブを示すことができる。ビジビリティストリームは、各々のビンごとに、又は画像全体に関して生成することができる。
【０１２３】
［０１３０］ＧＰＵ３６は、生成されたビジビリティストリームを復号することもできる（１５４）。例えば、ＧＰＵ３６は、ビンを記述するデータを生成することができる。すなわち、ＧＰＵ３６は、各ビン内のプリミティブの数、各ビン内の可視プリミティブの数、各ビン内の不可視プリミティブの数、プリミティブのサイズ、等を示すことができる。幾つかの例においては、ＧＰＵ３６は、スコアをビンに割り当てることができる。スコアは、各ビンの全体的な複雑さ、各ビンに関するオーバードローの量、等を示すことができる。ＧＰＵ３６は、この復号されたビジビリティデータをビジビリティストリームとともに提供することができ（例えば、ビジビリティストリームの最後に添付される）又は復号されたビジビリティデータを別々に提供することができる。
【０１２４】
［０１３１］ＧＰＵ３６は、最初のビニング構成を用いて画像をレンダリングすべきかどうか、又は、レンダリング中に修正されたビニング構成を使用すべきかどうかを決定することができる（１５６）。例えば、ＧＰＵ３６は、最初のビニング構成と異なるビニング構成を有する画像をレンダリングするためのコマンドストリームを受信することができる。異なるビニング構成は、ビジビリティストリーム及び／又はビン（復号されたビジビリティストリーム）を記述するデータに基づくことができる。その決定は、画像をレンダリングするためのコマンドストリームを出すドライバ、例えば、ＧＰＵドライバ５０、からの命令に基づいて行うことができる。
【０１２５】
［０１３２］修正されたビニング構成が使用される場合は（ステップ１５６の“はい”分岐）、ＧＰＵ３６は、ビジビリティストリーム及び復号されたビジビリティストリームデータに基づいて修正されたビニング構成を受信することができる（１５８）。ＧＰＵ３６は、修正されたビニング構成を用いて画像をレンダリングすることができる（１６０）。修正されたビニング構成が使用されない場合は（ステップ１５６の“いいえ”分岐）、ＧＰＵは、最初のビニング構成を用いて画像をレンダリングすることができる（１６０）。
【０１２６】
［０１３３］図７において示されるステップは、単なる一例として提供されることが理解されるべきである。すなわち、図７において示されるステップは、必ずしも示される順序で実行される必要はなく、それよりも少ない、追加の、又は代替のステップを実行することができる。
【０１２７】
［０１３４］図８は、本開示の態様による、グラフィックスをレンダリングするための他のプロセス例を示した流れ図である。図８において示されるプロセスは、（ＧＰＵドライバ５０を介して）ＣＰＵ３２によって実行されるとして説明されるが（図１及び２）、技法は、様々なその他の処理ユニットによって実装することができる。
【０１２８】
［０１３５］図８の例においては、ＧＰＵドライバ（例えば、ＧＰＵドライバ５０）は、ＧＰＵ（例えば、ＧＰＵ３６）によってレンダリング中の画像のビンに関連するビジビリティ情報を受信することができる（１８０）。ビジビリティ情報は、例えば、１つ以上のビジビリティストリーム、及び復号されたビジビリティデータを含むことができる。例えば、ＧＰＵドライバ５０は、各ビン内のプリミティブの数を示すデータ、各ビン内の可視プリミティブの数、各ビン内の不可視プリミティブの数を示すデータ、プリミティブのサイズを示すデータ、等を受信することができる。幾つかの例においては、ＧＰＵドライバ５０は、各ビンに関するスコアを受信することもできる。スコアは、各ビンの全体的な複雑さ、各ビンに関するオーバードローの量、等を示すことができる。
【０１２９】
［０１３６］ＧＰＵドライバ５０は、ビジビリティ情報を解析することができる（１８２）。幾つかの例においては、ＧＰＵドライバ５０は、予め決定された複雑さに関するメトリックが達成されるまでビジビリティストリームをマージすることができる。例えば、ＧＰＵドライバ５０は、制限領域成長アルゴリズムに基づいてビジビリティストリームの一部分をマージすることができる。その他の例においては、ＧＰＵドライバ５０は、受信されたビジビリティスコアをスレショルドと比較することができる。
【０１３０】
［０１３７］ＧＰＵドライバ５０は、解析に基づいてビンへのプリミティブの配分を決定することもできる（１８４）。例えば、ＧＰＵドライバ５０は、タイルに基づくレンダリングに関して相対的に大量のオーバードローを有する画像のエリアを指定することができる。この例においては、ＧＰＵドライバ５０は、指定されたエリアを包含する１つ以上のビンを生成することができる。さらに、ＧＰＵドライバ５０は、ビンに関する１つ以上のビジビリティストリームを生成することができる。これらのビンは、指定されたエリアに関するタイルに基づくレンダリングを行うためにＧＰＵ３６によって使用することができる。ＧＰＵドライバ５０は、直接的レンダリングに関して相対的に小量のオーバードローを有するエリアを指定することもできる。これらのエリアでは、ＧＰＵドライバ５０は、ビジビリティストリームを生成することができず、従って、直接的レンダリングのための情報は要求されない。
【０１３１】
［０１３８］ＧＰＵドライバ５０は、幾つかの例においては、（ステップ１８０からの）受信されたビジビリティ情報が生成される基礎になる最初のビニング構成を生成することができる。この例では、ＧＰＵドライバ５０は、最初のビニング構成を実装すべきかどうか、又は解析に基づいてビニング構成を修正すべきかどうかを決定することができる。
【０１３２】
［０１３９］例えば、ＧＰＵドライバ５０は、上記の解析に基づいて直接的レンダリングに関する最初のビニング構成の１つ以上のビンを指定することができる。すなわち、ＧＰＵドライバ５０は、複雑さメトリック又はビジビリティスコアに基づいてビンが直接的レンダリングされるべきか又はタイルに基づくレンダリングがされるべきかを指定することができる。例示することを目的とする一例において、ビジビリティスコアが予め決定されたスレショルドを上回る（例えば、高い複雑さ及び／又は大量のオーバードローを示す）場合は、ＧＰＵドライバ５０は、ビンがタイルに基づいてレンダリングされるように指定することができる。対照的に、ビジビリティスコアがスレショルドを下回る（例えば、プリミティブ及び／又はオーバードローがほとんどない）場合は、ＧＰＵドライバ５０は、ビンが直接的レンダリングされるように指定することができる。
【０１３３】
［０１４０］他の例においては、ＧＰＵドライバ５０は、最初のビニング構成を廃棄して新しいビニング構成を選択することができる。この例では、ＧＰＵドライバ５０は、解析に基づいて１つ以上の新しいビンを生成することができる。さらに、ＧＰＵドライバ５０は、上記のように、ビンに関する１つ以上のビジビリティストリームを生成することができる。
【０１３４】
［０１４１］ビンへのプリミティブの配分を決定後は、ＧＰＵドライバ５０は、決定されたビニング構成に従って画像をレンダリングするための命令を有するコマンドストリームを生成することができる（１８６）。コマンドストリームは、画像をレンダリングするためにＧＰＵ３６によって実行することができる。
【０１３５】
［０１４２］図８において示されるステップは、単なる一例として提供されることが理解されるべきである。すなわち、図８において示されるステップは、必ずしも示される順序で実行される必要はなく、それよりも少ない、追加の、又は代替のステップを実行することができる。
【０１３６】
［０１４３］例に依存して、ここにおいて説明されるいずれかの方法の幾つかの行為又はイベントは、異なったシーケンスで行うことができ、追加すること、統合すること、又はすべて省略することができることも理解されるべきである（例えば、方法の実践のためにすべての説明される行為又はイベントが必要であるわけではない）。さらに、幾つかの例では、行為又はイベントは、順次ではなく、マルチスレッド処理、割り込み処理、又は複数のプロセッサを通じて、同時並行して行うことができる。
【０１３７】
［０１４４］１つ以上の例において、説明される機能は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせにおいて実装することができる。ソフトウェアにおいて実装される場合は、それらの機能は、非一時的なコンピュータによって読み取り可能な媒体を備える製造品において１つ以上の命令又はコードとして格納することができる。コンピュータによって読み取り可能な媒体は、コンピュータデータ記憶媒体を含むことができる。データ記憶媒体は、本開示において説明される技法の実装のために命令、コード及び／又はデータ構造を取り出すために１つ以上のコンピュータ又は１つ以上のプロセッサによってアクセスすることができるあらゆる利用可能な媒体であることができる。一例により、及び制限することなしに、該コンピュータによって読み取り可能な媒体は、希望されるプログラムコードを命令又はデータ構造の形態で搬送又は格納するために使用することができ及びコンピュータによってアクセス可能であるＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又はその他の光学ディスク記憶装置、磁気ディスク記憶装置、又はその他の磁気記憶デバイス、フラッシュメモリ、又はその他のいずれかの媒体、を備えることができる。ここにおいて用いられるときのディスク（ｄｉｓｋ及びｄｉｓｃ）は、コンパクトディスク（ＣＤ）（ｄｉｓｃ）と、レーザーディスク（登録商標）（ｄｉｓｃ）と、光ディスク（ｄｉｓｃ）と、デジタルバーサタイルディスク（ＤＶＤ）（ｄｉｓｃ）と、フロッピー（登録商標）ディスク（ｄｉｓｋ）と、ｂｌｕ−ｒａｙディスク（ｄｉｓｃ）と、を含み、ここで、ｄｉｓｋは、通常は磁気的にデータを複製し、ｄｉｓｃは、レーザを用いて光学的にデータを複製する。上記の組み合わせも、コンピュータによって読み取り可能な媒体の適用範囲内に含められるべきである。
【０１３８】
［０１４５］コードは、１つ以上のプロセッサ、例えば、１つ以上のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又はその他の同等の集積又はディスクリート論理回路によって実行することができる。さらに、幾つかの態様では、ここにおいて説明される機能は、専用のハードウェア及び／又はソフトウェアモジュール内において提供することができる。さらに、技法は、１つ以上の回路又は論理素子内に完全に実装することが可能である。
【０１３９】
［０１４６］本開示の技法は、無線ハンドセット、集積回路（ＩＣ）、又は一組のＩＣ（例えば、チップセット）を含む非常に様々なデバイス又は装置内に実装することができる。本開示では、開示される技法を実施するように構成されたデバイスの機能上の態様を強調するために様々なコンポーネント、モジュール、又はユニットが説明されるが、異なるハードウェアユニットによる実現は必ずしも要求しない。むしろ、上述されるように、様々なユニットは、適切なソフトウェア及び／又はファームウェアと関係させて、コーデックハードウェアユニット内において結合させること又は上述されるように１つ以上のプロセッサを含む相互運用的なハードウェアユニットの集合によって提供することができる。
【０１４０】
［０１４７］様々な例が説明されている。これらの及びその他の例は、以下の請求項の範囲内である。
以下に、出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
画像をレンダリングするための方法であって、
前記画像の可視のプリミティブを示すビジビリティ情報を生成することと、
ビニング構成を用いて前記画像をレンダリングすることと、を備え、前記ビニング構成は、前記ビジビリティ情報に基づく、方法。
［Ｃ２］
前記ビジビリティ情報は、１つ以上の予め決定されたビンへの前記可視のプリミティブの最初のタイルに基づく配分を示す最初のビニング構成と関連付けられ、
前記ビニング構成は、前記最初のビニング構成からの修正されたビニング構成を備え、
前記ビニング構成を用いて前記画像をレンダリングすることは、前記修正されたビニング構成を用いて前記画像をレンダリングすることを備えるＣ１に記載の方法。
［Ｃ３］
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記ビニング構成を用いて前記画像をレンダリングすることは、直接的レンダリング及び前記修正されたビニング構成の組み合わせを用いて前記画像をレンダリングすることを備えるＣ２に記載の方法。
［Ｃ４］
前記修正されたビニング構成は、前記最初のビニング構成からの１つ以上のビンを直接レンダリングすべきかどうかの指示を備えるＣ２に記載の方法。
［Ｃ５］
前記修正されたビニング構成は、１つ以上の新しいビンへの前記可視のプリミティブの修正された配分を有する前記１つ以上の新しいビンの指示を備えるＣ２に記載の方法。
［Ｃ６］
ビジビリティ情報を生成することは、前記可視のプリミティブを示すビジビリティストリームを生成することと、前記画像のプリミティブに関連するヒューリスティックデータを生成することと、を備えるＣ１に記載の方法。
［Ｃ７］
前記ヒューリスティックデータを生成することは、前記プリミティブに関連するオーバードローの量を示すデータを生成することを備えるＣ６に記載の方法。
［Ｃ８］
前記ヒューリスティックデータを生成することは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを生成することを備えるＣ６に記載の方法。
［Ｃ９］
前記ヒューリスティックデータを生成することは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを生成することを備えるＣ６に記載の方法。
［Ｃ１０］
前記ビジビリティ情報に基づいて前記ビニング構成を生成することをさらに備えるＣ１に記載の方法。
［Ｃ１１］
画像をレンダリングするための装置であって、
前記画像の可視のプリミティブを示すビジビリティ情報を生成し、及び
ビニング構成を用いて前記画像をレンダリングするように構成された１つ以上のプロセッサを備え、前記ビニング構成は、前記ビジビリティ情報に基づく、装置。
［Ｃ１２］
前記ビジビリティ情報は、１つ以上の予め決定されたビンへの前記可視のプリミティブの最初のタイルに基づく配分を示す最初のビニング構成と関連付けられ、
前記ビニング構成は、前記最初のビニング構成からの修正されたビニング構成を備え、
前記ビニング構成を用いて前記画像をレンダリングするために、前記１つ以上のプロセッサは、前記修正されたビニング構成を用いて前記画像をレンダリングするように構成されるＣ１１に記載の装置。
［Ｃ１３］
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記ビニング構成を用いて前記画像をレンダリングするために、前記１つ以上のプロセッサは、直接的レンダリング及び前記修正されたビニング構成の組み合わせを用いて前記画像をレンダリングするように構成されるＣ１２に記載の装置。
［Ｃ１４］
前記修正されたビニング構成は、前記最初のビニング構成からの１つ以上のビンを直接レンダリングすべきかどうかの指示を備えるＣ１２に記載の装置。
［Ｃ１５］
前記修正されたビニング構成は、１つ以上の新しいビンへの前記可視のプリミティブの修正された配分を有する前記１つ以上の新しいビンの指示を備えるＣ１２に記載の装置。
［Ｃ１６］
ビジビリティ情報を生成するために、前記１つ以上のプロセッサは、前記可視のプリミティブを示すビジビリティストリームを生成するように、及び前記画像のプリミティブに関連するヒューリスティックデータを生成するように構成されるＣ１１に記載の装置。
［Ｃ１７］
前記ヒューリスティックデータを生成するために、前記１つ以上のプロセッサは、前記プリミティブに関連するオーバードローの量を示すデータを生成するように構成されるＣ１６に記載の装置。
［Ｃ１８］
前記ヒューリスティックデータを生成するために、前記１つ以上のプロセッサは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを生成するように構成されるＣ１６に記載の装置。
［Ｃ１９］
前記ヒューリスティックデータを生成するために、前記１つ以上のプロセッサは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを生成するように構成されるＣ１６に記載の装置。
［Ｃ２０］
前記１つ以上のプロセッサは、前記ビジビリティ情報に基づいて前記ビニング構成を生成するようにさらに構成されるＣ１１に記載の装置。
［Ｃ２１］
画像をレンダリングするための装置であって、
前記画像の可視のプリミティブを示すビジビリティ情報を生成するための手段と、
ビニング構成を用いて前記画像をレンダリングするための手段と、を備え、前記ビニング構成は、前記ビジビリティ情報に基づく、装置。
［Ｃ２２］
前記ビジビリティ情報は、１つ以上の予め決定されたビンへの前記可視のプリミティブの最初のタイルに基づく配分を示す最初のビニング構成と関連付けられ、
前記ビニング構成は、前記最初のビニング構成からの修正されたビニング構成を備え、
前記ビニング構成を用いて前記画像をレンダリングするための前記手段は、前記修正されたビニング構成を用いて前記画像をレンダリングするための手段を備えるＣ２１に記載の装置。
［Ｃ２３］
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記ビニング構成を用いて前記画像をレンダリングするための前記手段は、直接的レンダリング及び前記修正されたビニング構成の組み合わせを用いて前記画像をレンダリングするための手段を備えるＣ２２に記載の装置。
［Ｃ２４］
ビジビリティ情報を生成するための前記手段は、前記可視のプリミティブを示すビジビリティストリームを生成するための手段と、前記画像のプリミティブに関連するヒューリスティックデータを生成するための手段と、を備えるＣ２１に記載の装置。
［Ｃ２５］
前記ビジビリティ情報に基づいて前記ビニング構成を生成するための手段をさらに備えるＣ２１に記載の装置。
［Ｃ２６］
非一時的なコンピュータによって読み取り可能な記憶媒体であって、実行されたときに、
前記画像の可視のプリミティブを示すビジビリティ情報を生成すること、及び
ビニング構成を用いて前記画像をレンダリングすることを１つ以上のプロセッサに行わせる命令が格納され、前記ビニング構成は、前記ビジビリティ情報に基づく、非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ２７］
前記ビジビリティ情報は、１つ以上の予め決定されたビンへの前記可視のプリミティブの最初のタイルに基づく配分を示す最初のビニング構成と関連付けられ、
前記ビニング構成は、前記最初のビニング構成からの修正されたビニング構成を備え、
前記ビニング構成を用いて前記画像をレンダリングするために、前記命令は、前記修正されたビニング構成を用いて前記画像をレンダリングすることを前記１つ以上のプロセッサに行わせるＣ２６に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ２８］
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備え、
前記ビニング構成を用いて前記画像をレンダリングするために、前記命令は、直接的レンダリング及び前記修正されたビニング構成の組み合わせを用いて前記画像をレンダリングすることを前記１つ以上のプロセッサに行わせるＣ２７に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ２９］
ビジビリティ情報を生成するために、前記命令は、前記可視のプリミティブを示すビジビリティストリームを生成すること、及び前記画像のプリミティブに関連するヒューリスティックデータを生成することを前記１つ以上のプロセッサに行わせるＣ２６に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ３０］
前記ビジビリティ情報に基づいて前記ビニング構成を生成することを前記１つ以上のプロセッサに行わせるさらなる命令を備えるＣ２６に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ３１］
画像をレンダリングするための方法であって、
前記画像の可視のプリミティブを示すビジビリティ情報を受信することと、
前記ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を構成するビニング構成を決定することと、を備える、方法。
［Ｃ３２］
前記ビジビリティ情報を受信することは、ビジビリティストリームを受信することと、前記複数のプリミティブに関連するヒューリスティックデータを受信することと、を備えるＣ３１に記載の方法。
［Ｃ３３］
前記ヒューリスティックデータは、前記複数のプリミティブに関連するオーバードローの量を示すデータを備えるＣ３２に記載の方法。
［Ｃ３４］
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを備えるＣ３２に記載の方法。
［Ｃ３５］
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを備えるＣ３２に記載の方法。
［Ｃ３６］
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記ビニング情報を決定することは、前記ビジビリティストリームのうちの少なくとも２つをマージすることを備えるＣ３１に記載の方法。
［Ｃ３７］
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいてタイルに基づくレンダリングに関する１つ以上の最初のビンへの前記複数のプリミティブの最初の配分を備える最初のビニング構成を決定することをさらに備えるＣ３１に記載の方法。
［Ｃ３８］
前記ビニング構成を決定することは、前記最初のビニング構成からの修正されたビニング構成を決定することを備え、
前記修正されたビニング構成を決定することは、タイルに基づくレンダリングに関する前記最初のビンのうちの１つ以上を直接レンダリングされるように指定することを備えるＣ３７に記載の方法。
［Ｃ３９］
前記ビニング情報を決定することは、前記最初のビニング構成からの修正されたビニング構成を決定することを備え、
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備えるＣ３７に記載の方法。
［Ｃ４０］
画像をレンダリングするための装置であって、
前記画像の可視のプリミティブを示すビジビリティ情報を受信し、及び
前記ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を備えるビニング構成を決定するように構成された１つ以上のプロセッサを備える、装置。
［Ｃ４１］
前記ビジビリティ情報を受信するために、前記１つ以上のプロセッサは、ビジビリティストリームを受信し及び前記複数のプリミティブに関連するヒューリスティックデータを受信するように構成されるＣ４０に記載の装置。
［Ｃ４２］
前記ヒューリスティックデータは、前記複数のプリミティブに関連するオーバードローの量を示すデータを備えるＣ４１に記載の装置。
［Ｃ４３］
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブの数を示すデータを備えるＣ４１に記載の装置。
［Ｃ４４］
前記ヒューリスティックデータは、前記画像の予め決定されたエリア内のプリミティブのサイズを示すデータを備えるＣ４１に記載の装置。
［Ｃ４５］
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記ビニング構成を決定するために、前記１つ以上のプロセッサは、前記ビジビリティストリームのうちの少なくとも２つをマージするように構成されるＣ４０に記載の装置。
［Ｃ４６］
前記１つ以上のプロセッサは、
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいてタイルに基づくレンダリングに関する１つ以上の最初のビンへの前記複数のプリミティブの最初の配分を備える最初のビニング構成を決定するようにさらに構成されるＣ４０に記載の装置。
［Ｃ４７］
前記ビニング構成を決定するために、前記１つ以上のプロセッサは、前記最初のビニング構成からの修正されたビニング構成を決定するように構成され、
前記修正されたビニング構成を決定することは、タイルに基づくレンダリングに関する前記最初のビンのうちの１つ以上を直接レンダリングされるように指定することを備えるＣ４７に記載の装置。
［Ｃ４８］
前記ビニング情報を決定するために、前記１つ以上のプロセッサは、前記最初のビニング構成からの修正されたビニング構成を決定するように構成され、
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備えるＣ４６に記載の装置。
［Ｃ４９］
画像をレンダリングするための装置であって、
前記画像の可視のプリミティブを示すビジビリティ情報を受信するための手段と、
前記ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を備えるビニング構成を決定するための手段と、を備える、装置。
［Ｃ５０］
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記ビニング構成を決定するための前記手段は、前記ビジビリティストリームのうちの少なくとも２つをマージするための手段を備えるＣ４９に記載の装置。
［Ｃ５１］
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいてタイルに基づくレンダリングに関する１つ以上の最初のビンへの前記複数のプリミティブの最初の配分を備える最初のビニング構成を決定するための手段をさらに備えるＣ４９に記載の装置。
［Ｃ５２］
前記ビニング構成を決定するための前記手段は、前記最初のビニング構成からの修正されたビニング構成を決定するための手段を備え、
前記修正されたビニング構成を決定するための前記手段は、タイルに基づくレンダリングに関する前記最初のビンのうちの１つ以上を直接レンダリングされるように指定するための手段を備えるＣ５１に記載の装置。
［Ｃ５３］
前記ビニング構成を決定するための前記手段は、前記最初のビニング構成からの修正されたビニング構成を決定するための手段を備え、
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備えるＣ５１に記載の装置。
［Ｃ５４］
非一時的なコンピュータによって読み取り可能な記憶媒体であって、実行されたときに、
前記画像の可視のプリミティブを示すビジビリティ情報を受信すること、及び
前記ビジビリティ情報に基づいて１つ以上のビンへの複数のプリミティブの配分を備えるビニング構成を決定することを１つ以上のプロセッサに行わせる命令が格納されている、非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ５５］
前記ビジビリティ情報は、複数のビジビリティストリームを備え、前記ビニング構成を決定するために、前記命令は、前記ビジビリティストリームのうちの少なくとも２つをマージすることを前記１つ以上のプロセッサに行わせるＣ５４に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ５６］
予め決定されたビン配置及び前記画像をレンダリングするＧＰＵに関連するメモリの量に基づいてタイルに基づくレンダリングに関する１つ以上の最初のビンへの前記複数のプリミティブの最初の配分を備える最初のビニング構成を決定することを前記１つ以上のプロセッサに行わせる命令をさらに備えるＣ５４に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ５７］
前記ビニング構成を決定するために、前記命令は、前記最初のビニング構成からの修正されたビニング構成を決定することを前記１つ以上のプロセッサに行わせ、
前記修正されたビニング構成を決定するために、前記命令は、タイルに基づくレンダリングに関する前記最初のビンのうちの１つ以上を直接レンダリングされるように指定することを前記１つ以上のプロセッサに行わせるＣ５６に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
［Ｃ５８］
前記ビニング情報を決定するために、前記命令は、前記最初のビニング構成からの修正されたビニング構成を決定することを前記１つ以上のプロセッサに行わせ、
前記修正されたビニング構成は、１つ以上の異なるビンへの前記可視のプリミティブの修正されたタイルに基づく配分を備えるＣ５６に記載の非一時的なコンピュータによって読み取り可能な記憶媒体。
【図１】
0005960368.tif 000002
【図２】
0005960368.tif 000003
【図３】
0005960368.tif 000004
【図４】
0005960368.tif 000005
【図５】
0005960368.tif 000006
【図６】
0005960368.tif 000007
【図７】
0005960368.tif 000008
【図８】
0005960368.tif 000009