JP4346906B2 - アンチエイリアシング集積化グラフィクス処理ユニット - Google Patents

アンチエイリアシング集積化グラフィクス処理ユニット Download PDF

Info

Publication number
JP4346906B2
JP4346906B2 JP2002545450A JP2002545450A JP4346906B2 JP 4346906 B2 JP4346906 B2 JP 4346906B2 JP 2002545450 A JP2002545450 A JP 2002545450A JP 2002545450 A JP2002545450 A JP 2002545450A JP 4346906 B2 JP4346906 B2 JP 4346906B2
Authority
JP
Japan
Prior art keywords
light source
module
vertex
aliasing
source processing
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.)
Expired - Fee Related
Application number
JP2002545450A
Other languages
English (en)
Other versions
JP2004514994A (ja
Inventor
エス. モントリム,ジョン
エー. ブーリーズ,ダグラス
イー. モルナー,スティーブン
Original Assignee
エヌヴィディア コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エヌヴィディア コーポレイション filed Critical エヌヴィディア コーポレイション
Publication of JP2004514994A publication Critical patent/JP2004514994A/ja
Application granted granted Critical
Publication of JP4346906B2 publication Critical patent/JP4346906B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/503Blending, e.g. for anti-aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/506Illumination models

Description

【0001】
〔発明の分野〕
本発明は、一般にアンチエイリアシングに関し、特に、アンチエイリアシング機能のあるグラフィクス・パイプラインシステムに関する。
【0002】
〔発明の背景〕
グラフィクス・パイプラインシステムを実装した全体システムが、従来技術の図1に示されている。このシステムでは、データソース10が、プリミティブを規定する展開された頂点のストリームを生成する。これらの頂点は、格納用の頂点メモリ13を介して、1度に1つずつ、パイプライン化されたグラフィックシステム12に通される。展開された頂点は、一旦、頂点メモリ13からパイプライン化されたグラフィックシステム12へと渡されると、変換モジュール14及び光源処理モジュール16により、それぞれ変換及び光源処理され、さらに、ラスタライザ18によるレンダリング用にクリッピングされてセットアップされることにより、表示装置20で表示されるレンダリングされたプリミティブが生成される。
【0003】
処理の際、変換モジュール14は、3次元の頂点の組をローカル座標系やモデル座標系からレンダリングされたオブジェクトを表示するのに用いられる2次元ウィンドウへと拡大縮小、回転、及び投影するのに用いられてもよい。光源処理モジュール16は、様々な光源処理方式、光源の位置、環境光のレベル、素材等に基づいて、頂点の色及び外観を設定する。ラスタ化モジュール18は、事前に変換及び/又は光源処理された頂点を、ラスタ化又はレンダリングする。ラスタ化モジュール18は、表示装置、又はレンダリングされたデータを次に表示装置へと出力する中間ハードウェア若しくはソフトウェア構成でありうるレンダリング先に向けて、オブジェクトをレンダリングする。
【0004】
アンチエイリアシングとは、レンダリングの際にギザギザのエッジを除去することにより、現実感を増すための方法のことである。ギザギザのエッジはコンピュータのモニタが離散的な画素を有するために現れるので、画素の解像度よりも精細な画像の特徴を充分に表示することができない。図1A−1に、エイリアシングの影響を受ける画像10を示す。
【0005】
図1A−1の画像10上に格子を置き、完全に円の内部にあるマスのみが色付けされると、エイリアシングが発生する。図1A−2に、エイリアシング12の影響を受けた図1A−1の画像10を示す。示された「ブロック状化(blockiness)」は、エイリアシングの結果であり、これはまさに、コンピュータ画面上に円を表示しようとすると発生するものである。
【0006】
図1A−3に、より精細な格子14を用いてエイリアシングがいくらか緩和される方式を示す。それでもなお、より精細な格子14で問題が完全に軽減されたわけではなく、また、より精細な格子14に対応させてコンピュータ画面の解像度を上げるには、より高価なハードウェアが必要である。
【0007】
コンピュータのデジタル性により、エイリアシングを完全に排除することは不可能である。しかし、その影響を最小化することはできる。解決策として、各画素を、画面上の単なる点としてではなく有限の矩形領域として扱うということがある。画素内の多くの点での色を算出すること、あるいは、複数のプリミティブにおける画素に重なった部分的な範囲を監視しておくことにより、最終的な画素の色を、関連部分全ての加重平均とすることができる。画素内の多くの点からの情報を取り込むことにより、画素単位のサンプリングで表現されるには精細すぎる細部を、適切に寄与させることになる。
【0008】
引き続き、図1A−1乃至図1A−3の画像10を参照する一方で、アンチエイリアシングされた円は、図1A−4で表現されうる。図1A−4に、アンチエイリアシング16が、ギザギザのエッジを除去するのに役立って、画像がより写実的になっている様子を示す。
【0009】
図1B−1に、アンチエイリアシング処理を採用していない非集積型の従来のグラフィクスシステムの実装例を示す。図示の如く、オフチップ処理モジュール20(すなわちラスタライザ)は、第1の専用メモリ22を有する。実際には、オフチップ処理モジュール20は、第2の専用メモリ26を有する画素断片プロセッサ24へと、データを供給する。エイリアシング防止策なしで、オフチップ処理モジュール20及び画素断片プロセッサ24は、いずれも、並行して同様の速度で、それぞれのメモリに対して、又はからのデータの通信を行う。
【0010】
図1B−2に、アンチエイリアシング処理を採用した非集積型の従来のグラフィクスシステムの実装例を示す。処理の際、画素断片プロセッサは、第2の専用メモリ26内のグラフィクスデータに対して、アンチエイリアシングのサンプリング条件に対応させるため、加速された速度(すなわち×4)でアクセスする必要がある。このボトルネックにより、コンピュータグラフィクス処理が遅くなり、第1の専用メモリ22は、4クロックサイクル中の3クロックサイクルが無駄になる。
【0011】
図1B−3に、アンチエイリアシング処理を採用した非集積型の従来のグラフィクスシステムの実装例を示す。この実装例は集積化されていないため、ラスタライザが画像をレンダリングした後にフィルタ処理後ルーチンを実行するために、追加のフィルタ処理後ロジック30が、採用される必要がある。そのロジックの多くは、オフチップ処理モジュール20のロジックと重複するので、これは、コストに悪影響を与える。
【0012】
このように、非集積型のグラフィクスシステムの実装例に、アンチエイリアシングを組み込むと、メモリの帯域幅を有効利用できず(図1B−2参照)、高価な追加のロジックが必要になる(図1B−3参照)。
【0013】
一般に、単一のチップ上に複数の処理モジュールを実装して製造するコストにより、集積化が制限されることが多い。チップサイズが大きくなるにつれ、集積回路のコストが急激に上昇するため、グラフィクス処理の分野では、高速化のために様々なモジュールを集積するあらゆる試みが、法外なまでに高コストとなりうる。高性能の変換及び光源処理エンジンは、単体としてもかなりの領域を要するものであるため、チップ上に実装するにはコストがかかる。機能を追加するためにオンチップのロジックを追加すると、サイズが大きくなり、チップのコストが法外なレベルに上昇してしまう。
【0014】
従って、非集積型のプラットフォーム上のアンチエイリアシングに固有の欠点を克服する費用効果の高いコンピュータグラフィクス・パイプラインの集積化に対する需要が存在する。
【0015】
〔発明の開示〕
グラフィクス処理用のグラフィクス・パイプライン・システムが提供される。このようなシステムには、頂点データを取得するように適合した変換モジュールが、含まれている。この変換モジュールは、頂点データを、第1の空間から第2の空間へと変換する役割を果たす。変換モジュールに対して接続されているのが、光源処理モジュールである。この光源処理モジュールは、変換モジュールから取得したデータに対して光源処理演算を実行するために、単一の半導体プラットフォーム上に配置されている。また、光源処理モジュールに対して接続されたラスタライザが、含まれている。このラスタライザは、光源処理モジュールから取得したデータをレンダリングするために、単一の半導体プラットフォーム上に配置されている。使用中は、グラフィクスのレンダリングの質を向上させるために、アンチエイリアシング機能が実行される。
【0016】
このような集積化により、アンチエイリアシング機能を組み込んだ非集積型システムに関連した欠点の多くが克服される。そのため、アプリケーションは、単一の半導体プラットフォームに対応づけられたアンチエイリアシング機能を、標準的なインタフェースを介して呼び出すことにより、このように向上した内容を利用することができる。
【0017】
本発明のこれらの利点及び他の利点は、以下の詳細な説明を読んで種々の図面を検討することにより、明らかになるであろう。
【0018】
〔好ましい実施形態の説明〕
上述及び他の側面及び利点は、図面を参照した以下の本発明の好適な実施形態の詳細な説明によって、よりよく理解されることになる。
【0019】
図1乃至図2B−3に、従来技術を示す。図1Cは、本発明の一実施形態の種々のコンポーネントを示すフローチャートである。図示の如く、本発明は、頂点属性バッファ(VAB)50、変換モジュール52、光源処理モジュール54、及び、セットアップモジュール57を有するラスタ化モジュール56等の複数のモジュールに分割されている。一実施形態では、上記各モジュールは、以下により詳細に説明する方式で、単一の半導体プラットフォーム上に位置している。ここでの説明では、単一の半導体プラットフォームとは、単独で単体の半導体ベース集積回路又はチップのことである。なお、単一の半導体プラットフォームという用語は、オンチップ動作をシミュレートして、通常のCPU及びバスの実装を利用することよりも実質的に進歩した、接続性の高いマルチチップモジュールのことでもある。
【0020】
処理の際に、VAB50は、位置、法線(normal)、色、テクスチャ座標等と言った複数の頂点属性の状態を集めて保持するために組み込まれている。完成した頂点は、変換モジュール52により処理されて、光源処理モジュール54へと送られる。変換モジュール52は、光源処理モジュール54による光源処理のためにベクトルを生成する。光源処理モジュール54からの出力は、次段にてプリミティブをセットアップするセットアップモジュールに適した画面空間データである。その後、ラスタ化モジュール56は、プリミティブのラスタ化を実行する。なお、変換及び光源処理モジュール52,54は、コマンドが一旦開始したならば常に終了するように、コマンドレベルでのみストールする。上述のコンポーネントに関してのより詳細な情報については、以下で詳細に述べる。
【0021】
上述の集積化により、性能の向上が達成されるので、非集積型のシステムにおける多くの欠点が克服される。アプリケーションは、本発明の種々のハードウェア機能を、標準的なインタフェースを介してこのような機能を呼び出すことにより利用してもよい。
【0022】
このようなインタフェースは、開発者に対して、開発者のここに述べるハードウェア機能へのアクセス性を向上させる一組のAPI(アプリケーション・プログラミング・インタフェース)を提供してもよい。このことは、アプリケーションソフトウェアとここで説明する様々なハードウェア機能との交信にソフトウェアドライバを用いるハードウェア・アブストラクション・レイヤを用いることにより達成されてもよい。結果として、開発者は、本発明の様々なハードウェア機能の詳細を気にせずに、インタフェースが利用された製品のただ1つのバージョンを記述すればよい。
【0023】
さらに、このインタフェースは、開発者に対して、ここでの説明における様々なハードウェア機能を利用するツールを提供してもよい。それにより、ハードウェアの機能が自動的に決定され、アプリケーションのパラメータが適合するように設定されてもよい。さらに、このインタフェースには、開発者がアプリケーションの基礎となる要素を作成するのに利用可能なコンポーネントのライブラリが含まれていてもよい。このライブラリは、プログラマに対して、該プログラマの製品に用いるのに、事前に存在するインタフェース及び要素の大規模なグループを提供することにより、開発過程を簡略化する。
【0024】
このように、インタフェースを構成するコンポーネントにより、技術の進歩の大部分が得られるように設計された柔軟なプラットフォームが提供される。このようなコンポーネントの例として、本発明のハードウェアに対応させて作成可能であり、及びここで述べる進歩の大部分が確実に得られるような特別なドライバがある。さらなる例として、アンチエイリアシング機能、又は他の型のグラフィクス処理向上機能が組み込まれたものがある。
【0025】
このように、標準化されたプログラミング・インタフェースが、ここで説明される様々なハードウェア機能とのインタフェースになるように、アプリケーション開発者に対して提供される。さらに、これにより、ハードウェアの機能を標準化された方法でアプリケーション開発者に公開する方法が提供される。このような標準化されたプログラミング・インタフェースにより、アプリケーションとハードウェアとが相互作用するためのより統一的に容易にサポート可能な方法が提供されてもよい。上述のものと同様の特徴を備えたインタフェースの例としては、マイクロソフト(登録商標)ダイレクトX(登録商標)がある。
【0026】
一実施形態において、本発明には、オープン・グラフィクス・ライブラリ(OpenGL(登録商標))及びD3D(商標)の変換及び光源処理パイプラインを少なくとも部分的に採用したハードウェアの実装が含まれる。OpenGL(登録商標)は、2次元及び3次元グラフィックイメージを規定するためのコンピュータ業界での標準的なアプリケーション・プログラム・インタフェース(API)である。OpenGL(登録商標)によると、アプリケーションは、OpenGL(登録商標)に準拠したグラフィクスアダプタを用いたあらゆるオペレーティングシステムで、同様の結果を得ることができる。OpenGL(登録商標)は、コマンドの組、又は即時実行関数を指定する。各コマンドは、描画動作を指令するか、あるいは特別な効果をもたらす。
【0027】
図1Cに示したモジュールに関連した種々の機能について説明する。図2は、本発明の一実施形態によるVAB50を示す図である。図示の如く、VAB50は、頂点及びモードビット202の属性を表すデータビット204を格納するとともに、コマンドビット200を渡す。実際にはVAB50は、頂点のデータビット204を取得してドレイン(drain)する。
【0028】
VAB50は、複数の頂点属性状態としてとりうるものを、データビット204を通じて取得して格納するようになっている。実際には、このようなデータビット204すなわち頂点データがVAB50に取得されて格納された後、その頂点データは、VAB50からグラフィクス処理モジュールすなわち変換モジュール52へと出力される。さらに、コマンドビット200は、頂点データが他の処理に加えてVAB50へと出力される方式を決定するために、VAB50によって渡される。これについては、図2Aを参照して詳細に述べる。このようなコマンドビット200は、該コマンドビット200を生成可能なマイクロコントローラ、CPU、データソース、又は他の型の供給源等のコマンドビットソースから取得される。
【0029】
さらに、複数の処理動作モードの状態を示すモードビット202が渡される。このように、モードビット202は、頂点データが後続のグラフィック処理モジュールで処理される方式を決定するのに適合している。このようなモードビット202は、該モードビット202を生成可能なマイクロコントローラ、CPU、データソース又は他の型の供給源等のコマンドビットソースから取得される。
【0030】
なお、VAB50に関連した種々の機能は、専用のハードウェア、ソフトウェア又は他の型のロジックによって管理される。様々な実施形態において、モードビット202として64,128,256又は他の値が用いられてもよい。
【0031】
また、VAB50は、128ビット形式へと変換する必要のある64ビットデータ用の集積点としても機能する。VAB50の入力は64ビット/サイクルであり、出力は128ビット/サイクルである。他の実施形態では、VAB50は、128ビットデータ用の集積点としても機能し、VAB50の入力は、128ビット/サイクル、又は他の組み合わせであってもよい。さらに、VAB50には、複数の頂点属性用に予約済みのスロットがあり、これらは全て、IEEEの32ビット浮動小数である。このようなスロットの数は、ユーザの要望に応じて様々である。テーブル1に、本発明にて採用されている典型的な頂点属性を示す。
【0032】
【表1】
Figure 0004346906
【0033】
処理の際、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)とする。
【0034】
VAB50には、データビット204が乱れないように、変換及び光源処理モジュール52及び54へ又は通じて、渡されるデータビット204を集めるのに用いられる他のスロット205が含まれている。スロット205におけるデータビット204は、浮動小数点又は整数形式であってもよい。上述の如く、各頂点のデータビット204には、対応するモードビット202の組がある。モードビット202は、モードを表し、データビット204の処理に影響を与える。これらモードビット202は、データビット204とともに、以下により詳細に説明する目的で、変換及び光源処理モジュール52,54へそれぞれと渡される。
【0035】
一実施形態では、VAB50により取得される有効なVAB、変換及び光源処理コマンドが18個あってもよい。図2Aは、本発明に係る一実施形態にてVAB50により取得されうる種々のコマンドの説明図である。なお、図2Aに示したロード(load)及び読取(read)のコンテクストのあらゆるコマンド、及び通過(passthrough)コマンドは、128ビットまでのデータワード又は他のサイズのデータワードを転送するものである。
【0036】
図2Aの各コマンドには、データビット204の各組がVABアドレスの高位のダブルワードに書き込まれるのか又は低位のダブルワードに書き込まれるのかを指示する制御情報が含まれていてもよい。さらに、2ビットの書込マスクが、ワードレベルでの制御を提供するために用いられてもよい。さらに、現行のコマンドを実行するのにデータビット204の全てが存在していることをVABコントローラに伝達する開始ビットがあってもよい。
【0037】
各コマンドには、当該コマンドがコンテクストメモリから読み取る読取コマンドであるか又はコンテクストメモリに書き込む書込コマンドであるかについての情報を、参照して検出できるようになる対応したストールフィールドがある。現在実行中のコマンドのストールフィールドを用いることにより、新規のコマンドは、競合が生じたときに延期されるか、あるいは続行が許可されてもよい。
【0038】
処理の際、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サイクルが必要となるだけである。
【0039】
図2Bは、グラフィクス処理の際に頂点属性をVAB50へとロードすること及びそこからドレインすることの一方法を示すフローチャートである。最初に、処理210では、少なくとも1組の頂点属性が、処理されるべくVAB50に取得される。上述の如く、頂点属性の各組は、ユニークであって、単一の頂点に対応していてもよい。
【0040】
処理212では、実際には頂点属性は、取得されるとVAB50内に格納される。さらに、格納された頂点属性の各組は、変換モジュール52における複数の入力バッファの対応する1つへと転送される。また、処理216に示されるように、取得された頂点属性の組は、取得された頂点属性に対応するものとしてVAB50内に現在格納されている別の組の頂点属性があるかどうか決定するために、監視される。
【0041】
格納された頂点属性が取得された頂点属性に対応していると、判別217にて決定されると、格納された頂点属性は、命令外で変換モジュール52に対応する入力バッファへと出力される。処理218を参照されたい。格納された頂点属性が出力されると直ちに、対応して入力される頂点属性が、VAB50においてその位置を占めることになる。一方、対応が検出されなければ、格納された頂点属性の各組は、予め定められた正規の順序で、変換モジュール52における対応する入力バッファへと転送されることになる。処理219を参照されたい。
【0042】
なお、格納された頂点属性は、対応する開始コマンドがあれば、上述の方式で転送されないこともある。さらに、上述の方法が適切に機能するように、VAB50の出力の帯域幅は、少なくともVAB50の入力の帯域幅になっている必要がある。
【0043】
図2Cは、図2Bの処理を実装するために用いられた本発明に係る構成を示す図である。図示の如く、VAB50は、データ書込端子WD、データ読取端子RD、アドレス書込端子WA、及びアドレス読取端子RAを有する。データ読取端子は、データビット204をVAB50から出力するために、第1のクロック制御バッファ230に接続している。
【0044】
また、第1のマルチプレクサ232が含まれている。この第1のマルチプレクサ232は、VAB50のアドレス読取端子及び第2のクロック制御バッファ234に接続した出力を有する。第1のマルチプレクサ232の第1の入力は、VAB50のアドレス書込端子に接続しており、第1のマルチプレクサ232の第2の入力は、第2のマルチプレクサ236の出力に接続している。論理モジュール238は、第1及び第2のマルチプレクサ232,236と、VAB50のアドレス書込端子と、第2のクロック制御バッファ234の出力との間に接続されている。
【0045】
実際には論理モジュール238は、入力してくる頂点属性が、VAB50へと転送されるのに待ちになっているかどうか決定する役割を果たす。一実施形態では、頂点属性が待ちになっているかどうかを示すビットレジスタを監視することが、この決定に役立つ。入力してくる頂点属性について、VAB50に現在あるものの中に対応するものがあると決定されると、論理モジュール238は、入力してくる頂点属性を直ちにその位置に格納できるように、対応する頂点属性をドレインするために、第1のマルチプレクサ232を制御する。一方、入力してくる頂点属性について、現在VAB50中に対応するものがないと決定されると、論理モジュール238は、VAB50からのドレインがなされるとともに、入力してくる頂点属性が順次、又は他の所定の順番で、ロードされるように、当該論理モジュール238により更新されうる第2のマルチプレクサ236の入力に従って、第1のマルチプレクサ232を制御する。
【0046】
このため、VAB50は、新規に入力される頂点属性がロードされる前に、複数の頂点属性をドレインする必要はない。待ちとなった頂点属性は、可能ならば、VABにおける対応するものを強制的に出力することにより、続行可能となる。このため、VAB50は、任意の順序でドレインされうる。この機能がなければ、VAB50からの転送に7サイクルかかり、場合によると、ロードするのにさらに14サイクルかかる。ロードとドレインとを重複させることにより、より高い性能が達成される。なお、これは、入力バッファが空で、VAB50から変換モジュール52の入力バッファへの転送が可能な場合にのみ可能である。
【0047】
図3に、本発明に係る一実施形態によるVAB50に関連したモードビットを示す。変換/光源処理モード情報は、モードビット202を介してレジスタに格納される。モードビット202は、以下で明らかになる方式で、変換モジュール52及び光源処理モジュール54のシーケンサを駆動するのに用いられる。各頂点には、ユニークでありうる対応したモードビット202があるので、特別に調整されたプログラムシーケンスを実行可能である。モードビット202は一般的にグラフィクスAPIに直接マップしており、そのうちのいくつかが見出されてもよい。
【0048】
一実施形態では、図3のアクティブ光ビット(LIS)は、連続していてもよい。さらに、パススルービット(VPAS)はオンになった場合にユニークであり、頂点データは拡大縮小及びバイアスを伴って渡され、変換や光源処理は行われない。VPASが真のときに用いられうるモードビット202には、テクスチャ分割ビット(TDV0,1)及びフォグビット(foggen bits)(D3Dでフォグ値を抽出するのに用いられる)がある。このように、VPASは、事前変換データのために用いられ、TDV0,1は、D3Dのコンテクストにおけるシリンドリカルラップ(cylindrical wrap)モードを扱うのに用いられる。
【0049】
図4に、本発明に係る一実施形態の変換モジュールを示す。図示の如く、変換モジュール52は、6個の入力バッファ400を介してVAB50に接続している。一実施形態では、各入力バッファ400は、そのサイズが7*128bである。これら6個の入力バッファ400は、その各々が7ククッドワードを格納可能である。このような入力バッファ400は、パスデータが位置データと重複していること以外は、VAB50と同様のレイアウトに従っている。
【0050】
一実施形態では、入力バッファ400がロードされた、以前のインスタンス以来、データが変更されたかどうかを示すために、各入力バッファ400の各属性用に1ビットが指定されている。この設計により、各入力バッファ400は、データが変更されたときにのみロードされることになる。
【0051】
さらに、変換モジュール52は、光源処理モジュール54の6個の出力頂点バッファ402に接続している。出力バッファには、第1のバッファ404、第2のバッファ406、及び第3のバッファ408が含まれている。以降明らかになるように、第3のバッファ408の内容、すなわち位置、テクスチャ座標データ等は、光源処理モジュール54では使用されない。一方、第1のバッファ404及び第2のバッファ406は、いずれも、光源処理及びカラーデータを光源処理モジュール54に入力するのに用いられる。光源処理モジュールが2つの読取入力を取り扱うようになっているので、2つのバッファが用いられている。なお、データは、読取が競合する問題を防止するように配列されていてもよい。
【0052】
さらに、変換モジュール52に接続しているものとして、コンテクストメモリ410、及びマイクロコードROMメモリ412がある。変換モジュール52は、オブジェクト空間の頂点データを画面空間へと変換する役割、及び光源処理モジュール54で必要とされるあらゆるベクトルを生成する役割を果たす。また、変換モジュール52は、スキニング及びテクスチャ座標を処理する。一実施形態では、変換モジュール52は、4つの浮動小数を並列処理する128ビット設計であってもよく、4項点乗積(4 term dot products)処理用に最適化されていてもよい。
【0053】
図4Aは、本発明の一実施形態により変換モジュール52にて複数のスレッドを実行する方法を示すフローチャートである。処理の際、変換モジュール52は、インターリービングにより3つの頂点を並列処理可能である。そうして、コマンド間に、コンテクストメモリ410に対しての書込とそれに続く読取といったストール状態がなければ、3つのコマンドが同時に並列的に実行可能である。3つの実行スレッドは、それぞれ独立しており、これらはどのようなコマンドであってもよい。頂点には全て、ユニークに対応するモードビット202があるためである。
【0054】
図4Aに示すように、複数のスレッドを実行する方法には、処理420において、実行されるべき現行のスレッドを決定することが含まれる。この決定は、グラフィクス処理モジュールが処理を完了するために要するサイクル数を識別して監視することによりなされてもよい。サイクルを監視することにより、各スレッドを1サイクルに割当可能となるので、現行のサイクルに基づいて現行のスレッドを決定可能となる。なお、このような決定は、効率的であると思われる所望の方式でなされてもよい。
【0055】
次に、処理422では、現行のサイクルで実行されるスレッドに対応した命令が、対応するプログラムカウンタ番号を用いて取得される。その後、処理424にて、グラフィクス処理モジュールで当該命令が実行される。
【0056】
一利用例では、即時の方法には、第1のプログラムカウンタに従い、最初に第1の命令又はコードセグメントにアクセスすることが含まれている。上述のように、このようなプログラムカウンタは、第1の実行スレッドに対応している。次に、第1のコードセグメントが、グラフィクス処理モジュールで実行される。すぐに明らかになるように、このようなグラフィクス処理モジュールは、加算器、乗算器、若しくは他の機能ユニット、又はその組み合わせという形態をとってもよい。
【0057】
グラフィクス処理モジュールは、実行を完了するのに2クロックサイクル以上を要するので、第2のコードセグメントは、第2のプログラムカウンタに従って、第1のコードセグメントの実行から1クロックサイクル後に、直ちにアクセスされてもよい。第2のプログラムカウンタは、第2の実行スレッドに対応しており、ここでは、各実行スレッドが、ユニークな頂点を処理する。
【0058】
そうして、第2のコードセグメントは、グラフィクス処理モジュールでの第1のコードセグメントの実行完了前に、そのグラフィクス処理モジュールにて処理が開始されてもよい。実際のグラフィクス処理モジュールには、各スレッドが出力を発生するのに、いずれも所定数のサイクルを要する。このように、本例の様々なステップが、所定数のサイクル毎に繰り返されてもよい。
【0059】
この技術により、従来技術に対しての数々の利点が得られる。無論、本発明に係る機能ユニットは、より効率的に利用される。さらに、制御コードは、複数スレッド方式の使用が前提となる場合には、より効率的に記述されてもよい。
【0060】
例えば、グラフィクス処理モジュールに、回答を出力するのに3クロックサイクルを要するマルチプレクサが含まれる場合、a=b*c及びd=e*aといった後続の命令間に、2つのノーオペレーションコマンドが必要となることがある。これは、3クロックサイクルが経過するまで“a”が入手不能なためである。但し、本実施形態では、このようなコードが3クロックサイクル毎に呼び出される3つの実行スレッドのうちの1つとして実行されるものとみなされるので、単純にそのコードはa=b*cの直後にd=e*aを呼び出す。
【0061】
図4Bは、図4Aの方法が実行される方式を示すフローチャートである。図示の如く、各実行スレッドには、命令メモリ452内の命令又はコードセグメントにアクセスするのに用いられる対応するプログラムカウンタ450がある。そして、このような命令は、加算器456、乗算器454、及び/又は逆論理ユニット(inverse logic unit)若しくはレジスタ459等のグラフィクス処理モジュールを実行するのに用いられる。
【0062】
上記処理モジュールの少なくとも2つがタンデムで用いられる状況に対応するために、グラフィクス処理モジュール間に、少なくとも1つのコードセグメント遅延457が用いられる。3スレッド形式が用いられる場合、3クロックサイクルのコードセグメント遅延457が用いられる。一実施形態では、乗算命令に加算命令が続くときに、コードセグメント遅延457が用いられる。このような場合には、乗算器456が出力を発生するのに充分な時間が確実に経過するように、乗算命令実行後に3サイクル経過するまで、加算命令は実行されない。
【0063】
各命令の実行後、現行の実行スレッドのプログラムカウンタ450が更新されて、次の実行スレッドのプログラムカウンタが、対応する命令にアクセスするためにラウンドロビンシーケンス(round robin sequence)で、モジュール458により呼び出される。なお、プログラムカウンタは、これらに限定されるものではないが、インクリメント、ジャンプ、コール及びリターン、テーブルジャンプの実行、及び/又はディスパッチング等のどのような方式で用いられてもよい。ディスパッチングとは、取得したパラメータに基づいてコードセグメント実行の開始点を決定することである。さらに、この複数スレッド実行形式は、本発明に係るグラフィクス処理パイプラインの光源処理モジュール54にも応用されうることを、理解することが重要である。
【0064】
3スレッド形式が用いられる場合、各スレッドには、1度に、1個の入力バッファ及び1個の出力バッファが割り当てられる。このことにより、3つのコマンドを処理しつつ、データを伴う3つのコマンドをさらにロードすることが可能となる。入力バッファ及び出力バッファは、図27及び図28を参照して後述する方式にて、ラウンドロビンシーケンスで割り当てられる。
【0065】
このように、実行スレッドは、一時的かつ機能的にインターリービングされる。これは、各機能ユニットが、3段階にパイプラインされて、各スレッドが1度に1段階を占めることを意味する。一実施形態では、3スレッドが、同じシーケンス、すなわち0の次に1、次に3で常に実行されるように設定されていてもよい。概念上、スレッドは、t=クロック・モジュロ3で機能ユニットに入る。一旦、機能ユニットが処理を開始すると、結果が得られるまでに3クロックかかる(6かかるILUを除く)。この時間で、同スレッドが再びアクティブになる。
【0066】
図5に、本発明に係る一実施形態による図4の変換モジュール52の機能ユニットを示す。図示の如く、頂点データを取得するためにVAB50に接続するように適合した入力バッファ400が含まれている。
【0067】
メモリ論理ユニット(MLU)500には、入力バッファ400の出力に接続した第1の入力がある。オプションとして、MLU500の出力は、第1の入力に接続したフィードバックループ502を有していてもよい。
【0068】
また、MLU500の出力に接続した第1の入力を有する演算論理ユニット(ALU)504が設けられている。さらに、ALU504の出力は、第2の入力に接続したフィードバックループ506を有する。このようなフィードバックループ502は、そこに接続した遅延508をさらに有していてもよい。ALU504の出力に接続しているのは、レジスタユニット510の入力である。なお、レジスタユニット510の出力は、MLU500の第1及び第2の入力に接続している。
【0069】
逆演算又は逆平方根演算を実行するためにALU504の出力に接続した入力を含んだ逆論理ユニット(ILU)512が、設けられている。代替的な実施形態では、ILU512には、レジスタユニット510の出力に接続した入力が、含まれていてもよい。
【0070】
さらに、ILU512の出力とMLU500の第2の入力との間に接続された変換又はスメアリング(smearing)モジュール514が含まれている。実際の変換モジュール514は、スカラー頂点データをベクトル頂点データに変換する役割を果たす。これは、スカラーデータにベクトルを乗じて、乗算器及び/又は加算器等のベクトル演算子がそれを処理するようにして達成される。例えば、スカラーであるAが、変換後、ベクトル(A,A,A,A)となりうる。代替的な実施形態では、スメアリングモジュール514は、MLU500に関連したマルチプレクサ、又は本発明の他のコンポーネント内に組み込まれてもよい。オプションとして、レジスタ516が、ILU512の出力と変換ユニット514の入力との間に接続されてもよい。さらに、このようなレジスタ516がスレッド化されていてもよい。
【0071】
メモリ410は、MLU500の第2の入力及びALU504の出力に接続している。特に、メモリ410には、MLU500の第2の入力に接続した読取端子がある。さらに、メモリ410には、ALU504の出力に接続した書込端子がある。
【0072】
メモリ410は、入力バッファ400、MLU500、ALU504、レジスタユニット510、ILU512、及び頂点データ処理用の変換モジュール514に関連して用いるために、複数の定数及び変数をそこに格納する。このような処理には、オブジェクト空間の頂点データを画面空間の頂点データに変換すること、ベクトルを生成すること等が含まれていてもよい。
【0073】
最後に、出力コンバータ518が、ALU504の出力に接続されている。出力個バータ518は、出力バッファ402を介して光源処理モジュール54に接続して、処理された頂点データをそこへ出力する役割を果たす。ILU以外の全てのデータパスは、128ビットに設計されていてもよく、他のビット数のデータパスが用いられてもよい。
【0074】
図6は、本発明に係る一実施形態による図5の変換モジュール52のMLU500を示す図である。図示の如く、変換モジュール52のMLU500には、並列接続された4個のマルチプレクサ600が含まれている。
【0075】
変換モジュール52のMLU500は、2つの4要素のベクトルを異なる3通りの方法で乗算すること、又は、1つの4要素のベクトルを渡すことになる。MLU500は、乗算を実行可能である。テーブル2に、変換モジュール52のMLU500に関連したこのような演算を示す。
【0076】
【表2】
Figure 0004346906
【0077】
A及びBの入力としてとりうるものを、表3に示す。
【0078】
【表3】
Figure 0004346906
【0079】
表4に、クロス乗積のために用いられるベクトル回転オプションを示す。
【0080】
【表4】
Figure 0004346906
【0081】
図7は、本発明に係る一実施形態による図5の変換モジュール52のALU504を示す図である。図示の如く、変換モジュール52のALU504には、並列/直列接続された3個の加算器700が含まれている。実際の変換モジュール52のALU504は、3要素のベクトル2つを加算すること、4要素のベクトル1つを渡すこと、あるいはベクトル要素を出力に亘ってスメアリングすることができる。テーブル5に、変換モジュール52のALU504が演算可能な種々の演算を示す。
【0082】
【表5】
Figure 0004346906
【0083】
テーブル6に、変換モジュール52のALU504の入力A及びBを示す。
【0084】
【表6】
Figure 0004346906
【0085】
また、不変更(no change)、Bの否定、Aの否定、A,Bの絶対値を作用させることにより、入力A及びBの符号ビットを変更可能である。なお、ALU504がスカラー頂点データを出力すると、このスカラー頂点データは、各出力がスカラー頂点データを表すという意味で、出力に亘ってスメアリングされる。MLU500及びALU504の各パス制御信号は、演算の際に特殊な値の取扱を禁止可能である。
【0086】
図8は、本発明に係る一実施形態による図5の変換モジュールのベクトルレジスタファイル510を示す図である。図示の如く、ベクトルレジスタファイル510には、4組のレジスタ800が含まれている。各レジスタ800は、対応するマルチプレクサ802の第1の入力に接続した出力、及び対応するマルチプレクサ802の第2の入力に接続した入力を有する。
【0087】
本発明に係る一実施形態では、ベクトルレジスタファイル510は、スレッド化されている。すなわち、ベクトルレジスタファイル510の3つのコピーがあって、各スレッドが専用のコピーを有することになる。一実施形態では、各コピーには、8つのレジスタが含まれており、各レジスタは、大きさが128ビットで、4つの浮動小数を格納する。ベクトルレジスタファイル510は、ALU504から書き込まれ、出力がMLU500へとフィードバックされる。ベクトルレジスタファイル510では、1サイクル当たり、1回の書込及び1回の読取がある。
【0088】
処理の際、各レジスタの内容に対して個別に、書込動作をマスク可能である。ベクトルレジスタファイル510は、書込アドレスが読取アドレスと同じであると、入力から出力へのバイパス・パス511により、待ち時間が0となる。この場合には、マスクされていない内容が、レジスタから取得されて、マスクされた内容がバイパスされてもよい。このように、ベクトルレジスタファイル510は、ベクトルを要素毎に作成すること、あるいは、ALUのSMR演算(テーブル5参照)に関連してベクトルの要素の順番を変更することに、非常に有用である。また、一時的な結果が、ベクトルレジスタファイル510内に格納されもよい。
【0089】
図9は、本発明に係る一実施形態による図5の変換モジュールのILU512を示す図である。図示の如く、変換モジュール52のILU512は、浮動小数の逆数(1/D)及び平方根の逆数(1/D^(1/2))を発生可能である。このような演算を実行するために、2つの反復処理のいずれか1つが、仮数に対して実行されてもよい。このような処理は、所望の専用ハードウェアで実行されてもよいものであり、以下に示されている。
【0090】
逆数(1/D) 平方根の逆数(1/D^(1/2))
xn+1 = xn (2-xn*D) xn+1 = (1/2)*xn (3-xn 2*D)
1)xn(seed)のためテーブル参照 xn(seed)のためテーブル参照
xn xn* xn
2)第1の反復:乗算・加算 第1の反復:乗算・加算
2-xn*D 3-xn 2*D
3)第1の反復:乗算 第1の反復:乗算
xn(2-xn*D) (1/2)* xn(3-xn 2*D)
4)第2の反復:no−op 第2の反復:平方
xn+1を渡す xn+1 2
5)第2の反復:乗算・加算 第2の反復:乗算・加算
2-xn+1*D 3-xn+1 2*D
6)第2の反復:乗算 第2の反復:乗算
xn+1(2-xn+1*D) (1/2)xn+1(3-xn+1 2*D)
図示の如く、両処理は類似しており、設計が簡単になっている。なお、閾値となる精度が満たされるまで、反復が繰り返されることになる。
【0091】
処理の際、ILU512は、逆演算及び逆平方根演算を含む2つの基本的な演算を実行する。他のユニットとは異なり、出力を発生するのに6サイクルを要する。入力はスカラーであり、出力も同様である。上述のように、ILU512の出力にてスレッド化保持レジスタ516は、次に有効な結果が発生するまで結果をラッチすることになっている。さらに、そのスカラー出力は、MLU500へと送り込まれる前に、ベクトルへとスメアリングされる。逆ユニット512は、仮数が約22ビット以内の精度のIEEE(米国電気電子技術者協会)出力を発生するために、参照テーブル及び2段階のニュートン−ラフソン反復を用いる。テーブル7に、変換モジュール52のILU512により実行される種々の演算を示す。
【0092】
【表7】
Figure 0004346906
【0093】
上記のテーブル7のレンジクランプ逆演算(range clamp inversion operation)は、ラスタ化モジュール56により取り扱われるクリッピング演算を可能にするために用いられうる。座標は、画面空間へと直接に変換される。このことは、同次クリップ空間wが0.0に近いときに問題となりうる。透視除算(perspective divide)にて1.0/0.0の乗算を防ぐために、1/wの計算は、最小及び最大の指数へとクランプされる。
【0094】
図5に示すように、実際のコンテクストメモリ410は、ククッドワードを用いてのみ読み書きを行う。このメモリは、各サイクルにてMLU500又はALU504により読取可能であり、ALU504により書込可能である。メモリ読取は、各サイクル当たり1回のみ可能である。読取が必要であると、命令の最初になされ、その3サイクル後にALU504へとパイプライン処理される。コンテクストメモリ410は、必ずしもスレッド化される必要はない。
【0095】
図10は、本発明に係る一実施形態による図5の変換モジュールの出力コンバータ518の出力アドレス図である。出力コンバータ518は、出力を適切な宛先へ向け、データのビット精度を変更し、性能向上のためにデータをスウィズリング(swizzling)することを担当する。光源処理モジュール54宛ての全てのデータは、S1E8M13(1ビットの符号、8ビットの指数、13ビットの仮数)としてまとめられた22ビット浮動小数点形式に丸められる。図4に示すように、光源処理モジュール54における宛先バッファ402は、スレッド化されている。
【0096】
データ・スウィズリングは、ベクトルを生成する場合に有用である。この技術により、ベクトル生成時に代償を伴うことなく、距離ベクトル(1,d,d*d)を生成可能となる。距離ベクトルは、フォグ、ポイントパラメータ、及び光の減衰のために用いられる。これは、視線ベクトル(eye vector)及び光方向ベクトル(light direction vector)を用いてなされる。テーブル8に、このようなベクトルに関連した種々の演算を示す。なお、以下のテーブルにおいて、ベクトルの平方を、d2=dot[(x,y,z),(x,y,z)]とし、d2を(x,y,z)の要素wに格納する。
【0097】
【表8】
Figure 0004346906
【0098】
なお、本発明で実行される数学は、常にIEEEに準拠しているというわけではない。例えば、“0”に任意の数を乗じたものは、“0”とみなされる。これは、d=d2*1/(d21/2,但しd=0、といった式を処理するときに、特に有益である。上述の仮定なしには、このような数式はエラーとなるので、関連の計算を行う際に問題が発生する。
【0099】
図11は、本発明に係る一実施形態による図5の変換モジュールのマイクロコード体系の説明図である。変換モジュールのマイクロコードは、15フィールドに配列され、全体で44ビットである。フィールドは、ユニットのデータフローに合わせて遅延される。MLU500の演算は遅延0で実行され、ALUの演算は遅延1で実行され、RLU、出力演算は遅延2で実行される。各遅延は、3サイクルに相当する。
【0100】
図12は、本発明に係る一実施形態による図5の変換モジュール52のシーケンサ1200を示す図である。図12に示すように、変換モジュール52のシーケンサ1200には、演算処理の複数のモードの状態を示すモードビットをVAB50から取得するように適合したバッファ1202が含まれている。
【0101】
また、モードの状態に対応した演算処理を実行するのに適したコードセグメントを格納可能なメモリ412が含まれている。シーケンスモジュール1206は、メモリ412及び制御ベクトルモジュール1205間に接続されており、これは次に、モードビットから得られた制御ベクトルに基づいてメモリ412内の複数のアドレスを特定するために、バッファ1202に接続している。さらに、シーケンスモジュール1206は、変換モジュール52を操作してデータを出力バッファ1207へと転送させるのに用いられうるコードセグメントを取得するために、メモリ412内のアドレスにアクセスするようになっている。
【0102】
図13は、図12の変換モジュール52のシーケンサ1200の使用に関連した種々の演算を示すフローチャートである。図示の如く、シーケンサ1200は、変換又は光源処理にてグラフィクス処理をシーケンス処理するようになっている。処理1320では、最初に、演算処理の複数のモードの状態を示すモードビット202が取得される。一実施形態では、モードビット202は、ソフトウェアドライバから取得される。
【0103】
次に、処理1322では、メモリにおける複数のアドレスが、モードビット202に基づいて特定される。次に、このようなアドレスは、モードの状態に対応した演算処理を実行するのに適したコードセグメントを取得するために、メモリ内で処理1324にてアクセスされる。次に、コードセグメントが、変換又は光源処理モジュールで頂点データを処理するために実行される。処理1326を参照されたい。
【0104】
図14は、図12の変換モジュール52のシーケンサ1200のシーケンスモジュール1206の処理を示すフローチャートである。図示の如く、複数のモードレジスタ1430の各々には、ユニークなモードビット202の組が含まれており、1つの頂点に対応している。なお、モードレジスタ1430は、図4A及び図4Bを参照して上述した方式で複数の実行スレッドが実行可能となるように、ラウンドロビンシーケンスでポーリングされる。
【0105】
一旦、現行の実行スレッドが選択されると、対応するモードビット202群が、処理1432にて復号される。モードビット202が処理1432で復号されると、対応する頂点データの処理のために、特定のコードセグメントがROM1404内でアクセスされるべきかどうかを示すビットを複数含んだ制御ベクトルが得られる。
【0106】
コードセグメントがROM1404内でアクセスされて実行されるべきであるかどうかが決定されると、ポインタ処理1436により、現行のスレッドポインタがインクリメントされ、これにより、次の実行スレッドを開始して、第2のモードビット202群を取得し、同様の処理を実行する。このことは、各スレッドについて、ラウンドロビンシーケンスで継続されることになる。
【0107】
一旦、特定のモードビット202群について制御ベクトルが形成されると、プライオリィティ・エンコーダ処理1438にて、制御ベクトルにおける次の“1”すなわち有効なビットが決定又は識別される。このようなビットが検出されると、プライオリィティ・エンコーダ処理1438にて、有効なビットに対応したROM1404内のアドレスが、実行のために生成される。
【0108】
他のスレッドの処理後、最初のモードビット202群に戻り、モードビットが復号されて制御ベクトルが再び得られると、マスク処理1434が、識別済の “1”すなわち有効なビットをマスクするために用いられてもよい。これにより、マスク処理1434後に残りのビットの全てを解析可能となる。
【0109】
上述の処理は、以下の表を用いて説明されうる。テーブル9に、対象となる頂点データについて実行されうる複数の式を示す。
【0110】
【表9】
Figure 0004346906
【0111】
ここに示すように、逆演算(a,b*c,d*e,f,及び1/x)の他に、合計されうる結果として、4つの可能性がある。次に、モードフィールドが定義されてもよい。テーブル10に、モードフィールド対を示す。すなわち、mode.y及びmode.zであり、その各々には、テーブル9の演算の所定の組が割り当てられている。
【0112】
【表10】
Figure 0004346906
【0113】
その後、各演算は、メモリにおける対応するアドレスに配置されてもよい。テーブル11に、複数のメモリアドレスを示す。各アドレスには、対応する演算がある。また、制御ベクトルの定義の組が示されている。
【0114】
【表11】
Figure 0004346906
【0115】
テーブル12に、実行例を示す。
【0116】
【表12】
Figure 0004346906
【0117】
このように、変換モジュールのシーケンサ1200は、スレッド化されたモードビット202から得られたスレッド化された制御ベクトルを処理してゆき、対応する制御ベクトルのビットが“真(TRUE)”に設定された全てのROMアドレスを実行する。制御ベクトルは、ROMと同じサイズである。シーケンサ1200は、所定数のサイクル毎に“1”すなわち有効なビットを1つという速度で、任意の制御ベクトルを処理してゆくことができる。モードビット202を使用しないコマンドは単純であるため、その場でマイクロコードを生成することにより実行されてもよい。
【0118】
ユニークなモードビット202列でこのような状態を表現することにより、グラフィクス処理ハードウェアにおいて種々の演算の状態を判別するための複数のif−then節が不要となる。このようにして、性能が向上する。概念上、プログラム言語中のif節は、あたかもシーケンサ1200へと移行したようになる。これにより、モードビット202に示される“偽(FALAE)”状態の命令を即座にスキップすることになる。
【0119】
上述のように、モードビットにより識別される演算の種々の状態を取扱可能なコードセグメントが、ROM内に格納されている。一実施形態では、モードビットにより示される各演算を取り扱うために、個別のコードセグメントが取得されてもよい。その代わりに、可能となる各演算又は演算の組み合わせを取り扱うために、1つの包括的なコードセグメントが記述されてもよい。但し、このような大きなコードセグメントを演算の各々の組み合わせ用に作成するには、追加のコード空間が必要となるので、共通して使用される演算の組み合わせに対してのみ、コードセグメントをモジュール化するとよい。
【0120】
一旦、頂点が実行を開始するとモードビット202は変化しないので、制御ベクトルは、シーケンサに入る前に頂点毎に一度のみ生成されればよい。但し、演算が繰り返されうる光源処理等のいくつかの場合で、これに対する例外が生じることがある。最後の頂点の命令が検出されると、シーケンス終端(EOS)信号がアクティブになってもよい。これは、入力及び出力バッファの状態を変更するのに用いられてもよく、図28A及び図28Bを参照して後述する方式で、次のコマンドを開始可能とするために用いられてもよい。なお、EOS信号は、命令が取り扱われる方式と同様に宛先バッファを解放するために、パイプライン遅延される。図4Bを参照されたい。
【0121】
図14Aは、グラフィクス処理の際のスカラー及びベクトル頂点データの取扱を統合するために用いられる本発明の種々の機能コンポーネントを示すフローチャートである。図示の如く、機能上の一側面1440には、ベクトル頂点データを出力するために、処理モジュール、すなわち、加算器、乗算器等にベクトル頂点データを入力することが含まれる。機能上の他の側面1442では、ベクトル頂点データが、再びベクトル頂点データへと変換又はスメアリングされるスカラー頂点データを出力するベクトル処理モジュール、すなわち、加算器、乗算器等により処理される。
【0122】
機能上の別の側面1444では、ベクトル頂点データはマスクされて、スカラー頂点データへと変換され、その後、ベクトル頂点データ生成のために、メモリ、すなわち、レジスタ論理ユニット内に格納される。機能上のさらに別の側面1446では、スカラー頂点データが、ベクトル処理モジュール、すなわち、加算器、乗算器等により抽出されて、その次に、スカラー処理モジュール、すなわち、逆論理ユニットにより処理される。スカラー処理モジュールは、スカラー頂点データをレンダリングする。このスカラー頂点データは、再びベクトル頂点データへと変換される。
【0123】
図14Bは、図5の変換モジュール52に対応した図14Aに示す本発明に係る機能コンポーネントとしてとりうる組み合わせ1451を示すフローチャートである。なお、機能上の側面1444,1446は、図4Bを参照して上述したものと同様の方式で対応づけられた遅延を有していてもよい。図14Cは、図14Aに示した本発明に係る機能コンポーネントとしてとりうる別の組み合わせ1453を示すフローチャートである。
【0124】
マルチプレクサは、図14A乃至図14Cの機能モジュールにて、ベクトル頂点データからのスカラー頂点データの抽出を実行してもよい。また、このようなマルチプレクサは、様々な機能モジュールによる処理前に必要とされるあらゆるデータ・スウィズリングを担当してもよい。一実施形態では、マルチプレクサは、ベクトル頂点データを渡すとともに回転させることが可能で、他の処理用のALUのような他のグラフィクス処理モジュールに依存していてもよい。別の実施形態では、マルチプレクサは、代償なしに、属性を独立して任意に再設定可能であってもよい。
【0125】
図14Dに、特定用途向けIC(ASIC)等のハードウェア実装によるグラフィクス・パイプラインでのグラフィクス処理の際に、変換システムがブレンディング(blending)あるいはスキニング(skinning)処理を実行するように適合した方法を示す。パイプライン処理の際、処理1470では、複数の行列、複数の重み値(その各々が行列の1つに対応)、及び頂点データが取得される。なお、法線(normal)の頂点データには、追加の行列の組が必要であってもよい。
【0126】
次に、処理1472では、複数の積の和が算出される。なお、各積は、頂点データ、行列の1つ、及び該行列に対応した重みの乗算により算出される。そして、処理1474にて、このような積の和が、さらなる処理のために出力される。
【0127】
概略すると、以下の積の和が算出されることになる。
【0128】
式#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
s=[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=投影行列
s=表示用の画面ベクトル
O=ビューポート・オフセット
S=ビューポート・スケール
なお、上述の重み値wiを表すには、多くの方法がある。例えば、式#1及び式#2にて、i=1…(x−1)で、wx(wiにてi=x)として、式1−Σwiにより算出されてもよい。このように重みwiを表すことにより、重みwの総和を確実に1にすることができる。
【0129】
一実施形態では、行列には、モデルのビュー行列(view matrix)が含まれていてもよく、積の和(v’)が、光源処理によるさらなる処理のために出力されてもよい。式#1を参照されたい。また、この積の和(v’)は、合成行列(C)を用いることにより、表示の目的で、他の積の和(vs)を生成するのに用いられてもよい。式#3を参照されたい。さらに、行列には、逆行列(I)が含まれていてもよく、頂点データには、法線ベクトルデータ(n)が含まれていてもよい。このような場合には、追加の処理には、光源処理が含まれていてもよい。式#2を参照されたい。
【0130】
図15は、本発明の一実施形態による光源処理モジュール54を示す図である。図示の如く、光源処理モジュール54には、変換モジュール52による頂点データの出力先であるバッファ402が含まれている。図示の如く、バッファ408は、経路1501により光源処理モジュール54をバイパスする。さらに、コンテクストメモリ1500及びマイクロコードROMメモリ1502が、光源処理モジュール54に接続している。
【0131】
光源処理モジュール54は、フォグ及びポイントパラメータに加えて、光源処理を取り扱うように適合している。実際の光源処理モジュール54は、バッファのバイパス経路1501を制御し、拡散、点のサイズ、及び鏡面出力色(specular output colors)、並びにフォグ値(fog value)を算出する。なお、光源処理モジュール54は、変換モジュール52と同じモードビット202を用いている。
【0132】
さらに、光源処理モジュール54は、変換モジュール52よりも低い精度でよく、トリ・ワード(tri-words)構成の22ビットの浮動小数点値(1.8.13形式)を処理する。第3のバッファ408のデータが128ビットであるため、それには、光源処理モジュール54を迂回するバイパス経路1501が利用される。光源処理モジュール54はイベント駆動式であり、図4A及び図4Bを参照して上述した変換モジュール52と同様の方式で、3つのスレッドを同時に処理する。なお、光源処理モジュール54には、外部からのコマンド起動許可が必要であってもよい。
【0133】
図16は、本発明に係る一実施形態による図15の光源処理モジュール54の機能ユニットを示す図である。図示の如く、頂点データを取得するために変換システムに接続するように適合した入力バッファ402が含まれている。上述のように、入力バッファ402には、第1の入力バッファ404、第2の入力406、及び第3の入力バッファ408が含まれている。第1のバッファ404、第2の入力バッファ406、及び第3の入力バッファ408の入力は、変換モジュール52の出力に接続している。第3のバッファ408の出力は、バイパスするために、遅延1608を介して光源処理モジュール54の出力に接続している。
【0134】
さらに、第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の出力に接続している。
【0135】
次に、ALU1614の出力に接続した入力と、ALU1614の第1の入力に接続した出力とを有する第1のレジスタユニット1618が設けられている。第2のレジスタユニット1620は、ALU1614の出力に接続した入力を有する。また、このような第2のレジスタ1620は、MLU1610の第1の入力と第2の入力とに接続した出力を有する。
【0136】
また、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と同様の方式で、スカラー頂点データをベクトル頂点データへと変換するようになっている。
【0137】
最後に、メモリ1500は、MLU1610の複数の入力の少なくとも1つ及び演算論理ユニット1614の出力に接続している。特に、メモリ1610には、MLU1610の第1及び第2の入力に接続した読取端子がある。さらに、メモリ1500には、ALU1614の出力に接続した書込端子がある。
【0138】
このメモリは、入力バッファ402、MLU1610、ALU1614、第1のレジスタユニット1618、第2のレジスタユニット1620、及びLLU1622に関連して頂点データ処理用に使用するための複数の定数及び変数を格納している。
【0139】
図17は、本発明に係る一実施形態による図16の光源処理モジュール54のMLU1610を示す図である。図示の如く、光源処理モジュール54のMLU1610には、並列配置の3個のマルチプレクサ1700が含まれている。処理の際、本MLU1610は、2つの3要素ベクトルの乗算、又は1つの3要素ベクトルを渡すことに適合している。3要素ベクトルの乗算は、内積又は平行乗算(parallel multiply)によりなされてもよい。テーブル13に、光源処理モジュール54のMLU1610が実行可能な処理を示す。
【0140】
【表13】
Figure 0004346906
【0141】
テーブル14に、光源処理モジュール54のMLU1610の入力A及びBとして取りうるものを示す。
【0142】
【表14】
Figure 0004346906
【0143】
図18は、本発明に係る一実施形態による図16の光源処理モジュール54のALU1614を示す図である。図示の如く、ALU1614には、並列/直列配置された3個の加算器1800が含まれている。実際のALU1614は、2つの3要素ベクトルを加算可能、又は1つの3要素ベクトルを渡すことができる。テーブル15に、光源処理モジュールのALU1614が可能な種々の演算を示す。
【0144】
【表15】
Figure 0004346906
【0145】
テーブル16に、光源処理モジュール54のALU1614の入力A及びBとして取りうるものを示す。
【0146】
【表16】
Figure 0004346906
【0147】
図19は、本発明に係る一実施形態による図16の光源処理モジュール54のレジスタユニット1618,1620を示す図である。図示の如く、各レジスタユニット1618,1620は、2組のレジスタ1900を有し、各レジスタ1900は、対応するマルチプレクサ1902の第1の入力に接続した出力、及びマルチプレクサ1902の第2の入力に接続した入力とを有する。
【0148】
光源処理モジュール54のレジスタユニット1618,1620は、ALU1614用の2つのレジスタ及びMLU1610用の2つのレジスタに分割されている。一実施形態では、レジスタはスレッド化されている。レジスタユニット1618,1620は、書込アドレスが読取アドレスと同じである場合には、入力から出力へのバイパス経路により、待ち時間が0となる。
【0149】
図20は、本発明に係る一実施形態による図16の光源処理モジュール54のLLU1622を示す図である。LLU1622は、光源処理モジュール54の光源処理ユニットである。光+素材の色の乗算に後で用いられる光源処理係数を算出するのは、スカラーブロックである。LLU1622には、2つのMAC、1つのインバータ、4つの小メモリ、及び1つのフラグレジスタが含まれている。
【0150】
フラグレジスタは、光源処理の式の条件部分を実装するのに用いられる。出力は、環境、拡散、及び鏡面係数である。スカラーメモリには、鏡面近似に用いられる変数、及び定数が含まれている。各メモリの第1の位置には、1.0(ctx0及びctx2に対して)及び0.0(ctx1及びctx3に対して)が含まれている。一実施形態では、これらは、ハードワイヤ化されていてロード不要である。
【0151】
実際のLLU1622では、式:(x+L)/(M*x+N)が基本的に実装されている。この式は、鏡面光源処理項(specular lighting term)を近似するのに用いられる。LLU1622への入力は、光源処理モジュール54のALU1614からのものであり、光源処理の式で用いられる内積である。上述のように、図16に関して、LLU1622及びMLU1610間に、係数をMLU1610が必要とするまで一時的に記憶する出力FIFO1626がある。一実施形態では、このようなFIFO1626は、遅延1608,1624、及びレジスタ1618,1620とともにスレッド化されていてもよい。色の素材としてとりうるものの処理により、拡散及び鏡面出力がMLU1610で使用済みとなる時は未知である。
【0152】
光源処理モジュール54はR,G,B要素のみを処理するので、拡散出力のアルファ要素を処理するために特別に適合したハードウェアが設けられる。このように特別に適合したハードウェアは、2種のアルファ要素、すなわち、vtx color0 α[Tbuffer]、及び、格納されたctx α[Ctx store]を出力可能である。上述のα要素の選択は、モードビット202により制御される。
【0153】
処理の際、LLU1622は、光源処理の環境(Ca)、拡散(Cde)、及び鏡面(Cs)係数を算出する。そして、これらの係数は、環境、拡散、及び鏡面色で乗算されて、頂点の色に対する光の寄与分が得られる。テーブル16Aには、LLU1622により取得された入力のリストと、環境(Ca)、拡散(Cde)、及び鏡面(Cs)の光源処理係数を得るために実行される計算とが含まれている。なお、LLU1622を実装するのに、所望のハードウェア構成が用いられてもよい。一実施形態では、図20に示す具体的構成が用いられてもよい。
【0154】
【表17】
Figure 0004346906
【0155】
上述のように、頂点データ自体によって、あるいは、頂点データから得られた任意の結果によって、頂点シーケンサを制御するモードビットが必ずしも変更されるわけではない。頂点データが頂点処理を変更できるように、フラグレジスタ1623を用いたLLU1622が設けられている。フラグが計算の出力制御で指定されている場合には、このフラグレジスタでビットを真(TRUE)に設定することにより、計算結果の0.0へとクランプ可能となる。その他に、フラグレジスタ1623は、レジスタ書込のために書込マスクを設定するのに用いられる。
【0156】
フラグレジスタ1623は、性能上の代償なく、if/then/elseを実行して光源処理の式で0.0にクランプするために、LLU1622内に設けられている。種々のオペランドの符号ビットにより、フラグが設定されてもよい。テーブル16Bに、フラグレジスタ1623のフラグが設定されてクランプがなされる方式を示す。
【0157】
【表18】
Figure 0004346906
【0158】
図21は、本発明に係る一実施形態による図16の光源処理モジュール54に関連したフラグレジスタ1623の構成を示す説明図である。フラグレジスタ1623には、8つの1ビットフラグが含まれ、ALU(IFLAG)又はMAC0(MFLAG)出力の符号ビットにより設定される。
【0159】
LLU1622が、スカラー値をMLU1610へ出力するとき、そこで3ワードへとスメアリングされ、フラグレジスタのためのマスクを指定する。レジスタ&マスクが真であれば、0.0が出力となる。テーブル17に、環境、拡散、及び鏡面属性を出力するのに用いられる図21の種々のフラグを示す。
【0160】
【表19】
Figure 0004346906
【0161】
鏡面項に用いられる近似値は負となりうる。そこでは、実際のcosθ**nは、0.0となる。結果として、クランプ処理を実行する必要がある。このために、T,Uフラグが用いられる。テーブル18に、LLU1622の機能論理ユニット(FLU)1621が可能な種々の演算を示す。図20を参照されたい。
【0162】
【表20】
Figure 0004346906
【0163】
図22は、本発明に係る一実施形態による図16の光源処理モジュール54に関連したマイクロコードフィールドの説明図である。図示の如く、光源処理モジュール54のマイクロコードは、33フィールドとされ、全体のサイズが85ビットになっている。フィールドは、ユニットのデータフローと整合するように遅延させられる。MLUの処理は遅延0でなされ、ALUの処理は遅延1でなされ、RLU、LLUの出力処理は遅延2でなされる。各遅延は、3サイクルに相当する。
【0164】
図23は、本発明に係る一実施形態による図16の光源処理モジュール54に関連したシーケンサ2300を示す図である。図示の如く、光源処理モジュール54のシーケンサ2300には、処理動作の複数のモード状態を示すモードビット202を取得するのに適合した入力バッファ2302が含まれている。また、それぞれモード状態に対応して処理動作を実行するようになっているコードセグメントを格納可能なメモリ1502が含まれている。
【0165】
シーケンスモジュール2306は、モードビットから得られた制御ベクトル2305に基づいて、メモリ1502内の複数のアドレスを特定するために、メモリ1502及びバッファ2302間に接続されている。さらに、シーケンスモジュール2306は、光源処理モジュール54を機能させるのに用いられうるコードセグメントを取得するため、メモリ1502内のアドレスにアクセスするように適合している。
【0166】
光源処理モジュール54のシーケンサ2300は、変換モジュール52のそれと同様である。処理の際、光源処理モジュール54のシーケンサ2300は、スレッド化されたモードビット202から得られたスレッド化された制御ベクトルを処理してゆき、対応する制御ベクトルのビットが“1”に設定された全てのROMアドレスを処理する。制御ベクトルは、ROMが有するワードと同じビット数になっている。シーケンサ2300は、全スレッドについて、所定数のサイクル毎に“1”すなわち有効ビットという速度で、任意の制御ベクトルを処理してゆく。モードビット202を使用しないコマンドは、実行中のマイクロコード生成により実行される。光源処理モジュール54のシーケンサ2300と変換モジュール52のシーケンサ1200との主要な相違点は、光源処理モジュール54のシーケンサ2300が、ループバックして8回まで光源処理コードを実行可能であるということである。
【0167】
光源処理モジュール54のシーケンサ2300は、新規の頂点の各々につき0から開始してマイクロコードの最後で1インクリメントされる光カウンタを有する。モードビット202のLISフィールドの照合ビットフィールドが“1”になっている場合、シーケンサ2300は、元に戻って光源処理マイクロコードブロックを再び最初から開始する。これは、LISフィールドが0になるか、又は8つの光が処理されるまで続く。色の蓄積(color accumulation)は、拡散及び鏡面色を格納するALUレジスタを(光毎に)インクリメントすることによりなされる。自動メモリアドレスのインデックス化(indexing)は、光カウンタを用いて、各光について適切なパラメータを取得することによりなされる。
【0168】
図24は、本発明に係る一実施形態における変換及び光源処理モジュール52,54が対応するバッファに関連した入力及び出力を制御可能な方法を示すフローチャートである。図示の如く、処理2420では、第1のバッファの組のバッファにて最初に頂点データが取得される。頂点データが取得されるバッファは、ラウンドロビンシーケンスに基づく。
【0169】
次に、処理2422では、第2のバッファの組の空のバッファが、これもまたラウンドロビンシーケンスに基づいて特定される。変換モジュール52は、第1のバッファの組と第2のバッファの組との間に接続されている。第2のバッファの組の空のバッファが特定されると、変換モジュールで頂点データが処理され、変換モジュールから、第2の組のバッファのうちの特定された空のバッファへと出力される。処理2424及び2426を参照されたい。
【0170】
同様に、処理2428では、第3のバッファの組のうちの空のバッファ、又はメモリ内のスロット若しくは空間が、ラウンドロビンシーケンスに基づいて特定される。光源処理モジュール54は、第2のバッファの組と第3のバッファの組との間に接続されている。第3のバッファの組の空のバッファが特定されると、処理2430で示すように、頂点データが、光源処理モジュールで処理される。そして、頂点データは、光源処理モジュール52から、第3のバッファの組のうちの識別された空のバッファへと出力される。処理2432を参照されたい。なお、バッファ又はメモリ内のスロットの数は自由であり、変更可能である。
【0171】
図25は、図24の方法に従い、変換及び光源処理モジュール52,54が、対応するバッファの入力及び出力を制御可能な方法を示す説明図である。図示の如く、第1のバッファの組、すなわち入力バッファ400は、変換モジュール52へと送り、次に該変換モジュール52は、第2のバッファの組、すなわち中間バッファ404,406へと送る。第2のバッファの組404,406は、光源処理モジュール54へと送る。該光源処理モジュール54からメモリ2550へとドレインされてゆく。
【0172】
図25にて上述した方法を実行するために、頂点データの最初の取得時に、メモリ2550のスロット及び第1及び第2の組のバッファの各々に対して、ユニークな識別子が割り当てられる。さらに、各バッファの現在の状態が監視される。このような状態として、割当状態、有効状態、アクティブ状態、又は処理済状態等があってもよい。
【0173】
割当状態は、バッファ/スロットが、前段のグラフィクス処理モジュール、すなわち変換モジュール又は光源処理モジュールの出力を取得するように、既に割当がなされていることを示している。書込ポインタがバッファ/スロットをラウンドロビンシーケンスで走査するとき、割当状態におけるバッファ/スロットにより、このような書込ポインタが次のバッファ又はスロットへとインクリメントされる。
【0174】
バッファ/スロットは、有効状態であれば、頂点データを取得するのに利用可能である。一方、アクティブ状態は、バッファ/スロットが現在実行状態であること、又は頂点データを取得していることを示す。このアクティブ状態は、読取ポインタがインクリメントされた後、スレッドが処理されるまで維持され、バッファ/スロットが有効状態とされる。なお、第1のバッファ400の組は、それらを割り当てる前段のグラフィクス処理モジュールがないので、常に有効状態になっている。
【0175】
次に、状態シーケンスの例を説明する。第1のバッファ400の組における頂点データと、新規のコマンドビット200の組とを取得すると、このようなバッファは有効状態とされ、その後、第2のバッファ402,404の組の1つが、変換モジュール52の出力に備えて割当状態になる。
【0176】
第2のバッファ404,406の組が、いずれも割り当てのために利用不能であれば、第1のバッファ400の組のバッファ内の頂点データは、処理不能である。さらに、実行されるべきコードセグメントが、同時に実行される他のコードセグメントに干渉するかどうかを決定するために、検査が行われてもよい。そうした場合、第1のバッファ400の組のバッファ内の頂点データは、処理されずに、ストール状態が開始する。
【0177】
第2バッファ404,406の組の1つが割当状態になった後、第1のバッファ400の組のバッファは、アクティブ状態になる。変換モジュール52が実行を終了すると、第2のバッファ404,406の組のバッファが読み取られて、有効状態になる。これらの状態変化は、頂点データが第2の組404,406とメモリ2550のスロットとの間で転送される際に、同時に実行される。
【0178】
図25Bに、セットアップモジュール57及び探査モジュール58を備えたラスタライザ・モジュール56を示す。ラスタライザ・モジュール56は、交互になされるエリアベースのラスタ化を実行するのに適合している。特に、複数のポリゴン定義(polygon-defining)検出点が、プリミティブ上に、あるいはその近傍に位置している。それ以後、直線の式(line equation)がそれらの点にて評価されて、どの画素がプリミティブ内に位置するかが判別される。処理の際、この評価は、効率化のために、点が交互に移るようにして繰り返される。さらに、ラスタライザモジュール56は、クリッピング手順なしに動作するように適合していてもよい。
【0179】
図26に、ラスタ化モジュール56のセットアップモジュール57の図を示す。図示の如く、セットアップモジュール57には、所望の浮動小数点計算を実行するために、ルーティングデータ及び適切な機能ユニットに対する制御信号を取り扱う制御部61が含まれている。プリミティブシーケンサ62は、頂点のシーケンスを三角形、線、又は点へと転換する処理を行う。さらに、浮動小数点データパス部64には、マルチプレクサと、セットアップユニット内で必要な数値演算を実行する浮動小数点演算ユニットとが含まれている。
【0180】
引き続き図26を参照すると、出力形式調整部63は、境界の傾き及び境界値の内部浮動小数点形式を、ラスタライザに適した整数形式へと変換する処理を行う。これは、ラスタライザが整数値のみで動作するためである。無論、代替的な実施形態では、ラスタライザが浮動小数点を使用することとして、出力形式調整部63を不要としてもよい。
【0181】
処理の際、出力形式調整部63は、ブロック浮動小数点変換を実行する。周知の通り、所与の数字すなわち2.34e10について、浮動小数形式はその仮数(2.34)及び指数(10)を管理する。ブロック浮動小数点変換は、実質的に、指数が同じになるように、入力データの仮数の小数位を操作する。このために、指数がラスタライザ・モジュール56で処理される必要はない。
【0182】
図26Aは、図25Bにおけるラスタライザ・モジュール56のセットアップモジュール57により算出される種々のパラメータを示す説明図である。このようなパラメータは、ラスタライザ・モジュール56が関連した機能を実行するのに必要である。プリミティブ2600を取得すると、セットアップモジュール57は、プリミティブ2600の傾き2601、開始位置2602、及び開始値2604の3つの値を算出する。
【0183】
傾き2601は、ラスタ化の際に用いられるプリミティブ2600の境界の直線の式のための係数を生成するのに用いられる。例えば、傾き2601は、以下の式#4及び#5を用いて算出されてもよい。
【0184】
式#4及び#5
slopeA=y0−y1
slopeB=x1−x0
ここで、y0、y1、及びx0、x1は、図26Aに示された頂点の座標である。
【0185】
なお、傾きは、頂点の座標を用いて回転演算(rotation operation)等で算出されてもよい。
【0186】
開始位置2602は、以下より詳細に説明するエリアのラスタ化のための開始ポイントを示す。開始値2604は、図26Aに示された斜線の三角形の面積に等しく、エリアベースのラスタ化の際に用いられる。このような開始値2604は、各ステップの傾きを加算しながら画面でのラスタ位置のステップが、ラスタ位置が境界上にある場合、正確にゼロになるように選択される。開始値2604の算出は、以下の式#6を用いてなされてもよい。
【0187】
式#6
starting_value=slopeA*(xs-x0)+slopeB*(ys-y0)
ここで、xs,ys=開始位置2602
slopeA,slopeB=図26Aに示す頂点の座標に基づく境界の1つの傾き
0,y0=図26Aに示す境界の頂点の1つの座標
なお、上記の値は、他の種類のプリミティブについて算出されてもよい。例えば、直線の場合、四辺の閉じた四角形について追加の傾きが算出される必要がある。このような傾きは、閉じた四角形の対向する側の傾きの逆数を用いることにより、容易に算出可能である。なお、追加の傾きの算出に加えて、直線のプリミティブの場合には、他の開始値が算出される必要がある。
【0188】
図27に、ラスタライザ・モジュール56が複数のプリミティブ(例えば三角形)の1つを処理する方法を示す。特に、最初に、ラスタライザ・モジュール56のセットアップモジュール57により、初期動作が実行される。プリミティブが取得されると、処理2700にて、図26Aの傾き2601を用いて、当業者に周知の方法で、直線について直線の式の直線式係数が求められる。周知の通り、三角形を定義するには、3つの直線の式が必要である。一方、直線のようなプリミティブは、4つの辺及び4つの直線の式で長方形又は平行四辺形として描画される。
【0189】
その後、処理2702では、いずれかのプリミティブの頂点が負のW−座標を有している場合、直線式係数が変更される。以下、この処理に関する追加の情報について図32を参照してより詳細に説明する。
【0190】
なお、ラスタライザモジュール56のセットアップモジュール57も、プリミティブの閉じた四角形を算出する。ほとんどの三角形について、閉じた四角形には、3つの頂点の最小値及び最大値が含まれる。直線については、閉じた四角形における平行四辺形の四隅が算出される。頂点が負のW−座標を有している三角形又は直線については、描かれるべき領域が、頂点の凸状の外殻(hull)を越えて延びる。
【0191】
OpenGL(登録商標)のコマンドの1つに、切り取り長方形(scissor rectangle)があり、これは、それより外側には描かれないという境界を規定するものである。ラスタライザ・モジュール56のセットアップモジュール57は、閉じた四角形とシザー長方形との共通部分を算出する。切り取り長方形は長方形であるので、追加として4つの式が提供される。なお、切り取り長方形に対応した直線の式は、ありふれた形式、すなわち水平又は垂直を有する。
【0192】
さらに、3次元空間では、近平面(near plane)と遠平面(far plane)とは平行であり、視線に対して垂直である。プリミティブが三角形の場合、3つの頂点が含まれ、これらがいずれかの配置の平面を定義する。プリミティブの平面並びに近平面及び遠平面の共通部分には、2つの直線が含まれ、これらの直線に対応する2つの直線の式が伴う。
【0193】
従って、各プリミティブは、三角形又は直線の形式のいずれかをとるかに応じて、それぞれ9又は10の直線の式を有する。また、三角形の場合には、このような直線の式には、三角形を定義する3つの直線の式と、閉じた四角形を定義する4つの直線の式と、プリミティブが存在する平面並びに近平面及び遠平面の共通部分を定義する2つの直線の式とが含まれる。
【0194】
引き続き図27を参照すると、処理2704にて、プリミティブ上又はその近傍の複数の点を配置することにより処理が進行する。図26Aに示すように、開始位置2602により、このような配置が指定される。このような点は、閉じた凸領域を規定しており、該凸領域の隅に位置する。図27Aに、凸領域2707(例えば長方形)を囲むこのような検出点2705を示す。一実施形態では、このような長方形は、8×2画素の大きさであってもよい。さらに、それらの点は、プリミティブの上端となる頂点を囲むように最初に配置されてもよい。オプションとして、これは、切り捨てを用いてなされてもよい。
【0195】
一旦、プリミティブが配置されると、探査モジュール58による処理、すなわち以下に述べるようにプリミティブの横列(row)を処理することにより処理2706にて開始される処理が継続する。各横列を処理した後、ジャンプ位置が検出されたかどうかが、判別2708にて決定される。ジャンプ位置は、次の横列の処理の開始位置であり、これについて以下詳細に述べる。判別2708にて、ジャンプ位置が検出されたと決定された場合、処理2710にて、凸領域を定義する検出点がそこに移動する。一方、ジャンプ位置が検出されないと決定された場合、処理は終了する。なお、代替的な実施形態では、縦列、対角線、又は他の任意の型の列が、横列の代替として、処理2706にて処理されてもよい。
【0196】
図28は、図27の横列処理2706に関連した本発明の処理を示すフローチャート。図示の如く、ポリゴン定義検出点が右へ移動したかどうか判別2801にて決定するために、処理2800にて検出点を算出することにより、処理が開始する。このような判別は、最も右の検出点の位置に基づいてなされる。最も右側の検出点が、プリミティブの1つ又は複数の境界の外側に位置していない場合、右方への移動が許可され、処理2802にて、現在位置の右側への位置(X及びY座標)が、スナップ位置として格納される。一方、最も右側の検出点の双方が1つ以上のプリミティブの外側に位置している場合、右方への移動は許可されず、処理2802はスキップされる。
【0197】
次に、処理2804にて、直線の式が凸領域(例えば長方形)で評価される。この評価には、それらの点がプリミティブ内にあるかどうかを決定することが含まれる。プリミティブ内にそれらの点が存在するかどうかに応じたこのような決定には、各直線の式を評価することにより各検出点にて正の値又は負の値となるかどうかを決定することが、含まれていてもよい。
【0198】
直線の式は、プリミティブの内部で正になるとともに外部で負となるように、表現可能である。境界の直上に画素が描かれるべき包含的境界(inclusive edges)は、ゼロと評価され、正として取り扱われる。排他的境界(exclusive edges) は、描かれるべきものではなく、開始時の直線の式の値から1の値を最初に減算することにより、負となりうる。このように、排他的境界上の画素は、正の0となる代わりに、負の値(−1)として評価される。これにより、検出点の解釈について、包含/排他の方式を無視し、直線の式の符号を調べればよいことになる。
【0199】
それらの点で直線の式が評価された後、判別2806にて、検出点の現在位置がジャンプ位置を占めているかどうかが決定される。なお、ジャンプ位置は、下部の2つの検出位置がいずれも境界の外にない場合にのみ、格納される。判別2806でジャンプ位置が検出された場合、処理2808にて、該ジャンプ位置が算出されて格納される(あるいは、以前に格納されたジャンプ位置があればそれと置き換えられる)。一方、そうでない場合には、処理2808はスキップされる。
【0200】
引き続き図28を参照すると、次に、判別2810では、最も左側の検出位置がいずれもプリミティブの境界の外側にあるかどうかが決定される。また、この処理には、最も左側の検出点での直線の式の評価が、正又は負の値であるかどうかを決定することを伴う。特に、9又は10の境界の式の係数を関係する検出点で算出すると、9又は10個の値は、9又は10個の符号ビットを有することになる。例えば、現在の側が完全に境界の外側にあるかどうかを決定するために、本発明により、2つの検出ポイントからの10個の符号ビットが、AND演算される。そして、いずれかのビットが残れば、両点はその境界の外側となる。
【0201】
最も左側の検出点が双方ともプリミティブの外側にあるわけではないと判別された場合には、左方に、考慮されるべきプリミティブのさらなる点が残っているものと決定され、処理2812にて、検出点は左へ移動する。判別2810にて、最も左側の検出点が双方とも実際にプリミティブの境界の外側にあると決定された場合、左方には、考慮されるべきプリミティブのさらなる点はもはや存在しないと決定される。次に、判別2814では、処理2802に由来するスナップ位置があるかどうかが決定される。
【0202】
判別2814にて、スナップ位置が存在しないと決定された場合、処理が完了する。一方、スナップ位置が存在する場合、処理2816にて、検出点は、スナップ位置へと移動する。その後、処理2804〜2812と同様の処理が実行されて、プリミティブの右側がマッピングされる。これは、直線の式が凸領域における点で評価されることにより、処理2818で開始する。
【0203】
それらの点にて直線の式が評価された後、判別2820にて、検出点の現在位置がジャンプ位置を占めるかどうかが決定される。判別2806にて、ジャンプ位置が検出されたと決定された場合、処理2822でこのジャンプ位置が算出されて格納される。一方、そうでなければ、処理2822はスキップされる。
【0204】
引き続き図28を参照すると、次に判別2824にて、最も右側の検出点は、双方ともプリミティブの外側にあるかどうかが決定される。最も右側の検出点の双方ともがプリミティブの外側にあるわけではない場合、右方に、考慮されるべきプリミティブのさらなる点が残っているものと決定され、処理2826にて、検出点は右へ移動する。判別2824にて、最も右側の検出点が双方ともプリミティブの境界の外側にあると決定された場合、右方には、考慮されるべきプリミティブのさらなる点はもはや存在しないと決定され、即時の処理が完了する。
【0205】
図28A及び図28Bは、プリミティブ2850について本発明の検出点が移動しうるシーケンスの説明図である。なお、様々な変更例として、それらの点が左方へ移動可能かどうかを判別2800にて決定して、最初に右へ進むことが含まれていてもよい。さらに、直線の式は、それらの点がプリミティブの内部又は外部のいずれにあるかを所望の方法で示すために定義されてもよい。
【0206】
繰り返しのループに進むことを防ぐために、本発明は、ラスタ化の際に全方向へ移動することとしている。最初の実装は、上から下へと進み、次へと下降する前に横列上の全ての凸領域へ進む。横列を上から下へと処理することで、右から左又は左から右へとステップしないようにすることにより、ループ化が防止される。
【0207】
上述の処理の例が、図27Aのポリゴン定義点P1,P2,P3,P4を参照して示されうる。処理の際、近接した検出点の対が調べられて、それらの方向へ進むことに意味があるかどうかが決定されてもよい。例えば、図27AにてP3及びP4の双方がポリゴンの境界の外側にある一方で、P1及び/又はP2がそうでなければ、明白に描画可能な内部領域は、右にではなく左にある。従って、検出点は右へは移動すべきでない。逆に、P3及びP4の双方が全境界の内側にあれば、描画可能な領域はP3及びP4を越えて存在し、右方へ移動することは適切である。実際に、P3及びP4が境界の外側になければ、右側へ移動することには意味がある。同じ論理が、P1及びP3により案内される上方への移動に、あるいは、P1及びP2により案内される左方への移動に、あるいは、P2及びP4に基づく下方への移動にも当てはまる。
【0208】
このように、上述の処理は、プリミティブ内部周辺における点により定義される凸領域を、検出点に案内されて移動又は移行する。それらの点により定義される凸領域は広くともよいので、多くの画素が同時に調べられる。使用の際、全検出点がプリミティブの全ての境界の内部にあれば、囲まれたがそのすべてが、必ず描画可能となる(凸のプリミティブを想定)。隅を検査することにより、すなわち、プリミティブの任意の領域を検査する能力が、内部か外部にあるか分割されていることにより、著しい利点がもたらされる。後者の場合にのみ、それらの点により定義される凸領域内の個々の画素が調べられる必要がある。このような場合、それらの点により定義される凸領域内の画素は、1つずつ検査されてもよく、該画素がプリミティブ内に存在するかどうか決定するための他の方法により検査されてもよい。さらに、どの境界が領域を分割してどれがそうでないのかを判別するのに必要なさらなる検査の量が検出点によって減少しうる。
【0209】
図29は、図27の横列処理動作2706に関連した本発明の交互になされる犂耕(boustrophedonic)処理を示すフローチャートである。図示の如く、最初に判別2900にて、以前の移動が第1の方向と第2の方向のいずれであったかが決定される。実際の以前の移動がなかったならば、デフォルトとして、以前の移動が想定されてもよい。判別2900にて以前の移動が第2の方向であったと決定された場合、直線の式は凸領域の点、例えば、図28の処理2804と同様の方式による処理2902における長方形にて評価される。
【0210】
引き続き図29を参照すると、次に、判別2904にて、長方形の第1の側の検出点が、双方ともプリミティブの境界の外側にあるかどうかについて決定がなされる。そうでない場合には、検査点は、処理2906にて第1の方向へ移動又は進む。長方形の第1の側の検出点が、双方ともプリミティブの境界の外側にあると決定されると、次に、判別2905にて、それらの点が下方へ移動可能かどうか、すなわち、現在の位置がジャンプ位置を占めるかどうかが決定される。そうであれば、処理2908にて、ジャンプ位置が算出されて格納される。その後、処理は完了する。
【0211】
一方、判別2900にて、以前の処理が第1の方向であったと決定された場合、処理2902〜2908と同様の処理が実行される。特に、処理2910にて、凸領域(例えば長方形)の点での直線の式が評価される。そして、判別2912にて、長方形の第2の側の検出点が、双方ともプリミティブの境界の外側にあるかどうかについて決定がなされる。そうでない場合には、検査点は、処理2914にて第2の方向へ移動又は移行する。長方形の第2の側の検出点が、双方ともプリミティブの境界の外側にあると決定されると、次に、判別2913にて、それらの点が下方へ移動可能かどうか、すなわち、現在の位置がジャンプ位置を占めるかどうかが決定される。そうであれば、処理2916にて、ジャンプ位置が算出されて格納される。その後、処理は完了する。
【0212】
図29Aは、図29の犂耕処理に関連して本発明の検出点がプリミティブで移動するシーケンスの説明図である。上述の犂耕的ラスタ化には、ハードウェアによりよい性能をもたらす所定の規定に従うシーケンスが含まれている。図示の如く、犂耕的ラスタ化により、往復して折り返される蛇行したパターンがもたらされる。例えば、水平犂耕シーケンスにより、1つの横列上の左から右へのプリミティブの三角形内の全画素が生成され、次の列の横列上の右から左というように生成されてゆく。このような折り返し経路により、確実に、ある生成された画素から直近に生成された画素への平均距離が比較的短くなる。
【0213】
直近に生成された画素の近傍の画素を生成することは、直近の画素群及び/又はそれらに対応するテクスチャ値が限られた大きさのメモリ内に保持されている場合に、重要である。犂耕シーケンスにより、このようなメモリに既にロードされている画素又はテクスチャ値がより高頻度で検出されるので、メモリのロードがあまり発生しない。
【0214】
オプションとして、ラスタ化に先立ってプリミティブを複数の部分に分割する少なくとも1つの境界が用いられてもよい。処理の際、それらの点は、各部分内で個別に移動してもよい。さらに、それらの点は、複数の部分の第2のものの中で移動する前に、複数の部分の第1のものの全体を移動してもよい。
【0215】
図30は、境界を用いて交互になされる犂耕処理を示すフローチャートである。オプションとして、境界を用いるかどうかの判別は、プリミティブの大きさに基づいてなされてもよい。図30に示すように、境界を取り扱う犂耕処理は、追加の処理3000以外は図27のそれと同様である。この処理3000では、プリミティブを複数の部分又は帯に分割する少なくとも1つの境界が、定義される。
【0216】
引き続き図30を参照すると、追加の判別3001は、プリミティブの全部分の完了後になされる。特に、判別3001では、近接した部分の開始位置が処理3006で検出されたかどうかが決定される。そうであれば、検出点により定義された凸領域は、処理3002にて、プリミティブの近接した部分の開始位置へ移動し、プリミティブの新規の部分について、処理3004〜3010が繰り返される。以下、処理3006での開始位置を決定することに関係するさらなる情報を図31を参照して詳細に説明する。
【0217】
図31Aは、図30における境界に基づく犂耕処理に応じて本発明の凸領域がプリミティブにて移動する処理を示す説明図である。図示の如く、処理される第1の部分は、プリミティブの最上部の頂点を含むものである。処理の際、左隣の部分が処理され、その後、近接した左隣の部分が処理されてゆき、左隣の部分がなくなるまで継続する。次に、第1の部分の右に隣接する部分が処理され、その後、近接した右隣の部分に近接するものが処理されてゆく。これは、右に隣接する部分の全てが処理されるまで継続する。なお、ユーザの要望に応じて、その他の種類の順序付け方式が用いられてもよい。
【0218】
図31は、図30の横列処理3006に対応した処理を示すフローチャートである。このような処理は、判別3118乃至3121以外は、図29の犂耕処理と同様である。判別3118及び3120の双方は、検出点のうち、いずれかの境界を通ったものがあるかどうかを決定するものである。検出点がまだ境界内にあると決定された場合にのみ、各ループが継続する。
【0219】
処理3119及び3121では、凸領域の検出点のうち、いずれかの境界を通ったものがあると、判別3118及び3120でそれぞれ決定された場合に、プリミティブの近接した部分の開始位置が求められて格納される。図31Aに示すように、このような開始位置3126の各々は、境界を越えて存在するプリミティブの部分における最上部の点となるように定義される。この位置を格納することにより、プリミティブの境界定義部分に近接したものに関して処理が繰り返された場合に、開始位置が得られる。
【0220】
なお、処理3119及び3121は、プリミティブの第1の部分が処理されている際に、双方とも実行される。図31には特に示されていないが、これらの部分を第1の部分の左へと処理する場合、このような処理の第1のもののみが実行される。一方、これらの部分を第1の部分の右へと処理する場合、このような処理の第2のもののみが実行される。すなわち、第1の部分の左へと処理する場合、開始位置は、現在処理中の部分の最も左の境界を越えた場合にのみ算出される。同様に、第1の部分の右へと処理する場合、開始位置は、現在処理中の部分の最も右の境界を越えた場合にのみ算出される。
【0221】
ラスタ化の際に境界を用いることにより、パイプライン処理の際に重要な問題が解決される。プリミティブが非常に幅広いと、1つの横列における画素に関連した記憶域が、限られた大きさのメモリに適合しないことがある。境界を用いたラスタ化により、三角形が、限られた幅の横列(又は縦列)に分割され、次の部分へ移行する前に、このような部分内の全画素を生成する。
【0222】
例えば、三角形は幅が100画素であるのに、限られた画素又はテクスチャメモリは、以前の20画素の情報を保持するだけであってもよい。画素のシーケンスを、10画素の垂直部分内に抑えることにより、以前及び現在の横列上の全画素をメモリに適合させることが可能である。このことは、境界定義部分内の犂耕シーケンスが、常に、現在の横列上の以前の画素(もしあれば)をメモリ内に有するとともに、その上の横列の画素(もしあれば)をメモリ内に有することを意味している。
【0223】
最も基本的なメモリシステムは、データブロックを、各ブロック当たり所定のオーバーヘッドで転送する。メモリシステムへのアクセスが小規模であると、このオーバーヘッドにより重大な影響を受ける。効率化のために、より大規模なアクセスが用いられ、ブロックの残りが次なる使用に備えて保持される。それ以上に、キャッシュメモリシステムは、これら複数の新しいブロックを保持して、メモリアクセスを回避可能とする確率を高める。
【0224】
本発明の犂耕シーケンスは、現在のラインの一端の直下にある画素を反転させたり取り扱ったりする場合に、単一保持ブロック(single-retained-block)コンセプトを利用している。さらに、犂耕シーケンスは、特定の大きさの部分にラスタ化を制限する場合に、キャッシュを利用している。特に、ある部分内の2本の走査線が、キャッシュに適合するはずなので、第1の走査線のキャッシュ記憶により、第2の走査線の全体に亘って利益がもたらされる。
【0225】
境界定義部分のシーケンス又は数について、制約は何もない。本説明は、垂直部分及び水平犂耕パターンの例を用いているが、同様の原理が、水平部分、垂直犂耕パターンに拡張されてもよく、斜行部分及びパターンにまで拡張されてもよい。一実施形態では、ストリング(例えば、横列、縦列、斜め等)の長さは、その各々が、当該ストリングが存在しているプリミティブの大きさ未満に制限されていてもよい。
【0226】
図32は、図27の処理2702に対応した処理を示すフローチャートである。この即時の処理は、眼の背後にあるプリミティブを取り扱うために設計されている。これら外にある部分により、次段のラスタ化処理で問題が生じる。このことを達成するために、その即時の処理は、投影用に(すなわち物体を透視図法で見るのに)通例用いられる変数Wを使用している。変数Wは、近くの物体を大きく、遠くの物体を小さくするように、他の座標X、Y及びZが分配された数である。変数Wは、投影中心と対応する頂点との距離を表している。
【0227】
図32に示すように、最初に、複数の頂点により定義されたプリミティブが取得される。このような頂点の各々には、W値が含まれている。プリミティブを取得すると、セットアップモジュールは、頂点に基づいて、プリミティブを特徴づける直線を定義する役割を果たす。処理3200を参照されたい。
【0228】
そして、判別3202にてW値が分析される。図示の如く、1つのW値が負である場合、負の値の頂点とは反対側の直線の式は、処理3204にて反転させられる。すなわち、直線の式の係数に−1が乗ぜられる。さらに、2つのW値が負である場合、正のW値の頂点と、負のW値の各頂点とを結ぶ各直線の式は、処理3206にて反転させられる。3つのW値が負である場合、除外条件3207が発生し、ここで、本発明はその三角形を除外する。さらに、どのW値も負でない場合、追加の処理は何もなされない。
【0229】
図32A乃至図32Cに、直線の式を反転させることが、画面のどの部分を処理するかに影響する様子を示す。図32Aに、どのW値も負ではなく、直線の式が変更されないままとなる場合を示す。図示の如く、プリミティブの内部は、このような場合に埋められる。
【0230】
図32Bに、1つのW値が負であるため、それに応じて直線の式が反転させられる場合を示す。図示の如く、この場合には、その頂点と反対側のプリミティブの部分が埋められる。特に、描画される部分は、三角形における−Wの頂点を共有した2つの辺とそれぞれ同一直線上にある2本の直線が境界となり、さらに、三角形における2つの+Wの頂点がある辺が境界となる。
【0231】
図32Cに、2つのW値が負であるため、それに応じて直線の式が反転させられる場合を示す。図示の如く、それらの頂点の反対側のプリミティブの部分が、図27乃至図32を参照して上述した方法及び/又は処理を用いて埋められる。すなわち、描画される部分は、三角形における+Wの頂点を共有する2つの辺と同一直線上にある2本の直線が境界となり、さらに、+Wの頂点に隣接している。
【0232】
このように、本発明は、上記3つの場合の全てを、取り扱うことが可能である。三角形の一部が近平面及び/又は遠平面を越えている場合、それら平面内の部分のみが描画される。三角形に負のZの頂点が1つ又は2つある場合、正しく+Zとなった部分のみが描画される。
【0233】
全頂点が画面外であり、三角形が眼の背後から遠平面を越えて延びているとしても、三角形内部にあるとともに画面内にあってZ値が近境界及び遠境界間となっていれば画素となる。本発明により、不良画素を探すのにほとんど時間を費やさなくなる。このことは、画面の境界又は近平面若しくは遠平面によるあらゆるクリッピングが、常に、容易に探索可能な画面上の凸領域となるために可能となる。
【0234】
埋められる領域の内部に開始点がない場合に、問題が生じることがある。最上部の頂点が画面外にあるか、又は、近平面若しくは遠平面によりクリッピングされた場合に、このことが起こりうる。この場合、探査段階は、描画される領域の最上部の点を、上部から開始して、探索する必要がある。これは、三角形の境界の傾き及びZの傾きの符号に導かれることにより、効率的に実行可能である。三角形の直線の式を調べて、それが描画領域の外側にあることとその理由を見出すことができる。それを外側とするのがどの境界及び/又はZ境界であるかがわかっている場合、どの方向へ進むとこの境界又はZ境界に近づけるかがわかる。垂直方向よりも水平方向を優先(選択可能な場合)させて移動すると、描画領域を探索することにより、描画可能な画素の最上部のものがあればそれが検出されることが保証される。また、この問題は、開いた外部(−W)三角形においても生じる。この場合には、描画領域は、3つの頂点全ての上に延びる。
【0235】
本発明の一実施形態では、探査は、三角形の上端から下端へと進む。開始点は、どのW値も負ではなく、最上部の頂点が切り取り長方形内にある場合には、三角形の最上部の頂点である。それ以外の場合には、切り取り長方形の最上部の点が選択される。探査は、常に切り取り三角形内で始まり、そこから外れることがないので、その領域が、切り取り三角形を越えて遠くに延びた境界に囲まれていても、三角形における切り取り長方形内の部分のみが、常に描画される。このように、単純な切り取り長方形のクリッピングが行われる。
【0236】
図33に、本発明の一実施形態によりアンチエイリアシング処理を採用した集積化グラフィクス処理実装例を示す。図示の如く、オンチップ処理モジュール3300は、画素断片プロセッサ3302へとデータを送出する。これら両者は、共通で単一の大きなメモリ3304を共有している。このメモリ3304は、オンチップであってもオフチップであってもよい。一実施形態では、オンチップ処理モジュール3300には、頂点取得、変位マッピング、変換、光源処理、画素シェーディング(テクスチャマッピングを含む)モジュールが、画素読取/書込モジュールとともに含まれていてもよい。画素断片プロセッサ3302には、ダウンフィルタリング(downfiltering)・モジュールが含まれていてもよい。頂点取得、変位マッピング、画素のシェーディングのためのテクスチャマッピング、画素読取/書込、及びダウンフィルタリングには、いずれもメモリ3304へのアクセスが必要となる。
【0237】
本発明の一実施形態では、フィルタリング処理は、グラフィクス・パイプラインのいくつかの段階で実行されてもよい。変位マップは頂点変位を提供するために、アクセスされてフィルタリングされてもよく、テクスチャは画素のシェーディングのためにフィルタリングされてもよく、アンチエイリアシングサンプルは画素の色を生成するためにフィルタリングされてもよく、画素は映像表示用にフィルタリングされてもよい。このように、図1B−3における個別のフィルタリングロジック及びメモリアクセスは不要となりうる。なお、映像表示用の画素の拡大縮小、映像の再サンプリング等の他の機能が、グラフィクス・パイプラインのフィルタリング・ハードウェアを再利用してもよい。
【0238】
なお、本発明のアンチエイリアシング機能は、様々な形態をとりうるものであり、ユーザの要望に応じて様々となりうる。このような変形例について、以下説明する。なお、このような変形はオプションであり、説明のためのみのものである。このように、以下の例は限定として解釈されるべきではない。
【0239】
スーパーサンプリング
アンチエイリアシング技術の一つに、スーパーサンプリングがある。スーパーサンプリングには、表示されるべき画素よりも多くのサンプルを取得することが含まれる。このようなサンプルは、各画素内の複数のサブ画素(subpixel)位置で取得される。各画素に表示される色及び輝度は、複数のサブ画素サンプルの組み合わせによるものである。
【0240】
スーパーサンプリングにより得られるアンチエイリアシングの質は、サブ画素サンプルの数及び位置の影響を受ける。一般に、1画素当たりのサブ画素が多くなると、アンチエイリアシング効果が高まる。サンプルは、例えば1画素当たり2×2、4×4、又は8×8のサブ画素サンプルといった規則的なサブ画素格子上に位置する。また、サンプルは、不規則又はジッター・パターンに配置されてもよい。これによると、所与のサブ画素数にて、より満足な画像の結果が生成されることになる。
【0241】
このように、スーパーサンプリングは、表示される画像部分に対応した各画素位置上又はその周辺でとられるデータサンプル数を増やすことにより、表示配列の空間量子化を向上させるアンチエイリアシング技術であり、これら複数のデータサンプルの結果としての値を組み合わせて、各画素位置の最終的な表示値を取得する。通例、各スーパーサンプルには、画素内の基準点(スーパーサンプル毎に1つの基準点)に関する色値(カラー又はグレースケールシステム用)と、Z値(画素の深度(depth)を表し、隠れた表面を除去するのに用いられる)とが含まれている。
【0242】
既知のスーパーサンプリング技術に従って、画素内の各基準「サンプル」点の色値及びZ値が、最初にプロセッサへと送られる。このプロセッサは、各サンプルの色値を算出し、対象の各サンプルのZ値を格納済の値と比較する。それに応じて、新しく対象となった各サンプルの色値が更新される。
【0243】
アンチエイリアシングの他の形態に対するスーパーサンプリングの利点は、点、線及びポリゴンを、スーパーサンプルバッファへと任意の順に描画しても、最終的に同一の画像が得られるということである。
【0244】
マルチサンプリング
マルチサンプリングは、画素毎に複数の副画素サンプル用に記憶域を提供している点で、スーパーサンプリングと類似している。マルチサンプリングは、オブジェクトがレンダリングされる際に、サンプル毎に個別の色が算出されるのではなく、画素ごとに単一の色が算出されて対象となる全てのサブ画素のサンプルに使用される点で、スーパーサンプリングとは異なっている。
【0245】
図34に、本発明の一実施形態によるマルチサンプリング例3400を示す。図示の如く、第1の色3404の第1のオブジェクトに部分的に覆われているとともに、第2の色3402の第2のオブジェクトに部分的に覆われた画素3401が含まれている。この例では、マルチサンプリングにより、複数のサンプルが合成された単一の色が割り当てられた画素がもたらされる。これは、11個及び5個のサンプルとしてそれぞれ表示される第1及び第2の色が混ざったものである。アンチエイリアシングがなされなければ、当該画素は、その全てが第1の色になってしまう。これは、第1の色が画素の中心を覆っているためである。
【0246】
マルチサンプリングに関するさらなる情報については、アケリイ(Akeley)、カート(Kurt)、リアリィティエンジン・グラフィクス(RealityEngine Graphics)、「シググラフ(Siggraph)の手順1993」、1993年8月、ページ109-116、及びジョンS.モントレイ、ダニエルR.ハウム、デビットL.ディグナム及びクリストファJ.ミグダル、インフィニットリアリィティ、「リアルタイム・グラフィック・システム」、コンピュータ・グラフィック&インタラクティブ技術第24回年次会議議事録、1997、ページ293-302を、参照されたい。これらは、ここに引用文献として組み込まれる。
【0247】
断片ベースのアンチエイリアシング(「A−バッファ・アンチエイリアシング」)
第3のアンチエイリアシング手法では、画素毎に複数の断片が格納される。断片は、画素に対する表面の寄与であり、通例、色、深度値(傾きを含んでもよい)、及び画素のどの部分が覆われるかを示す情報からなる。断片ベースの手法では、各画素において完全又は部分的に可視の表面が監視され、画素の最終的な色がこれら断片の加重平均として算出される。
【0248】
断片ベースの手法に固有の問題は、被覆範囲をどのように表すかということである。断片毎に、被覆された部分を監視しておくことは、費用のかからない方法であるが、画素の近傍で隣接した2つの三角形の影響を、画素における同じ副領域を覆う2つの三角形の影響に対して識別することが難しい。例えば、所与の画素について、三角形Aがその35%を被覆し、三角形Bがその50%を被覆している場合に、三角形Bが三角形Aと同じ35%を被覆してさらに15%を被覆しているのかどうかは不明である。三角形Bの50%の被覆範囲は、三角形Aの35%の被覆範囲と完全に異なっている場合もあり、被覆範囲がこれらの場合の中間であるかもしれない。1つの三角形の頂点近傍にある画素の被覆部分を算出することは、多くの場合難しい。このようなところでは、2つの境界の被覆値が干渉し合う。
【0249】
被覆範囲を扱うためのより強力であるが高価な方法として、マスクがある。マスクは、特定のサブ画素サンプルの位置又は画素のサブ領域に対応可能ないくつものビットを備えている。
【0250】
マスクビットが、サブ領域に対応している場合、マスク中に設定されるビットの数は断片の被覆範囲にほぼ比例している。例えば、断片が画素の52%を被覆していて、マスクが合計で16ビット構成である場合、これらのビットの9ビットがセットされて7ビットがクリアされる。断片により被覆された画素の領域に対して、サブ領域が最も密接に対応しているビットが、設定されるべきものとして選択される。
【0251】
画素マスクを利用する代表的な方法として、A−バッファ・アルゴリズムがある(「A−バッファ:アンチエイリアシング潜表面(Hidden Surface)法」、ローレン・カーペンタ、シググラフ、1984、ページ103-108を参照されたい。これは、引用文献としてここに組み込まれる)。しかしながら、この方法によると、画素ビットマスクは、必然的に低速となるソフトウェア処理にて生成される。画素マスクを用いた他の方法として、参照テーブルを利用するものがある(「サブ画素マスクを伴った新しい単純で効果的なアンチエイリアシング」、アンドリアス・シーリング、シググラフ、1991、ページ133-141を参照されたい。これは、引用文献としてここに組み込まれる)。このような参照テーブルの方法では、画素マスクの形態としてとりうるもの全ては、三角形の辺の傾き(dex)及び画素の中心からその辺までの距離(e)に応じて生成可能であり、予め参照テーブル内に格納されている。ここで、画素マスクは、参照テーブルを、三角形の探査演算の実行時に算出される上記の2つの情報に対してインデックスすることにより、ジョアン・ピネダ(Juan Pineda)により提案された方法によって(「ポリゴン・ラスタライゼーションのためのパラレル・アルゴリズム」、シググラフ、1988、ページ17-20を参照されたい。これは、引用文献としてここに組み込まれる)、生成される。
【0252】
これらのアンチエイリアシング方式は、いずれも、画素に重複する全てのプリミティブに対して、色及びZ情報を取得しようとするものである。これには、画素のどの部分がそれぞれ被覆されているのかを識別することが含まれる。これらのどの方式にも、画素の最終的な色を決めるのに、フィルタリング演算(すなわち色の寄与度の加重平均)が必要とされる。このフィルタリングは、画素が書き込まれる度に、あるいは、色の読取時に必要とされて、実行されてもよい。
【0253】
このようなアルゴリズムについてのさらなる情報として、ステファニー・ウイナー、マイケル・ケリー、ブレント・ピアス、ビル・リバード及びアレックス・イエンによる「修正されたA−バッファ・アルゴリズムを用いるアンチエイリアシングのハードワイヤー・アクセレイト・レンダリング」を参照されたい。コンピュータ・グラフィック&インタラクティブ技術第24回年次会議議事録、1997、ページ307-316は、ここに引用文献として組み込まれる。
【0254】
断片ベースの方法では、断片毎に1つのZ値が保持されうる。そのZ値は、画素の中心でサンプリングされた表面のZ面の値であってもよい。なお、断片の重心で算出されてもよい。Zの傾き値をも格納する高度な方法によれば、副画素の形状に、デプスをより正確に寄与させることが可能となる。他の変形例としては、いくつものサンプル位置に、複数のZ値を格納するというものがある。
【0255】
また、スーパーサンプリング、マルチサンプリング、及び断片ベース方式の各側面を組み合わせた複合アンチエイリアシングシステムも可能である。
【0256】
さらに、アンチエイリアシングは、ある場面の全オブジェクトに対して適用されてもよく、特定のオブジェクトに対して個別に有効とされてもよい。境界のアンチエイリアシングは、場面全体のアンチエイリアシング、例えば、ポリゴン状オブジェクトのある場面にアンチエイリアシングされた線をレンダリングすることと組み合わされてもよい。
【0257】
さらに、アンチエイリアシングアルゴリズムは、サンプルの被覆範囲又は断片のマスク値を操作することにより、動きによるぼけ(motion blur)、フィールドの深度及び部分的な透明性をシミュレートするのに利用可能である。
【0258】
以上、様々な実施形態について説明したが、それらは、限定のためではなく、例としてのためのみに示されたものである。このように、好適な実施形態の広がり及び範囲は、上述の例示的な実施形態により限定されるべきではなく、特許請求の範囲及びその均等の範囲によってのみ規定されるべきである。
【図面の簡単な説明】
【図1】 コンピュータグラフィクス処理の従来技術による方法を示す説明図である。
【図1A−1】 従来技術によりエイリアシングの影響を受ける画像を示す説明図である。
【図1A−2】 従来技術によりエイリアシングの影響を受けた図1A−1の画像を示す説明図である。
【図1A−3】 従来技術にて、より精細な格子を用いてエイリアシングがいくらか緩和される方式を示す説明図である。
【図1A−4】 アンチエイリアシングが、ギザギザのエッジを除去するのに役立って、画像がより写実的になっている様子を示す説明図である。
【図1B−1】 アンチエイリアシング処理を採用していない非集積型の従来のグラフィクスシステムの実装例を示す説明図である。
【図1B−2】 アンチエイリアシング処理を採用した非集積型の従来のグラフィクスシステムの実装例を示す説明図である。
【図1B−3】 アンチエイリアシング処理を採用し、追加のロジックを有するラスタライザを備えた非集積型の従来のグラフィクスシステムの実装例を示す説明図である。
【図1C】 単一の半導体プラットフォーム上に実装された本発明に係る一実施形態の種々のコンポーネントを示すフローチャートである。
【図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つのみ算出された場合に描画される領域を示す説明図である。
【図32C】 図32の処理で負のW値が2つのみ算出された場合に描画される領域を示す説明図である。
【図33】 本発明に係る一実施形態によりアンチエイリアシング処理を採用した集積化の実装例を示す説明図である。
【図34】 本発明に係る一実施形態によるマルチサンプリング例を示す図である。

Claims (10)

  1. グラフィクス処理用のグラフィクス・パイプライン・システムにおいて、
    (a)頂点データを取得するように適合し、その頂点データを第1の空間から第2の空間へと変換するために、単一の集積回路チップ上に配置された変換モジュールと、
    (b)前記変換モジュールに対して接続され、前記変換モジュールから取得したデータに対して光源処理演算を実行するために、その変換モジュールと同一の前記単一の集積回路チップ上に配置された光源処理モジュールと、
    (c)前記光源処理モジュールに対して接続され、前記光源処理モジュールから取得したデータをレンダリングするために、前記変換モジュール及び光源処理モジュールと同一の前記単一の集積回路チップ上に配置されたラスタライザと、
    (d)前記変換モジュール、前記光源処理モジュール及び前記ラスタライザに接続されており、頂点取得、変位マッピング、変換、光源処理、画素のシェーディング、画素読取及び書込、及びダウンフィルタリングを有する演算のための記憶領域の提供に適合した単一の共通メモリと、
    を有し、
    (e)レンダリングの質を向上させるために、アンチエイリアシングが前記単一の集積回路チップ上に実装されているシステム。
  2. 前記単一の共通メモリに関する帯域幅が共用される請求項1に記載のシステム。
  3. 前記アンチエイリアシングは、マルチサンプリングを含む請求項1に記載のシステム。
  4. 前記アンチエイリアシングは、表面の断片を用いる請求項1に記載のシステム。
  5. 前記アンチエイリアシングは、スーパーサンプリングを含む請求項1に記載のシステム。
  6. グラフィクス・パイプライン・システムでのグラフィクス処理方法において、
    (a)変換モジュールを用いて、頂点データを第1の空間から第2の空間へと変換し、
    (b)光源処理モジュールを用いて、前記頂点データを光源処理し、
    (c)ラスタライザを用いて、前記頂点データをレンダリングし、
    (d)レンダリングの質を向上させるためにアンチエイリアシングを実行し、
    (e)頂点取得、変位マッピング、変換、光源処理、画素のシェーディング、画素読取及び書込、及びダウンフィルタリングを有する演算用に単一の共通メモリを使用し、
    (f)前記頂点データは、単一の集積回路チップ上で、変換、光源処理及びレンダリングされ、前記アンチエイリアシングが、前記単一の集積回路チップ上で実行される方法。
  7. 前記単一の共通メモリに関する帯域幅が共用される請求項6に記載の方法。
  8. 前記アンチエイリアシングは、マルチサンプリングを含む請求項6に記載の方法。
  9. 前記アンチエイリアシングは、表面の断片を用いる請求項6に記載の方法。
  10. 前記アンチエイリアシングは、スーパーサンプリングを含む請求項6に記載の方法。
JP2002545450A 2000-11-27 2001-11-16 アンチエイリアシング集積化グラフィクス処理ユニット Expired - Fee Related JP4346906B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/724,206 US6452595B1 (en) 1999-12-06 2000-11-27 Integrated graphics processing unit with antialiasing
PCT/US2001/043597 WO2002043002A1 (en) 2000-11-27 2001-11-16 Integrated graphics processing unit with antialiasing

Publications (2)

Publication Number Publication Date
JP2004514994A JP2004514994A (ja) 2004-05-20
JP4346906B2 true JP4346906B2 (ja) 2009-10-21

Family

ID=24909481

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002545450A Expired - Fee Related JP4346906B2 (ja) 2000-11-27 2001-11-16 アンチエイリアシング集積化グラフィクス処理ユニット

Country Status (5)

Country Link
US (2) US6452595B1 (ja)
EP (1) EP1346319B1 (ja)
JP (1) JP4346906B2 (ja)
AU (1) AU2002225688A1 (ja)
WO (1) WO2002043002A1 (ja)

Families Citing this family (93)

* Cited by examiner, † Cited by third party
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
US6452595B1 (en) * 1999-12-06 2002-09-17 Nvidia Corporation Integrated graphics processing unit with antialiasing
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
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
US6650325B1 (en) * 1999-12-06 2003-11-18 Nvidia Corporation Method, apparatus and article of manufacture for boustrophedonic rasterization
US6198488B1 (en) * 1999-12-06 2001-03-06 Nvidia Transform, lighting and rasterization system embodied on a single semiconductor platform
US7159041B2 (en) * 2000-03-07 2007-01-02 Microsoft Corporation Method and system for defining and controlling algorithmic elements in a graphics display system
US6819325B2 (en) 2000-03-07 2004-11-16 Microsoft Corporation API communications for vertex and pixel shaders
US7012613B1 (en) * 2000-05-02 2006-03-14 Ati International Srl Method and apparatus for fragment scriptor for use in over-sampling anti-aliasing
US6980218B1 (en) * 2000-08-23 2005-12-27 Nintendo Co., Ltd. Method and apparatus for efficient generation of texture coordinate displacements for implementing emboss-style bump mapping in a graphics rendering system
US8692844B1 (en) * 2000-09-28 2014-04-08 Nvidia Corporation Method and system for efficient antialiased rendering
US7061507B1 (en) * 2000-11-12 2006-06-13 Bitboys, Inc. Antialiasing method and apparatus for video applications
TW504651B (en) * 2000-12-06 2002-10-01 Silicon Integrated Sys Corp Eliminating jagged effects using post filtering
US6828975B2 (en) * 2001-03-01 2004-12-07 Microsoft Corporation Method and system for managing graphics objects in a graphics display system
US6894687B1 (en) * 2001-06-08 2005-05-17 Nvidia Corporation System, method and computer program product for vertex attribute aliasing in a graphics pipeline
DE10145133C1 (de) * 2001-09-06 2003-04-30 4D Vision Gmbh Verfahren zur räumlichen Darstellung
US6720975B1 (en) * 2001-10-17 2004-04-13 Nvidia Corporation Super-sampling and multi-sampling system and method for antialiasing
US20030169255A1 (en) * 2002-03-11 2003-09-11 Lavelle Michael G. Two-sided lighting in a single pass
US7508398B1 (en) 2002-08-27 2009-03-24 Nvidia Corporation Transparent antialiased memory access
DE10309194B4 (de) * 2003-02-26 2008-10-09 Newsight Gmbh Verfahren und Anordnung zur räumlichen Darstellung
US20040174379A1 (en) * 2003-03-03 2004-09-09 Collodi David J. Method and system for real-time anti-aliasing
US8732644B1 (en) 2003-09-15 2014-05-20 Nvidia Corporation Micro electro mechanical switch system and method for testing and configuring semiconductor functional circuits
US8775997B2 (en) 2003-09-15 2014-07-08 Nvidia Corporation System and method for testing and configuring semiconductor functional circuits
US8872833B2 (en) 2003-09-15 2014-10-28 Nvidia Corporation Integrated circuit configuration system and method
CN1890660A (zh) * 2003-11-19 2007-01-03 路西德信息技术有限公司 Pc总线上的多重三维图形管线的方法及系统
US8497865B2 (en) 2006-12-31 2013-07-30 Lucid Information Technology, Ltd. Parallel graphics system employing multiple graphics processing pipelines with multiple graphics processing units (GPUS) and supporting an object division mode of parallel graphics processing using programmable pixel or vertex processing resources provided with the GPUS
US20090027383A1 (en) * 2003-11-19 2009-01-29 Lucid Information Technology, Ltd. Computing system parallelizing the operation of multiple graphics processing pipelines (GPPLs) and supporting depth-less based image recomposition
US20080094403A1 (en) * 2003-11-19 2008-04-24 Reuven Bakalash Computing system capable of parallelizing the operation graphics processing units (GPUs) supported on a CPU/GPU fusion-architecture chip and one or more external graphics cards, employing a software-implemented multi-mode parallel graphics rendering subsystem
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
WO2006117683A2 (en) * 2005-01-25 2006-11-09 Lucid Information Technology, Ltd. Graphics processing and display system employing multiple graphics cores on a silicon chip of monolithic construction
US7961194B2 (en) 2003-11-19 2011-06-14 Lucid Information Technology, Ltd. Method of controlling in real time the switching of modes of parallel operation of a multi-mode parallel graphics processing subsystem embodied within a host computing system
US20080088631A1 (en) * 2003-11-19 2008-04-17 Reuven Bakalash Multi-mode parallel graphics rendering and display system supporting real-time detection of scene profile indices programmed within pre-profiled scenes of the graphics-based application
US8085273B2 (en) 2003-11-19 2011-12-27 Lucid Information Technology, Ltd Multi-mode parallel graphics rendering system employing real-time automatic scene profiling and mode control
US7584475B1 (en) 2003-11-20 2009-09-01 Nvidia Corporation Managing a video encoder to facilitate loading and executing another program
US7053901B2 (en) * 2003-12-11 2006-05-30 Nvidia Corporation System and method for accelerating a special purpose processor
US7495722B2 (en) 2003-12-15 2009-02-24 Genoa Color Technologies Ltd. Multi-color liquid crystal display
US8711161B1 (en) 2003-12-18 2014-04-29 Nvidia Corporation Functional component compensation reconfiguration system and method
WO2005064541A1 (en) * 2003-12-23 2005-07-14 Koninklijke Philips Electronics N.V. Computer graphics processor and method of rendering images
CN1981306B (zh) * 2004-05-03 2010-12-08 三叉微系统(远东)有限公司 用于渲染图形的图形管道
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
US7333119B1 (en) 2004-11-02 2008-02-19 Nvidia Corporation System and method for virtual coverage anti-aliasing
US7868901B1 (en) 2004-11-02 2011-01-11 Nvidia Corporation Method and system for reducing memory bandwidth requirements in an anti-aliasing operation
US7586492B2 (en) * 2004-12-20 2009-09-08 Nvidia Corporation Real-time display post-processing using programmable hardware
US7530255B2 (en) 2005-01-18 2009-05-12 Mine Safety Appliances Company Devices, systems and methods for testing of gas detectors
US20090096798A1 (en) * 2005-01-25 2009-04-16 Reuven Bakalash Graphics Processing and Display System Employing Multiple Graphics Cores on a Silicon Chip of Monolithic Construction
CA2605012A1 (en) * 2005-04-29 2006-11-16 Industrial Planning Technology, Inc. Hybrid 3d path router
US8427496B1 (en) 2005-05-13 2013-04-23 Nvidia Corporation Method and system for implementing compression across a graphics bus interconnect
US7511717B1 (en) * 2005-07-15 2009-03-31 Nvidia Corporation Antialiasing using hybrid supersampling-multisampling
WO2007060672A2 (en) * 2005-11-28 2007-05-31 Genoa Color Technologies Ltd. Sub-pixel rendering of a multiprimary image
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
US7791617B2 (en) * 2005-12-19 2010-09-07 Nvidia Corporation Method and system for rendering polygons having abutting edges
US8390645B1 (en) 2005-12-19 2013-03-05 Nvidia Corporation Method and system for rendering connecting antialiased line segments
US8928676B2 (en) * 2006-06-23 2015-01-06 Nvidia Corporation Method for parallel fine rasterization in a raster stage of a graphics pipeline
US8477134B1 (en) 2006-06-30 2013-07-02 Nvidia Corporation Conservative triage of polygon status using low precision edge evaluation and high precision edge evaluation
US7519797B1 (en) * 2006-11-02 2009-04-14 Nividia Corporation Hierarchical multi-precision pipeline counters
US8427487B1 (en) 2006-11-02 2013-04-23 Nvidia Corporation Multiple tile output using interface compression in a raster stage
US8482567B1 (en) 2006-11-03 2013-07-09 Nvidia Corporation Line rasterization techniques
US7692659B1 (en) 2006-11-06 2010-04-06 Nvidia Corporation Color-compression using automatic reduction of multi-sampled pixels
US8233004B1 (en) 2006-11-06 2012-07-31 Nvidia Corporation Color-compression using automatic reduction of multi-sampled pixels
US7876332B1 (en) 2006-12-20 2011-01-25 Nvidia Corporation Shader that conditionally updates a framebuffer in a computer graphics system
US7817165B1 (en) 2006-12-20 2010-10-19 Nvidia Corporation Selecting real sample locations for ownership of virtual sample locations in a computer graphics system
US8547395B1 (en) 2006-12-20 2013-10-01 Nvidia Corporation Writing coverage information to a framebuffer in a computer graphics system
US7852350B2 (en) * 2007-07-26 2010-12-14 Stmicroelectronics S.R.L. Graphic antialiasing method and graphic system employing the method
US8004522B1 (en) 2007-08-07 2011-08-23 Nvidia Corporation Using coverage information in computer graphics
US7996622B1 (en) 2007-08-07 2011-08-09 Nvidia Corporation Detecting unused cache lines
US8325203B1 (en) 2007-08-15 2012-12-04 Nvidia Corporation Optimal caching for virtual coverage antialiasing
US9183607B1 (en) * 2007-08-15 2015-11-10 Nvidia Corporation Scoreboard cache coherence in a graphics pipeline
US8724483B2 (en) 2007-10-22 2014-05-13 Nvidia Corporation Loopback configuration for bi-directional interfaces
US8063903B2 (en) * 2007-11-09 2011-11-22 Nvidia Corporation Edge evaluation techniques for graphics hardware
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
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
US20110063305A1 (en) * 2009-09-16 2011-03-17 Nvidia Corporation Co-processing techniques on heterogeneous graphics processing units
JP5311491B2 (ja) * 2009-11-17 2013-10-09 Necシステムテクノロジー株式会社 グラフィクス頂点処理装置およびグラフィクス頂点処理方法
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
US9129441B2 (en) * 2010-06-21 2015-09-08 Microsoft Technology Licensing, Llc Lookup tables for text rendering
US9171350B2 (en) 2010-10-28 2015-10-27 Nvidia Corporation Adaptive resolution DGPU rendering to provide constant framerate with free IGPU scale up
US9477597B2 (en) 2011-03-25 2016-10-25 Nvidia Corporation Techniques for different memory depths on different partitions
US8701057B2 (en) 2011-04-11 2014-04-15 Nvidia Corporation Design, layout, and manufacturing techniques for multivariant integrated circuits
US9529712B2 (en) 2011-07-26 2016-12-27 Nvidia Corporation Techniques for balancing accesses to memory having different memory types
US9153193B2 (en) 2011-09-09 2015-10-06 Microsoft Technology Licensing, Llc Primitive rendering using a single primitive type
US9607407B2 (en) 2012-12-31 2017-03-28 Nvidia Corporation Variable-width differential memory compression
US9591309B2 (en) 2012-12-31 2017-03-07 Nvidia Corporation Progressive lossy memory compression
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
US11119771B2 (en) 2018-09-28 2021-09-14 University Of South Florida Computing 2-body statistics on graphics processing units (GPUs)
US11127109B1 (en) 2020-03-23 2021-09-21 Samsung Electronics Co., Ltd. Methods and apparatus for avoiding lockup in a graphics pipeline
US11170533B1 (en) * 2020-07-27 2021-11-09 Weta Digital Limited Method for compressing image data having depth information

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5450342A (en) * 1984-10-05 1995-09-12 Hitachi, Ltd. Memory device
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
US5864342A (en) * 1995-08-04 1999-01-26 Microsoft Corporation Method and system for rendering graphical objects to image chunks
US5886701A (en) * 1995-08-04 1999-03-23 Microsoft Corporation Graphics rendering device and method for operating same
US5963210A (en) * 1996-03-29 1999-10-05 Stellar Semiconductor, Inc. Graphics processor, system and method for generating screen pixels in raster order utilizing a single interpolator
US6104417A (en) * 1996-09-13 2000-08-15 Silicon Graphics, Inc. Unified memory computer architecture with dynamic graphics memory allocation
WO1998028695A1 (en) 1996-12-19 1998-07-02 Hyundai Electronics America Video frame rendering engine
US5838377A (en) 1996-12-20 1998-11-17 Analog Devices, Inc. Video compressed circuit using recursive wavelet filtering
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
US5956042A (en) * 1997-04-30 1999-09-21 Hewlett-Packard Co. Graphics accelerator with improved lighting processor
US6137497A (en) * 1997-05-30 2000-10-24 Hewlett-Packard Company Post transformation clipping in a geometry accelerator
US6014144A (en) * 1998-02-03 2000-01-11 Sun Microsystems, Inc. Rapid computation of local eye vectors in a fixed point lighting unit
WO1999052040A1 (en) 1998-04-08 1999-10-14 Stellar Technologies, Ltd. Architecture for graphics processing
US6097395A (en) * 1998-04-28 2000-08-01 Hewlett Packard Company Dynamic selection of lighting coordinates in a computer graphics system
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
US6452595B1 (en) * 1999-12-06 2002-09-17 Nvidia Corporation Integrated graphics processing unit with antialiasing
US6597356B1 (en) * 2000-08-31 2003-07-22 Nvidia Corporation Integrated tessellator in a graphics processing unit

Also Published As

Publication number Publication date
WO2002043002A1 (en) 2002-05-30
US20030103054A1 (en) 2003-06-05
AU2002225688A1 (en) 2002-06-03
US6452595B1 (en) 2002-09-17
US6992669B2 (en) 2006-01-31
JP2004514994A (ja) 2004-05-20
EP1346319A1 (en) 2003-09-24
EP1346319A4 (en) 2006-12-06
EP1346319B1 (en) 2011-09-21

Similar Documents

Publication Publication Date Title
JP4346906B2 (ja) アンチエイリアシング集積化グラフィクス処理ユニット
JP4113776B2 (ja) グラフィクス処理をおこなう集積回路及び方法
JP4608510B2 (ja) 単一の半導体プラットフォームで支持される変換、ライティング、ラスター化システム
JP4724346B2 (ja) グラフィックプロセッサ中の変換モジュール用の方法、装置および製品
US9978171B2 (en) Control of a sample mask from a fragment shader program
US20170061680A1 (en) System, Method and Computer Program Product for Implementing Anti-Aliasing Operations Using a Programmable Sample Pattern Table
US6504542B1 (en) Method, apparatus and article of manufacture for area rasterization using sense points
JP2019061713A (ja) フィルタリングされた粗ピクセルシェーディングのための方法および装置
US9230363B2 (en) System, method, and computer program product for using compression with programmable sample locations
US9230362B2 (en) System, method, and computer program product for using compression with programmable sample locations
US10417813B2 (en) System and method for generating temporally stable hashed values
US6650325B1 (en) Method, apparatus and article of manufacture for boustrophedonic rasterization
US20150084952A1 (en) System, method, and computer program product for rendering a screen-aligned rectangle primitive
US6515671B1 (en) Method, apparatus and article of manufacture for a vertex attribute buffer in a graphics processor
US20170263041A1 (en) System, method and computer program product for generating one or more values for a signal patch using neighboring patches collected based on a distance dynamically computed from a noise distribution of the signal patch

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061114

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070213

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070221

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070406

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070522

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070820

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20070820

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071107

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20071114

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20071207

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090406

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090715

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120724

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees