(57)【要約】【解決手段】グラフィック処理は、ＧＰＵによって頂点シェーダ及び画素シェーダを実行することを含む。頂点シェーダからの頂点インデックス出力がキャッシュに書き込まれる。キャッシュに書き込まれた頂点インデックスが画素シェーダによってアクセスされ、頂点インデックスに対応付けられた頂点パラメータ値が画素シェーダによってメモリ部でアクセスされる。この要約書は、研究者または他の読者が技術的開示の主題を直ちに確知することを可能とする要約を要件とする規則に準拠するための提供されることが強調される。これは特許請求の範囲または意味を解釈または限定するのに使用されないとの理解のもとに提出される。【選択図】図２Ｂ
2016524241.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータグラフィック処理方法であって、
頂点シェーダから出力された頂点インデックスをキャッシュに書き込むこと、
画素シェーダによって、前記キャッシュに書き込まれた前記頂点インデックスにアクセスすること、及び
前記画素シェーダによって、前記頂点インデックスに対応付けられた頂点パラメータ値にメモリ部でアクセスすること
を備える方法。
【請求項２】
請求項１に記載の方法であって、前記画素シェーダによって、前記頂点パラメータ値に対して頂点シェーダ演算を実行することを更に含む前記方法。
【請求項３】
請求項２に記載の方法において、前記頂点シェーダ演算が、３次元仮想空間におけるプリミティブの頂点の視覚効果を操作することを含む、前記方法。
【請求項４】
請求項１に記載の方法であって、前記画素シェーダによって前記頂点パラメータ値を補間することを更に含む前記方法。
【請求項５】
請求項１に記載の方法において、前記頂点インデックスにアクセスすることが、前記頂点インデックスを前記キャッシュからＧＰＵのローカルメモリ部に複製すること、及び前記画素シェーダによって前記ローカルメモリ部で前記インデックスにアクセスすることを含む、前記方法。
【請求項６】
請求項１に記載の方法において、前記頂点パラメータ値にアクセスすることが、三角形プリミティブの全３頂点のパラメータ値にアクセスすることを含む、前記方法。
【請求項７】
請求項１に記載の方法であって、前記頂点パラメータ値にアクセスすることの後に、
前記画素シェーダによって、前記頂点パラメータ値に対して頂点シェーダ演算を実行すること、
前記画素シェーダによって、前記パラメータ値を補間すること、及び
前記画素シェーダによって、補間された前記パラメータ値に対して画素シェーダ演算を実行すること
を更に含む前記方法。
【請求項８】
請求項１に記載の方法において、頂点シェーダ出力は頂点位置及び前記頂点インデックスに制限され、前記画素シェーダが、前記頂点インデックスにアクセスすることの後に、残余の頂点シェーダ演算を実行する、前記方法。
【請求項９】
請求項１に記載の方法において、前記メモリ部がシステムの主メモリである、前記方法。
【請求項１０】
請求項９に記載の方法において、前記パラメータ値が前記主メモリにおける頂点バッファに記憶される、前記方法。
【請求項１１】
グラフィック処理システムであって、
グラフィック処理装置（ＧＰＵ）、
メモリ部、及び
キャッシュ
を備え、
前記システムが、グラフィック処理方法を実施するように構成され、前記方法が、
前記ＧＰＵによって頂点シェーダ及び画素シェーダを実装すること、
頂点シェーダから出力された頂点インデックスを前記キャッシュに書き込むこと、
前記画素シェーダによって、前記キャッシュに書き込まれた前記頂点インデックスにアクセスすること、及び
前記画素シェーダによって、前記頂点インデックスに対応付けられた頂点パラメータ値に前記メモリ部でアクセスすること
を備える、システム。
【請求項１２】
請求項１１に記載のシステムにおいて、前記メモリ部が前記システムの主メモリ部である、前記システム。
【請求項１３】
請求項１１に記載のシステムにおいて、前記ＧＰＵが複数の演算部及び複数のローカルメモリ部を備え、前記ローカルメモリ部の各々が前記演算部の各１つに対応付けられている、前記システム。
【請求項１４】
請求項１３に記載のシステムにおいて、前記頂点インデックスにアクセスすることが、前記頂点インデックスを前記キャッシュから前記ローカルメモリ部に複製すること、及び前記画素シェーダによって前記ローカルメモリ部から前記頂点インデックスにアクセスすることを含む、前記システム。
【請求項１５】
請求項１１に記載のシステムにおいて、前記キャッシュが前記ＧＰＵに集積されている、前記システム。
【請求項１６】
請求項１１に記載のシステムにおいて、前記方法が、前記画素シェーダによって前記頂点パラメータ値に対して頂点シェーダ演算を実行することを更に含む、前記システム。
【請求項１７】
請求項１１に記載のシステムにおいて、前記方法が、前記画素シェーダによって前記パラメータ値を補間することを更に含む、前記システム。
【請求項１８】
請求項１１に記載のシステムにおいて、組込みシステム、携帯電話、パーソナルコンピュータ、タブレットコンピュータ、可搬ゲーム機器、ワークステーションまたはゲームコンソールである前記システム。
【請求項１９】
具現されるコンピュータ可読命令を有する非一時的コンピュータ可読媒体であって、前記コンピュータ可読命令が、実行される場合にグラフィック処理方法を実施するように構成されており、前記グラフィック処理方法が、
頂点シェーダから出力された頂点インデックスをキャッシュに書き込むこと、
画素シェーダによって、前記キャッシュに書き込まれた前記頂点インデックスにアクセスすること、及び
前記画素シェーダによって、メモリ部から前記頂点インデックスに対応付けられた頂点パラメータ値にアクセスすること
を備える、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の態様は、コンピュータグラフィックに関する。特に、本開示は、グラフィック処理装置における頂点シェーダ及び画素シェーダの使用に関する。
【背景技術】
【０００２】
グラフィック処理は通常、中央処理装置（ＣＰＵ）及びグラフィック処理装置（ＧＰＵ）の２つのプロセッサの協働を伴う。ＧＰＵは、ディスプレイへの出力のためのフレームバッファにおける画像の作成を加速するように設計された専用電子回路である。ＧＰＵは、組込みシステム、タブレットコンピュータ、可搬ゲーム機器、携帯電話、パーソナルコンピュータ、ワークステーション及びゲームコンソールにおいて使用される。ＧＰＵは通常、コンピュータグラフィックを操作する際に効率的となるように設計される。ＧＰＵは、大きなブロックのデータの処理が並列に行われるアルゴリズムのために、ＧＰＵを汎用ＣＰＵよりも効果的なものとする高度に並列化された処理アーキテクチャを有することが多い。
【０００３】
ＣＰＵは、特定のグラフィック処理タスクを実行し、例えば、画像の直前フレームに対して変化した特定のテクスチャをレンダリングするようにコマンドをＧＰＵに送ることができる。これらの描画コマンドは、特定のアプリケーションの仮想環境の状態に対応するグラフィックレンダリングコマンドを送出するために、グラフィクス・アプリケーション・インターフェイス（ＡＰＩ）とともにＣＰＵによって調整される。
【０００４】
特定のプログラムについてテクスチャをレンダリングするために、ＧＰＵは、「グラフィックパイプライン」における一連の処理タスクを実行して、仮想環境における映像を、ディスプレイ上にレンダリングされる画像に変換する。通常のグラフィックパイプラインは、仮想空間での仮想オブジェクトに対する所定のレンダリングまたはシェーディング操作、ディスプレイへの出力に適した形式の画素データを生成する、シーンにおける仮想オブジェクトの変換及びラスター化、並びにレンダリングされた画像をディスプレイに出力する前のピクセル（またはフラグメント）に対する追加のレンダリングタスクを実行すること含む。
【０００５】
画像の仮想オブジェクトは、プリミティブとして知られる形状に関して仮想空間において記述されることが多く、これは仮想シーンにおけるオブジェクトの形状を併せて構成する。例えば、レンダリングされる３次元仮想世界におけるオブジェクトは、３次元空間におけるそれらの座標に関して規定された頂点を有する一連の個別の三角形プリミティブに縮小され、これにより、これらの多角形がオブジェクトの表面を構成する。各多角形は、所与の多角形を他の多角形から区別するように、グラフィック処理システムによって使用される対応のインデックスを有する。同様に、各頂点は、所与の頂点を他の頂点から区別するのに使用される対応のインデックスを有する。グラフィックパイプラインは、これらのプリミティブに対する所定の操作を実行して、仮想シーンに対する映像を生成し、このデータをディスプレイの画素による再生に適した２次元形式に変換する。ここで使用するグラフィックプリミティブ情報（または単に「プリミティブ情報」）という用語は、グラフィックプリミティブを表すデータのことをいうのに用いられる。そのようなデータは、以下に限定されないが、頂点情報（例えば、頂点位置または頂点インデックスを表すデータ）及び多角形情報、例えば、特定の頂点を特定の多角形に対応付ける多角形インデックス及び情報を含む。
【０００６】
ＧＰＵは、一般にシェーダとして知られるプログラムを実行することによってグラフィックパイプラインのレンダリングタスクを実行することができる。通常のグラフィックパイプラインは、頂点ごとにプリミティブの特定のプロパティを操作できる頂点シェーダ（「フラグメントシェーダ」としても知られる）、及びグラフィックパイプラインにおける頂点シェーダからのダウンストリームを操作し、画素データをディスプレイに送信する前に画素ごとに所定の値を操作することができる画素シェーダを含む。パイプラインはまた、パイプラインの種々の段階において、頂点シェーダの出力を用いて新たな組のプリミティブ（または対応するプリミティブ情報）を生成する幾何シェーダ、ＧＰＵによって実行されて他の所定の一般的演算タスクを実行する演算シェーダ（ＣＳ）などといった他のシェーダを含むことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
パイプラインにおいてグラフィックを処理することに関する１つの課題は、データがパイプラインにおける種々のシェーダに対して入出力されるにつれて特定のボトルネックが発生して性能を低下させることである。さらに、映像を実行する特定のアプリケーションの開発者がレンダリング処理を最適化できるようにするために、シェーダが種々の視覚パラメータ及び内在データを利用する態様に関して、より多い制御方法を開発者に与えることが望ましい。
【０００８】
この状況の中で、本開示の態様が生じている。
【課題を解決するための手段】
【０００９】
本開示の態様によると、コンピュータグラフィック処理方法は、頂点インデックス出力を頂点シェーダからキャッシュに書き込むこと、画素シェーダによって、キャッシュに書き込まれた頂点インデックスにアクセスすること、及び画素シェーダによって、頂点インデックスに対応付けられた頂点パラメータ値にメモリ部でアクセスすることを含む。
【００１０】
本開示のある実施例では、コンピュータグラフィック処理方法は、画素シェーダによって頂点パラメータ値に対して頂点シェーダ演算を実行することを更に含む。
【００１１】
ある実施例では、コンピュータグラフィック処理方法は、画素シェーダによって頂点パラメータ値を補間することを更に含む。
【００１２】
ある実施例では、頂点インデックスにアクセスすることは、頂点インデックスをキャッシュからＧＰＵのローカルメモリ部に複製すること、及び画素シェーダによってローカルメモリ部でインデックスにアクセスすることを含む。
【００１３】
ある実施例では、頂点シェーダ演算は、３次元仮想空間におけるプリミティブの頂点の視覚効果を操作することを含む。
【００１４】
ある実施例では、頂点パラメータ値にアクセスすることは、三角形プリミティブの全３頂点のパラメータ値にアクセスすることを含む。
【００１５】
ある実施例では、方法は、頂点パラメータ値にアクセスすることの後に、画素シェーダによって頂点パラメータ値に対して頂点シェーダ演算を実行すること、画素シェーダによってパラメータ値を補間すること、及び画素シェーダによって、補間されたパラメータ値に対して画素シェーダ演算を実行することを更に含む。
【００１６】
ある実施例では、頂点シェーダ出力は頂点位置及び頂点インデックスに制限され、画素シェーダは、頂点インデックスにアクセスすることの後に、残余の頂点シェーダ演算を実行する。
【００１７】
ある実施例では、メモリ部はシステムの主メモリである。
【００１８】
ある実施例では、パラメータ値は主メモリにおける頂点バッファに記憶される。
【００１９】
本開示の態様によると、グラフィック処理システムは、グラフィック処理装置（ＧＰＵ）、メモリ部及びキャッシュを含み、システムは、ＧＰＵによって頂点シェーダ及び画素シェーダを実装すること、頂点インデックス出力を頂点シェーダからキャッシュに書き込むこと、画素シェーダによって、キャッシュに書き込まれた頂点インデックスにアクセスすること、及び画素シェーダによって、頂点インデックスに対応付けられた頂点パラメータ値にメモリ部でアクセスすることを含むグラフィック処理方法を実施するように構成される。
【００２０】
ある実施例では、メモリ部はシステムの主メモリ部である。
【００２１】
ある実施例では、ＧＰＵは複数の演算部及び複数のローカルメモリ部を含み、ローカルメモリ部の各々は演算部の各１つに対応付けられている。
【００２２】
ある実施例では、頂点インデックスにアクセスすることは、頂点インデックスをキャッシュからローカルメモリ部に複製すること、及び画素シェーダによってローカルメモリ部から頂点インデックスにアクセスすることを含む。
【００２３】
ある実施例では、キャッシュはＧＰＵに集積される。
【００２４】
本開示の態様によると、非一時的コンピュータ可読媒体は、そこに具現されるコンピュータ可読命令を有し、コンピュータ可読命令は、実行される場合にグラフィック処理方法を実施するように構成され、グラフィック処理方法は、頂点インデックス出力を頂点シェーダからキャッシュに書き込むこと、画素シェーダによって、キャッシュに書き込まれた頂点インデックスにアクセスすること、及び画素シェーダによって、メモリ部から頂点インデックスに対応付けられた頂点パラメータ値にアクセスすることを含む。
【００２５】
本開示の教示は、添付図面との関係において以下の詳細な説明を検討することによって直ちに理解できる。
【図面の簡単な説明】
【００２６】
【図１Ａ−１Ｃ】図１Ａ−１Ｃは、種々のグラフィック処理手法を説明する三角形プリミティブの模式図である。
【図１Ｄ−１Ｅ】図１Ｄ−１Ｅは、従来的なグラフィック処理手法のフロー図である。
【図２Ａ】図２Ａは、図１Ｅの実施例との類似性を有する従来的なグラフィック処理手法の説明図である。
【図２Ｂ】図２Ｂは、本開示の態様によるグラフィック処理手法の説明図である。
【図３】図３は、本開示の態様によるグラフィック処理手法のフロー図である。
【図４】図４は、本開示の態様によるグラフィック処理手法を実施するためのシステムの説明図である。
【発明を実施するための形態】
【００２７】
以降の詳細な説明は、説明の目的で多数の具体的詳細を含むが、当業者であれば、以降の詳細に対する多数の変形例及び変更例が発明の範囲内にあることを理解するはずである。したがって、以下に記載される発明の例示的実施形態は、特許請求の範囲に記載される発明に対して、いかなる一般性の喪失もなく、限定を加えることもなく詳述される。
【００２８】
序論
本開示の態様によると、頂点シェーダ出力は出力位置及び頂点インデックスだけに縮小され、画素シェーダは通常の画素シェーダ演算と同様に残余の頂点シェーダ演算を実行し、オブジェクトの加速されたレンダリングがもたらされる。
【００２９】
本開示の態様によると、頂点シェーダ演算を頂点の素のパラメータ値に対して実行するために、画素シェーダはパラメータ値にシステムメモリで直接アクセスする。そして、画素シェーダは、パラメータ値を補間し、レンダリングされた画素が画素シェーダからフレームバッファに出力される前に画素シェーダ演算を実行する。スループット及びパラメータ値の複製に関連するボトルネックは、頂点インデックス、及び頂点シェーダからの全部ではない出力パラメータを出力し、これらのインデックスを用いてメモリにおけるパラメータ値を画素シェーダで識別することによって軽減される。
【００３０】
図１Ａ−１Ｃは、グラフィック処理手法の種々の態様、及びどのように頂点パラメータの補間が使用されてグラフィックを処理し、画像における仮想オブジェクトをレンダリングするかを示す。表示される仮想オブジェクトの種々の位置におけるパラメータ値を規定するために、グラフィック処理手法は重心補間処理を利用する。例として、そして限定ではなく、パラメータ値は、仮想空間に位置するプリミティブの各頂点における位置、色、テクスチャ座標、発光などであり、これらの頂点パラメータの重心補間はプリミティブ内の任意の位置におけるパラメータ値を特定するのに使用される。例えば、任意数の画素が、仮想シーンをディスプレイの画素にレンダリングするのに用いられる場合にプリミティブ内に位置し、プリミティブ内の画素位置において対応のパラメータ値を特定するのに上記の頂点パラメータ値の補間が使用される。
【００３１】
重心座標系を用いる補間処理の説明に係る態様を図１Ａに示す。図１Ａに、ＧＰＵによってグラフィックを処理するためのプリミティブとして利用される多角形（例えば、三角形）１０２を示す。なお、三角形は、最小頂点数（３点）を有する２次元形状であり、各三角形が平面となることが保証されているので、グラフィック処理におけるプリミティブとして一般に使用される。レンダリングされる画像における３次元オブジェクトのような仮想オブジェクトの表面を、仮想空間において方向付けられた多数の三角形プリミティブ１０２で構成することができる。三角形１０２は、各々が所定のパラメータ値Ｐ０、Ｐ１及びＰ２をそれぞれ有する頂点１０４ａ、１０４ｂ及び１０４ｃを含む。
【００３２】
頂点パラメータ値Ｐ０、Ｐ１及びＰ２を補間することによって、三角形１０２の任意の点におけるパラメータ値Ｐｉ，ｊは、形状の角部におけるパラメータ間の線形関係を用いて規定される。座標ｉ，ｊは、仮想オブジェクトを有する画像がディスプレイ上の画面スペースにレンダリングされる場合に、画素（または画素中心）の位置に対応する。したがって、この補間処理は、プリミティブ１０２に位置する画素のいずれかについてのパラメータ値を特定するのに使用される。仮想オブジェクトの任意の三角形１０２には、三角形内に位置する任意数の画素中心があり得る。例えば、プリミティブ内に位置し得る０個、１個、１０個またはそれ以上の画素があり得る。
【００３３】
位置ｉ，ｊにおける頂点パラメータを補間するために、頂点パラメータ値の１つが他の頂点のパラメータ値から減算され、これらの減算値が、所望のパラメータ値の位置に対応する三角形１０２内の重心座標位置の各々によって乗算される。これは、以下のように数学的に表され、ここでは、頂点パラメータＰ０が他の２つの頂点パラメータＰ１及びＰ２から減算され、これらの減算値が対応の座標値ｉ，ｊによって乗算される。
Ｐｉ，ｊ＝Ｐ０＋（Ｐ１−Ｐ０）ｉ＋（Ｐ２−Ｐ０）ｊ
【００３４】
図１Ｂに、グラフィック処理アプリケーションのために仮想オブジェクトをレンダリングするのに使用される図１Ａの三角形１０２と同様の複数の三角形１０２ａ−ｄを示す。図１Ｂ及び以下の記載は、グラフィック処理手法を実施する際に頂点パラメータデータが利用及び記憶される種々の態様を説明するために簡略化された概略的な記述である。
【００３５】
三角形１０２ａ−ｄの各々は、対応するパラメータ値を各々が有する３個の頂点を有する。さらに、三角形１０２ａ−ｄは多数の共通頂点を共有し、このように、パラメータ値の多くが異なる三角形に対して共通する。パラメータ値を、それらが三角形の各々に対応付けられるように複数回記憶するのではなく、各頂点が識別インデックスに割り当てられる。簡略な例として、図１Ｂに示す頂点は、それぞれが識別インデックス０、１、３、９、１０及び４に割り当てられる。これらのインデックス及びそれらに対応したパラメータ値は、「頂点バッファ」として一般に知られるものに記憶される。さらに、三角形１０２ａ−ｄの各々は、それらの対応する頂点インデックスによって識別され、例えば、三角形１０２ａは（０，１，３）によって識別され、三角形１０２ｂは（１，３，９）によって識別され、以下同様にして、この情報が「インデックスバッファ」として一般に知られているものに記憶される。したがって、共通の頂点パラメータ値は、バッファにおいて識別されるそれぞれのインデックスによって各個別の三角形１０２ａ−ｄに対応付けられる。
【００３６】
図１Ｂはまた、プリミティブ１０２ａ−ｄ上に重ねられる一連の画素位置ａ−ｆを示す。例えば図１Ａに関して上述したようなパラメータ値の補間は、各プリミティブ内の画素位置ａ−ｆの各々におけるパラメータ値を、各プリミティブを識別する各頂点パラメータ値及びインデックスに基づいて特定するのに使用される。例として、そして限定ではなく、三角形１０２ａ−ｄは３次元仮想環境において方向付けられ、画素位置ａ−ｆは、レンダリングされる仮想環境の画像を表示するのに使用される２次元画面の画素に対応する。
【００３７】
パラメータ値が三角形内に位置する画素ａ、ｂ及びｃに割り当てられる種々の態様を説明するために、図１Ｃに、図１Ｂの三角形１０２ａ及び１０２ｂを示す。図１Ｃに示すように、頂点パラメータ値Ｐ０、Ｐ１及びＰ２は、各個別の三角形１０２ａ及び１０２ｂに固有に割り当てられ、インデックスバッファに記憶されたインデックス０、１、３及び９に基づいて識別される。補間は、図１Ａに関して上述したように、対応するパラメータ値を頂点バッファでアクセスし、パラメータ値Ｐ０を残余の頂点パラメータＰ１及びＰ２から減算することによって実行される。
【００３８】
各プリミティブのパラメータ値を補間することの代替として、「フラットシェーディング」として知られる手法が用いられてもよい。フラットシェーディングを用いると、「起点となる頂点」、例えばＰ０が各三角形について規定され、残余の頂点との差、例えばＰ１−Ｐ０及びＰ２−Ｐ０が単にゼロ設定される。三角形内に位置する任意の画素が、起点となる頂点のパラメータ値とともに頂点シェーダから出力される。これにより、補間演算に関連する多量のオーバーヘッドを節約することができるが、仮想オブジェクトが相状に見えてしまい、これは多くのアプリケーションにおいて望ましくない。
【００３９】
図１Ｄに、従来的な一方法１００ａによる頂点パラメータの補間を実行する説明に係る種々の態様のフロー図を示し、この方法によると画素シェーダによって受信される前に補間全体が実行される。画素ａ−ｆについてのパラメータ値を特定するために頂点パラメータが頂点シェーダ１１０及び画素シェーダ１１２との協働においてどのように補間されるのかを示すために、図１Ｄの方法１００ａは、図１Ｂ及び１Ｃに示すような三角形１０２ａ−ｄを利用する（なお、ａ−ｆをフレームバッファに出力する前に更なる修正が画素シェーダによって実行されるので、ａ−ｆは、より正確にはフラグメントまたはプレ画素を意味するが、ここでは説明の便宜上、単に画素というものとする）。
【００４０】
方法１００ａは、頂点シェーダ１１０によって所定の頂点シェーダ演算１１４を実行することを含み、これは、レンダリングされるグラフィックをアプリケーションの仮想環境で調整するグラフィックＡＰＩから受信された描画コマンドによる、仮想オブジェクトの頂点パラメータの頂点ごとの所定操作を含む。頂点シェーダ１１０は、図１Ｄに示す三角形１０２ａ−ｄの各々についての対応する頂点パラメータ値Ｐ０、Ｐ１及びＰ２を出力する。
【００４１】
これらの頂点パラメータ値Ｐ０、Ｐ１及びＰ２は、対応する三角形１０２ａ−ｄ内に位置する画素位置ａ−ｆにおけるパラメータ値Ｐａ−Ｐｆを特定するために、各三角形について１１６において補間される。１１６における補間は、例えば図１Ａに関して説明したように、頂点パラメータ値Ｐ０を他の２つの頂点パラメータ値Ｐ１及びＰ２から減算し、これらの減算値をそれらの対応する重心座標で乗算し、座標で規定される画素位置におけるパラメータを補間するように乗算値を加算することを含む。図１Ｄに示す手法では、補間１１６は、全体として、ＧＰＵに対応付けられたパラメータ補間ハードウェア構成要素によって、画素シェーダプログラム１１２がパラメータ値を入力として受信する前に実行される。画素シェーダ１１２は、１１８において所定の画素シェーダ演算を画素ａ−ｆの各々について、すなわち画素ごとに実行することによって各画素ａ−ｆを更に操作し、出力画素１２０が得られる。出力画素１２０はフレームバッファに記憶され、ディスプレイ上にレンダリングされる画像として出力される。
【００４２】
図１Ｅに、他の従来的な方法１００ｂによって頂点パラメータの補間を実行する説明に係る種々の態様のフロー図を示す。図１Ｅに示す従来的な方法１００ｂは、図１Ｄに示す従来的な方法１００ａとは、パラメータが画素シェーダ１１２に到達する前に補間１１６の減算部１２２のみが実行される点を除いて同様である。この手法１００ｂでは、補間１１６の減算部１２２は、画素シェーダプログラム１１２が減算済みパラメータ値を入力として受信して補間１１６の残りを実行する前に、ＧＰＵに対応付けられたパラメータ補間ハードウェア構成要素によって実行される。したがって、頂点パラメータの補間１１６の残りは、絶対頂点パラメータＰ０、パラメータＰ０に対して減算された減算パラメータ値Ｐ１０及びＰ２０並びに絶対頂点パラメータ値Ｐ０に対する所望のパラメータＰの座標の、１２４における単純な乗算及び加算演算に軽減されることになる。対応する三角形１０２ａ−ｄの各々について、Ｐ１０＝Ｐ１−Ｐ０であり、Ｐ２０＝Ｐ１−Ｐ０である。これにより、前述した所望のパラメータ値Ｐａ−Ｐｆが得られ、これが、出力画素１２０を生成するように１１８において画素シェーダによって更に操作される。
【００４３】
図２Ａは、従来的な方法によってグラフィックを処理するように構成された種々のハードウェア及びソフトウェア構成要素で実行される方法２００ａの説明図を示す。図２Ａに示す方法２００ａは、図１Ｅに示す方法１００ｂと類似する。
【００４４】
頂点シェーダ２１０は、画面スペースにおけるプリミティブの頂点の位置２３０、頂点の発光、影、色などの操作といったような、各プリミティブの頂点に対する他の種々のレンダリング効果２３４を特定することを含む、種々の頂点シェーダ演算２１４を実行する。頂点シェーダ演算２１４から得られる種々のパラメータＰ０、Ｐ１及びＰ２は一時的な記憶のためにパラメータキャッシュ２３６に書き込まれ、システムのパラメータ補間ハードウェア構成要素２２２は、パラメータキャッシュ２３６からのそれぞれの組のパラメータをＧＰＵの各演算部の各小容量ローカルメモリ部２３７に書き込む前にパラメータ値を減算することによって、補間の一部を実行する。各ローカルメモリ部２３７は、ＧＰＵの各演算部に対応付けられたローカルデータシェア（ＬＤＳ）としても知られる小容量であるが高速なローカルメモリ部であり、シェーダプログラムを並列に稼働させる複数の上記メモリ部及び演算部がある。
【００４５】
頂点シェーダ出力位置２３０は、例えばここに記載するように、それらがパラメータ値を補間するのに使用されるように各プリミティブに対する画素の重心座標ｉ，ｊを生成するハードウェア構成要素２３８によって使用される。画素シェーダ２１２は、各所望のパラメータｉ，ｊの座標を用いて乗算及び加算演算２２４を実行することによって補間を完了するために、ローカルデータシェア２３７で絶対パラメータ値Ｐ０並びに相対パラメータ値Ｐ１０及びＰ２０にアクセスする。そして、画素シェーダ２１２は、所定の更なる画素シェーダ演算２１８を実行して、例えばフレームバッファに出力する前に画素を更に操作する。
【００４６】
上述した手法２００ａの１つの欠点は、画素シェーダに対するパラメータのスループットに関連する特定のボトルネックが起こることであり、これは仮想オブジェクトのレンダリングの速度を低下させ得る。１つに、パラメータキャッシュへのパラメータ書込みスループットがボトルネックとなることが認識されてきた。例えば、各パラメータは、例えば３２ビットの浮動小数点数のような大きな属性変数となり、頂点シェーダはこれらの属性変数を一連の、例えば一時に４個のウェーブフロントとしてパラメータキャッシュ２３６に書き込む。さらに、パラメータキャッシュの使用によって、記憶される頂点シェーダのウェーブフロント数が更に制限され、更なるボトルネックが生ずる。そして、パラメータはローカルデータシェア２３７に複製され、画素シェーダによってアクセスされる前に一時的に記憶され、画素シェーダのウェーブフロント数を制限することによって、制限されたスループット及び合計ローカルデータシェアの使用によって再度ボトルネックが生ずる。
【００４７】
上述した手法２００ａの他の欠点は、減算されたパラメータ値Ｐ１０及びＰ２０が画素シェーダ２１２に到達する前に計算されるため、画素シェーダは素のパラメータ値Ｐ１及びＰ２に直接アクセスできないことであり、これにより、画素シェーダによって実行されるレンダリング効果の種類が制限される。
【００４８】
実施例
図２Ｂに、本開示の態様の実施例を示す。図２Ｂは、本開示の種々の態様による、グラフィックを処理するように構成された種々のハードウェア及びソフトウェア構成要素によって実施される手法２００ｂの概略図を示す。図２Ｂに示す実施例では、例えば、上述したようなパラメータ値のスループットに関連するボトルネックは、頂点パラメータ値への直接のアクセスを画素シェーダに与えることによって対処される。そして、画素シェーダは、通常の画素シェーダ演算を実行する前の頂点パラメータの補間と同様に、頂点シェーダに従来的に対応付けられたこれらの素の頂点パラメータ値に対して多数の演算を実行することができる。
【００４９】
図２Ｂに示すように、画素シェーダ２１０は、２１４ａにおいて示すような頂点シェーダ演算を実行する。場合によっては、これらの演算は、他のパラメータ値が頂点シェーダ出力から省かれるように、頂点位置２３０を特定すること及びインデックスを出力することに限られてもよい。頂点シェーダ出力パラメータをパラメータキャッシュ２３６に書き込むのではなく、頂点シェーダ２１０は、各プリミティブ（例えば、三角形または他の多角形）を識別する頂点インデックスＩ０、Ｉ１及びＩ０をパラメータキャッシュ２３６にただ書き込むように構成される。そして、これらのインデックスは、画素シェーダがそれらにローカルにアクセスできるように、ローカルデータシェア２３７に送られる。これらのインデックスＩ０、Ｉ１及びＩ２にアクセスできるので、画素シェーダ２１２は、インデックスに対応付けられた素のパラメータ値Ｐ０、Ｐ１及びＰ２に、システムの主メモリ、例えば頂点バッファで直接アクセスすることができる。これらのパラメータ値にアクセスできるので、画素シェーダ２１２は、三角形の頂点に対する他の視覚効果２３４を含み得る残余の頂点シェーダ演算２１４ｂを実行することができる。そして、画素シェーダは、各画素位置でパラメータ値を特定するために、座標ｉ，ｊを用いて、残余の頂点シェーダ演算２１４ｂから得られたパラメータ値の補間２１６を実行する。そして、画素シェーダ２１２は、補間値に対して、画素への更なる視覚効果を含む更なる画素シェーダ演算２１８を実行して出力画素を生成する。
【００５０】
この説明に係る実施例では、画素シェーダに送信されるインデックスＩ０、Ｉ１及びＩ２はパラメータ値について使用される属性変数よりも非常に小さいデータ量であるので、例えばインデックスは基本的に１つの数のみであるので、これらのパラメータ値のスループットに関連するボトルネックが減少する。
【００５１】
ただし、頂点シェーダ演算２１４ｂ及び補間２１６を図２Ｂに示す態様で画素シェーダ２１２に実行させることによって、全体のシェーダと同様に画素シェーダにおける演算負荷が増加することになる。例えば、画像には、通常は可視頂点よりも多くの画素がある。説明する方法では頂点シェーダ演算２１４ｂは頂点シェーダ演算２１０ではなく画素シェーダ２１２によって実行されるので、頂点シェーダがそうするようにそれらを頂点ごとに１回実行するのではなく、それらは画素ごとに３回（すなわち、画素を含む三角形プリミティブの各頂点について）実行される。したがって、演算負荷をこのような態様で増加させることは従来的な知恵に反し、これは、演算負荷を増加させることによって性能が低下して望ましくないと言えそうである。しかし、パラメータスループットに関連するボトルネックはレンダリング速度よりも大きな制限的要因であり、たとえより多くの演算が画素シェーダによって実行されなければならないとしても、全体的性能は実際に高められ、オブジェクトのレンダリングは加速される。
【００５２】
またさらに、例えば上述したような従来的なフラットシェーディング手法では、画素シェーダは、インデックスの全て及び各三角形に対する頂点パラメータの全てに直接アクセスすることができない。せいぜい、それは起点となる頂点にアクセスできるに過ぎず、例えば、図２Ｂに示すような頂点シェーダ演算２１４ｂを画素シェーダが実行することを阻害するといったように、実行可能なレンダリング及び生成可能な視覚効果の種類を制限することになる。
【００５３】
図３は、本開示の種々の態様による、頂点シェーダ及び画素シェーダによってグラフィックを処理するための方法３００のフロー図を示す。方法３００は、図２Ｂに示すグラフィック処理手法２００ｂと類似性を有する。
【００５４】
説明する方法３００は、頂点シェーダ３１０によって頂点シェーダ演算３１４ａを実行することを含む。多数の通常の頂点シェーダ演算が、頂点シェーダ３１０によって実行される演算３１４ａから省かれ、その代わりに画素シェーダ３１２を用いて画素ごとに実行される。頂点シェーダ３１０の出力は、プリミティブ３０２ａ−ｄの各々について頂点出力位置及び頂点インデックスに限定される。プリミティブは、インデックスＩ０、Ｉ１及びＩ２によって識別される３頂点を各々が有する三角形であり、図１Ｂに示す三角形１０２ａ−ｄと同様である。
【００５５】
インデックスは画素シェーダ３１２に送られ、それはインデックスＩ０、Ｉ１及びＩ２を用いて、異なるプリミティブ３０２ａ−ｄの各々に対する頂点パラメータ値Ｐ０、Ｐ１及びＰ２の各々に直接アクセスすることができる。画素シェーダ３１２は、例えば、頂点インデックスに対応付けられた頂点バッファに記憶されたパラメータ値を有するシステムメモリに直接アクセスすることによって、素のパラメータ値に直接アクセスする。画素シェーダはパラメータ値を用いて残余の頂点シェーダ演算３１４ｂを実行し、それは各プリミティブの各頂点に対して所定の視覚効果をレンダリングすることを含む。そして、画素シェーダ３１２は、プリミティブ内の各画素位置におけるパラメータ値Ｐａ−Ｐｆを抽出するために、画素シェーダ演算３１４ｂを実行した後に、得られるパラメータ値を補間する。そして、画素シェーダ３１２は、補間パラメータ値を用いて画素に対して画素シェーダ演算３１８を実行することによって画素に対する追加の視覚効果を生成し、レンダリングされた画素３２０を、例えばシステムメモリのフレームバッファに出力する。
【００５６】
本開示の態様は、上述した構成を実現するように構成されたグラフィック処理システムを含む。例として、そして限定ではなく、図４に、本開示の態様によるグラフィック処理を実施するのに使用されるコンピュータシステム４００のブロック図を示す。本開示の態様によると、システム４００は、組込みシステム、携帯電話、パーソナルコンピュータ、タブレットコンピュータ、可搬ゲーム機器、ワークステーション、ゲームコンソールなどである。
【００５７】
システム４００は、概略として、中央処理装置（ＣＰＵ）４７０、グラフィック処理装置（ＧＰＵ）４７１、並びにＣＰＵ及びＧＰＵの双方にアクセス可能な主メモリ４７２を含む。ＣＰＵ４７０及びＧＰＵ４７１の各々は、１以上のプロセッサコア、例えば、単一のコア、２個のコア、４個のコア、８個のコアまたはそれ以上を含む。主メモリ４７２は、アドレス指定可能なメモリ、例えばＲＡＭ、ＤＲＡＭなどを与える集積回路の形態となり得る。
【００５８】
例として、そして限定ではなく、ＣＰＵ４７０及びＧＰＵ４７１は、データバス４７６を用いて主メモリ４７２にアクセスする。場合によっては、システム４００が２以上の異なるバスを含むことが有用である。主メモリ４７２は、ＣＰＵ４７０及びＧＰＵ４７２によってアクセス可能なデータを含む。主メモリはデータを、頂点バッファ４６３、インデックスバッファ４６６及びフレームバッファ４６４を含むバッファに一時的に記憶する。
【００５９】
ＣＰＵは、ＣＰＵコードを実行するように構成され、これは、レンダリングされたグラフィックを利用するアプリケーション４６０と、ＧＰＵによって実行されるプログラムに描画コマンドを送出するためのドライバ／コンパイラ４６１及びグラフィックＡＰＩ４６２とを含む。ＣＰＵコードはまた、物理シミュレーション及び他の機能を実現する。ＧＰＵは、本開示の説明に係る実施例に関して上述したように動作するように構成される。特に、ＧＰＵはＧＰＵコードを実行し、これは、上述したように、頂点シェーダ４１０及び画素シェーダ４１２を実現する。これらのシェーダは、主メモリ４７２のデータとのインターフェイスとなり、画素シェーダは、レンダリングされる画素を、ディスプレイへの出力前の一時的な記憶のためにフレームバッファ４６４に出力する。ＧＰＵは、グラフィック処理タスクを並列に実行するように構成された複数の演算部（ＣＵ）４６５を含む。各演算部は、上述したローカルデータシェア（ＬＤＳ）４３７のような、それ自身の専用ローカルメモリストアを含む。システム４００はまた、頂点インデックスデータ４６８を一時的に記憶するためのキャッシュ４３６を含み、データはキャッシュ４３６から各ＬＤＳ４３７に複製され、それはデータを並列に利用するシェーダプログラムを実現する。パラメータキャッシュ４３６は、ＧＰＵに集積されていてもよいし、ＧＰＵとは別体であって、例えばバス４７６を介してＧＰＵにアクセス可能であってもよい。ＧＰＵは、例えば、幾何シェーダ及び演算シェーダのような他のプログラムを実行することもできる。
【００６０】
システム４００は公知のサポート機能４７７を含んでいてもよく、これは、例えばバス４７６を介してシステムの他の構成要素と通信することができる。そのようなサポート機能は、限定するわけではないが、入力／出力（Ｉ／Ｏ）要素４７９、電源（Ｐ／Ｓ）４８０及びクロック（ＣＬＫ）４８１を含む。
【００６１】
装置４００は、プログラム及び／またはデータを記憶するディスクドライブ、ＣＤ−ＲＯＭドライブ、フラッシュメモリ、テープドライブなどといった大容量記憶装置４８４を選択的に含む。装置４００はまた、装置４００とユーザとの間の相互作用を促進する表示部４８６及びユーザインターフェイス部４８８を含む。表示部４８６は、フラットパネルディスプレイ、冷陰極管（ＣＲＴ）画面、タッチスクリーン、またはテキスト、数字、グラフィカルな記号若しくは画像を表示できる他の装置である。ディスプレイ４８６は、ここに記載される種々の手法によって処理されたレンダリングされた画像４８７を表示する。ユーザインターフェイス４８８は、キーボード、マウス、ジョイスティック、ライトペン、ゲームコントローラ、またはグラフィカルユーザインターフェイス（ＧＵＩ）との関係で使用される他の装置を含む。システム４００はまた、装置がネットワークを介して他の装置と通信することを可能とするネットワークインターフェイス４９０を含む。ネットワークは、例えば、ローカルエリアネットワーク（ＬＡＮ）、インターネットなどのワイドエリアネットワークＢｌｕｅｔｏｏｔｈ（登録商標）ネットワークなどのパーソナルエリアネットワーク、または他のタイプのネットワークである。これらの構成要素は、ハードウェア、ソフトウェア若しくはファームウェアまたはこれらの２以上の組合せにおいて実現される。
【００６２】
上記は本発明の好適な実施形態の完全な説明であるが、種々の変更、変形及び等化を用いることが可能である。したがって、本発明の範囲は、上記の説明を参照して特定されるべきではなく、付随する特許請求の範囲及びそれらの均等の全範囲を参照して特定されるべきである。好適か否かにかかわらずここに記載されるいずれの構成も、好適か否かにかかわらずここに記載される他の構成と組み合わせることができる。以降の特許請求の範囲において、不定冠詞「Ａ」または「Ａｎ」は、明示的に断りがある場合を除き、冠詞に続く項目の１以上の数量を意味する。付随する特許請求の範囲は、文言「・・・のための手段」を用いる所与の請求項にそのような発明特定事項が明示的に記載されない限り、ミーンズプラスファンクションの発明特定事項を含むものとして解釈されるべきではない。
【図１Ａ】
2016524241.tif 000003
【図１Ｂ−１Ｃ】
2016524241.tif 000004
【図１Ｄ】
2016524241.tif 000005
【図１Ｅ】
2016524241.tif 000006
【図２Ａ】
2016524241.tif 000007
【図２Ｂ】
2016524241.tif 000008
【図３】
2016524241.tif 000009
【図４】
2016524241.tif 000010
【国際調査報告】
2016524241.tif 000011