[0027]本開示は、グラフィックス処理システムにおけるメモリアクセス帯域幅をデスティネーションアルファ値に基づいて減少させるための技法について説明する。本開示の技法に従って個々のソース画素を処理するとき、デスティネーションアルファ検査モジュールは、ソース画素に関連付けられたデスティネーションアルファ値に基づいて、そのソース画素に対するテクスチャ値をバッファから取り出させるかどうか決定することができる。幾つかの例では、デスティネーションアルファ値は、ソース画素と同じ画面位置を有するデスティネーション画素の不透明度のレベルを示すことができる。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、本開示の技法は、従来のグラフィックスシステムにおいてテクスチャバッファに対して一般的に行われるソース読み取りの回数と比較して、テクスチャバッファに対して行われることを必要とするソース読み取りの回数を効果的に減少させることができる。このようにして、グラフィックス処理システム用のメモリアクセス帯域幅は減少され得る。
[0028]本開示の技法は、例えば逆の画家のアルゴリズムに従ってウィンドウ構成が前景から背景に(front-to-back)実行されるグラフィックス処理環境において特に有用であり得る。そのような環境では、デスティネーション画素が、1つ又は複数のそれまでに処理されたサーフェスにより、すでに不透明である場合、前景から背景へのレンダリングにより、その同じ画素位置に対して処理される何らかの後続のソース画素は、その位置に対してそれまでに処理された画素の背後に位置しており、従って見えないので、そのようなソース画素は、デスティネーション画素の全体的な外観に寄与しない。従って、その画素位置に対する何らかの後続のソース画素は、レンダリングされる画像の外観に影響を与えることなく、安全に破棄され得る。従って、前景から背景への構成環境において本開示の技法を利用することによって、本開示の技法は、幾つかの例では、結果として生じるレンダリング画像の品質を犠牲にすることなくグラフィックス処理システムに対するメモリアクセス帯域幅を減少させるために使用され得る。
[0029]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、特に、ビンレンダリングの状況、例えば、グラフィックス画像が複数の小さい部分(例えば、デスティネーション画素、画素のタイル、又はビンのサブセット)に細分され画像の各部分が別個のレンダリングパスとしてレンダリングされるレンダリング状況で有用であり得る。そのようなレンダリング状況では、特定のビンに対するデスティネーションアルファ値は、そのような値がデスティネーションアルファ検査モジュールによって必要とされるとき、ビンバッファを介してアクセス可能であってよい。これによって、フレームバッファからデスティネーションアルファ値にアクセスする必要性が緩和され、フレームバッファは、ビンバッファよりも低い利用可能帯域幅を持つメモリ内にあってよい。従って、デスティネーションアルファ値がビンバッファから取り出されるビニング(binning)状況において本開示の技法を実施することによって、デスティネーションアルファ値を取り出すために必要とされ得るオーバーヘッド帯域幅は、テクスチャバッファへのソース読み取りの回数を減少させることによって達成される帯域幅節減と比較して、相対的に最小であってよい。
[0030]Z−バッファ法は、同じ画素位置の他のソース画素の背後にあるソース画素を破棄することによって合成帯域幅を減少させるために使用され得るが、そのような技法は、画素が画素ごとのソースアルファ値を有するとき、サーフェスを適切にレンダリングしない。画素が画素ごとのソースアルファ値を有することによって、重複画素を半透明とすることが本質的に可能となる。しかしながら、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、全てのサーフェスが画素ごとのソースアルファ値を有するときですら合成帯域幅を減少させ、それによって、より堅牢な帯域幅減少機構を提供することができる。
[0031]本開示の選択的テクスチャ値取り出し法を実施するために使用されるデスティネーションアルファ検査モジュールは、様々な方法で実施され得る。例えば、デスティネーションアルファ検査モジュールは、専用固定機能ハードウェアブロックとして、シェーダユニット上で実行されるシェーダプログラムとして、デスティネーションアルファ検査を実行するように構成された構成可能なステンシル検査ブロックとして、及び/又はデスティネーションアルファ検査を実行するように構成された構成可能なz/ステンシル検査ブロックとして、実施され得る。これらの様々な構成は、本開示において後で更に詳細に説明される。
[0032]図1は、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施するために使用され得る例示的なコンピュータ機器2を示すブロック図である。コンピュータ機器2は、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォーム又はコンソール、例えばセルラー式電話又は衛星電話などのモバイル電話、陸線電話、インターネット電話、携帯ビデオゲーム機器又は携帯情報端末(PDA)などのハンドヘルド機器、個人用音楽プレーヤー、ビデオプレーヤー、表示器機器、テレビ、テレビのセットトップボックス、サーバ、中間ネットワーク機器、メインフレームコンピュータ又はグラフィカルデータを処理及び/又は表示する何らかの他のタイプの機器を備えることができる。
[0033]図1の例に示されるように、コンピュータ機器2は、ユーザ入力インターフェース4と、CPU6と、メモリコントローラ8と、システムメモリ10と、グラフィックス処理ユニット(GPU)12と、GPUキャッシュ14と、表示器インターフェース16と、表示器18と、バス20、22とを含む。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12、及び表示器インターフェース16は、バス20を使用して互いと通信することができる。メモリコントローラ8及びシステムメモリ10はまた、バス22を使用して互いと通信することができる。バス20、22は、第3世代バス(例えば、HyperTransportバス又はInfiniBandバス)、第2世代バス(例えば、Advanced Graphics Portバス、Peripheral Component Interconnect(PCI)Expressバス、又は Advanced eXentisibleインターフェース(AXI)バス)、又は別の種類のバス若しくは機器相互接続などの様々なバス構造のうち何らかであってよい。図1に示される異なる構成要素間のバス及び通信インターフェースの特定の構成は例にすぎず、同じ又は異なる構成要素を有するコンピュータ機器及び/又は他のグラフィックス処理システムの他の構成が、本開示の技法を実施するために使用されてよいことに留意されたい。
[0034]CPU6は、コンピュータ機器2の動作を制御する汎用プロセッサ又は専用プロセッサを備えることができる。ユーザは、コンピュータ機器2に入力を提供し、CPU6に1つ又は複数のソフトウェアアプリケーションを実行させることができる。CPU6上で実行されるソフトウェアアプリケーションとしては、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤーアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、又は別のプログラムがあり得る。ユーザは、ユーザ入力インターフェース4を介してコンピュータ機器2に結合されたキーボード、マウス、マイクロホン、タッチパッド、又は別の入力機器などの1つ又は複数の入力機器(図示せず)を介して、コンピュータ機器2に入力を提供することができる。
[0035]CPU6上で実行されるソフトウェアアプリケーションは、表示器18へのグラフィックスデータのレンダリングを発生させるようにCPU6に指示する1つ又は複数のグラフィックスレンダリング命令を含むことができる。幾つかの例では、ソフトウェア命令は、例えば、Open Graphics Library(OpenGL(登録商標))API、Open Graphics Library Embedded Systems(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、又は他の任意の公開されているもしくは所有権のある標準的なグラフィックスAPIなどのグラフィックスアプリケーションプログラミングインターフェース(API)に準拠してよい。グラフィックスレンダリング命令を処理するために、CPU6は、1つ又は複数のグラフィックスレンダリングコマンドをGPU12に発行して、GPU12に、グラフィックスデータのレンダリングの幾つか又は全てを実行させることができる。幾つかの例では、レンダリングされるグラフィックスデータとしては、グラフィックスプリミティブのリスト、例えば、点、線、三角形、四角形、トライアングルストリップなどがあり得る。
[0036]メモリコントローラ8は、システムメモリ10への及びこれからのデータの転送を促進する。例えば、メモリコントローラ8は、メモリ読み出しコマンド及びメモリ書き込みコマンドを受け取り、コンピュータ機器2内の構成要素にメモリサービスを提供するために、そのようなコマンドをメモリシステム10に対してサービス提供することができる。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信可能に結合される。メモリコントローラ8は、図1ではCPU6とシステムメモリ10の両方と別個の処理モジュールであるように示されているが、他の例では、メモリコントローラ8の機能の幾つか又は全ては、CPU6とシステムメモリ10の一方又は両方上で実施されてよい。
[0037]システムメモリ10は、CPU6が実行するためにアクセス可能なプログラムモジュール及び/又は命令及び/又はCPU6上で実行されるプログラムによって使用されるためのデータを格納することができる。例えば、システムメモリ10は、グラフィカルユーザインターフェース(GUI)を表示器18上に提示するためにCPU6によって使用されるウィンドウマネージャアプリケーションを格納することができる。更に、システムメモリ10は、ユーザアプリケーションと、そのアプリケーションに関連付けられたアプリケーションサーフェスデータとを格納することができる。システムメモリ10は、更に、コンピュータ機器2の他の構成要素によって使用される及び/又はこれによって生成されるための情報を格納することができる。例えば、システムメモリ10は、GPU12の機器メモリとして機能することができ、GPU12によって操作されるデータ及びGPU12によって実行される演算から生じるデータを格納することができる。例えば、システムメモリ10は、テクスチャバッファ、デプスバッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを格納することができる。システムメモリ10としては、例えば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読み取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体、又は光記憶媒体などの、1つ又は複数の揮発性又は不揮発性のメモリ又は記憶装置があり得る。
[0038]GPU12は、1つ又は複数のグラフィックスプリミティブを表示器18にレンダリングするためのグラフィックス演算を実行するように構成され得る。従って、CPU6上で実行されるソフトウェアアプリケーションのうち1つがグラフィックス処理を必要とするとき、CPU6は、表示器18にレンダリングするために、グラフィックスコマンド及びグラフィックスデータをGPU12に提供することができる。このグラフィックスデータとしては、例えば、描画コマンド、状態情報、プリミティブ情報、及びテクスチャ情報などがあり得る。GPU12は、幾つかの例では、CPU6よりも複雑なグラフィック関連演算の効率的な処理を提供する高度並列構造を有するように構築されてよい。例えば、GPU12は、複数の頂点又は画素に対して並列に動作するように構成された複数の処理要素を含むことができる。GPU12の高度並列性によって、幾つかの例では、GPU12が、表示器18上にグラフィックス画像(例えば、GUIならびに二次元(2D)グラフィックスシーン及び/又は三次元(3D)グラフィックスシーン)を、CPU6を使用してそのシーンを表示器18に直接描画するよりも速く描画することが可能になることができる。
[0039]本開示に従って、GPU12は、ソース画素に関連付けられたデスティネーションアルファ値に基づいて、そのソース画素に対するテクスチャ値を選択的に取り出すように構成され得る。例えば、GPU12は、第1のラスタライズされたプリミティブに関連付けられた第1の画素の処理に応答してデスティネーションアルファ値を生成し、デスティネーションアルファ値をビンバッファに格納し、第1の画素と異なる第2の画素の処理に応答してビンバッファからデスティネーションアルファ値を取り出し、デスティネーションアルファ値に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、その動作を実行すると決定したことに応答して第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行することができる。第2の画素は、第1のラスタライズされたプリミティブと異なる第2のラスタライズされたプリミティブに関連付けられてよい。更に、第2の画素は、第1の画素と同じ画素位置を有することができる(例えば、第1の画素と第2の画素は、スクリーン空間内に同じ位置座標を有することができる)。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、GPU12は、テクスチャ値に対して行われることを必要とするソース読み取りの回数を効果的に減少させ、それによって、グラフィックス画像をレンダリングするためにGPU12によって必要とされるメモリアクセス帯域幅を減少させることができる。
[0040]幾つかの例では、GPU12は、デスティネーションアルファ値を閾値の値と比較することによって、及びデスティネーションアルファ値を閾値の値と比較することによって生成される結果に基づいて動作を実行するかどうか決定することによって、第2の画素に対する1つ又は複数のテクスチャ値がテクスチャバッファから少なくとも一部は取り出されるべきかどうか決定することができる。幾つかの実装形態では、GPU12は、デスティネーションアルファ値が閾値の値以下であるかどうか決定することによって、デスティネーションアルファ値を閾値の値と少なくとも一部は比較することができる。そのような例では、GPU12は、デスティネーションアルファ値が閾値の値以下であると決定したことに応答して、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行し、デスティネーションアルファ値が閾値の値以下でないと決定したことに応答して、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させる動作を実行することができる。閾値の値は、例えば、その値又はそれより下方ではデスティネーション画素の背後に位置している画素が見えない及び/又は表示される必要がない、デスティネーション画素に対する不透明度の閾値レベルを示す値であってよい。幾つかの例では、閾値の値は、デスティネーション画素が完全に不透明である不透明度のレベル、例えばゼロという値を示してよい。閾値の値は、CPU6上で実行されるソフトウェアによって、及び/又はGPU12上のハードウェア若しくはシェーダ構成要素によって構成可能であってよい。
[0041]幾つかの実装形態では、デスティネーションアルファ値αDは、ゼロから1の範囲内にあってよく(即ち0≦αD≦1)、ゼロの値は、完全に不透明な画素(即ち、実質的に透明度を持たない画素100%不透明、0%透明)を示し、1の値は完全に透明なデスティネーション画素(即ち、実質的に不透明度を持たない画素100%透明、0%不透明)を示す。そのような例では、デスティネーションアルファ値がゼロから1に増加すると、不透明度のレベルが、ゼロのデスティネーションアルファ値における実質的に完全な不透明度から1のデスティネーションアルファ値における実質的にない不透明度に減少する。追加の実装形態では、ゼロのデスティネーションアルファ値は完全に透明な画素を示すことができ、1のデスティネーションアルファ値は完全に不透明な画素を示すことができる。デスティネーションアルファ値の他の例及び範囲が可能であり、本開示の範囲内に含まれる。
[0042]幾つかの例では、デスティネーションアルファ値は、グラフィックスパイプライン内の従来のアルファブレンディングユニット(alpha blending unit)によって生成されるデスティネーションアルファ値に対応することができる。更なる例では、デスティネーションアルファ値は、前景から背景へのアルファブレンディング関数に従ってブレンドするアルファブレンディングユニットによって生成されるデスティネーションアルファ値に対応することができる。追加の例では、本開示で更に詳細に説明されるように、デスティネーションアルファ値は、フレームバッファ及び/又はビンバッファに格納されるデスティネーションアルファ値に対応することができる。更なる例では、デスティネーションアルファ値は、上記の例のいずれかの組合せとすることができる。
[0043]追加の例では、GPUの画素処理パイプラインは、画素サンプルレベルで処理を実行することができる。そのような例では、各画素は複数の画素サンプルに関連付けられてよく、各画素サンプルは単一画素に関連付けられてよい。更に、各画素サンプルは、それぞれのデスティネーションアルファ値を有することができる。そのような例において、第2の画素に対する1つ又は複数のテクスチャ値がバッファから取り出されるべきかどうか決定するために、GPU12は、1つの画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下であるかどうか決定することができる。その画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下である場合、GPU12は、その画素に対するテクスチャ値を取り出させないことができる。そうではなく、その画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値よりも小さくも等しくもない場合、GPU12は、その画素に対するテクスチャ値を取り出させることができる。
[0044]幾つかの例では、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作は、第2の画素が画素処理パイプラインのテクスチャマッピングステージに達する前に画素処理パイプラインから第2の画素を破棄する動作とすることができる。そのような例では、GPU12は、デスティネーションアルファ値に基づいて画素処理パイプラインから第2の画素を破棄するかどうかを決定するように、及びデスティネーションアルファ値に基づいて第2の画素を破棄すると決定したことに応答して、第2の画素が画素処理パイプラインのテクスチャマッピングステージに達する前に画素処理パイプラインから第2の画素を破棄するように構成されてよい。そのような例では、GPU12はまた、デスティネーションアルファ値に基づいて第2の画素を破棄しないと決定したことに応答して、テクスチャマッピングステージを含む1つ又は複数の処理ステージのセット上に第2の画素を渡すように構成されてよい。
[0045]更なる例では、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作は、テクスチャマッピングを第2の画素に対して実行させない動作であってよい。例えば、この動作は、第2の画素に対するテクスチャ値を取り出させない制御信号をアサートする動作であってよい。この制御信号は、例えば、画素処理パイプライン内の別の処理ステージに画素を破棄させる制御信号であってよい。別の例として、制御信号は、画素処理パイプライン内で特定の画素に対してテクスチャマッピングステージを有効又は無効にすることができる。より多くの例では、バッファから第2の画素に対する1つ又は複数のテクスチャ値を取り出させない動作は、第2の画素に対するテクスチャマッピング無効属性動作を、テクスチャマッピングを画素に対して無効にさせる値に設定する動作であってよい。
[0046]本開示の選択的テクスチャ値取り出し法を実施するために使用されるデスティネーションアルファ検査モジュールは、様々な方法で実施され得る。例えば、デスティネーションアルファ検査モジュールは、専用固定機能ハードウェアブロックとして、シェーダユニット(shader unit)上で実行されるシェーダプログラムとして、デスティネーションアルファ検査を実行するように構成された構成可能なステンシル検査ブロックとして、及び/又はデスティネーションアルファ検査を実行するように構成された構成可能なz/ステンシル検査ブロックとして、実施され得る。これらの様々な構成は、本開示において後で更に詳細に説明される。
[0047]GPU12は、幾つかの例では、コンピュータ機器2のマザーボードに統合されてよい。他の例では、GPU12は、コンピュータ機器2のマザーボードのポートに設置されたグラフィックスカード上に存在してもよいし、さもなければコンピュータ機器2と相互動作するように構成された周辺機器内に組み込まれてもよい。GPU12は、1つ又は複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、又は他の等価な集積論理回路若しくはディスクリート論理回路などの1つ又は複数のプロセッサを含むことができる。
[0048]GPU12は、GPUキャッシュ14に直接結合され得る。従って、GPU12は、バス20を使用することなく、GPUキャッシュ14からデータを読み取り、かつGPUキャッシュ14にデータを書き込むことができる。言い換えると、GPU12は、オフチップメモリではなくローカル記憶装置を使用してデータをローカルで処理することができる。これによって、GPU12は、大量のバストラフィックを経験し得るGPU12がバス20を介してデータを読み書きする必要性をなくすことによって、より効率的に動作することができる。しかしながら、幾つかの例では、GPU12は、別個のメモリを含まず、代わりにバス20を介してシステムメモリ10を利用することがある。GPUキャッシュ14としては、例えば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体、又は光記憶媒体などの、1つ又は複数の揮発性又は不揮発性のメモリ又は記憶装置があり得る。
[0049]CPU6及び/又はGPU12は、システムメモリ10内部に割り振られたフレームバッファに、レンダリングされる画像データを格納することができる。表示器インターフェース16は、そのデータをフレームバッファから取り出し、レンダリングされる画像データによって表される画像を表示するように表示器18を構成することができる。幾つかの例では、表示器インターフェース16は、フレームバッファから取り出されたデジタル値を表示器18によって消費可能なアナログ信号に変換するように構成されるデジタルアナログ変換器(DAC)を含むことができる。他の例では、表示器インターフェース16は、処理のためにデジタル値を表示器18に直接渡すことができる。表示器18としては、モニタ、テレビ、投影機器、液晶表示器(LCD)、プラズマ表示器パネル、発光ダイオード(LED)アレイ、陰極線管(CRT)表示器、電子ペーパー、表面伝導型電子放出素子表示器(SED)、レーザテレビ表示器、ナノ結晶表示器、又は別の種類の表示装置があり得る。表示器18は、コンピュータ機器2の内部で統合され得る。例えば、表示器18はモバイル電話の画面であってよい。あるいは、表示器18は、有線通信リンク又はワイヤレス通信リンクを介してコンピュータ機器2に結合されたスタンドアロン機器であってよい。例えば、表示器18は、ケーブル又はワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタ又はフラットパネル表示器であってよい。
[0050]図2は、図1のCPU6、GPU12、及びシステムメモリ10を更に詳細に示すブロック図である。CPU6は、少なくとも1つのソフトウェアアプリケーション24と、グラフィックスAPI26と、GPUドライバ28とを含み、これらの各々は、CPU6上で実行される1つ又は複数のソフトウェアアプリケーション又はサービスであってよい。GPU12は、グラフィックス処理コマンドを実行するように一緒に動作する複数のグラフィックス処理段を含むグラフィックス処理パイプライン30を含む。図2に示されるように、グラフィックス処理パイプライン30は、コマンドエンジン32と、ジオメトリ処理段(geometry processing stage)34と、ラスタライゼーション段(rasterization stage)36と、画素処理パイプライン38とを含む。グラフィックス処理パイプライン30内の構成要素の各々は、固定関数構成要素として、プログラム可能な構成要素として(即ち、プログラム可能なシェーダユニット上で実行されるシェーダプログラムの一部として)、又は固定関数構成要素とプログラム可能な構成要素の組合せとして実施され得る。システムメモリ10は、レンダリングされる画像データを格納することができるフレームバッファ40と、複数のテクスチャ値を格納することができるテクスチャバッファ42とを含む。
[0051]本開示の例示的な一実施形態に従って、ソフトウェアアプリケーション24は、GUI内の1つ又は複数のアプリケーションウィンドウの位置及び外観を制御するウィンドウマネージャアプリケーションとすることができる。しかしながら、他の例では、ソフトウェアアプリケーション24は、GPU12の機能を利用する任意のアプリケーションであってよい。例えば、ソフトウェアアプリケーション24は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングアプリケーション又はアートアプリケーション用のコンピュータ支援設計プログラム、ビデオゲームアプリケーション、若しくは2Dグラフィックス又は3Dグラフィックスを使用する別の種類のソフトウェアアプリケーションであってよい。
[0052]ソフトウェアアプリケーション24は、グラフィカルユーザインターフェース(GUI)及び/又はグラフィックスシーンをレンダリングするようにGPU12に命令する1つ又は複数の描画命令を含むことができる。例えば、描画命令としては、GPU12によってレンダリングされる1つ又は複数のグラフィックスプリミティブのセットを定義する命令があり得る。幾つかの例では、描画命令は、GUIで使用される複数のウィンドウィングサーフェスの全て又は一部をまとめて定義することができる。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間又はワールド空間内に1つ又は複数のグラフィックスオブジェクトを含むグラフィックスシーンの全て又は一部をまとめて定義することができる。
[0053]ソフトウェアアプリケーション24は、グラフィックスAPI26を介してGPUドライバ28を起動し、表示可能なグラフィックス画像へと1つ又は複数のグラフィックスプリミティブをレンダリングするための1つ又は複数のコマンドをGPU12に発行することができる。例えば、ソフトウェアアプリケーション24は、グラフィックスAPI26を介してGPUドライバ28を起動し、プリミティブ定義をGPU12に提供することができる。幾つかの例では、このプリミティブ定義は、描画プリミティブ、例えば、三角形、四角形、トライアングルファン、トライアングルストリップなどのリストの形でGPU12に提供され得る。プリミティブ定義は、レンダリングされるプリミティブに関連付けられた1つ又は複数の頂点を指定する頂点規定を含むことができる。この頂点規定は、各頂点に対する位置座標と、幾つかの例では、例えば、色座標、法線ベクトル、及びテクスチャ座標などのその頂点に関連する他の属性とを含むことができる。プリミティブ定義はまた、プリミティブタイプ情報(例えば、三角形、四角形、トライアングルファン、トライアングルストリップなど)と、スケーリング情報と、回転情報などとを含むことができる。ソフトウェアアプリケーション24によってGPUドライバ28に発行される命令に基づいて、GPUドライバ28は、プリミティブをレンダリングするためにGPU12が実行する1つ又は複数の動作を指定する1つ又は複数のコマンドを構築することができる。GPU12がCPU6からコマンドを受け取ると、グラフィックス処理パイプライン30は、そのコマンドを復号し、そのコマンドで指定される動作を実行するようにグラフィックス処理パイプライン30内の1つ又は複数の処理要素を構成する。指定された動作を実行した後、グラフィックス処理パイプライン30は、レンダリングされるデータを、表示器機器に関連付けられたフレームバッファ40に出力する。
[0054]ソフトウェアアプリケーション24がウィンドウマネージャを含む例では、ソフトウェアアプリケーション24は、GPU12に個々のユーザアプリケーション用のオープンGUIウィンドウに関連付けられた1つ又は複数のサーフェスをレンダリングさせるように構成され得る。アプリケーションサーフェスの各々は、ユーザアプリケーションに対して実行されるオープンウィンドウに対応し、本明細書ではサーフェス色データと呼ばれ得る、そのウィンドウに対する色データの現在の状態を含むことができる。ウィンドウマネージャがアプリケーションサーフェスをレンダリングするために、ソフトウェアアプリケーション24は、サーフェス色データの全て又は一部をGPU12用の1つ又は複数のテクスチャバッファ例えばテクスチャバッファ42内へと配置させる1つ又は複数の命令を、GPUドライバ28及び/又はメモリコントローラ8に発行することができる。更に、ソフトウェアアプリケーション24は、色データを修正し及び/又は追加テクスチャを適用して、特定のウィンドウに対する特定の視覚効果、例えば、シャドウ、境界線、透明性、調光などを達成することができる。テクスチャバッファをセットアップした後、ソフトウェアアプリケーション24は、GPU12にサーフェスに対応する1つ又は複数のプリミティブをレンダリングさせ、1つ又は複数のテクスチャをプリミティブの幾つか又は全てに適用させる、1つ又は複数の命令を発行することができる。サーフェス色データは、システムメモリ10又はCPU6用のキャッシュに格納されてよい。テクスチャバッファは、幾つかの例では、システムメモリ10内にあってよい。従って、幾つかの例では、サーフェス色データと1つ又は複数のテクスチャバッファの両方は同じメモリサブシステムの一部であってよいが、他の例では、サーフェス色データと1つ又は複数のテクスチャバッファは異なるメモリサブシステム上に位置してよい。
[0055]本開示の例示的な実施形態に従って、ソフトウェアアプリケーション24は、GPU12内のアルファブレンディングブロックに1つ又は複数の前景から背景へのアルファブレンディング関数(alpha blending functions)のセットを使用してアルファブレンディングを実行させる1つ又は複数のコマンドを発行することができる。この前景から背景へのアルファブレンディング関数は、前景から背景に処理される画素をブレンドする(即ち、閲覧者に近い画素は閲覧者からより遠い画素の前に処理される)ように構成され、かつGPUで一般に使用される背景から前景へのアルファブレンディング関数とは異なるアルファブレンディング関数を指すことができる。前景から背景へのアルファブレンディング関数の例示的なセットは、次の関数を含むことができる。
Cdst[n] = (Adst[n-1]) x (Asrc[n] x Csrc[n]) + Cdst[n-1] (1)
Adst[n] = (1-Asrc[n]) x (Adst[n-1]) (2)
ここで、p[0]、p[1]、…、p[n−1]は、それまでに処理されたn個のソース画素、p[n]は現在処理されているソース画素(即ち現在のソース画素)、Cdst[n]は現在のソース画素の処理に応答して生成されるデスティネーション色値、Adst[n]は現在のソース画素の処理に応答して生成されるデスティネーションアルファ値、Cdst[n−1]はそれまでに処理されたソース画素(即ちp[n−1])の処理に応答して生成されるデスティネーション色値、Adst[n−1]はそれまでに処理されたソース画素(即ちp[n−1])の処理に応答して生成されるデスティネーションアルファ値、Csrc[n]は現在のソース画素に対応するソース色値、Asrc[n]は現在のソース画素に対応するソースアルファ値である。式(1)及び式(2)では、任意の値iに対して、Adst[i]=0は完全に不透明なデスティネーション画素を示すことができ、Adst[i]=1は完全に透明なデスティネーション画素を示すことができる。Adst[−1]及びCdst[−1]は、適切なデフォルト値(例えば、それぞれ1及び0の値)に初期化されてよい。幾つかの例では、Asrc[n]×Csrc[n]の乗算はシェーダ(例えば画素シェーダ)で実行され得るが、他の数学演算はアルファブレンディングモジュールの一部として実行される。
[0056]GPUドライバ28は、更に、1つ又は複数のシェーダプログラムをコンパイルするように、及びコンパイルされたシェーダプログラムをGPU12内に含まれる1つ又は複数のプログラム可能なシェーダユニット上にダウンロードするように構成され得る。シェーダプログラムは、例えば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg) シェーディング言語などの高水準シェーディング言語で記述されてよい。コンパイルされたシェーダプログラムは、GPU12内のプログラム可能なシェーダユニットの動作を制御する1つ又は複数の命令を含むことができる。例えば、シェーダプログラムは、頂点シェーダプログラム及び/又は画素シェーダプログラムを含むことができる。頂点シェーダプログラムは、プログラム可能な頂点シェーダユニット又は統合シェーダユニットの実行を制御し、1つ又は複数の頂点単位動作を指定する命令を含むことができる。画素シェーダプログラムは、プログラム可能な画素シェーダユニット又は統合シェーダユニットの実行を制御し、かつ画素ごとの1つ又は複数の動作を指定する命令を含む画素シェーダプログラムを含むことができる。本開示の幾つかの例示的な実施形態によれば、画素シェーダプログラムは、ソース画素に対する対応するデスティネーションアルファ値に基づいてテクスチャ値をソース画素に対して選択的に取り出させる命令も含むことができる。
[0057]グラフィックス処理パイプライン30は、CPU6からグラフィックスドライバ28を介して1つ又は複数のグラフィックス処理コマンドを受け取るように、及び表示可能なグラフィックス画像を生成するグラフィックス処理コマンドを実行するように構成され得る。上記で説明したように、グラフィックス処理パイプライン30は、グラフィックス処理コマンドを実行するように一緒に動作する複数のステージを含む。しかしながら、そのようなステージは必ずしも別個のハードウェアブロックで実施されるとは限らないことに留意されたい。例えば、ジオメトリ処理段34及び画素処理パイプライン38の一部分は、統合シェーダユニットの一部として実施されることがある。
[0058]コマンドエンジン32は、グラフィックス処理コマンドを受け取り、このグラフィックス処理コマンドを実行するための様々な動作を実行するようにグラフィックス処理パイプライン30内の残りの処理段を構成することができる。このグラフィックス処理コマンドは、例えば描画コマンドとグラフィックス状態コマンドとを含むことができる。描画コマンドは、及び1つ又は複数の頂点に対する位置座標を指定する頂点指定コマンドと、幾つかの例では、例えば、色座標、法線ベクトル、テクスチャ座標、及びフォグ座標などの頂点の各々に関連する他の属性値とを含むことができる。グラフィックス状態コマンドとしては、プリミティブタイプコマンド(primitive type commands)、変換コマンド(transformation commands)、ライティングコマンド(lighting commands)などがあり得る。プリミティブタイプコマンドは、レンダリングされるプリミティブのタイプ及び/又はプリミティブを形成するために頂点がどのように結合されるかを指定することができる。変換コマンドは、頂点に対して実行される変換の種類を指定することができる。ライティングコマンドは、グラフィックスシーン内の様々な光の種類、方向、及び/又は配置を指定することができる。コマンドエンジン32は、ジオメトリ処理段34に1つ又は複数の受け取ったコマンドに関連付けられた頂点及び/又はプリミティブに対するジオメトリ処理を実行させることができる。
[0059]ジオメトリ処理段34は、ラスタライゼーション段36のためのプリミティブデータを生成するために、1つ又は複数の頂点に対して頂点単位動作及び/又はプリミティブセットアップ動作を実行することができる。各頂点は、例えば、位置座標、色値、法線ベクトル、及びテクスチャ座標などの属性のセットに関連付けられ得る。ジオメトリ処理段34は、様々な頂点単位動作に従ってこれらの属性のうち1つ又は複数を修正する。例えば、ジオメトリ処理段34は、頂点位置座標に対して1つ又は複数の変換を実行して、修正された頂点位置座標を生成することができる。ジオメトリ処理段34は、例えば、モデリング変換(modeling transformation)、ビューイング変換(viewing transformation)、投影変換(projection transformation)、モデルビュー変換(ModelView transformation)、モデルビュー投影変換(ModelViewProjection transformation)、ビューポート変換(viewport transformation)、及び深度範囲スケーリング変換(depth range scaling transformation)のうち1つ又は複数を頂点位置座標に適用して、修正された頂点位置座標を生成することができる。幾つかの例では、頂点位置座標はモデル空間座標であってよく、修正された頂点位置座標はスクリーン空間座標であってよい。スクリーン空間座標は、モデル変換、ビューイング変換、投影変換、及びビューポート変換の適用の後、取得され得る。幾つかの例では、ジオメトリ処理段34は、頂点に対して頂点単位ライティング動作を実行して、頂点に対して修正された色座標を生成することもできる。ジオメトリ処理段34は、例えば、法線変換、法線正規化動作、ビューボリュームクリッピング、均一区分(homogenous division)、及び/又は隠面消去(backface culling)動作を含む他の動作も実行することができる。
[0060]ジオメトリ処理段34は、ラスタライズされるプリミティブ及びプリミティブを形成するために頂点がどのように結合されるかを指定するデータを定義する1つ又は複数の修正された頂点のセットを含むプリミティブデータを生成することができる。修正された頂点の各々は、例えば、修正された頂点位置座標と、その頂点に関連する処理された頂点属性値とを含むことができる。プリミティブデータは、グラフィックス処理パイプライン30の更なるステージによってラスタライズされるプリミティブに集合的に対応することができる。概念的に、各頂点は、プリミティブの2つの辺が合うプリミティブの角に対応することができる。ジオメトリ処理段34は、更なる処理のためにプリミティブデータをラスタライゼーション段36に提供することができる。
[0061]幾つかの例では、ジオメトリ処理段34の全て又は一部は、1つ又は複数のシェーダユニット上で実行される1つ又は複数のシェーダプログラムによって実施され得る。例えば、ジオメトリ処理段34は、そのような例では、頂点シェーダ、ジオメトリシェーダ、又はその任意の組合せによって実行され得る。他の例では、ジオメトリ処理段34は、固定関数ハードウェア処理パイプラインとして、又は固定関数ハードウェアと1つ又は複数のシェーダユニット上で実行される1つ又は複数のシェーダプログラムの組合せとして実施され得る。
[0062]ラスタライゼーション段36は、ラスタライズされるプリミティブを表すプリミティブデータをジオメトリ処理段34から受け取り、プリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソース画素を生成するように構成される。幾つかの例では、ラスタライゼーション段36は、ラスタライズされるプリミティブによってどの画面画素位置が覆われるか決定し、プリミティブによって覆われると決定される各画面画素位置に対してソース画素を生成することができる。ラスタライゼーション段36は、例えばエッジウォーキング法などの当業者に知られている技法を使用することによって、エッジ式を評価することなどによって、プリミティブによってどの画面画素位置が覆われるか決定することができる。ラスタライゼーション段36は、更なる処理のために、結果として生じるソース画素を画素処理パイプライン38に提供することができる。
[0063]ラスタライゼーション段36によって生成される各ソース画素は、画面画素位置、即ちデスティネーション画素に対応し、1つ又は複数の色属性に関連付けられ得る。特定のラスタライズされたプリミティブのために生成されるソース画素の全ては、ラスタライズされたプリミティブに関連付けられると言われることがある。プリミティブによって覆われるとラスタライゼーション段36によって決定される画素は、プリミティブの頂点を表す画素と、プリミティブの辺を表す画素と、プリミティブの内部を表す画素とを概念的に含むことができる。
[0064]画素処理パイプライン38は、ラスタライズされるプリミティブに関連付けられたソース画素を受け取り、そのソース画素に対して1つ又は複数の画素単位動作を実行するように構成される。本開示に従って、画素処理パイプライン38によって実行される画素単位動作としては、デスティネーションアルファ検査、テクスチャマッピング動作、及びデスティネーションアルファ値生成動作があり得る。デスティネーションアルファ値生成動作は、幾つかの例では、アルファブレンディング動作に対応することができる。幾つかの例では、個々のソース画素を処理するとき、画素処理パイプライン38は、テクスチャマッピング動作の前にデスティネーションアルファ検査を実行することができる。画素処理パイプライン38によって実行され得る他の画素単位動作としては、例えば、色計算、画素シェーディング、画素単位ライティング、フォグ処理、ブレンディング、画素所有権テキスト、ソースアルファ検査、ステンシル検査、デプステスト、シザーテスト(scissors test)、及び/又はスティップリング動作(stippling operations)がある。更に、画素処理パイプライン38は、1つ又は複数の画素シェーダプログラムを実行して、1つ又は複数の画素単位動作を実行することができる。画素処理パイプライン38によって生成される、結果として生じるデータは、本明細書では、デスティネーション画素データと呼ばれ、フレームバッファ40に格納され得る。デスティネーション画素データは、処理されたソース画素と同じ表示位置を有するフレームバッファ40内のデスティネーション画素と関連付けられ得る。デスティネーション画素データは、例えば、色値、デスティネーションアルファ値、デプス値などのデータを含むことができる。
[0065]本開示に従って、画素処理パイプライン38は、第1のラスタライズされたプリミティブに関連付けられた第1の画素の処理に応答してデスティネーションアルファ値を生成し、デスティネーションアルファ値をビンバッファに格納し、第1の画素と異なる第2の画素の処理に応答してビンバッファからデスティネーションアルファ値を取り出し、デスティネーションアルファ値に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、その動作を実行すると決定したことに応答して第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行することができる。第2の画素は、第1のラスタライズされたプリミティブと異なる第2のラスタライズされたプリミティブに関連付けられてよい。更に、第2の画素は、第1の画素と同じスクリーン画素位置を有することができる(例えば、第1の画素及び第2の画素は、スクリーン空間内に同じ位置座標を有することができる)。デスティネーションアルファ値は、第1のソース画素及び第2のソース画素と同じスクリーン画素位置を有するデスティネーション画素と関連付けられてよい。例えば、ソース画素に対するデスティネーションアルファ値は、ソース画素と同じ画面位置を有するデスティネーション画素の不透明度を示す値であってよい。デスティネーション画素の不透明度は、画素位置に関連付けられた1つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定され得る。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、画素処理パイプライン38は、テクスチャ値に対して行われることを必要とするソース読み取りの回数を効果的に減少させ、それによって、グラフィックス処理システムに対して必要とされるメモリアクセス帯域幅を減少させることができる。
[0066]幾つかの例では、各ソース画素に対して、画素処理パイプライン38は、デスティネーションアルファ検査を実行し、テストの結果に基づいてソース画素に対するテクスチャ値を取り出す又は取り出さないのいずれかとすることができる。デスティネーションアルファ検査は、例えば、ソース画素に対応するデスティネーションアルファ値と閾値との比較を含むことができる。そのような例では、閾値は、ソフトウェアアプリケーション24、GPUドライバ28、及びGPU12内の1つ又は複数の構成要素のうち1つ又は複数によって構成可能であり得る。閾値の値は、例えば、その値又はそれより下方ではデスティネーション画素の背後に位置している画素が見えない及び/又は表示される必要がない、デスティネーション画素に対する不透明度の閾値レベルを示す値であってよい。
[0067]幾つかの例では、画素処理パイプライン38は、デスティネーションアルファ検査の結果に基づいてパイプラインのステージテクスチャマッピングの前に画素処理パイプライン38内のソース画素を選択的に破棄することによって、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施することができる。更なる例では、画素処理パイプライン38は、デスティネーションアルファ検査の結果に基づいてソース画素に対するテクスチャマッピングを選択的に有効又は無効にすることによって、本開示の技法を実施することができる。例えば、画素処理パイプライン38は、デスティネーションアルファ検査の結果に基づいてテクスチャマッピングを無効にする制御信号を選択的にアサートすることができ、又はデスティネーションアルファ検査の結果に基づいてテクスチャマッピング無効にする画素属性を選択的に設定することができる。
[0068]フレームバッファ40は、GPU12に対するデスティネーション画素を格納する。各デスティネーション画素は、一意の画面画素位置に関連付けられ得る。幾つかの例では、フレームバッファ40は、各デスティネーション画素に対して、色の成分と、デスティネーションアルファ値とを格納することができる。例えば、フレームバッファ40は、各画素に対して赤、緑、青、及びアルファ(RGBA)の各成分を格納することができ、「RGB」の各成分は色値に相当し、「A」成分はデスティネーションアルファ値に相当する。幾つかの例では、フレームバッファ40に格納されるデスティネーション画素のサブセット(例えば、全てよりも少ない)は、GPU12に対してシステムメモリ10よりも高い利用可能な帯域幅を有するメモリ例えばオンチップビンバッファに格納されてよい。
[0069]テクスチャバッファ42は、GPU12による取り出しのために、1つ又は複数のテクスチャ値を格納する。このテクスチャ値は、幾つかの例では、アプリケーションサーフェスにおいて定義される色値に対応することができる。GPU12は、システムメモリ10にアクセスして、テクスチャ値をテクスチャバッファ42から取り出すことができる。幾つかの例では、テクスチャバッファ42内の内容のサブセットは、GPU12によってアクセス可能なテクスチャキャッシュ、例えばGPUキャッシュ14にキャッシュされ得る。
[0070]システムメモリ10は、図2の例示的なグラフィックス処理システムではフレームバッファ40とテクスチャバッファ42の両方を含むように示されているが、他の例では、フレームバッファ40とテクスチャバッファ42の一方又は両方は、CPU6とGPU12の一方又は両方と同じ又は異なるチップ上にある他のメモリサブシステム内で実施されてよい。更に、フレームバッファ40及びテクスチャバッファ42は、同じメモリサブシステムの一部として実施される必要はない。
[0071]幾つかの例では、グラフィックス処理パイプライン30は、画素粒度ではなく画素サンプル粒度でデータを処理することができる。そのような例では、ラスタライゼーションブロック36は、各ソース画素に対する複数のソース画素サンプルを生成することができ、画素処理パイプライン38は、ソース画素サンプル上でサンプル単位動作を実行して、複数のデスティネーション画素サンプルを生成することができ、このデスティネーション画素サンプルはフレームバッファ40に格納される。ソース画素サンプル及びデスティネーション画素サンプルはそれぞれ、ソース画素及びデスティネーション画素に関する上記で説明したデータが画素全体ではなく画素サンプルに適用されることを除いて、そのようなデータと実質的に類似したデータを含むことができる。表示器インターフェース16は、デスティネーション画素サンプルデータを、表示器上に表示できる画素データに変換することができる。幾つかの例では、各画素に対して4つのサンプルが生成されてよく、各サンプルは単一の画素に関連付けられてよい。しかしながら、他の例では、各画素に対して任意の数のサンプルが生成されてよい。
[0072]追加の例では、グラフィックス処理パイプライン30は、ビンレンダリング法に従ってグラフィックス画像をレンダリングすることができ、ビンレンダリング法は、また、本明細書ではタイルレンダリング法と呼ばれ得る。ビンレンダリング法に従ってレンダリングするとき、グラフィックス処理パイプライン30は、プリミティブのバッチ(即ち複数のプリミティブ)を受け取り、結果として生じるグラフィックス画像へとレンダリングすることができる。プリミティブのバッチをレンダリングするために、結果として生じるグラフィックス画像は、複数の小さい部分(例えば、画素のタイル即ちビン)に細分されてよく、グラフィックス処理パイプライン30は、グラフィックス画像の各部分を別個のレンダリングパスとしてレンダリングすることができる。グラフィックス画像の特定の部分に対する単一のレンダリングパスの一部として、グラフィックス処理パイプライン30は、グラフィックス画像のデスティネーション画素の特定のサブセット(例えば、デスティネーション画素の特定のタイル)に対してプリミティブのバッチの全て又はサブセットをレンダリングすることができる。特定のレンダリングパスに対するデスティネーション画素の特定のサブセットは、本明細書ではレンダリングパスに対するデスティネーション画素範囲と呼ばれることがある。第1のデスティネーション画素範囲に対して第1のレンダリングパスを実行した後、グラフィックス処理パイプライン30は、第1のデスティネーション画素範囲と異なる第2のデスティネーション画素範囲に対して第2のレンダリングパスを実行することができる。グラフィックス処理パイプライン40は、あらゆるタイル即ちビンに関連付けられるプリミティブがレンダリングされるまで、タイル即ちビンを逐次的に横断することができる。
[0073]特定のレンダリングパスを実行する間、その特定のレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データは、ビンバッファに格納され得る。レンダリングパスを実行した後、グラフィックス処理パイプライン30は、ビンバッファの内容をフレームバッファ40に転送することができる。場合によっては、グラフィックス処理パイプライン30は、フレームバッファ40内のデータの一部分を、ビンバッファに格納されるデータで上書きすることができる。他の場合には、グラフィックス処理パイプライン30は、フレームバッファ40内のデータをビンバッファに格納されるデータで合成又は結合することができる。ビンバッファの内容をフレームバッファ40に転送した後、グラフィックス処理パイプライン30は、ビンバッファをデフォルト値に初期化して、異なるデスティネーション画素範囲に対して後続のレンダリングパスを開始することができる。
[0074]幾つかの実装形態では、プリミティブのバッチとして受け取られた様々なプリミティブを適切なビンに並べ替えるために、ビニングパスが別個のレンダリングパスの前に実行され得る。例えば、グラフィックス処理パイプライン30は、どのタイル(即ちビン)に各プリミティブが寄与又は重複するか決定し、その決定に基づいてプリミティブを1つ又は複数のタイル固有ビンに割り当てることができる。次いで、レンダリングパスが特定のビンに対して実行されるとき、グラフィックス処理パイプライン30は、そのビンに関連付けられた特定のデスティネーション画素範囲に対して、そのビンに割り当てられたプリミティブの各々をレンダリングすることができる。本明細書では、グラフィックス処理パイプライン30はビニングパスを実行するように説明されているが、他の例では、ビニングパスは、GPU12内の別の構成要素によって、CPU6内のソフトウェアモジュール(例えば、GPUドライバ28)によって、又はそれらの任意の組合せによって実行されてよい。
[0075]追加の実装形態では、ビニングパスは、必ずしも実行されるとは限らないことがある。代わりに、GPUドライバ28及び/又はグラフィックス処理パイプライン30は、プリミティブの受け取られたバッチ内のプリミティブの全てに対して、レンダリングパスの各々を実行することができる。各レンダリングパスに対して、GPUドライバ28及び/又はグラフィックス処理パイプライン30は、所与のレンダリングパスに関連付けられたデスティネーション画素がそのレンダリングパス中に更新されるように、様々なシザー設定及び/又は様々なメモリアドレスオフセットを使用することができる。
[0076]幾つかの例では、グラフィックス処理パイプライン30は、第1の通信インターフェースを介してビンバッファにアクセスし、第2の通信インターフェースを介してテクスチャバッファ42にアクセスし、第3の通信インターフェースを介してフレームバッファ40にアクセスすることができる。そのような例では、第1の通信インターフェースは、幾つかの例では、第2の通信インターフェース及び/又は第3の通信インターフェースよりも高い帯域幅を有することができる。場合によっては、第2の通信インターフェースは、例えばフレームバッファ40及びテクスチャバッファ42が両方ともシステムメモリ10で実施されるとき、第3の通信インターフェースと同じ通信インターフェースであってよい。第2の通信インターフェース及び第3の通信インターフェースは、幾つかの例では、図1のバス20及び/又は22に相当することができる。ビンバッファがオンチップビンバッファであるとき、第1の通信インターフェースは、GPU12の内部にある通信インターフェースであってよい。
[0077]本明細書で用いられる場合、帯域幅は、2つの構成要素例えばメモリ構成要素とGPU12の間で通信インターフェースがデータを転送することが可能な速度を指すことができる。帯域幅の単位は、幾つかの例では、単位時間あたりのビット数、例えばギガビット毎秒(Gb/s)として与えられ得る。複数のビットのバス幅を有するバスが通信インターフェースの一部として使用されるとき、帯域幅は、幾つかの例では、バスの幅に、単一ビット線に沿ってデータが転送される速度が乗算された積に等しくてよい。例えば、バスが16ビット幅であり、バスの各ビット線が2Gb/sの速度でデータを転送することが可能な場合、バスの帯域幅は32Gb/sに等しい。複数のバスが2つの構成要素間の通信インターフェースを形成する場合、通信インターフェースの帯域幅は、複数のバスの各々の帯域幅の関数、例えば個々のバスの各々の最小帯域幅とすることができる。
[0078]ビンバッファにアクセスするために使用される通信インターフェースに対するより高い帯域幅を達成するために、ビンバッファは、幾つかの例では、GPU12と同じマイクロチップ上で実施されてよい。そのようなビンバッファは、オンチップビンバッファと呼ばれることがある。ビンバッファがGPU12と同じチップ上で実施されるとき、GPU12は、必ずしもシステムバス及びメモリバス(例えば図1のバス20、22)を介してビンバッファにアクセスする必要があるとは限らず、むしろ、GPU12と同じチップ上で実施される内部通信インターフェース(例えばバス)を介してビンバッファにアクセスすることができる。そのようなインターフェースはオンチップであるので、そのようなインターフェースは、システムバス及びメモリバスよりも高い帯域幅で動作することが可能となることができる。上記で説明した技法は、フレームバッファ40及び/又はテクスチャバッファ42にアクセスするために使用される通信インターフェースの帯域幅を超えるビンバッファ用の通信インターフェースを達成する1つの方法であるが、他の技法が可能であり、本開示の範囲に含まれる。
[0079]ビンバッファの容量は、幾つかの例では、特定の種類のコンピュータ機器例えばモバイル機器上で利用可能な面積によって制限されることがある。その上、ビンバッファがGPU12と同じチップ上で実施されるとき、同じチップ上でビンバッファを実施するために利用可能な面積の量は、チップ上で実施される他の機能により制限されることがある。幾つかの例では、ビンバッファは、ビンバッファの容量を更に制限するフレームバッファ40及び/又はテクスチャバッファ42のうち1つ又は複数のビット密度よりも低いビット密度を有することができる。これら及び/又は他の要因のために、ビンバッファの容量は、場合によっては、フレームバッファ40とテクスチャバッファ42の一方又は両方の大きさよりも小さいことがある。従って、ビンバッファの容量は、そのような例では、グラフィックス画像に関連付けられた複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さいことがある。メモリ構成要素の容量とは、メモリ構成要素に格納されることが可能なデータの最大量(例えばビットの最大数)を指すことができる。フレームバッファ40及びテクスチャバッファ42の大きさはそれぞれ、フレームバッファ40及びテクスチャバッファ42に割り振られたメモリ範囲に格納されるデータの量(例えばビットの数)を指すことができる。ビット密度は、特定の量の面積に格納できるビットの数を指すことができる。
[0080]上記で説明したように、ビンレンダリング法に従ってレンダリングするとき、グラフィックス処理パイプライン30は、グラフィックス画像の各部分を別個のレンダリングパスとしてレンダリングすることができる。例えば、グラフィックス画像の特定の部分に対する単一のレンダリングパスの一部として、グラフィックス処理パイプライン30は、特定のデスティネーション画素範囲(例えば、グラフィックス画像のデスティネーション画素の特定のサブセット)に対してプリミティブのバッチの全て又はサブセットをレンダリングすることができる。ビンバッファの容量は、デスティネーション画素範囲の大きさ以上であるように構成され得る。従って、単一のレンダリングパス中に、レンダリングパス用のデスティネーション画素範囲に関連付けられた全てのデスティネーション画素データ(例えばデスティネーションアルファ値及びデスティネーション色値)は、必ずしもフレームバッファ40にアクセスする必要があるとは限らずに、ビンバッファ内で利用可能であってよい。従って、単一のレンダリングパス中に、グラフィックス処理パイプライン30は、相対的に低い帯域幅通信インターフェースを介してフレームバッファ40からデスティネーションアルファ値を読み出さなければならないのではなく、相対的に高い帯域幅通信インターフェースを介してビンバッファからそのようなデータを読み出すことが可能であることができる。
[0081]ビンレンダリングを実行しない幾つかのグラフィックスシステムは、ハードウェアベースのオンチップキャッシュを使用することによって、フレームバッファの一部をキャッシュすることが可能であることがあるが、そのようなキャッシュは、所与の画素に対するデスティネーションアルファ値は必要とされるときに利用可能であることを保証しない。この理由は、複数のデスティネーション画素はハードウェアベースのキャッシュ内の同じアドレスにマッピングされることがあるからである。この場合、ビンレンダリングが使用されない場合、ハードウェアベースのキャッシュの現在の状態は、必ずしも現在処理されているプリミティブに関連付けられたデスティネーション画素値を含むとは限らず、むしろ、画像グラフィックスの他のエリア内のそれまでに処理されたプリミティブに関連付けられたデスティネーション画素値を含むことがある。
[0082]複数のデスティネーション画素が同じキャッシュ位置にマッピングされるハードウェアベースのキャッシュとは対照的に、所与のレンダリングパスに対するビンバッファに格納されるデスティネーション画素は、幾つかの例では、一意にアドレス指定可能であってよい。言い換えれば、所与のレンダリングパスに対して、1対1のマッピングが、ビンバッファ内のアドレス指定可能な記憶スロットとそのレンダリングパスに使用されるデスティネーション画素の間で定義され得る。従って、ビンレンダリング法に従ってレンダリングするとき、所与のビニングパスに対する全てのデスティネーションアルファ値は、幾つかの例では、相対的に低い帯域幅通信インターフェースを介してビンバッファから入手可能とすることができる。その上、ハードウェアベースのキャッシュシステムとは異なり、ビンバッファ内で一意にアドレス指定可能なデータのために、キャッシュミスは発生せず、それによって、キャッシュミスの場合に帯域幅の高価な(bandwidth-expensive)フレームバッファアクセスを用いる必要性を緩和する。
[0083]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、特定のビンに対するデスティネーションアルファ値が、デスティネーションアルファ検査モジュールによって、必要とされるときにビンバッファにすでにロードされていることがあるので、ビンレンダリングの状況で特に有用なことがある。これによって、そのような値にフレームバッファ40からアクセスする必要性が緩和されることがあり、フレームバッファ40は、より低い利用可能な帯域幅を持つメモリ、例えばシステムメモリ10にあってよい。従って、ビニング状況において、デスティネーションアルファ値を取り出すために必要とされ得るオーバーヘッド帯域幅は、本開示の技法に従ってテクスチャバッファへのソース読み取りの回数を減少させることによって達成される帯域幅節減と比較して、相対的に最小であってよい。
[0084]更なる例では、GPUドライバ28は、画素処理パイプライン38によって実施される、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を選択的に有効及び無効にすることができる。幾つかの例では、ソフトウェアアプリケーション24は、本開示の技法によりGPU12に対するデスティネーションアルファ値に基づく選択的テクスチャ値取り出しモードを有効にするようにGPUドライバ28に命令するコマンドを、GPUドライバ28に発行することができる。追加の例では、GPUドライバ28は、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を使用しても結果として生じる画像の品質に干渉しない状況を検出することができ、例えば、GPUドライバ28は、前景から背景へのレンダリングスキームがいつソフトウェアアプリケーション24によって実施されたか検出することができる。そのような検出に応答して、GPUドライバ28は、本開示の技法によりGPU12に対するデスティネーションアルファ値に基づく選択的テクスチャ値取り出しモードを有効にすることができる。
[0085]本明細書で用いられる場合、ソース画素は、ラスタライゼーションブロック36によって生成され、かつフレームバッファ40又は対応するビンバッファのいずれかにまだ格納されていない画素データを指すことができる。フレームバッファ40又は対応するビンバッファに書き込まれた画素データは、デスティネーション画素と呼ばれることがある。デスティネーション画素は、異なるプリミティブに関連付けられた複数のソース画素から合成された画素データを含むことができる。従って、画素処理パイプライン38はソース画素上で動作し、ソース画素の処理に応答して、フレームバッファ40又は対応するビンバッファ内のデスティネーション画素データを更新する。全てのソース画素が必ずしもデスティネーション画素になるとは限らないことに留意されたい。例えば、それまでに処理された画素によって埋められた何らかのその後で処理されるソース画素は、必ずしもデスティネーション画素になるとは限らないことがある。むしろ、z−テスト及び/又はデスティネーションアルファ検査は、そのような埋められた画素を破棄することができる。場合によっては、「フラグメント」という用語は「ソース画素」を指すために当業者によって使用されることがあり、「画素」という用語は「デスティネーション画素」を指すために当業者によって使用されることがある。本開示で説明される画素のうちいずれかがソース画素であるか又はデスティネーション画素であるかは、明示的に識別されるか、又は画素が説明される状況から決定されることを可能にするべきかのいずれかである。
[0086]特定の画素位置に対するデスティネーションアルファ値は、特定の画面位置に対応するソース画素が処理を完了するたびに、逐次的に更新され得る。更新されたデスティネーションアルファ値は、同じ画素位置に対する前のデスティネーションアルファ値の関数とすることができる。従って、デスティネーションアルファ値は、所与の時点まで処理を完了したデスティネーション画素に対応する全てのソース画素に基づいて所与の時点でのデスティネーション画素の不透明度を示す「合成」アルファ値を表すことができる。
[0087]図3は、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施するために使用され得る例示的な画素処理パイプライン50を示すブロック図である。画素処理パイプライン50は、ソース画素に対応するデスティネーションアルファ値に基づいてテクスチャマッピング段の前にソース画素を選択的に破棄するように構成され得る。画素処理パイプライン50は、デスティネーションアルファ検査モジュール52と、テクスチャマッピングモジュール54と、デスティネーションアルファ決定モジュール56と、テクスチャバッファ58と、デスティネーションアルファバッファ60とを含む。デスティネーションアルファ検査モジュール52、テクスチャマッピングモジュール54、及びデスティネーションアルファ決定モジュール56は、1つ又は複数の固定関数/機能処理段、1つ又は複数のプログラム可能なステージ、又はそれらの任意の組合せとして、1つ又は複数のプロセッサ上で実施され得る。テクスチャバッファ58及びデスティネーションアルファバッファ60は各々、1つ又は複数のメモリストレージユニットとして実施され得る。
[0088]デスティネーションアルファ検査モジュール52は、前の処理段からソース画素を受け取り、受け取った画素に対してデスティネーションアルファ検査を実行し、デスティネーションアルファ検査の結果に基づいてソース画素を選択的に破棄するように構成される。例えば、デスティネーションアルファ検査モジュール52は、ソース画素に対応するデスティネーションアルファ値に基づいて、ソース画素を破棄するのか又は更なる処理のためにソース画素を1つ又は複数の後続処理段のセットに渡すのか決定することができる。このようにして、デスティネーションアルファ検査モジュール52は、デスティネーション画素に対応する1つ又は複数のそれまでに処理されたソース画素により、受け取ったソース画素に対応するデスティネーション画素がすでに不透明であるかどうか効果的に決定することができる。
[0089]幾つかの例では、前の処理段は、ラスタライゼーションブロック36であることがある。更なる例では、前の処理段は、前の画素処理パイプライン段、例えば、画素所有権テストブロック、シザーテストブロック(scissors test block)、ソースアルファ検査ブロック、画素シェーダ段、又はグラフィックスプロセッサで見られる他の任意の画素処理段であってよい。1つ又は複数の後続処理段のセットは、テクスチャマッピングモジュール54を含むことができる。幾つかの例では、デスティネーションアルファ検査モジュール52は、デスティネーションアルファ検査モジュール52とテクスチャマッピングモジュール54の間に介在する1つ又は複数の処理段にソース画素を渡すことによって、ソース画素をテクスチャマッピングモジュール54に渡すことができる。追加の例では、デスティネーションアルファ検査モジュール52は、ソース画素をテクスチャマッピングモジュール54に直接渡すことができる。1つ又は複数の後続処理段のセットに渡された画素は、本明細書では、渡された画素と呼ばれることがある。
[0090]本開示に従って、デスティネーションアルファ検査モジュール52は、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行するかどうかを決定するように、及びその動作を実行すると決定したことに応答して、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行するように構成され得る。例えば、ソース画素を受け取るとき、デスティネーションアルファ検査モジュール52は、ソース画素に対応するデスティネーションアルファ値をデスティネーションアルファバッファ60から取り出すことができ、例えば、デスティネーションアルファ検査モジュール52は、ソース画素とともに含まれる位置座標を使用してソース画素に対する画面画素位置を決定し、位置同じ画面画素に関連付けられたデスティネーションアルファ値を取り出すことができる。取り出されたデスティネーションアルファ値に基づいて、デスティネーションアルファ検査モジュール52は、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行するかどうか決定し、そのように決定された場合、その動作を実行することができる。
[0091]図3に示される例示的な画素処理パイプラインでは、デスティネーションアルファ検査モジュール52によって実行される、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作は、テクスチャマッピングモジュール54によって表されるテクスチャマッピング段の前に画素処理パイプライン50からソース画素を破棄することを含む。しかしながら、他の例示的な実施形態では、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させないために、他の動作がデスティネーションアルファ検査モジュール52によって実行されてよい。例えば、デスティネーションアルファ検査モジュール52は、幾つかの例では、画素処理パイプライン50内の別の処理段に画素を破棄させる制御信号をアサートする(アクティブ状態にする)ことができる。追加の例では、デスティネーションアルファ検査モジュール52は、画素処理パイプライン50内の特定の画素に対するテクスチャマッピングモジュール54を有効又は無効にする制御する信号をアサートすることができる。更なる例では、デスティネーションアルファ検査モジュール52は、ソース画素に対する属性を無効にするテクスチャマッピングを、テクスチャマッピングをソース画素に対して無効にする値に設定し、画素を画素処理パイプライン50内の1つ又は複数の後続処理段に渡すことができる。そのような例では、テクスチャマッピングモジュール54は、設定されたテクスチャマッピング無効属性を有する画素に対するテクスチャマッピングを無効にするように構成され得る。
[0092]幾つかの例では、デスティネーションアルファ検査モジュール52は、取り出されたデスティネーションアルファ値を閾値の値と比較することによって、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行するかどうか決定することができる。比較の結果に基づいて、デスティネーションアルファ検査モジュール52は、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行するかどうか決定することができる。例えば、デスティネーションアルファ検査モジュール52は、デスティネーションアルファ値が閾値以下であるかどうか決定することができる。デスティネーションアルファ値が閾値以下であると決定したことに応答して、デスティネーションアルファ検査モジュール52は、ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行する、例えば、段54テクスチャマッピングの前にソース画素を破棄することができる。一方、デスティネーションアルファ値が閾値よりも小さくも等しくもないと決定したことに応答して、デスティネーションアルファ検査モジュール52は、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させる動作を実行することができる。閾値の値は、例えば、その値又はそれより下方ではデスティネーション画素の背後に位置している画素が見えない及び/又は表示される必要がない、デスティネーション画素に対する不透明度の閾値レベルを示す値であってよい。
[0093]閾値の値は、幾つかの例では、デスティネーションアルファモジュール52に組み込まれた固定値であってよい。更なる例では、閾値の値は、グラフィックスプロセッサ内の他の構成要素によって構成可能であってよく、及び/又はグラフィックスドライバもしくはユーザアプリケーションによってプログラム可能であってよい。
[0094]幾つかの実装形態では、デスティネーションアルファ値αDは、ゼロから1の範囲内にあってよく(即ち0≦αD≦1)、ゼロの値は完全に不透明なデスティネーション画素を示し、1の値は完全に透明な画素を示し、ゼロから1の間の値は半透明画素に対する様々な不透明度を表す。そのような例では、デスティネーションアルファ値がゼロから1に増加すると、不透明度のレベルが、ゼロのデスティネーションアルファ値における実質的に完全な不透明度から1のデスティネーションアルファ値における実質的にない不透明度に減少する。
[0095]幾つかの例では、閾値の値は、完全に不透明なデスティネーション画素を示してよく、例えばゼロという値であってよい。閾値の値をゼロに設定することによって、デスティネーションアルファ検査ブロックは、すでに完全に不透明であるデスティネーション画素に対応するソース画素を破棄することができる。サーフェスが前景から背景に描画されるとき、いかなるそのようなソース画素も画素デスティネーションに対してすでに処理されたソース画素の背後にあるので、その後デスティネーション画素に対して処理される何らかのソース画素は、デスティネーション画素の全体的な外観に寄与しない。これらのソース画素を破棄することによって、全体的な画像に寄与しないテクスチャ値を取り出す必要がないことにより、グラフィックス処理システムにおけるメモリアクセス帯域幅を解放することができる。
[0096]デスティネーションアルファ検査モジュール52は、様々な方法で実施され得る。例えば、デスティネーションアルファ検査モジュール52は、専用固定機能ハードウェアブロックとして、シェーダユニット上で実行されるシェーダプログラムとして、デスティネーションアルファ検査を実行するように構成された構成可能なステンシル検査ブロックとして、及び/又はデスティネーションアルファ検査を実行するように構成された構成可能なz/ステンシル検査ブロックとして、実施され得る。これらの様々な構成は、本開示において後で更に詳細に説明される。
[0097]テクスチャマッピングモジュール54は、ソース画素、例えば渡されたソース画素を受け取り、ソース画素に対してテクスチャマッピング動作を実行し、テクスチャマッピングされた画素を生成するように構成される。各ソース画素に対して、テクスチャマッピングモジュール54は、受け取られたソース画素に含まれる1つ又は複数のテクスチャ座標に基づいて、1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出すことができる。このテクスチャ座標は、どのテクスチャ値をテクスチャバッファ58から取り出すかを指定及び/又は決定することができる。テクスチャ座標を取り出した後、テクスチャマッピングモジュール54は、をテクスチャマッピング関数に従って1つ又は複数の取り出されたテクスチャ値に基づいてソース画素の色座標(例えばRGB成分)を修正し、修正された色成分を持つ、結果として生じるテクスチャマッピングされた画素を生成することができる。テクスチャマッピング関数は、テクスチャバッファ58から取り出されたテクスチャ値とソース画素の位置座標の関数として、テクスチャマッピングされた色値を指定することができる。テクスチャマッピング関数は、ユーザ指定の関数であってよい。様々なテクスチャマッピング関数が当技術分野で知られており、本開示では、更に詳細に説明しない。幾つかの例では、テクスチャマッピングモジュール54は、シェーダユニット上で実行されるシェーダプログラム、固定関数ハードウェア処理段、又はこれらの任意の組合せとして実施されてよい。
[0098]テクスチャマッピングモジュール54は、テクスチャマッピングされた画素を、更なる処理のために1つ又は複数の後続処理段に渡すことができる。デスティネーションアルファ決定モジュール56は、図3ではテクスチャマッピングモジュール54の後続処理段として示されているが、介在する任意の数の処理段がテクスチャマッピングモジュール54とデスティネーションアルファ決定モジュール56の間に含まれてよい。同様に、デスティネーションアルファ検査モジュール52は、図3ではテクスチャマッピングモジュール54の前の処理段として示されているが、介在する任意の数の処理段がデスティネーションアルファ検査モジュール52とテクスチャマッピングモジュール54の間に含まれてよい。
[0099]デスティネーションアルファ決定モジュール56は、ソース画素を受け取り、ソース画素と同じ画面画素位置(即ちスクリーン空間内の位置座標)を有するデスティネーション画素に対するデスティネーションアルファ値を生成するように構成される。幾つかの例では、デスティネーションアルファ決定モジュール56は、画面画素位置に対する前のデスティネーションアルファ値をデスティネーションアルファバッファ60から取り出し、画面画素位置に対する後続デスティネーションアルファ値を、前のデスティネーションアルファ値とソース画素の1つ又は複数の色成分及び/又はアルファ成分の関数として生成することができる。例えば、デスティネーションアルファ決定モジュール56は、画面画素位置に対する後続のデスティネーションアルファ値を、ソース画素の前のデスティネーションアルファ値(即ちデスティネーションアルファバッファ60から取り出される「A」成分)とソースアルファ値(即ち「A」成分)の関数として生成することができる。
[0100]幾つかの例では、デスティネーションアルファ決定モジュール56はアルファブレンディングモジュールであってよく、デスティネーションアルファ決定モジュール56は、アルファブレンディング関数に基づく受け取ったソース画素の処理に応答してデスティネーションアルファ値を生成することができる。デスティネーションアルファ値を更新するために使用される特定の関数は、一般的には、グラフィックスプロセッサによって構成可能である。アルファブレンディング関数は、場合によっては、前景から背景へのアルファブレンディング関数であってよい。前景から背景へのアルファブレンディング関数の例示的なセットとしては、次の関数があり得る。
Cdst[n] = (Adst[n-1]) x (Asrc[n] x Csrc[n]) + Cdst[n-1](3)
Adst[n] = (1-Asrc[n]) x (Adst[n-1]) (4)
ここで、p[0]、p[1]、…、p[n−1]は、それまでに処理されたn個のソース画素、p[n]は現在処理されているソース画素(即ち現在のソース画素)、Cdst[n]は現在のソース画素の処理に応答して生成されるデスティネーション色値、Adst[n]は現在のソース画素の処理に応答して生成されるデスティネーションアルファ値、Cdst[n−1]はそれまでに処理されたソース画素(即ちp[n−1])の処理に応答して生成されるデスティネーション色値、Adst[n−1]はそれまでに処理されたソース画素(即ちp[n−1])の処理に応答して生成されるデスティネーションアルファ値、Csrc[n]は現在のソース画素に対応するソース色値、Asrc[n]は現在のソース画素に対応するソースアルファ値である。式(1)及び式(2)では、任意の値iに対して、Adst[i]=0は完全に不透明なデスティネーション画素を示すことができ、Adst[i]=1は完全に透明なデスティネーション画素を示すことができる。Adst[−1]及びCdst[−1]は、適切なデフォルト値(例えば、それぞれ1及び0の値)に初期化されてよい。幾つかの例では、Asrc[n]×Csrc[n]の乗算はシェーダ(例えば画素シェーダ)で実行され得るが、他の数学演算はデスティネーションアルファ決定モジュール56の一部として実行される。
[0101]テクスチャバッファ58は、テクスチャマッピングモジュール54による取り出しのために、テクスチャ値を格納するように構成される。このテクスチャ値は、幾つかの例では、アプリケーションサーフェスにおいて定義される色値に対応することができる。テクスチャバッファ58は、幾つかの例ではシステムメモリ10で実施されてよく、又は他の例では別のメモリ(図示せず)で実施されてよい。幾つかの実装形態では、テクスチャバッファ58の全て又は一部は、キャッシュに格納され得る。テクスチャバッファ58は、テクスチャマッピングモジュール54に通信可能に結合される。
[0102]デスティネーションアルファバッファ60は、デスティネーションアルファ決定モジュール56によって生成されるデスティネーションアルファ値を格納し、更なる処理のために、格納されたデスティネーションアルファ値をデスティネーションアルファ検査モジュール52及びデスティネーションアルファ決定モジュール56に提供するように構成される。デスティネーションアルファバッファ60は、複数のデスティネーションアルファ値を含むことができ、デスティネーションアルファ値の各々はスクリーン空間内の特定の画素位置に対応する。
[0103]幾つかの例では、デスティネーションアルファバッファ60は、グラフィックス画像を形成するデスティネーション画素に対するデスティネーションアルファ値及び/又は色値を含むフレームバッファ(例えば図2のフレームバッファ40)とすることができる。例えば、フレームバッファは、複数のデスティネーション画素に対する赤、緑、青、及びアルファ(RGBA)の各成分を格納することができる。特定のデスティネーション画素に対するRGBA成分のうち「A」成分は、その画素に対するデスティネーションアルファ値に対応することができる。場合によっては、フレームバッファは、色サブバッファとデスティネーションアルファサブバッファに細分されてよく、色データ(例えばRGB)は色サブバッファに格納されてよく、デスティネーションアルファ値(例えば「A」成分)はデスティネーションアルファサブバッファに格納されてよい。
[0104]更なる例では、デスティネーションアルファバッファ60は、グラフィックス画像のデスティネーション画素のサブセットに対するデスティネーションアルファ値及び/又は色値を含むビンバッファとすることができる。ビンバッファは、フレームバッファに関して上記で説明したデータと類似した、デスティネーション画素のサブセットに対するデータを格納することができる。ビンバッファは、幾つかの例では、フレームバッファにアクセスするために使用される通信インターフェースよりも高い帯域幅を有する通信インターフェースを介して、デスティネーションアルファ検査モジュール52にアクセス可能とすることができる。
[0105]デスティネーションアルファ検査モジュール52、テクスチャマッピングモジュール54、及びデスティネーションアルファ決定モジュール56によって受け取られる各ソース画素は、スクリーン空間内の特定の画素位置に対応する。例えば、各ソース画素は、画素に対応する画素位置を示す位置座標を含むことができる。従って、各ソース画素は、デスティネーションアルファバッファ60内の対応するデスティネーション画素及びデスティネーションアルファ値にマッピングされる。
[0106]幾つかの例では、デスティネーションアルファバッファ60は、テクスチャバッファ58の利用可能な読み取り帯域幅よりも高い利用可能な読み取り帯域幅を有することができる。例えば、テクスチャバッファ58は、1つ又は複数のバス(例えば図1のバス20及び/又は22)によってGPU12に結合されたオフチップメモリとすることができ、デスティネーションアルファバッファ60は、必ずしも1つ又は複数のバスを介してGPU12に結合されるとは限らないオンチップキャッシュとすることができる。テクスチャマッピングモジュール54の前にソース画素を破棄することによって、テクスチャバッファ58から実行されることが必要なソース読み取りの回数が減少され、それによって、グラフィックス処理パイプライン50に必要とされる全体的なメモリアクセス帯域幅を減少させることができる。
[0107]画素処理パイプライン50は、幾つかの例では、画素レベルではなくサンプルレベルで処理を実行することができる。そのような例では、各画素は複数のサンプルに関連してよく、各サンプルは単一画素に関連してよい。更に、各サンプルは、デスティネーションアルファバッファ60内のそれ自体のデスティネーションアルファ値に関連付けられてよい。ソース画素に対する1つ又は複数のテクスチャ値をテクスチャバッファ58から取り出させない動作を実行するかどうか決定するために、デスティネーションアルファ検査モジュール52は、ソース画素の各サンプルに関連付けられたデスティネーションアルファ値を閾値の値と比較し、そのソース画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下であるかどうか決定することができる。ソース画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下である場合、デスティネーションアルファ検査モジュール52は、ソース画素に関連付けられた全てのサンプルを破棄することができる。そうでない場合、ソース画素に関連付けられたサンプルのうち少なくとも1つに対するデスティネーションアルファ値が閾値の値よりも小さくも等しくもない場合、デスティネーションアルファ検査モジュール52は、ソース画素に関連付けられたサンプルの全てを、更なる処理のために後続処理段のセットに渡すことができる。
[0108]複数の重複サーフェス及び/又はプリミティブが単一のグラフィックス画像に対してレンダリングされることがあるので、複数のソース画素が同じ画面画素位置に関連付けられてよい。本明細書で用いられる場合、両方のサーフェスが、スクリーン空間内の同じ画素位置にマッピングされる少なくとも1つの画素を有する場合、1つのサーフェスは別のサーフェス内で重複することができる。特定の画面画素位置に対するデスティネーションアルファ値は、特定の画面位置に対応するソース画素がデスティネーションアルファ決定モジュール56によって処理されるたびに、逐次的に更新され得る。更新されたデスティネーションアルファ値は、同じ画素位置に対する前のデスティネーションアルファ値の関数に依存することができる。従って、デスティネーションアルファバッファ60に格納されるデスティネーションアルファ値は、所与の時点までデスティネーション画素に対するデスティネーションアルファ決定モジュール56によって処理された全てのソース画素に基づいて所与の時点でのそのデスティネーション画素の不透明度を示す「合成」アルファ値を表すことができる。
[0109]幾つかの例では、デスティネーションアルファ値が、ソース画素を受け取るためにデスティネーションアルファ検査モジュール52によって取り出されるとき、画素処理パイプライン50によってまだ処理されており、デスティネーションアルファ決定モジュール56に未達の他のソース画素がある場合があることに留意されたい。従って、特定のソース画素に対する、デスティネーションアルファ検査モジュール52によって取り出されるデスティネーションアルファ値は、現在のソース画素の前に画素処理パイプライン50において処理し始めたあらゆるソース画素の寄与を反映しないことがある。言い換えれば、デスティネーションアルファ検査モジュール52によって取り出されるデスティネーションアルファ値は、「最新でない」即ち「古い」デスティネーション値であることがある。とはいえ、いわゆる「最新でない」デスティネーションアルファ値が取り出される場合であっても、そのようなデスティネーションアルファ値が、デスティネーション画素が不透明度の閾値レベルに達したことを示す場合、デスティネーションアルファ値が不透明度の閾値レベルをいったん達成すると、デスティネーションアルファ値は、その後、同じフレームをレンダリングする間、不透明度が減少することはないので、デスティネーションアルファ検査モジュール52は依然としてソース画素を安全に破棄することができる。従って、本開示の技法は、幅最新のデスティネーションアルファ値が取り出されていない場合でも、システム帯域を減少させるのに依然として効果的であり得る。
[0110]本開示のデスティネーションアルファ検査法は、グラフィックスプロセッサで一般に見られるソースアルファ検査及びグラフィックスプロセッサで一般に見られるアルファブレンディング関数と異なることに更に留意されたい。ソースアルファ検査は、処理されている各ソース画素とともに含まれるソースアルファ値に基づいて画素を破棄することができる。所与の時点までの所与の画素位置に対する全てのソース画素処理に対する合成アルファ値であるデスティネーションアルファ値とは異なり、ソースアルファ値は、各ソース画素に固有のアルファ値であり、合成アルファ値ではない。その上、デスティネーションアルファ検査モジュール52によって使用されるデスティネーションアルファ値は、デスティネーションアルファバッファ60、例えばフレームバッファ又はビンバッファから取り出されるが、ソースアルファ検査によって使用されるソースアルファ値は、一般的には、受け取られたソース画素それ自体の中に含まれる。従って、従来のソースアルファテスティングで使用されるソースアルファ値は、一般的には、前の処理段から直接受け取られ、フレームバッファ又はビンバッファから取り出されない。
[0111]従来技術によるソースアルファテスティングブロック及び従来技術によるアルファブレンディングブロックは本開示で説明するデスティネーションアルファ検査モジュールとは異なるが、ソースアルファテスティングブロック及びアルファブレンディングブロックの一方又は両方は、本開示のデスティネーションアルファ検査モジュールとともに使用されてよい。前景から背景へのレンダリング順序が使用される場合、アルファブレンディングブロックは、画家のアルゴリズムに従ってレンダリングするときに一般的に使用される背景から前景へのアルファブレンディング方程式ではなく、前景から背景へのアルファブレンディング方程式を使用するように構成され得る。
[0112]図4は、図3の画素処理パイプライン50を実施するために使用され得る例示的な画素処理パイプライン62を示すブロック図である。画素処理パイプライン62は、デスティネーションアルファ検査モジュール52と、テクスチャマッピングモジュール54と、デスティネーションアルファ決定モジュール56と、テクスチャバッファ58と、ビンバッファ64と、フレームバッファ66とを含む。図4に示されるように、画素処理パイプライン62のアーキテクチャは、デスティネーションアルファバッファ60がビンバッファ64及びフレームバッファ66によって置き換えられていることを除いて、図3に示される画素処理パイプライン50のアーキテクチャに類似している。図3及び図4の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
[0113]ビンバッファ64は、フレームバッファ66内のデスティネーション画素のサブセットに対して図3のデスティネーションアルファバッファ60の機能を実施することができる。フレームバッファ66は、図2に関して説明に示され説明されるフレームバッファ40に対応することができる。フレームバッファ66は、スクリーン空間デスティネーション画素内の各々に対して、色の成分と、デスティネーションアルファ値とを格納することができる。例えば、フレームバッファ66は、デスティネーション画素の各々に対してRGBA成分を格納することができ、RGBA成分のアルファ(「A」)成分は、デスティネーションアルファ検査モジュール52によって使用されるデスティネーションアルファ値に対応することができる。フレームバッファ66は、システムメモリ10内に存在することができる。場合によっては、フレームバッファ66は、色サブバッファとデスティネーションアルファサブバッファに細分されてよく、色データ(例えばRGB)は色サブバッファに格納されてよく、デスティネーションアルファ値(例えば「A」成分)はデスティネーションアルファサブバッファに格納されてよい。
[0114]ビンバッファ64は、フレームバッファ66内の画素のサブセットに対して、色の成分と、デスティネーションアルファ値とを格納することができる。例えば、ビンバッファ64は、指定の大きさの画素のタイル、例えばデスティネーション画素の16×16タイルの中のデスティネーション画素に対するRGBA成分を格納することができる。幾つかの例では、ビンバッファ64はオンチップメモリとすることができる。言い換えれば、ビンバッファ64は、GPU12の画素処理パイプライン62と同じマイクロチップ上に存在することができる。そのような例では、フレームバッファ40はオフチップメモリであってよく、例えば、フレームバッファ40は、GPU12及びビンバッファ64が存在するマイクロチップと異なる第2のマイクロチップ上に存在してよい。
[0115]ビンバッファ64の初期化及びビンバッファ64からのデータのフレームバッファ66への書き込みは、幾つかの例では、プリミティブのビン又はタイルの処理と同期され得る。例えば、プリミティブの新しいビンが処理されようとしているとき、画素処理パイプライン62は、ビンバッファ64に、プリミティブのそれまでに処理されたビンのためにビンバッファ64に格納されたデスティネーション画素データをフレームバッファ66に書き込ませ、ビンバッファ内のデータ値をデフォルト値に初期化させ得る。
[0116]幾つかの例では、デスティネーションアルファ検査モジュール52は第1の通信インターフェースを介してビンキャッシュ64からデスティネーションアルファ値を取り出すことができ、テクスチャマッピングモジュール54は第2の通信インターフェースを介してテクスチャバッファ58からテクスチャ値を取り出すことができ、フレームバッファ66は第3の通信インターフェースを介して画素処理パイプライン62にアクセス可能であることができる。そのような例では、第1の通信インターフェースは、幾つかの例では、第2の通信インターフェース及び/又は第3の通信インターフェースよりも高い帯域幅を有することができる。場合によっては、第2の通信インターフェースは、例えばフレームバッファ40とテクスチャバッファ42が両方ともシステムメモリ10で実施されるとき、第3の通信インターフェースと同じ通信インターフェースであってよい。第2の通信インターフェース及び第3の通信インターフェースは、幾つかの例では、図1のバス20及び/又は22に相当することができる。ビンバッファ64がオンチップビンバッファであるとき、第1の通信インターフェースは、GPU12の内部にある通信インターフェースであってよい。
[0117]追加の例では、ビンバッファ64の容量は、あるグラフィックス画像に関連付けられた複数のデスティネーション画素の全てを格納するように構成され得るフレームバッファ66の容量よりも小さいことがある。従って、ビンバッファ64の容量は、そのような例では、グラフィックス画像に関連付けられた複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さいことがある。
[0118]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、特定のビンに対するデスティネーションアルファ値が、デスティネーションアルファ検査モジュール52によって、必要とされるときにビンバッファ64にすでにロードされていることがあるので、図4に示されるビニングアーキテクチャの状況で特に有用なことがある。これによって、そのような値にフレームバッファ66からアクセスする必要性が緩和されることがあり、フレームバッファ40は、より低い利用可能な帯域幅を持つ、通信インターフェースを介してアクセス可能なメモリ、例えばシステムメモリ10にあってよい。従って、例えば図4に示されるように、ビニング状況において本開示の技法を実施することによって、デスティネーションアルファ値を取り出すために必要とされ得るオーバーヘッド帯域幅は、テクスチャバッファ58へのソース読み取りの回数を減少させることによって達成される帯域幅節減と比較して、相対的に最小であってよい。
[0119]図5は、本開示の技法を実施するために使用され得る例示的なデスティネーションアルファ検査モジュール68を示すブロック図である。幾つかの例では、デスティネーションアルファ検査モジュール68は、図3及び図4に示されるデスティネーションアルファ検査モジュール52に対応することができる。デスティネーションアルファ検査モジュール68は、1つ又は複数のソース画素を受け取り、受け取った画素に対してデスティネーションアルファ検査を実行し、デスティネーションアルファ検査の結果に基づいて個々の画素を選択的に破棄するように構成される。デスティネーションアルファ検査モジュール68は、デスティネーションアルファ取り出しモジュール70と、比較モジュール72と、閾値レジスタ74とを含む。
[0120]デスティネーションアルファ取り出しモジュール70は、位置座標データを含むソース画素を受け取り、その位置座標データに基づいてソース画素の位置座標を決定し、ソース画素の位置座標に基づいてデスティネーションアルファ値をデスティネーションアルファバッファ60から取り出し、取り出されたデスティネーションアルファ値を比較のために比較モジュール72に提供するように構成され得る。取り出されたデスティネーションアルファ値は、ソース画素と同じ位置座標を有することができる。
[0121]比較モジュール72は、デスティネーションアルファ取り出しモジュール70からデスティネーションアルファ値を、閾値レジスタ74から閾値の値を受け取り、デスティネーションアルファ値を閾値の値と比較するように構成され得る。この比較に基づいて、比較モジュール72は、ソース画素を1つ又は複数の処理段に渡すか、又は画素を破棄する、即ちソース画素を何らかの後続処理段に渡さない、のどちらかを行う。幾つかの例では、比較モジュール72は、デスティネーションアルファ値が閾値の値以下であるかどうか決定することによって、デスティネーションアルファ値を閾値と比較することができる。デスティネーションアルファ値が閾値以下である場合、比較モジュール72は、幾つかの例では、ソース画素を破棄することができる。逆に、デスティネーションアルファ値が閾値よりも小さくも等しくもない場合、比較モジュール72は、幾つかの例では、画素を1つ又は複数の後続処理段に渡す、即ちソース画素を破棄しないことができる。他の例では、他の閾値比較関数が使用されてよい。このようにして、デスティネーションアルファ検査モジュール68は、ソース画素に対応するデスティネーションアルファ値に基づいてソース画素を選択的に破棄することができる。
[0122]閾値レジスタ74は、その値又はそれより下方ではソース画素が破棄され得る不透明度の閾値レベルを示す閾値の値を格納することができる。例えば、デスティネーションアルファ検査モジュール68が、特定の画面画素位置を有するソース画素を処理するとき、不透明度の閾値レベルは、その値又はそれより下方ではソース画素が見えず、従ってソース画素が表示される必要がない、対応するデスティネーション画素に対する不透明度のレベルを示すことができる。図5に示されるように、閾値レジスタ74は、閾値レジスタ74に格納する特定の閾値の値を示す情報を含むことができる構成情報を受け取るように構成される。閾値レジスタ74は、その構成情報を、例えばホストCPU上で実行されるユーザソフトウェアアプリケーション、ホストCPU上で実行されるGPUドライバ、GPU上に存在するハードウェア構成要素、及び/又はGPU上で実行されるシェーダから受け取ることができる。
[0123]図6は、本開示の技法を実施するために使用され得る別の例示的なデスティネーションアルファ検査モジュール76を示すブロック図である。幾つかの例では、デスティネーションアルファ検査モジュール76は、図3及び図4に示されるデスティネーションアルファ検査モジュール52に取って代わることができる。デスティネーションアルファ検査モジュール76は、1つ又は複数のソース画素を受け取り、そのソース画素に対してデスティネーションアルファ検査を実行し、比較に応答して制御信号を選択的にアクティブにするように構成される。デスティネーションアルファ検査モジュール68は、デスティネーションアルファ取り出しモジュール70と、比較モジュール78と、閾値レジスタ74とを含む。図6に示されるように、デスティネーションアルファ検査モジュール76のアーキテクチャは、比較モジュール72が比較モジュール78によって置き換えられ、全てのソース画素が後続処理段に渡されることを除いて、図5に示されるデスティネーションアルファ検査モジュール68のアーキテクチャに類似している。図5及び図6の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
[0124]比較モジュール78は、図5の比較モジュール72に関して上記で説明した比較動作と類似の比較動作を実行することができる。しかしながら、比較動作に応答してソース画素を選択的に破棄する代わりに、比較モジュール78は、制御信号を選択的にアクティブ及び非アクティブにすることができる。制御信号は、対応するソース画素に対するテクスチャ値の取り出しを選択的に有効及び無効にするために、画素処理パイプライン内の1つ又は複数の後続処理段に供給され得る。例えば、デスティネーションアルファ検査モジュール76でソース画素を破棄するのではなく、別の処理段が、制御信号に基づいてソース画素を破棄してよい。別の例として、テクスチャマッピングモジュールは、制御信号を受け取り、制御信号に基づいてソース画素に対するテクスチャ値取り出しを選択的に有効又は無効にしてよい。
[0125]図6の例示的なデスティネーションアルファ検査モジュール76は、図5に示される構成に加えて又はその代わりに画素処理パイプライン内でのテクスチャ値の取り出しを選択的に制御するために使用され得る別の例示的なデスティネーションアルファ検査モジュール構成を示す。他のデスティネーションアルファ検査モジュール構成が企図され、本開示の範囲内に含まれる。例えば、別の例示的なデスティネーションアルファ検査モジュール構成は、テクスチャ値がソース画素に対して取り出されるべきかどうかを示す属性画素を修正することができ、テクスチャマッピングモジュールは、この画素属性に基づいて、ソース画素に対するテクスチャ値を選択的に取り出すことができる。
[0126]幾つかの例では、本開示の技法に従って設計された画素処理パイプラインは、ステンシル検査を実行する処理ユニットを含むことができる。この処理ユニットは、例えば、ステンシル検査ブロック及び/又は合成されたz/ステンシル検査ブロックであってよい。そのような例では、GPUは、幾つかの例では、ステンシル検査を実行する処理ユニットをステンシル値の代わりにデスティネーションアルファ値を受け取るように構成することによって、本開示で説明されるデスティネーションアルファ検査機能を実施することができる。次いで、処理ユニットは、本開示の技法に従って、デスティネーションアルファ検査を実行し、デスティネーションアルファ値に基づいてソース画素に対するテクスチャ値を選択的に取り出させるために使用され得る。これらの技法は、図7から図10に関して更に詳細に説明される。
[0127]図7は、構成可能なステンシル検査ブロックを使用して、デスティネーションアルファ検査を実行し、本開示の選択的テクスチャ値取り出し法を実施する例示的な画素処理パイプライン80を示すブロック図である。画素処理パイプライン80は、デスティネーションアルファ検査モジュール82と、ステンシルバッファ84と、デスティネーションアルファバッファ60とを含む。デスティネーションアルファ検査モジュール82は、構成可能なステンシル検査ブロック86を含む。ステンシルバッファ84は、画素処理パイプライン80に対するステンシル値を格納するように構成され得る。幾つかの例では、ステンシルバッファ84は、オフチップシステムメモリ、例えば図1に示されるシステムメモリ10の中に存在することができる。更なる例では、ステンシルバッファ84は、図9に関して説明したz/ステンシルバッファに類似したz/ステンシルバッファであってよく、フレームバッファ内のデスティネーション画素に関連付けられたz値及びステンシル値を格納することができる。デスティネーションアルファバッファ60は、例えば、フレームバッファ又はビンバッファであってよい。デスティネーションアルファバッファ60がビンバッファであるとき、デスティネーションアルファバッファ60は、幾つかの例では、画素処理パイプライン80を含むGPUと同じマイクロチップ上に存在することができる。
[0128]デスティネーションアルファ検査モジュール82は、ソース画素をGPU内の前の処理段から受け取り、このソース画素に対応するデスティネーションアルファ値を取り出し、このデスティネーションアルファ値を閾値と比較し、この比較の結果に基づいてソース画素を選択的に破棄するように構成され得る。図7に示されるように、デスティネーションアルファ検査モジュール82は構成可能なステンシル検査ブロック86として実施される。構成可能なステンシル検査ブロック86は、ステンシル検査状態及びデスティネーションアルファ検査状態で動作するように構成可能であってよい。ステンシル検査状態で動作するように構成されるとき、ステンシル検査ブロック86は、ソース画素を前の処理段から受け取り、受け取ったソース画素に対応するステンシル値をステンシルバッファ84から取り出し、取り出したステンシル値を閾値と比較し、比較の結果に基づいてソース画素を選択的に破棄することができる。デスティネーションアルファ検査状態で動作するように構成されるとき、ステンシル検査ブロック86は対応するステンシル値をステンシルバッファ84から取り出すのではなく、対応するデスティネーションアルファ値をデスティネーションアルファバッファ60から取り出すことができることを除いて、ステンシル検査ブロック86は、ステンシル検査状態で構成されたときと本質的に同じ動作を実行することができる。従って、ステンシル検査ブロック86は、デスティネーションアルファ値に基づいて、ソース画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、及びこの動作を実行すると決定したことに応答して、本開示の技法に従ってこの動作を実行することを決定することができる。
[0129]ステンシル検査ブロック86は、ステンシル検査ブロック86によって受け取られる構成情報に基づいて構成状態を切り換えるように構成され得る。構成情報は、GPU内の別の構成要素から、ホストCPU上で実行されるGPUドライバから、及び/又はホストCPU上で実行されるユーザソフトウェアアプリケーションから受け取られ得る。
[0130]幾つかの例では、ステンシル検査ブロック86によって受け取られる構成情報は、ステンシル検査ブロック86が入力値(例えばステンシル値及び/又はデスティネーションアルファ値)を取り出すべきメモリアドレスを指定することができる。そのような例では、ステンシル検査ブロック86は、ステンシルバッファ84を指すメモリアドレスをステンシル検査ブロック86に提供することによってステンシル値を受け取るように構成され得る。更に、ステンシル検査ブロック86は、ステンシルバッファ84の代わりにデスティネーションアルファバッファ60を指すメモリアドレスをステンシル検査ブロック86に提供することによって、ステンシル値の代わりにデスティネーションアルファ値を受け取るように構成され得る。
[0131]本開示の技法に従ってステンシル値の代わりにデスティネーションアルファ値を取り出すようにステンシル検査ブロックを再構成することによって、ハードウェアベースのデスティネーションアルファ検査ブロックは、追加のハードウェアブロックをグラフィックスパイプラインに追加することを必ずしも必要とするとは限らずに、グラフィックス処理パイプラインにおいて実施され得る。その上、グラフィックスプロセッサは、2つの異なるレンダリングモード、即ちハードウェアベースのステンシル検査を実行する第1のモードとハードウェアベースのデスティネーションアルファ検査を実行する第2のモードとを選択的に切り換えることを可能にすることができる。
[0132]図8は、図7の画素処理パイプラインを実施するために使用され得る例示的なステンシル検査ブロック86を示すブロック図である。ステンシル検査ブロック86は、アドレスレジスタ88と、閾値レジスタ90と、入力値取り出しモジュール92と、比較モジュール94とを含む。
[0133]アドレスレジスタ88は、入力値取り出しモジュール92が入力値を取り出すべきメモリアドレスを格納するように構成され得る。ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、ステンシルバッファ84に対するアドレス空間を指すアドレス値をアドレスレジスタ88にロードすることによってステンシル値を取り出すようにステンシル検査ブロック86を構成することができる。同様に、ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、デスティネーションアルファバッファ60に対するアドレス空間を指すアドレス値をアドレスレジスタ88にロードすることによってデスティネーションアルファ値を取り出すようにステンシル検査ブロック86を構成することができる。
[0134]閾値レジスタ90は、比較モジュール94によって使用するための閾値の値を格納することができる。ステンシル検査ブロック86がステンシル検査を実行するように構成されるとき、閾値の値は、ステンシル検査の基準値を示すことができる。ステンシル検査ブロック86がデスティネーションアルファ検査を実行するように構成されるとき、閾値の値は、その値又はそれより下方ではソース画素が破棄され得る不透明度の閾値レベルを示すことができる。ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、閾値の値を閾値レジスタ90にロードすることによって特定の閾値レベルを格納するように閾値レジスタ90を構成することができる。
[0135]入力値取り出しモジュール92は、位置座標データを含むソース画素を受け取り、その位置座標データに基づいてソース画素の位置座標を決定し、その位置座標に基づいて入力値をメモリ又はキャッシュから取り出し、その入力値を比較のために比較モジュール94に提供するように構成され得る。取り出された入力値は、ソース画素と同じ位置座標に関連付けられ得る。入力値取り出しモジュール92は、入力値を、アドレスレジスタ88に格納されるメモリアドレスによって少なくとも一部は決定されるメモリ位置及び/又はキャッシュ位置から取り出すことができる。アドレスレジスタ88に格納されたメモリアドレスがステンシルバッファ84を指すとき、入力値取り出しモジュール92は、ソース画素に対応するステンシル値を取り出し、そのステンシル値を比較のために比較モジュール94に提供することができる。同様に、アドレスレジスタ88に格納されたメモリアドレスがデスティネーションアルファバッファ60を指すとき、入力値取り出しモジュール92は、ソース画素に対応するデスティネーションアルファ値を取り出し、そのデスティネーションアルファ値を比較のために比較モジュール94に提供することができる。
[0136]比較モジュール94は、入力値取り出しモジュール92から入力値を、閾値レジスタ90から閾値の値を受け取り、入力値を閾値の値と比較するように構成され得る。この比較に基づいて、比較モジュール94は、ソース画素を1つ又は複数の処理段に渡すか、又は画素を破棄する、即ちソース画素を何らかの後続処理段に渡さない、のどちらかを行う。幾つかの例では、比較モジュール94は、入力値が閾値以下であるかどうか決定することによって、入力値を閾値と比較することができる。入力値が閾値以下である場合、比較モジュール94は、幾つかの例では、ソース画素を破棄することができる。逆に、入力値が閾値よりも小さくも等しくもない場合、比較モジュール94は、幾つかの例では、画素を1つ又は複数の後続処理段に渡す、即ちソース画素を破棄しないことができる。他の例では、他の閾値比較関数が使用されてよい。この場合も、入力値は、入力値取り出しモジュール92がどのメモリ空間からデータを取り出すかに応じて、ステンシル値又はデスティネーションアルファ値に対応することができる。このようにして、ステンシル検査ブロック86は、ステンシル検査ブロックとして、又はデスティネーションアルファ検査ブロックとして動作するように構成可能であってよい。
[0137]図9は、構成可能なz/ステンシル検査ブロック106を使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査を実行する例示的な画素処理パイプライン100を示すブロック図である。画素処理パイプライン100は、デスティネーションアルファ検査モジュール102と、z/ステンシルバッファ104と、デスティネーションアルファバッファ60とを含む。デスティネーションアルファ検査モジュール102は、合成された構成可能なz/ステンシル検査ブロック106を含む。Z/ステンシルバッファ104は、画素処理パイプライン100に対するステンシル値及びz値を格納するように構成され得る。幾つかの例では、z/ステンシルバッファ104は、オフチップシステムメモリ、例えば図1に示されるシステムメモリ10の中に存在することができる。デスティネーションアルファバッファ60は、例えば、フレームバッファ又はビンバッファであってよい。デスティネーションアルファバッファ60がビンバッファであるとき、デスティネーションアルファバッファ60は、幾つかの例では、画素処理パイプライン100を含むGPUと同じマイクロチップ上に存在することができる。
[0138]デスティネーションアルファ検査モジュール102は、ソース画素をGPU内の前の処理段から受け取り、このソース画素に対応するデスティネーションアルファ値を取り出し、このデスティネーションアルファ値を閾値と比較し、この比較の結果に基づいてソース画素を選択的に破棄するように構成される。図9に示されるように、デスティネーションアルファ検査モジュール102は構成可能なz/ステンシル検査ブロック106として実施される。構成可能なz/ステンシル検査ブロック106は、zステンシル検査状態及びデスティネーションアルファ検査状態で動作するように構成可能であってよい。zステンシル検査状態で動作するように構成されるとき、z/ステンシル検査ブロック106は、受け取ったソース画素に対してステンシル検査とz検査の一方又は両方を実行することができる。ステンシル検査は、ステンシル値がステンシルバッファ84ではなくz/ステンシルバッファ104から取り出されることを除いて、図7のステンシルブロック86に関して上記で説明した方法と実質的に類似の方法で実行される。
[0139]z検査を実行するために、z/ステンシル検査ブロック106は、ソース画素を前の処理段から受け取り、受け取ったソース画素に対応するz値をz/ステンシルバッファ104から取り出し、取り出したz値を、ソース画素とともに含まれるソースz値と比較し、比較の結果に基づいてソース画素を選択的に破棄することができる。デスティネーションアルファ検査状態で動作するように構成されるとき、z/ステンシルバッファ104は、ステンシル検査によって実行されるのと本質的に同じ動作を実行することができるが、z/ステンシル検査ブロック106は、対応するステンシル値をz/ステンシルバッファ104から取り出すのではなく、対応するデスティネーションアルファ値をデスティネーションアルファバッファ60から取り出すことができる。従って、z/ステンシル検査ブロック106は、デスティネーションアルファ値に基づいて、ソース画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、及びこの動作を実行すると決定したことに応答して、本開示の技法に従ってこの動作を実行することを決定することができる。
[0140]z/ステンシル検査ブロック106は、z/ステンシル検査ブロック106によって受け取られる構成情報に基づいて構成状態を切り換えるように構成され得る。構成情報は、GPU内の別の構成要素から、ホストCPU上で実行されるGPUドライバから、及び/又はホストCPU上で実行されるユーザソフトウェアアプリケーションから受け取られ得る。
[0141]幾つかの例では、z/ステンシル検査ブロック106によって受け取られる構成情報は、z/ステンシル検査ブロック106が入力値(例えばステンシル値及び/又はデスティネーションアルファ値)を取り出すべきメモリアドレスを指定することができる。そのような例では、z/ステンシル検査ブロック106は、z/ステンシルバッファ104を指すメモリアドレスをz/ステンシル検査ブロック106に提供することによってデスティネーションアルファ値を受け取るように構成され得る。更に、z/ステンシル検査ブロック106は、ステンシルバッファ104の代わりにデスティネーションアルファバッファ60を指すメモリアドレスをz/ステンシル検査ブロック106に提供することによって、ステンシル値及び/又はz値の代わりにデスティネーションアルファ値を受け取るように構成され得る。
[0142]本開示の技法に従ってz−ステンシル値の代わりにデスティネーションアルファ値を取り出すようにzステンシル検査ブロックを再構成することによって、ハードウェアベースのデスティネーションアルファ検査ブロックは、追加のハードウェアブロックをグラフィックスパイプラインに追加することを必ずしも必要とするとは限らずに、グラフィックス処理パイプラインにおいて実施され得る。その上、グラフィックスプロセッサは、少なくとも2つの異なるレンダリングモード、即ちハードウェアベースの合成されたz−ステンシル検査を実行する第1のモードとハードウェアベースのデスティネーションアルファ検査を実行する第2のモードとを選択的に切り換えることを可能にすることができる。
[0143]幾つかの例では、z/ステンシル検査ブロック106が、デスティネーションアルファ検査モードで動作するように構成されるとき、z/ステンシル検査ブロック106のz検査部分は、全ての画素をz検査に合格させ、従って画素がz検査により破棄されない、「常に合格(pass-always)」モードに置かれてよい。言い換えれば、z検査は効果的に無効にされ得る。z/ステンシル検査ブロック106がデータをデスティネーションアルファバッファ60から受け取るように構成されるとき、z/ステンシル検査ブロック106は必ずしもz値を受け取るとは限らないことがあるので、z/ステンシル検査ブロック106は、これらの例では「常に合格」モードに置かれ得る。むしろ、z/ステンシル検査ブロック106は、色値例えばRGB値をデスティネーションアルファバッファ60から受け取ることができる。z/ステンシル検査ブロック106を「常に合格」モードに置くことによって、z検査は、色値に基づいて画素を意図せずに破棄しない。
[0144]図10は、図9の画素処理パイプラインを実施するために使用され得る例示的なz/ステンシル検査ブロック106を示すブロック図である。z/ステンシル検査ブロック106は、アドレスレジスタ108と、閾値レジスタ110と、z検査無効化レジスタ112と、入力値取り出しモジュール114と、比較モジュール116とを含む。
[0145]アドレスレジスタ108は、入力値取り出しモジュール114が入力値を取り出すべきメモリアドレスを格納するように構成され得る。ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、z/ステンシルバッファ104に対するアドレス空間を指すアドレス値をアドレスレジスタ108にロードすることによってzステンシル値(即ちz値及びステンシル値)を取り出すように入力値取り出しモジュール114を構成することができる。同様に、ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、デスティネーションアルファバッファ60に対するアドレス空間を指すアドレス値をアドレスレジスタ108にロードすることによってデスティネーションアルファ値を取り出すように入力値取り出しモジュール114を構成することができる。
[0146]閾値レジスタ110は、比較モジュール116によって使用するための閾値の値を格納することができる。z/ステンシル検査ブロック106がzステンシル検査(即ちz検査及び/又はステンシル検査)を実行するように構成されるとき、閾値の値は、ステンシル検査の基準値を示すことができる。z/ステンシル検査ブロック106がデスティネーションアルファ検査を実行するように構成されるとき、閾値の値は、その値又はそれより下方ではソース画素が破棄され得る不透明度の閾値レベルを示すことができる。ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、閾値の値を閾値レジスタ110にロードすることによって特定の閾値レベルを格納するように閾値レジスタ110を構成することができる。
[0147]z検査無効化レジスタ112は、z検査が比較モジュール116に対して有効にされるべきか又は無効にされるべきかを示す値を格納することができる。ユーザアプリケーション、GPUドライバ、及び/又はGPU構成要素は、構成値をz検査無効化レジスタ112にロードすることによって特定の構成値を格納するようにz検査無効化レジスタ112を構成することができる。
[0148]入力値取り出しモジュール114は、位置座標データを含むソース画素を受け取り、その位置座標データに基づいてソース画素の位置座標を決定し、その位置座標に基づいて入力値をメモリ又はキャッシュから取り出し、その入力値を比較のために比較モジュール116に提供するように構成され得る。取り出された入力値は、ソース画素と同じ位置座標に関連付けられ得る。入力値取り出しモジュール114は、入力値を、アドレスレジスタ108に格納されるメモリアドレスによって少なくとも一部は決定されるメモリ位置及び/又はキャッシュ位置から取り出すことができる。アドレスレジスタ108に格納されたメモリアドレスがz/ステンシルバッファ104を指すとき、入力値取り出しモジュール114は、ソース画素に対応するzステンシル値を取り出し、そのzステンシル値を比較のために比較モジュール116に提供することができる。同様に、アドレスレジスタ108に格納されたメモリアドレスがデスティネーションアルファバッファ60を指すとき、入力値取り出しモジュール114は、ソース画素に対応するデスティネーションアルファ値を取り出し、そのデスティネーションアルファ値を比較のために比較モジュール116に提供することができる。
[0149]比較モジュール116は、2つの異なる入力値を含む入力データを入力値取り出しモジュール114から受け取り、入力値の各々に対して異なる比較検査を実行するように構成され得る。第1の比較検査の一部として、比較モジュール116は、入力値取り出しモジュール114から受け取った第1の入力値を、閾値レジスタ110から受け取った閾値の値と比較することができる。第2の比較検査の一部として、比較モジュール116は、入力値取り出しモジュール114から受け取った第2の入力値を、ソース画素内に含まれる画素属性と比較することができる。これらの比較検査の両方の結果に基づいて、比較モジュール116は、ソース画素を1つ又は複数の処理段に渡すか、又は画素を破棄する、即ちソース画素を何らかの後続処理段に渡さない、のどちらかを行う。例えば、ソース画素が比較検査の両方に合格した場合、比較モジュール116は、ソース画素を更なる処理のために後続段に渡すことができる。逆に、ソース画素がテストの少なくとも一方に合格しない場合、比較モジュール116はソース画素を破棄することができる。比較モジュール116は、z検査無効化レジスタ112に格納される構成値に基づいて、第2の比較検査を「常に合格」モードへと選択的に構成することができる。第2の比較検査が「常に合格」モードであるとき、次いで、第2の比較検査は、そのような比較が実行された場合、その比較の実際の結果に関係なく全ての画素に対して合格したと考えられる。従って、第1の比較検査は、ソース画素が破棄されるかどうか決定することになる。
[0150]比較モジュール116が、zステンシル検査構成で動作するように構成されるとき、比較モジュール116は、(例えば、入力値取り出しモジュール114から受け取ったステンシル値を、図8の比較モジュール94に関して上記で説明した方法と類似した方法で閾値と比較することによって)第1の比較検査を使用してステンシル検査を実行し、(例えば、入力値取り出しモジュール114から受け取ったz値を、ソース画素内に含まれるソースz値属性と比較することによって)第2の比較検査を使用してz検査を実行することができる。比較モジュール116が、デスティネーションアルファ構成で動作するように構成されるとき、比較モジュール116は、(例えば、入力値取り出しモジュール114から受け取ったデスティネーションアルファ値を、図8の比較モジュール94に関して上記で説明した方法と類似した方法で閾値と比較することによって)第1の比較検査を使用してデスティネーションアルファ検査を実行し、比較モジュール116は、z検査無効化レジスタ112に格納される構成値に基づいて、第2の比較検査を無効にすることができる。このようにして、z/ステンシル検査ブロック106は、zステンシル検査ブロックとして、又はデスティネーションアルファ検査ブロックとして動作するように構成可能であってよい。
[0151]幾つかのグラフィックスプロセッサでは、所与の画素位置に対するz値及びステンシル値は、単一のデータワードとしてz/ステンシルバッファ104に格納され得る。例えば、データワードは32ビットであってよく、z値がワードの24ビットを構成し、ステンシル値が残りの8ビットを構成する。そのようなグラフィックスプロセッサでは、RGBA成分は、フレームバッファに、及びビンバッファ内での拡張によって、「RGB」成分が24ビットを構成し「A」成分が残りの8ビットを構成する32ビットワードに格納され得る。そのような例では、32ビットRGBAデータワード内でのアルファ値の位置は、ステンシル値が32ビットz値/ステンシルデータワードに一般的に格納される位置にマッピングすることができる。言い換えれば、デスティネーションアルファ値は、z/ステンシル検査ブロック106が一般的にステンシル値を受け取ると予想される、データワード内のビット位置と位置合わせすることができ、RGB値は、z/ステンシル検査ブロック106が一般的にz値を受け取ると予想される、データワード内のビット位置と位置合わせすることができる。このようにして、z/ステンシル検査ブロック106は、必ずしもz/ステンシルバッファ104内の基礎となるデータを再構成することを必要とするとは限らずに、デスティネーションアルファ値に対して動作することを可能にすることができる。その上、デスティネーションアルファ検査モードで動作するときにz検査機能を無効にすることによって、z値ではなくRGB値を受け取ることからの干渉が防止され得る。
[0152]図11は、プログラム可能なシェーダユニットを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査を実行する例示的な画素処理パイプライン120を示すブロック図である。画素処理パイプライン120は、プログラム可能なシェーダユニット122と、テクスチャマッピングモジュール54と、テクスチャバッファ58と、デスティネーションアルファバッファ60とを含む。図11の例示的な画素処理パイプライン120では、テクスチャマッピングモジュール54は、固定関数ハードウェアユニットとして実施され、デスティネーションアルファ検査モジュール126はプログラム可能なシェーダユニットで実施される。
[0153]図11に示されるように、画素処理パイプライン120のアーキテクチャは、デスティネーションアルファ検査モジュール52が、デスティネーションアルファ検査を実施するシェーダユニット122によって置き換えられていることを除いて、図3に示される画素処理パイプライン50のアーキテクチャに類似している。図3及び図11の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
[0154]シェーダユニット122は、シェーダプログラム124を実行するように構成された1つ又は複数の処理要素を含むことができる。シェーダユニット122が複数の処理要素を含む場合、各処理要素は、幾つかの例では、他の処理要素と並列にシェーダプログラム124を実行するように構成され得る。幾つかの例では、シェーダユニット122内の処理要素は、現代のGPUで通常見られる並列な単一命令、複数データ処理(SIMD)パイプラインを形成することができる。
[0155]シェーダプログラム124は、シェーダユニット122に関連付けられた命令メモリ又はキャッシュに格納されるプログラム命令を含むことができる。シェーダプログラム124は、ホストCPU例えば図1のCPU6の上で、ユーザソフトウェアアプリケーション、GPUドライバ、又はホスト上で実行される別のサービスによってコンパイルされてよく、プログラム124シェーダのコンパイルされたバージョンは実行のためにシェーダユニット122上にダウンロードされてよい。
[0156]デスティネーションアルファ検査モジュール126は、本開示で説明する様々なデスティネーションアルファ検査モジュールに起因する関数のうちいずれかを実行することができる。例えば、デスティネーションアルファ検査モジュール126は、ソース画素に対してデスティネーションアルファ検査を実行し、デスティネーションアルファ検査の結果に基づいてテクスチャマッピングモジュール54の前に個々のソース画素を選択的に破棄することができる。
[0157]図12は、プログラム可能なシェーダユニットを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査及びテクスチャマッピングを実行する別の例示的な画素処理パイプライン128を示すブロック図である。画素処理パイプライン128は、シェーダユニット122と、テクスチャバッファ58と、デスティネーションアルファバッファ60とを含む。図12に示されるように、画素処理パイプライン128のアーキテクチャは、テクスチャマッピングモジュール54が固定関数パイプライン段の一部ではなくプログラム可能なシェーダユニット上で実施されることを除いて、図11に示される画素処理パイプライン120のアーキテクチャに類似している。図11及び図12の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
[0158]シェーダユニット122はシェーダプログラム130を含み、シェーダプログラム130は、デスティネーションアルファ検査モジュール126と、テクスチャマッピングモジュール132とを含む。デスティネーションアルファ検査モジュール126は、本開示の様々なデスティネーションアルファ検査モジュールに起因する関数のうちどれでも実行することができる。同様に、テクスチャマッピングモジュール132は、本開示の様々なテクスチャマッピングモジュールに起因する関数のうちどれでも実行することができる。シェーダユニット122がソース画素を受け取るとき、シェーダユニット122はまず、デスティネーションアルファ検査モジュール126を実行し、ソース画素が破棄されるべきかどうか決定することができる。デスティネーションアルファ検査モジュール126が、ソース画素は破棄されるべきと決定した場合、シェーダユニット122は画素を破棄し、テクスチャマッピングモジュール132は、そのソース画素に対して実行されない。一方、デスティネーションアルファ検査モジュール126が、ソース画素は破棄されるべきではないと決定した場合、テクスチャマッピングモジュール132は、そのソース画素に対して実行され、ソース画素に対してテクスチャマッピングを実行する。結果として生じるテクスチャマッピングされたソース画素は、1つ又は複数の後続処理段に渡される。
[0159]図13は、本開示に従ってデスティネーションアルファ値に基づいてソース画素に対するテクスチャ値を選択的に取り出すための例示的な技法を示す流れ図である。幾つかの例では、図13に示される技法は、図1から図12に示されるシステム又は構成要素のうちいずれかにおいて実施され得る。デスティネーションアルファ検査モジュール52は、デスティネーションアルファ値をビンバッファ64から取り出す(140)。デスティネーションアルファ値は、第1のプリミティブに関連付けられた第1の画素の処理に応答して、デスティネーションアルファ決定モジュール56によって生成され得る。デスティネーションアルファ検査モジュール52は、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定する(142)。第2の画素は、第1のプリミティブと異なる第2のプリミティブに関連付けられてよい。第2の画素は、第1の画素の画素位置と同じ画素位置を有することができる。
[0160]動作を実行すると決定したこと(144の「はい」)に応答して、デスティネーションアルファ検査モジュール52は、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行する(146)。例えば、デスティネーションアルファ検査モジュール52は、画素が画素処理パイプライン50のテクスチャマッピング段54によって処理される前に、第2の画素を破棄する。逆に、動作を実行しないと決定したこと(144の「いいえ」)に応答して、デスティネーションアルファ検査モジュール52は、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行しない(148)。例えば、デスティネーションアルファ検査モジュール52は、第2の画素を、そのうち1つがテクスチャマッピング段54を含んでよい1つ又は複数の処理段のセットに渡すことができる。
[0161]更なる例では、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作は、テクスチャマッピングを第2の画素に対して実行させない動作であってよい。追加の例では、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作は、第2の画素に対するテクスチャ値を取り出させない制御信号をアサートする動作であってよい。例えば、制御信号は、画素処理パイプライン内の別の処理段に画素を破棄させることができる。別の例として、制御信号は、画素処理パイプライン内で特定の画素に対してテクスチャマッピング段階を有効又は無効にすることができる。より多くの例では、バッファから第2の画素に対する1つ又は複数のテクスチャ値を取り出させない動作は、第2の画素に対するテクスチャマッピング無効属性(texture mapping disable attribute)を、テクスチャマッピングを画素に対して無効にさせる値に設定する動作であってよい。
[0162]追加の例では、デスティネーションアルファ検査モジュール52は、第1の通信インターフェースを介してビンバッファ64からデスティネーションアルファ値を取り出すことができ、1つ又は複数のテクスチャ値が第2の通信インターフェースを介してテクスチャバッファ58から取り出され得る。そのような例では、第1の通信インターフェースは、幾つかの例では、第2の通信インターフェースよりも大きい帯域幅を有することができる。
[0163]ビンバッファ64は、幾つかの例では、フレームバッファ64に格納されるデスティネーション画素のサブセットに対する画素データを格納することができる。例えば、ビンバッファ64に格納されるデスティネーション画素のサブセットは、ビンレンダリング法の一部として特定のレンダリングパスに関連付けられたデスティネーション画素範囲に対応することができる。ビンバッファ64は、ビンバッファ内の特定の記憶スロットを指定するメモリアドレスを含む読み出し要求を受け取り、その記憶スロットに格納されたデータを返すように構成され得る。記憶スロットは、現在のレンダリングパスに関連付けられた特定のデスティネーション画素に対応することができる。幾つかの例では、特定のレンダリングパス中において、ビンバッファ64に対する各メモリアドレスは、特定のレンダリングパスに対するデスティネーション画素範囲内の一意のデスティネーション画素に対応する。
[0164]幾つかの例では、レンダリングされるグラフィックス画像は複数のデスティネーション画素を含むことができ、グラフィックスプロセッサは、複数のレンダリングパスにおいてグラフィックス画像をレンダリングするように構成されてよく、レンダリングパスの各々は、デスティネーション画素のそれぞれのサブセットに関連付けられる。そのような例では、レンダリングパスごとに、ビンバッファは、それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納することができる。追加の例では、ビンバッファの容量は、グラフィックス画像に関連付けられた複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さいことがある。更なる例では、各レンダリングパスに関連付けられた画素の個々のサブセットは、画素の所定のサブセットであってよい。
[0165]図14は、図13に示される技法を実施するために使用され得る、デスティネーションアルファ検査を実行するための例示的な技法を示す流れ図である。幾つかの例では、図14に示される技法は、図13のプロセスボックス142を実施するために使用され得る。デスティネーションアルファ検査モジュール52は、受け取ったソース画素に関連付けられた画素位置を決定する(150)。デスティネーションアルファ検査モジュール52は、その画素位置に関連付けられたデスティネーションアルファ値をデスティネーションアルファバッファ60から取り出す(152)。デスティネーションアルファ検査モジュール52は、デスティネーションアルファ値を閾値の値と比較する(154)。デスティネーションアルファ検査モジュール52は、比較の結果に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定する(156)。
[0166]図15は、図14に示される技法を実施するために使用され得る、デスティネーションアルファ値を閾値と比較するための例示的な技法を示す流れ図である。幾つかの例では、図14に示される技法は、図14のプロセスボックス156を実施するために使用され得る。デスティネーションアルファ検査モジュール52は、デスティネーションアルファ値が閾値の値以下であるかどうか決定する(158)。デスティネーションアルファ値が閾値の値以下である(160の「はい」)場合、デスティネーションアルファ検査モジュール52は、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行すると決定する(162)。例えば、デスティネーションアルファ検査モジュール52は、画素処理パイプラインのステージテクスチャマッピングの前にソース画素を破棄することができる。逆に、デスティネーションアルファ値が閾値の値よりも小さくも等しくもない(160の「いいえ」)場合、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行しないと決定する(164)。例えば、デスティネーションアルファ検査モジュール52は、その画素を、そのうち1つがテクスチャマッピング段を含んでよい1つ又は複数の後続処理段に渡すことができる。
[0167]図16は、本開示に従ってデスティネーションアルファ値に基づく選択的テクスチャ値取り出しレンダリング法を自動的に有効にするための例示的な技法を示す流れ図です。図16の技法は、例えば、例えば図2に示されるGPUドライバ28などのGPUドライバにおいて実装され得る。GPUドライバ28は、前景から背景へのレンダリングモードが有効にされていることを検出することができる(166)。例えば、GPUドライバ28は、ソフトウェアアプリケーション24が、前景から背景へのアルファブレンディング方程式を使用してアルファブレンディングを実行するようにGPU12内のアルファブレンディングモジュールを構成したことを検出することができる。この検出に応答して、GPUドライバ28は、GPU12に対するデスティネーションアルファベースの選択的テクスチャ値取り出しレンダリングモードを自動的に有効にすることができる(168)。デスティネーションアルファベースの選択的テクスチャ値取り出しレンダリングモードは、例えば、図13に示される技法に従ってプリミティブをレンダリングすることができる。
[0168]すでに上記で説明したように、本開示のデスティネーションアルファ検査技法は、重複し得る複数のサーフェスが単一のサーフェスに合成される「ビニング(binning)」環境において特に有用であり得る。ビニング環境では、合成の限定要因は、オフチップ「システムメモリ」に格納されるテクスチャの読み取り及び書き込みによるものである傾向がある。一方、ビンバッファの読み取り及び書き込みは、帯域幅に関して本質的に「自由」である。サーフェスのセットを合成するために、サーフェスは「前景から背景への」順に処理されてよく、デスティネーションアルファ値は維持され得る。幾つかの例では、画素が不透明になる(例えば、透明度の合計が全ての更なる光透過をブロックするので、又は不透明な画素がレンダリングされるので、のいずれかである)と、デスティネーションアルファ値は、デスティネーションアルファ検査モジュールをトリガして画面位置のために処理される任意の後続ソース画素を破棄し得る「0」に等しくなる。
[0169]zバッファ法は、同じ画素位置において他のソース画素の背後にあるソース画素を破棄することによって合成帯域幅を減少させるために使用され得るが、そのような技法は、画素が、重複画素を半透明にすることが本質的に可能な画素単位ソースアルファ値を有するとき、サーフェスを適切にレンダリングしない。しかしながら、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、全てのサーフェスが画素ごとのソースアルファ値を有するときですら合成帯域幅を減少させ、それによって、より堅牢な帯域幅減少機構を提供することができる。
[0170]幾つかの例では、本開示のデスティネーションアルファ検査技法は、そのような技法が特に有用である場合、例えばウィンドウサーフェスを合成するとき、選択的に有効にされ得る。更なる例では、デスティネーションアルファ検査法は、そのような段階が発生していることをコンポジタ(compositor)が必ずしも認識するとは限らずに、グラフィックスドライバによって、及び/又はグラフィックスプロセッサによって、有効にされ得る。例えば、ドライバ及び/又はグラフィックスプロセッサは、ユーザアプリケーションが前景から背景へとサーフェスを合成しようとしていることを検出し、そのような検出に応答して本開示の技法デスティネーションアルファ検査を自動的に有効にすることができる。例えば、ドライバ及び/又はグラフィックスプロセッサは、アルファブレンディングモジュールが「前景から背景への」ブレンディング関数に設定されており、幾つかのサーフェス描画コマンドはソフトウェアによって呼び出されたことを検出し、本開示の技法デスティネーションアルファ検査を自動的に有効にすることができる。
[0171]本開示のデスティネーションアルファ検査法は、テクスチャ値取り出し帯域幅を減少させるための他の非デスティネーションアルファ値に基づく技法に勝る1つ又は複数の利点を提供することができる。例えば、1つの技法は、一番上の不透明なサーフェスを含む「これより上の」のみサーフェスを埋め尽くし(tessellate)レンダリングすることである。しかしながら、全てのサーフェスが透明である又は画素単位アルファを有するとき、この技法は失敗する。帯域幅減少させるための別の技法は、「Z」を各サーフェスに割り当てることと、このZ値を使用して不透明なサーフェスの下のサーフェスのレンダリングを回避することとを含む。この場合も、これは、画素単位アルファ環境で失敗する。帯域幅を減少させるために更に別の技法は、サーフェス単位画素単位アルファ検査による1つのパスにおける全てのサーフェスのシェーダベースのレンダリングを含む。これは機能するが、アプリケーションの著しい変更を必要とする。それは、より大きなシェーダの馬力(horsepower)も必要とし、サーフェスの数が大きくなるか又はサーフェスの形状が方形と異なると、力尽きる。
[0172]本開示で説明する技法は、少なくとも一部は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの何らかの組合せにおいて実施され得る。例えば、説明した技法の様々な態様は、1つ又は複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は他の任意の等価な集積論理回路もしくはディスクリート論理回路、ならびにそのような構成要素の何らかの組合せを含む1つ又は複数のプロセッサの内部で実施され得る。「プロセッサ」又は「処理回路」という用語は、一般に、単独もしくは他の論理回路と組み合わせた前述の論理回路のうちいずれか、又は処理を実行するディスクリートハードウェアなどの他の任意の等価論理回路を指すことができる。
[0173]そのようなハードウェア、ソフトウェア、及びファームウェアは、同じ機器内又は別個の機器内で、本開示で説明する様々な動作及び関数をサポートするように実施され得る。更に、説明したユニット、モジュール、又は構成要素のうちいずれも、ディスクリートだが相互運用可能な論理機器として一緒に又は個別に実施され得る。モジュール又はユニットとしての異なる特徴の記述は、異なる機能態様を強調することを意図したものであり、そのようなモジュール又はユニットは別個のハードウェア構成要素又はソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。むしろ、1つ又は複数のモジュール又はユニットに関連付けられた機能は、別個のハードウェア構成要素、ファームウェア構成要素、及び/又はソフトウェア構成要素によって実行されてもよいし、共通する又は別個のハードウェア構成要素又はソフトウェア構成要素内で統合されてよい。
[0174]本開示で説明する技法はまた、命令を格納するコンピュータ可読記憶媒体などのコンピュータ可読媒体に格納、実施、又は符号化され得る。コンピュータ可読媒体内の埋め込まれた又は符号化された命令は、例えば、命令が1つ又は複数のプロセッサによって実行されるとき、1つ又は複数のプロセッサに本明細書で説明する技法を実行させることができる。コンピュータ可読記憶媒体としては、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、プログラム可能な読み取り専用メモリ(PROM)、消去可能プログラマブル読み取り専用メモリ(EPROM)、電気消去可能プログラマブル読み取り専用メモリ、フラッシュメモリ、ハードディスク、CD−ROM、フロッピー(登録商標)ディスク、カセット、磁気媒体、光媒体、又は有形の他のコンピュータ可読記憶媒体があり得る。
[0175]コンピュータ可読媒体としては、上記で列挙した媒体などの有形記憶媒体に相当するコンピュータ可読記憶媒体があり得る。コンピュータ可読媒体はまた、例えば、通信プロトコルに従って1つの場所から別の場所へのコンピュータプログラムの転送を容易にする何らかの媒体を含む通信媒体を備えることができる。このようにして、「コンピュータ可読媒体」という句は、一般に、(1)非一時的な有形のコンピュータ可読記憶媒体、及び(2)一時的信号又は搬送波などの非有形のコンピュータ可読通信媒体に対応することができる。
[0176]様々な態様及び例について説明してきた。しかしながら、次の特許請求の範囲の範囲から逸脱することなく本開示の構造又は技法に修正を加えることができる。
[0036]メモリコントローラ8は、システムメモリ10への及びこれからのデータの転送を促進する。例えば、メモリコントローラ8は、メモリ読み出しコマンド及びメモリ書き込みコマンドを受け取り、コンピュータ機器2内の構成要素にメモリサービスを提供するために、そのようなコマンドをメモリシステム10に対してサービス提供することができる。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信可能に結合される。メモリコントローラ8は、図1ではCPU6とメモリシステム10の両方と別個の処理モジュールであるように示されているが、他の例では、メモリコントローラ8の機能の幾つか又は全ては、CPU6とシステムメモリ10の一方又は両方上で実施されてよい。
[0064]画素処理パイプライン38は、ラスタライズされるプリミティブに関連付けられたソース画素を受け取り、そのソース画素に対して1つ又は複数の画素単位動作を実行するように構成される。本開示に従って、画素処理パイプライン38によって実行される画素単位動作としては、デスティネーションアルファ検査、テクスチャマッピング動作、及びデスティネーションアルファ値生成動作があり得る。デスティネーションアルファ値生成動作は、幾つかの例では、アルファブレンディング動作に対応することができる。幾つかの例では、個々のソース画素を処理するとき、画素処理パイプライン38は、テクスチャマッピング動作の前にデスティネーションアルファ検査を実行することができる。画素処理パイプライン38によって実行され得る他の画素単位動作としては、例えば、色計算、画素シェーディング、画素単位ライティング、フォグ処理、ブレンディング、画素所有権検査、ソースアルファ検査、ステンシル検査、デプステスト、シザーテスト(scissors test)、及び/又はスティップリング動作(stippling operations)がある。更に、画素処理パイプライン38は、1つ又は複数の画素シェーダプログラムを実行して、1つ又は複数の画素単位動作を実行することができる。画素処理パイプライン38によって生成される、結果として生じるデータは、本明細書では、デスティネーション画素データと呼ばれ、フレームバッファ40に格納され得る。デスティネーション画素データは、処理されたソース画素と同じ表示位置を有するフレームバッファ40内のデスティネーション画素と関連付けられ得る。デスティネーション画素データは、例えば、色値、デスティネーションアルファ値、デプス値などのデータを含むことができる。
[0072]追加の例では、グラフィックス処理パイプライン30は、ビンレンダリング法に従ってグラフィックス画像をレンダリングすることができ、ビンレンダリング法は、また、本明細書ではタイルレンダリング法と呼ばれ得る。ビンレンダリング法に従ってレンダリングするとき、グラフィックス処理パイプライン30は、プリミティブのバッチ(即ち複数のプリミティブ)を受け取り、結果として生じるグラフィックス画像へとレンダリングすることができる。プリミティブのバッチをレンダリングするために、結果として生じるグラフィックス画像は、複数の小さい部分(例えば、画素のタイル即ちビン)に細分されてよく、グラフィックス処理パイプライン30は、グラフィックス画像の各部分を別個のレンダリングパスとしてレンダリングすることができる。グラフィックス画像の特定の部分に対する単一のレンダリングパスの一部として、グラフィックス処理パイプライン30は、グラフィックス画像のデスティネーション画素の特定のサブセット(例えば、デスティネーション画素の特定のタイル)に対してプリミティブのバッチの全て又はサブセットをレンダリングすることができる。特定のレンダリングパスに対するデスティネーション画素の特定のサブセットは、本明細書ではレンダリングパスに対するデスティネーション画素範囲と呼ばれることがある。第1のデスティネーション画素範囲に対して第1のレンダリングパスを実行した後、グラフィックス処理パイプライン30は、第1のデスティネーション画素範囲と異なる第2のデスティネーション画素範囲に対して第2のレンダリングパスを実行することができる。グラフィックス処理パイプライン30は、あらゆるタイル即ちビンに関連付けられるプリミティブがレンダリングされるまで、タイル即ちビンを逐次的に横断することができる。
[0123]図6は、本開示の技法を実施するために使用され得る別の例示的なデスティネーションアルファ検査モジュール76を示すブロック図である。幾つかの例では、デスティネーションアルファ検査モジュール76は、図3及び図4に示されるデスティネーションアルファ検査モジュール52に取って代わることができる。デスティネーションアルファ検査モジュール76は、1つ又は複数のソース画素を受け取り、そのソース画素に対してデスティネーションアルファ検査を実行し、比較に応答して制御信号を選択的にアクティブにするように構成される。デスティネーションアルファ検査モジュール76は、デスティネーションアルファ取り出しモジュール70と、比較モジュール78と、閾値レジスタ74とを含む。図6に示されるように、デスティネーションアルファ検査モジュール76のアーキテクチャは、比較モジュール72が比較モジュール78によって置き換えられ、全てのソース画素が後続処理段に渡されることを除いて、図5に示されるデスティネーションアルファ検査モジュール68のアーキテクチャに類似している。図5及び図6の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
[0166]図15は、図14に示される技法を実施するために使用され得る、デスティネーションアルファ値を閾値と比較するための例示的な技法を示す流れ図である。幾つかの例では、図15に示される技法は、図14のプロセスボックス156を実施するために使用され得る。デスティネーションアルファ検査モジュール52は、デスティネーションアルファ値が閾値の値以下であるかどうか決定する(158)。デスティネーションアルファ値が閾値の値以下である(160の「はい」)場合、デスティネーションアルファ検査モジュール52は、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行すると決定する(162)。例えば、デスティネーションアルファ検査モジュール52は、画素処理パイプラインのステージテクスチャマッピングの前にソース画素を破棄することができる。逆に、デスティネーションアルファ値が閾値の値よりも小さくも等しくもない(160の「いいえ」)場合、第2の画素に対する1つ又は複数のテクスチャ値をバッファから取り出させない動作を実行しないと決定する(164)。例えば、デスティネーションアルファ検査モジュール52は、その画素を、そのうち1つがテクスチャマッピング段を含んでよい1つ又は複数の後続処理段に渡すことができる。
[0176]様々な態様及び例について説明してきた。しかしながら、次の特許請求の範囲の範囲から逸脱することなく本開示の構造又は技法に修正を加えることができる。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
[1] グラフィックスプロセッサを用いて、デスティネーションアルファ値をビンバッファから取り出すことであって、前記デスティネーションアルファ値が、第1のプリミティブに関連付けられた第1の画素の処理に応答して生成される、取り出すことと、前記グラフィックスプロセッサを用いて、前記デスティネーションアルファ値に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定することであって、前記第2の画素が、前記第1のプリミティブと異なる第2のプリミティブに関連付けられる、決定することと、前記動作を実行すると決定したことに応答して、前記グラフィックスプロセッサを用いて、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行することとを備える方法。
[2] 前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて前記第2の画素が画素処理パイプラインのテクスチャマッピング段に達する前に、前記第2の画素を前記画素処理パイプラインから破棄するかどうか決定することを備え、前記動作を実行することが、前記デスティネーションアルファ値に基づいて前記第2の画素を破棄すると決定したことに応答して、前記第2の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に、前記第2の画素を前記画素処理パイプラインから破棄することを備える、
[1]に記載の方法。
[3] 前記デスティネーションアルファ値に基づいて前記第2の画素を破棄しないと決定したことに応答して、前記第2の画素を、テクスチャマッピング段を含む1つ又は複数の処理段のセットに渡すことを更に備える、[2]に記載の方法。
[4] 前記動作が第1の動作であり、前記方法が、前記デスティネーションアルファ値に基づいて前記第1の動作を実行しないと決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる第2の動作を実行することを更に備える、[1]に記載の方法。
[5] 前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値を閾値の値と比較することと、前記デスティネーションアルファ値を前記閾値の値と比較することによって生成される結果に基づいて、前記動作を実行するかどうか決定することとを備える、[1]に記載の方法。
[6] 前記デスティネーションアルファ値を前記閾値の値と比較することが、前記デスティネーションアルファ値が前記閾値の値以下であるかどうか決定することを備える、[5]に記載の方法。
[7] 前記動作を実行することが、前記デスティネーションアルファ値が前記閾値の値以下であると決定したことに応答して前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない動作を実行することを備え、前記方法が、前記デスティネーションアルファ値が前記閾値の値以下でないと決定したことに応答して前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる動作を実行することを更に備える、[6]に記載の方法。
[8] 前記閾値の値が構成可能な閾値の値である、[5]に記載の方法。
[9] 前記グラフィックスプロセッサ及び前記ビンバッファが第1のマイクロチップ上に存在し、前記テクスチャバッファが、前記第1のマイクロチップと異なる第2のマイクロチップ上に存在する、[1]に記載の方法。
[10] 前記デスティネーションアルファ値を前記ビンバッファから取り出すことが、第1の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すことを備え、前記グラフィックスプロセッサが、前記第1の通信インターフェースと異なる第2の通信インターフェースを介して前記テクスチャバッファから前記1つ又は複数のテクスチャ値を取り出すように構成される、[1]に記載の方法。
[11] 前記第1の通信インターフェースが、前記第2の通信インターフェースの帯域幅よりも大きい帯域幅を有する、[10]に記載の方法。
[12] 前記ビンバッファが、フレームバッファに含まれるデータのサブセットを格納する、[1]に記載の方法。
[13] グラフィックス画像が複数のデスティネーション画素を備え、前記グラフィックスプロセッサが、複数のレンダリングパスにおいて前記グラフィックス画像をレンダリングするように構成され、前記レンダリングパスの各々が前記デスティネーション画素のそれぞれのサブセットに関連付けられ、前記ビンバッファの容量が、前記グラフィックス画像に関連付けられた前記複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さく、各レンダリングパスに対して、前記ビンバッファが、前記それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納する、[1]に記載の方法。
[14] 前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて、ステンシル検査ブロックとz/ステンシル検査ブロックのうち1つを用いて、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記バッファから取り出させない前記動作を実行するかどうか決定することを備える、[1]に記載の方法。
[15] 前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて、シェーダユニット上で実行されるシェーダプログラムを用いて、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記バッファから取り出させない前記動作を実行するかどうか決定することを備える、[1]に記載の方法。
[16] 前記第2の画素がソース画素であり、前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて、前記ソース画素に対応するデスティネーション画素が、前記デスティネーション画素に対応する1つ又は複数のそれまでに処理されたソース画素により不透明であるかどうか決定することを備える、[1]に記載の方法。
[17] 前記第2の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた1つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、[1]に記載の方法。
[18] デスティネーションアルファ値をビンバッファから取り出すように構成されたデスティネーションアルファ検査モジュールであって、前記デスティネーションアルファ値が、第1のプリミティブに関連付けられた第1の画素の処理に応答して生成され、前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定し、前記動作を実行すると決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するように更に構成され、前記第2の画素が、前記第1のプリミティブと異なる第2のプリミティブに関連付けられる、デスティネーションアルファ検査モジュール
を備える、グラフィックス処理機器。
[19] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記第2の画素が画素処理パイプラインのテクスチャマッピング段に達する前に前記第2の画素を前記画素処理パイプラインから破棄するかどうか決定し、前記デスティネーションアルファ値に基づいて前記第2の画素を破棄すると決定したことに応答して、前記第2の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に前記第2の画素を前記画素処理パイプラインから破棄するように更に構成される、[18]に記載の機器。
[20] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて前記第2の画素を破棄しないと決定したことに応答して、前記第2の画素を、テクスチャマッピング段を含む1つ又は複数の処理段のセットに渡すように更に構成される、[19]に記載の機器。
[21] 前記動作が第1の動作であり、前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて前記第1の動作を実行しないと決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる第2の動作を実行するように更に構成される、[18]に記載の機器。
[22] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値を閾値の値と比較し、前記デスティネーションアルファ値を前記閾値の値と比較することによって生成される結果に基づいて前記動作を実行するかどうか決定するように更に構成される、[18]に記載の機器。
[23] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値が前記閾値の値以下であるかどうか決定するように更に構成される、[22]に記載の機器。
[24] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値が前記閾値の値以下であると決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない動作を実行し、前記デスティネーションアルファ値が前記閾値の値以下でないと決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる動作を実行するように更に構成される、[23]に記載の機器。
[25] 前記閾値の値が構成可能な閾値の値である、[22]に記載の機器。
[26] 前記グラフィックス処理機器及び前記ビンバッファが第1のマイクロチップ上に存在し、前記テクスチャバッファが、前記第1のマイクロチップと異なる第2のマイクロチップ上に存在する、[18]に記載の機器。
[27] 前記デスティネーションアルファ検査モジュールが、第1の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すように更に構成され、前記グラフィックス処理機器が、前記第1の通信インターフェースと異なる第2の通信インターフェースを介して前記テクスチャバッファから前記1つ又は複数のテクスチャ値を取り出すように構成される、[18]に記載の機器。
[28] 前記第1の通信インターフェースが、前記第2の通信インターフェースの帯域幅よりも大きい帯域幅を有する、[27]に記載の機器。
[29] 前記ビンバッファが、フレームバッファに含まれるデータのサブセットを格納する、[18]に記載の機器。
[30] グラフィックス画像が複数のデスティネーション画素を備え、前記グラフィックス処理機器が、複数のレンダリングパスにおいて前記グラフィックス画像をレンダリングするように構成され、前記レンダリングパスの各々が前記デスティネーション画素のそれぞれのサブセットに関連付けられ、前記ビンバッファの容量が、前記グラフィックス画像に関連付けられた前記複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さく、各レンダリングパスに対して、前記ビンバッファが、前記それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納する、[18]に記載の機器。
[31] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうか決定するように構成されたステンシル検査ブロックとz/ステンシル検査ブロックのうち1つ
を備える、[18]に記載の機器。
[32] 前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうか決定するシェーダプログラムを実行するように構成されたシェーダユニット
を備える、[18]に記載の機器。
[33] 前記第2の画素がソース画素であり、前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記ソース画素に対応するデスティネーション画素が、前記デスティネーション画素に対応する1つ又は複数のそれまでに処理されたソース画素により不透明であるかどうか決定するように更に構成される、[18]に記載の機器。
[34] 前記第2の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた1つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、[18]に記載の機器。
[35] デスティネーションアルファ値をビンバッファから取り出すための手段であって、前記デスティネーションアルファ値が、第1のプリミティブに関連付けられた第1の画素の処理に応答して生成される、取り出すための手段と、前記デスティネーションアルファ値に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定するための手段であって、前記第2の画素が、前記第1のプリミティブと異なる第2のプリミティブに関連付けられる、決定するための手段と、前記動作を実行すると決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するための手段とを備える装置。
[36] 前記動作を実行するかどうか決定するための前記手段が、前記デスティネーションアルファ値に基づいて前記第2の画素が画素処理パイプラインのテクスチャマッピング段に達する前に、前記第2の画素を前記画素処理パイプラインから破棄するかどうか決定するための手段を備え、前記動作を実行するための前記手段が、前記デスティネーションアルファ値に基づいて前記第2の画素を破棄すると決定したことに応答して、前記第2の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に、前記第2の画素を前記画素処理パイプラインから破棄するための手段を備える、[35]に記載の装置。
[37] 前記デスティネーションアルファ値に基づいて前記第2の画素を破棄しないと決定したことに応答して、前記第2の画素を、テクスチャマッピング段を含む1つ又は複数の処理段のセットに渡すための手段
を更に備える、[36]に記載の装置。
[38] 前記第2の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた1つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、[35]に記載の装置。
[39] 前記デスティネーションアルファ値を前記ビンバッファから取り出すための前記手段が、第1の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すための手段を備え、前記装置が、前記第1の通信インターフェースと異なる第2の通信インターフェースを介して前記テクスチャバッファから前記1つ又は複数のテクスチャ値を取り出すための手段を更に備える、[35]に記載の装置。
[40] 前記第1の通信インターフェースが、前記第2の通信インターフェースの帯域幅よりも大きい帯域幅を有する、[39]に記載の装置。
[41] 1つ又は複数のプロセッサに、デスティネーションアルファ値をビンバッファから取り出すことであって、前記デスティネーションアルファ値が、第1のプリミティブに関連付けられた第1の画素の処理に応答して生成される、取り出すことと、前記デスティネーションアルファ値に基づいて、第2の画素に対する1つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定することであって、前記第2の画素が、前記第1のプリミティブと異なる第2のプリミティブに関連付けられる、決定することと、前記動作を実行すると決定したことに応答して、前記第2の画素に対する前記1つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行することとを行わせる
命令を備える、コンピュータ可読記憶媒体。
[42] 前記1つ又は複数のプロセッサに前記動作を実行するかどうか決定させる前記命令が、前記1つ又は複数のプロセッサに、前記デスティネーションアルファ値に基づいて、前記第2の画素が画素処理パイプラインのテクスチャマッピング段に達する前に前記第2の画素を前記画素処理パイプラインから破棄するかどうか決定させる命令を備え、前記1つ又は複数のプロセッサに前記動作を実行させる前記命令が、前記1つ又は複数のプロセッサに、前記デスティネーションアルファ値に基づいて前記第2の画素を破棄すると決定したことに応答して、前記第2の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に前記第2の画素を前記画素処理パイプラインから破棄させる命令を備える、[41]に記載のコンピュータ可読記憶媒体。
[43] 前記1つ又は複数のプロセッサに、前記デスティネーションアルファ値に基づいて前記第2の画素を破棄しないと決定したことに応答して、前記第2の画素を、テクスチャマッピング段を含む1つ又は複数の処理段のセットに渡させる
命令を更に備える、[42]に記載のコンピュータ可読記憶媒体。
[44] 前記第2の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた1つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、[41]に記載のコンピュータ可読記憶媒体。
[45] 前記1つ又は複数のプロセッサに前記デスティネーションアルファ値を前記ビンバッファから取り出させる前記命令が、前記1つ又は複数のプロセッサに、第1の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出させる命令を備え、前記1つ又は複数のプロセッサが、前記第1の通信インターフェースと異なる第2の通信インターフェースを介して前記テクスチャバッファから前記1つ又は複数のテクスチャ値を取り出すように構成される、[41]に記載のコンピュータ可読記憶媒体。
[46] 前記第1の通信インターフェースが、前記第2の通信インターフェースの帯域幅よりも大きい帯域幅を有する、[45]に記載のコンピュータ可読記憶媒体。