(57)【要約】グラフィックス処理パイプラインの改善が開示されている。グラフィックス処理パイプラインは、アプリケーション又は他のエンティティによって要求された特定の順序（アプリケーションプログラミングインタフェースオーダ「ＡＰＩオーダ」）でグラフィックスオブジェクトを処理する。但し、ピクセルシェーダステージ等のグラフィックス処理パイプライン内の特定のコンポーネントは、これらのオブジェクトをアウトオブオーダで処理する場合がある。ここでは、ピクセルシェーダステージが、処理済みのフラグメントを、アウトオブオーダで完了及びエクスポートするのを可能にする技術が提供される。この技術は、スコアボードを用いて、ピクセルシェーダステージからエクスポートする準備ができているフラグメントが、ＡＰＩオーダで最新のフラグメントであるかどうかを判別することを含む。フラグメントがＡＰＩオーダで最新のものである場合には、フラグメントがエクスポートされる。フラグメントがＡＰＩオーダで最新のものでない場合には、フラグメントが破棄される。【選択図】図６
2020506474.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをエクスポートする方法であって、
アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関して、前記ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、
前記ピクセルシェーダ内のフラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成することと、
前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することと、
前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントである場合に、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることと、
前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントでない場合に、前記フラグメントを破棄することと、を含む、
方法。
【請求項２】
前記ピクセルシェーダ内のフラグメントを処理する前に、前記フラグメントに対してｚカリングを実行することをさらに含む、
請求項１の方法。
【請求項３】
前記ピクセルシェーダ内のフラグメントを処理した後であって、前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別する前に、前記フラグメントに対してｚカリングを実行することをさらに含む、
請求項１の方法。
【請求項４】
前記ｚカリングは、
深度バッファへの書き込みを無効にし、
「ｅｑｕａｌ」ｚ関数、又は、「ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」ｚ関数若しくは「ｇｒｅａｔｅｒ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」ｚ関数、及び、前記フラグメントの深度値が前記深度バッファ内のフラグメントの前記スクリーン位置に対して記憶されている深度値と等しいｚテスト結果のうち１つ以上を用いて実行される、
請求項３の方法。
【請求項５】
前記シェーディングされたフラグメントが、スクリーン位置及びアプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関連付けられており、
前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することは、前記シェーディングされたフラグメントのＡＰＩオーダを、前記スコアボード内のフラグメントの前記スクリーン位置に対して記憶されたＡＰＩオーダと比較することを含む、
請求項１の方法。
【請求項６】
前記スコアボードを維持することは、
前記ピクセルシェーダステージの上流にあるパイプラインステージからフラグメントを受信することと、
前記フラグメントの前記スクリーン位置に対して、前記スコアボードに既に記憶されているＡＰＩオーダと前記フラグメントのＡＰＩオーダとのうち新しいオーダを反映するように、前記フラグメントの前記スクリーン位置に対するＡＰＩオーダを前記スコアボードにおいて更新することと、を含む、
請求項１の方法。
【請求項７】
前記ピクセルシェーダステージの上流にあるパイプラインステージからフラグメントを受信することは、
前記ピクセルシェーダステージのラスタライザステージからフラグメントを受信することを含む、
請求項１の方法。
【請求項８】
前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることは、前記グラフィックス処理パイプラインの出力マージャステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることを含む、
請求項１の方法。
【請求項９】
前記フラグメントを破棄する前に、前記フラグメントのブレンディングが無効になっていると判別することを含む、
請求項１の方法。
【請求項１０】
グラフィックス処理パイプラインを含むアクセラレーテッド処理デバイス（ＡＰＤ）であって、
フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージと、
アウトオブオーダエクスポートブロックと、を備え、
前記アウトオブオーダエクスポートブロックは、
アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関して、前記ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、
前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することと、
前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントである場合に、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることと、
前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントでない場合に、当該フラグメントを破棄することと、
を行うように構成されている、
アクセラレーテッド処理デバイス。
【請求項１１】
前記ピクセルシェーダでフラグメントを処理する前に、前記フラグメントに対してｚカリングを実行するように構成された深度ブロックをさらに備える、
請求項１０のＡＰＤ。
【請求項１２】
前記ピクセルシェーダ内のフラグメントを処理した後であって、前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別する前に、前記フラグメントに対してｚカリングを実行するように構成された深度ブロックをさらに備える、
請求項１０のＡＰＤ。
【請求項１３】
前記深度ブロックは、
深度バッファへの書き込みを無効にし、
「ｅｑｕａｌ」ｚ関数、又は、「ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」ｚ関数若しくは「ｇｒｅａｔｅｒ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」ｚ関数、及び、前記フラグメントの深度値が前記深度バッファ内のフラグメントの前記スクリーン位置に対して記憶されている深度値と等しいｚテスト結果のうち１つ以上を用いて前記ｚカリングを実行するように構成されている、
請求項１２のＡＰＤ。
【請求項１４】
前記シェーディングされたフラグメントが、スクリーン位置及びアプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関連付けられており、
前記アウトオブオーダエクスポートブロックは、前記シェーディングされたフラグメントのＡＰＩオーダを、前記スコアボード内のフラグメントの前記スクリーン位置に対して記憶されたＡＰＩオーダと比較することによって、前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別するように構成されている、
請求項１０のＡＰＤ。
【請求項１５】
前記アウトオブオーダエクスポートブロックは、
前記ピクセルシェーダステージの上流にあるパイプラインステージからフラグメントを受信することと、
前記フラグメントの前記スクリーン位置に対して、前記スコアボードに既に記憶されているＡＰＩオーダと前記フラグメントのＡＰＩオーダとのうち新しいオーダを反映するように、前記フラグメントの前記スクリーン位置に対するＡＰＩオーダを前記スコアボードにおいて更新することと、を行うことによって、前記スコアボードを維持するように構成されている、
請求項１０のＡＰＤ。
【請求項１６】
前記ピクセルシェーダステージの上流にあるパイプラインステージは、ラスタライザステージを備える、
請求項１０のＡＰＤ。
【請求項１７】
前記アウトオブオーダエクスポートブロックは、前記グラフィックス処理パイプラインの出力マージャステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることによって、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートするように構成されている、
請求項１０のＡＰＤ。
【請求項１８】
前記アウトオブオーダエクスポートブロックは、
前記フラグメントを破棄する前に、前記フラグメントのブレンディングが無効になっていると判別するように構成されている、
請求項１０のＡＰＤ。
【請求項１９】
アクセラレーテッド処理デバイス（ＡＰＤ）と、
アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）でグラフィックスオブジェクトを処理するための要求を生成し、処理のために前記ＡＰＤに前記要求を送信するように構成された中央処理装置と、を備え、
前記ＡＰＤは、
フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージであって、フラグメントがグラフィックスオブジェクトに基づいている、ピクセルシェーダステージと、
アウトオブオーダエクスポートブロックと、を備え、
前記アウトオブオーダエクスポートブロックは、
アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関して、前記ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、
前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別することと、
前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントである場合に、前記グラフィックス処理パイプラインの後続のステージで処理するために、前記シェーディングされたフラグメントをエクスポートすることと、
前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントでない場合に、当該フラグメントを破棄することと、
を行うように構成されている、
コンピューティングデバイス。
【請求項２０】
前記スコアボードに基づいて、前記シェーディングされたフラグメントが、前記ピクセルシェーダステージで発生した前記スクリーン位置に対する最新のフラグメントであるかどうかを判別する前に、前記フラグメントに対してｚカリングを実行するように構成された深度ブロックをさらに備える、
請求項１９のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１７年１月２７日に出願された米国特許出願第１５／４１８，５５７号、及び、２０１７年２月３日に出願された欧州特許出願第１７１５４６８０．７号の利益を主張するものであり、これらの内容は、言及することによって本明細書に完全に記載されているものとして援用される。
【０００２】
開示された実施形態は、概して、グラフィックス処理パイプラインに関し、特に、アウトオブオーダでピクセルシェーダをエクスポートすることに関する。
【背景技術】
【０００３】
３次元グラフィックス処理パイプラインは、ホスト（コンピューティングシステムの中央処理装置等）からコマンドを受信し、これらのコマンドを処理して、ディスプレイデバイスに表示するピクセルを生成する。グラフィックス処理パイプラインは、頂点位置及び頂点属性の変換、ピクセルカラーの計算等の個々のタスクを実行するいくつかのステージを含む。グラフィックス処理パイプラインは、常に開発され、改良されている。
【０００４】
添付の図面と共に例として提供される以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【０００５】
【図１】１つ以上の開示された実施形態を実施し得る例示的なデバイスのブロック図である。
【図２】更なる詳細を示す図１のデバイスのブロック図である。
【図３】図２に示すグラフィックス処理パイプラインの更なる詳細を示すブロック図である。
【図４】一例による、アーリー（early）ｚモード及びレイト（late）ｚモードを示す図である。
【図５】アウトオブオーダエクスポートブロック及びスコアボードの詳細と、ピクセルシェーダステージからアウトオブオーダエクスポートを実行するための操作の例と、を示す図である。
【図６】一例による、グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをアウトオブオーダでエクスポートする方法のフロー図である。
【発明を実施するための形態】
【０００６】
本開示は、グラフィックス処理パイプラインの改良に関する。グラフィックス処理パイプラインは、アプリケーション又は他のエンティティによって要求された特定の順序（アプリケーションプログラミングインタフェースオーダ「ＡＰＩオーダ」）でグラフィックスオブジェクトを処理する。但し、ピクセルシェーダステージ等のグラフィックス処理パイプライン内の特定のコンポーネントが、これらのオブジェクトを順不同（アウトオブオーダ）で処理する場合がある。本明細書では、ピクセルシェーダステージが処理済みのフラグメントをアウトオブオーダで完了及びエクスポートするのを可能にする技術が提供される。この技術は、スコアボードを用いて、ピクセルシェーダステージからエクスポートする準備ができているフラグメントが、ＡＰＩオーダにおいて最新のフラグメントであるかどうかを判別することを含む。フラグメントがＡＰＩオーダにおいて最新のものである場合、当該フラグメントがエクスポートされる。フラグメントがＡＰＩオーダにおいて最新のものでない場合、当該フラグメントが破棄される。
【０００７】
図１は、本開示の１つ以上の態様が実施される例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージデバイス１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４をオプションで含む。デバイス１００は、図１に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【０００８】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含む。
【０００９】
ストレージデバイス１０６は、固定又は着脱可能なストレージデバイス（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含む。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。出力デバイス１１０は、ディスプレイデバイス、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含む。
【００１０】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信するのを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信するのを可能にする。出力ドライバ１１４は、ディスプレイデバイス１１８に接続されたアクセラレーテッド処理デバイス（ＡＰＤ）１１６を含む。ＡＰＤ１１６は、プロセッサ１０２から計算コマンド及びグラフィックスレンダリングコマンドを受信し、計算コマンド及びグラフィックスレンダリングコマンドを処理して、表示のためにピクセル出力をディスプレイデバイス１１８に提供するように構成されている。
【００１１】
ＡＰＤ１１６は、単一命令複数データ（ＳＩＭＤ）パラダイムに従って計算を実行するように構成された１つ以上の並列処理装置を含む。しかしながら、ＡＰＤ１１６によって実行されるものとして説明した機能は、ＳＩＭＤパラダイムに従ってデータを処理しない処理デバイスによって実行されてもよい。
【００１２】
図２は、デバイス１００のブロック図であり、ＡＰＤ１１６上の処理タスクの実行に関連する追加の詳細を示している。プロセッサ１０２は、プロセッサ１０２による実行のために、１つ以上の制御論理モジュールをシステムメモリ１０４内に保持している。制御論理モジュールは、オペレーティングシステム１２０と、ドライバ１２２と、アプリケーション１２６と、を含み、図示していない他のモジュールをオプションで含むことができる。これらの制御論理モジュールは、プロセッサ１０２及びＡＰＤ１１６の様々な態様の動作を制御する。例えば、オペレーティングシステム１２０は、ハードウェアと直接通信し、プロセッサ１０２で実行中の他のソフトウェアに対してハードウェアへのインタフェースを提供する。ドライバ１２２は、例えば、ＡＰＤ１１６の様々な機能にアクセスするために、アプリケーションプログラミングインタフェース（ＡＰＩ）を、プロセッサ１０２で実行中のソフトウェア（例えば、アプリケーション１２６）に提供することによって、ＡＰＤ１１６の動作を制御する。また、ドライバ１２２は、ＡＰＤ１１６の処理コンポーネント（以下でさらに詳細に説明するＳＩＭＤユニット１３８等）による実行のために、シェーダコードをシェーダプログラムにコンパイルするジャストインタイムコンパイラを含む。
【００１３】
ＡＰＤ１１６は、例えばグラフィックス処理及び非グラフィックス処理等のように、並列処理に適し得る選択された機能のためのコマンド及びプログラムを実行する。ＡＰＤ１１６は、例えばピクセル演算、幾何学的計算等のグラフィックスパイプライン処理を実行し、プロセッサ１０２から受信したコマンドに基づいて画像をディスプレイデバイス１１８にレンダリングするために使用することができる。また、ＡＰＤ１１６は、プロセッサ１０２から受信したコマンド、又は、グラフィックス処理パイプライン１３４の「通常の」情報フローの一部ではないコマンドに基づいて、例えばビデオ、物理シミュレーション、計算流体力学又は他のタスクに関係する動作等のようにグラフィックス処理に直接関連しない（若しくは関連していない）計算処理動作を実行する。
【００１４】
ＡＰＤ１１６は、ＳＩＭＤパラダイムに従って、プロセッサ１０２の要求に応じて並列に動作を実行するように構成された１つ以上のＳＩＭＤユニット１３８を有する計算ユニット１３２（本明細書では、まとめて「プログラマブル処理装置２０２」と呼ばれる）を含む。ＳＩＭＤパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有することによって同一のプログラムを実行するが、異なるデータを用いて当該プログラムを実行することができるパラダイムである。一例では、各ＳＩＭＤユニット１３８は、１６個のレーンを含んでおり、各レーンは、ＳＩＭＤユニット１３８内の他のレーンと同時に同じ命令を実行するが、異なるデータを用いて当該命令を実行することができる。全てのレーンが所定の命令を実行する必要がない場合には、レーンを予測によってスイッチオフにすることができる。予測を使用して、分岐制御フローを有するプログラムを実行することもできる。より具体的には、制御フローが個々のレーンによって実行された計算に基づく条件付き分岐又は他の命令を有するプログラムの場合、現在実行されていない制御フローパスに対応するレーンの予測、及び、異なる制御フローパスの連続実行は、任意の制御フローに追従することを可能にする。
【００１５】
シェーダエンジン１３２における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンで並列に実行されるシェーダプログラムの単一のインスタンス化（instantiation）を表す。ワークアイテムは、通常、単一のＳＩＭＤユニット１３８上で「ウェーブフロント（wavefront）」として同時に実行することができる。複数のウェーブフロントは、同じプログラムを実行するように指定されたワークアイテムの集合を含む「ワークグループ」に含まれてもよい。ワークグループを構成するウェーブフロントの各々を実行することによって、ワークグループを実行することができる。ウェーブフロントは、単一のＳＩＭＤユニット１３８上で順次実行されてもよいし、異なるＳＩＭＤユニット１３８上で部分的に又は完全に並列に実行されてもよい。ウェーブフロントは、シェーダプログラムの並列実行のインスタンスと考えることができ、各ウェーブフロントは、ＳＩＭＤパラダイム（例えば、１つの命令制御ユニットが複数のデータを用いて同一の命令ストリームを実行する）に従って単一のＳＩＭＤユニット１３８上で同時に実行される複数のワークアイテムを含む。スケジューラ１３６は、異なるシェーダエンジン１３２及びＳＩＭＤユニット１３８上で様々なウェーブフロントをスケジューリングすることに関連する動作、並びに、ＡＰＤ１１６上で様々なタスクを調整するための他の動作を実行するように構成されている。
【００１６】
シェーダエンジン１３２によってもたらされる並列性は、例えば、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング演算及び他のグラフィックス動作等のグラフィックス関連動作に適している。プロセッサ１０２からグラフィックス処理コマンドを受信するグラフィックス処理パイプライン１３４は、並列実行のためにシェーダエンジン１３２に計算タスクを提供する。
【００１７】
また、シェーダエンジン１３２は、グラフィックスに関係しないか、グラフィックス処理パイプライン１３４の「通常」動作（例えば、グラフィックス処理パイプライン１３４の動作のために実行される処理を補足するために実行されるカスタム動作）の一部として実行されない計算タスクを実行するために使用される。プロセッサ１０２上で実行中のアプリケーション１２６又は他のソフトウェアは、係る計算タスクを定義するプログラム（ドライバ１２２によってコンパイルされ得る「計算シェーダプログラム」とよく呼ばれる）を、実行のためにＡＰＤ１１６に送信する。
【００１８】
図３は、図２に示すグラフィックス処理パイプライン１３４の更なる詳細を示すブロック図である。グラフィックス処理パイプライン１３４は、入力アセンブラステージ３０２と、ワールド空間（world-space）パイプライン３０４と、ラスタライザステージ３１４と、深度ブロック（depth block）３１５と、ピクセルシェーダステージと、出力マージャステージ３１８と、を含む。
【００１９】
入力アセンブラステージ３０２は、ユーザが充填したバッファ（例えば、プロセッサ１０２によって実行されるアプリケーション１２６等のソフトウェアの要求によって充填されたバッファ）からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。本明細書で使用される「ユーザ」という用語は、レンダリングするためのシェーダコード及び３次元オブジェクトをグラフィックス処理パイプライン１３４に提供するアプリケーション１２６又は他のエンティティを指す。「ユーザ」という用語は、ＡＰＤ１１６によって実行されるアクティビティを区別するために使用される。入力アセンブラステージ３０２は、ユーザが充填したバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラステージ３０２は、パイプラインの残りの部分で使用するために、アセンブルされたプリミティブをフォーマットする。
【００２０】
ワールド空間パイプライン３０４は、頂点及びプリミティブ操作を実行して、３次元ワールド空間で定義されたオブジェクトをスクリーン空間で定義された三角形に変換する。ワールド空間パイプライン３０４は、ユーザが充填したバッファ（例えば、プロセッサ１０２によって実行されるアプリケーション１２６等のソフトウェアの要求によって充填されたバッファ）からプリミティブデータを読み出し、当該データを、パイプラインの残りの部分によって使用されるプリミティブにアセンブルする。ワールド空間パイプライン３０４は、プロセッサ１０２から受信した入力を、スクリーンピクセルへのレンダリングにより適したフォーマットに変換する機能を実行する。より具体的には、ワールド空間パイプライン３０４は、頂点シェーディング機能と、テッセレーションが有効な場合にはテッセレーション機能と、ジオメトリシェーディングが有効な場合にはジオメトリシェーディング機能と、を実行する。
【００２１】
頂点シェーディングは、例えば、トランスフォーム、スキニング、モーフィング、頂点毎のライティング等の様々な頂点毎の操作を実行することを含む。トランスフォームは、頂点の座標をトランスフォーム（変換）するための様々な操作を含むことができる。これらの操作は、モデリングトランスフォーム、表示トランスフォーム（viewing transformations）、投影トランスフォーム、パースペクティブ（perspective）分割及びビューポートトランスフォームのうち１つ以上を含んでもよい。本明細書では、このようなトランスフォームは、トランスフォームが実行される頂点の座標、つまり「位置」を変更すると考えられる。頂点シェーディングの他の操作は、座標以外の属性を変更してもよい。頂点シェーディングは、１つ以上のシェーダエンジン１３２で実行される頂点シェーダプログラムとして部分的又は完全に実装される。いくつかの例では、頂点シェーダプログラムは、プロセッサ１０２によって提供され、コンピュータプログラマによって事前に生成されたプログラムに基づいている。ドライバ１２２は、このようなプログラムをコンパイルして、シェーダエンジン１３２内での実行に適したフォーマットを有する頂点シェーダプログラムを生成する。他の例では、頂点シェーダプログラムは、ドライバ１２２によって直接提供されるか、ＡＰＤ１１６自体のメモリから取り出されるか、又は、他の技術的に実行可能な手段によって提供される。
【００２２】
テッセレーションは、プリミティブを細分化することによって、単純なプリミティブをより複雑なプリミティブに変換する。テッセレーションは、入力プリミティブに基づいてテッセレーションのパッチを生成し、パッチのサンプルのセットを生成し、パッチのサンプルに対応する頂点の頂点位置を計算することを含む。テッセレーションは、プログラマブル処理装置２０２で実行されるシェーダプログラムによって、部分的又は完全に実行することができる。
【００２３】
ジオメトリシェーディングは、プリミティブ毎に頂点操作を実行する。様々なタイプの演算（例えば、ポイントスプライト展開、動的パーティクルシステム操作、ファーフィン（fur-fin）生成、シャドウボリューム生成、キューブマップへのシングルパスレンダリング、プリミティブ毎のマテリアルスワップ、プリミティブ毎のマテリアル設定等を含む）を、ジオメトリシェーディングを介して実行することができる。ジオメトリシェーディングの演算は、プログラマブル処理装置２０２上で実行されるシェーダプログラムによって実行されてもよい。
【００２４】
ワールド空間パイプライン３０４は、ハードウェア（固定機能及びプログラマブルハードウェアを含む）とソフトウェアとの組み合わせとして、全てのハードウェア（全ての固定機能ハードウェア、全てのプログラマブルハードウェア、若しくは、これらの組み合わせを含む）として、又は、ハードウェアプロセッサ上で実行されるソフトウェアとして完全に実装することができる。ワールド空間パイプライン３０４は、フレームバッファに書き込まれ、ディスプレイデバイス１１８に出力されるスクリーンピクセル、又は、深度バッファ、ステンシルバッファ若しくは他のバッファ等のフレームバッファ以外の表面に出力されるスクリーンピクセルへの最終的な変換のために、グラフィックス処理パイプライン１３４内の他のユニットによって処理されるプリミティブ（通常は三角形）を出力する。
【００２５】
ラスタライザステージ３１４は、ラスタライザステージ３１４の上流で生成された単純なプリミティブ（ワールド空間パイプライン３３０の終端の「三角形」とも呼ばれる）を受け入れてラスタライズする。ラスタライズは、特定のプリミティブによってカバーされるスクリーンピクセル（又はサブピクセルサンプル）を判別することと、カバーされているピクセル又はサブピクセルサンプル毎にフラグメントを出力することと、から構成されている。フラグメントは、グラフィックス処理パイプライン１３４の終端に出力される最終画像に影響を及ぼす場合もあれば、影響を及ぼさない場合もある、候補ピクセルである。フラグメントは、三角形のラスタライズの結果に基づいてラスタライザステージ３１４によって生成され、パイプラインの残りの部分で処理される。より具体的には、フラグメントは、ラスタライザステージ３１４で始まり、ラスタライズされている特定のトライアングルによってカバーされた各ピクセル又はサブピクセルサンプルに対応するフラグメントが出力される。ラスタライズは、固定機能ハードウェアによって実行されるか、プログラマブル処理装置２０２内で動作するシェーダプログラムによって実行されてもよい。
【００２６】
深度ブロック３１５は、ｚカリングを実行して、深度ブロック３１５によって既に処理された他のフラグメントによって遮られているフラグメントを除去する。ｚカリングは、フラグメントの深度値に基づいて実行される。ｚカリングを実行するために、深度ブロック３１５は、深度バッファ３２２を記憶する。深度バッファ３２２は、深度ブロック３１５によって処理されたフラグメントの深度値を記憶する。深度ブロック３１５は、ラスタライザステージ３１４からのフラグメントを、深度バッファ３２２に記憶された値と比較して、フラグメントが深度テストに合格したかどうかを判別する。フラグメントが深度テストに合格した場合、当該フラグメントはカリングされず、グラフィックス処理パイプライン１３４の残りの部分に進む。フラグメントが深度テストに合格しなかった場合には、当該フラグメントはカリングされる。
【００２７】
また、深度ブロック３１５は、スコアボード３２６を含むアウトオブオーダエクスポートブロック３２４を含む。アウトオブオーダエクスポートブロック３２４は、ピクセルシェーダステージ３１６からのアウトオブオーダエクスポートを容易にする。エクスポートは、ピクセルシェーダステージ３１６が並列処理ユニット２０２でフラグメントの処理を完了し（例えば、フラグメントの色を決定する）、グラフィックス処理パイプライン１３４の残りの部分による更なる処理のために、並列処理ユニット２０２からピクセルを送信するときに発生する。オブジェクトは、グラフィックス処理パイプライン１３４を介して「アプリケーションプログラミングインタフェースオーダ」（ＡＰＩオーダ）で処理される。ＡＰＩオーダは、ＣＰＵ１０２（又はグラフィックスのレンダリングを要求する他のユニット）が、グラフィックス処理パイプライン１３４によって処理されるオブジェクトを要求する順序である。このオーダリングは、ピクセルシェーダステージ３１６が動作する方法に制限を課す。具体的には、ピクセルシェーダステージ３１６は、実際、ＡＰＩオーダ外のフラグメントの処理を完了することができる。例えば、ピクセルシェーダステージ３１６は、古いフラグメントの前に新たなフラグメントを完了することができる。１つのアプローチでは、ピクセルシェーダステージ３１６は、ＡＰＩオーダを維持するために、古いフラグメントが処理を完了するまで新たなフラグメントを保持し、次に、古いフラグメントをエクスポートしてから新たなフラグメントをエクスポートする必要がある。この「保持」アプローチでは、アウトオブオーダ値をバッファするために、少なくともいくつかのメモリを必要とする。したがって、別のアプローチでは、バッファを使用してピクセルシェーダエクスポートのＡＰＩオーダを維持する代わりに、アウトオブオーダエクスポートブロック３２４は、ピクセルシェーダステージ３１６からのアウトオブオーダエクスポートを可能にするのを支援するスコアボード３２６を含む。アウトオブオーダエクスポートブロック３２４に関する更なる詳細を以下に提供する。
【００２８】
ピクセルシェーダステージ３１６は、上流で生成されたプリミティブとラスタライズの結果とに基づいて、スクリーンピクセルの出力値（例えば、カラー値）を計算する。ピクセルシェーダステージ３１６は、テクスチャメモリからテクスチャを適用することができる。ピクセルシェーダステージ３１６の動作は、プログラマブル処理装置２０２上で動作するシェーダプログラムによって実行される。
【００２９】
出力マージャステージ３１８は、ピクセルシェーダステージ３１６からの出力を受信し、これらの出力をマージして、スクリーンピクセルの最終色を決定するためにｚテストやアルファブレンディング等の操作を実行して、ディスプレイデバイス１１８に出力するためにフレームバッファに書き込まれるスクリーンピクセルの最終色を決定する。
【００３０】
深度ブロック３１５によって実行されるｚカリングは、２つのモード（すなわち、アーリーｚカリング及びレイトｚカリング）のうち１つのモードで実行される。図４は、一例による、アーリーｚモード及びレイトｚモードを示す図である。アーリーｚカリング構成４１０では、深度ブロック３１５が、ラスタライザステージ３１４から受信したフラグメントに対してｚカリングを実行し、その後、これらのフラグメントがピクセルシェーダステージ３１６によって処理される。レイトｚカリング構成４２０では、フラグメントがピクセルシェーダステージ３１６によって処理された後、深度ブロック３１５が、ピクセルシェーダステージ３１６から受信したこれらのフラグメントに対してｚカリングを実行する。
【００３１】
一般に、ピクセルシェーダステージ３１６より前にカリングされたフラグメントがピクセルシェーダステージ３１６によって処理されないので、アーリーｚカリングは、レイトｚカリングと比較して有利である。すなわち、レイトｚカリングはピクセルシェーダステージ３１６の後にカリングするので、アーリーｚカリングであれば、レイトｚカリングが行われる場合よりも、ピクセルシェーダステージ３１６によって行われる「不要な」作業量が少なくなる。
【００３２】
レイトｚカリングは、ピクセルシェーダステージ３１６がフラグメントの深度値を決定又は変更するとき等の特定の状況で実行される。より具体的には、ピクセルシェーダステージ３１６がフラグメントの深度値を決定又は変更をすることができる場合には、ピクセルシェーダステージ３１６の前にｚカリングを行うことができない。その代わりに、レイトｚカリングモードでは、ピクセルシェーダ３１６の後にｚカリングが実行される。
【００３３】
アーリーｚカリングとレイトｚカリングの何れが実行されるかは、グラフィックス処理パイプライン１３４を流れるワーク（例えば、プリミティブ及びフラグメント）に対して設定されるモードである。モードは、ピクセルシェーダステージ３１６において、そのワークに対して深度値の更新又は生成が有効にされているかどうかに基づいて設定される。ピクセルシェーダステージ３１６において、深度値の更新又は生成が有効になっている場合にはレイトｚカリングが用いられ、ピクセルシェーダステージ３１６において、当該ワークに対する深度値の更新及び生成が有効になっていない場合にはアーリーｚカリングが用いられる。
【００３４】
ｚカリングはｚテストを含み、その結果は、フラグメントがｚテストを「クリア」し、グラフィックス処理パイプライン１３４内の後のユニットに渡されるか、それとも「カリング」されて破棄されるかを決定する。ｚテストは、入力フラグメントの深度値を、そのフラグメントに対応するスクリーン位置について、深度バッファ３２２に記憶されている深度値と比較して、そのフラグメントについてｚテストが合格か不合格かを判別する。使用される特定のｚ関数は、ｚテストが実行される方法を決定する。ｚカリングは、深度バッファ３２２に記憶されている深度値の更新を必要とする場合がある。深度値が更新されるかどうかは、深度バッファ３２２の更新が有効であるかどうか、何れのｚ関数が使用されるか、及び、フラグメントがｚテストに合格したか不合格であるかを含む、いくつかの要因によって決まる。
【００３５】
いくつかのｚ関数が可能である。可能なｚ関数には、「常に不合格（ｎｅｖｅｒ）」、「バッファ値より小さい（ｌｅｓｓ）」、「バッファ値より大きい（ｇｒｅａｔｅｒ）」、「バッファ値より小さいか等しい（ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ）」、「バッファ値より大きいか等しい（ｇｒｅａｔｅｒ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ）」、「バッファ値と等しい（ｅｑｕａｌ）」、「バッファ値と等しくない（ｎｏｔ  ｅｑｕａｌ）」、及び、「常に合格（ａｌｗａｙｓ）」等がある。これらのｚ関数の各々については、深度バッファ３２２への書き込みを有効又は無効にすることができる。書き込みが有効かどうかは、特定のワーク（例えば、フラグメント又はトライアングル）に対して適用することができるモードである。概して、入力フラグメントが、深度バッファ３２２に記憶された深度値に関する条件を満たす場合、ｚテストは特定の関数について合格となる（例えば、入力フラグメントの深度値がｚ関数条件フレーズの前に配置され、深度バッファ３２２に記憶された深度値がｚ関数条件フレーズの後に配置される。したがって、ｚ関数「ｌｅｓｓ」に関するｚテストは、入力フラグメントの深度値が、深度バッファ３２２に記憶されている深度値よりも小さいかどうかという条件を、その入力フラグメントのスクリーン位置について評価する）。実行されるｚテストの比較は、フラグメントと、フラグメントのスクリーン位置に一致するスクリーン位置に関する深度バッファ３２２内の深度値と、の間で行われる。したがって、フラグメントのスクリーン位置がｘ＝１２０、ｙ＝８５の場合、実行されるｚテストの比較は、そのフラグメントと、深度バッファ３２２に記憶されたスクリーン位置ｘ＝１２０、ｙ＝８５に対応する深度値と、の間で行われる。
【００３６】
ｚ関数「ｎｅｖｅｒ」は、入力フラグメントを決して合格させない（したがって、常に破棄する）。ｚ関数「ａｌｗａｙｓ」は、常に入力フラグメントを合格させる（したがって、決して破棄しない）。「ｌｅｓｓ」、「ｇｒｅａｔｅｒ」、「ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」、又は、「ｇｒｅａｔｅｒ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」のテストは、言及された条件（例えば、バッファ値よりも小さい、バッファ値よりも大きい等）が満たされる場合にはフラグメントを合格とし、言及された条件が満たされない場合にはフラグメントをカリングする。例えば、ｚ関数が「ｌｅｓｓ」であり、入力フラグメントが、深度バッファ３２２内の対応する深度値よりも小さい深度値を有する場合には、ｚテストはそのフラグメントを合格とし、フラグメントをカリングしない。ｚ関数が「ｌｅｓｓ」であり、入力フラグメントが、深度バッファ３２２内の対応する深度値以上の深度値を有する場合には、ｚテストはそのフラグメントを不合格とし、フラグメントをカリングする。ｚ関数「ｅｑｕａｌ」及び「ｎｏｔ  ｅｑｕａｌ」は、フラグメントについて言及された条件が満たされる場合には、ｚテストはそのフラグメントを合格とし、このフラグメントをカリングせず、フラグメントについて言及された条件が満たされない場合には、ｚテストはそのフラグメントを不合格とし、深度ブロック３１５はこのフラグメントをカリングするという点で類似している。
【００３７】
上記のフラグメント毎に、深度バッファ３２２への書き込みを有効にすることも、無効にすることも可能である。深度バッファ３２２への書き込みが有効になっている場合、深度ブロック３１５は、フラグメントがｚテストに合格したと判別したことに応じて、深度バッファ３２２を更新し、フラグメントがｚテストに失敗した（不合格である）と判別した場合、深度バッファ３２２を更新しない。深度バッファの更新値は、入力フラグメントの深度値である。深度バッファ３２２への書き込みが有効になっていない場合には、フラグメントがｚテストに合格したかどうかにかかわらず、深度バッファ３２２が更新されない。一例では、ｚ関数が「ｌｅｓｓ」であり、深度バッファ３２２への書き込みが有効である。この例において、入力フラグメントは、スクリーン位置ｘ＝８０、ｙ＝５０、深度値０．６を有する。スクリーン位置ｘ＝８０、ｙ＝５０に対応する深度バッファ３２２内の深度値は０．８である。フラグメントの深度値は、深度バッファ３２２に記憶されている深度値よりも小さいので、フラグメントがｚテストに合格することを意味する。フラグメントがｚテストに合格したので、そのフラグメントは、深度ブロック３１５から次のユニット（例えば、アーリーｚが有効である場合にはピクセルシェーダステージ３１６、レイトｚが有効である場合には出力マージャステージ３１８）に渡される。書き込みが有効にされ、フラグメントがｚテストに合格したので、深度ブロック３１５は、スクリーン位置ｘ＝８０、ｙ＝５０についての深度バッファを、フラグメントの深度値（０．６に等しい）に更新する。
【００３８】
レイトｚカリングとアーリーｚカリングの何れが使われるかは、アウトオブオーダエクスポートブロック３２４が本明細書で説明する方法（例えば、図５）でフラグメントをアウトオブオーダでエクスポートするか、実質的に異なる方法（例えば、フラグメントをＡＰＩオーダでエクスポートする等）でフラグメントをエクスポートするかに影響する。アーリーｚカリングが適用される場合、アウトオブオーダエクスポートブロック３２４は、フラグメントをアウトオブオーダでエクスポートする。レイトｚカリングが適用される場合、アウトオブオーダエクスポートブロック３２４がフラグメントをアウトオブオーダでエクスポートするかどうかは、特定の要因によって決まる。アーリーｚカリングではｚカリングが実行されるので、ＡＰＩオーダで後のフラグメントは、前のフラグメントによって遮られないことがわかっている。したがって、最新のフラグメントでないフラグメントは、少なくとも１つの新たなフラグメントによって確実に上書きされることになる。レイトｚカリングについては、ピクセルシェーダステージ３１６がフラグメントを処理した後に行われ、上述した技術は必ずしも適用されない（すなわち、フラグメントが順番にバッファリングされエクスポートされ、又は、ピクセルシェーダステージ３１６からフラグメントをエクスポートするために他の技術が使用される）。より具体的には、アーリーｚカリングとは異なり、レイトｚカリングが適用され、アウトオブオーダ技術が用いられる場合、深度テストがアウトオブオーダで実行され、誤った結果をもたらす可能性がある。このため、レイトｚカリングが有効になっている場合には、アウトオブオーダ技術が特定のインスタンスに適用される。このような例は、以下の表１に反映されている。
【表１】
2020506474.tif 000003
【００３９】
ｚカリング中の深度バッファへの書き込みが有効になっていない場合は、アウトオブオーダ技術が適用される。深度バッファへの書き込みが有効になっている場合には、ｚ関数が「ｌｅｓｓ  ｔｈａｎ」若しくは「ｇｒｅａｔｅｒ  ｔｈａｎ」、「ｎｏｔ  ｅｑｕａｌ」、又は、「ａｌｗａｙｓ」の場合、アウトオブオーダ技術が用いられない。深度バッファへの書き込みが有効であり、ｚ関数が「ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」又は「ｇｒｅａｔｅｒ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」であり、特定の深度テストの結果が、入力フラグメントの深度値が深度バッファ内の深度値と等しいことである場合には、アウトオブオーダ技術が適用される。深度バッファへの書き込みが有効であり、ｚ関数が「ｌｅｓｓ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」又は「ｇｒｅａｔｅｒ  ｔｈａｎ  ｏｒ  ｅｑｕａｌ」であり、特定の深度テストの結果が、入力フラグメントの深度値が深度バッファ内の深度値と等しくないことである場合には、アウトオブオーダ技術が適用されない。また、フラグメントのブレンディングが有効になっている場合には、アウトオブオーダ技術が適用されない。ｚ関数が「ｌｅｓｓ  ｔｈａｎ」又は「ｇｒｅａｔｅｒ  ｔｈａｎ」である状況では、入力フラグメントの深度値が、深度バッファに記憶されている深度値と等しくない限り、アウトオブオーダ技術が適用されない。このような状況では、アウトオブオーダ技術が適用される。より具体的には、論理的なオーダで最も古いフラグメントは、この状況ではｚテストに合格し、廃棄されない。
【００４０】
図５は、アウトオブオーダエクスポートブロック３２４及びスコアボード３２６の詳細と、ピクセルシェーダステージ３１６からアウトオブオーダエクスポートを実行するための操作の例と、を示す図である。これらの操作により、ピクセルシェーダステージ３１６は、シェーディングの済んだフラグメントを、ＡＰＩオーダとは異なるオーダでエクスポートすることができるようになる。図５は、ピクセルシェーダステージ３１６からエクスポートされ、アウトオブオーダエクスポートブロック３２４に提供されたフラグメントのシーケンスを示しており、このシーケンスは、ピクセルシェーダステージ３１６から受信したオーダ（ＡＰＩオーダに対してアウトオブオーダであってもよい）でこれらのフラグメントを処理して、処理済みフラグメントを出力マージャステージ３１８に出力する（但し、グラフィックス処理パイプラインの変形形態が可能であり、したがって、アウトオブオーダエクスポートブロック３２４が、処理済みフラグメントを出力マージャステージ３１８以外のブロックにエクスポートすることが可能であることを認識する必要がある）。
【００４１】
アウトオブオーダエクスポートブロック３２４は、ピクセルシェーダステージ３１６によって処理されているか処理されたフラグメントのフラグメントタイムスタンプ５０４を記憶するスコアボード３２６を含む。一時的に図３を参照すると、アウトオブオーダエクスポートブロック３２４を含む深度ブロック３１５は、ピクセルシェーダステージ３１６への入力を提供し、ピクセルシェーダステージ３１６からの出力を受信し、したがって、ピクセルシェーダステージ３１６に入力されるフラグメントと、ピクセルシェーダステージ３１６の出力でのフラグメントと、を処理することができる。
【００４２】
図５を再び参照すると、アウトオブオーダエクスポートブロック３２４は、グラフィックス処理パイプライン１３４の上流ステージ（例えば、ラスタライザステージ３１４）から受信したフラグメントに基づいて、スコアボード３２６を更新する。スコアボード３２６を更新することは、受信したフラグメントに基づいてフラグメントタイムスタンプ５０４を更新することを含む。より具体的には、アウトオブオーダエクスポートブロック３２４は、スクリーン位置毎に当該スクリーン位置のフラグメントタイムスタンプ５０４を更新し、ピクセルシェーダステージ３１６によって処理されているか以前に処理された最新のフラグメントを、ＡＰＩオーダで反映する。したがって、各フラグメントタイムスタンプ５０４は、スクリーン位置と、当該スクリーン位置について最も新たに発生したフラグメントのタイムスタンプと、を含む。いくつかの例では、タイムスタンプは、相対的なＡＰＩオーダの数値識別子であり、ＡＰＩオーダの小さい数字は古いフラグメントを示し、大きい数字は新たなフラグメントを示す。
【００４３】
深度ブロック３１５は、処理のために、フラグメントをピクセルシェーダステージ３１６に送信する。ピクセルシェーダステージ３１６は、（例えば、ピクセルシェーダプログラムを実行することによって）フラグメントを処理し、かかる処理が完了すると、フラグメントをエクスポートする準備が整う。ピクセルシェーダステージ３１６がフラグメントをエクスポートする準備ができている場合、アウトオブオーダエクスポートブロック３２４は、そのエクスポート準備完了フラグメントがピクセルシェーダステージ３１６で発生した最新のフラグメントであることをスコアボード３２６が示すかどうかを判別する。エクスポート準備完了フラグメントがピクセルシェーダステージ３１６で発生した最新のフラグメントであることをスコアボード３２６が示す場合、アウトオブオーダエクスポートブロック３２４は、古いフラグメントがピクセルシェーダステージ３１６において処理を終了する前に当該フラグメントが出力される場合であっても、当該フラグメントを、グラフィックス処理パイプラインの残りの部分（例えば、出力マージャステージ３１８）による処理のためにエクスポートできるようにする。エクスポート準備完了フラグメントがピクセルシェーダステージ３１６で発生した最新のフラグメントではないことをスコアボード３２６が示している場合、エクスポートブロック３２４は、当該フラグメントを破棄する。
【００４４】
図５は、ピクセルシェーダステージ３１６からアウトオブオーダエクスポートブロック３２４によって受信されたいくつかの例示的なフラグメントに適用される上記の操作を示している。ピクセルシェーダステージ３１６からのいくつかの例示的なフラグメント５０２が示されている。これらのフラグメントがピクセルシェーダステージ３１６によってエクスポートの準備ができていると判別される順序は、図５の上から下へである。すなわち、一番上のフラグメント５０２（１）は、図示されたフラグメント５０２のうち最も古いものであり、最も下のフラグメント５０２（６）は、最も新しいものである。このオーダはＡＰＩオーダではないが、フラグメントがピクセルシェーダステージ３１６によってエクスポートされる準備が整ったオーダである（ＡＰＩオーダは、テキスト「オーダ」の後の番号として各フラグメント５０２に対して反映され、大きい番号が新たなフラグメントを示している）。
【００４５】
６つのフラグメント５０２が図５に示されている。図示されたフラグメントのうち最初に受信された第１フラグメント５０２（１）は、スクリーン位置３２，１６と、ＡＰＩオーダ１６０と、を有する。図示されたフラグメントのうち２番目に受信された第２フラグメント５０２（２）は、スクリーン位置１５，３０と、ＡＰＩオーダ１０２と、を有する。図示されたフラグメントのうち３番目に受信された第３フラグメント５０２（３）は、スクリーン位置１５，３０と、ＡＰＩオーダ１００と、を有する。第４フラグメント５０２（４）は、スクリーン位置１４，１と、ＡＰＩオーダ７５と、を有する。第５フラグメント５０２（５）は、スクリーン位置３２，１６と、ＡＰＩオーダ１４０と、を有する。第６フラグメント５０２（６）は、スクリーン位置３２，１６と、ＡＰＩオーダ１２２と、を有する。
【００４６】
スコアボード列は、ピクセルシェーダからエクスポートする準備ができているフラグメント５０２を処理する直前のスコアボード３２６の状態を示している。第１フラグメントタイムスタンプ５０４（１）は、スクリーン位置１５，３０について最も新たに発生したフラグメントがＡＰＩオーダ１０２を有することを示している。第２フラグメントタイムスタンプ５０４（２）は、スクリーン位置１４，１について最も新たに発生したフラグメントがＡＰＩオーダ７５を有することを示している。第３フラグメントタイムスタンプ５０４（３）は、スクリーン位置３２，１６について最も新たに発生したフラグメントがＡＰＩオーダ１６０を有することを示している。
【００４７】
第１フラグメント５０２（１）を受信する前に、スクリーン位置｛１５，３０｝、｛１４，１｝及び｛３２，１６｝についてのエントリは、無効データを含む（これらのスクリーン位置に対してフラグメントが受信されていないと仮定する）。第１フラグメント５０２（１）を受信すると、アウトオブオーダエクスポートブロックは、第１フラグメント５０２（１）のものと一致するスクリーン位置のエントリについてスコアボードをチェックする。そのスクリーン位置に対する無効値を見つけると、アウトオブオーダエクスポートブロック３２４は、第１フラグメント５０２（１）をエクスポートし、スクリーン位置｛３２，１６｝のスコアボードエントリを更新して、第１フラグメント５０２（１）のＡＰＩオーダタイムスタンプ（１６０である）を有するのを可能にする。
【００４８】
スクリーン位置｛１５，３０｝を有する第２フラグメント５０２（２）を受信すると、アウトオブオーダエクスポートブロック３２４は、スコアボード３２６をチェックし、そのスクリーン位置に対して無効なエントリが存在すると判別する。これに応じて、アウトオブオーダエクスポートブロック３２４は、第２フラグメント５０２（２）をエクスポートし、スクリーン位置｛１５，３０｝に対するスコアボード３２６のエントリを更新して、第２フラグメント５０２（２）のＡＰＩオーダ値（１０２である）を記憶するのを可能にする。
【００４９】
スクリーン位置｛１５，３０｝を有する第３フラグメント５０２（３）を受信すると、アウトオブオーダエクスポートブロック３２４は、スコアボードをチェックし、第３フラグメント５０２（３）が、スクリーン位置｛１５，３０｝に対して現在記憶されているＡＰＩオーダ値（１０２）よりも古いＡＰＩオーダ値（１００）を有していることから、スクリーン位置｛１５，３０｝のエントリが、第３フラグメントがＡＰＩオーダで最後に発生したフラグメント５０２ではないことを示していると判別する。第３フラグメント５０２（３）が最後に発生したフラグメント５０２ではないと判別したことに応じて、アウトオブオーダエクスポートブロック３２４は、第３フラグメント５０２（３）をカリングし、スコアボード３２６を更新しない。
【００５０】
スクリーン位置｛１４，１｝を有する第４フラグメント５０２（４）を受信すると、アウトオブオーダエクスポートブロック３２４は、スコアボード３２６をチェックし、そのスクリーン位置に対して無効なエントリが存在すると判別する。これに応じて、アウトオブオーダエクスポートブロック３２４は、第４フラグメント５０２（４）をエクスポートし、スクリーン位置｛１４，１｝に対するスコアボード３２６のエントリを更新して、第４フラグメント５０２（４）のＡＰＩオーダ値（７５である）を記憶するのを可能にする。
【００５１】
スクリーン位置｛３２，１６｝を有する第５フラグメント５０２（５）を受信すると、アウトオブオーダエクスポートブロック３２４は、スコアボード３２６をチェックし、ＡＰＩオーダ値１４０を有する第５フラグメント５０２（５）が、そのスクリーン位置の最後に発生したフラグメント５０２ではないと判別する。これに応じて、アウトオブオーダエクスポートブロック３２４は、そのフラグメントをカリングし、スコアボード３２６を更新しない。
【００５２】
スクリーン位置｛３２，１６｝を有する第６フラグメント５０２（６）を受信すると、アウトオブオーダエクスポートブロック３２４は、スコアボード３２６をチェックし、ＡＰＩオーダ値１２２を有する第６フラグメント５０２（６）が、そのスクリーン位置の最後に発生したフラグメント５０２ではないと判別する。これに応じて、アウトオブオーダエクスポートブロック３２４は、そのフラグメントをカリングし、スコアボード３２６を更新しない。
【００５３】
特定のスクリーン位置に対する全てのフラグメントがエクスポートされた後、スコアボード３２６は、他のスクリーン位置で使用するメモリを節約するために、そのスクリーン位置に対するエントリの割り当てをスコアボード３２６から解除する。一実施例では、スコアボード３２６内のエントリを割り当てる必要があるが、それ以上エントリが利用できないフラグメントが見られる状況では、スコアボード３２６のエントリが解放されるまで、新たなフラグメントをピクセルシェーダステージ３１６に入れることができない。別の例では、フラグメントがピクセルシェーダステージ３１６に入るのを抑制する代わりに、新たなフラグメントを、ピクセルシェーダステージ３１６に入れて処理することができるが、エントリがスコアボード３２６において解放されるまで、エクスポートすることができない。
【００５４】
図６は、一例による、グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをアウトオブオーダでエクスポートする方法６００のフロー図である。図１〜図５に関して示し説明したシステムに関して説明するが、技術的に実行可能なオーダで方法を実行するように構成された任意のシステムも本開示の範囲内にあることを理解されたい。
【００５５】
方法６００は、ステップ６０２で開始し、アウトオブオーダエクスポートブロック３２４がフラグメントを受信し、受信したフラグメントに基づいてスコアボード３２６を更新する。上述したように、スコアボード３２６を更新することは、受信したフラグメントのスクリーン位置について記憶されたＡＰＩオーダ値を更新して、発生した最新のフラグメントのＡＰＩオーダを示すことを含む。
【００５６】
ステップ６０４において、ピクセルシェーダステージ３１６は、フラグメントを処理する。この処理は、フラグメントに対してピクセルシェーダプログラムを実行することを含む。ステップ６０６において、アウトオブオーダエクスポートブロック３２４は、エクスポート準備完了フラグメントのＡＰＩオーダが、スコアボード３２６内の同じスクリーン位置におけるＡＰＩオーダと同じであるかどうかをチェックする。ＡＰＩオーダが同じでない場合、そのＡＰＩオーダは、そのフラグメントが最新のフラグメントではないことを示し、これにより、ステップ６１０において、アウトオブオーダエクスポートブロック３２４は、そのフラグメントを破棄する。ステップ６０６において、ＡＰＩオーダが同じである場合、ＡＰＩオーダは、そのフラグメントが最新のフラグメントであることを示し、これにより、ステップ６１０において、アウトオブオーダエクスポートブロック３２４は、そのフラグメントをグラフィックス処理パイプライン１３４の残りの部分にエクスポートするのを可能にする。
【００５７】
グラフィックス処理パイプラインのピクセルシェーダステージからフラグメントをエクスポートする方法が提供されている。方法は、アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関して、ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することを含む。また、方法は、ピクセルシェーダ内のフラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成することを含む。さらに、方法は、スコアボードに基づいて、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントであるかどうかを判別することを含む。さらにまた、方法は、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、シェーディングされたフラグメントをエクスポートすることを含む。また、方法は、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントでない場合に、フラグメントを破棄することを含む。
【００５８】
グラフィックス処理パイプラインを含むアクセラレーテッド処理デバイス（ＡＰＤ）も提供されている。ＡＰＤは、フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージと、アウトオブオーダエクスポートブロックと、を備える。アウトオブオーダエクスポートブロックは、アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関して、ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持するように構成されている。また、アウトオブオーダエクスポートブロックは、スコアボードに基づいて、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントであるかどうかを判別するように構成されている。さらに、アウトオブオーダエクスポートブロックは、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、シェーディングされたフラグメントをエクスポートするように構成されている。さらにまた、アウトオブオーダエクスポートブロックは、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントでない場合に、フラグメントを破棄するように構成されている。
【００５９】
コンピューティングデバイスも提供されている。コンピューティングデバイスは、アクセラレーテッド処理デバイス（ＡＰＤ）と、アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）でグラフィックスオブジェクトを処理するための要求を生成し、処理のためにＡＰＤに要求を送信するように構成された中央処理装置と、を備える。ＡＰＤは、フラグメントを処理して、スクリーン位置を有するシェーディングされたフラグメントを生成するように構成されたピクセルシェーダステージであって、フラグメントがグラフィックスオブジェクトに基づいている、ピクセルシェーダステージを含むグラフィックス処理パイプラインを備える。また、ＡＰＤは、アプリケーションプログラミングインタフェースオーダ（ＡＰＩオーダ）に関して、ピクセルシェーダステージで発生した最新のフラグメントを示すスコアボードを維持することと、スコアボードに基づいて、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントであるかどうかを判別することと、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントである場合に、グラフィックス処理パイプラインの後続のステージで処理するために、シェーディングされたフラグメントをエクスポートすることと、シェーディングされたフラグメントが、ピクセルシェーダステージで発生したスクリーン位置に対する最新のフラグメントでない場合に、フラグメントを破棄することと、を行うように構成されたアウトオブオーダエクスポートブロックを備える。
【００６０】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上述したように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００６１】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６２】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2020506474.tif 000004
【図２】
2020506474.tif 000005
【図３】
2020506474.tif 000006
【図４】
2020506474.tif 000007
【図５】
2020506474.tif 000008
【図６】
2020506474.tif 000009
【国際調査報告】
2020506474.tif 000010
2020506474.tif 000011
2020506474.tif 000012
2020506474.tif 000013