(57)【要約】  本開示では、グラフィックスレンダリング中に曲線をテッセレーションするための多段テッセレーション技術について説明する。特に、第１のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第１のセットにテッセレーションする。第２のテッセレーション段は、第１のセットのラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにさらにテッセレーションする。このようにして、第１のテッセレーション段の後にただ１つのラインセグメントによって表された曲線の各部分は、第２のテッセレーション段の後に２つ以上のラインセグメントによって表される。いくつかの例では、曲線をテッセレーションするために３つ以上のテッセレーション段を実行することができる。
2011515765.tif 000002
【特許請求の範囲】
【請求項１】
第１の計算ユニットを用いて曲線を第１のラインセグメントに分割するために前記曲線をテッセレーションすることと、
第２の計算ユニットを用いて前記第１のラインセグメントのうちの１つによって表される前記曲線の一部分を第２のラインセグメントにテッセレーションすることと、
を備える方法。
【請求項２】
前記曲線を第１の座標空間から第２の座標空間に変換することをさらに備え、
前記第１のラインセグメントのうちの１つによって表される前記曲線の前記部分をテッセレーションすることは、前記曲線を変換する際に使用されるスケールファクタに基づいて、前記第２の計算ユニットを用いて前記ラインセグメントのうちの１つによって表される前記曲線の前記部分を前記第２のラインセグメントにテッセレーションすることを備える
請求項１に記載の方法。
【請求項３】
前記スケールファクタに基づいて、前記第１のラインセグメントのうちの１つによって表される前記曲線の前記部分を第２のラインセグメントにテッセレーションすることは、前記スケールファクタが増加したとき前記第１のラインセグメントのうちの１つによって表される前記曲線の前記部分をより多数の第２のセグメントにテッセレーションすることを含む請求項２に記載の方法。
【請求項４】
少なくとも前記第１の計算ユニットの負荷に基づいて、前記第１の計算ユニットによって実行される前記曲線のテッセレーションの量を動的に分散することをさらに備える請求項１に記載の方法。
【請求項５】
前記第１の計算ユニットの負荷に基づいて、前記第１の計算ユニットによって実行される前記曲線のテッセレーションの前記量を動的に分散することは、前記第１の計算ユニットの前記負荷がしきい値を上回ったとき、前記曲線をより少数の第１のラインセグメントに分割するために前記曲線をテッセレーションすることを含む請求項４に記載の方法。
【請求項６】
前記第１の計算ユニットは中央処理ユニット（ＣＰＵ）を含み、前記第２の計算ユニットはグラフィックス処理ユニット（ＧＰＵ）を含み、前記ＧＰＵを用いて前記第１のラインセグメントのうちの１つによって表される前記曲線の前記部分をテッセレーションすることは、前記第１のラインセグメントのうちの１番目の第１のラインセグメントによって表される前記曲線の第１の部分をテッセレーションすることを含み、前記方法は前記第１のラインセグメントのうちの２番目の第１のラインセグメントによって表される前記曲線の第２の部分を並列にテッセレーションすることをさらに備える請求項１に記載の方法。
【請求項７】
前記第１のラインセグメントのうちの前記１番目の第１のラインセグメントおよび前記２番目の第１のラインセグメントによって表される前記曲線の前記第１の部分および前記第２の部分の各々をテッセレーションすることは、前記ＧＰＵのシェーダユニットを用いて前記それぞれの第１のラインセグメントによって表される前記曲線の前記それぞれの部分をテッセレーションすることを含む請求項６に記載の方法。
【請求項８】
前記シェーダは頂点シェーダを備え、前記方法は、
前記頂点シェーダを用いて前記第１のラインセグメントのうちの１つの頂点ポイントを指定する少なくとも２つの頂点属性を含む複数の頂点属性を受信することと、
前記曲線の前記部分を前記第２のラインセグメントにテッセレーションするために前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分上にある追加のポイントを表す追加の頂点属性を生成することと、
をさらに備える請求項７に記載の方法。
【請求項９】
前記第２の計算ユニットは専用テッセレーションハードウェアを含み、前記第１のラインセグメントのうちの１つによって表される前記曲線の前記部分をテッセレーションすることは、
少なくとも１つの入力を受信することと、
前記少なくとも１つの入力に基づいて、前記第２ラインセグメントのうちの１つに対応する少なくとも１つの頂点ポイントの少なくとも１つの座標を生成することと、
を備える請求項１に記載の方法。
【請求項１０】
前記テッセレーションハードウェアは、複数の乗算および累積演算ユニットのパイプラインを含み、前記少なくとも１つの頂点ポイントの少なくとも１つの座標を生成することは、前記少なくとも１つの入力に基づいて、前記第２のラインセグメントのうちの前記１つに対応する前記頂点ポイントの少なくとも１つの座標を生成するために、前記曲線の多項式表現を実装することを含む請求項９に記載の方法。
【請求項１１】
前記テッセレーションハードウェアは、それぞれ頂点ポイントの座標を生成する２つ以上の並列パイプラインとして動作するように前記複数の乗算および累積演算ユニットの前記パイプラインを構成することをさらに含む請求項１０に記載の方法。
【請求項１２】
第１の計算ユニットはグラフィックス処理ユニット（ＧＰＵ）の第１のコンポーネントであり、前記第２の計算ユニットは前記ＧＰＵの第２のコンポーネントである請求項１に記載の方法。
【請求項１３】
前記曲線をディスプレイに提示するために前記第２のラインセグメントをレンダリングすることをさらに備える請求項１に記載の方法。
【請求項１４】
前記第１の計算ユニット、前記第２の計算ユニットおよび第３の計算ユニットのうちの１つを用いて、前記第２のラインセグメントのうちの１つによって表される前記曲線の一部分を第３のラインセグメントにテッセレーションすることをさらに備える請求項１に記載の方法。
【請求項１５】
曲線を第１のラインセグメントに分割するために前記曲線をテッセレーションする第１の計算ユニットと、
前記第１のラインセグメントのうちの１つによって表される前記曲線の一部分を第２のラインセグメントにテッセレーションする第２の計算ユニットと、
を備えるデバイス。
【請求項１６】
前記第１の計算ユニットおよび前記第２の計算ユニットのうちの１つは、前記曲線を第１の座標空間から第２の座標空間に変換し、前記第２の計算ユニットは、前記曲線を変換する際に使用されるスケールファクタに基づいて、前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分を前記第２のラインセグメントにテッセレーションする請求項１５に記載のデバイス。
【請求項１７】
前記第２の計算ユニットは、前記スケールファクタが増加するとき、前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分をより多数の第２のラインセグメントにテッセレーションする請求項１６に記載のデバイス。
【請求項１８】
前記第１の計算ユニットは、少なくとも前記第１の計算ユニットの負荷に基づいて、前記第１の計算ユニットによって実行される前記曲線のテッセレーションの量を動的に分散する請求項１５に記載のデバイス。
【請求項１９】
前記第１の計算ユニットは、前記第１の計算ユニットの前記負荷がしきい値を上回るとき、前記曲線をより少数の第１のラインセグメントに分割するために前記曲線をテッセレーションする請求項１８に記載のデバイス。
【請求項２０】
前記第１の計算ユニットは中央処理ユニット（ＣＰＵ）を含み、前記第２の計算ユニットはグラフィックス処理ユニット（ＧＰＵ）を含み、前記ＧＰＵは、並列に、前記第１のラインセグメントのうちの１番目の第１のラインセグメントによって表される前記曲線の第１の部分をテッセレーションし、前記第１のラインセグメントの２番目の第１のラインセグメントによって表される前記曲線の第２の部分をテッセレーションする請求項１５に記載のデバイス。
【請求項２１】
前記ＧＰＵは、前記ＧＰＵのシェーダユニットを用いて、前記曲線の前記第１の部分および前記第２の部分の各々をテッセレーションする請求項２０に記載のデバイス。
【請求項２２】
前記シェーダユニットは、前記第１のラインセグメントのうちの前記１つの頂点ポイントを指定する少なくとも２つの頂点属性を含む複数の頂点属性を受信し、前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分上にある追加の頂点ポイントを表す追加の頂点属性を生成する頂点シェーダを含む請求項２１に記載のデバイス。
【請求項２３】
前記第２の計算ユニットは、少なくとも１つの入力を受信し、前記少なくとも１つの入力に基づいて、前記第２のラインセグメントのうちの１つに対応する少なくとも１つの頂点ポイントの少なくとも１つの座標を生成する専用テッセレーションハードウェアを含む請求項１５に記載のデバイス。
【請求項２４】
前記テッセレーションハードウェアは、前記少なくとも１つの入力に基づいて、前記第２のラインセグメントのうちの前記１つに対応する前記少なくとも１つの頂点ポイントの少なくとも１つの座標を生成するために、前記曲線の多項式表現を実装するパイプライン構成で構成された複数の乗算および累積演算ユニットを含む請求項２３に記載のデバイス。
【請求項２５】
前記複数の乗算および累積演算ユニットの前記パイプラインは、前記テッセレーションハードウェアがそれぞれ前記少なくとも１つの頂点ポイントの座標を生成する２つ以上の並列パイプラインとして動作するように構成された請求項２４に記載のデバイス。
【請求項２６】
第１の計算ユニットはグラフィックス処理ユニット（ＧＰＵ）の第１のコンポーネントであり、前記第２の計算ユニットは前記ＧＰＵの第２のコンポーネントである請求項１５に記載のデバイス。
【請求項２７】
ディスプレイをさらに備え、前記第１の計算ユニットおよび前記第２の計算ユニットのうちの１つは、前記曲線を前記ディスプレイに提示するために前記第２のラインセグメントをレンダリングする請求項１５に記載のデバイス。
【請求項２８】
前記第１の計算ユニット、前記第２の計算ユニットおよび第３の計算ユニットのうちの１つは、前記第２のラインセグメントのうちの１つによって表される前記曲線の一部分を第３のラインセグメントにテッセレーションする請求項１５に記載のデバイス。
【請求項２９】
曲線を第１のラインセグメントに分割するために前記曲線をテッセレーションする第１の手段と、
前記第１のラインセグメントのうちの１つによって表される前記曲線の一部分を第２のラインセグメントにテッセレーションする第２の手段と
を備えるデバイス。
【請求項３０】
前記曲線を第１の座標空間から第２の座標空間に変換する手段をさらに備え、
前記第２のテッセレーション手段は、前記曲線を変換する際に使用されるスケールファクタに基づいて、前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分を前記第２のラインセグメントにテッセレーションする
請求項２９に記載のデバイス。
【請求項３１】
前記第２のテッセレーション手段は、前記スケールファクタが増加したとき、前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分をより多数の第２のラインセグメントにテッセレーションする請求項３０に記載のデバイス。
【請求項３２】
少なくとも前記第１のテッセレーション手段の負荷に基づいて、前記第１のテッセレーション手段によって実行される前記曲線のテッセレーションの量を動的に分散する手段をさらに備える請求項２９に記載のデバイス。
【請求項３３】
前記第１のテッセレーション手段は、前記第１のテッセレーション手段の前記負荷がしきい値を超えたとき、前記曲線をより少数の第１のラインセグメントに分割するために前記曲線をテッセレーションする請求項２３に記載のデバイス。
【請求項３４】
前記第２のテッセレーション手段は、前記第１のラインセグメントのうちの１番目の第１のラインセグメントによって表される前記曲線の第１の部分、および前記第１のラインセグメントの２番目の第１のラインセグメントによって表される前記曲線の第２の部分を並列にテッセレーションする請求項２９に記載のデバイス。
【請求項３５】
前記第２のテッセレーション手段は、前記第１のラインセグメントのうちの前記１つの頂点ポイントを指定する少なくとも２つの頂点属性を含む複数の頂点属性を受信し、前記曲線の前記部分を前記第２のラインセグメントにテッセレーションするために、前記第１のラインセグメントのうちの前記１つによって表される前記曲線の前記部分上にある追加のポイントを表す追加の頂点属性を生成する請求項２９に記載のデバイス。
【請求項３６】
前記第２のテッセレーション手段は、前記少なくとも１つの入力に基づいて、前記第２のラインセグメントのうちの１つに対応する少なくとも１つの頂点ポイントの少なくとも１つの座標を生成する手段を含む専用テッセレーションハードウェアを備える請求項２９に記載のデバイス。
【請求項３７】
前記生成手段は、前記少なくとも１つの入力に基づいて、前記第２のラインセグメントのうちの前記１つに対応する前記少なくとも１つの頂点ポイントの少なくとも１つの座標を生成するために、前記曲線の多項式表現を実装する複数の乗算および累積演算ユニットのパイプラインを含む請求項３６に記載のデバイス。
【請求項３８】
前記テッセレーションハードウェアは、それぞれ頂点ポイントの座標を生成する２つ以上の並列パイプラインとして動作するように、前記複数の乗算および累積演算ユニットの前記パイプラインを構成する手段をさらに含む請求項３７に記載のデバイス。
【請求項３９】
前記第１のテッセレーション手段はグラフィックス処理ユニット（ＧＰＵ）の第１のコンポーネントであり、前記第２のテッセレーション手段は前記ＧＰＵの第２のコンポーネントである請求項２９に記載のデバイス。
【請求項４０】
前記曲線をディスプレイに提示するために、前記第２のラインセグメントをレンダリングする手段をさらに備える請求項２９に記載のデバイス。
【請求項４１】
前記第２のラインセグメントのうちの１つによって表される前記曲線の一部分を第３のラインセグメントにテッセレーションする第３の手段をさらに備える請求項２９に記載のデバイス。
【請求項４２】
前記第１のテッセレーション手段および前記第２のテッセレーション手段のうちの１つは、前記第２のラインセグメントのうちの１つによって表される前記曲線の一部分を第３のラインセグメントにテッセレーションする請求項２９に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピューティングデバイスに関し、より詳しくはコンピューティングデバイスによるグラフィックスレンダリングに関する。
【背景技術】
【０００２】
コンピューティングデバイスは、高度２次元（２Ｄ）および３次元（３Ｄ）グラフィックスアプリケーションをますます必要としている。例えば、コンピューティングデバイスは、ゲーム、キャラクタアニメーション、グラフィックメニューシステム、および高度グラフィックスレンダリングを必要とする他のアプリケーションをますます提供している。この高度グラフィックスレンダリング、特に３Ｄグラフィックスでは、かなりの量のデータ処理を伴う。高度グラフィックスレンダリングの品質は、処理リソースの量、利用可能な処理リソースの機能、利用可能な電力の量などによって制限されることがある。
【０００３】
例えば、例えばフレーム毎秒として測定される、高いレンダリングレートの高度グラフィックスレンダリングを必要とするアプリケーションは、利用可能なコンピューティングリソースにかなりの負担をかけることがある。利用可能なコンピューティングリソースへの負担は、コンピューティングリソースにかかる重い負荷のために、他のアプリケーションにおけるパフォーマンスの低下、低品質グラフィックスレンダリング、またはその両方をもたらす。携帯情報端末（ＰＤＡ）、ワイヤレス通信デバイス、グローバルポジショニングデバイスなど、モバイルコンピューティングデバイスに関して、グラフィックスレンダリングに必要な計算集約的データ処理は、モバイルコンピューティングデバイスの利用可能な電力のかなりの量を消費することがある。
【０００４】
マルチメディアプロセッサは、グラフィックス処理ユニット（ＧＰＵ）に結合された汎用中央処理ユニット（ＣＰＵ）を含むことができる。ＧＰＵは、コンピュータグラフィックスをディスプレイに表示するためにグラフィックスレンダリング動作を実行することに専用される。ＧＰＵは、様々の複雑なグラフィック関連アルゴリズムのための従来の汎用ＣＰＵよりも効率的な処理を行う高度並列構造（highly-parallel structure）で構築される。ＣＰＵ上で実行するグラフィック関連アルゴリズムがグラフィックス処理を必要とするとき、ＣＰＵはグラフィックスをテッセレーションし、ディスプレイにレンダリングするためにテッセレーションをＧＰＵに与える。ＧＰＵの高度並列性により、ＧＰＵは複雑な３次元画像をＣＰＵを用いて直接ディスプレイに描画するよりも迅速に、それらの画像をディスプレイに生成できるようになる。ＧＰＵは、多種多様なアプリケーションにおいて使用でき、ビデオゲームアプリケーション、複雑なグラフィカルユーザインタフェースアプリケーション、エンジニアリングまたは芸術アプリケーションのためのコンピュータ支援設計プログラム、あるいは２Ｄまたは３Ｄグラフィックスを使用する他のタイプのソフトウェアアプリケーションなど、グラフィック集約的アプリケーションにおいて極めて一般的である。
【発明の概要】
【０００５】
本開示では、グラフィックスレンダリング中に曲線をテッセレーションするための多段テッセレーション技術について説明する。曲線は、少なくとも２つのテッセレーション段でテッセレーションされる。第１のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第１のセットにテッセレーションする。第２のテッセレーション段は、第１のセットのラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにさらにテッセレーションする。このようにして、第１のテッセレーション段の後にただ１つのラインセグメントによって表された曲線の各部分は、第２のテッセレーション段の後に２つ以上のラインセグメントによって表される。一例では、例えば第１のテッセレーション段は中央処理ユニット（ＣＰＵ）によって実行され、第２のテッセレーション段はグラフィックス処理ユニット（ＧＰＵ）または専用テッセレーションハードウェアなど、テッセレーションコンポーネントによって実行される。いくつかの例では、多段テッセレーション技術は、３つ以上のテッセレーション段を含み得る。
【０００６】
一態様による方法は、第１の計算ユニットを用いて曲線を第１のラインセグメントに分割するために曲線をテッセレーションすることと、第２の計算ユニットを用いて第１のラインセグメントのうちの１つによって表される曲線の一部分を第２のラインセグメントにテッセレーションすることとを備える。
【０００７】
他の態様によるデバイスは、曲線を第１のラインセグメントに分割するために曲線をテッセレーションする第１の計算ユニットと、第１のラインセグメントのうちの１つによって表される曲線の一部分を第２のラインセグメントにテッセレーションする第２の計算ユニットとを備える。
【０００８】
別の態様によるデバイスは、曲線を第１のラインセグメントに分割するために曲線をテッセレーションする第１の手段と、第１のラインセグメントのうちの１つによって表される曲線の一部分を第２のラインセグメントにテッセレーションする第２の手段とを備える。
【０００９】
本開示で説明する技術は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組合せで実装され得る。ソフトウェアで実装された場合、ソフトウェアはマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはデジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価の集積またはディスクリート論理回路など、１つまたは複数のプロセッサを指すことがあるプロセッサで実行され得る。本技術を実行する命令を備えるソフトウェアは、最初にコンピュータ可読媒体に記憶され、プロセッサによってロードされて実行され得る。従って、本開示はまたプロセッサに本開示で説明する様々な技術のいずれかを実行させる命令を備えるコンピュータ可読媒体を企図する。場合によっては、コンピュータ可読媒体はコンピュータプログラム製品の一部をなすことができ、コンピュータプログラム製品は、製造業者に販売され得、および／またはデバイス中で使用され得る。コンピュータプログラム製品はコンピュータ可読媒体を含むことがあり、場合によってはパッケージング材料を含むこともある。
【００１０】
１つまたは複数の態様の詳細を添付の図面および以下の説明に記載する。本技術の他の特徴、目的および利点は、説明および図面ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１１】
【図１】多段テッセレーションを実行する例示的なコンピューティングデバイスを示すブロック図。
【図２】多段テッセレーションを実行するために同時に動作するＣＰＵおよびＧＰＵを示すブロック図。
【図３Ａ】曲線の例示的な２段テッセレーションを示す図。
【図３Ｂ】曲線の例示的な２段テッセレーションを示す図。
【図３Ｃ】曲線の例示的な２段テッセレーションを示す図。
【図３Ｄ】曲線の例示的な２段テッセレーションを示す図。
【図４Ａ】曲線の別の例示的な多段テッセレーションを示す図。
【図４Ｂ】曲線の別の例示的な多段テッセレーションを示す図。
【図４Ｃ】曲線の別の例示的な多段テッセレーションを示す図。
【図４Ｄ】曲線の別の例示的な多段テッセレーションを示す図。
【図５】本開示で説明する多段テッセレーション技術に従って曲線をテッセレーションするコンピューティングデバイスの例示的な動作を示す流れ図。
【図６】テッセレーションを実行する頂点シェーダの例示的な動作を示す流れ図。
【図７】多段テッセレーションを実行する別の例示的なコンピューティングデバイスを示すブロック図。
【図８】本開示で説明する技術に従ってテッセレーションを実行する例示的なテッセレーションハードウェア回路を示す概略図。
【図９】それぞれ３次多項式を計算する２並列３段乗算および累積（ＭＡＣ）アレイとして動作するように構成されたテッセレーションハードウェア回路を示す概略図。
【図１０】それぞれ２次多項式を計算する３並列２段ＭＡＣアレイとして動作するように構成されたテッセレーションハードウェア回路を示す概略図。
【図１１】本開示で説明する技術に従ってテッセレーションを実行するコンピューティングデバイスの例示的な動作を示す流れ図。
【発明を実施するための形態】
【００１２】
本開示では、グラフィックスレンダリング中に曲線をテッセレーションするための技術について説明する。特に、本開示では２つ以上のテッセレーション段中に曲線を複数のラインセグメントにテッセレーションする多段テッセレーション技術について説明する。第１のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第１のセットにテッセレーションする。第１のテッセレーション段は、場合によっては曲線を曲線の形状を大まかに表すのに十分なラインセグメントにテッセレーションすることができる。一例では、第１のテッセレーション段はコンピューティングデバイスの中央処理ユニット（ＣＰＵ）またはグラフィックス処理ユニット（ＧＰＵ）など、コンピューティングデバイスの第１の計算ユニットによって実行できる。
【００１３】
第２のテッセレーション段は、曲線を追加のラインセグメントにさらにテッセレーションする。特に、第２のテッセレーション段は、第１のセットのラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにテッセレーションする。言い換えれば、第１のテッセレーション段の後にただ１つのラインセグメントによって表された曲線の各部分が第２のテッセレーション段の後、２つ以上のラインセグメントによって表される。第２のテッセレーション段は、コンピューティングデバイスの第２の計算ユニットによって実行され得る。いくつかの態様では、第２の計算ユニットは、第２のテッセレーション段を含むグラフィックス演算の実行に専用のＧＰＵとすることができる。ＧＰＵは、いくつかの例では曲線の複数の部分を並列にテッセレーションするために使用できる高度並列構造を有することができる。別の態様では、第２の計算ユニットは第２のテッセレーション段を実行する専用テッセレーションハードウェア回路とすることができる。後述するように、多段テッセレーションは３つ以上のテッセレーション段を含み得る。
【００１４】
図１は、本開示で説明する技術による多段テッセレーションを実行する、例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、セルラーまたは衛星電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、テレビジョン、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、あるいはグラフィカル情報を出力する別のタイプのデバイスを含み得る。
【００１５】
図１の例に示すように、コンピューティングデバイス２はユーザ入力インタフェース４、ＣＰＵ６、デバイスメモリ８、ＧＰＵ１０、ＧＰＵメモリ１２、ディスプレイインタフェース１４およびディスプレイ１６を含む。ユーザ入力インタフェース４、ＣＰＵ６、デバイスメモリ８、ＧＰＵ１０およびディスプレイインタフェース１４は、バス１８を使用して通信することができる。バス１８は、第３世代バス（例えば、HyperTransportバスまたはInfiniBandバス）、第２世代バス（例えば、Advanced Graphics Portハ゛ス、Peripheral Component Interconnect (PCI) Expressバス、またはAdvanced eXentisible Interface (AXI) バス）、あるいは別のタイプのバスまたはデバイス相互接続など、任意の様々なバス構造とされ得る。
【００１６】
ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用または専用プロセッサを含むことができる。ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるために、ユーザがコンピューティングデバイス２に入力を与えることができる。ＣＰＵ６上で実行されるそれらのソフトウェアアプリケーションは、ワードプロセッサアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインタフェースアプリケーションまたは別のエンドユーザプログラムを含み得る。ユーザは、ユーザ入力インタフェース４を介してコンピューティングデバイス２に結合される、キーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの、１つまたは複数の入力デバイス（図示せず）を介してコンピューティングデバイス２に入力を与えることができる。
【００１７】
デバイスメモリ８は、スタートアップまたはリセット時にコンピューティングデバイス２を構成するために使用できるデバイス構成情報を記憶することができる。デバイスメモリは、またＣＰＵ６によって直ちにアクセス可能であり、および／または現在作用されているデータおよび／またはプログラムモジュールを記憶することができる。デバイスメモリ８は、ＧＰＵ１０によって出力された情報などのコンピューティングデバイス２の他のコンポーネントコンポーネントからの情報をさらに記憶することができる。デバイスメモリ８は、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光学データ媒体などの１つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスであり得る。
【００１８】
ＧＰＵ１０は、ディスプレイ１６上にコンピュータグラフィックスをレンダリングするためのグラフィックス演算の実行に専用とされ得る。従って、ＣＰＵ６上で実行されるソフトウェアアプリケーションの１つがグラフィックス処理を必要とするとき、ＣＰＵ６はディスプレイ１６にレンダリングするためにグラフィックス情報をＧＰＵ１０に供給する。ＧＰＵ１０は、いくつかの例では複雑なグラフィックス関連の演算についてＣＰＵ６よりも効率的な処理を行う並列構造を用いて構築され得る。ＧＰＵ１０の並列性により、ＧＰＵ１０はＣＰＵ６を用いて複雑な２次元（２Ｄ）または３次元（３Ｄ）画像をディスプレイ１６に直接描画するよりも迅速に、それらの画像をディスプレイ１６上で作成することができる。いくつかの例では、ＧＰＵ１０はコンピューティングデバイス２のマザーボードに統合され得る。他の例では、ＧＰＵ１０はコンピューティングデバイス２のマザーボードにおけるポートに設置されるグラフィックスカード上に存在するか、またはさもなければコンピューティングデバイス２と相互運用するように構成された周辺デバイス内に組み込まれ得る。ＧＰＵ１０は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積またはディスクリート論理回路など、１つまたは複数のプロセッサとされ得る。
【００１９】
ＧＰＵ１０は、ＧＰＵメモリ１２に直接結合され得る。従って、ＧＰＵ１０はバス１８を使用することなくＧＰＵメモリ１２からデータを読み取り、ＧＰＵメモリ１２にデータを書き込むことができる。言い換えれば、ＧＰＵ１０はオフチップメモリの代わりに、ローカルストレージを使用してデータをローカルで処理することができる。これによりＧＰＵ１０は大量のバストラフィックを受けることがある、バス１８を介したデータの読取りおよび書込みの必要がなくなるので、より効率的な方法で動作できるようになる。ただし、いくつかの例ではＧＰＵ１０は別個のメモリを含まず、代わりにバス１８を介してデバイスメモリ８を利用することがある。ＧＰＵメモリ１２は、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光学データ媒体など、１つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスであり得る。
【００２０】
ＣＰＵ６および／またはＧＰＵ１０は、ディスプレイ１６を介した提示のために画像情報を表示インタフェース１４に供給することができる。複雑な２Ｄおよび３Ｄグラフィックスの場合、一般に画像情報はディスプレイ１６のためにＧＰＵ１０によって生成される。ディスプレイ１６は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ（ＳＥＤ）、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ１６は、コンピューティングデバイス２内で統合され得る。例えば、ディスプレイ１６は携帯電話のスクリーンであり得る。代替的に、ディスプレイ１６は有線またはワイヤレス通信リンクを介してコンピュータデバイス２に結合されるスタンドアロンデバイスであり得る。例えば、ディスプレイ１６はケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されるコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００２１】
ＣＰＵ６上で実行されるソフトウェアアプリケーションの１つが複雑な２Ｄまたは３Ｄグラフィックス画像を提示することを望むとき、ＣＰＵ６およびＧＰＵ１０はグラフィックスをディスプレイ１６にレンダリングするために同時に動作する。例えば、ビデオゲームアプリケーションの場合、ソフトウェアアプリケーションはユーザにビデオゲーム経験を与えるために、あるシーケンスで一連のビデオフレームを提示することを望むことがある。ソフトウェアアプリケーションは、表示されるグラフィックス画像を形成する１つまたは複数の曲線を定義するコマンドを含む。例えば、ビデオゲームアプリケーションの場合、ビデオゲームアプリケーションはビデオゲームのシーンのグラフィックス画像の曲線を定義するコマンドを含み得る。そのコマンドは、例えばキャラクタとバックグラウンド内のオブジェクトとの境界を定義するいくつかの曲線を定義することができる。
【００２２】
一例では、ソフトウェアアプリケーションは２００５年７月２８日の文献“OpenVG Specification, Version 1.0”に定義されるように、OpenVGに従って複数の経路、すなわち曲線を定義するコマンドを含み得る。OpenVGは、１つまたは複数のセグメントコマンドを使用して２Ｄまたは３Ｄのグラフィックス画像の仕様を可能にするコマンドのセットである。OpenVG仕様に従って、セグメントコマンドは直線セグメント、ベジエ曲線セグメントまたは楕円弧セグメントを定義することができる。OpenVGの拡張では、他のタイプのセグメントを指定することができる。従って、本開示の技術はOpenVG仕様に現在定義されているセグメントコマンドに限定されない。さらにOpenVGのコンテキストで本開示の技術について説明するが、それらの技術はOpenGL、Direct3D、Graphics Device Interface (GDI)、Quartz、QuickDrawなど、他のグラフィックスオーサリング規格のコンテキストで使用され得る。
【００２３】
曲線をディスプレイ１６にレンダリングするために、ＣＰＵ６および／またはＧＰＵ１０は本開示で説明する多段テッセレーション技術を使用して曲線をラインセグメントにテッセレーションする。一態様では、ＣＰＵ６は曲線をラインセグメントに分割するために第１のテッセレーション段を実行し、ＧＰＵ１０は曲線を追加のラインセグメントにさらに分割するために第２のテッセレーション段を実行することができる。この例では、ＣＰＵ６は第１のテッセレーション段中に曲線を曲線の形状を大まかに表すラインセグメントの第１のセットにテッセレーションする。曲線のラインセグメントの各々は、曲線の一部分を表す。第２のテッセレーション段中に、ＧＰＵ１０はラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにテッセレーションする。言い換えれば、第１のテッセレーション段の後にただ１つのラインセグメントによって表された曲線の各部分は、第２のテッセレーション段の後、２つ以上のラインセグメントによって表される。ＧＰＵ１０は、２つ以上のラインセグメントによって表される曲線の複数の部分を並列にテッセレーションするための並列構造を利用することができる。このようにして、いくつかの態様ではコンピューティングデバイス２は完全に並列に曲線の複数の部分に同時に作用するためのＧＰＵ１０のアクセラレーション機能を利用することができ、それによってレンダリングパフォーマンスが改善される。
【００２４】
ＣＰＵ６によって実行されるテッセレーションの量は、ＣＰＵ６の処理負荷および／またはＧＰＵ１０の処理負荷に応じて変化し得る。上述のように、ＣＰＵ６は一度に複数のソフトウェアアプリケーションを実行することができ、ソフトウェアアプリケーションの各々はＣＰＵ６の処理リソースを使用して計算タスクを実行する。グラフィックス関連のアプリケーションがグラフィックス処理を望んだときに、他の計算タスクによりＣＰＵ６に低い負荷がかかっている場合、例えばＣＰＵ６の処理負荷がしきい値以下のとき、ＣＰＵ６は曲線をより多くのラインセグメントにテッセレーションすることができる。これにより、ＧＰＵ１０は曲線の部分をより少ない追加のラインセグメントにテッセレーションすればよいので、ＧＰＵのテッセレーション作業負荷は低減する。
【００２５】
グラフィックス関連のアプリケーションがグラフィックス処理を望んだときに、他の計算タスクによりＣＰＵ６に大きい負荷がかかっている場合、例えばＣＰＵ６の処理負荷がしきい値よりも大きいとき、ＣＰＵ６は曲線をより少数のラインセグメントにテッセレーションすることができる。例えば、ＣＰＵ６上でゲームアプリケーションが実行されているので、ＣＰＵ６が人間プレーヤを相手にすること、ゲームにおける物理効果を計算すること、音響効果を与えること、ゲームグラフィックスを表示することなどをコンピュータに行わせる人工知能などのタスクを実行する必要があるとき、ＣＰＵ６に大きい負荷がかかることがある。これにより、ＧＰＵ１０は曲線の部分をより多い追加のラインセグメントにテッセレーションしなければならないので、ＣＰＵ６のテッセレーション作業負荷は低減するが、ＧＰＵ１０のテッセレーション作業負荷は増加する。テッセレーション処理作業負荷は、その上、ＧＰＵ１０の負荷またはＣＰＵ６の負荷とＧＰＵ１０の負荷との組合せに基づいて分散（balance）され得る。このようにして、コンピューティングデバイス２は利用可能な処理リソースに応じてＣＰＵ６とＧＰＵ１０との間でテッセレーション作業負荷を動的に分散することができる。
【００２６】
別の例では、ＧＰＵ１０内で曲線の多段テッセレーションが行われることがある。この例では、ＣＰＵ６は曲線のテッセレーションを実行しない。代わりに、ＧＰＵ１０内の第１の計算ユニットが曲線を第１のラインセグメントに分割するために第１のテッセレーション段を実行し、ＧＰＵ１０内の第２の計算ユニットが第１のラインセグメントによって表される曲線の部分を追加のラインセグメントにさらに分割するために第２のテッセレーション段を実行する。この例では、コンピューティングデバイス２は、両方のテッセレーション段中に完全に並列に曲線の複数の部分に同時に作用するためのＧＰＵ１０のアクセラレーション機能を利用することができる。
【００２７】
いくつかの例では、曲線の多段テッセレーションは３つ以上のテッセレーション段を含み得る。例えば、第１のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第１のセットにテッセレーションすることができる。第１のテッセレーション段の後にラインセグメントの第１のセットの１つのみによって表された曲線の各部分が第２のテッセレーション段の後、２つ以上のラインセグメントによって表されるように、第２のテッセレーション段中に第１のラインセグメントの各々によって表される曲線の部分をラインセグメントの第２のセットにテッセレーションする。第３のテッセレーション段中に、第２のラインセグメントの各々によって表される曲線の部分を追加のラインセグメントにテッセレーションする。テッセレーション段はいくつでも実行され得る。テッセレーション段は、ＣＰＵ６、ＧＰＵ１０および／または専用テッセレーションハードウェア（図１に図示せず）によって実行され得る。
【００２８】
いくつかの他の要素は、コンピューティングデバイス２中に含められ得るが、説明を簡単で容易にするため、図１には特に示していない。例えば、コンピューティングデバイス２は、以下で図７に詳細に示し、説明するテッセレーションハードウェア７２などの専用テッセレーションハードウェアを含むことができる。その上、本開示で説明する技術は様々な他のアーキテクチャで実装できるので、図１に示すアーキテクチャは例にすぎない。
【００２９】
図２は、図１のＣＰＵ６およびＧＰＵ１０をさらに詳細に示すブロック図である。ＣＰＵ６およびＧＰＵ１０は、本開示で説明する多段テッセレーションを使用して２Ｄまたは３Ｄグラフィックス画像の１つまたは複数の曲線をテッセレーションするために一緒に動作する。ＣＰＵ６は、ＣＰＵ６上で実行される少なくとも１つのソフトウェアアプリケーション２０を含む。ＣＰＵ６上で実行されるソフトウェアアプリケーション２０は、ビデオゲームアプリケーション、グラフィカルユーザインタフェースアプリケーション、ポータブル地図作成アプリケーション、スケーラブルベクターグラフィックス（ＳＶＧ）アプリケーション、エンジニアリングまたは芸術アプリケーションのためのコンピュータ支援設計プログラム、あるいは２Ｄまたは３Ｄグラフィックスを使用する別のタイプのソフトウェアアプリケーションとされ得る。
【００３０】
上述のように、ソフトウェアアプリケーション２０は表示されるグラフィックス画像を形成する１つまたは複数の曲線を定義するコマンドを含むことができる。その命令は、OpenVG，OpenGL，Direct3D，Graphics Device Interface(GDI)，Quartz、QuickDrawなど、様々なグラフィックスオーサリング規格、すなわちアプリケーションプログラミングインタフェース（ＡＰＩ）のいずれかに準拠することができる。例えば、OpenVGの場合、セグメントコマンドのシーケンスによって曲線が定義される。OpenVGの各セグメントコマンドは、移動、直線セグメント、２次または３次ベジエ曲線セグメントあるいは楕円弧セグメントを指定することができる。従って、各セグメントコマンドは曲線の一部分を定義することができる。ソフトウェアアプリケーション２０は、任意の形状の曲線を生成するためのセグメントコマンドのシーケンスを含み得る。
【００３１】
曲線をディスプレイ１６にレンダリングする準備をするために、ＣＰＵ６および／またはＧＰＵ１０は本開示で説明する多段テッセレーション技術を使用して、曲線をラインセグメントにテッセレーションする。一態様では、ＣＰＵ６は第１のテッセレーション段を実行し、ＧＰＵ１０は第２のテッセレーション段を実行する。ソフトウェアアプリケーション２０は、ＧＰＵドライバ２１と対話するグラフィックスＡＰＩ２６を呼び出して、ＣＰＵ６に第１のテッセレーション段を実行させることができる。特に、ＧＰＵドライバ２１はＧＰＵドライバ２１内のテッセレーションモジュール２２を呼び出して、第１のテッセレーション段中に曲線をテッセレーションする。テッセレーションモジュール２２は、曲線の各セグメント（すなわち、コマンド）を個々にテッセレーションすることができる。言い換えれば、テッセレーションモジュール２２は、一度に曲線の１つのセグメントに作用して、曲線の当該セグメントをラインセグメントに分割することができる。他の例では、テッセレーションモジュール２２は曲線全体をテッセレーションすることができる。従って、本明細書で使用する「曲線」という用語は、オブジェクトの曲線またはオブジェクトの曲線のセグメントを指すことができる。
【００３２】
テッセレーションモジュール２２は、曲線をラインセグメントの第１のセットにテッセレーションする。ラインセグメントの各々は、曲線の一部分を表す。いくつかの例では、ラインセグメントの第１のセットは、少なくとも曲線の概略的な形状を近似することができる。ただし、ラインセグメントの第１のセットは、曲線の形状の高解像度近似を与える必要がない。テッセレーションモジュール２２は、例えば曲線を曲線の概略的な形状を保存するために必要な最小数のラインセグメントにテッセレーションすることができる。言い換えれば、テッセレーションモジュール２２は、曲線の概略的な形状を依然として保持しながら、できるだけ少ないラインセグメントを生成するように曲線をテッセレーションすることができる。別の例では、ＣＰＵ６に大きい負荷がかかっているとき、例えばＣＰＵ６の処理負荷がしきい値を超えたとき、テッセレーションモジュール２２は曲線のテッセレーションを実行することができない。代わりに、ＣＰＵ６は多段テッセレーションのための曲線情報をＧＰＵ１０に供給することができる。しかしながら、これによりＧＰＵ１０の作業負荷が増加する。そこで、ＣＰＵ６はＣＰＵ６とＧＰＵ１０との間でテッセレーション負荷を分散するように構成され得る。
【００３３】
ラインセグメントの第１のセットを生成するために、テッセレーションモジュール２２は曲線上にある１つまたは複数の頂点ポイントを計算する。テッセレーションモジュール２２は、例えばグラフィックスオーサリング仕様（例えば、OpenVG）で指定できる、特定のコマンドセグメントに対応する数学的表現を使用して１つまたは複数の頂点ポイントを生成することができる。ＯｐｅｎＶＧを使用して楕円弧曲線として定義される曲線の場合、例えば、テッセレーションモジュール２２は以下の式を使用して頂点ポイントを計算することができる。
【数１】
2011515765.tif 000003
【００３４】
ここで、（ｘ，ｙ）はオブジェクト空間における曲線上の頂点ポイントの位置座標、ａは楕円の半長軸、ｂは楕円の半短軸であり、０≦θ≦２πである。ラインセグメントの第１のセットの各ラインセグメントは、各頂点ポイントをその隣接頂点ポイントに接続する直線セグメントである。いくつかの例では、ＣＰＵ６のテッセレーションモジュール２２または他のコンポーネントは、図７に関して詳細に説明するように、曲線の展開された多項式表現を計算することができる。
【００３５】
テッセレーションモジュール２２は、曲線をラインセグメントの第１のセットに等しく分割するように、曲線をテッセレーションすることができる。例えば、テッセレーションモジュール２２は曲線をＮ個のラインセグメントに等しく分割することができる。ここで、Ｎは任意の正の整数値に等しい。上記の楕円弧曲線の例では、例えばテッセレーションモジュール２２は開始角θsから終了角θeまでステップサイズ（θs−θe）／Ｎでθの値を逐次増加させて、楕円弧曲線をＮ個の等しいラインセグメントに等しく分割することができる。例えば、楕円弧曲線が完全な楕円であり、開始角θs＝０，終了角θe＝２π，Ｎ＝８である場合、テッセレーションモジュール２２はθ0＝θs＝０，θ1＝π／４，θ2＝π／２，θ3＝３π／４，θ4＝π，θ5＝５π／４，θ6＝３π／２，θ7＝７π／４，θ8＝θe＝２πにおける頂点ポイントを接続する８つのラインセグメントを生成することができる。他の例では、テッセレーションモジュール２２は曲線の曲率がより大きい曲線の部分の場合は曲線をより多くのラインセグメントに分割し、曲線の曲率がより小さい曲線の部分の場合は曲線をより少ないラインセグメントに分割するように、曲線を適応的にテッセレーションすることができる。このようにして、曲線の曲率がより大きい場合はテッセレーションがより密になるように、ステップサイズは非線形となる。再び楕円曲線の例を参照すると、テッセレーションモジュール２２はθ＝０およびθ＝πの近傍（すなわち、ステップサイズθは、より小さい）では、より多くのラインセグメントを生成し、θ＝π／２およびθ＝３π／２の近傍（すなわち、ステップサイズθは、より大きい）では、より少ないラインセグメントを生成するように、比ｂ／ａに基づいてステップサイズθを生成することができる。
【００３６】
ＧＰＵドライバ２１のテッセレーション負荷コントローラ２４は、ＣＰＵ６の負荷および／またはＧＰＵ１０の負荷に基づいて、ラインセグメントの数Ｎを計算することができる。テッセレーション負荷コントローラ２４は、例えばＣＰＵ６の負荷を監視するオペレーティングシステム（図示せず）から、ＣＰＵ６の負荷に関するデータを受信することができる。従って、ＣＰＵ６はそれ自体の作業負荷を監視することができる。テッセレーション負荷コントローラ２４は、ＧＰＵ１０の負荷をさらに監視することができる。ＣＰＵ６がＧＰＵ１０にタスクを送信し、ＧＰＵ１０の進捗を監視することによってＧＰＵ１０を制御するので、テッセレーション負荷コントローラ２４はＧＰＵ１０に送信されたコマンドの数に基づいて負荷を判断することができる。
【００３７】
テッセレーションモジュール２２は、生成されたラインセグメントを使用して描画プリミティブのリストを生成することができる。テッセレーションモジュール２２は、例えばラインセグメントの頂点ポイントをプリミティブのための頂点ポイントの少なくとも一部分として使用して、描画プリミティブのリストを形成することができる。テッセレーションモジュール２２は、ポイント、ラインストリップ、ラインループ、別々のライン、三角形ストリップ、三角形ファン、別々の三角形、四辺形ストリップ、別々の四辺形、または他のタイプの多角形を含むいくつかの描画プリミティブのいずれかを生成することができる。
【００３８】
ＣＰＵ６は、グラフィックスＡＰＩ２６を呼び出して、ＧＰＵドライバ２１を介して描画プリミティブ、例えば三角形のリストをＧＰＵ１０に伝達することができる。グラフィックスＡＰＩ２６は、ＣＰＵ６とＧＰＵ１０との間にインタフェースを与えるソフトウェア命令のセットを含み得る。特に、ＧＰＵドライバ２１はＧＰＵ１０に描画プリミティブを表示可能なグラフィックス情報にレンダリングさせる１つまたは複数のコマンドを作成し、発行することができる。当該コマンドは、プリミティブの頂点ポイント、プリミティブの各頂点ポイントに関連する色情報、プリミティブの各頂点ポイントに関連するテクスチャ情報、プリミティブのためのスケーリング情報、プリミティブのための回転情報などを含み得る。ＧＰＵドライバ２１は、プリミティブに対して実行すべき演算を指定するコマンドを作成することができる。例えば、ＧＰＵドライバ２１は曲線のテッセレーションおよび／またはレンダリングを実行するようにＧＰＵ１０に指示するコマンドを作成することができる。
【００３９】
ＧＰＵ１０がＣＰＵ６からコマンドを受信すると、コマンドデコーダ２８はコマンドを復号し、ＧＰＵ１０の１つまたは複数の処理要素をコマンドにおいて指定された演算を実行するように構成する。コマンドデコーダ２８は、さらにコマンド内に含まれる情報（例えば、プリミティブまたは曲線の情報）をＧＰＵメモリ１２に、またはＧＰＵ１０内の１つまたは複数のバッファ（図示せず）内に記憶することができる。コマンドデコーダ２８は、ＧＰＵ１０の処理要素に特定のグラフィックス処理演算を実行させる命令のセットをＧＰＵ１０の処理要素の各々にロードすることができる。図２に示す例では、ＧＰＵ１０の処理要素には頂点シェーダ３０、ジオメトリシェーダ３２、ラスタライザ３４およびピクセルシェーダ３６がある。いくつかの例では、ＧＰＵ１０はまた専用テッセレーションハードウェア３８を含むことができる。他の処理要素は、ＧＰＵ１０中に含められ得るが、説明を簡単で容易にするために図２には特に示していない。
【００４０】
頂点シェーダ３０、ジオメトリシェーダ３２、ラスタライザ３４およびピクセルシェーダ３６は、グラフィックスパイプラインとして動作する。グラフィックスパイプラインとして動作するとき、頂点シェーダ３０はコマンドデコーダ２８またはＧＰＵメモリ１２から受信した入力データの第１のセットに対して１つまたは複数のグラフィックス演算の第１のセットを実行し、中間結果の第１のセットをジオメトリシェーダ３２に出力する。ジオメトリシェーダ３２は、頂点シェーダ３０から受信した中間結果に対して１つまたは複数のグラフィックス演算の第２のセットを実行し、中間結果の第２のセットをラスタライザ３４に出力する。コマンドデコーダ２２から受信した初期入力データの第２のセットに対して、頂点シェーダ３０はグラフィックス演算の第１のセットを実行し、ジオメトリシェーダ３２はグラフィックス演算の第２のセットを実行する。ディスプレイのためにグラフィックス画像が生成されるまで、グラフィックス処理は同様の方法で続く。
【００４１】
その上、ＧＰＵ１０は複雑なグラフィックス関連の演算についてＣＰＵ６よりも効率的な処理を行う高度並列構造を有し得る。図２にはただ１つのグラフィックスパイプラインが示されているが、ＧＰＵ１０は複数のデータプリミティブに並列に作用する複数の同様のグラフィックスパイプラインを含み得る。言い換えれば、ＧＰＵ１０は完全に並列にいくつかのデータプリミティブに作用することができる、複数の頂点シェーダ、ジオメトリシェーダ、ラスタライザおよびピクセルシェーダを含むことができる。従って、ＧＰＵ１０の高度並列性により、いくつかの例ではＧＰＵ１０はＣＰＵ６を用いて複雑な２Ｄまたは３Ｄグラフィックス画像をディスプレイ１６に直接描画するよりも迅速に、それらの画像をディスプレイ１６上で作成することができる。
【００４２】
頂点シェーダ３０は、一度に単一の頂点に作用する。頂点シェーダは、単一の頂点を定義する１つまたは複数の頂点属性のシーケンスを受信するように構成され得る。従来の頂点属性には、位置属性、法線属性、１つまたは複数の色属性、１つまたは複数のテクスチャ属性、１つまたは複数の照明属性などがある。その上、頂点シェーダ３０は頂点シェーダ３０が使用されているグラフィックス演算に応じて、１つまたは複数のカスタム頂点属性を受信するように構成され得る。いくつかの例では、各頂点を定義するために使用できる頂点属性の数は、属性の特定の最大数に制限され得る。
【００４３】
頂点シェーダ３０は、頂点に対していくつかのグラフィックス演算を実行することができる。例えば、頂点シェーダ３０は入力頂点を異なる座標系に変換するように構成され得る。特に、頂点シェーダ３０は入力として受信される頂点の位置属性をオブジェクト座標空間からデバイス座標空間に変換する。オブジェクト座標空間は、グラフィックス画像がソフトウェアアプリケーション２０の命令によってどのように定義されるかを表す。デバイス座標空間は、グラフィックス画像がデバイス、例えばディスプレイ１６上でどのように表示されるかを表す。頂点シェーダ３０は、例えば回転、変換、スケーリングなどのアフィン演算を使用して、頂点座標を変換することができる。一例では、頂点シェーダ３０は以下の式を使用して頂点座標を変換することができる。
【数２】
2011515765.tif 000004
【００４４】
ここで、(X’，Y’，1）はデバイス座標空間中の頂点位置、(X,Y,1)はオブジェクト座標空間中の頂点位置、Scale_xはｘ軸に沿ったスケーリングファクタ、Scale_yはｙ軸に沿ったスケーリングファクタ、Rotate_xはｘ軸を中心とする回転、Rotate_yはｙ軸を中心とする回転、Trans_xはｘ軸に沿った変換、Trans_yはｙ軸に沿った変換である。これらの変数は、ソフトウェアアプリケーション２０の命令において指定され、グラフィックスＡＰＩ２６を介してＧＰＵ１０に供給され、コマンドデコーダ２８によって頂点シェーダ３０内に構成され得る。
【００４５】
いくつかの例では、頂点シェーダ３０は曲線のための変換を１回計算することができる。言い換えれば、頂点シェーダ３０は経路にわたるあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用される式の変換を計算することができる。上記の楕円弧曲線の例の場合、頂点シェーダ３０は曲線を変換して、次のように変換後の楕円弧曲線の数学的表現を定義することができる。
【数３】
2011515765.tif 000005
【００４６】
ここで、(x’，y’)はデバイス座標空間中の位置座標、ｘtはｘ軸に沿った変換、ｙtはｙ軸に沿った変換、Ｓｆは変換のスケールファクタである。式（４）および式（５）では、頂点シェーダ３０が曲線を変換し、スケーリングするにすぎない（すなわち、曲線の回転はない）と仮定する。いくつかの例では、ＣＰＵ６は頂点シェーダ３０の代わりに変換を実行することができる。
【００４７】
頂点シェーダ３０は、入力頂点属性に対していくつかの他の演算を実行することができる。頂点シェーダ３０は、頂点の色属性の１つまたは複数、頂点のテクスチャ属性の１つまたは複数、頂点の照明属性の１つまたは複数などを変更するための、１つまたは複数の演算を実行することができる。頂点シェーダ３０は、同様にあらゆる頂点を変更するか、または一定の性質を有する頂点のみを変更するように構成され得る。従って、頂点シェーダ３０は１つの頂点に対して演算の１つのセットを実行するように構成され得、次いで次の頂点に対して演算の異なるセットを実行するように再構成され得る。
【００４８】
ジオメトリシェーダ３２は、個々の頂点ポイントにではなく、プリミティブに作用する。ジオメトリシェーダ３２は、頂点ポイントのストリング（または頂点ポイントを定義する属性）を受信し、プリミティブを形成する。三角形プリミティブの場合、ジオメトリシェーダ３２は三角形プリミティブの３つの頂点ポイントを定義する頂点属性の３つのセットを入力することができる。場合によっては、ジオメトリシェーダ３２は隣接するプリミティブの頂点ポイントのための頂点属性をさらに入力することができる。ジオメトリシェーダ３２は、プリミティブを廃棄するか、または入力プリミティブの頂点ポイントの頂点属性を使用して１つまたは複数の新しいプリミティブを生成することができる。場合によっては、ＧＰＵ１０がジオメトリシェーダ３２を含まないことがある。
【００４９】
ラスタライザ３４は、頂点属性に基づいてジオメトリシェーダ３２によってまたはジオメトリシェーダ３２がない場合は頂点シェーダによって出力されたプリミティブをピクセルに変換する。ラスタライザ３４は、プリミティブに対してクリッピング演算を実行し、ピクセルシェーダ３６のためのプリミティブを準備することができる。ラスタライザ３４は、スクリーン中のピクセルのうちのどのピクセルがオブジェクトのジオメトリ内にあり、従って描画される必要があるかを判断することができる。さらに、ラスタライザ３４はピクセルデータを生成するために頂点データの補間を実行する。ラスタライザ３４の出力は、ピクセルシェーダ３６に供給される。ピクセルシェーダ３６（フラグメントシェーダと呼ばれることがある）は、ディスプレイ１６上に表示される各ピクセルに対してグラフィックス演算を実行する。ピクセルシェーダ３６は、例えば各ピクセルロケーションにおいて表示する色値を生成するために、ピクセルごとのテクスチャ化、フォグ演算および着色演算を実行することができる。
【００５０】
本開示の技術によれば、ＧＰＵ１０は曲線を追加のラインセグメントにテッセレーションするために少なくとも第２のテッセレーション段を実行するように構成され得る。例えば、シェーダ３０，３２または３６は、ＣＰＵ６からのラインセグメントによって表される曲線の部分を曲線の部分をより正確に表す追加のラインセグメントに再分割するために、第２のテッセレーション段を実行することができる。別の例として、専用テッセレーションハードウェア３８がＣＰＵ６からのラインセグメントによって表される曲線の部分を曲線の部分をより正確に表す追加のラインセグメントに再分割するために、第２のテッセレーション段を実行することができる。いずれの場合も、第２のテッセレーション段により、ＣＰＵ６によって生成されたラインセグメントの各々によって表される曲線の部分は、より詳細なラインセグメント（またはサブセグメント）の第２のセットに再分割される。シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、元の曲線を追加のラインセグメントにテッセレーションする。言い換えれば、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、ＣＰＵ６によって生成されたラインセグメントではなく、ソフトウェアアプリケーション２０によって定義された実際の曲線を追加のラインセグメントに分割する。このようにして、第１のテッセレーション段の後にただ１つのラインセグメントによって表された曲線の各部分は、第２のテッセレーション段の後に、２つ以上のラインセグメントによって表される。追加のラインセグメントは、曲線のより良い表現、例えば曲線のより高い解像度表現をもたらす。
【００５１】
シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、変換中に実行されるスケーリングの量に基づいて第２のテッセレーション段を実行することができる。特に、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８がラインセグメントの各々によって表される曲線の部分をテッセレーションした後の追加のラインセグメントの数は、スケールファクタの関数である。スケールファクタは、オブジェクト座標空間からデバイス座標空間への頂点ポイントの変換中に行われたスケーリングの量の近似値である。ＣＰＵ６は、第２のテッセレーション段のための追加のラインセグメントの数を決定する際に使用するためにスケールファクタを計算し、それをＧＰＵ１０の１つまたは複数のコンポーネントに供給することができる。ＣＰＵ６は、多種多様な技術のいずれかを使用してスケールファクタを計算することができる。それらの技術では、スケールファクタのための様々な値が生じることがあるが、生じた値のすべてが変換中に実行されるスケーリングの量を概して表す。ＣＰＵ６は、変換行列を使用してスケールファクタを計算することができる。例えば、ＣＰＵ６は、Scale_xおよびScale_y、すなわち、座標空間の変換中に使用されるスケーリング変数の乗算として、スケールファクタを計算することができる。別の例では、ＣＰＵ６はScale_xおよびScale_yの最大値として、スケーリングファクタを計算することができる。３Ｄの場合、ＣＰＵ６はビューポートスケールファクタおよび／または変換行列によって、スケールファクタを計算することができる。
【００５２】
シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、スケールファクタが増加するにつれて、ラインセグメントによって表される曲線の部分をより多くの追加のラインセグメントに再分割する。従って、曲線の各部分をテッセレーションするための追加のラインセグメント（またはサブセグメント）の数Ｍをスケールファクタの関数として計算することができる。スケールファクタに応じて曲線の部分を再分割することにより、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、曲線が大幅にスケーリングされているときは、曲線のより多くの詳細を保持し、一方、曲線がスケーリングされていないか、または少しスケーリングされているにすぎないときは、曲線のより少ない詳細を可能にすることができる。このようにして、本開示で説明する多段テッセレーション技術は、グラフィックス画像の解像度要件に適応する動的テッセレーションを可能にする。高解像度が必要なとき（例えば、大量のスケーリング）、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は曲線をより多くテッセレーションし、高解像度が不必要なときは（例えば、少量のスケーリングまたはスケーリングなし）、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は曲線をより少なくテッセレーションし、ＧＰＵ処理リソースが節約される。従って、本開示の技術は品質を保証するために曲線を過度にテッセレーションするのではなく、スケーリングに基づいて必要に応じて追加のラインセグメントを生成する。従って、グラフィックスパイプラインを通して余分のラインセグメントを送信せず、それによってより効率的な方法で計算リソースを利用することで、パイプラインパフォーマンスおよび電力消費を改善する。
【００５３】
曲線の各部分をテッセレーションするための追加のラインセグメントまたはサブセグメントの数は、グローバル定数としてシェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８にロードできる。シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、ＣＰＵ６によって供給されたラインセグメントの１つによって表される曲線の部分をＭ個の追加のラインセグメントにテッセレーションする。シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８によって生成されたＭ個の追加のラインセグメントは、元の曲線のさらなるテッセレーションを表す。従って、ＣＰＵ６によって生成された単一のラインセグメントを用いて曲線の部分を表すのではなく、Ｍ個のラインセグメントによって曲線の部分を表す。この場合も、Ｍ個のサブセグメントはＣＰＵ６によって供給されたラインセグメントのテッセレーションではなく、元の曲線のテッセレーションを表す。このようにして、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、ＣＰＵ６によって供給されたラインセグメントをさらに近似するのではなく、曲線をさらに近似する。
【００５４】
上記の式（１）および式（２）によって定義された楕円弧曲線に関して、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、ＣＰＵ６からのラインセグメントの１つによって表される曲線の部分を追加のラインセグメントに分割することができる。例えば、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、θ0＝０における頂点からθ1＝π／４における頂点までのラインセグメントに対応する曲線の部分をＭ個の追加のラインセグメントに分割することができる。例えば、Ｍ＝４である場合、シェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、θ0＝０における頂点からθ1＝π／４における頂点までの曲線の部分を４つの追加のラインセグメントにさらにテッセレーションすることができる。特に、この例ではシェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８は、θ00＝θ0＝０，θ01＝π／１６，θ02＝π／８，θ03＝３π／１６，θ04＝θ1＝π／４における頂点ポイントを接続する４つの追加のラインセグメントを生成することができる。この４つの追加のラインセグメントの頂点ポイントは、上記の式（４）および式（５）で与えられるように、変換後の楕円曲線の数学的表現を使用して計算され得る。
【００５５】
ＧＰＵ１０は、ＣＰＵ６によって生成された他の７つのラインセグメント４４によって表される曲線の他の部分を同様に完全に並列にテッセレーションすることができる。従って、ＧＰＵ１０は第２のテッセレーション段を同時に曲線の複数の部分に対して実行する。このようにして、コンピューティングデバイス２はＧＰＵ１０の並列構造を利用して、ＣＰＵ６によって生成されたラインセグメントのうちの他のラインセグメントによって表される曲線の部分に対して第２のテッセレーション段を完全に並列に実行することができる。そうすることは、曲線のテッセレーションのＧＰＵアクセラレーションをもたらし、それによってレンダリングパフォーマンスを改善する。
【００５６】
一例では、ジオメトリシェーダ３２が曲線の部分の第２のテッセレーション段を実行することができる。上述のように、ジオメトリシェーダ３２は個々の頂点にではなく、一度に複数の頂点ポイント（例えば、プリミティブ）に作用する。従って、ジオメトリシェーダ３２は複数の頂点ポイントを出力することができ、それによって単一のステップで曲線の部分をＭ個の追加のラインセグメントにテッセレーションする。場合によっては、ジオメトリシェーダ３２は曲線の各異なる部分が異なる数の追加のラインセグメントに分割されるように構成され得、従って曲線の部分の形状に基づいて曲線の部分を動的にテッセレーションすることができる。ジオメトリシェーダ３２を使用して曲線の部分を追加のラインセグメントにテッセレーションすることについては、図３に関してより詳細に説明する。
【００５７】
別の例では、頂点シェーダ３０が曲線の部分の第２のテッセレーション段を実行することができる。これは、例えばＧＰＵ１０がジオメトリシェーダ３２を含んでいない場合である。上述のように、頂点シェーダ３０は一度に単一の頂点に作用し、従って一般的には追加の頂点を生成することができない。ただし、頂点シェーダ３０は第２のテッセレーション段を実行するために、１つまたは複数のカスタム頂点属性を入力するように構成され得る。特に、頂点シェーダ３０は頂点を定義するために入力された頂点属性が、ラインセグメントの単一の頂点ではなく、ラインセグメントを実際に定義するように構成され得る。このようにして、頂点シェーダ３０は単一の頂点を実際に表さないので、「仮想頂点」を入力するものと見なすことができる。例えば、頂点シェーダ３０はラインセグメントの開始頂点属性および終了頂点属性を含む頂点属性を入力するように構成され得る。開始頂点属性はラインセグメントが開始する頂点を表し、終了頂点属性はラインセグメントが終了する頂点を表す。頂点シェーダ３０は、開始頂点属性および終了頂点属性に作用して、曲線の部分を追加のラインセグメントにテッセレーションする。頂点シェーダ３０を使用して曲線の部分を追加のラインセグメントにテッセレーションすることの一例については、図４に関してより詳細に説明する。
【００５８】
別の例では、ピクセルシェーダ３６が曲線の部分の第２のテッセレーション段を実行することができる。頂点シェーダ３０のように、ピクセルシェーダ３６は一度に単一のピクセルに作用する。従って、ピクセルシェーダ３６はラインセグメントの単一のピクセルではなく、ラインセグメントを定義する１つまたは複数のカスタムピクセル属性を入力するように構成され得る。ピクセルシェーダ３６は、追加のラインセグメントをさらに定義する追加のピクセル属性を生成する。
【００５９】
別の例では、テッセレーションハードウェア３８が曲線の部分の第２のテッセレーション段を実行することができる。テッセレーションハードウェア３８は、例えば第２のテッセレーション段を実行するために、１つまたは複数の乗算および累積（ＭＡＣ）演算ユニットを含むことができる。一例では、テッセレーションハードウェア３８は以下で詳細に説明するように、異なる次数の多項式を計算するように構成可能であるＭＡＣ演算ユニットのパイプラインアレイから形成され得る。この場合、テッセレーションハードウェア３８は、多項式係数とＣＰＵ６から頂点ポイントを生成すべき曲線に沿った少なくとも１つのロケーションとを入力する。頂点ポイントを生成すべき曲線に沿ったロケーションは、例えばベジエ曲線の場合はｔの値、または楕円弧曲線の場合はθの値とされ得る。テッセレーションハードウェア３８のＭＡＣ演算ユニットは、多項式係数に作用して特定のロケーションにおける頂点ポイントの１つまたは複数の座標を生成する。テッセレーションハードウェア３８の演算は、以下に詳細に説明するテッセレーションハードウェア回路７２の演算とほぼ同様である。
【００６０】
上述の多段テッセレーションは、ＣＰＵ６とＧＰＵ１０との間で分散されているが、多段テッセレーションはＧＰＵ１０内で実行され、および／またはＧＰＵ１０と専用テッセレーションハードウェア（例えば、図７に示すテッセレーションハードウェア７２）との間で分散され得る。従って、ＣＰＵ６は曲線のテッセレーションを実行しなくてもよい。代わりに、ＧＰＵ１０内の第１の計算ユニットが曲線をラインセグメントに分割するために第１のテッセレーション段を実行し、ＧＰＵ１０内の第２の計算ユニットが曲線を追加のラインセグメントにさらに分割するために第２のテッセレーション段を実行する。例えば、テッセレーションは頂点シェーダ３０、ジオメトリシェーダ３２、ピクセルシェーダ３６およびテッセレーションハードウェア３８の任意の組合せの間で、またはそれらのコンポーネントと専用テッセレーションハードウェア（例えば、テッセレーションハードウェア７２）との間で分割され得る。
【００６１】
上述では、多段テッセレーション技術について２つの段を含むものとしたが、多段テッセレーション技術は３つ以上の段を含むことができる。例えば、多段テッセレーションは、曲線をラインセグメントの第１のセットにテッセレーションすることができる第１のテッセレーション段、ラインセグメントの第１のセットの各々によって表される曲線の部分をラインセグメントの第２のセットにテッセレーションする第２のテッセレーション段、およびラインセグメントの第２のセットの各々によって表される曲線の部分を追加のラインセグメントにテッセレーションする第３のテッセレーション段を含むことができる。テッセレーション段は、いくつでも実行され得る。テッセレーション段は、ＣＰＵ６、頂点シェーダ３０、ジオメトリシェーダ３２、ピクセルシェーダ３６および／またはテッセレーションハードウェア３８，７２（図７）のいずれかの間で分散され得る。
【００６２】
本開示で説明する技術は、様々な他のアーキテクチャで実装され得るので、図２に示すアーキテクチャは例にすぎない。例えば、ＧＰＵ１０は頂点シェーダ３０、ジオメトリシェーダ３２およびピクセルシェーダ３６に起因する機能を実行することができる単一のシェーダコアを利用することができる。単一のシェーダコアは、例えばグラフィックス演算があるパイプラインの段に基づいて頂点シェーダ３０、ジオメトリシェーダ３２およびピクセルシェーダ３６として機能するように、コマンドデコーダ２８によって構成され得る。別の例として、テッセレーションハードウェア３８はＧＰＵ１０内に配置されず、代わりにコンピューティングデバイス２（図１）の別個のコンポーネントとされ、図７に示すバス１８を介してＧＰＵ１０に結合することができる。さらに、図１に示す機能はハードウェアおよび／またはソフトウェアコンポーネントの任意の適切な組合せによって実現され得る。
【００６３】
図３Ａ〜図３Ｄは、曲線４０の例示的な２段テッセレーションを示す図である。図３Ａは、ソフトウェアアプリケーション２０（図２）によって定義された曲線４０を示す。曲線４０は、４つのベジエ曲線セグメント、すなわちポイントＡからポイントＢまでの第１のベジエ曲線セグメント４２Ａ、ポイントＢからポイントＣまでの第２のベジエ曲線セグメント４２Ｂ、ポイントＣからポイントＤまでの第３のベジエ曲線セグメント４２Ｃ、およびポイントＤからポイントＡに戻る第４のベジエ曲線セグメント４２Ｄのシーケンスとして定義される。曲線４０をディスプレイ１６にレンダリングするために、ＣＰＵ６および／またはＧＰＵ１０は、本開示で説明する多段テッセレーション技術を使用して曲線４０をラインセグメントにテッセレーションする。上述のように、ＣＰＵ６のテッセレーションモジュール２２は、いくつかの態様では曲線４０の一部分を一度にテッセレーションすることができる。図３Ｂ〜図３Ｄに示すテッセレーションの例では、ＣＰＵ６および／またはＧＰＵ１０はベジエ曲線セグメント４２Ａをテッセレーションする。ＣＰＵ６および／またはＧＰＵ１０は、同様の方法でベジエ曲線セグメント４２Ｂ〜４２Ｄをテッセレーションすることができる。
【００６４】
図３Ｂは、ポイントＡとポイントＢとの間のベジエ曲線セグメント４２Ａによって定義された曲線４０の部分を示す。ベジエ曲線セグメント４２Ａは、パラメトリック表現を使用して定義される多項式曲線として、ソフトウェアアプリケーション２０によって定義され得る。特に、ベジエ曲線セグメント４２Ａは(x(t),y(t))という形式のポイントのセットとして表すことができ、ここでx(t)およびy(t)はｔの多項式であり、ｔは０から１まで連続的に変化する。図３に示すベジエ曲線セグメント４２Ａは３次ベジエ曲線セグメントであり、これはオブジェクト座標空間において以下の式によって表され得る。
【数４】
2011515765.tif 000006
【００６５】
ここで、（ｘs，ｙs）はベジエ曲線セグメント４２Ａの開始ポイント、（ｘe，ｙe）はベジエ曲線セグメント４２Ａの終了ポイント、（ｘc1，ｙc1）および（ｘc2，ｙc2）は２つの内部制御ポイントである。
【００６６】
第１の計算ユニットは、ベジエ曲線セグメント４２Ａ（すなわち、ポイントＡとポイントＢとの間の曲線４０の部分）を複数のラインセグメント４４Ａ〜４４Ｇ（総称して「ラインセグメント４４」）にテッセレーションする。図３Ｃは、第１の計算ユニットによるテッセレーションの後のベジエ曲線セグメント４２Ａを示す。一例では、第１のテッセレーション段を実行する第１の計算ユニットはＣＰＵ６のテッセレーションモジュール２２とされ得る。他の例では、第１の計算ユニットはシェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８のうちの１つとされ得る。図３Ｃに示す例では、第１の計算ユニットはベジエ曲線セグメント４２Ａを７つのラインセグメント４４にテッセレーションする。特に、第１の計算ユニットは上記の式（６）および式（７）を使用してベジエ曲線セグメント４２Ａに沿った頂点ポイントを計算する。
【００６７】
第１の計算ユニットがテッセレーションモジュール２２であるとき、テッセレーション負荷コントローラ２４はＣＰＵ６の負荷、ＧＰＵ１０の負荷またはそれらの組合せに応じて曲線を特定の数のラインセグメントにテッセレーションするように、テッセレーションモジュール２２を構成され得る。テッセレーション負荷コントローラ２４は、例えばＣＰＵ６の負荷がしきい値以下であるときはテッセレーションモジュール２２によって生成されるラインセグメントの数を増加させ、ＣＰＵ６の負荷がしきい値を超えたときはラインセグメントの数を減少することができる。図３Ｃに示す例では、テッセレーション負荷コントローラ２４はベジエ曲線セグメント４２Ａを７つのラインセグメント４４にテッセレーションするようにテッセレーションモジュール２２を構成する。テッセレーション負荷コントローラ２４は、上述のテッセレーション負荷分散（load balancing）技術を使用してベジエ曲線セグメント４２Ａをより多くのラインセグメントまたはより少ないラインセグメントにテッセレーションするように、テッセレーションモジュール２２を構成することができる。図３Ｃの例では、ラインセグメント４４は曲線、すなわちベジエ曲線セグメント４２Ａの形状を大まかに表している。
【００６８】
ベジエ曲線セグメント４２Ａをラインセグメント４４にテッセレーションするために、第１の計算ユニットは頂点ポイントＡ０に等しい開始ポイント（ｘs，ｙs）と頂点ポイントＡ7に等しい終了ポイント（ｘe，ｙe）との間の１つまたは複数の頂点ポイントを計算する。そのために、第１の計算ユニットはベジエ曲線セグメント４２Ａを表す式、すなわち式（６）および式（７）を使用してＡ0（すなわち、Ａ）とＡ7（すなわち、Ｂ）との間の頂点ポイントを計算することができる。図３Ｃに示す例では、第１の計算ユニットは頂点ポイントＡ1〜Ａ6を計算する。Ａ0およびＡ7は、それぞれ開始ポイント（ｘs，ｙs）および終了ポイント（ｘe，ｙe）に等しいので、既知である。
【００６９】
次いで、第１の計算ユニットはベジエ曲線セグメント４２Ａを生成された頂点ポイント間の複数のラインセグメント４４として表す。特に、第１の計算ユニットはベジエ曲線セグメント４２Ａを頂点ポイントＡ0（図３Ａおよび図３ＢのポイントＡと同じ）から頂点ポイントＡ1までのラインセグメント４４Ａ、頂点ポイントＡ1から頂点ポイントＡ2までのラインセグメント４４Ｂ、頂点ポイントＡ2から頂点ポイントＡ3までのラインセグメント４４Ｃ、以下同様、として表す。
【００７０】
図３Ｃに示す例では、第１の計算ユニットは、ベジエ曲線セグメント４４Ａをラインセグメント４４に等しく分割する。言い換えれば、第１の計算ユニットは一定のステップサイズだけｔを逐次増加させる。ただし、いくつかの例では第１の計算ユニットは適応型テッセレーション技術を使用して、曲線の形状に基づいて、すなわちラインセグメントごとに異なるステップサイズを用いて、ベジエ曲線セグメント４４Ａをテッセレーションすることができる。例えば、第１の計算ユニットは曲線の曲率がより大きいときは（例えば、例における頂点ポイントＡ5とＡ7との間）より小さいステップサイズを用いてｔを増分し、曲線の曲率がより小さいときは（例えば、ポイントＡ0とＡ5との間）より大きいステップサイズを用いてｔを増分することができる。
【００７１】
さらなるテッセレーションなしにラインセグメント４４をレンダリングすると、ベジエ曲線４２Ａのいくつかの部分、特に頂点ポイントＡ５とＡ７との間の画像品質が低下することがある。これは、例えばＧＰＵ１０によるデバイス座標空間への変換中の大きいスケールファクタの適用時に、曲線を高解像度に拡大するとき、特に当てはまる。従って、第２の計算ユニットが第２のテッセレーション段を実行して、ベジエ曲線セグメント４２Ａを追加のラインセグメントにテッセレーションする。第２の計算ユニットは、例えばシェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８のうちの１つとすることができる。以下でより詳細に説明するように、第２のテッセレーション段はラインセグメント４４を実際にテッセレーションするのではなく、ラインセグメント４４によって表されるベジエ曲線セグメント４２Ａの部分をテッセレーションする。追加のラインセグメントへのベジエ曲線セグメント４２Ａのテッセレーションを例示のために、ラインセグメント４４Ａによって表される、ベジエ曲線セグメント４２Ａの一部分のテッセレーションに関して説明する。ただし、第２の計算ユニットは完全に並列に、同じようにラインセグメント４４Ｂ〜４４Ｇをテッセレーションすることができる。
【００７２】
第２のテッセレーション段を実行する前に、ＧＰＵ１０の頂点シェーダ３０またはＣＰＵ６は曲線をオブジェクト座標空間からデバイス座標空間に変換する。頂点シェーダ３０またはＣＰＵ６は、例えば各ラインセグメントの各頂点ポイントを変換するのではなく、上記の式（３）を使用して曲線を定義するポイントを変換することができる。頂点シェーダ３０またはＣＰＵ６は、開始ポイント（ｘs，ｙs），終了ポイント（ｘe，ｙe）ならびに内部制御ポイント（ｘc1，ｙc1）および（ｘc2，ｙc2）をデバイス座標空間（ｘ’s，ｙ’s），（ｘ’e，ｙ’ｅ），（ｘ’c1，ｙ’c1）および（ｘ’c2，ｙ’c2）に変換することができる。このようにして、ベジエ曲線４２Ａの部分はデバイス座標空間に変換され、次のように定義され得る。
【数５】
2011515765.tif 000007
【００７３】
変換の後に、ラインセグメント４４Ａによって表される、ベジエ曲線セグメント４２Ａの部分（すなわち、Ａ0からＡ1までのベジエ曲線セグメント４２Ａの部分）を追加のラインセグメントにテッセレーションするために、第２の計算ユニットは第２のテッセレーション段を実行する。ラインセグメント４４Ａによって表されるベジエ曲線セグメント４２Ａの部分は、頂点ポイントＡ0とＡ1との間のベジエ曲線セグメント４２Ａの部分である。図３Ｄに示す例では、第２の計算ユニットは頂点ポイントＡ0とＡ1との間のベジエ曲線４２Ａの部分を４つのラインセグメントにテッセレーションする。特に、第２の計算ユニットは頂点ポイントＡ0とＡ1との間に頂点ポイントＡ01，Ａ02およびＡ03を生成する。第２のテッセレーション段により、頂点ポイントＡ0とＡ1との間のベジエ曲線セグメント４２Ａの部分は単一のラインセグメントのみではなく、４つのラインセグメントによって表されるようになり、従って曲線のその部分に関するより多くの詳細が与えられる。図３Ｄに示すように、第２のテッセレーション段中に生成された追加のラインセグメントは特に頂点ポイントＡ5とＡ7との間で曲線のより良い表現を与える。
【００７４】
一態様では、第２の計算ユニットがラインセグメントの各々によって表される曲線の部分をテッセレーションした後の追加のラインセグメントの数は、スケールファクタの関数とされ得る。第２の計算ユニットは、スケールファクタが増加するにつれて、ラインセグメント４４によって表される曲線の部分をより多くの追加のラインセグメントに再分割する。スケールファクタに応じて曲線の部分を再分割することにより、第２の計算ユニットは曲線が大幅にスケーリングされているときは曲線のより多くの詳細を保持し、一方、曲線がスケーリングされていないか、または少しスケーリングされているにすぎないときは曲線のより少ない詳細を可能にすることができる。
【００７５】
本技術は、式（１）および式（２）に従って定義される楕円弧曲線、または（ｘs，ｙs）における開始ポイント、終了ポイント（ｘe，ｙe）および制御ポイント（ｘc，ｙc）を含み、オブジェクト座標空間において次のように定義できる２次ベジエ曲線など、OpenVGに定義される他の曲線に対して同様の方法で適用され得る。
【数６】
2011515765.tif 000008
【００７６】
その上、本技術は任意の延長によってOpenVG規格に追加される任意の曲線定義とともに利用され得る。同様に、本技術は他のグラフィックスオーサリング規格を使用して定義される曲線をテッセレーションするために使用され得る。
【００７７】
図４Ａ〜図４Ｄは、曲線の多段テッセレーションの一例を示す図である。図４Ａは、ポイントＡとポイントＢとの間のベジエ曲線セグメント４２Ａを示す。図３に関して上述したように、ベジエ曲線セグメント４２Ａは上記の式（６）および式（７）によってオブジェクト座標空間で表される。
【００７８】
第１の計算ユニットは、ベジエ曲線セグメント４２Ａ（すなわち、ポイントＡとポイントＢとの間の曲線４０の部分）を複数のラインセグメント４４Ａ〜４４Ｇ（総称して「ラインセグメント４４」）にテッセレーションする。一例では、第１のテッセレーション段を実行する第１の計算ユニットはＣＰＵ６のテッセレーションモジュール２２とされ得る。他の例では、第１の計算ユニットはシェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８のうちの１つとされ得る。図４Ｂは、第１の計算ユニットによるテッセレーションの後のベジエ曲線セグメント４２Ａを示す。図４Ｂに示す例では、第１の計算ユニットは頂点ポイントＡ０〜Ａ７を計算して、ベジエ曲線セグメント４２Ａを頂点ポイントの各々を隣接頂点ポイントと接続する７つのラインセグメント４４Ａ〜４４Ｇにテッセレーションする。
【００７９】
図３Ａ〜図３Ｄで上述したように、さらなるテッセレーションなしにラインセグメント４４をレンダリングすると、ベジエ曲線４２Ａの少なくともいくつかの部分、特に頂点ポイントＡ５とＡ７との間の画像品質が低下することがある。そこで、第２のコンピューティングデバイスが第２のテッセレーション段を実行して、ベジエ曲線セグメント４２Ａを追加のラインセグメントにテッセレーションする。追加のラインセグメントへのベジエ曲線セグメント４２Ａのテッセレーションを例示のために、ラインセグメント４４Ａによって表される、ベジエ曲線セグメント４２Ａの一部分のテッセレーションに関して説明する。ただし、第２のコンピューティングデバイスは完全に並列に、同じようにラインセグメント４４Ｂ〜４４Ｇによって表される、ベジエ曲線セグメント４２Ａの部分をテッセレーションすることができる。
【００８０】
第２のテッセレーション段を実行する前に、上記の式（１０）および式（１１）で定義される数学的表現を生成するために、頂点シェーダ３０、あるいはＧＰＵ１０またはＣＰＵ６の何らかの他のコンポーネントがベジエ曲線セグメント４２Ａをオブジェクト座標空間からデバイス座標空間に変換する。デバイス座標空間への変換の後に、ラインセグメント４４Ａによって表される、ベジエ曲線セグメント４２Ａの部分（すなわち、Ａ0からＡ1までのベジエ曲線セグメント４２Ａの部分）を追加のラインセグメントにテッセレーションするために、第２の計算ユニットが第２のテッセレーション段を実行する。
【００８１】
例えば、頂点シェーダ３０の場合、頂点シェーダ３０はラインセグメントの単一の頂点の代わりに、ラインセグメントを実際に定義する頂点属性を入力するように構成される。例えば、頂点シェーダ３０はラインセグメントがそれぞれ開始および終了する頂点を表すラインセグメントの開始頂点属性（例えば、Ａ0）および終了頂点属性（例えば、Ａ1）を含む頂点属性を入力するように構成される。頂点シェーダ３０は、頂点Ａ0とＡ1との間の少なくとも１つの追加の頂点を計算することができる。上述のように、各頂点を定義するために使用できる頂点属性の数を属性の特定の最大数に制限することができる。従って、頂点シェーダ３０は単一のパスにおいて限られた数の追加の頂点ポイントを計算することのみが可能である。図４Ｃは、第２のテッセレーション段の後のベジエ曲線セグメント４２Ａを示す。図４Ｃに示す例では、頂点シェーダ３０は新しい頂点ポイントＡ01を表す１つの追加の頂点属性を計算することのみが可能である。従って、頂点シェーダ３０はベジエ曲線４２Ａの部分をラインセグメントの１つの追加のセットにテッセレーションすることのみが可能である。ただし、他の例では頂点シェーダ３０はパスごとに２つ以上の追加の頂点属性を計算することができる。
【００８２】
場合によっては、利用可能な頂点属性の最大数は、ベジエ曲線セグメント４２Ａの部分を完全にテッセレーションするのに十分な数とすることができる。しかしながら、利用可能な頂点属性の最大数が十分でない場合、頂点シェーダ３０は再帰的に、すなわち第３のテッセレーション段を実行することによって、さらなる追加のラインセグメントを計算することができる。言い換えれば、頂点シェーダ３０は再帰的に、すなわち第２のテッセレーション段の後に第３のテッセレーション段が続く２つ以上のテッセレーション段を実行することができる。例えば、第２のテッセレーション段の後、頂点シェーダ３０は第２のテッセレーション段中に生成されたラインセグメントを表す開始頂点属性Ａ0と終了頂点属性Ａ01とを含む頂点属性の新しいセットを入力する。頂点シェーダ３０は、第３のテッセレーション段中に頂点Ａ0とＡ01との間に少なくとも１つの追加の頂点を計算する。図４Ｄは、頂点シェーダ３０による第３のテッセレーション段の後のベジエ曲線セグメント４２Ａを示す。図４Ｄに示す例では、頂点シェーダ３０が今度はＡ0とＡ1との間のベジエ曲線４２Ａの部分を１つのラインセグメントではなく、４つのラインセグメントにテッセレーションした。このようにして、頂点シェーダ３０は曲線の部分を曲線４２Ａのより良い表現、特に頂点ポイントＡ5とＡ7との間を与える追加のラインセグメントに再帰的にテッセレーションすることができる。上述の例では、頂点シェーダ３０が第２および第３のテッセレーション段を実行するが、ＧＰＵ１０の他の計算ユニットが第２および第３のテッセレーション段を実行することができる。例えば、第２および第３のテッセレーション段は頂点シェーダ３０、ジオメトリシェーダ３２、ピクセルシェーダ３６およびテッセレーションハードウェア３８の任意の組合せによって実行され得る。
【００８３】
図５は、本開示で説明する多段テッセレーション技術に従って曲線をテッセレーションするコンピューティングデバイスの例示的な動作を示す流れ図である。コンピューティングデバイス２の第１の計算ユニットは、曲線を第１のラインセグメントにテッセレーションする（５０）。ラインセグメントの第１のセットを生成するために、第１の計算ユニットは曲線上にある１つまたは複数の頂点ポイントを計算する。例えば、第１の計算ユニットは曲線の数学的表現、例えば曲線の多項式表現を使用して１つまたは複数の頂点ポイントを生成する。第１のラインセグメントは、頂点ポイントの各々を隣接頂点ポイントに接続する。ラインセグメントの各々は、曲線の一部分を表す。一例では、第１の計算ユニットはＣＰＵ６のテッセレーションモジュール２２とされ得る。この場合、テッセレーション負荷コントローラ２４はＣＰＵ６の処理負荷および／またはＧＰＵ１０の処理負荷に基づいて、テッセレーションモジュール２２によって実行されるテッセレーションの量を制御することができる。別の例では、第１の計算ユニットはＧＰＵ１０のコンポーネントの１つ、例えばシェーダ３０，３２または３６、あるいはテッセレーションハードウェア３８のうちの１つとされ得る
第１の計算ユニットは、ラインセグメントを第２の計算ユニットに与える（５２）。例えば、第１の計算ユニットがテッセレーションモジュール２２であるとき、テッセレーションモジュール２２はラインセグメントの頂点ポイントを使用して描画プリミティブのリストを生成し、グラフィックスＡＰＩ２６およびＧＰＵドライバ２１を介して描画プリミティブをＧＰＵ１０に与える。テッセレーションモジュール２２は、ポイント、ラインストリップ、ラインループ、別々のライン、三角形ストリップ、三角形ファン、別々の三角形、四辺形ストリップ、別々の四辺形、または他のタイプの多角形を含むいくつかの描画プリミティブのいずれかを生成することができる。
【００８４】
第１または第２の計算ユニットは、曲線をオブジェクト座標空間からデバイス座標空間に変換する（５４）。例えば、ＧＰＵ１０の頂点シェーダ３０は上記の式（３）を使用して曲線をデバイス座標空間に変換する。変換は、曲線ごとに１回計算され得る。言い換えれば、経路にわたるあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用されるポイントの各々において変換を計算することができる。第１または第２の計算ユニットは、変換中に実行されるスケーリングの量を表すスケールファクタを計算する（５６）。スケールファクタは、変換中に使用されるスケーリング変数、例えば、式（３）のScale_xおよびScale_yに基づいて計算され得る。
【００８５】
第２の計算ユニットは、第２のテッセレーション段を実行して曲線の部分を追加のラインセグメントにテッセレーションする（５８）。例えば、第２の計算ユニットはＧＰＵ１０のコンポーネントの１つとされ得る。そこで、ＧＰＵ１０は第１の計算ユニットによって計算される各ラインセグメントの頂点ポイントの各々の間の追加の頂点ポイントを計算する。追加の頂点ポイントは、例えば変換の後にデバイス座標空間における曲線の数学的表現を使用して計算できる。従って、ＧＰＵ１０は第１の計算ユニットによって生成されたラインセグメントによって表される曲線の部分の各々を第１の計算ユニットによって生成された単一のラインセグメントの代わりに、複数のラインセグメントを用いて表す。このようにして、ＧＰＵ１０によって実行される第２のテッセレーション段は、曲線をより正確に表すために曲線の追加のラインセグメントを生成する。いくつかの例では、スケールファクタが増加するにつれて、さらなる詳細を保持するために、さらなる追加のラインセグメントが計算されるように、曲線の部分のために生成される追加のラインセグメントの数は、スケールファクタの関数とされ得る。
【００８６】
ＧＰＵ１０は、１つまたは複数のシェーダ（例えば、頂点シェーダ３０、ジオメトリシェーダ３２またはピクセルシェーダ３６）を使用して、第２のテッセレーション段を実行することができる。ＧＰＵ１０のシェーダは、曲線の２つ以上の部分を並列にテッセレーションすることができる。従って、ＧＰＵ１０は第２のテッセレーション段を同時に曲線の複数の部分に対して実行する。そうすることは曲線のテッセレーションのＧＰＵアクセラレーションをもたらし、それによってレンダリングパフォーマンスを改善する。他の例では、ＧＰＵ１０の内部のテッセレーションハードウェア３８が第２のテッセレーション段を実行することができる。他の例では、ＧＰＵ１０の外部のテッセレーションハードウェア、例えば図７のテッセレーションハードウェア７２が第２のテッセレーション段を実行することができる。第２のテッセレーション段を実行した後に、ＧＰＵ１０はテッセレーションされたラインセグメントを使用して曲線をディスプレイにレンダリングする（５９）。図５の流れ図を２段テッセレーションとして説明するが、３つ以上のテッセレーション段を含むように技術を拡張することができる。
【００８７】
図６は、テッセレーションを実行する、図２の頂点シェーダ３０などのシェーダの例示的な動作を示す流れ図である。ピクセルシェーダ３６によって同様の技術を利用して、曲線を追加のラインセグメントにテッセレーションすることができる。頂点シェーダ３０は、ラインセグメントを定義する複数の頂点属性を入力する（６０）。例えば、頂点シェーダ３０はラインセグメントが開始する頂点ポイントの位置座標を表す開始頂点属性（例えば、Ａ0）と、頂点を表す、ラインセグメントが終了する頂点ポイントの位置座標を表す終了頂点属性（例えば、Ａ1）とを含む頂点属性を入力する。このようにして、頂点シェーダ３０によって入力される頂点属性は、単一の頂点ポイントの代わりにラインセグメントを表す。
【００８８】
頂点シェーダ３０は、曲線を追加のラインセグメントにテッセレーションするために、頂点Ａ0とＡ1との間の追加の頂点ポイントの座標を計算する（６２）。頂点シェーダ３０は、別の頂点属性として追加の頂点ポイントを計算することができる。頂点シェーダ３０は、例えば変換の後にデバイス座標空間における曲線の数学的表現を使用して、頂点Ａ0とＡ1との間の追加の頂点ポイントの座標を計算することができる。頂点シェーダ３０は、頂点シェーダ３０が曲線の部分を所望のＭ個の追加のラインセグメントにテッセレーションしたかどうかを判断する（６４）。
【００８９】
第１のパス中に頂点シェーダ３０によって生成された所望の数のラインセグメントがＭよりも小さい場合、頂点シェーダ３０は頂点属性の最大数に達したかどうかを判断する（６６）。上述のように、頂点属性の数を頂点属性の特定の最大数に制限することができる。従って、頂点シェーダ３０は単一のパスにおいて限られた数の追加の頂点ポイントを計算することのみが可能である。
【００９０】
頂点属性の最大数に達しなかった場合、頂点シェーダ３０は追加の頂点ポイントの別の座標を計算する（６２）。ただし、頂点属性の最大数に達した場合、頂点シェーダ３０は計算された頂点属性を出力する（６８）。頂点シェーダ３０は、第１のパス中に生成された追加のラインセグメントの１つを表す頂点属性の新しいセットを入力する（６０）。言い換えれば、利用可能な頂点属性の最大数は曲線の部分を完全にテッセレーションするのに十分な追加の頂点ポイントを生成するのに十分でなかった。従って、頂点シェーダ３０は再帰的に、すなわち２つ以上のテッセレーション段を実行することによって、さらなる追加のラインセグメントを計算することができる。
【００９１】
第１のパス中に生成された所望の数のラインセグメントがＭよりも大きいか、またはそれに等しい場合、頂点シェーダ３０は計算された頂点属性を出力する（６８）。言い換えれば、利用可能な頂点属性の最大数は、曲線の部分を完全にテッセレーションするのに十分な追加の頂点ポイントを生成するのに十分であった。次いで、頂点シェーダ３０はＣＰＵ６によって生成された別のラインセグメントを表す複数の頂点属性を入力する（６０）。
【００９２】
図７は、本開示で説明する技術に従ってテッセレーションを実行する、別の例示的なコンピューティングデバイス７０を示すブロック図である。図７のコンピューティングデバイス７０は、ＧＰＵ１０を含まないことを除いて図１のコンピューティングデバイス２と実質的に同様である。代わりに、コンピューティングデバイス７０は以下で詳細に説明するように第２のテッセレーション段を実行する専用テッセレーションハードウェア回路７２を含む。ＧＰＵ１０の代わりに、ＣＰＵ６によってグラフィックスレンダリング機能を実行することができる。
【００９３】
曲線をディスプレイ１６にレンダリングするために、上記で詳細に説明したようにＣＰＵ６は第１のテッセレーション段を実行して曲線をそれぞれ曲線の一部分を表すラインセグメントの第１のセットに分割する。特に、ＣＰＵ６はラインセグメントを定義する、曲線に沿った頂点ポイントを計算する。ＣＰＵ６は、曲線のタイプに関連する式を使用して、例えば楕円弧曲線の場合、式（１）および式（２）、３次ベジエ曲線の場合、式（６）および式（７）、または２次ベジエ曲線の場合、式（１０）および式（１１）を用いて、頂点ポイントを計算することができる。第１のテッセレーション段中にＣＰＵ６によって実行されるテッセレーションの量は、ＣＰＵ６の処理負荷に応じて変化することができる。ＣＰＵ６は、図２に示すＣＰＵ６のすべての特徴を含むことができる。
【００９４】
第２のテッセレーション段中に、テッセレーションハードウェア回路７２はラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにテッセレーションする。例えば、テッセレーションハードウェア回路７２は第２のテッセレーション段を実行するために、１つまたは複数の乗算および累積（ＭＡＣ）演算ユニットを含むことができる。一例では、以下で詳細に説明するようにテッセレーションハードウェア回路７２は異なる次数の多項式を計算するように構成可能であるＭＡＣ演算ユニットのパイプラインアレイからなる。この場合、テッセレーションハードウェア回路７２は多項式係数とＣＰＵ６から頂点ポイントを生成すべき曲線に沿った少なくとも１つのロケーションとを入力する。頂点ポイントを生成すべき、曲線に沿ったロケーションは、例えば、ベジエ曲線の場合はｔの値、または楕円弧曲線の場合はθの値とされ得る。テッセレーションハードウェア回路７２のＭＡＣ演算ユニットは、多項式係数に作用して特定のロケーションにおける頂点ポイントの１つまたは複数の座標を生成する。
【００９５】
ＣＰＵ６は、テッセレーションハードウェア回路７２にロードする多項式係数を決定するために、曲線の展開された多項式表現を計算することができる。言い換えれば、ＣＰＵ６は曲線を次の展開された多項式ｐ（ｘ）として表すことができる。
【数７】
2011515765.tif 000009
【００９６】
ここで、Ｋiは多項式のｉ次項の多項式係数、ｘは変数、ｉ＝０，１，．．．，ｎ−１，ｎであり、ｎは多項式の次数である。ＣＰＵ６は、多項式展開を使用して曲線の展開された多項式表現を計算することができる。例えば、ＣＰＵ６は式（１０）および式（１１）に多項式展開を実行して、次のように２次ベジエ曲線の展開された多項式表現を計算することができる。
【数８】
2011515765.tif 000010
【００９７】
ここで、Ｐ2x，Ｐ1x，Ｐ0x，Ｐ2y，Ｐ1y，およびＰ0yは、Ｐ2x＝（ｘs−２＊ｘc＋ｘe），Ｐ1x＝２＊（ｘc−ｘs），Ｐ0x＝ｘs，Ｐ2y＝（ｙs−２＊ｙc＋ｙe），Ｐ1y＝２＊（ｙc−ｙs），およびＰ0y＝ｙsと定義される多項式係数である。他の例では、ＣＰＵ６はいくつかの多項式近似アルゴリズムのいずれかを使用して多項式表現を計算することができる。式（１）および式（２）を使用して定義される楕円弧曲線の場合、ＣＰＵ６はテイラー展開、最小二乗近似または別の近似技術を使用して多項式表現を計算することができる。例えば、ＣＰＵ６はｓｉｎ（θ）を多項式Ｓ2＊θ2＋Ｓ1＊θ＋Ｓ0と、ｃｏｓ（θ）を多項式Ｃ2＊θ2＋Ｃ1＊θ＋Ｃ0と近似することによって、楕円弧曲線のための展開された多項式表現を計算することができる。ここで、Ｓ2，Ｓ1，Ｓ0，Ｃ2，Ｃ1，およびＣ0は、特定の近似技術を使用して計算された多項式係数である。
【００９８】
さらに、ＣＰＵ６は上記の式（３）に従って、曲線をオブジェクト座標空間からデバイス座標空間に変換することができる。ＣＰＵ６は、曲線の多項式表現を計算するより前、または曲線の多項式表現を計算した後のいずれかに、曲線をオブジェクト座標空間からデバイス座標空間に変換することができる。上述のように、ＣＰＵ６は曲線ごとに１回変換を計算することができる。言い換えれば、ＣＰＵ６は曲線に沿ったあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用されるポイントの各々において変換を計算することができる。例えば、２次ベジエ曲線の場合、ＣＰＵ６はラインセグメントの第１のセットの計算された頂点ポイントの各々のための変換を計算する代わりに、開始ポイント（ｘs，ｙs）、終了ポイント（ｘe，ｙe）および制御ポイント（ｘc，ｙc）の変換を計算することができる。他の例では、テッセレーションハードウェア回路７２、またはコンピューティングデバイス７０の何らかの他のコンポーネントが変換を実行することができる。
【００９９】
変換中に、ＣＰＵ６は変換中に実行されるスケーリングの量に近似するスケールファクタを決定することができる。いくつかの例では、第２のテッセレーション段中に行われるテッセレーションの程度はスケールファクタの関数とされ得る。例えば、ＣＰＵ６はスケールファクタに基づいて、曲線の各部分をテッセレーションする追加のラインセグメントの数を計算することができる。ＣＰＵ６が曲線の各部分をテッセレーションする追加のラインセグメントの数を計算した後、ＣＰＵ６は新しい頂点ポイントを生成すべき、曲線の部分に沿ったロケーションを決定する。４つの追加のラインセグメントに分割される、θ0＝０からθ1＝π／４までの楕円曲線の一部分の場合、例えば、ＣＰＵ６はθ0＝０からθ1＝π／４までの曲線の部分を４つの追加のラインセグメントに等しく分割するために、ロケーションθ01＝π／１６，θ02＝π／８，θ03＝３π／１６における新しい頂点を計算する必要があると判断する。
【０１００】
ＣＰＵ６は、曲線の展開された多項式表現のための多項式係数と頂点ポイントの座標を生成すべき曲線上の１つまたは複数のロケーションとをテッセレーションハードウェア回路７２に与える。上述の楕円弧曲線例では、新しい頂点ポイントの座標を生成すべき曲線上のロケーションは、θ01，θ02およびθ03の値、またはそれらの値の１０進近似値である。ＣＰＵ６は、計算された多項式係数とロケーションとをテッセレーションハードウェア回路７２に直接ロードすることができ、またはポインタをテッセレーションハードウェア回路７２にプログラムすることができ、その場合テッセレーションハードウェア回路７２が多項式係数とロケーションとをロードする。いずれの場合も、多項式係数とロケーションとは、テッセレーションされている曲線のタイプに基づいてテッセレーションハードウェア回路７２に動的にロードされる。
【０１０１】
以下で詳細に説明するように、テッセレーションハードウェア回路７２はＣＰＵ６によって指定された多項式係数とロケーションとを使用して指定されたロケーションにおける頂点ポイントの座標を計算する。このようにして、コンピューティングデバイス７０はテッセレーション作業負荷の一部分をＣＰＵ６からテッセレーションハードウェア回路７２にオフロードするために、テッセレーションハードウェア回路７２を利用することができる。いくつかの例では、例えばＣＰＵ６が高い処理負荷を受けているとき、テッセレーションハードウェア回路７２はテッセレーションのすべてを実行することができる。テッセレーションハードウェア回路７２は頂点ポイントの座標をＣＰＵ６に出力することができ、ＣＰＵ６はディスプレイ１６上での曲線の提示のための追加のグラフィックスレンダリング動作を実行することができる。代替的に、ＣＰＵ６またはテッセレーションハードウェア回路７２は、後の処理のためにデバイスメモリ８中に新しい頂点ポイントを記憶することができる。図２に示したようなテッセレーションハードウェア回路７２がＧＰＵ１０内にある例では、テッセレーションハードウェア回路７２は頂点ポイントの座標をＧＰＵ１０の頂点シェーダ３０、ジオメトリシェーダ３２またはピクセルシェーダ３６など他のコンポーネントに出力することができる。
【０１０２】
いくつかの他の要素をコンピューティングデバイス７０中に含めることもできるが、説明を簡単で容易にするために図７には特に示していない。例えば、コンピューティングデバイス７０はバス１８を介して他のコンポーネントに結合された、図１のＧＰＵ１０などのＧＰＵを含むことができる。その上、本開示で説明する技術は様々な他のアーキテクチャで実装できるので、図７に示すアーキテクチャは例にすぎない。
【０１０３】
図８は、本開示で説明する技術に従ってテッセレーションを実行する、例示的なテッセレーションハードウェア回路７２を示す概略図である。テッセレーションハードウェア回路７２は、（図８中で「ＲＥＧ」と標示された）複数のレジスタ８２、（図８中で「ＭＵＸ」と標示された）複数のマルチプレクサ８４、複数の乗算演算ユニット８６および複数の累積演算ユニット８８を含む。乗算演算ユニット８６と後続の累積演算ユニット８８は、点線８９によって示されたＭＡＣ演算ユニットを形成する。テッセレーションハードウェア回路７２は、パイプラインで構成される構成可能ＭＡＣアレイを備える。従って、生成された頂点座標である最後のＭＡＣ演算ユニットの出力を除いて、各ＭＡＣ演算ユニットの出力は後続のＭＡＣ演算ユニットへの入力である。
【０１０４】
ＭＵＸ８４は、コンフィギュアビリティをテッセレーションハードウェア回路７２に与える。特に、ＭＵＸ８４は２つの入力のうちの１つを出力するように構成され得る。実線によって表されたＭＵＸ８４の各々への入力は、ＭＵＸ８４がパススルーする入力に対応する。言い換えれば、実線で示す入力の各々の値はＭＵＸ８４の各々がそれぞれ出力する値である。点線で表されたＭＵＸ８４の各々への入力は、ＭＵＸ８４がパススルーしない入力に対応する。従って、テッセレーションハードウェア回路７２は図９および図１０に対してより詳細に説明する、ＭＵＸ８４によってパススルーされるＭＵＸ入力を変更することによって構成され得る。
【０１０５】
図８に示すテッセレーションハードウェア回路７２は、６次多項式まで計算するように構成可能な６段構成可能ＭＡＣアレイである。テッセレーションハードウェア回路７２は、より小さい次数の多項式を計算する複数のより短いパイプラインに構成され得る。例えば、図８に示す６段構成可能ＭＡＣアレイはそれぞれ３次多項式を計算する２並列３段ＭＡＣアレイ（図９）、それぞれ２次多項式を計算する３並列２段ＭＡＣアレイ（図１０）などとして動作するように構成され得る。このようにして、テッセレーションハードウェア回路７２はテッセレーションプロセス中にハードウェアアクセラレーションを行うように構成され得、従って結果としてレンダリングパフォーマンスが改善される。６段構成可能ＭＡＣアレイとして示されているが、テッセレーションハードウェア回路７２はより多いまたはより少ない構成可能なパイプラインＭＡＣ段を含むことができる。
【０１０６】
テッセレーションハードウェア回路７２は、テッセレーションされている曲線のタイプに基づいて、実行時に動的に再構成され得る。例えば、２次多項式として表される２次ベジエ曲線または楕円弧曲線をテッセレーションするとき、ＣＰＵ６はテッセレーションハードウェア回路７２を３並列２段ＭＡＣアレイとして動作するように構成され得る。３次多項式として表される３次ベジエ曲線をテッセレーションするとき、ＣＰＵ６はテッセレーションハードウェア回路７２を２並列３段ＭＡＣアレイとして動作するように構成され得る。
【０１０７】
テッセレーションハードウェア回路７２は、頂点ポイントを計算する際に使用するための多項式係数Ｐ０〜Ｐ６をＣＰＵ６から受信する。多項式係数は、頂点ポイントのｘ座標を計算するための多項式係数、または頂点ポイントのｙ座標を計算するための多項式係数のいずれかとすることができる。テッセレーションハードウェア回路７２が２つ以上の多段ＭＡＣアレイとして動作する例では、多項式係数は頂点ポイントのｘ座標およびｙ座標を計算するための多項式係数とすることができる。上述のように、ＣＰＵ６は多項式係数Ｐ０〜Ｐ６を計算し、計算された多項式係数Ｐ０〜Ｐ６をテッセレーションハードウェア回路７２に与える。ＣＰＵ６は、計算された多項式係数Ｐ０〜Ｐ６をテッセレーションハードウェア回路７２に直接ロードすることができ、またはポインタをテッセレーションハードウェア回路７２にプログラムすることができ、その場合テッセレーションハードウェア回路７２が、多項式係数Ｐ０〜Ｐ６をロードする。いずれの場合も、多項式係数Ｐ０〜Ｐ６はテッセレーションされている曲線のタイプに基づいて動的にロードされる。
【０１０８】
その上、ＣＰＵ６は頂点ポイントを生成すべき曲線に沿ったロケーションに対応する入力（Ｉ）をテッセレーションハードウェア回路７２に与える。OpenVGを使用して定義される楕円弧曲線の場合、入力はθの特定の値とすることができる。OpenVGを使用して定義されるベジエ曲線の場合、入力はｔの特定の値とすることができる。テッセレーションハードウェア回路７２は、出力（Ｏ）を計算するために、多項式係数Ｐ０〜Ｐ６を使用して入力に様々な乗算および累積演算を実行する。出力は、入力によって識別された曲線に沿ったロケーションにおける頂点ポイントの座標（例えば、ｘ座標またはｙ座標）を表す。テッセレーションハードウェア回路７２は、次の形式の６次多項式を出力する。
【数９】
2011515765.tif 000011
【０１０９】
テッセレーションハードウェア回路７２が、生成される所望の数のラインセグメントの頂点ポイントを計算するまで、テッセレーションハードウェア回路は曲線に沿った入力ロケーションと多項式係数とを受信し続ける。４つの追加のラインセグメントに分割される、θ0＝０からθ1＝π／４までの楕円曲線の一部分の場合、例えば、θ0＝０からθ1＝π／４までの曲線の部分を４つの追加のラインセグメントに等しく分割するための頂点ポイントを生成するために、ＣＰＵ６は入力θ01＝π／１６，θ02＝π／８，θ03＝３π／１６をテッセレーションハードウェア回路７２に与える。
【０１１０】
図９は、それぞれ３次多項式を計算する２並列３段ＭＡＣアレイとして動作するように構成されたテッセレーションハードウェア回路７２を示す概略図である。特に、最初の３つのＭＡＣ演算ユニットは、次の形式の第１の３次多項式を出力する第１の３段ＭＡＣアレイとして動作する。
【数１０】
2011515765.tif 000012
【０１１１】
最後の３つのＭＡＣ演算ユニットは、次の形式の第２の３次多項式を出力する第２の３段ＭＡＣアレイとして動作する。
【数１１】
2011515765.tif 000013
【０１１２】
テッセレーションハードウェア回路７２は、入力Ｉ0およびＩ1ならびに多項式係数Ｐ０，Ｐ０’，Ｐ１，Ｐ２，Ｐ３，Ｐ４，Ｐ５およびＰ６を使用して２つの座標を計算する。一例では、テッセレーションハードウェア回路７２はロケーションＩの頂点ポイントを定義する２つの座標を計算することができる。言い換えれば、テッセレーションハードウェア回路７２はロケーションＩの頂点ポイントを定義するｘ座標およびｙ座標（すなわち（ｘ，ｙ））を計算することができる。この場合、入力Ｉ0とＩ1とは等しく、多項式係数Ｐ０，Ｐ１，Ｐ２およびＰ３はｘ座標を計算するための多項式の多項式係数に対応し、多項式係数Ｐ０’，Ｐ４，Ｐ５およびＰ６はｙ座標を計算するための多項式の多項式係数に対応する。
【０１１３】
他の例では、テッセレーションハードウェア回路７２は異なる頂点ポイントに対応する２つの座標を計算することができる。例えば、テッセレーションハードウェア回路７２は曲線に沿った異なるロケーションＩ0およびＩ1の２つの頂点ポイントのｘ座標を表す２つのｘ座標を計算することができる。この場合、Ｉ0とＩ1とは等しくなく、多項式係数Ｐ０，Ｐ１，Ｐ２およびＰ３ならびに多項式係数Ｐ０’，Ｐ４，Ｐ５およびＰ６は両方とも、ｘ座標を計算するための多項式の多項式係数に対応する。頂点ポイントのためのｘ座標を計算した後、テッセレーションハードウェア７２は頂点ポイントのｙ座標に関連する係数を入力し、曲線に沿った様々なロケーションＩの頂点ポイントのためのｙ座標を計算する。いずれの場合も、テッセレーションハードウェア回路７２は単一のパスにおいて頂点ポイントのための２つの座標値を出力することによって、テッセレーションプロセス中にハードウェアアクセラレーションを行う。
【０１１４】
図１０は、それぞれ２次多項式を計算する３並列２段ＭＡＣアレイとして動作するように構成されたテッセレーションハードウェア回路７２を示す概略図である。特に、ＭＡＣ演算ユニットの第１のペアは、次の形式の第１の２次多項式を出力する第１の２段ＭＡＣアレイとして動作する。
【数１２】
2011515765.tif 000014
【０１１５】
ＭＡＣ演算ユニットの第２のペアは、次の形式の第２の２次多項式を出力する第２の２段ＭＡＣアレイとして動作する。
【数１３】
2011515765.tif 000015
【０１１６】
ＭＡＣ演算ユニットの最後のペアは、次の形式の第３の２次多項式を出力する第２の３段ＭＡＣアレイとして動作する。
【数１４】
2011515765.tif 000016
【０１１７】
テッセレーションハードウェア回路７２は、入力Ｉ0，Ｉ1，およびＩ2ならびに多項式係数Ｐ０，Ｐ０’，Ｐ０’’，Ｐ１，Ｐ２，Ｐ３，Ｐ４，Ｐ５およびＰ６を使用して３つの座標を計算する。上述のように、テッセレーションハードウェア回路７２は異なる頂点ポイントに対応する３つの座標を計算することができる。例えば、テッセレーションハードウェア回路７２は曲線に沿った異なるロケーションＩ0，Ｉ1およびＩ2の３つの頂点ポイントのｘ座標を表す３つのｘ座標を計算することができる。この場合、Ｉ0とＩ1とＩ2とは等しくなく、多項式係数Ｐ０，Ｐ１，Ｐ２，多項式係数Ｐ０’，Ｐ３およびＰ４ならびに多項式係数Ｐ０’’，Ｐ５およびＰ６は、それぞれｘ座標を計算するための２次多項式の多項式係数に対応する。頂点ポイントのためのｘ座標を計算した後、テッセレーションハードウェア７２は頂点ポイントのｙ座標に関連する係数を入力し、曲線に沿ったＩ0，Ｉ1およびＩ2の頂点ポイントのためのｙ座標を計算する。
【０１１８】
代替的に、テッセレーションハードウェア回路７２は曲線に沿った頂点ポイントのｘ座標とｙ座標の両方の組合せを計算することができる。言い換えれば、テッセレーションハードウェア回路７２は曲線に沿った様々なロケーションＩの２つのｘ座標と１つのｙ座標、または２つのｙ座標と１つのｘ座標を計算することができる。この場合、入力Ｉ0とＩ1とは等しく、多項式係数Ｐ０，Ｐ１およびＰ２はｘ座標を計算するための多項式の多項式係数に対応し、多項式係数Ｐ０’，Ｐ３およびＰ４はｙ座標を計算するための多項式の多項式係数に対応する。一方、Ｉ2はＩ0とＩ1とは異なり、多項式係数Ｐ０’’，Ｐ５およびＰ６はｘ座標のための多項式係数またはｙ座標のための多項式係数のいずれかとすることができる。いずれの場合も、テッセレーションハードウェア回路７２は単一のパスにおいて頂点ポイントのための３つの座標値を出力することによって、テッセレーションプロセス中にハードウェアアクセラレーションを行う。
【０１１９】
図１１は、本開示で説明する技術に従ってテッセレーションを実行するコンピューティングデバイスの例示的な動作を示す流れ図である。ソフトウェアアプリケーション２０は、ＣＰＵ６のテッセレーションモジュール２２を呼び出して、曲線をラインセグメントの第１のセットにテッセレーションする（９０）。ラインセグメントの第１のセットを生成するために、テッセレーションモジュール２２は曲線上にある１つまたは複数の頂点ポイントを計算する。例えば、テッセレーションモジュール２２は曲線の数学的表現を使用して１つまたは複数の頂点ポイントを生成する。ラインセグメントは、頂点ポイントの各々を隣接頂点ポイントに接続する。ラインセグメントの各々は曲線の一部分を表す。
【０１２０】
ＣＰＵ６は、曲線の展開された多項式表現を計算する（９２）。例えば、ＣＰＵ６はｓｉｎ（θ）を多項式Ｓ2＊θ2＋Ｓ1＊θ＋Ｓ0と、ｃｏｓ（θ）を多項式Ｃ2＊θ2＋Ｃ1＊θ＋Ｃ０と近似することによって、式（１）および式（２）に従って定義される楕円弧曲線の展開された多項式表現を計算する。展開された多項式表現を以下に与える。
【数１５】
2011515765.tif 000017
【０１２１】
ここで、Ｐ2x，Ｐ1x，Ｐ0x，Ｐ2y，Ｐ1yおよびＰ0yはＰ2x＝−ａ＊Ｃ２，Ｐ1x＝−ａ＊Ｃ１，Ｐ0x＝−ａ＊Ｃ０，Ｐ2y＝ｂ＊Ｃ２，Ｐ1y＝ｂ＊Ｃ１およびＰ0y＝ｂ＊Ｃ０として定義される多項式係数である。
【０１２２】
さらに、ＣＰＵ６は曲線をオブジェクト座標空間からデバイス座標空間に変換する（９４）。ＣＰＵ６は、曲線の多項式表現を計算するより前、または曲線の多項式表現を計算した後のいずれかに、デバイス座標空間に変換することができる。上述のように、ＣＰＵ６は曲線ごとに１回変換を計算することができる。言い換えれば、ＣＰＵ６は曲線に沿ったあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用されるポイントの各々において変換を計算することができる。例えば、２次ベジエ曲線の場合、ＣＰＵ６はラインセグメントの第１のセットの計算された頂点ポイントの各々のための変換を計算する代わりに、開始ポイント（ｘs，ｙs）、終了ポイント（ｘe，ｙe）および制御ポイント（ｘc，ｙc）の変換を計算することができる。他の例では、テッセレーションハードウェア回路７２、またはコンピューティングデバイス７０の何らかの他のコンポーネントが変換を実行することができる。
【０１２３】
変換中に、ＣＰＵ６は変換中に実行されるスケーリングの量に近似するスケールファクタを決定する（９６）。ＣＰＵ６は、スケールファクタに基づいて、第２のテッセレーション段のための追加のラインセグメントの数を決定する（９８）。特に、ＣＰＵ６はスケールファクタが増加するにつれて、第２のテッセレーション段がラインセグメントによって表される曲線の部分をより多くの追加のラインセグメントに再分割することを決定する。ＣＰＵ６は、曲線の各部分をテッセレーションする追加のラインセグメントの数を計算した後、新しい頂点ポイントを生成すべき曲線の部分に沿ったロケーションを決定する（１００）。４つの追加のラインセグメントに分割される、θ0＝０からθ1＝π／４までの楕円曲線の一部分の場合、例えばＣＰＵ６はθ0＝０からθ1＝π／４までの曲線の部分を４つの追加のラインセグメントに等しく分割するために、ロケーションθ01＝π／１６，θ02＝π／８，θ03＝３π／１６における新しい頂点を計算する必要があると判断する。
【０１２４】
ＣＰＵ６は、曲線をテッセレーションするようにテッセレーションハードウェア回路７２を構成する（１０２）。例えば、ＣＰＵ６は曲線の展開された多項式表現のための多項式係数をテッセレーションハードウェア回路７２に与えることができる。ＣＰＵ６は、計算された多項式係数をテッセレーションハードウェア回路７２に直接ロードすることができ、またはポインタをテッセレーションハードウェア回路７２にプログラムすることができ、その場合テッセレーションハードウェア回路７２が多項式係数とロケーションとをロードする。いずれの場合も、多項式係数はテッセレーションされている曲線のタイプ、例えば楕円弧曲線、２次ベジエ曲線、３次ベジエ曲線などに基づいて、テッセレーションハードウェア回路７２に動的にロードされる。
【０１２５】
ＣＰＵ６は、１つまたは複数の頂点ポイントの座標を生成すべき曲線に沿ったロケーションを識別する１つまたは複数の入力をテッセレーションハードウェア回路７２に与える（１０４）。上述のように、テッセレーションハードウェア回路７２は、それぞれ頂点ポイントの座標を計算する２並列３段ＭＡＣアレイ（図９）として動作するように構成されるか、またはそれぞれ頂点ポイントの座標を計算する３並列２段ＭＡＣアレイ（図１０）として動作するように構成され得る。テッセレーションハードウェア回路は、２つ以上の頂点ポイントのｘ座標、２つ以上の頂点ポイントのｙ座標、同じ頂点ポイントのｘ座標およびｙ座標またはそれらの組合せを計算するように構成され得る。
【０１２６】
ＣＰＵ６は、テッセレーションハードウェア７２によって計算された１つまたは複数の座標を受信する（１０６）。ＣＰＵ６は、計算すべき頂点ポイントのためのさらなる座標があるかどうかを判断する（１０８）。計算すべき頂点ポイントのためのさらなる座標があるとき、ＣＰＵ６はテッセレーションハードウェア回路１０２を構成し、追加の座標を計算するための入力を与え続ける。計算すべきさらなる座標がないとき、ＣＰＵ６はテッセレーションされたラインセグメントを使用して、曲線をディスプレイにレンダリングする（１１０）。
【０１２７】
本明細書で説明した技術は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。モジュールまたはコンポーネントとして説明する機能は、集積論理デバイスに一緒に、またはディスクリートであるが相互運用可能な論理デバイスとして別々に実装され得る。場合によっては、様々な特徴は集積回路チップまたはチップセットなどの集積回路デバイスとして実装され得る。ソフトウェアで実装した場合、これらの技術は実行されると、上記で説明した方法の１つまたは複数を実行する命令を備えるコンピュータ可読媒体によって少なくとも部分的に実現され得る。コンピュータ可読媒体は、パッケージング材料を含む、コンピュータプログラム製品の一部をなすことができる。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気または光学データ記憶媒体などを備えることができる。本技術は、追加または代替として、命令またはデータ構造の形態でコードを搬送または伝達し、コンピュータによってアクセス、読取り、および／または実行できるコンピュータ可読通信媒体によって、少なくとも部分的に実現され得る。
【０１２８】
コードは、１つまたは複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、フィールドプログラマブル論理アレイＦＰＧＡ、または他の等価な集積またはディスクリート論理回路など、１つまたは複数のプロセッサによって実行され得る。従って、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技術の実装に好適な他の構造のいずれかを指す。さらに、いくつかの態様では、本明細書で説明する機能をグラフィックス画像をテッセレーションするように構成された専用のソフトウェアアプリケーションまたはハードウェアモジュールの内部に与えることができる。従って、本開示はまた本開示で説明した技術の１つまたは複数を実装する回路を含む様々な集積回路デバイスのいずれかを企図する。そのような回路は、単一の集積回路チップまたは複数の相互運用可能な集積回路チップで提供できる。
【０１２９】
様々な態様について説明した。これらおよび他の態様は、以下の特許請求の範囲内に入る。
【図１】
2011515765.tif 000018
【図２】
2011515765.tif 000019
【図３Ａ】
2011515765.tif 000020
【図３Ｂ】
2011515765.tif 000021
【図３Ｃ】
2011515765.tif 000022
【図３Ｄ】
2011515765.tif 000023
【図４Ａ】
2011515765.tif 000024
【図４Ｂ】
2011515765.tif 000025
【図４Ｃ】
2011515765.tif 000026
【図４Ｄ】
2011515765.tif 000027
【図５】
2011515765.tif 000028
【図６】
2011515765.tif 000029
【図７】
2011515765.tif 000030
【図８】
2011515765.tif 000031
【図９】
2011515765.tif 000032
【図１０】
2011515765.tif 000033
【図１１】
2011515765.tif 000034
【国際調査報告】
2011515765.tif 000035
2011515765.tif 000036