効率的な2D及び3Dグラフィックス処理
2D及び3Dグラフィックスの双方をサポートする技術が説明される。グラフィックス処理ユニット(GPU)は、3D画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行ってもよく、更に2D画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行ってもよい。2Dグラフィックス・パイプラインの各々の段は、3Dグラフィックス・パイプラインの少なくとも1つの段へマップされてもよい。例えば、2Dグラフィックスのクリッピング、マスキング、及びシザリング段は、3Dグラフィックスの深度テスト段へマップされてもよい。2Dグラフィックスのパス内の画素のカバレージ値は、3Dグラフィックスのラスタライズ及び深度テスト段を使用して決定されてもよい。2Dグラフィックスのペイント生成段及び画像補間段は、3Dグラフィックスのフラグメント・シェーダ段へマップされてもよい。2Dグラフィックスのブレンディング段は、3Dグラフィックスのブレンディング段へマップされてもよい。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は、一般的にはエレクトロニクスに関し、更に具体的には、グラフィックス処理を行う技術に関する。
【背景技術】
【0002】
グラフィックス処理ユニット(GPU)は、様々なアプリケーション、例えば、ビデオゲーム、グラフィックス、コンピュータ支援設計(CAD)、シミュレーション及び視覚化ツール、イメージングなどのために、2次元(2D)又は3次元(3D)画像をレンダリングするために使用される専用ハードウェア・ユニットである。2D描画をレンダリングするプロセスは、典型的には2Dグラフィックスに特化された一連の段を含む。これらの2Dグラフィックス段の処理は、計算集約的である。2D GPUは、計算集約的2D処理をハードウェアで行うように設計及び使用されてもよい。2D GPUの使用は、2D描画のレンダリング時間を短くし、全体的パフォーマンスを改善する。
【0003】
同様に、3D画像をレンダリングするプロセスは、典型的には3Dグラフィックスに特化された一連の段を含む。これらの3Dグラフィックス段の処理も、計算集約的である。3D GPUは、計算集約的3D処理をハードウェアで行うように設計及び使用されてもよい。3D GPUの使用は、3D画像のレンダリング時間を短くし、全体的パフォーマンスを改善する。
【0004】
エレクトロニクス・デバイスは、2Dグラフィックスのみをサポートし、2Dグラフィックスを加速化するために2D GPUを使用してもよい。エレクトロニクス・デバイスは、同じように3Dグラフィックスのみをサポートし、3Dグラフィックスを加速化するために3D GPUを使用してもよい。2D及び3Dグラフィックスの双方をサポートするエレクトロニクス・デバイスの場合、できるだけ小さいハードウェアを用いて、2D及び3Dグラフィックスの双方のために良好なパフォーマンスを達成し、コスト及び電力消費を低減することが望ましい。
【発明の概要】
【0005】
本明細書では、2D及び3Dグラフィックスの双方を効率的にサポートする技術が説明される。GPUは、3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行い、3D画像をレンダリングするように設計されてもよい。GPUは、同じように2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行い、2D画像又は描画をレンダリングしてもよい。2Dグラフィックス・パイプラインの複数の段の各段は、3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされてもよい。GPU内の処理ユニットは効率的に使用され、2D及び3Dグラフィックスの双方のために処理を行ってもよい。
【0006】
一般的に、2Dグラフィックス・パイプライン及び3Dグラフィックス・パイプラインの各々は、任意の数の段を含んでもよい。2Dグラフィックス・パイプラインの段は、様々なマッピング・スキームに基づいて3Dグラフィックス・パイプラインの段へマップされてもよい。例えば、2Dグラフィックスのクリッピング、マスキング、及びシザリング(scissoring)段は、3Dグラフィックスの深度テスト段へマップされてもよい。2Dグラフィックスのパス(path)内の画素のカバレージ値は、3Dグラフィックスのラスタライズ段、深度テスト段などを使用して決定されてもよい。2Dグラフィックスのペイント(paint)生成段及び画像補間段は、3Dグラフィックスのフラグメント・シェーダ(fragment shader)段へマップされてもよい。2Dグラフィックスのブレンディング(blending)段は、3Dグラフィックスのブレンディング段へマップされてもよく、双方のブレンディング段は、複数のブレンディング・モードを用いてサポートされてもよい。2Dグラフィックスの他の段は、下記で説明されるように、3Dグラフィックスの他の段へマップされてもよい。
【0007】
この開示の様々な態様及び特徴は、以下で更に詳細に説明される。
【図面の簡単な説明】
【0008】
【図1】3Dグラフィックスをサポートするデバイスのブロック図を示す。
【図2】OpenVGにおける2Dグラフィックス・パイプラインのブロック図を示す。
【図3】図1のデバイスを使用してOpenVGで2Dグラフィックスをサポートすることを示す。
【図4】パスのモザイク配列の一例を示す。
【図5】3×3格子のコンボリューション・フィルタリングの一例を示す。
【図6】フィルタリング・ユニットのブロック図を示す。
【図7】ブレンディング命令の設計を示す。
【図8】ブレンディング・ユニットのブロック図を示す。
【図9】図1のデバイスを使用して基本2Dグラフィックスをサポートすることを示す。
【図10】2D及び3Dグラフィックスをサポートするプロセスを示す。
【図11】無線通信デバイスのブロック図を示す。
【発明を実施するための形態】
【0009】
GPUは2D及び/又は3Dグラフィックスをサポートしてもよい。2Dグラフィックスはジオメトリ・データの2D表現を記憶し、このジオメトリ・データは2D画像又は描画を生成するために処理される。3Dグラフィックスはジオメトリ・データの3D表現を記憶し、このジオメトリ・データは2D画像を生成するために処理される。2Dグラフィックスは絵画にたとえることができ、3Dグラフィックスは彫刻にたとえることができる。2D及び3Dグラフィックスは、異なる段及びグラフィックス演算を有する異なるパイプラインを用いて、表示用の最終画像を生成してもよい。
【0010】
2D又は3D画像は、プリミティブを用いて表現されてもよい。プリミティブはジオメトリの基本単位である。3Dグラフィックスの場合、プリミティブはポリゴン(典型的には三角形)、線、点などを含んでもよい。各三角形は3つの頂点によって画定され、各線は2つの頂点によって画定される。各頂点は、様々な属性、例えば、空間座標、明度、テクスチャ座標などと関連づけられてもよい。各属性は、最大4つの成分を有してもよい。例えば、空間座標は、3つの成分x、y、z又は4つの成分x、y、z、wによって与えられてもよい。ここで、x及びyは水平及び垂直座標であり、zは深度であり、wは同次座標である。明度は、3つの成分r、g、b又は4つの成分r、g、b、aによって与えられてもよい。ここで、rは赤、gは緑、bは青、aは透明度因子である。透明度因子は画素(ピクセル)の透明度を決定する。テクスチャ座標は、典型的には、水平及び垂直座標u及びvによって与えられる。頂点は他の属性に関連づけられてもよい。2Dグラフィックスの場合、プリミティブは点、線、曲線、長方形などを含んでもよい。パスは異なるプリミティブの組み合わせで構成されてもよい。2D又は3D画像は、表示されるべき画素について属性成分値を計算することによってレンダリングされてもよい。
【0011】
図1は、3Dグラフィックスをサポートするデバイス100の設計のブロック図を示す。デバイス100は、例えば、オープン・グラフィックス・ライブラリ(OpenGL)、Direct3Dなどの3Dソフトウェア・インタフェースをサポートしてもよい。OpenGLは、公開されている、2004年10月22日の文書「OpenGL(登録商標)グラフィックス・システム:仕様」バージョン2.0("The OpenGL(R) Graphics System: A Specification," Version 2.0, dated October 22, 2004)に記載されている。デバイス100はスタンドアロン型システムであってもよく、又は、例えば、コンピュータ、無線通信デバイスなどのより大きいシステムの一部分であってもよい。
【0012】
グラフィックス・アプリケーション110は同時に実行していてもよく、ビデオゲーム、グラフィックス、テレビ会議などのためのものであってもよい。グラフィックス・アプリケーション110は、高レベル・コマンドを生成して、グラフィックス・データ上でグラフィックス演算を行う。高レベル・コマンドは比較的複雑である場合もあるが、グラフィックス・データはかなりコンパクトであり得る。グラフィックス・データは、ジオメトリ情報(例えば、画像内のプリミティブの頂点情報)、画像がどのように見えるかを記述する情報などを含んでもよい。グラフィックス・アプリケーション110は、アプリケーション・プログラミング・インタフェース(API)(図1には図示しない)を介してGPUドライバ112とインタフェースする。
【0013】
GPUドライバ112は、プロセッサ上で実行するソフトウェア及び/又はファームウェア、又はハードウェア・ユニット、又はソフトウェア/ファームウェアとハードウェアとの組み合わせであってもよい。GPUドライバ112は、グラフィックス・アプリケーション110からの高レベル・コマンドを低レベル・コマンドへ変換する。低レベル・コマンドは機械に依存してもよく、GPU120内の処理ユニットに対して調整されてもよい。また、GPUドライバ112は、データのある場所、例えば、どのバッファがデータを記憶しているかを示してもよい。GPU120は、例えば、自動的に及びグラフィックス・アプリケーションに対してトランスペアレントに、各グラフィックス・アプリケーションの処理を一連のスレッドへ分割してもよい。スレッド(又は実行スレッド)は、1つ又は複数の命令のセットを用いて行われる特定のタスクを示す。例えば、スレッドは、画素のセットについてブレンディングを行ってもよい。スレッドにより、グラフィックス・アプリケーションは、異なる処理ユニットによって同時に行われる複数のタスクを有することが可能であり、更に、異なるグラフィックス・アプリケーションが、リソースを共有することが可能である。GPUドライバ112は、スレッドのために低レベル・コマンドを提供し、データ位置インディケータをGPU120へ提供する。
【0014】
GPU120は、様々な機能を行って3D画像をレンダリングする処理ユニットを含む。「処理ユニット」、「エンジン」、「コア」、「マシン」、「プロセッサ」、「モジュール」などの用語は、しばしば互換可能に使用される。GPU120内において、コマンド・エンジン122は、GPUドライバ112から低レベル・コマンドを受け取り、及び/又はメモリからコマンドをフェッチする。コマンド・エンジン122は低レベル・コマンドを復号し、これらのコマンドによって影響される処理ユニットへ命令を提供する。
【0015】
頂点シェーダ124は、ジオメトリ・データ上で頂点処理を行う。ジオメトリ・データは、三角形及び線のようなプリミティブを備えてもよい。例えば、頂点シェーダ124は、ジオメトリを1つの座標系から他の座標系へ変換し、ジオメトリの頂点について光レベルを計算し、ジオメトリのためにブレンディングを行うなどを行ってもよい。頂点バッファ140は、頂点シェーダ124のために頂点情報を記憶する。プリミティブ・プロセッサ126は、後続のラスタライズ・プロセスのためにパラメータを計算する。例えば、プリミティブ・プロセッサ126は、各三角形の3つのエッジについて一次方程式の係数を計算し、画素の深度補間のために深度(z)勾配を計算してもよい。スキャン・コンバータ128は、各プリミティブ(例えば、三角形又は線)を画素へ分解し、各画素のために画面座標を決定する。
【0016】
深度テスト・エンジン130は、画素について深度テスト(zテストとも呼ばれる)を行い、及び/又は、イネーブルにされている場合、ステンシル・テストを行って、画素がレンダリングされるべきか廃棄されるべきかを決定してもよい。zバッファ142は、レンダリングされている画像内の各画素位置について深度又はz値を記憶する。深度テストの場合、エンジン130は、画素のz値(現在のz値)を、zバッファ142内の対応するz値(記憶されたz値)に対して比較し、現在のz値が、記憶されたz値よりも近接/近隣である場合、画素を通過させてzバッファ142及び可能性としてステンシル・バッファ144を更新し、現在のz値が、記憶されたz値よりも後方にある場合、画素を廃棄する。ステンシル・バッファ144は、レンダリングされている画像内で各画素位置についてステンシル値を記憶する。ステンシル・テストの場合、エンジン130は、画素の記憶されたステンシル値を参照値に対して比較し、比較の結果に基づいて、画素を通過させるか廃棄する。
【0017】
フラグメント・シェーダ132(画素シェーダとも呼ばれる場合もある)は、画素及びフラグメント上で様々なグラフィックス演算を行ってもよい。フラグメントとは、1つの画素及びこの画素の関連情報である。フラグメント・シェーダ132は、画素属性の補間用のパラメータ、例えば、属性補間用の一次方程式係数を計算してもよい。フラグメント・シェーダ132は、画素の画面座標に基づいて、及び補間パラメータを使用して、各三角形内の各画素について属性成分値を計算してもよい。フラグメント・シェーダ132は、イネーブルにされている場合、テクスチャ・マッピングも行い、テクスチャを各三角形へ適用してもよい。テクスチャ画像は、テクスチャ・バッファ146内に記憶されてもよい。三角形の3つの頂点は、テクスチャ画像内で3つの(u,v)座標を関連づけられてもよく、三角形内の各画素は、テクスチャ画像内で特定のテクスチャ座標を関連づけられてもよい。三角形内の各画素の色を、この画素のテクスチャ座標によって示される位置でテクスチャ画像の色を用いて修正することにより、テクスチャリング(texturing)が達成される。フラグメント・シェーダ132は、テクスチャ・フィルタリング及び/又は他のグラフィックス演算も行ってもよい。
【0018】
画素ブレンダ(blender)134は、フラグメント上で、アルファ・ブレンディング、アルファ・テスト、フォグ・ブレンディング、論理演算、ディザリング演算などのグラフィックス演算を行ってもよい。画素ブレンダ134は、ディスプレイ・デバイス(図1に示される)上で提示するための最終画像用結果を色バッファ148へ提供してもよい。
【0019】
図1で示されるように、GPU120は、3Dグラフィックスのために設計された複数の段から構成された3Dグラフィックス・パイプラインを実現する。GPU120は、異なる段及び/又は異なるやり方で配列された段を有する他の3Dグラフィックス・パイプラインも実現してもよい。バッファ140〜148は、図1で示されるように、GPU120の外部にあるメモリを用いて実現されてもよい。GPU120は、高速メモリであるキャッシュを含んで、GPU内の処理ユニットのために命令及びデータを記憶してもよい。
【0020】
図2は、公開されている、2005年7月28日の「OpenVG仕様、バージョン1.0」("OpenVG Specification, Version 1.0," July 28, 2005)に記載された2Dグラフィックス・パイプライン200のブロック図である。以降、この仕様をOpenVGと呼ぶ。OpenVGは、2Dベクトル・グラフィックスの新しい標準であり、ハンドヘルド及び移動デバイス、例えば、携帯電話機及びゲーム用デバイスに適している。2Dグラフィックスの描画はパスで構成される。パスは、描画内のジオメトリを画定するために使用される。パスは、描画サーフェイス上のペン又はペイント・ブラシの持続を画定し、ストローク(stroke)及び/又はフィル(fill)されてもよい。ストロークとは、パスの形状の輪郭を線で画定することである。フィルとは、色、勾配、又はテクスチャを形状の内部へ適用することである。
【0021】
段1のブロック212において、グラフィックス・アプリケーションは、描画されるべきパスを画定し、パスについて後続の段によって使用されるべき変換、ストローク、及びペイントのパラメータがあればこれらを設定する。段2のブロック214において、パスはユーザ座標系から画面座標系へ変換される。ユーザ座標系は、ジオメトリを表現するために使用される座標系である。画面座標系は、表示画面のための座標系である。パスがストロークされるべきである場合、ストロークされたパラメータがユーザ座標系で適用され、画面座標系内のストロークされたジオメトリを記述する新しいパスを生成する。この新しいパスは現パスと呼ばれ、2Dグラフィックス・パイプライン内の後続の段によって演算される。段3のブロック216において、パス/サーフェイス変換が現パスのジオメトリへ適用され、画面座標を生成する。段4のブロック218では、現パスによって影響される各画素についてカバレージ値が計算される。画素のカバレージ値は、この画素の区域のどの端数部分が現パスによってカバーされるかを示す。カバレージ値は後続の段で使用され、画素の明度を計算する。段4は現パスを描画サーフェイス上の画素へマップする。
【0022】
段5のブロック220では、描画サーフェイスの境界内にない画素、及び、シザリングがイネーブルにされている場合、1つ又は複数のシザリング領域内にない画素が、ゼロのカバレージ値を割り当てられる。残りの処理は、ゼロのカバレージ値を有する画素についてスキップされる。段5は、描画を描画サーフェイス及びシザリング領域の境界へクリップする。クリップされた描画部分は廃棄される。
【0023】
段6のブロック222では、明度及びアルファ値が、現在の関連ペイントに基づいて描画サーフェイス上の各画素について定義される。現在の関連ペイントは、パスがフィルされているかストロークされているかに依存する。段6は、ペイント画像を現パス内の画素へ適用する。段7のブロック224では、画像が描画されている場合、明度及びアルファ値が、画像/サーフェイス変換の逆(inverse)を使用し画像値を補間することによって、各画素について計算される。結果は、現在の画像描画モードに従ってペイントの明度及びアルファ値と組み合わせられる。段8のブロック226では、段7からの各画素の出所(source)の明度及びアルファ値が行先(destination)の色空間へ変換され、ブレンディング・モードに従って、対応する行先の明度及びアルファ値とブレンド(blend)される。
【0024】
図2は、特定の2Dグラフィックス・パイプラインを示す。2Dグラフィックスは、2D画像を他のやり方でレンダリングする他のパイプラインを用いてもサポートされてもよい。
【0025】
図1のデバイス100は、ユニット112〜134を使用して2Dグラフィックスをサポートしてもよい。これらのユニットは3Dグラフィックスのために設計されてもよいが、これらのユニットの能力は2Dグラフィックスへ拡張されて使用されてもよい。
【0026】
図3は、図1のデバイス100をOpenVGの2Dグラフィックスに使用する設計300を示す。この設計において、GPUドライバ112は、図2の2Dグラフィックス・パイプライン200の段1でパス、変換行列、ストローク、及びペイントを準備及び定義し、段2でストローク・パス生成を行う。頂点シェーダ124は、段3で座標系間の変換を行う。プリミティブ・プロセッサ126及びスキャン・コンバータ128は、段4でラスタライズを行う。深度テスト・エンジン130は、段5でクリッピング及びマスキングを行う。フラグメント・シェーダ132は、段6でペイント生成を行い、段7で画像補間を行う。画素ブレンダ(blender)134は、段8でブレンディング及びアンチエイリアシングを行う。2Dグラフィックス段の幾つかのためにデバイス100を用いる処理は、後述する。
【0027】
図3は、特定の3D GPU120を有するデバイス100を用いて、OpenVGのために特定の2Dグラフィックス・パイプライン200を実現する1つの設計を示す。デバイス100は他のやり方で2Dグラフィックスをサポートしてもよく、例えば、2Dグラフィックス・パイプライン200の段が異なるようにデバイス100のユニットへマップされてもよい。デバイス100は、2Dグラフィックス演算をサポートする拡張及び/又は修正を含んでもよい。2Dグラフィックスは、他の設計の3D GPUを用いて実現されてもよい。例えば、3D GPUは、段1及び2をハードウェアで実現するジオメトリ・シェーダを含んでもよい。
【0028】
2D描画又は画像は、複数回の通過でレンダリングされてもよい。最初の通過は、レンダリングされている画像のためにシザリング及びマスキングについてバッファ内で値を生成してもよい。第2の通過は、画像内のパスにモザイク配列化を行い、これらのパスについてカバレージ値を決定してもよい。第3の通過は、ペイント及び入力画像をパスへ適用し、画面用の最終画像を生成してもよい。各々の通過は、デバイス100内のユニットの幾つか又は全部を使用してもよい。OpenVG 2Dグラフィックス・パイプラインの異なる段を、デバイス100内の様々なユニットで処理することは、後述する。
【0029】
段2では、GPUドライバ112が、屈曲及びストロークされたパスのモザイク配列化を行い、三角扇形を提供してもよい。屈曲されたパスは、頂点によって画定された一連のエッジを有する三角扇形を用いて近似されてもよい。これらの頂点は、パスの曲率及び画像品質要件に基づいて決定されてもよい。
【0030】
図4は、5つの頂点V0、V1、V2、V3、V4によって画定されたパスのモザイク配列の一例を示す。三角扇形は、V0からV1へのエッジ412、次いでV1からV2へのエッジ414、次いでV2からV3へのエッジ416、次いでV3からV4へのエッジ418、次いでV4からV0へ戻るエッジ420を描画することによって形成される。V0は三角扇形の中心点である。
【0031】
段3では、必要に応じて、頂点シェーダ124が、ユーザ座標系から画面座標系へ、三角扇形の変換を行ってもよい。2Dグラフィックスの変換は、3Dグラフィックスの変換と同じやり方で行われてもよい。
【0032】
段4では、ユニット126、128、130が、変換の後に、三角扇形に基づいて2D画像のためにカバレージ・マスクがあればこれを生成してもよい。これらのユニットは、三角扇形によって形成された形状の内側及び外側にある画素を決定する。パスは閉じられてもよく、パスの形状は平面を内側領域と外側領域へ分割してもよい。内側領域の画素は、後続の段によって、外側領域の画素とは異なるように扱われてもよい。
【0033】
形状の内側及び外側領域は、非ゼロ・フィル規則又は奇数/偶数フィル規則のいずれかに基づいて決定されてもよい。両方の規則では、所与の点が形状の内側にあるか外側にあるかを決定するため、所与の点から線が任意の無限方向へ描画される。図4で示される例では、線432が点430から右へ描画される。カウンタはゼロへリセットされる。点430からスタートし線432に沿って無限方向へ進むとき、カウンタは、(a)左から右へ行くエッジによって線432が交差される場合1だけ増分され、(b)右から左へ行くエッジによって線432が交差される場合1だけ減分される。図4では、点430からスタートし線432に沿って進むとき、カウンタは、左から右へ線を交差するエッジ414に起因して1だけ増分され、左から右へ線を交差するエッジ420に起因して再び1だけ減分される。こうして、点430は2のフィル値を有する。他の領域の0及び1のフィル値が、図4に示される。
【0034】
非ゼロ・フィル規則の場合、点のフィル値がゼロに等しくない場合、点は形状の内側にある。奇数/偶数フィル規則の場合、点のフィル値が奇数である場合、符号に関わらず、点は形状の内側にある(例えば、−7は奇数であり、0は偶数である)。2つのフィル規則は、内側及び外側領域の異なる定義を提供し得る。図4で示される例では、非ゼロ・フィル規則の場合、1及び2のフィル値を有する領域は形状の内側にあり、全ての他の領域は形状の外側にある。奇数/偶数フィル規則の場合、1のフィル値を有する領域は形状の内側にあり、全ての他の領域は形状の外側にある。
【0035】
ユニット126、128、130は、画像内の画素についてカバレージ値を決定してもよい。深度テスト・エンジン130は、バック・フェイス・カリング(back face culling)をディセーブルにする、色をディセーブルにする、描画サーフェイスを設定する、などによって、3D処理の代わりに2D処理へ構成されてもよい。エンジン130は、ステンシル・テストを行い、深度テストをディセーブルにするように構成されてもよい。ステンシル・バッファ144は、描画サーフェイスでクリアされてもよい。
【0036】
プリミティブ・プロセッサ126は、所定の規則に基づいて三角扇形を1つ又は複数の三角形へ分解してもよい。例えば、図4の三角扇形は3つの三角形へ分解されてもよい。即ち、第1の三角形は頂点V0、V1、V2を有し、第2の三角形はV0、V2、V3を有し、第3の三角形はV0、V3、V4を有する。各三角形は頂点V0、先行する三角形(もしあれば)の最後の頂点、及び新しい頂点を含む。プリミティブ・プロセッサ126は、各三角形をラスタライズするためスキャン・コンバータ128によって使用されるパラメータも生成してもよい。スキャン・コンバータ128は、各三角形内の画素を決定してもよい。
【0037】
深度テスト・エンジン130は、スキャン・コンバータ128から受け取られた画素についてステンシル値を更新してもよい。エンジン130は、時計回り方位を有する三角形内の画素についてステンシル値を増分し、反時計回り方位を有する三角形内の画素についてステンシル値を減分してもよい。又は、この逆であってもよい。図4で示される例では、エンジン130は、頂点V0、V1、V2を有する時計回り方位の第1の三角形内の画素についてステンシル値を増分してもよい。エンジン130は、頂点V0、V2、V3を有する反時計回り方位の第2の三角形内の画素についてステンシル値を減分してもよい。エンジン130は、頂点V0、V3、V4を有する時計回り方位の第3の三角形内の画素についてステンシル値を増分してもよい。図4は、三角扇形の全ての三角形が処理された後の異なる領域内の画素についてステンシル値を与える。
【0038】
各画素のステンシル値は、非ゼロ又は奇数/偶数フィル規則に基づいてカバレージ値へ変換されてもよい。非ゼロ規則の場合、画素のステンシル値が非ゼロであれば、画素は形状の内側にあり、そうでなければ形状の外側にある。奇数/偶数規則の場合、画素のステンシル値が奇数であれば、画素は形状の内側にあり、そうでなければ形状の外側にある。
【0039】
画素は、ノーマルサンプリング(normal sampling)又はスーパーサンプリング(super sampling)アンチエイリアシングを用いて表現されてもよい。ノーマルサンプリングとは、各画素のために1つのサンプルを使用することである。各画素のステンシル値及びカバレージ値は、上記で説明されたように決定されてもよい。スーパーサンプリング・アンチエイリアシング(又は簡単に、アンチエイリアシング)とは、各画素のために複数のサンプルを使用することであり、画像品質を改善する技術である。例えば、各画素は次のようなサンプルで表現されてもよい。
【0040】
・x及びy方向の双方で2のスケール因子について2×2サンプル
・x方向で4及びy方向で2のスケール因子について4×2サンプル
・x及びy方向の双方で4のスケール因子について4×4サンプル
他のスケール因子も、x及びy方向で使用されてもよい。異なるサンプリング・パターンも同様に使用されてもよい。例えば、サンプルが疎に存在し、異なる方向に回転されたパターンが使用されてもよい。アンチエイリアシングを用いると、各サンプルは部分画素(sub-pixel)を表現する。
【0041】
アンチエイリアシングを用いると、ステンシル値は、画素の代わりにサンプル(又は部分画素)について決定されてもよい。スキャン・コンバータ128は、各三角形内のサンプルを決定してもよく、各サンプルのステンシル値は、上記で説明されたように更新されてもよい。全ての三角形が処理された後、各サンプルのステンシル値に基づいて「1」又は「0」のカバレージ値が各サンプルについて決定されてもよい。次いで、(a)各画素の全てのサンプルについてカバレージ値を合計し、(b)この合計値を正規化することによって、カバレージ値が各画素について決定されてもよい。例えば、画素の8ビット・カバレージ値は、0〜255の範囲にあってもよい。ここで、0は画素が完全に形状の外側あることを示し、255は画素が完全に形状の内側にあることを示す。画素の8ビット・カバレージ値は、((Sum/NumSamples)*255+0.5)の底(floor)に等しく設定されてもよい。ここで、Sumは、この画素の全サンプルのカバレージ値の合計であり、NumSamplesは、画素のサンプルの数である。NumSamplesは、2×2スーパーサンプリングについて4に等しく、4×2スーパーサンプリングについて8に等しく、4×4スーパーサンプリングについて16に等しく、以下同様である。
【0042】
ノーマルサンプリング及びアンチエイリアシングの双方について、画素のカバレージ値は、図3のzバッファ142内に記憶されてもよく、画素の明度を決定するために使用されてもよい。アンチエイリアシングは、他のやり方で行われてもよい。例えば、「1」及「0」のカバレージ値は部分画素について記憶されてもよく、明度は部分画素について決定されてもよく、部分画素のカバレージ値に基づいて部分画素の明度が組み合わせられ、画素の最終的明度が決定されてもよい。
【0043】
段5では、深度テスト・エンジン130がクリッピング及びマスキングを行って、パス及び最終画像を、描画サーフェイスの境界及び/又は1つ又は複数のシザリング領域の内部へクリップしてもよい。各シザリング領域は、保持すべき描画サーフェイスの特定のセクションを記述する。エンジン130は、描画サーフェイス上の各画素がシザリング領域のいずれか1つの中に入るかどうかを決定することによって、シザリングを行ってもよい。各画素はシザ値を関連づけられてもよい。シザ値は、この画素がいずれかのシザリング領域内にあるかどうかを示してもよい。
【0044】
ステンシル・バッファ144は、画素のシザ値を記憶するために使用されてもよく、シザリングを行う前にクリアされてもよい(例えば、オール・ゼロへ)。次いで、一度に1つのシザリング領域についてシザリングが行われてもよい。各シザリング領域について、スキャン・コンバータ128はシザリング領域内の画素を決定してもよい。エンジン130は、スキャン・コンバータ128からの各画素についてシザ値を更新してもよい。例えば、シザリング領域が追加されている場合、エンジン130は各画素のシザ値を1だけ増分し、シザリング領域が除去されている場合、シザ値を1だけ減分してもよい。全てのシザリング領域が描画された後、シザリング・マスクが取得される。画素がシザリング領域内にない場合、画素のシザ値はゼロであり、画素が少なくとも1つのシザリング領域内にある場合、非ゼロである。パスの描画前又は後で、シザリングが行われてもよい。
【0045】
画素をレンダリングするかどうかを決定するために、ステンシル・バッファ144内のシザ値及びzバッファ142内のカバレージ値が使用されてもよい。パスのために境界ボックスが描画され、ボックス内の画素を決定するためにラスタライズされてもよい。ボックス内の各画素は、(a)画素のカバレージ値がゼロであるか画素のシザ値がゼロである場合、廃棄又はドロップされてもよく、(b)そうでなければ、次の段へ通過させてもよい。通過した画素のカバレージ値も、次の段へ提供され、これらの画素の明度を決定するために使用されてもよい。
【0046】
カバレージ値及びマスク・バッファからのマスク値に基づいて、マスキングも行われてもよい。画素のカバレージ値は、この画素のマスク値を乗算されてもよい。結果の値がゼロである場合、画素はドロップされてもよく、そうでなければ通過してもよい。マスキングは、深度テスト・エンジン130の代わりに、フラグメント・シェーダ132又は他のユニットによっても行われてもよい。
【0047】
段6では、フラグメント・シェーダ132が、ペイント又は入力画像に基づいて、最終画像内の各画素のために明度及びアルファ値を決定してもよい。フラグメント・シェーダ132は、1つのタイプのペイントでパスの内部をフィルし、及び/又は同一又は異なるタイプのペイントでパスの輪郭をストロークしてもよい。ペイントは、描画されている各画素の明度及びアルファ値を定義する。3つのタイプのペイントが存在する。即ち、色ペイント、勾配ペイント、及びパターン・ペイントである。色ペイントは、全画素のために一定の色を定義する。勾配ペイントは、滑らかに変化する色の線形又は放射パターンを画定する。パターン・ペイントは、出所画像に基づいて、可能性として反復する色の長方形パターンを画定する。ペイントはペイント座標系で定義され、ユーザ座標系へ変換されてもよい。変換の後、所与の(x,y)画素に最も近いペイント値が、この画素について使用されてもよく、又は中心画素を取り巻く複数の画素からのペイント値が、組み合わせられて補間ペイント値を生成してもよい。フラグメント・シェーダ132は、テクスチャを3D画像へ適用する場合と同じやり方で、ペイントを用いてパスをフィル及び/又はストロークしてもよい。フラグメント・シェーダ132は、カーネルを用いてパターン・ペイントをフィルタしてもよい。ペイント及び色情報はGPUドライバ112によって定義されてもよく、適当な処理ユニットへ送られてもよい。
【0048】
色情報は、幾つかの色フォーマットで記憶又は処理されてもよい。人間の目は高輝度よりも低輝度/強度へ敏感である。明度は、通常ガンマ圧縮と呼ばれるプロセスを経由して圧縮されてもよく、非線形の明度が取得されてもよい。ガンマ圧縮は、明度をマップして、より微細な解像度が低輝度について達成され、より粗大な解像度が高輝度について達成されるようにする。ガンマ圧縮は、例えば
【数1】
【0049】
として行われてもよい。ここでclinは線形明度であり、cnlは非線形明度であり、γは圧縮量を決定するガンマ値である。ガンマ拡張は、非線形明度を拡張して線形明度を取得する相補プロセスである。ガンマ拡張は、ガンマ圧縮に使用される関数の逆の関数に基づく。
【0050】
フラグメント・シェーダ132は、段6及び7のために色変換を行ってもよい。画素の明度は、次のフォーマットのいずれか1つで表現されてもよい。
【0051】
・ sRGBA − 非事前乗算非線形色フォーマット
・ sRGBA_PRE − 事前乗算非線形色フォーマット
・ IRGBA − 非事前乗算線形色フォーマット
・ IRGBA_PRE − 事前乗算線形色フォーマット
ここで、R、G、B、Aは、それぞれ赤、緑、青、アルファを表す。
【0052】
ペイント及び画像は、非線形明度としてメモリ内に記憶されてもよく、線形明度として処理されてもよい。必要に応じて、非線形明度を線形明度へ変換し、及びこの逆へ変換するため、色フォーマット変換が行われてもよい。明度cはアルファ値αと乗算され、事前に乗算された明度c’=α*cを求めてもよい。或る演算(例えば、ブレンディング)は、事前に乗算された明度の上で、より便利に行われてもよい。
【0053】
様々な色フォーマット間の変換は、逆(RCP)ルックアップ・テーブル(LUT)、ガンマLUT、及びデガンマ(degamma)LUTを用いて達成されてもよい。RCP LUTは入力値を受け取って入力値の逆を提供する。ガンマLUTはガンマ圧縮関数を記憶し、線形明度を受け取って非線形明度を提供する。デガンマLUTは相補ガンマ拡張関数を記憶し、非線形明度を受け取って線形明度を提供する。
【0054】
事前に乗算された(事前乗算)フォーマットから、事前に乗算されていない(非事前乗算)フォーマットへの変換は、次のように達成されてもよい。
【数2】
【0055】
ここで、RGBは、赤、緑、青の明度の各々についての演算を表す。
【0056】
線形及び非線形色フォーマット間の変換は、次のように達成されてもよい。
【数3】
【0057】
一般的フォーマット変換は、1つの色空間を他の色空間へ変換するために使用されてもよい。ここで、変換は任意の関数に基づいてもよい。
【0058】
段7では、フラグメント・シェーダ132が入力画像の上でコンボリューション・フィルタリングを行ってもよい。コンボリューション・フィルタリングは、エッジ鮮明化、ぼけ、ノイズ低減、スケーリング、回転、テクスチャ・マッピングなどの効果を取得するために使用されてもよい。
【0059】
図5は、画像500内の3×3格子510のコンボリューション・フィルタリングの一例を示す。格子510内の9つの画素値px−1,y−1からpx+1,y+1は、3×3カーネル520内の9つの係数k0,0からk2,2を用いてフィルタリングされ、位置(x,y)で新しい画素値を生成する。
【0060】
コンボリューション・フィルタリングは、次のように表現されてもよい。
【数4】
【0061】
ここで、Wは格子/カーネルの幅、Hは格子の高さであり、
ki,jは格子内の位置(i,j)におけるカーネル係数であり、
Sはスケーリング因子、bはバイアス値であり、
px,yは画像内の位置(x,y)における元の画素値であり、
p’x,yは位置(x,y)における元の画素値と置き換わる新しい画素値であり、
shiftXは位置(x,y)から格子の左へのオフセットであり、
shiftYは位置(x,y)から格子の底へのオフセットである。
【0062】
Sは、
【数5】
【0063】
の正規化因子又は他の値であってもよい。
【0064】
カーネル係数がx及びy方向で分離可能である場合、コンボリューション・フィルタリングは次のように表現されてもよい。
【数6】
【0065】
ここで、kiは格子内の水平位置iにおけるカーネル係数であり、
kjは格子内の垂直位置jにおけるカーネル係数である。
【0066】
位置(i,j)におけるカーネル係数は、ki,j=ki・kjのように引き出されてもよい。
【0067】
図5で示される例では、W=3、H=3、shiftX=1、及びshiftY=1である。一般的に、shiftXは幅の約半分であり、shiftYは高さの約半分である。異なるタイプのコンボリューション・フィルタリング及び異なるカーネルは、フィルタリングされた画像内で異なる効果をもたらすかも知れない。
【0068】
任意のH×W画素格子のコンボリューション・フィルタリングは、格子を、より小さいセクションへ区分し、各セクションについて計算を行い、全セクションの中間結果を組み合わせて最終結果を取得することによって達成されてもよい。セクションのサイズは、計算に使用される算術論理ユニット(ALU)の処理能力に基づいて選択されてもよい。一般的に、任意のセクション・サイズが使用されてもよい。一設計において、セクション・サイズは2×2以下である。この設計では、3×3画素格子が、1つの2×2セクション、1つの1×2セクション、1つの2×1セクション、1つの1×1セクションへ分解されてもよい。
【0069】
2×2セクションのコンボリューション計算は、次のように表現されてもよい。
【数7】
【0070】
ここで、(xi,yj)は2×2セクション内のより低い左下方画素の位置を表し、
ri,jは2×2セクションの中間結果である。
【0071】
方程式(3)の計算は、4つのユニットを有するALU、例えば、4×1ベクトルの内積を計算できるクワッドALU又は4対のスカラーを乗算及び累積できる4スカラーALUによって効率的に行われてもよい。1×1、1×2、又は2×1セクションのコンボリューション計算は、方程式(3)で示される係数のサブセット及び画素のサブセットを含む。
【0072】
画素の座標系は、カーネル係数の座標系と一致しても一致しなくてもよい。更に、所与の画素のx及びy値は、整数又は非整数値であってもよい。例えば、コンボリューション・フィルタリングは、画像の(x,y)座標系と一致しない(u,v)座標系で与えられたテクスチャ画素(テクセル)上で行われてもよい。画素座標が実数値である場合、画素へ適用すべき係数は、幾つかのやり方で決定されてもよい。スナップ・ツー・ニアレスト(snap-to-nearest)モードの場合、画素座標は最も近い整数値へ丸められ、丸められた座標のカーネル係数が画素へ適用される。補間モードの場合、画素へ最も近い4つのカーネル係数が使用され、補間された係数を生成し、この係数が画素へ適用される。
【0073】
コンボリューション・フィルタリングの2つのモード、即ち、モード0及びモード1がサポートされてもよい。モード0の場合、コンボリューション計算は、スナップ・ツー・ニアレスト係数を使用して、最大4つの画素のセクション上で行われてもよい。4つの画素座標は、最も近い整数値へ丸められてもよい。丸められた座標の最大4つの画素値が、メモリから検索され、最大4つのカーネル係数を用いて適用され、新しい画素値を取得してもよい。モード1の場合、画素座標へ最も近い4つのカーネル係数から生成された補間係数を使用して、コンボリューション計算が各画素上で行われてもよい。
【0074】
図6は、フィルタリング・ユニット600の設計のブロック図を示す。フィルタリング・ユニット600は、フラグメント・シェーダ132の一部分であってもよい。バッファ/メモリ610は、上記で与えられた色フォーマットの1つで明度及びアルファ値を提供する。ユニット612は、受け取られた明度及びアルファ値に対して使用される単純フォーマッティング変換を行う。ユニット614は、複雑フォーマッティングの非圧縮を行う。フィルタリングALU620は、画素の明度をカーネル係数と乗算し(例えば、2×2以下のセクションについて)、中間結果を提供する。アキュムレータ622は各格子の中間結果を累積し、格子によってカバーされる画素の最終結果を提供する。
【0075】
フラグメント・シェーダ132は、入力画像と背景色との間の補間を行い、各画素の明度及びアルファ値を決定してもよい。フラグメント・シェーダ132は補間結果を画素ブレンダ134へ提供し、画素ブレンダ134は他の明度及びアルファ値とブレンディングしてもよい。
【0076】
段8では、OpenVGによってサポートされる多数のブレンディング・モードの1つに従って、画素ブレンダ134がブレンディングを行ってもよい。ブレンディング・モードは、次の方程式を関連づけられる。
【0077】
1.α(αsrc,αdst)として表されるアルファ・ブレンディング方程式
2.c(csrc,cdst,αsrc,αdst)として表される色ブレンディング方程式
ここで、αsrcは出所のアルファ値、αdstは行先のアルファ値、csrcは出所の明度、cdstは行先の明度である。明度cは、赤(R)、緑(G)、又は青(B)であってもよい。
【0078】
ブレンディングは、(Rsrc,Gsrc,Bsrc,αsrc)として表される出所の明度及びアルファ・タプルを、(Rdst,Gdst,Bdst,αdst)で表される行先の明度及びアルファ・タプルと組み合わせて、c(Rsrc,Rdst,αsrc,αdst)、c(Gsrc,Gdst,αsrc,αdst)、c(Bsrc,Bdst,αsrc,αdst)、α(αsrc,αdst)で構成されるブレンディングされたタプルを提供する。組み合わせは、アルファ及び色ブレンディング方程式に従って行われる。具体的には、各々の色成分の出所及び行先明度が、色ブレンディング方程式に従って組み合わせられ、出所及び行先アルファ値が、アルファ・ブレンディング方程式に従って組み合わせられる。異なる方程式及び/又は異なるアルファ値を用いて、異なる結果が取得されてもよい。ブレンディングされたタプルは、典型的には、行先タプルと置き換わる。
【0079】
OpenVGは5つのポーター・ダフ(Porter-Duff)ブレンディング・モードをサポートする。ポーター・ダフ・ブレンディング・モードは、次のアルファ及び色ブレンディング方程式を使用する。
【数8】
【0080】
ここで、Fsrc及びFdstは、それぞれ出所及び行先のブレンディング因子である。5つのポーター・ダフ・ブレンディング・モードのFsrc及びFdstが、OpenVGで与えられている。
【0081】
事前乗算明度の色ブレンディング方程式は、次のように与えられてもよい。
【数9】
【0082】
方程式(6)は方程式(4)に相当する。方程式(6)は、事前乗算明度c’src及びc’dstについて使用されてもよく、方程式(4)は、非事前乗算明度csrc及びcdstについて使用されてもよい。
【0083】
OpenVGは、4つの追加ブレンディング・モードをサポートする。表1は、4つの追加ブレンディング・モードを列挙し、各モードの色ブレンディング方程式を与える。各々の追加ブレンディング・モードは明度を組み合わせて、c’(csrc,cdst,αsrc,αdst)として表されるブレンディングされた事前乗算明度を提供する。
【表1】
【0084】
OpenVGは、出所及び行先がオーバラップしないときに使用される加法的ブレンディング・モードを更にサポートする。加法的ブレンディング・モードのアルファ及び色ブレンディング方程式は、次のように与えられる。
【数10】
【0085】
他のブレンディング・モードも、2Dグラフィックスについてサポートされてもよい。一般的に、GPU120は、2Dグラフィックスについて、ブレンディング・モードの任意のセットをブレンディング方程式の任意のセットでサポートしてもよい。GPU120は、ステンシル補間もサポートしてもよい。ステンシル補間は、方程式の次のセットを使用する。
【数11】
【0086】
ここで、αimageは第1の出所アルファ値であり、αpaintは第2の出所アルファ値であり、方程式(9)についてαsrc=αimage*αpaintであり、方程式(10)についてαsrc=αimage*αpaint*cimageである。
【0087】
アルファ・ブレンディング方程式(9)及び色ブレンディング方程式(10)は、ブレンディング・モードに依存してもよい。例えば、「SrcオーバーDst」ポーター・ダフ・ブレンディング・モードが選択される場合、ステンシル補間は次のように表現されてもよい。
【数12】
【0088】
様々なブレンディング・モード(例えば、OpenVGのブレンディング・モード及び/又は他のブレンディング・モード)のブレンディング方程式は、演算の基本セットを用いて効率的に実現されてもよい。各々のブレンディング方程式は一連の演算へ分解され、各演算は基本セットから取られてもよい。異なるブレンディング方程式は、異なる演算シーケンスを用いて実現されてもよい。演算の基本セットは、ハードウェア実現を単純化し、柔軟性を提供して様々なブレンディング方程式並びに他のグラフィックス機能及び特質をサポートしてもよい。
【0089】
図7は、ブレンディングのためのブレンディング命令700の設計を示す。ブレンディング演算(Op)フィールド714は、基本セット内のどの演算を行うべきかを示す。出所(Src)フィールド720は、出所値がどこに記憶されているかを示す。行先(Dst)フィールド718は、行先値がどこに記憶されるかを示す。Srcf
フィールド724は、演算の出所ブレンディング因子を示す。Dstfフィールド722は、演算の行先ブレンディング因子を示す。結果(Res)フィールド716は、演算の結果をどこに記憶するかを示す。クランプ(clamp)イネーブル・フィールド712は、所定の値域、例えば、0と1の間へ結果を制約すべきかどうかを示す。異なるフィールドを有する他の命令フォーマットも使用されてもよい。
【0090】
表2は、演算の基本セットの例及び各演算のOpコードを示す。Opコード0〜7を有する演算は、それぞれ演算0〜7と呼ばれる。
【表2】
【0091】
演算0及び1の場合、出所及び行先値はそれぞれ出所及び行先ブレンディング因子によってスケールされ、スケールされた値は組み合わせられる。演算2は出所及び行先値の小さい方を提供し、演算3は2つの値の大きい方を提供する。演算4は出所及び行先値をそれぞれ出所及び行先ブレンディング因子でスケールし、2つのスケールされた値を記憶する。演算5は出所値の上で逆演算を行って結果値を提供する。演算6及び7はそれぞれガンマ拡張及びガンマ圧縮に使用される。表2は演算の基本セットについて特定の設計を示す。演算の他のセットも、ブレンディングに使用されてもよい。
【0092】
出所明度は、フラグメント・シェーダ132から受け取られ、出所レジスタに記憶されてもよい。行先明度は、メモリ(例えば、色バッファ148)から検索され、行先レジスタに記憶されてもよい。出所及び行先明度は組み合わせられてもよく、ブレンディングされた明度は、行先レジスタに記憶されてもよい。異なる演算を柔軟にサポートするために、複数の出所レジスタが使用され、出所明度及びアルファ値並びに中間値を記憶してもよい。複数の行先レジスタも使用され、行先明度及びアルファ値並びに中間値を記憶してもよい。
【0093】
Srcフィールド720及びDstフィールド718の各々は、使用可能なレジスタのセット内の任意のレジスタを示してもよい。このセットは、出所レジスタ、第2の出所レジスタ、行先レジスタ、一時行先レジスタなどを含んでもよい。Resフィールド716は、複数の出力選択肢の任意の1つ、例えば、出所レジスタ、第2の出所レジスタ、行先レジスタ、一時行先レジスタ、出所及び行先レジスタの双方、最終出力などを示してもよい。
【0094】
Srcf及びDstfブレンディング因子は、表2の演算0、1、4について、Src及びDst値をそれぞれスケールするために使用される。Srcf及びDstfブレンディング因子の各々は、全ブレンディング・モードをサポートできるブレンディング因子のセットから選択されてもよい。このセットは、(a)ゼロ、(b)出所レジスタ、第2の出所レジスタ、行先レジスタ、定数レジスタなどの中のアルファ値及び明度、(c)1からこれらのアルファ値及び明度を差し引いた値、(d)これらのアルファ値及び明度で1を割り算した値、(e)出所アルファと、1から出所アルファを差し引いたものとの小さい方、及び/又は(f)他の値を含んでもよい。
【0095】
各々のブレンディング・モードは、ブレンディング命令のセットを用いて実現されてもよい。例えば、方程式(4)から(6)で示される5つのポーター・ダフ・ブレンディング・モードの各々は、2つの命令を用いて実現されてもよい。第1の命令は、出所及び行先明度を、それぞれ出所及び行先アルファ値で乗算してもよい。第2の命令は、事前乗算出所及び行先明度を、それぞれFsrc及びFdstブレンディング因子で乗算し、方程式(6)で示されるように、2つのスケールされた値を組み合わせてもよい。2つの命令は次のように与えられてもよい。
【数13】
【0096】
ここで、出所ブレンディング因子Srcf及び行先ブレンディング因子Dstfは、実現されているポーター・ダフ・ブレンディング・モードに依存する。
【0097】
画素ブレンダ134も、異なる色フォーマット間で色変換を行ってもよい。色変換は、メモリから読み出される明度及び/又はメモリへ書き込まれる明度について行われてもよい。
【0098】
様々なブレンディング・モードが、次のようにサポートされてもよい。
【数14】
【0099】
上記の疑似コードは、色成分が事前乗算非線形明度として記憶されることを仮定する。命令10、20、30は、行先明度を事前フォーマッティングするための命令である。命令10及び20は、行先明度から行先アルファ(a.dst)を分離する。命令30は非線形色を線形色へ変換する。命令40から4nは、選択されたブレンディング・モードに依存する演算のための命令であり、出所及び行先明度をそれぞれ出所アルファ(a.src)及び行先アルファで乗算することを含んでもよい。命令50から80は、結果の明度を事後フォーマッティングするための命令である。命令50及び60は、結果のアルファ(a.res)を分離して、非事前乗算明度を取得する。命令70は線形色を非線形色へ変換する。命令80は、非線形明度を結果のアルファで乗算し、最終結果をメモリへ戻す。明度が非事前乗算フォーマットで記憶される場合、命令10、20、80は省略されてもよい。色成分が非線形明度の代わりに線形明度として記憶される場合、命令30及び70は省略されてもよい。
【0100】
図8は、ブレンディング・ユニット800の設計のブロック図を示す。ブレンディング・ユニット800は、図3の画素ブレンダ134の一部分であってもよい。出所レジスタ812及び814は、フラグメント・シェーダ132からの出所明度及びアルファ値及び/又はブレンディング実行ユニット810からの中間結果を記憶する。事前フォーマッティング・ユニット820は、行先明度及びアルファ値を受け取り(例えば、図3の色バッファ148から)、事前フォーマッティングを行う。ユニット820は、事前乗算明度についてアルファを分離し、非線形色から線形色への変換及びその他を行ってもよい。行先レジスタ822及び824は、事前フォーマッティング・ユニット820からの事前フォーマッティングされた行先明度及びアルファ値及び/又はブレンディング実行ユニット810からの中間結果を記憶する。
【0101】
ブレンディング実行ユニット810は、ブレンディング命令を受け取り(例えば、図3のコマンド・エンジン122から)、受け取られた命令をデコードする。ユニット810は、更に、デコードされた命令に従って、出所及び行先値及びブレンディング因子を読み出し、これらの値及び因子を、処理のために計算ユニット840へ送る。ユニット810は、ユニット840から結果を受け取り、これらの結果を適当なレジスタに記憶する。事後フォーマッティング・ユニット830は、結果の上で事後フォーマッティングを行い、事前乗算明度についてアルファを分離し、線形色から非線形色への変換を行い、結果の明度が事前乗算フォーマットで記憶されるべきである場合アルファで乗算し、及びその他を行ってもよい。
【0102】
ユニット840は、可逆(RCP)ユニット842、ガンマLUT844、デガンマLUT846、及びブレンディングALU848を含む。ブレンダALU848は、ユニット810、820、830から受け取られたオペランドの上で演算し、結果をこれらのユニットへ戻してもよい。ユニット842は、入力オペランドを受け取り、オペランドの逆数(reciprocal)を提供する。ガンマLUT844は、線形明度を受け取り、非線形明度を提供する。デガンマLUT846は、非線形明度を受け取り、線形明度を提供する。ユニット840はブレンディング・ユニット800の一部分であってもよく、画素ブレンダ134のためだけに使用されてもよい。あるいは、ユニット840は画素ブレンダ134の外部にあってもよく、色変換のために画素ブレンダ134及びフラグメント・シェーダ132によって共有されてもよい。
【0103】
制御レジスタ850は、処理されているデータの色フォーマットを示す制御ビットを記憶する。例えば、制御ビットは、明度が、(a)事前乗算又は非事前乗算フォーマットで記憶されるかどうか、(b)非線形又は線形フォーマットで記憶されるかどうかを示してもよい。ユニット820は、制御ビットに従って、到着する行先明度の上で事前フォーマッティングを行ってもよい。同様に、ユニット830は、制御ビットに従って、出発する明度の上で事後フォーマッティングを行ってもよい。制御レジスタ850は、GPUドライバ112又は他のユニットによって設定されてもよい。
【0104】
図9は、基本2Dグラフィックスのために図1のデバイス100を使用する設計900を示す。この設計では、コマンド・エンジン122、スキャン・コンバータ128、及び画素ブレンダ134が2Dグラフィックス処理に主として使用され、全ての他のユニットは迂回されるか、まれにしか使用されない。
【0105】
基本2Dグラフィックスのプリミティブは、線、長方形、三角扇形を含んでもよい。他のプリミティブは、例えば、GPUドライバ112によって、長方形、三角形、又は線へモザイク配列化されてもよい。基本2Dグラフィックスの属性は、各画素について、1つの明度、及びビットブロック転送(bitblt)、ストレッチbitblt、又は点描パターンのために出所バッファの1対の座標を含んでもよい。
【0106】
点描線の場合、GPUドライバ112は、線点描パターンを1Dテクスチャとして処置し、線の2つの端点についてパターンの座標を計算してもよく、次いでコマンド・エンジン122を経由してスキャン・コンバータ128へ座標情報を提供してもよい。スキャン・コンバータ128は、線上の画素ごとに座標を計算し、画素アドレスを生成してもよい。座標は、フラグメント・シェーダ132を使用することなく、制御レジスタ内で点描パターンを調べるために使用されてもよい。マスクは点描パターンから取得されてもよい。ラスタライズ方向は、オーバラップするbitbltについて変更されてもよい。フラグメント・シェーダ132の使用及び属性セットアップ及び補間を回避して電力を節減するため、GPUドライバ112は、例えば、最大4つの成分について、属性セットアップを行い、勾配を計算してもよい。スキャン・コンバータ128は4つの加算器を含んでもよく、最大4つの成分について補間を行ってもよい。bitblt及びストレッチbitbltの場合、GPUドライバ112は出所画像/バッファのために初期座標及び勾配を提供してもよい。したがって、スキャン・コンバータ128が、プリミティブ、例えば、線、三角形、又は長方形プリミティブの内部の画素ごとに座標を計算してもよい。座標は、色キャッシュを経由して出所画像/バッファ内の画素値を調べるために使用されてもよい。勾配フィルの場合、GPUドライバ112が初期の色及び勾配を提供してもよい(例えば、最大4つの成分)。スキャン・コンバータ128は、(画素座標を計算するために使用される)同じ加算器を使用して、長方形プリミティブの内部の画素ごとの明度を計算してもよい。
【0107】
画素情報及び色情報は、画素ブレンダ134へ直接提供されてもよい。マルチプレクサ912は、コマンド・エンジン122を経由する外部出所からの出所色(Src)、スキャン・コンバータ128からの勾配フィルの出所色、又は色キャッシュ/バッファ910からの出所色を受け取ってもよい。マルチプレクサ912は、3つの入力の1つからの出所色を画素ブレンダ134へ提供してもよい。色キャッシュ910は、図3の画素ブレンダ134と色バッファ148との間に置かれてもよい。色キャッシュ910は、スキャン・コンバータ128から出所アドレス又はストレッチbitbltアドレスを受け取ってもよく、出所色をマルチプレクサ912へ提供してもよい。色キャッシュ910は、更に、スキャン・コンバータ128から行先読み出しアドレスを受け取り、行先色を画素ブレンダ134へ提供してもよい。画素ブレンダ134は、様々な2Dグラフィックス機能、例えば、ビットブロック転送、2Dアルファ・ブレンディング、フォント・レンダリング、ROP3、出所及び行先色キー(color key)、パレット・テーブル(例えば、256×32又は16×16×32)などをサポートしてもよい。ROP3は、3つのオペランド(例えば、出所色、行先色、パターン/ブラシ色)のラスタ演算である。他の2Dグラフィックス機能、例えば、コンボリューション・フィルタリングは、フラグメント・シェーダ132又は他のユニットによって行われてもよい。
【0108】
図10は、2D及び3Dグラフィックスをサポートするプロセス1000を示す。3Dグラフィックス処理は、3D画像をレンダリングする3Dグラフィックス・パイプラインに従って行われる(ブロック1012)。2Dグラフィックス処理は、2D画像をレンダリングする2Dグラフィックス・パイラインに従って行われる(ブロック1014)。2Dグラフィックス・パイプラインの複数の段の各段は、例えば、図3で示されるように、3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされる。
【0109】
一般的に、2Dグラフィックス・パイプライン及び3Dグラフィックス・パイプラインの各々は、任意の数の段を含んでもよい。2Dグラフィックス・パイプラインの段は、様々なマッピング・スキームに基づいて、3Dグラフィックス・パイプラインの段へマップされてもよい。例えば、2Dグラフィックスのクリッピング、マスキング、及びシザリング段は、3Dグラフィックスの深度テスト段へマップされてもよい。2Dグラフィックスのパス内の画素のカバレージ値は、3Dグラフィックスのラスタライズ段、深度テスト段などを使用して決定されてもよい。2Dグラフィックスのペイント生成段及び画像補間段は、3Dグラフィックスのフラグメント・シェーダ段へマップされてもよい。2Dグラフィックスのブレンディング段は、3Dグラフィックスのブレンディング段へマップされてもよく、双方のブレンディング段は、複数のブレンディング・モードを用いてサポートされてもよい。各ブレンディング・モードは、それぞれの命令シーケンスを関連づけられてもよい。2Dグラフィックスの他の段は、例えば、上記で説明したように、3Dグラフィックスの他の段へマップされてもよい。
【0110】
本明細書で説明したGPUは、無線通信デバイス、ハンドヘルド・デバイス、ゲーム用デバイス、コンピューティング・デバイス、コンピュータ、コンシューマ・エレクトロニクス・デバイスなどで使用されてもよい。無線通信デバイスでGPUを使用する例は、下記で説明される。
【0111】
図11は、無線通信システムにおける無線通信デバイス1100の設計のブロック図を示す。無線デバイス1100は、携帯電話機、端末、ハンドセット、電子手帳(PDA)、又は他のデバイスであってもよい。無線通信システムは、符号分割多元接続(CDMA)システム、移動通信用全世界(GSM)システム、又は他のシステムであってもよい。
【0112】
無線デバイス1100は、受信経路及び送信経路を経由して双方向通信を提供することができる。受信経路では、基地局によって送信された信号はアンテナ1112によって受け取られ、受信機(RCVR)1114へ提供される。受信機1114は、受け取られた信号を調整及びディジタル化し、更なる処理のためにサンプルをディジタル・セクション1120へ提供する。送信経路では、送信機(TMTR)1116が、送信されるべきデータをディジタル・セクション1120から受け取り、データを処理及び調整し、変調された信号を生成する。変調された信号は、アンテナ1112を経由して基地局へ送信される。
【0113】
ディジタル・セクション1120は、様々な処理、インタフェース、及びメモリ・ユニット、例えば、モデム・プロセッサ1122、ビデオ・プロセッサ1124、コントローラ/プロセッサ1126、ディスプレイ・プロセッサ1128、縮小命令セット・コンピュータ/ディジタル信号プロセッサ(RISC/DSP)1132、GPU 1134、内部メモリ1136、及び外部バス・インタフェース(EBI)1138を含む。モデム・プロセッサ1122は、データ送信及び受信処理(例えば、符号化、変調、復調、及び復号)を行う。ビデオ・プロセッサ1124は、ビデオ・アプリケーション、例えば、ビデオカメラ、ビデオ再生、及びビデオ会議のビデオ・コンテンツ(例えば、静止画像、ビデオ動画、及び移動テキスト)の処理を行う。コントローラ/プロセッサ1126は、ディジタル・セクション1120内の様々な処理及びインタフェース・ユニットの演算を指令してもよい。ディスプレイ・プロセッサ1128は、ディスプレイ・ユニット1130上でビデオ、グラフィックス、及びテキストの表示を容易にする処理を行う。RISC/DSP1132は、無線デバイス1100のために様々なタイプの処理を行ってもよい。例えば、図3のGPU112は、RISC/DSP1132内で実行されてもよい。GPU1134はグラフィックス処理を行い、図3のGPU120、図2の2Dグラフィックス・パイプライン200の全部又は一部、図6のフィルタリング・ユニット600の全部又は一部、図8のブレンディング・ユニット800の全部又は一部、図10のプロセス1000などを実現してもよい。内部メモリ1136は、ディジタル・セクション1120内の様々なユニットのためにデータ及び/又は命令を記憶する。EBI1138は、ディジタル・セクション1120(例えば、内部メモリ1136)とメイン・メモリ1140との間のデータ転送を容易にする。メモリ1136及び/又はメモリ1140は、図3のバッファ140から148を実現してもよい。
【0114】
ディジタル・セクション1120は、1つ又は複数のDSP、マイクロプロセッサ、RISCなどを用いて実現されてもよい。ディジタル・セクション1120は、1つ又は複数の特定用途集積回路(ASIC)及び/又は他のタイプの集積回路(IC)の上でも組み立てられてもよい。
【0115】
本明細書で説明されたGPUは、様々なハードウェア・ユニット内で実現されてもよい。例えば、GPUは、ASIC、DSP、ディジタル信号処理デバイス(DSPD)、プログラム可能論理回路(PLD)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、電子デバイス、他の電子ユニット内で実現されてもよい。GPUは、統合/組み込みメモリを含むか、含まなくてもよい。
【0116】
本明細書で説明されたGPUは、スタンドアロン型ユニットであるか、デバイスの一部分であってもよい。デバイスは、(i)スタンドアロン型IC、例えば、グラフィックスIC、(ii)データ及び/又は命令を記憶するためのメモリICを含む1つ又は複数のICのセット、(iii)統合されたグラフィックス処理機能を有するASIC、例えば、移動局モデム(MSM)、(iv)他のデバイス内に組み込まれてもよいモジュール、(v)携帯電話機、無線デバイス、ハンドセット、又は移動ユニット、(vi)その他であってもよい。
【0117】
以上のこの開示の説明は、当業者に開示を実行又は使用することができるように提供される。この開示への様々な修正は、当業者にとって容易に明らかであろう。本明細書で定義された一般的原理は、開示の趣旨及び範囲から逸脱することなく他の変形例へ適用されてもよい。したがって、この開示は本明細書で説明された例へ限定されることを意図されず、本明細書で開示された原理及び新規な特徴に一致する最も広い範囲を付与されるべきである。
【技術分野】
【0001】
この開示は、一般的にはエレクトロニクスに関し、更に具体的には、グラフィックス処理を行う技術に関する。
【背景技術】
【0002】
グラフィックス処理ユニット(GPU)は、様々なアプリケーション、例えば、ビデオゲーム、グラフィックス、コンピュータ支援設計(CAD)、シミュレーション及び視覚化ツール、イメージングなどのために、2次元(2D)又は3次元(3D)画像をレンダリングするために使用される専用ハードウェア・ユニットである。2D描画をレンダリングするプロセスは、典型的には2Dグラフィックスに特化された一連の段を含む。これらの2Dグラフィックス段の処理は、計算集約的である。2D GPUは、計算集約的2D処理をハードウェアで行うように設計及び使用されてもよい。2D GPUの使用は、2D描画のレンダリング時間を短くし、全体的パフォーマンスを改善する。
【0003】
同様に、3D画像をレンダリングするプロセスは、典型的には3Dグラフィックスに特化された一連の段を含む。これらの3Dグラフィックス段の処理も、計算集約的である。3D GPUは、計算集約的3D処理をハードウェアで行うように設計及び使用されてもよい。3D GPUの使用は、3D画像のレンダリング時間を短くし、全体的パフォーマンスを改善する。
【0004】
エレクトロニクス・デバイスは、2Dグラフィックスのみをサポートし、2Dグラフィックスを加速化するために2D GPUを使用してもよい。エレクトロニクス・デバイスは、同じように3Dグラフィックスのみをサポートし、3Dグラフィックスを加速化するために3D GPUを使用してもよい。2D及び3Dグラフィックスの双方をサポートするエレクトロニクス・デバイスの場合、できるだけ小さいハードウェアを用いて、2D及び3Dグラフィックスの双方のために良好なパフォーマンスを達成し、コスト及び電力消費を低減することが望ましい。
【発明の概要】
【0005】
本明細書では、2D及び3Dグラフィックスの双方を効率的にサポートする技術が説明される。GPUは、3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行い、3D画像をレンダリングするように設計されてもよい。GPUは、同じように2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行い、2D画像又は描画をレンダリングしてもよい。2Dグラフィックス・パイプラインの複数の段の各段は、3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされてもよい。GPU内の処理ユニットは効率的に使用され、2D及び3Dグラフィックスの双方のために処理を行ってもよい。
【0006】
一般的に、2Dグラフィックス・パイプライン及び3Dグラフィックス・パイプラインの各々は、任意の数の段を含んでもよい。2Dグラフィックス・パイプラインの段は、様々なマッピング・スキームに基づいて3Dグラフィックス・パイプラインの段へマップされてもよい。例えば、2Dグラフィックスのクリッピング、マスキング、及びシザリング(scissoring)段は、3Dグラフィックスの深度テスト段へマップされてもよい。2Dグラフィックスのパス(path)内の画素のカバレージ値は、3Dグラフィックスのラスタライズ段、深度テスト段などを使用して決定されてもよい。2Dグラフィックスのペイント(paint)生成段及び画像補間段は、3Dグラフィックスのフラグメント・シェーダ(fragment shader)段へマップされてもよい。2Dグラフィックスのブレンディング(blending)段は、3Dグラフィックスのブレンディング段へマップされてもよく、双方のブレンディング段は、複数のブレンディング・モードを用いてサポートされてもよい。2Dグラフィックスの他の段は、下記で説明されるように、3Dグラフィックスの他の段へマップされてもよい。
【0007】
この開示の様々な態様及び特徴は、以下で更に詳細に説明される。
【図面の簡単な説明】
【0008】
【図1】3Dグラフィックスをサポートするデバイスのブロック図を示す。
【図2】OpenVGにおける2Dグラフィックス・パイプラインのブロック図を示す。
【図3】図1のデバイスを使用してOpenVGで2Dグラフィックスをサポートすることを示す。
【図4】パスのモザイク配列の一例を示す。
【図5】3×3格子のコンボリューション・フィルタリングの一例を示す。
【図6】フィルタリング・ユニットのブロック図を示す。
【図7】ブレンディング命令の設計を示す。
【図8】ブレンディング・ユニットのブロック図を示す。
【図9】図1のデバイスを使用して基本2Dグラフィックスをサポートすることを示す。
【図10】2D及び3Dグラフィックスをサポートするプロセスを示す。
【図11】無線通信デバイスのブロック図を示す。
【発明を実施するための形態】
【0009】
GPUは2D及び/又は3Dグラフィックスをサポートしてもよい。2Dグラフィックスはジオメトリ・データの2D表現を記憶し、このジオメトリ・データは2D画像又は描画を生成するために処理される。3Dグラフィックスはジオメトリ・データの3D表現を記憶し、このジオメトリ・データは2D画像を生成するために処理される。2Dグラフィックスは絵画にたとえることができ、3Dグラフィックスは彫刻にたとえることができる。2D及び3Dグラフィックスは、異なる段及びグラフィックス演算を有する異なるパイプラインを用いて、表示用の最終画像を生成してもよい。
【0010】
2D又は3D画像は、プリミティブを用いて表現されてもよい。プリミティブはジオメトリの基本単位である。3Dグラフィックスの場合、プリミティブはポリゴン(典型的には三角形)、線、点などを含んでもよい。各三角形は3つの頂点によって画定され、各線は2つの頂点によって画定される。各頂点は、様々な属性、例えば、空間座標、明度、テクスチャ座標などと関連づけられてもよい。各属性は、最大4つの成分を有してもよい。例えば、空間座標は、3つの成分x、y、z又は4つの成分x、y、z、wによって与えられてもよい。ここで、x及びyは水平及び垂直座標であり、zは深度であり、wは同次座標である。明度は、3つの成分r、g、b又は4つの成分r、g、b、aによって与えられてもよい。ここで、rは赤、gは緑、bは青、aは透明度因子である。透明度因子は画素(ピクセル)の透明度を決定する。テクスチャ座標は、典型的には、水平及び垂直座標u及びvによって与えられる。頂点は他の属性に関連づけられてもよい。2Dグラフィックスの場合、プリミティブは点、線、曲線、長方形などを含んでもよい。パスは異なるプリミティブの組み合わせで構成されてもよい。2D又は3D画像は、表示されるべき画素について属性成分値を計算することによってレンダリングされてもよい。
【0011】
図1は、3Dグラフィックスをサポートするデバイス100の設計のブロック図を示す。デバイス100は、例えば、オープン・グラフィックス・ライブラリ(OpenGL)、Direct3Dなどの3Dソフトウェア・インタフェースをサポートしてもよい。OpenGLは、公開されている、2004年10月22日の文書「OpenGL(登録商標)グラフィックス・システム:仕様」バージョン2.0("The OpenGL(R) Graphics System: A Specification," Version 2.0, dated October 22, 2004)に記載されている。デバイス100はスタンドアロン型システムであってもよく、又は、例えば、コンピュータ、無線通信デバイスなどのより大きいシステムの一部分であってもよい。
【0012】
グラフィックス・アプリケーション110は同時に実行していてもよく、ビデオゲーム、グラフィックス、テレビ会議などのためのものであってもよい。グラフィックス・アプリケーション110は、高レベル・コマンドを生成して、グラフィックス・データ上でグラフィックス演算を行う。高レベル・コマンドは比較的複雑である場合もあるが、グラフィックス・データはかなりコンパクトであり得る。グラフィックス・データは、ジオメトリ情報(例えば、画像内のプリミティブの頂点情報)、画像がどのように見えるかを記述する情報などを含んでもよい。グラフィックス・アプリケーション110は、アプリケーション・プログラミング・インタフェース(API)(図1には図示しない)を介してGPUドライバ112とインタフェースする。
【0013】
GPUドライバ112は、プロセッサ上で実行するソフトウェア及び/又はファームウェア、又はハードウェア・ユニット、又はソフトウェア/ファームウェアとハードウェアとの組み合わせであってもよい。GPUドライバ112は、グラフィックス・アプリケーション110からの高レベル・コマンドを低レベル・コマンドへ変換する。低レベル・コマンドは機械に依存してもよく、GPU120内の処理ユニットに対して調整されてもよい。また、GPUドライバ112は、データのある場所、例えば、どのバッファがデータを記憶しているかを示してもよい。GPU120は、例えば、自動的に及びグラフィックス・アプリケーションに対してトランスペアレントに、各グラフィックス・アプリケーションの処理を一連のスレッドへ分割してもよい。スレッド(又は実行スレッド)は、1つ又は複数の命令のセットを用いて行われる特定のタスクを示す。例えば、スレッドは、画素のセットについてブレンディングを行ってもよい。スレッドにより、グラフィックス・アプリケーションは、異なる処理ユニットによって同時に行われる複数のタスクを有することが可能であり、更に、異なるグラフィックス・アプリケーションが、リソースを共有することが可能である。GPUドライバ112は、スレッドのために低レベル・コマンドを提供し、データ位置インディケータをGPU120へ提供する。
【0014】
GPU120は、様々な機能を行って3D画像をレンダリングする処理ユニットを含む。「処理ユニット」、「エンジン」、「コア」、「マシン」、「プロセッサ」、「モジュール」などの用語は、しばしば互換可能に使用される。GPU120内において、コマンド・エンジン122は、GPUドライバ112から低レベル・コマンドを受け取り、及び/又はメモリからコマンドをフェッチする。コマンド・エンジン122は低レベル・コマンドを復号し、これらのコマンドによって影響される処理ユニットへ命令を提供する。
【0015】
頂点シェーダ124は、ジオメトリ・データ上で頂点処理を行う。ジオメトリ・データは、三角形及び線のようなプリミティブを備えてもよい。例えば、頂点シェーダ124は、ジオメトリを1つの座標系から他の座標系へ変換し、ジオメトリの頂点について光レベルを計算し、ジオメトリのためにブレンディングを行うなどを行ってもよい。頂点バッファ140は、頂点シェーダ124のために頂点情報を記憶する。プリミティブ・プロセッサ126は、後続のラスタライズ・プロセスのためにパラメータを計算する。例えば、プリミティブ・プロセッサ126は、各三角形の3つのエッジについて一次方程式の係数を計算し、画素の深度補間のために深度(z)勾配を計算してもよい。スキャン・コンバータ128は、各プリミティブ(例えば、三角形又は線)を画素へ分解し、各画素のために画面座標を決定する。
【0016】
深度テスト・エンジン130は、画素について深度テスト(zテストとも呼ばれる)を行い、及び/又は、イネーブルにされている場合、ステンシル・テストを行って、画素がレンダリングされるべきか廃棄されるべきかを決定してもよい。zバッファ142は、レンダリングされている画像内の各画素位置について深度又はz値を記憶する。深度テストの場合、エンジン130は、画素のz値(現在のz値)を、zバッファ142内の対応するz値(記憶されたz値)に対して比較し、現在のz値が、記憶されたz値よりも近接/近隣である場合、画素を通過させてzバッファ142及び可能性としてステンシル・バッファ144を更新し、現在のz値が、記憶されたz値よりも後方にある場合、画素を廃棄する。ステンシル・バッファ144は、レンダリングされている画像内で各画素位置についてステンシル値を記憶する。ステンシル・テストの場合、エンジン130は、画素の記憶されたステンシル値を参照値に対して比較し、比較の結果に基づいて、画素を通過させるか廃棄する。
【0017】
フラグメント・シェーダ132(画素シェーダとも呼ばれる場合もある)は、画素及びフラグメント上で様々なグラフィックス演算を行ってもよい。フラグメントとは、1つの画素及びこの画素の関連情報である。フラグメント・シェーダ132は、画素属性の補間用のパラメータ、例えば、属性補間用の一次方程式係数を計算してもよい。フラグメント・シェーダ132は、画素の画面座標に基づいて、及び補間パラメータを使用して、各三角形内の各画素について属性成分値を計算してもよい。フラグメント・シェーダ132は、イネーブルにされている場合、テクスチャ・マッピングも行い、テクスチャを各三角形へ適用してもよい。テクスチャ画像は、テクスチャ・バッファ146内に記憶されてもよい。三角形の3つの頂点は、テクスチャ画像内で3つの(u,v)座標を関連づけられてもよく、三角形内の各画素は、テクスチャ画像内で特定のテクスチャ座標を関連づけられてもよい。三角形内の各画素の色を、この画素のテクスチャ座標によって示される位置でテクスチャ画像の色を用いて修正することにより、テクスチャリング(texturing)が達成される。フラグメント・シェーダ132は、テクスチャ・フィルタリング及び/又は他のグラフィックス演算も行ってもよい。
【0018】
画素ブレンダ(blender)134は、フラグメント上で、アルファ・ブレンディング、アルファ・テスト、フォグ・ブレンディング、論理演算、ディザリング演算などのグラフィックス演算を行ってもよい。画素ブレンダ134は、ディスプレイ・デバイス(図1に示される)上で提示するための最終画像用結果を色バッファ148へ提供してもよい。
【0019】
図1で示されるように、GPU120は、3Dグラフィックスのために設計された複数の段から構成された3Dグラフィックス・パイプラインを実現する。GPU120は、異なる段及び/又は異なるやり方で配列された段を有する他の3Dグラフィックス・パイプラインも実現してもよい。バッファ140〜148は、図1で示されるように、GPU120の外部にあるメモリを用いて実現されてもよい。GPU120は、高速メモリであるキャッシュを含んで、GPU内の処理ユニットのために命令及びデータを記憶してもよい。
【0020】
図2は、公開されている、2005年7月28日の「OpenVG仕様、バージョン1.0」("OpenVG Specification, Version 1.0," July 28, 2005)に記載された2Dグラフィックス・パイプライン200のブロック図である。以降、この仕様をOpenVGと呼ぶ。OpenVGは、2Dベクトル・グラフィックスの新しい標準であり、ハンドヘルド及び移動デバイス、例えば、携帯電話機及びゲーム用デバイスに適している。2Dグラフィックスの描画はパスで構成される。パスは、描画内のジオメトリを画定するために使用される。パスは、描画サーフェイス上のペン又はペイント・ブラシの持続を画定し、ストローク(stroke)及び/又はフィル(fill)されてもよい。ストロークとは、パスの形状の輪郭を線で画定することである。フィルとは、色、勾配、又はテクスチャを形状の内部へ適用することである。
【0021】
段1のブロック212において、グラフィックス・アプリケーションは、描画されるべきパスを画定し、パスについて後続の段によって使用されるべき変換、ストローク、及びペイントのパラメータがあればこれらを設定する。段2のブロック214において、パスはユーザ座標系から画面座標系へ変換される。ユーザ座標系は、ジオメトリを表現するために使用される座標系である。画面座標系は、表示画面のための座標系である。パスがストロークされるべきである場合、ストロークされたパラメータがユーザ座標系で適用され、画面座標系内のストロークされたジオメトリを記述する新しいパスを生成する。この新しいパスは現パスと呼ばれ、2Dグラフィックス・パイプライン内の後続の段によって演算される。段3のブロック216において、パス/サーフェイス変換が現パスのジオメトリへ適用され、画面座標を生成する。段4のブロック218では、現パスによって影響される各画素についてカバレージ値が計算される。画素のカバレージ値は、この画素の区域のどの端数部分が現パスによってカバーされるかを示す。カバレージ値は後続の段で使用され、画素の明度を計算する。段4は現パスを描画サーフェイス上の画素へマップする。
【0022】
段5のブロック220では、描画サーフェイスの境界内にない画素、及び、シザリングがイネーブルにされている場合、1つ又は複数のシザリング領域内にない画素が、ゼロのカバレージ値を割り当てられる。残りの処理は、ゼロのカバレージ値を有する画素についてスキップされる。段5は、描画を描画サーフェイス及びシザリング領域の境界へクリップする。クリップされた描画部分は廃棄される。
【0023】
段6のブロック222では、明度及びアルファ値が、現在の関連ペイントに基づいて描画サーフェイス上の各画素について定義される。現在の関連ペイントは、パスがフィルされているかストロークされているかに依存する。段6は、ペイント画像を現パス内の画素へ適用する。段7のブロック224では、画像が描画されている場合、明度及びアルファ値が、画像/サーフェイス変換の逆(inverse)を使用し画像値を補間することによって、各画素について計算される。結果は、現在の画像描画モードに従ってペイントの明度及びアルファ値と組み合わせられる。段8のブロック226では、段7からの各画素の出所(source)の明度及びアルファ値が行先(destination)の色空間へ変換され、ブレンディング・モードに従って、対応する行先の明度及びアルファ値とブレンド(blend)される。
【0024】
図2は、特定の2Dグラフィックス・パイプラインを示す。2Dグラフィックスは、2D画像を他のやり方でレンダリングする他のパイプラインを用いてもサポートされてもよい。
【0025】
図1のデバイス100は、ユニット112〜134を使用して2Dグラフィックスをサポートしてもよい。これらのユニットは3Dグラフィックスのために設計されてもよいが、これらのユニットの能力は2Dグラフィックスへ拡張されて使用されてもよい。
【0026】
図3は、図1のデバイス100をOpenVGの2Dグラフィックスに使用する設計300を示す。この設計において、GPUドライバ112は、図2の2Dグラフィックス・パイプライン200の段1でパス、変換行列、ストローク、及びペイントを準備及び定義し、段2でストローク・パス生成を行う。頂点シェーダ124は、段3で座標系間の変換を行う。プリミティブ・プロセッサ126及びスキャン・コンバータ128は、段4でラスタライズを行う。深度テスト・エンジン130は、段5でクリッピング及びマスキングを行う。フラグメント・シェーダ132は、段6でペイント生成を行い、段7で画像補間を行う。画素ブレンダ(blender)134は、段8でブレンディング及びアンチエイリアシングを行う。2Dグラフィックス段の幾つかのためにデバイス100を用いる処理は、後述する。
【0027】
図3は、特定の3D GPU120を有するデバイス100を用いて、OpenVGのために特定の2Dグラフィックス・パイプライン200を実現する1つの設計を示す。デバイス100は他のやり方で2Dグラフィックスをサポートしてもよく、例えば、2Dグラフィックス・パイプライン200の段が異なるようにデバイス100のユニットへマップされてもよい。デバイス100は、2Dグラフィックス演算をサポートする拡張及び/又は修正を含んでもよい。2Dグラフィックスは、他の設計の3D GPUを用いて実現されてもよい。例えば、3D GPUは、段1及び2をハードウェアで実現するジオメトリ・シェーダを含んでもよい。
【0028】
2D描画又は画像は、複数回の通過でレンダリングされてもよい。最初の通過は、レンダリングされている画像のためにシザリング及びマスキングについてバッファ内で値を生成してもよい。第2の通過は、画像内のパスにモザイク配列化を行い、これらのパスについてカバレージ値を決定してもよい。第3の通過は、ペイント及び入力画像をパスへ適用し、画面用の最終画像を生成してもよい。各々の通過は、デバイス100内のユニットの幾つか又は全部を使用してもよい。OpenVG 2Dグラフィックス・パイプラインの異なる段を、デバイス100内の様々なユニットで処理することは、後述する。
【0029】
段2では、GPUドライバ112が、屈曲及びストロークされたパスのモザイク配列化を行い、三角扇形を提供してもよい。屈曲されたパスは、頂点によって画定された一連のエッジを有する三角扇形を用いて近似されてもよい。これらの頂点は、パスの曲率及び画像品質要件に基づいて決定されてもよい。
【0030】
図4は、5つの頂点V0、V1、V2、V3、V4によって画定されたパスのモザイク配列の一例を示す。三角扇形は、V0からV1へのエッジ412、次いでV1からV2へのエッジ414、次いでV2からV3へのエッジ416、次いでV3からV4へのエッジ418、次いでV4からV0へ戻るエッジ420を描画することによって形成される。V0は三角扇形の中心点である。
【0031】
段3では、必要に応じて、頂点シェーダ124が、ユーザ座標系から画面座標系へ、三角扇形の変換を行ってもよい。2Dグラフィックスの変換は、3Dグラフィックスの変換と同じやり方で行われてもよい。
【0032】
段4では、ユニット126、128、130が、変換の後に、三角扇形に基づいて2D画像のためにカバレージ・マスクがあればこれを生成してもよい。これらのユニットは、三角扇形によって形成された形状の内側及び外側にある画素を決定する。パスは閉じられてもよく、パスの形状は平面を内側領域と外側領域へ分割してもよい。内側領域の画素は、後続の段によって、外側領域の画素とは異なるように扱われてもよい。
【0033】
形状の内側及び外側領域は、非ゼロ・フィル規則又は奇数/偶数フィル規則のいずれかに基づいて決定されてもよい。両方の規則では、所与の点が形状の内側にあるか外側にあるかを決定するため、所与の点から線が任意の無限方向へ描画される。図4で示される例では、線432が点430から右へ描画される。カウンタはゼロへリセットされる。点430からスタートし線432に沿って無限方向へ進むとき、カウンタは、(a)左から右へ行くエッジによって線432が交差される場合1だけ増分され、(b)右から左へ行くエッジによって線432が交差される場合1だけ減分される。図4では、点430からスタートし線432に沿って進むとき、カウンタは、左から右へ線を交差するエッジ414に起因して1だけ増分され、左から右へ線を交差するエッジ420に起因して再び1だけ減分される。こうして、点430は2のフィル値を有する。他の領域の0及び1のフィル値が、図4に示される。
【0034】
非ゼロ・フィル規則の場合、点のフィル値がゼロに等しくない場合、点は形状の内側にある。奇数/偶数フィル規則の場合、点のフィル値が奇数である場合、符号に関わらず、点は形状の内側にある(例えば、−7は奇数であり、0は偶数である)。2つのフィル規則は、内側及び外側領域の異なる定義を提供し得る。図4で示される例では、非ゼロ・フィル規則の場合、1及び2のフィル値を有する領域は形状の内側にあり、全ての他の領域は形状の外側にある。奇数/偶数フィル規則の場合、1のフィル値を有する領域は形状の内側にあり、全ての他の領域は形状の外側にある。
【0035】
ユニット126、128、130は、画像内の画素についてカバレージ値を決定してもよい。深度テスト・エンジン130は、バック・フェイス・カリング(back face culling)をディセーブルにする、色をディセーブルにする、描画サーフェイスを設定する、などによって、3D処理の代わりに2D処理へ構成されてもよい。エンジン130は、ステンシル・テストを行い、深度テストをディセーブルにするように構成されてもよい。ステンシル・バッファ144は、描画サーフェイスでクリアされてもよい。
【0036】
プリミティブ・プロセッサ126は、所定の規則に基づいて三角扇形を1つ又は複数の三角形へ分解してもよい。例えば、図4の三角扇形は3つの三角形へ分解されてもよい。即ち、第1の三角形は頂点V0、V1、V2を有し、第2の三角形はV0、V2、V3を有し、第3の三角形はV0、V3、V4を有する。各三角形は頂点V0、先行する三角形(もしあれば)の最後の頂点、及び新しい頂点を含む。プリミティブ・プロセッサ126は、各三角形をラスタライズするためスキャン・コンバータ128によって使用されるパラメータも生成してもよい。スキャン・コンバータ128は、各三角形内の画素を決定してもよい。
【0037】
深度テスト・エンジン130は、スキャン・コンバータ128から受け取られた画素についてステンシル値を更新してもよい。エンジン130は、時計回り方位を有する三角形内の画素についてステンシル値を増分し、反時計回り方位を有する三角形内の画素についてステンシル値を減分してもよい。又は、この逆であってもよい。図4で示される例では、エンジン130は、頂点V0、V1、V2を有する時計回り方位の第1の三角形内の画素についてステンシル値を増分してもよい。エンジン130は、頂点V0、V2、V3を有する反時計回り方位の第2の三角形内の画素についてステンシル値を減分してもよい。エンジン130は、頂点V0、V3、V4を有する時計回り方位の第3の三角形内の画素についてステンシル値を増分してもよい。図4は、三角扇形の全ての三角形が処理された後の異なる領域内の画素についてステンシル値を与える。
【0038】
各画素のステンシル値は、非ゼロ又は奇数/偶数フィル規則に基づいてカバレージ値へ変換されてもよい。非ゼロ規則の場合、画素のステンシル値が非ゼロであれば、画素は形状の内側にあり、そうでなければ形状の外側にある。奇数/偶数規則の場合、画素のステンシル値が奇数であれば、画素は形状の内側にあり、そうでなければ形状の外側にある。
【0039】
画素は、ノーマルサンプリング(normal sampling)又はスーパーサンプリング(super sampling)アンチエイリアシングを用いて表現されてもよい。ノーマルサンプリングとは、各画素のために1つのサンプルを使用することである。各画素のステンシル値及びカバレージ値は、上記で説明されたように決定されてもよい。スーパーサンプリング・アンチエイリアシング(又は簡単に、アンチエイリアシング)とは、各画素のために複数のサンプルを使用することであり、画像品質を改善する技術である。例えば、各画素は次のようなサンプルで表現されてもよい。
【0040】
・x及びy方向の双方で2のスケール因子について2×2サンプル
・x方向で4及びy方向で2のスケール因子について4×2サンプル
・x及びy方向の双方で4のスケール因子について4×4サンプル
他のスケール因子も、x及びy方向で使用されてもよい。異なるサンプリング・パターンも同様に使用されてもよい。例えば、サンプルが疎に存在し、異なる方向に回転されたパターンが使用されてもよい。アンチエイリアシングを用いると、各サンプルは部分画素(sub-pixel)を表現する。
【0041】
アンチエイリアシングを用いると、ステンシル値は、画素の代わりにサンプル(又は部分画素)について決定されてもよい。スキャン・コンバータ128は、各三角形内のサンプルを決定してもよく、各サンプルのステンシル値は、上記で説明されたように更新されてもよい。全ての三角形が処理された後、各サンプルのステンシル値に基づいて「1」又は「0」のカバレージ値が各サンプルについて決定されてもよい。次いで、(a)各画素の全てのサンプルについてカバレージ値を合計し、(b)この合計値を正規化することによって、カバレージ値が各画素について決定されてもよい。例えば、画素の8ビット・カバレージ値は、0〜255の範囲にあってもよい。ここで、0は画素が完全に形状の外側あることを示し、255は画素が完全に形状の内側にあることを示す。画素の8ビット・カバレージ値は、((Sum/NumSamples)*255+0.5)の底(floor)に等しく設定されてもよい。ここで、Sumは、この画素の全サンプルのカバレージ値の合計であり、NumSamplesは、画素のサンプルの数である。NumSamplesは、2×2スーパーサンプリングについて4に等しく、4×2スーパーサンプリングについて8に等しく、4×4スーパーサンプリングについて16に等しく、以下同様である。
【0042】
ノーマルサンプリング及びアンチエイリアシングの双方について、画素のカバレージ値は、図3のzバッファ142内に記憶されてもよく、画素の明度を決定するために使用されてもよい。アンチエイリアシングは、他のやり方で行われてもよい。例えば、「1」及「0」のカバレージ値は部分画素について記憶されてもよく、明度は部分画素について決定されてもよく、部分画素のカバレージ値に基づいて部分画素の明度が組み合わせられ、画素の最終的明度が決定されてもよい。
【0043】
段5では、深度テスト・エンジン130がクリッピング及びマスキングを行って、パス及び最終画像を、描画サーフェイスの境界及び/又は1つ又は複数のシザリング領域の内部へクリップしてもよい。各シザリング領域は、保持すべき描画サーフェイスの特定のセクションを記述する。エンジン130は、描画サーフェイス上の各画素がシザリング領域のいずれか1つの中に入るかどうかを決定することによって、シザリングを行ってもよい。各画素はシザ値を関連づけられてもよい。シザ値は、この画素がいずれかのシザリング領域内にあるかどうかを示してもよい。
【0044】
ステンシル・バッファ144は、画素のシザ値を記憶するために使用されてもよく、シザリングを行う前にクリアされてもよい(例えば、オール・ゼロへ)。次いで、一度に1つのシザリング領域についてシザリングが行われてもよい。各シザリング領域について、スキャン・コンバータ128はシザリング領域内の画素を決定してもよい。エンジン130は、スキャン・コンバータ128からの各画素についてシザ値を更新してもよい。例えば、シザリング領域が追加されている場合、エンジン130は各画素のシザ値を1だけ増分し、シザリング領域が除去されている場合、シザ値を1だけ減分してもよい。全てのシザリング領域が描画された後、シザリング・マスクが取得される。画素がシザリング領域内にない場合、画素のシザ値はゼロであり、画素が少なくとも1つのシザリング領域内にある場合、非ゼロである。パスの描画前又は後で、シザリングが行われてもよい。
【0045】
画素をレンダリングするかどうかを決定するために、ステンシル・バッファ144内のシザ値及びzバッファ142内のカバレージ値が使用されてもよい。パスのために境界ボックスが描画され、ボックス内の画素を決定するためにラスタライズされてもよい。ボックス内の各画素は、(a)画素のカバレージ値がゼロであるか画素のシザ値がゼロである場合、廃棄又はドロップされてもよく、(b)そうでなければ、次の段へ通過させてもよい。通過した画素のカバレージ値も、次の段へ提供され、これらの画素の明度を決定するために使用されてもよい。
【0046】
カバレージ値及びマスク・バッファからのマスク値に基づいて、マスキングも行われてもよい。画素のカバレージ値は、この画素のマスク値を乗算されてもよい。結果の値がゼロである場合、画素はドロップされてもよく、そうでなければ通過してもよい。マスキングは、深度テスト・エンジン130の代わりに、フラグメント・シェーダ132又は他のユニットによっても行われてもよい。
【0047】
段6では、フラグメント・シェーダ132が、ペイント又は入力画像に基づいて、最終画像内の各画素のために明度及びアルファ値を決定してもよい。フラグメント・シェーダ132は、1つのタイプのペイントでパスの内部をフィルし、及び/又は同一又は異なるタイプのペイントでパスの輪郭をストロークしてもよい。ペイントは、描画されている各画素の明度及びアルファ値を定義する。3つのタイプのペイントが存在する。即ち、色ペイント、勾配ペイント、及びパターン・ペイントである。色ペイントは、全画素のために一定の色を定義する。勾配ペイントは、滑らかに変化する色の線形又は放射パターンを画定する。パターン・ペイントは、出所画像に基づいて、可能性として反復する色の長方形パターンを画定する。ペイントはペイント座標系で定義され、ユーザ座標系へ変換されてもよい。変換の後、所与の(x,y)画素に最も近いペイント値が、この画素について使用されてもよく、又は中心画素を取り巻く複数の画素からのペイント値が、組み合わせられて補間ペイント値を生成してもよい。フラグメント・シェーダ132は、テクスチャを3D画像へ適用する場合と同じやり方で、ペイントを用いてパスをフィル及び/又はストロークしてもよい。フラグメント・シェーダ132は、カーネルを用いてパターン・ペイントをフィルタしてもよい。ペイント及び色情報はGPUドライバ112によって定義されてもよく、適当な処理ユニットへ送られてもよい。
【0048】
色情報は、幾つかの色フォーマットで記憶又は処理されてもよい。人間の目は高輝度よりも低輝度/強度へ敏感である。明度は、通常ガンマ圧縮と呼ばれるプロセスを経由して圧縮されてもよく、非線形の明度が取得されてもよい。ガンマ圧縮は、明度をマップして、より微細な解像度が低輝度について達成され、より粗大な解像度が高輝度について達成されるようにする。ガンマ圧縮は、例えば
【数1】
【0049】
として行われてもよい。ここでclinは線形明度であり、cnlは非線形明度であり、γは圧縮量を決定するガンマ値である。ガンマ拡張は、非線形明度を拡張して線形明度を取得する相補プロセスである。ガンマ拡張は、ガンマ圧縮に使用される関数の逆の関数に基づく。
【0050】
フラグメント・シェーダ132は、段6及び7のために色変換を行ってもよい。画素の明度は、次のフォーマットのいずれか1つで表現されてもよい。
【0051】
・ sRGBA − 非事前乗算非線形色フォーマット
・ sRGBA_PRE − 事前乗算非線形色フォーマット
・ IRGBA − 非事前乗算線形色フォーマット
・ IRGBA_PRE − 事前乗算線形色フォーマット
ここで、R、G、B、Aは、それぞれ赤、緑、青、アルファを表す。
【0052】
ペイント及び画像は、非線形明度としてメモリ内に記憶されてもよく、線形明度として処理されてもよい。必要に応じて、非線形明度を線形明度へ変換し、及びこの逆へ変換するため、色フォーマット変換が行われてもよい。明度cはアルファ値αと乗算され、事前に乗算された明度c’=α*cを求めてもよい。或る演算(例えば、ブレンディング)は、事前に乗算された明度の上で、より便利に行われてもよい。
【0053】
様々な色フォーマット間の変換は、逆(RCP)ルックアップ・テーブル(LUT)、ガンマLUT、及びデガンマ(degamma)LUTを用いて達成されてもよい。RCP LUTは入力値を受け取って入力値の逆を提供する。ガンマLUTはガンマ圧縮関数を記憶し、線形明度を受け取って非線形明度を提供する。デガンマLUTは相補ガンマ拡張関数を記憶し、非線形明度を受け取って線形明度を提供する。
【0054】
事前に乗算された(事前乗算)フォーマットから、事前に乗算されていない(非事前乗算)フォーマットへの変換は、次のように達成されてもよい。
【数2】
【0055】
ここで、RGBは、赤、緑、青の明度の各々についての演算を表す。
【0056】
線形及び非線形色フォーマット間の変換は、次のように達成されてもよい。
【数3】
【0057】
一般的フォーマット変換は、1つの色空間を他の色空間へ変換するために使用されてもよい。ここで、変換は任意の関数に基づいてもよい。
【0058】
段7では、フラグメント・シェーダ132が入力画像の上でコンボリューション・フィルタリングを行ってもよい。コンボリューション・フィルタリングは、エッジ鮮明化、ぼけ、ノイズ低減、スケーリング、回転、テクスチャ・マッピングなどの効果を取得するために使用されてもよい。
【0059】
図5は、画像500内の3×3格子510のコンボリューション・フィルタリングの一例を示す。格子510内の9つの画素値px−1,y−1からpx+1,y+1は、3×3カーネル520内の9つの係数k0,0からk2,2を用いてフィルタリングされ、位置(x,y)で新しい画素値を生成する。
【0060】
コンボリューション・フィルタリングは、次のように表現されてもよい。
【数4】
【0061】
ここで、Wは格子/カーネルの幅、Hは格子の高さであり、
ki,jは格子内の位置(i,j)におけるカーネル係数であり、
Sはスケーリング因子、bはバイアス値であり、
px,yは画像内の位置(x,y)における元の画素値であり、
p’x,yは位置(x,y)における元の画素値と置き換わる新しい画素値であり、
shiftXは位置(x,y)から格子の左へのオフセットであり、
shiftYは位置(x,y)から格子の底へのオフセットである。
【0062】
Sは、
【数5】
【0063】
の正規化因子又は他の値であってもよい。
【0064】
カーネル係数がx及びy方向で分離可能である場合、コンボリューション・フィルタリングは次のように表現されてもよい。
【数6】
【0065】
ここで、kiは格子内の水平位置iにおけるカーネル係数であり、
kjは格子内の垂直位置jにおけるカーネル係数である。
【0066】
位置(i,j)におけるカーネル係数は、ki,j=ki・kjのように引き出されてもよい。
【0067】
図5で示される例では、W=3、H=3、shiftX=1、及びshiftY=1である。一般的に、shiftXは幅の約半分であり、shiftYは高さの約半分である。異なるタイプのコンボリューション・フィルタリング及び異なるカーネルは、フィルタリングされた画像内で異なる効果をもたらすかも知れない。
【0068】
任意のH×W画素格子のコンボリューション・フィルタリングは、格子を、より小さいセクションへ区分し、各セクションについて計算を行い、全セクションの中間結果を組み合わせて最終結果を取得することによって達成されてもよい。セクションのサイズは、計算に使用される算術論理ユニット(ALU)の処理能力に基づいて選択されてもよい。一般的に、任意のセクション・サイズが使用されてもよい。一設計において、セクション・サイズは2×2以下である。この設計では、3×3画素格子が、1つの2×2セクション、1つの1×2セクション、1つの2×1セクション、1つの1×1セクションへ分解されてもよい。
【0069】
2×2セクションのコンボリューション計算は、次のように表現されてもよい。
【数7】
【0070】
ここで、(xi,yj)は2×2セクション内のより低い左下方画素の位置を表し、
ri,jは2×2セクションの中間結果である。
【0071】
方程式(3)の計算は、4つのユニットを有するALU、例えば、4×1ベクトルの内積を計算できるクワッドALU又は4対のスカラーを乗算及び累積できる4スカラーALUによって効率的に行われてもよい。1×1、1×2、又は2×1セクションのコンボリューション計算は、方程式(3)で示される係数のサブセット及び画素のサブセットを含む。
【0072】
画素の座標系は、カーネル係数の座標系と一致しても一致しなくてもよい。更に、所与の画素のx及びy値は、整数又は非整数値であってもよい。例えば、コンボリューション・フィルタリングは、画像の(x,y)座標系と一致しない(u,v)座標系で与えられたテクスチャ画素(テクセル)上で行われてもよい。画素座標が実数値である場合、画素へ適用すべき係数は、幾つかのやり方で決定されてもよい。スナップ・ツー・ニアレスト(snap-to-nearest)モードの場合、画素座標は最も近い整数値へ丸められ、丸められた座標のカーネル係数が画素へ適用される。補間モードの場合、画素へ最も近い4つのカーネル係数が使用され、補間された係数を生成し、この係数が画素へ適用される。
【0073】
コンボリューション・フィルタリングの2つのモード、即ち、モード0及びモード1がサポートされてもよい。モード0の場合、コンボリューション計算は、スナップ・ツー・ニアレスト係数を使用して、最大4つの画素のセクション上で行われてもよい。4つの画素座標は、最も近い整数値へ丸められてもよい。丸められた座標の最大4つの画素値が、メモリから検索され、最大4つのカーネル係数を用いて適用され、新しい画素値を取得してもよい。モード1の場合、画素座標へ最も近い4つのカーネル係数から生成された補間係数を使用して、コンボリューション計算が各画素上で行われてもよい。
【0074】
図6は、フィルタリング・ユニット600の設計のブロック図を示す。フィルタリング・ユニット600は、フラグメント・シェーダ132の一部分であってもよい。バッファ/メモリ610は、上記で与えられた色フォーマットの1つで明度及びアルファ値を提供する。ユニット612は、受け取られた明度及びアルファ値に対して使用される単純フォーマッティング変換を行う。ユニット614は、複雑フォーマッティングの非圧縮を行う。フィルタリングALU620は、画素の明度をカーネル係数と乗算し(例えば、2×2以下のセクションについて)、中間結果を提供する。アキュムレータ622は各格子の中間結果を累積し、格子によってカバーされる画素の最終結果を提供する。
【0075】
フラグメント・シェーダ132は、入力画像と背景色との間の補間を行い、各画素の明度及びアルファ値を決定してもよい。フラグメント・シェーダ132は補間結果を画素ブレンダ134へ提供し、画素ブレンダ134は他の明度及びアルファ値とブレンディングしてもよい。
【0076】
段8では、OpenVGによってサポートされる多数のブレンディング・モードの1つに従って、画素ブレンダ134がブレンディングを行ってもよい。ブレンディング・モードは、次の方程式を関連づけられる。
【0077】
1.α(αsrc,αdst)として表されるアルファ・ブレンディング方程式
2.c(csrc,cdst,αsrc,αdst)として表される色ブレンディング方程式
ここで、αsrcは出所のアルファ値、αdstは行先のアルファ値、csrcは出所の明度、cdstは行先の明度である。明度cは、赤(R)、緑(G)、又は青(B)であってもよい。
【0078】
ブレンディングは、(Rsrc,Gsrc,Bsrc,αsrc)として表される出所の明度及びアルファ・タプルを、(Rdst,Gdst,Bdst,αdst)で表される行先の明度及びアルファ・タプルと組み合わせて、c(Rsrc,Rdst,αsrc,αdst)、c(Gsrc,Gdst,αsrc,αdst)、c(Bsrc,Bdst,αsrc,αdst)、α(αsrc,αdst)で構成されるブレンディングされたタプルを提供する。組み合わせは、アルファ及び色ブレンディング方程式に従って行われる。具体的には、各々の色成分の出所及び行先明度が、色ブレンディング方程式に従って組み合わせられ、出所及び行先アルファ値が、アルファ・ブレンディング方程式に従って組み合わせられる。異なる方程式及び/又は異なるアルファ値を用いて、異なる結果が取得されてもよい。ブレンディングされたタプルは、典型的には、行先タプルと置き換わる。
【0079】
OpenVGは5つのポーター・ダフ(Porter-Duff)ブレンディング・モードをサポートする。ポーター・ダフ・ブレンディング・モードは、次のアルファ及び色ブレンディング方程式を使用する。
【数8】
【0080】
ここで、Fsrc及びFdstは、それぞれ出所及び行先のブレンディング因子である。5つのポーター・ダフ・ブレンディング・モードのFsrc及びFdstが、OpenVGで与えられている。
【0081】
事前乗算明度の色ブレンディング方程式は、次のように与えられてもよい。
【数9】
【0082】
方程式(6)は方程式(4)に相当する。方程式(6)は、事前乗算明度c’src及びc’dstについて使用されてもよく、方程式(4)は、非事前乗算明度csrc及びcdstについて使用されてもよい。
【0083】
OpenVGは、4つの追加ブレンディング・モードをサポートする。表1は、4つの追加ブレンディング・モードを列挙し、各モードの色ブレンディング方程式を与える。各々の追加ブレンディング・モードは明度を組み合わせて、c’(csrc,cdst,αsrc,αdst)として表されるブレンディングされた事前乗算明度を提供する。
【表1】
【0084】
OpenVGは、出所及び行先がオーバラップしないときに使用される加法的ブレンディング・モードを更にサポートする。加法的ブレンディング・モードのアルファ及び色ブレンディング方程式は、次のように与えられる。
【数10】
【0085】
他のブレンディング・モードも、2Dグラフィックスについてサポートされてもよい。一般的に、GPU120は、2Dグラフィックスについて、ブレンディング・モードの任意のセットをブレンディング方程式の任意のセットでサポートしてもよい。GPU120は、ステンシル補間もサポートしてもよい。ステンシル補間は、方程式の次のセットを使用する。
【数11】
【0086】
ここで、αimageは第1の出所アルファ値であり、αpaintは第2の出所アルファ値であり、方程式(9)についてαsrc=αimage*αpaintであり、方程式(10)についてαsrc=αimage*αpaint*cimageである。
【0087】
アルファ・ブレンディング方程式(9)及び色ブレンディング方程式(10)は、ブレンディング・モードに依存してもよい。例えば、「SrcオーバーDst」ポーター・ダフ・ブレンディング・モードが選択される場合、ステンシル補間は次のように表現されてもよい。
【数12】
【0088】
様々なブレンディング・モード(例えば、OpenVGのブレンディング・モード及び/又は他のブレンディング・モード)のブレンディング方程式は、演算の基本セットを用いて効率的に実現されてもよい。各々のブレンディング方程式は一連の演算へ分解され、各演算は基本セットから取られてもよい。異なるブレンディング方程式は、異なる演算シーケンスを用いて実現されてもよい。演算の基本セットは、ハードウェア実現を単純化し、柔軟性を提供して様々なブレンディング方程式並びに他のグラフィックス機能及び特質をサポートしてもよい。
【0089】
図7は、ブレンディングのためのブレンディング命令700の設計を示す。ブレンディング演算(Op)フィールド714は、基本セット内のどの演算を行うべきかを示す。出所(Src)フィールド720は、出所値がどこに記憶されているかを示す。行先(Dst)フィールド718は、行先値がどこに記憶されるかを示す。Srcf
フィールド724は、演算の出所ブレンディング因子を示す。Dstfフィールド722は、演算の行先ブレンディング因子を示す。結果(Res)フィールド716は、演算の結果をどこに記憶するかを示す。クランプ(clamp)イネーブル・フィールド712は、所定の値域、例えば、0と1の間へ結果を制約すべきかどうかを示す。異なるフィールドを有する他の命令フォーマットも使用されてもよい。
【0090】
表2は、演算の基本セットの例及び各演算のOpコードを示す。Opコード0〜7を有する演算は、それぞれ演算0〜7と呼ばれる。
【表2】
【0091】
演算0及び1の場合、出所及び行先値はそれぞれ出所及び行先ブレンディング因子によってスケールされ、スケールされた値は組み合わせられる。演算2は出所及び行先値の小さい方を提供し、演算3は2つの値の大きい方を提供する。演算4は出所及び行先値をそれぞれ出所及び行先ブレンディング因子でスケールし、2つのスケールされた値を記憶する。演算5は出所値の上で逆演算を行って結果値を提供する。演算6及び7はそれぞれガンマ拡張及びガンマ圧縮に使用される。表2は演算の基本セットについて特定の設計を示す。演算の他のセットも、ブレンディングに使用されてもよい。
【0092】
出所明度は、フラグメント・シェーダ132から受け取られ、出所レジスタに記憶されてもよい。行先明度は、メモリ(例えば、色バッファ148)から検索され、行先レジスタに記憶されてもよい。出所及び行先明度は組み合わせられてもよく、ブレンディングされた明度は、行先レジスタに記憶されてもよい。異なる演算を柔軟にサポートするために、複数の出所レジスタが使用され、出所明度及びアルファ値並びに中間値を記憶してもよい。複数の行先レジスタも使用され、行先明度及びアルファ値並びに中間値を記憶してもよい。
【0093】
Srcフィールド720及びDstフィールド718の各々は、使用可能なレジスタのセット内の任意のレジスタを示してもよい。このセットは、出所レジスタ、第2の出所レジスタ、行先レジスタ、一時行先レジスタなどを含んでもよい。Resフィールド716は、複数の出力選択肢の任意の1つ、例えば、出所レジスタ、第2の出所レジスタ、行先レジスタ、一時行先レジスタ、出所及び行先レジスタの双方、最終出力などを示してもよい。
【0094】
Srcf及びDstfブレンディング因子は、表2の演算0、1、4について、Src及びDst値をそれぞれスケールするために使用される。Srcf及びDstfブレンディング因子の各々は、全ブレンディング・モードをサポートできるブレンディング因子のセットから選択されてもよい。このセットは、(a)ゼロ、(b)出所レジスタ、第2の出所レジスタ、行先レジスタ、定数レジスタなどの中のアルファ値及び明度、(c)1からこれらのアルファ値及び明度を差し引いた値、(d)これらのアルファ値及び明度で1を割り算した値、(e)出所アルファと、1から出所アルファを差し引いたものとの小さい方、及び/又は(f)他の値を含んでもよい。
【0095】
各々のブレンディング・モードは、ブレンディング命令のセットを用いて実現されてもよい。例えば、方程式(4)から(6)で示される5つのポーター・ダフ・ブレンディング・モードの各々は、2つの命令を用いて実現されてもよい。第1の命令は、出所及び行先明度を、それぞれ出所及び行先アルファ値で乗算してもよい。第2の命令は、事前乗算出所及び行先明度を、それぞれFsrc及びFdstブレンディング因子で乗算し、方程式(6)で示されるように、2つのスケールされた値を組み合わせてもよい。2つの命令は次のように与えられてもよい。
【数13】
【0096】
ここで、出所ブレンディング因子Srcf及び行先ブレンディング因子Dstfは、実現されているポーター・ダフ・ブレンディング・モードに依存する。
【0097】
画素ブレンダ134も、異なる色フォーマット間で色変換を行ってもよい。色変換は、メモリから読み出される明度及び/又はメモリへ書き込まれる明度について行われてもよい。
【0098】
様々なブレンディング・モードが、次のようにサポートされてもよい。
【数14】
【0099】
上記の疑似コードは、色成分が事前乗算非線形明度として記憶されることを仮定する。命令10、20、30は、行先明度を事前フォーマッティングするための命令である。命令10及び20は、行先明度から行先アルファ(a.dst)を分離する。命令30は非線形色を線形色へ変換する。命令40から4nは、選択されたブレンディング・モードに依存する演算のための命令であり、出所及び行先明度をそれぞれ出所アルファ(a.src)及び行先アルファで乗算することを含んでもよい。命令50から80は、結果の明度を事後フォーマッティングするための命令である。命令50及び60は、結果のアルファ(a.res)を分離して、非事前乗算明度を取得する。命令70は線形色を非線形色へ変換する。命令80は、非線形明度を結果のアルファで乗算し、最終結果をメモリへ戻す。明度が非事前乗算フォーマットで記憶される場合、命令10、20、80は省略されてもよい。色成分が非線形明度の代わりに線形明度として記憶される場合、命令30及び70は省略されてもよい。
【0100】
図8は、ブレンディング・ユニット800の設計のブロック図を示す。ブレンディング・ユニット800は、図3の画素ブレンダ134の一部分であってもよい。出所レジスタ812及び814は、フラグメント・シェーダ132からの出所明度及びアルファ値及び/又はブレンディング実行ユニット810からの中間結果を記憶する。事前フォーマッティング・ユニット820は、行先明度及びアルファ値を受け取り(例えば、図3の色バッファ148から)、事前フォーマッティングを行う。ユニット820は、事前乗算明度についてアルファを分離し、非線形色から線形色への変換及びその他を行ってもよい。行先レジスタ822及び824は、事前フォーマッティング・ユニット820からの事前フォーマッティングされた行先明度及びアルファ値及び/又はブレンディング実行ユニット810からの中間結果を記憶する。
【0101】
ブレンディング実行ユニット810は、ブレンディング命令を受け取り(例えば、図3のコマンド・エンジン122から)、受け取られた命令をデコードする。ユニット810は、更に、デコードされた命令に従って、出所及び行先値及びブレンディング因子を読み出し、これらの値及び因子を、処理のために計算ユニット840へ送る。ユニット810は、ユニット840から結果を受け取り、これらの結果を適当なレジスタに記憶する。事後フォーマッティング・ユニット830は、結果の上で事後フォーマッティングを行い、事前乗算明度についてアルファを分離し、線形色から非線形色への変換を行い、結果の明度が事前乗算フォーマットで記憶されるべきである場合アルファで乗算し、及びその他を行ってもよい。
【0102】
ユニット840は、可逆(RCP)ユニット842、ガンマLUT844、デガンマLUT846、及びブレンディングALU848を含む。ブレンダALU848は、ユニット810、820、830から受け取られたオペランドの上で演算し、結果をこれらのユニットへ戻してもよい。ユニット842は、入力オペランドを受け取り、オペランドの逆数(reciprocal)を提供する。ガンマLUT844は、線形明度を受け取り、非線形明度を提供する。デガンマLUT846は、非線形明度を受け取り、線形明度を提供する。ユニット840はブレンディング・ユニット800の一部分であってもよく、画素ブレンダ134のためだけに使用されてもよい。あるいは、ユニット840は画素ブレンダ134の外部にあってもよく、色変換のために画素ブレンダ134及びフラグメント・シェーダ132によって共有されてもよい。
【0103】
制御レジスタ850は、処理されているデータの色フォーマットを示す制御ビットを記憶する。例えば、制御ビットは、明度が、(a)事前乗算又は非事前乗算フォーマットで記憶されるかどうか、(b)非線形又は線形フォーマットで記憶されるかどうかを示してもよい。ユニット820は、制御ビットに従って、到着する行先明度の上で事前フォーマッティングを行ってもよい。同様に、ユニット830は、制御ビットに従って、出発する明度の上で事後フォーマッティングを行ってもよい。制御レジスタ850は、GPUドライバ112又は他のユニットによって設定されてもよい。
【0104】
図9は、基本2Dグラフィックスのために図1のデバイス100を使用する設計900を示す。この設計では、コマンド・エンジン122、スキャン・コンバータ128、及び画素ブレンダ134が2Dグラフィックス処理に主として使用され、全ての他のユニットは迂回されるか、まれにしか使用されない。
【0105】
基本2Dグラフィックスのプリミティブは、線、長方形、三角扇形を含んでもよい。他のプリミティブは、例えば、GPUドライバ112によって、長方形、三角形、又は線へモザイク配列化されてもよい。基本2Dグラフィックスの属性は、各画素について、1つの明度、及びビットブロック転送(bitblt)、ストレッチbitblt、又は点描パターンのために出所バッファの1対の座標を含んでもよい。
【0106】
点描線の場合、GPUドライバ112は、線点描パターンを1Dテクスチャとして処置し、線の2つの端点についてパターンの座標を計算してもよく、次いでコマンド・エンジン122を経由してスキャン・コンバータ128へ座標情報を提供してもよい。スキャン・コンバータ128は、線上の画素ごとに座標を計算し、画素アドレスを生成してもよい。座標は、フラグメント・シェーダ132を使用することなく、制御レジスタ内で点描パターンを調べるために使用されてもよい。マスクは点描パターンから取得されてもよい。ラスタライズ方向は、オーバラップするbitbltについて変更されてもよい。フラグメント・シェーダ132の使用及び属性セットアップ及び補間を回避して電力を節減するため、GPUドライバ112は、例えば、最大4つの成分について、属性セットアップを行い、勾配を計算してもよい。スキャン・コンバータ128は4つの加算器を含んでもよく、最大4つの成分について補間を行ってもよい。bitblt及びストレッチbitbltの場合、GPUドライバ112は出所画像/バッファのために初期座標及び勾配を提供してもよい。したがって、スキャン・コンバータ128が、プリミティブ、例えば、線、三角形、又は長方形プリミティブの内部の画素ごとに座標を計算してもよい。座標は、色キャッシュを経由して出所画像/バッファ内の画素値を調べるために使用されてもよい。勾配フィルの場合、GPUドライバ112が初期の色及び勾配を提供してもよい(例えば、最大4つの成分)。スキャン・コンバータ128は、(画素座標を計算するために使用される)同じ加算器を使用して、長方形プリミティブの内部の画素ごとの明度を計算してもよい。
【0107】
画素情報及び色情報は、画素ブレンダ134へ直接提供されてもよい。マルチプレクサ912は、コマンド・エンジン122を経由する外部出所からの出所色(Src)、スキャン・コンバータ128からの勾配フィルの出所色、又は色キャッシュ/バッファ910からの出所色を受け取ってもよい。マルチプレクサ912は、3つの入力の1つからの出所色を画素ブレンダ134へ提供してもよい。色キャッシュ910は、図3の画素ブレンダ134と色バッファ148との間に置かれてもよい。色キャッシュ910は、スキャン・コンバータ128から出所アドレス又はストレッチbitbltアドレスを受け取ってもよく、出所色をマルチプレクサ912へ提供してもよい。色キャッシュ910は、更に、スキャン・コンバータ128から行先読み出しアドレスを受け取り、行先色を画素ブレンダ134へ提供してもよい。画素ブレンダ134は、様々な2Dグラフィックス機能、例えば、ビットブロック転送、2Dアルファ・ブレンディング、フォント・レンダリング、ROP3、出所及び行先色キー(color key)、パレット・テーブル(例えば、256×32又は16×16×32)などをサポートしてもよい。ROP3は、3つのオペランド(例えば、出所色、行先色、パターン/ブラシ色)のラスタ演算である。他の2Dグラフィックス機能、例えば、コンボリューション・フィルタリングは、フラグメント・シェーダ132又は他のユニットによって行われてもよい。
【0108】
図10は、2D及び3Dグラフィックスをサポートするプロセス1000を示す。3Dグラフィックス処理は、3D画像をレンダリングする3Dグラフィックス・パイプラインに従って行われる(ブロック1012)。2Dグラフィックス処理は、2D画像をレンダリングする2Dグラフィックス・パイラインに従って行われる(ブロック1014)。2Dグラフィックス・パイプラインの複数の段の各段は、例えば、図3で示されるように、3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされる。
【0109】
一般的に、2Dグラフィックス・パイプライン及び3Dグラフィックス・パイプラインの各々は、任意の数の段を含んでもよい。2Dグラフィックス・パイプラインの段は、様々なマッピング・スキームに基づいて、3Dグラフィックス・パイプラインの段へマップされてもよい。例えば、2Dグラフィックスのクリッピング、マスキング、及びシザリング段は、3Dグラフィックスの深度テスト段へマップされてもよい。2Dグラフィックスのパス内の画素のカバレージ値は、3Dグラフィックスのラスタライズ段、深度テスト段などを使用して決定されてもよい。2Dグラフィックスのペイント生成段及び画像補間段は、3Dグラフィックスのフラグメント・シェーダ段へマップされてもよい。2Dグラフィックスのブレンディング段は、3Dグラフィックスのブレンディング段へマップされてもよく、双方のブレンディング段は、複数のブレンディング・モードを用いてサポートされてもよい。各ブレンディング・モードは、それぞれの命令シーケンスを関連づけられてもよい。2Dグラフィックスの他の段は、例えば、上記で説明したように、3Dグラフィックスの他の段へマップされてもよい。
【0110】
本明細書で説明したGPUは、無線通信デバイス、ハンドヘルド・デバイス、ゲーム用デバイス、コンピューティング・デバイス、コンピュータ、コンシューマ・エレクトロニクス・デバイスなどで使用されてもよい。無線通信デバイスでGPUを使用する例は、下記で説明される。
【0111】
図11は、無線通信システムにおける無線通信デバイス1100の設計のブロック図を示す。無線デバイス1100は、携帯電話機、端末、ハンドセット、電子手帳(PDA)、又は他のデバイスであってもよい。無線通信システムは、符号分割多元接続(CDMA)システム、移動通信用全世界(GSM)システム、又は他のシステムであってもよい。
【0112】
無線デバイス1100は、受信経路及び送信経路を経由して双方向通信を提供することができる。受信経路では、基地局によって送信された信号はアンテナ1112によって受け取られ、受信機(RCVR)1114へ提供される。受信機1114は、受け取られた信号を調整及びディジタル化し、更なる処理のためにサンプルをディジタル・セクション1120へ提供する。送信経路では、送信機(TMTR)1116が、送信されるべきデータをディジタル・セクション1120から受け取り、データを処理及び調整し、変調された信号を生成する。変調された信号は、アンテナ1112を経由して基地局へ送信される。
【0113】
ディジタル・セクション1120は、様々な処理、インタフェース、及びメモリ・ユニット、例えば、モデム・プロセッサ1122、ビデオ・プロセッサ1124、コントローラ/プロセッサ1126、ディスプレイ・プロセッサ1128、縮小命令セット・コンピュータ/ディジタル信号プロセッサ(RISC/DSP)1132、GPU 1134、内部メモリ1136、及び外部バス・インタフェース(EBI)1138を含む。モデム・プロセッサ1122は、データ送信及び受信処理(例えば、符号化、変調、復調、及び復号)を行う。ビデオ・プロセッサ1124は、ビデオ・アプリケーション、例えば、ビデオカメラ、ビデオ再生、及びビデオ会議のビデオ・コンテンツ(例えば、静止画像、ビデオ動画、及び移動テキスト)の処理を行う。コントローラ/プロセッサ1126は、ディジタル・セクション1120内の様々な処理及びインタフェース・ユニットの演算を指令してもよい。ディスプレイ・プロセッサ1128は、ディスプレイ・ユニット1130上でビデオ、グラフィックス、及びテキストの表示を容易にする処理を行う。RISC/DSP1132は、無線デバイス1100のために様々なタイプの処理を行ってもよい。例えば、図3のGPU112は、RISC/DSP1132内で実行されてもよい。GPU1134はグラフィックス処理を行い、図3のGPU120、図2の2Dグラフィックス・パイプライン200の全部又は一部、図6のフィルタリング・ユニット600の全部又は一部、図8のブレンディング・ユニット800の全部又は一部、図10のプロセス1000などを実現してもよい。内部メモリ1136は、ディジタル・セクション1120内の様々なユニットのためにデータ及び/又は命令を記憶する。EBI1138は、ディジタル・セクション1120(例えば、内部メモリ1136)とメイン・メモリ1140との間のデータ転送を容易にする。メモリ1136及び/又はメモリ1140は、図3のバッファ140から148を実現してもよい。
【0114】
ディジタル・セクション1120は、1つ又は複数のDSP、マイクロプロセッサ、RISCなどを用いて実現されてもよい。ディジタル・セクション1120は、1つ又は複数の特定用途集積回路(ASIC)及び/又は他のタイプの集積回路(IC)の上でも組み立てられてもよい。
【0115】
本明細書で説明されたGPUは、様々なハードウェア・ユニット内で実現されてもよい。例えば、GPUは、ASIC、DSP、ディジタル信号処理デバイス(DSPD)、プログラム可能論理回路(PLD)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、電子デバイス、他の電子ユニット内で実現されてもよい。GPUは、統合/組み込みメモリを含むか、含まなくてもよい。
【0116】
本明細書で説明されたGPUは、スタンドアロン型ユニットであるか、デバイスの一部分であってもよい。デバイスは、(i)スタンドアロン型IC、例えば、グラフィックスIC、(ii)データ及び/又は命令を記憶するためのメモリICを含む1つ又は複数のICのセット、(iii)統合されたグラフィックス処理機能を有するASIC、例えば、移動局モデム(MSM)、(iv)他のデバイス内に組み込まれてもよいモジュール、(v)携帯電話機、無線デバイス、ハンドセット、又は移動ユニット、(vi)その他であってもよい。
【0117】
以上のこの開示の説明は、当業者に開示を実行又は使用することができるように提供される。この開示への様々な修正は、当業者にとって容易に明らかであろう。本明細書で定義された一般的原理は、開示の趣旨及び範囲から逸脱することなく他の変形例へ適用されてもよい。したがって、この開示は本明細書で説明された例へ限定されることを意図されず、本明細書で開示された原理及び新規な特徴に一致する最も広い範囲を付与されるべきである。
【特許請求の範囲】
【請求項1】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行い、2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行い、前記2Dグラフィックス・パイプラインの複数の段の各段が、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされるように構成されたグラフィックス処理ユニット(GPU)と、
前記GPUのためにデータを記憶するように構成されたメモリと
を備えるデバイス。
【請求項2】
前記GPUは、OpenVGにおける2Dグラフィックス・パイプラインの少なくとも段3から段8について2Dグラフィックス処理を行うように構成された、請求項1に記載のデバイス。
【請求項3】
2Dグラフィックスのパス及びジオメトリ形状についてモザイク配列化を行うGPUドライバ
を更に備える、請求項1に記載のデバイス。
【請求項4】
前記GPUは、2D及び3Dグラフィックス座標系の間で変換を行うように構成された頂点シェーダを備える、請求項1に記載のデバイス。
【請求項5】
前記GPUは、2D及び3Dグラフィックスのプリミティブのラスタライズを行うように構成されたプリミティブ・プロセッサ及びスキャン・コンバータを備える、請求項1に記載のデバイス。
【請求項6】
2Dグラフィックスのパスのためにモザイク配列化を行って三角扇形を提供するGPUドライバを更に備え、前記プリミティブ・プロセッサは各々の三角扇形を少なくとも1つの三角形へ分解し、前記スキャン・コンバータは各々の三角扇形の各々の三角形をラスタライズするように構成された、請求項5に記載のデバイス。
【請求項7】
前記GPUは、3Dグラフィックスのために深度テストを行い、2Dグラフィックスのためにクリッピング及びマスキングを行うように構成された深度テスト・エンジンを備える、請求項1に記載のデバイス。
【請求項8】
前記深度テスト・エンジンは、2Dグラフィックスのためにシザリングを行うように更に構成された、請求項7に記載のデバイス。
【請求項9】
前記GPUは、2Dグラフィックスのパスのためにカバレージ値を決定するように構成された深度テスト・エンジンを備える、請求項1に記載のデバイス。
【請求項10】
前記深度テスト・エンジンは、2Dグラフィックスのパスのために少なくとも1つの三角形の各々の中のサンプルを受け取り、各々の三角形内の前記サンプルについてステンシル値を更新し、前記サンプルのステンシル値に基づいてサンプルのカバレージ値を決定するように構成される、請求項9に記載のデバイス。
【請求項11】
前記パスは複数の画素をカバーし、各画素は複数のサンプルを用いて表現され、前記深度テスト・エンジンは、前記画素の前記複数のサンプルのステンシル値に基づいて前記パス内の各画素のカバレージ値を決定するように構成される、請求項10に記載のデバイス。
【請求項12】
前記GPUは、3Dグラフィックスのためにテクスチャリングを行い、2Dグラフィックスのためにペイント生成を行うように構成されたフラグメント・シェーダを備える、請求項1に記載のデバイス。
【請求項13】
前記フラグメント・シェーダは、2Dグラフィックスのために画像補間を行うように更に構成された、請求項12に記載のデバイス。
【請求項14】
前記GPUは、2D及び3Dグラフィックスのためにコンボリューション・フィルタリングを行うように構成されたフラグメント・シェーダ
を備える、請求項1に記載のデバイス。
【請求項15】
前記GPUは、2D及び3Dグラフィックスのために色変換を行うように構成された計算ユニットを備える、請求項1に記載のデバイス。
【請求項16】
前記計算ユニットは、
オペランドを受け取って前記オペランドの逆数(reciprocal)を提供するように構成された可逆ユニットと、
線形明度を受け取って非線形明度を提供するように構成されたガンマ・ルックアップ・テーブルと、
非線形明度を受け取って線形明度を提供するように構成されたデガンマ・ルックアップ・テーブルと
を備える、請求項15に記載のデバイス。
【請求項17】
前記GPUは、2D及び3Dグラフィックスのためにブレンディングを行うように構成されたブレンディング・ユニットを備える、請求項1に記載のデバイス。
【請求項18】
前記ブレンディング・ユニットは複数のブレンディング・モードをサポートし、各ブレンディング・モードはそれぞれの命令シーケンスを関連づけられる、請求項17に記載のデバイス。
【請求項19】
ブレンディングの命令が、複数のブレンディング演算の1つを示す第1のフィールド、出所明度のために複数の位置の1つを示す第2のフィールド、行先明度のために複数の位置の1つを示す第3のフィールド、複数の出所ブレンディング因子の1つを示す第4のフィールド、複数の行先ブレンディング因子の1つを示す第5のフィールド、及び結果の複数の位置の1つを示す第6のフィールドの少なくとも1つを含む、請求項18に記載のデバイス。
【請求項20】
前記GPUは、2Dグラフィックスのためにプリミティブ内部の画素の座標を計算するように構成されたラスタライザを備え、前記座標は、線点描パターン、出所バッファ、及び行先バッファの少なくとも1つを調べるために使用される、請求項1に記載のデバイス。
【請求項21】
前記GPUは、2Dグラフィックスの勾配フィルのためにプリミティブ内部の画素の明度を決定するように構成されたラスタライザを備える、請求項1に記載のデバイス。
【請求項22】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行うことと、
2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行うことと、
を備え、
前記2Dグラフィックス・パイプラインの複数の段の各段が、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされる、方法。
【請求項23】
前記3Dグラフィックス処理を行うことは、前記3Dグラフィックス・パイプラインの前記複数の段の1つで3Dグラフィックスの深度テストを行うことを備え、
前記2Dグラフィックス処理を行うことは、前記2Dグラフィックス・パイプラインの前記複数の段の1つでクリッピング及びマスキングを行うことを備え、
前記クリッピング及びマスキングの段は前記深度テストの段へマップされる、請求項22に記載の方法。
【請求項24】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行う手段と、
2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行う手段と、
を備え、
前記2Dグラフィックス・パイプラインの複数の段の各段が、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされる、装置。
【請求項25】
前記3Dグラフィックス処理を行う手段は、前記3Dグラフィックス・パイプラインの前記複数の段の1つで3Dグラフィックスの深度テストを行う手段を備え、前記2Dグラフィックス処理を行う手段は、前記2Dグラフィックス・パイプラインの前記複数の段の1つでクリッピング及びマスキングを行う手段を備え、
前記クリッピング及びマスキングの段は前記深度テストの段へマップされる、請求項24に記載の装置。
【請求項26】
前記2Dグラフィックス処理を行う手段は、前記3Dグラフィックス・パイプラインのラスタライズ段及び深度テスト段を使用して、2Dグラフィックスのパス内の画素についてカバレージ値を決定する手段を備える、請求項24に記載の装置。
【請求項27】
前記3Dグラフィックス処理を行う手段は、前記3Dグラフィックス・パイプラインの前記複数の段の1つで3Dグラフィックスのフラグメント・シェーディングを行う手段を備え、
前記2Dグラフィックス処理を行う手段は、前記2Dグラフィックス・パイプラインの前記複数の段の1つでペイント生成を行う手段を備え、
前記ペイント生成の手段は前記フラグメント・シェーディングの段へマップされる、請求項24に記載の装置。
【請求項28】
前記2Dグラフィックス処理を行う手段は、前記2Dグラフィックス・パイプラインの前記複数の段の他の1つで画像補間を行う手段を更に備え、前記画像補間の段は前記フラグメント・シェーディングの段へマップされる、請求項27に記載の装置。
【請求項29】
前記3Dグラフィックス処理を行う手段及び前記2Dグラフィックス処理を行う手段は、複数のブレンディング・モードに従って2D及び3Dグラフィックスのブレンディングを行う手段を備え、前記各ブレンディング・モードがそれぞれの命令シーケンスを関連づけられる、請求項24に記載の装置。
【請求項30】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行い、2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行うように構成され、前記GPUは、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段に使用される少なくとも1つの処理ユニットを用いて前記2Dグラフィックス・パイプラインの複数の段の各段を行うグラフィックス処理ユニット(GPU)と、
前記GPUのためにデータを記憶するように構成されたメモリと
を備える無線デバイス。
【請求項1】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行い、2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行い、前記2Dグラフィックス・パイプラインの複数の段の各段が、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされるように構成されたグラフィックス処理ユニット(GPU)と、
前記GPUのためにデータを記憶するように構成されたメモリと
を備えるデバイス。
【請求項2】
前記GPUは、OpenVGにおける2Dグラフィックス・パイプラインの少なくとも段3から段8について2Dグラフィックス処理を行うように構成された、請求項1に記載のデバイス。
【請求項3】
2Dグラフィックスのパス及びジオメトリ形状についてモザイク配列化を行うGPUドライバ
を更に備える、請求項1に記載のデバイス。
【請求項4】
前記GPUは、2D及び3Dグラフィックス座標系の間で変換を行うように構成された頂点シェーダを備える、請求項1に記載のデバイス。
【請求項5】
前記GPUは、2D及び3Dグラフィックスのプリミティブのラスタライズを行うように構成されたプリミティブ・プロセッサ及びスキャン・コンバータを備える、請求項1に記載のデバイス。
【請求項6】
2Dグラフィックスのパスのためにモザイク配列化を行って三角扇形を提供するGPUドライバを更に備え、前記プリミティブ・プロセッサは各々の三角扇形を少なくとも1つの三角形へ分解し、前記スキャン・コンバータは各々の三角扇形の各々の三角形をラスタライズするように構成された、請求項5に記載のデバイス。
【請求項7】
前記GPUは、3Dグラフィックスのために深度テストを行い、2Dグラフィックスのためにクリッピング及びマスキングを行うように構成された深度テスト・エンジンを備える、請求項1に記載のデバイス。
【請求項8】
前記深度テスト・エンジンは、2Dグラフィックスのためにシザリングを行うように更に構成された、請求項7に記載のデバイス。
【請求項9】
前記GPUは、2Dグラフィックスのパスのためにカバレージ値を決定するように構成された深度テスト・エンジンを備える、請求項1に記載のデバイス。
【請求項10】
前記深度テスト・エンジンは、2Dグラフィックスのパスのために少なくとも1つの三角形の各々の中のサンプルを受け取り、各々の三角形内の前記サンプルについてステンシル値を更新し、前記サンプルのステンシル値に基づいてサンプルのカバレージ値を決定するように構成される、請求項9に記載のデバイス。
【請求項11】
前記パスは複数の画素をカバーし、各画素は複数のサンプルを用いて表現され、前記深度テスト・エンジンは、前記画素の前記複数のサンプルのステンシル値に基づいて前記パス内の各画素のカバレージ値を決定するように構成される、請求項10に記載のデバイス。
【請求項12】
前記GPUは、3Dグラフィックスのためにテクスチャリングを行い、2Dグラフィックスのためにペイント生成を行うように構成されたフラグメント・シェーダを備える、請求項1に記載のデバイス。
【請求項13】
前記フラグメント・シェーダは、2Dグラフィックスのために画像補間を行うように更に構成された、請求項12に記載のデバイス。
【請求項14】
前記GPUは、2D及び3Dグラフィックスのためにコンボリューション・フィルタリングを行うように構成されたフラグメント・シェーダ
を備える、請求項1に記載のデバイス。
【請求項15】
前記GPUは、2D及び3Dグラフィックスのために色変換を行うように構成された計算ユニットを備える、請求項1に記載のデバイス。
【請求項16】
前記計算ユニットは、
オペランドを受け取って前記オペランドの逆数(reciprocal)を提供するように構成された可逆ユニットと、
線形明度を受け取って非線形明度を提供するように構成されたガンマ・ルックアップ・テーブルと、
非線形明度を受け取って線形明度を提供するように構成されたデガンマ・ルックアップ・テーブルと
を備える、請求項15に記載のデバイス。
【請求項17】
前記GPUは、2D及び3Dグラフィックスのためにブレンディングを行うように構成されたブレンディング・ユニットを備える、請求項1に記載のデバイス。
【請求項18】
前記ブレンディング・ユニットは複数のブレンディング・モードをサポートし、各ブレンディング・モードはそれぞれの命令シーケンスを関連づけられる、請求項17に記載のデバイス。
【請求項19】
ブレンディングの命令が、複数のブレンディング演算の1つを示す第1のフィールド、出所明度のために複数の位置の1つを示す第2のフィールド、行先明度のために複数の位置の1つを示す第3のフィールド、複数の出所ブレンディング因子の1つを示す第4のフィールド、複数の行先ブレンディング因子の1つを示す第5のフィールド、及び結果の複数の位置の1つを示す第6のフィールドの少なくとも1つを含む、請求項18に記載のデバイス。
【請求項20】
前記GPUは、2Dグラフィックスのためにプリミティブ内部の画素の座標を計算するように構成されたラスタライザを備え、前記座標は、線点描パターン、出所バッファ、及び行先バッファの少なくとも1つを調べるために使用される、請求項1に記載のデバイス。
【請求項21】
前記GPUは、2Dグラフィックスの勾配フィルのためにプリミティブ内部の画素の明度を決定するように構成されたラスタライザを備える、請求項1に記載のデバイス。
【請求項22】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行うことと、
2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行うことと、
を備え、
前記2Dグラフィックス・パイプラインの複数の段の各段が、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされる、方法。
【請求項23】
前記3Dグラフィックス処理を行うことは、前記3Dグラフィックス・パイプラインの前記複数の段の1つで3Dグラフィックスの深度テストを行うことを備え、
前記2Dグラフィックス処理を行うことは、前記2Dグラフィックス・パイプラインの前記複数の段の1つでクリッピング及びマスキングを行うことを備え、
前記クリッピング及びマスキングの段は前記深度テストの段へマップされる、請求項22に記載の方法。
【請求項24】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行う手段と、
2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行う手段と、
を備え、
前記2Dグラフィックス・パイプラインの複数の段の各段が、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段へマップされる、装置。
【請求項25】
前記3Dグラフィックス処理を行う手段は、前記3Dグラフィックス・パイプラインの前記複数の段の1つで3Dグラフィックスの深度テストを行う手段を備え、前記2Dグラフィックス処理を行う手段は、前記2Dグラフィックス・パイプラインの前記複数の段の1つでクリッピング及びマスキングを行う手段を備え、
前記クリッピング及びマスキングの段は前記深度テストの段へマップされる、請求項24に記載の装置。
【請求項26】
前記2Dグラフィックス処理を行う手段は、前記3Dグラフィックス・パイプラインのラスタライズ段及び深度テスト段を使用して、2Dグラフィックスのパス内の画素についてカバレージ値を決定する手段を備える、請求項24に記載の装置。
【請求項27】
前記3Dグラフィックス処理を行う手段は、前記3Dグラフィックス・パイプラインの前記複数の段の1つで3Dグラフィックスのフラグメント・シェーディングを行う手段を備え、
前記2Dグラフィックス処理を行う手段は、前記2Dグラフィックス・パイプラインの前記複数の段の1つでペイント生成を行う手段を備え、
前記ペイント生成の手段は前記フラグメント・シェーディングの段へマップされる、請求項24に記載の装置。
【請求項28】
前記2Dグラフィックス処理を行う手段は、前記2Dグラフィックス・パイプラインの前記複数の段の他の1つで画像補間を行う手段を更に備え、前記画像補間の段は前記フラグメント・シェーディングの段へマップされる、請求項27に記載の装置。
【請求項29】
前記3Dグラフィックス処理を行う手段及び前記2Dグラフィックス処理を行う手段は、複数のブレンディング・モードに従って2D及び3Dグラフィックスのブレンディングを行う手段を備え、前記各ブレンディング・モードがそれぞれの命令シーケンスを関連づけられる、請求項24に記載の装置。
【請求項30】
3次元(3D)画像をレンダリングする3Dグラフィックス・パイプラインに従って3Dグラフィックス処理を行い、2次元(2D)画像をレンダリングする2Dグラフィックス・パイプラインに従って2Dグラフィックス処理を行うように構成され、前記GPUは、前記3Dグラフィックス・パイプラインの複数の段の少なくとも1つの段に使用される少なくとも1つの処理ユニットを用いて前記2Dグラフィックス・パイプラインの複数の段の各段を行うグラフィックス処理ユニット(GPU)と、
前記GPUのためにデータを記憶するように構成されたメモリと
を備える無線デバイス。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公表番号】特表2010−519618(P2010−519618A)
【公表日】平成22年6月3日(2010.6.3)
【国際特許分類】
【出願番号】特願2009−550112(P2009−550112)
【出願日】平成20年2月15日(2008.2.15)
【国際出願番号】PCT/US2008/054162
【国際公開番号】WO2008/101210
【国際公開日】平成20年8月21日(2008.8.21)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.GSM
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】
【公表日】平成22年6月3日(2010.6.3)
【国際特許分類】
【出願日】平成20年2月15日(2008.2.15)
【国際出願番号】PCT/US2008/054162
【国際公開番号】WO2008/101210
【国際公開日】平成20年8月21日(2008.8.21)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.GSM
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】
[ Back to top ]