[0031] ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、およびデジタルメディアプレーヤなどの現代的なデバイスは、CPU(中央演算処理装置)と、グラフィックスプロセッシングユニット(GPU)と、システムメモリとを備えている。アプリケーションを実行する一環としてグラフィックスをレンダリングするときに、CPUは、命令とグラフィックスデータとをGPUに送信する。いくつかの例では、グラフィックスデータは、2Dまたは3D空間内の点を記述する1つまたは複数のデータ構造体を備え得る、頂点の形態を取り得る。
[0032] CPU上で実行するアプリケーションは、アプリケーションプログラミングインターフェース(API)によりGPUと通信できる。例えば、アプリケーションは、2つの例として、Microsoft(登録商標)社によって開発されたDirectX(登録商標)API またはKhronos Groupによって開発されたOpenGL(登録商標)APIによりGPUと通信できる。図解し、理解させることを目的として、本開示で説明されている技術は、一般的にDirectXおよびOpenGL APIsを背景として説明されている。しかしながら、本開示の態様は、DirectXおよびOpenGL APIsに限定されると考えられるべきでなく、本開示で説明されている技術は、他のAPIにも同様に拡大適用され得る。
[0033] DirectXおよびOpenGLはそれぞれ、GPUによって実施されるべきグラフィックス処理パイプラインを定義する。これらのグラフィックス処理パイプラインは、プログラム可能なステージと、固定機能ステージとの組合せを含み得る。Direct3D 11 APIおよびOpenGL 4.x APIなどのAPIsのいくつかの最近のバージョンは、GPUによって行われるべきテッセレーションプロセスを含む。
[0034] テッセレーションプロセスは、オブジェクトのサーフェスの一部(パッチと称される)を複数のより小さい部分に分割することと、より小さい部分を一緒にして相互接続することとを指す。この結果、テッセレーションの前のサーフェスと比較して、より詳細なサーフェスが得られる。テッセレーションは、CPU上で実行されているアプリケーションが、少しの点を必要とし得る、低解像度のサーフェスを定義することを可能にし、またGPUがより解像度の高いサーフェスを生成することを可能にする。
[0035] テッセレーションを実施するために、GPUは、固定機能ユニット(fixed-function unit)であってもよい、テッセレーションユニットを備えることができるけれども、本開示の態様は、テッセレーションユニットが固定機能ユニットであることを必要としない。テッセレーションユニットの例として、テッセレーションステージ(DirectXパイプライン内の)、およびプリミティブ生成器(OpenGL 4.xパイプライン内の)が挙げられる。テッセレーションユニットは、ドメイン内のプリミティブを構築するように構成され得る。このドメインは、パッチと混同されるべきでない。パッチは、レンダリングされるべきオブジェクトの表面の一部である。ドメインは、テッセレーションユニットがプリミティブを中で構築するテンプレートとして考えられるものとしてよく、パッチとは別である。テッセレーションユニットは、ドメイン座標内のプリミティブの頂点を定義できる。ドメイン座標は、テッセレーションユニットのローカルの座標系に基づいており、ドメイン内の点を定義するためにテッセレーションユニットによって使用される。
[0036] ドメインシェーダ(DirectXパイプラインにおける)またはテッセレーション評価シェーダ(OpenGL 4.xパイプラインにおける)は、テッセレーションユニットからドメイン座標を受信することができ、ドメイン座標をパッチ座標(patch coordinates)に変換する。パッチ座標は、パッチ内の点を定義するためにGPUによって使用される座標系に基づく。ドメインシェーダまたはテッセレーション評価シェーダは、ドメイン内のプリミティブの頂点のドメイン座標をパッチ内の点(例えば、パッチ内のプリミティブの頂点)にマッピングし、パッチ内のそれらのマッピングされた点を相互接続して、パッチに対して解像度を加える(例えば、パッチ内のプリミティブを加えてパッチに解像度を加える)ものとして考えられ得る。
[0037] いくつかの例では、テッセレーションユニットは、ときには、プリミティブのそれぞれの頂点に対するドメイン座標を、変換後頂点キャッシュ(PTVC)と称される、再利用バッファに出力できる。コントローラは、再利用バッファがテッセレーションユニットによって出力されるドメイン座標に対するパッチ座標を格納するかどうかを決定できる。コントローラが、再利用バッファがテッセレーションユニットによって出力されるドメイン座標に対するパッチ座標を格納しないと決定した場合、コントローラは、ドメインシェーダまたはテッセレーション評価シェーダのインスタンスに、ドメイン内のプリミティブの頂点のドメイン座標をパッチ内に付加されるべきプリミティブの頂点に対してパッチ座標に変換することを実行させ得る。次いで、コントローラは、パッチ座標を再利用バッファ内に格納し得る。しかしながら、コントローラが、再利用バッファがすでに、テッセレーションユニットによって出力されるドメイン座標に対するパッチ座標を格納していると決定した場合、コントローラは、ドメインシェーダまたはテッセレーション評価シェーダのインスタンスに実行させ得ない。
[0038] 一般に、ドメインシェーダまたはテッセレーション評価シェーダの実行は、テッセレーションプロセスを遅くする可能性がある実質的な処理時間を必要とし得る。本開示で説明されている技術は、テッセレーションユニットが、ドメイン内のプリミティブの頂点を出力し、テッセレーションユニットによって出力されるプリミティブの頂点のドメイン座標に対するパッチ座標をすでに格納している確率(likelihood)を高める順序に関係する。この結果、潜在的に、他の技術に比較して、ドメインシェーダまたはテッセレーション評価シェーダの実行のインスタンスが少なくなり、延いては、その結果、テッセレーションプロセスの完了が高速化し得る。
[0039] 本開示で説明されている技術では、テッセレーションユニットは、ドメイン内のプリミティブの頂点を特定の順序で出力し得る。より詳しく説明すると、テッセレーションユニットは、ドメインの一部の中のプリミティブの頂点を出力できる。例えば、テッセレーションユニットは、ドメインを複数の部分に分割できる。これらの部分のうちの少なくとも1つは、ドメイン内の連続的領域内を囲み、連続的部分と称され得る。より詳しく説明すると、ドメインの連続的部分は、その部分の中に、ドメイン内のプリミティブを除外するギャップがないことを意味し得る。
[0040] より詳しく説明すると、テッセレーションユニットは、プリミティブの頂点を出力することができ、プリミティブは、連続的部分内の1つまたは複数の対角線ストリップに配置構成される。例えば、テッセレーションユニットは、第1の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第1の対角線ストリップは、連続的部分内に配置される。
[0041] 第1の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニットは、第2の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第2の対角線ストリップは、連続的部分内に配置される。いくつかの例では、第2の対角線ストリップは、第1の対角線ストリップと平行であり得る。他の例では、第2の対角線ストリップは、第1の対角線ストリップと接するものとしてよい。
[0042] 第2の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニットは、次いで、第3の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、以下同様に続けることができる。第3の対角線ストリップは、第1の対角線ストリップと平行であり得る。テッセレーションユニットは、テッセレーションユニットがドメインの部分のうちの1つの中のプリミティブを出力することを完了するまで対角線ストリップ内のプリミティブを出力できる。テッセレーションユニットは、ドメイン内の他の部分の中のプリミティブを実質的に類似の方法で出力できる。
[0043] 図1は、本開示で説明されている1つまたは複数の例によるグラフィックス処理パイプラインの一例を実施できるグラフィックスプロセッシングユニット(GPU)の一例を示す概念図である。図1は、グラフィックプロセッシングユニット(GPU)12と、システムメモリ14と、中央演算処理装置(CPU)16とを備えるデバイス10を示している。デバイス10の例として、限定はしないが、モバイルワイヤレスデバイス(例えば、ワイヤレス電話)、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、テレビジョンセットトップボックス、および同様のものが挙げられる。
[0044] CPU16は、様々なタイプのアプリケーションを実行し得る。アプリケーションの例として、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、または表示用の閲覧可能オブジェクトを生成する他のアプリケーションが挙げられる。1つまたは複数のアプリケーションの実行のための命令は、システムメモリ14内に記憶され得る。CPU16は、さらに処理するために生成された閲覧可能オブジェクトのグラフィックスデータをGPU12に送信できる。
[0045] 例えば、GPU12は、グラフィックスデータを処理する適切な機能を果たす、超並列処理を可能にする専用ハードウェアであってもよい。この方法で、CPU16は、GPU12によってより適切に取り扱われるグラフィックス処理をオフロードする。CPU16は、特定のアプリケーションプロセッシングインターフェース(API)に従ってGPU12と通信できる。このようなAPIsの例として、Microsoft(登録商標)によるDirectX(登録商標)APIおよびKhronosグループによるOpenGL(登録商標)が挙げられるが、本開示の態様は、DirectXおよびOpenGL APIsに限定されず、すでに開発されている、現在開発中である、または将来開発されるであろう他のタイプのAPIsに拡大適用され得る。
[0046] GPU12がそのようにCPU16からグラフィックスデータを受信すべきである方法を定義することに加えて、APIは、GPU12が実施すべき特定のグラフィックス処理パイプラインを定義し得る。図1のGPU12は、Direct3D 11 APIなどのDirectX 11.x APIで定義されているグラフィックス処理パイプラインを示している。より詳しく説明すると、図2は、OpenGL 4.x APIのグラフィックス処理パイプラインを示している。
[0047] CPU16およびGPU12の例としては、限定はしないが、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路がある。いくつかの例では、GPU12は、グラフィックス処理に好適な超並列処理能力をGPU12に与える集積回路および/またはディスクリート論理回路を含む専用ハードウェアであり得る。いくつかの事例では、GPU12は、汎用処理をも含み得、汎用GPU(GPGPU:general purpose GPU)と呼ばれることがある。本開示で説明する技法は、GPU12がGPGPUである例にも適用可能であり得る。
[0048] システムメモリ14は1つまたは複数のコンピュータ可読記憶媒体を備え得る。システムメモリ14の例としては、限定はしないが、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM(登録商標))、フラッシュメモリ、または命令および/またはデータ構造の形態で所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る任意の他の媒体がある。
[0049] いくつかの態様では、システムメモリ14は、CPU16および/またはGPU12に、本開示におけるCPU16とGPU12とに帰される機能を行わせる命令を含み得る。従って、システムメモリ14は、実行されると、1つまたは複数のプロセッサ(例えば、CPU16およびGPU12)に、様々な機能を行わせる、命令が格納されているコンピュータ可読記憶媒体であってよい。
[0050] システムメモリ14は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が搬送波または伝搬信号で具現化されないことを示し得る。しかしながら、「非一時的」という用語は、システムメモリ14は、その内容に関して、移動不可能であるか、または必ず静的であることを意味すると解釈されるべきでない。一例として、システムメモリ14は、デバイス10から取り外されて、別のデバイスに移動されてもよい。別の例として、システムメモリ14に実質的に類似する、システムメモリは、デバイス10内に挿入され得る。いくつかの実施形態において、非一時的記憶媒体は、時間の経過とともに変化し得るデータを格納できる(例えば、RAM内)。
[0051] CPU16上でのアプリケーションの実行は、CPU16に、閲覧可能なコンテンツを形成するために一緒に接続する複数のプリミティブを生成させる。プリミティブの例としては、点、線、三角形、正方形、または任意の他のタイプの多角形がある。CPU16は、これらのプリミティブをそれらのそれぞれの頂点によって定義し得る。例えば、CPU16は頂点についての座標と色値とを定義し得る。座標値は3次元(3D)座標または2D座標であり得る。
[0052] いくつかの場合において、CPU16は、パッチと称される特別なタイプのプリミティブも生成し得る。他のプリミティブタイプと同様に、パッチは、パッチの制御点と称される、複数の頂点によって定義され得る。他のプリミティブタイプと異なり、パッチは、特定の形状を有していなくてもよい。例えば、CPU16は、任意の方法でパッチの制御点を相互接続することができ、従って、相互接続された制御点は、任意の所望の形状を形成する。三角形などの他のプリミティブタイプについては、CPU16は、頂点が相互接続される特定の方法を定義できる(例えば頂点の相互接続の結果、三角形が得られる)。
[0053] 他のプリミティブタイプと異なり、パッチ内の制御点の数は可変であってよい。例えば、CPU16上で実行するアプリケーションがパッチに対して許容される制御点の最大数を定義できたり、制御点の最大数がユーザ定義されるものであり得る。いくつかの例では、パッチ内の制御点の数が1から32個の制御点であってよいが、本開示で説明されている技術は、そのように限定されない。
[0054] CPU16は、テッセレーションを目的として制御パッチを利用できる。上で説明されているように、テッセレーションプロセスは、CPU16が低解像度の閲覧可能オブジェクトのサーフェスの一部を定義することと、その部分をテッセレートしてサーフェスのより高解像度のバージョンを生成することとを指す。例えば、CPU16は、制御点が相互接続されたときにパッチが閲覧可能オブジェクトのサーフェスの一部を形成するようにパッチの制御点を定義できる。サーフェスがパッチの制御点からのみ形成されるとすれば、サーフェスは、高解像度で表示されず、ギザギザに粗く表示され得る。テッセレーションを使用すると、追加のプリミティブがパッチに付加され、これにより、プリミティブが相互接続されたときに、これらのプリミティブの相互接続がパッチに詳細を付加し、これにより、パッチの解像度を高め、その結果、より高品質の閲覧可能コンテンツが得られる。
[0055] GPU12は、テッセレーションを実施するように構成され得る。このようにして、CPU16は、より高解像度のパッチを生成するのに必要な追加のすべてのプリミティブに対する頂点を定義する必要がなく、従って、CPU16によって行われる計算を軽減できる。また、CPU16は、より少数の頂点(例えば、付加されるべきプリミティブの頂点ではなく、制御点の頂点)を送信するだけでよく、GPU12は、それに応じて、システムメモリ14へのアクセス回数が少ないことで帯域幅効率を促す、より小数の頂点を受信するだけでよい。
[0056] グラフィックス演算を行うために、GPU12は、グラフィックス処理パイプラインを実施できる。グラフィックス処理パイプラインは、GPU12上で実行しているソフトウェアまたはファームウェアによって定義された機能を行うことと、特定の機能を行うように配線接続された固定機能ユニットによって機能を行うこととを含む。GPU12上で実行しているソフトウェアまたはファームウェアはシェーダと呼ばれることがあり、シェーダはGPU12の1つまたは複数のシェーダコア上で実行し得る。ユーザは、任意の考えられる方法で所望のタスクを行うようにシェーダを設計できるので、シェーダはユーザに機能的フレキシビリティを与える。固定機能ユニットは、しかしながら、固定機能ユニットがタスクを行う方式(manner)のために配線接続される。従って、固定機能ユニットは、ソフトウェアまたはファームウェアによって提供されるプログラム可能な機能的柔軟性などの多くの機能的柔軟性を備えることができない。
[0057] 上記のように、図1に示されたグラフィックス処理パイプラインは、実質的にDirect3D 11によって定義されたグラフィック処理パイプラインである。この例では、GPU12は、入力アセンブラステージ18、頂点シェーダ20、ハルシェーダステージ22、テッセレーションステージ24、ドメインシェーダステージ26、ジオメトリシェーダステージ28、ラスタライザステージ30、ピクセルシェーダステージ32、および出力マージステージ34のうちの1つまたは複数を含み得る。GPU12は、図示されたものよりも多くのステージを含み得、いくつかの例では、GPU12は、必ずしも図示されたステージのすべてを含むとは限らない。また、ステージの特定の順序付けは、例示のために与えたものであり、限定的であると考えられるべきではない。
[0058] 本開示で説明されている技術では、CPU16は、パッチの制御点をシステムメモリ14に出力できる。次いで、GPU12は、システムメモリ14から制御点を取り出すことができる。この方法で、CPU16は、制御点をGPU12に送信できる。本開示で使用されているように、CPU16がGPU12に送信すること、またはGPU12がCPU16から受信することは、一般的に、CPU16がシステムメモリ14に書き込み、GPU12が読み出すことを含み得る。代替的に、CPU16がGPU12に直接送信すること、およびGPU12がCPU16から直接受信することが可能であるものとしてよい。
[0059] 入力アセンブラステージ18は、CPU16によって定義されているようにシステムメモリ14から制御点を読み出し、制御点をアセンブルしてパッチを形成できる。例えば、入力アセンブラステージ18は、制御点の座標と、色値と、他のそのような情報とを読み出すことができる。座標、色値、および他のそのような情報は、一般的に制御点の属性と称され得る。制御点の属性に基づき、入力アセンブラステージ18は、パッチの一般的なレイアウトを決定できる。この方法で、入力アセンブラステージ18は、制御点をアセンブルしてパッチを形成できる。入力アセンブラステージ18は、固定機能論理ユニットまたはプログラム可能ユニットであってよい。
[0060] 頂点シェーダステージ20は、入力アセンブラステージ18からの頂点(例えば、パッチの制御点)を処理できる。例えば、頂点シェーダステージ20は、変換、スキニング、モーフィング、および頂点ごとの照明などの頂点ごとの演算を行い得る。頂点シェーダステージ20はシェーダであり得る。
[0061] ハルシェーダステージ22は、頂点シェーダステージ20よって処理されるように、パッチの制御点の受信し、制御点も処理し、処理されたパッチに対して制御点を出力する。言い換えれば、ハルシェーダステージ22は、頂点シェーダステージ20によって処理された入力パッチを受信し、入力パッチを処理し、出力パッチを出力する。ハルシェーダステージ22は、入力パッチを処理するための様々な機能を行い得る。例えば、ハルシェーダステージ22は、制御点の座標を修正して、制御点の配置を変更できたり、制御点を付加もしくは削除すらできたりする。
[0062] それに加えて、ハルシェーダステージ22は、ハルシェーダステージ22によって生成されるパッチ(すなわち、出力パッチ)にプリミティブをいくつ追加するべきかを示す値を決定できる。ハルシェーダステージ22は、いくつのプリミティブがパッチに追加されるべきか決定するために様々な基準を利用し得る。いくつのプリミティブがパッチに追加されるべきか決定するためにハルシェーダステージ22が利用し得る、2つの例示的な基準について以下で説明する。しかしながら、本開示の態様はそのように限定されず、ハルシェーダステージ22は、いくつのプリミティブがパッチに追加されるべきかを決定するために任意の基準を利用し得る。
[0063] 一例として、ハルシェーダステージ22は、パッチの深さを示す情報を利用して、プリミティブをいくつ付加すべきかを決定できる。例えば、閲覧者の視点からさらに遠くなるパッチは、日常生活では距離が遠い物体ほどぼやけて見えるので高解像度を必要としない場合がある、しかしながら、閲覧者の視点から、より近い位置にあるパッチは、日常生活では距離が近い物体ほどはっきり見えるのでより高い解像度を必要する場合がある、この例では、ハルシェーダステージ22は、互いに関して、より少ないプリミティブがより遠く離れているパッチに付加されるべきであり、より多くのプリミティブがより近いパッチに付加されるべきであると決定できる。
[0064] 別の例として、ハルシェーダステージ22は、パッチのサイズに基づき付加されるべきであると決定できる。より小さいサイズのパッチでは、ハルシェーダステージ22は、パッチがより小さい領域を囲むので、より少ないプリミティブが付加されるべきであると決定できる。より大きいサイズのパッチでは、ハルシェーダステージ22は、パッチがより広い領域を囲むので、より多くのプリミティブが付加されるべきであると決定できる。
[0065] プリミティブがいくつ付加されるべきかの決定に基づき、ハルシェーダステージ22は、プリミティブがいくつパッチに付加されるべきかを示すドメインタイプと値とをテッセレーションステージ24に出力できる。Direct3D 11 APIにおいて、プリミティブがいくつパッチに付加されるべきかを示す値は、テス係数(tessfactor)と称される。
[0066] ドメインは、テッセレーションステージ24がテッセレーションを目的として使用するテンプレート形状として考えられ得る。ドメインタイプの例として、直線、三角形、四角形(例えば、四辺多角形)、または任意の他のタイプの多角形が挙げられる。ドメインは、パッチが三次元(3D)サーフェスまたは2Dサーフェスを定義する場合でも二次元(2D)形状とすることができる。ドメインが直線である場合、ドメインは、パッチが3Dサーフェス、2Dサーフェス、または1Dサーフェスを定義するとしても、一次元(1D)形状(すなわち、直線)であってよい。例示を目的として、本開示で説明されている技術は、ドメインが2Dサーフェスであることに関して説明されている。例えば、これらの技術は、三角形または四角形であるドメイン形状で説明されている。
[0067] いくつかの例において、ハルシェーダステージ22は、ドメインタイプを明示的に示していなくてもよい。むしろ、テッセレーションステージ24は、送信されたテス係数の数に基づきドメインタイプを決定できる。例えば、4つのテス係数の存在は、ドメインタイプが三角形ドメインタイプであることを示し、6つのテス係数の存在は、ドメインタイプが四角形ドメインタイプであることを示し得る。
[0068] いくつかの例では、四角形ドメインは、二次元(2D)デカルト座標(Cartesian coordinates)(u,v)によって定義され得る。いくつかの例では、三角形ドメインは、重心座標(Barycentric coordinates)によって定義され得る。重心座標は、3つの座標を利用して、三角形内の任意の点を識別する。例えば、三角形ドメインの頂点は、以下でより詳しく説明されているように、(u,v,w)として定義され得る。三角形内の任意の点の配置は、頂点への近接度を示す頂点重み付けによって定義される。例えば、点が頂点に近ければ近いほど、その頂点重み付けは高く、点が頂点から遠く離れていればいるほど、頂点重み付けは低い。
[0069] 例えば、三角形の頂点は、重心座標(u,v,w)で次のように定義されると仮定する。(1,0,0)、(0,1,0)、および(0,0,1)。この例では、中心点は、頂点の各々から等しい距離にあるので(1/3,1/3,1/3)に配置される。また、頂点座標の与えられた定義により、この例では、三角形ドメイン内の任意の点に対するu、v、およびw座標の和は、1に等しい値であるべきである。
[0070] デカルト座標および重心座標は、例示のみによって説明されており、制限として解釈すべきでない。他の例では、重心座標またはデカルト座標で四角形ドメインを、デカルト座標または重心座標で三角形ドメインを定義することが可能であるものとしてよい。一般に、任意のタイプのドメインは、任意の座標系を使用して定義され得る。
[0071] テッセレーションステージ24は、ドメインを複数のプリミティブにテッセレートできる(例えば、ドメイン内に複数のプリミティブを構築する)。この例では、テッセレーションステージ24は、ハルシェーダステージ22によって出力されたパッチをプリミティブにテッセレートせず、むしろ、ドメインをプリミティブにテッセレートすることは理解されるであろう。いくつかの例では、テッセレーションステージ24は、ハルシェーダステージ22によって出力されたパッチへのアクセス権すら有していない場合がある。テッセレーションステージ24は、固定機能ユニットであってもよいけれども、本開示の態様はそのようには限定される必要はない。
[0072] テッセレーションステージ24は、ハルシェーダステージ22によって出力されたテス係数を利用して、ドメインを複数のプリミティブにテッセレートできる。例えば、ドメインタイプ(例えば、三角形または四角形)を定義することに加えて、テス係数では、ドメイン内にリングをいくつ含めるべきかを定義できる。
[0073] リングは、ドメイン内の一連の同心形状であってよく、同心形状は、ドメイン形状と同じ形状である。例えば、ドメイン形状が四角形である場合、四角形の周は、外側リングであると考えられ得る。ハルシェーダステージ22は、内側リングの数を定義することができ、これは四角形ドメイン内に配置される一連のより小さいサイズの四角形であってよい。同様に、ドメイン形状が三角形である場合、三角形の周は、三角形ドメイン内に配置される一連のより小さいサイズの三角形とすることができる。
[0074] ドメイン内でリングの数を定義することに加えて、テス係数は、リングに沿って配置される点を定義する。これらのリングに沿って配置される点は、制御点と混同されるべきでない。制御点は、パッチを定義する。リングに沿って配置される点は、テス係数に基づきテッセレーションステージ24によって生成される点である。これらの点は、ドメイン内に生成され、パッチ内には生成されない。
[0075] また、テッセレーションステージ24が一緒に接続してドメイン内に複数のプリミティブを構築するのがこれらの点である。例えば、テッセレーションステージ24が構築するプリミティブは、三角形であると仮定する。この例では、テッセレーションステージ24は、外側リングに沿って配置される1つの点を、内側リングに沿って配置される2つの点と接続して、三角形プリミティブを形成し得る。代替的に、テッセレーションステージ24は、外側リングに沿って配置される2つの点を、内側リングに沿って配置される1つの点と接続して、三角形プリミティブを形成し得る。このようにして、ドメインタイプと、ドメイン内のリングの数と、外側および内側リングに沿った点の数とを定義することによって、ハルシェーダステージ22は、テッセレーションステージ24がドメイン内に構築すべきプリミティブの数を定義できる。
[0076] いくつかの例では、リングのエッジに沿って配置され得る点の数は、1つの点から65個の点までとしてよい。例えば、ドメインタイプが三角形である場合、三角形ドメインのエッジごとに最大65個までの点があり得る。同様に、ドメインタイプが四角形である場合、四角形のエッジごとに最大65個までの点があり得る。しかしながら、本開示で説明されている技術は、最大65個の点を有するエッジに限定されない。
[0077] さらに、リングに沿って配置される点の数は、外側リングと内側リングとで異なっていてもよい。例えば、外側リングのエッジに沿って配置される点の数は、内側リングのエッジに沿って配置される点の数より多くても、または少なくてもよい。また、外側リングおよび内側リングのエッジに沿って配置される点の数が同数である可能性もあり得る。
[0078] さらに、同じリングのエッジに沿った数点は異なっていてもよい。例えば、三角形ドメインについて、エッジのうちの1つに沿って配置される点の数は、他の1つのエッジに沿って配置される点の数と異なっていてもよい。同様に、四角形ドメインについて、エッジのうちの1つに沿って配置される点の数は、1つ、2つ、または3つすべての他の、残りのエッジに沿って配置される点の数と異なっていてもよい。また、リングのエッジの各々が同じ数の点を有している可能性もあり得る。
[0079] 上で説明されているように、いくつかの例では、テッセレーションステージ24は、パッチを複数のプリミティブに分割し得ない。従って、いくつかの例では、テッセレーションステージ24は、制御点の数、制御点の配置、またはパッチのサイズなどの情報を受け取ることができない。パッチのサイズおよび制御点の配置に関する情報がないと、テッセレーションステージ24は、使用されるドメインのサイズまたはドメインの頂点に対する特定の座標を定義することができない場合がある。
[0080] これに対処するために、テッセレーションステージ24は、正規化された座標系を利用して、ドメインの頂点を定義すること、さらにはドメイン内の相互接続された点の配置を決定できる。正規化された座標の一例として、テッセレーションステージ24は、次のようにu、v座標で四角形ドメインの頂点を定義できる。(0,0)、(1,0)、(0,1)、および(1,1)。すなわち、単位正方形である。テッセレーションステージ24は、次のようにu、v、w座標で三角形ドメインの頂点を定義できる。(0,0,1)、(0,1,0)、および(1,0,0)。すなわち、正三角形である。テッセレーションステージ24は、この正規化された座標系内の複数のプリミティブの相互接続された頂点に対する座標を決定できる。言い換えれば、テッセレーションステージ24は、ローカルの正規化された座標系を使用してドメイン内のプリミティブの頂点の座標を定義できる。本開示では、テッセレーションステージ24によって定義されるような頂点の座標は、これらの座標がドメインに対する正規化された座標系に関するものであるので、ドメイン座標と称され得る。
[0081] 例示されているグラフィックスパイプラインにおいて、ドメインシェーダ26は、正規化された座標系内の複数のプリミティブの頂点に対するドメイン座標を受信できる(例えば、適宜、u、v座標、またはu、v、w座標)。ドメインシェーダステージ26の機能は、テッセレーションステージ24から受信されるとおりに、頂点のドメイン座標を、パッチ上にマッピングすることであるものとしてよい。例えば、テッセレーションステージ24は、ハルシェーダステージ22によって定義されているようにパッチの情報を受信できないが、ドメインシェーダステージ26は、ハルシェーダステージ22からそのような情報を受信できる。
[0082] ドメインシェーダステージ26は、プリミティブの頂点に対するドメイン座標を、パッチに付加されるべきプリミティブの頂点のパッチ座標に変換できる。パッチ座標は、GPU12によって使用される座標系に関して定義されている、パッチ内の点を定義する座標であってよい。例えば、ドメイン内のプリミティブの頂点のドメイン座標は、2Dドメイン内の点を定義するために使用される正規化された座標系に基づくものであってよい。しかしながら、パッチは、三次元で定義されてもよく、ドメインシェーダステージ26は、パッチ上の点を識別するために頂点のドメイン座標を変換できる。
[0083] 例えば、ドメインシェーダステージ26は、ハルシェーダ22からパッチの制御点の座標を受信できる。ハルシェーダステージ22からのパッチの制御点の座標を用いて、ドメインシェーダステージ26は、パッチ上の、テッセレーションステージ24によって出力されたとおりの、頂点の配置を決定できる。パッチ上のこの識別された点は、パッチに付加されるプリミティブに対する頂点であってよい。
[0084] テッセレーションステージ24は、頂点に対するドメイン座標を再利用バッファに出力できる(図1には示されていないが、図6により詳しく示されている)。再利用バッファは、変換後頂点キャッシュ(PTVC)と称され得る。コントローラ(図1には示されていないが、図6により詳しく示されている)は、再利用バッファが、テッセレーションユニット24によって出力された頂点のドメイン座標に対応するパッチ座標を格納するかどうかを決定できる。本開示で使用されているように、テッセレーションユニット24によって出力される頂点のドメイン座標に対応するパッチ座標は、ドメイン座標変換することによって生成されるパッチ座標を指す。
[0085] コントローラが、再利用バッファがドメイン座標に対応するパッチ座標を格納しないと決定した場合、コントローラは、ドメインシェーダステージ26のインスタンス化(instantiation)を実行できる。ドメインシェーダステージ26は、テッセレーションステージ24によって出力された頂点のドメイン座標を受信し、ドメイン座標をパッチ座標に変換し、パッチ座標を再利用バッファに格納し得る。コントローラが、再利用バッファがドメイン座標に対応するパッチ座標を格納すると決定した場合、コントローラは、ドメインシェーダステージ26のインスタンス化を実行し得ない。いずれの場合も、コントローラは、次いで、さらにグラフィックスパイプラインに沿ってパッチ座標を出力し得る。
[0086] テッセレーションステージ24は、テッセレーションステージ24によって生成された複数のプリミティブの頂点を出力し、ドメインシェーダステージ26は、これらのプリミティブをパッチに付加するので、ハルシェーダステージ22、テッセレーションステージ24、およびドメインシェーダステージ26の組合せが一緒になって、追加のプリミティブをパッチに付加する。この結果、パッチに付加されたプリミティブのメッシュがCPU16によって定義されたパッチと比較してより高い解像度、より詳細なパッチを作成する。この方法で、ハルシェーダステージ22、テッセレーションステージ24、およびドメインシェーダステージ26は、テッセレーションプロセスを実施する。
[0087] ジオメトリシェーダステージ28は、ドメインシェーダステージ26によってパッチに付加されたプリミティブの頂点を受信し、なお一層解像度を増すためにプリミティブのための追加の頂点をさらに生成し得る。ラスタライザステージ30は、ジオメトリシェーダステージ28からプリミティブを受信し、それらのプリミティブを表示のためピクセルに変換する。例えば、プリミティブは、プリミティブの相互接続を示すベクトルとして定義され、画像が表示される表示から独立した座標空間内に定義され得る。ラスタライザステージ30は、これらのベクトルを表示座標に変換し、塞がれているプリミティブ内の点を取り除くなどの追加の機能を行う。
[0088] ピクセルシェーダステージ32は、ラスタライザステージ30によって出力されるとおりにピクセルを受信し、後処理を行って色値を表示されるべきピクセルの各々に割り当てる。例えば、ピクセルシェーダステージ32は、システムメモリ14内に格納されている定数値と、システムメモリ14内に格納されているテクスチャデータと、任意の他のデータとを受信して、ピクセルごとの出力を色値として生成し得る。ピクセルシェーダステージ32は、ピクセルの不透明さを示す不透明度値も出力し得る。
[0089] 出力マージステージ34は、最終ピクセル処理を行い得る。例えば、出力マージステージ34は、深さ情報を利用して、ピクセルのどれかが表示されないように取り除かれるべきかどうかをさらに決定できる。出力マージステージ34は、輝度値と色度値、または赤緑青(RGB)を含み得る、最終ピクセル値を生成するためのブレンディング演算も行い得る。
[0090] 出力マージステージ34は、最終ピクセル値を、一般的にシステムメモリ14内に配置されているが、GPU12内に配置され得る、フレームバッファに出力できる。表示プロセッサ(図示せず)は、フレームバッファからピクセル値を取り出し、デバイス10のディスプレイ(図示せず)のピクセル(例えば、赤色、緑色、および青色のピクセル成分を介して)を、ピクセル値に従って指定された強度レベルで点灯(illuminate)させ、ディスプレイに画像を表示させることができる。
[0091] 上で説明されているように、コントローラは、再利用バッファがドメイン内のプリミティブの頂点の対応するドメイン座標に対するパッチ座標を格納しない場合に必ずドメインシェーダステージ26のインスタンス化を実行できる。一般に、ドメインシェーダステージ26の実行は、多数の処理を行い、時間もかかり、ドメインシェーダステージ26が必要とする実行回数を制限することが望ましい場合がある。例えば、ドメイン内の第1のプリミティブおよび第2のプリミティブは、2つの頂点を共有し得る。この例では、テッセレーションステージ24が第1のプリミティブの頂点のドメイン座標を出力した後に、コントローラは、ドメインシェーダステージ26のインスタンス化を3回(すなわち、頂点ごとに1回)実行し、その結果得られるパッチ座標を再利用バッファに格納できる。次いで、テッセレーションステージ24が、第2のプリミティブの頂点に対するドメイン座標を出力した後に、コントローラは、ドメインシェーダステージ26のインスタンス化を1回実行し得る。この場合、再利用バッファは、第1のプリミティブと第2のプリミティブとの間で共有される2つのベクトルに対するパッチ座標をすでに格納している可能性がある。従って、コントローラは、第2のプリミティブの未共有の頂点に対するドメインシェーダステージ26のインスタンス化を1回実行するだけでよい。
[0092] 再利用バッファの記憶能力は限られているので、2つのプリミティブの間で共有される頂点に対するパッチ座標が、テッセレーションステージ24が2回目に共有されている頂点に対するドメイン座標を出力するときにもはや再利用バッファ内に格納されない可能性があり得る。例えば、前の例において、再利用バッファの記憶能力が限られているので、第1のプリミティブと第2のプリミティブとの間で共有される頂点の一方または両方のドメイン座標に対応するパッチ座標が、テッセレーションユニット24が第2のプリミティブの頂点のドメイン座標を出力するときにもはや再利用バッファ内に格納されない可能性があり得る。
[0093] この結果、ドメインシェーダステージ26のインスタンス化が実行され、パッチ座標に以前に変換されたドメイン座標を変換し得る。例えば、共有されている頂点のドメイン座標に対応するパッチ座標が再利用バッファ内に格納される上記の例において、コントローラは、ドメインシェーダステージ26のインスタンス化を1回だけ実行して、第2のプリミティブの未共有の頂点のドメイン座標をパッチ座標に変換し得る。しかしながら、共有されている頂点のドメイン座標に対応するパッチ座標が再利用バッファ内に格納されない上記の例において、コントローラは、ドメインシェーダステージ26のインスタンス化を3回実行して、第2のプリミティブの3つの頂点のドメイン座標をパッチ座標に変換し得る。
[0094] すでに格納されているパッチ座標は、再利用バッファが先入れ先出し置換方式(first-in-first-out replacement scheme)を実施し得るので再利用バッファ内では利用可能でない場合がある。例えば、再利用バッファが満杯である場合(例えば、再利用バッファ内の各スロットがパッチ座標を格納する)、再利用バッファは最も古くから格納されているパッチ座標を取り出して(すなわち、ウォッシュアウト)、格納されるべき次のパッチ座標のための記憶領域を解放できる。取り出されるパッチ座標が、別のプリミティブと共有されるプリミティブの頂点に対するドメイン座標に対応する場合、コントローラは、テッセレーションステージ24が他のプリミティブの頂点を出力するときに、ドメインシェーダステージ26の別のインスタンス化の実行で、頂点のドメイン座標をパッチ座標に再変換させることができる。
[0095] 本開示で説明されている技術は、テッセレーションステージ24がプリミティブの頂点を出力する順序を対象とする。いくつかの例では、テッセレーションステージ24は、共有される頂点が再利用バッファ内に格納されたままとなる確率を高めるような順序でプリミティブの頂点を出力し得る。例えば、第1のプリミティブの頂点を出力した後に、テッセレーションステージ24は、その後のプリミティブと共有される第1のプリミティブの頂点が、テッセレーションステージ24がこれらのその後のプリミティブの頂点を出力するときに再利用バッファ内にあるような順序で頂点を出力できる。
[0096] プリミティブの出力順序は、再利用バッファが満杯のときに、ドメイン座標が最も古くから格納されているパッチ座標に対応する頂点を有する多くの残りのプリミティブがないような順序としてよい。例えば、先入れ先出し置換方式では、再利用バッファが満杯であるときに、再利用バッファが最も古くから格納されているパッチ座標を取り出すことができる。これらのパッチ座標は、プリミティブ内の頂点のドメイン座標に対応するものとしてよく、頂点は、多数の他のプリミティブと共有されない。このようにして、再利用バッファがこれらのパッチ座標を取り出す場合であっても、以下でより詳しく説明されているように、ドメインシェーダステージ26のインスタンス化の回数に対する影響は限定的であり得る。
[0097] 上で説明されているように、ハルシェーダステージ22は、ドメイン内のリングの数と、リングの各エッジに沿って配置される点の数とを定義し得る。テッセレーションステージ24は、次いで、ハルシェーダステージ22によって定義された方法でリングに沿って点を置くことができる。これらの点は、ドメイン内でテッセレーションステージ24によって作成されるプリミティブの頂点を形成する。テッセレーションステージ24は、これらの頂点を一緒に相互接続して、プリミティブを形成し、これらのプリミティブの頂点に対するドメイン座標を出力できる。
[0098] 本開示で説明されている技術によれば、プリミティブの頂点に対するドメイン座標を出力する前に、テッセレーションステージ24は、ドメインを複数の部分に分割できる。これらの部分のうちの少なくとも1つは、ドメイン内の連続的領域内を囲み、連続的部分と称され得る。一般に、これらの部分の各々が、連続的部分である可能性があり得るが、本開示で説明されている態様は、そのように限定されない。
[0099] 連続的部分は、複数のエッジによって定義され得る。複数のエッジは、テッセレーションステージ24がテッセレートするドメイン内に周を形成し、部分は、周内のドメインの連続的領域であってよい。本開示で説明されている技術では、連続的部分は、連続的部分の周内に入るドメイン内の任意のプリミティブを含み得る。
[0100] 例えば、連続的(contiguous)という用語は、ドメイン内のプリミティブを除外する、この部分内の、ギャップがないことを意味する。例えば、ドメイン内のプリミティブが部分の周内にある場合、そのプリミティブは、その部分の一部である。連続的部分(contiguous portion)の概念の理解をさらに助けるために、連続的部分は、ドメイン内のプリミティブを構築するために使用されるリングと混同されるべきでない。
[0101] いくつかの他の技術は、プリミティブを構築するために使用されるリングの各々の中のプリミティブを出力する。これらの例では、テッセレーションステージ24とは別の、テッセレーションステージが、最初に、外側リングに沿ってプリミティブを出力する。この外側リングは、ドメイン内にギャップを形成する。例えば、ドメイン内の中心点は、リングによって囲まれているドメインの領域内に入るが、これらの他の技術のテッセレーションステージは、リング内の頂点のドメイン座標を出力するときに中心点を除外する。言い換えれば、これらのリングは、リング内の領域がリングの一部とならないように除外されるので、連続的部分として考慮されるべきである。
[0102] 本開示で説明されている技術によれば、テッセレーションステージ24は、プリミティブの頂点を出力することができ、プリミティブは、連続的部分内の1つまたは複数の対角線ストリップに配置構成される。プリミティブの対角線ストリップは4つの辺を備え、4辺のうちの2辺は平行である。これら2つの平行な辺は、各々、対角線ストリップ内にプリミティブの各々のうちの少なくとも1つを備え得る。また、2つの平行な辺のうちの各々にある頂点の数は、異なっていてもよい。
[0103] 例えば、対角線ストリップは、3つのプリミティブを含むと仮定する。この例では、対角線ストリップの平行な辺のうちの第1の辺は、3つの点を備え、対角線ストリップの平行な辺のうちの第2の辺は、2つの点を備え得る。第1の辺上の3つの点を第2の辺上の2つの点と相互接続することによって、テッセレーションユニットは、対角線ストリップ内に3つのプリミティブを構築できる。この例では、第1の辺上の3つの点は、3つの頂点を形成し、第2の辺上の2つの点は、2つの頂点を形成し得る。対角線ストリップ内のプリミティブは、頂点を共有するので、テッセレーションステージ24は、対角線ストリップの平行な辺のうちの第1の辺に沿って配置される3つの頂点のみと、対角線ストリップの平行な辺のうちの第2の辺に沿って配置される2つの頂点とを使用して3つのプリミティブを構築できる。
[0104] いくつかの例では、テッセレーションユニット24は、第1の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第1の対角線ストリップは、連続的部分内に配置される。第1の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニット24は、第2の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第2の対角線ストリップは、連続的部分内に配置される。
[0105] いくつかの例では、第2の対角線ストリップは、第1の対角線ストリップと平行であり得る。これらの例では、第2の対角線ストリップ内のプリミティブの数は、第1の対角線ストリップ内のプリミティブの数と異なり得る。他の例では、第2の対角線ストリップは、第1の対角線ストリップと接し得る。これらの例では、第2の対角線ストリップ内のプリミティブの数は、第1の対角線ストリップ内のプリミティブの数と同じであり得る。
[0106] 第2の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニット24は、次いで、第3の対角線ストリップ内に配置されるプリミティブの頂点を出力できる。第3の対角線ストリップは、第1の対角線ストリップと平行であり得る。また、第3の対角線ストリップ内に配置されるプリミティブの数は、第1の対角線ストリップおよび第2の対角線ストリップに配置されるプリミティブの数と異なり得る。
[0107] テッセレーションユニット24は、テッセレーションユニット24がドメインの部分のうちの1つの中のプリミティブを出力することを完了するまで対角線ストリップ内のプリミティブを出力できる。テッセレーションユニット24は、ドメイン内の他の部分の中のプリミティブを実質的に類似の方法で出力できる。
[0108] 上で説明されている方法で頂点を出力することによって、GPU12は、ドメインシェーダステージ26のインスタンス化をより少ない回数で実行できる。例えば、再利用バッファのサイズに制限があるので、再利用バッファは、テッセレーションステージ24によって出力された頂点のすべてを格納することができない場合がある。例えば、上で説明されているように、再利用バッファは、再利用バッファが満杯で、ドメインシェーダステージ26が新たに変換されたパッチ座標を格納することを試みているときに先入れ先出し置換方式を実施できる。本開示で説明されている技術は、ドメインシェーダステージ26が第1のプリミティブの頂点をドメイン座標からパッチ座標に変換した後、第2のプリミティブと共有される頂点に対するパッチ座標が、テッセレーションステージ24が第2の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力する前に再利用バッファからウォッシュアウトされない確率を高めることができ、また第3の対角線ストリップについても同様である。
[0109] 上で説明されているように、テッセレーションユニット24は、ドメインを複数の部分に分割できる。テッセレーションステージ24がドメインを複数の部分に分割する方法は、ハルシェーダステージ22によって出力されるテス係数と、再利用バッファ内の記憶スロットの数(すなわち、再利用バッファの記憶能力)とに基づき得る。例えば、四角形ドメインについては、ハルシェーダステージ22は、リングの各辺が分割されるべきセグメントの数を出力できる。リングの各辺に沿ったに沿ったセグメントの数は、ハルシェーダステージ22によって出力されるテス係数の一例である。
[0110] 四角形ドメインの各辺が分割されるべきセグメントの数は、四角形ドメインの各辺上の点の数を示し得る。例えば、1つの辺が5つのセグメントに分割される場合、テッセレーションステージ24は、その辺上に6個の点があると決定し得る(1つの点が辺の各端に、中間部に4つの点があり、辺を5つのセグメントに分割する)。
[0111] 四角形ドメインについては、ハルシェーダステージ22は、縦の辺が分割されるべきセグメントの数を定義する縦の辺に対するテス係数を出力できる。このテス係数は、fyと称され得る。ハルシェーダステージ22は、横の辺が分割されるべきセグメントの数を定義する横の辺に対するテス係数も出力できる。このテス係数は、fxと称され得る。
[0112] テッセレーションステージ24は、これら2つのテス係数うちのどちらの値が小さい(または場合によっては等しい)かを決定できる(例えば、fx≦fyかどうか、またはfy≦fxかどうか)。2つのうちの小さい方がf1と称されると仮定する。また、再利用バッファ内の記憶スロットの数はCであると仮定する。この例では、テッセレーションステージ24は、f1+1がC−2以下かどうかを決定し得る。f1+1がC−2以下である場合、テッセレーションステージ24は、四角形ドメインを2つの部分に分割することができ(例えば、四角形ドメインを二つ組に分割する)、これら2つの部分のうちの一方または両方は、連続的部分である。
[0113] この例では、テッセレーションステージ24は、第1の連続的部分内の第2の対角線ストリップが後に続く、2つの部分のうちの第1の連続的部分内の第1の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力できる。この例では、第2の対角線ストリップは、第1の対角線ストリップと接するものとしてよく、第1の対角線ストリップおよび第2の対角線ストリップ内のプリミティブの数は、同じであってよい。次いで、テッセレーションステージ24は、第1の連続的部分の第3の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力し得る。第3の対角線ストリップは、第1の対角線ストリップと平行であり、第3の対角線ストリップ内のプリミティブの数は、第1の対角線ストリップおよび第2の対角線ストリップ内のプリミティブの数と異なり得る。
[0114] テッセレーションステージ24は、テッセレーションステージ24が第1の連続的部分内でプリミティブを出力することを終了するまで類似の方法でプリミティブのドメイン座標を出力することを繰り返すことができる。次いで、テッセレーションステージ24は、第2の連続的部分で続行し、実質的に類似の方法で第2の連続的部分内の頂点のドメイン座標を出力できる。f1+1がC−2以下であるこの例におけるプリミティブのドメイン座標を出力することは、テッセレーションステージ24の第1の動作モードと称され得る。
[0115] テッセレーションステージ24が、f1+1がC−2以下でないと決定した場合、テッセレーションステージ24は、f1/2+1がC−1以下であるかを決定し得る。f1/2+1がC−1以下である場合、テッセレーションステージ24は、四角形ドメインを4つの部分(例えば、四つ組)に分割することができ、これら4つの部分のうちの1つまたは複数は、連続的部分である。
[0116] この例では、テッセレーションステージ24は、第1の連続的部分内の第2の対角線ストリップが後に続く、4つの部分のうちの第1の連続的部分内の第1の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力できる。この例では、第2の対角線ストリップは、第1の対角線ストリップと平行であってよく、第1の対角線ストリップおよび第2の対角線ストリップ内のプリミティブの数は、異なり得る。次いで、テッセレーションステージ24は、第1の連続的部分の第3の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力し得る。第3の対角線ストリップは、第1および第2の対角線ストリップと平行であり、第3の対角線ストリップ内のプリミティブの数は、第1の対角線ストリップおよび第2の対角線ストリップ内のプリミティブの数と異なり得る。
[0117] テッセレーションステージ24は、テッセレーションステージ24が第1の連続的部分内でプリミティブを出力することを終了するまで類似の方法でプリミティブのドメイン座標を出力することを繰り返すことができる。次いで、テッセレーションステージ24は、第2の連続的部分で続行し、実質的に類似の方法で第2の連続的部分内の頂点のドメイン座標を出力することができ、その後、第3および第4の部分が続く。f1/2+1がC−1以下であるこの例におけるプリミティブのドメイン座標を出力することは、テッセレーションステージ24の第2の動作モードと称され得る。
[0118] テッセレーションステージ24が、f1/2+1がC−1以下でないと決定した場合、テッセレーションステージ24は、四角形ドメインを4つより多い部分に分割し得る。この例では、テッセレーションステージ24は、第3の動作モードで動作し得る。例えば、テッセレーションステージ24は、四角形ドメインを5つの部分に分割し得る。5つの部分のうちの4つで、テッセレーションステージ24は、第1の動作モードを実施し得る。第5の部分で、テッセレーションステージ24は、第2の動作モードを実施し得る。
[0119] 前の例ではテッセレーションステージ24を、f1+1がC−2以下であるかどうか、またはf1/2+1がC−1以下であるかどうかを決定するものとして説明したが、本開示の態様はそのように限定されないことは理解されるであろう。一般に、いかなるコンポーネントも、f1+1がC−2以下かどうか、またはf1/2+1がC−1以下かどうかを決定できる。
[0120] 例えば、GPU12は、再利用バッファ内のスロットの数(すなわち、Cの値)をハルシェーダステージ22にロードし、ハルシェーダステージ22は、上記の決定を行い、ドメインが分割されるべき方法をテッセレーションステージ24に指示できる。別の例として、GPU12のコントローラは、上記の決定を行い、ドメインが分割されるべき方法をテッセレーションステージ24に指示できる。
[0121] 上記の例では、四角形メインに対する第1、第2、または第3の動作モードについて説明した。テッセレーションステージ24は、例えばドメインが三角形ドメインであるときに第1、第2、または第3の動作モードを実施することもできる。三角形ドメインについては、ハルシェーダステージ22は、fxおよびfyテス係数を定義する代わりに、ftと称される、1つのテス係数を定義し得る。
[0122] この例では、ft+1がC−2以下である場合、テッセレーションステージ24は、三角形ドメインを2つの部分に分割することによって第1の動作モードを実施し得る。この例では、2つの部分のうちの一方は、他方の部分と異なるサイズを有していてもよい。次いで、テッセレーションステージ24は、最大のサイズのドメインに対して上で説明されているように第1、第2、および第3の三角形におけるプリミティブのドメイン座標を出力できる。より小さいサイズのドメインについては、テッセレーションステージ24は、第2の動作モードを実施し得る。
[0123] この例では、三角形ドメインについて、ft+1がC−2以下でなく、ft/2+1がC−1以下である場合に、テッセレーションステージ24は、第2の動作モードを実施する。例えば、テッセレーションステージ24は、三角形ドメインを3つの部分(例えば、三つ組)に分割し、3つの部分の各々に対して第2の動作モードを実施できる。この例では、ft/2+1がC−1以下でない場合、テッセレーションステージ24は、第3の動作モードを実施する。例えば、テッセレーションステージ24は、三角形ドメインを3つより多い部分に分割し得る。テッセレーションステージ24は、これらの部分のうちのいくつかに対して第2の動作モードを実施し、他の部分のいくつかに対して第3の動作モードを実施できる。
[0124] ドメインが三角形ドメインである例では、テッセレーションステージ24は、ft+1がC−2以下であるかどうか、またはft/2+1がC−1以下であるかどうかを決定できる。しかしながら、上記のように、本開示で説明されている技術は、そのように限定されない。一般に、他の任意のコンポーネントが、これらの決定を行い、三角形ドメインが分割されるべき方法をテッセレーションステージ24に指示できる。
[0125] 上記の例示的な技術は、一様テッセレーション(uniform tessellation)がある場合にドメイン全体に適用可能であるものとしてよい。一様テッセレーションでは、外側リングに対するテス係数は、内側リングに対するテス係数と同じである。しかしながら、他の例では、ハルシェーダステージ22は、一番外側のリング、および内側のリングについて、異なる数のテス係数を定義できる。例えば、一番外側のリングは、ドメインの周に相当するものとしてよく、ハルシェーダステージ22は、内側リング内のセグメントの数と比較して、一番外側のリング上のセグメントの異なる数を定義できる。
[0126] この例では、テッセレーションステージ24は、内側リングで囲まれているドメインに対して第1、第2、または第3の動作モードを実施できる。例えば、第1の内側リング(例えば、一番外側のリングの後のリング)は、サブセットドメインと考えられ、テッセレーションステージ24は、サブセットドメインに対して第1、第2、または第3の動作モードを実施できる。一番外側のリング(すなわち、サブセットドメインの一部でないドメインの一部)内のプリミティブについて、テッセレーションステージ24は、それらのプリミティブを任意の順序で出力できる。
[0127] 図2は、本開示で説明されている1つまたは複数の例によるグラフィックス処理パイプラインの別の例を実施できるグラフィックスプロセッシングユニット(GPU)の別の例を示す概念図である。例えば、図1は、Direct3D 11 APIなどのDirectX 11.x APIに実質的に従って定式化されるグラフィックス処理パイプラインを示している。図2は、実質的にOpenGL 4.x APIによるグラフィックス処理パイプラインを示している。
[0128] OpenGL 4.xグラフィックス処理パイプラインは、Direct3D 11グラフィックス処理パイプラインと実質的に類似の形式で機能し得る。従って、簡潔にするために、Direct3D 11グラフィックス処理パイプラインとOpenGL 4.xグラフィックス処理パイプラインの両方に類似しているコンポーネントについて説明するために図1が参照されている。
[0129] 図2の例に示されているように、GPU12は、入力アセンブラ36と、頂点シェーダ38と、テッセレーション制御シェーダ40と、プリミティブ生成器42と、テッセレーション評価シェーダ44と、ジオメトリシェーダ46と、クリップリングユニット48と、ラスタライザ50と、フラグメントシェーダ52と、ポストプロセッサ54とを備える。図1と同様に、図2に示されている例において、GPU12は、図2に示されているものよりも多い、または少ないコンポーネントを備え得る。また、ユニットの特定の順序付けは、例示のために与えたものであり、限定的であると考えられるべきではない。
[0130] いくつかの方法で、OpenGL 4.xグラフィックス処理パイプラインをともなうテッセレーションプロセスは、Direct3D 11グラフィックス処理パイプラインを備えるテッセレーションプロセスと実質的に類似しているものとしてよい。例えば、OpenGL 4.xテッセレーションプロセスは、図1に関して上で説明されているのと似た方法で、パッチおよび制御点に依存し得る。例えば、図2の入力アセンブラ36および頂点シェーダ38は、それぞれ、図1の入力アセンブラステージ18および頂点シェーダステージ20と実質的に同様に機能し得る。
[0131] より多くの例として、テッセレーションに関して、図2のテッセレーション制御シェーダ40は、図1のハルシェーダステージ22と実質的に同様に機能し得る。しかしながら、テッセレーション制御シェーダ40は、Direct3D 11のテス係数に類似する、テッセレーションレベルを出力する。例えば、OpenGL 4.xのテッセレーションレベルは、ドメインタイプと、ドメイン内のリングの数と、リングエッジごとの点の数とを定義できる。
[0132] プリミティブ生成器42は、テッセレーションステージ24と実質的に類似する方法で機能し得る。例えば、プリミティブ生成器42は、テッセレーションレベルとドメインタイプとを利用して、ドメインを複数のプリミティブに分割できる。また、本開示で説明されている技術によれば、プリミティブ生成器42は、上で説明されている方法でプリミティブのドメイン座標を出力できる。例えば、プリミティブ生成器42は、プリミティブの頂点のドメイン座標を出力することができ、プリミティブは、対角線ストリップ内に配置される。
[0133] 図1のテッセレーションユニット24と同様に、プリミティブ生成器42は、ドメインを複数の部分に分割することができ、少なくとも1つの部分は、連続的部分である。次いで、プリミティブ生成器42は、連続的部分内の頂点プリミティブのドメイン座標を出力し得る。例えば、プリミティブ生成器42は、第1の対角線ストリップ内に配置されるプリミティブの頂点のドメイン座標を出力し、続いて第2の対角線ストリップ、そして第3の対角線ストリップと続くものとしてよい。さらに、プリミティブ生成器42は、テッセレーションステージ24に関して上で説明されている異なる例示的な動作モードを実施し得る。
[0134] 図2のテッセレーション評価シェーダ44は、図1のドメインシェーダステージ26と実質的に同様に機能し得る。例えば、テッセレーション評価シェーダ44は、プリミティブ生成器42から生成されたプリミティブの頂点を受信し、プリミティブを、テッセレーション制御シェーダ40によって出力されるパッチに付加できる。この方法で、OpenGL 4.x APIのグラフィックス処理パイプラインは、パッチに対してテッセレーションを行い、パッチの解像度を高めることができる。
[0135] ジオメトリシェーダ46は、ジオメトリシェーダステージ28と実質的に同様に機能し得る。図2における、クリッピングユニット48およびラスタライザ50の組合せは、図1のラスタライザステージ30と実質的に同様に機能し得る。図2のフラグメントシェーダ52およびポストプロセッサ54は、それぞれ、図1のピクセルシェーダステージ32および出力マージステージ34と実質的に同様に機能し得る。ポストプロセッサ54は、最終ピクセル値をフレームバッファに出力し、表示プロセッサは、フレームバッファからピクセル値を取り出して、ピクセル値に従ってディスプレイを点灯させ、画像を表示できる。
[0136] 上で説明されているように、図2のテッセレーション制御シェーダ40、プリミティブ生成器42、およびテッセレーション評価シェーダ44は、テッセレーションプロセスを実施するために、それぞれ、図1のハルシェーダステージ22、テッセレーションステージ24、およびドメインシェーダステージ26と実質的に同様に機能する。従って、Direct3D 11 APIとOpenGL 4.x APIの両方は、テッセレーションプロセスを実施するために2つのプログラム可能なシェーダユニットと1つの固定機能ユニットとに依存する。
[0137] 一般化のために、本開示で説明されている技術は、第1のテッセレーションシェーダユニット、テッセレーションユニット、および第2のテッセレーションシェーダユニットを用いて説明され得る。第1のテッセレーションシェーダユニットの例として、ハルシェーダステージ22およびテッセレーション制御シェーダ40が挙げられる。テッセレーションユニットの例として、テッセレーションステージ24およびプリミティブ生成器42が挙げられる。第2のテッセレーションシェーダユニットの例として、ドメインシェーダステージ26およびテッセレーション評価シェーダ44が挙げられる。
[0138] また、Direct3D 11では「テス係数」という用語を使用し、OpenGL 4.x APIでは、「テッセレーションレベル」という用語を使用し、これは類似の用語と考えられ得る。一般化を目的として、本開示では、テス係数とテッセレーションレベルとを例として含む、「テッセレーション係数」という用語を使用する。このようにして、第1のシェーダユニットは、テッセレーション係数をテッセレーションユニットに出力するものとして考えられ、テッセレーションユニットは、テッセレーション係数に応答して頂点を第2のシェーダユニットに出力し得る。
[0139] Direct3D 11およびOpenGL 4.xは、2つのシェーダユニットと1つの固定機能ユニットとを利用するが、本開示で説明されている技術は、そのように限定されないことに留意されたい。例えば、他のシステムでは、第1および第2のシェーダユニットが固定機能ユニットであり、テッセレーションユニットがシェーダユニットであることも可能であり得る。別の例として、すべて、固定機能ユニットであるか、またはすべて、シェーダユニットであるか、またはこれらの組合せであるものとしてよい。
[0140] 従って、いくつかの例において、第1のユニットが第1のシェーダユニットと同様の機能を行うが、シェーダユニットまたは固定機能ユニットであってよく、第2のユニットがテッセレーションユニットと同様の機能を行うが、シェーダユニットまたは固定機能ユニットであってよく、第3のユニットが第2のシェーダユニットと同様の機能を行うが、シェーダユニットまたは固定機能ユニットであってよいことが企図され得る。さらに、第1のシェーダユニット、テッセレーションユニット、および第2のシェーダユニットが図1および図2において別々なユニットとして示されているけれども、本開示の態様は、そのように限定されない。これらのユニット、および場合によっては、図1および図2に示されているグラフィックス処理パイプラインのユニットは一緒に組み合わされて共通のユニットにされ得る。従って、これらのユニットの機能は、説明を簡単にするため別々に説明されているが、これらのユニットは、共有ハードウェア内に、または明確に区別できるコンポーネントとして実施され得る。
[0141] 図3は、テッセレーションのための頂点のドメイン座標を出力する例示的な技術を示す図である。図3に示されている例は、テッセレーションステージ24およびプリミティブ生成器42ではなく、テッセレーションユニットの他の例によって実施され得る。図3は、三角形ドメインであるドメイン56を示しており、点およびプリミティブパターンは、ドメイン56の直線の中心に沿って対称的である。
[0142] 図示されているように、ドメイン56は、複数のプリミティブ(例えば、三角形)にテッセレートされる。他のいくつかの例では、本開示のテッセレーションユニットに似ず、テッセレーションユニットは、リングバイリング形式でプリミティブの頂点のドメイン座標を出力し、この例におけるリングは、三角形である。例えば、図3は、リング58とリング60とを示している。リング58は、一番外側のリングであり、ドメイン56の境界に接するプリミティブを備える。リング60は、ドメイン56の境界に配置されるリング60内のプリミティブがないので、第1の内側リングである。
[0143] いくつかの他の技術では、これらの他の技術のテッセレーションユニットは、リング58内に配置されるプリミティブのすべてのドメイン座標を出力する。次いで、これらの他の技術のテッセレーションユニットは、リング60内に配置されるすべてのプリミティブのドメイン座標を出力する。図3に示されているように、これらのプリミティブのうちのいくつかは、理解を助けるために番号を振られている。例えば、これらの他の技術のテッセレーションユニットは、プリミティブ1、続いてプリミティブ2、続いてプリミティブ3、など、プリミティブ42までの、ドメイン座標を、これらのプリミティブがすべてリング58内に配置されているので、出力する。次いで、これらの他の技術のテッセレーションユニットは、プリミティブ43から始まるリング60内のプリミティブのドメイン座標を出力する。
[0144] 図3に示されている例において、プリミティブ1は、ドメイン56の第1のプリミティブであるので、これらの他の技術のテッセレーションユニットがプリミティブ1のドメイン座標を出力した後、ドメインシェーダは3回実行してプリミティブ1の3つのドメイン座標の各々をパッチ座標に変換し、対応するパッチ座標を再利用バッファに格納する。次いで、これらの他の技術のテッセレーションユニットが、プリミティブ2のドメイン座標を出力した後、ドメインシェーダは、プリミティブ2がプリミティブ1と2つの頂点を共有し、これら2つの頂点に対するパッチ座標は、再利用バッファ内に格納され得るので、1回だけ実行し得る。ドメインシェーダは、プリミティブ2の未共有の頂点を変換して、プリミティブ2の未共有の頂点のドメイン座標をパッチ座標に変換するものとしてよく、再利用バッファ内に対応するパッチ座標を格納した。
[0145] これらの他の技術のテッセレーションユニットは、これらの他の技術のテッセレーションユニットがプリミティブ42のドメイン座標を出力するまで、リング58に沿ってプリミティブのドメイン座標を出力できる。図3に示されているように、プリミティブ42は、プリミティブ1と2つの頂点を共有する。しかしながら、再利用バッファのサイズに制限があるので、再利用バッファは、プリミティブ1のドメイン座標に対応するパッチ座標を取り除いている可能性がある。この場合、ドメインシェーダは、3回実行し、ドメイン座標を、プリミティブ1およびプリミティブ42によって共有される頂点のパッチ座標に再変換できる。言い換えれば、ドメインシェーダは、プリミティブ1のドメイン座標をパッチ座標にすでに変換していたけれども、これらの他の技術では、ドメインシェーダは、プリミティブ1(すなわち、プリミティブ42と共有されるもの)のドメイン座標をもう一度パッチ座標に変換しなければならない場合がある。
[0146] 次いで、これらの他の技術における、テッセレーションユニットは、リング60内のプリミティブ43の頂点のドメイン座標を出力し得る。図示されているように、プリミティブ43は、プリミティブ2と2つの頂点を共有し、プリミティブ2は、プリミティブ42と1つの頂点を共有する。ここでは、ドメインシェーダは、2回実行し得る。例えば、プリミティブ43は、プリミティブ42と1つの頂点を共有するので、その頂点に対するパッチ座標は、再利用バッファ内に格納され得る。しかしながら、プリミティブ2と共有され、プリミティブ42と共有されないプリミティブ43の頂点については、再利用バッファのサイズに制限があるので、再利用バッファは、この頂点のドメイン座標に対応するパッチ座標を取り除き得る。この場合、ドメインシェーダは、ドメインシェーダがこの頂点のドメイン座標をパッチ座標にすでに変換しているとしてもこの頂点のドメイン座標をパッチ座標に変換するために実行する必要がある場合がある。
[0147] 図4は、テッセレーションのための頂点のドメイン座標を出力する別の例示的な技術を示す図である。図4に示されている例は、テッセレーションステージ24およびプリミティブ生成器42ではなく、テッセレーションユニットの他の例によって実施され得る。図4は、四角形ドメインである、ドメイン62を示している。点およびプリミティブパターンは、ドメイン62の直線の中心に沿って対称的である。
[0148] 図示されているように、ドメイン62は、複数のプリミティブ(例えば、三角形)にテッセレートされる。他のいくつかの例では、本開示のテッセレーションユニットに似ず、テッセレーションユニットは、リングバイリング形式でドメイン62内のプリミティブの頂点のドメイン座標を出力し、この例におけるリングは、矩形である。
[0149] 説明を簡単にするため、ドメイン62の外側リング内に配置されるプリミティブのうちのいくつかのみが図示されている。例えば、ドメイン62の外側リングは、プリミティブ1からプリミティブ216までを含む。この例では、これらの他の技術のテッセレーションユニットは、プリミティブ1、続いてプリミティブ2、など、プリミティブ216までの、頂点に対するドメイン座標を出力する。
[0150] しかしながら、これらの他の技術では、これらの他の技術のテッセレーションユニットがプリミティブ216のドメイン座標を出力するときまでには、再利用バッファは、プリミティブ1のドメイン座標に対応するパッチ座標を取り除いている可能性がある。従って、プリミティブ216が、プリミティブ1と2つの頂点を共有するとしても、ドメインシェーダは、プリミティブ216のドメイン座標を対応するパッチ座標に変換するために3回実行する必要がある場合がある。
[0151] 図5は、テッセレーションのための頂点のドメイン座標を出力する別の例示的な技術を示す図である。図5に示されている例は、テッセレーションステージ24およびプリミティブ生成器42ではなく、テッセレーションユニットの他の例によって実施され得る。図5は、四角形ドメインであるドメイン64を示しており、点およびプリミティブパターンは、ドメイン64の直線の中心に沿って対称的である。
[0152] 図5に示されている例は、他のいくつかの技術でドメインシェーダの実行の回数を減らすことを試みた1つの例示的な方法である。例えば、図4では、これらの他の技術のテッセレーションユニットは、1つのリングからプリミティブを出力する。図5において、これらの他の技術のテッセレーションユニットは、2つのリング内のプリミティブのドメイン座標を同時に出力する。
[0153] そのような出力方式は、ドメインシェーダの必要な実行回数を減らすことができる。例えば、これらの他の技術のテッセレーションユニットが、プリミティブ5のドメイン座標を出力するときに、プリミティブ5がプリミティブ1および2と共有するドメイン座標に対するパッチ座標は、まだ、再利用バッファ内で利用可能であってもよい。しかしながら、図5に示されている方式であっても、望ましい以上の数の、ドメインシェーダのインスタンスを実行できる。例えば、これらの他の技術のテッセレーションユニットが、プリミティブ416のドメイン座標を出力するときに、プリミティブ416と共有されるプリミティブ5の頂点のドメイン座標に対するパッチ座標は、もはや、再利用バッファ内で格納され得ない。
[0154] このようにして、図3および図4に示されている例では、これらの他の技術のテッセレーションユニットは、各リングに対するプリミティブの1つのストリップを生成し、ユニットはさらにグラフィックスパイプライン内で(例えば、ドメインシェーダの後)同じリング内のプリミティブの間の再利用バッファ内の頂点を再利用することが可能であり得る。しかしながら、ユニットがさらにグラフィックスパイプライン内で再利用バッファのサイズに制限があるのでリングにまたがってプリミティブに対する頂点を再利用することが可能でないことがあり得る。この結果、ドメインシェーダの余分な実行が生じる。
[0155] 例えば、再利用バッファが32個のキャッシュスロットを備えていると仮定する。図3および図4に示されている例では、同じ頂点に対して2つのキャッシュミスがあり得る。キャッシュミスは、ドメイン座標に対する対応するパッチ座標が再利用バッファ内に格納されていないインスタンスを指すものとしてよい。例えば、図3および図4に示されている例において、ドメインシェーダが頂点についてドメイン座標をパッチ座標に変換した後、ドメインシェーダが、再利用バッファのサイズに制限があるので、この同じ頂点のドメイン座標をパッチ座標に変換するため少なくとももう一度実行することを必要とする可能性があり得る。
[0156] 図5に示されている例は、図3および図4に示されている技術に関して、ドメインシェーダの実行回数を低減できる。しかしながら、いくつかの例では、リングのエッジに沿って最大64個までの頂点があり得る。この場合、図5に示されている例であってもその結果、同じ頂点のドメイン座標をパッチ座標に変換するためにドメインシェーダを複数回実行し得る。
[0157] 従って、図3〜図5で示されている技術は、再利用バッファの効率に制限を課す可能性がある。例えば、1つのリング内の頂点に対するドメイン座標に対応するパッチ座標は、第2のリングに対するドメイン座標を出力するときに失われる。また、図3を見るとわかるように、ドメイン56の外側境界に沿って配置されるプリミティブ1から14の頂点は、リング60内のプリミティブのどれとも共有されない(リング60内のプリミティブ43以降)。従って、ドメイン56の外側境界に沿って配置される頂点のドメイン座標に対応するパッチ座標が失われた場合に再利用バッファの効率にマイナスの影響を及ぼすことはほとんどもしくはまったくあり得ない。例えば、リングの1つの辺に沿った頂点が失われる場合、リングの他の辺に沿った頂点が再利用バッファ内に保存されている場合、再利用バッファの効率に対するマイナスの影響はほとんどもしくはまったくあり得ない。
[0158] しかしながら、図3〜図5の例では、リングの1つの辺に沿った頂点のそのような保存は行われ得ない。例えば、頂点のドメイン座標が図3〜図5の例において出力される順序は、軸に揃えられていると考えられ得る。これらの他の技術のテッセレーションユニットがプリミティブ1から14のドメイン座標を出力した後、プリミティブ15から28の大半は、プリミティブ1から14といかなる頂点をも共有しない(プリミティブ15および16は例外である)。しかしながら、リング60内のプリミティブ43以降は、プリミティブ1から14と頂点を共有し、これの頂点はサイズに制限があるので再利用バッファ内で失われる。従って、プリミティブ1から14に対するパッチ座標が、プリミティブ43とそれ以降を出力するときに利用可能であることを保証することは、プリミティブ15から28に対するパッチ座標よりも望ましい場合がある。
[0159] 上で説明されているように、本開示で説明されている技術は、再利用バッファの効率を最大化するためのドメイン座標の出力方式を備える。例えば、上で説明されているように、テッセレーションユニットは、本開示で説明されている技術により(例えば、テッセレーションステージ24およびプリミティブ生成器42)、ドメインを複数の部分に分割することができ、これらの部分のうちの少なくとも1つは、連続的部分である。図3〜図5に示されているリングは、連続的部分と考えられるべきでない。
[0160] 例えば、本開示で使用されているように、連続的部分は、ドメイン内にギャップがないように連続的部分の領域内(例えば、連続的部分のエッジの端内)に入るプリミティブを含む。図3〜図5に示されているリングは、ドメイン内にギャップがあるようにリングによって囲まれている領域内に入るプリミティブを除外する。例えば、図3では、リング58は、ドメイン56のすべてを囲んでいるけれども、リング58は、リング60内に入るプリミティブを除外する。このようにして、リング58は、ドメイン56をくりぬき、ドメイン56内にギャップを作成する。プリミティブのそのような類似の除外も、図4および図5に見ることができる。
[0161] テッセレーションユニット(例えば、テッセレーションステージ24またはプリミティブ生成器42)は、連続的部分内の対角線ストリップに沿ったドメイン座標を出力し得る。言い換えれば、テッセレーションユニットは、対角線ウォーキング方向でドメイン座標を出力する。本開示で使用されているような「ウォーキング」は、テッセレーションユニットがプリミティブのドメイン座標を出力するステップを指す。対角線ウォーキング方向に出力する潜在的利点の1つは、対角線ストリップの長さが1つのプリミティブのストリップの長さから始めて徐々に成長するという点である。この結果、対角線ストリップの外側から頂点が付加され、再利用バッファは、先入れ先出し方式で対角線ストリップの内側からの頂点を置き換えるものとしてよい。
[0162] 図6は、本開示で説明されている1つまたは複数の例によるGPUをより詳しく示しているブロック図である。例えば、図6は、GPU12の一例をさらに詳しく示している。図示されているように、GPU12は、テッセレーションユニット66と、コントローラ74と、ドメインシェーダ76と、再利用バッファ78とを備える。テッセレーションユニット66は、図1のテッセレーションステージ24または図2のプリミティブ生成器42の一例である。再利用バッファ78は、上で説明されている再利用バッファの一例である。
[0163] ドメインシェーダ76は、ドメインシェーダ76がGPU12の1つまたは複数のシェーダコアなどのGPU12上で実行することを示すため破線で示されており、シェーダコアは、ドメインシェーダ76などのシェーダの実行のためのGPU12の専用ハードウェアである。言い換えれば、この例では、ドメインシェーダ76は、ハードウェアブロックではなく、むしろ、ハードウェアブロック上で実行するソフトウェアユニットである。ドメインシェーダ76の一例は、ドメインシェーダステージ26(図1)である。ドメインシェーダ76の別の例は、テッセレーション評価シェーダ44(図2)である。
[0164] コントローラ74は、GPU12の機能全体を制御するGPU12の制御ユニットであるものとしてよい。例えば、コントローラ74は、シェーダプログラムを実行するかどうか、いつ実行するかを決定できる。コントローラ74は、テッセレーションユニット66の動作モードを決定することもできる。代替的に、テッセレーションユニット66が、動作モードを決定できる。コントローラ74は、ハードウェア、ハードウェア上で実行するソフトウェア、またはハードウェア上で実行するファームウェアであってよい。さらに、いくつかの例では、コントローラ74がドメインシェーダ76をいつ実行するかを決定する代わりに、または決定することに加えて、再利用バッファ78は、ドメインシェーダ76をいつ実行するかを決定するように構成されたキャッシュコントローラを備えることができる。しかしながら、例示することを目的として、これらの技術は、コントローラ74が動作モードを決定し、ドメインシェーダ76がいつ実行されるべきかを決定すること背景として説明されている。
[0165] コントローラ74またはテッセレーションユニット66のいずれかが、テッセレーションユニット66の動作モードを決定できるので、本開示で説明されている技術は、テッセレーションユニット66の動作モードを決定するように構成されている処理ユニットとして考えられ得る。いくつかの例では、処理ユニットは、コントローラ74であってよい。いくつかの例では、処理ユニットは、テッセレーションユニット66であってよい。いくつかの例では、処理ユニットは、コントローラ74およびテッセレーションユニット66の組合せであってよい。例示しやすくするために、上で説明されているように、動作モードを決定するための技術は、処理ユニットがコントローラ74である例を用いて説明されている。しかしながら、処理ユニットは、代替的に、またはコントローラ74と連携する形で、テッセレーションユニット66であってもよい。
[0166] 図示されているように、テッセレーションユニット66は、セットアップユニット68と、点生成器70と、接続生成器72とを備える。セットアップユニット68、点生成器70、および接続生成器72は、テッセレーションユニット66の固定機能ハードウェアユニットであってよい。セットアップユニット68、点生成器70、および接続生成器72は、説明を簡単にするために、別々のコンポーネントとして図示されている。セットアップユニット68、点生成器70、および接続生成器72は、単一のユニットとして、別のユニットとして、またはこれらの組合せとして形成され得る。
[0167] セットアップユニット68は、図1のハルシェーダステージ22または図2のテッセレーション制御シェーダ40などの第1のシェーダユニットからの入力としてテッセレーション係数を受信し、テッセレーション係数からドメインタイプを決定できる。例えば、4つのテッセレーション係数がある場合、セットアップユニット68は、ドメインタイプが三角形であると決定し、6つのテッセレーション係数がある場合、セットアップユニット68は、ドメインタイプが四角形であると決定し得る。セットアップユニット68は、補正丸め問題(correcting rounding problems)、天井および床関数(ceiling and floor functions)、テッセレーション係数の1/2の決定、並びにテッセレーション係数の低減および組合せなどの他のセットアップ機能を行い得る。一般に、セットアップユニット68は、テッセレーション係数を処理して、テッセレーションユニット66の他のコンポーネントが各機能を行えることを保証し得る。
[0168] 点生成器70は、テッセレーション係数からの、ドメインの各リングの各エッジに沿って配置される点の数と、点の配置(例えば、点のu、v座標またはu、v、w座標)を決定できる。接続生成器72は、点を接続(すなわち、ステッチ)してドメイン内に複数のプリミティブを形成できる。
[0169] いくつかの例では、接続生成器72は、本開示で説明されている技術を実施するように構成され得る。例えば、接続生成器72は、図3〜図5に示されているようにプリミティブのドメイン座標を出力するのではなく、ドメインを複数の部分に分割し、それらの部分内の対角線ストリップにおけるプリミティブのドメイン座標を出力するように構成され得る。いくつかの例では、点生成器70および接続生成器72は、ドメイン座標を出力するために連携して機能し得る。
[0170] 例えば、点生成器70は、第1の対角線ストリップ内に配置されるプリミティブの頂点の座標を決定することができ、第1の対角線ストリップは、連続的部分内に配置される。次いで、点生成器70は、決定された座標を接続生成器72に出力できる(例えば、再利用バッファ78とは別の、図6に示されていない、シャローバッファを介して)。接続生成器72は、プリミティブをアセンブルし、第1の対角線ストリップ内に配置されるプリミティブの頂点のドメイン座標を出力することができ、第1の対角線ストリップは、連続的部分内に配置される。点生成器70は、第2の対角線ストリップ内に配置されるプリミティブの頂点の座標も決定し、第2の対角線ストリップは連続的部分内に配置され、決定された座標を接続生成器72に(例えば、シャローバッファを介して)出力できる。第1の対角線ストリップ内に配置される頂点のドメイン座標を出力した後、接続生成器72は、第2の対角線ストリップ内に配置される頂点のドメイン座標を出力することができ、第2の対角線ストリップは、連続的部分内に配置される。
[0171] 一動作モードにおいて、第2の対角線ストリップは、第1の対角線ストリップと平行であるものとしてよく、接続生成器72は、第2の平行な対角線ストリップ内に配置される頂点のドメイン座標を出力し得る。この例では、平行な対角線ストリップは、第1の対角線ストリップと異なる数のプリミティブを含み得る。
[0172] 別の動作モードでは、第2の対角線ストリップは、第1の対角線ストリップと接し得る。本開示で使用されているように、接するは、第2の対角線ストリップ内のただ1つのプリミティブが、第1の対角線ストリップ内のただ1つのプリミティブと2つの頂点を共有することを意味する。このようにして、第2の対角線ストリップは、第1の対角線ストリップに、ただ1つのプリミティブのところで接続され、従って、第1の対角線ストリップと接すると考えられ得る。この例では、接する対角線ストリップは、第1の対角線ストリップと同じ数のプリミティブを含み得る。
[0173] また、点生成器70は、第3の対角線ストリップ内の配置されるプリミティブの頂点の座標を決定し、決定された座標を接続生成器72に(例えば、シャローバッファを介して)出力し得る。第2の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、接続生成器72は、次いで、連続的部分内にある第3の対角線ストリップ内に配置されるプリミティブの頂点を出力できる。いずれかの動作モードにおいて、第3の対角線ストリップは、第1の対角線ストリップと平行であり得る。例えば、第1および第2の対角線ストリップが互いに平行である動作モードにおいて、第3の対角線ストリップは、第1と第2の両方の対角線ストリップと平行であるものとしてよい。第2の対角線ストリップが第1の対角線ストリップに接する動作モードでは、第3の対角線ストリップは、第1の対角線ストリップと平行であるが、第2の対角線ストリップとは平行でない場合がある。
[0174] 点生成器70は、プリミティブの座標を決定することができ、接続生成器72は、接続生成器72がドメインの連続的部分のうちの1つの中のプリミティブを出力することを完了するまで対角線ストリップ内のプリミティブを出力できる。点生成器70は、プリミティブの座標を決定することができ、次いで、接続生成器72は、ドメイン内の別の連続的部分内のプリミティブを実質的に類似の方法で出力できる。
[0175] 接続生成器72は、1つのプリミティブのドメイン座標をコントローラ74に出力できる。次いで、コントローラ74は、再利用バッファ78が出力されたドメイン座標に対応するパッチ座標を格納するかどうかを決定できる。例えば、ドメイン座標は、再利用バッファ78へのインデックスであり得る。上で説明されているように、ドメイン座標はデカルト座標(例えば、u、v座標)または重心座標(例えば、u、v、w座標)とすることができる。u座標、v座標、およびw座標は、各々、17ビットとしてよい。従って、u、v座標は、34個のビットを含み得るが、u、v、w座標は、51個のビットを含み得る。
[0176] コントローラ74は、これら34個または51個のビットを再利用バッファ78内のXORゲートに出力し得る。XORゲートは、受信されたビットを再利用バッファ78のインデックスを示すビットと比較し得る。XORゲートの出力が、受信されたビットが再利用バッファ78内のインデックスと一致することを示している場合、再利用バッファ78は、キャッシュヒットをコントローラ74に出力できる。キャッシュヒットは、再利用バッファ78が34個または51個のビットを形成したドメイン座標に対するパッチ座標を格納することを意味する。XORゲートの出力が、受信されたビットが再利用バッファ78内のインデックスと一致しないことを示している場合、再利用バッファ78は、キャッシュミスをコントローラ74に出力できる。キャッシュミスは、再利用バッファ78が34個または51個のビットを形成したドメイン座標に対するパッチ座標を格納しないことを意味する。
[0177] キャッシュヒットが生じた場合、コントローラ74は、再利用バッファ78がすでに、34個または51個のビットを形成したドメイン座標に対するパッチ座標を格納しているので、ドメインシェーダ76のインスタンス化を実行させ得ない。この場合、コントローラ74は、グラフィックスパイプラインのその後のユニットに、さらなる処理のため出力されたドメイン座標に対応するパッチ座標を読み出させることができる。例えば、コントローラ74は、ジオメトリシェーダステージ28(図1)またはジオメトリシェーダ(図2)に、さらなる処理のため再利用バッファ78から出力されたドメイン座標に対応するパッチ座標を読み出させることができる。
[0178] キャッシュミスが生じた場合、コントローラ74は、再利用バッファ78が34個または51個のビットを形成したドメイン座標に対するパッチ座標を格納していないので、ドメインシェーダ76のインスタンス化を実行させ得る。この場合、コントローラ74は、ドメイン座標をドメインシェーダ76に供給し、ドメインシェーダ76は、ドメイン座標を対応するパッチ座標に変換できる。ドメインシェーダ76は、パッチ座標を再利用バッファ78に出力し得る。再利用バッファ78は、次いで、ドメイン座標を形成した34個または51個のビットに等しいインデックスでパッチ座標を格納できる。再利用バッファ78が、パッチ座標を格納した後、コントローラ74は、グラフィックスパイプラインのその後のユニットに、さらなる処理のため再利用バッファ78からパッチ座標を読み出させることができる。
[0179] コントローラ74は、接続生成器72によって出力されるドメイン座標の各々についてこれらのステップを繰り返すことができる。例えば、キャッシュミスごとに、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させ、キャッシュミスごとに、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させ得ない。
[0180] 上で説明されているように、本開示で説明されている技術は、ドメインシェーダ76のインスタンス化の回数を最小限度に抑えることができる。この目的のために、本開示で説明されている技術は、発生するキャッシュミスの回数を最小限度に抑えることができる。例えば、連続的部分内で対角線ストリップ内のプリミティブのドメイン座標を出力することで、共有される頂点のドメイン座標に対応するパッチ座標が再利用バッファ78内に残り、再利用バッファ78が未共有頂点のドメイン座標に対応するパッチ座標を取り除く(例えば、ウォッシュアウトする)確率が増大する。
[0181] 本開示で説明されている技術において、対角線ストリップの各々は、第1の辺(例えば、内側)と第2の辺(例えば、外側)とを備えるものとしてよい。第1、第2、および第3の対角線ストリップがすべて互いに平行である例示的な動作モードにおいて、第1の対角線ストリップの外側は、第2の対角線ストリップの内側と同じであり、第2の対角線ストリップの外側は、第3の対角線ストリップの内側と同じであってよい。この例では、対角線ストリップの各々におけるプリミティブの数は、異なり得る。
[0182] 一例として、第2の対角線ストリップ内のプリミティブの数は、第1の対角線ストリップ内のプリミティブの数よりも多く、第3の対角線ストリップ内のプリミティブの数は、第1および第2の対角線ストリップ内のプリミティブの数よりも多くなり得る。この結果、第1の対角線ストリップの外側の頂点の数は第1の対角線ストリップの内側の頂点の数より多くなり、第2の対角線ストリップの外側の頂点の数は第2の対角線ストリップの内側の頂点の数より多くなり、第2の対角線ストリップの内側は、第1の対角線ストリップの外側と同じである。
[0183] 対角線ストリップの外側の頂点のドメイン座標に対応するパッチ座標が再利用バッファ78内に留まることを保証することによって、本開示で説明されている技術は、再利用バッファ78内に格納されているパッチ座標の数を徐々に増やして行くことができる。次いで、再利用バッファ78が満杯になったときに、再利用バッファ78は、対角線ストリップの内側に沿って配置される頂点のドメイン座標に対応するパッチ座標を取り除くことができる。対角線ストリップの内側にはプリミティブが少ないので、これらのプリミティブは、ドメイン内の他のプリミティブと、同じ数の頂点を、もしあっても、共有し得ない。従って、これらの内側の頂点のドメイン座標に対応するパッチ座標が、再利用バッファ78から取り除かれた場合、ドメインシェーダ76の必要な実行回数に対する影響は、わずかなものとし得る。このようにして、この動作モードでは、図3〜図5に関して上で説明されている例と比較して、ドメインシェーダ76の必要な実行回数を減らすことができる。
[0184] 第2の対角線ストリップが第1の対角線ストリップと接する例示的な動作モードでも、共有される頂点のドメイン座標に対応するパッチ座標が再利用バッファ78内に残る確率を高めることによってドメインシェーダ76の実行を最小にできる。例えば、再利用バッファ78の記憶能力(例えば、再利用バッファ78内のスロットの数)が十分に大きく、および/またはドメイン内の頂点の数が十分に小さい場合に、接続生成器72が、第2の対角線ストリップ内のプリミティブに対するドメイン座標を出力した後、再利用バッファ78は、第1の対角線ストリップ内のプリミティブのドメイン座標に対応するパッチ座標をそれでも格納できる。
[0185] 次いで、接続生成器72が、第3の対角線ストリップ内のプリミティブのドメイン座標を出力するときに、コントローラ74は、ドメインシェーダ76がドメイン座標の多くについて実行する必要がないと決定し得る。例えば、この動作モードでは、第3の対角線ストリップの内側は、第1の対角線ストリップの外側と同じであり得る。対角線ストリップの外側に沿って配置される頂点に対するドメイン座標に対応するパッチ座標は、それでも再利用バッファ78内に格納され、コントローラ74は、ドメインシェーダ76が少なくともこれらの頂点について実行する必要がないと決定し得る。
[0186] このようにして、第2の対角線ストリップが第1の対角線ストリップと接する動作モードであっても、本開示で説明されている技術は、対角線ストリップの外側に配置されるドメイン座標に対応するパッチ座標が再利用バッファ78内に残り、対角線ストリップの内側に配置されるドメイン座標に対応するパッチ座標が再利用バッファ78から取り除かれるように再利用バッファ78内に格納されるパッチ座標を徐々に成長させることができる。例えば、第2の対角線ストリップが第1の対角線ストリップと接する動作モードにおいて、第3の対角線ストリップ内のプリミティブの数は、第1の対角線ストリップ内のプリミティブの数より多いものとしてよい。
[0187] 従って、第1の対角線ストリップの内側に配置される頂点の数は、第1の対角線ストリップの外側に配置される頂点の数より少ない。この方法で、再利用バッファ78が第1の対角線ストリップの内側に沿って配置される頂点のドメイン座標に対応するパッチ座標を取り除く場合でも、ドメインシェーダ76の必要な実行回数に対するマイナスの影響は、もしあったとしてもわずかであり得る。このようにして、この動作モードでも、図3〜図5に関して上で説明されている例と比較して、ドメインシェーダ76の必要な実行回数を減らすことができる。
[0188] 上で説明されているように、点生成器70および接続生成器72は一緒に、ドメインを複数の部分に分割することができ、これらの部分のうちの少なくとも1つは、連続的部分である。点生成器70および接続生成器72は、一緒に、テッセレーション係数、および再利用バッファ78の記憶能力に基づきドメインを複数の部分に分割し得る。次いで、点生成器70および接続生成器72は、点生成器70および接続生成器72がドメインを分割する方法に基づき上で説明されている例示的な動作モードのうちの1つを実施し得る。
[0189] 四角形ドメインについて、テッセレーションユニット66は、fxテッセレーション係数と、fyテッセレーション係数とを受信できる。fxテッセレーション係数は、x方向でリング上に配置される頂点の数を示し、fyテッセレーション係数は、y方向でリング上に配置される頂点の数を示し得る。例えば、テッセレーションユニット66の点生成器70は、fxテッセレーション係数とfyテッセレーション係数とを利用して、リングの各々上に配置される点の数を決定できる。点(例えば、頂点)の配置を決定するためにリングが必要であるけれども、接続生成器72は、対角線ストリップ内の、リングに基づかない、プリミティブを出力することに留意されたい。言い換えれば、点生成器70がリングを利用して頂点の配置を決定した後、接続生成器72は、対角線ストリップ内のプリミティブの頂点のドメイン座標を出力し、図3〜図5に関して上で説明されているリングバイリング形式では出力しない。
[0190] いくつかの例では、セットアップユニット68は、fxテッセレーション係数とfyテッセレーション係数とを処理できる。例えば、セットアップユニット68は、テッセレーションユニット66が整数分割を適用する場合にfxとfyとを整数値に丸めるものとしてよい。セットアップユニット68は、テッセレーションユニット66が奇数分数分割を適用する場合にfxとfyとを奇整数に丸めるものとしてよい。セットアップユニット68は、テッセレーションユニット66が偶数分数分割を適用する場合にfxとfyとを偶整数に丸めるものとしてよい。セットアップユニット68は、テッセレーションユニット66が2の冪乗(pow2)分割を適用する場合にfxとfyとを2n(すなわち、2進整数)に丸めるものとしてよい。いかなる場合も、本開示は、fxおよびfyテッセレーション係数をセットアップユニット68による前処理の後の係数であるとする。
[0191] 接続生成器72は、fxおよびfyのうちの小さい方に基づき四角形ドメインを分割できる。例えば、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、fxおよびfyのうちの小さい方を決定し得る。例えば、f1をfxおよびfyのうちの小さい方に等しいとし、f2はfxおよびfyのうちの大きい方である。fxがfyに等しい場合、f1をfxまたはfyのいずれかに等しいとする。言い換えれば、f1はf2以下である(すなわち、f1≦f2)。
[0192] 上記の例では、ドメインは四角形ドメインであると仮定した。三角形ドメインについては、テッセレーションユニット66は、fxテッセレーション係数と、fyテッセレーション係数とを受信し得ない。むしろ、テッセレーションユニット66は、1つのテッセレーション係数を受信することができ、本開示では簡単のためf1と称する。
[0193] より詳しく説明されているように、テッセレーション係数f1の値は、点生成器70および接続生成器72がドメインを分割する方法を決定し得る。また、再利用バッファ78内のスロットの数も、点生成器70および接続生成器72がドメインを分割する方法を決定し得る。「C」を再利用バッファ78内のスロットの数(すなわち、再利用バッファ78の記憶能力)に等しいとする。
[0194] いくつかの例において、コントローラ74は、f1+1がC−2以下かどうかを決定し得る。テッセレーションユニット66が、f1+1がC−2以下かどうかを決定することが可能であり得ることは理解されるであろう。例えば、テッセレーションユニット66は、Cの値をプリロードされ得る。言い換えれば、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1+1がC−2以下かどうかを決定し得る。しかしながら、説明を簡単にするため、コントローラ74は、f1+1がC−2以下かどうかを決定するものとして説明されている。
[0195] コントローラ74が、f1+1がC−2以下であると決定した場合、コントローラ74は、接続生成器72に、第1の動作モードで動作するように指令し得る。この第1の動作モードは、ジョイント対角線ウォーク(joint diagonal walk)と称され得る。第1の動作モードにおいて、点生成器70および接続生成器72は、ドメインを2つの部分に分割することができ、1つまたは複数の両方の部分は、連続的部分である。例えば、点生成器70および接続生成器72は、四角形ドメインを半分に分割して2つの部分にし、これら半分にされた2つの部分の各々で第1の動作モードを実施できる。別の例として、点生成器70および接続生成器72は、三角形ドメインを1/3の部分および2/3の部分に分割できる。この例では、点生成器70および接続生成器72は、2/3の部分に対して第1の動作モードを実施することができ、1/3の部分に対して、以下でより詳しく説明されている、第2の動作モードを実施できる。
[0196] 図7は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図7は、四角形ドメインである、ドメイン80を示している。図示されているように、点生成器70および接続生成器72は、この例では、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)がf1+1がC−2以下であると決定している可能性があるので、ドメイン80を2つの部分81Aおよび81Bに分割し得る。言い換えれば、点生成器70および接続生成器72は、第1の動作モードを実施できる。この場合、部分81Aおよび81Bは、各々結合部分と考えられ得る。例えば、点生成器70および接続生成器72が、ドメイン80を四つ組に分割するとすれば、部分81Aは四つ組のうちの2つを備える結合部分を含み、部分81Bは四つ組のうちの他の2つを備える結合部分を含む。
[0197] 例示することを目的として、図7は、接続生成器72が部分81B内のプリミティブに対するドメイン座標を出力し得る方法を示している。接続生成器72は、点生成器70によって決定されたドメイン座標に基づきドメイン座標を出力することは理解されるであろう。部分81Bは、部分81B内に入るドメイン80のすべてのプリミティブが部分81Bの一部として含まれるので、連続的部分である。例えば、部分81Bは、ドメイン80内にギャップを作成しない。
[0198] 図7に示されている例において、接続生成器72は、ドメイン80のx軸境界に沿って、部分81Bの中心に配置され、外へ広がる、プリミティブのドメイン座標を出力することを開始できる。これは、第1の対角線ストリップ82と、第2の対角線ストリップ84と、第3の対角線ストリップ86とに関してさらに図示されている。例えば、第1の対角線ストリップ82は、プリミティブ88Aから88Nを含み、第2の対角線ストリップ84は、プリミティブ90Aから90Nを含み、第3の対角線ストリップ86は、プリミティブ92Aから92Mを含む。
[0199] 第1の動作モードにおいて(例えば、f1+1がC−2以下である)、第2の対角線ストリップ84は、第1の対角線ストリップ82と同じ数のプリミティブを含み得る。例えば、図7において、第1の対角線ストリップ82は、「N」個のプリミティブを含み、第2の対角線ストリップ84も、「N」個のプリミティブを含む。第1のモードの動作では、第3の対角線ストリップ86は、第1の対角線ストリップ82および第2の対角線ストリップ84と異なる数のプリミティブを含む。例えば、第3の対角線ストリップ86は、「M」個のプリミティブを含む。
[0200] また、第1の動作モードでは、第2の対角線ストリップ84は、第1の対角線ストリップ82と接する。例えば、第2の対角線ストリップ84は、第1の対角線ストリップ82のただ1つのプリミティブと2つの頂点を共有するただ1つのプリミティブを含む。図7に示されているように、第2の対角線ストリップ84のプリミティブ90Aは、第1の対角線ストリップ82のプリミティブ88Nと2つの頂点を共有し、第2の対角線ストリップ84の残っているプリミティブのうちのどれも、第1の対角線ストリップ82の残っているプリミティブと2つの頂点を共有しない。
[0201] さらに、第1の動作モードでは、第3の対角線ストリップ86は、第1の対角線ストリップ82と平行であるが、第2の対角線ストリップ84とは平行でない。第1の対角線ストリップ82、第2の対角線ストリップ84、および第3の対角線ストリップ86の各々は、内側と外側とを含み得る。内側とは、部分81Bの中心により近い第1の対角線ストリップ82、第2の対角線ストリップ84、および第3の対角線ストリップ86の側を指し、外側とは、部分81Bの中心から離れる第1の対角線ストリップ82、第2の対角線ストリップ84、および第3の対角線ストリップ86の側を指す。
[0202] 2つの対角線ストリップが互いに平行であるとは、2つの対角線ストリップが同じ軸から始まり、同じ方向に外向きに広がることを意味する。例えば、第1の対角線ストリップ82および第3の対角線ストリップ86は両方とも、ドメイン80のx軸に沿って始まり、同じ方向に外向きに広がる。第2の対角線ストリップ84は、ドメイン80のx軸に沿って始まるが、第1の対角線ストリップ82および第3の対角線ストリップ86と同じ方向に外向きに広がらない。
[0203] いくつかの例では、2つの対角線ストリップが互いに平行であるとは、2つの対角線ストリップのうちの一方の外側が2つの対角線ストリップのうちの他方の内側と同じであることを意味する。例えば、第1の対角線ストリップ82の外側は、第3の対角線ストリップ86の内側と同じである。従って、第3の対角線ストリップ86は、第1の対角線ストリップ82と平行である。しかしながら、対角線ストリップ84の内側または外側のいずれも、第1の対角線ストリップ82および第3の対角線ストリップ86の内側または外側と同じでない。従って、第3の対角線ストリップ86は、第2の対角線ストリップ84と平行でない。
[0204] さらに、2つの対角線ストリップが内側と外側とを共有していない場合でも、2つは対角線ストリップが互いに平行であると考えられることは可能であり得る。例えば、上で説明されていように、2つの対角線ストリップがドメインの同じ軸から始まり、同じ方向に外向きに広がる場合、2つの対角線ストリップは、互いに平行であると考えられ得る。
[0205] 図7において、接続生成器72は、プリミティブ88Aから88Nに対するドメイン座標(すなわち、第1の対角線ストリップ82内のプリミティブに対するドメイン座標)を出力し得る。再利用バッファ78が対応するパッチ座標を格納しない、プリミティブ88Aから88Nのこれらのドメイン座標について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標(すなわち、ドメイン座標に対応するパッチ座標)を再利用バッファ78に格納できる。次いで、接続生成器72は、プリミティブ90Aから90Nに対するドメイン座標(すなわち、第2の対角線ストリップ84内のプリミティブに対するドメイン座標)を出力し得る。ここでまた、再利用バッファ78が対応するパッチ座標を格納しない、プリミティブ90Aから90Nのこれらのドメイン座標について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標を再利用バッファ78に格納できる。次に、接続生成器は、プリミティブ92Aから92Mに対するドメイン座標(すなわち、第3の対角線ストリップ86内のプリミティブに対するドメイン座標)を出力し得る。上記のように、再利用バッファ78が対応するパッチ座標を格納しない、プリミティブ92Aから92Mのこれらのドメイン座標について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標を再利用バッファ78に格納できる。
[0206] 接続生成器72は、接続生成器72が部分81B内のプリミティブのすべてのドメイン座標を出力することを完了するまでこの方法でドメイン座標を出力し続けることができる。次いで、接続生成器72は、部分81Aに関してこれらのステップを繰り返すことができる。図7に示されているように、部分81Bおよび部分81Aは、多数の頂点を共有する。いくつかの場合において、部分81Aおよび部分81Bによって共有されるこれらの頂点のうちのいくつかに対するドメイン座標に対応するパッチ座標は、再利用バッファ78内でもはや利用可能でない可能性があり得る。頂点のうちのいくつかについて、コントローラ74は、ドメインシェーダ76を実行させることができる。しかしながら、ドメインシェーダ76は、これらの共有されている頂点のドメイン座標をパッチ座標に再変換するために実行する必要があり得るけれども、本開示で説明されている技術は、図3〜図5で示されている例と比較して、ドメインシェーダ76の必要な全体的な実行回数をそれでも減らすことができる。
[0207] いくつかの場合において、図7に示されているように、対角線ストリップのプリミティブを出力した後、その対角線ストリップと合同である(すなわち、接する)対角線ストリップはあり得ない。この場合、接続生成器72は、鏡像となる対角線ストリップのプリミティブを出力し得る。例えば、接続生成器72が、対角線ストリップ94内のプリミティブのドメイン座標を出力した後、対角線ストリップ94に接する対角線ストリップはあり得ない。この場合、接続生成器72は、対角線ストリップ94の鏡像である、対角線ストリップ96のプリミティブのドメイン座標を出力し得る。
[0208] 互いに鏡像となる対角線ストリップは、広げられた場合に同じ点のところでドメイン内の線対称の軸と交差する対角線ストリップを指す。例えば、図7において、線対称の軸は、ドメイン80の中心下端から上方に、またはドメイン80の中心上端から下方に延びる垂直線として考えられ得る。この例では、対角線ストリップ94および対角線ストリップ96がさらに広がった場合、対角線ストリップ94および対角線ストリップ96は、ドメイン80の線対称の軸に沿って交差する。
[0209] この方法で、図7に示されているように、接続生成器72は、部分81Bの下端の中心から始まり、部分81Bの右端と左端の両方の方へ、また部分81Bの上端の方へ向かう外向きの方向に広がるプリミティブのドメイン座標を出力する。代替的に、接続生成器72は、部分81Bの上端の中心から始まって、部分81Bの右端と左端の両方の方へ、また部分81Bの下端の方へ、外向きに進む。この場合、部分81Bと81Aとによって共有される頂点のドメイン座標に対応するパッチ座標は、再利用バッファ78から取り除かれる可能性。従って、接続生成器72は、部分81Bの上端ではなく、部分81Bの下端の中心から始まる方が有利であり得る。いずれかの状況において(例えば、部分81の上端または下端から始まる)、出力方式は、第1の対角線ストリップ82がx軸から始まり、第2の対角線ストリップ84はx軸で終わるので、x方向のジョイントウォークと称され得る。
[0210] しかしながら、本開示で説明されている技術は、そのように限定されない。いくつかの他の例において、点生成器70および接続生成器72は、ドメイン80を、図7に示されている水平方向部分ではなく、2つの垂直方向部分に分割し得る。この場合、接続生成器72は、左端の中心または右端の中心から始まり、2つの垂直方向部分のうちの1つの垂直方向部分の上端と下端の両方の方へ向かう外向きの方向に広がるプリミティブのドメイン座標を出力できる。そのような出力方式は、第1の対角線ストリップが、この例では、ドメインのy軸から始まり、第2の対角線ストリップが、この例では、ドメインのy軸で終わり得るので、y方向のジョイントウォークと称され得る例えば、y方向のジョイントウォークは、ドメイン80が90度回転された場合のx方向のジョイントウォークと同じであると考えられ得る。
[0211] 処理ユニット(例えば、コントローラ74またはテッセレーションユニット66)が、接続生成器72が第1の動作モードを実施すると決定したときに、コントローラ74は、接続生成器72がx方向のジョイントウォークまたはy方向のジョイントウォークを実施するかどうかをさらに決定できる。例えば、コントローラ74は、接続生成器72が、x方向のジョイントウォークまたはy方向のジョイントウォークを実施するかどうかをテッセレーション係数に基づき決定できる。
[0212] 例えば、第1の動作モードでは、f1+1はC−2以下であり、f1はfxおよびfyのうちの小さい方に等しい。コントローラ74が、f1がfxに等しい(すなわち、fxがfy以下である)と決定する場合、コントローラ74は、接続生成器72がx方向のジョイントウォークを実施して連続的部分以外のプリミティブのドメイン座標を出力することを決定できる。コントローラ74が、f1がfyに等しい(すなわち、fyがfx以下である)と決定する場合、コントローラ74は、接続生成器72がy方向のジョイントウォークを実施して連続的部分以外のプリミティブのドメイン座標を出力することを決定できる。次いで、接続生成器72は、コントローラ74の決定に基づきx方向のジョイントウォークまたはy方向のジョイントウォークのいずれかで連続的部分内のプリミティブのドメイン座標を出力し得る。
[0213] 図8は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図8は、三角形ドメインである、ドメイン98を示している。図示されているように、点生成器70および接続生成器72は、この例では、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)がf1+1がC−2以下であると決定している可能性があるので、ドメイン98を2つの部分100Aおよび100Bに分割し得る。言い換えれば、図7と同様に、接続生成器72は、第1の動作モードを実施できる。
[0214] 三角形ドメイン98について、テッセレーションユニット66は、図7の四角形ドメイン80などの四角形ドメインに対する2つのテッセレーション係数(すなわち、fxおよびfy)ではなく、リングの各辺に沿って配置される点の数を示す1つのテッセレーション係数を受信できる。整合性のために、三角形ドメイン98に対するリングの各辺に沿って配置される点の数を示すテッセレーション係数は、f1と称される。しかしながら、テッセレーション係数fxもfyもないので、f1は、単にfと称されるものとしてよい。
[0215] さらに、点生成器70および接続生成器72は、ドメイン98を2つの部分に分割し得る第1の動作モードにおいて、2つの部分のうちの一方は、ドメイン98の1/3を含み、2つの部分のうちの他方は、ドメイン98の2/3を含み得る。例えば、部分100Bは、ドメイン98の2/3を含む連続的部分であり、部分100Aは、ドメイン98の1/3を含む連続的部分である。
[0216] 点生成器70および接続生成器72が、ドメイン98を半分にして等しい2つの部分に分割することが可能であり得る。しかしながら、f1+1がC−2以下である場合に、接続生成器72がドメイン98の2/3内(すなわち、部分100B内)のプリミティブに対するドメイン座標を出力するのに十分な記憶スロットが再利用バッファ78内にあり得る。ドメイン98の2/3は、ドメイン98の1/2よりも大きいので、接続生成器72が、ドメイン98を1/3の部分100Aおよび2/3の部分100Bに分割することはより有利であり得る。
[0217] 例示することを目的として、図8は、接続生成器72が部分100B内のプリミティブに対するドメイン座標を出力し得る方法を示している。上で説明されているように、接続生成器72は、点生成器70が決定したドメイン座標を出力し得る。部分100Bにおけるプリミティブのドメイン座標を出力することは、部分100Bが2つの三つ組の組合せであるので、ジョイントウォークと考えられ得る(例えば、ドメイン98の2/3はドメイン98の2つの1/3の組合せに等しい)。
[0218] 図8に示されている例において、接続生成器72は、部分100Bの中心に配置され、外へ広がる、プリミティブのドメイン座標を出力することを開始できる。例えば、図8は、第1の対角線ストリップ102と、第2の対角線ストリップ104と、第3の対角線ストリップ106とを示している。この例では、接続生成器72は、第1の対角線ストリップ102内に配置されるプリミティブのドメイン座標を、続いて、第2の対角線ストリップ104とともに配置されるプリミティブのドメイン座標を、続いて第3の対角線ストリップ106とともに配置されるプリミティブのドメイン座標を出力し得る。ドメイン座標の出力の後、再利用バッファ78が対応するパッチ座標を格納しない、ドメイン座標のどれかに対する、対角線ストリップの各々について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標(すなわち、ドメイン座標に対応するパッチ座標)を再利用バッファ78に格納できる。
[0219] 図8に示されている例では、接続生成器72は、第1の動作モードを実施しているので、第2の対角線ストリップ104は、第1の対角線ストリップ102に接し、第2の対角線ストリップ104は、第1の対角線ストリップ102と同じ数のプリミティブを含み得る。また、第1の動作モードでは、第3の対角線ストリップ106は、第1の対角線ストリップ102と平行であるが、第2の対角線ストリップ104とは平行でない場合がある。図示されているように、第3の対角線ストリップ106は、第1の対角線ストリップ102および第2の対角線ストリップ104と異なる数のプリミティブを含み得る。
[0220] 接続生成器72は、接続生成器72が部分100B内のプリミティブのすべてのドメイン座標を出力することを完了するまでこの方法でドメイン座標を出力し続けることができる。図8は、部分100Bをドメイン98の下2/3を含むものとして示しているけれども、本開示の態様はそのように限定されないことは理解されるであろう。他の例では、部分100Bは、ドメイン98の右または左2/3を含み得る。部分100Aについては、接続生成器72は、以下で説明されている第2の動作モードに従ってプリミティブを出力し得る。
[0221] 図7および図8に示されている例において、点生成器70および接続生成器72は、ジョイントウォークを実施することができ、ジョイントウォークは、四角形ドメインに対する四つ組の2つのセクションと、三角形ドメインに対する三つ組の2つのセクションとを含む。ジョイントウォークでは、2つのセクションが互いに隣接しており、ドメイン全体を通して延びる(すなわち、図7および図8の垂直方向に)仮説的中線上の頂点を共有する。図7および図8は、リングの各々に沿って同じ数の頂点がある一様テッセレーションの一例も示しており、リングの各々に沿った頂点の数は偶数である。これは、テッセレーションユニット66の点生成器70がテッセレーションにおける対称パターンを利用し、リングに沿った頂点の半分に対する座標を計算し、内部バッファ(再利用バッファ78以外、または含む)を使用してリングに沿った頂点の他の半分の座標の鏡像を生成することによって計算量を節減することを可能にし得る。
[0222] 図7と同様に、対角線ストリップのプリミティブを出力した後、その対角線ストリップと合同の対角線ストリップはあり得ない。この場合、接続生成器72は、鏡像となる対角線ストリップのプリミティブを出力し得る。例えば、接続生成器72が、対角線ストリップ108内のプリミティブのドメイン座標を出力した後、対角線ストリップ108に接する対角線ストリップはあり得ない。この場合、接続生成器72は、対角線ストリップ108の鏡像である、対角線ストリップ110のプリミティブのドメイン座標を出力し得る。例えば、対角線ストリップ108および対角線ストリップ110が広がるとすれば、対角線ストリップ108および対角線ストリップ110は、線対称の軸に沿った同じ点で交わる。
[0223] 図9は、本開示で説明されている1つまたは複数の例による接続生成器が出力するドメインの連続的部分の一例を示す図である。例えば、図9は、連続的部分112を示している。連続的部分112のプリミティブは、プリミティブ内の数値によって識別され、接続生成器72がドメイン座標を出力できる順序を示す。例えば、接続生成器72は、プリミティブ0、続いてプリミティブ1、続いてプリミティブ2などの頂点のドメイン座標を出力し得る。プリミティブの頂点における数値は、ドメイン座標を表す。例えば、プリミティブ0に対するドメイン座標は、(2,3,10)である。ドメイン座標は(u,v)座標または(u,v,w)座標であることは理解されるであろう。しかしながら、説明を簡単にするために、ドメイン座標は、単一の値を与えられる。
[0224] 図9に示されている例では、fyは6に等しく、fxは18に等しい。しかしながら、例示を簡単にするため、連続的部分の半分のみが図示されている。例えば、図9は、セグメントは2つの頂点の間の直線である、y軸に沿った6個のセグメントと、x軸に沿った9個のセグメントとを示している。完全な連続的部分は、y軸に沿った6個のセグメントと、x軸に沿った18個のセグメントとを含む。例示を簡単にするため、y軸に沿った6個のセグメントとx軸に沿った9個のセグメントとを含む連続的部分の一部のみが図示されている(すなわち、連続的部分の半分)。例えば、y軸に沿って6個のセグメントがあるので、fyは6に等しいが、但し、セグメントは2つの端点を含み、2つの端点はプリミティブの頂点である。図9では、x軸に沿って実際に18個のセグメントがあるので、fxは18に等しいが、18個のセグメントのうち9個のみが図9に示されている。
[0225] また、図9に示されている例では、再利用バッファ78内のスロットの数は、9である(すなわち、Cは9に等しい)と仮定する。この場合、fyはfxよりも小さいので、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1がfyに等しいと決定し得る(すなわち、f1は6に等しい)。この例では、f1+1は7に等しく、C−2も7に等しい。従って、この例では、コントローラ74は、f1+1がC−2以下であると決定し、点生成器70および接続生成器72に、第1の動作モード(すなわち、ジョイントウォーク)を実施させることができる。
[0226] さらに、この例では、fyはfxよりも小さいので、コントローラ74は、点生成器70および接続生成器72に、y方向のジョイントウォークを実施させることができる。例えば、図9に示されているように、接続生成器72は、連続的部分112の左端から始めて、連続的部分112の右端へ外向きに広がり得る。図9に示されている例では、第1の対角線ストリップは、プリミティブ2と、3と、4とを含み、第2の対角線ストリップは、プリミティブ5と、6と、7とを含み、第3の対角線ストリップは、プリミティブ8と、9と、10と、11と、12とを含み得る。第1の対角線ストリップは、y軸から始まり、第2の対角線ストリップは、y軸で終わる、従って、y方向のジョイントウォークである。
[0227] この場合、第2の対角線ストリップは、第1の対角線ストリップと接し、第3の対角線ストリップは、第1の対角線と平行であり、第3の対角線と平行でない。また、第1および第2の対角線ストリップ内のプリミティブの数は、同じであり(すなわち、各々の中に3つのプリミティブ)、第3の対角線ストリップ内のプリミティブの数は、異なる(すなわち、3つのプリミティブの代わりに5つのプリミティブ)。
[0228] 以下の表1は、連続的部分112の最初の42個のプリミティブに対する再利用キャッシュ78の挙動を示している。表1において、第1の列はプリミティブを示し、第2の列はドメイン座標を示し、第3の列は再利用バッファ78に格納されているパッチ座標を示している。例示を簡単にするために、パッチ座標は、その対応するドメイン座標と同じ値を与えられている。また、表1の第3の列では、太字で下線が引かれているパッチ座標は、ドメインシェーダ78が実行されてドメイン座標をパッチ座標に変換したときのインスタンスを示している。
[0229] 表1において、プリミティブ0に対して、コントローラ74は、ドメインシェーダ76のインスタンス化を3回実行して、プリミティブ0のドメイン座標をパッチ座標に変換し得る。プリミティブ1は、プリミティブ0と2つの頂点を共有する(すなわち、ドメイン座標3と10とを持つ頂点)。この場合、プリミティブ1について、コントローラ74は、ドメインシェーダ76のインスタンス化を1回実行させる、すなわち、ドメイン座標4に対して1回実行させ得る。ドメイン座標3と10とに対応するパッチ座標は、すでに再利用バッファ78に格納されているので、コントローラ74は、ドメイン座標3および10に対してはドメインシェーダのインスタンス化を行わせ得ない。
[0230] 表1に示されているように、プリミティブ7の後、再利用バッファ78は満杯である。この場合、接続生成器72がプリミティブ8のドメイン座標を出力した後、コントローラ74は、ドメインシェーダ76のインスタンス化を2回実行する必要があると決定できる、すなわち、プリミティブ8のドメイン座標0に対して1回、プリミティブ8のドメイン座標8に対して1回実行する必要がある。従って、再利用バッファ78は、パッチ座標2および3である、最も古くから格納されているパッチ座標を取り除いて、パッチ座標0および8に対する格納領域を解放できる。
[0231] 表1は、再利用バッファ78を効率的に利用して第1の動作モードについてドメインシェーダ76の実行を最小にする方法を示し得る。例えば、すべての共有されている頂点は、完全に利用される(例えば、余計なキャッシュミスはない)。例えば、頂点のドメイン座標に対応するパッチ座標は、接続生成器72がその頂点を共有するプリミティブの大半に対するドメイン座標を出力するまで再利用バッファ内に格納されたままである。これにより、ドメインシェーダ76の必要な実行回数を最小限に抑えることができる。
[0232] 上記の例では、f1+1がC−2以下である第1の動作モードに対する技術について説明した。しかしながら、f1+1がC−2以下であるという条件は、すべての場合において真とはなり得ない。例えば、f1のより大きい値および/またはCのより小さい値に対して、上記の例と比較して、f1+1がC−2以下であるという条件は、成立し得ない。
[0233] いくつかの例では、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)が、f1+1がC−2以下でないと決定した場合、コントローラ74は、f1/2+1がC−1以下であると決定し得る。コントローラ74が、f1/2+1がC−1以下であると決定した場合、コントローラ74は、接続生成器72に、第2の動作モードを実施させることができる。
[0234] 第2の動作モードにおいて、点生成器70および接続生成器72は、四角形ドメインを4つの部分(例えば、四つ組)に分割することができ、これらの部分のうちの少なくとも1つは、連続的部分である。第2の動作モードにおいて、点生成器70および接続生成器72は、三角形ドメインを3つの部分(例えば、三つ組)に分割することができ、これらの部分のうちの少なくとも1つは、連続的部分である。
[0235] 第2の動作モードについては、第1の動作モードと同様に、接続生成器72は、第1の対角線ストリップ内に配置されるプリミティブのドメイン座標を、続いて、第2の対角線ストリップ内に配置されるプリミティブのドメイン座標を、続いて、第3の対角線ストリップ内に配置されるプリミティブのドメイン座標を出力し得る。しかしながら、第2の動作モードでは、第2の対角線ストリップは、第1の対角線ストリップおよび第3の対角線ストリップと平行である。
[0236] 第2の対角線ストリップの内側は、第1の対角線ストリップの外側と同じであるものとしてよい。また、第2の対角線ストリップの外側は、第3の対角線ストリップの内側と同じであるものとしてよい。この例では、第2の対角線ストリップは、第1と第3の両方の対角線ストリップと平行であるので、第1の対角線ストリップは、第1の対角線ストリップの外側も内側も第3の対角線ストリップの内側または外側と同じでないとしても第3の対角線ストリップと平行である。
[0237] 図10は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図10は、四角形ドメインである、ドメイン114を示している。図示されているように、接続生成器72は、この例では、コントローラ74はf1/2+1がC−1以下であると決定している可能性があるので、ドメイン114を4つの部分115A〜115Dに分割し得る(すなわち、接続生成器72は、第2の動作モードを実施する)。図7の例では、部分81Aおよび81Bは、ジョイント部分であるとして説明された。図10の例において、部分115A〜115Dは、単一の部分と考えられ、2つの単一の部分が一緒になってジョイント部分を形成し得る。
[0238] 例示することを目的として、図10は、接続生成器72が部分115C内のプリミティブに対するドメイン座標を出力し得る方法を示している。部分115Cは、部分115Cがドメイン114内にギャップを作成しないので、連続的部分と考えられ得る。
[0239] 図10に示されている例において、接続生成器72は、部分115Cのコーナーに配置されている、部分115Cの反対のコーナーの方へ外向きに広がるプリミティブのドメイン座標を出力することを開始できる。例えば、図10において、接続生成器72は、部分115Cの右下コーナーから始めて、部分115Cの左上コーナーの方へ外向きに広がり得る。これは、第1の対角線ストリップ116と、第2の対角線ストリップ118と、第3の対角線ストリップ120とに関してさらに図示されている。図示されているように、第2の対角線ストリップ118は、第1の対角線ストリップ116よりも左上コーナーに近く、第3の対角線ストリップ120は、第2の対角線ストリップ118と第1の対角線ストリップ116の両方よりも左上コーナーに近い。
[0240] 第1の対角線ストリップ116は、プリミティブ122Aから122Nを含み、第2の対角線ストリップ118は、プリミティブ124Aから124Mを含み、第3の対角線ストリップ120は、プリミティブ126Aから126Xを含む。第2の動作モードにおいて、第2の対角線ストリップ118は、第1の対角線ストリップ116と異なる数のプリミティブを含み得る。例えば、第2の対角線ストリップ118は、「M」個のプリミティブを含み、第1の対角線ストリップ116は、「N」個のプリミティブを含むことができ、MおよびNは異なる数である。また、第3の対角線ストリップ120は、第1の対角線ストリップ116および第2の対角線ストリップ118と異なる数のプリミティブを含み得る。例えば、第3の対角線ストリップ120は、「X」個のプリミティブを含み、Xは、MおよびNと異なる。
[0241] 第2の動作モードにおいて、第1の対角線ストリップ116は、第2の対角線ストリップ118と平行であり得る。例えば、第2の対角線ストリップ118の内側は、第1の対角線ストリップ116の外側と同じである。また、第2の動作モードにおいて、第3の対角線ストリップ120は、第2の対角線ストリップ118と平行であり得る。例えば、第3の対角線ストリップ120の内側は、第2の対角線ストリップ118の外側と同じである。この場合、第2の対角線ストリップ118は、第1の対角線ストリップ116と第3の対角線ストリップ120の両方と平行なので、第1の対角線ストリップ116および第3の対角線ストリップ120は、互いに平行であると考えられ得る。
[0242] 図10において、接続生成器72は、プリミティブ122Aから122Nに対するドメイン座標(すなわち、第1の対角線ストリップ116内のプリミティブに対するドメイン座標)を出力し得る。再利用バッファ78が対応するパッチ座標を格納しない、プリミティブ122Aから122Nのこれらのドメイン座標について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標(すなわち、ドメイン座標に対応するパッチ座標)を再利用バッファ78に格納できる。次いで、接続生成器72は、プリミティブ124Aから124Mに対するドメイン座標(すなわち、第2の対角線ストリップ118内のプリミティブに対するドメイン座標)を出力し得る。ここでまた、再利用バッファ78が対応するパッチ座標を格納しない、プリミティブ124Aから124Mのこれらのドメイン座標について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標を再利用バッファ78に格納できる。次に、接続生成器は、プリミティブ126Aから126Xに対するドメイン座標(すなわち、第3の対角線ストリップ120内のプリミティブに対するドメイン座標)を出力し得る。上記のように、再利用バッファ78が対応するパッチ座標を格納しない、プリミティブ126Aから126Xのこれらのドメイン座標について、コントローラ74は、ドメインシェーダ76のインスタンス化を実行させることができ、ドメインシェーダ76は、変換された座標を再利用バッファ78に格納できる。
[0243] 第2の動作モードにおいて、接続生成器72は、プリミティブのドメイン座標をジグザグ方式で出力できる。例えば、接続生成器72は、ドメイン114のx軸から始まる第1の対角線ストリップ116のドメイン座標を出力することを開始し得る。次いで、いくつかの例では、接続生成器72は、ドメイン114のx軸から始まる第2の対角線ストリップ118のドメイン座標を出力し得る。第3の対角線ストリップ120について、接続生成器72は、もう一度、ドメイン114のx軸から開始できる。そのような出力は、ジグザグパターンを形成し得る。
[0244] 接続生成器72は、接続生成器72が部分115C内のプリミティブのすべてのドメイン座標を出力することを完了するまでこの方法でドメイン座標を出力し続けることができる。次いで、接続生成器72は、部分115A、115B、および115Dに関してこれらのステップを繰り返すことができる。図10に示されているように、部分115C並びに部分115A、115B、および115Dは、多数の頂点を共有する。いくつかの場合において、部分115A、115B、および115Dのうちの1つと部分115Cによって共有されるこれらの頂点のうちのいくつかに対するドメイン座標に対応するパッチ座標は、再利用バッファ78内でもはや利用可能でない可能性があり得る。頂点のうちのいくつかについて、コントローラ74は、ドメインシェーダ76を実行させることができる。しかしながら、ドメインシェーダ76は、これらの共有されている頂点のドメイン座標をパッチ座標に再変換するために実行する必要があり得るけれども、本開示で説明されている技術は、図3〜図5で示されている例と比較して、ドメインシェーダ76の必要な全体的な実行回数をそれでも減らすことができる。
[0245] 図10において、接続生成器72は、部分115Cの右下コーナーから始めて、部分115Cの左上コーナーの方へ外向きに広がった。このような出力方式は、接続生成器72がドメイン114のx軸から始まるので、x方向の単一ウォークと称され得る。x方向の単一ウォークの別の例は、接続生成器72が、部分115Cの左下コーナーから始めて、部分115Cの右上コーナーの方へ外向きに広がる場合であってよい。
[0246] しかしながら、本開示の態様は、x方向の単一ウォークに限定されない。いくつかの他の例において、点生成器70および接続生成器72は、y方向に単一ウォークを実施することができ、点生成器70および接続生成器72は、部分115Cの左上コーナーから始めて、部分115Cの右下コーナーの方へ外向きに広がり得るか、または部分115Cの右上コーナーから始まり、部分115Cの左下コーナーへ外向きに広がる。これらの出力方式は、点生成器70および接続生成器72がドメイン114のy軸から始まるので、y方向の単一ウォークと称され得る。
[0247] 処理ユニット(すなわち、この例ではコントローラ74)は、接続生成器72が、x方向の単一ウォークまたはy方向の単一ウォークを実施するかどうかを決定できる。例えば、第2の動作モードでは、f1/2+1はC−1以下である。コントローラ74が、f1がfxに等しい(すなわち、fxがfy以下である)と決定した場合、コントローラ74は、接続生成器72に、x方向の単一ウォークに従ってドメイン座標を出力させることができる。コントローラ74が、f1がfyに等しい(すなわち、fyがfx以下である)と決定した場合、コントローラ74は、接続生成器72に、y方向の単一ウォークに従ってドメイン座標を出力させることができる。
[0248] 図11は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図11は、三角形ドメインである、ドメイン128を示している。図示されているように、点生成器70および接続生成器72は、処理ユニット(この例では、コントローラ74)はf1/2+1がC−1以下であると決定している可能性があるので、ドメイン128を3つの部分130A〜130Cに分割し得る(すなわち、点生成器70および接続生成器72は、第2の動作モードを実施する)。この例では、f1は、三角形ドメインについて、テッセレーションユニット66がリング上に配置される点の数を示す1つのテッセレーション係数を受信し得るので、単にfと称され得る。
[0249] 例示することを目的として、図11は、接続生成器72が部分130C内のプリミティブに対するドメイン座標を出力する方法を示している。接続生成器72は、同様に、部分130Aおよび130Bの中のプリミティブのドメイン座標を出力し得る。さらに、図8に関して、接続生成器72は、同様に、部分100A内のプリミティブのドメイン座標を出力し得る。
[0250] 図11は、部分130Cを、第1の対角線ストリップ132と、第2の対角線ストリップ134と、第3の対角線ストリップ136とを含むものとして示している。この例では、第1の対角線ストリップ132は、第2の対角線ストリップ134と平行であり、第2の対角線ストリップ134は、第3の対角線ストリップ136と平行である。従って、第1の対角線ストリップ132も、第3の対角線ストリップ136と平行である。さらに、第1の対角線ストリップ132内のプリミティブの数は、第2の対角線ストリップ134内のプリミティブの数と異なり、第3の対角線ストリップ136内のプリミティブの数は、第1の対角線ストリップ132および第2の対角線ストリップ134の中のプリミティブの数と異なり得る。
[0251] この例では、接続生成器72は、第1の対角線ストリップ132内のプリミティブに対するドメイン座標を出力することができ、コントローラ74は、対応するパッチ座標が再利用バッファ78に格納されていない各ドメイン座標に対してドメインシェーダ76のインスタンス化を実行できる。次いで、接続生成器72は、第2の対角線ストリップ134内のプリミティブに対するドメイン座標を出力することができ、コントローラ74は、対応するパッチ座標が再利用バッファ78に格納されていない各ドメイン座標に対してドメインシェーダ76のインスタンス化を実行できる。次に、接続生成器72は、第3の対角線ストリップ136内のプリミティブに対するドメイン座標を出力することができ、コントローラ74は、対応するパッチ座標が再利用バッファ78に格納されていない各ドメイン座標に対してドメインシェーダ76のインスタンス化を実行できる。
[0252] 接続生成器72は、接続生成器72が部分130C内の最後のプリミティブに達するまでこの方法でドメイン座標を出力し続けることができる。次いで、接続生成器72は、実質的に類似の形式で、部分130Aおよび130Bの中のプリミティブのドメイン座標を出力し得る。
[0253] 図12は、本開示で説明されている1つまたは複数の例による接続生成器が出力するドメインの連続的部分の別の例を示す図である。例えば、図12は、連続的部分138を示している。図9と同様に、連続的部分138のプリミティブは、プリミティブ内の数値によって識別され、接続生成器72がドメイン座標を出力できる順序を示す。例えば、接続生成器72は、プリミティブ0、続いてプリミティブ1、続いてプリミティブ2などの頂点のドメイン座標を出力し得る。プリミティブの頂点における数値は、ドメイン座標を表す。
[0254] 図12に示されている例では、fxは10に等しく、fyは8に等しい。図12は、連続的部分の1/4を示している。例えば、図12は、x軸に沿った5個のセグメントとy軸に沿った4個のセグメントとを示しており、完全な連続的部分は、x軸に沿った10個のセグメントと、y軸に沿った8個のセグメントとを含む。また、図12に示されている例では、再利用バッファ78のスロットの数は、6である(すなわち、Cは6に等しい)と仮定する。この場合、fyはfxよりも小さいので、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1がfyに等しいと決定し得る(すなわち、fyは8に等しい)。この例では、f1/2+1は5に等しく、C−1も5に等しい。従って、この例では、コントローラ74は、f1/2+1がC−1以下であると決定し、点生成器70および接続生成器72に、第2の動作モード(すなわち、単一ウォーク)を実施させることができる。
[0255] 例えば、接続生成器72は、プリミティブ1と、2と、3とを含み得る、第1の対角線ストリップ内のプリミティブのドメイン座標を出力し得る。次いで、接続生成器72は、プリミティブ4と、5と、6と、7と、8とを含み得る、第2の対角線ストリップ内のプリミティブのドメイン座標を出力し得る。次いで、接続生成器72は、プリミティブ9と、10と、11と、12と、13と、14と、15とを含み得る、第3の対角線ストリップ内のプリミティブのドメイン座標を出力し得る。この例では、第1、第2、および第3の対角線ストリップの各々は、異なる数のプリミティブ(すなわち、それぞれ、3、5、および7個のプリミティブ)を含み得る。
[0256] さらに、この例では、fyはfxよりも小さいので、点生成器70および接続生成器72は、y方向の単一ウォークを実施できる。例えば、第1の対角線ストリップのプリミティブ1は、連続的部分138のy軸に沿って配置され、プリミティブ4(第2の対角線ストリップの第1のプリミティブ)は、連続的部分138のy軸に沿って配置され、プリミティブ9(第3の対角線ストリップの第1のプリミティブ)は、連続的部分138のy軸に沿って配置されている。
[0257] 以下の表2は、連続的部分138の40個のプリミティブに対する再利用キャッシュ78の挙動を示している。表2において、第1の列はプリミティブを示し、第2の列はドメイン座標を示し、第3の列は再利用バッファ78に格納されているパッチ座標を示している。例示を簡単にするために、パッチ座標は、その対応するドメイン座標と同じ値を与えられている。また、表2の第3の列では、太字で下線が引かれているパッチ座標は、ドメインシェーダ78が実行されてドメイン座標をパッチ座標に変換したときのインスタンスを示している。
[0258] 表2において、プリミティブ0に対して、コントローラ74は、ドメインシェーダ76のインスタンス化を3回実行して、プリミティブ0のドメイン座標をパッチ座標に変換し得る。プリミティブ1は、プリミティブ0と1つの頂点を共有する(すなわち、ドメイン座標3を持つ頂点)。この場合、プリミティブ1について、コントローラ74は、ドメインシェーダ76のインスタンス化を2回実行させる、すなわち、ドメイン座標2について1回、ドメイン座標8について1回実行させることができる。ドメイン座標3に対応するパッチ座標は、すでに再利用バッファ78に格納されているので、コントローラ74は、ドメイン座標3に対してはドメインシェーダのインスタンス化を行わせ得ない。
[0259] 表2に示されているように、プリミティブ3の後、再利用バッファ78は満杯である。この場合、接続生成器72がプリミティブ4のドメイン座標を出力した後、コントローラ74は、ドメインシェーダ76のインスタンス化を2回実行する必要があると決定できる、すなわち、プリミティブ4のドメイン座標1に対して1回、プリミティブ7のドメイン座標4に対して1回実行する必要がある。従って、再利用バッファ78は、パッチ座標3および9である、最も古くから格納されているパッチ座標を取り除いて、パッチ座標1および7に対する格納領域を解放できる。
[0260] 表2は、一例として、再利用バッファ78を効率的に利用して第2の動作モードについてドメインシェーダ76の実行を最小にする方法を示している。例えば、すべての共有されている頂点は、完全に利用される(例えば、余計なキャッシュミスはない)。例えば、表1の例と同様に、頂点のドメイン座標に対応するパッチ座標は、接続生成器72がその頂点を共有するプリミティブの大半に対するドメイン座標を出力するまで再利用バッファ内に格納されたままである。これにより、ドメインシェーダ76の必要な実行回数を最小限に抑えることができる。
[0261] 上記の例は、第1の動作モードと第2の動作モードとを示した。しかしながら、いくつかの例では、点生成器70および接続生成器72は、第3の動作モードを実施する必要があり得る。例えば、f1/2+1≦C−1は、f1+2≦2*(C−1)と書き換えられ得る。f1のサイズが大きすぎるか、またはCのサイズが小さすぎる場合、f1+2が2*(C−1)以下でないインスタンスがあり得る。これらの場合において、f1+1は、C−2以下でもあり得ない。そのような場合、点生成器70および接続生成器72は、四角形ドメインを四つ組に分割するか、または三角形ドメインを三つ組に分割し、共有される頂点の各々が再利用されるようにこれらの四つ組または三つ組の各々において単一ウォークを実施することは可能ではあり得ない。
[0262] そのような場合(すなわち、f1+2が2*(C−1)よりも大きいとき)、点生成器70および接続生成器72は第3の動作モードを実施し得る。第3の動作モードは、第1の動作モードおよび第2の動作モードの組合せとすることができる。例えば、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)が、f1+2が2*(C−1)よりも大きいと決定したときに、コントローラ74は、処理ユニットの例として、点生成器70と接続生成器72とに、四角形ドメインをより多くの四つ組に分割させ、また点生成器70と接続生成器72とに、三角形ドメインをより多くの三つ組に分割させることができる。次いで、接続生成器72は、複数の部分の第1のセット上で第1の動作モード(例えば、単一ウォーク)を実施し、複数の部分の第2のセット上で第2の動作モード(例えば、ジョイントウォーク)を実施し得る。
[0263] 図13は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図13は、四角形ドメインである、ドメイン140を示している。この例では、コントローラ74は、f1+2が2*(C−1)よりも大きいと決定しており、接続生成器72に、第3の動作モードを実施させることができる。例えば、接続生成器72は、四角形ドメイン140を4つより多い部分に分割し得る。図示されているように、接続生成器72は、四角形ドメイン140を6個の部分142A〜142Fに分割し得る。この例では、コントローラ74は、接続生成器72に、部分142A、142B、142E、および142Fの各々1つで単一ウォーク(すなわち、第1の動作モード)を実施させることができる。コントローラ74は、接続生成器72に、部分142Cおよび142Dにわたってジョイントウォーク(すなわち、第2の動作モード)を実施させることができる。言い換えれば、コントローラ74は、部分142Cと142Dとをジョイント部分に組合せ、接続生成器72に、ジョイント部分にまたがってジョイントウォークを実施させることができる。
[0264] 例えば、接続生成器72は、第1、第2、および第3の対角線ストリップ内のプリミティブのドメイン座標を出力することができ、対角線ストリップは、部分142A内にある。この例では、第1、第2、および第3の対角線ストリップは、互いに平行であり得る。組み合わされた部分142Cおよび142Dにまたがるジョイントウォークについては、接続生成器は、第4、第5、および第6の対角線ストリップ内のドメイン座標を出力することができ、対角線ストリップは、組み合わされた部分142Cおよび142Dの中にある。この例では、第5の対角線ストリップは、第4の対角線ストリップと接するものとしてよく、第6の対角線ストリップは、第4の対角線ストリップと平行であり得る。
[0265] いくつかの例では、テッセレーションユニット66は、偶数のテッセレーション係数を用いる一様テッセレーションを使用して図7、図8、図10、および図11に示されている例示的なドメインをテッセレートしている可能性がある。一様テッセレーションは、リングに沿って等しい数の点(すなわち、頂点)があることを意味する。また、図7に示されている例において、テッセレーション係数は18に等しいfxと6に等しいfyであり(両方とも、偶数のテッセレーション係数である)、図10に示されている例では、テッセレーション係数は10に等しいfxと8に等しいfyであった(両方とも、偶数のテッセレーション係数である)。偶数のテッセレーション係数では、結果として、ドメインのエッジの中間点で鏡像を生じる。
[0266] しかしながら、すべてのドメインが、一様テッセレーションを使用して、または偶数のテッセレーション係数を用いてテッセレートされるとは限らない。次に、ドメインが一様テッセレーションを使用してテッセレートされない少数の例と、テッセレーション係数が偶数、および奇数、並びに両方とも偶数である一例について説明する。
[0267] 奇数のテッセレーション係数を用いる一様テッセレーションでは、接続生成器72がドメインを分割する方法は、偶数のテッセレーション係数を用いる例とはわずかに異なり得る。しかしながら、接続生成器72がプリミティブのドメイン座標を出力する順序は、同じであってよい。
[0268] 図14Aおよび図14Bは、開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図14Aは、ドメイン144Aを示し、図14Bは、ドメイン144Bを示す。ドメイン144Aおよびドメイン144Bは、各々、四角形ドメインである。図示されているように、テッセレーションユニット66は、1つの偶数のテッセレーション係数および1つの奇数のテッセレーション係数でドメイン144Aとドメイン144Bとをテッセレートしているものとしてよい。偶数のテッセレーション係数は、ドメイン144Aおよびドメイン144Bのy軸に沿って8個のセグメントがあるので、fyであってよい。奇数のテッセレーション係数は、ドメイン144Aおよびドメイン144Bのx軸に沿って5個のセグメントがあるので、fxであってよい。例示することを目的として、図14Aおよび図14Bは、接続生成器72がそれぞれ連続的部分146Aおよび連続的部分146Bの中のプリミティブに対するドメイン座標を出力する方法を示している。
[0269] 図14Aに示されている例において、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1/2+1がC−2以下であると決定している可能性があり、点生成器70および接続生成器72に、第2の動作モード(すなわち、単一ウォーク)を実施させることができる。例えば、接続生成器72は、第1の対角線ストリップ148、続いて、第2の対角線ストリップ150、次いで、第3の対角線ストリップ152内のプリミティブに対するドメイン座標を出力し得る。図示されているように、第1の対角線ストリップ148は、第3の対角線ストリップ152と平行である、第2の対角線ストリップ150と平行である。従って、第1の対角線ストリップ148、第2の対角線ストリップ150、および第3の対角線ストリップ152は、各々、互いに平行である。また、第1の対角線ストリップ148、第2の対角線ストリップ150、および第3の対角線ストリップ152の中のプリミティブの数は、異なる。
[0270] 図14Bに示されている例において、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1+1がC−2以下であると決定している可能性があり、点生成器70および接続生成器72に、第1の動作モード(すなわち、ジョイントウォーク)を実施させることができる。例えば、接続生成器72は、第1の対角線ストリップ154、続いて、第2の対角線ストリップ156、次いで、第3の対角線ストリップ158内のプリミティブに対するドメイン座標を出力し得る。図示されているように、第2の対角線ストリップ156は、第1の対角線ストリップ154と接する。第3の対角線ストリップ158は、第1の対角線ストリップ154と平行であり、第2の対角線ストリップ156と平行でない。また、第1の対角線ストリップ154、および第2の対角線ストリップ156の中のプリミティブの数は同じであり、第3の対角線ストリップ158内のプリミティブの数とは異なる。
[0271] 図15Aおよび図15Bは、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図15Aは、ドメイン160Aを示し、図15Bは、ドメイン160Bを示す。ドメイン160Aおよびドメイン160Bは、各々、四角形ドメインである。図示されているように、テッセレーションユニット66は、奇数のテッセレーション係数(すなわち、fxおよびfyが両方とも奇数である)でドメイン160Aとドメイン160Bとをテッセレートしているものとしてよい。例示することを目的として、図15Aおよび図15Bは、接続生成器72がそれぞれ連続的部分162Aおよび連続的部分162Bの中のプリミティブに対するドメイン座標を出力する方法を示している。
[0272] 図15Aに示されている例において、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1/2+1がC−2以下であると決定している可能性があり、点生成器70および接続生成器72に、第2の動作モード(すなわち、単一ウォーク)を実施させることができる。例えば、接続生成器72は、第1の対角線ストリップ164、続いて、第2の対角線ストリップ166、次いで、第3の対角線ストリップ168内のプリミティブに対するドメイン座標を出力し得る。図15Bに示されている例において、処理ユニット(例えば、コントローラ74および/またはテッセレーションユニット66)は、f1+1がC−2以下であると決定している可能性があり、点生成器70および接続生成器72に、第1の動作モード(すなわち、ジョイントウォーク)を実施させることができる。例えば、接続生成器72は、第1の対角線ストリップ170、続いて、第2の対角線ストリップ172、次いで、第3の対角線ストリップ174内のプリミティブに対するドメイン座標を出力し得る。
[0273] 図15Aに示されている例において、接続生成器72が、連続的部分に対するドメイン座標を出力した後、ドメイン座標がまだ出力されていないプリミティブがいくつか残っている可能性がある。例えば、図15Aでは、ドメイン160Aの中心をなす2つの三角形は、連続的部分によって囲まれ得ない。これらの例では、接続生成器72は、残っているプリミティブ(例えば、ドメイン160Aの中心をなす三角形)のドメイン座標を出力し得る。
[0274] 図16Aおよび図16Bは、開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図16Aは、ドメイン176Aを示し、図16Bは、ドメイン176Bを示す。ドメイン176Aおよびドメイン176Bは、各々、三角形ドメインである。図示されているように、テッセレーションユニット66は、奇数のテッセレーション係数(すなわち、fは奇数である)でドメイン160Aとドメイン160Bとをテッセレートしているものとしてよい。例示することを目的として、図16Aおよび図16Bは、接続生成器72がそれぞれ連続的部分178Aおよび連続的部分178Bの中のプリミティブに対するドメイン座標を出力する方法を示している。
[0275] 図16Aに示されている例において、コントローラ74(処理ユニットの一例として)は、f1/2+1がC−2以下であると決定しており、点生成器70および接続生成器72に、第2の動作モード(すなわち、単一ウォーク)を実施させることができる。例えば、接続生成器72は、第1の対角線ストリップ180、続いて、第2の対角線ストリップ182、次いで、第3の対角線ストリップ184内のプリミティブに対するドメイン座標を出力し得る。図16Bに示されている例では、コントローラ74は、f1+1がC−2以下であると決定しており、接続生成器72に、第1の動作モード(すなわち、ジョイントウォーク)を実施させることができる。例えば、接続生成器72は、第1の対角線ストリップ186、続いて、第2の対角線ストリップ188、次いで、第3の対角線ストリップ190内のプリミティブに対するドメイン座標を出力し得る。
[0276] 図15Bと同様に、接続生成器72が、連続的部分に対するドメイン座標を出力した後、図16Aおよび図16Bにおいてドメイン座標がまだ出力されていないプリミティブが残っている可能性がある。例えば、図16Aおよび図16Bにおいて、ドメイン176Aおよび176Bの中心をなす三角形は、連続的部分によって囲まれ得ない。これらの例では、接続生成器72は、残っているプリミティブ(例えば、ドメイン176Aおよび176Bの中心をなす三角形)のドメイン座標を出力し得る。
[0277] 上記の例では、接続生成器72がドメインの連続的部分内のプリミティブのドメイン座標を出力する方法について説明しており、テッセレーションユニット66は、一様テッセレーションおよび偶数のテッセレーション係数、偶数および奇数のテッセレーション係数、並びに奇数のテッセレーション係数でドメインをテッセレートする。次に、接続生成器72が非一様なテッセレートされたドメインに対するプリミティブのドメイン座標を出力する方法について説明する。非一様なテッセレーションドメイン(non-uniform tessellated domain)では、テッセレーションユニット66は、非一様テッセレーション(non-uniform tessellation)を利用してドメインの一部分をテッセレートし、一様テッセレーションを利用してドメインの他の部分をテッセレートし得る。
[0278] 例えば、四角形ドメインについては、合計6個のテッセレーション係数があり得る。6個のテッセレーション係数のうちの4個は、それぞれ、四角形ドメインの4つの辺の各々に沿ってセグメントの数を定義し得る。これら4個のテッセレーション係数は、同じでなくてよく、その結果、非一様テッセレーションになる。残り2つのテッセレーション係数は、四角形ドメイン内のリングのx軸およびy軸に沿ってセグメントの数を定義することができ、その結果、四角形ドメイン内に一様テッセレーションが得られる。
[0279] 三角形ドメインについては、合計4個のテッセレーション係数があり得る。4個のテッセレーション係数のうちの3個は、それぞれ、三角形ドメインの3つの辺の各々に沿ってセグメントの数を定義し得る。これら3個のテッセレーション係数は、同じでなくてよく、その結果、非一様テッセレーションになる。残りのテッセレーション係数は、三角形ドメイン内の三角形リングに対するセグメントの数を定義することができ、その結果、三角形ドメイン内に一様テッセレーションが得られる。
[0280] 例えば、非一様テッセレーションは、外側リングの1つまたは複数の辺上の頂点の数が異なるときのインスタンスを指す。非一様テッセレーションの例において、一様な部分に対するテッセレーション係数がfxおよびfyである場合、テッセレーションユニット66のセットアップユニット68は、FxおよびFyの値を決定することができ、fxはFx−2.0に等しく、fyはFy−2.0に等しい。
[0281] テッセレーションユニット66が、非一様テッセレーションと一様テッセレーションの両方を利用してドメインをテッセレートする例では、コントローラ74は、点生成器70および接続生成器72に、ドメインの一様なテッセレートされた部分で、第1の動作モード、第2の動作モード、または第3の動作モードを実施させることができる。本開示で説明されている技術では、点生成器70および接続生成器72が、ドメインの非一様な部分内のプリミティブのドメイン座標を出力する方法は、一般的に重要でない。
[0282] 図17は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。例えば、図17は、三角形ドメインである、ドメイン192を示している。図17に示されている例において、テッセレーションユニット66は、非一様テッセレーションを使用して部分194をテッセレートしており、一様テッセレーションを使用して部分196A、196B、および196Cによって囲まれているドメイン192の領域をテッセレートしているものとしてよい。例えば、部分194では、ドメイン192の3つの境界の各々に沿って配置される頂点の数は異なり、従って、非一様テッセレーションである。ドメイン192の残り部分(すなわち、部分196A、196B、および196C)では、境界の各々に沿って配置される頂点の数は同じであり、従って、一様テッセレーションである。
[0283] 本開示で説明されている技術によれば、コントローラ74(処理ユニットの一例)は、点生成器70および接続生成器72に、f1およびCの値に基づき部分196A、196B、および196Cに、第1の動作モードと、第2の動作モードと、第3の動作モードとを実施させることができる。点生成器70および接続生成器72は、部分194内のプリミティブのドメイン座標を出力するために既存の技術またはまだ開発されていない技術を実施できる。図示されているように、部分194は、ドメイン192の外側リングであってよい。
[0284] 図18は、本開示で説明されている1つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。例えば、図18は、四角形ドメインである、ドメイン198を示している。図18に示されている例において、テッセレーションユニット66は、非一様テッセレーションを使用して部分200をテッセレートしており、一様テッセレーションを使用して部分202A〜202Dによって囲まれているドメイン198の領域をテッセレートしているものとしてよい。例えば、部分200では、ドメイン198の4つの境界のうちの少なくとも2つに沿って配置される頂点の数は異なり、従って、この場合のテッセレーションは、非一様テッセレーションと称され得る。ドメイン198の残り部分(すなわち、部分202A〜202D)では、境界の各々に沿って配置される頂点の数は同じであり、従って、一様テッセレーションである。
[0285] 本開示で説明されている技術によれば、処理ユニット(例えば、コントローラ74)は、点生成器70および接続生成器72に、f1およびCの値に基づき部分202A〜202Dに、第1の動作モードと、第2の動作モードと、第3の動作モードとを実施させることができる。点生成器70および接続生成器72は、部分200内のプリミティブのドメイン座標を出力するために既存の技術またはまだ開発されていない技術を実施できる。
[0286] 図19は、本開示で説明されている1つまたは複数の例による例示的なオペレーションを示す流れ図である。例示することのみを目的として、図6が参照されている。さらに、これらの技術の多くは、コントローラ74によって行われるものとして説明されている。しかしながら、そのような説明は、例示を目的として与えられたおり、制限するものと考えられるべきでない。他の例では、テッセレーションユニット66が、コントローラ74に関して説明されている機能を実施するように構成され得るか、または他の何らかのハードウェアもしくはソフトウェアユニットが、コントローラ74の技術を実施するように構成され得る。従って、図19に示されている技術は、処理ユニットに関して説明されており、その例は、コントローラ74および/またはテッセレーションユニット66を含む。
[0287] テッセレーションユニット66は、ドメインに対するテッセレーション係数を受信して処理できる(204)。例えば、セットアップユニット68は、四角形ドメインについてはfxテッセレーション係数とfyテッセレーション係数とを、または三角形ドメインについてはfテッセレーション係数を受信することができ、これらのテッセレーション係数は、ドメインの各リングに沿ったセグメントの数を示す。例えば、点生成器70は、これらのテッセレーション係数に基づきドメイン内の各リングを分割することができ、各セグメントの端点は、1つまたは複数のプリミティブに対する頂点であるものとしてよい。それに加えて、セットアップユニット68は、ドメインがテッセレートされる方法に基づきfxとfyとを整数に、fxとfyとを奇整数(odd integer)に、fxとfyとを偶整数(even integer)に、またはfxとfyとを2n(すなわち2進整数)に丸めることができる。
[0288] さらに、受信されたテッセレーション係数が、ドメインが一様テッセレーションと非一様テッセレーションとを使用してテッセレートされるべきであることを示している場合、テッセレーションユニット66は、ドメインの一様なテッセレートされた部分に図19に示されている例示的な技術を実施できる。ドメインの外側リングなどの、ドメインの非一様なテッセレートされた部分については、テッセレーションユニット66は、任意の技術を利用してドメインの非一様にされたテッセレートされた部分のドメイン座標を出力できる。例えば、非一様にされたテッセレートされた部分について、テッセレーションユニット66は、図3〜図5に示されている方法(すなわち、非連続的である、リング形式で)ドメイン座標を出力できる。
[0289] 処理ユニットは、f1+1がC−2以下であるかどうかを決定し得る(206)。処理ユニットが、f1+1がC−2以下であると決定した場合(206の「はい」)、処理ユニットは、テッセレーションユニット66に、点生成器70および接続生成器72を介して、第1の動作モードを実施させることができる。
[0290] 例えば、処理ユニットは、ドメインが四角形ドメインであるかどうかを決定し得る(208)。ドメインが、四角形ドメインである場合(208の「はい」)、処理ユニットは、fxがfy以下であるかどうかを決定し得る(212)。fxがfy以下である場合(212の「はい」)処理ユニットは、テッセレーションユニット66に、点生成器70および接続生成器72を介して、x方向のジョイントウォークを実施させることができる(214)。例えば、点生成器70および接続生成器72は、四角形ドメインを2つの部分に分割し、これらの部分のうちの一方は連続的部分であり、x方向の技術によるジョイントウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
[0291] fxがfy以下でない場合(212の「いいえ」)処理ユニットは、テッセレーションユニット66に、点生成器70および接続生成器72を介して、y方向のジョイントウォークを実施させることができる(216)。例えば、接続生成器72は、四角形ドメインを2つの部分に分割し、これらの部分のうちの一方は連続的部分であり、y方向の技術によるジョイントウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
[0292] ドメインが、四角形ドメインでない場合(208の「いいえ」)、処理ユニットは、テッセレーションユニットに、点生成器70および接続生成器72を介して、三角形ドメイン上でジョイントウォークを実施させることができる(210)。例えば、接続生成器72は、三角形ドメインを1/3の部分および2/3の部分に分割することができ、少なくとも2/3の部分は、連続的部分である。接続生成器72は、ジョイントウォーク技術に従って連続的な2/3の部分内のプリミティブのドメイン座標を出力できる。
[0293] 処理ユニットが、f1+1がC−2以下でないと決定した場合(206の「いいえ」)、処理ユニットは、f1/2+1がC−1以下であるかどうかを決定し得る(218)。処理ユニットが、f1/2+1がC−2以下であると決定した場合(218の「はい」)、処理ユニット74は、テッセレーションユニット66に、点生成器70および接続生成器72を介して、第2の動作モードを実施させることができる。
[0294] 処理ユニットは、ドメインが四角形ドメインであるかどうかを決定し得る(220)。ドメインが、四角形ドメインである場合(220の「はい」)、処理ユニットは、fxがfy以下であるかどうかを決定し得る(224)。fxがfy以下である場合(224の「はい」)処理ユニットは、テッセレーションユニット66に、点生成器70および接続生成器72を介して、x方向の単一ウォークを実施させることができる(226)。例えば、接続生成器72は、四角形ドメインを4つの部分に分割し、これら4つの部分のうちの1つは連続的部分であり、x方向の技術による単一ウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
[0295] fxがfy以下でない場合(224の「いいえ」)処理ユニットは、テッセレーションユニット66に、点生成器70および接続生成器72を介して、y方向の単一ウォークを実施させることができる(228)。例えば、接続生成器72は、四角形ドメインを4つの部分に分割し、これらの部分のうちの1つは連続的部分であり、y方向の技術による単一ウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
[0296] ドメインが、四角形ドメインでない場合(220の「いいえ」)、処理ユニットは、テッセレーションユニット66に、点生成器70および接続生成器72を介して、三角形ドメイン上で単一ウォークを実施させることができる(222)。例えば、接続生成器72は、三角形ドメインを3つの部分に分割することができ、少なくとも1つの部分は連続的部分である。接続生成器72は、単一ウォーク技術に従って連続的部分内のプリミティブのドメイン座標を出力できる。
[0297] 処理ユニットが、f1/2+1がC−1以下でないと決定した場合(218の「いいえ」)、処理ユニットは、点生成器70および接続生成器72に、第3の動作モードを実施させることができる。例えば、処理ユニットは、接続生成器72に、単一ウォーク技術とジョイントウォーク技術の両方を実施させることができる(230)。例えば、第3の動作モードでは、接続生成器72は、四角形ドメインを4つより多い部分に分割し、三角形ドメインを3つより多い部分に分割し得る。この例では、四角形ドメインについては、接続生成器72は、これらの部分のうちの4つに単一ウォーク技術を実施し、他の部分にジョイントウォーク技術を実施し得る。三角形ドメインについては、接続生成器72は、これらの部分のうちの3つに単一ウォーク技術を実施し、他の部分にジョイントウォーク技術を実施し得る。
[0298] 図19の例において、接続生成器72は、x方向の単一ウォークと、y方向の単一ウォークと、x方向のジョイントウォークと、y方向のジョイントウォークとを実施できる。いくつかの例では、x方向またはy方向のウォーキングは、2つのテッセレーション係数のうちの小さい方に基づき得る。例えば、処理ユニットは、第1のテッセレーション係数が第2のテッセレーション係数以下であると決定し得る。第1、第2、および第3の対角線ストリップ内のプリミティブのドメイン座標を出力するときに、接続生成器74は、第1のテッセレーション係数に対応し、外向きに広がるドメインの軸から始まるものとしてよい。
[0299] 例えば、fxがfyより小さい場合、接続生成器74は、第1、第2、および第3の対角線ストリップ内のプリミティブのドメイン座標を出力するときにドメインのx軸から始まり、外向きに広がる。fyがfxより小さい場合、接続生成器74は、第1、第2、および第3の対角線ストリップ内のプリミティブのドメイン座標を出力するときにドメインのy軸から始まり、外向きに広がる。
[0300] 一般に、図19に示されている例によれば、処理ユニットは、少なくとも再利用バッファ78内の記憶スロットの数に基づき、複数の異なる動作モードから1つの動作モードを選択することができ、異なる動作モードの各々は、接続生成器72がドメインの連続的部分内のプリミティブのドメイン座標を出力する方法を示している。複数の異なる動作モードの例として、第1、第2、および第3の動作モードが挙げられる。処理ユニットは、少なくとも再利用バッファの記憶能力に基づき動作モードを選択できる。次いで、処理ユニットは、接続生成器72に、選択された動作モードに基づきドメインの連続的部分内のプリミティブのドメイン座標を出力させることができる。
[0301] 例えば、少なくとも1つのテッセレーション係数に1を足した値が再利用バッファ78内の記憶スロットの数から2を引いた値以下である場合に、処理ユニットは、接続生成器72に、第1の動作モードに従ってドメイン座標を出力させることができる。少なくとも1つのテッセレーション係数に1を足した値が再利用バッファ78内の記憶スロットの数から2を引いた値以下でなく、少なくとも1つのテッセレーション係数を2で割って1を足した値が再利用バッファ78内の記憶スロットの数から1を引いた値以下である場合、処理ユニットは、接続生成器72に、第2の動作モードに従ってドメイン座標を出力させることができる。少なくとも1つのテッセレーション係数を2で割って1を足した値が再利用バッファ78内の記憶スロットの数から1を引いた値以下でない場合、処理ユニットは、接続生成器72に、第3の動作モードに従ってドメイン座標を出力させることができる。第3の動作モードは、第3の動作モードが第1の動作モードおよび第2の動作モードの組合せであるので、第1の動作モードだけ、および第2の動作モードだけとは異なると考えられ得る。
[0302] 次の擬似コードは、本開示による例示的な技術をさらに示す。
1.If 非一様テッセレーションならば
外側リングを処理する
endIf
If 四角形ドメインならば
一様テッセレーションに対してステップ2に進む
else//三角形ドメイン
一様テッセレーションに対してステップ3に進む
endIf
2.//四角形ドメイン
ドメインを四つ組に分割する
If fx+1≦C−2、(fx≦fy)ならば
偶数/奇数のテッセレーション係数に基づきx方向でジョイントウォークを処理する
elseIf fy+1≦C−2、(fy≦fx)ならば
偶数/奇数の係数に基づきy方向でジョイントウォークを処理する
elseIf fx/2+1≦C−1、(fx≦fy)ならば
x方向で単一ウォークを処理する
elseIf fy/2+1≦C−1、(fy≦fx)ならば
y方向で単一ウォークを処理する
else
それぞれの四つ組にパーティションを付加する
単一ウォークとジョイントウォークとを処理する
endIf
exit
3.//三角形ドメイン
ドメインを三つ組に分割する
If f+1≦C−2ならば
偶数/奇数の係数に基づきx方向でジョイントウォークを処理する
elseIf f/2+1≦C−1ならば
単一ウォークを処理する
else
それぞれの三つ組にパーティションを付加する
単一ウォークとジョイントウォークとを処理する
endIf
exit
[0303] 図20は、本開示で説明されている1つまたは複数の例による例示的なオペレーションを示す流れ図である。例示することのみを目的として、これらの技術は図6に関して説明されている。
[0304] 点生成器70および接続生成器72は、ドメインを複数の部分に分割し得る(231)。これらの部分のうちの少なくとも1つは、連続的部分である。第1の動作モードで動作している場合、点生成器70および接続生成器72は、四角形ドメインを2つの等しい部分に分割することができ、三角形ドメインを2つの部分に分割することができ、一方の部分は、ドメインの1/3であり、他方の部分は、ドメインの2/3である。第2の動作モードで動作している場合、点生成器70および接続生成器72は、四角形ドメインを4つの部分に分割し、三角形ドメインを3つの部分に分割し得る。第3の動作モードで動作している場合、点生成器70および接続生成器72は、四角形ドメインを4つより多い部分に分割し、三角形ドメインを3つより多い部分に分割し得る。
[0305] 接続生成器72は、連続的部分内の第1の対角線ストリップ内のプリミティブのドメイン座標を出力できる(232)。次いで、接続生成器72は、連続的部分内の第2の対角線ストリップ内のプリミティブのドメイン座標を出力できる(234)。次いで、接続生成器72は、連続的部分内の第3の対角線ストリップ内のプリミティブのドメイン座標を出力できる(236)。
[0306] 第2の対角線ストリップは、第1の対角線ストリップと平行であるか、または第1の対角線ストリップと接するかのうちの1つであってよい。第3の対角線ストリップは、第1の対角線ストリップと平行であり得る。第3の対角線ストリップは、第2の対角線ストリップが第1の対角線ストリップと平行である例において第2の対角線ストリップと平行となり得る。第3の対角線ストリップは、第2の対角線ストリップが第1の対角線ストリップと接する例において第2の対角線ストリップと平行とはなり得ない。
[0307] 第1の対角線ストリップ内のプリミティブの数は、第2の対角線ストリップが第1の対角線ストリップと接する例において第2の対角線ストリップ内のプリミティブの数と同じになり得る。次いで、第1の対角線ストリップ内のプリミティブの数は、第2の対角線ストリップが第1の対角線ストリップと平行である例において第2の対角線ストリップ内のプリミティブの数と異なり得る。いずれの場合も、第3の対角線ストリップ内のプリミティブの数は、第1および第2の対角線ストリップ内のプリミティブの数と異なり得る。
[0308] 図21〜図27は、本開示で説明されている1つまたは複数の例示的な技術を実施すること、および1つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。例えば、本開示で説明されている技術の結果として、グラフィックスパイプラインは、共有される頂点のドメイン座標に対応するパッチ座標が再利用バッファ78内に残ることを効果的に保証することによって他の何らかの技術よりも高速にテッセレーションを完了させることができる。本開示で説明されている技術は、他の何らかの技術と比較して余計なミス率を著しく低くする(すなわち、レートキャッシュミスを低減する)ことができる。キャッシュミス率は、コントローラ74がドメイン座標系からパッチ座標にすでに変換されている頂点についてドメインシェーダ76を実行する必要がある率を指すものとしてよい。
[0309] 次の例では、再利用バッファ78内の記憶スロットの数は32スロットである。テッセレーション係数は、1.0から64.0の範囲である。一般に、図3と図4とに関して上で説明されている技術の結果、一様テッセレーションに対するミス率はほとんど100%となる。図5に関して上で説明されている技術の結果、ミス率は45%となる。図6〜図20に関して上で説明されている技術の結果、ミス率は5%となる。ミス率を最小にすることは、結果としてドメインシェーダ76のインスタンス化の回数を減らすので、有益であり得る。ドメインシェーダ76の実行は、時間と大量の処理を必要とし、従って、ドメインシェーダ76の実行を最小限度に抑えることは、有益である場合がある。
[0310] 図21は、四角形ドメイン上の一様テッセレーションについて本開示で説明されている1つまたは複数の技術による完全には再利用されない頂点のミス率を示している。x軸およびy軸は、テッセレーション係数(例えば、fxおよびfy)に対するものであり、z軸は、ミス率を示す。この例では、ミス率は、テッセレーション係数が小さく、連続的部分のすべてのパッチ座標が再利用バッファ78に収まるときにゼロである。テッセレーション係数のいくつかの小さい値について、ミス率は、約0.16(すなわち、約16%)に上昇し得る。しかし、次いで、ミス率は、実質的に低下し、2%から5%のミス率に留まる。ミス率が16%であっても、本開示で説明されている技術は、それでも、図22および図23に示されているような、他の何らかの技術よりもかなり低いミス率を有し得る。
[0311] 図22は、四角形ドメイン上の一様テッセレーションについて図4に関して説明されている1つまたは複数の技術による完全には再利用されない頂点のミス率を示している。x軸およびy軸は、テッセレーション係数(例えば、fxおよびfy)に対するものであり、z軸は、ミス率を示す。この例では、ミス率は、テッセレーション係数が小さく、連続的部分のすべてのパッチ座標が再利用バッファ78に収まるときにゼロである。しかしながら、大きいテッセレーション係数(例えば、fxおよびfyが64に等しい)については、図22は、ミス率が約1(すなわち、約100%)であることを示している。
[0312] 図23は、四角形ドメイン上の一様テッセレーションについて図5に関して説明されている1つまたは複数の技術による完全には再利用されない頂点のミスを示している。x軸およびy軸は、テッセレーション係数(例えば、fxおよびfy)に対するものであり、z軸は、ミス率を示す。この例では、ミス率は、テッセレーション係数が小さく、連続的部分のすべてのパッチ座標が再利用バッファ78に収まるときにゼロである。しかしながら、大きいテッセレーション係数(例えば、fxおよびfyが64に等しい)については、図23は、ミス率が約0.45(すなわち、約45%)であることを示している。さらに、テッセレーション係数の間の差が大きい場合(例えば、fx>>fy、またはその逆)、図23は、ミス率を、約0.55(すなわち、約55%)にまで上昇するものとして示している。
[0313] 図24〜図27は、四角形ドメインについて、図3、図4、および図6〜図20に関して上で説明されている技術の間のミス率の比較を示している。図24では、両方のテッセレーション係数が互いに等しく、また(1.0〜64.0)の範囲内にある。図25では、一方のテッセレーション係数が5.0に等しく、他方のテッセレーション係数が(1.0〜64.0)の範囲内にある。図26では、一方のテッセレーション係数が25.0に等しく、他方のテッセレーション係数が(1.0〜64.0)の範囲内にある。図27では、一方のテッセレーション係数が50.0に等しく、他方のテッセレーション係数が(1.0〜64.0)の範囲内にある。
[0314] 図24の直線238、図25の直線244、図26の直線250、および図27の直線256は、接続生成器72が本開示で説明されている技術によりプリミティブのドメイン座標を出力するときのミス率を示している。これらの直線で示されているように、ミス率は、非常に低く、0%に近い。図24の直線242、図25の直線246、図26の直線252、および図27の直線258は、接続生成器が、接続生成器72とは異なり、図5に関して上で説明されている技術によりプリミティブのドメイン座標を出力するときのミス率を示している。これらの直線によって示されているように、ミス率は、接続生成器72が本開示で説明されている1つまたは複数の例示的な技術を実施するときのミス率よりもかなり大きい。図24の直線240、図25の直線248、図26の直線254、および図27の直線260は、接続生成器が、接続生成器72とは異なり、図4に関して上で説明されている技術によりプリミティブのドメイン座標を出力するときのミス率を示している。これらの直線によって示されているように、ミス率は、接続生成器72が本開示で説明されている1つまたは複数の例示的な技術を実施するときのミス率よりもかなり大きく、また接続生成器が、接続生成器72とは異なり、図5に示されている技術を実施するときよりも大きい。
[0315] 図28は、図1および2に示されているようなGPUを備えることのデバイスを示すブロック図である。例えば、図28は、デバイス10をさらに示している。デバイス28の例として、限定はしないが、ワイヤレスデバイス、いわゆるスマートフォンなどの携帯電話、携帯情報端末(PDA)、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、テレビジョンセットトップボックス、タブレットコンピューティングデバイス、電子書籍リーダー、および同様のものが挙げられる。デバイス10は、グラフィックスプロセッシングユニット(GPU)12と、システムメモリ14と、プロセッサ16と、ディスプレイ262と、ユーザインターフェース264と、トランシーバモジュール266とを備え得る。デバイス10は、わかりやすくするために図28に図示されていない追加のモジュールまたはユニットを備え得る。例えば、デバイス10は、いずれも図28には示されていないスピーカとマイクロフォンとを備え、デバイス10が携帯ワイヤレス電話である例では、電話通信を行うか、または他の何らかの方法で音声入力を処理し、もしくは音を発することができる。さらに、デバイス10内の図示されている様々なモジュールおよびユニットは、デバイス10のすべての例において必要とは限らない。例えば、ユーザインターフェース264およびディスプレイ262は、デバイス10がデスクトップコンピュータである例では、デバイス10の外部にあってよい。別の例として、ディスプレイ262は、ディスプレイ262がモバイルデバイスのタッチセンサーまたは人感センサーディスプレイである例においてユーザインターフェース264の一部であってよい。
[0316] 図28のGPU12、システムメモリ14、およびプロセッサ16は、図1および図2のGPU12、システムメモリ14、およびプロセッサ16に類似していてもよい。ユーザインターフェース264の例として、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスが挙げられる。ユーザインターフェース264は、タッチスクリーンでもよく、またディスプレイ262の一部として組み込まれてもよい。トランシーバモジュール266は、ワイヤレスまたは有線方式の通信をデバイス10と別のデバイスまたはネットワークとの間で行わせるための回路を備え得る。トランシーバモジュール266は、変調器と、復調器と、増幅器と、有線またはワイヤレス方式の通信を行うための他のそのような回路とを備えることができる。ディスプレイ262は、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、タッチセンサーディスプレイ、人感センサーディスプレイ、または別のタイプの表示デバイスを備え得る。
[0317] 1つまたは複数の例において、説明されている機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組合せで実施され得る。ソフトウェアで実施された場合、これらの機能は、コンピュータ可読媒体上に1つもしくは複数の命令またはコードとして格納され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示において説明されている技術の実施のため命令、コード、および/またはデータ構造体を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る利用可能な任意の媒体とすることができる。例として、限定はしないが、このようなコンピュータ可読媒体は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、EEPROM、CD−ROM、もしくは他の光ディスク記憶装置、磁気ディスク記憶装置、もしくは他の磁気記憶デバイス、または命令またはデータ構造体の形態で所望のプログラムコードを格納するために使用され得る、コンピュータによってアクセスされ得る任意の他の媒体を備えることができる。本明細書で使用されるような、ディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)と、レーザディスク(登録商標)(disc)と、光ディスク(disc)と、デジタル多用途ディスク(disc)(DVD)と、フロッピー(登録商標)ディスク(disk)と、ブルーレイ(登録商標)ディスク(disc)とを含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0318] コードは、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路などの1つまたは複数のプロセッサによって実行され得る。従って、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実施に好適な任意の他の構造のいずれかを指し得る。また、これらの技術は、1つまたは複数の回路または論理素子で完全に実施されることもあり得る。
[0319] 本開示の技術は、ワイヤレスハンドセット、集積回路(IC)、または一組のIC(すなわち、チップセット)を含む、様々なデバイスまたは装置で実施され得る。様々なコンポーネント、モジュール、またはユニットは、開示されている技術を行うように構成されたデバイスの機能的態様を強調するように本開示において説明されているが、異なるハードウェアユニットによる実現を必ずしも必要としない。むしろ、上で説明されているように、様々なユニットが、ハードウェアユニット内に組み合わされるか、または好適なソフトウェアおよび/またはファームウェアと併せて、上述のような1つまたは複数のプロセッサを含む、相互運用性を有するハードウェアユニットの集合体によって構成され得る。
[0320] こうして様々な例が説明された。これらおよび他の例は、次の請求項の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
テッセレーションのための方法であって、
テッセレーションユニットにより、ドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも1つは、連続的部分である、
前記テッセレーションユニットにより、前記連続的部分内にある第1の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記テッセレーションユニットにより、前記連続的部分内にある第2の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第2の対角線ストリップは、前記第1の対角線ストリップと平行であるか、または前記第1の対角線ストリップと接するかのうちの1つである、
前記テッセレーションユニットにより、前記連続的部分内にある第3の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第3の対角線ストリップは、少なくとも前記第1の対角線ストリップと平行である、また、ここにおいて、前記第3の対角線ストリップ内のプリミティブの数は、前記第1の対角線ストリップおよび前記第2の対角線ストリップ内のプリミティブの数と異なる、を備える方法。
[C2]
少なくとも一部は再利用バッファ内の記憶スロットの数に基づき、複数の異なる動作モードから1つの動作モードを選択することをさらに備え、
ここにおいて、前記異なる動作モードの各々は、前記ドメインの前記連続的部分内の前記ドメイン座標を出力する異なる方法を示す、
ここにおいて、前記ドメインを分割することは、前記選択された動作モードに基づき前記ドメインを分割することを備える、C1に記載の方法。
[C3]
少なくとも1つのテッセレーション係数に1を足した値が再利用バッファ内の記憶スロットの数から2を引いた値以下であるかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも1つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記ドメインを分割することは、前記少なくとも1つのテッセレーション係数に1を足した値が前記再利用バッファ内の記憶スロットの前記数から2を引いた値以下であるときに前記ドメインを2つの部分に分割することを備える、
ここにおいて、前記第2の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することは、前記少なくとも1つのテッセレーション係数に1を足した値が前記再利用バッファ内の記憶スロットの前記数から2を引いた値以下であるときに前記第1の対角線ストリップと接する前記第2の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することを備える、C1に記載の方法。
[C4]
第4の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
第5の対角線ストリップ内のプリミティブのドメイン座標を出力することとをさらに備え、
ここにおいて、前記第5の対角線ストリップは、前記第4の対角線ストリップの鏡像である、C3に記載の方法。
[C5]
前記ドメインが前記四角形ドメインであるときに、前記ドメインを2つの部分に分割することは、前記ドメインを半分にして2つの部分に分割することを備え
ここにおいて、前記ドメインが三角形ドメインであるときに、前記ドメインを2つの部分に分割することは、前記ドメインを1/3の部分と2/3の部分とに分割することを備える、
ここにおいて、前記2/3の部分は、前記連続的部分を備える、C3に記載の方法。
[C6]
少なくとも1つのテッセレーション係数を2で割って1を足した値が再利用バッファ内の記憶スロットの数から1を引いた値以下であるかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも1つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記ドメインを分割することは、前記ドメインが前記四角形ドメインであるとき、および前記少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの前記数から1を引いた値以下であるときに前記ドメインを4つの部分に分割することを備える、
ここにおいて、前記ドメインを分割することは、前記ドメインが三角形ドメインであるとき、および前記少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの前記数から1を引いた値以下であるときに前記ドメインを3つの部分に分割することを備える、
ここにおいて、前記第2の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することは、前記少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの前記数から1を引いた値以下であるときに前記第1の対角線ストリップと平行である前記第2の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することを備える、C1に記載の方法。
[C7]
第1のテッセレーション係数が、第2のテッセレーション係数以下であると決定することをさらに備え、
ここにおいて、前記第1の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力すること、前記第2の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力すること、および前記第3の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力することは、前記第1のテッセレーション係数に対応する前記ドメインの軸から始まって、外向きに広がる形で出力することを備える、C1に記載の方法。
[C8]
少なくとも1つのテッセレーション係数を2で割って1を足した値が再利用バッファ内の記憶スロットの数から1を引いた値より大きいかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも1つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記少なくとも1つのテッセレーション係数を2で割って1を足した値が再利用バッファ内の記憶スロットの前記数から1を引いた値より大きいときに、
前記第1の対角線ストリップ内のプリミティブのドメイン座標を出力することは、第1の連続的部分内にある前記第1の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記第2の対角線ストリップ内のプリミティブのドメイン座標を出力することは、前記第1の対角線ストリップと平行であり、前記第1の連続的部分内にある前記第2の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記第3の対角線ストリップ内のプリミティブのドメイン座標を出力することは、前記第1の連続的部分内にある前記第3の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記方法は、
第2の連続的部分内にある第4の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記第2の連続的部分内にある第5の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第5の対角線ストリップは、前記第4の対角線ストリップと接する、
前記第2の連続的部分内にある第6の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第6の対角線ストリップは、前記第1の対角線ストリップと平行である、を備えるC1に記載の方法。
[C9]
前記ドメインの第1の部分が非一様テッセレートされると決定することと、
前記ドメインの第2の部分が一様テッセレートされると決定することとをさらに備え、
ここにおいて、前記ドメインを前記複数の部分に分割することは、前記ドメインの前記第2の部分を前記複数の部分に分割することを備えるC1に記載の方法。
[C10]
前記ドメインの前記第1の部分は、前記ドメインの外側リングを備え、前記方法は、
前記ドメインの前記外側リング内のプリミティブのドメイン座標を出力することをさらに備えるC9に記載の方法。
[C11]
前記第1、第2、および第3の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標を受信することと、
再利用バッファが、前記第1、第2、および第3の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応するパッチ座標を格納するかどうかを決定することと、
前記再利用バッファが、前記第1、第2、および第3の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかの決定に基づきシェーダのインスタンス化を1回または複数回実行することとをさらに備えるC1に記載の方法。
[C12]
デバイスであって、
テッセレーションユニットを備えるグラフィックスプロセッシングユニット(GPU)と、前記テッセレーションユニットは
ドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも1つは、連続的部分である、
前記連続的部分内にある第1の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記連続的部分内にある第2の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第2の対角線ストリップは、前記第1の対角線ストリップと平行であるか、または前記第1の対角線ストリップと接するかのうちの1つである、
前記連続的部分内にある第3の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第3の対角線ストリップは、少なくとも前記第1の対角線ストリップと平行である、また、ここにおいて、前記第3の対角線ストリップ内のプリミティブの数は、前記第1の対角線ストリップおよび前記第2の対角線ストリップ内のプリミティブの数と異なる、を行うように構成される、
前記第1、第2、および第3の対角線ストリップ内のプリミティブの前記出力されたドメイン座標のうちの1つまたは複数に対応するパッチ座標を格納するように構成された再利用バッファとを備えるデバイス。
[C13]
少なくとも一部は前記再利用バッファ内の記憶スロットの数に基づき、複数の異なる動作モードから1つの動作モードを選択するように構成された処理ユニットをさらに備え、
ここにおいて、前記異なる動作モードの各々は、前記ドメインの前記連続的部分内の前記ドメイン座標を出力する異なる方法を示す、
ここにおいて、前記テッセレーションユニットは、前記選択された動作モードに基づき前記ドメインを分割するように構成される、C12に記載のデバイス。
[C14]
少なくとも1つのテッセレーション係数に1を足した値が前記再利用バッファ内の記憶スロットの数から2を引いた値以下であるかどうかを決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも1つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記テッセレーションユニットは、前記少なくとも1つのテッセレーション係数に1を足した値が前記再利用バッファ内の記憶スロットの前記数から2を引いた値以下であるときに前記ドメインを2つの部分に分割するように構成される、
ここにおいて、前記テッセレーションユニットは、前記少なくとも1つのテッセレーション係数に1を足した値が前記再利用バッファ内の記憶スロットの前記数から2を引いた値以下であるときに前記第1の対角線ストリップと接する前記第2の対角線ストリップ内のプリミティブの前記ドメイン座標を出力するように構成される、C12に記載のデバイス。
[C15]
前記テッセレーションユニットは、
第4の対角線ストリップ内のプリミティブのドメイン座標を出力し、
第5の対角線ストリップ内のプリミティブのドメイン座標を出力するように構成され、
ここにおいて、前記第5の対角線ストリップは、前記第4の対角線ストリップの鏡像である、C14に記載のデバイス。
[C16]
前記ドメインが四角形ドメインであるときに、前記テッセレーションユニットは、前記ドメインを半分にして2つの部分に分割するように構成される、
ここにおいて、前記ドメインが三角形ドメインであるときに、前記テッセレーションユニットは、前記ドメインを1/3の部分と2/3の部分とに分割するように構成される、
ここにおいて、前記2/3の部分は、前記連続的部分を備える、C14に記載のデバイス。
[C17]
少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの数から1を引いた値以下であるかどうかを決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも1つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記テッセレーションユニットは、前記ドメインが前記四角形ドメインであるとき、および前記少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの前記数から1を引いた値以下であるときに前記ドメインを4つの部分に分割するように構成される、
ここにおいて、前記テッセレーションユニットは、前記ドメインが三角形ドメインであるとき、および前記少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの前記数から1を引いた値以下であるときに前記ドメインを3つの部分に分割するように構成される、
ここにおいて、前記テッセレーションユニットは、前記少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの前記数から1を引いた値以下であるときに前記第1の対角線ストリップと平行である前記第2の対角線ストリップ内のプリミティブの前記ドメイン座標を出力するように構成される、C12に記載のデバイス。
[C18]
第1のテッセレーション係数が第2のテッセレーション係数以下であると決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記テッセレーションユニットは、前記第1の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力し、前記第2の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力し、前記第3の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力することを、前記第1のテッセレーション係数に対応する前記ドメインの軸から始めて、外向きに広がる形で、行うように構成されるC12に記載のデバイス。
[C19]
少なくとも1つのテッセレーション係数を2で割って1を足した値が前記再利用バッファ内の記憶スロットの数から1を引いた値より大きいかどうかを決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも1つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記少なくとも1つのテッセレーション係数を2で割って1を足した値が再利用バッファ内の記憶スロットの前記数から1を引いた値より大きいときに、前記テッセレーションユニットは、
第1の連続的部分内にある前記第1の対角線ストリップ内のプリミティブのドメイン座標を出力し、
前記第1の対角線ストリップと平行であり、前記第1の連続的部分内にある前記第2の対角線ストリップ内のプリミティブのドメイン座標を出力し、
前記第1の連続的部分内にある前記第3の対角線ストリップ内のプリミティブのドメイン座標を出力し、
第2の連続的部分内にある第4の対角線ストリップ内のプリミティブのドメイン座標を出力し、
前記第2の連続的部分内にある第5の対角線ストリップ内のプリミティブのドメイン座標を出力し、ここにおいて、前記第5の対角線ストリップは、前記第4の対角線ストリップと接する、
前記第2の連続的部分内にある第6の対角線ストリップ内のプリミティブのドメイン座標を出力する、ここにおいて、前記第6の対角線ストリップは、前記第1の対角線ストリップと平行である、ように構成されるC12に記載のデバイス。
[C20]
前記ドメインの第1の部分が非一様テッセレートされていると決定し、前記ドメインの第2の部分が一様テッセレートされていると決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記テッセレーションユニットは、前記ドメインの前記第2の部分を前記複数の部分に分割するように構成されるC12に記載のデバイス。
[C21]
前記ドメインの前記第1の部分は、前記ドメインの外側リングを備え、前記テッセレーションユニットは、前記ドメインの前記外側リング内のプリミティブのドメイン座標を出力するように構成されるC20に記載のデバイス。
[C22]
前記第1、第2、および第3の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標を受信し、
前記再利用バッファが、前記第1、第2、および第3の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかを決定し、
前記再利用バッファが、前記第1、第2、および第3の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかの決定に基づきシェーダのインスタンス化を1回または複数回実行するように構成されたコントローラをさらに備えるC12に記載のデバイス。
[C23]
前記デバイスは、モバイルワイヤレスデバイス、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、およびテレビジョンセットトップボックスのうちの1つを備えるC12に記載のデバイス。
[C24]
デバイスであって、
グラフィックスプロセッシングユニット(GPU)を備え、前記GPUは
ドメインを複数の部分に分割するための手段と、ここにおいて、前記部分のうちの少なくとも1つは、連続的部分である、
前記連続的部分内にある第1の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、
前記連続的部分内にある第2の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第2の対角線ストリップは、前記第1の対角線ストリップと平行であるか、または前記第1の対角線ストリップと接するかのうちの1つである、
前記連続的部分内にある第3の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第3の対角線ストリップは、少なくとも前記第1の対角線ストリップと平行である、また、ここにおいて、前記第3の対角線ストリップ内のプリミティブの数は、前記第1の対角線ストリップおよび前記第2の対角線ストリップ内のプリミティブの数と異なる、を備えるデバイス。
[C25]
コンピュータ可読記憶媒体であって、実行されたときに、1つまたは複数のプロセッサに、
ドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも1つは、連続的部分である、
前記連続的部分内にある第1の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記連続的部分内にある第2の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第2の対角線ストリップは、前記第1の対角線ストリップと平行であるか、または前記第1の対角線ストリップと接するかのうちの1つである、
前記連続的部分内にある第3の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第3の対角線ストリップは、少なくとも前記第1の対角線ストリップと平行である、また、ここにおいて、前記第3の対角線ストリップ内のプリミティブの数は、前記第1の対角線ストリップおよび前記第2の対角線ストリップ内のプリミティブの数と異なる、を行わせる格納された命令を備えるコンピュータ可読記憶媒体。