(57)【要約】      （修正有）【課題】粗ピクセルシェーディング（ＣＰＳ）を実行するための装置および方法を提供する。【解決手段】方法は、グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することによりメッシュを前処理する段階と、接平面パラメータ化を用いてグラフィックスパイプラインのラスタライズステージにおいてメッシュのラスタライズを実行する段階とを備える、粗ピクセルシェーディング（ＣＰＳ）のための方法を含む。【選択図】図１１
2019061713.tif 000002
【特許請求の範囲】
【請求項１】
粗ピクセルシェーディング（ＣＰＳ）のための方法であって、
グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することにより前記グラフィックスメッシュを前処理する段階と、
前記接平面パラメータ化を用いてグラフィックスパイプラインのラスタライズステージにおいて前記グラフィックスメッシュのラスタライズを実行する段階とを備える、方法。
【請求項２】
前記グラフィックスメッシュを前処理する段階は、前記グラフィックスメッシュの頂点毎に、複数の近隣トライアングルを収集する段階を更に有する、請求項１に記載の方法。
【請求項３】
前記グラフィックスメッシュを前処理する段階は、前記複数の近隣トライアングルにわたって反復して、前記複数の近隣トライアングルを複数の接平面に投影する段階を更に有する、請求項２に記載の方法。
【請求項４】
前記グラフィックスメッシュを前処理する段階は、頂点毎に複数の線形アトリビュート方程式を設定および平均する段階を更に有する、請求項３に記載の方法。
【請求項５】
ラスタライズを実行する段階は、頂点シェーダにおいて複数の平面方程式を設定する段階を更に有する、請求項４に記載の方法。
【請求項６】
前記複数の平面方程式は、複数の１頂点毎の接平面方程式を含む、請求項５に記載の方法。
【請求項７】
ラスタライズを実行する段階は、前記複数の平面方程式を、補間することなくピクセルシェーダに可視化する段階を更に有する、請求項６に記載の方法。
【請求項８】
ラスタライズを実行する段階は、複数の頂点接平面に基づいて、修正された複数のテクスチャデリバティブを前記ピクセルシェーダにより決定する段階を更に有する、請求項７に記載の方法。
【請求項９】
前記ピクセルシェーダは、複数の重心座標を用いて複数の結果を更に補間する、請求項８に記載の方法。
【請求項１０】
粗ピクセルシェーディング（ＣＰＳ）のための機械可読媒体であって、
機械により実行されると、前記機械に、
グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することにより前記グラフィックスメッシュを前処理し、
前記接平面パラメータ化を用いてグラフィックスパイプラインのラスタライズステージにおいて前記グラフィックスメッシュのラスタライズを実行する複数のオペレーションを実行させるプログラムコードを格納した、機械可読媒体。
【請求項１１】
前記グラフィックスメッシュを前処理することは、前記グラフィックスメッシュの頂点毎に、複数の近隣トライアングルを収集することを更に含む、請求項１０に記載の機械可読媒体。
【請求項１２】
前記グラフィックスメッシュを前処理することは、前記複数の近隣トライアングルにわたって反復して、前記複数の近隣トライアングルを複数の接平面に投影することを更に含む、請求項１１に記載の機械可読媒体。
【請求項１３】
前記グラフィックスメッシュを前処理することは、頂点毎に複数の線形アトリビュート方程式を設定および平均することを更に含む、請求項１２に記載の機械可読媒体。
【請求項１４】
ラスタライズを実行することは、頂点シェーダにおいて複数の平面方程式を設定することを更に含む、請求項１３に記載の機械可読媒体。
【請求項１５】
前記複数の平面方程式は、複数の１頂点毎の接平面方程式を含む、請求項１４に記載の機械可読媒体。
【請求項１６】
ラスタライズを実行することは、前記複数の平面方程式を、補間することなくピクセルシェーダに可視化することを更に含む、請求項１５に記載の機械可読媒体。
【請求項１７】
ラスタライズを実行することは、複数の頂点接平面に基づいて、修正された複数のテクスチャデリバティブをピクセルシェーダにより決定することを更に含む、請求項１６に記載の機械可読媒体。
【請求項１８】
前記ピクセルシェーダは、複数の重心座標を用いて複数の結果を更に補間する、請求項１７に記載の機械可読媒体。
【請求項１９】
粗ピクセルシェーディング（ＣＰＳ）のための装置であって、
グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することにより、ラスタライズの前に前記グラフィックスメッシュを前処理する前処理ロジックと、
前記接平面パラメータ化を用いて前記グラフィックスメッシュのラスタライズを実行するグラフィックスパイプラインのラスタライズステージとを備える、装置。
【請求項２０】
前記グラフィックスメッシュを前処理することは、前記グラフィックスメッシュの頂点毎に、複数の近隣トライアングルを収集することを更に含む、請求項１９に記載の装置。
【請求項２１】
前記グラフィックスメッシュを前処理することは、前記複数の近隣トライアングルにわたって反復して、前記複数の近隣トライアングルを複数の接平面に投影することを更に含む、請求項２０に記載の装置。
【請求項２２】
前記グラフィックスメッシュを前処理することは、頂点毎に複数の線形アトリビュート方程式を設定および平均することを更に含む、請求項２１に記載の装置。
【請求項２３】
前記ラスタライズステージは、複数の平面方程式を設定する頂点シェーダを有する、請求項２２に記載の装置。
【請求項２４】
前記複数の平面方程式は、複数の１頂点毎の接平面方程式を含む、請求項２３に記載の装置。
【請求項２５】
前記ラスタライズステージは、前記複数の平面方程式を、補間を用いることなくピクセルシェーダに可視化するジオメトリシェーダを有する、請求項２４に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概ねコンピュータプロセッサの分野に関する。より詳細には、本発明は、フィルタリングされた粗ピクセルシェーディングのための装置および方法に関する。
【背景技術】
【０００２】
粗ピクセルシェーディング（ＣＰＳ）は、デカップリングされたシェーディングの限定されたサブセットを実装する標準的ラスタライズパイプラインの拡張である。これは、簡単で、しかも強力であり、１ピクセル毎に複数のレンダリングターゲットサンプルが同一のシェーダ評価によりカラーリングされるマルチサンプルアンチエイリアシング（ＭＳＡＡ）の一般化とみなされ得る。ディスプレイ解像度、電力効率性、および知覚的考慮を向上させることに動機づけられて、ＣＰＳは、複数のピクセルにわたり同一のシェーダ評価を再利用しつつ、スーパーサンプリングされた可視性を保持する。
【０００３】
構成により、ＣＰＳは、ＭＳＡＡの１つの品質問題を受け継いでおり、これは通常、リアルタイムのレンダリングにおいて認識されない。ここでは可視性サンプリングからデカップリングされるシェーダ評価は、ラスタライズされたプリミティブによりカバーされるスクリーン空間位置ではもはや発生する可能性はない。シェーディングは通常、ピクセルの中央部において評価され、部分的にカバーされる複数のピクセルは、複数の頂点アトリビュートを外挿する。これは、特にテクスチャサンプリング中に様々なアーチファクトをもたらし得る。重心補間がこの問題に対処するが、一時的点滅を生じさせ、内部トライアングルエッジを露出させる他のアーチファクトをもたらし得る。
【０００４】
複数のレンダリングプリミティブがスクリーン上でいくつかの粗いシェーディングピクセルをカバーするときに、シェーダ評価における低減は、効果を有する。標準的ラスタライズパイプラインと同様に、シェーディングサンプルは、トライアングルの境界を越えて再使用されない。最新のワークロードにおいてより重要となっているより小さい複数のトライアングルについては、シェーディングの最小単位がクワッドであるので、シェーディングは、プリミティブ当たりで２×２の粗ピクセル未満に下げることができない。
【０００５】
シェーディングレートを更に低減して、シェーディングピクセルを更に粗くする必要性により、最近傍サンプリングより良い可視性サンプルの色の再構成が要求される。ＣＰＳにフィルタリングを用いる場合、複数のトライアングル境界の周囲でより多くのシェーディングクワッドを評価することを必要とし、これにより既存の限界を増幅する。すなわち、より冗長なピクセルが補間され、アトリビュート外挿は、更に大きな問題となる。ＣＰＳを用いたバイリニアフィルタリングの予備的評価は、アーチファクトの存在を実証した。
【図面の簡単な説明】
【０００６】
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得ることができる。
【０００７】
【図１】プロセッサが１または複数のプロセッサコアおよびグラフィックスプロセッサを有するコンピュータシステムの実施形態のブロック図である。
【０００８】
【図２】プロセッサが１または複数のプロセッサコア、統合メモリコントローラ、および統合グラフィックスプロセッサを有する一実施形態のブロック図である。
【０００９】
【図３】ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサの一実施形態のブロック図である。
【００１０】
【図４】グラフィックスプロセッサ用のグラフィックス処理エンジンの実施形態のブロック図である。
【００１１】
【図５】グラフィックスプロセッサの別の実施形態のブロック図である。
【００１２】
【図６】複数の処理要素のアレイを含むスレッド実行ロジックのブロック図である。
【００１３】
【図７】一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示する。
【００１４】
【図８】グラフィックスパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、およびレンダリング出力パイプラインを含むグラフィックスプロセッサの別の実施形態のブロック図である。
【００１５】
【図９Ａ】一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図である。
【００１６】
【図９Ｂ】一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。
【００１７】
【図１０】一実施形態のよるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。
【００１８】
【図１１】本発明の複数の実施形態が実装され得るアーキテクチャを図示する。
【００１９】
【図１２Ａ】本発明の複数の実施形態により使用される、異なるシェーディング技術を図示する。
【図１２Ｂ】本発明の複数の実施形態により使用される、異なるシェーディング技術を図示する。
【図１２Ｃ】本発明の複数の実施形態により使用される、異なるシェーディング技術を図示する。
【００２０】
【図１３】本発明の一実施形態において使用される鉛直スケーリングおよび水平シャーリングオペレーションを図示する。
【００２１】
【図１４】テクスチャ空間とスクリーン空間との間のマッピングの一実施形態を図示する。
【００２２】
【図１５】所与の頂点の接平面に存在するトライアングルを用いて、頂点においてテクスチャデリバティブがどのように演算され得るかを図示する。
【００２３】
【図１６】本発明の一実施形態による方法を図示する。
【発明を実施するための形態】
【００２４】
以下の説明において、説明の目的のために、後述される本発明の複数の実施形態の完全な理解を提供するべく、多くの具体的な詳細が記載される。しかし、当業者には、本発明の複数の実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。本発明の複数の実施形態の基礎となる原理を不明瞭にするのを避けるべく、複数の他の例において、周知の複数の構造およびデバイスがブロック図の形態で示される。
【００２５】
例示的なグラフィックスプロセッサのアーキテクチャおよびデータタイプ
［概要−図１〜図３］
図１は、一実施形態によるデータ処理システム１００のブロック図である。データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８とを含み、多数のプロセッサ１０２またはプロセッサコア１０７を有するシングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、またはサーバシステムであり得る。一実施形態において、データ処理システム１００は、モバイル、ハンドヘルド型、またはエンベデッドデバイスにおいて用いるためのシステムオンチップ集積回路（ＳＯＣ）である。
【００２６】
データ処理システム１００の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォーム、ゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム１００は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８により生成されるグラフィカルインタフェースとを有するテレビまたはセットトップボックスデバイスである。
【００２７】
１または複数のプロセッサ１０２は各々、実行されると、システムおよびユーザソフトウェアのための複数のオペレーションを実行する複数の命令を処理する、１または複数のプロセッサコア１０７を含む。一実施形態において、１または複数のプロセッサコア１０７の各々は、特定の命令セット１０９を処理するように構成される。命令セット１０９は、複合命令セット演算（ＣＩＳＣ）、縮小命令セット演算（ＲＩＳＣ）、または超長命令語（ＶＬＩＷ）による演算を容易にし得る。複数のプロセッサコア１０７は各々、複数の他の命令セットのエミュレーションを容易にする複数の命令を含み得る、異なる命令セット１０９を処理し得る。プロセッサコア１０７は、デジタル信号プロセッサ（ＤＳＰ）等の複数の他のプロセッシングデバイスも含み得る。
【００２８】
一実施形態において、プロセッサ１０２は、キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。一実施形態において、キャッシュメモリは、プロセッサ１０２の様々なコンポーネント間で共有される。一実施形態において、プロセッサ１０２は、既知の複数のキャッシュコヒーレンシ技術を用いる複数のプロセッサコア１０７間で共有され得る外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュまたはラストレベルキャッシュ（ＬＬＣ））（図示せず）も用いる。更に、レジスタファイル１０６は、複数の異なるタイプのデータを格納する複数の異なるタイプのレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ）を含み得る、プロセッサ１０２内に含まれる。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ１０２の設計に固有であってもよい。
【００２９】
プロセッサ１０２は、システム１００におけるプロセッサ１０２と複数の他のコンポーネントとの間で複数のデータ信号を送信するべく、プロセッサバス１１０と結合される。システム１００は、メモリコントローラハブ１１６および入出力（Ｉ／Ｏ）コントローラハブ１３０を含む、例示的な「ハブ」システムアーキテクチャを用いる。メモリコントローラハブ１１６は、システム１００のメモリデバイスと複数の他のコンポーネントとの間の通信を容易にするが、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏデバイスへの複数の接続を提供する。
【００３０】
メモリデバイス１２０は、処理メモリとして機能する好適な性能を有する、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、またはいくつかの他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２が処理を実行するときに用いられるデータ１２２および複数の命令１２１を格納し得る。メモリコントローラハブ１１６は、任意選択の外部グラフィックスプロセッサ１１２にも結合し、任意選択の外部グラフィックスプロセッサ１１２は、グラフィックスおよびメディアオペレーションを実行するべく、プロセッサ１０２において１または複数のグラフィックスプロセッサ１０８と通信し得る。
【００３１】
ＩＣＨ１３０は、複数の周辺機器が高速Ｉ／Ｏバスを介してメモリ１２０およびプロセッサ１０２に接続することを可能にする。Ｉ／Ｏ周辺機器は、オーディオコントローラ１４６、ファームウェアインタフェース１２８、無線トランシーバ１２６（例えば、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標））、データストレージデバイス１２４（例えば、ハードディスクドライブ、フラッシュメモリ等）、および複数のレガシ（例えば、パーソナルシステム２（ＰＳ／２））デバイスをシステムと結合するためのレガシＩ／Ｏコントローラを含む。１または複数のユニバーサルシリアルバス（ＵＳＢ）コントローラ１４２は、キーボードおよびマウス１４４の組み合わせのような複数の入力デバイスを接続する。ネットワークコントローラ１３４も、ＩＣＨ１３０と結合し得る。一実施形態において、高性能ネットワークコントローラ（図示せず）は、プロセッサバス１１０と結合する。
【００３２】
図２は、１または複数のプロセッサコア２０２Ａ〜Ｎ、統合メモリコントローラ２１４、および統合グラフィックスプロセッサ２０８を有するプロセッサ２００の実施形態のブロック図である。プロセッサ２００は、破線ボックスにより表される追加のコア２０２Ｎまでの複数の追加のコアを含み得る。コア２０２Ａ〜Ｎの各々は、１または複数の内部キャッシュユニット２０４Ａ〜Ｎを含む。一実施形態において、各コアは、１または複数の共有キャッシュユニット２０６へのアクセスも有する。
【００３３】
内部キャッシュユニット２０４Ａ〜Ｎ、および共有キャッシュユニット２０６は、プロセッサ２００内におけるキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも１つのレベルの複数の命令およびデータキャッシュ、ならびにレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または複数の他のレベルのキャッシュのような１または複数のレベルの中間レベルの共有キャッシュを含み得、外部メモリの前の最高レベルのキャッシュは、ラストレベルキャッシュ（ＬＬＣ）として分類される。一実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット２０６および２０４Ａ〜Ｎ間のコヒーレンシを維持する。
【００３４】
プロセッサ２００は、１または複数のバスコントローラユニット２１６およびシステムエージェント２１０のセットも含み得る。１または複数のバスコントローラユニットは、１または複数の周辺構成要素相互接続バス（例えば、ＰＣＩ、ＰＣＩエクスプレス）のような複数の周辺機器バスのセットを管理する。システムエージェント２１０は、様々なプロセッサコンポーネントのための管理機能を提供する。一実施形態において、システムエージェント２１０は、様々な外部メモリデバイス（図示せず）へのアクセスを管理するべく、１または複数の統合メモリコントローラ２１４を含む。
【００３５】
一実施形態において、コア２０２Ａ〜Ｎのうちの１または複数は、同時のマルチスレッディングのためのサポートを含む。そのような実施形態において、システムエージェント２１０は、マルチスレッド処理中にコア２０２Ａ〜Ｎを調整および動作させるための複数のコンポーネントを含む。更に、システムエージェント２１０は、電力制御ユニット（ＰＣＵ）を含み得、電力制御ユニットは、コア２０２Ａ〜Ｎおよびグラフィックスプロセッサ２０８の電力状態を調整するロジックおよび複数のコンポーネントを含む。
【００３６】
更に、プロセッサ２００は、複数のグラフィックス処理オペレーションを実行するグラフィックスプロセッサ２０８を含む。一実施形態において、グラフィックスプロセッサ２０８は、共有キャッシュユニット２０６、および１または複数の統合メモリコントローラ２１４を含むシステムエージェントユニット２１０のセットと結合する。一実施形態において、ディスプレイコントローラ２１１は、１または複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するべく、グラフィックスプロセッサ２０８と結合される。ディスプレイコントローラ２１１は、少なくとも１つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ２０８もしくはシステムエージェント２１０内に統合されてもよい。
【００３７】
一実施形態において、リングベースの相互接続ユニット２１２は、プロセッサ２００の複数の内部コンポーネントを結合するべく用いられる。しかし、当技術分野において周知の複数の技術を含む、ポイントツーポイント相互接続、スイッチ相互接続、または他の複数の技術等、代替的な相互接続ユニットが用いられてもよい。一実施形態において、グラフィックスプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続２１２と結合する。
【００３８】
例示的なＩ／Ｏリンク２１３は、様々なプロセッサコンポーネントとｅＤＲＡＭモジュールのような高性能エンベデッドメモリモジュール２１８との間の通信を容易にするパッケージＩ／Ｏ相互接続を含む、複数の様々なＩ／Ｏ相互接続のうちの少なくとも１つを表す。一実施形態において、コア２０２〜Ｎおよびグラフィックスプロセッサ２０８の各々は、共有ラストレベルキャッシュとしてエンベデッドメモリモジュール２１８を用いる。
【００３９】
一実施形態において、コア２０２Ａ〜Ｎは、同一の命令セットアーキテクチャを実行する同種のコアである。別の実施形態において、コア２０２Ａ〜Ｎは、命令セットアーキテクチャ（ＩＳＡ）の観点からは異種であり、コア２０２Ａ〜Ｎのうちの１または複数は、第１の命令セットを実行するが、複数の他のコアのうちの少なくとも１つは、第１の命令セットまたは異なる命令セットのサブセットを実行する。
【００４０】
プロセッサ２００は、いくつかの処理技術、例えば、相補型金属酸化膜半導体（ＣＭＯＳ）、バイポーラ接合／相補型金属酸化膜半導体（ＢｉＣＭＯＳ）またはＮ型金属酸化膜半導体ロジック（ＮＭＯＳ）のいずれかを用いる、１または複数の基板の一部であるか、またはこれらの上に実装され得る。更に、プロセッサ２００は、複数の他のコンポーネントに加えて、１または複数のチップ上に実装され、または図示される複数のコンポーネントを有するシステムオンチップ（ＳＯＣ）集積回路として実装され得る。
【００４１】
図３は、ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサ３００の一実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上の複数のレジスタにメモリマッピングされたＩ／Ｏインタフェースと、プロセッサメモリ内に置かれる複数のコマンドにより通信される。グラフィックスプロセッサ３００は、メモリにアクセスするためのメモリインタフェース３１４を含む。メモリインタフェース３１４は、ローカルメモリ、１または複数の内部キャッシュ、１または複数の共有外部キャッシュ、および／またはシステムメモリへのインタフェースであり得る。
【００４２】
グラフィックスプロセッサ３００は、ディスプレイ出力データをディスプレイデバイス３２０に駆動するディスプレイコントローラ３０２も含む。ディスプレイコントローラ３０２は、ディスプレイ用の１または複数のオーバーレイ平面のためのハードウェアと、動画またはユーザインタフェース要素の複数の層の構成物とを含む。一実施形態において、グラフィックスプロセッサ３００は、ＭＰＥＧ２のようなムービングピクチャエクスパーツグループ（ＭＰＥＧ）フォーマット、Ｈ．２６４／ＭＰＥＧ４  ＡＶＣのようなアドバンスドビデオコーディング（ＡＶＣ）フォーマット、および米国映画テレビ技術者協会（ＳＭＰＴＥ）４２１Ｍ／ＶＣ−１、ならびにジョイントフォトグラフィックエクスパーツグループ（ＪＰＥＧ）、およびモーションＪＰＥＧ（ＭＪＰＥＧ）フォーマットのようなＪＰＥＧフォーマットを含むがこれらに限定されない、１または複数のメディアエンコードフォーマットへ、これらから、またはこれらの間でメディアをエンコード、デコード、またはトランスコードするビデオコーデックエンジン３０６を含む。
【００４３】
一実施形態において、グラフィックスプロセッサ３００は、例えば、ビット境界ブロック転送を含む、複数の２次元（２Ｄ）ラスタライザオペレーションを実行するブロック画像転送（ＢＬＩＴ）エンジン３０４を含む。しかし、一実施形態において、複数の２Ｄグラフィックスオペレーションは、グラフィックス処理エンジン（ＧＰＥ）３１０の１または複数のコンポーネントを用いて実行される。グラフィックス処理エンジン３１０は、複数の３次元（３Ｄ）グラフィックスオペレーションおよびメディアオペレーションを含む、グラフィックスオペレーションを実行するための演算エンジンである。
【００４４】
ＧＰＥ３１０は、３Ｄプリミティブ図形（例えば、矩形、トライアングル等）に対して機能する複数の処理機能を用いて、複数の３次元画像およびシーンをレンダリングするなど、複数の３Ｄオペレーションを実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内の様々なタスクを実行し、および／または３Ｄ／メディアサブシステム３１５に複数の実行スレッドをスポーン（ｓｐａｗｎ）するプログラミング可能な複数の固定関数要素を含む。３Ｄパイプライン３１２は、複数のメディアオペレーションを実行するべく用いられ得るが、ＧＰＥ３１０の実施形態は、具体的には、動画の後処理および画像強調等の複数のメディアオペレーションを実行するべく用いられるメディアパイプライン３１６も含む。
【００４５】
一実施形態において、メディアパイプライン３１６は、ビデオコーデックエンジン３０６の代替に、またはこれの代わりに動画デコードの加速、動画のインターレース解除、および動画エンコードの加速等、１または複数の専用メディアオペレーションを実行する、固定関数またはプログラミング可能なロジックユニットを含む。一実施形態において、メディアパイプライン３１６は更に、３Ｄ／メディアサブシステム３１５において実行するための複数のスレッドをスポーンする、スレッドスポーンユニットを含む。スポーンされた複数のスレッドは、３Ｄ／メディアサブシステムに含まれる１または複数のグラフィックス実行ユニット上で複数のメディアオペレーションのための演算を実行する。
【００４６】
３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２およびメディアパイプライン３１６によりスポーンされた複数のスレッドを実行するためのロジックを含む。一実施形態において、複数のパイプラインは、複数のスレッド実行要求を３Ｄ／メディアサブシステム３１５に送信する。３Ｄ／メディアサブシステム３１５は、利用可能な複数のスレッド実行リソースに対する様々な要求を調整およびディスパッチするためのスレッドディスパッチロジックを含む。複数の実行リソースは、３Ｄおよびメディアスレッドを処理する複数のグラフィックス実行ユニットのアレイを含む。一実施形態において、３Ｄ／メディアサブシステム３１５は、複数のスレッド命令およびデータのための１または複数の内部キャッシュを含む。一実施形態において、サブシステムは、複数のスレッド間のデータを共有し、出力データを格納する複数のレジスタおよびアドレス指定可能メモリを含む、共有メモリも含む。
【００４７】
［３Ｄ／メディア処理−図４］
図４は、グラフィックスプロセッサ用のグラフィックス処理エンジン４１０の実施形態のブロック図である。一実施形態において、グラフィックス処理エンジン（ＧＰＥ）４１０は、図３に示されるＧＰＥ３１０の１つのバージョンである。ＧＰＥ４１０は、３Ｄパイプライン４１２およびメディアパイプライン４１６を含み、その各々は、図３の３Ｄパイプライン３１２およびメディアパイプライン３１６の実装と異なるか、またはこれに類似するかのいずれかであり得る。
【００４８】
一実施形態において、ＧＰＥ４１０は、コマンドストリーマ４０３と結合し、コマンドストリーマ４０３は、コマンドストリームをＧＰＥ３Ｄパイプライン４１２およびメディアパイプライン４１６に提供する。コマンドストリーマ４０３は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの１または複数であり得るメモリと結合される。コマンドストリーマ４０３は、メモリから複数のコマンドを受信し、これらのコマンドを３Ｄパイプライン４１２および／またはメディアパイプライン４１６に送信する。３Ｄパイプラインおよびメディアパイプラインは、各パイプライン内のロジックによる複数のオペレーションを実行し、または１または複数の実行スレッドを実行ユニットアレイ４１４にディスパッチすることにより、複数のコマンドを処理する。一実施形態において、実行ユニットアレイ４１４はスケーラブルであり、その結果、アレイは、ＧＰＥ４１０のターゲット電力および性能レベルに基づいて変わり得る数の実行ユニットを含む。
【００４９】
サンプリングエンジン４３０は、メモリ（例えば、キャッシュメモリまたはシステムメモリ）および実行ユニットアレイ４１４と結合する。一実施形態において、サンプリングエンジン４３０は、実行ユニットアレイ４１４がグラフィックスおよびメディアデータをメモリから読み取ることを可能にするスケーラブルな実行ユニットアレイ４１４のためのメモリアクセスメカニズムを提供する。一実施形態において、サンプリングエンジン４３０は、メディアに対する複数の専用画像サンプリングオペレーションを実行するロジックを含む。
【００５０】
サンプリングエンジン４３０における専用メディアサンプリングロジックは、ノイズ除去／インターレース解除モジュール４３２、動き推定モジュール４３４、および画像スケーリング・フィルタリングモジュール４３６を含む。ノイズ除去／インターレース解除モジュール４３２は、デコードされる動画データに対してノイズ除去またはインターレース解除アルゴリズムのうちの１または複数を実行するロジックを含む。インターレース解除ロジックは、インターレース済みの動画コンテンツの複数の交互フィールドを組み合わせて単一のフレームの動画にする。ノイズ除去ロジックは、動画および画像データからデータノイズを低減または除去する。一実施形態において、ノイズ除去ロジックおよびインターレース解除ロジックは、動き適応型であり、動画データにおいて検出された動きの量に基づく空間的または時間的フィルタリングを用いる。一実施形態において、ノイズ除去／インターレース解除モジュール４３２は、（例えば、動き推定エンジン４３４内に）専用の動き検出ロジックを含む。
【００５１】
動き推定エンジン４３４は、動きベクトル推定および動画データに関する予測等の複数の動画加速機能を実行することにより、複数の動画オペレーションのためのハードウェアの加速を提供する。動き推定エンジンは、複数の連続的動画フレーム間の画像データ変換を記載する複数の動きベクトルを決定する。一実施形態において、グラフィックスプロセッサのメディアコーデックは、別の場合には汎用プロセッサの使用を実行するべく演算集約的であり得るマクロブロックレベルで動画に複数のオペレーションを実行する、動画動き推定エンジン４３４を用いる。一実施形態において、動き推定エンジン４３４は一般に、動画データ内の動きの方向または大きさに感応性または適応性である動画デコードおよび複数の処理機能を支援するべく、複数のグラフィックスプロセッサコンポーネントに利用可能である。
【００５２】
画像スケーリング・フィルタリングモジュール４３６は、生成される画像および動画の視覚的質を高めるべく複数の画像処理オペレーションを実行する。一実施形態において、画像スケーリング・フィルタリングモジュール４３６は、データを実行ユニットアレイ４１４に提供する前に、サンプリングオペレーション中に画像および動画データを処理する。
【００５３】
一実施形態において、グラフィックス処理エンジン４１０は、データポート４４４を含み、データポート４４４は、メモリにアクセスするために複数のグラフィックスサブシステム用の追加のメカニズムを提供する。データポート４４４は、レンダリングターゲット書き込み、コンスタントバッファ読み取り、スクラッチメモリ空間の読み取り／書き込み、およびメディアサーフェスアクセスを含む複数のオペレーションのためのメモリアクセスを容易にする。一実施形態において、データポート４４４は、メモリへの複数のアクセスをキャッシュするキャッシュメモリ空間を含む。キャッシュメモリは、１つのデータキャッシュであり、またはデータポートを介してメモリにアクセスする複数のサブシステム用の複数のキャッシュ（例えば、レンダリングバッファキャッシュ、コンスタントバッファキャッシュ等）に分離され得る。一実施形態において、実行ユニットアレイ４１４における実行ユニット上で実行される複数のスレッドは、グラフィックス処理エンジン４１０の複数のサブシステムの各々を結合するデータ配信相互接続を介して複数のメッセージを交換することにより、データポートと通信する。
【００５４】
［実行ユニット−図５〜図７］
図５は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、リング相互接続５０２、パイプラインフロントエンド５０４、メディアエンジン５３７、およびグラフィックコア５８０Ａ〜Ｎを含む。リング相互接続５０２は、複数の他のグラフィックスプロセッサ、または１もしくは複数の汎用プロセッサコアを含む複数の他の処理ユニットに、グラフィックスプロセッサを結合する。一実施形態において、グラフィックスプロセッサは、マルチコア処理システム内に統合される多くのプロセッサのうちの１つである。
【００５５】
グラフィックスプロセッサは、リング相互接続５０２を介して複数のコマンドのバッチを受信する。複数の受信コマンドは、パイプラインフロントエンド５０４におけるコマンドストリーマ５０３により変換される。グラフィックスプロセッサは、グラフィックコア５８０Ａ〜Ｎを介して３Ｄジオメトリ処理およびメディア処理を実行する、スケーラブルな実行ロジックを含む。３Ｄジオメトリ処理コマンドについては、コマンドストリーマ５０３は、複数のコマンドをジオメトリパイプライン５３６に提供する。少なくともいくつかのメディア処理コマンドについては、コマンドストリーマ５０３は、複数のコマンドを、メディアエンジン５３７と結合するビデオフロントエンド５３４に提供する。メディアエンジン５３７は、動画および画像の後処理のための動画質エンジン（ＶＱＥ）５３０と、ハードウェアにより加速されるメディアデータのエンコードおよびデコードを提供するマルチフォーマットエンコード／デコード（ＭＦＸ）エンジン５３３とを含む。ジオメトリパイプライン５３６およびメディアエンジン５３７は各々、少なくとも１つのグラフィックコア５８０Ａにより提供されるスレッド実行リソース用の複数の実行スレッドを生成する。
【００５６】
グラフィックスプロセッサは、モジュラコア５８０Ａ〜Ｎ（コアスライスと称される場合がある）を特徴付けるスケーラブルなスレッド実行リソースを含み、各々は、複数のサブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎ（コアサブスライスと称される場合がある）を有する。グラフィックスプロセッサは、任意の数のグラフィックコア５８０Ａ〜５８０Ｎを有し得る。一実施形態において、グラフィックスプロセッサは、少なくとも第１のサブコア５５０Ａおよび第２のサブコア５６０Ａを有するグラフィックコア５８０Ａを含む。別の実施形態において、グラフィックスプロセッサは、１つのサブコア（例えば５５０Ａ）を有する低電力プロセッサである。一実施形態において、グラフィックスプロセッサは、複数のグラフィックコア５８０Ａ〜Ｎを含み、それらの各々は、複数の第１のサブコア５５０Ａ〜Ｎのセットと、複数の第２のサブコア５６０Ａ〜Ｎのセットとを含む。複数の第１のサブコア５５０Ａ〜Ｎのセットにおける各サブコアは、少なくとも複数の実行ユニット５５２Ａ〜Ｎと、複数のメディア／テクスチャサンプラ５５４Ａ〜Ｎとの第１のセットを含む。複数の第２のサブコア５６０Ａ〜Ｎのセットにおける各サブコアは、少なくとも複数の実行ユニット５６２Ａ〜Ｎと、複数サンプラ５６４Ａ〜Ｎとの第２のセットを含む。一実施形態において、各サブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎは、複数の共有リソース５７０Ａ〜Ｎのセットを共有する。一実施形態において、複数の共有リソースは、共有キャッシュメモリおよびピクセルオペレーションロジックを含む。他の複数の共有リソースも、グラフィックスプロセッサの様々な実施形態に含まれてもよい。
【００５７】
図６は、グラフィックス処理エンジンの一実施形態において使用される複数の処理要素のアレイを含む、スレッド実行ロジック６００を図示する。一実施形態において、スレッド実行ロジック６００は、ピクセルシェーダ６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜Ｎを含むスケーラブルな実行ユニットアレイ、サンプラ６１０、データキャッシュ６１２、およびデータポート６１４を含む。一実施形態において、含まれる複数のコンポーネントは、複数のコンポーネントの各々とリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、および実行ユニットアレイ６０８Ａ〜Ｎのうちの１または複数を介して、システムメモリまたはキャッシュメモリのようなメモリへの１または複数の接続を含む。一実施形態において、各実行ユニット（例えば６０８Ａ）は、複数の同時のスレッドを実行してスレッド毎に並行に複数のデータ要素を処理することができる個別のベクトルプロセッサである。実行ユニットアレイ６０８Ａ〜Ｎは、任意の数の個別の実行ユニットを含む。
【００５８】
一実施形態において、実行ユニットアレイ６０８Ａ〜Ｎは主に、「シェーダ」プログラムを実行するべく用いられる。一実施形態において、アレイ６０８Ａ〜Ｎにおける実行ユニットは、多くの標準的３Ｄグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行し、従って複数のグラフィックスライブラリからのシェーダプログラム（例えば、Ｄｉｒｅｃｔ  ３ＤおよびＯｐｅｎＧＬ）は、最小の変換で実行される。複数の実行ユニットは、頂点およびジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）、および汎用処理（例えば、演算およびメディアシェーダ）をサポートする。
【００５９】
実行ユニットアレイ６０８Ａ〜Ｎにおける各実行ユニットは、複数のデータ要素のアレイ上で動作する。データ要素の数は、命令に対する「実行サイズ」またはチャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および複数の命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサに対する物理ＡＬＵまたはＦＰＵの数から独立している場合がある。実行ユニット６０８Ａ〜Ｎは、整数および浮動小数点のデータタイプをサポートする。
【００６０】
実行ユニット命令セットは、複数の単一命令多重データ（ＳＩＭＤ）命令を含む。様々なデータ要素は、パックドデータのタイプとしてレジスタに格納され得、実行ユニットは、複数の要素のデータサイズに基づいて様々な要素を処理する。例えば、２５６ビット幅のベクトル上で動作する場合、ベクトルの２５６ビットは、レジスタに格納され、実行ユニットは、４個の別個の６４ビットパックドデータ要素（クワッドワード（ＱＷ）サイズのデータ要素）、８個の別個の３２ビットパックドデータ要素（ダブルワード（ＤＷ）サイズのデータ要素）、１６個の別個の１６ビットパックドデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２個の別個の８ビットデータ要素（バイト（Ｂ）サイズのデータ要素）としてベクトル上で動作する。しかし、異なる複数のベクトル幅およびレジスタサイズが可能である。
【００６１】
１または複数の内部命令キャッシュ（例えば、６０６）は、スレッド実行ロジック６００に含まれ、実行ユニットのための複数のスレッド命令をキャッシュする。一実施形態において、スレッド実行中にスレッドデータをキャッシュする１または複数のデータキャッシュ（例えば６１２）が含まれる。複数の３Ｄオペレーションのためのテクスチャサンプリングおよび複数のメディアオペレーションのためのメディアサンプリングを提供するサンプラ６１０が含まれる。一実施形態において、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャまたはメディアデータを処理する専用テクスチャまたはメディアサンプリング機能を含む。
【００６２】
実行中に、グラフィックスおよびメディアパイプラインは、スレッドスポーンおよびディスパッチロジックにより複数のスレッド開始要求をスレッド実行ロジック６００に送信する。スレッド実行ロジック６００は、グラフィックスおよびメディアパイプラインからの複数のスレッド開始要求を調整し、１または複数の実行ユニット６０８Ａ〜Ｎ上で要求された複数のスレッドをインスタンス化する、ローカルのスレッドディスパッチャ６０４を含む。例えば、ジオメトリパイプライン（例えば、図５の５３６）は、頂点処理、テセレーション、またはジオメトリ処理のスレッドをスレッド実行ロジック６００にディスパッチする。スレッドディスパッチャ６０４は、実行する複数のシェーダプログラムからのランタイムスレッドスポーン要求も処理し得る。
【００６３】
複数の幾何学的オブジェクトのグループが処理され、ピクセルデータにラスタライズすると、ピクセルシェーダ６０２が呼び出され、更に出力情報を演算することで、結果が出力面に書き込まれる（例えば、色バッファ、デプスバッファ、ステンシルバッファ等）。一実施形態において、ピクセルシェーダ６０２は、ラスタライズされたオブジェクトにわたって補間される様々な頂点アトリビュートの値を算出する。次に、ピクセルシェーダ６０２は、ＡＰＩにより提供されるピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するべく、ピクセルシェーダ６０２は、スレッドディスパッチャ６０４により複数のスレッドを実行ユニット（例えば６０８Ａ）にディスパッチする。ピクセルシェーダ６０２は、メモリに格納された複数のテクスチャマップにおけるテクスチャデータにアクセスするべく、サンプラ６１０におけるテクスチャサンプリングロジックを用いる。テクスチャデータおよび入力ジオメトリデータに対する複数の算術オペレーションは、幾何学フラグメント毎にピクセルカラーデータを演算するか、または１または複数のピクセルを更なる処理から破棄する。
【００６４】
一実施形態において、データポート６１４は、スレッド実行ロジック６００の出力処理されたデータのためのメモリアクセスメカニズムを、グラフィックスプロセッサ出力パイプライン上で処理するためのメモリに提供する。一実施形態において、データポート６１４は、データポートを介するメモリアクセスのためにデータをキャッシュする１または複数のキャッシュメモリ（例えば、データキャッシュ６１２）を含み、またはこれと結合する。
【００６５】
図７は、一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示するブロック図である。一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線で囲まれた複数のボックスは、一般に実行ユニット命令に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数の命令のサブセットのみに含まれる複数のコンポーネントを含む。説明され、図示される命令フォーマットは、命令が処理されると、命令のデコードからもたらされる複数のマイクロオペレーションとは異なり、実行ユニットに提供される複数の命令であるという点で、マクロ命令である。
【００６６】
一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、１２８ビットフォーマット７１０の複数の命令をネイティブにサポートする。６４ビット圧縮命令フォーマット７３０は、選択される命令、命令オプション、およびオペランドの数に基づいていくつかの命令に対して利用可能である。ネイティブな１２８ビットフォーマット７１０は、全ての命令オプションにアクセスを提供するが、いくつかのオプションおよびオペレーションは、６４ビットフォーマット７３０において制限されている。６４ビットフォーマット７３０において利用可能であるネイティブな命令は、実施形態により異なる。一実施形態において、命令は、インデックスフィールド７１３における複数のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、複数のインデックス値に基づいて複数の圧縮テーブルのセットを参照し、１２８ビットフォーマット７１０においてネイティブな命令を再構成するべく、複数の圧縮テーブル出力を用いる。
【００６７】
フォーマット毎に、命令オペコード７１２は、実行ユニットが実行するべきオペレーションを規定する。複数の実行ユニットは、各オペランドの複数のデータ要素にわたって並行に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素または画素を表す各色チャネルにわたって同時の加算オペレーションを実行する。デフォルトで、実行ユニットは、複数のオペランドの全てのデータチャネルにわたって各命令を実行する。命令制御フィールド７１２は、チャネル選択（例えば断定）およびデータチャネルの順序（例えばスウィズル）のような特定の実行オプションに対する制御を可能にする。１２８ビット命令７１０については、実行サイズフィールド７１６は、並行に実行されるデータチャネルの数を制限する。実行サイズフィールド７１６は、６４ビットの圧縮命令フォーマット７３０で用いるために利用可能でない。
【００６８】
いくつかの実行ユニット命令は、２つのソースオペランドｓｒｃ０  ７２０、ｓｒｃ１  ７２２、および１つのデスティネーション７１８を含む、最大３つのオペランドを有する。一実施形態において、複数の実行ユニットは、デュアルのデスティネーション命令をサポートし、デスティネーションのうちの１つが暗示される。複数のデータ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２７２４）を有し得、命令オペコードＪＪ１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡されるイミディエイト（例えば、ハードコードされた）値であり得る。
【００６９】
一実施形態において、複数の命令は、オペコードデコード７４０を単純化するべく、オペコードビットフィールドに基づいてグループ化される。８ビットのオペコードについては、ビット４、５、および６は、実行ユニットがオペコードのタイプを決定することを可能にする。示される厳密なオペコードのグループ化は、例示的なものである。一実施形態において、移動およびロジックオペコードグループ７４２は、データ移動およびロジック命令（例えば、ｍｏｖ、ｃｍｐ）を含む。移動およびロジックグループ７４２は、５つの最も重要なビット（ＭＳＢ）を共有し、移動命令は、００００ｘｘｘｘｂ（例えば、０ｘ０ｘ）の形式であり、ロジック命令は、０００１ｘｘｘｘｂ（例えば、０ｘ０１）の形式である。フロー制御命令グループ７４４（例えば、ｃａｌｌ、ｊｍｐ）は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の複数の命令を含む。その他の命令グループ７４６は、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、ｗａｉｔ、ｓｅｎｄ）を含む、複数の命令のミックスを含む。並列マス命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネント様式の複数の算術命令（例えば、ａｄｄ、ｍｕｌ）を含む。並列マスグループ７４８は、複数のデータチャネルにわたって並行に複数の算術オペレーションを実行する。ベクトルマスグループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の複数の算術命令（例えば、ｄｐ４）を含む。ベクトルマスグループは、点乗積計算のような算術を複数のベクトルオペランドに実行する。
【００７０】
［グラフィックスパイプライン−図８］
図８は、グラフィックスパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、およびレンダリング出力パイプライン８７０を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、１または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、１または複数の制御レジスタ（図示せず）へのレジスタ書き込みにより、またはリング相互接続８０２を介してグラフィックスプロセッサに発行された複数のコマンドにより、制御される。リング相互接続８０２は、他のグラフィックスプロセッサまたは汎用プロセッサ等の複数の他の処理コンポーネントに、グラフィックスプロセッサを結合する。リング相互接続からの複数のコマンドは、グラフィックスパイプライン８２０またはメディアパイプライン８３０の個別のコンポーネントに複数の命令を提供するコマンドストリーマ８０３により、解釈される。
【００７１】
コマンドストリーマ８０３は、頂点データをメモリから読み取り、コマンドストリーマ８０３により提供された複数の頂点処理コマンドを実行する、頂点フェッチャ８０５のコンポーネントのオペレーションを管理する。頂点フェッチャ８０５は、頂点データを頂点シェーダ８０７に提供し、頂点シェーダ８０７は、座標空間変換および複数のライティング（ｌｉｇｈｔｉｎｇ）オペレーションを各頂点に実行する。頂点フェッチャ８０５および頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して複数の実行スレッドを実行ユニット８５２Ａ、８５２Ｂにディスパッチすることにより、複数の頂点処理命令を実行する。
【００７２】
一実施形態において、実行ユニット８５２Ａ、８５２Ｂは、グラフィックスおよびメディアオペレーションを実行するための命令セットを有する複数のベクトルプロセッサのアレイである。実行ユニット８５２Ａ、８５２Ｂは、各アレイに固有であるか、または複数のアレイ間で共有される取り付け済みのＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
【００７３】
一実施形態において、グラフィックスパイプライン８２０は、複数の３Ｄオブジェクトのハードウェア加速テセレーションを実行する複数のテセレーションコンポーネントを含む。プログラミング可能なハルシェーダ８１１は、複数のテセレーションオペレーションを構成する。プログラミング可能なドメインシェーダ８１７は、テセレーション出力のバックエンド評価を提供する。テセレータ８１３は、ハルシェーダ８１１の指示で動作し、入力としてグラフィックスパイプライン８２０に提供される粗幾何学モデルに基づいて、詳細な複数の幾何学的オブジェクトのセットを生成する専用ロジックを含む。テセレーションが用いられない場合、テセレーションコンポーネント８１１、８１３、８１７は、バイパスされ得る。
【００７４】
完全な複数の幾何学的オブジェクトは、実行ユニット８５２Ａ、８５２Ｂにディスパッチされる１または複数のスレッドを通じてジオメトリシェーダ８１９により処理され得、またはクリッパ８２９に直接に進み得る。ジオメトリシェーダは、グラフィックスパイプラインの先行する複数の段階におけるような複数の頂点または頂点のパッチよりはむしろ、複数の幾何学的オブジェクト全体で動作する。テセレーションが無効にされると、ジオメトリシェーダ８１９は、入力を頂点シェーダ８０７から受信する。ジオメトリシェーダ８１９は、複数のテセレーションユニットが無効にされる場合、ジオメトリテセレーションを実行するように、ジオメトリシェーダプログラムによりプログラミング可能である。
【００７５】
ラスタライズする前に、頂点データは、クリッパ８２９により処理される。クリッパ８２９は、固定関数クリッパ、またはクリッピングおよびジオメトリシェーダ関数を有するプログラミング可能なクリッパのいずれかである。一実施形態において、レンダリング出力パイプライン８７０におけるラスタライザ８７３は、複数のピクセルシェーダをディスパッチして、複数の幾何学的オブジェクトをそれらの１ピクセル毎の表現に変換する。一実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック８５０に含まれる。
【００７６】
グラフィックスエンジンは、データおよびメッセージがグラフィックスエンジンの複数の主要コンポーネント間を通ることを可能にする相互接続バス、相互接続ファブリック、またはいくつかの他の相互接続メカニズムを有する。一実施形態において、実行ユニット８５２Ａ、８５２Ｂおよび関連付けられるキャッシュ８５１、テクスチャおよびメディアサンプラ８５４、ならびにテクスチャ／サンプラキャッシュ８５８は、データポート８５６を介して相互接続し、メモリアクセスを実行し、グラフィックスエンジンの複数のレンダリング出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ８５４、キャッシュ８５１、８５８、および実行ユニット８５２Ａ、８５２Ｂは各々、別個のメモリアクセスパスを有する。
【００７７】
一実施形態において、レンダリング出力パイプライン８７０は、頂点ベースの複数のオブジェクトをそれらの関連付けられるピクセルベースの表現に変換する、ラスタライザおよびデプステストコンポーネント８７３を含む。一実施形態において、ラスタライザロジックは、固定関数トライアングルおよびラインラスタライズを実行するウィンドウア（ｗｉｎｄｏｗｅｒ）／マスカ（ｍａｓｋｅｒ）ユニットを含む。一実施形態において、関連付けられたレンダリングバッファキャッシュ８７８およびデプスバッファキャッシュ８７９も利用可能である。ピクセルオペレーションコンポーネント８７７は、ピクセルベースの複数のオペレーションをデータに実行するが、いくつかの例において、２Ｄオペレーション（例えば、ブレンドを用いるビットブロック画像転送）に関連付けられるピクセルオペレーションは、２Ｄエンジン８４１により実行され、またはオーバーレイディスプレイ平面を用いるディスプレイコントローラ８４３により表示時間に代用される。一実施形態において、共有Ｌ３キャッシュ８７５は、全てのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを用いることなくデータの共有を可能にする。
【００７８】
グラフィックスプロセッサのメディアパイプライン８３０は、メディアエンジン８３７およびビデオフロントエンド８３４を含む。一実施形態において、ビデオフロントエンド８３４は、複数のパイプラインコマンドをコマンドストリーマ８０３から受信する。しかし、一実施形態において、メディアパイプライン８３０は、別個のコマンドストリーマを含む。ビデオフロントエンド８３４は、コマンドをメディアエンジン８３７に送信する前に、複数のメディアコマンドを処理する。一実施形態において、メディアエンジンは、スレッドディスパッチャ８３１を通じてスレッド実行ロジック８５０にディスパッチするための複数のスレッドをスポーンする、スレッドスポーン機能を含む。
【００７９】
一実施形態において、グラフィックスエンジンは、ディスプレイエンジン８４０を含む。一実施形態において、ディスプレイエンジン８４０は、グラフィックスプロセッサの外部にあり、リング相互接続８０２またはいくつかの他の相互接続バスもしくはファブリックを介してグラフィックスプロセッサと結合する。ディスプレイエンジン８４０は、２Ｄエンジン８４１およびディスプレイコントローラ８４３を含む。ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することができる専用ロジックを含む。ディスプレイコントローラ８４３は、ディスプレイデバイス（図示せず）と結合する。ディスプレイデバイスは、ラップトップコンピュータにおけるようなシステム統合ディスプレイデバイスまたはディスプレイデバイスコネクタにより取り付けられる外部ディスプレイデバイスであってもよい。
【００８０】
グラフィックスパイプライン８２０およびメディアパイプライン８３０は、複数のグラフィックスおよびメディアプログラミングインタフェースに基づいて複数のオペレーションを実行するように構成可能であり、いずれか１つのアプリケーションプログラミングインタフェース（ＡＰＩ）に固有のものではない。一実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに固有のＡＰＩ呼び出しを、グラフィックスプロセッサにより処理され得る複数のコマンドに変換する。様々な実施形態において、サポートは、クロノスグループによりサポートされるオープングラフィックスライブラリ（ＯｐｅｎＧＬ）およびオープンコンピューティング言語（ＯｐｅｎＣＬ）、マイクロソフトコーポレーションのＤｉｒｅｃｔ３Ｄライブラリ、または一実施形態においてはＯｐｅｎＧＬおよびＤｉｒｅｃｔ３Ｄの両方に提供される。サポートは、オープンソースコンピュータビジョンライブラリ（ＯｐｅｎＣＶ）にも提供され得る。将来のＡＰＩのパイプラインからグラフィックスプロセッサのパイプラインにマッピングが行われ得る場合には、互換性のある３Ｄパイプラインを用いる将来のＡＰＩも、サポートされるであろう。
【００８１】
［グラフィックスパイプラインのプログラミング−図９Ａ〜図９Ｂ］
図９Ａは、一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図であり、図９Ｂは、一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。図９Ａにおける実線で囲まれた複数のボックスは、グラフィックスコマンドに一般に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数のグラフィックスコマンドのサブセットのみに含まれる複数のコンポーネントを含む。図９Ａの例示的なグラフィックスプロセッサコマンドフォーマット９００は、コマンドのターゲットクライアント９０２、コマンドオペレーションコード（オペコード）９０４、およびコマンドのための関連するデータ９０６を識別する複数のデータフィールドを含む。サブオペコード９０５およびコマンドサイズ９０８もいくつかのコマンドに含まれる。
【００８２】
クライアント９０２は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けて、コマンドデータを適切なクライアントユニットにルーティングするべく、各コマンドのクライアントフィールドを検査する。一実施形態において、グラフィックスプロセッサの複数のクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、２Ｄユニット、３Ｄユニット、およびメディアユニットを含む。各クライアントユニットは、複数のコマンドを処理する、対応する処理パイプラインを有する。クライアントユニットによりコマンドが受信されると、クライアントユニットは、オペコード９０４を読み取り、存在する場合には、サブオペコード９０５は、実行するオペレーションを決定する。クライアントユニットは、コマンドのデータ９０６のフィールドにおける情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ９０８は、コマンドのサイズを指定することが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて複数のコマンドの少なくともいくつかのサイズを自動的に決定する。一実施形態において、複数のコマンドは、ダブルワードの倍数によりアラインされる。
【００８３】
図９Ｂのフロー図は、例示のコマンドシーケンス９１０を示す。一実施形態において、グラフィックスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、複数のグラフィックスオペレーションのセットを設定、実行、および終了するように示されたコマンドシーケンスのバージョンを用いる。例示的目的で例示のコマンドシーケンスが示され、説明されている。しかし、複数の実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。更に、これらのコマンドは、コマンドシーケンスにおける複数のコマンドのバッチとして発行されてもよく、従ってグラフィックスプロセッサは、少なくとも部分的に同時に複数のコマンドのシーケンスを処理する。
【００８４】
例示のコマンドシーケンス９１０は、パイプラインフラッシュコマンド９１２で開始し、任意のアクティブなグラフィックスパイプラインにパイプライン用の現在保留中の複数のコマンドを完了させ得る。一実施形態において、３Ｄパイプライン９２２およびメディアパイプライン９２４は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるべく実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな複数の描画エンジンが保留中の複数のオペレーションを完了し、関連する複数の読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択で、「ダーティ」とマークを付けられたレンダリングキャッシュ内の任意のデータは、メモリにフラッシュされ得る。パイプラインフラッシュコマンド９１２は、パイプライン同期のために、つまりグラフィックスプロセッサを低電力状態にする前に用いられ得る。
【００８５】
パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックスプロセッサに複数のパイプライン間で明確に切り替えるように要求するときに用いられる。パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインのためのコマンドを発行しない限り、パイプラインコマンドを発行する前に実行コンテキスト内で１度だけ必要とされる。一実施形態において、パイプラインフラッシュコマンド９１２は、パイプラインがパイプライン選択コマンド９１３により切り替えられる直前に必要とされる。
【００８６】
パイプライン制御コマンド９１４は、オペレーションのためのグラフィックスパイプラインを構成し、３Ｄパイプライン９２２およびメディアパイプライン９２４をプログラミングするべく用いられる。パイプライン制御コマンド９１４は、アクティブなパイプラインのためのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド９１４は、複数のコマンドのバッチを処理する前に、アクティブなパイプライン内の１または複数のキャッシュメモリからのデータをクリアするべく、パイプライン同期に用いられる。
【００８７】
複数のリターンバッファ状態コマンド９１６は、データを書き込む各パイプライン用の複数のリターンバッファのセットを構成するべく用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む、１または複数のリターンバッファの割り当て、選択、または構成を必要とする。また、グラフィックスプロセッサは、出力データを格納して相互のスレッド通信を実行するべく、１または複数のリターンバッファも用いる。リターンバッファ状態９１６は、複数のパイプラインオペレーションのセットに用いる複数のリターンバッファのサイズおよび数の選択を含む。
【００８８】
コマンドシーケンスにおける残りの複数のコマンドは、複数のオペレーション用のアクティブなパイプラインに基づいて異なる。パイプラインの決定９２０に基づいて、コマンドシーケンスは、３Ｄパイプライン状態９３０で開始する３Ｄパイプライン９２２、またはメディアパイプライン状態９４０で開始するメディアパイプライン９２４に対して調整される。
【００８９】
３Ｄパイプライン状態９３０のための複数のコマンドは、３Ｄプリミティブコマンドが処理される前に構成される頂点バッファ状態、頂点要素状態、一定な色状態、デプスバッファ状態、および他の状態変数に対する複数の３Ｄ状態設定コマンドを含む。これらのコマンドの値は、用いられる特定の３Ｄ  ＡＰＩに少なくとも部分的に基づいて決定される。それらの要素が用いられない場合、複数の３Ｄパイプライン状態９３０コマンドは、特定のパイプライン要素を選択的に無効またはバイパスすることもできる。
【００９０】
３Ｄプリミティブ９３２のコマンドは、３Ｄパイプラインにより処理される複数の３Ｄプリミティブを送るべく用いられる。３Ｄプリミティブ９３２のコマンドによりグラフィックスプロセッサに渡される複数のコマンドおよび関連付けられるパラメータは、グラフィックスパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、複数の頂点データ構造体を生成するべく３Ｄプリミティブ９３２のコマンドデータを用いる。複数の頂点データ構造体は、１または複数のリターンバッファに格納される。３Ｄプリミティブ９３２のコマンドは、複数の頂点シェーダにより複数の３Ｄプリミティブに頂点オペレーションを実行するべく用いられる。複数の頂点シェーダを処理するべく、３Ｄパイプライン９２２は、複数のシェーダ実行スレッドを複数のグラフィックスプロセッサ実行ユニットにディスパッチする。
【００９１】
３Ｄパイプライン９２２は、実行９３４のコマンドまたはイベントによりトリガされる。一実施形態において、レジスタ書き込みは、コマンド実行をトリガする。一実施形態において、実行は、コマンドシーケンスにおける「ｇｏ」または「ｋｉｃｋ」コマンドによりトリガされる。一実施形態において、パイプライン同期コマンドを用いて、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュするコマンド実行がトリガされる。３Ｄパイプラインは、複数の３Ｄプリミティブのためのジオメトリ処理を実行する。複数のオペレーションが完了すると、もたらされる複数の幾何学的オブジェクトがラスタライズされ、ピクセルエンジンは、もたらされるピクセルをカラーリングする。ピクセルシェーディングおよびピクセルバックエンドオペレーションを制御する追加の複数のコマンドもそれらのオペレーションのために含まれ得る。
【００９２】
例示のコマンドシーケンス９１０は、複数のメディアオペレーションを実行する場合、メディアパイプライン９２４のパスをたどる。一般に、メディアパイプライン９２４のためのプログラミングの特定の用途および態様は、メディアまたは実行される演算動作に依存する。特定のメディアデコードオペレーションは、メディアデコード中にメディアパイプラインにオフロードされ得る。メディアパイプラインもバイパスされ得、メディアデコードは、１または複数の汎用プロセッシングコアにより提供される複数のリソースを全体的または部分的に用いて実行され得る。一実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット（ＧＰＧＰＵ）の動作のための複数の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明らかに関係しない演算シェーダプログラムを用いてＳＩＭＤベクトルオペレーションを実行するべく用いられる。
【００９３】
メディアパイプライン９２４は、３Ｄパイプライン９２２と同様に構成される。複数のメディアパイプライン状態コマンド９４０のセットは、複数のメディアオブジェクトコマンド９４２の前のコマンド行列にディスパッチされ、または配置される。複数のメディアパイプライン状態コマンド９４０は、複数のメディアオブジェクトを処理するべく用いられる、複数のメディアパイプライン要素を構成するデータを含む。これは、エンコードまたはデコードフォーマットのようなメディアパイプライン内の動画デコードおよび動画エンコードロジックを構成するデータを含む。複数のメディアパイプライン状態コマンド９４０は、複数の状態設定のバッチを含む「間接的」状態要素に対する１または複数のポインタの使用もサポートする。
【００９４】
複数のメディアオブジェクトコマンド９４２は、メディアパイプラインにより処理するための複数のメディアオブジェクトに複数のポインタを提供する。複数のメディアオブジェクトは、処理されるべき動画データを含む複数のメモリバッファを含む。一実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド９４２を発行する前に有効でなければならない。パイプライン状態が構成され、複数のメディアオブジェクトコマンド９４２が待ち行列に入れられると、メディアパイプライン９２４は、実行９４４のコマンドまたは同等の実行イベント（例えばレジスタ書き込み）によりトリガされる。次に、メディアパイプライン９２４からの出力は、３Ｄパイプライン９２２またはメディアパイプライン９２４により提供される複数のオペレーションにより後処理され得る。一実施形態において、複数のＧＰＧＰＵオペレーションは、メディアオペレーションと同様に構成され、実行される。
【００９５】
［グラフィックスソフトウェアアーキテクチャ−図１０］
図１０は、一実施形態によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。ソフトウェアアーキテクチャは、３Ｄグラフィックスアプリケーション１０１０、オペレーティングシステム１０２０、および少なくとも１つのプロセッサ１０３０を含む。プロセッサ１０３０は、グラフィックスプロセッサ１０３２、および１または複数の汎用プロセッサコア１０３４を含む。グラフィックスアプリケーション１０１０およびオペレーティングシステム１０２０は各々、データ処理システムのシステムメモリ１０５０において実行される。
【００９６】
一実施形態において、３Ｄグラフィックスアプリケーション１０１０は、複数のシェーダ命令１０１２を含む、１または複数のシェーダプログラムを含む。複数のシェーダ言語命令は、高水準シェーダ言語（ＨＬＳＬ）またはＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）のような高水準シェーダ言語によるものであってもよい。アプリケーションは、汎用プロセッサコア１０３４により実行するのに好適な機械言語による複数の実行可能命令１０１４も含む。アプリケーションは、頂点データにより定義される複数のグラフィックスオブジェクト１０１６も含む。
【００９７】
オペレーティングシステム１０２０は、マイクロソフトコーポレーションのマイクロソフトウィンドウズ（登録商標）オペレーティングシステム、プロプライエタリＵＮＩＸ（登録商標）様式のオペレーティングシステム、またはＬｉｎｕｘ（登録商標）カーネルの変形を用いるオープンソースＵＮＩＸ（登録商標）様式のオペレーティングシステムであってもよい。Ｄｉｒｅｃｔ３Ｄ  ＡＰＩが用いられる場合、オペレーティングシステム１０２０は、フロントエンドのシェーダコンパイラ１０２４を用いて、ＨＬＳＬの任意のシェーダ命令１０１２をより低水準のシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルであってもよく、またはアプリケーションは、共有プリコンパイルを実行し得る。一実施形態において、複数の高水準シェーダは、３Ｄグラフィックスアプリケーション１０１０のコンパイル中により低水準のシェーダへとコンパイルされる。
【００９８】
ユーザモードグラフィックスドライバ１０２６は、複数のシェーダ命令１０１２をハードウェア固有の表現に変換する、バックエンドのシェーダコンパイラ１０２７を含んでもよい。ＯｐｅｎＧＬ  ＡＰＩが用いられる場合、ＧＬＳＬ高水準言語のシェーダ命令１０１２は、コンパイルのためにユーザモードグラフィックスドライバ１０２６に渡される。ユーザモードグラフィックスドライバは、カーネルモードグラフィックスドライバ１０２９と通信するべく、オペレーティングシステムカーネルモード機能１０２８を用いる。カーネルモードグラフィックスドライバ１０２９は、複数のコマンドおよび命令をディスパッチするべく、グラフィックスプロセッサ１０３２と通信する。
【００９９】
様々なオペレーションまたは機能が本明細書において説明される限度において、それらはハードウェア回路、ソフトウェアコード、命令、構成、および／またはデータとして説明または定義され得る。コンテンツは、ハードウェアロジックで、または直接に実行可能なソフトウェア（「オブジェクト、または「実行可能な」形式）、ソースコード、グラフィックスエンジン上での実行のために設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックコア用の命令セットによる低水準アセンブリ言語コードとして実施され得る。本明細書に説明される複数の実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品、または通信インタフェースを介してデータを送信するように通信インタフェースを動作させる方法により提供され得る。
【０１００】
非一時的機械可読ストレージ媒体は、機械に、説明される複数の機能またはオペレーションを実行させ得、記録可能／非記録可能媒体（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等）のような機械（例えば、コンピューティングデバイス、電子システム等）によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インタフェースは、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラ等のような別のデバイスに通信するハードワイヤード、無線、光等の媒体のいずれかにインタフェース接続する任意のメカニズムを含む。通信インタフェースは、複数の構成パラメータを提供し、または通信インタフェースを準備して、ソフトウェアコンテンツを記載するデータ信号を提供するべく複数の信号を送信することにより構成される。通信インタフェースは、通信インタフェースに送信される１または複数のコマンドまたは信号によりアクセスされ得る。
【０１０１】
説明される様々なコンポーネントは、説明される動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。複数のコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）等）、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。本明細書において説明されるもの以外に、その範囲を逸脱することなく、本発明において開示される実施形態および実装に対して様々な修正が行われ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲は、以下の特許請求の範囲を参照することのみにより判断されるべきである。
【０１０２】
フィルタリングされた粗ピクセルシェーディングのための方法および装置
１．概要
後述の本発明の複数の実施形態は、複数のラスタライズベースのグラフィックスパイプラインにおける粗ピクセルシェーディング（ＣＰＳ）に関係するシェーディングの連続性の問題に対処する。例えば、一致しない複数のテクスチャデリバティブは、詳細のテクスチャレベルにおける突然の変化を引き起こす場合がある。このアーチファクトが、１トライアングル毎の複数のシェーダアトリビュートデリバティブを用いるラスタライズベースの複数のパイプラインに本来的に存在していると判断されたが、それは、画質に著しく影響を及ぼしてはいない。しかし、粗いシェーディングレートにより、この影響は、著しいアーチファクトを生成し得る。
【０１０３】
この問題に対処するべく、本発明の一実施形態は、ラスタライズの前にメッシュを前処理し、頂点毎に所望の滑らかな頂点アトリビュートのユニークな接平面パラメータ化を生成する。これらの実施形態は、同一のメッシュの同一の頂点を共有する全てのトライアングルが同一のデリバティブを用いることを保証する接平面パラメータ化に基づいて複数の分析シェーダデリバティブを置換する。
【０１０４】
隣接プリミティブが同一の位置でシェーディングを評価する（および外挿を避ける）ことを保証する複数の技術と組み合わせて用いられる場合に、本発明の複数の実施形態は、極めて粗いシェーディングレート（例えば、４×４または８×８のピクセルブロック）においてさえも、テクスチャリングされた表面が完全に連続して現れることを保証する。これは、滑らかな表面が限定された多角形の数で近似される場合に有用である。
【０１０５】
簡潔には、本発明の複数の実施形態は、粗ピクセルシェーディング（ＣＰＳ）の質および／または効率性を改善する以下の複数の技術を含む。
（ａ）複数の外挿アーチファクトを避け、一致する位置で複数の共有トライアングルエッジを補間する、シェーディング空間の代替的なサンプリングパターンが実装される。
（ｂ）高次フィルタリングロジックは、複数の粗いシェーディングサンプルのための線形（またはより高次の）フィルタリングを実装する。
（ｃ）画像処理における六角グリッドの成功に動機づけられて、直交グリッドに類似するクリッピングおよびフィルタリングソリューションをサポートする六角形の実装が後述される。以下に検討されるように、粗いシェーディングレートにおいては、六角形の実装は、ほとんどの場合によりシャープに見える複数の画像を生成する。
（ｄ）シェーディングは、複数のプリミティブにわたって再利用され、小さいトライアングルサイズで顕著な性能向上をもたらし得る。複数のプリミティブクラスタは、オンチップでカバレッジテストおよび複数のプリミティブのシェーディングアトリビュート補間を効率的にするべく、ラスタライズの前に構築され得る。
【０１０６】
図１１は、本発明の複数の実施形態が使用され得るグラフィックスパイプラインの概要を提供する。本実施形態において、プロセッサコア１１００内の実行ロジックは、複数のグラフィックスコマンドおよびジオメトリデータをグラフィックスパイプラインに送信する。（図示される例において）グラフィックスパイプラインは、前処理ステージ１１０１、頂点シェーダステージ１１０２、ジオメトリシェーダステージ１１０３、およびピクセルシェーダステージ１１０４を含む。
【０１０７】
以下に詳細に検討されるように、前処理ステージ１１０１は、頂点毎に複数の近隣トライアングルを収集し、これらのトライアングルにわたって反復し、各頂点に対する複数の線形アトリビュート方程式を実行する等のような複数のオペレーションを実行し得る。
【０１０８】
簡潔に言えば、頂点シェーダ１１０２は、座標空間変換およびライティングオペレーションを各頂点に対して実行し得る。例えば、頂点シェーダ１１０２は、仮想空間における各頂点の３Ｄ位置を、２Ｄ座標に変換し得、この２Ｄ座標で各頂点がスクリーンに現れる。複数の頂点シェーダは、位置、色、およびテクスチャ座標等の複数の特性を操作し得る。一実施形態において、頂点シェーダ１１０２は、１頂点毎の接平面方程式を設定する等、本発明の複数の実施形態に関係する複数の動作を実行するためのロジック１１０５ａも含む（例えば、以下のスムーズテクスチャデリバティブの節を参照されたい）。
【０１０９】
ジオメトリシェーダ１１０３は、頂点シェーダ１１０２の複数の結果（例えば、場合によって隣接情報を有するプリミティブ）を受信し、点、線、およびトライアングルのような新しい複数のグラフィックスプリミティブを生成する。例えば、複数のトライアングルについて作用する場合、ジオメトリシェーダは、３つの頂点を入力として受信する。次に、ジオメトリシェーダは、ラスタライザ／ピクセルシェーダステージ１１０４に渡されるゼロまたはそれより多いプリミティブ（例えば、トライアングル）を生成し、次に放射し得る。ジオメトリシェーダの通常の使用は、ポイントスプライトの生成、ジオメトリテセレーションシャドウ、およびシャドウボリュームの浮き出しを含む。ジオメトリシェーダ１１０３は、補間を用いることなく複数の１頂点毎の接平面方程式をピクセルシェーダに提供する等、本発明の複数の実施形態に関係する複数の動作を実行するためのロジック１１０５ｂも含む。
【０１１０】
ピクセルシェーダステージ１１０４は、複数のトライアングル（またはジオメトリシェーダにより提供される他のもの）を複数のピクセルブロックを含むフラグメントに分割する。例えば、実装に応じて、複数のフラグメントは、２×２のピクセルブロック、４×４のピクセルブロック、８×８のピクセルブロック等を含み得る。ピクセルシェーダステージ１１０４は、デプステストも実行し得る。デプステストを合格した複数のフラグメントは、スクリーンに書き込まれ、または（例えば、フレームバッファにおいて）既存の複数のピクセルとブレンドされてもよい。更に、ピクセルシェーダ１１０４は、複数の動作の中でも特に、複数の頂点接平面に応じて複数の結果を生成することと、重心座標を用いて複数の結果を補間することとを含む、以下に検討される様々な動作を実行するためのロジック１１０５ｃを含む。
【０１１１】
様々な追加の／他のグラフィックスパイプラインステージも用いられてもよい。これらは、本発明の基礎となる原理を不明瞭にすることを避けるために、ここには図示されない。
【０１１２】
一時的に図１１に戻ると、頂点シェーダ１１０２、ジオメトリシェーダ１１０３、およびピクセルシェーダ１１０４（ならびにパイプラインのその他のコンポーネント）は、複数の実行ユニット１１１１〜１１１８を使用して、それらの各機能を実行し得る。具体的には、これらのコンポーネントの各々からの複数のスレッドは、スケジューラ／ディスパッチユニット１１０６による実行のためにスケジューリングされ、ディスパッチされ得る。複数のグラフィックス命令は、図示されるように、１または複数の実行ポートを介して実行ユニット１１１１〜１１１８にディスパッチされ得る。実行が完了すると、リタイアメントユニット１１１９は、命令をリタイアし、いくつかの場合にライトバックバスを介してスケジューリング／ディスパッチユニットに複数の結果を再度提供する。
【０１１３】
１または複数のポストピクセルシェーダステージ１１２０は、ディスプレイデバイスにおけるレンダリングの前に複数のピクセルを更に処理するようにも実装されてもよい。限定ではなく例として、これは、ラスタライザ／ピクセルシェーダにより実行されない最終色選択および他のピクセル処理オペレーションを含み得る。
【０１１４】
以下の節は、本発明の複数の実施形態による、粗ピクセルシェーディング（ＣＰＳ）を改善するべく実行される複数の動作の更なる詳細を提供する。しかし、以下に提供される具体的な詳細のうちのいくつかは、本発明の基礎となる原理に準拠するのに必要とされないことに留意されたい。
【０１１５】
２．外挿を用いない粗いシェーディング
一実施形態において、本節で説明される複数の動作は、ピクセルシェーダステージ１１０４内のロジック１１０５ｃにより実装される。本発明の一実施形態は、１トライアングル毎の複数の平面方程式を用いて、シェーディングのために複数のトライアングルアトリビュートを補間する。マルチサンプルアンチエイリアシング（ＭＳＡＡ）の出現により、シェーディング位置がトライアングルにより実際にはカバーされないことが可能性があり、これは、シェーディング位置が外挿されることを意味する。この外挿は、同一のシェーディング位置を実際にカバーする隣接トライアングルが類似の平面方程式を有するときに、許容できる場合がある。しかし、この場合でないとき、外挿は、表面にわって複数の切れ目を生成するであろう。また、複数のシェーダは、トライアングルによりカバーされない複数のテクスチャ座標を読み取る可能性があり、これによりシルエットにおけるテクスチャリークの問題を生じさせ得る。これらのアーチファクトは一般に、ＭＳＡＡについては許容できるが、粗いシェーディングピクセルについてはより顕著になる。
【０１１６】
本検討の第１部においては、シェーディングの再利用は、現行のＣＰＳの解像度に応じて単一のトライアングル内に限定されるものと仮定される。粗いシェーディングサンプルのための線形の（またはより高次の）フィルタリングは、複数のトライアングルのエッジがシェーディング空間においてサンプリングされ、複数の隣接トライアングルが共通エッジにおいて同一のシェーディング位置を用いる場合には、エッジにおいて複数の切れ目なしで機能し得る。これを前提として、この特性を用いるシェーディングパラメータ化が選択される。以下のオプションが考慮されている。
（ａ）複数の標準グリッドサンプルを複数のトライアングルエッジにスナップする。
（ｂ）複数のトライアングルエッジと一致する複数の標準グリッドセルをクリッピングする。
（ｃ）重心パラメータ化を用いる。
【０１１７】
図１２Ａに図示されるように、元のＣＰＳは、スクリーン空間を標準グリッド上にサンプリングする。各セルの中央部は、重心座標から補間される（外挿される場合もある）。次に、シェーディングピクセルの複数のクワッドにおいて、シェーディングが評価される。最終的に、各可視性サンプルは、４つの最近傍シェーディングピクセルを見つけ、バイリニア補間を用いてその色を補間する。図１２Ａに示されるように、バイリニア補間は、トライアングルにより直接にカバーされない複数の粗ピクセルのシェーディングを必要とし、外挿の問題（白ピクセルにおける赤いシェーディングサンプル）を増幅する。
【０１１８】
図１２Ｂに図示されるように、スクリーン空間のシェーディンググリッドにおける複数の外挿アーチファクトを避ける１つの態様は、複数の外部シェーディングサンプルをトライアングルの境界にスナップすることである。このアプローチは、複数のシェーディングサンプルの重心座標を非ネガティブの領域にクランプすることにより実現され得る。しかし、そのようなアプローチは、複数の品質問題を被る。第１に、複数の隣接トライアングルは、同一の位置で自らの共有エッジをサンプリングせず、これにより複数の切れ目をもたらす。第２に、シェーディングサンプルの位置は変更し得るので、複数の可視性サンプルにおいてシェーディングされた色のフィルタリングは、取るに足らないものではない。
【０１１９】
複数の重心パラメータ化は、ここでは詳細に検討されない。その主な考えは、トライアングル領域におけるシェーディンググリッドを画定することであり、これによりトライアングルエッジ上のサンプル配置を保証する。複数のサンプルは、投影後のスクリーン空間またはオブジェクト空間のいずれかに均一に配置され得る。１つの動機は、メッシュカラーのような設定のないメッシュテクスチャリング法である。この考えに関する１つの主要な問題は、トライアングル領域内部、特に「やせた」トライアングルの場合に実際のシェーディング密度を制御することは取るに足らないものではないことである。
【０１２０】
図１２Ｃを参照すると、本発明の一実施形態において、複数のシェーディングサンプルは、シェーディンググリッドの複数の頂点にシフトされる。これにより、サンプルの数を変化しない状態にし、もたらされるシェーディングは、完全にカバーされる複数のシェーディングピクセルにおいてＣＰＳと同等である。しかし、一実施形態において、複数のトライアングルの頂点から複数のアトリビュートを直接に補間することに代えて、高速で小さい２Ｄのクリッピングが、トライアングルに対してシェーディングピクセル毎に実行される。その結果は、部分的にカバーされた複数のシェーディングピクセルであり、カバーされた（有効な）シェーディング範囲は、凸多角形である。この多角形の複数の頂点は、シェーディングセルの複数の側面、または複数のエッジ付近のシェーディング密度を高めるトライアングルの複数の頂点のいずれかにある。しかし、以前にポイントサンプリングが用いられなかった場合、標準的ＣＰＳは、トライアングル境界外で追加の複数のシェーディングサンプルも用いたことに留意することが重要である。結果的に、シェーディングサンプルの合計の数は、外挿の場合におけるよりも少なくなる場合さえもあろう。
【０１２１】
複数のシェーディングサンプルを評価した後、それらは、クリッピングされた各セルに対する凸多角形を形成する（０、または３〜７の頂点）。次に、各可視性サンプルの最終色は、シェーディング多角形の複数の頂点の加重和として演算される。一実施形態において、これらの重みは、一般化された重心座標を用いて決定され、重心座標は、任意の凸多角形にわたって容易に画定され得る（例えば、「Ｍｅｙｅｒら、２００２」において説明されるＷａｃｈｓｐｒｅｓｓ座標を参照）。これらの座標は、正常に動作する。シェーディングピクセルが完全にカバーされる場合、座標は、バイリニア加重値に等しく、シェーディング多角形がトライアングルである場合、結果は、通常の重心座標である。
【０１２２】
２．１  より高次のフィルタリング
一実施形態において、本節で説明される複数の動作は、ピクセルシェーダステージ１１０４内のロジック１１０５ｃにより実行される。粗ピクセルシェーディング（ＣＰＳ）は、倍率の問題とみなされ得る。トライアングルの表面シェーディングは、ほぼどこでも連続する信号である（可視性が、シルエットおよびハードシャドウのような突然の複数の切れ目を生成する場合を除く）。粗いシェーディンググリッドにおいてこの信号をサンプリングする場合、テクスチャエイリアシングを避けるべく、適切なプリフィルタが適用され得る。最終段階において、粗いシェーディンググリッドは、複数の可視性サンプルの位置でアップサンプリングされ、これは、画像の倍率に類似する。
【０１２３】
結果的に、倍率のレベルが顕著である場合には、質の複数の結果は、最近傍またはバイリニアフィルタリングのような単純な複数の再構成フィルタから予期することができない。比較として、現在シェーディングされる複数のクワッドの周囲でシェーディングサンプルの１つの追加のリングを用い、バイキュービックスプライン補間を用いる各ピクセルにおいてフィルタリングされた色を評価する、より高次の再構成フィルタが実装される。
【０１２４】
２．２  六角グリッドにおけるシェーディング
本節で説明される複数の動作は、ピクセルシェーダステージ１１０４内のロジック１１０５ｃにより実行され得る。一実施形態において、粗いシェーディング空間は、通常の直交グリッドに代えて六角グリッドにおいてサンプリングされる。現行の複数のディスプレイがこのパターンでピクセルを配置することを考慮すると、複数の直交グリッドは、フレームバッファを表すのに最も好適であるが、複数の直交グリッドは、良くない効率性で２Ｄ平面をサンプリングする。本質的に、ＣＰＳは、シェーディングを可視性からデカップリングするので、シェーディンググリッドの異なる表現が用いられ、潜在的には既に紹介されたパイプラインの他の複数の態様を全て変化しない状態にし得る。
【０１２５】
一実施形態において、粗いシェーディングパイプラインは、六角グリッドにおいてシェーディングするように修正される。六角グリッドは、完全な複数のトライアングルの頂点にシェーディングの頂点を配置することにより構成され得る。図１３に図示されるように、一実施形態において、これは、適切な三角測量を用いて鉛直スケーリングおよび水平シャーリングオペレーションを三角測量された直交グリッド１３０１に適用して、六角グリッド１３０２に到達することにより、実現される。もたらされるグリッドの複数のボロノイセルは、四角形に代えて六角形である。この変換は、無理数を用いる拡大縮小を必要とし、これのみが、実際に近似し得ることに留意されたい。他の複数の近似値も用いられ得、これらはランク１のグリッド等、数値的にはより安定している（Ｄａｍｍｅｒｔｚら、２００９）。
【０１２６】
一実施形態において、粗いシェーディング中に、最近傍の３つのシェーディング頂点は、この変換の逆関数を可視性サンプルに適用することにより位置決めされ、直交する粗ピクセルは、以前の実装におけるように位置決めされる。シャーリングされたグリッドにおけるこの粗ピクセルの画像は、平行四辺形である。この平行四辺形のより短い対角線に対する可視性サンプルをテストすることにより、六角グリッドにおける最近傍トライアングルを画定する。
【０１２７】
本発明の一実施形態は、六角シェーディングの外挿がない変形を実装する。このために、ラスタライズされたトライアングルは、現行の可視性サンプルを含む最近傍シェーディングトライアングルに対してクリッピングされる。もたらされる凸多角形は、一般化された重心補間を用いて直交する粗グリッドと同様に扱われ得る。
【０１２８】
２．３  六角グリッドにおけるフィルタリング
本節で説明される複数の動作は、ピクセルシェーダステージ１１０４内のロジック１１０５ｃにより実行され得る。本発明の一実施形態において実装されるグリッドの六角形の性質は、最近傍フィルタリング中に現れる。これは、通常のエイリアシングを低減し（ほぼ鉛直の複数の線は、標準グリッドにより、特別の場合としてより良く再構成される）、２Ｄ平面のより良いサンプリングを提供する。また、線形フィルタリングは、六角グリッド上に画定され得る。バイリニア補間は、複数の直交する粗ピクセル内で用いられている。重心補間は、ここでは複数のトライアングルの頂点にわたって用いられ得る。残念ながら、線形フィルタリングは、グリッドの複数のトライアングルエッジを露出させる。多くの場合、より密なサンプリングにも関わらず、複数の直線を再現することができないので、直交グリッドの場合におけるよりも最終結果が悪いものとなる。一実施形態において、より高次の再構成フィルタが用いられ得る。
【０１２９】
上述のバイキュービック再構成フィルタは、この場合に直接に用いるには好適ではないであろう。なぜなら、そのテンソル積（分離可能）表現は、六角グリッドの等方性および１２倍の対称性を活用することができない。他方、過去に六角サンプリングデータの再構成のために設計され、成功裏に適用されている１次元Ｂスプラインによる他の一般化が存在する。複数の六角スプラインは、六角ボロノイセルのインジケータ機能の複数の畳み込みにより得られ、任意の程度の複数の高質フィルタを提供する（Ｖａｎ  Ｄｅ  Ｖｉｌｌｅら、２００４）。３つの指向性ボックススプラインは、六角サンプリングに特に好適な複数のボックススプラインの特別なクラスである（Ｃｏｎｄａｔ  ａｎｄ  Ｖａｎ  Ｄｅ  Ｖｉｌｌｅ．２００６）。六角スプラインおよびボックススプラインの両方は、六角サンプリングの等方性および対称性の特性を維持する。本発明の一実施形態において、「Ｃｏｎｄａｔ  ａｎｄ  Ｖａｎ  Ｄｅ  Ｖｉｌｌｅ  ［２００６］」において説明されるような複数の二次ボックススプラインの効率的な実装が用いられる。
【０１３０】
バイキュービックフィルタリングを用いる直交サンプリング、および複数の二次ボックススプラインを用いる六角サンプリングとの質の比較は、線形の場合よりも改善された複数の結果を提供する。六角サンプリングにより得られる複数の画像は、一般によりシャープである。これは部分的には、二次ボックススプラインが４次多項式をもたらすが、バイキュービックフィルタは、６次多項式をもたらすからである。再構成フィルタに関係するシェーディングポイントの数は、バイキュービックの場合が１６であるのと比較して１４である。
【０１３１】
３．粗いシェーディングのテクスチャフィルタリング
実際のシェーダは、ほぼ常にテクスチャ情報に依存する。テクスチャデータは通常、（サンプリングされた別個の形態で格納され得る）連続した信号であるものと仮定され、信号は、標準グリッド上でシェーディングされるときに、エイリアシングを避けるようにプリフィルタリングされることが必要である。プリフィルタリングは、サンプリング処理後に再構成され得ない複数の周波数を信号から除去するはずである。通常のシェーディング中に、各サンプリング位置は、ピクセル（またはスーパーサンプリングされたアンチエイリアシングを用いるより細かなサブサンプル）を表す。ＣＰＳを用いる場合、粗いシェーディンググリッドは、１ピクセル毎の周波数で再度サンプリングされ得、これは、更なる信号処理段階を意味する。複数の実験は、粗いシェーディング解像度を用いる場合に、テクスチャフィルタリングが特別な考慮を必要とすることを示す。興味深いことに、標準的ラスタライズパイプラインのテクスチャフィルタリング実装は、許容できる複数の不完全さから悪影響を受け、一般に通常のラスタライズ中には顕著ではない。しかし、これらの不完全さのうちのいくつかは、粗いシェーディングを用いて容易に明らかになる。
【０１３２】
３．１  テクスチャフィルタ幅
テクスチャフィルタの寸法は、楕円で密に近似し得るテクスチャ空間におけるシェーディングされたピクセルの推定フットプリントに基づいて選択される（Ｈｅｃｋｂｅｒｔ  １９８９）。この楕円の寸法および向きは、ｘ，ｙスクリーン空間位置に対するｕ，ｖテクスチャ座標の部分デリバティブに依存する。Ｈｅｃｋｂｅｒｔにより提案された楕円形の加重平均（ＥＷＡ）アルゴリズムのような高質テクスチャフィルタは、この楕円とアラインされる滑らかな異方性再構成フィルタを用いてテクスチャ信号の畳み込みを演算する。複数のリアルタイムアプリケーションは、テクスチャの複数のＬｏＤレベルを予め演算し、ＭＩＰピラミッドに格納することにより、フィルタ領域内のテクセルの数を低減する（Ｗｉｌｌｉａｍｓ  １９８３）。
【０１３３】
一実施形態において、テクスチャフィルタリングのハードウェア実装は、テクスチャ空間においてシェーディングされたピクセルの直径に対応するフィルタ幅を選択する。これは、現行のＯｐｅｎＧＬおよびＤｉｒｅｃｔ３Ｄ仕様に存在する設計の決定であり、これにより、よりシャープなテクスチャの外観をもたらすが、実際にはエイリアシングアーチファクトから悪影響を受ける。なぜかを理解するべく、チェッカーボードテクスチャを用いてスクリーン整列されたクワッドをレンダリングすることを考慮する。この場合、黒または白の四角形のサイズは、ピクセルサイズに厳密に一致する。このクワッドの複数のテクセルは、複数のシェーディングピクセルと完全に整列され、サンプリングされる画像は、テクスチャと厳密に一致する。しかし、スクリーンに沿ってシェーディングピクセルの半分だけ変換される場合、ピクセルフットプリント内のフィルタリングは、均一な灰色をもたらす。
【０１３４】
信号処理の観点からは、標準的ラスタライズパイプラインは、Ｎｙｑｕｉｓｔ周波数の制限に違反するテクスチャフィルタ幅を選択する。理想的には、ピクセルは、（信号をその周波数の少なくとも２倍でサンプリングするべく）その半径１の少なくとも２倍にわたって積分されるべきである。これは、テクスチャのシャープさのための設計の決定であると我々は考える。なぜなら、実際の複数のテクスチャは、以前のチェッカーボードの例における極端な周波数を示さないからである。しかし、粗いシェーディングを用いた実験において、異方性フィルタリングのＤｉｒｅｃｔ３Ｄの解像度を用いる場合には、深刻なテクスチャエイリアシングは、もたらされ得る。これを軽減するべく、本発明の一実施形態は、テクスチャグラジエントを２倍にバイアスすることを実行し、これにより、大抵のエイリアシングを除去するが、より不鮮明なテクスチャ外観をもたらす。
【０１３５】
３．２  フィルタの重複
たとえ全てのシェーディングサンプルがトライアングル内側に配置されても、テクスチャフィルタは、トライアングルの外側のテクスチャ空間の一部をなおもカバーする。これは、テクスチャフィルタが表面にわたってシェーディングの滑らかさを維持するように補助し得るときに、複数の内部エッジにわたる予期される挙動である。他方、テクスチャフィルタは、テクスチャ空間内のシルエットエッジにおいてテクスチャリークの問題を引き起こし得る。ＣＰＳのシェーディングレートの低減は、より大きな複数のテクスチャフィルタ（従ってより高いＭＩＰレベル）を必要とし、これは、全てのテクスチャリークアーチファクトがより著しくなることを意味する。
【０１３６】
特に、複数のテクスチャアトラスは、これらのアーチファクトから悪影響を受け、その場合、テクスチャの継ぎ目にわたって色のリークを避けることは困難である。これは、粗いシェーディングに依存する将来の複数のパイプラインが、可能な場合にテクスチャアトラスの使用を避けるべきであることを示唆する。Ｐｔｅｘのような設定のない複数のテクスチャフォーマットにおける近年の進展（Ｂｕｒｌｅｙ  ａｎｄ  Ｌａｃｅｗｅｌｌ  ２００８）およびバインドレステクスチャの導入は、より良い代替形態を提供する。それまで、リークが複数の実際のシェーディングレートで目に見える問題を引き起こさないように、テクスチャアトラスの準備に注意が払われるべきである。
【０１３７】
３．３  テクスチャデリバティブについての問題
本明細書に説明される外挿を避ける努力の背後にある１つの動機は、複数のプリミティブにわたってシェーディングの連続性を維持することである。通常のラスタライズにおいて、レンダリングパイプラインは、複数のシェーディングクワッドを完成するべく、外挿された複数のアトリビュートのみを用いる。外挿された複数の「ヘルパーピクセル」は、フレームバッファに実際に書き込まれることは決してなく、その主な目的は、テクスチャサンプリングの有限差分を演算することである（唯一の例外は、サンプルレベルシェーダ実行を用いるＭＳＡＡである）。しかし、ＣＰＳは、そのような複数のピクセルをアクティブに用いて、複数の可視性サンプルの色を再構成する。これは、複数の隣接トライアングルが同一の複数の平面方程式を共有しない場合に、複数のエッジにわたってシェーディングの複数の切れ目を引き起こす。一実施形態において使用されるクリッピングは、シェーディングがエッジにおける同一の位置で評価されることを保証する。複数のシェーディングアトリビュートは、エッジの２つの頂点のみに依存するので、これらは両方のプリミティブに対して一致する。
【０１３８】
外挿を用いるＣＰＳに対してこのソリューションを評価する場合、シェーディングは、なおも不連続に見え、トライアングルの境界を露出させる場合がある。問題は、補間された複数の頂点アトリビュートのみならず、それらのスクリーン空間デリバティブにも依存するシェーディングの複数のコンポーネントが存在することである。テクスチャサンプリングは、それに対する最善の例であり、ほぼ全ての実際のシェーディングシナリオに存在するので、問題は、より入念に調査された。
【０１３９】
複数の隣接トライアングルにわたってテクスチャ差分に一致するように、以前に措置が講じられたことはなく、各トライアングルは、別々に設定された。結果として、複数のトライアングルにわたって複数のテクスチャデリバティブにおける小さい差異が存在し、一致しないテクスチャルックアップを生じさせる。ほとんどの場合に、これは１ピクセル毎のシェーディングについては顕著ではないが、シェーディングの解像度の低下により、これは重大な問題となる。その理由は、テクスチャＬｏＤ選択が補償を必要とすることである。例えば、シェーディンググリッドの解像度を２分の１に低下させることにより、複数のテクスチャデリバティブは、それに応じて増加する必要がある。複数のテクスチャデリバティブ間の以前の不一致は、同一の因数で乗算される。実際には、もたらされる複数のアーチファクトは、深刻なものになる可能性があり、結果として外挿がないＣＰＳの利点をあまり目立たないものにする可能性がある。
【０１４０】
以下の分析において、目標は、複数の頂点アトリビュートのみならず、これらの第１のデリバティブが粗いシェーディング位置において一致することを保証する複数の技術を特定することである。分析は、複数のテクスチャデリバティブに限定され、これらのデリバティブが分析的に評価され得ることが想定される。より一般的なソリューションは、複数のテクスチャアトリビュートを、これらの有限差分が一致するように補間することである。しかし、これははるかに困難であり、更には表面の外観を変化させるであろう（テクスチャ座標がシフトするであろう）。第１に、テクスチャデリバティブ問題の正式な定義が提供される。次に、滑らかな表面で機能するソリューションの一実施形態が導入される。
【０１４１】
図１４に図示される２つの隣接トライアングルのＡおよびＢを考慮する。テクスチャ座標の１つの成分ｕは、４つの異なる頂点ｕ０、ｕ１、ｕ２、およびｕ３において画定されるスカラアトリビュートである。ラスタライズ中に、これらの頂点は、スクリーン空間に投影され、ｕはスクリーンにわたってパースペクティブ補正により補間される。値１／ｗおよびｕ／ｗは、線形補間される。ｗは、同次座標である。両方のトライアングルに対して、これらの補間は、２次元平面方程式を解くことにより実行され得る。
【数１】
2019061713.tif 000003
次に、ｕは、以下の有理式を解くことによりパースペクティブ補正により補間され得る。
【数２】
2019061713.tif 000004
【０１４２】
２つの平面方程式のペアは、共有エッジにおいて互いに「交差」し、エッジに沿って同一の頂点アトリビュートをもたらす。しかし、複数のアトリビュートデリバティブは、他の２つの頂点にも依存する。例えば、部分デリバティブｄｕ／ｄｘは、次式として記述され得る。
【数３】
2019061713.tif 000005
【０１４３】
分析的なデリバティブの詳細な導出は、「Ｍｕｎｋｂｅｒｇ  ａｎｄ  Ｃｌａｒｂｅｒｇ  ２０１０」に見られ得る。２つのトライアングルについて評価される複数のデリバティブは、一般的な場合に一致しないことは、容易に分かる。
【数４】
2019061713.tif 000006
【０１４４】
３．４  スムーズテクスチャデリバティブ
滑らかな表面に関するこの問題を解決するべく用いられる本発明の一実施形態は、これらのトライアングルがレンダリング表面における専ら粗くて区分的な線形の近似であるという事実により動機付けられている。従って、「フラットな」複数のテクスチャデリバティブは、滑らかな表面の複数のデリバティブで置換され得る。そのような複数のデリバティブは、頂点またはエッジに突然の複数の切れ目を有しない。通常、シェーディングは、トライアングル法線を１頂点毎のシェーディング法線で置換し、１頂点毎のシェーディング法線は次に、トライアングルにわたって補間され、テセレートされた表面の滑らかなライティングをもたらす。同様のことが複数のテクスチャデリバティブについて行われてもよい。
【０１４５】
上記の複数の方程式を再び参照すると、頂点毎に、複数の平面方程式が当該頂点を含む各トライアングルに対して設定され、所与のスクリーン空間位置について解かれてもよい。次に、頂点における複数のテクスチャデリバティブは、解の平均であり得、トライアングル内で１頂点毎の複数のデリバティブは、重心座標を用いて補間され得る。この技術は、トライアングルにわたって連続したシェーディングを保証する。他方、平面方程式の数は、頂点価数と共に線形的に増加し、そのようなソリューションは、ラスタライズパイプラインにおいて明らかに実際的ではない（複数の平面方程式は平均できないことを想起することが重要である。なぜなら、有理多項式の分子および分母を平均することを意味するからである）。これに代えて、複数の１頂点毎の接平面に基づく本発明の一実施形態において、異なるアプローチが使用される。
【０１４６】
第１に、単一のトライアングルが滑らかな表面を表すと仮定する。このトライアングルの各頂点は、トライアングルと必ずしも同一平面でない自身の接平面を画定する。このトライアングルのラスタライズ中に、複数のテクスチャデリバティブは、滑らかな表面により良く近似するように置換され得る。頂点ｖの近傍において、複数のデリバティブは、トライアングルが
【数５】
2019061713.tif 000007
付近の接平面スパンにあるのと同様に演算される（図１５の左側を参照）。具体的には、図１５の左側の部分で、所与の頂点の接平面に存在するトライアングル１５０１を用いて、複数のテクスチャデリバティブが頂点１５００において演算される。この接平面における各地点は、２つのスカラ
【数６】
2019061713.tif 000008
を用いてパラメータ化され得る。
【数７】
2019061713.tif 000009
【０１４７】
トライアングルの他の２つの頂点は、同一の接平面に投影され得、それらのｔとｂのパラメータを用いて、線形方程式は、頂点アトリビュート毎に設定され得る。
【数８】
2019061713.tif 000010
【０１４８】
この考えは、重心座標の補間に類似する１／ｗ、ｔ／ｗ、およびｂ／ｗスクリーン空間に対する線形平面方程式を有するものである。例えば、以下の式は、各頂点の接平面について解かれ得る。
【数９】
2019061713.tif 000011
【０１４９】
これから、頂点接平面における複数の修正されたテクスチャデリバティブが決定され得る。
【数１０】
2019061713.tif 000012
【０１５０】
トライアングル内側の任意の地点において、複数のテクスチャデリバティブは、３つの頂点の平面方程式を別々に用いて決定され得る。次に、これらは、重心座標を用いて補間される。この技術は、複数の接平面の１頂点毎の更に３つの平面方程式（ｔ／ｗ、ｂ／ｗ、１／ｗ）と、各アトリビュートに対する１つの平面方程式とを必要とする。
【０１５１】
本実施形態において、ユニークなパラメータ化は、同一の頂点を含む全てのトライアングルにより共有され得る頂点毎に導入されていることに留意されたい。この技術は、単純な前処理段階を用いて、複数のトライアングルのネットワークを介して滑らかな複数のデリバティブに拡張され得る。ラスタライズの前に、イテレーションが全頂点にわたって実行され得、各近隣トライアングルは、その接平面の基底に投影される。各頂点アトリビュートに対して、これは、１トライアングル毎の線形平面方程式をもたらす。図１５の右部分において、例えば、「平均的な」頂点アトリビュート方程式が全ての近隣トライアングルを同一の接平面に投影し、接平面および従法線を新しい基底として用いることにより派生し得る。これらの方程式は線形であるので、頂点
【数１１】
2019061713.tif 000013
の近隣におけるアトリビュートの挙動に近似する平均的な平面方程式が決定され得る。
【数１２】
2019061713.tif 000014
【０１５２】
本発明の一実施形態による方法が図１６に図示される。本方法は、上記の具体的な詳細およびアーキテクチャに従って実装され得るが、これらの具体的な詳細のうちのいくつかに限定されない。
【０１５３】
図示されるように、本方法は、前処理オペレーション１６０１〜１６０３のセットおよびラスタライズオペレーション１６０４〜１６０６のセットを含む。まず、前処理オペレーションを参照すると、１６０１において、頂点毎に複数の近隣トライアングルが収集される。１６０２において、本方法は、（例えば、上述の実施形態において）近隣の複数のトライアングルにわたって反復し、これらを複数の接平面に投影する。１６０３において、上記の例の各頂点（例えば、
【数１３】
2019061713.tif 000015
）について複数の線形アトリビュート方程式が設定され、平均される。一実施形態において、前処理オペレーションは、図１１に図示されるグラフィックスパイプラインの前処理ステージ１１０１において実行される。
【０１５４】
本方法のラスタライズ部分を参照すると、１６０４において、頂点シェーダ１１０２におけるロジック１１０５ａは、複数の平面方程式（例えば、ｔｉ／ｗ、ｂｉ／ｗ、１／ｗに対する平面方程式）を設定する。１６０５において、ジオメトリシェーダ１１０３内のロジック１１０５ｂは、補間を用いることなく複数の１頂点毎の平面方程式をピクセルシェーダ１１０４に対して可視化する。１６０６において、ピクセルシェーダ１１０４内のロジック１１０５ｃは、３つの頂点接平面に基づいて修正されたテクスチャデリバティブを決定し、重心座標を用いて複数の結果を補間する。例えば、一実施形態において、ピクセルシェーダは、次式を解く。
【数１４】
2019061713.tif 000016
【０１５５】
３．４．１  シルエット
上記の近似は、１頂点毎の接平面が後ろ向きになる場合には機能しない場合があり、これは、複数のシルエットエッジ付近で発生する。前処理段階は、そのような複数の接平面を除去するように修正されてもよく、元の１トライアングル毎のデリバティブ演算が用いられてもよい。
【０１５６】
前処理段階のビューに依存した変形が実装されている。このアプローチの１つの短所は、各フレームをレンダリングする前に前処理が行われる必要があることである。この考えは、向きに基づいて複数の近隣トライアングルの影響を重み付けするものである。トライアングルが（例えば、１頂点毎のビュー方向に対する法線をテストすることにより）シルエットに近づくにつれて、より小さい係数で接平面および線形アトリビュート方程式の両方の演算に影響を与えるはずである。この方法は、複数の接平面が決して後ろ向きにならないことを保証する。
【０１５７】
上記の前処理のコストが非常に高くなる場合、類似の１頂点毎のブレンドがスムーズテクスチャデリバティブと元のトライアングルのデリバティブとの間で用いられ得る。接平面がシルエットに近づくにつれて、複数のデリバティブは、元のものに復帰する。これは、シルエット上で、テクスチャの滑らかさが保証され得ないことを意味する。
【０１５８】
３．４．２  エイリアシング
上記の複数の技術は、連続したテクスチャデリバティブを保証するが、改善は、エイリアシングに対して行われ得る。これらの技術は、複数のデリバティブが元の不連続なバージョンより小さくなることが決してないことを保証するように修正され得る。
【０１５９】
４．クラスタ化されたＣＰＳ
複合シーンをレンダリングする場合、ラスタライズパイプラインは通常、結果的にフレームバッファの解像度よりも著しく多いピクセルシェーダを実行する。理想的には、複数の演算リソースは、可視の複数のフラグメントのみのために費やされるべきである。上記の任意のピクセルシェーダは、冗長とみなされる。シェーディングの冗長性の主な理由は、以下の通りである。
‐デプスの複雑さ
‐複数のプリミティブによりシェーディングされる部分的にカバーされる複数のピクセル、および
‐シェーディングのクワッドベースのスケジューリング
【０１６０】
ＣＰＳのいくつかの実施形態は、シェーディングコストを著しく低減することを意図するが、上記の複数の要因は、密にテセレートされた複合ジオメトリに関して効率性を限界する。ハードウェアがシェーダ実行をスケジューリングする態様が、特に重要である。テクスチャＬｏＤ選択に対する複数の有限差分を演算するべく、複数のピクセルシェーダは、２×２のクワッドとして実行され得る。従って、多くの場合、現行のプリミティブにより実際にはカバーされない複数のピクセルが同様にシェーディングされる必要があることが生じる。この冗長性のオーバヘッドは、複数のラスタライズされたプリミティブのサイズが小さくなるにつれて大きくなる。Ｆａｔａｈａｌｉａｎらは、マイクロ多角形レンダラに関するこの影響の完全な研究を実施した（Ｆａｔａｈａｌｉａｎら、２００９）（Ｆａｔａｈａｌｉａｎら、２０１０）。ＣＰＳの問題は、複数のシェーディングピクセルのサイズを大きくすることにより、いくつかのテセレートされたワークロードがマイクロ多角形シェーディングに類似するオーバヘッドを生成するというものである。部分的にカバーされるシェーディングクワッドおよびカバーされないシェーディングクワッドの数は、フィルタリングが用いられると、更に増加する。この問題は、クラスタ化されたプリミティブシェーディングを用いる一実施形態において対処されている。
【０１６１】
レンダリング中に複数のプリミティブにわたってシェーディングを再利用することが、主要な動機である。ラスタライズにより用いられるスクリーン空間座標は、共有パラメータ化を既に提供している。連続した表面に属する複数のプリミティブのみが、識別される必要がある。（１）複数の同一の頂点アトリビュートとエッジを共有し、（２）同一の向きを有する複数のプリミティブにわたって同一のＣＰＳグリッドを再利用するラスタライズステージの前に、クラスタ化オペレーションが実行される。基本的原理は、Ｆａｔａｈａｌｉａｎら（２０１０）により説明されるクワッドフラグメント結合に非常に類似する。彼らのパイプラインは、特にマイクロ多角形グリッド用に設計され、ダイシングステージは、頂点インデックス化により隣接情報を暗に提供し得るが、複数のクラスタは、任意のワークロードから推測で構築され得る。この目的のために、Ｎの最後のアセンブル済みプリミティブを保持し、複数の共有エッジを検索し得る小さいプリミティブバッファが規定される。ピクセルシェーダの観点から、それらのエッジが区別されることができない場合、２つのプリミティブは、同一のクラスタに属する（例えば、ピクセルシェーダ入力宣言内に存在する頂点アトリビュートは、同一である）。小さい複数のタイル（少なくとも２×２の粗ピクセル）において複数のＣＰＳクワッドを評価するシェーディングアーキテクチャが想定されている。次の段階として、階層的ラスタライズアルゴリズムは、シェーディングの前にＣＰＳクワッド毎に同一のクラスタ内の全てのトライアングルを処理するように修正される。このようにして、ＣＰＳクワッド内の全てのトライアングルのカバレッジは、完全に評価され、複数のシェーディングアトリビュートは、任意の位置で補間され得る。これは、ＣＰＳへのクワッドフラグメント結合の概念を拡張することを試みつつ、複数のポッピングアーチファクトを低減する我々の新規なアトリビュート補間方法を導く。カバーされるサンプル毎に、フラグメント結合方法のトリビアル拡張は、粗ピクセルの中央部をカバーするクラスタにおけるトライアングルを見つけるであろう。粗ピクセルの中央部がいずれのトライアングルによってもカバーされない場合（部分的にカバーされるクワッドにおいて容易に発生し得る）、標準的な方法は、代表的なトライアングルを他の複数の粗ピクセルから選択し得る（Ｆａｔａｈａｌｉａｎら、２０１０）。これは、顕著な複数のポッピングアーチファクトをもたらし得る。異なるトライアングルが次のフレームにおいて粗いサンプルの位置をカバーすると、突然、複数の粗ピクセル内の全てのサンプルは、異なるトライアングルを外挿する。
【０１６２】
本発明の一実施形態は、複数のＣＰＳサンプルを実際にカバーする複数のトライアングルのみならず、粗ピクセル内にカバレッジを有するクラスタ内の全てのトライアングルを考慮する。クラスタ化することなく、各トライアングルは、同一のシェーディング位置で外挿され、次に、カバーされる複数の可視性サンプルにおいてシェーディングされた色を分配する。ここで、シェーディングは、粗い各ピクセルにおいて丁度１回演算され、従って、単一のトライアングルを用いて全ての可視性サンプルをシェーディングすることに代えて、ＣＰＳ位置において外挿される複数の頂点アトリビュートの加重平均が演算され得る。複数の重みは、所与のトライアングルが粗ピクセル内でカバーする複数の可視性サンプルに比例する。クラスタが同一の複数のトライアングルを保持し、それらのカバレッジが連続して変化する限り、この補間方法は、連続して変化する複数の頂点アトリビュートをもたらす。
【０１６３】
本方法は、複数の粗ピクセル内の頂点アトリビュートについて実行された「ＭＳＡＡ  ｒｅｓｏｌｖｅ」とみなされ得る。シェーダが複数のシェーダアトリビュートのほぼ線形の関数である場合、これらの技術は、複数のシェーダ出力（シェーディング後の複数の粗ピクセルに対するＭＳＡＡ  ｒｅｓｏｌｖｅ）の平均化に密に合致することに留意されたい。
【０１６４】
クラスタ化されたＣＰＳは、ラスティ機能パイプラインシミュレータ内に実装されている。この実装は、クラスタ化の基本的な考えのみに焦点を当てており、本方法によりもたらされる一時的な複数のアーチファクトに対処しない。
【０１６５】
本発明の複数の実施形態は、上記された様々な段階を含み得る。複数の段階は、汎用または専用プロセッサに複数の段階を実行させるべく用いられ得る複数の機械実行可能命令で実施され得る。あるいは、これらの段階は、複数の段階を実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
【０１６６】
本明細書において説明されるように、複数の命令は、特定の複数のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体で実施されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路（ＡＳＩＣ）等のハードウェアの特定の構成を指し得る。従って、図に示される複数の技術は、１または複数の電子デバイス（例えば、終端局およびネットワーク要素等）上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ）および一時的コンピュータ機械可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号等の伝搬信号の電気、光、音響、又は他の形態）等、コンピュータ機械可読媒体を用いてコードおよびデータを格納し、（内部で、および／またはネットワークを介して他の電子デバイスと）通信する。更に、そのような電子デバイスは通常、１もしくは複数のストレージデバイス（非一時的機械可読記憶媒体）、ユーザ入出力デバイス（例えば、キーボード、タッチスクリーン、および／またはディスプレイ）、ならびにネットワーク接続等、１もしくは複数の他のコンポーネントに結合された１もしくは複数のプロセッサのセットを含む。複数のプロセッサおよび複数の他のコンポーネントのセットの結合は通常、１または複数のバスおよびブリッジ（バスコントローラとも呼ばれる）を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、各々、１または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの１または複数のプロセッサのセット上で実行するためのコードおよび／またはデータを格納する。勿論、本発明の実施形態の１または複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、多くの具体的な詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には、本発明がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。
【図１】
2019061713.tif 000017
【図２】
2019061713.tif 000018
【図３】
2019061713.tif 000019
【図４】
2019061713.tif 000020
【図５】
2019061713.tif 000021
【図６】
2019061713.tif 000022
【図７】
2019061713.tif 000023
【図８】
2019061713.tif 000024
【図９Ａ】
2019061713.tif 000025
【図９Ｂ】
2019061713.tif 000026
【図１０】
2019061713.tif 000027
【図１１】
2019061713.tif 000028
【図１２Ａ】
2019061713.tif 000029
【図１２Ｂ】
2019061713.tif 000030
【図１２Ｃ】
2019061713.tif 000031
【図１３】
2019061713.tif 000032
【図１４】
2019061713.tif 000033
【図１５】
2019061713.tif 000034
【図１６】
2019061713.tif 000035
【手続補正書】
【提出日】平成30年12月11日(2018.12.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
粗ピクセルシェーディング（ＣＰＳ）のための方法であって、
グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することにより前記グラフィックスメッシュを前処理する段階と、
前記接平面パラメータ化を用いてグラフィックスパイプラインのラスタライズステージにおいて前記グラフィックスメッシュのラスタライズを実行する段階とを備え、
ラスタライズを実行する段階は、頂点シェーダにおいて複数の平面方程式を設定する段階を有する、方法。
【請求項２】
前記複数の平面方程式は、複数の１頂点毎の接平面方程式を含む、請求項１に記載の方法。
【請求項３】
ラスタライズを実行する段階は、前記複数の平面方程式を、補間することなくピクセルシェーダに可視化する段階を更に有する、請求項２に記載の方法。
【請求項４】
ラスタライズを実行する段階は、複数の頂点接平面に基づいて、修正された複数のテクスチャデリバティブを前記ピクセルシェーダにより決定する段階を更に有する、請求項３に記載の方法。
【請求項５】
前記ピクセルシェーダは、複数の重心座標を用いて複数の結果を更に補間する、請求項４に記載の方法。
【請求項６】
前記グラフィックスメッシュを前処理する段階は、前記グラフィックスメッシュの頂点毎に、複数の近隣トライアングルを収集する段階を更に有する、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記グラフィックスメッシュを前処理する段階は、前記複数の近隣トライアングルにわたって反復して、前記複数の近隣トライアングルを複数の接平面に投影する段階を更に有する、請求項６に記載の方法。
【請求項８】
前記グラフィックスメッシュを前処理する段階は、頂点毎に複数の線形アトリビュート方程式を設定および平均する段階を更に有する、請求項７に記載の方法。
【請求項９】
機械により実行されると、前記機械に、
グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することにより前記グラフィックスメッシュを前処理する手順と、
前記接平面パラメータ化を用いてグラフィックスパイプラインのラスタライズステージにおいて前記グラフィックスメッシュのラスタライズを実行する複数のオペレーションを実行する手順とを実行させ、
ラスタライズを実行する手順は、頂点シェーダにおいて複数の平面方程式を設定する手順を有する、コンピュータプログラム。
【請求項１０】
前記複数の平面方程式は、複数の１頂点毎の接平面方程式を含む、請求項９に記載のコンピュータプログラム。
【請求項１１】
ラスタライズを実行する手順は、前記複数の平面方程式を、補間することなくピクセルシェーダに可視化する手順を更に有する、請求項１０に記載のコンピュータプログラム。
【請求項１２】
ラスタライズを実行する手順は、複数の頂点接平面に基づいて、修正された複数のテクスチャデリバティブをピクセルシェーダにより決定する手順を更に有する、請求項１１に記載のコンピュータプログラム。
【請求項１３】
前記ピクセルシェーダは、複数の重心座標を用いて複数の結果を更に補間する、請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記グラフィックスメッシュを前処理する手順は、前記グラフィックスメッシュの頂点毎に、複数の近隣トライアングルを収集する手順を更に有する、請求項９から１３のいずれか一項に記載のコンピュータプログラム。
【請求項１５】
前記グラフィックスメッシュを前処理する手順は、前記複数の近隣トライアングルにわたって反復して、前記複数の近隣トライアングルを複数の接平面に投影する手順を更に有する、請求項１４に記載のコンピュータプログラム。
【請求項１６】
前記グラフィックスメッシュを前処理する手順は、頂点毎に複数の線形アトリビュート方程式を設定および平均する手順を更に有する、請求項１５に記載のコンピュータプログラム。
【請求項１７】
粗ピクセルシェーディング（ＣＰＳ）のための装置であって、
グラフィックスメッシュの頂点毎に複数の所望の頂点アトリビュートの接平面パラメータ化を生成することにより、ラスタライズの前に前記グラフィックスメッシュを前処理する前処理手段と、
前記接平面パラメータ化を用いて前記グラフィックスメッシュのラスタライズを実行するグラフィックスパイプラインのラスタライズステージとを備え、
前記ラスタライズステージは、複数の平面方程式を設定する頂点シェーダを有する、装置。
【請求項１８】
前記複数の平面方程式は、複数の１頂点毎の接平面方程式を含む、請求項１７に記載の装置。
【請求項１９】
前記ラスタライズステージは、前記複数の平面方程式を、補間を用いることなくピクセルシェーダに可視化するジオメトリシェーダを有する、請求項１８に記載の装置。
【請求項２０】
前記グラフィックスメッシュを前処理することは、前記グラフィックスメッシュの頂点毎に、複数の近隣トライアングルを収集することを更に含む、請求項１７から１９のいずれか一項に記載の装置。
【請求項２１】
前記グラフィックスメッシュを前処理することは、前記複数の近隣トライアングルにわたって反復して、前記複数の近隣トライアングルを複数の接平面に投影することを更に含む、請求項２０に記載の装置。
【請求項２２】
前記グラフィックスメッシュを前処理することは、頂点毎に複数の線形アトリビュート方程式を設定および平均することを更に含む、請求項２１に記載の装置。
【請求項２３】
請求項９から１６のいずれか一項に記載のコンピュータプログラムを格納するコンピュータ可読記録媒体。
【外国語明細書】
2019061713000001.pdf