JP2011515765A - グラフィックスレンダリングのための多段テッセレーション - Google Patents

グラフィックスレンダリングのための多段テッセレーション Download PDF

Info

Publication number
JP2011515765A
JP2011515765A JP2011500968A JP2011500968A JP2011515765A JP 2011515765 A JP2011515765 A JP 2011515765A JP 2011500968 A JP2011500968 A JP 2011500968A JP 2011500968 A JP2011500968 A JP 2011500968A JP 2011515765 A JP2011515765 A JP 2011515765A
Authority
JP
Japan
Prior art keywords
curve
tessellation
line segments
vertex
gpu
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011500968A
Other languages
English (en)
Other versions
JP5335888B2 (ja
Inventor
ウェイ、ジアン
ジャオ、グオファン
ビ、ニン
ウ、チェフイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2011515765A publication Critical patent/JP2011515765A/ja
Application granted granted Critical
Publication of JP5335888B2 publication Critical patent/JP5335888B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

本開示では、グラフィックスレンダリング中に曲線をテッセレーションするための多段テッセレーション技術について説明する。特に、第1のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第1のセットにテッセレーションする。第2のテッセレーション段は、第1のセットのラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにさらにテッセレーションする。このようにして、第1のテッセレーション段の後にただ1つのラインセグメントによって表された曲線の各部分は、第2のテッセレーション段の後に2つ以上のラインセグメントによって表される。いくつかの例では、曲線をテッセレーションするために3つ以上のテッセレーション段を実行することができる。

Description

本開示は、コンピューティングデバイスに関し、より詳しくはコンピューティングデバイスによるグラフィックスレンダリングに関する。
コンピューティングデバイスは、高度2次元(2D)および3次元(3D)グラフィックスアプリケーションをますます必要としている。例えば、コンピューティングデバイスは、ゲーム、キャラクタアニメーション、グラフィックメニューシステム、および高度グラフィックスレンダリングを必要とする他のアプリケーションをますます提供している。この高度グラフィックスレンダリング、特に3Dグラフィックスでは、かなりの量のデータ処理を伴う。高度グラフィックスレンダリングの品質は、処理リソースの量、利用可能な処理リソースの機能、利用可能な電力の量などによって制限されることがある。
例えば、例えばフレーム毎秒として測定される、高いレンダリングレートの高度グラフィックスレンダリングを必要とするアプリケーションは、利用可能なコンピューティングリソースにかなりの負担をかけることがある。利用可能なコンピューティングリソースへの負担は、コンピューティングリソースにかかる重い負荷のために、他のアプリケーションにおけるパフォーマンスの低下、低品質グラフィックスレンダリング、またはその両方をもたらす。携帯情報端末(PDA)、ワイヤレス通信デバイス、グローバルポジショニングデバイスなど、モバイルコンピューティングデバイスに関して、グラフィックスレンダリングに必要な計算集約的データ処理は、モバイルコンピューティングデバイスの利用可能な電力のかなりの量を消費することがある。
マルチメディアプロセッサは、グラフィックス処理ユニット(GPU)に結合された汎用中央処理ユニット(CPU)を含むことができる。GPUは、コンピュータグラフィックスをディスプレイに表示するためにグラフィックスレンダリング動作を実行することに専用される。GPUは、様々の複雑なグラフィック関連アルゴリズムのための従来の汎用CPUよりも効率的な処理を行う高度並列構造(highly-parallel structure)で構築される。CPU上で実行するグラフィック関連アルゴリズムがグラフィックス処理を必要とするとき、CPUはグラフィックスをテッセレーションし、ディスプレイにレンダリングするためにテッセレーションをGPUに与える。GPUの高度並列性により、GPUは複雑な3次元画像をCPUを用いて直接ディスプレイに描画するよりも迅速に、それらの画像をディスプレイに生成できるようになる。GPUは、多種多様なアプリケーションにおいて使用でき、ビデオゲームアプリケーション、複雑なグラフィカルユーザインタフェースアプリケーション、エンジニアリングまたは芸術アプリケーションのためのコンピュータ支援設計プログラム、あるいは2Dまたは3Dグラフィックスを使用する他のタイプのソフトウェアアプリケーションなど、グラフィック集約的アプリケーションにおいて極めて一般的である。
本開示では、グラフィックスレンダリング中に曲線をテッセレーションするための多段テッセレーション技術について説明する。曲線は、少なくとも2つのテッセレーション段でテッセレーションされる。第1のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第1のセットにテッセレーションする。第2のテッセレーション段は、第1のセットのラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにさらにテッセレーションする。このようにして、第1のテッセレーション段の後にただ1つのラインセグメントによって表された曲線の各部分は、第2のテッセレーション段の後に2つ以上のラインセグメントによって表される。一例では、例えば第1のテッセレーション段は中央処理ユニット(CPU)によって実行され、第2のテッセレーション段はグラフィックス処理ユニット(GPU)または専用テッセレーションハードウェアなど、テッセレーションコンポーネントによって実行される。いくつかの例では、多段テッセレーション技術は、3つ以上のテッセレーション段を含み得る。
一態様による方法は、第1の計算ユニットを用いて曲線を第1のラインセグメントに分割するために曲線をテッセレーションすることと、第2の計算ユニットを用いて第1のラインセグメントのうちの1つによって表される曲線の一部分を第2のラインセグメントにテッセレーションすることとを備える。
他の態様によるデバイスは、曲線を第1のラインセグメントに分割するために曲線をテッセレーションする第1の計算ユニットと、第1のラインセグメントのうちの1つによって表される曲線の一部分を第2のラインセグメントにテッセレーションする第2の計算ユニットとを備える。
別の態様によるデバイスは、曲線を第1のラインセグメントに分割するために曲線をテッセレーションする第1の手段と、第1のラインセグメントのうちの1つによって表される曲線の一部分を第2のラインセグメントにテッセレーションする第2の手段とを備える。
本開示で説明する技術は、ハードウェア、ソフトウェア、ファームウェア、またはその任意の組合せで実装され得る。ソフトウェアで実装された場合、ソフトウェアはマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、またはデジタル信号プロセッサ(DSP)、あるいは他の等価の集積またはディスクリート論理回路など、1つまたは複数のプロセッサを指すことがあるプロセッサで実行され得る。本技術を実行する命令を備えるソフトウェアは、最初にコンピュータ可読媒体に記憶され、プロセッサによってロードされて実行され得る。従って、本開示はまたプロセッサに本開示で説明する様々な技術のいずれかを実行させる命令を備えるコンピュータ可読媒体を企図する。場合によっては、コンピュータ可読媒体はコンピュータプログラム製品の一部をなすことができ、コンピュータプログラム製品は、製造業者に販売され得、および/またはデバイス中で使用され得る。コンピュータプログラム製品はコンピュータ可読媒体を含むことがあり、場合によってはパッケージング材料を含むこともある。
1つまたは複数の態様の詳細を添付の図面および以下の説明に記載する。本技術の他の特徴、目的および利点は、説明および図面ならびに特許請求の範囲から明らかになろう。
多段テッセレーションを実行する例示的なコンピューティングデバイスを示すブロック図。 多段テッセレーションを実行するために同時に動作するCPUおよびGPUを示すブロック図。 曲線の例示的な2段テッセレーションを示す図。 曲線の例示的な2段テッセレーションを示す図。 曲線の例示的な2段テッセレーションを示す図。 曲線の例示的な2段テッセレーションを示す図。 曲線の別の例示的な多段テッセレーションを示す図。 曲線の別の例示的な多段テッセレーションを示す図。 曲線の別の例示的な多段テッセレーションを示す図。 曲線の別の例示的な多段テッセレーションを示す図。 本開示で説明する多段テッセレーション技術に従って曲線をテッセレーションするコンピューティングデバイスの例示的な動作を示す流れ図。 テッセレーションを実行する頂点シェーダの例示的な動作を示す流れ図。 多段テッセレーションを実行する別の例示的なコンピューティングデバイスを示すブロック図。 本開示で説明する技術に従ってテッセレーションを実行する例示的なテッセレーションハードウェア回路を示す概略図。 それぞれ3次多項式を計算する2並列3段乗算および累積(MAC)アレイとして動作するように構成されたテッセレーションハードウェア回路を示す概略図。 それぞれ2次多項式を計算する3並列2段MACアレイとして動作するように構成されたテッセレーションハードウェア回路を示す概略図。 本開示で説明する技術に従ってテッセレーションを実行するコンピューティングデバイスの例示的な動作を示す流れ図。
本開示では、グラフィックスレンダリング中に曲線をテッセレーションするための技術について説明する。特に、本開示では2つ以上のテッセレーション段中に曲線を複数のラインセグメントにテッセレーションする多段テッセレーション技術について説明する。第1のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第1のセットにテッセレーションする。第1のテッセレーション段は、場合によっては曲線を曲線の形状を大まかに表すのに十分なラインセグメントにテッセレーションすることができる。一例では、第1のテッセレーション段はコンピューティングデバイスの中央処理ユニット(CPU)またはグラフィックス処理ユニット(GPU)など、コンピューティングデバイスの第1の計算ユニットによって実行できる。
第2のテッセレーション段は、曲線を追加のラインセグメントにさらにテッセレーションする。特に、第2のテッセレーション段は、第1のセットのラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにテッセレーションする。言い換えれば、第1のテッセレーション段の後にただ1つのラインセグメントによって表された曲線の各部分が第2のテッセレーション段の後、2つ以上のラインセグメントによって表される。第2のテッセレーション段は、コンピューティングデバイスの第2の計算ユニットによって実行され得る。いくつかの態様では、第2の計算ユニットは、第2のテッセレーション段を含むグラフィックス演算の実行に専用のGPUとすることができる。GPUは、いくつかの例では曲線の複数の部分を並列にテッセレーションするために使用できる高度並列構造を有することができる。別の態様では、第2の計算ユニットは第2のテッセレーション段を実行する専用テッセレーションハードウェア回路とすることができる。後述するように、多段テッセレーションは3つ以上のテッセレーション段を含み得る。
図1は、本開示で説明する技術による多段テッセレーションを実行する、例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、セルラーまたは衛星電話、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、テレビジョン、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、あるいはグラフィカル情報を出力する別のタイプのデバイスを含み得る。
図1の例に示すように、コンピューティングデバイス2はユーザ入力インタフェース4、CPU6、デバイスメモリ8、GPU10、GPUメモリ12、ディスプレイインタフェース14およびディスプレイ16を含む。ユーザ入力インタフェース4、CPU6、デバイスメモリ8、GPU10およびディスプレイインタフェース14は、バス18を使用して通信することができる。バス18は、第3世代バス(例えば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(例えば、Advanced Graphics Portハ゛ス、Peripheral Component Interconnect (PCI) Expressバス、またはAdvanced eXentisible Interface (AXI) バス)、あるいは別のタイプのバスまたはデバイス相互接続など、任意の様々なバス構造とされ得る。
CPU6は、コンピューティングデバイス2の動作を制御する汎用または専用プロセッサを含むことができる。CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるために、ユーザがコンピューティングデバイス2に入力を与えることができる。CPU6上で実行されるそれらのソフトウェアアプリケーションは、ワードプロセッサアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインタフェースアプリケーションまたは別のエンドユーザプログラムを含み得る。ユーザは、ユーザ入力インタフェース4を介してコンピューティングデバイス2に結合される、キーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの、1つまたは複数の入力デバイス(図示せず)を介してコンピューティングデバイス2に入力を与えることができる。
デバイスメモリ8は、スタートアップまたはリセット時にコンピューティングデバイス2を構成するために使用できるデバイス構成情報を記憶することができる。デバイスメモリは、またCPU6によって直ちにアクセス可能であり、および/または現在作用されているデータおよび/またはプログラムモジュールを記憶することができる。デバイスメモリ8は、GPU10によって出力された情報などのコンピューティングデバイス2の他のコンポーネントコンポーネントからの情報をさらに記憶することができる。デバイスメモリ8は、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学データ媒体などの1つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスであり得る。
GPU10は、ディスプレイ16上にコンピュータグラフィックスをレンダリングするためのグラフィックス演算の実行に専用とされ得る。従って、CPU6上で実行されるソフトウェアアプリケーションの1つがグラフィックス処理を必要とするとき、CPU6はディスプレイ16にレンダリングするためにグラフィックス情報をGPU10に供給する。GPU10は、いくつかの例では複雑なグラフィックス関連の演算についてCPU6よりも効率的な処理を行う並列構造を用いて構築され得る。GPU10の並列性により、GPU10はCPU6を用いて複雑な2次元(2D)または3次元(3D)画像をディスプレイ16に直接描画するよりも迅速に、それらの画像をディスプレイ16上で作成することができる。いくつかの例では、GPU10はコンピューティングデバイス2のマザーボードに統合され得る。他の例では、GPU10はコンピューティングデバイス2のマザーボードにおけるポートに設置されるグラフィックスカード上に存在するか、またはさもなければコンピューティングデバイス2と相互運用するように構成された周辺デバイス内に組み込まれ得る。GPU10は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、あるいは他の等価な集積またはディスクリート論理回路など、1つまたは複数のプロセッサとされ得る。
GPU10は、GPUメモリ12に直接結合され得る。従って、GPU10はバス18を使用することなくGPUメモリ12からデータを読み取り、GPUメモリ12にデータを書き込むことができる。言い換えれば、GPU10はオフチップメモリの代わりに、ローカルストレージを使用してデータをローカルで処理することができる。これによりGPU10は大量のバストラフィックを受けることがある、バス18を介したデータの読取りおよび書込みの必要がなくなるので、より効率的な方法で動作できるようになる。ただし、いくつかの例ではGPU10は別個のメモリを含まず、代わりにバス18を介してデバイスメモリ8を利用することがある。GPUメモリ12は、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光学データ媒体など、1つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスであり得る。
CPU6および/またはGPU10は、ディスプレイ16を介した提示のために画像情報を表示インタフェース14に供給することができる。複雑な2Dおよび3Dグラフィックスの場合、一般に画像情報はディスプレイ16のためにGPU10によって生成される。ディスプレイ16は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ(SED)、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ16は、コンピューティングデバイス2内で統合され得る。例えば、ディスプレイ16は携帯電話のスクリーンであり得る。代替的に、ディスプレイ16は有線またはワイヤレス通信リンクを介してコンピュータデバイス2に結合されるスタンドアロンデバイスであり得る。例えば、ディスプレイ16はケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されるコンピュータモニタまたはフラットパネルディスプレイであり得る。
CPU6上で実行されるソフトウェアアプリケーションの1つが複雑な2Dまたは3Dグラフィックス画像を提示することを望むとき、CPU6およびGPU10はグラフィックスをディスプレイ16にレンダリングするために同時に動作する。例えば、ビデオゲームアプリケーションの場合、ソフトウェアアプリケーションはユーザにビデオゲーム経験を与えるために、あるシーケンスで一連のビデオフレームを提示することを望むことがある。ソフトウェアアプリケーションは、表示されるグラフィックス画像を形成する1つまたは複数の曲線を定義するコマンドを含む。例えば、ビデオゲームアプリケーションの場合、ビデオゲームアプリケーションはビデオゲームのシーンのグラフィックス画像の曲線を定義するコマンドを含み得る。そのコマンドは、例えばキャラクタとバックグラウンド内のオブジェクトとの境界を定義するいくつかの曲線を定義することができる。
一例では、ソフトウェアアプリケーションは2005年7月28日の文献“OpenVG Specification, Version 1.0”に定義されるように、OpenVGに従って複数の経路、すなわち曲線を定義するコマンドを含み得る。OpenVGは、1つまたは複数のセグメントコマンドを使用して2Dまたは3Dのグラフィックス画像の仕様を可能にするコマンドのセットである。OpenVG仕様に従って、セグメントコマンドは直線セグメント、ベジエ曲線セグメントまたは楕円弧セグメントを定義することができる。OpenVGの拡張では、他のタイプのセグメントを指定することができる。従って、本開示の技術はOpenVG仕様に現在定義されているセグメントコマンドに限定されない。さらにOpenVGのコンテキストで本開示の技術について説明するが、それらの技術はOpenGL、Direct3D、Graphics Device Interface (GDI)、Quartz、QuickDrawなど、他のグラフィックスオーサリング規格のコンテキストで使用され得る。
曲線をディスプレイ16にレンダリングするために、CPU6および/またはGPU10は本開示で説明する多段テッセレーション技術を使用して曲線をラインセグメントにテッセレーションする。一態様では、CPU6は曲線をラインセグメントに分割するために第1のテッセレーション段を実行し、GPU10は曲線を追加のラインセグメントにさらに分割するために第2のテッセレーション段を実行することができる。この例では、CPU6は第1のテッセレーション段中に曲線を曲線の形状を大まかに表すラインセグメントの第1のセットにテッセレーションする。曲線のラインセグメントの各々は、曲線の一部分を表す。第2のテッセレーション段中に、GPU10はラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにテッセレーションする。言い換えれば、第1のテッセレーション段の後にただ1つのラインセグメントによって表された曲線の各部分は、第2のテッセレーション段の後、2つ以上のラインセグメントによって表される。GPU10は、2つ以上のラインセグメントによって表される曲線の複数の部分を並列にテッセレーションするための並列構造を利用することができる。このようにして、いくつかの態様ではコンピューティングデバイス2は完全に並列に曲線の複数の部分に同時に作用するためのGPU10のアクセラレーション機能を利用することができ、それによってレンダリングパフォーマンスが改善される。
CPU6によって実行されるテッセレーションの量は、CPU6の処理負荷および/またはGPU10の処理負荷に応じて変化し得る。上述のように、CPU6は一度に複数のソフトウェアアプリケーションを実行することができ、ソフトウェアアプリケーションの各々はCPU6の処理リソースを使用して計算タスクを実行する。グラフィックス関連のアプリケーションがグラフィックス処理を望んだときに、他の計算タスクによりCPU6に低い負荷がかかっている場合、例えばCPU6の処理負荷がしきい値以下のとき、CPU6は曲線をより多くのラインセグメントにテッセレーションすることができる。これにより、GPU10は曲線の部分をより少ない追加のラインセグメントにテッセレーションすればよいので、GPUのテッセレーション作業負荷は低減する。
グラフィックス関連のアプリケーションがグラフィックス処理を望んだときに、他の計算タスクによりCPU6に大きい負荷がかかっている場合、例えばCPU6の処理負荷がしきい値よりも大きいとき、CPU6は曲線をより少数のラインセグメントにテッセレーションすることができる。例えば、CPU6上でゲームアプリケーションが実行されているので、CPU6が人間プレーヤを相手にすること、ゲームにおける物理効果を計算すること、音響効果を与えること、ゲームグラフィックスを表示することなどをコンピュータに行わせる人工知能などのタスクを実行する必要があるとき、CPU6に大きい負荷がかかることがある。これにより、GPU10は曲線の部分をより多い追加のラインセグメントにテッセレーションしなければならないので、CPU6のテッセレーション作業負荷は低減するが、GPU10のテッセレーション作業負荷は増加する。テッセレーション処理作業負荷は、その上、GPU10の負荷またはCPU6の負荷とGPU10の負荷との組合せに基づいて分散(balance)され得る。このようにして、コンピューティングデバイス2は利用可能な処理リソースに応じてCPU6とGPU10との間でテッセレーション作業負荷を動的に分散することができる。
別の例では、GPU10内で曲線の多段テッセレーションが行われることがある。この例では、CPU6は曲線のテッセレーションを実行しない。代わりに、GPU10内の第1の計算ユニットが曲線を第1のラインセグメントに分割するために第1のテッセレーション段を実行し、GPU10内の第2の計算ユニットが第1のラインセグメントによって表される曲線の部分を追加のラインセグメントにさらに分割するために第2のテッセレーション段を実行する。この例では、コンピューティングデバイス2は、両方のテッセレーション段中に完全に並列に曲線の複数の部分に同時に作用するためのGPU10のアクセラレーション機能を利用することができる。
いくつかの例では、曲線の多段テッセレーションは3つ以上のテッセレーション段を含み得る。例えば、第1のテッセレーション段は、曲線をそれぞれ曲線の一部分を表すラインセグメントの第1のセットにテッセレーションすることができる。第1のテッセレーション段の後にラインセグメントの第1のセットの1つのみによって表された曲線の各部分が第2のテッセレーション段の後、2つ以上のラインセグメントによって表されるように、第2のテッセレーション段中に第1のラインセグメントの各々によって表される曲線の部分をラインセグメントの第2のセットにテッセレーションする。第3のテッセレーション段中に、第2のラインセグメントの各々によって表される曲線の部分を追加のラインセグメントにテッセレーションする。テッセレーション段はいくつでも実行され得る。テッセレーション段は、CPU6、GPU10および/または専用テッセレーションハードウェア(図1に図示せず)によって実行され得る。
いくつかの他の要素は、コンピューティングデバイス2中に含められ得るが、説明を簡単で容易にするため、図1には特に示していない。例えば、コンピューティングデバイス2は、以下で図7に詳細に示し、説明するテッセレーションハードウェア72などの専用テッセレーションハードウェアを含むことができる。その上、本開示で説明する技術は様々な他のアーキテクチャで実装できるので、図1に示すアーキテクチャは例にすぎない。
図2は、図1のCPU6およびGPU10をさらに詳細に示すブロック図である。CPU6およびGPU10は、本開示で説明する多段テッセレーションを使用して2Dまたは3Dグラフィックス画像の1つまたは複数の曲線をテッセレーションするために一緒に動作する。CPU6は、CPU6上で実行される少なくとも1つのソフトウェアアプリケーション20を含む。CPU6上で実行されるソフトウェアアプリケーション20は、ビデオゲームアプリケーション、グラフィカルユーザインタフェースアプリケーション、ポータブル地図作成アプリケーション、スケーラブルベクターグラフィックス(SVG)アプリケーション、エンジニアリングまたは芸術アプリケーションのためのコンピュータ支援設計プログラム、あるいは2Dまたは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションとされ得る。
上述のように、ソフトウェアアプリケーション20は表示されるグラフィックス画像を形成する1つまたは複数の曲線を定義するコマンドを含むことができる。その命令は、OpenVG,OpenGL,Direct3D,Graphics Device Interface(GDI),Quartz、QuickDrawなど、様々なグラフィックスオーサリング規格、すなわちアプリケーションプログラミングインタフェース(API)のいずれかに準拠することができる。例えば、OpenVGの場合、セグメントコマンドのシーケンスによって曲線が定義される。OpenVGの各セグメントコマンドは、移動、直線セグメント、2次または3次ベジエ曲線セグメントあるいは楕円弧セグメントを指定することができる。従って、各セグメントコマンドは曲線の一部分を定義することができる。ソフトウェアアプリケーション20は、任意の形状の曲線を生成するためのセグメントコマンドのシーケンスを含み得る。
曲線をディスプレイ16にレンダリングする準備をするために、CPU6および/またはGPU10は本開示で説明する多段テッセレーション技術を使用して、曲線をラインセグメントにテッセレーションする。一態様では、CPU6は第1のテッセレーション段を実行し、GPU10は第2のテッセレーション段を実行する。ソフトウェアアプリケーション20は、GPUドライバ21と対話するグラフィックスAPI26を呼び出して、CPU6に第1のテッセレーション段を実行させることができる。特に、GPUドライバ21はGPUドライバ21内のテッセレーションモジュール22を呼び出して、第1のテッセレーション段中に曲線をテッセレーションする。テッセレーションモジュール22は、曲線の各セグメント(すなわち、コマンド)を個々にテッセレーションすることができる。言い換えれば、テッセレーションモジュール22は、一度に曲線の1つのセグメントに作用して、曲線の当該セグメントをラインセグメントに分割することができる。他の例では、テッセレーションモジュール22は曲線全体をテッセレーションすることができる。従って、本明細書で使用する「曲線」という用語は、オブジェクトの曲線またはオブジェクトの曲線のセグメントを指すことができる。
テッセレーションモジュール22は、曲線をラインセグメントの第1のセットにテッセレーションする。ラインセグメントの各々は、曲線の一部分を表す。いくつかの例では、ラインセグメントの第1のセットは、少なくとも曲線の概略的な形状を近似することができる。ただし、ラインセグメントの第1のセットは、曲線の形状の高解像度近似を与える必要がない。テッセレーションモジュール22は、例えば曲線を曲線の概略的な形状を保存するために必要な最小数のラインセグメントにテッセレーションすることができる。言い換えれば、テッセレーションモジュール22は、曲線の概略的な形状を依然として保持しながら、できるだけ少ないラインセグメントを生成するように曲線をテッセレーションすることができる。別の例では、CPU6に大きい負荷がかかっているとき、例えばCPU6の処理負荷がしきい値を超えたとき、テッセレーションモジュール22は曲線のテッセレーションを実行することができない。代わりに、CPU6は多段テッセレーションのための曲線情報をGPU10に供給することができる。しかしながら、これによりGPU10の作業負荷が増加する。そこで、CPU6はCPU6とGPU10との間でテッセレーション負荷を分散するように構成され得る。
ラインセグメントの第1のセットを生成するために、テッセレーションモジュール22は曲線上にある1つまたは複数の頂点ポイントを計算する。テッセレーションモジュール22は、例えばグラフィックスオーサリング仕様(例えば、OpenVG)で指定できる、特定のコマンドセグメントに対応する数学的表現を使用して1つまたは複数の頂点ポイントを生成することができる。OpenVGを使用して楕円弧曲線として定義される曲線の場合、例えば、テッセレーションモジュール22は以下の式を使用して頂点ポイントを計算することができる。
Figure 2011515765
ここで、(x,y)はオブジェクト空間における曲線上の頂点ポイントの位置座標、aは楕円の半長軸、bは楕円の半短軸であり、0≦θ≦2πである。ラインセグメントの第1のセットの各ラインセグメントは、各頂点ポイントをその隣接頂点ポイントに接続する直線セグメントである。いくつかの例では、CPU6のテッセレーションモジュール22または他のコンポーネントは、図7に関して詳細に説明するように、曲線の展開された多項式表現を計算することができる。
テッセレーションモジュール22は、曲線をラインセグメントの第1のセットに等しく分割するように、曲線をテッセレーションすることができる。例えば、テッセレーションモジュール22は曲線をN個のラインセグメントに等しく分割することができる。ここで、Nは任意の正の整数値に等しい。上記の楕円弧曲線の例では、例えばテッセレーションモジュール22は開始角θsから終了角θeまでステップサイズ(θs−θe)/Nでθの値を逐次増加させて、楕円弧曲線をN個の等しいラインセグメントに等しく分割することができる。例えば、楕円弧曲線が完全な楕円であり、開始角θs=0,終了角θe=2π,N=8である場合、テッセレーションモジュール22はθ0=θs=0,θ1=π/4,θ2=π/2,θ3=3π/4,θ4=π,θ5=5π/4,θ6=3π/2,θ7=7π/4,θ8=θe=2πにおける頂点ポイントを接続する8つのラインセグメントを生成することができる。他の例では、テッセレーションモジュール22は曲線の曲率がより大きい曲線の部分の場合は曲線をより多くのラインセグメントに分割し、曲線の曲率がより小さい曲線の部分の場合は曲線をより少ないラインセグメントに分割するように、曲線を適応的にテッセレーションすることができる。このようにして、曲線の曲率がより大きい場合はテッセレーションがより密になるように、ステップサイズは非線形となる。再び楕円曲線の例を参照すると、テッセレーションモジュール22はθ=0およびθ=πの近傍(すなわち、ステップサイズθは、より小さい)では、より多くのラインセグメントを生成し、θ=π/2およびθ=3π/2の近傍(すなわち、ステップサイズθは、より大きい)では、より少ないラインセグメントを生成するように、比b/aに基づいてステップサイズθを生成することができる。
GPUドライバ21のテッセレーション負荷コントローラ24は、CPU6の負荷および/またはGPU10の負荷に基づいて、ラインセグメントの数Nを計算することができる。テッセレーション負荷コントローラ24は、例えばCPU6の負荷を監視するオペレーティングシステム(図示せず)から、CPU6の負荷に関するデータを受信することができる。従って、CPU6はそれ自体の作業負荷を監視することができる。テッセレーション負荷コントローラ24は、GPU10の負荷をさらに監視することができる。CPU6がGPU10にタスクを送信し、GPU10の進捗を監視することによってGPU10を制御するので、テッセレーション負荷コントローラ24はGPU10に送信されたコマンドの数に基づいて負荷を判断することができる。
テッセレーションモジュール22は、生成されたラインセグメントを使用して描画プリミティブのリストを生成することができる。テッセレーションモジュール22は、例えばラインセグメントの頂点ポイントをプリミティブのための頂点ポイントの少なくとも一部分として使用して、描画プリミティブのリストを形成することができる。テッセレーションモジュール22は、ポイント、ラインストリップ、ラインループ、別々のライン、三角形ストリップ、三角形ファン、別々の三角形、四辺形ストリップ、別々の四辺形、または他のタイプの多角形を含むいくつかの描画プリミティブのいずれかを生成することができる。
CPU6は、グラフィックスAPI26を呼び出して、GPUドライバ21を介して描画プリミティブ、例えば三角形のリストをGPU10に伝達することができる。グラフィックスAPI26は、CPU6とGPU10との間にインタフェースを与えるソフトウェア命令のセットを含み得る。特に、GPUドライバ21はGPU10に描画プリミティブを表示可能なグラフィックス情報にレンダリングさせる1つまたは複数のコマンドを作成し、発行することができる。当該コマンドは、プリミティブの頂点ポイント、プリミティブの各頂点ポイントに関連する色情報、プリミティブの各頂点ポイントに関連するテクスチャ情報、プリミティブのためのスケーリング情報、プリミティブのための回転情報などを含み得る。GPUドライバ21は、プリミティブに対して実行すべき演算を指定するコマンドを作成することができる。例えば、GPUドライバ21は曲線のテッセレーションおよび/またはレンダリングを実行するようにGPU10に指示するコマンドを作成することができる。
GPU10がCPU6からコマンドを受信すると、コマンドデコーダ28はコマンドを復号し、GPU10の1つまたは複数の処理要素をコマンドにおいて指定された演算を実行するように構成する。コマンドデコーダ28は、さらにコマンド内に含まれる情報(例えば、プリミティブまたは曲線の情報)をGPUメモリ12に、またはGPU10内の1つまたは複数のバッファ(図示せず)内に記憶することができる。コマンドデコーダ28は、GPU10の処理要素に特定のグラフィックス処理演算を実行させる命令のセットをGPU10の処理要素の各々にロードすることができる。図2に示す例では、GPU10の処理要素には頂点シェーダ30、ジオメトリシェーダ32、ラスタライザ34およびピクセルシェーダ36がある。いくつかの例では、GPU10はまた専用テッセレーションハードウェア38を含むことができる。他の処理要素は、GPU10中に含められ得るが、説明を簡単で容易にするために図2には特に示していない。
頂点シェーダ30、ジオメトリシェーダ32、ラスタライザ34およびピクセルシェーダ36は、グラフィックスパイプラインとして動作する。グラフィックスパイプラインとして動作するとき、頂点シェーダ30はコマンドデコーダ28またはGPUメモリ12から受信した入力データの第1のセットに対して1つまたは複数のグラフィックス演算の第1のセットを実行し、中間結果の第1のセットをジオメトリシェーダ32に出力する。ジオメトリシェーダ32は、頂点シェーダ30から受信した中間結果に対して1つまたは複数のグラフィックス演算の第2のセットを実行し、中間結果の第2のセットをラスタライザ34に出力する。コマンドデコーダ22から受信した初期入力データの第2のセットに対して、頂点シェーダ30はグラフィックス演算の第1のセットを実行し、ジオメトリシェーダ32はグラフィックス演算の第2のセットを実行する。ディスプレイのためにグラフィックス画像が生成されるまで、グラフィックス処理は同様の方法で続く。
その上、GPU10は複雑なグラフィックス関連の演算についてCPU6よりも効率的な処理を行う高度並列構造を有し得る。図2にはただ1つのグラフィックスパイプラインが示されているが、GPU10は複数のデータプリミティブに並列に作用する複数の同様のグラフィックスパイプラインを含み得る。言い換えれば、GPU10は完全に並列にいくつかのデータプリミティブに作用することができる、複数の頂点シェーダ、ジオメトリシェーダ、ラスタライザおよびピクセルシェーダを含むことができる。従って、GPU10の高度並列性により、いくつかの例ではGPU10はCPU6を用いて複雑な2Dまたは3Dグラフィックス画像をディスプレイ16に直接描画するよりも迅速に、それらの画像をディスプレイ16上で作成することができる。
頂点シェーダ30は、一度に単一の頂点に作用する。頂点シェーダは、単一の頂点を定義する1つまたは複数の頂点属性のシーケンスを受信するように構成され得る。従来の頂点属性には、位置属性、法線属性、1つまたは複数の色属性、1つまたは複数のテクスチャ属性、1つまたは複数の照明属性などがある。その上、頂点シェーダ30は頂点シェーダ30が使用されているグラフィックス演算に応じて、1つまたは複数のカスタム頂点属性を受信するように構成され得る。いくつかの例では、各頂点を定義するために使用できる頂点属性の数は、属性の特定の最大数に制限され得る。
頂点シェーダ30は、頂点に対していくつかのグラフィックス演算を実行することができる。例えば、頂点シェーダ30は入力頂点を異なる座標系に変換するように構成され得る。特に、頂点シェーダ30は入力として受信される頂点の位置属性をオブジェクト座標空間からデバイス座標空間に変換する。オブジェクト座標空間は、グラフィックス画像がソフトウェアアプリケーション20の命令によってどのように定義されるかを表す。デバイス座標空間は、グラフィックス画像がデバイス、例えばディスプレイ16上でどのように表示されるかを表す。頂点シェーダ30は、例えば回転、変換、スケーリングなどのアフィン演算を使用して、頂点座標を変換することができる。一例では、頂点シェーダ30は以下の式を使用して頂点座標を変換することができる。
Figure 2011515765
ここで、(X’,Y’,1)はデバイス座標空間中の頂点位置、(X,Y,1)はオブジェクト座標空間中の頂点位置、Scale_xはx軸に沿ったスケーリングファクタ、Scale_yはy軸に沿ったスケーリングファクタ、Rotate_xはx軸を中心とする回転、Rotate_yはy軸を中心とする回転、Trans_xはx軸に沿った変換、Trans_yはy軸に沿った変換である。これらの変数は、ソフトウェアアプリケーション20の命令において指定され、グラフィックスAPI26を介してGPU10に供給され、コマンドデコーダ28によって頂点シェーダ30内に構成され得る。
いくつかの例では、頂点シェーダ30は曲線のための変換を1回計算することができる。言い換えれば、頂点シェーダ30は経路にわたるあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用される式の変換を計算することができる。上記の楕円弧曲線の例の場合、頂点シェーダ30は曲線を変換して、次のように変換後の楕円弧曲線の数学的表現を定義することができる。
Figure 2011515765
ここで、(x’,y’)はデバイス座標空間中の位置座標、xtはx軸に沿った変換、ytはy軸に沿った変換、Sfは変換のスケールファクタである。式(4)および式(5)では、頂点シェーダ30が曲線を変換し、スケーリングするにすぎない(すなわち、曲線の回転はない)と仮定する。いくつかの例では、CPU6は頂点シェーダ30の代わりに変換を実行することができる。
頂点シェーダ30は、入力頂点属性に対していくつかの他の演算を実行することができる。頂点シェーダ30は、頂点の色属性の1つまたは複数、頂点のテクスチャ属性の1つまたは複数、頂点の照明属性の1つまたは複数などを変更するための、1つまたは複数の演算を実行することができる。頂点シェーダ30は、同様にあらゆる頂点を変更するか、または一定の性質を有する頂点のみを変更するように構成され得る。従って、頂点シェーダ30は1つの頂点に対して演算の1つのセットを実行するように構成され得、次いで次の頂点に対して演算の異なるセットを実行するように再構成され得る。
ジオメトリシェーダ32は、個々の頂点ポイントにではなく、プリミティブに作用する。ジオメトリシェーダ32は、頂点ポイントのストリング(または頂点ポイントを定義する属性)を受信し、プリミティブを形成する。三角形プリミティブの場合、ジオメトリシェーダ32は三角形プリミティブの3つの頂点ポイントを定義する頂点属性の3つのセットを入力することができる。場合によっては、ジオメトリシェーダ32は隣接するプリミティブの頂点ポイントのための頂点属性をさらに入力することができる。ジオメトリシェーダ32は、プリミティブを廃棄するか、または入力プリミティブの頂点ポイントの頂点属性を使用して1つまたは複数の新しいプリミティブを生成することができる。場合によっては、GPU10がジオメトリシェーダ32を含まないことがある。
ラスタライザ34は、頂点属性に基づいてジオメトリシェーダ32によってまたはジオメトリシェーダ32がない場合は頂点シェーダによって出力されたプリミティブをピクセルに変換する。ラスタライザ34は、プリミティブに対してクリッピング演算を実行し、ピクセルシェーダ36のためのプリミティブを準備することができる。ラスタライザ34は、スクリーン中のピクセルのうちのどのピクセルがオブジェクトのジオメトリ内にあり、従って描画される必要があるかを判断することができる。さらに、ラスタライザ34はピクセルデータを生成するために頂点データの補間を実行する。ラスタライザ34の出力は、ピクセルシェーダ36に供給される。ピクセルシェーダ36(フラグメントシェーダと呼ばれることがある)は、ディスプレイ16上に表示される各ピクセルに対してグラフィックス演算を実行する。ピクセルシェーダ36は、例えば各ピクセルロケーションにおいて表示する色値を生成するために、ピクセルごとのテクスチャ化、フォグ演算および着色演算を実行することができる。
本開示の技術によれば、GPU10は曲線を追加のラインセグメントにテッセレーションするために少なくとも第2のテッセレーション段を実行するように構成され得る。例えば、シェーダ30,32または36は、CPU6からのラインセグメントによって表される曲線の部分を曲線の部分をより正確に表す追加のラインセグメントに再分割するために、第2のテッセレーション段を実行することができる。別の例として、専用テッセレーションハードウェア38がCPU6からのラインセグメントによって表される曲線の部分を曲線の部分をより正確に表す追加のラインセグメントに再分割するために、第2のテッセレーション段を実行することができる。いずれの場合も、第2のテッセレーション段により、CPU6によって生成されたラインセグメントの各々によって表される曲線の部分は、より詳細なラインセグメント(またはサブセグメント)の第2のセットに再分割される。シェーダ30,32または36、あるいはテッセレーションハードウェア38は、元の曲線を追加のラインセグメントにテッセレーションする。言い換えれば、シェーダ30,32または36、あるいはテッセレーションハードウェア38は、CPU6によって生成されたラインセグメントではなく、ソフトウェアアプリケーション20によって定義された実際の曲線を追加のラインセグメントに分割する。このようにして、第1のテッセレーション段の後にただ1つのラインセグメントによって表された曲線の各部分は、第2のテッセレーション段の後に、2つ以上のラインセグメントによって表される。追加のラインセグメントは、曲線のより良い表現、例えば曲線のより高い解像度表現をもたらす。
シェーダ30,32または36、あるいはテッセレーションハードウェア38は、変換中に実行されるスケーリングの量に基づいて第2のテッセレーション段を実行することができる。特に、シェーダ30,32または36、あるいはテッセレーションハードウェア38がラインセグメントの各々によって表される曲線の部分をテッセレーションした後の追加のラインセグメントの数は、スケールファクタの関数である。スケールファクタは、オブジェクト座標空間からデバイス座標空間への頂点ポイントの変換中に行われたスケーリングの量の近似値である。CPU6は、第2のテッセレーション段のための追加のラインセグメントの数を決定する際に使用するためにスケールファクタを計算し、それをGPU10の1つまたは複数のコンポーネントに供給することができる。CPU6は、多種多様な技術のいずれかを使用してスケールファクタを計算することができる。それらの技術では、スケールファクタのための様々な値が生じることがあるが、生じた値のすべてが変換中に実行されるスケーリングの量を概して表す。CPU6は、変換行列を使用してスケールファクタを計算することができる。例えば、CPU6は、Scale_xおよびScale_y、すなわち、座標空間の変換中に使用されるスケーリング変数の乗算として、スケールファクタを計算することができる。別の例では、CPU6はScale_xおよびScale_yの最大値として、スケーリングファクタを計算することができる。3Dの場合、CPU6はビューポートスケールファクタおよび/または変換行列によって、スケールファクタを計算することができる。
シェーダ30,32または36、あるいはテッセレーションハードウェア38は、スケールファクタが増加するにつれて、ラインセグメントによって表される曲線の部分をより多くの追加のラインセグメントに再分割する。従って、曲線の各部分をテッセレーションするための追加のラインセグメント(またはサブセグメント)の数Mをスケールファクタの関数として計算することができる。スケールファクタに応じて曲線の部分を再分割することにより、シェーダ30,32または36、あるいはテッセレーションハードウェア38は、曲線が大幅にスケーリングされているときは、曲線のより多くの詳細を保持し、一方、曲線がスケーリングされていないか、または少しスケーリングされているにすぎないときは、曲線のより少ない詳細を可能にすることができる。このようにして、本開示で説明する多段テッセレーション技術は、グラフィックス画像の解像度要件に適応する動的テッセレーションを可能にする。高解像度が必要なとき(例えば、大量のスケーリング)、シェーダ30,32または36、あるいはテッセレーションハードウェア38は曲線をより多くテッセレーションし、高解像度が不必要なときは(例えば、少量のスケーリングまたはスケーリングなし)、シェーダ30,32または36、あるいはテッセレーションハードウェア38は曲線をより少なくテッセレーションし、GPU処理リソースが節約される。従って、本開示の技術は品質を保証するために曲線を過度にテッセレーションするのではなく、スケーリングに基づいて必要に応じて追加のラインセグメントを生成する。従って、グラフィックスパイプラインを通して余分のラインセグメントを送信せず、それによってより効率的な方法で計算リソースを利用することで、パイプラインパフォーマンスおよび電力消費を改善する。
曲線の各部分をテッセレーションするための追加のラインセグメントまたはサブセグメントの数は、グローバル定数としてシェーダ30,32または36、あるいはテッセレーションハードウェア38にロードできる。シェーダ30,32または36、あるいはテッセレーションハードウェア38は、CPU6によって供給されたラインセグメントの1つによって表される曲線の部分をM個の追加のラインセグメントにテッセレーションする。シェーダ30,32または36、あるいはテッセレーションハードウェア38によって生成されたM個の追加のラインセグメントは、元の曲線のさらなるテッセレーションを表す。従って、CPU6によって生成された単一のラインセグメントを用いて曲線の部分を表すのではなく、M個のラインセグメントによって曲線の部分を表す。この場合も、M個のサブセグメントはCPU6によって供給されたラインセグメントのテッセレーションではなく、元の曲線のテッセレーションを表す。このようにして、シェーダ30,32または36、あるいはテッセレーションハードウェア38は、CPU6によって供給されたラインセグメントをさらに近似するのではなく、曲線をさらに近似する。
上記の式(1)および式(2)によって定義された楕円弧曲線に関して、シェーダ30,32または36、あるいはテッセレーションハードウェア38は、CPU6からのラインセグメントの1つによって表される曲線の部分を追加のラインセグメントに分割することができる。例えば、シェーダ30,32または36、あるいはテッセレーションハードウェア38は、θ0=0における頂点からθ1=π/4における頂点までのラインセグメントに対応する曲線の部分をM個の追加のラインセグメントに分割することができる。例えば、M=4である場合、シェーダ30,32または36、あるいはテッセレーションハードウェア38は、θ0=0における頂点からθ1=π/4における頂点までの曲線の部分を4つの追加のラインセグメントにさらにテッセレーションすることができる。特に、この例ではシェーダ30,32または36、あるいはテッセレーションハードウェア38は、θ00=θ0=0,θ01=π/16,θ02=π/8,θ03=3π/16,θ04=θ1=π/4における頂点ポイントを接続する4つの追加のラインセグメントを生成することができる。この4つの追加のラインセグメントの頂点ポイントは、上記の式(4)および式(5)で与えられるように、変換後の楕円曲線の数学的表現を使用して計算され得る。
GPU10は、CPU6によって生成された他の7つのラインセグメント44によって表される曲線の他の部分を同様に完全に並列にテッセレーションすることができる。従って、GPU10は第2のテッセレーション段を同時に曲線の複数の部分に対して実行する。このようにして、コンピューティングデバイス2はGPU10の並列構造を利用して、CPU6によって生成されたラインセグメントのうちの他のラインセグメントによって表される曲線の部分に対して第2のテッセレーション段を完全に並列に実行することができる。そうすることは、曲線のテッセレーションのGPUアクセラレーションをもたらし、それによってレンダリングパフォーマンスを改善する。
一例では、ジオメトリシェーダ32が曲線の部分の第2のテッセレーション段を実行することができる。上述のように、ジオメトリシェーダ32は個々の頂点にではなく、一度に複数の頂点ポイント(例えば、プリミティブ)に作用する。従って、ジオメトリシェーダ32は複数の頂点ポイントを出力することができ、それによって単一のステップで曲線の部分をM個の追加のラインセグメントにテッセレーションする。場合によっては、ジオメトリシェーダ32は曲線の各異なる部分が異なる数の追加のラインセグメントに分割されるように構成され得、従って曲線の部分の形状に基づいて曲線の部分を動的にテッセレーションすることができる。ジオメトリシェーダ32を使用して曲線の部分を追加のラインセグメントにテッセレーションすることについては、図3に関してより詳細に説明する。
別の例では、頂点シェーダ30が曲線の部分の第2のテッセレーション段を実行することができる。これは、例えばGPU10がジオメトリシェーダ32を含んでいない場合である。上述のように、頂点シェーダ30は一度に単一の頂点に作用し、従って一般的には追加の頂点を生成することができない。ただし、頂点シェーダ30は第2のテッセレーション段を実行するために、1つまたは複数のカスタム頂点属性を入力するように構成され得る。特に、頂点シェーダ30は頂点を定義するために入力された頂点属性が、ラインセグメントの単一の頂点ではなく、ラインセグメントを実際に定義するように構成され得る。このようにして、頂点シェーダ30は単一の頂点を実際に表さないので、「仮想頂点」を入力するものと見なすことができる。例えば、頂点シェーダ30はラインセグメントの開始頂点属性および終了頂点属性を含む頂点属性を入力するように構成され得る。開始頂点属性はラインセグメントが開始する頂点を表し、終了頂点属性はラインセグメントが終了する頂点を表す。頂点シェーダ30は、開始頂点属性および終了頂点属性に作用して、曲線の部分を追加のラインセグメントにテッセレーションする。頂点シェーダ30を使用して曲線の部分を追加のラインセグメントにテッセレーションすることの一例については、図4に関してより詳細に説明する。
別の例では、ピクセルシェーダ36が曲線の部分の第2のテッセレーション段を実行することができる。頂点シェーダ30のように、ピクセルシェーダ36は一度に単一のピクセルに作用する。従って、ピクセルシェーダ36はラインセグメントの単一のピクセルではなく、ラインセグメントを定義する1つまたは複数のカスタムピクセル属性を入力するように構成され得る。ピクセルシェーダ36は、追加のラインセグメントをさらに定義する追加のピクセル属性を生成する。
別の例では、テッセレーションハードウェア38が曲線の部分の第2のテッセレーション段を実行することができる。テッセレーションハードウェア38は、例えば第2のテッセレーション段を実行するために、1つまたは複数の乗算および累積(MAC)演算ユニットを含むことができる。一例では、テッセレーションハードウェア38は以下で詳細に説明するように、異なる次数の多項式を計算するように構成可能であるMAC演算ユニットのパイプラインアレイから形成され得る。この場合、テッセレーションハードウェア38は、多項式係数とCPU6から頂点ポイントを生成すべき曲線に沿った少なくとも1つのロケーションとを入力する。頂点ポイントを生成すべき曲線に沿ったロケーションは、例えばベジエ曲線の場合はtの値、または楕円弧曲線の場合はθの値とされ得る。テッセレーションハードウェア38のMAC演算ユニットは、多項式係数に作用して特定のロケーションにおける頂点ポイントの1つまたは複数の座標を生成する。テッセレーションハードウェア38の演算は、以下に詳細に説明するテッセレーションハードウェア回路72の演算とほぼ同様である。
上述の多段テッセレーションは、CPU6とGPU10との間で分散されているが、多段テッセレーションはGPU10内で実行され、および/またはGPU10と専用テッセレーションハードウェア(例えば、図7に示すテッセレーションハードウェア72)との間で分散され得る。従って、CPU6は曲線のテッセレーションを実行しなくてもよい。代わりに、GPU10内の第1の計算ユニットが曲線をラインセグメントに分割するために第1のテッセレーション段を実行し、GPU10内の第2の計算ユニットが曲線を追加のラインセグメントにさらに分割するために第2のテッセレーション段を実行する。例えば、テッセレーションは頂点シェーダ30、ジオメトリシェーダ32、ピクセルシェーダ36およびテッセレーションハードウェア38の任意の組合せの間で、またはそれらのコンポーネントと専用テッセレーションハードウェア(例えば、テッセレーションハードウェア72)との間で分割され得る。
上述では、多段テッセレーション技術について2つの段を含むものとしたが、多段テッセレーション技術は3つ以上の段を含むことができる。例えば、多段テッセレーションは、曲線をラインセグメントの第1のセットにテッセレーションすることができる第1のテッセレーション段、ラインセグメントの第1のセットの各々によって表される曲線の部分をラインセグメントの第2のセットにテッセレーションする第2のテッセレーション段、およびラインセグメントの第2のセットの各々によって表される曲線の部分を追加のラインセグメントにテッセレーションする第3のテッセレーション段を含むことができる。テッセレーション段は、いくつでも実行され得る。テッセレーション段は、CPU6、頂点シェーダ30、ジオメトリシェーダ32、ピクセルシェーダ36および/またはテッセレーションハードウェア38,72(図7)のいずれかの間で分散され得る。
本開示で説明する技術は、様々な他のアーキテクチャで実装され得るので、図2に示すアーキテクチャは例にすぎない。例えば、GPU10は頂点シェーダ30、ジオメトリシェーダ32およびピクセルシェーダ36に起因する機能を実行することができる単一のシェーダコアを利用することができる。単一のシェーダコアは、例えばグラフィックス演算があるパイプラインの段に基づいて頂点シェーダ30、ジオメトリシェーダ32およびピクセルシェーダ36として機能するように、コマンドデコーダ28によって構成され得る。別の例として、テッセレーションハードウェア38はGPU10内に配置されず、代わりにコンピューティングデバイス2(図1)の別個のコンポーネントとされ、図7に示すバス18を介してGPU10に結合することができる。さらに、図1に示す機能はハードウェアおよび/またはソフトウェアコンポーネントの任意の適切な組合せによって実現され得る。
図3A〜図3Dは、曲線40の例示的な2段テッセレーションを示す図である。図3Aは、ソフトウェアアプリケーション20(図2)によって定義された曲線40を示す。曲線40は、4つのベジエ曲線セグメント、すなわちポイントAからポイントBまでの第1のベジエ曲線セグメント42A、ポイントBからポイントCまでの第2のベジエ曲線セグメント42B、ポイントCからポイントDまでの第3のベジエ曲線セグメント42C、およびポイントDからポイントAに戻る第4のベジエ曲線セグメント42Dのシーケンスとして定義される。曲線40をディスプレイ16にレンダリングするために、CPU6および/またはGPU10は、本開示で説明する多段テッセレーション技術を使用して曲線40をラインセグメントにテッセレーションする。上述のように、CPU6のテッセレーションモジュール22は、いくつかの態様では曲線40の一部分を一度にテッセレーションすることができる。図3B〜図3Dに示すテッセレーションの例では、CPU6および/またはGPU10はベジエ曲線セグメント42Aをテッセレーションする。CPU6および/またはGPU10は、同様の方法でベジエ曲線セグメント42B〜42Dをテッセレーションすることができる。
図3Bは、ポイントAとポイントBとの間のベジエ曲線セグメント42Aによって定義された曲線40の部分を示す。ベジエ曲線セグメント42Aは、パラメトリック表現を使用して定義される多項式曲線として、ソフトウェアアプリケーション20によって定義され得る。特に、ベジエ曲線セグメント42Aは(x(t),y(t))という形式のポイントのセットとして表すことができ、ここでx(t)およびy(t)はtの多項式であり、tは0から1まで連続的に変化する。図3に示すベジエ曲線セグメント42Aは3次ベジエ曲線セグメントであり、これはオブジェクト座標空間において以下の式によって表され得る。
Figure 2011515765
ここで、(xs,ys)はベジエ曲線セグメント42Aの開始ポイント、(xe,ye)はベジエ曲線セグメント42Aの終了ポイント、(xc1,yc1)および(xc2,yc2)は2つの内部制御ポイントである。
第1の計算ユニットは、ベジエ曲線セグメント42A(すなわち、ポイントAとポイントBとの間の曲線40の部分)を複数のラインセグメント44A〜44G(総称して「ラインセグメント44」)にテッセレーションする。図3Cは、第1の計算ユニットによるテッセレーションの後のベジエ曲線セグメント42Aを示す。一例では、第1のテッセレーション段を実行する第1の計算ユニットはCPU6のテッセレーションモジュール22とされ得る。他の例では、第1の計算ユニットはシェーダ30,32または36、あるいはテッセレーションハードウェア38のうちの1つとされ得る。図3Cに示す例では、第1の計算ユニットはベジエ曲線セグメント42Aを7つのラインセグメント44にテッセレーションする。特に、第1の計算ユニットは上記の式(6)および式(7)を使用してベジエ曲線セグメント42Aに沿った頂点ポイントを計算する。
第1の計算ユニットがテッセレーションモジュール22であるとき、テッセレーション負荷コントローラ24はCPU6の負荷、GPU10の負荷またはそれらの組合せに応じて曲線を特定の数のラインセグメントにテッセレーションするように、テッセレーションモジュール22を構成され得る。テッセレーション負荷コントローラ24は、例えばCPU6の負荷がしきい値以下であるときはテッセレーションモジュール22によって生成されるラインセグメントの数を増加させ、CPU6の負荷がしきい値を超えたときはラインセグメントの数を減少することができる。図3Cに示す例では、テッセレーション負荷コントローラ24はベジエ曲線セグメント42Aを7つのラインセグメント44にテッセレーションするようにテッセレーションモジュール22を構成する。テッセレーション負荷コントローラ24は、上述のテッセレーション負荷分散(load balancing)技術を使用してベジエ曲線セグメント42Aをより多くのラインセグメントまたはより少ないラインセグメントにテッセレーションするように、テッセレーションモジュール22を構成することができる。図3Cの例では、ラインセグメント44は曲線、すなわちベジエ曲線セグメント42Aの形状を大まかに表している。
ベジエ曲線セグメント42Aをラインセグメント44にテッセレーションするために、第1の計算ユニットは頂点ポイントAに等しい開始ポイント(xs,ys)と頂点ポイントA7に等しい終了ポイント(xe,ye)との間の1つまたは複数の頂点ポイントを計算する。そのために、第1の計算ユニットはベジエ曲線セグメント42Aを表す式、すなわち式(6)および式(7)を使用してA0(すなわち、A)とA7(すなわち、B)との間の頂点ポイントを計算することができる。図3Cに示す例では、第1の計算ユニットは頂点ポイントA1〜A6を計算する。A0およびA7は、それぞれ開始ポイント(xs,ys)および終了ポイント(xe,ye)に等しいので、既知である。
次いで、第1の計算ユニットはベジエ曲線セグメント42Aを生成された頂点ポイント間の複数のラインセグメント44として表す。特に、第1の計算ユニットはベジエ曲線セグメント42Aを頂点ポイントA0(図3Aおよび図3BのポイントAと同じ)から頂点ポイントA1までのラインセグメント44A、頂点ポイントA1から頂点ポイントA2までのラインセグメント44B、頂点ポイントA2から頂点ポイントA3までのラインセグメント44C、以下同様、として表す。
図3Cに示す例では、第1の計算ユニットは、ベジエ曲線セグメント44Aをラインセグメント44に等しく分割する。言い換えれば、第1の計算ユニットは一定のステップサイズだけtを逐次増加させる。ただし、いくつかの例では第1の計算ユニットは適応型テッセレーション技術を使用して、曲線の形状に基づいて、すなわちラインセグメントごとに異なるステップサイズを用いて、ベジエ曲線セグメント44Aをテッセレーションすることができる。例えば、第1の計算ユニットは曲線の曲率がより大きいときは(例えば、例における頂点ポイントA5とA7との間)より小さいステップサイズを用いてtを増分し、曲線の曲率がより小さいときは(例えば、ポイントA0とA5との間)より大きいステップサイズを用いてtを増分することができる。
さらなるテッセレーションなしにラインセグメント44をレンダリングすると、ベジエ曲線42Aのいくつかの部分、特に頂点ポイントAとAとの間の画像品質が低下することがある。これは、例えばGPU10によるデバイス座標空間への変換中の大きいスケールファクタの適用時に、曲線を高解像度に拡大するとき、特に当てはまる。従って、第2の計算ユニットが第2のテッセレーション段を実行して、ベジエ曲線セグメント42Aを追加のラインセグメントにテッセレーションする。第2の計算ユニットは、例えばシェーダ30,32または36、あるいはテッセレーションハードウェア38のうちの1つとすることができる。以下でより詳細に説明するように、第2のテッセレーション段はラインセグメント44を実際にテッセレーションするのではなく、ラインセグメント44によって表されるベジエ曲線セグメント42Aの部分をテッセレーションする。追加のラインセグメントへのベジエ曲線セグメント42Aのテッセレーションを例示のために、ラインセグメント44Aによって表される、ベジエ曲線セグメント42Aの一部分のテッセレーションに関して説明する。ただし、第2の計算ユニットは完全に並列に、同じようにラインセグメント44B〜44Gをテッセレーションすることができる。
第2のテッセレーション段を実行する前に、GPU10の頂点シェーダ30またはCPU6は曲線をオブジェクト座標空間からデバイス座標空間に変換する。頂点シェーダ30またはCPU6は、例えば各ラインセグメントの各頂点ポイントを変換するのではなく、上記の式(3)を使用して曲線を定義するポイントを変換することができる。頂点シェーダ30またはCPU6は、開始ポイント(xs,ys),終了ポイント(xe,ye)ならびに内部制御ポイント(xc1,yc1)および(xc2,yc2)をデバイス座標空間(x’s,y’s),(x’e,y’),(x’c1,y’c1)および(x’c2,y’c2)に変換することができる。このようにして、ベジエ曲線42Aの部分はデバイス座標空間に変換され、次のように定義され得る。
Figure 2011515765
変換の後に、ラインセグメント44Aによって表される、ベジエ曲線セグメント42Aの部分(すなわち、A0からA1までのベジエ曲線セグメント42Aの部分)を追加のラインセグメントにテッセレーションするために、第2の計算ユニットは第2のテッセレーション段を実行する。ラインセグメント44Aによって表されるベジエ曲線セグメント42Aの部分は、頂点ポイントA0とA1との間のベジエ曲線セグメント42Aの部分である。図3Dに示す例では、第2の計算ユニットは頂点ポイントA0とA1との間のベジエ曲線42Aの部分を4つのラインセグメントにテッセレーションする。特に、第2の計算ユニットは頂点ポイントA0とA1との間に頂点ポイントA01,A02およびA03を生成する。第2のテッセレーション段により、頂点ポイントA0とA1との間のベジエ曲線セグメント42Aの部分は単一のラインセグメントのみではなく、4つのラインセグメントによって表されるようになり、従って曲線のその部分に関するより多くの詳細が与えられる。図3Dに示すように、第2のテッセレーション段中に生成された追加のラインセグメントは特に頂点ポイントA5とA7との間で曲線のより良い表現を与える。
一態様では、第2の計算ユニットがラインセグメントの各々によって表される曲線の部分をテッセレーションした後の追加のラインセグメントの数は、スケールファクタの関数とされ得る。第2の計算ユニットは、スケールファクタが増加するにつれて、ラインセグメント44によって表される曲線の部分をより多くの追加のラインセグメントに再分割する。スケールファクタに応じて曲線の部分を再分割することにより、第2の計算ユニットは曲線が大幅にスケーリングされているときは曲線のより多くの詳細を保持し、一方、曲線がスケーリングされていないか、または少しスケーリングされているにすぎないときは曲線のより少ない詳細を可能にすることができる。
本技術は、式(1)および式(2)に従って定義される楕円弧曲線、または(xs,ys)における開始ポイント、終了ポイント(xe,ye)および制御ポイント(xc,yc)を含み、オブジェクト座標空間において次のように定義できる2次ベジエ曲線など、OpenVGに定義される他の曲線に対して同様の方法で適用され得る。
Figure 2011515765
その上、本技術は任意の延長によってOpenVG規格に追加される任意の曲線定義とともに利用され得る。同様に、本技術は他のグラフィックスオーサリング規格を使用して定義される曲線をテッセレーションするために使用され得る。
図4A〜図4Dは、曲線の多段テッセレーションの一例を示す図である。図4Aは、ポイントAとポイントBとの間のベジエ曲線セグメント42Aを示す。図3に関して上述したように、ベジエ曲線セグメント42Aは上記の式(6)および式(7)によってオブジェクト座標空間で表される。
第1の計算ユニットは、ベジエ曲線セグメント42A(すなわち、ポイントAとポイントBとの間の曲線40の部分)を複数のラインセグメント44A〜44G(総称して「ラインセグメント44」)にテッセレーションする。一例では、第1のテッセレーション段を実行する第1の計算ユニットはCPU6のテッセレーションモジュール22とされ得る。他の例では、第1の計算ユニットはシェーダ30,32または36、あるいはテッセレーションハードウェア38のうちの1つとされ得る。図4Bは、第1の計算ユニットによるテッセレーションの後のベジエ曲線セグメント42Aを示す。図4Bに示す例では、第1の計算ユニットは頂点ポイントA〜Aを計算して、ベジエ曲線セグメント42Aを頂点ポイントの各々を隣接頂点ポイントと接続する7つのラインセグメント44A〜44Gにテッセレーションする。
図3A〜図3Dで上述したように、さらなるテッセレーションなしにラインセグメント44をレンダリングすると、ベジエ曲線42Aの少なくともいくつかの部分、特に頂点ポイントAとAとの間の画像品質が低下することがある。そこで、第2のコンピューティングデバイスが第2のテッセレーション段を実行して、ベジエ曲線セグメント42Aを追加のラインセグメントにテッセレーションする。追加のラインセグメントへのベジエ曲線セグメント42Aのテッセレーションを例示のために、ラインセグメント44Aによって表される、ベジエ曲線セグメント42Aの一部分のテッセレーションに関して説明する。ただし、第2のコンピューティングデバイスは完全に並列に、同じようにラインセグメント44B〜44Gによって表される、ベジエ曲線セグメント42Aの部分をテッセレーションすることができる。
第2のテッセレーション段を実行する前に、上記の式(10)および式(11)で定義される数学的表現を生成するために、頂点シェーダ30、あるいはGPU10またはCPU6の何らかの他のコンポーネントがベジエ曲線セグメント42Aをオブジェクト座標空間からデバイス座標空間に変換する。デバイス座標空間への変換の後に、ラインセグメント44Aによって表される、ベジエ曲線セグメント42Aの部分(すなわち、A0からA1までのベジエ曲線セグメント42Aの部分)を追加のラインセグメントにテッセレーションするために、第2の計算ユニットが第2のテッセレーション段を実行する。
例えば、頂点シェーダ30の場合、頂点シェーダ30はラインセグメントの単一の頂点の代わりに、ラインセグメントを実際に定義する頂点属性を入力するように構成される。例えば、頂点シェーダ30はラインセグメントがそれぞれ開始および終了する頂点を表すラインセグメントの開始頂点属性(例えば、A0)および終了頂点属性(例えば、A1)を含む頂点属性を入力するように構成される。頂点シェーダ30は、頂点A0とA1との間の少なくとも1つの追加の頂点を計算することができる。上述のように、各頂点を定義するために使用できる頂点属性の数を属性の特定の最大数に制限することができる。従って、頂点シェーダ30は単一のパスにおいて限られた数の追加の頂点ポイントを計算することのみが可能である。図4Cは、第2のテッセレーション段の後のベジエ曲線セグメント42Aを示す。図4Cに示す例では、頂点シェーダ30は新しい頂点ポイントA01を表す1つの追加の頂点属性を計算することのみが可能である。従って、頂点シェーダ30はベジエ曲線42Aの部分をラインセグメントの1つの追加のセットにテッセレーションすることのみが可能である。ただし、他の例では頂点シェーダ30はパスごとに2つ以上の追加の頂点属性を計算することができる。
場合によっては、利用可能な頂点属性の最大数は、ベジエ曲線セグメント42Aの部分を完全にテッセレーションするのに十分な数とすることができる。しかしながら、利用可能な頂点属性の最大数が十分でない場合、頂点シェーダ30は再帰的に、すなわち第3のテッセレーション段を実行することによって、さらなる追加のラインセグメントを計算することができる。言い換えれば、頂点シェーダ30は再帰的に、すなわち第2のテッセレーション段の後に第3のテッセレーション段が続く2つ以上のテッセレーション段を実行することができる。例えば、第2のテッセレーション段の後、頂点シェーダ30は第2のテッセレーション段中に生成されたラインセグメントを表す開始頂点属性A0と終了頂点属性A01とを含む頂点属性の新しいセットを入力する。頂点シェーダ30は、第3のテッセレーション段中に頂点A0とA01との間に少なくとも1つの追加の頂点を計算する。図4Dは、頂点シェーダ30による第3のテッセレーション段の後のベジエ曲線セグメント42Aを示す。図4Dに示す例では、頂点シェーダ30が今度はA0とA1との間のベジエ曲線42Aの部分を1つのラインセグメントではなく、4つのラインセグメントにテッセレーションした。このようにして、頂点シェーダ30は曲線の部分を曲線42Aのより良い表現、特に頂点ポイントA5とA7との間を与える追加のラインセグメントに再帰的にテッセレーションすることができる。上述の例では、頂点シェーダ30が第2および第3のテッセレーション段を実行するが、GPU10の他の計算ユニットが第2および第3のテッセレーション段を実行することができる。例えば、第2および第3のテッセレーション段は頂点シェーダ30、ジオメトリシェーダ32、ピクセルシェーダ36およびテッセレーションハードウェア38の任意の組合せによって実行され得る。
図5は、本開示で説明する多段テッセレーション技術に従って曲線をテッセレーションするコンピューティングデバイスの例示的な動作を示す流れ図である。コンピューティングデバイス2の第1の計算ユニットは、曲線を第1のラインセグメントにテッセレーションする(50)。ラインセグメントの第1のセットを生成するために、第1の計算ユニットは曲線上にある1つまたは複数の頂点ポイントを計算する。例えば、第1の計算ユニットは曲線の数学的表現、例えば曲線の多項式表現を使用して1つまたは複数の頂点ポイントを生成する。第1のラインセグメントは、頂点ポイントの各々を隣接頂点ポイントに接続する。ラインセグメントの各々は、曲線の一部分を表す。一例では、第1の計算ユニットはCPU6のテッセレーションモジュール22とされ得る。この場合、テッセレーション負荷コントローラ24はCPU6の処理負荷および/またはGPU10の処理負荷に基づいて、テッセレーションモジュール22によって実行されるテッセレーションの量を制御することができる。別の例では、第1の計算ユニットはGPU10のコンポーネントの1つ、例えばシェーダ30,32または36、あるいはテッセレーションハードウェア38のうちの1つとされ得る
第1の計算ユニットは、ラインセグメントを第2の計算ユニットに与える(52)。例えば、第1の計算ユニットがテッセレーションモジュール22であるとき、テッセレーションモジュール22はラインセグメントの頂点ポイントを使用して描画プリミティブのリストを生成し、グラフィックスAPI26およびGPUドライバ21を介して描画プリミティブをGPU10に与える。テッセレーションモジュール22は、ポイント、ラインストリップ、ラインループ、別々のライン、三角形ストリップ、三角形ファン、別々の三角形、四辺形ストリップ、別々の四辺形、または他のタイプの多角形を含むいくつかの描画プリミティブのいずれかを生成することができる。
第1または第2の計算ユニットは、曲線をオブジェクト座標空間からデバイス座標空間に変換する(54)。例えば、GPU10の頂点シェーダ30は上記の式(3)を使用して曲線をデバイス座標空間に変換する。変換は、曲線ごとに1回計算され得る。言い換えれば、経路にわたるあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用されるポイントの各々において変換を計算することができる。第1または第2の計算ユニットは、変換中に実行されるスケーリングの量を表すスケールファクタを計算する(56)。スケールファクタは、変換中に使用されるスケーリング変数、例えば、式(3)のScale_xおよびScale_yに基づいて計算され得る。
第2の計算ユニットは、第2のテッセレーション段を実行して曲線の部分を追加のラインセグメントにテッセレーションする(58)。例えば、第2の計算ユニットはGPU10のコンポーネントの1つとされ得る。そこで、GPU10は第1の計算ユニットによって計算される各ラインセグメントの頂点ポイントの各々の間の追加の頂点ポイントを計算する。追加の頂点ポイントは、例えば変換の後にデバイス座標空間における曲線の数学的表現を使用して計算できる。従って、GPU10は第1の計算ユニットによって生成されたラインセグメントによって表される曲線の部分の各々を第1の計算ユニットによって生成された単一のラインセグメントの代わりに、複数のラインセグメントを用いて表す。このようにして、GPU10によって実行される第2のテッセレーション段は、曲線をより正確に表すために曲線の追加のラインセグメントを生成する。いくつかの例では、スケールファクタが増加するにつれて、さらなる詳細を保持するために、さらなる追加のラインセグメントが計算されるように、曲線の部分のために生成される追加のラインセグメントの数は、スケールファクタの関数とされ得る。
GPU10は、1つまたは複数のシェーダ(例えば、頂点シェーダ30、ジオメトリシェーダ32またはピクセルシェーダ36)を使用して、第2のテッセレーション段を実行することができる。GPU10のシェーダは、曲線の2つ以上の部分を並列にテッセレーションすることができる。従って、GPU10は第2のテッセレーション段を同時に曲線の複数の部分に対して実行する。そうすることは曲線のテッセレーションのGPUアクセラレーションをもたらし、それによってレンダリングパフォーマンスを改善する。他の例では、GPU10の内部のテッセレーションハードウェア38が第2のテッセレーション段を実行することができる。他の例では、GPU10の外部のテッセレーションハードウェア、例えば図7のテッセレーションハードウェア72が第2のテッセレーション段を実行することができる。第2のテッセレーション段を実行した後に、GPU10はテッセレーションされたラインセグメントを使用して曲線をディスプレイにレンダリングする(59)。図5の流れ図を2段テッセレーションとして説明するが、3つ以上のテッセレーション段を含むように技術を拡張することができる。
図6は、テッセレーションを実行する、図2の頂点シェーダ30などのシェーダの例示的な動作を示す流れ図である。ピクセルシェーダ36によって同様の技術を利用して、曲線を追加のラインセグメントにテッセレーションすることができる。頂点シェーダ30は、ラインセグメントを定義する複数の頂点属性を入力する(60)。例えば、頂点シェーダ30はラインセグメントが開始する頂点ポイントの位置座標を表す開始頂点属性(例えば、A0)と、頂点を表す、ラインセグメントが終了する頂点ポイントの位置座標を表す終了頂点属性(例えば、A1)とを含む頂点属性を入力する。このようにして、頂点シェーダ30によって入力される頂点属性は、単一の頂点ポイントの代わりにラインセグメントを表す。
頂点シェーダ30は、曲線を追加のラインセグメントにテッセレーションするために、頂点A0とA1との間の追加の頂点ポイントの座標を計算する(62)。頂点シェーダ30は、別の頂点属性として追加の頂点ポイントを計算することができる。頂点シェーダ30は、例えば変換の後にデバイス座標空間における曲線の数学的表現を使用して、頂点A0とA1との間の追加の頂点ポイントの座標を計算することができる。頂点シェーダ30は、頂点シェーダ30が曲線の部分を所望のM個の追加のラインセグメントにテッセレーションしたかどうかを判断する(64)。
第1のパス中に頂点シェーダ30によって生成された所望の数のラインセグメントがMよりも小さい場合、頂点シェーダ30は頂点属性の最大数に達したかどうかを判断する(66)。上述のように、頂点属性の数を頂点属性の特定の最大数に制限することができる。従って、頂点シェーダ30は単一のパスにおいて限られた数の追加の頂点ポイントを計算することのみが可能である。
頂点属性の最大数に達しなかった場合、頂点シェーダ30は追加の頂点ポイントの別の座標を計算する(62)。ただし、頂点属性の最大数に達した場合、頂点シェーダ30は計算された頂点属性を出力する(68)。頂点シェーダ30は、第1のパス中に生成された追加のラインセグメントの1つを表す頂点属性の新しいセットを入力する(60)。言い換えれば、利用可能な頂点属性の最大数は曲線の部分を完全にテッセレーションするのに十分な追加の頂点ポイントを生成するのに十分でなかった。従って、頂点シェーダ30は再帰的に、すなわち2つ以上のテッセレーション段を実行することによって、さらなる追加のラインセグメントを計算することができる。
第1のパス中に生成された所望の数のラインセグメントがMよりも大きいか、またはそれに等しい場合、頂点シェーダ30は計算された頂点属性を出力する(68)。言い換えれば、利用可能な頂点属性の最大数は、曲線の部分を完全にテッセレーションするのに十分な追加の頂点ポイントを生成するのに十分であった。次いで、頂点シェーダ30はCPU6によって生成された別のラインセグメントを表す複数の頂点属性を入力する(60)。
図7は、本開示で説明する技術に従ってテッセレーションを実行する、別の例示的なコンピューティングデバイス70を示すブロック図である。図7のコンピューティングデバイス70は、GPU10を含まないことを除いて図1のコンピューティングデバイス2と実質的に同様である。代わりに、コンピューティングデバイス70は以下で詳細に説明するように第2のテッセレーション段を実行する専用テッセレーションハードウェア回路72を含む。GPU10の代わりに、CPU6によってグラフィックスレンダリング機能を実行することができる。
曲線をディスプレイ16にレンダリングするために、上記で詳細に説明したようにCPU6は第1のテッセレーション段を実行して曲線をそれぞれ曲線の一部分を表すラインセグメントの第1のセットに分割する。特に、CPU6はラインセグメントを定義する、曲線に沿った頂点ポイントを計算する。CPU6は、曲線のタイプに関連する式を使用して、例えば楕円弧曲線の場合、式(1)および式(2)、3次ベジエ曲線の場合、式(6)および式(7)、または2次ベジエ曲線の場合、式(10)および式(11)を用いて、頂点ポイントを計算することができる。第1のテッセレーション段中にCPU6によって実行されるテッセレーションの量は、CPU6の処理負荷に応じて変化することができる。CPU6は、図2に示すCPU6のすべての特徴を含むことができる。
第2のテッセレーション段中に、テッセレーションハードウェア回路72はラインセグメントの各々によって表される曲線の部分を曲線の形状をより精細に表す追加のラインセグメントにテッセレーションする。例えば、テッセレーションハードウェア回路72は第2のテッセレーション段を実行するために、1つまたは複数の乗算および累積(MAC)演算ユニットを含むことができる。一例では、以下で詳細に説明するようにテッセレーションハードウェア回路72は異なる次数の多項式を計算するように構成可能であるMAC演算ユニットのパイプラインアレイからなる。この場合、テッセレーションハードウェア回路72は多項式係数とCPU6から頂点ポイントを生成すべき曲線に沿った少なくとも1つのロケーションとを入力する。頂点ポイントを生成すべき、曲線に沿ったロケーションは、例えば、ベジエ曲線の場合はtの値、または楕円弧曲線の場合はθの値とされ得る。テッセレーションハードウェア回路72のMAC演算ユニットは、多項式係数に作用して特定のロケーションにおける頂点ポイントの1つまたは複数の座標を生成する。
CPU6は、テッセレーションハードウェア回路72にロードする多項式係数を決定するために、曲線の展開された多項式表現を計算することができる。言い換えれば、CPU6は曲線を次の展開された多項式p(x)として表すことができる。
Figure 2011515765
ここで、Kiは多項式のi次項の多項式係数、xは変数、i=0,1,...,n−1,nであり、nは多項式の次数である。CPU6は、多項式展開を使用して曲線の展開された多項式表現を計算することができる。例えば、CPU6は式(10)および式(11)に多項式展開を実行して、次のように2次ベジエ曲線の展開された多項式表現を計算することができる。
Figure 2011515765
ここで、P2x,P1x,P0x,P2y,P1y,およびP0yは、P2x=(xs−2*xc+xe),P1x=2*(xc−xs),P0x=xs,P2y=(ys−2*yc+ye),P1y=2*(yc−ys),およびP0y=ysと定義される多項式係数である。他の例では、CPU6はいくつかの多項式近似アルゴリズムのいずれかを使用して多項式表現を計算することができる。式(1)および式(2)を使用して定義される楕円弧曲線の場合、CPU6はテイラー展開、最小二乗近似または別の近似技術を使用して多項式表現を計算することができる。例えば、CPU6はsin(θ)を多項式S2*θ2+S1*θ+S0と、cos(θ)を多項式C2*θ2+C1*θ+C0と近似することによって、楕円弧曲線のための展開された多項式表現を計算することができる。ここで、S2,S1,S0,C2,C1,およびC0は、特定の近似技術を使用して計算された多項式係数である。
さらに、CPU6は上記の式(3)に従って、曲線をオブジェクト座標空間からデバイス座標空間に変換することができる。CPU6は、曲線の多項式表現を計算するより前、または曲線の多項式表現を計算した後のいずれかに、曲線をオブジェクト座標空間からデバイス座標空間に変換することができる。上述のように、CPU6は曲線ごとに1回変換を計算することができる。言い換えれば、CPU6は曲線に沿ったあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用されるポイントの各々において変換を計算することができる。例えば、2次ベジエ曲線の場合、CPU6はラインセグメントの第1のセットの計算された頂点ポイントの各々のための変換を計算する代わりに、開始ポイント(xs,ys)、終了ポイント(xe,ye)および制御ポイント(xc,yc)の変換を計算することができる。他の例では、テッセレーションハードウェア回路72、またはコンピューティングデバイス70の何らかの他のコンポーネントが変換を実行することができる。
変換中に、CPU6は変換中に実行されるスケーリングの量に近似するスケールファクタを決定することができる。いくつかの例では、第2のテッセレーション段中に行われるテッセレーションの程度はスケールファクタの関数とされ得る。例えば、CPU6はスケールファクタに基づいて、曲線の各部分をテッセレーションする追加のラインセグメントの数を計算することができる。CPU6が曲線の各部分をテッセレーションする追加のラインセグメントの数を計算した後、CPU6は新しい頂点ポイントを生成すべき、曲線の部分に沿ったロケーションを決定する。4つの追加のラインセグメントに分割される、θ0=0からθ1=π/4までの楕円曲線の一部分の場合、例えば、CPU6はθ0=0からθ1=π/4までの曲線の部分を4つの追加のラインセグメントに等しく分割するために、ロケーションθ01=π/16,θ02=π/8,θ03=3π/16における新しい頂点を計算する必要があると判断する。
CPU6は、曲線の展開された多項式表現のための多項式係数と頂点ポイントの座標を生成すべき曲線上の1つまたは複数のロケーションとをテッセレーションハードウェア回路72に与える。上述の楕円弧曲線例では、新しい頂点ポイントの座標を生成すべき曲線上のロケーションは、θ01,θ02およびθ03の値、またはそれらの値の10進近似値である。CPU6は、計算された多項式係数とロケーションとをテッセレーションハードウェア回路72に直接ロードすることができ、またはポインタをテッセレーションハードウェア回路72にプログラムすることができ、その場合テッセレーションハードウェア回路72が多項式係数とロケーションとをロードする。いずれの場合も、多項式係数とロケーションとは、テッセレーションされている曲線のタイプに基づいてテッセレーションハードウェア回路72に動的にロードされる。
以下で詳細に説明するように、テッセレーションハードウェア回路72はCPU6によって指定された多項式係数とロケーションとを使用して指定されたロケーションにおける頂点ポイントの座標を計算する。このようにして、コンピューティングデバイス70はテッセレーション作業負荷の一部分をCPU6からテッセレーションハードウェア回路72にオフロードするために、テッセレーションハードウェア回路72を利用することができる。いくつかの例では、例えばCPU6が高い処理負荷を受けているとき、テッセレーションハードウェア回路72はテッセレーションのすべてを実行することができる。テッセレーションハードウェア回路72は頂点ポイントの座標をCPU6に出力することができ、CPU6はディスプレイ16上での曲線の提示のための追加のグラフィックスレンダリング動作を実行することができる。代替的に、CPU6またはテッセレーションハードウェア回路72は、後の処理のためにデバイスメモリ8中に新しい頂点ポイントを記憶することができる。図2に示したようなテッセレーションハードウェア回路72がGPU10内にある例では、テッセレーションハードウェア回路72は頂点ポイントの座標をGPU10の頂点シェーダ30、ジオメトリシェーダ32またはピクセルシェーダ36など他のコンポーネントに出力することができる。
いくつかの他の要素をコンピューティングデバイス70中に含めることもできるが、説明を簡単で容易にするために図7には特に示していない。例えば、コンピューティングデバイス70はバス18を介して他のコンポーネントに結合された、図1のGPU10などのGPUを含むことができる。その上、本開示で説明する技術は様々な他のアーキテクチャで実装できるので、図7に示すアーキテクチャは例にすぎない。
図8は、本開示で説明する技術に従ってテッセレーションを実行する、例示的なテッセレーションハードウェア回路72を示す概略図である。テッセレーションハードウェア回路72は、(図8中で「REG」と標示された)複数のレジスタ82、(図8中で「MUX」と標示された)複数のマルチプレクサ84、複数の乗算演算ユニット86および複数の累積演算ユニット88を含む。乗算演算ユニット86と後続の累積演算ユニット88は、点線89によって示されたMAC演算ユニットを形成する。テッセレーションハードウェア回路72は、パイプラインで構成される構成可能MACアレイを備える。従って、生成された頂点座標である最後のMAC演算ユニットの出力を除いて、各MAC演算ユニットの出力は後続のMAC演算ユニットへの入力である。
MUX84は、コンフィギュアビリティをテッセレーションハードウェア回路72に与える。特に、MUX84は2つの入力のうちの1つを出力するように構成され得る。実線によって表されたMUX84の各々への入力は、MUX84がパススルーする入力に対応する。言い換えれば、実線で示す入力の各々の値はMUX84の各々がそれぞれ出力する値である。点線で表されたMUX84の各々への入力は、MUX84がパススルーしない入力に対応する。従って、テッセレーションハードウェア回路72は図9および図10に対してより詳細に説明する、MUX84によってパススルーされるMUX入力を変更することによって構成され得る。
図8に示すテッセレーションハードウェア回路72は、6次多項式まで計算するように構成可能な6段構成可能MACアレイである。テッセレーションハードウェア回路72は、より小さい次数の多項式を計算する複数のより短いパイプラインに構成され得る。例えば、図8に示す6段構成可能MACアレイはそれぞれ3次多項式を計算する2並列3段MACアレイ(図9)、それぞれ2次多項式を計算する3並列2段MACアレイ(図10)などとして動作するように構成され得る。このようにして、テッセレーションハードウェア回路72はテッセレーションプロセス中にハードウェアアクセラレーションを行うように構成され得、従って結果としてレンダリングパフォーマンスが改善される。6段構成可能MACアレイとして示されているが、テッセレーションハードウェア回路72はより多いまたはより少ない構成可能なパイプラインMAC段を含むことができる。
テッセレーションハードウェア回路72は、テッセレーションされている曲線のタイプに基づいて、実行時に動的に再構成され得る。例えば、2次多項式として表される2次ベジエ曲線または楕円弧曲線をテッセレーションするとき、CPU6はテッセレーションハードウェア回路72を3並列2段MACアレイとして動作するように構成され得る。3次多項式として表される3次ベジエ曲線をテッセレーションするとき、CPU6はテッセレーションハードウェア回路72を2並列3段MACアレイとして動作するように構成され得る。
テッセレーションハードウェア回路72は、頂点ポイントを計算する際に使用するための多項式係数P0〜P6をCPU6から受信する。多項式係数は、頂点ポイントのx座標を計算するための多項式係数、または頂点ポイントのy座標を計算するための多項式係数のいずれかとすることができる。テッセレーションハードウェア回路72が2つ以上の多段MACアレイとして動作する例では、多項式係数は頂点ポイントのx座標およびy座標を計算するための多項式係数とすることができる。上述のように、CPU6は多項式係数P0〜P6を計算し、計算された多項式係数P0〜P6をテッセレーションハードウェア回路72に与える。CPU6は、計算された多項式係数P0〜P6をテッセレーションハードウェア回路72に直接ロードすることができ、またはポインタをテッセレーションハードウェア回路72にプログラムすることができ、その場合テッセレーションハードウェア回路72が、多項式係数P0〜P6をロードする。いずれの場合も、多項式係数P0〜P6はテッセレーションされている曲線のタイプに基づいて動的にロードされる。
その上、CPU6は頂点ポイントを生成すべき曲線に沿ったロケーションに対応する入力(I)をテッセレーションハードウェア回路72に与える。OpenVGを使用して定義される楕円弧曲線の場合、入力はθの特定の値とすることができる。OpenVGを使用して定義されるベジエ曲線の場合、入力はtの特定の値とすることができる。テッセレーションハードウェア回路72は、出力(O)を計算するために、多項式係数P0〜P6を使用して入力に様々な乗算および累積演算を実行する。出力は、入力によって識別された曲線に沿ったロケーションにおける頂点ポイントの座標(例えば、x座標またはy座標)を表す。テッセレーションハードウェア回路72は、次の形式の6次多項式を出力する。
Figure 2011515765
テッセレーションハードウェア回路72が、生成される所望の数のラインセグメントの頂点ポイントを計算するまで、テッセレーションハードウェア回路は曲線に沿った入力ロケーションと多項式係数とを受信し続ける。4つの追加のラインセグメントに分割される、θ0=0からθ1=π/4までの楕円曲線の一部分の場合、例えば、θ0=0からθ1=π/4までの曲線の部分を4つの追加のラインセグメントに等しく分割するための頂点ポイントを生成するために、CPU6は入力θ01=π/16,θ02=π/8,θ03=3π/16をテッセレーションハードウェア回路72に与える。
図9は、それぞれ3次多項式を計算する2並列3段MACアレイとして動作するように構成されたテッセレーションハードウェア回路72を示す概略図である。特に、最初の3つのMAC演算ユニットは、次の形式の第1の3次多項式を出力する第1の3段MACアレイとして動作する。
Figure 2011515765
最後の3つのMAC演算ユニットは、次の形式の第2の3次多項式を出力する第2の3段MACアレイとして動作する。
Figure 2011515765
テッセレーションハードウェア回路72は、入力I0およびI1ならびに多項式係数P0,P0’,P1,P2,P3,P4,P5およびP6を使用して2つの座標を計算する。一例では、テッセレーションハードウェア回路72はロケーションIの頂点ポイントを定義する2つの座標を計算することができる。言い換えれば、テッセレーションハードウェア回路72はロケーションIの頂点ポイントを定義するx座標およびy座標(すなわち(x,y))を計算することができる。この場合、入力I0とI1とは等しく、多項式係数P0,P1,P2およびP3はx座標を計算するための多項式の多項式係数に対応し、多項式係数P0’,P4,P5およびP6はy座標を計算するための多項式の多項式係数に対応する。
他の例では、テッセレーションハードウェア回路72は異なる頂点ポイントに対応する2つの座標を計算することができる。例えば、テッセレーションハードウェア回路72は曲線に沿った異なるロケーションI0およびI1の2つの頂点ポイントのx座標を表す2つのx座標を計算することができる。この場合、I0とI1とは等しくなく、多項式係数P0,P1,P2およびP3ならびに多項式係数P0’,P4,P5およびP6は両方とも、x座標を計算するための多項式の多項式係数に対応する。頂点ポイントのためのx座標を計算した後、テッセレーションハードウェア72は頂点ポイントのy座標に関連する係数を入力し、曲線に沿った様々なロケーションIの頂点ポイントのためのy座標を計算する。いずれの場合も、テッセレーションハードウェア回路72は単一のパスにおいて頂点ポイントのための2つの座標値を出力することによって、テッセレーションプロセス中にハードウェアアクセラレーションを行う。
図10は、それぞれ2次多項式を計算する3並列2段MACアレイとして動作するように構成されたテッセレーションハードウェア回路72を示す概略図である。特に、MAC演算ユニットの第1のペアは、次の形式の第1の2次多項式を出力する第1の2段MACアレイとして動作する。
Figure 2011515765
MAC演算ユニットの第2のペアは、次の形式の第2の2次多項式を出力する第2の2段MACアレイとして動作する。
Figure 2011515765
MAC演算ユニットの最後のペアは、次の形式の第3の2次多項式を出力する第2の3段MACアレイとして動作する。
Figure 2011515765
テッセレーションハードウェア回路72は、入力I0,I1,およびI2ならびに多項式係数P0,P0’,P0’’,P1,P2,P3,P4,P5およびP6を使用して3つの座標を計算する。上述のように、テッセレーションハードウェア回路72は異なる頂点ポイントに対応する3つの座標を計算することができる。例えば、テッセレーションハードウェア回路72は曲線に沿った異なるロケーションI0,I1およびI2の3つの頂点ポイントのx座標を表す3つのx座標を計算することができる。この場合、I0とI1とI2とは等しくなく、多項式係数P0,P1,P2,多項式係数P0’,P3およびP4ならびに多項式係数P0’’,P5およびP6は、それぞれx座標を計算するための2次多項式の多項式係数に対応する。頂点ポイントのためのx座標を計算した後、テッセレーションハードウェア72は頂点ポイントのy座標に関連する係数を入力し、曲線に沿ったI0,I1およびI2の頂点ポイントのためのy座標を計算する。
代替的に、テッセレーションハードウェア回路72は曲線に沿った頂点ポイントのx座標とy座標の両方の組合せを計算することができる。言い換えれば、テッセレーションハードウェア回路72は曲線に沿った様々なロケーションIの2つのx座標と1つのy座標、または2つのy座標と1つのx座標を計算することができる。この場合、入力I0とI1とは等しく、多項式係数P0,P1およびP2はx座標を計算するための多項式の多項式係数に対応し、多項式係数P0’,P3およびP4はy座標を計算するための多項式の多項式係数に対応する。一方、I2はI0とI1とは異なり、多項式係数P0’’,P5およびP6はx座標のための多項式係数またはy座標のための多項式係数のいずれかとすることができる。いずれの場合も、テッセレーションハードウェア回路72は単一のパスにおいて頂点ポイントのための3つの座標値を出力することによって、テッセレーションプロセス中にハードウェアアクセラレーションを行う。
図11は、本開示で説明する技術に従ってテッセレーションを実行するコンピューティングデバイスの例示的な動作を示す流れ図である。ソフトウェアアプリケーション20は、CPU6のテッセレーションモジュール22を呼び出して、曲線をラインセグメントの第1のセットにテッセレーションする(90)。ラインセグメントの第1のセットを生成するために、テッセレーションモジュール22は曲線上にある1つまたは複数の頂点ポイントを計算する。例えば、テッセレーションモジュール22は曲線の数学的表現を使用して1つまたは複数の頂点ポイントを生成する。ラインセグメントは、頂点ポイントの各々を隣接頂点ポイントに接続する。ラインセグメントの各々は曲線の一部分を表す。
CPU6は、曲線の展開された多項式表現を計算する(92)。例えば、CPU6はsin(θ)を多項式S2*θ2+S1*θ+S0と、cos(θ)を多項式C2*θ2+C1*θ+Cと近似することによって、式(1)および式(2)に従って定義される楕円弧曲線の展開された多項式表現を計算する。展開された多項式表現を以下に与える。
Figure 2011515765
ここで、P2x,P1x,P0x,P2y,P1yおよびP0yはP2x=−a*C2,P1x=−a*C1,P0x=−a*C0,P2y=b*C2,P1y=b*C1およびP0y=b*C0として定義される多項式係数である。
さらに、CPU6は曲線をオブジェクト座標空間からデバイス座標空間に変換する(94)。CPU6は、曲線の多項式表現を計算するより前、または曲線の多項式表現を計算した後のいずれかに、デバイス座標空間に変換することができる。上述のように、CPU6は曲線ごとに1回変換を計算することができる。言い換えれば、CPU6は曲線に沿ったあらゆる頂点ポイントのための変換を計算する代わりに、曲線を定義するために使用されるポイントの各々において変換を計算することができる。例えば、2次ベジエ曲線の場合、CPU6はラインセグメントの第1のセットの計算された頂点ポイントの各々のための変換を計算する代わりに、開始ポイント(xs,ys)、終了ポイント(xe,ye)および制御ポイント(xc,yc)の変換を計算することができる。他の例では、テッセレーションハードウェア回路72、またはコンピューティングデバイス70の何らかの他のコンポーネントが変換を実行することができる。
変換中に、CPU6は変換中に実行されるスケーリングの量に近似するスケールファクタを決定する(96)。CPU6は、スケールファクタに基づいて、第2のテッセレーション段のための追加のラインセグメントの数を決定する(98)。特に、CPU6はスケールファクタが増加するにつれて、第2のテッセレーション段がラインセグメントによって表される曲線の部分をより多くの追加のラインセグメントに再分割することを決定する。CPU6は、曲線の各部分をテッセレーションする追加のラインセグメントの数を計算した後、新しい頂点ポイントを生成すべき曲線の部分に沿ったロケーションを決定する(100)。4つの追加のラインセグメントに分割される、θ0=0からθ1=π/4までの楕円曲線の一部分の場合、例えばCPU6はθ0=0からθ1=π/4までの曲線の部分を4つの追加のラインセグメントに等しく分割するために、ロケーションθ01=π/16,θ02=π/8,θ03=3π/16における新しい頂点を計算する必要があると判断する。
CPU6は、曲線をテッセレーションするようにテッセレーションハードウェア回路72を構成する(102)。例えば、CPU6は曲線の展開された多項式表現のための多項式係数をテッセレーションハードウェア回路72に与えることができる。CPU6は、計算された多項式係数をテッセレーションハードウェア回路72に直接ロードすることができ、またはポインタをテッセレーションハードウェア回路72にプログラムすることができ、その場合テッセレーションハードウェア回路72が多項式係数とロケーションとをロードする。いずれの場合も、多項式係数はテッセレーションされている曲線のタイプ、例えば楕円弧曲線、2次ベジエ曲線、3次ベジエ曲線などに基づいて、テッセレーションハードウェア回路72に動的にロードされる。
CPU6は、1つまたは複数の頂点ポイントの座標を生成すべき曲線に沿ったロケーションを識別する1つまたは複数の入力をテッセレーションハードウェア回路72に与える(104)。上述のように、テッセレーションハードウェア回路72は、それぞれ頂点ポイントの座標を計算する2並列3段MACアレイ(図9)として動作するように構成されるか、またはそれぞれ頂点ポイントの座標を計算する3並列2段MACアレイ(図10)として動作するように構成され得る。テッセレーションハードウェア回路は、2つ以上の頂点ポイントのx座標、2つ以上の頂点ポイントのy座標、同じ頂点ポイントのx座標およびy座標またはそれらの組合せを計算するように構成され得る。
CPU6は、テッセレーションハードウェア72によって計算された1つまたは複数の座標を受信する(106)。CPU6は、計算すべき頂点ポイントのためのさらなる座標があるかどうかを判断する(108)。計算すべき頂点ポイントのためのさらなる座標があるとき、CPU6はテッセレーションハードウェア回路102を構成し、追加の座標を計算するための入力を与え続ける。計算すべきさらなる座標がないとき、CPU6はテッセレーションされたラインセグメントを使用して、曲線をディスプレイにレンダリングする(110)。
本明細書で説明した技術は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。モジュールまたはコンポーネントとして説明する機能は、集積論理デバイスに一緒に、またはディスクリートであるが相互運用可能な論理デバイスとして別々に実装され得る。場合によっては、様々な特徴は集積回路チップまたはチップセットなどの集積回路デバイスとして実装され得る。ソフトウェアで実装した場合、これらの技術は実行されると、上記で説明した方法の1つまたは複数を実行する命令を備えるコンピュータ可読媒体によって少なくとも部分的に実現され得る。コンピュータ可読媒体は、パッケージング材料を含む、コンピュータプログラム製品の一部をなすことができる。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、磁気または光学データ記憶媒体などを備えることができる。本技術は、追加または代替として、命令またはデータ構造の形態でコードを搬送または伝達し、コンピュータによってアクセス、読取り、および/または実行できるコンピュータ可読通信媒体によって、少なくとも部分的に実現され得る。
コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、フィールドプログラマブル論理アレイFPGA、または他の等価な集積またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。従って、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技術の実装に好適な他の構造のいずれかを指す。さらに、いくつかの態様では、本明細書で説明する機能をグラフィックス画像をテッセレーションするように構成された専用のソフトウェアアプリケーションまたはハードウェアモジュールの内部に与えることができる。従って、本開示はまた本開示で説明した技術の1つまたは複数を実装する回路を含む様々な集積回路デバイスのいずれかを企図する。そのような回路は、単一の集積回路チップまたは複数の相互運用可能な集積回路チップで提供できる。
様々な態様について説明した。これらおよび他の態様は、以下の特許請求の範囲内に入る。

Claims (42)

  1. 第1の計算ユニットを用いて曲線を第1のラインセグメントに分割するために前記曲線をテッセレーションすることと、
    第2の計算ユニットを用いて前記第1のラインセグメントのうちの1つによって表される前記曲線の一部分を第2のラインセグメントにテッセレーションすることと、
    を備える方法。
  2. 前記曲線を第1の座標空間から第2の座標空間に変換することをさらに備え、
    前記第1のラインセグメントのうちの1つによって表される前記曲線の前記部分をテッセレーションすることは、前記曲線を変換する際に使用されるスケールファクタに基づいて、前記第2の計算ユニットを用いて前記ラインセグメントのうちの1つによって表される前記曲線の前記部分を前記第2のラインセグメントにテッセレーションすることを備える
    請求項1に記載の方法。
  3. 前記スケールファクタに基づいて、前記第1のラインセグメントのうちの1つによって表される前記曲線の前記部分を第2のラインセグメントにテッセレーションすることは、前記スケールファクタが増加したとき前記第1のラインセグメントのうちの1つによって表される前記曲線の前記部分をより多数の第2のセグメントにテッセレーションすることを含む請求項2に記載の方法。
  4. 少なくとも前記第1の計算ユニットの負荷に基づいて、前記第1の計算ユニットによって実行される前記曲線のテッセレーションの量を動的に分散することをさらに備える請求項1に記載の方法。
  5. 前記第1の計算ユニットの負荷に基づいて、前記第1の計算ユニットによって実行される前記曲線のテッセレーションの前記量を動的に分散することは、前記第1の計算ユニットの前記負荷がしきい値を上回ったとき、前記曲線をより少数の第1のラインセグメントに分割するために前記曲線をテッセレーションすることを含む請求項4に記載の方法。
  6. 前記第1の計算ユニットは中央処理ユニット(CPU)を含み、前記第2の計算ユニットはグラフィックス処理ユニット(GPU)を含み、前記GPUを用いて前記第1のラインセグメントのうちの1つによって表される前記曲線の前記部分をテッセレーションすることは、前記第1のラインセグメントのうちの1番目の第1のラインセグメントによって表される前記曲線の第1の部分をテッセレーションすることを含み、前記方法は前記第1のラインセグメントのうちの2番目の第1のラインセグメントによって表される前記曲線の第2の部分を並列にテッセレーションすることをさらに備える請求項1に記載の方法。
  7. 前記第1のラインセグメントのうちの前記1番目の第1のラインセグメントおよび前記2番目の第1のラインセグメントによって表される前記曲線の前記第1の部分および前記第2の部分の各々をテッセレーションすることは、前記GPUのシェーダユニットを用いて前記それぞれの第1のラインセグメントによって表される前記曲線の前記それぞれの部分をテッセレーションすることを含む請求項6に記載の方法。
  8. 前記シェーダは頂点シェーダを備え、前記方法は、
    前記頂点シェーダを用いて前記第1のラインセグメントのうちの1つの頂点ポイントを指定する少なくとも2つの頂点属性を含む複数の頂点属性を受信することと、
    前記曲線の前記部分を前記第2のラインセグメントにテッセレーションするために前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分上にある追加のポイントを表す追加の頂点属性を生成することと、
    をさらに備える請求項7に記載の方法。
  9. 前記第2の計算ユニットは専用テッセレーションハードウェアを含み、前記第1のラインセグメントのうちの1つによって表される前記曲線の前記部分をテッセレーションすることは、
    少なくとも1つの入力を受信することと、
    前記少なくとも1つの入力に基づいて、前記第2ラインセグメントのうちの1つに対応する少なくとも1つの頂点ポイントの少なくとも1つの座標を生成することと、
    を備える請求項1に記載の方法。
  10. 前記テッセレーションハードウェアは、複数の乗算および累積演算ユニットのパイプラインを含み、前記少なくとも1つの頂点ポイントの少なくとも1つの座標を生成することは、前記少なくとも1つの入力に基づいて、前記第2のラインセグメントのうちの前記1つに対応する前記頂点ポイントの少なくとも1つの座標を生成するために、前記曲線の多項式表現を実装することを含む請求項9に記載の方法。
  11. 前記テッセレーションハードウェアは、それぞれ頂点ポイントの座標を生成する2つ以上の並列パイプラインとして動作するように前記複数の乗算および累積演算ユニットの前記パイプラインを構成することをさらに含む請求項10に記載の方法。
  12. 第1の計算ユニットはグラフィックス処理ユニット(GPU)の第1のコンポーネントであり、前記第2の計算ユニットは前記GPUの第2のコンポーネントである請求項1に記載の方法。
  13. 前記曲線をディスプレイに提示するために前記第2のラインセグメントをレンダリングすることをさらに備える請求項1に記載の方法。
  14. 前記第1の計算ユニット、前記第2の計算ユニットおよび第3の計算ユニットのうちの1つを用いて、前記第2のラインセグメントのうちの1つによって表される前記曲線の一部分を第3のラインセグメントにテッセレーションすることをさらに備える請求項1に記載の方法。
  15. 曲線を第1のラインセグメントに分割するために前記曲線をテッセレーションする第1の計算ユニットと、
    前記第1のラインセグメントのうちの1つによって表される前記曲線の一部分を第2のラインセグメントにテッセレーションする第2の計算ユニットと、
    を備えるデバイス。
  16. 前記第1の計算ユニットおよび前記第2の計算ユニットのうちの1つは、前記曲線を第1の座標空間から第2の座標空間に変換し、前記第2の計算ユニットは、前記曲線を変換する際に使用されるスケールファクタに基づいて、前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分を前記第2のラインセグメントにテッセレーションする請求項15に記載のデバイス。
  17. 前記第2の計算ユニットは、前記スケールファクタが増加するとき、前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分をより多数の第2のラインセグメントにテッセレーションする請求項16に記載のデバイス。
  18. 前記第1の計算ユニットは、少なくとも前記第1の計算ユニットの負荷に基づいて、前記第1の計算ユニットによって実行される前記曲線のテッセレーションの量を動的に分散する請求項15に記載のデバイス。
  19. 前記第1の計算ユニットは、前記第1の計算ユニットの前記負荷がしきい値を上回るとき、前記曲線をより少数の第1のラインセグメントに分割するために前記曲線をテッセレーションする請求項18に記載のデバイス。
  20. 前記第1の計算ユニットは中央処理ユニット(CPU)を含み、前記第2の計算ユニットはグラフィックス処理ユニット(GPU)を含み、前記GPUは、並列に、前記第1のラインセグメントのうちの1番目の第1のラインセグメントによって表される前記曲線の第1の部分をテッセレーションし、前記第1のラインセグメントの2番目の第1のラインセグメントによって表される前記曲線の第2の部分をテッセレーションする請求項15に記載のデバイス。
  21. 前記GPUは、前記GPUのシェーダユニットを用いて、前記曲線の前記第1の部分および前記第2の部分の各々をテッセレーションする請求項20に記載のデバイス。
  22. 前記シェーダユニットは、前記第1のラインセグメントのうちの前記1つの頂点ポイントを指定する少なくとも2つの頂点属性を含む複数の頂点属性を受信し、前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分上にある追加の頂点ポイントを表す追加の頂点属性を生成する頂点シェーダを含む請求項21に記載のデバイス。
  23. 前記第2の計算ユニットは、少なくとも1つの入力を受信し、前記少なくとも1つの入力に基づいて、前記第2のラインセグメントのうちの1つに対応する少なくとも1つの頂点ポイントの少なくとも1つの座標を生成する専用テッセレーションハードウェアを含む請求項15に記載のデバイス。
  24. 前記テッセレーションハードウェアは、前記少なくとも1つの入力に基づいて、前記第2のラインセグメントのうちの前記1つに対応する前記少なくとも1つの頂点ポイントの少なくとも1つの座標を生成するために、前記曲線の多項式表現を実装するパイプライン構成で構成された複数の乗算および累積演算ユニットを含む請求項23に記載のデバイス。
  25. 前記複数の乗算および累積演算ユニットの前記パイプラインは、前記テッセレーションハードウェアがそれぞれ前記少なくとも1つの頂点ポイントの座標を生成する2つ以上の並列パイプラインとして動作するように構成された請求項24に記載のデバイス。
  26. 第1の計算ユニットはグラフィックス処理ユニット(GPU)の第1のコンポーネントであり、前記第2の計算ユニットは前記GPUの第2のコンポーネントである請求項15に記載のデバイス。
  27. ディスプレイをさらに備え、前記第1の計算ユニットおよび前記第2の計算ユニットのうちの1つは、前記曲線を前記ディスプレイに提示するために前記第2のラインセグメントをレンダリングする請求項15に記載のデバイス。
  28. 前記第1の計算ユニット、前記第2の計算ユニットおよび第3の計算ユニットのうちの1つは、前記第2のラインセグメントのうちの1つによって表される前記曲線の一部分を第3のラインセグメントにテッセレーションする請求項15に記載のデバイス。
  29. 曲線を第1のラインセグメントに分割するために前記曲線をテッセレーションする第1の手段と、
    前記第1のラインセグメントのうちの1つによって表される前記曲線の一部分を第2のラインセグメントにテッセレーションする第2の手段と
    を備えるデバイス。
  30. 前記曲線を第1の座標空間から第2の座標空間に変換する手段をさらに備え、
    前記第2のテッセレーション手段は、前記曲線を変換する際に使用されるスケールファクタに基づいて、前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分を前記第2のラインセグメントにテッセレーションする
    請求項29に記載のデバイス。
  31. 前記第2のテッセレーション手段は、前記スケールファクタが増加したとき、前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分をより多数の第2のラインセグメントにテッセレーションする請求項30に記載のデバイス。
  32. 少なくとも前記第1のテッセレーション手段の負荷に基づいて、前記第1のテッセレーション手段によって実行される前記曲線のテッセレーションの量を動的に分散する手段をさらに備える請求項29に記載のデバイス。
  33. 前記第1のテッセレーション手段は、前記第1のテッセレーション手段の前記負荷がしきい値を超えたとき、前記曲線をより少数の第1のラインセグメントに分割するために前記曲線をテッセレーションする請求項23に記載のデバイス。
  34. 前記第2のテッセレーション手段は、前記第1のラインセグメントのうちの1番目の第1のラインセグメントによって表される前記曲線の第1の部分、および前記第1のラインセグメントの2番目の第1のラインセグメントによって表される前記曲線の第2の部分を並列にテッセレーションする請求項29に記載のデバイス。
  35. 前記第2のテッセレーション手段は、前記第1のラインセグメントのうちの前記1つの頂点ポイントを指定する少なくとも2つの頂点属性を含む複数の頂点属性を受信し、前記曲線の前記部分を前記第2のラインセグメントにテッセレーションするために、前記第1のラインセグメントのうちの前記1つによって表される前記曲線の前記部分上にある追加のポイントを表す追加の頂点属性を生成する請求項29に記載のデバイス。
  36. 前記第2のテッセレーション手段は、前記少なくとも1つの入力に基づいて、前記第2のラインセグメントのうちの1つに対応する少なくとも1つの頂点ポイントの少なくとも1つの座標を生成する手段を含む専用テッセレーションハードウェアを備える請求項29に記載のデバイス。
  37. 前記生成手段は、前記少なくとも1つの入力に基づいて、前記第2のラインセグメントのうちの前記1つに対応する前記少なくとも1つの頂点ポイントの少なくとも1つの座標を生成するために、前記曲線の多項式表現を実装する複数の乗算および累積演算ユニットのパイプラインを含む請求項36に記載のデバイス。
  38. 前記テッセレーションハードウェアは、それぞれ頂点ポイントの座標を生成する2つ以上の並列パイプラインとして動作するように、前記複数の乗算および累積演算ユニットの前記パイプラインを構成する手段をさらに含む請求項37に記載のデバイス。
  39. 前記第1のテッセレーション手段はグラフィックス処理ユニット(GPU)の第1のコンポーネントであり、前記第2のテッセレーション手段は前記GPUの第2のコンポーネントである請求項29に記載のデバイス。
  40. 前記曲線をディスプレイに提示するために、前記第2のラインセグメントをレンダリングする手段をさらに備える請求項29に記載のデバイス。
  41. 前記第2のラインセグメントのうちの1つによって表される前記曲線の一部分を第3のラインセグメントにテッセレーションする第3の手段をさらに備える請求項29に記載のデバイス。
  42. 前記第1のテッセレーション手段および前記第2のテッセレーション手段のうちの1つは、前記第2のラインセグメントのうちの1つによって表される前記曲線の一部分を第3のラインセグメントにテッセレーションする請求項29に記載のデバイス。
JP2011500968A 2008-03-20 2009-03-19 グラフィックスレンダリングのための多段テッセレーション Active JP5335888B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/052,628 2008-03-20
US12/052,628 US8643644B2 (en) 2008-03-20 2008-03-20 Multi-stage tessellation for graphics rendering
PCT/US2009/037730 WO2009117619A1 (en) 2008-03-20 2009-03-19 Multi-stage tessellation for graphics rendering

Publications (2)

Publication Number Publication Date
JP2011515765A true JP2011515765A (ja) 2011-05-19
JP5335888B2 JP5335888B2 (ja) 2013-11-06

Family

ID=40875114

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011500968A Active JP5335888B2 (ja) 2008-03-20 2009-03-19 グラフィックスレンダリングのための多段テッセレーション

Country Status (8)

Country Link
US (1) US8643644B2 (ja)
EP (1) EP2269172A1 (ja)
JP (1) JP5335888B2 (ja)
KR (1) KR101240815B1 (ja)
CN (1) CN101978393B (ja)
CA (1) CA2717278A1 (ja)
TW (1) TW201001329A (ja)
WO (1) WO2009117619A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9495799B2 (en) 2013-03-29 2016-11-15 Bandai Namco Entertainment Inc. Image distortion correction system

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8741798B2 (en) * 2008-05-29 2014-06-03 Emmett M. Cunningham Catalysts for hydrocarbon oxidation
US20100079454A1 (en) * 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
US20100079469A1 (en) * 2008-09-30 2010-04-01 Lake Adam T Rendering tremmed nurbs on programmable graphics architectures
GB0818278D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing systems
GB0818277D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing system
GB0818279D0 (en) * 2008-10-06 2008-11-12 Advanced Risc Mach Ltd Graphics processing systems
GB0913170D0 (en) 2009-07-28 2009-09-02 Advanced Risc Mach Ltd Graphics processing systems
US8884957B2 (en) * 2009-09-09 2014-11-11 Advanced Micro Devices, Inc. Tessellation engine and applications thereof
US20110212761A1 (en) * 2010-02-26 2011-09-01 Igt Gaming machine processor
CN102142150B (zh) * 2011-03-17 2012-10-17 长沙景嘉微电子有限公司 基于分块渲染的gpu中锯齿线段的生成
KR101766383B1 (ko) * 2011-07-26 2017-08-09 한국전자통신연구원 지면 고도 데이터 다운 사이징 방법 및 이를 위한 장치
US20130107289A1 (en) * 2011-10-28 2013-05-02 Microsoft Corporation Rasterization of printing data
US8810572B2 (en) * 2011-10-31 2014-08-19 Qualcomm Incorporated Tessellation cache for object rendering
US10089774B2 (en) * 2011-11-16 2018-10-02 Qualcomm Incorporated Tessellation in tile-based rendering
US10559123B2 (en) 2012-04-04 2020-02-11 Qualcomm Incorporated Patched shading in graphics processing
US9619853B2 (en) * 2012-08-09 2017-04-11 Qualcomm Incorporated GPU-accelerated path rendering
US9330495B2 (en) 2012-08-09 2016-05-03 Qualcomm Incorporated Extending DX11 GPU for programmable vector graphics
US9275498B2 (en) * 2012-08-09 2016-03-01 Qualcomm Incorporated GPU-accelerated path rendering
US9082204B2 (en) 2012-08-30 2015-07-14 Qualcomm Incorporated Storage structures for stitching primitives in graphics processing
US9142060B2 (en) 2012-08-30 2015-09-22 Qualcomm Incorporated Computation reduced tessellation
US9076260B2 (en) 2012-08-30 2015-07-07 Qualcomm Incorporated Stitching for primitives in graphics processing
KR101630486B1 (ko) * 2012-10-09 2016-06-14 엘에스산전 주식회사 Hmi 장치 및 hmi 장치의 데이터 출력 방법
TWI498849B (zh) * 2012-11-05 2015-09-01 Nvidia Corp 圖形驅動程式層級解耦顯像以及顯示的方法
US9613444B2 (en) * 2013-04-26 2017-04-04 Panasonic Corporation Information input display device and information input display method
US9401034B2 (en) 2013-04-30 2016-07-26 Microsoft Technology Licensing, Llc Tessellation of two-dimensional curves using a graphics pipeline
CN104156185A (zh) * 2013-05-13 2014-11-19 中国移动通信集团公司 三维字体显示方法及装置
KR102104057B1 (ko) 2013-07-09 2020-04-23 삼성전자 주식회사 점별로 테셀레이션 팩터를 할당하는 방법과 상기 방법을 수행할 수 있는 장치들
KR102109130B1 (ko) 2013-08-12 2020-05-08 삼성전자주식회사 그래픽스 프로세싱 유닛, 이의 동작 방법, 및 이를 포함하는 장치들
US9639982B2 (en) 2013-10-18 2017-05-02 Goodle Inc. On-demand transformation aware shape tessellation
KR102066533B1 (ko) 2013-11-19 2020-01-16 삼성전자 주식회사 도메인 쉐이딩 방법과 이를 수행하는 장치들
KR102219294B1 (ko) 2014-02-13 2021-02-23 삼성전자 주식회사 커브 렌더링 방법 및 장치
WO2015154004A1 (en) 2014-04-05 2015-10-08 Sony Computer Entertainment America Llc Method for efficient re-rendering objects to vary viewports and under varying rendering and rasterization parameters
US9865074B2 (en) 2014-04-05 2018-01-09 Sony Interactive Entertainment America Llc Method for efficient construction of high resolution display buffers
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US9710957B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Graphics processing enhancement by tracking object and/or primitive identifiers
US10068311B2 (en) 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9836816B2 (en) 2014-04-05 2017-12-05 Sony Interactive Entertainment America Llc Varying effective resolution by screen location in graphics processing by approximating projection of vertices onto curved viewport
US9495790B2 (en) 2014-04-05 2016-11-15 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping to non-orthonormal grid
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9652882B2 (en) 2014-04-05 2017-05-16 Sony Interactive Entertainment America Llc Gradient adjustment for texture mapping for multiple render targets with resolution that varies by screen location
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
DE102014007914A1 (de) 2014-05-27 2015-12-03 Elektrobit Automotive Gmbh Graphisches Darstellen von Straßen und Routen unter Benutzung von Hardware-Tesselierung
EP2985735B1 (en) 2014-08-11 2019-12-04 Samsung Electronics Co., Ltd Method and apparatus for performing tile-based path rendering
US9665975B2 (en) 2014-08-22 2017-05-30 Qualcomm Incorporated Shader program execution techniques for use in graphics processing
CN104574309B (zh) * 2014-12-30 2018-03-16 北京像素软件科技股份有限公司 移动游戏应用中的三角形网格细分的方法及装置
KR102443697B1 (ko) 2015-09-11 2022-09-15 삼성전자주식회사 경로 스트로크를 수행하는 방법 및 장치
KR102657587B1 (ko) * 2016-11-21 2024-04-15 삼성전자주식회사 커브 렌더링을 수행하는 방법 및 장치.
US11431480B2 (en) * 2019-07-11 2022-08-30 EMC IP Holding Company LLC Smart compressor based on adaptive CPU/QAT scheduling method
US11010939B2 (en) * 2019-09-12 2021-05-18 Adobe Inc. Rendering of cubic Bezier curves in a graphics processing unit (GPU)
CN112949023A (zh) * 2021-01-15 2021-06-11 桂林电子科技大学 一种基于弦长二分法的二次Bezier曲线插值方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1115986A (ja) * 1997-06-25 1999-01-22 Fuji Xerox Co Ltd 画像形成装置
JPH1166328A (ja) * 1997-08-19 1999-03-09 Murata Mach Ltd 曲線描画装置
US6304677B1 (en) * 1998-04-07 2001-10-16 Adobe Systems Incorporated Smoothing and fitting point sequences
JP2002260008A (ja) * 2000-12-05 2002-09-13 Matsushita Electric Ind Co Ltd 3次元文字データ生成装置及び3次元図形データ生成装置
JP2005525645A (ja) * 2002-05-10 2005-08-25 イマジネイション テクノロジーズ リミテッド パラメトリックモデリングユニットとポリゴンベースレンダリングシステム間のインターフェースをとるインターフェース及びその方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2207840B (en) * 1987-08-07 1991-09-25 Philips Electronic Associated Method of and apparatus for modifying data stored in a random access memory
US5261029A (en) * 1992-08-14 1993-11-09 Sun Microsystems, Inc. Method and apparatus for the dynamic tessellation of curved surfaces
US5473742A (en) * 1994-02-22 1995-12-05 Paragraph International Method and apparatus for representing image data using polynomial approximation method and iterative transformation-reparametrization technique
US6111588A (en) 1996-12-05 2000-08-29 Adobe Systems Incorporated Creating and modifying curves on a computer display
US6204860B1 (en) * 1998-07-02 2001-03-20 Silicon Graphics, Inc. Method and apparatus for geometric model deformation using wires
US6597356B1 (en) * 2000-08-31 2003-07-22 Nvidia Corporation Integrated tessellator in a graphics processing unit
KR100821026B1 (ko) * 2000-12-05 2008-04-08 마쯔시다덴기산교 가부시키가이샤 3차원 문자 데이터 생성 장치 및 3차원 그래픽 데이터생성 장치
US7318238B2 (en) * 2002-01-14 2008-01-08 Microsoft Corporation Security settings for markup language elements
US7385612B1 (en) * 2002-05-30 2008-06-10 Adobe Systems Incorporated Distortion of raster and vector artwork
JP4464657B2 (ja) * 2002-11-12 2010-05-19 パナソニック株式会社 曲面画像処理装置及び曲面画像処理方法
US7800631B2 (en) * 2003-03-18 2010-09-21 Qualcomm Incorporated Triangle rendering using direct evaluation
US6811264B2 (en) * 2003-03-21 2004-11-02 Mitsubishi Electric Research Laboratories, Inc. Geometrically aware projector
US7042452B1 (en) * 2003-10-02 2006-05-09 Sun Microsystems, Inc. Triangle coverage estimation and edge-correct tessellation
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7564459B2 (en) * 2005-10-31 2009-07-21 Microsoft Corporation Resolution-independent curve rendering using programmable graphics hardware
JP4643485B2 (ja) * 2006-03-30 2011-03-02 株式会社東芝 描画装置、方法およびプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1115986A (ja) * 1997-06-25 1999-01-22 Fuji Xerox Co Ltd 画像形成装置
JPH1166328A (ja) * 1997-08-19 1999-03-09 Murata Mach Ltd 曲線描画装置
US6304677B1 (en) * 1998-04-07 2001-10-16 Adobe Systems Incorporated Smoothing and fitting point sequences
JP2002260008A (ja) * 2000-12-05 2002-09-13 Matsushita Electric Ind Co Ltd 3次元文字データ生成装置及び3次元図形データ生成装置
JP2005525645A (ja) * 2002-05-10 2005-08-25 イマジネイション テクノロジーズ リミテッド パラメトリックモデリングユニットとポリゴンベースレンダリングシステム間のインターフェースをとるインターフェース及びその方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9495799B2 (en) 2013-03-29 2016-11-15 Bandai Namco Entertainment Inc. Image distortion correction system

Also Published As

Publication number Publication date
CN101978393A (zh) 2011-02-16
KR101240815B1 (ko) 2013-03-11
US8643644B2 (en) 2014-02-04
JP5335888B2 (ja) 2013-11-06
CN101978393B (zh) 2016-12-07
US20090237401A1 (en) 2009-09-24
TW201001329A (en) 2010-01-01
KR20100127834A (ko) 2010-12-06
EP2269172A1 (en) 2011-01-05
WO2009117619A1 (en) 2009-09-24
CA2717278A1 (en) 2009-09-24

Similar Documents

Publication Publication Date Title
JP5335888B2 (ja) グラフィックスレンダリングのための多段テッセレーション
JP5270004B2 (ja) 3次元グラフィックスハードウェアを使用した2次元グラフィックスレンダリング中の頂点ポイントの廃棄
US9747718B2 (en) System, method, and computer program product for performing object-space shading
US9177351B2 (en) Multi-primitive graphics rendering pipeline
US8773439B2 (en) Approximation of stroked higher-order curved segments by quadratic bèzier curve segments
US9275498B2 (en) GPU-accelerated path rendering
US9665975B2 (en) Shader program execution techniques for use in graphics processing
US8599202B1 (en) Computing tessellation coordinates using dedicated hardware
US9477477B2 (en) System, method, and computer program product for executing casting-arithmetic instructions
US7466322B1 (en) Clipping graphics primitives to the w=0 plane
US8169437B1 (en) Distributed tessellation topology generator
US20210082165A1 (en) Rendering of cubic bezier curves in a graphics processing unit (gpu)
US20150084952A1 (en) System, method, and computer program product for rendering a screen-aligned rectangle primitive
US11978234B2 (en) Method and apparatus of data compression
TWI765574B (zh) 圖形系統和相應地圖形處理方法
US11972518B2 (en) Hybrid binning

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120313

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120613

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120620

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120806

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120828

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121127

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130702

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130731

R150 Certificate of patent or registration of utility model

Ref document number: 5335888

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250