[0001] 本出願は、2012年8月9日に出願された米国仮特許出願第61/681,498号、2013年1月22日に出願された米国仮特許出願第61/755,359号、2012年10月12日に出願された米国仮特許出願第61/713,377号、2013年1月22日に出願された米国仮特許出願第61/755,312号、2012年11月6日に出願された米国仮特許出願第61/723,274号、および2013年1月22日に出願された米国仮特許出願第61/755,391号の利益を主張するもので、これら各々の全内容が参照により本明細書に組み込まれる。
詳細な説明
[0030] 本開示は、GPUアクセラレーテッドパスレンダリングを行うための技法を意図する。パスレンダリングは、その各々が1つまたは複数のパスセグメントを含み得る(あるいは、本明細書で「パス」と呼ばれる)2次元(2D)ベクタグラフィックスパスのレンダリングを指し得る。パスが2つ以上のパスセグメントを含むとき、個々のパスセグメントは、同一タイプまたは異なるタイプのものであり得る。パスセグメントのタイプは、例えば、線と、楕円弧と、2次ベジェ曲線と、3次ベジェ曲線とを含み得る。いくつかの例では、パスセグメントタイプが、例えば、Open Vector Graphics(OpenVG)APIなど、標準ベクタグラフィックスアプリケーションプログラミングインターフェース(API)に従って定義され得る。
[0031] グラフィックス処理ユニット(GPU)は、通常、1つまたは複数の3DグラフィックスAPIに対応するように設計された3次元(3D)グラフィックスパイプラインを実装する。今日使用される主流の3DグラフィックスAPIは、準拠デバイス(例えば、GPU)がパスレンダリングコマンドをサポートすることを要求しないため、現代的GPUがパスレンダリングコマンドのためのハードウェアアクセラレーションを提供することはほとんどない。例えば、現代的GPUで実装される典型的な3Dグラフィックスパイプラインは、(例えば、点、線、および三角形など)低次の、湾曲していない3Dグラフィックスプリミティブをラスタライズするように設計されるが、(例えば、楕円弧、およびベジェ曲線など)湾曲したパスレンダリングプリミティブを直接的にレンダリングできないことがあるラスタライザを含み得る。
[0032] パスレンダリングに関する一手法は、パスレンダリングコマンドを実行する目的で部分的なGPUハードウェアアクセラレーションを提供するために3D GPUプラインを使用することを伴い得る。この手法は、パスセグメントを、GPUによってラスタライズされ得る、1つまたは複数の低次の、湾曲していないグラフィックスプリミティブに変換するために、中央処理装置(CPU)を用いてパスセグメントを前処理することを伴う。本開示で説明する技法による例以外の例では、CPUが、湾曲したパスセグメント(例えば、楕円弧またはベジェ曲線)を、パスセグメントの曲率を近似する複数の比較的小さな三角形のセットに分割でき、かつGPUを使用してこれら三角形のセットをレンダリングさせることができる。しかしながら、このような手法は、CPU集中的であり得、従って、他のCPUタスクに利用可能なCPU処理サイクルの量を制限する可能性がある。さらに、場合により、所望の詳細レベルでパスセグメントをレンダリングするために、比較的多数の三角形が必要とされ得る。比較的多数の三角形は、データを記憶するときにかなりの量のメモリストレージスペースを消費することがあり、データをGPUに転送するときにかなりの量のメモリ帯域を消費することがある。
[0033] 本開示のパスレンダリング技法は、GPUの変形テッセレータ段(modified tessellator stage)によって受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断するために、変形テッセレータ段と2つのレンダリングパスとを利用するGPUハードウェアアクセラレーテッドパスレンダリング解決策を提供し得る。グラフィックスパイプラインの後続段(subsequent stages)は、パスにダッシングおよびエンドキャップを適用すること、並びに3Dグラフィックスパイプラインを使用して内部パスセグメントの終点(endpoints)間に接合を適用することのような、ラインセグメントに対するパスレンダリング動作を行うためにこれらドメイン座標を分析する。GPUを使用してパスレンダリング動作を行うことにより、CPUからこれら動作を行う負担を取り除き、これにより処理リソースを他のCPUタスクのために解放する。さらに、GPUは、いくつかの例で、パスレンダリング動作を行うことを助けるためにGPUがCPUよりもより効率的な形式でパスセグメントをレンダリングすることを可能にし得る高並列の現代的GPUテッセレーションアーキテクチャを利用することがある。
[0034] いくつかの例では、GPUが、例えば、DirectX 11 APIなど、特定の3DグラフィックスAPIによって指定されたグラフィックスアーキテクチャを使用して、パスセグメントをテッセレートおよびレンダリング可能であり得る。より詳細に説明されるように、本開示で説明する技法は、グラフィックスハードウェアに対する可能な変形、具体的には、GPUグラフィックスパイプライン内のその後続段がエンドキャップ、ダッシング、接合、およびカスプ処理に関するレンダリング動作を行うために分析できる、複数の頂点に関する複数のドメイン座標を生成するためのテッセレーション段を説明する。このようにして、本開示で説明する技法は、いくつかの変形で、DirectX 11アーキテクチャのグラフィックスハードウェアがダッシング、接合、エンドキャップ、およびリテッセレーションでパスレンダリングを行うこと可能にする。
[0035] パスレンダリングは、2つの主な動作、すなわち、(1)パスセグメントのフィル(filling)と、(2)パスセグメントのストローク(stroking)とに分割され得る。いくつかの例では、パスを完全にレンダリングするために、フィルおよびストロークのうちの1つまたはこれらの両方が行われ得る。概念的に、フィル動作は、指定されたフィル色を用いてパスセグメントの内部領域をフィルすることに対応し得る。単に例示のために、本技法は、ストローク動作に関して説明される。ファイリング動作は任意の様式で行われ得る。
[0036] ストローク動作は、概念的に、パスに垂直に保持された直線ペンを使用して、パスセグメントの縁を「拡大すること」に対応し得る。主な動作に加えて、パスレンダリングは、様々なタイプのダッシング、エンドキャップをパスの終端(ends)に適用すること、パスの内部パスセグメントの終点(endpoints)間に様々なタイプの接合を適用すること、並びにリテッセレーションを使用してカスプを処理することも伴い得る。
[0037] GPUは、「テッセレーションユニット」、すなわち、テッセレータとも呼ばれるテッセレーション段を使用して、プリミティブ、すなわち、パスセグメントをテッセレート(例えば、分割)できる。GPUがパスセグメントをテッセレートした後、本開示のパスレンダリング技法を実装するGPUは、テッセレータ段が判断して、GPUグラフィックスレンダリングパイプライン内の後続段に出力する複数のドメイン座標に基づいて3D形状を生成するように構成され得る。GPUによって生成された3D形状に基づいて、パスセグメントに関する複数のストローク領域をレンダリングすることにより、3D GPUパイプラインは、ストローク動作の実行に関して100%またはほぼ100%のGPU解決策を提供するために使用され得る。
[0038] 図1は、本開示のGPUアクセラレーテッドパスレンダリング技法を実装するために使用され得る例示的なコンピューティングシステム2を示すブロック図である。コンピューティングデバイス2は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、タブレットコンピューティングデバイス、ビデオゲームプラットフォームもしくはコンソール、(例えば、モバイル電話、セルラー電話、衛星電話、および/もしくはモバイル電話ハンドセットなど)ワイヤレス通信デバイス、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、またはグラフィカルデータを処理および/もしくは表示する任意の他のタイプのデバイスを備えることができる。
[0039] 図1の例に示すように、コンピューティングデバイス2は、ユーザインターフェース4と、CPU6と、メモリコントローラ8と、メモリ10と、グラフィックス処理ユニット(GPU)12と、GPUキャッシュ14と、ディスプレイインターフェース16と、ディスプレイ18と、バス20とを含む。ユーザインターフェース4、CPU6、メモリコントローラ8、GPU12、およびディスプレイインターフェース16は、バス20を使用して互いに通信できる。図1に示す異なる構成要素相互間のバスおよび通信インターフェースの特定の構成は単なる例示であり、本開示の本技法を実装するために、同じもしくは異なる構成要素を備えたコンピューティングデバイスおよび/または他のグラフィックス処理システムの他の構成が使用され得ることに留意されたい。
[0040] CPU6は、コンピューティングデバイス2の動作を制御する汎用プロセッサまたは専用プロセッサを備えることができる。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるための入力をコンピューティングデバイス2に与えることができる。CPU6上で実行されるこれらソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、ユーザインターフェース4を介してコンピューティングデバイス2に結合される、キーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなど、1つもしくは複数の入力デバイス(図示せず)を介してコンピューティングデバイス2に入力を与えることができる。
[0041] CPU6上で実行するソフトウェアアプリケーションは、グラフィックスデータをディスプレイ18にレンダリングさせるようにGPU12に命令する、1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令が、例えば、Open Graphics Library(OpenGL(商標登録))API、Open Graphics Library Embedded System(OpenGL ES)API、Direct3D API、DirectX API、RenderMan API、WebGL API、OpenVG(登録商標)、または任意の他の公的もしくは所有権を主張できる標準グラフィックスAPIなど、グラフィックスアプリケーションプログラミングインターフェース(API)に準拠し得る。グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングのうちの一部または全てを行わせるようにGPU12に命令するための、1つまたは複数のグラフィックスレンダリングコマンドを発行できる。いくつかの例では、レンダリングされることになるグラフィックスデータが、例えば、点、線、三角形、四角形、トライアングルストリップ(triangle strips)、パッチなど、グラフィックスプリミティブのリストを含み得る。さらなる例では、レンダリングされることになるグラフィックスデータが、例えば、ラインセグメント、楕円弧、二次ベジェ曲線、および三次ベジェ曲線など、1つまたは複数のパスレンダリングプリミティブを含み得る。
[0042] メモリコントローラ8は、メモリ10との間を行き来するデータの転送を容易にする。例えば、メモリコントローラ8は、メモリ読取り要求とメモリ書込み要求とをCPU6および/またはGPU12から受け取って、メモリ10に関するこのような要求に対してサービス提供し、コンピューティングデバイス2内の構成要素にメモリサービスを提供するようにできる。メモリコントローラ8はメモリ10に通信可能に結合される。メモリコントローラ8は、図1の例示的なコンピューティングデバイス2内で、CPU6、GPU12、およびメモリ10の各々とは別である処理モジュールとして示されているが、他の例では、メモリコントローラ8の機能の一部または全てが、CPU6、GPU12、およびメモリ10のうちの1つもしくは複数の上で実装され得る。
[0043] メモリ10は、CPU6による実行のためにアクセス可能なプログラムモジュールおよび/もしくは命令、並びに/またはCPU6上で実行するプログラムによって使用するためのデータを記憶できる。例えば、メモリ10は、複数のユーザアプリケーションと、これらアプリケーションと関連付けられたグラフィックスデータとを記憶できる。メモリ10は、コンピューティングデバイス2の他の構成要素によって使用するため、および/または生成されるための情報を記憶することも可能である。例えば、メモリ10は、GPU12のデバイスメモリとして機能でき、GPU12によって演算されことになるデータ、並びにGPU12によって行われる演算の結果生じるデータを記憶できる。例えば、メモリ10は、パスデータ、パスセグメントデータ、表面、テクスチャバッファ、デプスバッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶できる。加えて、メモリ10は、GPU12によって処理するためのコマンドストリームを記憶できる。例えば、メモリ10は、パスレンダリングコマンド、3Dグラフィックスレンダリングコマンド、および/または汎用GPU(GPGPU)コンピューティングコマンドを記憶できる。メモリ10は、例えば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、同期式ダイナミックランダムアクセスメモリ(SDRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つもしくは複数の揮発性または不揮発性のメモリあるいは記憶デバイスを含み得る。
[0044] GPU12は、CPU6によってGPU12に発行されたコマンドを実行するように構成され得る。GPU12によって実行されるコマンドは、グラフィックスコマンド、描画呼出し(draw call)コマンド、GPU状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンド、テッセレーションコマンドなどを含み得る。
[0045] いくつかの例では、GPU12が、ディスプレイ18に1つまたは複数のグラフィックスプリミティブをレンダリングするためのグラフィックス演算を行うように構成され得る。このような例では、CPU6上で実行するソフトウェアアプリケーションの1つがグラフィックス処理を要求するときに、CPU6は、ディスプレイ18にレンダリングするためのグラフィックスデータをGPU12に提供して、GPU12に対する1つまたは複数のグラフィックスコマンドを発行できる。グラフィックスコマンドは、例えば、描画呼出しコマンド、GPU状態プログラミングコマンド、条件付きコマンド、メモリ転送コマンド、ブリッティング(blitting)コマンド、テッセレーションコマンドなどを含み得る。グラフィカルデータは、頂点データ、テクスチャデータ、表面データなどを含み得る。いくつかの例では、CPU6が、コマンドとグラフィックスデータとをGPU12によってアクセス可能なメモリ10に書き込むことによって、コマンドとグラフィックスデータとをGPU12に提供できる。
[0046] さらなる例では、GPU12が、CPU6上で実行するアプリケーションに関して、汎用コンピューティング、いわゆる、汎用GPU(GPGPU)を行うように構成され得る。このような例では、CPU6上で実行するソフトウェアアプリケーションのうちの1つが計算タスクをGPU12にオフロードすることを決定するときに、CPU6は、汎用コンピューティングデータをGPU12に提供して、GPU12に対する1つまたは複数の汎用コンピューティングコマンドを発行できる。汎用コンピューティングコマンドは、例えば、カーネル実行コマンド、メモリ転送コマンドなどを含み得る。いくつかの例では、CPU6が、コマンドとグラフィックスデータとをGPU12によってアクセス可能なメモリ10に書き込むことによって、コマンドと汎用コンピューティングデータとをGPU12に提供できる。
[0047] GPU12は、いくつかの例で、グラフィック演算についてCPU6よりもより効率的な処理を提供する高並列構造を用いて構築され得る。例えば、GPU12は、複数の頂点、制御点、画素および/または他のデータに関して並列形式で演算するように構成された複数の処理要素を含み得る。GPU12の高並列性は、いくつかの例で、GPU12がCPU6を使用して画像をレンダリングするよりもより迅速にグラフィックス画像(例えば、GUIおよび2次元(2D)並びに/または3次元(3D)のグラフィックスシーン)をディスプレイ18上にレンダリングすることを可能にする。加えて、GPU12の高並列性は、汎用コンピューティングアプリケーションについてCPU6よりもより迅速に、GPU12があるタイプのベクトル演算および行列演算を処理することを可能にし得る。
[0048] いくつかの例では、GPU12がコンピューティングデバイス2のマザーボードに統合され得る。他の例では、GPU12がコンピューティングデバイス2のマザーボードにおけるポートに設置されるグラフィックスカード上に存在したり、場合により、コンピューティングデバイス2と相互運用するように構成された周辺デバイス内に組み込まれたりし得る。さらなる例では、GPU12が、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上に配置され得る。GPU12は、1つもしくは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、あるいは他の等価な集積論理回路または個別論理回路など、1つもしくは複数のプロセッサを含み得る。
[0049] いくつかの例では、GPU12がGPUキャッシュ14に直接結合され得る。従って、GPU12は、必ずしもバス20を使用せずに、GPUキャッシュ14からデータを読み取り、GPUキャッシュ14にデータを書き込むことができる。言い換えれば、GPU12は、オフチップメモリに代えて、ローカルストレージを使用してローカルにデータを処理できる。これは、大量のバストラフィックを経験し得るバス20を介したデータの読取りおよび書込みの必要を無くすことで、GPU12がより効率的な形式で動作することを可能にする。しかしながら、いくつかの例では、GPU12が別個のキャッシュを含まないで、代わりに、バス20を介してメモリ10を利用できる。GPUキャッシュ14は、例えば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学データ媒体など、1つもしくは複数の揮発性または不揮発性のメモリあるいは記憶デバイスを含み得る。
[0050] CPU6および/またはGPU12は、レンダリングされた画像データをメモリ10内に割り振られたフレームバッファ内に記憶し得る。レンダリングされた画像データはレンダリングされたフィル領域およびストローク領域をレンダリングされるべきパスセグメントのために含み得る。ディスプレイインターフェース16は、データをフレームバッファから取り出して、レンダリングされた画像データによって表される画像を表示するようにディスプレイ18を構成し得る。いくつかの例では、ディスプレイインターフェース16が、フレームバッファから取り出された複数のデジタル値をディスプレイ18によって消費され得るアナログ信号に変換するように構成されたデジタルアナログ変換器(DAC)を含み得る。他の例では、ディスプレイインターフェース16が、処理のために、これらデジタル値をディスプレイ18に直接的に渡すことができる。
[0051] ディスプレイ18は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ(SED)、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ18はコンピューティングデバイス2内に統合され得る。例えば、ディスプレイ18は、モバイル電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。あるいは、ディスプレイ18は、ワイヤード通信リンクまたはワイヤレス通信リンクを介してコンピュータデバイス2に結合されるスタンドアロンデバイスであり得る。例えば、ディスプレイ18は、ケーブルリンクまたはワイヤレスリンクを介してパーソナルコンピュータに接続されるコンピュータモニタまたはフラットパネルディスプレイであり得る。
[0052] バス20は、第1世代、第2世代、および第3世代のバス構造並びにバスプロトコルと、共有バス構造およびバスプロトコルと、ポイントツーポイントバス構造およびバスプロトコルと、一方向バス構造およびバスプロトコルと、双方向バス構造およびバスプロトコルとを含めて、バス構造およびバスプロトコルの任意の組合せを使用して実装され得る。バス20を実装するために使用され得る様々なバス構造およびバスプロトコルの例は、例えば、HyperTransportバス、InfiniBandバス、Advanced Graphics Portバス、Peripheral Component Interconnect(PCI)バス、PCI Expressバス、Advanced Microcontroller Bus Architecture(AMBA)Advanced High−performance Bus(AHB)、AMBA Advanced Peripheral Bus(APB)、およびAMBA Advanced eXentisible Interface(AXI)バスを含む。他のタイプのバス構造およびバスプロトコルも使用され得る。
[0053] 本開示によれば、GPU12は、様々なパスレンダリングコマンドの実行のために部分乃至全体的(partial-to-total)GPUハードウェアアクセラレーションを提供するように構成され得る。例えば、CPU6がGPU12に対して1つまたは複数のパスレンダリングコマンドを発行し、GPU12がこれらパスレンダリングコマンドを実行し得る。本開示の技法による一例として、GPU12は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたこれらドメイン座標を出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないときに、判断されたこれらドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するように構成されたテッセレーションユニットを含み得る。トライドメイン、等値線ドメイン、およびクワッドドメインの概念、並びにグラフィカルフィーチャを示す情報は、全て以下においてより詳細に説明される。
[0054] いくつかの例では、GPU12が、パスストローク動作を行うために、2パスレンダリング手法を使用し得る。第1のパスでは、GPU12がキャップおよび接合に関する複数のドメイン座標を判断でき、プリミティブを複数のサブセグメントに分割できる。第2のパスでは、テッセレーションユニットが第1のパスで判断された複数のドメイン座標に基づいて複数の追加ドメイン座標を判断でき、ダッシングパターンに基づき、複数のセグメントをこのパターンに基づいて維持または破棄するようなグラフィカル演算を行い得る。GPU12が第2のパスで判断するこれらドメイン座標は、ダッシングパターンに従って指定される複数のサブセグメントに関するキャップ、接合、および処理カスプに対応し得る。いくつかの例では、GPU12のテッセレーションユニットが、第2のパスで判断された複数のドメイン座標のうちの1つまたは複数と関連付けられたグラフィックスフィーチャを示す情報を出力することもできる。グラフィックスフィーチャを示す情報は、これらドメイン座標がスタートキャップ、エンドキャップ、接合、またはラインセグメントと関連付けられているかどうかを示すことができる。ドメインシェーダ段のような後続段は、入力されたこれらドメイン座標を受け取り、これらドメイン座標に基づいて複数の頂点座標を判断できる。
[0055] ストローク動作の一部として、ラインセグメントのストローク領域に空間的に対応する1つまたは複数のプリミティブ(例えば、三角形プリミティブ)を生成するために、GPU12は、例えばパラメータ式などの式によって定義され得るプリミティブを受け取り得る。本開示の技法によれば、GPU12は、テッセレーションユニットを利用して、受け取ったプリミティブを1つまたは複数のラインセグメントに分割し得る。いくつかの例では、GPU12が、受け取ったプリミティブから判断されたこれらラインセグメントの各終点に関する複数の法線ベクトルを生成し得る。法線の各々は、パスセグメントに沿った複数の点のうちの該当する点に対応する。
[0056] GPU12のテッセレーションユニットが生成する複数のドメイン座標に基づいて、GPU12は、受け取ったプリミティブから判断された複数のラインセグメントに対するカスプ処理、スタートキャップおよびエンドキャップの追加、ダッシングの追加、並びに接合の追加のようなパスレンダリング動作を行い得る。GPU12は、判断されたこれらドメイン座標をどのように分析するかを、1つまたは複数の判断されたドメイン座標と関連付けられたグラフィカルフィーチャを示す情報に基づいて判断できる。
[0057] 本開示で説明する技法では、1つまたは複数の判断されたドメイン座標と関連付けられたグラフィカルフィーチャが、パスレンダリング技法を効率的な形式で実装する際に役立ち得る。例えば、グラフィカルフィーチャの例が、わずかな例として、これらドメイン座標がカスプ処理、スタートキャップおよびエンドキャップの追加、ダッシングの追加、並びに接合の追加に関するかどうかを示す情報を含むが、他のグラフィカルフィーチャの例が存在して、これら技法がそう限定されると考えるべきでないこともある。グラフィカルフィーチャで、GPU12はこれらドメイン座標が何の目的に使用されるかを既に判断していることがあり、これが、いくつかの例として、GPU12が、テッセレーションユニットを介して、カスプ処理、スタートキャップおよびエンドキャップの追加と、ダッシングの追加と、接合の追加とを効率的な形式で実装することを可能にする。
[0058] 本開示で説明するパスレンダリング技法は、例えば、CPU6と、GPU12と、メモリ10とを含めて、図1に示されるコンピューティングデバイス2の構成要素のうちのいずれかの中で実装され得る。いくつかの例では、パスレンダリング技法の全てまたは大部分が、GPU12内(例えば、GPU12のグラフィカルパイプライン内)で実装され得る。追加の例では、CPU6が、本開示のパスレンダリング技法を行うGPU12内のパスレンダリングパイプラインを実装するために、グラフィックスパイプラインの状態を構成して、シェーダプログラムをグラフィックスパイプラインと結合させるための技法を実装できる。さらなる例では、CPU6が、レンダリングされることになるパスを示すデータを、1つまたは複数のパスをレンダリングするためにGPU12によってアクセスされ得る1つまたは複数のバッファ(例えば、1つまたは複数の頂点バッファ)内に配置するように構成され得る。
[0059] 図2は、図1のコンピューティングデバイス2のCPU6、GPU12、およびメモリ10をさらに詳細に示すブロック図である。図2に示すように、CPU6はGPU12とメモリ10とに通信可能に結合され、GPU12はCPU6とメモリ10とに通信可能に結合される。いくつかの例では、GPU12が、CPU6によってマザーボードに統合され得る。追加の例では、GPU12が、CPU6を含むマザーボードのポート内にインストールされたグラフィックスカード上で実装され得る。さらなる例では、GPU12が、CPU6と相互作用するように構成された周辺デバイス内に組み込まれることが可能である。追加の例では、GPU12が、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上に配置され得る。
[0060] CPU6は、ソフトウェアアプリケーション24と、グラフィックスアプリケーション処理インターフェース(API)26と、GPUドライバ28と、オペレーティングシステム30とを実行するように構成される。ソフトウェアアプリケーション24は、グラフィックス画像を表示させる1つもしくは複数の命令および/または非グラフィックスタスク(例えば、汎用コンピューティングタスク)をGPU12上で行わせる1つもしくは複数の命令を含み得る。ソフトウェアアプリケーション24は、グラフィックスAPI26に対する命令を発行できる。グラフィックスAPI26は、ソフトウェアアプリケーション24から受け取った命令をGPUドライバ28によって消費され得るフォーマットに変換するランタイムサービスであり得る。GPUドライバ28は、グラフィックスAPI26を介して、ソフトウェアアプリケーション24から命令を受け取って、これら命令にサービス提供するためにGPU12の演算を制御する。例えば、GPUドライバ28は、1つまたは複数のコマンド38を構築して、コマンド38をメモリ10内に配置して、コマンド38を実行するようにGPU12に命令できる。いくつかの例では、GPUドライバ28が、コマンド38をメモリ10内に配置して、オペレーティングシステム30、例えば、1つまたは複数のシステム呼出しを介してGPU12と通信できる。
[0061] GPU12は、コマンドエンジン32と、1つまたは複数の処理ユニット34とを含む。いくつかの例では、1つまたは複数の処理ユニット34が、3Dグラフィックスレンダリングパイプライン、例えば、DX 11グラフィックスレンダリングパイプライン(すなわち、DX 11グラフィックスAPIに準拠する3Dグラフィックスパイプライン)を形成および/または実装できる。
[0062] コマンドエンジン32は、(例えば、メモリ10を介して)CPU6から複数のコマンドを受け取って、GPU12にこれらコマンドを実行させるように構成される。状態コマンドを受け取ることに応答して、コマンドエンジン32は、状態コマンドに基づいて、GPU12内の1つもしくは複数の状態レジスタを特定の値に設定するように、かつ/または状態コマンドに基づいて、固定関数処理ユニット34のうちの1つもしくは複数を構成するように構成され得る。描画呼出しコマンドを受け取ることに応答して、コマンドエンジン32は、処理ユニット34に、レンダリングされることになる頂点の頂点データ構造内に含まれ得る、レンダリングされることになるパスのタイプを示すデータに基づいて、メモリ10内の頂点によって表された形状をレンダリングさせるように構成され得る。コマンドエンジン32は、複数のシェーダプログラム結合コマンドを受け取って、これらシェーダプログラム結合コマンドに基づいて、特定のシェーダプログラムをプログラマブル処理ユニット34のうちの1つまたは複数にロードすることも可能である。
[0063] 処理ユニット34は、その各々がプログラマブル処理ユニットまたは固定関数処理ユニットであり得る、1つもしくは複数の処理ユニットを含み得る。プログラマブル処理ユニットは、例えば、CPU6からGPU12上にダウンロードされた1つまたは複数のシェーダプログラムを実行するように構成されたプログラマブルシェーダユニットを含み得る。いくつかの例では、シェーダプログラムが、例えば、OpenGL Shading Language(GLSL)、High Level Shading Language(HLSL)、C for Graphics(Cg)シェーディング言語など、ハイレベルシェーディング言語で書き込まれたプログラムのコンパイルバージョンであり得る。いくつかの例では、プログラマブルシェーダユニットが、並列して動作するように構成された複数の処理ユニット、例えば、SIMDパイプラインを含み得る。プログラマブルシェーダユニットは、シェーダプログラム命令を記憶するプログラムメモリと、実行状態レジスタ、例えば、実行されているプログラムメモリ内の現在の命令またはフェッチされることになる次の命令を示すプログラムカウンタレジスタとを有し得る。処理ユニット34内のプログラマブルシェーダユニットは、例えば、頂点シェーダユニット、ピクセルシェーダユニット、ジオメトリシェーダユニット、ハルシェーダユニット、ドメインシェーダユニット、コンピュートシェーダユニット、および/またはユニファイドシェーダユニットを含み得る。
[0064] 固定関数処理ユニットは、ある機能を行うために配線接続されたハードウェアを含み得る。固定関数ハードウェアは、1つまたは複数の制御信号を介して、例えば、異なる機能を行うように構成され得るが、固定関数ハードウェアは、通常、ユーザコンパイルプログラムを受け取ることができるプログラムメモリを含まない。いくつかの例では、処理ユニット34内の固定関数処理ユニットが、例えば、デプステスト、シザーテスト、アルファブレンディングなどおよび、ラスタ演算を行う処理ユニットを含み得る。
[0065] メモリ10は、パスデータ36と、1つまたは複数のコマンド38とを記憶できる。いくつかの例では、パスデータ36が、複数の頂点(すなわち、制御点)として、メモリ10内に割り当てられた1つまたは複数の頂点バッファ内に記憶され得る。いくつかの例では、パスデータが、パッチリストデータ構造(例えば、4制御点パッチリスト)内に記憶され得る。コマンド38は、1つまたは複数のコマンドバッファ(例えば、リングバッファ)内に記憶され得る。CPU6(例えば、オペレーティングシステム30を介したGPUドライバ28)は、GPU12によって消費するために、パスデータ36とコマンド38とをメモリ10内に配置できる。GPU12(例えば、コマンドエンジン32)は、メモリ10内に記憶されたコマンド38を検索および実行できる。
[0066] パスデータ36が頂点として記憶される例では、頂点がレンダリングされることになるパスを形状的に定義する1つまたは複数の属性を含み得る。例えば、線の場合、パッチ制御リスト内の頂点は、線の終点に関する座標(例えば、(x0,y0)および(x1,y1))を示すデータを含み得る。3次ベジェ曲線の場合、パッチ制御リスト内の頂点は、その曲線を定義する4つの制御点の座標(例えば、(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3))を示すデータを含み得る。2次ベジェ曲線の場合、パッチ制御リスト内の頂点は、4つの制御点の代わりに、3つの制御点に関する座標を示すデータを含み得る。楕円弧の場合、パッチ制御リスト内の頂点は、楕円弧の終点パラメータ表示を示すデータ、または楕円弧の中心パラメータ表示を示すデータを含み得る。
[0067] いくつかの例では、レンダリングされることになるパスを形状的に定義する1つまたは複数の属性が解像度と無関係であり得る。言い換えれば、パスを形状的に定義する属性は、パスセグメントをレンダリングするときに行われることになるテッセレーションの量と無関係であり得、かつ/またはパスセグメントをレンダリングするときに生成されることになる頂点の数量と無関係であり得る。
[0068] CPU6は、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を頂点バッファ内の1つまたは複数の、場合により未使用の頂点属性内に配置することも可能である。いくつかの例では、異なるパスタイプが、ベクタグラフィックスAPIによって定義されたパスタイプのセットに対応し得、かつソフトウェアアプリケーション24によって使用するために利用可能である。いくつかの例では、異なるパスタイプが、OpenVG APIによって定義されたパスタイプのセットに対応し得る。
[0069] コマンド38は、1つもしくは複数の状態コマンドおよび/または1つもしくは複数の描画呼出しコマンドを含み得る。状態コマンドは、例えば、描画色、フィル色、ストローク色など、GPU12内の状態変数のうちの1つまたは複数を変更するようにGPU12に命令できる。いくつかの例では、状態コマンドが、パスをレンダリングすることと関連付けられた1つまたは複数の状態変数を設定するように構成されたパスレンダリング状態コマンドを含み得る。例えば、状態コマンドは、レンダリングされることになるパスがフィルされるか、ストロークされるか、またはこれらの両方かを示すように構成されたペイントモードコマンドを含み得る。別の例として、状態コマンドは、フィル動作のために使用されることになる色を指定するフィル色コマンドおよび/またはストローク動作のために使用されることになる色を指定するストローク色コマンドを含み得る。さらなる例として、状態コマンドは、例えば、ストローク幅、エンドキャップスタイル(例えば、突き合せ(butt)、円形、方形)、ライン接合スタイル(例えば、マイター、ラウンド、ベベル)、マイターリミットなど、ストローク動作に関する1つまたは複数のパラメータを指定できる。いくつかの例では、1つもしくは複数の状態パラメータを設定するために状態コマンドを使用することに加えて、またはその代わりに、描画呼出しコマンドを使用することによって、あるいはパスデータ36を含む頂点バッファ内に状態インジケータを配置することによって、状態パラメータのうちの1つもしくは複数が設定され得る。
[0070] 描画呼出しコマンドは、メモリ10内に記憶された(例えば、頂点バッファ内で定義された)1つまたは複数の頂点のグループによって定義された形状をレンダリングするようにGPU12に命令できる。いくつかの例では、描画呼出しコマンドが、GPU12にメモリ10の定義されたセクション(例えば、頂点バッファまたはパスデータ36)内に記憶された頂点の全てをレンダリングさせることができる。言い換えれば、GPU12が描画呼出しコマンドを受け取ると、メモリ10の定義されたセクション(例えば、頂点バッファまたはパスデータ36)内の頂点によって表された形状およびプリミティブをレンダリングするための制御がGPU12に渡される。
[0071] 描写呼出しコマンドは、3D描写呼出しコマンドおよびパスレンダリング描写呼出しコマンドのうちの1つまたは両方を含み得る。3Dレンダリング描画呼出しコマンドの場合、頂点バッファ内の1つまたは複数の頂点のグループによって定義された形状は、レンダリングされることになる1つまたは複数の3Dグラフィックスプリミティブ(例えば、点、線、三角形、四角形、トライアングルストリップ、パッチなど)に対応し得、3Dレンダリング描画呼出しコマンドは、1つまたは複数の3DグラフィックスプリミティブをレンダリングするようにGPU12に命令できる。パスレンダリング描画呼出しコマンドの場合、頂点バッファ内の1つまたは複数の頂点のグループによって定義された形状は、レンダリングされることになる1つまたは複数のパスプリミティブ(例えば、ラインセグメント、楕円弧、2次ベジェ曲線、および3次ベジェ曲線など)に対応し得、パスレンダリング描画呼出しコマンドは、1つまたは複数のパスプリミティブをレンダリングするようにGPU12に命令できる。
[0072]描画呼出しは、ハルシェーダと、テッセレータと、ドメインシェーダとを含み得る固定関数ユニットおよびプログラマブルユニットを利用する1つまたは複数のテッセレーションコマンドを指定することも可能である。ハルシェーダは、テッセレートされることになるドメインを指定できる。いくつかの例では、テッセレートされることになるドメインが、等値線ドメイン、三角形(トライ)ドメイン、またはクワッド(四角形)ドメインのうちの1つを備え得る。テッセレータは指定されたドメイン上で動作して、これに基づいてドメインシェーダが頂点座標を判断できるドメイン座標を出力する。本開示の技法は、テッセレータが等値線ドメインタイプ、トライドメインタイプ、およびクワッドドメインタイプ以外の追加ドメインタイプ上で動作できるようにテッセレータを変形する。新しいドメインタイプは、テッセレーションユニットが行う動作に影響を及ぼすことができ、テッセレータにグラフィカルフィーチャを示す情報を、ドメインシェーダ段など、GPU12の後続段に出力させることができる。
[0073] いくつかの例では、本開示で説明するパスレンダリング技法が、例えば、グラフィックスAPI26と、GPUドライバ28と、コマンドエンジン32と、処理ユニット34とを含めて、図2に示す構成要素のうちのいずれかの内で実装され得る。いくつかの例では、パスレンダリング技法のすべてまたは大部分が、処理ユニット34によって形成されたGPU12内のグラフィカルパイプライン内で実装され得る。例えば、テッセレーションユニットは処理ユニット34のユニットであり得る。追加の例では、CPU6のソフトウェアアプリケーション24、グラフィックスAPI26および/またはGPUドライバ28が、本開示のパスレンダリング技法を行うGPU12内のパスレンダリングパイプラインを実装するために、グラフィックスパイプラインの状態を構成して、シェーダプログラムをグラフィックスパイプラインと結合させるための技法を実装できる。さらなる例では、CPU6のソフトウェアアプリケーション24、グラフィックスAPI26および/またはGPUドライバ28が、レンダリングされることになるパスを示すデータを、1つまたは複数のパスをレンダリングするためにGPU12によってアクセスされ得る1つまたは複数のバッファ(例えば、1つまたは複数の頂点バッファ)内に配置するように構成され得る。
[0074] 本開示の技法によれば、GPU12は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたドメイン座標を出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないときに、判断されたドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するように構成されたテッセレーションユニットを含み得る。
[0075] 図3は、本開示のパスレンダリング技法を行い得る例示的なグラフィックスパイプライン40を示す概念図である。いくつかの例では、グラフィックスパイプラインが、Microsoft(登録商標)DirectX(DX)11グラフィックスパイプラインに対応し得る。図3に示すように、グラフィックスパイプライン40は、リソースブロック42と、図2の処理ユニット34を備え得る複数の処理段とを含む。複数の処理段(例えば、処理ユニット34)は、入力アセンブラ(IA)44と、頂点シェーダ(VS)46と、ハルシェーダ(HS)48と、テッセレータ50と、ドメインシェーダ(DS)52と、ジオメトリシェーダ(GS)54と、ラスタライザ56と、ピクセルシェーダ(PS)58と、出力統合器60とを含む。ハルシェーダ48、テッセレータ50、およびドメインシェーダ52は、グラフィックスパイプライン40のテッセレーション段62を形成し得る。
[0076] リソースブロック42は、例えば、1つもしくは複数のテクスチャおよび/または1つもしくは複数のバッファなど、グラフィックスパイプライン40によって使用される1つもしくは複数のメモリリソースに対応し得る。リソースブロック42は、グラフィカルパイプライン40内の処理段のうちの1つもしくは複数によって処理されることになる入力データおよび/またはグラフィックスパイプライン40内の処理段のうちの1つもしくは複数からの出力データを記憶できる。例として、リソースブロック42は、本開示で説明するようにパスセグメントに関するフィル領域のラスタライズされたバージョンおよび/またはパスセグメントに関するストローク領域のラスタライズされたバージョンを保持するフレームバッファを記憶できる。いくつかの例では、リソースブロック42を形成するメモリリソースが、コンピューティングデバイス2のメモリ10および/またはGPUキャッシュ14内に存在し得る。
[0077] 図3に示す直角の処理段は固定関数処理段を表し、図3に示す丸角の処理段はプログラマブル処理段を表す。例えば、図3に示すように、入力アセンブラ44、テッセレータ50、ラスタライザ56、および出力統合器60は固定関数処理段であり、頂点シェーダ46、ハルシェーダ48、ドメインシェーダ52、ジオメトリシェーダ54、およびピクセルシェーダ58はプログラマブル処理段である。プログラマブル段の各々は、特定のタイプのシェーダプログラムを実行するように構成され得る。例えば、頂点シェーダ46は、頂点シェーダプログラムを実行するように構成され得、ハルシェーダ48は、ハルシェーダプログラムを実行するように構成され得る、等々である。異なるタイプのシェーダプログラムの各々は、GPUの共通シェーダユニット上、または1つもしくは複数の特定のタイプのシェーダプログラムを実行するための専用である1つもしくは複数の専用シェーダユニット上のいずれかで実行できる。
[0078] 図3に示すように、入力アセンブラ44、頂点シェーダ46、ハルシェーダ48、ドメインシェーダ52、ジオメトリシェーダ54、ピクセルシェーダ58、および出力マージャ60はリソースブロック42に通信可能に結合される。入力アセンブラ44、頂点シェーダ46、ハルシェーダ48、ドメインシェーダ52、ジオメトリシェーダ54、ピクセルシェーダ58、および出力統合器60はリソースブロック42から入力データを検索並びに/または受け取るように構成される。ジオメトリシェーダ54および出力統合器60は、出力データをリソースブロック42に書き込むように構成される。グラフィックスパイプライン40内の処理段とリソースブロック42との間の通信の上述の構成は、グラフィックスパイプライン40の処理段とリソースブロック42との間の通信がどのように構成され得るかの単なる一例である。他の例では、グラフィックスパイプライン40の処理段とリソースブロック42との間により多くのもしくはより少ない一方向および/または双方向の通信チャネルが提供され得る。
[0079] DirectX 11グラフィックスパイプラインの一般的な動作に関するさらなる情報は、その内容の全体が参照により本明細書に組み込まれている、Zinkら、「Practical Rendering & Computation with Direct3D 11」、CRC Press(2011年)に見出すことができる。
[0080] 上で議論したように、2つのパスレンダリング動作は、(1)パスセグメントのフィル、および(2)パスセグメントのストロークである。グラフィックスレンダリングパイプライン40(例えば、Direct 11グラフィックスパイプライン)を用いてストローク動作を行うための解決策が次に説明される。
[0081] CPU6は、レンダリングされることになるパスセグメントを示すデータを頂点バッファの1つまたは複数の頂点内に配置できる。いくつかの例では、頂点バッファが図2に示すパスデータ36に対応し得る。頂点バッファ内の頂点に関するプリミティブトポロジは、いくつかの例で、パッチ制御リストであり得る。線の場合、パッチ制御リスト内の頂点は、線の終点に関する座標(例えば、(x0,y0)および(x1,y1))を示すデータを含み得る。3次ベジェ曲線の場合、パッチ制御リスト内の頂点は、その曲線を定義する4つの制御点の座標(例えば、(x0,y0)、(x1,y1)、(x2,y2)、(x3,y3))を示すデータを含み得る。2次ベジェ曲線の場合、パッチ制御リスト内の頂点は、4つの制御点の代わりに、曲線を定義する3つの制御点に関する座標を示すデータを含み得る。楕円弧の場合、パッチ制御リスト内の頂点は、楕円弧の終点パラメータ表示を示すデータ、または楕円弧の中心パラメータ表示を示すデータを含み得る。CPU6は、レンダリングされることになるパスのタイプを示すデータをパッチ制御リストの、場合により未使用の頂点属性内に配置することも可能である。
[0082] パスレンダリングを行うためにGPU12によって受け取られ、使用されるパスデータ36の1つの例示的なフォーマットが次に説明される。これはレンダリングされることになるパスを示すデータがCPU6によってGPU12にどのように提供され得るかの単なる一例であり、他の例が可能であり、かつ本開示の範囲内であることを理解されたい。この例では、GPU12が4つ(4)の制御点パッチリストプリミティブとして各パスセグメントを受け取る。この例では、パッチリスト内の頂点(例えば、制御点)の各々が、該当する頂点(例えば、制御点)に関する属性を定義する3つ(3)の浮動属性を含む。
[0083] ラインパスセグメントの場合、入力パスデータは、以下の形または類似の形をとることができる。
この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。具体的には、この例では、パスタイプインジケータが、パスセグメントがラインパスセグメントであることを意味する2.0fである。X0、Y0、X1、Y1はラインパスセグメントの終点に関する座標であり、この場合、(X0,Y0)は第1の終点を表し、(X1,Y1)は第2の終点を表す。
[0084] この例では、残りの頂点および属性が、パスセグメントに関する他の属性を示すために使用されなくよく、かつ/または使用されてもよい。パスセグメントに関する他の属性は、例えば、パスセグメントがオープンパスの始端であるかまたは終端であるかと、そのパスに関してパスセグメントが表示されるべきかどうかと、スタートキャップまたはエンドキャップがパスセグメントの両方の終端上に配置されるかどうかと、もしあれば、何のタイプのキャップが使用されるべきかと、接合がパスセグメントのいずれかの終端上に配置されるべきかどうかと、もしあれば、何のタイプの接合を使用するかと、を含み得る。
[0085] 一般に、ハルシェーダ48は、制御点、並びにドメインタイプの表示を判断できる。テッセレータ50は、ハルシェーダ48からドメインタイプの表示を受け取ることができる。いくつかの例では、上で説明したように、テッセレータが、等値線ドメイン上、トライドメイン上、またはクワッドドメイン上で動作し得る。テッセレータ50は、ハルシェーダ48によって示されたドメインに関するドメイン座標を判断でき、判断されたドメイン座標を、テッセレータ50によって出力されたドメイン座標に基づいて、頂点座標を判断できるドメインシェーダ52に出力できる。
[0086] パスセグメントに関する属性が、GPU12が接合、スタートキャップもしくはエンドキャップ、カスプ処理、またはダッシングを実装する必要があることを示すときに、テッセレータ50は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断されたドメイン座標を、例えば、ドメインシェーダ52に出力して、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断して、ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないときに、判断されたドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を、例えば、ドメインシェーダ52に出力するように構成され得る。
[0087] 3次ベジェパスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性は、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。具体的には、この例では、パスタイプインジケータが、パスセグメントが3次ベジェパスセグメントであることを意味する3.0fである。X0〜X3およびY0〜Y3は、3次ベジェパスセグメントに関する制御点の座標であり、この場合、(X0,Y0)は第1の制御点を表し、(X1,Y1)は第2の制御点を表す、等々である。この例では、残りの頂点および属性が、パスセグメントに関する他の属性を示すために使用されなくよく、かつ/または使用されてもよい。パスセグメントに関する他の属性は、ラインパスセグメントに関して上で説明した属性に類似し得る。
[0088] 4つの制御点の代わりに、3つの制御点が提供され得ることを除いて、類似の入力が2次ベジェパスセグメントに関して使用されてよく、プリミティブタイプインジケータは3次ベジェパスセグメントからのプリミティブと区別するために異なってよい。例えば、2次ベジェパスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
[0089] この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。具体的には、この例では、パスタイプインジケータが、パスセグメントが2次ベジェパスセグメントであることを意味する1.0fである。X0〜X2およびY0〜Y2は、2次ベジェパスセグメントに関する制御点の座標であり、この場合、(X0,Y0)は第1の制御点を表し、(X1,Y1)は第2の制御点を表す、等々である。この例では、残りの頂点および属性が、パスセグメントに関する他の属性を示すために使用されなくよく、かつ/または使用されてもよい。パスセグメントに関する他の属性は、ラインパスセグメントに関して上で説明した属性に類似し得る。
[0090] いくつかの例では、楕円弧パスセグメントに関する入力パスデータが、楕円弧パスセグメントの中心パラメータ表示を示すデータを含み得る。例えば、楕円弧パスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。この例では、パスタイプインジケータが、それぞれ、大型時計回り(LCW)楕円弧、大型反時計回り(LCCW)弧、小型時計回り(SCW)楕円弧、および小型反時計回り(SCCW)楕円弧に対応する4.0、4.1、4.2、または4.3のうちのいずれかであり得る。X0,X1およびY0,Y1は、楕円弧パスセグメントの終点座標であり、この場合、(X0,Y0)は弧の最初の終点を表し、(X1,Y1)は弧の最終の終点を表す。加えて、rHおよびrVは、それぞれ、横半径および縦半径を表し、c.x、c.yは、その楕円弧パスセグメントがその一部である楕円の中心点を表す座標(cx,cy)であり、angle1は、(スケーリングされていない(unscaled)円上で測定された)楕円弧の初期点の角度を表し、angle2は、(スケーリングされていない円上で測定された)楕円弧の最終点の角度を表す。
[0091] いくつかの例では、CPU6が、楕円弧を表すデータをレンダリングのためにGPU12に送るのに先立って、終点パラメータ形式で表された楕円弧を中心パラメータ形式に変換できる。例えば、CPU6は、楕円弧の終点パラメータ表示に基づいて、楕円弧の中心パラメータ表示を生成して、楕円弧の中央パラメータ表示をGPU12に送ることができる。楕円弧に関する中央パラメータ表示は、上に指定された例示的な入力データ形式に準拠し得る。中央パラメータ表示は、次に、GPU12によってレンダリングする目的で接合プリミティブを生成するためにCPU6によって使用され得る、楕円弧の終点接線(tangents)を見出すためにCPU6によって使用され得る。特に、上で指定された例示的な入力データ形式は中央パラメータ表示であるが、入力データ形式は、弧の最初の終点および最後の終点に関する座標(すなわち、(X0,Y0)、(X1,Y1))を依然として含み得る。いくつかの例では、このような座標が、結果として生じる形状の水密性を確実にするために使用され得る。
[0092] さらなる例では、楕円弧パスセグメントに関する入力パスデータが、楕円弧パスセグメントの終点パラメータ表示を示すデータを含み得る。例えば、楕円弧パスセグメントに関する入力パスデータは、以下の形または類似の形をとることができる。
この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。この例では、パスタイプインジケータが、それぞれ、大型時計回り(LCW)楕円弧、大型反時計回り(LCCW)弧、小型時計回り(SCW)楕円弧、および小型反時計回り(SCCW)楕円弧に対応する4.0、4.1、4.2、または4.3のうちのいずれかであり得る。X0,X1およびY0,Y1は、楕円弧パスセグメントの終点座標であり、この場合、(X0,Y0)は弧の最初の終点を表し、(X1,Y1)は弧の最終の終点を表す。加えて、rHおよびrVは、それぞれ、横半径および縦半径を表し、angleは、(rh,rv)によるスケーリングに先立って測定されたx軸に対する楕円の反時計回り回転角度を表す。
[0093] いくつかの例では、ストローク動作が、エンドキャップと、接合と、オープンパスとを処理するために頂点パスデータ入力に関する3つの追加フィールドを使用できる。例えば、ある複数の頂点座標は、パスセグメントがオープンパスの始端であるか、オープンパスの終端であるか、およびパスセグメントが破棄され得る(例えば、パスセグメントがオープンパスの終結パスセグメントである)かどうかを示すデータを記憶できる。以下は、上述の頂点属性を含む例示的なテンプレートである。
このテンプレートでは、第2の頂点のz座標(例えば、第3の座標、すなわち属性)に関する2.0fが、そのパスセグメントがオープンパスの始端であることを示し、そのパスセグメントの始端にエンドキャップ(すなわち、スタートキャップ)を入れるようにGPU12に信号伝達できる。第3の頂点のz座標に関する2.0fは、そのパスセグメントがオープンパスの終端であることを示し、そのパスセグメントの終端にエンドキャップを入れるようにGPU12に信号伝達できる。最後の頂点のz座標の2.0fは、現在のプリミティブが破棄される(例えば、そのプリミティブがオープンパスの終結ラインまたはパスセグメントである)ことを示す。
[0094] パスストローク動作を行うために、入力アセンブラ44は、パスデータ36をメモリ10から取得して、パスデータ36によって指定されたパスセグメント(例えば、パスプリミティブ)をレンダリングするために、そのパスデータをグラフィックパイプライン40の後続段に渡す。例えば、入力アセンブラ44は、複数の頂点をメモリ10内に記憶された頂点バッファから取得して、頂点シェーダ46にこれら頂点を処理させることができる。いくつかの例では、入力アセンブラ44が、処理されることになる頂点を頂点シェーダ46に直接的に渡すことができる。追加の例では、入力アセンブラ44が、リソースブロック42内の頂点バッファから、処理のために特定の頂点を検索するように頂点シェーダ46に指示できる。
[0095] 頂点シェーダ46は、入力アセンブラ44および/またはリソースブロック42から受け取った頂点を処理して、頂点シェーダ46によって処理された各入力頂点に関する出力頂点を生成するように構成される。例えば、各入力頂点に関して、頂点シェーダ46は、GPU12のシェーダユニット上で頂点シェーダプログラムのインスタンスを実行できる。頂点シェーダ46によって受け取られた入力頂点、および頂点シェーダ46によって生成された出力頂点は、あるいは、それぞれ、入力制御点および出力制御点と呼ばれる場合がある。
[0096] さらなる例では、頂点シェーダ46が、対応する入力頂点の入力属性と同一でない出力頂点に関する1つまたは複数の出力属性を生成できる。例えば、頂点シェーダ46は、出力頂点に関する1つまたは複数の属性を生成するために、入力頂点の属性のうちの1つまたは複数に関して実質的な処理を行い得る。別の例として、頂点シェーダ46は、出力頂点に関する出力属性のセットを生成するために、入力属性のセットから追加および/または属性を削除できる。
[0097] テッセレーション段62(すなわち、ハルシェーダ48、テッセレータ50、およびドメインシェーダ52)は、入力パスデータによって定義されたパスセグメントを複数のラインセグメントにテッセレートできる。いくつかの例では、テッセレーション段62が、プリミティブを形成する複数の頂点を、例えば、頂点シェーダ46から受け取ることができる。いくつかの例では、4つの頂点がプリミティブを備え得る。テッセレーション段62は、受け取ったプリミティブに基づいて、1つまたは複数のドメイン座標を判断できる。判断されたドメイン座標は、レンダリングされることになるパスの曲率を近似できる。一般に、ハルシェーダ48は、さらなる処理のために、頂点シェーダ46から受け取った制御点をドメインシェーダ52に渡して、ドメインタイプなど、構成データをテッセレータ50に提供できる。
[0098] テッセレータ50は、特定のタイプのパスセグメントまたはプリミティブを表す1つもしくは複数のパラメータ式が評価されるべきドメイン座標を判断できる。一般に、本開示の技法は、上で説明したトライドメイン、等値線ドメイン、およびクワッドドメイン以外のドメイン上で動作できるハードウェアを含めるために、テッセレータ50の挙動を変形する。いくつかの非限定的な例では、新しいドメインが「パス1」および「パス2」と呼ばれる場合がある。テッセレータ50がパス1ドメインまたはパス2ドメインの表示を受け取るときに、テッセレータ50は、ダッシング、キャップ、接合を追加することと、リテッセレーションを使用して、カスプ場所を平滑化することによってカスプを処理することとなど、グラフィカル動作をサポートするためにドメイン座標を判断できる。パス1ドメイン上またはパス2ドメイン上で動作するときに、テッセレータ50は、グラフィカルフィーチャを示す情報を出力することも可能である。グラフィカルフィーチャを示す情報は、テッセレータ50が出力するドメイン座標のうちの少なくとも1つと関連付けられることが可能である。新しいドメイン上で動作するために、テッセレータ50は、グラフィックスパイプライン40のテッセレータハードウェアと並列で機能することが可能な追加のハードウェアを含み得る。例示のために、テッセレータ50は1つの固定関数ユニットとして示されているが、追加のパスタイプをサポートするハードウェアは、場合により、別個のハードウェアであり得る。
[0099] 加えて、テッセレータ段62は、2パステッセレーションをサポートし得る。ハルシェーダ48がパス1ドメインタイプを指定することによって示され得る第1のパス内で、テッセレータ50は、受け取ったプリミティブに関するドメイン座標を判断して、判断されたドメイン座標を出力して、判断されたドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力できる。いくつかの例では、グラフィカルフィーチャを示す情報が判断されたドメイン座標がスタートキャップもしくはエンドキャップ、ラインセグメント、または接合の一部であるかどうかをグラフィックスパイプライン40内の後続段に示すことができる。グラフィカルフィーチャのこの情報に基づいて、グラフィックスパイプラインの後続段は、1つまたは複数のプリミティブに関する頂点座標を判断できる。
[0100] ハルシェーダ48がパス2ドメインタイプを指定することによって示されることが可能な第2のパス内で、テッセレータ50は、第1のテッセレーションパス内で判断された情報に基づいて、ドメイン座標を同様に判断できる。グラフィックスパイプライン40の後続段は、1つまたは複数のプリミティブに関する頂点座標を判断するために、テッセレータ50によって判断されたドメイン座標、並びにグラフィカルフィーチャを示す情報を利用することも可能である。
[0101] ドメインシェーダ52は、テッセレータ50によって判断されたドメイン座標値でパラメータ式を評価して、各評価に関する頂点を出力できる。いくつかの例では、ドメインシェーダ52によって出力された頂点の各々が、その頂点の位置を示す1つまたは複数の属性を含み得る。追加の例では、ドメインシェーダ52によって出力された頂点の各々が、その頂点と関連付けられたパスレンダリングプリミティブのタイプを示す1つまたは複数の属性を含み得る。
[0102] より具体的には、ハルシェーダ48は、頂点シェーダ46および/またはリソースブロック42から受け取った制御点を処理でき、ハルシェーダ48によって実行されたハルシェーダプログラムの各インスタンスに関する出力制御を生成できる。例えば、ハルシェーダ48によって生成されることになる各出力制御点に関して、頂点シェーダ46は、GPU12のシェーダユニット上でハルシェーダプログラムのインスタンスを実行し得る。
[0103] さらなる例では、ハルシェーダ48が、入力制御点のうちの該当する1つの入力属性と同一でない出力制御点に関する1つまたは複数の出力属性を生成できる。例えば、ハルシェーダ48は、出力制御点に関する1つまたは複数の属性を生成するために、入力制御点の属性のうちの1つまたは複数に関して実質的な処理を行い得る。別の例として、ハルシェーダ48は、出力頂点に関する出力属性のセットを生成するために、入力属性のセットから属性を追加および/または削除できる。いくつかの例では、以下においてさらに詳細に説明されるように、GPU12が、終点パラメータ表示の形式で、楕円弧に関するパスデータを受け取る場合、ハルシェーダ48は、その楕円弧の終点パラメータ表示をその楕円弧の中心パラメータ表示に変換できる。
[0104] さらなる例では、ハルシェーダ48が、特定のレンダリング動作に関して、レンダリングされるべきでないプリミティブを破棄できる。プリミティブを破棄することは、プリミティブに対応するデータをグラフィックスパイプラインのさらなる段に渡させず、これによって、このようなプリミティブをパイプラインの残りによって効果的にレンダリングさせないプロセスを指す場合がある。例えば、グラフィックスパイプライン40がフィル動作を行っているときに、ハルシェーダ48は、接合プリミティブとキャッププリミティブとを破棄できる。
[0105] ハルシェーダ48は、各パスセグメントに関するパッチ定数関数のインスタンスを実行することもできる。パッチ定数関数は、出力値を生成するときに、テッセレータ50によって使用されることになる構成パラメータを判断して、テッセレータ50に提供できる。例えば、パッチ定数関数は、ハルシェーダ48にテッセレーション係数をテッセレータ50に提供させることができる。テッセレーション係数は、テッセレータ50が特定のテッセレーションドメインに適用されるテッセレーションの程度(例えば、ドメインがどの程度微細に再分割されるべきか、および/またはドメインが再分割されるべきより小さなオブジェクトの数)を指定できる。
[0106] 別の例として、パッチ定数関数は、ハルシェーダ48にテッセレーションドメインをテッセレータ50に提供させることができる。テッセレーションドメインは、テッセレータ50によって使用されるための複数の座標を生成するために、テッセレータ50によって使用されるオブジェクトを指す場合がある。概念的に、テッセレーションドメインは、テッセレータ50によって複数のより小さなオブジェクトに再分割されるオブジェクトに対応し得る。より小さなオブジェクトの頂点の位置座標は、次いで、さらなる処理のために、ドメインシェーダ52に送られる。いくつかの例では、テッセレーションドメインが、クワッド、トライ、および等値線のうちの1つになるように選択され得る。いくつかの他の例では、ドメインが、パス1ドメインまたはパス2ドメインのうちの1つになるように選択され得る。いくつかの例では、ドメインが再分割される先である、より小さいオブジェクトが、三角形、ラインセグメント、または点に対応し得る。パス1ドメインおよびパス2ドメインは、テッセレータ50がダッシングと、カスプと、キャップと、接合とをサポートするための動作、並びにグラフィカルフィーチャを示す情報を出力するための動作を行うべきであることを示し得る。いくつかの例では、ハルシェーダ48が等値線テッセレーションドメインを指定して、テッセレータ50が等値線ドメインをラインセグメントに再分割すべきであることを指定できる。
[0107] 本開示の技法によれば、ハルシェーダ48は、上で説明したクワッド、トライ、および等値線とは異なる、「パス1」および「パス2」と呼ばれる2つの追加ドメインタイプのうちの1つを指定するように構成され得る。ハルシェーダ48がパス1をドメインタイプとして指定する場合、テッセレータ50は、ハルシェーダ48から受け取ったテッセレーション係数を、セグメントテッセレータ係数と、スタートキャップテッセレータ係数と、接合テッセレータ係数と、エンドキャップテッセレータ係数とを含むとして分析できる。セグメントテッセレータ係数は、テッセレータ50がドメイン座標を判断すべき、受け取ったプリミティブに関するラインセグメントの数を示すことが可能である。スタートキャップテッセレーション係数およびエンドキャップテッセレーション係数は、これに関してテッセレータ50がドメイン座標を生成すべき、スタートキャップセグメントまたはエンドキャップセグメントの数を示すことが可能である。同様に、接合テッセレーション係数は、2つのラインセグメント相互間のドメイン座標接合を判断するときに、これに関してテッセレータ50がドメイン座標を生成すべき、サブセグメントの数を示すことが可能である。
[0108] ハルシェーダ48からのドメインタイプが、そのドメインがパス2のものであることを示す場合、ハルシェーダ48は、入力をジオメトリシェーダ54から、例えば、(GPUキャッシュ14内またはメモリ10内の)ストリームアウト(streamout)バッファから受け取る。この入力に基づいて、ハルシェーダ48は、第2のテッセレーションパス内で使用されることになるテッセレーションユニット50のためのテッセレーション係数を生成する。この第2のパスは、パス1のドメインタイプで指定された第1のパス内で、テッセレータ50によって生成されたテッセレーション係数を受け取る。しかしながら、テッセレータ50は、ハルシェーダ48から受け取ったテッセレーション係数をパス1ドメインタイプに関して上で説明されたものとは異なって分析する。ハルシェーダ48がパス2のドメインタイプを指定するときに、テッセレータ50は、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ(inverse length)値と、プリミティブタイプ値とを含むものとして、ハルシェーダ48から受け取ったテッセレーション係数を分析する。
[0109] 上で説明したように、ラインセグメントの各終点は、関連する終点法線を有する。2つの接続されたラインセグメントの終点法線が最大角偏差を超える場合、テッセレータ50は、サブセグメントに対応する追加ドメイン座標を判断できる。追加ドメイン座標と関連付けられた終点法線は、レンダリングされるときに、場合により、より平滑な外観を有する曲線を作り出すことができる、より小さな角偏差を有する。ハルシェーダ48は、最大角偏差を状態として維持して、その最大角偏差から、テッセレータ50が、追加のドメイン座標を判断するためにテッセレーションデルタ値とともに使用するテッセレーション係数を判断する。
[0110] ラインセグメントがテッセレーションデルタ値を超える長さを有する場合、テッセレータ50は、GPUパイプライン40の後段(later stages)、例えば、ドメインシェーダ52がサブセグメントの各々に関する起点および終点を判断するために使用するテッセレーションデルタ値未満の長さを有するサブセグメントに対応するドメイン座標を判断する。追加ドメイン座標は、一般に、追加サブセグメントの起点および終点に関する頂点に対応する。テッセレータ50は、ドメイン座標に対応する終点の各々に関する新しい法線ベクトルを判断することも可能である。ドメイン座標と終点法線とを判断するために、テッセレータ50は、以下においてより詳細に説明される線形補間を行い得る。
[0111] ドメインタイプがパス2として指定されるときに、テッセレータ50は、1つまたは複数のグラフィックスコマンドによって指定されたダッシングパターンに従って、ドメイン座標を判断できる。テッセレータ50は、受け取ったラインセグメントにダッシングパターンをどのように適用するかを判断するときに、セグメント値と逆セグメント長さ値とを利用する。ダッシングパターンがテッセレータ50によって処理されている制御点が「オン」であること、すなわち、そのセグメントがレンダリングされるべきであることを示す場合、テッセレータ50は、レンダリングされるべきラインセグメントの頂点に対応する座標を判断する。ダッシングパターンに従って、ラインセグメントが「オフ」である場合、テッセレータ50はそのラインセグメントを破棄できる。ラインセグメントを破棄するときに、テッセレータ50は、後続段が「オフ」ラインセグメントに関する頂点座標を判断しないように、そのラインセグメントに関するドメイン座標を判断または出力しない。
[0112] パス2ドメイン下で動作するときに、テッセレータ50は、ドメインがスタートキャップもしくはエンドキャップに対応するか、接合に対応するか、またはラインセグメントに対応するかなど、グラフィカルフィーチャを示す情報をやはり受け取る。ダッシングの場合、その情報が、ドメインがスタートキャップまたはエンドキャップであることを示す場合、テッセレータ50は、そのキャップに関する複数の追加ドメイン座標を判断しなくてよい。しかしながら、ダッシングパターンの状態が現在のドメインが「オフ」であることを示す場合、テッセレータ50は、そのラインセグメントと関連付けられたスタートキャップおよび/またはエンドキャップを破棄できる。
[0113] テッセレータ50がパス1ドメインタイプ上またはパス2ドメインタイプ上で動作する場合、テッセレータ50は、スタートキャップまたはエンドキャップに関する頂点に対応するドメイン座標を生成できる。スタートキャップまたはエンドキャップのドメイン座標を生成するために、テッセレータ50は、パス1ドメインタイプの場合、受け取られ、またはパス2ドメインタイプの場合、状態として記憶されるスタートキャップテッセレーション係数およびエンドキャップテッセレーション係数に基づいて、ドメイン座標を線形補間する。スタートキャップおよびエンドキャップに関するドメイン座標を判断した後、テッセレータ50は、ドメイン座標を出力でき、ドメイン座標のうちの少なくとも1つがスタートキャップタイプまたはエンドキャップタイプのものであることを示す情報を出力することもできる。
[0114] テッセレータ50は、テッセレーション段62によって処理される各パスセグメントに関する複数の出力値も生成できる。出力値は、特定のタイプのパスセグメントを表す1つまたは複数のパラメータ式がドメインシェーダ52によって評価されるべき値を判断できる。いくつかの例では、テッセレータ50が、ハルシェーダ48によってテッセレータ50に提供された1つもしくは複数のテッセレーション係数および/またはテッセレーションドメインに基づいて、複数の出力値を生成できる。例えば、テッセレータ50は、等値線を複数のラインセグメントに再分割して、正規化された座標系内の複数のラインセグメントの各終点に関する出力値を生成できる。
[0115] ドメインシェーダ52は、複数のドメイン座標と、1つまたは複数のグラフィカルフィーチャを示す情報とをテッセレータ50から受け取り、パスセグメントに関する複数の制御点と、複数のテッセレーション係数と、後続のプリミティブに関する開始法線とをハルシェーダ48から受け取ることができる。これらの入力に基づいて、ドメインシェーダ52は、複数の出力頂点座標と、これら座標によって表された頂点に対応する終点法線と、その頂点と関連付けられたグラフィカルフィーチャの表示とを生成する。上で説明したように、グラフィカルフィーチャの表示は、その頂点がスタートキャップもしくはエンドキャップ、ラインセグメント、または接合の一部であることを示すことができる。例えば、テッセレータ50から受け取られた各出力値に関して、ドメインシェーダ52は、GPU12のシェーダユニット上でドメインシェーダプログラムのインスタンスを実行できる。ドメインシェーダプログラムは、ドメインシェーダ52に、テッセレータ50から受け取った特定の値に基づいて判断された特定の値で1つまたは複数のパラメータ式を評価させて、これら評価、並びに各頂点座標と関連付けられたグラフィカルフィーチャに基づいて、出力頂点に関する座標を生成させることができる。出力頂点座標を生成するために使用されるパラメータ式の係数のうちの1つまたは複数は、ハルシェーダ48から受け取った制御点のうちの1つまたは複数に基づいて定義され得る。各出力頂点は、複数のテッセレートされたラインセグメントのうちの1つの終点に対応し得る。2つの連続する出力頂点は、単一のテッセレートされたラインセグメントの終点に対応し得る。追加の例では、ドメインシェーダプログラムが、ドメインシェーダ52に、各出力頂点に関する正規座標を生成するために、テッセレータ50から受け取った特定の値に基づいて判断された特定の値で、1つまたは複数の追加パラメータ式を評価させることができる。
[0116] ドメインシェーダ52は、隣接する頂点の各セットがテッセレートされたラインセグメントを表す、順序付けられた順番で頂点を出力できる。ラインセグメントは、頂点バッファ内で定義されたパスセグメントを集合的に近似できる。例えば、ドメインシェーダ52は、以下のラインセグメント{0,1}、{1,2}、{2,3}、{3,4}、{4,5}を定義する頂点の以下のセット{0,1,2,3,4,5}を出力できる。追加の例では、ドメインシェーダ52が、前の例で列挙されたものと同じラインセグメントを定義し得る頂点の以下のセット{0,1,1,2,2,3,3,4,4,5}を出力できる。
[0117] いくつかの例では、テッセレータ50およびドメインシェーダ52が、以下の技法に従って、パスセグメントを複数のラインセグメントに均一にテッセレートするように構成され得る。具体的には、テッセレータ50は、パラメータ評価のための座標を出力できる(例えば、t=0/T、1/T、2/T...T/T、式中、Tはテッセレーション係数である)。プリミティブのタイプに応じて、ドメインシェーダ52は、テッセレータ50によって出力された値で1つまたは複数のパラメータ式を評価できる。
[0118] いくつかの例では、線の場合、Tが常に1に等しくてよい。このような例では、ドメインシェーダ52が、ラインパスセグメントに対応する頂点を生成するために何か評価を行うことが必ずしも必要でない。
[0119] 3次ベジェ曲線の場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
式中、tは、テッセレータ50によって提供された出力値に対応し、V(t)は、特定の出力値(すなわち、t)に関して生成された出力頂点に対応し、C0、C1、C2、C3は、3次ベジェ曲線に関する制御点に対応する。
[0120] あるいは、3次ベジェ曲線の場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
式中、tは、テッセレータ50によって提供された出力値に対応し、x(t)は、特定の出力値(すなわち、t)に関して生成された出力頂点のx座標に対応し、y(t)は、特定の出力値(すなわち、t)に関して生成された出力頂点のy座標に対応し、(X0,Y0)、(X1,Y1)、(X2,Y2)、(X3,Y3)は、3次ベジェ曲線に関する制御点に対応する。
[0121] 2次ベジェ曲線の場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
式中、tは、テッセレータ50によって提供された出力値に対応し、V(t)は、特定の出力値(すなわち、t)に関して生成された出力頂点に対応し、C0、C1、C2は、2次ベジェ曲線に関する制御点に対応する。
[0122] あるいは、2次ベジェ曲線の場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
式中、tは、テッセレータ50によって提供された出力値に対応し、x(t)は、特定の出力値(すなわち、t)に関して生成された出力頂点のx座標に対応し、y(t)は、特定の出力値(すなわち、t)に関して生成された出力頂点のy座標に対応し、(X0,Y0)、(X1,Y1)、(X2,Y2)は、2次ベジェ曲線に関する制御点に対応する。
[0123] 楕円弧パスセグメントの場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線を評価して、出力頂点を生成できる。
式中、パラメータ表示角度angletは、テッセレータ出力tから判断され、xは、特定のパラメータ表示角度(すなわち、anglet)に関して生成された出力頂点のx座標に対応し、yは、パラメータ表示角度(すなわち、anglet)に関して生成された出力頂点のy座標に対応し、rhは、非回転楕円の横半径を表し、rvは、非回転楕円の縦半径を表し、rvCos、rvSin、rhCos、およびrhSinは、それぞれ、rv*Cos(角度)、rv*Sin(角度)、rh*Cos(角度)、およびrh*Sin(角度)を表し、角度は、(rh,rv)によるスケーリングに先立って測定されたx軸に対する楕円の反時計回り角度を表す。いくつかの例では、ハルシェーダ48が、cos(角度)とsin(角度)とを判断(例えば、事前計算)し、かつ/またはrvCos値と、rvSin値と、rhCos値と、rhSin値とを判断(例えば、事前計算)して、楕円弧に関する、上で具陳したパラメータ式を評価する際に使用するために、これらの値をドメインシェーダ52に提供するように構成され得る。
[0124] 楕円弧に関して上で議論したように、パッチ制御リスト内の頂点は、いくつかの例で、楕円弧に関する終点パラメータ表示を示すデータを含み得る。このような例では、ハルシェーダ48(例えば、GPU12のシェーダユニット上で実行するハルシェーダプログラム)が、楕円弧の終点パラメータ表示を示すデータを楕円弧の中心パラメータ表示を示すデータに変換するために使用され得る。
[0125] 楕円弧の終点パラメータ表示を楕円弧の中心パラメータ表示に変換するときに、楕円の正確な中心を見出すための例示的な技法が次に説明される。例示的な技法は、パラメータのセット(x0,y0)、(x1,y1)、rh、rv、φ、fs、およびfAによって定義される楕円の終点表現に基づいて、楕円並びに/または楕円弧の中心点(cx,cy)と、初期角度並びに最終角度θ1およびθ2とを判断できる。中心点(cx,cy)と、半径rhおよびrvと、回転角rotとを有する楕円は、陰方程式(x’)2+(y’)2=1を満たすことができ、式中、x’=((x−cx)*cos(rot)+(y−cy)*sin(rot))/rhおよびy’=(−(x−cx)*sin(rot)+(y−cy)*cos(rot))/rvである。(x,y)から(x’、y’)への変換は、所望の楕円を、起点を中心とする単位円にマッピングする。
[0126] 共通半径と、2つの所与の点(x0,y0)および(x1,y1)を通過する回転角とを有する楕円の対の中心点を判断するために、平面はまず、各楕円の式が(x’−cx’)2+(y’−cy’)2=1になるように、適切にスケーリングおよび回転された座標系に変換される。次いで、その外周が2つの所与の点を通過する2つの単位円の中心(すなわち、(cx0’,cy0’)および(cx1’,cy1’))が見出され得る。最終的に、元の座標系の解決策を取得するために、中心点は逆変換によって配置される。
[0127] 点(x0,y0)および(x1,y1)を通過する2つの単位円の中心点は
によって与えられ、式中、xm=(x0+x1)/2,ym=(y0+y1)/2,Δx=(x0−x1),Δy=(y0−y1)、およびd=√(1/(Δx2+Δy2)−1/4)である。dが無限または虚である場合、入力点は、それぞれ、一致しているか、または離れすぎているため、解決策は存在しない。角度θ1およびθ2は、円上の終点の傾斜を見出して、逆正接関数を計算することによって見出され得る。
[0128] 以下の疑似コードは、上述の技法に従って、楕円中心を計算するプロセスを示す。元の楕円パラメータの逆変換に続いて、findUnitCircles関数がfindEllipsesによって呼び出される。
[0129] 楕円弧の終点パラメータ表示を楕円弧の中心パラメータ表示に変換することに関するさらなる詳細は、その内容全体が参照により本明細書に組み込まれている、http://www.khronos.org/registry/vg/specs/openvg−1.1pdfで入手可能な「OpenVG Specification、Version1.1」、第18.4項、2008年12月3日に見出され得る。
[0130] ジオメトリシェーダ54は、テッセレートされた複数のラインセグメントをドメインシェーダ52から受け取って、これらテッセレートされたラインセグメントに基づいて、複数の三角形プリミティブを生成できる。例えば、テッセレートされたラインセグメントの各々に関して、ジオメトリシェーダ54は、GPU12のシェーダユニット上でジオメトリシェーダプログラムのインスタンスを実行して、該当するテッセレートされたラインセグメントに基づいて、テッセレートされたラインセグメントに関する三角形プリミティブを生成できる。いくつかの例では、テッセレートされたラインセグメントの各々に関して、ジオメトリシェーダ54が、該当するテッセレートされたラインセグメントに対応する2つの頂点をドメインシェーダ52から受け取って、三角形プリミティブに対応する3つの頂点のセットを生成できる。
[0131] いくつかの例では、三角形プリミティブの頂点のうちの2つが、2つの受け取った頂点と同じ頂点であり得る(例えば、同じ位置座標を有し得る)。このような例では、ジオメトリシェーダ54が、レンダリングされることになるパスセグメントと関連付けられた全てのテッセレートされたラインセグメントに共通である共通の頂点に基づいて、第3の頂点を生成できる。共通の頂点は、テッセレートされたラインセグメントの終点のうちの1つに対応してよく、または対応しなくてもよい。いくつかの例では、共通の頂点が、レンダリングされることになるパスセグメントに関する、テッセレートされた複数のラインセグメントに対応する複数の頂点のセット内の第1の頂点に対応し得る。いくつかの例では、ジオメトリシェーダ54が、本開示の技法に従って、複数の追加テッセレーション係数をテッセレータ50およびリテッセレーション/ダッシングユニット51に出力するように構成されることも可能である。
[0132] ジオメトリシェーダ54は、ドメインシェーダ52によって作り出された、テッセレートされたラインセグメントの各々に関して一回度起動され得る。テッセレートされたラインセグメントの各々に関して、ジオメトリシェーダ54は、三角形の第1の頂点として共通の制御点を使用し、かつ三角形の第2の頂点および第3の頂点として、該当するテッセレートされたラインセグメントの2つの終点を使用して、三角形プリミティブを生成できる。例えば、ドメインシェーダ52が、以下のラインセグメント{0,1}、{1,2}、{2,3}、{3,4}、{4,5}を定義する、以下の頂点のセット{0,1,2,3,4,5}を生成した例が上で提供された。上記の一連のラインセグメントの場合、ジオメトリシェーダ54は、以下の三角形、{C,0,1}、{C,1,2}、{C,2,3}、{C,3,4}、{C,4,5}、{C,4,5}を生成でき、式中、Cは三角形のすべてに共通する任意の単一の頂点である。
[0133] いくつかの例では、ジオメトリシェーダ54が、出力データをリソースブロック42に「ストリームアウトする」ように構成されることも可能である。グラフィックスパイプライン40は、いくつかの例で、本開示の技法に従って第2のテッセレーションパスを実行するために、ストリームアウトされたデータをハルシェーダ48とドメインシェーダ52とに送信し戻すことができる。第2のテッセレーションパスは、パス2ドメインタイプ上で動作し得る。
[0134] ラスタライザ56は、複数の3Dグラフィックスプリミティブ(例えば、点、線、および三角形)をこれら3Dグラフィックスプリミティブに対応する複数の画素に変換するように構成され得る。例えば、ラスタライザ56は、三角形プリミティブに対応する3つの頂点を受け取って、これら3つの頂点を、その三角形プリミティブによってカバーされたスクリーン画素位置に対応する複数の画素に変換できる。三角形プリミティブによってカバーされたスクリーン画素位置は、三角形の頂点、三角形の縁、および三角形の内部に対応するスクリーン画素位置を含み得る。
[0135] ピクセルシェーダ58は、画素をラスタライザ56から受け取って、ピクセルシェーダプログラムに従って、受け取った画素に基づいて、影付き画素を生成できる。例えば、ラスタライザ56から受け取った各画素に関して、ピクセルシェーダ58は、GPU12のシェーダユニット上でピクセルシェーダプログラムのインスタンスを実行できる。
[0136] さらなる例では、ピクセルシェーダ58が、入力画素のうちの該当する1つの入力画素の入力属性と同一でない、出力画素に関する1つまたは複数の出力属性を生成できる。例えば、ピクセルシェーダ58は、出力画素に関する1つまたは複数の属性を生成するために、入力画素の属性のうちの1つまたは複数に関して実質的な処理を実行できる。別の例として、ピクセルシェーダ58は、出力画素に関する出力属性のセットを生成するために、入力属性のセットから属性を追加および/または削除できる。
[0137] 出力統合器60は、ピクセルシェーダ58から受け取った画素データをレンダターゲット(例えば、フレームバッファまたはステンシルバッファ)内に配置できる。いくつかの例では、出力マージャ60が、ピクセルシェーダ58から受け取った画素データをラスタ演算に基づいてレンダターゲット内にすでに記憶されている画素データと併合できる。
[0138] ドメインシェーダ52が頂点に関する位置座標を生成するためのパラメータ式を評価することに加えて、ドメインシェーダ52は、ストローク動作の間、頂点に関する法線、例えば、接線を生成することも可能である。法線を生成するために、ドメインシェーダ52は、テッセレータ50によって生成された値の各々に関する追加パラメータ式を評価して、各評価に関して1つまたは複数の法線を出力できる。場合により、法線は、ドメインシェーダ52によって出力された頂点の属性として出力され得る。例えば、ストローク動作の場合、ドメインシェーダ52によって作り出された出力頂点は、頂点の位置を示す1つもしくは複数の属性と、頂点と関連付けられた法線または接線を示す1つもしくは複数の属性と、頂点と関連付けられたグラフィカルフィーチャを示す情報とを含み得る。法線属性は、テッセレータ50によって生成されたパラメータ値に対応するパスセグメント上の点に関する法線ベクトルを示すことが可能である。ラインセグメントの場合、法線は、ラインセグメントの終点と起点との間のベクトル差(例えば、(X1−X0,Y1−Y0))をとることによって取得され得る。
[0139] 湾曲したパスセグメント(例えば、ベジェ曲線および楕円弧)に関する法線を生成するために、湾曲したパスセグメントに関する接線公式が使用され得る。一般に、(法線を判断するために使用され得る)曲線および楕円弧に関する接線公式は、曲線および弧に関する頂点を生成することに関して上で説明したパラメータ方式の派生物である。
[0140] 例えば、3次ベジェ曲線の場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線の出力頂点に関する法線を生成できる。
式中、tは、テッセレータ50によって提供された出力値に対応し、N(t)は、特定の出力値(すなわち、t)に関して生成された出力法線に対応し、C0、C1、C2、C3は、3次ベジェ曲線に関する制御点に対応する。2次ベジェ曲線に関する法線を生成するために、上で提供した2次ベジェ曲線に関するパラメータ式の派生物が同じように使用され得る。
[0141] あるいは、3次ベジェ曲線の場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線の出力頂点に関する法線を生成できる。
式中、tは、テッセレータ50によって提供された出力値に対応し、x(t)は、特定の出力値(すなわち、t)に関して生成された出力法線のx座標に対応し、y(t)は、特定の出力値(すなわち、t)に関して生成された出力法線のy座標に対応し、(X0,Y0)、(X1,Y1)、(X2,Y2)、(X3,Y3)は、3次ベジェ曲線に関する制御点に対応する。2次ベジェ曲線に関する法線を生成するために、上で提供した2次ベジェ曲線に関するパラメータ式の派生物が同じように使用され得る。
[0142] 楕円弧パスセグメントの場合、ドメインシェーダ52は、以下のパラメータ式に従って、曲線の出力頂点に関する法線を生成できる。
式中、パラメータ表示角度、angletは、テッセレータ出力(すなわち、t)から判断され、Tanxは、特定のパラメータ表示角度(すなわち、anglet)に関して生成された出力法線のx座標に対応し、Tanyは、パラメータ表示角度(すなわち、anglet)に関して生成された出力法線のy座標に対応し、rhは、非回転楕円の横半径を表し、rvは、非回転楕円の縦半径を表し、rvCos、rvSin、rhCos、およびrhSinは、それぞれ、rv*Cos(角度)、rv*Sin(角度)、rh*Cos(角度)、およびrh*Sin(角度)を表し、角度は、(rh,rv)によるスケーリングに先立って測定されたx軸に対する楕円の反時計回り角度を表す。いくつかの例では、ハルシェーダ48が、cos(角度)とsin(角度)とを判断(例えば、事前計算)し、かつ/またはrvCos値と、rvSin値と、rhCos値と、rhSin値とを判断(例えば、事前計算)して、楕円に関して上で具陳したパラメータ式を評価する際に使用するために、これらの値をドメインシェーダ52に提供するように構成され得る。
[0143] 接線を見出した後、以下の式に従って、法線ベクトルが見出され得る。
式中、normalは、(Tanx,Tany)ベクトルに関する正規化ベクトルに対応し、normalize(x,y)は、入力ベクトル(x,y)の正規化バージョンを生成する関数である。ベクトル(x,y)の正規化バージョンは、1のベクトル(x,y)および長さ(例えば、norm)と同じ方向を有するベクトルと指す場合がある。
[0144] 楕円弧に関して上で議論したように、パッチ制御リスト内の頂点は、いくつかの例で、終点パラメータ表示を示すデータを含み得る。このような例では、ハルシェーダ48が、楕円弧の終点パラメータ表示を示すデータを楕円弧の中心パラメータ表示を示すデータに変換できる。
[0145] 図4A〜図4Bは、本開示の技法による、受け取ったプリミティブをテッセレートすることを示す概念図である。図4Aは、上で説明したように、ベジェ曲線などの曲線80A、または式によって定義された別のタイプの曲線を示す。本開示の技法によれば、GPU12、具体的には、テッセレーション段62は、曲線80Aを複数のラインセグメントに分割できる。各ラインセグメントは、起点および終点によって定義される。
[0146] 図4Bは、本開示の技法による、曲線80を複数のラインセグメントにテッセレートした曲線結果を示す。上述のように、ハルシェーダ48は、テッセレータが入力として受け取ることができるテッセレーション係数を判断できる。テッセレータ50は、受け取ったプリミティブ、この例で、曲線80Aに関する複数のドメイン座標を判断するために、入力として受け取ったテッセレーション係数を使用できる。
[0147] いくつかの例では、テッセレーション係数が、プリミティブが分割されるラインセグメントの数を定義できる。図4Bの例では、曲線80Aが、ラインセグメント82A〜82Gとして示される、7つのラインセグメントに分割されている。受け取ったラインセグメントテッセレーション係数に基づいて、テッセレーション係数は、図4Bに示された7つのラインセグメントに関するドメイン座標を判断する。
[0148] テッセレータ50は、u−v座標系でラインセグメント82A〜82Gに関するドメイン座標を判断する。ラインセグメントは、起点および終点A0〜A7を有する。一般に、u−v座標系は、u軸およびv軸の両方に関して[0...1」から正規化される。u座標はu軸に沿った水平位置を示すことができ、v座標はv軸に沿った垂直位置を示すことができる。しかしながら、図4Bに示すように、テッセレータ50が曲線をサブセグメントに分割するために曲線に関するドメイン座標を判断する場合、テッセレータ50は、各ラインセグメントの起点および終点に関するu座標だけを計算する。ドメインシェーダ52など、グラフィックスパイプライン40の後段は、曲線82Aに沿って存在するラインセグメントと関連付けられた任意の垂直オフセットを判断できる。
[0149] 上述のように、u−v座標系はゼロから1の値をとる。従って、第1のラインセグメントの起点A0は、常にゼロのu座標を有し、最後のラインセグメントの終点、この例では、A7が、常に1のu座標を有する。曲線82Aに沿って各u座標を判断するために、テッセレータ50は、判断されたラインセグメントの数に基づいて、各u座標を線形補間する。図4Bの例では、A1が、1/7(.14285...)のu座標値を有し、第3の線点A2は、2/7(.285714...)のu座標値を有する、等々である。いくつかの例では、テッセレータ50が、ラインセグメントの起点に続いて、ラインセグメントの終点を出力できる。テッセレータ50は、次いで、後続のラインセグメントの起点を出力する。
[0150] 曲線80Aのラインセグメントの各々に沿った起点および終点の各々に関するドメイン座標、すなわち、u座標およびv座標を判断することに加えて、テッセレータ50は、判断されたドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力することもできる。1つのラインセグメントの終点u座標がそのラインセグメントの起点u座標と同じ図4Bの例では、同じu座標が2回、すなわち、前のラインセグメントの終点に対応して1回、後続のラインセグメントの起点に対応して1回出力される。
[0151] 図5A〜図5Bは、本開示の技法による、ラインセグメントのリテッセレーションを示す概念図である。図5に関して上で説明したように、テッセレータ50は、いくつかの例で、リテッセレーションを実行できる。図5に示す第1のパス内で、テッセレータ50はパスをラインセグメントに分割できる。しかしながら、いくつかの隣接する(すなわち、接続された)ラインセグメントの終点法線は、互いに対するある最大角偏差を超える場合がある。ハルシェーダ48は、受け取ったプリミティブに関する角偏差と最大各偏差とを判断できる。ハルシェーダ48は、角偏差を最大角偏差で除算することによって、プリミティブに関するテッセレーション係数を判断して、その結果を最も近い整数に丸める。ハルシェーダ48は、次いで、ハルシェーダ48がテッセレータ50に出力するテッセレーションデルタ(tessDelta)の値を判断するために、プリミティブの元のラインセグメントの長さをテッセレーション係数で分割する。
[0152] 第2のパス内で、すなわち、パス2ドメインタイプ上で動作するときに、テッセレータ50は、ハルシェーダ48が出力するテッセレーションデルタ値を含むテッセレーション係数を受け取ることができる。入力セグメントが受け取ったテッセレーションデルタ値を超える長さを有する場合、テッセレータ50は、5Aのセグメントをサブセグメントに分割、すなわち、「切断」することによって、追加のu−v座標を判断できる。
[0153] 分割プロセスの一環として、テッセレータ50は、サブセグメントに関する新しいuおよびvの起点と終点とを判断する。各サブセグメントのu座標およびv座標を判断するために、テッセレータ50は、図4Aおよび図4Bに関して上で説明したものと同じ線形補間技法を利用する。具体的には、テッセレータ50は、テッセレーションデルタ値に基づいて、テッセレーション係数を判断して、そのテッセレーション係数に基づいて、u座標値を線形補間する。図5Aおよび図5Bの例では、テッセレータ50が、図5Aのセグメントに関して、テッセレータ50が図5Aのセグメントを3つのサブセグメントに分割すべきであることを示す、3のテッセレーション係数を判断する。テッセレータ50は、次いで、3つのラインセグメントの各々の終点に関するu座標を判断および出力する。図5Bの例では、4つの終点ドメイン座標の判断されたu−v座標が、(0,0)、(.333,0)、(.666,0)、および(1,0)である。テッセレータ50は、新しいサブセグメントの終点に関する新しい法線をやはり判断する。サブセグメントに関する新しい法線は、2つの最内矢印によって示される。
[0154] テッセレータ50がこれらサブセグメントに関する複数のドメイン座標を判断および出力すると、ドメインシェーダ52は、これらドメイン座標と、ハルシェーダ48からの制御点データと、判断されたドメイン座標と関連付けられたグラフィカルフィーチャを示す情報とに基づいて、サブセグメントの起点および終点に関する頂点座標を判断する。この場合、グラフィカルフィーチャを示す情報は、ドメイン座標が、起点または終点ではなく、ラインセグメントと関連付けられることを示すことができる。
[0155] 図6A〜図6Cは、本開示の技法による、ラインセグメントをリテッセレートすることと、ラインセグメントにダッシングを適用することとを示す概念図である。図6Aは、最大角偏差を超える可能性がある終点法線を有するラインセグメント100を示す。図5A〜図5Bに関して上で説明したように、ハルシェーダ48は、最大角偏差を判断して、テッセレータ50が入力として受け取るテッセレーションデルタを出力できる。元のセグメントの長さがテッセレーションデルタ値を超える場合、テッセレータ50は複数の追加サブセグメントに対応する複数の追加ドメイン座標を判断する。ドメインシェーダ52は、これらサブセグメントの頂点座標を判断できる。ラインセグメント100をサブセグメントに分離することは、曲線を備え得る、レンダリングされたサブセグメントの外観を改善し得る。
[0156] 図5Aおよび図5Bに関して説明したプロセスとは異なり、図6Bの例では、テッセレータ50が、パス2ドメイン上、すなわち、第2のテッセレーションパス内で動作するときに、テッセレーションデルタ値を超えるサブセグメントに関するドメイン座標を判断する。図6A〜図6Cの例では、テッセレータ50が、ダッシングパターンに基づいて、図6Aのセグメントのサブセグメントに関するドメイン座標を判断する。ダッシングパターンによって「オフ」として示されたセグメントに関して、テッセレータ50は、ドメイン座標を判断せず、任意のドメイン座標をグラフィックスパイプライン40内の後段に出力しない。ダッシングパターンによって「オン」として示されたセグメントに関して、テッセレータ50は、図5A〜図5Bに関して上で説明した技法に従って、起点ドメイン座標と終点ドメイン座標とを判断する。
[0157] 図6Bの例では、テッセレータ50が、ダッシングパターンが、セグメントの現在の位置がオンであることを示すか、またはオフであることを示すかを判断する。テッセレータ50は、いくつかの例で、ダッシングパターンを状態として維持できる。現在のセグメントがオンである場合、テッセレータ50は、ラインセグメントの起点および終点に関するドメイン座標を判断できる。ダッシングパターンが現在のラインセグメントがオフであることを示す場合、テッセレータ50は、「オフ」ラインセグメントを破棄、すなわち、切断でき、切断されたラインセグメントの起点および終点に関するドメイン座標を判断しない。
[0158] ラインセグメントを切断するときに、テッセレータ50は、そのラインセグメントと関連付けられたスタートキャップおよびエンドキャップ、または接合を切断することもできる。しかしながら、ダッシングパターンまたは他の状態情報は、前の「オン」セグメントが、テッセレータ50がオフセグメントを切断する間に削除したスタートキャップまたはエンドキャップを有すべきであることを示すことができる。従って、本開示の技法によれば、テッセレータ50は、スタートキャップまたはエンドキャップを必要とするラインセグメントに関してスタートキャップまたはエンドキャップに関するドメイン座標を判断できる。ラインセグメントに関するスタートキャップまたはエンドキャップを判断するプロセスは、図12および図13A〜図13Dに関してより詳細に説明される。
[0159] 図6A〜図6Cの例に戻ると、テッセレータ50は、ダッシングパターンに基づいて、サブセグメント102および104に関するドメイン座標を判断する。テッセレータ50は、ダッシングパターンがセグメント100の一部は「オフ」であることを示すため、セグメント100の一部が切断されるべきであることをやはり判断する。テッセレータ50は、図5A〜図5Bに関して説明した線形補間プロセスと類似して、ダッシングパターンに基づいて、サブセグメントの各々に関するu座標を判断する。テッセレータ50が図6Aのセグメントを、相互間にギャップまたは切断を有する2つのサブセグメントに分割すると、ハルシェーダ48は、ラインセグメントの終点法線相互間の角偏差が最大角偏差を超えるかどうかを判断できる。終点法線が最大角偏差を超える場合、テッセレータ50は、追加サブセグメントの終点に対応する追加ドメイン座標を作成できる。図5A〜図5Bに関して上で説明したように、終点法線が判断された最大角偏差を超える場合、テッセレータ50は、図6Cに示すように、テッセレーションデルタ入力パラメータ以下の長さを有するラインサブセグメントに関するドメイン座標を判断できる。図6Cで、テッセレータ50は、より短い発散終点法線(divergent endpoint normals)を有する2つのセグメントを作成するために、第1のセグメント(切断の左側)を長さテッセレーションデルタ(length tessellation delta)で再分割する。
[0160] 図7A〜図7Cは、本開示の1つまたは複数の技法による、ダッシングを適用することを示す概念図である。図7Aは、いくつかのダッシングパターンを示す。ダッシングパターンは、GPU20がレンダリングできる、いくつかの「オン」ラインセグメントと、GPU20がレンダリングできない、いくつかの「オフ」ラインセグメントとから構成され得る。ダッシングパターンのオンセグメントおよびオフセグメントは、図7Aに示すように、可変長を有しである得る。図7Bは、テッセレータ50がドメインシェーダ52とジオメトリシェーダ54とに出力できる別の例示的なダッシングパターンを示す。図7Bのダッシング例は、テッセレータ50がエンドキャップまたはダッシングを適用しないことを示すために、適用しているエンドキャップを有していない。図7Cは、ジオメトリシェーダ54がエンドキャップを「オン」ラインセグメントに適用した後の図7Bのダッシングパターンを示す。
[0161] 次に、接合をレンダリングするための技法が説明される。接合は、異なるパスセグメントが接触する場所に適用され得る。いくつかの例では、3つの異なるタイプの接合、すなわち、(1)ベベルと、(2)マイターと、(3)ラウンドとが存在し得る。いくつかの例では、レンダリングされることになるタイプの接合が、GPU12内のバッファ(例えば、パッチ定数バッファ)内に記憶されることが可能であり、CPU6は、接合のタイプを示す値をバッファ内に配置することによって、レンダリングのために使用する接合のタイプを示すことができる。
[0162] 接合は、2つのパスセグメントが接触する場所に形成され得る。接合をレンダリングするために、CPU6は、GPU12によって消費するために、2つのパスセグメントが接触する位置を示すデータと、その位置の2つの接線(すなわち、各パスセグメントに関して1つの接線)を示すデータとをバッファ(例えば、パスデータ36内の頂点バッファ)内に配置できる。
[0163] いくつかの例では、接合に関する入力パスデータが、以下の形または類似の形をとることができる。
この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。具体的には、この例で、パスタイプインジケータは、パスセグメントが接合パスセグメントであることを意味する5.0fである。接合パスセグメントのタイプ(例えば、べベル、マイター、またはラウンド)は、GPU12のバッファ(例えば、パッチ定数バッファ)内に記憶された値によって示されることが可能である。この例で、pos.xおよびpos.yは、2つのパスセグメントが接触する位置すなわち場所に対応する(x,y)座標であり、tan0.xおよびtan0.yは、2つのパスセグメントが接触する位置すなわち場所におけるこれら2つのパスセグメントの第1のパスセグメントに関する法線ベクトルに対応する(x,y)座標であり、tan1.xおよびtan1.yは、2つのパスセグメントが接触する位置すなわち場所におけるこれら2つのパスセグメントの第2のパスセグメントに関する法線ベクトルに対応する(x,y)座標である。いくつかの例では、CPU6が、2つのパスセグメントのうちの1つまたは両方を示すデータに基づいて、法線ベクトルに関する座標を判断できる。この例では、残りの頂点および属性が、接合に関する他の属性を示すために使用されなくよく、かつ/または使用されてもよい。
[0164] いくつかの例では、接合をレンダリングするために、ハルシェーダ48が、接合に対応する法線ベクトル{(tan0.x,tan0.y)および(tan1.x,tan1.y)}をデカルト座標から角座標に変換できる。さらなる例では、ハルシェーダ48が、デカルト座標から角座標に変換するのに先立って、接合に対応する法線ベクトル{(tan0.x,tan0.y)および(tan1.x,tan1.y)}を正規化できる。追加の例では、ハルシェーダ48が、法線ベクトルに関する角座標をハルシェーダ48によって受け取られたパッチ制御リストの1つまたは複数の属性内に配置して、さらなる処理のために、変形パッチ制御リストをドメインシェーダ52に渡すことができる。
[0165] 1つの特定の例として、接合に関してハルシェーダ48によって受け取られた入力パッチ制御リストは次のようであり得る。
この例では、ハルシェーダ48が、各接線に関する角座標(すなわち、法線ベクトル)を生成して、各接線に関して、角座標を該当する接線に対応する制御点の第3の属性内に配置できる。結果として生じるパッチ制御リストは、いくつかの例では、以下の形式をとることができる。
[0166] いくつかの例では、ハルシェーダ48が、接線を正規化するために、以下の疑似コードおよび/またはシェーダプログラムコードを実装して、接線に関するデカルト座標を角座標に変換できる。
[0167] 図8は、例示的なベベル接合(bevel join)を示す概念図である。ベベル接合の場合、GPU12は、ベベル領域(例えば、図8に示す軽い影付き三角形)に空間的に対応する、1つまたは複数の三角形をレンダリングできる。図8に示すように、点cは、2つのパスセグメントが接触するパスセグメントの終点に対応し得、u0およびl0は、その終点(すなわち、c)に関する第1のパスセグメントに基づいて生成された端点(corner point)に対応し得、u1およびl1は、その終点(すなわち、c)に関する第2のパスセグメントに基づいて生成された端点に対応し得る。
[0168] いくつかの例では、ドメインシェーダ52が、パッチ制御リストをハルシェーダ48から受け取って、頂点をジオメトリシェーダ54に提供できる。頂点は、2つのパスセグメントが接触する共通の終点(すなわち、点c)を示す1つまたは複数の属性と、共通の終点におけるパスセグメントの各々に関する法線を示す1つまたは複数の属性と、パスレンダリングプリミティブのタイプ(例えば、この場合、接合)を示す1つまたは複数の属性とを含み得る。
[0169] 図9は、例示的なマイター接合(miter join)を示す概念図である。マイター接合の場合、GPU12は、マイター領域に空間的に対応する1つまたは複数の三角形をレンダリングできる。マイター接合に関してレンダリングされた三角形のうちの1つは、図8に関して上で説明したベベル接合に関してレンダリングされた三角形に類似し得る。しかしながら、マイター接合は、ベベル接合と比較して追加の三角形を有し得る。
[0170] 図9に示すように、点cは、2つのパスセグメントが接触するパスセグメントの終点に対応し得、u0およびl0は、その終点(すなわち、c)に関する第1のパスセグメントに基づいて生成された端点に対応し得、u1およびl1は、終点(すなわち、c)に関する第2のパスセグメントに基づいて生成された端点に対応し得る図8に関して上で説明したべベル接合に類似して、ドメインシェーダ52は、パッチ制御リストをハルシェーダ48から受け取って、頂点をジオメトリシェーダ54に提供できる。頂点は、2つのパスセグメントが接触する共通の終点(すなわち、点c)を示す1つまたは複数の属性と、共通の終点におけるパスセグメントの各々に関する法線を示す1つまたは複数の属性と、パスレンダリングプリミティブのタイプ(例えば、この場合、接合)を示す1つまたは複数の属性とを含み得る。
[0171] 図10は、例示的なラウンド接合(round join)を示す概念図である。図10に示すように、点cは、2つのパスセグメントが接触するパスセグメントの終点に対応し得、u0およびl0は、その終点(すなわち、c)に関する第1のパスセグメントに基づいて生成された端点に対応し得、u1およびl1は、その終点(すなわち、c)に関する第2のパスセグメントに基づいて生成された端点に対応し得る。本明細書で説明するのは、ラウンド接合のGPUアクセラレーテッドレンダリングを実現するためにテッセレーション段62を利用する技法である。
[0172] 本開示の技法によればによれば、グラフィックスパイプライン40は、ラウンド接合領域に関して、各々が関連する法線方向を有する複数の頂点を生成するために、テッセレーション段62を使用できる。各頂点は、接合領域の該当するスライスに対応し得、この場合、各スライスは共通の終点(すなわち、c)と、ラウンド接合の湾曲した縁に沿った2つの該当する点とによって定義される。スライスを近似するために、テッセレータ50は、接合の曲率スライスを近似するためにスライスと関連付けられたラウンド接合の縁に沿った頂点に対応するドメイン座標を判断できる。このような例では、接合をレンダリングするために、ドメインシェーダ52が、ともに接合の集約領域を近似し得る、スライス近似値の各々に関するドメイン座標に基づいて、スライス近似値の各々に関する頂点座標を判断できる。
[0173] ラウンド接合に関するスライス近似値を生成するために、テッセレータ50は、後続のラインセグメントの起点の法線を判断できる。上で説明したように、テッセレータ50は、これに関してテッセレータ50がドメイン(u−v)座標を判断するセグメントの数を示す接合テッセレーション係数を受け取る。接合は、常に、テッセレータ50が接合している現在のセグメントの終点において発生するため、接合と関連付けられたドメイン座標の各々に関するu座標は、常に1に等しい。
[0174] ドメイン座標の各々のv座標を判断するために、テッセレータ50は、接合と関連付けられた第1のドメイン座標の開始v座標がゼロであり、接合と関連付けられた最後のv座標が1であり、これらの2つの点相互間のドメイン座標(すなわち、頂点)に対応する全ての他のv座標値が均等に分布されたv座標を有するように、テッセレーション係数に基づいて、v座標値の各々を線形補間する。一例として、「3」の接合テッセレーション係数を有する接合の場合、テッセレータ50は、3つのスライスに対応するu−v座標を出力できる。各スライスは、(pos+normalと呼ばれる)法線方向を有する頂点に対応し得る。図10の例では、頂点の各々が、同じ位置を有し得るが、異なる法線を有し得る。異なる法線は、これら頂点と関連付けられた、テッセレータ50によって出力された異なるu−v座標によって示されることが可能である。第1の座標対はu−v座標(1,0)を有し、例えば、図10の点l0に対応する。最後のドメイン座標対は、u−v座標(1,1)を有し、整合の最後のラインセグメント、例えば、図10のl1に対応する。他の2つの頂点は、u−v座標(1、.33)および(1,.66)を有する。異なる接合テッセレーション係数によって異なる数のスライスが指定される場合、ラインセグメントの各々の終点に関するu−v座標は異なり得るが、v軸上でゼロから1に依然として線形に分布される。
[0175] ラインセグメントの各々に関するドメイン座標を判断することに加えて、テッセレータ50は、接合の判断ドメイン座標のうちの1つまたは複数に関するのグラフィカルフィーチャを示す情報をやはり判断する。この例で、グラフィカルフィーチャを示す情報は、ドメイン座標が接合と関連付けられることを示すことができる。後続段、例えば、ドメインシェーダ52は、接合に関する頂点座標を判断するために、ドメイン座標、並びに、ドメイン座標が接合と関連付けられることを示す関連情報を分析できる。頂点座標を判断した後、グラフィックスパイプライン40の後続段が接合をレンダリングできる。
[0176] 次に、「エンドキャップ」と呼ばれるスタートキャップおよびエンドキャップをレンダリングするための技法が説明される。エンドキャップは、複数のパスセグメントから形成されるパスの始端および/または終端に適用され得る。いくつかの例では、2つの異なるタイプのエンドキャップ、すなわち、(1)方形キャップおよび(2)円形キャップが存在し得る。いくつかの例では、レンダリングされることになるタイプのエンドキャップが、GPU12内のバッファ(例えば、パッチ定数バッファ)内に記憶されることが可能であり、CPU6は、エンドキャップのタイプを示す値をバッファ内に配置することによって、レンダリングのために使用するエンドキャップのタイプを示すことができる。
[0177] エンドキャップは、パスの始端または終端に対応する、パスセグメントの始端または終端において形成される。エンドキャップをレンダリングするために、CPU6は、GPU12によって消費するために、エンドキャップの位置(例えば、パスセグメントの終点)を示すデータと、その位置における接線を示すデータとをバッファ(例えば、パスデータ36内の頂点バッファ)内に配置できる。
[0178] いくつかの例では、エンドキャップに関する入力パスデータが、以下の形または類似の形をとることができる。
この例では、各行が4つの制御点パッチの頂点すなわち制御点を表し、括弧内の各パラメータは、該当する頂点すなわち制御点の属性を表す。この例では、第1の制御点に関する最後の属性が、レンダリングされることになるパスのタイプを示すデータ(すなわち、「パスタイプインジケータ」)を記憶する。具体的には、パスタイプインジケータは、この例で、パスセグメントがエンドキャップパスセグメントであることを意味する6.0fである。エンドキャップパスセグメントのタイプ(例えば、方形または円形)は、GPU12のバッファ(例えば、パッチ定数バッファ)内に記憶された値によって示されることが可能である。この例で、pos.xおよびpos.yは、エンドキャップが形成される位置すなわち場所(例えば、パスセグメントの終点)に対応する(x,y)座標であり、tan.xおよびtan.yは、エンドキャップが形成される位置すなわち場所に関する法線ベクトルに対応する(x,y)座標である。いくつかの例では、CPU6が、エンドキャップが形成されるパスセグメントを示すデータに基づいて、法線ベクトルに関する座標を判断できる。この例では、残りの頂点および属性が、キャップに関する他の属性を示すために使用されなくよく、かつ/または使用されてもよい。
[0179] いくつかの例では、エンドキャップをレンダリングするために、ハルシェーダ48は、エンドキャップに対応する法線ベクトル(tan.x,tan.y)をデカルト座標から角座標に変換できる。さらなる例では、ハルシェーダ48が、デカルト座標から角座標に変換するのに先立って、エンドキャップに対応する法線ベクトル(tan.x,tan.y)を正規化できる。追加の例では、ハルシェーダ48が、法線ベクトルに関する角座標をハルシェーダ48によって受け取られたパッチ制御リストの1つまたは複数の属性内に配置して、さらなる処理のために、変形パッチ制御リストをドメインシェーダ52に渡すことができる。いくつかの例では、ハルシェーダ48が、接線を正規化するために、かつ/もしくは接線に関するデカルト座標を角座標に変換するために、接合に関して上で議論した疑似コードおよび/またはシェーダプログラムコードを実装できる。
[0180] 1つの特定の例として、エンドキャップに関してハルシェーダ48によって受け取られた入力パッチ制御リストは次のようであり得る。
この例では、ハルシェーダ48が、接線に関する角座標(すなわち、法線ベクトル)を生成して、その角座標をその接線を含む制御点の第3の属性内に配置できる。結果として生じるパッチ制御リストは、いくつかの例で、以下の形式をとることができる。
[0181] 図11は、例示的な方形キャップ(square cap)を示す概念図である。方形キャップの場合、GPU12は、キャップ領域(例えば、図11に示す軽い影付き長方形)に空間的に対応する、1つまたは複数の三角形をレンダリングできる。図11に示すように、点cは、パスセグメントの終点に対応し得、uおよびlは、キャップが形成されるパスセグメントの終点(すなわち、c)に基づいて生成された端点に対応し得る。
[0182] いくつかの例では、ドメインシェーダ52が、パッチ制御リストをハルシェーダ48から受け取って、頂点をジオメトリシェーダ54に提供できる。頂点は、キャップが形成されるパスセグメントの終点(すなわち、点c)を示す1つまたは複数の属性と、その終点(すなわち、点c)におけるパスセグメントに関する法線を示す1つまたは複数の属性と、パスレンダリングプリミティブのタイプ(例えば、この場合、キャップ)を示す1つまたは複数の属性とを含み得る。
[0183] ジオメトリシェーダ54は、いくつかの例で、頂点をドメインシェーダ52から受け取って、本開示で説明する式のうちの1つまたは複数に基づいて、頂点に関する端点(u、l)を判断できる。ジオメトリシェーダ54は、以下の式に従って、ベクトルvを判断できる。
式中、uおよびlは、パスセグメントの終点に関するストローク領域の端点に対応する。
[0184] ジオメトリシェーダ54は、以下の式に従って、ベクトルnを見出すために、90度だけベクトルvを回転できる。
式中、a=(x,y)は、ベクトルaのx成分およびy成分を示し、式中、v.yは、ベクトルvのy成分に対応し、式中、v.xは、ベクトルvのx成分に対応する。
[0185] ジオメトリシェーダ54は、以下の式に従って、スターティングキャップまたはエンディングキャップに関する新しい点(例えば、頂点)を判断できる。
式中、nuおよびnlは、キャップに関する新しい端点であり、uおよびlは、パスセグメントの終点に関するストローク領域の端点に対応する。
[0186] ジオメトリシェーダ54は、方形キャップ領域に空間的に対応する方形キャップをレンダリングするための1つまたは複数の三角形を生成できる。例えば、ジオメトリシェーダ54は、方形キャップ領域に空間的に対応する2つの三角形(例えば、(u,l,nu)および(nu,l,nl))を生成できる。グラフィックスパイプライン40は、方形キャップ領域に関してジオメトリシェーダ54によって生成された1つまたは複数の三角形をレンダリングできる。1つまたは三角形がレンダリングされると、レンダターゲット(例えば、フレームバッファ)は、方形キャップに関するストローク領域のラスタライズされたバージョンを記憶できる。
[0187] 本開示の技法によるいくつかの例では、GPU12が、方形キャップの頂点座標を判断するためにテッセレーティング段62を利用できる。ハルシェーダ48は、スタートキャップテッセレーション係数および/またはエンドキャップテッセレーション係数をテッセレータ50に出力できる。エンドキャップおよび接合はラインセグメントの終点上に共存することはできないため、非ゼロエンドキャップテッセレーション係数は非ゼロ接合テッセレーション係数と相互排他的である。スタートキャップテッセレーション係数またはエンドキャップテッセレーション係数は1に等しい値を有し得、これは、テッセレータに元の頂点位置と、ラインセグメントの終点と関連付けられた法線とを有するが、方形スタートキャップまたはエンドキャップと関連付けられるドメイン座標を保存および出力させる。
[0188] 図12は、例示的な円形キャップ(round cap)を示す概念図である。図12に示すように、点cは、パスセグメントの終点に対応し得、uおよびlは、キャップが形成されるパスセグメントの終点(すなわち、c)に基づいて生成された端点に対応し得る。GPU12は、円形接合をレンダリングするために上で説明した技法のうちのいずれかに類似した形式で円形キャップをレンダリングできる。
[0189] 本開示の技法によれば、GPU12は、円形キャップの頂点座標を判断するためにテッセレーティング段62を利用できる。ハルシェーダ48は、スタートキャップテッセレーション係数および/またはエンドキャップテッセレーション係数をテッセレータ50に出力できる。エンドキャップおよび接合はラインセグメントの終点上に共存することはできないため、非ゼロエンドキャップテッセレーション係数は非ゼロ接合テッセレーション係数と相互排他的である。
[0190] 上で接合に関して図10で説明したように、テッセレータ50は、線形に分布され、かつ円形キャップのスライス近似値に対応するu−v座標を判断するテッセレータ50は、受け取った接合テッセレーション係数に基づいてドメイン座標を出力する。キャップがスタートキャップである場合、テッセレータ50が出力するドメイン座標の全てのu座標はゼロに等しい。キャップがスタートキャップである場合、テッセレータ50が出力する全てのドメイン座標のu座標は1に等しい。キャップが4つのスライスに分割されるべきであることを示し、5つのラインセグメントに対応する座標を有する、4のスタートキャップテッセレーション係数を仮定すると、接合に関してテッセレータ50が判断および出力するuーv座標は、(1,0)、(1,.25)、(1,.5)、(1,.75)、および(1,1)である。ドメイン座標を判断することに加えて、テッセレータ50は、グラフィカルフィーチャ、この場合、スタートキャップまたはエンドキャップを示す情報をやはり判断する。ドメインシェーダ52は、ドメイン座標と、スタートキャップまたはエンドキャップの一部であるとしてドメイン座標を関連付ける情報とを受け取って、ドメイン座標の各々に関する頂点座標を判断する。
[0191] 図13A〜図13Dは、本開示の1つまたは複数の技法による、キャップおよび接合を適用することを示す概念図である。図13A〜図13Bは、テッセレータ50を使用してキャップをレンダリングするための技法を示す。図13Aで、ラインセグメントは2つのサブセグメントに分割されている。サブセグメントのうちの1つは、例えば、上で説明したように、1つまたは複数の頂点パラメータに基づいて、テッセレータ50がエンドキャップを適用する終点法線80を有する。いくつかの例では、頂点パラメータが、OpenVGレンダリングコマンドに従って指定され得る。
[0192] 図13A〜図13Bに示す円形エンドキャップ(round endcap)の場合、テッセレータ50は、入力としてエンドキャップテッセレーション係数を受け取って、ラインセグメントの終端を再分割する三角形の数を判断するために、そのテッセレーション係数を使用する。テッセレータ50は、次いで、法線140の中心点を径方向に囲む座標を判断することによって、ラインセグメントの終端を三角形に分割する。この分割の出力は、いくつかのuドメイン座標およびvドメイン座標である。u座標は、一般に、回転の中心に対応し得、v座標は、一般に、法線140の中心(u座標)の周囲を径方向に回転する点に対応し得る。上で説明したように、スタートキャップと関連付けられたドメイン座標は、ゼロに等しいu座標を有し得、エンドキャップと関連付けられたドメイン座標は、1に等しいu座標を有し得る。テッセレータ50がエンドキャップに関するu座標とv座標とを判断した後、ドメインシェーダ52は、円形エンドキャップの中心に対するu座標値とv座標値とに従って、頂点座標を計算できる。中心点140は、エンドキャップが適用されることになる、ラインセグメントの終点に対応する。一般に、u座標値は[0,1]から変動する可能性がある。しかしながら、テッセレータがパス2ドメイン上で動作する場合、スタートキャップのv座標は[0,.5]から変動する可能性があり、エンドキャップに関するv座標は[.5,1]から変動する可能性がある。パス2ドメイン上で動作するときのv座標値の範囲の限定は、ドメインシェーダ52が、テッセレータ50から出力されたドメイン座標がスタートキャップに関するか、またはエンドキャップに関するかを判断するのを可能にする。パス2ドメイン上で動作するときに、ドメインシェーダ52は、v座標が範囲[0,.5]内にある場合、テッセレータ50によって出力されたドメイン座標がスタートキャップと関連付けられ、v座標が範囲[.5,1]内にある場合、テッセレータ50によって出力されたドメイン座標がエンドキャップと関連付けられると推論する。
[0193] 図13C〜図13Dは、図13A〜図13Bで示した技法に基づいて、円形接合(round join)を適用するための技法を示す。13Cの例で、2つのラインセグメントは、円形接合を使用して接合される必要がある終点を有し得る。接合されることになる領域はコールアウト(callout)142によって示される。図13Cのラインセグメントに関する円形接合を生成するために、テッセレータ50は、中心点のu座標を判断し、中心、すなわち、u座標の周囲を径方向に回転する点に対応するいくつかのv座標を判断する、図13A〜図13Bに示したプロセスに類似したプロセスを実行できる。テッセレータ50は、次いで、u座標とv座標とに基づいて頂点場所を計算するドメインシェーダ54にu座標とv座標とを出力する。
[0194] 図14A〜図14Bは、本開示の技法による、ラインセグメント(line segment)のカスプ(cusps)のリテッセレーションを示す概念図である。図14Aは、その交差点に「カスプ」を有する2つのラインセグメントを示す。カスプは2つのラインセグメントの間の交差として定義され、この場合、2つのラインセグメントの接線は最大角度閾値を超えるか、または、この場合、交差点における接線は未定義である。
[0195] 本開示の技法によれば、テッセレータ50は、カスプを有する交差点におけるパスを平滑化するために、図13A〜図13Dに関して上で説明した円形リテッセレーションなど、リテッセレーションを実行できる。図14Bは、2つのラインセグメントの交差点において円形リテッセレーションを実行した結果を示す。
[0196] カスプ処理を実行するために、テッセレーション段62は、図5A〜図5B、および図6A〜図6Bに関して上で説明した技法と類似した技法を実行できる。すなわち、テッセレータ50は、ラインセグメントの最大長を判断するために使用される、テッセレーションデルタ値と呼ばれるテッセレーション係数を受け取ることができる。ハルシェーダ48は、プリミティブの終点法線の角偏差と、最大角偏差値とに基づいて、テッセレーションデルタ値を判断する。入力されたセグメントの長さがテッセレーションデルタ値を超える場合、テッセレータ50は、テッセレーションデルタ未満の長さを有するサブセグメントに対応するドメイン座標を判断する。
[0197] テッセレータ50は、これらサブセグメントが、キャップまたは接合ではなく、ラインセグメントの一部であることを示す情報とともに、サブセグメントに対応するドメイン座標をドメインシェーダ52に出力する。ドメイン座標と、サブセグメントのドメイン座標がラインセグメントグラフィカルフィーチャと関連付けられていることを示す情報とに基づいて、ドメインシェーダ52は、これらサブセグメントに関する頂点座標を判断する。レンダリングされるときに、サブセグメントは、図14Bに示すように、最終的にレンダリングされた曲線に平滑度または曲率を追加できる。
[0198] 図15は、本開示によるGPUアクセラレーテッドパスレンダリングを実行するための例示的な技法を示す。図15に示す技法は、例示のために、図1&図2に示したGPU12によって、図3に示したグラフィカルパイプライン40を用いて実行されるとして説明される。他の例では、図15に示す技法が、同じ構成要素または異なる構成要素を同じ構成もしくは異なる構成で有する他のシステム内で実装され得る。
[0199] 図15は、本開示によるGPUアクセラレーテッドパスレンダリングを実行するための例示的な技法を示す流れ図である。単なる例示のために、図3のテッセレータ50など、テッセレーションユニットは、図15に示す技法を実行できる。図15のプロセスで、テッセレータ50は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断する(160)。テッセレータ50は、これら頂点に関する判断されたドメイン座標を出力する(162)。テッセレータ50は、受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断する(164)。ドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないときに、テッセレータ50は、次いで、判断されたドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力する(166)。
[0200] グラフィカルフィーチャを示す情報を出力するために、テッセレータ50は、テッセレーション係数に基づいて、グラフィカルフィーチャを示す情報を出力できる。いくつかの例で、グラフィカル表現を示す情報は、グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの1つであることを示すデータを備える。
[0201] 図16は、本開示によるGPUアクセラレーテッドパスレンダリングを実行するための例示的な技法を示す流れ図である。いくつかの例では、テッセレータ50が、テッセレーション係数を受け取ることができる。テッセレーション係数を分析するために、テッセレータ50は、第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取ることができる(180)。ドメインタイプが第1のタイプ(決定ブロック182の「はい」分岐)であるときに、テッセレータ50は、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取ることができる(184)。この場合、テッセレータ50は、ラインセグメントの終点法線を判断して、テッセレーションユニットを用いて、ラインセグメントの終点法線と、スタートキャップに関するテッセレーション係数またはエンドキャップに関するテッセレーション係数とに基づいて、スタートキャップまたはエンドキャップのu座標とv座標の対を線形補間することによって、受け取ったプリミティブの頂点に関するドメイン座標を判断できる。
[0202] ドメインタイプが第2のタイプ(決定ブロック182の「いいえ」分岐)であるときに、テッセレータ50がテッセレーション係数を受信することは、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取ること(186)を備え得る。この場合、複数のドメイン座標を判断するために、テッセレータ50は、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とに基づいて、複数の追加ドメイン座標を判断して、これら判断された追加ドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断できる。テッセレータ50は、これら判断された追加ドメイン座標を出力して、この1つまたは複数の判断された追加ドメイン座標と関連付けられたグラフィカルフィーチャを示す判断された情報を出力することがさらに可能である。
[0203] さらにいくつかの他の例では、テッセレータ50が、ダッシングパターンに基づいて、ドメイン座標を判断でき、ダッシングパターンは、状態としてテッセレータ50内に記憶され得る。本開示の技法によるさらに別の例として、テッセレータ50は、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、これら頂点に関する判断された複数のドメイン座標を出力して、グラフィカルフィーチャを示す情報を第1のパス内で出力できる。テッセレータ50は、第1のパス内でテッセレーションユニットによって出力されたテッセレーション係数を受け取って、第2のパス内で、第1のパス内で受け取ったテッセレーション係数に基づいて、頂点に関する追加ドメイン座標を判断して、これら追加ドメイン座標のうちの1つまたは複数に関するグラフィカルフィーチャを示す情報を判断して、これらの追加ドメイン座標を出力して、これら追加ドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するようにさらに構成され得る。
[0204] いくつかの例では、本開示の技法がDirectX GPU上でパスレンダリングを実行するために使用され得る。さらなる例では、本開示の技法が、OpenVGプラットフォーム上で実装および試験されることが可能であり、かつ/またはOpenVGパスレンダリング標準に準拠することが可能である。追加の例では、本開示の技法が、DirectXバージョン9.3、11、および11+用のパスレンダリングに対するGPUアクセラレーテッド解決策を提供し得る。DirectX 11+は、変形DirectX 11アーキテクチャを指す場合がある。
[0205] いくつかの例では、パスが、例えば、線、楕円弧、2次ベジェ曲線、および3次ベジェ曲線であり得る、複数のパスセグメントを指す場合がある。パスは「クローズ」またはそうでない(すなわち、オープン)のいずれかであり得る。クローズパスは、最後の頂点が線を介して第1の頂点と接続するパスを指す場合があり、この場合、パスは閉鎖型を形成する。オープンパスは、最後の頂点が第1の頂点と接続されるとは限らないパスを指す場合がある。パスはそれ自体と複数回重複し得る。パスレンダリングは、2つの主なタスク、すなわち、フィルとストロークとに分割され得る。
[0206] 本開示で説明する技法は、少なくとも部分的に、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せで実装され得る。例えば、説明した技法の様々な態様は、1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは任意の他の等価な集積回路またはディスクリート論理回路を含む、1つもしくは複数のプロセッサ内、並びにこのような構成要素の任意の組合せ内で実装され得る。「プロセッサ」または「処理回路」という用語は、一般に、単独で、あるいは他の論理回路または、処理を実行する個別ハードウェアなどの他の等価回路との組合せで上記の論理回路のいずれかを指し得る。
[0207] このようなハードウェア、ソフトウェア、およびファームウェアは、本開示で説明する様々な動作および機能をサポートするために、同じデバイス内で、または別のデバイス内で実装され得る。さらに、説明したユニット、モジュール、または構成要素のいずれも、個別であるが相互運用可能な論理デバイスとして、一緒に、または別々に実装され得る。モジュールまたはユニットとしての様々な機能の図は、様々な機能的態様を強調するものであり、このようなモジュールまたはユニットが別々のハードウェアまたはソフトウェア構成要素によって実現されなければならないことを必ずしも暗示するとは限らない。そうではなく、1つもしくは複数のモジュールまたはユニットに関連する機能は、別々のハードウェア構成要素、ファームウェア構成要素、および/またはソフトウェア構成要素によって行われるたり、共通もしくは別々のハードウェア構成要素内またはソフトウェア構成要素内に組み込まれたりし得る。
[0208] また、本開示で説明する技法は、命令を記憶するコンピュータ可読記憶媒体などのコンピュータ可読媒体中に記憶、実施または符号化され得る。コンピュータ可読媒体中に埋め込まれるか、または符号化される命令は、例えば、それらの命令が1つまたは複数のプロセッサによって実行されたときに、1つまたは複数のプロセッサに本明細書で説明する技法を実行させ得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、ハードディスク、CD−ROM、フロッピー(登録商標)ディスク、カセット、磁気媒体、光学媒体、または他の有形のコンピュータ可読記憶媒体を含み得る。
[0209] コンピュータ可読媒体は、上記に記載した有形記憶媒体などの有形記憶媒体に対応するコンピュータ可読記憶媒体を含み得る。コンピュータ可読媒体はまた、例えば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を備え得る。このようにして、「コンピュータ可読媒体」という句は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、および(2)一時的な信号または搬送波などの非有形コンピュータ可読通信媒体に対応し得る。
[0210] 様々な態様および例について説明した。しかしながら、以下の特許請求の範囲から逸脱することなく本開示の構造または技法に変更を行うことができる。
以下に本願の当初の特許請求の範囲に記載された発明を付記する。
[C1] グラフィックス処理ユニット(GPU)のテッセレーションユニットを用いて、受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、
前記テッセレーションユニットを用いて、前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断するステップと、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの1つでないときに、前記テッセレーションユニットを用いて、前記判断された複数のドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力することと
を備える方法。
[C2] 前記テッセレーションユニットを用いて、複数のテッセレーション係数を受け取ることをさらに備え、
前記グラフィカルフィーチャを示す前記情報を出力することが、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力することを備える
C1に記載の方法。
[C3] 前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの1つであることを示すデータを備える、C2に記載の方法。
[C4] 前記複数のテッセレーション係数を受け取ることが、
前記テッセレーションユニットを用いて、第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取ること、
前記ドメインタイプが第1のタイプであるときに、前記テッセレーションユニットを用いて、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取ることとをさらに含む、C2に記載の方法。
[C5] 前記方法が、
前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断することが、
前記テッセレーションユニットを用いて、ラインセグメントの終点法線を判断することと、
前記テッセレーションユニットを用いて、前記ラインセグメントの前記終点法線と、前記スタートキャップに関する前記テッセレーション係数または前記エンドキャップに関する前記テッセレーション係数とに基づいて、スタートキャップまたはエンドキャップのu座標とv座標の対を線形補間することと
をさらに備えることをさらに備える、C4に記載の方法。
[C6] 前記複数のテッセレーション係数を受け取ることが、
前記テッセレーションユニットを用いて、第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取ることをさらに備え、
前記ドメインタイプが前記第2のタイプであるときに、
前記複数のテッセレーション係数を受け取ることが、前記テッセレーションユニットを用いて、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取ることを備えるC2に記載の方法。
[C7] 前記複数のドメイン座標を判断することが、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記判断された複数の追加ドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断することとをさらに備え、前記方法が、
前記テッセレーションユニットを用いて、前記判断された複数の追加ドメイン座標を出力することと、
前記テッセレーションユニットを用いて、前記1つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力することとをさらに備える、C6に記載の方法。
[C8] 前記複数のドメイン座標を判断することが、ダッシングパターンに基づいて前記複数のドメイン座標を判断することをさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、C1に記載の方法。
[C9] 受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断することと、前記複数の頂点に関する前記判断された複数のドメイン座標を出力することと、前記グラフィカルフィーチャを示す前記情報を出力することとが第1のパス内で発生し、前記方法が、
前記テッセレーションユニットを用いて、前記第1のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取ることと、
第2のパス内で、前記テッセレーションユニットを用いて、前記第1のパス内で受け取られた前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断することと、
前記テッセレーションユニットを用いて、前記複数の追加ドメイン座標のうちの1つまたは複数に関するグラフィカルフィーチャを示す情報を判断することと、
前記テッセレーションユニットを用いて、前記複数の追加ドメイン座標を出力することと、
前記テッセレーションを用いて、前記複数の追加ドメイン座標のうちの1つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力することとをさらに備える、C1に記載の方法。
[C10] 受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断して、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力して、
前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断して、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの1つでないときに、前記判断された複数のドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力する
ように構成されたテッセレーションユニットを備えるグラフィックス処理ユニット(GPU)。
[C11] 前記GPUが、
複数のテッセレーション係数を受け取るようにさらに構成され、
前記グラフィカルフィーチャを示す前記情報を出力するために、前記テッセレーションユニットが、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力するようにさらに構成される、C10に記載のGPU。
[C12] 前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの1つであることを示すデータを備える、C11に記載のGPU。
[C13] 前記複数のテッセレーション係数を受け取るために、前記GPUが、
第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取り、
前記ドメインタイプが前記第1のタイプであるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取るようにさらに構成される、C11に記載のGPU。
[C14] 前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断するために、前記GPUが、
ラインセグメントの終点法線を判断して、
前記ラインセグメントの前記終点法線と、スタートキャップに関する前記テッセレーション係数またはエンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのu座標とv座標の対を線形補間するようにさらに構成される、C13に記載のGPU。
[C15] 前記複数のテッセレーション係数を受け取るために、前記GPUが、
第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取るようにさらに構成され、
前記ドメインタイプが前記第2のタイプであるときに、
前記複数のテッセレーション係数を受け取るために、前記GPUが、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取るように構成される、C11に記載のGPU。
[C16] 前記複数のドメイン座標を判断するために、前記GPUが、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さと、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断して、
前記判断された複数の追加ドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断するようにさらに構成され、前記GPUが、
前記判断された複数の追加ドメイン座標を出力して、
前記1つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力するようにさらに構成される、C15に記載のGPU。
[C17] 前記複数のドメイン座標を判断するために、前記GPUが、ダッシングパターンに基づいて前記複数のドメイン座標を判断するようにさらに構成され、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、C10に記載のGPU。
[C18] 受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断するために、前記GPUが、前記複数の頂点に関する前記判断された複数のドメイン座標を出力して、前記グラフィカルフィーチャ発生を示す前記情報を第1のパス内で出力するようにさらに構成され、ここにおいて、前記GPUが、
前記第1のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取って、
第2のパス内で、前記第1のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断して、
前記複数の追加ドメイン座標のうちの1つまたは複数に関するグラフィカルフィーチャを示す情報を判断して、
前記複数の追加ドメイン座標を出力して、
前記複数の追加ドメイン座標のうちの1つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力するようにさらに構成される、C10に記載のGPU。
[C19] 受け取ったプリミティブの複数の頂点に関する複数のドメイン座標を判断するための手段と、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力するための手段と、
前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断するための手段と、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの1つでないときに、前記判断された複数のドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力するための手段とを備える装置。
[C20] 複数のテッセレーション係数を受け取るための手段をさらに備え、
前記グラフィカルフィーチャを示す前記情報を出力するための前記手段が、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力するための手段を備える、C19に記載の装置。
[C21] 前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの1つであることを示すデータを備える、C20に記載の装置。
[C22] 前記複数のテッセレーション係数を受け取るための前記手段が、
第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取るための手段と、
前記ドメインタイプが前記第1のタイプであるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取るための手段とをさらに備える、C20に記載の装置。
[C23] 前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断するための前記手段が、
ラインセグメントの終点法線を判断するための手段と、
前記ラインセグメントの前記終点法線と、スタートキャップに関する前記テッセレーション係数またはエンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのu座標とv座標の対を線形補間するための手段とをさらに備える、C22に記載の装置。
[C24] 前記複数のテッセレーション係数を受け取るための前記手段が、
第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取るための手段と、
前記ドメインタイプが前記第2のタイプであるときに、
前記複数のテッセレーション係数を受け取るための前記手段が、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフィーチャを示す情報とを受け取るための手段を備える、C20に記載の装置。
[C25] 前記複数のドメイン座標を判断するための前記手段が、前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断するための手段と、
前記判断された複数の追加ドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断するための手段とをさらに備え、前記装置が、
前記判断された複数の追加ドメイン座標を出力するための手段と、
前記1つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力するための手段とをさらに備える、C24に記載の装置。
[C26] 前記複数のドメイン座標を判断するための手段が、ダッシングパターンに基づいて前記複数のドメイン座標を判断するための手段をさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、C19に記載の装置。
[C27] 受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断するための前記手段と、前記複数の頂点に関する前記判断された複数のドメイン座標を出力するための前記手段と、前記グラフィカルフィーチャを示す前記情報を出力するための前記手段とが第1のパス内で発生し、前記装置が、
前記第1のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取るための手段と、
第2のパス内で、前記第1のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断するための手段と、
前記複数の追加ドメイン座標のうちの1つまたは複数に関するグラフィカルフィーチャを示す情報を判断するための手段と、
前記複数の追加ドメイン座標を出力するための手段と、
前記複数の追加ドメイン座標のうちの1つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力するための手段とをさらに備える、C19に記載の装置。
[C28] 実行されたときに、1つまたは複数のプロセッサに、
受け取ったプリミティブの複数の頂点に関するドメイン座標を判断させて、
前記複数の頂点に関する前記判断された複数のドメイン座標を出力させて、
前記受け取ったプリミティブに関するドメインタイプがトライドメイン、等値線ドメイン、またはクワッドドメインのうちの1つでないことを判断させて、
前記ドメインタイプが前記トライドメイン、前記等値線ドメイン、または前記クワッドドメインのうちの1つでないときに、前記判断されたドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を出力させる命令を備える非一時的コンピュータ可読記憶媒体。
[C29] 前記1つまたは複数のプロセッサに、
複数のテッセレーション係数を受け取らせ、
前記1つまたは複数のプロセッサに前記グラフィカルフィーチャを示す前記情報を出力させる前記命令が、1つまたは複数のプロセッサに、前記複数のテッセレーション係数に基づいて、前記グラフィカルフィーチャを示す前記情報を出力させる命令をさらに備える、C28に記載の非一時的コンピュータ可読媒体。
[C30] 前記グラフィカル表現を示す前記情報が、前記グラフィカルフィーチャがエンドキャップ、ラインセグメント、および接合のうちの1つであることを示すデータを備える、C29に記載の非一時コンピュータ可読媒体。
[C31] 前記1つまたは複数のプロセッサに前記複数のテッセレーション係数を受け取らせる前記命令が、前記1つまたは複数のプロセッサに、
第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取らせ、
前記ドメインタイプが前記第1のタイプであるときに、ラインセグメントに関するテッセレーション係数、スタートキャップに関するテッセレーション係数、接合に関するテッセレーション係数、およびエンドキャップに関するテッセレーション係数を受け取らせる命令をさらに備える、C29に記載の非一時的コンピュータ可読媒体。
[C32] 前記1つまたは複数のプロセッサに前記受け取ったプリミティブの前記複数の頂点に関する前記複数のドメイン座標を判断させる前記命令が、前記1つまたは複数のプロセッサに、
ラインセグメントの終点法線を判断させて、
前記ラインセグメントの前記終点法線と、スタートキャップに関する前記テッセレーション係数またはエンドキャップに関する前記テッセレーション係数とに基づいて、前記スタートキャップまたは前記エンドキャップのu座標とv座標の対を線形補間させる命令をさらに備える、C31に記載の非一時コンピュータ可読媒体。
[C33] 前記1つまたは複数のプロセッサに前記複数のテッセレーション係数を受け取らせる前記命令前記GPUが前記1つまたは複数のプロセッサにさらに、
第1のタイプおよび第2のタイプのうちの1つであるドメインタイプの表示を受け取らせ、
前記ドメインタイプが前記第2のタイプであるときに、
前記1つまたは複数のプロセッサに前記複数のテッセレーション係数を受け取らせる前記命令が、前記1つまたは複数のプロセッサに、テッセレーションデルタ値と、セグメントの長さ値と、セグメントの逆長さ値と、グラフィカルフフィーチャを表す情報とを受け取らせる命令を備えるC29に記載の非一時的コンピュータ可読媒体。
[C34] 前記1つまたは複数のプロセッサに前記ドメイン座標を判断させる前記命令が、前記1つまたは複数のプロセッサに、
前記テッセレーションデルタ値と、前記セグメントの長さ値と、前記セグメントの逆長さ値と、グラフィカルフィーチャを示す前記情報とに基づいて、複数の追加ドメイン座標を判断させて、
前記判断された複数の追加ドメイン座標のうちの1つまたは複数と関連付けられたグラフィカルフィーチャを示す情報を判断させる命令をさらに備え、前記1つまたは複数のプロセッサに、
前記判断された複数の追加ドメイン座標を出力させて、
前記1つまたは複数の判断された追加ドメイン座標と関連付けられた前記グラフィカルフィーチャを示す前記判断された情報を出力させる命令をさらに備える、C33に記載の非一時的コンピュータ可読媒体。
[C35] 前記1つまたは複数のプロセッサに前記ドメイン座標を判断させる前記命令が、前記1つまたは複数のプロセッサに、ダッシングパターンに基づいて前記複数のドメイン座標を判断させる命令をさらに備え、ここにおいて、前記ダッシングパターンは状態として前記テッセレーションユニット内に記憶される、C28に記載の非一時的コンピュータ可読媒体。
[C36] 前記1つまたは複数のプロセッサに、受け取ったプリミティブの複数の頂点に関する前記複数のドメイン座標を判断させる前記命令が、実行されたときに、前記1つまたは複数のプロセッサに、前記複数の頂点に関する前記判断された複数のドメイン座標を出力させて、前記グラフィカルフィーチャを示す前記情報を第1のパス内で出力させる命令をさらに備え、前記1つまたは複数のプロセッサに、
前記第1のパス内で前記テッセレーションユニットによって出力された複数のテッセレーション係数を受け取らせて、
第2のパス内で、前記第1のパス内で受け取った前記複数のテッセレーション係数に基づいて、複数の頂点に関する複数の追加ドメイン座標を判断させて、
前記複数の追加ドメイン座標のうちの1つまたは複数に関するグラフィカルフィーチャを示す情報を判断させて、
前記複数の追加ドメイン座標を出力させて、
前記複数の追加ドメイン座標のうちの1つまたは複数と関連付けられた前記グラフィカルフィーチャを示す前記情報を出力させる命令をさらに備える、C28に記載の非一時的コンピュータ可読媒体。