(57)【要約】  概して、本開示では、グラフィックスシステムにおいてオフスクリーンサーフェスのためのマルチバッファサポートを行うための様々な技法について説明する。例示的な装置は、１つ又は複数のバッファエリアと、１つ又は複数のプロセッサとを含む。１つ又は複数のプロセッサは、グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連するバッファスペース内の複数のバッファを割り振るように構成される。１つ又は複数のプロセッサは、書き込み動作中にオフスクリーンサーフェスに関係する情報が第１のバッファに書き込まれ、読み出し動作中にオフスクリーンサーフェスに関係する情報が第２のバッファから読み出されるように、バッファ内の第１のバッファをオフスクリーンサーフェスのための書き込みバッファとして識別し、さらにバッファ内の第２のバッファをオフスクリーンサーフェスのための読み出しバッファとして識別するようにさらに構成される。【選択図】  図１Ａ
2011510407.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する複数のバッファを割り振ることと、
書き込み動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第１のバッファに書き込まれるように、前記第１のバッファを前記オフスクリーンサーフェスのための書き込みバッファとして識別することと、
読み出し動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第２のバッファから読み出されるように、前記第２のバッファを前記オフスクリーンサーフェスのための読み出しバッファとして識別することと
を具備する方法。
【請求項２】
前記バッファを割り振ることは、グラフィックス処理システムの１つ又は複数のバッファエリア内の前記バッファを割り振ることを具備する、請求項１記載の方法。
【請求項３】
前記グラフィックス処理システムの前記１つ又は複数のバッファエリア内の前記バッファを割り振ることは、ｐｂｕｆｆｅｒに関連する前記１つ又は複数のバッファエリアの第１のエリア内、又はｐｉｘｍａｐに関連する前記１つ又は複数のバッファエリアの第２のエリア内のいずれかの前記バッファを割り振ることを具備する、請求項２記載の方法。
【請求項４】
前記第１のバッファを前記読み出しバッファとして識別し、前記第２のバッファを前記書き込みバッファとして識別するバッファ選択機能を呼び出すこと
をさらに具備する、請求項１記載の方法。
【請求項５】
前記オフスクリーンサーフェスをレンダリングすることによってレンダリング情報を生成することと、
前記書き込み動作中に前記レンダリング情報を前記第１のバッファに書き込むことと
をさらに具備する、請求項１記載の方法。
【請求項６】
前記読み出し動作中に表示のために前記オフスクリーンサーフェスに関係する情報を前記第２のバッファから読み出すこと
をさらに具備する、請求項１記載の方法。
【請求項７】
前記書き込みバッファが前記読み出しバッファとは異なるように、前記第１のバッファと前記第２のバッファとが異なるバッファである、請求項１記載の方法。
【請求項８】
グラフィックス処理において使用される追加のオフスクリーンサーフェスにすべてが関連する追加のバッファを割り振ることと、
追加の書き込み動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第３のバッファに書き込まれるように、前記第３のバッファを前記追加のオフスクリーンサーフェスのための書き込みバッファとして識別することと、
追加の読み出し動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第４のバッファから読み出されるように、前記第４のバッファを前記追加のオフスクリーンサーフェスのための読み出しバッファとして識別することと
をさらに具備する、請求項１記載の方法
【請求項９】
前記オフスクリーンサーフェスのための前記第２のバッファの内容と、前記追加のオフスクリーンサーフェスのための前記第４のバッファの内容と、オンスクリーンサーフェスに関連するデータとを、オーバーレイ順序にしたがって組み合わせることと、
前記オーバーレイ順序に基づいて表示するために、前記オフスクリーンサーフェスと、前記追加のオフスクリーンサーフェスと、前記オンスクリーンサーフェスとをオーバーレイすることと
をさらに具備する、請求項８記載の方法。
【請求項１０】
前記オフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備し、
前記追加のオフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備する、
請求項９記載の方法。
【請求項１１】
前記方法は、１つ又は複数のプロセッサによって実行され、前記１つ又は複数のプロセッサは、それぞれ、ディスプレイプロセッサ、グラフィックスプロセッサ、又は汎用プロセッサを具備する、請求項１記載の方法。
【請求項１２】
グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する複数のバッファを割り振ることと、
書き込み動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第１のバッファに書き込まれるように、前記第１のバッファを前記オフスクリーンサーフェスのための書き込みバッファとして識別することと、
読み出し動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第２のバッファから読み出されるように、前記第２のバッファを前記オフスクリーンサーフェスのための読み出しバッファとして識別することと
を、１つ又は複数のプログラマブルプロセッサに行わせるための命令を具備するコンピュータ可読媒体。
【請求項１３】
前記バッファを割り振ることを前記１つ又は複数のプロセッサに行わせるための前記命令は、グラフィックス処理システムの１つ又は複数のバッファエリア内の前記バッファを割り振ることを前記１つ又は複数のプロセッサに行わせるための命令を具備する、請求項１２記載のコンピュータ可読媒体。
【請求項１４】
前記グラフィックス処理システムの前記１つ又は複数のバッファエリア内の前記バッファを割り振ることを前記１つ又は複数のプロセッサに行わせるための前記命令は、ｐｂｕｆｆｅｒに関連する前記１つ又は複数のバッファエリアの第１のエリア内、又はｐｉｘｍａｐに関連する前記１つ又は複数のバッファエリアの第２のエリア内のいずれかの前記バッファを割り振ることを前記１つ又は複数のプロセッサに行わせるための命令を具備する、請求項１３記載のコンピュータ可読媒体。
【請求項１５】
前記第１のバッファを前記読み出しバッファとして識別し、前記第２のバッファを前記書き込みバッファとして識別するバッファ選択機能を呼び出すこと
を前記１つ又は複数のプロセッサに行わせるための命令をさらに具備する、請求項１２記載のコンピュータ可読媒体。
【請求項１６】
前記オフスクリーンサーフェスをレンダリングすることによってレンダリング情報を生成することと、
前記書き込み動作中に前記レンダリング情報を前記第１のバッファに書き込むことと
を前記１つ又は複数のプロセッサに行わせるための命令をさらに具備する、請求項１２記載のコンピュータ可読媒体。
【請求項１７】
前記読み出し動作中に表示のために前記オフスクリーンサーフェスに関係する情報を前記第２のバッファから読み出すこと
を前記１つ又は複数のプロセッサに行わせるための命令をさらに具備する、請求項１２記載のコンピュータ可読媒体。
【請求項１８】
前記書き込みバッファが前記読み出しバッファとは異なるように、前記第１のバッファと前記第２のバッファとが異なるバッファである、請求項１２記載のコンピュータ可読媒体。
【請求項１９】
グラフィックス処理において使用される追加のオフスクリーンサーフェスにすべてが関連する追加のバッファを割り振ることと、
追加の書き込み動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第３のバッファに書き込まれるように、前記第３のバッファを前記追加のオフスクリーンサーフェスのための書き込みバッファとして識別することと、
追加の読み出し動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第４のバッファから読み出されるように、前記第４のバッファを前記追加のオフスクリーンサーフェスのための読み出しバッファとして識別することと
を前記１つ又は複数のプロセッサに行わせるための命令をさらに具備する、請求項１２記載のコンピュータ可読媒体。
【請求項２０】
前記オフスクリーンサーフェスのための前記第２のバッファの内容と、前記追加のオフスクリーンサーフェスのための前記第４のバッファの内容と、オンスクリーンサーフェスに関連するデータとを、オーバーレイ順序にしたがって組み合わせることと、
前記オーバーレイ順序に基づいて表示するために、前記オフスクリーンサーフェスと、前記追加のオフスクリーンサーフェスと、前記オンスクリーンサーフェスとをオーバーレイすることと
を前記１つ又は複数のプロセッサに行わせるための命令をさらに具備する、請求項１９記載のコンピュータ可読媒体。
【請求項２１】
前記オフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備し、
前記追加のオフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備する、
請求項２０記載のコンピュータ可読媒体。
【請求項２２】
１つ又は複数のバッファエリアと、
グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する前記１つ又は複数のバッファエリア内の複数のバッファを割り振るように構成された１つ又は複数のプロセッサとを備え、
前記１つ又は複数のプロセッサは、書き込み動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第１のバッファに書き込まれ、読み出し動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第２のバッファから読み出されるように、前記第１のバッファを前記オフスクリーンサーフェスのための書き込みバッファとして識別し、さらに前記第２のバッファを前記オフスクリーンサーフェスのための読み出しバッファとして識別するようにさらに構成される装置。
【請求項２３】
前記１つ又は複数のプロセッサは、ｐｂｕｆｆｅｒに関連する前記１つ又は複数のバッファエリアの第１のエリア内、又はｐｉｘｍａｐに関連する前記１つ又は複数のバッファエリアの第２のエリア内のいずれかの前記バッファを割り振るように構成される、請求項２２記載の装置。
【請求項２４】
前記１つ又は複数のプロセッサは、前記第１のバッファを前記読み出しバッファとして識別し、前記第２のバッファを前記書き込みバッファとして識別するバッファ選択機能を呼び出すようにさらに構成される、請求項２２記載の装置。
【請求項２５】
前記１つ又は複数のプロセッサは、前記オフスクリーンサーフェスをレンダリングすることによってレンダリング情報を生成し、前記書き込み動作中に前記レンダリング情報を前記第１のバッファに書き込むようにさらに構成される、請求項２２記載の装置。
【請求項２６】
前記１つ又は複数のプロセッサは、前記読み出し動作中に表示のために前記オフスクリーンサーフェスに関する情報を前記第２のバッファから読み出すようにさらに構成される、請求項２２記載の装置。
【請求項２７】
前記書き込みバッファが前記読み出しバッファとは異なるように、前記第１のバッファと前記第２のバッファとが異なるバッファである、請求項２２記載の装置。
【請求項２８】
前記１つ又は複数のプロセッサは、グラフィックス処理において使用される追加のオフスクリーンサーフェスにすべてが関連する追加のバッファを割り振り、追加の書き込み動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第３のバッファに書き込まれ、追加の読み出し動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第４のバッファから読み出されるように、前記第３のバッファを前記追加のオフスクリーンサーフェスのための書き込みバッファとして識別し、前記第４のバッファを前記追加のオフスクリーンサーフェスのための読み出しバッファとして識別するようにさらに構成される、請求項２２記載の装置。
【請求項２９】
前記１つ又は複数のプロセッサは、前記オフスクリーンサーフェスのための前記第２のバッファの内容と、前記追加のオフスクリーンサーフェスのための前記第４のバッファの内容と、オンスクリーンサーフェスに関連するデータとをオーバーレイ順序にしたがって組み合わせ、前記オーバーレイ順序に基づいて表示するために、前記オフスクリーンサーフェスと、前記追加のオフスクリーンサーフェスと、前記オンスクリーンサーフェスとをオーバーレイするようにさらに構成される、請求項２８記載の装置。
【請求項３０】
前記オフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備し、
前記追加のオフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備する、
請求項２９記載の装置。
【請求項３１】
前記１つ又は複数のプロセッサは、それぞれディスプレイプロセッサ、グラフィックスプロセッサ、又は汎用プロセッサを具備する、請求項２２記載の装置。
【請求項３２】
前記装置は、ワイヤレス通信デバイスハンドセット、パーソナルコンピュータ、又はラップトップデバイスを具備する、請求項２２記載の装置。
【請求項３３】
前記装置は、１つ又は複数の集積回路デバイスを具備する、請求項２２記載の装置。
【請求項３４】
グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する複数のバッファを割り振るための手段と、
書き込み動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第１のバッファに書き込まれるように、前記第１のバッファを前記オフスクリーンサーフェスのための書き込みバッファとして識別するための手段と、
読み出し動作中に前記オフスクリーンサーフェスに関係する情報が前記バッファ内の第２のバッファから読み出されるように、前記第２のバッファを前記オフスクリーンサーフェスのための読み出しバッファとして識別するための手段と
を具備する装置。
【請求項３５】
前記バッファを割り振るための前記手段は、グラフィックス処理システムの１つ又は複数のバッファエリア内の前記バッファを割り振るための手段を具備する、請求項３４記載の装置。
【請求項３６】
前記グラフィックス処理システムの前記１つ又は複数のバッファエリア内の前記バッファを割り振るための前記手段は、ｐｂｕｆｆｅｒに関連する前記１つ又は複数のバッファエリアの第１のエリア内、又はｐｉｘｍａｐに関連する前記１つ又は複数のバッファエリアの第２のエリア内のいずれかの前記バッファを割り振るための手段を具備する、請求項３５記載の装置。
【請求項３７】
前記第１のバッファを前記読み出しバッファとして識別し、前記第２のバッファを前記書き込みバッファとして識別するバッファ選択機能を呼び出すための手段
をさらに具備する、請求項３４記載の装置。
【請求項３８】
前記オフスクリーンサーフェスをレンダリングすることによってレンダリング情報を生成するための手段と、
前記書き込み動作中に前記レンダリング情報を前記第１のバッファに書き込むための手段と
をさらに具備する、請求項３４記載の装置。
【請求項３９】
前記読み出し動作中に表示のために前記オフスクリーンサーフェスに関係する情報を前記第２のバッファから読み出すための手段
をさらに具備する、請求項３４記載の装置。
【請求項４０】
前記書き込みバッファが前記読み出しバッファとは異なるように、前記第１のバッファと前記第２のバッファとが異なるバッファである、請求項３４記載の装置。
【請求項４１】
グラフィックス処理において使用される追加のオフスクリーンサーフェスにすべてが関連する追加のバッファを割り振るための手段と、
追加の書き込み動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第３のバッファに書き込まれるように、前記第３のバッファを前記追加のオフスクリーンサーフェスのための書き込みバッファとして識別するための手段と、
追加の読み出し動作中に前記追加のオフスクリーンサーフェスに関係する情報が前記追加のバッファ内の第４のバッファから読み出されるように、前記第４のバッファを前記追加のオフスクリーンサーフェスのための読み出しバッファとして識別するための手段と
をさらに具備する、請求項３４記載の装置。
【請求項４２】
前記オフスクリーンサーフェスのための前記第２のバッファの内容と、前記追加のオフスクリーンサーフェスのための前記第４のバッファの内容と、オンスクリーンサーフェスに関連するデータとを、オーバーレイ順序にしたがって組み合わせるための手段と、
前記オーバーレイ順序に基づいて表示するために、前記オフスクリーンサーフェスと、前記追加のオフスクリーンサーフェスと、前記オンスクリーンサーフェスとをオーバーレイするための手段と
をさらに具備する、請求項４１記載の装置。
【請求項４３】
前記オフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備し、
前記追加のオフスクリーンサーフェスは、２次元サーフェス、３次元サーフェス、又はビデオサーフェスを具備する、
請求項４２記載の装置。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、２００８年１月１８日に出願された米国仮出願第６１／０２２，１９５号の利益を主張し、その内容全体が参照によりここに組み込まれる。
【技術分野】
【０００２】
本出願は、グラフィックス処理システム内のサーフェスのレンダリング及び表示に関する。
【背景】
【０００３】
グラフィックスプロセッサは、ビデオゲーム、グラフィックスプログラム、コンピュータ支援設計（ＣＡＤ）アプリケーション、シミュレーション及び視覚化ツール、及びイメージングなど、様々なアプリケーションのために、２次元（２Ｄ）及び３次元（３Ｄ）画像をレンダリングするために広く使用される。次いで、ディスプレイプロセッサは、ディスプレイ装置を介してユーザに提示するためにレンダリングされる出力を表示するために使用される。
【０００４】
これらのアプリケーションにおいて使用されるグラフィックスプロセッサ、ディスプレイプロセッサ、又はマルチメディアプロセッサは、データの並列処理及び／又はベクトル処理を実行するように構成できる。ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）拡張を持つ又は持たない汎用ＣＰＵ（中央処理装置）は、データを処理するように構成することもできる。ＳＩＭＤベクトル処理では、単一の命令が複数のデータ項目に対して同時に動作する。
【０００５】
ＯｐｅｎＧＬ（登録商標）（オープングラフィックスライブラリ）は、２Ｄ及び３Ｄグラフィックスを生成するアプリケーションを記述するときに使用されるＡＰＩ（アプリケーションプログラミングインターフェース）を定義する標準仕様である。（Ｊａｖａ（登録商標）など、他の言語は、それら自体の標準プロセスを介してＯｐｅｎＧＬ  ＡＰＩへのバインディングを定義することができる。）このインターフェースは、単純なプリミティブからシーンを描くために使用できる複数の関数呼び出しを含む。したがって、グラフィックスプロセッサ、マルチメディアプロセッサ、及び汎用ＣＰＵでさえ、ＯｐｅｎＧＬ関数呼び出しを使用して記述されたアプリケーションを実行することができる。ＯｐｅｎＧＬ  ＥＳ（組み込みシステム）は、モバイルワイヤレス電話、デジタルマルチメディアプレーヤ、携帯情報端末（ＰＤＡ）又はテレビゲーム機などの組み込みデバイスのために設計された、ＯｐｅｎＧＬの変形である。ＯｐｅｎＶＧ（商標）（Ｏｐｅｎ  Ｖｅｃｔｏｒ  Ｇｒａｐｈｉｃｓ）は、主にハードウェア−アクセラレーテッド２Ｄベクトルグラフィックスのために設計された別の標準ＡＰＩである。
【０００６】
ＥＧＬ（商標）（Ｅｍｂｅｄｄｅｄ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ）は、マルチメディアクライアントＡＰＩ（ＯｐｅｎＧＬ  ＥＳ、ＯｐｅｎＶＧ、及びいくつかの他の標準マルチメディアＡＰＩなど）と、基礎をなすプラットフォームマルチメディア機能との間のインターフェースである。ＥＧＬは、グラフィックスコンテキスト管理、レンダリングサーフェス生成、及びレンダリング同期を処理することができ、ハイパフォーマンス、ハードウェアアクセラレーテッド、及び混合モード２Ｄ及び３Ｄレンダリングを可能にする。レンダリングサーフェス生成では、ＥＧＬは、クライアントＡＰＩ（ユーザアプリケーションＡＰＩなどの）が描画及び共有することができるオンスクリーンサーフェス（たとえば、ウィンドウサーフェス）とオフスクリーンサーフェス（たとえば、ｐｂｕｆｆｅｒ、ｐｉｘｍａｐ）の両方を生成するための機構を提供する。オンスクリーンサーフェスは、典型的に、アクティブウィンドウのフレームバッファメモリに直接レンダリングされる。オフスクリーンサーフェスは、典型的に、後で使用するためにオフスクリーンバッファにレンダリングされる。Ｐｂｕｆｆｅｒは、たとえば、ＯｐｅｎＧＬサーバサイド（ドライバ）の動作に関連するメモリ空間に記憶できるオフスクリーンメモリバッファである。ｐｉｘｍａｐは、たとえば、クライアントアプリケーションに関連するメモリ空間に通常記憶されるオフスクリーンメモリ領域である。
【概要】
【０００７】
概して、本開示では、ｐｂｕｆｆｅｒサーフェス及びｐｉｘｍａｐサーフェスなどのオフスクリーンサーフェスのためのマルチバッファサポートを行うための様々な技法について説明する。一態様では、単一又は未知数のバッファでなく、指定された数のバッファの生成を可能にするＥＧＬ拡張内に、オフスクリーンサーフェスのためのマルチバッファサポートが実装されるとしてもよい。アプリケーション開発者は、ＥＧＬなどのＡＰＩを使用して、現在読み出し又は書き込み（描画）動作を行うべき、オフスクリーンサーフェスのためのバッファを指定することもできる。一態様では、オフスクリーンビデオサーフェス及び事前にレンダリングされたスプライトアニメーションのために複数のバッファを設けることができる。次いで、これらのマルチバッファリングされたサーフェス及びアニメーションは、レンダリング動作とともに又はそれとは別に行われるサーフェスオーバーレイ機能を介して、他の２Ｄサーフェス要素、３Ｄサーフェス要素、及びビデオサーフェス要素と組み合わせることができる。本開示では、２Ｄサーフェスは、たとえば、ＯｐｅｎＶＧなどの２Ｄ  ＡＰＩによって生成されるサーフェスである。３Ｄサーフェスは、たとえば、ＯｐｅｎＧＬなどの３Ｄ  ＡＰＩによって生成されるサーフェスである。ビデオサーフェスは、たとえば、Ｈ．２６４又はＭＰＥＧ４（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐバージョン４）などのビデオデコーダによって生成されるサーフェスである。
【０００８】
一態様では、方法は、グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する複数のバッファを割り振ることと、書き込み動作中にオフスクリーンサーフェスに関係する情報がバッファ内の第１のバッファに書き込まれるように、第１のバッファをオフスクリーンサーフェスのための書き込みバッファとして識別することとを含む。本方法は、読み出し動作中にオフスクリーンサーフェスに関係する情報がバッファ内の第２のバッファから読み出されるように、第２のバッファをオフスクリーンサーフェスのための読み出しバッファとして識別することをさらに含む。
【０００９】
別の態様では、装置は、バッファスペースと１つ又は複数のプロセッサとを含む。１つ又は複数のプロセッサは、グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する、バッファスペース内の複数のバッファを割り振るように構成される。１つ又は複数のプロセッサは、書き込み動作中にオフスクリーンサーフェスに関係する情報が第１のバッファに書き込まれ、読み出し動作中にオフスクリーンサーフェスに関係する情報が第２のバッファから読み出されるように、バッファ内の第１のバッファをオフスクリーンサーフェスのための書き込みバッファとして識別し、さらにバッファ内の第２のバッファをオフスクリーンサーフェスのための読み出しバッファとして識別するようにさらに構成される。
【００１０】
一態様では、コンピュータ可読媒体は、グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連する複数のバッファを割り振ることと、書き込み動作中にオフスクリーンサーフェスに関係する情報がバッファ内の第１のバッファに書き込まれるように、第１のバッファをオフスクリーンサーフェスのための書き込みバッファとして識別することとを、１つ又は複数のプログラマブルプロセッサに行わせるための命令を含む。このコンピュータ可読媒体は、読み出し動作中にオフスクリーンサーフェスに関係する情報がバッファ内の第２のバッファから読み出されるように、第２のバッファをオフスクリーンサーフェスのための読み出しバッファとして識別することを、１つ又は複数のプログラマブルプロセッサに行わせるための命令をさらに含む。
【００１１】
本開示の１つ又は複数の態様の詳細について添付の図面及び以下の説明において述べる。他の特徴、目的、及び利点は、説明及び図面、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１Ａ】本開示の一態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを実装するために使用される装置を例示するブロック図。
【図１Ｂ】本開示の別の態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを実装するために使用される装置を例示するブロック図。
【図２Ａ】本開示の一態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを実装するために使用される装置を例示するブロック図。
【図２Ｂ】本開示の一態様に係る、図２Ａに示すＡＰＩライブラリのさらなる詳細を例示するブロック図。
【図２Ｃ】本開示の一態様に係る、図２Ａに示すドライバのさらなる詳細を例示するブロック図。
【図２Ｄ】本開示の別の態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを実装するために使用される装置を例示するブロック図。
【図３Ａ】本開示の一態様に係る、それぞれ複数のバッファに関連する複数のオフスクリーンサーフェスの例を示すブロック図。
【図３Ｂ】一態様では、ディスプレイ装置に表示される、図３Ａに示すオフスクリーンサーフェスに関連するオーバーレイサーフェスデータの例を示すブロック図。
【図３Ｃ】本開示の一態様に係る、それぞれ異なって識別される読み出しバッファ及び書き込みバッファに関連する複数のオフスクリーンサーフェスの別の例を示すブロック図。
【図３Ｄ】一態様では、ディスプレイ装置に表示される、図３Ｃに示すオフスクリーンサーフェスに関連するオーバーレイサーフェスデータの例を示すブロック図。
【図４】本開示の一態様に係る、図１Ａ、図１Ｂ、図２Ａ、又は図２Ｄのグラフィックス処理システムに示す制御プロセッサ、グラフィックスプロセッサ、及び／又はディスプレイプロセッサのうちの１つ又は複数によって実行されてもよい方法の流れ図。
【図５】本開示の一態様に係る、図１Ａ、図１Ｂ、図２Ａ、又は図２Ｄのグラフィックス処理システムに示す制御プロセッサ、グラフィックスプロセッサ、及び／又はディスプレイプロセッサのうちの１つ又は複数によって実行されてもよい別の方法の流れ図。
【詳細な説明】
【００１３】
図１Ａは、本開示の一態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを実装するために使用される装置１００を例示するブロック図である。装置１００は、スタンドアロン装置か、又はより大きいシステムの一部でもよい。たとえば、装置１００は、（ワイヤレスモバイルハンドセットなどの）ワイヤレス通信装置を備えるか、又は、デジタルカメラ、デジタルマルチメディアプレーヤ、携帯情報端末（ＰＤＡ）、ビデオゲーム機、又は他のビデオ装置の一部とすることができる。装置１００は、（ウルトラモバイルパーソナルコンピュータなどの）パーソナルコンピュータ又はラップトップデバイスを備えることもできる。装置１００は、上述の装置のいくつか又は全部において使用されることがある１つ又は複数の集積回路、又はチップ中に含まれるとしてもよい。
【００１４】
装置１００は、グラフィックスアプリケーション、ビデオアプリケーション、又は他のマルチメディアアプリケーションなどの様々な異なるアプリケーションを実行することが可能である。たとえば、装置１００は、グラフィックスアプリケーション、ビデオゲームアプリケーション、ビデオアプリケーション、グラフィックスとビデオとを合成するアプリケーション、デジタルカメラアプリケーション、インスタントメッセージングアプリケーション、モバイルアプリケーション、ビデオ通信会議アプリケーション、ビデオブロードキャストアプリケーション、又はビデオストリーミングアプリケーションのために使用できる。
【００１５】
装置１００は、多種多様なデータタイプ及びフォーマットを処理することが可能である。たとえば、以下でより詳細に説明するように、装置１００は、静止画像データ、動画（ビデオ）データ、又は他のマルチメディアデータを処理することができる。画像データは、コンピュータ生成グラフィックスデータを含むことができる。装置１００は、グラフィックス処理システム１０２とメモリ１０４とディスプレイ装置１０６とを含む。プログラマブルプロセッサ１０８、１１０及び１１４は、グラフィックス処理システム１０２内に論理的に含まれる。プログラマブルプロセッサ１０８は、制御プロセッサ、又は汎用プロセッサとすることができる。プログラマブルプロセッサ１１０はグラフィックスプロセッサとすることができ、プログラマブルプロセッサ１１４はディスプレイプロセッサとすることができる。制御プロセッサ１０８は、グラフィックスプロセッサ１１０とディスプレイプロセッサ１１４の両方を制御することが可能である。プロセッサ１０８、１１０及び１１４は、スカラープロセッサ又はベクトルプロセッサとすることができる。一態様では、装置１００は、他の形式のマルチメディアプロセッサを含むことができる。
【００１６】
図１Ａの例では、装置１００のグラフィックス処理システム１０２は、メモリ１０４とディスプレイ装置の両方に結合される。メモリ１０４は、命令及び／又はデータを記憶することが可能な任意のパーマネント又は揮発性メモリを含むことができる。ディスプレイ装置１０６は、ＬＣＤ（液晶ディスプレイ）又はテレビジョン（ＴＶ）ディスプレイデバイスなど、表示の目的で、３Ｄ画像データ、２Ｄ画像データ又はビデオデータを表示することが可能な任意の装置とすることができる。
【００１７】
グラフィックスプロセッサ１１０は、コンピュータグラフィックスをレンダリング、操作、及び表示するために利用される専用グラフィックスレンダリングデバイスとすることができる。グラフィックスプロセッサ１１０は、様々な複雑なグラフィックス関連アルゴリズムを実装することができる。たとえば、複雑なアルゴリズムは、２次元又は３次元コンピュータグラフィックスの表現に対応することができる。グラフィックスプロセッサ１１０は、点、線、及び三角形又は他の多角形サーフェス（面）を形成することなど、いくつかのいわゆる「プリミティブ」グラフィックス演算を実装して、ディスプレイ装置１０６などのディスプレイ上に複雑な３次元画像を生成することができる。
【００１８】
本開示では、「レンダリングする」という用語は、一般に３Ｄ及び／又は２Ｄレンダリングを指す。例として、グラフィックスプロセッサ１１０は、ＯｐｅｎＧＬ命令を利用して３Ｄグラフィックスフレームをレンダリングするか、又は、ＯｐｅｎＶＧ命令を利用して２Ｄグラフィックスサーフェスをレンダリングすることができる。ただし、グラフィックスプロセッサ１１０は、グラフィックスをレンダリングするための任意の規格、方法又は技法を利用することができる。
【００１９】
グラフィックスプロセッサ１１０は、メモリ１０４に記憶された命令を実施することができる。メモリ１０４は、（グラフィックス又はビデオアプリケーションなどの）アプリケーションのためのアプリケーション命令１１８と、ＡＰＩライブラリ１２０と、ドライバ１２２とを記憶することが可能である。アプリケーション命令１１８は、実行のためにメモリ１０４からグラフィックス処理システム１０２にロードできる。たとえば、制御プロセッサ１０８とグラフィックスプロセッサ１１０とディスプレイプロセッサ１１４とのうちの１つ又は複数は、命令１１８のうちの１つ又は複数を実行することができる。
【００２０】
制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４は、また、アプリケーション命令１１８の実行中に、ＡＰＩライブラリ１２０又はドライバ１２２内に含まれる命令をロードし、実行することができる。命令１１８は、ＡＰＩライブラリ１２０又はドライバ１２２内のある機能を参照するか、又は他の場合は起動することができる。したがって、以下でより詳細に説明するように、グラフィックス処理システム１０２は、命令１１８を実行するとき、ＡＰＩライブラリ１２０及び／又はドライバ１２２内の識別された命令を実行することもできる。ドライバ１２２は、制御プロセッサ１０８とグラフィックスプロセッサ１１０とディスプレイプロセッサ１１４とのうちの１つ又は複数に固有の機能を含むことができる。一態様では、アプリケーション命令１１８、ＡＰＩライブラリ１２０、及び／又はドライバ１２２は、不揮発性データ記憶媒体などのストレージデバイスからメモリ１０４にロードできる。一態様では、アプリケーション命令１１８、ＡＰＩライブラリ１２０、及び／又はドライバ１２２は、メモリ１０４に動的に無線でダウンロードされる１つ又は複数のダウンロード可能なモジュールを備えることができる。
【００２１】
グラフィックスプロセッサ１１０は、オンスクリーンサーフェス又はオフスクリーンサーフェスなどのグラフィックスサーフェスをレンダリングするとき、そのようなレンダリングデータをバッファエリア１１２に記憶することができる。バッファエリア１１２は、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、埋込みダイナミックランダムアクセスメモリ（ｅＤＲＡＭ）、又はスタティックランダムアクセスメモリ（ＳＲＡＭ）など、データを記憶することが可能な任意のパーマネント又は揮発性メモリなどのデータ記憶デバイスとすることができる。一態様では、図１Ｂに示すように、バッファエリア１１２はメモリ１０４内に直接含まれるとしてもよい。レンダリングされる各グラフィックスサーフェスは、そのサイズ及び形状によって定義される。ディスプレイプロセッサ１１４によって、ポストレンダリングのスケーリング及び回転機能をレンダリングされたサーフェスに適用することができるので、サイズ及び形状は、使用されているディスプレイ装置１０６の実際の物理的サイズによって制限されない。
【００２２】
バッファエリア１１２は、複数のオフスクリーンサーフェスバッファ１１６Ａ〜１１６Ｎ（総称して１１６）を含むことができる。各オフスクリーンサーフェスバッファ１１６Ａ〜１１６Ｎは、特定のオフスクリーンサーフェスに関連する。たとえば、オフスクリーンサーフェスバッファ１１６Ａ〜１１６Ｎのすべてが、実行中にアプリケーション命令１１８によって生成されたある特定のオフスクリーンサーフェスに関連することがある。各バッファ１１６Ａ〜１１６Ｎは、オフスクリーンサーフェスに関する情報を保持することが可能であり、読み出しバッファ、書き込みバッファ、又はその両方を構成することができる。
【００２３】
オフスクリーンサーフェスは、様々なコンテキストにおいて、様々な目的のために使用できる。たとえば、１つ又は複数のオフスクリーンサーフェスは、３Ｄ制御装置を用いてビデオプレーヤを表示するために、アニメーション化されたカーソルを表示するために、又はシステム状態インジケータ（たとえば、ワイヤレス信号強度メータ）を表示するために、ウィンドウサーフェスなどのオンスクリーンサーフェスと合成できる。
【００２４】
一態様では、サーフェス（レンダリングされたサーフェス）のためのレンダリングされた出力データは、グラフィックスプロセッサ１１０によって書き込みバッファに書き込まれる。したがって、グラフィックスプロセッサ１１０は、オフスクリーンサーフェスをレンダリングした後、サーフェスのためのレンダリングされた出力データを、書き込みバッファとして識別されるバッファ１１６Ａ〜１１６Ｎのうちの１つ又は複数に書き込む。この態様では、ディスプレイプロセッサ１１４及びグラフィックスプロセッサ１１０は、読み出しバッファとして識別されるバッファ１１６Ａ〜１１６Ｎのうちの１つ又は複数から、レンダリングされた出力データを読み出すことが可能である。場合によっては、ディスプレイプロセッサ又はグラフィックスプロセッサ１１０は、また、ファイルから、又は無線でデータを読み出すことが可能である。
【００２５】
たとえば、ディスプレイプロセッサ１１４は、バッファ１１６Ａ〜１１６Ｎのうちの１つから、レンダリングされた出力データを読み出して、ディスプレイ装置１０６上に表示するためのそのようなデータを準備することができる。ディスプレイプロセッサ１１４は、レンダリングされたグラフィックスフレームに対して、ディスプレイ装置１０６を駆動するために、ポストレンダリング機能を実行することができるプロセッサである。ポストレンダリング機能は、スケーリング、回転、ブレンディング、カラーキーイング、及び／又はオーバーレイを含むことができる。たとえば、ディスプレイプロセッサ１１４は、一定アルファブレンディングを用いたカラーキーイング、一定アルファブレンディングを用いないカラーキーイング、全サーフェス一定アルファブレンディング、又は全サーフェスピクセル単位アルファブレンディングなど、いくつかのブレンディングモードのうちの１つを使用することによってサーフェスを合成することができる。グラフィックスプロセッサ１１０は、テクスチャソースとしてバッファ１１６Ａ〜１１６Ｎのうちの１つ又は複数から、レンダリングされた出力データを読み出すこともできる。いくつかの例では、制御プロセッサ１０８も、バッファ１１６Ａ〜１１６Ｎのうちの１つ又は複数から、レンダリングされた出力データを読み出すことができる。
【００２６】
一態様では、グラフィックスプロセッサ１１０は、グラフィックスサーフェスをレンダリングし、レンダリングされたグラフィックスデータを、書き込みバッファとして識別されているバッファ１１６Ａ〜１１６Ｎのうちの１つに記憶する。ディスプレイプロセッサ１１４が、レンダリングされたグラフィックデータを取り出すことができるように、レンダリングが完了したとき、バッファは読み出しバッファとして再識別される。次いで、グラフィックスプロセッサ１１０は、書き込みバッファとして識別されているバッファ１１６中の別のバッファにさらなるデータをレンダリングすることができる。特定のオフスクリーンサーフェスに関連するバッファ１１６内の少なくとも２つのバッファを有することによって、ディスプレイプロセッサ１１４は１つのバッファから読み出すことができる一方、グラフィックスプロセッサ１１０は別のバッファにレンダリングする。識別子又はポインタを使用して、所与のバッファ１１６Ａ〜１１６Ｎが読み出しバッファであるか又は書き込みバッファであるかを特定することができる。場合によっては、上記のように、バッファ１１６Ａ〜１１６Ｎのいずれかは、読み出し／書き込みバッファとしても識別できる。
【００２７】
ディスプレイプロセッサ１１４は、複数のグラフィックスサーフェスからのバッファ１１６から、レンダリングされた出力データを読み出すことが可能である。次いで、ディスプレイプロセッサ１１４は、レンダリングされたグラフィックスサーフェスを、ディスプレイ装置１０６上に表示されるフレームバッファ１６０中のグラフィックスフレーム上にオーバーレイすることができる。フレームバッファ１６０は、グラフィックス処理システム１０２内の専用メモリとすることができる。ただし、一態様では、図１Ｂに示すように、フレームバッファ１６０は、メモリ１０４内にシステムＲＡＭ（ランダムアクセスメモリ）を直接備えることができる。
【００２８】
一態様では、グラフィックスフレームは、ウィンドウサーフェスなどの少なくとも１つのオンスクリーンサーフェスを含む。各グラフィックスサーフェスがオーバーレイされるレベルは、グラフィックスサーフェスに対して定義されるサーフェスレベルによって決定される。このサーフェスレベルは、アプリケーション命令１１８によってなど、ユーザプログラムによって定義できる。サーフェスレベルは、レンダリングされたサーフェスに関連するパラメータとして記憶できる。
【００２９】
サーフェスレベルは任意の数として定義でき、数が大きければ大きいほど、サーフェスは、表示されたグラフィックスフレーム上のより高くに表示されることになる。すなわち、２つのサーフェスの部分が重なる状況では、より低いサーフェスレベルをもつ任意のサーフェスの重なる部分の代わりに、より高いサーフェスレベルをもつサーフェスの重なる部分が表示されることになる。単純な例として、デスクトップコンピュータ上で使用される背景画像は、デスクトップ上のアイコンよりも低いサーフェスレベルを有する。重なる２つのサーフェスが一緒にブレンドできるように、サーフェスレベルは、場合によっては、透明度情報と合成されることがある。これらの場合、カラーキーイングを使用することができる。第１のサーフェス中のピクセルがキーカラーに一致しない場合、アルファ（透明度）ブレンディングが使用可能でなければ、第１のサーフェスを出力ピクセルとして選択することができる。アルファブレンディングが使用可能である場合、第１のサーフェスのピクセルと第２のサーフェスのピクセルとを通常通りブレンドすることができる。第１のサーフェスのピクセルがキーカラーに一致した場合、第２のサーフェスのピクセルを選択し、アルファブレンディングを実行しない。
【００３０】
一態様では、制御プロセッサ１０８は、カリフォルニア州サンディエゴのＱｕａｌｃｏｍｍ（登録商標）社によって設計された移動局モデム中に埋め込まれたＡＲＭ11プロセッサなどのＡｄｖａｎｃｅｄ  ＲＩＳＣ（縮小命令セットコンピュータ）Ｍａｃｈｉｎｅ（ＡＲＭ）プロセッサとすることができる。一態様では、ディスプレイプロセッサ１１４は、Ｑｕａｌｃｏｍｍ社によって設計された移動局モデム中に埋め込まれるモバイルディスプレイプロセッサ（ＭＤＰ）とすることもできる。プロセッサ１０８、１１０及び１１４のいずれかがバッファエリア１１２内のバッファ１１６Ａ〜１１６Ｎにアクセスすることが可能である。一態様では、各プロセッサ１０８、１１０及び１１４は、レンダリング能力を設け、グラフィックスサーフェスのためのレンダリングされた出力データをバッファ１１６Ａ〜１１６Ｎに書き込むことが可能である。
【００３１】
図２Ａは、本開示の一態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを実装するために使用される装置２００を例示するブロック図である。この態様では、図２Ａに示す装置２００は、図１Ａに示す装置１００の例示的な具体化である。装置２００は、グラフィックス処理システム２０２とメモリ２０４とディスプレイ装置２０６とを含む。図１Ａに示すメモリ１０４と同様に、図２のメモリ２０４は、アプリケーション命令２１８とＡＰＩライブラリ２２０とドライバ２２２とのためのストレージ空間を含む。図１Ａに示すグラフィックス処理システム１０２と同様に、図２のグラフィックス処理システム２０２は、プロセッサ２０８とグラフィックスプロセッサ２１０とディスプレイプロセッサ２１４とバッファエリア２１２とフレームバッファ２６０とを含む。プロセッサ２０８は、制御プロセッサ、又は汎用プロセッサとすることができる。一態様では、プロセッサ２０８はシステムＣＰＵ（中央処理装置）を備えることができる。
【００３２】
一態様では、図２Ｄに示すように、バッファエリア２１２はメモリ２０４内に含められるとしてもよい。フレームバッファ２６０は、グラフィックス処理システム２０２内の専用メモリとすることができる。ただし、一態様では、図２Ｄに示すように、フレームバッファ２６０はメモリ２０４内にシステムＲＡＭ（ランダムアクセスメモリ）を直接備えることができる。
【００３３】
図２Ａの例では、バッファエリア２１２は、ｐｂｕｆｆｅｒサーフェスのために使用される複数のバッファ２１６Ａ〜２１６Ｎ（総称して２１６）、及びｐｉｘｍａｐサーフェスのために使用される別の複数のバッファ２１７Ａ〜２１７Ｎ（総称して２１７）を含む。バッファ２１６Ａ〜２１６Ｎはオフスクリーンｐｂｕｆｆｅｒサーフェスに関連し、バッファ２１７Ａ〜２１７Ｎはオフスクリーンｐｉｘｍａｐサーフェスに関連する。上記のように、ｐｂｕｆｆｅｒ及びｐｉｘｍａｐはオフスクリーンサーフェスの例である。このようにして、ｐｂｕｆｆｅｒサーフェスのためのレンダリングデータが記憶され、バッファ２１６Ａ〜２１６Ｎから処理されることができるように、個々のオフスクリーンｐｂｕｆｆｅｒサーフェスは、複数のバッファ２１６Ａ〜２１６Ｎに関連する。個々のオフスクリーンｐｉｘｍａｐサーフェスは複数のバッファ２１７Ａ〜２１７Ｎに関連する。上記のように、ｐｂｕｆｆｅｒは、たとえば、ＯｐｅｎＧＬサーバサイド（ドライバ内部）動作に関連するメモリ空間に記憶できるオフスクリーンメモリバッファである。ｐｉｘｍａｐは、たとえば、クライアントアプリケーションに関連するメモリ空間に通常記憶できるオフスクリーン記憶領域である。一態様では、バッファ２１６及びバッファ２１７は、完全に別個のバッファ空間とすることができる。
【００３４】
個々の各バッファ２１６Ａ〜２１６Ｎは、読み出しバッファ、書き込みバッファ、又はその両方として識別できる。同様に、個々の各バッファ２１７Ａ〜２１７Ｎは、読み出しバッファ、書き込みバッファ、又はその両方として識別できる。一態様では、制御プロセッサ２０８、グラフィックスプロセッサ２１０、及び／又はディスプレイプロセッサ２１４は、バッファエリア２１２内のバッファ２１６Ａ〜２１６Ｎ及び２１７Ａ〜２１７Ｎを割り振り、これらのバッファのうちのどのバッファが読み出しバッファ、書き込みバッファ、又はその両方であるかを識別することが可能である。
【００３５】
一態様では、グラフィックスプロセッサ２１０は、オフスクリーンｐｂｕｆｆｅｒサーフェスをレンダリングし、レンダリングされたサーフェスデータを、バッファ２１６Ａなどの書き込みバッファとして識別されたバッファに書き込む。レンダリングが完了した後、グラフィックスプロセッサ２１０は、バッファ２１６Ａを読み出しバッファとして再識別し、バッファ２１６Ｎなどの別個のバッファを書き込みバッファとして識別する。次いで、グラフィックスプロセッサ２１０は、新規の、又は更新された、レンダリングされたサーフェスデータをバッファ２１６Ｎに書き込み、グラフィックスプロセッサ２１０又はディスプレイプロセッサ２１４は、バッファ２１６Ａから前のレンダリングされたサーフェスデータを読み出す。グラフィックスプロセッサ２１０が、バッファ２１６Ａから前のレンダリングされたサーフェスデータを、さらなるグラフィックス処理のためのテクスチャソースとして読み出すか、又は、ディスプレイプロセッサ２１４が、ディスプレイ装置２０６上に最終的に表示するために、バッファ２１６Ａからレンダリングされたサーフェスデータを読み出す。１つのオフスクリーンｐｂｕｆｆｅｒサーフェスのために複数のバッファ２１６Ａ〜２１６Ｎを利用することによって、オフスクリーンｐｂｕｆｆｅｒサーフェスのために読み出し及び書き込み動作を並列に実行することが可能である。
【００３６】
同様に、一態様では、グラフィックスプロセッサ２１０又は制御プロセッサ２０８は、オフスクリーンｐｉｘｍａｐサーフェスをレンダリングし、レンダリングされたサーフェスデータを、バッファ２１７Ａなど、書き込みバッファとして識別されたバッファに書き込むことができる。レンダリングが完了した後、グラフィックスプロセッサ２１０又は制御プロセッサ２０８は、バッファ２１７Ａを読み出しバッファとして再識別し、バッファ２１７Ｎなどの別個のバッファを書き込みバッファとして識別することができる。次いで、グラフィックスプロセッサ２１０又は制御プロセッサ２０８は、新規の、又は更新された、レンダリングされたサーフェスデータをバッファ２１７Ｎに書き込み、グラフィックスプロセッサ２１０、制御プロセッサ２０８又はディスプレイプロセッサ２１４は、バッファ２１７Ａから前のレンダリングされたサーフェスデータを読み出すことができる。１つのオフスクリーンｐｉｘｍａｐサーフェスのために複数のバッファ２１７Ａ〜２１７Ｎを利用することによって、読み出し及び書き込み動作を並列に実行することが可能である。ｐｉｘｍａｐサーフェスは、しばしば、プリレンダリングされた内容を含む可能性がより高く、しばしばファイルから読み出されることがある。
【００３７】
図２Ｂは、本開示の一態様による、図２Ａに示すＡＰＩライブラリ２２０のさらなる詳細を示すブロック図である。図２Ａに関して前述したように、ＡＰＩライブラリ２２０は、グラフィックスプロセッサ２１０、制御プロセッサ２０８、及び／又はディスプレイプロセッサ２１４によるアプリケーション実行中のアプリケーション命令２１８によって、メモリ２０４に記憶され、リンクされ、又は参照される。図２Ｃは、一態様による、図２Ａに示すドライバ２２２のさらなる詳細を示すブロック図である。ドライバ２２２は、グラフィックスプロセッサ２１０、制御プロセッサ２０８、及び／又はディスプレイプロセッサ２１４によるアプリケーション実行中のアプリケーション命令２１８及び／又はＡＰＩライブラリ２２０によって、メモリ２０４に記憶され、リンクされ、又は参照される。
【００３８】
図２Ｂでは、ＡＰＩライブラリ２２０は、ＯｐｅｎＧＬ  ＥＳ  ＡＰＩ２３０と、ＯｐｅｎＶＧ  ＡＰＩ２３２と、ＥＧＬ  ＡＰＩ２３４とを含む。図２Ｃに示すドライバ２２２は、ＯｐｅｎＧＬ  ＥＳドライバ２４０と、ＯｐｅｎＶＧドライバ２４２と、ＥＧＬドライバ２４４とを含む。ＯｐｅｎＧＬ  ＥＳ  ＡＰＩ２３０は、２Ｄ及び３Ｄグラフィックス機能など、ＯｐｅｎＧＬ  ＥＳによってサポートされる機能を行うために、グラフィックス処理システム２０２によるアプリケーション実行中に、アプリケーション命令２１８によって起動されるＡＰＩである。ＯｐｅｎＧＬ  ＥＳドライバ２４０は、グラフィックス処理システム２０２中のＯｐｅｎＧＬ  ＥＳ機能の低レベルのドライバのサポートのためのアプリケーション実行中に、アプリケーション命令２１８及び／又はＯｐｅｎＧＬ  ＥＳ  ＡＰＩ２３０によって起動される。
【００３９】
ＯｐｅｎＶＧ  ＡＰＩ２３２は、２Ｄベクトルグラフィックス機能など、ＯｐｅｎＶＧによってサポートされる機能を行うために、アプリケーション実行中にアプリケーション命令２１８によって起動されるＡＰＩである。ＯｐｅｎＶＧドライバ２４２は、グラフィックス処理システム２０２中のＯｐｅｎＶＧ機能の低レベルドライバのサポートのためのアプリケーション実行中に、アプリケーション命令２１８及び／又はＯｐｅｎＶＧ  ＡＰＩ２３２によって起動される。
【００４０】
ＥＧＬ  ＡＰ２３４（図２Ｂ）及びＥＧＬドライバ２４４（図２Ｃ）は、グラフィックス処理システム２０２中のＥＧＬ機能にサポートを行う。一態様では、ＥＧＬ拡張を、ＥＧＬ  ＡＰＩ２３４及びＥＧＬドライバ２４４内に組み込むことができる。図２Ｂ〜図２Ｃの例では、サーフェスオーバーレイ及びオフスクリーンマルチバッファ機能のためのＥＧＬ拡張を行う。したがって、ＥＧＬサーフェスオーバーレイ拡張のために、サーフェスオーバーレイＡＰＩ２３６はＥＧＬ  ＡＰＩ２３４内に含まれ、サーフェスオーバーレイドライバ２４６はＥＧＬドライバ２４４内に含まれる。同様に、ＥＧＬオフスクリーンマルチバッファ拡張のために、オフスクリーンマルチバッファＡＰＩ２３８はＥＧＬ  ＡＰＩ２３４内に含まれ、オフスクリーンマルチバッファドライバ２４８はＥＧＬドライバ２４４内に含まれる。
【００４１】
ＥＧＬサーフェスオーバーレイ拡張は、ディスプレイ装置２０６上に表示される（２Ｄサーフェス、３Ｄサーフェス、及び／又はビデオサーフェスなどの）複数のグラフィックスサーフェスのオーバーレイのためのサーフェスオーバーレイスタックを与える。オンスクリーンとオフスクリーンサーフェスの両方を含むことができるグラフィックスサーフェスはそれぞれ、関連するサーフェスレベルをスタック内に有する。サーフェスのオーバーレイは、それにより、スタック内のサーフェスのオーバーレイ順序にしたがって達成される。サーフェスオーバーレイの例について、図３Ｂ及び図３Ｄに示し、以下でより詳細に論じる。一態様では、オーバーレイスタックは、ウィンドウサーフェスなどの少なくとも１つのオンスクリーンサーフェスを含む。
【００４２】
ＥＧＬオフスクリーンマルチバッファ拡張は、ｐｂｕｆｆｅｒサーフェス又はｐｉｘｍａｐサーフェスなど、グラフィックス処理システム２０２によって処理される各オフスクリーンサーフェスに関連する定義された数のバッファのためのサポートを行う。たとえば、図２Ａに示すように、複数のバッファ２１６Ａ〜２１６Ｎは、ｐｂｕｆｆｅｒサーフェスに割り振られて関連し、複数のバッファ２１７Ａ〜２１７Ｎは、単一のｐｉｘｍａｐサーフェスに割り振られて関連するとしてもよい。さらに、図２Ａに関して前述したように、ＥＧＬオフスクリーンマルチバッファ拡張は、各バッファを、読み出しバッファ、書き込みバッファ、又はその両方として識別できるようにする。
【００４３】
図３Ａは、一態様による、各オフスクリーンサーフェスが複数のバッファに関連する複数のオフスクリーンサーフェス３００Ａ〜３００Ｎの例を示すブロック図である。図３Ａの例では、各オフスクリーンサーフェス３００Ａ〜３００Ｎは、図１Ａ又は図１Ｂに示す、グラフィックス処理システム１０２によって処理され、ディスプレイ装置１０６上に最終的に表示されるサーフェスである。これらのサーフェス３００Ａ〜３００Ｎはまた、図２Ａ又は図２Ｄに示すグラフィックス処理システム２０２によって処理されることがある。しかしながら、ただ例示のために、以下の図３Ａ〜図３Ｄの説明では、サーフェス３００Ａ〜３００Ｎがグラフィックス処理システム１０２によって処理されると仮定する。
【００４４】
各オフスクリーンサーフェス３００Ａ〜３００Ｎは、２Ｄサーフェス、３Ｄサーフェス、又はビデオサーフェスを備えることができる。フレームバッファ１６０内でキャプチャされ、ディスプレイ装置１０６上に表示されるデータの各フレーム内で、オフスクリーンサーフェス３００Ａ〜３００Ｎは、オーバーレイ順序にしたがってオーバーレイされる。この例を図３Ｂに示す。そのような方法では、２Ｄサーフェス、３Ｄサーフェス、及び／又はビデオサーフェスは、サーフェスオーバーレイスタック中にオーバーレイされ、ディスプレイ装置１０６上に一緒に表示できる。たとえば、ビデオゲームアプリケーションでは、あるゲームをプレイしているサーフェスに関係するサーフェスは、他のものでオーバーレイされる。場合によっては、静止画像データは、そのようなアプリケーションのオーバーレイスタック中のビデオデータでオーバーレイでき、そこで、静止画像データは背景グラフィックスを備え、ビデオデータは移動物体、スコアなどのためのデータを備えることができる。一態様では、オーバーレイスタックは、ウィンドウサーフェスなどの少なくとも１つのオンスクリーンサーフェスを含む。
【００４５】
オフスクリーンサーフェス３００Ａは、一態様によれば、グラフィックス処理システム１０２のバッファエリア１１２内で割り振られたバッファ３１６に関連する。バッファ３１６は複数のオフスクリーンサーフェスバッファ３１６Ａ〜３１６Ｎを含む。各バッファ３１６Ａ〜３１６Ｎは、読み出しバッファ、書き込みバッファ、又はその両方として識別され、オフスクリーンサーフェス３００Ａに関連するデータを、レンダリングするなど、保持することが可能である。
【００４６】
図３Ａの例では、バッファ３１６Ａは読み出しバッファとして識別され、バッファ３１６Ｎは書き込みバッファとして識別されている。したがって、他のデータがバッファ３１６Ｎに書き込まれている間、データは、バッファ３１６Ａから読み出される。たとえば、グラフィックスプロセッサ１１０は、サーフェス３００Ａのための新規の又は更新されたサーフェスデータをバッファ３１６Ｎにレンダリングするプロセス中であるとすることができる。これが行われている間、グラフィックスプロセッサ１１０、ディスプレイプロセッサ１１４、又は制御プロセッサ１０８は、バッファ３１６Ａから、サーフェス３００Ａのための前にレンダリングされたサーフェスデータを読み出すことができる。これらのタイプの読み出し及び書き込み動作が並列に行われることがあるので、オフスクリーンサーフェス３００Ａのためのレンダリングプロセス及び表示プロセスをグラフィックス処理システム１０２内で同時に行うことができる。
【００４７】
オフスクリーンサーフェス３００Ｎは、一態様によれば、グラフィックス処理システム１０２のバッファエリア１１２内で割り振られたバッファ３１７に関連する。バッファ３１７は複数のオフスクリーンサーフェスバッファ３１７Ａ〜３１７Ｎを含む。各バッファ３１７Ａ〜３１７Ｎは、読み出しバッファ、書き込みバッファ、又はその両方として識別され、オフスクリーンサーフェス３００Ｎに関連するデータを、レンダリングするなど、保持することが可能である。
【００４８】
図３Ａの例では、バッファ３１７Ａは読み出しバッファとして識別され、バッファ３１７Ｎは書き込みバッファとして識別されている。したがって、サーフェス３００Ｎに関連する他のデータがバッファ３１７Ｎに書き込まれている間、サーフェス３００Ｎに関連するデータがバッファ３１７Ａから読み出される。たとえば、グラフィックスプロセッサ１１０は、サーフェス３００Ｎのための新規の又は更新されたサーフェスデータをバッファ３１７Ｎにレンダリングするプロセス中とすることができる。これが行われている間、グラフィックスプロセッサ１１０、ディスプレイプロセッサ１１４、又は制御プロセッサ１０８は、バッファ３１７Ａからサーフェス３００Ｎのための前にレンダリングされたサーフェスデータを読み出すことができる。これらのタイプの読み出し及び書き込み動作が並列に行われることがあるので、オフスクリーンサーフェス３００Ｎのためのレンダリングプロセス及び表示プロセスをグラフィックス処理システム１０２内で同時に行うことができる。
【００４９】
図３Ｂは、一態様に係る、オンスクリーンサーフェスとともにディスプレイ装置１０６上に表示される、図３Ａに示すオフスクリーンサーフェス３００Ａ及び３００Ｎに関連する、オーバーレイされたサーフェスデータの例を示すブロック図である。図３Ａに関して今上述したように、オフスクリーンサーフェスバッファ３１６Ａは、オフスクリーンサーフェス３００Ａに関連する読み出しバッファとしてバッファ３１６内で識別され、オフスクリーンサーフェスバッファ３１７Ａは、オフスクリーンサーフェス３００Ｎに関連する読み出しバッファとしてバッファ３１７内で識別された。したがって、オフスクリーンサーフェス３００Ａのための（レンダリングされたサーフェス出力データなどの）サーフェスデータをバッファ３１６Ａから読み出し、オフスクリーンサーフェス３００Ｎのためのサーフェスデータをバッファ３１７Ａから読み出すことができる。
【００５０】
図３Ｂの例では、ディスプレイプロセッサ１１４がバッファ３１６Ａからオフスクリーンサーフェス３００Ａのためのサーフェスデータを読み出し、グラフィックス処理システム１０２のフレームバッファ１６０内にそのようなデータをオフスクリーンサーフェスデータ３１９Ａとして記憶すると仮定する。ディスプレイプロセッサ１１４は、また、バッファ（図示せず）からウィンドウサーフェスなどのオンスクリーンサーフェスのためのサーフェスデータを読み出し、フレームバッファ１６０内にそのようなデータをオンスクリーンサーフェスデータ３２３Ａとして記憶する。さらに、ディスプレイプロセッサ１１４は、バッファ３１７Ａからオフスクリーンサーフェス３００Ｎのためのサーフェスデータを読み出し、フレームバッファ１６０内にそのようなデータをオフスクリーンサーフェスデータ３２１Ａとして記憶することができる。このようにして、オフスクリーンサーフェスデータ３１９Ａ及び３２１Ａを、オンスクリーンサーフェスデータ３２３Ａとともに、ディスプレイ装置１０６上に表示される画像データの１つのフレーム内に含めることができる。
【００５１】
一態様では、オフスクリーンサーフェスデータ３１９Ａ及び３２１Ａを、オンスクリーンサーフェスデータ３２３Ａとともにサーフェスオーバーレイスタック内に含めることができる。この態様では、ディスプレイプロセッサ１１４は、サーフェスデータ３１９Ａ、３２１Ａ及び３２３Ａの各々をスタック内の別個のサーフェスレベルに関連付け、それにより、オフスクリーンサーフェスデータ３１９Ａ及び３２１Ａ、ならびにオンスクリーンサーフェスデータ３２３Ａのためのオーバーレイ順序を実装することができる。オフスクリーンサーフェスデータ３１９Ａは、オフスクリーンサーフェス３００Ａのためのサーフェスデータの１つのフレームに関連し、オフスクリーンサーフェスデータ３２１Ａは、オフスクリーンサーフェス３００Ｎのためのサーフェスデータの１つのフレームに関連する。
【００５２】
一態様では、サーフェス３００Ａ及び３００Ｎのレベル、又はそれらが特定のレベルに結び付けられたシーケンスを、サーフェスオーバーレイプロセス中に、両方とも考慮に入れることができる。ある場合では、複数のサーフェスは特定のレイヤに結び付けられる。レイヤは、後から前に（最もネガティブから最もポジティブに）処理できる。所与のレイヤ内で、複数のサーフェスは、それらがレイヤに結び付けられたシーケンス中で処理される。
【００５３】
図３Ｂに示すように、オフスクリーンサーフェスデータ３１９Ａ及び３２１Ａを、オンスクリーンサーフェスデータ３２３Ａとともに、ユーザに対して可視であるスクリーンエリア３３０Ａ内でディスプレイ装置１０６上に表示することができる。オフスクリーンサーフェスデータ３１９Ａ及び３２１Ａを、オンスクリーンサーフェスデータ３２３Ａとともに、ディスプレイプロセッサ１１４によって使用されるオーバーレイ順序に基づいてオーバーレイされたサーフェスとしてスクリーンエリア３３０Ａ内に表示することができる。オフスクリーンサーフェスデータ３１９Ａ及び３２１Ａは、フレームバッファ１６０内に含まれるのと同じ位置又は関係で表示されるとしてもよく、されないとしてもよい。サーフェスオーバーレイスタックは、ディスプレイ装置１０６上にサーフェスを表示するために任意のサーフェスオーバーレイレベルを割り当てるために使用されてもよい。この結果、グラフィックス処理システム１０２は、ディスプレイ装置１０６上でユーザに対して表示するためにオーバーレイされる２Ｄ、３Ｄ、及び／又はビデオサーフェスデータを与えることが可能である。たとえば、オフスクリーンサーフェス３００Ａが図３Ｂの例で３Ｄサーフェスであり、オフスクリーンサーフェス３００Ｎがビデオサーフェスである場合、これらのサーフェスに関連する３Ｄサーフェスデータ及びビデオサーフェスデータは、ディスプレイ装置１０６上に表示できる。２Ｄ、３Ｄ、及び／又はビデオサーフェスデータの任意の組合せは、ディスプレイ装置１０６上にオーバーレイできる。
【００５４】
図３Ｃは、一態様に係る、異なる識別された読み出しバッファ及び書き込みバッファを持つ複数のオフスクリーンサーフェス３００Ａ〜３００Ｎの例を示すブロック図である。図３Ｃでは、図３Ａに示す例とは逆に、オフスクリーンサーフェスバッファ３１６Ａは、オフスクリーンサーフェス３００Ａのための書き込みバッファとして識別され、オフスクリーンサーフェスバッファ３１６Ｎは、読み出しバッファとして識別されている。また、オフスクリーンサーフェス３００Ｎに対して、オフスクリーンサーフェスバッファ３１７Ａは、書き込みバッファとして識別され、オフスクリーンサーフェスバッファ３１７Ｎは読み出しバッファとして識別されている。
【００５５】
一態様では、制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４のうちの１つ又は複数は、バッファ３１６及び／又は３１７内にバッファ空間を割り振り、また、どのバッファ３１６Ａ〜３１６Ｎ及び３１７Ａ〜３１７Ｎがオフスクリーンサーフェス３００Ａ〜３００Ｎに対して読み出しバッファ、書き込みバッファ、又はその両方であるかを識別することができる。図３Ａ及び図３Ｃの例は、オフスクリーンサーフェスに適用されるにすぎないウィンドウサーフェスダブルバファリングの実装形態と同様に、任意の所与のバッファが所与の時点で読み出しバッファとして識別されるが、後で書き込みバッファとして識別できることを示す。
【００５６】
たとえば、図３Ａでは、オフスクリーンサーフェスバッファ３１６Ｎは、書き込みバッファとして識別される。したがって、オフスクリーンサーフェス３００Ａのためのレンダリング出力データは、レンダリングプロセス中にグラフィックスプロセッサ１１０などによってバッファ３１６Ｎに書き込まれることがある。図３Ａのバッファ３１６Ａが読み出しバッファとして識別されるため、別個のデータがバッファ３１６Ｎに並列に書き込まれる間に、オフスクリーンサーフェス３００Ａのためのサーフェスデータ（たとえば、前のレンダリングされたデータなど）は、バッファ３１６Ａから読み出されるとしてもよい。
【００５７】
たとえば、グラフィックスプロセッサ１１０がバッファ３１６Ｎへのデータのレンダリング及び書き込みを完了したとき、オフスクリーンサーフェス３００Ａのためのこのレンダリングされたデータがバッファ３１６Ｎから読み出されることができるように、図３Ｃ中に示すように、バッファ３１６Ｎは、読み出しバッファとして再識別されるとしてもよい。同様に、別個のデータがバッファ３１６Ｎから並列に読み出されている間、オフスクリーンサーフェス３００Ａのための新しいレンダリングされた出力データは、バッファ３１６Ａに書き込まれることができるように、図３Ｃに示すように、バッファ３１６Ａは、書き込みバッファとして再識別されるとしてもよい。したがって、あるシナリオでは、バッファ３１６Ａ〜３１６Ｎのうちの１つ又は複数は、異なる時点で読み出しバッファとして識別されることと書き込みバッファとして識別されることとの間で切り替わることができる。
【００５８】
同様に、バッファ３１７Ａ〜３１７Ｎのうちの１つ又は複数は、異なる時点で読み出しバッファとして識別されることと書き込みバッファとして識別されることとの間で切り替わることができる。図３Ａでは、バッファ３１７Ａは読み出しバッファとして識別され、バッファ３１７Ｎは書き込みバッファとして識別される。ただし、図３Ｃに示すように、バッファ３１７Ａは書き込みバッファとして再識別され、バッファ３１７Ｎは読み出しバッファとして再識別されている。
【００５９】
図３Ｄは、一態様に係る、オンスクリーンサーフェスとともにディスプレイ装置１０６上に表示される、図３Ｃに示すオフスクリーンサーフェス３００Ａ及び３００Ｎに関連する、オーバーレイされたサーフェスデータの例を示すブロック図である。オフスクリーンサーフェスバッファ３１６Ｎがオフスクリーンサーフェス３００Ａのための読み出しバッファとして識別されるので、ディスプレイプロセッサ１１４は、バッファ３１６Ｎからデータを読み出し、フレームバッファ１６０内にそのようなデータをオフスクリーンサーフェスデータ３１９Ｎとして記憶することができる。ディスプレイプロセッサ１１４は、また、バッファ３１７Ｎからオフスクリーンサーフェス３００Ｎに関連するデータを読み出し、フレームバッファ１６０内にそのようなデータをオフスクリーンサーフェスデータ３２１Ｎとして記憶することができる。このようにして、オフスクリーンサーフェスデータ３１９Ｎ及び３２１Ｎを、オンスクリーンサーフェスデータ３２３Ｎとともに、ディスプレイ装置１０６上に表示される画像データの１つのフレーム内に含めることができる。
【００６０】
図３Ｂの例と同様に、図３Ｄに示すオフスクリーンサーフェスデータ３１９Ｎ及び３２１Ｎは、オンスクリーンサーフェスデータ３２３Ｎとともに、オーバーレイされるサーフェスに順序を与えるサーフェスオーバーレイスタック内に含まれるとしてもよい。ディスプレイプロセッサ１１４は、サーフェスデータ３１９Ｎ、３２１Ｎ及び３２３Ｎの各々をスタック内の別個のサーフェスレベルに関連付け、それにより、オフスクリーンサーフェスデータ３１９Ｎ及び３２１Ｎ、ならびにオンスクリーンサーフェスデータ３２３Ｎのためのオーバーレイ順序を実装することができる。次いで、オフスクリーンサーフェスデータ３１９Ｎ及び３２１Ｎは、オンスクリーンサーフェスデータ３２３Ｎとともに、ユーザに対して可視であるスクリーンエリア３３０Ｎ内でディスプレイ装置１０６上に表示されるとしてもよい。サーフェスデータ３１９Ｎ、３２１Ｎ及び３２３Ｎは、ディスプレイプロセッサ１１４によって使用されるオーバーレイ順序に基づいてオーバーレイされたサーフェスとして、スクリーンエリア３３０Ｎ内に表示されるとしてもよい。
【００６１】
図４は、一態様に係る、図１Ａ又は図１Ｂのグラフィックス処理システム１０２に示す制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４のうちの１つ又は複数によって、あるいは、図２Ａ又は図２Ｄのグラフィックス処理システム２０２に示す制御プロセッサ２０８、グラフィックスプロセッサ２１０、及び／又はディスプレイプロセッサ２１４のうちの１つ又は複数によって実行される方法の流れ図である。ただ例示のために、以下の説明では、図４に示す方法がグラフィックス処理システム１０２中の１つ又は複数のプロセッサによって実行されると仮定する。
【００６２】
最初に、制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４のうちの１つ又は複数は、グラフィックス処理において使用されるオフスクリーンサーフェスにすべてが関連するバッファ１１６Ａ〜１１６Ｎなどの複数のバッファを割り振る（図４の４００）。バッファ１１６Ａ〜１１６Ｎは、バッファエリア１１２内に割り振られ、定義された数のバッファを備えることができる。オフスクリーンサーフェスは、ｐｂｕｆｆｅｒサーフェス又はｐｉｘｍａｐサーフェスを備えることができる。一態様では、バッファは、バッファエリア１１２の第１のエリア内か、又はバッファエリア１１２の第２のエリア内のいずれかに割り振られることができる。場合によっては、第１のエリアはｐｂｕｆｆｅｒに関連し、第２のエリアはｐｉｘｍａｐに関連することがあり、第１のエリアと第２のエリアとは異なるエリアである。
【００６３】
バッファ１１６Ａ〜１１６Ｎ内の第１のバッファは、書き込みバッファとして識別される（図４の４０２）。書き込み動作中に、レンダリングデータなどのオフスクリーンサーフェスに関係する情報は、第１のバッファに書き込まれる。バッファ１１６Ａ〜１１６Ｎ内の第２のバッファは、読み出しバッファとして識別される（図４の４０４）。読み出し動作中に、オフスクリーンサーフェスに関係する情報は、第２のバッファから読み出される。一態様では、書き込みバッファが読み出しバッファとは異なるように、第１のバッファと第２のバッファとは異なるバッファである。
【００６４】
４０６において、グラフィックスプロセッサ１１０又は制御プロセッサ１０８などの１つ又は複数のプロセッサは、オフスクリーンサーフェスをレンダリングし、書き込み動作中にレンダリング情報を第１のバッファに書き込むことによって、レンダリング情報を生成する。４０８において、ディスプレイプロセッサ１１４などの１つ又は複数のプロセッサは、読み出し動作中に、表示のために第２のバッファからオフスクリーンサーフェスに関係する情報を読み出す。そのような方法では、一態様によれば、複数のバッファは、オフスクリーンサーフェスのために備えられることができる。この態様では、読み出しバッファ及び／又は書き込みバッファとして関連するバッファを識別するために、（たとえば、以下でより詳細に説明するｅｇｌＢｕｆｆｅｒＭａｋｅＣｕｒｒｅｎｔＱＵＡＬＣＯＭＭ機能などの）バッファ選択機能が起動される。たとえば、オフスクリーンサーフェスのレンダリングが所与のフェース中に完了し、レンダリング情報が第１のバッファに書き込まれたとき、たとえば、バッファ選択機能は、レンダリング情報が読み出され、表示される画像又はビデオのフレーム内にオフスクリーンサーフェスが合成されるように、第１のバッファを読み出しバッファとして識別するために起動される。バッファ選択機能の起動は、また、オフスクリーンサーフェスのための新しいレンダリング情報が第２のバッファに書き込まれることができるように、第２のバッファを書き込みバッファとして識別することができる。
【００６５】
このように、制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４のうちの１つ又は複数は、オフスクリーンサーフェスに対して、新規の又は更新されたサーフェスデータを第１の（書き込み）バッファに書き込んでいる間、第２の（読み出し）バッファからサーフェスデータを同時に読み出すことができる。それにより、オフスクリーンサーフェスのためのマルチバッファサポートは提供される。複数のサーフェス（マルチバッファサポートを有する各サーフェス）に関連するサーフェスデータは、一態様では、ディスプレイプロセッサ１１４によってバッファエリア１１２からサーフェスオーバーレイスタックに読み出され、オーバーレイ順序にしたがってディスプレイ装置１０６上に表示するために与えられる。これらのサーフェスは、２Ｄサーフェス、３Ｄサーフェス、及び／又はビデオサーフェスを備えることができる。
【００６６】
図５は、一態様に係る、図１Ａ又は図１Ｂのグラフィックス処理システム１０２に示す制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４のうちの１つ又は複数によって、あるいは、図２Ａ又は図２Ｄのグラフィックス処理システム２０２に示す制御プロセッサ２０８、グラフィックスプロセッサ２１０、及び／又はディスプレイプロセッサ２１４のうちの１つ又は複数によって実行される方法の流れ図である。ただ例示のために、以下の説明では、図５に示す方法がグラフィックス処理システム１０２中の１つ又は複数のプロセッサによって実行されると仮定する。
【００６７】
最初に、５００において、制御プロセッサ１０８、グラフィックスプロセッサ１１０、及び／又はディスプレイプロセッサ１１４のうちの１つ又は複数は、それぞれがオフスクリーンサーフェスに関連するＭを２以上とする複数の「Ｍ個の」バッファを割り振る。たとえば、Ｍ個のバッファは（ただ例示のために）第１のバッファと第２のバッファとを含む。書き込み動作中に第１のバッファにオフスクリーンサーフェスに関係する情報が書き込まれるように、第１のバッファはオフスクリーンサーフェスのための書き込みバッファとして識別される。読み出し動作中に第２のバッファからオフスクリーンサーフェスに関係する情報が読み出されるように、第２のバッファは、オフスクリーンサーフェスのための読み出しバッファとして識別される。
【００６８】
５０２において、１つ又は複数のプロセッサは、それぞれが追加のオフスクリーンサーフェスに関連する、Ｎを２以上とする複数の「Ｎ個の」バッファを割り振る。たとえば、Ｎ個のバッファは（ただ例示のために）第３のバッファと第４のバッファとを含む。追加の書き込み動作中に第３のバッファに追加のオフスクリーンサーフェスに関係する情報が書き込まれるように、第３のバッファは追加のオフスクリーンサーフェスのための書き込みバッファとして識別される。追加の読み出し動作中に第４のバッファから追加のオフスクリーンサーフェスに関係する情報が読み出されるように、第４のバッファは、追加のオフスクリーンサーフェスのための読み出しバッファとして識別される。
【００６９】
５０４において、ディスプレイプロセッサ１１４などの１つ又は複数のプロセッサは、第２のバッファからオフスクリーンサーフェスに関係する情報を読み出す。５０６において、ディスプレイプロセッサ１１４などの１つ又は複数のプロセッサは、第４のバッファから追加のオフスクリーンサーフェスに関係する情報を読み出す。
【００７０】
５０８において、１つ又は複数のプロセッサは、オーバーレイ順序にしたがって、（オフスクリーンサーフェスに関連する）第２のバッファ及び（追加のオフスクリーンサーフェスに関連する）第４のバッファの内容を、オンスクリーンサーフェスに関連するデータと組み合わせる。たとえば、この情報はサーフェスオーバーレイスタック内で組み合わせることができる。
【００７１】
５１０において、１つ又は複数のプロセッサは、ディスプレイ装置１０６などのディスプレイ装置上で、オフスクリーンサーフェス及び追加のオフスクリーンサーフェスをオンスクリーンサーフェスとともにオーバーレイする。サーフェスは、オーバーレイ順序にしたがってオーバーレイされる。
【００７２】
前述のように、オフスクリーンサーフェスのためのマルチバッファサポートは、システム１０２及び／又はシステム２０２（図２Ａ）内の１つ又は複数のプロセッサによって実装できる。一態様では、１つ又は複数のプロセッサによって実行されると、オフスクリーンサーフェスのためのマルチバッファサポートを実装するための機能は、ＡＰＩライブラリ１２０及び／又はドライバ１２２内又はＡＰＩライブラリ２２０及び／又はドライバ２２２（図２Ａ）内に含まれる。たとえば、そのような機能は、オフスクリーンマルチバッファＡＰＩ２３８（図２Ｂ）内及び／又はオフスクリーンマルチバッファドライバ２４８（図２Ｃ）内に含まれる。一態様では、この機能はＥＧＬ拡張の一部として与えられる。ただ例示のために、以下の説明では、そのような機能がＥＧＬ拡張（すなわち、ＥＧＬ仕様への拡張）の一部として与えられると仮定する。
【００７３】
一態様では、オフスクリーンサーフェスのマルチバッファサポートのためにＥＧＬ拡張が与えられる。ここで、ＥＧＬコード内で、サーフェス生成時に、ｅｇｌＣｒｅａｔｅＰｂｕｆｆｅｒＳｕｒｆａｃｅ又はｅｇｌＣｒｅａｔｅＰｉｘｍａｐＳｕｒｆａｃｅに渡される属性リストは、オフスクリーンサーフェスに関連付けるべきバッファの総数を示すＥＧＬｉｎｔが後に続くＥＧＬ＿ＢＡＣＫ＿ＢＵＦＦＥＲトークンを含むことができる。たとえば、ｐｉｘｍａｐオフスクリーンサーフェスの場合、指定されたバッファの数が１よりも大きい場合、ある事例では、ｐｉｘｍａｐパラメータは、ｐｉｘｍａｐサーフェスにおける各バッファのために使用するＮａｔｉｖｅＰｉｘｍａｐＴｙｐｅｓへのポインタのＮＵＬＬ終端アレイとして扱われる。
【００７４】
一態様では、各オフスクリーンサーフェスは描画（書き込み）バッファに関連し、読み出しバッファにも関連する。したがって、ＥＧＬＳｕｒｆａｃｅ構造はｄｒａｗ＿ｃｕｒｒｅｎｔパラメータとｒｅａｄ＿ｃｕｒｒｅｎｔパラメータとを含むように変更できる。ｄｒａｗ＿ｃｕｒｒｅｎｔパラメータの値は現在の描画バッファを指定し、ｒｅａｄ＿ｃｕｒｒｅｎｔパラメータの値は現在の読み出しバッファを指定する。ｄｒａｗ＿ｃｕｒｒｅｎｔ及びｒｅａｄ＿ｃｕｒｒｅｎｔは、いずれもＥＧＬｉｎｔ型とすることができる。
【００７５】
関数ｅｇｌＢｕｆｆｅｒＭａｋｅＣｕｒｒｅｎｔＱＵＡＬＣＯＭＭは、マルチバッファリングされたサーフェスのｄｒａｗ＿ｃｕｒｒｅｎｔ及びｒｅａｄ＿ｃｕｒｒｅｎｔを設定するために使用できる。ｅｇｌＢｕｆｆｅｒＭａｋｅＣｕｒｒｅｎｔＱＵＡＬＣＯＭＭの例示的な関数宣言を以下に示す。
【数１】
2011510407.tif 000003
【００７６】
一態様に係る、オフスクリーンサーフェスのためのマルチバッファサポートを行うＥＧＬ拡張のための例示的なＥＧＬコードは、ただ例示のために以下に示される。この例示的なコードは、ｅｇｌＢｕｆｆｅｒＭａｋｅＣｕｒｒｅｎｔＱＵＡＬＣＯＭＭ関数を利用する。
【数２】
2011510407.tif 000004
【００７７】
この例示的なＥＧＬコードでは、既存のＥＧＬ＿ＢＡＣＫ＿ＢＵＦＦＥＲトークンの後にＥＧＬｉｎｔの値５が続くので、オフスクリーンサーフェス属性は、割り振られ、サーフェスに関連付けられる合計５つのバッファを要求するように初期化される。この例示的なコードでは、ネイティブＡＰＩを用いてすでにビデオストリームが作成されており、ｖｉｄｅｏ＿ｐｏｏｌリストに対してＮＵＬＬ終端アレイを与えると仮定する。次いで、このコードは、ＥＧＬ仕様において与えられるｅｇｌＣｒｅａｔｅＰｉｘｍａｐＳｕｒｆａｃｅ関数呼び出しを使用して、ビデオに対応するマルチバッファリングされたｐｉｘｍａｐサーフェスを生成する。
【００７８】
ビデオ処理中に、読み出しバッファ（又は表示されるバッファ）は、ｖｉｄｅｏ＿ｐｏｏｌリスト内のインデックスを変更することができる。ＥＧＬによって使用される現在のインデックスを設定するため、及び現在の描画（書き込み）及び読み出しバッファを設定するために、ｅｇｌインデックスが変化したときはいつでもＢｕｆｆｅｒＭａｋｅＣｕｒｒｅｎｔＱＵＡＬＣＯＭＭを呼び出すことができる。例示的なコードでは、現在の書き込みバッファと読み出しバッファの両方が、新しいビデオインデックスである同じインデックスｉｄｘを用いて設定される。この例では、識別された書き込みバッファと読み出しバッファとが同じバッファであるが、確かに常にこうであるとは限らない。多くの状況では、図３Ａ〜図３Ｄの例に示すように、識別された書き込みバッファと読み出しバッファとは異なるバッファである。
【００７９】
本開示で説明する技術は、汎用マイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は他の同等の論理デバイス内に実装できる。したがって、本明細書で使用する「プロセッサ」又は「コントローラ」という用語は、前述の構造、又は本明細書に記載の技法の実装に好適な他の構造のいずれかを指す。
【００８０】
図１〜図４に示す様々な構成要素は、ハードウェア及び／又はソフトウェアの任意の適切な組合せによって実現できる。図１〜図４では、様々な構成要素は、別々のユニット又はモジュールとして示される。しかしながら、図１Ａ〜図４を参照しながら説明した様々な構成要素のすべて又はいくつかは、共通ハードウェア及び／又はソフトウェア内の組合せユニット又はモジュールに統合できる。したがって、構成要素、ユニット、又はモジュールとしての特徴の表現は、説明しやすいように特定の機能的特徴を強調するものであり、別々のハードウェア又はソフトウェア構成要素によるそのような特徴の実現を必ずしも必要としない。場合によっては、様々なユニットを、１つ又は複数のプロセッサによって実行されるプログラマブルプロセスとして実装できる。
【００８１】
本明細書で説明する構成要素及び技法は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組合せで実装できる。モジュール又は構成要素として説明する機能は、集積論理デバイスに一緒に、又はディスクリートであるが相互運用可能な論理デバイスとして別々に実装できる。様々な態様では、そのような構成要素は、少なくとも部分的に、集積回路チップ又はチップセットなど、まとめて集積回路デバイスと呼ぶことができる１つ又は複数の集積回路デバイスとして形成することができる。そのような回路は、単一の集積回路チップデバイス中、又は複数の相互運用可能な集積回路チップデバイス中に設けることができ、様々な画像、ディスプレイ、音声、又は他のマルチメディアアプリケーション及びデバイスのいずれかにおいて使用できる。いくつかの態様では、たとえば、そのような構成要素は、ワイヤレス通信デバイスハンドセットなどのモバイルデバイスの一部をなすことができる。
【００８２】
ソフトウェアで実装した場合、これらの技法は、１つ又は複数のプロセッサによって実行されると、上記で説明した方法の１つ又は複数を実行する命令をもつコードを備えるコンピュータ可読媒体によって少なくとも部分的に実現できる。コンピュータ可読媒体は、パッケージング材料を含む、コンピュータプログラム製品の一部をなすことができる。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、埋込みダイナミックランダムアクセスメモリ（ｅＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＦＬＡＳＨメモリ、磁気又は光学データ記憶媒体を備えることができる。
【００８３】
本技法は、追加又は代替として、命令又はデータ構造の形態でコードを搬送又は伝達し、１つ又は複数のプロセッサによってアクセス、読み出し、及び／又は実行できるコンピュータ可読通信媒体によって、少なくとも部分的に実現できる。いかなる接続もコンピュータ可読媒体と適切に呼ぶことができる。たとえば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線（ＤＳＬ）、又は赤外線、無線、及びマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、又は他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、又は赤外線、無線、及びマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。利用される任意のソフトウェアは、１つ又は複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、又は他の等価な集積又はディスクリート論理回路など、１つ又は複数のプロセッサによって実行できる。
【００８４】
本開示の様々な態様について説明した。これら及び他の態様は以下の特許請求の範囲内に入る。
【図１Ａ】
2011510407.tif 000005
【図１Ｂ】
2011510407.tif 000006
【図２Ａ】
2011510407.tif 000007
【図２Ｂ】
2011510407.tif 000008
【図２Ｃ】
2011510407.tif 000009
【図２Ｄ】
2011510407.tif 000010
【図３Ａ】
2011510407.tif 000011
【図３Ｂ】
2011510407.tif 000012
【図３Ｃ】
2011510407.tif 000013
【図３Ｄ】
2011510407.tif 000014
【図４】
2011510407.tif 000015
【図５】
2011510407.tif 000016
【国際調査報告】
2011510407.tif 000017
2011510407.tif 000018
2011510407.tif 000019