JP2004514973A - グラフィクス処理ユニットにおける集積化テッセレータ - Google Patents
グラフィクス処理ユニットにおける集積化テッセレータ Download PDFInfo
- Publication number
- JP2004514973A JP2004514973A JP2002544676A JP2002544676A JP2004514973A JP 2004514973 A JP2004514973 A JP 2004514973A JP 2002544676 A JP2002544676 A JP 2002544676A JP 2002544676 A JP2002544676 A JP 2002544676A JP 2004514973 A JP2004514973 A JP 2004514973A
- Authority
- JP
- Japan
- Prior art keywords
- module
- tessellation
- light source
- patch
- vertex
- 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
Links
- 238000012545 processing Methods 0.000 title claims abstract description 311
- 238000000034 method Methods 0.000 claims abstract description 165
- 238000006243 chemical reaction Methods 0.000 claims abstract description 118
- 230000008569 process Effects 0.000 claims abstract description 106
- 238000009877 rendering Methods 0.000 claims abstract description 26
- 239000004065 semiconductor Substances 0.000 claims abstract description 25
- 230000009466 transformation Effects 0.000 claims abstract description 12
- 230000015654 memory Effects 0.000 claims description 82
- 230000002093 peripheral effect Effects 0.000 claims description 16
- 230000036961 partial effect Effects 0.000 claims description 15
- 230000001131 transforming effect Effects 0.000 claims description 4
- 238000003672 processing method Methods 0.000 claims description 3
- 238000000638 solvent extraction Methods 0.000 claims 3
- 238000005192 partition Methods 0.000 claims 2
- 230000011218 segmentation Effects 0.000 claims 2
- 239000000872 buffer Substances 0.000 description 117
- 238000010586 diagram Methods 0.000 description 79
- 239000013598 vector Substances 0.000 description 74
- 238000001514 detection method Methods 0.000 description 36
- 238000004364 calculation method Methods 0.000 description 16
- 230000006870 function Effects 0.000 description 14
- 230000014509 gene expression Effects 0.000 description 9
- 230000010354 integration Effects 0.000 description 9
- 239000011159 matrix material Substances 0.000 description 9
- 230000007704 transition Effects 0.000 description 9
- 208000003035 Pierre Robin syndrome Diseases 0.000 description 8
- 238000011156 evaluation Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 238000009792 diffusion process Methods 0.000 description 6
- 230000002441 reversible effect Effects 0.000 description 6
- 239000003086 colorant Substances 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000011068 loading method Methods 0.000 description 4
- 239000000463 material Substances 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000011960 computer-aided design Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000010420 art technique Methods 0.000 description 1
- 238000009125 cardiac resynchronization therapy Methods 0.000 description 1
- 238000004040 coloring Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000000059 patterning Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
- G06T17/205—Re-meshing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
Description
〔発明の分野〕
本発明は、一般にグラフィクプロセッサに関し、特に、テッセレーション(tessellation)、変換、光源処理(lighting)、及びラスタ化モジュールを含むグラフィクス・パイプライン・システムに関する。
【0002】
〔発明の背景〕
3次元グラフィクスは、多くのアプリケーションにおいて主要なものである。例えば、コンピュータ支援設計(CAD)は、多くの産業部門で大いに伸びており、ここでは、コンピュータ端末、カーソル、CRT、及びグラフィック端末が、鉛筆と紙に取って代わりつつあり、コンピュータディスク及びテープが、図面保管室(drawing vaults)に取って代わりつつある。これらの産業分野の全てではなくとも、そのほとんどで、3次元オブジェクトを操作して表示することへの強い要求がある。このことが、3次元オブジェクトをモデリングし、レンダリングし、コンピュータ画面や他の表示装置に表示する方法に対する広範な関心及び研究につながっている。しかしながら、写実的にレンダリングすること及び3次元のグラフィカルオブジェクトを表示することに要する演算量は、依然としてかなり大規模であり、3次元オブジェクトを真に写実的に表示することは、主としてハイエンドのシステムに限られていた。その一方で、3次元オブジェクトを高速かつ写実的にレンダリング及び表示可能な安価なシステムに対しての要求が存在し、その要求は絶えず増大しつづけている。
【0003】
過去数年間で、はなはだしい成長を遂げた産業として、コンピュータゲーム産業がある。コンピュータゲームの最新の世代は、3次元グラフィクスへと移行してきており、この傾向は加速しつづけている。同時に、プレイ速度は、より速くなるようにと駆り立てられている。この組み合わせにより、比較的安価なシステムで3次元グラフィクスを高速にレンダリングすることに対する本物の要求が、煽り立てられている。ゲームの他にも、この要求は、電子商取引アプリケーションによっても煽り立てられている。電子商取引アプリケーションは、増強されたマルチメディア機能を必要とする。
【0004】
通例、3次元グラフィクスのレンダリング(rendering)及び表示には、多くの計算及び演算を要する。例えば、3次元オブジェクトをレンダリングするために、レンダリングされるべきオブジェクトを規定する座標点や頂点の組が、形成される必要がある。頂点は、レンダリングされて表示されるべきオブジェクトの面を規定するポリゴンを形成するために、連結可能である。オブジェクトを規定する頂点が形成されると、次に頂点は、オブジェクトやモデルの座標系からワールド座標系へと、そして最終的には平坦な表示装置で表示可能な2次元座標系へと変換される必要がある。頂点が可視領域から外れるため、その方法に従い、頂点に対して、回転、拡大縮小、消去、又はクリッピングがなされ、様々な光源処理方式による光源処理、色付け等がなされる。このように、3次元オブジェクトのレンダリング及び表示処理は、演算集約的になりうるものであり、多数の頂点を要するものとなりうる。
【0005】
このようなパイプライン・システムを実装した全体システムが、従来例である図1に示されている。このシステムでは、データソース10が、展開された頂点のストリームを生成し、多くの場合、これは三角形として解釈される。また、データソースは、球、円柱、又は一般的な曲面等のより高レベルの表現を、生成してもよい。このような高レベルのプリミティブ/表現(primitives/descriptions)は、グラフィクス・パイプラインの残りの部分での処理前に、複数の三角形で近似されてもよい。
【0006】
最初に、頂点は、テッセレーションモジュール9によりテッセレーティングされる。テッセレーションとは、球等の複雑な面を三角形や四角形等のより単純なプリミティブ(primitive)に分割する処理のことである。そして、テッセレーティングされたこれらの頂点は、パイプライン化されたグラフィクスシステム12へと、頂点メモリ13を介して渡される。その後、頂点は、変換モジュール14及び光源処理モジュール16により、それぞれ変換及び光源処理され、さらに、ラスタライザ18によるレンダリング用にクリッピングされてセットアップされることにより、表示装置20で表示されるレンダリングされたプリミティブが、生成される。
【0007】
処理の際、テッセレーションモジュール9は、頂点を計算して三角形を形成するのに、パッチや他の高レベル表現を用いるようになっている。変換モジュール14は、3次元の頂点の組をローカル座標系やモデル座標系から2次元ウィンドウへと拡大縮小、回転、及び投影するのに用いられてもよく、この2次元ウィンドウは、レンダリングされたオブジェクトを表示するのに用いられる。光源処理モジュール16は、様々な光源処理方式、光源の位置、環境光のレベル、素材等に基づいて、頂点の色及び外観を設定する。ラスタ化モジュール18は、事前に変換及び/又は光源処理された頂点を、ラスタ化又はレンダリングする。ラスタ化モジュール18は、レンダリングされたデータを次に出力する表示装置又は中間ハードウェア若しくはソフトウェア構成でありうる。レンダリングターゲットに向けて、オブジェクトをレンダリングする。
【0008】
グラフィック処理システムを製造する場合に、コストを極力抑えつつ、様々なグラフィクス処理コンポーネントの速度を増大させるという、全般的な要求がある。一般に、集積化は、システムの速度を上げるために用いられることが多い。集積化とは、別々の処理モジュールを単一の集積回路に組み込むことを意味する。微視的な半導体環境で交信するこのような処理モジュールでは、外部バスと比べて、速度が大幅に向上する。
【0009】
このように速度が向上することは、現行のグラフィック・パイプラインの実装における多くの欠点を克服するのに寄与しうる。例えば、コンピュータグラフィクスの質は、現状では、変換処理を実行するグラフィック・パイプラインの能力により、制限されている。特に、変換性能は、生成された3次元オブジェクトをソフトウェア開発者がテッセレーティングする精細さの度合い、場面に登場するオブジェクトの個数、及び3次元世界自体の精巧さの度合いを決定する。このことにより、テッセレーションを精細にすると、質が高くなるものの、ポリゴンの数が増えて性能を低下させる結果となるので、ソフトウェア開発者に対する従来からの性能と質とのトレードオフが生じる。
【0010】
しかしながら、実装及び単一のチップ上に複数の処理モジュールを製造するコストにより、集積化には限りがあることが多い。グラフィクス処理の分野では、高速化のために様々なモジュールを集積するあらゆる試みが、法外なまでに高コストとなりうる。このようなコストの上昇の理由は、要求された集積回路が、実現するには単に高価すぎるサイズのものになってしまう、ということである。
【0011】
このようにサイズが大きくなるのは、主として、様々なエンジンの複雑さによるものである。高性能の変換及び光源処理エンジンは、単体としても非常に複雑なものであるため、チップ上に実装するにはコストがかかり、追加の機能を実装するならば、なおさらである。さらに、通常のラスタライザは、クリッピングやレンダリング等の処理に多面化しており、このようなモジュールを変換及び光源処理モジュールと組み合わせとうとする費用効果の高い試みは、ほとんど不可能である。
【0012】
従って、費用効果の高い集積化が可能な設計のテッセレーション、変換、光源処理、及びラスタ化モジュールに対する需要が存在する。
【0013】
〔発明の開示〕
グラフィクス処理用の集積化グラフィクス・パイプライン・システムが、提供される。このようなシステムには、テッセレーション用のデータを取得するために単一の半導体プラットフォーム上に配置されたテッセレーションモジュールが含まれている。テッセレーションとは、球又は表面パッチ等の複雑な面を、三角形又は四角形等のより単純なプリミティブへと、あるいは、三角形を複数のより小さな三角形へと分割する処理のことである。さらに、単一の半導体プラットフォーム上に含まれるものとして、テッセレーティングされたデータを第1の空間から第2の空間へと変換するようになった変換モジュールがある。変換モジュールに接続しているのは、光源処理モジュールである。この光源処理モジュールも、変換モジュールから取得したデータに対して光源処理演算を施すために、単一の半導体プラットフォーム上に配置されている。また、ラスタライザが含まれている。このラスタライザは、光源処理モジュールに接続しており、光源処理モジュールから取得したデータをレンダリングするために、単一の半導体プラットフォーム上に配置されている。
【0014】
上述の集積化により、性能の向上が達成されるので、非集積型のシステムにおける多くの欠点が克服される。例えば、テッセレーションと変換とを組み合わせた集積化により、より精細なテッセレーションでの質の向上がもたらされる。このように、アプリケーションは、単一の半導体プラットフォームに対応づけられた機能を、標準的なインタフェースを介して呼び出すことにより、この能力及び他の能力を利用することができる。
【0015】
本発明のこれらの利点及び他の利点は、以下の詳細な説明を読んで種々の図面を検討することにより、明らかになるであろう。
【0016】
〔好ましい実施形態の説明〕
上述及び他の側面及び利点は、図面を参照した以下の本発明の好ましい実施形態の詳細な説明によって、よりよく理解されることになる。
【0017】
図1に従来技術を示す。図1Aは、本発明に係る一実施形態の種々のコンポーネントを説明するフロー図である。図1Aに、テッセレーションモジュール51が組み込まれたグラフィクス処理パイプラインのシングルチップ実装例を示す。図示の如く、テッセレーションモジュール51は、入力データとしての頂点データ、幾何学表現等と、コマンドとを受信する。さらに、ダイレクト・メモリ・アクセス(DMA)機能を用いて読み取りを行う頂点キャッシュ53が、設けられている。この頂点キャッシュ53も、テッセレーションモジュール51へとデータを送る。テッセレーションモジュール51が有効である場合、テッセレーティングされたデータが、テッセレーションモジュール51から、データすなわち頂点データを、頂点属性バッファ(VAB)50からも受信するI−バッファへ59と出力される。このようなI−バッファ59は、変換モジュール52及び光源処理モジュール54へとデータを送るように機能する。次に、変換及び光源処理モジュールは、出力を頂点ファイル58へと送る。また、図1Aには、レンダリングに備えてプリミティブをアセンブルするために、頂点ファイル58及びテッセレーションモジュール51と交信するプリミティブアセンブリモジュール55が示されている。最後に、セットアップモジュール57及びラスタ化モジュール56が、レンダリングのために、プリミティブアセンブリモジュール55から入力を取得する。
【0018】
一実施形態では、上記各モジュールは、以下により詳細に説明する方式で、単一の半導体プラットフォーム上に位置している。ここでの説明では、単一の半導体プラットフォームとは、単独で単体の半導体ベース集積回路又はチップのことである。なお、単一の半導体プラットフォームという用語は、オンチップ動作をシミュレートして、通常のCPU及びバスの実装を利用することよりも実質的に進歩した、接続性の高いマルチチップモジュールのことでもある。
【0019】
処理の際に、テッセレーションモジュール51は、頂点を計算するのに、パッチ又は他の高レベル表現(すなわちプリミティブ等)を用いるようになっている。頂点キャッシュ53は、テッセレーションモジュール51により利用及び再利用されるパッチ係数等の幾何学表現を格納するのに、用いられてもよい。VAB50は、位置、法線(normal)、色、テクスチャ座標等と言った、複数の頂点属性の状態を保持するために、組み込まれている。
【0020】
テッセレーショモジュール51の影響を受けることになる属性の設定は、所望のアプリケーション・プログラム・インタフェースにより規定されてもよい。VAB50は、テッセレーションモジュール51によっては提供されないそれら頂点コンポーネントのソースである。これらのコンポーネントは、テッセレーティングされたプリミティブを通じて一定であってもよい。
【0021】
テッセレーションが開始すると、VAB50の内容が、テッセレーションモジュール51によっては提供されない現行の頂点属性を、I−バッファ59に反映させるのに用いられる。そして、テッセレーションモジュール51は、頂点コンポーネントの残りを、I−バッファ59に書き込み、これは、次に、変換モジュール52により読み取られる。I−バッファ59に関してのより詳細な情報については、図4を参照する際に述べる。
【0022】
このように、完成した頂点は、変換モジュール52により処理されて、光源処理モジュール54へと送られる。変換モジュール52は、光源処理モジュール54による光源処理のために、ベクトルを生成する。光源処理モジュール54からの出力は、頂点ファイル58内に格納される。次に、頂点ファイル58は、頂点を、プリミティブアセンブリモジュール55に送り込み、セットアップモジュール57で利用するために、三角形及び四角形(2つの三角形に分割される)を形成する。そして、セットアップモジュール57は、ラスタ化に備えてプリミティブをセットアップするための計算を実行する。なお、一解釈として、セットアップモジュール57は、プリミティブアセンブリモジュール55の役割を処理するものとみなされてもよい。
【0023】
図1Aに示すように、テッセレーションモジュール51は、プリミティブアセンブリモジュール54に三角形を形成させることができる。そのため、処理の際にテッセレーションモジュール51は、以下に詳細に述べるように、頂点の再利用を最適化することができる。
【0024】
その後、ラスタ化モジュール56は、プリミティブのラスタ化を実行する。なお、変換及び光源処理モジュール52,54は、コマンドが一旦開始したならば常に終了するように、コマンドレベルでのみストールされる。上述のコンポーネントに関してのより詳細な情報については、以下で詳細に述べる。
【0025】
上述の集積化により、性能の向上が達成されるので、非集積型のシステムにおける多くの欠点が克服される。アプリケーションは、本発明に係る種々のハードウェア機能を、標準的なインタフェースを介してこのような機能を呼び出すことにより、利用してもよい。
【0026】
このようなインタフェースは、開発者に対して、このような開発者にここに述べるハードウェア機能へのアクセス性の向上を提供する一組のAPI(アプリケーション・プログラミング・インタフェース)を与えてもよい。このことは、アプリケーションソフトウェアと、ここで説明する様々なハードウェア機能との交信に、ソフトウェアドライバを用いるハードウェア・アブストラクション・レイヤを用いることにより達成されてもよい。結果として、開発者は、本発明に係る様々なハードウェア機能の詳細を気にせずに、インタフェースを利用する製品のただ1つのバージョンを記述すればよい。
【0027】
さらに、このインタフェースは、開発者に対して、ここでの説明における様々なハードウェア機能を利用するツールを、提供してもよい。それにより、ハードウェアの機能が自動的に規定され、アプリケーションのパラメータが適合するように設定されてもよい。さらに、このインタフェースには、開発者がアプリケーションの基礎となる要素を作成するのに利用可能なコンポーネントのライブラリが含まれていてもよい。このライブラリは、プログラマに対して、該プログラマの製品に用いるのに、事前に存在するインタフェース及び要素の大規模なグループを提供することにより、開発過程を簡略化する。
【0028】
このように、インタフェースを構成するコンポーネントにより、技術の進歩の大部分が得られるように設計された柔軟なプラットフォームが、提供される。このようなコンポーネントの例として、本発明のハードウェアに対応させて作成可能な特別なドライバがあり、これにより、ここで述べる進歩の大部分が確実に得られるようになる。
【0029】
このように、標準化されたプログラミング・インタフェースが、ここで説明される様々なハードウェア機能とのインタフェースになるように、アプリケーション開発者に対して提供される。さらに、これにより、ハードウェアの機能を標準化された方法でアプリケーション開発者に公開する方法が提供される。このような標準化されたプログラミング・インタフェースにより、アプリケーションとハードウェアとが相互作用するために、より統一的且つ容易にサポート可能な方法が提供されてもよい。上述のものと同様の特徴を備えたインタフェースの例としては、MICROSOFT DIRECTXがある。
【0030】
一実施形態において、本発明には、オープン・グラフィクス・ライブラリ(OpenGL(登録商標))及びD3D(商標)の変換及び光源処理パイプラインを少なくとも部分的に採用したハードウェアの実装が含まれる。OpenGL(登録商標)は、2次元及び3次元グラフィックイメージを規定するためのコンピュータ業界での標準的なアプリケーション・プログラム・インタフェース(API)である。OpenGL(登録商標)によると、アプリケーションは、OpenGL(登録商標)に準拠したグラフィクスアダプタを用いたあらゆるオペレーティングシステムで、同様の結果を得ることができる。OpenGL(登録商標)は、コマンドの組、又は即時実行関数を指定する。各コマンドは、描画動作を指令するか、あるいは特別な効果をもたらす。
【0031】
図1Aに示したモジュールに関連した種々の機能について説明する。テッセレーションモジュール51及び他の関連したコンポーネントが動作する特別な方式については、テーブル19を参照するところから始まる説明にて、述べることになる。
【0032】
図2は、本発明に係る一実施形態におけるVAB50を示す図である。図示の如く、VAB50は、頂点及びモードビット202の属性を表すデータビット204を格納するとともに、コマンドビット200を渡す。実際にはVAB50は、頂点のデータビット204を取得してドレイン(drain)する。
【0033】
VAB50は、複数の頂点属性状態としてとりうるものを、データビット204を通じて取得して格納するようになっている。実際には、このようなデータビット204すなわち頂点データがVAB50に取得されて格納された後、その頂点データは、VAB50からグラフィクス処理モジュールすなわち変換モジュール52へと出力される。さらに、コマンドビット200は、頂点データが、図2Aを参照して詳細に述べる他の処理に加えてVAB50へと入力される方式を判別するために、VAB50によって渡される。このようなコマンドビット200は、そのようなコマンドビット200を生成可能なマイクロコントローラ、CPU、データソース、又は他の型の供給源等のコマンドビットソースから取得される。
【0034】
さらに、複数の処理動作モードの状態を示すモードビット202が渡される。このように、モードビット202は、頂点データが後続のグラフィック処理モジュールで処理される方式を判別するのに適合している。このようなモードビット202は、そのようなモードビット202を生成可能なマイクロコントローラ、CPU、データソース、又は他の型の供給源等のコマンドビットソースから取得される。
【0035】
なお、VAB50に関連した種々の機能は、専用のハードウェア、ソフトウェア、又は他の型のロジックによって管理される。様々な実施形態において、モードビット202として64,128,256又は他の値が用いられてもよい。
【0036】
また、VAB50は、128ビット形式へと変換する必要のある64ビットデータ用の集積点としても機能する。VAB50の入力は64ビット/サイクルであり、出力は128ビット/サイクルである。他の実施形態では、VAB50は、128ビットデータ用の集積点としても機能し、VAB50の入力は、128ビット/サイクル、又は他の組み合わせであってもよい。さらに、VAB50には、複数の頂点属性用に予約済みのスロットがある。これらは全て、IEEEの32ビット浮動小数である。このようなスロットの数は、ユーザの要望に応じて様々である。テーブル1に、本発明にて採用されている典型的な頂点属性を示す。
【0037】
【表1】
【0038】
処理の際、VAB50は、x,yの書込時に、z,w対がデフォルトで(0.0,1.0)となるようにできるため、x,yデータ対がz,wデータ対より前に書き込まれるものと仮定して動作してもよい。このことは、OpenGL(登録商標)及びD3D(商標)におけるデフォルトのコンポーネントにとって重要となりうる。なお、position,testure0,及びtesture1スロットは、第3及び第4のコンポーネントをデフォルトで(0.0,1.0)にする。さらに、diffuse colorスロットは、第4のコンポーネントをデフォルトで(1.0)とし、textureスロットは第2のコンポーネントをデフォルトで(0.0)とする。
【0039】
VAB50には、データビット204を集めるのに用いられる他のスロット205が含まれており、データビット204は、変換及び光源処理モジュール52,54の中へ又は通じて、当該データビット204が乱されないように渡されてもよい。スロット205におけるデータビット204は、浮動小数点又は整数形式であってもよい。上述の如く、各頂点のデータビット204には、対応するモードビット202の組がある。モードビット202は、モードを表し、データビット204の処理に影響を与える。これらモードビット202は、データビット204とともに、以下により詳細に説明する目的で、変換及び光源処理モジュール52,54へそれぞれ渡される。
【0040】
一実施形態では、VAB50により取得される有効なVAB、変換、及び光源処理コマンドが18個あってもよい。図2Aは、本発明に係る一実施形態にてVAB50により取得されうる種々のコマンドの説明図である。なお、図2Aに示したロード(load)及び読取(read)のコンテクストのあらゆるコマンド、及び通過(passthrough)コマンドは、128ビットまでのデータワード又は他のサイズのデータワードを転送するものである。
【0041】
図2Aの各コマンドには、データビット204の各組がVABアドレスの高位のダブルワードに書き込まれるのか又は低位のダブルワードに書き込まれるのかを判別する制御情報が含まれていてもよい。さらに、2ビットの書込マスクが、ワードレベルでの制御を提供するために用いられてもよい。さらに、現行のコマンドを実行するために、データビット204の全てが存在していることをVABコントローラに伝達する開始ビットがあってもよい。
【0042】
各コマンドには、対応したストールフィールドがある。このストールフィールドにより、当該コマンドがコンテクストメモリから読み取る読取コマンドであるか又はコンテクストメモリに書き込む書込コマンドであるかについての情報を、参照して検出できるようになる。現在実行中のコマンドのストールフィールドを用いることにより、新規のコマンドは、競合が生じたときに延期されるか、あるいは続行が許可されてもよい。
【0043】
処理の際、VAB50は、1サイクル当たり128ビットまで(又は他のサイズ)の1つの入力データワード、及び1サイクル当たり128ビットまで(又は他のサイズ)の1つの出力データワードを、受け入れることができる。ロードコマンドに関して、このことは、VAB50へとデータをロードして128ビットのクワッドワード(quad−word)を作成するのに2サイクルかかり、それをドレインするのに1サイクルかかることを意味する。光源処理モジュール54のスカラーメモリについては、完全なクワッドワードを蓄積する必要がなく、1アドレス当たり1サイクルでロード可能である。1つの頂点について、7つのVABスロットをロードするのに14サイクルまでものサイクル数を要するが、それを転送するのには7サイクルかかるだけである。但し、頂点状態を更新するのには、実行中の頂点コマンドが変化することだけが必要とされる。このことは、頂点データを転送するのに7サイクルかかるのに対して、ある場合には、頂点位置が2サイクルで更新されうることを意味する。なお、x,y位置の場合には、1サイクルが必要となるだけである。
【0044】
図2Bは、グラフィクス処理の際に頂点属性をVAB50へとロードすること及びそこからドレインすることの一方法を示すフローチャートである。最初に、処理210では、少なくとも1組の頂点属性が、処理されるべくVAB50に取得される。上述の如く、頂点属性の各組はユニークであって、単一の頂点に対応していてもよい。
【0045】
処理212では、実際には頂点属性は、取得されるとVAB50内に格納される。さらに、格納された頂点属性の各組は、変換モジュール52における複数の入力バッファの対応する1つへと転送される。また、処理216に示されるように、取得された頂点属性の組は、取得された頂点属性に対応するものとしてVAB50内に現在格納されている別の組の頂点属性があるかどうか判別するために監視される。
【0046】
格納された頂点属性が取得された頂点属性に対応していると、判別217にて決定されると、格納された頂点属性は、命令外で変換モジュール52の対応する入力バッファへと出力される。処理218を参照されたい。格納された頂点属性が出力されると直ちに、対応して入来する頂点属性が、VAB50においてその位置を占めることになる。一方、対応が検出されなければ、格納された頂点属性の各組は、予め定められた正規の順序で、変換モジュール52における対応する入力バッファへと転送されることになる。処理219を参照されたい。
【0047】
なお、格納された頂点属性は、対応する開始コマンドがあれば、上述の方式で転送されないこともある。さらに、上述の方法が適切に機能するように、VAB50の出力の帯域幅は、少なくともVAB50の入力の帯域幅になっている必要がある。
【0048】
図2Cは、図2Bの処理を実装するために用いられた本発明に係る構成を示す図である。図示の如く、VAB50は、データ書込端子WD、データ読取端子RD、アドレス書込端子WA、及びアドレス読取端子RAを有する。データ読取端子は、データビット204をVAB50から出力するために、第1のクロック制御バッファ230に接続している。
【0049】
また、第1のマルチプレクサ232が含まれている。この第1のマルチプレクサ232は、VAB50のアドレス読取端子及び第2のクロック制御バッファ234に接続した出力を有する。第1のマルチプレクサ232の第1の入力は、VAB50のアドレス書込端子に接続しており、一方、第1のマルチプレクサ232の第2の入力は、第2のマルチプレクサ236の出力に接続している。論理モジュール238は、第1及び第2のマルチプレクサ232,236と、VAB50のアドレス書込端子と、第2のクロック制御バッファ234の出力との間に、接続されている。
【0050】
実際には論理モジュール238は、入来してくる頂点属性が、VAB50へのドレイン待ちになっているかどうか決定する役割を果たす。一実施形態では、頂点属性が待ちになっているかどうかを示すビットレジスタを監視することが、この決定に役立つ。入来してくる頂点属性について、VAB50に現在あるものの中に対応するものがあれば、論理モジュール238は、入来してくる頂点属性を直ちにその位置に格納できるように、対応する頂点属性をドレインするために、第1のマルチプレクサ232を制御する。一方、入来してくる頂点属性について、現在VAB50中に対応するものがなければ、論理モジュール238は、VAB50からのドレインがなされるとともに、入来してくる頂点属性が順次(又は他の所定の順番で)ロードされるように、当該論理モジュール238により更新されうる第2のマルチプレクサ236の入力に従って、第1のマルチプレクサ232を制御する。
【0051】
このため、VAB50は、新規に入来される頂点属性がロードされる前に、複数の頂点属性をドレインする必要はない。待ちとなった頂点属性は、可能ならば、VABにおける対応するものを強制的に出力することにより、続行可能となる。このため、VAB50は、任意の順序でドレインされうる。この機能がなければ、VAB50からのドレインに7サイクルかかり、場合によると、ロードするのにさらに14サイクルかかる。ロードとドレインとを重複させることにより、より高い性能が達成される。なお、これは、入力バッファが空で、VAB50から変換モジュール52の入力バッファへのドレインが可能な場合にのみ可能である。
【0052】
図3に、本発明の一実施形態によるVAB50に関連したモードビットを示す。変換/光源処理モード情報は、モードビット202を介してレジスタに格納される。モードビット202は、以下で明らかになる方式で、変換モジュール52及び光源処理モジュール54のシーケンサを駆動するのに用いられる。各頂点には、ユニークでありうる対応したモードビット202があるので、特別に調整されたプログラムシーケンスを実行可能である。モードビット202は一般的にグラフィクスAPIに直接マップされており、そのうちのいくつかが見出されてもよい。
【0053】
一実施形態では、図3のアクティブ光ビット(LIS)は、連続していてもよい。さらに、パススルービット(VPAS)はオンになった場合にユニークであり、頂点データは拡大縮小及びバイアスを伴って渡され、変換や光源処理は行われない。VPASが真のときに用いられうるモードビット202には、テクスチャ分割ビット(TDV0,1)及びフォグビット(foggen bits)(D3D(商標)でフォグ値を抽出するのに用いられる)がある。このように、VPASは、事前変換データのために用いられ、TDV0,1は、D3D(商標)のコンテクストにおけるシリンドリカル・ラップ(cylindrical wrap)モードを扱うのに用いられる。
【0054】
図4に、本発明に係る一実施形態の変換モジュールを示す。図示の如く、変換モジュール52は、6個の入力バッファ400を介してVAB50に接続している。一実施形態では、各入力バッファ400は、そのサイズが7*128bである。これら6個の入力バッファ400は、その各々が7クワッドワードを格納可能である。このような入力バッファ400は、パスデータが位置データと重複していること以外は、VAB50と同様のレイアウトに従っている。
【0055】
一実施形態では、入力バッファ400がロードされた、以前のインスタンス以来、データが変更されたかどうかを示すために、各入力バッファ400の各属性用に1ビットが指定されている。この設計により、各入力バッファ400は、データが変更されたときにのみロードされることになる。
【0056】
さらに、変換モジュール52は、光源処理モジュール54の6個の出力頂点バッファ402に接続している。出力バッファには、第1のバッファ404、第2のバッファ406、及び第3のバッファ408が含まれている。以降明らかになるように、第3のバッファ408の内容、すなわち位置、テクスチャ座標データ等は、光源処理モジュール54では使用されない。一方、第1のバッファ404及び第2のバッファ406は、いずれも、光源処理及びカラーデータを光源処理モジュール54に入力するのに用いられる。光源処理モジュールが2つの読取入力を取り扱うようになっているので、2つのバッファが用いられている。なお、データは、読取が競合する問題を防止するように配列されていてもよい。
【0057】
さらに、変換モジュール52に接続しているものとして、コンテクストメモリ410、及びマイクロコードROMメモリ412がある。変換モジュール52は、オブジェクト空間の頂点データを画面空間へと変換する役割、及び、光源処理モジュール54で必要とされるあらゆるベクトルを生成する役割を果たす。また、変換モジュール52は、スキニング及びテクスチャ座標を処理する。一実施形態では、変換モジュール52は、4つの浮動小数を並列処理する128ビット設計であってもよく、4項点乗積(4 term dot products)処理用に最適化されていてもよい。
【0058】
図4Aは、本発明に係る一実施形態により変換モジュール52にて複数のスレッドを実行する方法を示すフローチャートである。処理の際、変換モジュール52は、インターリービングにより3つの頂点を並列処理可能である。そうして、コマンド間に、コンテクストメモリ410に対しての書込とそれに続く読取といったストール状態がなければ、3つのコマンドが同時に並列的に実行可能である。3つの実行スレッドは、頂点には全てユニークに対応するモードビット202があるため、それぞれ独立しており、これらはどのようなコマンドであってもよい。
【0059】
図4Aに示すように、複数のスレッドを実行する方法には、処理420において、実行されるべき現行のスレッドを決定することが含まれる。この決定は、グラフィクス処理モジュールが処理を完了するために要するサイクル数を識別して監視することによりなされてもよい。サイクルを監視することにより、各スレッドを1サイクルに割当可能となるので、現行のサイクルに基づいて現行のスレッドを決定可能となる。なお、このような決定は、効率的であると思われる所望の方式でなされてもよい。
【0060】
次に、処理422では、現行のサイクルで実行されるスレッドに対応した命令が、対応するプログラムカウンタ番号を用いて取得される。その後、処理424にて、グラフィクス処理モジュールで当該命令が実行される。
【0061】
一利用例では、即時の方法には、第1のプログラムカウンタに従い、最初に第1の命令又はコードセグメントにアクセスすることが含まれている。上述のように、このようなプログラムカウンタは、第1の実行スレッドに対応している。次に、第1のコードセグメントが、グラフィクス処理モジュールで実行される。すぐに明らかになるように、このようなグラフィクス処理モジュールは、加算器、乗算器、若しくは他の機能ユニット、又はその組み合わせという形態をとってもよい。
【0062】
グラフィクス処理モジュールは、実行を完了するのに2クロックサイクル以上を要するので、第2のコードセグメントは、第2のプログラムカウンタに従って、第1のコードセグメントの実行から1クロックサイクル後に、直ちにアクセスされてもよい。第2のプログラムカウンタは、第2の実行スレッドに対応しており、ここでは、各実行スレッドが、ユニークな頂点を処理する。
【0063】
そうして、第2のコードセグメントは、グラフィクス処理モジュールでの第1のコードセグメントの実行完了前に、そのグラフィクス処理モジュールにて処理が開始されてもよい。実際のグラフィクス処理モジュールには、各スレッドが出力を発生するのに、いずれも所定数のサイクルを要する。このように、本例の様々なステップが、所定数のサイクルの全てに亘って繰り返されてもよい。
【0064】
この技術により、従来技術に対しての数々の利点が得られる。無論、本発明の機能ユニットは、より効率的に利用される。さらに、制御コードは、複数スレッド方式の使用が前提となる場合には、より効率的に記述されてもよい。
【0065】
例えば、グラフィクス処理モジュールに、回答を出力するのに3クロックサイクルを要するマルチプレクサが含まれる場合、a=b*c及びd=e*aといった後続の命令間に、2つのノーオペレーションコマンドが必要となることがある。これは、3クロックサイクルが経過するまで“a”が入手不能なためである。但し、本実施形態では、そのコードは、単に、a=b*cの直後にd=e*aを呼び出す。これは、このようなコードが、3クロックサイクル毎に呼び出される3つの実行スレッドのうちの1つとして実行されるものと、みなされるためである。
【0066】
図4Bは、図4Aの方法が実行される方式を示すフローチャートである。図示の如く、各実行スレッドには、対応するプログラムカウンタ450がある。このプログラムカウンタ450は、命令メモリ452内の命令すなわちコードセグメントにアクセスするのに用いられる。そして、このような命令は、加算器456、乗算器454、及び/又は逆論理ユニット(inverse logic unit)若しくはレジスタ459等のグラフィクス処理モジュールを実行するのに用いられる。
【0067】
上記処理モジュールの少なくとも2つがタンデムで用いられる状況に対応するために、グラフィクス処理モジュール間に、少なくとも1つのコードセグメント遅延457が用いられる。3スレッド形式が用いられる場合、3クロックサイクルのコードセグメント遅延457が用いられる。一実施形態では、乗算命令に加算命令が続くときに、コードセグメント遅延457が用いられる。このような場合には、乗算器456が出力を発生するのに充分な時間が確実に経過するように、乗算命令実行後に3サイクル経過するまで、加算命令は実行されない。
【0068】
各命令の実行後、現行の実行スレッドのプログラムカウンタ450が更新されて、次の実行スレッドのプログラムカウンタが、対応する命令にアクセスするためにラウンドロビンシーケンス(round robin sequence)で、モジュール458により呼び出される。なお、プログラムカウンタは、これらに限定されるものではないが、インクリメント、ジャンプ、コール及びリターン、テーブルジャンプの実行、及び/又はディスパッチング等のどのような方式で用いられてもよい。ディスパッチングとは、取得したパラメータに基づいてコードセグメント実行の開始点を決定することである。さらに、この複数スレッド実行形式は、本発明に係るグラフィクス処理パイプラインの光源処理モジュール54にも応用されうることを、理解することが重要である。
【0069】
3スレッド形式が用いられる場合、各スレッドには、1度に、1個の入力バッファ及び1個の出力バッファが割り当てられる。このことにより、3つのコマンドを処理しつつ、データを伴う3つのコマンドをさらにロードすることが可能となる。入力バッファ及び出力バッファは、図27及び図28を参照して後述する方式によって、ラウンドロビンシーケンスで割り当てられる。
【0070】
このように、実行スレッドは、一時的かつ機能的にインターリービングされる。これは、各機能ユニットが、3段階にパイプラインされて、各スレッドが1度に1段階を占めることを意味する。一実施形態では、3スレッドが、同じシーケンスすなわち0の次に1、次に3で常に実行されるように設定されていてもよい。概念上、スレッドは、t=クロック・モジュロ3で、機能ユニットに入る。一旦、機能ユニットが処理を開始すると、結果が得られるまでに3クロックかかり(6かかるILUを除く)、この時間で同スレッドが再びアクティブになる。
【0071】
図5に、本発明の一実施形態による図4の変換モジュール52の機能ユニットを示す。図示の如く、頂点データを取得するためにVAB50に接続するように適合した入力バッファ400が含まれている。
【0072】
メモリ論理ユニット(MLU)500には、入力バッファ400の出力に接続した第1の入力がある。オプションとして、MLU500の出力は、第1の入力に接続したフィードバックループ502を有していてもよい。
【0073】
また、MLU500の出力に接続した第1の入力を有する演算論理ユニット(ALU)504が設けられている。さらに、ALU504の出力は、第2の入力に接続したフィードバックループ506を有する。このようなフィードバックループ502は、そこに接続した遅延508を、さらに有していてもよい。ALU504の出力に接続しているのは、レジスタユニット510の入力である。なお、レジスタユニット510の出力は、MLU500の第1及び第2の入力に接続している。
【0074】
逆演算又は逆平方根演算を実行するためにALU504の出力に接続した入力を含んだ逆論理ユニット(ILU)512が、設けられている。代替的な実施形態では、ILU512には、レジスタユニット510の出力に接続した入力が、含まれていてもよい。
【0075】
さらに、ILU512の出力とMLU500の第2の入力との間に接続された変換又はスメアリング(smearing)モジュール514が含まれている。実際の変換モジュール514は、スカラー頂点データをベクトル頂点データに変換する役割を果たす。これは、スカラーデータにベクトルを乗じて、乗算器及び/又は加算器等のベクトル演算子がそれを処理するようにして達成される。例えば、スカラーであるAが、変換後、ベクトル(A,A,A,A)となりうる。代替的な実施形態では、スメアリングモジュール514は、MLU500に関連したマルチプレクサ、又は本発明の他のコンポーネント内に組み込まれてもよい。オプションとして、レジスタ516が、ILU512の出力と変換ユニット514の入力との間に接続されてもよい。さらに、このようなレジスタ516がスレッド化されていてもよい。
【0076】
メモリ410は、MLU500の第2の入力及びALU504の出力に接続している。特に、メモリ410には、MLU500の第2の入力に接続した読取端子がある。さらに、メモリ410には、ALU504の出力に接続した書込端子がある。
【0077】
メモリ410は、入力バッファ400、MLU500、ALU504、レジスタユニット510、ILU512、及び頂点データ処理用の変換モジュール514に関連して用いるために、複数の定数及び変数をそこに格納する。このような処理には、オブジェクト空間の頂点データを画面空間の頂点データに変換すること、ベクトルを生成すること等が含まれていてもよい。
【0078】
最後に、出力コンバータ518が、ALU504の出力に接続されている。出力コンバータ518は、出力バッファ402を介して光源処理モジュール54に接続して、処理された頂点データをそこへ出力する役割を果たす。ILU以外の全てのデータパスは、128ビットに設計されていてもよく、他のビット数のデータパスが用いられてもよい。
【0079】
図6は、本発明に係る一実施形態による図5の変換モジュール52のMLU500を示す図である。図示の如く、変換モジュール52のMLU500には、並列接続された4個のマルチプレクサ600が含まれている。
【0080】
変換モジュール52のMLU500は、2つの4要素のベクトルを異なる3通りの方法で乗算すること、又は、1つの4要素のベクトルを渡すことになる。MLU500は、乗算を実行可能である。テーブル2に、変換モジュール52のMLU500に関連したこのような演算を示す。
【0081】
【表2】
【0082】
A及びBの入力としてとりうるものを、テーブル3に示す。
【0083】
【表3】
【0084】
テーブル4に、クロス乗積のために用いられるベクトル回転オプションを示す。
【0085】
【表4】
【0086】
図7は、本発明の一実施形態による図5の変換モジュール52のALU504を示す図である。図示の如く、変換モジュール52のALU504には、並列/直列接続された3個の加算器700が含まれている。実際の変換モジュール52のALU504は、3要素のベクトル2つを加算すること、4要素のベクトル1つを渡すこと、あるいはベクトル要素を出力に亘ってスメアリングすることができる。テーブル5に、変換モジュール52のALU504が演算可能な種々の演算を示す。
【0087】
【表5】
【0088】
テーブル6に、変換モジュール52のALU504の入力A及びBを示す。
【0089】
【表6】
【0090】
また、不変更(no change)、Bの否定、Aの否定、A,Bの絶対値を作用させることにより、入力A及びBの符号ビットを変更可能である。なお、ALU504がスカラー頂点データを出力すると、このスカラー頂点データは、各出力がスカラー頂点データを表すという意味で、出力に亘ってスメアリングされる。MLU500及びALU504の各パス制御信号は、演算の際に特殊な値の取扱を禁止可能である。
【0091】
図8は、本発明に係る一実施形態による図5の変換モジュールのベクトルレジスタファイル510を示す図である。図示の如く、ベクトルレジスタファイル510には、4組のレジスタ800が含まれている。各レジスタ800は、対応するマルチプレクサ802の第1の入力に接続した出力、及び対応するマルチプレクサ802の第2の入力に接続した入力を有する。
【0092】
本発明に係る一実施形態では、ベクトルレジスタファイル510は、スレッド化されている。すなわち、ベクトルレジスタファイル510の3つのコピーがあって、各スレッドが専用のコピーを有することになる。一実施形態では、各コピーには、8つのレジスタが含まれており、各レジスタは、大きさが128ビットで、4つの浮動小数を格納する。ベクトルレジスタファイル510は、ALU504から書き込まれ、出力がMLU500へとフィードバックされる。ベクトルレジスタファイル510では、1サイクル当たり、1回の書込及び1回の読取がある。
【0093】
処理の際、各レジスタの内容に対して個別に、書込動作をマスク可能である。ベクトルレジスタファイル510は、書込アドレスが読取アドレスと同じであると、入力から出力へのバイパス・パス511により、待ち時間が0となる。この場合には、マスクされていない内容がレジスタから取得されて、マスクされた内容がバイパスされてもよい。このように、ベクトルレジスタファイル510は、ベクトルを要素毎に作成すること、あるいは、ALUのSMR演算(テーブル5参照)に関連してベクトルの要素の順番を変更することに、非常に有用である。また、一時的な結果が、ベクトルレジスタファイル510内に格納されもよい。
【0094】
図9は、本発明に係る一実施形態による図5の変換モジュールのILU512を示す図である。図示の如く、変換モジュール52のILU512は、浮動小数の逆数(1/D)及び平方根の逆数(1/D^(1/2))を発生可能である。このような演算を実行するために、2つの反復処理のいずれか1つが、仮数に対して実行されてもよい。このような処理は、所望の専用ハードウェアで実行されてもよいものであり、以下に示されている。
【0095】
図示の如く、両処理は類似しており、設計が簡単になっている。なお、閾値となる精度が満たされるまで、反復が繰り返されることになる。
【0096】
処理の際、ILU512は、逆演算及び逆平方根演算を含む2つの基本的な演算を実行する。他のユニットとは異なり、出力を発生するのに6サイクルを要する。入力はスカラーであり、出力も同様である。上述のように、ILU512の出力にてスレッド化保持レジスタ516は、次に有効な結果が発生するまで結果をラッチすることになっている。さらに、そのスカラー出力は、MLU500へと送り込まれる前に、ベクトルへとスメアリングされる。逆ユニット512は、仮数が約22ビット以内の精度のIEEE(米国電気電子技術者協会)出力を発生するために、参照テーブル及び2段階のニュートン−ラフソン反復を用いる。テーブル7に、変換モジュール52のILU512により実行される種々の演算を示す。
【0097】
【表7】
【0098】
上記のテーブル7のレンジクランプ逆演算(range clamp inversion operation)は、ラスタ化モジュール56により取り扱われるクリッピング演算を可能にするために用いられうる。座標は、画面空間へと直接に変換され、このことは、同次クリップ空間wが0.0に近いときに問題となりうる。透視除算(perspective divide)にて1.0/0.0の乗算を防ぐために、1/wの計算は、最小及び最大の指数へとクランプされる。
【0099】
図5に示すように、実際のコンテクストメモリ410は、クワッドワードを用いてのみ読み書きを行う。このメモリは、各サイクルにてMLU500又はALU504により読取可能であり、ALU504により書込可能である。メモリ読取は、各サイクル当たり1回のみ可能である。読取が必要であると、命令の最初になされ、その3サイクル後にALU504へとパイプライン処理される。コンテクストメモリ410は、必ずしもスレッド化される必要はない。
【0100】
図10は、本発明に係る一実施形態による図5の変換モジュールの出力コンバータ518の出力アドレス図である。出力コンバータ518は、出力を適切な宛先へ向け、データのビット精度を変更し、性能向上のためにデータをスウィズリング(swizzling)することを担当する。光源処理モジュール54宛ての全てのデータは、S1E8M13(1ビットの符号、8ビットの指数、13ビットの仮数)としてまとめられた22ビット浮動小数点形式に丸められる。図4に示すように、光源処理モジュール54における宛先バッファ402は、スレッド化されている。
【0101】
データ・スウィズリングは、ベクトルを生成する場合に有用である。この技術により、ベクトル生成時に代償を伴うことなく、距離ベクトル(1,d,d*d)を生成可能となる。距離ベクトルは、フォグ、ポイントパラメータ、及び光の減衰のために用いられる。これは、視線ベクトル(eye vector)及び光方向ベクトル(light direction vector)を用いてなされる。テーブル8に、このようなベクトルに関連した種々の演算を示す。なお、以下のテーブルにおいて、ベクトルの平方を、d2=dot[(x,y,z),(x,y,z)]とし、d2を(x,y,z)の要素wに格納する。
【0102】
【表8】
【0103】
なお、本発明で実行される数学は、常にIEEEに準拠しているというわけではない。例えば、“0”に任意の数を乗じたものは、“0”とみなされる。これは、d=d2*1/(d2)1/2,但しd=0、といった式を処理するときに、特に有益である。上述の仮定なしには、このような数式はエラーとなるので、関連の計算を行う際に問題が発生する。
【0104】
図11は、本発明に係る一実施形態による図5の変換モジュールのマイクロコード体系の説明図である。変換モジュールのマイクロコードは、15フィールドに配列され、全体で44ビットである。フィールドは、ユニットのデータフローに合わせて遅延される。MLU500の演算は遅延0で実行され、ALUの演算は遅延1で実行され、RLU、出力演算は遅延2で実行される。各遅延は、3サイクルに相当する。
【0105】
図12は、本発明に係る一実施形態による図5の変換モジュール52のシーケンサ1200を示す図である。図12に示すように、変換モジュール52のシーケンサ1200には、演算処理の複数のモードの状態を示すモードビットをVAB50から取得するように適合したバッファ1202が含まれている。
【0106】
また、モードの状態に対応した演算処理を実行するのに適した、コードセグメントを格納可能なメモリ412が含まれている。シーケンスモジュール1206は、メモリ412及び制御ベクトルモジュール1205間に接続されており、これは次に、モードビットから得られた制御ベクトルに基づいてメモリ412内の複数のアドレスを特定するために、バッファ1202に接続している。さらに、シーケンスモジュール1206は、変換モジュール52を操作してデータを出力バッファ1207へと転送させるのに用いられうるコードセグメントを取得するために、メモリ412内のアドレスにアクセスするようになっている。
【0107】
図13は、図12の変換モジュール52のシーケンサ1200の使用に関連した種々の演算を示すフローチャートである。図示の如く、シーケンサ1200は、変換又は光源処理にてグラフィクス処理をシーケンス処理するようになっている。処理1320では、最初に、演算処理の複数のモードの状態を示すモードビット202が取得される。一実施形態では、モードビット202は、ソフトウェアドライバから取得される。
【0108】
次に、処理1322では、メモリにおける複数のアドレスが、モードビット202に基づいて特定される。次に、このようなアドレスは、モードの状態に対応した演算処理を実行するのに適した、コードセグメントを取得するために、メモリ内で処理1324にてアクセスされる。次に、コードセグメントが、変換又は光源処理モジュールで頂点データを処理するために実行される。処理1326を参照されたい。
【0109】
図14は、図12の変換モジュール52のシーケンサ1200のシーケンスモジュール1206の処理を示すフローチャートである。図示の如く、複数のモードレジスタ1430の各々には、ユニークなモードビット202の組が含まれており、1つの頂点に対応している。なお、モードレジスタ1430は、図4A及び図4Bを参照して上述した方式で複数の実行スレッドが実行可能となるように、ラウンドロビンシーケンスでポーリングされる。
【0110】
一旦、現行の実行スレッドが選択されると、対応するモードビット202群が、処理1432にて復号される。モードビット202が処理1432で復号されると、対応する頂点データの処理のために、特定のコードセグメントがROM1404内でアクセスされるべきかどうかを示すビットを複数含んだ制御ベクトルが得られる。
【0111】
コードセグメントがROM1404内でアクセスされて実行されるべきであるかどうかが決定されると、ポインタ処理1436により、現行のスレッドポインタがインクリメントされ、これにより、次の実行スレッドを開始して、第2のモードビット202群を取得し、同様の処理を実行する。このことは、各スレッドについて、ラウンドロビンシーケンスで継続されることになる。
【0112】
一旦、特定のモードビット202群について制御ベクトルが形成されると、プライオリィティ・エンコーダ処理1438にて、制御ベクトルにおける次の“1”すなわち有効なビットが、決定又は識別される。このようなビットが検出されると、プライオリィティ・エンコーダ処理1438にて、有効なビットに対応したROM1404内のアドレスが、実行のために生成される。
【0113】
他のスレッドの処理後、最初のモードビット202群に戻り、モードビットが復号されて制御ベクトルが再び得られると、マスク処理1434が、識別済の “1”すなわち有効なビットをマスクするために用いられてもよい。これにより、マスク処理1434後に残りのビットの全てを解析可能となる。
【0114】
上述の処理は、以下のテーブルを用いて説明されうる。テーブル9に、対象となる頂点データについて実行されうる複数の式を示す。
【0115】
【表9】
【0116】
ここに示すように、逆演算(a,b*c,d*e,f,及び1/x)の他に、合計されうる結果として、4つの可能性がある。次に、モードフィールドが定義されてもよい。テーブル10に、モードフィールド対、すなわちmode.y及びmode.zであり、その各々には、テーブル9の演算の所定の組が割り当てられている。
【0117】
【表10】
【0118】
その後、各演算は、メモリにおける対応するアドレスに配置されてもよい。テーブル11に、複数のメモリアドレスを示す。各アドレスには、対応する演算がある。また、制御ベクトルの定義の組が示されている。
【0119】
【表11】
【0120】
テーブル12に、実行例を示す。
【0121】
【表12】
【0122】
このように、変換モジュールのシーケンサ1200は、スレッド化されたモードビット202から得られたスレッド化された制御ベクトルを処理してゆき、対応する制御ベクトルのビットが“真(TRUE)”に設定された全てのROMアドレスを実行する。制御ベクトルは、ROMと同じサイズである。シーケンサ1200は、所定数のサイクル毎に“1”すなわち有効なビットを1つという速度で、任意の制御ベクトルを処理してゆくことができる。モードビット202を使用しないコマンドは単純であるため、その場でマイクロコードを生成することにより実行されてもよい。
【0123】
ユニークなモードビット202列でこのような状態を表現することにより、グラフィクス処理ハードウェアにおいて種々の演算の状態を判別するための複数のif−then節が不要となる。このようにして、性能が向上する。概念上、プログラム言語中のif節は、あたかもシーケンサ1200へと移行したようになる。これにより、モードビット202に示される“偽(FALAE)”状態の命令を即座にスキップすることになる。
【0124】
上述のように、モードビットにより識別される演算の種々の状態を取扱可能なコードセグメントが、ROM内に格納されている。一実施形態では、モードビットにより示される各演算を取り扱うために、個別のコードセグメントが取得されてもよい。その代わりに、可能となる各演算又は演算の組み合わせを取り扱うために、1つの包括的なコードセグメントが記述されてもよい。但し、このような大きなコードセグメントを演算の各々の組み合わせ用に作成するには、追加のコード空間が必要となるので、共通して使用される演算の組み合わせに対してのみ、コードセグメントをモジュール化するとよい。
【0125】
一旦、頂点が実行を開始するとモードビット202は変化しないので、制御ベクトルは、シーケンサに入る前に頂点毎に一度のみ生成されればよい。但し、演算が繰り返されうる光源処理等のいくつかの場合で、これに対する例外が生じることがある。最後の頂点の命令が検出されると、シーケンス終端(EOS)信号がアクティブになってもよい。これは、入力及び出力バッファの状態を変更するのに用いられてもよく、図28A及び図28Bを参照して後述する方式で、次のコマンドを開始可能とするために用いられてもよい。なお、EOS信号は、命令が取り扱われる方式と同様に宛先バッファを解放するために、パイプライン遅延される。図4Bを参照されたい。
【0126】
図14Aは、グラフィクス処理の際のスカラー及びベクトル頂点データの取扱を統合するために用いられる本発明の種々の機能コンポーネントを示すフローチャートである。図示の如く、機能上の一側面1440には、ベクトル頂点データを出力するために、処理モジュール、すなわち、加算器、乗算器等にベクトル頂点データを入力することが含まれる。機能上の他の側面1442では、ベクトル頂点データが、再びベクトル頂点データへと変換又はスメアリングされるスカラー頂点データを出力するベクトル処理モジュール、すなわち、加算器、乗算器等により処理される。
【0127】
機能上の別の側面1444では、ベクトル頂点データはマスクされて、スカラー頂点データへと変換され、その後、ベクトル頂点データ生成のために、メモリ、すなわち、レジスタ論理ユニット内に格納される。機能上のさらに別の側面1446では、スカラー頂点データが、ベクトル処理モジュール、すなわち、加算器、乗算器等により抽出されて、その次に、スカラー処理モジュール、すなわち、逆論理ユニットにより処理される。スカラー処理モジュールは、スカラー頂点データをレンダリングする。このスカラー頂点データは、再びベクトル頂点データへと変換される。
【0128】
図14Bは、図5の変換モジュール52に対応した図14Aに示す本発明に係る機能コンポーネントとしてとりうる組み合わせ1451を示すフローチャートである。なお、機能上の側面1444,1446は、図4Bを参照して上述したものと同様の方式で対応づけられた遅延を有していてもよい。図14Cは、図14Aに示した本発明に係る機能コンポーネントとしてとりうる別の組み合わせ1453を示すフローチャートである。
【0129】
マルチプレクサは、図14A乃至図14Cの機能モジュールにて、ベクトル頂点データからのスカラー頂点データの抽出を実行してもよい。また、このようなマルチプレクサは、様々な機能モジュールによる処理前に必要とされるあらゆるデータ・スウィズリングを担当してもよい。一実施形態では、マルチプレクサは、ベクトル頂点データを渡すとともに回転させることが可能で、他の処理用のALUのような他のグラフィクス処理モジュールに依存していてもよい。別の実施形態では、マルチプレクサは、代償なしに、属性を独立して任意に再設定可能であってもよい。
【0130】
図14Dに、特定用途向けIC(ASIC)等のハードウェア実装によるグラフィクス・パイプラインでのグラフィクス処理の際に、変換システムがブレンディング(blending)あるいはスキニング(skinning)処理を実行するように適合した方法を示す。パイプライン処理の際、処理1470では、複数の行列、複数の重み値(その各々が行列の1つに対応)、及び頂点データが取得される。なお、法線(normal)の頂点データには、追加の行列の組が必要であってもよい。
【0131】
次に、処理1472では、複数の積の和が算出される。なお、各積は、頂点データ、行列の1つ、及び該行列に対応した重みの乗算により算出される。そして、処理1474にて、このような積の和が、さらなる処理のために出力される。
【0132】
概略すると、以下の積の和が算出されることになる。
【0133】
式#1
v’=Σwi*Mi*v なお、i=1…x
ここで、v=入力された頂点データ
w=重み値
M=行列
x=行列の個数
v’=処理モジュールへの出力用の頂点データ
式#2
n’=Σwi*Ii*n なお、i=1…x
ここで、n=入力された頂点データ(法線ベクトル)
w=重み値
I=逆行列(逆転置行列)
x=逆行列の個数
n’=処理モジュールへの出力用の頂点データ(法線ベクトル)
式#3
vs=[Ox,Oy,Oz,φ]’+
1/(v’’wc)*[(v’’x),(v’’y),(v’’z),1]’
ここで、v’’=C*v’
v’=式#1による積の和
C=[Sx,Sy,Sz,1]’*P
P=投影行列
vs=表示用の画面ベクトル
O=ビューポート・オフセット
S=ビューポート・スケール
なお、上述の重み値wiを表すには、多くの方法がある。例えば、式#1及び式#2にて、i=1…(x−1)で、wx(wiにてi=x)として、式1−Σwiにより算出されてもよい。このように重みwiを表すことにより、重みwの総和を確実に1にすることができる。
【0134】
一実施形態では、行列には、モデルのビュー行列(view matrix)が含まれていてもよく、積の和(v’)が、光源処理によるさらなる処理のために出力されてもよい。式#1を参照されたい。また、この積の和(v’)は、合成行列(C)を用いることにより、表示の目的で、他の積の和(vs)を生成するのに用いられてもよい。式#3を参照されたい。さらに、行列には、逆行列(I)が含まれていてもよく、頂点データには、法線ベクトルデータ(n)が含まれていてもよい。このような場合には、追加の処理には、光源処理が含まれていてもよい。式#2を参照されたい。
【0135】
図15は、本発明の一実施形態による光源処理モジュール54を示す図である。図示の如く、光源処理モジュール54には、変換モジュール52による頂点データの出力先であるバッファ402が含まれている。図示の如く、バッファ408は、経路1501により光源処理モジュール54をバイパスする。さらに、コンテクストメモリ1500及びマイクロコードROMメモリ1502が、光源処理モジュール54に接続している。
【0136】
光源処理モジュール54は、フォグ及びポイントパラメータに加えて、光源処理を取り扱うように適合している。実際の光源処理モジュール54は、バッファのバイパス経路1501を制御し、拡散、点のサイズ、及び鏡面出力色(specular output colors)、並びにフォグ値(fog value)を算出する。なお、光源処理モジュール54は、変換モジュール52と同じモードビット202を用いている。
【0137】
さらに、光源処理モジュール54は、変換モジュール52よりも低い精度でよく、トリ・ワード(tri−word)構成の22ビットの浮動小数点値(1.8.13形式)を処理する。第3のバッファ408のデータが128ビットであるため、それには、光源処理モジュール54を迂回するバイパス経路1501が利用される。光源処理モジュール54はイベント駆動式であり、図4A及び図4Bを参照して上述した変換モジュール52と同様の方式で、3つのスレッドを同時に処理する。なお、光源処理モジュール54には、外部からのコマンド起動許可が必要であってもよい。
【0138】
図16は、本発明に係る一実施形態による図15の光源処理モジュール54の機能ユニットを示す図である。図示の如く、頂点データを取得するために変換システムに接続するように適合した入力バッファ402が含まれている。上述のように、入力バッファ402には、第1の入力バッファ404、第2の入力406、及び第3の入力バッファ408が含まれている。第1のバッファ404、第2の入力バッファ406、及び第3の入力バッファ408の入力は、変換モジュール52の出力に接続している。第3のバッファ408の出力は、バイパスするために、遅延1608を介して光源処理モジュール54の出力に接続している。
【0139】
さらに、第1の入力バッファ404の出力に接続した第1の入力と、第2の入力バッファ406の出力に接続した第2の入力とを有するMLU1610が含まれている。MLU1610の出力は、その第2の入力に接続したフィードバックループ1612を有する。演算論理ユニット(ALU)1614は、第2の入力バッファ406の出力に接続した第1の入力を有する。さらに、ALU1614は、MLU1610の出力に接続した第2の入力を有する。ALU1614の出力は、光源処理モジュール54の出力に接続している。なお、ALU1614の出力及び第3の入力バッファ408の出力は、マルチプレクサ1616を介して、光源処理モジュール54の出力に接続している。
【0140】
次に、ALU1614の出力に接続した入力と、ALU1614の第1の入力に接続した出力とを有する第1のレジスタユニット1618が設けられている。第2のレジスタユニット1620は、ALU1614の出力に接続した入力を有する。また、このような第2のレジスタ1620は、MLU1610の第1の入力と第2の入力とに接続した出力を有する。
【0141】
また、ALU1614の出力に接続した第1の入力と、第1の入力バッファ404の出力に接続した第2の入力と、MLU1610の第1の入力に接続した出力とを有する光源処理論理ユニット(LLU)1622が設けられている。なお、LLU1622の第2の入力は、第1の入力バッファ404の出力に、遅延1624を介して接続している。さらに、LLU1622の出力は、先入れ先出しレジスタユニット1626を介して、MLU1610の第1の入力に接続している。また、図16に示すように、LLU1622の出力は、変換モジュール1628を介して、MLU1610の第1の入力にも接続している。処理の際、このような変換モジュール1628は、変換モジュール52と同様の方式で、スカラー頂点データをベクトル頂点データへと変換するようになっている。
【0142】
最後に、メモリ1500は、MLU1610の複数の入力の少なくとも1つ及び演算論理ユニット1614の出力に接続している。特に、メモリ1610には、MLU1610の第1及び第2の入力に接続した読取端子がある。さらに、メモリ1500には、ALU1614の出力に接続した書込端子がある。
【0143】
このメモリは、入力バッファ402、MLU1610、ALU1614、第1のレジスタユニット1618、第2のレジスタユニット1620、及びLLU1622に関連して頂点データ処理用に使用するための複数の定数及び変数を格納している。
【0144】
図17は、本発明に係る一実施形態における図16の光源処理モジュール54のMLU1610を示す図である。図示の如く、光源処理モジュール54のMLU1610には、並列配置の3個のマルチプレクサ1700が含まれている。処理の際、本MLU1610は、2つの3要素ベクトルの乗算、又は1つの3要素ベクトルを渡すことに適合している。3要素ベクトルの乗算は、内積又は平行乗算(parallel multiply)によりなされてもよい。テーブル13に、光源処理モジュール54のMLU1610が実行可能な処理を示す。
【0145】
【表13】
【0146】
テーブル14に、光源処理モジュール54のMLU1610の入力A及びBとして取りうるものを示す。
【0147】
【表14】
【0148】
図18は、本発明に係る一実施形態による図16の光源処理モジュール54のALU1614を示す図である。図示の如く、ALU1614には、並列/直列配置された3個の加算器1800が含まれている。実際のALU1614は、2つの3要素ベクトルを加算可能、又は、1つの3要素ベクトルを渡すことができる。テーブル15に、光源処理モジュールのALU1614が可能な種々の演算を示す。
【0149】
【表15】
【0150】
テーブル16に、光源処理モジュール54のALU1614の入力A及びBとして取りうるものを示す。
【0151】
【表16】
【0152】
図19は、本発明に係る一実施形態による図16の光源処理モジュール54のレジスタユニット1618,1620を示す図である。図示の如く、各レジスタユニット1618,1620は、2組のレジスタ1900を有し、各レジスタ1900は、対応するマルチプレクサ1902の第1の入力に接続した出力、及びマルチプレクサ1902の第2の入力に接続した入力とを有する。
【0153】
光源処理モジュール54のレジスタユニット1618,1620は、ALU1614用の2つのレジスタ及びMLU1610用の2つのレジスタに分割されている。一実施形態では、レジスタはスレッド化されている。レジスタユニット1618,1620は、書込アドレスが読取アドレスと同じである場合には、入力から出力へのバイパス経路により、待ち時間が0となる。
【0154】
図20は、本発明に係る一実施形態による図16の光源処理モジュール54のLLU1622を示す図である。LLU1622は、光源処理モジュール54の光源処理ユニットである。光+素材の色の乗算に後で用いられる光源処理係数を算出するのは、スカラーブロックである。LLU1622には、2つのMAC、1つのインバータ、4つの小メモリ、及び1つのフラグレジスタが含まれている。
【0155】
フラグレジスタは、光源処理の式の条件部分を実装するのに用いられる。出力は、環境、拡散、及び鏡面係数である。スカラーメモリには、鏡面近似に用いられる変数、及び定数が含まれている。各メモリの第1の位置には、1.0(ctx0及びctx2に対して)及び0.0(ctx1及びctx3に対して)が含まれている。一実施形態では、これらは、ハードワイヤ化されていてロード不要である。
【0156】
実際のLLU1622では、式:(x+L)/(M*x+N)が基本的に実装されている。この式は、鏡面光源処理項(specular lighting term)を近似するのに用いられる。LLU1622への入力は、光源処理モジュール54のALU1614からのものであり、光源処理の式で用いられる内積である。上述のように、図16に関して、LLU1622及びMLU1610間に、係数をMLU1610が必要とするまで一時的に記憶する出力FIFO1626がある。一実施形態では、このようなFIFO1626は、遅延1608,1624、及びレジスタ1618,1620とともにスレッド化されていてもよい。色の素材としてとりうるものの処理により、拡散及び鏡面出力がMLU1610で使用済みとなる時は未知である。
【0157】
光源処理モジュール54はR,G,B要素のみを処理するので、拡散出力のアルファ要素を処理するために特別に適合したハードウェアが設けられる。このように特別に適合したハードウェアは、2種のアルファ要素、すなわち、vtx coloro α[Tbuffer]、及び、格納されたctx α[Ctx store]を出力可能である。上述のα要素の選択は、モードビット202により制御される。
【0158】
処理の際、LLU1622は、光源処理の環境(Ca)、拡散(Cde)、及び鏡面(Cs)係数を算出する。そして、これらの係数は、環境、拡散、及び鏡面色で乗算されて、頂点の色に対する光の寄与分が得られる。テーブル16Aには、LLU1622により取得された入力のリストと、環境(Ca)、拡散(Cde)、及び鏡面(Cs)の光源処理係数を得るために実行される計算とが含まれている。なお、LLU1622を実装するのに、所望のハードウェア構成が用いられてもよい。一実施形態では、図20に示す具体的構成が用いられてもよい。
【0159】
【表17】
【0160】
上述のように、頂点データ自体によって、あるいは、頂点データから得られた任意の結果によって、頂点シーケンサを制御するモードビットが必ずしも変更されるわけではない。頂点データが頂点処理を変更できるように、フラグレジスタ1623を用いたLLU1622が設けられている。フラグが計算の出力制御で指定されている場合には、このフラグレジスタでビットを真(TRUE)に設定することにより、計算結果の0.0へとクランプ可能となる。その他に、フラグレジスタ1623は、レジスタ書込のために書込マスクを設定するのに用いられる。
【0161】
フラグレジスタ1623は、性能上の代償なく、if/then/elseを実行して光源処理の式で0.0にクランプするために、LLU1622内に設けられている。種々のオペランドの符号ビットにより、フラグが設定されてもよい。テーブル16Bに、フラグレジスタ1623のフラグが設定されてクランプがなされる方式を示す。
【0162】
【表18】
【0163】
図21は、本発明に係る一実施形態による図16の光源処理モジュール54に関連したフラグレジスタ1623の構成を示す説明図である。フラグレジスタ1623には、8つの1ビットフラグが含まれ、ALU(IFLAG)又はMAC0(MFLAG)出力の符号ビットにより設定される。
【0164】
LLU1622が、スカラー値をMLU1610へ出力するとき、そこでトリ・ワードへとスメアリングされ、フラグレジスタのためのマスクを指定する。レジスタ&マスクが真であれば、0.0が出力となる。テーブル17に、環境、拡散、及び鏡面属性を出力するのに用いられる図21の種々のフラグを示す。
【0165】
【表19】
【0166】
鏡面項に用いられる近似値は負となりうる。そこでは、実際のcosθ**nは、0.0となる。結果として、クランプ処理を実行する必要がある。このために、T,Uフラグが用いられる。テーブル18に、LLU1622の機能論理ユニット(FLU)1621が可能な種々の演算を示す。図20を参照されたい。
【0167】
【表20】
【0168】
図22は、本発明に係る一実施形態における図16の光源処理モジュール54に関連したマイクロコードフィールドの説明図である。図示の如く、光源処理モジュール54のマイクロコードは、33フィールドとされ、全体のサイズが85ビットになっている。フィールドは、ユニットのデータフローと整合するように遅延させられる。MLUの処理は遅延0でなされ、ALUの処理は遅延1でなされ、RLU、LLUの出力処理は遅延2でなされる。各遅延は、3サイクルに相当する。
【0169】
図23は、本発明に係る一実施形態における図16の光源処理モジュール54に関連したシーケンサ2300を示す図である。図示の如く、光源処理モジュール54のシーケンサ2300には、処理動作の複数のモード状態を示すモードビット202を取得するのに適合した入力バッファ2302が含まれている。また、それぞれモード状態に対応して処理動作を実行するようになっているコードセグメントを格納可能なメモリ1502が含まれている。
【0170】
シーケンスモジュール2306は、モードビットから得られた制御ベクトル2305に基づいて、メモリ1502内の複数のアドレスを特定するために、メモリ1502及びバッファ2302間に接続されている。さらに、シーケンスモジュール2306は、光源処理モジュール54を機能させるのに用いられうるコードセグメントを取得するため、メモリ1502内のアドレスにアクセスするように適合している。
【0171】
光源処理モジュール54のシーケンサ2300は、変換モジュール52のそれと同様である。処理の際、光源処理モジュール54のシーケンサ2300は、スレッド化されたモードビット202から得られたスレッド化された制御ベクトルを処理してゆき、対応する制御ベクトルのビットが“1”に設定された全てのROMアドレスを処理する。制御ベクトルは、ROMが有するワードと同じビット数になっている。シーケンサ2300は、全スレッドについて、所定数のサイクル毎に“1”すなわち有効ビットという速度で、任意の制御ベクトルを処理してゆく。モードビット202を使用しないコマンドは、実行中のマイクロコード生成により実行される。光源処理モジュール54のシーケンサ2300と変換モジュール52のシーケンサ1200との主要な相違点は、光源処理モジュール54のシーケンサ2300が、ループバックして8回まで光源処理コードを実行可能であるということである。
【0172】
光源処理モジュール54のシーケンサ2300は、新規の頂点の各々につき0から開始してマイクロコードの最後で1インクリメントされる光カウンタを有する。モードビット202のLISフィールドの照合ビットフィールドが“1”になっている場合、シーケンサ2300は、元に戻って光源処理マイクロコードブロックを再び最初から開始する。これは、LISフィールドが0になるか、又は8つの光が処理されるまで続く。色の蓄積(color accumulation)は、拡散及び鏡面色を格納するALUレジスタを(光毎に)インクリメントすることによりなされる。自動メモリアドレスのインデックス化(indexing)は、光カウンタを用いて、各光について適切なパラメータを取得することによりなされる。
【0173】
図24は、本発明に係る一実施形態における変換及び光源処理モジュール52,54が対応するバッファに関連した入力及び出力を制御可能な方法を示すフローチャートである。図示の如く、処理2420では、第1のバッファの組のバッファにて最初に頂点データが取得される。頂点データが取得されるバッファは、ラウンドロビンシーケンスに基づく。
【0174】
次に、処理2422では、第2のバッファの組の空のバッファが、これもまたラウンドロビンシーケンスに基づいて特定される。変換モジュール52は、第1のバッファの組と第2のバッファの組との間に接続されている。第2のバッファの組の空のバッファが特定されると、変換モジュールで頂点データが処理され、変換モジュールから、第2の組のバッファのうちの特定された空のバッファへと出力される。処理2424及び2426を参照されたい。
【0175】
同様に、処理2428では、第3のバッファの組のうちの空のバッファ、又はメモリ内のスロット若しくは空間が、ラウンドロビンシーケンスに基づいて特定される。光源処理モジュール54は、第2のバッファの組と第3のバッファの組との間に接続されている。第3のバッファの組の空のバッファが特定されると、処理2430で示すように、頂点データが、光源処理モジュールで処理される。そして、頂点データは、光源処理モジュール52から、第3のバッファの組のうちの識別された空のバッファへと出力される。処理2432を参照されたい。なお、バッファ又はメモリ内のスロットの数は自由であり、変更可能である。
【0176】
図25は、図24の方法に従い、変換及び光源処理モジュール52,54が、対応するバッファの入力及び出力を制御可能な方法を示す説明図である。図示の如く、第1のバッファの組、すなわち入力バッファ400は、変換モジュール52へと送り、次に該変換モジュール52は、第2のバッファの組、すなわち中間バッファ404,406へと送る。第2のバッファの組404,406は、光源処理モジュール54へと送る。該光源処理モジュール54からメモリ2550へとドレインされてゆく。
【0177】
図25にて上述した方法を実行するために、頂点データの最初の取得時に、メモリ2550のスロット及び第1及び第2の組のバッファの各々に対して、ユニークな識別子が割り当てられる。さらに、各バッファの現在の状態が監視される。このような状態として、割当状態、有効状態、アクティブ状態、又は処理済状態等があってもよい。
【0178】
割当状態は、バッファ/スロットが、前段のグラフィクス処理モジュール、すなわち変換モジュール又は光源処理モジュールの出力を取得するように、既に割当がなされていることを示している。書込ポインタがバッファ/スロットをラウンドロビンシーケンスで走査するとき、割当状態におけるバッファ/スロットにより、このような書込ポインタが次のバッファ又はスロットへとインクリメントされる。
【0179】
バッファ/スロットは、有効状態であれば、頂点データを取得するのに利用可能である。一方、アクティブ状態は、バッファ/スロットが現在実行状態であること、又は頂点データを取得していることを示す。このアクティブ状態は、読取ポインタがインクリメントされた後、スレッドが処理されるまで維持され、バッファ/スロットが有効状態とされる。なお、第1のバッファ400の組は、それらを割り当てる前段のグラフィクス処理モジュールがないので、常に有効状態になっている。
【0180】
次に、状態シーケンスの例を説明する。第1のバッファ400の組における頂点データと、新規のコマンドビット200の組とを取得すると、このようなバッファは有効状態とされ、その後、第2のバッファ402,404の組の1つが、変換モジュール52の出力に備えて割当状態になる。
【0181】
第2のバッファ404,406の組が、いずれも割り当てのために利用不能であれば、第1のバッファ400の組のバッファ内の頂点データは、処理不能である。さらに、実行されるべきコードセグメントが、同時に実行される他のコードセグメントに干渉するかどうかを決定するために、検査が行われてもよい。そうした場合、第1のバッファ400の組のバッファ内の頂点データは、処理されずに、ストール状態が開始される。
【0182】
第2バッファ404,406の組の1つが割当状態になった後、第1のバッファ400の組のバッファは、アクティブ状態になる。変換モジュール52が実行を終了すると、第2のバッファ404,406の組のバッファが読み取られて、有効状態になる。これらの状態変化は、頂点データが第2の組404,406とメモリ2550のスロットとの間で転送される際に、同時に実行される。
【0183】
図25Bに、セットアップモジュール57及び探査モジュール58を備えたラスタライザ・モジュール56を示す。ラスタライザ・モジュール56は、交互になされるエリアベースのラスタ化を実行するのに適合している。特に、複数のポリゴン定義(polygon−defining)検出点が、プリミティブ上に、あるいはその近傍に位置している。それ以後、直線の式(line equation)がそれらの点にて評価されて、どの画素がプリミティブ内に位置するかが判別される。処理の際、この評価は、効率化のために、点が交互に移るようにして繰り返される。さらに、ラスタライザモジュール56は、クリッピング手順なしに動作するように適合していてもよい。
【0184】
図26に、ラスタ化モジュール56のセットアップモジュール57の図を示す。図示の如く、セットアップモジュール57には、所望の浮動小数点計算を実行するために、ルーティングデータ及び適切な機能ユニットに対する制御信号を取り扱う制御部61が含まれている。プリミティブシーケンサ62は、頂点のシーケンスを三角形、線、又は点へと転換する処理を行う。さらに、浮動小数点データパス部64には、マルチプレクサと、セットアップユニット内で必要な数値演算を実行する浮動小数点演算ユニットとが含まれている。
【0185】
引き続き図26を参照すると、出力形式調整部63は、境界の傾き及び境界値の内部浮動小数点形式を、ラスタライザに適した整数形式へと変換する処理を行う。これは、ラスタライザが整数値のみで動作するためである。無論、代替的な実施形態では、ラスタライザが浮動小数点を使用することとして、出力形式調整部63を不要としてもよい。
【0186】
処理の際、出力形式調整部63は、ブロック浮動小数点変換を実行する。周知の通り、所与の数字すなわち2.34e10について、浮動小数形式はその仮数(2.34)及び指数(10)を管理する。ブロック浮動小数点変換は、実質的に、指数が同じになるように、入力データの仮数の小数位を操作する。このために、指数がラスタライザ・モジュール56で処理される必要はない。
【0187】
図26Aは、図25Bにおけるラスタライザ・モジュール56のセットアップモジュール57により算出される種々のパラメータを示す説明図である。このようなパラメータは、ラスタライザ・モジュール56が関連した機能を実行するのに必要である。プリミティブ2600を取得すると、セットアップモジュール57は、プリミティブ2600の傾き2601、開始位置2602、及び開始値2604の3つの値を算出する。
【0188】
傾き2601は、ラスタ化の際に用いられるプリミティブ2600の境界の直線の式のための係数を生成するのに用いられる。例えば、傾き2601は、以下の式#4及び#5を用いて算出されてもよい。
【0189】
式#4及び#5
slopeA=y0−y1
slopeB=x1−x0
ここで、y0、y1、及びx0、x1は、図26Aに示された頂点の座標である。
【0190】
なお、傾きは、頂点の座標を用いて回転演算(rotation operation)等で算出されてもよい。
【0191】
開始位置2602は、以下より詳細に説明するエリアのラスタ化のための開始ポイントを示す。開始値2604は、図26Aに示された斜線の三角形の面積に等しく、エリアベースのラスタ化の際に用いられる。このような開始値2604は、各ステップの傾きを加算しながら画面でのラスタ位置のステップが、ラスタ位置が境界上にある場合、正確にゼロになるように選択される。開始値2604の算出は、以下の式#6を用いてなされてもよい。
【0192】
式#6
starting_value=slopeA*(xs−x0)+slopeB*(ys−y0)
ここで、xs,ys=開始位置2602
slopeA,slopeB=図26Aに示す頂点の座標に基づく境界の1つの傾き
x0,y0=図26Aに示す境界の頂点の1つの座標
なお、上記の値は、他の種類のプリミティブについて算出されてもよい。例えば、直線の場合、四辺の閉じた四角形について追加の傾きが算出される必要がある。このような傾きは、閉じた四角形の対向する側の傾きの逆数を用いることにより、容易に算出可能である。なお、追加の傾きの算出に加えて、直線のプリミティブの場合には、他の開始値が算出される必要がある。
【0193】
図27に、ラスタライザ・モジュール56が複数のプリミティブ(例えば三角形)の1つを処理する方法を示す。特に、最初に、ラスタライザ・モジュール56のセットアップモジュール57により、初期動作が実行される。プリミティブが取得されると、処理2700にて、図26Aの傾き2601を用いて、当業者に周知の方法で、直線について直線の式の直線式係数が求められる。周知の通り、三角形を定義するには、3つの直線の式が必要である。一方、直線のようなプリミティブは、4つの辺及び4つの直線の式で長方形又は平行四辺形として描画される。
【0194】
その後、処理2702では、いずれかのプリミティブの頂点が負のW−座標を有している場合、直線式係数が変更される。以下、この処理に関する追加の情報について、図32を参照してより詳細に説明する。
【0195】
なお、ラスタライザモジュール56のセットアップモジュール57も、プリミティブの閉じた四角形を算出する。ほとんどの三角形について、閉じた四角形には、3つの頂点の最小値及び最大値が含まれる。直線については、閉じた四角形における平行四辺形の四隅が算出される。頂点が負のW−座標を有している三角形又は直線については、描かれるべき領域が、頂点の凸状の外殻(hull)を越えて延びる。
【0196】
OpenGL(登録商標)のコマンドの1つに、切り取り長方形(scissor rectangle)があり、これは、それより外側には描かれないという境界を規定するものである。ラスタライザ・モジュール56のセットアップモジュール57は、閉じた四角形と切り取り長方形との共通部分を算出する。切り取り長方形は長方形であるので、追加として4つの式が提供される。なお、切り取り長方形に対応した直線の式は、ありふれた形式、すなわち水平又は垂直を有する。
【0197】
さらに、3次元空間では、近平面(near plane)と遠平面(far plane)とは平行であり、視線に対して垂直である。プリミティブが三角形の場合、3つの頂点が含まれ、これらがいずれかの配置の平面を定義する。プリミティブの平面並びに近平面及び遠平面の共通部分には、2つの直線が含まれ、これらの直線に対応する2つの直線の式が伴う。
【0198】
従って、各プリミティブは、三角形又は直線の形式のいずれかをとるかに応じて、それぞれ9又は10の直線の式を有する。また、三角形の場合には、このような直線の式には、三角形を定義する3つの直線の式と、閉じた四角形を定義する4つの直線の式と、プリミティブが存在する平面並びに近平面及び遠平面の共通部分を定義する2つの直線の式とが含まれる。
【0199】
引き続き図27を参照すると、処理2704にて、プリミティブ上又はその近傍の複数の点を配置することにより処理が進行する。図26Aに示すように、開始位置2602により、このような配置が指定される。このような点は、閉じた凸領域を規定しており、該凸領域の隅に位置する。図27Aに、凸領域2707(例えば長方形)を囲むこのような検出点2705を示す。一実施形態では、このような長方形は、8×2画素の大きさであってもよい。さらに、それらの点は、プリミティブの上端となる頂点を囲むように最初に配置されてもよい。オプションとして、これは、切り捨てを用いてなされてもよい。
【0200】
一旦、プリミティブが配置されると、探査モジュール58による処理、すなわち以下に述べるようにプリミティブの横列(row)を処理することにより処理2706にて開始される処理が継続する。各横列を処理した後、ジャンプ位置が検出されたかどうかが、判別2708にて決定される。ジャンプ位置は、次の横列の処理の開始位置であり、これについて以下詳細に述べる。判別2708にて、ジャンプ位置が検出されたと決定された場合、処理2710にて、凸領域を定義する検出点がそこに移動する。一方、ジャンプ位置が検出されないと決定された場合、処理は終了する。なお、代替的な実施形態では、縦列、対角線、又は他の任意の型の列が、横列の代替として、処理2706にて処理されてもよい。
【0201】
図28は、図27の横列処理2706に関連した本発明に係る処理を示すフローチャートである。図示の如く、ポリゴン定義検出点が右へ移動したかどうか判別2801にて決定するために、処理2800にて検出点を算出することにより、処理が開始する。このような判別は、最も右の検出点の位置に基づいてなされる。最も右側の検出点が、プリミティブの1つ又は複数の境界の外側に位置していない場合、右方への移動が許可され、処理2802にて、現在位置の右側への位置(X及びY座標)が、スナップ位置として格納される。一方、最も右側の検出点の双方が1つ以上のプリミティブの外側に位置している場合、右方への移動は許可されず、処理2802はスキップされる。
【0202】
次に、処理2804にて、直線の式が凸領域(例えば長方形)で評価される。この評価には、それらの点がプリミティブ内にあるかどうかを決定することが含まれる。プリミティブ内にそれらの点が存在するかどうかに応じたこのような決定には、各直線の式を評価することにより各検出点にて正の値又は負の値となるかどうかを決定することが含まれていてもよい。
【0203】
直線の式は、プリミティブの内部で正になるとともに外部で負となるように、表現可能である。境界の直上に画素が描かれるべき包含的境界(inclusive edges)は、ゼロと評価され、正として取り扱われる。排他的境界(exclusive edges) は、描かれるべきものではなく、開始時の直線の式の値から1の値を最初に減算することにより、負となりうる。このように、排他的境界上の画素は、正の0となる代わりに、負の値(−1)として評価される。これにより、検出点の解釈について、包含/排他の方式を無視し、直線の式の符号を調べればよいことになる。
【0204】
それらの点で直線の式が評価された後、判別2806にて、検出点の現在位置がジャンプ位置を占めているかどうかが決定される。なお、ジャンプ位置は、下部の2つの検出位置がいずれも境界の外にない場合にのみ、格納される。判別2806でジャンプ位置が検出された場合、処理2808にて、該ジャンプ位置が算出されて格納される(あるいは、以前に格納されたジャンプ位置があればそれと置き換えられる)。一方、そうでない場合には、処理2808はスキップされる。
【0205】
引き続き図28を参照すると、次に、判別2810では、最も左側の検出位置がいずれもプリミティブの境界の外側にあるかどうかが決定される。また、この処理には、最も左側の検出点での直線の式の評価が、正又は負の値であるかどうかを決定することを伴う。特に、9又は10の境界の式の係数を関係する検出点で算出すると、9又は10個の値は、9又は10個の符号ビットを有することになる。例えば、現在の側が完全に境界の外側にあるかどうかを判別するために、本発明により、2つの検出ポイントからの10個の符号ビットが、AND演算される。そして、いずれかのビットが残れば、両点はその境界の外側となる。
【0206】
最も左側の検出点が双方ともプリミティブの外側にあるわけではないと決定された場合には、左方に、考慮されるべきプリミティブのさらなる点が残っているものと決定され、処理2812にて、検出点は左へ移動する。判別2810にて、最も左側の検出点が双方とも実際にプリミティブの境界の外側にあると結論された場合、左方には、考慮されるべきプリミティブのさらなる点はもはや存在しないと決定される。次に、判別2814では、処理2802に由来するスナップ位置があるかどうかが決定される。
【0207】
判別2814にて、スナップ位置が存在しないと判別された場合、処理が完了する。一方、スナップ位置が存在する場合、処理2816にて、検出点はスナップ位置へと移動する。その後、処理2804〜2812と同様の処理が実行されて、プリミティブの右側がマッピングされる。これは、直線の式が凸領域における点で評価されることにより、処理2818で開始する。
【0208】
それらの点にて直線の式が評価された後、判別2820にて、検出点の現在位置がジャンプ位置を占めるかどうかが決定される。判別2806にて、ジャンプ位置が検出されたと決定された場合、処理2822でこのジャンプ位置が算出されて格納される。一方、そうでなければ、処理2822はスキップされる。
【0209】
引き続き図28を参照すると、次に判別2824にて、最も右側の検出点は、双方ともプリミティブの外側にあるかどうかが決定される。最も右側の検出点の双方ともがプリミティブの外側にあるわけではない場合、右方に、考慮されるべきプリミティブのさらなる点が残っているものと判断され、処理2826にて、検出点は右へ移動する。判別2824にて、最も右側の検出点が双方ともプリミティブの境界の外側にあると決定された場合、右方には、考慮されるべきプリミティブのさらなる点はもはや存在しないと判断され、即時の処理が完了する。
【0210】
図28A及び図28Bは、プリミティブ2850について本発明の検出点が移動しうるシーケンスの説明図である。なお、様々な変更例として、それらの点が左方へ移動可能かどうかを判別2800にて決定して、最初に右へ進むことが含まれていてもよい。さらに、直線の式は、それらの点がプリミティブの内部又は外部のいずれにあるかを所望の方法で示すために、定義されてもよい。
【0211】
繰り返しのループに進むことを防ぐために、本発明は、ラスタ化の際に全方向へ移動することとしている。最初の実装は、上から下へと進み、次へと下降する前に横列上の全ての凸領域へ進む。横列を上から下へと処理することで、右から左又は左から右へとステップしないようにすることにより、ループ化が防止される。
【0212】
上述の処理の例が、図27Aのポリゴン定義点P1,P2,P3,P4を参照して示されうる。処理の際、近接した検出点の対が調べられて、それらの方向へ進むことに意味があるかどうかが決定されてもよい。例えば、図27AにてP3及びP4の双方がポリゴンの境界の外側にある一方で、P1及び/又はP2がそうでなければ、明白に描画可能な内部領域は、右にではなく左にある。従って、検出点は、右へは移動すべきでない。逆に、P3及びP4の双方が全境界の内側にあれば、描画可能な領域はP3及びP4を越えて存在し、右方へ移動することは適切である。実際に、P3及びP4が境界の外側になければ、右側へ移動することには意味がある。同じ論理が、P1及びP3により案内される上方への移動に、あるいは、P1及びP2により案内される左方への移動に、あるいは、P2及びP4に基づく下方への移動にも当てはまる。
【0213】
このように、上述の処理は、プリミティブ内部周辺における点により定義される凸領域を、検出点に案内されて移動又は移行する。それらの点により定義される凸領域は広くともよいので、多くの画素が同時に調べられる。使用の際、全検出点がプリミティブの全ての境界の内部にあれば、囲まれたがそのすべてが、必ず描画可能となる(凸のプリミティブを想定)。隅を検査することにより、すなわち、プリミティブの任意の領域を検査する能力が、内部か外部にあるか分割されていることにより、著しい利点がもたらされる。後者の場合にのみ、それらの点により定義される凸領域内の個々の画素が調べられる必要がある。このような場合、それらの点により定義される凸領域内の画素は、1つずつ検査されてもよく、該画素がプリミティブ内に存在するかどうか決定するための他の方法により検査されてもよい。さらに、どの境界が領域を分割してどれがそうでないのかを判別するのに必要なさらなる検査の量が検出点によって減少しうる。
【0214】
図29は、図27の横列処理動作2706に関連した本発明の交互になされる犂耕(boustrophedonic)処理を示すフローチャートである。図示の如く、最初に判別2900にて、以前の移動が第1の方向と第2の方向のいずれであったかが決定される。実際の以前の移動がなかったならば、デフォルトとして、以前の移動が想定されてもよい。判別2900にて以前の移動が第2の方向であったと決定された場合、直線の式は、凸領域の点、例えば、図28の処理2804と同様の方式による処理2902における長方形にて評価される。
【0215】
引き続き図29を参照すると、次に、判別2904にて、長方形の第1の側の検出点が、双方ともプリミティブの境界の外側にあるかどうかについて決定がなされる。そうでない場合には、検査点は、処理2906にて第1の方向へ移動又は進む。長方形の第1の側の検出点が、双方ともプリミティブの境界の外側にあると決定されると、次に、判別2905にて、それらの点が下方へ移動可能かどうか、すなわち、現在の位置がジャンプ位置を占めるかどうかが決定される。そうであれば、処理2908にて、ジャンプ位置が算出されて格納される。その後、処理は完了する。
【0216】
一方、判別2900にて、以前の処理が第1の方向であったと決定された場合、処理2902〜2908と同様の処理が実行される。特に、処理2910にて、凸領域(例えば長方形)の点での直線の式が評価される。そして、判別2912にて、長方形の第2の側の検出点が、双方ともプリミティブの境界の外側にあるかどうかについて決定される。そうでない場合には、検査点は、処理2914にて第2の方向へ移動又は進む。長方形の第2の側の検出点が、双方ともプリミティブの境界の外側にあると決定されると、次に、判別2913にて、それらの点が下方へ移動可能かどうか、すなわち、現在の位置がジャンプ位置を占めるかどうかが決定される。そうであれば、処理2916にて、ジャンプ位置が算出されて格納される。その後、処理は完了する。
【0217】
図29Aは、図29の犂耕処理に関連して本発明の検出点がプリミティブで移動するシーケンスの説明図である。上述の犂耕的ラスタ化には、ハードウェアによりよい性能をもたらす所定の規定に従うシーケンスが含まれている。図示の如く、犂耕的ラスタ化により、往復して折り返される蛇行したパターンがもたらされる。例えば、水平犂耕シーケンスにより、1つの横列上の左から右へのプリミティブの三角形内の全画素が生成され、次の列の横列上の右から左というように生成されてゆく。このような折り返し経路により、確実に、ある生成された画素から直近に生成された画素への平均距離が比較的短くなる。
【0218】
直近に生成された画素の近傍の画素を生成することは、直近の画素群及び/又はそれらに対応するテクスチャ値が限られた大きさのメモリ内に保持されている場合に、重要である。犂耕シーケンスにより、このようなメモリに既にロードされている画素又はテクスチャ値がより高頻度で検出されるので、メモリのロードがあまり発生しない。
【0219】
オプションとして、ラスタ化に先立ってプリミティブを複数の部分に分割する少なくとも1つの境界が用いられてもよい。処理の際、それらの点は、各部分内で個別に移動してもよい。さらに、それらの点は、複数の部分の第2のものの中で移動する前に、複数の部分の第1のものの全体を移動してもよい。
【0220】
図30は、境界を用いて交互になされる犂耕処理を示すフローチャートである。オプションとして、境界を用いるかどうかの判別は、プリミティブの大きさに基づいてなされてもよい。図30に示すように、境界を取り扱う犂耕処理は、追加の処理3000以外は図27のそれと同様である。この処理3000では、プリミティブを複数の部分又は帯に分割する少なくとも1つの境界が、定義される。
【0221】
引き続き図30を参照すると、追加の判別3001は、プリミティブの全部分の完了後になされる。特に、判別3001では、近接した部分の開始位置が処理3006で検出されたかどうかが決定される。そうであれば、検出点により定義された凸領域は、処理3002にて、プリミティブの近接した部分の開始位置へ移動し、プリミティブの新規の部分について、処理3004〜3010が繰り返される。以下、処理3006での開始位置を決定することに関係するさらなる情報を図31を参照して詳細に説明する。
【0222】
図31Aは、図30における境界に基づく犂耕処理に応じて本発明の凸領域がプリミティブにて移動する処理を示す説明図である。図示の如く、処理される第1の部分は、プリミティブの最上部の頂点を含むものである。処理の際、左隣の部分が処理され、その後、近接した左隣の部分が処理されてゆき、左隣の部分がなくなるまで継続する。次に、第1の部分の右に隣接する部分が処理され、その後、近接した右隣の部分に近接するものが処理されてゆく。これは、右に隣接する部分の全てが処理されるまで継続する。なお、ユーザの要望に応じて、その他の種類の順序付け方式が用いられてもよい。
【0223】
図31は、図30の横列処理3006に対応した処理を示すフローチャートである。このような処理は、判別3118乃至3121以外は、図29の犂耕処理と同様である。判別3118及び3120の双方は、検出点のうち、いずれかの境界を通ったものがあるかどうかを決定するものである。検出点がまだ境界内にあると決定された場合にのみ、各ループが継続する。
【0224】
処理3119及び3121では、凸領域の検出点のうち、いずれかの境界を通ったものがあると、判別3118及び3120でそれぞれ決定された場合に、プリミティブの近接した部分の開始位置が求められて格納される。図31Aに示すように、このような開始位置3126の各々は、境界を越えて存在するプリミティブの部分における最上部の点となるように定義される。この位置を格納することにより、プリミティブの境界定義部分に近接したものに関して処理が繰り返された場合に、開始位置が得られる。
【0225】
なお、処理3119及び3121は、プリミティブの第1の部分が処理されている際に、双方とも実行される。図31には特に示されていないが、これらの部分を第1の部分の左へと処理する場合、このような処理の第1のもののみが実行される。一方、これらの部分を第1の部分の右へと処理する場合、このような処理の第2のもののみが実行される。すなわち、第1の部分の左へと処理する場合、開始位置は、現在処理中の部分の最も左の境界を越えた場合にのみ算出される。同様に、第1の部分の右へと処理する場合、開始位置は、現在処理中の部分の最も右の境界を越えた場合にのみ算出される。
【0226】
ラスタ化の際に境界を用いることにより、パイプライン処理の際に重要な問題が解決される。プリミティブが非常に幅広いと、1つの横列における画素に関連した記憶域が、限られた大きさのメモリに適合しないことがある。境界を用いたラスタ化により、三角形が、限られた幅の横列(又は縦列)に分割され、次の部分へ移行する前に、このような部分内の全画素を生成する。
【0227】
例えば、三角形は幅が100画素であるのに、限られた画素又はテクスチャメモリは、以前の20画素の情報を保持するだけであってもよい。画素のシーケンスを、10画素の垂直部分内に抑えることにより、以前及び現在の横列上の全画素をメモリに適合させることが可能である。このことは、境界定義部分内の犂耕シーケンスが、常に、現在の横列上の以前の画素(もしあれば)をメモリ内に有するとともに、その上の横列の画素(もしあれば)をメモリ内に有することを意味している。
【0228】
最も基本的なメモリシステムは、データブロックを、各ブロック当たり所定のオーバーヘッドで転送する。メモリシステムへのアクセスが小規模であると、このオーバーヘッドにより重大な影響を受ける。効率化のために、より大規模なアクセスが用いられ、ブロックの残りが次なる使用に備えて保持される。それ以上に、キャッシュメモリシステムは、これら複数の新しいブロックを保持して、メモリアクセスを回避可能とする確率を高める。
【0229】
本発明の犂耕シーケンスは、現在のラインの一端の直下にある画素を反転させたり取り扱ったりする場合に、単一保持ブロック(single−retained−block)コンセプトを利用している。さらに、犂耕シーケンスは、特定の大きさの部分にラスタ化を制限する場合に、キャッシュを利用している。特に、ある部分内の2本の走査線が、キャッシュに適合するはずなので、第1の走査線のキャッシュ記憶により、第2の走査線の全体に亘って利益がもたらされる。
【0230】
境界定義部分のシーケンス又は数について、制約は何もない。本説明は、垂直部分及び水平犂耕パターンの例を用いているが、同様の原理が、水平部分、垂直犂耕パターンに拡張されてもよく、斜行部分及びパターンにまで拡張されてもよい。一実施形態では、ストリング(例えば、横列、縦列、斜め等)の長さは、その各々が、当該ストリングが存在しているプリミティブの大きさ未満に制限されていてもよい。
【0231】
図32は、図27の処理2702に対応した処理を示すフローチャートである。この即時の処理は、眼の背後にあるプリミティブを取り扱うために設計されている。これら外にある部分により、次段のラスタ化処理で問題が生じる。このことを達成するために、その即時の処理は、投影用に(すなわち物体を透視図法で見るのに)通例用いられる変数Wを使用している。変数Wは、近くの物体を大きく、遠くの物体を小さくするように、他の座標X、Y及びZが分配された数である。変数Wは、投影中心と対応する頂点との距離を表している。
【0232】
図32に示すように、最初に、複数の頂点により定義されたプリミティブが取得される。このような頂点の各々には、W値が含まれている。プリミティブを取得すると、セットアップモジュールは、頂点に基づいて、プリミティブを特徴づける直線を定義する役割を果たす。処理3200を参照されたい。
【0233】
そして、判別3202にてW値が分析される。図示の如く、1つのW値が負である場合、負の値の頂点とは反対側の直線の式は、処理3204にて反転させられる。すなわち、直線の式の係数に−1が乗ぜられる。さらに、2つのW値が負である場合、正のW値の頂点と、負のW値の各頂点とを結ぶ各直線の式は、処理3206にて反転させられる。3つのW値が負である場合、除外条件3207が発生し、ここで、本発明はその三角形を除外する。さらに、どのW値も負でない場合、追加の処理は何もなされない。
【0234】
図32A乃至図33に、直線の式を反転させることが、画面のどの部分を処理するかに影響する様子を示す。図32Aに、どのW値も負ではなく、直線の式が変更されないままとなる場合を示す。図示の如く、プリミティブの内部は、このような場合に埋められる。
【0235】
図32Bに、1つのW値が負であるため、それに応じて直線の式が反転させられる場合を示す。図示の如く、この場合には、その頂点と反対側のプリミティブの部分が埋められる。特に、描画される部分は、三角形における−Wの頂点を共有した2つの辺とそれぞれ同一直線上にある2本の直線が境界となり、さらに、三角形における2つの+Wの頂点がある辺が境界となる。
【0236】
図33に、2つのW値が負であるため、それに応じて直線の式が反転させられる場合を示す。図示の如く、それらの頂点の反対側のプリミティブの部分が、図27乃至図32を参照して上述した方法及び/又は処理を用いて埋められる。すなわち、描画される部分は、三角形における+Wの頂点を共有する2つの辺と同一直線上にある2本の直線が境界となり、さらに、+Wの頂点に隣接している。
【0237】
このように、本発明は、上記3つの場合の全てを、取り扱うことが可能である。三角形の一部が近平面及び/又は遠平面を越えている場合、それら平面内の部分のみが描画される。三角形に負のZの頂点が1つ又は2つある場合、正しく+Zとなった部分のみが描画される。
【0238】
全頂点が画面外であり、三角形が眼の背後から遠平面を越えて延びているとしても、三角形内部にあるとともに画面内にあってZ値が近境界及び遠境界間となっていれば画素となる。本発明により、不良画素を探すのにほとんど時間を費やさなくなる。このことは、画面の境界又は近平面若しくは遠平面によるあらゆるクリッピングが、常に、容易に探索可能な画面上の凸領域となるために可能となる。
【0239】
埋められる領域の内部に開始点がない場合に、問題が生じることがある。最上部の頂点が画面外にあるか、又は、近平面若しくは遠平面によりクリッピングされた場合に、このことが起こりうる。この場合、探査段階は、描画される領域の最上部の点を、上部から開始して、探索する必要がある。これは、三角形の境界の傾き及びZの傾きの符号に導かれることにより、効率的に実行可能である。三角形の直線の式を調べて、それが描画領域の外側にあることとその理由を見出すことができる。それを外側とするのがどの境界及び/又はZ境界であるかがわかっている場合、どの方向へ進むとこの境界又はZ境界に近づけるかがわかる。垂直方向よりも水平方向を優先(選択可能な場合)させて移動すると、描画領域を探索することにより、描画可能な画素の最上部のものがあればそれが検出されることが保証される。また、この問題は、開いた外部(−W)三角形においても生じる。この場合には、描画領域は、3つの頂点全ての上に延びる。
【0240】
本発明の一実施形態では、探査は、三角形の上端から下端へと進む。開始点は、どのW値も負ではなく、最上部の頂点が切り取り長方形内にある場合には、三角形の最上部の頂点である。それ以外の場合には、切り取り長方形の最上部の点が選択される。探査は、常に切り取り三角形内で始まり、そこから外れることがないので、その領域が、切り取り三角形を越えて遠くに延びた境界に囲まれていても、三角形における切り取り長方形内の部分のみが、常に描画される。このように、単純な切り取り長方形のクリッピングが行われる。
【0241】
次に、図1Aのテッセレーションモジュール51及び関連した他のコンポーネントについて説明する。テーブル19に、テッセレーションモジュール51から出力されてプリミティブ・アセンブリ・モジュール55に取得されうる種々のコマンドを示す。無論、テーブル19に示したコマンドのリストは、説明のためのみのものであり、いかなる意味においても、限定とみなされるべきではない。そうして、テッセレーションモジュール51は、生成する頂点のストリームから三角形が(効率的に)形成される方式及び様式を制御する。
【0242】
【表21】
【0243】
実際には、図1Aのテッセレーションモジュール51は、無効時には、入力されたデータを単に渡し、有効時には、テッセレーティングされたデータを出力するようになっている。テッセレーションが開始すると、NO_PRIMコマンドが、プリミティブ・アセンブリ・モジュール55へと送られる。このように、テッセレーションモジュール51は、三角形を生成することなく、頂点ファイル58を利用して、入力してきた頂点を、指示に従って、頂点ファイルの位置に一時的に格納することが可能である。処理の際、テッセレーションモジュール51は、任意のプリミティブ、三角形、ポリゴン、その一部等を評価してもよい。出力されたデータは、三角形を形成して、NO_PRIM、STRIP、FAN、LOAD,及びUSEコマンドをプリミティブ・アセンブリ・モジュール55へ送ることによりテッセレーティングしてプリミティブを近似するのに用いられる。
【0244】
図34に、テッセレーションモジュール51から出力されうる一連の頂点3400を表す例示的なデータを示す。図示の如く、三角形の2つの横列が表されている。頂点は、v0…v22と順に出力される。処理の際、変換及び光源処理モジュール52,54から取得した頂点のストリームをどのように解釈するかを指示するテーブル19の対応するコマンドが、プリミティブ・アセンブリ・モジュール55へと発行されうる。
【0245】
例えば、LOADコマンドの実行を受けて、頂点の第1の横列を表すデータが、頂点ファイル58へとロードされてもよい。次段の横列の処理の際、STRIP及びFANコマンドは、テッセレーションモジュール51により算出された頂点から三角形を形成するのに用いられてもよく、引き続き、変換モジュール及び光源処理モジュール52,54により処理されてもよい。さらに、頂点ファイル58内に格納された様々な頂点が、USEコマンドを用いて取得されて再利用されてもよい。
【0246】
このように、テッセレーションモジュール51におけるロジックにより、コマンドのストリームが生成される。なお、このコマンドのストリームは、プリミティブ・アセンブリ・モジュール55を制御して、テッセレーションモジュール51で生成された頂点のストリームから三角形を形成させるものである。
【0247】
オプションとして、STRIP及びFANコマンドに関連して、時計方向又は反時計方向の機能を指定するのに、モードビットが用いられてもよい。頂点が生成される順序のため、時計方向及び反時計方向の三角形のファン(fan)の双方を描画することが必要である。図34を参照されたい。個々の三角形のファンは、強調表示されており、プリミティブ・アセンブリ・モジュール55によって三角形形成に用いられる頂点の順となる。頂点は、使用されている評価アルゴリズムの特性により、固定的な順序で生成される。一般に、プリミティブ・アセンブリ・モジュール55が、これに関して柔軟であることが、重要である。すなわち、他のアルゴリズム(例えばテッセレーションアルゴリズム)に従った順序で、頂点を取得することが可能である。
【0248】
テーブル20に、図34のデータを生成するためにテッセレーションモジュール51からプリミティブアセンブリモジュール55へと出力されうる例示的なコマンドの組を示す。
【0249】
【表22】
【0250】
【表23】
【0251】
図示の如く、FANコマンドは、第1の頂点を、LOAD及びUSEコマンドにより指定された他の複数の頂点に接続する。また、USEコマンドは、頂点が頂点ファイル58へとLOADコマンドを用いてロードされたときには、いつでも、実行されうる。
【0252】
図35に、ロードされた頂点3500が交互に配置されて所定サイズの頂点キャッシュを使用可能とする方式を示す。図示の如く、頂点0は、表示されたように互い違いになるまで、再ロードされない。これにより、新しく入ってきたデータに置き換えられる前に、データが確実に再使用される。変換された各頂点毎に2つの三角形が描画されることを可能とするため、このことは重要である。これは、三角形細片について通常の2倍(半分)である。変換制約的なレンダリングでは、これにより性能が著しく向上する。
【0253】
上記の集積化で、テッセレーションと変換とが組み合わされた集積化が、より精細なテッセレーションによる質の向上をもたらしうる。より精細なテッセレーションは、少なくとも2つのことにより可能となる。例えば、三角形がチップ上で生成されてホストからのバスを通る必要がないので、ホストからの帯域幅が少なくて済む。さらに、テッセレーションモジュール51は、頂点を非常に効率よく使用するので、変換された頂点当たり、2つ以上の三角形が生成される。これにより、変換性能から、それ以上のものが得られるようになる。従って、上述のように、アプリケーションは、単一の半導体プラットフォームに付随した対応する機能を、標準的なインタフェースを通じて呼び出すことにより、これらの特性及び他の特性を利用可能である。
【0254】
図36乃至図41に、図1Aのテッセレーションモジュール51の処理の第1の代替的な実施形態を示す。ここで説明する種々の特徴は、単一の半導体プラットフォーム上に集積されたテッセレータの実装を進歩させるのに有益である。但し、以下の図面を参照して記述する特徴は、オプションであり、ユーザの希望に応じて様々であってもよい。
【0255】
図36に、本発明に係る一実施形態におけるハードウェアの実装を示す。図示の如く、部分(fractional)テッセレーションモジュール3649、変換モジュール3650、光源処理モジュール3652、及びラスタ化モジュール3656が、含まれている。処理の際、部分テッセレーションモジュール3649は、コンピュータグラフィクス処理の間に、レンダリングのために表面を分割する。このことを達成する具体的な方式を、以下の図面を参照して、より詳細に説明する。なお、他のコンポーネントの例示的な処理は、上述されている。
【0256】
図37は、本発明の一実施形態により構成された部分テッセレーションパターンを示す図である。図示の如く、プリミティブの内部メッシュ3700は、表面3701、すなわちレンダリングされるべき「パッチ」において規定されている。このような内部メッシュ3700には、所定数の横列3702及び縦列3704を規定するように構成された複数のストリップカーブ(strip curves)3703が、含まれている。ストリップカーブ3703は、頂点3705と交差する。
【0257】
内部メッシュ3700を周回しているのは、内部メッシュ3700の辺に沿って規定された複数の周辺メッシュ3706である。周辺メッシュ3706は、内部メッシュ3700と表面3701の外辺との間におけるテッセレーションの何らかの変化、又は断絶に対処する役割を果たす。周辺メッシュ3706に加えて、パッチの内部を横切るメッシュ3707がある。該メッシュ3707もまた、通常のメッシュ3700の境界となる。このようなメッシュにより、内部メッシュ3700内の横列/縦列の数を、ポッピング(popping)することなく、変化(増加/減少)させることができる。メッシュ3707は、3700の横列/縦列の高さ/幅の分数である。
【0258】
一実施形態では、周辺メッシュ3706の内辺3708の各々には、内部メッシュ3700の対応する所定数の横列又は縦列に等しい数のセグメント3710が含まれている。なお、セグメント3710は、頂点3705間に位置するストリップカーブ3703の一部として規定されている。さらに、周辺メッシュ3706の外辺3712の各々には、複数の等サイズのセグメント3714、及び等サイズのセグメント3714の一部である少なくとも1つの部分セグメント3716が含まれている。
【0259】
この構成にて、前進差分等の漸増的評価技術に対応させつつ、三角形の数をフレームからフレームへと連続して変化させることが可能な三角形のパターンが用いられている。その方式により、既存の頂点に新規の頂点を導入(除去)可能となるので、ポッピングが回避される。さらに、独立したテッセレーション要素により、アプリケーションのクラッキング(cracking)が回避される。テッセレーションのパターンが対称なので、等しいテッセレーション要素が指定されても、ギャップが発生しない。
【0260】
上記説明は、4つの周辺メッシュ3706を伴う1つの内部メッシュ3700に注目してなされた。本発明の他の態様では、内部メッシュ3700及び周辺メッシュ3706は、表面3701におけるサイズ及び形状が等しい複数の部分3718の1つを規定してもよい。また、各部分3718の部分セグメント3716が、表面3701の辺の中点3720近傍に配置されてもよい。オプションとして、周辺メッシュ206の幅3722は、内部メッシュ3700の横列又は縦列の幅3724に等しくともよい。図37を参照されたい。
【0261】
図38は、図37で述べた部分テッセレーションの生成に関連した種々の処理を示すフローチャートである。最初に、処理3800にて、仕様が取得される。このような仕様は、アプリケーション・プログラム・インタフェースにより提供されてもよく、表面3701の辺に沿ったセグメント3710の特定の数を、含んでいてもよい。また、内部メッシュ3700に含まれるべき横列及び縦列の数が含まれている。
【0262】
次に、処理3802では、表面が4つの象限に分割される。図38Aに、図38の処理3802に関連した象限に分割される前の表面を示す。図示の如く、表面3701の各辺はA、B、C、及びDとして定義され、表面3701の垂直及び水平方向の寸法はE及びFと、それぞれ定義されている。図38Bに、図38の処理3802に関連した象限に分割された後の表面3701を示す。なお、表面3701は、パラメータとなる中点で分割されて、象限0、1、2、及び3が生成される。
【0263】
引き続き図38を参照すると、処理3802で定義された象限は、次に処理3804にて付標される。図38Cに、図38の処理3804に関連した象限への付標を示す。図示の如く、象限0には、図38Aで上述した表面3701の対応する辺/寸法に関する長さに対応したA/2、F/2、D/2及びE/2として示された辺が含まれる。同様に、象限3には、E/2、F/2、D/2、及びC/2として示された辺が含まれる。象限1及び2は、同様に付標されてもよい。なお、レンダリングの方向は、必要に応じてこの時点で定義されてもよい。特に、テッセレーション及びレンダリングは、各辺に沿って表面3701の辺の中点に向かう方向(外辺A、B、C、Dについて)になされるか、又は表面3701の中心へ向かう(内辺E、Fについて)ように指定される。図38Cにおける矢印の方向を参照されたい。
【0264】
次に、図38の処理3806では、テッセレーションのパターンが、入力指定及び処理3804の付標に基づいて定義される。特に、内部メッシュ3700の頂点配置は、単に、処理3800で取得した入力指定により示された横列及び縦列の数により均一に定義される。さらに、各象限の辺におけるテッセレーションパターンは、等サイズのセグメント3714の数、及び部分セグメント3716の長さを求めることにより定義される。
【0265】
図38B及び図38Cにおける象限0の場合、等サイズのセグメント3714の数は、各辺の整数成分を算出することにより求められる。例えば、辺Aの場合、そこに対応したセグメントの数は、Int(A)である。さらに、部分セグメント3714の長さは、各辺の分数成分、Frac(A)=A−Int(A)、を算出することにより求められる。同様の計算が、各象限の各辺についてなされてもよい。また、このような値は、以下に述べる式#1を用いて検証されてもよい。
【0266】
式#1
Int(A)*1/A+[Frac(A)]/A=1
図38Dに、レンダリングの指定された方向に対応した象限の各辺に沿って、頂点3705及びセグメント3714,3716が配置される方式を示す。図示の如く、部分セグメント3716は、レンダリングの終点近傍に配置される。
【0267】
図38の処理3808にて、内部メッシュ3700の頂点3705及びセグメント3714,3716、並びに定義された象限の辺で、頂点がステッチ(stitched)される。これは、内部メッシュ3700の辺における終端の頂点で開始することにより実行される。ここで、終端の頂点は、部分セグメント3716の反対側に位置する。そして、表面3701における内部メッシュ及び外辺の頂点が、連結又はジグザグに「ステッチ」される。
【0268】
図38E、図38F、及び図38Gに、周辺メッシュ3706の外辺が、内部メッシュ3700における対応する所定の横列又は縦列の数に対して、より多い、より少ない、又は等しい数のセグメント3714,3716をそれぞれ有する状況でのステッチパターンを示す。図38E及び38Fに示すように、頂点がなくなると、最後の頂点3850が、残りの頂点のいずれかと、「扇を広げた」パターン3851に接続される。図38Gに示すように、このような扇を広げたパターンは、周辺メッシュ3706が、内部メッシュ3700における対応する所定の横列又は縦列の数と等しい数のセグメント3714,3716を有する状況では、必ずしも必要ではない
図39に、内部メッシュ3700及び周辺メッシュ3706間に遷移メッシュ(transition mesh)3900を含む代替的な構成を示す。図示の如く、内部メッシュ3700には、該内部メッシュ3700の辺に沿って位置する遷移メッシュ3900が含まれていてもよい。オプションとして、このような遷移メッシュ3900は、その寸法が内部メッシュ3700とは異なっていてもよい。例えば、遷移メッシュ3900のブロック3902は、内部メッシュ3700により規定されたブロック3904よりも大きくとも少なくともよい。
【0269】
さらに、周辺メッシュ3706の各外辺には、等サイズのセグメントの一部である部分セグメント3906が、2つ以上(偶数が好ましい)含まれていてもよい。前の実施形態とは異なり、部分セグメントは、周辺メッシュ3706の外辺の両端に配置されていてもよい。このように、上述の図37の実施形態が複数の内部メッシュ3700であるのに対して、本実施形態では、単一の内部メッシュ3700がもたらされる。そして、どのような不一致も、遷移メッシュ3900により処理される。
【0270】
図40に、本発明に係る一実施形態により三角形状のパッチ4000を分割するのに用いられる部分テッセレーションパターン化方式を示す。図示の如く、三角形状のパッチ4000は、図37の矩形パッチの細分化と同様に、複数のパッチへと細分化されてもよい。
【0271】
なお、本発明は、偶数及び奇数パリティに実装されてもよい。偶数及び奇数パリティにより、常に、外辺上に偶数のセグメントか、又は奇数のセグメントがあることを意味する。偶数の場合、厳密に横列及び縦列であるにもかかわらず、内部メッシュの横列及び縦列の数は分数である。奇数パリティの場合、内部に矩形メッシュがあり、これもまた分数である。偶数パリティの場合、分数の横列/縦列は中心を通る。奇数の場合、分数の横列は、正規のメッシュの周辺となる。
【0272】
図41に、テンソル積へと変換される必要がない三角形状のパッチ用のテッセレーション方式4100を示す。なお、偶数パリティ方式ではテンソル積が必要となり、奇数パリティ方式では三角形状のパッチが用いられる。
【0273】
図42乃至図50に、図1Aのテッセレーションモジュール51の処理の代替的な実施形態を示す。以下に述べる種々の特徴は、単一の半導体プラットフォーム上での集積化テッセレータの実装を進歩させるのに有益である。但し、以下の図面を参照して記述する特徴は、オプションであり、ユーザの希望に応じて様々である。
【0274】
図42は、本発明に係るハードウェア実装例の概略を示す図である。図示の如く、パッチをテッセレーティングする前進差分エンジン(forward differencing engine)4200が、プリミティブを定義するために含まれている。変換及び光源処理モジュール4201が、前進差分エンジン4200に接続している。なお、変換及び光源処理モジュール4201の処理例は上述されている。
【0275】
変換及び光源処理モジュール4201により処理されたプリミティブの頂点を格納するための頂点メモリ4202は、変換及び光源処理モジュール4201に接続している。当業者に周知のように、頂点メモリ4202は、処理を加速するために、算出又は変換された頂点を再使用可能とする。ラスタライザ(図示せず)を用いたレンダリングに備えてプリミティブを集めるプリミティブ・アセンブリ・ユニット4203が、頂点メモリ4202に接続している。
【0276】
図42Aは、図42の前進差分エンジン4200の実装を示す図である。図示の如く、前進差分エンジン4200には、マルチプレクサ4208の第1の組を通じて複数のメモリバンク4206へデータを送る入力部4205が含まれている。メモリバンク4206は、マルチプレクサ4211の第2の組を通じて、複数の加算器4210に接続している。フィードバックループ4214を通じて供給される複数の加数4212は、加算器4210に接続している。なお、オプションで、クロス乗積モジュール4216が、マルチプレクサ4211の第2の組と出力マルチプレクサ4218との間に、図42に示すように接続されてもよい。
【0277】
保護曲線(guard curves)を前進差分手順に統合するために、開始及び終了保護曲線メモリバンク4220が、入力部4205と第2の組のマルチプレクサ4211との間に接続されている。この構造により、前進差分エンジン4200は、4つのポリゴンを並行処理可能である。なお、各頂点要素について多項式があり、並列の加算器が4つを同時に評価しているとともにアクティブな多項式が実際にいくつもあってもよい。通常は、並行して評価される4つの多項式は、x、y、z及びwの位置の要素、又はs、t、r及びqのテクスチャ要素に対応する。
【0278】
処理の際、前進差分エンジン4200は、各クロック毎に、4つの浮動小数点加算を開始して、その結果を加数4212の1つに格納する。次のレベルの処理は、多項式的に多様となりうる頂点の評価である。使用の際、メモリバンク4206には、多様な頂点要素の各々に対応した前進差分係数が含まれる。一実施形態では、メモリバンク4206の構成をプログラムすること、頂点を評価する厳密な方法を求めること、各頂点要素の宛先を指定すること、及び出力頂点(図示せず)内の各頂点要素の最終的な位置を求めるために、64ビットレジスタ(図示せず)が用いられてもよい。
【0279】
図42Bは、代替的な前進差分エンジン4250を示す図である。この前進差分エンジン4250は、独立した保護曲線メモリバンク4220を利用する代わりに、メモリバンク4206を強化している。なお、メモリアクセスの裁定と、より多くのメモリを利用することとの兼ね合いに基づいて、図42及び図42Aで述べた位置に、どのような種類のハードウェアの実装が用いられてもよい。可能な変更例として、図42Bのクロス乗積モジュールを除去することが挙げられる。
【0280】
図42A及び図42Bの前進差分エンジン4200,4250は、処理の際に法線及び位置の値を算出するようになっている。種々の代替的な実施形態では、他の頂点要素の値、すなわち、色、テクスチャ等が、本発明により処理されてもよい。法線の値は、前進差分エンジン4200で算出され、変換及び光源処理モジュール4201で正規化される。法線の値は、表面パッチのパラメータの偏導関数を評価して、そのクロス乗積を計算することにより算出される。頂点及び法線計算の例示的な擬似コードを、以下のテーブル21に示す。なお、種々の代替的な実施形態にて、必ずしも偏導関数が評価される必要はない。
【0281】
【表24】
【0282】
図43に、本発明に係る一実施形態により表面パッチを分割する際の保護曲線及び逆曲線の利用について示す。図示の如く、保護曲線4300は、従来技術に伴う問題を解決するために、ストリップカーブ4302間に導入される。なお、本発明の保護曲線4300は、従来技術に伴う問題を解決するために特に挿入されていること以外は、ストリップカーブ4302と同様である。一実施形態では、他の頂点要素での差異が、概して許容され、及び/又は、あまり拒絶されるべきものでないため、保護曲線4300は、位置を算出するためにのみ用いられる。
【0283】
図43に示すように、左側のパッチの右端に沿った保護曲線4300は、右側のパッチの左端に沿ったストリップカーブ4302と同一である。ストリップがテッセレーティングされると、そのストリップの最初と最後の頂点位置は、保護曲線4300から算出された値で上書きされるので、近接したテッセレーションが確実に一致することになる。
【0284】
図44は、方法4400を示すフローチャートである。この方法4400では、図43の保護曲線4300は、図43及び図43Aの例示的なハードウェアを用いて生成される。最初に、処理4402にて、パッチが取得される。その後、そのパッチに対応した複数のストリップカーブ4302が、第1の所定方向に定義される。処理4404を参照されたい。これらのストリップカーブ4302を用いて、該ストリップカーブにより規定された領域が、レンダリングのために複数のプリミティブへと分割されてもよい。
【0285】
次に、パッチに対応した少なくとも1つの保護曲線4300が、処理4406で生成される。保護曲線4300は、ストリップカーブ4302の端部に沿って、パラメータ空間において第1の所定方向に対して垂直である第2の所定方向に配置される。図43を参照して上述したように、湾曲した表面を三角形へとテッセレーティングする場合に、このような保護曲線4300が頂点の不整合を防止する。図43に示すように、ある使用例では、2つの保護曲線4300が、各パッチに対して一貫して用いられてもよい。
【0286】
図45に、保護曲線とともに用いられる逆ステッチ(reverse stitching)法を示す。図5で述べた保護曲線法の際に、逆ストリップカーブ4510が、第1の所定方向に対して平行で向きが逆の第3の所定方向に、生成されてもよい。これは、近接した表面パッチの保護曲線又はストリップカーブの方向を、一致させるためになされる。図43の右側のパッチの左端を参照されたい。これを実行すると、第1の所定方向内のストリップカーブ及び逆ストリップカーブ4510により規定される領域が、逆ステッチ法を用いて分割されうる。
【0287】
図45に示すように、逆ストリップカーブ4510は、ストリップカーブに対して垂直でない点において、図43の保護曲線とは異なっている。保護曲線が、ストリップカーブにより既に算出された値を上書きするのに対し、逆ストリップカーブは、全ての値/頂点要素を直接算出するので、上書きは必要とならない。
【0288】
図45に示すように、表面パッチ4502の各ストリップカーブ4500は、オプションで、複数のセグメント4504へと分割されてもよい。なお、セグメント4504のサイズは、グラフィクス・パイプライン・システムの頂点メモリ4202のサイズに基づいて、決められてもよい。例えば、頂点メモリ4202が、20個の頂点を処理可能であり、ストリップカーブ4500が、20個のセグメント4504へと分割されるということもある。さらに、セグメント4504は、任意の部分セグメント4504が、対応する評価方向の終点4508の近傍に位置するように、ストリップカーブ4500の対応する評価方向の開始点4506で始まる。保護曲線4510についても、同様の処理が実行される。
【0289】
最適のテッセレーションがなされるように、逆ストリップカーブ4510に近接したストリップカーブ4500の頂点は、逆ストリップカーブ4510におけるものとは異なるように、頂点メモリ4202へとロードされる。特に、各ストリップカーブ4500に関連する頂点は、その各々が、第1の所定の順序4520でロードされる。一方、逆ストリップカーブ4510に関連した頂点は、その各々が、第2の所定の順序4522でロードされる。なお、位置及び法線の値は、変換及び光源処理の前に、ストリップカーブ4500に併合され、単一の位置のみが変換される。
【0290】
図46に、保護曲線の長さ及び該保護曲線同士の間隔が頂点メモリ4202のサイズに基づいて設定される方式を示す。図示の如く、複数の保護曲線4600が生成され、該保護曲線4600同士の間隔4602は、プリミティブの頂点がロードされる頂点メモリ4202のサイズに基づいて決定される。特に、保護曲線4600同士の間隔4602は、ストリップカーブ4603の各頂点が頂点メモリ4202に適合するように設定される。要するに、ストリップカーブ4603は、頂点メモリ4202のサイズに合わせるために、保護曲線4600により分割される。
【0291】
さらに、保護曲線4600の長さ4606は、プリミティブの頂点がロードされる頂点メモリ4202のサイズに基づいて、決められる。特に、保護曲線4600の長さ4604は、保護曲線4600の各頂点が頂点メモリ4202に適合するように設定される。このように、保護曲線4600は、表面パッチの辺に、同一直線上にある複数の保護曲線4600が含まれるように、ストリップカーブ4603と同様に処理される。
【0292】
このように、図46で述べた技術は、頂点メモリ4202に納まるよりも多くの頂点が横列にあるという状況に適合するように、複数の「帯(swaths)」4606を規定する。図46では、パッチは、4つの帯4606とみなされる。ストリップカーブ4603の係数が、ホストにより算出されて、前進差分エンジン4600により評価される。ストリップカーブ4603の先頭での値は、前進差分エンジン4600内の反復の結果として算出される。あるものから次のものへの曲線定義の反復結果と同様に、ストリップカーブ4603の末端での値は、ホストにより算出される。
【0293】
この結果、ストリップカーブ4603の頭部での値は、次のストリップカーブ4603の末端における論理的に等価なものと等しくなるわけではない。また、ホストは、保護曲線4600を供給して、ストリップカーブ4603の始まりと終りに沿って評価を行う。また、保護曲線はストリップカーブに対応可能なので、保護曲線は、ストリップカーブが生成するのと同じ個数の頂点のみを生成しうる。この制約により、帯4606が複数の帯片4610へと分割される結果となる。
【0294】
図47乃至図50に、三角形状のパッチが本発明に係る一実施形態により処理される方式を示す。図47及び図48に示すように、レンダリングされるべき三角形状のパッチ4800は、内部領域4804の周囲に規定された遷移領域4802を有していてもよい。なお、このような遷移領域4802は、上述の矩形パッチと同様に処理されてもよい。
【0295】
図49に、保護曲線4900が内部領域4804内部及びその周辺に構成される方式を示す。図示の如く、1つの帯における第1の帯片(swatch)は、三角形状であり、他のものは通常のものである。三角形状の帯片4902にあたると、内部カウンタLはストリップの長さに保たれる。最初に、このようなカウンタLは、“0”に初期化される。その後、所定数の点(L)が、細片に沿って評価される。そして、最後の下部右側をスキップして、所定数の三角形(2*L−1)が描画される。末端の保護曲線が、点Lのために用いられる。残りの保護曲線は、各ストリップの所定間隔(L)後に、インクリメントされる。図50に、本実施形態による処理完了後の三角形状のパッチ4800を示す。
【0296】
このように、本発明では、浮動小数点演算を同じオーダーで実行することにより、パッチにおける一貫した境界の探査方向が用いられる。これは、結果として、ピクセルの欠落及びレンダリングのアーティファクト(artifacts)を防ぐことになる。隣接した2つのパッチに共有された境界上の点に対して、同一の値が生成されることを保証するために、一貫性が必要とされる。一貫性が必要とされることにより、追加のコマンド/プリミティブ、及び、それ以外では必要でないパッチ内の遷移領域を導入することが要請され、「逆の」境界があるパッチにより、遷移が必要となる。境界の探査方向は、境界の定義自体により決定される必要がある。
【0297】
このように本発明により、複数の浮動小数点計算が、確実に同一のプロセッサ上でなされるようになる。例えば、Intel(登録商標)PentiumIII(登録商標)は、必ずしも、本発明の浮動小数点加算器により算出されたものと同一の結果を算出するわけではない。一実施形態では、ホストが、前進差分曲線係数を算出してもよく、ASICが、曲線を評価してステッチしてもよい。このように、ASICが、いくらかの(但し僅かに)パッチの表記を有していてもよい。なお、計算は、ユーザの希望に応じて、アプリケーション専用又はソフトウェア管理されるハードウェア上で実行されてもよい。
【0298】
図51乃至図53に、図1Aのテッセレーションモジュール51の処理の第3の代替的な実施形態を示す。以下に述べる種々の特徴は、単一の半導体プラットフォーム上での統合されたテッセレータの実装を進歩させるのに有益である。なお、以下の図面を参照した特徴はオプションであり、ユーザの希望に応じて様々であってもよい。
【0299】
図51は、本発明に係るハードウェア構成5100の一例を示す図である。図示の如く、ハードウェア5100には、パッチ変換モジュール5102、四角形パッチテッセレータ5103、変換/光源処理エンジン5104、及び三角形ラスタライザ5106が含まれている。当該技術で周知のように、四角形パッチテッセレータ5103は、パッチを複数の三角形へと変換する。なお、四角形パッチテッセレータ5103は、特に、四角形状のパッチ、すなわちテンソル積を処理するように構成されている。また、変換/光源処理エンジン5104及びレンダリグエンジン5106の処理例は上述されている。
【0300】
引き続き図51を参照すると、パッチ変換モジュール5102が、四角形パッチテッセレータ5103に接続している。処理の際、パッチ変換モジュール5102は、三角形状のパッチを、四角形状のパッチをレンダリングするのに適合したグラフィクス・パイプラインを用いてレンダリングされるのに適した形状へと、変換するようになっている。特に、パッチ変換モジュール5102は、三角形状のパッチを、四角形パッチテッセレータ303が処理するようになった複数の四角形状のパッチへと変換する。
【0301】
三角形状のパッチを変換すること、又はパラメータ表示し直すことは、元のパッチの幾何学的特性の全てが保存されるようになされる。さらに、パラメータ表示しなおすことで、ある種の従来技術で必要となる扱いにくい特異点がなくなる。また、三角形状のパッチは、様々な次数の多項式を用いて特徴づけられる。一実施形態では、パッチの次数は、変換により変化しなくともよい。すなわち、次数が増えなくともよい。例として、パラメータ表示し直すことは、以下のように特徴づけられうる。三角形状のパッチが与えられると、T(u,v)、変数u及びvは、以下の表現を用いて置き換えられる。
【0302】
u=s/2−st/6 v=t/2−st/6. なお、パラメータ値の対(0,0),(0,1),(1,0),(1,1)が、s及びtに代入されると、得られるu及びvのパラメータの値の組は、(0,0),(0,1/2),(1/2,0),(1/3,1/3)となる。
【0303】
図52は、図51のパッチ変換モジュール5102が三角形状のパッチを変換する方法5200を示すフローチャートである。図示の如く、最初に、三角形状のパッチが処理5202にて取得される。次に、処理5204では、取得された三角形状のパッチが、複数の四角形状のパッチへと変換される。このような四角形状のパッチは、四角形状のパッチをレンダリングするために特に設けられたグラフィクス・パイプラインにより処理されるのに適している。そうして、四角形パッチテッセレータ5103は、処理5206にて四角形パッチをテッセレーティングしてもよい。
【0304】
図53に、図52の方法5200により三角形状のパッチが変換される方式を示す。図示の如く、三角形状のパッチ5300は、複数の四角形状のパッチ5302へと分割されている。一実施形態では、各四角形状のパッチ5302は凸である。
【0305】
オプションとして、各四角形状のパッチ5302の一隅5304が、三角形状のパッチ5300の辺の中点に位置していてもよい。さらに、各四角形状のパッチ5302の一隅は、三角形状のパッチ5300の重心5306に位置していてもよい。なお、他の様々な実施形態では、隅は所望の位置にあればよい。さらに、四角形状のパッチの数は、ユーザの希望に応じて様々であってもよい。
【0306】
四角形状のパッチ5302の複数の境界に課せられうる制約として、それらが四辺の凸領域を形成し、その各々が三角形状のパッチ5300のパラメータ空間において直線であるということがある。オプションとして、四角形状のパッチ5302の各辺は、パラメータ空間において直線状であってもよい。さらに、一実施形態では、1つの頂点が三角形内部に位置していて、三角形状のパッチ5300の3辺の各々の上に、1つの頂点が位置していてもよい。図53を参照されたい。
【0307】
以上、様々な実施形態について説明したが、それらは、限定のためではなく、例としてのためのみに示されたものである。このように、好ましい実施形態の広がり及び範囲は、上述の例示的な実施形態により限定されるべきではなく、特許請求の範囲及びそれらとの均等の範囲によってのみ規定されるべきである。
【図面の簡単な説明】
【図1】
コンピュータグラフィクス処理の従来方法を示した図である。
【図1A】
単一の半導体プラットフォーム上に実装された本発明に係る一実施形態の種々のコンポーネントを説明するフローチャートを示した図である。
【図2】
本発明に係る一実施形態において頂点属性バッファ(VAB)を示す図である。
【図2A】
本発明に係る一実施形態においてVABにより受信されうる種々のコマンドの説明図である。
【図2B】
本発明に係る一実施形態において頂点属性をVABへとロードすること及びそこから転送する方法を説明するフローチャートを示した図である。
【図2C】
図2Bの処理を実装するために用いられた本発明に係る構成を示す模式図である。
【図3】
本発明に係る一実施形態によるVABに関連したモードビットの説明図である。
【図4】
本発明に係る変換モジュールの説明図である。
【図4A】
本発明に係る一実施形態により複数の実行スレッドを実行する方法を説明するフローチャートを示す図である。
【図4B】
本発明に係る一実施形態により図4Aの方法が実行される方式を説明するフローチャートを示す図である。
【図5】
本発明に係る一実施形態における図4の変換モジュールの機能ユニットを示す説明図である。
【図6】
図5の変換モジュールの乗算論理ユニット(MLU)を示す図である。
【図7】
図5の変換モジュールの演算論理ユニット(ALU)を示す図である。
【図8】
図5の変換モジュールのレジスタファイルを示す図である。
【図9】
図5の変換モジュールの逆論理ユニット(ILU)を示す図である。
【図10】
本発明に係る一実施形態における図5の変換モジュールの出力コンバータの出力アドレス図である。
【図11】
本発明に係る一実施形態における図5の変換モジュールのマイクロコード体系の説明図である。
【図12】
本発明に係る一実施形態による図5の変換モジュールのシーケンサを示す図である。
【図13】
図12の変換モジュールのシーケンサの使用に関連した種々の演算を示すフローチャートを示す図である。
【図14】
図12の変換モジュールのシーケンサのシーケンスコンポーネントの処理を示すフロー図である。
【図14A】
グラフィクス処理の際のスカラー及びベクトル頂点データの処理のために用いられる本発明に係るコンポーネントを示すフロー図である。
【図14B】
図5の変換モジュールに対応した図14Aに示す本発明の機能コンポーネントとしてとりうる組み合わせ1451を示すフロー図である。
【図14C】
図14Aに示した本発明の機能コンポーネントとしてとりうる別の組み合わせ1453を示すフロー図である。
【図14D】
本発明に係る一実施形態によるグラフィクス処理の際にブレンディング処理を実行するための図12の変換モジュールにより実装された方法を示す説明図である。
【図15】
本発明に係る一実施形態における光源処理モジュールを示す図である。
【図16】
本発明に係る一実施形態における図15の光源処理モジュールの機能ユニットを示す図である。
【図17】
本発明に係る一実施形態における図16の光源処理モジュールの乗算論理ユニット(MLU)を示す図である。
【図18】
本発明に係る一実施形態における図16の光源処理モジュールの演算処理モジュール(ALU)を示す図である。
【図19】
本発明に係る一実施形態における図16の光源処理モジュールのレジスタユニットを示す図である。
【図20】
本発明に係る一実施形態における図16の光源処理モジュールの光源処理論理ユニット(LLU)を示す図である。
【図21】
本発明に係る一実施形態における図16の光源処理モジュールに関連したフラグレジスタの構成を示す図である。
【図22】
本発明に係る一実施形態における図16の光源処理モジュールに関連したマイクロコードフィールドの説明図である。
【図23】
本発明に係る一実施形態における図16の光源処理モジュールに関連したシーケンサを示す図である。
【図24】
本発明に係る一実施形態により変換及び光源処理モジュールのシーケンサがバッファに関連した入力及び出力を制御可能な方法を説明するフローチャートを示す図である。
【図25】
図24の方法に従い、変換及び光源処理モジュールのシーケンサが、対応するバッファの入力及び出力を制御可能な方法を示す説明図である。
【図25B】
図1Bのラスタライザの種々のモジュールを示す図である。
【図26】
本発明に係るラスタ化モジュールのセットアップモジュールを示す図である。
【図26A】
図26のラスタライザのセットアップモジュールにより算出される種々のパラメータを示す説明図である。
【図27】
図26に示すラスタライザコンポーネントのセットアップ及びトラバースモジュールに関連した本発明の方法を説明するフローチャートを示す図である。
【図27A】
本発明に係る一実施形態により、プリミティブ内の領域を特定するために移動する凸領域を囲む検出点を示す説明図である。
【図28】
図27の横列処理動作2706に関連した本発明に係る処理を説明するフローチャートを示す図である。
【図28A】
本発明に係る凸領域がプリミティブについて移動するシーケンスの説明図である。
【図28B】
本発明に係る凸領域がプリミティブについて移動するシーケンスの他の例の説明図である。
【図29】
図27の横列処理動作2706に関連した本発明に係る交互になされる犂耕処理を説明するフローチャートを示す図である。
【図29A】
図29の犂耕処理に関連して本発明に係る凸領域がプリミティブで移動するシーケンスの説明図である。
【図30】
境界を用いて交互になされる犂耕処理を説明するフローチャートを示す図である。
【図31】
図30の処理3006に対応した処理を説明するフローチャートを示す図である。
【図31A】
図30及び図31における境界に基づく犂耕処理に応じて本発明に係る凸領域がプリミティブにて移動する処理を示す説明図である。
【図32】
図27の処理2702に対応した処理を説明するフローチャートを示す図である。
【図32A】
図32の処理で負のW値が算出されない場合に描画される領域を示す説明図である。
【図32B】
図32の処理で負のW値が1つのみ算出された場合に描画される領域を示す説明図である。
【図33】
図32の処理で負のW値が2つのみ算出された場合に描画される領域を示す説明図である。
【図34】
図1Aのテッセレーションモジュールで処理されうる頂点のストリングを表す例示的なデータを示す説明図である。
【図35】
ロードされた頂点が交互に配置されて所定サイズの頂点キャッシュを使用可能とする方式を示す説明図である。
【図36】
図1Aのテッセレーションモジュールの処理の第1の代替的な実施形態を示す説明図である。
【図37】
図1Aのテッセレーションモジュールの処理の第1の代替的な実施形態を示す説明図である。
【図38】
図1Aのテッセレーションモジュールの処理の第1の代替的な実施形態を示す説明図である。
【図39】
図1Aのテッセレーションモジュールの処理の第1の代替的な実施形態を示す説明図である。
【図40】
図1Aのテッセレーションモジュールの処理の第1の代替的な実施形態を示す説明図である。
【図41】
図1Aのテッセレーションモジュールの処理の第1の代替的な実施形態を示す説明図である。
【図42】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図43】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図44】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図45】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図46】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図47】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図48】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図49】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図50】
図1Aのテッセレーションモジュールの処理の第2の代替的な実施形態を示す説明図である。
【図51】
図1Aのテッセレーションモジュールの処理の第3の代替的な実施形態を示す説明図である。
【図52】
図1Aのテッセレーションモジュールの処理の第3の代替的な実施形態を示す説明図である。
【図53】
図1Aのテッセレーションモジュールの処理の第3の代替的な実施形態を示す説明図である。
Claims (20)
- グラフィクス処理用のグラフィクス・パイプライン・システムにおいて、
(a)単一の半導体プラットフォーム上に配置され、テッセレーション用にデータを取得するように適合したテッセレーションモジュールと、
(b)前記テッセレーションモジュールに接続され、前記テッセレーションモジュールから取得したデータを、第1の空間から第2の空間へと変換するために、単一の半導体プラットフォーム上に配置された変換モジュールと、
(c)前記変換モジュールに接続され、前記変換モジュールから取得したデータに対して光源処理演算を実行するために、単一の半導体プラットフォーム上に配置された光源処理モジュールと、
(d)前記光源処理モジュールに接続され、前記光源処理モジュールから取得したデータをレンダリングするために、単一の半導体プラットフォーム上に配置されたラスタライザと、を備えたシステム。 - 前記テッセレーションモジュールは、プリミティブ無(no primitive)、ファン(fan)、ストリップ(strip)、ロード(load)及びユーズ(use)からなるグループから選択される複数のコマンドを生成するように適合されている請求項1に記載のシステム。
- 前記テッセレーションモジュールは、データを再利用するためにメモリを用いる請求項1に記載のシステム。
- 前記テッセレーションモジュールは、保護曲線を用いて表面分割するように適合する請求項1に記載のシステム。
- 前記表面分割は、パッチを取得し、前記パッチに対応した複数のストリップカーブを第1の所定方向に定義し、そこで前記ストリップカーブにより規定される領域が複数のプリミティブへと分割されるように適合され、及び前記ストリップカーブの端部に沿って前記第1の所定方向と垂直な第2の所定方向に配置されていて前記パッチに対応した少なくとも1つの保護曲線を生成することを含む請求項4に記載のシステム。
- 前記テッセレーションモジュールは、部分テッセレーションを用いて表面分割するように適合する請求項1に記載のシステム。
- 前記表面分割は、レンダリングされる表面におけるプリミティブの内部メッシュを定義し、及び前記内部メッシュの辺に沿って複数の周辺メッシュを定義することを含み、そこで前記周辺メッシュの各外辺は、複数の等サイズのセグメント及び前記等サイズのセグメントの一部である少なくとも1つの部分セグメントとを含む請求項6に記載のシステム。
- 前記テッセレーションモジュールは、四角形状のパッチをレンダリングするのに適合したグラフィクス・パイプラインを用いてコンピュータグラフィクス処理にてレンダリングされる三角形状のパッチを変換するように適合する請求項1に記載のシステム。
- 三角形状のパッチの変換は、三角形状のパッチを取得し、及び前記三角形状のパッチを複数の四角形状のパッチへと分割することを含み、そこで前記四角形状のパッチは、四角形状のパッチをレンダリングするために設けられたグラフィクス・パイプラインにより処理されるのに適している請求項8に記載のシステム。
- 前記テッセレーションは、前記グラフィクス・パイプライン・システムとアプリケーションとの間のインタフェースにより実行される請求項1に記載のシステム。
- グラフィクス処理方法において、
(a)データをテッセレーティングし、
(b)前記データを第1の空間から第2の空間へと変換し、
(c)前記データを光源処理し、及び
(d)前記データをレンダリングし、そこで前記データが単一の半導体プラットフォーム上で、テッセレートされ、変換され、光源処理され及びレンダリングされる方法。 - 前記テッセレーションは、プリミティブ無(no primitive)、ファン(fan)、ストリップ(strip)、ロード(load)及びユーズ(use)からなるグループから選択される複数のコマンドを生成することを含む請求項11に記載の方法。
- 前記テッセレーションは、再利用のためにデータを格納するメモリを用いるテッセレーションモジュールを用いて実行される請求項11に記載の方法。
- 前記テッセレーションは、保護曲線を用いて表面分割することを含む請求項11に記載の方法。
- 前記表面分割は、パッチを取得し、前記パッチに対応した複数のストリップカーブを第1の所定方向に定義し、そこで前記ストリップカーブにより規定される領域が複数のプリミティブへと分割されるように適合しており、及び前記ストリップカーブの端部に沿って前記第1の所定方向と垂直な第2の所定方向に配置されていて前記パッチに対応した少なくとも1つの保護曲線を生成することを含む請求項14に記載の方法。
- 前記テッセレーションは、部分テッセレーションを用いて表面分割することを含む請求項11に記載の方法。
- 前記表面分割は、レンダリングされる表面におけるプリミティブの内部メッシュを定義し、及び前記内部メッシュの辺に沿って複数の周辺メッシュを定義することを含み、そこで前記周辺メッシュの各外辺は、複数の等サイズのセグメント及び前記等サイズのセグメントの一部である少なくとも1つの部分セグメントとを含む請求項16に記載の方法。
- 前記テッセレーションは、四角形状のパッチをレンダリングするのに適合したグラフィクス・パイプラインを用いてコンピュータグラフィクス処理にてレンダリングされる三角形状のパッチを変換することを含む請求項11に記載の方法。
- 三角形状のパッチの変換は、三角形状のパッチを取得し、及び前記三角形状のパッチを複数の四角形状のパッチへと分割することを含み、前記四角形状のパッチは、四角形状のパッチをレンダリングするために設けられたグラフィクス・パイプラインにより処理されるように適している請求項18に記載の方法。
- 前記テッセレーションは、前記単一の半導体プラットフォームとアプリケーションとの間のインタフェースにより実行される請求項11に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/718,890 US6597356B1 (en) | 2000-08-31 | 2000-11-21 | Integrated tessellator in a graphics processing unit |
PCT/US2001/045562 WO2002043011A1 (en) | 2000-11-21 | 2001-11-07 | An integrated tessellator in a graphics processing unit |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004514973A true JP2004514973A (ja) | 2004-05-20 |
JP4113776B2 JP4113776B2 (ja) | 2008-07-09 |
Family
ID=24887969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002544676A Expired - Lifetime JP4113776B2 (ja) | 2000-11-21 | 2001-11-07 | グラフィクス処理をおこなう集積回路及び方法 |
Country Status (6)
Country | Link |
---|---|
US (2) | US6597356B1 (ja) |
EP (1) | EP1350225B1 (ja) |
JP (1) | JP4113776B2 (ja) |
AU (1) | AU2002228718A1 (ja) |
DE (1) | DE60142700D1 (ja) |
WO (1) | WO2002043011A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011522322A (ja) * | 2008-05-29 | 2011-07-28 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | ジオメトリシェーダを用いる平面充填エンジンのためのシステム、方法及びコンピュータプログラム製品 |
JP2012514273A (ja) * | 2008-12-31 | 2012-06-21 | インテル・コーポレーション | テッセレーション量に対してテッセレーション時間が線形に増加するテッセレータ |
Families Citing this family (77)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9098297B2 (en) * | 1997-05-08 | 2015-08-04 | Nvidia Corporation | Hardware accelerator for an object-oriented programming language |
US6480205B1 (en) | 1998-07-22 | 2002-11-12 | Nvidia Corporation | Method and apparatus for occlusion culling in graphics systems |
US7209140B1 (en) | 1999-12-06 | 2007-04-24 | Nvidia Corporation | System, method and article of manufacture for a programmable vertex processing model with instruction set |
US6844880B1 (en) | 1999-12-06 | 2005-01-18 | Nvidia Corporation | System, method and computer program product for an improved programmable vertex processing model with instruction set |
US6452595B1 (en) * | 1999-12-06 | 2002-09-17 | Nvidia Corporation | Integrated graphics processing unit with antialiasing |
USRE42534E1 (en) * | 2000-07-28 | 2011-07-12 | Adrian Sfarti | Bicubic surface real-time tesselation unit |
US7245299B2 (en) * | 2003-05-12 | 2007-07-17 | Adrian Sfarti | Bicubic surface real-time tesselation unit |
US8692844B1 (en) | 2000-09-28 | 2014-04-08 | Nvidia Corporation | Method and system for efficient antialiased rendering |
US7136063B2 (en) * | 2001-03-19 | 2006-11-14 | Microsoft Corporation | Triangle management in triangular meshes based on a tri-edge structure |
EP1255227A1 (en) * | 2001-04-27 | 2002-11-06 | STMicroelectronics Limited | Vertices index processor |
US6816161B2 (en) * | 2002-01-30 | 2004-11-09 | Sun Microsystems, Inc. | Vertex assembly buffer and primitive launch buffer |
GB2415117B (en) * | 2002-05-10 | 2006-04-12 | Imagination Tech Ltd | An interface and method of interfacing between a parametric modelling unit and a polygon based rendering system |
US6980209B1 (en) * | 2002-06-14 | 2005-12-27 | Nvidia Corporation | Method and system for scalable, dataflow-based, programmable processing of graphics data |
US7148888B2 (en) * | 2003-04-04 | 2006-12-12 | Via Technologies, Inc. | Head/data request in 3D graphics |
US7259765B2 (en) | 2003-04-04 | 2007-08-21 | S3 Graphics Co., Ltd. | Head/data scheduling in 3D graphics |
US8732644B1 (en) | 2003-09-15 | 2014-05-20 | Nvidia Corporation | Micro electro mechanical switch system and method for testing and configuring semiconductor functional circuits |
US8775112B2 (en) | 2003-09-15 | 2014-07-08 | Nvidia Corporation | System and method for increasing die yield |
US8775997B2 (en) | 2003-09-15 | 2014-07-08 | Nvidia Corporation | System and method for testing and configuring semiconductor functional circuits |
US8711161B1 (en) | 2003-12-18 | 2014-04-29 | Nvidia Corporation | Functional component compensation reconfiguration system and method |
US7639252B2 (en) * | 2004-08-11 | 2009-12-29 | Ati Technologies Ulc | Unified tessellation circuit and method therefor |
US8723231B1 (en) | 2004-09-15 | 2014-05-13 | Nvidia Corporation | Semiconductor die micro electro-mechanical switch management system and method |
US8711156B1 (en) | 2004-09-30 | 2014-04-29 | Nvidia Corporation | Method and system for remapping processing elements in a pipeline of a graphics processing unit |
US7295204B2 (en) * | 2004-12-14 | 2007-11-13 | Adrian Sfarti | Rapid zippering for real time tesselation of bicubic surfaces |
US8021193B1 (en) * | 2005-04-25 | 2011-09-20 | Nvidia Corporation | Controlled impedance display adapter |
US8427496B1 (en) | 2005-05-13 | 2013-04-23 | Nvidia Corporation | Method and system for implementing compression across a graphics bus interconnect |
US7793029B1 (en) | 2005-05-17 | 2010-09-07 | Nvidia Corporation | Translation device apparatus for configuring printed circuit board connectors |
US7612775B2 (en) * | 2005-07-28 | 2009-11-03 | The Boeing Company | Real-time conformal terrain rendering |
US8412872B1 (en) | 2005-12-12 | 2013-04-02 | Nvidia Corporation | Configurable GPU and method for graphics processing using a configurable GPU |
US8417838B2 (en) | 2005-12-12 | 2013-04-09 | Nvidia Corporation | System and method for configurable digital communication |
US7483029B2 (en) * | 2005-12-15 | 2009-01-27 | Nvidia Corporation | GPU having raster components configured for using nested boustrophedonic patterns to traverse screen areas |
US9123173B2 (en) * | 2005-12-15 | 2015-09-01 | Nvidia Corporation | Method for rasterizing non-rectangular tile groups in a raster stage of a graphics pipeline |
US8698811B1 (en) | 2005-12-15 | 2014-04-15 | Nvidia Corporation | Nested boustrophedonic patterns for rasterization |
US9117309B1 (en) | 2005-12-19 | 2015-08-25 | Nvidia Corporation | Method and system for rendering polygons with a bounding box in a graphics processor unit |
US8390645B1 (en) | 2005-12-19 | 2013-03-05 | Nvidia Corporation | Method and system for rendering connecting antialiased line segments |
US7587082B1 (en) | 2006-02-17 | 2009-09-08 | Cognitech, Inc. | Object recognition based on 2D images and 3D models |
US8928676B2 (en) * | 2006-06-23 | 2015-01-06 | Nvidia Corporation | Method for parallel fine rasterization in a raster stage of a graphics pipeline |
US9070213B2 (en) * | 2006-07-26 | 2015-06-30 | Nvidia Corporation | Tile based precision rasterization in a graphics pipeline |
US7843468B2 (en) * | 2006-07-26 | 2010-11-30 | Nvidia Corporation | Accellerated start tile search |
US8085264B1 (en) | 2006-07-26 | 2011-12-27 | Nvidia Corporation | Tile output using multiple queue output buffering in a raster stage |
US8427487B1 (en) | 2006-11-02 | 2013-04-23 | Nvidia Corporation | Multiple tile output using interface compression in a raster stage |
US8237738B1 (en) | 2006-11-02 | 2012-08-07 | Nvidia Corporation | Smooth rasterization of polygonal graphics primitives |
US8482567B1 (en) | 2006-11-03 | 2013-07-09 | Nvidia Corporation | Line rasterization techniques |
US7808512B1 (en) | 2006-12-19 | 2010-10-05 | Nvidia Corporation | Bounding region accumulation for graphics rendering |
US8203564B2 (en) * | 2007-02-16 | 2012-06-19 | Qualcomm Incorporated | Efficient 2-D and 3-D graphics processing |
US8724483B2 (en) | 2007-10-22 | 2014-05-13 | Nvidia Corporation | Loopback configuration for bi-directional interfaces |
US9064333B2 (en) | 2007-12-17 | 2015-06-23 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
US8780123B2 (en) | 2007-12-17 | 2014-07-15 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
US7928979B2 (en) | 2008-02-01 | 2011-04-19 | Microsoft Corporation | Efficient geometric tessellation and displacement |
US8643644B2 (en) * | 2008-03-20 | 2014-02-04 | Qualcomm Incorporated | Multi-stage tessellation for graphics rendering |
US8681861B2 (en) | 2008-05-01 | 2014-03-25 | Nvidia Corporation | Multistandard hardware video encoder |
US8923385B2 (en) | 2008-05-01 | 2014-12-30 | Nvidia Corporation | Rewind-enabled hardware encoder |
US8120607B1 (en) * | 2008-05-30 | 2012-02-21 | Nvidia Corporation | Boundary transition region stitching for tessellation |
US8169437B1 (en) * | 2008-07-09 | 2012-05-01 | Nvidia Corporation | Distributed tessellation topology generator |
US8482560B2 (en) | 2008-12-31 | 2013-07-09 | Intel Corporation | Image forming techniques |
US20110063304A1 (en) | 2009-09-16 | 2011-03-17 | Nvidia Corporation | Co-processing synchronizing techniques on heterogeneous graphics processing units |
US8537158B2 (en) * | 2009-12-02 | 2013-09-17 | Microsoft Corporation | Parallel triangle tessellation |
US9530189B2 (en) | 2009-12-31 | 2016-12-27 | Nvidia Corporation | Alternate reduction ratios and threshold mechanisms for framebuffer compression |
US9331869B2 (en) | 2010-03-04 | 2016-05-03 | Nvidia Corporation | Input/output request packet handling techniques by a device specific kernel mode driver |
US20110216068A1 (en) * | 2010-03-08 | 2011-09-08 | Sathe Rahul P | Edge processing techniques |
US9171350B2 (en) | 2010-10-28 | 2015-10-27 | Nvidia Corporation | Adaptive resolution DGPU rendering to provide constant framerate with free IGPU scale up |
KR101766383B1 (ko) * | 2011-07-26 | 2017-08-09 | 한국전자통신연구원 | 지면 고도 데이터 다운 사이징 방법 및 이를 위한 장치 |
US9082204B2 (en) | 2012-08-30 | 2015-07-14 | Qualcomm Incorporated | Storage structures for stitching primitives in graphics processing |
US9076260B2 (en) | 2012-08-30 | 2015-07-07 | Qualcomm Incorporated | Stitching for primitives in graphics processing |
US9142060B2 (en) * | 2012-08-30 | 2015-09-22 | Qualcomm Incorporated | Computation reduced tessellation |
US9305397B2 (en) | 2012-10-24 | 2016-04-05 | Qualcomm Incorporated | Vertex order in a tessellation unit |
US9591309B2 (en) | 2012-12-31 | 2017-03-07 | Nvidia Corporation | Progressive lossy memory compression |
US9607407B2 (en) | 2012-12-31 | 2017-03-28 | Nvidia Corporation | Variable-width differential memory compression |
CN109166587B (zh) * | 2013-01-15 | 2023-02-03 | 韩国电子通信研究院 | 处理信道信号的编码/解码装置及方法 |
US9947084B2 (en) * | 2013-03-08 | 2018-04-17 | Nvidia Corporation | Multiresolution consistent rasterization |
US9710894B2 (en) | 2013-06-04 | 2017-07-18 | Nvidia Corporation | System and method for enhanced multi-sample anti-aliasing |
US9832388B2 (en) | 2014-08-04 | 2017-11-28 | Nvidia Corporation | Deinterleaving interleaved high dynamic range image by using YUV interpolation |
US10068372B2 (en) | 2015-12-30 | 2018-09-04 | Advanced Micro Devices, Inc. | Method and apparatus for performing high throughput tessellation |
US11017265B1 (en) | 2020-01-29 | 2021-05-25 | ReportsNow, Inc. | Systems, methods, and devices for image processing |
US11127109B1 (en) | 2020-03-23 | 2021-09-21 | Samsung Electronics Co., Ltd. | Methods and apparatus for avoiding lockup in a graphics pipeline |
WO2022250654A1 (en) * | 2021-05-24 | 2022-12-01 | Uiarmor.Com Llc | Systems, methods, and devices for image processing |
US11158031B1 (en) | 2021-05-24 | 2021-10-26 | ReportsNow, Inc. | Systems, methods, and devices for image processing |
WO2023043993A1 (en) | 2021-09-16 | 2023-03-23 | Nvidia Corporation | Displaced micro-meshes for ray and path tracing |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5450342A (en) | 1984-10-05 | 1995-09-12 | Hitachi, Ltd. | Memory device |
US5179647A (en) * | 1989-01-09 | 1993-01-12 | Sun Microsystem, Inc. | Method and apparatus for implementing adaptive forward differencing using integer arithmetic |
US6000027A (en) | 1992-08-25 | 1999-12-07 | Texas Instruments Incorporated | Method and apparatus for improved graphics/image processing using a processor and a memory |
US5694143A (en) | 1994-06-02 | 1997-12-02 | Accelerix Limited | Single chip frame buffer and graphics accelerator |
KR100261076B1 (ko) | 1995-11-09 | 2000-07-01 | 윤종용 | 범프 맵핑과 퐁 쉐이딩을 동시에 수행하는 렌더링방법 및 장치 |
KR100366689B1 (ko) | 1996-12-19 | 2003-01-06 | 하이닉스 세미컨덕터 아메리카 인코포레이티드 | 비디오 프레임 렌더링 엔진 |
US5949424A (en) | 1997-02-28 | 1999-09-07 | Silicon Graphics, Inc. | Method, system, and computer program product for bump mapping in tangent space |
US5880736A (en) | 1997-02-28 | 1999-03-09 | Silicon Graphics, Inc. | Method system and computer program product for shading |
US5977997A (en) | 1997-03-06 | 1999-11-02 | Lsi Logic Corporation | Single chip computer having integrated MPEG and graphical processors |
US5995109A (en) * | 1997-04-08 | 1999-11-30 | Lsi Logic Corporation | Method for rendering high order rational surface patches |
US6304265B1 (en) * | 1998-01-30 | 2001-10-16 | Hewlett-Packard Company | System for distinguishing front facing and back facing primitives in a computer graphics system using area calculations in homogeneous coordinates |
AU3638699A (en) | 1998-04-08 | 1999-10-25 | Stellar Technologies, Ltd. | Architecture for graphics processing |
US5974168A (en) | 1998-04-16 | 1999-10-26 | International Business Machines Corporation | Acquiring bump maps from curved objects |
US6608625B1 (en) * | 1998-10-14 | 2003-08-19 | Hitachi, Ltd. | Three dimensional graphic processor |
US6347344B1 (en) * | 1998-10-14 | 2002-02-12 | Hitachi, Ltd. | Integrated multimedia system with local processor, data transfer switch, processing modules, fixed functional unit, data streamer, interface unit and multiplexer, all integrated on multimedia processor |
US6198488B1 (en) * | 1999-12-06 | 2001-03-06 | Nvidia | Transform, lighting and rasterization system embodied on a single semiconductor platform |
-
2000
- 2000-11-21 US US09/718,890 patent/US6597356B1/en not_active Expired - Lifetime
-
2001
- 2001-11-07 WO PCT/US2001/045562 patent/WO2002043011A1/en active Application Filing
- 2001-11-07 AU AU2002228718A patent/AU2002228718A1/en not_active Abandoned
- 2001-11-07 JP JP2002544676A patent/JP4113776B2/ja not_active Expired - Lifetime
- 2001-11-07 DE DE60142700T patent/DE60142700D1/de not_active Expired - Lifetime
- 2001-11-07 EP EP01989840A patent/EP1350225B1/en not_active Expired - Lifetime
-
2003
- 2003-04-17 US US10/418,364 patent/US6906716B2/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011522322A (ja) * | 2008-05-29 | 2011-07-28 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | ジオメトリシェーダを用いる平面充填エンジンのためのシステム、方法及びコンピュータプログラム製品 |
JP2012514273A (ja) * | 2008-12-31 | 2012-06-21 | インテル・コーポレーション | テッセレーション量に対してテッセレーション時間が線形に増加するテッセレータ |
Also Published As
Publication number | Publication date |
---|---|
DE60142700D1 (de) | 2010-09-09 |
US6906716B2 (en) | 2005-06-14 |
JP4113776B2 (ja) | 2008-07-09 |
WO2002043011A1 (en) | 2002-05-30 |
EP1350225A4 (en) | 2006-08-09 |
EP1350225A1 (en) | 2003-10-08 |
US6597356B1 (en) | 2003-07-22 |
US20040085313A1 (en) | 2004-05-06 |
EP1350225B1 (en) | 2010-07-28 |
AU2002228718A1 (en) | 2002-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4113776B2 (ja) | グラフィクス処理をおこなう集積回路及び方法 | |
JP4724346B2 (ja) | グラフィックプロセッサ中の変換モジュール用の方法、装置および製品 | |
JP4346906B2 (ja) | アンチエイリアシング集積化グラフィクス処理ユニット | |
JP4608510B2 (ja) | 単一の半導体プラットフォームで支持される変換、ライティング、ラスター化システム | |
US6778176B2 (en) | Sequencer system and method for sequencing graphics processing | |
US7002577B2 (en) | Clipping system and method for a single graphics semiconductor platform | |
US6515671B1 (en) | Method, apparatus and article of manufacture for a vertex attribute buffer in a graphics processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041104 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20070802 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20070803 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071002 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080104 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080111 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080204 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080212 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080227 |
|
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: 20080325 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080414 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4113776 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110418 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120418 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120418 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130418 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130418 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140418 Year of fee payment: 6 |
|
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 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |