(57)【特許請求の範囲】
【請求項１】
グラフィックス処理ユニット(GPU)によって実行される方法であって、
第1の座標領域中のプリミティブの座標を決定するステップであって、前記プリミティブが、マルチサンプルアンチエイリアシングを使用して前記GPUによってレンダリングされるべきシーンの一部である、ステップと、
45度の角度に基づいて前記プリミティブの前記座標を回転させるステップであって、前記プリミティブの前記座標を回転させるステップが、第1の回転された座標領域中の前記プリミティブの座標を生成し、前記第1の回転された座標領域が前記第1の座標領域とは異なる、ステップと、
前記第1の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第1の回転された座標領域中の第1の境界ボックスの座標を決定するステップと、
前記第1の回転された座標領域中の複数の平行な第1の走査線を決定するステップと、
前記第1の回転された座標領域中の複数の平行な第2の走査線を決定するステップであって、前記複数の平行な第2の走査線が、前記複数の平行な第1の走査線に直交する、ステップと、
前記第1の回転された座標領域中の前記第1の境界ボックス座標が、前記複数の第1の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定するステップと、
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置するとの決定に応答して、
前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去するステップと、
63.5度の角度に基づいて前記プリミティブの前記座標を回転させるステップであって、前記プリミティブの前記座標を回転させるステップが、第2の回転された座標領域中の前記プリミティブの座標を生成し、前記第2の回転された座標領域が前記第1の座標領域とは異なる、ステップと、
前記第2の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第2の回転された座標領域中の第2の境界ボックスの座標を決定するステップと、
前記第2の回転された座標領域中の複数の平行な第3の走査線を決定するステップと、
前記第2の回転された座標領域中の複数の平行な第4の走査線を決定するステップであって、前記複数の平行な第4の走査線が、前記複数の平行な第3の走査線に直交する、ステップと、
前記第2の回転された座標領域中の前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第4の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定するステップと、
前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの前記2つの隣接する第1の走査線、または前記複数の第4の走査線のうちの前記2つの隣接する第2の走査線内に位置するとの決定に応答して、
前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去するステップと
を含む、方法。
【請求項２】
前記プリミティブを回転させるステップが、
変換行列
【数１】
0006386692.tif 000005
に従って、前記プリミティブ座標を回転させるステップ
をさらに含み、
uおよびvが、前記回転された座標領域中の点の座標であり、
θが前記45度の角度である、請求項1に記載の方法。
【請求項３】
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置するとの決定が、
前記第1の境界ボックスの最大u座標と、前記第1の境界ボックスの最小u座標との間の差分の絶対値を決定するステップと、
前記第1の境界ボックスの最大v座標と、前記第1の境界ボックスの最小v座標との間の差分の絶対値を決定するステップと、
前記最大v座標と前記最小v座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満である、または
前記最大u座標と前記最小u座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満であるとの決定に応答して、
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線内、または前記2つの隣接する第2の走査線内に位置すると決定するステップと、
前記プリミティブのための前記後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去するステップと
を含む、請求項2に記載の方法。
【請求項４】
前記複数の平行な第1の走査線と前記複数の平行な第2の走査線との交点が、前記シーン中のピクセルに対応する、請求項1に記載の方法。
【請求項５】
前記方法が、
前記プリミティブのピクセルをマルチサンプリングするステップであって、前記複数の平行な第1の走査線と前記複数の平行な第2の走査線との交点が、前記プリミティブのマルチサンプリングされたピクセルで交差する、ステップ
をさらに含む、請求項1に記載の方法。
【請求項６】
前記第1の座標領域中の前記プリミティブ座標が、x-y直交座標を備える、請求項1に記載の方法。
【請求項７】
装置であって、
メモリと、
前記メモリと通信するグラフィックス処理ユニット(GPU)と
を備え、前記GPUが、
第1の座標領域中のプリミティブの座標を決定することであって、前記プリミティブが、マルチサンプルアンチエイリアシングを使用して前記GPUによってレンダリングされるべきシーンの一部である、こと、
45度の角度に基づいて前記プリミティブの前記座標を回転させることであって、前記プリミティブの前記座標を回転させるために、前記GPUが、第1の回転された座標領域中の前記プリミティブの座標を生成するように構成され、前記第1の回転された座標領域が前記第1の座標領域とは異なる、こと、
前記第1の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第1の回転された座標領域中の第1の境界ボックスの座標を決定すること、
前記第1の回転された座標領域中の複数の平行な第1の走査線を決定すること、
前記第1の回転された座標領域中の複数の平行な第2の走査線を決定することであって、前記複数の平行な第2の走査線が、前記複数の平行な第1の走査線に直交する、こと、
前記第1の回転された座標領域中の前記第1の境界ボックス座標が、前記複数の第1の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定すること、
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置するとの決定に応答して、
前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去すること、
63.5度の角度に基づいて前記プリミティブの前記座標を回転させることであって、前記プリミティブの前記座標を回転させるために、前記GPUが、第2の回転された座標領域中の前記プリミティブの座標を生成するように構成され、前記第2の回転された座標領域が前記第1の座標領域とは異なる、こと、
前記第2の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第2の回転された座標領域中の第2の境界ボックスの座標を決定すること、
前記第2の回転された座標領域中の複数の平行な第3の走査線を決定すること、
前記第2の回転された座標領域中の複数の平行な第4の走査線を決定することであって、前記複数の平行な第4の走査線が、前記複数の平行な第3の走査線に直交する、こと、
前記第2の回転された座標領域中の前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第4の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定すること、および
前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの前記2つの隣接する第1の走査線、または前記複数の第4の走査線のうちの前記2つの隣接する第2の走査線内に位置するとの決定に応答して、
前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去すること
を行うように構成される、装置。
【請求項８】
前記GPUが、三角形セットアップエンジンを備える、請求項7に記載の装置。
【請求項９】
前記装置が、
中央処理ユニット(CPU)と、
ディスプレイと
をさらに備え、
前記装置が、モバイルコンピューティングデバイスを備える、請求項7に記載の装置。
【請求項１０】
前記プリミティブを回転させるために、前記GPUが、
変換行列
【数２】
0006386692.tif 000006
に従って、前記プリミティブ座標を回転させること
を行うようにさらに構成され、
uおよびvが、前記回転された座標領域中の点の座標であり、
θが前記45度の角度である、請求項7に記載の装置。
【請求項１１】
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置すると決定するために、前記GPUが、
前記第1の境界ボックスの最大u座標と、前記第1の境界ボックスの最小u座標との間の差分の絶対値を決定すること、
前記第1の境界ボックスの最大v座標と、前記第1の境界ボックスの最小v座標との間の差分の絶対値を決定すること、ならびに
前記最大v座標と前記最小v座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満である、または
前記最大u座標と前記最小u座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満であるとの決定に応答して、
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線内、または前記2つの隣接する第2の走査線内に位置すると決定すること、および
前記プリミティブのための前記後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去すること
を行うようにさらに構成される、請求項10に記載の装置。
【請求項１２】
前記複数の平行な第1の走査線と前記複数の平行な第2の走査線との交点が、前記シーン中のピクセルに対応する、請求項7に記載の装置。
【請求項１３】
前記GPUが、
前記プリミティブのピクセルをマルチサンプリングすること
を行うようにさらに構成され、
前記複数の平行な第1の走査線と前記複数の平行な第2の走査線との交点が、前記プリミティブのマルチサンプリングされたピクセルで交差する、請求項7に記載の装置。
【請求項１４】
前記第1の座標領域中の前記プリミティブ座標が、x-y直交座標を備える、請求項7に記載の装置。
【請求項１５】
装置であって、
第1の座標領域中のプリミティブの座標を決定するための手段であって、前記プリミティブが、マルチサンプルアンチエイリアシングを使用してレンダリングされるべきシーンの一部である、手段と、
45度の角度に基づいて前記プリミティブの前記座標を回転させるための手段であって、前記プリミティブの前記座標を回転させるための前記手段が、第1の回転された座標領域中の前記プリミティブの座標を生成するための手段を備え、前記第1の回転された座標領域が前記第1の座標領域とは異なる、手段と、
前記第1の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第1の回転された座標領域中の第1の境界ボックスの座標を決定するための手段と、
前記第1の回転された座標領域中の複数の平行な第1の走査線を決定するための手段と、
前記第1の回転された座標領域中の複数の平行な第2の走査線を決定するための手段であって、前記複数の平行な第2の走査線が、前記複数の平行な第1の走査線に直交する、手段と、
前記第1の回転された座標領域中の前記第1の境界ボックス座標が、前記複数の第1の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定するための手段と、
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置するとの決定に応答して、前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去するための手段と、
63.5度の角度に基づいて前記プリミティブの前記座標を回転させるための手段であって、前記プリミティブの前記座標を回転させるための前記手段が、第2の回転された座標領域中の前記プリミティブの座標を生成し、前記第2の回転された座標領域が前記第1の座標領域とは異なる、手段と、
前記第2の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第2の回転された座標領域中の第2の境界ボックスの座標を決定するための手段と、
前記第2の回転された座標領域中の複数の平行な第3の走査線を決定するための手段と、
前記第2の回転された座標領域中の複数の平行な第4の走査線を決定するための手段であって、前記複数の平行な第4の走査線が、前記複数の平行な第3の走査線に直交する、手段と、
前記第2の回転された座標領域中の前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第4の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定するための手段と、
前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの前記2つの隣接する第1の走査線、または前記複数の第4の走査線のうちの前記2つの隣接する第2の走査線内に位置するとの決定に応答して、前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去するための手段と
を備える、装置。
【請求項１６】
前記プリミティブを回転させるための前記手段が、
変換行列
【数３】
0006386692.tif 000007
に従って、前記プリミティブ座標を回転させるための手段
をさらに備え、
uおよびvが、前記回転された座標領域中の点の座標であり、
θが前記45度の角度である、請求項15に記載の装置。
【請求項１７】
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置すると決定するための前記手段が、
前記第1の境界ボックスの最大u座標と、前記第1の境界ボックスの最小u座標との間の差分の絶対値を決定するための手段と、
前記第1の境界ボックスの最大v座標と、前記第1の境界ボックスの最小v座標との間の差分の絶対値を決定するための手段と、
前記最大v座標と前記最小v座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満である、または、
前記最大u座標と前記最小u座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満であるとの決定に応答して、前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線内、または前記2つの隣接する第2の走査線内に位置すると決定するための手段と、
前記プリミティブのための前記後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去するための手段と
を備える、請求項16に記載の装置。
【請求項１８】
前記装置が、
前記プリミティブのピクセルをマルチサンプリングするための手段
をさらに備え、
前記複数の平行な第1の走査線と前記複数の平行な第2の走査線との交点が、前記プリミティブのマルチサンプリングされたピクセルで交差する、請求項15に記載の装置。
【請求項１９】
命令を記憶したコンピュータ可読記憶媒体であって、前記命令が、実行されると、少なくとも1つのプロセッサに、
第1の座標領域中のプリミティブの座標を決定することであって、前記プリミティブが、マルチサンプルアンチエイリアシングを使用して前記少なくとも1つによってレンダリングされるべきシーンの一部である、こと、
45度の角度に基づいて前記プリミティブの前記座標を回転させることであって、前記プリミティブの前記座標を回転させることを、前記少なくとも1つのプロセッサに行わせる前記命令が、第1の回転された座標領域中の前記プリミティブの座標を生成することを、前記少なくとも1つのプロセッサに行わせ、前記第1の回転された座標領域が前記第1の座標領域とは異なる、こと、
前記第1の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第1の回転された座標領域中の第1の境界ボックスの座標を決定すること、
前記第1の回転された座標領域中の複数の平行な第1の走査線を決定すること、
前記第1の回転された座標領域中の複数の平行な第2の走査線を決定することであって、前記複数の平行な第2の走査線が、前記複数の平行な第1の走査線に直交する、こと、
前記第1の回転された座標領域中の前記第1の境界ボックス座標が、前記複数の第1の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定すること、
前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線、または前記2つの隣接する第2の走査線内に位置するとの決定に応答して、
前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去すること、
63.5度の角度に基づいて前記プリミティブの前記座標を回転させることであって、前記プリミティブの前記座標を回転させることが、第2の回転された座標領域中の前記プリミティブの座標を生成し、前記第2の回転された座標領域が前記第1の座標領域とは異なる、こと、
前記第2の回転された座標領域中の前記プリミティブの前記座標に基づいて、前記第2の回転された座標領域中の第2の境界ボックスの座標を決定すること、
前記第2の回転された座標領域中の複数の平行な第3の走査線を決定すること、
前記第2の回転された座標領域中の複数の平行な第4の走査線を決定することであって、前記複数の平行な第4の走査線が、前記複数の平行な第3の走査線に直交する、こと、
前記第2の回転された座標領域中の前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの2つの隣接する第1の走査線内、または前記複数の第4の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定すること、および
前記第2の境界ボックス座標が、前記複数の第3の走査線のうちの前記2つの隣接する第1の走査線、または前記複数の第4の走査線のうちの前記2つの隣接する第2の走査線内に位置するとの決定に応答して、
前記プリミティブのための後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去すること
を行わせる、コンピュータ可読記憶媒体。
【請求項２０】
命令が、前記少なくとも1つのプロセッサに、
変換行列
【数４】
0006386692.tif 000008
に従って、前記プリミティブ座標を回転させること
をさらに行わせ、
uおよびvが、前記回転された座標領域中の点の座標であり、
θが前記45度の角度である、請求項19に記載のコンピュータ可読記憶媒体。
【請求項２１】
命令が、前記少なくとも1つのプロセッサに、
前記第1の境界ボックスの最大u座標と、前記第1の境界ボックスの最小u座標との間の差分の絶対値を決定すること、
前記第1の境界ボックスの最大v座標と、前記第1の境界ボックスの最小v座標との間の差分の絶対値を決定すること、
前記最大v座標と前記最小v座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満である、または、
前記最大u座標と前記最小u座標との間の前記差分の前記絶対値が前記第1の回転された座標領域中の1単位未満であるとの決定に応答して、前記第1の境界ボックス座標が、前記2つの隣接する第1の走査線内、または前記2つの隣接する第2の走査線内に位置すると決定すること、および
前記プリミティブのための前記後続のラスタ化計算が実行されないように、前記シーンから前記プリミティブを除去すること
をさらに行わせる、請求項20に記載のコンピュータ可読記憶媒体。
【請求項２２】
命令が、前記少なくとも1つのプロセッサに、
前記プリミティブのピクセルをマルチサンプリングすること
をさらに行わせ、
前記複数の平行な第1の走査線と前記複数の平行な第2の走査線との交点が、前記プリミティブのマルチサンプリングされたピクセルで交差する、請求項19に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィックス処理のための技法に関する。
【背景技術】
【０００２】
グラフィカルユーザインターフェースおよびビデオゲームのためのコンテンツなど、表示のための視覚的コンテンツは、グラフィックス処理ユニット(GPU)によって生成され得る。GPUは、2次元または3次元(3D)オブジェクトを、表示され得る2次元(2D)ピクセル表現に変換し得る。3Dオブジェクトについての情報を表示可能なビットマップに変換することは、ピクセルレンダリングとして知られており、かなりのメモリおよび処理能力を必要とする。これまでは、3Dグラフィックス能力は、高性能ワークステーション上でのみ利用可能であった。しかしながら、今では、3Dグラフィックスアクセラレータは、パーソナルコンピュータ(PC)において、ならびにスマートフォン、タブレットコンピュータ、ポータブルメディアプレーヤ、ポータブルビデオゲームコンソールなどの組込みデバイスにおいてよく見られる。典型的には、組込みデバイスは、従来のPCと比較して、より少ない計算能力およびメモリ容量を有する。したがって、3Dグラフィックスレンダリング技法における複雑さの増大は、そのような技法を組込みシステム上で実装するときの問題点を提示する。
【発明の概要】
【課題を解決するための手段】
【０００３】
本開示は、グラフィックス処理ユニット(GPU)においてゼロピクセルカリングを実行するための技法について説明する。本開示の例では、GPUは、レンダリングされる場合に可視ではなくなるプリミティブをカリング(除去)するように構成され得る。GPUは、「ゼロピクセルカリング」と呼ばれる技法を実行することによって、ゼロ個のピクセルを有するプリミティブをカリングし得る。ゼロピクセルカリング中に、GPUは、プリミティブが、GPUによって生成された走査線と交差するか否かに基づいて、プリミティブをカリングし得る。本開示の技法は、x軸およびy軸に接するように配向されない走査線を使用することによって、ゼロピクセルカリングの効率を改善する。
【０００４】
本開示の一例では、シーンのプリミティブをカリングするための方法は、三角形の座標を決定するステップであって、三角形が、GPUによってレンダリングされるべきシーンの一部である、ステップと、角度に基づいて三角形の座標を回転させるステップであって、三角形の座標を回転させるステップが、回転された領域中の三角形の座標を生成する、ステップと、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定するステップと、回転された領域中の複数の平行な第1の走査線を決定するステップと、回転された領域中の複数の平行な第2の走査線を決定するステップであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、ステップと、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する第1の走査線内、または複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定するステップと、境界ボックス座標が、2つの隣接する第1の走査線、または2つの隣接する第2の走査線内に位置するとの決定に応答して、シーンから三角形を除去するステップとを含む。
【０００５】
本開示の別の例では、デバイスは、グラフィックス処理ユニット(GPU)を備え、GPUは、三角形の座標を決定することであって、三角形が、GPUによってレンダリングされるべきシーンの一部である、こと、角度に基づいて三角形の座標を回転させることであって、三角形の座標を回転させるために、少なくとも1つのプロセッサが、回転された領域中の三角形の座標を生成するように構成される、こと、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定すること、回転された領域中の複数の平行な第1の走査線を決定すること、回転された領域中の複数の平行な第2の走査線を決定することであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、こと、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する第1の走査線内、または複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定すること、および、境界ボックス座標が、2つの隣接する第1の走査線、または2つの隣接する第2の走査線内に位置するとの決定に応答して、シーンから三角形を除去することを行うように構成される。
【０００６】
本開示の別の例では、デバイスは、三角形の座標を決定するための手段であって、三角形が、レンダリングされるべきシーンの一部である、手段と、角度に基づいて三角形の座標を回転させるための手段であって、三角形の座標を回転させるための手段が、回転された領域中の三角形の座標を生成するための手段を備える、手段と、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定するための手段と、回転された領域中の複数の平行な第1の走査線を決定するための手段と、回転された領域中の複数の平行な第2の走査線を決定するための手段であって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、手段と、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する第1の走査線内、または複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定するための手段と、境界ボックス座標が、2つの隣接する第1の走査線、または2つの隣接する第2の走査線内に位置するとの決定に応答して、シーンから三角形を除去するための手段とを備える。
【０００７】
本開示の別の例では、非一時的コンピュータ可読記憶媒体は、その上に記憶された命令を含み、命令は、実行されると、少なくとも1つのプロセッサに、三角形の座標を決定することであって、三角形が、GPUによってレンダリングされるべきシーンの一部である、こと、角度に基づいて三角形の座標を回転させることを行わせ、ここにおいて、三角形の座標を回転させることを、少なくとも1つのプロセッサに行わせる命令が、回転された領域中の三角形の座標を生成することを、少なくとも1つのプロセッサに行わせ、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定すること、回転された領域中の複数の平行な第1の走査線を決定すること、回転された領域中の複数の平行な第2の走査線を決定することであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、こと、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する第1の走査線内、または複数の第2の走査線のうちの2つの隣接する第2の走査線内に位置するか否かを決定すること、および、境界ボックス座標が、2つの隣接する第1の走査線、または2つの隣接する第2の走査線内に位置するとの決定に応答して、シーンから三角形を除去することを行わせる。
【０００８】
本開示の1つまたは複数の例の詳細が、添付の図面および以下の説明に記載される。本開示の他の特徴、目的、および利点は、説明および図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】本開示の技法を使用するように構成された例示的なコンピューティングデバイスを示すブロック図である。
【図２】図1の構成要素をより詳細に示すブロック図である。
【図３】ゼロピクセルカリングを実行する例示的なプロセスを示す概念図である。
【図４】本開示の技法に従ってゼロピクセルカリングを実行する例示的なプロセスを示す概念図である。
【図５】追加の詳細とともに、本開示の技法に従ってゼロピクセルカリングテクスチャを実行する一例を示す概念図である。
【図６】本開示の技法に従ってゼロピクセルカリングおよびマルチサンプルアンチエイリアシングを実行する一例を示す概念図である。
【図７】本開示のゼロピクセルカリングの例示的な方法を示すフローチャートである。
【図８】本開示の例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
GPUは、多角形から作られた3次元シーンをレンダリングし、かつ/またはピクセルの2次元アレイを処理し得る。GPUは、1つまたは複数のテクスチャを多角形の各々に適用し、レンダリングし得る。画像レンダリングのプロセスの間に、GPUは、様々なカリング演算を実行して、レンダリングされる場合に可視ではなくなるピクセルを有するプリミティブを除去するように構成され得る。カリング演算の例には、バックフェースカリング、錐台カリング、ビューポートカリング、およびゼロピクセルカリングが含まれる。本開示の技法は、ゼロピクセルカリングに関する。ゼロピクセルカリングは、プリミティブに関連付けられたピクセルが1ピクセルよりも小さくなる(すなわち、サイズにおいてゼロピクセルになる)ので、三角形のピクセルがレンダリングされるときに可視ではなくなるか否かを、GPUが決定するプロセスである。ゼロピクセルカリングについて、以下でより詳細に説明する。
【００１１】
いくつかの例では、ゼロピクセルカリングを実行するために、GPUは、一連の水平走査線および垂直走査線を生成する。所与のプリミティブに対して、GPUは、そのプリミティブを囲む境界ボックスを生成する。次いで、GPUは、境界ボックスが2つの隣接する水平走査線または2つの隣接する垂直走査線内に適合するか否かを決定する。走査線は、直交する垂直線および水平線のセットを備える。本開示では、走査線は、出力のためのピクセル値またはサンプル値のロケーションに対応し得る。境界ボックスが、2つの隣接する水平走査線または隣接する垂直走査線内に完全に適合する場合、GPUは、プリミティブがレンダリングされる場合に0個の可視ピクセルを有することになると決定する。プリミティブが0個の可視ピクセルを有することになるとの決定に基づいて、GPUは、レンダリングされるべきシーンからプリミティブをカリング(除去)し得る。不可視プリミティブを除去することによって、GPUは、レンダリング性能を上げることができ、その理由は、カリングされたゼロピクセルプリミティブがGPUによってラスタ化されないことになるからである。
【００１２】
本開示は、角度に基づいてプリミティブを回転させるように、GPUを構成することによって、ゼロピクセルカリング技法を改善するための技法を提案する。プリミティブの座標を回転させることによって、座標を、回転されたu-v領域中に配置する。プリミティブを回転させた後、GPUは、回転されたプリミティブ座標の周囲に境界ボックスを生成するように構成される。プリミティブがu-v領域中の2つの平行な走査線内に位置する場合、GPUは、プリミティブをカリングする。u-v領域中の平行な走査線は、互いに直交するように配向されるが、従来のゼロピクセルカリングのx-y走査線に対してある角度において配向される。本開示の技法の追加の例について、以下でより詳細に説明する。
【００１３】
図1は、グラフィックス処理ユニット(GPU)においてゼロピクセルカリングを実行するための本開示の技法を実装するために使用され得る、例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、たとえば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはコンソール、たとえば、セルラー電話もしくは衛星電話などのモバイル電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、またはグラフィカルデータを処理および/もしくは表示する任意の他のタイプのデバイスを含み得る。
【００１４】
図1の例に示すように、コンピューティングデバイス2は、ユーザ入力インターフェース4と、中央処理ユニット(CPU)6と、メモリコントローラ8と、システムメモリ10と、GPU12と、グラフィックスメモリ14と、ディスプレイインターフェース16と、ディスプレイ18と、バス20および22とを含み得る。いくつかの例では、グラフィックスメモリ14はGPU12に「オンチップ」であってもよいことに留意されたい。すなわち、グラフィックスメモリ14は、いかなる共有バス(たとえば、バス20またはバス22)を使用することもなしに、GPU12によってアクセス可能であり得る。場合によっては、図1に示すCPU6、メモリコントローラ8、GPU12、およびグラフィックスメモリ14、ならびに場合によってはディスプレイインターフェース16は、たとえば、システムオンチップ(SoC)設計において、オンチップであり得る。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12およびディスプレイインターフェース16は、バス20を使用して互いと通信してもよい。メモリコントローラ8およびシステムメモリ10はまた、バス22を使用して互いと通信してもよい。バス20、22は、第3世代バス(たとえば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(たとえば、アドバンストグラフィックスポートバス、周辺構成要素相互接続(PCI)エクスプレスバス、または高度拡張可能インターフェース(AXI)バス)、または別のタイプのバスもしくはデバイス相互接続など、様々なバス構造のいずれかであり得る。図1に示す異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、同じまたは異なる構成要素を有するコンピューティングデバイスおよび/または他のグラフィックス処理システムの他の構成が本開示の技法を実装するために使用され得ることに留意されたい。
【００１５】
CPU6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを備え得る。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるために、入力をコンピューティングデバイス2に与え得る。CPU6上で実行されるソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーションまたは別のプログラムを含み得る。加えて、CPU6は、GPU12の動作を制御するためのGPUドライバ7を実行し得る。ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合されたキーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、入力をコンピューティングデバイス2に与え得る。
【００１６】
CPU6上で実行されるソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを行わせるようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標))API、オープングラフィックスライブラリ組込みシステム(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、または任意の他の公的もしくはプロプライエタリ規格グラフィックスAPIなどのグラフィックスアプリケーションプログラミングインターフェース(API)に準拠し得る。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実行させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に(たとえば、GPUドライバ7を通じて)発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブ、たとえば、点、線、三角形、四角形、三角形ストリップなどのリストを含み得る。
【００１７】
他の例では、CPU6上で実行されるソフトウェア命令は、GPU12に、GPUハードウェアの高度並列の性質によって実行されるように適用可能なより一般的な計算を実行するための汎用シェーダを実行させ得る。そのような汎用アプリケーションは、いわゆる汎用グラフィックス処理ユニット(GPGPU)であり得、OpenCLなどの汎用APIに準拠し得る。
【００１８】
メモリコントローラ8は、システムメモリ10を出入りするデータの転送を容易にする。たとえば、メモリコントローラ8は、メモリ読取りコマンドおよびメモリ書込みコマンドを受け取り、メモリサービスをコンピューティングデバイス2内の構成要素に提供するためにシステムメモリ10に対してそのようなコマンドをサービスし得る。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信可能に結合される。メモリコントローラ8は、CPU6とシステムメモリ10の両方とは別個である処理モジュールであるものとして図1に示されているが、他の例では、メモリコントローラ8の機能の一部または全部は、CPU6とシステムメモリ10の一方または両方において実装され得る。
【００１９】
システムメモリ10は、CPU6が実行するためにアクセス可能なプログラムモジュールおよび/または命令ならびに/あるいはCPU6上で実行されるプログラムが使用するためのデータを記憶し得る。たとえば、システムメモリ10は、ディスプレイ18上にグラフィカルユーザインターフェース(GUI)を提示するためにCPU6によって使用されるウィンドウマネージャアプリケーションを記憶し得る。加えて、システムメモリ10は、ユーザアプリケーションと、アプリケーションに関連付けられたアプリケーションサーフェスデータとを記憶し得る。システムメモリ10は加えて、コンピューティングデバイス2の他の構成要素が使用するためのおよび/またはそれらの構成要素によって生成される情報を記憶し得る。たとえば、システムメモリ10は、GPU12用のデバイスメモリとして働くことができ、GPU12によって演算されるべきデータ、ならびにGPU12によって実行される演算から生じるデータを記憶し得る。たとえば、システムメモリ10は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。システムメモリ10は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体など、1つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含み得る。
【００２０】
GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ18にレンダリングするためのグラフィックス演算を実行するように構成され得る。したがって、CPU6上で実行されるソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6は、ディスプレイ18にレンダリングするためにグラフィックスコマンドおよびグラフィックスデータをGPU12に与え得る。グラフィックスデータは、たとえば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報などを含み得る。GPU12は、ある事例では、CPU6よりも効率的な、複雑なグラフィック関連演算の処理を実現する高度並列構造で構築され得る。たとえば、GPU12は、複数の頂点またはピクセル上で並行して動作するように構成された複数の処理要素を含み得る。GPU12の高度並列の性質は、いくつかの事例では、CPU6を使用してシーンを直接ディスプレイ18に描画するよりも速く、GPU12がグラフィックス画像(たとえば、GUIならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上に描画することを可能にし得る。
【００２１】
GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに統合され得る。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード内のポートにインストールされるグラフィックスカード上に存在し得、またはさもなければコンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれ得る。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の等価の集積論理回路もしくはディスクリート論理回路などの1つまたは複数のプロセッサを含み得る。
【００２２】
GPU12は、グラフィックスメモリ14に直接結合され得る。したがって、GPU12は、バス20を使用することなしに、グラフィックスメモリ14からデータを読み取り、グラフィックスメモリ14にデータを書き込んでもよい。言い換えれば、GPU12は、オフチップメモリではなく、ローカルストレージを使用してローカルにデータを処理し得る。これは、重いバストラフィックを経験する場合がある、GPU12がバス20を介してデータの読取りおよび書込みを行う必要をなくすことによって、GPU12がより効率的に動作することを可能にする。しかしながら、いくつかの事例では、GPU12は、別個のメモリを含まないが、代わりにバス20を介してシステムメモリ10を利用する場合がある。グラフィックスメモリ14は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学記憶媒体など、1つまたは複数の揮発性もしくは不揮発性メモリまたはストレージデバイスを含み得る。
【００２３】
CPU6および/またはGPU12は、レンダリングされた画像データをフレームバッファ15内に記憶し得る。フレームバッファ15は、独立したメモリであってもよく、またはシステムメモリ10内で割り振られてもよい。ディスプレイインターフェース16は、フレームバッファ15からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ18を構成し得る。いくつかの例では、ディスプレイインターフェース16は、フレームバッファから取り出されたデジタル値を、ディスプレイ18によって消費可能なアナログ信号に変換するように構成される、デジタルアナログコンバータ(DAC)を含み得る。他の例では、ディスプレイインターフェース16は、処理のためにディスプレイ18にデジタル値を直接渡し得る。ディスプレイ18は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、有機LED(OLED)ディスプレイなどの発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ18は、コンピューティングデバイス2内に統合され得る。たとえば、ディスプレイ18は、モバイル電話のスクリーンであり得る。代替的に、ディスプレイ18は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ18は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００２４】
本開示の一例によれば、以下でより詳細に説明するように、GPU12は、三角形の座標を決定することであって、三角形が、GPU12によってレンダリングされるべきシーンの一部である、こと、角度に基づいて三角形の座標を回転させることであって、三角形の点を回転させるために、GPU12が、回転された領域中の三角形の座標を生成するように構成される、こと、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定すること、回転された領域中の複数の平行な第1の走査線を決定すること、回転された領域中の複数の平行な第2の走査線を決定することであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、ことを行うように構成され得る。GPU12は、回転された領域中の境界ボックス座標が、複数の第1の走査線または複数の第2の走査線のうちの2つの隣接する走査線内に位置するか否かを決定するようにさらに構成され得る。境界ボックス座標が、2つの隣接する走査線内に位置するとの決定に応答して、GPU12は、シーンから三角形を除去し得る。本開示の技法は、GPU12の固定機能ハードウェアユニットによって実行され得、ソフトウェアを実行するGPU12のプログラマブルハードウェアユニットによって実行され得、または両方の組合せであり得ることを理解されたい。
【００２５】
図2は、図1のCPU6、GPU12、およびシステムメモリ10の例示的な実装形態をさらに詳細に示すブロック図である。CPU6は、少なくとも1つのソフトウェアアプリケーション24と、グラフィックスAPI26と、GPUドライバ7とを含み得、これらの各々は、CPU6上で実行する1つまたは複数のソフトウェアアプリケーションまたはサービスであり得る。GPU12は、グラフィックス処理コマンドを実行するために一緒に動作する複数のグラフィックス処理ステージを含むグラフィックス処理パイプライン30を含み得る。GPU12は、ビニングレンダリングモードおよび直接レンダリングモードを含む様々なレンダリングモードでグラフィックス処理パイプライン30を実行するように構成され得る。図2に示すように、グラフィックス処理パイプライン30は、コマンドエンジン32と、ジオメトリ処理ステージ34と、ラスタ化ステージ36と、三角形セットアップエンジン37と、ピクセル処理パイプライン39とを含み得る。三角形セットアップエンジン37は、ゼロピクセルカリングエンジン38をさらに含む。グラフィックス処理パイプライン30内の構成要素の各々は、固定機能構成要素、(たとえば、プログラマブルシェーダユニット上で実行されるシェーダプログラムの一部としての)プログラマブル構成要素として、または固定機能構成要素とプログラマブル構成要素の組合せとして実装され得る。CPU6およびGPU12が利用可能なメモリは、システムメモリ10およびフレームバッファ15を含み得る。フレームバッファ15は、システムメモリ10の一部であってもよく、またはシステムメモリ10とは別であってもよい。フレームバッファ15は、レンダリングされた画像データを記憶し得る。
【００２６】
ソフトウェアアプリケーション24は、GPU12の機能を利用する任意のアプリケーションであり得る。たとえば、ソフトウェアアプリケーション24は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、エンジニアリングもしくは芸術アプリケーションのためのコンピュータ支援設計プログラム、ビデオゲームアプリケーション、またはGPUを利用し得る別のタイプのソフトウェアアプリケーションであり得る。
【００２７】
ソフトウェアアプリケーション24は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようにGPU12に命令する1つまたは複数の描画命令を含み得る。たとえば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、GUIにおいて使用される複数のウィンドウイング表面の全部または一部をまとめて定義し得る。追加の例では、描画命令は、アプリケーションによって定義されたモデル空間またはワールド空間内に、1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンの全部または一部をまとめて定義し得る。
【００２８】
ソフトウェアアプリケーション24は、1つまたは複数のグラフィックスプリミティブを表示可能なグラフィックス画像にレンダリングするための1つまたは複数のコマンドをGPU12に発行するために、グラフィックスAPI26を介してGPUドライバ7を呼び出し得る。たとえば、ソフトウェアアプリケーション24は、プリミティブ定義をGPU12に与えるために、グラフィックスAPI26を介してGPUドライバ7を呼び出し得る。いくつかの事例では、プリミティブ定義は、描画プリミティブ、たとえば、三角形、長方形、三角形ファン、三角形ストリップなどのリストの形でGPU12に与えられ得る。プリミティブ定義は、レンダリングされるべきプリミティブに関連付けられた1つまたは複数の頂点を指定する頂点仕様を含み得る。頂点仕様は、頂点ごとの位置座標と、いくつかの事例では、たとえば、色座標、法線ベクトル、およびテクスチャ座標など、頂点に関連付けられた他の属性とを含み得る。
【００２９】
プリミティブ定義はまた、プリミティブタイプ情報(たとえば、三角形、長方形、三角形ファン、三角形ストリップなど)、スケーリング情報、回転情報などを含み得る。ソフトウェアアプリケーション24によってGPUドライバ7に発行された命令に基づいて、GPUドライバ7は、プリミティブをレンダリングするためにGPU12が実行するための1つまたは複数の動作を指定する1つまたは複数のコマンドを策定し得る。GPU12がCPU6からコマンドを受信すると、グラフィックス処理パイプライン30はコマンドを復号し、コマンドにおいて指定された動作を実行するようにグラフィックス処理パイプライン30内の1つまたは複数の処理要素を構成する。指定された動作を実行した後、グラフィックス処理パイプライン30は、レンダリングされたデータをディスプレイデバイスに関連付けられたフレームバッファ15に出力する。グラフィックス処理パイプライン30は、ビニングレンダリングモードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの1つで実行するように構成され得る。
【００３０】
GPUドライバ7は、1つまたは複数のシェーダプログラムをコンパイルし、コンパイルされたシェーダプログラムを、GPU12内に含まれる1つまたは複数のプログラマブルシェーダユニット上にダウンロードするようにさらに構成され得る。シェーダプログラムは、たとえば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語などの高レベルシェーディング言語において書かれ得る。コンパイルされたシェーダプログラムは、GPU12内のプログラマブルシェーダユニットの動作を制御する1つまたは複数の命令を含み得る。たとえば、シェーダプログラムは、頂点シェーダプログラムおよび/またはピクセルシェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたはユニファイドシェーダユニットの実行を制御し、1つまたは複数の頂点ごとの動作を指定する命令を含み得る。ピクセルシェーダプログラムは、プログラマブルピクセルシェーダユニットまたはユニファイドシェーダユニットの実行を制御し、1つまたは複数のピクセルごとの動作を指定する命令を含む、ピクセルシェーダプログラムを含み得る。
【００３１】
グラフィックス処理パイプライン30は、GPUドライバ7を介してCPU6から1つまたは複数のグラフィックス処理コマンドを受信するように、および、グラフィックス処理コマンドを実行して、表示可能なグラフィックス画像を生成するように構成され得る。上記で説明したように、グラフィックス処理パイプライン30は、グラフィックス処理コマンドを実行するために一緒に動作する複数のステージを含む。しかしながら、そのようなステージは必ずしも別個のハードウェアブロックにおいて実装される必要はないことに留意されたい。たとえば、ジオメトリ処理ステージ34およびピクセル処理パイプライン39の部分は、ユニファイドシェーダユニットの一部として実装され得る。この場合も、グラフィックス処理パイプライン30は、ビニングレンダリングモードおよび直接レンダリングモードを含む複数の異なるレンダリングモードのうちの1つで実行するように構成され得る。
【００３２】
コマンドエンジン32は、グラフィックス処理コマンドを受信し、グラフィックス処理コマンドを実施するための様々な動作を実行するようにグラフィックス処理パイプライン30内の残りの処理ステージを構成し得る。グラフィックス処理コマンドは、たとえば、描画コマンドおよびグラフィックス状態コマンドを含み得る。描画コマンドは、1つまたは複数の頂点の位置座標を指定する頂点仕様コマンドと、いくつかの事例では、たとえば、色座標、法線ベクトル、テクスチャ座標およびフォグ座標など、頂点の各々に関連付けられた他の属性値とを含み得る。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、照明コマンドなどを含み得る。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプ、および/またはプリミティブを形成するために頂点がどのように組み合わされるかを指定し得る。変換コマンドは、頂点に対して実行すべき変換のタイプを指定し得る。照明コマンドは、グラフィックスシーン内の異なる照明のタイプ、方向および/または配置を指定し得る。コマンドエンジン32は、ジオメトリ処理ステージ34に、1つまたは複数の受信されたコマンドに関連付けられた頂点および/またはプリミティブに対してジオメトリ処理を実行させ得る。
【００３３】
ジオメトリ処理ステージ34は、ラスタ化ステージ36のためのプリミティブデータを生成するために、1つまたは複数の頂点に対して頂点ごとの動作および/またはプリミティブセットアップ動作を実行し得る。各頂点は、たとえば、位置座標、色値、法線ベクトル、およびテクスチャ座標などの属性のセットに関連付けられ得る。ジオメトリ処理ステージ34は、様々な頂点ごとの動作に従って、これらの属性のうちの1つまたは複数を修正する。たとえば、ジオメトリ処理ステージ34は、修正された頂点位置座標を生成するために、頂点位置座標に対して1つまたは複数の変換を実行し得る。ジオメトリ処理ステージ34は、修正された頂点位置座標を生成するために、たとえば、モデリング変換、ビューイング変換、投影変換、モデルビュー(ModelView)変換、モデルビュー投影(ModelViewProjection)変換、ビューポート変換および深度範囲スケーリング変換のうちの1つまたは複数を頂点位置座標に適用し得る。いくつかの事例では、頂点位置座標は、モデル空間座標であり得、修正された頂点位置座標は、スクリーン空間座標であり得る。スクリーン空間座標は、モデリング変換、ビューイング変換、投影変換およびビューポート変換の適用の後で取得され得る。いくつかの事例では、ジオメトリ処理ステージ34はまた、頂点の修正された色座標を生成するために、頂点に対して頂点ごとの照明動作を実行し得る。ジオメトリ処理ステージ34はまた、たとえば、正規変換、ノーマル正規化(normal normalization)動作、ビューボリュームクリッピング、同次除算動作および/またはバックフェースカリング動作を含む他の動作を実行し得る。様々な例では、ジオメトリ処理ステージ34は、フィルタリングを実行し得る。
【００３４】
ジオメトリ処理ステージ34は、ラスタ化されるべきプリミティブを定義する1つまたは複数の修正された頂点のセットを含むプリミティブデータ、ならびにプリミティブを形成するために頂点がどのように組み合わされるかを指定するデータを生成し得る。修正された頂点の各々は、たとえば、修正された頂点位置座標と、頂点に関連付けられた処理された頂点属性値とを含み得る。プリミティブデータはまとめて、グラフィックス処理パイプライン30のさらなるステージによってラスタ化されるべきプリミティブに対応し得る。概念的には、各頂点は、プリミティブの2つのエッジがぶつかるプリミティブの角に対応し得る。ジオメトリ処理ステージ34は、さらなる処理のために、プリミティブデータをラスタ化ステージ36に与え得る。
【００３５】
いくつかの例では、ジオメトリ処理ステージ34の全部または一部は、1つまたは複数のシェーダユニット上で実行される1つまたは複数のシェーダプログラムによって実装され得る。たとえば、ジオメトリ処理ステージ34は、そのような例では、頂点シェーダ、ジオメトリシェーダまたはそれらの任意の組合せによって実装され得る。他の例では、ジオメトリ処理ステージ34は、固定機能ハードウェア処理パイプラインとして、または固定機能ハードウェアと1つもしくは複数のシェーダユニット上で実行される1つもしくは複数のシェーダプログラムの組合せとして実装され得る。
【００３６】
ラスタ化ステージ36は、ジオメトリ処理ステージ34から、ラスタ化されるべきプリミティブを表すプリミティブデータを受信するように、および、プリミティブをラスタ化して、ラスタ化されたプリミティブに対応する複数のソースピクセルを生成するように構成され得る。いくつかの例では、ラスタ化ステージ36は、どのスクリーンピクセルロケーションがラスタ化されるべきプリミティブによってカバーされるかを決定し、プリミティブによってカバーされると決定されたスクリーンピクセルロケーションごとにソースピクセルを生成し得る。ラスタ化ステージ36は、たとえば、エッジウォーキング(edge-walking)技法、エッジ方程式評価(evaluating edge equations)などの、当業者に知られている技法を使用することによって、どのスクリーンピクセルロケーションがプリミティブによってカバーされるかを決定し得る。ラスタ化ステージ36は、さらなる処理のために、得られたソースピクセルをピクセル処理パイプライン39に与え得る。ラスタ化ステージ36はまた、本明細書で説明するようにアンチエイリアシング技法を実行するように構成され得る。たとえば、ラスタ化ステージ36は、マルチサンプルアンチエイリアシング(MSAA)、スーパーサンプルアンチエイリアシング(SSAA)、および/または本明細書で明示的に説明しない他のアンチエイリアシング技法を実行するように構成され得る。
【００３７】
ラスタ化ステージ36によって生成されたソースピクセルは、スクリーンピクセルロケーション、たとえば、宛先ピクセルに対応し、1つまたは複数の色属性に関連付けられ得る。特定のラスタ化されたプリミティブのために生成されたソースピクセルのすべては、ラスタ化されたプリミティブに関連付けられていると言える。プリミティブによってカバーされるべき、ラスタ化ステージ36によって決定されるピクセルは、概念的には、プリミティブの頂点を表すピクセル、プリミティブのエッジを表すピクセル、およびプリミティブの内部を表すピクセルを含み得る。
【００３８】
ラスタ化ステージ36は、三角形セットアップエンジン(TSE)37を含む。三角形セットアップエンジン(TSE)37は、プリミティブを受信し、プリミティブセットアップ、浮動小数点-固定小数点変換、クリッピング、ビューポート変換およびカリングを実行するように構成され得る。TSE37は、境界ボックスとエッジ方程式とを含む、ラスタ化ステージ36によって使用される変数を生成するように構成され得る。TSE37はまた、レンダリングのために使用される重心座標I、J、Z、およびWを生成し得る。TSE37はまた、ゼロピクセルカリングエンジン38を含む。ゼロピクセルカリングエンジン38は、本開示のゼロピクセルカリング技法を実行するように構成され得る。
【００３９】
ピクセル処理パイプライン39は、ラスタ化されたプリミティブに関連付けられたソースピクセルを受信するように、および、ソースピクセルに対して1つまたは複数のピクセルごとの動作を実行するように構成される。ピクセル処理パイプライン39によって実行され得るピクセルごとの動作は、たとえば、アルファテスト、テクスチャマッピング、色計算、ピクセルシェーディング、ピクセルごとの照明、フォグ処理、ブレンディング、ピクセルオーナーシップテスト、ソースアルファテスト、ステンシルテスト、深度テスト、シザーテストおよび/またはスティップリング動作を含む。加えて、ピクセル処理パイプライン39は、1つまたは複数のピクセルごとの動作を実行するための1つまたは複数のピクセルシェーダプログラムを実行し得る。ピクセル処理パイプライン39によって生成された得られたデータは、本明細書では宛先ピクセルデータと呼ばれ、フレームバッファ15に記憶され得る。宛先ピクセルデータは、処理されたソースピクセルと同じディスプレイロケーションを有する、フレームバッファ15内の宛先ピクセルに関連付けられ得る。宛先ピクセルデータは、たとえば、色値、宛先アルファ値、深度値などのデータを含み得る。
【００４０】
フレームバッファ15は、GPU12のための宛先ピクセルを記憶する。各宛先ピクセルは、一意のスクリーンピクセルロケーションに関連付けられ得る。いくつかの例では、フレームバッファ15は、宛先ピクセルごとの色成分および宛先アルファ値を記憶し得る。たとえば、フレームバッファ15は、各ピクセルの赤、緑、青、アルファ(RGBA)成分を記憶し得るが、ここにおいて、「RGB」成分は色値に対応し、「A」成分は宛先アルファ値に対応する。フレームバッファ15およびシステムメモリ10は別個のメモリユニットであるものとして示されているが、他の例では、フレームバッファ15はシステムメモリ10の一部であってもよい。
【００４１】
本開示の技法による一例では、GPU12のTSE37は、三角形の座標を決定することであって、三角形が、GPU12によってレンダリングされるべきシーンの一部である、こと、角度に基づいて三角形の座標を回転させることを行うように構成され得る。三角形の座標を回転させるために、TSE37は、回転された領域中の三角形の座標を生成すること、および、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定することを行うように構成され得る。TSE37は、回転された領域中の複数の平行な第1の走査線を決定すること、および、回転された領域中の複数の平行な第2の走査線を決定することを行うようにさらに構成され得る。複数の平行な第2の走査線は、複数の平行な第1の走査線に直交する。TSE37は、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する走査線内、または複数の第2の走査線内の2つの隣接する走査線内に位置するか否かを決定するようにさらに構成され得る。境界ボックス座標が、2つの隣接する走査線内に位置するとの決定に応答して、TSE37は、シーンから三角形を除去し得る。
【００４２】
図3は、ゼロピクセルカリングを実行する例示的なプロセスを示す概念図である。図3は、4つの三角形40、42、44、および46を含む。三角形40、42、44、および46は、x-y直交座標系において示されている。TSE37は、互いに直交する垂直走査線、たとえば、走査線41と、水平走査線、たとえば、走査線43とを生成する。それらの走査線は、x軸およびy軸に平行であり、一定の間隔をおいて発生する、追加の線として示されている。走査線の交点は、GPU12がグラフィックスレンダリングパイプラインにおける後続のステージに出力することになるピクセルのロケーションに対応する。図3の例は、直交する走査線を示すが、他の例では、直交しない走査線もまた使用され得ることを理解されたい。たとえば、x軸は、ある角度だけ回転され得、y軸は、別の異なる角度だけ回転され得る。
【００４３】
ゼロピクセルカリングを実行するとき、TSE37は、三角形40、42、44、および46のうちの1つなどのプリミティブが、隣接する垂直走査線のセットまたは隣接する水平走査線のセット内に位置するか否かを決定する。プリミティブが、垂直または水平走査線の隣接するセット内のみに位置する場合、TSE37は、プリミティブのピクセルが可視ではなくなると決定する。プリミティブのピクセルは、レンダリングされたフレームの可視ピクセルに寄与しないほど小さくなるので、プリミティブのピクセルは可視ではなくなる。プリミティブが可視ではなくなる場合、TSE37は、レンダリングされるべきシーンからプリミティブをカリング(除去)し得る。シーンからプリミティブを除去することで、GPU12は、そのプリミティブをレンダリングすることに関係する追加のラスタ化計算の実行を回避することが可能になり、それによって、レンダリング性能を高める。
【００４４】
三角形プリミティブが可視であるか否かをより迅速に決定するために、TSE37は、各三角形プリミティブを囲む境界ボックスを決定し得る。境界ボックスは、三角形の2つの最も遠い点の間の距離(すなわち、幅)に等しい幅と、三角形の高さに等しい高さとを有する、矩形である。三角形42に対応するサンプル境界ボックス48が、理解しやすいように示されている。各境界ボックスは、以下でより詳細に説明するように、4つの座標を有する。
【００４５】
図3の例では、TSEは、三角形40が2つの隣接する水平走査線内に位置し、したがって、0個のレンダリングされたピクセルを生じるので、カリングされ得ると決定する。同様に、TSE37は、三角形42が2つの垂直に隣接する走査線内に位置すると決定し、したがって、TSE37は、三角形42をカリングし得る。三角形44および46は、ある角度にあり、2つの隣接する水平走査線、および2つの隣接する垂直走査線と交差するので、TSE37は、三角形44および46が、レンダリングされる場合にいかなるピクセルにも対応しなくなるように十分小さいにもかかわらず、三角形44および46がカリングされるべきであると決定することができない。
【００４６】
図4は、本開示の技法に従ってゼロピクセルカリングを実行する例示的なプロセスを示す概念図である。図3に関して説明したプロセスは、ゼロピクセルカリング技法について説明するが、これらの技法は、走査線が、ある角度ではなく、水平および垂直に配向されるので、ある角度で配向されるゼロピクセルプリミティブを除去しない。図4の例では、TSE37は、角度に基づいてプリミティブの座標を回転させて、回転された領域中でプリミティブを生成する。プリミティブを回転させることによって、および、ゼロピクセルカリングのために使用される走査線を関連付けることによって、本技法に従って構成されたGPUは、ゼロピクセルカリングを実行するときにカリングされるプリミティブの数を増加させ得る。
【００４７】
図4は、図3に示した同じ三角形40、42、44、および46を示す。ただし、図3とは異なり、図4はまた、直交する走査線、たとえば、走査線60、62を含み、それらの走査線は、破線として示されており、実線の水平および垂直走査線に対してある角度において配向されている。ゼロピクセルカリングエンジン38は、角度走査線60および62などに基づいて、プリミティブをカリングし得る。本開示の技法によるゼロピクセルカリングを実行するために、TSE37は、角度に基づいて三角形40、42、44、46の座標を回転させる。様々な例では、角度は45度であり得る。しかしながら、他の例では、任意の他の角度または角度の組合せが使用され得る。
【００４８】
三角形40、42、44、46のx-y座標を回転させることによって、座標が「u-v」領域と呼ばれる領域中に配置させられる。x-y座標系とu-v座標の両方は、左手直交座標系を含み得る。左手直交座標系は、一般に、右側に向けられたx(u)成分を含む。ただし、従来の左手直交座標系とは異なり、y(v)座標は、上方ではなく下方に向けられる(すなわち、y軸に沿って下方に移動するとき、y値が増す)。u-v領域もまた、2次元直交領域である。本開示におけるu-v領域および座標は、x-y領域に対してある角度だけ回転される。回転の角度(θ)は、x軸に対して時計回りに配向される。
【００４９】
TSE37は、三角形40、42、44、46の座標をu-v領域に回転させるために、変換行列を適用し得る。変換行列は、以下を含み得る。
【００５０】
【数１】
0006386692.tif 000002
【００５１】
ただし、xおよびyは、三角形のx座標およびy座標であり、uおよびvは、u-v領域回転座標である。座標を回転させた後、TSE37は、三角形40、42、44、46の各々のための境界ボックスのための座標を決定し得る。三角形42に対応する境界ボックス48が、再び例のために(今回は、実線の境界線を有して)示されている。
【００５２】
境界ボックス座標を決定した後、次いで、TSE37は、三角形40、42、44、または46に関連付けられた境界ボックスのいずれかが、u-v領域中の2つの隣接する水平走査線内、または2つの隣接する垂直走査線内に位置するか否かを決定する。図4の例では、u-v領域の走査線が、角度のある破線として示されている。u-v領域走査線は、TSE37が適用する回転のために、x-y軸に対してある角度において示されている。したがって、図4の例では、TSE37は、三角形44および46の境界ボックスが隣接する平行な角度走査線内に完全に位置すると決定する。
【００５３】
TSE37は、三角形40および42が隣接する平行な角度走査線内に完全に位置するのではないと決定する。TSE37は、この例では、三角形40および42をカリングしない。しかしながら、TSE37は、いくつかの例では、x-y領域中、および回転されたx-y領域中でカリングを実行するように構成され得る。たとえば、TSE37は、回転されたx-y領域中の複数の異なる角度について同時にプリミティブをカリングするように構成され得る。三角形46および44がu-v領域中の平行な隣接する走査線内に位置するとの決定に基づいて、TSE37は、三角形44および46がレンダリングされる場合にいかなるピクセルにも対応しなくなるので、三角形44および46をカリングし得る。他の例では、TSE37は、プリミティブの形状を決定すること、(たとえば、回転されないx-y領域中で)プリミティブに角度を割り当てること、および、割り当てられた角度に基づいてカリングを実行することを行うように構成され得る。
【００５４】
図5は、追加の詳細とともに、本開示の技法に従ってゼロピクセルカリングテクスチャを実行する一例を示す概念図である。図5の例では、TSE37は、所与の回転角に基づいて、u-v領域中に配置するべき三角形61の座標を決定している。破線の角度のある線の各々は、走査線に対応する。隣接する走査線の各々は、以前の平行な隣接する走査線に対する領域中の1単位のインクリメントまたはデクリメントに対応する。したがって、所与の走査線kについて、隣接する走査線は、値k+1またはk-1を有することになる。
【００５５】
x-y領域では、三角形61は、x-y座標(x1,y1)をもつ左下頂点と、座標(x0,y0)をもつ中間頂点と、右上頂点座標(x2,y2)とを有する。回転行列を三角形61の以前の座標に適用した後、(v1,v1)に対応する、得られるu-v座標は、(x1+y1,x1-y1)である。(u0,v0)のためのu-v座標は、(x0+y0,x0-y0)に対応し、(u2,v2)のための座標は、(x2+y2,x2-y2)に対応する。
【００５６】
三角形61のための回転されたu-v座標を決定した後、TSE37は、三角形61を囲む境界ボックスの4つの角のためのu-v座標を決定する。TSE37は、境界ボックスの4つの座標を、(Umin,Vmin)、(Umax,Vmin)、(Umax,Vmax)、および(Umin,Vmax)として決定し、ただし、それぞれ、UmaxおよびUminは、三角形の最大および最小u座標であり、VminおよびVmaxは、三角形の最大および最小v座標である。境界ボックスの座標に基づいて、TSE37は、境界ボックスが、2つの隣接する平行な水平u-v領域走査線、または2つの隣接する垂直u-v領域走査線内に適合するか否かを決定する。いくつかの例では、TSE37は、UmaxおよびUminの差分の絶対値が1未満であるか否かを決定することによって、境界ボックスが2つの隣接する走査線内であるか否かを決定し得る。TSE37はまた、VmaxおよびVminの差分の絶対値が1未満であるか否かを決定し得る。前述の差分値のいずれかが1未満である場合、境界ボックスは、2つの隣接する走査線内に適合する。境界ボックスが、2つの隣接する走査線内に適合する場合、TSE37は、三角形プリミティブ、すなわち、この例では三角形61をカリングし得る。
【００５７】
図6は、本開示の技法に従ってマルチサンプルアンチエイリアシングとともにゼロピクセルカリングを実行する一例を示す概念図である。図6の例では、2つの三角形80および82は、シーンのプリミティブを備える。プリミティブは、直交x-y軸、ならびに角度のある破線および実線の走査線に対応するu-v領域に対して示されている。走査線は、図6の例では、互いに平行または直角のいずれかである。
【００５８】
図6のシーンをレンダリングするとき、GPU12は、シーンのプリミティブ上でアンチエイリアシングを実行する。GPU12は、マルチサンプルアンチエイリアシング(MSAA)、スーパーサンプルアンチエイリアシング(SSAA)、および/または本明細書で明示的に説明していない別のアンチエイリアシング技法を使用して、シーン上でアンチエイリアシングを実行し得る。
【００５９】
シーン上でアンチエイリアシングを実行するとき、GPU12は、シーンのための最終的なディスプレイ解像度よりも高い(スーパーサンプリングされた)解像度で、シーンを本質的にレンダリングする。より詳細には、GPU12は、最終的なシーン中でレンダリングされるべきピクセルごとに複数のサンプルを決定する。GPU12は、レンダリングされるべき最終的なピクセル値を決定するために、ピクセルの各々に関連付けられたサンプルをダウンサンプリング(すなわち、結合)する。図6の例では、4つのサンプルがピクセルごとに決定される。単一のピクセル内のサンプルロケーションの各々は、各走査線により画定されたボックス内の円として示されている。様々なアンチエイリアシング技法について、次に手短に説明する。
【００６０】
SSAAは、ダウンサンプリングされるべきサンプルが同じプリミティブに属するか否かを決定することなしに、および、サンプルがプリミティブのエッジに位置するか否かを顧慮せずに、GPUがダウンサンプリングを実行する、アンチエイリアシングのより性能集中的な技法である。MSAAは、SSAAと同様である。しかしながら、MSAAにおける一般化として、およびSSAAとは異なり、シェーダユニットは、2つ以上のプリミティブをカバーするピクセル上でいくつかのアンチエイリアシング計算(たとえば、ダウンサンプリング)を実行するのみである。MSAAごとに、ダウンサンプリング計算を低減することによって、ダウンサンプリングがあらゆるピクセル上で実行されるSSAAと比較して、MSAAの性能ペナルティが低減される。
【００６１】
図6に示すように、GPU12がアンチエイリアシングを実行するとき、GPU12は、シーンの各ピクセルを複数回サンプリングする。図6では、各ピクセルが4回サンプリングされ、4回は、一例として、4x MSAAに対応し得る。アンチエイリアシングとともにゼロピクセルカリングを実行するとき、TSE37は、たとえば、u-v領域中に三角形座標を配置するために、上記で説明した回転行列を使用して、角度に基づいて、三角形80の座標を回転させる。
【００６２】
しかしながら、図4〜図5の場合のように、ピクセルロケーションの交点に基づいて、走査線を生成するのではなく、TSE37は、各ピクセルのサンプルロケーションと交差するu-v領域中の走査線を生成する。実線の角度走査線および破線の角度走査線は、サンプルロケーションと交差するそのような走査線の例である。図3〜図5に関して上記で説明したように、プリミティブのために生成された境界ボックスが、2つの平行な走査線内に位置する場合、TSE37は、そのプリミティブをカリングし得る。図6の例では、三角形82は、2つの隣接する走査線内ではない。したがって、TSE37は、三角形82をカリングすることができない。三角形80は、2つの隣接する走査線内に位置するので、TSE37は、三角形80をカリングすることができる。
【００６３】
アンチエイリアシングを実行するとき、ピクセルごとに生成された追加のサンプル、ならびに、対応する追加の走査線およびそれらの関連付けられた角度のために、TSE37は、アンチエイリアシングを実行するとともにゼロピクセルカリングを実行するとき、異なる回転角を使用し得る。たとえば、TSE37は、たとえば、4xMSAAを実行するとき、63.5度の回転角を使用し得る。いくつかの例では、TSE37は、アンチエイリアシングを実行するとともにゼロピクセルカリングを実行するとき、45度の回転角を最初に使用し得る。次いで、TSE37は、63.5度の回転角を使用し、アンチエイリアシングを実行するとき、いかなるゼロプリミティブをもカリングし得る。63.5度のカリング角を使用することで、以下でより詳細に説明するように、アンチエイリアシングを実行するとき、より高い割合のカリングされるプリミティブを生じ得る。三角形回転およびカリング決定を実行するための例示的な擬似コードについて、次に説明する。
【００６４】
最初に、TSE37は、頂点A、B、およびCを有する入力三角形を受信する。三角形は、直交頂点座標、すなわち、A(x0,y0)、B(x1,y1)、およびC(x2,y2)を有する。TSE37はまた、回転角(T)を受信する。
【００６５】
次に、TSE37は、以下の式に従って、回転された領域中の三角形の座標を決定する。
x0'=cos(T)*x0-sin(T)*y0=u0
y0'=sin(T)*x0+cos(T)*y0=v0
x1'=cos(T)*x1-sin(T)*y1=u1
y1'=sin(T)*x1+cos(T)*y1=v1
x2'=cos(T)*x2-sin(T)*y2=u2
y2'=sin(T)*x2+cos(T)*y2=v2
次いで、TSE37は、以下の式に従って、最大および最小のu値およびv値を決定する。
uMax=max(u0,u1,u2)、uMin=min(u1,u1,u2)
vMax=max(v0,v1,v2)、vMin=min(v1,v1,v2)
ただし、minは、その引数の最小値を戻す関数であり、maxは、その引数の最大値を戻す関数である。
【００６６】
u-v座標と関連付けられた値とを決定した後、TSE37は、abs(uMax-uMin)またはabs(vMax-vMin)<1であるか否かを決定し、
ただし、absは、絶対値関数である。上記の条件が真である場合、TSE37は、プリミティブをカリングし得る。
【００６７】
MSAAを実行するとき、TSE37は、ハードウェア、ソフトウェア、またはそれらの組合せにおいて、ゼロピクセルカリングを実行するための以下の擬似コードを実行し得る。
u0=x0+y0; v0=x0-y0 // n.8精度
u1=x1+y1; v1=x1-y1
u2=x2+y2; v2=x2-y2
uMax=max(u0,u1,u2); uMin=min(u0,u1,u2) // n.8精度
vMax=max(v0,v1,v2); vMin=min(v0,v1,v2)
switch(MSAA) {
case 0: // 1xMSAA
if(((uMax>>8)==(uMin>>8))&&((uMin & 0xff)!=0)) {
kill=true;
}
if(((vMax>>8)==(vMin>>8))&&((vMin & 0xff)!=0)) {
kill=true;
}
break;
case 1: // 2xMSAA
if(((vMax>>8)==(vMin>>8))&&((vMin & 0xff)!=0)) {
kill=true;
}
if((((uMax+0x80)>>7)==((uMin+0x80)>>7))&&(((uMin+0x80)& 0x7f)!=0)) {
kill=true;
}
break;
case 2: // 4xMSAA
if((((vMax+0x40)>>7)==((vMin+0x40)>>7))&&(((vMin+0x40)& 0x7f)!=0))
{
if (((vMin+0x40)&0x80)==0) {
kill=true;
}
}
if((((uMax+0x40)>>7)==((uMin+0x40)>>7))&&(((uMin+0x40)& 0x7f)!=0))
{
if (((uMin+0x40)&0x80)==0) {
kill=true;
}
}
break;
case 3:
case 4:
break;
【００６８】
本開示のゼロピクセルカリング技法は、浮動小数点または固定小数点フォーマットにおいて実行され得る。上記の例では、8小数ビットの精度(n.8精度)をもつ固定小数点フォーマットが使用される。
【００６９】
本開示の技法に関連付けられた様々な性能改善について、次に説明する。GFXBenchは、GPUによってレンダリングされたいくつかのシーンからなる、一般的に使用されるグラフィックス性能ベンチマークである。テストシーンのいくつかには、「エジプト」、「T-Rex」、および「マンハッタン」が含まれる。Table 1(表1)は、様々なMSAAモードとともに45度の回転角を使用することによる、プリミティブカリングレートにおける割合改善について説明している。
【００７０】
【表１】
0006386692.tif 000003
【００７１】
したがって、ほぼあらゆるシーンにおいて、ゼロピクセルカリングを実行するときに45度回転を使用することで、性能改善が生じる。ただし、4xMSAAの場合には、ゼロプリミティブカリング割合レートは、比較的より低い。この場合に対処するために、TSE37は、様々な例では、ゼロピクセルカリングを実行するとき、63.5度の回転を利用し得る。いくつかの例では、TSE37は、45度の角度においてゼロピクセルカリングを実行し、次いで、63.5度においてゼロピクセルカリングを実行し得る。4xMSAAにおける様々な角度の組合せの性能改善について、以下のTable 2(表2)において説明する。
【００７２】
【表２】
0006386692.tif 000004
【００７３】
したがって、Table 2(表2)において説明するように、63.5度の回転を使用することで、カリングされるプリミティブの割合がわずかに改善され得る。ゼロピクセルカリングを実行するとき、45度の回転と63.5度の回転の両方を使用することで、カリングされるプリミティブの割合がさらに改善され得る。
【００７４】
図7は、本開示のゼロピクセルカリングの例示的な方法を示すフローチャートである。例のために、ゼロピクセルカリングエンジン38が、図7に示す技法の一部または全部を実行し得ることを理解されたい。ゼロピクセルカリングエンジン38は、入力三角形と回転の角度とを得るように構成され得る(90)。ゼロピクセルカリングエンジン38は、三角形x-y座標を回転させて、u-v座標を生成し得る(92)。次いで、ゼロピクセルカリングエンジン38は、最大u-v座標と最小u-v座標とを有する、回転されアンチエイリアシングされた境界ボックス(AABB)を発見し得る(94)。Umaxは最大u座標に対応し、Uminは最小u座標に対応する。Vminは最小v座標に対応し、Vmaxは最大v座標に対応する。
【００７５】
ゼロピクセルカリングエンジン38は、境界ボックスがピクセルグリッド内であるか否かを決定する(96)。境界ボックスがピクセルグリッド内である場合(決定ボックス96の「Yes」分岐)、ゼロピクセルカリングエンジン38は、三角形をカリングする(98)。
【００７６】
図8は、本開示の例示的な方法を示すフローチャートである。図8の方法は、TSE37を含む、GPU12の1つまたは複数のハードウェアユニットによって実行され得る。図8は、GPU12のTSE37が、三角形の座標を決定すること(100)であって、三角形が、GPU12によってレンダリングされるべきシーンの一部である、こと、および、角度に基づいて三角形の座標を回転させること(102)を行うように構成され得る方法を示す。三角形の座標を回転させるために、TSE37は、回転された領域中の三角形の座標を生成すること(104)、および、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定すること(106)を行うように構成され得る。TSE37は、回転された領域中の複数の平行な第1の走査線を決定すること、および回転された領域中の複数の平行な第2の走査線を決定することであって、複数の平行な第2の走査線が、複数の平行な第1の走査線に直交する、こと(108)を行うようにさらに構成され得る。TSE37は、回転された領域中の境界ボックス座標が、複数の第1の走査線のうちの2つの隣接する走査線内、または複数の第2の走査線内の2つの隣接する走査線内に位置するか否かを決定すること(110)を行うようにさらに構成され得る。境界ボックス座標が、2つの隣接する走査線内に位置するとの決定に応答して、TSE37は、シーンから三角形を除去し得る(112)。
【００７７】
1つまたは複数の例では、上記で説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。ソフトウェアにおいて実装される場合、機能は、非一時的コンピュータ可読媒体を備える製造品上の1つまたは複数の命令またはコードとして記憶され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを搬送もしくは記憶するために使用されコンピュータによってアクセスされ得る、任意の他の媒体を備え得る。ディスク(disk)およびディスク(disc)は、本明細書で使用するとき、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せはまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【００７８】
コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。加えて、いくつかの態様では、本明細書で説明する機能は、専用ハードウェアモジュールおよび/またはソフトウェアモジュール内で提供され得る。また、技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
【００７９】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットについて説明するが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットにおいて結合されてもよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上記で説明したような1つもしくは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されてもよい。
【００８０】
様々な例について説明した。これらおよび他の例は、以下の特許請求の範囲内に入る。
【符号の説明】
【００８１】
2  コンピューティングデバイス
4  ユーザ入力インターフェース
6  CPU
7  GPUドライバ
8  メモリコントローラ
10  システムメモリ
12  GPU
14  グラフィックスメモリ
15  フレームバッファ
16  ディスプレイインターフェース
18  ディスプレイ
20、22  バス
24  ソフトウェアアプリケーション
26  グラフィックスAPI
30  グラフィックス処理パイプライン
32  コマンドエンジン
34  ジオメトリ処理ステージ
36  ラスタ化ステージ
37  三角形セットアップエンジン、TSE
38  ゼロピクセルカリングエンジン
39  ピクセル処理パイプライン
40、42、44、46、61、80、82  三角形
41、43  走査線
48  サンプル境界ボックス、境界ボックス
60、62  走査線、角度走査線
【要約】
グラフィックス処理ユニット(GPU)は、三角形の座標を決定し、角度に基づいて三角形の座標を回転させるように構成された、三角形セットアップエンジン(TSE)を含み得る。座標を回転させるために、TSEは、回転された領域中の三角形の座標を生成し、回転された領域中の三角形の座標に基づいて、回転された領域中の境界ボックスの座標を決定する。TSEは、回転された領域中の複数の平行な第1の走査線と、回転された領域中の複数の平行な第2の走査線とを決定する。複数の第1の走査線および複数の第2の走査線は、直交する。TSEは、境界ボックス座標が、2つの隣接する走査線内に位置するか否かを決定する。境界ボックス座標が、2つの隣接する走査線内に位置する場合、TSEは、シーンから三角形を除去する。【図１】
0006386692.tif 000009
【図２】
0006386692.tif 000010
【図３】
0006386692.tif 000011
【図４】
0006386692.tif 000012
【図５】
0006386692.tif 000013
【図６】
0006386692.tif 000014
【図７】
0006386692.tif 000015
【図８】
0006386692.tif 000016