(57)【要約】  グラフィックプロセッサにおいて、レンダリングオブジェクト及び後処理オブジェクトが、ホストプロセッサへのアクセスを、プログラム可能な実行コアを用いて共有する。ホストプロセッサのオペレーションと並列に、スキャンアウトエンジンが、以前に生成されたフレーム用のピクセルデータを読み取って、ディスプレイデバイスに供給する。スキャンアウトエンジンは、周期的にホストプロセッサをトリガし、後処理オブジェクトを動作させて、次のフレームを生成する。スキャンアウトエンジンと後処理オブジェクトとの間のタイミングは、表示すべき次のフレームが、スキャンアウトエンジンが現在のフレームを読み取り終えたときにフレームバッファ内に準備されているように制御することができる。【選択図】  図４
2008524720.tif 000002
【特許請求の範囲】
【請求項１】
複数のオブジェクトを実行するよう構成されたマルチプロセッサを備え、
前記複数のオブジェクトが、
画像データを生成するための第１のシーケンスのプログラム命令を実行するよう構成されたレンダリングオブジェクトと、
前記画像データからフレームのピクセルデータを生成するための第２のシーケンスのプログラム命令を実行するよう構成された後処理オブジェクトと、
を含み、
前記マルチプロセッサが、
前記複数のオブジェクトの実行を制御するよう構成された調停ユニットと、
フレームの生成されたピクセルデータをディスプレイポートに等時間間隔で伝送する構成され、且つ、トリガ信号を前記調停ユニットに周期的に伝送するよう結合されたスキャンアウトエンジンと、
を有し、
前記調停ユニットが、更に、前記トリガ信号に応答して後処理オブジェクトを動作させて新規フレームのピクセルデータを生成するよう構成されている、
グラフィックプロセッサ。
【請求項２】
前記マルチプロセッサが、
レンダリングオブジェクトを実行するよう構成された第１のプログラム可能な処理エンジンと、
後処理オブジェクトを実行するよう構成された第２のプログラム可能な処理エンジンと、
を有する請求項１記載のグラフィックプロセッサ。
【請求項３】
前記マルチプロセッサが、
コンテキスト切り替え可能な処理コアと、
前記複数の処理オブジェクトの各々に対応するそれぞれのコンテキストを維持するよう構成されたコンテキストマネージャと、
を有し、
前記調停ユニットが、更に、前記後処理オブジェクトに対応するコンテキストが前記トリガ信号に応答してアクティブ化されるよう、前記コンテキストマネージャによって維持されている前記コンテキストからの現在のコンテキストの選択を制御する、
請求項１記載のグラフィックプロセッサ。
【請求項４】
複数のコンテキスト間で切り替え可能であるように構成され、更に、前記複数のコンテキストのうち切り替えられた一つのコンテキストに関連するプログラム命令を実行するよう構成されたプログラム可能な実行コアと、
前記実行コアに結合され、且つ、前記複数のコンテキストのうち異なるコンテキスト間での前記実行コアの切り替えを制御するよう構成された調停ユニットと、
フレームの生成されたピクセルデータをディスプレイポートに等時間間隔で伝送するよう構成され、且つ、トリガ信号を前記調停ユニットに伝送するよう結合されたスキャンアウトエンジンと、
を備え、
前記複数のコンテキストが、
画像データを生成するめの第１のシーケンスのプログラム命令と関連を有しているレンダリングコンテキストと、
前記画像データからフレームのピクセルデータを生成するための第２のシーケンスのプログラム命令と関連を有する後処理コンテキストと、
を含み、
前記調停ユニットが、更に、トリガ信号に応答して、前記実行コアを前記後処理コンテキストに切り替えるよう構成されている、
グラフィックプロセッサ。
【請求項５】
前記スキャンアウトエンジンが、更に、前記トリガ信号を、フレーム毎に一度、伝送するよう構成されている、請求項４記載のグラフィックプロセッサ。
【請求項６】
前記スキャンアウトエンジンは、更に、前記トリガ信号がフレーム終端イベントと実質的に固定の時間関係を有するように構成されている、請求項５記載のグラフィックプロセッサ。
【請求項７】
前記調停ユニットは、更に、フレーム完了イベントが前記第２のストリームのプログラム命令によって検出されるまでの間、前記実行コアを維持し、次いで、前記実行コアを前記レンダリングコンテキストへ切り替えるよう構成されている、請求項４記載のグラフィックプロセッサ。
【請求項８】
前記フレーム完了イベントは、前記第２のストリープのプログラム命令における、無条件ジャンプ命令の発生に対応しており、該無条件命令は、前記第２のストリームのプログラム命令の開始点に向けられている、請求項７記載のグラフィックプロセッサ。
【請求項９】
前記第１のシーケンスのプログラム命令は、更に、複数の画像バッファのうちの一つを選択する命令と、前記画像データを選択した画像バッファに書き込む命令を含む、請求項４記載のグラフィックプロセッサ。
【請求項１０】
前記第２のシーケンスのプログラム命令が、更に、前記画像データを前記複数の画像バッファのうち一以上から読み取る命令を含む、請求項９記載のグラフィックプロセッサ。
【請求項１１】
前記第１のシーケンスのプログラム命令が、更に、前記選択された画像バッファ用のインデックス値をインデックス記憶位置に書き込むための命令を含み、前記インデックス値を書き込む該命令は、前記画像データを前記選択された画像バッファに書き込むための前記命令の実行後に実行され、
前記第２のシーケンスのプログラム命令は、更に、前記インデックス記憶位置から前記インデックス値を読み取るための命令を含む、
請求項１０記載のグラフィックプロセッサ。
【請求項１２】
前記第２のシーケンスのプログラム命令は、更に、前記インデックス記憶位置から読み取られた前記インデックス値が該インデックス記憶位置から以前に読み取られた古いインデックス値と異なるか否かを条件とする少なくとも一つの命令を含む、請求項１１記載のグラフィックプロセッサ。
【請求項１３】
条件付きの前記少なくとも一つの命令は、前記複数の画像バッファのうち一つを、前記レンダリングコンテキストによる後の使用のために解放する命令を含む、請求項１２記載のグラフィックプロセッサ。
【請求項１４】
前記第２のシーケンスのプログラム命令は、複数のフレームバッファのうち一つを選択するための命令と、選択されたフレームバッファにフレーム用のピクセルデータを書き込むための命令と、を含む、請求項４記載のグラフィックプロセッサ。
【請求項１５】
前記スキャンアウトエンジンは、更に、前記複数のフレームバッファのうち一つを特定するディスプレイインデックス値を第１の記憶位置から読み取り、且つ、フレーム用のピクセルデータを特定されたフレームバッファから読み取るように構成されており、
前記第２のシーケンスのプログラム命令は、更に、前記選択されたフレームバッファに対応する前記ディスプレイインデックス値を前記第１の記憶位置に、前記フレーム用の前記ピクセルデータの前記選択されたフレームバッファへの書き込みが完了した後に、書き込むための命令を含む、
請求項１４記載のグラフィックプロセッサ。
【請求項１６】
各々が画像用のフラグメントデータを格納するよう構成された複数の画像バッファと、
各々がフレーム用のピクセルデータを格納するよう構成された複数のフレームバッファと、
複数のコンテキストのうちの切り替えられた一つのコンテキストに関連する命令を実行するように該複数のコンテキスト間で切り替え可能であるよう構成されたプログラム可能な実行コア、及び
前記実行コアに結合され、且つ、前記複数のコンテキストのうち異なるコンテキスト間での前記実行コアの切り替えを制御するよう構成された調停ユニット、
を有するマルチプロセッサと、
フレームのピクセルデータを、前記フレームバッファからディスプレイポートへ等時間間隔で伝送するよう構成され、且つ、トリガ信号を、前記マルチプロセッサの前記調停ユニットへ周期的に伝送するよう結合されたスキャンアウトエンジンと、
を備え、
前記複数のコンテキストが、
複数の画像用のフラグメントデータを生成するための命令、及び、各画像用の前記フラグメントデータを前記画像バッファのうちの一つに書き込むための命令を含む第１のシーケンスのプログラム命令に関連を有するレンダリングコンテキストと、
前記画像バッファ内の前記フラグメントデータからフレームのピクセルデータを生成するための命令、及び、前記フレームバッファのうち一つに前記フレーム用の前記ピクセルデータを書き込むための命令を含む第２のシーケンスのプログラム命令に関連を有する後処理コンテキストと、
を含み、
前記調停ユニットが、更に、前記トリガ信号に応答して、前記実行コアを前記後処理コンテキストへ切り替えるよう構成されている、
グラフィック処理システム。
【請求項１７】
画像を生成するための方法であって、
プロセッサの共有実行コア内で、第１のシーケンスのプログラム命令に応答して画像用のフラグメントデータを生成するレンダリングオブジェクトを動作させるステップと、
前記レンダリングオブジェクトの動作と並列して、ディスプレイデバイスにフレームのピクセルデータを等時間間隔で供給するようスキャンアウトエンジンを動作させるステップであって、該スキャンアウトエンジンが周期的にトリガ信号を生成する、該ステップと、
前記トリガ信号に応答して、前記プロセッサの前記実行コア内で、第２のシーケンスのプログラム命令に応答して一以上の画像用の前記フラグメントデータから新規フレームのピクセルデータを生成する後処理オブジェクトを動作させるステップであって、前記新規フレームのピクセルデータが前記スキャンアウトエンジンに利用可能とされる、該ステップと、
を含む方法。
【請求項１８】
前記トリガ信号は、フレーム終端イベントに実質的に固定の時間関係を有する、請求項１７記載の方法。
【請求項１９】
前記レンダリングオブジェクトの動作が、前記後処理オブジェクトの動作の間、一時停止され、前記後処理オブジェクトが前記新規フレームのピクセルデータを生成し終えた後に再開される、請求項１７記載の方法。
【請求項２０】
前記第２のシーケンスのプログラム命令が、画像用の前記フラグメントデータをダウンフィルタリングするための命令を含む、請求項１７記載の方法。
【請求項２１】
前記第２のシーケンスのプログラム命令が、画像用の前記フラグメントデータをアップフィルタリングするための命令を含む、請求項１７記載の方法。
【請求項２２】
前記第２のシーケンスのプログラム命令が、前記フレームの各ピクセル用にＬＣＤオーバードライブ値を計算するための命令を含む、請求項１７記載の方法。
【請求項２３】
前記第２のシーケンスのプログラム命令が、二以上の異なる画像用のフラグメントデータを用いて、合成画像を形成するための命令を含む、請求項１７記載の方法。
【請求項２４】
前記第２のシーケンスのプログラム命令が、前記画像を表面にマッピングするための命令を含む、請求項１７記載の方法。
【発明の詳細な説明】
【発明の背景】
【０００１】
[0001]本発明は、広く、グラフィックプロセッサに関するものであり、より詳細には、プログラム可能なハードウェアを用いたリアルタイムディスプレイの後処理に関するものである。
【０００２】
[0002]コンピュータによる画像レンダリングは、通常、シーンの形状記述によって始まる。様々なオブジェクトが、シーン内に配置することができるプリミティブ（通常は、三角形のような単純なポリゴン、並びに、点及び線）の集合として記述される。そして、視点座標系が選択され、プリティブが当該座標系へと変換される。プリミティブは、次いで、２次元（２−Ｄ）「フラグメント」の配列表現に変換される。ここで、各フラグメントは、色を有し、奥行き座標又は面法線のような他の属性を有することがある。照明、テクスチャ、フォグ（霧）、及び、視覚リアルズムを強化する種々の他の効果を、プリミティム及び／又はフラグメントステージにおいて導入することもある。レンダリングプロセスが終了すると、各フラグメント用のデータ（一般的には、少なくとも色値）が、画像バッファに格納される。画像バッファは、スキャンアウトプロセスによって読み取られ、当該スキャンアウトプロセスが、ピクセルをディスプレイデバイスに所定のスクリーンリフレッシュレートで供給するよう、等時間間隔で動作する。リアルタイムのアニメーションは、レンダリングプロセスが約３０Ｈｚのレートで新しい画像を供給することを要求する。典型的なディスプレイデバイスは、約６０〜８０Ｈｚのスクリーンリフレッシュレートで動作する。
【０００３】
[0003]これら処理レートの要件を満たすために、多くのコンピュータシステムは、専用のグラフィックコプロセッサを備え、当該コプロセッサが、中央処理ユニット（ＣＰＵ）によって提供されるデータに対してレンダリングオペレーションを実行し、また、等時間間隔のスキャンアウトオペレーションを実行してディスプレイデバイスを駆動する。典型的なグラフィックプロセッサは、レンダリングオブジェクトとスキャンアウトエンジンを備えており、これらは互いに非同期的に動作する。レンダリングオブジェクトは、「バック」画像バッファにおいて新規の画像用のフラグメントデータを生成し、スキャンアウトエンジンは、「フロント」画像バッファ内の以前にレンダリングされた画像を用いてディスプレイを駆動する。新規の画像のレンダリングが完了すると、「バック」バッファ及び「フロント」バッファが切り替えられて、スキャンアウトエンジンが、新たにレンダリングされた画像を表示し始め、レンダリングオブジェクトが次の画像に移行する。一般に、スキャンアウトエンジンは、同じ画像を、次の画像のレンダリングが完了する前に２〜３回読むことがある。
【０００４】
[0004]レンダリングオブジェクト及びスキャンアウトエンジンは、通常、実装について大きく異なる。レンダリングオブジェクトは、一般的に、フレキシブルでありプログラム可能である。典型的なレンダリングオブジェクトは、任意のオペレーションのシーケンスを実行するよう命令され得る機能ユニットと共に、実行コア（又は複数の並列実行コア）を備えている。適切なプログラミングを用いて、実行コアは、任意の組み合わせのレンダリングアルゴリズムを実行して特定の画像を生成するように作ることができるものであり、当該アルゴリズムは、要求に応じて異なり得るものである。
【０００５】
[0005]スキャンアウトエンジンは、逆に、通常、制限された処理能力を有しており、プログラム可能ではない。代わりに、スキャンアウトエンジンは、フラグメントデータが流れる一連のパイプライン化された専用処理回路を、フラグメントデータをピクセル値に変換する種々のオペレーションを実行する処理回路と共に、有している。例えば、幾つかのスキャンアウトエンジンは、レンダリングされる画像よりも高レートで更新され得るオーバーレイ（例えば、カーソル又はビデオオーバーレイ）の追加、色補正（例えば、ディスプレイの応答の非線形性を考慮するためのガンマ補正）、又は、スクリーン上の複数のピクセルを整合させるためのフラグメントデータのフィルタリング（例えば、アンチエイリアス処理）をサポートする。上記専用回路は、一般的には、固定の待ち時間で動作するよう設計されており、ピクセルデータがディスプレイデバイスに等時間間隔で供給されるようにする。
【０００６】
[0006]幾つかのプロセッサでは、種々のスキャンアウトタイムオペレーションを有効又は無効にすることができ、又は、当該オペレーションのパラメータ（例えば、ガンマ補正用のパラメータ又はオーバーレイの位置）を変更することができる（例えば、オーバーレイを動作させたり、又は、停止させることができる）。しかしながら、各オペレーションが異なる専用回路で実装されているので、一般的には、パイプラインに新規のオペレーションを追加すること、オペレーションのシーケンスを変更すること、又は、特定のオペレーションを実装するアルゴリズムを変更することは、異なるスキャンアウトエンジンを構築すること無くしては、行い得ない。したがって、スキャンアウトエンジンを再構成する能力は、非常に限られている。新規の特徴を追加することは、一般には、回路の変更を要し、チップ面積及びスケジューリングに影響し、コスト及び遅延が増加する。
【０００７】
[0007]リアルタイムのレンダリング技術が進化し続けるにつれて、より強力且つフレキシブルであり、ディスプレイのレートで種々の効果を追加することが可能なスキャンアウトエンジンに対する要求が増加してきている。加えて、グラフィックプロセッサによって駆動されるディスプレイデバイスの範囲も増加してきており、従来のＣＲＴモニタに加えて、グラフィックデバイスを用いて、ＬＣＤモニタや、デジタルマイクロミラープロジェクタ、プラズマモニタ等を駆動することが可能となっている。各種のディスプレイデバイスは、そのピクセルを駆動するための要件が異なっており、これら要件の全てを単一のハードウェアパイプラインで満たすことは困難である。したがって、フラグメントからピクセルへの変換処理に関するより優れたフレキシビリティに対する要求は高い。
【０００８】
[0008]従って、ディスプレイの周期（cadence）で任意のシーケンスのオペレーションを実行する能力を有するグラフィックプロセッサを提供することが望まれるであろう。
【発明の簡単な概要】
【０００９】
[0009]本発明の実装の形態は、グラフィックプロセッサを提供するものであり、当該グラフィックプロセッサにおいては、レンダリングオブジェクト及び後処理オブジェクトが、ホストプロセッサへのアクセスを、プログラム可能な実行コアを用いて共有する。レンダリングオブジェクトは、画像用のフラグメントデータを幾何データから生成し、フラグメントデータを画像バッファに書き込むように動作する。後処理オブジェクトは、フレームのピクセルデータを一以上の完成したフレームバッファにおけるフラグメントデータから生成し、当該ピクセルデータをフレームバッファに書き込むよう動作する。ホストプロセッサのオペレーションと並行して、スキャンアウトエンジンが、以前に生成されたフレーム用のピクセルデータをフレームバッファから読み取り、当該ピクセルデータをディスプレイデバイスに供給する。スキャンアウトエンジンは、ホストプロセッサを周期的にトリガして、次のフレームを生成するよう後処理オブジェクトを動作させる。スキャンアウトエンジンと後処理オブジェクトとの間のタイミングは、スキャンアウトエンジンが現在のフレームの読み取りを終了した時に表示すべき次のフレームがフレームバッファ内に準備されているように好適に制御される。
【００１０】
[0010]本発明の一側面によれば、グラフィックプロセッサが、プログラム可能な実行コアと、調停ユニットと、スキャンアウトエンジンと、を備える。プログラム可能な実行コアは、複数のコンテキスト間で切り替えることができるように構成されており、更に、切り替えられた（ｓｗｉｔｃｈｅｄ−ｔｏ）コンテキストに関連するプログラム命令を実行するように構成されている。調停ユニットは、実行コアに結合されており、異なるコンテキスト間での実行コアの切り替えを制御するよう構成されている。スキャンアウトエンジンは、フレームの生成されたピクセルデータをディスプレイポートに等時間間隔で伝送するように構成されており、トリガ信号を調停ユニットに周期的に伝送するように結合されている。コンテキストは、画像データを生成するための第１のシーケンスのプログラム命令に関連するレンダリングコンテキスト、及び、画像データからフレームのピクセルデータを生成するための第２のシーケンスのプログラム命令に関連する後処理コンテキストを含む。調停ユニットは、更に、トリガ信号に応答して、実行コアを後処理コンテキストに切り替えるように構成されている。幾つかの実施の形態では、スキャンアウトエンジンは、更に、トリガ信号がフレーム終端のイベントに実質的に固定の時間関係をもたせるように構成されている。
【００１１】
[0011]幾つかの実施の形態では、調停ユニットは、更に、フレーム終端イベントが第２のストリープのプログラム命令において検出されるまでの間、実行コアを後処理コンテキストに維持して、その後、実行コアをレンダリングコンテキストに切り替えるように構成されている。フレーム終端イベントは、例えば、第２のストリームのプログラム命令において当該第２のストリームのプログラム命令の開始ポイントをターゲットとした無条件ジャンプ命令が発生することに対応してもよい。
【００１２】
[0012]本発明の他の側面によれば、画像を生成する方法が提供される。プロセッサの共有実行コアでは、レンダリングオブジェクトが動作され、レンダリングオブジェクトが、画像用のフラグメントデータを、第１のシーケンスのプログラム命令に応答して生成する。レンダリングオブジェクトを動作させることと並行して、スキャンアウトエンジンが、フレームのピクセルデータをディスプレイデバイスに等時間間隔で供給するよう動作され、当該スキャンアウトエンジンが、周期的にトリガ信号を生成する。トリガ信号に応答して、後処理オブジェクトが、プロセッサの共有実行コアにおいて動作され、当該後処理オブジェクトは、第２のシーケンスのプログラム命令に応答して、新規フレームのピクセルデータを、一以上の画像用のフラグメントデータから生成し、新規フレームのピクセルデータが、スキャンアウトエンジンに利用可能とされる。幾つかの実施の形態では、第２のシーケンスのプログラム命令は、例えば、画像のフラグメントデータをダウンフィルタリングための命令、画像用のフラグメントデータをアップフィルタリングするための命令、及び／又は、２以上の異なる画像用のフラグメントデータを用いた合成画像を形成するための命令を含む。
【００１３】
[0013]本発明の更に別の側面によれば、グラフィック処理システムが、画像バッファ、フレームバッファ、及びマルチプロセッサを備える。各画像バッファは、画像用のフラグメントデータを格納するように構成されており、各フレームバッファは、フレーム用のピクセルデータを格納するように構成されている。マルチプロセッサは、プログラム可能な実行コア、調停ユニット、及びスキャンアウトエンジンを備える。プログラム可能な実行コアは、複数のコンテキスト間で切り替え可能なように構成されており、これによって、実行コアは切り替えられたコンテキストに関連するプログラム命令を実行するようになっている。調停ユニットは、実行コアに結合されており、コンテキスト間での実行コアの切り替えを制御するように構成されている。スキャンアウトエンジンは、フレームのピクセルデータをフレームバッファからディスプレイポートに等時間間隔で伝送するように構成されており、トリガ信号をマルチプロセッサの調停ユニットに周期的に伝送するように結合されている。コンテキストは、画像用のフラグメントデータを生成し、画像バッファの一つに各画像用のフラグメントデータを書き込むための第１のシーケンスのプログラム命令に関連するレンダリングコンテキスト、及び、フレームのピクセルデータを画像バッファ内のフラグメントデータから生成し、フレーム用のピクセルデータをフレームバッファの一つに書き込むための第２のシーケンスのプログラム命令に関連する後処理コンテキストを含む。調停ユニットは、更に、実行コアを後処理コンテキストに、トリガ信号に応答して切り替えるように構成されている。
【００１４】
[0014]以下の詳細な説明、及び添付の図面によって、本発明の本質と利点がより理解されるようになる。
【発明の詳細な説明】
【００１５】
＜概略及び専門用語＞
[0029]本発明の実施の形態は、グラフィックプロセッサを提供するものであり、当該グラフィックプロセッサにおいては、レンダリングオブジェクト及び後処理オブジェクトがホストプロセッサへのアクセスを、プログラム可能な実行コアを用いて共有する。レンダリングオブジェクトは、レンダリングの周期で動作するものであり、幾何データから画像用のフラグメントデータを生成し、当該フラグメントデータを画像バッファに書き込む。後処理オブジェクトは、スキャンアウト（表示）の周期で動作するものであり、ピクセルデータを、一以上の完成した画像バッファにおけるフラグメントデータから生成し、当該ピクセルデータをフレームバッファに書き込む。並行して、スキャンアウトエンジンが、以前に生成されたフレーム用のピクセルデータを、異なるフレームバッファから読み取り、ピクセルをディスプレイデバイスに供給する。スキャンアウトオペレーションと同時に、スキャンアウトエンジンは、ホストプロセッサをトリガして、後処理オブジェクトをスキャンアウトの周期で実行し、スキャンアウトエンジンが現在のフレームの読み取りを終了する時に次のフレームが準備されているようにする。
【００１６】
[0030]本明細書では、以下の専門用語を使用する。
【００１７】
[0031]画像との用語は、あるピクチャの記述を構成する「フラグメント」の配列を指し、各フラグメントは色を有しており、奥行き、透明度等の他の属性を有することもある。フラグメントの色は、赤／緑／青（ＲＧＢ）、輝度−色差（ＹＣｒＣｂ）、色相／明度／彩度（ＨＬＳ）、単色強度値、又は他のフォーマットを含む任意の好都合なフォーマットにおいて、任意の所望の解像度で、表現することができる。フラグメントは、数及び配列について、ディスプレイデバイスのピクセルに如何なる特定の関係をもつ必要がなく、フラグメントのアレイは、フラグメント間で均一の間隔を有していても、また、有していなくてもよい。
【００１８】
[0032]「レンダリング」は、一般的に、シーンデータから画像又はフラグメントデータを生成するプロセスを指し、当該シーンデータは、通常は、プリミティブ及び関連の幾何データを含む。レンダリングプロセスは、頂点処理（スクリーン空間への変換）、セットアップ（スクリーン空間において関心のある属性及びプリミティブの選択）、ラスタライズ（フラグメント位置の配列をサンプリングして各フラグメントをカバーするプリミティブを決定する）、シェーディング（フラグメント用の属性を、フラグメントを覆うプリミティブに応じて生成する）、及び、ポストシェーディングラスタオペレーション（フラグメントアレイを、例えばダウンフィルタリングによって変換する）のような多数のステージを含む。画像のレンダリングは、一般的に、平均速度（「レンダリングの周期」）で発生し、当該平均速度は、幾つかの実施の形態では、アニメーションに適した速度、例えば、１秒につき約３０画像である。レンダリングプロセスの詳細は、本発明にとって重要なことではなく、レンダリングスピードは、画像によって変動することがある。
【００１９】
[0033]レンダリングされた画像は、ピクセルの配列又はラスタを用いるディスプレイデバイスに表示され、それらの各々が、ピクセル値の関数である駆動信号に応答して色を表示する。上述したように、ディスプレイデバイスのピクセルは、レンダリングされた画像の単一のフラグメントに対応していても、対応していなくてもよい。「フレーム」とは、本明細書に使用するように、一般的には、ピクセルラスタ用のピクセル値の完全なセットを指す。新規のフレームは、所定のスクリーンリフレッシュレート、又は「ディスプレイ周期」（例えば、８０Ｈｚ）で表示される。これは、ユーザが選択可能なパラメータである。連続するフレームは、同じ画像又は異なる画像を表示することがある。
【００２０】
[0034]「後処理」は、一般的に、フレームのピクセルデータを生成するための一以上の画像用のフラグメントデータの処理を指す。後処理は、ディスプレイ周期（スクリーンリフレッシュレート）で好適になされるものであり、一般的には、アニメーションの速度よりも早い。多数の後処理オペレーションを、本発明に従って実装することができる。以下に、幾つかの例を示すが、本発明は、後処理オペレーションの如何なる特定の組み合わせ又はシーケンスにも限定されるものではない。
【００２１】
[0035]一つの後処理オペレーションはフィルタリングであり、ある画像からの異なるフラグメントの値を混合して、単一のピクセル値を得ることを含む。フィルタリングによって、フラグメントの数とは異なる個数のピクセルが得られる。ある実施の形態では、フラグメントをダウンフィルタリングして、フラグメントの数よりも少ない数のピクセルを生成することができる。例えば、各ピクセル値を、近傍のフラグメント値の重み付け平均とすることができる。ダウンフィルダリングを使用して、画像のサイズを縮小し、オーバーサンプリング（例えば、マルチサンプリング）オペレーションの最終ステージとしてアンチエイリアス処理を実施すること等が可能である。或いは、フラグメントをアップフィルタリングして、フラグメントの数より多い数のピクセルを生成することができる。例えば、補間を用いて、入力フラグメント値の間又は適所に、更なるピクセル値を追加することができる。アップフィルタリングは、例えば、画像を表示用に拡大するために用いられることがある。
【００２２】
[0036]別の後処理オペレーションは、合成処理であり、これは、一般的には、二以上の画像からのフラグメントを最終画像へと組み合わせることを指す。例えば、カーソル画像が、スクリーン画像の一部に重ねられることがあり、又は、ビデオ画像（例えば、映画）が、デスクトップ上のウィンドウに重ねられることがある。幾つかの実施の形態では、組み合わされる画像が、異なるレートで更新されることがあり、ディスプレイ周期以外では、画像を正確に組み合わせることを困難にしている。ある実施の形態では、合成処理がまた、画像を混合して、フェイドイン、フェイドアウト、又はディゾルブのような遷移効果を生成することもある。これらの効果のために、古い画像及び新規の画像を、時間の関数として変化するそれぞれに対応の重みを用いて混合することができる。
【００２３】
[0037]更に別の後処理オペレーションは、表面マッピングであり、これは、一般的には、画像用のフラグメントデータを、２−Ｄ又は３−Ｄの表面上にマッピングして、当該表面をピクセルの配列上に投影することを指す。ある実施の形態では、フラグメントデータを、台形表面にマップして、プロジェクタであるディスプレイデバイス用の「キーストーン」補正を提供することができ、台形表面の形状及びサイズは、プロジェクタからのビームの軸線がスクリーン又は他のディスプレイ表面に対して法線方向にないときに発生する公知の歪みを補償するよう、ユーザが調整することができる。他の実施の形態では、フラグメントデータを任意形状の表面にマップすることも可能である。この表面は、所望の視覚効果を生成するように、又は、非平面の表面（例えば、円柱又は半球）に少ない歪みで投影が行えるように、定義することができる。
【００２４】
[0038]更なる後処理オペレーションは、表面の回転であり、これは、画像用のフラグメントデータを、画像の法線方向の軸線周りにある角度で回転された２−Ｄ表面にマッピングすることを指す。例えば、９０°の時計回りの回転によって、画像の上部左隅におけるフラグメントは、ピクセル配列の上部右角に現れ、画像における水平の線はピクセル配列における垂直の線となる。表面の回転は、上述した表面マッピングオペレーションの特殊ケースとして見ることができる。ある実施の形態では、表面の回転が、タブレットＰＣのディスプレイや幾つかのフラットパネルモニタの場合のように、回転可能に搭載されたディスプレイデバイスに用いられる。
【００２５】
[0039]更に別の後処理オペレーションは、輝度補償である。例えば、画像がスクリーン上に投影される場合に、プロジェクタから遠く離れたピクセルは、より近くにあるピクセルよりも暗くなる傾向がある。また、スクリーン周囲の環境光が均一でない場合に、スクリーンの一部が、残りの部分より明るく見えることがある。輝度補償は、かかる影響を、スクリーン位置の関数としてピクセルの強度を変更することによって補正することができ、ユーザは、種々の輝度補償パラメータを所望のように調整することが可能である。
【００２６】
[0040]他の後処理オペレーションは、特定のディスプレイデバイスの特性を補償するものである。例えば、ガンマ補正は、アナログ信号によって駆動されるディスプレイデバイスにおける非線形の電圧応答を補償するために、ピクセル値を指数関数的にスケーリングする。別の例として、ＬＣＤモニタでは、応答時間を、部分的には所望の強度に応じており、部分的には強度を前のフレームに関連して変化させる量に応じた各ピクセル用の駆動値を提供することによって、改善することができる。他のタイプのディスプレイデバイスに特化した他の補償オペレーションを、後処理において実施してもよい。
【００２７】
[0041]幾つかの実施の形態では、後処理オペレーションは、ＬＣＤのオーバードライブ又は合成といった正確な結果を生成するために、ディスプレイ周期で成されるべきオペレーションである。レンダリングがスキャンアウトと非同期の場合、レンダリング時には、レンダリング周期をディスプレイ周期に如何に一致させるかを決定することが困難であるか、又は不可能であることが多く、従って、後処理オペレーションがレンダリングの期間になされる場合に、正確な結果を保証することも困難であるか、又は不可能である。
【００２８】
[0042]「スキャンアウト」は、一般的に、フレーム（後処理後）のピクセルデータを、ディスプレイデバイスに接続する出力経路に転送することを指す。後処理と同様に、スキャンアウトは、ディスプレイ周期で発生する。幾つかの実施の形態では、後処理によって生成されたピクセルデータは、既に、ディスプレイデバイスを駆動するために適切なフォーマットになっている。他の実施の形態では、スキャンアウトは、ピクセルデータを適切なフォーマットに変換することを含むことがあり、また、再スケーリング、デジタル−アナログ変換、及び他の信号処理技術を含むことがある。
【００２９】
＜システムの概略＞
[0043]図１は、本発明の実施の形態にかかるコンピュータシステム１００のブロック図である。コンピュータシステム１００は、バス１０６を介して通信する中央処理ユニット（ＣＰＵ）１０２及びシステムメモリ１０４を備えている。ユーザ入力は、バス１０６に結合された一以上のユーザ入力デバイス１０８（例えば、キーボード、マウス）から受け取られる。視覚出力は、システムバス１０６に結合されたグラフィック処理サブシステム１１２の制御の下で動作するピクセルベースのディスプレイデバイス１１０（例えば、従来のＣＲＴ又はＬＣＤ）で提供される。システムディスク１０７、及び、一以上のリムーバブルストレージデバイス１０９（例えば、フロッピーディスクドライブ、コンパクトディスク（ＣＤ）ドライブ、及び／又はＤＶＤドライブ）のような他のコンポーネントが、システムバス１０６に結合されていてもよい。システムバス１０６は、一以上の様々なバスプロトコルを用いて実装することができ、当該プロトコルには、ＰＣＩ（Peripheral  Component  Interconnect）、ＡＧＰ（Advanced  Graphics  Processing）、及び／又はＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｔ）があり、ノースブリッジ及びサウスブリッジ（図示せず）のような適切な「ブリッジ」チップを、種々のコンポーネント及び／又はバスの相互接続のために提供することができる。
【００３０】
[0044]グラフィック処理サブシステム１１２は、グラフィック処理ユニット（ＧＰＵ）１１４及びグラフィックメモリ１１６を備えており、これらは、例えば、プログラム可能なプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、及びメモリデバイスのような一以上の集積回路デバイスを用いて、実装することができる。ＧＰＵ１１４は、マルチプロセッサ１２０、メモリインタフェイスモジュール１２２、及び、スキャンアウトエンジン１２４を備えている。
【００３１】
[0045]マルチプロセッサ１２０は、グラフィック処理サブシステム１１２のレンダリング及び後処理のタスクを実行するよう構成されている。マルチプロセッサ１２０は、プログラム可能な実行コア（図１には明示せず）を備えており、二以上のプロセスの同時実行が可能である。一つのプロセスは、「レンダリングオブジェクト」１３２であり、このレンダリングオブジェクト１３２は、ＣＰＵ１０２上で実行する種々のプログラムによって提供される２−Ｄ又は３−Ｄのシーンデータから、画像（フラグメント）データを生成するよう構成されている。別のプロセスは、「後処理オブジェクト」１３４であり、この後処理オブジェクト１３４は、フラグメントデータを、ディスプレイデバイス１１０上の表示用に準備したピクセルデータへと変換するよう構成されている。ある実施の形態では、これらプロセスの一つのみが、任意の所与の時間においてマルチプロセッサ１２０でアクティブになり、異なるプロセスが切り替えられて（スイッチイン及びスイッチアウトされて）、同時処理の効果が提供される。幾つかの実施の形態では、レンダリングオブジェクト１３２及び後処理オブジェクト１３４は、物理的に同じ処理エンジンに実装されていてもよく、このエンジンは、好適には、両オブジェクトをサポートするためにコンテキストを切り替えることが可能である。他の実施の形態では、レンダリングオブジェクト１３２及び後処理オブジェクト１３４は、別個の処理エンジンに実装されており、両オブジェクト間のコンテキストの切り替えが不要である。マルチプロセッサ１２０の具体的な実施の形態を、以下に更に説明する。
【００３２】
[0046]メモリインタフェイスモジュール１２２は、マルチプロセッサ１２０及びスキャンアウトエンジン１２４に接続しており、グラフィックメモリとの全ての相互実行を管理する。メモリインタフェイスモジュール１２２は、システムバス１０６から受け取るフラグメント又はピクセルデータを、グラフィックメモリ１１６内の適切な記憶位置に、マルチプロセッサ１２０によって処理することなく書き込むための経路を有している。メモリインタフェイスモジュール１２２の特定の構成は、必要に応じて変更することができ、その詳細な説明は、本発明の理解に重要でないので省略する。
【００３３】
[0047]グラフィックメモリ１１６は、一般的な従来の構成をもつ一以上の集積回路メモリデバイスを用いて、実装することができるものであり、物理的又は論理的な区画、例えば、レンダリングバッファ１２６、ディスプレイバッファ１２７、レンダリングコマンドバッファ１２８、及び後処理（ＰＰ）コマンドバッファ１２９、を含んでいる。レンダリングバッファ１２６は、レンダリングオブジェクト１３２又はＣＰＵ１０２での種々のプロセスの実行によって生成された一以上の画像用のフラグメントデータを格納する。レンダリングバッファ１２６は、好適には、同じプロセスによって生成された画像のシーケンスを含む複数の異なる画像をバッファリングし、第１の画像用のフラグメントデータが後処理されているときに、後の画像用のフラグメントデータが、レンダリングバッファ１２６の異なる領域に書き込まれるようにする。
【００３４】
[0048]ディスプレイバッファ１２７は、後処理オブジェクト１３４によってレンダリングバッファ１２６のフラグメントデータから生成されたピクセルデータを格納する。ディスプレイバッファ１２７は、好適には、少なくとも二つの完全なフレームのピクセルデータを格納し、一つのフレーム用のピクセルデータが「フロント」バッファからスキャンアウトされ、一方、次のフレーム用のピクセルデータが「バック」バッファに書き込まれるようにする。
【００３５】
[0049]レンダリングコマンドバッファ１２８及びＰＰコマンドバッファ１２９は、マルチプロセッサ１２０による実行のためにシステムバス１０６を介して受け取られるコマンドをキューイングするために使用される。以下に説明するように、レンダリングコマンドバッファ１２８内のコマンドは、レンダリングオブジェクト１３２によって実行され、一方、ＰＰコマンドバッファ１２９内のコマンドは、後処理オブジェクト１３４によって実行される。
【００３６】
[0050]グラフィックメモリ１１６の他の部分は、ＧＰＵ１１４によって要求されるデータ（例えば、デキスチャデータ、カラールックアップテーブル等）、ＧＰＵ１１４用の実行可能プログラムコード等を格納するために使用することができる。
【００３７】
[0051]スキャンアウトエンジン１２４は、単一のチップにマルチプロセッサ１２０と共に集積することができるものであり、ディスプレイバッファ１２７からピクセルデータを読み取り、当該データを表示すべきディスプレイデバイス１１０に伝送する。ある実施の形態では、スキャンアウトエンジン１２４は、等時間間隔で動作して、フレームのピクセルデータを所定のスクリーンリフレッシュレートで、ＧＰＵ１１４又はシステム１００の別のところで発生し得る任意の他のアクティビティとは無関係に、スキャンアウトする。幾つかの実施の形態では、所定のリフレッシュレートは、ユーザが選択可能なパラメータであってもよく、スキャンアウトの順序は、ディスプレイフォーマットに適するように変更することができる（例えば、インタレース又はプログレッシブスキャン）。スキャンアウトエンジン１２４は、データのフォーマット、デジタル−アナログ変換用の回路、及び、ピクセルデータをディスプレイデバイス用の適切なフォーマットに変換する他の信号処理回路を含むことがある。スキャンアウトエンジン１２４の特定の構成は、必要に応じて変更してもよい。
【００３８】
[0052]システム１００の動作時に、ＣＰＵ１０２は、オペレーティングシステムプログラム、アプリケーションプログラム、及び、グラフィック処理サブシステム１１２用の一以上のドライバプログラムといった種々のプログラムを実行する。ドライバプログラムは、従来のアプリケーションプログラムインタフェイス（ＡＰＩ）、例えば、ＯｐｅｎＧＬ、Ｍｉｃｒｏｓｏｆｔ  ＤｉｒｅｃｔＸ、又はＤ３Ｄを実装することができ、当該ＡＰＩは、アプリケーション及びオペレーティングシステムプログラムが、グラフィック処理サブシステム１１２の種々の関数を、当該技術分野で知られているように、呼び出すことを可能とする。
【００３９】
[0053]グラフィック処理サブシステム１１２のオペレーションは、好適には、システム１００の他のオペレーションとは非同期である。例えば、幾つかの実施の形態では、レンダリングコマンドバッファ１２８及びＰＰコマンドバッファ１２９は、ＧＰＵ１１４による実行のためにシステムバス１０６を介して受け取ったコマンドをキューイングする。より詳細には、ＣＰＵ１０２上で実行しているグラフィックドライバは、レンダリングコマンドストリーム又はプログラムを、レンダリングコマンドバッファ１２８に書き込み、後処理コマンドストリーム又はプログラムをＰＰコマンドバッファ１２９に書き込む。コマンドストリームは、ＧＰＵ１１４がそれらを処理する準備ができるまでの間、それぞれに対応のコマンドバッファ１２８及び１２９に保持される。
【００４０】
[0054]レンダリングコマンドバッファ１２８は、好適には、ファーストインファーストアウトバッファ（ＦＩＦＯ）として実装され、ＣＰＵ１０２によって（より詳細には、ＣＰＵ１０２上で実行するグラフィックドライバによって）書き込まれ、ＧＰＵ１１４によって（より詳細には、マルチプロセッサ１２０のレンダリングオブジェクト１３２によって）読み取られる。読み取り及び書き込みは、非同期に発生することができる。ある実施の形態では、グラフィックドライバは、周期的に、新たなコマンド及びデータを、「プット」ポインタによって決定される記憶位置においてレンダリングコマンドバッファ１２８に書き込み、このポインタをグラフィックドライバが各書き込みの後にインクリメントする。非同期に、レンダリングオブジェクト１３２は、以前にレンダリングコマンドバッファ１２８に格納されたコマンド及びデータを、順次に読み取って処理する。レンダリングオブジェクト１３２は、「ゲット」ポインタを保持して、コマンドバッファ１２８における現在の読み取り位置を特定し、このゲットポインタは、各読み取りの後にインクリメントされる。グラフィックドライバがレンダリングオブジェクト１３２に対して十分に先行している場合、ＧＰＵ１１４は、ＣＰＵ１０２を待つアイドルタイムを招くことなく、画像をレンダリングすることができる。幾つかの実施の形態では、レンダリングコマンドバッファ１２８のサイズとシーンの複雑さとに応じて、グラフィックドライバは、幾つかの画像用のデータ及びコマンドを、レンダリングオブジェクト１３２によって現在レンダリングされている画像に先行して書き込んでもよい。レンダリングコマンドバッファ１２８は、固定サイズ（例えば、５メガバイト）であってもよく、ラップアラウンド式（例えば、最後のロケーションに書き込んだ後に、グラフィックドライバが、「プット」ポインタを最初のロケーションにリセットし、同様に、最後のロケーションからの読み取り後に、レンダリングオブジェクト１３２が、「ゲット」ポインタを最初のロケーションにリセットすることができる）で書き込まれ、また、読み取られてもよい。
【００４１】
[0055]ＰＰコマンドバッファ１２９は、好適には、循環キューとして実装される。各フレーム用の後処理コマンドの新たなストリームを書き込むのではなく、グラフィックドライバプログラムは、後処理ストリーム又はプログラムを、ＰＰコマンドバッファ１２９に一度書き込み、後処理プログラムが変更される場合にのみ、新たなストリーム又はプログラムを書き込む。マルチプロセッサ１２０の後処理オブジェクトは、以下に説明するように各フレームに対してストリームを実行し、実行されたコマンドは、ＰＰコマンドバッファ１２９内に、次の再実行のために留まる。ＰＰコマンドバッファ１２９は、固定サイズ（例えば、１メガバイト）であってもよく、コマンドストリームは、次のフレームの処理のためにコマンドストリームの最初に制御を戻す無条件「ジャンプ」コマンドで終了してもよい。
【００４２】
[0056]ある実施の形態では、マルチプロセッサ１２０によるレンダリングオブジェクト１３２のオペレーションは、他の如何なるオペレーションとも非同期であり、一方、後処理オブジェクト１３４のオペレーションは、スキャンアウトエンジン１２４のオペレーションと同期されており、後処理がディスプレイ周期で発生するようになっている。例えば、マルチプロセッサ１２０は、周期的に（例えば、フレームのスキャンアウト毎に１回）、レンダリングオブジェクト１３２を一時的に停止し、後処理オブジェクト１３４を、当該後処理オブジェクトがフレームのスクリーンピクセルデータを生成してディスプレイバッファ１２７に当該データを書き込むことを可能とするのに十分長い時間、動作させる。好適なオペレーションを提供する制御メカニズムの例を以下に説明する。
【００４３】
[0057]本明細書に説明するシステムは、例示的なものであり、変更及び改良が可能であることが理解されよう。ＧＰＵは、好適な技術を用いて、例えば、一以上の集積回路デバイスとして実装されてもよい。ＧＰＵは、一以上のこのようなプロセッサを有する拡張カード上に搭載されていてもよく、システムのマザーボードに直接搭載されていてもよく、システムのチップセットのコンポーネント（例えば、ＰＣシステムアーキテクチャに一般的に使用されるコンポーネントのノースブリッジチップ）に集積されていてもよい。グラフィック処理サブシステムは、任意の量の専用のグラフィックメモリ（幾つかの実装形態では、専用グラフィックメモリは不要である）を有することができ、システムメモリと専用グラフィックメモリを任意の組み合わせで使用することができる。スキャンアウト回路は、ＧＰＵと共に集積されていてもよく、又は、別個のチップ上に提供されていてもよく、また、例えば、一以上のＡＳＩＣ、プログラム可能なプロセッサエレメント、他の集積回路技術、又は、これらの任意の組み合わせを用いて実装されてもよい。本発明を実施するＧＰＵは、種々のデバイスに組み込むことができ、例えば、汎用コンピュータシステム、ビデオゲームコンソール及び他の専用コンピュータシステム、ＤＶＤプレーヤ、モバイルフォン又はパーソナルデジタルアシスタントのようなハンドヘルドデバイス、等に組み込むことができる。
【００４４】
＜データフローの概略＞
[0058]図２は、グラフィック処理サブシステム１１２用のデータフロー図であり、更に、マルチプロセッサ１２０、レンダリングオブジェクト１３２、後処理オブジェクト１３４、及びスキャンアウトエンジン１２４の間の関係を示している。データの伝播は実践の矢印で示されており、コマンドの伝播は中空の矢印で示されており、制御信号の伝播は点線の矢印で示されている。
【００４５】
[0059]図２では、レンダリングバッファ１２６が、三つの画像バッファ２２６（本明細書では個別にＡ、Ｂ、Ｃとして参照する）、及び、セマフォストレージ領域２０６を有するように示されている。画像バッファ２２６は、一つの画像用のフラグメントデータの全てを格納するに足る大きさを各々有しており、レンダリングオブジェクト１３２は、好適には、ある画像用のフラグメントデータをバッファＡに書き込み、次の画像用のフラグメントデータの全てをバッファＢに書き込むといったように動作する。任意の数の画像バッファ２２６を提供してもよいことが理解されよう。セマフォ領域２０６は、画像バッファ２２６へのアクセスを、以下に説明するように制御するために使用される。
【００４６】
[0060]ディスプレイバッファ１２７は、二つのフレームバッファ２２７（本明細書では個別にＸ及びＹとして参照する）、及び、バッファ選択（ＢＳＥＬ）ストレージアリア２０８を有するように示されている。フレームバッファ２２７は各々、完全なフレーム用のピクセルデータの全てを格納するに足る大きさを有しており、後処理オブジェクト１３４は、あるフレームをバッファＸに書き込み、次のフレームをバッファＹに書き込むといったように動作する。ＢＳＥＬストレージ領域２０８は、フレームバッファ２２７のうちのどのバッファがスキャンアウトエンジン１２４によって読み取られるべきかを一意に特定する値を格納するに足る大きさを有している。ある実施の形態では、ＢＳＥＬストレージ領域２０８は、フレームバッファＸ（ビットがゼロの場合に）、又はフレームバッファＹ（ビットが１の場合）を特定する単一のビットを格納する。別の実施の形態では、ＢＳＥＬストレージ領域２０８は、フレームバッファＸ又はフレームバッファＹのうち一方のためのグラフィックメモリ１１６における開始アドレスの識別子（例えば、オフセット値）を格納する。他の識別子も用いることが可能である。
【００４７】
[0061]この実施の形態では、レンダリングオブジェクト１３２が幾何データを、例えば、システムバス１０６を介して受け取る。受け取られた幾何データは、グラフィックメモリ１１６、マルチプロセッサ１２０のオンチップデータキャッシュ（図示せず）、又は他の場所に格納される。レンダリングオブジェクト１３２は、幾何データを、レンダリングコマンドバッファ１２８によって提供されるコマンドに基づいて処理して、画像用のフラグメントデータを生成する。フラグメントデータは、画像バッファ２２６の一つ、例えば、バッファＡに書き込まれる。
【００４８】
[0062]後処理オブジェクト１３４は、画像バッファ２２６内のフラグメントデータを、ＰＰコマンドバッファ１２９から受け取るコマンドに基づいて処理して、フレーム用のピクセルデータを生成する。ピクセルデータは、フレームバッファ２２７の一つ、例えば、バッファＸに書き込まれる。この実施の形態では、後処理オブジェクト１３４は、レンダリングオブジェクト１３２によって現在書き込まれているものを除いて、任意の画像バッファ２２６から、例えば、レンダリングオブジェクト１３２がバッファＡに書き込んでいる場合には、バッファＢ及び／又はＣから、フラグメントデータを取得する。
【００４９】
[0063]スキャンアウトエンジン１２４は、フレームバッファ２２７の一つからピクセルデータを読み取り、当該データをディスプレイデバイスに提供する。この実施の形態では、スキャンアウトエンジン１２４は、ＢＳＥＬストレージ領域２０８において特定されているフレームバッファ２２７から読み取りを行ない、好適には、このフレームバッファは、後処理オブジェクト１３４によって書き込まれているフレームバッファと同じでなく、例えば、後処理オブジェクト１３４がフレームバッファＸに書き込んでいる場合には、スキャンアウトエンジン１２４は、バッファＹから読み取りを行なう。スキャンアウトエンジン１２４は、ピクセルデータを変更せずに渡してもよく、或いは、デジタル−アナログ変換、及び／又は、他の信号処理アルゴリズムを適用して、ディスプレイデバイスへの供給のためにデータを適切にフォーマットしてもよい。幾つかの実施の形態では、デジタル−アナログ変換以外の全てのフレーム毎の処理が、後処理オブジェクト１３４によって、ピクセルデータをフレームバッファ２２７に書き込む前に実行されるが、他の実施の形態では、スキャンアウトエンジン１２４がある処理を実行してもよい。
【００５０】
[0064]スキャンアウトエンジン１２４は、好適には、各フレーム用のピクセルの供給をディスプレイデバイスの要件に同調しており、スクリーンピクセルの行の終端（水平帰線として当該分野で知られたもの）や、スクリーンの終端（垂直帰線として当該分野で知られたもの）といったイベントを検出することができる。従来の技術を使用して、スキャンアウトエンジン１２４を実装してもよい。
【００５１】
[0065]代替の実施の形態では、スキャンアウトエンジン１２４は、交互のフレームに対してバッファＸ及びＹを読み取り、後処理オブジェクト１３４は、バッファＹ及びＸに、交互のフレームに対して書き込みを行なう。この実施の形態では、ＢＳＥＬストレージ領域２０８を用いて、セマフォを格納することができ、当該セマフォは、初期化時にのみ、スキャンアウトエンジン１２４及び後処理オブジェクト１３４のオペレーションを同期させるために使用される。例えば、スキャンアウトすべき第１のバッファ（例えば、バッファＸ）用のセマフォは、ＢＳＥＬストレージ領域２０８に格納されてもよい。システムのセットアップ時には、このセマフォは、例えば単一のビットであり、スキャンアウトエンジン１２４がバッファＸの読み取ることを防止するロック（即ち、獲得）状態にセットされる。後処理オブジェクト１３４が第１のフレームをバッファＸに書き込んだ後に、当該後処理オブジェクト１３４は、セマフォを解放し、スキャンアウトエンジン１２４によるバッファＸからの読み取りオペレーションを可能にする。その後、セマフォは、解放状態に留まることができ、適切な同期が維持される。
【００５２】
＜同期技術＞
[0066]スキャンアウトエンジン１２４及び後処理オブジェクト１３４のオペレーションは、好適には、フレーム毎に同期される。このことは、スキャンアウトエンジン１２４によってディスプレイバッファ１２７から読み取られる各フレームについて、後処理オブジェクト１３４が、一つの新規のフレームをディスプレイバッファ１２７に書き込むことを意味する。例えば、後処理オブジェクト１３４は、好適には、一つのフレームをフレームバッファＸに書き込み、一方、スキャンアウトエンジン１２４は、一つのフレームをフレームバッファＹから読み取る。スキャンアウトエンジン１２４がフレームバッファＹの終端に至ったときに、スキャンアウトエンジン１２４は、フレームバッファＸの読み取りに切り替え、一方、後処理オブジェクト１３４は、一つのフレームをフレームバッファＹに書き込む。
【００５３】
[0067]ある実施の形態では、この同期は、トリガ信号を用いて取り扱われる。このトリガ信号は、「トリガ」経路２４６上でスキャンアウトエンジン１２４にアサートされる。トリガ信号は、フレーム毎に一回、生成され、好ましくは、フレーム終端イベントと固定された時間関係で生成される。フレーム終端イベントは、垂直帰線（又はvsync）イベントのようなフレームの終端又はその近くにあるスキャンアウトエンジン１２４に、最後（又は最後からＮ番目）のピクセルを読み取っていること等を伝える任意のイベントであることができる。トリガ信号のアサートに応答して、マルチプロセッサ１２０は、後処理オブジェクト１３４を動作させ、一つの新規のフレームのピクセルデータを生成する。この新たなフレームが生成された後、マルチプロセッサ１２０は、後処理オブジェクト１３４を、次のトリガ信号のアサートまでの間、動作停止させる。
【００５４】
[0068]バッファの同期は、好適には、後処理オブジェクト１３４がフレームバッファ２２７に書き込むことを、当該バッファがスキャンアウトされている間、防止するよう提供される。ある実施の形態では、後処理オブジェクト１３４が新たなフレームを生成し終える度に、当該後処理オブジェクト１３４は、当該新たなフレーム用のフレームバッファ２２７（例えば、Ｘ又はＹ）の識別子をＢＳＥＬストレージ領域２０８に、「ＢＳＥＬ書き込み」経路２４２によって示すように、書き込む。各フレームの開始時には、スキャンアウトエンジン１２４は、どのフレームバッファ２２７を読み取るべきかを、「ＢＳＥＬ読み取り」経路２４４によって示すように、ＢＳＥＬストレージ領域２０８をアクセスすることによって決定する。ＢＳＥＬストレージ領域２０８がフレーム毎に一度のみ読み取られ、フレーム毎に一度だけ書き込まれる限り、これらオペレーションのタイミングを、競合状態を避けるよう調整することができる。例えば、スキャンアウトエンジン１２４は、ＢＳＥＬストレージ領域２０８を、トリガ信号を生成する直前で、後処理オブジェクト１３４が次のフレームを生成してＢＳＥＬの値を更新し終えた後に、アクセスすることができる。
【００５５】
[0069]レンダリングオブジェクト１３２及び後処理オブジェクト１３４のオペレーションは、好適には、互いに同期しない。これは、後処理オブジェクト１３４が、ディスプレイの周期でフレームを生成する一方で、レンダリングオブジェクト１３２がレンダリングの周期で画像を生成し、当該レンダリングの周期がディスプレイの周期と異なってもよい（ディスプレイの周期より遅くてもよい）からである。幾つかの実施の形態では、バッファ同期技術を用いて、後処理オブジェクト１３４は、ある画像（又は画像のグループ）を用いてフレームの一部を生成し、異なる画像（又は画像のグループ）を用いて同じフレームの別の一部を生成する状況を避け、同様に、後処理エンジン１３２がバッファ２２６から読み取りを行なっている間に、レンダリングオブジェクト１３２が画像バッファ２２６に書き込む状況を防止する。特に、画像バッファ２２６へのアクセスを制御して、後処理オブジェクト１４３が、レンダリングオブジェクト１３２によって現在書き込まれている画像バッファ２２６からの読み取りを行なわないようにし、また、レンダリングオブジェクト１３２が、後処理オブジェクト１３４によって依然として必要とされている画像バッファ２２６を上書きしないようにすることができる。バッファの同期メカニズムは、更に、後処理オブジェクト１３４によって読み取るべき画像バッファの選択に関する変更が、後処理されているフレーム間で生じることを定めてもよい。これによって、ティアリング（裂け目）、又は、表示されるフレームの異なる部分における他の視覚的な不一致を避けることができる。
【００５６】
[0070]図２は、制御信号経路２３２、２３４、２３６を介した画像バッファ２２６用の非対称セマフォ及びバッファインデックスに基づくバッファ同期技術を示している。レンダリングバッファ１２６のセマフォ領域２０６は、レンダリングオブジェクト１３２による画像バッファ２２６へのアクセスを制御するためのセマフォ２０７（ＳＡ、ＳＢ、ＳＣ）を格納し、後処理オブジェクト１３４が当該バッファ２２６に存在する古いフラグメントデータを終了するまでの間、新たなフラグメントデータが画像バッファに書き込まれないようにする。各セマフォ２０７は、好適には、「獲得」状態及び「解放」状態を有しており、以下に説明するようにアクセスを制御するために用いられる。一般的な従来のセマフォデータの構造及びフォーマットを、セマフォ２０７を実装するために採用することが可能である。
【００５７】
[0071]レンダリングオブジェクト１３２が新たな画像用のフラグメントデータを書き込み始める前に、レンダリングオブジェクト１３２は、フラグメントデータが書き込まれるべき画像バッファ２２６に対応するセマフォ２０７を、「獲得」経路２３２によって示すように、獲得する試みを行なう。レンダリングオブジェクト１３２は、画像バッファ用のセマフォを、後処理オブジェクト１３４が当該セマフォを解放した後にのみ獲得することができ、更に以下に説明するように、セマフォの解放は、後処理オブジェクト１３４が関連の画像バッファをもはや必要としなくなった時に、発生する。セマフォ２０７が即座に得られない場合には、レンダリングオブジェクト１３２は、そのコマンド処理を停止して、セマフォを獲得できる時まで待機し、その後にレンダリングを進める。後処理オブジェクト１３４がディスプレイの周期（スキャンアウトフレームにつき一回）でバッファを解放する場合、レンダリングオブジェクト１３２は、通常は、待機する必要はない。他の実施の形態では、レンダリングオブジェクト１３２の実行の遅延は、ディスプレイ周期より速いレートで新たな画像をレンダリングすることが要求されない限り、許容し得る。
【００５８】
[0072]レンダリングオブジェクト１３２が画像用のフラグメントデータを画像バッファ２２６の一つに書き込み終えると、当該レンダリングオブジェクト１３２は、当該バッファ用のセマフォ２０７を、「解放」経路２３４によって示すように、解放する。セマフォ２０７（例えば、セマフォＳＡ）の解放は、当該セマフォ２０７が後処理オブジェクト１３４によって以下に説明するように解放されるまでの間、レンダリングオブジェクト１３２が関連のバッファ２２６（例えば、バッファＡ）へアクセスすることを防止する。セマフォ２０７の解放後（又はそれと同時に）、レンダリングオブジェクト１３２は、ＰＰコマンドバッファ１２９に新たなインデックス値を、「インデックス書き込み」経路２３６によって示すように、書き込む。インデックス値は、完了したばかりの画像バッファ２２６を特定し、後処理オブジェクト１３４に、この画像バッファ２２６が現在、処理に利用可能であることを示す。
【００５９】
[0073]各フレームの開始時に、後処理オブジェクト１３４は、インデックス値をＰＰコマンドバッファ１２９から「インデックス読み取り」経路２３８によって示すように、読み取る。ある実施の形態では、インデックスは、ＰＰコマンドバッファ１２９内のコマンドの一つの引数として読み取られる。インデックス値に基づいて、後処理オブジェクト１３４は、当該後処理オブジェクト１３４がどの画像バッファ２２６を後処理用に必要としているかを決定し、必要でない任意の画像バッファ２２６用のセマフォを、「解放」経路２４０によって示すように解放する。そのセマフォ２０７が後処理オブジェクト１３４によって解放されている画像バッファ２２６は、レンダリングオブジェクト１３２に利用可能となる。
【００６０】
[0074]後処理オブジェクト１３４は、好適には、インデックス値が最後のフレームから変化していない場合には、待機又は停止しないことに留意されたい。幾つかの実施の形態では、後処理オブジェクト１３４は、同じ後処理を、インデックス値が変化しているか否かに拘らず、実行し、インデックス値が変化していない場合には、後処理オブジェクト１３４によって生成される新たなフレームは、前のフレームと同一である。他の実施の形態では、後処理オブジェクトのあるアクティビティ又は全てのアクティビティが、インデックスが変化しているか否かを条件とする。かかる実施の形態では、後処理オブジェクト１３４は、好適には、前のフレームに使用されたインデックス値を記憶し、それをＰＰコマンドバッファ１２９におけるインデックスと比較して、インデックスが変化しているか否かを決定する。インデックスが変化していない場合には、後処理オブジェクト１３４は、何も行なわないか、又は、異なるセットの命令を実行する。
【００６１】
[0075]本明細書での同期メカニズムは、セマフォ２０７が後処理オブジェクト１３４のオペレーションではなくレンダリングオブジェクト１３２のオペレーションを留めさせる点で、「非対称」である。この構成によって、レンダリングオブジェクト１３２が新しい画像を生成するレートとは無関係に、新たなフレームをディスプレイの周期で生成することが可能となる。デッドロックを避けるために、画像バッファ２２６の数は、好適には、後処理オブジェクト１３４によって使用されていない少なくとも一つの画像バッファ２２６が常に存在するに十分多くなるよう選択される。例えば、後処理オブジェクト１３４が、Ｍ個の最新の画像を、実行すべき特定のオペレーション用に必要とする場合には、少なくともＭ＋１個の画像バッファが提供される。追加の画像バッファを提供することによって、レンダリングエンジンが、スキャンアウトエンジンに更に先行して動作することが可能になる。追加の画像バッファを用い、レンダリングオブジェクト１３２においてトリプルバッファのレンダリングを、必要に応じて実装することもできる。
【００６２】
[0076]本明細書に説明した特定の同期技術は、例示的なものであり、他の技術を使用してもよいことを理解すべきである。幾つかの実施の形態では、バッファの同期を完全に省略し、表示されるフレームにおけるティアリングを許容することもある。
【００６３】
＜コマンドストリーム＞
[0077]幾つかの実施の形態では、レンダリングコマンドストリーム及び後処理コマンドストリームが別に管理される。より具体的には、上述したように、レンダリングコマンドバッファ１２８が、好適には、当該レンダリングコマンドバッファ１２８内のレンダリングコマンドが、レンダリングオブジェクト１３２によって一度実行され、新たなコマンドのセットが、レンダリングすべき各画像用にレンダリングコマンドバッファ１２８に書き込まれるように、実装される。一方、後処理オペレーションの所望のセットは、通常、あるフレームから次ぎのフレームへと一貫しており、同一セットの後処理コマンドを各フレームについて書き込むことは非効率である。ＰＰコマンドバッファ１２９が無限ループで動作している場合には、新しい後処理コマンドをＰＰコマンドバッファ１２９に書き込むことは更に複雑である。後処理オブジェクト１３４の実行はグラフィックドライバとは非同期であり、ドライバは、通常、後処理オブジェクト１３４が任意の所与の時間で実行されるか否か、又は、ループ内のどのコマンドが実行されるのかを知らない。
【００６４】
[0078]したがって、ＰＰコマンドバッファ１２９は、好適には、グラフィックドライバが、後処理コマンドの全プログラムをコマンドストリームとしてＰＰコマンドバッファ１２９に書き込むことができるように、実装される。このプログラムは、同じプログラムを全フレームに対して再実行できるよう、実行後もＰＰコマンドバッファ１２９内に維持される。したがって、新しい後処理コマンドは、後処理が変更されるべき場合にのみ、ＰＰコマンドバッファ１２９に書き込まれる必要がある。
【００６５】
[0079]レンダリングコマンドバッファ１２８及びＰＰコマンドバッファ１２９用のコマンドストリームの構造の例を、ここで、説明する。
【００６６】
[0080]図３Ａは、本発明の実施の形態に係るレンダリングコマンドバッファ１２８内にバッファリングすることができるレンダリングコマンドストリーム３００の一部を概略的に示す図である。各新規の画像について、コマンドシーケンスは、「ＡＣＱ」コマンド３０６及び３０８で始まり、当該コマンドは、レンダリングオブジェクト１３２に書き込むべき次の画像バッファ２２６用のセマフォ２０７を処理前に獲得するよう命令する（例えば、ＡＣＱコマンド３０６の場合にバッファＡ用のセマフォＳＡ、ＡＣＱコマンド２０８の場合にバッファＢ用のセマフォＳＢ）。上述したように、セマフォ２０７が獲得できない場合には、レンダリングオブジェクト１３２は、それを獲得できるまでの間、待機する。
【００６７】
[0081]「ＲＣＭＤ」コマンド３１０及び３１２は各々、画像をレンダリングするためのコマンド及びデータの完全なセットである。実際には、任意の数のレンダリングコマンドが、画像毎に含まれることがある。例えば、ＲＣＭＤコマンド３１０及び３１２は、頂点（又は幾何）処理コマンド、ラスタライズコマンド、フラグメントシェーディングコマンド等の任意の組み合わせを含むことがある。ＲＣＭＤコマンド３１０及び３１２は、種々のレンダリングコマンドに関連づけられた適切なデータ（例えば、変換マトリックス、頂点のピリミティブへのグルーピング、等）を含み得る。ある実施の形態では、レンダリングコマンドは、マルチプロセッサ１２０による実行に適したマイクロ命令として供給されることがあり、他の実施の形態では、実行前のホスト１２０によるコマンドのデコードが必要となることがある。幾つかの実施の形態では、レンダリングコマンドのシーケンスがまた、ループ、ｉｆ−ｔｈｅｎステートメント等といったフロー制御コマンドを含むこともある。一般的に、ＲＣＭＤコマンド３１０及び３１２は、本質的に従来からのものであり、その詳細な説明は本発明の理解に重要ではないので省略する。
【００６８】
[0082]各画像の最後には、「ＦＬＩＰ」コマンド３１４及び３１６があり、当該コマンドは、現在の画像のレンダリングが完了したことを示す。ＦＬＩＰコマンドに応答して、レンダリングオブジェクト１３２は、好適には、その書き込みの対象を現在のレンダリングバッファから次ぎのレンダリングバッファに切り替え（例えば、ＦＬＩＰコマンド３１４の場合にはバッファＡからバッファＢに切り替え）、また、直前に完了したレンダリングバッファ用のセマフォ２０７を解放する（例えば、ＦＬＩＰコマンド３１４の場合には、セマフォＳＡを解放する）。セマフォ２０７の解放後、レンダリングオブジェクト１３２は、ＰＰコマンドバッファ１２９内のインデックス値を、直前に完了したレンダリングバッファを特定する新たな値（例えば、ＦＬＩＰコマンド３１４の場合にはバッファＡ）で更新する。加えて、ＦＬＩＰコマンドの処理には、カウンタ、又はレンダリングオブジェクト１３２によって維持される他の変数をリセットすることもある。他の従来の画像終了（end-of-image）処理も、ＦＬＩＰコマンドに応答して実行される。
【００６９】
[0083]図３Ｂは、本発明の実施の形態に係るＰＰコマンドバッファ１２９に格納される後処理プログラム（又はストリーム）３２０を概略的に示す図である。この実施の形態では、プログラム３２０は、無限ループを実装しており、当該無限ループは、その引数が、上述したようにレンダリングオブジェクト１３２によって書き込まれ、また、上書きされるインデックスであるインデックスコマンド３２２、一以上の後処理（「ＰＣＭＤ」）コマンド３２６及び３２８、一以上のロケーション（「ＬＯＣ」）コマンド３３０及び３３２、ＢＳＥＬ更新（「ＢＵＰＤ」）コマンド３３４、並びに、ループの開始に戻るための最終無条件ジャンプ（「ＪＭＰＢ」）コマンド３３６を含む。
【００７０】
[0084]インデックスコマンド３２２は、最初に実行されるものであり、現在のインデックス値を後処理オブジェクト１３４に提供する。幾つかの実施の形態では、後処理オブジェクト１３４が、現在のインデックス値を、後処理オブジェクト１３４によってアクセス可能な状態レジスタ（図２又は図３Ｂには図示せず）に記憶されている直前に使用されたインデックス値と比較し、更なる処理が、この比較の結果に基づいて制御される。例えば、インデックス値が変更されていない例では、次の表示フレームは、現在の表示フレームと同じとなる。その場合には、後処理オブジェクト１３４は、新たなフレームを生成せず、ＢＳＥＬ値を変更せずに記憶位置２０８（図２）に残して、スキャンアウトエンジン１２４が、同じフレームバッファ２２７を、インデックス値が変化するまでの間、複数回連続して単に読み取るようにする。他の実施の形態では、後処理オブジェクト１３４が、インデックス値が変更されていない場合でも、ＬＣＤオーバードライブ値の調整、又は、フェイドイン、フェイドアウト、又はディゾルブといった遷移効果を経て進行するようなあるアクションを行なうことが望ましいことがある。他の実施の形態では、後処理オブジェクト１３４は、インデックス値が変更されているか否かに拘らず、同じコマンドを実行する。初期化時には、インデックス値は、ナル（null）値に設定され、画像バッファ２２６に画像がレンダリングされていないことを示し、後処理オブジェクト１３４が、好適には、ナル値を検出して、適切なアクションを行なう（例えば、フレームバッファ２２７の全ピクセルにブランクスクリーン値を書き込む）。
【００７１】
[0085]ＰＣＭＤコマンド３２６及び３２８は、実行すべき種々の後処理オペレーション用の命令を表す。実際には、任意の数のＰＣＭＤコマンドがコンテンツ３２０に含まれることがある。上述したＲＣＭＤ（レンダリング）コマンドと同様に、ＰＣＭＤコマンドは、マルチプロセッサ１２０による直接の実行に適した形の命令で供給されてもよく、他の実施の形態では、実行前にホスト１２０によるコマンドのデコードが要求されてもよい。また、ＲＣＭＤコマンドと同様に、ＰＣＭＤコマンドは、フロー制御コマンドを必要に応じて含んでいてもよい（例えば、幾つかのコマンドは、インデックスエントリ３２４内のインデックス値が変化しているか否かを条件としてもよい）。
【００７２】
[0086]更に以下に説明するように、幾つかの実施の形態では、後処理オブジェクト１３４は、レンダリングオブジェクト１３２と同じ処理エンジンを用いて実行され、その結果、ＲＣＭＤコマンド３１０及び３１２（図３Ａ）として与えることができるコマンドのシーケンスは何れも、ＰＣＭＤコマンド３２６及び３２８として与えることが可能である。加えて、後処理オペレーションに特有の専用のＰＣＭＤコマンドが、定義されていてもよい。原則として、（上述した一以上の例を含む）後処理オペレーションの任意の組み合わせを、ＰＣＤＭコマンド３２６及び３２８の適切なシーケンスを介して実装することができる。幾つかの実施の形態では、ＰＣＭＤコマンド３２６及び３２８は、ＬＣＤオーバードライブ又はカーソルオーバーレイといったフレーム毎に発生する処理用にのみ使用される。しかしながら、広範な後処理オペレーションをＰＣＭＤコマンド３２６及び３２８を介してプログラムできることを理解されたい。
【００７３】
[0087]ＬＣＤコマンド３３０及び３３２は、一以上の画像バッファ２２６を特定のＰＣＭＤコマンド又はＰＣＭＤコマンドのグループ用のデータソースとして特定するために、インデックスエントリ３２４と共に使用される。インデックスエントリ３２４は、レンダリングオブジェクト１３２によって上述したＦＬＩＰコマンドに応答して書き換えられるものであり、直前に完了した画像バッファ２２６を特定する。ＬＯＣコマンド３３０及び３３２は、直前に完了した画像バッファ２２６、又は、以前に完了した画像バッファ２２６を、必要に応じて参照することができる。ある実施の形態では、ＬＯＣコマンド３３０及び３３２は、直前に完了した画像バッファと相対的に画像バッファ２２６を特定する。例えば、Ｎ個の画像バッファ２２６が存在しており、これら画像にインデックス値０，１，．．．，Ｎ−１が割り当てられており、インデックスエントリ３２４内の値をＲによって示すものとする。ＬＯＣコマンドは、ＬＯＣ＝Ｒの形式を採って直前に完了した画像バッファを特定し、又は、ＬＯＣ＝（Ｒ−１）ｍｏｄＮの形式を採って次ぎに直前のものを特定する等できる。相対的な参照を使用する場合には、インデックスエントリが更新されるときにＬＯＣコマンド３３０及び３３２を変更する必要はない。幾つかの実施の形態では、全てのＰＣＭＤコマンドに適用可能な一セットのＬＯＣコマンド、又は一つのＬＯＣコマンドが存在してもよい。
【００７４】
[0088]ＢＵＰＤコマンド３３４及びＪＭＰＢコマンド３３６は、後処理ループを完了する。ＢＵＰＤコマンド３３４は、後処理オブジェクト１３４に、新たに書き込まれたフレームバッファ２２７の識別子を、ＢＳＥＬストレージロケーション２０８に書き込むよう命令し、スキャンアウトエンジン１２４が、次のフレームとして、それを読み込むようにする。ＪＭＰＢコマンド３３６は、破線の矢印３３８によって示すように、制御をプログラム３２０の始めに戻す。以下に説明するように、ＪＭＰＢコマンド３３６は、後処理プログラム用の完了信号（本明細書では、「フレーム完了イベント」とも称する信号）としても働くことができる。即ち、後処理オブジェクト１３４がＪＭＰＢコマンド３３６に遭遇すると、後処理オブジェクト１３４は、アイドル状態に入って、次のトリガイベントを待つ。例えば、以下に説明するように、後処理オブジェクト１３４は、ＪＭＰＢコマンド３３６に至った際に、コンテキストを切り替えられる（スイッチアウトされる）ことがある。
【００７５】
[0089]幾つかの実施の形態では、ＰＣＭＤコマンド３２６及び３２８が、関連の状態パラメータを有している。例えば、倍率パラメータは、拡大又は縮小を実装するＰＣＭＤコマンドに関連付けられ、或いは、オーバーレイサイズ又は位置パラメータは、合成処理を実装するＰＣＭＤコマンドに関連づけられる。これらパラメータは、後処理コマンドのストリームに含められてもよく、或いは、後処理オブジェクトがアクセス可能な異なる記憶位置（例えば、ＰＰコマンドバッファ内のパラメータセクション、別個のバッファ、又は、実行コア内のパラメータレジスタ）に書き込まれてもよい。パラメータの更新は、後処理コマンドストリームを再書き込みすること、後処理コマンドストリームを選択的に変更すること、或いは、バッファ又はレジスタの内容を変更することによって、処理することができる。コマンド及びパラメータの変更について、更に、以下に説明する。
【００７６】
[0090]本明細書に説明するプログラムストリームは、例示的なものであり、変更及び改良が可能であることを理解されたい。任意の適切なコマンドセットを用いて、ＲＣＭＤ及びＰＣＭＤコマンドを実施してもよい。ＪＭＰＢコマンドではなく、他の条件をフレーム完了イベントとして用いて、後処理プログラムの終了を示してもよい。例えば、ＰＰコマンドバッファが、「ｐｕｔ」ポインタ及び「ｇｅｔ」ポインタ（図１におけるレンダリングコマンドバッファ１２８を参照して上述したポインタに類似するもの）を用いて実装されている場合には、「ｐｕｔ」ポインタは、プログラムにおける最後のコマンドの位置を参照する。「ｇｅｔ」ポインタが「ｐｕｔ」ポインタと同じ位置を参照する場合には、最後のコマンドに到達している。このことの発生を、後処理オブジェクトがフレームを完了したことを示すフレーム完了イベントとして用いることも可能である。他の実施の形態では、フレーム用の後処理の完了に一意に関連づけられた任意のイベント又は条件を、フレーム完了イベントとして使用することができる。
【００７７】
＜マルチプロセッサ＞
[0091]図４は、本発明の実施の形態に係るマルチプロセッサ１２０の簡易化したブロック図である。マルチプロセッサ１２０は、調停ユニット４０２及び実行コア４０４備えており、実行コア４０４は、コンテキストマネージャ４０６を有している。
【００７８】
[0092]実行コア４０４は、略従来型のデザインを有しており、任意の所望のマイクロアーキテクチャ及び／又は命令セットを実施する。幾つかの実施の形態では、実行コア４０４は、種々のオペレーション（加算、乗算、ベクトル演算、算術機能、フィルタリングアルゴリズム、メモリアクセス、等）を実行するための複数の機能ユニット４０５を、関連の制御ロジック４０７と共に、備えている。この制御ロジック４０７は、到来するコマンドを機能ユニット用の実行可能な命令へとデコードし、各命令用に必要なオペランドを特定して収集し、機能ユニットに命令を発行し、結果を他の機能ユニット又はレジスタファイル（明示せず）に転送するためのものである。実行コア４０４は、ハードウェアの状態のアスペクトを維持する種々の他のレジスタを備えていてもよい。実行コア４０４はまた、（図１に示すようにグラフィックメモリ１１６内に存在し得る）レンダリングバッファ１２６及びディスプレイバッファ１２７にアクセスするように構成されている。幾つかの実施の形態では、複数の並列実行コア４０４が、各コア４０４がシーン、画像、又はフレームの異なる部分について動作するように、提供されてもよい。実行コア４０４の特定のアーキテクチャは本発明に重要ではなく、特定の要素も同様である。
【００７９】
[0093]ある実施の形態では、実行コア４０４は、二つの独立の処理チャンネルをサポートしており、それらは、後処理オブジェクト１３４（図１）を実施する高優先度チャンネル（ＨＰＣ）とレンダリングオブジェクト１３２を実施する通常優先度チャンネル（ＮＰＣ）である。個別のアーキテクチャの状態（コンテキスト）は、各チャンネルに対してコンテキストマネージャ４０６によって維持される。より詳細には、ＮＰＣコンテキストブロック４０８は、ＮＰＣ用に格納されたアーキテクチャの状態を含んでおり、ＨＰＣコンテキストブロック４１０は、ＨＰＣ用に格納されたアーキテクチャの状態を含んでいる。アーキテクチャの状態は、レジスタ又は他の適切なハードウェアに格納されてもよい。
【００８０】
[0094]コンテキストマネージャ４０６は、実行コア４０４の機能ユニット４０５及び制御ロジック４０７が、現在アクティブなチャンネル用の適切なアーキテクチャへアクセスすることを可能とし、その処理の間のあるポイントで切り替えられた（スイッチアウトされた）チャンネルが、スイッチバックされるときに同じポイントで再開することを可能とする。幾つかの実施の形態では、実行コア４０４は、アクティブなレジスタのセット（図４には図示せず）を有しており、コンテキストマネージャ４０６は、チャンネルの切り替え（例えば、ＨＰＣからＮＰＣへのスイッチ）を、最初に「古い」チャンネル（例えば、ＨＰＣ）のアーキテクチャの状態をアクティブなレジスタのセットから適切なコンテキストブロック（例えば、ＨＰＣコンテキストブロック４１０）にコピーし、次いで、「新しい」チャンネル（例えば、ＮＰＣ）のアーキテクチャの状態を適切なコンテキストブロック（例えば、ＮＰＣコンテキストブロック４０８）からアクティブなレジスタのセットにコピーすることによって、実行する。他の実施の形態では、実行コア４０４は、ＮＰＣコンテキストブロック４０８又はＨＰＣコンテキストブロック４１０の何れかにおける対応のレジスタに選択的にアクセスすることができ、コンテキストマネージャ４０６は、実行コア４０４をコンテキストに依存した方式で適切なレジスタに向ける。コンテキスト切り替えの特定の実装形態は、本発明にとって重要ではなく、ある実施の形態では、十分に高速（例えば、３００マイクロ秒又はそれより高速）なコンテキストの切り替えを提供する任意の実装形態が使用される。
【００８１】
[0095]調停ユニット４０２は、どのチャンネルが任意の所与の時間においてアクティブとなるべきかを決定する。ある実施の形態では、調停ユニット４０２は、レンダリングコマンドバッファ１２８から候補コマンドを受け取るＮＰＣ入力４１２、及び、後処理コマンドバッファ１２９から候補コマンドを受け取るＨＰＣ入力４１４を有している。調停ユニット４０２はまた、（図２を参照して上述した）トリガ信号をスキャンアウトエンジンから受け取るトリガ入力４１６、及び、イベント信号を実行コア４０４から受け取るイベント入力４１８を有している。これら入力に基づいて、各サイクルの間に、調停ユニット４０２は、ＨＰＣ又はＮＰＣの何れかをアクティブチャンネルとして選択し、実行コア４０４に、選択したチャンネルを特定するコンテキスト信号を（経路４２２上で）送信し、選択したチャンネル用の候補コマンドを（経路４２２上で）送信する。選択されていない候補コマンドは、次のサイクルで再び入力に現れ、その時に、当該候補コマンドは、選択されることもあり、選択されないこともある。適切なタイミング及び制御回路（図４には図示せず）を使用して、実行コア４０４が当該コマンド用の正しいコンテキスを有するときに、選択されたコマンドが実行されるようにしてもよく、かかる回路は、略従来型の構成を有していてもよい。
【００８２】
[0096]図５は、調停ユニット４０２において実施することができる選択ロジックプロセス５００のフロー図である。この実施の形態では、スキャンアウトエンジン１２４は、トリガ信号を経路４２４上に、各垂直帰線（又は別のフレームの終端）イベントと実質的に同期して生成する。後処理コマンドバッファ１２９は、無限ループ用のコマンドを、無条件ＪＭＰＢコマンドと共に、図３Ｂに示すように含む。
【００８３】
[0097]初期化後（ステップ５０１）、調停ユニット４０２は、ＮＰＣに切り替える（スイッチインする）（ステップ５０２）。各サイクルにおいて、調停ユニット４０２は、トリガ信号のアサートをチェックする（ステップ５０４）。トリガ信号がアサートされていない限り、レンダリングコマンドバッファ１２８からのコマンドが、続けて選択される（ステップ５０６）。レンダリングコマンドバッファ１２８内のコマンドに従って、画像が、レンダリングされ、フラグメントデータがレンダリングバッファ１２６に書き込まれる。即ち、レンダリングオブジェクト１３２が動作する。ＨＰＣは、この時間においては、非アクティブである。
【００８４】
[0098]トリガ信号がステップ５０４において検出されると、調停ユニット４０２は、コンテキストをＨＰＣに切り替え（ステップ５０８）、ＰＰコマンドバッファ１２９からの選択コマンドを開始する（ステップ５１０）。調停ユニット４０２は、ＰＰコマンドバッファ１２９からのコマンドを、無条件ＪＭＰＢコマンドがステップ５１２において検出されるまでの間、選択し続ける。ＰＰコマンドバッファ１２９内のコマンドに従って、後処理がレンダリングバッファ１２６内のフラグメントデータに対して実行され、得られたスクリーンピクセルデータがディスプレイバッファ１２７に書き込まれる。即ち、後処理オブジェクト１３４が動作する。フレームに対する後処理の完了は、ＪＭＰＢコマンドによって、上述したように示される。このコマンドが検出されると（ステップ５１２）、当該コマンドは、調停ユニット４０２がＮＰＣコンテキストに切り替えを行なった（スイッチインした）後に、コア４０４に転送されて（ステップ５１４）、ステップ５０２に戻る。幾つかの実施の形態では、ＪＭＰＢコマンドは、調停ユニット４０２にのみ影響し、コア４０４には転送されない。その時点において、レンダリングオブジェクト１３２が再開する。
【００８５】
[0099]プロセス５００は、ディスプレイフレームレート（例えば８０Ｈｚ）に対応する時間間隔で、レンダリングを一時停止して、後処理が、デジスプレイ周期で成されるようにする。一般的に、この後処理のための周期的なレンダリングの一時停止は、後処理によって費やされる時間が新しい画像を所望の速度（例えば、３０Ｈｚ）でレンダリングし得ない程に長くない限り、グラフィックサブシステムの全パフォーマンスに悪影響を及ぼさない。現代の実行コア及び典型的な後処理オーレーションのシーケンスに利用可能な処理パワーを考えれば、許容可能なパフォーマンスを維持することが可能である。
【００８６】
[0100]本明細書に説明したマルチプロセッサ及び調停ロジックは、例示的なものであり、変更及び改良が可能であることが理解されよう。「コンテキストの切り替え（コンテキストスイッチ）」は、あるストリームの命令から他のストリームの命令へ、第１のストリームの任意のポイントにおいて切り替えを行ない、次いで原則的に同じポイントにおいて第１のストリームへ戻ることができるプロセッサのオペレーションを説明するための一般的な用語として本明細書で使用されており、当該用語は如何なる特定のプロセッサアーキテクチャに限定されるものではない。従来のマルチスレッドアーキテクチャを含む如何なるマルチスレッドアーキテクチャも、採用することができ、如何なるメカニズムを用いて、一時的にアイドルのプロセス又はコンテキストの状態を保存してもよい。加えて、ＨＰＣは、当該ＨＰＣが新たなフレームをディスプレイ周期によって定まるスケジュールで確実に生成し終えることができる限り、ＮＰＣより絶対的な優先度を与えられる必要はない。また、本明細書に説明した例示の調停ロジックがイベント入力４１８を使用せず、異なる調停ロジックが当該入力を使用してもよいことに留意すべきである。例えば、後処理オブジェクト１３４が、入力経路４１８上にイベント信号を生成して、当該後処理オブジェクト１３４がフレームを終了していることを調停ユニット４０２に知らせることができる。
【００８７】
[0101]別の実施の形態では、レンダリングオブジェクト及び後処理オブジェクトを、個別のバッファ読み取り経路をもつ独立した処理エンジンを用いて実施してもよい。この実施の形態では、レンダリングオブジェクト及び後処理オブジェクトは並列に実行することができ、これらオブジェクト間のコンテキストの切り替えは必要ない。
【００８８】
＜後処理プログラムの変更＞
[0102]上述した実施の形態では、ＰＰコマンドバッファ１２９は、一般的に、フレーム毎に更新されない。ＰＰコマンドバッファ１２８は、例えば、図１のＣＰＵ１０２上で動作するグラフィックドライバによって、後処理オブジェクト１３４がアイドルとなっている任意の時間に、更新されてもよい。しかしながら、かかる更新は、如何なる特定の画像の表示とも同期されない。代わりに、ＰＰコマンドバッファ１２９の更新は、一般的に、更新後に次のフレームに対して実施される。複数の更新が成される場合には、全ての更新が同じフレームに対して実施されることは保証されない。
【００８９】
[0103]他の実施の形態では、後処理オペレーションの変更を特定の画像に同期することが可能である。このオプションの特徴はまた、制御すべき複数の更新を同じフレームに対して実施することを可能にする。かかる同期は、例えば、複数のＰＰコマンドバッファ１２９を実装し、レンダリングオブジェクト１３２がＰＰコマンドバッファ１２９のコンテンツ、及び、選択が任意の所与の時間において読み取られるべきＰＰコマンドバッファ１２９の選択を制御することで、提供することができる。
【００９０】
[0104]図６は、複数のＰＰコマンドバッファ６０２（１）〜６０２（３）を実装する本発明の実施の形態に係るマルチプロセッサ６００の簡易化したブロック図である。マルチプロセッサ６００は、調停ユニット６０２、及び、コンテキストマネージャ６０８を有する実行コア６０６を備えている。これらコンポーネントは、上述した調停ユニット４０２、実行コア４０４、及びコンテキストマネージャ４０６に略類似するものであり、したがって、ホスト６００は、後処理オブジェクト１３４を実施するＨＰＣ、及び、レンダリングオブジェクト１３２を実施するＮＰＣを提供する。マルチプロセッサ６００はまた、ＰＰＣコマンドバッファ６０２（１）〜６０２（３）の選択を制御する更なるロジックを備えている。
【００９１】
[0105]より詳細には、ＰＰコマンドバッファ６０２（１）〜６０２（３）の各々は、候補後処理コマンドを選択回路（例えばマルチプレクサ）６１０に供給する。選択回路６１０は、当該候補のうちの一つを、ホスト６００のＰＰインデックスレジスタ６１２に格納された「ＰＰインデックス」値に応答して選択する。選択された候補は、ＨＰＣ候補命令として調停ユニット６０４に提供される。調停ユニット６０４は、上述したＨＰＣ及びＮＰＣの候補命令から選択を行なうことができる。
【００９２】
[0106]ＰＰインデックスレジスタ６１２は、ホスト６００へレンダリングコマンドバッファ６１４を介して供給されるレンダリングコマンドストリームに含めることができる特定のコマンドに応答して、ＮＰＣによって、書き込まれる。図７は、適切なコマンドを有するレンダリングコマンドストリーム７００の一部を示す図である。ストリーム７００では、ＡＣＱコマンド７０２、ＲＣＭＤコマンド７０４、及び、ＦＬＩＰコマンド７１０は、図３Ａを参照して上述したコマンドに略類似するものである。ＰＰコマンドバッファ選択（「ＳＥＬＰＰ」）コマンド７０６、及びＰＰコマンドバッファ書き込み（「ＷＲＰＰ」）コマンド７０８は、特定の画像に同期される後処理オペレーションの変更を実施する。
【００９３】
[0107]より詳細には、ＳＥＬＰＰコマンドは、（ＮＰＣにおいて実施されている）レンダリングオブジェクト１３２に、コマンドバッファ６０２（１）〜６０２（３）のうちの書き込むべき一つのバッファを選択するよう、命令する。上述（図２）したセマフォ２０７に類似のセマフォメカニズム、又は他の制御メカニズムを使用して、レンダリングオブジェクトが後処理オブジェクト１３４によって未だ使用されているＰＰコマンドバッファ６０２を選択することを防止することができる。
【００９４】
[0108]ＷＲＰＰコマンド７０８は、好適には、データを（図７には明示せず）、選択されたＰＰコマンドバッファ６０２に書き込むべき後処理プログラムの形態で伴う。このプログラムは、図３Ｂに示す形態を有することができ、また、必要に応じて異なる形態を有することができる。レンダリングオブジェクト１３２は、ＷＲＰＰコマンド７０８を、関連のプログラムを選択されたＰＰコマンドバッファ６０２に、図６に示す「ＰＰＣ書き込み」経路６１６を介して書き込むことによって、実行する。経路６１６は、プログラム情報をＰＰコマンドバッファ６０２（１）〜６０３（３）のうちの一つのみに選択的に導く適切な回路を有していてもよく、かかる回路は、従来の構成を有していてもよい。幾つかの実施の形態では、レンダリングオブジェクト１３２によって完了されたところの画像バッファを特定するインデックスのエントリが、ＷＲＰＰコマンド７０８の実行の間に、ＰＰコマンドバッファ６０２に書き込まれる。
【００９５】
[0109]その後、レンダリングオブジェクト１３２は、ＦＬＩＰコマンド７１０を実行し、選択されたＰＰコマンドバッファ６０２の識別子をＰＰインデックスレジスタ６１２に、「ＰＰＩ書き込み」経路６１８を介して書き込む。適切なインターロック（例えば、調停ユニット６０４によって制御されるラッチ又はトランスミッションゲート）を、経路６１８に提供して、ＰＰインデックスレジスタ６１２の更新を、ＨＰＣがアクティブとなっている間に行なわれないようにしてもよい。例えば、レンダリングオブジェクト１３２によるＰＰインデックス書き込みオペレーションの実行を、ＰＰインデックスレジスタ６１２が後処理オブジェクト１３４によって使用されている間は、引き延ばしてもよい。この実施の形態では、ＷＲＰＰコマンドが、適切なインデックス値を選択されたＰＰコマンドバッファ６０２に書き込むことを含み、別個のインデックスの更新オペレーションが必要でないことに留意されたい。
【００９６】
[0110]（ＨＰＣにおいて実施されている）後処理オブジェクト１３４は、どのＰＰコマンドバッファ６０２が、最後の反復で読み取られたか、また、「ＰＰＩ読み取り」経路６２０を介したＰＰインデックスレジスタ６１２への読み取りアクセス権をもっていたかに関する履歴を保持する。従って、後処理オブジェクト１３４は、（ＰＰインデックスレジスタ６１２によって特定される）現在のＰＰコマンドバッファ６０２と最後に読み取られたＰＰコマンドバッファ６０２が同じであるか否かを判定することができ、同じでない場合には、後処理オブジェクト１３４が、最後に読み取られたＰＰコマンドバッファ６０２用のセマフォを解放し、同じ場合には、最後に読み取られたＰＰコマンドバッファ６０２を再書き込みのために解放する。
【００９７】
[0111]幾つかの実施の形態では、ＳＥＬＰＰコマンド７０６及びＷＲＰＰコマンド７０８が、レンダリングコマンドストリーム７００内に、後処理プログラムが変更されるべき画像のためのみに、含められている。他のフレームについては、これらコマンドは省略することができ、この場合には、ＦＬＩＰコマンド７１０は、好適には、ＰＰインデックスレジスタ６１２内に格納された値を変更しない。代わりに、現在のＰＰコマンドバッファ６０２用のインデックスの更新を実行してもよい。したがって、同じＰＰコマンドバッファ６０２を、任意の数の連続するフレームに使用することができ、新たなＰＰコマンドバッファ６０２を、後処理プログラムが実際に変更される場合にのみに使用することができる。
【００９８】
[0112]他の実施の形態では、ＰＰコマンドバッファ６０２内の後処理プログラムは、完全に書き換えられるのではなく、ＷＲＰＰコマンドバッファによって増分的に更新される。例えば、初期化において、各ＰＰコマンドバッファ６０２には、同じ「デフォルト」の後処理プログラムがロードされてもよい。レンダリングオブジェクト１３２は、プログラムの部分（例えば種々のオペレーション用のパラメータ）を必要に応じて変更し、インデックス値を更新する。上述したＳＥＬＰＰ及びＷＲＰＰコマンドを、この実施の形態に採用して、ＷＲＰＰコマンドが、新たなコマンド（又はパラメータ値だけ）と同様に上書きすべき選択されたＰＰコマンドバッファ６０２内のエントリを特定してもよい。
【００９９】
[0113]当業者は、他の同期スキームも可能であることを認識するであろう。例えば、どのＰＰコマンドバッファが次に読み取られるべきかに関する情報は、調停ユニット内、ＨＰＣコンテキスト内のメモリ、又は、必要に応じて他の場所に格納されてもよい。
【０１００】
＜複数のディスプレイヘッド＞
[0114]当該技術においては公知のように、ＧＰＵは、複数のディスプレイデバイスを駆動するための複数のディスプレイヘッドを用いて設計されている。別個のスキャンアウトエンジンが、通常、各ディスプレイヘッドに提供される。これは、異なるディスプレイデバイスが、異なるピクセル又はフレームレートで動作することがあり、又は、異なるピクセルフォーマットの要件を有することがあるからである。
【０１０１】
[0115]図８は、本発明の実施の形態に係り、ディスプレイデバイス０（明示せず）を駆動するための第１のスキャンアウトエンジン８０２（１）、及び、ディスプレイデバイス１を駆動するための第２のスキャンアウトエンジン８０２（２）をサポートするマイクロプロセッサ８０４を示す簡易化したブロック図である。マルチプロセッサ８０４は、調停ユニット８０６と、コンテキストマネージャ８１０を有する実行コア８０８と、を備えている。これらコンポーネントは、マルチプロセッサ８０４が二つのＨＰＣ（本明細書では、ＨＰＣ０及びＨＰＣ１として示す）及び一つのＮＰＣをサポートすることを除いて、図４における対応のコンポーネントと略同様である。各ＨＰＣは、異なる後処理オブジェクトを実装し、ＨＰＣ０はディスプレイデバイス０用であり、ＨＰＣ１はディスプレイデバイス１用であり、ＮＰＣは、両後処理オブジェクトによって使用されるべき画像を提供するインスタンス化されたレンダリングオブジェクトを含んでいる。幾つかの実施の形態では、複数のレンダリングオブジェクトが存在し、当該レンダリングオブジェクトによって生成された画像が一以上の後処理オブジェクトによって所望の任意の方式で使用されてもよい。したがって、実行コア８０８は、少なくとも三つのコンテキストをサポートし、調停ユニット８０６は、後述するように３方の（又はそれより多い）調停を実行する。
【０１０２】
[0116]各スキャンアウトエンジン８０２（１）及び８０２（２）は、それぞれに対応のディスプレイデバイス用の適切なパラメータ（例えば、ピクセルレート、フレームレート）で動作する。異なるディスプレイデバイス用の後処理オペレーションは異なってもよいので、ＨＰＣ０に実装された後処理オブジェクトは、好適には、ディスプレイバッファ８２０（１）にフレームを書き込み、ＨＰＣ１に実装された後処理オブジェクトは、物理的に又は論理的に別個のディスプレイバッファ８２０（２）にフレームを書き込む。ディスプレイバッファ８２０（１）は、スキャンアウトエンジン８０２（１）によって読み取られ、ディスプレイバッファ８２０（２）は、スキャンアウトエンジン８０２（２）によって読み取られる。ＨＰＣ０及びＨＰＣ１は、両者共に、同じレンダリングバッファ８２２から読み取りを行なってもよく、また、そこに格納された同じ画像又は異なる画像を読み取ってもよく、或いは、異なるレンダリングバッファ８２２から読み取りを行なってもよい。
【０１０３】
[0117]調停ユニット８０６は、ＮＰＣ用の候補コマンドストリームをレンダリングコマンドバッファ８１２経由で、ＨＰＣ０用の候補コマンドストリームをＰＰコマンドバッファ８１４（１）経由で、ＨＰＣ１用の候補コマンドストリームをＰＰコマンドバッファ８１４（２）経由で、受け取る。一般的に、ＰＰコマンドバッファ８１４（１）及び８１４（２）は、異なるディスプレイデバイス用の所望の後処理オペレーションが異なることがあるので、異なる後処理プログラムを、提供してもよい。
【０１０４】
[0118]調停ユニット８０６は、トリガ信号を、各スキャンアウトエンジン８０２から独立に受け取り、トリガ０の経路８２４（１）は、スキャンアウトエンジン８０２（１）からのトリガ信号を提供し、トリガ１の経路８２４（２）は、スキャンアウトエンジン８０２（２）からのトリガ信号を提供する。トリガ０の信号に応答して、調停ユニット８０６はＨＰＣ０に切り替えを行い（スイッチインし）、ＨＰＣ０が動作してフレームを完了し（上述した他の実施の形態におけるように）、トリガ１の信号に応答して、調停ユニット８０６がＨＰＣ１に切り換えを行い（スイッチインして）、ＨＰＣ１が動作して、フレームを完成する。
【０１０５】
[0119]幾つかの例では、重複したトリガイベントも可能である。例えば、調停ユニット８０６は、トリガ０の信号に応答してＨＰＣ０に切り替えを行ない（スイッチイン）し、ＨＰＣ０がそのフレームを終える前にトリガ１の信号を受け取ってもよい。ある実施の形態では、調停ユニット８０６は、ＨＰＣ０がそのフレームを終えて直ぐにＨＰＣ１に切り替えを行なう（スイッチインする）ことを可能とする。同様のロジックを使用して、トリガ１の信号が最初に到着する他の重複するシナリオを取り扱ってもよい。このアルゴリズムは、ＨＰＣ０及びＨＰＣ１の各々がフレームを生成するのに要する総時間が、フレーム時間（二つのディスプレイデバイスが異なるフレームレートを有する場合には速いほうのフレームレート）より実質的に少なく、且つ、ＮＰＣが、許容可能なレートで新しい画像をレンダリングするのに十分な処理時間を残されている限り、効果的である。
【０１０６】
[0120]他の実施の形態では、種々のオブジェクトのうち幾つか又は全てが、別個の処理エンジンに実装され、並列処理能力が向上されてもよい。例えば、三つのエンジンの場合、ＮＰＣ及び二つのＨＰＣは、それぞれ、別個のエンジンで実施し得る。
【０１０７】
[0121]別の実施の形態では、複数のディスプレイヘッドを、二つのスキャンアウトエンジン及び一つのＨＰＣを提供し、当該スキャンアウトエンジンのうち一方がＨＰＣを排他的に使用することによって、サポートすることができる。他のディスプレイヘッド用のスキャンアウトエンジンは、必要に応じて従来の特定用途回路を用いて、限定された後処理能力を実施してもよい。更に別の実施の形態では、単一のＨＰＣを、二つの（又はそれよい多い）スキャンアウトエンジンからのトリガ信号によってトリガすることができる。
【０１０８】
＜後処理の例＞
[0122]上述したように、後処理は、多様なオペレーションを含んでいていてもよい。本発明の範囲を限定せずに、後処理オペレーションの幾つかの例を、ここで説明する。
【０１０９】
[0123]一つの後処理オペレーション合成処理であり、この処理では、異なるバッファからの画像を、互いに一つのフレームを生成するよう重ねることができる。例えば、図９は、三つの異なる画像バッファから生成された合成フレーム９００を示している。背景画像バッファ９０２は、背景領域９０４におけるピクセルを生成するために使用されるフラグメントデータを提供し、映像バッファ９０６は、映像領域９０８におけるピクセルを生成するために使用されるフラグメントデータを提供し、カーソル画像バッファ９１０は、カーソル領域９１２におけるピクセルを生成するために使用されるフラグメントデータを提供する。
【０１１０】
[0124]この例では、どの画像のコンテンツ及び／又は位置も、独立にフレームからフレームへと変化することができ、異なる画像の更新レートが異なっていてもよい。例えば、領域９０４の背景画像は、デスクトップの壁紙であり、殆ど変化することがなくてもよく、領域９０８の映像は、３０Ｈｚ又はそれより大きいレートで変化してもよく、カーソル画像バッファ９１０も、例えば、現在のシステムのアクティビティを示すために、実質的にリアルタイムに変化してもよい。カーソル領域９１２の位置はまた、実質的にリアルタイムで変化して、ユーザによって操作されるポインティングデバイスの運動を反映してもよい。
【０１１１】
[0125]本発明の実施の形態によれば、合成画像を、複数の独立の画像バッファ（又は画像バッファのグループ）を後処理オブジェクト用のフラグメントデータのソースとして提供することによって、生成することができる。図１０は、複数の画像を独立に生成するよう構成されたマルチプロセッサ１０００を示すブロック図である。この実施の形態では、マルチプロセッサ１０００は、後処理オブジェクトを実施する一つのＨＰＣと、二つのＮＰＣと、をサポートしており、ＮＰＣＦが、フルスクリーン用のレンダリングオブジェクトを実施し、ＮＰＣＣがカーソル画像用のレンダリングオブジェクトを実施する。二つのＮＰＣが図１０には示されているが、任意の数のＮＰＣを、組み合わせる必要のある任意の数の画像ソースを生成するために、提供してもよいことを理解されたい。さらに、オブジェクトは、任意の数の個別の処理エンジンを用いて実施してもよく、例えば、一つのエンジンが三つのオブジェクトを実施してもよく、別個のエンジンが各オブジェクト用に提供されてもよく、或いは、複数のエンジンが各オブジェクトに提供されてもよい。
【０１１２】
[0126]グラフィックメモリ１００２は、上述したグラフィックメモリ１１６に略類似するものであり、二つのレンダリングバッファ１００４及び１００６を備えており、これらバッファの各々は、好適には、上述したように複数の画像を格納する。レンダリングバッファ１００４は、ＮＰＣＦによってレンダリングされたフルスクリーン画像用のフラグメントデータを格納し、レンダリングバッファ１００６は、ＮＰＣＣによってレンダリングされたカーソル画像用のフラグメントデータを格納する。カーソル画像は、フルスクリーン画像より相当に少ないフラグメントを有することがあり、従って、レンダリングバッファ１００６は、レンダリングバッファ１００４より相当に小さくてもよいことに留意されたい。グラフィックメモリ１００２はまた、ＨＰＣによって生成されたフレーム用のピクセルデータを格納するディスプレイバッファ１００８を有している。
【０１１３】
[0127]ホスト１０００は、調停ユニット１０１０と、コンテキストマネージャ１０１４を有する実行コア１０１２を備えており、これらは上述した対応のコンポーネントに略類似するものであってもよい。この例では、コンテキストマネージャ１０１４は、三つの異なるコンテキスト（ＮＰＣＣコンテキスト１０１１、ＮＰＣＦコンテキスト１０１３、及びＨＰＣコンテキスト１０１５）を格納し、調停ユニット１０１０は、三つの異なるコンテキストから選択を行なう。フルスクリーン画像及びカーソル画像用の別個のレンダリングコマンドのストリームが、それぞれに対応のレンダリングコマンドバッファ１０１６（フルスクリーン用）及び１０１８（カーソル画像用）に提供される。これらレンダリングストリームは、図３Ａのレンダリングストリーム３００と略同様のものであってもよい。
【０１１４】
[0128]調停ユニット１０１０は、スキャンアウトエンジン１０３０からのトリガ信号に応答して（上述したように）、ＨＰＣを選択し、ＨＰＣがアイドルとなっているときにＮＰＣＣ及びＮＰＣＦから選択を行なう。ラウンドロビン方式の選択、イベント駆動の選択（例えば、実行コア１０１２から「イベント」経路１０１７を介して受け取られるイベント信号に基づく選択）、又は、他の選択アルゴリズムを使用することができる。
【０１１５】
[0129]ＰＰコマンドバッファ１０２０は、後処理プログラムを提供するものであり、当該プログラムの例を図１１に示す。後処理プログラム１１００は、図３Ｂの後処理プログラム３２０に略類似するものであり、複数のインデックスエントリ１１０４及び１１０６が提供されている点において異なる。インデックスエントリ１１０４は、新規のカーソル画像の完成の際にＮＰＣＣによって更新されるカーソルインテックス値（ＩＮＤＣ）を格納し、インデックスエントリ１１０６は、新規のフルスクリーン画像の完成の際にＮＮＰＣＦによって更新されるフルスクリーンインデックス値（ＩＮＤＦ）を格納する。ＩＮＤＣ値及びＩＮＤＦ値は、互いに独立に、且つ、異なるレートで、更新されてもよいことに留意されたい。
【０１１６】
[0130]この実施の形態では、後処理オブジェクトは、好適には、新規のフレームを、それがトリガされる度に、インデックスエントリの何れかが更新されているか否かに拘らず、生成する。これによって、画面上のカーソル位置が、頻繁に所望されるように、ディスプレイの周期で更新されるようにする。
【０１１７】
[0131]ある実施の形態では、ＰＣＭＤコマンド１１１０及び１１１２は、現在のカーソル位置を適切なレジスタから（これは従来の構成である）、又はメモリ位置から読み取るコマンド、現在のカーソルサイズ（これは、ＰＰコマンドバッファ１０２０内のコマンドによって設定されることがある）を決定するコマンド、どのピクセルがカーソルエリア内にあるかを決定するコマンド、及び、各ピクセル用の一以上のフラグメントを、（インデックス値ＩＮＤＣによって特定される）現在のカーソル画像又は（ＩＮＤＦ値によって特定される）現在のフルスクリーン画像の何れかから、どのピクセルがカーソルエリア内にあるかに応じて、選択するコマンドを含む。合成アルゴリズム自体は、既存のハードウェアベースのアルゴリズムに類似していてもよいが、好適には、専用のハードウェアではなく、実行コア９１２で実行することができるプログラムコードで実装される。カーソルとその下にあるフルスクリーン画像の部分との間の透明又はエッジブレンディングのような特徴を、適切なプログラムコードを介して実装してもよい。
【０１１８】
[0132]再び図１０を参照する。スキャンアウトエンジン１０３０は、上述した種々のスキャンアウトエンジンと同一のものであってもよい。この実施の形態では、全ての合成は、ホスト１０００において、ＨＰＣ内の後処理オブジェクトによって成され、スキャンアウトエンジン１０３０のオペレーションは、ディスプレイバッファ１００８内のピクセルを生成した方法とは独立している。
【０１１９】
[0133]別の後処理オペレーションは、ＬＣＤオーバードライブ（当該技術においては、「ＬＣＤフィードフォワード」又は「応答時間補償」（ＲＴＣ）とも呼ばれるもの）である。当該技術では公知のように、ＬＣＤスクリーンは、ピクセルを駆動する信号が、フレームからフレームへと、所望の新規の強度に部分的に基づいて、且つ、所望の新規の強度と前の強度との間の差に部分的に基づいて調整される場合に、より高速に応答することができる。本発明の実施の形態によれば、ＬＣＤオーバードライブは、適切なコマンドを含む後処理プログラムを実行する後処理オブジェクトにおいて実施することができる。
【０１２０】
[0134]例えば、画像の各フラグメントがフレームの一つのピクセルに対応している状況を考える。（本発明は、この場合に限定されるものではなく、この状況は、例示の目的で本明細書において使用されている）。図１２は、フレームを生成するプロセス１２００を示しており、当該プロセスは、後処理オブジェクト１３４（例えば、図２を参照）で適切な後処理プログラムを介して（例えば、図３Ｂに示すように）実施することができる。プロセス１２００は、好適には、直前に完成した画像がインデックス値Ｒをもつ画像バッファ２２６（図２）に格納され、直前の先行する画像がインデックス値（Ｒ−１）ｍｏｄＮをもつ異なる画像バッファ２２６に格納され、これら画像バッファ２２６の両者が後処理オブジェクト１３４によってロックされ続ける実施の形態で実施される。
【０１２１】
[0135]ステップ１２０２において、後処理オブジェクト１３４は、ＰＰコマンドバッファ１２９におけるインデックスエントリをチェックする。ステップ１０２４において、インデックス値が変化しているか否かが判定される。変化していない場合には、次いで、ステップ１２０６において、フレームにおける全ピクセルのデルタ値がゼロにセットされ、所望のピクセル値の何れもが変化していないことが反映される。インデックス値が変化している場合には、次いで、ステップ１２０８において、デルタ値が、各ピクセルについて、バッファＲ内のフラグメント値及びバッファ（Ｒ−１）ｍｏｄＮ内のフラグメント値に基づいて計算される。ある実施の形態では、デルタ値は、単純に、二つのバッファ内の対応するフラグメント用の値の間の差である。
【０１２２】
[0136]ステップ１２１０において、所望のピクセル強度が、バッファＲ内のフラグメント値から求められる。ある実施の形態では、フラグメント値は、所望のピクセル強度であり、他の実施の形態では、所望のピクセ強度が、フラグメント値の関数値である（例えば、ガンマ補正を組み込んだもの）。
【０１２３】
[0137]ステップ１２１２においては、ピクセル用のオーバードライブ値が、所望の強度とデルタ値とに基づいて求められる。ある実施の形態では、関数が、オーバードライブ信号を計算するために予め定められていてもよい。別の実施の形態では、オーバードライブ信号は、所望の強度とデルタ値（又は新規及び古い強度値）を用いてインデックスされるルックアップテーブルから求められ、実行コア４０４は、このテーブル参照を実行するように構成された機能ユニットを備えることができる。
【０１２４】
[0138]プロセス１２００は、例示的なものであり、変更及び改良が可能であることが理解されよう。ステップは、各フラグメントに対して逐次的に実行されてもよく、或いは、フラグメントのグループに対して（又は全てのフラグメントに対して）並列に実行されてもよく、ステップの順序が変更されてもよく、また、ステップが変更又は結合されてもよい。異なる定義のデルタ値に置き換えてもよく、また、フラグメント値に対する別の変更が導入されてもよい。加えて、プロセス１２００は、フラグメントデータからピクセルデータを生成する更なるステップ（例えば、ダウンフィルタリング、アップフィルタリング、合成等）を結合することができる。
【０１２５】
[0139]プロセス１２００によってピクセル用に生成されたオーバードライブ信号は、フレームバッファ２２７に格納される最終のピクセル値である必要はない。後続の操作が、更なる後処理コマンドを用いて実施されてもよい。
【０１２６】
[0140]後処理オペレーションの第３の例は、表面の回転であり、ここでは、画像用のフラグメントデータが、画像の法線方向軸線周りにある角度（例えば９０°）で回転された２−Ｄ表面上にマップされる。この軸線と画像平面との交差地点、及び／又は回転の角度は、設定可能なパラメータである。ある実施の形態では、交差地点は、画像の中心（又はその近く）に固定され、角度は、９０°の倍数（例えば、０°、９０°、１８０°、２７０°）に設定可能である。交差地点及び回転の角度に基づいて、画像バッファ内の各フラグメントの位置を、フレームバッファ内の対応のピクセル位置にマップすることができる。したがって、表面の回転は、フラグメント位置とピクセル位置の間のマッピングを定義し、このマッピングを用い、フラグメントが読み取られたアドレスに基づいて各ピクセル用の書き込みアドレスを求めることによって、後処理オブジェクトで実施することができる。マッピングは、例えば、画像バッファ用の位置オフセットによってアクセス可能なルックアップテーブルとして、又は、ピクセルバッファ用の位置オフセットを画像バッファ用の位置オフセットから計算するための関数として、提供することができる。ある実施の形態では、許可された幾つかの回転角度用のマッピングが、画像バッファの位置オフセットと現在の回転角度によってアクセス可能なルックアップテーブルを用いて、提供されてもよい。
【０１２７】
[0141]図１３は、回転したフレームを生成するためのプロセス１３００のフロー図であり、当該プロセス１３００は、後処理オブジェクト１３４（例えば、図２を参照）で、適切な後処理プログラムを介して（例えば、図３Ｂに示すように）、実施することができる。ステップ１３０２においては、所望の回転に基づいて、マッピングが、画像バッファ内の各フラグメント位置とピクセルバッファ内の対応のピクセル位置との間で、定義される。マッピングは、例えば、レンダリングオブジェクトの初期化の際に一度生成されて、回転パラメータが変化するときにのみ更新されてもよい。ある実施の形態では、後処理コマンドを使用して、マッピングを提供し、別の実施の形態では、後処理オブジェクトが適切なマッピングを計算するか選択するために使用することができるパラメータを、後処理コマンドが提供する。
【０１２８】
[0142]ステップ１３０４において、フラグメントデータが画像バッファ位置（本明細書ではソース位置と呼ぶ）から読み取られ、ステップ１３０６において、フラグメントデータが処理されて、ピクセル値が生成される。任意のタイプの後処理オペレーションをステップ１３０６に含めてもよく、例えば、合成及び／又はＬＣＤオーバードライブオペレーションを含めることができる。処理が完了すると、ステップ１３０８において、フレームバッファ内の目的位置が、ソース位置とステップ１３０２で定義したマッピングを用いることによって、ピクセル値用に求められる。ステップ１３１０において、ピクセル値が、目的位置に書き込まれる。ステップ１３１２において、処理すべき更なるフラグメントが残っているか否かが判定される。フラグメントが残っている場合には、プロセス１００は、ステップ１３０４に戻り、次のフラグメントを処理し、現在の画像の全フラグメントが処理されている場合には、プロセス１３００は終了する（ステップ１３１４）。
【０１２９】
[0143]プロセス１３００は例示的なものであり、変更及び改良が可能であることが理解されよう。逐次的なものとして説明したステップは、並列に実行されてもよく、ステップの順序が変更されてもよく、ステップが変更されてもよく、又は、結合されてもよい。例えば、複数のフラグメントが並列に処理されてもよい。幾つかの実施の形態では、ソース位置と目的位置との間のマッピングが、一対一であってもよく、例えば、回転された画像が、ピクセル配列の大きさに適合するように、縮小又は拡大されてもよい。縮小及び拡大は、一つのピクセル値を生成するために、幾つかのフラグメント値のブレンディングを伴ってもよい。プロセス１３００は、あるフラグメントの位置をピクセルへのマッピングを定義する目的でソース位置として使用することができる限り、このケースに採用することができる。他の実施の形態では、マッピングは、各ピクセル位置用に使用すべき一以上のソース位置が特定されるように、定義されてもよい。
【０１３０】
[0144]合成及びＬＣＤオーバードライブオペレーションは、本明細書では、後処理オブジェクトで実施することができるオペレーションの例として使用されている。他のオペレーションもまた、これらの例に加えて、又はこれらの例に代えて実装されてもよく、幾つかの例は、「概略及び専門用語」のサブセクションにおいて上述されている。しかしながら、本発明は、特定の後処理オペレーションに限定されるものではない。当業者は、後処理オブジェクを、好適には、ディスプレイ周期での実行が正確な動作のために望ましいか又は必須である任意のオペレーションを実施するために使用することができることを認識するであろう。後処理オブジェクトに含められるオペレーションの数及び複雑さは、新規のフレームをディスプレイの周期で生成することができる限り、変更し得る。
【０１３１】
＜後処理プログラム用のソース＞
[0145]上述したように、後処理プログラムは、ＰＰコマンドバッファにグラフィックドライバプログラムによって書き込まれる。このドライバは、コマンドを直接に（例えば、図１の実施の形態では、システムバス１０６を介してＰＰコマンドバッファ１２９のメモリ位置にコマンドを伝送することによって）書き込んでもよく、又は、間接的に（例えば、図７を参照して上述したように、ＷＲＰＰコマンドをレンダリングコマンドバッファ１２８に書き込むことによって）書き込むことができる。
【０１３２】
[0146]後処理プログラム用のソースについて、ここで説明する。幾つかの実施の形態では、グラフィックドライバが、後処理プログラムを、種々の後処理オペレーションを実装する予め定義されたプログラムセグメントのライブラリからアセンブルする。グラフィックドライバは、適切なアプリケーションプログラムインタフェイス（ＡＰＩ）を提供し、アプリケーション開発者が使用することを望む後処理オペレーション及び任意の関連のパラメータを特定することを可能にしてもよい。ＡＰＩ自体は、一般的にスキャンアウトタイム処理を制御するための従来のＡＰＩと同様であってもよいが、グラフィックドライバ内での実装が異なる。具体的には、ＡＰＩ命令に応答して、グラフィックドライバは、ライブラリから適切なプログラムセグメントを選択し、セグメントを完全なプログラムへと結合し（例えば、上述したインデックスチェック及びジャンプコマンドのような制御コマンドを加えて）、プログラムをＰＰコマンドバッファに書き込み、或いは、適切なＷＲＰＰコマンドをレンダリングコマンドストリームに挿入する。
【０１３３】
[0147]他の実施の形態では、アプリケーション開発者が、「カスタム」の後処理プログラムを定義することも可能である。例えば、グラフィックドライバが、任意の後処理プログラム又はプログラムセグメントをアプリケーション又はオペレーティングシステムプログラムから受け入れるＡＰＩを提供してもよい。カスタム後処理プログラムを書くための命令及び／又は示唆を有する開発者キットを提供してもよい。更に別の実施の形態では、ライブラリプログラムセグメントとカスタムプログラムセグメントの組み合わせをサポートしてもよい。
【０１３４】
[0148]上述した実施の形態では、グラフィックドライバが、後処理プログラムをＰＰコマンドバッファに書き込むように特定されている。幾つかの実施の形態では、グラフィックドライバプログラムが、ドライバプログラムが実行されるハードウェア及び／又はオペレーティングシステムの詳細を隠蔽する抽象度で実装される。例えば、リソースマネージャプログラムを提供して、グラフィックドライバプログラムとシステムハードウェアコンポーネントとの相互動作をサポートしてもよい。リソースマネージャは、オペレーティングシステムプログラム及び／又はアプリケーションプログラムからの処理リクエストに応答してグラフィックドライバによって呼び出される低レベルのハードウェア及び動作特有の機能を実施する。この追加の抽象度によれば、リソースマネージャの異なる実装を提供することによって、同じドライバコードを異なるハードウェア構成に採用することが可能となる。リソースマネージャが実装されている場合には、後処理プログラムのＰＰコマンドバッファへの実際の書き込みは、それがドライバに透過的となるように、リソースマネージャによって取り扱われてもよい。
【０１３５】
[0149]更に別の実施の形態では、従来のスキャンアウト制御コマンドを、ドライバによって発行することができる。かかるコマンドは、ＧＰＵ内の適切なコマンドインタフェイスコンポーネントによって受け取られ、後処理オブジェクト用の制御構造へと変更される。例えば、スキャンアウトコマンドの受領の際に、コマンドインタフェイスコンポーネントは、ＰＰコマンドバッファ内にコマンド又はパラメータを書き込み、又は上書きすることができ、或いは、適切なＳＥＬＰＰ及び／又はＷＲＰＰコマンドをレンダリングコマンドストリームに挿入することができる。したがって、ＰＰコマンドバッファ及び後処理オブジェクトは、グラフィックドライバ（リソースマネージャを含む）に透過的になっていてもよく、本発明を未変更の従来のグラフィックドライバと共に使用してもよい。ＰＰコマンドバッファ以外のＧＰＵの適切なコマンドインタフェイスコンポーネントによって動作される制御構造は、後処理オブジェクトの振る舞いを制御するために使用することができることが理解されよう。
【０１３６】
＜更なる実施の形態＞
[0150]上述したように、本発明の実施の形態は、ＧＰＵの実行コアにおいて利用可能な膨大な処理パワーを、ディスプレイ周期でのピクセル処理に活用することを可能にする。さらに、本明細書に説明した後処理オブジェクトのプログラム能力は、実行することができるディスプレイの後処理の量及び種類に関して、従来の特定用途回路で達成することができたものよりも、相当に優れたフレキシビリティをもたらす。また更に、本発明の幾つかの実施の形態によれば、従来のＧＰＵにおける特定用途の後処理回路の量を相当に削減するか、又は排除することが可能となり、チップ面積及び消費電力に関する利点がもたらされる。
【０１３７】
[0151]本発明を、特定の実施の形態について説明してきたが、当業者は多数の変更が可能であることを認識するであろう。例えば、本発明は如何なる特定の実行コア又はコンテキスト管理アーキテクチャにも限定されるものではない。加えて、後処理オペレーションの特定の例を説明してきたが、本明細書において具体的に説明したオペレーションを含めて、任意のオペレーション又はオペレーションの組み合わせを、本発明の範囲内で実施し得ることが理解されよう。
【０１３８】
[0152]本明細書における説明は、レンダリングオブジェクト及び後処理オブジェクトのような処理オブジェクトを参照している。この内容において、「オブジェクト」とは、状態及び振る舞いのアスペクトを有するエンティティを指すことが理解されよう。当業者は、複数のオブジェクトがマルチプロセッサにおいて種々の方法で実施され得ることを認識するであろう。例えば、単一の処理エンジンを、コンテキストスイッチ特徴を用いて実施して、異なるオブジェクトを適切にスイッチイン及びスイッチアウトすることが可能である。或いは、本明細書に示した任意のオブジェクト又は全てのオブジェクトを、オブジェクトの状態及び振る舞いのアスペクトを実現可能な別個の処理エンジンを用いて実施してもよい。
【０１３９】
[0153]さらに、本発明を、特定のハードウェア及びソフトウェアコンポーネントを参照して説明してきたが、当業者は、ハードウェア及び／又はソフトウェアコンポーネントの異なる組み合わせを使用することができ、また、ハードウェアに実装されるように説明した特定のオペレーションをソフトウェア又はハードウェアに実装することができることを理解するであろう。
【０１４０】
[0154]本発明の種々の特徴を組み込んだコンピュータプログラムは、種々のコンピュータ読み取り可能媒体に、格納及び／又は伝送の為に、コード化することができ、適切な媒体には、磁気ディスク又はテープ、ＣＤ（コンパクトディスク）又はＤＶＤ（デジタル多用途ディスク）のような光学式記憶媒体、フラッシュメモリ、インターネットを含む種々のプロトコルに準拠する有線、光、及び／又は無線ネットワークを介した伝送用に採用される搬送波信号等が含まれる。プログラムコードがコード化されたコンピュータ読み取り可能媒体は、互換性のあるデバイスと共にパッケージ化されてもよく、又は、他のデバイスとは別個に提供（例えば、インターネットを介して）されてもよい。
【０１４１】
[0155]以上、本発明を特定の実施の形態に関して説明してきたが、本発明は特許請求の範囲内の全ての変更態様及び均等物を含むことを意図していることが理解されよう。
【図面の簡単な説明】
【０１４２】
【図１】本発明の実施の形態に係るコンピュータシステムのハイレベルのブロック図である。
【図２】本発明の実施の形態に係るグラフィック処理サブシステム用のデータフロー図である。
【図３Ａ】本発明の実施の形態に係るレンダリングコマンドストリームを示す図である。
【図３Ｂ】本発明の実施の形態に係る後処理プログラムを示す図である。
【図４】本発明の実施の形態に係るマルチプロセッサのコンポーネントを示すブロック図である。
【図５】本発明の実施の形態に係る調停ロジックのプロセスのフロー図である。
【図６】本発明の別の実施の形態に係るマルチプロセッサのコンポーネントを示すブロック図である。
【図７】本発明の実施の形態に係る後処理プログラムを書き込むくためのコマンドを有するレンダリングコマンドストリームを示す図である。
【図８】本発明の実施の形態に係る二つのスキャンアウトエンジンをサポートするマルチプロセッサのブロック図である。
【図９】合成画像を示す図である。
【図１０】本発明の実施の形態に係る合成画像をサポートするマルチプロセッサのブロック図である。
【図１１】本発明の実施の形態に係る合成画像を形成するための後処理プログラムを示す図である。
【図１２】本発明の実施の形態に係るＬＣＤのオーバードライブ値を生成するためのプロセスのフロー図である。
【図１３】本発明の実施の形態に係る画像の回転用のプロセスのフロー図である。
【図１】
2008524720.tif 000003
【図２】
2008524720.tif 000004
【図３Ａ】
2008524720.tif 000005
【図３Ｂ】
2008524720.tif 000006
【図４】
2008524720.tif 000007
【図５】
2008524720.tif 000008
【図６】
2008524720.tif 000009
【図７】
2008524720.tif 000010
【図８】
2008524720.tif 000011
【図９】
2008524720.tif 000012
【図１０】
2008524720.tif 000013
【図１１】
2008524720.tif 000014
【図１２】
2008524720.tif 000015
【図１３】
2008524720.tif 000016
【国際調査報告】
2008524720.tif 000017