(57)【要約】Ｚカリング後にフラグメントストリームの重複フラグメントを除去又は識別するための技術が開示される。この技術は、Ｚカリング後のフラグメントを記憶する先入れ先出しバッファを維持することを含む。新たなフラグメントがバッファで受信される毎に、フラグメントのスクリーン位置がバッファ内の全ての他のフラグメントに対してチェックされる。フラグメントのスクリーン位置がバッファ内のフラグメントのスクリーン位置と一致する場合、バッファ内のフラグメントが除去されるか、重複しているものとしてマークされる。フラグメントのスクリーン位置がバッファ内の何れフラグメントのスクリーン位置とも一致しない場合、バッファ内の既存のフラグメントに対する変更が実行されない。何れの場合においても、フラグメントがバッファに追加される。バッファの内容は、後のピクセルシェーディングのために、ピクセルシェーダに送信される。【選択図】図７
2019537164.tif 000002
【特許請求の範囲】
【請求項１】
ピクセルシェーダによる処理のためにフラグメントのストリームの重複フラグメントを識別する方法であって、
Ｚカリングされたフラグメントのストリームから、第１スクリーン位置を有する第１フラグメントを受信することと、
フラグメントを記憶する遅延ピクセルシェーディングバッファにおいて、前記第１スクリーン位置と一致する第２スクリーン位置を有する第２フラグメントを識別することと、
前記識別したことに応じて、前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することと、
前記遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのために前記ピクセルシェーダに送信することと、を含む、
方法。
【請求項２】
複数の入力プリミティブをビン処理して、複数のビン処理された入力プリミティブを生成することと、
前記複数のビン処理された入力プリミティブをラスタライズして、フラグメントのセットを生成することと、
前記フラグメントのセットをＺカリングして、前記Ｚカリングされたフラグメントのストリームを生成することと、を含む、
請求項１の方法。
【請求項３】
前記複数の入力プリミティブをビン処理して、前記複数のビン処理された入力プリミティブを生成することは、前記複数の入力プリミティブのプリミティブをビンに割り当てることであって、各ビンは、スクリーン空間の異なる部分に関連している、ことを含み、
前記複数のビン処理された入力プリミティブは、前記複数の入力プリミティブのプリミティブによって重複したスクリーン空間の部分に基づいて順序付けられた前記複数の入力プリミティブのプリミティブを含む、
請求項２の方法。
【請求項４】
前記フラグメントのセットをＺカリングすることは、
前記フラグメントのセットのフラグメント毎に、前記フラグメントが隠されることを示す深度値を深度バッファが記憶しているかどうかを判別することと、
前記フラグメントが隠される場合に、前記フラグメントを破棄することと、
前記フラグメントが隠されない場合に、前記深度値を、前記フラグメントの深度値と等しくなるように更新することと、を含む、
請求項２の方法。
【請求項５】
前記複数のビン処理された入力プリミティブをラスタライズして前記フラグメントのセットを生成することは、
入力プリミティブ毎に、前記入力プリミティブによってカバーされたスクリーン位置を識別することと、前記カバーされたスクリーン位置に対してフラグメントを生成することであって、前記生成されたフラグメントは、前記ラスタライズによって生成された前記フラグメントのセットに含まれ、前記Ｚカリングされたフラグメントのストリームを生成するためにＺカリングされる、ことと、を含む、
請求項２の方法。
【請求項６】
前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することは、前記第２フラグメントを前記遅延ピクセルシェーディングバッファから除去することを含む、
請求項１の方法。
【請求項７】
前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することは、前記第２フラグメント及び前記第１フラグメントを重複しているものとしてマークすることを含む、
請求項１の方法。
【請求項８】
前記遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのためにピクセルシェーダに送信することは、ビンの全てのプリミティブに対応するフラグメントが前記遅延ピクセルシェーディングバッファで受信されたことを検出すること、フレームの全てのプリミティブが前記遅延ピクセルシェーディングバッファで受信されたことを検出すること、及び、前記遅延ピクセルシェーディングバッファがフルであることを検出すること、のうち１つ以上に応じて行われる、
請求項１の方法。
【請求項９】
前記遅延ピクセルシェーディングバッファは、スクリーン空間の第１部分に関連付けられており、
前記方法は、前記スクリーン空間の第２部分に関連する第２遅延ピクセルシェーディングバッファのために、前記受信することと、前記識別することと、前記変更することと、前記送信することと、を実行することを含む、
請求項１の方法。
【請求項１０】
フラグメントのセットのフラグメントをＺカリングして、Ｚカリングされたフラグメントのストリームを生成するように構成されたＺカリングユニットと、
ピクセルシェーダであって、前記ピクセルシェーダに提供されたフラグメントに対してピクセルシェーディング処理を実行するように構成されたピクセルシェーダと、
遅延ピクセルシェーディングユニットと、を備え、
前記遅延ピクセルシェーディングユニットは、
前記Ｚカリングされたフラグメントのストリームから、第１スクリーン位置を有する第１フラグメントを受信することと、
フラグメントを記憶する遅延ピクセルシェーディングバッファにおいて、前記第１スクリーン位置と一致する第２スクリーン位置を有する第２フラグメントを識別することと、
前記識別したことに応じて、前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することと、
前記遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのために前記ピクセルシェーダに送信することと、
を行うように構成されている、
アクセラレーテッド処理デバイス（ＡＰＤ）。
【請求項１１】
複数の入力プリミティブをビン処理して、複数のビン処理された入力プリミティブを生成するように構成されたビン処理部と、
前記複数のビン処理された入力プリミティブをラスタライズして、前記フラグメントのセットを生成するように構成されたスキャンコンバータと、を備える、
請求項１０のＡＰＤ。
【請求項１２】
前記複数の入力プリミティブをビン処理して、前記複数のビン処理された入力プリミティブを生成することは、前記複数の入力プリミティブのプリミティブをビンに割り当てることであって、各ビンは、スクリーン空間の異なる部分に関連している、ことを含み、
前記複数のビン処理された入力プリミティブは、前記複数の入力プリミティブのプリミティブによって重複したスクリーン空間の部分に基づいて順序付けられた前記複数の入力プリミティブのプリミティブを含む、
請求項１１のＡＰＤ。
【請求項１３】
前記Ｚカリングユニットは、
前記フラグメントのセットのフラグメント毎に、前記フラグメントが隠されることを示す深度値を深度バッファが記憶しているかどうかを判別することと、
前記フラグメントが隠される場合に、前記フラグメントを破棄することと、
前記フラグメントが隠されない場合に、前記深度値を、前記フラグメントの深度値と等しくなるように更新することと、
によって、前記フラグメントのセットのフラグメントをＺカリングするように構成されている、
請求項１１のＡＰＤ。
【請求項１４】
前記スキャンコンバータは、
入力プリミティブ毎に、前記入力プリミティブによってカバーされたスクリーン位置を識別することと、前記カバーされたスクリーン位置に対してフラグメントを生成することであって、前記生成されたフラグメントは、前記ラスタライズによって生成された前記フラグメントのセットに含まれ、前記Ｚカリングされたフラグメントのストリームを生成するためにＺカリングされる、こととによって、前記複数のビン処理された入力プリミティブをラスタライズして、前記フラグメントのセットを生成するように構成されている、
請求項１１のＡＰＤ。
【請求項１５】
前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することは、前記第２フラグメントを前記遅延ピクセルシェーディングバッファから除去することを含む、
請求項１０のＡＰＤ。
【請求項１６】
前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することは、前記第２フラグメント及び前記第１フラグメントを重複しているものとしてマークすることを含む、
請求項１０のＡＰＤ。
【請求項１７】
前記遅延ピクセルシェーディングユニットは、ビンの全てのプリミティブに対応するフラグメントが前記遅延ピクセルシェーディングバッファで受信されたことを検出すること、フレームの全てのプリミティブが前記遅延ピクセルシェーディングバッファで受信されたことを検出すること、及び、前記遅延ピクセルシェーディングバッファがフルであることを検出すること、のうち１つ以上に応じて、前記遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのために前記ピクセルシェーダに送信するように構成されている、
請求項１０のＡＰＤ。
【請求項１８】
プロセッサによって実行されると、ピクセルシェーダによる処理のためにフラグメントのストリームの重複フラグメントを識別する方法を前記プロセッサに実行させる命令を記憶するコンピュータ可読記憶媒体であって、
前記方法は、
Ｚカリングされたフラグメントのストリームから、第１スクリーン位置を有する第１フラグメントを受信することと、
フラグメントを記憶する遅延ピクセルシェーディングバッファにおいて、前記第１スクリーン位置と一致する第２スクリーン位置を有する第２フラグメントを識別することと、
前記識別したことに応じて、前記一致に基づいて前記遅延ピクセルシェーディングバッファを変更することと、
前記遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのためにピクセルシェーダに送信することと、を含む、
コンピュータ可読記憶媒体。
【請求項１９】
前記方法は、
複数の入力プリミティブをビン処理して、複数のビン処理された入力プリミティブを生成することと、
前記複数のビン処理された入力プリミティブをラスタライズして、フラグメントのセットを生成することと、
前記フラグメントのセットをＺカリングして、前記Ｚカリングされたフラグメントのストリームを生成することと、を含む、
請求項１８のコンピュータ可読記憶媒体。
【請求項２０】
前記遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのためにピクセルシェーダに送信することは、ビンの全てのプリミティブに対応するフラグメントが前記遅延ピクセルシェーディングバッファで受信されたことを検出すること、フレームの全てのプリミティブが前記遅延ピクセルシェーディングバッファで受信されたことを検出すること、及び、前記遅延ピクセルシェーディングバッファがフルであることを検出すること、のうち１つ以上に応じて行われる、
請求項１８のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１２月９日出願の米国特許出願第１５／３７４，７５２号及び２０１６年１２月１３日出願の欧州特許出願第１６２０３８７７．２号の利益を主張するものであり、これらは、言及することによって本明細書に完全に記載されているものとして援用される。
【０００２】
開示された実施形態は、概して、グラフィックス処理に関し、特に、Ｚカリング後の隠蔽フラグメント（occluded fragments）の除去に関する。
【背景技術】
【０００３】
３次元グラフィックスをレンダリングするハードウェアは、スクリーンに描画されるプリミティブを指定する入力を受け付け、当該入力を三角形に変換し、当該三角形を処理してスクリーンに表示するための色を生成する。この処理は、ピクセルの色を決定する処理であるピクセルシェーディングを含む。ピクセルシェーディングは、通常、ピクセルシェーダが特定のピクセルに対して複数の色を不必要に計算し、最終的に１つの色のみが使用される場合に発生する少なくとも一部の「オーバードロー」を含む。オーバードローは、例えば、２つの三角形がスクリーン空間内で重なっている場合に発生することがある。このような状況では、ピクセルシェーダは、第１三角形内のピクセルに対して第１色を決定し、次いで、第２三角形内の同じピクセルに対して第２色を決定する場合がある。このようなピクセルは１つしか使用できないので、決定された色値のうち１つの色値が破棄される。グラフィックス処理ハードウェアのパフォーマンスを向上させるには、オーバードローを抑制することが重要である。
【０００４】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができるであろう。
【図面の簡単な説明】
【０００５】
【図１】１つ以上の開示された実施形態が実装され得る例示的なデバイスのブロック図である。
【図２】一例によるアクセラレーテッド処理デバイスのブロック図である。
【図３】図２に示すグラフィックス処理パイプラインの更なる詳細を示すブロック図である。
【図４】一例による、図３のビン処理部（binner）によって実行される処理を示す図である。
【図５】一例による、図３のスキャンコンバータ及び図３のＺカリングユニットによって実行される処理を示す図である。
【図６】一例による、後に受信したフラグメントによって隠されるフラグメントを破棄する方法のフロー図である。
【図７】一例による、後に受信したフラグメントによって隠されるフラグメントを破棄する例示的な処理を示す図である。
【発明を実施するための形態】
【０００６】
本開示は、Ｚカリングが完了した後のフラグメントストリーム内の重複フラグメントを除去又は識別する技術に関する。この技術は、Ｚカリング後のフラグメントを記憶する先入れ先出し（ＦＩＦＯ）バッファを維持することを含む。新たなフラグメントがバッファで受信される毎に、当該フラグメントのスクリーン位置が、バッファ内の他の全てのフラグメントに対してチェックされる。フラグメントのスクリーン位置がバッファ内のフラグメントのスクリーン位置と一致する場合、バッファ内のフラグメントが除去されるか、重複しているものとしてマーキングされる。フラグメントのスクリーン位置がバッファ内の何れのフラグメントのスクリーン位置にも一致しない場合、バッファ内の既存のフラグメントに対する変更が実行されない。何れの場合も、フラグメントがバッファに追加される。バッファの内容は、後に、ピクセルシェーディングのためにピクセルシェーダに送信される。
【０００７】
図１は、本開示の１つ以上の態様が実装された例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージデバイス１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力デバイス１０８及び出力デバイス１１０をそれぞれ駆動する入力ドライバ１１２及び出力ドライバ１１４も含む。デバイス１００は、図１に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【０００８】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含む。
【０００９】
ストレージデバイス１０６は、固定又は着脱可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１０】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤ１１６は、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス１１８に提供するように構成されている。
【００１１】
ＡＰＤ１１６は、単一命令複数データ（ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理装置を含む。しかしながら、ＡＰＤ１１６によって実行されるものとして説明した機能は、ＳＩＭＤパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【００１２】
図２は、一例によるアクセラレーテッド処理デバイス１１６のブロック図である。プロセッサ１０２は、プロセッサ１０２による実行のための１つ以上の制御論理モジュールをシステムメモリ１０４内に保持している。制御論理モジュールは、オペレーティングシステム１２０と、ドライバ１２２と、アプリケーション１２６と、を含む。これらの制御論理モジュールは、プロセッサ１０２及びＡＰＤ１１６の様々な態様の処理を制御する。例えば、オペレーティングシステム１２０は、ハードウェアと直接通信し、プロセッサ１０２で実行中の他のソフトウェア用のハードウェアへのインタフェースを提供する。ドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするために、プロセッサ１０２で実行中のソフトウェア（例えば、アプリケーション１２６）へのアプリケーションプログラミングインタフェース（ＡＰＩ）を提供することによって、ＡＰＤ１１６の処理を制御する。また、ドライバ１２２は、ＡＰＤ１１６の処理コンポーネント（例えば、以下でさらに詳細に説明するＳＩＭＤユニット１３８等）による実行のために、シェーダプログラムをコンパイルするジャストインタイムコンパイラを含む。
【００１３】
ＡＰＤ１１６は、例えばグラフィックス処理及び非グラフィックス処理等のように、並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングするために使用することができる。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンド、又は、グラフィックス処理パイプライン１３４の「正常な」情報フローの一部ではないコマンドに基づいて、例えばビデオ、物理シミュレーション、計算流体力学又は他のタスクに関係する処理等のようにグラフィックス処理に直接関連しない（若しくは関連していない）計算処理を実行する。
【００１４】
ＡＰＤ１１６は、ＳＩＭＤパラダイムに従って、プロセッサ１０２の要求に応じて並列に処理を実行するように構成された１つ以上のＳＩＭＤユニット１３８を有するシェーダエンジン１３２（本明細書では、まとめて「プログラマブル処理装置２０２」と呼ばれる）を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含んでおり、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行するのに必要とされていない場合、レーンを予測によってスイッチオフにすることができる。予測を使用して、分岐した制御フローを有するプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
【００１５】
シェーダエンジン１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並行して実行されるプログラムの単一のインスタンス化（instantiation）を表す。ワークアイテムは、単一のＳＩＭＤユニット１３８上で「ウェーブフロント（wavefront）」として同時に実行することができる。複数のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれてもよい。ワークグループを構成する各ウェーブフロントを実行することによって、ワークグループを実行することができる。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で連続して実行されてもよいし、異なるＳＩＭＤユニット１３８上で部分的に又は完全に並列して実行されてもよい。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で同時に実行可能なワークアイテムの最大の集合と考えることができる。したがって、プロセッサ１０２から受信したコマンドが、特定のプログラムが単一のＳＩＭＤユニット１３８上で同時に実行できない程度に並列化されることを示す場合、当該プログラムは、２つ以上のＳＩＭＤユニット１３８で並列化され、又は、同じＳＩＭＤユニット１３８上で直列化（必要に応じて、並列化及び直列化の両方が行われる）されたウェーブフロントに分割される。スケジューラ１３６は、異なるシェーダエンジン１３２及びＳＩＭＤユニット１３８で様々なウェーブフロントをスケジュールすることに関連する処理を実行するように構成されている。スケジュールすることは、ＳＩＭＤユニット１３８上で実行するためのウェーブフロントを割り当てること、ウェーブフロントがいつ終了したかを決定することと、ウェーブフロントがいつストールし、他のウェーブフロントとスワップアウトされるかを判別することと、他のスケジューリングタスクを実行すること、を含む。
【００１６】
シェーダエンジン１３２によって提供される並列処理は、例えば、ピクセル値計算、頂点変換及び他のグラフィックス処理等のグラフィックス関連処理に適している。プロセッサ１０２からグラフィックス処理コマンドを受信するグラフィックス処理パイプライン１３４は、並列実行のために計算タスクをシェーダエンジン１３２に提供する。
【００１７】
また、シェーダエンジン１３２は、グラフィックスに関連しないか、グラフィックス処理パイプライン１３４の「通常」処理（例えば、グラフィックス処理パイプライン１３４の処理のために実行される処理を補足するのに実行されるカスタム処理）の一部として実行されない計算タスクを実行するために使用される。プロセッサ１０２で実行中のアプリケーション１２６又は他のソフトウェアは、係る計算タスクを定義するプログラム（「計算シェーダプログラム」と呼ばれることが多い）を、実行のためにＡＰＤ１１６に送信する。
【００１８】
図３は、図２に示すグラフィックス処理パイプライン１３４の更なる詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、ワールド空間パイプライン３０２と、ビン処理部３０４と、スキャンコンバータ３０６と、Ｚカリングユニット３０８と、遅延ピクセルシェーディングユニット３１０と、ピクセルシェーダ３１２と、出力マージャ３１４と、を含む。出力マージャ３１４は、ディスプレイデバイス１１８に表示するためのデータを記憶するフレームバッファ３１６に対してピクセルデータを出力する。フレームバッファは、ディスプレイデバイス１１８にデータを表示する以外の目的に使用することができる。
【００１９】
ワールド空間パイプライン３０２は、３次元ワールド空間で定義されたオブジェクトを、スクリーン空間で定義された三角形に変換する頂点及びプリミティブ処理を実行する。ワールド空間パイプライン３０２は、ユーザ充填バッファ（例えば、プロセッサ１０２によって実行されるソフトウェア（例えば、アプリケーション等）の要求によって充填されたバッファ）からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。ワールド空間パイプライン３０２は、プロセッサ１０２から受信した入力を、スクリーンピクセルにレンダリングするのにより適した形態に変換する機能を実行する。より具体的には、ワールド空間パイプライン３０２は、頂点シェーディング機能と、テッセレーションが可能である場合にはオプションのテッセレーション機能と、ジオメトリシェーディングが可能である場合にはオプションのジオメトリシェーディング機能と、を実行する。
【００２０】
頂点シェーディングは、例えば、トランスフォーム、スキニング、モーフィング、頂点単位のライティング等の様々な頂点単位の処理を実行することを含む。トランスフォーム処理は、頂点の座標をトランスフォーム（変換）するための様々な処理を含むことができる。これらの処理は、モデリングトランスフォーム、表示トランスフォーム（viewing transformations）、投影トランスフォーム、パースペクティブ（perspective）分割及びビューポートトランスフォームのうち１つ以上を含んでもよい。本明細書では、このようなトランスフォームは、トランスフォームが実行される頂点の座標、つまり「位置」を変更すると考えられる。頂点シェーディングの他の処理は、座標以外の属性を変更してもよい。頂点シェーディングは、１つ以上のシェーダエンジン１３２で実行される頂点シェーダプログラムとして部分的又は完全に実装される。いくつかの例では、頂点シェーダプログラムは、プロセッサ１０２によって提供され、コンピュータプログラマによって事前に生成されたプログラムに基づいている。ドライバ１２２は、このようなプログラムをコンパイルして、シェーダエンジン１３２内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。他の例において、頂点シェーダプログラムは、ドライバ１２２によって直接提供されるか、ＡＰＤ１１６自体のメモリから取り出されるか、任意の他の技術的に実現可能な手段を通じて提供される。
【００２１】
テッセレーションは、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。テッセレーションは、入力プリミティブに基づいてテッセレーションのパッチを生成し、パッチのサンプルのセットを生成し、パッチのサンプルに対応する頂点の頂点位置を計算することを含む。テッセレーションは、プログラマブル処理装置２０２で実行されるシェーダプログラムによって、部分的又は完全に実行することができる。
【００２２】
ジオメトリシェーディングは、プリミティブ毎に頂点処理を実行する。様々な異なるタイプの処理を、例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン（fur-fin）生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等の処理を含むジオメトリシェーディングを介して実行することができる。ジオメトリシェーディングのための処理は、プログラマブル処理装置２０２で実行されるシェーダプログラムによって実行されてもよい。
【００２３】
ワールド空間パイプライン３０２は、ハードウェア（固定機能のハードウェア及びプログラム可能なハードウェアを含む）とソフトウェアとの組み合わせとして実装することができ、全てハードウェア（全て固定機能のハードウェア、全てプログラム可能なハードウェア、もしくはこれらの組み合わせを含む）として実装することができ、またはハードウェアプロセッサ上で実行されているソフトウェアとして完全に実装することができる。ワールド空間パイプライン３０２は、フレームバッファ３１６に書き込まれ、ディスプレイデバイス１１８に出力されるスクリーンピクセルに最終的に変換できるようにグラフィックス処理パイプライン１３４内の他のユニットによって処理するために、プリミティブ（通常は三角形）を出力する。
【００２４】
オプションであるビン処理部３０４は、ワールド空間パイプライン３０２からプリミティブを受信し、各プリミティブを１つ以上の「ビン」に割り当てる。ビンは、スクリーン空間の特定の区画に関連するピクセルデータの論理的なグループである。例えば、１つのビンは、スクリーン空間の左上のコーナーのピクセルデータのグループ（例えば、スクリーン空間の上部６４×６４ピクセル）を含むことができる。ビン処理部３０４は、特定のトリガ条件が満たされるまでビンを充填した後、順次、処理のためにスキャンコンバータ３０６にビンを送信する。ビン処理の目的は、グラフィックス処理パイプライン１３４内の後のユニットが、所定時間に処理されるスクリーンの部分に関して、ピクセルを「集中」的に処理可能にすることである。この「集中」は、処理の任意の特定の部分の間に維持される作業データの量を削減することを目的としており、これにより、キャッシュ又はバッファをより小さくし及び／又は（例えば、より高いヒット率を有する等によって）より効率的に使用することができる。例えば、スクリーンの左上隅に関連するデータを送信してから他のデータを送信することによって、左上隅に関連するデータを記憶するバッファ及びキャッシュは、スクリーンの当該左上隅のデータのみを有する。これにより、このようなバッファ又はキャッシュをより小さくし及び／又はより高いヒット率を得ることが可能になる。ビン処理部３０４の処理の例は、図４に関連して以下に提供される。ビン処理部の処理に関する更なる詳細は、２０１３年３月２９日に出願された“Hybrid Render with Deferred Primitive Batch Binning”と題する米国特許出願第１３／８５３，４２２号、及び、２０１６年８月２９日に出願された“Hybrid Render with Preferred Primitive Batch Binning and Sorting”と題する米国特許出願第１５／２５０，３５７号において提供されており、これらの両方の全体は、言及することによって本明細書に援用される。
【００２５】
スキャンコンバータ３０６は、ビン処理部３０４からプリミティブを受信し、これらのプリミティブに対してラスタライズを実行する。ラスタライズは、何れのスクリーンピクセル（又は、アンチエイリアシング等の目的で複数の色値サンプルがスクリーンピクセル毎に生成されるモードの場合には、サブピクセルサンプル）が特定のプリミティブによってカバーされるかを判別することを含む。「ピクセル」という用語は、本明細書において「サブピクセルサンプル」に置き換えられてもよいことを理解されたい。サブピクセルサンプルは、複数のサンプルがピクセル毎に生成される状況では、ピクセルよりも小さいスクリーン空間の一部である。例えば、アンチエイリアシングアルゴリズムは、ピクセル毎に複数のサンプルを利用して、エッジの見かけの急峻さを低減してもよい。
【００２６】
スキャンコンバータ３０６は、特定のピクセルに対するデータの未完成な表現である「フラグメント」を生成して出力する。フラグメントは、グラフィックス処理パイプライン１３４の残りの部分を通って移動し、フラグメントの色、及び、可能であれば他の値を識別するように処理される。フラグメントは、深度テスト（depth testing）又は他の理由によりカリングされてもよいし、存続して、ディスプレイデバイス１１８に表示するための色値としてフレームバッファ３１６に書き込まれてもよい。スキャンコンバータ３０６は、複数のフラグメントを、スクリーン空間内の隣接する２×２のフラグメントのグループである「クワッド」にグループ分けして出力してもよい。各クワッドは、スクリーン空間内のクワッドの位置を一意に定義するクワッドアドレスに対応することができる。例えば、クワッドが２×２のフラグメントのグループである場合、クワッドアドレスは、偶数のスクリーン位置ｘ及びｙを有するクワッド内のフラグメントのスクリーン位置を２で割ったものであってもよい。一例において、クワッドは、スクリーン位置［０，０］、［１，０］、［０，１］、［１，１］を有する４つのフラグメントを含む。このクワッドのクワッドアドレスは、偶数のスクリーン位置（０，０）を有するフラグメントの座標を２で割ったもの（０，０）となる。スクリーン位置［１０，８］、［１１，８］、［１０，９］、［１１，９］を有する４つのフラグメントを含むクワッドの場合、クワッドアドレスは、共に偶数番号のピクセル座標（［１０，８］）を有するフラグメントについて、その両方の座標を２で割ったスクリーン位置（［５，４］）となる。各クワッドは、クワッド内の何れのフラグメントがプリミティブによってカバーされ、何れのフラグメントがカバーされないかを示すカバレッジマップを含む。例えば、ラスタライズは、プリミティブが、特定のクワッドの４つのフラグメントのうち３つのフラグメントをカバーすると決定してもよい。そのクワッドのカバレッジマップは、３つのカバーされたフラグメントがカバーされ、残りの１つのフラグメントがカバーされていないことを示す。
【００２７】
Ｚカリングユニット３０８は、後に見られるフラグメント及び既に見られたフラグメントの深度値によって判別されるように、既に見られたフラグメントによって隠されていると判別されたフラグメントを破棄する。蓄積された深度データは、フレーム毎にリセットされる。一例では、現在のフレームに対してＺカリングユニット３０８によってフラグメントが処理されていない特定のスクリーン位置について、Ｚカリングユニット３０８は、５の深度を有する第１フラグメント、次に８の深度を有する第２フラグメント、次いで２の深度を有する第３フラグメントを受信する。Ｚカリングユニット３０８は、スクリーン位置の深度データが未だ存在しないので、第１フラグメントを破棄しない。しかしながら、第２フラグメントの深度値が、当該フラグメントが第１フラグメントに比べてカメラから遠い（例えば、８の深度が５の深度よりも大きい）ことを示しているので、Ｚカリングユニット３０８は、第２フラグメントを破棄する。Ｚカリングユニット３０８は、第３フラグメントが２の深度値を有しており、５の深度値を有する他の最も近いフラグメントよりも近いので、第３フラグメントを破棄しない。また、Ｚカリングユニット３０８は、後に見られるフラグメントの処理のために、スクリーン位置の深度値を２に更新する。クワッドの処理においてフラグメントを破棄することは、クワッドのカバレッジマップを変更することを含んでもよく、クワッドのカバレッジマップが更新された後にフラグメントが全く見えない場合には、クワッド全体を破棄することを含んでもよい。
【００２８】
遅延ピクセルシェーディングユニット３１０は、Ｚカリングユニット３０８から受信したフラグメントを保持して、保持されたフラグメントを、当該フラグメントを上書きすることになるより新たなフラグメントに対してテストする。このテストは、ピクセルシェーダ３１２によって処理されるフラグメントの数を低減するために実行される。Ｚカリングユニット３０８に関して説明した３つのフラグメントの例に戻ると、第３フラグメントがカメラに最も近く、これにより他の２つのフラグメントを隠すため、Ｚカリングユニット３０８によって処理された３つのフラグメントのうち第３フラグメントのみが最終的に見えるようになる。しかしながら、Ｚカリングユニット３０８は、深度値５を有する第１フラグメントと、深度値２を有する第３フラグメントと、の両方を渡す。最終的なシーンでは見えなくなる第１フラグメントがピクセルシェーダ３１２によって処理されるのを抑制するために、遅延ピクセルシェーディングユニット３１０は、フラグメントを更に処理して、後に見られるフラグメントによって隠されるにも関わらずＺカリングユニット３０８によって渡された少なくともいくつかのフラグメントを除去する。遅延ピクセルシェーディングユニット３１０の処理に関する詳細は、少なくとも図６及び図７並びに関連する開示において与えられる。
【００２９】
ピクセルシェーダ３１２は、ピクセルシェーディングを実施する。ピクセルシェーディングは、ワールド空間パイプライン３０２で生成されたプリミティブと、ラスタライズ及びＺカリングの結果と、に基づいて、フラグメントの値（色等）を決定することを含む。ピクセルシェーディングは、テクスチャメモリからのテクスチャを適用すること、シェーディングアルゴリズムを適用すること、及び／又は、他の処理を適用することを含んでもよい。ピクセルシェーディングのための処理は、プログラマブル処理装置２０２で実行される１つ以上のシェーダプログラムによって実行されてもよい。
【００３０】
出力マージャ３１４は、ピクセルシェーダ３１２から受信したフラグメントを処理してフレームバッファ３１６に出力する。フレームバッファは、ディスプレイデバイス１１８への出力又は他の目的のために、ピクセルデータを記憶する。
【００３１】
ワールド空間パイプライン３０２、ビン処理部３０４、スキャンコンバータ３０６、Ｚカリングユニット３０８、遅延ピクセルシェーディングユニット３１０、ピクセルシェーダ３１２及び出力マージャ３１４の各々は、ハードウェア（固定機能のハードウェア及びプログラマブルハードウェアを含む）とソフトウェアとの組み合わせとして実装することができ、全てをハードウェア（全て固定機能のハードウェア、全てプログラム可能なハードウェア、若しくは、これらの組み合わせを含む）として実装することができ、ハードウェアプロセッサで実行されているソフトウェアとして完全に実装することができる。
【００３２】
図４は、一例による、図３のビン処理部３０４によって実行される処理を示す図である。いくつかのスクリーン空間区画４０４に分割されたスクリーン空間４０２が示されている。スクリーン空間４０２は、ディスプレイデバイス１１８に最終的に出力するためにピクセルをレンダリングすることができるジオメトリック領域を表す。各スクリーン空間区画４０４は、スクリーン空間４０２の空間的に異なる部分である。
【００３３】
図４は、ワールド空間パイプライン３０２から受信した５つの異なるプリミティブ４０６を示している。異なるプリミティブ４０６は、異なるスクリーン空間区画４０４をカバーしている。第１プリミティブ４０６（１）は、スクリーン空間区画４０４（１）、スクリーン空間区画４０４（２）、スクリーン空間区画４０４（４）及びスクリーン空間区画４０４（５）をカバーしている。第２プリミティブ４０６（２）は、スクリーン空間区画４０４（１）、スクリーン空間区画４０４（２）及びスクリーン空間区画４０４（３）をカバーしている。第３プリミティブ４０６（３）は、スクリーン空間区画４０４（５）をカバーしている。第４プリミティブ４０６（４）は、スクリーン空間区画４０４（３）、スクリーン空間区画４０４（５）及びスクリーン空間区画４０４（６）をカバーしている。第５プリミティブ４０６（５）は、スクリーン空間区画４０４（５）、スクリーン空間区画４０４（６）、スクリーン空間区画４０４（７）、スクリーン空間区画４０４（８）及びスクリーン空間区画４０４（９）をカバーしている。
【００３４】
ビン処理部３０４は、ビン１〜９（ビン１  ４０８（１）、ビン２  ４０８（２）、以下同様にビン９  ４０８（９）までを含む）を生成する。各ビン４０８は、その特定のビンに関連するスクリーン空間区画４０４をカバーするプリミティブ４０６を含む。ビン４０８は、処理のためにグラフィックス処理パイプライン１３４の残りの部分に順次送信される。図示された特定の順序は、左から右及び行毎であるが、ビン４０８を処理のために送信する順序は、技術的に実現可能な任意の順序とすることができる。
【００３５】
プリミティブ４０６は、関連するスクリーン空間区画４０４の境界で「切断」されているように図４に示されているが、プリミティブ全体は、特定の各ビンに含まれる。関連するスクリーン空間区画４０４の境界に合わせたクリッピング矩形は、各ビン４０８と共にグラフィックス処理パイプライン１３４の残りの部分に送信される。その結果、グラフィックス処理パイプライン１３４の残りの部分は、スクリーン空間区画４０４の外側ではなく内側のフラグメントのデータを処理することを認識している。クリッピング矩形の境界は、隣接ピクセルからのデータを使用するアンチエイリアシング又は他の処理等のように、境界の変更を必要とする可能性がある様々な処理のために変更することができる。
【００３６】
ビン４０８は、クリッピング矩形と共に、グラフィックス処理パイプライン１３４の残りの部分によって処理され、プリミティブをビンの順序でピクセルにレンダリングする。例えば、スキャンコンバータ３０６は、第１ビン４０８（１）、第２ビン４０８（２）、第３ビン４０８（３）等におけるプリミティブのピクセルカバレッジを決定する。スキャンコンバータ３０６は、第１ビン４０８（１）のプリミティブ、第２ビン４０８（２）のプリミティブ、第３ビン４０８（３）のプリミティブ等をラスタライズする。上述したように、ラスタライズは、特定のプリミティブによってカバーされているスクリーン位置を識別することを含む。クリッピング矩形は、識別されたスクリーン位置を、特定のビン４０８に関連するスクリーン空間区画４０４内に含まれるスクリーン位置のみに制限する。したがって、特定のビン４０８に対するスキャンコンバータ３０６の出力は、ビン４０８内のプリミティブ４０６毎に、当該ビン４０８に関連するスクリーン空間区画４０４内に存在し、当該プリミティブ４０６によってカバーされるフラグメントを含む。特定のビン４０８に対するピクセルシェーダ３１２の出力は、プリミティブ４０６毎に、当該プリミティブ４０６をカバーし、当該ビン４０８に関連するスクリーン空間区画４０４内にあるシェーディング付きフラグメントを含む。
【００３７】
図５は、一例による、図３のスキャンコンバータ３０６及び図３のＺカリングユニット３０８によって実行される処理を示す図である。スキャンコンバータ３０６は、ワールド空間パイプライン３０２及びビン処理部３０４によって処理されたプリミティブ４０６を受信し、スキャンコンバージョン（「ラスタライズ」とも呼ばれる）を実行する。スキャンコンバージョンは、何れのスクリーン位置５０２がプリミティブ４０６によってカバーされるかを識別することを含む。特定のスクリーン位置５０２が特定のプリミティブによってカバーされているかどうかを判別するためのルールは様々であり、何れのスクリーン位置５０２がプリミティブ４０６によってカバーされるているかを識別するための技術的に実現可能な方法が使用されてもよい。プリミティブがピクセルをカバーしているかどうかを判別するための１つの例示的な技術は、ピクセルの中心点がプリミティブのエッジの内側にあるかどうかを判別することである。この例では、ピクセルの中心点がプリミティブのエッジの内側にある場合、プリミティブが当該ピクセルをカバーしているとみなされる。この例では、ピクセルの中心点がプリミティブのエッジの内側にない場合、プリミティブが当該ピクセルをカバーしていないとみなされる。ピクセルがプリミティブによってカバーされているかどうかを判別するための他の技術的に実現可能な技術を代わりに使用することができる。いくつかの状況において、グラフィックス処理パイプライン１３４は、スクリーンピクセル毎に複数の「サンプル」（例えば、色値）を含む画像をフレームバッファ３１６内に生成する。マルチサンプル画像は、ピクセルに対して生成された複数のサンプルに基づいてスクリーンピクセル毎に単一の色値を生成するマルチサンプルアンチエイリアシング等の様々なタスクに使用することができる。このような状況において、スキャンコンバータ３０６は、ピクセル内のサンプル毎にカバレッジを判別し、ピクセル内のカバーされたサンプル毎にフラグメントを出力する。また、スキャンコンバータ３０６は、ピクセル毎にカバレッジマスクを生成して出力してもよい。ここで、カバレッジマスクは、ピクセル内の何れのサンプルがプリミティブによってカバーされているかを示す。スキャンコンバータ３０６は、Ｚカリングユニット３０８による処理のために、プリミティブ４０６によってカバーされたフラグメント５０４を出力する。図５では、６つのスクリーン位置５０２がプリミティブ４０６によってカバーされているとみなされる。
【００３８】
６つのスクリーン位置５０２に対応する６つのフラグメント５０４（５０４（１）〜５０４（６））が図５に示されている。各フラグメント５０４は、同様に示された深度値を有する。この深度値は、各フラグメント５０４内に示された数である。図５に示す例では、各フラグメント５０４の深度値が６であるが、他の例では、同じプリミティブのフラグメントが異なる深度値を有することができる。
【００３９】
Ｚカリングユニット３０８は、Ｚカリングを実行するために、受信したフラグメント５０４の深度値を深度バッファ５０６内の深度値と比較する。深度バッファ５０６内の対応する深度値が、検討中のフラグメント５０４がＺカリングユニット３０８によって既に処理されたフラグメントによって隠されていることを示す場合、当該フラグメント５０４が破棄される。深度バッファ５０６内の対応する深度値が、検討中のフラグメント５０４がＺカリングユニット３０８によって既に処理されたフラグメントによって隠されていないことを示す場合、当該フラグメント５０４がＺカリングユニット３０８を通過し、深度バッファ５０６内の深度値は、通過したフラグメント５０４の深度値と一致するように更新される。
【００４０】
深度バッファ５０６内の深度値は、プリミティブ４０６に対して局所的なスクリーン領域５０８について示されているが、簡単さ及び明瞭さのために深度バッファ５０６の他の部分から省略されている。しかしながら、深度バッファ５０６は、スクリーンの他の領域の深度値を記憶することを理解されたい。
【００４１】
プリミティブ４０６に対して局所的なスクリーン領域５０８は、左から右へ、上から下への順に、２、９、９、９、２、９、９、９、２、９、９、９である１２個の深度値を示す。プリミティブ４０６に基づいて生成されたフラグメント５０４の位置は、深度バッファ５０６内のプリミティブ４０６の位置によって示されるように、異なる深度値に対応する。より具体的には、フラグメント５０４（１）は、一番上の深度値２と重なり合い、フラグメント５０４（２）は、中央の深度値２と重なり合い、フラグメント５０４（４）は、下の深度値２と重なり合い、フラグメント５０４（３）は、左中央の深度値９と重なり合い、フラグメント５０４（５）は、左下の深度値９と重なり合い、フラグメント５０４（６）は、下中央の深度値９と重なり合う。
【００４２】
Ｚカリングユニット３０８は、フラグメント５０４の深度値を、フラグメント５０４によって重ねられた深度バッファ５０６内の深度値と比較する。深度バッファ５０６内の深度値が重複フラグメント５０４の深度値よりも小さい（したがって、関連するフラグメントが重複フラグメント５０４よりもカメラに近い）場合、重複フラグメント５０４は、Ｚカリングユニット３０８によって既に処理されたフラグメントによって隠される。この状況では、Ｚカリングユニット３０８は、重複フラグメントを破棄する。図５において、左端のフラグメント５０４（フラグメント５０４（１）、フラグメント５０４（２）及びフラグメント５０４（４））は、６の深度値を有し、深度バッファ５０６内で重複する部分の深度値は、２に等しい。したがって、Ｚカリングユニット３０８は、左端のフラグメント５０４を破棄する（これらの破棄は、「Ｘ」で示されている）。深度バッファ５０６内の深度値が重複フラグメント５０４の深度値よりも大きい場合、重複フラグメント５０４は、Ｚカリングユニット３０８によって既に処理された何れのフラグメント５０４によっても隠されない。この状況では、Ｚカリングユニット３０８は、フラグメント５０４を破棄しないが、代わりに、深度バッファ５０６内に記憶された深度値を、隠されないフラグメント５０４の深度値で更新する。図５では、フラグメント５０４（３）、フラグメント５０４（５）及びフラグメント５０４（６）に対応する３つの深度値が更新される。よって、深度バッファが更新された後では、２の深度値が３つ存在し、６の深度値が３つ存在し、残りの深度値は９である。
【００４３】
要約すると、Ｚカリングユニット３０８は、Ｚカリングユニット３０８によって処理されたフラグメント５０４の最小の深度値を記憶するように深度バッファ５０６を保持する。Ｚカリングユニット３０８から出力された後続のフラグメントを、Ｚカリングユニット３０８から出力された先行のフラグメントによって隠すことができない。しかしながら、Ｚカリングユニット３０８から出力された先行のフラグメントは、場合によっては、Ｚカリングユニット３０８によって後に処理されたフラグメントによって隠される可能性がある。特定の「深度モデル」が本明細書で説明されている。このモデルでは、より小さい深度値は、より大きい深度値よりもフラグメントがカメラに近いことを意味する。しかしながら、本明細書で提供された教示は、この特定の「深度モデル」に限定されず、他の技術的に実現可能な深度モデルに適用可能であることを当業者によって理解されたい。一例では、より大きい深度値は、より小さい深度値を有するフラグメントよりもフラグメントがカメラに近いことを意味する。他の技術的に実現可能な深度モデルが同様に可能である。
【００４４】
このため、遅延ピクセルシェーディングユニット３１０は、Ｚカリングユニット３０８から出力されたフラグメントを「保持」して、先行のフラグメントを隠す後続のフラグメントの有無をチェックする。図６は、一例による、後に受信したフラグメントによって隠されるフラグメントを破棄する方法６００のフロー図である。図１〜図５に関連して示され説明されたシステムについて述べたが、技術的に実現可能な順序で方法を実行するように構成された任意のシステムが本開示の範囲内に含まれることを理解されたい。
【００４５】
図に示すように、方法６００は、ステップ６０２から開始する。このステップでは、スキャンコンバータ３０６は、プリミティブをラスタライズして、当該プリミティブに対応するフラグメントのセットを取得する。ラスタライズは、図３及び図５に関連して説明したように実行されてもよい。ビン処理を使用した場合には、取得されたフラグメントのセットは、プリミティブに対応するフラグメントであり、特定のスクリーン空間区画４０４内に存在する。ステップ６０４では、Ｚカリングユニット３０８は、ラスタライズされたフラグメントをスキャンコンバータ３０６から受信し、これらのフラグメントに対してＺカリングを実行する。Ｚカリングは、受信したフラグメントの深度値を、深度バッファ内に記憶された深度値と比較することを含む。深度バッファ内の対応する値よりも大きい深度値を有するフラグメントは、以前に処理されたフラグメントによって隠され、これにより破棄される。深度バッファ内の対応する値よりも小さい深度値を有するフラグメントは、以前に処理されたフラグメントによって隠されない。この状況では、Ｚカリングユニット３０８は、深度バッファ内の深度値をフラグメントの深度値で更新し、遅延ピクセルシェーディングユニット３１０にフラグメントを渡す。
【００４６】
ステップ６０６では、遅延ピクセルシェーディングユニット３１０は、受信したフラグメントを、遅延ピクセルシェーディングユニット３１０によって以前に処理されたフラグメントを記憶する先入れ先出し（ＦＩＦＯ）バッファ内に記憶されたフラグメントと比較する。より具体的には、遅延ピクセルシェーディングユニット３１０は、入力フラグメントのスクリーン位置が、ＦＩＦＯバッファ内に記憶されたフラグメントのスクリーン位置と一致するかどうかを判別する。ビン処理は、ＦＩＦＯバッファ内で一致する可能性を高める。この理由は、ビン処理によって、スクリーン空間の他の部分のフラグメントではなく、ビンに関連するスクリーン空間のごく一部のフラグメントが、遅延ピクセルシェーディングユニット３１０内で共に処理されるためである。
【００４７】
ステップ６０８では、遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯバッファ内のフラグメントのスクリーン位置と一致するスクリーン位置を有するフラグメントに対して、最も古い一致フラグメントをＦＩＦＯバッファから除去する。入力フラグメントとＦＩＦＯバッファ内のフラグメントとの間でスクリーン位置が一致しない場合、遅延ピクセルシェーディングユニット３１０は、何れのフラグメントもＦＩＦＯバッファから破棄しない。ステップ６１０では、遅延ピクセルシェーディングユニット３１０は、受信したフラグメントをＦＩＦＯバッファに入れる。遅延ピクセルシェーディングユニット３１０は、ステップ６０６で比較した際にこのようなフラグメントがＦＩＦＯバッファ内の既存のフラグメントと一致するかどうかに関わらず、このステップにおいてフラグメントをＦＩＦＯバッファに入れる。
【００４８】
遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯを充填し続けてフラッシュ条件が満たされると、この時点で、ＦＩＦＯ内のフラグメントをピクセルシェーダ３１２に送信し、ＦＩＦＯによって示された順序で処理できるようにする。フラッシュは、１）ＦＩＦＯがフルである、２）ビン処理部３０４が、特定のビン４０８の全てのプリミティブがビン処理部３０４によって送信されたことを遅延ピクセルシェーディングユニット３１０に示す、３）ビン処理部３０４が、現在のフレームが終了し、次のフレームが処理されることを遅延ピクセルシェーディングユニット３１０に示す、又は、４）デバイスドライバ１２２若しくはアプリケーション１２６によって設定されたプログラム可能なフラッシュ条件を含む任意の理由のためにフラッシュが実行されることを示す任意の他のイベントを含む。
【００４９】
上記の方法６００は、スクリーンピクセル毎に単一のフラグメントが存在するか、スクリーンピクセル毎に複数のフラグメントが存在する状況においてフラグメントを処理するために使用することができる。さらに、ステップ６０４に関連して特定の「深度モデル」（より小さい深度値が、より大きい深度値よりもカメラに近いフラグメントを示す）が説明されているが、他の深度モデルが代わりに使用されてもよい。
【００５０】
図７は、一例による、後に受信したフラグメントによって隠されるフラグメントを破棄する例示的な処理を示す図である。図７は、第１入力プリミティブ７０２（１）が、第２入力プリミティブ７０２（２）が遅延ピクセルシェーディングユニット３１０に入力される前に、遅延ピクセルシェーディングユニット３１０に入力されることを示している。第１入力プリミティブ７０２（１）は、クワッド０〜９（ここで、０〜９の各々は、「クワッド識別子」と呼ばれる）を含み、各クワッドにはスクリーン位置ｘ及びｙの値が示されている。第２入力プリミティブ７０２（２）は、クワッド１０〜１９（ここで、１０〜１９の各々は、「クワッド識別子」と呼ばれる）を有し、同様にスクリーン位置ｘ及びｙの値が示されている。より具体的には、第１入力プリミティブ７０２（１）は、位置０，０のクワッド０と、位置１，０のクワッド１と、位置２，０のクワッド２と、位置３，０のクワッド３と、位置０，１のクワッド４と、位置１，１のクワッド５と、位置２，１のクワッド６と、位置０，２のクワッド７と、位置１，２のクワッド８と、位置０，２のクワッド９と、を有する。第２入力プリミティブ７０２（２）は、位置０，０のクワッド１０と、位置１，０のクワッド１１と、位置２，０のクワッド１２と、位置３，０のクワッド１３と、位置１，１のクワッド１４と、位置２，１のクワッド１５と、位置３，１のクワッド１６と、位置２，２のクワッド１７と、位置３，２のクワッド１８と、位置３，３のクワッド１９と、を有する。各クワッドのカバレッジが視覚的に示されている。クワッド内のカバーされたピクセルが特定のハッチングで示されており、カバーされていないピクセルはハッチングされていない。例えば、クワッド３では、左上のピクセル、右上のピクセル及び左下のピクセルにカバレッジが存在するが、右下のピクセルにはカバレッジが存在しない。カバレッジマスクと、遅延ピクセルシェーディングユニット３１０の処理との間の相互作用を示すために、個々のフラグメントではなくクワッドが図７に示されている。
【００５１】
先入れ先出し（ＦＩＦＯ）バッファ状態７０６は、ＦＩＦＯバッファ（２０個のボックスの行として示され、各ボックスは、異なるＦＩＦＯバッファエントリに対応する）の状態と、遅延ピクセルシェーディングユニット３１０にてクワッドを受信したときにＦＩＦＯバッファがどのように変化するかと、を示している。ＦＩＦＯバッファは、Ｚカリングユニット３０８から受信したクワッドに関するデータを記憶するＦＩＦＯエントリを含む。ＦＩＦＯバッファの目的は、入力クワッドのスクリーン位置を、ＦＩＦＯバッファに記憶された古いクワッドのスクリーン位置に対してチェックして、古いクワッド又はその一部を、新たなクワッドによって隠されたために破棄すべきかどうかを判別可能にすることである。上述したように、Ｚカリングユニット３０８は、後に処理されたフラグメントが先に処理されたフラグメントによって隠されないことを保証する。したがって、後に処理されたフラグメントは、先に処理されたフラグメントと同じスクリーン位置に存在する場合に、先に処理されたフラグメントを隠し、これにより、先に処理されたフラグメントが破棄される。
【００５２】
遅延ピクセルシェーディングユニット３１０は、新たなクワッドを受信する毎に、当該クワッドのスクリーン位置を、ＦＩＦＯバッファ内の全てのクワッドのスクリーン位置に対してチェックする。一致が生じない場合（ＦＩＦＯバッファ内のクワッドのスクリーン位置が、受信したクワッドのスクリーン位置と同じである場合に、一致が生じる）、遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯバッファ内に既に記憶されたクワッドに対して変更を加えない。一致が生じて、カバーされた少なくとも１つのフラグメントであって、ＦＩＦＯバッファ内の一致クワッドのカバーされたフラグメントに重なるフラグメントを新たなクワッドが有する場合、遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯバッファを更新して、入力クワッドの少なくとも１つのフラグメントによって重ねられたＦＩＦＯバッファ内のフラグメントを排除する。一致が生じるかどうかに関わらず、遅延ピクセルシェーディングユニット３１０は、クワッドを１つ分下に（図７において右方向に）シフトし、「最新エントリ」に対応するＦＩＦＯバッファの端（図７のＦＩＦＯバッファの左端）において新たなクワッドをＦＩＦＯバッファ内に記憶する。
【００５３】
第１ＦＩＦＯバッファ状態７０６（１）は、第１入力プリミティブ７０２（１）のクワッド０を受信した後のＦＩＦＯバッファの状態を示す。第２ＦＩＦＯバッファ状態７０６（２）は、第１入力プリミティブ７０２（１）のクワッド１を受信した後のＦＩＦＯバッファの状態を示す。先に進むと、第３ＦＩＦＯバッファ状態７０６（３）は、ＦＩＦＯバッファ内の第１入力プリミティブ７０２（１）の全てのクワッドを示す。第１入力プリミティブ７０２（１）の全てのクワッドがＦＩＦＯバッファに入力された後、遅延ピクセルシェーディングユニット３１０は、第２入力プリミティブ７０２（２）のクワッドを処理する。第２入力プリミティブ７０２（２）のクワッドが第１入力プリミティブ７０２（１）のクワッドの後に処理されるという事実は、スキャンコンバータ３０６がこの順序でクワッドを出力するという事実による。この特定の順序付けは、スキャンコンバータ３０６が、最初に第１入力プリミティブ７０２（１）を処理し、次いで第２入力プリミティブ７０２（２）を処理し、これにより、第１入力プリミティブ７０２（１）のクワッドを、第２入力プリミティブ７０２（２）のクワッドの前に遅延ピクセルシェーディングユニット３１０に送信するという事実の結果であってもよい。Ｚカリングは、ラスタライズの後に実行されるが、遅延ピクセルシェーディングユニット３１０の処理の前に行われるので、後に受信したプリミティブ（第２入力プリミティブ７０２（２））の各フラグメントは、先に受信したプリミティブ（第１入力プリミティブ７０２（１））の何れのフラグメントによっても隠されないことが保証される。
【００５４】
第３ＦＩＦＯバッファ状態７０６（３）の後、遅延ピクセルシェーディングユニット３１０は、クワッド１０を受信し、クワッド１０を、ＦＩＦＯバッファ内のクワッドに対してチェックする。遅延ピクセルシェーディングユニット３１０は、クワッド０がクワッド１０と同じスクリーン位置を有すると判別する。この競合は、第４ＦＩＦＯバッファ状態７０６（４）のクワッド０の周囲の太線の矩形で示されている。この状況において、遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯバッファ内の古い競合クワッドを変更又は排除するが、当該競合クワッドは、クワッド０である。変更又は排除は、重なるカバレッジが新旧の競合クワッドに存在する程度に基づいている。より具体的には、新たなクワッドが、ＦＩＦＯバッファ内の既存のクワッドと同じスクリーン位置を有する場合、遅延ピクセルシェーディングユニット３１０は、新たなクワッドのカバレッジと古いクワッドのカバレッジとの間の重複の程度を決定する。部分的に重なる場合、新たなクワッドによって重ねられた古いクワッドの一部がＦＩＦＯバッファから除去されるように、古いクワッドが更新される。部分的な重複は、古いクワッドが、新たなクワッドによってカバーされるクワッドの全てではなく少なくとも一部をカバーしていることを意味する。完全に重複する場合、遅延ピクセルシェーディングユニット３１０は、古いクワッドをＦＩＦＯバッファから除去する。完全な重複は、古いクワッドが新たなクワッドによって完全にカバーされていることを意味する（すなわち、古いクワッドでカバーされているものとして示されたクワッドの全ての部分が新たなクワッドによってカバーされている）。重複がない場合、遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯバッファ内の古いクワッドに対して変更を加えない。重複がないことは、古いクワッドでカバーされているものとして示されたクワッドの何れの部分も、新たなクワッドでカバーされていないことを意味する。
【００５５】
クワッド１０は、クワッド０と同じスクリーン位置に存在する。しかしながら、クワッド０は、そのスクリーン位置の領域全体をカバーするのに対し、クワッド１０は、右上部分をカバーするのみである。この状況では、遅延ピクセルシェーディングユニット３１０は、クワッド０がクワッド１０によって部分的に重ねられていると判別し、これにより、ＦＩＦＯバッファ内のクワッド０を変更して、重ねられた部分を除去する。したがって、状態７０６（５）において、クワッド０は、除去された右上部分ではなく左下部分のみを含むものとして示されている。
【００５６】
また、状態７０６（５）では、遅延ピクセルシェーディングユニット３１０は、クワッド１１が、ＦＩＦＯバッファ内の別のクワッド（すなわち、クワッド１）と同じスクリーン位置を有する（両方のクワッドは、スクリーン位置１，０を有する）と判別する。これに応じて、遅延ピクセルシェーディングユニット３１０は、クワッド１の何れの部分がクワッド１１によってカバーされているかを判別する。クワッド１１がクワッド１と完全に重なっているので、遅延ピクセルシェーディングユニット３１０は、ＦＩＦＯバッファからクワッド１を除去する。したがって、状態７０６（６）では、クワッド１は、カバレッジを有しないものとして示されている。これは、クワッド１が「空の」クワッドであり、ピクセルシェーダ３１２に転送されないことを示している。図示した例示的な実施形態では、空のクワッドによって占有されたスロットを解放する代わりに、空のクワッドがＦＩＦＯバッファ内に保持されるが、代替的な実施形態では、スロットを解放することができ、空でないクワッドを解放されたスロットにシフトすることができる。状態７０６（６）では、遅延ピクセルシェーディングユニット３１０は、クワッド１２がクワッド２に完全に重なると判別することによって、クワッド２をＦＩＦＯバッファから除去する。
【００５７】
先に進むと、ＦＩＦＯバッファ状態７０６（７）は、入力プリミティブ７０２（１）及び入力プリミティブ７０２（２）のクワッドを処理した後のＦＩＦＯバッファを示している。後続のクワッド１０によって部分的に重ねられたクワッド０は、重ねられていない残りの部分のみを有する。クワッド１，２，３は、クワッド１１，１２，１３によって完全に重ねられ、これにより、ＦＩＦＯバッファから除去される。クワッド４は、図示した後続のクワッドによってカバーされず、これにより、ＦＩＦＯバッファ内に残される。クワッド５は、クワッド１４によって部分的に重ねられ、これにより、重ねられていない部分のみがＦＩＦＯバッファ内に残される。クワッド６は、クワッド１５によって完全に重ねられ、これにより、ＦＩＦＯバッファから除去される。クワッド７，８，９は、後のクワッドによって重ねられず、これにより、ＦＩＦＯバッファ内で変更されない。同様に、入力プリミティブ７０２（２）の全てのクワッドは、他のクワッドによって重ねられず、これにより、ＦＩＦＯバッファ内で変更されない。
【００５８】
ＦＩＦＯバッファの内容は、処理のためにパイプラインの残りの部分に送信され、フレームバッファ３１６内で出力プリミティブ７０４（１）及び出力プリミティブ７０４（２）を生成する（出力プリミティブ７０４（１）又は出力プリミティブ７０４（２）に重なる後続のプリミティブが処理されないと仮定する）。出力プリミティブ７０４（１）は、図示したように、出力プリミティブ７０４（２）によってクリップされる。ピクセルシェーダ３１２は、プリミティブのクリップ部分を処理しない。この理由は、これらのクリップ部分が、ピクセルシェーダ３１２に送信される前にＦＩＦＯバッファから除去されるためである。
【００５９】
上記の説明は、ピクセル毎に１つのサンプルが存在する例である。しかしながら、上記の技術は、各ピクセルが複数のサンプルを有する状況でも適用することができる。
【００６０】
上記の技術に対する１つの変形例は、これらのフラグメントを削除する代わりに、フラグメントを重複しているものとしてマークすることを含む。より具体的には、入力クワッドとＦＩＦＯバッファ内のクワッドとの間で一致が生じ、遅延ピクセルシェーディングユニット３１０が、これら２つのクワッド間のカバレッジが重複していると判別した場合、遅延ピクセルシェーディングユニット３１０は、両方のクワッドの重複フラグメントを重複しているものとしてマークする。ピクセルシェーダ３１２は、その後、この重複情報を使用して、古い重複フラグメントを新たな重複フラグメントの前に確実に処理する。ピクセルシェーダ３１２は、バリア処理を利用して、古いフラグメントが処理された後、新たな重複フラグメントが処理される前に、ピクセルシェーダ３１２内の処理を待機させることができる。透過性がオンになっている場合に、この「マーキング」処理モードを利用することができる。透過性をオンにすると、別のフラグメントと重複するフラグメントは、単に当該フラグメントを上書きするのではなく、ブレンド処理で当該フラグメントとブレンドすることができる。このような状況では、ＦＩＦＯバッファ内の最も古いマッチングフラグメントを除去するのではなく、ＦＩＦＯバッファ内で一致する各フラグメントが重複しているものとしてマークされる。透過性がオンになった場合の他の１つの代替例は、ＦＩＦＯバッファをバイパスすることである。このような状況では、遅延ピクセルシェーディングユニット３１０は、効率的にオフに切り替えられ又はバイパスされる。フラグメントはＦＩＦＯバッファに記憶されず、ＦＩＦＯバッファ内に記憶されたフラグメントと入力フラグメントとが一致するかどうかを判別するためのチェックが行われない。
【００６１】
ＦＩＦＯバッファは、クワッドに対応するエントリを記憶するものとして図７に示されているが、エントリは、その代わりに、個々のピクセル又は２×２よりも大きいピクセルのグループに対応してもよい。個々のピクセルに対応するエントリの場合には、入力ピクセルとＦＩＦＯバッファ内のピクセルとの間でスクリーン位置の一致が生じた場合に、カバレッジがチェックされない。代わりに、このような一致が生じた場合、エントリは、単にＦＩＦＯから削除される。個々のＦＩＦＯバッファエントリが２×２よりも大きいピクセルのグループに対応する場合には、カバレッジチェックは、より細かい粒度で実行されることを除いて、上記の説明と同様の方法で実行される。
【００６２】
ＡＰＤ１１６は、並列に処理する複数の異なるＦＩＦＯバッファを含んでもよく、各バッファは、スクリーン空間の異なる部分に割り当てられていてもよい。グラフィックス処理パイプライン１３４内の様々なユニットによって処理され出力されるフラグメントのシーケンスは、本明細書において「ストリーム」と呼ばれる場合がある。
【００６３】
ビン処理が実行されるという事実により、ＦＩＦＯバッファを比較的小さいサイズにすることができ、及び／又は、ＦＩＦＯバッファのヒット率が向上する。より具体的には、ＦＩＦＯバッファは、特定のビンの全てのフラグメントを受信した後に空にされるので、任意の特定の時点で特定のビンに含まれるフラグメントのみを記憶すると考えられる。したがって、任意のスクリーン位置のフラグメントをＦＩＦＯバッファに記憶することが可能な場合と比較して、ＦＩＦＯバッファにおいて「ヒット」する可能性が高くなる。このようにヒット率が向上することによって、隠されたフラグメントが除去される割合が高まり、ピクセルシェーダ３１２によって実行される不必要な作業量を低減させる。
【００６４】
ピクセルシェーダによる処理のためにフラグメントのストリームの重複フラグメントを識別する方法が提供される。方法は、Ｚカリングされたフラグメントのストリームから、第１スクリーン位置を有する第１フラグメントを受信することを含む。方法は、フラグメントを記憶する遅延ピクセルシェーディングバッファにおいて、第１スクリーン位置と一致する第２スクリーン位置を有する第２フラグメントを識別することを含む。方法は、識別したことに応じて、一致に基づいて遅延ピクセルシェーディングバッファを変更することを含む。方法は、遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのためにピクセルシェーダに送信することを含む。
【００６５】
アクセラレーテッド処理デバイスも提供される。アクセラレーテッド処理デバイスは、フラグメントのセットのフラグメントをＺカリングして、Ｚカリングされたフラグメントのストリームを生成するように構成されたＺカリングユニットを含む。また、アクセラレーテッド処理デバイスは、ピクセルシェーダに提供されたフラグメントに対してピクセルシェーディング処理を実行するように構成されたピクセルシェーダを含む。アクセラレーテッド処理デバイスは、遅延ピクセルシェーディングユニットを含む。遅延ピクセルシェーディングユニットは、Ｚカリングされたフラグメントのストリームから、第１スクリーン位置を有する第１フラグメントを受信するように構成されている。遅延ピクセルシェーディングユニットは、フラグメントを記憶する遅延ピクセルシェーディングバッファにおいて、第１スクリーン位置と一致する第２スクリーン位置を有する第２フラグメントを識別するように構成されている。遅延ピクセルシェーディングユニットは、識別したことに応じて、一致に基づいて遅延ピクセルシェーディングバッファを変更するように構成されている。遅延ピクセルシェーディングユニットは、遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのためにピクセルシェーダに送信するように構成されている。
【００６６】
プロセッサによって実行されると、ピクセルシェーダによる処理のためにフラグメントのストリームの重複フラグメントを識別する方法をプロセッサに実行させる命令を記憶する非一時的なコンピュータ可読記憶媒体が提供される。方法は、Ｚカリングされたフラグメントのストリームから、第１スクリーン位置を有する第１フラグメントを受信することを含む。方法は、フラグメントを記憶する遅延ピクセルシェーディングバッファにおいて、第１スクリーン位置と一致する第２スクリーン位置を有する第２フラグメントを識別することを含む。方法は、識別したことに応じて、一致に基づいて遅延ピクセルシェーディングバッファを変更することを含む。方法は、遅延ピクセルシェーディングバッファのフラグメントを、シェーディングのためにピクセルシェーダに送信することを含む。
【００６７】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の複合で上記に説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な複合で使用されてもよい。
【００６８】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６９】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2019537164.tif 000003
【図２】
2019537164.tif 000004
【図３】
2019537164.tif 000005
【図４】
2019537164.tif 000006
【図５】
2019537164.tif 000007
【図６】
2019537164.tif 000008
【図７】
2019537164.tif 000009
【国際調査報告】
2019537164.tif 000010
2019537164.tif 000011
2019537164.tif 000012