(57)【特許請求の範囲】
【請求項１】
テッセレーションのための方法であって、
テッセレーションユニットにより、テンプレート形状としてのドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも１つは、連続的部分である、
前記テッセレーションユニットにより、前記連続的部分内にある第１の対角線ストリップ内の複数のプリミティブのドメイン座標を出力することと、ここにおいて、前記第１の対角線ストリップ内の少なくとも２つのプリミティブは、いかなる頂点をも共有しない、
前記テッセレーションユニットにより、前記連続的部分内にある第２の対角線ストリップ内の複数のプリミティブのドメイン座標を出力することと、ここにおいて、前記第２の対角線ストリップは、前記第１の対角線ストリップと平行であるか、または前記第１の対角線ストリップと接するかのうちの１つである、ここにおいて、前記第２の対角線ストリップ内の少なくとも２つのプリミティブは、いかなる頂点をも共有しない、ここにおいて、前記第２の対角線ストリップが前記第１の対角線ストリップと平行であるとき、前記第１の対角線ストリップおよび前記第２の対角線ストリップは、前記ドメインの同じ軸から始まり、同じ方向に外向きに広がる、ここにおいて、前記第２の対角線ストリップが前記第１の対角線ストリップと接するとき、前記第２の対角線ストリップは、前記第１の対角線ストリップの１つのプリミティブと２つの頂点を共有する１つのプリミティブを含み、前記第２の対角線ストリップ内の残っているプリミティブのどれもが前記第１の対角線ストリップ内の残っているどのプリミティブとも２つの頂点を共有せず、前記第２の対角線ストリップ内の少なくとも１つのプリミティブが前記第１の対角線ストリップ内の前記プリミティブのどれとも頂点を共有しない、
前記テッセレーションユニットにより、前記連続的部分内にある第３の対角線ストリップ内の複数のプリミティブのドメイン座標を出力することと、ここにおいて、前記第３の対角線ストリップ内の少なくとも２つのプリミティブは、いかなる頂点をも共有しない、ここにおいて、前記第３の対角線ストリップは、少なくとも前記第１の対角線ストリップと平行であり、前記第１の対角線ストリップと前記同じ軸から始まり、前記第１の対角線ストリップと前記同じ方向に外向きに広がる、ここにおいて、前記第３の対角線ストリップ内のプリミティブの数は、前記第１の対角線ストリップおよび前記第２の対角線ストリップ内のプリミティブの数と異なる、を備える方法。
【請求項２】
少なくとも一部は再利用バッファ内の記憶スロットの数に基づき、複数の異なる動作モードから１つの動作モードを選択することをさらに備え、
ここにおいて、前記異なる動作モードの各々は、前記ドメインの前記連続的部分内の前記ドメイン座標を出力する異なる方法を示す、
ここにおいて、前記ドメインを分割することは、前記選択された動作モードに基づき前記ドメインを分割することを備える、請求項１に記載の方法。
【請求項３】
少なくとも１つのテッセレーション係数に１を足した値が再利用バッファ内の記憶スロットの数から２を引いた値以下であるかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記ドメインを分割することは、前記少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの前記数から２を引いた値以下であるときに前記ドメインを２つの部分に分割することを備える、
ここにおいて、前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することは、前記少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの前記数から２を引いた値以下であるときに前記第１の対角線ストリップと接する前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することを備える、請求項１に記載の方法。
【請求項４】
第４の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
第５の対角線ストリップ内のプリミティブのドメイン座標を出力することとをさらに備え、
ここにおいて、前記第５の対角線ストリップは、前記第４の対角線ストリップの鏡像である、請求項３に記載の方法。
【請求項５】
前記ドメインが前記四角形ドメインであるときに、前記ドメインを２つの部分に分割することは、前記ドメインを半分にして２つの部分に分割することを備える、
ここにおいて、前記ドメインが三角形ドメインであるときに、前記ドメインを２つの部分に分割することは、前記ドメインを１／３の部分と２／３の部分とに分割することを備える、
ここにおいて、前記２／３の部分は、前記連続的部分を備える、請求項３に記載の方法。
【請求項６】
少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ内の記憶スロットの数から１を引いた値以下であるかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記ドメインを分割することは、前記ドメインが前記四角形ドメインであるとき、および前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記ドメインを４つの部分に分割することを備える、
ここにおいて、前記ドメインを分割することは、前記ドメインが三角形ドメインであるとき、および前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記ドメインを３つの部分に分割することを備える、
ここにおいて、前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することは、前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記第１の対角線ストリップと平行である前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することを備える、請求項１に記載の方法。
【請求項７】
第１のテッセレーション係数が、第２のテッセレーション係数以下であると決定することをさらに備え、
ここにおいて、前記第１の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力すること、前記第２の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力すること、および前記第３の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力することは、前記第１のテッセレーション係数に対応する前記ドメインの軸から始まって、外向きに広がる形で出力することを備える、請求項１に記載の方法。
【請求項８】
少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ内の記憶スロットの数から１を引いた値より大きいかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値より大きいときに、
前記第１の対角線ストリップ内のプリミティブのドメイン座標を出力することは、第１の連続的部分内にある前記第１の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記第２の対角線ストリップ内のプリミティブのドメイン座標を出力することは、前記第１の対角線ストリップと平行であり、前記第１の連続的部分内にある前記第２の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記第３の対角線ストリップ内のプリミティブのドメイン座標を出力することは、前記第１の連続的部分内にある前記第３の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記方法は、
第２の連続的部分内にある第４の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記第２の連続的部分内にある第５の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第５の対角線ストリップは、前記第４の対角線ストリップと接する、
前記第２の連続的部分内にある第６の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第６の対角線ストリップは、前記第１の対角線ストリップと平行である、を備える請求項１に記載の方法。
【請求項９】
前記ドメインの第１の部分が非一様テッセレートされると決定することと、
前記ドメインの第２の部分が一様テッセレートされると決定することとをさらに備え、
ここにおいて、前記ドメインを前記複数の部分に分割することは、前記ドメインの前記第２の部分を前記複数の部分に分割することを備える請求項１に記載の方法。
【請求項１０】
前記ドメインの前記第１の部分は、前記ドメインの外側リングを備え、前記方法は、
前記ドメインの前記外側リング内のプリミティブのドメイン座標を出力することをさらに備える請求項９に記載の方法。
【請求項１１】
前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標を受信することと、
再利用バッファが、前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応するパッチ座標を格納するかどうかを決定することと、
前記再利用バッファが、前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかの決定に基づきシェーダのインスタンス化を１回または複数回実行することとをさらに備える請求項１に記載の方法。
【請求項１２】
前記第２の対角線ストリップ内の前記複数のプリミティブのドメイン座標を出力することは、前記第１の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力した後に、および他のどのドメイン座標を出力するよりも前に、前記第２の対角線ストリップ内の前記複数のプリミティブのドメイン座標を出力することを備え、
前記第３の対角線ストリップ内の前記複数のプリミティブのドメイン座標を出力することは、前記第２の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力した後に、および他のどのドメイン座標を出力するよりも前に、前記第３の対角線ストリップ内の前記複数のプリミティブのドメイン座標を出力することを備える請求項１に記載の方法。
【請求項１３】
グラフィックスプロセッシングユニット（ＧＰＵ）を備え、前記ＧＰＵは
テンプレート形状としてのドメインを複数の部分に分割するための手段と、ここにおいて、前記部分のうちの少なくとも１つは、連続的部分である、
前記連続的部分内にある第１の対角線ストリップ内の複数のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第１の対角線ストリップ内の少なくとも２つのプリミティブは、いかなる頂点をも共有しない、
前記連続的部分内にある第２の対角線ストリップ内の複数のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第２の対角線ストリップは、前記第１の対角線ストリップと平行であるか、または前記第１の対角線ストリップと接するかのうちの１つである、ここにおいて、前記第２の対角線ストリップ内の少なくとも２つのプリミティブは、いかなる頂点をも共有しない、ここにおいて、前記第２の対角線ストリップが前記第１の対角線ストリップと平行であるとき、前記第１の対角線ストリップおよび前記第２の対角線ストリップは、前記ドメインの同じ軸から始まり、同じ方向に外向きに広がる、ここにおいて、前記第２の対角線ストリップが前記第１の対角線ストリップと接するとき、前記第２の対角線ストリップは、前記第１の対角線ストリップの１つのプリミティブと２つの頂点を共有する１つのプリミティブを含み、前記第２の対角線ストリップ内の残っているプリミティブのどれもが前記第１の対角線ストリップ内の残っているどのプリミティブとも２つの頂点を共有せず、前記第２の対角線ストリップ内の少なくとも１つのプリミティブが前記第１の対角線ストリップ内の前記プリミティブのどれとも頂点を共有しない、
前記連続的部分内にある第３の対角線ストリップ内の複数のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第３の対角線ストリップ内の少なくとも２つのプリミティブは、いかなる頂点をも共有しない、ここにおいて、前記第３の対角線ストリップは、少なくとも前記第１の対角線ストリップと平行であり、前記第１の対角線ストリップと前記同じ軸から始まり、前記第１の対角線ストリップと前記同じ方向に外向きに広がる、ここにおいて、前記第３の対角線ストリップ内のプリミティブの数は、前記第１の対角線ストリップおよび前記第２の対角線ストリップ内のプリミティブの数と異なる、を備えるデバイス。
【請求項１４】
前記デバイスは、モバイルワイヤレスデバイス、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、およびテレビジョンセットトップボックスのうちの１つを備える請求項１３に記載のデバイス。
【請求項１５】
実行されたときに、１つまたは複数のプロセッサに、請求項１−１２のうちのいずれか一項の方法を行わせる命令を記憶したコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本開示は、グラフィックス処理のための技術に関し、より具体的にはグラフィックス処理におけるテッセレーション(tessellation)に関する。
【背景技術】
【０００２】
[0002]  グラフィックスプロセッシングユニット（ＧＰＵ）は、テッセレーションステージを含むグラフィックス処理パイプラインを実施できる。テッセレーションステージでは、ＧＰＵ上でサーフェスを複数のプリミティブ(primitives)に変換し、結果として、より詳細なサーフェスを構成する。例えば、ＧＰＵは、粗いサーフェスに対する情報を受信し、高解像度サーフェスに対する情報を受信するのではなく高解像度サーフェスを生成できる。粗いサーフェスではなく、高解像度サーフェスに対する情報を受信することは、高解像度サーフェスを定義するために必要とされる情報の量が粗いサーフェスを定義するのに必要な情報の量よりもかなり多いため、帯域幅に関して不効率であり得る。
【発明の概要】
【０００３】
[0003]  一般に、本開示で説明されている技術は、テッセレーションユニットが、ドメイン内の、テッセレーション時に生成される、プリミティブのドメイン座標(domain coordinates)を出力する順序を対象とする。例えば、テッセレーションユニットは、ドメインを複数の部分に分割することができ、これらの部分のうちの少なくとも１つは、連続的部分(contiguous portion)であるものとしてよい。テッセレーションユニットは、対角線ストリップ(diagonal strips)に配置構成されたプリミティブのドメイン座標を出力することができ、対角線ストリップは、連続的部分内に配置される。
【０００４】
[0004]  一例において、本開示はテッセレーションの方法について説明する。この方法は、テッセレーションユニットにより、ドメインを複数の部分に分割することを含む。この例では、これらの部分のうちの少なくとも１つは、連続的部分である。この方法は、テッセレーションユニットにより、連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力することと、テッセレーションユニットにより、連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力することとをさらに含む。この例では、第２の対角線ストリップは、第１の対角線ストリップと平行であるか、または第１の対角線ストリップと接するかのうちの１つである。この方法は、テッセレーションユニットにより、連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力することも含む。この例では、第３の対角線ストリップは、少なくとも第１の対角線ストリップと平行である。また、この例では、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数と異なる。
【０００５】
[0005]  一例において、本開示では、テッセレーションユニットを備えるグラフィックスプロセッシングユニット（ＧＰＵ）を備えるデバイスについて説明している。テッセレーションユニットは、ドメインを複数の部分に分割するように構成される。この例では、これらの部分のうちの少なくとも１つは、連続的部分である。テッセレーションユニットは、連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力し、連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力するようにさらに構成される。この例では、第２の対角線ストリップは、第１の対角線ストリップと平行であるか、または第１の対角線ストリップと接するかのうちの１つである。テッセレーションユニットは、連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力するようにさらに構成される。この例では、第３の対角線ストリップは、少なくとも第１の対角線ストリップと平行である。また、この例では、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数と異なる。デバイスは、第１の対角線ストリップ、第２の対角線ストリップ、および第３の対角線ストリップ内のプリミティブの出力されるドメイン座標のうちの１つまたは複数に対応するパッチ座標(patch coordinates)を格納するように構成された再利用バッファも備える。
【０００６】
[0006]  一例において、本開示では、グラフィックスプロセッシングユニット（ＧＰＵ）を備えるデバイスについて説明している。ＧＰＵは、ドメインを複数の部分に分割するための手段を備える。この例では、これらの部分のうちの少なくとも１つは、連続的部分である。ＧＰＵは、連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段とを、さらに、備える。この例では、第２の対角線ストリップは、第１の対角線ストリップと平行であるか、または第１の対角線ストリップと接するかのうちの１つである。ＧＰＵは、連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段も備える。この例では、第３の対角線ストリップは、少なくとも第１の対角線ストリップと平行である。また、この例では、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数と異なる。
【０００７】
[0007]  一例において、本開示では、実行されたときに、１つまたは複数のプロセッサにドメインを複数の部分に分割させる格納されている命令を備えるコンピュータ可読記憶媒体(computer-readable storage medium)について説明している。この例では、これらの部分のうちの少なくとも１つは、連続的部分である。命令は、連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力し、連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力することを、さらに、１つまたは複数のプロセッサに行わせる。この例では、第２の対角線ストリップは、第１の対角線ストリップと平行であるか、または第１の対角線ストリップと接するかのうちの１つである。命令は、連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力することを、さらに、１つまたは複数のプロセッサに行わせる。この例では、第３の対角線ストリップは、少なくとも第１の対角線ストリップと平行である。また、この例では、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数と異なる。
【０００８】
[0008]  １つまたは複数の例の詳細は、添付図面および以下の説明で述べられる。他の特徴、目的、および利点は、説明および図面、並びに請求項から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】本開示で説明されている１つまたは複数の例によるグラフィックス処理パイプラインの一例を実施できるグラフィックスプロセッシングユニット（ＧＰＵ）の一例を示す概念図である。
【図２】本開示で説明されている１つまたは複数の例によるグラフィックス処理パイプラインの別の例を実施できるＧＰＵの別の例を示す概念図である。
【図３】テッセレーションのための頂点(vertices)のドメイン座標(domain coordinates)を出力する例示的な技術を示す図である。
【図４】テッセレーションのための頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図５】テッセレーションのための頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図６】本開示で説明されている１つまたは複数の例によるＧＰＵをより詳しく示しているブロック図である。
【図７】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図８】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図９】本開示で説明されている１つまたは複数の例による接続生成器（connectivity generator）が出力するドメインの連続的部分の一例を示す図である。
【図１０】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図１１】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図１２】本開示で説明されている１つまたは複数の例による接続生成器が出力するドメインの連続的部分の別の例を示す図である。
【図１３】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図１４Ａ】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図１４Ｂ】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図１５Ａ】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図１５Ｂ】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図１６Ａ】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図１６Ｂ】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。
【図１７】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図１８】本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。
【図１９】本開示で説明されている１つまたは複数の例による例示的なオペレーションを示す流れ図である。
【図２０】本開示で説明されている１つまたは複数の例による例示的なオペレーションを示す別の流れ図である。
【図２１】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２２】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２３】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２４】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２５】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２６】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２７】本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。
【図２８】図１および２に示されているようなＧＰＵを備えることのデバイスを示すブロック図である。
【発明を実施するための形態】
【００１０】
[0031]  ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、およびデジタルメディアプレーヤなどの現代的なデバイスは、ＣＰＵ（中央演算処理装置）と、グラフィックスプロセッシングユニット（ＧＰＵ）と、システムメモリとを備えている。アプリケーションを実行する一環としてグラフィックスをレンダリングするときに、ＣＰＵは、命令とグラフィックスデータとをＧＰＵに送信する。いくつかの例では、グラフィックスデータは、２Ｄまたは３Ｄ空間内の点を記述する１つまたは複数のデータ構造体を備え得る、頂点の形態を取り得る。
【００１１】
[0032]  ＣＰＵ上で実行するアプリケーションは、アプリケーションプログラミングインターフェース（ＡＰＩ）によりＧＰＵと通信できる。例えば、アプリケーションは、２つの例として、Ｍｉｃｒｏｓｏｆｔ（登録商標）社によって開発されたＤｉｒｅｃｔＸ（登録商標）ＡＰＩ  またはＫｈｒｏｎｏｓ  Ｇｒｏｕｐによって開発されたＯｐｅｎＧＬ（登録商標）ＡＰＩによりＧＰＵと通信できる。図解し、理解させることを目的として、本開示で説明されている技術は、一般的にＤｉｒｅｃｔＸおよびＯｐｅｎＧＬ  ＡＰＩｓを背景として説明されている。しかしながら、本開示の態様は、ＤｉｒｅｃｔＸおよびＯｐｅｎＧＬ  ＡＰＩｓに限定されると考えられるべきでなく、本開示で説明されている技術は、他のＡＰＩにも同様に拡大適用され得る。
【００１２】
[0033]  ＤｉｒｅｃｔＸおよびＯｐｅｎＧＬはそれぞれ、ＧＰＵによって実施されるべきグラフィックス処理パイプラインを定義する。これらのグラフィックス処理パイプラインは、プログラム可能なステージと、固定機能ステージとの組合せを含み得る。Ｄｉｒｅｃｔ３Ｄ  １１  ＡＰＩおよびＯｐｅｎＧＬ  ４．ｘ  ＡＰＩなどのＡＰＩｓのいくつかの最近のバージョンは、ＧＰＵによって行われるべきテッセレーションプロセスを含む。
【００１３】
[0034]  テッセレーションプロセスは、オブジェクトのサーフェスの一部（パッチと称される）を複数のより小さい部分に分割することと、より小さい部分を一緒にして相互接続することとを指す。この結果、テッセレーションの前のサーフェスと比較して、より詳細なサーフェスが得られる。テッセレーションは、ＣＰＵ上で実行されているアプリケーションが、少しの点を必要とし得る、低解像度のサーフェスを定義することを可能にし、またＧＰＵがより解像度の高いサーフェスを生成することを可能にする。
【００１４】
[0035]  テッセレーションを実施するために、ＧＰＵは、固定機能ユニット(fixed-function unit)であってもよい、テッセレーションユニットを備えることができるけれども、本開示の態様は、テッセレーションユニットが固定機能ユニットであることを必要としない。テッセレーションユニットの例として、テッセレーションステージ（ＤｉｒｅｃｔＸパイプライン内の）、およびプリミティブ生成器（ＯｐｅｎＧＬ  ４．ｘパイプライン内の）が挙げられる。テッセレーションユニットは、ドメイン内のプリミティブを構築するように構成され得る。このドメインは、パッチと混同されるべきでない。パッチは、レンダリングされるべきオブジェクトの表面の一部である。ドメインは、テッセレーションユニットがプリミティブを中で構築するテンプレートとして考えられるものとしてよく、パッチとは別である。テッセレーションユニットは、ドメイン座標内のプリミティブの頂点を定義できる。ドメイン座標は、テッセレーションユニットのローカルの座標系に基づいており、ドメイン内の点を定義するためにテッセレーションユニットによって使用される。
【００１５】
[0036]  ドメインシェーダ（ＤｉｒｅｃｔＸパイプラインにおける）またはテッセレーション評価シェーダ（ＯｐｅｎＧＬ  ４．ｘパイプラインにおける）は、テッセレーションユニットからドメイン座標を受信することができ、ドメイン座標をパッチ座標(patch coordinates)に変換する。パッチ座標は、パッチ内の点を定義するためにＧＰＵによって使用される座標系に基づく。ドメインシェーダまたはテッセレーション評価シェーダは、ドメイン内のプリミティブの頂点のドメイン座標をパッチ内の点（例えば、パッチ内のプリミティブの頂点）にマッピングし、パッチ内のそれらのマッピングされた点を相互接続して、パッチに対して解像度を加える（例えば、パッチ内のプリミティブを加えてパッチに解像度を加える）ものとして考えられ得る。
【００１６】
[0037]  いくつかの例では、テッセレーションユニットは、ときには、プリミティブのそれぞれの頂点に対するドメイン座標を、変換後頂点キャッシュ（ＰＴＶＣ）と称される、再利用バッファに出力できる。コントローラは、再利用バッファがテッセレーションユニットによって出力されるドメイン座標に対するパッチ座標を格納するかどうかを決定できる。コントローラが、再利用バッファがテッセレーションユニットによって出力されるドメイン座標に対するパッチ座標を格納しないと決定した場合、コントローラは、ドメインシェーダまたはテッセレーション評価シェーダのインスタンスに、ドメイン内のプリミティブの頂点のドメイン座標をパッチ内に付加されるべきプリミティブの頂点に対してパッチ座標に変換することを実行させ得る。次いで、コントローラは、パッチ座標を再利用バッファ内に格納し得る。しかしながら、コントローラが、再利用バッファがすでに、テッセレーションユニットによって出力されるドメイン座標に対するパッチ座標を格納していると決定した場合、コントローラは、ドメインシェーダまたはテッセレーション評価シェーダのインスタンスに実行させ得ない。
【００１７】
[0038]  一般に、ドメインシェーダまたはテッセレーション評価シェーダの実行は、テッセレーションプロセスを遅くする可能性がある実質的な処理時間を必要とし得る。本開示で説明されている技術は、テッセレーションユニットが、ドメイン内のプリミティブの頂点を出力し、テッセレーションユニットによって出力されるプリミティブの頂点のドメイン座標に対するパッチ座標をすでに格納している確率(likelihood)を高める順序に関係する。この結果、潜在的に、他の技術に比較して、ドメインシェーダまたはテッセレーション評価シェーダの実行のインスタンスが少なくなり、延いては、その結果、テッセレーションプロセスの完了が高速化し得る。
【００１８】
[0039]  本開示で説明されている技術では、テッセレーションユニットは、ドメイン内のプリミティブの頂点を特定の順序で出力し得る。より詳しく説明すると、テッセレーションユニットは、ドメインの一部の中のプリミティブの頂点を出力できる。例えば、テッセレーションユニットは、ドメインを複数の部分に分割できる。これらの部分のうちの少なくとも１つは、ドメイン内の連続的領域内を囲み、連続的部分と称され得る。より詳しく説明すると、ドメインの連続的部分は、その部分の中に、ドメイン内のプリミティブを除外するギャップがないことを意味し得る。
【００１９】
[0040]  より詳しく説明すると、テッセレーションユニットは、プリミティブの頂点を出力することができ、プリミティブは、連続的部分内の１つまたは複数の対角線ストリップに配置構成される。例えば、テッセレーションユニットは、第１の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第１の対角線ストリップは、連続的部分内に配置される。
【００２０】
[0041]  第１の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニットは、第２の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第２の対角線ストリップは、連続的部分内に配置される。いくつかの例では、第２の対角線ストリップは、第１の対角線ストリップと平行であり得る。他の例では、第２の対角線ストリップは、第１の対角線ストリップと接するものとしてよい。
【００２１】
[0042]  第２の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニットは、次いで、第３の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、以下同様に続けることができる。第３の対角線ストリップは、第１の対角線ストリップと平行であり得る。テッセレーションユニットは、テッセレーションユニットがドメインの部分のうちの１つの中のプリミティブを出力することを完了するまで対角線ストリップ内のプリミティブを出力できる。テッセレーションユニットは、ドメイン内の他の部分の中のプリミティブを実質的に類似の方法で出力できる。
【００２２】
[0043]  図１は、本開示で説明されている１つまたは複数の例によるグラフィックス処理パイプラインの一例を実施できるグラフィックスプロセッシングユニット（ＧＰＵ）の一例を示す概念図である。図１は、グラフィックプロセッシングユニット（ＧＰＵ）１２と、システムメモリ１４と、中央演算処理装置（ＣＰＵ）１６とを備えるデバイス１０を示している。デバイス１０の例として、限定はしないが、モバイルワイヤレスデバイス（例えば、ワイヤレス電話）、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、テレビジョンセットトップボックス、および同様のものが挙げられる。
【００２３】
[0044]  ＣＰＵ１６は、様々なタイプのアプリケーションを実行し得る。アプリケーションの例として、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、または表示用の閲覧可能オブジェクトを生成する他のアプリケーションが挙げられる。１つまたは複数のアプリケーションの実行のための命令は、システムメモリ１４内に記憶され得る。ＣＰＵ１６は、さらに処理するために生成された閲覧可能オブジェクトのグラフィックスデータをＧＰＵ１２に送信できる。
【００２４】
[0045]  例えば、ＧＰＵ１２は、グラフィックスデータを処理する適切な機能を果たす、超並列処理を可能にする専用ハードウェアであってもよい。この方法で、ＣＰＵ１６は、ＧＰＵ１２によってより適切に取り扱われるグラフィックス処理をオフロードする。ＣＰＵ１６は、特定のアプリケーションプロセッシングインターフェース（ＡＰＩ）に従ってＧＰＵ１２と通信できる。このようなＡＰＩｓの例として、Ｍｉｃｒｏｓｏｆｔ（登録商標）によるＤｉｒｅｃｔＸ（登録商標）ＡＰＩおよびＫｈｒｏｎｏｓグループによるＯｐｅｎＧＬ（登録商標）が挙げられるが、本開示の態様は、ＤｉｒｅｃｔＸおよびＯｐｅｎＧＬ  ＡＰＩｓに限定されず、すでに開発されている、現在開発中である、または将来開発されるであろう他のタイプのＡＰＩｓに拡大適用され得る。
【００２５】
[0046]  ＧＰＵ１２がそのようにＣＰＵ１６からグラフィックスデータを受信すべきである方法を定義することに加えて、ＡＰＩは、ＧＰＵ１２が実施すべき特定のグラフィックス処理パイプラインを定義し得る。図１のＧＰＵ１２は、Ｄｉｒｅｃｔ３Ｄ  １１  ＡＰＩなどのＤｉｒｅｃｔＸ  １１．ｘ  ＡＰＩで定義されているグラフィックス処理パイプラインを示している。より詳しく説明すると、図２は、ＯｐｅｎＧＬ  ４．ｘ  ＡＰＩのグラフィックス処理パイプラインを示している。
【００２６】
[0047]  ＣＰＵ１６およびＧＰＵ１２の例としては、限定はしないが、デジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または他の等価な集積回路もしくはディスクリート論理回路がある。いくつかの例では、ＧＰＵ１２は、グラフィックス処理に好適な超並列処理能力をＧＰＵ１２に与える集積回路および／またはディスクリート論理回路を含む専用ハードウェアであり得る。いくつかの事例では、ＧＰＵ１２は、汎用処理をも含み得、汎用ＧＰＵ（ＧＰＧＰＵ：general purpose GPU）と呼ばれることがある。本開示で説明する技法は、ＧＰＵ１２がＧＰＧＰＵである例にも適用可能であり得る。
【００２７】
[0048]  システムメモリ１４は１つまたは複数のコンピュータ可読記憶媒体を備え得る。システムメモリ１４の例としては、限定はしないが、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、または命令および／またはデータ構造の形態で所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る任意の他の媒体がある。
【００２８】
[0049]  いくつかの態様では、システムメモリ１４は、ＣＰＵ１６および／またはＧＰＵ１２に、本開示におけるＣＰＵ１６とＧＰＵ１２とに帰される機能を行わせる命令を含み得る。従って、システムメモリ１４は、実行されると、１つまたは複数のプロセッサ（例えば、ＣＰＵ１６およびＧＰＵ１２）に、様々な機能を行わせる、命令が格納されているコンピュータ可読記憶媒体であってよい。
【００２９】
[0050]  システムメモリ１４は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が搬送波または伝搬信号で具現化されないことを示し得る。しかしながら、「非一時的」という用語は、システムメモリ１４は、その内容に関して、移動不可能であるか、または必ず静的であることを意味すると解釈されるべきでない。一例として、システムメモリ１４は、デバイス１０から取り外されて、別のデバイスに移動されてもよい。別の例として、システムメモリ１４に実質的に類似する、システムメモリは、デバイス１０内に挿入され得る。いくつかの実施形態において、非一時的記憶媒体は、時間の経過とともに変化し得るデータを格納できる（例えば、ＲＡＭ内）。
【００３０】
[0051]  ＣＰＵ１６上でのアプリケーションの実行は、ＣＰＵ１６に、閲覧可能なコンテンツを形成するために一緒に接続する複数のプリミティブを生成させる。プリミティブの例としては、点、線、三角形、正方形、または任意の他のタイプの多角形がある。ＣＰＵ１６は、これらのプリミティブをそれらのそれぞれの頂点によって定義し得る。例えば、ＣＰＵ１６は頂点についての座標と色値とを定義し得る。座標値は３次元（３Ｄ）座標または２Ｄ座標であり得る。
【００３１】
[0052]  いくつかの場合において、ＣＰＵ１６は、パッチと称される特別なタイプのプリミティブも生成し得る。他のプリミティブタイプと同様に、パッチは、パッチの制御点と称される、複数の頂点によって定義され得る。他のプリミティブタイプと異なり、パッチは、特定の形状を有していなくてもよい。例えば、ＣＰＵ１６は、任意の方法でパッチの制御点を相互接続することができ、従って、相互接続された制御点は、任意の所望の形状を形成する。三角形などの他のプリミティブタイプについては、ＣＰＵ１６は、頂点が相互接続される特定の方法を定義できる（例えば頂点の相互接続の結果、三角形が得られる）。
【００３２】
[0053]  他のプリミティブタイプと異なり、パッチ内の制御点の数は可変であってよい。例えば、ＣＰＵ１６上で実行するアプリケーションがパッチに対して許容される制御点の最大数を定義できたり、制御点の最大数がユーザ定義されるものであり得る。いくつかの例では、パッチ内の制御点の数が１から３２個の制御点であってよいが、本開示で説明されている技術は、そのように限定されない。
【００３３】
[0054]  ＣＰＵ１６は、テッセレーションを目的として制御パッチを利用できる。上で説明されているように、テッセレーションプロセスは、ＣＰＵ１６が低解像度の閲覧可能オブジェクトのサーフェスの一部を定義することと、その部分をテッセレートしてサーフェスのより高解像度のバージョンを生成することとを指す。例えば、ＣＰＵ１６は、制御点が相互接続されたときにパッチが閲覧可能オブジェクトのサーフェスの一部を形成するようにパッチの制御点を定義できる。サーフェスがパッチの制御点からのみ形成されるとすれば、サーフェスは、高解像度で表示されず、ギザギザに粗く表示され得る。テッセレーションを使用すると、追加のプリミティブがパッチに付加され、これにより、プリミティブが相互接続されたときに、これらのプリミティブの相互接続がパッチに詳細を付加し、これにより、パッチの解像度を高め、その結果、より高品質の閲覧可能コンテンツが得られる。
【００３４】
[0055]  ＧＰＵ１２は、テッセレーションを実施するように構成され得る。このようにして、ＣＰＵ１６は、より高解像度のパッチを生成するのに必要な追加のすべてのプリミティブに対する頂点を定義する必要がなく、従って、ＣＰＵ１６によって行われる計算を軽減できる。また、ＣＰＵ１６は、より少数の頂点（例えば、付加されるべきプリミティブの頂点ではなく、制御点の頂点）を送信するだけでよく、ＧＰＵ１２は、それに応じて、システムメモリ１４へのアクセス回数が少ないことで帯域幅効率を促す、より小数の頂点を受信するだけでよい。
【００３５】
[0056]  グラフィックス演算を行うために、ＧＰＵ１２は、グラフィックス処理パイプラインを実施できる。グラフィックス処理パイプラインは、ＧＰＵ１２上で実行しているソフトウェアまたはファームウェアによって定義された機能を行うことと、特定の機能を行うように配線接続された固定機能ユニットによって機能を行うこととを含む。ＧＰＵ１２上で実行しているソフトウェアまたはファームウェアはシェーダと呼ばれることがあり、シェーダはＧＰＵ１２の１つまたは複数のシェーダコア上で実行し得る。ユーザは、任意の考えられる方法で所望のタスクを行うようにシェーダを設計できるので、シェーダはユーザに機能的フレキシビリティを与える。固定機能ユニットは、しかしながら、固定機能ユニットがタスクを行う方式(manner)のために配線接続される。従って、固定機能ユニットは、ソフトウェアまたはファームウェアによって提供されるプログラム可能な機能的柔軟性などの多くの機能的柔軟性を備えることができない。
【００３６】
[0057]  上記のように、図１に示されたグラフィックス処理パイプラインは、実質的にＤｉｒｅｃｔ３Ｄ  １１によって定義されたグラフィック処理パイプラインである。この例では、ＧＰＵ１２は、入力アセンブラステージ１８、頂点シェーダ２０、ハルシェーダステージ２２、テッセレーションステージ２４、ドメインシェーダステージ２６、ジオメトリシェーダステージ２８、ラスタライザステージ３０、ピクセルシェーダステージ３２、および出力マージステージ３４のうちの１つまたは複数を含み得る。ＧＰＵ１２は、図示されたものよりも多くのステージを含み得、いくつかの例では、ＧＰＵ１２は、必ずしも図示されたステージのすべてを含むとは限らない。また、ステージの特定の順序付けは、例示のために与えたものであり、限定的であると考えられるべきではない。
【００３７】
[0058]  本開示で説明されている技術では、ＣＰＵ１６は、パッチの制御点をシステムメモリ１４に出力できる。次いで、ＧＰＵ１２は、システムメモリ１４から制御点を取り出すことができる。この方法で、ＣＰＵ１６は、制御点をＧＰＵ１２に送信できる。本開示で使用されているように、ＣＰＵ１６がＧＰＵ１２に送信すること、またはＧＰＵ１２がＣＰＵ１６から受信することは、一般的に、ＣＰＵ１６がシステムメモリ１４に書き込み、ＧＰＵ１２が読み出すことを含み得る。代替的に、ＣＰＵ１６がＧＰＵ１２に直接送信すること、およびＧＰＵ１２がＣＰＵ１６から直接受信することが可能であるものとしてよい。
【００３８】
[0059]  入力アセンブラステージ１８は、ＣＰＵ１６によって定義されているようにシステムメモリ１４から制御点を読み出し、制御点をアセンブルしてパッチを形成できる。例えば、入力アセンブラステージ１８は、制御点の座標と、色値と、他のそのような情報とを読み出すことができる。座標、色値、および他のそのような情報は、一般的に制御点の属性と称され得る。制御点の属性に基づき、入力アセンブラステージ１８は、パッチの一般的なレイアウトを決定できる。この方法で、入力アセンブラステージ１８は、制御点をアセンブルしてパッチを形成できる。入力アセンブラステージ１８は、固定機能論理ユニットまたはプログラム可能ユニットであってよい。
【００３９】
[0060]  頂点シェーダステージ２０は、入力アセンブラステージ１８からの頂点（例えば、パッチの制御点）を処理できる。例えば、頂点シェーダステージ２０は、変換、スキニング、モーフィング、および頂点ごとの照明などの頂点ごとの演算を行い得る。頂点シェーダステージ２０はシェーダであり得る。
【００４０】
[0061]  ハルシェーダステージ２２は、頂点シェーダステージ２０よって処理されるように、パッチの制御点の受信し、制御点も処理し、処理されたパッチに対して制御点を出力する。言い換えれば、ハルシェーダステージ２２は、頂点シェーダステージ２０によって処理された入力パッチを受信し、入力パッチを処理し、出力パッチを出力する。ハルシェーダステージ２２は、入力パッチを処理するための様々な機能を行い得る。例えば、ハルシェーダステージ２２は、制御点の座標を修正して、制御点の配置を変更できたり、制御点を付加もしくは削除すらできたりする。
【００４１】
[0062]  それに加えて、ハルシェーダステージ２２は、ハルシェーダステージ２２によって生成されるパッチ（すなわち、出力パッチ）にプリミティブをいくつ追加するべきかを示す値を決定できる。ハルシェーダステージ２２は、いくつのプリミティブがパッチに追加されるべきか決定するために様々な基準を利用し得る。いくつのプリミティブがパッチに追加されるべきか決定するためにハルシェーダステージ２２が利用し得る、２つの例示的な基準について以下で説明する。しかしながら、本開示の態様はそのように限定されず、ハルシェーダステージ２２は、いくつのプリミティブがパッチに追加されるべきかを決定するために任意の基準を利用し得る。
【００４２】
[0063]  一例として、ハルシェーダステージ２２は、パッチの深さを示す情報を利用して、プリミティブをいくつ付加すべきかを決定できる。例えば、閲覧者の視点からさらに遠くなるパッチは、日常生活では距離が遠い物体ほどぼやけて見えるので高解像度を必要としない場合がある、しかしながら、閲覧者の視点から、より近い位置にあるパッチは、日常生活では距離が近い物体ほどはっきり見えるのでより高い解像度を必要する場合がある、この例では、ハルシェーダステージ２２は、互いに関して、より少ないプリミティブがより遠く離れているパッチに付加されるべきであり、より多くのプリミティブがより近いパッチに付加されるべきであると決定できる。
【００４３】
[0064]  別の例として、ハルシェーダステージ２２は、パッチのサイズに基づき付加されるべきであると決定できる。より小さいサイズのパッチでは、ハルシェーダステージ２２は、パッチがより小さい領域を囲むので、より少ないプリミティブが付加されるべきであると決定できる。より大きいサイズのパッチでは、ハルシェーダステージ２２は、パッチがより広い領域を囲むので、より多くのプリミティブが付加されるべきであると決定できる。
【００４４】
[0065]  プリミティブがいくつ付加されるべきかの決定に基づき、ハルシェーダステージ２２は、プリミティブがいくつパッチに付加されるべきかを示すドメインタイプと値とをテッセレーションステージ２４に出力できる。Ｄｉｒｅｃｔ３Ｄ  １１  ＡＰＩにおいて、プリミティブがいくつパッチに付加されるべきかを示す値は、テス係数(tessfactor）と称される。
【００４５】
[0066]  ドメインは、テッセレーションステージ２４がテッセレーションを目的として使用するテンプレート形状として考えられ得る。ドメインタイプの例として、直線、三角形、四角形（例えば、四辺多角形）、または任意の他のタイプの多角形が挙げられる。ドメインは、パッチが三次元（３Ｄ）サーフェスまたは２Ｄサーフェスを定義する場合でも二次元（２Ｄ）形状とすることができる。ドメインが直線である場合、ドメインは、パッチが３Ｄサーフェス、２Ｄサーフェス、または１Ｄサーフェスを定義するとしても、一次元（１Ｄ）形状（すなわち、直線）であってよい。例示を目的として、本開示で説明されている技術は、ドメインが２Ｄサーフェスであることに関して説明されている。例えば、これらの技術は、三角形または四角形であるドメイン形状で説明されている。
【００４６】
[0067]  いくつかの例において、ハルシェーダステージ２２は、ドメインタイプを明示的に示していなくてもよい。むしろ、テッセレーションステージ２４は、送信されたテス係数の数に基づきドメインタイプを決定できる。例えば、４つのテス係数の存在は、ドメインタイプが三角形ドメインタイプであることを示し、６つのテス係数の存在は、ドメインタイプが四角形ドメインタイプであることを示し得る。
【００４７】
[0068]  いくつかの例では、四角形ドメインは、二次元（２Ｄ）デカルト座標(Cartesian coordinates)（ｕ，ｖ）によって定義され得る。いくつかの例では、三角形ドメインは、重心座標(Barycentric coordinates)によって定義され得る。重心座標は、３つの座標を利用して、三角形内の任意の点を識別する。例えば、三角形ドメインの頂点は、以下でより詳しく説明されているように、（ｕ，ｖ，ｗ）として定義され得る。三角形内の任意の点の配置は、頂点への近接度を示す頂点重み付けによって定義される。例えば、点が頂点に近ければ近いほど、その頂点重み付けは高く、点が頂点から遠く離れていればいるほど、頂点重み付けは低い。
【００４８】
[0069]  例えば、三角形の頂点は、重心座標（ｕ，ｖ，ｗ）で次のように定義されると仮定する。（１，０，０）、（０，１，０）、および（０，０，１）。この例では、中心点は、頂点の各々から等しい距離にあるので（１／３，１／３，１／３）に配置される。また、頂点座標の与えられた定義により、この例では、三角形ドメイン内の任意の点に対するｕ、ｖ、およびｗ座標の和は、１に等しい値であるべきである。
【００４９】
[0070]  デカルト座標および重心座標は、例示のみによって説明されており、制限として解釈すべきでない。他の例では、重心座標またはデカルト座標で四角形ドメインを、デカルト座標または重心座標で三角形ドメインを定義することが可能であるものとしてよい。一般に、任意のタイプのドメインは、任意の座標系を使用して定義され得る。
【００５０】
[0071]  テッセレーションステージ２４は、ドメインを複数のプリミティブにテッセレートできる（例えば、ドメイン内に複数のプリミティブを構築する）。この例では、テッセレーションステージ２４は、ハルシェーダステージ２２によって出力されたパッチをプリミティブにテッセレートせず、むしろ、ドメインをプリミティブにテッセレートすることは理解されるであろう。いくつかの例では、テッセレーションステージ２４は、ハルシェーダステージ２２によって出力されたパッチへのアクセス権すら有していない場合がある。テッセレーションステージ２４は、固定機能ユニットであってもよいけれども、本開示の態様はそのようには限定される必要はない。
【００５１】
[0072]  テッセレーションステージ２４は、ハルシェーダステージ２２によって出力されたテス係数を利用して、ドメインを複数のプリミティブにテッセレートできる。例えば、ドメインタイプ（例えば、三角形または四角形）を定義することに加えて、テス係数では、ドメイン内にリングをいくつ含めるべきかを定義できる。
【００５２】
[0073]  リングは、ドメイン内の一連の同心形状であってよく、同心形状は、ドメイン形状と同じ形状である。例えば、ドメイン形状が四角形である場合、四角形の周は、外側リングであると考えられ得る。ハルシェーダステージ２２は、内側リングの数を定義することができ、これは四角形ドメイン内に配置される一連のより小さいサイズの四角形であってよい。同様に、ドメイン形状が三角形である場合、三角形の周は、三角形ドメイン内に配置される一連のより小さいサイズの三角形とすることができる。
【００５３】
[0074]  ドメイン内でリングの数を定義することに加えて、テス係数は、リングに沿って配置される点を定義する。これらのリングに沿って配置される点は、制御点と混同されるべきでない。制御点は、パッチを定義する。リングに沿って配置される点は、テス係数に基づきテッセレーションステージ２４によって生成される点である。これらの点は、ドメイン内に生成され、パッチ内には生成されない。
【００５４】
[0075]  また、テッセレーションステージ２４が一緒に接続してドメイン内に複数のプリミティブを構築するのがこれらの点である。例えば、テッセレーションステージ２４が構築するプリミティブは、三角形であると仮定する。この例では、テッセレーションステージ２４は、外側リングに沿って配置される１つの点を、内側リングに沿って配置される２つの点と接続して、三角形プリミティブを形成し得る。代替的に、テッセレーションステージ２４は、外側リングに沿って配置される２つの点を、内側リングに沿って配置される１つの点と接続して、三角形プリミティブを形成し得る。このようにして、ドメインタイプと、ドメイン内のリングの数と、外側および内側リングに沿った点の数とを定義することによって、ハルシェーダステージ２２は、テッセレーションステージ２４がドメイン内に構築すべきプリミティブの数を定義できる。
【００５５】
[0076]  いくつかの例では、リングのエッジに沿って配置され得る点の数は、１つの点から６５個の点までとしてよい。例えば、ドメインタイプが三角形である場合、三角形ドメインのエッジごとに最大６５個までの点があり得る。同様に、ドメインタイプが四角形である場合、四角形のエッジごとに最大６５個までの点があり得る。しかしながら、本開示で説明されている技術は、最大６５個の点を有するエッジに限定されない。
【００５６】
[0077]  さらに、リングに沿って配置される点の数は、外側リングと内側リングとで異なっていてもよい。例えば、外側リングのエッジに沿って配置される点の数は、内側リングのエッジに沿って配置される点の数より多くても、または少なくてもよい。また、外側リングおよび内側リングのエッジに沿って配置される点の数が同数である可能性もあり得る。
【００５７】
[0078]  さらに、同じリングのエッジに沿った数点は異なっていてもよい。例えば、三角形ドメインについて、エッジのうちの１つに沿って配置される点の数は、他の１つのエッジに沿って配置される点の数と異なっていてもよい。同様に、四角形ドメインについて、エッジのうちの１つに沿って配置される点の数は、１つ、２つ、または３つすべての他の、残りのエッジに沿って配置される点の数と異なっていてもよい。また、リングのエッジの各々が同じ数の点を有している可能性もあり得る。
【００５８】
[0079]  上で説明されているように、いくつかの例では、テッセレーションステージ２４は、パッチを複数のプリミティブに分割し得ない。従って、いくつかの例では、テッセレーションステージ２４は、制御点の数、制御点の配置、またはパッチのサイズなどの情報を受け取ることができない。パッチのサイズおよび制御点の配置に関する情報がないと、テッセレーションステージ２４は、使用されるドメインのサイズまたはドメインの頂点に対する特定の座標を定義することができない場合がある。
【００５９】
[0080]  これに対処するために、テッセレーションステージ２４は、正規化された座標系を利用して、ドメインの頂点を定義すること、さらにはドメイン内の相互接続された点の配置を決定できる。正規化された座標の一例として、テッセレーションステージ２４は、次のようにｕ、ｖ座標で四角形ドメインの頂点を定義できる。（０，０）、（１，０）、（０，１）、および（１，１）。すなわち、単位正方形である。テッセレーションステージ２４は、次のようにｕ、ｖ、ｗ座標で三角形ドメインの頂点を定義できる。（０，０，１）、（０，１，０）、および（１，０，０）。すなわち、正三角形である。テッセレーションステージ２４は、この正規化された座標系内の複数のプリミティブの相互接続された頂点に対する座標を決定できる。言い換えれば、テッセレーションステージ２４は、ローカルの正規化された座標系を使用してドメイン内のプリミティブの頂点の座標を定義できる。本開示では、テッセレーションステージ２４によって定義されるような頂点の座標は、これらの座標がドメインに対する正規化された座標系に関するものであるので、ドメイン座標と称され得る。
【００６０】
[0081]  例示されているグラフィックスパイプラインにおいて、ドメインシェーダ２６は、正規化された座標系内の複数のプリミティブの頂点に対するドメイン座標を受信できる（例えば、適宜、ｕ、ｖ座標、またはｕ、ｖ、ｗ座標）。ドメインシェーダステージ２６の機能は、テッセレーションステージ２４から受信されるとおりに、頂点のドメイン座標を、パッチ上にマッピングすることであるものとしてよい。例えば、テッセレーションステージ２４は、ハルシェーダステージ２２によって定義されているようにパッチの情報を受信できないが、ドメインシェーダステージ２６は、ハルシェーダステージ２２からそのような情報を受信できる。
【００６１】
[0082]  ドメインシェーダステージ２６は、プリミティブの頂点に対するドメイン座標を、パッチに付加されるべきプリミティブの頂点のパッチ座標に変換できる。パッチ座標は、ＧＰＵ１２によって使用される座標系に関して定義されている、パッチ内の点を定義する座標であってよい。例えば、ドメイン内のプリミティブの頂点のドメイン座標は、２Ｄドメイン内の点を定義するために使用される正規化された座標系に基づくものであってよい。しかしながら、パッチは、三次元で定義されてもよく、ドメインシェーダステージ２６は、パッチ上の点を識別するために頂点のドメイン座標を変換できる。
【００６２】
[0083]  例えば、ドメインシェーダステージ２６は、ハルシェーダ２２からパッチの制御点の座標を受信できる。ハルシェーダステージ２２からのパッチの制御点の座標を用いて、ドメインシェーダステージ２６は、パッチ上の、テッセレーションステージ２４によって出力されたとおりの、頂点の配置を決定できる。パッチ上のこの識別された点は、パッチに付加されるプリミティブに対する頂点であってよい。
【００６３】
[0084]  テッセレーションステージ２４は、頂点に対するドメイン座標を再利用バッファに出力できる（図１には示されていないが、図６により詳しく示されている）。再利用バッファは、変換後頂点キャッシュ（ＰＴＶＣ）と称され得る。コントローラ（図１には示されていないが、図６により詳しく示されている）は、再利用バッファが、テッセレーションユニット２４によって出力された頂点のドメイン座標に対応するパッチ座標を格納するかどうかを決定できる。本開示で使用されているように、テッセレーションユニット２４によって出力される頂点のドメイン座標に対応するパッチ座標は、ドメイン座標変換することによって生成されるパッチ座標を指す。
【００６４】
[0085]  コントローラが、再利用バッファがドメイン座標に対応するパッチ座標を格納しないと決定した場合、コントローラは、ドメインシェーダステージ２６のインスタンス化(instantiation)を実行できる。ドメインシェーダステージ２６は、テッセレーションステージ２４によって出力された頂点のドメイン座標を受信し、ドメイン座標をパッチ座標に変換し、パッチ座標を再利用バッファに格納し得る。コントローラが、再利用バッファがドメイン座標に対応するパッチ座標を格納すると決定した場合、コントローラは、ドメインシェーダステージ２６のインスタンス化を実行し得ない。いずれの場合も、コントローラは、次いで、さらにグラフィックスパイプラインに沿ってパッチ座標を出力し得る。
【００６５】
[0086]  テッセレーションステージ２４は、テッセレーションステージ２４によって生成された複数のプリミティブの頂点を出力し、ドメインシェーダステージ２６は、これらのプリミティブをパッチに付加するので、ハルシェーダステージ２２、テッセレーションステージ２４、およびドメインシェーダステージ２６の組合せが一緒になって、追加のプリミティブをパッチに付加する。この結果、パッチに付加されたプリミティブのメッシュがＣＰＵ１６によって定義されたパッチと比較してより高い解像度、より詳細なパッチを作成する。この方法で、ハルシェーダステージ２２、テッセレーションステージ２４、およびドメインシェーダステージ２６は、テッセレーションプロセスを実施する。
【００６６】
[0087]  ジオメトリシェーダステージ２８は、ドメインシェーダステージ２６によってパッチに付加されたプリミティブの頂点を受信し、なお一層解像度を増すためにプリミティブのための追加の頂点をさらに生成し得る。ラスタライザステージ３０は、ジオメトリシェーダステージ２８からプリミティブを受信し、それらのプリミティブを表示のためピクセルに変換する。例えば、プリミティブは、プリミティブの相互接続を示すベクトルとして定義され、画像が表示される表示から独立した座標空間内に定義され得る。ラスタライザステージ３０は、これらのベクトルを表示座標に変換し、塞がれているプリミティブ内の点を取り除くなどの追加の機能を行う。
【００６７】
[0088]  ピクセルシェーダステージ３２は、ラスタライザステージ３０によって出力されるとおりにピクセルを受信し、後処理を行って色値を表示されるべきピクセルの各々に割り当てる。例えば、ピクセルシェーダステージ３２は、システムメモリ１４内に格納されている定数値と、システムメモリ１４内に格納されているテクスチャデータと、任意の他のデータとを受信して、ピクセルごとの出力を色値として生成し得る。ピクセルシェーダステージ３２は、ピクセルの不透明さを示す不透明度値も出力し得る。
【００６８】
[0089]  出力マージステージ３４は、最終ピクセル処理を行い得る。例えば、出力マージステージ３４は、深さ情報を利用して、ピクセルのどれかが表示されないように取り除かれるべきかどうかをさらに決定できる。出力マージステージ３４は、輝度値と色度値、または赤緑青（ＲＧＢ）を含み得る、最終ピクセル値を生成するためのブレンディング演算も行い得る。
【００６９】
[0090]  出力マージステージ３４は、最終ピクセル値を、一般的にシステムメモリ１４内に配置されているが、ＧＰＵ１２内に配置され得る、フレームバッファに出力できる。表示プロセッサ（図示せず）は、フレームバッファからピクセル値を取り出し、デバイス１０のディスプレイ（図示せず）のピクセル（例えば、赤色、緑色、および青色のピクセル成分を介して）を、ピクセル値に従って指定された強度レベルで点灯(illuminate)させ、ディスプレイに画像を表示させることができる。
【００７０】
[0091]  上で説明されているように、コントローラは、再利用バッファがドメイン内のプリミティブの頂点の対応するドメイン座標に対するパッチ座標を格納しない場合に必ずドメインシェーダステージ２６のインスタンス化を実行できる。一般に、ドメインシェーダステージ２６の実行は、多数の処理を行い、時間もかかり、ドメインシェーダステージ２６が必要とする実行回数を制限することが望ましい場合がある。例えば、ドメイン内の第１のプリミティブおよび第２のプリミティブは、２つの頂点を共有し得る。この例では、テッセレーションステージ２４が第１のプリミティブの頂点のドメイン座標を出力した後に、コントローラは、ドメインシェーダステージ２６のインスタンス化を３回（すなわち、頂点ごとに１回）実行し、その結果得られるパッチ座標を再利用バッファに格納できる。次いで、テッセレーションステージ２４が、第２のプリミティブの頂点に対するドメイン座標を出力した後に、コントローラは、ドメインシェーダステージ２６のインスタンス化を１回実行し得る。この場合、再利用バッファは、第１のプリミティブと第２のプリミティブとの間で共有される２つのベクトルに対するパッチ座標をすでに格納している可能性がある。従って、コントローラは、第２のプリミティブの未共有の頂点に対するドメインシェーダステージ２６のインスタンス化を１回実行するだけでよい。
【００７１】
[0092]  再利用バッファの記憶能力は限られているので、２つのプリミティブの間で共有される頂点に対するパッチ座標が、テッセレーションステージ２４が２回目に共有されている頂点に対するドメイン座標を出力するときにもはや再利用バッファ内に格納されない可能性があり得る。例えば、前の例において、再利用バッファの記憶能力が限られているので、第１のプリミティブと第２のプリミティブとの間で共有される頂点の一方または両方のドメイン座標に対応するパッチ座標が、テッセレーションユニット２４が第２のプリミティブの頂点のドメイン座標を出力するときにもはや再利用バッファ内に格納されない可能性があり得る。
【００７２】
[0093]  この結果、ドメインシェーダステージ２６のインスタンス化が実行され、パッチ座標に以前に変換されたドメイン座標を変換し得る。例えば、共有されている頂点のドメイン座標に対応するパッチ座標が再利用バッファ内に格納される上記の例において、コントローラは、ドメインシェーダステージ２６のインスタンス化を１回だけ実行して、第２のプリミティブの未共有の頂点のドメイン座標をパッチ座標に変換し得る。しかしながら、共有されている頂点のドメイン座標に対応するパッチ座標が再利用バッファ内に格納されない上記の例において、コントローラは、ドメインシェーダステージ２６のインスタンス化を３回実行して、第２のプリミティブの３つの頂点のドメイン座標をパッチ座標に変換し得る。
【００７３】
[0094]  すでに格納されているパッチ座標は、再利用バッファが先入れ先出し置換方式(first-in-first-out replacement scheme)を実施し得るので再利用バッファ内では利用可能でない場合がある。例えば、再利用バッファが満杯である場合（例えば、再利用バッファ内の各スロットがパッチ座標を格納する）、再利用バッファは最も古くから格納されているパッチ座標を取り出して（すなわち、ウォッシュアウト）、格納されるべき次のパッチ座標のための記憶領域を解放できる。取り出されるパッチ座標が、別のプリミティブと共有されるプリミティブの頂点に対するドメイン座標に対応する場合、コントローラは、テッセレーションステージ２４が他のプリミティブの頂点を出力するときに、ドメインシェーダステージ２６の別のインスタンス化の実行で、頂点のドメイン座標をパッチ座標に再変換させることができる。
【００７４】
[0095]  本開示で説明されている技術は、テッセレーションステージ２４がプリミティブの頂点を出力する順序を対象とする。いくつかの例では、テッセレーションステージ２４は、共有される頂点が再利用バッファ内に格納されたままとなる確率を高めるような順序でプリミティブの頂点を出力し得る。例えば、第１のプリミティブの頂点を出力した後に、テッセレーションステージ２４は、その後のプリミティブと共有される第１のプリミティブの頂点が、テッセレーションステージ２４がこれらのその後のプリミティブの頂点を出力するときに再利用バッファ内にあるような順序で頂点を出力できる。
【００７５】
[0096]  プリミティブの出力順序は、再利用バッファが満杯のときに、ドメイン座標が最も古くから格納されているパッチ座標に対応する頂点を有する多くの残りのプリミティブがないような順序としてよい。例えば、先入れ先出し置換方式では、再利用バッファが満杯であるときに、再利用バッファが最も古くから格納されているパッチ座標を取り出すことができる。これらのパッチ座標は、プリミティブ内の頂点のドメイン座標に対応するものとしてよく、頂点は、多数の他のプリミティブと共有されない。このようにして、再利用バッファがこれらのパッチ座標を取り出す場合であっても、以下でより詳しく説明されているように、ドメインシェーダステージ２６のインスタンス化の回数に対する影響は限定的であり得る。
【００７６】
[0097]  上で説明されているように、ハルシェーダステージ２２は、ドメイン内のリングの数と、リングの各エッジに沿って配置される点の数とを定義し得る。テッセレーションステージ２４は、次いで、ハルシェーダステージ２２によって定義された方法でリングに沿って点を置くことができる。これらの点は、ドメイン内でテッセレーションステージ２４によって作成されるプリミティブの頂点を形成する。テッセレーションステージ２４は、これらの頂点を一緒に相互接続して、プリミティブを形成し、これらのプリミティブの頂点に対するドメイン座標を出力できる。
【００７７】
[0098]  本開示で説明されている技術によれば、プリミティブの頂点に対するドメイン座標を出力する前に、テッセレーションステージ２４は、ドメインを複数の部分に分割できる。これらの部分のうちの少なくとも１つは、ドメイン内の連続的領域内を囲み、連続的部分と称され得る。一般に、これらの部分の各々が、連続的部分である可能性があり得るが、本開示で説明されている態様は、そのように限定されない。
【００７８】
[0099]  連続的部分は、複数のエッジによって定義され得る。複数のエッジは、テッセレーションステージ２４がテッセレートするドメイン内に周を形成し、部分は、周内のドメインの連続的領域であってよい。本開示で説明されている技術では、連続的部分は、連続的部分の周内に入るドメイン内の任意のプリミティブを含み得る。
【００７９】
[0100]  例えば、連続的(contiguous)という用語は、ドメイン内のプリミティブを除外する、この部分内の、ギャップがないことを意味する。例えば、ドメイン内のプリミティブが部分の周内にある場合、そのプリミティブは、その部分の一部である。連続的部分(contiguous portion)の概念の理解をさらに助けるために、連続的部分は、ドメイン内のプリミティブを構築するために使用されるリングと混同されるべきでない。
【００８０】
[0101]  いくつかの他の技術は、プリミティブを構築するために使用されるリングの各々の中のプリミティブを出力する。これらの例では、テッセレーションステージ２４とは別の、テッセレーションステージが、最初に、外側リングに沿ってプリミティブを出力する。この外側リングは、ドメイン内にギャップを形成する。例えば、ドメイン内の中心点は、リングによって囲まれているドメインの領域内に入るが、これらの他の技術のテッセレーションステージは、リング内の頂点のドメイン座標を出力するときに中心点を除外する。言い換えれば、これらのリングは、リング内の領域がリングの一部とならないように除外されるので、連続的部分として考慮されるべきである。
【００８１】
[0102]  本開示で説明されている技術によれば、テッセレーションステージ２４は、プリミティブの頂点を出力することができ、プリミティブは、連続的部分内の１つまたは複数の対角線ストリップに配置構成される。プリミティブの対角線ストリップは４つの辺を備え、４辺のうちの２辺は平行である。これら２つの平行な辺は、各々、対角線ストリップ内にプリミティブの各々のうちの少なくとも１つを備え得る。また、２つの平行な辺のうちの各々にある頂点の数は、異なっていてもよい。
【００８２】
[0103]  例えば、対角線ストリップは、３つのプリミティブを含むと仮定する。この例では、対角線ストリップの平行な辺のうちの第１の辺は、３つの点を備え、対角線ストリップの平行な辺のうちの第２の辺は、２つの点を備え得る。第１の辺上の３つの点を第２の辺上の２つの点と相互接続することによって、テッセレーションユニットは、対角線ストリップ内に３つのプリミティブを構築できる。この例では、第１の辺上の３つの点は、３つの頂点を形成し、第２の辺上の２つの点は、２つの頂点を形成し得る。対角線ストリップ内のプリミティブは、頂点を共有するので、テッセレーションステージ２４は、対角線ストリップの平行な辺のうちの第１の辺に沿って配置される３つの頂点のみと、対角線ストリップの平行な辺のうちの第２の辺に沿って配置される２つの頂点とを使用して３つのプリミティブを構築できる。
【００８３】
[0104]  いくつかの例では、テッセレーションユニット２４は、第１の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第１の対角線ストリップは、連続的部分内に配置される。第１の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニット２４は、第２の対角線ストリップ内に配置されるプリミティブの頂点を出力することができ、第２の対角線ストリップは、連続的部分内に配置される。
【００８４】
[0105]  いくつかの例では、第２の対角線ストリップは、第１の対角線ストリップと平行であり得る。これらの例では、第２の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップ内のプリミティブの数と異なり得る。他の例では、第２の対角線ストリップは、第１の対角線ストリップと接し得る。これらの例では、第２の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップ内のプリミティブの数と同じであり得る。
【００８５】
[0106]  第２の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、テッセレーションユニット２４は、次いで、第３の対角線ストリップ内に配置されるプリミティブの頂点を出力できる。第３の対角線ストリップは、第１の対角線ストリップと平行であり得る。また、第３の対角線ストリップ内に配置されるプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップに配置されるプリミティブの数と異なり得る。
【００８６】
[0107]  テッセレーションユニット２４は、テッセレーションユニット２４がドメインの部分のうちの１つの中のプリミティブを出力することを完了するまで対角線ストリップ内のプリミティブを出力できる。テッセレーションユニット２４は、ドメイン内の他の部分の中のプリミティブを実質的に類似の方法で出力できる。
【００８７】
[0108]  上で説明されている方法で頂点を出力することによって、ＧＰＵ１２は、ドメインシェーダステージ２６のインスタンス化をより少ない回数で実行できる。例えば、再利用バッファのサイズに制限があるので、再利用バッファは、テッセレーションステージ２４によって出力された頂点のすべてを格納することができない場合がある。例えば、上で説明されているように、再利用バッファは、再利用バッファが満杯で、ドメインシェーダステージ２６が新たに変換されたパッチ座標を格納することを試みているときに先入れ先出し置換方式を実施できる。本開示で説明されている技術は、ドメインシェーダステージ２６が第１のプリミティブの頂点をドメイン座標からパッチ座標に変換した後、第２のプリミティブと共有される頂点に対するパッチ座標が、テッセレーションステージ２４が第２の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力する前に再利用バッファからウォッシュアウトされない確率を高めることができ、また第３の対角線ストリップについても同様である。
【００８８】
[0109]  上で説明されているように、テッセレーションユニット２４は、ドメインを複数の部分に分割できる。テッセレーションステージ２４がドメインを複数の部分に分割する方法は、ハルシェーダステージ２２によって出力されるテス係数と、再利用バッファ内の記憶スロットの数（すなわち、再利用バッファの記憶能力）とに基づき得る。例えば、四角形ドメインについては、ハルシェーダステージ２２は、リングの各辺が分割されるべきセグメントの数を出力できる。リングの各辺に沿ったに沿ったセグメントの数は、ハルシェーダステージ２２によって出力されるテス係数の一例である。
【００８９】
[0110]  四角形ドメインの各辺が分割されるべきセグメントの数は、四角形ドメインの各辺上の点の数を示し得る。例えば、１つの辺が５つのセグメントに分割される場合、テッセレーションステージ２４は、その辺上に６個の点があると決定し得る（１つの点が辺の各端に、中間部に４つの点があり、辺を５つのセグメントに分割する）。
【００９０】
[0111]  四角形ドメインについては、ハルシェーダステージ２２は、縦の辺が分割されるべきセグメントの数を定義する縦の辺に対するテス係数を出力できる。このテス係数は、ｆyと称され得る。ハルシェーダステージ２２は、横の辺が分割されるべきセグメントの数を定義する横の辺に対するテス係数も出力できる。このテス係数は、ｆxと称され得る。
【００９１】
[0112]  テッセレーションステージ２４は、これら２つのテス係数うちのどちらの値が小さい（または場合によっては等しい）かを決定できる（例えば、ｆx≦ｆyかどうか、またはｆy≦ｆxかどうか）。２つのうちの小さい方がｆ1と称されると仮定する。また、再利用バッファ内の記憶スロットの数はＣであると仮定する。この例では、テッセレーションステージ２４は、ｆ1＋１がＣ−２以下かどうかを決定し得る。ｆ1＋１がＣ−２以下である場合、テッセレーションステージ２４は、四角形ドメインを２つの部分に分割することができ（例えば、四角形ドメインを二つ組に分割する）、これら２つの部分のうちの一方または両方は、連続的部分である。
【００９２】
[0113]  この例では、テッセレーションステージ２４は、第１の連続的部分内の第２の対角線ストリップが後に続く、２つの部分のうちの第１の連続的部分内の第１の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力できる。この例では、第２の対角線ストリップは、第１の対角線ストリップと接するものとしてよく、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数は、同じであってよい。次いで、テッセレーションステージ２４は、第１の連続的部分の第３の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力し得る。第３の対角線ストリップは、第１の対角線ストリップと平行であり、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数と異なり得る。
【００９３】
[0114]  テッセレーションステージ２４は、テッセレーションステージ２４が第１の連続的部分内でプリミティブを出力することを終了するまで類似の方法でプリミティブのドメイン座標を出力することを繰り返すことができる。次いで、テッセレーションステージ２４は、第２の連続的部分で続行し、実質的に類似の方法で第２の連続的部分内の頂点のドメイン座標を出力できる。ｆ1＋１がＣ−２以下であるこの例におけるプリミティブのドメイン座標を出力することは、テッセレーションステージ２４の第１の動作モードと称され得る。
【００９４】
[0115]  テッセレーションステージ２４が、ｆ1＋１がＣ−２以下でないと決定した場合、テッセレーションステージ２４は、ｆ1／２＋１がＣ−１以下であるかを決定し得る。ｆ1／２＋１がＣ−１以下である場合、テッセレーションステージ２４は、四角形ドメインを４つの部分（例えば、四つ組）に分割することができ、これら４つの部分のうちの１つまたは複数は、連続的部分である。
【００９５】
[0116]  この例では、テッセレーションステージ２４は、第１の連続的部分内の第２の対角線ストリップが後に続く、４つの部分のうちの第１の連続的部分内の第１の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力できる。この例では、第２の対角線ストリップは、第１の対角線ストリップと平行であってよく、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数は、異なり得る。次いで、テッセレーションステージ２４は、第１の連続的部分の第３の対角線ストリップ内のプリミティブの頂点のドメイン座標を出力し得る。第３の対角線ストリップは、第１および第２の対角線ストリップと平行であり、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップおよび第２の対角線ストリップ内のプリミティブの数と異なり得る。
【００９６】
[0117]  テッセレーションステージ２４は、テッセレーションステージ２４が第１の連続的部分内でプリミティブを出力することを終了するまで類似の方法でプリミティブのドメイン座標を出力することを繰り返すことができる。次いで、テッセレーションステージ２４は、第２の連続的部分で続行し、実質的に類似の方法で第２の連続的部分内の頂点のドメイン座標を出力することができ、その後、第３および第４の部分が続く。ｆ1／２＋１がＣ−１以下であるこの例におけるプリミティブのドメイン座標を出力することは、テッセレーションステージ２４の第２の動作モードと称され得る。
【００９７】
[0118]  テッセレーションステージ２４が、ｆ1／２＋１がＣ−１以下でないと決定した場合、テッセレーションステージ２４は、四角形ドメインを４つより多い部分に分割し得る。この例では、テッセレーションステージ２４は、第３の動作モードで動作し得る。例えば、テッセレーションステージ２４は、四角形ドメインを５つの部分に分割し得る。５つの部分のうちの４つで、テッセレーションステージ２４は、第１の動作モードを実施し得る。第５の部分で、テッセレーションステージ２４は、第２の動作モードを実施し得る。
【００９８】
[0119]  前の例ではテッセレーションステージ２４を、ｆ1＋１がＣ−２以下であるかどうか、またはｆ1／２＋１がＣ−１以下であるかどうかを決定するものとして説明したが、本開示の態様はそのように限定されないことは理解されるであろう。一般に、いかなるコンポーネントも、ｆ1＋１がＣ−２以下かどうか、またはｆ1／２＋１がＣ−１以下かどうかを決定できる。
【００９９】
[0120]  例えば、ＧＰＵ１２は、再利用バッファ内のスロットの数（すなわち、Ｃの値）をハルシェーダステージ２２にロードし、ハルシェーダステージ２２は、上記の決定を行い、ドメインが分割されるべき方法をテッセレーションステージ２４に指示できる。別の例として、ＧＰＵ１２のコントローラは、上記の決定を行い、ドメインが分割されるべき方法をテッセレーションステージ２４に指示できる。
【０１００】
[0121]  上記の例では、四角形メインに対する第１、第２、または第３の動作モードについて説明した。テッセレーションステージ２４は、例えばドメインが三角形ドメインであるときに第１、第２、または第３の動作モードを実施することもできる。三角形ドメインについては、ハルシェーダステージ２２は、ｆxおよびｆyテス係数を定義する代わりに、ｆtと称される、１つのテス係数を定義し得る。
【０１０１】
[0122]  この例では、ｆt＋１がＣ−２以下である場合、テッセレーションステージ２４は、三角形ドメインを２つの部分に分割することによって第１の動作モードを実施し得る。この例では、２つの部分のうちの一方は、他方の部分と異なるサイズを有していてもよい。次いで、テッセレーションステージ２４は、最大のサイズのドメインに対して上で説明されているように第１、第２、および第３の三角形におけるプリミティブのドメイン座標を出力できる。より小さいサイズのドメインについては、テッセレーションステージ２４は、第２の動作モードを実施し得る。
【０１０２】
[0123]  この例では、三角形ドメインについて、ｆt＋１がＣ−２以下でなく、ｆt／２＋１がＣ−１以下である場合に、テッセレーションステージ２４は、第２の動作モードを実施する。例えば、テッセレーションステージ２４は、三角形ドメインを３つの部分（例えば、三つ組）に分割し、３つの部分の各々に対して第２の動作モードを実施できる。この例では、ｆt／２＋１がＣ−１以下でない場合、テッセレーションステージ２４は、第３の動作モードを実施する。例えば、テッセレーションステージ２４は、三角形ドメインを３つより多い部分に分割し得る。テッセレーションステージ２４は、これらの部分のうちのいくつかに対して第２の動作モードを実施し、他の部分のいくつかに対して第３の動作モードを実施できる。
【０１０３】
[0124]  ドメインが三角形ドメインである例では、テッセレーションステージ２４は、ｆt＋１がＣ−２以下であるかどうか、またはｆt／２＋１がＣ−１以下であるかどうかを決定できる。しかしながら、上記のように、本開示で説明されている技術は、そのように限定されない。一般に、他の任意のコンポーネントが、これらの決定を行い、三角形ドメインが分割されるべき方法をテッセレーションステージ２４に指示できる。
【０１０４】
[0125]  上記の例示的な技術は、一様テッセレーション(uniform tessellation)がある場合にドメイン全体に適用可能であるものとしてよい。一様テッセレーションでは、外側リングに対するテス係数は、内側リングに対するテス係数と同じである。しかしながら、他の例では、ハルシェーダステージ２２は、一番外側のリング、および内側のリングについて、異なる数のテス係数を定義できる。例えば、一番外側のリングは、ドメインの周に相当するものとしてよく、ハルシェーダステージ２２は、内側リング内のセグメントの数と比較して、一番外側のリング上のセグメントの異なる数を定義できる。
【０１０５】
[0126]  この例では、テッセレーションステージ２４は、内側リングで囲まれているドメインに対して第１、第２、または第３の動作モードを実施できる。例えば、第１の内側リング（例えば、一番外側のリングの後のリング）は、サブセットドメインと考えられ、テッセレーションステージ２４は、サブセットドメインに対して第１、第２、または第３の動作モードを実施できる。一番外側のリング（すなわち、サブセットドメインの一部でないドメインの一部）内のプリミティブについて、テッセレーションステージ２４は、それらのプリミティブを任意の順序で出力できる。
【０１０６】
[0127]  図２は、本開示で説明されている１つまたは複数の例によるグラフィックス処理パイプラインの別の例を実施できるグラフィックスプロセッシングユニット（ＧＰＵ）の別の例を示す概念図である。例えば、図１は、Ｄｉｒｅｃｔ３Ｄ  １１  ＡＰＩなどのＤｉｒｅｃｔＸ  １１．ｘ  ＡＰＩに実質的に従って定式化されるグラフィックス処理パイプラインを示している。図２は、実質的にＯｐｅｎＧＬ  ４．ｘ  ＡＰＩによるグラフィックス処理パイプラインを示している。
【０１０７】
[0128]  ＯｐｅｎＧＬ  ４．ｘグラフィックス処理パイプラインは、Ｄｉｒｅｃｔ３Ｄ  １１グラフィックス処理パイプラインと実質的に類似の形式で機能し得る。従って、簡潔にするために、Ｄｉｒｅｃｔ３Ｄ  １１グラフィックス処理パイプラインとＯｐｅｎＧＬ  ４．ｘグラフィックス処理パイプラインの両方に類似しているコンポーネントについて説明するために図１が参照されている。
【０１０８】
[0129]  図２の例に示されているように、ＧＰＵ１２は、入力アセンブラ３６と、頂点シェーダ３８と、テッセレーション制御シェーダ４０と、プリミティブ生成器４２と、テッセレーション評価シェーダ４４と、ジオメトリシェーダ４６と、クリップリングユニット４８と、ラスタライザ５０と、フラグメントシェーダ５２と、ポストプロセッサ５４とを備える。図１と同様に、図２に示されている例において、ＧＰＵ１２は、図２に示されているものよりも多い、または少ないコンポーネントを備え得る。また、ユニットの特定の順序付けは、例示のために与えたものであり、限定的であると考えられるべきではない。
【０１０９】
[0130]  いくつかの方法で、ＯｐｅｎＧＬ  ４．ｘグラフィックス処理パイプラインをともなうテッセレーションプロセスは、Ｄｉｒｅｃｔ３Ｄ  １１グラフィックス処理パイプラインを備えるテッセレーションプロセスと実質的に類似しているものとしてよい。例えば、ＯｐｅｎＧＬ  ４．ｘテッセレーションプロセスは、図１に関して上で説明されているのと似た方法で、パッチおよび制御点に依存し得る。例えば、図２の入力アセンブラ３６および頂点シェーダ３８は、それぞれ、図１の入力アセンブラステージ１８および頂点シェーダステージ２０と実質的に同様に機能し得る。
【０１１０】
[0131]  より多くの例として、テッセレーションに関して、図２のテッセレーション制御シェーダ４０は、図１のハルシェーダステージ２２と実質的に同様に機能し得る。しかしながら、テッセレーション制御シェーダ４０は、Ｄｉｒｅｃｔ３Ｄ  １１のテス係数に類似する、テッセレーションレベルを出力する。例えば、ＯｐｅｎＧＬ  ４．ｘのテッセレーションレベルは、ドメインタイプと、ドメイン内のリングの数と、リングエッジごとの点の数とを定義できる。
【０１１１】
[0132]  プリミティブ生成器４２は、テッセレーションステージ２４と実質的に類似する方法で機能し得る。例えば、プリミティブ生成器４２は、テッセレーションレベルとドメインタイプとを利用して、ドメインを複数のプリミティブに分割できる。また、本開示で説明されている技術によれば、プリミティブ生成器４２は、上で説明されている方法でプリミティブのドメイン座標を出力できる。例えば、プリミティブ生成器４２は、プリミティブの頂点のドメイン座標を出力することができ、プリミティブは、対角線ストリップ内に配置される。
【０１１２】
[0133]  図１のテッセレーションユニット２４と同様に、プリミティブ生成器４２は、ドメインを複数の部分に分割することができ、少なくとも１つの部分は、連続的部分である。次いで、プリミティブ生成器４２は、連続的部分内の頂点プリミティブのドメイン座標を出力し得る。例えば、プリミティブ生成器４２は、第１の対角線ストリップ内に配置されるプリミティブの頂点のドメイン座標を出力し、続いて第２の対角線ストリップ、そして第３の対角線ストリップと続くものとしてよい。さらに、プリミティブ生成器４２は、テッセレーションステージ２４に関して上で説明されている異なる例示的な動作モードを実施し得る。
【０１１３】
[0134]  図２のテッセレーション評価シェーダ４４は、図１のドメインシェーダステージ２６と実質的に同様に機能し得る。例えば、テッセレーション評価シェーダ４４は、プリミティブ生成器４２から生成されたプリミティブの頂点を受信し、プリミティブを、テッセレーション制御シェーダ４０によって出力されるパッチに付加できる。この方法で、ＯｐｅｎＧＬ  ４．ｘ  ＡＰＩのグラフィックス処理パイプラインは、パッチに対してテッセレーションを行い、パッチの解像度を高めることができる。
【０１１４】
[0135]  ジオメトリシェーダ４６は、ジオメトリシェーダステージ２８と実質的に同様に機能し得る。図２における、クリッピングユニット４８およびラスタライザ５０の組合せは、図１のラスタライザステージ３０と実質的に同様に機能し得る。図２のフラグメントシェーダ５２およびポストプロセッサ５４は、それぞれ、図１のピクセルシェーダステージ３２および出力マージステージ３４と実質的に同様に機能し得る。ポストプロセッサ５４は、最終ピクセル値をフレームバッファに出力し、表示プロセッサは、フレームバッファからピクセル値を取り出して、ピクセル値に従ってディスプレイを点灯させ、画像を表示できる。
【０１１５】
[0136]  上で説明されているように、図２のテッセレーション制御シェーダ４０、プリミティブ生成器４２、およびテッセレーション評価シェーダ４４は、テッセレーションプロセスを実施するために、それぞれ、図１のハルシェーダステージ２２、テッセレーションステージ２４、およびドメインシェーダステージ２６と実質的に同様に機能する。従って、Ｄｉｒｅｃｔ３Ｄ  １１  ＡＰＩとＯｐｅｎＧＬ  ４．ｘ  ＡＰＩの両方は、テッセレーションプロセスを実施するために２つのプログラム可能なシェーダユニットと１つの固定機能ユニットとに依存する。
【０１１６】
[0137]  一般化のために、本開示で説明されている技術は、第１のテッセレーションシェーダユニット、テッセレーションユニット、および第２のテッセレーションシェーダユニットを用いて説明され得る。第１のテッセレーションシェーダユニットの例として、ハルシェーダステージ２２およびテッセレーション制御シェーダ４０が挙げられる。テッセレーションユニットの例として、テッセレーションステージ２４およびプリミティブ生成器４２が挙げられる。第２のテッセレーションシェーダユニットの例として、ドメインシェーダステージ２６およびテッセレーション評価シェーダ４４が挙げられる。
【０１１７】
[0138]  また、Ｄｉｒｅｃｔ３Ｄ  １１では「テス係数」という用語を使用し、ＯｐｅｎＧＬ  ４．ｘ  ＡＰＩでは、「テッセレーションレベル」という用語を使用し、これは類似の用語と考えられ得る。一般化を目的として、本開示では、テス係数とテッセレーションレベルとを例として含む、「テッセレーション係数」という用語を使用する。このようにして、第１のシェーダユニットは、テッセレーション係数をテッセレーションユニットに出力するものとして考えられ、テッセレーションユニットは、テッセレーション係数に応答して頂点を第２のシェーダユニットに出力し得る。
【０１１８】
[0139]  Ｄｉｒｅｃｔ３Ｄ  １１およびＯｐｅｎＧＬ  ４．ｘは、２つのシェーダユニットと１つの固定機能ユニットとを利用するが、本開示で説明されている技術は、そのように限定されないことに留意されたい。例えば、他のシステムでは、第１および第２のシェーダユニットが固定機能ユニットであり、テッセレーションユニットがシェーダユニットであることも可能であり得る。別の例として、すべて、固定機能ユニットであるか、またはすべて、シェーダユニットであるか、またはこれらの組合せであるものとしてよい。
【０１１９】
[0140]  従って、いくつかの例において、第１のユニットが第１のシェーダユニットと同様の機能を行うが、シェーダユニットまたは固定機能ユニットであってよく、第２のユニットがテッセレーションユニットと同様の機能を行うが、シェーダユニットまたは固定機能ユニットであってよく、第３のユニットが第２のシェーダユニットと同様の機能を行うが、シェーダユニットまたは固定機能ユニットであってよいことが企図され得る。さらに、第１のシェーダユニット、テッセレーションユニット、および第２のシェーダユニットが図１および図２において別々なユニットとして示されているけれども、本開示の態様は、そのように限定されない。これらのユニット、および場合によっては、図１および図２に示されているグラフィックス処理パイプラインのユニットは一緒に組み合わされて共通のユニットにされ得る。従って、これらのユニットの機能は、説明を簡単にするため別々に説明されているが、これらのユニットは、共有ハードウェア内に、または明確に区別できるコンポーネントとして実施され得る。
【０１２０】
[0141]  図３は、テッセレーションのための頂点のドメイン座標を出力する例示的な技術を示す図である。図３に示されている例は、テッセレーションステージ２４およびプリミティブ生成器４２ではなく、テッセレーションユニットの他の例によって実施され得る。図３は、三角形ドメインであるドメイン５６を示しており、点およびプリミティブパターンは、ドメイン５６の直線の中心に沿って対称的である。
【０１２１】
[0142]  図示されているように、ドメイン５６は、複数のプリミティブ（例えば、三角形）にテッセレートされる。他のいくつかの例では、本開示のテッセレーションユニットに似ず、テッセレーションユニットは、リングバイリング形式でプリミティブの頂点のドメイン座標を出力し、この例におけるリングは、三角形である。例えば、図３は、リング５８とリング６０とを示している。リング５８は、一番外側のリングであり、ドメイン５６の境界に接するプリミティブを備える。リング６０は、ドメイン５６の境界に配置されるリング６０内のプリミティブがないので、第１の内側リングである。
【０１２２】
[0143]  いくつかの他の技術では、これらの他の技術のテッセレーションユニットは、リング５８内に配置されるプリミティブのすべてのドメイン座標を出力する。次いで、これらの他の技術のテッセレーションユニットは、リング６０内に配置されるすべてのプリミティブのドメイン座標を出力する。図３に示されているように、これらのプリミティブのうちのいくつかは、理解を助けるために番号を振られている。例えば、これらの他の技術のテッセレーションユニットは、プリミティブ１、続いてプリミティブ２、続いてプリミティブ３、など、プリミティブ４２までの、ドメイン座標を、これらのプリミティブがすべてリング５８内に配置されているので、出力する。次いで、これらの他の技術のテッセレーションユニットは、プリミティブ４３から始まるリング６０内のプリミティブのドメイン座標を出力する。
【０１２３】
[0144]  図３に示されている例において、プリミティブ１は、ドメイン５６の第１のプリミティブであるので、これらの他の技術のテッセレーションユニットがプリミティブ１のドメイン座標を出力した後、ドメインシェーダは３回実行してプリミティブ１の３つのドメイン座標の各々をパッチ座標に変換し、対応するパッチ座標を再利用バッファに格納する。次いで、これらの他の技術のテッセレーションユニットが、プリミティブ２のドメイン座標を出力した後、ドメインシェーダは、プリミティブ２がプリミティブ１と２つの頂点を共有し、これら２つの頂点に対するパッチ座標は、再利用バッファ内に格納され得るので、１回だけ実行し得る。ドメインシェーダは、プリミティブ２の未共有の頂点を変換して、プリミティブ２の未共有の頂点のドメイン座標をパッチ座標に変換するものとしてよく、再利用バッファ内に対応するパッチ座標を格納した。
【０１２４】
[0145]  これらの他の技術のテッセレーションユニットは、これらの他の技術のテッセレーションユニットがプリミティブ４２のドメイン座標を出力するまで、リング５８に沿ってプリミティブのドメイン座標を出力できる。図３に示されているように、プリミティブ４２は、プリミティブ１と２つの頂点を共有する。しかしながら、再利用バッファのサイズに制限があるので、再利用バッファは、プリミティブ１のドメイン座標に対応するパッチ座標を取り除いている可能性がある。この場合、ドメインシェーダは、３回実行し、ドメイン座標を、プリミティブ１およびプリミティブ４２によって共有される頂点のパッチ座標に再変換できる。言い換えれば、ドメインシェーダは、プリミティブ１のドメイン座標をパッチ座標にすでに変換していたけれども、これらの他の技術では、ドメインシェーダは、プリミティブ１（すなわち、プリミティブ４２と共有されるもの）のドメイン座標をもう一度パッチ座標に変換しなければならない場合がある。
【０１２５】
[0146]  次いで、これらの他の技術における、テッセレーションユニットは、リング６０内のプリミティブ４３の頂点のドメイン座標を出力し得る。図示されているように、プリミティブ４３は、プリミティブ２と２つの頂点を共有し、プリミティブ２は、プリミティブ４２と１つの頂点を共有する。ここでは、ドメインシェーダは、２回実行し得る。例えば、プリミティブ４３は、プリミティブ４２と１つの頂点を共有するので、その頂点に対するパッチ座標は、再利用バッファ内に格納され得る。しかしながら、プリミティブ２と共有され、プリミティブ４２と共有されないプリミティブ４３の頂点については、再利用バッファのサイズに制限があるので、再利用バッファは、この頂点のドメイン座標に対応するパッチ座標を取り除き得る。この場合、ドメインシェーダは、ドメインシェーダがこの頂点のドメイン座標をパッチ座標にすでに変換しているとしてもこの頂点のドメイン座標をパッチ座標に変換するために実行する必要がある場合がある。
【０１２６】
[0147]  図４は、テッセレーションのための頂点のドメイン座標を出力する別の例示的な技術を示す図である。図４に示されている例は、テッセレーションステージ２４およびプリミティブ生成器４２ではなく、テッセレーションユニットの他の例によって実施され得る。図４は、四角形ドメインである、ドメイン６２を示している。点およびプリミティブパターンは、ドメイン６２の直線の中心に沿って対称的である。
【０１２７】
[0148]  図示されているように、ドメイン６２は、複数のプリミティブ（例えば、三角形）にテッセレートされる。他のいくつかの例では、本開示のテッセレーションユニットに似ず、テッセレーションユニットは、リングバイリング形式でドメイン６２内のプリミティブの頂点のドメイン座標を出力し、この例におけるリングは、矩形である。
【０１２８】
[0149]  説明を簡単にするため、ドメイン６２の外側リング内に配置されるプリミティブのうちのいくつかのみが図示されている。例えば、ドメイン６２の外側リングは、プリミティブ１からプリミティブ２１６までを含む。この例では、これらの他の技術のテッセレーションユニットは、プリミティブ１、続いてプリミティブ２、など、プリミティブ２１６までの、頂点に対するドメイン座標を出力する。
【０１２９】
[0150]  しかしながら、これらの他の技術では、これらの他の技術のテッセレーションユニットがプリミティブ２１６のドメイン座標を出力するときまでには、再利用バッファは、プリミティブ１のドメイン座標に対応するパッチ座標を取り除いている可能性がある。従って、プリミティブ２１６が、プリミティブ１と２つの頂点を共有するとしても、ドメインシェーダは、プリミティブ２１６のドメイン座標を対応するパッチ座標に変換するために３回実行する必要がある場合がある。
【０１３０】
[0151]  図５は、テッセレーションのための頂点のドメイン座標を出力する別の例示的な技術を示す図である。図５に示されている例は、テッセレーションステージ２４およびプリミティブ生成器４２ではなく、テッセレーションユニットの他の例によって実施され得る。図５は、四角形ドメインであるドメイン６４を示しており、点およびプリミティブパターンは、ドメイン６４の直線の中心に沿って対称的である。
【０１３１】
[0152]  図５に示されている例は、他のいくつかの技術でドメインシェーダの実行の回数を減らすことを試みた１つの例示的な方法である。例えば、図４では、これらの他の技術のテッセレーションユニットは、１つのリングからプリミティブを出力する。図５において、これらの他の技術のテッセレーションユニットは、２つのリング内のプリミティブのドメイン座標を同時に出力する。
【０１３２】
[0153]  そのような出力方式は、ドメインシェーダの必要な実行回数を減らすことができる。例えば、これらの他の技術のテッセレーションユニットが、プリミティブ５のドメイン座標を出力するときに、プリミティブ５がプリミティブ１および２と共有するドメイン座標に対するパッチ座標は、まだ、再利用バッファ内で利用可能であってもよい。しかしながら、図５に示されている方式であっても、望ましい以上の数の、ドメインシェーダのインスタンスを実行できる。例えば、これらの他の技術のテッセレーションユニットが、プリミティブ４１６のドメイン座標を出力するときに、プリミティブ４１６と共有されるプリミティブ５の頂点のドメイン座標に対するパッチ座標は、もはや、再利用バッファ内で格納され得ない。
【０１３３】
[0154]  このようにして、図３および図４に示されている例では、これらの他の技術のテッセレーションユニットは、各リングに対するプリミティブの１つのストリップを生成し、ユニットはさらにグラフィックスパイプライン内で（例えば、ドメインシェーダの後）同じリング内のプリミティブの間の再利用バッファ内の頂点を再利用することが可能であり得る。しかしながら、ユニットがさらにグラフィックスパイプライン内で再利用バッファのサイズに制限があるのでリングにまたがってプリミティブに対する頂点を再利用することが可能でないことがあり得る。この結果、ドメインシェーダの余分な実行が生じる。
【０１３４】
[0155]  例えば、再利用バッファが３２個のキャッシュスロットを備えていると仮定する。図３および図４に示されている例では、同じ頂点に対して２つのキャッシュミスがあり得る。キャッシュミスは、ドメイン座標に対する対応するパッチ座標が再利用バッファ内に格納されていないインスタンスを指すものとしてよい。例えば、図３および図４に示されている例において、ドメインシェーダが頂点についてドメイン座標をパッチ座標に変換した後、ドメインシェーダが、再利用バッファのサイズに制限があるので、この同じ頂点のドメイン座標をパッチ座標に変換するため少なくとももう一度実行することを必要とする可能性があり得る。
【０１３５】
[0156]  図５に示されている例は、図３および図４に示されている技術に関して、ドメインシェーダの実行回数を低減できる。しかしながら、いくつかの例では、リングのエッジに沿って最大６４個までの頂点があり得る。この場合、図５に示されている例であってもその結果、同じ頂点のドメイン座標をパッチ座標に変換するためにドメインシェーダを複数回実行し得る。
【０１３６】
[0157]  従って、図３〜図５で示されている技術は、再利用バッファの効率に制限を課す可能性がある。例えば、１つのリング内の頂点に対するドメイン座標に対応するパッチ座標は、第２のリングに対するドメイン座標を出力するときに失われる。また、図３を見るとわかるように、ドメイン５６の外側境界に沿って配置されるプリミティブ１から１４の頂点は、リング６０内のプリミティブのどれとも共有されない（リング６０内のプリミティブ４３以降）。従って、ドメイン５６の外側境界に沿って配置される頂点のドメイン座標に対応するパッチ座標が失われた場合に再利用バッファの効率にマイナスの影響を及ぼすことはほとんどもしくはまったくあり得ない。例えば、リングの１つの辺に沿った頂点が失われる場合、リングの他の辺に沿った頂点が再利用バッファ内に保存されている場合、再利用バッファの効率に対するマイナスの影響はほとんどもしくはまったくあり得ない。
【０１３７】
[0158]  しかしながら、図３〜図５の例では、リングの１つの辺に沿った頂点のそのような保存は行われ得ない。例えば、頂点のドメイン座標が図３〜図５の例において出力される順序は、軸に揃えられていると考えられ得る。これらの他の技術のテッセレーションユニットがプリミティブ１から１４のドメイン座標を出力した後、プリミティブ１５から２８の大半は、プリミティブ１から１４といかなる頂点をも共有しない（プリミティブ１５および１６は例外である）。しかしながら、リング６０内のプリミティブ４３以降は、プリミティブ１から１４と頂点を共有し、これの頂点はサイズに制限があるので再利用バッファ内で失われる。従って、プリミティブ１から１４に対するパッチ座標が、プリミティブ４３とそれ以降を出力するときに利用可能であることを保証することは、プリミティブ１５から２８に対するパッチ座標よりも望ましい場合がある。
【０１３８】
[0159]  上で説明されているように、本開示で説明されている技術は、再利用バッファの効率を最大化するためのドメイン座標の出力方式を備える。例えば、上で説明されているように、テッセレーションユニットは、本開示で説明されている技術により（例えば、テッセレーションステージ２４およびプリミティブ生成器４２）、ドメインを複数の部分に分割することができ、これらの部分のうちの少なくとも１つは、連続的部分である。図３〜図５に示されているリングは、連続的部分と考えられるべきでない。
【０１３９】
[0160]  例えば、本開示で使用されているように、連続的部分は、ドメイン内にギャップがないように連続的部分の領域内（例えば、連続的部分のエッジの端内）に入るプリミティブを含む。図３〜図５に示されているリングは、ドメイン内にギャップがあるようにリングによって囲まれている領域内に入るプリミティブを除外する。例えば、図３では、リング５８は、ドメイン５６のすべてを囲んでいるけれども、リング５８は、リング６０内に入るプリミティブを除外する。このようにして、リング５８は、ドメイン５６をくりぬき、ドメイン５６内にギャップを作成する。プリミティブのそのような類似の除外も、図４および図５に見ることができる。
【０１４０】
[0161]  テッセレーションユニット（例えば、テッセレーションステージ２４またはプリミティブ生成器４２）は、連続的部分内の対角線ストリップに沿ったドメイン座標を出力し得る。言い換えれば、テッセレーションユニットは、対角線ウォーキング方向でドメイン座標を出力する。本開示で使用されているような「ウォーキング」は、テッセレーションユニットがプリミティブのドメイン座標を出力するステップを指す。対角線ウォーキング方向に出力する潜在的利点の１つは、対角線ストリップの長さが１つのプリミティブのストリップの長さから始めて徐々に成長するという点である。この結果、対角線ストリップの外側から頂点が付加され、再利用バッファは、先入れ先出し方式で対角線ストリップの内側からの頂点を置き換えるものとしてよい。
【０１４１】
[0162]  図６は、本開示で説明されている１つまたは複数の例によるＧＰＵをより詳しく示しているブロック図である。例えば、図６は、ＧＰＵ１２の一例をさらに詳しく示している。図示されているように、ＧＰＵ１２は、テッセレーションユニット６６と、コントローラ７４と、ドメインシェーダ７６と、再利用バッファ７８とを備える。テッセレーションユニット６６は、図１のテッセレーションステージ２４または図２のプリミティブ生成器４２の一例である。再利用バッファ７８は、上で説明されている再利用バッファの一例である。
【０１４２】
[0163]  ドメインシェーダ７６は、ドメインシェーダ７６がＧＰＵ１２の１つまたは複数のシェーダコアなどのＧＰＵ１２上で実行することを示すため破線で示されており、シェーダコアは、ドメインシェーダ７６などのシェーダの実行のためのＧＰＵ１２の専用ハードウェアである。言い換えれば、この例では、ドメインシェーダ７６は、ハードウェアブロックではなく、むしろ、ハードウェアブロック上で実行するソフトウェアユニットである。ドメインシェーダ７６の一例は、ドメインシェーダステージ２６（図１）である。ドメインシェーダ７６の別の例は、テッセレーション評価シェーダ４４（図２）である。
【０１４３】
[0164]  コントローラ７４は、ＧＰＵ１２の機能全体を制御するＧＰＵ１２の制御ユニットであるものとしてよい。例えば、コントローラ７４は、シェーダプログラムを実行するかどうか、いつ実行するかを決定できる。コントローラ７４は、テッセレーションユニット６６の動作モードを決定することもできる。代替的に、テッセレーションユニット６６が、動作モードを決定できる。コントローラ７４は、ハードウェア、ハードウェア上で実行するソフトウェア、またはハードウェア上で実行するファームウェアであってよい。さらに、いくつかの例では、コントローラ７４がドメインシェーダ７６をいつ実行するかを決定する代わりに、または決定することに加えて、再利用バッファ７８は、ドメインシェーダ７６をいつ実行するかを決定するように構成されたキャッシュコントローラを備えることができる。しかしながら、例示することを目的として、これらの技術は、コントローラ７４が動作モードを決定し、ドメインシェーダ７６がいつ実行されるべきかを決定すること背景として説明されている。
【０１４４】
[0165]  コントローラ７４またはテッセレーションユニット６６のいずれかが、テッセレーションユニット６６の動作モードを決定できるので、本開示で説明されている技術は、テッセレーションユニット６６の動作モードを決定するように構成されている処理ユニットとして考えられ得る。いくつかの例では、処理ユニットは、コントローラ７４であってよい。いくつかの例では、処理ユニットは、テッセレーションユニット６６であってよい。いくつかの例では、処理ユニットは、コントローラ７４およびテッセレーションユニット６６の組合せであってよい。例示しやすくするために、上で説明されているように、動作モードを決定するための技術は、処理ユニットがコントローラ７４である例を用いて説明されている。しかしながら、処理ユニットは、代替的に、またはコントローラ７４と連携する形で、テッセレーションユニット６６であってもよい。
【０１４５】
[0166]  図示されているように、テッセレーションユニット６６は、セットアップユニット６８と、点生成器７０と、接続生成器７２とを備える。セットアップユニット６８、点生成器７０、および接続生成器７２は、テッセレーションユニット６６の固定機能ハードウェアユニットであってよい。セットアップユニット６８、点生成器７０、および接続生成器７２は、説明を簡単にするために、別々のコンポーネントとして図示されている。セットアップユニット６８、点生成器７０、および接続生成器７２は、単一のユニットとして、別のユニットとして、またはこれらの組合せとして形成され得る。
【０１４６】
[0167]  セットアップユニット６８は、図１のハルシェーダステージ２２または図２のテッセレーション制御シェーダ４０などの第１のシェーダユニットからの入力としてテッセレーション係数を受信し、テッセレーション係数からドメインタイプを決定できる。例えば、４つのテッセレーション係数がある場合、セットアップユニット６８は、ドメインタイプが三角形であると決定し、６つのテッセレーション係数がある場合、セットアップユニット６８は、ドメインタイプが四角形であると決定し得る。セットアップユニット６８は、補正丸め問題(correcting rounding problems)、天井および床関数(ceiling and floor functions)、テッセレーション係数の１／２の決定、並びにテッセレーション係数の低減および組合せなどの他のセットアップ機能を行い得る。一般に、セットアップユニット６８は、テッセレーション係数を処理して、テッセレーションユニット６６の他のコンポーネントが各機能を行えることを保証し得る。
【０１４７】
[0168]  点生成器７０は、テッセレーション係数からの、ドメインの各リングの各エッジに沿って配置される点の数と、点の配置（例えば、点のｕ、ｖ座標またはｕ、ｖ、ｗ座標）を決定できる。接続生成器７２は、点を接続（すなわち、ステッチ）してドメイン内に複数のプリミティブを形成できる。
【０１４８】
[0169]  いくつかの例では、接続生成器７２は、本開示で説明されている技術を実施するように構成され得る。例えば、接続生成器７２は、図３〜図５に示されているようにプリミティブのドメイン座標を出力するのではなく、ドメインを複数の部分に分割し、それらの部分内の対角線ストリップにおけるプリミティブのドメイン座標を出力するように構成され得る。いくつかの例では、点生成器７０および接続生成器７２は、ドメイン座標を出力するために連携して機能し得る。
【０１４９】
[0170]  例えば、点生成器７０は、第１の対角線ストリップ内に配置されるプリミティブの頂点の座標を決定することができ、第１の対角線ストリップは、連続的部分内に配置される。次いで、点生成器７０は、決定された座標を接続生成器７２に出力できる（例えば、再利用バッファ７８とは別の、図６に示されていない、シャローバッファを介して）。接続生成器７２は、プリミティブをアセンブルし、第１の対角線ストリップ内に配置されるプリミティブの頂点のドメイン座標を出力することができ、第１の対角線ストリップは、連続的部分内に配置される。点生成器７０は、第２の対角線ストリップ内に配置されるプリミティブの頂点の座標も決定し、第２の対角線ストリップは連続的部分内に配置され、決定された座標を接続生成器７２に（例えば、シャローバッファを介して）出力できる。第１の対角線ストリップ内に配置される頂点のドメイン座標を出力した後、接続生成器７２は、第２の対角線ストリップ内に配置される頂点のドメイン座標を出力することができ、第２の対角線ストリップは、連続的部分内に配置される。
【０１５０】
[0171]  一動作モードにおいて、第２の対角線ストリップは、第１の対角線ストリップと平行であるものとしてよく、接続生成器７２は、第２の平行な対角線ストリップ内に配置される頂点のドメイン座標を出力し得る。この例では、平行な対角線ストリップは、第１の対角線ストリップと異なる数のプリミティブを含み得る。
【０１５１】
[0172]  別の動作モードでは、第２の対角線ストリップは、第１の対角線ストリップと接し得る。本開示で使用されているように、接するは、第２の対角線ストリップ内のただ１つのプリミティブが、第１の対角線ストリップ内のただ１つのプリミティブと２つの頂点を共有することを意味する。このようにして、第２の対角線ストリップは、第１の対角線ストリップに、ただ１つのプリミティブのところで接続され、従って、第１の対角線ストリップと接すると考えられ得る。この例では、接する対角線ストリップは、第１の対角線ストリップと同じ数のプリミティブを含み得る。
【０１５２】
[0173]  また、点生成器７０は、第３の対角線ストリップ内の配置されるプリミティブの頂点の座標を決定し、決定された座標を接続生成器７２に（例えば、シャローバッファを介して）出力し得る。第２の対角線ストリップ内に配置されるプリミティブの頂点を出力した後、接続生成器７２は、次いで、連続的部分内にある第３の対角線ストリップ内に配置されるプリミティブの頂点を出力できる。いずれかの動作モードにおいて、第３の対角線ストリップは、第１の対角線ストリップと平行であり得る。例えば、第１および第２の対角線ストリップが互いに平行である動作モードにおいて、第３の対角線ストリップは、第１と第２の両方の対角線ストリップと平行であるものとしてよい。第２の対角線ストリップが第１の対角線ストリップに接する動作モードでは、第３の対角線ストリップは、第１の対角線ストリップと平行であるが、第２の対角線ストリップとは平行でない場合がある。
【０１５３】
[0174]  点生成器７０は、プリミティブの座標を決定することができ、接続生成器７２は、接続生成器７２がドメインの連続的部分のうちの１つの中のプリミティブを出力することを完了するまで対角線ストリップ内のプリミティブを出力できる。点生成器７０は、プリミティブの座標を決定することができ、次いで、接続生成器７２は、ドメイン内の別の連続的部分内のプリミティブを実質的に類似の方法で出力できる。
【０１５４】
[0175]  接続生成器７２は、１つのプリミティブのドメイン座標をコントローラ７４に出力できる。次いで、コントローラ７４は、再利用バッファ７８が出力されたドメイン座標に対応するパッチ座標を格納するかどうかを決定できる。例えば、ドメイン座標は、再利用バッファ７８へのインデックスであり得る。上で説明されているように、ドメイン座標はデカルト座標（例えば、ｕ、ｖ座標）または重心座標（例えば、ｕ、ｖ、ｗ座標）とすることができる。ｕ座標、ｖ座標、およびｗ座標は、各々、１７ビットとしてよい。従って、ｕ、ｖ座標は、３４個のビットを含み得るが、ｕ、ｖ、ｗ座標は、５１個のビットを含み得る。
【０１５５】
[0176]  コントローラ７４は、これら３４個または５１個のビットを再利用バッファ７８内のＸＯＲゲートに出力し得る。ＸＯＲゲートは、受信されたビットを再利用バッファ７８のインデックスを示すビットと比較し得る。ＸＯＲゲートの出力が、受信されたビットが再利用バッファ７８内のインデックスと一致することを示している場合、再利用バッファ７８は、キャッシュヒットをコントローラ７４に出力できる。キャッシュヒットは、再利用バッファ７８が３４個または５１個のビットを形成したドメイン座標に対するパッチ座標を格納することを意味する。ＸＯＲゲートの出力が、受信されたビットが再利用バッファ７８内のインデックスと一致しないことを示している場合、再利用バッファ７８は、キャッシュミスをコントローラ７４に出力できる。キャッシュミスは、再利用バッファ７８が３４個または５１個のビットを形成したドメイン座標に対するパッチ座標を格納しないことを意味する。
【０１５６】
[0177]  キャッシュヒットが生じた場合、コントローラ７４は、再利用バッファ７８がすでに、３４個または５１個のビットを形成したドメイン座標に対するパッチ座標を格納しているので、ドメインシェーダ７６のインスタンス化を実行させ得ない。この場合、コントローラ７４は、グラフィックスパイプラインのその後のユニットに、さらなる処理のため出力されたドメイン座標に対応するパッチ座標を読み出させることができる。例えば、コントローラ７４は、ジオメトリシェーダステージ２８（図１）またはジオメトリシェーダ（図２）に、さらなる処理のため再利用バッファ７８から出力されたドメイン座標に対応するパッチ座標を読み出させることができる。
【０１５７】
[0178]  キャッシュミスが生じた場合、コントローラ７４は、再利用バッファ７８が３４個または５１個のビットを形成したドメイン座標に対するパッチ座標を格納していないので、ドメインシェーダ７６のインスタンス化を実行させ得る。この場合、コントローラ７４は、ドメイン座標をドメインシェーダ７６に供給し、ドメインシェーダ７６は、ドメイン座標を対応するパッチ座標に変換できる。ドメインシェーダ７６は、パッチ座標を再利用バッファ７８に出力し得る。再利用バッファ７８は、次いで、ドメイン座標を形成した３４個または５１個のビットに等しいインデックスでパッチ座標を格納できる。再利用バッファ７８が、パッチ座標を格納した後、コントローラ７４は、グラフィックスパイプラインのその後のユニットに、さらなる処理のため再利用バッファ７８からパッチ座標を読み出させることができる。
【０１５８】
[0179]  コントローラ７４は、接続生成器７２によって出力されるドメイン座標の各々についてこれらのステップを繰り返すことができる。例えば、キャッシュミスごとに、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させ、キャッシュミスごとに、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させ得ない。
【０１５９】
[0180]  上で説明されているように、本開示で説明されている技術は、ドメインシェーダ７６のインスタンス化の回数を最小限度に抑えることができる。この目的のために、本開示で説明されている技術は、発生するキャッシュミスの回数を最小限度に抑えることができる。例えば、連続的部分内で対角線ストリップ内のプリミティブのドメイン座標を出力することで、共有される頂点のドメイン座標に対応するパッチ座標が再利用バッファ７８内に残り、再利用バッファ７８が未共有頂点のドメイン座標に対応するパッチ座標を取り除く（例えば、ウォッシュアウトする）確率が増大する。
【０１６０】
[0181]  本開示で説明されている技術において、対角線ストリップの各々は、第１の辺（例えば、内側）と第２の辺（例えば、外側）とを備えるものとしてよい。第１、第２、および第３の対角線ストリップがすべて互いに平行である例示的な動作モードにおいて、第１の対角線ストリップの外側は、第２の対角線ストリップの内側と同じであり、第２の対角線ストリップの外側は、第３の対角線ストリップの内側と同じであってよい。この例では、対角線ストリップの各々におけるプリミティブの数は、異なり得る。
【０１６１】
[0182]  一例として、第２の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップ内のプリミティブの数よりも多く、第３の対角線ストリップ内のプリミティブの数は、第１および第２の対角線ストリップ内のプリミティブの数よりも多くなり得る。この結果、第１の対角線ストリップの外側の頂点の数は第１の対角線ストリップの内側の頂点の数より多くなり、第２の対角線ストリップの外側の頂点の数は第２の対角線ストリップの内側の頂点の数より多くなり、第２の対角線ストリップの内側は、第１の対角線ストリップの外側と同じである。
【０１６２】
[0183]  対角線ストリップの外側の頂点のドメイン座標に対応するパッチ座標が再利用バッファ７８内に留まることを保証することによって、本開示で説明されている技術は、再利用バッファ７８内に格納されているパッチ座標の数を徐々に増やして行くことができる。次いで、再利用バッファ７８が満杯になったときに、再利用バッファ７８は、対角線ストリップの内側に沿って配置される頂点のドメイン座標に対応するパッチ座標を取り除くことができる。対角線ストリップの内側にはプリミティブが少ないので、これらのプリミティブは、ドメイン内の他のプリミティブと、同じ数の頂点を、もしあっても、共有し得ない。従って、これらの内側の頂点のドメイン座標に対応するパッチ座標が、再利用バッファ７８から取り除かれた場合、ドメインシェーダ７６の必要な実行回数に対する影響は、わずかなものとし得る。このようにして、この動作モードでは、図３〜図５に関して上で説明されている例と比較して、ドメインシェーダ７６の必要な実行回数を減らすことができる。
【０１６３】
[0184]  第２の対角線ストリップが第１の対角線ストリップと接する例示的な動作モードでも、共有される頂点のドメイン座標に対応するパッチ座標が再利用バッファ７８内に残る確率を高めることによってドメインシェーダ７６の実行を最小にできる。例えば、再利用バッファ７８の記憶能力（例えば、再利用バッファ７８内のスロットの数）が十分に大きく、および／またはドメイン内の頂点の数が十分に小さい場合に、接続生成器７２が、第２の対角線ストリップ内のプリミティブに対するドメイン座標を出力した後、再利用バッファ７８は、第１の対角線ストリップ内のプリミティブのドメイン座標に対応するパッチ座標をそれでも格納できる。
【０１６４】
[0185]  次いで、接続生成器７２が、第３の対角線ストリップ内のプリミティブのドメイン座標を出力するときに、コントローラ７４は、ドメインシェーダ７６がドメイン座標の多くについて実行する必要がないと決定し得る。例えば、この動作モードでは、第３の対角線ストリップの内側は、第１の対角線ストリップの外側と同じであり得る。対角線ストリップの外側に沿って配置される頂点に対するドメイン座標に対応するパッチ座標は、それでも再利用バッファ７８内に格納され、コントローラ７４は、ドメインシェーダ７６が少なくともこれらの頂点について実行する必要がないと決定し得る。
【０１６５】
[0186]  このようにして、第２の対角線ストリップが第１の対角線ストリップと接する動作モードであっても、本開示で説明されている技術は、対角線ストリップの外側に配置されるドメイン座標に対応するパッチ座標が再利用バッファ７８内に残り、対角線ストリップの内側に配置されるドメイン座標に対応するパッチ座標が再利用バッファ７８から取り除かれるように再利用バッファ７８内に格納されるパッチ座標を徐々に成長させることができる。例えば、第２の対角線ストリップが第１の対角線ストリップと接する動作モードにおいて、第３の対角線ストリップ内のプリミティブの数は、第１の対角線ストリップ内のプリミティブの数より多いものとしてよい。
【０１６６】
[0187]  従って、第１の対角線ストリップの内側に配置される頂点の数は、第１の対角線ストリップの外側に配置される頂点の数より少ない。この方法で、再利用バッファ７８が第１の対角線ストリップの内側に沿って配置される頂点のドメイン座標に対応するパッチ座標を取り除く場合でも、ドメインシェーダ７６の必要な実行回数に対するマイナスの影響は、もしあったとしてもわずかであり得る。このようにして、この動作モードでも、図３〜図５に関して上で説明されている例と比較して、ドメインシェーダ７６の必要な実行回数を減らすことができる。
【０１６７】
[0188]  上で説明されているように、点生成器７０および接続生成器７２は一緒に、ドメインを複数の部分に分割することができ、これらの部分のうちの少なくとも１つは、連続的部分である。点生成器７０および接続生成器７２は、一緒に、テッセレーション係数、および再利用バッファ７８の記憶能力に基づきドメインを複数の部分に分割し得る。次いで、点生成器７０および接続生成器７２は、点生成器７０および接続生成器７２がドメインを分割する方法に基づき上で説明されている例示的な動作モードのうちの１つを実施し得る。
【０１６８】
[0189]  四角形ドメインについて、テッセレーションユニット６６は、ｆxテッセレーション係数と、ｆyテッセレーション係数とを受信できる。ｆxテッセレーション係数は、ｘ方向でリング上に配置される頂点の数を示し、ｆyテッセレーション係数は、ｙ方向でリング上に配置される頂点の数を示し得る。例えば、テッセレーションユニット６６の点生成器７０は、ｆxテッセレーション係数とｆyテッセレーション係数とを利用して、リングの各々上に配置される点の数を決定できる。点（例えば、頂点）の配置を決定するためにリングが必要であるけれども、接続生成器７２は、対角線ストリップ内の、リングに基づかない、プリミティブを出力することに留意されたい。言い換えれば、点生成器７０がリングを利用して頂点の配置を決定した後、接続生成器７２は、対角線ストリップ内のプリミティブの頂点のドメイン座標を出力し、図３〜図５に関して上で説明されているリングバイリング形式では出力しない。
【０１６９】
[0190]  いくつかの例では、セットアップユニット６８は、ｆxテッセレーション係数とｆyテッセレーション係数とを処理できる。例えば、セットアップユニット６８は、テッセレーションユニット６６が整数分割を適用する場合にｆxとｆyとを整数値に丸めるものとしてよい。セットアップユニット６８は、テッセレーションユニット６６が奇数分数分割を適用する場合にｆxとｆyとを奇整数に丸めるものとしてよい。セットアップユニット６８は、テッセレーションユニット６６が偶数分数分割を適用する場合にｆxとｆyとを偶整数に丸めるものとしてよい。セットアップユニット６８は、テッセレーションユニット６６が２の冪乗（ｐｏｗ２）分割を適用する場合にｆxとｆyとを２n（すなわち、２進整数）に丸めるものとしてよい。いかなる場合も、本開示は、ｆxおよびｆyテッセレーション係数をセットアップユニット６８による前処理の後の係数であるとする。
【０１７０】
[0191]  接続生成器７２は、ｆｘおよびｆｙのうちの小さい方に基づき四角形ドメインを分割できる。例えば、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆxおよびｆyのうちの小さい方を決定し得る。例えば、ｆ1をｆxおよびｆyのうちの小さい方に等しいとし、ｆ2はｆxおよびｆyのうちの大きい方である。ｆxがｆyに等しい場合、ｆ1をｆxまたはｆyのいずれかに等しいとする。言い換えれば、ｆ1はｆ2以下である（すなわち、ｆ1≦ｆ2）。
【０１７１】
[0192]  上記の例では、ドメインは四角形ドメインであると仮定した。三角形ドメインについては、テッセレーションユニット６６は、ｆxテッセレーション係数と、ｆyテッセレーション係数とを受信し得ない。むしろ、テッセレーションユニット６６は、１つのテッセレーション係数を受信することができ、本開示では簡単のためｆ1と称する。
【０１７２】
[0193]  より詳しく説明されているように、テッセレーション係数ｆ1の値は、点生成器７０および接続生成器７２がドメインを分割する方法を決定し得る。また、再利用バッファ７８内のスロットの数も、点生成器７０および接続生成器７２がドメインを分割する方法を決定し得る。「Ｃ」を再利用バッファ７８内のスロットの数（すなわち、再利用バッファ７８の記憶能力）に等しいとする。
【０１７３】
[0194]  いくつかの例において、コントローラ７４は、ｆ1＋１がＣ−２以下かどうかを決定し得る。テッセレーションユニット６６が、ｆ1＋１がＣ−２以下かどうかを決定することが可能であり得ることは理解されるであろう。例えば、テッセレーションユニット６６は、Ｃの値をプリロードされ得る。言い換えれば、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1＋１がＣ−２以下かどうかを決定し得る。しかしながら、説明を簡単にするため、コントローラ７４は、ｆ1＋１がＣ−２以下かどうかを決定するものとして説明されている。
【０１７４】
[0195]  コントローラ７４が、ｆ1＋１がＣ−２以下であると決定した場合、コントローラ７４は、接続生成器７２に、第１の動作モードで動作するように指令し得る。この第１の動作モードは、ジョイント対角線ウォーク（joint diagonal walk）と称され得る。第１の動作モードにおいて、点生成器７０および接続生成器７２は、ドメインを２つの部分に分割することができ、１つまたは複数の両方の部分は、連続的部分である。例えば、点生成器７０および接続生成器７２は、四角形ドメインを半分に分割して２つの部分にし、これら半分にされた２つの部分の各々で第１の動作モードを実施できる。別の例として、点生成器７０および接続生成器７２は、三角形ドメインを１／３の部分および２／３の部分に分割できる。この例では、点生成器７０および接続生成器７２は、２／３の部分に対して第１の動作モードを実施することができ、１／３の部分に対して、以下でより詳しく説明されている、第２の動作モードを実施できる。
【０１７５】
[0196]  図７は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図７は、四角形ドメインである、ドメイン８０を示している。図示されているように、点生成器７０および接続生成器７２は、この例では、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）がｆ1＋１がＣ−２以下であると決定している可能性があるので、ドメイン８０を２つの部分８１Ａおよび８１Ｂに分割し得る。言い換えれば、点生成器７０および接続生成器７２は、第１の動作モードを実施できる。この場合、部分８１Ａおよび８１Ｂは、各々結合部分と考えられ得る。例えば、点生成器７０および接続生成器７２が、ドメイン８０を四つ組に分割するとすれば、部分８１Ａは四つ組のうちの２つを備える結合部分を含み、部分８１Ｂは四つ組のうちの他の２つを備える結合部分を含む。
【０１７６】
[0197]  例示することを目的として、図７は、接続生成器７２が部分８１Ｂ内のプリミティブに対するドメイン座標を出力し得る方法を示している。接続生成器７２は、点生成器７０によって決定されたドメイン座標に基づきドメイン座標を出力することは理解されるであろう。部分８１Ｂは、部分８１Ｂ内に入るドメイン８０のすべてのプリミティブが部分８１Ｂの一部として含まれるので、連続的部分である。例えば、部分８１Ｂは、ドメイン８０内にギャップを作成しない。
【０１７７】
[0198]  図７に示されている例において、接続生成器７２は、ドメイン８０のｘ軸境界に沿って、部分８１Ｂの中心に配置され、外へ広がる、プリミティブのドメイン座標を出力することを開始できる。これは、第１の対角線ストリップ８２と、第２の対角線ストリップ８４と、第３の対角線ストリップ８６とに関してさらに図示されている。例えば、第１の対角線ストリップ８２は、プリミティブ８８Ａから８８Ｎを含み、第２の対角線ストリップ８４は、プリミティブ９０Ａから９０Ｎを含み、第３の対角線ストリップ８６は、プリミティブ９２Ａから９２Ｍを含む。
【０１７８】
[0199]  第１の動作モードにおいて（例えば、ｆ1＋１がＣ−２以下である）、第２の対角線ストリップ８４は、第１の対角線ストリップ８２と同じ数のプリミティブを含み得る。例えば、図７において、第１の対角線ストリップ８２は、「Ｎ」個のプリミティブを含み、第２の対角線ストリップ８４も、「Ｎ」個のプリミティブを含む。第１のモードの動作では、第３の対角線ストリップ８６は、第１の対角線ストリップ８２および第２の対角線ストリップ８４と異なる数のプリミティブを含む。例えば、第３の対角線ストリップ８６は、「Ｍ」個のプリミティブを含む。
【０１７９】
[0200]  また、第１の動作モードでは、第２の対角線ストリップ８４は、第１の対角線ストリップ８２と接する。例えば、第２の対角線ストリップ８４は、第１の対角線ストリップ８２のただ１つのプリミティブと２つの頂点を共有するただ１つのプリミティブを含む。図７に示されているように、第２の対角線ストリップ８４のプリミティブ９０Ａは、第１の対角線ストリップ８２のプリミティブ８８Ｎと２つの頂点を共有し、第２の対角線ストリップ８４の残っているプリミティブのうちのどれも、第１の対角線ストリップ８２の残っているプリミティブと２つの頂点を共有しない。
【０１８０】
[0201]  さらに、第１の動作モードでは、第３の対角線ストリップ８６は、第１の対角線ストリップ８２と平行であるが、第２の対角線ストリップ８４とは平行でない。第１の対角線ストリップ８２、第２の対角線ストリップ８４、および第３の対角線ストリップ８６の各々は、内側と外側とを含み得る。内側とは、部分８１Ｂの中心により近い第１の対角線ストリップ８２、第２の対角線ストリップ８４、および第３の対角線ストリップ８６の側を指し、外側とは、部分８１Ｂの中心から離れる第１の対角線ストリップ８２、第２の対角線ストリップ８４、および第３の対角線ストリップ８６の側を指す。
【０１８１】
[0202]  ２つの対角線ストリップが互いに平行であるとは、２つの対角線ストリップが同じ軸から始まり、同じ方向に外向きに広がることを意味する。例えば、第１の対角線ストリップ８２および第３の対角線ストリップ８６は両方とも、ドメイン８０のｘ軸に沿って始まり、同じ方向に外向きに広がる。第２の対角線ストリップ８４は、ドメイン８０のｘ軸に沿って始まるが、第１の対角線ストリップ８２および第３の対角線ストリップ８６と同じ方向に外向きに広がらない。
【０１８２】
[0203]  いくつかの例では、２つの対角線ストリップが互いに平行であるとは、２つの対角線ストリップのうちの一方の外側が２つの対角線ストリップのうちの他方の内側と同じであることを意味する。例えば、第１の対角線ストリップ８２の外側は、第３の対角線ストリップ８６の内側と同じである。従って、第３の対角線ストリップ８６は、第１の対角線ストリップ８２と平行である。しかしながら、対角線ストリップ８４の内側または外側のいずれも、第１の対角線ストリップ８２および第３の対角線ストリップ８６の内側または外側と同じでない。従って、第３の対角線ストリップ８６は、第２の対角線ストリップ８４と平行でない。
【０１８３】
[0204]  さらに、２つの対角線ストリップが内側と外側とを共有していない場合でも、２つは対角線ストリップが互いに平行であると考えられることは可能であり得る。例えば、上で説明されていように、２つの対角線ストリップがドメインの同じ軸から始まり、同じ方向に外向きに広がる場合、２つの対角線ストリップは、互いに平行であると考えられ得る。
【０１８４】
[0205]  図７において、接続生成器７２は、プリミティブ８８Ａから８８Ｎに対するドメイン座標（すなわち、第１の対角線ストリップ８２内のプリミティブに対するドメイン座標）を出力し得る。再利用バッファ７８が対応するパッチ座標を格納しない、プリミティブ８８Ａから８８Ｎのこれらのドメイン座標について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標（すなわち、ドメイン座標に対応するパッチ座標）を再利用バッファ７８に格納できる。次いで、接続生成器７２は、プリミティブ９０Ａから９０Ｎに対するドメイン座標（すなわち、第２の対角線ストリップ８４内のプリミティブに対するドメイン座標）を出力し得る。ここでまた、再利用バッファ７８が対応するパッチ座標を格納しない、プリミティブ９０Ａから９０Ｎのこれらのドメイン座標について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標を再利用バッファ７８に格納できる。次に、接続生成器は、プリミティブ９２Ａから９２Ｍに対するドメイン座標（すなわち、第３の対角線ストリップ８６内のプリミティブに対するドメイン座標）を出力し得る。上記のように、再利用バッファ７８が対応するパッチ座標を格納しない、プリミティブ９２Ａから９２Ｍのこれらのドメイン座標について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標を再利用バッファ７８に格納できる。
【０１８５】
[0206]  接続生成器７２は、接続生成器７２が部分８１Ｂ内のプリミティブのすべてのドメイン座標を出力することを完了するまでこの方法でドメイン座標を出力し続けることができる。次いで、接続生成器７２は、部分８１Ａに関してこれらのステップを繰り返すことができる。図７に示されているように、部分８１Ｂおよび部分８１Ａは、多数の頂点を共有する。いくつかの場合において、部分８１Ａおよび部分８１Ｂによって共有されるこれらの頂点のうちのいくつかに対するドメイン座標に対応するパッチ座標は、再利用バッファ７８内でもはや利用可能でない可能性があり得る。頂点のうちのいくつかについて、コントローラ７４は、ドメインシェーダ７６を実行させることができる。しかしながら、ドメインシェーダ７６は、これらの共有されている頂点のドメイン座標をパッチ座標に再変換するために実行する必要があり得るけれども、本開示で説明されている技術は、図３〜図５で示されている例と比較して、ドメインシェーダ７６の必要な全体的な実行回数をそれでも減らすことができる。
【０１８６】
[0207]  いくつかの場合において、図７に示されているように、対角線ストリップのプリミティブを出力した後、その対角線ストリップと合同である（すなわち、接する）対角線ストリップはあり得ない。この場合、接続生成器７２は、鏡像となる対角線ストリップのプリミティブを出力し得る。例えば、接続生成器７２が、対角線ストリップ９４内のプリミティブのドメイン座標を出力した後、対角線ストリップ９４に接する対角線ストリップはあり得ない。この場合、接続生成器７２は、対角線ストリップ９４の鏡像である、対角線ストリップ９６のプリミティブのドメイン座標を出力し得る。
【０１８７】
[0208]  互いに鏡像となる対角線ストリップは、広げられた場合に同じ点のところでドメイン内の線対称の軸と交差する対角線ストリップを指す。例えば、図７において、線対称の軸は、ドメイン８０の中心下端から上方に、またはドメイン８０の中心上端から下方に延びる垂直線として考えられ得る。この例では、対角線ストリップ９４および対角線ストリップ９６がさらに広がった場合、対角線ストリップ９４および対角線ストリップ９６は、ドメイン８０の線対称の軸に沿って交差する。
【０１８８】
[0209]  この方法で、図７に示されているように、接続生成器７２は、部分８１Ｂの下端の中心から始まり、部分８１Ｂの右端と左端の両方の方へ、また部分８１Ｂの上端の方へ向かう外向きの方向に広がるプリミティブのドメイン座標を出力する。代替的に、接続生成器７２は、部分８１Ｂの上端の中心から始まって、部分８１Ｂの右端と左端の両方の方へ、また部分８１Ｂの下端の方へ、外向きに進む。この場合、部分８１Ｂと８１Ａとによって共有される頂点のドメイン座標に対応するパッチ座標は、再利用バッファ７８から取り除かれる可能性。従って、接続生成器７２は、部分８１Ｂの上端ではなく、部分８１Ｂの下端の中心から始まる方が有利であり得る。いずれかの状況において（例えば、部分８１の上端または下端から始まる）、出力方式は、第１の対角線ストリップ８２がｘ軸から始まり、第２の対角線ストリップ８４はｘ軸で終わるので、ｘ方向のジョイントウォークと称され得る。
【０１８９】
[0210]  しかしながら、本開示で説明されている技術は、そのように限定されない。いくつかの他の例において、点生成器７０および接続生成器７２は、ドメイン８０を、図７に示されている水平方向部分ではなく、２つの垂直方向部分に分割し得る。この場合、接続生成器７２は、左端の中心または右端の中心から始まり、２つの垂直方向部分のうちの１つの垂直方向部分の上端と下端の両方の方へ向かう外向きの方向に広がるプリミティブのドメイン座標を出力できる。そのような出力方式は、第１の対角線ストリップが、この例では、ドメインのｙ軸から始まり、第２の対角線ストリップが、この例では、ドメインのｙ軸で終わり得るので、ｙ方向のジョイントウォークと称され得る例えば、ｙ方向のジョイントウォークは、ドメイン８０が９０度回転された場合のｘ方向のジョイントウォークと同じであると考えられ得る。
【０１９０】
[0211]  処理ユニット（例えば、コントローラ７４またはテッセレーションユニット６６）が、接続生成器７２が第１の動作モードを実施すると決定したときに、コントローラ７４は、接続生成器７２がｘ方向のジョイントウォークまたはｙ方向のジョイントウォークを実施するかどうかをさらに決定できる。例えば、コントローラ７４は、接続生成器７２が、ｘ方向のジョイントウォークまたはｙ方向のジョイントウォークを実施するかどうかをテッセレーション係数に基づき決定できる。
【０１９１】
[0212]  例えば、第１の動作モードでは、ｆ1＋１はＣ−２以下であり、ｆ1はｆxおよびｆyのうちの小さい方に等しい。コントローラ７４が、ｆ1がｆxに等しい（すなわち、ｆxがｆy以下である）と決定する場合、コントローラ７４は、接続生成器７２がｘ方向のジョイントウォークを実施して連続的部分以外のプリミティブのドメイン座標を出力することを決定できる。コントローラ７４が、ｆ1がｆyに等しい（すなわち、ｆyがｆx以下である）と決定する場合、コントローラ７４は、接続生成器７２がｙ方向のジョイントウォークを実施して連続的部分以外のプリミティブのドメイン座標を出力することを決定できる。次いで、接続生成器７２は、コントローラ７４の決定に基づきｘ方向のジョイントウォークまたはｙ方向のジョイントウォークのいずれかで連続的部分内のプリミティブのドメイン座標を出力し得る。
【０１９２】
[0213]  図８は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図８は、三角形ドメインである、ドメイン９８を示している。図示されているように、点生成器７０および接続生成器７２は、この例では、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）がｆ1＋１がＣ−２以下であると決定している可能性があるので、ドメイン９８を２つの部分１００Ａおよび１００Ｂに分割し得る。言い換えれば、図７と同様に、接続生成器７２は、第１の動作モードを実施できる。
【０１９３】
[0214]  三角形ドメイン９８について、テッセレーションユニット６６は、図７の四角形ドメイン８０などの四角形ドメインに対する２つのテッセレーション係数（すなわち、ｆxおよびｆy）ではなく、リングの各辺に沿って配置される点の数を示す１つのテッセレーション係数を受信できる。整合性のために、三角形ドメイン９８に対するリングの各辺に沿って配置される点の数を示すテッセレーション係数は、ｆ1と称される。しかしながら、テッセレーション係数ｆxもｆyもないので、ｆ1は、単にｆと称されるものとしてよい。
【０１９４】
[0215]  さらに、点生成器７０および接続生成器７２は、ドメイン９８を２つの部分に分割し得る第１の動作モードにおいて、２つの部分のうちの一方は、ドメイン９８の１／３を含み、２つの部分のうちの他方は、ドメイン９８の２／３を含み得る。例えば、部分１００Ｂは、ドメイン９８の２／３を含む連続的部分であり、部分１００Ａは、ドメイン９８の１／３を含む連続的部分である。
【０１９５】
[0216]  点生成器７０および接続生成器７２が、ドメイン９８を半分にして等しい２つの部分に分割することが可能であり得る。しかしながら、ｆ1＋１がＣ−２以下である場合に、接続生成器７２がドメイン９８の２／３内（すなわち、部分１００Ｂ内）のプリミティブに対するドメイン座標を出力するのに十分な記憶スロットが再利用バッファ７８内にあり得る。ドメイン９８の２／３は、ドメイン９８の１／２よりも大きいので、接続生成器７２が、ドメイン９８を１／３の部分１００Ａおよび２／３の部分１００Ｂに分割することはより有利であり得る。
【０１９６】
[0217]  例示することを目的として、図８は、接続生成器７２が部分１００Ｂ内のプリミティブに対するドメイン座標を出力し得る方法を示している。上で説明されているように、接続生成器７２は、点生成器７０が決定したドメイン座標を出力し得る。部分１００Ｂにおけるプリミティブのドメイン座標を出力することは、部分１００Ｂが２つの三つ組の組合せであるので、ジョイントウォークと考えられ得る（例えば、ドメイン９８の２／３はドメイン９８の２つの１／３の組合せに等しい）。
【０１９７】
[0218]  図８に示されている例において、接続生成器７２は、部分１００Ｂの中心に配置され、外へ広がる、プリミティブのドメイン座標を出力することを開始できる。例えば、図８は、第１の対角線ストリップ１０２と、第２の対角線ストリップ１０４と、第３の対角線ストリップ１０６とを示している。この例では、接続生成器７２は、第１の対角線ストリップ１０２内に配置されるプリミティブのドメイン座標を、続いて、第２の対角線ストリップ１０４とともに配置されるプリミティブのドメイン座標を、続いて第３の対角線ストリップ１０６とともに配置されるプリミティブのドメイン座標を出力し得る。ドメイン座標の出力の後、再利用バッファ７８が対応するパッチ座標を格納しない、ドメイン座標のどれかに対する、対角線ストリップの各々について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標（すなわち、ドメイン座標に対応するパッチ座標）を再利用バッファ７８に格納できる。
【０１９８】
[0219]  図８に示されている例では、接続生成器７２は、第１の動作モードを実施しているので、第２の対角線ストリップ１０４は、第１の対角線ストリップ１０２に接し、第２の対角線ストリップ１０４は、第１の対角線ストリップ１０２と同じ数のプリミティブを含み得る。また、第１の動作モードでは、第３の対角線ストリップ１０６は、第１の対角線ストリップ１０２と平行であるが、第２の対角線ストリップ１０４とは平行でない場合がある。図示されているように、第３の対角線ストリップ１０６は、第１の対角線ストリップ１０２および第２の対角線ストリップ１０４と異なる数のプリミティブを含み得る。
【０１９９】
[0220]  接続生成器７２は、接続生成器７２が部分１００Ｂ内のプリミティブのすべてのドメイン座標を出力することを完了するまでこの方法でドメイン座標を出力し続けることができる。図８は、部分１００Ｂをドメイン９８の下２／３を含むものとして示しているけれども、本開示の態様はそのように限定されないことは理解されるであろう。他の例では、部分１００Ｂは、ドメイン９８の右または左２／３を含み得る。部分１００Ａについては、接続生成器７２は、以下で説明されている第２の動作モードに従ってプリミティブを出力し得る。
【０２００】
[0221]  図７および図８に示されている例において、点生成器７０および接続生成器７２は、ジョイントウォークを実施することができ、ジョイントウォークは、四角形ドメインに対する四つ組の２つのセクションと、三角形ドメインに対する三つ組の２つのセクションとを含む。ジョイントウォークでは、２つのセクションが互いに隣接しており、ドメイン全体を通して延びる（すなわち、図７および図８の垂直方向に）仮説的中線上の頂点を共有する。図７および図８は、リングの各々に沿って同じ数の頂点がある一様テッセレーションの一例も示しており、リングの各々に沿った頂点の数は偶数である。これは、テッセレーションユニット６６の点生成器７０がテッセレーションにおける対称パターンを利用し、リングに沿った頂点の半分に対する座標を計算し、内部バッファ（再利用バッファ７８以外、または含む）を使用してリングに沿った頂点の他の半分の座標の鏡像を生成することによって計算量を節減することを可能にし得る。
【０２０１】
[0222]  図７と同様に、対角線ストリップのプリミティブを出力した後、その対角線ストリップと合同の対角線ストリップはあり得ない。この場合、接続生成器７２は、鏡像となる対角線ストリップのプリミティブを出力し得る。例えば、接続生成器７２が、対角線ストリップ１０８内のプリミティブのドメイン座標を出力した後、対角線ストリップ１０８に接する対角線ストリップはあり得ない。この場合、接続生成器７２は、対角線ストリップ１０８の鏡像である、対角線ストリップ１１０のプリミティブのドメイン座標を出力し得る。例えば、対角線ストリップ１０８および対角線ストリップ１１０が広がるとすれば、対角線ストリップ１０８および対角線ストリップ１１０は、線対称の軸に沿った同じ点で交わる。
【０２０２】
[0223]  図９は、本開示で説明されている１つまたは複数の例による接続生成器が出力するドメインの連続的部分の一例を示す図である。例えば、図９は、連続的部分１１２を示している。連続的部分１１２のプリミティブは、プリミティブ内の数値によって識別され、接続生成器７２がドメイン座標を出力できる順序を示す。例えば、接続生成器７２は、プリミティブ０、続いてプリミティブ１、続いてプリミティブ２などの頂点のドメイン座標を出力し得る。プリミティブの頂点における数値は、ドメイン座標を表す。例えば、プリミティブ０に対するドメイン座標は、（２，３，１０）である。ドメイン座標は（ｕ，ｖ）座標または（ｕ，ｖ，ｗ）座標であることは理解されるであろう。しかしながら、説明を簡単にするために、ドメイン座標は、単一の値を与えられる。
【０２０３】
[0224]  図９に示されている例では、ｆyは６に等しく、ｆxは１８に等しい。しかしながら、例示を簡単にするため、連続的部分の半分のみが図示されている。例えば、図９は、セグメントは２つの頂点の間の直線である、ｙ軸に沿った６個のセグメントと、ｘ軸に沿った９個のセグメントとを示している。完全な連続的部分は、ｙ軸に沿った６個のセグメントと、ｘ軸に沿った１８個のセグメントとを含む。例示を簡単にするため、ｙ軸に沿った６個のセグメントとｘ軸に沿った９個のセグメントとを含む連続的部分の一部のみが図示されている（すなわち、連続的部分の半分）。例えば、ｙ軸に沿って６個のセグメントがあるので、ｆyは６に等しいが、但し、セグメントは２つの端点を含み、２つの端点はプリミティブの頂点である。図９では、ｘ軸に沿って実際に１８個のセグメントがあるので、ｆxは１８に等しいが、１８個のセグメントのうち９個のみが図９に示されている。
【０２０４】
[0225]  また、図９に示されている例では、再利用バッファ７８内のスロットの数は、９である（すなわち、Ｃは９に等しい）と仮定する。この場合、ｆyはｆxよりも小さいので、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1がｆyに等しいと決定し得る（すなわち、ｆ1は６に等しい）。この例では、ｆ1＋１は７に等しく、Ｃ−２も７に等しい。従って、この例では、コントローラ７４は、ｆ1＋１がＣ−２以下であると決定し、点生成器７０および接続生成器７２に、第１の動作モード（すなわち、ジョイントウォーク）を実施させることができる。
【０２０５】
[0226]  さらに、この例では、ｆyはｆxよりも小さいので、コントローラ７４は、点生成器７０および接続生成器７２に、ｙ方向のジョイントウォークを実施させることができる。例えば、図９に示されているように、接続生成器７２は、連続的部分１１２の左端から始めて、連続的部分１１２の右端へ外向きに広がり得る。図９に示されている例では、第１の対角線ストリップは、プリミティブ２と、３と、４とを含み、第２の対角線ストリップは、プリミティブ５と、６と、７とを含み、第３の対角線ストリップは、プリミティブ８と、９と、１０と、１１と、１２とを含み得る。第１の対角線ストリップは、ｙ軸から始まり、第２の対角線ストリップは、ｙ軸で終わる、従って、ｙ方向のジョイントウォークである。
【０２０６】
[0227]  この場合、第２の対角線ストリップは、第１の対角線ストリップと接し、第３の対角線ストリップは、第１の対角線と平行であり、第３の対角線と平行でない。また、第１および第２の対角線ストリップ内のプリミティブの数は、同じであり（すなわち、各々の中に３つのプリミティブ）、第３の対角線ストリップ内のプリミティブの数は、異なる（すなわち、３つのプリミティブの代わりに５つのプリミティブ）。
【０２０７】
[0228]  以下の表１は、連続的部分１１２の最初の４２個のプリミティブに対する再利用キャッシュ７８の挙動を示している。表１において、第１の列はプリミティブを示し、第２の列はドメイン座標を示し、第３の列は再利用バッファ７８に格納されているパッチ座標を示している。例示を簡単にするために、パッチ座標は、その対応するドメイン座標と同じ値を与えられている。また、表１の第３の列では、太字で下線が引かれているパッチ座標は、ドメインシェーダ７８が実行されてドメイン座標をパッチ座標に変換したときのインスタンスを示している。
【表１】
0006400601.tif 000002
【０２０８】
[0229]  表１において、プリミティブ０に対して、コントローラ７４は、ドメインシェーダ７６のインスタンス化を３回実行して、プリミティブ０のドメイン座標をパッチ座標に変換し得る。プリミティブ１は、プリミティブ０と２つの頂点を共有する（すなわち、ドメイン座標３と１０とを持つ頂点）。この場合、プリミティブ１について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を１回実行させる、すなわち、ドメイン座標４に対して１回実行させ得る。ドメイン座標３と１０とに対応するパッチ座標は、すでに再利用バッファ７８に格納されているので、コントローラ７４は、ドメイン座標３および１０に対してはドメインシェーダのインスタンス化を行わせ得ない。
【０２０９】
[0230]  表１に示されているように、プリミティブ７の後、再利用バッファ７８は満杯である。この場合、接続生成器７２がプリミティブ８のドメイン座標を出力した後、コントローラ７４は、ドメインシェーダ７６のインスタンス化を２回実行する必要があると決定できる、すなわち、プリミティブ８のドメイン座標０に対して１回、プリミティブ８のドメイン座標８に対して１回実行する必要がある。従って、再利用バッファ７８は、パッチ座標２および３である、最も古くから格納されているパッチ座標を取り除いて、パッチ座標０および８に対する格納領域を解放できる。
【０２１０】
[0231]  表１は、再利用バッファ７８を効率的に利用して第１の動作モードについてドメインシェーダ７６の実行を最小にする方法を示し得る。例えば、すべての共有されている頂点は、完全に利用される（例えば、余計なキャッシュミスはない）。例えば、頂点のドメイン座標に対応するパッチ座標は、接続生成器７２がその頂点を共有するプリミティブの大半に対するドメイン座標を出力するまで再利用バッファ内に格納されたままである。これにより、ドメインシェーダ７６の必要な実行回数を最小限に抑えることができる。
【０２１１】
[0232]  上記の例では、ｆ1＋１がＣ−２以下である第１の動作モードに対する技術について説明した。しかしながら、ｆ1＋１がＣ−２以下であるという条件は、すべての場合において真とはなり得ない。例えば、ｆ1のより大きい値および／またはＣのより小さい値に対して、上記の例と比較して、ｆ1＋１がＣ−２以下であるという条件は、成立し得ない。
【０２１２】
[0233]  いくつかの例では、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）が、ｆ1＋１がＣ−２以下でないと決定した場合、コントローラ７４は、ｆ1／２＋１がＣ−１以下であると決定し得る。コントローラ７４が、ｆ1／２＋１がＣ−１以下であると決定した場合、コントローラ７４は、接続生成器７２に、第２の動作モードを実施させることができる。
【０２１３】
[0234]  第２の動作モードにおいて、点生成器７０および接続生成器７２は、四角形ドメインを４つの部分（例えば、四つ組）に分割することができ、これらの部分のうちの少なくとも１つは、連続的部分である。第２の動作モードにおいて、点生成器７０および接続生成器７２は、三角形ドメインを３つの部分（例えば、三つ組）に分割することができ、これらの部分のうちの少なくとも１つは、連続的部分である。
【０２１４】
[0235]  第２の動作モードについては、第１の動作モードと同様に、接続生成器７２は、第１の対角線ストリップ内に配置されるプリミティブのドメイン座標を、続いて、第２の対角線ストリップ内に配置されるプリミティブのドメイン座標を、続いて、第３の対角線ストリップ内に配置されるプリミティブのドメイン座標を出力し得る。しかしながら、第２の動作モードでは、第２の対角線ストリップは、第１の対角線ストリップおよび第３の対角線ストリップと平行である。
【０２１５】
[0236]  第２の対角線ストリップの内側は、第１の対角線ストリップの外側と同じであるものとしてよい。また、第２の対角線ストリップの外側は、第３の対角線ストリップの内側と同じであるものとしてよい。この例では、第２の対角線ストリップは、第１と第３の両方の対角線ストリップと平行であるので、第１の対角線ストリップは、第１の対角線ストリップの外側も内側も第３の対角線ストリップの内側または外側と同じでないとしても第３の対角線ストリップと平行である。
【０２１６】
[0237]  図１０は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図１０は、四角形ドメインである、ドメイン１１４を示している。図示されているように、接続生成器７２は、この例では、コントローラ７４はｆ1／２＋１がＣ−１以下であると決定している可能性があるので、ドメイン１１４を４つの部分１１５Ａ〜１１５Ｄに分割し得る（すなわち、接続生成器７２は、第２の動作モードを実施する）。図７の例では、部分８１Ａおよび８１Ｂは、ジョイント部分であるとして説明された。図１０の例において、部分１１５Ａ〜１１５Ｄは、単一の部分と考えられ、２つの単一の部分が一緒になってジョイント部分を形成し得る。
【０２１７】
[0238]  例示することを目的として、図１０は、接続生成器７２が部分１１５Ｃ内のプリミティブに対するドメイン座標を出力し得る方法を示している。部分１１５Ｃは、部分１１５Ｃがドメイン１１４内にギャップを作成しないので、連続的部分と考えられ得る。
【０２１８】
[0239]  図１０に示されている例において、接続生成器７２は、部分１１５Ｃのコーナーに配置されている、部分１１５Ｃの反対のコーナーの方へ外向きに広がるプリミティブのドメイン座標を出力することを開始できる。例えば、図１０において、接続生成器７２は、部分１１５Ｃの右下コーナーから始めて、部分１１５Ｃの左上コーナーの方へ外向きに広がり得る。これは、第１の対角線ストリップ１１６と、第２の対角線ストリップ１１８と、第３の対角線ストリップ１２０とに関してさらに図示されている。図示されているように、第２の対角線ストリップ１１８は、第１の対角線ストリップ１１６よりも左上コーナーに近く、第３の対角線ストリップ１２０は、第２の対角線ストリップ１１８と第１の対角線ストリップ１１６の両方よりも左上コーナーに近い。
【０２１９】
[0240]  第１の対角線ストリップ１１６は、プリミティブ１２２Ａから１２２Ｎを含み、第２の対角線ストリップ１１８は、プリミティブ１２４Ａから１２４Ｍを含み、第３の対角線ストリップ１２０は、プリミティブ１２６Ａから１２６Ｘを含む。第２の動作モードにおいて、第２の対角線ストリップ１１８は、第１の対角線ストリップ１１６と異なる数のプリミティブを含み得る。例えば、第２の対角線ストリップ１１８は、「Ｍ」個のプリミティブを含み、第１の対角線ストリップ１１６は、「Ｎ」個のプリミティブを含むことができ、ＭおよびＮは異なる数である。また、第３の対角線ストリップ１２０は、第１の対角線ストリップ１１６および第２の対角線ストリップ１１８と異なる数のプリミティブを含み得る。例えば、第３の対角線ストリップ１２０は、「Ｘ」個のプリミティブを含み、Ｘは、ＭおよびＮと異なる。
【０２２０】
[0241]  第２の動作モードにおいて、第１の対角線ストリップ１１６は、第２の対角線ストリップ１１８と平行であり得る。例えば、第２の対角線ストリップ１１８の内側は、第１の対角線ストリップ１１６の外側と同じである。また、第２の動作モードにおいて、第３の対角線ストリップ１２０は、第２の対角線ストリップ１１８と平行であり得る。例えば、第３の対角線ストリップ１２０の内側は、第２の対角線ストリップ１１８の外側と同じである。この場合、第２の対角線ストリップ１１８は、第１の対角線ストリップ１１６と第３の対角線ストリップ１２０の両方と平行なので、第１の対角線ストリップ１１６および第３の対角線ストリップ１２０は、互いに平行であると考えられ得る。
【０２２１】
[0242]  図１０において、接続生成器７２は、プリミティブ１２２Ａから１２２Ｎに対するドメイン座標（すなわち、第１の対角線ストリップ１１６内のプリミティブに対するドメイン座標）を出力し得る。再利用バッファ７８が対応するパッチ座標を格納しない、プリミティブ１２２Ａから１２２Ｎのこれらのドメイン座標について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標（すなわち、ドメイン座標に対応するパッチ座標）を再利用バッファ７８に格納できる。次いで、接続生成器７２は、プリミティブ１２４Ａから１２４Ｍに対するドメイン座標（すなわち、第２の対角線ストリップ１１８内のプリミティブに対するドメイン座標）を出力し得る。ここでまた、再利用バッファ７８が対応するパッチ座標を格納しない、プリミティブ１２４Ａから１２４Ｍのこれらのドメイン座標について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標を再利用バッファ７８に格納できる。次に、接続生成器は、プリミティブ１２６Ａから１２６Ｘに対するドメイン座標（すなわち、第３の対角線ストリップ１２０内のプリミティブに対するドメイン座標）を出力し得る。上記のように、再利用バッファ７８が対応するパッチ座標を格納しない、プリミティブ１２６Ａから１２６Ｘのこれらのドメイン座標について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を実行させることができ、ドメインシェーダ７６は、変換された座標を再利用バッファ７８に格納できる。
【０２２２】
[0243]  第２の動作モードにおいて、接続生成器７２は、プリミティブのドメイン座標をジグザグ方式で出力できる。例えば、接続生成器７２は、ドメイン１１４のｘ軸から始まる第１の対角線ストリップ１１６のドメイン座標を出力することを開始し得る。次いで、いくつかの例では、接続生成器７２は、ドメイン１１４のｘ軸から始まる第２の対角線ストリップ１１８のドメイン座標を出力し得る。第３の対角線ストリップ１２０について、接続生成器７２は、もう一度、ドメイン１１４のｘ軸から開始できる。そのような出力は、ジグザグパターンを形成し得る。
【０２２３】
[0244]  接続生成器７２は、接続生成器７２が部分１１５Ｃ内のプリミティブのすべてのドメイン座標を出力することを完了するまでこの方法でドメイン座標を出力し続けることができる。次いで、接続生成器７２は、部分１１５Ａ、１１５Ｂ、および１１５Ｄに関してこれらのステップを繰り返すことができる。図１０に示されているように、部分１１５Ｃ並びに部分１１５Ａ、１１５Ｂ、および１１５Ｄは、多数の頂点を共有する。いくつかの場合において、部分１１５Ａ、１１５Ｂ、および１１５Ｄのうちの１つと部分１１５Ｃによって共有されるこれらの頂点のうちのいくつかに対するドメイン座標に対応するパッチ座標は、再利用バッファ７８内でもはや利用可能でない可能性があり得る。頂点のうちのいくつかについて、コントローラ７４は、ドメインシェーダ７６を実行させることができる。しかしながら、ドメインシェーダ７６は、これらの共有されている頂点のドメイン座標をパッチ座標に再変換するために実行する必要があり得るけれども、本開示で説明されている技術は、図３〜図５で示されている例と比較して、ドメインシェーダ７６の必要な全体的な実行回数をそれでも減らすことができる。
【０２２４】
[0245]  図１０において、接続生成器７２は、部分１１５Ｃの右下コーナーから始めて、部分１１５Ｃの左上コーナーの方へ外向きに広がった。このような出力方式は、接続生成器７２がドメイン１１４のｘ軸から始まるので、ｘ方向の単一ウォークと称され得る。ｘ方向の単一ウォークの別の例は、接続生成器７２が、部分１１５Ｃの左下コーナーから始めて、部分１１５Ｃの右上コーナーの方へ外向きに広がる場合であってよい。
【０２２５】
[0246]  しかしながら、本開示の態様は、ｘ方向の単一ウォークに限定されない。いくつかの他の例において、点生成器７０および接続生成器７２は、ｙ方向に単一ウォークを実施することができ、点生成器７０および接続生成器７２は、部分１１５Ｃの左上コーナーから始めて、部分１１５Ｃの右下コーナーの方へ外向きに広がり得るか、または部分１１５Ｃの右上コーナーから始まり、部分１１５Ｃの左下コーナーへ外向きに広がる。これらの出力方式は、点生成器７０および接続生成器７２がドメイン１１４のｙ軸から始まるので、ｙ方向の単一ウォークと称され得る。
【０２２６】
[0247]  処理ユニット（すなわち、この例ではコントローラ７４）は、接続生成器７２が、ｘ方向の単一ウォークまたはｙ方向の単一ウォークを実施するかどうかを決定できる。例えば、第２の動作モードでは、ｆ1／２＋１はＣ−１以下である。コントローラ７４が、ｆ1がｆxに等しい（すなわち、ｆxがｆy以下である）と決定した場合、コントローラ７４は、接続生成器７２に、ｘ方向の単一ウォークに従ってドメイン座標を出力させることができる。コントローラ７４が、ｆ1がｆyに等しい（すなわち、ｆyがｆx以下である）と決定した場合、コントローラ７４は、接続生成器７２に、ｙ方向の単一ウォークに従ってドメイン座標を出力させることができる。
【０２２７】
[0248]  図１１は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図１１は、三角形ドメインである、ドメイン１２８を示している。図示されているように、点生成器７０および接続生成器７２は、処理ユニット（この例では、コントローラ７４）はｆ1／２＋１がＣ−１以下であると決定している可能性があるので、ドメイン１２８を３つの部分１３０Ａ〜１３０Ｃに分割し得る（すなわち、点生成器７０および接続生成器７２は、第２の動作モードを実施する）。この例では、ｆ1は、三角形ドメインについて、テッセレーションユニット６６がリング上に配置される点の数を示す１つのテッセレーション係数を受信し得るので、単にｆと称され得る。
【０２２８】
[0249]  例示することを目的として、図１１は、接続生成器７２が部分１３０Ｃ内のプリミティブに対するドメイン座標を出力する方法を示している。接続生成器７２は、同様に、部分１３０Ａおよび１３０Ｂの中のプリミティブのドメイン座標を出力し得る。さらに、図８に関して、接続生成器７２は、同様に、部分１００Ａ内のプリミティブのドメイン座標を出力し得る。
【０２２９】
[0250]  図１１は、部分１３０Ｃを、第１の対角線ストリップ１３２と、第２の対角線ストリップ１３４と、第３の対角線ストリップ１３６とを含むものとして示している。この例では、第１の対角線ストリップ１３２は、第２の対角線ストリップ１３４と平行であり、第２の対角線ストリップ１３４は、第３の対角線ストリップ１３６と平行である。従って、第１の対角線ストリップ１３２も、第３の対角線ストリップ１３６と平行である。さらに、第１の対角線ストリップ１３２内のプリミティブの数は、第２の対角線ストリップ１３４内のプリミティブの数と異なり、第３の対角線ストリップ１３６内のプリミティブの数は、第１の対角線ストリップ１３２および第２の対角線ストリップ１３４の中のプリミティブの数と異なり得る。
【０２３０】
[0251]  この例では、接続生成器７２は、第１の対角線ストリップ１３２内のプリミティブに対するドメイン座標を出力することができ、コントローラ７４は、対応するパッチ座標が再利用バッファ７８に格納されていない各ドメイン座標に対してドメインシェーダ７６のインスタンス化を実行できる。次いで、接続生成器７２は、第２の対角線ストリップ１３４内のプリミティブに対するドメイン座標を出力することができ、コントローラ７４は、対応するパッチ座標が再利用バッファ７８に格納されていない各ドメイン座標に対してドメインシェーダ７６のインスタンス化を実行できる。次に、接続生成器７２は、第３の対角線ストリップ１３６内のプリミティブに対するドメイン座標を出力することができ、コントローラ７４は、対応するパッチ座標が再利用バッファ７８に格納されていない各ドメイン座標に対してドメインシェーダ７６のインスタンス化を実行できる。
【０２３１】
[0252]  接続生成器７２は、接続生成器７２が部分１３０Ｃ内の最後のプリミティブに達するまでこの方法でドメイン座標を出力し続けることができる。次いで、接続生成器７２は、実質的に類似の形式で、部分１３０Ａおよび１３０Ｂの中のプリミティブのドメイン座標を出力し得る。
【０２３２】
[0253]  図１２は、本開示で説明されている１つまたは複数の例による接続生成器が出力するドメインの連続的部分の別の例を示す図である。例えば、図１２は、連続的部分１３８を示している。図９と同様に、連続的部分１３８のプリミティブは、プリミティブ内の数値によって識別され、接続生成器７２がドメイン座標を出力できる順序を示す。例えば、接続生成器７２は、プリミティブ０、続いてプリミティブ１、続いてプリミティブ２などの頂点のドメイン座標を出力し得る。プリミティブの頂点における数値は、ドメイン座標を表す。
【０２３３】
[0254]  図１２に示されている例では、ｆxは１０に等しく、ｆyは８に等しい。図１２は、連続的部分の１／４を示している。例えば、図１２は、ｘ軸に沿った５個のセグメントとｙ軸に沿った４個のセグメントとを示しており、完全な連続的部分は、ｘ軸に沿った１０個のセグメントと、ｙ軸に沿った８個のセグメントとを含む。また、図１２に示されている例では、再利用バッファ７８のスロットの数は、６である（すなわち、Ｃは６に等しい）と仮定する。この場合、ｆyはｆxよりも小さいので、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1がｆyに等しいと決定し得る（すなわち、ｆyは８に等しい）。この例では、ｆ1／２＋１は５に等しく、Ｃ−１も５に等しい。従って、この例では、コントローラ７４は、ｆ1／２＋１がＣ−１以下であると決定し、点生成器７０および接続生成器７２に、第２の動作モード（すなわち、単一ウォーク）を実施させることができる。
【０２３４】
[0255]  例えば、接続生成器７２は、プリミティブ１と、２と、３とを含み得る、第１の対角線ストリップ内のプリミティブのドメイン座標を出力し得る。次いで、接続生成器７２は、プリミティブ４と、５と、６と、７と、８とを含み得る、第２の対角線ストリップ内のプリミティブのドメイン座標を出力し得る。次いで、接続生成器７２は、プリミティブ９と、１０と、１１と、１２と、１３と、１４と、１５とを含み得る、第３の対角線ストリップ内のプリミティブのドメイン座標を出力し得る。この例では、第１、第２、および第３の対角線ストリップの各々は、異なる数のプリミティブ（すなわち、それぞれ、３、５、および７個のプリミティブ）を含み得る。
【０２３５】
[0256]  さらに、この例では、ｆyはｆxよりも小さいので、点生成器７０および接続生成器７２は、ｙ方向の単一ウォークを実施できる。例えば、第１の対角線ストリップのプリミティブ１は、連続的部分１３８のｙ軸に沿って配置され、プリミティブ４（第２の対角線ストリップの第１のプリミティブ）は、連続的部分１３８のｙ軸に沿って配置され、プリミティブ９（第３の対角線ストリップの第１のプリミティブ）は、連続的部分１３８のｙ軸に沿って配置されている。
【０２３６】
[0257]  以下の表２は、連続的部分１３８の４０個のプリミティブに対する再利用キャッシュ７８の挙動を示している。表２において、第１の列はプリミティブを示し、第２の列はドメイン座標を示し、第３の列は再利用バッファ７８に格納されているパッチ座標を示している。例示を簡単にするために、パッチ座標は、その対応するドメイン座標と同じ値を与えられている。また、表２の第３の列では、太字で下線が引かれているパッチ座標は、ドメインシェーダ７８が実行されてドメイン座標をパッチ座標に変換したときのインスタンスを示している。
【表２】
0006400601.tif 000003
【０２３７】
[0258]  表２において、プリミティブ０に対して、コントローラ７４は、ドメインシェーダ７６のインスタンス化を３回実行して、プリミティブ０のドメイン座標をパッチ座標に変換し得る。プリミティブ１は、プリミティブ０と１つの頂点を共有する（すなわち、ドメイン座標３を持つ頂点）。この場合、プリミティブ１について、コントローラ７４は、ドメインシェーダ７６のインスタンス化を２回実行させる、すなわち、ドメイン座標２について１回、ドメイン座標８について１回実行させることができる。ドメイン座標３に対応するパッチ座標は、すでに再利用バッファ７８に格納されているので、コントローラ７４は、ドメイン座標３に対してはドメインシェーダのインスタンス化を行わせ得ない。
【０２３８】
[0259]  表２に示されているように、プリミティブ３の後、再利用バッファ７８は満杯である。この場合、接続生成器７２がプリミティブ４のドメイン座標を出力した後、コントローラ７４は、ドメインシェーダ７６のインスタンス化を２回実行する必要があると決定できる、すなわち、プリミティブ４のドメイン座標１に対して１回、プリミティブ７のドメイン座標４に対して１回実行する必要がある。従って、再利用バッファ７８は、パッチ座標３および９である、最も古くから格納されているパッチ座標を取り除いて、パッチ座標１および７に対する格納領域を解放できる。
【０２３９】
[0260]  表２は、一例として、再利用バッファ７８を効率的に利用して第２の動作モードについてドメインシェーダ７６の実行を最小にする方法を示している。例えば、すべての共有されている頂点は、完全に利用される（例えば、余計なキャッシュミスはない）。例えば、表１の例と同様に、頂点のドメイン座標に対応するパッチ座標は、接続生成器７２がその頂点を共有するプリミティブの大半に対するドメイン座標を出力するまで再利用バッファ内に格納されたままである。これにより、ドメインシェーダ７６の必要な実行回数を最小限に抑えることができる。
【０２４０】
[0261]  上記の例は、第１の動作モードと第２の動作モードとを示した。しかしながら、いくつかの例では、点生成器７０および接続生成器７２は、第３の動作モードを実施する必要があり得る。例えば、ｆ1／２＋１≦Ｃ−１は、ｆ1＋２≦２＊（Ｃ−１）と書き換えられ得る。ｆ1のサイズが大きすぎるか、またはＣのサイズが小さすぎる場合、ｆ1＋２が２＊（Ｃ−１）以下でないインスタンスがあり得る。これらの場合において、ｆ1＋１は、Ｃ−２以下でもあり得ない。そのような場合、点生成器７０および接続生成器７２は、四角形ドメインを四つ組に分割するか、または三角形ドメインを三つ組に分割し、共有される頂点の各々が再利用されるようにこれらの四つ組または三つ組の各々において単一ウォークを実施することは可能ではあり得ない。
【０２４１】
[0262]  そのような場合（すなわち、ｆ1＋２が２＊（Ｃ−１）よりも大きいとき）、点生成器７０および接続生成器７２は第３の動作モードを実施し得る。第３の動作モードは、第１の動作モードおよび第２の動作モードの組合せとすることができる。例えば、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）が、ｆ1＋２が２＊（Ｃ−１）よりも大きいと決定したときに、コントローラ７４は、処理ユニットの例として、点生成器７０と接続生成器７２とに、四角形ドメインをより多くの四つ組に分割させ、また点生成器７０と接続生成器７２とに、三角形ドメインをより多くの三つ組に分割させることができる。次いで、接続生成器７２は、複数の部分の第１のセット上で第１の動作モード（例えば、単一ウォーク）を実施し、複数の部分の第２のセット上で第２の動作モード（例えば、ジョイントウォーク）を実施し得る。
【０２４２】
[0263]  図１３は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。図１３は、四角形ドメインである、ドメイン１４０を示している。この例では、コントローラ７４は、ｆ1＋２が２＊（Ｃ−１）よりも大きいと決定しており、接続生成器７２に、第３の動作モードを実施させることができる。例えば、接続生成器７２は、四角形ドメイン１４０を４つより多い部分に分割し得る。図示されているように、接続生成器７２は、四角形ドメイン１４０を６個の部分１４２Ａ〜１４２Ｆに分割し得る。この例では、コントローラ７４は、接続生成器７２に、部分１４２Ａ、１４２Ｂ、１４２Ｅ、および１４２Ｆの各々１つで単一ウォーク（すなわち、第１の動作モード）を実施させることができる。コントローラ７４は、接続生成器７２に、部分１４２Ｃおよび１４２Ｄにわたってジョイントウォーク（すなわち、第２の動作モード）を実施させることができる。言い換えれば、コントローラ７４は、部分１４２Ｃと１４２Ｄとをジョイント部分に組合せ、接続生成器７２に、ジョイント部分にまたがってジョイントウォークを実施させることができる。
【０２４３】
[0264]  例えば、接続生成器７２は、第１、第２、および第３の対角線ストリップ内のプリミティブのドメイン座標を出力することができ、対角線ストリップは、部分１４２Ａ内にある。この例では、第１、第２、および第３の対角線ストリップは、互いに平行であり得る。組み合わされた部分１４２Ｃおよび１４２Ｄにまたがるジョイントウォークについては、接続生成器は、第４、第５、および第６の対角線ストリップ内のドメイン座標を出力することができ、対角線ストリップは、組み合わされた部分１４２Ｃおよび１４２Ｄの中にある。この例では、第５の対角線ストリップは、第４の対角線ストリップと接するものとしてよく、第６の対角線ストリップは、第４の対角線ストリップと平行であり得る。
【０２４４】
[0265]  いくつかの例では、テッセレーションユニット６６は、偶数のテッセレーション係数を用いる一様テッセレーションを使用して図７、図８、図１０、および図１１に示されている例示的なドメインをテッセレートしている可能性がある。一様テッセレーションは、リングに沿って等しい数の点（すなわち、頂点）があることを意味する。また、図７に示されている例において、テッセレーション係数は１８に等しいｆxと６に等しいｆyであり（両方とも、偶数のテッセレーション係数である）、図１０に示されている例では、テッセレーション係数は１０に等しいｆxと８に等しいｆyであった（両方とも、偶数のテッセレーション係数である）。偶数のテッセレーション係数では、結果として、ドメインのエッジの中間点で鏡像を生じる。
【０２４５】
[0266]  しかしながら、すべてのドメインが、一様テッセレーションを使用して、または偶数のテッセレーション係数を用いてテッセレートされるとは限らない。次に、ドメインが一様テッセレーションを使用してテッセレートされない少数の例と、テッセレーション係数が偶数、および奇数、並びに両方とも偶数である一例について説明する。
【０２４６】
[0267]  奇数のテッセレーション係数を用いる一様テッセレーションでは、接続生成器７２がドメインを分割する方法は、偶数のテッセレーション係数を用いる例とはわずかに異なり得る。しかしながら、接続生成器７２がプリミティブのドメイン座標を出力する順序は、同じであってよい。
【０２４７】
[0268]  図１４Ａおよび図１４Ｂは、開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図１４Ａは、ドメイン１４４Ａを示し、図１４Ｂは、ドメイン１４４Ｂを示す。ドメイン１４４Ａおよびドメイン１４４Ｂは、各々、四角形ドメインである。図示されているように、テッセレーションユニット６６は、１つの偶数のテッセレーション係数および１つの奇数のテッセレーション係数でドメイン１４４Ａとドメイン１４４Ｂとをテッセレートしているものとしてよい。偶数のテッセレーション係数は、ドメイン１４４Ａおよびドメイン１４４Ｂのｙ軸に沿って８個のセグメントがあるので、ｆyであってよい。奇数のテッセレーション係数は、ドメイン１４４Ａおよびドメイン１４４Ｂのｘ軸に沿って５個のセグメントがあるので、ｆxであってよい。例示することを目的として、図１４Ａおよび図１４Ｂは、接続生成器７２がそれぞれ連続的部分１４６Ａおよび連続的部分１４６Ｂの中のプリミティブに対するドメイン座標を出力する方法を示している。
【０２４８】
[0269]  図１４Ａに示されている例において、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1／２＋１がＣ−２以下であると決定している可能性があり、点生成器７０および接続生成器７２に、第２の動作モード（すなわち、単一ウォーク）を実施させることができる。例えば、接続生成器７２は、第１の対角線ストリップ１４８、続いて、第２の対角線ストリップ１５０、次いで、第３の対角線ストリップ１５２内のプリミティブに対するドメイン座標を出力し得る。図示されているように、第１の対角線ストリップ１４８は、第３の対角線ストリップ１５２と平行である、第２の対角線ストリップ１５０と平行である。従って、第１の対角線ストリップ１４８、第２の対角線ストリップ１５０、および第３の対角線ストリップ１５２は、各々、互いに平行である。また、第１の対角線ストリップ１４８、第２の対角線ストリップ１５０、および第３の対角線ストリップ１５２の中のプリミティブの数は、異なる。
【０２４９】
[0270]  図１４Ｂに示されている例において、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1＋１がＣ−２以下であると決定している可能性があり、点生成器７０および接続生成器７２に、第１の動作モード（すなわち、ジョイントウォーク）を実施させることができる。例えば、接続生成器７２は、第１の対角線ストリップ１５４、続いて、第２の対角線ストリップ１５６、次いで、第３の対角線ストリップ１５８内のプリミティブに対するドメイン座標を出力し得る。図示されているように、第２の対角線ストリップ１５６は、第１の対角線ストリップ１５４と接する。第３の対角線ストリップ１５８は、第１の対角線ストリップ１５４と平行であり、第２の対角線ストリップ１５６と平行でない。また、第１の対角線ストリップ１５４、および第２の対角線ストリップ１５６の中のプリミティブの数は同じであり、第３の対角線ストリップ１５８内のプリミティブの数とは異なる。
【０２５０】
[0271]  図１５Ａおよび図１５Ｂは、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図１５Ａは、ドメイン１６０Ａを示し、図１５Ｂは、ドメイン１６０Ｂを示す。ドメイン１６０Ａおよびドメイン１６０Ｂは、各々、四角形ドメインである。図示されているように、テッセレーションユニット６６は、奇数のテッセレーション係数（すなわち、ｆxおよびｆyが両方とも奇数である）でドメイン１６０Ａとドメイン１６０Ｂとをテッセレートしているものとしてよい。例示することを目的として、図１５Ａおよび図１５Ｂは、接続生成器７２がそれぞれ連続的部分１６２Ａおよび連続的部分１６２Ｂの中のプリミティブに対するドメイン座標を出力する方法を示している。
【０２５１】
[0272]  図１５Ａに示されている例において、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1／２＋１がＣ−２以下であると決定している可能性があり、点生成器７０および接続生成器７２に、第２の動作モード（すなわち、単一ウォーク）を実施させることができる。例えば、接続生成器７２は、第１の対角線ストリップ１６４、続いて、第２の対角線ストリップ１６６、次いで、第３の対角線ストリップ１６８内のプリミティブに対するドメイン座標を出力し得る。図１５Ｂに示されている例において、処理ユニット（例えば、コントローラ７４および／またはテッセレーションユニット６６）は、ｆ1＋１がＣ−２以下であると決定している可能性があり、点生成器７０および接続生成器７２に、第１の動作モード（すなわち、ジョイントウォーク）を実施させることができる。例えば、接続生成器７２は、第１の対角線ストリップ１７０、続いて、第２の対角線ストリップ１７２、次いで、第３の対角線ストリップ１７４内のプリミティブに対するドメイン座標を出力し得る。
【０２５２】
[0273]  図１５Ａに示されている例において、接続生成器７２が、連続的部分に対するドメイン座標を出力した後、ドメイン座標がまだ出力されていないプリミティブがいくつか残っている可能性がある。例えば、図１５Ａでは、ドメイン１６０Ａの中心をなす２つの三角形は、連続的部分によって囲まれ得ない。これらの例では、接続生成器７２は、残っているプリミティブ（例えば、ドメイン１６０Ａの中心をなす三角形）のドメイン座標を出力し得る。
【０２５３】
[0274]  図１６Ａおよび図１６Ｂは、開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する例示的な技術を示す図である。図１６Ａは、ドメイン１７６Ａを示し、図１６Ｂは、ドメイン１７６Ｂを示す。ドメイン１７６Ａおよびドメイン１７６Ｂは、各々、三角形ドメインである。図示されているように、テッセレーションユニット６６は、奇数のテッセレーション係数（すなわち、ｆは奇数である）でドメイン１６０Ａとドメイン１６０Ｂとをテッセレートしているものとしてよい。例示することを目的として、図１６Ａおよび図１６Ｂは、接続生成器７２がそれぞれ連続的部分１７８Ａおよび連続的部分１７８Ｂの中のプリミティブに対するドメイン座標を出力する方法を示している。
【０２５４】
[0275]  図１６Ａに示されている例において、コントローラ７４（処理ユニットの一例として）は、ｆ1／２＋１がＣ−２以下であると決定しており、点生成器７０および接続生成器７２に、第２の動作モード（すなわち、単一ウォーク）を実施させることができる。例えば、接続生成器７２は、第１の対角線ストリップ１８０、続いて、第２の対角線ストリップ１８２、次いで、第３の対角線ストリップ１８４内のプリミティブに対するドメイン座標を出力し得る。図１６Ｂに示されている例では、コントローラ７４は、ｆ1＋１がＣ−２以下であると決定しており、接続生成器７２に、第１の動作モード（すなわち、ジョイントウォーク）を実施させることができる。例えば、接続生成器７２は、第１の対角線ストリップ１８６、続いて、第２の対角線ストリップ１８８、次いで、第３の対角線ストリップ１９０内のプリミティブに対するドメイン座標を出力し得る。
【０２５５】
[0276]  図１５Ｂと同様に、接続生成器７２が、連続的部分に対するドメイン座標を出力した後、図１６Ａおよび図１６Ｂにおいてドメイン座標がまだ出力されていないプリミティブが残っている可能性がある。例えば、図１６Ａおよび図１６Ｂにおいて、ドメイン１７６Ａおよび１７６Ｂの中心をなす三角形は、連続的部分によって囲まれ得ない。これらの例では、接続生成器７２は、残っているプリミティブ（例えば、ドメイン１７６Ａおよび１７６Ｂの中心をなす三角形）のドメイン座標を出力し得る。
【０２５６】
[0277]  上記の例では、接続生成器７２がドメインの連続的部分内のプリミティブのドメイン座標を出力する方法について説明しており、テッセレーションユニット６６は、一様テッセレーションおよび偶数のテッセレーション係数、偶数および奇数のテッセレーション係数、並びに奇数のテッセレーション係数でドメインをテッセレートする。次に、接続生成器７２が非一様なテッセレートされたドメインに対するプリミティブのドメイン座標を出力する方法について説明する。非一様なテッセレーションドメイン(non-uniform tessellated domain)では、テッセレーションユニット６６は、非一様テッセレーション(non-uniform tessellation)を利用してドメインの一部分をテッセレートし、一様テッセレーションを利用してドメインの他の部分をテッセレートし得る。
【０２５７】
[0278]  例えば、四角形ドメインについては、合計６個のテッセレーション係数があり得る。６個のテッセレーション係数のうちの４個は、それぞれ、四角形ドメインの４つの辺の各々に沿ってセグメントの数を定義し得る。これら４個のテッセレーション係数は、同じでなくてよく、その結果、非一様テッセレーションになる。残り２つのテッセレーション係数は、四角形ドメイン内のリングのｘ軸およびｙ軸に沿ってセグメントの数を定義することができ、その結果、四角形ドメイン内に一様テッセレーションが得られる。
【０２５８】
[0279]  三角形ドメインについては、合計４個のテッセレーション係数があり得る。４個のテッセレーション係数のうちの３個は、それぞれ、三角形ドメインの３つの辺の各々に沿ってセグメントの数を定義し得る。これら３個のテッセレーション係数は、同じでなくてよく、その結果、非一様テッセレーションになる。残りのテッセレーション係数は、三角形ドメイン内の三角形リングに対するセグメントの数を定義することができ、その結果、三角形ドメイン内に一様テッセレーションが得られる。
【０２５９】
[0280]  例えば、非一様テッセレーションは、外側リングの１つまたは複数の辺上の頂点の数が異なるときのインスタンスを指す。非一様テッセレーションの例において、一様な部分に対するテッセレーション係数がｆxおよびｆyである場合、テッセレーションユニット６６のセットアップユニット６８は、ＦxおよびＦyの値を決定することができ、ｆxはＦx−２．０に等しく、ｆyはＦy−２．０に等しい。
【０２６０】
[0281]  テッセレーションユニット６６が、非一様テッセレーションと一様テッセレーションの両方を利用してドメインをテッセレートする例では、コントローラ７４は、点生成器７０および接続生成器７２に、ドメインの一様なテッセレートされた部分で、第１の動作モード、第２の動作モード、または第３の動作モードを実施させることができる。本開示で説明されている技術では、点生成器７０および接続生成器７２が、ドメインの非一様な部分内のプリミティブのドメイン座標を出力する方法は、一般的に重要でない。
【０２６１】
[0282]  図１７は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。例えば、図１７は、三角形ドメインである、ドメイン１９２を示している。図１７に示されている例において、テッセレーションユニット６６は、非一様テッセレーションを使用して部分１９４をテッセレートしており、一様テッセレーションを使用して部分１９６Ａ、１９６Ｂ、および１９６Ｃによって囲まれているドメイン１９２の領域をテッセレートしているものとしてよい。例えば、部分１９４では、ドメイン１９２の３つの境界の各々に沿って配置される頂点の数は異なり、従って、非一様テッセレーションである。ドメイン１９２の残り部分（すなわち、部分１９６Ａ、１９６Ｂ、および１９６Ｃ）では、境界の各々に沿って配置される頂点の数は同じであり、従って、一様テッセレーションである。
【０２６２】
[0283]  本開示で説明されている技術によれば、コントローラ７４（処理ユニットの一例）は、点生成器７０および接続生成器７２に、ｆ1およびＣの値に基づき部分１９６Ａ、１９６Ｂ、および１９６Ｃに、第１の動作モードと、第２の動作モードと、第３の動作モードとを実施させることができる。点生成器７０および接続生成器７２は、部分１９４内のプリミティブのドメイン座標を出力するために既存の技術またはまだ開発されていない技術を実施できる。図示されているように、部分１９４は、ドメイン１９２の外側リングであってよい。
【０２６３】
[0284]  図１８は、本開示で説明されている１つまたは複数の例によるドメインの連続的部分内のプリミティブの頂点のドメイン座標を出力する別の例示的な技術を示す図である。例えば、図１８は、四角形ドメインである、ドメイン１９８を示している。図１８に示されている例において、テッセレーションユニット６６は、非一様テッセレーションを使用して部分２００をテッセレートしており、一様テッセレーションを使用して部分２０２Ａ〜２０２Ｄによって囲まれているドメイン１９８の領域をテッセレートしているものとしてよい。例えば、部分２００では、ドメイン１９８の４つの境界のうちの少なくとも２つに沿って配置される頂点の数は異なり、従って、この場合のテッセレーションは、非一様テッセレーションと称され得る。ドメイン１９８の残り部分（すなわち、部分２０２Ａ〜２０２Ｄ）では、境界の各々に沿って配置される頂点の数は同じであり、従って、一様テッセレーションである。
【０２６４】
[0285]  本開示で説明されている技術によれば、処理ユニット（例えば、コントローラ７４）は、点生成器７０および接続生成器７２に、ｆ1およびＣの値に基づき部分２０２Ａ〜２０２Ｄに、第１の動作モードと、第２の動作モードと、第３の動作モードとを実施させることができる。点生成器７０および接続生成器７２は、部分２００内のプリミティブのドメイン座標を出力するために既存の技術またはまだ開発されていない技術を実施できる。
【０２６５】
[0286]  図１９は、本開示で説明されている１つまたは複数の例による例示的なオペレーションを示す流れ図である。例示することのみを目的として、図６が参照されている。さらに、これらの技術の多くは、コントローラ７４によって行われるものとして説明されている。しかしながら、そのような説明は、例示を目的として与えられたおり、制限するものと考えられるべきでない。他の例では、テッセレーションユニット６６が、コントローラ７４に関して説明されている機能を実施するように構成され得るか、または他の何らかのハードウェアもしくはソフトウェアユニットが、コントローラ７４の技術を実施するように構成され得る。従って、図１９に示されている技術は、処理ユニットに関して説明されており、その例は、コントローラ７４および／またはテッセレーションユニット６６を含む。
【０２６６】
[0287]  テッセレーションユニット６６は、ドメインに対するテッセレーション係数を受信して処理できる（２０４）。例えば、セットアップユニット６８は、四角形ドメインについてはｆxテッセレーション係数とｆyテッセレーション係数とを、または三角形ドメインについてはｆテッセレーション係数を受信することができ、これらのテッセレーション係数は、ドメインの各リングに沿ったセグメントの数を示す。例えば、点生成器７０は、これらのテッセレーション係数に基づきドメイン内の各リングを分割することができ、各セグメントの端点は、１つまたは複数のプリミティブに対する頂点であるものとしてよい。それに加えて、セットアップユニット６８は、ドメインがテッセレートされる方法に基づきｆxとｆyとを整数に、ｆxとｆyとを奇整数(odd integer)に、ｆxとｆyとを偶整数(even integer)に、またはｆxとｆyとを２n（すなわち２進整数）に丸めることができる。
【０２６７】
[0288]  さらに、受信されたテッセレーション係数が、ドメインが一様テッセレーションと非一様テッセレーションとを使用してテッセレートされるべきであることを示している場合、テッセレーションユニット６６は、ドメインの一様なテッセレートされた部分に図１９に示されている例示的な技術を実施できる。ドメインの外側リングなどの、ドメインの非一様なテッセレートされた部分については、テッセレーションユニット６６は、任意の技術を利用してドメインの非一様にされたテッセレートされた部分のドメイン座標を出力できる。例えば、非一様にされたテッセレートされた部分について、テッセレーションユニット６６は、図３〜図５に示されている方法（すなわち、非連続的である、リング形式で）ドメイン座標を出力できる。
【０２６８】
[0289]  処理ユニットは、ｆ1＋１がＣ−２以下であるかどうかを決定し得る（２０６）。処理ユニットが、ｆ1＋１がＣ−２以下であると決定した場合（２０６の「はい」）、処理ユニットは、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、第１の動作モードを実施させることができる。
【０２６９】
[0290]  例えば、処理ユニットは、ドメインが四角形ドメインであるかどうかを決定し得る（２０８）。ドメインが、四角形ドメインである場合（２０８の「はい」）、処理ユニットは、ｆxがｆy以下であるかどうかを決定し得る（２１２）。ｆxがｆy以下である場合（２１２の「はい」）処理ユニットは、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、ｘ方向のジョイントウォークを実施させることができる（２１４）。例えば、点生成器７０および接続生成器７２は、四角形ドメインを２つの部分に分割し、これらの部分のうちの一方は連続的部分であり、ｘ方向の技術によるジョイントウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
【０２７０】
[0291]  ｆxがｆy以下でない場合（２１２の「いいえ」）処理ユニットは、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、ｙ方向のジョイントウォークを実施させることができる（２１６）。例えば、接続生成器７２は、四角形ドメインを２つの部分に分割し、これらの部分のうちの一方は連続的部分であり、ｙ方向の技術によるジョイントウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
【０２７１】
[0292]  ドメインが、四角形ドメインでない場合（２０８の「いいえ」）、処理ユニットは、テッセレーションユニットに、点生成器７０および接続生成器７２を介して、三角形ドメイン上でジョイントウォークを実施させることができる（２１０）。例えば、接続生成器７２は、三角形ドメインを１／３の部分および２／３の部分に分割することができ、少なくとも２／３の部分は、連続的部分である。接続生成器７２は、ジョイントウォーク技術に従って連続的な２／３の部分内のプリミティブのドメイン座標を出力できる。
【０２７２】
[0293]  処理ユニットが、ｆ1＋１がＣ−２以下でないと決定した場合（２０６の「いいえ」）、処理ユニットは、ｆ1／２＋１がＣ−１以下であるかどうかを決定し得る（２１８）。処理ユニットが、ｆ1／２＋１がＣ−２以下であると決定した場合（２１８の「はい」）、処理ユニット７４は、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、第２の動作モードを実施させることができる。
【０２７３】
[0294]  処理ユニットは、ドメインが四角形ドメインであるかどうかを決定し得る（２２０）。ドメインが、四角形ドメインである場合（２２０の「はい」）、処理ユニットは、ｆxがｆy以下であるかどうかを決定し得る（２２４）。ｆxがｆy以下である場合（２２４の「はい」）処理ユニットは、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、ｘ方向の単一ウォークを実施させることができる（２２６）。例えば、接続生成器７２は、四角形ドメインを４つの部分に分割し、これら４つの部分のうちの１つは連続的部分であり、ｘ方向の技術による単一ウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
【０２７４】
[0295]  ｆxがｆy以下でない場合（２２４の「いいえ」）処理ユニットは、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、ｙ方向の単一ウォークを実施させることができる（２２８）。例えば、接続生成器７２は、四角形ドメインを４つの部分に分割し、これらの部分のうちの１つは連続的部分であり、ｙ方向の技術による単一ウォークに従って連続的部分内のプリミティブのドメイン座標を出力できる。
【０２７５】
[0296]  ドメインが、四角形ドメインでない場合（２２０の「いいえ」）、処理ユニットは、テッセレーションユニット６６に、点生成器７０および接続生成器７２を介して、三角形ドメイン上で単一ウォークを実施させることができる（２２２）。例えば、接続生成器７２は、三角形ドメインを３つの部分に分割することができ、少なくとも１つの部分は連続的部分である。接続生成器７２は、単一ウォーク技術に従って連続的部分内のプリミティブのドメイン座標を出力できる。
【０２７６】
[0297]  処理ユニットが、ｆ1／２＋１がＣ−１以下でないと決定した場合（２１８の「いいえ」）、処理ユニットは、点生成器７０および接続生成器７２に、第３の動作モードを実施させることができる。例えば、処理ユニットは、接続生成器７２に、単一ウォーク技術とジョイントウォーク技術の両方を実施させることができる（２３０）。例えば、第３の動作モードでは、接続生成器７２は、四角形ドメインを４つより多い部分に分割し、三角形ドメインを３つより多い部分に分割し得る。この例では、四角形ドメインについては、接続生成器７２は、これらの部分のうちの４つに単一ウォーク技術を実施し、他の部分にジョイントウォーク技術を実施し得る。三角形ドメインについては、接続生成器７２は、これらの部分のうちの３つに単一ウォーク技術を実施し、他の部分にジョイントウォーク技術を実施し得る。
【０２７７】
[0298]  図１９の例において、接続生成器７２は、ｘ方向の単一ウォークと、ｙ方向の単一ウォークと、ｘ方向のジョイントウォークと、ｙ方向のジョイントウォークとを実施できる。いくつかの例では、ｘ方向またはｙ方向のウォーキングは、２つのテッセレーション係数のうちの小さい方に基づき得る。例えば、処理ユニットは、第１のテッセレーション係数が第２のテッセレーション係数以下であると決定し得る。第１、第２、および第３の対角線ストリップ内のプリミティブのドメイン座標を出力するときに、接続生成器７４は、第１のテッセレーション係数に対応し、外向きに広がるドメインの軸から始まるものとしてよい。
【０２７８】
[0299]  例えば、ｆxがｆyより小さい場合、接続生成器７４は、第１、第２、および第３の対角線ストリップ内のプリミティブのドメイン座標を出力するときにドメインのｘ軸から始まり、外向きに広がる。ｆyがｆxより小さい場合、接続生成器７４は、第１、第２、および第３の対角線ストリップ内のプリミティブのドメイン座標を出力するときにドメインのｙ軸から始まり、外向きに広がる。
【０２７９】
[0300]  一般に、図１９に示されている例によれば、処理ユニットは、少なくとも再利用バッファ７８内の記憶スロットの数に基づき、複数の異なる動作モードから１つの動作モードを選択することができ、異なる動作モードの各々は、接続生成器７２がドメインの連続的部分内のプリミティブのドメイン座標を出力する方法を示している。複数の異なる動作モードの例として、第１、第２、および第３の動作モードが挙げられる。処理ユニットは、少なくとも再利用バッファの記憶能力に基づき動作モードを選択できる。次いで、処理ユニットは、接続生成器７２に、選択された動作モードに基づきドメインの連続的部分内のプリミティブのドメイン座標を出力させることができる。
【０２８０】
[0301]  例えば、少なくとも１つのテッセレーション係数に１を足した値が再利用バッファ７８内の記憶スロットの数から２を引いた値以下である場合に、処理ユニットは、接続生成器７２に、第１の動作モードに従ってドメイン座標を出力させることができる。少なくとも１つのテッセレーション係数に１を足した値が再利用バッファ７８内の記憶スロットの数から２を引いた値以下でなく、少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ７８内の記憶スロットの数から１を引いた値以下である場合、処理ユニットは、接続生成器７２に、第２の動作モードに従ってドメイン座標を出力させることができる。少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ７８内の記憶スロットの数から１を引いた値以下でない場合、処理ユニットは、接続生成器７２に、第３の動作モードに従ってドメイン座標を出力させることができる。第３の動作モードは、第３の動作モードが第１の動作モードおよび第２の動作モードの組合せであるので、第１の動作モードだけ、および第２の動作モードだけとは異なると考えられ得る。
【０２８１】
[0302]  次の擬似コードは、本開示による例示的な技術をさらに示す。
【０２８２】
１．Ｉｆ  非一様テッセレーションならば
外側リングを処理する
ｅｎｄＩｆ
Ｉｆ  四角形ドメインならば
一様テッセレーションに対してステップ２に進む
ｅｌｓｅ／／三角形ドメイン
一様テッセレーションに対してステップ３に進む
ｅｎｄＩｆ
２．／／四角形ドメイン
ドメインを四つ組に分割する
Ｉｆ  ｆx＋１≦Ｃ−２、（ｆx≦ｆy）ならば
偶数／奇数のテッセレーション係数に基づきｘ方向でジョイントウォークを処理する
ｅｌｓｅＩｆ  ｆy＋１≦Ｃ−２、（ｆy≦ｆx）ならば
偶数／奇数の係数に基づきｙ方向でジョイントウォークを処理する
ｅｌｓｅＩｆ  ｆx／２＋１≦Ｃ−１、（ｆx≦ｆy）ならば
ｘ方向で単一ウォークを処理する
ｅｌｓｅＩｆ  ｆy／２＋１≦Ｃ−１、（ｆy≦ｆx）ならば
ｙ方向で単一ウォークを処理する
ｅｌｓｅ
それぞれの四つ組にパーティションを付加する
単一ウォークとジョイントウォークとを処理する
ｅｎｄＩｆ
ｅｘｉｔ
３．／／三角形ドメイン
ドメインを三つ組に分割する
Ｉｆ  ｆ＋１≦Ｃ−２ならば
偶数／奇数の係数に基づきｘ方向でジョイントウォークを処理する
ｅｌｓｅＩｆ  ｆ／２＋１≦Ｃ−１ならば
単一ウォークを処理する
ｅｌｓｅ
それぞれの三つ組にパーティションを付加する
単一ウォークとジョイントウォークとを処理する
ｅｎｄＩｆ
ｅｘｉｔ
[0303]  図２０は、本開示で説明されている１つまたは複数の例による例示的なオペレーションを示す流れ図である。例示することのみを目的として、これらの技術は図６に関して説明されている。
【０２８３】
[0304]  点生成器７０および接続生成器７２は、ドメインを複数の部分に分割し得る（２３１）。これらの部分のうちの少なくとも１つは、連続的部分である。第１の動作モードで動作している場合、点生成器７０および接続生成器７２は、四角形ドメインを２つの等しい部分に分割することができ、三角形ドメインを２つの部分に分割することができ、一方の部分は、ドメインの１／３であり、他方の部分は、ドメインの２／３である。第２の動作モードで動作している場合、点生成器７０および接続生成器７２は、四角形ドメインを４つの部分に分割し、三角形ドメインを３つの部分に分割し得る。第３の動作モードで動作している場合、点生成器７０および接続生成器７２は、四角形ドメインを４つより多い部分に分割し、三角形ドメインを３つより多い部分に分割し得る。
【０２８４】
[0305]  接続生成器７２は、連続的部分内の第１の対角線ストリップ内のプリミティブのドメイン座標を出力できる（２３２）。次いで、接続生成器７２は、連続的部分内の第２の対角線ストリップ内のプリミティブのドメイン座標を出力できる（２３４）。次いで、接続生成器７２は、連続的部分内の第３の対角線ストリップ内のプリミティブのドメイン座標を出力できる（２３６）。
【０２８５】
[0306]  第２の対角線ストリップは、第１の対角線ストリップと平行であるか、または第１の対角線ストリップと接するかのうちの１つであってよい。第３の対角線ストリップは、第１の対角線ストリップと平行であり得る。第３の対角線ストリップは、第２の対角線ストリップが第１の対角線ストリップと平行である例において第２の対角線ストリップと平行となり得る。第３の対角線ストリップは、第２の対角線ストリップが第１の対角線ストリップと接する例において第２の対角線ストリップと平行とはなり得ない。
【０２８６】
[0307]  第１の対角線ストリップ内のプリミティブの数は、第２の対角線ストリップが第１の対角線ストリップと接する例において第２の対角線ストリップ内のプリミティブの数と同じになり得る。次いで、第１の対角線ストリップ内のプリミティブの数は、第２の対角線ストリップが第１の対角線ストリップと平行である例において第２の対角線ストリップ内のプリミティブの数と異なり得る。いずれの場合も、第３の対角線ストリップ内のプリミティブの数は、第１および第２の対角線ストリップ内のプリミティブの数と異なり得る。
【０２８７】
[0308]  図２１〜図２７は、本開示で説明されている１つまたは複数の例示的な技術を実施すること、および１つまたは複数の他の技術を実施することによって達成される結果の比較を示すグラフである。例えば、本開示で説明されている技術の結果として、グラフィックスパイプラインは、共有される頂点のドメイン座標に対応するパッチ座標が再利用バッファ７８内に残ることを効果的に保証することによって他の何らかの技術よりも高速にテッセレーションを完了させることができる。本開示で説明されている技術は、他の何らかの技術と比較して余計なミス率を著しく低くする（すなわち、レートキャッシュミスを低減する）ことができる。キャッシュミス率は、コントローラ７４がドメイン座標系からパッチ座標にすでに変換されている頂点についてドメインシェーダ７６を実行する必要がある率を指すものとしてよい。
【０２８８】
[0309]  次の例では、再利用バッファ７８内の記憶スロットの数は３２スロットである。テッセレーション係数は、１．０から６４．０の範囲である。一般に、図３と図４とに関して上で説明されている技術の結果、一様テッセレーションに対するミス率はほとんど１００％となる。図５に関して上で説明されている技術の結果、ミス率は４５％となる。図６〜図２０に関して上で説明されている技術の結果、ミス率は５％となる。ミス率を最小にすることは、結果としてドメインシェーダ７６のインスタンス化の回数を減らすので、有益であり得る。ドメインシェーダ７６の実行は、時間と大量の処理を必要とし、従って、ドメインシェーダ７６の実行を最小限度に抑えることは、有益である場合がある。
【０２８９】
[0310]  図２１は、四角形ドメイン上の一様テッセレーションについて本開示で説明されている１つまたは複数の技術による完全には再利用されない頂点のミス率を示している。ｘ軸およびｙ軸は、テッセレーション係数（例えば、ｆxおよびｆy）に対するものであり、ｚ軸は、ミス率を示す。この例では、ミス率は、テッセレーション係数が小さく、連続的部分のすべてのパッチ座標が再利用バッファ７８に収まるときにゼロである。テッセレーション係数のいくつかの小さい値について、ミス率は、約０．１６（すなわち、約１６％）に上昇し得る。しかし、次いで、ミス率は、実質的に低下し、２％から５％のミス率に留まる。ミス率が１６％であっても、本開示で説明されている技術は、それでも、図２２および図２３に示されているような、他の何らかの技術よりもかなり低いミス率を有し得る。
【０２９０】
[0311]  図２２は、四角形ドメイン上の一様テッセレーションについて図４に関して説明されている１つまたは複数の技術による完全には再利用されない頂点のミス率を示している。ｘ軸およびｙ軸は、テッセレーション係数（例えば、ｆxおよびｆy）に対するものであり、ｚ軸は、ミス率を示す。この例では、ミス率は、テッセレーション係数が小さく、連続的部分のすべてのパッチ座標が再利用バッファ７８に収まるときにゼロである。しかしながら、大きいテッセレーション係数（例えば、ｆxおよびｆyが６４に等しい）については、図２２は、ミス率が約１（すなわち、約１００％）であることを示している。
【０２９１】
[0312]  図２３は、四角形ドメイン上の一様テッセレーションについて図５に関して説明されている１つまたは複数の技術による完全には再利用されない頂点のミスを示している。ｘ軸およびｙ軸は、テッセレーション係数（例えば、ｆxおよびｆy）に対するものであり、ｚ軸は、ミス率を示す。この例では、ミス率は、テッセレーション係数が小さく、連続的部分のすべてのパッチ座標が再利用バッファ７８に収まるときにゼロである。しかしながら、大きいテッセレーション係数（例えば、ｆxおよびｆyが６４に等しい）については、図２３は、ミス率が約０．４５（すなわち、約４５％）であることを示している。さらに、テッセレーション係数の間の差が大きい場合（例えば、ｆx＞＞ｆy、またはその逆）、図２３は、ミス率を、約０．５５（すなわち、約５５％）にまで上昇するものとして示している。
【０２９２】
[0313]  図２４〜図２７は、四角形ドメインについて、図３、図４、および図６〜図２０に関して上で説明されている技術の間のミス率の比較を示している。図２４では、両方のテッセレーション係数が互いに等しく、また（１．０〜６４．０）の範囲内にある。図２５では、一方のテッセレーション係数が５．０に等しく、他方のテッセレーション係数が（１．０〜６４．０）の範囲内にある。図２６では、一方のテッセレーション係数が２５．０に等しく、他方のテッセレーション係数が（１．０〜６４．０）の範囲内にある。図２７では、一方のテッセレーション係数が５０．０に等しく、他方のテッセレーション係数が（１．０〜６４．０）の範囲内にある。
【０２９３】
[0314]  図２４の直線２３８、図２５の直線２４４、図２６の直線２５０、および図２７の直線２５６は、接続生成器７２が本開示で説明されている技術によりプリミティブのドメイン座標を出力するときのミス率を示している。これらの直線で示されているように、ミス率は、非常に低く、０％に近い。図２４の直線２４２、図２５の直線２４６、図２６の直線２５２、および図２７の直線２５８は、接続生成器が、接続生成器７２とは異なり、図５に関して上で説明されている技術によりプリミティブのドメイン座標を出力するときのミス率を示している。これらの直線によって示されているように、ミス率は、接続生成器７２が本開示で説明されている１つまたは複数の例示的な技術を実施するときのミス率よりもかなり大きい。図２４の直線２４０、図２５の直線２４８、図２６の直線２５４、および図２７の直線２６０は、接続生成器が、接続生成器７２とは異なり、図４に関して上で説明されている技術によりプリミティブのドメイン座標を出力するときのミス率を示している。これらの直線によって示されているように、ミス率は、接続生成器７２が本開示で説明されている１つまたは複数の例示的な技術を実施するときのミス率よりもかなり大きく、また接続生成器が、接続生成器７２とは異なり、図５に示されている技術を実施するときよりも大きい。
【０２９４】
[0315]  図２８は、図１および２に示されているようなＧＰＵを備えることのデバイスを示すブロック図である。例えば、図２８は、デバイス１０をさらに示している。デバイス２８の例として、限定はしないが、ワイヤレスデバイス、いわゆるスマートフォンなどの携帯電話、携帯情報端末（ＰＤＡ）、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、テレビジョンセットトップボックス、タブレットコンピューティングデバイス、電子書籍リーダー、および同様のものが挙げられる。デバイス１０は、グラフィックスプロセッシングユニット（ＧＰＵ）１２と、システムメモリ１４と、プロセッサ１６と、ディスプレイ２６２と、ユーザインターフェース２６４と、トランシーバモジュール２６６とを備え得る。デバイス１０は、わかりやすくするために図２８に図示されていない追加のモジュールまたはユニットを備え得る。例えば、デバイス１０は、いずれも図２８には示されていないスピーカとマイクロフォンとを備え、デバイス１０が携帯ワイヤレス電話である例では、電話通信を行うか、または他の何らかの方法で音声入力を処理し、もしくは音を発することができる。さらに、デバイス１０内の図示されている様々なモジュールおよびユニットは、デバイス１０のすべての例において必要とは限らない。例えば、ユーザインターフェース２６４およびディスプレイ２６２は、デバイス１０がデスクトップコンピュータである例では、デバイス１０の外部にあってよい。別の例として、ディスプレイ２６２は、ディスプレイ２６２がモバイルデバイスのタッチセンサーまたは人感センサーディスプレイである例においてユーザインターフェース２６４の一部であってよい。
【０２９５】
[0316]  図２８のＧＰＵ１２、システムメモリ１４、およびプロセッサ１６は、図１および図２のＧＰＵ１２、システムメモリ１４、およびプロセッサ１６に類似していてもよい。ユーザインターフェース２６４の例として、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスが挙げられる。ユーザインターフェース２６４は、タッチスクリーンでもよく、またディスプレイ２６２の一部として組み込まれてもよい。トランシーバモジュール２６６は、ワイヤレスまたは有線方式の通信をデバイス１０と別のデバイスまたはネットワークとの間で行わせるための回路を備え得る。トランシーバモジュール２６６は、変調器と、復調器と、増幅器と、有線またはワイヤレス方式の通信を行うための他のそのような回路とを備えることができる。ディスプレイ２６２は、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、タッチセンサーディスプレイ、人感センサーディスプレイ、または別のタイプの表示デバイスを備え得る。
【０２９６】
[0317]  １つまたは複数の例において、説明されている機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組合せで実施され得る。ソフトウェアで実施された場合、これらの機能は、コンピュータ可読媒体上に１つもしくは複数の命令またはコードとして格納され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示において説明されている技術の実施のため命令、コード、および／またはデータ構造体を取り出すために、１つもしくは複数のコンピュータまたは１つもしくは複数のプロセッサによってアクセスされ得る利用可能な任意の媒体とすることができる。例として、限定はしないが、このようなコンピュータ可読媒体は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、もしくは他の光ディスク記憶装置、磁気ディスク記憶装置、もしくは他の磁気記憶デバイス、または命令またはデータ構造体の形態で所望のプログラムコードを格納するために使用され得る、コンピュータによってアクセスされ得る任意の他の媒体を備えることができる。本明細書で使用されるような、ディスク（ｄｉｓｋ）およびディスク（ｄｉｓｃ）は、コンパクトディスク（ｄｉｓｃ）（ＣＤ）と、レーザディスク（登録商標）（ｄｉｓｃ）と、光ディスク（ｄｉｓｃ）と、デジタル多用途ディスク（ｄｉｓｃ）（ＤＶＤ）と、フロッピー（登録商標）ディスク（ｄｉｓｋ）と、ブルーレイ（登録商標）ディスク（ｄｉｓｃ）とを含み、ディスク（ｄｉｓｋ）は、通常、データを磁気的に再生し、ディスク（ｄｉｓｃ）は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【０２９７】
[0318]  コードは、１つもしくは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または他の等価な集積回路もしくはディスクリート論理回路などの１つまたは複数のプロセッサによって実行され得る。従って、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実施に好適な任意の他の構造のいずれかを指し得る。また、これらの技術は、１つまたは複数の回路または論理素子で完全に実施されることもあり得る。
【０２９８】
[0319]  本開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）、または一組のＩＣ（すなわち、チップセット）を含む、様々なデバイスまたは装置で実施され得る。様々なコンポーネント、モジュール、またはユニットは、開示されている技術を行うように構成されたデバイスの機能的態様を強調するように本開示において説明されているが、異なるハードウェアユニットによる実現を必ずしも必要としない。むしろ、上で説明されているように、様々なユニットが、ハードウェアユニット内に組み合わされるか、または好適なソフトウェアおよび／またはファームウェアと併せて、上述のような１つまたは複数のプロセッサを含む、相互運用性を有するハードウェアユニットの集合体によって構成され得る。
【０２９９】
[0320]  こうして様々な例が説明された。これらおよび他の例は、次の請求項の範囲内にある。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
テッセレーションのための方法であって、
テッセレーションユニットにより、ドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも１つは、連続的部分である、
前記テッセレーションユニットにより、前記連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記テッセレーションユニットにより、前記連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第２の対角線ストリップは、前記第１の対角線ストリップと平行であるか、または前記第１の対角線ストリップと接するかのうちの１つである、
前記テッセレーションユニットにより、前記連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第３の対角線ストリップは、少なくとも前記第１の対角線ストリップと平行である、また、ここにおいて、前記第３の対角線ストリップ内のプリミティブの数は、前記第１の対角線ストリップおよび前記第２の対角線ストリップ内のプリミティブの数と異なる、を備える方法。
［Ｃ２］
少なくとも一部は再利用バッファ内の記憶スロットの数に基づき、複数の異なる動作モードから１つの動作モードを選択することをさらに備え、
ここにおいて、前記異なる動作モードの各々は、前記ドメインの前記連続的部分内の前記ドメイン座標を出力する異なる方法を示す、
ここにおいて、前記ドメインを分割することは、前記選択された動作モードに基づき前記ドメインを分割することを備える、Ｃ１に記載の方法。
［Ｃ３］
少なくとも１つのテッセレーション係数に１を足した値が再利用バッファ内の記憶スロットの数から２を引いた値以下であるかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記ドメインを分割することは、前記少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの前記数から２を引いた値以下であるときに前記ドメインを２つの部分に分割することを備える、
ここにおいて、前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することは、前記少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの前記数から２を引いた値以下であるときに前記第１の対角線ストリップと接する前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することを備える、Ｃ１に記載の方法。
［Ｃ４］
第４の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
第５の対角線ストリップ内のプリミティブのドメイン座標を出力することとをさらに備え、
ここにおいて、前記第５の対角線ストリップは、前記第４の対角線ストリップの鏡像である、Ｃ３に記載の方法。
［Ｃ５］
前記ドメインが前記四角形ドメインであるときに、前記ドメインを２つの部分に分割することは、前記ドメインを半分にして２つの部分に分割することを備え
ここにおいて、前記ドメインが三角形ドメインであるときに、前記ドメインを２つの部分に分割することは、前記ドメインを１／３の部分と２／３の部分とに分割することを備える、
ここにおいて、前記２／３の部分は、前記連続的部分を備える、Ｃ３に記載の方法。
［Ｃ６］
少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ内の記憶スロットの数から１を引いた値以下であるかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記ドメインを分割することは、前記ドメインが前記四角形ドメインであるとき、および前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記ドメインを４つの部分に分割することを備える、
ここにおいて、前記ドメインを分割することは、前記ドメインが三角形ドメインであるとき、および前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記ドメインを３つの部分に分割することを備える、
ここにおいて、前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することは、前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記第１の対角線ストリップと平行である前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力することを備える、Ｃ１に記載の方法。
［Ｃ７］
第１のテッセレーション係数が、第２のテッセレーション係数以下であると決定することをさらに備え、
ここにおいて、前記第１の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力すること、前記第２の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力すること、および前記第３の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力することは、前記第１のテッセレーション係数に対応する前記ドメインの軸から始まって、外向きに広がる形で出力することを備える、Ｃ１に記載の方法。
［Ｃ８］
少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ内の記憶スロットの数から１を引いた値より大きいかどうかを決定することをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ内の記憶スロットの前記数から１を引いた値より大きいときに、
前記第１の対角線ストリップ内のプリミティブのドメイン座標を出力することは、第１の連続的部分内にある前記第１の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記第２の対角線ストリップ内のプリミティブのドメイン座標を出力することは、前記第１の対角線ストリップと平行であり、前記第１の連続的部分内にある前記第２の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記第３の対角線ストリップ内のプリミティブのドメイン座標を出力することは、前記第１の連続的部分内にある前記第３の対角線ストリップ内のプリミティブのドメイン座標を出力することを備え、
前記方法は、
第２の連続的部分内にある第４の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記第２の連続的部分内にある第５の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第５の対角線ストリップは、前記第４の対角線ストリップと接する、
前記第２の連続的部分内にある第６の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第６の対角線ストリップは、前記第１の対角線ストリップと平行である、を備えるＣ１に記載の方法。
［Ｃ９］
前記ドメインの第１の部分が非一様テッセレートされると決定することと、
前記ドメインの第２の部分が一様テッセレートされると決定することとをさらに備え、
ここにおいて、前記ドメインを前記複数の部分に分割することは、前記ドメインの前記第２の部分を前記複数の部分に分割することを備えるＣ１に記載の方法。
［Ｃ１０］
前記ドメインの前記第１の部分は、前記ドメインの外側リングを備え、前記方法は、
前記ドメインの前記外側リング内のプリミティブのドメイン座標を出力することをさらに備えるＣ９に記載の方法。
［Ｃ１１］
前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標を受信することと、
再利用バッファが、前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応するパッチ座標を格納するかどうかを決定することと、
前記再利用バッファが、前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかの決定に基づきシェーダのインスタンス化を１回または複数回実行することとをさらに備えるＣ１に記載の方法。
［Ｃ１２］
デバイスであって、
テッセレーションユニットを備えるグラフィックスプロセッシングユニット（ＧＰＵ）と、前記テッセレーションユニットは
ドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも１つは、連続的部分である、
前記連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第２の対角線ストリップは、前記第１の対角線ストリップと平行であるか、または前記第１の対角線ストリップと接するかのうちの１つである、
前記連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第３の対角線ストリップは、少なくとも前記第１の対角線ストリップと平行である、また、ここにおいて、前記第３の対角線ストリップ内のプリミティブの数は、前記第１の対角線ストリップおよび前記第２の対角線ストリップ内のプリミティブの数と異なる、を行うように構成される、
前記第１、第２、および第３の対角線ストリップ内のプリミティブの前記出力されたドメイン座標のうちの１つまたは複数に対応するパッチ座標を格納するように構成された再利用バッファとを備えるデバイス。
［Ｃ１３］
少なくとも一部は前記再利用バッファ内の記憶スロットの数に基づき、複数の異なる動作モードから１つの動作モードを選択するように構成された処理ユニットをさらに備え、
ここにおいて、前記異なる動作モードの各々は、前記ドメインの前記連続的部分内の前記ドメイン座標を出力する異なる方法を示す、
ここにおいて、前記テッセレーションユニットは、前記選択された動作モードに基づき前記ドメインを分割するように構成される、Ｃ１２に記載のデバイス。
［Ｃ１４］
少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの数から２を引いた値以下であるかどうかを決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記テッセレーションユニットは、前記少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの前記数から２を引いた値以下であるときに前記ドメインを２つの部分に分割するように構成される、
ここにおいて、前記テッセレーションユニットは、前記少なくとも１つのテッセレーション係数に１を足した値が前記再利用バッファ内の記憶スロットの前記数から２を引いた値以下であるときに前記第１の対角線ストリップと接する前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力するように構成される、Ｃ１２に記載のデバイス。
［Ｃ１５］
前記テッセレーションユニットは、
第４の対角線ストリップ内のプリミティブのドメイン座標を出力し、
第５の対角線ストリップ内のプリミティブのドメイン座標を出力するように構成され、
ここにおいて、前記第５の対角線ストリップは、前記第４の対角線ストリップの鏡像である、Ｃ１４に記載のデバイス。
［Ｃ１６］
前記ドメインが四角形ドメインであるときに、前記テッセレーションユニットは、前記ドメインを半分にして２つの部分に分割するように構成される、
ここにおいて、前記ドメインが三角形ドメインであるときに、前記テッセレーションユニットは、前記ドメインを１／３の部分と２／３の部分とに分割するように構成される、
ここにおいて、前記２／３の部分は、前記連続的部分を備える、Ｃ１４に記載のデバイス。
［Ｃ１７］
少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの数から１を引いた値以下であるかどうかを決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記テッセレーションユニットは、前記ドメインが前記四角形ドメインであるとき、および前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記ドメインを４つの部分に分割するように構成される、
ここにおいて、前記テッセレーションユニットは、前記ドメインが三角形ドメインであるとき、および前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記ドメインを３つの部分に分割するように構成される、
ここにおいて、前記テッセレーションユニットは、前記少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの前記数から１を引いた値以下であるときに前記第１の対角線ストリップと平行である前記第２の対角線ストリップ内のプリミティブの前記ドメイン座標を出力するように構成される、Ｃ１２に記載のデバイス。
［Ｃ１８］
第１のテッセレーション係数が第２のテッセレーション係数以下であると決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記テッセレーションユニットは、前記第１の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力し、前記第２の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力し、前記第３の対角線ストリップ内の前記プリミティブの前記ドメイン座標を出力することを、前記第１のテッセレーション係数に対応する前記ドメインの軸から始めて、外向きに広がる形で、行うように構成されるＣ１２に記載のデバイス。
［Ｃ１９］
少なくとも１つのテッセレーション係数を２で割って１を足した値が前記再利用バッファ内の記憶スロットの数から１を引いた値より大きいかどうかを決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記ドメインが四角形ドメインであるときに、前記少なくとも１つのテッセレーション係数は、前記四角形ドメインの別のテッセレーション係数以下である、
ここにおいて、前記少なくとも１つのテッセレーション係数を２で割って１を足した値が再利用バッファ内の記憶スロットの前記数から１を引いた値より大きいときに、前記テッセレーションユニットは、
第１の連続的部分内にある前記第１の対角線ストリップ内のプリミティブのドメイン座標を出力し、
前記第１の対角線ストリップと平行であり、前記第１の連続的部分内にある前記第２の対角線ストリップ内のプリミティブのドメイン座標を出力し、
前記第１の連続的部分内にある前記第３の対角線ストリップ内のプリミティブのドメイン座標を出力し、
第２の連続的部分内にある第４の対角線ストリップ内のプリミティブのドメイン座標を出力し、
前記第２の連続的部分内にある第５の対角線ストリップ内のプリミティブのドメイン座標を出力し、ここにおいて、前記第５の対角線ストリップは、前記第４の対角線ストリップと接する、
前記第２の連続的部分内にある第６の対角線ストリップ内のプリミティブのドメイン座標を出力する、ここにおいて、前記第６の対角線ストリップは、前記第１の対角線ストリップと平行である、ように構成されるＣ１２に記載のデバイス。
［Ｃ２０］
前記ドメインの第１の部分が非一様テッセレートされていると決定し、前記ドメインの第２の部分が一様テッセレートされていると決定するように構成された処理ユニットをさらに備え、
ここにおいて、前記テッセレーションユニットは、前記ドメインの前記第２の部分を前記複数の部分に分割するように構成されるＣ１２に記載のデバイス。
［Ｃ２１］
前記ドメインの前記第１の部分は、前記ドメインの外側リングを備え、前記テッセレーションユニットは、前記ドメインの前記外側リング内のプリミティブのドメイン座標を出力するように構成されるＣ２０に記載のデバイス。
［Ｃ２２］
前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標を受信し、
前記再利用バッファが、前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかを決定し、
前記再利用バッファが、前記第１、第２、および第３の対角線ストリップ内の前記プリミティブに対する前記ドメイン座標に対応する前記パッチ座標を格納するかどうかの決定に基づきシェーダのインスタンス化を１回または複数回実行するように構成されたコントローラをさらに備えるＣ１２に記載のデバイス。
［Ｃ２３］
前記デバイスは、モバイルワイヤレスデバイス、ビデオディスプレイを備えるテレビゲーム機器、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、およびテレビジョンセットトップボックスのうちの１つを備えるＣ１２に記載のデバイス。
［Ｃ２４］
デバイスであって、
グラフィックスプロセッシングユニット（ＧＰＵ）を備え、前記ＧＰＵは
ドメインを複数の部分に分割するための手段と、ここにおいて、前記部分のうちの少なくとも１つは、連続的部分である、
前記連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、
前記連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第２の対角線ストリップは、前記第１の対角線ストリップと平行であるか、または前記第１の対角線ストリップと接するかのうちの１つである、
前記連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力するための手段と、ここにおいて、前記第３の対角線ストリップは、少なくとも前記第１の対角線ストリップと平行である、また、ここにおいて、前記第３の対角線ストリップ内のプリミティブの数は、前記第１の対角線ストリップおよび前記第２の対角線ストリップ内のプリミティブの数と異なる、を備えるデバイス。
［Ｃ２５］
コンピュータ可読記憶媒体であって、実行されたときに、１つまたは複数のプロセッサに、
ドメインを複数の部分に分割することと、ここにおいて、前記部分のうちの少なくとも１つは、連続的部分である、
前記連続的部分内にある第１の対角線ストリップ内のプリミティブのドメイン座標を出力することと、
前記連続的部分内にある第２の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第２の対角線ストリップは、前記第１の対角線ストリップと平行であるか、または前記第１の対角線ストリップと接するかのうちの１つである、
前記連続的部分内にある第３の対角線ストリップ内のプリミティブのドメイン座標を出力することと、ここにおいて、前記第３の対角線ストリップは、少なくとも前記第１の対角線ストリップと平行である、また、ここにおいて、前記第３の対角線ストリップ内のプリミティブの数は、前記第１の対角線ストリップおよび前記第２の対角線ストリップ内のプリミティブの数と異なる、を行わせる格納された命令を備えるコンピュータ可読記憶媒体。
【図１】
0006400601.tif 000004
【図２】
0006400601.tif 000005
【図３】
0006400601.tif 000006
【図４】
0006400601.tif 000007
【図５】
0006400601.tif 000008
【図６】
0006400601.tif 000009
【図７】
0006400601.tif 000010
【図８】
0006400601.tif 000011
【図９】
0006400601.tif 000012
【図１０】
0006400601.tif 000013
【図１１】
0006400601.tif 000014
【図１２】
0006400601.tif 000015
【図１３】
0006400601.tif 000016
【図１４Ａ】
0006400601.tif 000017
【図１４Ｂ】
0006400601.tif 000018
【図１５Ａ】
0006400601.tif 000019
【図１５Ｂ】
0006400601.tif 000020
【図１６Ａ】
0006400601.tif 000021
【図１６Ｂ】
0006400601.tif 000022
【図１７】
0006400601.tif 000023
【図１８】
0006400601.tif 000024
【図１９】
0006400601.tif 000025
【図２０】
0006400601.tif 000026
【図２１】
0006400601.tif 000027
【図２２】
0006400601.tif 000028
【図２３】
0006400601.tif 000029
【図２４】
0006400601.tif 000030
【図２５】
0006400601.tif 000031
【図２６】
0006400601.tif 000032
【図２７】
0006400601.tif 000033
【図２８】
0006400601.tif 000034