(57)【要約】  ２Ｄ及び３Ｄグラフィックスの双方をサポートする技術が説明される。グラフィックス処理ユニット（ＧＰＵ）は、３Ｄ画像をレンダリングする３Ｄグラフィックス・パイプラインに従って３Ｄグラフィックス処理を行ってもよく、更に２Ｄ画像をレンダリングする２Ｄグラフィックス・パイプラインに従って２Ｄグラフィックス処理を行ってもよい。２Ｄグラフィックス・パイプラインの各々の段は、３Ｄグラフィックス・パイプラインの少なくとも１つの段へマップされてもよい。例えば、２Ｄグラフィックスのクリッピング、マスキング、及びシザリング段は、３Ｄグラフィックスの深度テスト段へマップされてもよい。２Ｄグラフィックスのパス内の画素のカバレージ値は、３Ｄグラフィックスのラスタライズ及び深度テスト段を使用して決定されてもよい。２Ｄグラフィックスのペイント生成段及び画像補間段は、３Ｄグラフィックスのフラグメント・シェーダ段へマップされてもよい。２Ｄグラフィックスのブレンディング段は、３Ｄグラフィックスのブレンディング段へマップされてもよい。
2010519618.tif 000002
【特許請求の範囲】
【請求項１】
３次元（３Ｄ）画像をレンダリングする３Ｄグラフィックス・パイプラインに従って３Ｄグラフィックス処理を行い、２次元（２Ｄ）画像をレンダリングする２Ｄグラフィックス・パイプラインに従って２Ｄグラフィックス処理を行い、前記２Ｄグラフィックス・パイプラインの複数の段の各段が、前記３Ｄグラフィックス・パイプラインの複数の段の少なくとも１つの段へマップされるように構成されたグラフィックス処理ユニット（ＧＰＵ）と、
前記ＧＰＵのためにデータを記憶するように構成されたメモリと
を備えるデバイス。
【請求項２】
前記ＧＰＵは、ＯｐｅｎＶＧにおける２Ｄグラフィックス・パイプラインの少なくとも段３から段８について２Ｄグラフィックス処理を行うように構成された、請求項１に記載のデバイス。
【請求項３】
２Ｄグラフィックスのパス及びジオメトリ形状についてモザイク配列化を行うＧＰＵドライバ
を更に備える、請求項１に記載のデバイス。
【請求項４】
前記ＧＰＵは、２Ｄ及び３Ｄグラフィックス座標系の間で変換を行うように構成された頂点シェーダを備える、請求項１に記載のデバイス。
【請求項５】
前記ＧＰＵは、２Ｄ及び３Ｄグラフィックスのプリミティブのラスタライズを行うように構成されたプリミティブ・プロセッサ及びスキャン・コンバータを備える、請求項１に記載のデバイス。
【請求項６】
２Ｄグラフィックスのパスのためにモザイク配列化を行って三角扇形を提供するＧＰＵドライバを更に備え、前記プリミティブ・プロセッサは各々の三角扇形を少なくとも１つの三角形へ分解し、前記スキャン・コンバータは各々の三角扇形の各々の三角形をラスタライズするように構成された、請求項５に記載のデバイス。
【請求項７】
前記ＧＰＵは、３Ｄグラフィックスのために深度テストを行い、２Ｄグラフィックスのためにクリッピング及びマスキングを行うように構成された深度テスト・エンジンを備える、請求項１に記載のデバイス。
【請求項８】
前記深度テスト・エンジンは、２Ｄグラフィックスのためにシザリングを行うように更に構成された、請求項７に記載のデバイス。
【請求項９】
前記ＧＰＵは、２Ｄグラフィックスのパスのためにカバレージ値を決定するように構成された深度テスト・エンジンを備える、請求項１に記載のデバイス。
【請求項１０】
前記深度テスト・エンジンは、２Ｄグラフィックスのパスのために少なくとも１つの三角形の各々の中のサンプルを受け取り、各々の三角形内の前記サンプルについてステンシル値を更新し、前記サンプルのステンシル値に基づいてサンプルのカバレージ値を決定するように構成される、請求項９に記載のデバイス。
【請求項１１】
前記パスは複数の画素をカバーし、各画素は複数のサンプルを用いて表現され、前記深度テスト・エンジンは、前記画素の前記複数のサンプルのステンシル値に基づいて前記パス内の各画素のカバレージ値を決定するように構成される、請求項１０に記載のデバイス。
【請求項１２】
前記ＧＰＵは、３Ｄグラフィックスのためにテクスチャリングを行い、２Ｄグラフィックスのためにペイント生成を行うように構成されたフラグメント・シェーダを備える、請求項１に記載のデバイス。
【請求項１３】
前記フラグメント・シェーダは、２Ｄグラフィックスのために画像補間を行うように更に構成された、請求項１２に記載のデバイス。
【請求項１４】
前記ＧＰＵは、２Ｄ及び３Ｄグラフィックスのためにコンボリューション・フィルタリングを行うように構成されたフラグメント・シェーダ
を備える、請求項１に記載のデバイス。
【請求項１５】
前記ＧＰＵは、２Ｄ及び３Ｄグラフィックスのために色変換を行うように構成された計算ユニットを備える、請求項１に記載のデバイス。
【請求項１６】
前記計算ユニットは、
オペランドを受け取って前記オペランドの逆数（reciprocal）を提供するように構成された可逆ユニットと、
線形明度を受け取って非線形明度を提供するように構成されたガンマ・ルックアップ・テーブルと、
非線形明度を受け取って線形明度を提供するように構成されたデガンマ・ルックアップ・テーブルと
を備える、請求項１５に記載のデバイス。
【請求項１７】
前記ＧＰＵは、２Ｄ及び３Ｄグラフィックスのためにブレンディングを行うように構成されたブレンディング・ユニットを備える、請求項１に記載のデバイス。
【請求項１８】
前記ブレンディング・ユニットは複数のブレンディング・モードをサポートし、各ブレンディング・モードはそれぞれの命令シーケンスを関連づけられる、請求項１７に記載のデバイス。
【請求項１９】
ブレンディングの命令が、複数のブレンディング演算の１つを示す第１のフィールド、出所明度のために複数の位置の１つを示す第２のフィールド、行先明度のために複数の位置の１つを示す第３のフィールド、複数の出所ブレンディング因子の１つを示す第４のフィールド、複数の行先ブレンディング因子の１つを示す第５のフィールド、及び結果の複数の位置の１つを示す第６のフィールドの少なくとも１つを含む、請求項１８に記載のデバイス。
【請求項２０】
前記ＧＰＵは、２Ｄグラフィックスのためにプリミティブ内部の画素の座標を計算するように構成されたラスタライザを備え、前記座標は、線点描パターン、出所バッファ、及び行先バッファの少なくとも１つを調べるために使用される、請求項１に記載のデバイス。
【請求項２１】
前記ＧＰＵは、２Ｄグラフィックスの勾配フィルのためにプリミティブ内部の画素の明度を決定するように構成されたラスタライザを備える、請求項１に記載のデバイス。
【請求項２２】
３次元（３Ｄ）画像をレンダリングする３Ｄグラフィックス・パイプラインに従って３Ｄグラフィックス処理を行うことと、
２次元（２Ｄ）画像をレンダリングする２Ｄグラフィックス・パイプラインに従って２Ｄグラフィックス処理を行うことと、
を備え、
前記２Ｄグラフィックス・パイプラインの複数の段の各段が、前記３Ｄグラフィックス・パイプラインの複数の段の少なくとも１つの段へマップされる、方法。
【請求項２３】
前記３Ｄグラフィックス処理を行うことは、前記３Ｄグラフィックス・パイプラインの前記複数の段の１つで３Ｄグラフィックスの深度テストを行うことを備え、
前記２Ｄグラフィックス処理を行うことは、前記２Ｄグラフィックス・パイプラインの前記複数の段の１つでクリッピング及びマスキングを行うことを備え、
前記クリッピング及びマスキングの段は前記深度テストの段へマップされる、請求項２２に記載の方法。
【請求項２４】
３次元（３Ｄ）画像をレンダリングする３Ｄグラフィックス・パイプラインに従って３Ｄグラフィックス処理を行う手段と、
２次元（２Ｄ）画像をレンダリングする２Ｄグラフィックス・パイプラインに従って２Ｄグラフィックス処理を行う手段と、
を備え、
前記２Ｄグラフィックス・パイプラインの複数の段の各段が、前記３Ｄグラフィックス・パイプラインの複数の段の少なくとも１つの段へマップされる、装置。
【請求項２５】
前記３Ｄグラフィックス処理を行う手段は、前記３Ｄグラフィックス・パイプラインの前記複数の段の１つで３Ｄグラフィックスの深度テストを行う手段を備え、前記２Ｄグラフィックス処理を行う手段は、前記２Ｄグラフィックス・パイプラインの前記複数の段の１つでクリッピング及びマスキングを行う手段を備え、
前記クリッピング及びマスキングの段は前記深度テストの段へマップされる、請求項２４に記載の装置。
【請求項２６】
前記２Ｄグラフィックス処理を行う手段は、前記３Ｄグラフィックス・パイプラインのラスタライズ段及び深度テスト段を使用して、２Ｄグラフィックスのパス内の画素についてカバレージ値を決定する手段を備える、請求項２４に記載の装置。
【請求項２７】
前記３Ｄグラフィックス処理を行う手段は、前記３Ｄグラフィックス・パイプラインの前記複数の段の１つで３Ｄグラフィックスのフラグメント・シェーディングを行う手段を備え、
前記２Ｄグラフィックス処理を行う手段は、前記２Ｄグラフィックス・パイプラインの前記複数の段の１つでペイント生成を行う手段を備え、
前記ペイント生成の手段は前記フラグメント・シェーディングの段へマップされる、請求項２４に記載の装置。
【請求項２８】
前記２Ｄグラフィックス処理を行う手段は、前記２Ｄグラフィックス・パイプラインの前記複数の段の他の１つで画像補間を行う手段を更に備え、前記画像補間の段は前記フラグメント・シェーディングの段へマップされる、請求項２７に記載の装置。
【請求項２９】
前記３Ｄグラフィックス処理を行う手段及び前記２Ｄグラフィックス処理を行う手段は、複数のブレンディング・モードに従って２Ｄ及び３Ｄグラフィックスのブレンディングを行う手段を備え、前記各ブレンディング・モードがそれぞれの命令シーケンスを関連づけられる、請求項２４に記載の装置。
【請求項３０】
３次元（３Ｄ）画像をレンダリングする３Ｄグラフィックス・パイプラインに従って３Ｄグラフィックス処理を行い、２次元（２Ｄ）画像をレンダリングする２Ｄグラフィックス・パイプラインに従って２Ｄグラフィックス処理を行うように構成され、前記ＧＰＵは、前記３Ｄグラフィックス・パイプラインの複数の段の少なくとも１つの段に使用される少なくとも１つの処理ユニットを用いて前記２Ｄグラフィックス・パイプラインの複数の段の各段を行うグラフィックス処理ユニット（ＧＰＵ）と、
前記ＧＰＵのためにデータを記憶するように構成されたメモリと
を備える無線デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、一般的にはエレクトロニクスに関し、更に具体的には、グラフィックス処理を行う技術に関する。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ）は、様々なアプリケーション、例えば、ビデオゲーム、グラフィックス、コンピュータ支援設計（ＣＡＤ）、シミュレーション及び視覚化ツール、イメージングなどのために、２次元（２Ｄ）又は３次元（３Ｄ）画像をレンダリングするために使用される専用ハードウェア・ユニットである。２Ｄ描画をレンダリングするプロセスは、典型的には２Ｄグラフィックスに特化された一連の段を含む。これらの２Ｄグラフィックス段の処理は、計算集約的である。２Ｄ  ＧＰＵは、計算集約的２Ｄ処理をハードウェアで行うように設計及び使用されてもよい。２Ｄ  ＧＰＵの使用は、２Ｄ描画のレンダリング時間を短くし、全体的パフォーマンスを改善する。
【０００３】
同様に、３Ｄ画像をレンダリングするプロセスは、典型的には３Ｄグラフィックスに特化された一連の段を含む。これらの３Ｄグラフィックス段の処理も、計算集約的である。３Ｄ  ＧＰＵは、計算集約的３Ｄ処理をハードウェアで行うように設計及び使用されてもよい。３Ｄ  ＧＰＵの使用は、３Ｄ画像のレンダリング時間を短くし、全体的パフォーマンスを改善する。
【０００４】
エレクトロニクス・デバイスは、２Ｄグラフィックスのみをサポートし、２Ｄグラフィックスを加速化するために２Ｄ  ＧＰＵを使用してもよい。エレクトロニクス・デバイスは、同じように３Ｄグラフィックスのみをサポートし、３Ｄグラフィックスを加速化するために３Ｄ  ＧＰＵを使用してもよい。２Ｄ及び３Ｄグラフィックスの双方をサポートするエレクトロニクス・デバイスの場合、できるだけ小さいハードウェアを用いて、２Ｄ及び３Ｄグラフィックスの双方のために良好なパフォーマンスを達成し、コスト及び電力消費を低減することが望ましい。
【発明の概要】
【０００５】
本明細書では、２Ｄ及び３Ｄグラフィックスの双方を効率的にサポートする技術が説明される。ＧＰＵは、３Ｄグラフィックス・パイプラインに従って３Ｄグラフィックス処理を行い、３Ｄ画像をレンダリングするように設計されてもよい。ＧＰＵは、同じように２Ｄグラフィックス・パイプラインに従って２Ｄグラフィックス処理を行い、２Ｄ画像又は描画をレンダリングしてもよい。２Ｄグラフィックス・パイプラインの複数の段の各段は、３Ｄグラフィックス・パイプラインの複数の段の少なくとも１つの段へマップされてもよい。ＧＰＵ内の処理ユニットは効率的に使用され、２Ｄ及び３Ｄグラフィックスの双方のために処理を行ってもよい。
【０００６】
一般的に、２Ｄグラフィックス・パイプライン及び３Ｄグラフィックス・パイプラインの各々は、任意の数の段を含んでもよい。２Ｄグラフィックス・パイプラインの段は、様々なマッピング・スキームに基づいて３Ｄグラフィックス・パイプラインの段へマップされてもよい。例えば、２Ｄグラフィックスのクリッピング、マスキング、及びシザリング（scissoring）段は、３Ｄグラフィックスの深度テスト段へマップされてもよい。２Ｄグラフィックスのパス（path）内の画素のカバレージ値は、３Ｄグラフィックスのラスタライズ段、深度テスト段などを使用して決定されてもよい。２Ｄグラフィックスのペイント（paint）生成段及び画像補間段は、３Ｄグラフィックスのフラグメント・シェーダ（fragment shader）段へマップされてもよい。２Ｄグラフィックスのブレンディング（blending）段は、３Ｄグラフィックスのブレンディング段へマップされてもよく、双方のブレンディング段は、複数のブレンディング・モードを用いてサポートされてもよい。２Ｄグラフィックスの他の段は、下記で説明されるように、３Ｄグラフィックスの他の段へマップされてもよい。
【０００７】
この開示の様々な態様及び特徴は、以下で更に詳細に説明される。
【図面の簡単な説明】
【０００８】
【図１】３Ｄグラフィックスをサポートするデバイスのブロック図を示す。
【図２】ＯｐｅｎＶＧにおける２Ｄグラフィックス・パイプラインのブロック図を示す。
【図３】図１のデバイスを使用してＯｐｅｎＶＧで２Ｄグラフィックスをサポートすることを示す。
【図４】パスのモザイク配列の一例を示す。
【図５】３×３格子のコンボリューション・フィルタリングの一例を示す。
【図６】フィルタリング・ユニットのブロック図を示す。
【図７】ブレンディング命令の設計を示す。
【図８】ブレンディング・ユニットのブロック図を示す。
【図９】図１のデバイスを使用して基本２Ｄグラフィックスをサポートすることを示す。
【図１０】２Ｄ及び３Ｄグラフィックスをサポートするプロセスを示す。
【図１１】無線通信デバイスのブロック図を示す。
【発明を実施するための形態】
【０００９】
ＧＰＵは２Ｄ及び／又は３Ｄグラフィックスをサポートしてもよい。２Ｄグラフィックスはジオメトリ・データの２Ｄ表現を記憶し、このジオメトリ・データは２Ｄ画像又は描画を生成するために処理される。３Ｄグラフィックスはジオメトリ・データの３Ｄ表現を記憶し、このジオメトリ・データは２Ｄ画像を生成するために処理される。２Ｄグラフィックスは絵画にたとえることができ、３Ｄグラフィックスは彫刻にたとえることができる。２Ｄ及び３Ｄグラフィックスは、異なる段及びグラフィックス演算を有する異なるパイプラインを用いて、表示用の最終画像を生成してもよい。
【００１０】
２Ｄ又は３Ｄ画像は、プリミティブを用いて表現されてもよい。プリミティブはジオメトリの基本単位である。３Ｄグラフィックスの場合、プリミティブはポリゴン（典型的には三角形）、線、点などを含んでもよい。各三角形は３つの頂点によって画定され、各線は２つの頂点によって画定される。各頂点は、様々な属性、例えば、空間座標、明度、テクスチャ座標などと関連づけられてもよい。各属性は、最大４つの成分を有してもよい。例えば、空間座標は、３つの成分ｘ、ｙ、ｚ又は４つの成分ｘ、ｙ、ｚ、ｗによって与えられてもよい。ここで、ｘ及びｙは水平及び垂直座標であり、ｚは深度であり、ｗは同次座標である。明度は、３つの成分ｒ、ｇ、ｂ又は４つの成分ｒ、ｇ、ｂ、ａによって与えられてもよい。ここで、ｒは赤、ｇは緑、ｂは青、ａは透明度因子である。透明度因子は画素（ピクセル）の透明度を決定する。テクスチャ座標は、典型的には、水平及び垂直座標ｕ及びｖによって与えられる。頂点は他の属性に関連づけられてもよい。２Ｄグラフィックスの場合、プリミティブは点、線、曲線、長方形などを含んでもよい。パスは異なるプリミティブの組み合わせで構成されてもよい。２Ｄ又は３Ｄ画像は、表示されるべき画素について属性成分値を計算することによってレンダリングされてもよい。
【００１１】
図１は、３Ｄグラフィックスをサポートするデバイス１００の設計のブロック図を示す。デバイス１００は、例えば、オープン・グラフィックス・ライブラリ（ＯｐｅｎＧＬ）、Ｄｉｒｅｃｔ３Ｄなどの３Ｄソフトウェア・インタフェースをサポートしてもよい。ＯｐｅｎＧＬは、公開されている、２００４年１０月２２日の文書「ＯｐｅｎＧＬ（登録商標）グラフィックス・システム：仕様」バージョン２.０（"The OpenGL(R) Graphics System: A Specification," Version 2.0, dated October 22, 2004）に記載されている。デバイス１００はスタンドアロン型システムであってもよく、又は、例えば、コンピュータ、無線通信デバイスなどのより大きいシステムの一部分であってもよい。
【００１２】
グラフィックス・アプリケーション１１０は同時に実行していてもよく、ビデオゲーム、グラフィックス、テレビ会議などのためのものであってもよい。グラフィックス・アプリケーション１１０は、高レベル・コマンドを生成して、グラフィックス・データ上でグラフィックス演算を行う。高レベル・コマンドは比較的複雑である場合もあるが、グラフィックス・データはかなりコンパクトであり得る。グラフィックス・データは、ジオメトリ情報（例えば、画像内のプリミティブの頂点情報）、画像がどのように見えるかを記述する情報などを含んでもよい。グラフィックス・アプリケーション１１０は、アプリケーション・プログラミング・インタフェース（ＡＰＩ）（図１には図示しない）を介してＧＰＵドライバ１１２とインタフェースする。
【００１３】
ＧＰＵドライバ１１２は、プロセッサ上で実行するソフトウェア及び／又はファームウェア、又はハードウェア・ユニット、又はソフトウェア／ファームウェアとハードウェアとの組み合わせであってもよい。ＧＰＵドライバ１１２は、グラフィックス・アプリケーション１１０からの高レベル・コマンドを低レベル・コマンドへ変換する。低レベル・コマンドは機械に依存してもよく、ＧＰＵ１２０内の処理ユニットに対して調整されてもよい。また、ＧＰＵドライバ１１２は、データのある場所、例えば、どのバッファがデータを記憶しているかを示してもよい。ＧＰＵ１２０は、例えば、自動的に及びグラフィックス・アプリケーションに対してトランスペアレントに、各グラフィックス・アプリケーションの処理を一連のスレッドへ分割してもよい。スレッド（又は実行スレッド）は、１つ又は複数の命令のセットを用いて行われる特定のタスクを示す。例えば、スレッドは、画素のセットについてブレンディングを行ってもよい。スレッドにより、グラフィックス・アプリケーションは、異なる処理ユニットによって同時に行われる複数のタスクを有することが可能であり、更に、異なるグラフィックス・アプリケーションが、リソースを共有することが可能である。ＧＰＵドライバ１１２は、スレッドのために低レベル・コマンドを提供し、データ位置インディケータをＧＰＵ１２０へ提供する。
【００１４】
ＧＰＵ１２０は、様々な機能を行って３Ｄ画像をレンダリングする処理ユニットを含む。「処理ユニット」、「エンジン」、「コア」、「マシン」、「プロセッサ」、「モジュール」などの用語は、しばしば互換可能に使用される。ＧＰＵ１２０内において、コマンド・エンジン１２２は、ＧＰＵドライバ１１２から低レベル・コマンドを受け取り、及び／又はメモリからコマンドをフェッチする。コマンド・エンジン１２２は低レベル・コマンドを復号し、これらのコマンドによって影響される処理ユニットへ命令を提供する。
【００１５】
頂点シェーダ１２４は、ジオメトリ・データ上で頂点処理を行う。ジオメトリ・データは、三角形及び線のようなプリミティブを備えてもよい。例えば、頂点シェーダ１２４は、ジオメトリを１つの座標系から他の座標系へ変換し、ジオメトリの頂点について光レベルを計算し、ジオメトリのためにブレンディングを行うなどを行ってもよい。頂点バッファ１４０は、頂点シェーダ１２４のために頂点情報を記憶する。プリミティブ・プロセッサ１２６は、後続のラスタライズ・プロセスのためにパラメータを計算する。例えば、プリミティブ・プロセッサ１２６は、各三角形の３つのエッジについて一次方程式の係数を計算し、画素の深度補間のために深度（ｚ）勾配を計算してもよい。スキャン・コンバータ１２８は、各プリミティブ（例えば、三角形又は線）を画素へ分解し、各画素のために画面座標を決定する。
【００１６】
深度テスト・エンジン１３０は、画素について深度テスト（ｚテストとも呼ばれる）を行い、及び／又は、イネーブルにされている場合、ステンシル・テストを行って、画素がレンダリングされるべきか廃棄されるべきかを決定してもよい。ｚバッファ１４２は、レンダリングされている画像内の各画素位置について深度又はｚ値を記憶する。深度テストの場合、エンジン１３０は、画素のｚ値（現在のｚ値）を、ｚバッファ１４２内の対応するｚ値（記憶されたｚ値）に対して比較し、現在のｚ値が、記憶されたｚ値よりも近接／近隣である場合、画素を通過させてｚバッファ１４２及び可能性としてステンシル・バッファ１４４を更新し、現在のｚ値が、記憶されたｚ値よりも後方にある場合、画素を廃棄する。ステンシル・バッファ１４４は、レンダリングされている画像内で各画素位置についてステンシル値を記憶する。ステンシル・テストの場合、エンジン１３０は、画素の記憶されたステンシル値を参照値に対して比較し、比較の結果に基づいて、画素を通過させるか廃棄する。
【００１７】
フラグメント・シェーダ１３２（画素シェーダとも呼ばれる場合もある）は、画素及びフラグメント上で様々なグラフィックス演算を行ってもよい。フラグメントとは、１つの画素及びこの画素の関連情報である。フラグメント・シェーダ１３２は、画素属性の補間用のパラメータ、例えば、属性補間用の一次方程式係数を計算してもよい。フラグメント・シェーダ１３２は、画素の画面座標に基づいて、及び補間パラメータを使用して、各三角形内の各画素について属性成分値を計算してもよい。フラグメント・シェーダ１３２は、イネーブルにされている場合、テクスチャ・マッピングも行い、テクスチャを各三角形へ適用してもよい。テクスチャ画像は、テクスチャ・バッファ１４６内に記憶されてもよい。三角形の３つの頂点は、テクスチャ画像内で３つの（ｕ，ｖ）座標を関連づけられてもよく、三角形内の各画素は、テクスチャ画像内で特定のテクスチャ座標を関連づけられてもよい。三角形内の各画素の色を、この画素のテクスチャ座標によって示される位置でテクスチャ画像の色を用いて修正することにより、テクスチャリング（texturing）が達成される。フラグメント・シェーダ１３２は、テクスチャ・フィルタリング及び／又は他のグラフィックス演算も行ってもよい。
【００１８】
画素ブレンダ（blender）１３４は、フラグメント上で、アルファ・ブレンディング、アルファ・テスト、フォグ・ブレンディング、論理演算、ディザリング演算などのグラフィックス演算を行ってもよい。画素ブレンダ１３４は、ディスプレイ・デバイス（図１に示される）上で提示するための最終画像用結果を色バッファ１４８へ提供してもよい。
【００１９】
図１で示されるように、ＧＰＵ１２０は、３Ｄグラフィックスのために設計された複数の段から構成された３Ｄグラフィックス・パイプラインを実現する。ＧＰＵ１２０は、異なる段及び／又は異なるやり方で配列された段を有する他の３Ｄグラフィックス・パイプラインも実現してもよい。バッファ１４０〜１４８は、図１で示されるように、ＧＰＵ１２０の外部にあるメモリを用いて実現されてもよい。ＧＰＵ１２０は、高速メモリであるキャッシュを含んで、ＧＰＵ内の処理ユニットのために命令及びデータを記憶してもよい。
【００２０】
図２は、公開されている、２００５年７月２８日の「ＯｐｅｎＶＧ仕様、バージョン１.０」（"OpenVG Specification, Version 1.0," July 28, 2005）に記載された２Ｄグラフィックス・パイプライン２００のブロック図である。以降、この仕様をＯｐｅｎＶＧと呼ぶ。ＯｐｅｎＶＧは、２Ｄベクトル・グラフィックスの新しい標準であり、ハンドヘルド及び移動デバイス、例えば、携帯電話機及びゲーム用デバイスに適している。２Ｄグラフィックスの描画はパスで構成される。パスは、描画内のジオメトリを画定するために使用される。パスは、描画サーフェイス上のペン又はペイント・ブラシの持続を画定し、ストローク（stroke）及び／又はフィル（fill）されてもよい。ストロークとは、パスの形状の輪郭を線で画定することである。フィルとは、色、勾配、又はテクスチャを形状の内部へ適用することである。
【００２１】
段１のブロック２１２において、グラフィックス・アプリケーションは、描画されるべきパスを画定し、パスについて後続の段によって使用されるべき変換、ストローク、及びペイントのパラメータがあればこれらを設定する。段２のブロック２１４において、パスはユーザ座標系から画面座標系へ変換される。ユーザ座標系は、ジオメトリを表現するために使用される座標系である。画面座標系は、表示画面のための座標系である。パスがストロークされるべきである場合、ストロークされたパラメータがユーザ座標系で適用され、画面座標系内のストロークされたジオメトリを記述する新しいパスを生成する。この新しいパスは現パスと呼ばれ、２Ｄグラフィックス・パイプライン内の後続の段によって演算される。段３のブロック２１６において、パス／サーフェイス変換が現パスのジオメトリへ適用され、画面座標を生成する。段４のブロック２１８では、現パスによって影響される各画素についてカバレージ値が計算される。画素のカバレージ値は、この画素の区域のどの端数部分が現パスによってカバーされるかを示す。カバレージ値は後続の段で使用され、画素の明度を計算する。段４は現パスを描画サーフェイス上の画素へマップする。
【００２２】
段５のブロック２２０では、描画サーフェイスの境界内にない画素、及び、シザリングがイネーブルにされている場合、１つ又は複数のシザリング領域内にない画素が、ゼロのカバレージ値を割り当てられる。残りの処理は、ゼロのカバレージ値を有する画素についてスキップされる。段５は、描画を描画サーフェイス及びシザリング領域の境界へクリップする。クリップされた描画部分は廃棄される。
【００２３】
段６のブロック２２２では、明度及びアルファ値が、現在の関連ペイントに基づいて描画サーフェイス上の各画素について定義される。現在の関連ペイントは、パスがフィルされているかストロークされているかに依存する。段６は、ペイント画像を現パス内の画素へ適用する。段７のブロック２２４では、画像が描画されている場合、明度及びアルファ値が、画像／サーフェイス変換の逆（inverse）を使用し画像値を補間することによって、各画素について計算される。結果は、現在の画像描画モードに従ってペイントの明度及びアルファ値と組み合わせられる。段８のブロック２２６では、段７からの各画素の出所（source）の明度及びアルファ値が行先（destination）の色空間へ変換され、ブレンディング・モードに従って、対応する行先の明度及びアルファ値とブレンド（blend）される。
【００２４】
図２は、特定の２Ｄグラフィックス・パイプラインを示す。２Ｄグラフィックスは、２Ｄ画像を他のやり方でレンダリングする他のパイプラインを用いてもサポートされてもよい。
【００２５】
図１のデバイス１００は、ユニット１１２〜１３４を使用して２Ｄグラフィックスをサポートしてもよい。これらのユニットは３Ｄグラフィックスのために設計されてもよいが、これらのユニットの能力は２Ｄグラフィックスへ拡張されて使用されてもよい。
【００２６】
図３は、図１のデバイス１００をＯｐｅｎＶＧの２Ｄグラフィックスに使用する設計３００を示す。この設計において、ＧＰＵドライバ１１２は、図２の２Ｄグラフィックス・パイプライン２００の段１でパス、変換行列、ストローク、及びペイントを準備及び定義し、段２でストローク・パス生成を行う。頂点シェーダ１２４は、段３で座標系間の変換を行う。プリミティブ・プロセッサ１２６及びスキャン・コンバータ１２８は、段４でラスタライズを行う。深度テスト・エンジン１３０は、段５でクリッピング及びマスキングを行う。フラグメント・シェーダ１３２は、段６でペイント生成を行い、段７で画像補間を行う。画素ブレンダ（blender）１３４は、段８でブレンディング及びアンチエイリアシングを行う。２Ｄグラフィックス段の幾つかのためにデバイス１００を用いる処理は、後述する。
【００２７】
図３は、特定の３Ｄ  ＧＰＵ１２０を有するデバイス１００を用いて、ＯｐｅｎＶＧのために特定の２Ｄグラフィックス・パイプライン２００を実現する１つの設計を示す。デバイス１００は他のやり方で２Ｄグラフィックスをサポートしてもよく、例えば、２Ｄグラフィックス・パイプライン２００の段が異なるようにデバイス１００のユニットへマップされてもよい。デバイス１００は、２Ｄグラフィックス演算をサポートする拡張及び／又は修正を含んでもよい。２Ｄグラフィックスは、他の設計の３Ｄ  ＧＰＵを用いて実現されてもよい。例えば、３Ｄ  ＧＰＵは、段１及び２をハードウェアで実現するジオメトリ・シェーダを含んでもよい。
【００２８】
２Ｄ描画又は画像は、複数回の通過でレンダリングされてもよい。最初の通過は、レンダリングされている画像のためにシザリング及びマスキングについてバッファ内で値を生成してもよい。第２の通過は、画像内のパスにモザイク配列化を行い、これらのパスについてカバレージ値を決定してもよい。第３の通過は、ペイント及び入力画像をパスへ適用し、画面用の最終画像を生成してもよい。各々の通過は、デバイス１００内のユニットの幾つか又は全部を使用してもよい。ＯｐｅｎＶＧ  ２Ｄグラフィックス・パイプラインの異なる段を、デバイス１００内の様々なユニットで処理することは、後述する。
【００２９】
段２では、ＧＰＵドライバ１１２が、屈曲及びストロークされたパスのモザイク配列化を行い、三角扇形を提供してもよい。屈曲されたパスは、頂点によって画定された一連のエッジを有する三角扇形を用いて近似されてもよい。これらの頂点は、パスの曲率及び画像品質要件に基づいて決定されてもよい。
【００３０】
図４は、５つの頂点Ｖ０、Ｖ１、Ｖ２、Ｖ３、Ｖ４によって画定されたパスのモザイク配列の一例を示す。三角扇形は、Ｖ０からＶ１へのエッジ４１２、次いでＶ１からＶ２へのエッジ４１４、次いでＶ２からＶ３へのエッジ４１６、次いでＶ３からＶ４へのエッジ４１８、次いでＶ４からＶ０へ戻るエッジ４２０を描画することによって形成される。Ｖ０は三角扇形の中心点である。
【００３１】
段３では、必要に応じて、頂点シェーダ１２４が、ユーザ座標系から画面座標系へ、三角扇形の変換を行ってもよい。２Ｄグラフィックスの変換は、３Ｄグラフィックスの変換と同じやり方で行われてもよい。
【００３２】
段４では、ユニット１２６、１２８、１３０が、変換の後に、三角扇形に基づいて２Ｄ画像のためにカバレージ・マスクがあればこれを生成してもよい。これらのユニットは、三角扇形によって形成された形状の内側及び外側にある画素を決定する。パスは閉じられてもよく、パスの形状は平面を内側領域と外側領域へ分割してもよい。内側領域の画素は、後続の段によって、外側領域の画素とは異なるように扱われてもよい。
【００３３】
形状の内側及び外側領域は、非ゼロ・フィル規則又は奇数／偶数フィル規則のいずれかに基づいて決定されてもよい。両方の規則では、所与の点が形状の内側にあるか外側にあるかを決定するため、所与の点から線が任意の無限方向へ描画される。図４で示される例では、線４３２が点４３０から右へ描画される。カウンタはゼロへリセットされる。点４３０からスタートし線４３２に沿って無限方向へ進むとき、カウンタは、（ａ）左から右へ行くエッジによって線４３２が交差される場合１だけ増分され、（ｂ）右から左へ行くエッジによって線４３２が交差される場合１だけ減分される。図４では、点４３０からスタートし線４３２に沿って進むとき、カウンタは、左から右へ線を交差するエッジ４１４に起因して１だけ増分され、左から右へ線を交差するエッジ４２０に起因して再び１だけ減分される。こうして、点４３０は２のフィル値を有する。他の領域の０及び１のフィル値が、図４に示される。
【００３４】
非ゼロ・フィル規則の場合、点のフィル値がゼロに等しくない場合、点は形状の内側にある。奇数／偶数フィル規則の場合、点のフィル値が奇数である場合、符号に関わらず、点は形状の内側にある（例えば、−７は奇数であり、０は偶数である）。２つのフィル規則は、内側及び外側領域の異なる定義を提供し得る。図４で示される例では、非ゼロ・フィル規則の場合、１及び２のフィル値を有する領域は形状の内側にあり、全ての他の領域は形状の外側にある。奇数／偶数フィル規則の場合、１のフィル値を有する領域は形状の内側にあり、全ての他の領域は形状の外側にある。
【００３５】
ユニット１２６、１２８、１３０は、画像内の画素についてカバレージ値を決定してもよい。深度テスト・エンジン１３０は、バック・フェイス・カリング（back face culling）をディセーブルにする、色をディセーブルにする、描画サーフェイスを設定する、などによって、３Ｄ処理の代わりに２Ｄ処理へ構成されてもよい。エンジン１３０は、ステンシル・テストを行い、深度テストをディセーブルにするように構成されてもよい。ステンシル・バッファ１４４は、描画サーフェイスでクリアされてもよい。
【００３６】
プリミティブ・プロセッサ１２６は、所定の規則に基づいて三角扇形を１つ又は複数の三角形へ分解してもよい。例えば、図４の三角扇形は３つの三角形へ分解されてもよい。即ち、第１の三角形は頂点Ｖ０、Ｖ１、Ｖ２を有し、第２の三角形はＶ０、Ｖ２、Ｖ３を有し、第３の三角形はＶ０、Ｖ３、Ｖ４を有する。各三角形は頂点Ｖ０、先行する三角形（もしあれば）の最後の頂点、及び新しい頂点を含む。プリミティブ・プロセッサ１２６は、各三角形をラスタライズするためスキャン・コンバータ１２８によって使用されるパラメータも生成してもよい。スキャン・コンバータ１２８は、各三角形内の画素を決定してもよい。
【００３７】
深度テスト・エンジン１３０は、スキャン・コンバータ１２８から受け取られた画素についてステンシル値を更新してもよい。エンジン１３０は、時計回り方位を有する三角形内の画素についてステンシル値を増分し、反時計回り方位を有する三角形内の画素についてステンシル値を減分してもよい。又は、この逆であってもよい。図４で示される例では、エンジン１３０は、頂点Ｖ０、Ｖ１、Ｖ２を有する時計回り方位の第１の三角形内の画素についてステンシル値を増分してもよい。エンジン１３０は、頂点Ｖ０、Ｖ２、Ｖ３を有する反時計回り方位の第２の三角形内の画素についてステンシル値を減分してもよい。エンジン１３０は、頂点Ｖ０、Ｖ３、Ｖ４を有する時計回り方位の第３の三角形内の画素についてステンシル値を増分してもよい。図４は、三角扇形の全ての三角形が処理された後の異なる領域内の画素についてステンシル値を与える。
【００３８】
各画素のステンシル値は、非ゼロ又は奇数／偶数フィル規則に基づいてカバレージ値へ変換されてもよい。非ゼロ規則の場合、画素のステンシル値が非ゼロであれば、画素は形状の内側にあり、そうでなければ形状の外側にある。奇数／偶数規則の場合、画素のステンシル値が奇数であれば、画素は形状の内側にあり、そうでなければ形状の外側にある。
【００３９】
画素は、ノーマルサンプリング（normal sampling）又はスーパーサンプリング（super sampling）アンチエイリアシングを用いて表現されてもよい。ノーマルサンプリングとは、各画素のために１つのサンプルを使用することである。各画素のステンシル値及びカバレージ値は、上記で説明されたように決定されてもよい。スーパーサンプリング・アンチエイリアシング（又は簡単に、アンチエイリアシング）とは、各画素のために複数のサンプルを使用することであり、画像品質を改善する技術である。例えば、各画素は次のようなサンプルで表現されてもよい。
【００４０】
・ｘ及びｙ方向の双方で２のスケール因子について２×２サンプル
・ｘ方向で４及びｙ方向で２のスケール因子について４×２サンプル
・ｘ及びｙ方向の双方で４のスケール因子について４×４サンプル
他のスケール因子も、ｘ及びｙ方向で使用されてもよい。異なるサンプリング・パターンも同様に使用されてもよい。例えば、サンプルが疎に存在し、異なる方向に回転されたパターンが使用されてもよい。アンチエイリアシングを用いると、各サンプルは部分画素（sub-pixel）を表現する。
【００４１】
アンチエイリアシングを用いると、ステンシル値は、画素の代わりにサンプル（又は部分画素）について決定されてもよい。スキャン・コンバータ１２８は、各三角形内のサンプルを決定してもよく、各サンプルのステンシル値は、上記で説明されたように更新されてもよい。全ての三角形が処理された後、各サンプルのステンシル値に基づいて「１」又は「０」のカバレージ値が各サンプルについて決定されてもよい。次いで、（ａ）各画素の全てのサンプルについてカバレージ値を合計し、（ｂ）この合計値を正規化することによって、カバレージ値が各画素について決定されてもよい。例えば、画素の８ビット・カバレージ値は、０〜２５５の範囲にあってもよい。ここで、０は画素が完全に形状の外側あることを示し、２５５は画素が完全に形状の内側にあることを示す。画素の８ビット・カバレージ値は、（（Ｓｕｍ／ＮｕｍＳａｍｐｌｅｓ）＊２５５＋０.５）の底（floor）に等しく設定されてもよい。ここで、Ｓｕｍは、この画素の全サンプルのカバレージ値の合計であり、ＮｕｍＳａｍｐｌｅｓは、画素のサンプルの数である。ＮｕｍＳａｍｐｌｅｓは、２×２スーパーサンプリングについて４に等しく、４×２スーパーサンプリングについて８に等しく、４×４スーパーサンプリングについて１６に等しく、以下同様である。
【００４２】
ノーマルサンプリング及びアンチエイリアシングの双方について、画素のカバレージ値は、図３のｚバッファ１４２内に記憶されてもよく、画素の明度を決定するために使用されてもよい。アンチエイリアシングは、他のやり方で行われてもよい。例えば、「１」及「０」のカバレージ値は部分画素について記憶されてもよく、明度は部分画素について決定されてもよく、部分画素のカバレージ値に基づいて部分画素の明度が組み合わせられ、画素の最終的明度が決定されてもよい。
【００４３】
段５では、深度テスト・エンジン１３０がクリッピング及びマスキングを行って、パス及び最終画像を、描画サーフェイスの境界及び／又は１つ又は複数のシザリング領域の内部へクリップしてもよい。各シザリング領域は、保持すべき描画サーフェイスの特定のセクションを記述する。エンジン１３０は、描画サーフェイス上の各画素がシザリング領域のいずれか１つの中に入るかどうかを決定することによって、シザリングを行ってもよい。各画素はシザ値を関連づけられてもよい。シザ値は、この画素がいずれかのシザリング領域内にあるかどうかを示してもよい。
【００４４】
ステンシル・バッファ１４４は、画素のシザ値を記憶するために使用されてもよく、シザリングを行う前にクリアされてもよい（例えば、オール・ゼロへ）。次いで、一度に１つのシザリング領域についてシザリングが行われてもよい。各シザリング領域について、スキャン・コンバータ１２８はシザリング領域内の画素を決定してもよい。エンジン１３０は、スキャン・コンバータ１２８からの各画素についてシザ値を更新してもよい。例えば、シザリング領域が追加されている場合、エンジン１３０は各画素のシザ値を１だけ増分し、シザリング領域が除去されている場合、シザ値を１だけ減分してもよい。全てのシザリング領域が描画された後、シザリング・マスクが取得される。画素がシザリング領域内にない場合、画素のシザ値はゼロであり、画素が少なくとも１つのシザリング領域内にある場合、非ゼロである。パスの描画前又は後で、シザリングが行われてもよい。
【００４５】
画素をレンダリングするかどうかを決定するために、ステンシル・バッファ１４４内のシザ値及びｚバッファ１４２内のカバレージ値が使用されてもよい。パスのために境界ボックスが描画され、ボックス内の画素を決定するためにラスタライズされてもよい。ボックス内の各画素は、（ａ）画素のカバレージ値がゼロであるか画素のシザ値がゼロである場合、廃棄又はドロップされてもよく、（ｂ）そうでなければ、次の段へ通過させてもよい。通過した画素のカバレージ値も、次の段へ提供され、これらの画素の明度を決定するために使用されてもよい。
【００４６】
カバレージ値及びマスク・バッファからのマスク値に基づいて、マスキングも行われてもよい。画素のカバレージ値は、この画素のマスク値を乗算されてもよい。結果の値がゼロである場合、画素はドロップされてもよく、そうでなければ通過してもよい。マスキングは、深度テスト・エンジン１３０の代わりに、フラグメント・シェーダ１３２又は他のユニットによっても行われてもよい。
【００４７】
段６では、フラグメント・シェーダ１３２が、ペイント又は入力画像に基づいて、最終画像内の各画素のために明度及びアルファ値を決定してもよい。フラグメント・シェーダ１３２は、１つのタイプのペイントでパスの内部をフィルし、及び／又は同一又は異なるタイプのペイントでパスの輪郭をストロークしてもよい。ペイントは、描画されている各画素の明度及びアルファ値を定義する。３つのタイプのペイントが存在する。即ち、色ペイント、勾配ペイント、及びパターン・ペイントである。色ペイントは、全画素のために一定の色を定義する。勾配ペイントは、滑らかに変化する色の線形又は放射パターンを画定する。パターン・ペイントは、出所画像に基づいて、可能性として反復する色の長方形パターンを画定する。ペイントはペイント座標系で定義され、ユーザ座標系へ変換されてもよい。変換の後、所与の（ｘ,ｙ）画素に最も近いペイント値が、この画素について使用されてもよく、又は中心画素を取り巻く複数の画素からのペイント値が、組み合わせられて補間ペイント値を生成してもよい。フラグメント・シェーダ１３２は、テクスチャを３Ｄ画像へ適用する場合と同じやり方で、ペイントを用いてパスをフィル及び／又はストロークしてもよい。フラグメント・シェーダ１３２は、カーネルを用いてパターン・ペイントをフィルタしてもよい。ペイント及び色情報はＧＰＵドライバ１１２によって定義されてもよく、適当な処理ユニットへ送られてもよい。
【００４８】
色情報は、幾つかの色フォーマットで記憶又は処理されてもよい。人間の目は高輝度よりも低輝度／強度へ敏感である。明度は、通常ガンマ圧縮と呼ばれるプロセスを経由して圧縮されてもよく、非線形の明度が取得されてもよい。ガンマ圧縮は、明度をマップして、より微細な解像度が低輝度について達成され、より粗大な解像度が高輝度について達成されるようにする。ガンマ圧縮は、例えば
【数１】
2010519618.tif 000003
【００４９】
として行われてもよい。ここでｃｌｉｎは線形明度であり、ｃｎｌは非線形明度であり、γは圧縮量を決定するガンマ値である。ガンマ拡張は、非線形明度を拡張して線形明度を取得する相補プロセスである。ガンマ拡張は、ガンマ圧縮に使用される関数の逆の関数に基づく。
【００５０】
フラグメント・シェーダ１３２は、段６及び７のために色変換を行ってもよい。画素の明度は、次のフォーマットのいずれか１つで表現されてもよい。
【００５１】
・  ｓＲＧＢＡ  −  非事前乗算非線形色フォーマット
・  ｓＲＧＢＡ＿ＰＲＥ  −  事前乗算非線形色フォーマット
・  ＩＲＧＢＡ  −  非事前乗算線形色フォーマット
・  ＩＲＧＢＡ＿ＰＲＥ  −  事前乗算線形色フォーマット
ここで、Ｒ、Ｇ、Ｂ、Ａは、それぞれ赤、緑、青、アルファを表す。
【００５２】
ペイント及び画像は、非線形明度としてメモリ内に記憶されてもよく、線形明度として処理されてもよい。必要に応じて、非線形明度を線形明度へ変換し、及びこの逆へ変換するため、色フォーマット変換が行われてもよい。明度ｃはアルファ値αと乗算され、事前に乗算された明度ｃ’＝α＊ｃを求めてもよい。或る演算（例えば、ブレンディング）は、事前に乗算された明度の上で、より便利に行われてもよい。
【００５３】
様々な色フォーマット間の変換は、逆（ＲＣＰ）ルックアップ・テーブル（ＬＵＴ）、ガンマＬＵＴ、及びデガンマ（degamma）ＬＵＴを用いて達成されてもよい。ＲＣＰ  ＬＵＴは入力値を受け取って入力値の逆を提供する。ガンマＬＵＴはガンマ圧縮関数を記憶し、線形明度を受け取って非線形明度を提供する。デガンマＬＵＴは相補ガンマ拡張関数を記憶し、非線形明度を受け取って線形明度を提供する。
【００５４】
事前に乗算された（事前乗算）フォーマットから、事前に乗算されていない（非事前乗算）フォーマットへの変換は、次のように達成されてもよい。
【数２】
2010519618.tif 000004
【００５５】
ここで、ＲＧＢは、赤、緑、青の明度の各々についての演算を表す。
【００５６】
線形及び非線形色フォーマット間の変換は、次のように達成されてもよい。
【数３】
2010519618.tif 000005
【００５７】
一般的フォーマット変換は、１つの色空間を他の色空間へ変換するために使用されてもよい。ここで、変換は任意の関数に基づいてもよい。
【００５８】
段７では、フラグメント・シェーダ１３２が入力画像の上でコンボリューション・フィルタリングを行ってもよい。コンボリューション・フィルタリングは、エッジ鮮明化、ぼけ、ノイズ低減、スケーリング、回転、テクスチャ・マッピングなどの効果を取得するために使用されてもよい。
【００５９】
図５は、画像５００内の３×３格子５１０のコンボリューション・フィルタリングの一例を示す。格子５１０内の９つの画素値ｐｘ−１，ｙ−１からｐｘ＋１，ｙ＋１は、３×３カーネル５２０内の９つの係数ｋ０，０からｋ２，２を用いてフィルタリングされ、位置（ｘ，ｙ）で新しい画素値を生成する。
【００６０】
コンボリューション・フィルタリングは、次のように表現されてもよい。
【数４】
2010519618.tif 000006
【００６１】
ここで、Ｗは格子／カーネルの幅、Ｈは格子の高さであり、
ｋｉ，ｊは格子内の位置（ｉ，ｊ）におけるカーネル係数であり、
Ｓはスケーリング因子、ｂはバイアス値であり、
ｐｘ，ｙは画像内の位置（ｘ，ｙ）における元の画素値であり、
ｐ’ｘ，ｙは位置（ｘ，ｙ）における元の画素値と置き換わる新しい画素値であり、
ｓｈｉｆｔＸは位置（ｘ，ｙ）から格子の左へのオフセットであり、
ｓｈｉｆｔＹは位置（ｘ，ｙ）から格子の底へのオフセットである。
【００６２】
Ｓは、
【数５】
2010519618.tif 000007
【００６３】
の正規化因子又は他の値であってもよい。
【００６４】
カーネル係数がｘ及びｙ方向で分離可能である場合、コンボリューション・フィルタリングは次のように表現されてもよい。
【数６】
2010519618.tif 000008
【００６５】
ここで、ｋｉは格子内の水平位置ｉにおけるカーネル係数であり、
ｋｊは格子内の垂直位置ｊにおけるカーネル係数である。
【００６６】
位置（ｉ，ｊ）におけるカーネル係数は、ｋｉ，ｊ＝ｋｉ・ｋｊのように引き出されてもよい。
【００６７】
図５で示される例では、Ｗ＝３、Ｈ＝３、ｓｈｉｆｔＸ＝１、及びｓｈｉｆｔＹ＝１である。一般的に、ｓｈｉｆｔＸは幅の約半分であり、ｓｈｉｆｔＹは高さの約半分である。異なるタイプのコンボリューション・フィルタリング及び異なるカーネルは、フィルタリングされた画像内で異なる効果をもたらすかも知れない。
【００６８】
任意のＨ×Ｗ画素格子のコンボリューション・フィルタリングは、格子を、より小さいセクションへ区分し、各セクションについて計算を行い、全セクションの中間結果を組み合わせて最終結果を取得することによって達成されてもよい。セクションのサイズは、計算に使用される算術論理ユニット（ＡＬＵ）の処理能力に基づいて選択されてもよい。一般的に、任意のセクション・サイズが使用されてもよい。一設計において、セクション・サイズは２×２以下である。この設計では、３×３画素格子が、１つの２×２セクション、１つの１×２セクション、１つの２×１セクション、１つの１×１セクションへ分解されてもよい。
【００６９】
２×２セクションのコンボリューション計算は、次のように表現されてもよい。
【数７】
2010519618.tif 000009
【００７０】
ここで、（ｘｉ，ｙｊ）は２×２セクション内のより低い左下方画素の位置を表し、
ｒｉ，ｊは２×２セクションの中間結果である。
【００７１】
方程式（３）の計算は、４つのユニットを有するＡＬＵ、例えば、４×１ベクトルの内積を計算できるクワッドＡＬＵ又は４対のスカラーを乗算及び累積できる４スカラーＡＬＵによって効率的に行われてもよい。１×１、１×２、又は２×１セクションのコンボリューション計算は、方程式（３）で示される係数のサブセット及び画素のサブセットを含む。
【００７２】
画素の座標系は、カーネル係数の座標系と一致しても一致しなくてもよい。更に、所与の画素のｘ及びｙ値は、整数又は非整数値であってもよい。例えば、コンボリューション・フィルタリングは、画像の（ｘ，ｙ）座標系と一致しない（ｕ，ｖ）座標系で与えられたテクスチャ画素（テクセル）上で行われてもよい。画素座標が実数値である場合、画素へ適用すべき係数は、幾つかのやり方で決定されてもよい。スナップ・ツー・ニアレスト（snap-to-nearest）モードの場合、画素座標は最も近い整数値へ丸められ、丸められた座標のカーネル係数が画素へ適用される。補間モードの場合、画素へ最も近い４つのカーネル係数が使用され、補間された係数を生成し、この係数が画素へ適用される。
【００７３】
コンボリューション・フィルタリングの２つのモード、即ち、モード０及びモード１がサポートされてもよい。モード０の場合、コンボリューション計算は、スナップ・ツー・ニアレスト係数を使用して、最大４つの画素のセクション上で行われてもよい。４つの画素座標は、最も近い整数値へ丸められてもよい。丸められた座標の最大４つの画素値が、メモリから検索され、最大４つのカーネル係数を用いて適用され、新しい画素値を取得してもよい。モード１の場合、画素座標へ最も近い４つのカーネル係数から生成された補間係数を使用して、コンボリューション計算が各画素上で行われてもよい。
【００７４】
図６は、フィルタリング・ユニット６００の設計のブロック図を示す。フィルタリング・ユニット６００は、フラグメント・シェーダ１３２の一部分であってもよい。バッファ／メモリ６１０は、上記で与えられた色フォーマットの１つで明度及びアルファ値を提供する。ユニット６１２は、受け取られた明度及びアルファ値に対して使用される単純フォーマッティング変換を行う。ユニット６１４は、複雑フォーマッティングの非圧縮を行う。フィルタリングＡＬＵ６２０は、画素の明度をカーネル係数と乗算し（例えば、２×２以下のセクションについて）、中間結果を提供する。アキュムレータ６２２は各格子の中間結果を累積し、格子によってカバーされる画素の最終結果を提供する。
【００７５】
フラグメント・シェーダ１３２は、入力画像と背景色との間の補間を行い、各画素の明度及びアルファ値を決定してもよい。フラグメント・シェーダ１３２は補間結果を画素ブレンダ１３４へ提供し、画素ブレンダ１３４は他の明度及びアルファ値とブレンディングしてもよい。
【００７６】
段８では、ＯｐｅｎＶＧによってサポートされる多数のブレンディング・モードの１つに従って、画素ブレンダ１３４がブレンディングを行ってもよい。ブレンディング・モードは、次の方程式を関連づけられる。
【００７７】
１．α（αｓｒｃ，αｄｓｔ）として表されるアルファ・ブレンディング方程式
２．ｃ（ｃｓｒｃ，ｃｄｓｔ，αｓｒｃ，αｄｓｔ）として表される色ブレンディング方程式
ここで、αｓｒｃは出所のアルファ値、αｄｓｔは行先のアルファ値、ｃｓｒｃは出所の明度、ｃｄｓｔは行先の明度である。明度ｃは、赤（Ｒ）、緑（Ｇ）、又は青（Ｂ）であってもよい。
【００７８】
ブレンディングは、（Ｒｓｒｃ，Ｇｓｒｃ，Ｂｓｒｃ，αｓｒｃ）として表される出所の明度及びアルファ・タプルを、（Ｒｄｓｔ，Ｇｄｓｔ，Ｂｄｓｔ，αｄｓｔ）で表される行先の明度及びアルファ・タプルと組み合わせて、ｃ（Ｒｓｒｃ，Ｒｄｓｔ，αｓｒｃ，αｄｓｔ）、ｃ（Ｇｓｒｃ，Ｇｄｓｔ，αｓｒｃ，αｄｓｔ）、ｃ（Ｂｓｒｃ，Ｂｄｓｔ，αｓｒｃ，αｄｓｔ）、α（αｓｒｃ，αｄｓｔ）で構成されるブレンディングされたタプルを提供する。組み合わせは、アルファ及び色ブレンディング方程式に従って行われる。具体的には、各々の色成分の出所及び行先明度が、色ブレンディング方程式に従って組み合わせられ、出所及び行先アルファ値が、アルファ・ブレンディング方程式に従って組み合わせられる。異なる方程式及び／又は異なるアルファ値を用いて、異なる結果が取得されてもよい。ブレンディングされたタプルは、典型的には、行先タプルと置き換わる。
【００７９】
ＯｐｅｎＶＧは５つのポーター・ダフ（Porter-Duff）ブレンディング・モードをサポートする。ポーター・ダフ・ブレンディング・モードは、次のアルファ及び色ブレンディング方程式を使用する。
【数８】
2010519618.tif 000010
【００８０】
ここで、Ｆｓｒｃ及びＦｄｓｔは、それぞれ出所及び行先のブレンディング因子である。５つのポーター・ダフ・ブレンディング・モードのＦｓｒｃ及びＦｄｓｔが、ＯｐｅｎＶＧで与えられている。
【００８１】
事前乗算明度の色ブレンディング方程式は、次のように与えられてもよい。
【数９】
2010519618.tif 000011
【００８２】
方程式（６）は方程式（４）に相当する。方程式（６）は、事前乗算明度ｃ’ｓｒｃ及びｃ’ｄｓｔについて使用されてもよく、方程式（４）は、非事前乗算明度ｃｓｒｃ及びｃｄｓｔについて使用されてもよい。
【００８３】
ＯｐｅｎＶＧは、４つの追加ブレンディング・モードをサポートする。表１は、４つの追加ブレンディング・モードを列挙し、各モードの色ブレンディング方程式を与える。各々の追加ブレンディング・モードは明度を組み合わせて、ｃ’（ｃｓｒｃ，ｃｄｓｔ，αｓｒｃ，αｄｓｔ）として表されるブレンディングされた事前乗算明度を提供する。
【表１】
2010519618.tif 000012
【００８４】
ＯｐｅｎＶＧは、出所及び行先がオーバラップしないときに使用される加法的ブレンディング・モードを更にサポートする。加法的ブレンディング・モードのアルファ及び色ブレンディング方程式は、次のように与えられる。
【数１０】
2010519618.tif 000013
【００８５】
他のブレンディング・モードも、２Ｄグラフィックスについてサポートされてもよい。一般的に、ＧＰＵ１２０は、２Ｄグラフィックスについて、ブレンディング・モードの任意のセットをブレンディング方程式の任意のセットでサポートしてもよい。ＧＰＵ１２０は、ステンシル補間もサポートしてもよい。ステンシル補間は、方程式の次のセットを使用する。
【数１１】
2010519618.tif 000014
【００８６】
ここで、αｉｍａｇｅは第１の出所アルファ値であり、αｐａｉｎｔは第２の出所アルファ値であり、方程式（９）についてαｓｒｃ＝αｉｍａｇｅ＊αｐａｉｎｔであり、方程式（１０）についてαｓｒｃ＝αｉｍａｇｅ＊αｐａｉｎｔ＊ｃｉｍａｇｅである。
【００８７】
アルファ・ブレンディング方程式（９）及び色ブレンディング方程式（１０）は、ブレンディング・モードに依存してもよい。例えば、「ＳｒｃオーバーＤｓｔ」ポーター・ダフ・ブレンディング・モードが選択される場合、ステンシル補間は次のように表現されてもよい。
【数１２】
2010519618.tif 000015
【００８８】
様々なブレンディング・モード（例えば、ＯｐｅｎＶＧのブレンディング・モード及び／又は他のブレンディング・モード）のブレンディング方程式は、演算の基本セットを用いて効率的に実現されてもよい。各々のブレンディング方程式は一連の演算へ分解され、各演算は基本セットから取られてもよい。異なるブレンディング方程式は、異なる演算シーケンスを用いて実現されてもよい。演算の基本セットは、ハードウェア実現を単純化し、柔軟性を提供して様々なブレンディング方程式並びに他のグラフィックス機能及び特質をサポートしてもよい。
【００８９】
図７は、ブレンディングのためのブレンディング命令７００の設計を示す。ブレンディング演算（Ｏｐ）フィールド７１４は、基本セット内のどの演算を行うべきかを示す。出所（Ｓｒｃ）フィールド７２０は、出所値がどこに記憶されているかを示す。行先（Ｄｓｔ）フィールド７１８は、行先値がどこに記憶されるかを示す。Ｓｒｃｆ
フィールド７２４は、演算の出所ブレンディング因子を示す。Ｄｓｔｆフィールド７２２は、演算の行先ブレンディング因子を示す。結果（Ｒｅｓ）フィールド７１６は、演算の結果をどこに記憶するかを示す。クランプ（clamp）イネーブル・フィールド７１２は、所定の値域、例えば、０と１の間へ結果を制約すべきかどうかを示す。異なるフィールドを有する他の命令フォーマットも使用されてもよい。
【００９０】
表２は、演算の基本セットの例及び各演算のＯｐコードを示す。Ｏｐコード０〜７を有する演算は、それぞれ演算０〜７と呼ばれる。
【表２】
2010519618.tif 000016
【００９１】
演算０及び１の場合、出所及び行先値はそれぞれ出所及び行先ブレンディング因子によってスケールされ、スケールされた値は組み合わせられる。演算２は出所及び行先値の小さい方を提供し、演算３は２つの値の大きい方を提供する。演算４は出所及び行先値をそれぞれ出所及び行先ブレンディング因子でスケールし、２つのスケールされた値を記憶する。演算５は出所値の上で逆演算を行って結果値を提供する。演算６及び７はそれぞれガンマ拡張及びガンマ圧縮に使用される。表２は演算の基本セットについて特定の設計を示す。演算の他のセットも、ブレンディングに使用されてもよい。
【００９２】
出所明度は、フラグメント・シェーダ１３２から受け取られ、出所レジスタに記憶されてもよい。行先明度は、メモリ（例えば、色バッファ１４８）から検索され、行先レジスタに記憶されてもよい。出所及び行先明度は組み合わせられてもよく、ブレンディングされた明度は、行先レジスタに記憶されてもよい。異なる演算を柔軟にサポートするために、複数の出所レジスタが使用され、出所明度及びアルファ値並びに中間値を記憶してもよい。複数の行先レジスタも使用され、行先明度及びアルファ値並びに中間値を記憶してもよい。
【００９３】
Ｓｒｃフィールド７２０及びＤｓｔフィールド７１８の各々は、使用可能なレジスタのセット内の任意のレジスタを示してもよい。このセットは、出所レジスタ、第２の出所レジスタ、行先レジスタ、一時行先レジスタなどを含んでもよい。Ｒｅｓフィールド７１６は、複数の出力選択肢の任意の１つ、例えば、出所レジスタ、第２の出所レジスタ、行先レジスタ、一時行先レジスタ、出所及び行先レジスタの双方、最終出力などを示してもよい。
【００９４】
Ｓｒｃｆ及びＤｓｔｆブレンディング因子は、表２の演算０、１、４について、Ｓｒｃ及びＤｓｔ値をそれぞれスケールするために使用される。Ｓｒｃｆ及びＤｓｔｆブレンディング因子の各々は、全ブレンディング・モードをサポートできるブレンディング因子のセットから選択されてもよい。このセットは、（ａ）ゼロ、（ｂ）出所レジスタ、第２の出所レジスタ、行先レジスタ、定数レジスタなどの中のアルファ値及び明度、（ｃ）１からこれらのアルファ値及び明度を差し引いた値、（ｄ）これらのアルファ値及び明度で１を割り算した値、（ｅ）出所アルファと、１から出所アルファを差し引いたものとの小さい方、及び／又は（ｆ）他の値を含んでもよい。
【００９５】
各々のブレンディング・モードは、ブレンディング命令のセットを用いて実現されてもよい。例えば、方程式（４）から（６）で示される５つのポーター・ダフ・ブレンディング・モードの各々は、２つの命令を用いて実現されてもよい。第１の命令は、出所及び行先明度を、それぞれ出所及び行先アルファ値で乗算してもよい。第２の命令は、事前乗算出所及び行先明度を、それぞれＦｓｒｃ及びＦｄｓｔブレンディング因子で乗算し、方程式（６）で示されるように、２つのスケールされた値を組み合わせてもよい。２つの命令は次のように与えられてもよい。
【数１３】
2010519618.tif 000017
【００９６】
ここで、出所ブレンディング因子Ｓｒｃｆ及び行先ブレンディング因子Ｄｓｔｆは、実現されているポーター・ダフ・ブレンディング・モードに依存する。
【００９７】
画素ブレンダ１３４も、異なる色フォーマット間で色変換を行ってもよい。色変換は、メモリから読み出される明度及び／又はメモリへ書き込まれる明度について行われてもよい。
【００９８】
様々なブレンディング・モードが、次のようにサポートされてもよい。
【数１４】
2010519618.tif 000018
【００９９】
上記の疑似コードは、色成分が事前乗算非線形明度として記憶されることを仮定する。命令１０、２０、３０は、行先明度を事前フォーマッティングするための命令である。命令１０及び２０は、行先明度から行先アルファ（a.dst）を分離する。命令３０は非線形色を線形色へ変換する。命令４０から４ｎは、選択されたブレンディング・モードに依存する演算のための命令であり、出所及び行先明度をそれぞれ出所アルファ（a.src）及び行先アルファで乗算することを含んでもよい。命令５０から８０は、結果の明度を事後フォーマッティングするための命令である。命令５０及び６０は、結果のアルファ（a.res）を分離して、非事前乗算明度を取得する。命令７０は線形色を非線形色へ変換する。命令８０は、非線形明度を結果のアルファで乗算し、最終結果をメモリへ戻す。明度が非事前乗算フォーマットで記憶される場合、命令１０、２０、８０は省略されてもよい。色成分が非線形明度の代わりに線形明度として記憶される場合、命令３０及び７０は省略されてもよい。
【０１００】
図８は、ブレンディング・ユニット８００の設計のブロック図を示す。ブレンディング・ユニット８００は、図３の画素ブレンダ１３４の一部分であってもよい。出所レジスタ８１２及び８１４は、フラグメント・シェーダ１３２からの出所明度及びアルファ値及び／又はブレンディング実行ユニット８１０からの中間結果を記憶する。事前フォーマッティング・ユニット８２０は、行先明度及びアルファ値を受け取り（例えば、図３の色バッファ１４８から）、事前フォーマッティングを行う。ユニット８２０は、事前乗算明度についてアルファを分離し、非線形色から線形色への変換及びその他を行ってもよい。行先レジスタ８２２及び８２４は、事前フォーマッティング・ユニット８２０からの事前フォーマッティングされた行先明度及びアルファ値及び／又はブレンディング実行ユニット８１０からの中間結果を記憶する。
【０１０１】
ブレンディング実行ユニット８１０は、ブレンディング命令を受け取り（例えば、図３のコマンド・エンジン１２２から）、受け取られた命令をデコードする。ユニット８１０は、更に、デコードされた命令に従って、出所及び行先値及びブレンディング因子を読み出し、これらの値及び因子を、処理のために計算ユニット８４０へ送る。ユニット８１０は、ユニット８４０から結果を受け取り、これらの結果を適当なレジスタに記憶する。事後フォーマッティング・ユニット８３０は、結果の上で事後フォーマッティングを行い、事前乗算明度についてアルファを分離し、線形色から非線形色への変換を行い、結果の明度が事前乗算フォーマットで記憶されるべきである場合アルファで乗算し、及びその他を行ってもよい。
【０１０２】
ユニット８４０は、可逆（ＲＣＰ）ユニット８４２、ガンマＬＵＴ８４４、デガンマＬＵＴ８４６、及びブレンディングＡＬＵ８４８を含む。ブレンダＡＬＵ８４８は、ユニット８１０、８２０、８３０から受け取られたオペランドの上で演算し、結果をこれらのユニットへ戻してもよい。ユニット８４２は、入力オペランドを受け取り、オペランドの逆数（reciprocal）を提供する。ガンマＬＵＴ８４４は、線形明度を受け取り、非線形明度を提供する。デガンマＬＵＴ８４６は、非線形明度を受け取り、線形明度を提供する。ユニット８４０はブレンディング・ユニット８００の一部分であってもよく、画素ブレンダ１３４のためだけに使用されてもよい。あるいは、ユニット８４０は画素ブレンダ１３４の外部にあってもよく、色変換のために画素ブレンダ１３４及びフラグメント・シェーダ１３２によって共有されてもよい。
【０１０３】
制御レジスタ８５０は、処理されているデータの色フォーマットを示す制御ビットを記憶する。例えば、制御ビットは、明度が、（ａ）事前乗算又は非事前乗算フォーマットで記憶されるかどうか、（ｂ）非線形又は線形フォーマットで記憶されるかどうかを示してもよい。ユニット８２０は、制御ビットに従って、到着する行先明度の上で事前フォーマッティングを行ってもよい。同様に、ユニット８３０は、制御ビットに従って、出発する明度の上で事後フォーマッティングを行ってもよい。制御レジスタ８５０は、ＧＰＵドライバ１１２又は他のユニットによって設定されてもよい。
【０１０４】
図９は、基本２Ｄグラフィックスのために図１のデバイス１００を使用する設計９００を示す。この設計では、コマンド・エンジン１２２、スキャン・コンバータ１２８、及び画素ブレンダ１３４が２Ｄグラフィックス処理に主として使用され、全ての他のユニットは迂回されるか、まれにしか使用されない。
【０１０５】
基本２Ｄグラフィックスのプリミティブは、線、長方形、三角扇形を含んでもよい。他のプリミティブは、例えば、ＧＰＵドライバ１１２によって、長方形、三角形、又は線へモザイク配列化されてもよい。基本２Ｄグラフィックスの属性は、各画素について、１つの明度、及びビットブロック転送（ｂｉｔｂｌｔ）、ストレッチｂｉｔｂｌｔ、又は点描パターンのために出所バッファの１対の座標を含んでもよい。
【０１０６】
点描線の場合、ＧＰＵドライバ１１２は、線点描パターンを１Ｄテクスチャとして処置し、線の２つの端点についてパターンの座標を計算してもよく、次いでコマンド・エンジン１２２を経由してスキャン・コンバータ１２８へ座標情報を提供してもよい。スキャン・コンバータ１２８は、線上の画素ごとに座標を計算し、画素アドレスを生成してもよい。座標は、フラグメント・シェーダ１３２を使用することなく、制御レジスタ内で点描パターンを調べるために使用されてもよい。マスクは点描パターンから取得されてもよい。ラスタライズ方向は、オーバラップするｂｉｔｂｌｔについて変更されてもよい。フラグメント・シェーダ１３２の使用及び属性セットアップ及び補間を回避して電力を節減するため、ＧＰＵドライバ１１２は、例えば、最大４つの成分について、属性セットアップを行い、勾配を計算してもよい。スキャン・コンバータ１２８は４つの加算器を含んでもよく、最大４つの成分について補間を行ってもよい。ｂｉｔｂｌｔ及びストレッチｂｉｔｂｌｔの場合、ＧＰＵドライバ１１２は出所画像／バッファのために初期座標及び勾配を提供してもよい。したがって、スキャン・コンバータ１２８が、プリミティブ、例えば、線、三角形、又は長方形プリミティブの内部の画素ごとに座標を計算してもよい。座標は、色キャッシュを経由して出所画像／バッファ内の画素値を調べるために使用されてもよい。勾配フィルの場合、ＧＰＵドライバ１１２が初期の色及び勾配を提供してもよい（例えば、最大４つの成分）。スキャン・コンバータ１２８は、（画素座標を計算するために使用される）同じ加算器を使用して、長方形プリミティブの内部の画素ごとの明度を計算してもよい。
【０１０７】
画素情報及び色情報は、画素ブレンダ１３４へ直接提供されてもよい。マルチプレクサ９１２は、コマンド・エンジン１２２を経由する外部出所からの出所色（Ｓｒｃ）、スキャン・コンバータ１２８からの勾配フィルの出所色、又は色キャッシュ／バッファ９１０からの出所色を受け取ってもよい。マルチプレクサ９１２は、３つの入力の１つからの出所色を画素ブレンダ１３４へ提供してもよい。色キャッシュ９１０は、図３の画素ブレンダ１３４と色バッファ１４８との間に置かれてもよい。色キャッシュ９１０は、スキャン・コンバータ１２８から出所アドレス又はストレッチｂｉｔｂｌｔアドレスを受け取ってもよく、出所色をマルチプレクサ９１２へ提供してもよい。色キャッシュ９１０は、更に、スキャン・コンバータ１２８から行先読み出しアドレスを受け取り、行先色を画素ブレンダ１３４へ提供してもよい。画素ブレンダ１３４は、様々な２Ｄグラフィックス機能、例えば、ビットブロック転送、２Ｄアルファ・ブレンディング、フォント・レンダリング、ＲＯＰ３、出所及び行先色キー（color key）、パレット・テーブル（例えば、２５６×３２又は１６×１６×３２）などをサポートしてもよい。ＲＯＰ３は、３つのオペランド（例えば、出所色、行先色、パターン／ブラシ色）のラスタ演算である。他の２Ｄグラフィックス機能、例えば、コンボリューション・フィルタリングは、フラグメント・シェーダ１３２又は他のユニットによって行われてもよい。
【０１０８】
図１０は、２Ｄ及び３Ｄグラフィックスをサポートするプロセス１０００を示す。３Ｄグラフィックス処理は、３Ｄ画像をレンダリングする３Ｄグラフィックス・パイプラインに従って行われる（ブロック１０１２）。２Ｄグラフィックス処理は、２Ｄ画像をレンダリングする２Ｄグラフィックス・パイラインに従って行われる（ブロック１０１４）。２Ｄグラフィックス・パイプラインの複数の段の各段は、例えば、図３で示されるように、３Ｄグラフィックス・パイプラインの複数の段の少なくとも１つの段へマップされる。
【０１０９】
一般的に、２Ｄグラフィックス・パイプライン及び３Ｄグラフィックス・パイプラインの各々は、任意の数の段を含んでもよい。２Ｄグラフィックス・パイプラインの段は、様々なマッピング・スキームに基づいて、３Ｄグラフィックス・パイプラインの段へマップされてもよい。例えば、２Ｄグラフィックスのクリッピング、マスキング、及びシザリング段は、３Ｄグラフィックスの深度テスト段へマップされてもよい。２Ｄグラフィックスのパス内の画素のカバレージ値は、３Ｄグラフィックスのラスタライズ段、深度テスト段などを使用して決定されてもよい。２Ｄグラフィックスのペイント生成段及び画像補間段は、３Ｄグラフィックスのフラグメント・シェーダ段へマップされてもよい。２Ｄグラフィックスのブレンディング段は、３Ｄグラフィックスのブレンディング段へマップされてもよく、双方のブレンディング段は、複数のブレンディング・モードを用いてサポートされてもよい。各ブレンディング・モードは、それぞれの命令シーケンスを関連づけられてもよい。２Ｄグラフィックスの他の段は、例えば、上記で説明したように、３Ｄグラフィックスの他の段へマップされてもよい。
【０１１０】
本明細書で説明したＧＰＵは、無線通信デバイス、ハンドヘルド・デバイス、ゲーム用デバイス、コンピューティング・デバイス、コンピュータ、コンシューマ・エレクトロニクス・デバイスなどで使用されてもよい。無線通信デバイスでＧＰＵを使用する例は、下記で説明される。
【０１１１】
図１１は、無線通信システムにおける無線通信デバイス１１００の設計のブロック図を示す。無線デバイス１１００は、携帯電話機、端末、ハンドセット、電子手帳（ＰＤＡ）、又は他のデバイスであってもよい。無線通信システムは、符号分割多元接続（ＣＤＭＡ）システム、移動通信用全世界（ＧＳＭ）システム、又は他のシステムであってもよい。
【０１１２】
無線デバイス１１００は、受信経路及び送信経路を経由して双方向通信を提供することができる。受信経路では、基地局によって送信された信号はアンテナ１１１２によって受け取られ、受信機（ＲＣＶＲ）１１１４へ提供される。受信機１１１４は、受け取られた信号を調整及びディジタル化し、更なる処理のためにサンプルをディジタル・セクション１１２０へ提供する。送信経路では、送信機（ＴＭＴＲ）１１１６が、送信されるべきデータをディジタル・セクション１１２０から受け取り、データを処理及び調整し、変調された信号を生成する。変調された信号は、アンテナ１１１２を経由して基地局へ送信される。
【０１１３】
ディジタル・セクション１１２０は、様々な処理、インタフェース、及びメモリ・ユニット、例えば、モデム・プロセッサ１１２２、ビデオ・プロセッサ１１２４、コントローラ／プロセッサ１１２６、ディスプレイ・プロセッサ１１２８、縮小命令セット・コンピュータ／ディジタル信号プロセッサ（ＲＩＳＣ／ＤＳＰ）１１３２、ＧＰＵ  １１３４、内部メモリ１１３６、及び外部バス・インタフェース（ＥＢＩ）１１３８を含む。モデム・プロセッサ１１２２は、データ送信及び受信処理（例えば、符号化、変調、復調、及び復号）を行う。ビデオ・プロセッサ１１２４は、ビデオ・アプリケーション、例えば、ビデオカメラ、ビデオ再生、及びビデオ会議のビデオ・コンテンツ（例えば、静止画像、ビデオ動画、及び移動テキスト）の処理を行う。コントローラ／プロセッサ１１２６は、ディジタル・セクション１１２０内の様々な処理及びインタフェース・ユニットの演算を指令してもよい。ディスプレイ・プロセッサ１１２８は、ディスプレイ・ユニット１１３０上でビデオ、グラフィックス、及びテキストの表示を容易にする処理を行う。ＲＩＳＣ／ＤＳＰ１１３２は、無線デバイス１１００のために様々なタイプの処理を行ってもよい。例えば、図３のＧＰＵ１１２は、ＲＩＳＣ／ＤＳＰ１１３２内で実行されてもよい。ＧＰＵ１１３４はグラフィックス処理を行い、図３のＧＰＵ１２０、図２の２Ｄグラフィックス・パイプライン２００の全部又は一部、図６のフィルタリング・ユニット６００の全部又は一部、図８のブレンディング・ユニット８００の全部又は一部、図１０のプロセス１０００などを実現してもよい。内部メモリ１１３６は、ディジタル・セクション１１２０内の様々なユニットのためにデータ及び／又は命令を記憶する。ＥＢＩ１１３８は、ディジタル・セクション１１２０（例えば、内部メモリ１１３６）とメイン・メモリ１１４０との間のデータ転送を容易にする。メモリ１１３６及び／又はメモリ１１４０は、図３のバッファ１４０から１４８を実現してもよい。
【０１１４】
ディジタル・セクション１１２０は、１つ又は複数のＤＳＰ、マイクロプロセッサ、ＲＩＳＣなどを用いて実現されてもよい。ディジタル・セクション１１２０は、１つ又は複数の特定用途集積回路（ＡＳＩＣ）及び／又は他のタイプの集積回路（ＩＣ）の上でも組み立てられてもよい。
【０１１５】
本明細書で説明されたＧＰＵは、様々なハードウェア・ユニット内で実現されてもよい。例えば、ＧＰＵは、ＡＳＩＣ、ＤＳＰ、ディジタル信号処理デバイス（ＤＳＰＤ）、プログラム可能論理回路（ＰＬＤ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、電子デバイス、他の電子ユニット内で実現されてもよい。ＧＰＵは、統合／組み込みメモリを含むか、含まなくてもよい。
【０１１６】
本明細書で説明されたＧＰＵは、スタンドアロン型ユニットであるか、デバイスの一部分であってもよい。デバイスは、（ｉ）スタンドアロン型ＩＣ、例えば、グラフィックスＩＣ、（ｉｉ）データ及び／又は命令を記憶するためのメモリＩＣを含む１つ又は複数のＩＣのセット、（ｉｉｉ）統合されたグラフィックス処理機能を有するＡＳＩＣ、例えば、移動局モデム（ＭＳＭ）、（ｉｖ）他のデバイス内に組み込まれてもよいモジュール、（ｖ）携帯電話機、無線デバイス、ハンドセット、又は移動ユニット、（ｖｉ）その他であってもよい。
【０１１７】
以上のこの開示の説明は、当業者に開示を実行又は使用することができるように提供される。この開示への様々な修正は、当業者にとって容易に明らかであろう。本明細書で定義された一般的原理は、開示の趣旨及び範囲から逸脱することなく他の変形例へ適用されてもよい。したがって、この開示は本明細書で説明された例へ限定されることを意図されず、本明細書で開示された原理及び新規な特徴に一致する最も広い範囲を付与されるべきである。
【図１】
2010519618.tif 000019
【図２】
2010519618.tif 000020
【図３】
2010519618.tif 000021
【図４】
2010519618.tif 000022
【図５】
2010519618.tif 000023
【図６】
2010519618.tif 000024
【図７】
2010519618.tif 000025
【図８】
2010519618.tif 000026
【図９】
2010519618.tif 000027
【図１０】
2010519618.tif 000028
【図１１】
2010519618.tif 000029
【国際調査報告】
2010519618.tif 000030
2010519618.tif 000031
2010519618.tif 000032