(57)【要約】  本開示は、グラフィックス処理システムにおいて階層的Ｚカリングを実行するための技法を記載する。いくつかの例では、技法は、部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値がタイル位置に関するカリングＺ値よりも近いかどうかに基づいて、タイル位置に関する部分的にカバーされたソースタイルを完全にカバーされマージされたソースタイルに選択的にマージすることと、タイル位置に関するカリングＺ値を更新するために、完全にカバーされマージされたソースタイルに関連付けられた保守的な最も遠いＺ値を使用することとを伴い得る。さらなる例では、技法は、マージされたソースタイルに関する保守的な最も遠いＺ値とカバレージマスクとを記憶するために、基礎的なメモリに関連付けられないキャッシュユニットを使用し得る。キャッシュユニットの容量は、レンダリング対象内のタイル位置のすべてに関するマージされたソースタイルデータを記憶するために必要とされるキャッシュのサイズよりも小さいことがあり得る。
2016538627.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
グラフィックス処理ユニット（ＧＰＵ）で、ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージすること
を備え、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、方法。
【請求項２】
前記ソースタイルを選択的にマージすることが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にはカバーされないこと、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることと、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされること、または前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近くないことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージしないことと、
を備える、請求項１に記載の方法。
【請求項３】
前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることが、
前記ソースタイルに関する前記保守的な最も遠いＺ値および前記マージされたソースタイルに関する保守的な最も遠いＺ値に基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値を生成すること
を備える、請求項２に記載の方法。
【請求項４】
前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることが、
前記ソースタイルに関するカバレージマスクおよび前記マージされたソースタイルに関するカバレージマスクに基づいて、前記マージされたソースタイルの前記更新バージョンに関するカバレージマスクを生成すること
をさらに備える、請求項３に記載の方法。
【請求項５】
複数のマージされたソースタイルのデータレコードをメモリに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記メモリが、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し、ここにおいて、Ｎは前記レンダリング対象内のタイル位置の総数である、
請求項１に記載の方法。
【請求項６】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関する保守的な最も遠いＺ値を備える、請求項５に記載の方法。
【請求項７】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関するカバレージマスクをさらに備える、請求項６に記載の方法。
【請求項８】
前記メモリが、基礎的なメモリに関連しないキャッシュユニットを備える、請求項５に記載の方法。
【請求項９】
複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが、基礎的なメモリに関連せず、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少ない、
請求項１に記載の方法。
【請求項１０】
複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少なく、
前記キャッシュユニットが、前記第１のデータレコードを基礎的なメモリに書き込まずに、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを前記キャッシュユニット内のキャッシュラインに書き込むように構成され、
前記キャッシュユニットが、前記第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、前記第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするようにさらに構成される、
請求項１に記載の方法。
【請求項１１】
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にすること
をさらに備える、請求項１に記載の方法。
【請求項１２】
前記ソースタイルの保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いかどうかに基づいて、前記タイル位置に関連付けられた前記ソースタイルを、グラフィックスパイプラインから選択的に廃棄することと、
前記マージされたソースタイルの前記更新バージョンが前記マージされたソースタイルの前記更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することと、
をさらに備える、請求項１に記載の方法。
【請求項１３】
前記ソースタイルを前記グラフィックスパイプラインから選択的に廃棄することが、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いと決定することに応答して、前記ソースタイルを廃棄することと、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠くないと決定することに応答して、前記ソースタイルを廃棄しないことと
を備え、
前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することが、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にカバーされると決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定することと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にはカバーされないと決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定しないことと
を備える、
請求項１２に記載の方法。
【請求項１４】
デバイスであって、
ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージするように構成されたグラフィックス処理ユニット（ＧＰＵ）
を備え、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、デバイス。
【請求項１５】
前記ＧＰＵが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にはカバーされないこと、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることと、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされること、または前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近くないことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージしないことと
を行うようにさらに構成される、請求項１４に記載のデバイス。
【請求項１６】
前記ＧＰＵが、
前記ソースタイルに関する前記保守的な最も遠いＺ値および前記マージされたソースタイルに関する保守的な最も遠いＺ値に基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値を生成すること
を行うようにさらに構成される、請求項１５に記載のデバイス。
【請求項１７】
前記ＧＰＵが、
前記ソースタイルに関するカバレージマスクおよび前記マージされたソースタイルに関するカバレージマスクに基づいて、前記マージされたソースタイルの前記更新バージョンに関するカバレージマスクを生成すること
を行うようにさらに構成される、請求項１６に記載のデバイス。
【請求項１８】
前記ＧＰＵが、
複数のマージされたソースタイルのデータレコードをメモリに記憶すること
を行うようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記メモリが、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し、ここにおいて、Ｎは前記レンダリング対象内のタイル位置の総数である、
請求項１４に記載のデバイス。
【請求項１９】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関する保守的な最も遠いＺ値を備える、請求項１８に記載のデバイス。
【請求項２０】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関するカバレージマスクをさらに備える、請求項１９に記載のデバイス。
【請求項２１】
前記メモリが、基礎的なメモリに関連しないキャッシュユニットを備える、請求項１８に記載のデバイス。
【請求項２２】
前記ＧＰＵが、複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶するようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが、基礎的なメモリに関連せず、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少ない、
請求項１４に記載のデバイス。
【請求項２３】
前記ＧＰＵが、複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶するようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少なく、
前記キャッシュユニットが、前記第１のデータレコードを基礎的なメモリに書き込まずに、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを前記キャッシュユニット内のキャッシュラインに書き込むように構成され、
前記キャッシュユニットが、前記第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、前記第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするようにさらに構成される、
請求項１４に記載のデバイス。
【請求項２４】
前記ＧＰＵが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にすること
を行うようにさらに構成される、請求項１４に記載のデバイス。
【請求項２５】
前記ＧＰＵが、
前記ソースタイルの保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いかどうかに基づいて、前記タイル位置に関連付けられた前記ソースタイルを、グラフィックスパイプラインから選択的に廃棄することと、
前記マージされたソースタイルの前記更新バージョンが前記マージされたソースタイルの前記更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することと、
を行うようにさらに構成される、請求項１４に記載のデバイス。
【請求項２６】
前記ＧＰＵが、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いと決定することに応答して、前記ソースタイルを廃棄することと、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠くないと決定することに応答して、前記ソースタイルを廃棄しないことと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にカバーされると決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定することと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にはカバーされないと決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定しないことと、
を行うようにさらに構成される、請求項２５に記載のデバイス。
【請求項２７】
前記デバイスがワイヤレス通信デバイスを備える、請求項１４に記載のデバイス。
【請求項２８】
前記デバイスがモバイルフォンハンドセットを備える、請求項１４に記載のデバイス。
【請求項２９】
装置であって、
タイル位置に関連付けられたサンプルのソースタイルの保守的な最も遠いＺ値が、前記タイル位置に関連付けられたカリングＺ値よりも近いかどうかを決定するための手段、ここで、前記カリングＺ値は前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、と、
前記ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージするための手段と、
を備える、装置。
【請求項３０】
１つまたは複数のプロセッサによって実行されると、
ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージする、ここで、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、
ことを前記１つまたは複数のプロセッサに行わせる命令を備える非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、グラフィックス処理システムに関し、より詳細には、グラフィックス処理システムにおいて使用するためのＺカリング技法に関する。
【背景技術】
【０００２】
[0002]グラフィックス処理ユニット（ＧＰＵ）は、表示用のグラフィックスデータのレンダリングを加速するために様々なタイプのコンピューティングデバイスによって使用され得る。そのようなコンピューティングデバイスには、たとえば、コンピュータワークステーション、モバイルフォン（たとえば、スマートフォン）、組込みシステム、パーソナルコンピュータ、タブレットコンピュータ、およびビデオゲームコンソールが含まれ得る。
【０００３】
[0003]レンダリングは、一般に、１つまたは複数の３次元（３Ｄ）グラフィックスオブジェクトを含み得る３Ｄグラフィックスシーンを、２次元（２Ｄ）のラスタ化された画像データに変換するプロセスを指す。３Ｄグラフィックスオブジェクトをレンダリングするために、ＧＰＵは、３Ｄグラフィックスオブジェクトの各々に対応する複数のピクセルを生成するために、３Ｄグラフィックスオブジェクトの各々に対応する１つまたは複数のプリミティブをラスタ化し得る。ピクセルは、結果として得られる画像を生成するために、様々なピクセル処理動作を使用して後で処理され得る。ピクセル処理動作は、ピクセルシェーディング動作、ブレンディング動作、テクスチャマッピング動作、プログラマブルピクセルシェーダ動作などを含み得る。
【０００４】
[0004]ＧＰＵがますます高速になるにつれて、ＧＰＵによってレンダリングされるグラフィックスシーンの複雑度は増大している。非常に複雑なシーンは、多数の３Ｄオブジェクトを含み得、３Ｄオブジェクトの各々は数百または数千のピクセルに対応し得る。これらのピクセルの各々を処理することは、かなりの量の処理サイクルと比較的大量のメモリ帯域幅とを消費し得る。
【０００５】
[0005]３Ｄグラフィックスオブジェクトは、通常、ラスタ化より前に、１つまたは複数のグラフィックスプリミティブ（たとえば、点、線、三角形）に再分割される。しばしば、プリミティブのうちのいくつかは、ビューポートの観点から他のプリミティブをブロックまたは遮ることがあり得、その結果、遮られたプリミティブは、結果として得られるレンダリングされた画像内で見えないことがあり得る。遮られたプリミティブのピクセルに対してピクセル処理動作を実行することは、不必要なピクセル動作を実行し得、不必要なピクセル動作は、グラフィックス処理システムにおいて不必要な処理サイクルとメモリ帯域幅とを消費し得る。
【０００６】
[0006]遮られたプリミティブに関連付けられたピクセルの不必要な処理の問題に取り組むために、様々な解決策が提案されている。１つの解決策は階層的Ｚカリングを実行することであり、階層的Ｚカリングは、ＧＰＵの作業負荷および／またはＧＰＵのメモリ帯域幅使用を低減するために、グラフィックスパイプライン内の比較的初期の段階において、最終的な結果として得られるレンダリングされた画像内で見えないソースピクセルを廃棄することを伴い得る。たとえば、階層的Ｚカリングアルゴリズムは、ピクセルの入力ソースタイルの保守的な最小Ｚ値を、ソースタイルと同じタイル位置を有するピクセルの宛先タイルに関する保守的な最大Ｚ値と比較し、ソースタイルの保守的な最小Ｚ値がタイル位置に関する保守的な最大Ｚ値よりも大きいとき、ピクセルのソースタイルを廃棄し得る。ピクセルの宛先タイルに関する保守的な最大Ｚ値は、ピクセルの宛先タイルに関する実際の最大Ｚ値よりも大きいかまたはそれに等しい値であり得る。
【０００７】
[0007]一般に、保守的な最大Ｚ値が宛先タイルの実際の最大Ｚ値（すなわち、宛先タイル内のすべてのピクセルに関する最大Ｚ値に等しい値）に近いほど、グラフィックスパイプライン内で初期に廃棄され得る見えないソースピクセルの数は大きくなり、したがって、階層的Ｚカリングを実行することによって取得され得るパフォーマンス利益は大きくなる。しかしながら、宛先タイルの実際の最大Ｚ値に比較的近い保守的な最大Ｚ値を達成することは、アルゴリズム複雑度、メモリ使用量、メモリ帯域幅、およびプロセッサ作業負荷の点でコストがかかり得る。
【発明の概要】
【０００８】
[0008]本開示は、グラフィックス処理システムにおいて階層的Ｚカリングを実行するための技法を記載する。いくつかの例では、階層的Ｚカリングを実行するための技法は、部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値がタイル位置に関するカリングＺ値よりも近いかどうかに基づいて、タイル位置に関連付けられた部分的にカバーされたソースタイルを完全にカバーされマージされたソースタイルに選択的にマージすることと、タイル位置に関するカリングＺ値を更新するために、完全にカバーされマージされたソースタイルに関連付けられた保守的な最も遠いＺ値を使用することとを伴い得る。カリングＺ値は、タイル位置に関するカリングの決定を行うために使用され得、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いＺ値を示し得る。部分的にカバーされたソースタイルをマージすることは、タイル位置に関するカリングＺ値よりもビューポートに近い保守的な最も遠いＺ値を有するタイル位置に関する部分的にカバーされたソースタイルはマージされ得るのに対して、タイル位置に関する他の部分的にカバーされたソースタイルはマージされないことがあり得るという意味で選択的であり得る。このようにしてソースタイルを選択的にマージすることは、階層的Ｚカリングを実行するために使用されるカリングＺ値の品質を改善し得、これは、Ｚカリングアルゴリズムの拒絶の効率を改善し得る。このようにして、階層的Ｚカリングを実行するグラフィックスプロセッサのパフォーマンスおよび／またはメモリ帯域幅使用量が改善され得る。
【０００９】
[0009]一例では、本開示は、グラフィックス処理ユニット（ＧＰＵ）で、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、タイル位置に関連付けられたサンプルのソースタイルをタイル位置に関するマージされたソースタイルと選択的にマージすることを含む方法を記載する。カリングＺ値は、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いＺ値を示す。
【００１０】
[0010]別の例では、本開示は、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、タイル位置に関連付けられたサンプルのソースタイルをタイル位置に関するマージされたソースタイルと選択的にマージするように構成されたグラフィックス処理ユニット（ＧＰＵ）を含むデバイスを記載する。カリングＺ値は、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いＺ値を示す。
【００１１】
[0011]別の例では、本開示は、タイル位置に関連付けられたサンプルのソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかを決定するための手段を含む装置を記載する。カリングＺ値は、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いＺ値を示す。装置は、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、ソースタイルをタイル位置に関するマージされたソースタイルと選択的にマージするための手段をさらに含む。
【００１２】
[0012]別の例では、本開示は、実行されたとき、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、タイル位置に関連付けられたサンプルのソースタイルをタイル位置に関するマージされたソースタイルと選択的にマージすることを１つまたは複数のプロセッサに行わせる命令を記憶するコンピュータ可読記憶媒体を記載する。カリングＺ値は、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いＺ値を示す。
【００１３】
[0013]本開示の１つまたは複数の例の詳細は、添付図面および下記の説明に記載される。本開示の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１４】
【図１】[0014]本開示の階層的Ｚカリング技法を実施するために使用され得る例示的なコンピューティングデバイスを示すブロック図。
【図２】[0015]図１に示されたコンピューティングデバイスのＣＰＵとＧＰＵとメモリとをさらに詳細に示すブロック図。
【図３】[0016]本開示の階層的Ｚカリング技法を実施するために使用され得る例示的なグラフィックスパイプラインを示すブロック図。
【図４】[0017]本開示による階層的Ｚカリングを実行するための例示的な技法を示す流れ図。
【図５】[0018]本開示による階層的Ｚカリングを実行するときに部分的にカバーされたソースタイルをマージするための例示的な技法を示す流れ図。
【図６】[0019]本開示による、レンダリングされるべきプリミティブの例示的なセットと、プリミティブの例示的なセットのレンダリングに関連付けられた対応するマージキャッシュの状態とを示す概念図。
【発明を実施するための形態】
【００１５】
[0020]本開示は、グラフィックス処理システムにおいて階層的Ｚカリングを実行するための技法を記載する。いくつかの例では、階層的Ｚカリングを実行するための技法は、部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値がタイル位置に関するカリングＺ値よりも近いかどうかに基づいて、タイル位置に関連付けられた部分的にカバーされたソースタイルを完全にカバーされマージされたソースタイルに選択的にマージすることと、タイル位置に関するカリングＺ値を更新するために、完全にカバーされマージされたソースタイルに関連付けられた保守的な最も遠いＺ値を使用することとを伴い得る。カリングＺ値は、タイル位置に関するカリングの決定を行うために使用され得、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いＺ値を示し得る。部分的にカバーされたソースタイルをマージすることは、タイル位置に関するカリングＺ値よりもビューポートに近い保守的な最も遠いＺ値を有するタイル位置に関する部分的にカバーされたソースタイルはマージされ得るが、タイル位置に関する他の部分的にカバーされたソースタイルはマージされないことがあり得るという意味で選択的であり得る。このようにしてソースタイルを選択的にマージすると、階層的Ｚカリングを実行するために使用されるカリングＺ値の品質が改善され得、これは、Ｚカリングアルゴリズムの拒絶の効率を改善し得る。このようにして、階層的Ｚカリングを実行するグラフィックスプロセッサのパフォーマンスおよび／またはメモリ帯域幅使用が改善され得る。
【００１６】
[0021]さらなる例では、階層的Ｚカリングを実行するための技法は、マージされたソースタイルに関する蓄積された保守的な最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために、キャッシュユニットを使用し得る。キャッシュユニットの容量は、レンダリング対象内のタイル位置のすべてに関する蓄積された保守的な最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために必要とされるキャッシュのサイズよりも小さいことがあり得る。加えて、キャッシュユニットは、基礎的なメモリに関連付けられないことがあり得る。すなわち、キャッシュユニットは、単に、別の基礎的なメモリに一次的に記憶されたデータのコピーを記憶するためのキャッシュされたデータストアとしてではなく、マージされたソースタイルデータ用の１次データストアとして働き得る。蓄積された保守的な最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために、上記の方式で構成されたキャッシュを使用すると、マージされたソースタイルに関連付けられた蓄積された保守的な最も遠いＺ値に基づいて、階層的Ｚカリングを実行するＧＰＵのパフォーマンス、メモリ帯域幅使用、および／またはメモリフットプリントを改善し得る。
【００１７】
[0022]さらなる例では、階層的Ｚカリングを実行するための技法は、タイル位置に関するカリングＺ値が、タイル位置に関する完全にカバーされたマージされていないソースタイルを処理することに応答して更新されているとき、タイル位置に関するマージされたソースタイルデータを記憶するキャッシュユニットのキャッシュラインを無効にし得る。たとえば、階層的Ｚカリングを実行するための技法は、タイル位置に関するソースタイルがソースタイルに対応するプリミティブによって完全にカバーされること、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いことを決定することに応答して、タイル位置に関連付けられたキャッシュラインを無効にし得る。タイル位置に関する完全にカバーされたマージされていないソースタイルを処理することに応答してカリングＺ値が更新された後、タイル位置に対応するマージされたソースタイルは、場合によっては、更新されたカリングＺ値よりも遠い保守的な最も遠いＺ値を有し得る。カリングＺ値がすでに使用されているカリングＺ値よりも遠い保守的な最も遠いＺ値に等しいように更新された場合、選別されたサンプルの量は削減され得、それにより、階層的Ｚカリングアルゴリズムの効率が低減される。そのようなタイル位置に関するマージされたソースタイルデータを記憶するキャッシュラインを無効にすると、マージキャッシュに記憶された保守的な最も遠いＺ値がカリングＺ値を更新するために以後使用されないことが保証され得る。このようにしてマージキャッシュを空にすると、結果として得られるカリングＺ値の品質が改善され得るし、それにより、階層的Ｚカリングアルゴリズムの廃棄の効率が改善される。
【００１８】
[0023]階層的Ｚカリングは、ＧＰＵの作業負荷および／またはＧＰＵのメモリ帯域幅使用を低減するために、グラフィックスパイプライン内の比較的初期の段階において、最終的な結果として得られるレンダリングされた画像内で見えないソースサンプルを廃棄するために、ＧＰＵによって使用され得る。階層的Ｚカリングは、いくつかの例では、見えない、したがって廃棄されることができるソースサンプルを決定するために、レンダリング対象内のタイル位置の各々に関するカリングＺ値を使用し得る。カリングＺ値は、タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示し得る。宛先タイルに関する保守的な最も遠いＺ値は、少なくともサンプルの宛先タイル内の最も遠いＺ値と同じ遠さか、またはそれよりも遠いＺ値であり得る。タイル内の個々のサンプルについてのＺ値は、サンプルとサンプルを含むレンダリングされたグラフィックスフレームに関連付けられたカメラ（たとえば、ビューポート）の方向に直交する平面との間の距離を示す値を指し得る。サンプルはピクセルまたはピクセルのサブサンプルを指し得る。
【００１９】
[0024]１つのタイプの階層的Ｚカリングアルゴリズムは、サンプルの入力ソースタイルの保守的な最も近いＺ値を、サンプルの宛先タイルのカリングＺ値と比較し、ソースタイルの保守的な最も近いＺ値が宛先タイルのカリングＺ値よりも遠いとき、サンプルのソースタイルを廃棄し得る。このタイプの階層的Ｚカリング技法は、宛先タイル内のサンプルがプリミティブによってカバーされるか否かにかかわらず、宛先タイル内のすべてのサンプルについての保守的な最も遠いＺ値を示すタイル幅のカリングＺ値を使用する。たとえば、宛先タイルに任意のプリミティブをレンダリングする前にカリングＺ値が宛先タイル用に初期化されるとき、カリングＺ値は、システムに関する可能な限り最も遠いＺカリング値に設定され得る。プリミティブによってカバーされない宛先タイル内に少なくとも１つのサンプルが存在する限り、カリングＺ値は可能な限り最も遠いＺカリング値に留まり得る。宛先タイル内のサンプルがプリミティブによってカバーされるか否かにかかわらず、宛先タイル内のすべてのサンプルに関する保守的な最も遠いＺ値を示すタイル幅のカリングＺ値を使用することは、プリミティブによってカバーされる宛先タイル内のサンプルのみについての保守的な最も遠いＺ値を示すカリングＺ値を使用することとは対照的に、階層的Ｚカリング中に実行される廃棄の比較の複雑度が低減され得、それにより、階層的Ｚカリング技法を実施するグラフィックスシステムのパフォーマンスが改善される。
【００２０】
[0025]上記で説明されたようにカバーされるサンプルとカバーされないサンプルとの間を区別しないカリングＺ値を使用する階層的Ｚカリングアルゴリズムに関して、宛先タイルに関するカリングＺ値は、入力ソースタイルに関する保守的な最も遠いＺ値が宛先タイルに関するカリングＺ値よりも近く、入力ソースタイルが入力ソースタイルに対応するプリミティブによって完全にカバーされる場合、入力ソースタイルに関する保守的な最も遠いＺ値を用いて更新され得る。しかしながら、部分的にカバーされるソースタイルに関する保守的な最も遠いＺ値を使用することが、全ての宛先タイルに関する保守的な最も遠いＺ値となるかどうかは不確実なので、入力ソースタイルがソースタイルに対応するプリミティブによって、完全にではなく、部分的にのみカバーされる場合、カリングＺ値は同様の方式で更新されることが常に可能であるとは限らない。これにより、宛先タイルに関する最適とは言えない保守的な最も遠いＺ値がもたらされ得、グラフィックスパイプライン内の初期に廃棄され得るサンプルの数が削減され得る。
【００２１】
[0026]部分的にカバーされたタイルが宛先タイルに関する保守的な最も遠いＺ値の更新に影響を及ぼすことを可能にするための１つの技法は、同じタイル位置を有する部分的にカバーされたソースタイルを完全にカバーされたタイルにマージすること、および同じタイル位置にある宛先タイルに関するカリングＺ値を更新するために、マージされた完全にカバーされたタイルに関連付けられた蓄積された保守的な最も遠いＺ値を使用することである。宛先タイルに関する保守的な最も遠いＺ値を更新するために、マージされたソースタイルに関連付けられた蓄積された保守的な最も遠いＺ値を使用することは、宛先タイルに関する保守的な最も遠いＺ値と実際の最も遠いＺ値との間の差を低減し得、それにより、さらなるソースサンプルが廃棄されることが可能になる。このようにして、階層的Ｚカリングを実行するＧＰＵのパフォーマンスが改善され得る。
【００２２】
[0027]部分的にカバーされたソースタイルをマージするための１つの手法は、マージされるべきソースタイルの保守的な最も遠いＺ値が宛先タイルの保守的な最も遠いＺ値よりも大きいか小さいかにかかわらず、特定のタイル位置に関するすべての部分的にカバーされたソースタイルをマージすることを伴い得る。そのような手法は、タイル位置に関するカリングＺ値よりもビューポートから遠い保守的な最も遠いＺ値を有するタイル位置に関するマージされたソースタイルがもたらされ得る。マージされたソースタイルに関する保守的な最も遠いＺ値は、少なくともマージされたソースタイルのすべてのカバーされたサンプルの最も遠いＺ値と同じ遠さか、またはそれよりも遠いＺ値であり得る。カリングＺ値をカリングＺ値よりもビューポートから遠い保守的な最も遠いＺ値と置換することは、階層的Ｚカリングアルゴリズムによって廃棄されるサンプルの量を削減し得、それにより、階層的Ｚカリングを実行することによって取得されるパフォーマンスの利益が低減される。
【００２３】
[0028]マージされたソースタイルに関する保守的な最も遠いＺ値がタイル位置に関する対応するカリングＺ値よりもビューポートから遠いマージされたソースタイルに関して、マージされたソースタイルを形成するために使用された部分的にカバーされたソースタイルのうちのいくつかは、カリングＺ値よりもビューポートに近い保守的な最も遠いＺ値を含み得る。カリングＺ値に対する部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値の方位にかかわらず、そのようなソースタイルを互いに無差別にマージするシステムは、カリングＺ値よりもビューポートに近い部分的にカバーされたソースタイルがカリングＺ値の品質にはっきりとした影響を及ぼすことを防止し得、それにより、階層的Ｚカリングアルゴリズムによって廃棄されるサンプルの量が潜在的に削減される。
【００２４】
[0029]本開示のいくつかの態様によれば、部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値がタイル位置に関するカリングＺ値よりも近いがどうかに基づいて、タイル位置に関連付けられた部分的にカバーされたソースタイルを、タイル位置に関する完全にカバーされマージされたソースタイルに選択的にマージするための技法が記載される。部分的にカバーされたソースタイルをマージすることは、タイル位置に関するカリングＺ値よりも近い保守的な最も遠いＺ値を有するタイル位置に関する部分的にカバーされたソースタイルはマージされ得るのに対し、タイル位置に関する他の部分的にカバーされたソースタイルはマージされないことがあり得る、という意味で選択的であり得る。このようにしてソースタイルを選択的にマージすると、Ｚカリングを実行するために使用されるカリングＺ値の品質が改善され得、これは、Ｚカリングアルゴリズムの廃棄率を改善し得る。このようにして、階層的Ｚカリングを実行するグラフィックスプロセッサのパフォーマンスおよび／またはメモリ帯域幅使用が改善され得る。
【００２５】
[0030]上述の手法に従って宛先タイルに関する保守的な最も遠いＺ値を更新するプロセスが次に記載される。完全にカバーされた入力ソースタイルが処理され、入力ソースタイルの保守的な最も遠いＺ値が、入力ソースタイルと同じタイル位置を有する宛先タイルの保守的な最も遠いＺ値よりも近いとき、宛先タイルに関する保守的な最も遠いＺ値は、入力ソースタイルの保守的な最も遠いＺ値を用いて更新される。完全にカバーされた入力ソースタイルの保守的な最も遠いＺ値が宛先タイルの保守的な最も遠いＺ値よりも近くない場合、宛先タイルに関する保守的な最も遠いＺ値は更新されない。
【００２６】
[0031]部分的にカバーされた入力ソースタイルが処理されるとき、入力ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値と比較され得る。入力ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりもビューポートに近くない場合、部分的にカバーされたソースタイルはマージされないことがあり得る。一方、入力ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりもビューポートに近い場合、部分的にカバーされた入力ソースタイルは、同じタイル位置について以前マージされた任意の部分的にカバーされた入力ソースタイルとマージされ得る。
【００２７】
[0032]マージ動作が完全にカバーされマージされたタイルをもたらす場合、タイル位置に関するカリングＺ値は、完全にカバーされマージされたタイルの最も遠いＺ値を用いて更新される。そうではなく、マージ動作が完全にカバーされたタイルをもたらさない場合、宛先タイルに関する保守的な最も遠いＺ値は更新されないが、マージされたソースタイルを定義するデータは、後のマージする動作において使用するために記憶され得る。
【００２８】
[0033]マージされたソースタイルを定義するデータを記憶するため１つの手法は、レンダリング対象のタイル位置の各々にメモリ内のメモリエントリを割当てること、およびメモリエントリ内の各々の中のタイル位置のうちのそれぞれのタイル位置に関する蓄積された保守的な最も遠いＺ値と蓄積されたカバレージマスクとを記憶することである。特定のタイル位置に関する蓄積されたカバレージマスクは、その特定のタイル位置に関してマージされている部分的にカバーされたソースタイルの各々に関してのカバレージマスクのマージされたバージョンに対応し得る。ソースタイルに関するカバレージマスクは、ビットの各々は、ソースタイルに対応するプリミティブがそれぞれのビットに対応するサンプルをカバーするかどうかを示す、ソースタイル内のサンプルの各々に関するビットを含み得得る。サンプルのソースタイルがプリミティブをラスタ化することに応答して生成された場合、プリミティブはサンプルのソースタイルに対応し得る。複数のカバレージマスクのマージされたバージョンは、複数のカバレージマスクのすべてに対して実行されたビット単位のＯＲ演算の結果に対応し得る。特定のタイル位置に関する蓄積された保守的な最も遠いＺ値は、その特定のタイル位置についてマージされている部分的にカバーされた入力タイルの各々についての保守的な最も遠いＺ値のうちの最遠値に対応し得る。
【００２９】
[0034]部分的にカバーされたソースタイルを同じタイル位置について以前マージされた部分的にカバーされたソースタイルとマージした後、蓄積されたカバレージマスクは、マージされたソースタイルが完全にカバーされマージされたソースタイルか、あるいは部分的にカバーされマージされたソースタイルかを決定するために、検査され得る。完全にカバーされマージされたソースタイルに関して、カバレージマスクは、マージされたソースタイルにおけるサンプルの各々が、レンダリング対象上に表示される少なくとも１つのプリミティブによってカバーされることを示すように設定されたビットのすべてを有し得る。部分的にカバーされマージされたソースタイルに関して、カバレージマスクは、マージされたソースタイルのサンプルのいくつかがプリミティブによってカバーされないことを示すように設定されたいくつかのビットと、設定されないいくつかのビットとを有し得る。
【００３０】
[0035]レンダリング対象は、階層的Ｚカリングを実行するために使用される多数の様々なタイル位置を含み得る。様々なタイル位置の各々に関する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとを記憶することは、かなりの量のメモリを消費し得る。その上、様々なタイル位置の各々に関する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとにアクセスすることは、かなりの量のメモリ帯域幅を消費し得る。加えて、マージされたソースタイルデータを記憶するために必要とされるメモリの量は、データにアクセスするＧＰＵとは異なるチップ（すなわち、オフチップ）上に実装されるメモリを必要とし得る。そのようなデータにアクセスするときにＧＰＵによって実行される多数のオフチップメモリアクセスは、かなりの量の処理遅延を引き起こし得る。
【００３１】
[0036]本開示のいくつかの態様によれば、メモリユニットは、階層的Ｚカリングを実行するときに部分的にカバーされたソースタイルをマージするために使用され得る、蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために使用され得る。メモリユニットのサイズは、レンダリング対象内のタイル位置のすべてに関する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために必要とされるメモリのサイズよりも小さいことがあり得る。これは、蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために必要とされるメモリフットプリントを低減し得る。比較的小型のメモリユニットは、メモリユニットがＧＰＵと同じチップ上に実装されることを可能にし得、、データにアクセスするために必要とされるオフチップメモリ帯域幅の量を削減する。加えて、メモリがＧＰＵと同じチップ上に実装されることを可能にすることは、データにアクセスするために必要とされる遅延の量も削減し得、それにより、階層的Ｚカリング動作のパフォーマンスを改善する。
【００３２】
[0037]蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために使用されるメモリユニットは、レンダリング対象内のタイル位置のすべてに関する蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために必要とされるメモリのサイズよりも小さいことがあり得るので、２つの異なるタイル位置が同じメモリエントリにマップする場合において、２つの異なるタイル位置に関するデータが互いに上書きし得る可能性がある。これは、保守的な最も遠いＺ値の品質（すなわち、保守的な最も遠いＺ値が実際の最も遠いＺ値にどれほど近いか）を低減し得るが、オンチップメモリを使用することによって達成されるパフォーマンスの利益は、場合によって、データの上書きによるパフォーマンスにおけるいかなる減少にもまさり得る。
【００３３】
[0038]いくつかの例では、メモリユニットはキャッシュユニットであり得る。キャッシュユニットのサイズは、レンダリング対象内のタイル位置のすべてに関する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために必要とされるキャッシュのサイズよりも小さいことがあり得る。加えて、キャッシュユニットは、基礎的なメモリに関連付けられないことがあり得る。すなわち、キャッシュユニットは、単に、他の場所に一次的に記憶されたデータのコピーを記憶するためのキャッシュされたデータストアとしてではなく、マージされたソースタイルデータ用の１次データストアとして働き得る。キャッシュユニットは、通常、そのようなキャッシュユニットがキャッシングサービスを提供する基礎的なメモリ空間よりも小さい量のデータを記憶するように設計される。したがって、キャッシュユニットは、しばしば、キャッシュ内のどこにデータが記憶されるかと、キャッシュ内でどのデータが上書きされるかとを決定するために、様々なマッピングポリシー（たとえば、ダイレクトマップ、セットアソシアティブ（set-associative）、フルアソシアティブなど（fully-associative））と、置換ポリシー（たとえば、最長時間未使用法（least recently used）、最小頻度使用法（least frequently used）、ランダムなど）とを実施する。マージされたソースタイルデータを記憶するための１次ストレージユニットとしてキャッシュユニットを使用することは、たとえ、基礎的なメモリ内の余分なコピーをキャッシュユニットが保持しなくても、キャッシュユニット内のどこにデータが記憶されるかと、キャッシュユニット内でどのデータが上書きされるかとを決定するためのこれらの内蔵機構をグラフィックスシステムが活用することを可能にし得る。これは、設計を簡略化し得、および／またはマージされたソースタイルデータを記憶するためのメモリユニットを実装するために必要とされるエリアの量を削減し得る。
【００３４】
[0039]マージソースタイルデータを記憶するために使用されるメモリが、キャッシュユニットとして実装されるとき、キャッシュユニットは、キャッシュラインの各々がレンダリング対象のタイル位置のそれぞれに関するデータを記憶する複数の様々なキャッシュラインを含み得る。たとえば、キャッシュラインの各々は、タグと、タイル位置に関する蓄積されたカバレージマスクと、タイル位置に関する蓄積された保守的な最も遠いＺ値とを記憶するように構成され得る。特定のキャッシュラインに記憶されたデータに対応するタイル位置（たとえば、タイルの画面座標）は、そのキャッシュライン用のタグとして使用され得る。
【００３５】
[0040]部分的にカバーされた入力ソースタイルが処理されるとき、部分的にカバーされた入力ソースタイルのタイル位置に関連付けられたデータを含んでいるキャッシュラインが存在するかどうかを見るために、キャッシュがアクセスされ得る。キャッシュラインのうちの１つが部分的にカバーされた入力ソースタイルのタイル位置に関連付けられたデータを含んでいる場合、入力ソースタイルに関するカバレージマスクおよび保守的な最も遠いＺ値は、キャッシュ内の蓄積されたカバレージマスクおよび蓄積された保守的な最も遠いＺ値とマージされる。そうでない場合、新しいキャッシュエントリがタイル位置のために生成され、蓄積されたカバレージマスクおよび蓄積された保守的な最も遠いＺ値は、それぞれ、入力ソースタイルのカバレージマスクおよび保守的な最も遠いＺ値に等しいように設定される。マージ動作の実行が完全にカバーされマージされたタイルをもたらす場合、完全にカバーされマージされたタイルに関連付けられたキャッシュラインは無効にされ得る。
【００３６】
[0041]上記で説明されたように、完全にカバーされた入力ソースタイルが処理され、入力ソースタイルの保守的な最も遠いＺ値が、入力ソースタイルと同じタイル位置を有する宛先タイルの保守的な最も遠いＺ値よりも近いとき、宛先タイルに関する保守的な最も遠いＺ値は、入力ソースタイルの保守的な最も遠いＺ値を用いて更新される。場合によっては、完全にカバーされた入力ソースタイルが処理されているとき、１つまたは複数の部分的にカバーされたソースタイルはすでにマージされていることがあり得、マージされたソースタイルに関連付けられたデータはマージキャッシュユニットに記憶され得る。
【００３７】
[0042]マージされたソースタイルに取り組むための１つの手法は、マージキャッシュ内でタイルを保持し、マージされたソースタイルが完全にカバーされるまで、部分的にカバーされたソースタイルをマージされたソースタイルとマージし続けることである。しかしながら、この手法は、結果として得られる完全にカバーされマージされたタイルに関する保守的な最も遠いＺ値がすでに使用中のカリングＺ値よりも近いことを保証しないことがあり得る。もしカリングＺ値がすでに使用中のカリングＺ値よりも近くない保守的な最も遠いＺ値によって置換されるのであれば、階層的Ｚカリングアルゴリズムによって廃棄されるサンプルの量は削減される得、それにより、アルゴリズムの効率が低下する。
【００３８】
[0043]本開示のいくつかの態様によれば、タイル位置に関するカリングＺ値が、タイル位置に関する完全にカバーされたマージされていないソースタイルを処理することに応答して更新されているとき、タイル位置に関するマージされたソースタイルデータを記憶するキャッシュユニットのキャッシュラインは、無効にされ得る。たとえば、タイル位置に関するソースタイルがソースタイルに対応するプリミティブによって完全にカバーされること、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いことを決定することに応答して、タイル位置に関連付けられたキャッシュラインが無効にされ得る。このようにキャッシュラインを無効にすることは、カリングＺ値がすでに使用中のカリングＺ値よりも近くない保守的な最も遠いＺ値によって置換されることを防止し得る。このようにして、結果として得られるカリングＺ値の品質が改善され得るし、それにより、階層的Ｚカリングアルゴリズムの廃棄効率が改善される。
【００３９】
[0044]図１は、本開示の階層的Ｚカリング技法を実施するために使用され得る例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、たとえば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはビデオゲームコンソール、（たとえば、モバイル電話、携帯電話、衛星電話、および／もしくはモバイルフォンハンドセットなどの）ワイヤレス通信デバイス、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、または、グラフィカルデータを処理および／もしくは表示する任意の他のタイプのデバイスであり得る。
【００４０】
[0045]図１の例に示されたように、コンピューティングデバイス２は、ユーザインターフェース４と、ＣＰＵ６と、メモリコントローラ８と、メモリ１０と、グラフィックス処理ユニット（ＧＰＵ）１２と、ディスプレイインターフェース１４と、ディスプレイ１６と、バス１８とを含む。ユーザインターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびディスプレイインターフェース１４は、バス１８を使用して互いに通信し得る。図１のコンピューティングデバイス２に含まれる特定の構成要素、および図１に示された構成要素の構成は例示的なものにすぎず、同じまたは異なる構成において同じまたは異なる構成要素を有する任意の他のタイプのコンピューティングデバイスおよび／または他のグラフィックス処理システムが、本開示の技法を実施するために使用され得ることに留意されたい。
【００４１】
[0046]ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサであり得る。ユーザは、１つまたは複数のソフトウェアアプリケーションをＣＰＵ６に実行させるために、コンピューティングデバイス２に入力を与え得る。ＣＰＵ６上で実行するソフトウェアアプリケーションとしては、たとえば、グラフィックスアプリケーション、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、オペレーティングシステム、またはグラフィックス画像をレンダリングするためにＧＰＵ１２を使用する任意のタイプのプログラムがあり得る。ユーザは、ユーザインターフェース４を介してコンピューティングデバイス２に結合される、キーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなどの１つまたは複数の入力デバイス（図示せず）を介して、コンピューティングデバイス２に入力を与え得る。
【００４２】
[0047]ＣＰＵ６上で実行するソフトウェアアプリケーションは、ディスプレイ１６上での表示用にグラフィックスデータをフレームバッファにレンダリングするようにＧＰＵ１２に指示する１つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、グラフィックスレンダリング命令は、たとえば、ＤｉｒｅｃｔＸ  ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、または任意の他の公共のもしくはプロプライエタリな標準グラフィックスＡＰＩなどの、グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）に準拠し得る。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、グラフィックスデータの一部またはすべてをＧＰＵ１２にレンダリングさせるために、１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブのリスト、たとえば、点、線、三角形、四角形、三角形ストリップなどを含み得る。
【００４３】
[0048]メモリコントローラ８は、メモリ１０に出入りするデータの転送を容易にする。たとえば、メモリコントローラ８は、コンピューティングデバイス２内の構成要素にメモリサービスを提供するために、メモリ読取りコマンドとメモリ書込みコマンドとを受信し、メモリ１０に関するそのようなコマンドをサービスし得る。メモリコントローラ８はメモリ１０に通信可能に結合される。メモリコントローラ８は、図１の例示的なコンピューティングデバイス２において、ＣＰＵ６とメモリ１０の両方とは別の処理モジュールであるものとして図示されているが、他の例では、メモリコントローラ８の機能の一部またはすべては、ＣＰＵ６とメモリ１０の一方または両方に実装され得る。
【００４４】
[0049]メモリ１０は、ＣＰＵ６による実行のためにアクセス可能なプログラムモジュールおよび／もしくは命令、ならびに／またはＣＰＵ６上で実行するプログラムによる使用のためのデータを記憶し得る。たとえば、メモリ１０は、ＣＰＵ６上で実行するアプリケーションに関連付けられたプログラムコードとグラフィックスデータとを記憶し得る。メモリ１０は、さらに、コンピューティングデバイス２の他の構成要素による使用のための情報、および／またはこれらによって生成された情報を記憶し得る。たとえば、メモリ１０は、ＧＰＵ１２用のデバイスメモリとして働くことができ、ＧＰＵ１２によって演算されるべきデータ、ならびにＧＰＵ１２によって実行される演算から生じるデータを記憶し得る。たとえば、メモリ１０は、頂点バッファ、テクスチャバッファ、深度バッファ、ステンシルバッファ、フレームバッファ、レンダリング対象などの任意の組合せを記憶し得る。加えて、メモリ１０は、ＧＰＵ１２による処理のためのコマンドストリームを記憶し得る。メモリ１０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体、または光学記憶媒体などの、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含み得る。
【００４５】
[0050]ＧＰＵ１２は、ＣＰＵ６によってＧＰＵ１２に発行されたコマンドを実行するように構成され得る。ＧＰＵ１２によって実行されるコマンドは、グラフィックスコマンド、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含み得る。
【００４６】
[0051]ＧＰＵ１２は、１つまたは複数のグラフィックスプリミティブをディスプレイ１６にレンダリングするためにグラフィックス演算を実行するように構成され得る。そのような例では、ＣＰＵ６上で実行するソフトウェアアプリケーションのうちの１つが、グラフィックス処理を必要とする時に、ＣＰＵ６は、グラフィックスデータをＧＰＵ１２に供給し、１つまたは複数のグラフィックスコマンドをＧＰＵ１２に発行する。グラフィックスコマンドとしては、たとえば、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、ブリットコマンドなどがあり得る。グラフィックスデータは、頂点バッファ、テクスチャデータ、面データなどを含み得る。いくつかの例では、ＣＰＵ６は、コマンドとグラフィックスデータとをＧＰＵ１２によってアクセスされ得るメモリ１０に書き込むことによって、コマンドとグラフィックスデータとをＧＰＵ１２に供給し得る。
【００４７】
[0052]ＧＰＵ１２は、いくつかの例では、ＣＰＵ６よりも効率的なベクトル演算の処理を提供する高度並列構造を用いて構築され得る。たとえば、ＧＰＵ１２は、複数の頂点、制御点、ピクセル、および／または他のデータに対して並列方式で演算するように構成された複数の処理要素を含み得る。ＧＰＵ１２の高度並列特性は、いくつかの例では、ＧＰＵ１２が、ＣＰＵ６を使用して画像をレンダリングするよりも迅速にグラフィックス画像（たとえば、ＧＵＩならびに２次元（２Ｄ）および／または３次元（３Ｄ）のグラフィックスシーン）をディスプレイ１６上にレンダリングすることを可能にし得る。加えて、ＧＰＵ１２の高度並列特性は、ＧＰＵ１２が、汎用コンピューティングアプリケーション用のある特定のタイプのベクトル演算と行列演算とをＣＰＵ６よりも迅速に処理することを可能にし得る。
【００４８】
[0053]ＧＰＵ１２は、いくつかの例では、コンピューティングデバイス２のマザーボードに統合され得る。他の例では、ＧＰＵ１２は、コンピューティングデバイス２のマザーボード内のポートに取り付けられたグラフィックスカード上に存在し得、そうでなければ、コンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる例では、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。ＧＰＵ１２は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、または他の同等の集積回路もしくはディスクリート論理回路などの、１つまたは複数のプロセッサを含み得る。
【００４９】
[0054]いくつかの例では、ＧＰＵ１２は、ＧＰＵキャッシュを含み得、それは、メモリ１０のすべてまたは一部分にキャッシングサービスを提供し得る。そのような例では、ＧＰＵ１２は、オフチップメモリではなくローカルストレージを使用して、データをローカルに処理するためにキャッシュを使用し得る。これは、ＧＰＵ１２が激しいバストラフィックを経験しうるバス１８を介してメモリ１０にアクセスする必要を減らすことによって、ＧＰＵ１２がより効率的な形で動作することが可能になる。しかしながら、いくつかの例では、ＧＰＵ１２が、別々のキャッシュを含むのではなく、その代わりにバス１８を介してメモリ１０を利用し得る。ＧＰＵキャッシュは、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）などの、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含み得る。
【００５０】
[0055]ＣＰＵ６および／またはＧＰＵ１２は、メモリ１０内で割当てられるフレームバッファ内に、ラスタ化された画像データを記憶し得る。ディスプレイインターフェース１４は、フレームバッファからデータを取り出し、ラスタ化された画像データによって表される画像を表示するようにディスプレイ１６を構成し得る。いくつかの例では、ディスプレイインターフェース１４は、フレームバッファから取り出されたデジタル値をディスプレイ１６によって消費可能なアナログ信号に変換するように構成されたデジタル−アナログ変換器（ＤＡＣ）を含み得る。他の例では、ディスプレイインターフェース１４は、処理のために、ディスプレイ１６に直接デジタル値を渡すことができる。
【００５１】
[0056]ディスプレイ１６は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ（ＳＥＤ）、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ１６は、コンピューティングデバイス２内に統合され得る。たとえば、ディスプレイ１６は、モバイル電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替として、ディスプレイ１６は、有線またはワイヤレスの通信リンクを介してコンピューティングデバイス２に結合されるスタンドアロンデバイスであり得る。たとえば、ディスプレイ１６は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００５２】
[0057]バス１８は、第１世代、第２世代、および第３世代のバス構造およびバスプロトコルと、共有バス構造および共有バスプロトコルと、ポイントツーポイントバス構造およびポイントツーポイントバスプロトコルと、単方向バス構造および単方向バスプロトコルと、双方向バス構造および双方向プロトコルとを含む、バス構造とバスプロトコルの任意の組合せを使用して実装され得る。バス１８を実装するために使用され得る様々なバス構造およびバスプロトコルの例としては、たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバス、ＩｎｆｉｎｉＢａｎｄバス、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ  Ｂｕｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＡＭＢＡ）Ａｄｖａｎｃｅｄ  Ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ  Ｂｕｓ（ＡＨＢ）、ＡＭＢＡ  Ａｄｖａｎｃｅｄ  Ｐｅｒｉｐｈｅｒａｌ  Ｂｕｓ（ＡＰＢ）、およびＡＭＢＡ  Ａｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バスがある。他のタイプのバス構造およびバスプロトコルが使用され得る。
【００５３】
[0058]本開示によれば、ＧＰＵ１２は、本開示に記載された階層的Ｚカリング技法のいずれをも実行するように構成され得る。たとえば、ＧＰＵ１２は、部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値がタイル位置に関するカリングＺ値よりも近いかどうかに基づいて、タイル位置に関連付けられたサンプルの部分的にカバーされたソースタイルを選択的にマージするように構成され得る。このようにしてソースタイルを選択的にマージすることは、Ｚカリングを実行するために使用されるカリングＺ値の品質を改善し得、それは、Ｚカリングアルゴリズムの廃棄率を改善し得る。このようにして、階層的Ｚカリングを実行するグラフィックスプロセッサのパフォーマンスおよび／またはメモリ帯域幅使用量が改善され得る。
【００５４】
[0059]別の例として、ＧＰＵ１２は、マージされたソースタイルを定義する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために、メモリユニットを使用し得る。マージされたソースタイルは、階層的Ｚカリングを実行するために使用されるカリングＺ値を更新するために使用され得る。メモリユニットは、ＧＰＵ１２と同じチップ上、または別のチップ（たとえば、メモリ１０）上に形成され得る。メモリユニットのサイズは、レンダリング対象内のタイル位置のすべてに関する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために必要とされるメモリのサイズよりも小さいことがあり得る。これは、蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために必要とされるメモリフットプリントを低減し得る。比較的小型のメモリユニットは、メモリユニットがＧＰＵ１２と同じチップ上に実装されることを可能にし得、それにより、データにアクセスするために必要とされるオフチップメモリ帯域幅の量を削減する。加えて、メモリがＧＰＵ１２と同じチップ上に実装されることを可能にすることは、データにアクセスするために必要とされる実行遅延の量を削減し得、それにより、階層的Ｚカリング動作のパフォーマンスを改善しうる。
【００５５】
[0060]蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために使用されるメモリユニットは、レンダリング対象内のタイル位置のすべてに関する蓄積されたカバレージマスクと蓄積された最も遠いＺ値とを記憶するために必要とされるメモリのサイズよりも小さいことがあり得るため、２つの異なるタイル位置が同じメモリエントリにマップする場合において、２つの異なるタイル位置に関するデータは互いに上書きする可能性がある。これは、保守的な最も遠いＺ値の品質（すなわち、保守的な最も遠いＺ値が実際の最も遠いＺ値にどれほど近いか）を低減し得るが、オンチップメモリを使用することによって達成されるパフォーマンスの利益は、場合によっては、データの上書きによるパフォーマンスにおけるいかなる減少にもまさり得る。
【００５６】
[0061]いくつかの例では、メモリユニットはキャッシュユニットであり得る。キャッシュユニットのサイズは、レンダリング対象内のタイル位置のすべてに関する蓄積された最も遠いＺ値と蓄積されたカバレージマスクとを記憶するために必要とされるキャッシュのサイズよりも小さいことがあり得る。加えて、キャッシュユニットは、基礎的なメモリに関連づけられないことがあり得る。すなわち、キャッシュユニットは、単に、他の場所に一次的に記憶されたデータのコピーを記憶するためのキャッシュされたデータストアとしてではなく、マージされたソースタイルデータ用の１次データストアとして働き得る。キャッシュユニットは、通常、そのようなキャッシュユニットがキャッシングサービスを提供する基礎的なメモリ空間よりも小さい量のデータを記憶するように設計される。したがって、キャッシュユニットは、しばしば、キャッシュ内のどこにデータが記憶されるかと、キャッシュ内でどのデータが上書きされるかとを決定するために、様々なマッピングポリシー（たとえば、ダイレクトマップ、セットアソシアティブ、フルアソシアティブなど）と、置換ポリシー（たとえば、最長時間未使用法、最小頻度使用法、ランダムなど）とを実施する。マージされたソースタイルデータを記憶するための１次ストレージユニットとしてキャッシュユニットを使用すると、たとえ、基礎的なメモリ内の余分なコピーをキャッシュユニットが保持しなくても、キャッシュユニット内のどこにデータが記憶されるかと、キャッシュユニット内でどのデータが上書きされるかとを決定するためのこれらの内蔵機構をグラフィックスシステムが活用することを可能にし得る。これは、設計を簡略化し得、および／またはマージされたソースタイルデータを記憶するためのメモリユニットを実装するために必要とされるエリアの量を削減し得る。
【００５７】
[0062]ＧＰＵ１２によって実行され得る階層的Ｚカリング技法のさらなる例として、ＧＰＵ１２がマージされたソースタイルデータをキャッシュユニットに記憶するとき、ＧＰＵ１２は、タイル位置に関する完全にカバーされたマージされていないソースタイルを処理することに応答してタイル位置に関するカリングＺ値が更新されているとき、タイル位置に関するキャッシュユニットのキャッシュラインを無効にし得る。たとえば、ＧＰＵ１２は、タイル位置に関するソースタイルがソースタイルに対応するプリミティブによって完全にカバーされること、およびソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いことを決定することに応答して、タイル位置に関連付けられたキャッシュラインを無効にし得る。タイル位置に関する完全にカバーされたマージされていないソースタイルを処理することに応答してカリングＺ値が更新された後、タイル位置に対応するマージされたソースタイルは、更新されたカリングＺ値よりも遠い保守的な最も遠いＺ値を有し得る。カリングＺ値がすでに使用されているカリングＺ値よりも遠い保守的な最も遠いＺ値に等しいように更新された場合、選別されたサンプルの量は削減され得、それにより、階層的Ｚカリングアルゴリズムの効率が低減される。そのようなタイル位置に関するマージされたソースタイルデータを記憶するキャッシュラインを無効にすることは、マージキャッシュに記憶された保守的な最も遠いＺ値がカリングＺ値を更新するために以後使用されないことを保証し得る。このようにしてマージキャッシュを空にすることは、結果として得られるカリングＺ値の品質を改善し得、それにより、階層的Ｚカリングアルゴリズムの廃棄効率を改善する。
【００５８】
[0063]図２は、図１のコンピューティングデバイス２のＣＰＵ６と、ＧＰＵ１２と、メモリ１０とをさらに詳細に示すブロック図である。図２に示されたように、ＣＰＵ６はＧＰＵ１２およびメモリ１０に通信可能に結合され、ＧＰＵ１２はＣＰＵ６およびメモリ１０に通信可能に結合される。ＧＰＵ１２は、いくつかの例では、ＣＰＵ６とともにマザーボード上に統合され得る。さらなる例では、ＧＰＵ１２は、ＣＰＵ６を含むマザーボードのポート内に取り付けられたグラフィックスカード上に実装され得る。さらなる例では、ＧＰＵ１２は、ＣＰＵ６と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる例では、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。
【００５９】
[0064]ＣＰＵ６は、ソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、ＧＰＵドライバ２８、およびオペレーティングシステム３０のいずれかを実行するように構成された、１つまたは複数のプロセッサ（たとえば、マイクロプロセッサ）を含み得る。いくつかの例では、ＣＰＵ６は、本開示に記載された技法のいずれかのすべてまたは一部をＣＰＵ６の１つまたは複数のプロセッサに実施させる命令を実行するように構成され得る。
【００６０】
[0065]ＧＰＵ１２は、コマンドエンジン３２と、１つまたは複数の処理ユニット３４と、メモリ３６とを含む。１つまたは複数の処理ユニット３４は、３Ｄグラフィックスレンダリングパイプラインを形成するように構成され得る。コマンドエンジン３２および処理ユニット３４は、そのような構成要素に起因する機能を実行するように構成された、専用ハードウェアユニット、ファームウェア、ソフトウェア、およびプロセッサの任意の組合せを含み得る。いくつかの例では、ＧＰＵ１２は、本開示に記載された技法のいずれかのすべてまたは一部をＧＰＵ１２の１つまたは複数のプロセッサに実施させる命令を実行するように構成され得る。
【００６１】
[0066]メモリ１０は、１つまたは複数のコマンド３８とプリミティブデータ４０とを記憶し得る。いくつかの例で、メモリ１０は、実行されたとき、本開示に記載された技法のいずれかのすべてまたは一部を１つまたは複数のプロセッサに実施させる命令を記憶し得る。
【００６２】
[0067]ソフトウェアアプリケーション２４は、１つまたは複数の３Ｄグラフィックスシーンおよび／または３Ｄグラフィックスオブジェクトをディスプレイ上に表示されるべき画像にレンダリングするためにＧＰＵ１２を使用するグラフィックスアプリケーションであり得る。ソフトウェアアプリケーション２４は、ＧＰＵ１２に３Ｄグラフィックスプリミティブのセットをラスタ化させ、レンダリングさせる命令を含み得る。ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６を介してＧＰＵドライバ２８に命令を発行し得る。グラフィックスＡＰＩ２６は、ソフトウェアアプリケーション２４から受信された命令をＧＰＵドライバ２８によって消費可能なフォーマットに変換するランタイムサービスであり得る。
【００６３】
[0068]ＧＰＵドライバ２８は、グラフィックスＡＰＩ２６を介してソフトウェアアプリケーション２４から命令を受信し、命令をサービスするためにＧＰＵ１２の動作を制御する。たとえば、ＧＰＵドライバ２８は、１つまたは複数のコマンド３８を構築し、コマンド３８をメモリ１０内に配置し、コマンド３８を実行するようにＧＰＵ１２に命令し得る。いくつかの例では、ＧＰＵドライバ２８は、コマンド３８をメモリ１０内に配置し、オペレーティングシステム３０、たとえば、１つまたは複数のシステム呼出しを介してＧＰＵ１２と通信し得る。
【００６４】
[0069]オペレーティングシステム３０は、ソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６、およびＧＰＵドライバ２８がその上で実行されるソフトウェアプラットフォームを提供し得る。オペレーティングシステム３０は、ＣＰＵ６とメモリ１０とＧＰＵ１２との間でデータを通信および転送することのハードウェア詳細を管理し得る。
【００６５】
[0070]コマンド３８は、１つまたは複数の状態コマンドと１つまたは複数の描画呼出しコマンドとを含み得る。状態コマンドは、たとえばプリミティブタイプなどの、ＧＰＵ１２内の状態変数のうちの１つまたは複数を変更するようにＧＰＵ１２に命令し得る。描画呼出しコマンドは、メモリ１０に記憶された１つまたは複数の頂点のグループによって定義された（たとえば、頂点バッファ内で定義された）幾何形状をレンダリングするようにＧＰＵ１２に命令し得る。１つまたは複数の頂点のグループによって定義された幾何形状は、いくつかの例では、レンダリングされるべき複数のプリミティブ（たとえば、プリミティブデータ４０）に対応し得る。一般に、描画呼出しコマンドは、メモリ１０の定義されたセクション（たとえば、バッファ）に記憶された頂点のすべてをレンダリングするためにＧＰＵ１２を起動し得る。言い換えると、ＧＰＵ１２が描画呼出しコマンドを受信すると、制御は、メモリ１０の定義されたセクション（たとえば、バッファ）内の頂点によって表される幾何形状とプリミティブとをレンダリングするために、ＧＰＵ１２に渡される。
【００６６】
[0071]コマンドエンジン３２は、メモリ１０に記憶されたコマンド３８を取り出し、実行するように構成される。コマンドエンジン３２は、ＧＰＵ１２のレンダリング状態を管理し、処理ユニット３４がグラフィックスレンダリングパイプラインを実施するように処理ユニット３４の動作を制御し、グラフィックスレンダリングパイプラインを介してグラフィックスデータをレンダリング対象内にレンダリングさせ得る。
【００６７】
[0072]状態コマンドを受信することに応答して、コマンドエンジン３２は、状態コマンドに基づいてＧＰＵ内の１つまたは複数の状態レジスタを特定の値に設定し、および／または状態コマンドに基づいて固定された機能の処理ユニット３４のうちの１つまたは複数を構成するように構成され得る。描画呼出しコマンドを受信することに応答して、コマンドエンジン３２は、メモリ１０内の頂点によって表される幾何形状（たとえば、プリミティブデータ４０によって表される幾何形状）を処理ユニット３４にレンダリングさせるように構成され得る。コマンドエンジン３２は、シェーダプログラム結合コマンドを受信し、シェーダプログラム結合コマンドに基づいて、特定のシェーダプログラムをプログラマブル処理ユニット３４のうちの１つまたは複数にロードし得る。
【００６８】
[0073]処理ユニット３４は、１つまたは複数の処理ユニットを含み得、それらの各々は、プログラマブル処理ユニットまたは固定された機能の処理ユニットであり得る。プログラマブル処理ユニットは、たとえば、ＣＰＵ６からＧＰＵ１２上にダウンロードされた１つまたは複数のシェーダプログラムを実行するように構成されたプログラマブルシェーダユニットを含み得る。シェーダプログラムは、いくつかの例では、たとえば、高水準シェーディング言語（ＨＬＳＬ）、ＯｐｅｎＧＬシェーディング言語（ＧＬＳＬ）、Ｃ  ｆｏｒ  Ｇｒａｐｈｉｃｓ（Ｃｇ）シェーディング言語などの高水準シェーディング言語で書かれたプログラムのコンパイルされたバージョンであり得る。
【００６９】
[0074]プログラマブルシェーダユニットは、いくつかの例では、並列に動作するように構成された複数の処理ユニット、たとえば単一命令多重データ（ＳＩＭＤ）パイプラインを含み得る。プログラマブルシェーダユニットは、シェーダプログラム命令を記憶するプログラムメモリと、実行状態レジスタ、たとえば、実行されているプログラムメモリ内の現在の命令または取り出されるべき次の命令を示すプログラムカウンタレジスタとを有し得る。処理ユニット３４内のプログラマブルシェーダユニットとしては、たとえば、頂点シェーダユニット、ピクセルシェーダユニット、幾何形状シェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、コンピュートシェーダユニット、および／または統合シェーダユニットがあり得る。
【００７０】
[0075]固定された機能の処理ユニットは、ある特定の機能を実行するように配線接続されたハードウェアを含み得る。固定された機能のハードウェアは、たとえば様々な機能を実行するように、１つまたは複数の制御信号を介して構成可能であり得るが、固定された機能のハードウェアは、通常、ユーザによってコンパイルされたプログラムを受付け得るプログラムメモリを含まない。いくつかの例では、処理ユニット３４内の固定された機能の処理ユニットは、たとえば、深度テスト、シザーテスト、アルファブレンドなどのラスタ演算を実行する処理ユニットを含み得る。
【００７１】
[0076]メモリ３６は、階層的Ｚカリングを実行するときに使用されるマージされたソースタイルデータを記憶するように構成され得る。マージされたソースタイルデータは、レンダリング対象内の様々なタイル位置に関する蓄積されたカバレージマスクおよび／または蓄積された保守的な最も遠いＺ値を含み得る。特定のタイル位置に関する蓄積されたカバレージマスクは、その特定のタイル位置に関するマージされている部分的にカバーされた入力タイルの各々についてのカバレージマスクのマージされたバージョンに対応し得る。入力タイルについてのカバレージマスクは、ビットの各々が、入力タイルに対応するプリミティブがそれぞれのビットに対応するサンプルをカバーするかどうかを示す、入力タイル内のサンプルごとのビットを含み得うる。プリミティブをラスタ化することに応答してサンプルの入力タイルが生成された場合、プリミティブはサンプルの入力タイルに対応し得る。複数のカバレージマスクのマージされたバージョンは、複数のカバレージマスクのすべてに対して実行されたビット単位のＯＲ演算の結果に対応し得る。特定のタイル位置に関する蓄積された保守的な最も遠いＺ値は、その特定のタイル位置に関するマージされている部分的にカバーされた入力タイルの各々についての最も遠いＺ値のうちの最大値に対応し得る。
【００７２】
[0077]特定のタイル位置に関する蓄積された保守的な最も遠いＺ値は、代替として、特定のタイル位置に関する保守的な最も遠いＺ値、またはタイル位置に対応するマージされたソースタイルに関する保守的な最も遠いＺ値と呼ばれ得る。同様に、特定のタイル位置に関する蓄積されたカバレージマスクは、代替として、特定のタイル位置に関するカバレージマスク、またはタイル位置に対応するマージされたソースタイルに関するカバレージマスクと呼ばれ得る。
【００７３】
[0078]いくつかの例では、メモリ３６は、複数のマージされたソースタイルのデータレコードを記憶するように構成され得る。マージされたソースタイルのデータレコードの各々は、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み得る。言い換えれば、特定のタイル位置に関連付けられた（すなわち、特定のマージされたソースタイルに関連付けられた）マージされたソースタイルデータは、タイル位置に関するマージされたソースタイルのデータレコードと呼ばれ得る。そのような例では、メモリ３６は、いくつかの例では、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し得、ここで、Ｎはレンダリング対象内のタイル位置の総数である。
【００７４】
[0079]いくつかの例では、タイル位置に関するデータレコードに含まれるマージされたソースタイルに関連付けられたデータは、タイル位置に関連付けられたマージされたソースタイルに関する保守的な最も遠いＺ値を含み得る。さらなる例では、タイル位置に関するデータレコードに含まれるマージされたソースタイルに関連付けられたデータは、タイル位置に関連付けられたマージされたソースタイルに関するカバレージマスクを含み得る。さらなる例では、タイル位置に関するデータレコードに含まれるマージされたソースタイルに関連付けられたデータは、タイル位置に関連付けられたマージされたソースタイルに関する保守的な最も遠いＺ値と、タイル位置に関連付けられたマージされたソースタイルに関するカバレージマスクの両方を含み得る。
【００７５】
[0080]メモリ３６は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、キャッシュユニットなどの、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含み得る。いくつかの例では、メモリ３６はオンチップメモリであり得る。オンチップバッファメモリは、その上にＧＰＵ１２が形成され、配置され、および／または配設されるマイクロチップ、集積回路、および／またはダイと同じであるマイクロチップ、集積回路、および／またはダイ上に形成され、配置され、および／または配設されるメモリを指す。
【００７６】
[0081]さらなる例では、メモリ３６はキャッシュユニット（たとえば、オンチップキャッシュユニット）であり得る。そのような例では、キャッシュユニットは、基礎的なメモリに関連付けられないことがあり得る。キャッシュユニットは、基礎的なメモリにアクセスせずにすべての読取り要求と書込み要求とをサービスし得るという意味で、キャッシュユニットは、基礎的なメモリに関連付けられないことがあり得る。その上、マージされたソースタイルに関連付けられた入力データを記憶するために利用可能なキャッシュユニット内の十分なマップされるメモリ空間が存在しない場合、キャッシュユニットは、別のマージされたソースタイルに関連付けられたデータを入力データで上書きし得る。たとえば、メモリ３６は、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、第１のマージされたソースタイルのデータレコードをキャッシュユニット内のキャッシュラインに書き込み、第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするように構成され得る。
【００７７】
[0082]メモリ３６は、単に、別の基礎的なメモリに一次的に記憶されたデータのコピーを記憶するためのキャッシュされたデータストアとしてではなく、マージされたソースタイルデータ用の１次データストアとして働くことができる。しかしながら、キャッシュユニットはキャッシュにアクセスしている階層的Ｚカリングアルゴリズムに通知しないでデータを上書きし得るので、１次データストアはデータストア内のデータを保持することを保証されない。
【００７８】
[0083]プリミティブデータ４０は、レンダリングされる１つまたは複数のプリミティブを示すデータを含み得る。場合によっては、プリミティブデータ４０は、レンダリングされるプリミティブを幾何学的に定義し得る。プリミティブを幾何学的に定義することは、頂点（または制御点）のセットおよび対応する頂点属性によってプリミティブを定義することを指し得る。いくつかの例では、プリミティブデータ４０は、複数の頂点、頂点リスト、および／または頂点バッファの形態をとり得る。さらなる例では、プリミティブデータ４０は、インデックスバッファと組み合わされた頂点バッファの形態をとり得る。そのような例では、頂点バッファは頂点を定義することができ、インデックスバッファは、どの頂点がプリミティブの各々を定義するために使用されるのかを指定し得る。
【００７９】
[0084]プリミティブデータ４０に含まれる頂点の各々は、たとえば位置座標、法線座標、テクスチャ座標などの１つまたは複数の属性を含み得る。頂点は、幾何プリミティブ（たとえば、点、線、三角形など）の頂点、および／またはより高次のプリミティブ（たとえば、ベジエ面などのより高次の面）の制御点に概念的に対応し得る。場合によっては、頂点の各々は、１つまたは複数の頂点のグループにグループ化され得、頂点のこれらのグループの各々は、単一のプリミティブに対応し得る。
【００８０】
[0085]幾何学的に定義されたプリミティブの形状は、いくつかの例では、必ずしもプリミティブデータ４０には含まれないさらなるデータによって定義され得る。さらなるデータは、１つもしくは複数の事前に決定されたプリミティブタイプのセットからの指定されたプリミティブタイプ、１つもしくは複数の数学の関数、および／または１つもしくは複数のテッセレーション技法のうちの１つまたは複数を含み得る。
【００８１】
[0086]いくつかの例では、指定されたプリミティブタイプは、ＧＰＵ１２内のレンダリング状態変数として記憶され得、ソフトウェアアプリケーション２４によって構成可能であり得る。指定されたプリミティブタイプは、場合によっては、結果として得られるレンダリングされたプリミティブの形状（たとえば、点、線、三角形など）、および／またはプリミティブデータ４０に含まれる頂点の連結性（たとえば、三角形ストリップ、三角形ファンなど）を定義し得る。いくつかの例では、様々なプリミティブタイプは、処理ユニット３４によって実施されるグラフィックスパイプラインが処理することが可能なプリミティブトポロジーのセットに対応し得る。さらなる例では、様々なプリミティブタイプは、グラフィックスＡＰＩ２６によって定義され、ソフトウェアアプリケーション２４による使用に利用可能な、プリミティブトポロジーのセットに対応し得る。
【００８２】
[0087]１つもしくは複数の数学の関数および／または１つもしくは複数のテッセレーション技法は、ＧＰＵ１２の１つまたは複数のシェーダユニット（たとえば、ハルシェーダユニットおよび／またはドメインシェーダユニット）上で実行するように構成された１つまたは複数のシェーダプログラムにおいて指定され得る。数学の関数は、曲線および／または曲面を有するプリミティブを定義するために使用され得る。１つまたは複数のテッセレーション技法は、入力プリミティブの形状および／または曲率を近似する複数のモザイク状のプリミティブによってプリミティブを定義するために使用され得る。
【００８３】
[0088]動作中、ＣＰＵ６上で実行中のソフトウェアアプリケーション２４（たとえば、グラフィックスアプリケーション）は、メモリ１０内にプリミティブデータ４０を配置し、ＧＰＵ１２に１つまたは複数の描画呼出しを発し得る。プリミティブデータ４０は、レンダリングされるべき１つまたは複数のグラフィックスプリミティブを幾何学的に定義し得る。１つまたは複数の描画呼出しを受取ることに応答して、コマンドエンジン３２は、処理ユニット３４によって実施される３Ｄグラフィックスパイプラインにプリミティブをレンダリングさせる。３Ｄグラフィックスパイプラインは、プリミティブデータ４０によって定義されるプリミティブの頂点を処理する幾何形状処理段階と、プリミティブのラスタ化されたバージョンに対応する１つまたは複数のサンプル（たとえば、ピクセル）を生成するラスタライザ段階と、プリミティブデータ４０によって定義されるプリミティブ用の結果として得られるラスタ化画像を生成するためにサンプルを処理する１つまたは複数のピクセル処理段階とを含み得る。
【００８４】
[0089]本開示によれば、処理ユニット３４によって実施される３Ｄグラフィックスパイプラインは、本開示に記載された階層的Ｚカリング技法のいずれかを実行する階層的Ｚカリング段階を含み得る。いくつかの例では、階層的Ｚカリング段階は、３Ｄグラフィックスパイプライン内で、ラスタライザの後、および１つまたは複数のピクセル処理段階より前に配置され得る。本開示に記載された階層的Ｚカリング技法は、いくつかの例では、階層的Ｚカリングを実行ために使用されるＺカリング値の品質を改善し得、それにより、階層的Ｚカリング段階の廃棄率を改善する。その上、本開示に記載された階層的Ｚカリング技法は、いくつかの例では、他のシステムに比べて、マージされたソースタイルデータを記憶するために比較的小さいメモリユニットまたはキャッシュユニットを使用することが可能であり得るし、それにより、比較的高い階層的Ｚカリングの廃棄率を達成するために必要とされるメモリフットプリントおよび／またはメモリ帯域幅が低減される。このようにして、本開示の技法は、ＧＰＵ１２のパフォーマンス、ＧＰＵ１２のメモリ帯域幅使用量、および／またはＧＰＵ１２によって使用されるメモリフットプリントを改善するために使用され得る。
【００８５】
[0090]図３は、本開示の階層的Ｚカリング技法を実施するために使用され得る例示的なグラフィックスパイプライン５０を示すブロック図である。グラフィックスパイプライン５０は、１つまたは複数の幾何形状処理段階５２と、ラスタライザ段階５４と、Ｚカリング段階５６と、１つまたは複数のピクセル処理段階５８と、低解像度Ｚバッファ（ＬＲＺバッファ）６０と、マージキャッシュ６２とを含む。いくつかの例では、グラフィックスパイプライン５０は、図２に示されたＧＰＵ１２内に実装され得る。そのような例では、幾何形状処理段階５２、ラスタライザ段階５４、Ｚカリング段階５６、およびピクセル処理段階５８は、いくつかの例では、ＧＰＵ１２の処理ユニット３４のうちの１つまたは複数によって実装され得る。同様にそのような例では、ＬＲＺバッファ６０は、いくつかの例では、コンピューティングデバイス２のメモリ１０内に実装され得る。同様にそのような例では、マージキャッシュ６２は、いくつかの例では、ＧＰＵ１２のメモリ３６内に実装され得る。
【００８６】
[0091]幾何形状処理段階５２は、入力プリミティブを受信し、入力プリミティブに基づいてラスタ化プリミティブを生成するように構成される。ラスタ化プリミティブを生成するために、幾何形状処理段階５２は、入力プリミティブに基づいて幾何形状処理動作を実行し得る。幾何形状処理動作としては、たとえば、頂点シェーディング、頂点変換、ライティング、ハードウェアテッセレーション、ハルシェーディング、ドメインシェーディング、幾何形状シェーディングなどがあり得る。
【００８７】
[0092]入力プリミティブは、グラフィックスレンダリングパイプラインの幾何形状処理段階によって処理されることが可能なプリミティブを指し得る。いくつかの例では、入力プリミティブは、グラフィックスパイプライン５０によって実施されるグラフィックスＡＰＩによって定義され得る。たとえば、入力プリミティブは、Ｍｉｃｒｏｓｏｆｔ  ＤｉｒｅｃｔＸ  １１  ＡＰＩにおける入力プリミティブトポロジーに対応し得る。入力プリミティブは、点、線、線リスト、三角形、三角形ストリップ、パッチなどを含み得る。いくつかの例では、入力プリミティブは、レンダリングされるべき入力プリミティブを幾何学的に定義する複数の頂点に対応し得る。さらなる例では、入力プリミティブは、図２のメモリ１０に記憶されるプリミティブデータ４０に対応し得る。
【００８８】
[0093]ラスタ化プリミティブは、ラスタライザ段階５４によって処理されることが可能なプリミティブに対応し得る。いくつかの例では、ラスタ化プリミティブは、点、線、三角形、線ストリーム、三角形ストリームなどを含み得る。さらなる例では、各入力プリミティブは、複数のラスタ化プリミティブに対応し得る。たとえば、パッチは、複数のラスタ化プリミティブの中にモザイク化され得る。いくつかの例では、ラスタ化プリミティブは、レンダリングされるべきラスタ化プリミティブを幾何学的に定義する複数の頂点に対応し得る。
【００８９】
[0094]ラスタライザ段階５４は、ラスタ化プリミティブを受信し、ラスタ化プリミティブに基づいて１つまたは複数のソースタイルを生成するように構成される。ソースタイルの各々は、複数のタイル位置のうちのそれぞれのタイル位置においてプリミティブのラスタ化バージョンを表すことができる。受信されたラスタ化プリミティブの各々について、ラスタライザ段階５４は、それぞれのプリミティブ用の１つまたは複数のソースタイルを生成するために、そのプリミティブをラスタ化し得る。
【００９０】
[0095]レンダリング対象は、タイルの各々が複数のサンプルを含む複数のタイル（たとえば、領域）に再分割され得る。サンプルは、ピクセル、または、代替としてピクセルのサブサンプルを指し得る。ピクセルは、サンプリングポイントのセットがディスプレイと同じ解像度を有する、ラスタ化画像用のサンプリングポイントのセット内の特定のサンプリングポイントに関連付けられたデータを指し得る。ピクセルのサブサンプルは、サンプリングポイントのセットがディスプレイの解像度よりも大きい解像度を有する、ラスタ化画像用のサンプリングポイントのセット内の特定のサンプリングポイントに関連付けられたデータを指し得る。サンプルの各々に関連付けられたデータとしては、たとえば、色データ（たとえば、赤、緑、青（ＲＧＢ））、透過性データ（たとえば、アルファ値）、および深度データ（たとえば、Ｚ値）があり得る。
【００９１】
[0096]宛先サンプルは、特定のサンプル位置について処理された１つまたは複数のソースサンプルの合成バージョンを指し得る。宛先サンプルは、特定のサンプル位置に関するレンダリング対象（たとえば、フレームバッファまたはビニングバッファ）に記憶されたサンプルデータに対応し得、そして、シーン内のプリミティブの各々が処理されるときに更新され得る。宛先サンプルは、様々なプリミティブに関連付けられた複数のソースサンプルから合成されたサンプルデータを含み得る。対照的に、ソースサンプルは、単一の幾何形状プリミティブに関連付けられ、そして、同じサンプル位置に関する他のソースサンプルといっしょにまだ合成されていないサンプルデータを指し得る。ソースサンプルは、いくつかの例では、ラスタライザによって生成され、対応する宛先サンプルとマージおよび／または合成される前に、１つまたは複数のピクセル処理段階によって処理され得る。
【００９２】
[0097]同様に、宛先タイルは、レンダリング対象の特定の領域に関連付けられた複数の宛先サンプルを指し得る。宛先タイルは、複数のソースタイルの合成バージョンであり得、ソースタイルの各々は異なるプリミティブに対応し得る。宛先タイルは、シーン内のプリミティブの各々が処理されるときに更新され得る。ソースタイルは、レンダリング対象の特定の領域に関連付けられた複数のソースサンプルを指し得る。ソースタイルは、単一の幾何形状プリミティブに関連付けられ得、同じサンプル位置に関する他のソースタイルとまだ合成されていない。ソースタイルは、いくつかの例では、ラスタライザによって生成され、対応する宛先タイルとマージおよび／または合成される前に、１つまたは複数のピクセル処理段階によって処理され得る。
【００９３】
[0098]ソースタイルと宛先タイルの各々の中のサンプルは、レンダリング対象の領域のサンプルに対応し得る。レンダリング対象の領域の位置は、タイル位置と呼ばれ得る。同じタイル領域に関連付けられた２つのタイルは、コロケートされたタイルと呼ばれ得る。一般に、選別されていないソースタイルは、コロケートされた宛先タイルに合成および／またはマージされ得る。
【００９４】
[0099]プリミティブをラスタ化するために、ラスタライザ段階５４は、レンダリング対象のどのタイル位置がプリミティブによってカバーされるかを決定し、プリミティブによってカバーされるタイル位置の各々用のソースタイルを生成し得る。プリミティブの縁部または内部がタイル位置に関連付けられたサンプルのうちの少なくとも１つをカバーする場合、タイル位置はプリミティブによってカバーされ得る。プリミティブのエリアがサンプル位置を含む場合、サンプルはプリミティブによってカバーされ得る。
【００９５】
[0100]ソースタイルの各々は、複数のサンプルポイントにおいてサンプリングされたプリミティブを示すデータを含み得る。ソースタイルに含まれるデータによって示されたプリミティブは、ソースタイルを生成するためにラスタライザ段階５４がラスタ化したプリミティブであり得、そして、ソースタイルに対応すると言われ得る。プリミティブがサンプリングされるサンプリングポイントは、ソースタイルのタイル位置に対応し得る。
【００９６】
[0101]いくつかの例では、ラスタライザ段階５４によって生成されるソースタイルの各々について、ラスタライザ段階５４は、以下の、ソースタイルに関するカバレージマスク、ソースタイルが完全にカバーされる（すなわち、完璧にカバーされる）かどうかを示す情報、ソースタイルに関する保守的な最も近いＺ値、およびソースタイルに関する保守的な最も遠いＺ値のうちの１つまたは複数を生成することもできる。
【００９７】
[0102]ソースタイルに関するカバレージマスクは、ソースタイルのどのサンプルがソースタイルに対応するプリミティブによってカバーされるかを示し得る。たとえば、カバレージマスクは、ビットの各々がカバレージマスクに対応するソースタイル内の複数のサンプルのうちのそれぞれのサンプルに対応する、複数のビットを含み得る。ビットの各々の値は、ソースタイル内のサンプルのうちのそれぞれのサンプルが、ソースタイルに対応するプリミティブによってカバーされるかどうかを示し得る。たとえば、カバレージマスク内の特定のビットについての「１」の値は、そのビットに対応するサンプルがカバーされることを示し得、カバレージマスク内の特定のビットについての「０」の値は、そのビットに対応するサンプルがカバーされないことを示し得る。
【００９８】
[0103]ソースタイルが完全にカバーされるかどうかを示す情報は、ソースタイル内のサンプルのすべてがソースタイルに対応するプリミティブによってカバーされるかどうかを示し得る。いくつかの例では、ソースタイルが完全にカバーされるかどうかを示す情報は、サンプルのすべてがカバーされるかどうかに応じて、２つの異なる値のうちの１つに等しい１つまたは複数のビットであり得る。ソースタイルに含まれるサンプルのすべてがソースタイルに対応するプリミティブによってカバーされる場合、ソースタイルは完全にカバーされると言われ得る。そうではなく、ソースタイルに含まれるサンプルのすべてに満たないサンプルがソースタイルに対応するプリミティブによってカバーされる場合、ソースタイルは完全にはカバーされていないと言われ得る。ソースタイル内のサンプルの少なくとも１つがソースタイルに対応するプリミティブによってカバーされるが、サンプルのすべてをカバーしてはいない場合、タイルは部分的にカバーされたタイルであると言われ得る。言い換えれば、部分的にカバーされたタイルは、完全にはカバーされてないが、ソースタイルに対応するプリミティブによってカバーされる少なくとも１つのサンプルを有するタイルを指し得る。
【００９９】
[0104]ソースタイルに関する保守的な最も近いＺ値は、ソースタイル内のカバーされたサンプルのすべてに関する最も近いＺ値と同じ近さか、またはそれよりも近い値を指し得る。一般に、ソースタイル内のサンプルの各々は、関連するＺ値を有し得る。タイル内の個々のサンプルに関するｚ値は、サンプルとサンプルを含むレンダリングされたグラフィックスフレームに関連付けられたカメラ（たとえば、ビューポート）の方向に直交する平面との間の距離を示す値を指し得る。ソースタイルに関する保守的な最も近いＺ値は、レンダリングされたグラフィックスフレームに関連付けられたカメラに最も近いサンプルに関するＺ値と同じ近さか、またはそれよりも近い値であり得る。いくつかの例では、ソースタイルに関する保守的な最も近いＺ値は、ソースタイルに関する最も近いＺ値に等しいことがあり得る。この場合、ソースタイルに関する保守的な最も近いＺ値は、ソースタイルに関する最も近いＺ値と呼ばれ得る。
【０１００】
[0105]ソースタイルに関する保守的な最も遠いＺ値は、ソースタイル内のカバーされたサンプルのすべてに関する最も遠いＺ値と同じ遠さか、またはそれよりも遠い値を指し得る。いくつかの例では、ソースタイルに関する保守的な最も遠いＺ値は、ソースタイルに関する最も遠いＺ値に等しいことがあり得る。この場合、ソースタイルに関する保守的な最も遠いＺ値は、ソースタイルに関する最も遠いＺ値と呼ばれ得る。
【０１０１】
[0106]様々なグラフィックスシステムは、Ｚ値を生成するために様々なタイプの座標系を使用し得る。いくつかのグラフィックスシステムは、サンプルがカメラから離れている距離ともに増大するＺ値を生成し得る。そのようなシステムに関して、本開示が最も近いＺ値または保守的な最も近いＺ値に言及するときはいつでも、そのような言及は、それぞれ、最小Ｚ値および保守的な最小Ｚ値と呼ばれ得る。同様に、そのようなシステムの場合、本開示が最も遠いＺ値または保守的な最も遠いＺ値に言及するときはいつでも、そのような言及は、それぞれ、最大Ｚ値および保守的な最大Ｚ値と呼ばれ得る。
【０１０２】
[0107]他のグラフィックスシステムは、サンプルがカメラから離れている距離ともに減少するＺ値を生成し得る。そのようなシステムの場合、本開示が最も近いＺ値または保守的な最も近いＺ値に言及するときはいつでも、そのような言及は、それぞれ、最大Ｚ値および保守的な最大Ｚ値と呼ばれ得る。同様に、そのようなシステムの場合、本開示が最も遠いＺ値または保守的な最も遠いＺ値に言及するときはいつでも、そのような言及は、それぞれ、最小Ｚ値および保守的な最小Ｚ値と呼ばれ得る。
【０１０３】
[0108]本開示が、最小Ｚ値もしくは最大Ｚ値、または保守的な最小Ｚ値もしくは最大Ｚ値に言及する場合、そのようなＺ値は、Ｚ値がカメラから離れている距離とともに増大または減少する、特定のＺ座標系内の最小Ｚ値および最大Ｚ値を指していると理解されるべきである。別のＺ座標系に本開示の技法を実施するために、最小Ｚ値および最大Ｚ値への言及の役割は、交換される必要があり得ることがさらに理解されるべきである。一般に、Ｚ座標系が増大座標系か減少座標系かを指定せずに、本開示において最小Ｚ値または最大Ｚ値が言及される場合、これらのＺ値は、カメラから離れている距離が増大するにつれてＺ値が増大する増大Ｚ座標系内の最小Ｚ値または最大Ｚ値を指していることを理解されたい。
【０１０４】
[0109]Ｚカリング段階５６は、１つまたは複数のソースタイルと、ソースタイルの各々に関するカバレージマスクと、ソースタイルの各々が完全にカバーされるかどうかを示す情報と、ソースタイルの各々に関する保守的な最も近いＺ値と、ソースタイルの各々に関する保守的な最も遠いＺ値とをラスタライザ段階５４から受信し、選別されたソースタイルを生成するために、受信された情報に基づいてソースタイルを選別する。選別されたソースタイルはピクセル処理段階５８に供給される。
【０１０５】
[0110]選別されたソースタイルを生成するために、Ｚカリング段階５６は、ソースタイルの保守的な最も近いＺ値がタイル位置に関連付けられたカリングＺ値よりも遠いかどうかに基づいて、タイル位置に関連付けられたサンプルのソースタイルをグラフィックスパイプライン５０から選択的に廃棄し得る。カリングＺ値は、タイル位置に対応する宛先タイルのすべてのサンプルについての保守的な最も遠いｚ値を示し得る。たとえば、Ｚカリング段階５６は、ソースタイルの保守的な最も近いＺ値がタイル位置に関連付けられたカリングＺ値よりも遠いと決定することに応答して、ソースタイルを廃棄し、ソースタイルの保守的な最も近いＺ値がタイル位置に関連付けられたカリングＺ値よりも遠くないと決定することに応答して、ソースタイルを廃棄しないことがあり得る。
【０１０６】
[0111]ソースタイルを廃棄することは、１つまたは複数の次のピクセル処理段階５８にソースタイルを渡さないことを伴い得る。言い換えれば、ソースタイルが廃棄される場合、Ｚカリング段階５６は、選別されたソースタイルのセットに前記ソースタイルを含めないことがあり得る。ソースタイルを廃棄しないことは、１つまたは複数の次のピクセル処理段階５８にソースタイルを渡すことを伴い得る。言い換えれば、ソースタイルが廃棄されない場合、Ｚカリング段階５６は、選別されたソースタイルのセットに前記ソースタイルを含め得る。
【０１０７】
[0112]ＬＲＺバッファ６０は、カリングＺ値のセットを記憶し得る。カリングＺ値のセットは、レンダリング対象におけるタイル位置の各々に関するカリングＺ値を含み得る。カリングＺ値の各々は、複数の宛先タイルのうちの対応する宛先タイル内のサンプルのすべてについての保守的な最も遠いｚ値をし得る。カリングＺ値に関連付けられたタイル位置が宛先タイルに関するタイル位置と同じである場合、宛先タイルはカリングＺ値に対応し得る。
【０１０８】
[0113]いくつかの例では、ＬＲＺバッファ６０は、グラフィックスパイプライン５０が形成されるマイクロチップとは異なるマイクロチップ上に位置されるオフチップメモリであり得る。たとえば、図１および図２に示されたコンピューティングデバイス２において、ＬＲＺバッファ６０はメモリ１０内に位置し得る。さらなる例では、ＬＲＺバッファ６０は、その上にグラフィックスパイプライン５０が形成されるマイクロチップ（たとえば、その上にＧＰＵ１２が形成されるマイクロチップ）と同じマイクロチップ上に位置される、および／または形成されるオンチップメモリであり得る。ＬＲＺバッファ６０は、たとえばランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）などの、１つまたは複数の揮発性のメモリまたはストレージデバイスを含み得る。
【０１０９】
[0114]カリングＺ値は対応する宛先タイルの保守的な最も遠いＺ値を示し得るが、宛先タイルはＺカリング段階５６によって実際に生成されないことがあり得ることに留意すべきである。代わりに、宛先タイルは、グラフィックスパイプライン５０内のピクセル処理段階５８によって生成される得、Ｚカリング段階５６は、必ずしも実際の宛先タイルにアクセスするとは限らないことがあり得る。しかしながら、Ｚカリング段階５６は、カリングＺ値がピクセル処理段階５８によって次に生成される宛先タイル内の最も遠いＺ値と少なくとも同じ遠さであることを保証する方式で、カリングＺ値を更新し得る。
【０１１０】
[0115]Ｚカリング段階５６は、タイル位置に対応するソースタイルに関連付けられたカバレージマスク、ソースタイルが完全にカバーされるかどうかを示す情報、ソースタイルに関する保守的な最も遠いＺ値、ソースタイルに関する保守的な最も近いＺ値、およびタイル位置に関するカリングＺ値のうちの１つまたは複数に基づいて、タイル位置に関するカリングＺ値を更新し得る。ソースタイルがＺカリング段階５６によって処理されるたびに、Ｚカリング段階５６は、ソースタイルに対応するタイル位置に関するカリングＺ値が更新されるべきかどうかを決定し得る。いくつかの例では、ソースタイルが廃棄されるべきとＺカリング段階５６が決定した場合、Ｚカリング段階５６は、カリングＺ値が更新されるべきではないと決定し得る。ソースタイルが廃棄されるべきではないとＺカリング段階５６が決定した場合、Ｚカリング段階５６は、ソースタイルが完全にカバーされるか部分的にカバーされるかに応じて１つまたは複数の技法を使用して、ソースタイルに対応するタイル位置に関するカリングＺ値が更新されるべきであるかどうかを決定し得る。
【０１１１】
[0116]完全にカバーされたソースタイルに関して、Ｚカリング段階５６は、ソースタイルに関する保守的な最も遠いＺ値がソースタイルに対応するタイル位置に関するカリングＺ値よりも近いかどうかを決定し得る。ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりも近い場合、Ｚカリング段階５６は、ソースタイルに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を設定し得る。ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりも近くない場合、Ｚカリング段階５６は、前のカリングＺ値を維持し得る（すなわち、カリングＺ値を更新しない）。
【０１１２】
[0117]本開示によれば、部分的にカバーされたソースタイルの場合、Ｚカリング段階５６は、ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、ソースタイルをタイル位置に関するマージされたソースタイルと選択的にマージし得る。たとえば、Ｚカリング段階５６は、ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いと決定することに応答して、ソースタイルをタイル位置に関するマージされたソースタイルとマージし、ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近くないと決定することに応答して、ソースタイルをタイル位置に関するマージされたソースタイルとマージしないことがあり得る。
【０１１３】
[0118]このようにしてソースタイルを選択的にマージすることは、Ｚカリングを実行するために使用されるカリングｚ値の品質を改善し得、これは、Ｚカリング段階５６によって実行されるＺカリングアルゴリズムの拒絶の効率を改善し得る。Ｚカリング段階５６によって実行されるＺカリングアルゴリズムの拒絶の効率を改善することは、ピクセル処理段階５８によって実行される必要がある処理作業負荷を低減し得、および／またはピクセル処理段階５８によって使用されるメモリ帯域幅を低減し得る。このようにして、ソースタイルを選択的にマージするための本開示に記載された技法は、階層的Ｚカリングを実行するグラフィックスプロセッサのパフォーマンスおよび／またはメモリ帯域幅使用量を改善し得る。
【０１１４】
[0119]マージされたソースタイルは、レンダリング対象の特定の領域に関連付けられた複数のマージされたサンプルに概念的に対応し得る。マージされたサンプルの各々は、それぞれのサンプル位置に関連付けられ、マージされたソースタイルに対応する部分的にカバーされたソースタイルのすべてに関するそれぞれのサンプル位置にあるサンプルのマージされたバージョンに概念的に対応し得る。それぞれのサンプル位置にあるサンプルのマージされたバージョンは、それぞれのサンプル位置にあるサンプルの合成されたバージョンに対応し得る。部分的にカバーされたソースタイルがマージされたソースタイルにマージされた場合、部分的にカバーされたソースタイルは、マージされたソースタイルに対応し得る。
【０１１５】
[0120]マージされたソースタイルは複数のマージされたサンプルに概念的に対応し得るが、いくつかの例では、サンプル固有のデータは、必ずしもマージされたソースタイル用に記憶、記録、および／または合成されない。代わりに、そのような例では、グラフィックスパイプライン５０は、いくつかの例では、マージされたソースタイルに関する保守的な最も遠いＺ値および／またはカバレージマスクを記憶し得る。
【０１１６】
[0121]マージされたソースタイルに関する保守的な最も遠いＺ値は、マージされたソースタイル内のカバーされたサンプルのすべてに関する最も遠いＺ値と同じ遠さか、またはそれよりも遠い値を指し得る。いくつかの例では、マージされたソースタイルに関する保守的な最も遠いＺ値は、マージされたソースタイル内のすべてのカバーされたサンプルに関する最も遠いＺ値に等しいことがあり得る。この場合、マージされたソースタイルに関する保守的な最も遠いＺ値は、マージされたソースタイルに関する最も遠いＺ値と呼ばれ得る。
【０１１７】
[0122]マージされたソースタイルに関する保守的な最も遠いＺ値が、マージされたソースタイル内のカバーされたサンプルのすべてについての最も遠いＺ値に等しい遠さか、またはそれよりも遠い値を示し得るが、これは、任意のサンプル固有のＺ値がマージされたソースタイルに関して実際に記録および記憶されることを必ずしも意味しないことに留意されたい。代わりに、保守的な最も遠いＺ値は、その値がマージされたソースタイルのカバーされたサンプルのすべてに関する最も遠いＺ値と少なくとも等しい遠さであることを保証するという方式で更新され得る。このようにして、いくつかの例では、サンプル固有のＺ値はマージされたソースタイル用に記録および記憶されない。
【０１１８】
[0123]マージされたソースタイルに関するカバレージマスクは、マージされたソースタイルのどのサンプルがマージされたソースタイルに対応するプリミティブによってカバーされるかを示し得る。たとえば、カバレージマスクは、ビットの各々がカバレージマスクに対応するマージされたソースタイル内の複数のサンプルのうちのそれぞれのサンプルに対応する、複数のビットを含み得る。各々のビットの値は、マージされたソースタイル内のサンプルのうちのそれぞれのサンプルが、ソースタイルに対応するプリミティブによってカバーされるかどうかを示し得る。たとえば、カバレージマスク内の特定のビットについての「１」の値は、そのビットに対応するサンプルがカバーされることを示し得、カバレージマスク内の特定のビットについての「０」の値は、そのビットに対応するサンプルがカバーされないことを示し得る。
【０１１９】
[0124]マージされたソースタイル用のカバーされたサンプルは、マージされたソースタイルに対応するプリミティブのうちの少なくとも１つによってカバーされたサンプルを指し得る。マージされたソースタイルにマージされた部分的にカバーされたソースタイルを生成するためにプリミティブが使用された場合、プリミティブはマージされたソースタイルに対応し得る。
【０１２０】
[0125]上記で説明されたように、部分的にカバーされたソースタイルをマージするとき、Ｚカリング段階５６は、部分的にカバーされたソースタイルをソースタイルに対応するタイル位置に関するマージされたソースタイルとマージし得る。ソースタイルが処理されるべき、最初の部分的にカバーされたソースタイルである場合、マージされたソースタイルは、デフォルトのマージされたソースタイルであり得る。いくつかの例では、マージされたソースタイルは、マージされたソースタイルに関する保守的な最も遠いＺ値およびマージされたソースタイルに関するカバレージマスクによって定義され得る。そのような例では、デフォルトのマージされたソースタイルは、グラフィックスシステムによって使用される最も遠いＺ値に設定されるデフォルトの保守的な最も遠いＺ値と、マージされたソースタイル内のサンプルがカバーされないことを示すデフォルトのカバレージマスクとを有し得る。そのような例では、さらなるデータがデフォルトのマージされたソースタイル用に必ずしも記憶される必要はない。たとえば、マージされたソースタイル内の個々のサンプル用の色成分、アルファ成分、および深度成分は、デフォルトのマージされたソースタイル用に必ずしも計算または記憶される必要はない。
【０１２１】
[0126]部分的にカバーされたソースタイルをマージされたソースタイルとマージするために、Ｚカリング段階５６は、いくつかの例では、ソースタイルに関するカバレージマスクおよびマージされたソースタイルの現行バージョンに関するカバレージマスクに基づいて、マージされたソースタイルの更新バージョンに関するカバレージマスクを生成し得る。たとえば、Ｚカリング段階５６は、ソースタイルの更新バージョンに関するカバレージマスクを生成するために、マージされたソースタイルに関するカバレージマスクとの部分的にカバーされたソースタイルに関するカバレージマスクに対するビット単位のＯＲ演算を実行し得る。
【０１２２】
[0127]部分的にカバーされたソースタイルをマージされたソースタイルとマージするために、Ｚカリング段階５６はまた、いくつかの例では、ソースタイルに関する保守的な最も遠いＺ値およびマージされたソースタイルの現行バージョンに関する保守的な最も遠いＺ値に基づいて、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値を生成し得る。たとえば、Ｚカリング段階５６は、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値を生成するために、部分的にカバーされたソースタイルに関する保守的な最も遠いＺ値と、マージされたソースタイルに関する保守的な最も遠いＺ値とを含むＺ値のセットから最も遠いＺ値を決定し得る。
【０１２３】
[0128]いくつかの例では、マージされたソースタイルによってカバーされるサンプルのすべてがソースタイルによってもカバーされる場合、およびソースタイルに関する保守的な最も遠いＺ値がマージされたソースタイルに関する保守的な最も遠いＺ値よりも近い場合、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値は、上記で説明された方式とは異なる方式で決定され得る。そのような例では、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値は、ソースタイルに関する保守的な最も遠いＺ値に等しいように設定され得る。この場合、マージされたソースタイルの現行バージョン内のサンプルのすべては、ソースタイル内のサンプルによって遮られるので、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値は、ソースタイルに関する保守的な最も遠いＺ値に設定され得る。ソースタイルに関する保守的な最も遠いＺ値は、この場合、ソースタイルおよびマージされたソースタイルの現行バージョンに関する保守的な最も遠いＺ値の最大値よりもカメラに近いので、マージされたソースタイルに関してより良い品質の保守的な最も遠いＺ値が取得さ得、これは、タイル位置に関するより良い品質のカリングＺ値となり得る。より良い品質のカリングＺ値は、Ｚカリングアルゴリズムに関する廃棄率を増大し得る。
【０１２４】
[0129]部分的にカバーされたソースタイルをタイル位置に関するマージされたソースタイルとマージした後、マージされたソースタイルの更新バージョンが完全にカバーされる場合、Ｚカリング段階５６は、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値を用いてカリングＺ値を更新し得る。そうでない場合、Ｚカリング段階５６は、同じカリングＺ値を維持し（すなわち、カリングＺ値を更新せず）、次のマージング動作において将来使用するためにマージされたソースタイルの更新バージョンを記憶し得る。
【０１２５】
[0130]言い換えれば、Ｚカリング段階５６は、マージされたソースタイルの更新バージョンがマージされたソースタイルの更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を選択的に設定し得る。たとえば、Ｚカリング段階５６は、マージされたソースタイルの更新バージョンがマージされたソースタイルの更新バージョンに対応するプリミティブのセットによって完全にカバーされると決定することに応答して、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を設定し、マージされたソースタイルの更新バージョンがプリミティブのセットによって完全にはカバーされないと決定することに応答して、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を設定しないことがあり得る。
【０１２６】
[0131]マージされたソースタイルの更新バージョンに対応するプリミティブのセットは、マージされたソースタイルの更新バージョンにマージされた部分的にカバーされたソースタイルの各々に対応するプリミティブを含み得る。部分的にカバーされたソースタイルがプリミティブをラスタ化することに応答して生成された場合、プリミティブは部分的にカバーされたソースタイルに対応し得る。
【０１２７】
[0132]マージキャッシュ６２は、１つまたは複数のタイル位置に関するマージされたソースタイルを示すデータを記憶し得る。いくつかの例では、マージされたソースタイルを示すデータは、マージされたソースタイルに関するカバレージマスクと、マージされたソースタイルに関する保守的な最も遠いＺ値とを含み得る。いくつかの例では、レンダリング対象内の各タイル位置は、多くとも１つのマージされたソースタイルに関連付けられ得る。
【０１２８】
[0133]マージキャッシュ６２は、いくつかの例では、図２に関して上記で説明されたメモリ３６に対応し得る。いくつかの例では、マージキャッシュ６２は、本開示に記載されたマッピングおよび上書きの技法を実施する制御機能を有するメモリユニットとして実装され得る。さらなる例では、マージキャッシュ６２は、ハードウェアキャッシュユニットとして実装され得る。そのような例では、キャッシュユニットの内蔵のマッピングおよび上書きの機能の一部またはすべては、いくつかの例では、本開示に記載されたマッピングおよび上書きの技法を実施するために使用され得る。
【０１２９】
[0134]いくつかの例では、マージキャッシュ６２のデータ容量は、レンダリング対象内のタイル位置のすべてについてのマージされたソースタイルデータを記憶するために必要とされるデータ容量よりも小さいことがあり得る。そのような例では、マージされたソースタイルが完全にカバーされるようになる前に、部分的にカバーされているが、まだ完全にはカバーされていないマージされたソースタイルが、別のタイル位置からのマージされたソースタイルによって上書きされ得る可能性がある。これは、仮にマージされたソースタイルが将来完全にカバーされるようになった場合でも、上書きされたマージされたソースタイルがカリングＺ値を潜在的により好ましい値に更新するために使用されることを防止し得る。これは、カリングＺ値の品質（すなわち、カリングＺ値が実際のＺ値にどれほど近いか）を低減する可能性があるが、比較的小さいメモリを使用することによって達成される利益は、場合によっては、データの上書きによるカリングパフォーマンスにおけるいかなる減少にもまさり得る。
【０１３０】
[0135]いくつかの例では、Ｚカリング段階５６は、マージキャッシュ６２に複数のマージされたソースタイルのデータレコードを記憶し得る。マージされたソースタイルのデータレコードの各々は、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み得る。この例では、マージキャッシュ６２は、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し得、ここで、Ｎはレンダリング対象内のタイル位置の総数である。
【０１３１】
[0136]いくつかの例では、タイル位置に関するデータレコードに含まれるマージされたソースタイルに関連付けられたデータは、タイル位置に関連付けられたマージされたソースタイルに関する保守的な最も遠いＺ値を含み得る。さらなる例では、タイル位置に関するデータレコードに含まれるマージされたソースタイルに関連付けられたデータは、タイル位置に関連付けられたマージされたソースタイルに関するカバレージマスクを含み得る。さらなる例では、タイル位置に関するデータレコードに含まれるマージされたソースタイルに関連付けられたデータは、タイル位置に関連付けられたマージされたソースタイルに関する保守的な最も遠いＺ値と、タイル位置に関連付けられたマージされたソースタイルに関するカバレージマスクの両方を含み得る。
【０１３２】
[0137]マージキャッシュ６２は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、キャッシュユニットなどの、１つまたは複数の揮発性または不揮発性のメモリまたはストレージデバイスを含み得る。いくつかの例では、メモリ３６は、グラフィックスパイプライン５０が形成されるマイクロチップ（たとえば、ＧＰＵ１２と同じマイクロチップ）と同じマイクロチップ上に位置されるオンチップメモリであり得る。
【０１３３】
[0138]さらなる例では、マージキャッシュ６２はキャッシュユニット（たとえば、オンチップキャッシュユニット）であり得る。そのような例では、マージキャッシュ６２は、基礎的なメモリに関連付けられないことがあり得る。マージキャッシュ６２は、基礎的なメモリにアクセスせずにすべての読取り要求と書込み要求とをサービスし得るという意味で、マージキャッシュ６２は、基礎的なメモリに関連付けられないことがあり得る。その上、マージされたソースタイルに関連付けられた入力データを記憶するために利用可能なマージキャッシュ６２内の十分なマップされるメモリ空間が存在しない場合、マージキャッシュ６２は、別のマージされたソースタイルに関連付けられたデータを入力データで上書きし得る。たとえば、マージキャッシュ６２は、第１のタイル位置に関連付けられた第１のデータレコードを基礎的なメモリに書き込まずに、第１のデータレコードをマージキャッシュ６２内のキャッシュラインに書き込み、第１のデータレコードを基礎的なメモリに書き込まずに、第１のデータレコードを第２のタイル位置に関連付けられた第２のデータレコードで上書きするように構成され得る。
【０１３４】
[0139]マージキャッシュ６２がキャッシュユニットとして実装される例では、Ｚカリング段階５６は、いくつかの例では、マージキャッシュ６２に複数のマージされたソースタイルのデータレコードを記憶し得る。マージされたソースタイルのデータレコードの各々は、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み得る。そのような例では、マージキャッシュ６２は複数のキャッシュラインを含み得、キャッシュラインの各々は、データレコードのうちのそれぞれのデータレコードを記憶するように構成され得る。そのような例では、マージキャッシュ６２内のキャッシュラインの総数は、レンダリング対象内のタイル位置の総数よりも少ないことがあり得る。
【０１３５】
[0140]マージキャッシュ６２は、単に、別の基礎的なメモリに一次的に記憶されたデータのコピーを記憶するためのキャッシュされたデータストアとしてではなく、マージされたソースタイルデータ用の１次データストアとして働き得る。キャッシュユニットは、通常、そのようなキャッシュユニットがキャッシングサービスを提供する基礎的なメモリ空間よりも小さい量のデータを記憶するように設計される。したがって、キャッシュユニットは、しばしば、キャッシュ内のどこにデータが記憶されるかと、キャッシュ内でどのデータが上書きされるかとを決定するために、様々なマッピングポリシー（たとえば、ダイレクトマップ、セットアソシアティブ、フルアソシアティブなど）と、置換ポリシー（たとえば、最長時間未使用法、最小頻度使用法、ランダムなど）とを実施する。マージされたソースタイルデータを記憶するための１次ストレージユニットとしてキャッシュユニットを使用することは、基礎的なメモリ内の余分なコピーをキャッシュユニットが保持しない場合であっても、キャッシュユニット内のどこにデータが記憶されるかと、キャッシュユニット内でどのデータが上書きされるかとを決定するためのこれらの内蔵機構をグラフィックスシステムが活用することを可能にし得る。これにより、設計が簡略化され得、および／またはマージされたソースタイルデータを記憶するためのメモリユニットを実装するために必要とされるエリアの量が削減され得る。
【０１３６】
[0141]いくつかの例では、レンダリング対象内のタイル位置の各々は、マージキャッシュ６２のアドレス空間内の複数のアドレスのうちのそれぞれのアドレスに対応し得る。マージキャッシュ６２は、アドレス空間内のアドレスをマージキャッシュ６２内のストレージスロットのセットにマッピングし得る。マージキャッシュ６２は、マージキャッシュ６２用のアドレス空間内のアドレスよりも少ないストレージスロットを有し得る。したがって、マージキャッシュ６２は、同じストレージスロットまたはストレージスロットの同じセットに複数のアドレスをマッピングし得る。マージキャッシュ６２がキャッシュユニットである場合、マージキャッシュ６２は、いくつかの例では、ストレージスロットにアドレスをマッピングするために、直接マッピング方式、セットアソシアティブマッピング方式、およびフルアソシアティブマッピング方式のいずれをも使用し得る。
【０１３７】
[0142]部分的にカバーされたソースタイルをマージされたソースタイルとマージするために、Ｚカリング段階５６は、部分的にカバーされたソースタイルと同じタイル位置を有するマージされたソースタイルに関するマージされたソースタイルデータ（たとえば、カバレージマスクおよび保守的な最も遠いＺ値）を取得するために、マージキャッシュ６２に読取り要求を発し得る。Ｚカリング段階５６は、部分的にカバーされたソースタイルのタイル位置に対応する読取り要求用のアドレスを含み得る。場合によっては、アドレスは部分的にカバーされたソースタイルのタイル位置に等しいことがあり得る。
【０１３８】
[0143]読取り要求を受信することに応答して、マージキャッシュ６２は、読取り要求とともに受信されたアドレスによって示されたタイル位置に対応するストレージスロット内のエントリ（たとえば、データレコード）が存在するかどうかを決定するために、マージキャッシュ６２内のストレージスロットを検索し得る。タイル位置に対応するエントリが見出された場合、マージキャッシュ６２は、エントリに含まれるデータ（たとえば、カバレージマスクおよび保守的な最も遠いＺ値）を返信し得る。エントリが見出されなかった場合、マージキャッシュ６２は、エントリが見出されなかったことの表示を返信し得る。
【０１３９】
[0144]部分的にカバーされたソースタイルに対応するタイル位置に関するエントリがマージキャッシュ６２内で見出されなかった場合、Ｚカリング段階５６は、部分的にカバーされたソースタイルの更新バージョンを生成するために、部分的にカバーされたソースタイルをマージされたソースタイルとマージし得る。たとえば、Ｚカリング段階５６は、本開示に記載された技法を使用して、マージされたソースタイルの更新バージョンに関するカバレージマスクと保守的な最も遠いＺ値とを生成し得る。
【０１４０】
[0145]マージされたソースタイルの更新バージョンが完全にカバーされる場合、Ｚカリング段階５６は、マージされたソースタイルに関する保守的な最も遠いＺ値を用いてカリングＺ値を更新し、マージキャッシュ６２にタイル位置に対応するマージされたソースタイルデータを無効させ得る。マージされたソースタイルの更新バージョンが完全にはカバーされない場合、Ｚカリング段階５６は、タイル位置に対応するアドレスとともに書込み要求をマージキャッシュ６２に発し得る。書込み要求によって書き込まれるべきデータは、マージされたソースタイルの更新バージョンに関するカバレージマスクと保守的な最も遠いＺ値とを含み得る。書込み要求を受信することに応答して、マージキャッシュ６２は、ストレージスロットにアドレスをマッピングし、ストレージスロットにデータを書き込み得る。いくつかの例では、マージキャッシュ６２は、マージされたソースタイルの更新バージョンに関するデータを用いて、マージされたソースタイルの前のバージョン用のストレージスロットに記憶されたデータを上書きし得る。
【０１４１】
[0146]部分的にカバーされたソースタイルに対応するタイル位置に対する読取り要求を処理するとき、マージキャッシュ６２内でエントリが見出されなかった場合、Ｚカリング段階５６は、マージされたソースタイルの更新バージョンに関するカバレージマスクおよび保守的な最も遠いＺ値が、それぞれ、部分的にカバーされたソースタイルに関するカバレージマスクおよび保守的な最も遠いＺ値に等しいように、マージされたソースタイルの更新バージョンに関するカバレージマスクと保守的な最も遠いＺ値とを生成し得る。このようにしてマージされたソースタイルの更新バージョンに関するカバレージマスクと保守的な最も遠いＺ値とを生成することは、部分的にカバーされたソースタイルを、デフォルトのマージされたソースタイルがデフォルトの保守的な最も遠いＺ値とサンプルがカバーされないことを示すデフォルトのカバレージマスクとを含む、デフォルトのマージされたソースタイルとマージすることに対応し得る。
【０１４２】
[0147]マージキャッシュ６２内でエントリが見出されなかったので、Ｚカリング段階５６は、マージキャッシュ６２にマージされたソースタイルデータを記憶するためにマージキャッシュ６２内に新しいストレージスロットを割当てさせ得る。たとえば、Ｚカリング段階５６は、タイル位置に対応するアドレスをとともに書込み要求をマージキャッシュ６２に発し得、それは、マージキャッシュ６２にマージされたソースタイルデータを記憶するためにマージキャッシュ６２内にストレージスロットを割当てさせ得る。書込み要求によって書き込まれるべきデータは、マージされたソースタイルの更新バージョンに関するカバレージマスクと保守的な最も遠いＺ値とを含み得る。
【０１４３】
[0148]書込み要求を受信することに応答して、マージキャッシュ６２は、書込み要求とともに受信されたアドレスおよび１つまたは複数のマッピングルールに基づいて、マージされたソースタイルデータを記憶するために使用するストレージスロットを決定し得る。受信されたアドレスにマッピングするストレージスロットのすべてが一杯である場合、マージキャッシュ６２は、マージキャッシュ６２によって実装された置換ポリシーに基づいて上書きするストレージスロットを選択し得る。例示的な置換ポリシーには、最長時間未使用（ＬＲＵ）置換ポリシー、最小頻度使用（ＬＦＵ）置換ポリシー、およびランダム置換ポリシーがある。
【０１４４】
[0149]マージキャッシュ６２がキャッシュユニットである場合、マージキャッシュ６２は複数のキャッシュラインを含み得る。いくつかの例では、キャッシュラインの各々は、それぞれのマージされたソースタイルに関連付けられたマージされたソースタイルデータ用のストレージスロットとして働き得る。たとえば、キャッシュラインの各々は、カバレージマスクフィールドおよび保守的な最も遠いＺ値フィールドに再分割され得る。
【０１４５】
[0150]マッピング方式に応じて、キャッシュラインの各々はタグフィールドを含み得る。タグフィールドは、マージされたソースタイルに関連付けられたアドレスの１つまたは複数のビットを含み得る。マージされたソースタイルのアドレスがタイル位置に等しい例では、タグは、いくつかの例では、タイル位置を示す１つまたは複数のビットを含み得る。いくつかの例では、タイル用のタイル位置は、タイル用の画面座標（たとえば、（ｘ，ｙ）座標）に対応し得る。
【０１４６】
[0151]マージキャッシュ６２がキャッシュユニットであり、キャッシュラインがタグフィールドを含む例では、キャッシュユニット内で特定のマージされたソースタイルを検索するために、マージキャッシュ６２は、マッピングルールに応じて、読取り要求または書込み要求とともに受信されたアドレスを１つまたは複数のキャッシュラインにマッピングし得る。次いで、マージキャッシュ６２は、キャッシュライン用のタグフィールドがアドレスフィールドに一致するかどうかを決定するために、アドレスビットの一部またはすべてをキャッシュライン用のタグフィールドに含まれているビットと比較し得る。キャッシュライン用のタグフィールドがアドレスフィールドに一致する場合、マージキャッシュ６２は、読取り要求のためのデータを取り出すか、または書込み要求のためのデータを上書きし得る。そうではなく、キャッシュライン用のタグフィールドがアドレスフィールドに一致しない場合、マージキャッシュ６２は、所望のエントリを求めて他のキャッシュラインを検索し得る。読取り要求のために一致するキャッシュラインが見出されなかった場合、マージキャッシュ６２は、特定のタイル読取り要求のためにマージされたソースタイルデータがキャッシュ内で見出されなかったことの指示を返信し得る。書込み要求のために一致するキャッシュラインが見出されなかった場合、マージキャッシュ６２は、書込みデータに新しいキャッシュラインを割当て得る、または、キャッシュラインが利用可能ではない場合、マージキャッシュ６２は、別のマージされたソースタイルに関連付けられた別のキャッシュラインを上書きし得る。
【０１４７】
[0152]マージキャッシュ６２がキャッシュユニットである場合、Ｚカリング段階５６は、キャッシュ６２にマージされたソースタイルデータに対応するキャッシュラインを無効にさせることによって、マージキャッシュ６２にマージされたソースタイルデータを無効にさせることができる。キャッシュラインを無効にすることは、キャッシュラインに記憶されたタグがアドレスに一致するべきであった場合でも、マージキャッシュ６２に読取り要求に応答して無効にされたキャッシュラインに記憶されたデータを返信しないようにさせ得る。
【０１４８】
[0153]ピクセル処理段階５８は、Ｚカリング段階５６から選別されたソースタイルを受信し、宛先タイルを生成するために、選別されたソースタイルに対してピクセル処理を実行し得る。ピクセル処理は、たとえば、ピクセルシェーディング動作、ブレンディング動作、テクスチャマッピング動作、プログラマブルピクセルシェーダ動作などを含み得る。いくつかの例では、ピクセル処理段階５８の一部またはすべては、ソースタイル内のサンプルを一緒に処理し得る。さらなる例では、ピクセル処理段階５８の一部またはすべては、ソースタイル内のサンプルの各々を互いに独立して処理し得る。いくつかの例では、ピクセル処理段階５８は、ソースタイルをコロケートされた宛先タイル（すなわち、ソースタイルと同じ位置を有する宛先タイル）にマージまたは合成する出力合併段階を含み得る。場合によっては、ピクセル処理段階５８によって生成された宛先タイルは、レンダリング対象（たとえば、フレームバッファまたはビニングバッファ）の中に配置され得る。
【０１４９】
[0154]図４は、本開示による階層的Ｚカリングを実行するための例示的な技法を示す流れ図である。いくつかの例では、図４に示された技法は、図１および図２のＧＰＵ１２、ならびに／または図３のＺカリング段階５６において実施され得る。この説明の目的で、技法がＧＰＵ１２によって実施されるものとして記載されるが、技法は他の構成要素もしくはデバイスにより、または他のタイプのグラフィックス処理システムにおいて実施され得ることを理解されたい。
【０１５０】
[0155]図４に示された技法は、カメラから離れている距離が増大するにつれてＺ値が増大する増大Ｚ座標系を想定する。したがって、ここで、より大きい又はより小さいという比較が図４に示されるが、カメラから離れている距離が増大するにつれてＺ値が減少する減少Ｚ座標系では、そのような比較は反転されるべきであることが理解されるべきでさる。すなわち、より大きい又はより小さいという比較は交換されるべきである。
【０１５１】
[0156]ＧＰＵ１２は、グラフィックスパイプライン内のラスタライザ段階または別の処理段階からソースタイルを受信することに応答して、プロセスソースタイル技法を開始し得る。いくつかの例では、ラスタライザ段階５４はソースタイルを生成することができ、Ｚカリング段階５６はラスタライザ段階５４からソースタイルを受信し得る。さらなる例では、以下の、ソースタイルに関するカバレージマスク（すなわち、Ｓｒｃ＿Ｍａｓｋ）、ソースタイルが完全にカバーされる（すなわち、完璧にカバーされる）かどうかを示す情報、ソースタイルに関する保守的な最も近いＺ値（すなわち、Ｚ＿Ｓｒｃ＿Ｎｅａｒ）、およびソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｓｒｃ＿Ｆａｒ）のうちの１つまたは複数を、ラスタライザ段階５４は生成し得、Ｚカリング段階５６はラスタライザ段階５４から受信し得る。
【０１５２】
[0157]処理するソースタイルを受信することに応答して、ＧＰＵ１２は、ソースタイルのタイル位置に対応するタイル位置に関するカリングＺ値（すなわち、Ｃｕｌｌｉｎｇ＿Ｚ）を取得し得る。いくつかの例では、ＧＰＵ１２は、カリングＺ値を記憶するメモリまたはバッファ（たとえば、ＬＲＺバッファ６０）からカリングＺ値を取得し得る。カリングＺ値は、ソースタイルのタイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示し得る。
【０１５３】
[0158]ＧＰＵ１２は、ソースタイルに関する保守的な最も近いＺ値がカリングＺ値よりも大きい（すなわち、それよりも遠く離れている）かどうかを決定する（１００）。ソースタイルに関する保守的な最も近いＺ値がカリングＺ値よりも大きい（すなわち、それよりも遠く離れている）と決定することに応答して、ＧＰＵ１２は、ソースタイルを廃棄し（１０２）、ソースタイルに関する処理を終了する。ソースタイルを廃棄することは、グラフィックスパイプラインの１つまたは複数の次の段階（たとえば、グラフィックスパイプライン５０のピクセル処理段階５８）にソースタイルを渡さないことを含み得る。ＧＰＵ１２がソースタイルを廃棄すると、ソースタイル内のＺ値のすべてはすでに使用中のカリングＺ値よりも遠いので、ＧＰＵ１２はカリングＺ値を更新する目的でソースタイルをこれ以上分析しない。
【０１５４】
[0159]決定ブロック１００に戻ると、ソースタイルに関する保守的な最も近いＺ値がカリングＺ値よりも大きくない（すなわち、それよりも遠く離れていない）と決定することに応答して、ＧＰＵ１２はソースタイルを廃棄しない（１０４）。ソースタイルを廃棄しないことは、さらなる処理のために、グラフィックスパイプラインの１つまたは複数の次の段階（たとえば、グラフィックスパイプライン５０のピクセル処理段階５８）にソースタイルを渡さすことを含み得る。ＧＰＵ１２がソースタイルを廃棄しないと、ＧＰＵ１２は、カリングＺ値がソースタイルに基づいて更新されるべきかどうかを決定するために、および／またはソースタイルをタイル位置に関するマージされたソースタイルとマージするべきかどうかを決定するために、ソースタイルに対してさらなる分析を実行する。
【０１５５】
[0160]より具体的には、ソースタイルが廃棄されない場合、ＧＰＵ１２は、ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりも小さい（すなわち、それよりも近い）かどうかを決定する（１０６）。ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりも小さくない（すなわち、それよりも近くない）と決定することに応答して、ＧＰＵ１２は、ソースタイルをタイル位置に関するマージされたソースタイルとマージしない（１０８）。ＧＰＵ１２はまた、カリングＺ値を更新しない。代わりに、ソースタイルに関する保守的な最も遠いＺ値が、すでに使用中のカリングＺ値よりも遠いので、ＧＰＵ１２は、カリングＺ値を更新するべきかどうかを決定するためのソースタイルの処理を終了する。しかしながら、グラフィックスパイプラインの次の段階（たとえば、グラフィックスパイプライン５０のピクセル処理段階５８）は、ソースタイルに対してさらなるピクセル処理を実行し得る。
【０１５６】
[0161]決定ブロック１０６に戻ると、ソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりも小さい（すなわち、それよりも近い）と決定することに応答して、ＧＰＵ１２はソースタイルが完全にカバーされるかどうかを決定する（１１０）。ソースタイルのサンプルのすべてがソースタイルに対応するプリミティブによってカバーされるとき、ソースタイルは完全にカバーされ得る。プリミティブのエリアがサンプル位置を含む場合、サンプルはプリミティブによってカバーされ得る。ソースタイルがプリミティブをラスタ化することに応答して生成された場合、プリミティブはソースタイルに対応し得る。
【０１５７】
[0162]ソースタイルが完全にカバーされると決定することに応答して、ＧＰＵ１２はソースタイルをマージしない（１１２）。代わりに、ＧＰＵ１２は、完全にカバーされたソースタイルの保守的な最も遠いＺ値に基づいて、カリングＺ値を更新する（１１４）。たとえば、ＧＰＵ１２は、完全にカバーされたソースタイルの保守的な最も遠いＺ値に等しいようにカリングＺ値を設定し得る。ＧＰＵ１２は、もしあれば、ソースタイルのタイル位置に関連付けられたマージキャッシュラインを無効にする（１１６）。階層的Ｚカリングの目的のためのソースタイルの処理が終了する。しかしながら、グラフィックスパイプラインの次の段階（たとえば、グラフィックスパイプライン５０のピクセル処理段階５８）は、ソースタイルに対してさらなるピクセル処理を実行し得る。
【０１５８】
[0163]決定ブロック１１０に戻ると、ソースタイルが完全にはカバーされない（すなわち、ソースタイルが部分的にカバーされる）と決定することに応答して、ＧＰＵ１２は、マージされたソースタイルの更新バージョンを生成するために、ソースタイルをタイル位置に関するマージされたソースタイルとマージする（１１８）。マージ動作に関するさらなる詳細は、図５を参照して以下で説明される。
【０１５９】
[0164]ソースタイルをマージした後、ＧＰＵ１２は、マージされたソースタイルの更新バージョンが完全にカバーされるかどうかを決定する（１２０）。マージされたソースタイルの更新バージョンのサンプルのすべてが、マージされたソースタイルの更新バージョンに対応するプリミティブのセットによってカバーされるとき、マージされたソースタイルの更新バージョンは完全にカバーされ得る。マージされたソースタイルの更新バージョンに対応するプリミティブのセットは、マージされたソースタイルの更新バージョンにマージされた部分的にカバーされたソースタイルの各々に対応するプリミティブを含み得る。部分的にカバーされたソースタイルがプリミティブをラスタ化することに応答して生成された場合、プリミティブは部分的にカバーされたソースタイルに対応し得る。
【０１６０】
[0165]マージされたソースタイルの更新バージョンが完全にカバーされると決定することに応答して、ＧＰＵ１２は、完全にカバーされマージされたソースタイルの保守的な最も遠いＺ値に基づいて、カリングＺ値を更新する（１２２）。たとえば、ＧＰＵ１２は、完全にカバーされマージされたソースタイルの保守的な最も遠いＺ値に等しいようにカリングＺ値を設定し得る。ＧＰＵ１２は、ソースタイルのタイル位置に関連付けられたマージキャッシュラインを無効にする（１２４）。階層的Ｚカリングの目的のためのソースタイルの処理が終了する。しかしながら、グラフィックスパイプラインの次の段階（たとえば、グラフィックスパイプライン５０のピクセル処理段階５８）は、ソースタイルに対してさらなるピクセル処理を実行し得る。
【０１６１】
[0166]マージされたソースタイルの更新バージョンが完全にはカバーされないと決定することに応答して、ＧＰＵ１２はカリングＺ値を更新しない。代わりに、ＧＰＵ１２は、次のソースタイルを処理するときに使用するために、マージされたソースタイルデータを記憶する。階層的Ｚカリングの目的のためのソースタイルの処理が終了する。しかしながら、グラフィックスパイプラインの次の段階（たとえば、グラフィックスパイプライン５０のピクセル処理段階５８）は、ソースタイルに対してさらなるピクセル処理を実行し得る。
【０１６２】
[0167]図５は、本開示による階層的Ｚカリングを実行するときに部分的にカバーされたソースタイルをマージするための例示的な技法を示す流れ図である。いくつかの例では、図５に示された技法は、図１および図２のＧＰＵ１２、ならびに／または図３のＺカリング段階５６において実施され得る。この説明の目的で、技法がＧＰＵ１２によって実施されるものとして記載されるが、技法は他の構成要素もしくはデバイスにより、または他のタイプのグラフィックス処理システムにおいて実施され得ることを理解されたい。
【０１６３】
[0168]いくつかの例では、図５に示された技法は、図４におけるプロセスブロック１１８を実施するために使用され得る。図４と同様に、図５に示された技法は、カメラから離れている距離が増大するにつれてＺ値が増大する増大Ｚ座標系を想定する。したがって、ここで、より大きい又はより小さいという比較が図５に示されるが、カメラから離れている距離が増大するにつれてＺ値が減少する減少Ｚ座標系では、そのような比較は反転されるべきであることを理解されたい。すなわち、より大きい又はより小さいという比較は交換されるべきである。同様に、減少Ｚ座標系において、最大関数は最小関数と置換されるべきである。
【０１６４】
[0169]ＧＰＵ１２は、部分的にカバーされたソースタイルを受信することに応答して、図５に示されたマージソースタイル技法を開始し得る。いくつかの例では、ＧＰＵ１２は、図４における決定ブロック１０６および１１０によって示されたように、ソースが完全にはカバーされないと決定することに応答して、およびソースタイルに関する保守的な最も遠いＺ値がカリングＺ値よりも小さい（すなわち、それよりも近い）と決定することに応答して、図５に示されたマージソースタイル技法を開始し得る。
【０１６５】
[0170]ＧＰＵ１２は、キャッシュユニット（たとえば、マージキャッシュ６２）内で、部分的にカバーされたソースタイルに対応するタイル位置を有するマージされたソースタイルを検索する（１４０）。ＧＰＵ１２は、タイル位置に関するマージされたソースタイルがキャッシュユニット内で見出されたかどうかを決定する（１４２）。言い換えれば、ＧＰＵ１２は、タイル位置に関するキャッシュ内のヒットが存在したかどうかを決定する。
【０１６６】
[0171]マージされたソースタイルが見出されなかったと決定することに応答して、ＧＰＵ１２は、部分的にカバーされたソースタイルに対応するタイル位置に関連付けられたマージされたソースタイルに、キャッシュユニット内の新しいキャッシュラインを割当てる（１４４）。いくつかの例では、キャッシュユニットのマッピング方式は、１つまたは複数のキャッシュラインのセットにタイル位置（たとえば、アドレス）の各々をマッピングし得る。タイル位置がマッピングするキャッシュラインのうちのどれも利用可能でない場合、キャッシュユニットは、いくつかの例では、タイル位置にマッピングするキャッシュラインのセットに記憶された別のタイル位置に関するマージされたソースタイルデータを、現在処理されているタイル位置に関連付けられたマージされたソースタイルデータを用いて上書きし得る。
【０１６７】
[0172]ＧＰＵ１２は、ソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｓｒｃ＿Ｆａｒ）に等しいように、マージされたソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｍｅｒｇｅ）を設定する（１４６）。ＧＰＵ１２は、部分的にカバーされたソースタイルに関するカバレージマスク（すなわち、Ｓｒｃ＿Ｍａｓｋ）に等しいように、マージされたソースタイルに関するカバレージマスク（すなわち、Ｍｅｒｇｅ＿Ｍａｓｋ）を設定する。ＧＰＵ１２は、マージされたソースタイルが完全にはカバーされないことを示すためにマージフル変数を偽にセットし、マージフル変数を出力し（１５０）、マージングプロセスを終了する。マージフル変数は、マージされたソースタイルの更新バージョンが完全にカバーされるかどうかを決定するために、図４における技法（たとえば、決定ブロック１２０）によって使用され得る。
【０１６８】
[0173]決定ブロック１４２に戻ると、マージされたソースタイルが見出されたと決定することに応答して、ＧＰＵ１２はキャッシュユニットからマージされたソースタイルデータを取得する。マージされたソースタイルデータは、マージされたソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｍｅｒｇｅ）とマージされたソースタイルに関するカバレージマスク（すなわち、Ｍｅｒｇｅ＿Ｍａｓｋ）とを含み得る。
【０１６９】
[0174]ＧＰＵ１２は、マージされたソースタイルによってカバーされるサンプル位置のすべてが、部分的にカバーされたソースタイルによってもカバーされるかどうかを決定する（１５２）。いくつかの例では、この動作を実行するために、ＧＰＵ１２は、マージされたソースタイルに関するカバレージマスクと部分的にカバーされたソースタイルに関するカバレージマスクに対してビット単位のＡＮＤ演算を実行し、ビット単位のＡＮＤ演算の結果がマージされたソースタイルに関するカバレージマスクに等しいかどうかを決定し得る。ビット単位のＡＮＤ演算の結果がマージされたソースタイルに関するカバレージマスクに等しい場合、マージされたソースタイルによってカバーされるサンプル位置のすべては、部分的にカバーされたソースタイルによってもカバーされる。
【０１７０】
[0175]マージされたソースタイルによってカバーされるサンプル位置のすべてが、部分的にカバーされたソースタイルによってもカバーされると決定することに応答して、ＧＰＵ１２は、ソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｓｒｃ＿Ｆａｒ）が、マージされたソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｍｅｒｇｅ）よりも小さい（すなわち、それよりも近い）かどうかを決定する（１５４）。ソースタイルに関する保守的な最も遠いＺ値が、マージされたソースタイルに関する保守的な最も遠いＺ値よりも小さい（すなわち、それよりも近い）と決定することに応答して、ＧＰＵ１２は、ソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｓｒｃ＿Ｆａｒ）に等しいように、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｍｅｒｇｅ）を設定する（１５６）。ＧＰＵ１２はまた、ソースタイルに関するカバレージマスク（すなわち、Ｓｒｃ＿Ｍａｓｋ）とマージされたソースタイルの前のバージョンに関するカバレージマスク（すなわち、Ｍｅｒｇｅ＿Ｍａｓｋ＿Ｐｒｅｖ）のビット単位のＯＲ演算の結果に等しいように、マージされたソースタイルの更新バージョンに関するカバレージマスクを設定する（１６０）。マージされたソースタイルの前のバージョンは、マージされたソースタイルの更新バージョンより前のマージされたソースタイルのバージョンに対応し得、いくつかの例では、代替として、マージされたソースタイルの現行バージョンと呼ばれ得る。
【０１７１】
[0176]この場合、マージされたソースタイルの前のバージョン内のサンプルのすべては、ソースタイル内のサンプルによって遮られるので、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値は、ソースタイルに関する保守的な最も遠いＺ値に設定され得る。ソースタイルに関する保守的な最も遠いＺ値は、ソースタイルおよびマージされたソースタイルの前のバージョンに関する保守的な最も遠いＺ値の最大値よりもこの場合カメラに近いので、マージされたソースタイルについてより良い品質の保守的な最も遠いＺ値が取得され得、これは、タイル位置に関するより良い品質のカリングＺ値がもたらし得る。より良い品質のカリングＺ値は、Ｚカリングアルゴリズムについての廃棄率を増大し得る。
【０１７２】
[0177]決定ブロック１５２および１５４に戻ると、マージされたソースタイルによってカバーされるサンプル位置のすべてが、部分的にカバーされたソースタイルによってもカバーされないと決定することに応答して、またはソースタイルに関する保守的な最も遠いＺ値がマージされたソースタイルに関する保守的な最も遠いＺ値よりも小さくない（すなわち、それよりも近くない）と決定することに応答して、ＧＰＵ１２は、ソースタイルに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｓｒｃ＿Ｆａｒ）およびマージされたソースタイルの前のバージョンに関する保守的な最も遠いＺ値（すなわち、Ｍｅｒｇｅ＿Ｍａｓｋ＿Ｐｒｅｖ）のうちの最大値（すなわち、最遠値）に等しいように、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｍｅｒｇｅ）を設定する（１５８）。ＧＰＵ１２はまた、ソースタイルに関するカバレージマスク（すなわち、Ｓｒｃ＿Ｍａｓｋ）とマージされたソースタイルの前のバージョンに関するカバレージマスク（すなわち、Ｍｅｒｇｅ＿Ｍａｓｋ＿Ｐｒｅｖ）のビット単位のＯＲ演算の結果に等しいように、マージされたソースタイルの更新バージョンに関するカバレージマスクを設定する（１６０）。
【０１７３】
[0178]ＧＰＵ１２は、マージされたソースタイルが完全にカバーされるかどうかを決定する（１６２）。マージされたソースタイル内のサンプルのすべてが、マージされたソースタイルに対応するプリミティブのセットによってカバーされるとき、マージされたソースタイルは完全にカバーされ得る。マージされたソースタイルに対応するプリミティブのセットは、マージされたソースタイルに前にマージされた部分的にカバーされたソースタイルの各々に対応するプリミティブを含み得る。
【０１７４】
[0179]マージされたソースタイルが完全にカバーされると決定することに応答して、ＧＰＵ１２は、マージされたソースタイルが完全にカバーされることを示すためにマージフルリターン変数を真にセットする（１６４）。マージフル変数は、マージされたソースタイルの更新バージョンが完全にカバーされるかどうかを決定するために、図４における技法（たとえば、決定ブロック１２０）によって使用され得る。ＧＰＵ１２はまた、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値（すなわち、Ｚ＿Ｍｅｒｇｅ）を出力する（１６６）。マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値は、カリングＺ値を更新するために、図４における技法（たとえば、プロセスブロック１１４および１２２）によって使用され得る。ＧＰＵ１２はマージングプロセスを終了する。
【０１７５】
[0180]決定ブロック１６２に戻ると、マージされたソースタイルが完全にはカバーされないと決定することに応答して、ＧＰＵ１２は、マージされたソースタイルが完全にはカバーされないことを示すためにマージフル変数を偽にセットし、マージフル変数を出力し（１６８）、マージングプロセスを終了する。同様に、マージフル変数は、マージされたソースタイルの更新バージョンが完全にカバーされるかどうかを決定するために、図４における技法（たとえば、決定ブロック１２０）によって使用され得る。
【０１７６】
[0181]決定ブロック１５２および１５４は図５において別々の決定であるものとして示されているが、他の例では、決定ブロック１５２および１５４に列挙された基準は一緒に評価され得ることに留意されたい。そのような例では、両方の基準とも満たされた場合、処理はプロセスブロック１５６に進むことができ、両方の基準とも満たされなかった場合、処理はプロセスブロック１５８に進むことができる。
【０１７７】
[0182]図５に記載された部分的にカバーされたソースタイルのマージング技法は、例示のために、基礎的なメモリなしに動作するキャッシュユニットを使用するものとして記載される。図５に記載された技法は、基礎的なメモリなしに動作するキャッシュユニットに加えて、またはその代わりに、他のタイプのメモリデバイス、メモリユニット、および／またはメモリサブシステムを使用し得る。
【０１７８】
[0183]図４および図５に示されたように、ＧＰＵ１２は、ソースタイルの保守的な最も近いＺ値がタイル位置に関連付けられたカリングＺ値よりも遠いかどうかに基づいて、タイル位置に関連付けられたサンプルのソースタイルをグラフィックスパイプライン５０から選択的に廃棄する（１００、１０２、１０４）。たとえば、ＧＰＵ１２は、ソースタイルの保守的な最も近いＺ値がタイル位置に関連付けられたカリングＺ値よりも遠いと決定することに応答して、ソースタイルを廃棄し（１００−はい、１０２）、ソースタイルの保守的な最も近いＺ値がタイル位置に関連付けられたカリングＺ値よりも遠くないと決定することに応答して、ソースタイルを廃棄しない（１００−いいえ、１０４）。
【０１７９】
[0184]図４および図５にさらに示されたように、ＧＰＵ１２は、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、およびソースタイルの保守的な最も遠いｚ値がタイル位置に関連付けられたカリングｚ値よりも小さいかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、タイル位置に関連付けられたサンプルのソースタイルをタイル位置に関するマージされたソースタイルと選択的にマージする（１０６、１０８、１１０、１１２、１１８）。たとえば、ＧＰＵ１２は、ソースタイルがソースタイルに対応するプリミティブによって完全にはカバーされないこと、およびソースタイルの保守的な最も遠いｚ値がタイル位置に関連付けられたカリングｚ値よりも小さいことを決定することに応答して、ソースタイルをタイル位置に関するマージされたソースタイルとマージし（１０６−はい、１１０−いいえ、１１８）、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされること、またはソースタイルの保守的な最も遠いｚ値がタイル位置に関連付けられたカリングｚ値よりも小さくないことを決定することに応答して、ソースタイルをタイル位置に関するマージされたソースタイルとマージしない（１０６−いいえ、１０８、１１０−はい、１１２）。
【０１８０】
[0185]図４および図５にさらに示されたように、ＧＰＵ１２は、マージされたソースタイルの更新バージョンがマージされたソースタイルの更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を選択的に設定する（１２０、１２２）。たとえば、ＧＰＵ１２は、マージされたソースタイルの更新バージョンがプリミティブのセットによって完全にカバーされると決定することに応答して、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を設定し（１２０−はい、１２２）、マージされたソースタイルの更新バージョンがプリミティブのセットによって完全にはカバーされないと決定することに応答して、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値に等しいようにカリングＺ値を設定しない（１２０−いいえ）。
【０１８１】
[0186]図４および図５にさらに示されたように、ＧＰＵ１２は、ソースタイルの保守的な最も遠いＺ値およびマージされたソースタイルの前のバージョンに関する保守的な最も遠いＺ値に基づいて、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値を生成する（１５８）。たとえば、ＧＰＵ１２は、ソースタイルの保守的な最も遠いＺ値およびマージされたソースタイルの前のバージョンに関する保守的な最も遠いＺ値のうちの最大値（すなわち、最遠値）に等しいように、マージされたソースタイルの更新バージョンに関する保守的な最も遠いＺ値を設定し得る。
【０１８２】
[0187]図４および図５にさらに示されたように、ＧＰＵ１２は、ソースタイルに関するカバレージマスクおよびマージされたソースタイルの前のバージョンに関するカバレージマスクに基づいて、マージされたソースタイルの更新バージョンに関するカバレージマスクを生成する（１６０）。たとえば、ＧＰＵ１２は、マージされたソースタイルの更新バージョンに関するカバレージマスクを生成するために、マージされたソースタイルに関するカバレージマスクとの部分的にカバーされたソースタイルに関するカバレージマスクに対するビット単位のＯＲ演算を実行し得る。
【０１８３】
[0188]図４および図５にさらに示されたように、ＧＰＵ１２は、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを選択的に無効にする（１１０、１１６、１２０、１２４）。たとえば、ＧＰＵ１２は、ソースタイルがソースタイルに対応するプリミティブによって完全にカバーされると決定することに応答して、キャッシュラインを無効にする（１１０−はい、１１６）。別の例として、ＧＰＵ１２は、ソースタイルがソースタイルに対応するプリミティブによって完全にはカバーされないと決定することに応答して、マージされたソースタイルの更新バージョンがマージされたソースタイルの更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、キャッシュラインを選択的に無効にする（１２０、１２４）。たとえば、ＧＰＵ１２は、マージされたソースタイルの更新バージョンがプリミティブのセットによって完全にカバーされると決定することに応答して、キャッシュラインを無効にし（１２０−はい、１２４）、マージされたソースタイルの更新バージョンがプリミティブのセットによって完全にはカバーされないと決定することに応答して、キャッシュラインを無効にしない（１２０−いいえ）。
【０１８４】
[0189]図６は、本開示による、レンダリングされるべきプリミティブの例示的なセットと、プリミティブの例示的なセットのレンダリングに関連付けられた対応するマージキャッシュ状態とを示す概念図である。図６に示されたように、レンダリング対象は、４つのタイル位置（Ａ、Ｂ、Ｃ、Ｄ）と、３つの三角形プリミティブ（１、２、および３）とを含む。この例では、プリミティブは番号順にレンダリングされる。タイル位置の各々は、宛先タイル、１つまたは複数のソースタイル、およびマージされたソースタイルに対応し得る。
【０１８５】
[0190]プリミティブ１はソースタイルＡを完全にカバーし、ソースタイルＢとＣとＤとを部分的にカバーする。キャッシュラインは、完全にカバーされたソースタイルＡ用にマージキャッシュ内に生成されない。代わりに、いかなるマージングも要求せずに、タイル位置ＡについてのカリングＺ値（すなわち、宛先タイルＡついての保守的な最大Ｚ値）を直接更新するために、ソースタイルＡについての保守的な最大Ｚ値が使用され得る。キャッシュラインは、部分的にカバーされたソースタイルＢ、Ｃ、およびＤの各々用にマージキャッシュ内に生成される。図６に示されたように、プリミティブ１をレンダリングした後、マージキャッシュは、マージされたソースタイルＢ、Ｃ、およびＤ用のキャッシュラインを含む。
【０１８６】
[0191]キャッシュラインの各々は、それぞれのマージされたソースタイルに関するキャッシュタグと、蓄積されたカバレージマスクと、蓄積された保守的な最大Ｚ値とを記憶し得る。プリミティブ１はレンダリングされるべき最初のプリミティブなので、キャッシュラインの各々のための蓄積されたカバレージマスクは、対応するソースタイルのカバレージマスクに等しいように設定され、キャッシュラインの各々のための蓄積された保守的な最大Ｚ値は、対応するソースタイルの保守的な最大Ｚ値に等しいように設定される。たとえば、キャッシュラインＢのための蓄積されたソースマスクは、プリミティブ１をレンダリングするときに生成されたソースタイルＢについてのカバレージマスク（すなわち、ソースタイルＢ内のどのサンプルがプリミティブ１によってカバーされるかを示すカバレージマスク）に等しいように設定される。同様に、キャッシュラインＢのための保守的な最大Ｚ値は、プリミティブ１をレンダリングするときに生成されたソースタイルＢについての保守的な最大Ｚ値（すなわち、プリミティブ１によってカバーされるソースタイルＢに含まれるサンプルについての保守的な最大Ｚ値よりも大きいかまたはそれに等しい値）に等しいように設定される。
【０１８７】
[0192]プリミティブ１がレンダリングされた後、プリミティブ２がレンダリングされる。プリミティブ２は、ソースタイルＢとＣとＤとを部分的にカバーする。部分的にカバーされたソースタイルＢ、Ｃ、およびＤの各々は、マージキャッシュに記憶された対応するマージされたソースタイルとマージされる。たとえば、プリミティブ２用の部分的にカバーされたソースタイルＣは、マージキャッシュのキャッシュラインＣに記憶されたマージされたソースタイルとマージされる。結果として得られる蓄積されたカバレージマスクは、タイルＣ内のどのサンプルがプリミティブ１および／またはプリミティブ２によってカバーされるかを示す。マージされたソースタイルＣについての結果として得られる蓄積された保守的な最大Ｚ値は、プリミティブ１および／またはプリミティブ２によってカバーされるマージされたソースタイルＣに含まれるサンプルについての保守的な最大Ｚ値を示す。
【０１８８】
[0193]プリミティブ２をレンダリングした後、マージされたソースタイルＢは完全にカバーされたタイルになる。したがって、キャッシュラインＢは無効にされ、マージされたソースタイルＢをマージキャッシュから事実上削除する。タイル位置ＢについてのカリングＺ値（すなわち、宛先タイルＢついての保守的な最大Ｚ値）を更新するために、マージされたソースタイルＢについての保守的な最大Ｚ値が使用され得る。
【０１８９】
[0194]プリミティブ２をレンダリングした後、マージされたソースタイルＣおよびマージされたソースタイルＤは、部分的にカバーされたままである。したがって、キャッシュラインＣおよびＤはマージキャッシュに留まる。
【０１９０】
[0195]プリミティブ３をレンダリングした後、マージされたソースタイルＣは完全にカバーされたマージされたソースタイルになり、マージされたソースタイルＤは部分的にカバーされたタイルのままである。したがって、キャッシュラインＣは無効にされ、キャッシュラインＤはマージキャッシュに留まる。マージされたソースタイルＣは今や完全にカバーされたので、タイル位置ＣについてのカリングＺ値（すなわち、宛先タイルＣついての保守的な最大Ｚ値）を更新するために、マージされたソースタイルＣについての保守的な最大Ｚ値が使用され得る。
【０１９１】
[0196]いくつかの例では、本開示の技法は、階層的Ｚテストを実行するとき、部分的にカバーされたタイルをマージするためにキャッシュを使用し得る。グラフィックスハードウェアでは、サンプルＺ演算の作業負荷を低減するために、階層的Ｚ演算（代替として、低解像度Ｚ演算）が実行され得る。タイルごとのＺ値（すなわち、ｈｉｅｒＺ）は、タイルが複数のサンプルを有するとき、階層的Ｚバッファ内のメモリに記憶され得る。新しいタイルが処理されるとき、階層的Ｚテストを実行するために、１つの宛先Ｚ値（すなわち、ｈｉｅｒＺ）がメモリから読み取られ得る。階層的Ｚテストが「合格」または「不合格」である場合、サンプルごとのＺ値は、サンプルごとのＺテストのために必ずしもメモリから読み取られる必要がないことがあり得る。そのような方式により、メモリ使用量が削減され、パフォーマンスが改善され得る。たとえば、新しいタイルが処理されるとき、前に処理されたすべてのサンプルの最大Ｚ値は、そのタイルに関する階層的Ｚ値として使用され得る。新しいタイルの最小Ｚ値が階層的Ｚ値よりも大きい場合、新しいタイルは古いタイルの後ろにあり得る。そのような場合、すべてのサンプルのＺテストは不合格になり、サンプルごとのＺテストは実行される必要がない。しかしながら、いくつかの例では、階層的Ｚ値はそのタイル内のすべてのサンプルの最大Ｚ値を記録するので、タイルがプリミティブによって完全にカバーされるときのみ、いくつかのシステムは階層的Ｚ値を更新し得る。オブジェクトが小さい三角形のロットから構成されるとき、タイルのほとんどが完全にはカバーされないので、これは、階層的Ｚテスティングの効率を低減し得る。
【０１９２】
[0197]１つの解決策は、階層的Ｚ値として、単一の最大Ｚ値ではなく、メモリ内の階層的Ｚバッファに複数のＺ値とサンプルごとのマスクとを記憶することである。そのような解決策は、階層的Ｚテストの効率を向上させるように、部分的にカバーされたタイルに関する階層的Ｚ値を更新することが可能であり得る。しかしながら、そのような解決策は、かなりの量のメモリ帯域幅を消費し得る。
【０１９３】
[0198]いくつかの例では、本開示の技法は、部分的にカバーされたタイルをマージするためにオンチップキャッシュを使用する。そのような例では、タイルごとの１つの階層的Ｚ値はメモリに保存され得る。タイルが完全にカバーされ、タイルの新しい最大Ｚ値（すなわち、ｔｉｌｅＺ）が階層的Ｚ値（すなわち、ｈｉｅｒＺ）よりも小さい場合、階層的Ｚ値は、入力タイルに関する最大Ｚ値（すなわち、ｔｉｌｅＺ）に等しいように更新され得る。タイルが部分的にカバーされる場合、ｔｉｌｅＺ、入力タイルについてのサンプルごとのマスク、およびタイル座標は、キャッシュに送られ得る。タイルの画面座標はキャッシュタグとして使用され得、タイルごとの階層的Ｚ値（すなわち、ｈｉｅｒＺ）およびサンプルマスクはキャッシュラインに記憶され得る。
【０１９４】
[0199]キャッシュヒットが発生するとき、古いサンプルマスクは新しいサンプルマスクとマージされ得、タイルに関する階層的Ｚ値は、現在の階層的Ｚ値および入力タイルに関する最大Ｚ値のうちの最大値に等しいように設定され得る（すなわち、ｈｉｅｒＺ＝ｍａｘ（ｈｉｅｒＺ，ｔｉｌｅＺ））。マージした後、タイルが完全にカバーされる場合、階層的Ｚ値（すなわち、ｈｉｅｒＺ）はメモリ内で更新され得、キャッシュラインは状態を無効にするためにリセットされ得る。キャッシュミスが発生すると、新しいｔｉｌｅＺおよびサンプルマスク用に１つのキャッシュラインが割当てられ得る。この方式により、階層的Ｚバッファに複数のＺ値とサンプルマスクとを記憶することと同様の階層的Ｚ拒絶率が達成され得るが、それはより小さいメモリ帯域幅を使用し得る。
【０１９５】
[0200]いくつかの例では、低解像度Ｚバッファ（すなわち、ＬＲＺバッファ）はタイルごとのＬＲＺ値を記憶する。そのような例では、タイルごとのＬＲＺ値は１６ビットであり得る。そのような例では、完全にカバーされたタイルに関して、入力ソースタイルに関する最も遠いＺ値（すなわち、ｓｒｃＺＦａｒ）が宛先タイルに関する最も遠いＺ値（すなわち、ｄｓｔＺＦａｒ）よりも小さい（すなわち、ｓｒｃＺＦａｒ＜ｄｓｔＺＦａｒ）場合、ＬＲＺバッファは直接更新され得る。部分的にカバーされたタイルに関して、カバレージマスクをマージするために、キャッシュユニットが使用され得る。
【０１９６】
[0201]さらなる例では、タイルベースのレンダリングが使用される場合、ＬＲＺ構築段階中のビニングパスにおいてマージング動作が行われ得る。そのような例では、マージング動作は、レンダリングパスの繰返し中に必ずしも行われる必要がないことがあり得る。
【０１９７】
[0202]本開示に記載された技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実施され得る。たとえば、記載された技法の様々な態様は、マイクロプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、または任意の他の同等の集積回路もしくはディスクリート論理回路、ならびにそのような構成要素の任意の組合せを含む１つまたは複数のプロセッサ内で実施され得る。「プロセッサ」または「処理回路」という用語は、一般に、単独もしくは他の論理回路と組み合わされた前述の論理回路のいずれか、または処理を実行するディスクリートハードウェアなどの任意の他の同等の回路を指し得る。
【０１９８】
[0203]そのようなハードウェア、ソフトウェア、およびファームウェアは、本開示に記載された様々な動作と機能とをサポートするために、同じデバイス内または別々のデバイス内に実装され得る。加えて、記載されたユニット、モジュール、または構成要素のいずれも、一緒に、または別個ではあるが相互動作可能な論理デバイスとして別々に実装され得る。モジュールまたはユニットとしての異なる特徴の描写は、異なる機能的態様を強調するように意図されたものであり、必ずしも、そのようなモジュールまたはユニットが別々のハードウェア構成要素またはソフトウェア構成要素によって実現されなければならないことを意味するものではない。そうではなく、１つまたは複数のモジュールまたはユニットに関連する機能は、別々のハードウェア、ファームウェア、および／もしくはソフトウェアの構成要素によって実行されるか、または共通のもしくは別々のハードウェアもしくはソフトウェアの構成要素内で統合され得る。
【０１９９】
[0204]本開示に記載された技法は、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体内で記憶され、具現化され、または符号化され得る。コンピュータ可読媒体内に組み込まれるか、または符号化された命令は、たとえば、命令が１つまたは複数のプロセッサによって実行されると、本明細書に記載された技法を１つまたは複数のプロセッサに実行させることができる。いくつかの例では、コンピュータ可読媒体は、非一時的コンピュータ可読記憶媒体であり得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、プログラマブル読取り専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、カセット、磁気媒体、光学媒体、または有形である他のコンピュータ可読記憶媒体を含み得る。
【０２００】
[0205]コンピュータ可読媒体は、上記で列挙されたものなどの有形の記憶媒体に対応するコンピュータ可読記憶媒体を含み得る。コンピュータ可読媒体は、たとえば通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を備える場合もある。このようにして、「コンピュータ可読媒体」という句は、一般に、（１）非一時的である有形のコンピュータ可読記憶媒体、および（２）一時的な信号または搬送波などの非有形のコンピュータ可読通信媒体に対応し得る。
【０２０１】
[0206]様々な態様および例が記載された。しかしながら、以下の特許請求の範囲から逸脱することなく、本開示の構造または技法に対して修正が行われ得る。
【図１】
2016538627.tif 000003
【図２】
2016538627.tif 000004
【図３】
2016538627.tif 000005
【図４】
2016538627.tif 000006
【図５】
2016538627.tif 000007
【図６】
2016538627.tif 000008
【手続補正書】
【提出日】平成28年6月8日(2016.6.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
方法であって、
グラフィックス処理ユニット（ＧＰＵ）で、ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージすること、ここで、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、と、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にすることと
を備える、方法。
【請求項２】
前記ソースタイルを選択的にマージすることが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にはカバーされないこと、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることと、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされること、または前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近くないことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージしないことと、
を備える、請求項１に記載の方法。
【請求項３】
前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることが、
前記ソースタイルに関する前記保守的な最も遠いＺ値および前記マージされたソースタイルに関する保守的な最も遠いＺ値に基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値を生成すること
を備える、請求項２に記載の方法。
【請求項４】
前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることが、
前記ソースタイルに関するカバレージマスクおよび前記マージされたソースタイルに関するカバレージマスクに基づいて、前記マージされたソースタイルの前記更新バージョンに関するカバレージマスクを生成すること
をさらに備える、請求項３に記載の方法。
【請求項５】
複数のマージされたソースタイルのデータレコードをメモリに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記メモリが、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し、ここにおいて、Ｎは前記レンダリング対象内のタイル位置の総数である、
請求項１に記載の方法。
【請求項６】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関する保守的な最も遠いＺ値を備える、請求項５に記載の方法。
【請求項７】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関するカバレージマスクをさらに備える、請求項６に記載の方法。
【請求項８】
前記メモリが、基礎的なメモリに関連しないキャッシュユニットを備える、請求項５に記載の方法。
【請求項９】
複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが、基礎的なメモリに関連せず、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少ない、
請求項１に記載の方法。
【請求項１０】
複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少なく、
前記キャッシュユニットが、前記第１のデータレコードを基礎的なメモリに書き込まずに、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを前記キャッシュユニット内のキャッシュラインに書き込むように構成され、
前記キャッシュユニットが、前記第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、前記第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするようにさらに構成される、
請求項１に記載の方法。
【請求項１１】
前記ソースタイルの保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いかどうかに基づいて、前記タイル位置に関連付けられた前記ソースタイルを、グラフィックスパイプラインから選択的に廃棄することと、
前記マージされたソースタイルの前記更新バージョンが前記マージされたソースタイルの前記更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することと、
をさらに備える、請求項１に記載の方法。
【請求項１２】
前記ソースタイルを前記グラフィックスパイプラインから選択的に廃棄することが、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いと決定することに応答して、前記ソースタイルを廃棄することと、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠くないと決定することに応答して、前記ソースタイルを廃棄しないことと
を備え、
前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することが、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にカバーされると決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定することと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にはカバーされないと決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定しないことと
を備える、
請求項１１に記載の方法。
【請求項１３】
デバイスであって、
ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージするように構成された、ここで、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、および前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にするように構成されたグラフィックス処理ユニット（ＧＰＵ）
を備える、デバイス。
【請求項１４】
前記ＧＰＵが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にはカバーされないこと、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることと、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされること、または前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近くないことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージしないことと
を行うようにさらに構成される、請求項１３に記載のデバイス。
【請求項１５】
前記ＧＰＵが、
前記ソースタイルに関する前記保守的な最も遠いＺ値および前記マージされたソースタイルに関する保守的な最も遠いＺ値に基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値を生成すること
を行うようにさらに構成される、請求項１４に記載のデバイス。
【請求項１６】
前記ＧＰＵが、
前記ソースタイルに関するカバレージマスクおよび前記マージされたソースタイルに関するカバレージマスクに基づいて、前記マージされたソースタイルの前記更新バージョンに関するカバレージマスクを生成すること
を行うようにさらに構成される、請求項１５に記載のデバイス。
【請求項１７】
前記ＧＰＵが、
複数のマージされたソースタイルのデータレコードをメモリに記憶すること
を行うようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記メモリが、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し、ここにおいて、Ｎは前記レンダリング対象内のタイル位置の総数である、
請求項１３に記載のデバイス。
【請求項１８】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関する保守的な最も遠いＺ値を備える、請求項１７に記載のデバイス。
【請求項１９】
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関するカバレージマスクをさらに備える、請求項１８に記載のデバイス。
【請求項２０】
前記メモリが、基礎的なメモリに関連しないキャッシュユニットを備える、請求項１７に記載のデバイス。
【請求項２１】
前記ＧＰＵが、複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶するようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが、基礎的なメモリに関連せず、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少ない、
請求項１３に記載のデバイス。
【請求項２２】
前記ＧＰＵが、複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶するようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少なく、
前記キャッシュユニットが、前記第１のデータレコードを基礎的なメモリに書き込まずに、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを前記キャッシュユニット内のキャッシュラインに書き込むように構成され、
前記キャッシュユニットが、前記第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、前記第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするようにさらに構成される、
請求項１３に記載のデバイス。
【請求項２３】
前記ＧＰＵが、
前記ソースタイルの保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いかどうかに基づいて、前記タイル位置に関連付けられた前記ソースタイルを、グラフィックスパイプラインから選択的に廃棄することと、
前記マージされたソースタイルの前記更新バージョンが前記マージされたソースタイルの前記更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することと、
を行うようにさらに構成される、請求項１３に記載のデバイス。
【請求項２４】
前記ＧＰＵが、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いと決定することに応答して、前記ソースタイルを廃棄することと、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠くないと決定することに応答して、前記ソースタイルを廃棄しないことと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にカバーされると決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定することと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にはカバーされないと決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定しないことと、
を行うようにさらに構成される、請求項２３に記載のデバイス。
【請求項２５】
前記デバイスがワイヤレス通信デバイスを備える、請求項１３に記載のデバイス。
【請求項２６】
前記デバイスがモバイルフォンハンドセットを備える、請求項１３に記載のデバイス。
【請求項２７】
装置であって、
タイル位置に関連付けられたサンプルのソースタイルの保守的な最も遠いＺ値が、前記タイル位置に関連付けられたカリングＺ値よりも近いかどうかを決定するための手段、ここで、前記カリングＺ値は前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、と、
前記ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージするための手段と、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にするための手段と、
を備える、装置。
【請求項２８】
１つまたは複数のプロセッサによって実行されると、
ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージすること、ここで、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、と、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にすることと、
を前記１つまたは複数のプロセッサに行わせる命令を備える非一時的コンピュータ可読記憶媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０２０１
【補正方法】変更
【補正の内容】
【０２０１】
[0206]様々な態様および例が記載された。しかしながら、以下の特許請求の範囲から逸脱することなく、本開示の構造または技法に対して修正が行われ得る。
以下に本願発明の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
方法であって、
グラフィックス処理ユニット（ＧＰＵ）で、ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージすること
を備え、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、方法。
［Ｃ２］
前記ソースタイルを選択的にマージすることが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にはカバーされないこと、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることと、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされること、または前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近くないことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージしないことと、
を備える、Ｃ１に記載の方法。
［Ｃ３］
前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることが、
前記ソースタイルに関する前記保守的な最も遠いＺ値および前記マージされたソースタイルに関する保守的な最も遠いＺ値に基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値を生成すること
を備える、Ｃ２に記載の方法。
［Ｃ４］
前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることが、
前記ソースタイルに関するカバレージマスクおよび前記マージされたソースタイルに関するカバレージマスクに基づいて、前記マージされたソースタイルの前記更新バージョンに関するカバレージマスクを生成すること
をさらに備える、Ｃ３に記載の方法。
［Ｃ５］
複数のマージされたソースタイルのデータレコードをメモリに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記メモリが、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し、ここにおいて、Ｎは前記レンダリング対象内のタイル位置の総数である、
Ｃ１に記載の方法。
［Ｃ６］
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関する保守的な最も遠いＺ値を備える、Ｃ５に記載の方法。
［Ｃ７］
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関するカバレージマスクをさらに備える、Ｃ６に記載の方法。
［Ｃ８］
前記メモリが、基礎的なメモリに関連しないキャッシュユニットを備える、Ｃ５に記載の方法。
［Ｃ９］
複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが、基礎的なメモリに関連せず、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少ない、
Ｃ１に記載の方法。
［Ｃ１０］
複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶すること
をさらに備え、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少なく、
前記キャッシュユニットが、前記第１のデータレコードを基礎的なメモリに書き込まずに、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを前記キャッシュユニット内のキャッシュラインに書き込むように構成され、
前記キャッシュユニットが、前記第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、前記第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするようにさらに構成される、
Ｃ１に記載の方法。
［Ｃ１１］
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にすること
をさらに備える、Ｃ１に記載の方法。
［Ｃ１２］
前記ソースタイルの保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いかどうかに基づいて、前記タイル位置に関連付けられた前記ソースタイルを、グラフィックスパイプラインから選択的に廃棄することと、
前記マージされたソースタイルの前記更新バージョンが前記マージされたソースタイルの前記更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することと、
をさらに備える、Ｃ１に記載の方法。
［Ｃ１３］
前記ソースタイルを前記グラフィックスパイプラインから選択的に廃棄することが、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いと決定することに応答して、前記ソースタイルを廃棄することと、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠くないと決定することに応答して、前記ソースタイルを廃棄しないことと
を備え、
前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することが、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にカバーされると決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定することと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にはカバーされないと決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定しないことと
を備える、
Ｃ１２に記載の方法。
［Ｃ１４］
デバイスであって、
ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージするように構成されたグラフィックス処理ユニット（ＧＰＵ）
を備え、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、デバイス。
［Ｃ１５］
前記ＧＰＵが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にはカバーされないこと、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージすることと、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされること、または前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近くないことを決定することに応答して、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルとマージしないことと
を行うようにさらに構成される、Ｃ１４に記載のデバイス。
［Ｃ１６］
前記ＧＰＵが、
前記ソースタイルに関する前記保守的な最も遠いＺ値および前記マージされたソースタイルに関する保守的な最も遠いＺ値に基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値を生成すること
を行うようにさらに構成される、Ｃ１５に記載のデバイス。
［Ｃ１７］
前記ＧＰＵが、
前記ソースタイルに関するカバレージマスクおよび前記マージされたソースタイルに関するカバレージマスクに基づいて、前記マージされたソースタイルの前記更新バージョンに関するカバレージマスクを生成すること
を行うようにさらに構成される、Ｃ１６に記載のデバイス。
［Ｃ１８］
前記ＧＰＵが、
複数のマージされたソースタイルのデータレコードをメモリに記憶すること
を行うようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記メモリが、Ｎ個のマージされたソースタイルのデータレコードを記憶するために必要なデータの量よりも小さいデータ容量を有し、ここにおいて、Ｎは前記レンダリング対象内のタイル位置の総数である、
Ｃ１４に記載のデバイス。
［Ｃ１９］
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関する保守的な最も遠いＺ値を備える、Ｃ１８に記載のデバイス。
［Ｃ２０］
前記複数のタイル位置のうちの前記それぞれのタイル位置に関する前記マージされたソースタイルに関連付けられた前記データが、前記それぞれのタイル位置に関連付けられた前記マージされたソースタイルに関するカバレージマスクをさらに備える、Ｃ１９に記載のデバイス。
［Ｃ２１］
前記メモリが、基礎的なメモリに関連しないキャッシュユニットを備える、Ｃ１８に記載のデバイス。
［Ｃ２２］
前記ＧＰＵが、複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶するようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが、基礎的なメモリに関連せず、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少ない、
Ｃ１４に記載のデバイス。
［Ｃ２３］
前記ＧＰＵが、複数のマージされたソースタイルのデータレコードをキャッシュユニットに記憶するようにさらに構成され、
前記マージされたソースタイルのデータレコードの各々が、レンダリング対象の複数のタイル位置のうちのそれぞれのタイル位置に関するマージされたソースタイルに関連付けられたデータを含み、
前記キャッシュユニットが複数のキャッシュラインを備え、
前記キャッシュラインの各々が、前記マージされたソースタイルのデータレコードのうちのそれぞれのデータレコードを記憶するように構成され、
前記キャッシュユニット内のキャッシュラインの総数が、前記レンダリング対象内のタイル位置の総数よりも少なく、
前記キャッシュユニットが、前記第１のデータレコードを基礎的なメモリに書き込まずに、第１のタイル位置に関連付けられた第１のマージされたソースタイルのデータレコードを前記キャッシュユニット内のキャッシュラインに書き込むように構成され、
前記キャッシュユニットが、前記第１のマージされたソースタイルのデータレコードを基礎的なメモリに書き込まずに、前記第１のマージされたソースタイルのデータレコードを第２のタイル位置に関連付けられた第２のマージされたソースタイルのデータレコードで上書きするようにさらに構成される、
Ｃ１４に記載のデバイス。
［Ｃ２４］
前記ＧＰＵが、
前記ソースタイルが前記ソースタイルに対応する前記プリミティブによって完全にカバーされると決定することに応答して、前記マージされたソースタイル用のデータレコードを記憶するキャッシュユニット内のキャッシュラインを無効にすること
を行うようにさらに構成される、Ｃ１４に記載のデバイス。
［Ｃ２５］
前記ＧＰＵが、
前記ソースタイルの保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いかどうかに基づいて、前記タイル位置に関連付けられた前記ソースタイルを、グラフィックスパイプラインから選択的に廃棄することと、
前記マージされたソースタイルの前記更新バージョンが前記マージされたソースタイルの前記更新バージョンに対応するプリミティブのセットによって完全にカバーされるかどうかに基づいて、前記マージされたソースタイルの前記更新バージョンに関する保守的な最も遠いＺ値に等しいように前記カリングＺ値を選択的に設定することと、
を行うようにさらに構成される、Ｃ１４に記載のデバイス。
［Ｃ２６］
前記ＧＰＵが、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠いと決定することに応答して、前記ソースタイルを廃棄することと、
前記ソースタイルの前記保守的な最も近いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも遠くないと決定することに応答して、前記ソースタイルを廃棄しないことと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にカバーされると決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定することと、
前記マージされたソースタイルの前記更新バージョンがプリミティブの前記セットによって完全にはカバーされないと決定することに応答して、前記マージされたソースタイルの前記更新バージョンに関する前記保守的な最も遠いＺ値に等しいように前記カリングＺ値を設定しないことと、
を行うようにさらに構成される、Ｃ２５に記載のデバイス。
［Ｃ２７］
前記デバイスがワイヤレス通信デバイスを備える、Ｃ１４に記載のデバイス。
［Ｃ２８］
前記デバイスがモバイルフォンハンドセットを備える、Ｃ１４に記載のデバイス。
［Ｃ２９］
装置であって、
タイル位置に関連付けられたサンプルのソースタイルの保守的な最も遠いＺ値が、前記タイル位置に関連付けられたカリングＺ値よりも近いかどうかを決定するための手段、ここで、前記カリングＺ値は前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、と、
前記ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの前記保守的な最も遠いＺ値が前記タイル位置に関連付けられた前記カリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージするための手段と、
を備える、装置。
［Ｃ３０］
１つまたは複数のプロセッサによって実行されると、
ソースタイルが前記ソースタイルに対応するプリミティブによって完全にカバーされるかどうかに基づいて、および前記ソースタイルの保守的な最も遠いＺ値がタイル位置に関連付けられたカリングＺ値よりも近いかどうかに基づいて、マージされたソースタイルの更新バージョンを生成するために、前記タイル位置に関連付けられたサンプルの前記ソースタイルを前記タイル位置に関する前記マージされたソースタイルと選択的にマージする、ここで、前記カリングＺ値が前記タイル位置に対応する宛先タイルのすべてのサンプルに関する保守的な最も遠いＺ値を示す、
ことを前記１つまたは複数のプロセッサに行わせる命令を備える非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2016538627.tif 000009
2016538627.tif 000010