テセレーションエンジン及びそのアプリケーション
【解決手段】
グラフィクス処理を行うための方法、装置及びシステムが開示される。この点において、処理ユニットは、テセレーションモジュール及び接続性モジュールを含む。テセレーションモジュールは、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供するように構成される。接続性モジュールは、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される。
グラフィクス処理を行うための方法、装置及びシステムが開示される。この点において、処理ユニットは、テセレーションモジュール及び接続性モジュールを含む。テセレーションモジュールは、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供するように構成される。接続性モジュールは、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は概してコンピューティングシステムにおいて行われるコンピューティング動作に向けられている。より特定的には、本発明はコンピューティング動作を行う処理ユニット(例えばグラフィクス処理ユニット(GPU))及びそのアプリケーションに向けられている。
【背景技術】
【0002】
GPUは、グラフィクス処理タスク等のデータ並列コンピューティングタスクを行うように特別に設計される複雑な集積回路である。GPUは、例えば、ビデオゲームアプリケーション等のエンドユーザアプリケーションによって要求されるグラフィクス処理タスクを実行することができる。
【0003】
図1はエンドユーザアプリケーション102とGPU108の間に何層ものソフトウエアが存在し得ることを示している。エンドユーザアプリケーション102は、アプリケーションプログラミングインタフェース(API)104と通信する。API104は、GPU108に依存するフォーマットでよりはむしろ標準的なフォーマットでエンドユーザアプリケーション102がグラフィクスデータ及びコマンドを出力することを可能にする。API104はドライバ106と通信する。ドライバ106は、API104から受信した標準コードを、GPU108によって理解されるネイティブフォーマットの命令にトランスレートする。ドライバ106は典型的にはGPU108の製造業者によって書かれる。GPU108は次いでドライバからの命令を実行する。
【0004】
様々なAPIが商業的に利用可能である。エンドユーザアプリケーションの大部分は、ワシントン、レドモンドのマイクロソフト社(Microsoft Corporation of Redmond, Washington)によって開発されたダイレクトX(DirectX)(登録商標)に適合する。エンドユーザアプリケーションのこの大部分に広がるためには、GPUはダイレクトX(登録商標)に適合すべきである。
【発明の概要】
【発明が解決しようとする課題】
【0005】
ダイレクトXの最新バージョンはダイレクトX11(「DX11」)として知られている。DX11は、GPUがシェーダのシーケンスを実装している統合化シェーダモデルを用いる。例えば、図2はDX11によって指定されるシェーダ200の例示的なシーケンスを示している。図2に示されるように、GPUは、頂点シェーダ(vertex shader)202、次いでハルシェーダ(hull shader)204、次いでテセレーションシェーダ(tessellation shader)206、そしてその後に1つ以上の追加シェーダ208を実行して結果データを提供する。統合化シェーダモデルにおいては、先に実行されたシェーダ(例えばハルシェーダ204)によって提供される中間結果は、GPUが後続のシェーダ(例えばテセレーションシェーダ206)を実行するために用いられ得る。残念なことに、DX11は、GPUハードウエア視点からは最適ではないスキームを含んでいる。
【0006】
従って、DX11に適合するだけでなく、GPUハードウエア視点からも効率的に動作するシステム、装置及び方法が必要とされている。
【課題を解決するための手段】
【0007】
本発明の実施形態は、上述の必要性を満たす。例えば、本発明の実施形態は、処理ユニット内に実装されるグラフィクス処理方法を提供する。このグラフィクス処理方法は、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供することを含む。このグラフィクス処理方法は更に、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続することを含む。
【0008】
本発明の別の実施形態は、テセレーションモジュール及び接続性モジュールを含む処理ユニットを提供する。テセレーションモジュールは、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供するように構成される。接続性モジュールは、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される。
【0009】
本発明の更なる実施形態は、システムメモリと、処理ユニットと、システムメモリ及び処理ユニットに結合されるバスと、を含むコンピューティングシステムを提供する。処理ユニットは、テセレーションモジュール及び接続性モジュールを含む。テセレーションモジュールは、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供するように構成される。接続性モジュールは、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される。
【0010】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。追加的な実施形態はここに含まれる教示に基き関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【0011】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は本発明を示し、そして明細書と共に、本発明の原理を説明すること及び関連分野を含めた当業者が本発明を作りそして使用するのを可能にすることに更に役立つ。
【0012】
【図1】図1はグラフィクスを処理するための例示的なワークフローを示すブロック図である。
【0013】
【図2】図2は例示的な3次元グラフィクスAPIのグラフィクスパイプラインに含まれる例示的なシェーダを示す図である。
【0014】
【図3】図3は本発明の実施形態に従う例示的なコンピューティングシステムのブロック図である。
【0015】
【図4】図4は本発明の実施形態に従う例示的なコンピューティングシステムに含まれる追加的な要素を示す図である。
【0016】
【図5】図5は本発明の実施形態に従う例示的なGPUのブロック図である。
【0017】
【図6】図6は図5のGPUの追加的な詳細のブロック図である。
【0018】
【図7】図7は本発明の実施形態に従いテセレーションシェーダを実行するための処理ユニットの例示的な機能ブロックを示す図である。
【0019】
【図8】図8は本発明の実施形態に従い図7のテセレーションモジュールによって実装される、テセレーション点を作成するための例示的な方法を示す図である。
【0020】
【図9A】図9Aは本発明の実施形態に従いパッチのテセレーション点を作成するための例示的なシーケンスを示す図(その1)である。
【図9B】図9Bは本発明の実施形態に従いパッチのテセレーション点を作成するための例示的なシーケンスを示す図(その2)である。
【図9C】図9Cは本発明の実施形態に従いパッチのテセレーション点を作成するための例示的なシーケンスを示す図(その3)である。
【0021】
【図10】図10は本発明の実施形態に従い図7の接続性モジュールによって実装される、テセレーション点をプリミティブ内へと接続するための例示的な方法を示す図である。
【0022】
【図11】図11は本発明の実施形態に従い接続性を決定するために用いられる例示的なルックアップテーブル(LUT)を示す図である。
【0023】
【図12】図12は本発明の実施形態に従い図7の接続性モジュールによって実装される、プリミティブの頂点を再使用するための例示的な方法を示す図である。
【0024】
【図13】図13は本発明の実施形態に従い図9Aのテセレーション点がどのようにしてプリミティブ内へと接続され得るのかを示す図である。
【0025】
本発明の特徴及び利益は、図面と共に以下に記述される詳細な説明からより明らかになり、図面において同様の参照番号は全体を通して対応する要素を識別する。図面において、同様の参照数字は一般的に同一の、機能的に類似の、及び/又は構造的に類似の要素を示す。ある要素が最初に現れる図面は対応する参照番号の一番左の単一又は複数の桁によって示される。
【発明を実施するための形態】
【0026】
I.概説
本発明のある実施形態は、テセレーションエンジンを伴う処理ユニット及びそのアプリケーションを提供する。以下の詳細な説明において、「1つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
【0027】
図2に関して上述したように、典型的なグラフィクスパイプラインは複数のシェーダを含み、これらのシェーダはテセレーションシェーダ206を含む。テセレーションシェーダ206への入力は、パッチ(patch)、即ち幾何学的形状(例えば長方形、三角形、又は線)を含む。テセレーションシェーダ206の1つの目的は、パッチを複数の点へとテセレートする(tessellate)ことである。グラフィクスパイプラインの後続の段階の間、これらの点は更なる処理を被るであろう。例えば、これらの点はプリミティブ(primitives)(例えば三角形)内へと接続されることがある。本発明の実施形態に従う処理ユニットは、ハードウエア視点からテセレーションシェーダ206を効率的に実行するように構成されるテセレーションエンジンを含むことにより、従来の処理ユニットと比べて低減された面積のフットプリント(footprint)と共により良好な性能(例えばより高速な処理)を提供する。
【0028】
例示のみを目的とし且つ限定を目的とせずに、本発明の実施形態はGPUに関してここに説明されることになる。しかし、関連分野を含めた当業者であれば、本発明はテセレーションシェーダを実行する他の種類の処理ユニット、例えば中央処理ユニット及びコプロセッサ、にも適用され得ることを理解するであろう。これら他の種類のプロセッサは本発明の精神及び範囲内で検討される。
【0029】
本発明の実施形態によると、GPUは、テセレーションシェーダの実行及びそのアプリケーションに対してオフチップメモリ及びオンチップメモリを動的に用いる。オフチップメモリはオフチップローカルデータシェア(LDS)と称され、そしてオンチップメモリはオンチップLDSと称される。テセレーションが低い場合(例えば100未満の頂点が関与する場合)には、オンチップLDSが用いられる。テセレーションが高い場合(例えば100を超える頂点が関与する場合)には、オフチップLDSが用いられる。GPUドライバは、レジスタ書き込み(例えば1ビット)を通して、オンチップLDS又はオフチップLDSのどちらが用いられるのかを表示する。テセレーション出力に対してオンチップLDS又はオフチップLDSのどちらを用いるかの決定は、動的になされる。
【0030】
本発明の別の実施形態は、DX11によって指定されるスキームに適合する一方でDX11によって指定されるスキームよりもハードウエア視点からは効率的な方法でGPUがテセレーションのための点を生成することを可能にするテセレーションエンジンに向けられている。上述したように、テセレーションは、パッチ上、即ち幾何学的形状(例えば長方形、三角形、又は線)上で実行される。GPUのテセレーションエンジンは、パッチをテセレートして、接続性エンジン(connectivity engine)がテセレーション点を接続するように構成される順序でテセレーション点を提供するように構成される。対照的に、DX11アルゴリズムは、全てのテセレーション点を作成すると共にテセレーション点をメモリ内に記憶し、次いで接続性処理の間にこれらのテセレーション点をメモリからリトリーブする(retrieves)。DX11アルゴリズムとは異なり、本発明の実施形態のテセレーションエンジンは、テセレーション点をメモリ内に記憶する必要はなく、その理由は、テセレーションエンジンはそれらが接続性エンジンにおいて処理される順序で生成されるところにある。
【0031】
ある実施形態においては、テセレーションエンジンは、テセレーション点を作成する2つの演算ユニット(math units)を含む。第1の演算ユニットはパッチの外側エッジに対する点を作成するように構成され、また第2の演算ユニットはそのパッチの内側エッジに対する点を作成するように構成される。各演算ユニットは出力FIFO及び入力FIFOを含む。出力FIFOは2つの読み出し点を有しており、2つの点がクロックサイクル毎に読み出されることを可能にしている。結果として、テセレーションエンジンの2つの演算ユニットは、単一クロックサイクル内でプリミティブ(例えば三角形)の点を作成することができる。数クロックサイクルの後、テセレーションエンジンは、蛇紋路(serpentine path)を辿ることによってパッチの全ての点を作成する。このようにして、パッチの点は後続の接続性処理に対して適切な方法によりオンザフライ(on the fly)で作成されるが、DX11によって指定されるようにメモリがパッチの全ての点を記憶する必要はない。
【0032】
本発明の更なる実施形態は、固有のテセレートされた点のデータ(unique tessellated-point data)のみを提供するGPU及びそのアプリケーションに向けられており、それにより処理資源を節約している。ある実施形態においては、GPUはテセレーションモジュール及び接続性モジュールを含む。テセレーションモジュールはテセレートされた点のデータを接続性モジュールへ提供する。接続性モジュールは、テセレートされた点のデータのトポロジ(例えば点、線、又は三角形)に基づいてプリミティブを作成する。接続性モジュールはデータをストリップフォーム(strip form)で送り出し、そしてプリミティブに対する相対的索引(relative indices)を送る。
【0033】
本発明の更なる実施形態は、複数のルックアップテーブル(LUT)からLUTを選択してパッチのテセレーション点が接続されているかどうかを決定するテセレーションエンジン及びそのアプリケーションに向けられている。複数のLUTから1つのLUTを選択することによって、本発明の実施形態のテセレーションレーションエンジンは、クロックサイクル毎に1つのプリミティブを提供することができる。対照的に、DX11によって指定される単一LUTを用いることは、プリミティブを提供するために最大で32クロックサイクルを必要とすることがある。
【0034】
本発明の実施形態に従う例示的なテセレーションエンジンの更なる詳細が以下に説明される。しかし、これらの詳細を提供するのに先立ちそのようなテセレーションエンジンが実装され得る例示的なシステムを説明することは有用である。
【0035】
II.例示的なシステム
図3はある実施形態に従うコンピューティングシステム300のブロック図である。コンピューティングシステム300は、CPU302、GPU310を含み、そして随意的にコプロセッサ312を含んでいてよい。図3に示される実施形態においては、CPU302及びGPU310は別個の集積回路(IC)又はパッケージに含まれている。しかし、他の実施形態においては、CPU302及びGPU310、又はそれらの集合的な機能は、単一のIC又はパッケージ内に含まれていてよい。
【0036】
加えて、コンピューティングシステム300はまた、CPU302、GPU310及びコプロセッサ312によってアクセスされてよいシステムメモリ304を含む。実施形態においては、コンピューティングシステム300は、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、埋め込みデバイス、携帯デバイス(例えば携帯電話、スマートフォン、MP3プレイヤ、カメラ、GPSデバイス等)、又はGPUを含み若しくはGPUを含むように構成される何らかの他のデバイスを備えていてよい。図3には具体的に示されていないが、コンピューティングシステム300は、コンピューティングシステム300のコンテンツ(例えばグラフィクス、ビデオ等)を表示するためのディスプレイデバイス(例えば陰極線管、液晶ディスプレイ、プラズマディスプレイ等)を含んでいてもよい。ディスプレイデバイスは、コンテンツをユーザに表示するために用いられる(例えば、コンピューティングシステム300がコンピュータ、ビデオゲームコンソール又は携帯デバイスを備えている場合)。
【0037】
GPU310は、特定の特別の機能(例えばグラフィクス処理タスク及びデータ並列一般計算タスク)を、CPU302がソフトウエアにおいてそれらを行い得るであろうよりも通常は高速に行うことによって、CPU302を支援する。実施形態においては、GPU310はチップセット及び/又はCPU302若しくは他のプロセッサ内に集積化されていてよい。GPU310の追加的な詳細は後で提供される。
【0038】
コプロセッサ312もまたCPU302を支援する。コプロセッサ312は、限定はされないが、浮動小数点コプロセッサ、GPU、ビデオ処理ユニット(VPU)、ネットワーキングコプロセッサ、並びに関連する分野を含めて当業者に明らかであろうような他の種類のコプロセッサ及びプロセッサを備えていてよい。
【0039】
GPU310及びコプロセッサ312は、CPU302及びシステムメモリとバス314を介して通信する。バス314は、周辺要素インタフェース(peripheral component interface)(PCI)バス、アクセラレーテッドグラフィクスポート(accelerated graphics port)(AGP)バス、PCIエクスプレス(PCI Express)(PCIE)バス、又は現在利用可能であり若しくは将来開発される別の種類のバスを含めてコンピュータシステムにおいて用いられる任意の種類のバスであってよい。
【0040】
システムメモリ304に加えて、コンピューティングシステム300はローカルメモリ306及びローカルメモリ308を更に含む。ローカルメモリ306はGPU310に結合されており、またバス314に結合されていてもよい。ローカルメモリ308はコプロセッサ312に結合されており、またバス314に結合されていてもよい。ローカルメモリ306及び308は、特定のデータ(例えば頻繁に用いられるデータ)への、そのデータがシステムメモリ304内に記憶されていたとした場合に可能であろうよりも高速なアクセスを提供するために、それぞれGPU310及びコプロセッサ312に利用可能である。
【0041】
ある実施形態においては、GPU310及びコプロセッサ312は、CPU302と並列に命令をデコードし、そしてそれらを対象としている命令のみを実行する。別の実施形態においては、GPU310及びコプロセッサ312を対象としている命令をCPU302がそれぞれのコマンドバッファへ送る。
【0042】
図3には具体的に示されていないが、コンピューティングシステム300は、ディスプレイデバイス(例えば陰極線管、液晶ディスプレイ、プラズマディスプレイ等)を含み又はディスプレイデバイスに接続されていてもよい。ディスプレイデバイスは、コンテンツをユーザに表示するために用いられる(例えば、コンピューティングシステム300がコンピュータ、ビデオゲームコンソール又は携帯デバイスを備えている場合)。
【0043】
III.例示的なコンピューティングシステムの追加的な詳細
上述したように、図3は本発明の実施形態の例示的なコンピューティングシステム300を示している。図4は本発明の実施形態に従い例示的なコンピューティングシステム400に含まれてよい追加的な要素を示している。
【0044】
コンピューティングシステム400は1つ以上の処理ユニット404を含む。処理ユニット404は汎用処理ユニット(例えば図3のCPU302)又は専用処理ユニット(例えば図3のGPU310)であってよい。処理ユニット404は通信基盤406(例えば通信バス(例えば図3のバス314)、クロスオーバーバー又はネットワーク)に接続される。
【0045】
コンピューティングシステム400はまた、通信基盤406からの(又は図示しないフレームバッファからの)グラフィクスデータ、テキストデータ及び他のデータをディスプレイユニット430(例えば液晶ディスプレイ)上での表示のために転送するディスプレイインタフェース402を含む。
【0046】
コンピューティングシステム400はまた、図3のシステムメモリ304等の主メモリ408、望ましくはランダムアクセスメモリ(RAM)を含む。加えてコンピューティングシステム400は、補助メモリ410を含んでいてもよい。補助メモリ410は例えば、ハードディスクドライブ412及び/又はリムーバブル記憶ドライブ414を含んでいてよく、フロッピー(登録商標)ディスクドライブ、磁気テープドライブ、光学ディスクドライブ等を代表する。リムーバブル記憶ドライブ414は周知の方法でリムーバブル記憶ユニット418から読み出し且つ/又はリムーバブル記憶ユニット418へ書き込みする。リムーバブル記憶ユニット418はフロッピー(登録商標)ディスク、磁気テープ、光学ディスク等を代表し、リムーバブル記憶ドライブ414によって読み出され且つ書き込まれる。理解されるであろうように、リムーバブル記憶ユニット418はコンピュータソフトウエア及び/又はデータが既に記憶されたコンピュータ可読記憶媒体を含む。
【0047】
代替的な実装においては、補助メモリ410は、コンピュータプログラム又は他の命令がコンピュータシステム400にロードされることを可能にするための他の同様のデバイスを含んでいてよい。そのようなデバイスは例えばリムーバブル記憶ユニット422及びインタフェース420を含み得る。そのような例は、プログラムカートリッジ及びカートリッジインタフェース(ビデオゲームデバイスにおいて見られるようなもの)、リムーバブルメモリチップ(例えば消去可能プログラム可能リードオンリメモリ(EPROM)又はプログラム可能リードオンリメモリ(PROM))及び関連するソケット、並びにソフトウエア及びデータがリムーバブル記憶ユニット422からコンピューティングシステム400へ転送されることを可能にする他のリムーバブル記憶ユニット422及びインタフェース420を含み得る。
【0048】
コンピューティングシステム400はまた通信インタフェース424を含んでいてよい。通信インタフェース424は、ソフトウエア及びデータがコンピューティングシステム400と外部デバイスの間で転送されることを可能にする。通信インタフェース424の例は、モデム、ネットワークインタフェース(例えばイーサネット(登録商標)カード)、通信ポート、パーソナルコンピュータメモリカード国際協会(Personal Computer Memory Card International Association)(PCMCIA)スロット及びカード等を含み得る。通信インタフェース424を介して転送されるソフトウエア及びデータは、通信インタフェース424によって受信されることが可能な電子的信号、電磁気的信号、光学的信号又は他の信号であってよい信号428の形態にある。これらの信号は通信パス(例えばチャネル)426を介して通信インタフェース424へ供給される。このチャネル426は信号を伝え、そしてワイヤ若しくはケーブル、光ファイバ、電話線、携帯電話リンク、ラジオ周波数(RF)リンク又は他の通信チャネルを用いて実装され得る。
【0049】
この文書では、「コンピュータ可読記憶媒体」の用語は、リムーバブル記憶ドライブ414、及びハードディスクドライブ412内に組み込まれるハードディスクを一般的には参照して用いられる。これらのコンピュータプログラム製品は、コンピューティングシステム400にソフトウエアを提供する。
【0050】
コンピュータプログラム(コンピュータ制御論理又は命令とも称される)は主メモリ408及び/又は補助メモリ410内に記憶される。コンピュータプログラムはまた、リムーバブル記憶ドライブ414、ハードドライブ412又は通信インタフェース424を用いてコンピューティングシステム400内へロードされてよい。そのようなコンピュータプログラムは、実行されるときに、ここで論じられるような本発明の実施形態の特徴をコンピューティングシステム400が行うことを可能にする。例えばコンピュータプログラムは、実行されるときに、本発明の実施形態に従いテセレーションシェーダを処理ユニット404の少なくとも1つが実行することを可能にする。そのようなテセレーションシェーダの実行の例が以下に説明される。
【0051】
IV.例示的なGPU
図5は本発明の実施形態に従いテセレーションシェーダを実行する例示的なGPU310のブロック図である。図5の実施形態に示されるように、GPU310は、コマンドバッファ502に接続され、また入力論理504、実行ユニット506及びキャッシュ508に結合される。
【0052】
入力論理504は、グラフィクス処理タスク及び一般計算タスクに前処理を行う。入力論理504は、グラフィクス処理タスク及び/又は一般計算タスクに関連する全てのシェーダプログラムを識別し、そして利用可能になるはずの入力データ及び出力データに基づいて各シェーダプログラムが実行ユニット506においていつ着手され得るのかをスケジューリングする。例えば、特定のグラフィクス処理タスクは第1のシェーダプログラム及び第2のシェーダプログラムの実行を必要とするであろうし、ここで第2のシェーダプログラムは第1のシェーダプログラムによって生成されるデータに依存する。この例に従うと、入力論理504は、第1及び第2のシェーダプログラムを識別すると共に第1のシェーダプログラムが第2のシェーダプログラムよりも先に実行されるようにスケジューリングし、その結果、第2のシェーダプログラムのためのデータは、第2のシェーダプログラムが着手されるときに利用可能になるはずである。グラフィクス処理タスク及び一般計算タスクを前処理した後に、入力論理504はこれらのタスクを実行ユニット506へ発行する。
【0053】
実行ユニット506は、複数の計算資源(例えば単一命令多重データ(SIMD)デバイス)を含む。実行ユニット506によって実行されるべきタスクは、複数のワークロードへと分割されてよく、ここでワークロードは異なる計算資源(例えばSIMD)へ並列に発行されてよい。入力論理504は、実行ユニット506内の異なる計算資源(例えばSIMD)によってどのワークロードが処理されているのかの経過を追って、複数のスレッドが並列に実行されることを可能にする。ある実施形態においては、例えば、実行ユニット506内でどの時点においても30,000スレッドが実行され得る。実行ユニット506の動作の結果は出力バッファ(例えばフレームバッファ)へ送られる。出力バッファは、GPU310と同じチップ内に含まれていてよく、あるいはオフチップメモリ内に含まれていてよい。
【0054】
キャッシュ508は実行ユニット506によって頻繁に用いられるデータを記憶する。シェーダプログラムを実行するために実行ユニット506によってデータが必要とされると、先ず要求がキャッシュ508へと作成される。キャッシュ508内でキャッシュヒットがある(即ち要求されたデータがキャッシュ508内にある)場合、データは実行ユニット506内へ転送される。キャッシュ508内でキャッシュミスがある(即ち要求されたデータがキャッシュ508内にない)場合、要求されたデータはオフチップメモリからリトリーブされる。ある実施形態においては、キャッシュ508は1つ以上のレベル1(L1)キャッシュ及び1つ以上のレベル2(L2)キャッシュを備え、ここでL1キャッシュは、L2キャッシュよりも小さい記憶容量を有しているが、L2キャッシュよりも高速なデータアクセスを提供する。
【0055】
統合化シェーダモデルにおいては、GPUはシェーダのシーケンスを実行する。これらのシェーダを実行するために、GPUは複数のSIMDを含む。各SIMDはそれ自身のローカルデータストア(LDS)と関連付けられている。各LDSは限定されたメモリ(例えば32キロバイト)を有する。GPUが実行するシェーダの特定のシーケンスは、GPUが結合されているAPIによってディクテートされる。典型的なシーケンスにおいては、GPUは頂点シェーダ、ハルシェーダ、そして続いてテセレーションシェーダを実行する。頂点シェーダ及びハルシェーダの実行の間、SIMDは複数の頂点を受信して処理することができ、そしてその結果をそれが関連付けられているLDS内へ書き込むことになる。
【0056】
1つの問題は、テセレーションシェーダを実行するために用いられるデータは頂点シェーダ及びハルシェーダを実行したSIMDのLDS内にあるから、頂点の所与のセットに対して、テセレーションシェーダは頂点シェーダ及びハルシェーダを実行する同じSIMDによって実装されるべきであることである。GPUがテセレーションシェーダをより速く実行することを可能にし得る他の利用可能な計算資源(例えば他のSIMD)をGPUが有していることがあるにもかかわらず、他の利用可能な計算資源は、必要なデータへのアクセスをそれらが有していないという理由で、用いられることができない。
【0057】
この問題に対処するために、本発明の実施形態に従うGPU310は、図6に示されるように、テセレーションシェーダに対してオフチップLDS622(オフチップメモリ620の)又はオンチップLDS(GPU310の)を動的に用いる。図6を参照すると、GPU310の各SIMD610に対してミラー配置されたオフチップLDS622がある。入力論理504は、コマンドプロセッサ602(GPU310によって実行されるべきグラフィクス処理タスク及び一般計算タスクを受信する)及び頂点解析器604(各シェーダプログラムが実行ユニット506内でいつ着手され得るのかをスケジューリングする)を含む。GPU310の実行ユニット506は複数のSIMD610A〜610Nを含む。各SIMDは複数のオンチップLDS612A〜612Nの1つと関連付けられている。ハルシェーダ(HS)スレッドグループにおけるパッチに対して、HSデータは、SIMD610に関連付けられるオンチップLDS612(テセレーションレベルが低い場合、例えば100未満の頂点を伴う)又はオフチップLDS622(テセレーションレベルが高い場合、例えば100を超える頂点を伴う)のいずれかに書き込まれ得る。HSの末尾のコードは、HSデータがオンチップLDS612又はオフチップLDS622のどちらに書き込まれるのかを決定する。ある実施形態においては、各オフチップLDS622はクワッドバッファされ(quad-buffered)ることによって、同じSIMDがスレッドグループと同数の4回動作することを可能にしている。
【0058】
V.テセレーションエンジン
ある実施形態においては、GPU310はテセレーションエンジンを含む。テセレーションエンジンは、パッチの各エッジに対するテセレーション係数(tessellation factor)に基づいてパッチをテセレートする。2つ、4つ又は6つのテセレーション係数がパッチ毎に存在し得る。これらの係数に基づいて、テセレーションエンジンは、テセレーショントポロジに基づいてパッチを多数の点、線、又は三角形に分割する。
【0059】
例えば図9A〜Cは例示的なパッチを示している。図9A〜Cの例においては、パッチは長方形として図示されているが、これらは三角形、線、又は別の幾何学的形状であってもよい。図9Aのパッチに対しては、v方向に沿ったテセレーション係数は6であり、結果として点(0,0)と点(0,1)の間には6つの線分がもたらされる。図9Bのパッチに対しては、v方向に沿ったテセレーション係数は5であり、結果として点(0,0)と点(0,1)の間には5つの線分がもたらされる。図9Cのパッチに対しては、v方向に沿ったテセレーション係数は4であり、結果として点(0,0)と点(0,1)の間には4つの線分がもたらされる。同様に、図9A〜Cの各々におけるパッチに対しては、u方向に沿ったテセレーション係数は6であり、結果として点(0,0)と点(1,0)の間には6つの線分がもたらされる。
【0060】
テセレーションエンジンは、スレッドグループの形態にあるワークを受信する。各スレッドグループは、パッチの数、テセレーション係数をフェッチする(fetch)ために用いられるテセレーション係数メモリ内への開始アドレス、及び他の状態情報を定義する。テセレーションエンジンは、入力スレッドグループからの各パッチを処理し、各パッチに対して必要としているテセレーション係数の数を要求し、そして種々の状態データ(区分(partition)、トポロジ、軸、等)に基づいてパッチをテセレートする。テセレーションエンジンは頂点データ及びプリミティブデータを出力する。テセレーションエンジンから生じる頂点データはu,v値を備えている。
【0061】
図7は本発明の実施形態に従うテセレーションエンジンの機能ブロックを示している。図7を参照すると、テセレーションエンジンは、スレッド・パッチモジュール(thread-to-patch module)702、前処理モジュール704、テセレーションモジュール706及び接続性モジュール708を含む。これらの機能ブロックの各々が以下に更に詳細に説明される。
【0062】
A.スレッド・パッチモジュール702
スレッド・パッチモジュール702はスレッドグループをパッチへ変換する。各スレッドグループはハルシェーダ(例えば図2のハルシェーダ204)からの入力として受信される。この変換は、(i)幾つのテセレーション係数を各パッチが必要としているか、(ii)パッチのための各係数に対するテセレーション係数メモリ内へのアドレス、及び(iii)頂点キャッシュ(VC)からの要求テセレーション係数、の決定を含む。要求されたテセレーション係数はパッチ毎に一緒にバッファリングされる。パッチのための全てのテセレーション係数、及び状態情報は、スレッドグループにおける各パッチに対して前処理モジュール704へと送られる。スレッド・パッチモジュール702はまた、スレッドグループの末尾及びパケットの末尾を標識付けるためにフラグを送る。
【0063】
テセレーション係数は、テセレーションエンジンによってIEEE浮動小数点フォーマットで受信される。しかし、テセレートするために用いられる演算操作(math operations)は固定小数点で処理される。従って、ハードウエアを効率的にするために、唯一の浮動・固定変換器があり、そして値はそれらがVCから1つずつ到着するときに変換される。ユニットはまた、0.0と64.0の間の値へのテセレート係数のクランプを行う。
【0064】
B.前処理モジュール704
前処理モジュール704は1度に1つのパッチを受信し、そしてそのパッチをテセレートするために用いられる値を事前計算する。即ち、ある実施形態においては、所与のパッチに対して、テセレーションモジュール706は、幾つかの数を繰り返し用いて、そのパッチに対するテセレーション点のパラメトリック位置を計算する。これらの数は、パッチの所与のエッジに対するテセレーション係数に基づいている。テセレーション係数のセットはパッチ毎に同じであるはずなので、前処理モジュールは、繰り返し用いられる数を計算することができ、またそれらをテセレーションモジュール706へ提供することができる。
【0065】
前処理モジュール704によって実装され得る疑似コードが以下に挙げられている。しかし、この疑似コードは例示のみを目的とし且つ限定を目的としていないことが理解されるべきである。以下の疑似コードにおいては、太字の係数は、前処理モジュール704によって事前計算され、そして次いでテセレーションモジュール706に提供される係数である。
【0066】
C.テセレーションモジュール706
テセレーションモジュール706は、前処理モジュール704からパッチ情報を受信し、そしてパッチのテセレートされる点の全てを作成する。テセレーションモジュール706とは異なり、DX11アルゴリズムは、パッチ内のあらゆる点を計算し、そしてそれをメモリ内に、接続性パス(pass)の間に使用されるように記憶する。しかし、単一のパッチは最大で4,225個の点を有し得るので、これはハードウエアに対して効率的ではない。この問題に対処するために、テセレーションモジュール706は、パッチの部分を逐次的にテセレートして、テセレーション点がプリミティブ内へ接続されるかどうかが決定される順序で接続性モジュール708に提供される一連のテセレーション点を作成する。このように、DX11アルゴリズムとは異なり、テセレーションモジュール706からのテセレーション点は、接続性モジュール708へ提供されるのに先立ちメモリ内に記憶される必要がない。
【0067】
ある実施形態においては、テセレーションモジュール706は、パッチのエッジを並列に処理してテセレーション点を作成する2つの演算ユニット(math unit)を含む。例えば図8は、テセレーションモジュール706によって実装されるパイプラインの機能を示している。図8に示される機能は、図9A〜9Cの例示的なパッチを参照して以下に説明される。
【0068】
図8を参照すると、テセレーションモジュール706はステージ802においてパッチデータを受信する。上述したように、テセレーションモジュール706は、接続性モジュール708が適切な順序で出力プリミティブを作成することができるように、外側エッジ及び内側エッジに対するテセレーション点を並列に作成する。その際、外側エッジ制御ブロック808は受信したパッチの外側エッジを識別し、また内側エッジ制御ブロック804は受信したパッチの内側エッジを識別する。例えば、図9Aにおけるパッチは外側エッジ901及び内側エッジ902を含む。テセレーションモジュール706は外側エッジ901及び内側エッジ902で開始して、そして下から上へと点を作成する。例えば、ステージ810及び812においてデータを段階付け(staging)た後、外側点計算ブロック820は外側エッジ901に沿ったテセレーション点を計算し、また内側点計算ブロック814は内側エッジ902に沿ったテセレーション点を計算する。外側エッジ901に対するテセレーション点は次いで一時的に824において段階付けられ、また内側エッジ902のテセレーション点は一時的に822において段階付けられる。外側点調節ブロック828及び内側点調節ブロック826は、それぞれ外側エッジ901及び内側エッジ902のテセレーション点のスキュー(skewing)を調節する。スキューは、内側エッジ上の点及び外側エッジ上の点が同じv座標(エッジが垂直の場合)又は同じu座標(エッジが水平の場合)で位置合わせされていない場合に生じる。テセレーション点は次いで、外側点FIFO832及び内側点FIFO830内にそれぞれ記憶される。接続性モジュール708は次いで、次のサブセクションで更に詳細に説明されるように、これらのFIFOからテセレーション点をリトリーブする。
【0069】
パッチの左側の2つのエッジに沿ってテセレーション点を計算した後、テセレーションモジュール706は、パス(path)904によって示されるように、2つの上側エッジ上のテセレーション点を計算し、それにリングの右側と最後に下側が続く。外側リングが完了したら、処理は次の内側リングに対して繰り返す。リング制御ブロック806は、次の内側リングへの移行の処理を制御する。
【0070】
図9Aを参照すると、次の内側リングに対しては、エッジ902が外側エッジであり、またエッジ903が内側エッジである。内側点直交ブロック816は、直交値、即ち全エッジにわたって同じままの値を計算する。例えばエッジ902に沿ってv値は変化するが、u値は変化しない。従ってエッジ902に沿ってv値は正則値であり、またu値は直交値である。これに対して、図9Aにおけるパッチの上外側エッジに沿ってu値は変化するが、v値は変化しない。従って上外側エッジに沿ってu値は正則値であり、またv値は直交値である。その結果、エッジ902に沿って、例えば、内側点計算ブロック814はv値0.833、0.666、0.5、0.333及び0.167(下から上へ)を提供する一方で、内側点直交計算ブロック816は全エッジに対して1つのu値0.167を提供する(エッジ902に沿ったu値は一定のままであるから)。
【0071】
次のリングの処理の間、正則点値(即ちエッジに沿って変化する値)は再計算され、そして記憶されない。このことは、性能になんら問題を生じさせないし、また記憶ユニットを除去することによってハードウエア面積を低減する。一方、直交値(即ちエッジに沿って一定のままの値)は、直交FIFO818内に内側エッジから一時的に記憶され、そして外側エッジに用いられる。次の内側リングの処理の間(即ちエッジ902が外側エッジである場合)、外側点計算ブロック820はエッジ902に沿ってテセレーション点に対する正則点値を再計算し、また直交点値は直交値FIFO818からリトリーブされる。
【0072】
パッチの全てのテセレーション点の計算は、パッチ内の全てのリングが処理されて完了する。点作成のこの処理は、図9Aに示されるように蛇又は蛇紋のパターン(snake or serpentine pattern)を形成し、そして点はそれらが接続される順序で作成されるので、点の記憶をなんら必要とせず、このことは接続性モジュール708に関して後で更に詳細に説明される。点データの各片は、実行ユニット506が新たな頂点データを作成するために用いられるu,v座標として索引付けられる。作成される各新たなプリミティブもまた、パッチIDでタグ付けされる。
【0073】
点が異なる様態で作成される2つの特別な場合があり、図9B及び9Cに示されている。これら特別な場合の両方とも、パッチの最後のリングの間に生じる。図9Bを参照すると、第1の特別な場合は、パッチが多角形で終わる場合に生じる。これは最後のリングが内側エッジを有していないことを意味する。この場合、テセレーションモジュール706は、上側エッジ及び右側エッジを外側エッジ演算ユニット(例えば図8の機能ブロック808、812、820、824及び828)内で処理し、また左側エッジ及び下側エッジを内側演算ユニット(例えば図8の機能ブロック804、810、814、822及び826)内で処理する。これにより、次いでパッチの中央における三角形のグループとして接続され得る点のストリームが作成される。
【0074】
図9Cを参照すると、他の特別な場合は、パッチが中央における線で終わる場合に生じる。この場合、中央における点は内側エッジ演算ユニット(例えば図8の機能ブロック804、810、814、822及び826)によって処理される。図9Cに示されるように、左から右に線が処理され、次いで向きを変えて右から左に点が再作成される(最も右側の点は除く)。線の同じ点を再使用する三角形が線の上方及び線の下方にあるであろうから、こうするものである。ある実施形態においては、線が14点の長さより短い場合には、接続性モジュール708における再使用バッファは、繰り返された点が1回だけ実行ユニット506へ送られることを確実にする。
【0075】
上述した特別な場合の両方とも、v次元がu次元よりも大きい場合にも生じ得る。これは多角形又は線が水平の代わりに垂直であることを意味する。これは異なるエッジを演算ユニットにおいて処理させる。
【0076】
D.接続性モジュール708
接続性モジュール708はテセレートされた点のデータをテセレーションモジュール706から受信し、そしてトポロジ(点、線、又は三角形)に基づいてプリミティブを作成する。接続性モジュール708は、頂点データをストリップフォーム(strip form)で送り出し、そしてプリミティブに対する相対的索引(relative indices)を送る。重要なことには、接続性モジュール708は、パッチのどのテセレーション点が、テセレーションモジュール706がテセレーション点を作成する順序で接続されることになるのかを決定し、このことが(上述したように)、DX11アルゴリズムにおけるようにテセレーション点をメモリ内に記憶する必要性を回避している。
【0077】
例えば図13は、接続性モジュール708が図9Aのパッチに対するテセレーション点の接続性を決定する例示的な順序を示している。即ち、接続性モジュール708は、テセレーション点を2つの外側エッジに沿って下から上へと処理する。図13を参照すると、ある実施形態においては、接続性モジュール708は、(0,1)で表される頂点から開始して、そして(0,0)で表される頂点へと進む。例えば、接続性モジュール708は、頂点(0,1)、頂点1302及び頂点1304を、図13において「1」で表される第1のプリミティブ(例えば三角形)に関連付けられるものとして識別してよい。同様に、接続性モジュール708は、頂点1302、頂点1304及び頂点1306を、図13において「2」で表される第2のプリミティブ(例えば三角形)に関連付けられるものとして識別してよい。つまり、接続性モジュール708は、テセレーションモジュール706がパッチに対してテセレーション点を提供するのと同じ順序でテセレーション点がプリミティブ内へと接続されるかどうかを決定する。
【0078】
接続性モジュール708は、テセレーション係数情報に基づいてアクセスされるルックアップテーブルのセットによって、出力頂点(即ちテセレーション点)の接続性を決定する。例えば、図11は32個のルックアップテーブルのセットを示しており、接続性モジュール708はこれらのルックアップテーブルから選択して頂点が接続されるかどうかを決定する。図11を参照すると、左列はLUTの番号を含み、また右列はLUTを含む。
【0079】
接続性モジュール708と異なり、DX11アルゴリズムは32エントリLUTのみを用い、これは31で表されるLUTとして図11に示されている。DX11アルゴリズムに従うと、三角形がいつ作成され得るのかを決定するために、この1つのLUTがループスルーされる(looped through)。DX11におけるように1つのテーブルのみを用いることは、1つのプリミティブを作成するために最大で32クロックを必要とし得ることを意味する。性能要求はクロックあたり1つのプリミティブを生成することであるから、これはハードウエアにとって極めて非効率的である。本発明の実施形態によると、図11に示されるように1つのLUTが32個の別個のテーブルへと分割される。32個のテーブルの1つを選択することによって、選択されたテーブルがループスルーされ得るし、そしてプリミティブは単一クロックサイクル内で作成され得る。
【0080】
図10は頂点が接続されるかどうかを決定するために接続性モジュール708によって実装される例示的な方法1000を示している。図10を参照すると、方法1000はステップ1002で開始し、複数のルックアップテーブルからルックアップテーブルが選択される。ある実施形態においては、ルックアップテーブルは、ハルシェーダ204によって提供されるテセレーション係数に基づいて選択される。特に、テセレーション係数は2で除され、「ハーフテス係数(half tess factor)」と称される数がもたらされ、そしてハーフテス係数がLUTを選択するために用いられる。例えばテセレーション係数が10であるとすると、ハーフテス係数は5であるから、5で表される図11のLUT(エントリ{4,2,5,1,6,3}を含む)が選択されることになる。
【0081】
再び図10の方法1000を参照すると、ステップ1004では、選択されたルックアップテーブルに基づいてテセレーション点がプリミティブ内へと接続される。上述したように、図13は頂点がどのようにしてプリミティブ内へと接続され得るのかを示している。
【0082】
接続性モジュール708はまた、テセレーション点データを効率的な方法で提供する再使用論理を含む。テセレーションエンジンの再使用論理とは異なり、DX11は、パッチの座標(即ちメモリ内に記憶される(u,v)値)への索引に基づいて再使用を処理する。DX11が用いるメモリ内の索引は縮退している(degenerate)であろうし、このことは、パッチの点がメモリ内で一意的に索引付けられていないことを理由として、DX11がテセレーション点データを2回以上送るであろうことを意味している。具体的には、テセレーション係数の幾つかの値と共に、DX11のアルゴリズムは、エッジ上の多重点に対して同じパッチ座標(即ち(u,v)値)を生成する。しかし、DX11はこれらの点を一意的なもとのみなしてそれらの全てを出力として送ってしまう。
【0083】
これに対して、本発明の実施形態のテセレーションエンジンは、メモリの索引よりはむしろ、パッチの実際の座標(即ち実際の(u,v)値)に基づいて再使用を処理する。本発明の実施形態により指定されるように実際の座標を用いることは、DX11アルゴリズムに起因して縮退三角形が形成される場合に役に立つ。
【0084】
本発明の実施形態によると、テセレーションエンジンは第1の点を送り、そして任意の後続の点が第1の点と同じ座標(即ち(u,v)値)を有しているかどうかを決定する。テセレーションエンジンは、第1の点の座標を索引バッファ(例えば「パラメータキャッシュ」)内の点の座標と比較することによって、この決定をなす。ある実施形態においては、索引バッファは最大で14点を記憶する。後続の点が第1の点と同じ座標(即ち(u,v)値)を有している場合には、テセレーションエンジンは後続の点を送らない。これによりシェーダ処理が節約される。
【0085】
例えば図12は、本発明の実施形態に従い頂点を再使用するために接続性モジュール708によって実装される例示的な方法1200を示している。方法1200はステップ1202で開始し、プリミティブの頂点はそれらのそれぞれの位置に従って索引付けられ、それらの位置はパッチ内の(u,v)値によって指定される。
【0086】
グラフィクスパイプライン内の後続の処理に対して頂点を送るのに先立ち、ステップ1204に示されるように、その頂点に関連付けられている索引がバッファ内にあるかどうかが先ず決定される。ある実施形態においては、バッファは14要素幅である。索引がバッファ内にある場合には、頂点は既にグラフィクスパイプラインへと送られているので、ステップ1206に示されるように、頂点はグラフィクスパイプライン内の後続の処理へは送られない。
【0087】
一方、ステップ1204において索引がバッファ内にないと判断される場合には、ステップ1208に示されるように、グラフィクスパイプライン内の後続の処理に対して頂点が送られる。ステップ1210では、頂点に対する索引がバッファ内に置かれ、そして最も古い索引が、先入れ先出しのやり方でバッファからフラッシュされる(flushed)。
【0088】
VI.例示的なソフトウエア実装
本発明の実施形態の処理ユニットのハードウエア実装(例えばCPU302及びGPU310)に加えて、そのような処理ユニットはまた、例えばソフトウエア(例えばコンピュータ可読プログラムコード)を記憶するように構成されるコンピュータ可読媒体内に配置されるソフトウエアにおいて具現化されてもよい。プログラムコードは、(i)ここに開示されるシステムの機能及び技術(例えば図7、8、10及び12に示される機能)、(ii)ここに開示されるシステムの製造及び技術(例えばCPU302及び/又はGPU310の製造)又は(iii)ここに開示されるシステムの機能及び製造並びに技術の組み合わせ、の実施形態を含めて本発明の実施形態の実施可能性を生じさせる。
【0089】
このことは、例えば、一般的なプログラミング言語(例えばC又はC++)、ベリログ(Verilog)HDL、VHDL、アルテラ(Altera)HDL(AHDL)等を含むハードウエア記述言語(hardware description languages)(HDL)、あるいは他の利用可能なプログラミング及び/又は回路図等(schematic)キャプチャツール(capture tools)(例えば回路キャプチャツール)の使用を通して達成され得る。プログラムコードは、半導体、磁気ディスク、又は光学ディスク(例えばCD−ROM、DVD−ROM)を含む任意の既知のコンピュータ可読媒体内に配置され得る。従って、コードは、インターネット及びそれと同等のもの(the Internet and internets)を含む通信ネットワークを介して伝送され得る。上述したシステム及び技術によって達成される機能及び/又は提供される構造は、プログラムコードにおいて具現化されるコア(例えばCPUコア及び/又はGPUコア)内で表現することができ、また集積回路の生産の一部としてハードウエアに変換されてよいことが理解される。
【0090】
VII.結論
概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の1つ以上であるが全てではない例示的な実施形態を記述することができ、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。
【技術分野】
【0001】
本発明は概してコンピューティングシステムにおいて行われるコンピューティング動作に向けられている。より特定的には、本発明はコンピューティング動作を行う処理ユニット(例えばグラフィクス処理ユニット(GPU))及びそのアプリケーションに向けられている。
【背景技術】
【0002】
GPUは、グラフィクス処理タスク等のデータ並列コンピューティングタスクを行うように特別に設計される複雑な集積回路である。GPUは、例えば、ビデオゲームアプリケーション等のエンドユーザアプリケーションによって要求されるグラフィクス処理タスクを実行することができる。
【0003】
図1はエンドユーザアプリケーション102とGPU108の間に何層ものソフトウエアが存在し得ることを示している。エンドユーザアプリケーション102は、アプリケーションプログラミングインタフェース(API)104と通信する。API104は、GPU108に依存するフォーマットでよりはむしろ標準的なフォーマットでエンドユーザアプリケーション102がグラフィクスデータ及びコマンドを出力することを可能にする。API104はドライバ106と通信する。ドライバ106は、API104から受信した標準コードを、GPU108によって理解されるネイティブフォーマットの命令にトランスレートする。ドライバ106は典型的にはGPU108の製造業者によって書かれる。GPU108は次いでドライバからの命令を実行する。
【0004】
様々なAPIが商業的に利用可能である。エンドユーザアプリケーションの大部分は、ワシントン、レドモンドのマイクロソフト社(Microsoft Corporation of Redmond, Washington)によって開発されたダイレクトX(DirectX)(登録商標)に適合する。エンドユーザアプリケーションのこの大部分に広がるためには、GPUはダイレクトX(登録商標)に適合すべきである。
【発明の概要】
【発明が解決しようとする課題】
【0005】
ダイレクトXの最新バージョンはダイレクトX11(「DX11」)として知られている。DX11は、GPUがシェーダのシーケンスを実装している統合化シェーダモデルを用いる。例えば、図2はDX11によって指定されるシェーダ200の例示的なシーケンスを示している。図2に示されるように、GPUは、頂点シェーダ(vertex shader)202、次いでハルシェーダ(hull shader)204、次いでテセレーションシェーダ(tessellation shader)206、そしてその後に1つ以上の追加シェーダ208を実行して結果データを提供する。統合化シェーダモデルにおいては、先に実行されたシェーダ(例えばハルシェーダ204)によって提供される中間結果は、GPUが後続のシェーダ(例えばテセレーションシェーダ206)を実行するために用いられ得る。残念なことに、DX11は、GPUハードウエア視点からは最適ではないスキームを含んでいる。
【0006】
従って、DX11に適合するだけでなく、GPUハードウエア視点からも効率的に動作するシステム、装置及び方法が必要とされている。
【課題を解決するための手段】
【0007】
本発明の実施形態は、上述の必要性を満たす。例えば、本発明の実施形態は、処理ユニット内に実装されるグラフィクス処理方法を提供する。このグラフィクス処理方法は、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供することを含む。このグラフィクス処理方法は更に、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続することを含む。
【0008】
本発明の別の実施形態は、テセレーションモジュール及び接続性モジュールを含む処理ユニットを提供する。テセレーションモジュールは、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供するように構成される。接続性モジュールは、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される。
【0009】
本発明の更なる実施形態は、システムメモリと、処理ユニットと、システムメモリ及び処理ユニットに結合されるバスと、を含むコンピューティングシステムを提供する。処理ユニットは、テセレーションモジュール及び接続性モジュールを含む。テセレーションモジュールは、幾何学的形状の部分を逐次的にテセレートして幾何学的形状に対する一連のテセレーション点を提供するように構成される。接続性モジュールは、テセレーション点の1つ以上のグループを一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される。
【0010】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。追加的な実施形態はここに含まれる教示に基き関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【0011】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は本発明を示し、そして明細書と共に、本発明の原理を説明すること及び関連分野を含めた当業者が本発明を作りそして使用するのを可能にすることに更に役立つ。
【0012】
【図1】図1はグラフィクスを処理するための例示的なワークフローを示すブロック図である。
【0013】
【図2】図2は例示的な3次元グラフィクスAPIのグラフィクスパイプラインに含まれる例示的なシェーダを示す図である。
【0014】
【図3】図3は本発明の実施形態に従う例示的なコンピューティングシステムのブロック図である。
【0015】
【図4】図4は本発明の実施形態に従う例示的なコンピューティングシステムに含まれる追加的な要素を示す図である。
【0016】
【図5】図5は本発明の実施形態に従う例示的なGPUのブロック図である。
【0017】
【図6】図6は図5のGPUの追加的な詳細のブロック図である。
【0018】
【図7】図7は本発明の実施形態に従いテセレーションシェーダを実行するための処理ユニットの例示的な機能ブロックを示す図である。
【0019】
【図8】図8は本発明の実施形態に従い図7のテセレーションモジュールによって実装される、テセレーション点を作成するための例示的な方法を示す図である。
【0020】
【図9A】図9Aは本発明の実施形態に従いパッチのテセレーション点を作成するための例示的なシーケンスを示す図(その1)である。
【図9B】図9Bは本発明の実施形態に従いパッチのテセレーション点を作成するための例示的なシーケンスを示す図(その2)である。
【図9C】図9Cは本発明の実施形態に従いパッチのテセレーション点を作成するための例示的なシーケンスを示す図(その3)である。
【0021】
【図10】図10は本発明の実施形態に従い図7の接続性モジュールによって実装される、テセレーション点をプリミティブ内へと接続するための例示的な方法を示す図である。
【0022】
【図11】図11は本発明の実施形態に従い接続性を決定するために用いられる例示的なルックアップテーブル(LUT)を示す図である。
【0023】
【図12】図12は本発明の実施形態に従い図7の接続性モジュールによって実装される、プリミティブの頂点を再使用するための例示的な方法を示す図である。
【0024】
【図13】図13は本発明の実施形態に従い図9Aのテセレーション点がどのようにしてプリミティブ内へと接続され得るのかを示す図である。
【0025】
本発明の特徴及び利益は、図面と共に以下に記述される詳細な説明からより明らかになり、図面において同様の参照番号は全体を通して対応する要素を識別する。図面において、同様の参照数字は一般的に同一の、機能的に類似の、及び/又は構造的に類似の要素を示す。ある要素が最初に現れる図面は対応する参照番号の一番左の単一又は複数の桁によって示される。
【発明を実施するための形態】
【0026】
I.概説
本発明のある実施形態は、テセレーションエンジンを伴う処理ユニット及びそのアプリケーションを提供する。以下の詳細な説明において、「1つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
【0027】
図2に関して上述したように、典型的なグラフィクスパイプラインは複数のシェーダを含み、これらのシェーダはテセレーションシェーダ206を含む。テセレーションシェーダ206への入力は、パッチ(patch)、即ち幾何学的形状(例えば長方形、三角形、又は線)を含む。テセレーションシェーダ206の1つの目的は、パッチを複数の点へとテセレートする(tessellate)ことである。グラフィクスパイプラインの後続の段階の間、これらの点は更なる処理を被るであろう。例えば、これらの点はプリミティブ(primitives)(例えば三角形)内へと接続されることがある。本発明の実施形態に従う処理ユニットは、ハードウエア視点からテセレーションシェーダ206を効率的に実行するように構成されるテセレーションエンジンを含むことにより、従来の処理ユニットと比べて低減された面積のフットプリント(footprint)と共により良好な性能(例えばより高速な処理)を提供する。
【0028】
例示のみを目的とし且つ限定を目的とせずに、本発明の実施形態はGPUに関してここに説明されることになる。しかし、関連分野を含めた当業者であれば、本発明はテセレーションシェーダを実行する他の種類の処理ユニット、例えば中央処理ユニット及びコプロセッサ、にも適用され得ることを理解するであろう。これら他の種類のプロセッサは本発明の精神及び範囲内で検討される。
【0029】
本発明の実施形態によると、GPUは、テセレーションシェーダの実行及びそのアプリケーションに対してオフチップメモリ及びオンチップメモリを動的に用いる。オフチップメモリはオフチップローカルデータシェア(LDS)と称され、そしてオンチップメモリはオンチップLDSと称される。テセレーションが低い場合(例えば100未満の頂点が関与する場合)には、オンチップLDSが用いられる。テセレーションが高い場合(例えば100を超える頂点が関与する場合)には、オフチップLDSが用いられる。GPUドライバは、レジスタ書き込み(例えば1ビット)を通して、オンチップLDS又はオフチップLDSのどちらが用いられるのかを表示する。テセレーション出力に対してオンチップLDS又はオフチップLDSのどちらを用いるかの決定は、動的になされる。
【0030】
本発明の別の実施形態は、DX11によって指定されるスキームに適合する一方でDX11によって指定されるスキームよりもハードウエア視点からは効率的な方法でGPUがテセレーションのための点を生成することを可能にするテセレーションエンジンに向けられている。上述したように、テセレーションは、パッチ上、即ち幾何学的形状(例えば長方形、三角形、又は線)上で実行される。GPUのテセレーションエンジンは、パッチをテセレートして、接続性エンジン(connectivity engine)がテセレーション点を接続するように構成される順序でテセレーション点を提供するように構成される。対照的に、DX11アルゴリズムは、全てのテセレーション点を作成すると共にテセレーション点をメモリ内に記憶し、次いで接続性処理の間にこれらのテセレーション点をメモリからリトリーブする(retrieves)。DX11アルゴリズムとは異なり、本発明の実施形態のテセレーションエンジンは、テセレーション点をメモリ内に記憶する必要はなく、その理由は、テセレーションエンジンはそれらが接続性エンジンにおいて処理される順序で生成されるところにある。
【0031】
ある実施形態においては、テセレーションエンジンは、テセレーション点を作成する2つの演算ユニット(math units)を含む。第1の演算ユニットはパッチの外側エッジに対する点を作成するように構成され、また第2の演算ユニットはそのパッチの内側エッジに対する点を作成するように構成される。各演算ユニットは出力FIFO及び入力FIFOを含む。出力FIFOは2つの読み出し点を有しており、2つの点がクロックサイクル毎に読み出されることを可能にしている。結果として、テセレーションエンジンの2つの演算ユニットは、単一クロックサイクル内でプリミティブ(例えば三角形)の点を作成することができる。数クロックサイクルの後、テセレーションエンジンは、蛇紋路(serpentine path)を辿ることによってパッチの全ての点を作成する。このようにして、パッチの点は後続の接続性処理に対して適切な方法によりオンザフライ(on the fly)で作成されるが、DX11によって指定されるようにメモリがパッチの全ての点を記憶する必要はない。
【0032】
本発明の更なる実施形態は、固有のテセレートされた点のデータ(unique tessellated-point data)のみを提供するGPU及びそのアプリケーションに向けられており、それにより処理資源を節約している。ある実施形態においては、GPUはテセレーションモジュール及び接続性モジュールを含む。テセレーションモジュールはテセレートされた点のデータを接続性モジュールへ提供する。接続性モジュールは、テセレートされた点のデータのトポロジ(例えば点、線、又は三角形)に基づいてプリミティブを作成する。接続性モジュールはデータをストリップフォーム(strip form)で送り出し、そしてプリミティブに対する相対的索引(relative indices)を送る。
【0033】
本発明の更なる実施形態は、複数のルックアップテーブル(LUT)からLUTを選択してパッチのテセレーション点が接続されているかどうかを決定するテセレーションエンジン及びそのアプリケーションに向けられている。複数のLUTから1つのLUTを選択することによって、本発明の実施形態のテセレーションレーションエンジンは、クロックサイクル毎に1つのプリミティブを提供することができる。対照的に、DX11によって指定される単一LUTを用いることは、プリミティブを提供するために最大で32クロックサイクルを必要とすることがある。
【0034】
本発明の実施形態に従う例示的なテセレーションエンジンの更なる詳細が以下に説明される。しかし、これらの詳細を提供するのに先立ちそのようなテセレーションエンジンが実装され得る例示的なシステムを説明することは有用である。
【0035】
II.例示的なシステム
図3はある実施形態に従うコンピューティングシステム300のブロック図である。コンピューティングシステム300は、CPU302、GPU310を含み、そして随意的にコプロセッサ312を含んでいてよい。図3に示される実施形態においては、CPU302及びGPU310は別個の集積回路(IC)又はパッケージに含まれている。しかし、他の実施形態においては、CPU302及びGPU310、又はそれらの集合的な機能は、単一のIC又はパッケージ内に含まれていてよい。
【0036】
加えて、コンピューティングシステム300はまた、CPU302、GPU310及びコプロセッサ312によってアクセスされてよいシステムメモリ304を含む。実施形態においては、コンピューティングシステム300は、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、埋め込みデバイス、携帯デバイス(例えば携帯電話、スマートフォン、MP3プレイヤ、カメラ、GPSデバイス等)、又はGPUを含み若しくはGPUを含むように構成される何らかの他のデバイスを備えていてよい。図3には具体的に示されていないが、コンピューティングシステム300は、コンピューティングシステム300のコンテンツ(例えばグラフィクス、ビデオ等)を表示するためのディスプレイデバイス(例えば陰極線管、液晶ディスプレイ、プラズマディスプレイ等)を含んでいてもよい。ディスプレイデバイスは、コンテンツをユーザに表示するために用いられる(例えば、コンピューティングシステム300がコンピュータ、ビデオゲームコンソール又は携帯デバイスを備えている場合)。
【0037】
GPU310は、特定の特別の機能(例えばグラフィクス処理タスク及びデータ並列一般計算タスク)を、CPU302がソフトウエアにおいてそれらを行い得るであろうよりも通常は高速に行うことによって、CPU302を支援する。実施形態においては、GPU310はチップセット及び/又はCPU302若しくは他のプロセッサ内に集積化されていてよい。GPU310の追加的な詳細は後で提供される。
【0038】
コプロセッサ312もまたCPU302を支援する。コプロセッサ312は、限定はされないが、浮動小数点コプロセッサ、GPU、ビデオ処理ユニット(VPU)、ネットワーキングコプロセッサ、並びに関連する分野を含めて当業者に明らかであろうような他の種類のコプロセッサ及びプロセッサを備えていてよい。
【0039】
GPU310及びコプロセッサ312は、CPU302及びシステムメモリとバス314を介して通信する。バス314は、周辺要素インタフェース(peripheral component interface)(PCI)バス、アクセラレーテッドグラフィクスポート(accelerated graphics port)(AGP)バス、PCIエクスプレス(PCI Express)(PCIE)バス、又は現在利用可能であり若しくは将来開発される別の種類のバスを含めてコンピュータシステムにおいて用いられる任意の種類のバスであってよい。
【0040】
システムメモリ304に加えて、コンピューティングシステム300はローカルメモリ306及びローカルメモリ308を更に含む。ローカルメモリ306はGPU310に結合されており、またバス314に結合されていてもよい。ローカルメモリ308はコプロセッサ312に結合されており、またバス314に結合されていてもよい。ローカルメモリ306及び308は、特定のデータ(例えば頻繁に用いられるデータ)への、そのデータがシステムメモリ304内に記憶されていたとした場合に可能であろうよりも高速なアクセスを提供するために、それぞれGPU310及びコプロセッサ312に利用可能である。
【0041】
ある実施形態においては、GPU310及びコプロセッサ312は、CPU302と並列に命令をデコードし、そしてそれらを対象としている命令のみを実行する。別の実施形態においては、GPU310及びコプロセッサ312を対象としている命令をCPU302がそれぞれのコマンドバッファへ送る。
【0042】
図3には具体的に示されていないが、コンピューティングシステム300は、ディスプレイデバイス(例えば陰極線管、液晶ディスプレイ、プラズマディスプレイ等)を含み又はディスプレイデバイスに接続されていてもよい。ディスプレイデバイスは、コンテンツをユーザに表示するために用いられる(例えば、コンピューティングシステム300がコンピュータ、ビデオゲームコンソール又は携帯デバイスを備えている場合)。
【0043】
III.例示的なコンピューティングシステムの追加的な詳細
上述したように、図3は本発明の実施形態の例示的なコンピューティングシステム300を示している。図4は本発明の実施形態に従い例示的なコンピューティングシステム400に含まれてよい追加的な要素を示している。
【0044】
コンピューティングシステム400は1つ以上の処理ユニット404を含む。処理ユニット404は汎用処理ユニット(例えば図3のCPU302)又は専用処理ユニット(例えば図3のGPU310)であってよい。処理ユニット404は通信基盤406(例えば通信バス(例えば図3のバス314)、クロスオーバーバー又はネットワーク)に接続される。
【0045】
コンピューティングシステム400はまた、通信基盤406からの(又は図示しないフレームバッファからの)グラフィクスデータ、テキストデータ及び他のデータをディスプレイユニット430(例えば液晶ディスプレイ)上での表示のために転送するディスプレイインタフェース402を含む。
【0046】
コンピューティングシステム400はまた、図3のシステムメモリ304等の主メモリ408、望ましくはランダムアクセスメモリ(RAM)を含む。加えてコンピューティングシステム400は、補助メモリ410を含んでいてもよい。補助メモリ410は例えば、ハードディスクドライブ412及び/又はリムーバブル記憶ドライブ414を含んでいてよく、フロッピー(登録商標)ディスクドライブ、磁気テープドライブ、光学ディスクドライブ等を代表する。リムーバブル記憶ドライブ414は周知の方法でリムーバブル記憶ユニット418から読み出し且つ/又はリムーバブル記憶ユニット418へ書き込みする。リムーバブル記憶ユニット418はフロッピー(登録商標)ディスク、磁気テープ、光学ディスク等を代表し、リムーバブル記憶ドライブ414によって読み出され且つ書き込まれる。理解されるであろうように、リムーバブル記憶ユニット418はコンピュータソフトウエア及び/又はデータが既に記憶されたコンピュータ可読記憶媒体を含む。
【0047】
代替的な実装においては、補助メモリ410は、コンピュータプログラム又は他の命令がコンピュータシステム400にロードされることを可能にするための他の同様のデバイスを含んでいてよい。そのようなデバイスは例えばリムーバブル記憶ユニット422及びインタフェース420を含み得る。そのような例は、プログラムカートリッジ及びカートリッジインタフェース(ビデオゲームデバイスにおいて見られるようなもの)、リムーバブルメモリチップ(例えば消去可能プログラム可能リードオンリメモリ(EPROM)又はプログラム可能リードオンリメモリ(PROM))及び関連するソケット、並びにソフトウエア及びデータがリムーバブル記憶ユニット422からコンピューティングシステム400へ転送されることを可能にする他のリムーバブル記憶ユニット422及びインタフェース420を含み得る。
【0048】
コンピューティングシステム400はまた通信インタフェース424を含んでいてよい。通信インタフェース424は、ソフトウエア及びデータがコンピューティングシステム400と外部デバイスの間で転送されることを可能にする。通信インタフェース424の例は、モデム、ネットワークインタフェース(例えばイーサネット(登録商標)カード)、通信ポート、パーソナルコンピュータメモリカード国際協会(Personal Computer Memory Card International Association)(PCMCIA)スロット及びカード等を含み得る。通信インタフェース424を介して転送されるソフトウエア及びデータは、通信インタフェース424によって受信されることが可能な電子的信号、電磁気的信号、光学的信号又は他の信号であってよい信号428の形態にある。これらの信号は通信パス(例えばチャネル)426を介して通信インタフェース424へ供給される。このチャネル426は信号を伝え、そしてワイヤ若しくはケーブル、光ファイバ、電話線、携帯電話リンク、ラジオ周波数(RF)リンク又は他の通信チャネルを用いて実装され得る。
【0049】
この文書では、「コンピュータ可読記憶媒体」の用語は、リムーバブル記憶ドライブ414、及びハードディスクドライブ412内に組み込まれるハードディスクを一般的には参照して用いられる。これらのコンピュータプログラム製品は、コンピューティングシステム400にソフトウエアを提供する。
【0050】
コンピュータプログラム(コンピュータ制御論理又は命令とも称される)は主メモリ408及び/又は補助メモリ410内に記憶される。コンピュータプログラムはまた、リムーバブル記憶ドライブ414、ハードドライブ412又は通信インタフェース424を用いてコンピューティングシステム400内へロードされてよい。そのようなコンピュータプログラムは、実行されるときに、ここで論じられるような本発明の実施形態の特徴をコンピューティングシステム400が行うことを可能にする。例えばコンピュータプログラムは、実行されるときに、本発明の実施形態に従いテセレーションシェーダを処理ユニット404の少なくとも1つが実行することを可能にする。そのようなテセレーションシェーダの実行の例が以下に説明される。
【0051】
IV.例示的なGPU
図5は本発明の実施形態に従いテセレーションシェーダを実行する例示的なGPU310のブロック図である。図5の実施形態に示されるように、GPU310は、コマンドバッファ502に接続され、また入力論理504、実行ユニット506及びキャッシュ508に結合される。
【0052】
入力論理504は、グラフィクス処理タスク及び一般計算タスクに前処理を行う。入力論理504は、グラフィクス処理タスク及び/又は一般計算タスクに関連する全てのシェーダプログラムを識別し、そして利用可能になるはずの入力データ及び出力データに基づいて各シェーダプログラムが実行ユニット506においていつ着手され得るのかをスケジューリングする。例えば、特定のグラフィクス処理タスクは第1のシェーダプログラム及び第2のシェーダプログラムの実行を必要とするであろうし、ここで第2のシェーダプログラムは第1のシェーダプログラムによって生成されるデータに依存する。この例に従うと、入力論理504は、第1及び第2のシェーダプログラムを識別すると共に第1のシェーダプログラムが第2のシェーダプログラムよりも先に実行されるようにスケジューリングし、その結果、第2のシェーダプログラムのためのデータは、第2のシェーダプログラムが着手されるときに利用可能になるはずである。グラフィクス処理タスク及び一般計算タスクを前処理した後に、入力論理504はこれらのタスクを実行ユニット506へ発行する。
【0053】
実行ユニット506は、複数の計算資源(例えば単一命令多重データ(SIMD)デバイス)を含む。実行ユニット506によって実行されるべきタスクは、複数のワークロードへと分割されてよく、ここでワークロードは異なる計算資源(例えばSIMD)へ並列に発行されてよい。入力論理504は、実行ユニット506内の異なる計算資源(例えばSIMD)によってどのワークロードが処理されているのかの経過を追って、複数のスレッドが並列に実行されることを可能にする。ある実施形態においては、例えば、実行ユニット506内でどの時点においても30,000スレッドが実行され得る。実行ユニット506の動作の結果は出力バッファ(例えばフレームバッファ)へ送られる。出力バッファは、GPU310と同じチップ内に含まれていてよく、あるいはオフチップメモリ内に含まれていてよい。
【0054】
キャッシュ508は実行ユニット506によって頻繁に用いられるデータを記憶する。シェーダプログラムを実行するために実行ユニット506によってデータが必要とされると、先ず要求がキャッシュ508へと作成される。キャッシュ508内でキャッシュヒットがある(即ち要求されたデータがキャッシュ508内にある)場合、データは実行ユニット506内へ転送される。キャッシュ508内でキャッシュミスがある(即ち要求されたデータがキャッシュ508内にない)場合、要求されたデータはオフチップメモリからリトリーブされる。ある実施形態においては、キャッシュ508は1つ以上のレベル1(L1)キャッシュ及び1つ以上のレベル2(L2)キャッシュを備え、ここでL1キャッシュは、L2キャッシュよりも小さい記憶容量を有しているが、L2キャッシュよりも高速なデータアクセスを提供する。
【0055】
統合化シェーダモデルにおいては、GPUはシェーダのシーケンスを実行する。これらのシェーダを実行するために、GPUは複数のSIMDを含む。各SIMDはそれ自身のローカルデータストア(LDS)と関連付けられている。各LDSは限定されたメモリ(例えば32キロバイト)を有する。GPUが実行するシェーダの特定のシーケンスは、GPUが結合されているAPIによってディクテートされる。典型的なシーケンスにおいては、GPUは頂点シェーダ、ハルシェーダ、そして続いてテセレーションシェーダを実行する。頂点シェーダ及びハルシェーダの実行の間、SIMDは複数の頂点を受信して処理することができ、そしてその結果をそれが関連付けられているLDS内へ書き込むことになる。
【0056】
1つの問題は、テセレーションシェーダを実行するために用いられるデータは頂点シェーダ及びハルシェーダを実行したSIMDのLDS内にあるから、頂点の所与のセットに対して、テセレーションシェーダは頂点シェーダ及びハルシェーダを実行する同じSIMDによって実装されるべきであることである。GPUがテセレーションシェーダをより速く実行することを可能にし得る他の利用可能な計算資源(例えば他のSIMD)をGPUが有していることがあるにもかかわらず、他の利用可能な計算資源は、必要なデータへのアクセスをそれらが有していないという理由で、用いられることができない。
【0057】
この問題に対処するために、本発明の実施形態に従うGPU310は、図6に示されるように、テセレーションシェーダに対してオフチップLDS622(オフチップメモリ620の)又はオンチップLDS(GPU310の)を動的に用いる。図6を参照すると、GPU310の各SIMD610に対してミラー配置されたオフチップLDS622がある。入力論理504は、コマンドプロセッサ602(GPU310によって実行されるべきグラフィクス処理タスク及び一般計算タスクを受信する)及び頂点解析器604(各シェーダプログラムが実行ユニット506内でいつ着手され得るのかをスケジューリングする)を含む。GPU310の実行ユニット506は複数のSIMD610A〜610Nを含む。各SIMDは複数のオンチップLDS612A〜612Nの1つと関連付けられている。ハルシェーダ(HS)スレッドグループにおけるパッチに対して、HSデータは、SIMD610に関連付けられるオンチップLDS612(テセレーションレベルが低い場合、例えば100未満の頂点を伴う)又はオフチップLDS622(テセレーションレベルが高い場合、例えば100を超える頂点を伴う)のいずれかに書き込まれ得る。HSの末尾のコードは、HSデータがオンチップLDS612又はオフチップLDS622のどちらに書き込まれるのかを決定する。ある実施形態においては、各オフチップLDS622はクワッドバッファされ(quad-buffered)ることによって、同じSIMDがスレッドグループと同数の4回動作することを可能にしている。
【0058】
V.テセレーションエンジン
ある実施形態においては、GPU310はテセレーションエンジンを含む。テセレーションエンジンは、パッチの各エッジに対するテセレーション係数(tessellation factor)に基づいてパッチをテセレートする。2つ、4つ又は6つのテセレーション係数がパッチ毎に存在し得る。これらの係数に基づいて、テセレーションエンジンは、テセレーショントポロジに基づいてパッチを多数の点、線、又は三角形に分割する。
【0059】
例えば図9A〜Cは例示的なパッチを示している。図9A〜Cの例においては、パッチは長方形として図示されているが、これらは三角形、線、又は別の幾何学的形状であってもよい。図9Aのパッチに対しては、v方向に沿ったテセレーション係数は6であり、結果として点(0,0)と点(0,1)の間には6つの線分がもたらされる。図9Bのパッチに対しては、v方向に沿ったテセレーション係数は5であり、結果として点(0,0)と点(0,1)の間には5つの線分がもたらされる。図9Cのパッチに対しては、v方向に沿ったテセレーション係数は4であり、結果として点(0,0)と点(0,1)の間には4つの線分がもたらされる。同様に、図9A〜Cの各々におけるパッチに対しては、u方向に沿ったテセレーション係数は6であり、結果として点(0,0)と点(1,0)の間には6つの線分がもたらされる。
【0060】
テセレーションエンジンは、スレッドグループの形態にあるワークを受信する。各スレッドグループは、パッチの数、テセレーション係数をフェッチする(fetch)ために用いられるテセレーション係数メモリ内への開始アドレス、及び他の状態情報を定義する。テセレーションエンジンは、入力スレッドグループからの各パッチを処理し、各パッチに対して必要としているテセレーション係数の数を要求し、そして種々の状態データ(区分(partition)、トポロジ、軸、等)に基づいてパッチをテセレートする。テセレーションエンジンは頂点データ及びプリミティブデータを出力する。テセレーションエンジンから生じる頂点データはu,v値を備えている。
【0061】
図7は本発明の実施形態に従うテセレーションエンジンの機能ブロックを示している。図7を参照すると、テセレーションエンジンは、スレッド・パッチモジュール(thread-to-patch module)702、前処理モジュール704、テセレーションモジュール706及び接続性モジュール708を含む。これらの機能ブロックの各々が以下に更に詳細に説明される。
【0062】
A.スレッド・パッチモジュール702
スレッド・パッチモジュール702はスレッドグループをパッチへ変換する。各スレッドグループはハルシェーダ(例えば図2のハルシェーダ204)からの入力として受信される。この変換は、(i)幾つのテセレーション係数を各パッチが必要としているか、(ii)パッチのための各係数に対するテセレーション係数メモリ内へのアドレス、及び(iii)頂点キャッシュ(VC)からの要求テセレーション係数、の決定を含む。要求されたテセレーション係数はパッチ毎に一緒にバッファリングされる。パッチのための全てのテセレーション係数、及び状態情報は、スレッドグループにおける各パッチに対して前処理モジュール704へと送られる。スレッド・パッチモジュール702はまた、スレッドグループの末尾及びパケットの末尾を標識付けるためにフラグを送る。
【0063】
テセレーション係数は、テセレーションエンジンによってIEEE浮動小数点フォーマットで受信される。しかし、テセレートするために用いられる演算操作(math operations)は固定小数点で処理される。従って、ハードウエアを効率的にするために、唯一の浮動・固定変換器があり、そして値はそれらがVCから1つずつ到着するときに変換される。ユニットはまた、0.0と64.0の間の値へのテセレート係数のクランプを行う。
【0064】
B.前処理モジュール704
前処理モジュール704は1度に1つのパッチを受信し、そしてそのパッチをテセレートするために用いられる値を事前計算する。即ち、ある実施形態においては、所与のパッチに対して、テセレーションモジュール706は、幾つかの数を繰り返し用いて、そのパッチに対するテセレーション点のパラメトリック位置を計算する。これらの数は、パッチの所与のエッジに対するテセレーション係数に基づいている。テセレーション係数のセットはパッチ毎に同じであるはずなので、前処理モジュールは、繰り返し用いられる数を計算することができ、またそれらをテセレーションモジュール706へ提供することができる。
【0065】
前処理モジュール704によって実装され得る疑似コードが以下に挙げられている。しかし、この疑似コードは例示のみを目的とし且つ限定を目的としていないことが理解されるべきである。以下の疑似コードにおいては、太字の係数は、前処理モジュール704によって事前計算され、そして次いでテセレーションモジュール706に提供される係数である。
【0066】
C.テセレーションモジュール706
テセレーションモジュール706は、前処理モジュール704からパッチ情報を受信し、そしてパッチのテセレートされる点の全てを作成する。テセレーションモジュール706とは異なり、DX11アルゴリズムは、パッチ内のあらゆる点を計算し、そしてそれをメモリ内に、接続性パス(pass)の間に使用されるように記憶する。しかし、単一のパッチは最大で4,225個の点を有し得るので、これはハードウエアに対して効率的ではない。この問題に対処するために、テセレーションモジュール706は、パッチの部分を逐次的にテセレートして、テセレーション点がプリミティブ内へ接続されるかどうかが決定される順序で接続性モジュール708に提供される一連のテセレーション点を作成する。このように、DX11アルゴリズムとは異なり、テセレーションモジュール706からのテセレーション点は、接続性モジュール708へ提供されるのに先立ちメモリ内に記憶される必要がない。
【0067】
ある実施形態においては、テセレーションモジュール706は、パッチのエッジを並列に処理してテセレーション点を作成する2つの演算ユニット(math unit)を含む。例えば図8は、テセレーションモジュール706によって実装されるパイプラインの機能を示している。図8に示される機能は、図9A〜9Cの例示的なパッチを参照して以下に説明される。
【0068】
図8を参照すると、テセレーションモジュール706はステージ802においてパッチデータを受信する。上述したように、テセレーションモジュール706は、接続性モジュール708が適切な順序で出力プリミティブを作成することができるように、外側エッジ及び内側エッジに対するテセレーション点を並列に作成する。その際、外側エッジ制御ブロック808は受信したパッチの外側エッジを識別し、また内側エッジ制御ブロック804は受信したパッチの内側エッジを識別する。例えば、図9Aにおけるパッチは外側エッジ901及び内側エッジ902を含む。テセレーションモジュール706は外側エッジ901及び内側エッジ902で開始して、そして下から上へと点を作成する。例えば、ステージ810及び812においてデータを段階付け(staging)た後、外側点計算ブロック820は外側エッジ901に沿ったテセレーション点を計算し、また内側点計算ブロック814は内側エッジ902に沿ったテセレーション点を計算する。外側エッジ901に対するテセレーション点は次いで一時的に824において段階付けられ、また内側エッジ902のテセレーション点は一時的に822において段階付けられる。外側点調節ブロック828及び内側点調節ブロック826は、それぞれ外側エッジ901及び内側エッジ902のテセレーション点のスキュー(skewing)を調節する。スキューは、内側エッジ上の点及び外側エッジ上の点が同じv座標(エッジが垂直の場合)又は同じu座標(エッジが水平の場合)で位置合わせされていない場合に生じる。テセレーション点は次いで、外側点FIFO832及び内側点FIFO830内にそれぞれ記憶される。接続性モジュール708は次いで、次のサブセクションで更に詳細に説明されるように、これらのFIFOからテセレーション点をリトリーブする。
【0069】
パッチの左側の2つのエッジに沿ってテセレーション点を計算した後、テセレーションモジュール706は、パス(path)904によって示されるように、2つの上側エッジ上のテセレーション点を計算し、それにリングの右側と最後に下側が続く。外側リングが完了したら、処理は次の内側リングに対して繰り返す。リング制御ブロック806は、次の内側リングへの移行の処理を制御する。
【0070】
図9Aを参照すると、次の内側リングに対しては、エッジ902が外側エッジであり、またエッジ903が内側エッジである。内側点直交ブロック816は、直交値、即ち全エッジにわたって同じままの値を計算する。例えばエッジ902に沿ってv値は変化するが、u値は変化しない。従ってエッジ902に沿ってv値は正則値であり、またu値は直交値である。これに対して、図9Aにおけるパッチの上外側エッジに沿ってu値は変化するが、v値は変化しない。従って上外側エッジに沿ってu値は正則値であり、またv値は直交値である。その結果、エッジ902に沿って、例えば、内側点計算ブロック814はv値0.833、0.666、0.5、0.333及び0.167(下から上へ)を提供する一方で、内側点直交計算ブロック816は全エッジに対して1つのu値0.167を提供する(エッジ902に沿ったu値は一定のままであるから)。
【0071】
次のリングの処理の間、正則点値(即ちエッジに沿って変化する値)は再計算され、そして記憶されない。このことは、性能になんら問題を生じさせないし、また記憶ユニットを除去することによってハードウエア面積を低減する。一方、直交値(即ちエッジに沿って一定のままの値)は、直交FIFO818内に内側エッジから一時的に記憶され、そして外側エッジに用いられる。次の内側リングの処理の間(即ちエッジ902が外側エッジである場合)、外側点計算ブロック820はエッジ902に沿ってテセレーション点に対する正則点値を再計算し、また直交点値は直交値FIFO818からリトリーブされる。
【0072】
パッチの全てのテセレーション点の計算は、パッチ内の全てのリングが処理されて完了する。点作成のこの処理は、図9Aに示されるように蛇又は蛇紋のパターン(snake or serpentine pattern)を形成し、そして点はそれらが接続される順序で作成されるので、点の記憶をなんら必要とせず、このことは接続性モジュール708に関して後で更に詳細に説明される。点データの各片は、実行ユニット506が新たな頂点データを作成するために用いられるu,v座標として索引付けられる。作成される各新たなプリミティブもまた、パッチIDでタグ付けされる。
【0073】
点が異なる様態で作成される2つの特別な場合があり、図9B及び9Cに示されている。これら特別な場合の両方とも、パッチの最後のリングの間に生じる。図9Bを参照すると、第1の特別な場合は、パッチが多角形で終わる場合に生じる。これは最後のリングが内側エッジを有していないことを意味する。この場合、テセレーションモジュール706は、上側エッジ及び右側エッジを外側エッジ演算ユニット(例えば図8の機能ブロック808、812、820、824及び828)内で処理し、また左側エッジ及び下側エッジを内側演算ユニット(例えば図8の機能ブロック804、810、814、822及び826)内で処理する。これにより、次いでパッチの中央における三角形のグループとして接続され得る点のストリームが作成される。
【0074】
図9Cを参照すると、他の特別な場合は、パッチが中央における線で終わる場合に生じる。この場合、中央における点は内側エッジ演算ユニット(例えば図8の機能ブロック804、810、814、822及び826)によって処理される。図9Cに示されるように、左から右に線が処理され、次いで向きを変えて右から左に点が再作成される(最も右側の点は除く)。線の同じ点を再使用する三角形が線の上方及び線の下方にあるであろうから、こうするものである。ある実施形態においては、線が14点の長さより短い場合には、接続性モジュール708における再使用バッファは、繰り返された点が1回だけ実行ユニット506へ送られることを確実にする。
【0075】
上述した特別な場合の両方とも、v次元がu次元よりも大きい場合にも生じ得る。これは多角形又は線が水平の代わりに垂直であることを意味する。これは異なるエッジを演算ユニットにおいて処理させる。
【0076】
D.接続性モジュール708
接続性モジュール708はテセレートされた点のデータをテセレーションモジュール706から受信し、そしてトポロジ(点、線、又は三角形)に基づいてプリミティブを作成する。接続性モジュール708は、頂点データをストリップフォーム(strip form)で送り出し、そしてプリミティブに対する相対的索引(relative indices)を送る。重要なことには、接続性モジュール708は、パッチのどのテセレーション点が、テセレーションモジュール706がテセレーション点を作成する順序で接続されることになるのかを決定し、このことが(上述したように)、DX11アルゴリズムにおけるようにテセレーション点をメモリ内に記憶する必要性を回避している。
【0077】
例えば図13は、接続性モジュール708が図9Aのパッチに対するテセレーション点の接続性を決定する例示的な順序を示している。即ち、接続性モジュール708は、テセレーション点を2つの外側エッジに沿って下から上へと処理する。図13を参照すると、ある実施形態においては、接続性モジュール708は、(0,1)で表される頂点から開始して、そして(0,0)で表される頂点へと進む。例えば、接続性モジュール708は、頂点(0,1)、頂点1302及び頂点1304を、図13において「1」で表される第1のプリミティブ(例えば三角形)に関連付けられるものとして識別してよい。同様に、接続性モジュール708は、頂点1302、頂点1304及び頂点1306を、図13において「2」で表される第2のプリミティブ(例えば三角形)に関連付けられるものとして識別してよい。つまり、接続性モジュール708は、テセレーションモジュール706がパッチに対してテセレーション点を提供するのと同じ順序でテセレーション点がプリミティブ内へと接続されるかどうかを決定する。
【0078】
接続性モジュール708は、テセレーション係数情報に基づいてアクセスされるルックアップテーブルのセットによって、出力頂点(即ちテセレーション点)の接続性を決定する。例えば、図11は32個のルックアップテーブルのセットを示しており、接続性モジュール708はこれらのルックアップテーブルから選択して頂点が接続されるかどうかを決定する。図11を参照すると、左列はLUTの番号を含み、また右列はLUTを含む。
【0079】
接続性モジュール708と異なり、DX11アルゴリズムは32エントリLUTのみを用い、これは31で表されるLUTとして図11に示されている。DX11アルゴリズムに従うと、三角形がいつ作成され得るのかを決定するために、この1つのLUTがループスルーされる(looped through)。DX11におけるように1つのテーブルのみを用いることは、1つのプリミティブを作成するために最大で32クロックを必要とし得ることを意味する。性能要求はクロックあたり1つのプリミティブを生成することであるから、これはハードウエアにとって極めて非効率的である。本発明の実施形態によると、図11に示されるように1つのLUTが32個の別個のテーブルへと分割される。32個のテーブルの1つを選択することによって、選択されたテーブルがループスルーされ得るし、そしてプリミティブは単一クロックサイクル内で作成され得る。
【0080】
図10は頂点が接続されるかどうかを決定するために接続性モジュール708によって実装される例示的な方法1000を示している。図10を参照すると、方法1000はステップ1002で開始し、複数のルックアップテーブルからルックアップテーブルが選択される。ある実施形態においては、ルックアップテーブルは、ハルシェーダ204によって提供されるテセレーション係数に基づいて選択される。特に、テセレーション係数は2で除され、「ハーフテス係数(half tess factor)」と称される数がもたらされ、そしてハーフテス係数がLUTを選択するために用いられる。例えばテセレーション係数が10であるとすると、ハーフテス係数は5であるから、5で表される図11のLUT(エントリ{4,2,5,1,6,3}を含む)が選択されることになる。
【0081】
再び図10の方法1000を参照すると、ステップ1004では、選択されたルックアップテーブルに基づいてテセレーション点がプリミティブ内へと接続される。上述したように、図13は頂点がどのようにしてプリミティブ内へと接続され得るのかを示している。
【0082】
接続性モジュール708はまた、テセレーション点データを効率的な方法で提供する再使用論理を含む。テセレーションエンジンの再使用論理とは異なり、DX11は、パッチの座標(即ちメモリ内に記憶される(u,v)値)への索引に基づいて再使用を処理する。DX11が用いるメモリ内の索引は縮退している(degenerate)であろうし、このことは、パッチの点がメモリ内で一意的に索引付けられていないことを理由として、DX11がテセレーション点データを2回以上送るであろうことを意味している。具体的には、テセレーション係数の幾つかの値と共に、DX11のアルゴリズムは、エッジ上の多重点に対して同じパッチ座標(即ち(u,v)値)を生成する。しかし、DX11はこれらの点を一意的なもとのみなしてそれらの全てを出力として送ってしまう。
【0083】
これに対して、本発明の実施形態のテセレーションエンジンは、メモリの索引よりはむしろ、パッチの実際の座標(即ち実際の(u,v)値)に基づいて再使用を処理する。本発明の実施形態により指定されるように実際の座標を用いることは、DX11アルゴリズムに起因して縮退三角形が形成される場合に役に立つ。
【0084】
本発明の実施形態によると、テセレーションエンジンは第1の点を送り、そして任意の後続の点が第1の点と同じ座標(即ち(u,v)値)を有しているかどうかを決定する。テセレーションエンジンは、第1の点の座標を索引バッファ(例えば「パラメータキャッシュ」)内の点の座標と比較することによって、この決定をなす。ある実施形態においては、索引バッファは最大で14点を記憶する。後続の点が第1の点と同じ座標(即ち(u,v)値)を有している場合には、テセレーションエンジンは後続の点を送らない。これによりシェーダ処理が節約される。
【0085】
例えば図12は、本発明の実施形態に従い頂点を再使用するために接続性モジュール708によって実装される例示的な方法1200を示している。方法1200はステップ1202で開始し、プリミティブの頂点はそれらのそれぞれの位置に従って索引付けられ、それらの位置はパッチ内の(u,v)値によって指定される。
【0086】
グラフィクスパイプライン内の後続の処理に対して頂点を送るのに先立ち、ステップ1204に示されるように、その頂点に関連付けられている索引がバッファ内にあるかどうかが先ず決定される。ある実施形態においては、バッファは14要素幅である。索引がバッファ内にある場合には、頂点は既にグラフィクスパイプラインへと送られているので、ステップ1206に示されるように、頂点はグラフィクスパイプライン内の後続の処理へは送られない。
【0087】
一方、ステップ1204において索引がバッファ内にないと判断される場合には、ステップ1208に示されるように、グラフィクスパイプライン内の後続の処理に対して頂点が送られる。ステップ1210では、頂点に対する索引がバッファ内に置かれ、そして最も古い索引が、先入れ先出しのやり方でバッファからフラッシュされる(flushed)。
【0088】
VI.例示的なソフトウエア実装
本発明の実施形態の処理ユニットのハードウエア実装(例えばCPU302及びGPU310)に加えて、そのような処理ユニットはまた、例えばソフトウエア(例えばコンピュータ可読プログラムコード)を記憶するように構成されるコンピュータ可読媒体内に配置されるソフトウエアにおいて具現化されてもよい。プログラムコードは、(i)ここに開示されるシステムの機能及び技術(例えば図7、8、10及び12に示される機能)、(ii)ここに開示されるシステムの製造及び技術(例えばCPU302及び/又はGPU310の製造)又は(iii)ここに開示されるシステムの機能及び製造並びに技術の組み合わせ、の実施形態を含めて本発明の実施形態の実施可能性を生じさせる。
【0089】
このことは、例えば、一般的なプログラミング言語(例えばC又はC++)、ベリログ(Verilog)HDL、VHDL、アルテラ(Altera)HDL(AHDL)等を含むハードウエア記述言語(hardware description languages)(HDL)、あるいは他の利用可能なプログラミング及び/又は回路図等(schematic)キャプチャツール(capture tools)(例えば回路キャプチャツール)の使用を通して達成され得る。プログラムコードは、半導体、磁気ディスク、又は光学ディスク(例えばCD−ROM、DVD−ROM)を含む任意の既知のコンピュータ可読媒体内に配置され得る。従って、コードは、インターネット及びそれと同等のもの(the Internet and internets)を含む通信ネットワークを介して伝送され得る。上述したシステム及び技術によって達成される機能及び/又は提供される構造は、プログラムコードにおいて具現化されるコア(例えばCPUコア及び/又はGPUコア)内で表現することができ、また集積回路の生産の一部としてハードウエアに変換されてよいことが理解される。
【0090】
VII.結論
概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の1つ以上であるが全てではない例示的な実施形態を記述することができ、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。
【特許請求の範囲】
【請求項1】
処理ユニットに実装されるグラフィクス処理方法であって、
幾何学的形状の部分を逐次的にテセレートして前記幾何学的形状に対する一連のテセレーション点を提供することと、
前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続することと、を備えるグラフィックス処理方法。
【請求項2】
前記逐次的にテセレートすることは、
前記幾何学的形状の外側エッジを第1の演算ユニット内でテセレートして前記一連のテセレーション点におけるテセレーション点の第1のサブセットを提供することと、
前記幾何学的形状の内側エッジを第2の演算ユニット内でテセレートして前記一連のテセレーション点におけるテセレーション点の第2のサブセットを提供することと、を備える請求項1のグラフィクス処理方法。
【請求項3】
前記接続することは、
前記テセレーション点をメモリ内に記憶することなしに、前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続することを備える請求項1のグラフィクス処理方法。
【請求項4】
前記接続することは、
テセレーション係数に基づいて複数のルックアップテーブルの1つを選択することと、
前記選択されたルックアップテーブルを用いて、前記1つ以上のプリミティブ内へと接続されるべき前記テセレーション点の前記1つ以上のグループを識別することと、を備える請求項1のグラフィクス処理方法。
【請求項5】
前記接続することは、
クロックサイクルあたり1つのプリミティブを提供することを備える請求項1のグラフィクス処理方法。
【請求項6】
前記1つ以上のプリミティブに基づいて結果データを生成することと、
前記結果データをテセレーション係数に応じてオンチップメモリ又はオフチップメモリのいずれかに書き込むことと、を更に備える請求項1のグラフィクス処理方法。
【請求項7】
前記書き込むことは、
前記テセレーション係数が予め定められたスレッショルドよりも小さい場合に前記結果データを前記オンチップメモリに書き込むことと、
前記テセレーション係数が前記予め定められたスレッショルドよりも大きい場合に前記結果データを前記オフチップメモリに書き込むことと、を備える請求項6のグラフィクス処理方法。
【請求項8】
前記幾何学的形状内の各それぞれの頂点の位置に基づいて前記1つ以上のプリミティブのそれぞれの頂点を索引付けることと、
頂点の当該索引に基づいて頂点を後続の処理に送るかどうかを決定することと、を更に備える請求項1のグラフィクス処理方法。
【請求項9】
幾何学的形状の部分を逐次的にテセレートして前記幾何学的形状に対する一連のテセレーション点を提供するように構成されるテセレーションモジュールと、
前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される接続性モジュールと、を備える処理ユニット。
【請求項10】
前記テセレーションモジュールは、
前記幾何学的形状の外側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第1のサブセットを提供するように構成される第1の演算ユニットと、
前記幾何学的形状の内側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第2のサブセットを提供するように構成される第2の演算ユニットと、を備える請求項9の処理ユニット。
【請求項11】
前記一連のテセレーション点はメモリ内に記憶されない請求項9の処理ユニット。
【請求項12】
前記接続性モジュールは、
テセレーション係数に基づいて複数のルックアップテーブルの1つを選択し、
前記選択されたルックアップテーブルを用いて、前記1つ以上のプリミティブ内へと接続されるべき前記テセレーション点の前記1つ以上のグループを識別するように更に構成される請求項9の処理ユニット。
【請求項13】
前記接続性モジュールは、クロックサイクルあたり1つのプリミティブを提供するように構成される請求項9の処理ユニット。
【請求項14】
前記処理ユニットは前記1つ以上のプリミティブに基づいて結果データを生成するように構成され、前記結果データはテセレーション係数に応じてオンチップメモリ又はオフチップメモリのいずれかに書き込まれる請求項9の処理ユニット。
【請求項15】
前記テセレーション係数が予め定められたスレッショルドよりも小さい場合に前記結果データは前記オンチップメモリに書き込まれ、
前記テセレーション係数が前記予め定められたスレッショルドよりも大きい場合に前記結果データは前記オフチップメモリに書き込まれる請求項14の処理ユニット。
【請求項16】
前記接続性モジュールは、
前記幾何学的形状内の各それぞれの頂点の位置に基づいて前記1つ以上のプリミティブのそれぞれの頂点を索引付け、
頂点の当該索引に基づいて頂点を後続の処理に送るかどうかを決定するように更に構成される請求項9の処理ユニット。
【請求項17】
システムメモリと、
前記システムメモリに結合される処理ユニットと、を備えるコンピューティングシステムであって、
前記処理ユニットは、
幾何学的形状の部分を逐次的にテセレートして前記幾何学的形状に対する一連のテセレーション点を提供するように構成されるテセレーションモジュールと、
前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される接続性モジュールと、を備えるコンピューティングシステム。
【請求項18】
前記テセレーションモジュールは、
前記幾何学的形状の外側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第1のサブセットを提供するように構成される第1の演算ユニットと、
前記幾何学的形状の内側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第2のサブセットを提供するように構成される第2の演算ユニットと、を備える請求項17のコンピューティングシステム。
【請求項19】
前記一連のテセレーション点は前記システムメモリ内に記憶されない請求項17のコンピューティングシステム。
【請求項20】
前記接続性モジュールは、
テセレーション係数に基づいて複数のルックアップテーブルの1つを選択し、
前記選択されたルックアップテーブルを用いて、前記1つ以上のプリミティブ内へと接続されるべき前記テセレーション点の前記1つ以上のグループを識別するように更に構成される請求項17のコンピューティングシステム。
【請求項21】
前記接続性モジュールは、クロックサイクルあたり1つのプリミティブを提供するように構成される請求項17のコンピューティングシステム。
【請求項22】
前記処理ユニットはローカルメモリを更に備え、
結果データはテセレーション係数に応じて前記ローカルメモリ又は前記システムメモリのいずれかに書き込まれる請求項17のコンピューティングシステム。
【請求項23】
前記テセレーション係数が予め定められたスレッショルドよりも小さい場合に前記結果データは前記ローカルメモリに書き込まれ、
前記テセレーション係数が前記予め定められたスレッショルドよりも大きい場合に前記結果データは前記オフチップメモリに書き込まれる請求項22のコンピューティングシステム。
【請求項24】
前記接続性モジュールは、
前記幾何学的形状内の各それぞれの頂点の位置に基づいて前記1つ以上のプリミティブのそれぞれの頂点を索引付け、
頂点の当該索引に基づいて頂点を後続の処理に送るかどうかを決定するように更に構成される請求項17のコンピューティングシステム。
【請求項1】
処理ユニットに実装されるグラフィクス処理方法であって、
幾何学的形状の部分を逐次的にテセレートして前記幾何学的形状に対する一連のテセレーション点を提供することと、
前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続することと、を備えるグラフィックス処理方法。
【請求項2】
前記逐次的にテセレートすることは、
前記幾何学的形状の外側エッジを第1の演算ユニット内でテセレートして前記一連のテセレーション点におけるテセレーション点の第1のサブセットを提供することと、
前記幾何学的形状の内側エッジを第2の演算ユニット内でテセレートして前記一連のテセレーション点におけるテセレーション点の第2のサブセットを提供することと、を備える請求項1のグラフィクス処理方法。
【請求項3】
前記接続することは、
前記テセレーション点をメモリ内に記憶することなしに、前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続することを備える請求項1のグラフィクス処理方法。
【請求項4】
前記接続することは、
テセレーション係数に基づいて複数のルックアップテーブルの1つを選択することと、
前記選択されたルックアップテーブルを用いて、前記1つ以上のプリミティブ内へと接続されるべき前記テセレーション点の前記1つ以上のグループを識別することと、を備える請求項1のグラフィクス処理方法。
【請求項5】
前記接続することは、
クロックサイクルあたり1つのプリミティブを提供することを備える請求項1のグラフィクス処理方法。
【請求項6】
前記1つ以上のプリミティブに基づいて結果データを生成することと、
前記結果データをテセレーション係数に応じてオンチップメモリ又はオフチップメモリのいずれかに書き込むことと、を更に備える請求項1のグラフィクス処理方法。
【請求項7】
前記書き込むことは、
前記テセレーション係数が予め定められたスレッショルドよりも小さい場合に前記結果データを前記オンチップメモリに書き込むことと、
前記テセレーション係数が前記予め定められたスレッショルドよりも大きい場合に前記結果データを前記オフチップメモリに書き込むことと、を備える請求項6のグラフィクス処理方法。
【請求項8】
前記幾何学的形状内の各それぞれの頂点の位置に基づいて前記1つ以上のプリミティブのそれぞれの頂点を索引付けることと、
頂点の当該索引に基づいて頂点を後続の処理に送るかどうかを決定することと、を更に備える請求項1のグラフィクス処理方法。
【請求項9】
幾何学的形状の部分を逐次的にテセレートして前記幾何学的形状に対する一連のテセレーション点を提供するように構成されるテセレーションモジュールと、
前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される接続性モジュールと、を備える処理ユニット。
【請求項10】
前記テセレーションモジュールは、
前記幾何学的形状の外側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第1のサブセットを提供するように構成される第1の演算ユニットと、
前記幾何学的形状の内側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第2のサブセットを提供するように構成される第2の演算ユニットと、を備える請求項9の処理ユニット。
【請求項11】
前記一連のテセレーション点はメモリ内に記憶されない請求項9の処理ユニット。
【請求項12】
前記接続性モジュールは、
テセレーション係数に基づいて複数のルックアップテーブルの1つを選択し、
前記選択されたルックアップテーブルを用いて、前記1つ以上のプリミティブ内へと接続されるべき前記テセレーション点の前記1つ以上のグループを識別するように更に構成される請求項9の処理ユニット。
【請求項13】
前記接続性モジュールは、クロックサイクルあたり1つのプリミティブを提供するように構成される請求項9の処理ユニット。
【請求項14】
前記処理ユニットは前記1つ以上のプリミティブに基づいて結果データを生成するように構成され、前記結果データはテセレーション係数に応じてオンチップメモリ又はオフチップメモリのいずれかに書き込まれる請求項9の処理ユニット。
【請求項15】
前記テセレーション係数が予め定められたスレッショルドよりも小さい場合に前記結果データは前記オンチップメモリに書き込まれ、
前記テセレーション係数が前記予め定められたスレッショルドよりも大きい場合に前記結果データは前記オフチップメモリに書き込まれる請求項14の処理ユニット。
【請求項16】
前記接続性モジュールは、
前記幾何学的形状内の各それぞれの頂点の位置に基づいて前記1つ以上のプリミティブのそれぞれの頂点を索引付け、
頂点の当該索引に基づいて頂点を後続の処理に送るかどうかを決定するように更に構成される請求項9の処理ユニット。
【請求項17】
システムメモリと、
前記システムメモリに結合される処理ユニットと、を備えるコンピューティングシステムであって、
前記処理ユニットは、
幾何学的形状の部分を逐次的にテセレートして前記幾何学的形状に対する一連のテセレーション点を提供するように構成されるテセレーションモジュールと、
前記テセレーション点の1つ以上のグループを前記一連のテセレーション点が提供される順序で1つ以上のプリミティブ内へと接続するように構成される接続性モジュールと、を備えるコンピューティングシステム。
【請求項18】
前記テセレーションモジュールは、
前記幾何学的形状の外側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第1のサブセットを提供するように構成される第1の演算ユニットと、
前記幾何学的形状の内側エッジをテセレートして前記一連のテセレーション点におけるテセレーション点の第2のサブセットを提供するように構成される第2の演算ユニットと、を備える請求項17のコンピューティングシステム。
【請求項19】
前記一連のテセレーション点は前記システムメモリ内に記憶されない請求項17のコンピューティングシステム。
【請求項20】
前記接続性モジュールは、
テセレーション係数に基づいて複数のルックアップテーブルの1つを選択し、
前記選択されたルックアップテーブルを用いて、前記1つ以上のプリミティブ内へと接続されるべき前記テセレーション点の前記1つ以上のグループを識別するように更に構成される請求項17のコンピューティングシステム。
【請求項21】
前記接続性モジュールは、クロックサイクルあたり1つのプリミティブを提供するように構成される請求項17のコンピューティングシステム。
【請求項22】
前記処理ユニットはローカルメモリを更に備え、
結果データはテセレーション係数に応じて前記ローカルメモリ又は前記システムメモリのいずれかに書き込まれる請求項17のコンピューティングシステム。
【請求項23】
前記テセレーション係数が予め定められたスレッショルドよりも小さい場合に前記結果データは前記ローカルメモリに書き込まれ、
前記テセレーション係数が前記予め定められたスレッショルドよりも大きい場合に前記結果データは前記オフチップメモリに書き込まれる請求項22のコンピューティングシステム。
【請求項24】
前記接続性モジュールは、
前記幾何学的形状内の各それぞれの頂点の位置に基づいて前記1つ以上のプリミティブのそれぞれの頂点を索引付け、
頂点の当該索引に基づいて頂点を後続の処理に送るかどうかを決定するように更に構成される請求項17のコンピューティングシステム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9A】
【図9B】
【図9C】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9A】
【図9B】
【図9C】
【図10】
【図11】
【図12】
【図13】
【公表番号】特表2013−504816(P2013−504816A)
【公表日】平成25年2月7日(2013.2.7)
【国際特許分類】
【出願番号】特願2012−528892(P2012−528892)
【出願日】平成22年9月9日(2010.9.9)
【国際出願番号】PCT/US2010/048249
【国際公開番号】WO2011/031844
【国際公開日】平成23年3月17日(2011.3.17)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
【Fターム(参考)】
【公表日】平成25年2月7日(2013.2.7)
【国際特許分類】
【出願日】平成22年9月9日(2010.9.9)
【国際出願番号】PCT/US2010/048249
【国際公開番号】WO2011/031844
【国際公開日】平成23年3月17日(2011.3.17)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
【Fターム(参考)】
[ Back to top ]