(57)【特許請求の範囲】
【請求項１】
グラフィックスプロセッサのグラフィックスパイプラインに含まれるラスタライゼーションブロックが、第１のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブをラスタライズすることと、前記第１のプリミティブに対応する前記１つ以上のソース画素が第１のソース画素を含む、
前記ラスタライゼーションブロックが、第２のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブと異なる前記第２のプリミティブをラスタライズすることと、前記第２のプリミティブに対応する前記１つ以上のソース画素が第２のソース画素を含む、
前記グラフィックスプロセッサの前記グラフィックスパイプラインに含まれる画素処理パイプラインが、デスティネーションアルファ値をビンバッファから取り出すことと、前記デスティネーションアルファ値が、前記ラスタライゼーションブロックによって生成され前記第１のプリミティブに関連付けられた前記第１のソース画素の処理に応答して生成される、
前記画素処理パイプラインが、前記デスティネーションアルファ値に基づいて、前記ラスタライゼーションブロックによって生成される前記第２のソース画素に対する１つ以上のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうかを決定することと、前記第２のソース画素が、前記第２のプリミティブに関連付けられ、前記グラフィックスプロセッサ及び前記ビンバッファが第１のマイクロチップ上に存在し、前記テクスチャバッファが、前記第１のマイクロチップと異なる第２のマイクロチップ上に存在する、
条件が満たされているかどうかを決定するために前記デスティネーションアルファ値を評価することと、前記条件が満たされている場合、前記画素処理パイプラインが、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行することと
を備える方法。
【請求項２】
前記動作を実行するかどうかを決定することが、前記デスティネーションアルファ値に基づいて前記第２のソース画素が前記画素処理パイプラインのテクスチャマッピングステージに達する前に、前記第２のソース画素を前記画素処理パイプラインから破棄するかどうかを決定することを備え、
前記動作を実行することが、前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄すると決定したことに応答して、前記第２のソース画素が前記画素処理パイプラインのテクスチャマッピングステージに達する前に、前記第２のソース画素を前記画素処理パイプラインから破棄することを備える、
請求項１に記載の方法。
【請求項３】
前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄しないと決定したことに応答して、前記第２のソース画素を、テクスチャマッピングステージを含む１つ以上の処理ステージのセットに渡すこと
をさらに備える、請求項２に記載の方法。
【請求項４】
前記動作が第１の動作であり、前記方法が、
前記第１の動作を実行しないと決定したことに応答して、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させる第２の動作を実行すること
をさらに備える、請求項１に記載の方法。
【請求項５】
前記動作を実行するかどうかを決定することが、
前記デスティネーションアルファ値をしきい値の値と比較することと、
前記デスティネーションアルファ値を前記しきい値の値と比較することによって生成される結果に基づいて、前記動作を実行するかどうかを決定することと
を備える、請求項１に記載の方法。
【請求項６】
前記デスティネーションアルファ値を前記しきい値の値と比較することが、前記デスティネーションアルファ値が前記しきい値の値以下であるかどうかを決定することを備える、請求項５に記載の方法。
【請求項７】
前記動作を実行することが、前記デスティネーションアルファ値が前記しきい値の値以下であると決定したことに応答して前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない動作を実行することを備え、
前記方法が、前記デスティネーションアルファ値が前記しきい値の値以下でないと決定したことに応答して前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させる動作を実行することをさらに備える、
請求項６に記載の方法。
【請求項８】
前記しきい値の値が構成可能なしきい値の値である、請求項５に記載の方法。
【請求項９】
前記デスティネーションアルファ値を前記ビンバッファから取り出すことが、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すことを備え、
前記グラフィックスプロセッサが、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ以上のテクスチャ値を取り出すように構成される、
請求項１に記載の方法。
【請求項１０】
前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、請求項９に記載の方法。
【請求項１１】
前記ビンバッファが、フレームバッファに含まれるデータのサブセットを格納する、請求項１に記載の方法。
【請求項１２】
グラフィックス画像が複数のデスティネーション画素を備え、前記グラフィックスプロセッサが、複数のレンダリングパスにおいて前記グラフィックス画像をレンダリングするように構成され、前記レンダリングパスの各々が前記デスティネーション画素のそれぞれのサブセットに関連付けられ、前記ビンバッファの容量が、前記グラフィックス画像に関連付けられた前記複数のデスティネーション画素のすべてに対する画素データを格納するために必要とされる最小容量よりも小さく、各レンダリングパスに対して、前記ビンバッファが、前記それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納する、請求項１に記載の方法。
【請求項１３】
前記動作を実行するかどうかを決定することが、
前記デスティネーションアルファ値に基づいて、ステンシルテスティングブロックまたはｚ／ステンシルテスティングブロックのうちの１つを用いて、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうかを決定すること
を備える、請求項１に記載の方法。
【請求項１４】
前記動作を実行するかどうかを決定することが、
前記デスティネーションアルファ値に基づいて、シェーダユニット上で実行されるシェーダプログラムを用いて、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうかを決定すること
を備える、請求項１に記載の方法。
【請求項１５】
前記動作を実行するかどうかを決定することが、
前記デスティネーションアルファ値に基づいて、前記第２のソース画素に対応するデスティネーション画素が、前記デスティネーション画素に対応する１つ以上のそれまでに処理されたソース画素により不透明であるかどうかを決定すること
を備える、請求項１に記載の方法。
【請求項１６】
前記第２のソース画素が、画素位置に関連付けられ、前記第２のソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ以上のそれまでに処理されたソース画素によって少なくとも一部は決定される、請求項１に記載の方法。
【請求項１７】
第１のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブをラスタライズし、第２のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブと異なる前記第２のプリミティブをラスタライズするように構成されたラスタライゼーションブロックと、前記第１のプリミティブに対応する前記１つ以上のソース画素が第１のソース画素を含み、前記第２のプリミティブに対応する前記１つ以上のソース画素が第２のソース画素を含む、
デスティネーションアルファ値をビンバッファから取り出すように構成されたデスティネーションアルファテスティングモジュールと、前記デスティネーションアルファ値が、前記ラスタライゼーションブロックによって生成され前記第１のプリミティブに関連付けられた前記第１のソース画素の処理に応答して生成され、前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値に基づいて、前記ラスタライゼーションブロックによって生成された前記第２のソース画素に対する１つ以上のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定し、条件が満たされているかどうかを決定するために前記デスティネーションアルファ値を評価し、前記条件が満たされている場合、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するようにさらに構成され、前記第２のソース画素が、前記第２のプリミティブに関連付けられる、
を備え、
前記デスティネーションアルファテスティングモジュールが画素処理パイプラインに含まれ、前記ラスタライゼーションブロック及び前記画素処理パイプラインがグラフィックス処理装置のグラフィックスパイプラインに含まれ、前記グラフィックス処理装置及び前記ビンバッファが第１のマイクロチップ上に存在し、前記テクスチャバッファが、前記第１のマイクロチップと異なる第２のマイクロチップ上に存在する、
グラフィックス処理装置。
【請求項１８】
前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値に基づいて、前記第２のソース画素が前記画素処理パイプラインのテクスチャマッピングステージに達する前に前記第２のソース画素を前記画素処理パイプラインから破棄するかどうか決定し、前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄すると決定したことに応答して、前記第２のソース画素が前記画素処理パイプラインのテクスチャマッピングステージに達する前に前記第２のソース画素を前記画素処理パイプラインから破棄するようにさらに構成される、請求項１７に記載の装置。
【請求項１９】
前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄しないと決定したことに応答して、前記第２のソース画素を、テクスチャマッピングステージを含む１つ以上の処理ステージのセットに渡すようにさらに構成される、請求項１８に記載の装置。
【請求項２０】
前記動作が第１の動作であり、前記デスティネーションアルファテスティングモジュールが、前記第１の動作を実行しないと決定したことに応答して、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させる第２の動作を実行するようにさらに構成される、請求項１７に記載の装置。
【請求項２１】
前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値をしきい値の値と比較し、前記デスティネーションアルファ値を前記しきい値の値と比較することによって生成される結果に基づいて前記動作を実行するかどうかを決定するようにさらに構成される、請求項１７に記載の装置。
【請求項２２】
前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値が前記しきい値の値以下であるかどうかを決定するようにさらに構成される、請求項２１に記載の装置。
【請求項２３】
前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値が前記しきい値の値以下であると決定したことに応答して、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない動作を実行し、前記デスティネーションアルファ値が前記しきい値の値以下でないと決定したことに応答して、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させる動作を実行するようにさらに構成される、請求項２２に記載の装置。
【請求項２４】
前記しきい値の値が構成可能なしきい値の値である、請求項２１に記載の装置。
【請求項２５】
前記デスティネーションアルファテスティングモジュールが、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すようにさらに構成され、
前記グラフィックス処理装置が、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ以上のテクスチャ値を取り出すように構成される、
請求項１７に記載の装置。
【請求項２６】
前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、請求項２５に記載の装置。
【請求項２７】
前記ビンバッファが、フレームバッファに含まれるデータのサブセットを格納する、請求項１７に記載の装置。
【請求項２８】
グラフィックス画像が複数のデスティネーション画素を備え、前記グラフィックス処理装置が、複数のレンダリングパスにおいて前記グラフィックス画像をレンダリングするように構成され、前記レンダリングパスの各々が前記デスティネーション画素のそれぞれのサブセットに関連付けられ、前記ビンバッファの容量が、前記グラフィックス画像に関連付けられた前記複数のデスティネーション画素のすべてに対する画素データを格納するために必要とされる最小容量よりも小さく、各レンダリングパスに対して、前記ビンバッファが、前記それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納する、請求項１７に記載の装置。
【請求項２９】
前記デスティネーションアルファテスティングモジュールが、
前記デスティネーションアルファ値に基づいて、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうかを決定するように構成されたステンシルテスティングブロックまたはｚ／ステンシルテスティングブロックのうち１つ
を備える、請求項１７に記載の装置。
【請求項３０】
前記デスティネーションアルファテスティングモジュールが、
前記デスティネーションアルファ値に基づいて、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうかを決定するシェーダプログラムを実行するように構成されたシェーダユニット
を備える、請求項１７に記載の装置。
【請求項３１】
前記デスティネーションアルファテスティングモジュールが、前記デスティネーションアルファ値に基づいて、前記第２のソース画素に対応するデスティネーション画素が、前記デスティネーション画素に対応する１つ以上のそれまでに処理されたソース画素により不透明であるかどうかを決定するようにさらに構成される、請求項１７に記載の装置。
【請求項３２】
前記第２のソース画素が、画素位置に関連付けられ、前記第２のソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ以上のそれまでに処理されたソース画素によって少なくとも一部は決定される、請求項１７に記載の装置。
【請求項３３】
第１のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブをラスタライズするための手段と、前記第１のプリミティブに対応する前記１つ以上のソース画素が第１のソース画素を含む、
第２のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブと異なる前記第２のプリミティブをラスタライズするための手段と、前記第２のプリミティブに対応する前記１つ以上のソース画素が第２のソース画素を含む、
デスティネーションアルファ値をビンバッファから取り出すための手段と、前記デスティネーションアルファ値が、前記第１のプリミティブをラスタライズするための前記手段によって生成され前記第１のプリミティブに関連付けられた前記第１のソース画素の処理に応答して生成される、
前記デスティネーションアルファ値に基づいて、前記第２のプリミティブをラスタライズするための前記手段によって生成される前記第２のソース画素に対する１つ以上のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうかを決定するための手段と、前記第２のソース画素が前記第２のプリミティブに関連付けられ、前記第１のプリミティブ及び前記ビンバッファをラスタライズするための手段が第１のマイクロチップ上に存在し、前記テクスチャバッファが、前記第１のマイクロチップと異なる第２のマイクロチップ上に存在する、
条件が満たされているかどうかを決定するために前記デスティネーションアルファ値を評価するための手段と、前記条件が満たされている場合、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するための手段と
を備える装置。
【請求項３４】
前記動作を実行するかどうかを決定するための前記手段が、前記デスティネーションアルファ値に基づいて前記第２のソース画素が画素処理パイプラインのテクスチャマッピングステージに達する前に、前記第２のソース画素を前記画素処理パイプラインから破棄するかどうかを決定するための手段を備え、
前記動作を実行するための前記手段が、前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄すると決定したことに応答して、前記第２のソース画素が前記画素処理パイプラインのテクスチャマッピングステージに達する前に、前記第２のソース画素を前記画素処理パイプラインから破棄するための手段を備える、
請求項３３に記載の装置。
【請求項３５】
前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄しないと決定したことに応答して、前記第２のソース画素を、テクスチャマッピングステージを含む１つ以上の処理ステージのセットに渡すための手段
をさらに備える、請求項３４に記載の装置。
【請求項３６】
前記第２のソース画素が、画素位置に関連付けられ、前記第２のソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ以上のそれまでに処理されたソース画素によって少なくとも一部は決定される、請求項３３に記載の装置。
【請求項３７】
前記デスティネーションアルファ値を前記ビンバッファから取り出すための前記手段が、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すための手段を備え、
前記装置が、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ以上のテクスチャ値を取り出すための手段をさらに備える、
請求項３３に記載の装置。
【請求項３８】
前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、請求項３７に記載の装置。
【請求項３９】
１つ以上のプロセッサに、
グラフィックスパイプラインに含まれるラスタライゼーションブロックを用いて、第１のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブをラスタライズすることと、前記第１のプリミティブに対応する前記１つ以上のソース画素が第１のソース画素を含む、
前記ラスタライゼーションブロックを用いて、第２のプリミティブに対応する１つ以上のソース画素を生成するために前記第１のプリミティブと異なる前記第２のプリミティブをラスタライズすることと、前記第２のプリミティブに対応する前記１つ以上のソース画素が第２のソース画素を含む、
デスティネーションアルファ値をビンバッファから取り出すことと、前記デスティネーションアルファ値が、前記ラスタライゼーションブロックによって生成され前記第１のプリミティブに関連付けられた前記第１のソース画素の処理に応答して生成される、
前記デスティネーションアルファ値に基づいて、前記ラスタライゼーションブロックによって生成される前記第２のソース画素に対する１つ以上のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうかを決定することと、前記第２のソース画素が、前記第２のプリミティブに関連付けられ、前記グラフィックスパイプライン及び前記ビンバッファが第１のマイクロチップ上に存在し、前記テクスチャバッファが、前記第１のマイクロチップと異なる第２のマイクロチップ上に存在する、
条件が満たされているかどうかを決定するために前記デスティネーションアルファ値を評価することと、前記条件が満たされている場合、前記第２のソース画素に対する前記１つ以上のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行することとを行わせる
命令を備える、コンピュータ可読記憶媒体。
【請求項４０】
前記１つ以上のプロセッサに前記動作を実行するかどうか決定させる前記命令が、前記１つ以上のプロセッサに、前記デスティネーションアルファ値に基づいて、前記第２のソース画素が画素処理パイプラインのテクスチャマッピングステージに達する前に前記第２のソース画素を前記画素処理パイプラインから破棄するかどうか決定させる命令を備え、
前記１つ以上のプロセッサに前記動作を実行させる前記命令が、前記１つ以上のプロセッサに、前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄すると決定したことに応答して、前記第２のソース画素が前記画素処理パイプラインのテクスチャマッピングステージに達する前に前記第２のソース画素を前記画素処理パイプラインから破棄させる命令を備える、
請求項３９に記載のコンピュータ可読記憶媒体。
【請求項４１】
前記１つ以上のプロセッサに、
前記デスティネーションアルファ値に基づいて前記第２のソース画素を破棄しないと決定したことに応答して、前記第２のソース画素を、テクスチャマッピングステージを含む１つ以上の処理ステージのセットに渡させる
命令をさらに備える、請求項４０に記載のコンピュータ可読記憶媒体。
【請求項４２】
前記第２のソース画素が、画素位置に関連付けられ、前記第２のソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ以上のそれまでに処理されたソース画素によって少なくとも一部は決定される、請求項３９に記載のコンピュータ可読記憶媒体。
【請求項４３】
前記１つ以上のプロセッサに前記デスティネーションアルファ値を前記ビンバッファから取り出させる前記命令が、前記１つ以上のプロセッサに、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出させる命令を備え、
前記１つ以上のプロセッサが、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ以上のテクスチャ値を取り出すように構成される、
請求項３９に記載のコンピュータ可読記憶媒体。
【請求項４４】
前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、請求項４３に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、グラフィックス処理システムに関し、より詳細には、グラフィックス処理システムにおける画素の処理に関する。
【背景技術】
【０００２】
[0002]コンピュータ機器は、多くの場合、グラフィックス処理ユニット（ＧＰＵ）を利用して、表示器上へのグラフィックスデータのレンダリングを加速させる。そのようなコンピュータ機器としては、例えば、コンピュータワークステーション、モバイル電話、埋め込みシステム、パーソナルコンピュータ、及びビデオゲームコンソールがあり得る。ＧＰＵはまた、ウィンドウ構成動作を実行するためにウィンドウベースのオペレーティングシステムによって使用される。ウィンドウベースのオペレーティングシステムでは、ユーザが幾つかの異なるオープンアプリケーションプログラムを操作し切り換えることを可能にするウィンドウィングシステムを含むグラフィカルユーザインターフェース（ＧＵＩ）を使用する。これらのアプリケーションプログラムの各々は、それ自体のアプリケーションウィンドウで実行され得る。そのようなシステムでは、個々のウィンドウは、ユーザによって様々な重複構成及び／又は非重複構成に配され、サイズ変更されてよい。
【０００３】
[0003]ウィンドウマネージャは、ウィンドウベースのオペレーティングシステムにおいてウィンドウの配置と外観の両方を制御するために使用される、一種のソフトウェアプログラムである。ウィンドウマネージャはまた、ＧＰＵと相互作用して、ウィンドウを画面に描画させ、定期的に、又はウィンドウのうちどれかの位置、サイズ、又は外観の変化に応答してのいずれかにより、ウィンドウをリフレッシュする。各アプリケーションは、一般的には、アプリケーションのウィンドウの現在の外観を表したものをシステムメモリにサーフェスとして記憶する。サーフェスは、画素のアレイに対する色データの集合を指すことができる。表示器をリフレッシュするために、ウィンドウマネージャは、一般的には、全てのオープンアプリケーションウィンドウに関連するサーフェスのうち全てを画面上に再描画する。所与の時点で表示器上に表示されるサーフェスのセット全体は、互いと重複するサーフェスを含むので、ウィンドウマネージャは、一般的には、複数の独立したサーフェスを単一の画面サーフェスに変換して表示器上で提示するサーフェス構成動作を実行する。サーフェス構成を実行するための１つの技法は、例えば画家のアルゴリズムに従って、背景から前景への順（back-to-front order）に画面上にサーフェスを描画することを含む。このようにして、２つのサーフェスが重複部分を含む場合、最前景サーフェスの重複部分が最背景サーフェスの重複部分の上に描画され、それによって、閲覧者が見ることを期待するように、第１のサーフェスの重複部分を見えるようにし、第２のサーフェスの重複部分を見えないようにする。従って、ウィンドウマネージャは、各アプリケーションサーフェスを、見えるにせよ見えないにせよ、特定の順序で画面に描画することによって、サーフェス構成を実行することができる。
【０００４】
[0004]各アプリケーションサーフェスを描画するために、ウィンドウマネージャは、ＧＰＵに、そのサーフェスに関連付けられた１つ又は複数のプリミティブをレンダリングさせ、それらのプリミティブにテクスチャの様々な組合せを適用して、サーフェスに所望の外観を与えることができる。プリミティブの各々に適用されるテクスチャは、プリミティブに関連付けられたアプリケーションサーフェスに含まれる色値に対応する及び／又はその値から得られるテクスチャ値によって定義され得る。更に、ウィンドウマネージャは、テクスチャ値を修正し及び／又は追加テクスチャを適用して、特定の視覚効果、例えば、シャドウ、境界線、透明性、調光などを達成することができる。プリミティブに適用される各テクスチャに対して、ＧＰＵは、一般的には、そのプリミティブに関連付けられた画素ごとにテクスチャ値にオフチップメモリからアクセスし、その結果、大量のメモリ帯域幅を使用することがある。
【発明の概要】
【０００５】
[0005]本開示は、グラフィックス処理システムにおけるメモリアクセス帯域幅をデスティネーションアルファ値（目標アルファ値）に基づいて減少させるための技法について説明する。本開示の技法に従って個々のソース画素を処理するとき、デスティネーションアルファ検査モジュールは、ソース画素に関連付けられたデスティネーションアルファ値をビンバッファ（bin buffer）から取り出し、このデスティネーションアルファ値に基づいて、ソース画素に対するテクスチャ値をテクスチャバッファから取り出させるか否か決定することができる。幾つかの例では、デスティネーションアルファ値は、ソース画素と同じ画面位置を有するデスティネーション画素の不透明度を示すことができる。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、本開示の技法は、従来のグラフィックスシステムにおいてテクスチャバッファに対して一般的に行われるソース読み取りの回数と比較して、テクスチャバッファに対して行われることを必要とするソース読み取りの回数を効果的に減少させることができる。このようにして、グラフィックス処理システム用のメモリアクセス帯域幅は減少され得る。
【０００６】
[0006]一例では、本開示は、グラフィックスプロセッサを用いて、デスティネーションアルファ値をビンバッファから取り出すことを含む方法について説明する。デスティネーションアルファ値は、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される。この方法は、グラフィックスプロセッサを用いて、デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定することを更に含む。第２の画素は、第１のプリミティブと異なる第２のプリミティブに関連付けられる。この方法は、動作を実行すると決定したことに応答して、グラフィックスプロセッサを用いて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行することを更に含む。
【０００７】
[0007]別の例では、本開示は、デスティネーションアルファ値をビンバッファから取り出すように構成されたデスティネーションアルファ検査モジュールを含むグラフィックス処理機器について説明する。デスティネーションアルファ値は、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される。デスティネーションアルファ検査モジュールは、デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうかを決定し、その動作を実行すると決定したことに応答して、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するように更に構成される。第２の画素は、第１のプリミティブと異なる第２のプリミティブに関連付けられる。
【０００８】
[0008]別の例では、本開示は、デスティネーションアルファ値をビンバッファから取り出すための手段を含む装置について説明する。デスティネーションアルファ値は、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される。この装置は、デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定するための手段を更に含む。第２の画素は、第１のプリミティブと異なる第２のプリミティブに関連付けられる。この装置は、動作を実行すると決定したことに応答して、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するための手段を更に含む。
【０００９】
[0009]別の例では、本開示は、１つ又は複数のプロセッサにデスティネーションアルファ値をビンバッファから取り出させる命令を含むコンピュータ可読媒体について説明する。デスティネーションアルファ値は、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される。このコンピュータ可読媒体は、１つ又は複数のプロセッサに、デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定させる命令を更に備える。第２の画素は、第１のプリミティブと異なる第２のプリミティブに関連付けられる。コンピュータ可読媒体は、１つ又は複数のプロセッサに、動作を実行すると決定したことに応答して第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行させる命令を更に備える。
【００１０】
[0010]本開示の１つ又は複数の例の詳細が、添付の図面及び以下の説明に示されている。本開示のその他の特徴、目的、及び利点は、説明及び図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施するために使用され得る例示的なコンピュータ機器を示すブロック図。
【図２】[0012]図１のコンピュータ機器のＣＰＵ、ＧＰＵ、及びシステムメモリを更に詳細に示すブロック図。
【図３】[0013]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施するために使用され得る例示的な画素処理パイプラインを示すブロック図。
【図４】[0014]図３の画素処理パイプラインを実施するために使用され得る例示的な画素処理パイプラインを示すブロック図。
【図５】[0015]本開示の技法を実施するために使用され得る例示的なデスティネーションアルファ検査モジュールを示すブロック図。
【図６】[0016]本開示の技法を実施するために使用され得る別の例示的なデスティネーションアルファ検査モジュールを示すブロック図。
【図７】[0017]構成可能なステンシル検査ブロックを使用して、デスティネーションアルファ検査を実行し、本開示の選択的テクスチャ値取り出し法を実施する例示的な画素処理パイプラインを示すブロック図。
【図８】[0018]図７の画素処理パイプラインを実施するために使用され得る例示的な構成可能なステンシル検査ブロックを示すブロック図。
【図９】[0019]構成可能なｚ／ステンシル検査ブロックを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査を実行する例示的な画素処理パイプラインを示すブロック図。
【図１０】[0020]図９の画素処理パイプラインを実施するために使用され得る例示的な構成可能なｚ／ステンシル検査ブロックを示すブロック図。
【図１１】[0021]プログラム可能なシェーダユニットを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査を実行する例示的な画素処理パイプラインを示すブロック図。
【図１２】[0022]プログラム可能なシェーダユニットを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査及びテクスチャマッピングを実行する別の例示的な画素処理パイプラインを示すブロック図。
【図１３】[0023]本開示に従ってデスティネーションアルファ値に基づいてソース画素に対するテクスチャ値を選択的に取り出すための例示的な技法を示す流れ図。
【図１４】[0024]図１３に示される技法を実施するために使用され得る、デスティネーションアルファ検査を実行するための例示的な技法を示す流れ図。
【図１５】[0025]図１４に示される技法を実施するために使用され得る、デスティネーションアルファ値を閾値と比較するための例示的な技法を示す流れ図。
【図１６】[0026]本開示に従ってデスティネーションアルファ値に基づく選択的テクスチャ値取り出しレンダリングモードを自動的に有効にするための例示的な技法を示す流れ図。
【発明を実施するための形態】
【００１２】
[0027]本開示は、グラフィックス処理システムにおけるメモリアクセス帯域幅をデスティネーションアルファ値に基づいて減少させるための技法について説明する。本開示の技法に従って個々のソース画素を処理するとき、デスティネーションアルファ検査モジュールは、ソース画素に関連付けられたデスティネーションアルファ値に基づいて、そのソース画素に対するテクスチャ値をバッファから取り出させるかどうか決定することができる。幾つかの例では、デスティネーションアルファ値は、ソース画素と同じ画面位置を有するデスティネーション画素の不透明度のレベルを示すことができる。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、本開示の技法は、従来のグラフィックスシステムにおいてテクスチャバッファに対して一般的に行われるソース読み取りの回数と比較して、テクスチャバッファに対して行われることを必要とするソース読み取りの回数を効果的に減少させることができる。このようにして、グラフィックス処理システム用のメモリアクセス帯域幅は減少され得る。
【００１３】
[0028]本開示の技法は、例えば逆の画家のアルゴリズムに従ってウィンドウ構成が前景から背景に（front-to-back）実行されるグラフィックス処理環境において特に有用であり得る。そのような環境では、デスティネーション画素が、１つ又は複数のそれまでに処理されたサーフェスにより、すでに不透明である場合、前景から背景へのレンダリングにより、その同じ画素位置に対して処理される何らかの後続のソース画素は、その位置に対してそれまでに処理された画素の背後に位置しており、従って見えないので、そのようなソース画素は、デスティネーション画素の全体的な外観に寄与しない。従って、その画素位置に対する何らかの後続のソース画素は、レンダリングされる画像の外観に影響を与えることなく、安全に破棄され得る。従って、前景から背景への構成環境において本開示の技法を利用することによって、本開示の技法は、幾つかの例では、結果として生じるレンダリング画像の品質を犠牲にすることなくグラフィックス処理システムに対するメモリアクセス帯域幅を減少させるために使用され得る。
【００１４】
[0029]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、特に、ビンレンダリングの状況、例えば、グラフィックス画像が複数の小さい部分（例えば、デスティネーション画素、画素のタイル、又はビンのサブセット）に細分され画像の各部分が別個のレンダリングパスとしてレンダリングされるレンダリング状況で有用であり得る。そのようなレンダリング状況では、特定のビンに対するデスティネーションアルファ値は、そのような値がデスティネーションアルファ検査モジュールによって必要とされるとき、ビンバッファを介してアクセス可能であってよい。これによって、フレームバッファからデスティネーションアルファ値にアクセスする必要性が緩和され、フレームバッファは、ビンバッファよりも低い利用可能帯域幅を持つメモリ内にあってよい。従って、デスティネーションアルファ値がビンバッファから取り出されるビニング（binning）状況において本開示の技法を実施することによって、デスティネーションアルファ値を取り出すために必要とされ得るオーバーヘッド帯域幅は、テクスチャバッファへのソース読み取りの回数を減少させることによって達成される帯域幅節減と比較して、相対的に最小であってよい。
【００１５】
[0030]Ｚ−バッファ法は、同じ画素位置の他のソース画素の背後にあるソース画素を破棄することによって合成帯域幅を減少させるために使用され得るが、そのような技法は、画素が画素ごとのソースアルファ値を有するとき、サーフェスを適切にレンダリングしない。画素が画素ごとのソースアルファ値を有することによって、重複画素を半透明とすることが本質的に可能となる。しかしながら、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、全てのサーフェスが画素ごとのソースアルファ値を有するときですら合成帯域幅を減少させ、それによって、より堅牢な帯域幅減少機構を提供することができる。
【００１６】
[0031]本開示の選択的テクスチャ値取り出し法を実施するために使用されるデスティネーションアルファ検査モジュールは、様々な方法で実施され得る。例えば、デスティネーションアルファ検査モジュールは、専用固定機能ハードウェアブロックとして、シェーダユニット上で実行されるシェーダプログラムとして、デスティネーションアルファ検査を実行するように構成された構成可能なステンシル検査ブロックとして、及び／又はデスティネーションアルファ検査を実行するように構成された構成可能なｚ／ステンシル検査ブロックとして、実施され得る。これらの様々な構成は、本開示において後で更に詳細に説明される。
【００１７】
[0032]図１は、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施するために使用され得る例示的なコンピュータ機器２を示すブロック図である。コンピュータ機器２は、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォーム又はコンソール、例えばセルラー式電話又は衛星電話などのモバイル電話、陸線電話、インターネット電話、携帯ビデオゲーム機器又は携帯情報端末（ＰＤＡ）などのハンドヘルド機器、個人用音楽プレーヤー、ビデオプレーヤー、表示器機器、テレビ、テレビのセットトップボックス、サーバ、中間ネットワーク機器、メインフレームコンピュータ又はグラフィカルデータを処理及び／又は表示する何らかの他のタイプの機器を備えることができる。
【００１８】
[0033]図１の例に示されるように、コンピュータ機器２は、ユーザ入力インターフェース４と、ＣＰＵ６と、メモリコントローラ８と、システムメモリ１０と、グラフィックス処理ユニット（ＧＰＵ）１２と、ＧＰＵキャッシュ１４と、表示器インターフェース１６と、表示器１８と、バス２０、２２とを含む。ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、及び表示器インターフェース１６は、バス２０を使用して互いと通信することができる。メモリコントローラ８及びシステムメモリ１０はまた、バス２２を使用して互いと通信することができる。バス２０、２２は、第３世代バス（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバス又はＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（例えば、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）Ｅｘｐｒｅｓｓバス、又は  Ａｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅインターフェース（ＡＸＩ）バス）、又は別の種類のバス若しくは機器相互接続などの様々なバス構造のうち何らかであってよい。図１に示される異なる構成要素間のバス及び通信インターフェースの特定の構成は例にすぎず、同じ又は異なる構成要素を有するコンピュータ機器及び／又は他のグラフィックス処理システムの他の構成が、本開示の技法を実施するために使用されてよいことに留意されたい。
【００１９】
[0034]ＣＰＵ６は、コンピュータ機器２の動作を制御する汎用プロセッサ又は専用プロセッサを備えることができる。ユーザは、コンピュータ機器２に入力を提供し、ＣＰＵ６に１つ又は複数のソフトウェアアプリケーションを実行させることができる。ＣＰＵ６上で実行されるソフトウェアアプリケーションとしては、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤーアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、又は別のプログラムがあり得る。ユーザは、ユーザ入力インターフェース４を介してコンピュータ機器２に結合されたキーボード、マウス、マイクロホン、タッチパッド、又は別の入力機器などの１つ又は複数の入力機器（図示せず）を介して、コンピュータ機器２に入力を提供することができる。
【００２０】
[0035]ＣＰＵ６上で実行されるソフトウェアアプリケーションは、表示器１８へのグラフィックスデータのレンダリングを発生させるようにＣＰＵ６に指示する１つ又は複数のグラフィックスレンダリング命令を含むことができる。幾つかの例では、ソフトウェア命令は、例えば、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（登録商標））ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、又は他の任意の公開されているもしくは所有権のある標準的なグラフィックスＡＰＩなどのグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）に準拠してよい。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、１つ又は複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行して、ＧＰＵ１２に、グラフィックスデータのレンダリングの幾つか又は全てを実行させることができる。幾つかの例では、レンダリングされるグラフィックスデータとしては、グラフィックスプリミティブのリスト、例えば、点、線、三角形、四角形、トライアングルストリップなどがあり得る。
【００２１】
[0036]メモリコントローラ８は、システムメモリ１０への及びこれからのデータの転送を促進する。例えば、メモリコントローラ８は、メモリ読み出しコマンド及びメモリ書き込みコマンドを受け取り、コンピュータ機器２内の構成要素にメモリサービスを提供するために、そのようなコマンドをメモリシステム１０に対してサービス提供することができる。メモリコントローラ８は、メモリバス２２を介してシステムメモリ１０に通信可能に結合される。メモリコントローラ８は、図１ではＣＰＵ６とメモリシステム１０の両方と別個の処理モジュールであるように示されているが、他の例では、メモリコントローラ８の機能の幾つか又は全ては、ＣＰＵ６とシステムメモリ１０の一方又は両方上で実施されてよい。
【００２２】
[0037]システムメモリ１０は、ＣＰＵ６が実行するためにアクセス可能なプログラムモジュール及び／又は命令及び／又はＣＰＵ６上で実行されるプログラムによって使用されるためのデータを格納することができる。例えば、システムメモリ１０は、グラフィカルユーザインターフェース（ＧＵＩ）を表示器１８上に提示するためにＣＰＵ６によって使用されるウィンドウマネージャアプリケーションを格納することができる。更に、システムメモリ１０は、ユーザアプリケーションと、そのアプリケーションに関連付けられたアプリケーションサーフェスデータとを格納することができる。システムメモリ１０は、更に、コンピュータ機器２の他の構成要素によって使用される及び／又はこれによって生成されるための情報を格納することができる。例えば、システムメモリ１０は、ＧＰＵ１２の機器メモリとして機能することができ、ＧＰＵ１２によって操作されるデータ及びＧＰＵ１２によって実行される演算から生じるデータを格納することができる。例えば、システムメモリ１０は、テクスチャバッファ、デプスバッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを格納することができる。システムメモリ１０としては、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体、又は光記憶媒体などの、１つ又は複数の揮発性又は不揮発性のメモリ又は記憶装置があり得る。
【００２３】
[0038]ＧＰＵ１２は、１つ又は複数のグラフィックスプリミティブを表示器１８にレンダリングするためのグラフィックス演算を実行するように構成され得る。従って、ＣＰＵ６上で実行されるソフトウェアアプリケーションのうち１つがグラフィックス処理を必要とするとき、ＣＰＵ６は、表示器１８にレンダリングするために、グラフィックスコマンド及びグラフィックスデータをＧＰＵ１２に提供することができる。このグラフィックスデータとしては、例えば、描画コマンド、状態情報、プリミティブ情報、及びテクスチャ情報などがあり得る。ＧＰＵ１２は、幾つかの例では、ＣＰＵ６よりも複雑なグラフィック関連演算の効率的な処理を提供する高度並列構造を有するように構築されてよい。例えば、ＧＰＵ１２は、複数の頂点又は画素に対して並列に動作するように構成された複数の処理要素を含むことができる。ＧＰＵ１２の高度並列性によって、幾つかの例では、ＧＰＵ１２が、表示器１８上にグラフィックス画像（例えば、ＧＵＩならびに二次元（２Ｄ）グラフィックスシーン及び／又は三次元（３Ｄ）グラフィックスシーン）を、ＣＰＵ６を使用してそのシーンを表示器１８に直接描画するよりも速く描画することが可能になることができる。
【００２４】
[0039]本開示に従って、ＧＰＵ１２は、ソース画素に関連付けられたデスティネーションアルファ値に基づいて、そのソース画素に対するテクスチャ値を選択的に取り出すように構成され得る。例えば、ＧＰＵ１２は、第１のラスタライズされたプリミティブに関連付けられた第１の画素の処理に応答してデスティネーションアルファ値を生成し、デスティネーションアルファ値をビンバッファに格納し、第１の画素と異なる第２の画素の処理に応答してビンバッファからデスティネーションアルファ値を取り出し、デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、その動作を実行すると決定したことに応答して第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行することができる。第２の画素は、第１のラスタライズされたプリミティブと異なる第２のラスタライズされたプリミティブに関連付けられてよい。更に、第２の画素は、第１の画素と同じ画素位置を有することができる（例えば、第１の画素と第２の画素は、スクリーン空間内に同じ位置座標を有することができる）。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、ＧＰＵ１２は、テクスチャ値に対して行われることを必要とするソース読み取りの回数を効果的に減少させ、それによって、グラフィックス画像をレンダリングするためにＧＰＵ１２によって必要とされるメモリアクセス帯域幅を減少させることができる。
【００２５】
[0040]幾つかの例では、ＧＰＵ１２は、デスティネーションアルファ値を閾値の値と比較することによって、及びデスティネーションアルファ値を閾値の値と比較することによって生成される結果に基づいて動作を実行するかどうか決定することによって、第２の画素に対する１つ又は複数のテクスチャ値がテクスチャバッファから少なくとも一部は取り出されるべきかどうか決定することができる。幾つかの実装形態では、ＧＰＵ１２は、デスティネーションアルファ値が閾値の値以下であるかどうか決定することによって、デスティネーションアルファ値を閾値の値と少なくとも一部は比較することができる。そのような例では、ＧＰＵ１２は、デスティネーションアルファ値が閾値の値以下であると決定したことに応答して、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行し、デスティネーションアルファ値が閾値の値以下でないと決定したことに応答して、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させる動作を実行することができる。閾値の値は、例えば、その値又はそれより下方ではデスティネーション画素の背後に位置している画素が見えない及び／又は表示される必要がない、デスティネーション画素に対する不透明度の閾値レベルを示す値であってよい。幾つかの例では、閾値の値は、デスティネーション画素が完全に不透明である不透明度のレベル、例えばゼロという値を示してよい。閾値の値は、ＣＰＵ６上で実行されるソフトウェアによって、及び／又はＧＰＵ１２上のハードウェア若しくはシェーダ構成要素によって構成可能であってよい。
【００２６】
[0041]幾つかの実装形態では、デスティネーションアルファ値αDは、ゼロから１の範囲内にあってよく（即ち０≦αD≦１）、ゼロの値は、完全に不透明な画素（即ち、実質的に透明度を持たない画素１００％不透明、０％透明）を示し、１の値は完全に透明なデスティネーション画素（即ち、実質的に不透明度を持たない画素１００％透明、０％不透明）を示す。そのような例では、デスティネーションアルファ値がゼロから１に増加すると、不透明度のレベルが、ゼロのデスティネーションアルファ値における実質的に完全な不透明度から１のデスティネーションアルファ値における実質的にない不透明度に減少する。追加の実装形態では、ゼロのデスティネーションアルファ値は完全に透明な画素を示すことができ、１のデスティネーションアルファ値は完全に不透明な画素を示すことができる。デスティネーションアルファ値の他の例及び範囲が可能であり、本開示の範囲内に含まれる。
【００２７】
[0042]幾つかの例では、デスティネーションアルファ値は、グラフィックスパイプライン内の従来のアルファブレンディングユニット（alpha blending unit）によって生成されるデスティネーションアルファ値に対応することができる。更なる例では、デスティネーションアルファ値は、前景から背景へのアルファブレンディング関数に従ってブレンドするアルファブレンディングユニットによって生成されるデスティネーションアルファ値に対応することができる。追加の例では、本開示で更に詳細に説明されるように、デスティネーションアルファ値は、フレームバッファ及び／又はビンバッファに格納されるデスティネーションアルファ値に対応することができる。更なる例では、デスティネーションアルファ値は、上記の例のいずれかの組合せとすることができる。
【００２８】
[0043]追加の例では、ＧＰＵの画素処理パイプラインは、画素サンプルレベルで処理を実行することができる。そのような例では、各画素は複数の画素サンプルに関連付けられてよく、各画素サンプルは単一画素に関連付けられてよい。更に、各画素サンプルは、それぞれのデスティネーションアルファ値を有することができる。そのような例において、第２の画素に対する１つ又は複数のテクスチャ値がバッファから取り出されるべきかどうか決定するために、ＧＰＵ１２は、１つの画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下であるかどうか決定することができる。その画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下である場合、ＧＰＵ１２は、その画素に対するテクスチャ値を取り出させないことができる。そうではなく、その画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値よりも小さくも等しくもない場合、ＧＰＵ１２は、その画素に対するテクスチャ値を取り出させることができる。
【００２９】
[0044]幾つかの例では、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作は、第２の画素が画素処理パイプラインのテクスチャマッピングステージに達する前に画素処理パイプラインから第２の画素を破棄する動作とすることができる。そのような例では、ＧＰＵ１２は、デスティネーションアルファ値に基づいて画素処理パイプラインから第２の画素を破棄するかどうかを決定するように、及びデスティネーションアルファ値に基づいて第２の画素を破棄すると決定したことに応答して、第２の画素が画素処理パイプラインのテクスチャマッピングステージに達する前に画素処理パイプラインから第２の画素を破棄するように構成されてよい。そのような例では、ＧＰＵ１２はまた、デスティネーションアルファ値に基づいて第２の画素を破棄しないと決定したことに応答して、テクスチャマッピングステージを含む１つ又は複数の処理ステージのセット上に第２の画素を渡すように構成されてよい。
【００３０】
[0045]更なる例では、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作は、テクスチャマッピングを第２の画素に対して実行させない動作であってよい。例えば、この動作は、第２の画素に対するテクスチャ値を取り出させない制御信号をアサートする動作であってよい。この制御信号は、例えば、画素処理パイプライン内の別の処理ステージに画素を破棄させる制御信号であってよい。別の例として、制御信号は、画素処理パイプライン内で特定の画素に対してテクスチャマッピングステージを有効又は無効にすることができる。より多くの例では、バッファから第２の画素に対する１つ又は複数のテクスチャ値を取り出させない動作は、第２の画素に対するテクスチャマッピング無効属性動作を、テクスチャマッピングを画素に対して無効にさせる値に設定する動作であってよい。
【００３１】
[0046]本開示の選択的テクスチャ値取り出し法を実施するために使用されるデスティネーションアルファ検査モジュールは、様々な方法で実施され得る。例えば、デスティネーションアルファ検査モジュールは、専用固定機能ハードウェアブロックとして、シェーダユニット（shader unit）上で実行されるシェーダプログラムとして、デスティネーションアルファ検査を実行するように構成された構成可能なステンシル検査ブロックとして、及び／又はデスティネーションアルファ検査を実行するように構成された構成可能なｚ／ステンシル検査ブロックとして、実施され得る。これらの様々な構成は、本開示において後で更に詳細に説明される。
【００３２】
[0047]ＧＰＵ１２は、幾つかの例では、コンピュータ機器２のマザーボードに統合されてよい。他の例では、ＧＰＵ１２は、コンピュータ機器２のマザーボードのポートに設置されたグラフィックスカード上に存在してもよいし、さもなければコンピュータ機器２と相互動作するように構成された周辺機器内に組み込まれてもよい。ＧＰＵ１２は、１つ又は複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、又は他の等価な集積論理回路若しくはディスクリート論理回路などの１つ又は複数のプロセッサを含むことができる。
【００３３】
[0048]ＧＰＵ１２は、ＧＰＵキャッシュ１４に直接結合され得る。従って、ＧＰＵ１２は、バス２０を使用することなく、ＧＰＵキャッシュ１４からデータを読み取り、かつＧＰＵキャッシュ１４にデータを書き込むことができる。言い換えると、ＧＰＵ１２は、オフチップメモリではなくローカル記憶装置を使用してデータをローカルで処理することができる。これによって、ＧＰＵ１２は、大量のバストラフィックを経験し得るＧＰＵ１２がバス２０を介してデータを読み書きする必要性をなくすことによって、より効率的に動作することができる。しかしながら、幾つかの例では、ＧＰＵ１２は、別個のメモリを含まず、代わりにバス２０を介してシステムメモリ１０を利用することがある。ＧＰＵキャッシュ１４としては、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体、又は光記憶媒体などの、１つ又は複数の揮発性又は不揮発性のメモリ又は記憶装置があり得る。
【００３４】
[0049]ＣＰＵ６及び／又はＧＰＵ１２は、システムメモリ１０内部に割り振られたフレームバッファに、レンダリングされる画像データを格納することができる。表示器インターフェース１６は、そのデータをフレームバッファから取り出し、レンダリングされる画像データによって表される画像を表示するように表示器１８を構成することができる。幾つかの例では、表示器インターフェース１６は、フレームバッファから取り出されたデジタル値を表示器１８によって消費可能なアナログ信号に変換するように構成されるデジタルアナログ変換器（ＤＡＣ）を含むことができる。他の例では、表示器インターフェース１６は、処理のためにデジタル値を表示器１８に直接渡すことができる。表示器１８としては、モニタ、テレビ、投影機器、液晶表示器（ＬＣＤ）、プラズマ表示器パネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）表示器、電子ペーパー、表面伝導型電子放出素子表示器（ＳＥＤ）、レーザテレビ表示器、ナノ結晶表示器、又は別の種類の表示装置があり得る。表示器１８は、コンピュータ機器２の内部で統合され得る。例えば、表示器１８はモバイル電話の画面であってよい。あるいは、表示器１８は、有線通信リンク又はワイヤレス通信リンクを介してコンピュータ機器２に結合されたスタンドアロン機器であってよい。例えば、表示器１８は、ケーブル又はワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタ又はフラットパネル表示器であってよい。
【００３５】
[0050]図２は、図１のＣＰＵ６、ＧＰＵ１２、及びシステムメモリ１０を更に詳細に示すブロック図である。ＣＰＵ６は、少なくとも１つのソフトウェアアプリケーション２４と、グラフィックスＡＰＩ２６と、ＧＰＵドライバ２８とを含み、これらの各々は、ＣＰＵ６上で実行される１つ又は複数のソフトウェアアプリケーション又はサービスであってよい。ＧＰＵ１２は、グラフィックス処理コマンドを実行するように一緒に動作する複数のグラフィックス処理段を含むグラフィックス処理パイプライン３０を含む。図２に示されるように、グラフィックス処理パイプライン３０は、コマンドエンジン３２と、ジオメトリ処理段（geometry processing stage）３４と、ラスタライゼーション段（rasterization stage）３６と、画素処理パイプライン３８とを含む。グラフィックス処理パイプライン３０内の構成要素の各々は、固定関数構成要素として、プログラム可能な構成要素として（即ち、プログラム可能なシェーダユニット上で実行されるシェーダプログラムの一部として）、又は固定関数構成要素とプログラム可能な構成要素の組合せとして実施され得る。システムメモリ１０は、レンダリングされる画像データを格納することができるフレームバッファ４０と、複数のテクスチャ値を格納することができるテクスチャバッファ４２とを含む。
【００３６】
[0051]本開示の例示的な一実施形態に従って、ソフトウェアアプリケーション２４は、ＧＵＩ内の１つ又は複数のアプリケーションウィンドウの位置及び外観を制御するウィンドウマネージャアプリケーションとすることができる。しかしながら、他の例では、ソフトウェアアプリケーション２４は、ＧＰＵ１２の機能を利用する任意のアプリケーションであってよい。例えば、ソフトウェアアプリケーション２４は、ＧＵＩアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングアプリケーション又はアートアプリケーション用のコンピュータ支援設計プログラム、ビデオゲームアプリケーション、若しくは２Ｄグラフィックス又は３Ｄグラフィックスを使用する別の種類のソフトウェアアプリケーションであってよい。
【００３７】
[0052]ソフトウェアアプリケーション２４は、グラフィカルユーザインターフェース（ＧＵＩ）及び／又はグラフィックスシーンをレンダリングするようにＧＰＵ１２に命令する１つ又は複数の描画命令を含むことができる。例えば、描画命令としては、ＧＰＵ１２によってレンダリングされる１つ又は複数のグラフィックスプリミティブのセットを定義する命令があり得る。幾つかの例では、描画命令は、ＧＵＩで使用される複数のウィンドウィングサーフェスの全て又は一部をまとめて定義することができる。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間又はワールド空間内に１つ又は複数のグラフィックスオブジェクトを含むグラフィックスシーンの全て又は一部をまとめて定義することができる。
【００３８】
[0053]ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６を介してＧＰＵドライバ２８を起動し、表示可能なグラフィックス画像へと１つ又は複数のグラフィックスプリミティブをレンダリングするための１つ又は複数のコマンドをＧＰＵ１２に発行することができる。例えば、ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６を介してＧＰＵドライバ２８を起動し、プリミティブ定義をＧＰＵ１２に提供することができる。幾つかの例では、このプリミティブ定義は、描画プリミティブ、例えば、三角形、四角形、トライアングルファン、トライアングルストリップなどのリストの形でＧＰＵ１２に提供され得る。プリミティブ定義は、レンダリングされるプリミティブに関連付けられた１つ又は複数の頂点を指定する頂点規定を含むことができる。この頂点規定は、各頂点に対する位置座標と、幾つかの例では、例えば、色座標、法線ベクトル、及びテクスチャ座標などのその頂点に関連する他の属性とを含むことができる。プリミティブ定義はまた、プリミティブタイプ情報（例えば、三角形、四角形、トライアングルファン、トライアングルストリップなど）と、スケーリング情報と、回転情報などとを含むことができる。ソフトウェアアプリケーション２４によってＧＰＵドライバ２８に発行される命令に基づいて、ＧＰＵドライバ２８は、プリミティブをレンダリングするためにＧＰＵ１２が実行する１つ又は複数の動作を指定する１つ又は複数のコマンドを構築することができる。ＧＰＵ１２がＣＰＵ６からコマンドを受け取ると、グラフィックス処理パイプライン３０は、そのコマンドを復号し、そのコマンドで指定される動作を実行するようにグラフィックス処理パイプライン３０内の１つ又は複数の処理要素を構成する。指定された動作を実行した後、グラフィックス処理パイプライン３０は、レンダリングされるデータを、表示器機器に関連付けられたフレームバッファ４０に出力する。
【００３９】
[0054]ソフトウェアアプリケーション２４がウィンドウマネージャを含む例では、ソフトウェアアプリケーション２４は、ＧＰＵ１２に個々のユーザアプリケーション用のオープンＧＵＩウィンドウに関連付けられた１つ又は複数のサーフェスをレンダリングさせるように構成され得る。アプリケーションサーフェスの各々は、ユーザアプリケーションに対して実行されるオープンウィンドウに対応し、本明細書ではサーフェス色データと呼ばれ得る、そのウィンドウに対する色データの現在の状態を含むことができる。ウィンドウマネージャがアプリケーションサーフェスをレンダリングするために、ソフトウェアアプリケーション２４は、サーフェス色データの全て又は一部をＧＰＵ１２用の１つ又は複数のテクスチャバッファ例えばテクスチャバッファ４２内へと配置させる１つ又は複数の命令を、ＧＰＵドライバ２８及び／又はメモリコントローラ８に発行することができる。更に、ソフトウェアアプリケーション２４は、色データを修正し及び／又は追加テクスチャを適用して、特定のウィンドウに対する特定の視覚効果、例えば、シャドウ、境界線、透明性、調光などを達成することができる。テクスチャバッファをセットアップした後、ソフトウェアアプリケーション２４は、ＧＰＵ１２にサーフェスに対応する１つ又は複数のプリミティブをレンダリングさせ、１つ又は複数のテクスチャをプリミティブの幾つか又は全てに適用させる、１つ又は複数の命令を発行することができる。サーフェス色データは、システムメモリ１０又はＣＰＵ６用のキャッシュに格納されてよい。テクスチャバッファは、幾つかの例では、システムメモリ１０内にあってよい。従って、幾つかの例では、サーフェス色データと１つ又は複数のテクスチャバッファの両方は同じメモリサブシステムの一部であってよいが、他の例では、サーフェス色データと１つ又は複数のテクスチャバッファは異なるメモリサブシステム上に位置してよい。
【００４０】
[0055]本開示の例示的な実施形態に従って、ソフトウェアアプリケーション２４は、ＧＰＵ１２内のアルファブレンディングブロックに１つ又は複数の前景から背景へのアルファブレンディング関数（alpha blending functions）のセットを使用してアルファブレンディングを実行させる１つ又は複数のコマンドを発行することができる。この前景から背景へのアルファブレンディング関数は、前景から背景に処理される画素をブレンドする（即ち、閲覧者に近い画素は閲覧者からより遠い画素の前に処理される）ように構成され、かつＧＰＵで一般に使用される背景から前景へのアルファブレンディング関数とは異なるアルファブレンディング関数を指すことができる。前景から背景へのアルファブレンディング関数の例示的なセットは、次の関数を含むことができる。
【００４１】
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)
ここで、ｐ［０］、ｐ［１］、…、ｐ［ｎ−１］は、それまでに処理されたｎ個のソース画素、ｐ［ｎ］は現在処理されているソース画素（即ち現在のソース画素）、Ｃｄｓｔ［ｎ］は現在のソース画素の処理に応答して生成されるデスティネーション色値、Ａｄｓｔ［ｎ］は現在のソース画素の処理に応答して生成されるデスティネーションアルファ値、Ｃｄｓｔ［ｎ−１］はそれまでに処理されたソース画素（即ちｐ［ｎ−１］）の処理に応答して生成されるデスティネーション色値、Ａｄｓｔ［ｎ−１］はそれまでに処理されたソース画素（即ちｐ［ｎ−１］）の処理に応答して生成されるデスティネーションアルファ値、Ｃｓｒｃ［ｎ］は現在のソース画素に対応するソース色値、Ａｓｒｃ［ｎ］は現在のソース画素に対応するソースアルファ値である。式（１）及び式（２）では、任意の値ｉに対して、Ａｄｓｔ［ｉ］＝０は完全に不透明なデスティネーション画素を示すことができ、Ａｄｓｔ［ｉ］＝１は完全に透明なデスティネーション画素を示すことができる。Ａｄｓｔ［−１］及びＣｄｓｔ［−１］は、適切なデフォルト値（例えば、それぞれ１及び０の値）に初期化されてよい。幾つかの例では、Ａｓｒｃ［ｎ］×Ｃｓｒｃ［ｎ］の乗算はシェーダ（例えば画素シェーダ）で実行され得るが、他の数学演算はアルファブレンディングモジュールの一部として実行される。
【００４２】
[0056]ＧＰＵドライバ２８は、更に、１つ又は複数のシェーダプログラムをコンパイルするように、及びコンパイルされたシェーダプログラムをＧＰＵ１２内に含まれる１つ又は複数のプログラム可能なシェーダユニット上にダウンロードするように構成され得る。シェーダプログラムは、例えば、ＯｐｅｎＧＬ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＧＬＳＬ）、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）、Ｃ  ｆｏｒ  Ｇｒａｐｈｉｃｓ（Ｃｇ）  シェーディング言語などの高水準シェーディング言語で記述されてよい。コンパイルされたシェーダプログラムは、ＧＰＵ１２内のプログラム可能なシェーダユニットの動作を制御する１つ又は複数の命令を含むことができる。例えば、シェーダプログラムは、頂点シェーダプログラム及び／又は画素シェーダプログラムを含むことができる。頂点シェーダプログラムは、プログラム可能な頂点シェーダユニット又は統合シェーダユニットの実行を制御し、１つ又は複数の頂点単位動作を指定する命令を含むことができる。画素シェーダプログラムは、プログラム可能な画素シェーダユニット又は統合シェーダユニットの実行を制御し、かつ画素ごとの１つ又は複数の動作を指定する命令を含む画素シェーダプログラムを含むことができる。本開示の幾つかの例示的な実施形態によれば、画素シェーダプログラムは、ソース画素に対する対応するデスティネーションアルファ値に基づいてテクスチャ値をソース画素に対して選択的に取り出させる命令も含むことができる。
【００４３】
[0057]グラフィックス処理パイプライン３０は、ＣＰＵ６からグラフィックスドライバ２８を介して１つ又は複数のグラフィックス処理コマンドを受け取るように、及び表示可能なグラフィックス画像を生成するグラフィックス処理コマンドを実行するように構成され得る。上記で説明したように、グラフィックス処理パイプライン３０は、グラフィックス処理コマンドを実行するように一緒に動作する複数のステージを含む。しかしながら、そのようなステージは必ずしも別個のハードウェアブロックで実施されるとは限らないことに留意されたい。例えば、ジオメトリ処理段３４及び画素処理パイプライン３８の一部分は、統合シェーダユニットの一部として実施されることがある。
【００４４】
[0058]コマンドエンジン３２は、グラフィックス処理コマンドを受け取り、このグラフィックス処理コマンドを実行するための様々な動作を実行するようにグラフィックス処理パイプライン３０内の残りの処理段を構成することができる。このグラフィックス処理コマンドは、例えば描画コマンドとグラフィックス状態コマンドとを含むことができる。描画コマンドは、及び１つ又は複数の頂点に対する位置座標を指定する頂点指定コマンドと、幾つかの例では、例えば、色座標、法線ベクトル、テクスチャ座標、及びフォグ座標などの頂点の各々に関連する他の属性値とを含むことができる。グラフィックス状態コマンドとしては、プリミティブタイプコマンド（primitive type commands）、変換コマンド（transformation commands）、ライティングコマンド（lighting commands）などがあり得る。プリミティブタイプコマンドは、レンダリングされるプリミティブのタイプ及び／又はプリミティブを形成するために頂点がどのように結合されるかを指定することができる。変換コマンドは、頂点に対して実行される変換の種類を指定することができる。ライティングコマンドは、グラフィックスシーン内の様々な光の種類、方向、及び／又は配置を指定することができる。コマンドエンジン３２は、ジオメトリ処理段３４に１つ又は複数の受け取ったコマンドに関連付けられた頂点及び／又はプリミティブに対するジオメトリ処理を実行させることができる。
【００４５】
[0059]ジオメトリ処理段３４は、ラスタライゼーション段３６のためのプリミティブデータを生成するために、１つ又は複数の頂点に対して頂点単位動作及び／又はプリミティブセットアップ動作を実行することができる。各頂点は、例えば、位置座標、色値、法線ベクトル、及びテクスチャ座標などの属性のセットに関連付けられ得る。ジオメトリ処理段３４は、様々な頂点単位動作に従ってこれらの属性のうち１つ又は複数を修正する。例えば、ジオメトリ処理段３４は、頂点位置座標に対して１つ又は複数の変換を実行して、修正された頂点位置座標を生成することができる。ジオメトリ処理段３４は、例えば、モデリング変換（modeling transformation）、ビューイング変換（viewing transformation）、投影変換（projection transformation）、モデルビュー変換（ModelView transformation）、モデルビュー投影変換（ModelViewProjection transformation）、ビューポート変換（viewport transformation）、及び深度範囲スケーリング変換（depth range scaling transformation）のうち１つ又は複数を頂点位置座標に適用して、修正された頂点位置座標を生成することができる。幾つかの例では、頂点位置座標はモデル空間座標であってよく、修正された頂点位置座標はスクリーン空間座標であってよい。スクリーン空間座標は、モデル変換、ビューイング変換、投影変換、及びビューポート変換の適用の後、取得され得る。幾つかの例では、ジオメトリ処理段３４は、頂点に対して頂点単位ライティング動作を実行して、頂点に対して修正された色座標を生成することもできる。ジオメトリ処理段３４は、例えば、法線変換、法線正規化動作、ビューボリュームクリッピング、均一区分（homogenous division）、及び／又は隠面消去（backface culling）動作を含む他の動作も実行することができる。
【００４６】
[0060]ジオメトリ処理段３４は、ラスタライズされるプリミティブ及びプリミティブを形成するために頂点がどのように結合されるかを指定するデータを定義する１つ又は複数の修正された頂点のセットを含むプリミティブデータを生成することができる。修正された頂点の各々は、例えば、修正された頂点位置座標と、その頂点に関連する処理された頂点属性値とを含むことができる。プリミティブデータは、グラフィックス処理パイプライン３０の更なるステージによってラスタライズされるプリミティブに集合的に対応することができる。概念的に、各頂点は、プリミティブの２つの辺が合うプリミティブの角に対応することができる。ジオメトリ処理段３４は、更なる処理のためにプリミティブデータをラスタライゼーション段３６に提供することができる。
【００４７】
[0061]幾つかの例では、ジオメトリ処理段３４の全て又は一部は、１つ又は複数のシェーダユニット上で実行される１つ又は複数のシェーダプログラムによって実施され得る。例えば、ジオメトリ処理段３４は、そのような例では、頂点シェーダ、ジオメトリシェーダ、又はその任意の組合せによって実行され得る。他の例では、ジオメトリ処理段３４は、固定関数ハードウェア処理パイプラインとして、又は固定関数ハードウェアと１つ又は複数のシェーダユニット上で実行される１つ又は複数のシェーダプログラムの組合せとして実施され得る。
【００４８】
[0062]ラスタライゼーション段３６は、ラスタライズされるプリミティブを表すプリミティブデータをジオメトリ処理段３４から受け取り、プリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソース画素を生成するように構成される。幾つかの例では、ラスタライゼーション段３６は、ラスタライズされるプリミティブによってどの画面画素位置が覆われるか決定し、プリミティブによって覆われると決定される各画面画素位置に対してソース画素を生成することができる。ラスタライゼーション段３６は、例えばエッジウォーキング法などの当業者に知られている技法を使用することによって、エッジ式を評価することなどによって、プリミティブによってどの画面画素位置が覆われるか決定することができる。ラスタライゼーション段３６は、更なる処理のために、結果として生じるソース画素を画素処理パイプライン３８に提供することができる。
【００４９】
[0063]ラスタライゼーション段３６によって生成される各ソース画素は、画面画素位置、即ちデスティネーション画素に対応し、１つ又は複数の色属性に関連付けられ得る。特定のラスタライズされたプリミティブのために生成されるソース画素の全ては、ラスタライズされたプリミティブに関連付けられると言われることがある。プリミティブによって覆われるとラスタライゼーション段３６によって決定される画素は、プリミティブの頂点を表す画素と、プリミティブの辺を表す画素と、プリミティブの内部を表す画素とを概念的に含むことができる。
【００５０】
[0064]画素処理パイプライン３８は、ラスタライズされるプリミティブに関連付けられたソース画素を受け取り、そのソース画素に対して１つ又は複数の画素単位動作を実行するように構成される。本開示に従って、画素処理パイプライン３８によって実行される画素単位動作としては、デスティネーションアルファ検査、テクスチャマッピング動作、及びデスティネーションアルファ値生成動作があり得る。デスティネーションアルファ値生成動作は、幾つかの例では、アルファブレンディング動作に対応することができる。幾つかの例では、個々のソース画素を処理するとき、画素処理パイプライン３８は、テクスチャマッピング動作の前にデスティネーションアルファ検査を実行することができる。画素処理パイプライン３８によって実行され得る他の画素単位動作としては、例えば、色計算、画素シェーディング、画素単位ライティング、フォグ処理、ブレンディング、画素所有権検査、ソースアルファ検査、ステンシル検査、デプステスト、シザーテスト（scissors test）、及び／又はスティップリング動作（stippling operations）がある。更に、画素処理パイプライン３８は、１つ又は複数の画素シェーダプログラムを実行して、１つ又は複数の画素単位動作を実行することができる。画素処理パイプライン３８によって生成される、結果として生じるデータは、本明細書では、デスティネーション画素データと呼ばれ、フレームバッファ４０に格納され得る。デスティネーション画素データは、処理されたソース画素と同じ表示位置を有するフレームバッファ４０内のデスティネーション画素と関連付けられ得る。デスティネーション画素データは、例えば、色値、デスティネーションアルファ値、デプス値などのデータを含むことができる。
【００５１】
[0065]本開示に従って、画素処理パイプライン３８は、第１のラスタライズされたプリミティブに関連付けられた第１の画素の処理に応答してデスティネーションアルファ値を生成し、デスティネーションアルファ値をビンバッファに格納し、第１の画素と異なる第２の画素の処理に応答してビンバッファからデスティネーションアルファ値を取り出し、デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、その動作を実行すると決定したことに応答して第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行することができる。第２の画素は、第１のラスタライズされたプリミティブと異なる第２のラスタライズされたプリミティブに関連付けられてよい。更に、第２の画素は、第１の画素と同じスクリーン画素位置を有することができる（例えば、第１の画素及び第２の画素は、スクリーン空間内に同じ位置座標を有することができる）。デスティネーションアルファ値は、第１のソース画素及び第２のソース画素と同じスクリーン画素位置を有するデスティネーション画素と関連付けられてよい。例えば、ソース画素に対するデスティネーションアルファ値は、ソース画素と同じ画面位置を有するデスティネーション画素の不透明度を示す値であってよい。デスティネーション画素の不透明度は、画素位置に関連付けられた１つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定され得る。ソース画素に対するテクスチャ値を、それらの対応するデスティネーションアルファ値に基づいて選択的に取り出すことによって、画素処理パイプライン３８は、テクスチャ値に対して行われることを必要とするソース読み取りの回数を効果的に減少させ、それによって、グラフィックス処理システムに対して必要とされるメモリアクセス帯域幅を減少させることができる。
【００５２】
[0066]幾つかの例では、各ソース画素に対して、画素処理パイプライン３８は、デスティネーションアルファ検査を実行し、テストの結果に基づいてソース画素に対するテクスチャ値を取り出す又は取り出さないのいずれかとすることができる。デスティネーションアルファ検査は、例えば、ソース画素に対応するデスティネーションアルファ値と閾値との比較を含むことができる。そのような例では、閾値は、ソフトウェアアプリケーション２４、ＧＰＵドライバ２８、及びＧＰＵ１２内の１つ又は複数の構成要素のうち１つ又は複数によって構成可能であり得る。閾値の値は、例えば、その値又はそれより下方ではデスティネーション画素の背後に位置している画素が見えない及び／又は表示される必要がない、デスティネーション画素に対する不透明度の閾値レベルを示す値であってよい。
【００５３】
[0067]幾つかの例では、画素処理パイプライン３８は、デスティネーションアルファ検査の結果に基づいてパイプラインのステージテクスチャマッピングの前に画素処理パイプライン３８内のソース画素を選択的に破棄することによって、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施することができる。更なる例では、画素処理パイプライン３８は、デスティネーションアルファ検査の結果に基づいてソース画素に対するテクスチャマッピングを選択的に有効又は無効にすることによって、本開示の技法を実施することができる。例えば、画素処理パイプライン３８は、デスティネーションアルファ検査の結果に基づいてテクスチャマッピングを無効にする制御信号を選択的にアサートすることができ、又はデスティネーションアルファ検査の結果に基づいてテクスチャマッピング無効にする画素属性を選択的に設定することができる。
【００５４】
[0068]フレームバッファ４０は、ＧＰＵ１２に対するデスティネーション画素を格納する。各デスティネーション画素は、一意の画面画素位置に関連付けられ得る。幾つかの例では、フレームバッファ４０は、各デスティネーション画素に対して、色の成分と、デスティネーションアルファ値とを格納することができる。例えば、フレームバッファ４０は、各画素に対して赤、緑、青、及びアルファ（ＲＧＢＡ）の各成分を格納することができ、「ＲＧＢ」の各成分は色値に相当し、「Ａ」成分はデスティネーションアルファ値に相当する。幾つかの例では、フレームバッファ４０に格納されるデスティネーション画素のサブセット（例えば、全てよりも少ない）は、ＧＰＵ１２に対してシステムメモリ１０よりも高い利用可能な帯域幅を有するメモリ例えばオンチップビンバッファに格納されてよい。
【００５５】
[0069]テクスチャバッファ４２は、ＧＰＵ１２による取り出しのために、１つ又は複数のテクスチャ値を格納する。このテクスチャ値は、幾つかの例では、アプリケーションサーフェスにおいて定義される色値に対応することができる。ＧＰＵ１２は、システムメモリ１０にアクセスして、テクスチャ値をテクスチャバッファ４２から取り出すことができる。幾つかの例では、テクスチャバッファ４２内の内容のサブセットは、ＧＰＵ１２によってアクセス可能なテクスチャキャッシュ、例えばＧＰＵキャッシュ１４にキャッシュされ得る。
【００５６】
[0070]システムメモリ１０は、図２の例示的なグラフィックス処理システムではフレームバッファ４０とテクスチャバッファ４２の両方を含むように示されているが、他の例では、フレームバッファ４０とテクスチャバッファ４２の一方又は両方は、ＣＰＵ６とＧＰＵ１２の一方又は両方と同じ又は異なるチップ上にある他のメモリサブシステム内で実施されてよい。更に、フレームバッファ４０及びテクスチャバッファ４２は、同じメモリサブシステムの一部として実施される必要はない。
【００５７】
[0071]幾つかの例では、グラフィックス処理パイプライン３０は、画素粒度ではなく画素サンプル粒度でデータを処理することができる。そのような例では、ラスタライゼーションブロック３６は、各ソース画素に対する複数のソース画素サンプルを生成することができ、画素処理パイプライン３８は、ソース画素サンプル上でサンプル単位動作を実行して、複数のデスティネーション画素サンプルを生成することができ、このデスティネーション画素サンプルはフレームバッファ４０に格納される。ソース画素サンプル及びデスティネーション画素サンプルはそれぞれ、ソース画素及びデスティネーション画素に関する上記で説明したデータが画素全体ではなく画素サンプルに適用されることを除いて、そのようなデータと実質的に類似したデータを含むことができる。表示器インターフェース１６は、デスティネーション画素サンプルデータを、表示器上に表示できる画素データに変換することができる。幾つかの例では、各画素に対して４つのサンプルが生成されてよく、各サンプルは単一の画素に関連付けられてよい。しかしながら、他の例では、各画素に対して任意の数のサンプルが生成されてよい。
【００５８】
[0072]追加の例では、グラフィックス処理パイプライン３０は、ビンレンダリング法に従ってグラフィックス画像をレンダリングすることができ、ビンレンダリング法は、また、本明細書ではタイルレンダリング法と呼ばれ得る。ビンレンダリング法に従ってレンダリングするとき、グラフィックス処理パイプライン３０は、プリミティブのバッチ（即ち複数のプリミティブ）を受け取り、結果として生じるグラフィックス画像へとレンダリングすることができる。プリミティブのバッチをレンダリングするために、結果として生じるグラフィックス画像は、複数の小さい部分（例えば、画素のタイル即ちビン）に細分されてよく、グラフィックス処理パイプライン３０は、グラフィックス画像の各部分を別個のレンダリングパスとしてレンダリングすることができる。グラフィックス画像の特定の部分に対する単一のレンダリングパスの一部として、グラフィックス処理パイプライン３０は、グラフィックス画像のデスティネーション画素の特定のサブセット（例えば、デスティネーション画素の特定のタイル）に対してプリミティブのバッチの全て又はサブセットをレンダリングすることができる。特定のレンダリングパスに対するデスティネーション画素の特定のサブセットは、本明細書ではレンダリングパスに対するデスティネーション画素範囲と呼ばれることがある。第１のデスティネーション画素範囲に対して第１のレンダリングパスを実行した後、グラフィックス処理パイプライン３０は、第１のデスティネーション画素範囲と異なる第２のデスティネーション画素範囲に対して第２のレンダリングパスを実行することができる。グラフィックス処理パイプライン３０は、あらゆるタイル即ちビンに関連付けられるプリミティブがレンダリングされるまで、タイル即ちビンを逐次的に横断することができる。
【００５９】
[0073]特定のレンダリングパスを実行する間、その特定のレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データは、ビンバッファに格納され得る。レンダリングパスを実行した後、グラフィックス処理パイプライン３０は、ビンバッファの内容をフレームバッファ４０に転送することができる。場合によっては、グラフィックス処理パイプライン３０は、フレームバッファ４０内のデータの一部分を、ビンバッファに格納されるデータで上書きすることができる。他の場合には、グラフィックス処理パイプライン３０は、フレームバッファ４０内のデータをビンバッファに格納されるデータで合成又は結合することができる。ビンバッファの内容をフレームバッファ４０に転送した後、グラフィックス処理パイプライン３０は、ビンバッファをデフォルト値に初期化して、異なるデスティネーション画素範囲に対して後続のレンダリングパスを開始することができる。
【００６０】
[0074]幾つかの実装形態では、プリミティブのバッチとして受け取られた様々なプリミティブを適切なビンに並べ替えるために、ビニングパスが別個のレンダリングパスの前に実行され得る。例えば、グラフィックス処理パイプライン３０は、どのタイル（即ちビン）に各プリミティブが寄与又は重複するか決定し、その決定に基づいてプリミティブを１つ又は複数のタイル固有ビンに割り当てることができる。次いで、レンダリングパスが特定のビンに対して実行されるとき、グラフィックス処理パイプライン３０は、そのビンに関連付けられた特定のデスティネーション画素範囲に対して、そのビンに割り当てられたプリミティブの各々をレンダリングすることができる。本明細書では、グラフィックス処理パイプライン３０はビニングパスを実行するように説明されているが、他の例では、ビニングパスは、ＧＰＵ１２内の別の構成要素によって、ＣＰＵ６内のソフトウェアモジュール（例えば、ＧＰＵドライバ２８）によって、又はそれらの任意の組合せによって実行されてよい。
【００６１】
[0075]追加の実装形態では、ビニングパスは、必ずしも実行されるとは限らないことがある。代わりに、ＧＰＵドライバ２８及び／又はグラフィックス処理パイプライン３０は、プリミティブの受け取られたバッチ内のプリミティブの全てに対して、レンダリングパスの各々を実行することができる。各レンダリングパスに対して、ＧＰＵドライバ２８及び／又はグラフィックス処理パイプライン３０は、所与のレンダリングパスに関連付けられたデスティネーション画素がそのレンダリングパス中に更新されるように、様々なシザー設定及び／又は様々なメモリアドレスオフセットを使用することができる。
【００６２】
[0076]幾つかの例では、グラフィックス処理パイプライン３０は、第１の通信インターフェースを介してビンバッファにアクセスし、第２の通信インターフェースを介してテクスチャバッファ４２にアクセスし、第３の通信インターフェースを介してフレームバッファ４０にアクセスすることができる。そのような例では、第１の通信インターフェースは、幾つかの例では、第２の通信インターフェース及び／又は第３の通信インターフェースよりも高い帯域幅を有することができる。場合によっては、第２の通信インターフェースは、例えばフレームバッファ４０及びテクスチャバッファ４２が両方ともシステムメモリ１０で実施されるとき、第３の通信インターフェースと同じ通信インターフェースであってよい。第２の通信インターフェース及び第３の通信インターフェースは、幾つかの例では、図１のバス２０及び／又は２２に相当することができる。ビンバッファがオンチップビンバッファであるとき、第１の通信インターフェースは、ＧＰＵ１２の内部にある通信インターフェースであってよい。
【００６３】
[0077]本明細書で用いられる場合、帯域幅は、２つの構成要素例えばメモリ構成要素とＧＰＵ１２の間で通信インターフェースがデータを転送することが可能な速度を指すことができる。帯域幅の単位は、幾つかの例では、単位時間あたりのビット数、例えばギガビット毎秒（Ｇｂ／ｓ）として与えられ得る。複数のビットのバス幅を有するバスが通信インターフェースの一部として使用されるとき、帯域幅は、幾つかの例では、バスの幅に、単一ビット線に沿ってデータが転送される速度が乗算された積に等しくてよい。例えば、バスが１６ビット幅であり、バスの各ビット線が２Ｇｂ／ｓの速度でデータを転送することが可能な場合、バスの帯域幅は３２Ｇｂ／ｓに等しい。複数のバスが２つの構成要素間の通信インターフェースを形成する場合、通信インターフェースの帯域幅は、複数のバスの各々の帯域幅の関数、例えば個々のバスの各々の最小帯域幅とすることができる。
【００６４】
[0078]ビンバッファにアクセスするために使用される通信インターフェースに対するより高い帯域幅を達成するために、ビンバッファは、幾つかの例では、ＧＰＵ１２と同じマイクロチップ上で実施されてよい。そのようなビンバッファは、オンチップビンバッファと呼ばれることがある。ビンバッファがＧＰＵ１２と同じチップ上で実施されるとき、ＧＰＵ１２は、必ずしもシステムバス及びメモリバス（例えば図１のバス２０、２２）を介してビンバッファにアクセスする必要があるとは限らず、むしろ、ＧＰＵ１２と同じチップ上で実施される内部通信インターフェース（例えばバス）を介してビンバッファにアクセスすることができる。そのようなインターフェースはオンチップであるので、そのようなインターフェースは、システムバス及びメモリバスよりも高い帯域幅で動作することが可能となることができる。上記で説明した技法は、フレームバッファ４０及び／又はテクスチャバッファ４２にアクセスするために使用される通信インターフェースの帯域幅を超えるビンバッファ用の通信インターフェースを達成する１つの方法であるが、他の技法が可能であり、本開示の範囲に含まれる。
【００６５】
[0079]ビンバッファの容量は、幾つかの例では、特定の種類のコンピュータ機器例えばモバイル機器上で利用可能な面積によって制限されることがある。その上、ビンバッファがＧＰＵ１２と同じチップ上で実施されるとき、同じチップ上でビンバッファを実施するために利用可能な面積の量は、チップ上で実施される他の機能により制限されることがある。幾つかの例では、ビンバッファは、ビンバッファの容量を更に制限するフレームバッファ４０及び／又はテクスチャバッファ４２のうち１つ又は複数のビット密度よりも低いビット密度を有することができる。これら及び／又は他の要因のために、ビンバッファの容量は、場合によっては、フレームバッファ４０とテクスチャバッファ４２の一方又は両方の大きさよりも小さいことがある。従って、ビンバッファの容量は、そのような例では、グラフィックス画像に関連付けられた複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さいことがある。メモリ構成要素の容量とは、メモリ構成要素に格納されることが可能なデータの最大量（例えばビットの最大数）を指すことができる。フレームバッファ４０及びテクスチャバッファ４２の大きさはそれぞれ、フレームバッファ４０及びテクスチャバッファ４２に割り振られたメモリ範囲に格納されるデータの量（例えばビットの数）を指すことができる。ビット密度は、特定の量の面積に格納できるビットの数を指すことができる。
【００６６】
[0080]上記で説明したように、ビンレンダリング法に従ってレンダリングするとき、グラフィックス処理パイプライン３０は、グラフィックス画像の各部分を別個のレンダリングパスとしてレンダリングすることができる。例えば、グラフィックス画像の特定の部分に対する単一のレンダリングパスの一部として、グラフィックス処理パイプライン３０は、特定のデスティネーション画素範囲（例えば、グラフィックス画像のデスティネーション画素の特定のサブセット）に対してプリミティブのバッチの全て又はサブセットをレンダリングすることができる。ビンバッファの容量は、デスティネーション画素範囲の大きさ以上であるように構成され得る。従って、単一のレンダリングパス中に、レンダリングパス用のデスティネーション画素範囲に関連付けられた全てのデスティネーション画素データ（例えばデスティネーションアルファ値及びデスティネーション色値）は、必ずしもフレームバッファ４０にアクセスする必要があるとは限らずに、ビンバッファ内で利用可能であってよい。従って、単一のレンダリングパス中に、グラフィックス処理パイプライン３０は、相対的に低い帯域幅通信インターフェースを介してフレームバッファ４０からデスティネーションアルファ値を読み出さなければならないのではなく、相対的に高い帯域幅通信インターフェースを介してビンバッファからそのようなデータを読み出すことが可能であることができる。
【００６７】
[0081]ビンレンダリングを実行しない幾つかのグラフィックスシステムは、ハードウェアベースのオンチップキャッシュを使用することによって、フレームバッファの一部をキャッシュすることが可能であることがあるが、そのようなキャッシュは、所与の画素に対するデスティネーションアルファ値は必要とされるときに利用可能であることを保証しない。この理由は、複数のデスティネーション画素はハードウェアベースのキャッシュ内の同じアドレスにマッピングされることがあるからである。この場合、ビンレンダリングが使用されない場合、ハードウェアベースのキャッシュの現在の状態は、必ずしも現在処理されているプリミティブに関連付けられたデスティネーション画素値を含むとは限らず、むしろ、画像グラフィックスの他のエリア内のそれまでに処理されたプリミティブに関連付けられたデスティネーション画素値を含むことがある。
【００６８】
[0082]複数のデスティネーション画素が同じキャッシュ位置にマッピングされるハードウェアベースのキャッシュとは対照的に、所与のレンダリングパスに対するビンバッファに格納されるデスティネーション画素は、幾つかの例では、一意にアドレス指定可能であってよい。言い換えれば、所与のレンダリングパスに対して、１対１のマッピングが、ビンバッファ内のアドレス指定可能な記憶スロットとそのレンダリングパスに使用されるデスティネーション画素の間で定義され得る。従って、ビンレンダリング法に従ってレンダリングするとき、所与のビニングパスに対する全てのデスティネーションアルファ値は、幾つかの例では、相対的に低い帯域幅通信インターフェースを介してビンバッファから入手可能とすることができる。その上、ハードウェアベースのキャッシュシステムとは異なり、ビンバッファ内で一意にアドレス指定可能なデータのために、キャッシュミスは発生せず、それによって、キャッシュミスの場合に帯域幅の高価な（bandwidth-expensive）フレームバッファアクセスを用いる必要性を緩和する。
【００６９】
[0083]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、特定のビンに対するデスティネーションアルファ値が、デスティネーションアルファ検査モジュールによって、必要とされるときにビンバッファにすでにロードされていることがあるので、ビンレンダリングの状況で特に有用なことがある。これによって、そのような値にフレームバッファ４０からアクセスする必要性が緩和されることがあり、フレームバッファ４０は、より低い利用可能な帯域幅を持つメモリ、例えばシステムメモリ１０にあってよい。従って、ビニング状況において、デスティネーションアルファ値を取り出すために必要とされ得るオーバーヘッド帯域幅は、本開示の技法に従ってテクスチャバッファへのソース読み取りの回数を減少させることによって達成される帯域幅節減と比較して、相対的に最小であってよい。
【００７０】
[0084]更なる例では、ＧＰＵドライバ２８は、画素処理パイプライン３８によって実施される、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を選択的に有効及び無効にすることができる。幾つかの例では、ソフトウェアアプリケーション２４は、本開示の技法によりＧＰＵ１２に対するデスティネーションアルファ値に基づく選択的テクスチャ値取り出しモードを有効にするようにＧＰＵドライバ２８に命令するコマンドを、ＧＰＵドライバ２８に発行することができる。追加の例では、ＧＰＵドライバ２８は、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を使用しても結果として生じる画像の品質に干渉しない状況を検出することができ、例えば、ＧＰＵドライバ２８は、前景から背景へのレンダリングスキームがいつソフトウェアアプリケーション２４によって実施されたか検出することができる。そのような検出に応答して、ＧＰＵドライバ２８は、本開示の技法によりＧＰＵ１２に対するデスティネーションアルファ値に基づく選択的テクスチャ値取り出しモードを有効にすることができる。
【００７１】
[0085]本明細書で用いられる場合、ソース画素は、ラスタライゼーションブロック３６によって生成され、かつフレームバッファ４０又は対応するビンバッファのいずれかにまだ格納されていない画素データを指すことができる。フレームバッファ４０又は対応するビンバッファに書き込まれた画素データは、デスティネーション画素と呼ばれることがある。デスティネーション画素は、異なるプリミティブに関連付けられた複数のソース画素から合成された画素データを含むことができる。従って、画素処理パイプライン３８はソース画素上で動作し、ソース画素の処理に応答して、フレームバッファ４０又は対応するビンバッファ内のデスティネーション画素データを更新する。全てのソース画素が必ずしもデスティネーション画素になるとは限らないことに留意されたい。例えば、それまでに処理された画素によって埋められた何らかのその後で処理されるソース画素は、必ずしもデスティネーション画素になるとは限らないことがある。むしろ、ｚ−テスト及び／又はデスティネーションアルファ検査は、そのような埋められた画素を破棄することができる。場合によっては、「フラグメント」という用語は「ソース画素」を指すために当業者によって使用されることがあり、「画素」という用語は「デスティネーション画素」を指すために当業者によって使用されることがある。本開示で説明される画素のうちいずれかがソース画素であるか又はデスティネーション画素であるかは、明示的に識別されるか、又は画素が説明される状況から決定されることを可能にするべきかのいずれかである。
【００７２】
[0086]特定の画素位置に対するデスティネーションアルファ値は、特定の画面位置に対応するソース画素が処理を完了するたびに、逐次的に更新され得る。更新されたデスティネーションアルファ値は、同じ画素位置に対する前のデスティネーションアルファ値の関数とすることができる。従って、デスティネーションアルファ値は、所与の時点まで処理を完了したデスティネーション画素に対応する全てのソース画素に基づいて所与の時点でのデスティネーション画素の不透明度を示す「合成」アルファ値を表すことができる。
【００７３】
[0087]図３は、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法を実施するために使用され得る例示的な画素処理パイプライン５０を示すブロック図である。画素処理パイプライン５０は、ソース画素に対応するデスティネーションアルファ値に基づいてテクスチャマッピング段の前にソース画素を選択的に破棄するように構成され得る。画素処理パイプライン５０は、デスティネーションアルファ検査モジュール５２と、テクスチャマッピングモジュール５４と、デスティネーションアルファ決定モジュール５６と、テクスチャバッファ５８と、デスティネーションアルファバッファ６０とを含む。デスティネーションアルファ検査モジュール５２、テクスチャマッピングモジュール５４、及びデスティネーションアルファ決定モジュール５６は、１つ又は複数の固定関数／機能処理段、１つ又は複数のプログラム可能なステージ、又はそれらの任意の組合せとして、１つ又は複数のプロセッサ上で実施され得る。テクスチャバッファ５８及びデスティネーションアルファバッファ６０は各々、１つ又は複数のメモリストレージユニットとして実施され得る。
【００７４】
[0088]デスティネーションアルファ検査モジュール５２は、前の処理段からソース画素を受け取り、受け取った画素に対してデスティネーションアルファ検査を実行し、デスティネーションアルファ検査の結果に基づいてソース画素を選択的に破棄するように構成される。例えば、デスティネーションアルファ検査モジュール５２は、ソース画素に対応するデスティネーションアルファ値に基づいて、ソース画素を破棄するのか又は更なる処理のためにソース画素を１つ又は複数の後続処理段のセットに渡すのか決定することができる。このようにして、デスティネーションアルファ検査モジュール５２は、デスティネーション画素に対応する１つ又は複数のそれまでに処理されたソース画素により、受け取ったソース画素に対応するデスティネーション画素がすでに不透明であるかどうか効果的に決定することができる。
【００７５】
[0089]幾つかの例では、前の処理段は、ラスタライゼーションブロック３６であることがある。更なる例では、前の処理段は、前の画素処理パイプライン段、例えば、画素所有権テストブロック、シザーテストブロック（scissors test block）、ソースアルファ検査ブロック、画素シェーダ段、又はグラフィックスプロセッサで見られる他の任意の画素処理段であってよい。１つ又は複数の後続処理段のセットは、テクスチャマッピングモジュール５４を含むことができる。幾つかの例では、デスティネーションアルファ検査モジュール５２は、デスティネーションアルファ検査モジュール５２とテクスチャマッピングモジュール５４の間に介在する１つ又は複数の処理段にソース画素を渡すことによって、ソース画素をテクスチャマッピングモジュール５４に渡すことができる。追加の例では、デスティネーションアルファ検査モジュール５２は、ソース画素をテクスチャマッピングモジュール５４に直接渡すことができる。１つ又は複数の後続処理段のセットに渡された画素は、本明細書では、渡された画素と呼ばれることがある。
【００７６】
[0090]本開示に従って、デスティネーションアルファ検査モジュール５２は、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行するかどうかを決定するように、及びその動作を実行すると決定したことに応答して、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行するように構成され得る。例えば、ソース画素を受け取るとき、デスティネーションアルファ検査モジュール５２は、ソース画素に対応するデスティネーションアルファ値をデスティネーションアルファバッファ６０から取り出すことができ、例えば、デスティネーションアルファ検査モジュール５２は、ソース画素とともに含まれる位置座標を使用してソース画素に対する画面画素位置を決定し、位置同じ画面画素に関連付けられたデスティネーションアルファ値を取り出すことができる。取り出されたデスティネーションアルファ値に基づいて、デスティネーションアルファ検査モジュール５２は、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行するかどうか決定し、そのように決定された場合、その動作を実行することができる。
【００７７】
[0091]図３に示される例示的な画素処理パイプラインでは、デスティネーションアルファ検査モジュール５２によって実行される、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作は、テクスチャマッピングモジュール５４によって表されるテクスチャマッピング段の前に画素処理パイプライン５０からソース画素を破棄することを含む。しかしながら、他の例示的な実施形態では、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させないために、他の動作がデスティネーションアルファ検査モジュール５２によって実行されてよい。例えば、デスティネーションアルファ検査モジュール５２は、幾つかの例では、画素処理パイプライン５０内の別の処理段に画素を破棄させる制御信号をアサートする（アクティブ状態にする）ことができる。追加の例では、デスティネーションアルファ検査モジュール５２は、画素処理パイプライン５０内の特定の画素に対するテクスチャマッピングモジュール５４を有効又は無効にする制御する信号をアサートすることができる。更なる例では、デスティネーションアルファ検査モジュール５２は、ソース画素に対する属性を無効にするテクスチャマッピングを、テクスチャマッピングをソース画素に対して無効にする値に設定し、画素を画素処理パイプライン５０内の１つ又は複数の後続処理段に渡すことができる。そのような例では、テクスチャマッピングモジュール５４は、設定されたテクスチャマッピング無効属性を有する画素に対するテクスチャマッピングを無効にするように構成され得る。
【００７８】
[0092]幾つかの例では、デスティネーションアルファ検査モジュール５２は、取り出されたデスティネーションアルファ値を閾値の値と比較することによって、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行するかどうか決定することができる。比較の結果に基づいて、デスティネーションアルファ検査モジュール５２は、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行するかどうか決定することができる。例えば、デスティネーションアルファ検査モジュール５２は、デスティネーションアルファ値が閾値以下であるかどうか決定することができる。デスティネーションアルファ値が閾値以下であると決定したことに応答して、デスティネーションアルファ検査モジュール５２は、ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行する、例えば、段５４テクスチャマッピングの前にソース画素を破棄することができる。一方、デスティネーションアルファ値が閾値よりも小さくも等しくもないと決定したことに応答して、デスティネーションアルファ検査モジュール５２は、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させる動作を実行することができる。閾値の値は、例えば、その値又はそれより下方ではデスティネーション画素の背後に位置している画素が見えない及び／又は表示される必要がない、デスティネーション画素に対する不透明度の閾値レベルを示す値であってよい。
【００７９】
[0093]閾値の値は、幾つかの例では、デスティネーションアルファモジュール５２に組み込まれた固定値であってよい。更なる例では、閾値の値は、グラフィックスプロセッサ内の他の構成要素によって構成可能であってよく、及び／又はグラフィックスドライバもしくはユーザアプリケーションによってプログラム可能であってよい。
【００８０】
[0094]幾つかの実装形態では、デスティネーションアルファ値αDは、ゼロから１の範囲内にあってよく（即ち０≦αD≦１）、ゼロの値は完全に不透明なデスティネーション画素を示し、１の値は完全に透明な画素を示し、ゼロから１の間の値は半透明画素に対する様々な不透明度を表す。そのような例では、デスティネーションアルファ値がゼロから１に増加すると、不透明度のレベルが、ゼロのデスティネーションアルファ値における実質的に完全な不透明度から１のデスティネーションアルファ値における実質的にない不透明度に減少する。
【００８１】
[0095]幾つかの例では、閾値の値は、完全に不透明なデスティネーション画素を示してよく、例えばゼロという値であってよい。閾値の値をゼロに設定することによって、デスティネーションアルファ検査ブロックは、すでに完全に不透明であるデスティネーション画素に対応するソース画素を破棄することができる。サーフェスが前景から背景に描画されるとき、いかなるそのようなソース画素も画素デスティネーションに対してすでに処理されたソース画素の背後にあるので、その後デスティネーション画素に対して処理される何らかのソース画素は、デスティネーション画素の全体的な外観に寄与しない。これらのソース画素を破棄することによって、全体的な画像に寄与しないテクスチャ値を取り出す必要がないことにより、グラフィックス処理システムにおけるメモリアクセス帯域幅を解放することができる。
【００８２】
[0096]デスティネーションアルファ検査モジュール５２は、様々な方法で実施され得る。例えば、デスティネーションアルファ検査モジュール５２は、専用固定機能ハードウェアブロックとして、シェーダユニット上で実行されるシェーダプログラムとして、デスティネーションアルファ検査を実行するように構成された構成可能なステンシル検査ブロックとして、及び／又はデスティネーションアルファ検査を実行するように構成された構成可能なｚ／ステンシル検査ブロックとして、実施され得る。これらの様々な構成は、本開示において後で更に詳細に説明される。
【００８３】
[0097]テクスチャマッピングモジュール５４は、ソース画素、例えば渡されたソース画素を受け取り、ソース画素に対してテクスチャマッピング動作を実行し、テクスチャマッピングされた画素を生成するように構成される。各ソース画素に対して、テクスチャマッピングモジュール５４は、受け取られたソース画素に含まれる１つ又は複数のテクスチャ座標に基づいて、１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出すことができる。このテクスチャ座標は、どのテクスチャ値をテクスチャバッファ５８から取り出すかを指定及び／又は決定することができる。テクスチャ座標を取り出した後、テクスチャマッピングモジュール５４は、をテクスチャマッピング関数に従って１つ又は複数の取り出されたテクスチャ値に基づいてソース画素の色座標（例えばＲＧＢ成分）を修正し、修正された色成分を持つ、結果として生じるテクスチャマッピングされた画素を生成することができる。テクスチャマッピング関数は、テクスチャバッファ５８から取り出されたテクスチャ値とソース画素の位置座標の関数として、テクスチャマッピングされた色値を指定することができる。テクスチャマッピング関数は、ユーザ指定の関数であってよい。様々なテクスチャマッピング関数が当技術分野で知られており、本開示では、更に詳細に説明しない。幾つかの例では、テクスチャマッピングモジュール５４は、シェーダユニット上で実行されるシェーダプログラム、固定関数ハードウェア処理段、又はこれらの任意の組合せとして実施されてよい。
【００８４】
[0098]テクスチャマッピングモジュール５４は、テクスチャマッピングされた画素を、更なる処理のために１つ又は複数の後続処理段に渡すことができる。デスティネーションアルファ決定モジュール５６は、図３ではテクスチャマッピングモジュール５４の後続処理段として示されているが、介在する任意の数の処理段がテクスチャマッピングモジュール５４とデスティネーションアルファ決定モジュール５６の間に含まれてよい。同様に、デスティネーションアルファ検査モジュール５２は、図３ではテクスチャマッピングモジュール５４の前の処理段として示されているが、介在する任意の数の処理段がデスティネーションアルファ検査モジュール５２とテクスチャマッピングモジュール５４の間に含まれてよい。
【００８５】
[0099]デスティネーションアルファ決定モジュール５６は、ソース画素を受け取り、ソース画素と同じ画面画素位置（即ちスクリーン空間内の位置座標）を有するデスティネーション画素に対するデスティネーションアルファ値を生成するように構成される。幾つかの例では、デスティネーションアルファ決定モジュール５６は、画面画素位置に対する前のデスティネーションアルファ値をデスティネーションアルファバッファ６０から取り出し、画面画素位置に対する後続デスティネーションアルファ値を、前のデスティネーションアルファ値とソース画素の１つ又は複数の色成分及び／又はアルファ成分の関数として生成することができる。例えば、デスティネーションアルファ決定モジュール５６は、画面画素位置に対する後続のデスティネーションアルファ値を、ソース画素の前のデスティネーションアルファ値（即ちデスティネーションアルファバッファ６０から取り出される「Ａ」成分）とソースアルファ値（即ち「Ａ」成分）の関数として生成することができる。
【００８６】
[0100]幾つかの例では、デスティネーションアルファ決定モジュール５６はアルファブレンディングモジュールであってよく、デスティネーションアルファ決定モジュール５６は、アルファブレンディング関数に基づく受け取ったソース画素の処理に応答してデスティネーションアルファ値を生成することができる。デスティネーションアルファ値を更新するために使用される特定の関数は、一般的には、グラフィックスプロセッサによって構成可能である。アルファブレンディング関数は、場合によっては、前景から背景へのアルファブレンディング関数であってよい。前景から背景へのアルファブレンディング関数の例示的なセットとしては、次の関数があり得る。
【００８７】
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)
ここで、ｐ［０］、ｐ［１］、…、ｐ［ｎ−１］は、それまでに処理されたｎ個のソース画素、ｐ［ｎ］は現在処理されているソース画素（即ち現在のソース画素）、Ｃｄｓｔ［ｎ］は現在のソース画素の処理に応答して生成されるデスティネーション色値、Ａｄｓｔ［ｎ］は現在のソース画素の処理に応答して生成されるデスティネーションアルファ値、Ｃｄｓｔ［ｎ−１］はそれまでに処理されたソース画素（即ちｐ［ｎ−１］）の処理に応答して生成されるデスティネーション色値、Ａｄｓｔ［ｎ−１］はそれまでに処理されたソース画素（即ちｐ［ｎ−１］）の処理に応答して生成されるデスティネーションアルファ値、Ｃｓｒｃ［ｎ］は現在のソース画素に対応するソース色値、Ａｓｒｃ［ｎ］は現在のソース画素に対応するソースアルファ値である。式（３）及び式（４）では、任意の値ｉに対して、Ａｄｓｔ［ｉ］＝０は完全に不透明なデスティネーション画素を示すことができ、Ａｄｓｔ［ｉ］＝１は完全に透明なデスティネーション画素を示すことができる。Ａｄｓｔ［−１］及びＣｄｓｔ［−１］は、適切なデフォルト値（例えば、それぞれ１及び０の値）に初期化されてよい。幾つかの例では、Ａｓｒｃ［ｎ］×Ｃｓｒｃ［ｎ］の乗算はシェーダ（例えば画素シェーダ）で実行され得るが、他の数学演算はデスティネーションアルファ決定モジュール５６の一部として実行される。
【００８８】
[0101]テクスチャバッファ５８は、テクスチャマッピングモジュール５４による取り出しのために、テクスチャ値を格納するように構成される。このテクスチャ値は、幾つかの例では、アプリケーションサーフェスにおいて定義される色値に対応することができる。テクスチャバッファ５８は、幾つかの例ではシステムメモリ１０で実施されてよく、又は他の例では別のメモリ（図示せず）で実施されてよい。幾つかの実装形態では、テクスチャバッファ５８の全て又は一部は、キャッシュに格納され得る。テクスチャバッファ５８は、テクスチャマッピングモジュール５４に通信可能に結合される。
【００８９】
[0102]デスティネーションアルファバッファ６０は、デスティネーションアルファ決定モジュール５６によって生成されるデスティネーションアルファ値を格納し、更なる処理のために、格納されたデスティネーションアルファ値をデスティネーションアルファ検査モジュール５２及びデスティネーションアルファ決定モジュール５６に提供するように構成される。デスティネーションアルファバッファ６０は、複数のデスティネーションアルファ値を含むことができ、デスティネーションアルファ値の各々はスクリーン空間内の特定の画素位置に対応する。
【００９０】
[0103]幾つかの例では、デスティネーションアルファバッファ６０は、グラフィックス画像を形成するデスティネーション画素に対するデスティネーションアルファ値及び／又は色値を含むフレームバッファ（例えば図２のフレームバッファ４０）とすることができる。例えば、フレームバッファは、複数のデスティネーション画素に対する赤、緑、青、及びアルファ（ＲＧＢＡ）の各成分を格納することができる。特定のデスティネーション画素に対するＲＧＢＡ成分のうち「Ａ」成分は、その画素に対するデスティネーションアルファ値に対応することができる。場合によっては、フレームバッファは、色サブバッファとデスティネーションアルファサブバッファに細分されてよく、色データ（例えばＲＧＢ）は色サブバッファに格納されてよく、デスティネーションアルファ値（例えば「Ａ」成分）はデスティネーションアルファサブバッファに格納されてよい。
【００９１】
[0104]更なる例では、デスティネーションアルファバッファ６０は、グラフィックス画像のデスティネーション画素のサブセットに対するデスティネーションアルファ値及び／又は色値を含むビンバッファとすることができる。ビンバッファは、フレームバッファに関して上記で説明したデータと類似した、デスティネーション画素のサブセットに対するデータを格納することができる。ビンバッファは、幾つかの例では、フレームバッファにアクセスするために使用される通信インターフェースよりも高い帯域幅を有する通信インターフェースを介して、デスティネーションアルファ検査モジュール５２にアクセス可能とすることができる。
【００９２】
[0105]デスティネーションアルファ検査モジュール５２、テクスチャマッピングモジュール５４、及びデスティネーションアルファ決定モジュール５６によって受け取られる各ソース画素は、スクリーン空間内の特定の画素位置に対応する。例えば、各ソース画素は、画素に対応する画素位置を示す位置座標を含むことができる。従って、各ソース画素は、デスティネーションアルファバッファ６０内の対応するデスティネーション画素及びデスティネーションアルファ値にマッピングされる。
【００９３】
[0106]幾つかの例では、デスティネーションアルファバッファ６０は、テクスチャバッファ５８の利用可能な読み取り帯域幅よりも高い利用可能な読み取り帯域幅を有することができる。例えば、テクスチャバッファ５８は、１つ又は複数のバス（例えば図１のバス２０及び／又は２２）によってＧＰＵ１２に結合されたオフチップメモリとすることができ、デスティネーションアルファバッファ６０は、必ずしも１つ又は複数のバスを介してＧＰＵ１２に結合されるとは限らないオンチップキャッシュとすることができる。テクスチャマッピングモジュール５４の前にソース画素を破棄することによって、テクスチャバッファ５８から実行されることが必要なソース読み取りの回数が減少され、それによって、グラフィックス処理パイプライン５０に必要とされる全体的なメモリアクセス帯域幅を減少させることができる。
【００９４】
[0107]画素処理パイプライン５０は、幾つかの例では、画素レベルではなくサンプルレベルで処理を実行することができる。そのような例では、各画素は複数のサンプルに関連してよく、各サンプルは単一画素に関連してよい。更に、各サンプルは、デスティネーションアルファバッファ６０内のそれ自体のデスティネーションアルファ値に関連付けられてよい。ソース画素に対する１つ又は複数のテクスチャ値をテクスチャバッファ５８から取り出させない動作を実行するかどうか決定するために、デスティネーションアルファ検査モジュール５２は、ソース画素の各サンプルに関連付けられたデスティネーションアルファ値を閾値の値と比較し、そのソース画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下であるかどうか決定することができる。ソース画素に関連付けられたサンプルの全てに対するデスティネーションアルファ値が閾値の値以下である場合、デスティネーションアルファ検査モジュール５２は、ソース画素に関連付けられた全てのサンプルを破棄することができる。そうでない場合、ソース画素に関連付けられたサンプルのうち少なくとも１つに対するデスティネーションアルファ値が閾値の値よりも小さくも等しくもない場合、デスティネーションアルファ検査モジュール５２は、ソース画素に関連付けられたサンプルの全てを、更なる処理のために後続処理段のセットに渡すことができる。
【００９５】
[0108]複数の重複サーフェス及び／又はプリミティブが単一のグラフィックス画像に対してレンダリングされることがあるので、複数のソース画素が同じ画面画素位置に関連付けられてよい。本明細書で用いられる場合、両方のサーフェスが、スクリーン空間内の同じ画素位置にマッピングされる少なくとも１つの画素を有する場合、１つのサーフェスは別のサーフェス内で重複することができる。特定の画面画素位置に対するデスティネーションアルファ値は、特定の画面位置に対応するソース画素がデスティネーションアルファ決定モジュール５６によって処理されるたびに、逐次的に更新され得る。更新されたデスティネーションアルファ値は、同じ画素位置に対する前のデスティネーションアルファ値の関数に依存することができる。従って、デスティネーションアルファバッファ６０に格納されるデスティネーションアルファ値は、所与の時点までデスティネーション画素に対するデスティネーションアルファ決定モジュール５６によって処理された全てのソース画素に基づいて所与の時点でのそのデスティネーション画素の不透明度を示す「合成」アルファ値を表すことができる。
【００９６】
[0109]幾つかの例では、デスティネーションアルファ値が、ソース画素を受け取るためにデスティネーションアルファ検査モジュール５２によって取り出されるとき、画素処理パイプライン５０によってまだ処理されており、デスティネーションアルファ決定モジュール５６に未達の他のソース画素がある場合があることに留意されたい。従って、特定のソース画素に対する、デスティネーションアルファ検査モジュール５２によって取り出されるデスティネーションアルファ値は、現在のソース画素の前に画素処理パイプライン５０において処理し始めたあらゆるソース画素の寄与を反映しないことがある。言い換えれば、デスティネーションアルファ検査モジュール５２によって取り出されるデスティネーションアルファ値は、「最新でない」即ち「古い」デスティネーション値であることがある。とはいえ、いわゆる「最新でない」デスティネーションアルファ値が取り出される場合であっても、そのようなデスティネーションアルファ値が、デスティネーション画素が不透明度の閾値レベルに達したことを示す場合、デスティネーションアルファ値が不透明度の閾値レベルをいったん達成すると、デスティネーションアルファ値は、その後、同じフレームをレンダリングする間、不透明度が減少することはないので、デスティネーションアルファ検査モジュール５２は依然としてソース画素を安全に破棄することができる。従って、本開示の技法は、幅最新のデスティネーションアルファ値が取り出されていない場合でも、システム帯域を減少させるのに依然として効果的であり得る。
【００９７】
[0110]本開示のデスティネーションアルファ検査法は、グラフィックスプロセッサで一般に見られるソースアルファ検査及びグラフィックスプロセッサで一般に見られるアルファブレンディング関数と異なることに更に留意されたい。ソースアルファ検査は、処理されている各ソース画素とともに含まれるソースアルファ値に基づいて画素を破棄することができる。所与の時点までの所与の画素位置に対する全てのソース画素処理に対する合成アルファ値であるデスティネーションアルファ値とは異なり、ソースアルファ値は、各ソース画素に固有のアルファ値であり、合成アルファ値ではない。その上、デスティネーションアルファ検査モジュール５２によって使用されるデスティネーションアルファ値は、デスティネーションアルファバッファ６０、例えばフレームバッファ又はビンバッファから取り出されるが、ソースアルファ検査によって使用されるソースアルファ値は、一般的には、受け取られたソース画素それ自体の中に含まれる。従って、従来のソースアルファテスティングで使用されるソースアルファ値は、一般的には、前の処理段から直接受け取られ、フレームバッファ又はビンバッファから取り出されない。
【００９８】
[0111]従来技術によるソースアルファテスティングブロック及び従来技術によるアルファブレンディングブロックは本開示で説明するデスティネーションアルファ検査モジュールとは異なるが、ソースアルファテスティングブロック及びアルファブレンディングブロックの一方又は両方は、本開示のデスティネーションアルファ検査モジュールとともに使用されてよい。前景から背景へのレンダリング順序が使用される場合、アルファブレンディングブロックは、画家のアルゴリズムに従ってレンダリングするときに一般的に使用される背景から前景へのアルファブレンディング方程式ではなく、前景から背景へのアルファブレンディング方程式を使用するように構成され得る。
【００９９】
[0112]図４は、図３の画素処理パイプライン５０を実施するために使用され得る例示的な画素処理パイプライン６２を示すブロック図である。画素処理パイプライン６２は、デスティネーションアルファ検査モジュール５２と、テクスチャマッピングモジュール５４と、デスティネーションアルファ決定モジュール５６と、テクスチャバッファ５８と、ビンバッファ６４と、フレームバッファ６６とを含む。図４に示されるように、画素処理パイプライン６２のアーキテクチャは、デスティネーションアルファバッファ６０がビンバッファ６４及びフレームバッファ６６によって置き換えられていることを除いて、図３に示される画素処理パイプライン５０のアーキテクチャに類似している。図３及び図４の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
【０１００】
[0113]ビンバッファ６４は、フレームバッファ６６内のデスティネーション画素のサブセットに対して図３のデスティネーションアルファバッファ６０の機能を実施することができる。フレームバッファ６６は、図２に関して説明に示され説明されるフレームバッファ４０に対応することができる。フレームバッファ６６は、スクリーン空間デスティネーション画素内の各々に対して、色の成分と、デスティネーションアルファ値とを格納することができる。例えば、フレームバッファ６６は、デスティネーション画素の各々に対してＲＧＢＡ成分を格納することができ、ＲＧＢＡ成分のアルファ（「Ａ」）成分は、デスティネーションアルファ検査モジュール５２によって使用されるデスティネーションアルファ値に対応することができる。フレームバッファ６６は、システムメモリ１０内に存在することができる。場合によっては、フレームバッファ６６は、色サブバッファとデスティネーションアルファサブバッファに細分されてよく、色データ（例えばＲＧＢ）は色サブバッファに格納されてよく、デスティネーションアルファ値（例えば「Ａ」成分）はデスティネーションアルファサブバッファに格納されてよい。
【０１０１】
[0114]ビンバッファ６４は、フレームバッファ６６内の画素のサブセットに対して、色の成分と、デスティネーションアルファ値とを格納することができる。例えば、ビンバッファ６４は、指定の大きさの画素のタイル、例えばデスティネーション画素の１６×１６タイルの中のデスティネーション画素に対するＲＧＢＡ成分を格納することができる。幾つかの例では、ビンバッファ６４はオンチップメモリとすることができる。言い換えれば、ビンバッファ６４は、ＧＰＵ１２の画素処理パイプライン６２と同じマイクロチップ上に存在することができる。そのような例では、フレームバッファ４０はオフチップメモリであってよく、例えば、フレームバッファ４０は、ＧＰＵ１２及びビンバッファ６４が存在するマイクロチップと異なる第２のマイクロチップ上に存在してよい。
【０１０２】
[0115]ビンバッファ６４の初期化及びビンバッファ６４からのデータのフレームバッファ６６への書き込みは、幾つかの例では、プリミティブのビン又はタイルの処理と同期され得る。例えば、プリミティブの新しいビンが処理されようとしているとき、画素処理パイプライン６２は、ビンバッファ６４に、プリミティブのそれまでに処理されたビンのためにビンバッファ６４に格納されたデスティネーション画素データをフレームバッファ６６に書き込ませ、ビンバッファ内のデータ値をデフォルト値に初期化させ得る。
【０１０３】
[0116]幾つかの例では、デスティネーションアルファ検査モジュール５２は第１の通信インターフェースを介してビンキャッシュ６４からデスティネーションアルファ値を取り出すことができ、テクスチャマッピングモジュール５４は第２の通信インターフェースを介してテクスチャバッファ５８からテクスチャ値を取り出すことができ、フレームバッファ６６は第３の通信インターフェースを介して画素処理パイプライン６２にアクセス可能であることができる。そのような例では、第１の通信インターフェースは、幾つかの例では、第２の通信インターフェース及び／又は第３の通信インターフェースよりも高い帯域幅を有することができる。場合によっては、第２の通信インターフェースは、例えばフレームバッファ４０とテクスチャバッファ４２が両方ともシステムメモリ１０で実施されるとき、第３の通信インターフェースと同じ通信インターフェースであってよい。第２の通信インターフェース及び第３の通信インターフェースは、幾つかの例では、図１のバス２０及び／又は２２に相当することができる。ビンバッファ６４がオンチップビンバッファであるとき、第１の通信インターフェースは、ＧＰＵ１２の内部にある通信インターフェースであってよい。
【０１０４】
[0117]追加の例では、ビンバッファ６４の容量は、あるグラフィックス画像に関連付けられた複数のデスティネーション画素の全てを格納するように構成され得るフレームバッファ６６の容量よりも小さいことがある。従って、ビンバッファ６４の容量は、そのような例では、グラフィックス画像に関連付けられた複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さいことがある。
【０１０５】
[0118]本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、特定のビンに対するデスティネーションアルファ値が、デスティネーションアルファ検査モジュール５２によって、必要とされるときにビンバッファ６４にすでにロードされていることがあるので、図４に示されるビニングアーキテクチャの状況で特に有用なことがある。これによって、そのような値にフレームバッファ６６からアクセスする必要性が緩和されることがあり、フレームバッファ４０は、より低い利用可能な帯域幅を持つ、通信インターフェースを介してアクセス可能なメモリ、例えばシステムメモリ１０にあってよい。従って、例えば図４に示されるように、ビニング状況において本開示の技法を実施することによって、デスティネーションアルファ値を取り出すために必要とされ得るオーバーヘッド帯域幅は、テクスチャバッファ５８へのソース読み取りの回数を減少させることによって達成される帯域幅節減と比較して、相対的に最小であってよい。
【０１０６】
[0119]図５は、本開示の技法を実施するために使用され得る例示的なデスティネーションアルファ検査モジュール６８を示すブロック図である。幾つかの例では、デスティネーションアルファ検査モジュール６８は、図３及び図４に示されるデスティネーションアルファ検査モジュール５２に対応することができる。デスティネーションアルファ検査モジュール６８は、１つ又は複数のソース画素を受け取り、受け取った画素に対してデスティネーションアルファ検査を実行し、デスティネーションアルファ検査の結果に基づいて個々の画素を選択的に破棄するように構成される。デスティネーションアルファ検査モジュール６８は、デスティネーションアルファ取り出しモジュール７０と、比較モジュール７２と、閾値レジスタ７４とを含む。
【０１０７】
[0120]デスティネーションアルファ取り出しモジュール７０は、位置座標データを含むソース画素を受け取り、その位置座標データに基づいてソース画素の位置座標を決定し、ソース画素の位置座標に基づいてデスティネーションアルファ値をデスティネーションアルファバッファ６０から取り出し、取り出されたデスティネーションアルファ値を比較のために比較モジュール７２に提供するように構成され得る。取り出されたデスティネーションアルファ値は、ソース画素と同じ位置座標を有することができる。
【０１０８】
[0121]比較モジュール７２は、デスティネーションアルファ取り出しモジュール７０からデスティネーションアルファ値を、閾値レジスタ７４から閾値の値を受け取り、デスティネーションアルファ値を閾値の値と比較するように構成され得る。この比較に基づいて、比較モジュール７２は、ソース画素を１つ又は複数の処理段に渡すか、又は画素を破棄する、即ちソース画素を何らかの後続処理段に渡さない、のどちらかを行う。幾つかの例では、比較モジュール７２は、デスティネーションアルファ値が閾値の値以下であるかどうか決定することによって、デスティネーションアルファ値を閾値と比較することができる。デスティネーションアルファ値が閾値以下である場合、比較モジュール７２は、幾つかの例では、ソース画素を破棄することができる。逆に、デスティネーションアルファ値が閾値よりも小さくも等しくもない場合、比較モジュール７２は、幾つかの例では、画素を１つ又は複数の後続処理段に渡す、即ちソース画素を破棄しないことができる。他の例では、他の閾値比較関数が使用されてよい。このようにして、デスティネーションアルファ検査モジュール６８は、ソース画素に対応するデスティネーションアルファ値に基づいてソース画素を選択的に破棄することができる。
【０１０９】
[0122]閾値レジスタ７４は、その値又はそれより下方ではソース画素が破棄され得る不透明度の閾値レベルを示す閾値の値を格納することができる。例えば、デスティネーションアルファ検査モジュール６８が、特定の画面画素位置を有するソース画素を処理するとき、不透明度の閾値レベルは、その値又はそれより下方ではソース画素が見えず、従ってソース画素が表示される必要がない、対応するデスティネーション画素に対する不透明度のレベルを示すことができる。図５に示されるように、閾値レジスタ７４は、閾値レジスタ７４に格納する特定の閾値の値を示す情報を含むことができる構成情報を受け取るように構成される。閾値レジスタ７４は、その構成情報を、例えばホストＣＰＵ上で実行されるユーザソフトウェアアプリケーション、ホストＣＰＵ上で実行されるＧＰＵドライバ、ＧＰＵ上に存在するハードウェア構成要素、及び／又はＧＰＵ上で実行されるシェーダから受け取ることができる。
【０１１０】
[0123]図６は、本開示の技法を実施するために使用され得る別の例示的なデスティネーションアルファ検査モジュール７６を示すブロック図である。幾つかの例では、デスティネーションアルファ検査モジュール７６は、図３及び図４に示されるデスティネーションアルファ検査モジュール５２に取って代わることができる。デスティネーションアルファ検査モジュール７６は、１つ又は複数のソース画素を受け取り、そのソース画素に対してデスティネーションアルファ検査を実行し、比較に応答して制御信号を選択的にアクティブにするように構成される。デスティネーションアルファ検査モジュール７６は、デスティネーションアルファ取り出しモジュール７０と、比較モジュール７８と、閾値レジスタ７４とを含む。図６に示されるように、デスティネーションアルファ検査モジュール７６のアーキテクチャは、比較モジュール７２が比較モジュール７８によって置き換えられ、全てのソース画素が後続処理段に渡されることを除いて、図５に示されるデスティネーションアルファ検査モジュール６８のアーキテクチャに類似している。図５及び図６の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
【０１１１】
[0124]比較モジュール７８は、図５の比較モジュール７２に関して上記で説明した比較動作と類似の比較動作を実行することができる。しかしながら、比較動作に応答してソース画素を選択的に破棄する代わりに、比較モジュール７８は、制御信号を選択的にアクティブ及び非アクティブにすることができる。制御信号は、対応するソース画素に対するテクスチャ値の取り出しを選択的に有効及び無効にするために、画素処理パイプライン内の１つ又は複数の後続処理段に供給され得る。例えば、デスティネーションアルファ検査モジュール７６でソース画素を破棄するのではなく、別の処理段が、制御信号に基づいてソース画素を破棄してよい。別の例として、テクスチャマッピングモジュールは、制御信号を受け取り、制御信号に基づいてソース画素に対するテクスチャ値取り出しを選択的に有効又は無効にしてよい。
【０１１２】
[0125]図６の例示的なデスティネーションアルファ検査モジュール７６は、図５に示される構成に加えて又はその代わりに画素処理パイプライン内でのテクスチャ値の取り出しを選択的に制御するために使用され得る別の例示的なデスティネーションアルファ検査モジュール構成を示す。他のデスティネーションアルファ検査モジュール構成が企図され、本開示の範囲内に含まれる。例えば、別の例示的なデスティネーションアルファ検査モジュール構成は、テクスチャ値がソース画素に対して取り出されるべきかどうかを示す属性画素を修正することができ、テクスチャマッピングモジュールは、この画素属性に基づいて、ソース画素に対するテクスチャ値を選択的に取り出すことができる。
【０１１３】
[0126]幾つかの例では、本開示の技法に従って設計された画素処理パイプラインは、ステンシル検査を実行する処理ユニットを含むことができる。この処理ユニットは、例えば、ステンシル検査ブロック及び／又は合成されたｚ／ステンシル検査ブロックであってよい。そのような例では、ＧＰＵは、幾つかの例では、ステンシル検査を実行する処理ユニットをステンシル値の代わりにデスティネーションアルファ値を受け取るように構成することによって、本開示で説明されるデスティネーションアルファ検査機能を実施することができる。次いで、処理ユニットは、本開示の技法に従って、デスティネーションアルファ検査を実行し、デスティネーションアルファ値に基づいてソース画素に対するテクスチャ値を選択的に取り出させるために使用され得る。これらの技法は、図７から図１０に関して更に詳細に説明される。
【０１１４】
[0127]図７は、構成可能なステンシル検査ブロックを使用して、デスティネーションアルファ検査を実行し、本開示の選択的テクスチャ値取り出し法を実施する例示的な画素処理パイプライン８０を示すブロック図である。画素処理パイプライン８０は、デスティネーションアルファ検査モジュール８２と、ステンシルバッファ８４と、デスティネーションアルファバッファ６０とを含む。デスティネーションアルファ検査モジュール８２は、構成可能なステンシル検査ブロック８６を含む。ステンシルバッファ８４は、画素処理パイプライン８０に対するステンシル値を格納するように構成され得る。幾つかの例では、ステンシルバッファ８４は、オフチップシステムメモリ、例えば図１に示されるシステムメモリ１０の中に存在することができる。更なる例では、ステンシルバッファ８４は、図９に関して説明したｚ／ステンシルバッファに類似したｚ／ステンシルバッファであってよく、フレームバッファ内のデスティネーション画素に関連付けられたｚ値及びステンシル値を格納することができる。デスティネーションアルファバッファ６０は、例えば、フレームバッファ又はビンバッファであってよい。デスティネーションアルファバッファ６０がビンバッファであるとき、デスティネーションアルファバッファ６０は、幾つかの例では、画素処理パイプライン８０を含むＧＰＵと同じマイクロチップ上に存在することができる。
【０１１５】
[0128]デスティネーションアルファ検査モジュール８２は、ソース画素をＧＰＵ内の前の処理段から受け取り、このソース画素に対応するデスティネーションアルファ値を取り出し、このデスティネーションアルファ値を閾値と比較し、この比較の結果に基づいてソース画素を選択的に破棄するように構成され得る。図７に示されるように、デスティネーションアルファ検査モジュール８２は構成可能なステンシル検査ブロック８６として実施される。構成可能なステンシル検査ブロック８６は、ステンシル検査状態及びデスティネーションアルファ検査状態で動作するように構成可能であってよい。ステンシル検査状態で動作するように構成されるとき、ステンシル検査ブロック８６は、ソース画素を前の処理段から受け取り、受け取ったソース画素に対応するステンシル値をステンシルバッファ８４から取り出し、取り出したステンシル値を閾値と比較し、比較の結果に基づいてソース画素を選択的に破棄することができる。デスティネーションアルファ検査状態で動作するように構成されるとき、ステンシル検査ブロック８６は対応するステンシル値をステンシルバッファ８４から取り出すのではなく、対応するデスティネーションアルファ値をデスティネーションアルファバッファ６０から取り出すことができることを除いて、ステンシル検査ブロック８６は、ステンシル検査状態で構成されたときと本質的に同じ動作を実行することができる。従って、ステンシル検査ブロック８６は、デスティネーションアルファ値に基づいて、ソース画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、及びこの動作を実行すると決定したことに応答して、本開示の技法に従ってこの動作を実行することを決定することができる。
【０１１６】
[0129]ステンシル検査ブロック８６は、ステンシル検査ブロック８６によって受け取られる構成情報に基づいて構成状態を切り換えるように構成され得る。構成情報は、ＧＰＵ内の別の構成要素から、ホストＣＰＵ上で実行されるＧＰＵドライバから、及び／又はホストＣＰＵ上で実行されるユーザソフトウェアアプリケーションから受け取られ得る。
【０１１７】
[0130]幾つかの例では、ステンシル検査ブロック８６によって受け取られる構成情報は、ステンシル検査ブロック８６が入力値（例えばステンシル値及び／又はデスティネーションアルファ値）を取り出すべきメモリアドレスを指定することができる。そのような例では、ステンシル検査ブロック８６は、ステンシルバッファ８４を指すメモリアドレスをステンシル検査ブロック８６に提供することによってステンシル値を受け取るように構成され得る。更に、ステンシル検査ブロック８６は、ステンシルバッファ８４の代わりにデスティネーションアルファバッファ６０を指すメモリアドレスをステンシル検査ブロック８６に提供することによって、ステンシル値の代わりにデスティネーションアルファ値を受け取るように構成され得る。
【０１１８】
[0131]本開示の技法に従ってステンシル値の代わりにデスティネーションアルファ値を取り出すようにステンシル検査ブロックを再構成することによって、ハードウェアベースのデスティネーションアルファ検査ブロックは、追加のハードウェアブロックをグラフィックスパイプラインに追加することを必ずしも必要とするとは限らずに、グラフィックス処理パイプラインにおいて実施され得る。その上、グラフィックスプロセッサは、２つの異なるレンダリングモード、即ちハードウェアベースのステンシル検査を実行する第１のモードとハードウェアベースのデスティネーションアルファ検査を実行する第２のモードとを選択的に切り換えることを可能にすることができる。
【０１１９】
[0132]図８は、図７の画素処理パイプラインを実施するために使用され得る例示的なステンシル検査ブロック８６を示すブロック図である。ステンシル検査ブロック８６は、アドレスレジスタ８８と、閾値レジスタ９０と、入力値取り出しモジュール９２と、比較モジュール９４とを含む。
【０１２０】
[0133]アドレスレジスタ８８は、入力値取り出しモジュール９２が入力値を取り出すべきメモリアドレスを格納するように構成され得る。ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、ステンシルバッファ８４に対するアドレス空間を指すアドレス値をアドレスレジスタ８８にロードすることによってステンシル値を取り出すようにステンシル検査ブロック８６を構成することができる。同様に、ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、デスティネーションアルファバッファ６０に対するアドレス空間を指すアドレス値をアドレスレジスタ８８にロードすることによってデスティネーションアルファ値を取り出すようにステンシル検査ブロック８６を構成することができる。
【０１２１】
[0134]閾値レジスタ９０は、比較モジュール９４によって使用するための閾値の値を格納することができる。ステンシル検査ブロック８６がステンシル検査を実行するように構成されるとき、閾値の値は、ステンシル検査の基準値を示すことができる。ステンシル検査ブロック８６がデスティネーションアルファ検査を実行するように構成されるとき、閾値の値は、その値又はそれより下方ではソース画素が破棄され得る不透明度の閾値レベルを示すことができる。ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、閾値の値を閾値レジスタ９０にロードすることによって特定の閾値レベルを格納するように閾値レジスタ９０を構成することができる。
【０１２２】
[0135]入力値取り出しモジュール９２は、位置座標データを含むソース画素を受け取り、その位置座標データに基づいてソース画素の位置座標を決定し、その位置座標に基づいて入力値をメモリ又はキャッシュから取り出し、その入力値を比較のために比較モジュール９４に提供するように構成され得る。取り出された入力値は、ソース画素と同じ位置座標に関連付けられ得る。入力値取り出しモジュール９２は、入力値を、アドレスレジスタ８８に格納されるメモリアドレスによって少なくとも一部は決定されるメモリ位置及び／又はキャッシュ位置から取り出すことができる。アドレスレジスタ８８に格納されたメモリアドレスがステンシルバッファ８４を指すとき、入力値取り出しモジュール９２は、ソース画素に対応するステンシル値を取り出し、そのステンシル値を比較のために比較モジュール９４に提供することができる。同様に、アドレスレジスタ８８に格納されたメモリアドレスがデスティネーションアルファバッファ６０を指すとき、入力値取り出しモジュール９２は、ソース画素に対応するデスティネーションアルファ値を取り出し、そのデスティネーションアルファ値を比較のために比較モジュール９４に提供することができる。
【０１２３】
[0136]比較モジュール９４は、入力値取り出しモジュール９２から入力値を、閾値レジスタ９０から閾値の値を受け取り、入力値を閾値の値と比較するように構成され得る。この比較に基づいて、比較モジュール９４は、ソース画素を１つ又は複数の処理段に渡すか、又は画素を破棄する、即ちソース画素を何らかの後続処理段に渡さない、のどちらかを行う。幾つかの例では、比較モジュール９４は、入力値が閾値以下であるかどうか決定することによって、入力値を閾値と比較することができる。入力値が閾値以下である場合、比較モジュール９４は、幾つかの例では、ソース画素を破棄することができる。逆に、入力値が閾値よりも小さくも等しくもない場合、比較モジュール９４は、幾つかの例では、画素を１つ又は複数の後続処理段に渡す、即ちソース画素を破棄しないことができる。他の例では、他の閾値比較関数が使用されてよい。この場合も、入力値は、入力値取り出しモジュール９２がどのメモリ空間からデータを取り出すかに応じて、ステンシル値又はデスティネーションアルファ値に対応することができる。このようにして、ステンシル検査ブロック８６は、ステンシル検査ブロックとして、又はデスティネーションアルファ検査ブロックとして動作するように構成可能であってよい。
【０１２４】
[0137]図９は、構成可能なｚ／ステンシル検査ブロック１０６を使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査を実行する例示的な画素処理パイプライン１００を示すブロック図である。画素処理パイプライン１００は、デスティネーションアルファ検査モジュール１０２と、ｚ／ステンシルバッファ１０４と、デスティネーションアルファバッファ６０とを含む。デスティネーションアルファ検査モジュール１０２は、合成された構成可能なｚ／ステンシル検査ブロック１０６を含む。Ｚ／ステンシルバッファ１０４は、画素処理パイプライン１００に対するステンシル値及びｚ値を格納するように構成され得る。幾つかの例では、ｚ／ステンシルバッファ１０４は、オフチップシステムメモリ、例えば図１に示されるシステムメモリ１０の中に存在することができる。デスティネーションアルファバッファ６０は、例えば、フレームバッファ又はビンバッファであってよい。デスティネーションアルファバッファ６０がビンバッファであるとき、デスティネーションアルファバッファ６０は、幾つかの例では、画素処理パイプライン１００を含むＧＰＵと同じマイクロチップ上に存在することができる。
【０１２５】
[0138]デスティネーションアルファ検査モジュール１０２は、ソース画素をＧＰＵ内の前の処理段から受け取り、このソース画素に対応するデスティネーションアルファ値を取り出し、このデスティネーションアルファ値を閾値と比較し、この比較の結果に基づいてソース画素を選択的に破棄するように構成される。図９に示されるように、デスティネーションアルファ検査モジュール１０２は構成可能なｚ／ステンシル検査ブロック１０６として実施される。構成可能なｚ／ステンシル検査ブロック１０６は、ｚステンシル検査状態及びデスティネーションアルファ検査状態で動作するように構成可能であってよい。ｚステンシル検査状態で動作するように構成されるとき、ｚ／ステンシル検査ブロック１０６は、受け取ったソース画素に対してステンシル検査とｚ検査の一方又は両方を実行することができる。ステンシル検査は、ステンシル値がステンシルバッファ８４ではなくｚ／ステンシルバッファ１０４から取り出されることを除いて、図７のステンシルブロック８６に関して上記で説明した方法と実質的に類似の方法で実行される。
【０１２６】
[0139]ｚ検査を実行するために、ｚ／ステンシル検査ブロック１０６は、ソース画素を前の処理段から受け取り、受け取ったソース画素に対応するｚ値をｚ／ステンシルバッファ１０４から取り出し、取り出したｚ値を、ソース画素とともに含まれるソースｚ値と比較し、比較の結果に基づいてソース画素を選択的に破棄することができる。デスティネーションアルファ検査状態で動作するように構成されるとき、ｚ／ステンシルバッファ１０４は、ステンシル検査によって実行されるのと本質的に同じ動作を実行することができるが、ｚ／ステンシル検査ブロック１０６は、対応するステンシル値をｚ／ステンシルバッファ１０４から取り出すのではなく、対応するデスティネーションアルファ値をデスティネーションアルファバッファ６０から取り出すことができる。従って、ｚ／ステンシル検査ブロック１０６は、デスティネーションアルファ値に基づいて、ソース画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行するかどうか決定し、及びこの動作を実行すると決定したことに応答して、本開示の技法に従ってこの動作を実行することを決定することができる。
【０１２７】
[0140]ｚ／ステンシル検査ブロック１０６は、ｚ／ステンシル検査ブロック１０６によって受け取られる構成情報に基づいて構成状態を切り換えるように構成され得る。構成情報は、ＧＰＵ内の別の構成要素から、ホストＣＰＵ上で実行されるＧＰＵドライバから、及び／又はホストＣＰＵ上で実行されるユーザソフトウェアアプリケーションから受け取られ得る。
【０１２８】
[0141]幾つかの例では、ｚ／ステンシル検査ブロック１０６によって受け取られる構成情報は、ｚ／ステンシル検査ブロック１０６が入力値（例えばステンシル値及び／又はデスティネーションアルファ値）を取り出すべきメモリアドレスを指定することができる。そのような例では、ｚ／ステンシル検査ブロック１０６は、ｚ／ステンシルバッファ１０４を指すメモリアドレスをｚ／ステンシル検査ブロック１０６に提供することによってデスティネーションアルファ値を受け取るように構成され得る。更に、ｚ／ステンシル検査ブロック１０６は、ステンシルバッファ１０４の代わりにデスティネーションアルファバッファ６０を指すメモリアドレスをｚ／ステンシル検査ブロック１０６に提供することによって、ステンシル値及び／又はｚ値の代わりにデスティネーションアルファ値を受け取るように構成され得る。
【０１２９】
[0142]本開示の技法に従ってｚ−ステンシル値の代わりにデスティネーションアルファ値を取り出すようにｚステンシル検査ブロックを再構成することによって、ハードウェアベースのデスティネーションアルファ検査ブロックは、追加のハードウェアブロックをグラフィックスパイプラインに追加することを必ずしも必要とするとは限らずに、グラフィックス処理パイプラインにおいて実施され得る。その上、グラフィックスプロセッサは、少なくとも２つの異なるレンダリングモード、即ちハードウェアベースの合成されたｚ−ステンシル検査を実行する第１のモードとハードウェアベースのデスティネーションアルファ検査を実行する第２のモードとを選択的に切り換えることを可能にすることができる。
【０１３０】
[0143]幾つかの例では、ｚ／ステンシル検査ブロック１０６が、デスティネーションアルファ検査モードで動作するように構成されるとき、ｚ／ステンシル検査ブロック１０６のｚ検査部分は、全ての画素をｚ検査に合格させ、従って画素がｚ検査により破棄されない、「常に合格（pass-always）」モードに置かれてよい。言い換えれば、ｚ検査は効果的に無効にされ得る。ｚ／ステンシル検査ブロック１０６がデータをデスティネーションアルファバッファ６０から受け取るように構成されるとき、ｚ／ステンシル検査ブロック１０６は必ずしもｚ値を受け取るとは限らないことがあるので、ｚ／ステンシル検査ブロック１０６は、これらの例では「常に合格」モードに置かれ得る。むしろ、ｚ／ステンシル検査ブロック１０６は、色値例えばＲＧＢ値をデスティネーションアルファバッファ６０から受け取ることができる。ｚ／ステンシル検査ブロック１０６を「常に合格」モードに置くことによって、ｚ検査は、色値に基づいて画素を意図せずに破棄しない。
【０１３１】
[0144]図１０は、図９の画素処理パイプラインを実施するために使用され得る例示的なｚ／ステンシル検査ブロック１０６を示すブロック図である。ｚ／ステンシル検査ブロック１０６は、アドレスレジスタ１０８と、閾値レジスタ１１０と、ｚ検査無効化レジスタ１１２と、入力値取り出しモジュール１１４と、比較モジュール１１６とを含む。
【０１３２】
[0145]アドレスレジスタ１０８は、入力値取り出しモジュール１１４が入力値を取り出すべきメモリアドレスを格納するように構成され得る。ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、ｚ／ステンシルバッファ１０４に対するアドレス空間を指すアドレス値をアドレスレジスタ１０８にロードすることによってｚステンシル値（即ちｚ値及びステンシル値）を取り出すように入力値取り出しモジュール１１４を構成することができる。同様に、ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、デスティネーションアルファバッファ６０に対するアドレス空間を指すアドレス値をアドレスレジスタ１０８にロードすることによってデスティネーションアルファ値を取り出すように入力値取り出しモジュール１１４を構成することができる。
【０１３３】
[0146]閾値レジスタ１１０は、比較モジュール１１６によって使用するための閾値の値を格納することができる。ｚ／ステンシル検査ブロック１０６がｚステンシル検査（即ちｚ検査及び／又はステンシル検査）を実行するように構成されるとき、閾値の値は、ステンシル検査の基準値を示すことができる。ｚ／ステンシル検査ブロック１０６がデスティネーションアルファ検査を実行するように構成されるとき、閾値の値は、その値又はそれより下方ではソース画素が破棄され得る不透明度の閾値レベルを示すことができる。ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、閾値の値を閾値レジスタ１１０にロードすることによって特定の閾値レベルを格納するように閾値レジスタ１１０を構成することができる。
【０１３４】
[0147]ｚ検査無効化レジスタ１１２は、ｚ検査が比較モジュール１１６に対して有効にされるべきか又は無効にされるべきかを示す値を格納することができる。ユーザアプリケーション、ＧＰＵドライバ、及び／又はＧＰＵ構成要素は、構成値をｚ検査無効化レジスタ１１２にロードすることによって特定の構成値を格納するようにｚ検査無効化レジスタ１１２を構成することができる。
【０１３５】
[0148]入力値取り出しモジュール１１４は、位置座標データを含むソース画素を受け取り、その位置座標データに基づいてソース画素の位置座標を決定し、その位置座標に基づいて入力値をメモリ又はキャッシュから取り出し、その入力値を比較のために比較モジュール１１６に提供するように構成され得る。取り出された入力値は、ソース画素と同じ位置座標に関連付けられ得る。入力値取り出しモジュール１１４は、入力値を、アドレスレジスタ１０８に格納されるメモリアドレスによって少なくとも一部は決定されるメモリ位置及び／又はキャッシュ位置から取り出すことができる。アドレスレジスタ１０８に格納されたメモリアドレスがｚ／ステンシルバッファ１０４を指すとき、入力値取り出しモジュール１１４は、ソース画素に対応するｚステンシル値を取り出し、そのｚステンシル値を比較のために比較モジュール１１６に提供することができる。同様に、アドレスレジスタ１０８に格納されたメモリアドレスがデスティネーションアルファバッファ６０を指すとき、入力値取り出しモジュール１１４は、ソース画素に対応するデスティネーションアルファ値を取り出し、そのデスティネーションアルファ値を比較のために比較モジュール１１６に提供することができる。
【０１３６】
[0149]比較モジュール１１６は、２つの異なる入力値を含む入力データを入力値取り出しモジュール１１４から受け取り、入力値の各々に対して異なる比較検査を実行するように構成され得る。第１の比較検査の一部として、比較モジュール１１６は、入力値取り出しモジュール１１４から受け取った第１の入力値を、閾値レジスタ１１０から受け取った閾値の値と比較することができる。第２の比較検査の一部として、比較モジュール１１６は、入力値取り出しモジュール１１４から受け取った第２の入力値を、ソース画素内に含まれる画素属性と比較することができる。これらの比較検査の両方の結果に基づいて、比較モジュール１１６は、ソース画素を１つ又は複数の処理段に渡すか、又は画素を破棄する、即ちソース画素を何らかの後続処理段に渡さない、のどちらかを行う。例えば、ソース画素が比較検査の両方に合格した場合、比較モジュール１１６は、ソース画素を更なる処理のために後続段に渡すことができる。逆に、ソース画素がテストの少なくとも一方に合格しない場合、比較モジュール１１６はソース画素を破棄することができる。比較モジュール１１６は、ｚ検査無効化レジスタ１１２に格納される構成値に基づいて、第２の比較検査を「常に合格」モードへと選択的に構成することができる。第２の比較検査が「常に合格」モードであるとき、次いで、第２の比較検査は、そのような比較が実行された場合、その比較の実際の結果に関係なく全ての画素に対して合格したと考えられる。従って、第１の比較検査は、ソース画素が破棄されるかどうか決定することになる。
【０１３７】
[0150]比較モジュール１１６が、ｚステンシル検査構成で動作するように構成されるとき、比較モジュール１１６は、（例えば、入力値取り出しモジュール１１４から受け取ったステンシル値を、図８の比較モジュール９４に関して上記で説明した方法と類似した方法で閾値と比較することによって）第１の比較検査を使用してステンシル検査を実行し、（例えば、入力値取り出しモジュール１１４から受け取ったｚ値を、ソース画素内に含まれるソースｚ値属性と比較することによって）第２の比較検査を使用してｚ検査を実行することができる。比較モジュール１１６が、デスティネーションアルファ構成で動作するように構成されるとき、比較モジュール１１６は、（例えば、入力値取り出しモジュール１１４から受け取ったデスティネーションアルファ値を、図８の比較モジュール９４に関して上記で説明した方法と類似した方法で閾値と比較することによって）第１の比較検査を使用してデスティネーションアルファ検査を実行し、比較モジュール１１６は、ｚ検査無効化レジスタ１１２に格納される構成値に基づいて、第２の比較検査を無効にすることができる。このようにして、ｚ／ステンシル検査ブロック１０６は、ｚステンシル検査ブロックとして、又はデスティネーションアルファ検査ブロックとして動作するように構成可能であってよい。
【０１３８】
[0151]幾つかのグラフィックスプロセッサでは、所与の画素位置に対するｚ値及びステンシル値は、単一のデータワードとしてｚ／ステンシルバッファ１０４に格納され得る。例えば、データワードは３２ビットであってよく、ｚ値がワードの２４ビットを構成し、ステンシル値が残りの８ビットを構成する。そのようなグラフィックスプロセッサでは、ＲＧＢＡ成分は、フレームバッファに、及びビンバッファ内での拡張によって、「ＲＧＢ」成分が２４ビットを構成し「Ａ」成分が残りの８ビットを構成する３２ビットワードに格納され得る。そのような例では、３２ビットＲＧＢＡデータワード内でのアルファ値の位置は、ステンシル値が３２ビットｚ値／ステンシルデータワードに一般的に格納される位置にマッピングすることができる。言い換えれば、デスティネーションアルファ値は、ｚ／ステンシル検査ブロック１０６が一般的にステンシル値を受け取ると予想される、データワード内のビット位置と位置合わせすることができ、ＲＧＢ値は、ｚ／ステンシル検査ブロック１０６が一般的にｚ値を受け取ると予想される、データワード内のビット位置と位置合わせすることができる。このようにして、ｚ／ステンシル検査ブロック１０６は、必ずしもｚ／ステンシルバッファ１０４内の基礎となるデータを再構成することを必要とするとは限らずに、デスティネーションアルファ値に対して動作することを可能にすることができる。その上、デスティネーションアルファ検査モードで動作するときにｚ検査機能を無効にすることによって、ｚ値ではなくＲＧＢ値を受け取ることからの干渉が防止され得る。
【０１３９】
[0152]図１１は、プログラム可能なシェーダユニットを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査を実行する例示的な画素処理パイプライン１２０を示すブロック図である。画素処理パイプライン１２０は、プログラム可能なシェーダユニット１２２と、テクスチャマッピングモジュール５４と、テクスチャバッファ５８と、デスティネーションアルファバッファ６０とを含む。図１１の例示的な画素処理パイプライン１２０では、テクスチャマッピングモジュール５４は、固定関数ハードウェアユニットとして実施され、デスティネーションアルファ検査モジュール１２６はプログラム可能なシェーダユニットで実施される。
【０１４０】
[0153]図１１に示されるように、画素処理パイプライン１２０のアーキテクチャは、デスティネーションアルファ検査モジュール５２が、デスティネーションアルファ検査を実施するシェーダユニット１２２によって置き換えられていることを除いて、図３に示される画素処理パイプライン５０のアーキテクチャに類似している。図３及び図１１の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
【０１４１】
[0154]シェーダユニット１２２は、シェーダプログラム１２４を実行するように構成された１つ又は複数の処理要素を含むことができる。シェーダユニット１２２が複数の処理要素を含む場合、各処理要素は、幾つかの例では、他の処理要素と並列にシェーダプログラム１２４を実行するように構成され得る。幾つかの例では、シェーダユニット１２２内の処理要素は、現代のＧＰＵで通常見られる並列な単一命令、複数データ処理（ＳＩＭＤ）パイプラインを形成することができる。
【０１４２】
[0155]シェーダプログラム１２４は、シェーダユニット１２２に関連付けられた命令メモリ又はキャッシュに格納されるプログラム命令を含むことができる。シェーダプログラム１２４は、ホストＣＰＵ例えば図１のＣＰＵ６の上で、ユーザソフトウェアアプリケーション、ＧＰＵドライバ、又はホスト上で実行される別のサービスによってコンパイルされてよく、プログラム１２４シェーダのコンパイルされたバージョンは実行のためにシェーダユニット１２２上にダウンロードされてよい。
【０１４３】
[0156]デスティネーションアルファ検査モジュール１２６は、本開示で説明する様々なデスティネーションアルファ検査モジュールに起因する関数のうちいずれかを実行することができる。例えば、デスティネーションアルファ検査モジュール１２６は、ソース画素に対してデスティネーションアルファ検査を実行し、デスティネーションアルファ検査の結果に基づいてテクスチャマッピングモジュール５４の前に個々のソース画素を選択的に破棄することができる。
【０１４４】
[0157]図１２は、プログラム可能なシェーダユニットを使用して、本開示の選択的テクスチャ値取り出し法に従ってデスティネーションアルファ検査及びテクスチャマッピングを実行する別の例示的な画素処理パイプライン１２８を示すブロック図である。画素処理パイプライン１２８は、シェーダユニット１２２と、テクスチャバッファ５８と、デスティネーションアルファバッファ６０とを含む。図１２に示されるように、画素処理パイプライン１２８のアーキテクチャは、テクスチャマッピングモジュール５４が固定関数パイプライン段の一部ではなくプログラム可能なシェーダユニット上で実施されることを除いて、図１１に示される画素処理パイプライン１２０のアーキテクチャに類似している。図１１及び図１２の同様に番号付けされた構成要素は、同じ又は類似の機能及び構造を有する。従って、簡潔にするため、及び冗長化を回避するために、これらの共有構成要素の動作及び構造については、更に詳細に説明しない。
【０１４５】
[0158]シェーダユニット１２２はシェーダプログラム１３０を含み、シェーダプログラム１３０は、デスティネーションアルファ検査モジュール１２６と、テクスチャマッピングモジュール１３２とを含む。デスティネーションアルファ検査モジュール１２６は、本開示の様々なデスティネーションアルファ検査モジュールに起因する関数のうちどれでも実行することができる。同様に、テクスチャマッピングモジュール１３２は、本開示の様々なテクスチャマッピングモジュールに起因する関数のうちどれでも実行することができる。シェーダユニット１２２がソース画素を受け取るとき、シェーダユニット１２２はまず、デスティネーションアルファ検査モジュール１２６を実行し、ソース画素が破棄されるべきかどうか決定することができる。デスティネーションアルファ検査モジュール１２６が、ソース画素は破棄されるべきと決定した場合、シェーダユニット１２２は画素を破棄し、テクスチャマッピングモジュール１３２は、そのソース画素に対して実行されない。一方、デスティネーションアルファ検査モジュール１２６が、ソース画素は破棄されるべきではないと決定した場合、テクスチャマッピングモジュール１３２は、そのソース画素に対して実行され、ソース画素に対してテクスチャマッピングを実行する。結果として生じるテクスチャマッピングされたソース画素は、１つ又は複数の後続処理段に渡される。
【０１４６】
[0159]図１３は、本開示に従ってデスティネーションアルファ値に基づいてソース画素に対するテクスチャ値を選択的に取り出すための例示的な技法を示す流れ図である。幾つかの例では、図１３に示される技法は、図１から図１２に示されるシステム又は構成要素のうちいずれかにおいて実施され得る。デスティネーションアルファ検査モジュール５２は、デスティネーションアルファ値をビンバッファ６４から取り出す（１４０）。デスティネーションアルファ値は、第１のプリミティブに関連付けられた第１の画素の処理に応答して、デスティネーションアルファ決定モジュール５６によって生成され得る。デスティネーションアルファ検査モジュール５２は、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定する（１４２）。第２の画素は、第１のプリミティブと異なる第２のプリミティブに関連付けられてよい。第２の画素は、第１の画素の画素位置と同じ画素位置を有することができる。
【０１４７】
[0160]動作を実行すると決定したこと（１４４の「はい」）に応答して、デスティネーションアルファ検査モジュール５２は、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行する（１４６）。例えば、デスティネーションアルファ検査モジュール５２は、画素が画素処理パイプライン５０のテクスチャマッピング段５４によって処理される前に、第２の画素を破棄する。逆に、動作を実行しないと決定したこと（１４４の「いいえ」）に応答して、デスティネーションアルファ検査モジュール５２は、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行しない（１４８）。例えば、デスティネーションアルファ検査モジュール５２は、第２の画素を、そのうち１つがテクスチャマッピング段５４を含んでよい１つ又は複数の処理段のセットに渡すことができる。
【０１４８】
[0161]更なる例では、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作は、テクスチャマッピングを第２の画素に対して実行させない動作であってよい。追加の例では、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作は、第２の画素に対するテクスチャ値を取り出させない制御信号をアサートする動作であってよい。例えば、制御信号は、画素処理パイプライン内の別の処理段に画素を破棄させることができる。別の例として、制御信号は、画素処理パイプライン内で特定の画素に対してテクスチャマッピング段階を有効又は無効にすることができる。より多くの例では、バッファから第２の画素に対する１つ又は複数のテクスチャ値を取り出させない動作は、第２の画素に対するテクスチャマッピング無効属性（texture mapping disable attribute）を、テクスチャマッピングを画素に対して無効にさせる値に設定する動作であってよい。
【０１４９】
[0162]追加の例では、デスティネーションアルファ検査モジュール５２は、第１の通信インターフェースを介してビンバッファ６４からデスティネーションアルファ値を取り出すことができ、１つ又は複数のテクスチャ値が第２の通信インターフェースを介してテクスチャバッファ５８から取り出され得る。そのような例では、第１の通信インターフェースは、幾つかの例では、第２の通信インターフェースよりも大きい帯域幅を有することができる。
【０１５０】
[0163]ビンバッファ６４は、幾つかの例では、フレームバッファ６６に格納されるデスティネーション画素のサブセットに対する画素データを格納することができる。例えば、ビンバッファ６４に格納されるデスティネーション画素のサブセットは、ビンレンダリング法の一部として特定のレンダリングパスに関連付けられたデスティネーション画素範囲に対応することができる。ビンバッファ６４は、ビンバッファ内の特定の記憶スロットを指定するメモリアドレスを含む読み出し要求を受け取り、その記憶スロットに格納されたデータを返すように構成され得る。記憶スロットは、現在のレンダリングパスに関連付けられた特定のデスティネーション画素に対応することができる。幾つかの例では、特定のレンダリングパス中において、ビンバッファ６４に対する各メモリアドレスは、特定のレンダリングパスに対するデスティネーション画素範囲内の一意のデスティネーション画素に対応する。
【０１５１】
[0164]幾つかの例では、レンダリングされるグラフィックス画像は複数のデスティネーション画素を含むことができ、グラフィックスプロセッサは、複数のレンダリングパスにおいてグラフィックス画像をレンダリングするように構成されてよく、レンダリングパスの各々は、デスティネーション画素のそれぞれのサブセットに関連付けられる。そのような例では、レンダリングパスごとに、ビンバッファは、それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納することができる。追加の例では、ビンバッファの容量は、グラフィックス画像に関連付けられた複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さいことがある。更なる例では、各レンダリングパスに関連付けられた画素の個々のサブセットは、画素の所定のサブセットであってよい。
【０１５２】
[0165]図１４は、図１３に示される技法を実施するために使用され得る、デスティネーションアルファ検査を実行するための例示的な技法を示す流れ図である。幾つかの例では、図１４に示される技法は、図１３のプロセスボックス１４２を実施するために使用され得る。デスティネーションアルファ検査モジュール５２は、受け取ったソース画素に関連付けられた画素位置を決定する（１５０）。デスティネーションアルファ検査モジュール５２は、その画素位置に関連付けられたデスティネーションアルファ値をデスティネーションアルファバッファ６０から取り出す（１５２）。デスティネーションアルファ検査モジュール５２は、デスティネーションアルファ値を閾値の値と比較する（１５４）。デスティネーションアルファ検査モジュール５２は、比較の結果に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定する（１５６）。
【０１５３】
[0166]図１５は、図１４に示される技法を実施するために使用され得る、デスティネーションアルファ値を閾値と比較するための例示的な技法を示す流れ図である。幾つかの例では、図１５に示される技法は、図１４のプロセスボックス１５６を実施するために使用され得る。デスティネーションアルファ検査モジュール５２は、デスティネーションアルファ値が閾値の値以下であるかどうか決定する（１５８）。デスティネーションアルファ値が閾値の値以下である（１６０の「はい」）場合、デスティネーションアルファ検査モジュール５２は、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行すると決定する（１６２）。例えば、デスティネーションアルファ検査モジュール５２は、画素処理パイプラインのステージテクスチャマッピングの前にソース画素を破棄することができる。逆に、デスティネーションアルファ値が閾値の値よりも小さくも等しくもない（１６０の「いいえ」）場合、第２の画素に対する１つ又は複数のテクスチャ値をバッファから取り出させない動作を実行しないと決定する（１６４）。例えば、デスティネーションアルファ検査モジュール５２は、その画素を、そのうち１つがテクスチャマッピング段を含んでよい１つ又は複数の後続処理段に渡すことができる。
【０１５４】
[0167]図１６は、本開示に従ってデスティネーションアルファ値に基づく選択的テクスチャ値取り出しレンダリング法を自動的に有効にするための例示的な技法を示す流れ図です。図１６の技法は、例えば、例えば図２に示されるＧＰＵドライバ２８などのＧＰＵドライバにおいて実装され得る。ＧＰＵドライバ２８は、前景から背景へのレンダリングモードが有効にされていることを検出することができる（１６６）。例えば、ＧＰＵドライバ２８は、ソフトウェアアプリケーション２４が、前景から背景へのアルファブレンディング方程式を使用してアルファブレンディングを実行するようにＧＰＵ１２内のアルファブレンディングモジュールを構成したことを検出することができる。この検出に応答して、ＧＰＵドライバ２８は、ＧＰＵ１２に対するデスティネーションアルファベースの選択的テクスチャ値取り出しレンダリングモードを自動的に有効にすることができる（１６８）。デスティネーションアルファベースの選択的テクスチャ値取り出しレンダリングモードは、例えば、図１３に示される技法に従ってプリミティブをレンダリングすることができる。
【０１５５】
[0168]すでに上記で説明したように、本開示のデスティネーションアルファ検査技法は、重複し得る複数のサーフェスが単一のサーフェスに合成される「ビニング（binning）」環境において特に有用であり得る。ビニング環境では、合成の限定要因は、オフチップ「システムメモリ」に格納されるテクスチャの読み取り及び書き込みによるものである傾向がある。一方、ビンバッファの読み取り及び書き込みは、帯域幅に関して本質的に「自由」である。サーフェスのセットを合成するために、サーフェスは「前景から背景への」順に処理されてよく、デスティネーションアルファ値は維持され得る。幾つかの例では、画素が不透明になる（例えば、透明度の合計が全ての更なる光透過をブロックするので、又は不透明な画素がレンダリングされるので、のいずれかである）と、デスティネーションアルファ値は、デスティネーションアルファ検査モジュールをトリガして画面位置のために処理される任意の後続ソース画素を破棄し得る「０」に等しくなる。
【０１５６】
[0169]ｚバッファ法は、同じ画素位置において他のソース画素の背後にあるソース画素を破棄することによって合成帯域幅を減少させるために使用され得るが、そのような技法は、画素が、重複画素を半透明にすることが本質的に可能な画素単位ソースアルファ値を有するとき、サーフェスを適切にレンダリングしない。しかしながら、本開示のデスティネーションアルファ値に基づく選択的テクスチャ値取り出し法は、全てのサーフェスが画素ごとのソースアルファ値を有するときですら合成帯域幅を減少させ、それによって、より堅牢な帯域幅減少機構を提供することができる。
【０１５７】
[0170]幾つかの例では、本開示のデスティネーションアルファ検査技法は、そのような技法が特に有用である場合、例えばウィンドウサーフェスを合成するとき、選択的に有効にされ得る。更なる例では、デスティネーションアルファ検査法は、そのような段階が発生していることをコンポジタ（compositor）が必ずしも認識するとは限らずに、グラフィックスドライバによって、及び／又はグラフィックスプロセッサによって、有効にされ得る。例えば、ドライバ及び／又はグラフィックスプロセッサは、ユーザアプリケーションが前景から背景へとサーフェスを合成しようとしていることを検出し、そのような検出に応答して本開示の技法デスティネーションアルファ検査を自動的に有効にすることができる。例えば、ドライバ及び／又はグラフィックスプロセッサは、アルファブレンディングモジュールが「前景から背景への」ブレンディング関数に設定されており、幾つかのサーフェス描画コマンドはソフトウェアによって呼び出されたことを検出し、本開示の技法デスティネーションアルファ検査を自動的に有効にすることができる。
【０１５８】
[0171]本開示のデスティネーションアルファ検査法は、テクスチャ値取り出し帯域幅を減少させるための他の非デスティネーションアルファ値に基づく技法に勝る１つ又は複数の利点を提供することができる。例えば、１つの技法は、一番上の不透明なサーフェスを含む「これより上の」のみサーフェスを埋め尽くし（tessellate）レンダリングすることである。しかしながら、全てのサーフェスが透明である又は画素単位アルファを有するとき、この技法は失敗する。帯域幅減少させるための別の技法は、「Ｚ」を各サーフェスに割り当てることと、このＺ値を使用して不透明なサーフェスの下のサーフェスのレンダリングを回避することとを含む。この場合も、これは、画素単位アルファ環境で失敗する。帯域幅を減少させるために更に別の技法は、サーフェス単位画素単位アルファ検査による１つのパスにおける全てのサーフェスのシェーダベースのレンダリングを含む。これは機能するが、アプリケーションの著しい変更を必要とする。それは、より大きなシェーダの馬力（horsepower）も必要とし、サーフェスの数が大きくなるか又はサーフェスの形状が方形と異なると、力尽きる。
【０１５９】
[0172]本開示で説明する技法は、少なくとも一部は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの何らかの組合せにおいて実施され得る。例えば、説明した技法の様々な態様は、１つ又は複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は他の任意の等価な集積論理回路もしくはディスクリート論理回路、ならびにそのような構成要素の何らかの組合せを含む１つ又は複数のプロセッサの内部で実施され得る。「プロセッサ」又は「処理回路」という用語は、一般に、単独もしくは他の論理回路と組み合わせた前述の論理回路のうちいずれか、又は処理を実行するディスクリートハードウェアなどの他の任意の等価論理回路を指すことができる。
【０１６０】
[0173]そのようなハードウェア、ソフトウェア、及びファームウェアは、同じ機器内又は別個の機器内で、本開示で説明する様々な動作及び関数をサポートするように実施され得る。更に、説明したユニット、モジュール、又は構成要素のうちいずれも、ディスクリートだが相互運用可能な論理機器として一緒に又は個別に実施され得る。モジュール又はユニットとしての異なる特徴の記述は、異なる機能態様を強調することを意図したものであり、そのようなモジュール又はユニットは別個のハードウェア構成要素又はソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。むしろ、１つ又は複数のモジュール又はユニットに関連付けられた機能は、別個のハードウェア構成要素、ファームウェア構成要素、及び／又はソフトウェア構成要素によって実行されてもよいし、共通する又は別個のハードウェア構成要素又はソフトウェア構成要素内で統合されてよい。
【０１６１】
[0174]本開示で説明する技法はまた、命令を格納するコンピュータ可読記憶媒体などのコンピュータ可読媒体に格納、実施、又は符号化され得る。コンピュータ可読媒体内の埋め込まれた又は符号化された命令は、例えば、命令が１つ又は複数のプロセッサによって実行されるとき、１つ又は複数のプロセッサに本明細書で説明する技法を実行させることができる。コンピュータ可読記憶媒体としては、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、プログラム可能な読み取り専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、電気消去可能プログラマブル読み取り専用メモリ、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、カセット、磁気媒体、光媒体、又は有形の他のコンピュータ可読記憶媒体があり得る。
【０１６２】
[0175]コンピュータ可読媒体としては、上記で列挙した媒体などの有形記憶媒体に相当するコンピュータ可読記憶媒体があり得る。コンピュータ可読媒体はまた、例えば、通信プロトコルに従って１つの場所から別の場所へのコンピュータプログラムの転送を容易にする何らかの媒体を含む通信媒体を備えることができる。このようにして、「コンピュータ可読媒体」という句は、一般に、（１）非一時的な有形のコンピュータ可読記憶媒体、及び（２）一時的信号又は搬送波などの非有形のコンピュータ可読通信媒体に対応することができる。
【０１６３】
[0176]様々な態様及び例について説明してきた。しかしながら、次の特許請求の範囲の範囲から逸脱することなく本開示の構造又は技法に修正を加えることができる。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
［１］  グラフィックスプロセッサを用いて、デスティネーションアルファ値をビンバッファから取り出すことであって、前記デスティネーションアルファ値が、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される、取り出すことと、前記グラフィックスプロセッサを用いて、前記デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定することであって、前記第２の画素が、前記第１のプリミティブと異なる第２のプリミティブに関連付けられる、決定することと、前記動作を実行すると決定したことに応答して、前記グラフィックスプロセッサを用いて、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行することとを備える方法。
［２］  前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて前記第２の画素が画素処理パイプラインのテクスチャマッピング段に達する前に、前記第２の画素を前記画素処理パイプラインから破棄するかどうか決定することを備え、前記動作を実行することが、前記デスティネーションアルファ値に基づいて前記第２の画素を破棄すると決定したことに応答して、前記第２の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に、前記第２の画素を前記画素処理パイプラインから破棄することを備える、
［１］に記載の方法。
［３］  前記デスティネーションアルファ値に基づいて前記第２の画素を破棄しないと決定したことに応答して、前記第２の画素を、テクスチャマッピング段を含む１つ又は複数の処理段のセットに渡すことを更に備える、［２］に記載の方法。
［４］  前記動作が第１の動作であり、前記方法が、前記デスティネーションアルファ値に基づいて前記第１の動作を実行しないと決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる第２の動作を実行することを更に備える、［１］に記載の方法。
［５］  前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値を閾値の値と比較することと、前記デスティネーションアルファ値を前記閾値の値と比較することによって生成される結果に基づいて、前記動作を実行するかどうか決定することとを備える、［１］に記載の方法。
［６］  前記デスティネーションアルファ値を前記閾値の値と比較することが、前記デスティネーションアルファ値が前記閾値の値以下であるかどうか決定することを備える、［５］に記載の方法。
［７］  前記動作を実行することが、前記デスティネーションアルファ値が前記閾値の値以下であると決定したことに応答して前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない動作を実行することを備え、前記方法が、前記デスティネーションアルファ値が前記閾値の値以下でないと決定したことに応答して前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる動作を実行することを更に備える、［６］に記載の方法。
［８］  前記閾値の値が構成可能な閾値の値である、［５］に記載の方法。
［９］  前記グラフィックスプロセッサ及び前記ビンバッファが第１のマイクロチップ上に存在し、前記テクスチャバッファが、前記第１のマイクロチップと異なる第２のマイクロチップ上に存在する、［１］に記載の方法。
［１０］  前記デスティネーションアルファ値を前記ビンバッファから取り出すことが、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すことを備え、前記グラフィックスプロセッサが、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ又は複数のテクスチャ値を取り出すように構成される、［１］に記載の方法。
［１１］  前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、［１０］に記載の方法。
［１２］  前記ビンバッファが、フレームバッファに含まれるデータのサブセットを格納する、［１］に記載の方法。
［１３］  グラフィックス画像が複数のデスティネーション画素を備え、前記グラフィックスプロセッサが、複数のレンダリングパスにおいて前記グラフィックス画像をレンダリングするように構成され、前記レンダリングパスの各々が前記デスティネーション画素のそれぞれのサブセットに関連付けられ、前記ビンバッファの容量が、前記グラフィックス画像に関連付けられた前記複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さく、各レンダリングパスに対して、前記ビンバッファが、前記それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納する、［１］に記載の方法。
［１４］  前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて、ステンシル検査ブロックとｚ／ステンシル検査ブロックのうち１つを用いて、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記バッファから取り出させない前記動作を実行するかどうか決定することを備える、［１］に記載の方法。
［１５］  前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて、シェーダユニット上で実行されるシェーダプログラムを用いて、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記バッファから取り出させない前記動作を実行するかどうか決定することを備える、［１］に記載の方法。
［１６］  前記第２の画素がソース画素であり、前記動作を実行するかどうか決定することが、前記デスティネーションアルファ値に基づいて、前記ソース画素に対応するデスティネーション画素が、前記デスティネーション画素に対応する１つ又は複数のそれまでに処理されたソース画素により不透明であるかどうか決定することを備える、［１］に記載の方法。
［１７］  前記第２の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、［１］に記載の方法。
［１８］  デスティネーションアルファ値をビンバッファから取り出すように構成されたデスティネーションアルファ検査モジュールであって、前記デスティネーションアルファ値が、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成され、前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定し、前記動作を実行すると決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するように更に構成され、前記第２の画素が、前記第１のプリミティブと異なる第２のプリミティブに関連付けられる、デスティネーションアルファ検査モジュール
を備える、グラフィックス処理機器。
［１９］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記第２の画素が画素処理パイプラインのテクスチャマッピング段に達する前に前記第２の画素を前記画素処理パイプラインから破棄するかどうか決定し、前記デスティネーションアルファ値に基づいて前記第２の画素を破棄すると決定したことに応答して、前記第２の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に前記第２の画素を前記画素処理パイプラインから破棄するように更に構成される、［１８］に記載の機器。
［２０］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて前記第２の画素を破棄しないと決定したことに応答して、前記第２の画素を、テクスチャマッピング段を含む１つ又は複数の処理段のセットに渡すように更に構成される、［１９］に記載の機器。
［２１］  前記動作が第１の動作であり、前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて前記第１の動作を実行しないと決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる第２の動作を実行するように更に構成される、［１８］に記載の機器。
［２２］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値を閾値の値と比較し、前記デスティネーションアルファ値を前記閾値の値と比較することによって生成される結果に基づいて前記動作を実行するかどうか決定するように更に構成される、［１８］に記載の機器。
［２３］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値が前記閾値の値以下であるかどうか決定するように更に構成される、［２２］に記載の機器。
［２４］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値が前記閾値の値以下であると決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない動作を実行し、前記デスティネーションアルファ値が前記閾値の値以下でないと決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させる動作を実行するように更に構成される、［２３］に記載の機器。
［２５］  前記閾値の値が構成可能な閾値の値である、［２２］に記載の機器。
［２６］  前記グラフィックス処理機器及び前記ビンバッファが第１のマイクロチップ上に存在し、前記テクスチャバッファが、前記第１のマイクロチップと異なる第２のマイクロチップ上に存在する、［１８］に記載の機器。
［２７］  前記デスティネーションアルファ検査モジュールが、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すように更に構成され、前記グラフィックス処理機器が、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ又は複数のテクスチャ値を取り出すように構成される、［１８］に記載の機器。
［２８］  前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、［２７］に記載の機器。
［２９］  前記ビンバッファが、フレームバッファに含まれるデータのサブセットを格納する、［１８］に記載の機器。
［３０］  グラフィックス画像が複数のデスティネーション画素を備え、前記グラフィックス処理機器が、複数のレンダリングパスにおいて前記グラフィックス画像をレンダリングするように構成され、前記レンダリングパスの各々が前記デスティネーション画素のそれぞれのサブセットに関連付けられ、前記ビンバッファの容量が、前記グラフィックス画像に関連付けられた前記複数のデスティネーション画素の全てに対する画素データを格納するために必要とされる最小容量よりも小さく、各レンダリングパスに対して、前記ビンバッファが、前記それぞれのレンダリングパスに関連付けられたデスティネーション画素のサブセットに対する画素データを格納する、［１８］に記載の機器。
［３１］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうか決定するように構成されたステンシル検査ブロックとｚ／ステンシル検査ブロックのうち１つ
を備える、［１８］に記載の機器。
［３２］  前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するかどうか決定するシェーダプログラムを実行するように構成されたシェーダユニット
を備える、［１８］に記載の機器。
［３３］  前記第２の画素がソース画素であり、前記デスティネーションアルファ検査モジュールが、前記デスティネーションアルファ値に基づいて、前記ソース画素に対応するデスティネーション画素が、前記デスティネーション画素に対応する１つ又は複数のそれまでに処理されたソース画素により不透明であるかどうか決定するように更に構成される、［１８］に記載の機器。
［３４］  前記第２の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、［１８］に記載の機器。
［３５］  デスティネーションアルファ値をビンバッファから取り出すための手段であって、前記デスティネーションアルファ値が、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される、取り出すための手段と、前記デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定するための手段であって、前記第２の画素が、前記第１のプリミティブと異なる第２のプリミティブに関連付けられる、決定するための手段と、前記動作を実行すると決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行するための手段とを備える装置。
［３６］  前記動作を実行するかどうか決定するための前記手段が、前記デスティネーションアルファ値に基づいて前記第２の画素が画素処理パイプラインのテクスチャマッピング段に達する前に、前記第２の画素を前記画素処理パイプラインから破棄するかどうか決定するための手段を備え、前記動作を実行するための前記手段が、前記デスティネーションアルファ値に基づいて前記第２の画素を破棄すると決定したことに応答して、前記第２の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に、前記第２の画素を前記画素処理パイプラインから破棄するための手段を備える、［３５］に記載の装置。
［３７］  前記デスティネーションアルファ値に基づいて前記第２の画素を破棄しないと決定したことに応答して、前記第２の画素を、テクスチャマッピング段を含む１つ又は複数の処理段のセットに渡すための手段
を更に備える、［３６］に記載の装置。
［３８］  前記第２の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、［３５］に記載の装置。
［３９］  前記デスティネーションアルファ値を前記ビンバッファから取り出すための前記手段が、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出すための手段を備え、前記装置が、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ又は複数のテクスチャ値を取り出すための手段を更に備える、［３５］に記載の装置。
［４０］  前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、［３９］に記載の装置。
［４１］  １つ又は複数のプロセッサに、デスティネーションアルファ値をビンバッファから取り出すことであって、前記デスティネーションアルファ値が、第１のプリミティブに関連付けられた第１の画素の処理に応答して生成される、取り出すことと、前記デスティネーションアルファ値に基づいて、第２の画素に対する１つ又は複数のテクスチャ値をテクスチャバッファから取り出させない動作を実行するかどうか決定することであって、前記第２の画素が、前記第１のプリミティブと異なる第２のプリミティブに関連付けられる、決定することと、前記動作を実行すると決定したことに応答して、前記第２の画素に対する前記１つ又は複数のテクスチャ値を前記テクスチャバッファから取り出させない前記動作を実行することとを行わせる
命令を備える、コンピュータ可読記憶媒体。
［４２］  前記１つ又は複数のプロセッサに前記動作を実行するかどうか決定させる前記命令が、前記１つ又は複数のプロセッサに、前記デスティネーションアルファ値に基づいて、前記第２の画素が画素処理パイプラインのテクスチャマッピング段に達する前に前記第２の画素を前記画素処理パイプラインから破棄するかどうか決定させる命令を備え、前記１つ又は複数のプロセッサに前記動作を実行させる前記命令が、前記１つ又は複数のプロセッサに、前記デスティネーションアルファ値に基づいて前記第２の画素を破棄すると決定したことに応答して、前記第２の画素が前記画素処理パイプラインのテクスチャマッピング段に達する前に前記第２の画素を前記画素処理パイプラインから破棄させる命令を備える、［４１］に記載のコンピュータ可読記憶媒体。
［４３］  前記１つ又は複数のプロセッサに、前記デスティネーションアルファ値に基づいて前記第２の画素を破棄しないと決定したことに応答して、前記第２の画素を、テクスチャマッピング段を含む１つ又は複数の処理段のセットに渡させる
命令を更に備える、［４２］に記載のコンピュータ可読記憶媒体。
［４４］  前記第２の画素が、画素位置に関連付けられたソース画素であり、前記ソース画素に対する前記デスティネーションアルファ値が、前記画素位置に関連付けられたデスティネーション画素の不透明度を示す値であり、前記デスティネーション画素の前記不透明度が、前記画素位置に関連付けられた１つ又は複数のそれまでに処理されたソース画素によって少なくとも一部は決定される、［４１］に記載のコンピュータ可読記憶媒体。
［４５］  前記１つ又は複数のプロセッサに前記デスティネーションアルファ値を前記ビンバッファから取り出させる前記命令が、前記１つ又は複数のプロセッサに、第１の通信インターフェースを介して前記ビンバッファから前記デスティネーションアルファ値を取り出させる命令を備え、前記１つ又は複数のプロセッサが、前記第１の通信インターフェースと異なる第２の通信インターフェースを介して前記テクスチャバッファから前記１つ又は複数のテクスチャ値を取り出すように構成される、［４１］に記載のコンピュータ可読記憶媒体。
［４６］  前記第１の通信インターフェースが、前記第２の通信インターフェースの帯域幅よりも大きい帯域幅を有する、［４５］に記載のコンピュータ可読記憶媒体。
【図１】
0005844485.tif 000002
【図２】
0005844485.tif 000003
【図３】
0005844485.tif 000004
【図４】
0005844485.tif 000005
【図５】
0005844485.tif 000006
【図６】
0005844485.tif 000007
【図７】
0005844485.tif 000008
【図８】
0005844485.tif 000009
【図９】
0005844485.tif 000010
【図１０】
0005844485.tif 000011
【図１１】
0005844485.tif 000012
【図１２】
0005844485.tif 000013
【図１３】
0005844485.tif 000014
【図１４】
0005844485.tif 000015
【図１５】
0005844485.tif 000016
【図１６】
0005844485.tif 000017