本発明で使用される用語は、本発明での機能を考慮しながら、可能な限り現在広く使用される一般的な用語を選択したが、それは、当業者の意図、判例あるいは新たな技術の出現などによって異なりもする。また、特定の場合は、出願人が任意に選定した用語もあり、その場合、当該発明の説明部分で詳細にその意味を記載する。従って、本発明で使用される用語は、単純な用語の名称ではない、その用語が有する意味と、本発明の全般にわたった内容とを基に定義されなければならない。
明細書全体で、ある部分が他の部分と連結されているとするとき、それは、直接的に連結されている場合だけではなく、その中間に他の素子を挟んで電気的に連結されている場合も含む。また、ある部分がある構成要素を含むとするとき、それは、特別に反対となる記載がない限り、他の構成要素を除くものではなく、他の構成要素をさらに含んでもよいということを意味する。また、明細書に記載された「…部」、「モジュール」などの用語は、少なくとも1つの機能や動作を処理する単位を意味し、それは、ハードウェアまたはソフトウェアで具現されるか、あるいはハードウェアとソフトウェアとの結合によって具現されもする。
本明細書で使用される「構成される」または「含む」というような用語は、明細書上に記載されたさまざまな構成要素、あるいは多くの段階を必ずしもいずれも含むものであると解釈されるものではなく、そのうち一部の構成要素または一部の段階は、含まれないこともあり、またはさらなる構成要素または段階をさらに含んでもよいと解釈されなければならない。
また、本明細書で使用される「第1」または「第2」のように序数を含む用語は、多様な構成要素について説明するところに使用するが、前記構成要素は、前記用語によって限定されるものではない。前記用語は、1つの構成要素を他の構成要素から区別する目的のみに使用される。
以下、添付された図面を参照しながら、ただ例示のための実施形態によって発明について詳細に説明する。下記実施形態は、発明を具体化するためのものであり、発明の権利範囲を制限したり、あるいは限定したりするものではないということは言うまでもない。詳細な説明及び実施形態から、発明が属する技術分野の専門家が容易に類推することができることは、発明の権利範囲に属すると解釈される。
図1は、一実施形態によるコンピューティング装置について説明するための図面である。
図1を参照すれば、コンピューティング装置1は、GPU(graphics processing unit)10、CPU(central processing unit)20、メモリ30及びバス40を含む。図1に図示されたコンピューティング装置1には、実施形態と係わる構成要素だけが図示されている。従って、図1に図示された構成要素以外に、他の汎用的な構成要素がさらに含まれてもよいということを当該技術分野の通常の技術者であるならば、理解することができるであろう。
コンピューティング装置1は、デスクトップコンピュータ、ノート型パソコン、スマートフォン、PDA(personal digital assistant)、携帯型メディアプレイヤ、ビデオゲーム用コンソール、テレビセットトップボックス、タブレットデバイス、電子ブックリーダ、ウェアラブルデバイスなどを例として挙げることができるが、それらに制限されるものではない。すなわち、コンピューティング装置1は、コンテンツのディスプレイのためのグラフィックスプロセッシング機能を有する装置であり、コンピューティング装置1の範疇には多様な装置が含まれる。
CPU 20は、コンピューティング装置1の全般的な動作及び機能を制御するハードウェアである。例えば、CPU 20は、運用体制(OS:operating system)を駆動し、GPU 10のためのグラフィックスAPI(application programming interface)を呼び出し、GPU 10のドライバを実行させることができる。また、CPU 20は、メモリ30に保存された多様なアプリケーション、例えば、ウェブブラウジング・アプリケーション、ゲーム・アプリケーション、ビデオ・アプリケーションなどを実行することができる。
GPU 10は、グラフィックス・パイプライン(graphics pipeline)を遂行するグラフィック専用プロセッサであり、三次元イメージ上の三次元客体を、ディスプレイ用の二次元イメージにレンダリングするために、三次元グラフィックス・パイプラインを遂行するように具現されたハードウェアでもある。例えば、GPU 10は、シェーディング、ブレンディング、イルミネーティングのような多様な機能、及びディスプレイされるピクセルに対するピクセル値を生成するための多様な機能を遂行することもできる。
GPU 10は、タイル基盤(tile-based)グラフィックス・パイプライン、またはタイル基盤レンダリング(TBR:tile-based rendering)を遂行することができる。タイル基盤(又はタイルに基づく)という用語は、動画の各フレームを、複数のタイルに区分した(divide;partitioning)後、タイル単位で(per tile)レンダリングを行うことを意味する。タイル基盤のアーキテクチャは、ピクセル単位でフレームを処理するときより演算量が少なくもなるために、スマートフォン、タブレットデバイスのように、比較的処理性能が低いモバイルデバイス(または、エンベデッドデバイス)で使用するグラフィックスレンダリング方法でもある。
図1を参照すれば、GPU 10は、ビニング・パイプライン(binning pipeline)101及びレンダリング・パイプライン(rendering pipeline)102を含むグラフィックス・パイプラインを遂行することができる。ビニング・パイプライン101は、二次元客体または三次元客体を構成する(make up)バーテックス(vertices)、プリミティブ(primitives)またはパッチ(patches)がどのタイルに含まれるかということを示すタイルリストを生成するプロセスである。そのような理由により、ビニング・パイプライン101は、タイリング・パイプライン(tiling pipeline)、ビニングフェーズ(binning phase)の用語のように、他の用語にも代替可能である。レンダリング・パイプライン102は、ビニング・パイプライン101で生成されたタイルリストに基づいて、タイル単位で、客体をレンダリングするプロセスである。本願における「客体」は「対象」又は「オブジェクト」等のように言及されてもよい。レンダリング・パイプライン102が完了すれば、二次元ディスプレイ画面上に表示される二次元客体または三次元客体のピクセル表現が決定される。レンダリング・パイプライン102は、レンダリングフェーズ(rendering phase)の用語のように、他の用語にも代替可能である。
ビニング・パイプライン101及びレンダリング・パイプライン102それぞれは、テッセレーション・パイプライン(tessellation pipeline)を含んでもよい。すなわち、GPU 10は、ディファードテッセレーション(deferred tessellation)を遂行することができる。MicroSoft社のDirectX11(DX11)API、OpenGL 4.0 APIなどを含んだ一部のグラフィックス・パイプラインは、グラフィックスプリミティブ(または、グラフィックスパッチ)のテッセレーションのためのさらなるプロセッシングステージを含む。テッセレーションは、グラフィックスパッチをさらに小さいグラフィックスプリミティブに分割し、さらに微細なディテールを有するイメージのディスプレイを可能にするプロセスである。コンピューティング装置1のGPU 10で駆動されるビニング・パイプライン101及びレンダリング・パイプライン102を含むグラフィックス・パイプラインは、そのようなテッセレーションを支援することができる。一方、本明細書で、以下で説明される実施形態は、GPU 10によって駆動される。
メモリ30は、コンピューティング装置1内で処理される各種データを保存するハードウェアであり、例えば、メモリ30は、GPU 10及びCPU 20で処理されたデータ及び処理されるデータを保存することができる。また、メモリ30は、GPU 10及びCPU 20によって駆動されるアプリケーション、ドライバなどを保存することができる。メモリ30は、DRAM(dynamic random access memory)・SRAM(static random access memory)のようなRAM(random access memory)、ROM(read-only memory)、EEPROM(electrically erasable and programmable read only memory)、CD(compact disc)−ROM、ブルーレイ、他の光学ディスクストレージ、HDD(hard disk drive)、SSD(solid state drive)またはフラッシュメモリを含み、さらに、コンピューティング装置1にアクセスされる外部の他のストレージデバイスを含んでもよい。
バス40は、コンピューティング装置1内のハードウェア間で、データを送受信することができるように、ハードウェアを連結させるハードウェアであって、バス40は、例えば、PCI bus、PCI Express busのような多様な種類を含んでもよい。
一方、本明細書で言及されるビニング・パイプライン101は、以下の実施形態で説明されるビニング・パイプライン101−1,101−2,101−3または101−4を含むものであり、ビニング・パイプライン101−1,101−2,101−3または101−4のうちいずれか一つに該当する。また、本明細書で言及されるレンダリング・パイプライン102は、以下の実施形態で説明されるレンダリング・パイプライン102−1,102−2,102−3または102−4を含むものであり、レンダリング・パイプライン102−1,102−2,102−3または102−4のうちいずれか一つに該当する。
図2は、タイル基盤レンダリング(TBR)について説明するための図面である。
図2を参照すれば、自動車客体220は、ある動画でのある1フレームに該当すると仮定する。図1のGPU 10は、三次元自動車客体220が含まれた1フレームを、NxM(N、Mは自然数)タイル210に分割する。ここで、三次元自動車客体220が含まれたフレームをタイル210に分割し、どのタイル210に三次元自動車客体220が存在するかということを判断するのは、図1のビニング・パイプライン101によって遂行される。その後、図1のGPU 10は、タイル単位で、タイル210に含まれた三次元自動車客体220をレンダリングし、ピクセル表現に変換する。ここで、タイル単位で、三次元自動車客体220をレンダリングし、ピクセル表現に変換することは、図1のレンダリング・パイプライン102によって遂行される。そのように、1フレームに含まれた三次元自動車客体220を、ピクセル単位でレンダリングするのではない、タイル210を利用してレンダリングすることを、タイル基盤レンダリング(TBR)という。
図3ないし図5は、テッセレーション・パイプラインについて説明するための図面である。以下では、図3ないし図5を連繋させて説明する。前述のように、図3ないし図5で説明するテッセレーション・パイプライン300は、図1のビニング・パイプライン101及びレンダリング・パイプライン102それぞれに、そのまま適用されて含まれるか、あるいは若干変形されて適用される。
図3を参照すれば、テッセレーション・パイプライン300は、ハルシェーダ(hull shader)121、テッセレータ(tessellator)123及びドメインシェーダ(domain shader)125によって遂行される。すなわち、本明細書で説明するテッセレーション・パイプライン300の用語は、ハルシェーダ121によるハルシェーディング、テッセレータ123によるテッセレーティング、及びドメインシェーダ125によるドメインシェーディングのプロセス(または、ステージ)のうち一つ以上のステージを含むと定義される。
ハルシェーダ121は、低次数(low order)の表面を表現する入力コントロールポイント(input control points)を、パッチを構成する(make up)出力コントロールポイント(output control points)に変換する。例えば、ハルシェーダ121は、入力コントロールポイントを変換し、図4に図示されたコントロールポイントP00,P01,P02,P03,P10,P11,P12,P13,P20,P21,P22,P23,P30,P31,P32及びP33によって構成されたメッシュ(mesh)のパッチ410を生成することができる。ここで、該パッチは、三角形、四角形、等値線(isoline)のようなポリゴン形態を有することもできる。
ハルシェーダ121は、パッチを構成する出力コントロールポイントを生成すると同時に、テッセレーションファクタ(TF:tessellation factor、TF)(または、テッセレーションレベル(TL:tessellation level)を決定することができる。テッセレーションファクタ(TF)またはテッセレーションレベル(TL)は、パッチをどの程度分割(partition)するか、またはパッチをいかに分割するかということを示すインデックスである。図5に図示されたテーブル500は、テッセレーションファクタ(TF)と、分割される三角形の個数との関係を定義したテーブルである。テーブル500によれば、テッセレーションファクタ(TF)が1である場合、三角形の個数が1であるので、パッチに対するテッセレーションは行われない。しかし、テッセレーションファクタ(TF)が増加するほど、三角形の個数は幾何級数的に増加する。言い換えれば、テッセレーションファクタ(TF)が増加するほど、分割される三角形の個数が多くなるということは、GPU 10において、あるパッチに対して、処理されなければならない演算量が増加するということを意味する。ただし、テッセレーションファクタ(TF)が増加すればするほど、客体のパッチに対するさらにスムーズな表現は可能である。一方、図5のテーブル500では、分割されるポリゴンが三角形である場合を例として挙げたが、それに制限されるものではなく、該パッチは、四角形、等値線などの他のポリゴンに分割されてもよい。
ハルシェーダ121は、出力パッチの出力コントロールポイント及びテッセレーションファクタ(TF)に係わる情報を、テッセレータ123及びドメインシェーダ125に伝達する。
テッセレータ123は、ハルシェーダ121から受信されたテッセレーションファクタ(TF)を利用して、出力コントロールポイントに対する重心座標系(barycentric coordinates)でのuvw座標及び加重値を計算する。
ドメインシェーダ125は、ハルシェーダ121から受信された出力パッチの出力コントロールポイント及びテッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標は、オプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(tessellated vertices)を生成する。図4を参照すれば、テッセレーティングされたバーテックスの位置は、境界420を形成する(make up)。すなわち、パッチ410は、テッセレーション・パイプラインが遂行されることにより、さらにスムーズになった境界420上のバーテックス(または、プリミティブ)に変換される。
図6は、一実施形態による、図1のGPUの詳細ハードウェア構造を図示したブロック図である。
図6を参照すれば、GPU 10は、グラフィックス・パイプライン100を遂行する入力アセンブラ(input assembler)110、バーテックスシェーダ(vertex shader)115、ハルシェーダ121、テッセレータ123、ドメインシェーダ125、ジオメトリシェーダ(geometry shader)130、ビナ(binner)135、ラスタライザ(rasterizer)140、ピクセルシェーダ(pixel shader)150及び出力マージャ(output merger)160を含んでもよい。また、GPU 10は、コントローラ170及びバッファ180をさらに含んでもよい。一方、GPU 10内で、グラフィックス・パイプライン100を遂行する前述の構成は、以下で説明する機能に基づいて分類されたものでもある。従って、グラフィックス・パイプライン100を遂行する前述の構成それぞれは、以下で説明する機能それぞれを実行させるプログラムロジックまたはソフトウェアモジュールで具現される。それと異なり、グラフィックス・パイプライン100を遂行する前述の構成は、GPU 10内に具備されたサブ(sub)プロセッシングユニット(または、プロセッサコア)それぞれによって具現されもする。すなわち、グラフィックス・パイプライン100を遂行する前述の構成の具現形態は、いずれか一つによって制限されるものではない。さらに、グラフィックス・パイプライン100を遂行する前述の構成の名称は、以下で説明する機能に基づいて付与されたものでもあるが、そのような名称が多様に変更されるということは、当該技術分野の当業者であるならば、理解することができるであろう。例えば、一具現形態によって、ビナ135とコントローラ170は、別個の構成でもあるか、あるいは他の具現形態によって、ビナ135がコントローラ170に含まれるように具現されることにより、別途のビナ135なしに、コントローラ170だけが存在することもある。
一方、本明細書によれば、GPU 10でグラフィックス・パイプライン100を遂行する構成の名称は、説明の便宜のために、Microsoft社のDirect X11(DX11)に定義された名称を使用したが、その構成の名称は、それに制限されるものではない。すなわち、GPU 10でグラフィックス・パイプライン100を遂行する構成は、OpenGL(Open Graphics Library)4.0、CUDA(Compute Unified Device Architecture)6.0のような他のAPIで定義された類似した構成にも対応する。例えば、ドメインシェーダ125は、OpenGL4.0で使用されるテッセレーションエバリュエーションシェーダ(tessellation evaluation shader)にも対応し、GPU 10内の他の構成も同様に、OpenGL 4.0またはCUDA6.0のような他のAPIで使用される構成にも対応するということは、当該技術分野の当業者であるならば、理解することができるであろう。
入力アセンブラ110は、メモリ30(図1)に保存された客体に係わるバーテックスのデータを、グラフィックス・パイプライン100に供給する。グラフィックス・パイプライン100に供給されたバーテックスは、メッシュ(mesh)または表面(surface)の表現であるパッチに係わるものでもあるが、それに制限されるものではない。
バーテックスシェーダ115は、入力アセンブラ110によって供給されたバーテックスをハルシェーダ121の入力コントロールポイントとして伝達する。DirectX9(DX9)で定義されたバーテックスシェーディングは、バーテックスに係わるワールド・ビュー・プロジェクション(world-view-projection)を遂行した。しかし、それとは異なり、テッセレーション・パイプラインが導入したDirectX11(DX11)で定義されたバーテックスシェーディングは、バーテックスに係わるワールド・ビュー・プロジェクションを遂行せず、ただバーテックスを次のステージに伝達してだけである。本実施形態において、バーテックスシェーダ115は、それと類似して動作することができる。すなわち、バーテックスシェーダ115は、入力アセンブラ110によって供給されたバーテックスに対応する入力コントロールポイントのみハルシェーダ121に伝達するだけであり、新たなコントロールポイントを生成しない。
ハルシェーダ121、テッセレータ123及びドメインシェーダ125は、先に図3で説明したテッセレーション・パイプライン300を遂行することができる。すなわち、ハルシェーダ121に入力された入力コントロールポイントは、ドメインシェーダ125から、出力パッチ(output patch)に係わるテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)として出力される。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するためにも使用されるオプション的な構成要素である。
ビナ135は、ドメインシェーダ125またはジオメトリシェーダ130からの出力プリミティブを利用して、ビニングまたはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)を遂行し、出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを生成(ビニング)する。一方、他の実施形態により、ビナ135は、コントローラ170に含まれた構成でもある。
ラスタライザ140は、生成されたタイルリストに基づいて、ドメインシェーダ125またはジオメトリシェーダ130からの出力プリミティブを、二次元空間でのピクセル値に変換する。ピクセルシェーダ150は、デプステスト、クリッピング(clipping)、シザリング(scissoring)、ブレンディングのような追加動作を、ピクセルに対して遂行することもできる。ピクセルシェーダ150のピクセルシェーディング結果は、出力マージャ160によって、バッファ180に保存された後、動画のフレームとしてディスプレイされる。
コントローラ170は、グラフィックス・パイプライン100の各構成要素(入力アセンブラ110、バーテックスシェーダ115、ハルシェーダ121、テッセレータ123、ドメインシェーダ125、ジオメトリシェーダ130、ビナ135、ラスタライザ140、ピクセルシェーダ150及び出力マージャ160)及びバッファ180の全般的な機能及び動作を制御する。一方、コントローラ170は、図7で説明するグラフィックス・パイプライン100のモードを制御することができる。
図7は、一実施形態によってGPUで遂行することができる多種のグラフィックス・パイプラインを選択することについて説明するための図面である。
図7を参照すれば、MODE(1)ないしMODE(8)のグラフィックス・パイプラインは、以下の図面で説明する実施形態であり、コントローラ170は、それらのうち1つのパイプラインがGPU 10で遂行されるように制御することができる。
さらに詳細に説明すれば、コントローラ170は、MODE(1)ないしMODE(8)のグラフィックス・パイプラインに係わる効率モード(efficiency mode)をオフにするか(turn OFF)、あるいはオンにする(turn ON)。効率モードのON/OFFは、コンピューティング装置1のユーザによって設定されるか、あるいはグラフィックス・パイプラインによって処理される動画の処理環境(例えば、解像度、容量、コンピューティング装置1の性能など)に依存する。
効率モードがオフになった場合、コントローラ170は、一般的なグラフィックス・パイプライン109を遂行することができる。ここで、一般的なグラフィックス・パイプライン109は、公知の従来のグラフィックス・パイプラインであり、例えば、DirectX9(DX9)、DirectX10(DX10)、DirectX11(DX11)、CUDA 6.0、OpenGL 4.0などでもある。
効率モードがオンになったON場合、コントローラ170は、MODE(1)ないしMODE(8)のグラフィックス・パイプラインのうちいずれか一つを遂行することができる。MODE(1)ないしMODE(8)のうちいずれか1つの選択は、コンピューティング装置1のユーザによって設定されるか、あるいはグラフィックス・パイプラインによって処理される動画の処理環境(例えば、タイルサイズ、解像度、容量、コンピューティング装置1の性能など)に依存する。MODE(1)の場合、コントローラ170は、ビニング・パイプライン101−1及びレンダリング・パイプライン102−1を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(2)の場合、コントローラ170は、ビニング・パイプライン101−2及びレンダリング・パイプライン102−1を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(3)の場合、コントローラ170は、ビニング・パイプライン101−3及びレンダリング・パイプライン102−1を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(4)の場合、コントローラ170は、ビニング・パイプライン101−4及びレンダリング・パイプライン102−1を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(5)の場合、コントローラ170は、ビニング・パイプライン101−3及びレンダリング・パイプライン102−2を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(6)の場合、コントローラ170は、ビニング・パイプライン101−4及びレンダリング・パイプライン102−2を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(7)の場合、コントローラ170は、ビニング・パイプライン101−3、第1レンダリング・パイプライン102−3及び第2レンダリング・パイプライン102−4を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御し、MODE(8)の場合、コントローラ170は、ビニング・パイプライン101−4、第1レンダリング・パイプライン102−3及び第2レンダリング・パイプライン102−4を含んだグラフィックス・パイプラインが、GPU 10で遂行されるように制御することができる。以下では、MODE(1)ないしMODE(8)それぞれのグラフィックス・パイプラインに係わる実施形態について、さらに詳細に説明する。
図8A及び図8Bは、一実施形態による三次元客体を分割するための、タイルの個数と、グラフィックス処理性能(または、効率)との関係について説明するための図面である。
図8Aを参照すれば、三次元客体815を、10x10のタイル810に分割した場合を示し、図8Bを参照すれば、三次元客体815を、2x2のタイル820に分割した場合を示す。GPU 10は、タイル単位で、タイル基盤レンダリングまたはタイル基盤グラフィックス・パイプラインを遂行するために、図8Aに図示された三次元客体815に対するレンダリングは、100個のタイルに対して遂行される。それとは異なり、図8Bに図示された三次元客体815に対するレンダリングは、ただ4個のタイルに対してのみ遂行される。図8Aに図示されたタイル810のうちでは、1/3ほどだけが三次元客体815にオーバーラップされるために、残りの2/3ほどのタイル810については、レンダリングがスキップされるであろうが、結局は、100個のタイル810それぞれに対するビニング(または、タイリング)は、先行されるしかないということは言うまでもない。それに比して、図8Bに図示された4個のタイル820それぞれは、いずれも三次元客体815にオーバーラップされるから、4個のタイル820それぞれに対する並列的なグラフィックスプロセスが遂行される。
一方、現在多くのGPUは、SIMT(single instruction multiple thread)アーキテクチャによって製造されている実情である。SIMTアーキテクチャは、1つのプログラムで多くのデータを処理するためのSPMD(single program multiple data)プロセッサを具現する方式のうち一つである。SIMTアーキテクチャは、さらに小さいコントロール・ハードウェアを使用して、多量のデータを処理することは可能であるが、スレッド(threads)それぞれの流れが分岐されること(thread divergence)を処理し難く、処理効率が低くなるという問題が起こる。
前述の図8A及び図8Bを比較すれば、SIMTアーキテクチャは、図8Aの100個のタイル810に対して、100個のスレッドを生成して処理してこそ作業を完了することができるが、それとは異なり、SIMTアーキテクチャは、図8Bの4個のタイル820については、さらに少ないただ4個のスレッドのみを生成して処理すれば、作業を完了することができる。図8Aでの1つのタイルの大きさ、及び1つのタイルに含まれた客体の大きさは、図8Bと比較して小さいために、処理されなければならないグラフィックデータは、図8Aの場合、さらに小さくてよい。しかし、スレッド複雑度(thread divergence)がはるかに増大するために、図8Aのように、多くのタイル810で三次元客体815を分割することが、必ずしも図8Bの場合より有利であるといは言えない。そのような理由のために、SIMTアーキテクチャで具現された最近のGPUは、大きいタイルサイズ(big tile size)を適用する実情である。
図9は、一実施形態による、出力パッチの出力コントロールポイントと、テッセレーティングされたプリミティブとの関係について説明するための図面である。
先に図8A及び図8Bで説明したように、GPU 10が大きいタイルサイズを利用する場合、タイルサイズが大きくなるにつれ、三次元客体のあるパッチ410がいずれか1つのタイル(tile0)901に含まれる確率が上昇する。ビニング・パイプライン101(図1)においてテッセレーション・パイプラインは、出力パッチ410(出力コントロールポイント415)をテッセレーティングし、さらに多くの個数のテッセレーティングされたプリミティブ425を生成(produce)し、テッセレーティングされたプリミティブ425に対するビニング(または、タイリング)を行う。そのとき、図9に図示されているように、1つのタイル901内に含まれた出力パッチ410(出力コントロールポイント415)が、テッセレーション・パイプラインによって処理されるとしても、テッセレーティングされたプリミティブ425が形成する(form)境界(boundary)420は、出力パッチ410が形成する境界(boundary)と同様に、1つのタイル902内に位置することができる。なぜならは、テッセレーティングされたプリミティブ425が形成する境界420は、出力パッチ410が形成する境界内に位置するように、GPU 10のグラフィックス・パイプラインがプログラミングされるからである。また、そうではない場合には、コンパイラ(compiler)によってデバッギング(debugging)される。
従って、出力パッチ410(出力コントロールポイント415)に対するビニング(または、タイリング)の結果は、タイル(tile0)901であり、テッセレーティングされたプリミティブ425に対するビニングの結果であるタイル(tile0)902と同一である。それにより、ビニング・パイプライン101(図1)のテッセレーション・パイプラインにおいて、テッセレータ123(図6)によるテッセレーションがスキップされるとしても、最終的なビニング・パイプライン101(図1)の結果は、テッセレータ123(図6)によるテッセレーションがスキップされない場合と同一であると仮定することができる。
一方、出力パッチ410(出力コントロールポイント415)に対するテッセレーションファクタ(TF)(または、テッセレーションレベル(TL))についても、前述の仮定が成立する。例えば、低いテッセレーションファクタ(例えば、TF=3)によって生成されたテッセレーティングされたプリミティブが形成する境界は、高いテッセレーションファクタ(例えば、TF=13)によって生成されたテッセレーティングされたプリミティブが形成する境界内に含まれもする。従って、ビニング・パイプライン101(図1)のテッセレーション・パイプラインにおいて、ハルシェーダ121(図6)によって決定されたテッセレーションファクタ(例えば、TF=13)ではない、さらに低いテッセレーションファクタ(例えば、TF=3)を新たに設定し、テッセレーション・パイプラインを遂行するとしても、ハルシェーダ121(図6)によって決定されたテッセレーションファクタ(例えば、TF=13)を利用した場合、及び新たに設定された、さらに低いテッセレーションファクタ(例えば、TF=3)を利用した場合のビニング(または、タイリング)結果は同一であると仮定することができる。
一方、GPU 10で駆動されるグラフィックス・パイプラインを設計して検査するコンパイラは、図9で説明した仮定のように動作しないグラフィックス・パイプラインが設計(または、プログラミング)された場合、それをデバッギングし、図9で説明した仮定のように動作するようにコンパイリングすることができる。
以下の図10ないし図21で説明する実施形態は、前述の仮定を前提として動作するが、それらに制限されるものではない。
図10は、一実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図10を参照すれば、ビニング・パイプライン101−1及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインは、図7で説明したMODE(1)に対応する。一方、図10に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図10で説明した構成及びパイプラインステージ以外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
バーテックスシェーダ115は、メモリ30に保存されたバーテックス1001を利用して、バーテックスシェーディング1011を行う。バーテックスシェーダ115は、バーテックス1001を変換し、ハルシェーダ121に入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1012を行う。ハルシェーダ121は、パッチを構成する出力コントロールポイントを生成すると同時に、テッセレーションファクタ(TF)を決定することができる。ハルシェーダ121は、出力パッチの出力コントロールポイントに係わる情報を、ジオメトリシェーダ130またはビナ135に伝達する。
図3で説明したように、一般的なテッセレーション・パイプライン300(図3)は、ハルシェーダ121、テッセレータ123及びドメインシェーダ125のステージをいずれも含んでいるが、図10によれば、テッセレータ123及びドメインシェーダ125のステージはスキップされる。その理由は、先に図9で説明した仮定のように、パッチ410(図9)のビニング結果と、テッセレーティングされたプリミティブ425のビニング結果は、同一でもあるからである。
ジオメトリシェーダ130は、ハルシェーダ121から出力された出力パッチの出力コントロールポイント以外に、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング1013を遂行するためのオプション的な構成要素である。従って、ジオメトリシェーディング1013は、スキップされもする。
ジオメトリシェーディング1013がスキップされた場合、ビナ135は、ハルシェーダ121から出力された出力パッチの出力プリミティブを利用して、ビニング1014またはタイリングを行う。もしジオメトリシェーディング1013が行われた場合、ビナ135は、ジオメトリシェーダ130から出力された出力パッチの出力プリミティブを利用して、ビニング1014またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、出力パッチの出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを予測するビニング1014を行う。そのとき、ビニングされたタイルリストは、可視性ストリーム(visibility stream)として、メモリ30のビンストリーム(bin stream)1002に保存される。可視性ストリームは、入力パッチ(または、入力コントロールポイント、入力プリミティブ)または出力パッチ(または、出力コントロールポイント、出力プリミティブ)がタイルで見えるか否かということを示すストリームでもある。入力パッチ(または、入力コントロールポイント、入力プリミティブ)に係わる可視性ストリームは、入力可視性ストリーム(input visibility stream)であり、出力パッチ(または、出力コントロールポイント、出力プリミティブ)に係わる可視性ストリームは、出力可視性ストリーム(output visibility stream)であると定義される。
ビナ135は、ビニング1014の結果、ハルシェーダ121から出力された出力パッチの出力プリミティブが、1つのタイルに含まれるか否かということを判断する。出力パッチが1つのタイルに含まれる場合、ビナ135は、PASS(1)により、出力パッチが1つのタイルに含まれるという情報を示す可視性ストリームをビンストリーム1002に保存する。それにより、1出力パッチに対するビニング・パイプライン101−1が完了する。すなわち、PASS(1)によれば、テッセレータ123のテッセレーティング1015、及びドメインシェーダ125のドメインシェーディング1016がスキップされる。
しかし、出力パッチが1つのタイルに含まれない場合、ビナ135は、PASS(2)により、出力パッチに対するテッセレータ123のテッセレーティング1015、及びドメインシェーダ125のドメインシェーディング1016が行われるように制御する。すなわち、PASS(2)は、ビニング1014の結果、出力パッチが1つのタイルに含まれない場合にのみ進められる。
テッセレータ123は、ハルシェーダ121から受信されたテッセレーションファクタ(TF)を利用して、出力コントロールポイントに対する重心座標系でのuvw座標及び加重値を計算するテッセレーティング1015を行う。
ドメインシェーダ125は、ハルシェーダ121から受信された出力パッチの出力コントロールポイント及びテッセレーションファクタに係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1016を行う。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング1017を行うために使用されるオプション的な構成要素である。従って、PASS(2)でも、ジオメトリシェーディング1017は、スキップされもする。
ビナ135は、PASS(2)により、ドメインシェーダ125またはジオメトリシェーダ130から出力されたテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1018またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、テッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを予測するビニング1018を行う。そのとき、ビニングされたタイルリストは、可視性ストリームとして、メモリ30のビンストリーム1002に保存される。
GPU 10は、ビニング・パイプライン101−1が完了した場合、タイル単位で、レンダリング・パイプライン102−1を遂行する。レンダリング・パイプライン102−1は、先に図6で説明したグラフィックス・パイプライン100の入力アセンブラ110、バーテックスシェーダ115、ハルシェーダ121、テッセレータ123、ドメインシェーダ125、ジオメトリシェーダ130、ラスタライザ140、ピクセルシェーダ150及び出力マージャ160によるステージを遂行することを含んでもよい。
以上で説明したMODE(1)による図10のビニング・パイプライン101−1は、出力パッチが1タイルに含まれる場合、テッセレータ123によるテッセレーティング1015をスキップすることができるので、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成(produce)しない。従って、テッセレータ123によるテッセレーティング1015を必須に行わなければならない図3のテッセレーション・パイプライン300(図3)と比較するとき、グラフィックデータの演算量をさらに減らすことができる。
図11は、一実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図11のフローチャートは、図10で説明したMODE(1)による、ビニング・パイプライン101−1及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図10で説明した内容は、図11のフローチャートに適用される。
1101段階において、バーテックスシェーダ115は、メモリ30に保存されたバーテックス1001を利用して、バーテックスシェーディング1011を行う。
1102段階において、ハルシェーダ121は、入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1012を行う。ハルシェーダ121は、出力コントロールポイントを生成すると同時に、テッセレーションファクタ(TF)を決定することができる。ハルシェーダ121は、出力パッチの出力コントロールポイントに係わる情報をビナ135に伝達する。
1103段階において、ビナ135は、出力パッチの出力プリミティブを利用して、ビニング1014またはタイリングを行う。
1104段階において、ビナ135は、ビニング1014の結果、ハルシェーダ121から出力された出力パッチの出力プリミティブが1つのタイルに含まれるか否かということを判断する。もし出力パッチが1タイルに含まれる場合、1105段階に進む。しかし、出力パッチが1タイルに含まれない場合、1107段階に進む。
1105段階において、ビニング1014の結果、出力パッチが1タイルに含まれる場合、ビナ135は、出力パッチの出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを予測するビニング1014を行い、ビニングされたタイルリストに係わる可視性ストリームを、メモリ30のビンストリーム1002に保存する(PASS(1))。
1106段階において、ラスタライザ140、ピクセルシェーダ150及び出力マージャ160は、レンダリング・パイプライン102−1を遂行する。そのとき、レンダリング・パイプライン102−1には、ビニング・パイプライン101−1と同様に、入力アセンブラ110、バーテックスシェーダ115、ハルシェーダ121、テッセレータ123、ドメインシェーダ125及びジオメトリシェーダ130によるステージが含まれてもよい。
1107段階において、ビニング1014の結果、出力パッチが1タイルに含まれない場合、テッセレータ123は、ハルシェーダ121から受信されたテッセレーションファクタ(TF)を利用して、出力パッチの出力コントロールポイントに係わる重心座標系でのuvw座標及び加重値を計算するテッセレーティング1015を行う(PASS(2))。
1108段階において、ドメインシェーダ125は、ハルシェーダ121から受信された出力パッチの出力コントロールポイント及びテッセレーションファクタに係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1016を行う。
1109段階において、ビナ135は、テッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1018またはタイリングを行う。1109段階が完了した後、1105段階においてビナ135は、デプステスト(または、tile Z test)などを遂行し、テッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを予測するビニング1018を行い、ビニングされたタイルリストに係わる可視性ストリームをメモリ30のビンストリーム1002に保存する。
図12は、他の実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図12を参照すれば、ビニング・パイプライン101−2及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインは、図7で説明したMODE(2)に対応する。一方、図12に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図12で説明した構成及びパイプラインステージ以外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
バーテックスシェーダ115は、メモリ30に保存されたバーテックス1201を利用して、バーテックスシェーディング1211を行う。バーテックスシェーダ115は、バーテックス1201を変換し、ハルシェーダ121に入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1212を行う。ハルシェーダ121は、パッチを構成する出力コントロールポイントを生成すると同時に、第1テッセレーションファクタ(TF)を決定することができる。
テッセレータ123は、ハルシェーダ121から第1テッセレーションファクタ(TF)を受信し、第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を新たに設定する。そして、テッセレータ123は、新たに設定された第2テッセレーションファクタ(TF)を利用して、出力コントロールポイントに係わる重心座標系でのuvw座標及び加重値を計算するテッセレーティング1213を行う。
図3で説明したように、一般的なテッセレーション・パイプライン300(図3)においてテッセレータ123は、ハルシェーダ121によって決定されたテッセレーションファクタ(TF)をそのまま利用した。しかし、先に図9で説明した仮定のように、テッセレータ123が、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を利用するとしても、ビニング結果は同一である。言い換えれば、テッセレーションファクタが低いほど、生成(produce)されるプリミティブ(三角形)の個数が少なくなるので、GPU 10の演算量は減り、GPU 10は、同一のビニング結果を獲得することができる。
ドメインシェーダ125は、出力パッチの出力コントロールポイント及び第2テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1214を行う。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング1215を行うために使用されるオプション的な構成要素である。従って、ジオメトリシェーディング1215は、スキップされもする。
ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1216またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを予測するビニング1216を行う。
ビナ135は、ビニング1216の結果、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれるか否かということを判断する。
第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれる場合、ビナ135は、PASS(1)により、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれるという情報を示す可視性ストリームを、ビンストリーム1202に保存する。それにより、第2テッセレーションファクタ(TF)を利用したビニング・パイプライン101−2が完了する。すなわち、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を利用して、ビニング・パイプライン101−2が完了したので、GPU 10は、さらに少ない演算量で、ビニング・パイプライン101−2を完了させることができる。
第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれない場合、ビナ135は、PASS(2)により、テッセレーティング1217が行われるように制御する。
PASS(2)によれば、テッセレータ123は、新たに設定された第2テッセレーションファクタ(TF)ではない、ハルシェーダ121によって本来決定された第1テッセレーションファクタ(TF)を利用して、出力コントロールポイントに係わる重心座標系でのuvw座標及び加重値を計算するテッセレーティング1217を行う。
ドメインシェーダ125は、出力パッチの出力コントロールポイント及び第1テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1218を行う。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング1219を行うために使用されるオプション的な構成要素である。従って、ジオメトリシェーディング1219は、スキップされもする。
ビナ135は、第1テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1220またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、第1テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを予測するビニング1220を行う。そして、ビナ135は、テッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)に係わる可視性ストリームを、ビンストリーム1202に保存する。それにより、第1テッセレーションファクタ(TF)を利用したビニング・パイプライン101−2が完了する。
GPU 10は、ビニング・パイプライン101−2が完了した場合、タイル単位でレンダリング・パイプライン102−1を遂行する。レンダリング・パイプライン102−1は、先に図6で説明したグラフィックス・パイプライン100の入力アセンブラ110、バーテックスシェーダ115、ハルシェーダ121、テッセレータ123、ドメインシェーダ125、ジオメトリシェーダ130、ラスタライザ140、ピクセルシェーダ150及び出力マージャ160によるステージを遂行することを含んでもよい。
以上で説明したMODE(2)による図12のビニング・パイプライン101−2は、低いテッセレータファクタを利用して、テッセレータ123によるテッセレーティング1213を行うことができるので、さらに少ない個数のテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成(produce)することができる。従って、図3のテッセレーション・パイプライン300(図3)と比較するとき、グラフィックデータの演算量をさらに減らすことができる。
図13は、他の実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図13のフローチャートは、図12で説明したMODE(2)によるビニング・パイプライン101−2及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図12で説明した内容は、図13のフローチャートに適用される。
1301段階において、バーテックスシェーダ115は、メモリ30に保存されたバーテックス1201を利用して、バーテックスシェーディング1211を行う。
1302段階において、ハルシェーダ121は、入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1212を行う。ハルシェーダ121は、出力コントロールポイントを生成すると同時に、第1テッセレーションファクタ(TF)を決定することができる。
1303段階において、テッセレータ123は、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を利用して、出力パッチの出力コントロールポイントに係わるテッセレーティング1213を行う。
1304段階において、ドメインシェーダ125は、出力パッチの出力コントロールポイント及び第2テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1214を行う。
1305段階において、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1216またはタイリングを行う。
1306段階において、ビナ135は、ビニング1216の結果、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれるか否かということを判断する。もし第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれる場合、1307段階に進む。しかし、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1タイルに含まれない場合、1309段階に進む。
1307段階において、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれる場合、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれるという情報を示す可視性ストリームを、ビンストリーム1202に保存する。
1308段階において、ラスタライザ140、ピクセルシェーダ150及び出力マージャ160は、レンダリング・パイプライン102−1を遂行する。そのとき、レンダリング・パイプライン102−1には、ビニング・パイプライン101−2と同様に、入力アセンブラ110、バーテックスシェーダ115、ハルシェーダ121、テッセレータ123、ドメインシェーダ125及びジオメトリシェーダ130によるステージが含まれてもよい。
1309段階において、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルに含まれない場合、テッセレータ123は、新たに設定された第2テッセレーションファクタ(TF)ではない、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)を利用して、出力パッチの出力コントロールポイントに係わるテッセレーティング1217を行う。
1310段階において、ドメインシェーダ125は、出力パッチの出力コントロールポイント及び第1テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1218を行う。
1311段階において、ビナ135は、第1テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1220またはタイリングを行う。1311段階が完了した後、1307段階においてビナ135は、テッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)に係わる可視性ストリームを、ビンストリーム1202に保存する。
図14は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図14を参照すれば、ビニング・パイプライン101−3及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインは、図7で説明したMODE(3)に対応する。一方、図14に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図14で説明した構成及びパイプラインステージ以外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
バーテックスシェーダ115は、メモリ30に保存されたバーテックス1401を利用して、バーテックスシェーディング1411を行う。バーテックスシェーダ115は、バーテックス1401を変換し、ハルシェーダ121に入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1412を行う。ハルシェーダ121は、出力パッチの出力コントロールポイントに係わる情報をビナ135に伝達する。
図3で説明したように、一般的なテッセレーション・パイプライン300(図3)は、ハルシェーダ121、テッセレータ123及びドメインシェーダ125のステージをいずれも含んでいるが、図14によれば、テッセレータ123及びドメインシェーダ125のステージはスキップされる。その理由は、先に図9で説明した仮定のように、パッチ410(図9)のビニング結果と、テッセレーティングされたプリミティブ425のビニング結果は、同一でもあるからである。もしビニング結果が同じではないとしても、レンダリング・パイプライン102−1において、カーリング(curling)、クリッピング(clipping)、HSR(hidden surface removal)などのステージが遂行されるために、最終的なピクセレンダリング結果は同一である。
ビナ135は、ハルシェーダ121から出力された出力パッチの出力プリミティブを利用して、ビニング1413またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、出力パッチの出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを予測するビニング1413を行う。そのとき、ビニングされたタイルリストは、可視性ストリームとして、メモリ30のビンストリーム(1402)に保存される。
図10ないし図13で説明した実施形態と異なり、ビナ135は、ビニング1413の結果、ハルシェーダ121から出力された出力パッチの出力プリミティブが、1つのタイルに含まれるか否かということを判断しない。すなわち、出力パッチの出力プリミティブは、1つのタイルまたは多くのタイルに含まれてもよい。
GPU 10は、ビニング・パイプライン101−3が完了した場合、タイル単位でレンダリング・パイプライン102−1を遂行する。レンダリング・パイプライン102−1は、バーテックスシェーダ115によるバーテックスシェーディング1421、ハルシェーダ121によるハルシェーディング1422、テッセレータ123によるテッセレーティング1423、ドメインシェーダ125によるドメインシェーディング1424、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング1425、ラスタライザ140によるラスタライジング1426、ピクセルシェーダ150によるピクセルシェーディング1427のステージを含んでもよい。ピクセルシェーダ150によるピクセルシェーディング1427の結果は、バッファ1403に保存される。
以上で説明したMODE(3)による図14のグラフィックス・パイプラインは、ビニング・パイプライン101−3において、テッセレータ123によるテッセレーティングをスキップすることができるので、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成(produce)しない。従って、テッセレータ123によるテッセレーティングを必須に行わなければならない図3のテッセレーション・パイプライン300(図3)と比較するとき、グラフィックデータの演算量をさらに減らすことができる。
図15は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図15のフローチャートは、図14で説明したMODE(3)によるビニング・パイプライン101−3及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図14で説明した内容は、図15のフローチャートに適用される。
1511段階ないし1514段階を含むパイプライン1510は、ビニング・パイプライン101−3に対応し、1521段階を含むパイプライン1520は、レンダリング・パイプライン102−1に対応する。
1511段階において、バーテックスシェーダ115は、メモリ30に保存されたバーテックス1401を利用して、バーテックスシェーディング1411を行う。
1512段階において、ハルシェーダ121は、入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1412を行う。
1513段階において、ビナ135は、出力パッチの出力コントロールポイントに係わるビニング1413またはタイリングを行う。
1514段階において、ビナ135は、ビニング1413の結果、出力パッチの出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを、可視性ストリームとして、メモリ30のビンストリーム1402に保存する。図10ないし図13で説明した実施形態と異なり、ビナ135は、ハルシェーダ121から出力された出力パッチの出力プリミティブが、1つのタイルに含まれるか否かということを判断しない。すなわち、出力パッチの出力プリミティブは、1つのタイルまたは多くのタイルに含まれてもよい。
1521段階において、GPU 10は、タイル単位でレンダリング・パイプライン102−1を遂行する。レンダリング・パイプライン102−1は、バーテックスシェーダ115によるバーテックスシェーディング1421、ハルシェーダ121によるハルシェーディング1422、テッセレータ123によるテッセレーティング1423、ドメインシェーダ125によるドメインシェーディング1424、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング1425、ラスタライザ140によるラスタライジング1426、ピクセルシェーダ150によるピクセルシェーディング1427のステージを含んでもよい。
図16は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図16を参照すれば、ビニング・パイプライン101−4及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインは、図7で説明したMODE(4)に対応する。一方、図12に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図16で説明した構成及びパイプラインステージ外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
バーテックスシェーダ115は、メモリ30に保存されたバーテックス1601を利用して、バーテックスシェーディング1611を行う。バーテックスシェーダ115は、バーテックス1601を変換し、ハルシェーダ121に入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1612を行う。ハルシェーダ121は、パッチを構成する出力コントロールポイントを生成すると同時に、第1テッセレーションファクタ(TF)を決定することができる。
テッセレータ123は、ハルシェーダ121から、第1テッセレーションファクタ(TF)を受信し、第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を新たに設定する。そして、テッセレータ123は、新たに設定された第2テッセレーションファクタ(TF)を利用して、出力コントロールポイントに係わる重心座標系でのuvw座標及び加重値を計算するテッセレーティング1613を行う。
図3で説明したように、一般的なテッセレーション・パイプライン300(図3)において、テッセレータ123は、ハルシェーダ121によって決定されたテッセレーションファクタ(TF)をそのまま利用した。しかし、先に図9で説明した仮定のように、テッセレータ123が、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を利用するとしても、ビニング結果は同一である。もしビニング結果が同じではないとしても、レンダリング・パイプライン102−1において、カーリング、クリッピング、HSRなどのステージが遂行されるために、最終的なピクセレンダリング結果は同一である。
ドメインシェーダ125は、出力パッチの出力コントロールポイント及び第2テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1614)を行う。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング1615を行うために使用されるオプション的な構成要素である。従って、ジオメトリシェーディング1615は、スキップされもする。
ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1616)またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを予測するビニング1616を行う。そのとき、ビニングされたタイルリストは、可視性ストリームとして、メモリ30のビンストリーム1602に保存される。
図10ないし図13で説明した実施形態と異なり、ビナ135は、ビニング1616の結果、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が、1つのタイルに含まれるか否かということを判断しない。すなわち、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)は、1つのタイルまたは多くのタイルに含まれてもよい。
GPU 10は、ビニング・パイプライン101−4が完了した場合、タイル単位でレンダリング・パイプライン102−1を遂行する。レンダリング・パイプライン102−1は、バーテックスシェーダ115によるバーテックスシェーディング1621、ハルシェーダ121によるハルシェーディング1622、テッセレータ123によるテッセレーティング1623、ドメインシェーダ125によるドメインシェーディング1624、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング1625、ラスタライザ140によるラスタライジング1626、ピクセルシェーダ150によるピクセルシェーディング1627のステージを含んでもよい。ピクセルシェーダ150によるピクセルシェーディング1627の結果は、バッファ1603に保存される。
以上で説明したMODE(4)による図16のビニング・パイプライン101−4は、低いテッセレータファクタを利用して、テッセレータ123によるテッセレーティング1613を行うことができるので、さらに少ない個数のテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成(produce)することができる。従って、図3のテッセレーション・パイプライン300(図3)と比較するとき、グラフィックデータの演算量をさらに減らすことができる。
図17は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図17のフローチャートは、図16で説明したMODE(4)によるビニング・パイプライン101−4及びレンダリング・パイプライン102−1を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図16で説明した内容は、図17のフローチャートに適用される。
1711段階ないし1716段階を含むパイプライン1710は、ビニング・パイプライン101−4に対応し、1721段階を含むパイプライン1720は、レンダリング・パイプライン102−1に対応する。
1711段階において、バーテックスシェーダ115は、メモリ30に保存されたバーテックス1601を利用して、バーテックスシェーディング1611を行う。
1712段階において、ハルシェーダ121は、入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング1612を行う。
1713段階において、テッセレータ123は、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を利用して、出力パッチの出力コントロールポイントに係わるテッセレーティング1613を行う。
1714段階において、ドメインシェーダ125は、出力パッチの出力コントロールポイント及び第2テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング1614)を行う。
1715段階において、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング1616またはタイリングを行う。
1716段階において、ビナ135は、ビニング1616の結果、出力パッチの出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを可視性ストリームとして、メモリ30のビンストリーム1602に保存する。図10ないし図13で説明した実施形態と異なり、ビナ135は、ハルシェーダ121から出力された出力パッチの出力プリミティブが、1つのタイルに含まれるか否かということを判断しない。すなわち、出力パッチの出力プリミティブは、1つのタイルまたは多くのタイルに含まれてもよい。
1721段階において、GPU 10は、タイル単位でレンダリング・パイプライン102−1を遂行する。レンダリング・パイプライン102−1は、バーテックスシェーダ115によるバーテックスシェーディング1621、ハルシェーダ121によるハルシェーディング1622、テッセレータ123によるテッセレーティング1623、ドメインシェーダ125によるドメインシェーディング1624、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング1625、ラスタライザ140によるラスタライジング1626、ピクセルシェーダ150によるピクセルシェーディング1627のステージを含んでもよい。そのとき、テッセレーティング1623及びドメインシェーディング1624は、第1テッセレーションファクタ(TF)を利用して行われる。
図18は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図18を参照すれば、ビニング・パイプライン101−3及びレンダリング・パイプライン102−2を含むグラフィックス・パイプラインは、図7で説明したMODE(5)に対応する。一方、図18に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図18で説明した構成及びパイプラインステージ以外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
図18に図示されたグラフィックス・パイプラインについては、説明の便宜のために、図19に図示された、複数のタイル(tile A,tile B,tile C及びtile D)にクロッシングされた(crossed)パッチ1900に対して遂行されると仮定して説明する。
バーテックスシェーダ115は、メモリ30に保存されたバーテックス1801を利用して、バーテックスシェーディング1811を行う。バーテックスシェーダ115は、バーテックス1801を変換し、ハルシェーダ121に入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチ1900を構成する出力コントロールポイントに変換するハルシェーディング1812を行う。ハルシェーダ121は、出力パッチ1900の出力コントロールポイントに係わる情報をビナ135に伝達する。
図3で説明したように、一般的なテッセレーション・パイプライン300(図3)は、ハルシェーダ121、テッセレータ123及びドメインシェーダ125のステージをいずれも含んでいるが、図18によれば、テッセレータ123及びドメインシェーダ125のステージはスキップされる。その理由は、先に図9で説明した仮定のように、パッチ410(図9)のビニング結果と、テッセレーティングされたプリミティブ425のビニング結果は、同一でもあるからである。もしビニング結果が同じではないとしても、レンダリング・パイプライン102−2において、カーリング、クリッピング、HSRなどのステージが遂行されるために、最終的なピクセレンダリング結果は同一である。
ビナ135は、ハルシェーダ121から出力された出力パッチ1900の出力プリミティブを利用して、ビニング1813またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、出力パッチ1900の出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを予測するビニング1813を行う。そのとき、ビニングされたタイルリストは、可視性ストリームとして、メモリ30のビンストリーム1802に保存される。
ビナ135は、ビニング1813の結果、ハルシェーダ121から出力された出力パッチ1900の出力プリミティブが、複数のタイル(例えば、図19のtile A,tile B,tile C及びtile D)に含まれるか否かということを判断する。すなわち、ビナ135は、出力パッチ1900の出力プリミティブに対して、タイルクロッシング(tile -crossing)いかんを判断する。
出力パッチ1900がタイルクロッシングされた場合(または、出力パッチ1900が、複数のタイルtile A,tile B,tile C及びtile Dに含まれる場合)、ビナ135は、複数のタイル(tile A,tile B,tile C及びtile D)のレンダリング順序をスケジューリングする。スケジューリング結果、ビナ135は、複数のタイルのうち、最初のレンダリング順序でスケジューリングされたタイル(tile A)を、基準タイル(reference tile)として決定する。ここで、基準タイルは複数のタイルのうち左側の最上端に位置したtile Aであると仮定して説明するが、それに制限されるものではなく、基準タイルは、左下端タイル、右上端タイル、右下端タイル、真ん中のタイルのような多様な所定基準によって変わることができる。ビナ135は、基準タイルtile Aに対するレンダリング・パイプライン102−2が、隣接タイル(neighboring tiles)(tile B,tile C及びtile D)より先に遂行されるように、レンダリング・パイプライン102−2の遂行タイミングをスケジューリングする。複数のタイル(tile A,tile B,tile C及びtile D)それぞれに対するレンダリング・パイプライン102−2は、GPU 10内の1つのプロセッサユニット(または、1つのプロセッサコア)によって順次に遂行されるか、あるいはGPU 10内の複数のプロセッサユニット(または、複数のプロセッサコア)によって並列的に遂行される。そのような、基準タイルの決定、及びレンダリングタイミングのスケジューリングは、ビナ135ではない、コントローラ170、またはGPU 10内の他の構成によって行われてもよい。すなわち、基準タイルの決定、及びレンダリングタイミングのスケジューリングの遂行の主体は、いずれか一つによって制限されるものではない。
出力パッチ1900がタイルクロッシングされた場合、ビナ135は、基準タイル(tile A)の決定結果、及びレンダリングタイミングのスケジューリング結果を、メモリ30に保存する。
それとは異なり、出力パッチ1900がタイルクロッシングされていない場合(または、出力パッチ1900が1つのタイルにだけ含まれる場合)、ビナ135は、基準タイルの決定、及びレンダリングタイミングのスケジューリングを行わない。
GPU 10は、ビニング・パイプライン101−3が完了した場合、タイル単位でレンダリング・パイプライン102−2を遂行する。そのとき、ビニング・パイプライン101−3において、基準タイルがtile Aであると決定されたので、GPU 10は、基準タイル(tile A)に対するレンダリング・パイプライン102−2をまず遂行する。
基準タイル(tile A)に対するレンダリング・パイプライン102−2は、バーテックスシェーダ115によるバーテックスシェーディング1821、ハルシェーダ121によるハルシェーディング1822、テッセレータ123によるテッセレーティング1823、ドメインシェーダ125によるドメインシェーディング1824、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング1825、ラスタライザ140によるラスタライジング1826、ピクセルシェーダ150によるピクセルシェーディング1827のステージを含んでもよい。ピクセルシェーダ150によるピクセルシェーディング1827の結果は、バッファ1803に保存される。
一方、基準タイル(tile A)に対するレンダリング・パイプライン102−2では、ビナ135によるビニング1828が追加して行われる。さらに詳細に説明すれば、ビナ135は、パッチ1900が、基準タイル(tile A)に隣接した(adjacent)隣接タイル(tile B,tile C及びtile D)それぞれで可視的であるか否かということを示す可視性ストリームを生成するビニング1828を行う。ここで、可視性ストリームは、本明細書で説明する全ての種類の可視性ストリームを含んでもよい。それにより、GPU 10は、基準タイル(tile A)に対するレンダリング・パイプライン102−2で生成された隣接タイル(tile B,tile C及びtile D)に係わる可視性ストリームを利用して、隣接タイル(tile B,tile C及びtile D)それぞれに対するレンダリング・パイプライン102−2が独立して遂行されるとき、可視的なバーテックス、可視的なプリミティブまたは可視的なパッチのみを処理することができるので、隣接タイル(tile B,tile C及びtile D)それぞれに対するレンダリング・パイプライン102−2でのデータ演算量が減る。
以上で説明したMODE(5)による図18のグラフィックス・パイプラインは、ビニング・パイプライン101−3において、テッセレータ123によるテッセレーティングをスキップすることができるので、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成(produce)しない。従って、テッセレータ123によるテッセレーティングを必須に行わなければならない図3のテッセレーション・パイプライン300(図3)と比較するとき、グラフィックデータの演算量をさらに減らすことができる。
図19は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図19のフローチャートは、図18で説明したMODE(5)によるビニング・パイプライン101−3及びレンダリング・パイプライン102−2を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図18で説明した内容は、図19のフローチャートに適用される。
1911段階ないし1915段階を含むパイプライン1910は、ビニング・パイプライン101−3に対応し、1921段階ないし1924段階を含むパイプライン1920は、基準タイル(tile A)に対するレンダリング・パイプライン102−2に対応する。
1911段階において、バーテックスシェーダ115は、メモリ30に保存されたバーテックス1801を利用して、バーテックスシェーディング1811を行う。
1912段階において、ハルシェーダ121は、入力コントロールポイントを、パッチ1900を構成する出力コントロールポイントに変換するハルシェーディング1812を行う。
1913段階において、ビナ135は、出力パッチ1900の出力コントロールポイントに係わるビニング1813またはタイリングを行う。そして、ビナ135は、ビニング1813の結果、出力パッチ1900の出力プリミティブそれぞれが属したタイルの情報を示すタイルリストを、メモリ30のビンストリーム1802に保存する。
1914段階において、ビナ135は、ハルシェーダ121から出力された出力パッチ1900の出力プリミティブが、複数のタイル(例えば、tile A,tile B,tile C及びtile D)に含まれるか否かということを判断する。すなわち、ビナ135は、出力パッチ1900の出力プリミティブに対して、タイルクロッシングいかんを判断する。もし出力パッチ1900がタイルクロッシングされた場合、1915段階に進み、出力パッチ1900がタイルクロッシングされていない場合、1930段階に進む。
1915段階において、ビナ135は、複数のタイル(tile A,tile B,tile C及びtile D)のレンダリング順序をスケジューリングする。スケジューリング結果、ビナ135は、複数のタイルのうち、最初のレンダリング順序でスケジューリングされたタイル(tile A)を、基準タイルとして決定することができる。
1921段階において、基準タイル(tile A)に対して、バーテックスシェーダ115は、メモリ30に保存されたバーテックス1801を利用して、バーテックスシェーディング1821を行う。
1922段階において、GPU 10は、基準タイル(tile A)に対して、ハルシェーダ121によるハルシェーディング1822、テッセレータ123によるテッセレーティング1823、及びドメインシェーダ125によるドメインシェーディング1824を含むテッセレーション・パイプラインを遂行する。
1923段階において、GPU 10は、基準タイル(tile A)に対して、テッセレーション・パイプラインによって生成された、テッセレーティングされたプリミティブをレンダリングする。すなわち、GPU 10は、基準タイル(tile A)に対して、ラスタライジング1826及びピクセルシェーディング1827を行う。
1924段階において、ビナ135は、パッチ1900が、隣接タイル(tile B,tile C及びtile D)それぞれで可視的であるか否かということを示す可視性ストリームを生成するビニング1828を行い、隣接タイル(tile B,tile C及びtile D)に係わる可視性ストリームを保存する。図19では、たとえ図示されていないとしても、GPU 10は、保存された可視性ストリームを利用して、隣接タイル(tile B,tile C及びtile D)に対するレンダリング・パイプライン102−2をそれぞれ遂行する。そのとき、隣接タイル(tile B,tile C及びtile D)に対するレンダリング・パイプライン102−2では、隣接タイル(tile B,tile C及びtile D)に係わる可視性ストリームによって可視的なバーテックス、可視的なプリミティブまたは可視的なパッチだけが処理されもする。
1930段階において、GPU 10は、出力パッチ1900がタイルクロッシングされていない場合(出力パッチ1900が1つのタイルにだけ含まれた場合)、出力パッチ1900が含まれたタイルに対して、レンダリング・パイプライン102−2を遂行する。
図20は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図20を参照すれば、ビニング・パイプライン101−4及びレンダリング・パイプライン102−2を含むグラフィックス・パイプラインは、図7で説明したMODE(6)に対応する。一方、図20に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図20で説明した構成及びパイプラインステージ以外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
図20に図示されたグラフィックス・パイプラインについては、説明の便宜のために、図21に図示された、複数のタイル(tile A,tile B,tile C及びtile D)にクロッシングされたパッチ2100に対して遂行されると仮定して説明する。
バーテックスシェーダ115は、メモリ30に保存されたバーテックス2001を利用して、バーテックスシェーディング2011を行う。バーテックスシェーダ115は、バーテックス2001を変換し、ハルシェーダ121に入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチ2100を構成する出力コントロールポイントに変換するハルシェーディング2012を行う。ハルシェーダ121は、パッチ2100を構成する出力コントロールポイントを生成すると同時に、第1テッセレーションファクタ(TF)を決定することができる。
テッセレータ123は、ハルシェーダ121から第1テッセレーションファクタ(TF)を受信し、第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を新たに設定する。そして、テッセレータ123は、新たに設定された第2テッセレーションファクタ(TF)を利用して、出力コントロールポイントに係わる重心座標系でのuvw座標及び加重値を計算するテッセレーティング2013を行う。
ドメインシェーダ125は、出力パッチ2100の出力コントロールポイント及び第2テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング2014を行う。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング2015を行うために使用されるオプション的な構成要素である。従って、ジオメトリシェーディング2015は、スキップされもする。
ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング2016)またはタイリングを行う。すなわち、ビナ135は、デプステスト(または、tile Z test)などを遂行し、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを予測するビニング2016を行う。そのとき、ビニングされたタイルリストは、可視性ストリームとして、メモリ30のビンストリーム2002に保存される。
ビナ135は、ビニング2016の結果、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が複数のタイル(例えば、図21のtile A,tile B,tile C及びtile D)に含まれるか否かということを判断する。すなわち、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)に対して、タイルクロッシングいかんを判断する。
第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)がタイルクロッシングされた場合(または、出力パッチが、複数のタイル(tile A,tile B,tile C及びtile D)に含まれる場合)、ビナ135は、複数のタイル(tile A,tile B,tile C及びtile D)のレンダリング順序をスケジューリングする。スケジューリング結果、ビナ135は、複数のタイルのうち、最初のレンダリング順序でスケジューリングされたタイル(tile A)を、基準タイル(reference tile)として決定することができる。ここで、基準タイルは、複数のタイルのうち左側の最上端に位置したtile Aであると仮定するが、それに制限されるものではなく、基準タイルは、左下端タイル、右上端タイル、右下端タイル、真ん中のタイルのような多様な所定基準によって異なってもよい。ビナ135は、基準タイル(tile A)に対するレンダリング・パイプライン102−2が、隣接タイル(tile B,tile C及びtile D)より先に遂行されるように、レンダリング・パイプライン102−2の遂行タイミングをスケジューリングする。複数のタイル(tile A,tile B,tile C及びtile D)それぞれに対するレンダリング・パイプライン102−2は、GPU 10内の1つのプロセッサユニット(または、1つのプロセッサコア)によって順次に遂行されるか、あるいはGPU 10内の複数のプロセッサユニット(または、複数のプロセッサコア)によって並列的に遂行される。そのような、基準タイルの決定、及びレンダリングタイミングのスケジューリングは、ビナ135ではない、コントローラ170、またはGPU 10内の他の構成によっても遂行される。すなわち、基準タイルの決定、及びレンダリングタイミングのスケジューリングの遂行主体は、いずれか一つによって制限されるものではない。
第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)がタイルクロッシングされた場合、ビナ135は、基準タイル(tile A)の決定結果、及びレンダリングタイミングのスケジューリング結果をメモリ30に保存する。
それとは異なり、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)がタイルクロッシングされていない場合(または、出力パッチが1つのタイルにだけ含まれる場合)、ビナ135は、基準タイルの決定、及びレンダリングタイミングのスケジューリングを行わない。
GPU 10は、ビニング・パイプライン101−4が完了した場合、タイル単位でレンダリング・パイプライン102−2を遂行する。そのとき、ビニング・パイプライン101−4において、基準タイルがtile Aであると決定されたので、GPU 10は、基準タイル(tile A)に対するレンダリング・パイプライン102−2をまず遂行する。
基準タイル(tile A)に対するレンダリング・パイプライン102−2は、バーテックスシェーダ115によるバーテックスシェーディング2021、ハルシェーダ121によるハルシェーディング2022、テッセレータ123によるテッセレーティング2023、ドメインシェーダ125によるドメインシェーディング2024、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング2025、ラスタライザ140によるラスタライジング2026、ピクセルシェーダ150によるピクセルシェーディング2027のステージを含んでもよい。ピクセルシェーダ150によるピクセルシェーディング2027の結果は、バッファ2003に保存される。
一方、基準タイル(tile A)に対するレンダリング・パイプライン102−2では、ビナ135によるビニング2028が追加して行われる。さらに詳細に説明すれば、ビナ135は、パッチ2100が、基準タイル(tile A)に隣接した隣接タイル(tile B,tile C及びtile D)それぞれで可視的であるか否かということを示す可視性ストリームを生成するビニング2028を行う。ここで、可視性ストリームは、本明細書で説明する全ての種類の可視性ストリームを含んでもよい。それにより、GPU 10は、基準タイル(tile A)に対するレンダリング・パイプライン102−2で生成された隣接タイル(tile B,tile C及びtile D)に係わる可視性ストリームを利用して、隣接タイル(tile B,tile C及びtile D)それぞれに対するレンダリング・パイプライン102−2が独立して遂行されるとき、可視的なバーテックス、可視的なプリミティブまたは可視的なパッチのみを処理することができるので、隣接タイル(tile B,tile C及びtile D)それぞれに対するレンダリング・パイプライン102−2でのデータ演算量が減る。
以上で説明したMODE(6)による図20のグラフィックス・パイプラインは、ビニング・パイプライン101−4において、低いテッセレーションファクタによる小さい数のテッセレーティングされたプリミティブだけが生成(produce)される。従って、図3のテッセレーション・パイプライン300(図3)と比較するとき、グラフィックデータの演算量をさらに減らすことができる。
図21は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図21のフローチャートは、図20で説明したMODE(6)によるビニング・パイプライン101−4及びレンダリング・パイプライン102−2を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図20で説明した内容は、図21のフローチャートに適用される。
2111段階ないし2117段階を含むパイプライン2110は、ビニング・パイプライン101−4に対応し、2121段階ないし2124段階を含むパイプライン2120は、基準タイル(tile A)に対するレンダリング・パイプライン102−2に対応する。
2111段階において、バーテックスシェーダ115は、メモリ30に保存されたバーテックス2001を利用して、バーテックスシェーディング2011を行う。
2112段階において、ハルシェーダ121は、入力コントロールポイントを、パッチ2100を構成する出力コントロールポイントに変換するハルシェーディング2012を行う。
2113段階において、テッセレータ123は、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)を利用して、出力パッチ2100の出力コントロールポイントに係わるテッセレーティング2013を行う。
2114段階において、ドメインシェーダ125は、出力パッチ2100の出力コントロールポイント及び第2テッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング2014を行う。
2115段階において、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)を利用して、ビニング2016またはタイリングを行う。そして、ビナ135は、ビニング2016の結果、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)それぞれが属したタイルの情報を示すタイルリストを、メモリ30のビンストリーム2002に保存する。
2116段階において、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が、複数のタイル(例えば、tile A,tile B,tile C及びtile D)に含まれるか否かということを判断する。すなわち、ビナ135は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)に対して、タイルクロッシングいかんを判断する。もし第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)がタイルクロッシングされた場合、2117段階に進み、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)がタイルクロッシングされていない場合、2130段階に進む。
2117段階において、ビナ135は、複数のタイル(tile A,tile B,tile C及びtile D)のレンダリング順序をスケジューリングする。スケジューリング結果、ビナ135は、複数のタイルのうち、最初のレンダリング順序でスケジューリングされたタイル(tile A)を、基準タイルとして決定することができる。
2121段階において、基準タイル(tile A)に対して、バーテックスシェーダ115は、メモリ30に保存されたバーテックス2001を利用して、バーテックスシェーディング2021を行う。
2122段階において、GPU 10は、基準タイル(tile A)に対して、ハルシェーダ121によるハルシェーディング2022、テッセレータ123によるテッセレーティング2023、及びドメインシェーダ125によるドメインシェーディング2024を含むテッセレーション・パイプラインを遂行する。
2123段階において、GPU 10は、基準タイル(tile A)に対して、テッセレーション・パイプラインによって生成された、テッセレーティングされたプリミティブをレンダリングする。すなわち、GPU 10は、基準タイル(tile A)に対して、ラスタライジング2026及びピクセルシェーディング2027を行う。
2124段階において、ビナ135は、パッチ2100が、隣接タイル(tile B,tile C及びtile D)それぞれで可視的であるか否かということを示す可視性ストリームを生成するビニング2028を行い、隣接タイル(tile B,tile C及びtile D)に係わる可視性ストリームを保存する。図21では、たとえ図示されていないとしても、GPU 10は、保存された可視性ストリームを利用して、隣接タイル(tile B,tile C及びtile D)に対するレンダリング・パイプライン102−2をそれぞれ遂行する。そのとき、隣接タイル(tile B,tile C及びtile D)に対するレンダリング・パイプライン102−2では、隣接タイル(tile B,tile C及びtile D)に係わる可視性ストリームによって、可視的なバーテックス、可視的なプリミティブまたは可視的なパッチだけが処理されもする。
2130段階において、GPU 10は、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)がタイルクロッシングされていない場合(第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が1つのタイルにだけ含まれた場合)、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)が含まれたタイルに対して、レンダリング・パイプライン102−2を遂行する。
図22は、他の実施形態によって、パッチのテッセレーションの結果、パッチが属するタイルリストと、テッセレーティングされたプリミティブが属するタイルリストとが異なる場合について説明するための図面である。
一般的に、テッセレーション・パイプライン300(図3)において、ハルシェーダ121とドメインシェーダ125は、プログラマブル(programmable)であるが、テッセレータ123は、プログラマブルではないと知られている。従って、場合により、テッセレーション・パイプライン300(図3)をコーディングする開発者は、出力パッチ2213が1つのタイル(tile 0)に含まれるが、テッセレーティングされたプリミティブ2225は、2つのタイル(tile 0及びtile 1)に含まれるように、ハルシェーダ121及びドメインシェーダ125を誤ってプログラミングしてしまう。すなわち、テッセレーティングされたプリミティブ2225において、で誤って予測された(mispredicted)プリミティブ2230が存在してしまう。以下の図23及び図24では、レンダリング・パイプラインの間、ビニング・パイプラインで誤って予測されたタイルリストが発見された場合に係わるグラフィックス・パイプラインについて説明する。
図23は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインについて説明するための図面である。
図23を参照すれば、ビニング・パイプライン101−3、並びに第1レンダリング・パイプライン102−3及び第2レンダリングパイプライン102−4を含むグラフィックス・パイプラインは、図7で説明したMODE(7)に対応し、ビニング・パイプライン101−4、並びに第1レンダリング・パイプライン102−3及び第2レンダリングパイプライン102−4を含むグラフィックス・パイプラインは、図7で説明したMODE(8)に対応する。一方、図23に図示されたグラフィックス・パイプラインについては、図6で説明したGPU 10のハードウェア構成を連繋させて説明するが、実施形態と係わる構成及びパイプラインステージについてのみ説明する。従って、図23で説明した構成及びパイプラインステージ以外に、他の汎用的な構成要素及びパイプラインステージがさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
GPU 10は、先に図面で説明したビニング・パイプライン101−3または101−4を遂行する。ビニング・パイプライン101−3または101−4のビニング結果は、可視性ストリームとして、メモリ30のビンストリーム2302に保存される。次に、GPU 10は、第1レンダリング・パイプライン102−3を遂行する。第1レンダリング・パイプライン102−3は、タイル単位で遂行され、図23において、第1レンダリング・パイプライン102−3で遂行される現在タイルは、tile Xであると仮定する。
バーテックスシェーダ115は、ビンストリーム2302のビニング結果に基づいて、tile Xに属するバーテックス2301を利用して、バーテックスシェーディング2311を行う。バーテックスシェーダ115は、バーテックス2301を変換し、ハルシェーダ121に、入力コントロールポイントとして伝達する。
ハルシェーダ121は、低次数の表面を表現する入力コントロールポイントを、パッチを構成する出力コントロールポイントに変換するハルシェーディング2312を行う。ハルシェーダ121は、パッチを構成する出力コントロールポイントを生成すると同時に、テッセレーションファクタ(TF)を決定することができる。
テッセレータ123は、ハルシェーダ121から受信されたテッセレーションファクタ(TF)を利用して、出力コントロールポイントに係わる重心座標系でのuvw座標及び加重値を計算するテッセレーティング2313を行う。
ドメインシェーダ125は、出力パッチの出力コントロールポイント及びテッセレーションファクタ(TF)に係わる情報と、テッセレータ123から受信されたuvw座標(w座標はオプション的)及び加重値とを利用して、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)を生成するドメインシェーディング2314を行う。
ジオメトリシェーダ130は、ドメインシェーダ125から受信されたテッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)から、さらなるバーテックス(または、プリミティブ)を生成するジオメトリシェーディング2315を行うために使用されるオプション的な構成要素である。従って、ジオメトリシェーディング2315は、スキップされもする。
ラスタライザ140は、現在タイルであるtile Xに含まれた、テッセレーティングされたバーテックス(または、テッセレーティングされたプリミティブ)に対するラスタライジング2316を行い、ピクセルシェーダ150は、ラスタライジングされたプリミティブに対応するピクセルに対するピクセルシェーディング2317を行う。現在タイルであるtile Xに対するピクセルシェーディング2317の結果は、バッファ2304に保存される。
ビナ135は、現在タイルであるtile Xに含まれたテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)に対するビニング2318またはタイリングを行い、ビニング2318の結果を、ビニング・パイプライン101−3または101−4によってビンストリーム2302に保存されたタイルリストと比較することにより、tile Xに含まれたテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)のタイル位置のうち、誤って予測された(mispredicted)タイルが存在するか否かということを判断する。もし誤って予測されたタイルがない場合、GPU 10は、tile Xの次のタイルに対する第1レンダリング・パイプライン102−3を遂行する。しかし、ビナ135は、誤って予測されたタイルがある場合、誤って予測されたタイルに係わるタイルリストを、ビンストリーム2302にアップデートするか、あるいは誤って予測されたビンストリーム(mispredicted bin stream)2303に保存する。ここで、誤って予測されたタイルに係わるタイルリストを、ビンストリーム2302にアップデートすることは、誤って予測されたタイルに対するレンダリングが始まっていない場合に行われ、誤って予測されたタイルに係わるタイルリストを、誤って予測されたビンストリーム2303に保存することは、誤って予測されたタイルに対するレンダリングが完了した場合に行われる。
GPU 10は、全てのタイルに対して、タイル単位で第1レンダリング・パイプライン102−3を完了した後、誤って予測されたビンストリーム2303に、誤って予測されたタイルリスト(mispredictedtile list)が存在するか否かということを判断する。誤って予測されたタイルリストが、誤って予測されたビンストリーム2303に存在する場合、GPU 10は、誤って予測されたタイルリストに含まれたタイルに対して、第2レンダリング・パイプライン102−4を遂行する。ここで、誤って予測されたタイルリストに含まれたタイルは、スーパータイル(super tile)とも呼ぶ。第2レンダリング・パイプライン102−4は、誤って予測されたタイルリストに含まれたタイルに対して、1つのタイル単位で遂行されるか、あるいはスーパータイル単位で遂行される。すなわち、GPU 10は、1つのタイル単位またはスーパータイル単位で、バーテックスシェーダ115によるバーテックスシェーディング2321、ハルシェーダ121によるハルシェーディング2322、テッセレータ123によるテッセレーティング2323、ドメインシェーダ125によるドメインシェーディング2324、ジオメトリシェーダ130によるオプション的なジオメトリシェーディング2325、ラスタライザ140によるラスタライジング2326、ピクセルシェーダ150によるピクセルシェーディング2327のステージを含む第2レンダリング・パイプライン102−4を遂行することができる。スーパータイルに対するピクセルシェーディング2327の結果は、バッファ2304に保存され、それにより、グラフィックス・パイプラインが完了する。
図24は、さらに他の実施形態によってGPUで遂行されるグラフィックス・パイプラインのフローチャートである。図24のフローチャートは、図23で説明したMODE(7)または(8)によるビニング・パイプライン101−3または101−4、第1レンダリング・パイプライン102−3及び第2レンダリング・パイプライン102−4を含むグラフィックス・パイプラインを遂行するフローチャートである。従って、以下で省略された内容であるとしても、図23で説明した内容は、図24のフローチャートに適用される。
2401段階において、GPU 10は、ビニング・パイプライン101−3または101−4を遂行し、タイルリストをビニングする。
2402段階において、GPU 10は、ビニングされたタイルリストを、第1ビンストリーム2302(図23)に保存する。
2403段階において、GPU 10は、現在タイルであるtile Xに対して、第1ビンストリーム1902(図19)を利用して、第1レンダリング・パイプライン102−3において、テッセレーション・パイプライン(図23のハルシェーディング2312、テッセレーティング2313及びドメインシェーディング2314)を遂行する。
2404段階において、GPU 10は、現在タイルであるtile Xに対して、テッセレーション・パイプライン(図23のハルシェーディング2312、テッセレーティング2313及びドメインシェーディング2314)から出力された、テッセレーティングされたプリミティブを利用して、残のりパイプライン(図23のラスタライジング2316及びピクセルシェーディング2317)を遂行する。
2405段階において、GPU 10は、全てのタイルに対するレンダリングが完了したか否かということを判断する。もし全てのタイルに対するレンダリングが完了した場合、2410段階に進む。しかし、全てのタイルに対するレンダリングが完了していない場合、tile Xの次のタイルに対して、2403段階が遂行される。
2406段階において、GPU 10は、現在タイルであるtile Xに含まれたテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)に対するビニング2318またはタイリングを行い、ビニング2318の結果を、ビニング・パイプライン101−3または101−4によってビンストリーム2302に保存されたタイルリストと比較することにより、tile Xに含まれたテッセレーティングされたプリミティブ(テッセレーティングされたバーテックス)のタイル位置のうち、誤って予測された(mispredicted)タイルが存在するか否かということを判断する。もし誤って予測されたタイルがない場合、2405段階に進む。しかし、誤って予測されたタイルがある場合、2407段階に進む。
2407段階において、GPU 10は、誤って予測されたタイルが、レンダリング済みのタイルであるか否かということを判断する。もし誤って予測されたタイルが、レンダリング済みのタイルである場合、2408段階に進む。しかし、誤って予測されたタイルが、レンダリング済みのタイルではない場合、2409段階に進む。
2408段階において、GPU 10は、誤って予測されたタイルに係わるタイルリストを、第2ビンストリーム2303(図23)に保存する。
2409段階において、GPU 10は、誤って予測されたタイルに係わるタイルリストを、第1ビンストリーム2302(図23)にアップデートする。
2410段階において、GPU 10は、第2ビンストリーム2303(図23)に誤って予測されたタイルリストが存在するか否かということを判断する。もし第2ビンストリーム2303(図23)に誤って予測されたタイルリストがない場合、グラフィックス・パイプラインは終了する。しかし、第2ビンストリーム2303(図23)に誤って予測されたタイルリストがある場合、2411段階に進む。
2411段階において、GPU 10は、第2ビンストリーム2303(図23)に基づいて、誤って予測されたタイル(スーパータイル)に対して、第2レンダリング・パイプライン102−4(図23)を遂行する。
図25は、一実施形態によるコンピューティング装置の詳細ハードウェア構成を図示したブロック図である。
図25を参照すれば、コンピューティング装置1は、GPU 10、CPU 20、メモリ30、バッファ35、バス40、ディスプレイ部2501、入力部2503及び通信部2505を含む。図25に図示されたコンピューティング装置1には、実施形態と係わる構成要素だけが図示されている。従って、図25に図示された構成要素以外に、他の汎用的な構成要素がさらに含まれてもよいということは、当該技術分野の当業者であるならば、理解することができるであろう。
GPU 10、CPU 20及びメモリ30は、先立って図面で説明した動作及び機能を遂行することができる。
バッファ35は、タイル基盤グラフィックス・パイプラインまたはタイル基盤レンダリングを介して出力されたタイル情報を保存する。例えば、バッファ35は、タイルでのデプステスト(depth test)結果を保存するか、あるいはタイルでのレンダリング結果を保存することができる。たとえ図21において、バッファ35が、コンピューティング装置1内で、GPU 10、CPU 20またはメモリ30と別個に具備されているように図示されているにしても、バッファ35は、GPU 10、CPU 20またはメモリ30内に具備されることもある。
ディスプレイ部2501は、コンピューティング装置1で処理される情報、または処理されるなければならない情報などの各種情報をユーザに表示するための表示インタフェーシング手段である。ディスプレイ部2501は、コンピューティング装置1で処理される情報を、ユーザに視覚的であって直観的に提供するためのGUI(graphical user interface)をディスプレイすることもできる。例えば、ディスプレイ部2501は、GPU 10によって処理されたグラフィックデータをディスプレイすることができる。ディスプレイ部2501は、LCD(liquid crystal display)、LED(light emitting diode)、PDP(plasma display panel)のような多様なディスプレイパネルで具現される。
入力部2503は、ユーザから情報を入力されるための入力インタフェーシング手段である。入力部2503は、タッチパッド、トラックボール、マウス、キーボード、ゲーム用コントローラのような形態によって具現される。ディスプレイ部2501と入力部2503は、一体化されたタッチスクリーンのハードウェアによって具現される。
通信部2505は、移動通信のための移動通信モジュール、有線/無線LAN(local area network)モジュール、近距離無線通信のためのWi−Fi(wireless fidelity)モジュール、Bluetooth(登録商標)モジュール、NFC(near field communication)モジュールなどを含んでもよい。
図26A及び図26Bは、一実施形態によって、GPUで処理されるグラフィックス・パイプラインの種類を選択するための条件について説明するための図面である。
先に図7において、MODE(1)ないしMODE(8)は、ユーザ入力によっていずれか一つが選択され、またはグラフィック処理環境によって、いずれか一つが選択されもする。図26A及び図26Bによれば、GPU 10は、1つのタイル2610または2620の大きさに対する客体2615または2625の大きさ(または、客体2615または2625を構成するパッチの大きさ)の比率により、MODE(1)ないしMODE(8)のうちいずれか一つを選択することができる。例えば、1つのタイル2610または2620の大きさに対する客体2615または2625の大きさ(または、客体2615または2625を構成するパッチの大きさ)の比率は、26A及び図26Bにおいて互いに異なる。そのような点を利用して、GPU 10は、MODE(1)ないしMODE(8)それぞれに対して、所定の臨界範囲を設定し、計算された比率が属する範囲に対応する効率モードで、グラフィックス・パイプラインが遂行されるように制御することができる。
図27A及び図27Bは、他の実施形態によって、GPUで処理されるグラフィックス・パイプラインの種類を選択するための条件について説明するための図面である。
図27A及び図27Bによれば、GPU 10は、タイル2710または2720の上の客体2715または2725(または、客体2715または2725を構成するパッチ)の位置により、MODE(1)ないしMODE(8)のうちいずれか一つを選択することができる。例えば、タイル2710または2720の境界と、客体2715または2725(または、客体2715または2725を構成するパッチ)の境界との距離distance(a)またはdistance(b)は、図27A及び図27Bにおいて互いに異なる。そのような点を利用して、GPU 10は、MODE(1)ないしMODE(8)それぞれに対して、所定の臨界範囲を設定し、計算された距離が属する範囲に対応する効率モードで、グラフィックス・パイプラインが遂行されるように制御することができる。
図28は、一実施形態によるグラフィックス・パイプラインにおいて、メモリのビンストリームに保存された可視性ストリームが適用される例示について説明するための図面である。
図28を参照すれば、ビニング・パイプライン101のビニング2811が行われた場合、メモリ30のビンストリーム2802には、入力パッチ可視性ストリーム(input-patch visibility stream)が保存される。また、ビニング・パイプライン101のビニング2811が行われた場合、メモリ30のビンストリーム2802には、出力プリミティブ可視性ストリーム(output-primitive visibility stream)が保存される。ここで、ビニング2811は、先に図面で説明した多種のグラフィックス・パイプラインに含まれたビニングステージに該当する。
入力パッチ可視性ストリームは、レンダリング・パイプライン102の間、ハルシェーダ121のハルシェーディング2821遂行のために入力される入力パッチの可視性を示す入力パッチ可視性マスク(input-patch visibility mask)に係わる情報を含んでもよい。すなわち、入力パッチ可視性マスクは、入力パッチがタイルで見えるか否かということを示す0または1のビット表現でもある。従って、入力パッチ可視性ストリームを利用することにより、ハルシェーダ121は、レンダリング・パイプライン102の間、可視的な入力パッチだけで、ハルシェーディング2821を行うことができるので、レンダリング・パイプライン102での演算量が減少する。
同様に、出力プリミティブ可視性ストリームは、レンダリング・パイプライン102の間、プリミティブアセンブリング(primitive assembling)2822遂行のために入力される、出力プリミティブの可視性を示す出力プリミティブ可視性マスク(output-primitive visibility mask)に係わる情報を含んでもよい。すなわち、出力プリミティブ可視性マスクは、出力プリミティブがタイルで見えるか否かということを示す0または1のビット表現でもある。従って、出力プリミティブ可視性ストリームを利用することにより、GPU 10は、レンダリング・パイプライン102の間、可視的な出力プリミティブだけで、プリミティブアセンブリング2822を行うことができるので、レンダリング・パイプライン102での演算量が減少する。
図29は、他の実施形態によるグラフィックス・パイプラインにおいて、メモリのビンストリームに保存された可視性ストリームが適用される例示について説明するための図面である。
図29を参照すれば、図18ないし図21で説明したように、基準タイル(例えば、図19及び図21のtile A)に対するレンダリング・パイプライン102のビニング2911が行われた場合、メモリ30のビンストリーム2902には、バーテックス可視性ストリーム(vertex visibility stream)が保存される。また、レンダリング・パイプライン102のビニング2811が行われた場合、メモリ30のビンストリーム2902には、ドメイン可視性ストリーム(domain visibility stream)が保存される。ここで、ビニング2911は、図19及び図21だけではなく、先に図面で説明した多種のグラフィックス・パイプラインに含まれたビニングステージに該当する。
バーテックス可視性ストリームは、基準タイル(例えば、図19及び図21のtile A)に隣接した隣接タイル(例えば、図19及び図21のtile B,tile Cまたはtile Dに対するレンダリング・パイプライン102の間、バーテックスシェーダ115のバーテックスシェーディング2921の遂行のために入力されるバーテックスの可視性を示すバーテックス可視性マスク(vertex visibility mask)に係わる情報を含んでもよい。すなわち、バーテックス可視性マスクは、バーテックスがタイルで見えるか否かということを示す0または1のビット表現でもある。従って、バーテックス可視性ストリームを利用することにより、バーテックスシェーダ115は、レンダリング・パイプライン102の間、可視的なバーテックスだけで、バーテックスシェーディング2921を行うことができるので、レンダリング・パイプライン102での演算量が減少する。
同様に、ドメイン可視性ストリームは、レンダリング・パイプライン102の間、ドメインシェーダ125のドメインシェーディング2922の遂行のために入力される、出力パッチの可視性を示すドメイン可視性マスク(domain visibility mask)に係わる情報を含んでもよい。すなわち、ドメイン可視性マスクは、出力プリミティブがタイルで見えるか否かということを示す0または1のビット表現でもある。従って、ドメイン可視性ストリームを利用することにより、ドメインシェーダ125は、レンダリング・パイプライン102の間、可視的な出力パッチだけで、ドメインシェーディング2922を行うことができるので、レンダリング・パイプライン102での演算量が減少する。
一方、本明細書で説明する可視性ストリームは、前述のような、入力パッチ可視性ストリーム、出力プリミティブ可視性ストリーム、バーテックス可視性マスクまたはドメイン可視性ストリームを含んでもよいが、それらに制限されるものではない。
図30は、一実施形態によって、ビニング・パイプラインが完了し、ビンストリームに保存される可視性ストリームについて説明するための図面である。
前述のように、GPU 10は、ビニング・パイプライン101が完了した場合、メモリ30に可視性ストリームを保存することができる。図30を参照すれば、可視性ストリームは、入力可視性ストリーム及び出力可視性ストリームを含んでもよい。
入力可視性ストリームは、それぞれのパッチに対して1及び0のストリングを含んでもよい。それぞれのビットは、パッチ(patch)の少なくとも一部が最終フレームで見えるということを意味する。例えば、パッチ2に対するビット1は、パッチ2が最終フレームで見えるということを意味し、ビット0を有する他のパッチは、最終場面で見えないということを意味する。出力可視性ストリームは、それぞれのプリミティブ(primitive)に対して、1及び0のストリームを含むが、1ビットは、最終場面で見えるピクセルに対して、そのプリミティブが寄与するということを示し(例えば、プリミティブ0に対するビット1)、ビット0は最終場面で見えるピクセルに対してそのプリミティブが寄与しないということを示す(例えば、プリミティブ6に対するビット0)。
出力可視性ストリームは、パッチ単位基準で生成される。すなわち、それぞれのタイルに対するパッチごとに、1つの出力可視性ストリームが存在する。またはそれぞれのタイルは、入力プリミティブから生成された出力プリミティブを、いずれも共に連結する1つの出力可視性ストリームを有することができる。
図31は、他の実施形態によって、ビニング・パイプラインが完了し、ビンストリームに保存される可視性ストリームについて説明するための図面である。
図31を参照すれば、出力可視性ストリーム3110は、ハルシェーダ121から出力された出力パッチに対して生成され、出力可視性ストリーム3120は、ドメインシェーダ125から出力されたテッセレーティングされたプリミティブに対して生成されもする。しかし、それに制限されるものではない。
図32は、一実施形態によるコンピューティング装置において、グラフィックス・パイプラインを遂行する方法のフローチャートである。図32に図示された、コンピューティング装置1のグラフィックス・パイプラインの遂行方法は、前述の図10及び図11などで説明した実施形態(MODE(1))と係わる。従って、以下で省略された内容であるとしても、図10及び図11などで説明した内容は、図32のグラフィックス・パイプラインの遂行方法にも適用される。
3201段階において、コンピューティング装置1のGPU 10は、ハルシェーダ121から出力された出力パッチが含まれたタイルの個数に基づいて、出力パッチに対するテッセレーティングをスキップするか否かということを判断し、判断結果によって、出力パッチまたはテッセレーティングされたプリミティブに係わるタイルリストをビニングするビニング・パイプライン101−1を遂行する。
3202段階において、コンピューティング装置1のGPU 10は、ビニングされたタイルリストに基づいて、タイル単位で、レンダリング・パイプライン102−1を遂行する。
さらに詳細に説明すれば、ビニング・パイプライン101−1を遂行する3201段階は、出力パッチが含まれたタイルの個数が1個である場合、テッセレータ123によって行われる出力パッチに対するテッセレーティングをスキップすることができる。ビニング・パイプライン101−1を遂行する3201段階は、入力パッチを、ハルシェーダ121でハルシェーディングすることによって出力パッチを生成し、出力パッチに係わるタイルリストをビニングし、出力パッチが1タイルに含まれるか否かということを判断する段階を含んでもよい。そのとき、レンダリング・パイプライン102−1を遂行する3202段階は、出力パッチが1タイルに含まれていると判断された場合、出力パッチに対してビニングされたタイルリストを利用して、ラスタライジングを行うことができる。ここで、ラスタライジングは、レンダリング・パイプライン102−1で遂行される一部ステージに該当するものであり、レンダリング・パイプライン102−1には、ラスタライジングステージ以外にも、ピクセルシェーディング・ステージなどの多様なステージが含まれてもよい。レンダリング・パイプライン102−1を遂行する3202段階は、ビニング・パイプライン101−1で、テッセレーティングがスキップされた場合、ビニング・パイプライン101−1で、出力パッチに対して保存されたビンストリームを利用して、テッセレーション・パイプラインを遂行する段階を含んでもよい。一方、ビニング・パイプライン101−1を遂行する3201段階において、テッセレーティングは、出力パッチによって形成された境界が、テッセレーティングされたプリミティブによって形成された境界を含むようにプログラミングされる。
それとは異なり、ビニング・パイプライン101−1を遂行する3201段階は、出力パッチが2以上のタイルに含まれていると判断された場合(または、出力パッチが1タイルに含まれていないと判断された場合)、出力パッチに対するテッセレータ123のテッセレーティング、及びドメインシェーダ125のドメインシェーディングを行うことによって、テッセレーティングされたプリミティブを生成することができる。そのとき、レンダリング・パイプライン102−1を遂行する3202段階は、テッセレーティングされたプリミティブに対してビニングされたタイルリストを利用して、ラスタライジングを行うことができる。
一方、コンピューティング装置1のメモリ30は、ビニング・パイプライン101−1で生成されたタイルリストを保存し、保存されたタイルリストを、レンダリング・パイプライン102−1に提供することができる。ビニング・パイプライン101−1を遂行する3201段階は、出力パッチが1タイルに含まれた場合、出力パッチに係わる可視性ストリームをメモリ30に保存し、出力パッチが2以上であるタイルに含まれた場合、テッセレーティングされたプリミティブに係わる可視性ストリームを、メモリ30に保存する段階を含んでもよい。
図33は、他の実施形態によるコンピューティング装置において、グラフィックス・パイプラインを遂行する方法のフローチャートである。図33に図示された、コンピューティング装置1のグラフィックス・パイプラインの遂行方法は、前述の図12及び図13などで説明した実施形態(MODE(2))と係わる。従って、以下で省略された内容であるとしても、図12及び図13などで説明した内容は、図33のグラフィックス・パイプラインの遂行方法にも適用される。
3301段階において、コンピューティング装置1のGPU 10は、ハルシェーダ121によって決定された第1テッセレーションファクタと異なる第2テッセレーションファクタでテッセレーティングされたプリミティブが含まれたタイルの個数に基づいて、第1テッセレーションファクタに基づいたテッセレーティングをスキップするか否かということを判断し、該判断結果によって、第1テッセレーションファクタでテッセレーティングされたプリミティブ、またはハルシェーダ121から出力された出力パッチに係わるタイルリストをビニングするビニング・パイプライン101−2を遂行する。
3302段階において、コンピューティング装置1のGPU 10は、ビニングされたタイルリストに基づいて、タイル単位で、レンダリング・パイプライン102−1を遂行する。
さらに詳細に説明すれば、ビニング・パイプライン101−2を遂行する3301段階は、第2テッセレーションファクタでテッセレーティングされたプリミティブが含まれたタイルの個数が1個である場合、テッセレータ123によって遂行される第1テッセレーションファクタに基づいたテッセレーティングをスキップする。ここで、第2テッセレーションファクタは、第1テッセレーションファクタより低い。ビニング・パイプライン101−2を遂行する3301段階は、ハルシェーダ121で出力パッチを生成し、第1テッセレーションファクタを決定するハルシェーディングを行う段階、第1テッセレーションファクタより低い前記第2テッセレーションファクタに基づいて、出力パッチに対するテッセレータのテッセレーティング、及びドメインシェーダのドメインシェーディングを行うことによって、第2テッセレーションファクタでテッセレーティングされたプリミティブを生成する段階、及び第2テッセレーションファクタでテッセレーティングされたプリミティブが1タイルに含まれるか否かということを判断する段階を含んでもよい。そのとき、レンダリング・パイプライン102−1を遂行する3302段階は、第2テッセレーションファクタでテッセレーティングされたプリミティブが1タイルに含まれた場合、出力パッチに対してビニングされたタイルリストを利用して、ラスタライジングを行うことができる。ここで、ラスタライジングは、レンダリング・パイプライン102−1で遂行される一部ステージに該当するものであり、レンダリング・パイプライン102−1には、ラスタライジングステージ以外にも、ピクセルシェーディング・ステージなどの多様なステージが含まれてもよい。一方、ビニング・パイプライン101−2を遂行する3301段階において、テッセレーティングは、第1テッセレーションファクタでテッセレーティングされたプリミティブによって形成された境界が、第2テッセレーションファクタでテッセレーティングされたプリミティブによって形成された境界を含むようにプログラミングされる。
それとは異なり、ビニング・パイプライン101−2を遂行する3301段階は、第2テッセレーションファクタでテッセレーティングされたプリミティブが、2以上のタイルに含まれていると判断された場合(または、第2テッセレーションファクタでテッセレーティングされたプリミティブが、1タイルに含まれていないと判断された場合)、第1テッセレーションファクタに基づいて、出力パッチに対するテッセレータ123のテッセレーティング、及びドメインシェーダ125のドメインシェーディングを行うことによって、第1テッセレーションファクタでテッセレーティングされたプリミティブを生成することができる。そのとき、レンダリング・パイプライン102−1を遂行する3302段階は、第1テッセレーションファクタでテッセレーティングされたプリミティブに対してビニングされたタイルリストを利用して、ラスタライジング及びピクセルシェーディングを行うことができる。
一方、コンピューティング装置1のメモリ30は、ビニング・パイプライン101−2で生成されたタイルリストを保存し、保存されたタイルリストをレンダリング・パイプライン102−1に提供することができる。ビニング・パイプライン101−2を遂行する3301段階は、第2テッセレーションファクタでテッセレーティングされたプリミティブが1タイルに含まれた場合、出力パッチに係わる可視性ストリームを、メモリ30に保存し、第2テッセレーションファクタでテッセレーティングされたプリミティブが2以上のタイルに含まれた場合、第1テッセレーションファクタでテッセレーティングされたプリミティブに係わる可視性ストリームを、メモリ30に保存する段階を含んでもよい。
図34は、さらに他の実施形態によるコンピューティング装置において、グラフィックス・パイプラインを遂行する方法のフローチャートである。図34に図示された、コンピューティング装置1のグラフィックス・パイプラインの遂行方法は、前述の図18及び図19などで説明した実施形態(MODE(5))と係わる。従って、以下で省略された内容であるとしても、図18及び図19などで説明した内容は、図34のグラフィックス・パイプラインの遂行方法にも適用される。
3401段階において、コンピューティング装置1のGPU 10は、ハルシェーダ121から出力された出力パッチをビニングすることによって、出力パッチが複数のタイルに含まれるか否かということを判断し、出力パッチが複数のタイルに含まれる場合、タイルのレンダリング順序をスケジューリングするビニング・パイプライン101−3を遂行する。
3402段階において、コンピューティング装置1のGPU 10は、スケジューリングされたレンダリング順序に基づいて、タイル単位で、タイルに対するレンダリング・パイプライン102−2を遂行する。
さらに詳細に説明すれば、ビニング・パイプライン101−3を遂行する3401段階は、テッセレータ123によって遂行される出力パッチに対するテッセレーティングをスキップすることができる。ビニング・パイプライン101−3を遂行する3401段階は、入力パッチをハルシェーダ121でハルシェーディングすることによって出力パッチを生成し、出力パッチに係わるタイルリストをビニングし、出力パッチが複数のタイルに含まれるか否かということを判断し、出力パッチが複数のタイルに含まれる場合、最初のレンダリング順序に対応する第1タイル(基準タイル、例えば、図19のtile A)を決定する段階を含んでもよい。
レンダリング・パイプライン102−2を遂行する3402段階は、第1タイルに対する第1レンダリング・パイプラインを遂行し、隣接タイル(例えば、図19のtile B,tile Cまたはtile D)に対する第2レンダリング・パイプラインを遂行する段階を含んでもよい。第2レンダリング・パイプラインは、第1レンダリング・パイプラインで生成された可視性ストリームに基づいて、隣接タイルにおいて、可視的なバーテックス、可視的なプリミティブ及び可視的なパッチのうち少なくとも一つに対してレンダリングを行う。一方、図34で説明する第1レンダリング・パイプライン及び第2レンダリング・パイプラインは、レンダリング・パイプライン102−2の一部であり、図7の第1レンダリング・パイプライン102−3及び第2レンダリング・パイプライン102−4とは異なる。
一方、コンピューティング装置1のメモリ30は、第1タイルに対するレンダリング・パイプライン102−2で生成された可視性ストリームを保存し、保存された可視性ストリームを、隣接タイルに対するレンダリング・パイプライン102−2に提供することができる。すなわち、レンダリング・パイプライン102−2を遂行する3401段階は、第1タイルに対するレンダリング・パイプライン102−2で生成された可視性ストリームを、メモリ30に保存する段階を含んでもよい。
図35は、さらに他の実施形態によるコンピューティング装置において、グラフィックス・パイプラインを遂行する方法のフローチャートである。図35に図示された、コンピューティング装置1のグラフィックス・パイプラインの遂行方法は、前述の図20及び図21などで説明した実施形態(MODE(6))と係わる。従って、以下で省略された内容であるとしても、図20及び図21などで説明した内容は、図35のグラフィックス・パイプラインの遂行方法にも適用される。
3501段階において、コンピューティング装置1のGPU 10は、ハルシェーダ121によって決定された第1テッセレーションファクタ(TF)と異なる第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブをビニングすることによって、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブが複数のタイルに含まれるか否かということを判断し、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブが複数のタイルに含まれる場合、複数のタイルのレンダリング順序をスケジューリングするビニング・パイプライン101−4を遂行する。
3502段階において、コンピューティング装置1のGPU 10は、スケジューリングされたレンダリング順序に基づいて、タイル単位でタイルに対するレンダリング・パイプライン102−2を遂行する。
さらに詳細に説明すれば、ビニング・パイプライン101−4を遂行する3501段階は、テッセレータ123によって遂行される第1テッセレーションファクタに基づいたテッセレーティングをスキップすることができる。ここで、第2テッセレーションファクタは、第1テッセレーションファクタより低い値を有する。ビニング・パイプライン101−4を遂行する3501段階は、ハルシェーダ121で出力パッチを生成し、第1テッセレーションファクタ(TF)を決定するハルシェーディングを行う段階、第1テッセレーションファクタ(TF)より低い第2テッセレーションファクタ(TF)に基づいて、出力パッチに対するテッセレータ123のテッセレーティング、及びドメインシェーダ125のドメインシェーディングを行うことによって、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブを生成する段階、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブに係わるタイルリストをビニングする段階、第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブが複数のタイルに含まれるか否かということを判断する段階、及び第2テッセレーションファクタ(TF)でテッセレーティングされたプリミティブが複数のタイルに含まれる場合、最初のレンダリング順序に対応する第1タイル(基準タイル、例えば、図21のtile A)を決定する段階を含んでもよい。
レンダリング・パイプライン102−2を遂行する3502段階は、第1タイルに対する第1レンダリング・パイプラインを遂行し、隣接タイル(例えば、図21のtile B,tile Cまたはtile D)に対する第2レンダリング・パイプラインを遂行する段階を含んでもよい。第2レンダリング・パイプラインは、第1レンダリング・パイプラインで生成された可視性ストリームに基づいて、隣接タイルにおいて、可視的なバーテックス、可視的なプリミティブ及び可視的なパッチのうち少なくとも一つに対して、レンダリングを行う。一方、図35で説明する第1レンダリング・パイプライン及び第2レンダリング・パイプラインは、レンダリング・パイプライン102−2の一部であって、図7の第1レンダリング・パイプライン102−3及び第2レンダリング・パイプライン102−4とは異なる。
一方、コンピューティング装置1のメモリ30は、第1タイルに対するレンダリング・パイプライン102−2で生成された可視性ストリームを保存し、保存された可視性ストリームを、隣接タイルに対するレンダリング・パイプライン102−2に提供することができる。すなわち、レンダリング・パイプライン102−2を遂行する3501段階は、第1タイルに対するレンダリング・パイプライン102−2で生成された可視性ストリームを、メモリ30に保存する段階を含んでもよい。
一方、前述の本発明の実施形態は、コンピュータで実行されるプログラムで作成可能であり、コンピュータで読み取り可能な記録媒体を利用して、前記プログラムを動作させる汎用デジタルコンピュータで具現化されてもよい。また、前述の本発明の実施形態で使用されたデータの構造は、コンピュータで読み取り可能な記録媒体に多くの手段を介して記録される。前記コンピュータで読み取り可能な記録媒体は、マグネチック記録媒体(例えば、ROM(read only memory)、フロッピー(登録商標)ディスク、ハードディスクなど);光学的判読媒体(例えば、CD(compact disc)−ROM、DVD(digital versatile disc)など)のような記録媒体を含む。
以上、本発明について、その望ましい実施形態を中心に説明した。本発明が属する技術分野で当業者であるならば、本発明が、本発明の本質的な特性から外れない範囲で変形された形態に具現されるということを理解することができるであろう。従って、開示された実施形態は、限定的な観点ではなく、説明的な観点から考慮されなければならない。本発明の範囲は、前述の説明ではなく、特許請求の範囲に示されており、それと同等な範囲内にある全ての変形例は、本発明に含まれるものであると解釈されなければならないのである。