(57)【要約】  本開示は、グラフィックス処理のための技法および構造を提示する。一例では、グラフィックス処理の方法は、グラフィックス処理ユニット(GPU)を用いて、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングするステップと、GPUを用いて、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込むステップとを含んでもよい。方法は、GPUを用いて、1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込むステップと、GPUを用いて、フレームの1つまたは複数の部分のレンダリングが完了したときに、グラフィックスメモリ内の深度バッファをシステムメモリにリゾルブするステップとをさらに含んでもよい。
2018510405.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックス処理の方法であって、
グラフィックス処理ユニット(GPU)を用いて、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングするステップと、
前記GPUを用いて、前記1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込むステップと、
前記GPUを用いて、前記1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込むステップと、
前記GPUを用いて、前記フレームの前記1つまたは複数の部分の前記レンダリングが完了したときに、前記グラフィックスメモリ内の前記深度バッファを前記システムメモリにリゾルブするステップと
を含む方法。
【請求項２】
前記GPUを用いて、前記フレームの前記1つまたは複数の部分に対してビニングパスを実行するステップ
をさらに含む、請求項1に記載の方法。
【請求項３】
前記フレームの前記1つまたは複数の部分の各々が、前記フレームのビンである、請求項2に記載の方法。
【請求項４】
前記ビニングパスを実行するステップが、前記ビンにおいて可視であるプリミティブを識別するハードウェアビニングパスを実行するステップを含み、
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするステップが、前記ビンにおいて可視であると識別された前記プリミティブに対して前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記ビンをレンダリングするステップを含む、
請求項3に記載の方法。
【請求項５】
前記ビニングパスを実行するステップが、前記ビン内にあるプリミティブを識別するソフトウェアビニングパスを実行するステップを含み、
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするステップが、前記ビン内にあると識別された前記プリミティブに対して前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記ビンをレンダリングするステップを含む、
請求項3に記載の方法。
【請求項６】
前記フレームの前記1つまたは複数の部分が、前記フレーム全体である、請求項1に記載の方法。
【請求項７】
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするステップが、ピクセル処理演算および1つまたは複数の深度テストを使用して前記フレームの前記1つまたは複数の部分をレンダリングするステップを含み、
前記1つまたは複数のグラフィックス演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むステップが、前記ピクセル処理演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むステップを含み、
前記1つまたは複数のグラフィックス演算に従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むステップが、前記1つまたは複数の深度テストに従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むステップを含む、
請求項1に記載の方法。
【請求項８】
前記システムメモリが、ダイナミックランダムアクセスメモリ(DRAM)であり、前記グラフィックスメモリが、前記GPUと同じ集積回路上にある、請求項1に記載の方法。
【請求項９】
グラフィックス処理のために構成された装置であって、
グラフィックスデータを記憶するように構成されたグラフィックスメモリと、
システムメモリおよび前記グラフィックスメモリと通信しているグラフィックス処理ユニット(GPU)であって、
1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングし、
前記1つまたは複数のグラフィックス演算に従って色データを前記システムメモリ内の色バッファに直接書き込み、
前記1つまたは複数のグラフィックス演算に従って深度データを前記グラフィックスメモリ内の深度バッファに書き込み、
前記フレームの前記1つまたは複数の部分の前記レンダリングが完了したときに、前記グラフィックスメモリ内の前記深度バッファを前記システムメモリにリゾルブする
ように構成されたGPUと
を備える装置。
【請求項１０】
前記システムメモリをさらに備える、請求項9に記載の装置。
【請求項１１】
前記システムメモリが、ダイナミックランダムアクセスメモリ(DRAM)であり、前記グラフィックスメモリが、前記GPUと同じ集積回路上にある、請求項10に記載の装置。
【請求項１２】
前記GPUが、
前記フレームの前記1つまたは複数の部分に対してビニングパスを実行する
ようにさらに構成される、請求項9に記載の装置。
【請求項１３】
前記フレームの前記1つまたは複数の部分の各々が、前記フレームのビンである、請求項12に記載の装置。
【請求項１４】
前記ビニングパスを実行するために、前記GPUが、前記ビンにおいて可視であるプリミティブを識別するハードウェアビニングパスを実行するようにさらに構成され、
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするために、前記GPUが、前記ビンにおいて可視であると識別された前記プリミティブに対して前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記ビンをレンダリングするようにさらに構成される、
請求項13に記載の装置。
【請求項１５】
前記ビニングパスを実行するために、前記GPUが、前記ビン内にあるプリミティブを識別するソフトウェアビニングパスを実行するようにさらに構成され、
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするために、前記GPUが、前記ビン内にあると識別された前記プリミティブに対して前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記ビンをレンダリングするようにさらに構成される、
請求項13に記載の装置。
【請求項１６】
前記フレームの前記1つまたは複数の部分が、前記フレーム全体である、請求項9に記載の装置。
【請求項１７】
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするために、前記GPUが、ピクセル処理演算および1つまたは複数の深度テストを使用して前記フレームの前記1つまたは複数の部分をレンダリングするようにさらに構成され、
前記1つまたは複数のグラフィックス演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むために、前記GPUが、前記ピクセル処理演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むようにさらに構成され、
前記1つまたは複数のグラフィックス演算に従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むために、前記GPUが、前記1つまたは複数の深度テストに従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むようにさらに構成される、
請求項9に記載の装置。
【請求項１８】
前記フレームを表示するように構成されたディスプレイをさらに備える、請求項9に記載の装置。
【請求項１９】
前記GPUおよび前記グラフィックスメモリが、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはコンソール、携帯電話、ポータブルビデオゲームデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、またはサーバの一部である、請求項9に記載の装置。
【請求項２０】
グラフィックス処理のために構成された装置であって、
1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングするための手段と、
前記1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込むための手段と、
前記1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込むための手段と、
前記フレームの前記1つまたは複数の部分の前記レンダリングが完了したときに、前記グラフィックスメモリ内の前記深度バッファを前記システムメモリにリゾルブするための手段と
を備える装置。
【請求項２１】
前記フレームの前記1つまたは複数の部分に対してビニングパスを実行するための手段
をさらに備える、請求項20に記載の装置。
【請求項２２】
前記フレームの前記1つまたは複数の部分の各々が、前記フレームのビンである、請求項21に記載の装置。
【請求項２３】
前記ビニングパスを実行するための前記手段が、前記ビンにおいて可視であるプリミティブを識別するハードウェアビニングパスを実行するための手段を備え、
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするための前記手段が、前記ビンにおいて可視であると識別された前記プリミティブに対して前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記ビンをレンダリングするための手段を備える、
請求項22に記載の装置。
【請求項２４】
前記ビニングパスを実行するための前記手段が、前記ビン内にあるプリミティブを識別するソフトウェアビニングパスを実行するための手段を備え、
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするための前記手段が、前記ビン内にあると識別された前記プリミティブに対して前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記ビンをレンダリングするための手段を備える、
請求項22に記載の装置。
【請求項２５】
前記フレームの前記1つまたは複数の部分が、前記フレーム全体である、請求項20に記載の装置。
【請求項２６】
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするための前記手段が、ピクセル処理演算および1つまたは複数の深度テストを使用して前記フレームの前記1つまたは複数の部分をレンダリングするための手段を備え、
前記1つまたは複数のグラフィックス演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むための前記手段が、前記ピクセル処理演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むための手段を備え、
前記1つまたは複数のグラフィックス演算に従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むための前記手段が、前記1つまたは複数の深度テストに従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むための手段を備える、
請求項20に記載の装置。
【請求項２７】
前記システムメモリが、ダイナミックランダムアクセスメモリ(DRAM)であり、前記グラフィックスメモリが、GPUと同じ集積回路上にある、請求項20に記載の装置。
【請求項２８】
実行されると、グラフィックス処理のために構成されたデバイスの1つまたは複数のプロセッサに、
1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングさせ、
前記1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込ませ、
前記1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込ませ、
前記フレームの前記1つまたは複数の部分の前記レンダリングが完了したときに、前記グラフィックスメモリ内の前記深度バッファを前記システムメモリにリゾルブさせる
命令を記憶する、非一時的コンピュータ可読記憶媒体。
【請求項２９】
前記命令がさらに、前記1つまたは複数のプロセッサに、
前記フレームの前記1つまたは複数の部分に対してビニングパスを実行させる、請求項28に記載の非一時的コンピュータ可読記憶媒体。
【請求項３０】
前記1つまたは複数のグラフィックス演算を使用して前記フレームの前記1つまたは複数の部分をレンダリングするために、前記命令がさらに、前記1つまたは複数のプロセッサに、ピクセル処理演算および1つまたは複数の深度テストを使用して前記フレームの前記1つまたは複数の部分をレンダリングさせ、
前記1つまたは複数のグラフィックス演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込むために、前記命令がさらに、前記1つまたは複数のプロセッサに、前記ピクセル処理演算に従って前記色データを前記システムメモリ内の前記色バッファに直接書き込ませ、
前記1つまたは複数のグラフィックス演算に従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込むために、前記命令がさらに、前記1つまたは複数のプロセッサに、前記1つまたは複数の深度テストに従って前記深度データを前記グラフィックスメモリ内の前記深度バッファに書き込ませる、
請求項28に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィックス処理のための技法に関し、より詳細には、グラフィックス処理におけるハイブリッドレンダリングモードのための技法に関する。
【背景技術】
【０００２】
グラフィカルユーザインターフェースおよびビデオゲーム用のコンテンツなど、ディスプレイ用の視覚コンテンツは、グラフィックス処理ユニット(GPU)によって生成される場合がある。GPUは、2次元または3次元(3D)オブジェクトを、表示される場合がある2次元(2D)ピクセル表現に変換する場合がある。3Dオブジェクトについての情報を表示できるビットマップに変換することは、ピクセルレンダリングとして知られており、相当なメモリおよび処理能力を必要とする。これまでは、3Dグラフィックス能力は高性能のワークステーションでのみ利用可能であった。しかしながら、今では、3Dグラフィックスアクセラレータは、パーソナルコンピュータ(PC)において、ならびにスマートフォン、タブレットコンピュータ、ポータブルメディアプレーヤ、ポータブルビデオゲームコンソールなどの組込みデバイスにおいてよく見られる。典型的には、組込みデバイスは、従来のPCと比較して、より少ない計算能力およびメモリ容量を有する。したがって、3Dグラフィックスレンダリング技法における複雑さの増大は、そのような技法を組込みシステム上で実装するときの問題点を提示する。
【発明の概要】
【課題を解決するための手段】
【０００３】
一般に、本開示は、グラフィックス処理におけるハイブリッドレンダリングモードのための技法について説明する。詳細には、いくつかの例では、本開示は、フレームのどのプリミティブがシーンのビンに接するまたはさもなければ寄与することができるかを決定するためにビニングパス(binning pass)を使用する、ハイブリッドレンダリングモードについて説明する。次いで、ビニングパスによってビンに接すると決定された三角形のみを使用して、ビンに対してレンダリングが実行される。ビンのレンダリングの間、深度バッファ内の値は、オンチップの高速グラフィックスメモリ(GMEM)に記憶される。ビンがレンダリングされると、深度バッファ内の値は、システムメモリにリゾルブ(resolve)される。しかしながら、色バッファ(すなわち、ピクセルの色値を記憶するバッファ)内の値もGMEMに記憶し、次いで、ビンのレンダリングが完了したときに色バッファをシステムメモリにリゾルブするのではなく、本開示のハイブリッドレンダリング技法は、GMEMを使用することなしに、ピクセル値をシステムメモリに記憶された色バッファに直接書き込むことができる。色バッファ値をシステムメモリに直接書き込むことは、ビンのレンダリングの間に、色バッファがまれにまたは1回だけ更新される状況において、有益である場合がある。
【０００４】
本開示の一例では、グラフィックス処理の方法は、グラフィックス処理ユニット(GPU)を用いて、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングするステップと、GPUを用いて、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込むステップと、GPUを用いて、1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込むステップと、GPUを用いて、フレームの1つまたは複数の部分のレンダリングが完了したときに、グラフィックスメモリ内の深度バッファをシステムメモリにリゾルブするステップとを含む。
【０００５】
本開示の別の例では、グラフィックス処理のために構成された装置は、グラフィックスデータを記憶するように構成されたグラフィックスメモリと、システムメモリおよびグラフィックスメモリと通信しているGPUであって、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングし、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込み、1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込み、フレームの1つまたは複数の部分のレンダリングが完了したときに、グラフィックスメモリ内の深度バッファをシステムメモリにリゾルブするように構成されたGPUとを備える。
【０００６】
本開示の別の例では、グラフィックス処理のために構成された装置は、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングするための手段と、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込むための手段と、1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込むための手段と、フレームの1つまたは複数の部分のレンダリングが完了したときに、グラフィックスメモリ内の深度バッファをシステムメモリにリゾルブするための手段とを備える。
【０００７】
別の例では、本開示は、実行されると、グラフィックス処理のために構成されたデバイスの1つまたは複数のプロセッサに、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングさせ、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ内の色バッファに直接書き込ませ、1つまたは複数のグラフィックス演算に従って深度データをグラフィックスメモリ内の深度バッファに書き込ませ、フレームの1つまたは複数の部分のレンダリングが完了したときに、グラフィックスメモリ内の深度バッファをシステムメモリにリゾルブさせる命令を記憶する、非一時的コンピュータ可読記憶媒体について説明する。
【０００８】
本開示の技法はまた、装置と、プロセッサに本技法を実行させるための命令を記憶するコンピュータ可読記憶媒体とに関して説明される。1つまたは複数の例の詳細は、添付の図面および以下の説明に記載されている。他の特徴、目的、および利点は、説明および図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】本開示の技法を使用するように構成された例示的なコンピューティングデバイスを示すブロック図である。
【図２】本開示の技法を使用するように構成された例示的な処理ユニットを示すブロック図である。
【図３】フレームのビンを示す概念図である。
【図４】フレームのビンをより詳細に示す概念図である。
【図５】本開示の技法による、「ソフトウェア」ビニングを使用するハイブリッドレンダリングモードのコマンドバッファを示す概念図である。
【図６】本開示の技法による、「ハードウェア」ビニングを使用するハイブリッドレンダリングモードのコマンドバッファを示す概念図である。
【図７】本開示の一例による方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
本開示は、グラフィックス処理のための技法に関し、より詳細には、ハイブリッドレンダリングモードのための技法に関する。現在のグラフィックスレンダリングシステムは、典型的には、シーンをレンダリングするためにビニングレンダリングモード(タイルベースのレンダリングと呼ばれることがある)または直接レンダリングモードのうちの1つを使用する。多くの例では、グラフィックス処理ユニット(GPU)は、ビニングレンダリングとタイルベースのレンダリングの両方を選択的に実行するように構成されてもよい。ビニングレンダリングでは、2Dまたは3Dシーンの1つのフレームは、フレームをより小さい部分(たとえば、矩形のビンまたはタイル)に分け、これらのビンの各々を別々にレンダリングすることによって、レンダリングされる。ビニングレンダリングは、モバイルアプリケーションなど、専用の高速グラフィックスメモリ(GMEM)がほとんど利用できないアプリケーションに有用である。ビンのサイズは、GMEMにおいて利用可能な記憶の量を表すように構成することが可能である。たとえば、GMEMが512kBを記憶することができる場合、ビンのサイズは、そのビンに含まれるそのピクセルデータが512kB以下になるように構成されてもよい。
【００１１】
GMEMに記憶される場合があるピクセルデータは、ピクセルの深度値およびピクセルの色値を含んでもよい。ビン内のピクセルについての深度値は、GMEM内の深度バッファに記憶されてもよい。同様に、ビン内のピクセルについての色値は、GMEM内の色バッファに記憶されてもよい。ビンのレンダリングが終了したとき、深度バッファと色バッファの両方は、システムメモリに(たとえば、ダイナミックランダムアクセスメモリ(DRAM)に)リゾルブされてもよい。すなわち、データをバッファからシステムメモリにリゾルブすることは、バッファ(たとえば、深度バッファと色バッファの両方)に記憶された値をGMEMからシステムメモリに書き込むことを含む。このようにして、次のビンについての深度値および色値は、GMEM内の深度バッファおよび色バッファに記憶されてもよい。
【００１２】
一方、直接レンダリングモードにおけるグラフィックス処理は、フレームをより小さい部分(たとえば、ビンまたはタイル)に分けない。代わりに、フレームの全体が一度にレンダリングされる。いくつかのグラフィックス処理システム(たとえば、モバイルデバイス上のグラフィックス処理システム)では、ピクセルデータのフレーム全体を保持するのに十分なGMEMがない。代わりに、直接レンダリングモードでは、より遅いシステムメモリが、フレームをレンダリングするために使用される。したがって、深度値および色値は、それぞれ、システムメモリ内の深度バッファおよび色バッファに直接書き込まれる。
【００１３】
直接レンダリング技法は、色バッファおよび深度バッファを記憶するためにシステムメモリを利用するので、直接レンダリング技法は、典型的には、システムメモリからより多くのメモリトラフィックを受ける。GPUとシステムメモリとの間のメモリトラフィックは、典型的には遅く、したがって、GPU性能を制限する。加えて、GPUとシステムメモリとの間のメモリトラフィックは、GPUとオンチップグラフィックスメモリとの間のメモリトラフィックよりも多くの電力を消費する。
【００１４】
通常、ビニングレンダリング技法は、色バッファおよび深度バッファを記憶するためにGMEMを使用するので、ビニングレンダリング技法は、直接レンダリングよりも少ない、GPUとシステムメモリとの間の合計メモリトラフィックを受ける。しかしながら、ますます多くのアプリケーションおよびGPUアーキテクチャが、色の読取り/書込みの複雑さを低減するために、アドバンスト深度テストを含む深度テストを使用する。すなわち、深度バッファ内の値に基づいてシェーディングなどのグラフィックス演算を実行することは、ユーザに「最も近い」ピクセルに対してそのようなシェーディングを実行させるにすぎない。したがって、色バッファへのピクセル値のより少ない書込みが必要とされる。ビン内の大部分のピクセルが数回(または1回だけ)色バッファに書き込まれる場合、ピクセルをGMEM内の色バッファに書き込み、次いで、色バッファを出してシステムメモリにリゾルブすることは、ピクセルをシステムメモリ内の色バッファに直接書き込むことだけよりも低いメモリ性能をもたらす場合がある。すなわち、GMEMの使用は、色値および/または深度値が多数回GMEM内の色バッファおよび深度バッファに書き込まれるとき、最も多くの利点を与える。ビンごとに数回のみ色値をGMEMに書き込み、次いで、そのような値をシステムにリゾルブすることは、単にそれらの値をシステムメモリに直接書き込むことよりも低いメモリ性能および電力性能をもたらす場合がある。
【００１５】
これらの欠点に鑑みて、本開示は、ピクセル値がシステムメモリ(たとえば、DRAM)内の色バッファに直接書き込まれ、深度値がGMEM内の深度バッファに書き込まれる、ハイブリッドレンダリングシステムを提案する。本開示のハイブリッドレンダリング技法は、ビニング技法を用いてまたはビニング技法を用いずに使用されてもよい。深度の複雑さ(すなわち、深度の読取り/書込みの数)は、一般に、色の複雑さ(すなわち、ピクセル値の読取り/書込みの数)よりも高いので、本開示の技法は、GMEMからDRAMへの不要な色バッファリゾルブを省くことができる。すなわち、本開示のハイブリッドレンダリング技法は、ビンごとにピクセル値が数回または1回のみGMEMに書き込まれる可能性がある状況に、より大きいメモリ使用効率を提供する。
【００１６】
図1は、ハイブリッドレンダリングモードを実行するための本開示の技法を実装するために使用されてもよい例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、たとえば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはコンソール、たとえば、セルラー電話もしくは衛星電話などの携帯電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、またはグラフィカルデータを処理および/もしくは表示する任意の他のタイプのデバイスを含んでもよい。
【００１７】
図1の例に示すように、コンピューティングデバイス2は、ユーザ入力インターフェース4、中央処理ユニット(CPU)6、メモリコントローラ8、システムメモリ10、グラフィックス処理ユニット(GPU)12、グラフィックスメモリ(GMEM)14、ディスプレイインターフェース16、ディスプレイ18、ならびにバス20および22を含んでもよい。いくつかの例では、GMEM14はGPU12に「オンチップ」であってもよいことに留意されたい。場合によっては、図1に示すすべてのハードウェア要素は、たとえば、システムオンチップ(SoC)設計において、オンチップであってもよい。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12およびディスプレイインターフェース16は、バス20を使用して互いに通信してもよい。メモリコントローラ8およびシステムメモリ10はまた、バス22を使用して互いに通信してもよい。バス20、22は、第3世代バス(たとえば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(たとえば、アドバンストグラフィックスポートバス、 Peripheral Component Interconnect(PCI) Expressバス、または Advanced eXentisible Interface(AXI)バス)または別のタイプのバスもしくはデバイス相互接続などの様々なバス構造のいずれかであってもよい。図1に示す異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、同じまたは異なる構成要素を有するコンピューティングデバイスおよび/または他のグラフィックス処理システムの他の構成が本開示の技法を実装するために使用されてもよいことに留意されたい。
【００１８】
CPU6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを備えてもよい。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるために、入力をコンピューティングデバイス2に与える場合がある。CPU6上で実行されるソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーションまたは別のプログラムを含んでもよい。加えて、CPU6は、GPU12の動作を制御するためのGPUドライバ7を実行する場合がある。ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合されたキーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、入力をコンピューティングデバイス2に与える場合がある。
【００１９】
CPU6上で実行されるソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを行わせるようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含んでもよい。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標))API、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、または任意の他の公的もしくは独占的な(proprietary)規格グラフィックスAPIなどのグラフィックスアプリケーションプログラミングインターフェース(API)に準拠する場合がある。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部またはすべてを実行させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に(たとえば、GPUドライバ7を通じて)発行する場合がある。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブ、たとえば、点、線、三角形、四角形、三角形ストリップなどのリストを含んでもよい。
【００２０】
メモリコントローラ8は、システムメモリ10を出入りするデータの転送を容易にする。たとえば、メモリコントローラ8は、メモリ読取りコマンドおよびメモリ書込みコマンドを受信し、メモリサービスをコンピューティングデバイス2内の構成要素に提供するためにシステムメモリ10に対してそのようなコマンドをサービスする場合がある。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信可能に結合される。メモリコントローラ8は、CPU6とシステムメモリ10の両方とは別の処理モジュールであるものとして図1に示されているが、他の例では、メモリコントローラ8の機能の一部またはすべては、CPU6およびシステムメモリ10の一方または両方で実装される場合がある。
【００２１】
システムメモリ10は、CPU6が実行するためにアクセス可能なプログラムモジュールおよび/もしくは命令ならびに/またはCPU6上で実行されるプログラムが使用するためのデータを記憶してもよい。たとえば、システムメモリ10は、ディスプレイ18上にグラフィカルユーザインターフェース(GUI)を提示するためにCPU6によって使用されるウィンドウマネージャアプリケーションを記憶してもよい。加えて、システムメモリ10は、ユーザアプリケーションと、アプリケーションに関連付けられたアプリケーションサーフェスデータとを記憶してもよい。システムメモリ10は加えて、コンピューティングデバイス2の他の構成要素が使用するためのおよび/またはそれらの構成要素によって生成される情報を記憶してもよい。たとえば、システムメモリ10は、GPU12用のデバイスメモリとして働いてもよく、GPU12による操作を受けるべきデータならびにGPU12によって実行された動作から生じたデータを記憶してもよい。たとえば、システムメモリ10は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶してもよい。システムメモリ10は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体など、1つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含んでもよい。
【００２２】
GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ18にレンダリングするためのグラフィックス演算を実行するように構成されてもよい。したがって、CPU6上で実行されるソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6はディスプレイ18にレンダリングするためにグラフィックスコマンドおよびグラフィックスデータをGPU12に与えてもよい。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含んでもよい。GPU12は、ある事例では、CPU6よりも効率的な、複雑なグラフィック関連動作の処理を実現する高度並列構造で構築されてもよい。たとえば、GPU12は、複数の頂点またはピクセル上で並行して動作するように構成される複数の処理要素を含んでもよい。GPU12の高度並列の性質は、ある事例では、CPU6を使用してシーンを直接ディスプレイ18に描画するよりも速く、GPU12がグラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上で描画することを可能にする場合がある。
【００２３】
GPU12は、ある事例では、コンピューティングデバイス2のマザーボードに統合される場合がある。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード中のポートにインストールされたグラフィックスカード上に存在する場合があるか、そうでなければコンピューティングデバイス2と相互動作するように構成される周辺デバイス内に組み込まれる場合がある。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の等価の集積論理回路もしくはディスクリート論理回路などの1つまたは複数のプロセッサを含んでもよい。
【００２４】
GPU12は、GMEM14に直接結合されてもよい。したがって、GPU12は、バス20を使用することなしに、GMEM14からデータを読み取り、GMEM14にデータを書き込んでもよい。言い換えれば、GPU12は、オフチップメモリの代わりにローカルストレージを使用して、データをローカルに処理してもよい。これは、重いバストラフィックを経験する場合がある、GPU12がバス20を介してデータの読取りおよび書込みを行う必要をなくすことによって、GPU12がより効率的に動作することを可能にする。しかしながら、ある事例では、GPU12は別個のメモリを含まないが、代わりにバス20を介してシステムメモリ10を利用する場合がある。GMEM14は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体など、1つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含んでもよい。
【００２５】
CPU6および/またはGPU12は、レンダリングされた画像データをフレームバッファ15に記憶してもよい。フレームバッファ15は、独立したメモリであってもよく、またはシステムメモリ10内で割り振られてもよい。ディスプレイインターフェース16は、フレームバッファ15からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ18を構成してもよい。いくつかの例では、ディスプレイインターフェース16は、フレームバッファから取り出されたデジタル値をディスプレイ18が消費できるアナログ信号にコンバートするように構成されるデジタルアナログコンバータ(DAC)を含んでもよい。他の例では、ディスプレイインターフェース16は、処理のためにデジタル値を直接ディスプレイ18に渡してもよい。ディスプレイ18は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、有機LED(OLED)ディスプレイなどの発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含んでもよい。ディスプレイ18は、コンピューティングデバイス2内に統合されてもよい。たとえば、ディスプレイ18は、携帯電話のスクリーンであってもよい。代替的に、ディスプレイ18は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されたスタンドアロンデバイスであってもよい。たとえば、ディスプレイ18は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであってもよい。
【００２６】
本開示の一例によれば、GPU12は、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングし、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ10内の色バッファに直接書き込むように構成されてもよい。GPU12は、1つまたは複数のグラフィックス演算に従って深度データをGMEM14内の深度バッファに書き込み、フレームの1つまたは複数の部分のレンダリングが完了したときに、GMEM14内の深度バッファをシステムメモリ10にリゾルブするようにさらに構成されてもよい。
【００２７】
図2は、図1のCPU6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。CPU6は、少なくとも1つのソフトウェアアプリケーション24、グラフィックスAPI26、およびGPUドライバ7を含んでもよく、これらの各々は、CPU6上で実行される1つまたは複数のソフトウェアアプリケーションまたはサービスであってもよい。GPU12は、グラフィックス処理コマンドを実行するために一緒に動作する複数のグラフィックス処理ステージを含むグラフィックス処理パイプライン30を含んでもよい。GPU12は、本開示の技法に従って、ハイブリッドレンダリングモードでグラフィックス処理パイプライン30を実行するように構成されてもよい。図2に示すように、グラフィックス処理パイプライン30は、コマンドエンジン32、ジオメトリ処理ステージ34、ラスタ化ステージ36、およびピクセル処理パイプライン38を含んでもよい。グラフィックス処理パイプライン30中の構成要素の各々は、固定機能構成要素、(たとえば、プログラマブルシェーダユニット上で実行されるシェーダプログラムの一部としての)プログラマブル構成要素として、または固定機能構成要素とプログラマブル構成要素の組合せとして実装されてもよい。CPU6およびGPU12が利用可能なメモリは、システムメモリ10およびフレームバッファ15を含んでもよい。フレームバッファ15は、システムメモリ10の一部であってもよく、またはシステムメモリ10とは別であってもよい。フレームバッファ15は、レンダリングされた画像データのフレームを記憶してもよい。
【００２８】
以下でより詳細に説明するように、本開示の技法によれば、GPU12は、色値をGMEM14内の深度バッファ13Aに記憶するように構成されてもよい。GPU12は、フレーム(たとえば、ビン)の1つまたは複数の部分のレンダリングが完了したときに、深度バッファ13Aをシステムメモリ10内の深度バッファ13Bにリゾルブするようにさらに構成されてもよい。GPU12は、色値をシステムメモリ10内の色バッファ11に直接(すなわち、色値をGMEM14に記憶せずに)記憶するようにさらに構成されてもよい。
【００２９】
ソフトウェアアプリケーション24は、GPU12の機能を利用する任意のアプリケーションであってもよい。たとえば、ソフトウェアアプリケーション24は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングもしくは美術アプリケーション用のコンピュータ支援設計プログラム、ビデオゲームアプリケーション、または2Dもしくは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションであってもよい。
【００３０】
ソフトウェアアプリケーション24は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようGPU12に命令する1つまたは複数の描画命令を含んでもよい。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含んでもよい。いくつかの例では、描画命令は、GUIで使用される複数のウィンドウ処理サーフェスのすべてまたは一部をまとめて定義してもよい。追加の例では、描画命令は、アプリケーションによって定義されたモデルスペースまたはワールドスペース内の1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンのすべてまたは一部をまとめて定義してもよい。
【００３１】
ソフトウェアアプリケーション24は、1つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための1つまたは複数のコマンドをGPU12に発行するために、グラフィックスAPI26を介してGPUドライバ7を呼び出す場合がある。たとえば、ソフトウェアアプリケーション24は、プリミティブ定義をGPU12に与えるために、グラフィックスAPI26を介してGPUドライバ7を呼び出す場合がある。ある事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、矩形、三角形ファン、三角形ストリップなどのリストの形でGPU12に与えられる場合がある。プリミティブ定義は、レンダリングされるべきプリミティブに関連付けられた1つまたは複数の頂点を指定する頂点仕様を含んでもよい。頂点仕様は、頂点ごとの位置座標と、ある事例では、たとえば、色座標、法線ベクトル、およびテクスチャ座標など、頂点に関連付けられた他の属性とを含んでもよい。プリミティブ定義はまた、プリミティブタイプ情報(たとえば、三角形、矩形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含んでもよい。ソフトウェアアプリケーション24によってGPUドライバ7に発行された命令に基づいて、GPUドライバ7は、プリミティブをレンダリングするためにGPU12が実行する1つまたは複数のグラフィックス演算を指定する1つまたは複数のコマンドを公式化する場合がある。GPU12がCPU6からコマンドを受信すると、グラフィックス処理パイプライン30はコマンドを復号し、コマンドにおいて指定された1つまたは複数のグラフィックス演算を実行するようにグラフィックス処理パイプライン30内の1つまたは複数の処理要素を構成する。指定されたグラフィックス演算を実行した後、グラフィックス処理パイプライン30は、レンダリングされたデータをディスプレイデバイスに関連付けられたフレームバッファ15に出力する。
【００３２】
本開示の技法によれば、GPU12は、ピクセル処理演算および1つまたは複数の深度テストを使用してフレームの1つまたは複数の部分をレンダリングするように構成されてもよい。ピクセル処理演算は、ピクセルについての色値を使用、変更、更新および/または全体的に操作するグラフィックス演算を含んでもよい。ピクセルの色値は、RGBフォーマット(赤、青、緑)、YUVフォーマット(ルーマ(Y)、および2つのクロマ値(UV))、または任意の他のフォーマットであってもよい。GPU12は、深度値を使用、変更、更新および/または全体的に操作するために、深度テスト(または他のグラフィックス演算)を実行することもできる。深度値は、あるピクセルが、他のピクセルと比較して、ビューアにどのくらい近いかを示すことができる。深度値は、どのプリミティブが最終のレンダリングされたシーンにおいて可視であるかを決定するために使用されてもよい。
【００３３】
本開示の技法によれば、GPU12は、色値をシステムメモリ10内の色バッファ11に直接記憶するように構成される。すなわち、GPU12は、任意の色バッファをGMEM14に書き込むことなしに、色バッファ11を更新する。GPU12はまた、フレーム(たとえば、フレームのビン)の1つまたは複数の部分についての深度値をGMEM14内の深度バッファ13Aに記憶するように構成されてもよい。GPU12がフレーム(たとえば、フレームのビン)の1つまたは複数の部分のレンダリングを終了したとき、GPU12は、GMEM14内の深度バッファ13Aをシステムメモリ10内の深度バッファ13Bにリゾルブすることができる。
【００３４】
GPUドライバ7は、1つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムをGPU12内に含まれる1つまたは複数のプログラマブルシェーダユニットにダウンロードするようにさらに構成されてもよい。シェーダプログラムは、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語などの高レベルシェーディング言語で書かれる場合がある。コンパイルされたシェーダプログラムは、GPU12内のプログラマブルシェーダユニットの動作を制御する1つまたは複数の命令を含んでもよい。たとえば、シェーダプログラムは、頂点シェーダプログラムおよび/またはピクセルシェーダプログラムを含んでもよい。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたはユニファイドシェーダユニットの実行を制御し、1つまたは複数の頂点ごとの動作を指定する命令を含んでもよい。ピクセルシェーダプログラムは、プログラマブルピクセルシェーダユニットまたはユニファイドシェーダユニットの実行を制御するピクセルシェーダプログラムを含み、1つまたは複数のピクセルごとの動作を指定する命令を含んでもよい。本開示のいくつかの例によれば、ピクセルシェーダプログラムは、ソースピクセルについてのテクスチャ値を、それらのソースピクセルについての対応する宛先アルファ値に基づいて選択的に取り出させる命令を含むこともできる。GPU12は、本開示の技法に従って頂点シェーダおよびピクセルシェーダを実行することができる。すなわち、色値を更新するピクセルシェーダまたは頂点シェーダによって実行される任意のグラフィックス演算は、GPU12に、システムメモリ10内の色バッファ11を更新させる。深度値を更新するピクセルシェーダまたは頂点シェーダによって実行される任意のグラフィックス演算は、GPU12に、GMEM内の深度バッファ13Aを更新させる。やはり、GPU12は、GPU12によるフレームの部分のレンダリングが完了したときに、深度バッファ13Aをシステムメモリ10内の深度バッファ13Bにリゾルブするように構成される。
【００３５】
グラフィックス処理パイプライン30は、グラフィックスドライバ28を介してCPU6から1つまたは複数のグラフィックス処理コマンドを受信し、グラフィックス処理コマンドを実行して表示可能なグラフィックス画像を生成するように構成されてもよい。上記で説明したように、グラフィックス処理パイプライン30は、グラフィックス処理コマンドを実行するために一緒に動作する複数のステージを含む。しかしながら、そのようなステージは必ずしも別個のハードウェアブロックで実施される必要はないことに留意されたい。たとえば、ジオメトリ処理ステージ34およびピクセル処理パイプライン38の部分は、ユニファイドシェーダユニットの一部として実施されてもよい。さらにまた、グラフィックス処理パイプライン30は、ビニングレンダリングモードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの1つで実行するように構成されてもよい。
【００３６】
コマンドエンジン32は、グラフィックス処理コマンドを受信し、グラフィックス処理コマンドを実施するための様々な動作を実行するようにグラフィックス処理パイプライン30内の残りの処理ステージを構成してもよい。グラフィックス処理コマンドは、たとえば、描画コマンドおよびグラフィックス状態コマンドを含んでもよい。描画コマンドは、1つまたは複数の頂点の位置座標、および、ある事例では、たとえば、色座標、法線ベクトル、テクスチャ座標およびかぶり座標など、頂点の各々に関連付けられた他の属性値を指定する頂点仕様コマンドを含んでもよい。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、照明コマンドなどを含んでもよい。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプおよび/またはプリミティブを形成するために頂点がどのように組み合わされるかを指定してもよい。変換コマンドは、頂点に対して実行すべき変換のタイプを指定してもよい。照明コマンドは、グラフィックスシーン内の異なる照明のタイプ、方向および/または配置を指定してもよい。コマンドエンジン32は、ジオメトリ処理ステージ34に、1つまたは複数の受信されたコマンドに関連付けられた頂点および/またはプリミティブに対してジオメトリ処理を実行させる場合がある。
【００３７】
ジオメトリ処理ステージ34は、ラスタ化ステージ36のためのプリミティブデータを生成するために、1つまたは複数の頂点に対して頂点ごとの動作および/またはプリミティブセットアップ動作を実行してもよい。各頂点は、たとえば、位置座標、色値、法線ベクトル、およびテクスチャ座標などの属性のセットに関連付けられてもよい。ジオメトリ処理ステージ34は、様々な頂点ごとの動作に従って、これらの属性のうちの1つまたは複数を修正する。たとえば、ジオメトリ処理ステージ34は、修正された頂点位置座標を生成するために、頂点位置座標に対して1つまたは複数の変換を実行してもよい。ジオメトリ処理ステージ34は、修正された頂点位置座標を生成するために、たとえば、モデリング変換、ビューイング変換、投影変換、モデルビュー(ModelView)変換、モデルビュー投影(ModelViewProjection)変換、ビューポート変換および深度範囲スケーリング変換のうちの1つまたは複数を頂点位置座標に適用してもよい。
【００３８】
ある事例では、頂点位置座標はモデル空間座標であってもよく、修正された頂点位置座標はスクリーン空間座標であってもよい。スクリーン空間座標は、モデリング変換、ビューイング変換、投影変換およびビューポート変換の適用の後で取得されてもよい。ある事例では、ジオメトリ処理ステージ34はまた、頂点の修正された色座標を生成するために、頂点に対して頂点ごとの照明動作を実行してもよい。ジオメトリ処理ステージ34はまた、たとえば、正規変換、ノーマル正規化動作(normal normalization operations)、ビューボリュームクリッピング、同次除算動作および/またはバックフェースカリング(culling)動作を含む他の動作を実行してもよい。
【００３９】
ジオメトリ処理ステージ34は、ラスタ化されるべきプリミティブを定義する1つまたは複数の修正された頂点のセットを含むプリミティブデータ、ならびにプリミティブを形成するために頂点がどのように組み合わされるかを指定するデータを生成してもよい。修正された頂点の各々は、たとえば、修正された頂点位置座標と、頂点に関連付けられた処理された頂点属性値とを含んでもよい。プリミティブデータはまとめて、グラフィックス処理パイプライン30のさらなるステージによってラスタ化されるべきプリミティブに対応する場合がある。概念的には、各頂点は、プリミティブの2つの辺がぶつかるプリミティブの角に対応する場合がある。ジオメトリ処理ステージ34は、さらなる処理のためにプリミティブデータをラスタ化ステージ36に与えてもよい。
【００４０】
いくつかの例では、ジオメトリ処理ステージ34のすべてまたは一部は、1つまたは複数のシェーダユニット上で実行される1つまたは複数のシェーダプログラムによって実施される場合がある。たとえば、ジオメトリ処理ステージ34は、そのような例では、頂点シェーダ、ジオメトリシェーダまたはそれらの任意の組合せによって実施される場合がある。他の例では、ジオメトリ処理ステージ34は、固定機能ハードウェア処理パイプラインとして、または固定機能ハードウェアと1つもしくは複数のシェーダユニット上で実行される1つもしくは複数のシェーダプログラムの組合せとして実施される場合がある。
【００４１】
ラスタ化ステージ36は、ジオメトリ処理ステージ34から、ラスタ化されるべきプリミティブを表すプリミティブデータを受信し、プリミティブをラスタ化して、ラスタ化されたプリミティブに対応する複数のソースピクセルを生成するように構成される。いくつかの例では、ラスタ化ステージ36は、どのスクリーンピクセルロケーションがラスタ化されるべきプリミティブによってカバーされるかを決定し、プリミティブによってカバーされると決定されたスクリーンピクセルロケーションごとのソースピクセルを生成してもよい。ラスタ化ステージ36は、たとえば、エッジウォーキング(edge-walking)技法、エッジ方程式評価(evaluating edge equations)などの、当業者に知られている技法を使用することによって、どのスクリーンピクセルロケーションがプリミティブによってカバーされるかを決定してもよい。ラスタ化ステージ36は、さらなる処理のために得られたソースピクセルをピクセル処理パイプライン38に与えてもよい。
【００４２】
ラスタ化ステージ36によって生成されたソースピクセルは、スクリーンピクセルロケーション、たとえば、宛先ピクセルに対応し、1つまたは複数の色属性に関連付けられる場合がある。特定のラスタ化されたプリミティブのために生成されたソースピクセルのすべては、ラスタ化されたプリミティブに関連付けられていると言える。プリミティブによってカバーされるべき、ラスタ化ステージ36によって決定されたピクセルは、概念的には、プリミティブの頂点を表すピクセル、プリミティブの辺を表すピクセル、およびプリミティブの内部を表すピクセルを含んでもよい。
【００４３】
ピクセル処理パイプライン38は、ラスタ化されたプリミティブに関連付けられたソースピクセルを受信し、ソースピクセルに対して1つまたは複数のピクセルごとの動作を実行するように構成される。ピクセル処理パイプライン38によって実行される場合があるピクセルごとの動作は、たとえば、アルファテスト、テクスチャマッピング、色計算、ピクセルシェーディング、ピクセルごとの照明、かぶり処理、ブレンディング、ピクセルオーナーシップテスト、ソースアルファテスト、ステンシルテスト、深度テスト、シザーテストおよび/またはスティップリング動作を含む。加えて、ピクセル処理パイプライン38は、1つまたは複数のピクセルごとの動作を実行するための1つまたは複数のピクセルシェーダプログラムを実行してもよい。ピクセル処理パイプライン38によって生成された得られたデータは、本明細書では宛先ピクセルデータと呼ばれ、フレームバッファ15に記憶される場合がある。宛先ピクセルデータは、処理されたソースピクセルと同じ表示ロケーションを有する、フレームバッファ15内の宛先ピクセルに関連付けられる場合がある。宛先ピクセルデータは、たとえば、色バッファ11内の色値、宛先アルファ値、深度バッファ13B内の深度値などのデータを含んでもよい。
【００４４】
フレームバッファ15は、GPU12のための宛先ピクセルを記憶する。各宛先ピクセルは、一意のスクリーンピクセルロケーションに関連付けられる場合がある。いくつかの例では、フレームバッファ15は、宛先ピクセルごとの色成分および宛先アルファ値を記憶してもよい。たとえば、フレームバッファ15はピクセルごとの赤(Red)、緑(Green)、青(Blue)、アルファ(Alpha)(RGBA)成分を記憶してもよく、"RGB"成分は色値に対応し、"A"成分は宛先アルファ値に対応する。フレームバッファ15およびシステムメモリ10は別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ15はシステムメモリ10の一部であってもよい。
【００４５】
上記で説明したように、GPU12は、フレームの1つまたは複数の部分を一度にレンダリングするように構成されてもよい。本開示のいくつかの例では、GPU12は、フレーム全体を一度にレンダリングするように構成されてもよい。この例では、GPU12は、フレーム全体がレンダリングされると、GMEM14内の深度バッファ13Aをリゾルブすることになる。本開示の他の例では、GPU12は、フレームの一部分のみを一度にレンダリングするように構成されてもよい。すなわち、GPU12は、フレームをビンまたはタイルと呼ばれる領域に分割し、ビンの各々を別個にレンダリングするように構成されてもよい。本開示の技法によれば、GPU12は、フレームをビンに分割し、ビンをレンダリングすることに関連付けられた任意の深度値をGMEM14内の深度バッファ13Aに記憶するように構成されてもよい。ビンのレンダリングが完了すると、GPU12は、深度バッファ13Aをシステムメモリ10内の深度バッファ13Bにリゾルブするように構成される。しかしながら、GPU12は、ビンをレンダリングすることに関連する任意の色値をシステムメモリ10内の色バッファ11に直接記憶するように構成される。
【００４６】
この点について、色バッファ11はフレーム内のすべてのビンに使用されることがあるので、色バッファ11は、フレームのすべての色値が色バッファ11に適合するようなメモリサイズで構成されてもよい。しかしながら、深度バッファ13Aは、ビンのすべての深度値が深度バッファ13Aに適合するようなサイズで構成されるだけでよい。深度バッファ13Bは、フレームのすべての深度値が深度バッファ13Bに適合するようなサイズで構成されてもよい。ビニングに関する追加の詳細について、以下で説明する。
【００４７】
図3は、ビニングレンダリングモード用のビンに分割されたフレームを示す概念図である。フレーム40は、ビン42などの複数のビンに分割されてもよい。典型的には、グラフィックスハードウェアは、データの少なくとも1つのビンを保持するのに十分なサイズである高速メモリ(たとえば、図2のGMEM14)を含む。本開示の例によれば、GMEM14は、深度バッファ13Aに記憶された1つのビン分の深度データを保持するためのサイズで構成されてもよい。
【００４８】
フレームの特定のビンのための単一のレンダリングパスの一部として、グラフィックス処理パイプライン30は、フレームの宛先ピクセルの特定のサブセット(たとえば、宛先ピクセルの特定のビン)に対して、プリミティブのバッチのすべてまたはサブセットをレンダリングしてもよい。第1のビンに対して第1のレンダリングパスを実行した後、グラフィックス処理パイプライン30は第2のビンに対して第2のレンダリングパスを実行してもよく、以下同様である。グラフィックス処理パイプライン30は、あらゆるビンに関連付けられたプリミティブがレンダリングされるまで、徐々にビンを横断してもよい。
【００４９】
図4は、本開示の技法による、ハイブリッドレンダリングモードで使用されるビンをより詳細に示す概念図である。ビン44、46、48および50は、複数のピクセル52を含むようにレンダリング/ラスタ化される。1つまたは複数のグラフィックスプリミティブは、各ビンにおいて可視であってもよい。たとえば、三角形A(Tri A)の部分は、ビン44とビン48の両方において可視である。三角形B(Tri B)の部分は、ビン44、ビン46、ビン48、およびビン50の各々において可視である。三角形C(Tri C)はビン46のみにおいて可視である。レンダリングパスの間、本開示の一例では、シーンはビンに分割され、ビン内にあるすべての三角形はレンダリングされる(これはソフトウェアビニングと呼ばれることがある)。本開示の別の例では、GPU12は、最終的なレンダリングされたシーンにおいてビン内のどの三角形が実際に可視であるかを決定するために、レンダリングする前に追加のステップを実行する(これはハードウェアビニングと呼ばれることがある)。たとえば、いくつかの三角形は1つまたは複数の他の三角形の後ろにあってもよく、最終的なレンダリングされたシーンにおいて可視ではなくなる。このようにして、可視ではない三角形は、そのビンについてレンダリングされる必要がない。
【００５０】
本開示の技法によれば、特定のレンダリングパスを実行する間に、その特定のレンダリングパスに関連付けられたビンについての深度データは、GMEM14内の深度バッファ13Aに記憶されてもよい。しかしながら、その特定のレンダリングパスに関連付けられたビンについてのピクセルデータは、システムメモリ10内の色バッファ11に記憶されてもよい。レンダリングパスを実行した後、GPU12は、GMEM14内の深度バッファ13Aの内容をシステムメモリ10内の深度バッファ13Bに転送(すなわち、リゾルブ)してもよい。GMEM14内の深度バッファ13Aの内容をシステムメモリ10内の深度バッファ13Bに転送した後、GPU12は、GMEM14内の深度バッファ13Aをデフォルト値に初期化し、異なるビンに対して後続のレンダリングパスを開始してもよい。
【００５１】
図5は、「ソフトウェア」ビニング技法とともに本開示のハイブリッドレンダリングモードを使用してシーンをレンダリングするための例示的なコマンド構造を示す概念図である。レベル1間接バッファ(IB1)60は、グラフィックス処理パイプライン30の様々なステップを実行するよう(すなわち、1つまたは複数のグラフィックス演算を実行するよう)GPU12に命令するための一連の実行コマンドを含む。IB1 60内の各実行コマンドは、本質的には、レンダリングパイプラインの様々な態様のためのコマンドを含む1つまたは複数のレベル2間接バッファ(IB2)へのポインタである。このようにして、グラフィックスレンダリングパイプラインを実行するための2つ以上のレベル構造が確立される。GPU12は、IB1 60内の各実行コマンドを順次1ステップずつ実行してもよく、IB1 60内の各実行コマンドは、IB2に記憶されたコマンドの特定のスタックを指す。IB1およびIB2は、GPU12に搭載のメモリであってもよく、またはシステムメモリ10などのGPU12の外部にあるメモリであってもよい。
【００５２】
IB1 60内のプリアンブル実行コマンドは、GPU12によって実行可能であるプリアンブルコマンドを含むプリアンブルIB2 62を指す。たとえば、プリアンブルIB2 62は、GPU12のその静的状態を初期化し、GPU12の初期レンダリング状態を設定するコマンドを含んでもよい。GPU12の静的状態は、特定のアプリケーションに基づいて変化しない設定を含む。一方、レンダリング状態は、特定のアプリケーション(たとえば、OpenGLアプリケーション対Direct Xアプリケーション)に基づいて変化する場合があるGPU設定を含む。プリアンブルIB2内のコマンドが完了した後、制御は次の実行コマンドを実行するためにIB1 60に戻る。
【００５３】
IB1 60内の次の実行コマンドは、利用されているレンダリングモードのためのレンダーパスを構成する。やはり、図5の例では、レンダリングモードはソフトウェアビニングを使用する本開示のハイブリッドレンダリングモードである。次に、IB1 60内のロードビン実行コマンドは、ロードIB2 66内のコマンドを指す。ソフトウェアビニングの場合、特定のビンのための深度データはGMEM14内の深度バッファ13Aにロードされる。加えて、特定のビンについての色データは、システムメモリ10内の色バッファ11にロードされる。次いで、制御はIB1 60に戻され、レンダリングビン実行コマンドはレンダリングIB2内のコマンドを指す。
【００５４】
レンダリングIB2 68は、一連の状態コマンドおよびロードされたビンにおいて三角形を描画するための描画コマンドからなる。各描画コマンドは、コマンドおよび/またはGPUハードウェアによって確立された(たとえば、ジオメトリ処理ステージ34、ラスタ化ステージ36、および/またはピクセル処理パイプライン38を含む)グラフィックス処理パイプライン30に従って三角形を描画するようGPU12に命令する。レンダリングIB2 68に示すように、描画コマンドの各々は、特定の三角形がビンにおいて実際に可視であるかどうかを決定するために可視性ストリームが使用されないことを示す。可視性ストリームは、「ハードウェア」ビニングを使用するビニングレンダリングモードで生成され、これについては図6を参照しながらより詳細に説明する。
【００５５】
レンダリングIB2 68内の状態コマンドは、GPU12によって実行されるグラフィックス処理パイプラインの挙動に影響を及ぼす。たとえば、状態コマンドは、色、ポリゴンモード(たとえば、立体または線ではなく点)、ブレンディング(オン/オフ)、深度テスト(オン/オフ)、テクスチャリング(オン/オフ)、カリング、クリッピング、および他の論理演算を変更する場合がある。レンダリングIB2 68に示すように、状態コマンドは三角形ごと(またはプリミティブごと)に発行される場合がある。すなわち、コマンド"State Tri A"は三角形Aを描画するときにGPU12の挙動に影響を及ぼす場合があり、一方、"State Tri B1"コマンドおよび"State Tri B2"コマンドは三角形Bを描画するときにGPU12の挙動に影響を及ぼす場合がある。"State Tri B1"コマンドおよび"State Tri B2"コマンドは、複数の状態コマンドが三角形ごとに実行される場合があることを示すにすぎない。レンダリングされているビン内のピクセルについての色値を更新するレンダリングIB2 68内の任意のレンダリングコマンドは、GPU12に、システムメモリ10内の色バッファ11におけるそのような色値を更新させる。レンダリングされているビン内のピクセルについての深度値を更新するレンダリングIB2 68内の任意のレンダリングコマンドは、GPU12に、GMEM14内の深度バッファ13Aを更新させる。
【００５６】
すべてのコマンドがレンダリングIB2 68において実行された後(たとえば、すべての三角形が描画された後)、制御はIB1 60に戻る。記憶ビン実行コマンドは、GMEM14内の深度バッファ13Aにおける深度値をシステムメモリ10内の深度バッファ13Bに記憶(すなわち、リゾルブ)するためのコマンドを含む記憶IB2 70へのポインタを含んでもよい。次いで、レンダーパス(たとえば、IB1 60に示すようなレンダーパスの構成からビンの記憶までの実行コマンド)が1つまたは複数のフレームについてビン72ごとに繰り返される。
【００５７】
図6は、「ハードウェア」ビニングを使用するビニングレンダリングモードを使用してシーンをレンダリングするための例示的なコマンド構造を示す概念図である。IB1 61内の実行コマンドは、「ビニング」パスに関するコマンドを除いて、図6のIB1 60の実行コマンドと類似している。「ビニング」パスは、ビン内の特定の三角形が最終的なレンダリングされたシーンにおいて実際に可視であるかどうかを示す可視性ストリームを生成するために使用される。たとえば、いくつかの三角形はシーン内の別の三角形の後ろにあってもよく、いくつかのシナリオでは可視ではなくなる(たとえば、前方の三角形が不透明であるときまたはブレンディングが使用されないとき)。ビン72をレンダリングする前に、IB1 61は、ビニングIB2 74内のコマンドを指すビニングパス実行コマンドを含んでもよい。ビニングIB2 74は、GPU12にグラフィックスパイプラインの簡略化されたバージョン(たとえば、レンダリングIB2 69の簡略化されたバージョン)を実行させるコマンドを含むが、三角形が最終的なレンダリングされたシーンにおいて可視であるかどうかを決定する深度テスト(Zテスト)に基づいてビン内の三角形ごとに可視性ストリームを更新するステップを追加する。ビニングIB2 74は、ビニングパスを実行するときに深度値を生成してもよく、GPU12にGMEM14内の深度バッファ13Aを更新させてもよい。
【００５８】
ビニングパスの目標は、現在のビンと交わる三角形を識別することである。したがって、三角形が特定のビンと交わるかどうかを識別するために、三角形の頂点の位置のみを決定する必要がある。ビニングパスは、頂点の位置に影響を及ぼす命令のみを含む簡略化された頂点シェーダを利用する。たとえば、三角形の頂点の位置に影響を及ぼさない色の命令、テクスチャ座標および他の命令は、ビニングパスに使用するための簡略化された頂点シェーダから除去されてもよい。ビニングパスはまた、各三角形のおおよその深度を決定するために、細かいラスタ化ではなく粗いラスタ化を使用する。粗いラスタ化は、細かいラスタ化よりも低い精度で(たとえば、より少ないビット数を使用して)深度値を計算する。三角形がビンにおいて可視であるかどうかを決定するためには、おおよその深度値のみが必要である。ピクセルシェーダはビニングパスにおいて使用されない。
【００５９】
次いで、ビニングパスは、三角形がビン内の他の三角形に対してビンにおいて可視であるかどうかを決定するために、粗い深度値に対して深度テストを利用する。この深度テストに基づいて、可視性ストリームが更新される。可視性ストリームは、レンダリングされたビン内の特定の三角形が可視であるかどうかを示すビットのストリングであってもよい(たとえば、1は三角形が可視であることを示し、0は三角形が可視ではないことを示す)。
【００６０】
レンダリングIB2 69内のコマンドは、図5のレンダリングIB 68のコマンドと類似しているが、可視性ストリーム用である。レンダリングIB2 69内の描画コマンド(たとえば、Draw Tri A、Draw Tri B、Draw Tri Cなど)は、特定の三角形を描画する必要があるかどうかを決定するために、ビニングパスによって生成された可視性ストリームを使用してもよい。たとえば、可視性ストリームによって可視ではないものとして示された三角形については描画がスキップされる場合がある。
【００６１】
図7は、本開示の一例による方法を示すフローチャートである。図7の方法は、GPU12の1つまたは複数のハードウェアユニットによって実行されてもよい。本開示の一例では、GPU12は、1つまたは複数のグラフィックス演算を使用してフレームの1つまたは複数の部分をレンダリングする(702)ように構成されてもよい。GPU12は、1つまたは複数のグラフィックス演算に従って色データをシステムメモリ10内の色バッファ11に直接書き込む(704)ようにさらに構成されてもよい。GPU12は、1つまたは複数のグラフィックス演算に従って深度データをGMEM14内の深度バッファ13Aに書き込み(706)、フレームの1つまたは複数の部分のレンダリングが完了したときに、GMEM14内の深度バッファ13Aをシステムメモリ10内の深度バッファ13Bにリゾルブする(708)ようにまたさらに構成されてもよい。本開示の一例では、システムメモリ10はDRAMであってもよく、GMEM14はGPU12と同じ集積回路上にあってもよい。
【００６２】
本開示の別の例では、GPU12は、フレームの1つまたは複数の部分に対してビニングパスを実行するように構成されてもよい。フレームの1つまたは複数の部分は、フレームのビンであってもよい。一例では、ビニングパスを実行するために、GPU12は、ビンにおいて可視であるプリミティブを識別するハードウェアビニングパスを実行するようにさらに構成される。この例では、GPU12は、ビンにおいて可視であると識別されたプリミティブに対して1つまたは複数のグラフィックス演算を使用してフレームのビンをレンダリングするようにさらに構成されてもよい。別の例では、GPU12は、ビン内にあるプリミティブを識別するソフトウェアビニングパスを実行し、ビン内にあると識別されたプリミティブに対して1つまたは複数のグラフィックス演算を使用してフレームのビンをレンダリングするように構成される。
【００６３】
1つまたは複数の例では、上記で説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装されてもよい。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読媒体を備える製造品上の1つまたは複数の命令またはコードとして記憶されてもよい。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含んでもよい。データ記憶媒体は、本開示で説明する技法を実装するための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスすることができる任意の利用可能な媒体であってもよい。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを搬送もしくは記憶するために使用することができ、コンピュータによってアクセスすることができる、任意の他の媒体を備えることができる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびブルーレイディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生するが、ディスク(disc)はレーザーを用いてデータを光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【００６４】
コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行されてもよい。加えて、いくつかの態様では、本明細書で説明する機能は、専用のハードウェアモジュールおよび/またはソフトウェアモジュール内で提供されてもよい。また、本技法は、1つまたは複数の回路または論理要素において完全に実装することができる。
【００６５】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装されてもよい。開示する技法を実行するように構成されるデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットについて本開示で説明したが、これらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされてもよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上記で説明したような1つもしくは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてもよい。
【００６６】
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
【符号の説明】
【００６７】
2  コンピューティングデバイス
4  ユーザ入力インターフェース
6  中央処理ユニット、CPU
7  GPUドライバ
8  メモリコントローラ
10  システムメモリ
11  色バッファ
12  グラフィックス処理ユニット、GPU
13A  深度バッファ
13B  深度バッファ
14  グラフィックスメモリ(GMEM)、GMEM
15  フレームバッファ
16  ディスプレイインターフェース
18  ディスプレイ
20  バス
22  バス
24  ソフトウェアアプリケーション
26  グラフィックスAPI
30  グラフィックス処理パイプライン
32  コマンドエンジン
34  ジオメトリ処理ステージ
36  ラスタ化ステージ
38  ピクセル処理パイプライン
40  フレーム
42  ビン
44  ビン
46  ビン
48  ビン
50  ビン
52  ピクセル
60  レベル1間接バッファ、IB1
62  プリアンブルIB2
66  ロードIB2
68  レンダリングIB2
69  レンダリングIB2
70  記憶IB2
72  ビン
74  ビニングIB2
【図１】
2018510405.tif 000003
【図２】
2018510405.tif 000004
【図３】
2018510405.tif 000005
【図４】
2018510405.tif 000006
【図５】
2018510405.tif 000007
【図６】
2018510405.tif 000008
【図７】
2018510405.tif 000009
【国際調査報告】
2018510405.tif 000010
2018510405.tif 000011