(57)【要約】グラフィクス処理用の集積化グラフィクス・パイプライン・システムが提供される。このようなシステムには、テッセレーション用のデータを取得するために単一の半導体プラットフォーム上に配置されたテッセレーションモジュール（５１）が含まれている。テッセレーションとは、球又は表面パッチ等の複雑な面を、三角形又は四角形等のより単純なプリミティブへと、あるいは、三角形を複数のより小さな三角形へと分割する処理のことである。さらに、単一の半導体プラットフォーム上に含まれるものとして、テッセレーティングされたデータ（５０）を第１の空間から第２の空間へと変換するのに適合した変換モジュール（５２）がある。変換モジュール（５２）に接続しているのは、光源処理モジュール（５４）である。この光源処理モジュール（５４）は、変換モジュール（５２）から取得したデータに対して光源処理演算を施すために、単一の半導体プラットフォーム上に配置されている。また、ラスタライザ（５６）が含まれている。このラスタライザ（５６）は、光源処理モジュール（５４）に接続しており、光源処理モジュール（５４）から取得したデータをレンダリングするために、単一の半導体プラットフォーム上に配置されている。
2004514973.tif 000002
【特許請求の範囲】
【請求項１】
グラフィクス処理用のグラフィクス・パイプライン・システムにおいて、
（ａ）単一の半導体プラットフォーム上に配置され、テッセレーション用にデータを取得するように適合したテッセレーションモジュールと、
（ｂ）前記テッセレーションモジュールに接続され、前記テッセレーションモジュールから取得したデータを、第１の空間から第２の空間へと変換するために、単一の半導体プラットフォーム上に配置された変換モジュールと、
（ｃ）前記変換モジュールに接続され、前記変換モジュールから取得したデータに対して光源処理演算を実行するために、単一の半導体プラットフォーム上に配置された光源処理モジュールと、
（ｄ）前記光源処理モジュールに接続され、前記光源処理モジュールから取得したデータをレンダリングするために、単一の半導体プラットフォーム上に配置されたラスタライザと、を備えたシステム。
【請求項２】
前記テッセレーションモジュールは、プリミティブ無（ｎｏ ｐｒｉｍｉｔｉｖｅ）、ファン（ｆａｎ）、ストリップ（ｓｔｒｉｐ）、ロード（ｌｏａｄ）及びユーズ（ｕｓｅ）からなるグループから選択される複数のコマンドを生成するように適合されている請求項１に記載のシステム。
【請求項３】
前記テッセレーションモジュールは、データを再利用するためにメモリを用いる請求項１に記載のシステム。
【請求項４】
前記テッセレーションモジュールは、保護曲線を用いて表面分割するように適合する請求項１に記載のシステム。
【請求項５】
前記表面分割は、パッチを取得し、前記パッチに対応した複数のストリップカーブを第１の所定方向に定義し、そこで前記ストリップカーブにより規定される領域が複数のプリミティブへと分割されるように適合され、及び前記ストリップカーブの端部に沿って前記第１の所定方向と垂直な第２の所定方向に配置されていて前記パッチに対応した少なくとも１つの保護曲線を生成することを含む請求項４に記載のシステム。
【請求項６】
前記テッセレーションモジュールは、部分テッセレーションを用いて表面分割するように適合する請求項１に記載のシステム。
【請求項７】
前記表面分割は、レンダリングされる表面におけるプリミティブの内部メッシュを定義し、及び前記内部メッシュの辺に沿って複数の周辺メッシュを定義することを含み、そこで前記周辺メッシュの各外辺は、複数の等サイズのセグメント及び前記等サイズのセグメントの一部である少なくとも１つの部分セグメントとを含む請求項６に記載のシステム。
【請求項８】
前記テッセレーションモジュールは、四角形状のパッチをレンダリングするのに適合したグラフィクス・パイプラインを用いてコンピュータグラフィクス処理にてレンダリングされる三角形状のパッチを変換するように適合する請求項１に記載のシステム。
【請求項９】
三角形状のパッチの変換は、三角形状のパッチを取得し、及び前記三角形状のパッチを複数の四角形状のパッチへと分割することを含み、そこで前記四角形状のパッチは、四角形状のパッチをレンダリングするために設けられたグラフィクス・パイプラインにより処理されるのに適している請求項８に記載のシステム。
【請求項１０】
前記テッセレーションは、前記グラフィクス・パイプライン・システムとアプリケーションとの間のインタフェースにより実行される請求項１に記載のシステム。
【請求項１１】
グラフィクス処理方法において、
（ａ）データをテッセレーティングし、
（ｂ）前記データを第１の空間から第２の空間へと変換し、
（ｃ）前記データを光源処理し、及び
（ｄ）前記データをレンダリングし、そこで前記データが単一の半導体プラットフォーム上で、テッセレートされ、変換され、光源処理され及びレンダリングされる方法。
【請求項１２】
前記テッセレーションは、プリミティブ無（ｎｏ ｐｒｉｍｉｔｉｖｅ）、ファン（ｆａｎ）、ストリップ（ｓｔｒｉｐ）、ロード（ｌｏａｄ）及びユーズ（ｕｓｅ）からなるグループから選択される複数のコマンドを生成することを含む請求項１１に記載の方法。
【請求項１３】
前記テッセレーションは、再利用のためにデータを格納するメモリを用いるテッセレーションモジュールを用いて実行される請求項１１に記載の方法。
【請求項１４】
前記テッセレーションは、保護曲線を用いて表面分割することを含む請求項１１に記載の方法。
【請求項１５】
前記表面分割は、パッチを取得し、前記パッチに対応した複数のストリップカーブを第１の所定方向に定義し、そこで前記ストリップカーブにより規定される領域が複数のプリミティブへと分割されるように適合しており、及び前記ストリップカーブの端部に沿って前記第１の所定方向と垂直な第２の所定方向に配置されていて前記パッチに対応した少なくとも１つの保護曲線を生成することを含む請求項１４に記載の方法。
【請求項１６】
前記テッセレーションは、部分テッセレーションを用いて表面分割することを含む請求項１１に記載の方法。
【請求項１７】
前記表面分割は、レンダリングされる表面におけるプリミティブの内部メッシュを定義し、及び前記内部メッシュの辺に沿って複数の周辺メッシュを定義することを含み、そこで前記周辺メッシュの各外辺は、複数の等サイズのセグメント及び前記等サイズのセグメントの一部である少なくとも１つの部分セグメントとを含む請求項１６に記載の方法。
【請求項１８】
前記テッセレーションは、四角形状のパッチをレンダリングするのに適合したグラフィクス・パイプラインを用いてコンピュータグラフィクス処理にてレンダリングされる三角形状のパッチを変換することを含む請求項１１に記載の方法。
【請求項１９】
三角形状のパッチの変換は、三角形状のパッチを取得し、及び前記三角形状のパッチを複数の四角形状のパッチへと分割することを含み、前記四角形状のパッチは、四角形状のパッチをレンダリングするために設けられたグラフィクス・パイプラインにより処理されるように適している請求項１８に記載の方法。
【請求項２０】
前記テッセレーションは、前記単一の半導体プラットフォームとアプリケーションとの間のインタフェースにより実行される請求項１１に記載の方法。
【発明の詳細な説明】
【０００１】
〔発明の分野〕
本発明は、一般にグラフィクプロセッサに関し、特に、テッセレーション（ｔｅｓｓｅｌｌａｔｉｏｎ）、変換、光源処理（ｌｉｇｈｔｉｎｇ）、及びラスタ化モジュールを含むグラフィクス・パイプライン・システムに関する。
【０００２】
〔発明の背景〕
３次元グラフィクスは、多くのアプリケーションにおいて主要なものである。例えば、コンピュータ支援設計（ＣＡＤ）は、多くの産業部門で大いに伸びており、ここでは、コンピュータ端末、カーソル、ＣＲＴ、及びグラフィック端末が、鉛筆と紙に取って代わりつつあり、コンピュータディスク及びテープが、図面保管室（ｄｒａｗｉｎｇ ｖａｕｌｔｓ）に取って代わりつつある。これらの産業分野の全てではなくとも、そのほとんどで、３次元オブジェクトを操作して表示することへの強い要求がある。このことが、３次元オブジェクトをモデリングし、レンダリングし、コンピュータ画面や他の表示装置に表示する方法に対する広範な関心及び研究につながっている。しかしながら、写実的にレンダリングすること及び３次元のグラフィカルオブジェクトを表示することに要する演算量は、依然としてかなり大規模であり、３次元オブジェクトを真に写実的に表示することは、主としてハイエンドのシステムに限られていた。その一方で、３次元オブジェクトを高速かつ写実的にレンダリング及び表示可能な安価なシステムに対しての要求が存在し、その要求は絶えず増大しつづけている。
【０００３】
過去数年間で、はなはだしい成長を遂げた産業として、コンピュータゲーム産業がある。コンピュータゲームの最新の世代は、３次元グラフィクスへと移行してきており、この傾向は加速しつづけている。同時に、プレイ速度は、より速くなるようにと駆り立てられている。この組み合わせにより、比較的安価なシステムで３次元グラフィクスを高速にレンダリングすることに対する本物の要求が、煽り立てられている。ゲームの他にも、この要求は、電子商取引アプリケーションによっても煽り立てられている。電子商取引アプリケーションは、増強されたマルチメディア機能を必要とする。
【０００４】
通例、３次元グラフィクスのレンダリング（ｒｅｎｄｅｒｉｎｇ）及び表示には、多くの計算及び演算を要する。例えば、３次元オブジェクトをレンダリングするために、レンダリングされるべきオブジェクトを規定する座標点や頂点の組が、形成される必要がある。頂点は、レンダリングされて表示されるべきオブジェクトの面を規定するポリゴンを形成するために、連結可能である。オブジェクトを規定する頂点が形成されると、次に頂点は、オブジェクトやモデルの座標系からワールド座標系へと、そして最終的には平坦な表示装置で表示可能な２次元座標系へと変換される必要がある。頂点が可視領域から外れるため、その方法に従い、頂点に対して、回転、拡大縮小、消去、又はクリッピングがなされ、様々な光源処理方式による光源処理、色付け等がなされる。このように、３次元オブジェクトのレンダリング及び表示処理は、演算集約的になりうるものであり、多数の頂点を要するものとなりうる。
【０００５】
このようなパイプライン・システムを実装した全体システムが、従来例である図１に示されている。このシステムでは、データソース１０が、展開された頂点のストリームを生成し、多くの場合、これは三角形として解釈される。また、データソースは、球、円柱、又は一般的な曲面等のより高レベルの表現を、生成してもよい。このような高レベルのプリミティブ／表現（ｐｒｉｍｉｔｉｖｅｓ／ｄｅｓｃｒｉｐｔｉｏｎｓ）は、グラフィクス・パイプラインの残りの部分での処理前に、複数の三角形で近似されてもよい。
【０００６】
最初に、頂点は、テッセレーションモジュール９によりテッセレーティングされる。テッセレーションとは、球等の複雑な面を三角形や四角形等のより単純なプリミティブ（ｐｒｉｍｉｔｉｖｅ）に分割する処理のことである。そして、テッセレーティングされたこれらの頂点は、パイプライン化されたグラフィクスシステム１２へと、頂点メモリ１３を介して渡される。その後、頂点は、変換モジュール１４及び光源処理モジュール１６により、それぞれ変換及び光源処理され、さらに、ラスタライザ１８によるレンダリング用にクリッピングされてセットアップされることにより、表示装置２０で表示されるレンダリングされたプリミティブが、生成される。
【０００７】
処理の際、テッセレーションモジュール９は、頂点を計算して三角形を形成するのに、パッチや他の高レベル表現を用いるようになっている。変換モジュール１４は、３次元の頂点の組をローカル座標系やモデル座標系から２次元ウィンドウへと拡大縮小、回転、及び投影するのに用いられてもよく、この２次元ウィンドウは、レンダリングされたオブジェクトを表示するのに用いられる。光源処理モジュール１６は、様々な光源処理方式、光源の位置、環境光のレベル、素材等に基づいて、頂点の色及び外観を設定する。ラスタ化モジュール１８は、事前に変換及び／又は光源処理された頂点を、ラスタ化又はレンダリングする。ラスタ化モジュール１８は、レンダリングされたデータを次に出力する表示装置又は中間ハードウェア若しくはソフトウェア構成でありうる。レンダリングターゲットに向けて、オブジェクトをレンダリングする。
【０００８】
グラフィック処理システムを製造する場合に、コストを極力抑えつつ、様々なグラフィクス処理コンポーネントの速度を増大させるという、全般的な要求がある。一般に、集積化は、システムの速度を上げるために用いられることが多い。集積化とは、別々の処理モジュールを単一の集積回路に組み込むことを意味する。微視的な半導体環境で交信するこのような処理モジュールでは、外部バスと比べて、速度が大幅に向上する。
【０００９】
このように速度が向上することは、現行のグラフィック・パイプラインの実装における多くの欠点を克服するのに寄与しうる。例えば、コンピュータグラフィクスの質は、現状では、変換処理を実行するグラフィック・パイプラインの能力により、制限されている。特に、変換性能は、生成された３次元オブジェクトをソフトウェア開発者がテッセレーティングする精細さの度合い、場面に登場するオブジェクトの個数、及び３次元世界自体の精巧さの度合いを決定する。このことにより、テッセレーションを精細にすると、質が高くなるものの、ポリゴンの数が増えて性能を低下させる結果となるので、ソフトウェア開発者に対する従来からの性能と質とのトレードオフが生じる。
【００１０】
しかしながら、実装及び単一のチップ上に複数の処理モジュールを製造するコストにより、集積化には限りがあることが多い。グラフィクス処理の分野では、高速化のために様々なモジュールを集積するあらゆる試みが、法外なまでに高コストとなりうる。このようなコストの上昇の理由は、要求された集積回路が、実現するには単に高価すぎるサイズのものになってしまう、ということである。
【００１１】
このようにサイズが大きくなるのは、主として、様々なエンジンの複雑さによるものである。高性能の変換及び光源処理エンジンは、単体としても非常に複雑なものであるため、チップ上に実装するにはコストがかかり、追加の機能を実装するならば、なおさらである。さらに、通常のラスタライザは、クリッピングやレンダリング等の処理に多面化しており、このようなモジュールを変換及び光源処理モジュールと組み合わせとうとする費用効果の高い試みは、ほとんど不可能である。
【００１２】
従って、費用効果の高い集積化が可能な設計のテッセレーション、変換、光源処理、及びラスタ化モジュールに対する需要が存在する。
【００１３】
〔発明の開示〕
グラフィクス処理用の集積化グラフィクス・パイプライン・システムが、提供される。このようなシステムには、テッセレーション用のデータを取得するために単一の半導体プラットフォーム上に配置されたテッセレーションモジュールが含まれている。テッセレーションとは、球又は表面パッチ等の複雑な面を、三角形又は四角形等のより単純なプリミティブへと、あるいは、三角形を複数のより小さな三角形へと分割する処理のことである。さらに、単一の半導体プラットフォーム上に含まれるものとして、テッセレーティングされたデータを第１の空間から第２の空間へと変換するようになった変換モジュールがある。変換モジュールに接続しているのは、光源処理モジュールである。この光源処理モジュールも、変換モジュールから取得したデータに対して光源処理演算を施すために、単一の半導体プラットフォーム上に配置されている。また、ラスタライザが含まれている。このラスタライザは、光源処理モジュールに接続しており、光源処理モジュールから取得したデータをレンダリングするために、単一の半導体プラットフォーム上に配置されている。
【００１４】
上述の集積化により、性能の向上が達成されるので、非集積型のシステムにおける多くの欠点が克服される。例えば、テッセレーションと変換とを組み合わせた集積化により、より精細なテッセレーションでの質の向上がもたらされる。このように、アプリケーションは、単一の半導体プラットフォームに対応づけられた機能を、標準的なインタフェースを介して呼び出すことにより、この能力及び他の能力を利用することができる。
【００１５】
本発明のこれらの利点及び他の利点は、以下の詳細な説明を読んで種々の図面を検討することにより、明らかになるであろう。
【００１６】
〔好ましい実施形態の説明〕
上述及び他の側面及び利点は、図面を参照した以下の本発明の好ましい実施形態の詳細な説明によって、よりよく理解されることになる。
【００１７】
図１に従来技術を示す。図１Ａは、本発明に係る一実施形態の種々のコンポーネントを説明するフロー図である。図１Ａに、テッセレーションモジュール５１が組み込まれたグラフィクス処理パイプラインのシングルチップ実装例を示す。図示の如く、テッセレーションモジュール５１は、入力データとしての頂点データ、幾何学表現等と、コマンドとを受信する。さらに、ダイレクト・メモリ・アクセス（ＤＭＡ）機能を用いて読み取りを行う頂点キャッシュ５３が、設けられている。この頂点キャッシュ５３も、テッセレーションモジュール５１へとデータを送る。テッセレーションモジュール５１が有効である場合、テッセレーティングされたデータが、テッセレーションモジュール５１から、データすなわち頂点データを、頂点属性バッファ（ＶＡＢ）５０からも受信するＩ−バッファへ５９と出力される。このようなＩ−バッファ５９は、変換モジュール５２及び光源処理モジュール５４へとデータを送るように機能する。次に、変換及び光源処理モジュールは、出力を頂点ファイル５８へと送る。また、図１Ａには、レンダリングに備えてプリミティブをアセンブルするために、頂点ファイル５８及びテッセレーションモジュール５１と交信するプリミティブアセンブリモジュール５５が示されている。最後に、セットアップモジュール５７及びラスタ化モジュール５６が、レンダリングのために、プリミティブアセンブリモジュール５５から入力を取得する。
【００１８】
一実施形態では、上記各モジュールは、以下により詳細に説明する方式で、単一の半導体プラットフォーム上に位置している。ここでの説明では、単一の半導体プラットフォームとは、単独で単体の半導体ベース集積回路又はチップのことである。なお、単一の半導体プラットフォームという用語は、オンチップ動作をシミュレートして、通常のＣＰＵ及びバスの実装を利用することよりも実質的に進歩した、接続性の高いマルチチップモジュールのことでもある。
【００１９】
処理の際に、テッセレーションモジュール５１は、頂点を計算するのに、パッチ又は他の高レベル表現（すなわちプリミティブ等）を用いるようになっている。頂点キャッシュ５３は、テッセレーションモジュール５１により利用及び再利用されるパッチ係数等の幾何学表現を格納するのに、用いられてもよい。ＶＡＢ５０は、位置、法線（ｎｏｒｍａｌ）、色、テクスチャ座標等と言った、複数の頂点属性の状態を保持するために、組み込まれている。
【００２０】
テッセレーショモジュール５１の影響を受けることになる属性の設定は、所望のアプリケーション・プログラム・インタフェースにより規定されてもよい。ＶＡＢ５０は、テッセレーションモジュール５１によっては提供されないそれら頂点コンポーネントのソースである。これらのコンポーネントは、テッセレーティングされたプリミティブを通じて一定であってもよい。
【００２１】
テッセレーションが開始すると、ＶＡＢ５０の内容が、テッセレーションモジュール５１によっては提供されない現行の頂点属性を、Ｉ−バッファ５９に反映させるのに用いられる。そして、テッセレーションモジュール５１は、頂点コンポーネントの残りを、Ｉ−バッファ５９に書き込み、これは、次に、変換モジュール５２により読み取られる。Ｉ−バッファ５９に関してのより詳細な情報については、図４を参照する際に述べる。
【００２２】
このように、完成した頂点は、変換モジュール５２により処理されて、光源処理モジュール５４へと送られる。変換モジュール５２は、光源処理モジュール５４による光源処理のために、ベクトルを生成する。光源処理モジュール５４からの出力は、頂点ファイル５８内に格納される。次に、頂点ファイル５８は、頂点を、プリミティブアセンブリモジュール５５に送り込み、セットアップモジュール５７で利用するために、三角形及び四角形（２つの三角形に分割される）を形成する。そして、セットアップモジュール５７は、ラスタ化に備えてプリミティブをセットアップするための計算を実行する。なお、一解釈として、セットアップモジュール５７は、プリミティブアセンブリモジュール５５の役割を処理するものとみなされてもよい。
【００２３】
図１Ａに示すように、テッセレーションモジュール５１は、プリミティブアセンブリモジュール５４に三角形を形成させることができる。そのため、処理の際にテッセレーションモジュール５１は、以下に詳細に述べるように、頂点の再利用を最適化することができる。
【００２４】
その後、ラスタ化モジュール５６は、プリミティブのラスタ化を実行する。なお、変換及び光源処理モジュール５２，５４は、コマンドが一旦開始したならば常に終了するように、コマンドレベルでのみストールされる。上述のコンポーネントに関してのより詳細な情報については、以下で詳細に述べる。
【００２５】
上述の集積化により、性能の向上が達成されるので、非集積型のシステムにおける多くの欠点が克服される。アプリケーションは、本発明に係る種々のハードウェア機能を、標準的なインタフェースを介してこのような機能を呼び出すことにより、利用してもよい。
【００２６】
このようなインタフェースは、開発者に対して、このような開発者にここに述べるハードウェア機能へのアクセス性の向上を提供する一組のＡＰＩ（アプリケーション・プログラミング・インタフェース）を与えてもよい。このことは、アプリケーションソフトウェアと、ここで説明する様々なハードウェア機能との交信に、ソフトウェアドライバを用いるハードウェア・アブストラクション・レイヤを用いることにより達成されてもよい。結果として、開発者は、本発明に係る様々なハードウェア機能の詳細を気にせずに、インタフェースを利用する製品のただ１つのバージョンを記述すればよい。
【００２７】
さらに、このインタフェースは、開発者に対して、ここでの説明における様々なハードウェア機能を利用するツールを、提供してもよい。それにより、ハードウェアの機能が自動的に規定され、アプリケーションのパラメータが適合するように設定されてもよい。さらに、このインタフェースには、開発者がアプリケーションの基礎となる要素を作成するのに利用可能なコンポーネントのライブラリが含まれていてもよい。このライブラリは、プログラマに対して、該プログラマの製品に用いるのに、事前に存在するインタフェース及び要素の大規模なグループを提供することにより、開発過程を簡略化する。
【００２８】
このように、インタフェースを構成するコンポーネントにより、技術の進歩の大部分が得られるように設計された柔軟なプラットフォームが、提供される。このようなコンポーネントの例として、本発明のハードウェアに対応させて作成可能な特別なドライバがあり、これにより、ここで述べる進歩の大部分が確実に得られるようになる。
【００２９】
このように、標準化されたプログラミング・インタフェースが、ここで説明される様々なハードウェア機能とのインタフェースになるように、アプリケーション開発者に対して提供される。さらに、これにより、ハードウェアの機能を標準化された方法でアプリケーション開発者に公開する方法が提供される。このような標準化されたプログラミング・インタフェースにより、アプリケーションとハードウェアとが相互作用するために、より統一的且つ容易にサポート可能な方法が提供されてもよい。上述のものと同様の特徴を備えたインタフェースの例としては、ＭＩＣＲＯＳＯＦＴ ＤＩＲＥＣＴＸがある。
【００３０】
一実施形態において、本発明には、オープン・グラフィクス・ライブラリ（ＯｐｅｎＧＬ（登録商標））及びＤ３Ｄ（商標）の変換及び光源処理パイプラインを少なくとも部分的に採用したハードウェアの実装が含まれる。ＯｐｅｎＧＬ（登録商標）は、２次元及び３次元グラフィックイメージを規定するためのコンピュータ業界での標準的なアプリケーション・プログラム・インタフェース（ＡＰＩ）である。ＯｐｅｎＧＬ（登録商標）によると、アプリケーションは、ＯｐｅｎＧＬ（登録商標）に準拠したグラフィクスアダプタを用いたあらゆるオペレーティングシステムで、同様の結果を得ることができる。ＯｐｅｎＧＬ（登録商標）は、コマンドの組、又は即時実行関数を指定する。各コマンドは、描画動作を指令するか、あるいは特別な効果をもたらす。
【００３１】
図１Ａに示したモジュールに関連した種々の機能について説明する。テッセレーションモジュール５１及び他の関連したコンポーネントが動作する特別な方式については、テーブル１９を参照するところから始まる説明にて、述べることになる。
【００３２】
図２は、本発明に係る一実施形態におけるＶＡＢ５０を示す図である。図示の如く、ＶＡＢ５０は、頂点及びモードビット２０２の属性を表すデータビット２０４を格納するとともに、コマンドビット２００を渡す。実際にはＶＡＢ５０は、頂点のデータビット２０４を取得してドレイン（ｄｒａｉｎ）する。
【００３３】
ＶＡＢ５０は、複数の頂点属性状態としてとりうるものを、データビット２０４を通じて取得して格納するようになっている。実際には、このようなデータビット２０４すなわち頂点データがＶＡＢ５０に取得されて格納された後、その頂点データは、ＶＡＢ５０からグラフィクス処理モジュールすなわち変換モジュール５２へと出力される。さらに、コマンドビット２００は、頂点データが、図２Ａを参照して詳細に述べる他の処理に加えてＶＡＢ５０へと入力される方式を判別するために、ＶＡＢ５０によって渡される。このようなコマンドビット２００は、そのようなコマンドビット２００を生成可能なマイクロコントローラ、ＣＰＵ、データソース、又は他の型の供給源等のコマンドビットソースから取得される。
【００３４】
さらに、複数の処理動作モードの状態を示すモードビット２０２が渡される。このように、モードビット２０２は、頂点データが後続のグラフィック処理モジュールで処理される方式を判別するのに適合している。このようなモードビット２０２は、そのようなモードビット２０２を生成可能なマイクロコントローラ、ＣＰＵ、データソース、又は他の型の供給源等のコマンドビットソースから取得される。
【００３５】
なお、ＶＡＢ５０に関連した種々の機能は、専用のハードウェア、ソフトウェア、又は他の型のロジックによって管理される。様々な実施形態において、モードビット２０２として６４，１２８，２５６又は他の値が用いられてもよい。
【００３６】
また、ＶＡＢ５０は、１２８ビット形式へと変換する必要のある６４ビットデータ用の集積点としても機能する。ＶＡＢ５０の入力は６４ビット／サイクルであり、出力は１２８ビット／サイクルである。他の実施形態では、ＶＡＢ５０は、１２８ビットデータ用の集積点としても機能し、ＶＡＢ５０の入力は、１２８ビット／サイクル、又は他の組み合わせであってもよい。さらに、ＶＡＢ５０には、複数の頂点属性用に予約済みのスロットがある。これらは全て、ＩＥＥＥの３２ビット浮動小数である。このようなスロットの数は、ユーザの要望に応じて様々である。テーブル１に、本発明にて採用されている典型的な頂点属性を示す。
【００３７】
【表１】
2004514973.tif 000003
【００３８】
処理の際、ＶＡＢ５０は、ｘ，ｙの書込時に、ｚ，ｗ対がデフォルトで（０．０，１．０）となるようにできるため、ｘ，ｙデータ対がｚ，ｗデータ対より前に書き込まれるものと仮定して動作してもよい。このことは、ＯｐｅｎＧＬ（登録商標）及びＤ３Ｄ（商標）におけるデフォルトのコンポーネントにとって重要となりうる。なお、ｐｏｓｉｔｉｏｎ，ｔｅｓｔｕｒｅ０，及びｔｅｓｔｕｒｅ１スロットは、第３及び第４のコンポーネントをデフォルトで（０．０，１．０）にする。さらに、ｄｉｆｆｕｓｅ ｃｏｌｏｒスロットは、第４のコンポーネントをデフォルトで（１．０）とし、ｔｅｘｔｕｒｅスロットは第２のコンポーネントをデフォルトで（０．０）とする。
【００３９】
ＶＡＢ５０には、データビット２０４を集めるのに用いられる他のスロット２０５が含まれており、データビット２０４は、変換及び光源処理モジュール５２，５４の中へ又は通じて、当該データビット２０４が乱されないように渡されてもよい。スロット２０５におけるデータビット２０４は、浮動小数点又は整数形式であってもよい。上述の如く、各頂点のデータビット２０４には、対応するモードビット２０２の組がある。モードビット２０２は、モードを表し、データビット２０４の処理に影響を与える。これらモードビット２０２は、データビット２０４とともに、以下により詳細に説明する目的で、変換及び光源処理モジュール５２，５４へそれぞれ渡される。
【００４０】
一実施形態では、ＶＡＢ５０により取得される有効なＶＡＢ、変換、及び光源処理コマンドが１８個あってもよい。図２Ａは、本発明に係る一実施形態にてＶＡＢ５０により取得されうる種々のコマンドの説明図である。なお、図２Ａに示したロード（ｌｏａｄ）及び読取（ｒｅａｄ）のコンテクストのあらゆるコマンド、及び通過（ｐａｓｓｔｈｒｏｕｇｈ）コマンドは、１２８ビットまでのデータワード又は他のサイズのデータワードを転送するものである。
【００４１】
図２Ａの各コマンドには、データビット２０４の各組がＶＡＢアドレスの高位のダブルワードに書き込まれるのか又は低位のダブルワードに書き込まれるのかを判別する制御情報が含まれていてもよい。さらに、２ビットの書込マスクが、ワードレベルでの制御を提供するために用いられてもよい。さらに、現行のコマンドを実行するために、データビット２０４の全てが存在していることをＶＡＢコントローラに伝達する開始ビットがあってもよい。
【００４２】
各コマンドには、対応したストールフィールドがある。このストールフィールドにより、当該コマンドがコンテクストメモリから読み取る読取コマンドであるか又はコンテクストメモリに書き込む書込コマンドであるかについての情報を、参照して検出できるようになる。現在実行中のコマンドのストールフィールドを用いることにより、新規のコマンドは、競合が生じたときに延期されるか、あるいは続行が許可されてもよい。
【００４３】
処理の際、ＶＡＢ５０は、１サイクル当たり１２８ビットまで（又は他のサイズ）の１つの入力データワード、及び１サイクル当たり１２８ビットまで（又は他のサイズ）の１つの出力データワードを、受け入れることができる。ロードコマンドに関して、このことは、ＶＡＢ５０へとデータをロードして１２８ビットのクワッドワード（ｑｕａｄ−ｗｏｒｄ）を作成するのに２サイクルかかり、それをドレインするのに１サイクルかかることを意味する。光源処理モジュール５４のスカラーメモリについては、完全なクワッドワードを蓄積する必要がなく、１アドレス当たり１サイクルでロード可能である。１つの頂点について、７つのＶＡＢスロットをロードするのに１４サイクルまでものサイクル数を要するが、それを転送するのには７サイクルかかるだけである。但し、頂点状態を更新するのには、実行中の頂点コマンドが変化することだけが必要とされる。このことは、頂点データを転送するのに７サイクルかかるのに対して、ある場合には、頂点位置が２サイクルで更新されうることを意味する。なお、ｘ，ｙ位置の場合には、１サイクルが必要となるだけである。
【００４４】
図２Ｂは、グラフィクス処理の際に頂点属性をＶＡＢ５０へとロードすること及びそこからドレインすることの一方法を示すフローチャートである。最初に、処理２１０では、少なくとも１組の頂点属性が、処理されるべくＶＡＢ５０に取得される。上述の如く、頂点属性の各組はユニークであって、単一の頂点に対応していてもよい。
【００４５】
処理２１２では、実際には頂点属性は、取得されるとＶＡＢ５０内に格納される。さらに、格納された頂点属性の各組は、変換モジュール５２における複数の入力バッファの対応する１つへと転送される。また、処理２１６に示されるように、取得された頂点属性の組は、取得された頂点属性に対応するものとしてＶＡＢ５０内に現在格納されている別の組の頂点属性があるかどうか判別するために監視される。
【００４６】
格納された頂点属性が取得された頂点属性に対応していると、判別２１７にて決定されると、格納された頂点属性は、命令外で変換モジュール５２の対応する入力バッファへと出力される。処理２１８を参照されたい。格納された頂点属性が出力されると直ちに、対応して入来する頂点属性が、ＶＡＢ５０においてその位置を占めることになる。一方、対応が検出されなければ、格納された頂点属性の各組は、予め定められた正規の順序で、変換モジュール５２における対応する入力バッファへと転送されることになる。処理２１９を参照されたい。
【００４７】
なお、格納された頂点属性は、対応する開始コマンドがあれば、上述の方式で転送されないこともある。さらに、上述の方法が適切に機能するように、ＶＡＢ５０の出力の帯域幅は、少なくともＶＡＢ５０の入力の帯域幅になっている必要がある。
【００４８】
図２Ｃは、図２Ｂの処理を実装するために用いられた本発明に係る構成を示す図である。図示の如く、ＶＡＢ５０は、データ書込端子ＷＤ、データ読取端子ＲＤ、アドレス書込端子ＷＡ、及びアドレス読取端子ＲＡを有する。データ読取端子は、データビット２０４をＶＡＢ５０から出力するために、第１のクロック制御バッファ２３０に接続している。
【００４９】
また、第１のマルチプレクサ２３２が含まれている。この第１のマルチプレクサ２３２は、ＶＡＢ５０のアドレス読取端子及び第２のクロック制御バッファ２３４に接続した出力を有する。第１のマルチプレクサ２３２の第１の入力は、ＶＡＢ５０のアドレス書込端子に接続しており、一方、第１のマルチプレクサ２３２の第２の入力は、第２のマルチプレクサ２３６の出力に接続している。論理モジュール２３８は、第１及び第２のマルチプレクサ２３２，２３６と、ＶＡＢ５０のアドレス書込端子と、第２のクロック制御バッファ２３４の出力との間に、接続されている。
【００５０】
実際には論理モジュール２３８は、入来してくる頂点属性が、ＶＡＢ５０へのドレイン待ちになっているかどうか決定する役割を果たす。一実施形態では、頂点属性が待ちになっているかどうかを示すビットレジスタを監視することが、この決定に役立つ。入来してくる頂点属性について、ＶＡＢ５０に現在あるものの中に対応するものがあれば、論理モジュール２３８は、入来してくる頂点属性を直ちにその位置に格納できるように、対応する頂点属性をドレインするために、第１のマルチプレクサ２３２を制御する。一方、入来してくる頂点属性について、現在ＶＡＢ５０中に対応するものがなければ、論理モジュール２３８は、ＶＡＢ５０からのドレインがなされるとともに、入来してくる頂点属性が順次（又は他の所定の順番で）ロードされるように、当該論理モジュール２３８により更新されうる第２のマルチプレクサ２３６の入力に従って、第１のマルチプレクサ２３２を制御する。
【００５１】
このため、ＶＡＢ５０は、新規に入来される頂点属性がロードされる前に、複数の頂点属性をドレインする必要はない。待ちとなった頂点属性は、可能ならば、ＶＡＢにおける対応するものを強制的に出力することにより、続行可能となる。このため、ＶＡＢ５０は、任意の順序でドレインされうる。この機能がなければ、ＶＡＢ５０からのドレインに７サイクルかかり、場合によると、ロードするのにさらに１４サイクルかかる。ロードとドレインとを重複させることにより、より高い性能が達成される。なお、これは、入力バッファが空で、ＶＡＢ５０から変換モジュール５２の入力バッファへのドレインが可能な場合にのみ可能である。
【００５２】
図３に、本発明の一実施形態によるＶＡＢ５０に関連したモードビットを示す。変換／光源処理モード情報は、モードビット２０２を介してレジスタに格納される。モードビット２０２は、以下で明らかになる方式で、変換モジュール５２及び光源処理モジュール５４のシーケンサを駆動するのに用いられる。各頂点には、ユニークでありうる対応したモードビット２０２があるので、特別に調整されたプログラムシーケンスを実行可能である。モードビット２０２は一般的にグラフィクスＡＰＩに直接マップされており、そのうちのいくつかが見出されてもよい。
【００５３】
一実施形態では、図３のアクティブ光ビット（ＬＩＳ）は、連続していてもよい。さらに、パススルービット（ＶＰＡＳ）はオンになった場合にユニークであり、頂点データは拡大縮小及びバイアスを伴って渡され、変換や光源処理は行われない。ＶＰＡＳが真のときに用いられうるモードビット２０２には、テクスチャ分割ビット（ＴＤＶ０，１）及びフォグビット（ｆｏｇｇｅｎ ｂｉｔｓ）（Ｄ３Ｄ（商標）でフォグ値を抽出するのに用いられる）がある。このように、ＶＰＡＳは、事前変換データのために用いられ、ＴＤＶ０，１は、Ｄ３Ｄ（商標）のコンテクストにおけるシリンドリカル・ラップ（ｃｙｌｉｎｄｒｉｃａｌ ｗｒａｐ）モードを扱うのに用いられる。
【００５４】
図４に、本発明に係る一実施形態の変換モジュールを示す。図示の如く、変換モジュール５２は、６個の入力バッファ４００を介してＶＡＢ５０に接続している。一実施形態では、各入力バッファ４００は、そのサイズが７＊１２８ｂである。これら６個の入力バッファ４００は、その各々が７クワッドワードを格納可能である。このような入力バッファ４００は、パスデータが位置データと重複していること以外は、ＶＡＢ５０と同様のレイアウトに従っている。
【００５５】
一実施形態では、入力バッファ４００がロードされた、以前のインスタンス以来、データが変更されたかどうかを示すために、各入力バッファ４００の各属性用に１ビットが指定されている。この設計により、各入力バッファ４００は、データが変更されたときにのみロードされることになる。
【００５６】
さらに、変換モジュール５２は、光源処理モジュール５４の６個の出力頂点バッファ４０２に接続している。出力バッファには、第１のバッファ４０４、第２のバッファ４０６、及び第３のバッファ４０８が含まれている。以降明らかになるように、第３のバッファ４０８の内容、すなわち位置、テクスチャ座標データ等は、光源処理モジュール５４では使用されない。一方、第１のバッファ４０４及び第２のバッファ４０６は、いずれも、光源処理及びカラーデータを光源処理モジュール５４に入力するのに用いられる。光源処理モジュールが２つの読取入力を取り扱うようになっているので、２つのバッファが用いられている。なお、データは、読取が競合する問題を防止するように配列されていてもよい。
【００５７】
さらに、変換モジュール５２に接続しているものとして、コンテクストメモリ４１０、及びマイクロコードＲＯＭメモリ４１２がある。変換モジュール５２は、オブジェクト空間の頂点データを画面空間へと変換する役割、及び、光源処理モジュール５４で必要とされるあらゆるベクトルを生成する役割を果たす。また、変換モジュール５２は、スキニング及びテクスチャ座標を処理する。一実施形態では、変換モジュール５２は、４つの浮動小数を並列処理する１２８ビット設計であってもよく、４項点乗積（４ ｔｅｒｍ ｄｏｔ ｐｒｏｄｕｃｔｓ）処理用に最適化されていてもよい。
【００５８】
図４Ａは、本発明に係る一実施形態により変換モジュール５２にて複数のスレッドを実行する方法を示すフローチャートである。処理の際、変換モジュール５２は、インターリービングにより３つの頂点を並列処理可能である。そうして、コマンド間に、コンテクストメモリ４１０に対しての書込とそれに続く読取といったストール状態がなければ、３つのコマンドが同時に並列的に実行可能である。３つの実行スレッドは、頂点には全てユニークに対応するモードビット２０２があるため、それぞれ独立しており、これらはどのようなコマンドであってもよい。
【００５９】
図４Ａに示すように、複数のスレッドを実行する方法には、処理４２０において、実行されるべき現行のスレッドを決定することが含まれる。この決定は、グラフィクス処理モジュールが処理を完了するために要するサイクル数を識別して監視することによりなされてもよい。サイクルを監視することにより、各スレッドを１サイクルに割当可能となるので、現行のサイクルに基づいて現行のスレッドを決定可能となる。なお、このような決定は、効率的であると思われる所望の方式でなされてもよい。
【００６０】
次に、処理４２２では、現行のサイクルで実行されるスレッドに対応した命令が、対応するプログラムカウンタ番号を用いて取得される。その後、処理４２４にて、グラフィクス処理モジュールで当該命令が実行される。
【００６１】
一利用例では、即時の方法には、第１のプログラムカウンタに従い、最初に第１の命令又はコードセグメントにアクセスすることが含まれている。上述のように、このようなプログラムカウンタは、第１の実行スレッドに対応している。次に、第１のコードセグメントが、グラフィクス処理モジュールで実行される。すぐに明らかになるように、このようなグラフィクス処理モジュールは、加算器、乗算器、若しくは他の機能ユニット、又はその組み合わせという形態をとってもよい。
【００６２】
グラフィクス処理モジュールは、実行を完了するのに２クロックサイクル以上を要するので、第２のコードセグメントは、第２のプログラムカウンタに従って、第１のコードセグメントの実行から１クロックサイクル後に、直ちにアクセスされてもよい。第２のプログラムカウンタは、第２の実行スレッドに対応しており、ここでは、各実行スレッドが、ユニークな頂点を処理する。
【００６３】
そうして、第２のコードセグメントは、グラフィクス処理モジュールでの第１のコードセグメントの実行完了前に、そのグラフィクス処理モジュールにて処理が開始されてもよい。実際のグラフィクス処理モジュールには、各スレッドが出力を発生するのに、いずれも所定数のサイクルを要する。このように、本例の様々なステップが、所定数のサイクルの全てに亘って繰り返されてもよい。
【００６４】
この技術により、従来技術に対しての数々の利点が得られる。無論、本発明の機能ユニットは、より効率的に利用される。さらに、制御コードは、複数スレッド方式の使用が前提となる場合には、より効率的に記述されてもよい。
【００６５】
例えば、グラフィクス処理モジュールに、回答を出力するのに３クロックサイクルを要するマルチプレクサが含まれる場合、ａ＝ｂ＊ｃ及びｄ＝ｅ＊ａといった後続の命令間に、２つのノーオペレーションコマンドが必要となることがある。これは、３クロックサイクルが経過するまで“ａ”が入手不能なためである。但し、本実施形態では、そのコードは、単に、ａ＝ｂ＊ｃの直後にｄ＝ｅ＊ａを呼び出す。これは、このようなコードが、３クロックサイクル毎に呼び出される３つの実行スレッドのうちの１つとして実行されるものと、みなされるためである。
【００６６】
図４Ｂは、図４Ａの方法が実行される方式を示すフローチャートである。図示の如く、各実行スレッドには、対応するプログラムカウンタ４５０がある。このプログラムカウンタ４５０は、命令メモリ４５２内の命令すなわちコードセグメントにアクセスするのに用いられる。そして、このような命令は、加算器４５６、乗算器４５４、及び／又は逆論理ユニット（ｉｎｖｅｒｓｅ ｌｏｇｉｃ ｕｎｉｔ）若しくはレジスタ４５９等のグラフィクス処理モジュールを実行するのに用いられる。
【００６７】
上記処理モジュールの少なくとも２つがタンデムで用いられる状況に対応するために、グラフィクス処理モジュール間に、少なくとも１つのコードセグメント遅延４５７が用いられる。３スレッド形式が用いられる場合、３クロックサイクルのコードセグメント遅延４５７が用いられる。一実施形態では、乗算命令に加算命令が続くときに、コードセグメント遅延４５７が用いられる。このような場合には、乗算器４５６が出力を発生するのに充分な時間が確実に経過するように、乗算命令実行後に３サイクル経過するまで、加算命令は実行されない。
【００６８】
各命令の実行後、現行の実行スレッドのプログラムカウンタ４５０が更新されて、次の実行スレッドのプログラムカウンタが、対応する命令にアクセスするためにラウンドロビンシーケンス（ｒｏｕｎｄ ｒｏｂｉｎ ｓｅｑｕｅｎｃｅ）で、モジュール４５８により呼び出される。なお、プログラムカウンタは、これらに限定されるものではないが、インクリメント、ジャンプ、コール及びリターン、テーブルジャンプの実行、及び／又はディスパッチング等のどのような方式で用いられてもよい。ディスパッチングとは、取得したパラメータに基づいてコードセグメント実行の開始点を決定することである。さらに、この複数スレッド実行形式は、本発明に係るグラフィクス処理パイプラインの光源処理モジュール５４にも応用されうることを、理解することが重要である。
【００６９】
３スレッド形式が用いられる場合、各スレッドには、１度に、１個の入力バッファ及び１個の出力バッファが割り当てられる。このことにより、３つのコマンドを処理しつつ、データを伴う３つのコマンドをさらにロードすることが可能となる。入力バッファ及び出力バッファは、図２７及び図２８を参照して後述する方式によって、ラウンドロビンシーケンスで割り当てられる。
【００７０】
このように、実行スレッドは、一時的かつ機能的にインターリービングされる。これは、各機能ユニットが、３段階にパイプラインされて、各スレッドが１度に１段階を占めることを意味する。一実施形態では、３スレッドが、同じシーケンスすなわち０の次に１、次に３で常に実行されるように設定されていてもよい。概念上、スレッドは、ｔ＝クロック・モジュロ３で、機能ユニットに入る。一旦、機能ユニットが処理を開始すると、結果が得られるまでに３クロックかかり（６かかるＩＬＵを除く）、この時間で同スレッドが再びアクティブになる。
【００７１】
図５に、本発明の一実施形態による図４の変換モジュール５２の機能ユニットを示す。図示の如く、頂点データを取得するためにＶＡＢ５０に接続するように適合した入力バッファ４００が含まれている。
【００７２】
メモリ論理ユニット（ＭＬＵ）５００には、入力バッファ４００の出力に接続した第１の入力がある。オプションとして、ＭＬＵ５００の出力は、第１の入力に接続したフィードバックループ５０２を有していてもよい。
【００７３】
また、ＭＬＵ５００の出力に接続した第１の入力を有する演算論理ユニット（ＡＬＵ）５０４が設けられている。さらに、ＡＬＵ５０４の出力は、第２の入力に接続したフィードバックループ５０６を有する。このようなフィードバックループ５０２は、そこに接続した遅延５０８を、さらに有していてもよい。ＡＬＵ５０４の出力に接続しているのは、レジスタユニット５１０の入力である。なお、レジスタユニット５１０の出力は、ＭＬＵ５００の第１及び第２の入力に接続している。
【００７４】
逆演算又は逆平方根演算を実行するためにＡＬＵ５０４の出力に接続した入力を含んだ逆論理ユニット（ＩＬＵ）５１２が、設けられている。代替的な実施形態では、ＩＬＵ５１２には、レジスタユニット５１０の出力に接続した入力が、含まれていてもよい。
【００７５】
さらに、ＩＬＵ５１２の出力とＭＬＵ５００の第２の入力との間に接続された変換又はスメアリング（ｓｍｅａｒｉｎｇ）モジュール５１４が含まれている。実際の変換モジュール５１４は、スカラー頂点データをベクトル頂点データに変換する役割を果たす。これは、スカラーデータにベクトルを乗じて、乗算器及び／又は加算器等のベクトル演算子がそれを処理するようにして達成される。例えば、スカラーであるＡが、変換後、ベクトル（Ａ，Ａ，Ａ，Ａ）となりうる。代替的な実施形態では、スメアリングモジュール５１４は、ＭＬＵ５００に関連したマルチプレクサ、又は本発明の他のコンポーネント内に組み込まれてもよい。オプションとして、レジスタ５１６が、ＩＬＵ５１２の出力と変換ユニット５１４の入力との間に接続されてもよい。さらに、このようなレジスタ５１６がスレッド化されていてもよい。
【００７６】
メモリ４１０は、ＭＬＵ５００の第２の入力及びＡＬＵ５０４の出力に接続している。特に、メモリ４１０には、ＭＬＵ５００の第２の入力に接続した読取端子がある。さらに、メモリ４１０には、ＡＬＵ５０４の出力に接続した書込端子がある。
【００７７】
メモリ４１０は、入力バッファ４００、ＭＬＵ５００、ＡＬＵ５０４、レジスタユニット５１０、ＩＬＵ５１２、及び頂点データ処理用の変換モジュール５１４に関連して用いるために、複数の定数及び変数をそこに格納する。このような処理には、オブジェクト空間の頂点データを画面空間の頂点データに変換すること、ベクトルを生成すること等が含まれていてもよい。
【００７８】
最後に、出力コンバータ５１８が、ＡＬＵ５０４の出力に接続されている。出力コンバータ５１８は、出力バッファ４０２を介して光源処理モジュール５４に接続して、処理された頂点データをそこへ出力する役割を果たす。ＩＬＵ以外の全てのデータパスは、１２８ビットに設計されていてもよく、他のビット数のデータパスが用いられてもよい。
【００７９】
図６は、本発明に係る一実施形態による図５の変換モジュール５２のＭＬＵ５００を示す図である。図示の如く、変換モジュール５２のＭＬＵ５００には、並列接続された４個のマルチプレクサ６００が含まれている。
【００８０】
変換モジュール５２のＭＬＵ５００は、２つの４要素のベクトルを異なる３通りの方法で乗算すること、又は、１つの４要素のベクトルを渡すことになる。ＭＬＵ５００は、乗算を実行可能である。テーブル２に、変換モジュール５２のＭＬＵ５００に関連したこのような演算を示す。
【００８１】
【表２】
2004514973.tif 000004
【００８２】
Ａ及びＢの入力としてとりうるものを、テーブル３に示す。
【００８３】
【表３】
2004514973.tif 000005
【００８４】
テーブル４に、クロス乗積のために用いられるベクトル回転オプションを示す。
【００８５】
【表４】
2004514973.tif 000006
【００８６】
図７は、本発明の一実施形態による図５の変換モジュール５２のＡＬＵ５０４を示す図である。図示の如く、変換モジュール５２のＡＬＵ５０４には、並列／直列接続された３個の加算器７００が含まれている。実際の変換モジュール５２のＡＬＵ５０４は、３要素のベクトル２つを加算すること、４要素のベクトル１つを渡すこと、あるいはベクトル要素を出力に亘ってスメアリングすることができる。テーブル５に、変換モジュール５２のＡＬＵ５０４が演算可能な種々の演算を示す。
【００８７】
【表５】
2004514973.tif 000007
【００８８】
テーブル６に、変換モジュール５２のＡＬＵ５０４の入力Ａ及びＢを示す。
【００８９】
【表６】
2004514973.tif 000008
【００９０】
また、不変更（ｎｏ ｃｈａｎｇｅ）、Ｂの否定、Ａの否定、Ａ，Ｂの絶対値を作用させることにより、入力Ａ及びＢの符号ビットを変更可能である。なお、ＡＬＵ５０４がスカラー頂点データを出力すると、このスカラー頂点データは、各出力がスカラー頂点データを表すという意味で、出力に亘ってスメアリングされる。ＭＬＵ５００及びＡＬＵ５０４の各パス制御信号は、演算の際に特殊な値の取扱を禁止可能である。
【００９１】
図８は、本発明に係る一実施形態による図５の変換モジュールのベクトルレジスタファイル５１０を示す図である。図示の如く、ベクトルレジスタファイル５１０には、４組のレジスタ８００が含まれている。各レジスタ８００は、対応するマルチプレクサ８０２の第１の入力に接続した出力、及び対応するマルチプレクサ８０２の第２の入力に接続した入力を有する。
【００９２】
本発明に係る一実施形態では、ベクトルレジスタファイル５１０は、スレッド化されている。すなわち、ベクトルレジスタファイル５１０の３つのコピーがあって、各スレッドが専用のコピーを有することになる。一実施形態では、各コピーには、８つのレジスタが含まれており、各レジスタは、大きさが１２８ビットで、４つの浮動小数を格納する。ベクトルレジスタファイル５１０は、ＡＬＵ５０４から書き込まれ、出力がＭＬＵ５００へとフィードバックされる。ベクトルレジスタファイル５１０では、１サイクル当たり、１回の書込及び１回の読取がある。
【００９３】
処理の際、各レジスタの内容に対して個別に、書込動作をマスク可能である。ベクトルレジスタファイル５１０は、書込アドレスが読取アドレスと同じであると、入力から出力へのバイパス・パス５１１により、待ち時間が０となる。この場合には、マスクされていない内容がレジスタから取得されて、マスクされた内容がバイパスされてもよい。このように、ベクトルレジスタファイル５１０は、ベクトルを要素毎に作成すること、あるいは、ＡＬＵのＳＭＲ演算（テーブル５参照）に関連してベクトルの要素の順番を変更することに、非常に有用である。また、一時的な結果が、ベクトルレジスタファイル５１０内に格納されもよい。
【００９４】
図９は、本発明に係る一実施形態による図５の変換モジュールのＩＬＵ５１２を示す図である。図示の如く、変換モジュール５２のＩＬＵ５１２は、浮動小数の逆数（１／Ｄ）及び平方根の逆数（１／Ｄ＾（１／２））を発生可能である。このような演算を実行するために、２つの反復処理のいずれか１つが、仮数に対して実行されてもよい。このような処理は、所望の専用ハードウェアで実行されてもよいものであり、以下に示されている。
【００９５】
2004514973.tif 000009
図示の如く、両処理は類似しており、設計が簡単になっている。なお、閾値となる精度が満たされるまで、反復が繰り返されることになる。
【００９６】
処理の際、ＩＬＵ５１２は、逆演算及び逆平方根演算を含む２つの基本的な演算を実行する。他のユニットとは異なり、出力を発生するのに６サイクルを要する。入力はスカラーであり、出力も同様である。上述のように、ＩＬＵ５１２の出力にてスレッド化保持レジスタ５１６は、次に有効な結果が発生するまで結果をラッチすることになっている。さらに、そのスカラー出力は、ＭＬＵ５００へと送り込まれる前に、ベクトルへとスメアリングされる。逆ユニット５１２は、仮数が約２２ビット以内の精度のＩＥＥＥ（米国電気電子技術者協会）出力を発生するために、参照テーブル及び２段階のニュートン−ラフソン反復を用いる。テーブル７に、変換モジュール５２のＩＬＵ５１２により実行される種々の演算を示す。
【００９７】
【表７】
2004514973.tif 000010
【００９８】
上記のテーブル７のレンジクランプ逆演算（ｒａｎｇｅ ｃｌａｍｐ ｉｎｖｅｒｓｉｏｎ ｏｐｅｒａｔｉｏｎ）は、ラスタ化モジュール５６により取り扱われるクリッピング演算を可能にするために用いられうる。座標は、画面空間へと直接に変換され、このことは、同次クリップ空間ｗが０．０に近いときに問題となりうる。透視除算（ｐｅｒｓｐｅｃｔｉｖｅ ｄｉｖｉｄｅ）にて１．０／０．０の乗算を防ぐために、１／ｗの計算は、最小及び最大の指数へとクランプされる。
【００９９】
図５に示すように、実際のコンテクストメモリ４１０は、クワッドワードを用いてのみ読み書きを行う。このメモリは、各サイクルにてＭＬＵ５００又はＡＬＵ５０４により読取可能であり、ＡＬＵ５０４により書込可能である。メモリ読取は、各サイクル当たり１回のみ可能である。読取が必要であると、命令の最初になされ、その３サイクル後にＡＬＵ５０４へとパイプライン処理される。コンテクストメモリ４１０は、必ずしもスレッド化される必要はない。
【０１００】
図１０は、本発明に係る一実施形態による図５の変換モジュールの出力コンバータ５１８の出力アドレス図である。出力コンバータ５１８は、出力を適切な宛先へ向け、データのビット精度を変更し、性能向上のためにデータをスウィズリング（ｓｗｉｚｚｌｉｎｇ）することを担当する。光源処理モジュール５４宛ての全てのデータは、Ｓ１Ｅ８Ｍ１３（１ビットの符号、８ビットの指数、１３ビットの仮数）としてまとめられた２２ビット浮動小数点形式に丸められる。図４に示すように、光源処理モジュール５４における宛先バッファ４０２は、スレッド化されている。
【０１０１】
データ・スウィズリングは、ベクトルを生成する場合に有用である。この技術により、ベクトル生成時に代償を伴うことなく、距離ベクトル（１，ｄ，ｄ＊ｄ）を生成可能となる。距離ベクトルは、フォグ、ポイントパラメータ、及び光の減衰のために用いられる。これは、視線ベクトル（ｅｙｅ ｖｅｃｔｏｒ）及び光方向ベクトル（ｌｉｇｈｔ ｄｉｒｅｃｔｉｏｎ ｖｅｃｔｏｒ）を用いてなされる。テーブル８に、このようなベクトルに関連した種々の演算を示す。なお、以下のテーブルにおいて、ベクトルの平方を、ｄ２＝ｄｏｔ［（ｘ，ｙ，ｚ），（ｘ，ｙ，ｚ）］とし、ｄ２を（ｘ，ｙ，ｚ）の要素ｗに格納する。
【０１０２】
【表８】
2004514973.tif 000011
【０１０３】
なお、本発明で実行される数学は、常にＩＥＥＥに準拠しているというわけではない。例えば、“０”に任意の数を乗じたものは、“０”とみなされる。これは、ｄ＝ｄ２＊１／（ｄ２）１／２，但しｄ＝０、といった式を処理するときに、特に有益である。上述の仮定なしには、このような数式はエラーとなるので、関連の計算を行う際に問題が発生する。
【０１０４】
図１１は、本発明に係る一実施形態による図５の変換モジュールのマイクロコード体系の説明図である。変換モジュールのマイクロコードは、１５フィールドに配列され、全体で４４ビットである。フィールドは、ユニットのデータフローに合わせて遅延される。ＭＬＵ５００の演算は遅延０で実行され、ＡＬＵの演算は遅延１で実行され、ＲＬＵ、出力演算は遅延２で実行される。各遅延は、３サイクルに相当する。
【０１０５】
図１２は、本発明に係る一実施形態による図５の変換モジュール５２のシーケンサ１２００を示す図である。図１２に示すように、変換モジュール５２のシーケンサ１２００には、演算処理の複数のモードの状態を示すモードビットをＶＡＢ５０から取得するように適合したバッファ１２０２が含まれている。
【０１０６】
また、モードの状態に対応した演算処理を実行するのに適した、コードセグメントを格納可能なメモリ４１２が含まれている。シーケンスモジュール１２０６は、メモリ４１２及び制御ベクトルモジュール１２０５間に接続されており、これは次に、モードビットから得られた制御ベクトルに基づいてメモリ４１２内の複数のアドレスを特定するために、バッファ１２０２に接続している。さらに、シーケンスモジュール１２０６は、変換モジュール５２を操作してデータを出力バッファ１２０７へと転送させるのに用いられうるコードセグメントを取得するために、メモリ４１２内のアドレスにアクセスするようになっている。
【０１０７】
図１３は、図１２の変換モジュール５２のシーケンサ１２００の使用に関連した種々の演算を示すフローチャートである。図示の如く、シーケンサ１２００は、変換又は光源処理にてグラフィクス処理をシーケンス処理するようになっている。処理１３２０では、最初に、演算処理の複数のモードの状態を示すモードビット２０２が取得される。一実施形態では、モードビット２０２は、ソフトウェアドライバから取得される。
【０１０８】
次に、処理１３２２では、メモリにおける複数のアドレスが、モードビット２０２に基づいて特定される。次に、このようなアドレスは、モードの状態に対応した演算処理を実行するのに適した、コードセグメントを取得するために、メモリ内で処理１３２４にてアクセスされる。次に、コードセグメントが、変換又は光源処理モジュールで頂点データを処理するために実行される。処理１３２６を参照されたい。
【０１０９】
図１４は、図１２の変換モジュール５２のシーケンサ１２００のシーケンスモジュール１２０６の処理を示すフローチャートである。図示の如く、複数のモードレジスタ１４３０の各々には、ユニークなモードビット２０２の組が含まれており、１つの頂点に対応している。なお、モードレジスタ１４３０は、図４Ａ及び図４Ｂを参照して上述した方式で複数の実行スレッドが実行可能となるように、ラウンドロビンシーケンスでポーリングされる。
【０１１０】
一旦、現行の実行スレッドが選択されると、対応するモードビット２０２群が、処理１４３２にて復号される。モードビット２０２が処理１４３２で復号されると、対応する頂点データの処理のために、特定のコードセグメントがＲＯＭ１４０４内でアクセスされるべきかどうかを示すビットを複数含んだ制御ベクトルが得られる。
【０１１１】
コードセグメントがＲＯＭ１４０４内でアクセスされて実行されるべきであるかどうかが決定されると、ポインタ処理１４３６により、現行のスレッドポインタがインクリメントされ、これにより、次の実行スレッドを開始して、第２のモードビット２０２群を取得し、同様の処理を実行する。このことは、各スレッドについて、ラウンドロビンシーケンスで継続されることになる。
【０１１２】
一旦、特定のモードビット２０２群について制御ベクトルが形成されると、プライオリィティ・エンコーダ処理１４３８にて、制御ベクトルにおける次の“１”すなわち有効なビットが、決定又は識別される。このようなビットが検出されると、プライオリィティ・エンコーダ処理１４３８にて、有効なビットに対応したＲＯＭ１４０４内のアドレスが、実行のために生成される。
【０１１３】
他のスレッドの処理後、最初のモードビット２０２群に戻り、モードビットが復号されて制御ベクトルが再び得られると、マスク処理１４３４が、識別済の “１”すなわち有効なビットをマスクするために用いられてもよい。これにより、マスク処理１４３４後に残りのビットの全てを解析可能となる。
【０１１４】
上述の処理は、以下のテーブルを用いて説明されうる。テーブル９に、対象となる頂点データについて実行されうる複数の式を示す。
【０１１５】
【表９】
2004514973.tif 000012
【０１１６】
ここに示すように、逆演算（ａ，ｂ＊ｃ，ｄ＊ｅ，ｆ，及び１／ｘ）の他に、合計されうる結果として、４つの可能性がある。次に、モードフィールドが定義されてもよい。テーブル１０に、モードフィールド対、すなわちｍｏｄｅ．ｙ及びｍｏｄｅ．ｚであり、その各々には、テーブル９の演算の所定の組が割り当てられている。
【０１１７】
【表１０】
2004514973.tif 000013
【０１１８】
その後、各演算は、メモリにおける対応するアドレスに配置されてもよい。テーブル１１に、複数のメモリアドレスを示す。各アドレスには、対応する演算がある。また、制御ベクトルの定義の組が示されている。
【０１１９】
【表１１】
2004514973.tif 000014
【０１２０】
テーブル１２に、実行例を示す。
【０１２１】
【表１２】
2004514973.tif 000015
【０１２２】
このように、変換モジュールのシーケンサ１２００は、スレッド化されたモードビット２０２から得られたスレッド化された制御ベクトルを処理してゆき、対応する制御ベクトルのビットが“真（ＴＲＵＥ）”に設定された全てのＲＯＭアドレスを実行する。制御ベクトルは、ＲＯＭと同じサイズである。シーケンサ１２００は、所定数のサイクル毎に“１”すなわち有効なビットを１つという速度で、任意の制御ベクトルを処理してゆくことができる。モードビット２０２を使用しないコマンドは単純であるため、その場でマイクロコードを生成することにより実行されてもよい。
【０１２３】
ユニークなモードビット２０２列でこのような状態を表現することにより、グラフィクス処理ハードウェアにおいて種々の演算の状態を判別するための複数のｉｆ−ｔｈｅｎ節が不要となる。このようにして、性能が向上する。概念上、プログラム言語中のｉｆ節は、あたかもシーケンサ１２００へと移行したようになる。これにより、モードビット２０２に示される“偽（ＦＡＬＡＥ）”状態の命令を即座にスキップすることになる。
【０１２４】
上述のように、モードビットにより識別される演算の種々の状態を取扱可能なコードセグメントが、ＲＯＭ内に格納されている。一実施形態では、モードビットにより示される各演算を取り扱うために、個別のコードセグメントが取得されてもよい。その代わりに、可能となる各演算又は演算の組み合わせを取り扱うために、１つの包括的なコードセグメントが記述されてもよい。但し、このような大きなコードセグメントを演算の各々の組み合わせ用に作成するには、追加のコード空間が必要となるので、共通して使用される演算の組み合わせに対してのみ、コードセグメントをモジュール化するとよい。
【０１２５】
一旦、頂点が実行を開始するとモードビット２０２は変化しないので、制御ベクトルは、シーケンサに入る前に頂点毎に一度のみ生成されればよい。但し、演算が繰り返されうる光源処理等のいくつかの場合で、これに対する例外が生じることがある。最後の頂点の命令が検出されると、シーケンス終端（ＥＯＳ）信号がアクティブになってもよい。これは、入力及び出力バッファの状態を変更するのに用いられてもよく、図２８Ａ及び図２８Ｂを参照して後述する方式で、次のコマンドを開始可能とするために用いられてもよい。なお、ＥＯＳ信号は、命令が取り扱われる方式と同様に宛先バッファを解放するために、パイプライン遅延される。図４Ｂを参照されたい。
【０１２６】
図１４Ａは、グラフィクス処理の際のスカラー及びベクトル頂点データの取扱を統合するために用いられる本発明の種々の機能コンポーネントを示すフローチャートである。図示の如く、機能上の一側面１４４０には、ベクトル頂点データを出力するために、処理モジュール、すなわち、加算器、乗算器等にベクトル頂点データを入力することが含まれる。機能上の他の側面１４４２では、ベクトル頂点データが、再びベクトル頂点データへと変換又はスメアリングされるスカラー頂点データを出力するベクトル処理モジュール、すなわち、加算器、乗算器等により処理される。
【０１２７】
機能上の別の側面１４４４では、ベクトル頂点データはマスクされて、スカラー頂点データへと変換され、その後、ベクトル頂点データ生成のために、メモリ、すなわち、レジスタ論理ユニット内に格納される。機能上のさらに別の側面１４４６では、スカラー頂点データが、ベクトル処理モジュール、すなわち、加算器、乗算器等により抽出されて、その次に、スカラー処理モジュール、すなわち、逆論理ユニットにより処理される。スカラー処理モジュールは、スカラー頂点データをレンダリングする。このスカラー頂点データは、再びベクトル頂点データへと変換される。
【０１２８】
図１４Ｂは、図５の変換モジュール５２に対応した図１４Ａに示す本発明に係る機能コンポーネントとしてとりうる組み合わせ１４５１を示すフローチャートである。なお、機能上の側面１４４４，１４４６は、図４Ｂを参照して上述したものと同様の方式で対応づけられた遅延を有していてもよい。図１４Ｃは、図１４Ａに示した本発明に係る機能コンポーネントとしてとりうる別の組み合わせ１４５３を示すフローチャートである。
【０１２９】
マルチプレクサは、図１４Ａ乃至図１４Ｃの機能モジュールにて、ベクトル頂点データからのスカラー頂点データの抽出を実行してもよい。また、このようなマルチプレクサは、様々な機能モジュールによる処理前に必要とされるあらゆるデータ・スウィズリングを担当してもよい。一実施形態では、マルチプレクサは、ベクトル頂点データを渡すとともに回転させることが可能で、他の処理用のＡＬＵのような他のグラフィクス処理モジュールに依存していてもよい。別の実施形態では、マルチプレクサは、代償なしに、属性を独立して任意に再設定可能であってもよい。
【０１３０】
図１４Ｄに、特定用途向けＩＣ（ＡＳＩＣ）等のハードウェア実装によるグラフィクス・パイプラインでのグラフィクス処理の際に、変換システムがブレンディング（ｂｌｅｎｄｉｎｇ）あるいはスキニング（ｓｋｉｎｎｉｎｇ）処理を実行するように適合した方法を示す。パイプライン処理の際、処理１４７０では、複数の行列、複数の重み値（その各々が行列の１つに対応）、及び頂点データが取得される。なお、法線（ｎｏｒｍａｌ）の頂点データには、追加の行列の組が必要であってもよい。
【０１３１】
次に、処理１４７２では、複数の積の和が算出される。なお、各積は、頂点データ、行列の１つ、及び該行列に対応した重みの乗算により算出される。そして、処理１４７４にて、このような積の和が、さらなる処理のために出力される。
【０１３２】
概略すると、以下の積の和が算出されることになる。
【０１３３】
式＃１
ｖ’＝Σｗｉ＊Ｍｉ＊ｖ　なお、ｉ＝１…ｘ
ここで、ｖ＝入力された頂点データ
ｗ＝重み値
Ｍ＝行列
ｘ＝行列の個数
ｖ’＝処理モジュールへの出力用の頂点データ
式＃２
ｎ’＝Σｗｉ＊Ｉｉ＊ｎ　なお、ｉ＝１…ｘ
ここで、ｎ＝入力された頂点データ（法線ベクトル）
ｗ＝重み値
Ｉ＝逆行列（逆転置行列）
ｘ＝逆行列の個数
ｎ’＝処理モジュールへの出力用の頂点データ（法線ベクトル）
式＃３
ｖｓ＝［Ｏｘ，Ｏｙ，Ｏｚ，φ］’＋
１／（ｖ’’ｗｃ）＊［（ｖ’’ｘ），（ｖ’’ｙ），（ｖ’’ｚ），１］’
ここで、ｖ’’＝Ｃ＊ｖ’
ｖ’＝式＃１による積の和
Ｃ＝［Ｓｘ，Ｓｙ，Ｓｚ，１］’＊Ｐ
Ｐ＝投影行列
ｖｓ＝表示用の画面ベクトル
Ｏ＝ビューポート・オフセット
Ｓ＝ビューポート・スケール
なお、上述の重み値ｗｉを表すには、多くの方法がある。例えば、式＃１及び式＃２にて、ｉ＝１…（ｘ−１）で、ｗｘ（ｗｉにてｉ＝ｘ）として、式１−Σｗｉにより算出されてもよい。このように重みｗｉを表すことにより、重みｗの総和を確実に１にすることができる。
【０１３４】
一実施形態では、行列には、モデルのビュー行列（ｖｉｅｗ ｍａｔｒｉｘ）が含まれていてもよく、積の和（ｖ’）が、光源処理によるさらなる処理のために出力されてもよい。式＃１を参照されたい。また、この積の和（ｖ’）は、合成行列（Ｃ）を用いることにより、表示の目的で、他の積の和（ｖｓ）を生成するのに用いられてもよい。式＃３を参照されたい。さらに、行列には、逆行列（Ｉ）が含まれていてもよく、頂点データには、法線ベクトルデータ（ｎ）が含まれていてもよい。このような場合には、追加の処理には、光源処理が含まれていてもよい。式＃２を参照されたい。
【０１３５】
図１５は、本発明の一実施形態による光源処理モジュール５４を示す図である。図示の如く、光源処理モジュール５４には、変換モジュール５２による頂点データの出力先であるバッファ４０２が含まれている。図示の如く、バッファ４０８は、経路１５０１により光源処理モジュール５４をバイパスする。さらに、コンテクストメモリ１５００及びマイクロコードＲＯＭメモリ１５０２が、光源処理モジュール５４に接続している。
【０１３６】
光源処理モジュール５４は、フォグ及びポイントパラメータに加えて、光源処理を取り扱うように適合している。実際の光源処理モジュール５４は、バッファのバイパス経路１５０１を制御し、拡散、点のサイズ、及び鏡面出力色（ｓｐｅｃｕｌａｒ ｏｕｔｐｕｔ ｃｏｌｏｒｓ）、並びにフォグ値（ｆｏｇ ｖａｌｕｅ）を算出する。なお、光源処理モジュール５４は、変換モジュール５２と同じモードビット２０２を用いている。
【０１３７】
さらに、光源処理モジュール５４は、変換モジュール５２よりも低い精度でよく、トリ・ワード（ｔｒｉ−ｗｏｒｄ）構成の２２ビットの浮動小数点値（１．８．１３形式）を処理する。第３のバッファ４０８のデータが１２８ビットであるため、それには、光源処理モジュール５４を迂回するバイパス経路１５０１が利用される。光源処理モジュール５４はイベント駆動式であり、図４Ａ及び図４Ｂを参照して上述した変換モジュール５２と同様の方式で、３つのスレッドを同時に処理する。なお、光源処理モジュール５４には、外部からのコマンド起動許可が必要であってもよい。
【０１３８】
図１６は、本発明に係る一実施形態による図１５の光源処理モジュール５４の機能ユニットを示す図である。図示の如く、頂点データを取得するために変換システムに接続するように適合した入力バッファ４０２が含まれている。上述のように、入力バッファ４０２には、第１の入力バッファ４０４、第２の入力４０６、及び第３の入力バッファ４０８が含まれている。第１のバッファ４０４、第２の入力バッファ４０６、及び第３の入力バッファ４０８の入力は、変換モジュール５２の出力に接続している。第３のバッファ４０８の出力は、バイパスするために、遅延１６０８を介して光源処理モジュール５４の出力に接続している。
【０１３９】
さらに、第１の入力バッファ４０４の出力に接続した第１の入力と、第２の入力バッファ４０６の出力に接続した第２の入力とを有するＭＬＵ１６１０が含まれている。ＭＬＵ１６１０の出力は、その第２の入力に接続したフィードバックループ１６１２を有する。演算論理ユニット（ＡＬＵ）１６１４は、第２の入力バッファ４０６の出力に接続した第１の入力を有する。さらに、ＡＬＵ１６１４は、ＭＬＵ１６１０の出力に接続した第２の入力を有する。ＡＬＵ１６１４の出力は、光源処理モジュール５４の出力に接続している。なお、ＡＬＵ１６１４の出力及び第３の入力バッファ４０８の出力は、マルチプレクサ１６１６を介して、光源処理モジュール５４の出力に接続している。
【０１４０】
次に、ＡＬＵ１６１４の出力に接続した入力と、ＡＬＵ１６１４の第１の入力に接続した出力とを有する第１のレジスタユニット１６１８が設けられている。第２のレジスタユニット１６２０は、ＡＬＵ１６１４の出力に接続した入力を有する。また、このような第２のレジスタ１６２０は、ＭＬＵ１６１０の第１の入力と第２の入力とに接続した出力を有する。
【０１４１】
また、ＡＬＵ１６１４の出力に接続した第１の入力と、第１の入力バッファ４０４の出力に接続した第２の入力と、ＭＬＵ１６１０の第１の入力に接続した出力とを有する光源処理論理ユニット（ＬＬＵ）１６２２が設けられている。なお、ＬＬＵ１６２２の第２の入力は、第１の入力バッファ４０４の出力に、遅延１６２４を介して接続している。さらに、ＬＬＵ１６２２の出力は、先入れ先出しレジスタユニット１６２６を介して、ＭＬＵ１６１０の第１の入力に接続している。また、図１６に示すように、ＬＬＵ１６２２の出力は、変換モジュール１６２８を介して、ＭＬＵ１６１０の第１の入力にも接続している。処理の際、このような変換モジュール１６２８は、変換モジュール５２と同様の方式で、スカラー頂点データをベクトル頂点データへと変換するようになっている。
【０１４２】
最後に、メモリ１５００は、ＭＬＵ１６１０の複数の入力の少なくとも１つ及び演算論理ユニット１６１４の出力に接続している。特に、メモリ１６１０には、ＭＬＵ１６１０の第１及び第２の入力に接続した読取端子がある。さらに、メモリ１５００には、ＡＬＵ１６１４の出力に接続した書込端子がある。
【０１４３】
このメモリは、入力バッファ４０２、ＭＬＵ１６１０、ＡＬＵ１６１４、第１のレジスタユニット１６１８、第２のレジスタユニット１６２０、及びＬＬＵ１６２２に関連して頂点データ処理用に使用するための複数の定数及び変数を格納している。
【０１４４】
図１７は、本発明に係る一実施形態における図１６の光源処理モジュール５４のＭＬＵ１６１０を示す図である。図示の如く、光源処理モジュール５４のＭＬＵ１６１０には、並列配置の３個のマルチプレクサ１７００が含まれている。処理の際、本ＭＬＵ１６１０は、２つの３要素ベクトルの乗算、又は１つの３要素ベクトルを渡すことに適合している。３要素ベクトルの乗算は、内積又は平行乗算（ｐａｒａｌｌｅｌ ｍｕｌｔｉｐｌｙ）によりなされてもよい。テーブル１３に、光源処理モジュール５４のＭＬＵ１６１０が実行可能な処理を示す。
【０１４５】
【表１３】
2004514973.tif 000016
【０１４６】
テーブル１４に、光源処理モジュール５４のＭＬＵ１６１０の入力Ａ及びＢとして取りうるものを示す。
【０１４７】
【表１４】
2004514973.tif 000017
【０１４８】
図１８は、本発明に係る一実施形態による図１６の光源処理モジュール５４のＡＬＵ１６１４を示す図である。図示の如く、ＡＬＵ１６１４には、並列／直列配置された３個の加算器１８００が含まれている。実際のＡＬＵ１６１４は、２つの３要素ベクトルを加算可能、又は、１つの３要素ベクトルを渡すことができる。テーブル１５に、光源処理モジュールのＡＬＵ１６１４が可能な種々の演算を示す。
【０１４９】
【表１５】
2004514973.tif 000018
【０１５０】
テーブル１６に、光源処理モジュール５４のＡＬＵ１６１４の入力Ａ及びＢとして取りうるものを示す。
【０１５１】
【表１６】
2004514973.tif 000019
【０１５２】
図１９は、本発明に係る一実施形態による図１６の光源処理モジュール５４のレジスタユニット１６１８，１６２０を示す図である。図示の如く、各レジスタユニット１６１８，１６２０は、２組のレジスタ１９００を有し、各レジスタ１９００は、対応するマルチプレクサ１９０２の第１の入力に接続した出力、及びマルチプレクサ１９０２の第２の入力に接続した入力とを有する。
【０１５３】
光源処理モジュール５４のレジスタユニット１６１８，１６２０は、ＡＬＵ１６１４用の２つのレジスタ及びＭＬＵ１６１０用の２つのレジスタに分割されている。一実施形態では、レジスタはスレッド化されている。レジスタユニット１６１８，１６２０は、書込アドレスが読取アドレスと同じである場合には、入力から出力へのバイパス経路により、待ち時間が０となる。
【０１５４】
図２０は、本発明に係る一実施形態による図１６の光源処理モジュール５４のＬＬＵ１６２２を示す図である。ＬＬＵ１６２２は、光源処理モジュール５４の光源処理ユニットである。光＋素材の色の乗算に後で用いられる光源処理係数を算出するのは、スカラーブロックである。ＬＬＵ１６２２には、２つのＭＡＣ、１つのインバータ、４つの小メモリ、及び１つのフラグレジスタが含まれている。
【０１５５】
フラグレジスタは、光源処理の式の条件部分を実装するのに用いられる。出力は、環境、拡散、及び鏡面係数である。スカラーメモリには、鏡面近似に用いられる変数、及び定数が含まれている。各メモリの第１の位置には、１．０（ｃｔｘ０及びｃｔｘ２に対して）及び０．０（ｃｔｘ１及びｃｔｘ３に対して）が含まれている。一実施形態では、これらは、ハードワイヤ化されていてロード不要である。
【０１５６】
実際のＬＬＵ１６２２では、式：（ｘ＋Ｌ）／（Ｍ＊ｘ＋Ｎ）が基本的に実装されている。この式は、鏡面光源処理項（ｓｐｅｃｕｌａｒ ｌｉｇｈｔｉｎｇ ｔｅｒｍ）を近似するのに用いられる。ＬＬＵ１６２２への入力は、光源処理モジュール５４のＡＬＵ１６１４からのものであり、光源処理の式で用いられる内積である。上述のように、図１６に関して、ＬＬＵ１６２２及びＭＬＵ１６１０間に、係数をＭＬＵ１６１０が必要とするまで一時的に記憶する出力ＦＩＦＯ１６２６がある。一実施形態では、このようなＦＩＦＯ１６２６は、遅延１６０８，１６２４、及びレジスタ１６１８，１６２０とともにスレッド化されていてもよい。色の素材としてとりうるものの処理により、拡散及び鏡面出力がＭＬＵ１６１０で使用済みとなる時は未知である。
【０１５７】
光源処理モジュール５４はＲ，Ｇ，Ｂ要素のみを処理するので、拡散出力のアルファ要素を処理するために特別に適合したハードウェアが設けられる。このように特別に適合したハードウェアは、２種のアルファ要素、すなわち、ｖｔｘ　ｃｏｌｏｒｏ　α［Ｔｂｕｆｆｅｒ］、及び、格納されたｃｔｘ　α［Ｃｔｘ　ｓｔｏｒｅ］を出力可能である。上述のα要素の選択は、モードビット２０２により制御される。
【０１５８】
処理の際、ＬＬＵ１６２２は、光源処理の環境（Ｃａ）、拡散（Ｃｄｅ）、及び鏡面（Ｃｓ）係数を算出する。そして、これらの係数は、環境、拡散、及び鏡面色で乗算されて、頂点の色に対する光の寄与分が得られる。テーブル１６Ａには、ＬＬＵ１６２２により取得された入力のリストと、環境（Ｃａ）、拡散（Ｃｄｅ）、及び鏡面（Ｃｓ）の光源処理係数を得るために実行される計算とが含まれている。なお、ＬＬＵ１６２２を実装するのに、所望のハードウェア構成が用いられてもよい。一実施形態では、図２０に示す具体的構成が用いられてもよい。
【０１５９】
【表１７】
2004514973.tif 000020
【０１６０】
上述のように、頂点データ自体によって、あるいは、頂点データから得られた任意の結果によって、頂点シーケンサを制御するモードビットが必ずしも変更されるわけではない。頂点データが頂点処理を変更できるように、フラグレジスタ１６２３を用いたＬＬＵ１６２２が設けられている。フラグが計算の出力制御で指定されている場合には、このフラグレジスタでビットを真（ＴＲＵＥ）に設定することにより、計算結果の０．０へとクランプ可能となる。その他に、フラグレジスタ１６２３は、レジスタ書込のために書込マスクを設定するのに用いられる。
【０１６１】
フラグレジスタ１６２３は、性能上の代償なく、ｉｆ／ｔｈｅｎ／ｅｌｓｅを実行して光源処理の式で０．０にクランプするために、ＬＬＵ１６２２内に設けられている。種々のオペランドの符号ビットにより、フラグが設定されてもよい。テーブル１６Ｂに、フラグレジスタ１６２３のフラグが設定されてクランプがなされる方式を示す。
【０１６２】
【表１８】
2004514973.tif 000021
【０１６３】
図２１は、本発明に係る一実施形態による図１６の光源処理モジュール５４に関連したフラグレジスタ１６２３の構成を示す説明図である。フラグレジスタ１６２３には、８つの１ビットフラグが含まれ、ＡＬＵ（ＩＦＬＡＧ）又はＭＡＣ０（ＭＦＬＡＧ）出力の符号ビットにより設定される。
【０１６４】
ＬＬＵ１６２２が、スカラー値をＭＬＵ１６１０へ出力するとき、そこでトリ・ワードへとスメアリングされ、フラグレジスタのためのマスクを指定する。レジスタ＆マスクが真であれば、０．０が出力となる。テーブル１７に、環境、拡散、及び鏡面属性を出力するのに用いられる図２１の種々のフラグを示す。
【０１６５】
【表１９】
2004514973.tif 000022
【０１６６】
鏡面項に用いられる近似値は負となりうる。そこでは、実際のｃｏｓθ＊＊ｎは、０．０となる。結果として、クランプ処理を実行する必要がある。このために、Ｔ，Ｕフラグが用いられる。テーブル１８に、ＬＬＵ１６２２の機能論理ユニット（ＦＬＵ）１６２１が可能な種々の演算を示す。図２０を参照されたい。
【０１６７】
【表２０】
2004514973.tif 000023
【０１６８】
図２２は、本発明に係る一実施形態における図１６の光源処理モジュール５４に関連したマイクロコードフィールドの説明図である。図示の如く、光源処理モジュール５４のマイクロコードは、３３フィールドとされ、全体のサイズが８５ビットになっている。フィールドは、ユニットのデータフローと整合するように遅延させられる。ＭＬＵの処理は遅延０でなされ、ＡＬＵの処理は遅延１でなされ、ＲＬＵ、ＬＬＵの出力処理は遅延２でなされる。各遅延は、３サイクルに相当する。
【０１６９】
図２３は、本発明に係る一実施形態における図１６の光源処理モジュール５４に関連したシーケンサ２３００を示す図である。図示の如く、光源処理モジュール５４のシーケンサ２３００には、処理動作の複数のモード状態を示すモードビット２０２を取得するのに適合した入力バッファ２３０２が含まれている。また、それぞれモード状態に対応して処理動作を実行するようになっているコードセグメントを格納可能なメモリ１５０２が含まれている。
【０１７０】
シーケンスモジュール２３０６は、モードビットから得られた制御ベクトル２３０５に基づいて、メモリ１５０２内の複数のアドレスを特定するために、メモリ１５０２及びバッファ２３０２間に接続されている。さらに、シーケンスモジュール２３０６は、光源処理モジュール５４を機能させるのに用いられうるコードセグメントを取得するため、メモリ１５０２内のアドレスにアクセスするように適合している。
【０１７１】
光源処理モジュール５４のシーケンサ２３００は、変換モジュール５２のそれと同様である。処理の際、光源処理モジュール５４のシーケンサ２３００は、スレッド化されたモードビット２０２から得られたスレッド化された制御ベクトルを処理してゆき、対応する制御ベクトルのビットが“１”に設定された全てのＲＯＭアドレスを処理する。制御ベクトルは、ＲＯＭが有するワードと同じビット数になっている。シーケンサ２３００は、全スレッドについて、所定数のサイクル毎に“１”すなわち有効ビットという速度で、任意の制御ベクトルを処理してゆく。モードビット２０２を使用しないコマンドは、実行中のマイクロコード生成により実行される。光源処理モジュール５４のシーケンサ２３００と変換モジュール５２のシーケンサ１２００との主要な相違点は、光源処理モジュール５４のシーケンサ２３００が、ループバックして８回まで光源処理コードを実行可能であるということである。
【０１７２】
光源処理モジュール５４のシーケンサ２３００は、新規の頂点の各々につき０から開始してマイクロコードの最後で１インクリメントされる光カウンタを有する。モードビット２０２のＬＩＳフィールドの照合ビットフィールドが“１”になっている場合、シーケンサ２３００は、元に戻って光源処理マイクロコードブロックを再び最初から開始する。これは、ＬＩＳフィールドが０になるか、又は８つの光が処理されるまで続く。色の蓄積（ｃｏｌｏｒ ａｃｃｕｍｕｌａｔｉｏｎ）は、拡散及び鏡面色を格納するＡＬＵレジスタを（光毎に）インクリメントすることによりなされる。自動メモリアドレスのインデックス化（ｉｎｄｅｘｉｎｇ）は、光カウンタを用いて、各光について適切なパラメータを取得することによりなされる。
【０１７３】
図２４は、本発明に係る一実施形態における変換及び光源処理モジュール５２，５４が対応するバッファに関連した入力及び出力を制御可能な方法を示すフローチャートである。図示の如く、処理２４２０では、第１のバッファの組のバッファにて最初に頂点データが取得される。頂点データが取得されるバッファは、ラウンドロビンシーケンスに基づく。
【０１７４】
次に、処理２４２２では、第２のバッファの組の空のバッファが、これもまたラウンドロビンシーケンスに基づいて特定される。変換モジュール５２は、第１のバッファの組と第２のバッファの組との間に接続されている。第２のバッファの組の空のバッファが特定されると、変換モジュールで頂点データが処理され、変換モジュールから、第２の組のバッファのうちの特定された空のバッファへと出力される。処理２４２４及び２４２６を参照されたい。
【０１７５】
同様に、処理２４２８では、第３のバッファの組のうちの空のバッファ、又はメモリ内のスロット若しくは空間が、ラウンドロビンシーケンスに基づいて特定される。光源処理モジュール５４は、第２のバッファの組と第３のバッファの組との間に接続されている。第３のバッファの組の空のバッファが特定されると、処理２４３０で示すように、頂点データが、光源処理モジュールで処理される。そして、頂点データは、光源処理モジュール５２から、第３のバッファの組のうちの識別された空のバッファへと出力される。処理２４３２を参照されたい。なお、バッファ又はメモリ内のスロットの数は自由であり、変更可能である。
【０１７６】
図２５は、図２４の方法に従い、変換及び光源処理モジュール５２，５４が、対応するバッファの入力及び出力を制御可能な方法を示す説明図である。図示の如く、第１のバッファの組、すなわち入力バッファ４００は、変換モジュール５２へと送り、次に該変換モジュール５２は、第２のバッファの組、すなわち中間バッファ４０４，４０６へと送る。第２のバッファの組４０４，４０６は、光源処理モジュール５４へと送る。該光源処理モジュール５４からメモリ２５５０へとドレインされてゆく。
【０１７７】
図２５にて上述した方法を実行するために、頂点データの最初の取得時に、メモリ２５５０のスロット及び第１及び第２の組のバッファの各々に対して、ユニークな識別子が割り当てられる。さらに、各バッファの現在の状態が監視される。このような状態として、割当状態、有効状態、アクティブ状態、又は処理済状態等があってもよい。
【０１７８】
割当状態は、バッファ／スロットが、前段のグラフィクス処理モジュール、すなわち変換モジュール又は光源処理モジュールの出力を取得するように、既に割当がなされていることを示している。書込ポインタがバッファ／スロットをラウンドロビンシーケンスで走査するとき、割当状態におけるバッファ／スロットにより、このような書込ポインタが次のバッファ又はスロットへとインクリメントされる。
【０１７９】
バッファ／スロットは、有効状態であれば、頂点データを取得するのに利用可能である。一方、アクティブ状態は、バッファ／スロットが現在実行状態であること、又は頂点データを取得していることを示す。このアクティブ状態は、読取ポインタがインクリメントされた後、スレッドが処理されるまで維持され、バッファ／スロットが有効状態とされる。なお、第１のバッファ４００の組は、それらを割り当てる前段のグラフィクス処理モジュールがないので、常に有効状態になっている。
【０１８０】
次に、状態シーケンスの例を説明する。第１のバッファ４００の組における頂点データと、新規のコマンドビット２００の組とを取得すると、このようなバッファは有効状態とされ、その後、第２のバッファ４０２，４０４の組の１つが、変換モジュール５２の出力に備えて割当状態になる。
【０１８１】
第２のバッファ４０４，４０６の組が、いずれも割り当てのために利用不能であれば、第１のバッファ４００の組のバッファ内の頂点データは、処理不能である。さらに、実行されるべきコードセグメントが、同時に実行される他のコードセグメントに干渉するかどうかを決定するために、検査が行われてもよい。そうした場合、第１のバッファ４００の組のバッファ内の頂点データは、処理されずに、ストール状態が開始される。
【０１８２】
第２バッファ４０４，４０６の組の１つが割当状態になった後、第１のバッファ４００の組のバッファは、アクティブ状態になる。変換モジュール５２が実行を終了すると、第２のバッファ４０４，４０６の組のバッファが読み取られて、有効状態になる。これらの状態変化は、頂点データが第２の組４０４，４０６とメモリ２５５０のスロットとの間で転送される際に、同時に実行される。
【０１８３】
図２５Ｂに、セットアップモジュール５７及び探査モジュール５８を備えたラスタライザ・モジュール５６を示す。ラスタライザ・モジュール５６は、交互になされるエリアベースのラスタ化を実行するのに適合している。特に、複数のポリゴン定義（ｐｏｌｙｇｏｎ−ｄｅｆｉｎｉｎｇ）検出点が、プリミティブ上に、あるいはその近傍に位置している。それ以後、直線の式（ｌｉｎｅ ｅｑｕａｔｉｏｎ）がそれらの点にて評価されて、どの画素がプリミティブ内に位置するかが判別される。処理の際、この評価は、効率化のために、点が交互に移るようにして繰り返される。さらに、ラスタライザモジュール５６は、クリッピング手順なしに動作するように適合していてもよい。
【０１８４】
図２６に、ラスタ化モジュール５６のセットアップモジュール５７の図を示す。図示の如く、セットアップモジュール５７には、所望の浮動小数点計算を実行するために、ルーティングデータ及び適切な機能ユニットに対する制御信号を取り扱う制御部６１が含まれている。プリミティブシーケンサ６２は、頂点のシーケンスを三角形、線、又は点へと転換する処理を行う。さらに、浮動小数点データパス部６４には、マルチプレクサと、セットアップユニット内で必要な数値演算を実行する浮動小数点演算ユニットとが含まれている。
【０１８５】
引き続き図２６を参照すると、出力形式調整部６３は、境界の傾き及び境界値の内部浮動小数点形式を、ラスタライザに適した整数形式へと変換する処理を行う。これは、ラスタライザが整数値のみで動作するためである。無論、代替的な実施形態では、ラスタライザが浮動小数点を使用することとして、出力形式調整部６３を不要としてもよい。
【０１８６】
処理の際、出力形式調整部６３は、ブロック浮動小数点変換を実行する。周知の通り、所与の数字すなわち２．３４ｅ１０について、浮動小数形式はその仮数（２．３４）及び指数（１０）を管理する。ブロック浮動小数点変換は、実質的に、指数が同じになるように、入力データの仮数の小数位を操作する。このために、指数がラスタライザ・モジュール５６で処理される必要はない。
【０１８７】
図２６Ａは、図２５Ｂにおけるラスタライザ・モジュール５６のセットアップモジュール５７により算出される種々のパラメータを示す説明図である。このようなパラメータは、ラスタライザ・モジュール５６が関連した機能を実行するのに必要である。プリミティブ２６００を取得すると、セットアップモジュール５７は、プリミティブ２６００の傾き２６０１、開始位置２６０２、及び開始値２６０４の３つの値を算出する。
【０１８８】
傾き２６０１は、ラスタ化の際に用いられるプリミティブ２６００の境界の直線の式のための係数を生成するのに用いられる。例えば、傾き２６０１は、以下の式＃４及び＃５を用いて算出されてもよい。
【０１８９】
式＃４及び＃５
ｓｌｏｐｅＡ＝ｙ０−ｙ１
ｓｌｏｐｅＢ＝ｘ１−ｘ０
ここで、ｙ０、ｙ１、及びｘ０、ｘ１は、図２６Ａに示された頂点の座標である。
【０１９０】
なお、傾きは、頂点の座標を用いて回転演算（ｒｏｔａｔｉｏｎ ｏｐｅｒａｔｉｏｎ）等で算出されてもよい。
【０１９１】
開始位置２６０２は、以下より詳細に説明するエリアのラスタ化のための開始ポイントを示す。開始値２６０４は、図２６Ａに示された斜線の三角形の面積に等しく、エリアベースのラスタ化の際に用いられる。このような開始値２６０４は、各ステップの傾きを加算しながら画面でのラスタ位置のステップが、ラスタ位置が境界上にある場合、正確にゼロになるように選択される。開始値２６０４の算出は、以下の式＃６を用いてなされてもよい。
【０１９２】
式＃６
ｓｔａｒｔｉｎｇ＿ｖａｌｕｅ＝ｓｌｏｐｅＡ＊（ｘｓ−ｘ０）＋ｓｌｏｐｅＢ＊（ｙｓ−ｙ０）
ここで、ｘｓ，ｙｓ＝開始位置２６０２
ｓｌｏｐｅＡ，ｓｌｏｐｅＢ＝図２６Ａに示す頂点の座標に基づく境界の１つの傾き
ｘ０，ｙ０＝図２６Ａに示す境界の頂点の１つの座標
なお、上記の値は、他の種類のプリミティブについて算出されてもよい。例えば、直線の場合、四辺の閉じた四角形について追加の傾きが算出される必要がある。このような傾きは、閉じた四角形の対向する側の傾きの逆数を用いることにより、容易に算出可能である。なお、追加の傾きの算出に加えて、直線のプリミティブの場合には、他の開始値が算出される必要がある。
【０１９３】
図２７に、ラスタライザ・モジュール５６が複数のプリミティブ（例えば三角形）の１つを処理する方法を示す。特に、最初に、ラスタライザ・モジュール５６のセットアップモジュール５７により、初期動作が実行される。プリミティブが取得されると、処理２７００にて、図２６Ａの傾き２６０１を用いて、当業者に周知の方法で、直線について直線の式の直線式係数が求められる。周知の通り、三角形を定義するには、３つの直線の式が必要である。一方、直線のようなプリミティブは、４つの辺及び４つの直線の式で長方形又は平行四辺形として描画される。
【０１９４】
その後、処理２７０２では、いずれかのプリミティブの頂点が負のＷ−座標を有している場合、直線式係数が変更される。以下、この処理に関する追加の情報について、図３２を参照してより詳細に説明する。
【０１９５】
なお、ラスタライザモジュール５６のセットアップモジュール５７も、プリミティブの閉じた四角形を算出する。ほとんどの三角形について、閉じた四角形には、３つの頂点の最小値及び最大値が含まれる。直線については、閉じた四角形における平行四辺形の四隅が算出される。頂点が負のＷ−座標を有している三角形又は直線については、描かれるべき領域が、頂点の凸状の外殻（ｈｕｌｌ）を越えて延びる。
【０１９６】
ＯｐｅｎＧＬ（登録商標）のコマンドの１つに、切り取り長方形（ｓｃｉｓｓｏｒ ｒｅｃｔａｎｇｌｅ）があり、これは、それより外側には描かれないという境界を規定するものである。ラスタライザ・モジュール５６のセットアップモジュール５７は、閉じた四角形と切り取り長方形との共通部分を算出する。切り取り長方形は長方形であるので、追加として４つの式が提供される。なお、切り取り長方形に対応した直線の式は、ありふれた形式、すなわち水平又は垂直を有する。
【０１９７】
さらに、３次元空間では、近平面（ｎｅａｒ ｐｌａｎｅ）と遠平面（ｆａｒ ｐｌａｎｅ）とは平行であり、視線に対して垂直である。プリミティブが三角形の場合、３つの頂点が含まれ、これらがいずれかの配置の平面を定義する。プリミティブの平面並びに近平面及び遠平面の共通部分には、２つの直線が含まれ、これらの直線に対応する２つの直線の式が伴う。
【０１９８】
従って、各プリミティブは、三角形又は直線の形式のいずれかをとるかに応じて、それぞれ９又は１０の直線の式を有する。また、三角形の場合には、このような直線の式には、三角形を定義する３つの直線の式と、閉じた四角形を定義する４つの直線の式と、プリミティブが存在する平面並びに近平面及び遠平面の共通部分を定義する２つの直線の式とが含まれる。
【０１９９】
引き続き図２７を参照すると、処理２７０４にて、プリミティブ上又はその近傍の複数の点を配置することにより処理が進行する。図２６Ａに示すように、開始位置２６０２により、このような配置が指定される。このような点は、閉じた凸領域を規定しており、該凸領域の隅に位置する。図２７Ａに、凸領域２７０７（例えば長方形）を囲むこのような検出点２７０５を示す。一実施形態では、このような長方形は、８×２画素の大きさであってもよい。さらに、それらの点は、プリミティブの上端となる頂点を囲むように最初に配置されてもよい。オプションとして、これは、切り捨てを用いてなされてもよい。
【０２００】
一旦、プリミティブが配置されると、探査モジュール５８による処理、すなわち以下に述べるようにプリミティブの横列（ｒｏｗ）を処理することにより処理２７０６にて開始される処理が継続する。各横列を処理した後、ジャンプ位置が検出されたかどうかが、判別２７０８にて決定される。ジャンプ位置は、次の横列の処理の開始位置であり、これについて以下詳細に述べる。判別２７０８にて、ジャンプ位置が検出されたと決定された場合、処理２７１０にて、凸領域を定義する検出点がそこに移動する。一方、ジャンプ位置が検出されないと決定された場合、処理は終了する。なお、代替的な実施形態では、縦列、対角線、又は他の任意の型の列が、横列の代替として、処理２７０６にて処理されてもよい。
【０２０１】
図２８は、図２７の横列処理２７０６に関連した本発明に係る処理を示すフローチャートである。図示の如く、ポリゴン定義検出点が右へ移動したかどうか判別２８０１にて決定するために、処理２８００にて検出点を算出することにより、処理が開始する。このような判別は、最も右の検出点の位置に基づいてなされる。最も右側の検出点が、プリミティブの１つ又は複数の境界の外側に位置していない場合、右方への移動が許可され、処理２８０２にて、現在位置の右側への位置（Ｘ及びＹ座標）が、スナップ位置として格納される。一方、最も右側の検出点の双方が１つ以上のプリミティブの外側に位置している場合、右方への移動は許可されず、処理２８０２はスキップされる。
【０２０２】
次に、処理２８０４にて、直線の式が凸領域（例えば長方形）で評価される。この評価には、それらの点がプリミティブ内にあるかどうかを決定することが含まれる。プリミティブ内にそれらの点が存在するかどうかに応じたこのような決定には、各直線の式を評価することにより各検出点にて正の値又は負の値となるかどうかを決定することが含まれていてもよい。
【０２０３】
直線の式は、プリミティブの内部で正になるとともに外部で負となるように、表現可能である。境界の直上に画素が描かれるべき包含的境界（ｉｎｃｌｕｓｉｖｅ ｅｄｇｅｓ）は、ゼロと評価され、正として取り扱われる。排他的境界（ｅｘｃｌｕｓｉｖｅ ｅｄｇｅｓ） は、描かれるべきものではなく、開始時の直線の式の値から１の値を最初に減算することにより、負となりうる。このように、排他的境界上の画素は、正の０となる代わりに、負の値（−１）として評価される。これにより、検出点の解釈について、包含／排他の方式を無視し、直線の式の符号を調べればよいことになる。
【０２０４】
それらの点で直線の式が評価された後、判別２８０６にて、検出点の現在位置がジャンプ位置を占めているかどうかが決定される。なお、ジャンプ位置は、下部の２つの検出位置がいずれも境界の外にない場合にのみ、格納される。判別２８０６でジャンプ位置が検出された場合、処理２８０８にて、該ジャンプ位置が算出されて格納される（あるいは、以前に格納されたジャンプ位置があればそれと置き換えられる）。一方、そうでない場合には、処理２８０８はスキップされる。
【０２０５】
引き続き図２８を参照すると、次に、判別２８１０では、最も左側の検出位置がいずれもプリミティブの境界の外側にあるかどうかが決定される。また、この処理には、最も左側の検出点での直線の式の評価が、正又は負の値であるかどうかを決定することを伴う。特に、９又は１０の境界の式の係数を関係する検出点で算出すると、９又は１０個の値は、９又は１０個の符号ビットを有することになる。例えば、現在の側が完全に境界の外側にあるかどうかを判別するために、本発明により、２つの検出ポイントからの１０個の符号ビットが、ＡＮＤ演算される。そして、いずれかのビットが残れば、両点はその境界の外側となる。
【０２０６】
最も左側の検出点が双方ともプリミティブの外側にあるわけではないと決定された場合には、左方に、考慮されるべきプリミティブのさらなる点が残っているものと決定され、処理２８１２にて、検出点は左へ移動する。判別２８１０にて、最も左側の検出点が双方とも実際にプリミティブの境界の外側にあると結論された場合、左方には、考慮されるべきプリミティブのさらなる点はもはや存在しないと決定される。次に、判別２８１４では、処理２８０２に由来するスナップ位置があるかどうかが決定される。
【０２０７】
判別２８１４にて、スナップ位置が存在しないと判別された場合、処理が完了する。一方、スナップ位置が存在する場合、処理２８１６にて、検出点はスナップ位置へと移動する。その後、処理２８０４〜２８１２と同様の処理が実行されて、プリミティブの右側がマッピングされる。これは、直線の式が凸領域における点で評価されることにより、処理２８１８で開始する。
【０２０８】
それらの点にて直線の式が評価された後、判別２８２０にて、検出点の現在位置がジャンプ位置を占めるかどうかが決定される。判別２８０６にて、ジャンプ位置が検出されたと決定された場合、処理２８２２でこのジャンプ位置が算出されて格納される。一方、そうでなければ、処理２８２２はスキップされる。
【０２０９】
引き続き図２８を参照すると、次に判別２８２４にて、最も右側の検出点は、双方ともプリミティブの外側にあるかどうかが決定される。最も右側の検出点の双方ともがプリミティブの外側にあるわけではない場合、右方に、考慮されるべきプリミティブのさらなる点が残っているものと判断され、処理２８２６にて、検出点は右へ移動する。判別２８２４にて、最も右側の検出点が双方ともプリミティブの境界の外側にあると決定された場合、右方には、考慮されるべきプリミティブのさらなる点はもはや存在しないと判断され、即時の処理が完了する。
【０２１０】
図２８Ａ及び図２８Ｂは、プリミティブ２８５０について本発明の検出点が移動しうるシーケンスの説明図である。なお、様々な変更例として、それらの点が左方へ移動可能かどうかを判別２８００にて決定して、最初に右へ進むことが含まれていてもよい。さらに、直線の式は、それらの点がプリミティブの内部又は外部のいずれにあるかを所望の方法で示すために、定義されてもよい。
【０２１１】
繰り返しのループに進むことを防ぐために、本発明は、ラスタ化の際に全方向へ移動することとしている。最初の実装は、上から下へと進み、次へと下降する前に横列上の全ての凸領域へ進む。横列を上から下へと処理することで、右から左又は左から右へとステップしないようにすることにより、ループ化が防止される。
【０２１２】
上述の処理の例が、図２７Ａのポリゴン定義点Ｐ１，Ｐ２，Ｐ３，Ｐ４を参照して示されうる。処理の際、近接した検出点の対が調べられて、それらの方向へ進むことに意味があるかどうかが決定されてもよい。例えば、図２７ＡにてＰ３及びＰ４の双方がポリゴンの境界の外側にある一方で、Ｐ１及び／又はＰ２がそうでなければ、明白に描画可能な内部領域は、右にではなく左にある。従って、検出点は、右へは移動すべきでない。逆に、Ｐ３及びＰ４の双方が全境界の内側にあれば、描画可能な領域はＰ３及びＰ４を越えて存在し、右方へ移動することは適切である。実際に、Ｐ３及びＰ４が境界の外側になければ、右側へ移動することには意味がある。同じ論理が、Ｐ１及びＰ３により案内される上方への移動に、あるいは、Ｐ１及びＰ２により案内される左方への移動に、あるいは、Ｐ２及びＰ４に基づく下方への移動にも当てはまる。
【０２１３】
このように、上述の処理は、プリミティブ内部周辺における点により定義される凸領域を、検出点に案内されて移動又は移行する。それらの点により定義される凸領域は広くともよいので、多くの画素が同時に調べられる。使用の際、全検出点がプリミティブの全ての境界の内部にあれば、囲まれたがそのすべてが、必ず描画可能となる（凸のプリミティブを想定）。隅を検査することにより、すなわち、プリミティブの任意の領域を検査する能力が、内部か外部にあるか分割されていることにより、著しい利点がもたらされる。後者の場合にのみ、それらの点により定義される凸領域内の個々の画素が調べられる必要がある。このような場合、それらの点により定義される凸領域内の画素は、１つずつ検査されてもよく、該画素がプリミティブ内に存在するかどうか決定するための他の方法により検査されてもよい。さらに、どの境界が領域を分割してどれがそうでないのかを判別するのに必要なさらなる検査の量が検出点によって減少しうる。
【０２１４】
図２９は、図２７の横列処理動作２７０６に関連した本発明の交互になされる犂耕（ｂｏｕｓｔｒｏｐｈｅｄｏｎｉｃ）処理を示すフローチャートである。図示の如く、最初に判別２９００にて、以前の移動が第１の方向と第２の方向のいずれであったかが決定される。実際の以前の移動がなかったならば、デフォルトとして、以前の移動が想定されてもよい。判別２９００にて以前の移動が第２の方向であったと決定された場合、直線の式は、凸領域の点、例えば、図２８の処理２８０４と同様の方式による処理２９０２における長方形にて評価される。
【０２１５】
引き続き図２９を参照すると、次に、判別２９０４にて、長方形の第１の側の検出点が、双方ともプリミティブの境界の外側にあるかどうかについて決定がなされる。そうでない場合には、検査点は、処理２９０６にて第１の方向へ移動又は進む。長方形の第１の側の検出点が、双方ともプリミティブの境界の外側にあると決定されると、次に、判別２９０５にて、それらの点が下方へ移動可能かどうか、すなわち、現在の位置がジャンプ位置を占めるかどうかが決定される。そうであれば、処理２９０８にて、ジャンプ位置が算出されて格納される。その後、処理は完了する。
【０２１６】
一方、判別２９００にて、以前の処理が第１の方向であったと決定された場合、処理２９０２〜２９０８と同様の処理が実行される。特に、処理２９１０にて、凸領域（例えば長方形）の点での直線の式が評価される。そして、判別２９１２にて、長方形の第２の側の検出点が、双方ともプリミティブの境界の外側にあるかどうかについて決定される。そうでない場合には、検査点は、処理２９１４にて第２の方向へ移動又は進む。長方形の第２の側の検出点が、双方ともプリミティブの境界の外側にあると決定されると、次に、判別２９１３にて、それらの点が下方へ移動可能かどうか、すなわち、現在の位置がジャンプ位置を占めるかどうかが決定される。そうであれば、処理２９１６にて、ジャンプ位置が算出されて格納される。その後、処理は完了する。
【０２１７】
図２９Ａは、図２９の犂耕処理に関連して本発明の検出点がプリミティブで移動するシーケンスの説明図である。上述の犂耕的ラスタ化には、ハードウェアによりよい性能をもたらす所定の規定に従うシーケンスが含まれている。図示の如く、犂耕的ラスタ化により、往復して折り返される蛇行したパターンがもたらされる。例えば、水平犂耕シーケンスにより、１つの横列上の左から右へのプリミティブの三角形内の全画素が生成され、次の列の横列上の右から左というように生成されてゆく。このような折り返し経路により、確実に、ある生成された画素から直近に生成された画素への平均距離が比較的短くなる。
【０２１８】
直近に生成された画素の近傍の画素を生成することは、直近の画素群及び／又はそれらに対応するテクスチャ値が限られた大きさのメモリ内に保持されている場合に、重要である。犂耕シーケンスにより、このようなメモリに既にロードされている画素又はテクスチャ値がより高頻度で検出されるので、メモリのロードがあまり発生しない。
【０２１９】
オプションとして、ラスタ化に先立ってプリミティブを複数の部分に分割する少なくとも１つの境界が用いられてもよい。処理の際、それらの点は、各部分内で個別に移動してもよい。さらに、それらの点は、複数の部分の第２のものの中で移動する前に、複数の部分の第１のものの全体を移動してもよい。
【０２２０】
図３０は、境界を用いて交互になされる犂耕処理を示すフローチャートである。オプションとして、境界を用いるかどうかの判別は、プリミティブの大きさに基づいてなされてもよい。図３０に示すように、境界を取り扱う犂耕処理は、追加の処理３０００以外は図２７のそれと同様である。この処理３０００では、プリミティブを複数の部分又は帯に分割する少なくとも１つの境界が、定義される。
【０２２１】
引き続き図３０を参照すると、追加の判別３００１は、プリミティブの全部分の完了後になされる。特に、判別３００１では、近接した部分の開始位置が処理３００６で検出されたかどうかが決定される。そうであれば、検出点により定義された凸領域は、処理３００２にて、プリミティブの近接した部分の開始位置へ移動し、プリミティブの新規の部分について、処理３００４〜３０１０が繰り返される。以下、処理３００６での開始位置を決定することに関係するさらなる情報を図３１を参照して詳細に説明する。
【０２２２】
図３１Ａは、図３０における境界に基づく犂耕処理に応じて本発明の凸領域がプリミティブにて移動する処理を示す説明図である。図示の如く、処理される第１の部分は、プリミティブの最上部の頂点を含むものである。処理の際、左隣の部分が処理され、その後、近接した左隣の部分が処理されてゆき、左隣の部分がなくなるまで継続する。次に、第１の部分の右に隣接する部分が処理され、その後、近接した右隣の部分に近接するものが処理されてゆく。これは、右に隣接する部分の全てが処理されるまで継続する。なお、ユーザの要望に応じて、その他の種類の順序付け方式が用いられてもよい。
【０２２３】
図３１は、図３０の横列処理３００６に対応した処理を示すフローチャートである。このような処理は、判別３１１８乃至３１２１以外は、図２９の犂耕処理と同様である。判別３１１８及び３１２０の双方は、検出点のうち、いずれかの境界を通ったものがあるかどうかを決定するものである。検出点がまだ境界内にあると決定された場合にのみ、各ループが継続する。
【０２２４】
処理３１１９及び３１２１では、凸領域の検出点のうち、いずれかの境界を通ったものがあると、判別３１１８及び３１２０でそれぞれ決定された場合に、プリミティブの近接した部分の開始位置が求められて格納される。図３１Ａに示すように、このような開始位置３１２６の各々は、境界を越えて存在するプリミティブの部分における最上部の点となるように定義される。この位置を格納することにより、プリミティブの境界定義部分に近接したものに関して処理が繰り返された場合に、開始位置が得られる。
【０２２５】
なお、処理３１１９及び３１２１は、プリミティブの第１の部分が処理されている際に、双方とも実行される。図３１には特に示されていないが、これらの部分を第１の部分の左へと処理する場合、このような処理の第１のもののみが実行される。一方、これらの部分を第１の部分の右へと処理する場合、このような処理の第２のもののみが実行される。すなわち、第１の部分の左へと処理する場合、開始位置は、現在処理中の部分の最も左の境界を越えた場合にのみ算出される。同様に、第１の部分の右へと処理する場合、開始位置は、現在処理中の部分の最も右の境界を越えた場合にのみ算出される。
【０２２６】
ラスタ化の際に境界を用いることにより、パイプライン処理の際に重要な問題が解決される。プリミティブが非常に幅広いと、１つの横列における画素に関連した記憶域が、限られた大きさのメモリに適合しないことがある。境界を用いたラスタ化により、三角形が、限られた幅の横列（又は縦列）に分割され、次の部分へ移行する前に、このような部分内の全画素を生成する。
【０２２７】
例えば、三角形は幅が１００画素であるのに、限られた画素又はテクスチャメモリは、以前の２０画素の情報を保持するだけであってもよい。画素のシーケンスを、１０画素の垂直部分内に抑えることにより、以前及び現在の横列上の全画素をメモリに適合させることが可能である。このことは、境界定義部分内の犂耕シーケンスが、常に、現在の横列上の以前の画素（もしあれば）をメモリ内に有するとともに、その上の横列の画素（もしあれば）をメモリ内に有することを意味している。
【０２２８】
最も基本的なメモリシステムは、データブロックを、各ブロック当たり所定のオーバーヘッドで転送する。メモリシステムへのアクセスが小規模であると、このオーバーヘッドにより重大な影響を受ける。効率化のために、より大規模なアクセスが用いられ、ブロックの残りが次なる使用に備えて保持される。それ以上に、キャッシュメモリシステムは、これら複数の新しいブロックを保持して、メモリアクセスを回避可能とする確率を高める。
【０２２９】
本発明の犂耕シーケンスは、現在のラインの一端の直下にある画素を反転させたり取り扱ったりする場合に、単一保持ブロック（ｓｉｎｇｌｅ−ｒｅｔａｉｎｅｄ−ｂｌｏｃｋ）コンセプトを利用している。さらに、犂耕シーケンスは、特定の大きさの部分にラスタ化を制限する場合に、キャッシュを利用している。特に、ある部分内の２本の走査線が、キャッシュに適合するはずなので、第１の走査線のキャッシュ記憶により、第２の走査線の全体に亘って利益がもたらされる。
【０２３０】
境界定義部分のシーケンス又は数について、制約は何もない。本説明は、垂直部分及び水平犂耕パターンの例を用いているが、同様の原理が、水平部分、垂直犂耕パターンに拡張されてもよく、斜行部分及びパターンにまで拡張されてもよい。一実施形態では、ストリング（例えば、横列、縦列、斜め等）の長さは、その各々が、当該ストリングが存在しているプリミティブの大きさ未満に制限されていてもよい。
【０２３１】
図３２は、図２７の処理２７０２に対応した処理を示すフローチャートである。この即時の処理は、眼の背後にあるプリミティブを取り扱うために設計されている。これら外にある部分により、次段のラスタ化処理で問題が生じる。このことを達成するために、その即時の処理は、投影用に（すなわち物体を透視図法で見るのに）通例用いられる変数Ｗを使用している。変数Ｗは、近くの物体を大きく、遠くの物体を小さくするように、他の座標Ｘ、Ｙ及びＺが分配された数である。変数Ｗは、投影中心と対応する頂点との距離を表している。
【０２３２】
図３２に示すように、最初に、複数の頂点により定義されたプリミティブが取得される。このような頂点の各々には、Ｗ値が含まれている。プリミティブを取得すると、セットアップモジュールは、頂点に基づいて、プリミティブを特徴づける直線を定義する役割を果たす。処理３２００を参照されたい。
【０２３３】
そして、判別３２０２にてＷ値が分析される。図示の如く、１つのＷ値が負である場合、負の値の頂点とは反対側の直線の式は、処理３２０４にて反転させられる。すなわち、直線の式の係数に−１が乗ぜられる。さらに、２つのＷ値が負である場合、正のＷ値の頂点と、負のＷ値の各頂点とを結ぶ各直線の式は、処理３２０６にて反転させられる。３つのＷ値が負である場合、除外条件３２０７が発生し、ここで、本発明はその三角形を除外する。さらに、どのＷ値も負でない場合、追加の処理は何もなされない。
【０２３４】
図３２Ａ乃至図３３に、直線の式を反転させることが、画面のどの部分を処理するかに影響する様子を示す。図３２Ａに、どのＷ値も負ではなく、直線の式が変更されないままとなる場合を示す。図示の如く、プリミティブの内部は、このような場合に埋められる。
【０２３５】
図３２Ｂに、１つのＷ値が負であるため、それに応じて直線の式が反転させられる場合を示す。図示の如く、この場合には、その頂点と反対側のプリミティブの部分が埋められる。特に、描画される部分は、三角形における−Ｗの頂点を共有した２つの辺とそれぞれ同一直線上にある２本の直線が境界となり、さらに、三角形における２つの＋Ｗの頂点がある辺が境界となる。
【０２３６】
図３３に、２つのＷ値が負であるため、それに応じて直線の式が反転させられる場合を示す。図示の如く、それらの頂点の反対側のプリミティブの部分が、図２７乃至図３２を参照して上述した方法及び／又は処理を用いて埋められる。すなわち、描画される部分は、三角形における＋Ｗの頂点を共有する２つの辺と同一直線上にある２本の直線が境界となり、さらに、＋Ｗの頂点に隣接している。
【０２３７】
このように、本発明は、上記３つの場合の全てを、取り扱うことが可能である。三角形の一部が近平面及び／又は遠平面を越えている場合、それら平面内の部分のみが描画される。三角形に負のＺの頂点が１つ又は２つある場合、正しく＋Ｚとなった部分のみが描画される。
【０２３８】
全頂点が画面外であり、三角形が眼の背後から遠平面を越えて延びているとしても、三角形内部にあるとともに画面内にあってＺ値が近境界及び遠境界間となっていれば画素となる。本発明により、不良画素を探すのにほとんど時間を費やさなくなる。このことは、画面の境界又は近平面若しくは遠平面によるあらゆるクリッピングが、常に、容易に探索可能な画面上の凸領域となるために可能となる。
【０２３９】
埋められる領域の内部に開始点がない場合に、問題が生じることがある。最上部の頂点が画面外にあるか、又は、近平面若しくは遠平面によりクリッピングされた場合に、このことが起こりうる。この場合、探査段階は、描画される領域の最上部の点を、上部から開始して、探索する必要がある。これは、三角形の境界の傾き及びＺの傾きの符号に導かれることにより、効率的に実行可能である。三角形の直線の式を調べて、それが描画領域の外側にあることとその理由を見出すことができる。それを外側とするのがどの境界及び／又はＺ境界であるかがわかっている場合、どの方向へ進むとこの境界又はＺ境界に近づけるかがわかる。垂直方向よりも水平方向を優先（選択可能な場合）させて移動すると、描画領域を探索することにより、描画可能な画素の最上部のものがあればそれが検出されることが保証される。また、この問題は、開いた外部（−Ｗ）三角形においても生じる。この場合には、描画領域は、３つの頂点全ての上に延びる。
【０２４０】
本発明の一実施形態では、探査は、三角形の上端から下端へと進む。開始点は、どのＷ値も負ではなく、最上部の頂点が切り取り長方形内にある場合には、三角形の最上部の頂点である。それ以外の場合には、切り取り長方形の最上部の点が選択される。探査は、常に切り取り三角形内で始まり、そこから外れることがないので、その領域が、切り取り三角形を越えて遠くに延びた境界に囲まれていても、三角形における切り取り長方形内の部分のみが、常に描画される。このように、単純な切り取り長方形のクリッピングが行われる。
【０２４１】
次に、図１Ａのテッセレーションモジュール５１及び関連した他のコンポーネントについて説明する。テーブル１９に、テッセレーションモジュール５１から出力されてプリミティブ・アセンブリ・モジュール５５に取得されうる種々のコマンドを示す。無論、テーブル１９に示したコマンドのリストは、説明のためのみのものであり、いかなる意味においても、限定とみなされるべきではない。そうして、テッセレーションモジュール５１は、生成する頂点のストリームから三角形が（効率的に）形成される方式及び様式を制御する。
【０２４２】
【表２１】
2004514973.tif 000024
【０２４３】
実際には、図１Ａのテッセレーションモジュール５１は、無効時には、入力されたデータを単に渡し、有効時には、テッセレーティングされたデータを出力するようになっている。テッセレーションが開始すると、ＮＯ＿ＰＲＩＭコマンドが、プリミティブ・アセンブリ・モジュール５５へと送られる。このように、テッセレーションモジュール５１は、三角形を生成することなく、頂点ファイル５８を利用して、入力してきた頂点を、指示に従って、頂点ファイルの位置に一時的に格納することが可能である。処理の際、テッセレーションモジュール５１は、任意のプリミティブ、三角形、ポリゴン、その一部等を評価してもよい。出力されたデータは、三角形を形成して、ＮＯ＿ＰＲＩＭ、ＳＴＲＩＰ、ＦＡＮ、ＬＯＡＤ，及びＵＳＥコマンドをプリミティブ・アセンブリ・モジュール５５へ送ることによりテッセレーティングしてプリミティブを近似するのに用いられる。
【０２４４】
図３４に、テッセレーションモジュール５１から出力されうる一連の頂点３４００を表す例示的なデータを示す。図示の如く、三角形の２つの横列が表されている。頂点は、ｖ０…ｖ２２と順に出力される。処理の際、変換及び光源処理モジュール５２，５４から取得した頂点のストリームをどのように解釈するかを指示するテーブル１９の対応するコマンドが、プリミティブ・アセンブリ・モジュール５５へと発行されうる。
【０２４５】
例えば、ＬＯＡＤコマンドの実行を受けて、頂点の第１の横列を表すデータが、頂点ファイル５８へとロードされてもよい。次段の横列の処理の際、ＳＴＲＩＰ及びＦＡＮコマンドは、テッセレーションモジュール５１により算出された頂点から三角形を形成するのに用いられてもよく、引き続き、変換モジュール及び光源処理モジュール５２，５４により処理されてもよい。さらに、頂点ファイル５８内に格納された様々な頂点が、ＵＳＥコマンドを用いて取得されて再利用されてもよい。
【０２４６】
このように、テッセレーションモジュール５１におけるロジックにより、コマンドのストリームが生成される。なお、このコマンドのストリームは、プリミティブ・アセンブリ・モジュール５５を制御して、テッセレーションモジュール５１で生成された頂点のストリームから三角形を形成させるものである。
【０２４７】
オプションとして、ＳＴＲＩＰ及びＦＡＮコマンドに関連して、時計方向又は反時計方向の機能を指定するのに、モードビットが用いられてもよい。頂点が生成される順序のため、時計方向及び反時計方向の三角形のファン（ｆａｎ）の双方を描画することが必要である。図３４を参照されたい。個々の三角形のファンは、強調表示されており、プリミティブ・アセンブリ・モジュール５５によって三角形形成に用いられる頂点の順となる。頂点は、使用されている評価アルゴリズムの特性により、固定的な順序で生成される。一般に、プリミティブ・アセンブリ・モジュール５５が、これに関して柔軟であることが、重要である。すなわち、他のアルゴリズム（例えばテッセレーションアルゴリズム）に従った順序で、頂点を取得することが可能である。
【０２４８】
テーブル２０に、図３４のデータを生成するためにテッセレーションモジュール５１からプリミティブアセンブリモジュール５５へと出力されうる例示的なコマンドの組を示す。
【０２４９】
【表２２】
2004514973.tif 000025
【０２５０】
【表２３】
2004514973.tif 000026
【０２５１】
図示の如く、ＦＡＮコマンドは、第１の頂点を、ＬＯＡＤ及びＵＳＥコマンドにより指定された他の複数の頂点に接続する。また、ＵＳＥコマンドは、頂点が頂点ファイル５８へとＬＯＡＤコマンドを用いてロードされたときには、いつでも、実行されうる。
【０２５２】
図３５に、ロードされた頂点３５００が交互に配置されて所定サイズの頂点キャッシュを使用可能とする方式を示す。図示の如く、頂点０は、表示されたように互い違いになるまで、再ロードされない。これにより、新しく入ってきたデータに置き換えられる前に、データが確実に再使用される。変換された各頂点毎に２つの三角形が描画されることを可能とするため、このことは重要である。これは、三角形細片について通常の２倍（半分）である。変換制約的なレンダリングでは、これにより性能が著しく向上する。
【０２５３】
上記の集積化で、テッセレーションと変換とが組み合わされた集積化が、より精細なテッセレーションによる質の向上をもたらしうる。より精細なテッセレーションは、少なくとも２つのことにより可能となる。例えば、三角形がチップ上で生成されてホストからのバスを通る必要がないので、ホストからの帯域幅が少なくて済む。さらに、テッセレーションモジュール５１は、頂点を非常に効率よく使用するので、変換された頂点当たり、２つ以上の三角形が生成される。これにより、変換性能から、それ以上のものが得られるようになる。従って、上述のように、アプリケーションは、単一の半導体プラットフォームに付随した対応する機能を、標準的なインタフェースを通じて呼び出すことにより、これらの特性及び他の特性を利用可能である。
【０２５４】
図３６乃至図４１に、図１Ａのテッセレーションモジュール５１の処理の第１の代替的な実施形態を示す。ここで説明する種々の特徴は、単一の半導体プラットフォーム上に集積されたテッセレータの実装を進歩させるのに有益である。但し、以下の図面を参照して記述する特徴は、オプションであり、ユーザの希望に応じて様々であってもよい。
【０２５５】
図３６に、本発明に係る一実施形態におけるハードウェアの実装を示す。図示の如く、部分（ｆｒａｃｔｉｏｎａｌ）テッセレーションモジュール３６４９、変換モジュール３６５０、光源処理モジュール３６５２、及びラスタ化モジュール３６５６が、含まれている。処理の際、部分テッセレーションモジュール３６４９は、コンピュータグラフィクス処理の間に、レンダリングのために表面を分割する。このことを達成する具体的な方式を、以下の図面を参照して、より詳細に説明する。なお、他のコンポーネントの例示的な処理は、上述されている。
【０２５６】
図３７は、本発明の一実施形態により構成された部分テッセレーションパターンを示す図である。図示の如く、プリミティブの内部メッシュ３７００は、表面３７０１、すなわちレンダリングされるべき「パッチ」において規定されている。このような内部メッシュ３７００には、所定数の横列３７０２及び縦列３７０４を規定するように構成された複数のストリップカーブ（ｓｔｒｉｐ ｃｕｒｖｅｓ）３７０３が、含まれている。ストリップカーブ３７０３は、頂点３７０５と交差する。
【０２５７】
内部メッシュ３７００を周回しているのは、内部メッシュ３７００の辺に沿って規定された複数の周辺メッシュ３７０６である。周辺メッシュ３７０６は、内部メッシュ３７００と表面３７０１の外辺との間におけるテッセレーションの何らかの変化、又は断絶に対処する役割を果たす。周辺メッシュ３７０６に加えて、パッチの内部を横切るメッシュ３７０７がある。該メッシュ３７０７もまた、通常のメッシュ３７００の境界となる。このようなメッシュにより、内部メッシュ３７００内の横列／縦列の数を、ポッピング（ｐｏｐｐｉｎｇ）することなく、変化（増加／減少）させることができる。メッシュ３７０７は、３７００の横列／縦列の高さ／幅の分数である。
【０２５８】
一実施形態では、周辺メッシュ３７０６の内辺３７０８の各々には、内部メッシュ３７００の対応する所定数の横列又は縦列に等しい数のセグメント３７１０が含まれている。なお、セグメント３７１０は、頂点３７０５間に位置するストリップカーブ３７０３の一部として規定されている。さらに、周辺メッシュ３７０６の外辺３７１２の各々には、複数の等サイズのセグメント３７１４、及び等サイズのセグメント３７１４の一部である少なくとも１つの部分セグメント３７１６が含まれている。
【０２５９】
この構成にて、前進差分等の漸増的評価技術に対応させつつ、三角形の数をフレームからフレームへと連続して変化させることが可能な三角形のパターンが用いられている。その方式により、既存の頂点に新規の頂点を導入（除去）可能となるので、ポッピングが回避される。さらに、独立したテッセレーション要素により、アプリケーションのクラッキング（ｃｒａｃｋｉｎｇ）が回避される。テッセレーションのパターンが対称なので、等しいテッセレーション要素が指定されても、ギャップが発生しない。
【０２６０】
上記説明は、４つの周辺メッシュ３７０６を伴う１つの内部メッシュ３７００に注目してなされた。本発明の他の態様では、内部メッシュ３７００及び周辺メッシュ３７０６は、表面３７０１におけるサイズ及び形状が等しい複数の部分３７１８の１つを規定してもよい。また、各部分３７１８の部分セグメント３７１６が、表面３７０１の辺の中点３７２０近傍に配置されてもよい。オプションとして、周辺メッシュ２０６の幅３７２２は、内部メッシュ３７００の横列又は縦列の幅３７２４に等しくともよい。図３７を参照されたい。
【０２６１】
図３８は、図３７で述べた部分テッセレーションの生成に関連した種々の処理を示すフローチャートである。最初に、処理３８００にて、仕様が取得される。このような仕様は、アプリケーション・プログラム・インタフェースにより提供されてもよく、表面３７０１の辺に沿ったセグメント３７１０の特定の数を、含んでいてもよい。また、内部メッシュ３７００に含まれるべき横列及び縦列の数が含まれている。
【０２６２】
次に、処理３８０２では、表面が４つの象限に分割される。図３８Ａに、図３８の処理３８０２に関連した象限に分割される前の表面を示す。図示の如く、表面３７０１の各辺はＡ、Ｂ、Ｃ、及びＤとして定義され、表面３７０１の垂直及び水平方向の寸法はＥ及びＦと、それぞれ定義されている。図３８Ｂに、図３８の処理３８０２に関連した象限に分割された後の表面３７０１を示す。なお、表面３７０１は、パラメータとなる中点で分割されて、象限０、１、２、及び３が生成される。
【０２６３】
引き続き図３８を参照すると、処理３８０２で定義された象限は、次に処理３８０４にて付標される。図３８Ｃに、図３８の処理３８０４に関連した象限への付標を示す。図示の如く、象限０には、図３８Ａで上述した表面３７０１の対応する辺／寸法に関する長さに対応したＡ／２、Ｆ／２、Ｄ／２及びＥ／２として示された辺が含まれる。同様に、象限３には、Ｅ／２、Ｆ／２、Ｄ／２、及びＣ／２として示された辺が含まれる。象限１及び２は、同様に付標されてもよい。なお、レンダリングの方向は、必要に応じてこの時点で定義されてもよい。特に、テッセレーション及びレンダリングは、各辺に沿って表面３７０１の辺の中点に向かう方向（外辺Ａ、Ｂ、Ｃ、Ｄについて）になされるか、又は表面３７０１の中心へ向かう（内辺Ｅ、Ｆについて）ように指定される。図３８Ｃにおける矢印の方向を参照されたい。
【０２６４】
次に、図３８の処理３８０６では、テッセレーションのパターンが、入力指定及び処理３８０４の付標に基づいて定義される。特に、内部メッシュ３７００の頂点配置は、単に、処理３８００で取得した入力指定により示された横列及び縦列の数により均一に定義される。さらに、各象限の辺におけるテッセレーションパターンは、等サイズのセグメント３７１４の数、及び部分セグメント３７１６の長さを求めることにより定義される。
【０２６５】
図３８Ｂ及び図３８Ｃにおける象限０の場合、等サイズのセグメント３７１４の数は、各辺の整数成分を算出することにより求められる。例えば、辺Ａの場合、そこに対応したセグメントの数は、Ｉｎｔ（Ａ）である。さらに、部分セグメント３７１４の長さは、各辺の分数成分、Ｆｒａｃ（Ａ）＝Ａ−Ｉｎｔ（Ａ）、を算出することにより求められる。同様の計算が、各象限の各辺についてなされてもよい。また、このような値は、以下に述べる式＃１を用いて検証されてもよい。
【０２６６】
式＃１
Ｉｎｔ（Ａ）＊１／Ａ＋［Ｆｒａｃ（Ａ）］／Ａ＝１
図３８Ｄに、レンダリングの指定された方向に対応した象限の各辺に沿って、頂点３７０５及びセグメント３７１４，３７１６が配置される方式を示す。図示の如く、部分セグメント３７１６は、レンダリングの終点近傍に配置される。
【０２６７】
図３８の処理３８０８にて、内部メッシュ３７００の頂点３７０５及びセグメント３７１４，３７１６、並びに定義された象限の辺で、頂点がステッチ（ｓｔｉｔｃｈｅｄ）される。これは、内部メッシュ３７００の辺における終端の頂点で開始することにより実行される。ここで、終端の頂点は、部分セグメント３７１６の反対側に位置する。そして、表面３７０１における内部メッシュ及び外辺の頂点が、連結又はジグザグに「ステッチ」される。
【０２６８】
図３８Ｅ、図３８Ｆ、及び図３８Ｇに、周辺メッシュ３７０６の外辺が、内部メッシュ３７００における対応する所定の横列又は縦列の数に対して、より多い、より少ない、又は等しい数のセグメント３７１４，３７１６をそれぞれ有する状況でのステッチパターンを示す。図３８Ｅ及び３８Ｆに示すように、頂点がなくなると、最後の頂点３８５０が、残りの頂点のいずれかと、「扇を広げた」パターン３８５１に接続される。図３８Ｇに示すように、このような扇を広げたパターンは、周辺メッシュ３７０６が、内部メッシュ３７００における対応する所定の横列又は縦列の数と等しい数のセグメント３７１４，３７１６を有する状況では、必ずしも必要ではない
図３９に、内部メッシュ３７００及び周辺メッシュ３７０６間に遷移メッシュ（ｔｒａｎｓｉｔｉｏｎ ｍｅｓｈ）３９００を含む代替的な構成を示す。図示の如く、内部メッシュ３７００には、該内部メッシュ３７００の辺に沿って位置する遷移メッシュ３９００が含まれていてもよい。オプションとして、このような遷移メッシュ３９００は、その寸法が内部メッシュ３７００とは異なっていてもよい。例えば、遷移メッシュ３９００のブロック３９０２は、内部メッシュ３７００により規定されたブロック３９０４よりも大きくとも少なくともよい。
【０２６９】
さらに、周辺メッシュ３７０６の各外辺には、等サイズのセグメントの一部である部分セグメント３９０６が、２つ以上（偶数が好ましい）含まれていてもよい。前の実施形態とは異なり、部分セグメントは、周辺メッシュ３７０６の外辺の両端に配置されていてもよい。このように、上述の図３７の実施形態が複数の内部メッシュ３７００であるのに対して、本実施形態では、単一の内部メッシュ３７００がもたらされる。そして、どのような不一致も、遷移メッシュ３９００により処理される。
【０２７０】
図４０に、本発明に係る一実施形態により三角形状のパッチ４０００を分割するのに用いられる部分テッセレーションパターン化方式を示す。図示の如く、三角形状のパッチ４０００は、図３７の矩形パッチの細分化と同様に、複数のパッチへと細分化されてもよい。
【０２７１】
なお、本発明は、偶数及び奇数パリティに実装されてもよい。偶数及び奇数パリティにより、常に、外辺上に偶数のセグメントか、又は奇数のセグメントがあることを意味する。偶数の場合、厳密に横列及び縦列であるにもかかわらず、内部メッシュの横列及び縦列の数は分数である。奇数パリティの場合、内部に矩形メッシュがあり、これもまた分数である。偶数パリティの場合、分数の横列／縦列は中心を通る。奇数の場合、分数の横列は、正規のメッシュの周辺となる。
【０２７２】
図４１に、テンソル積へと変換される必要がない三角形状のパッチ用のテッセレーション方式４１００を示す。なお、偶数パリティ方式ではテンソル積が必要となり、奇数パリティ方式では三角形状のパッチが用いられる。
【０２７３】
図４２乃至図５０に、図１Ａのテッセレーションモジュール５１の処理の代替的な実施形態を示す。以下に述べる種々の特徴は、単一の半導体プラットフォーム上での集積化テッセレータの実装を進歩させるのに有益である。但し、以下の図面を参照して記述する特徴は、オプションであり、ユーザの希望に応じて様々である。
【０２７４】
図４２は、本発明に係るハードウェア実装例の概略を示す図である。図示の如く、パッチをテッセレーティングする前進差分エンジン（ｆｏｒｗａｒｄ ｄｉｆｆｅｒｅｎｃｉｎｇ ｅｎｇｉｎｅ）４２００が、プリミティブを定義するために含まれている。変換及び光源処理モジュール４２０１が、前進差分エンジン４２００に接続している。なお、変換及び光源処理モジュール４２０１の処理例は上述されている。
【０２７５】
変換及び光源処理モジュール４２０１により処理されたプリミティブの頂点を格納するための頂点メモリ４２０２は、変換及び光源処理モジュール４２０１に接続している。当業者に周知のように、頂点メモリ４２０２は、処理を加速するために、算出又は変換された頂点を再使用可能とする。ラスタライザ（図示せず）を用いたレンダリングに備えてプリミティブを集めるプリミティブ・アセンブリ・ユニット４２０３が、頂点メモリ４２０２に接続している。
【０２７６】
図４２Ａは、図４２の前進差分エンジン４２００の実装を示す図である。図示の如く、前進差分エンジン４２００には、マルチプレクサ４２０８の第１の組を通じて複数のメモリバンク４２０６へデータを送る入力部４２０５が含まれている。メモリバンク４２０６は、マルチプレクサ４２１１の第２の組を通じて、複数の加算器４２１０に接続している。フィードバックループ４２１４を通じて供給される複数の加数４２１２は、加算器４２１０に接続している。なお、オプションで、クロス乗積モジュール４２１６が、マルチプレクサ４２１１の第２の組と出力マルチプレクサ４２１８との間に、図４２に示すように接続されてもよい。
【０２７７】
保護曲線（ｇｕａｒｄ ｃｕｒｖｅｓ）を前進差分手順に統合するために、開始及び終了保護曲線メモリバンク４２２０が、入力部４２０５と第２の組のマルチプレクサ４２１１との間に接続されている。この構造により、前進差分エンジン４２００は、４つのポリゴンを並行処理可能である。なお、各頂点要素について多項式があり、並列の加算器が４つを同時に評価しているとともにアクティブな多項式が実際にいくつもあってもよい。通常は、並行して評価される４つの多項式は、ｘ、ｙ、ｚ及びｗの位置の要素、又はｓ、ｔ、ｒ及びｑのテクスチャ要素に対応する。
【０２７８】
処理の際、前進差分エンジン４２００は、各クロック毎に、４つの浮動小数点加算を開始して、その結果を加数４２１２の１つに格納する。次のレベルの処理は、多項式的に多様となりうる頂点の評価である。使用の際、メモリバンク４２０６には、多様な頂点要素の各々に対応した前進差分係数が含まれる。一実施形態では、メモリバンク４２０６の構成をプログラムすること、頂点を評価する厳密な方法を求めること、各頂点要素の宛先を指定すること、及び出力頂点（図示せず）内の各頂点要素の最終的な位置を求めるために、６４ビットレジスタ（図示せず）が用いられてもよい。
【０２７９】
図４２Ｂは、代替的な前進差分エンジン４２５０を示す図である。この前進差分エンジン４２５０は、独立した保護曲線メモリバンク４２２０を利用する代わりに、メモリバンク４２０６を強化している。なお、メモリアクセスの裁定と、より多くのメモリを利用することとの兼ね合いに基づいて、図４２及び図４２Ａで述べた位置に、どのような種類のハードウェアの実装が用いられてもよい。可能な変更例として、図４２Ｂのクロス乗積モジュールを除去することが挙げられる。
【０２８０】
図４２Ａ及び図４２Ｂの前進差分エンジン４２００，４２５０は、処理の際に法線及び位置の値を算出するようになっている。種々の代替的な実施形態では、他の頂点要素の値、すなわち、色、テクスチャ等が、本発明により処理されてもよい。法線の値は、前進差分エンジン４２００で算出され、変換及び光源処理モジュール４２０１で正規化される。法線の値は、表面パッチのパラメータの偏導関数を評価して、そのクロス乗積を計算することにより算出される。頂点及び法線計算の例示的な擬似コードを、以下のテーブル２１に示す。なお、種々の代替的な実施形態にて、必ずしも偏導関数が評価される必要はない。
【０２８１】
【表２４】
2004514973.tif 000027
【０２８２】
図４３に、本発明に係る一実施形態により表面パッチを分割する際の保護曲線及び逆曲線の利用について示す。図示の如く、保護曲線４３００は、従来技術に伴う問題を解決するために、ストリップカーブ４３０２間に導入される。なお、本発明の保護曲線４３００は、従来技術に伴う問題を解決するために特に挿入されていること以外は、ストリップカーブ４３０２と同様である。一実施形態では、他の頂点要素での差異が、概して許容され、及び／又は、あまり拒絶されるべきものでないため、保護曲線４３００は、位置を算出するためにのみ用いられる。
【０２８３】
図４３に示すように、左側のパッチの右端に沿った保護曲線４３００は、右側のパッチの左端に沿ったストリップカーブ４３０２と同一である。ストリップがテッセレーティングされると、そのストリップの最初と最後の頂点位置は、保護曲線４３００から算出された値で上書きされるので、近接したテッセレーションが確実に一致することになる。
【０２８４】
図４４は、方法４４００を示すフローチャートである。この方法４４００では、図４３の保護曲線４３００は、図４３及び図４３Ａの例示的なハードウェアを用いて生成される。最初に、処理４４０２にて、パッチが取得される。その後、そのパッチに対応した複数のストリップカーブ４３０２が、第１の所定方向に定義される。処理４４０４を参照されたい。これらのストリップカーブ４３０２を用いて、該ストリップカーブにより規定された領域が、レンダリングのために複数のプリミティブへと分割されてもよい。
【０２８５】
次に、パッチに対応した少なくとも１つの保護曲線４３００が、処理４４０６で生成される。保護曲線４３００は、ストリップカーブ４３０２の端部に沿って、パラメータ空間において第１の所定方向に対して垂直である第２の所定方向に配置される。図４３を参照して上述したように、湾曲した表面を三角形へとテッセレーティングする場合に、このような保護曲線４３００が頂点の不整合を防止する。図４３に示すように、ある使用例では、２つの保護曲線４３００が、各パッチに対して一貫して用いられてもよい。
【０２８６】
図４５に、保護曲線とともに用いられる逆ステッチ（ｒｅｖｅｒｓｅ ｓｔｉｔｃｈｉｎｇ）法を示す。図５で述べた保護曲線法の際に、逆ストリップカーブ４５１０が、第１の所定方向に対して平行で向きが逆の第３の所定方向に、生成されてもよい。これは、近接した表面パッチの保護曲線又はストリップカーブの方向を、一致させるためになされる。図４３の右側のパッチの左端を参照されたい。これを実行すると、第１の所定方向内のストリップカーブ及び逆ストリップカーブ４５１０により規定される領域が、逆ステッチ法を用いて分割されうる。
【０２８７】
図４５に示すように、逆ストリップカーブ４５１０は、ストリップカーブに対して垂直でない点において、図４３の保護曲線とは異なっている。保護曲線が、ストリップカーブにより既に算出された値を上書きするのに対し、逆ストリップカーブは、全ての値／頂点要素を直接算出するので、上書きは必要とならない。
【０２８８】
図４５に示すように、表面パッチ４５０２の各ストリップカーブ４５００は、オプションで、複数のセグメント４５０４へと分割されてもよい。なお、セグメント４５０４のサイズは、グラフィクス・パイプライン・システムの頂点メモリ４２０２のサイズに基づいて、決められてもよい。例えば、頂点メモリ４２０２が、２０個の頂点を処理可能であり、ストリップカーブ４５００が、２０個のセグメント４５０４へと分割されるということもある。さらに、セグメント４５０４は、任意の部分セグメント４５０４が、対応する評価方向の終点４５０８の近傍に位置するように、ストリップカーブ４５００の対応する評価方向の開始点４５０６で始まる。保護曲線４５１０についても、同様の処理が実行される。
【０２８９】
最適のテッセレーションがなされるように、逆ストリップカーブ４５１０に近接したストリップカーブ４５００の頂点は、逆ストリップカーブ４５１０におけるものとは異なるように、頂点メモリ４２０２へとロードされる。特に、各ストリップカーブ４５００に関連する頂点は、その各々が、第１の所定の順序４５２０でロードされる。一方、逆ストリップカーブ４５１０に関連した頂点は、その各々が、第２の所定の順序４５２２でロードされる。なお、位置及び法線の値は、変換及び光源処理の前に、ストリップカーブ４５００に併合され、単一の位置のみが変換される。
【０２９０】
図４６に、保護曲線の長さ及び該保護曲線同士の間隔が頂点メモリ４２０２のサイズに基づいて設定される方式を示す。図示の如く、複数の保護曲線４６００が生成され、該保護曲線４６００同士の間隔４６０２は、プリミティブの頂点がロードされる頂点メモリ４２０２のサイズに基づいて決定される。特に、保護曲線４６００同士の間隔４６０２は、ストリップカーブ４６０３の各頂点が頂点メモリ４２０２に適合するように設定される。要するに、ストリップカーブ４６０３は、頂点メモリ４２０２のサイズに合わせるために、保護曲線４６００により分割される。
【０２９１】
さらに、保護曲線４６００の長さ４６０６は、プリミティブの頂点がロードされる頂点メモリ４２０２のサイズに基づいて、決められる。特に、保護曲線４６００の長さ４６０４は、保護曲線４６００の各頂点が頂点メモリ４２０２に適合するように設定される。このように、保護曲線４６００は、表面パッチの辺に、同一直線上にある複数の保護曲線４６００が含まれるように、ストリップカーブ４６０３と同様に処理される。
【０２９２】
このように、図４６で述べた技術は、頂点メモリ４２０２に納まるよりも多くの頂点が横列にあるという状況に適合するように、複数の「帯（ｓｗａｔｈｓ）」４６０６を規定する。図４６では、パッチは、４つの帯４６０６とみなされる。ストリップカーブ４６０３の係数が、ホストにより算出されて、前進差分エンジン４６００により評価される。ストリップカーブ４６０３の先頭での値は、前進差分エンジン４６００内の反復の結果として算出される。あるものから次のものへの曲線定義の反復結果と同様に、ストリップカーブ４６０３の末端での値は、ホストにより算出される。
【０２９３】
この結果、ストリップカーブ４６０３の頭部での値は、次のストリップカーブ４６０３の末端における論理的に等価なものと等しくなるわけではない。また、ホストは、保護曲線４６００を供給して、ストリップカーブ４６０３の始まりと終りに沿って評価を行う。また、保護曲線はストリップカーブに対応可能なので、保護曲線は、ストリップカーブが生成するのと同じ個数の頂点のみを生成しうる。この制約により、帯４６０６が複数の帯片４６１０へと分割される結果となる。
【０２９４】
図４７乃至図５０に、三角形状のパッチが本発明に係る一実施形態により処理される方式を示す。図４７及び図４８に示すように、レンダリングされるべき三角形状のパッチ４８００は、内部領域４８０４の周囲に規定された遷移領域４８０２を有していてもよい。なお、このような遷移領域４８０２は、上述の矩形パッチと同様に処理されてもよい。
【０２９５】
図４９に、保護曲線４９００が内部領域４８０４内部及びその周辺に構成される方式を示す。図示の如く、１つの帯における第１の帯片（ｓｗａｔｃｈ）は、三角形状であり、他のものは通常のものである。三角形状の帯片４９０２にあたると、内部カウンタＬはストリップの長さに保たれる。最初に、このようなカウンタＬは、“０”に初期化される。その後、所定数の点（Ｌ）が、細片に沿って評価される。そして、最後の下部右側をスキップして、所定数の三角形（２＊Ｌ−１）が描画される。末端の保護曲線が、点Ｌのために用いられる。残りの保護曲線は、各ストリップの所定間隔（Ｌ）後に、インクリメントされる。図５０に、本実施形態による処理完了後の三角形状のパッチ４８００を示す。
【０２９６】
このように、本発明では、浮動小数点演算を同じオーダーで実行することにより、パッチにおける一貫した境界の探査方向が用いられる。これは、結果として、ピクセルの欠落及びレンダリングのアーティファクト（ａｒｔｉｆａｃｔｓ）を防ぐことになる。隣接した２つのパッチに共有された境界上の点に対して、同一の値が生成されることを保証するために、一貫性が必要とされる。一貫性が必要とされることにより、追加のコマンド／プリミティブ、及び、それ以外では必要でないパッチ内の遷移領域を導入することが要請され、「逆の」境界があるパッチにより、遷移が必要となる。境界の探査方向は、境界の定義自体により決定される必要がある。
【０２９７】
このように本発明により、複数の浮動小数点計算が、確実に同一のプロセッサ上でなされるようになる。例えば、Ｉｎｔｅｌ（登録商標）ＰｅｎｔｉｕｍＩＩＩ（登録商標）は、必ずしも、本発明の浮動小数点加算器により算出されたものと同一の結果を算出するわけではない。一実施形態では、ホストが、前進差分曲線係数を算出してもよく、ＡＳＩＣが、曲線を評価してステッチしてもよい。このように、ＡＳＩＣが、いくらかの（但し僅かに）パッチの表記を有していてもよい。なお、計算は、ユーザの希望に応じて、アプリケーション専用又はソフトウェア管理されるハードウェア上で実行されてもよい。
【０２９８】
図５１乃至図５３に、図１Ａのテッセレーションモジュール５１の処理の第３の代替的な実施形態を示す。以下に述べる種々の特徴は、単一の半導体プラットフォーム上での統合されたテッセレータの実装を進歩させるのに有益である。なお、以下の図面を参照した特徴はオプションであり、ユーザの希望に応じて様々であってもよい。
【０２９９】
図５１は、本発明に係るハードウェア構成５１００の一例を示す図である。図示の如く、ハードウェア５１００には、パッチ変換モジュール５１０２、四角形パッチテッセレータ５１０３、変換／光源処理エンジン５１０４、及び三角形ラスタライザ５１０６が含まれている。当該技術で周知のように、四角形パッチテッセレータ５１０３は、パッチを複数の三角形へと変換する。なお、四角形パッチテッセレータ５１０３は、特に、四角形状のパッチ、すなわちテンソル積を処理するように構成されている。また、変換／光源処理エンジン５１０４及びレンダリグエンジン５１０６の処理例は上述されている。
【０３００】
引き続き図５１を参照すると、パッチ変換モジュール５１０２が、四角形パッチテッセレータ５１０３に接続している。処理の際、パッチ変換モジュール５１０２は、三角形状のパッチを、四角形状のパッチをレンダリングするのに適合したグラフィクス・パイプラインを用いてレンダリングされるのに適した形状へと、変換するようになっている。特に、パッチ変換モジュール５１０２は、三角形状のパッチを、四角形パッチテッセレータ３０３が処理するようになった複数の四角形状のパッチへと変換する。
【０３０１】
三角形状のパッチを変換すること、又はパラメータ表示し直すことは、元のパッチの幾何学的特性の全てが保存されるようになされる。さらに、パラメータ表示しなおすことで、ある種の従来技術で必要となる扱いにくい特異点がなくなる。また、三角形状のパッチは、様々な次数の多項式を用いて特徴づけられる。一実施形態では、パッチの次数は、変換により変化しなくともよい。すなわち、次数が増えなくともよい。例として、パラメータ表示し直すことは、以下のように特徴づけられうる。三角形状のパッチが与えられると、Ｔ（ｕ，ｖ）、変数ｕ及びｖは、以下の表現を用いて置き換えられる。
【０３０２】
ｕ＝ｓ／２−ｓｔ／６　ｖ＝ｔ／２−ｓｔ／６．　なお、パラメータ値の対（０，０），（０，１），（１，０），（１，１）が、ｓ及びｔに代入されると、得られるｕ及びｖのパラメータの値の組は、（０，０），（０，１／２），（１／２，０），（１／３，１／３）となる。
【０３０３】
図５２は、図５１のパッチ変換モジュール５１０２が三角形状のパッチを変換する方法５２００を示すフローチャートである。図示の如く、最初に、三角形状のパッチが処理５２０２にて取得される。次に、処理５２０４では、取得された三角形状のパッチが、複数の四角形状のパッチへと変換される。このような四角形状のパッチは、四角形状のパッチをレンダリングするために特に設けられたグラフィクス・パイプラインにより処理されるのに適している。そうして、四角形パッチテッセレータ５１０３は、処理５２０６にて四角形パッチをテッセレーティングしてもよい。
【０３０４】
図５３に、図５２の方法５２００により三角形状のパッチが変換される方式を示す。図示の如く、三角形状のパッチ５３００は、複数の四角形状のパッチ５３０２へと分割されている。一実施形態では、各四角形状のパッチ５３０２は凸である。
【０３０５】
オプションとして、各四角形状のパッチ５３０２の一隅５３０４が、三角形状のパッチ５３００の辺の中点に位置していてもよい。さらに、各四角形状のパッチ５３０２の一隅は、三角形状のパッチ５３００の重心５３０６に位置していてもよい。なお、他の様々な実施形態では、隅は所望の位置にあればよい。さらに、四角形状のパッチの数は、ユーザの希望に応じて様々であってもよい。
【０３０６】
四角形状のパッチ５３０２の複数の境界に課せられうる制約として、それらが四辺の凸領域を形成し、その各々が三角形状のパッチ５３００のパラメータ空間において直線であるということがある。オプションとして、四角形状のパッチ５３０２の各辺は、パラメータ空間において直線状であってもよい。さらに、一実施形態では、１つの頂点が三角形内部に位置していて、三角形状のパッチ５３００の３辺の各々の上に、１つの頂点が位置していてもよい。図５３を参照されたい。
【０３０７】
以上、様々な実施形態について説明したが、それらは、限定のためではなく、例としてのためのみに示されたものである。このように、好ましい実施形態の広がり及び範囲は、上述の例示的な実施形態により限定されるべきではなく、特許請求の範囲及びそれらとの均等の範囲によってのみ規定されるべきである。
【図面の簡単な説明】
【図１】
コンピュータグラフィクス処理の従来方法を示した図である。
【図１Ａ】
単一の半導体プラットフォーム上に実装された本発明に係る一実施形態の種々のコンポーネントを説明するフローチャートを示した図である。
【図２】
本発明に係る一実施形態において頂点属性バッファ（ＶＡＢ）を示す図である。
【図２Ａ】
本発明に係る一実施形態においてＶＡＢにより受信されうる種々のコマンドの説明図である。
【図２Ｂ】
本発明に係る一実施形態において頂点属性をＶＡＢへとロードすること及びそこから転送する方法を説明するフローチャートを示した図である。
【図２Ｃ】
図２Ｂの処理を実装するために用いられた本発明に係る構成を示す模式図である。
【図３】
本発明に係る一実施形態によるＶＡＢに関連したモードビットの説明図である。
【図４】
本発明に係る変換モジュールの説明図である。
【図４Ａ】
本発明に係る一実施形態により複数の実行スレッドを実行する方法を説明するフローチャートを示す図である。
【図４Ｂ】
本発明に係る一実施形態により図４Ａの方法が実行される方式を説明するフローチャートを示す図である。
【図５】
本発明に係る一実施形態における図４の変換モジュールの機能ユニットを示す説明図である。
【図６】
図５の変換モジュールの乗算論理ユニット（ＭＬＵ）を示す図である。
【図７】
図５の変換モジュールの演算論理ユニット（ＡＬＵ）を示す図である。
【図８】
図５の変換モジュールのレジスタファイルを示す図である。
【図９】
図５の変換モジュールの逆論理ユニット（ＩＬＵ）を示す図である。
【図１０】
本発明に係る一実施形態における図５の変換モジュールの出力コンバータの出力アドレス図である。
【図１１】
本発明に係る一実施形態における図５の変換モジュールのマイクロコード体系の説明図である。
【図１２】
本発明に係る一実施形態による図５の変換モジュールのシーケンサを示す図である。
【図１３】
図１２の変換モジュールのシーケンサの使用に関連した種々の演算を示すフローチャートを示す図である。
【図１４】
図１２の変換モジュールのシーケンサのシーケンスコンポーネントの処理を示すフロー図である。
【図１４Ａ】
グラフィクス処理の際のスカラー及びベクトル頂点データの処理のために用いられる本発明に係るコンポーネントを示すフロー図である。
【図１４Ｂ】
図５の変換モジュールに対応した図１４Ａに示す本発明の機能コンポーネントとしてとりうる組み合わせ１４５１を示すフロー図である。
【図１４Ｃ】
図１４Ａに示した本発明の機能コンポーネントとしてとりうる別の組み合わせ１４５３を示すフロー図である。
【図１４Ｄ】
本発明に係る一実施形態によるグラフィクス処理の際にブレンディング処理を実行するための図１２の変換モジュールにより実装された方法を示す説明図である。
【図１５】
本発明に係る一実施形態における光源処理モジュールを示す図である。
【図１６】
本発明に係る一実施形態における図１５の光源処理モジュールの機能ユニットを示す図である。
【図１７】
本発明に係る一実施形態における図１６の光源処理モジュールの乗算論理ユニット（ＭＬＵ）を示す図である。
【図１８】
本発明に係る一実施形態における図１６の光源処理モジュールの演算処理モジュール（ＡＬＵ）を示す図である。
【図１９】
本発明に係る一実施形態における図１６の光源処理モジュールのレジスタユニットを示す図である。
【図２０】
本発明に係る一実施形態における図１６の光源処理モジュールの光源処理論理ユニット（ＬＬＵ）を示す図である。
【図２１】
本発明に係る一実施形態における図１６の光源処理モジュールに関連したフラグレジスタの構成を示す図である。
【図２２】
本発明に係る一実施形態における図１６の光源処理モジュールに関連したマイクロコードフィールドの説明図である。
【図２３】
本発明に係る一実施形態における図１６の光源処理モジュールに関連したシーケンサを示す図である。
【図２４】
本発明に係る一実施形態により変換及び光源処理モジュールのシーケンサがバッファに関連した入力及び出力を制御可能な方法を説明するフローチャートを示す図である。
【図２５】
図２４の方法に従い、変換及び光源処理モジュールのシーケンサが、対応するバッファの入力及び出力を制御可能な方法を示す説明図である。
【図２５Ｂ】
図１Ｂのラスタライザの種々のモジュールを示す図である。
【図２６】
本発明に係るラスタ化モジュールのセットアップモジュールを示す図である。
【図２６Ａ】
図２６のラスタライザのセットアップモジュールにより算出される種々のパラメータを示す説明図である。
【図２７】
図２６に示すラスタライザコンポーネントのセットアップ及びトラバースモジュールに関連した本発明の方法を説明するフローチャートを示す図である。
【図２７Ａ】
本発明に係る一実施形態により、プリミティブ内の領域を特定するために移動する凸領域を囲む検出点を示す説明図である。
【図２８】
図２７の横列処理動作２７０６に関連した本発明に係る処理を説明するフローチャートを示す図である。
【図２８Ａ】
本発明に係る凸領域がプリミティブについて移動するシーケンスの説明図である。
【図２８Ｂ】
本発明に係る凸領域がプリミティブについて移動するシーケンスの他の例の説明図である。
【図２９】
図２７の横列処理動作２７０６に関連した本発明に係る交互になされる犂耕処理を説明するフローチャートを示す図である。
【図２９Ａ】
図２９の犂耕処理に関連して本発明に係る凸領域がプリミティブで移動するシーケンスの説明図である。
【図３０】
境界を用いて交互になされる犂耕処理を説明するフローチャートを示す図である。
【図３１】
図３０の処理３００６に対応した処理を説明するフローチャートを示す図である。
【図３１Ａ】
図３０及び図３１における境界に基づく犂耕処理に応じて本発明に係る凸領域がプリミティブにて移動する処理を示す説明図である。
【図３２】
図２７の処理２７０２に対応した処理を説明するフローチャートを示す図である。
【図３２Ａ】
図３２の処理で負のＷ値が算出されない場合に描画される領域を示す説明図である。
【図３２Ｂ】
図３２の処理で負のＷ値が１つのみ算出された場合に描画される領域を示す説明図である。
【図３３】
図３２の処理で負のＷ値が２つのみ算出された場合に描画される領域を示す説明図である。
【図３４】
図１Ａのテッセレーションモジュールで処理されうる頂点のストリングを表す例示的なデータを示す説明図である。
【図３５】
ロードされた頂点が交互に配置されて所定サイズの頂点キャッシュを使用可能とする方式を示す説明図である。
【図３６】
図１Ａのテッセレーションモジュールの処理の第１の代替的な実施形態を示す説明図である。
【図３７】
図１Ａのテッセレーションモジュールの処理の第１の代替的な実施形態を示す説明図である。
【図３８】
図１Ａのテッセレーションモジュールの処理の第１の代替的な実施形態を示す説明図である。
【図３９】
図１Ａのテッセレーションモジュールの処理の第１の代替的な実施形態を示す説明図である。
【図４０】
図１Ａのテッセレーションモジュールの処理の第１の代替的な実施形態を示す説明図である。
【図４１】
図１Ａのテッセレーションモジュールの処理の第１の代替的な実施形態を示す説明図である。
【図４２】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４３】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４４】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４５】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４６】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４７】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４８】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図４９】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図５０】
図１Ａのテッセレーションモジュールの処理の第２の代替的な実施形態を示す説明図である。
【図５１】
図１Ａのテッセレーションモジュールの処理の第３の代替的な実施形態を示す説明図である。
【図５２】
図１Ａのテッセレーションモジュールの処理の第３の代替的な実施形態を示す説明図である。
【図５３】
図１Ａのテッセレーションモジュールの処理の第３の代替的な実施形態を示す説明図である。
【図１】
2004514973.tif 000028
【図１Ａ】
2004514973.tif 000029
【図２】
2004514973.tif 000030
【図２Ａ】
2004514973.tif 000031
【図２Ｂ】
2004514973.tif 000032
【図２Ｃ】
2004514973.tif 000033
【図３】
2004514973.tif 000034
【図４】
2004514973.tif 000035
【図４Ａ】
2004514973.tif 000036
【図４Ｂ】
2004514973.tif 000037
【図５】
2004514973.tif 000038
【図９】
2004514973.tif 000039
【図１０】
2004514973.tif 000040
【図１１】
2004514973.tif 000041
【図１２】
2004514973.tif 000042
【図１３】
2004514973.tif 000043
【図１４】
2004514973.tif 000044
【図１４Ａ】
2004514973.tif 000045
【図１４Ｂ】
2004514973.tif 000046
【図１４Ｃ】
2004514973.tif 000047
【図１４Ｄ】
2004514973.tif 000048
【図１５】
2004514973.tif 000049
【図１６】
2004514973.tif 000050
【図２１】
2004514973.tif 000051
【図２２】
2004514973.tif 000052
【図２３】
2004514973.tif 000053
【図２４】
2004514973.tif 000054
【図２５】
2004514973.tif 000055
【図２５Ｂ】
2004514973.tif 000056
【図２６】
2004514973.tif 000057
【図２７】
2004514973.tif 000058
【図２８】
2004514973.tif 000059
【図２９】
2004514973.tif 000060
【図２９Ａ】
2004514973.tif 000061
【図３０】
2004514973.tif 000062
【図３１】
2004514973.tif 000063
【図３２】
2004514973.tif 000064
【図３６】
2004514973.tif 000065
【図３８】
2004514973.tif 000066
【図４２】
2004514973.tif 000067
【図４２Ａ】
2004514973.tif 000068
【図４２Ｂ】
2004514973.tif 000069
【図４４】
2004514973.tif 000070
【図４６】
2004514973.tif 000071
【図５１】
2004514973.tif 000072
【図５２】
2004514973.tif 000073
【国際公開パンフレット】
2004514973.tif 000074
2004514973.tif 000075
2004514973.tif 000076
2004514973.tif 000077
2004514973.tif 000078
2004514973.tif 000079
2004514973.tif 000080
2004514973.tif 000081
2004514973.tif 000082
2004514973.tif 000083
2004514973.tif 000084
2004514973.tif 000085
2004514973.tif 000086
2004514973.tif 000087
2004514973.tif 000088
2004514973.tif 000089
2004514973.tif 000090
2004514973.tif 000091
2004514973.tif 000092
2004514973.tif 000093
2004514973.tif 000094
2004514973.tif 000095
2004514973.tif 000096
2004514973.tif 000097
2004514973.tif 000098
2004514973.tif 000099
2004514973.tif 000100
2004514973.tif 000101
2004514973.tif 000102
2004514973.tif 000103
2004514973.tif 000104
2004514973.tif 000105
2004514973.tif 000106
2004514973.tif 000107
2004514973.tif 000108
2004514973.tif 000109
2004514973.tif 000110
2004514973.tif 000111
2004514973.tif 000112
2004514973.tif 000113
2004514973.tif 000114
2004514973.tif 000115
2004514973.tif 000116
2004514973.tif 000117
2004514973.tif 000118
2004514973.tif 000119
2004514973.tif 000120
2004514973.tif 000121
2004514973.tif 000122
2004514973.tif 000123
2004514973.tif 000124
2004514973.tif 000125
2004514973.tif 000126
2004514973.tif 000127
2004514973.tif 000128
2004514973.tif 000129
2004514973.tif 000130
2004514973.tif 000131
2004514973.tif 000132
2004514973.tif 000133
2004514973.tif 000134
2004514973.tif 000135
2004514973.tif 000136
2004514973.tif 000137
2004514973.tif 000138
2004514973.tif 000139
2004514973.tif 000140
2004514973.tif 000141
2004514973.tif 000142
2004514973.tif 000143
2004514973.tif 000144
2004514973.tif 000145
2004514973.tif 000146
2004514973.tif 000147
2004514973.tif 000148
2004514973.tif 000149
2004514973.tif 000150
2004514973.tif 000151
2004514973.tif 000152
2004514973.tif 000153
2004514973.tif 000154
2004514973.tif 000155
2004514973.tif 000156
2004514973.tif 000157
2004514973.tif 000158
2004514973.tif 000159
2004514973.tif 000160
2004514973.tif 000161
2004514973.tif 000162
2004514973.tif 000163
2004514973.tif 000164
2004514973.tif 000165
2004514973.tif 000166
2004514973.tif 000167
2004514973.tif 000168
2004514973.tif 000169
2004514973.tif 000170
2004514973.tif 000171
2004514973.tif 000172
2004514973.tif 000173
2004514973.tif 000174
2004514973.tif 000175
2004514973.tif 000176
2004514973.tif 000177
2004514973.tif 000178
2004514973.tif 000179
2004514973.tif 000180
2004514973.tif 000181
2004514973.tif 000182
2004514973.tif 000183
2004514973.tif 000184
2004514973.tif 000185
2004514973.tif 000186
2004514973.tif 000187
2004514973.tif 000188
2004514973.tif 000189
2004514973.tif 000190
2004514973.tif 000191
2004514973.tif 000192
2004514973.tif 000193
2004514973.tif 000194
2004514973.tif 000195
2004514973.tif 000196
2004514973.tif 000197
2004514973.tif 000198
2004514973.tif 000199
2004514973.tif 000200
2004514973.tif 000201
2004514973.tif 000202
2004514973.tif 000203
2004514973.tif 000204
2004514973.tif 000205
2004514973.tif 000206
2004514973.tif 000207
2004514973.tif 000208
2004514973.tif 000209
2004514973.tif 000210
2004514973.tif 000211
2004514973.tif 000212
2004514973.tif 000213
2004514973.tif 000214
2004514973.tif 000215
2004514973.tif 000216
2004514973.tif 000217
2004514973.tif 000218
2004514973.tif 000219
2004514973.tif 000220
2004514973.tif 000221
2004514973.tif 000222
2004514973.tif 000223
2004514973.tif 000224
2004514973.tif 000225
2004514973.tif 000226
2004514973.tif 000227
2004514973.tif 000228
2004514973.tif 000229
2004514973.tif 000230
【国際調査報告】
2004514973.tif 000231
2004514973.tif 000232