(57)【特許請求の範囲】
【請求項１】
グラフィックス処理ユニット（ＧＰＵ）のテッセレーションユニットを用いて、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、
前記テッセレーションユニットを用いて、前記受け取ったプリミティブに関するドメインタイプが第１のタイプまたは第２のタイプのうちの１つであって、前記第１のタイプおよび前記第２のタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断することと、
前記受け取ったプリミティブに関する前記ドメインタイプが前記第１のタイプであると判断されるときに、前記テッセレーションユニットを用いて、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取ること、または前記受け取ったプリミティブに関する前記ドメインタイプが前記第２のタイプであると判断されるときに、前記テッセレーションユニットを用いて、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値とを受け取ることと、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記テッセレーションユニットを用いて、前記判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力することと
を備える方法。
【請求項２】
前記テッセレーションユニットを用いて、複数のテッセレーション係数を受け取ること
をさらに備え、
前記グラフィカルフィーチャを示す前記情報を出力することが、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力することを備える
請求項１に記載の方法。
【請求項３】
前記グラフィカルフィーチャを示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、請求項２に記載の方法。
【請求項４】
前記方法が、
前記テッセレーションユニットを用いて、前記ラインセグメントの終点法線を判断することと、
前記テッセレーションユニットを用いて、前記ラインセグメントの前記終点法線と、前記スタートキャップに関する前記テッセレーション係数または前記エンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間することと
をさらに備えることをさらに備える、請求項１に記載の方法。
【請求項５】
前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断することと、
前記テッセレーションユニットを用いて、前記判断された複数の追加ドメイン座標を出力することと、
前記テッセレーションユニットを用いて、前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力することと
をさらに備える、請求項１に記載の方法。
【請求項６】
ダッシングパターンに基づいて前記複数のドメイン座標を判断することをさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、請求項１に記載の方法。
【請求項７】
受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断することと、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、前記グラフィカルフィーチャを示す前記情報を出力することとが第１のパス内で発生し、前記方法が、
前記テッセレーションユニットを用いて、前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取ることと、
第２のパス内で、前記テッセレーションユニットを用いて、前記第１のパス内で受け取られた前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断することと、
前記テッセレーションユニットを用いて、前記複数の追加ドメイン座標を出力することと、
前記テッセレーションを用いて、前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力することと
をさらに備える、請求項１に記載の方法。
【請求項８】
グラフィックス処理ユニット（ＧＰＵ）であって、
受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力して、
前記受け取ったプリミティブに関するドメインタイプが第１のタイプまたは第２のタイプのうちの１つであって、前記第１のタイプおよび前記第２のタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、
前記受け取ったプリミティブに関する前記ドメインタイプが前記第１のタイプであると判断されるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取り、または前記受け取ったプリミティブに関する前記ドメインタイプが前記第２のタイプであると判断されるときに、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値とを受け取り、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力する
ように構成されるテッセレーションユニットを備えるグラフィックス処理ユニット（ＧＰＵ）。
【請求項９】
前記ＧＰＵが、
複数のテッセレーション係数を受け取るようにさらに構成され、
前記グラフィカルフィーチャを示す前記情報を出力するために、前記テッセレーションユニットが、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力するようにさらに構成される、請求項８に記載のＧＰＵ。
【請求項１０】
前記グラフィカルフィーチャを示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、請求項９に記載のＧＰＵ。
【請求項１１】
前記ＧＰＵが、
前記ラインセグメントの終点法線を判断して、
前記ラインセグメントの前記終点法線と、前記スタートキャップに関する前記テッセレーション係数または前記エンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間する
ようにさらに構成される、請求項８に記載のＧＰＵ。
【請求項１２】
前記ＧＰＵが、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さと、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断して、
前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断して、
前記判断された複数の追加ドメイン座標を出力して、
前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力する
ようにさらに構成される、請求項８に記載のＧＰＵ。
【請求項１３】
前記ＧＰＵが、ダッシングパターンに基づいて前記複数のドメイン座標を判断するようにさらに構成され、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、請求項８に記載のＧＰＵ。
【請求項１４】
受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断するために、前記ＧＰＵが、前記複数の頂点に関する前記判断された複数のドメイン座標を出力して、前記グラフィカルフィーチャを示す前記情報を第１のパス内で出力するようにさらに構成され、ここにおいて、前記ＧＰＵが、
前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取って、
第２のパス内で、前記第１のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断して、
前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断して、
前記複数の追加ドメイン座標を出力して、
前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力する
ようにさらに構成される、請求項８に記載のＧＰＵ。
【請求項１５】
装置であって、
受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断するための手段と、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力するための手段と、
前記受け取ったプリミティブに関するドメインタイプが第１のタイプまたは第２のタイプのうちの１つであって、前記第１のタイプおよび前記第２のタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断するための手段と、
前記受け取ったプリミティブに関する前記ドメインタイプが前記第１のタイプであると判断されるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取るための手段、または前記受け取ったプリミティブに関する前記ドメインタイプが前記第２のタイプであると判断されるときに、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値とを受け取るための手段と、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するための手段と
を備える装置。
【請求項１６】
複数のテッセレーション係数を受け取るための手段
をさらに備え、
前記グラフィカルフィーチャを示す前記情報を出力するための前記手段が、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力するための手段を備える、請求項１５に記載の装置。
【請求項１７】
前記グラフィカルフィーチャを示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、請求項１６に記載の装置。
【請求項１８】
前記ラインセグメントの終点法線を判断するための手段と、
前記ラインセグメントの前記終点法線と、前記スタートキャップに関する前記テッセレーション係数または前記エンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間するための手段と
をさらに備える、請求項１５に記載の装置。
【請求項１９】
前記装置が、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断するための手段と、
前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断するための手段と、
前記判断された複数の追加ドメイン座標を出力するための手段と、
前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力するための手段と
をさらに備える、請求項１５に記載の装置。
【請求項２０】
前記装置が、ダッシングパターンに基づいて前記複数のドメイン座標を判断するための手段をさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、請求項１５に記載の装置。
【請求項２１】
受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断することと、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、前記グラフィカルフィーチャを示す前記情報を出力することとが第１のパス内で発生し、前記装置が、
前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取るための手段と、
第２のパス内で、前記第１のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断するための手段と、
前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断するための手段と、
前記複数の追加ドメイン座標を出力するための手段と、
前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力するための手段と
をさらに備える、請求項１５に記載の装置。
【請求項２２】
実行されたときに、１つまたは複数のプロセッサに、
受け取ったプリミティブの複数の頂点に関するドメイン座標を判断させて、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力させて、
前記受け取ったプリミティブに関するドメインタイプが第１のタイプまたは第２のタイプのうちの１つであって、前記第１のタイプおよび前記第２のタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断させて、
前記受け取ったプリミティブに関する前記ドメインタイプが前記第１のタイプであると判断されるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取らせ、または前記受け取ったプリミティブに関する前記ドメインタイプが前記第２のタイプであると判断されるときに、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値とを受け取らせ、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力させる
命令を備える非一時的コンピュータ可読記憶媒体。
【請求項２３】
実行されたときに、前記１つまたは複数のプロセッサに、複数のテッセレーション係数を受け取らせ、
実行されたときに、前記１つまたは複数のプロセッサに前記グラフィカルフィーチャを示す前記情報を出力させる前記命令が、実行されたときに、１つまたは複数のプロセッサに、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力させる命令をさらに備える、請求項２２に記載の非一時的コンピュータ可読媒体。
【請求項２４】
前記グラフィカルフィーチャを示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、請求項２３に記載の非一時コンピュータ可読媒体。
【請求項２５】
実行されたときに、前記１つまたは複数のプロセッサに前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断させる前記命令が、実行されたときに、前記１つまたは複数のプロセッサに、
前記ラインセグメントの終点法線を判断させて、
前記ラインセグメントの前記終点法線と、前記スタートキャップに関する前記テッセレーション係数または前記エンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間させる
命令をさらに備える、請求項２２に記載の非一時コンピュータ可読媒体。
【請求項２６】
実行されたときに、前記１つまたは複数のプロセッサに、
前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断させて、
前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断させて、
前記判断された複数の追加ドメイン座標を出力させて、
前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力させる
命令をさらに備える、請求項２２に記載の非一時的コンピュータ可読媒体。
【請求項２７】
実行されたときに、前記１つまたは複数のプロセッサに、ダッシングパターンに基づいて前記複数のドメイン座標を判断させる命令をさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、請求項２２に記載の非一時的コンピュータ可読媒体。
【請求項２８】
実行されたときに、前記１つまたは複数のプロセッサに、受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断させる前記命令が、実行されたときに、前記１つまたは複数のプロセッサに、前記複数の頂点に関する前記判断された複数のドメイン座標を出力させて、前記グラフィカルフィーチャを示す前記情報を第１のパス内で出力させる命令をさらに備え、前記非一時的コンピュータ可読媒体が、実行されたときに、前記１つまたは複数のプロセッサに、
前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取らせて、
第２のパス内で、前記第１のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断させて、
前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断させて、
前記複数の追加ドメイン座標を出力させて、
前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力させる
命令をさらに備える、請求項２２に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【関連出願】
【０００１】
[0001]  本出願は、２０１２年８月９日に出願された米国仮特許出願第６１／６８１，４９８号、２０１３年１月２２日に出願された米国仮特許出願第６１／７５５，３５９号、２０１２年１０月１２日に出願された米国仮特許出願第６１／７１３，３７７号、２０１３年１月２２日に出願された米国仮特許出願第６１／７５５，３１２号、２０１２年１１月６日に出願された米国仮特許出願第６１／７２３，２７４号、および２０１３年１月２２日に出願された米国仮特許出願第６１／７５５，３９１号の利益を主張するもので、これら各々の全内容が参照により本明細書に組み込まれる。
【技術分野】
【０００２】
[0002]  本開示は、グラフィックス処理に関し、より詳細には、パスレンダリング(path rendering)のための技法に関する。
【背景技術】
【０００３】
[0003]  パスレンダリングは、各々１つまたは複数のパスセグメント(path segments)を含み得る複数の２次元（２Ｄ）ベクタグラフィックスパス（もしくは、本明細書で「パス」と呼ばれる）（vector graphics paths）のレンダリングを指し得る。１つのパスが２つ以上のパスセグメントを含む場合には、個々のパスセグメントが同一タイプまたは異なるタイプのものであり得る。パスセグメントのこれらタイプは、例えば、線、楕円弧、２次ベジェ曲線、および３次ベジェ曲線を含み得る。いくつかの例で、パスセグメントタイプは、例えば、Ｏｐｅｎ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ（ＯｐｅｎＶＧ）ＡＰＩなどの標準ベクタグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）に従って定義され得る。
【０００４】
[0004]  グラフィックス処理ユニット（ＧＰＵ）は、通常、１つまたは複数の３ＤグラフィックスＡＰＩに準拠するように設計された３次元（３Ｄ）グラフィックスパイプラインを実装する。今日使用される主流の３ＤグラフィックスＡＰＩは、準拠デバイスがパスレンダリングコマンド(path rendering commands)をサポートすることを要求しないため、現代的ＧＰＵがパスレンダリングコマンドのためのハードウェアアクセラレーションを提供することはほとんどない。例えば、現代的ＧＰＵに実装される典型的な３Ｄグラフィックスパイプラインは、（例えば、点、線、および三角形など）低次の、湾曲していない３Ｄグラフィックスプリミティブ(graphics primitives)をラスタライズ(rasterize)するように設計されるが、（例えば、楕円弧、およびベジェ曲線など）湾曲したプリミティブを直接的にレンダリングできないラスタライザ(rasterizer)を含み得る。
【発明の概要】
【０００５】
[0005]  本開示の技法は、３Ｄグラフィックスパイプラインにおけるハードウェアアクセラレーテッドパスレンダリングのためのテッセレーションハードウェアを含むグラフィックス処理ユニット（ＧＰＵ）を提供する。パスセグメント(path segment)をラインセグメント(line segments)にテッセレートする（tessellate）ためにＧＰＵを使用することによって、パスセグメントを前処理する負担を中央処理装置（ＣＰＵ）から取り除き、これによって、他のＣＰＵタスクのために処理リソースを解放する。さらに、いくつかの例では、ＧＰＵがテッセレーション動作を行うために高並列の現代的ＧＰＵテッセレーションアーキテクチャを利用でき、これは、いくつかの例で、ＧＰＵが、ＣＰＵよりもより効率的な形式でパスセグメントをテッセレートすることを可能にする。加えて、テッセレーションは、ＣＰＵ内でなく、ＧＰＵ内で生起するため、多数のテッセレートされたプリミティブがシステムメモリ内に記憶される必要がなく、かつＣＰＵからＧＰＵに渡される必要がなく、これによって、パスレンダリングに必要なメモリフットプリント(memory footprint)、並びに、パスレンダリングに必要なメモリ帯域幅を削減する。
【０００６】
[0006]  いくつかの例では、ＧＰＵが、より詳細に説明される例えばＤｉｒｅｃｔＸ  １１  ＡＰＩのような特定の３Ｄグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）によって指定されたグラフィックスアーキテクチャを使用してパスセグメントをテッセレートしてレンダリングすることが可能であり、本開示で説明する技法は、ダッシング（dashing）、エンドキャップ（caps）、リテッセレーション（re-tessellation）、およびリテッセレーションを使用したカスプ（cusp）処理を可能にするための、グラフィックスハードウェアに対する可能な変形について説明する。こうして、本開示で説明する技法は、いくつかの変形で、ＤｉｒｅｃｔＸ  １１アーキテクチャのグラフィックスハードウェアがダッシング、キャップを用い、カスプをサポートするパスレンダリングを行うことを可能にする。しかしながら、これら技法は、これに限定されず、他のタイプのパスレンダリングのため、並びに、パスレンダリングへ追加されるかまたは代替の技法のために使用され得る。
【０００７】
[0007]  本開示の技法は、いくつかの例で、グラフィカルフィーチャ（graphical feature）を示す情報を出力するように構成される変形テッセレーションユニットを含む。従来より、テッセレーションユニットは、等値線ドメイン上、トライ（ｔｒｉ）ドメイン上、およびクワッド（quad）ドメイン上で動作する。これらドメインは２次元の線、三角形、並びに四角形を表し、これらのために、テッセレータが１つまたは複数のテッセレーション係数に基づいて線、三角形、およびクワッドのより詳細なバージョンを表すいくつかのドメイン座標(a number of domain coordinates)を判断(determine)する。本開示の技法は、グラフィカルフィーチャを示す情報を出力することを含む追加動作をテッセレータに行わせる新しいドメインタイプを追加する。グラフィカルフィーチャの情報は、テッセレーションユニットが出力する１つまたは複数のドメイン座標と関連付けでき、かつこれらドメイン座標がスタートキャップ、エンドキャップ、接合、およびラインセグメントのようなグラフィカルフィーチャと関連付けられるかどうかを示し得る。加えて、本開示の変形テッセレーションユニットは、グラフィカルフィーチャを示す情報を出力することの一部として他の情報を出力するように構成され得る。グラフィカルフィーチャを示す情報を出力することによって、本開示の変形テッセレーションユニットは、グラフィックスパイプラインの他段(other stages)、例えばドメインシェーダ(domain shader)、ジオメトリシェーダ(geometry shader)などに、これら他段がグラフィカルフィーチャを示す情報に基づく動作を行うことを可能にし得る情報を提供できる。
【０００８】
[0008]  １つの非限定的な例として、ドメインシェーダは、変形テッセレーションユニットによって出力されたドメイン座標に基づいて頂点座標(vertex coordinates)を判断するためにグラフィカルフィーチャを示す情報を分析(interpret)し得る。ドメインシェーダは、ドメイン座標に基づき、例えばこのドメイン座標がスタートキャップ、エンドキャップ、接合、ラインセグメント、または別の特徴に関連付けられていることを情報が示すかどうかに基づいて異なるように頂点座標を判断し得る。ドメイン座標をコンテキストに提供するこの能力は、グラフィックス処理ユニットのテッセレーション段(tessellation stages)が接合およびキャップのようなグラフィカルフィーチャを追加し、本開示の技法に従ってリテッセレーションおよびカスプ処理を行うことを可能にする。
【０００９】
[0009]  一例で、本開示は、グラフィカル処理ユニット（ＧＰＵ）のテッセレーションユニット(tessellation unit)を用い、受け取ったプリミティブ(received primitive)の複数の頂点(vertices)に関する複数のドメイン座標(domain coordinates)を判断することと、このテッセレーションユニットを用い、これら頂点に関する判断されたこれらドメイン座標を出力することと、このテッセレーションユニットを用い、受け取ったプリミティブに関するドメインタイプ(domain type)がトライドメイン、等値線ドメイン、またはクワッドドメイン(tri, isoline, or quad domain)のうちの１つでないことを判断することと、このドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、このテッセレーションユニットを用い、判断されたこれらドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャ(graphical feature)を示す情報を出力することとを備える方法を説明する。
【００１０】
[0010]  別の例で、本開示は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたこれらドメイン座標を出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、判断されたこれらドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するように構成されたテッセレーションユニットを備えたＧＰＵを含むデバイスを説明する。
【００１１】
[0011]  別の例で、本開示は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断するための手段と、これら頂点に関する判断されたこれらドメイン座標を出力するための手段と、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断するための手段と、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、判断されたこれらドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するための手段とを含む装置を説明する。
【００１２】
[0012]  別の例で、本開示は、実行されたときに、１つまたは複数のプロセッサに、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたこれらドメイン座標を出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、判断されたこれらドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力させる命令を記憶した非一時的コンピュータ可読記憶媒体を説明する。
【００１３】
[0013]  本開示の１つまたは複数の例の詳細が、添付の図面および下記の説明に記載される。本開示の他の特徴、目的、および利点は、説明および図面、並びに特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【００１４】
【図１】本開示のＧＰＵアクセラレーテッドパスレンダリング技法を実装するために使用され得る例示的なコンピューティングデバイスを示すブロック図。
【図２】図１のコンピューティングデバイスの中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、およびメモリをより詳細に示すブロック図。
【図３】本開示のＧＰＵアクセラレーテッドパスレンダリング技法を行い得る例示的なグラフィックスパイプラインを示す概念図。
【図４Ａ】本開示の技法による、受け取ったプリミティブをテッセレートすることを示す概念図。
【図４Ｂ】本開示の技法による、受け取ったプリミティブをテッセレートすることを示す概念図。
【図５Ａ】本開示の技法による、ラインセグメントのリテッセレーションを示す概念図。
【図５Ｂ】本開示の技法による、ラインセグメントのリテッセレーションを示す概念図。
【図６Ａ】本開示の技法による、ラインセグメントをリテッセレートすることと、ラインセグメントにダッシングを適用することとを示す概念図。
【図６Ｂ】本開示の技法による、ラインセグメントをリテッセレートすることと、ラインセグメントにダッシングを適用することとを示す概念図。
【図６Ｃ】本開示の技法による、ラインセグメントをリテッセレートすることと、ラインセグメントにダッシングを適用することとを示す概念図。
【図７Ａ】本開示の１つまたは複数の技法による、ダッシングを適用することを示す概念図。
【図７Ｂ】本開示の１つまたは複数の技法による、ダッシングを適用することを示す概念図。
【図７Ｃ】本開示の１つまたは複数の技法による、ダッシングを適用することを示す概念図。
【図８】例示的なベベル接合を示す概念図。
【図９】例示的なマイター接合を示す概念図。
【図１０】例示的なラウンド接合を示す概念図。
【図１１】例示的な方形キャップを示す概念図。
【図１２】例示的な円形キャップ示す概念図。
【図１３Ａ】本開示の１つまたは複数の技法による、エンドキャップを適用することを示す概念図。
【図１３Ｂ】本開示の１つまたは複数の技法による、エンドキャップを適用することを示す概念図。
【図１３Ｃ】本開示の１つまたは複数の技法による、接合を適用することを示す概念図。
【図１３Ｄ】本開示の１つまたは複数の技法による、接合を適用することを示す概念図。
【図１４Ａ】本開示の技法による、ラインセグメントのカスプのリテッセレーションを示す概念図。
【図１４Ｂ】本開示の技法による、ラインセグメントのカスプのリテッセレーションを示す概念図。
【図１５】本開示によるＧＰＵアクセラレーテッドパスレンダリングを行うための例示的な技法を示す流れ図。
【図１６】本開示によるＧＰＵアクセラレーテッドパスレンダリングを行うための例示的な技法を示す流れ図。
【発明を実施するための形態】
【００１５】
詳細な説明
[0030]  本開示は、ＧＰＵアクセラレーテッドパスレンダリングを行うための技法を意図する。パスレンダリングは、その各々が１つまたは複数のパスセグメントを含み得る（あるいは、本明細書で「パス」と呼ばれる）２次元（２Ｄ）ベクタグラフィックスパスのレンダリングを指し得る。パスが２つ以上のパスセグメントを含むとき、個々のパスセグメントは、同一タイプまたは異なるタイプのものであり得る。パスセグメントのタイプは、例えば、線と、楕円弧と、２次ベジェ曲線と、３次ベジェ曲線とを含み得る。いくつかの例では、パスセグメントタイプが、例えば、Ｏｐｅｎ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ（ＯｐｅｎＶＧ）ＡＰＩなど、標準ベクタグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）に従って定義され得る。
【００１６】
[0031]  グラフィックス処理ユニット（ＧＰＵ）は、通常、１つまたは複数の３ＤグラフィックスＡＰＩに対応するように設計された３次元（３Ｄ）グラフィックスパイプラインを実装する。今日使用される主流の３ＤグラフィックスＡＰＩは、準拠デバイス（例えば、ＧＰＵ）がパスレンダリングコマンドをサポートすることを要求しないため、現代的ＧＰＵがパスレンダリングコマンドのためのハードウェアアクセラレーションを提供することはほとんどない。例えば、現代的ＧＰＵで実装される典型的な３Ｄグラフィックスパイプラインは、（例えば、点、線、および三角形など）低次の、湾曲していない３Ｄグラフィックスプリミティブをラスタライズするように設計されるが、（例えば、楕円弧、およびベジェ曲線など）湾曲したパスレンダリングプリミティブを直接的にレンダリングできないことがあるラスタライザを含み得る。
【００１７】
[0032]  パスレンダリングに関する一手法は、パスレンダリングコマンドを実行する目的で部分的なＧＰＵハードウェアアクセラレーションを提供するために３Ｄ  ＧＰＵプラインを使用することを伴い得る。この手法は、パスセグメントを、ＧＰＵによってラスタライズされ得る、１つまたは複数の低次の、湾曲していないグラフィックスプリミティブに変換するために、中央処理装置（ＣＰＵ）を用いてパスセグメントを前処理することを伴う。本開示で説明する技法による例以外の例では、ＣＰＵが、湾曲したパスセグメント（例えば、楕円弧またはベジェ曲線）を、パスセグメントの曲率を近似する複数の比較的小さな三角形のセットに分割でき、かつＧＰＵを使用してこれら三角形のセットをレンダリングさせることができる。しかしながら、このような手法は、ＣＰＵ集中的であり得、従って、他のＣＰＵタスクに利用可能なＣＰＵ処理サイクルの量を制限する可能性がある。さらに、場合により、所望の詳細レベルでパスセグメントをレンダリングするために、比較的多数の三角形が必要とされ得る。比較的多数の三角形は、データを記憶するときにかなりの量のメモリストレージスペースを消費することがあり、データをＧＰＵに転送するときにかなりの量のメモリ帯域を消費することがある。
【００１８】
[0033]  本開示のパスレンダリング技法は、ＧＰＵの変形テッセレータ段(modified tessellator stage)によって受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断するために、変形テッセレータ段と２つのレンダリングパスとを利用するＧＰＵハードウェアアクセラレーテッドパスレンダリング解決策を提供し得る。グラフィックスパイプラインの後続段(subsequent stages)は、パスにダッシングおよびエンドキャップを適用すること、並びに３Ｄグラフィックスパイプラインを使用して内部パスセグメントの終点(endpoints)間に接合を適用することのような、ラインセグメントに対するパスレンダリング動作を行うためにこれらドメイン座標を分析する。ＧＰＵを使用してパスレンダリング動作を行うことにより、ＣＰＵからこれら動作を行う負担を取り除き、これにより処理リソースを他のＣＰＵタスクのために解放する。さらに、ＧＰＵは、いくつかの例で、パスレンダリング動作を行うことを助けるためにＧＰＵがＣＰＵよりもより効率的な形式でパスセグメントをレンダリングすることを可能にし得る高並列の現代的ＧＰＵテッセレーションアーキテクチャを利用することがある。
【００１９】
[0034]  いくつかの例では、ＧＰＵが、例えば、ＤｉｒｅｃｔＸ  １１  ＡＰＩなど、特定の３ＤグラフィックスＡＰＩによって指定されたグラフィックスアーキテクチャを使用して、パスセグメントをテッセレートおよびレンダリング可能であり得る。より詳細に説明されるように、本開示で説明する技法は、グラフィックスハードウェアに対する可能な変形、具体的には、ＧＰＵグラフィックスパイプライン内のその後続段がエンドキャップ、ダッシング、接合、およびカスプ処理に関するレンダリング動作を行うために分析できる、複数の頂点に関する複数のドメイン座標を生成するためのテッセレーション段を説明する。このようにして、本開示で説明する技法は、いくつかの変形で、ＤｉｒｅｃｔＸ  １１アーキテクチャのグラフィックスハードウェアがダッシング、接合、エンドキャップ、およびリテッセレーションでパスレンダリングを行うこと可能にする。
【００２０】
[0035]  パスレンダリングは、２つの主な動作、すなわち、（１）パスセグメントのフィル（filling）と、（２）パスセグメントのストローク（stroking）とに分割され得る。いくつかの例では、パスを完全にレンダリングするために、フィルおよびストロークのうちの１つまたはこれらの両方が行われ得る。概念的に、フィル動作は、指定されたフィル色を用いてパスセグメントの内部領域をフィルすることに対応し得る。単に例示のために、本技法は、ストローク動作に関して説明される。ファイリング動作は任意の様式で行われ得る。
【００２１】
[0036]  ストローク動作は、概念的に、パスに垂直に保持された直線ペンを使用して、パスセグメントの縁を「拡大すること」に対応し得る。主な動作に加えて、パスレンダリングは、様々なタイプのダッシング、エンドキャップをパスの終端(ends)に適用すること、パスの内部パスセグメントの終点(endpoints)間に様々なタイプの接合を適用すること、並びにリテッセレーションを使用してカスプを処理することも伴い得る。
【００２２】
[0037]  ＧＰＵは、「テッセレーションユニット」、すなわち、テッセレータとも呼ばれるテッセレーション段を使用して、プリミティブ、すなわち、パスセグメントをテッセレート（例えば、分割）できる。ＧＰＵがパスセグメントをテッセレートした後、本開示のパスレンダリング技法を実装するＧＰＵは、テッセレータ段が判断して、ＧＰＵグラフィックスレンダリングパイプライン内の後続段に出力する複数のドメイン座標に基づいて３Ｄ形状を生成するように構成され得る。ＧＰＵによって生成された３Ｄ形状に基づいて、パスセグメントに関する複数のストローク領域をレンダリングすることにより、３Ｄ  ＧＰＵパイプラインは、ストローク動作の実行に関して１００％またはほぼ１００％のＧＰＵ解決策を提供するために使用され得る。
【００２３】
[0038]  図１は、本開示のＧＰＵアクセラレーテッドパスレンダリング技法を実装するために使用され得る例示的なコンピューティングシステム２を示すブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、タブレットコンピューティングデバイス、ビデオゲームプラットフォームもしくはコンソール、（例えば、モバイル電話、セルラー電話、衛星電話、および／もしくはモバイル電話ハンドセットなど）ワイヤレス通信デバイス、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、またはグラフィカルデータを処理および／もしくは表示する任意の他のタイプのデバイスを備えることができる。
【００２４】
[0039]  図１の例に示すように、コンピューティングデバイス２は、ユーザインターフェース４と、ＣＰＵ６と、メモリコントローラ８と、メモリ１０と、グラフィックス処理ユニット（ＧＰＵ）１２と、ＧＰＵキャッシュ１４と、ディスプレイインターフェース１６と、ディスプレイ１８と、バス２０とを含む。ユーザインターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびディスプレイインターフェース１６は、バス２０を使用して互いに通信できる。図１に示す異なる構成要素相互間のバスおよび通信インターフェースの特定の構成は単なる例示であり、本開示の本技法を実装するために、同じもしくは異なる構成要素を備えたコンピューティングデバイスおよび／または他のグラフィックス処理システムの他の構成が使用され得ることに留意されたい。
【００２５】
[0040]  ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサを備えることができる。ユーザは、ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるための入力をコンピューティングデバイス２に与えることができる。ＣＰＵ６上で実行されるこれらソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、ユーザインターフェース４を介してコンピューティングデバイス２に結合される、キーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなど、１つもしくは複数の入力デバイス（図示せず）を介してコンピューティングデバイス２に入力を与えることができる。
【００２６】
[0041]  ＣＰＵ６上で実行するソフトウェアアプリケーションは、グラフィックスデータをディスプレイ１８にレンダリングさせるようにＧＰＵ１２に命令する、１つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令が、例えば、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ（商標登録））ＡＰＩ、Ｏｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍ（ＯｐｅｎＧＬ  ＥＳ）ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、ＤｉｒｅｃｔＸ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、ＯｐｅｎＶＧ（登録商標）、または任意の他の公的もしくは所有権を主張できる標準グラフィックスＡＰＩなど、グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）に準拠し得る。グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングのうちの一部または全てを行わせるようにＧＰＵ１２に命令するための、１つまたは複数のグラフィックスレンダリングコマンドを発行できる。いくつかの例では、レンダリングされることになるグラフィックスデータが、例えば、点、線、三角形、四角形、トライアングルストリップ（triangle strips）、パッチなど、グラフィックスプリミティブのリストを含み得る。さらなる例では、レンダリングされることになるグラフィックスデータが、例えば、ラインセグメント、楕円弧、二次ベジェ曲線、および三次ベジェ曲線など、１つまたは複数のパスレンダリングプリミティブを含み得る。
【００２７】
[0042]  メモリコントローラ８は、メモリ１０との間を行き来するデータの転送を容易にする。例えば、メモリコントローラ８は、メモリ読取り要求とメモリ書込み要求とをＣＰＵ６および／またはＧＰＵ１２から受け取って、メモリ１０に関するこのような要求に対してサービス提供し、コンピューティングデバイス２内の構成要素にメモリサービスを提供するようにできる。メモリコントローラ８はメモリ１０に通信可能に結合される。メモリコントローラ８は、図１の例示的なコンピューティングデバイス２内で、ＣＰＵ６、ＧＰＵ１２、およびメモリ１０の各々とは別である処理モジュールとして示されているが、他の例では、メモリコントローラ８の機能の一部または全てが、ＣＰＵ６、ＧＰＵ１２、およびメモリ１０のうちの１つもしくは複数の上で実装され得る。
【００２８】
[0043]  メモリ１０は、ＣＰＵ６による実行のためにアクセス可能なプログラムモジュールおよび／もしくは命令、並びに／またはＣＰＵ６上で実行するプログラムによって使用するためのデータを記憶できる。例えば、メモリ１０は、複数のユーザアプリケーションと、これらアプリケーションと関連付けられたグラフィックスデータとを記憶できる。メモリ１０は、コンピューティングデバイス２の他の構成要素によって使用するため、および／または生成されるための情報を記憶することも可能である。例えば、メモリ１０は、ＧＰＵ１２のデバイスメモリとして機能でき、ＧＰＵ１２によって演算されことになるデータ、並びにＧＰＵ１２によって行われる演算の結果生じるデータを記憶できる。例えば、メモリ１０は、パスデータ、パスセグメントデータ、表面、テクスチャバッファ、デプスバッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶できる。加えて、メモリ１０は、ＧＰＵ１２によって処理するためのコマンドストリームを記憶できる。例えば、メモリ１０は、パスレンダリングコマンド、３Ｄグラフィックスレンダリングコマンド、および／または汎用ＧＰＵ（ＧＰＧＰＵ）コンピューティングコマンドを記憶できる。メモリ１０は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、同期式ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つもしくは複数の揮発性または不揮発性のメモリあるいは記憶デバイスを含み得る。
【００２９】
[0044]  ＧＰＵ１２は、ＣＰＵ６によってＧＰＵ１２に発行されたコマンドを実行するように構成され得る。ＧＰＵ１２によって実行されるコマンドは、グラフィックスコマンド、描画呼出し（draw call）コマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンド、テッセレーションコマンドなどを含み得る。
【００３０】
[0045]  いくつかの例では、ＧＰＵ１２が、ディスプレイ１８に１つまたは複数のグラフィックスプリミティブをレンダリングするためのグラフィックス演算を行うように構成され得る。このような例では、ＣＰＵ６上で実行するソフトウェアアプリケーションの１つがグラフィックス処理を要求するときに、ＣＰＵ６は、ディスプレイ１８にレンダリングするためのグラフィックスデータをＧＰＵ１２に提供して、ＧＰＵ１２に対する１つまたは複数のグラフィックスコマンドを発行できる。グラフィックスコマンドは、例えば、描画呼出しコマンド、ＧＰＵ状態プログラミングコマンド、条件付きコマンド、メモリ転送コマンド、ブリッティング（blitting）コマンド、テッセレーションコマンドなどを含み得る。グラフィカルデータは、頂点データ、テクスチャデータ、表面データなどを含み得る。いくつかの例では、ＣＰＵ６が、コマンドとグラフィックスデータとをＧＰＵ１２によってアクセス可能なメモリ１０に書き込むことによって、コマンドとグラフィックスデータとをＧＰＵ１２に提供できる。
【００３１】
[0046]  さらなる例では、ＧＰＵ１２が、ＣＰＵ６上で実行するアプリケーションに関して、汎用コンピューティング、いわゆる、汎用ＧＰＵ（ＧＰＧＰＵ）を行うように構成され得る。このような例では、ＣＰＵ６上で実行するソフトウェアアプリケーションのうちの１つが計算タスクをＧＰＵ１２にオフロードすることを決定するときに、ＣＰＵ６は、汎用コンピューティングデータをＧＰＵ１２に提供して、ＧＰＵ１２に対する１つまたは複数の汎用コンピューティングコマンドを発行できる。汎用コンピューティングコマンドは、例えば、カーネル実行コマンド、メモリ転送コマンドなどを含み得る。いくつかの例では、ＣＰＵ６が、コマンドとグラフィックスデータとをＧＰＵ１２によってアクセス可能なメモリ１０に書き込むことによって、コマンドと汎用コンピューティングデータとをＧＰＵ１２に提供できる。
【００３２】
[0047]  ＧＰＵ１２は、いくつかの例で、グラフィック演算についてＣＰＵ６よりもより効率的な処理を提供する高並列構造を用いて構築され得る。例えば、ＧＰＵ１２は、複数の頂点、制御点、画素および／または他のデータに関して並列形式で演算するように構成された複数の処理要素を含み得る。ＧＰＵ１２の高並列性は、いくつかの例で、ＧＰＵ１２がＣＰＵ６を使用して画像をレンダリングするよりもより迅速にグラフィックス画像（例えば、ＧＵＩおよび２次元（２Ｄ）並びに／または３次元（３Ｄ）のグラフィックスシーン）をディスプレイ１８上にレンダリングすることを可能にする。加えて、ＧＰＵ１２の高並列性は、汎用コンピューティングアプリケーションについてＣＰＵ６よりもより迅速に、ＧＰＵ１２があるタイプのベクトル演算および行列演算を処理することを可能にし得る。
【００３３】
[0048]  いくつかの例では、ＧＰＵ１２がコンピューティングデバイス２のマザーボードに統合され得る。他の例では、ＧＰＵ１２がコンピューティングデバイス２のマザーボードにおけるポートに設置されるグラフィックスカード上に存在したり、場合により、コンピューティングデバイス２と相互運用するように構成された周辺デバイス内に組み込まれたりし得る。さらなる例では、ＧＰＵ１２が、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。ＧＰＵ１２は、１つもしくは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積論理回路または個別論理回路など、１つもしくは複数のプロセッサを含み得る。
【００３４】
[0049]  いくつかの例では、ＧＰＵ１２がＧＰＵキャッシュ１４に直接結合され得る。従って、ＧＰＵ１２は、必ずしもバス２０を使用せずに、ＧＰＵキャッシュ１４からデータを読み取り、ＧＰＵキャッシュ１４にデータを書き込むことができる。言い換えれば、ＧＰＵ１２は、オフチップメモリに代えて、ローカルストレージを使用してローカルにデータを処理できる。これは、大量のバストラフィックを経験し得るバス２０を介したデータの読取りおよび書込みの必要を無くすことで、ＧＰＵ１２がより効率的な形式で動作することを可能にする。しかしながら、いくつかの例では、ＧＰＵ１２が別個のキャッシュを含まないで、代わりに、バス２０を介してメモリ１０を利用できる。ＧＰＵキャッシュ１４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光学データ媒体など、１つもしくは複数の揮発性または不揮発性のメモリあるいは記憶デバイスを含み得る。
【００３５】
[0050]  ＣＰＵ６および／またはＧＰＵ１２は、レンダリングされた画像データをメモリ１０内に割り振られたフレームバッファ内に記憶し得る。レンダリングされた画像データはレンダリングされたフィル領域およびストローク領域をレンダリングされるべきパスセグメントのために含み得る。ディスプレイインターフェース１６は、データをフレームバッファから取り出して、レンダリングされた画像データによって表される画像を表示するようにディスプレイ１８を構成し得る。いくつかの例では、ディスプレイインターフェース１６が、フレームバッファから取り出された複数のデジタル値をディスプレイ１８によって消費され得るアナログ信号に変換するように構成されたデジタルアナログ変換器（ＤＡＣ）を含み得る。他の例では、ディスプレイインターフェース１６が、処理のために、これらデジタル値をディスプレイ１８に直接的に渡すことができる。
【００３６】
[0051]  ディスプレイ１８は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ（ＳＥＤ）、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ１８はコンピューティングデバイス２内に統合され得る。例えば、ディスプレイ１８は、モバイル電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。あるいは、ディスプレイ１８は、ワイヤード通信リンクまたはワイヤレス通信リンクを介してコンピュータデバイス２に結合されるスタンドアロンデバイスであり得る。例えば、ディスプレイ１８は、ケーブルリンクまたはワイヤレスリンクを介してパーソナルコンピュータに接続されるコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００３７】
[0052]  バス２０は、第１世代、第２世代、および第３世代のバス構造並びにバスプロトコルと、共有バス構造およびバスプロトコルと、ポイントツーポイントバス構造およびバスプロトコルと、一方向バス構造およびバスプロトコルと、双方向バス構造およびバスプロトコルとを含めて、バス構造およびバスプロトコルの任意の組合せを使用して実装され得る。バス２０を実装するために使用され得る様々なバス構造およびバスプロトコルの例は、例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバス、ＩｎｆｉｎｉＢａｎｄバス、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ  Ｂｕｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＡＭＢＡ）Ａｄｖａｎｃｅｄ  Ｈｉｇｈ−performａｎｃｅ  Ｂｕｓ（ＡＨＢ）、ＡＭＢＡ  Ａｄｖａｎｃｅｄ  Ｐｅｒｉｐｈｅｒａｌ  Ｂｕｓ（ＡＰＢ）、およびＡＭＢＡ  Ａｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バスを含む。他のタイプのバス構造およびバスプロトコルも使用され得る。
【００３８】
[0053]  本開示によれば、ＧＰＵ１２は、様々なパスレンダリングコマンドの実行のために部分乃至全体的（partial-to-total）ＧＰＵハードウェアアクセラレーションを提供するように構成され得る。例えば、ＣＰＵ６がＧＰＵ１２に対して１つまたは複数のパスレンダリングコマンドを発行し、ＧＰＵ１２がこれらパスレンダリングコマンドを実行し得る。本開示の技法による一例として、ＧＰＵ１２は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたこれらドメイン座標を出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、判断されたこれらドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するように構成されたテッセレーションユニットを含み得る。トライドメイン、等値線ドメイン、およびクワッドドメインの概念、並びにグラフィカルフィーチャを示す情報は、全て以下においてより詳細に説明される。
【００３９】
[0054]  いくつかの例では、ＧＰＵ１２が、パスストローク動作を行うために、２パスレンダリング手法を使用し得る。第１のパスでは、ＧＰＵ１２がキャップおよび接合に関する複数のドメイン座標を判断でき、プリミティブを複数のサブセグメントに分割できる。第２のパスでは、テッセレーションユニットが第１のパスで判断された複数のドメイン座標に基づいて複数の追加ドメイン座標を判断でき、ダッシングパターンに基づき、複数のセグメントをこのパターンに基づいて維持または破棄するようなグラフィカル演算を行い得る。ＧＰＵ１２が第２のパスで判断するこれらドメイン座標は、ダッシングパターンに従って指定される複数のサブセグメントに関するキャップ、接合、および処理カスプに対応し得る。いくつかの例では、ＧＰＵ１２のテッセレーションユニットが、第２のパスで判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィックスフィーチャを示す情報を出力することもできる。グラフィックスフィーチャを示す情報は、これらドメイン座標がスタートキャップ、エンドキャップ、接合、またはラインセグメントと関連付けられているかどうかを示すことができる。ドメインシェーダ段のような後続段は、入力されたこれらドメイン座標を受け取り、これらドメイン座標に基づいて複数の頂点座標を判断できる。
【００４０】
[0055]  ストローク動作の一部として、ラインセグメントのストローク領域に空間的に対応する１つまたは複数のプリミティブ（例えば、三角形プリミティブ）を生成するために、ＧＰＵ１２は、例えばパラメータ式などの式によって定義され得るプリミティブを受け取り得る。本開示の技法によれば、ＧＰＵ１２は、テッセレーションユニットを利用して、受け取ったプリミティブを１つまたは複数のラインセグメントに分割し得る。いくつかの例では、ＧＰＵ１２が、受け取ったプリミティブから判断されたこれらラインセグメントの各終点に関する複数の法線ベクトルを生成し得る。法線の各々は、パスセグメントに沿った複数の点のうちの該当する点に対応する。
【００４１】
[0056]  ＧＰＵ１２のテッセレーションユニットが生成する複数のドメイン座標に基づいて、ＧＰＵ１２は、受け取ったプリミティブから判断された複数のラインセグメントに対するカスプ処理、スタートキャップおよびエンドキャップの追加、ダッシングの追加、並びに接合の追加のようなパスレンダリング動作を行い得る。ＧＰＵ１２は、判断されたこれらドメイン座標をどのように分析するかを、１つまたは複数の判断されたドメイン座標と関連付けられたグラフィカルフィーチャを示す情報に基づいて判断できる。
【００４２】
[0057]  本開示で説明する技法では、１つまたは複数の判断されたドメイン座標と関連付けられたグラフィカルフィーチャが、パスレンダリング技法を効率的な形式で実装する際に役立ち得る。例えば、グラフィカルフィーチャの例が、わずかな例として、これらドメイン座標がカスプ処理、スタートキャップおよびエンドキャップの追加、ダッシングの追加、並びに接合の追加に関するかどうかを示す情報を含むが、他のグラフィカルフィーチャの例が存在して、これら技法がそう限定されると考えるべきでないこともある。グラフィカルフィーチャで、ＧＰＵ１２はこれらドメイン座標が何の目的に使用されるかを既に判断していることがあり、これが、いくつかの例として、ＧＰＵ１２が、テッセレーションユニットを介して、カスプ処理、スタートキャップおよびエンドキャップの追加と、ダッシングの追加と、接合の追加とを効率的な形式で実装することを可能にする。
【００４３】
[0058]  本開示で説明するパスレンダリング技法は、例えば、ＣＰＵ６と、ＧＰＵ１２と、メモリ１０とを含めて、図１に示されるコンピューティングデバイス２の構成要素のうちのいずれかの中で実装され得る。いくつかの例では、パスレンダリング技法の全てまたは大部分が、ＧＰＵ１２内（例えば、ＧＰＵ１２のグラフィカルパイプライン内）で実装され得る。追加の例では、ＣＰＵ６が、本開示のパスレンダリング技法を行うＧＰＵ１２内のパスレンダリングパイプラインを実装するために、グラフィックスパイプラインの状態を構成して、シェーダプログラムをグラフィックスパイプラインと結合させるための技法を実装できる。さらなる例では、ＣＰＵ６が、レンダリングされることになるパスを示すデータを、１つまたは複数のパスをレンダリングするためにＧＰＵ１２によってアクセスされ得る１つまたは複数のバッファ（例えば、１つまたは複数の頂点バッファ）内に配置するように構成され得る。
【００４４】
[0059]  図２は、図１のコンピューティングデバイス２のＣＰＵ６、ＧＰＵ１２、およびメモリ１０をさらに詳細に示すブロック図である。図２に示すように、ＣＰＵ６はＧＰＵ１２とメモリ１０とに通信可能に結合され、ＧＰＵ１２はＣＰＵ６とメモリ１０とに通信可能に結合される。いくつかの例では、ＧＰＵ１２が、ＣＰＵ６によってマザーボードに統合され得る。追加の例では、ＧＰＵ１２が、ＣＰＵ６を含むマザーボードのポート内にインストールされたグラフィックスカード上で実装され得る。さらなる例では、ＧＰＵ１２が、ＣＰＵ６と相互作用するように構成された周辺デバイス内に組み込まれることが可能である。追加の例では、ＧＰＵ１２が、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。
【００４５】
[0060]  ＣＰＵ６は、ソフトウェアアプリケーション２４と、グラフィックスアプリケーション処理インターフェース（ＡＰＩ）２６と、ＧＰＵドライバ２８と、オペレーティングシステム３０とを実行するように構成される。ソフトウェアアプリケーション２４は、グラフィックス画像を表示させる１つもしくは複数の命令および／または非グラフィックスタスク（例えば、汎用コンピューティングタスク）をＧＰＵ１２上で行わせる１つもしくは複数の命令を含み得る。ソフトウェアアプリケーション２４は、グラフィックスＡＰＩ２６に対する命令を発行できる。グラフィックスＡＰＩ２６は、ソフトウェアアプリケーション２４から受け取った命令をＧＰＵドライバ２８によって消費され得るフォーマットに変換するランタイムサービスであり得る。ＧＰＵドライバ２８は、グラフィックスＡＰＩ２６を介して、ソフトウェアアプリケーション２４から命令を受け取って、これら命令にサービス提供するためにＧＰＵ１２の演算を制御する。例えば、ＧＰＵドライバ２８は、１つまたは複数のコマンド３８を構築して、コマンド３８をメモリ１０内に配置して、コマンド３８を実行するようにＧＰＵ１２に命令できる。いくつかの例では、ＧＰＵドライバ２８が、コマンド３８をメモリ１０内に配置して、オペレーティングシステム３０、例えば、１つまたは複数のシステム呼出しを介してＧＰＵ１２と通信できる。
【００４６】
[0061]  ＧＰＵ１２は、コマンドエンジン３２と、１つまたは複数の処理ユニット３４とを含む。いくつかの例では、１つまたは複数の処理ユニット３４が、３Ｄグラフィックスレンダリングパイプライン、例えば、ＤＸ  １１グラフィックスレンダリングパイプライン（すなわち、ＤＸ  １１グラフィックスＡＰＩに準拠する３Ｄグラフィックスパイプライン）を形成および／または実装できる。
【００４７】
[0062]  コマンドエンジン３２は、（例えば、メモリ１０を介して）ＣＰＵ６から複数のコマンドを受け取って、ＧＰＵ１２にこれらコマンドを実行させるように構成される。状態コマンドを受け取ることに応答して、コマンドエンジン３２は、状態コマンドに基づいて、ＧＰＵ１２内の１つもしくは複数の状態レジスタを特定の値に設定するように、かつ／または状態コマンドに基づいて、固定関数処理ユニット３４のうちの１つもしくは複数を構成するように構成され得る。描画呼出しコマンドを受け取ることに応答して、コマンドエンジン３２は、処理ユニット３４に、レンダリングされることになる頂点の頂点データ構造内に含まれ得る、レンダリングされることになるパスのタイプを示すデータに基づいて、メモリ１０内の頂点によって表された形状をレンダリングさせるように構成され得る。コマンドエンジン３２は、複数のシェーダプログラム結合コマンドを受け取って、これらシェーダプログラム結合コマンドに基づいて、特定のシェーダプログラムをプログラマブル処理ユニット３４のうちの１つまたは複数にロードすることも可能である。
【００４８】
[0063]  処理ユニット３４は、その各々がプログラマブル処理ユニットまたは固定関数処理ユニットであり得る、１つもしくは複数の処理ユニットを含み得る。プログラマブル処理ユニットは、例えば、ＣＰＵ６からＧＰＵ１２上にダウンロードされた１つまたは複数のシェーダプログラムを実行するように構成されたプログラマブルシェーダユニットを含み得る。いくつかの例では、シェーダプログラムが、例えば、ＯｐｅｎＧＬ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＧＬＳＬ）、Ｈｉｇｈ  Ｌｅｖｅｌ  Ｓｈａｄｉｎｇ  Ｌａｎｇｕａｇｅ（ＨＬＳＬ）、Ｃ  ｆｏｒ  Ｇｒａｐｈｉｃｓ（Ｃｇ）シェーディング言語など、ハイレベルシェーディング言語で書き込まれたプログラムのコンパイルバージョンであり得る。いくつかの例では、プログラマブルシェーダユニットが、並列して動作するように構成された複数の処理ユニット、例えば、ＳＩＭＤパイプラインを含み得る。プログラマブルシェーダユニットは、シェーダプログラム命令を記憶するプログラムメモリと、実行状態レジスタ、例えば、実行されているプログラムメモリ内の現在の命令またはフェッチされることになる次の命令を示すプログラムカウンタレジスタとを有し得る。処理ユニット３４内のプログラマブルシェーダユニットは、例えば、頂点シェーダユニット、ピクセルシェーダユニット、ジオメトリシェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、コンピュートシェーダユニット、および／またはユニファイドシェーダユニットを含み得る。
【００４９】
[0064]  固定関数処理ユニットは、ある機能を行うために配線接続されたハードウェアを含み得る。固定関数ハードウェアは、１つまたは複数の制御信号を介して、例えば、異なる機能を行うように構成され得るが、固定関数ハードウェアは、通常、ユーザコンパイルプログラムを受け取ることができるプログラムメモリを含まない。いくつかの例では、処理ユニット３４内の固定関数処理ユニットが、例えば、デプステスト、シザーテスト、アルファブレンディングなどおよび、ラスタ演算を行う処理ユニットを含み得る。
【００５０】
[0065]  メモリ１０は、パスデータ３６と、１つまたは複数のコマンド３８とを記憶できる。いくつかの例では、パスデータ３６が、複数の頂点（すなわち、制御点）として、メモリ１０内に割り当てられた１つまたは複数の頂点バッファ内に記憶され得る。いくつかの例では、パスデータが、パッチリストデータ構造（例えば、４制御点パッチリスト）内に記憶され得る。コマンド３８は、１つまたは複数のコマンドバッファ（例えば、リングバッファ）内に記憶され得る。ＣＰＵ６（例えば、オペレーティングシステム３０を介したＧＰＵドライバ２８）は、ＧＰＵ１２によって消費するために、パスデータ３６とコマンド３８とをメモリ１０内に配置できる。ＧＰＵ１２（例えば、コマンドエンジン３２）は、メモリ１０内に記憶されたコマンド３８を検索および実行できる。
【００５１】
[0066]  パスデータ３６が頂点として記憶される例では、頂点がレンダリングされることになるパスを形状的に定義する１つまたは複数の属性を含み得る。例えば、線の場合、パッチ制御リスト内の頂点は、線の終点に関する座標（例えば、（ｘ０，ｙ０）および（ｘ１，ｙ１））を示すデータを含み得る。３次ベジェ曲線の場合、パッチ制御リスト内の頂点は、その曲線を定義する４つの制御点の座標（例えば、（ｘ０，ｙ０）、（ｘ１，ｙ１）、（ｘ２，ｙ２）、（ｘ３，ｙ３））を示すデータを含み得る。２次ベジェ曲線の場合、パッチ制御リスト内の頂点は、４つの制御点の代わりに、３つの制御点に関する座標を示すデータを含み得る。楕円弧の場合、パッチ制御リスト内の頂点は、楕円弧の終点パラメータ表示を示すデータ、または楕円弧の中心パラメータ表示を示すデータを含み得る。
【００５２】
[0067]  いくつかの例では、レンダリングされることになるパスを形状的に定義する１つまたは複数の属性が解像度と無関係であり得る。言い換えれば、パスを形状的に定義する属性は、パスセグメントをレンダリングするときに行われることになるテッセレーションの量と無関係であり得、かつ／またはパスセグメントをレンダリングするときに生成されることになる頂点の数量と無関係であり得る。
【００５３】
[0068]  ＣＰＵ６は、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を頂点バッファ内の１つまたは複数の、場合により未使用の頂点属性内に配置することも可能である。いくつかの例では、異なるパスタイプが、ベクタグラフィックスＡＰＩによって定義されたパスタイプのセットに対応し得、かつソフトウェアアプリケーション２４によって使用するために利用可能である。いくつかの例では、異なるパスタイプが、ＯｐｅｎＶＧ  ＡＰＩによって定義されたパスタイプのセットに対応し得る。
【００５４】
[0069]  コマンド３８は、１つもしくは複数の状態コマンドおよび／または１つもしくは複数の描画呼出しコマンドを含み得る。状態コマンドは、例えば、描画色、フィル色、ストローク色など、ＧＰＵ１２内の状態変数のうちの１つまたは複数を変更するようにＧＰＵ１２に命令できる。いくつかの例では、状態コマンドが、パスをレンダリングすることと関連付けられた１つまたは複数の状態変数を設定するように構成されたパスレンダリング状態コマンドを含み得る。例えば、状態コマンドは、レンダリングされることになるパスがフィルされるか、ストロークされるか、またはこれらの両方かを示すように構成されたペイントモードコマンドを含み得る。別の例として、状態コマンドは、フィル動作のために使用されることになる色を指定するフィル色コマンドおよび／またはストローク動作のために使用されることになる色を指定するストローク色コマンドを含み得る。さらなる例として、状態コマンドは、例えば、ストローク幅、エンドキャップスタイル（例えば、突き合せ（butt）、円形、方形）、ライン接合スタイル（例えば、マイター、ラウンド、ベベル）、マイターリミットなど、ストローク動作に関する１つまたは複数のパラメータを指定できる。いくつかの例では、１つもしくは複数の状態パラメータを設定するために状態コマンドを使用することに加えて、またはその代わりに、描画呼出しコマンドを使用することによって、あるいはパスデータ３６を含む頂点バッファ内に状態インジケータを配置することによって、状態パラメータのうちの１つもしくは複数が設定され得る。
【００５５】
[0070]  描画呼出しコマンドは、メモリ１０内に記憶された（例えば、頂点バッファ内で定義された）１つまたは複数の頂点のグループによって定義された形状をレンダリングするようにＧＰＵ１２に命令できる。いくつかの例では、描画呼出しコマンドが、ＧＰＵ１２にメモリ１０の定義されたセクション（例えば、頂点バッファまたはパスデータ３６）内に記憶された頂点の全てをレンダリングさせることができる。言い換えれば、ＧＰＵ１２が描画呼出しコマンドを受け取ると、メモリ１０の定義されたセクション（例えば、頂点バッファまたはパスデータ３６）内の頂点によって表された形状およびプリミティブをレンダリングするための制御がＧＰＵ１２に渡される。
【００５６】
[0071]  描写呼出しコマンドは、３Ｄ描写呼出しコマンドおよびパスレンダリング描写呼出しコマンドのうちの１つまたは両方を含み得る。３Ｄレンダリング描画呼出しコマンドの場合、頂点バッファ内の１つまたは複数の頂点のグループによって定義された形状は、レンダリングされることになる１つまたは複数の３Ｄグラフィックスプリミティブ（例えば、点、線、三角形、四角形、トライアングルストリップ、パッチなど）に対応し得、３Ｄレンダリング描画呼出しコマンドは、１つまたは複数の３ＤグラフィックスプリミティブをレンダリングするようにＧＰＵ１２に命令できる。パスレンダリング描画呼出しコマンドの場合、頂点バッファ内の１つまたは複数の頂点のグループによって定義された形状は、レンダリングされることになる１つまたは複数のパスプリミティブ（例えば、ラインセグメント、楕円弧、２次ベジェ曲線、および３次ベジェ曲線など）に対応し得、パスレンダリング描画呼出しコマンドは、１つまたは複数のパスプリミティブをレンダリングするようにＧＰＵ１２に命令できる。
【００５７】
[0072]描画呼出しは、ハルシェーダと、テッセレータと、ドメインシェーダとを含み得る固定関数ユニットおよびプログラマブルユニットを利用する１つまたは複数のテッセレーションコマンドを指定することも可能である。ハルシェーダは、テッセレートされることになるドメインを指定できる。いくつかの例では、テッセレートされることになるドメインが、等値線ドメイン、三角形（トライ）ドメイン、またはクワッド（四角形）ドメインのうちの１つを備え得る。テッセレータは指定されたドメイン上で動作して、これに基づいてドメインシェーダが頂点座標を判断できるドメイン座標を出力する。本開示の技法は、テッセレータが等値線ドメインタイプ、トライドメインタイプ、およびクワッドドメインタイプ以外の追加ドメインタイプ上で動作できるようにテッセレータを変形する。新しいドメインタイプは、テッセレーションユニットが行う動作に影響を及ぼすことができ、テッセレータにグラフィカルフィーチャを示す情報を、ドメインシェーダ段など、ＧＰＵ１２の後続段に出力させることができる。
【００５８】
[0073]  いくつかの例では、本開示で説明するパスレンダリング技法が、例えば、グラフィックスＡＰＩ２６と、ＧＰＵドライバ２８と、コマンドエンジン３２と、処理ユニット３４とを含めて、図２に示す構成要素のうちのいずれかの内で実装され得る。いくつかの例では、パスレンダリング技法のすべてまたは大部分が、処理ユニット３４によって形成されたＧＰＵ１２内のグラフィカルパイプライン内で実装され得る。例えば、テッセレーションユニットは処理ユニット３４のユニットであり得る。追加の例では、ＣＰＵ６のソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６および／またはＧＰＵドライバ２８が、本開示のパスレンダリング技法を行うＧＰＵ１２内のパスレンダリングパイプラインを実装するために、グラフィックスパイプラインの状態を構成して、シェーダプログラムをグラフィックスパイプラインと結合させるための技法を実装できる。さらなる例では、ＣＰＵ６のソフトウェアアプリケーション２４、グラフィックスＡＰＩ２６および／またはＧＰＵドライバ２８が、レンダリングされることになるパスを示すデータを、１つまたは複数のパスをレンダリングするためにＧＰＵ１２によってアクセスされ得る１つまたは複数のバッファ（例えば、１つまたは複数の頂点バッファ）内に配置するように構成され得る。
【００５９】
[0074]  本開示の技法によれば、ＧＰＵ１２は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたドメイン座標を出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するように構成されたテッセレーションユニットを含み得る。
【００６０】
[0075]  図３は、本開示のパスレンダリング技法を行い得る例示的なグラフィックスパイプライン４０を示す概念図である。いくつかの例では、グラフィックスパイプラインが、Ｍｉｃｒｏｓｏｆｔ（登録商標）ＤｉｒｅｃｔＸ（ＤＸ）１１グラフィックスパイプラインに対応し得る。図３に示すように、グラフィックスパイプライン４０は、リソースブロック４２と、図２の処理ユニット３４を備え得る複数の処理段とを含む。複数の処理段（例えば、処理ユニット３４）は、入力アセンブラ（ＩＡ）４４と、頂点シェーダ（ＶＳ）４６と、ハルシェーダ（ＨＳ）４８と、テッセレータ５０と、ドメインシェーダ（ＤＳ）５２と、ジオメトリシェーダ（ＧＳ）５４と、ラスタライザ５６と、ピクセルシェーダ（ＰＳ）５８と、出力統合器６０とを含む。ハルシェーダ４８、テッセレータ５０、およびドメインシェーダ５２は、グラフィックスパイプライン４０のテッセレーション段６２を形成し得る。
【００６１】
[0076]  リソースブロック４２は、例えば、１つもしくは複数のテクスチャおよび／または１つもしくは複数のバッファなど、グラフィックスパイプライン４０によって使用される１つもしくは複数のメモリリソースに対応し得る。リソースブロック４２は、グラフィカルパイプライン４０内の処理段のうちの１つもしくは複数によって処理されることになる入力データおよび／またはグラフィックスパイプライン４０内の処理段のうちの１つもしくは複数からの出力データを記憶できる。例として、リソースブロック４２は、本開示で説明するようにパスセグメントに関するフィル領域のラスタライズされたバージョンおよび／またはパスセグメントに関するストローク領域のラスタライズされたバージョンを保持するフレームバッファを記憶できる。いくつかの例では、リソースブロック４２を形成するメモリリソースが、コンピューティングデバイス２のメモリ１０および／またはＧＰＵキャッシュ１４内に存在し得る。
【００６２】
[0077]  図３に示す直角の処理段は固定関数処理段を表し、図３に示す丸角の処理段はプログラマブル処理段を表す。例えば、図３に示すように、入力アセンブラ４４、テッセレータ５０、ラスタライザ５６、および出力統合器６０は固定関数処理段であり、頂点シェーダ４６、ハルシェーダ４８、ドメインシェーダ５２、ジオメトリシェーダ５４、およびピクセルシェーダ５８はプログラマブル処理段である。プログラマブル段の各々は、特定のタイプのシェーダプログラムを実行するように構成され得る。例えば、頂点シェーダ４６は、頂点シェーダプログラムを実行するように構成され得、ハルシェーダ４８は、ハルシェーダプログラムを実行するように構成され得る、等々である。異なるタイプのシェーダプログラムの各々は、ＧＰＵの共通シェーダユニット上、または１つもしくは複数の特定のタイプのシェーダプログラムを実行するための専用である１つもしくは複数の専用シェーダユニット上のいずれかで実行できる。
【００６３】
[0078]  図３に示すように、入力アセンブラ４４、頂点シェーダ４６、ハルシェーダ４８、ドメインシェーダ５２、ジオメトリシェーダ５４、ピクセルシェーダ５８、および出力マージャ６０はリソースブロック４２に通信可能に結合される。入力アセンブラ４４、頂点シェーダ４６、ハルシェーダ４８、ドメインシェーダ５２、ジオメトリシェーダ５４、ピクセルシェーダ５８、および出力統合器６０はリソースブロック４２から入力データを検索並びに／または受け取るように構成される。ジオメトリシェーダ５４および出力統合器６０は、出力データをリソースブロック４２に書き込むように構成される。グラフィックスパイプライン４０内の処理段とリソースブロック４２との間の通信の上述の構成は、グラフィックスパイプライン４０の処理段とリソースブロック４２との間の通信がどのように構成され得るかの単なる一例である。他の例では、グラフィックスパイプライン４０の処理段とリソースブロック４２との間により多くのもしくはより少ない一方向および／または双方向の通信チャネルが提供され得る。
【００６４】
[0079]  ＤｉｒｅｃｔＸ  １１グラフィックスパイプラインの一般的な動作に関するさらなる情報は、その内容の全体が参照により本明細書に組み込まれている、Ｚｉｎｋら、「Ｐｒａｃｔｉｃａｌ  Ｒｅｎｄｅｒｉｎｇ  ＆  Ｃｏｍｐｕｔａｔｉｏｎ  ｗｉｔｈ  Ｄｉｒｅｃｔ３Ｄ  １１」、ＣＲＣ  Ｐｒｅｓｓ（２０１１年）に見出すことができる。
【００６５】
[0080]  上で議論したように、２つのパスレンダリング動作は、（１）パスセグメントのフィル、および（２）パスセグメントのストロークである。グラフィックスレンダリングパイプライン４０（例えば、Ｄｉｒｅｃｔ  １１グラフィックスパイプライン）を用いてストローク動作を行うための解決策が次に説明される。
【００６６】
[0081]  ＣＰＵ６は、レンダリングされることになるパスセグメントを示すデータを頂点バッファの１つまたは複数の頂点内に配置できる。いくつかの例では、頂点バッファが図２に示すパスデータ３６に対応し得る。頂点バッファ内の頂点に関するプリミティブトポロジは、いくつかの例で、パッチ制御リストであり得る。線の場合、パッチ制御リスト内の頂点は、線の終点に関する座標（例えば、（ｘ０，ｙ０）および（ｘ１，ｙ１））を示すデータを含み得る。３次ベジェ曲線の場合、パッチ制御リスト内の頂点は、その曲線を定義する４つの制御点の座標（例えば、（ｘ０，ｙ０）、（ｘ１，ｙ１）、（ｘ２，ｙ２）、（ｘ３，ｙ３））を示すデータを含み得る。２次ベジェ曲線の場合、パッチ制御リスト内の頂点は、４つの制御点の代わりに、曲線を定義する３つの制御点に関する座標を示すデータを含み得る。楕円弧の場合、パッチ制御リスト内の頂点は、楕円弧の終点パラメータ表示を示すデータ、または楕円弧の中心パラメータ表示を示すデータを含み得る。ＣＰＵ６は、レンダリングされることになるパスのタイプを示すデータをパッチ制御リストの、場合により未使用の頂点属性内に配置することも可能である。
【００６７】
[0082]  パスレンダリングを行うためにＧＰＵ１２によって受け取られ、使用されるパスデータ３６の１つの例示的なフォーマットが次に説明される。これはレンダリングされることになるパスを示すデータがＣＰＵ６によってＧＰＵ１２にどのように提供され得るかの単なる一例であり、他の例が可能であり、かつ本開示の範囲内であることを理解されたい。この例では、ＧＰＵ１２が４つ（４）の制御点パッチリストプリミティブとして各パスセグメントを受け取る。この例では、パッチリスト内の頂点（例えば、制御点）の各々が、該当する頂点（例えば、制御点）に関する属性を定義する３つ（３）の浮動属性を含む。
【００６８】
[0083]  ラインパスセグメントの場合、入力パスデータは、以下の形または類似の形をとることができる。
【数１】
0006013606.tif 000002
【００６９】
この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。具体的には、この例では、パスタイプインジケータが、パスセグメントがラインパスセグメントであることを意味する２．０ｆである。Ｘ０、Ｙ０、Ｘ１、Ｙ１はラインパスセグメントの終点に関する座標であり、この場合、（Ｘ０，Ｙ０）は第１の終点を表し、（Ｘ１，Ｙ１）は第２の終点を表す。
【００７０】
[0084]  この例では、残りの頂点および属性が、パスセグメントに関する他の属性を示すために使用されなくよく、かつ／または使用されてもよい。パスセグメントに関する他の属性は、例えば、パスセグメントがオープンパスの始端であるかまたは終端であるかと、そのパスに関してパスセグメントが表示されるべきかどうかと、スタートキャップまたはエンドキャップがパスセグメントの両方の終端上に配置されるかどうかと、もしあれば、何のタイプのキャップが使用されるべきかと、接合がパスセグメントのいずれかの終端上に配置されるべきかどうかと、もしあれば、何のタイプの接合を使用するかと、を含み得る。
【００７１】
[0085]  一般に、ハルシェーダ４８は、制御点、並びにドメインタイプの表示を判断できる。テッセレータ５０は、ハルシェーダ４８からドメインタイプの表示を受け取ることができる。いくつかの例では、上で説明したように、テッセレータが、等値線ドメイン上、トライドメイン上、またはクワッドドメイン上で動作し得る。テッセレータ５０は、ハルシェーダ４８によって示されたドメインに関するドメイン座標を判断でき、判断されたドメイン座標を、テッセレータ５０によって出力されたドメイン座標に基づいて、頂点座標を判断できるドメインシェーダ５２に出力できる。
【００７２】
[0086]  パスセグメントに関する属性が、ＧＰＵ１２が接合、スタートキャップもしくはエンドキャップ、カスプ処理、またはダッシングを実装する必要があることを示すときに、テッセレータ５０は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたドメイン座標を、例えば、ドメインシェーダ５２に出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を、例えば、ドメインシェーダ５２に出力するように構成され得る。
【００７３】
[0087]  ３次ベジェパスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
【数２】
0006013606.tif 000003
【００７４】
この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性は、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。具体的には、この例では、パスタイプインジケータが、パスセグメントが３次ベジェパスセグメントであることを意味する３．０ｆである。Ｘ０〜Ｘ３およびＹ０〜Ｙ３は、３次ベジェパスセグメントに関する制御点の座標であり、この場合、（Ｘ０，Ｙ０）は第１の制御点を表し、（Ｘ１，Ｙ１）は第２の制御点を表す、等々である。この例では、残りの頂点および属性が、パスセグメントに関する他の属性を示すために使用されなくよく、かつ／または使用されてもよい。パスセグメントに関する他の属性は、ラインパスセグメントに関して上で説明した属性に類似し得る。
【００７５】
[0088]  ４つの制御点の代わりに、３つの制御点が提供され得ることを除いて、類似の入力が２次ベジェパスセグメントに関して使用されてよく、プリミティブタイプインジケータは３次ベジェパスセグメントからのプリミティブと区別するために異なってよい。例えば、２次ベジェパスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
【数３】
0006013606.tif 000004
【００７６】
[0089]  この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。具体的には、この例では、パスタイプインジケータが、パスセグメントが２次ベジェパスセグメントであることを意味する１．０ｆである。Ｘ０〜Ｘ２およびＹ０〜Ｙ２は、２次ベジェパスセグメントに関する制御点の座標であり、この場合、（Ｘ０，Ｙ０）は第１の制御点を表し、（Ｘ１，Ｙ１）は第２の制御点を表す、等々である。この例では、残りの頂点および属性が、パスセグメントに関する他の属性を示すために使用されなくよく、かつ／または使用されてもよい。パスセグメントに関する他の属性は、ラインパスセグメントに関して上で説明した属性に類似し得る。
【００７７】
[0090]  いくつかの例では、楕円弧パスセグメントに関する入力パスデータが、楕円弧パスセグメントの中心パラメータ表示を示すデータを含み得る。例えば、楕円弧パスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
【数４】
0006013606.tif 000005
【００７８】
この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。この例では、パスタイプインジケータが、それぞれ、大型時計回り（ＬＣＷ）楕円弧、大型反時計回り（ＬＣＣＷ）弧、小型時計回り（ＳＣＷ）楕円弧、および小型反時計回り（ＳＣＣＷ）楕円弧に対応する４．０、４．１、４．２、または４．３のうちのいずれかであり得る。Ｘ０，Ｘ１およびＹ０，Ｙ１は、楕円弧パスセグメントの終点座標であり、この場合、（Ｘ０，Ｙ０）は弧の最初の終点を表し、（Ｘ１，Ｙ１）は弧の最終の終点を表す。加えて、ｒＨおよびｒＶは、それぞれ、横半径および縦半径を表し、ｃ．ｘ、ｃ．ｙは、その楕円弧パスセグメントがその一部である楕円の中心点を表す座標（ｃｘ，ｃｙ）であり、ａｎｇｌｅ１は、（スケーリングされていない（unscaled）円上で測定された）楕円弧の初期点の角度を表し、ａｎｇｌｅ２は、（スケーリングされていない円上で測定された）楕円弧の最終点の角度を表す。
【００７９】
[0091]  いくつかの例では、ＣＰＵ６が、楕円弧を表すデータをレンダリングのためにＧＰＵ１２に送るのに先立って、終点パラメータ形式で表された楕円弧を中心パラメータ形式に変換できる。例えば、ＣＰＵ６は、楕円弧の終点パラメータ表示に基づいて、楕円弧の中心パラメータ表示を生成して、楕円弧の中央パラメータ表示をＧＰＵ１２に送ることができる。楕円弧に関する中央パラメータ表示は、上に指定された例示的な入力データ形式に準拠し得る。中央パラメータ表示は、次に、ＧＰＵ１２によってレンダリングする目的で接合プリミティブを生成するためにＣＰＵ６によって使用され得る、楕円弧の終点接線（tangents）を見出すためにＣＰＵ６によって使用され得る。特に、上で指定された例示的な入力データ形式は中央パラメータ表示であるが、入力データ形式は、弧の最初の終点および最後の終点に関する座標（すなわち、（Ｘ０，Ｙ０）、（Ｘ１，Ｙ１））を依然として含み得る。いくつかの例では、このような座標が、結果として生じる形状の水密性を確実にするために使用され得る。
【００８０】
[0092]  さらなる例では、楕円弧パスセグメントに関する入力パスデータが、楕円弧パスセグメントの終点パラメータ表示を示すデータを含み得る。例えば、楕円弧パスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
【数５】
0006013606.tif 000006
【００８１】
この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。この例では、パスタイプインジケータが、それぞれ、大型時計回り（ＬＣＷ）楕円弧、大型反時計回り（ＬＣＣＷ）弧、小型時計回り（ＳＣＷ）楕円弧、および小型反時計回り（ＳＣＣＷ）楕円弧に対応する４．０、４．１、４．２、または４．３のうちのいずれかであり得る。Ｘ０，Ｘ１およびＹ０，Ｙ１は、楕円弧パスセグメントの終点座標であり、この場合、（Ｘ０，Ｙ０）は弧の最初の終点を表し、（Ｘ１，Ｙ１）は弧の最終の終点を表す。加えて、ｒＨおよびｒＶは、それぞれ、横半径および縦半径を表し、ａｎｇｌｅは、（ｒｈ，ｒｖ）によるスケーリングに先立って測定されたｘ軸に対する楕円の反時計回り回転角度を表す。
【００８２】
[0093]  いくつかの例では、ストローク動作が、エンドキャップと、接合と、オープンパスとを処理するために頂点パスデータ入力に関する３つの追加フィールドを使用できる。例えば、ある複数の頂点座標は、パスセグメントがオープンパスの始端であるか、オープンパスの終端であるか、およびパスセグメントが破棄され得る（例えば、パスセグメントがオープンパスの終結パスセグメントである）かどうかを示すデータを記憶できる。以下は、上述の頂点属性を含む例示的なテンプレートである。
【数６】
0006013606.tif 000007
【００８３】
このテンプレートでは、第２の頂点のｚ座標（例えば、第３の座標、すなわち属性）に関する２．０ｆが、そのパスセグメントがオープンパスの始端であることを示し、そのパスセグメントの始端にエンドキャップ（すなわち、スタートキャップ）を入れるようにＧＰＵ１２に信号伝達できる。第３の頂点のｚ座標に関する２．０ｆは、そのパスセグメントがオープンパスの終端であることを示し、そのパスセグメントの終端にエンドキャップを入れるようにＧＰＵ１２に信号伝達できる。最後の頂点のｚ座標の２．０ｆは、現在のプリミティブが破棄される（例えば、そのプリミティブがオープンパスの終結ラインまたはパスセグメントである）ことを示す。
【００８４】
[0094]  パスストローク動作を行うために、入力アセンブラ４４は、パスデータ３６をメモリ１０から取得して、パスデータ３６によって指定されたパスセグメント（例えば、パスプリミティブ）をレンダリングするために、そのパスデータをグラフィックパイプライン４０の後続段に渡す。例えば、入力アセンブラ４４は、複数の頂点をメモリ１０内に記憶された頂点バッファから取得して、頂点シェーダ４６にこれら頂点を処理させることができる。いくつかの例では、入力アセンブラ４４が、処理されることになる頂点を頂点シェーダ４６に直接的に渡すことができる。追加の例では、入力アセンブラ４４が、リソースブロック４２内の頂点バッファから、処理のために特定の頂点を検索するように頂点シェーダ４６に指示できる。
【００８５】
[0095]  頂点シェーダ４６は、入力アセンブラ４４および／またはリソースブロック４２から受け取った頂点を処理して、頂点シェーダ４６によって処理された各入力頂点に関する出力頂点を生成するように構成される。例えば、各入力頂点に関して、頂点シェーダ４６は、ＧＰＵ１２のシェーダユニット上で頂点シェーダプログラムのインスタンスを実行できる。頂点シェーダ４６によって受け取られた入力頂点、および頂点シェーダ４６によって生成された出力頂点は、あるいは、それぞれ、入力制御点および出力制御点と呼ばれる場合がある。
【００８６】
[0096]  さらなる例では、頂点シェーダ４６が、対応する入力頂点の入力属性と同一でない出力頂点に関する１つまたは複数の出力属性を生成できる。例えば、頂点シェーダ４６は、出力頂点に関する１つまたは複数の属性を生成するために、入力頂点の属性のうちの１つまたは複数に関して実質的な処理を行い得る。別の例として、頂点シェーダ４６は、出力頂点に関する出力属性のセットを生成するために、入力属性のセットから追加および／または属性を削除できる。
【００８７】
[0097]  テッセレーション段６２（すなわち、ハルシェーダ４８、テッセレータ５０、およびドメインシェーダ５２）は、入力パスデータによって定義されたパスセグメントを複数のラインセグメントにテッセレートできる。いくつかの例では、テッセレーション段６２が、プリミティブを形成する複数の頂点を、例えば、頂点シェーダ４６から受け取ることができる。いくつかの例では、４つの頂点がプリミティブを備え得る。テッセレーション段６２は、受け取ったプリミティブに基づいて、１つまたは複数のドメイン座標を判断できる。判断されたドメイン座標は、レンダリングされることになるパスの曲率を近似できる。一般に、ハルシェーダ４８は、さらなる処理のために、頂点シェーダ４６から受け取った制御点をドメインシェーダ５２に渡して、ドメインタイプなど、構成データをテッセレータ５０に提供できる。
【００８８】
[0098]  テッセレータ５０は、特定のタイプのパスセグメントまたはプリミティブを表す１つもしくは複数のパラメータ式が評価されるべきドメイン座標を判断できる。一般に、本開示の技法は、上で説明したトライドメイン、等値線ドメイン、およびクワッドドメイン以外のドメイン上で動作できるハードウェアを含めるために、テッセレータ５０の挙動を変形する。いくつかの非限定的な例では、新しいドメインが「パス１」および「パス２」と呼ばれる場合がある。テッセレータ５０がパス１ドメインまたはパス２ドメインの表示を受け取るときに、テッセレータ５０は、ダッシング、キャップ、接合を追加することと、リテッセレーションを使用して、カスプ場所を平滑化することによってカスプを処理することとなど、グラフィカル動作をサポートするためにドメイン座標を判断できる。パス１ドメイン上またはパス２ドメイン上で動作するときに、テッセレータ５０は、グラフィカルフィーチャを示す情報を出力することも可能である。グラフィカルフィーチャを示す情報は、テッセレータ５０が出力するドメイン座標のうちの少なくとも１つと関連付けられることが可能である。新しいドメイン上で動作するために、テッセレータ５０は、グラフィックスパイプライン４０のテッセレータハードウェアと並列で機能することが可能な追加のハードウェアを含み得る。例示のために、テッセレータ５０は１つの固定関数ユニットとして示されているが、追加のパスタイプをサポートするハードウェアは、場合により、別個のハードウェアであり得る。
【００８９】
[0099]  加えて、テッセレータ段６２は、２パステッセレーションをサポートし得る。ハルシェーダ４８がパス１ドメインタイプを指定することによって示され得る第１のパス内で、テッセレータ５０は、受け取ったプリミティブに関するドメイン座標を判断して、判断されたドメイン座標を出力して、判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力できる。いくつかの例では、グラフィカルフィーチャを示す情報が判断されたドメイン座標がスタートキャップもしくはエンドキャップ、ラインセグメント、または接合の一部であるかどうかをグラフィックスパイプライン４０内の後続段に示すことができる。グラフィカルフィーチャのこの情報に基づいて、グラフィックスパイプラインの後続段は、１つまたは複数のプリミティブに関する頂点座標を判断できる。
【００９０】
[0100]  ハルシェーダ４８がパス２ドメインタイプを指定することによって示されることが可能な第２のパス内で、テッセレータ５０は、第１のテッセレーションパス内で判断された情報に基づいて、ドメイン座標を同様に判断できる。グラフィックスパイプライン４０の後続段は、１つまたは複数のプリミティブに関する頂点座標を判断するために、テッセレータ５０によって判断されたドメイン座標、並びにグラフィカルフィーチャを示す情報を利用することも可能である。
【００９１】
[0101]  ドメインシェーダ５２は、テッセレータ５０によって判断されたドメイン座標値でパラメータ式を評価して、各評価に関する頂点を出力できる。いくつかの例では、ドメインシェーダ５２によって出力された頂点の各々が、その頂点の位置を示す１つまたは複数の属性を含み得る。追加の例では、ドメインシェーダ５２によって出力された頂点の各々が、その頂点と関連付けられたパスレンダリングプリミティブのタイプを示す１つまたは複数の属性を含み得る。
【００９２】
[0102]  より具体的には、ハルシェーダ４８は、頂点シェーダ４６および／またはリソースブロック４２から受け取った制御点を処理でき、ハルシェーダ４８によって実行されたハルシェーダプログラムの各インスタンスに関する出力制御を生成できる。例えば、ハルシェーダ４８によって生成されることになる各出力制御点に関して、頂点シェーダ４６は、ＧＰＵ１２のシェーダユニット上でハルシェーダプログラムのインスタンスを実行し得る。
【００９３】
[0103]  さらなる例では、ハルシェーダ４８が、入力制御点のうちの該当する１つの入力属性と同一でない出力制御点に関する１つまたは複数の出力属性を生成できる。例えば、ハルシェーダ４８は、出力制御点に関する１つまたは複数の属性を生成するために、入力制御点の属性のうちの１つまたは複数に関して実質的な処理を行い得る。別の例として、ハルシェーダ４８は、出力頂点に関する出力属性のセットを生成するために、入力属性のセットから属性を追加および／または削除できる。いくつかの例では、以下においてさらに詳細に説明されるように、ＧＰＵ１２が、終点パラメータ表示の形式で、楕円弧に関するパスデータを受け取る場合、ハルシェーダ４８は、その楕円弧の終点パラメータ表示をその楕円弧の中心パラメータ表示に変換できる。
【００９４】
[0104]  さらなる例では、ハルシェーダ４８が、特定のレンダリング動作に関して、レンダリングされるべきでないプリミティブを破棄できる。プリミティブを破棄することは、プリミティブに対応するデータをグラフィックスパイプラインのさらなる段に渡させず、これによって、このようなプリミティブをパイプラインの残りによって効果的にレンダリングさせないプロセスを指す場合がある。例えば、グラフィックスパイプライン４０がフィル動作を行っているときに、ハルシェーダ４８は、接合プリミティブとキャッププリミティブとを破棄できる。
【００９５】
[0105]  ハルシェーダ４８は、各パスセグメントに関するパッチ定数関数のインスタンスを実行することもできる。パッチ定数関数は、出力値を生成するときに、テッセレータ５０によって使用されることになる構成パラメータを判断して、テッセレータ５０に提供できる。例えば、パッチ定数関数は、ハルシェーダ４８にテッセレーション係数をテッセレータ５０に提供させることができる。テッセレーション係数は、テッセレータ５０が特定のテッセレーションドメインに適用されるテッセレーションの程度（例えば、ドメインがどの程度微細に再分割されるべきか、および／またはドメインが再分割されるべきより小さなオブジェクトの数）を指定できる。
【００９６】
[0106]  別の例として、パッチ定数関数は、ハルシェーダ４８にテッセレーションドメインをテッセレータ５０に提供させることができる。テッセレーションドメインは、テッセレータ５０によって使用されるための複数の座標を生成するために、テッセレータ５０によって使用されるオブジェクトを指す場合がある。概念的に、テッセレーションドメインは、テッセレータ５０によって複数のより小さなオブジェクトに再分割されるオブジェクトに対応し得る。より小さなオブジェクトの頂点の位置座標は、次いで、さらなる処理のために、ドメインシェーダ５２に送られる。いくつかの例では、テッセレーションドメインが、クワッド、トライ、および等値線のうちの１つになるように選択され得る。いくつかの他の例では、ドメインが、パス１ドメインまたはパス２ドメインのうちの１つになるように選択され得る。いくつかの例では、ドメインが再分割される先である、より小さいオブジェクトが、三角形、ラインセグメント、または点に対応し得る。パス１ドメインおよびパス２ドメインは、テッセレータ５０がダッシングと、カスプと、キャップと、接合とをサポートするための動作、並びにグラフィカルフィーチャを示す情報を出力するための動作を行うべきであることを示し得る。いくつかの例では、ハルシェーダ４８が等値線テッセレーションドメインを指定して、テッセレータ５０が等値線ドメインをラインセグメントに再分割すべきであることを指定できる。
【００９７】
[0107]  本開示の技法によれば、ハルシェーダ４８は、上で説明したクワッド、トライ、および等値線とは異なる、「パス１」および「パス２」と呼ばれる２つの追加ドメインタイプのうちの１つを指定するように構成され得る。ハルシェーダ４８がパス１をドメインタイプとして指定する場合、テッセレータ５０は、ハルシェーダ４８から受け取ったテッセレーション係数を、セグメントテッセレータ係数と、スタートキャップテッセレータ係数と、接合テッセレータ係数と、エンドキャップテッセレータ係数とを含むとして分析できる。セグメントテッセレータ係数は、テッセレータ５０がドメイン座標を判断すべき、受け取ったプリミティブに関するラインセグメントの数を示すことが可能である。スタートキャップテッセレーション係数およびエンドキャップテッセレーション係数は、これに関してテッセレータ５０がドメイン座標を生成すべき、スタートキャップセグメントまたはエンドキャップセグメントの数を示すことが可能である。同様に、接合テッセレーション係数は、２つのラインセグメント相互間のドメイン座標接合を判断するときに、これに関してテッセレータ５０がドメイン座標を生成すべき、サブセグメントの数を示すことが可能である。
【００９８】
[0108]  ハルシェーダ４８からのドメインタイプが、そのドメインがパス２のものであることを示す場合、ハルシェーダ４８は、入力をジオメトリシェーダ５４から、例えば、（ＧＰＵキャッシュ１４内またはメモリ１０内の）ストリームアウト（streamout）バッファから受け取る。この入力に基づいて、ハルシェーダ４８は、第２のテッセレーションパス内で使用されることになるテッセレーションユニット５０のためのテッセレーション係数を生成する。この第２のパスは、パス１のドメインタイプで指定された第１のパス内で、テッセレータ５０によって生成されたテッセレーション係数を受け取る。しかしながら、テッセレータ５０は、ハルシェーダ４８から受け取ったテッセレーション係数をパス１ドメインタイプに関して上で説明されたものとは異なって分析する。ハルシェーダ４８がパス２のドメインタイプを指定するときに、テッセレータ５０は、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ（inverse length）値と、プリミティブタイプ値とを含むものとして、ハルシェーダ４８から受け取ったテッセレーション係数を分析する。
【００９９】
[0109]  上で説明したように、ラインセグメントの各終点は、関連する終点法線を有する。２つの接続されたラインセグメントの終点法線が最大角偏差を超える場合、テッセレータ５０は、サブセグメントに対応する追加ドメイン座標を判断できる。追加ドメイン座標と関連付けられた終点法線は、レンダリングされるときに、場合により、より平滑な外観を有する曲線を作り出すことができる、より小さな角偏差を有する。ハルシェーダ４８は、最大角偏差を状態として維持して、その最大角偏差から、テッセレータ５０が、追加のドメイン座標を判断するためにテッセレーションデルタ値とともに使用するテッセレーション係数を判断する。
【０１００】
[0110]  ラインセグメントがテッセレーションデルタ値を超える長さを有する場合、テッセレータ５０は、ＧＰＵパイプライン４０の後段(later stages)、例えば、ドメインシェーダ５２がサブセグメントの各々に関する起点および終点を判断するために使用するテッセレーションデルタ値未満の長さを有するサブセグメントに対応するドメイン座標を判断する。追加ドメイン座標は、一般に、追加サブセグメントの起点および終点に関する頂点に対応する。テッセレータ５０は、ドメイン座標に対応する終点の各々に関する新しい法線ベクトルを判断することも可能である。ドメイン座標と終点法線とを判断するために、テッセレータ５０は、以下においてより詳細に説明される線形補間を行い得る。
【０１０１】
[0111]  ドメインタイプがパス２として指定されるときに、テッセレータ５０は、１つまたは複数のグラフィックスコマンドによって指定されたダッシングパターンに従って、ドメイン座標を判断できる。テッセレータ５０は、受け取ったラインセグメントにダッシングパターンをどのように適用するかを判断するときに、セグメント値と逆セグメント長さ値とを利用する。ダッシングパターンがテッセレータ５０によって処理されている制御点が「オン」であること、すなわち、そのセグメントがレンダリングされるべきであることを示す場合、テッセレータ５０は、レンダリングされるべきラインセグメントの頂点に対応する座標を判断する。ダッシングパターンに従って、ラインセグメントが「オフ」である場合、テッセレータ５０はそのラインセグメントを破棄できる。ラインセグメントを破棄するときに、テッセレータ５０は、後続段が「オフ」ラインセグメントに関する頂点座標を判断しないように、そのラインセグメントに関するドメイン座標を判断または出力しない。
【０１０２】
[0112]  パス２ドメイン下で動作するときに、テッセレータ５０は、ドメインがスタートキャップもしくはエンドキャップに対応するか、接合に対応するか、またはラインセグメントに対応するかなど、グラフィカルフィーチャを示す情報をやはり受け取る。ダッシングの場合、その情報が、ドメインがスタートキャップまたはエンドキャップであることを示す場合、テッセレータ５０は、そのキャップに関する複数の追加ドメイン座標を判断しなくてよい。しかしながら、ダッシングパターンの状態が現在のドメインが「オフ」であることを示す場合、テッセレータ５０は、そのラインセグメントと関連付けられたスタートキャップおよび／またはエンドキャップを破棄できる。
【０１０３】
[0113]  テッセレータ５０がパス１ドメインタイプ上またはパス２ドメインタイプ上で動作する場合、テッセレータ５０は、スタートキャップまたはエンドキャップに関する頂点に対応するドメイン座標を生成できる。スタートキャップまたはエンドキャップのドメイン座標を生成するために、テッセレータ５０は、パス１ドメインタイプの場合、受け取られ、またはパス２ドメインタイプの場合、状態として記憶されるスタートキャップテッセレーション係数およびエンドキャップテッセレーション係数に基づいて、ドメイン座標を線形補間する。スタートキャップおよびエンドキャップに関するドメイン座標を判断した後、テッセレータ５０は、ドメイン座標を出力でき、ドメイン座標のうちの少なくとも１つがスタートキャップタイプまたはエンドキャップタイプのものであることを示す情報を出力することもできる。
【０１０４】
[0114]  テッセレータ５０は、テッセレーション段６２によって処理される各パスセグメントに関する複数の出力値も生成できる。出力値は、特定のタイプのパスセグメントを表す１つまたは複数のパラメータ式がドメインシェーダ５２によって評価されるべき値を判断できる。いくつかの例では、テッセレータ５０が、ハルシェーダ４８によってテッセレータ５０に提供された１つもしくは複数のテッセレーション係数および／またはテッセレーションドメインに基づいて、複数の出力値を生成できる。例えば、テッセレータ５０は、等値線を複数のラインセグメントに再分割して、正規化された座標系内の複数のラインセグメントの各終点に関する出力値を生成できる。
【０１０５】
[0115]  ドメインシェーダ５２は、複数のドメイン座標と、１つまたは複数のグラフィカルフィーチャを示す情報とをテッセレータ５０から受け取り、パスセグメントに関する複数の制御点と、複数のテッセレーション係数と、後続のプリミティブに関する開始法線とをハルシェーダ４８から受け取ることができる。これらの入力に基づいて、ドメインシェーダ５２は、複数の出力頂点座標と、これら座標によって表された頂点に対応する終点法線と、その頂点と関連付けられたグラフィカルフィーチャの表示とを生成する。上で説明したように、グラフィカルフィーチャの表示は、その頂点がスタートキャップもしくはエンドキャップ、ラインセグメント、または接合の一部であることを示すことができる。例えば、テッセレータ５０から受け取られた各出力値に関して、ドメインシェーダ５２は、ＧＰＵ１２のシェーダユニット上でドメインシェーダプログラムのインスタンスを実行できる。ドメインシェーダプログラムは、ドメインシェーダ５２に、テッセレータ５０から受け取った特定の値に基づいて判断された特定の値で１つまたは複数のパラメータ式を評価させて、これら評価、並びに各頂点座標と関連付けられたグラフィカルフィーチャに基づいて、出力頂点に関する座標を生成させることができる。出力頂点座標を生成するために使用されるパラメータ式の係数のうちの１つまたは複数は、ハルシェーダ４８から受け取った制御点のうちの１つまたは複数に基づいて定義され得る。各出力頂点は、複数のテッセレートされたラインセグメントのうちの１つの終点に対応し得る。２つの連続する出力頂点は、単一のテッセレートされたラインセグメントの終点に対応し得る。追加の例では、ドメインシェーダプログラムが、ドメインシェーダ５２に、各出力頂点に関する正規座標を生成するために、テッセレータ５０から受け取った特定の値に基づいて判断された特定の値で、１つまたは複数の追加パラメータ式を評価させることができる。
【０１０６】
[0116]  ドメインシェーダ５２は、隣接する頂点の各セットがテッセレートされたラインセグメントを表す、順序付けられた順番で頂点を出力できる。ラインセグメントは、頂点バッファ内で定義されたパスセグメントを集合的に近似できる。例えば、ドメインシェーダ５２は、以下のラインセグメント｛０，１｝、｛１，２｝、｛２，３｝、｛３，４｝、｛４，５｝を定義する頂点の以下のセット｛０，１，２，３，４，５｝を出力できる。追加の例では、ドメインシェーダ５２が、前の例で列挙されたものと同じラインセグメントを定義し得る頂点の以下のセット｛０，１，１，２，２，３，３，４，４，５｝を出力できる。
【０１０７】
[0117]  いくつかの例では、テッセレータ５０およびドメインシェーダ５２が、以下の技法に従って、パスセグメントを複数のラインセグメントに均一にテッセレートするように構成され得る。具体的には、テッセレータ５０は、パラメータ評価のための座標を出力できる（例えば、ｔ＝０／Ｔ、１／Ｔ、２／Ｔ．．．Ｔ／Ｔ、式中、Ｔはテッセレーション係数である）。プリミティブのタイプに応じて、ドメインシェーダ５２は、テッセレータ５０によって出力された値で１つまたは複数のパラメータ式を評価できる。
【０１０８】
[0118]  いくつかの例では、線の場合、Ｔが常に１に等しくてよい。このような例では、ドメインシェーダ５２が、ラインパスセグメントに対応する頂点を生成するために何か評価を行うことが必ずしも必要でない。
【０１０９】
[0119]  ３次ベジェ曲線の場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
【数７】
0006013606.tif 000008
【０１１０】
式中、ｔは、テッセレータ５０によって提供された出力値に対応し、Ｖ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力頂点に対応し、Ｃ０、Ｃ１、Ｃ２、Ｃ３は、３次ベジェ曲線に関する制御点に対応する。
【０１１１】
[0120]  あるいは、３次ベジェ曲線の場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
【数８】
0006013606.tif 000009
【数９】
0006013606.tif 000010
【０１１２】
式中、ｔは、テッセレータ５０によって提供された出力値に対応し、ｘ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力頂点のｘ座標に対応し、ｙ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力頂点のｙ座標に対応し、（Ｘ０，Ｙ０）、（Ｘ１，Ｙ１）、（Ｘ２，Ｙ２）、（Ｘ３，Ｙ３）は、３次ベジェ曲線に関する制御点に対応する。
【０１１３】
[0121]  ２次ベジェ曲線の場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
【数１０】
0006013606.tif 000011
【０１１４】
式中、ｔは、テッセレータ５０によって提供された出力値に対応し、Ｖ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力頂点に対応し、Ｃ０、Ｃ１、Ｃ２は、２次ベジェ曲線に関する制御点に対応する。
【０１１５】
[0122]  あるいは、２次ベジェ曲線の場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
【数１１】
0006013606.tif 000012
【数１２】
0006013606.tif 000013
【０１１６】
式中、ｔは、テッセレータ５０によって提供された出力値に対応し、ｘ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力頂点のｘ座標に対応し、ｙ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力頂点のｙ座標に対応し、（Ｘ０，Ｙ０）、（Ｘ１，Ｙ１）、（Ｘ２，Ｙ２）は、２次ベジェ曲線に関する制御点に対応する。
【０１１７】
[0123]  楕円弧パスセグメントの場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
【数１３】
0006013606.tif 000014
【数１４】
0006013606.tif 000015
【０１１８】
式中、パラメータ表示角度ａｎｇｌｅtは、テッセレータ出力ｔから判断され、ｘは、特定のパラメータ表示角度（すなわち、ａｎｇｌｅt）に関して生成された出力頂点のｘ座標に対応し、ｙは、パラメータ表示角度（すなわち、ａｎｇｌｅt）に関して生成された出力頂点のｙ座標に対応し、ｒｈは、非回転楕円の横半径を表し、ｒｖは、非回転楕円の縦半径を表し、ｒｖＣｏｓ、ｒｖＳｉｎ、ｒｈＣｏｓ、およびｒｈＳｉｎは、それぞれ、ｒｖ＊Ｃｏｓ（角度）、ｒｖ＊Ｓｉｎ（角度）、ｒｈ＊Ｃｏｓ（角度）、およびｒｈ＊Ｓｉｎ（角度）を表し、角度は、（ｒｈ，ｒｖ）によるスケーリングに先立って測定されたｘ軸に対する楕円の反時計回り角度を表す。いくつかの例では、ハルシェーダ４８が、ｃｏｓ（角度）とｓｉｎ（角度）とを判断（例えば、事前計算）し、かつ／またはｒｖＣｏｓ値と、ｒｖＳｉｎ値と、ｒｈＣｏｓ値と、ｒｈＳｉｎ値とを判断（例えば、事前計算）して、楕円弧に関する、上で具陳したパラメータ式を評価する際に使用するために、これらの値をドメインシェーダ５２に提供するように構成され得る。
【０１１９】
[0124]  楕円弧に関して上で議論したように、パッチ制御リスト内の頂点は、いくつかの例で、楕円弧に関する終点パラメータ表示を示すデータを含み得る。このような例では、ハルシェーダ４８（例えば、ＧＰＵ１２のシェーダユニット上で実行するハルシェーダプログラム）が、楕円弧の終点パラメータ表示を示すデータを楕円弧の中心パラメータ表示を示すデータに変換するために使用され得る。
【０１２０】
[0125]  楕円弧の終点パラメータ表示を楕円弧の中心パラメータ表示に変換するときに、楕円の正確な中心を見出すための例示的な技法が次に説明される。例示的な技法は、パラメータのセット（ｘ０，ｙ０）、（ｘ１，ｙ１）、ｒｈ、ｒｖ、φ、ｆs、およびｆAによって定義される楕円の終点表現に基づいて、楕円並びに／または楕円弧の中心点（ｃｘ，ｃｙ）と、初期角度並びに最終角度θ１およびθ２とを判断できる。中心点（ｃｘ，ｃｙ）と、半径ｒｈおよびｒｖと、回転角ｒｏｔとを有する楕円は、陰方程式（ｘ’）2＋（ｙ’）2＝１を満たすことができ、式中、ｘ’＝（（ｘ−ｃｘ）*ｃｏｓ（ｒｏｔ）＋（ｙ−ｃｙ）*ｓｉｎ（ｒｏｔ））／ｒｈおよびｙ’＝（−（ｘ−ｃｘ）*ｓｉｎ（ｒｏｔ）＋（ｙ−ｃｙ）*ｃｏｓ（ｒｏｔ））／ｒｖである。（ｘ，ｙ）から（ｘ’、ｙ’）への変換は、所望の楕円を、起点を中心とする単位円にマッピングする。
【０１２１】
[0126]  共通半径と、２つの所与の点（ｘ0，ｙ0）および（ｘ1，ｙ1）を通過する回転角とを有する楕円の対の中心点を判断するために、平面はまず、各楕円の式が（ｘ’−ｃｘ’）2＋（ｙ’−ｃｙ’）2＝１になるように、適切にスケーリングおよび回転された座標系に変換される。次いで、その外周が２つの所与の点を通過する２つの単位円の中心（すなわち、（ｃｘ0’，ｃｙ0’）および（ｃｘ1’，ｃｙ1’））が見出され得る。最終的に、元の座標系の解決策を取得するために、中心点は逆変換によって配置される。
【０１２２】
[0127]  点（ｘ0，ｙ0）および（ｘ1，ｙ1）を通過する２つの単位円の中心点は
【数１５】
0006013606.tif 000016
【０１２３】
によって与えられ、式中、ｘm＝（ｘ0＋ｘ1）／２，ｙm＝（ｙ0＋ｙ1）／２，Δｘ＝（ｘ0−ｘ1），Δｙ＝（ｙ0−ｙ1）、およびｄ＝√（１／（Δｘ2＋Δｙ2）−１／４）である。ｄが無限または虚である場合、入力点は、それぞれ、一致しているか、または離れすぎているため、解決策は存在しない。角度θ１およびθ２は、円上の終点の傾斜を見出して、逆正接関数を計算することによって見出され得る。
【０１２４】
[0128]  以下の疑似コードは、上述の技法に従って、楕円中心を計算するプロセスを示す。元の楕円パラメータの逆変換に続いて、ｆｉｎｄＵｎｉｔＣｉｒｃｌｅｓ関数がｆｉｎｄＥｌｌｉｐｓｅｓによって呼び出される。
【数１６】
0006013606.tif 000017
【０１２５】
[0129]  楕円弧の終点パラメータ表示を楕円弧の中心パラメータ表示に変換することに関するさらなる詳細は、その内容全体が参照により本明細書に組み込まれている、ｈｔｔｐ：／／ｗｗｗ．ｋｈｒｏｎｏｓ．ｏｒｇ／ｒｅｇｉｓｔｒｙ／ｖｇ／ｓｐｅｃｓ／ｏｐｅｎｖｇ−１．１ｐｄｆで入手可能な「ＯｐｅｎＶＧ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、Ｖｅｒｓｉｏｎ１．１」、第１８．４項、２００８年１２月３日に見出され得る。
【０１２６】
[0130]  ジオメトリシェーダ５４は、テッセレートされた複数のラインセグメントをドメインシェーダ５２から受け取って、これらテッセレートされたラインセグメントに基づいて、複数の三角形プリミティブを生成できる。例えば、テッセレートされたラインセグメントの各々に関して、ジオメトリシェーダ５４は、ＧＰＵ１２のシェーダユニット上でジオメトリシェーダプログラムのインスタンスを実行して、該当するテッセレートされたラインセグメントに基づいて、テッセレートされたラインセグメントに関する三角形プリミティブを生成できる。いくつかの例では、テッセレートされたラインセグメントの各々に関して、ジオメトリシェーダ５４が、該当するテッセレートされたラインセグメントに対応する２つの頂点をドメインシェーダ５２から受け取って、三角形プリミティブに対応する３つの頂点のセットを生成できる。
【０１２７】
[0131]  いくつかの例では、三角形プリミティブの頂点のうちの２つが、２つの受け取った頂点と同じ頂点であり得る（例えば、同じ位置座標を有し得る）。このような例では、ジオメトリシェーダ５４が、レンダリングされることになるパスセグメントと関連付けられた全てのテッセレートされたラインセグメントに共通である共通の頂点に基づいて、第３の頂点を生成できる。共通の頂点は、テッセレートされたラインセグメントの終点のうちの１つに対応してよく、または対応しなくてもよい。いくつかの例では、共通の頂点が、レンダリングされることになるパスセグメントに関する、テッセレートされた複数のラインセグメントに対応する複数の頂点のセット内の第１の頂点に対応し得る。いくつかの例では、ジオメトリシェーダ５４が、本開示の技法に従って、複数の追加テッセレーション係数をテッセレータ５０およびリテッセレーション／ダッシングユニット５１に出力するように構成されることも可能である。
【０１２８】
[0132]  ジオメトリシェーダ５４は、ドメインシェーダ５２によって作り出された、テッセレートされたラインセグメントの各々に関して一回度起動され得る。テッセレートされたラインセグメントの各々に関して、ジオメトリシェーダ５４は、三角形の第１の頂点として共通の制御点を使用し、かつ三角形の第２の頂点および第３の頂点として、該当するテッセレートされたラインセグメントの２つの終点を使用して、三角形プリミティブを生成できる。例えば、ドメインシェーダ５２が、以下のラインセグメント｛０，１｝、｛１，２｝、｛２，３｝、｛３，４｝、｛４，５｝を定義する、以下の頂点のセット｛０，１，２，３，４，５｝を生成した例が上で提供された。上記の一連のラインセグメントの場合、ジオメトリシェーダ５４は、以下の三角形、｛Ｃ，０，１｝、｛Ｃ，１，２｝、｛Ｃ，２，３｝、｛Ｃ，３，４｝、｛Ｃ，４，５｝、｛Ｃ，４，５｝を生成でき、式中、Ｃは三角形のすべてに共通する任意の単一の頂点である。
【０１２９】
[0133]  いくつかの例では、ジオメトリシェーダ５４が、出力データをリソースブロック４２に「ストリームアウトする」ように構成されることも可能である。グラフィックスパイプライン４０は、いくつかの例で、本開示の技法に従って第２のテッセレーションパスを実行するために、ストリームアウトされたデータをハルシェーダ４８とドメインシェーダ５２とに送信し戻すことができる。第２のテッセレーションパスは、パス２ドメインタイプ上で動作し得る。
【０１３０】
[0134]  ラスタライザ５６は、複数の３Ｄグラフィックスプリミティブ（例えば、点、線、および三角形）をこれら３Ｄグラフィックスプリミティブに対応する複数の画素に変換するように構成され得る。例えば、ラスタライザ５６は、三角形プリミティブに対応する３つの頂点を受け取って、これら３つの頂点を、その三角形プリミティブによってカバーされたスクリーン画素位置に対応する複数の画素に変換できる。三角形プリミティブによってカバーされたスクリーン画素位置は、三角形の頂点、三角形の縁、および三角形の内部に対応するスクリーン画素位置を含み得る。
【０１３１】
[0135]  ピクセルシェーダ５８は、画素をラスタライザ５６から受け取って、ピクセルシェーダプログラムに従って、受け取った画素に基づいて、影付き画素を生成できる。例えば、ラスタライザ５６から受け取った各画素に関して、ピクセルシェーダ５８は、ＧＰＵ１２のシェーダユニット上でピクセルシェーダプログラムのインスタンスを実行できる。
【０１３２】
[0136]  さらなる例では、ピクセルシェーダ５８が、入力画素のうちの該当する１つの入力画素の入力属性と同一でない、出力画素に関する１つまたは複数の出力属性を生成できる。例えば、ピクセルシェーダ５８は、出力画素に関する１つまたは複数の属性を生成するために、入力画素の属性のうちの１つまたは複数に関して実質的な処理を実行できる。別の例として、ピクセルシェーダ５８は、出力画素に関する出力属性のセットを生成するために、入力属性のセットから属性を追加および／または削除できる。
【０１３３】
[0137]  出力統合器６０は、ピクセルシェーダ５８から受け取った画素データをレンダターゲット（例えば、フレームバッファまたはステンシルバッファ）内に配置できる。いくつかの例では、出力マージャ６０が、ピクセルシェーダ５８から受け取った画素データをラスタ演算に基づいてレンダターゲット内にすでに記憶されている画素データと併合できる。
【０１３４】
[0138]  ドメインシェーダ５２が頂点に関する位置座標を生成するためのパラメータ式を評価することに加えて、ドメインシェーダ５２は、ストローク動作の間、頂点に関する法線、例えば、接線を生成することも可能である。法線を生成するために、ドメインシェーダ５２は、テッセレータ５０によって生成された値の各々に関する追加パラメータ式を評価して、各評価に関して１つまたは複数の法線を出力できる。場合により、法線は、ドメインシェーダ５２によって出力された頂点の属性として出力され得る。例えば、ストローク動作の場合、ドメインシェーダ５２によって作り出された出力頂点は、頂点の位置を示す１つもしくは複数の属性と、頂点と関連付けられた法線または接線を示す１つもしくは複数の属性と、頂点と関連付けられたグラフィカルフィーチャを示す情報とを含み得る。法線属性は、テッセレータ５０によって生成されたパラメータ値に対応するパスセグメント上の点に関する法線ベクトルを示すことが可能である。ラインセグメントの場合、法線は、ラインセグメントの終点と起点との間のベクトル差（例えば、（Ｘ１−Ｘ０，Ｙ１−Ｙ０））をとることによって取得され得る。
【０１３５】
[0139]  湾曲したパスセグメント（例えば、ベジェ曲線および楕円弧）に関する法線を生成するために、湾曲したパスセグメントに関する接線公式が使用され得る。一般に、（法線を判断するために使用され得る）曲線および楕円弧に関する接線公式は、曲線および弧に関する頂点を生成することに関して上で説明したパラメータ方式の派生物である。
【０１３６】
[0140]  例えば、３次ベジェ曲線の場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線の出力頂点に関する法線を生成できる。
【数１７】
0006013606.tif 000018
【０１３７】
式中、ｔは、テッセレータ５０によって提供された出力値に対応し、Ｎ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力法線に対応し、Ｃ０、Ｃ１、Ｃ２、Ｃ３は、３次ベジェ曲線に関する制御点に対応する。２次ベジェ曲線に関する法線を生成するために、上で提供した２次ベジェ曲線に関するパラメータ式の派生物が同じように使用され得る。
【０１３８】
[0141]  あるいは、３次ベジェ曲線の場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線の出力頂点に関する法線を生成できる。
【数１８】
0006013606.tif 000019
【数１９】
0006013606.tif 000020
【０１３９】
式中、ｔは、テッセレータ５０によって提供された出力値に対応し、ｘ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力法線のｘ座標に対応し、ｙ（ｔ）は、特定の出力値（すなわち、ｔ）に関して生成された出力法線のｙ座標に対応し、（Ｘ０，Ｙ０）、（Ｘ１，Ｙ１）、（Ｘ２，Ｙ２）、（Ｘ３，Ｙ３）は、３次ベジェ曲線に関する制御点に対応する。２次ベジェ曲線に関する法線を生成するために、上で提供した２次ベジェ曲線に関するパラメータ式の派生物が同じように使用され得る。
【０１４０】
[0142]  楕円弧パスセグメントの場合、ドメインシェーダ５２は、以下のパラメータ式に従って、曲線の出力頂点に関する法線を生成できる。
【数２０】
0006013606.tif 000021
【数２１】
0006013606.tif 000022
【０１４１】
式中、パラメータ表示角度、ａｎｇｌｅtは、テッセレータ出力（すなわち、ｔ）から判断され、Ｔａｎxは、特定のパラメータ表示角度（すなわち、ａｎｇｌｅt）に関して生成された出力法線のｘ座標に対応し、Ｔａｎyは、パラメータ表示角度（すなわち、ａｎｇｌｅt）に関して生成された出力法線のｙ座標に対応し、ｒｈは、非回転楕円の横半径を表し、ｒｖは、非回転楕円の縦半径を表し、ｒｖＣｏｓ、ｒｖＳｉｎ、ｒｈＣｏｓ、およびｒｈＳｉｎは、それぞれ、ｒｖ＊Ｃｏｓ（角度）、ｒｖ＊Ｓｉｎ（角度）、ｒｈ＊Ｃｏｓ（角度）、およびｒｈ＊Ｓｉｎ（角度）を表し、角度は、（ｒｈ，ｒｖ）によるスケーリングに先立って測定されたｘ軸に対する楕円の反時計回り角度を表す。いくつかの例では、ハルシェーダ４８が、ｃｏｓ（角度）とｓｉｎ（角度）とを判断（例えば、事前計算）し、かつ／またはｒｖＣｏｓ値と、ｒｖＳｉｎ値と、ｒｈＣｏｓ値と、ｒｈＳｉｎ値とを判断（例えば、事前計算）して、楕円に関して上で具陳したパラメータ式を評価する際に使用するために、これらの値をドメインシェーダ５２に提供するように構成され得る。
【０１４２】
[0143]  接線を見出した後、以下の式に従って、法線ベクトルが見出され得る。
【数２２】
0006013606.tif 000023
【０１４３】
式中、ｎｏｒｍａｌは、（Ｔａｎx，Ｔａｎy）ベクトルに関する正規化ベクトルに対応し、ｎｏｒｍａｌｉｚｅ（ｘ，ｙ）は、入力ベクトル（ｘ，ｙ）の正規化バージョンを生成する関数である。ベクトル（ｘ，ｙ）の正規化バージョンは、１のベクトル（ｘ，ｙ）および長さ（例えば、ｎｏｒｍ）と同じ方向を有するベクトルと指す場合がある。
【０１４４】
[0144]  楕円弧に関して上で議論したように、パッチ制御リスト内の頂点は、いくつかの例で、終点パラメータ表示を示すデータを含み得る。このような例では、ハルシェーダ４８が、楕円弧の終点パラメータ表示を示すデータを楕円弧の中心パラメータ表示を示すデータに変換できる。
【０１４５】
[0145]  図４Ａ〜図４Ｂは、本開示の技法による、受け取ったプリミティブをテッセレートすることを示す概念図である。図４Ａは、上で説明したように、ベジェ曲線などの曲線８０Ａ、または式によって定義された別のタイプの曲線を示す。本開示の技法によれば、ＧＰＵ１２、具体的には、テッセレーション段６２は、曲線８０Ａを複数のラインセグメントに分割できる。各ラインセグメントは、起点および終点によって定義される。
【０１４６】
[0146]  図４Ｂは、本開示の技法による、曲線８０を複数のラインセグメントにテッセレートした曲線結果を示す。上述のように、ハルシェーダ４８は、テッセレータが入力として受け取ることができるテッセレーション係数を判断できる。テッセレータ５０は、受け取ったプリミティブ、この例で、曲線８０Ａに関する複数のドメイン座標を判断するために、入力として受け取ったテッセレーション係数を使用できる。
【０１４７】
[0147]  いくつかの例では、テッセレーション係数が、プリミティブが分割されるラインセグメントの数を定義できる。図４Ｂの例では、曲線８０Ａが、ラインセグメント８２Ａ〜８２Ｇとして示される、７つのラインセグメントに分割されている。受け取ったラインセグメントテッセレーション係数に基づいて、テッセレーション係数は、図４Ｂに示された７つのラインセグメントに関するドメイン座標を判断する。
【０１４８】
[0148]  テッセレータ５０は、ｕ−ｖ座標系でラインセグメント８２Ａ〜８２Ｇに関するドメイン座標を判断する。ラインセグメントは、起点および終点Ａ0〜Ａ7を有する。一般に、ｕ−ｖ座標系は、ｕ軸およびｖ軸の両方に関して［０．．．１」から正規化される。ｕ座標はｕ軸に沿った水平位置を示すことができ、ｖ座標はｖ軸に沿った垂直位置を示すことができる。しかしながら、図４Ｂに示すように、テッセレータ５０が曲線をサブセグメントに分割するために曲線に関するドメイン座標を判断する場合、テッセレータ５０は、各ラインセグメントの起点および終点に関するｕ座標だけを計算する。ドメインシェーダ５２など、グラフィックスパイプライン４０の後段は、曲線８２Ａに沿って存在するラインセグメントと関連付けられた任意の垂直オフセットを判断できる。
【０１４９】
[0149]  上述のように、ｕ−ｖ座標系はゼロから１の値をとる。従って、第１のラインセグメントの起点Ａ0は、常にゼロのｕ座標を有し、最後のラインセグメントの終点、この例では、Ａ7が、常に１のｕ座標を有する。曲線８２Ａに沿って各ｕ座標を判断するために、テッセレータ５０は、判断されたラインセグメントの数に基づいて、各ｕ座標を線形補間する。図４Ｂの例では、Ａ1が、1／7（．１４２８５．．．）のｕ座標値を有し、第３の線点Ａ2は、2／7（．２８５７１４．．．）のｕ座標値を有する、等々である。いくつかの例では、テッセレータ５０が、ラインセグメントの起点に続いて、ラインセグメントの終点を出力できる。テッセレータ５０は、次いで、後続のラインセグメントの起点を出力する。
【０１５０】
[0150]  曲線８０Ａのラインセグメントの各々に沿った起点および終点の各々に関するドメイン座標、すなわち、ｕ座標およびｖ座標を判断することに加えて、テッセレータ５０は、判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力することもできる。１つのラインセグメントの終点ｕ座標がそのラインセグメントの起点ｕ座標と同じ図４Ｂの例では、同じｕ座標が２回、すなわち、前のラインセグメントの終点に対応して１回、後続のラインセグメントの起点に対応して１回出力される。
【０１５１】
[0151]  図５Ａ〜図５Ｂは、本開示の技法による、ラインセグメントのリテッセレーションを示す概念図である。図５に関して上で説明したように、テッセレータ５０は、いくつかの例で、リテッセレーションを実行できる。図５に示す第１のパス内で、テッセレータ５０はパスをラインセグメントに分割できる。しかしながら、いくつかの隣接する（すなわち、接続された）ラインセグメントの終点法線は、互いに対するある最大角偏差を超える場合がある。ハルシェーダ４８は、受け取ったプリミティブに関する角偏差と最大各偏差とを判断できる。ハルシェーダ４８は、角偏差を最大角偏差で除算することによって、プリミティブに関するテッセレーション係数を判断して、その結果を最も近い整数に丸める。ハルシェーダ４８は、次いで、ハルシェーダ４８がテッセレータ５０に出力するテッセレーションデルタ（ｔｅｓｓＤｅｌｔａ）の値を判断するために、プリミティブの元のラインセグメントの長さをテッセレーション係数で分割する。
【０１５２】
[0152]  第２のパス内で、すなわち、パス２ドメインタイプ上で動作するときに、テッセレータ５０は、ハルシェーダ４８が出力するテッセレーションデルタ値を含むテッセレーション係数を受け取ることができる。入力セグメントが受け取ったテッセレーションデルタ値を超える長さを有する場合、テッセレータ５０は、５Ａのセグメントをサブセグメントに分割、すなわち、「切断」することによって、追加のｕ−ｖ座標を判断できる。
【０１５３】
[0153]  分割プロセスの一環として、テッセレータ５０は、サブセグメントに関する新しいｕおよびｖの起点と終点とを判断する。各サブセグメントのｕ座標およびｖ座標を判断するために、テッセレータ５０は、図４Ａおよび図４Ｂに関して上で説明したものと同じ線形補間技法を利用する。具体的には、テッセレータ５０は、テッセレーションデルタ値に基づいて、テッセレーション係数を判断して、そのテッセレーション係数に基づいて、ｕ座標値を線形補間する。図５Ａおよび図５Ｂの例では、テッセレータ５０が、図５Ａのセグメントに関して、テッセレータ５０が図５Ａのセグメントを３つのサブセグメントに分割すべきであることを示す、３のテッセレーション係数を判断する。テッセレータ５０は、次いで、３つのラインセグメントの各々の終点に関するｕ座標を判断および出力する。図５Ｂの例では、４つの終点ドメイン座標の判断されたｕ−ｖ座標が、（０，０）、（．３３３，０）、（．６６６，０）、および（１，０）である。テッセレータ５０は、新しいサブセグメントの終点に関する新しい法線をやはり判断する。サブセグメントに関する新しい法線は、２つの最内矢印によって示される。
【０１５４】
[0154]  テッセレータ５０がこれらサブセグメントに関する複数のドメイン座標を判断および出力すると、ドメインシェーダ５２は、これらドメイン座標と、ハルシェーダ４８からの制御点データと、判断されたドメイン座標と関連付けられたグラフィカルフィーチャを示す情報とに基づいて、サブセグメントの起点および終点に関する頂点座標を判断する。この場合、グラフィカルフィーチャを示す情報は、ドメイン座標が、起点または終点ではなく、ラインセグメントと関連付けられることを示すことができる。
【０１５５】
[0155]  図６Ａ〜図６Ｃは、本開示の技法による、ラインセグメントをリテッセレートすることと、ラインセグメントにダッシングを適用することとを示す概念図である。図６Ａは、最大角偏差を超える可能性がある終点法線を有するラインセグメント１００を示す。図５Ａ〜図５Ｂに関して上で説明したように、ハルシェーダ４８は、最大角偏差を判断して、テッセレータ５０が入力として受け取るテッセレーションデルタを出力できる。元のセグメントの長さがテッセレーションデルタ値を超える場合、テッセレータ５０は複数の追加サブセグメントに対応する複数の追加ドメイン座標を判断する。ドメインシェーダ５２は、これらサブセグメントの頂点座標を判断できる。ラインセグメント１００をサブセグメントに分離することは、曲線を備え得る、レンダリングされたサブセグメントの外観を改善し得る。
【０１５６】
[0156]  図５Ａおよび図５Ｂに関して説明したプロセスとは異なり、図６Ｂの例では、テッセレータ５０が、パス２ドメイン上、すなわち、第２のテッセレーションパス内で動作するときに、テッセレーションデルタ値を超えるサブセグメントに関するドメイン座標を判断する。図６Ａ〜図６Ｃの例では、テッセレータ５０が、ダッシングパターンに基づいて、図６Ａのセグメントのサブセグメントに関するドメイン座標を判断する。ダッシングパターンによって「オフ」として示されたセグメントに関して、テッセレータ５０は、ドメイン座標を判断せず、任意のドメイン座標をグラフィックスパイプライン４０内の後段に出力しない。ダッシングパターンによって「オン」として示されたセグメントに関して、テッセレータ５０は、図５Ａ〜図５Ｂに関して上で説明した技法に従って、起点ドメイン座標と終点ドメイン座標とを判断する。
【０１５７】
[0157]  図６Ｂの例では、テッセレータ５０が、ダッシングパターンが、セグメントの現在の位置がオンであることを示すか、またはオフであることを示すかを判断する。テッセレータ５０は、いくつかの例で、ダッシングパターンを状態として維持できる。現在のセグメントがオンである場合、テッセレータ５０は、ラインセグメントの起点および終点に関するドメイン座標を判断できる。ダッシングパターンが現在のラインセグメントがオフであることを示す場合、テッセレータ５０は、「オフ」ラインセグメントを破棄、すなわち、切断でき、切断されたラインセグメントの起点および終点に関するドメイン座標を判断しない。
【０１５８】
[0158]  ラインセグメントを切断するときに、テッセレータ５０は、そのラインセグメントと関連付けられたスタートキャップおよびエンドキャップ、または接合を切断することもできる。しかしながら、ダッシングパターンまたは他の状態情報は、前の「オン」セグメントが、テッセレータ５０がオフセグメントを切断する間に削除したスタートキャップまたはエンドキャップを有すべきであることを示すことができる。従って、本開示の技法によれば、テッセレータ５０は、スタートキャップまたはエンドキャップを必要とするラインセグメントに関してスタートキャップまたはエンドキャップに関するドメイン座標を判断できる。ラインセグメントに関するスタートキャップまたはエンドキャップを判断するプロセスは、図１２および図１３Ａ〜図１３Ｄに関してより詳細に説明される。
【０１５９】
[0159]  図６Ａ〜図６Ｃの例に戻ると、テッセレータ５０は、ダッシングパターンに基づいて、サブセグメント１０２および１０４に関するドメイン座標を判断する。テッセレータ５０は、ダッシングパターンがセグメント１００の一部は「オフ」であることを示すため、セグメント１００の一部が切断されるべきであることをやはり判断する。テッセレータ５０は、図５Ａ〜図５Ｂに関して説明した線形補間プロセスと類似して、ダッシングパターンに基づいて、サブセグメントの各々に関するｕ座標を判断する。テッセレータ５０が図６Ａのセグメントを、相互間にギャップまたは切断を有する２つのサブセグメントに分割すると、ハルシェーダ４８は、ラインセグメントの終点法線相互間の角偏差が最大角偏差を超えるかどうかを判断できる。終点法線が最大角偏差を超える場合、テッセレータ５０は、追加サブセグメントの終点に対応する追加ドメイン座標を作成できる。図５Ａ〜図５Ｂに関して上で説明したように、終点法線が判断された最大角偏差を超える場合、テッセレータ５０は、図６Ｃに示すように、テッセレーションデルタ入力パラメータ以下の長さを有するラインサブセグメントに関するドメイン座標を判断できる。図６Ｃで、テッセレータ５０は、より短い発散終点法線（divergent endpoint normals）を有する２つのセグメントを作成するために、第１のセグメント（切断の左側）を長さテッセレーションデルタ（length tessellation delta）で再分割する。
【０１６０】
[0160]  図７Ａ〜図７Ｃは、本開示の１つまたは複数の技法による、ダッシングを適用することを示す概念図である。図７Ａは、いくつかのダッシングパターンを示す。ダッシングパターンは、ＧＰＵ２０がレンダリングできる、いくつかの「オン」ラインセグメントと、ＧＰＵ２０がレンダリングできない、いくつかの「オフ」ラインセグメントとから構成され得る。ダッシングパターンのオンセグメントおよびオフセグメントは、図７Ａに示すように、可変長を有しである得る。図７Ｂは、テッセレータ５０がドメインシェーダ５２とジオメトリシェーダ５４とに出力できる別の例示的なダッシングパターンを示す。図７Ｂのダッシング例は、テッセレータ５０がエンドキャップまたはダッシングを適用しないことを示すために、適用しているエンドキャップを有していない。図７Ｃは、ジオメトリシェーダ５４がエンドキャップを「オン」ラインセグメントに適用した後の図７Ｂのダッシングパターンを示す。
【０１６１】
[0161]  次に、接合をレンダリングするための技法が説明される。接合は、異なるパスセグメントが接触する場所に適用され得る。いくつかの例では、３つの異なるタイプの接合、すなわち、（１）ベベルと、（２）マイターと、（３）ラウンドとが存在し得る。いくつかの例では、レンダリングされることになるタイプの接合が、ＧＰＵ１２内のバッファ（例えば、パッチ定数バッファ）内に記憶されることが可能であり、ＣＰＵ６は、接合のタイプを示す値をバッファ内に配置することによって、レンダリングのために使用する接合のタイプを示すことができる。
【０１６２】
[0162]  接合は、２つのパスセグメントが接触する場所に形成され得る。接合をレンダリングするために、ＣＰＵ６は、ＧＰＵ１２によって消費するために、２つのパスセグメントが接触する位置を示すデータと、その位置の２つの接線（すなわち、各パスセグメントに関して１つの接線）を示すデータとをバッファ（例えば、パスデータ３６内の頂点バッファ）内に配置できる。
【０１６３】
[0163]  いくつかの例では、接合に関する入力パスデータが、以下の形または類似の形をとることができる。
【数２３】
0006013606.tif 000024
【０１６４】
この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。具体的には、この例で、パスタイプインジケータは、パスセグメントが接合パスセグメントであることを意味する５．０ｆである。接合パスセグメントのタイプ（例えば、べベル、マイター、またはラウンド）は、ＧＰＵ１２のバッファ（例えば、パッチ定数バッファ）内に記憶された値によって示されることが可能である。この例で、ｐｏｓ．ｘおよびｐｏｓ．ｙは、２つのパスセグメントが接触する位置すなわち場所に対応する（ｘ，ｙ）座標であり、ｔａｎ０．ｘおよびｔａｎ０．ｙは、２つのパスセグメントが接触する位置すなわち場所におけるこれら２つのパスセグメントの第１のパスセグメントに関する法線ベクトルに対応する（ｘ，ｙ）座標であり、ｔａｎ１．ｘおよびｔａｎ１．ｙは、２つのパスセグメントが接触する位置すなわち場所におけるこれら２つのパスセグメントの第２のパスセグメントに関する法線ベクトルに対応する（ｘ，ｙ）座標である。いくつかの例では、ＣＰＵ６が、２つのパスセグメントのうちの１つまたは両方を示すデータに基づいて、法線ベクトルに関する座標を判断できる。この例では、残りの頂点および属性が、接合に関する他の属性を示すために使用されなくよく、かつ／または使用されてもよい。
【０１６５】
[0164]  いくつかの例では、接合をレンダリングするために、ハルシェーダ４８が、接合に対応する法線ベクトル｛（ｔａｎ０．ｘ，ｔａｎ０．ｙ）および（ｔａｎ１．ｘ，ｔａｎ１．ｙ）｝をデカルト座標から角座標に変換できる。さらなる例では、ハルシェーダ４８が、デカルト座標から角座標に変換するのに先立って、接合に対応する法線ベクトル｛（ｔａｎ０．ｘ，ｔａｎ０．ｙ）および（ｔａｎ１．ｘ，ｔａｎ１．ｙ）｝を正規化できる。追加の例では、ハルシェーダ４８が、法線ベクトルに関する角座標をハルシェーダ４８によって受け取られたパッチ制御リストの１つまたは複数の属性内に配置して、さらなる処理のために、変形パッチ制御リストをドメインシェーダ５２に渡すことができる。
【０１６６】
[0165]  １つの特定の例として、接合に関してハルシェーダ４８によって受け取られた入力パッチ制御リストは次のようであり得る。
【数２４】
0006013606.tif 000025
【０１６７】
この例では、ハルシェーダ４８が、各接線に関する角座標（すなわち、法線ベクトル）を生成して、各接線に関して、角座標を該当する接線に対応する制御点の第３の属性内に配置できる。結果として生じるパッチ制御リストは、いくつかの例では、以下の形式をとることができる。
【数２５】
0006013606.tif 000026
【０１６８】
[0166]  いくつかの例では、ハルシェーダ４８が、接線を正規化するために、以下の疑似コードおよび／またはシェーダプログラムコードを実装して、接線に関するデカルト座標を角座標に変換できる。
【数２６】
0006013606.tif 000027
【０１６９】
[0167]  図８は、例示的なベベル接合(bevel join)を示す概念図である。ベベル接合の場合、ＧＰＵ１２は、ベベル領域（例えば、図８に示す軽い影付き三角形）に空間的に対応する、１つまたは複数の三角形をレンダリングできる。図８に示すように、点ｃは、２つのパスセグメントが接触するパスセグメントの終点に対応し得、ｕ０およびｌ０は、その終点（すなわち、ｃ）に関する第１のパスセグメントに基づいて生成された端点（corner point）に対応し得、ｕ１およびｌ１は、その終点（すなわち、ｃ）に関する第２のパスセグメントに基づいて生成された端点に対応し得る。
【０１７０】
[0168]  いくつかの例では、ドメインシェーダ５２が、パッチ制御リストをハルシェーダ４８から受け取って、頂点をジオメトリシェーダ５４に提供できる。頂点は、２つのパスセグメントが接触する共通の終点（すなわち、点ｃ）を示す１つまたは複数の属性と、共通の終点におけるパスセグメントの各々に関する法線を示す１つまたは複数の属性と、パスレンダリングプリミティブのタイプ（例えば、この場合、接合）を示す１つまたは複数の属性とを含み得る。
【０１７１】
[0169]  図９は、例示的なマイター接合(miter join)を示す概念図である。マイター接合の場合、ＧＰＵ１２は、マイター領域に空間的に対応する１つまたは複数の三角形をレンダリングできる。マイター接合に関してレンダリングされた三角形のうちの１つは、図８に関して上で説明したベベル接合に関してレンダリングされた三角形に類似し得る。しかしながら、マイター接合は、ベベル接合と比較して追加の三角形を有し得る。
【０１７２】
[0170]  図９に示すように、点ｃは、２つのパスセグメントが接触するパスセグメントの終点に対応し得、ｕ０およびｌ０は、その終点（すなわち、ｃ）に関する第１のパスセグメントに基づいて生成された端点に対応し得、ｕ１およびｌ１は、終点（すなわち、ｃ）に関する第２のパスセグメントに基づいて生成された端点に対応し得る図８に関して上で説明したべベル接合に類似して、ドメインシェーダ５２は、パッチ制御リストをハルシェーダ４８から受け取って、頂点をジオメトリシェーダ５４に提供できる。頂点は、２つのパスセグメントが接触する共通の終点（すなわち、点ｃ）を示す１つまたは複数の属性と、共通の終点におけるパスセグメントの各々に関する法線を示す１つまたは複数の属性と、パスレンダリングプリミティブのタイプ（例えば、この場合、接合）を示す１つまたは複数の属性とを含み得る。
【０１７３】
[0171]  図１０は、例示的なラウンド接合(round join)を示す概念図である。図１０に示すように、点ｃは、２つのパスセグメントが接触するパスセグメントの終点に対応し得、ｕ０およびｌ０は、その終点（すなわち、ｃ）に関する第１のパスセグメントに基づいて生成された端点に対応し得、ｕ１およびｌ１は、その終点（すなわち、ｃ）に関する第２のパスセグメントに基づいて生成された端点に対応し得る。本明細書で説明するのは、ラウンド接合のＧＰＵアクセラレーテッドレンダリングを実現するためにテッセレーション段６２を利用する技法である。
【０１７４】
[0172]  本開示の技法によればによれば、グラフィックスパイプライン４０は、ラウンド接合領域に関して、各々が関連する法線方向を有する複数の頂点を生成するために、テッセレーション段６２を使用できる。各頂点は、接合領域の該当するスライスに対応し得、この場合、各スライスは共通の終点（すなわち、ｃ）と、ラウンド接合の湾曲した縁に沿った２つの該当する点とによって定義される。スライスを近似するために、テッセレータ５０は、接合の曲率スライスを近似するためにスライスと関連付けられたラウンド接合の縁に沿った頂点に対応するドメイン座標を判断できる。このような例では、接合をレンダリングするために、ドメインシェーダ５２が、ともに接合の集約領域を近似し得る、スライス近似値の各々に関するドメイン座標に基づいて、スライス近似値の各々に関する頂点座標を判断できる。
【０１７５】
[0173]  ラウンド接合に関するスライス近似値を生成するために、テッセレータ５０は、後続のラインセグメントの起点の法線を判断できる。上で説明したように、テッセレータ５０は、これに関してテッセレータ５０がドメイン（ｕ−ｖ）座標を判断するセグメントの数を示す接合テッセレーション係数を受け取る。接合は、常に、テッセレータ５０が接合している現在のセグメントの終点において発生するため、接合と関連付けられたドメイン座標の各々に関するｕ座標は、常に１に等しい。
【０１７６】
[0174]  ドメイン座標の各々のｖ座標を判断するために、テッセレータ５０は、接合と関連付けられた第１のドメイン座標の開始ｖ座標がゼロであり、接合と関連付けられた最後のｖ座標が１であり、これらの２つの点相互間のドメイン座標（すなわち、頂点）に対応する全ての他のｖ座標値が均等に分布されたｖ座標を有するように、テッセレーション係数に基づいて、ｖ座標値の各々を線形補間する。一例として、「３」の接合テッセレーション係数を有する接合の場合、テッセレータ５０は、３つのスライスに対応するｕ−ｖ座標を出力できる。各スライスは、（ｐｏｓ＋ｎｏｒｍａｌと呼ばれる）法線方向を有する頂点に対応し得る。図１０の例では、頂点の各々が、同じ位置を有し得るが、異なる法線を有し得る。異なる法線は、これら頂点と関連付けられた、テッセレータ５０によって出力された異なるｕ−ｖ座標によって示されることが可能である。第１の座標対はｕ−ｖ座標（１，０）を有し、例えば、図１０の点ｌ０に対応する。最後のドメイン座標対は、ｕ−ｖ座標（１，１）を有し、整合の最後のラインセグメント、例えば、図１０のｌ１に対応する。他の２つの頂点は、ｕ−ｖ座標（１、．３３）および（１，．６６）を有する。異なる接合テッセレーション係数によって異なる数のスライスが指定される場合、ラインセグメントの各々の終点に関するｕ−ｖ座標は異なり得るが、ｖ軸上でゼロから１に依然として線形に分布される。
【０１７７】
[0175]  ラインセグメントの各々に関するドメイン座標を判断することに加えて、テッセレータ５０は、接合の判断ドメイン座標のうちの１つまたは複数に関するのグラフィカルフィーチャを示す情報をやはり判断する。この例で、グラフィカルフィーチャを示す情報は、ドメイン座標が接合と関連付けられることを示すことができる。後続段、例えば、ドメインシェーダ５２は、接合に関する頂点座標を判断するために、ドメイン座標、並びに、ドメイン座標が接合と関連付けられることを示す関連情報を分析できる。頂点座標を判断した後、グラフィックスパイプライン４０の後続段が接合をレンダリングできる。
【０１７８】
[0176]  次に、「エンドキャップ」と呼ばれるスタートキャップおよびエンドキャップをレンダリングするための技法が説明される。エンドキャップは、複数のパスセグメントから形成されるパスの始端および／または終端に適用され得る。いくつかの例では、２つの異なるタイプのエンドキャップ、すなわち、（１）方形キャップおよび（２）円形キャップが存在し得る。いくつかの例では、レンダリングされることになるタイプのエンドキャップが、ＧＰＵ１２内のバッファ（例えば、パッチ定数バッファ）内に記憶されることが可能であり、ＣＰＵ６は、エンドキャップのタイプを示す値をバッファ内に配置することによって、レンダリングのために使用するエンドキャップのタイプを示すことができる。
【０１７９】
[0177]  エンドキャップは、パスの始端または終端に対応する、パスセグメントの始端または終端において形成される。エンドキャップをレンダリングするために、ＣＰＵ６は、ＧＰＵ１２によって消費するために、エンドキャップの位置（例えば、パスセグメントの終点）を示すデータと、その位置における接線を示すデータとをバッファ（例えば、パスデータ３６内の頂点バッファ）内に配置できる。
【０１８０】
[0178]  いくつかの例では、エンドキャップに関する入力パスデータが、以下の形または類似の形をとることができる。
【数２７】
0006013606.tif 000028
【０１８１】
この例では、各行が４つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第１の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ（すなわち、「パスタイプインジケータ」）を記憶する。具体的には、パスタイプインジケータは、この例で、パスセグメントがエンドキャップパスセグメントであることを意味する６．０ｆである。エンドキャップパスセグメントのタイプ（例えば、方形または円形）は、ＧＰＵ１２のバッファ（例えば、パッチ定数バッファ）内に記憶された値によって示されることが可能である。この例で、ｐｏｓ．ｘおよびｐｏｓ．ｙは、エンドキャップが形成される位置すなわち場所（例えば、パスセグメントの終点）に対応する（ｘ，ｙ）座標であり、ｔａｎ．ｘおよびｔａｎ．ｙは、エンドキャップが形成される位置すなわち場所に関する法線ベクトルに対応する（ｘ，ｙ）座標である。いくつかの例では、ＣＰＵ６が、エンドキャップが形成されるパスセグメントを示すデータに基づいて、法線ベクトルに関する座標を判断できる。この例では、残りの頂点および属性が、キャップに関する他の属性を示すために使用されなくよく、かつ／または使用されてもよい。
【０１８２】
[0179]  いくつかの例では、エンドキャップをレンダリングするために、ハルシェーダ４８は、エンドキャップに対応する法線ベクトル（ｔａｎ．ｘ，ｔａｎ．ｙ）をデカルト座標から角座標に変換できる。さらなる例では、ハルシェーダ４８が、デカルト座標から角座標に変換するのに先立って、エンドキャップに対応する法線ベクトル（ｔａｎ．ｘ，ｔａｎ．ｙ）を正規化できる。追加の例では、ハルシェーダ４８が、法線ベクトルに関する角座標をハルシェーダ４８によって受け取られたパッチ制御リストの１つまたは複数の属性内に配置して、さらなる処理のために、変形パッチ制御リストをドメインシェーダ５２に渡すことができる。いくつかの例では、ハルシェーダ４８が、接線を正規化するために、かつ／もしくは接線に関するデカルト座標を角座標に変換するために、接合に関して上で議論した疑似コードおよび／またはシェーダプログラムコードを実装できる。
【０１８３】
[0180]  １つの特定の例として、エンドキャップに関してハルシェーダ４８によって受け取られた入力パッチ制御リストは次のようであり得る。
【数２８】
0006013606.tif 000029
【０１８４】
この例では、ハルシェーダ４８が、接線に関する角座標（すなわち、法線ベクトル）を生成して、その角座標をその接線を含む制御点の第３の属性内に配置できる。結果として生じるパッチ制御リストは、いくつかの例で、以下の形式をとることができる。
【数２９】
0006013606.tif 000030
【０１８５】
[0181]  図１１は、例示的な方形キャップ(square cap)を示す概念図である。方形キャップの場合、ＧＰＵ１２は、キャップ領域（例えば、図１１に示す軽い影付き長方形）に空間的に対応する、１つまたは複数の三角形をレンダリングできる。図１１に示すように、点ｃは、パスセグメントの終点に対応し得、ｕおよびｌは、キャップが形成されるパスセグメントの終点（すなわち、ｃ）に基づいて生成された端点に対応し得る。
【０１８６】
[0182]  いくつかの例では、ドメインシェーダ５２が、パッチ制御リストをハルシェーダ４８から受け取って、頂点をジオメトリシェーダ５４に提供できる。頂点は、キャップが形成されるパスセグメントの終点（すなわち、点ｃ）を示す１つまたは複数の属性と、その終点（すなわち、点ｃ）におけるパスセグメントに関する法線を示す１つまたは複数の属性と、パスレンダリングプリミティブのタイプ（例えば、この場合、キャップ）を示す１つまたは複数の属性とを含み得る。
【０１８７】
[0183]  ジオメトリシェーダ５４は、いくつかの例で、頂点をドメインシェーダ５２から受け取って、本開示で説明する式のうちの１つまたは複数に基づいて、頂点に関する端点（ｕ、ｌ）を判断できる。ジオメトリシェーダ５４は、以下の式に従って、ベクトルｖを判断できる。
【数３０】
0006013606.tif 000031
【０１８８】
式中、ｕおよびｌは、パスセグメントの終点に関するストローク領域の端点に対応する。
【０１８９】
[0184]  ジオメトリシェーダ５４は、以下の式に従って、ベクトルｎを見出すために、９０度だけベクトルｖを回転できる。
【数３１】
0006013606.tif 000032
【０１９０】
式中、ａ＝（ｘ，ｙ）は、ベクトルａのｘ成分およびｙ成分を示し、式中、ｖ．ｙは、ベクトルｖのｙ成分に対応し、式中、ｖ．ｘは、ベクトルｖのｘ成分に対応する。
【０１９１】
[0185]  ジオメトリシェーダ５４は、以下の式に従って、スターティングキャップまたはエンディングキャップに関する新しい点（例えば、頂点）を判断できる。
【数３２】
0006013606.tif 000033
【数３３】
0006013606.tif 000034
【０１９２】
式中、ｎｕおよびｎｌは、キャップに関する新しい端点であり、ｕおよびｌは、パスセグメントの終点に関するストローク領域の端点に対応する。
【０１９３】
[0186]  ジオメトリシェーダ５４は、方形キャップ領域に空間的に対応する方形キャップをレンダリングするための１つまたは複数の三角形を生成できる。例えば、ジオメトリシェーダ５４は、方形キャップ領域に空間的に対応する２つの三角形（例えば、（ｕ，ｌ，ｎｕ）および（ｎｕ，ｌ，ｎｌ））を生成できる。グラフィックスパイプライン４０は、方形キャップ領域に関してジオメトリシェーダ５４によって生成された１つまたは複数の三角形をレンダリングできる。１つまたは三角形がレンダリングされると、レンダターゲット（例えば、フレームバッファ）は、方形キャップに関するストローク領域のラスタライズされたバージョンを記憶できる。
【０１９４】
[0187]  本開示の技法によるいくつかの例では、ＧＰＵ１２が、方形キャップの頂点座標を判断するためにテッセレーティング段６２を利用できる。ハルシェーダ４８は、スタートキャップテッセレーション係数および／またはエンドキャップテッセレーション係数をテッセレータ５０に出力できる。エンドキャップおよび接合はラインセグメントの終点上に共存することはできないため、非ゼロエンドキャップテッセレーション係数は非ゼロ接合テッセレーション係数と相互排他的である。スタートキャップテッセレーション係数またはエンドキャップテッセレーション係数は１に等しい値を有し得、これは、テッセレータに元の頂点位置と、ラインセグメントの終点と関連付けられた法線とを有するが、方形スタートキャップまたはエンドキャップと関連付けられるドメイン座標を保存および出力させる。
【０１９５】
[0188]  図１２は、例示的な円形キャップ(round cap)を示す概念図である。図１２に示すように、点ｃは、パスセグメントの終点に対応し得、ｕおよびｌは、キャップが形成されるパスセグメントの終点（すなわち、ｃ）に基づいて生成された端点に対応し得る。ＧＰＵ１２は、円形接合をレンダリングするために上で説明した技法のうちのいずれかに類似した形式で円形キャップをレンダリングできる。
【０１９６】
[0189]  本開示の技法によれば、ＧＰＵ１２は、円形キャップの頂点座標を判断するためにテッセレーティング段６２を利用できる。ハルシェーダ４８は、スタートキャップテッセレーション係数および／またはエンドキャップテッセレーション係数をテッセレータ５０に出力できる。エンドキャップおよび接合はラインセグメントの終点上に共存することはできないため、非ゼロエンドキャップテッセレーション係数は非ゼロ接合テッセレーション係数と相互排他的である。
【０１９７】
[0190]  上で接合に関して図１０で説明したように、テッセレータ５０は、線形に分布され、かつ円形キャップのスライス近似値に対応するｕ−ｖ座標を判断するテッセレータ５０は、受け取った接合テッセレーション係数に基づいてドメイン座標を出力する。キャップがスタートキャップである場合、テッセレータ５０が出力するドメイン座標の全てのｕ座標はゼロに等しい。キャップがスタートキャップである場合、テッセレータ５０が出力する全てのドメイン座標のｕ座標は１に等しい。キャップが４つのスライスに分割されるべきであることを示し、５つのラインセグメントに対応する座標を有する、４のスタートキャップテッセレーション係数を仮定すると、接合に関してテッセレータ５０が判断および出力するｕーｖ座標は、（１，０）、（１，．２５）、（１，．５）、（１，．７５）、および（１，１）である。ドメイン座標を判断することに加えて、テッセレータ５０は、グラフィカルフィーチャ、この場合、スタートキャップまたはエンドキャップを示す情報をやはり判断する。ドメインシェーダ５２は、ドメイン座標と、スタートキャップまたはエンドキャップの一部であるとしてドメイン座標を関連付ける情報とを受け取って、ドメイン座標の各々に関する頂点座標を判断する。
【０１９８】
[0191]  図１３Ａ〜図１３Ｄは、本開示の１つまたは複数の技法による、キャップおよび接合を適用することを示す概念図である。図１３Ａ〜図１３Ｂは、テッセレータ５０を使用してキャップをレンダリングするための技法を示す。図１３Ａで、ラインセグメントは２つのサブセグメントに分割されている。サブセグメントのうちの１つは、例えば、上で説明したように、１つまたは複数の頂点パラメータに基づいて、テッセレータ５０がエンドキャップを適用する終点法線８０を有する。いくつかの例では、頂点パラメータが、ＯｐｅｎＶＧレンダリングコマンドに従って指定され得る。
【０１９９】
[0192]  図１３Ａ〜図１３Ｂに示す円形エンドキャップ(round endcap)の場合、テッセレータ５０は、入力としてエンドキャップテッセレーション係数を受け取って、ラインセグメントの終端を再分割する三角形の数を判断するために、そのテッセレーション係数を使用する。テッセレータ５０は、次いで、法線１４０の中心点を径方向に囲む座標を判断することによって、ラインセグメントの終端を三角形に分割する。この分割の出力は、いくつかのｕドメイン座標およびｖドメイン座標である。ｕ座標は、一般に、回転の中心に対応し得、ｖ座標は、一般に、法線１４０の中心（ｕ座標）の周囲を径方向に回転する点に対応し得る。上で説明したように、スタートキャップと関連付けられたドメイン座標は、ゼロに等しいｕ座標を有し得、エンドキャップと関連付けられたドメイン座標は、１に等しいｕ座標を有し得る。テッセレータ５０がエンドキャップに関するｕ座標とｖ座標とを判断した後、ドメインシェーダ５２は、円形エンドキャップの中心に対するｕ座標値とｖ座標値とに従って、頂点座標を計算できる。中心点１４０は、エンドキャップが適用されることになる、ラインセグメントの終点に対応する。一般に、ｕ座標値は［０，１]から変動する可能性がある。しかしながら、テッセレータがパス２ドメイン上で動作する場合、スタートキャップのｖ座標は［０，．５]から変動する可能性があり、エンドキャップに関するｖ座標は［．５，１］から変動する可能性がある。パス２ドメイン上で動作するときのｖ座標値の範囲の限定は、ドメインシェーダ５２が、テッセレータ５０から出力されたドメイン座標がスタートキャップに関するか、またはエンドキャップに関するかを判断するのを可能にする。パス２ドメイン上で動作するときに、ドメインシェーダ５２は、ｖ座標が範囲［０，．５］内にある場合、テッセレータ５０によって出力されたドメイン座標がスタートキャップと関連付けられ、ｖ座標が範囲［．５，１］内にある場合、テッセレータ５０によって出力されたドメイン座標がエンドキャップと関連付けられると推論する。
【０２００】
[0193]  図１３Ｃ〜図１３Ｄは、図１３Ａ〜図１３Ｂで示した技法に基づいて、円形接合(round join)を適用するための技法を示す。１３Ｃの例で、２つのラインセグメントは、円形接合を使用して接合される必要がある終点を有し得る。接合されることになる領域はコールアウト（callout）１４２によって示される。図１３Ｃのラインセグメントに関する円形接合を生成するために、テッセレータ５０は、中心点のｕ座標を判断し、中心、すなわち、ｕ座標の周囲を径方向に回転する点に対応するいくつかのｖ座標を判断する、図１３Ａ〜図１３Ｂに示したプロセスに類似したプロセスを実行できる。テッセレータ５０は、次いで、ｕ座標とｖ座標とに基づいて頂点場所を計算するドメインシェーダ５４にｕ座標とｖ座標とを出力する。
【０２０１】
[0194]  図１４Ａ〜図１４Ｂは、本開示の技法による、ラインセグメント(line segment)のカスプ(cusps)のリテッセレーションを示す概念図である。図１４Ａは、その交差点に「カスプ」を有する２つのラインセグメントを示す。カスプは２つのラインセグメントの間の交差として定義され、この場合、２つのラインセグメントの接線は最大角度閾値を超えるか、または、この場合、交差点における接線は未定義である。
【０２０２】
[0195]  本開示の技法によれば、テッセレータ５０は、カスプを有する交差点におけるパスを平滑化するために、図１３Ａ〜図１３Ｄに関して上で説明した円形リテッセレーションなど、リテッセレーションを実行できる。図１４Ｂは、２つのラインセグメントの交差点において円形リテッセレーションを実行した結果を示す。
【０２０３】
[0196]  カスプ処理を実行するために、テッセレーション段６２は、図５Ａ〜図５Ｂ、および図６Ａ〜図６Ｂに関して上で説明した技法と類似した技法を実行できる。すなわち、テッセレータ５０は、ラインセグメントの最大長を判断するために使用される、テッセレーションデルタ値と呼ばれるテッセレーション係数を受け取ることができる。ハルシェーダ４８は、プリミティブの終点法線の角偏差と、最大角偏差値とに基づいて、テッセレーションデルタ値を判断する。入力されたセグメントの長さがテッセレーションデルタ値を超える場合、テッセレータ５０は、テッセレーションデルタ未満の長さを有するサブセグメントに対応するドメイン座標を判断する。
【０２０４】
[0197]  テッセレータ５０は、これらサブセグメントが、キャップまたは接合ではなく、ラインセグメントの一部であることを示す情報とともに、サブセグメントに対応するドメイン座標をドメインシェーダ５２に出力する。ドメイン座標と、サブセグメントのドメイン座標がラインセグメントグラフィカルフィーチャと関連付けられていることを示す情報とに基づいて、ドメインシェーダ５２は、これらサブセグメントに関する頂点座標を判断する。レンダリングされるときに、サブセグメントは、図１４Ｂに示すように、最終的にレンダリングされた曲線に平滑度または曲率を追加できる。
【０２０５】
[0198]  図１５は、本開示によるＧＰＵアクセラレーテッドパスレンダリングを実行するための例示的な技法を示す。図１５に示す技法は、例示のために、図１＆図２に示したＧＰＵ１２によって、図３に示したグラフィカルパイプライン４０を用いて実行されるとして説明される。他の例では、図１５に示す技法が、同じ構成要素または異なる構成要素を同じ構成もしくは異なる構成で有する他のシステム内で実装され得る。
【０２０６】
[0199]  図１５は、本開示によるＧＰＵアクセラレーテッドパスレンダリングを実行するための例示的な技法を示す流れ図である。単なる例示のために、図３のテッセレータ５０など、テッセレーションユニットは、図１５に示す技法を実行できる。図１５のプロセスで、テッセレータ５０は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断する（１６０）。テッセレータ５０は、これら頂点に関する判断されたドメイン座標を出力する（１６２）。テッセレータ５０は、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断する（１６４）。ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないときに、テッセレータ５０は、次いで、判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力する（１６６）。
【０２０７】
[0200]  グラフィカルフィーチャを示す情報を出力するために、テッセレータ５０は、テッセレーション係数に基づいて、グラフィカルフィーチャを示す情報を出力できる。いくつかの例で、グラフィカル表現を示す情報は、グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える。
【０２０８】
[0201]  図１６は、本開示によるＧＰＵアクセラレーテッドパスレンダリングを実行するための例示的な技法を示す流れ図である。いくつかの例では、テッセレータ５０が、テッセレーション係数を受け取ることができる。テッセレーション係数を分析するために、テッセレータ５０は、第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取ることができる（１８０）。ドメインタイプが第１のタイプ（決定ブロック１８２の「はい」分岐）であるときに、テッセレータ５０は、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取ることができる（１８４）。この場合、テッセレータ５０は、ラインセグメントの終点法線を判断して、テッセレーションユニットを用いて、ラインセグメントの終点法線と、スタートキャップに関するテッセレーション係数またはエンドキャップに関するテッセレーション係数とに基づいて、スタートキャップまたはエンドキャップのｕ座標とｖ座標の対を線形補間することによって、受け取ったプリミティブの頂点に関するドメイン座標を判断できる。
【０２０９】
[0202]  ドメインタイプが第２のタイプ（決定ブロック１８２の「いいえ」分岐）であるときに、テッセレータ５０がテッセレーション係数を受信することは、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取ること（１８６）を備え得る。この場合、複数のドメイン座標を判断するために、テッセレータ５０は、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とに基づいて、複数の追加ドメイン座標を判断して、これら判断された追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断できる。テッセレータ５０は、これら判断された追加ドメイン座標を出力して、この１つまたは複数の判断された追加ドメイン座標と関連付けられたグラフィカルフィーチャを示す判断された情報を出力することがさらに可能である。
【０２１０】
[0203]  さらにいくつかの他の例では、テッセレータ５０が、ダッシングパターンに基づいて、ドメイン座標を判断でき、ダッシングパターンは、状態としてテッセレータ５０内に記憶され得る。本開示の技法によるさらに別の例として、テッセレータ５０は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断された複数のドメイン座標を出力して、グラフィカルフィーチャを示す情報を第１のパス内で出力できる。テッセレータ５０は、第１のパス内でテッセレーションユニットによって出力されたテッセレーション係数を受け取って、第２のパス内で、第１のパス内で受け取ったテッセレーション係数に基づいて、頂点に関する追加ドメイン座標を判断して、これら追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断して、これらの追加ドメイン座標を出力して、これら追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するようにさらに構成され得る。
【０２１１】
[0204]  いくつかの例では、本開示の技法がＤｉｒｅｃｔＸ  ＧＰＵ上でパスレンダリングを実行するために使用され得る。さらなる例では、本開示の技法が、ＯｐｅｎＶＧプラットフォーム上で実装および試験されることが可能であり、かつ／またはＯｐｅｎＶＧパスレンダリング標準に準拠することが可能である。追加の例では、本開示の技法が、ＤｉｒｅｃｔＸバージョン９．３、１１、および１１＋用のパスレンダリングに対するＧＰＵアクセラレーテッド解決策を提供し得る。ＤｉｒｅｃｔＸ  １１＋は、変形ＤｉｒｅｃｔＸ  １１アーキテクチャを指す場合がある。
【０２１２】
[0205]  いくつかの例では、パスが、例えば、線、楕円弧、２次ベジェ曲線、および３次ベジェ曲線であり得る、複数のパスセグメントを指す場合がある。パスは「クローズ」またはそうでない（すなわち、オープン）のいずれかであり得る。クローズパスは、最後の頂点が線を介して第１の頂点と接続するパスを指す場合があり、この場合、パスは閉鎖型を形成する。オープンパスは、最後の頂点が第１の頂点と接続されるとは限らないパスを指す場合がある。パスはそれ自体と複数回重複し得る。パスレンダリングは、２つの主なタスク、すなわち、フィルとストロークとに分割され得る。
【０２１３】
[0206]  本開示で説明する技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せで実装され得る。例えば、説明した技法の様々な態様は、１つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、あるいは任意の他の等価な集積回路またはディスクリート論理回路を含む、１つもしくは複数のプロセッサ内、並びにこのような構成要素の任意の組合せ内で実装され得る。「プロセッサ」または「処理回路」という用語は、一般に、単独で、あるいは他の論理回路または、処理を実行する個別ハードウェアなどの他の等価回路との組合せで上記の論理回路のいずれかを指し得る。
【０２１４】
[0207]  このようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明する様々な動作および機能をサポートするために、同じデバイス内で、または別のデバイス内で実装され得る。さらに、説明したユニット、モジュール、または構成要素のいずれも、個別であるが相互運用可能な論理デバイスとして、一緒に、または別々に実装され得る。モジュールまたはユニットとしての様々な機能の図は、様々な機能的態様を強調するものであり、このようなモジュールまたはユニットが別々のハードウェアまたはソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。そうではなく、１つもしくは複数のモジュールまたはユニットに関連する機能は、別々のハードウェア構成要素、ファームウェア構成要素、および／またはソフトウェア構成要素によって行われるたり、共通もしくは別々のハードウェア構成要素内またはソフトウェア構成要素内に組み込まれたりし得る。
【０２１５】
[0208]  また、本開示で説明する技法は、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体中に記憶、実施または符号化され得る。コンピュータ可読媒体中に埋め込まれるか、または符号化される命令は、例えば、それらの命令が１つまたは複数のプロセッサによって実行されたときに、１つまたは複数のプロセッサに本明細書で説明する技法を実行させ得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、プログラマブル読取り専用メモリ（ＰＲＯＭ）、消去可能プログラマブル読取り専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、カセット、磁気媒体、光学媒体、または他の有形のコンピュータ可読記憶媒体を含み得る。
【０２１６】
[0209]  コンピュータ可読媒体は、上記に記載した有形記憶媒体などの有形記憶媒体に対応するコンピュータ可読記憶媒体を含み得る。コンピュータ可読媒体はまた、例えば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を備え得る。このようにして、「コンピュータ可読媒体」という句は、概して、（１）非一時的である有形コンピュータ可読記憶媒体、および（２）一時的な信号または搬送波などの非有形コンピュータ可読通信媒体に対応し得る。
【０２１７】
[0210]  様々な態様および例について説明した。しかしながら、以下の特許請求の範囲から逸脱することなく本開示の構造または技法に変更を行うことができる。
以下に本願の当初の特許請求の範囲に記載された発明を付記する。
[Ｃ１]  グラフィックス処理ユニット（ＧＰＵ）のテッセレーションユニットを用いて、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、
前記テッセレーションユニットを用いて、前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断するステップと、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記テッセレーションユニットを用いて、前記判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力することと
を備える方法。
[Ｃ２]  前記テッセレーションユニットを用いて、複数のテッセレーション係数を受け取ることをさらに備え、
前記グラフィカルフィーチャを示す前記情報を出力することが、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力することを備える
Ｃ１に記載の方法。
[Ｃ３]  前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、Ｃ２に記載の方法。
[Ｃ４]  前記複数のテッセレーション係数を受け取ることが、
前記テッセレーションユニットを用いて、第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取ること、
前記ドメインタイプが第１のタイプであるときに、前記テッセレーションユニットを用いて、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取ることとをさらに含む、Ｃ２に記載の方法。
[Ｃ５]  前記方法が、
前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断することが、
前記テッセレーションユニットを用いて、ラインセグメントの終点法線を判断することと、
前記テッセレーションユニットを用いて、前記ラインセグメントの前記終点法線と、前記スタートキャップに関する前記テッセレーション係数または前記エンドキャップに関する前記テッセレーション係数とに基づいて、スタートキャップまたはエンドキャップのｕ座標とｖ座標の対を線形補間することと
をさらに備えることをさらに備える、Ｃ４に記載の方法。
[Ｃ６]  前記複数のテッセレーション係数を受け取ることが、
前記テッセレーションユニットを用いて、第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取ることをさらに備え、
前記ドメインタイプが前記第２のタイプであるときに、
前記複数のテッセレーション係数を受け取ることが、前記テッセレーションユニットを用いて、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取ることを備えるＣ２に記載の方法。
[Ｃ７]  前記複数のドメイン座標を判断することが、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断することとをさらに備え、前記方法が、
前記テッセレーションユニットを用いて、前記判断された複数の追加ドメイン座標を出力することと、
前記テッセレーションユニットを用いて、前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力することとをさらに備える、Ｃ６に記載の方法。
[Ｃ８]  前記複数のドメイン座標を判断することが、ダッシングパターンに基づいて前記複数のドメイン座標を判断することをさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、Ｃ１に記載の方法。
[Ｃ９]  受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断することと、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、前記グラフィカルフィーチャを示す前記情報を出力することとが第１のパス内で発生し、前記方法が、
前記テッセレーションユニットを用いて、前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取ることと、
第２のパス内で、前記テッセレーションユニットを用いて、前記第１のパス内で受け取られた前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断することと、
前記テッセレーションユニットを用いて、前記複数の追加ドメイン座標を出力することと、
前記テッセレーションを用いて、前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力することとをさらに備える、Ｃ１に記載の方法。
[Ｃ１０]  受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力して、
前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断して、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力する
ように構成されたテッセレーションユニットを備えるグラフィックス処理ユニット（ＧＰＵ）。
[Ｃ１１]  前記ＧＰＵが、
複数のテッセレーション係数を受け取るようにさらに構成され、
前記グラフィカルフィーチャを示す前記情報を出力するために、前記テッセレーションユニットが、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力するようにさらに構成される、Ｃ１０に記載のＧＰＵ。
[Ｃ１２]  前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、Ｃ１１に記載のＧＰＵ。
[Ｃ１３]  前記複数のテッセレーション係数を受け取るために、前記ＧＰＵが、
第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取り、
前記ドメインタイプが前記第１のタイプであるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取るようにさらに構成される、Ｃ１１に記載のＧＰＵ。
[Ｃ１４]  前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断するために、前記ＧＰＵが、
ラインセグメントの終点法線を判断して、
前記ラインセグメントの前記終点法線と、スタートキャップに関する前記テッセレーション係数またはエンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間するようにさらに構成される、Ｃ１３に記載のＧＰＵ。
[Ｃ１５]  前記複数のテッセレーション係数を受け取るために、前記ＧＰＵが、
第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取るようにさらに構成され、
前記ドメインタイプが前記第２のタイプであるときに、
前記複数のテッセレーション係数を受け取るために、前記ＧＰＵが、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取るように構成される、Ｃ１１に記載のＧＰＵ。
[Ｃ１６]  前記複数のドメイン座標を判断するために、前記ＧＰＵが、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さと、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断して、
前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断するようにさらに構成され、前記ＧＰＵが、
前記判断された複数の追加ドメイン座標を出力して、
前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力するようにさらに構成される、Ｃ１５に記載のＧＰＵ。
[Ｃ１７]  前記複数のドメイン座標を判断するために、前記ＧＰＵが、ダッシングパターンに基づいて前記複数のドメイン座標を判断するようにさらに構成され、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、Ｃ１０に記載のＧＰＵ。
[Ｃ１８]  受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断するために、前記ＧＰＵが、前記複数の頂点に関する前記判断された複数のドメイン座標を出力して、前記グラフィカルフィーチャ発生を示す前記情報を第１のパス内で出力するようにさらに構成され、ここにおいて、前記ＧＰＵが、
前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取って、
第２のパス内で、前記第１のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断して、
前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断して、
前記複数の追加ドメイン座標を出力して、
前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力するようにさらに構成される、Ｃ１０に記載のＧＰＵ。
[Ｃ１９]  受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断するための手段と、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力するための手段と、
前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断するための手段と、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記判断された複数のドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するための手段とを備える装置。
[Ｃ２０]  複数のテッセレーション係数を受け取るための手段をさらに備え、
前記グラフィカルフィーチャを示す前記情報を出力するための前記手段が、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力するための手段を備える、Ｃ１９に記載の装置。
[Ｃ２１]  前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、Ｃ２０に記載の装置。
[Ｃ２２]  前記複数のテッセレーション係数を受け取るための前記手段が、
第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取るための手段と、
前記ドメインタイプが前記第１のタイプであるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取るための手段とをさらに備える、Ｃ２０に記載の装置。
[Ｃ２３]  前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断するための前記手段が、
ラインセグメントの終点法線を判断するための手段と、
前記ラインセグメントの前記終点法線と、スタートキャップに関する前記テッセレーション係数またはエンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間するための手段とをさらに備える、Ｃ２２に記載の装置。
[Ｃ２４]  前記複数のテッセレーション係数を受け取るための前記手段が、
第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取るための手段と、
前記ドメインタイプが前記第２のタイプであるときに、
前記複数のテッセレーション係数を受け取るための前記手段が、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取るための手段を備える、Ｃ２０に記載の装置。
[Ｃ２５]  前記複数のドメイン座標を判断するための前記手段が、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断するための手段と、
前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断するための手段とをさらに備え、前記装置が、
前記判断された複数の追加ドメイン座標を出力するための手段と、
前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力するための手段とをさらに備える、Ｃ２４に記載の装置。
[Ｃ２６]  前記複数のドメイン座標を判断するための手段が、ダッシングパターンに基づいて前記複数のドメイン座標を判断するための手段をさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、Ｃ１９に記載の装置。
[Ｃ２７]  受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断するための前記手段と、前記複数の頂点に関する前記判断された複数のドメイン座標を出力するための前記手段と、前記グラフィカルフィーチャを示す前記情報を出力するための前記手段とが第１のパス内で発生し、前記装置が、
前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取るための手段と、
第２のパス内で、前記第１のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断するための手段と、
前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断するための手段と、
前記複数の追加ドメイン座標を出力するための手段と、
前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力するための手段とをさらに備える、Ｃ１９に記載の装置。
[Ｃ２８]  実行されたときに、１つまたは複数のプロセッサに、
受け取ったプリミティブの複数の頂点に関するドメイン座標を判断させて、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力させて、
前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの１つでないことを判断させて、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの１つでないときに、前記判断されたドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力させる命令を備える非一時的コンピュータ可読記憶媒体。
[Ｃ２９]  前記１つまたは複数のプロセッサに、
複数のテッセレーション係数を受け取らせ、
前記１つまたは複数のプロセッサに前記グラフィカルフィーチャを示す前記情報を出力させる前記命令が、１つまたは複数のプロセッサに、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力させる命令をさらに備える、Ｃ２８に記載の非一時的コンピュータ可読媒体。
[Ｃ３０]  前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの１つであることを示すデータを備える、Ｃ２９に記載の非一時コンピュータ可読媒体。
[Ｃ３１]  前記１つまたは複数のプロセッサに前記複数のテッセレーション係数を受け取らせる前記命令が、前記１つまたは複数のプロセッサに、
第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取らせ、
前記ドメインタイプが前記第１のタイプであるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取らせる命令をさらに備える、Ｃ２９に記載の非一時的コンピュータ可読媒体。
[Ｃ３２]  前記１つまたは複数のプロセッサに前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断させる前記命令が、前記１つまたは複数のプロセッサに、
ラインセグメントの終点法線を判断させて、
前記ラインセグメントの前記終点法線と、スタートキャップに関する前記テッセレーション係数またはエンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのｕ座標とｖ座標の対を線形補間させる命令をさらに備える、Ｃ３１に記載の非一時コンピュータ可読媒体。
[Ｃ３３]  前記１つまたは複数のプロセッサに前記複数のテッセレーション係数を受け取らせる前記命令前記ＧＰＵが前記１つまたは複数のプロセッサにさらに、
第１のタイプおよび第２のタイプのうちの１つであるドメインタイプの表示を受け取らせ、
前記ドメインタイプが前記第２のタイプであるときに、
前記１つまたは複数のプロセッサに前記複数のテッセレーション係数を受け取らせる前記命令が、前記１つまたは複数のプロセッサに、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフフィーチャを表す情報とを受け取らせる命令を備えるＣ２９に記載の非一時的コンピュータ可読媒体。
[Ｃ３４]  前記１つまたは複数のプロセッサに前記ドメイン座標を判断させる前記命令が、前記１つまたは複数のプロセッサに、
前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断させて、
前記判断された複数の追加ドメイン座標のうちの１つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断させる命令をさらに備え、前記１つまたは複数のプロセッサに、
前記判断された複数の追加ドメイン座標を出力させて、
前記１つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力させる命令をさらに備える、Ｃ３３に記載の非一時的コンピュータ可読媒体。
[Ｃ３５]  前記１つまたは複数のプロセッサに前記ドメイン座標を判断させる前記命令が、前記１つまたは複数のプロセッサに、ダッシングパターンに基づいて前記複数のドメイン座標を判断させる命令をさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、Ｃ２８に記載の非一時的コンピュータ可読媒体。
[Ｃ３６]  前記１つまたは複数のプロセッサに、受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断させる前記命令が、実行されたときに、前記１つまたは複数のプロセッサに、前記複数の頂点に関する前記判断された複数のドメイン座標を出力させて、前記グラフィカルフィーチャを示す前記情報を第１のパス内で出力させる命令をさらに備え、前記１つまたは複数のプロセッサに、
前記第１のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取らせて、
第２のパス内で、前記第１のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断させて、
前記複数の追加ドメイン座標のうちの１つまたは複数に関するグラフィカルフィーチャを示す情報を判断させて、
前記複数の追加ドメイン座標を出力させて、
前記複数の追加ドメイン座標のうちの１つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力させる命令をさらに備える、Ｃ２８に記載の非一時的コンピュータ可読媒体。
【図１】
0006013606.tif 000035
【図２】
0006013606.tif 000036
【図３】
0006013606.tif 000037
【図４Ａ】
0006013606.tif 000038
【図４Ｂ】
0006013606.tif 000039
【図５Ａ】
0006013606.tif 000040
【図５Ｂ】
0006013606.tif 000041
【図６Ａ】
0006013606.tif 000042
【図６Ｂ】
0006013606.tif 000043
【図６Ｃ】
0006013606.tif 000044
【図７Ａ】
0006013606.tif 000045
【図７Ｂ】
0006013606.tif 000046
【図７Ｃ】
0006013606.tif 000047
【図８】
0006013606.tif 000048
【図９】
0006013606.tif 000049
【図１０】
0006013606.tif 000050
【図１１】
0006013606.tif 000051
【図１２】
0006013606.tif 000052
【図１３Ａ】
0006013606.tif 000053
【図１３Ｂ】
0006013606.tif 000054
【図１３Ｃ】
0006013606.tif 000055
【図１３Ｄ】
0006013606.tif 000056
【図１４Ａ】
0006013606.tif 000057
【図１４Ｂ】
0006013606.tif 000058
【図１５】
0006013606.tif 000059
【図１６】
0006013606.tif 000060