(58)【調査した分野】(Int.Cl.,DB名)
前記リクエストは、前記アプリケーションから、前記コンポジション・システムの1以上のアプリケーション・プログラミング・インタフェースを介して受信される、請求項2記載の方法。
前記仮想サーフェスは、前記ビジュアルを前記コンピューティング・デバイスのディスプレイ・デバイス上に表示するリクエストが受信される前に前記ビジュアルをレンダリングする機能を含む、請求項4記載の方法。
少なくとも部分的にハードウェアを用いて実装された1以上のモジュールを備え、コンポジション・システムを実装するよう構成されたコンピューティング・デバイスであって、前記コンポジション・システムは、1以上のプロセッサにより実行されたときに、
前記コンピューティング・デバイスの物理メモリ内に割り当てることなく、仮想サーフェスを初期化する動作であって、前記仮想サーフェスは、アプリケーションに対応するユーザ・インタフェース内に表示するためのビットマップ及び関連コンポジショナル・メタデータを含むコンポジション要素として、ビジュアルをレンダリングするために、前記アプリケーションにより使用可能であり、前記仮想サーフェスは、前記コンピューティング・デバイスにより表示されないが前記アプリケーションにより確認される個々のサーフェスを表す1以上の論理サーフェスの集合を含む、動作と、
前記ビジュアルをレンダリングするために、前記仮想サーフェスの一部のサイズを指定する、前記仮想サーフェスの前記一部を割り当てるリクエストの受信に応答して、前記ビジュアルをレンダリングするために、前記物理メモリ内に前記仮想サーフェスの前記一部を、前記コンポジション・システムにより割り当てる動作であって、物理メモリの前記割り当ては、前記ビジュアルをレンダリングするために前記アプリケーションによりリクエストされた前記サイズよりも大きいサイズを有する、動作と、
アップデートのための仮想サーフェスを提供するリクエストに応答して、新たな仮想サーフェスを割り当てる代わりに、前記アプリケーションによりリクエストされた前記サイズよりも大きい前記の割り当てられたサイズを有する前記仮想サーフェスの前記一部のうちの少なくとも一部を、前記コンピューティング・デバイスの前記コンポジション・システムにより使用する動作と、
を実行するよう構成されている、コンピューティング・デバイス。
【発明を実施するための形態】
【0006】
概要
仮想サーフェスを使用して、ビジュアル(visual)をレンダリングするためにサーフェスを割り当てて管理することができる。例えば、仮想サーフェスを使用して、ビジュアルをレンダリングするためにハードウェアにより割り当てられ得るメモリよりも大きなウェブ・ページのレンダリングを管理する、大きなウェブ・ページや没入型アプリケーション(immersive application)を管理する等、ハードウェアの制限を克服することができる。
【0007】
仮想サーフェス・コンポジション及びアップデート技術が、本明細書において説明される。1以上の実装において、レンダリングのためにサーフェスを管理する技術が説明される。これは、
図4及び
図5に関連してさらに説明されるアップデートの初期化及びバッチングをサポートする技術、
図6及び
図7に関連して説明されるアップデート及びルック・アサイド・リストの使用、
図8に関連して説明されるガターの使用、
図9に関連して説明されるブレンディング操作及びBLT操作、
図10に関連して説明されるプッシュ・ダウン等のサーフェス最適化技術、並びに、
図11に関連して説明される列挙及びクランピング、
図12に関連して説明されるメッシュ使用、及び
図13に関連して説明されるオクルージョン管理技術を含む。
【0008】
以下の記載において、本明細書で説明する仮想サーフェス技術を実行するために動作可能な例示的な環境が最初に説明される。次いで、例示的な環境及び他の環境において動作可能な例示的な手順が説明される。さらに、例示的な環境は、例示的な手順のパフォーマンスに限定されるものではない。
【0009】
例示的な環境
図1は、1以上の実施形態に従った動作環境を一般に100で示している。環境100は、1以上のプロセッサを含み得る処理システム104を有するコンピューティング・デバイス102、メモリ106として図示される例示的なコンピュータ読み取り可能な記憶媒体、オペレーティング・システム108、及び1以上のアプリケーション110を含む。コンピューティング・デバイス102は、限定ではなく例として、デスクトップ・コンピュータ、ポータブル・コンピュータ、携帯情報端末(PDA)といったハンドヘルド・コンピュータ、携帯電話、タブレット・コンピュータ等の任意の適切なコンピューティング・デバイスとして具現化することができる。コンピューティング・デバイス102の異なる例が、
図21において示され以下で説明される。
【0010】
コンピューティング・デバイス102は、処理システム104上で実行されるものとして示されメモリ106に記憶可能なオペレーティング・システム108を含む。コンピューティング・デバイス102は、メモリ106に記憶されるものとして示され処理システム104上で実行可能なアプリケーション110をさらに含む。オペレーティング・システム108は、アプリケーション110により使用される基本的なハードウェア・リソース及びソフトウェア・リソースを抽象化し得るコンピューティング・デバイス102の機能を表す。例えば、オペレーティング・システム108は、データがディスプレイ・デバイス112上にどのようにして表示されるかという機能を、この表示がどのようにして実現されるかをアプリケーション110が「知る」必要なく、抽象化し得る。コンピューティング・デバイス102の処理システム104及びメモリ106といったリソースやネットワーク・リソース等を抽象化するといった多様な他の例も意図されている。
【0011】
コンピューティング・デバイス102はまた、コンポジション・システム114を含むものとして示されている。コンポジション・システム114は、オペレーティング・システム108の一部として示されているが、スタンドアロン・モジュールとして、別個のアプリケーションとして、コンピューティング・デバイス102自体のハードウェアの一部(例えば、SOC又はASIC)として等、様々な形で実装されてよい。コンポジション・システム114は、ビジュアルをレンダリングするためにアプリケーション110により使用される1以上のアプリケーション・プログラミング・インタフェース(API)を介して機能を公開する等、ビジュアルをレンダリングするための多様な技術を使用することができる。
【0012】
例えば、そのような1つの技術は、スワップ・チェーン(swap chain)と呼ばれるオブジェクトに基づくものであり、これは、ビットマップを表すバッファのアレイを利用することができる。例えば、そのバッファの1つを使用して、ディスプレイ・デバイス112上に一度にデータを表示することができ、したがって、そのバッファは、「オンスクリーン・バッファ」又は「フロント・バッファ」と呼ばれることがある。他のバッファも、オフスクリーンのラスタ化のためにアプリケーション110に利用可能となっており、したがって、他のバッファは、「オフスクリーン・バッファ」又は「バック・バッファ」と呼ばれることがある。
【0013】
アプリケーション110は、様々な方法により、ディスプレイ・デバイス112上に表示されるものに変更を加えることができる。そのような最初の技術では、アプリケーション110は、ポインタを用いてオフスクリーン・バッファのうちの1つをオンスクリーン・バッファにしたりその逆を行ったりすること等により、バック・バッファのうちの1つを再描画して、内容を「フリップする(flip)」ことができる。
【0014】
そのような第2の技術では、異なるサイズのバッファを利用することができる。例えば、コンポジション・システム114は、オンスクリーン・バッファとして、第1のバッファを利用することができる。コンポジション・システム114はまた、オフスクリーン・バッファとして、第1のバッファよりも小さな第2のバッファを利用することができる。したがって、コンテンツに対するアップデートがなされる場合、そのアップデートは、第2のバッファにラスタ化することができる。次いで、例えば、bltを用いて、そのアップデートをオンスクリーン・バッファにコピーすることができる。このようにして、コンピューティング・デバイス102のリソースを節約することができる。
【0015】
コンポジション・システム114はまた、仮想サーフェス技術をサポートするよう構成され得る。こうした技術を使用して、ビジュアルをレンダリングするために使用されるコンピューティング・デバイス102のリソースを低減させるために、アプリケーション110の開発者を支援することができる。これは、仮想サーフェス118の使用を含み得る。これにより、アプリケーション110が、ビジュアル・データのサーフェスをタイル(tile)に分割し、次いで、前もってそのタイルをレンダリングすることを可能にする。以下でさらに説明されるように、サーフェスを分割するためにタイルが使用されない(例えば、アプリケーション110がサイズを指定する)他の実装も意図されている。
【0016】
仮想サーフェス118は、1以上の論理サーフェス120の集合として構成され得る。論理サーフェス120は、アプリケーション110により確認される個々のサーフェスを表し、1以上のビジュアルに関連付けることができる。例えば、論理サーフェス120は、固定サイズを有するタイルとして構成され得る。複数のタイルは、固定グリッド状に配列され得る。しかしながら、タイルが固定サイズで利用されない多様な他の例も意図されていることは明らかであろう。例えば、タイルのサイズは、ビジュアルをレンダリングしようとするアプリケーションにより指定することができ、したがって、この例におけるタイルのサイズは、アプリケーション自体により設定することができる。これは、以下の説明において、「チャンク(chunk)」とも呼ばれる。
【0017】
仮想サーフェス118を使用して、テクスチャにより表される領域よりも大きな領域を表すことができる。例えば、アプリケーション110は、作成時に、仮想テクスチャのサイズを指定することができる。サイズは、仮想サーフェス118のための境界を定める。サーフェスは、1以上のビジュアルに関連付けることができる。1以上の実装において、仮想サーフェスが最初に初期化されるとき、仮想サーフェスは、実際の割り当てによりバックされない。すなわち、仮想サーフェス118は、初期化時に「ビットを保持せず」、例えば、割り当て時といった後の時点でビットを保持する。
【0018】
以下の説明において、ビジュアルは、基本的コンポジション要素(basic composition element)を指すことがある。例えば、ビジュアルは、ビットマップと、コンポジション・システム114により処理するための関連コンポジショナル・メタデータとを含み得る。ビジュアルのビットマップは、(例えば、ビデオ等の動的コンテンツでは、)スワップ・チェーンに関連付けることができ、あるいは、(例えば、半動的コンテンツでは、)アトラス・サーフェス(atlas surface)に関連付けることができる。2つのプレゼンテーション・モデルが、コンポジション・システム114によりサポートされる単一のビジュアル・ツリーにおいて、サポートされ得る。
【0019】
半動的コンテンツでは、アトラスは、ビジュアルのビットマップのための更新モデルとして機能することができ、集合的レイヤ(aggregate layer)を指し得る。集合的レイヤは、レンダリングされる複数のレイヤを含み得るが、単一のレイヤも意図されている。ビジュアル及びそのプロパティ操作(例えば、オフセット、トランスフォーム、エフェクト等)、並びにビジュアルのアトラスベースのビットマップを更新するメソッド(Begin Draw、Suspend Draw、Resume Draw、End Draw)が、アプリケーション・プログラミング・インタフェース116を介して公開されるのに対し、アトラス・レイヤ・サイズ、タイル・サイズ、ビットマップ・アップデートのパッキング(packing)/コンパクション/管理は、アプリケーション110から隠すことができる。
【0020】
スワップ・チェーンは、ポインタを変える等により、オンスクリーンに次々に「フリップ」し得る一連のバッファを指す。したがって、フリップ・モードは、スワップ・チェーン技術を使用してオフスクリーン・バッファをオンスクリーン・バッファにするモードである。オフスクリーン・バッファは、例えば、オフスクリーン・バッファとオンスクリーン・バッファとの間のスワッピング・ポイントを使用することにより、オンスクリーン・バッファにされる。しかしながら、bltモードは、コンポジション・システム114のランタイムが、オフスクリーン・バッファからオンスクリーン・バッファへの「blt」(例えば、ビット・ブロック画像転送)を発する技術を指し、これを使用して、オンスクリーン・バッファを更新することができる。
【0021】
前述したように、1以上の実装において、仮想サーフェス118が最初に初期化されるとき、仮想サーフェス118は、実際の割り当てによりバックされない。すなわち、仮想サーフェス118は、「ビットを保持しない」。アプリケーション110がサーフェスを更新するのを始めると、コンポジション・システム114は、タイル(すなわち、コンポジション・サーフェス・オブジェクト)の割り当てを実行することができる。アプリケーション110は、それぞれの操作に対するbegin draw、suspend draw、resume draw、及びend drawといったAPIコール等の多様な操作を介して、仮想サーフェス118を更新することができる。マッピングは、コンポジション・システム114の内部アルゴリズムにより決定することができ、1以上の実装において、アプリケーション110に対して可視的とはならない。
【0022】
さらに、コンポジション・システム114は、アプリケーション110が仮想サーフェス118をリサイズしてトリムすることを可能にするAPIを介して、機能を公開し得る。例えば、リサイズ操作を使用して、仮想サーフェス118の境界を変えることができる。これは、新たなアップデート及び/又は割り当てが新たなサイズにより設定される境界内に含まれることを意味する。アプリケーション110はまた、コンポジション・システム114に、仮想サーフェス118の領域がもはや利用されておらず(例えば、有効でなく)、したがって、再利用することができることを通知するために、このメソッドを使用することができる。リサイズが領域の縮小をもたらす場合、アプリケーション110は、コンポジション・システム114による管理を介して、新たな境界の範囲外にある領域に対するアップデートをもはや行うことができない。
【0023】
図2は、仮想サーフェスがリサイズされる例示的な実装200を示している。図示された例において、第1の段階202及び第2の段階204を使用して、3×3の仮想サーフェスが2×2にリサイズされることを示す。第2の段階204におけるクロス・ハッチングを含む領域は、リサイズ操作の一部として破棄されるタイルを表す。前述したように、次いで、これらのタイルを記憶するために使用されるメモリ106は、コンポジション・システム114により、再利用することができる。リサイズの後、アプリケーション110は、再度仮想サーフェスをリサイズすることなく、破棄された領域(すなわち、クロス・ハッチングの領域)に対するアップデートをもはや行うことができない。
【0024】
さらに、1以上の実装において、リサイズ操作は、操作のインジケーションの受信に応答して、コンポジション・システム114により開始することができる。例えば、コンポジション・システム114は、アプリケーションが「commit」を呼び出すのを待つことなく、インジケーションの受信時に、リサイズ・アップデートを実行することができる。例えば、アプリケーションは、「Resize(0,0)」、「Resize(INT_MAX,INT_MAX)」、及び「Commit()」を呼び出すことができる。この例において、アプリケーション110は、第1のリサイズでコンテンツを破棄したので、第2のリサイズが、「Commit()」の前に呼び出されたとしても、影響を与えない。このケースでは、表示のために何も利用可能でないので、ディスプレイ・デバイス112は、コンテンツを表示しない。
【0025】
トリム操作を使用して、アプリケーション110によりリクエストされている仮想アトラスの領域をコンポジション・システム114に記述することができる。したがって、仮想サーフェス118の境界をリサイズすることなく、トリム操作を実行することができる。しかしながら、これは、どの論理サーフェスが現在割り当てられるのかをコンポジション・システム114に通知しない。論理サーフェスの例については、次の図に関連して説明する。
【0026】
図3は、アプリケーションと仮想サーフェスの論理サーフェスとの間のインタラクションが示されている例示的な実装300を示している。この例も、第1の段階302及び第2の段階304を使用することにより示されている。この例において、アプリケーションのビューポート(viewport)306が、第1の段階302及び第2の段階304の両方で示されている。したがって、第1の段階302において、アプリケーションは、ビューポート306に含まれる、(15タイルを含む)仮想サーフェスの最初の6タイルをまずレンダリングする。これらのタイルがクロス・ハッチングにより示されている。
【0027】
仮想サーフェスにより表されるページがスクロールされると、次に、アプリケーションは、第2の段階304に示されるように、最後の6タイルをレンダリングさせることができる。したがって、アプリケーション110は、最後の6タイルにより定められる領域が現在使用されており、このため、コンテンツの残りが現在使用されていないことを示すために、「trim」を呼び出すことができる。次いで、コンポジション・システム114は、元々最初の6タイルを表していた論理サーフェス506を再利用することを選択することができる。
【0028】
コンポジション・システム114はまた、論理サーフェス(すなわち、物理サーフェス)及び仮想サーフェスを作成して削除するとともに、個々のサーフェスに対するアップデートを行うために、
図1のAPI116を公開し得る。コンポジション・システム114は、更新可能な領域の範囲外に描画するときの無関係なビジュアルを避けるために、アプリケーション110により領域を更新させることができる。
【0029】
初期化及びバッチング
図4は、
図1のコンポジション・システム114をより詳細に示す例示的な実装400を示している。今日のコンピューティングの世界において、ユーザは、しばしば、自分自身が大きなリッチ・コンテンツを閲覧し、その中をナビゲートしているのに気付くであろう。そのようなコンテンツの全体は、ディスプレイ・デバイスにより一度に表示されない。このような例は、複雑な動的ウェブ・ページ、写真のライブ・アイテム/グループの大きなリストを有する最新のアプリケーション・ビュー、音楽若しくは他のライブ・コンテンツ、又は大きなドキュメントを含む。
【0030】
タッチ及び画像キャプチャベースの操作等のユーザ・インタフェースにより、ユーザは、スレート、電話、大型TV/プロジェクション等のユーザ・インタフェースの多数のディスプレイにわたり、迅速に、スクロール、パン、及びズームを行うことができる。多くのケースにおいて、コンテンツ全体を事前にレンダリングすること、及びコンテンツがアニメーション化し変化するときに最新の状態に保つことは、極めてコストがかかり、実際、デバイスのハードウェアによりサポートされないことさえあり得る。その代わりに、ユーザ操作によりコンテンツがビューポートに入る前に推測で先にコンテンツをレンダリングし、上述したように使用されたリソースを低減させるためにビューポートが動いたときにキャッシュからコンテンツを破棄する等、ビューポートに入ってくるコンテンツの一部をインテリジェントにレンダリングしキャッシュすることができる。
【0031】
所望の応答性をユーザに提供するために、コンポジション及びレンダリングは、コンポジション・システム114により別個に実行することができる。これが、コンポジション・エンジン402、コントローラ404、及びレンダラ406をコンポジション・システム114に組み込むことにより示されている。1以上の実装において、コンポジション・システム114のこれらのコンポーネントは、非同期に実行され得る。このようにして、事前にレンダリングされたコンテンツは、ユーザ入力に応答するコントローラ404及びコンポジション・エンジン402により、パン/ズームを行うことができるのに対し、レンダラ406は、レンダリングを続ける。
【0032】
前述したように、コンポジション・システム114は、1以上の仮想サーフェス118を使用することができる。仮想サーフェス118を使用することにより、すでにレンダリングされたコンテンツのキャッシング及びコンポジションが可能になる。レンダラ406による仮想サーフェス118上の領域のアップデート及びトリムは、推測的なレンダリング・ポリシに基づいて実行することができるのに対し、コントローラ404及びコンポジション・エンジン402は、仮想サーフェス118を変形するために使用される。この変形は、コンテンツをレンダリングしビューポート内に存在する仮想サーフェス118の領域に基づくユーザ・インタフェースに対するアップデートを生成するためのユーザ入力に基づいて実行することができる。コンポジション・エンジン402は、複数の仮想サーフェス118及び/又はビジュアルを一度に作成するよう構成され得る。
【0033】
1以上の実装において、コンポジション・システム114は、コンポジションのためにフロント・バッファとして使用される固定サイズのタイル又は混合サイズのタイルとして、論理サーフェス120を使用するよう構成され得る。レンダラ406が、仮想サーフェス118の一部を更新することを望むとき、レンダラ406は、別個のアップデート・サーフェスにレンダリングすること、又は、タイル・サーフェスに直接レンダリングすることを実行することができる。別個のアップデート・サーフェスを用いる場合、描画を終えるときに、コンテンツが、アップデート・サーフェスからフロント・バッファにコピーされる。次いで、レンダラ406がタイルから有効なコンテンツをトリムするときに、タイルをリリースすることができる。
【0034】
しかしながら、変化したコンテンツは、古いコンテンツを伴うスクリーン上に構成されるので、この実装は、構造的テアリング(structural tearing)をもたらす場合がある。さらに、タイル間又は仮想サーフェス上で更新される領域のチャンク間の継ぎ目が、ガター及びサンプリング(例えば、双線形)又はTジャンクション(T-junction)のために、生成される場合があるとともに、ガター、複数のオーバラッピング・アップデート、及び複雑な有効領域を扱うために過度のCPU使用率及びGPU使用率を生じさせる場合がある。さらに、動的なコンテンツ変化又はユーザにより操作されるコンテンツのために、過度のメモリ使用率に直面する場合がある。タイル手法による固定/混合サイズのサーフェスでは、タイルの不使用部分のために、より大きなサイズのタイルほどメモリ浪費に直面し、より小さなタイルに対するレンダリング/処理アップデートと構成時におけるアップデートのレンダリングとのために、CPU/GPU浪費に直面し、別個のアップデート・バッファが使用される場合、アップデート・バッファからフロント・バッファへのCPU/GPUコピー・コストに直面し得る。したがって、コンポジション・システム114の実装において、多様な考慮事項の間でバランスが取られ得る。
【0035】
これらの考慮事項は、ビューポートに収まらないリッチで且つ/又は動的なコンテンツを操作するときのユーザ・エクスペリエンス品質及びパフォーマンスに関する以下のテネット(tenet)のセットを含み得る。第1のそのようなテネットは、ビジュアル応答性(visual responsiveness)と呼ばれる。これは、仮想サーフェス118が、ユーザの「指の先端」及びユーザ操作において真のサーフェスのように感じるように構成され得ることを意味する。これは、知覚される遅延なく操作に応答しそのような操作をトラッキングするために、コンポジション・システム114の構成によりサポートされ得る。コントローラ404及びコンポジション・エンジン402と別々にレンダラ406を用いることで、堅牢な形でこのテネットをサポートすることができる。
【0036】
第2のそのようなテネットは、ビジュアル統一性(visual coherence)に関する。この例において、サーフェスが操作され、サーフェス内の動的コンテンツ(例えば、アニメーション)が更新されるので、ディスプレイ・デバイス112上のコンテンツは、ユーザの熱中又は信頼を妨げるアーチファクトを示さない。例えば、継ぎ目、目に見えるテアリング、又は破損なく、コンテンツを表示することができる、ユーザ・インタフェースの一部が、付随すべき他の一部に後れを取ることがない、等である。
【0037】
第3のテネットは、ビジュアル完全性(visual completeness)に関する。ユーザ・インタフェースが、視覚的に完全である場合、ユーザは、ディスプレイ・デバイス112の一部を覆うフィラー/プレースホルダ・パターン(例えば、チェッカーボード)をめったに見ない。そのようなパターンがある場合、このディスプレイは、比較的短い時間制限される。さらに、例えば、性能の低いデバイス上での複数のズーム・レベルにわたる終わりのないリッチ・コンテンツにおいて、保証されないかもしれないが、サーフェス・コンテンツ・アップデートは明らかに衰えない。例えば、レンダラ406が仮想サーフェス118を更新しコンポジション・エンジン402がそれを作成するのがより最適で効率的であるほど、追加的なビジュアル完全性を実現するために、レンダラ406は、先に推測でさらにレンダリングするためのより高い処理能力を有するようになる。
【0038】
第4のテネットは、ライブ・サーフェスに関する。このテネットでは、アニメーション、ビデオ、及び他の動的コンテンツが、操作中休むことなく再生及び実行を続ける。レンダラ406がビジュアル完全性を実現しライブ・サーフェスを実現する処理能力を有する場合、これは実現され得る。これは、仮想サーフェス118の効率的な更新及び作成によりサポートされ得る。
【0039】
コンポジション・システム114は、これらのテネットのバランスを取るよう構成され得る。このようにして、レンダラ406がビジュアル完全性及びライブ・サーフェスを確実にするための十分な処理能力を有するよう、仮想サーフェス・アップデートを管理して構成するためにビジュアル正確性(visual correctness)及びビジュアル統一性並びにビジュアル応答性をサポートする総合的な解決策が実行され得る。
【0040】
図5は、仮想サーフェス118を開始するコンポジション・システム114の動作の例示的な実装500を示している。この実装は、第1の段階502及び第2の段階504を使用することにより示されている。第1の段階502において、アプリケーション110は、ユーザ・インタフェースをレンダリングするために、サーフェスのサイズをリクエストする。これは、1以上のビジュアルに関連付けることができる。前述したように、仮想サーフェス118が、実際の割り当てによりバックされない、したがって、初期化時に「ビットを保持しない」ように、仮想サーフェス118が、まず初期化される(例えば、作成される)。
【0041】
次いで、アプリケーション110は、レンダリングされるビジュアルを、仮想サーフェス118に指定することができる。したがって、コンポジション・エンジン402は、レンダラ406により仮想サーフェス118にレンダリングするために、図示される車等のこうしたビジュアルを構成することができる。これは、タイル、又は、割り当てのサイズがアプリケーションにより指定される「チャンク」を使用することにより実行され得る。
【0042】
第2の段階504において、レンダラ406は、サーフェスの矩形領域等の仮想サーフェス118の領域を更新する命令を受信することができる。レンダラ406とコンポジション・エンジン402との間のインタフェースは、レンダラ406が、複数の仮想サーフェス118にわたる複数のアップデート506(例えば、トリム命令、ビジュアルに対する変更、ビジュアルの作成又は削除等)とともに、コンテンツとしてこうしたサーフェスを有することができるビジュアルに対するトランスフォーム・アップデートを実行できることである。アップデート506の例は、カーソルとして構成されるビジュアル、及びユーザが選択可能なボタンとして構成されるビジュアルを含む。
【0043】
一実装において、複数のアップデート506がレンダラ406によりレンダリングされ得るよう、例えば、バッチとして更新され得るよう、「commit」操作が呼び出され得る。このようにして、コンポジション・システム114は、不完全なアップデートのレンダリングに対して保護することができる。これにより、レンダラ406は、ビジュアル統一性テネットによる、ディスプレイ・デバイス112により一貫した統一性のあるビジュアルを表示させることができる。
【0044】
さらに、ユーザ入力を処理するコントローラ404は、レンダラ406を経ることなく、直接的にコンポジション・エンジン402に対して、ユーザ操作に基づいて、(例えば、パン又はズームのための)ビジュアルに対するトランスフォームを更新することができる。例えば、アニメーション又は動的コンテンツの他の状態変化を処理するために、且つ/又は、制限された処理リソースしか有さないシン・デバイス上で複雑なコンテンツをラスタ化するために、レンダラ406が比較的長い時間占められる場合であっても、この態様は、ビジュアル応答性を提供する。
【0045】
仮想サーフェス118の実装は、レンダラ406がレンダリングすることができるサーフェス及びオフセットをレンダラ406に提供することを含む。次いで、コンポジション・エンジン402がピックアップし、レンダラ406に対してコミットされた完全なアップデートのバッチを処理しているときに、コンポジション・エンジン402によりこのサーフェスを「フリップする」ことができる。これを使用して、別のアップデート・サーフェスがレンダラ406によるアップデートのレンダリングのために使用された場合、そうでない場合に実行されるコピー操作を除外することができる。
【0046】
また、このフリッピングにより、コンポジション・エンジン402が、(例えば、コミット操作を介した)単一のバッチにおいてレンダラ406により生成される複数のアップデートの各々が全体としてディスプレイ・デバイス112まで到達するのを確実にすることを可能にすることができる。したがって、コンポジション・システム114による部分的なアップデートの処理を回避することができる。
【0047】
アップデート及びルック・アサイド・リスト
図6は、更新のための、コンポジション・システム114によるサーフェスの準備を示す例示的な実装600を示している。コンポジション・システム114は、更新のためのサーフェスを準備するために、多種多様な技術を利用することができる。第1のケースでは、コンポジション・システム114は、アプリケーションからのアップデートを実行するために、領域を割り当てるリクエストを受信することができる。これが、図示された例において、第1の矩形602として示されている。
【0048】
このリクエストに応答して、コンポジション・システム114は、リクエストされた領域よりも大きな領域を割り当てることができる。これが、リクエストされた第1の矩形602を含む第2の矩形604として示されている。したがって、わずかに異なるサイズのアップデートがその後に受信される場合、これにより、以前に割り当てられたサーフェスの再利用が可能となる。
【0049】
例えば、コンポジション・システム114は、コンポジション・システム114により以前に割り当てられたサーフェス608のルック・アサイド・リスト606を保持することができる。これは、サーフェス608の再利用及びサーフェス608の「チャンク」のためにメモリを「蓄積する」ために、コンポジション・システム114により使用することができる。
【0050】
例えば、これらのサーフェス608は、もはや使用されていないサーフェスのために、コンピューティング・デバイス102のメモリ106内に保持することができる。したがって、アップデートのためのサーフェスを提供する、コンポジション・システム114によるリクエストの受信時に、コンポジション・システム114は、そのリクエストに対応する以前に割り当てられたサーフェス608が、コンピューティング・デバイス102のメモリ106内で利用可能であるかを判定するために、ルック・アサイド・リスト606をまず調べることができる。利用可能なサーフェス608が存在する場合、コンポジション・システム114は、そのようなサーフェスを利用することができ、それにより、新たなサーフェスを割り当てないことで、システムの全体的な効率を向上させることができる。さらに、前述したように、リクエストされたよりも大きなサイズ(例えば、より多くのピクセルを有する)をサーフェスに割り当てることにより、こうしたサーフェス608がその後のアップデートに関連する可能性が増大し得る。
【0051】
例えば、わずかに異なるサイズのアップデートが、ある時間期間の間受信される場合、これにより、例えば、次のアップデートがわずかに広い又は高い領域に対するものであるときには、以前に割り当てられたサーフェス608のより多くの再利用が可能となる。したがって、新たなサーフェスを割り当てることなく、コンポジション・システム114は、関連するサーフェスを見つけるために、以前に利用可能となったサーフェスのルック・アサイド・リスト606を利用することができる。サーフェスの一部のトリム及び他のアップデートも利用可能であることに留意すべきである。
【0052】
これは、確認されたバッチ(confirmed batch)に基づく領域を通じてトラッキングされ得る。アップデートが、他の有効なコンテンツも有する既存のサーフェス608の利用可能な一部に収まる場合、そのサーフェスを再利用することができる。そのような各遷移(transition)はセットアップ・コストを招くので、これはまた、複数の異なるサーフェスからレンダリングすることを避けることにより、コンポジション側のコストを低減させる。ルック・アサイド・リスト606のサイズ(例えば、リスト及びコンピューティング・デバイス102のメモリ内に保持されるサーフェス608の数)は、過去のピーク使用又は多様な他のファクタに基づいて設定することができる。
【0053】
図7は、
図6のルック・アサイド・リスト606を用いたコンポジション・システム114の動作の例示的な実装700を示している。この実装は、第1の段階702、第2の段階704、及び第3の段階706を用いて示されている。第1の段階702において、サーフェス708が、レンダラ406によるレンダリングのために割り当てられる。次いで、レンダラ406には、レンダリングを実行するために、サーフェス708の制御が与えられる。
【0054】
このレンダリング中、アップデートを実行するために、第2の段階704において、別のサーフェス710を割り当てることができる。この例において、別のサーフェス710は、レンダラ406によりレンダリングされているサーフェス708と同一のディスプレイの領域内に含まれる。したがって、サーフェス708がレンダリングされている間に、サーフェス710を割り当てることができ、サーフェス710を満たす(例えば、描画する)ことができる。次いで、例えば、前述したコミット・コマンドに応答して、レンダリングのために、このサーフェス710をレンダラ406に渡すことができる。
【0055】
第3の段階706において、ユーザ・インタフェースを更新するための別のアップデートが受信され得る。この例において、コンポジション・システム114は、
図6のルック・アサイド・リスト606を使用することにより、アップデートが、以前に割り当てられたサーフェス、例えば、第1の段階702のサーフェス708を含むかを判定する。したがって、コンポジション・システム114は、アップデート712を含む、すでに割り当てられたサーフェス708を使用することができる。このようにして、新たなサーフェスを再割り当てすることなく、サーフェス708を使用することができ、それにより、コンピューティング・デバイス102のリソースを節約することができる。多様な他の例も意図されている。
【0056】
ガター
図8は、ガターを使用するコンポジション・システム114の動作を示す例示的な実装800を示している。ビジュアル正確性を維持する際の1つの問題点は、ガターを逃してしまうことに関する。例えば、スクロール等のため、仮想サーフェスが、サブピクセル・オフセットに配置又はスケーリングされ得る。したがって、ディスプレイ・デバイス112により表示されるピクセルの値は、例えば、双線形サンプリングを利用するために、隣接ピクセルに基づいて決定される。
【0057】
しかしながら、アップデート802のエッジ804に配置されるアップデート802の隣接ピクセルは、間違った情報に基づく値を有する場合がある。例えば、アップデート802外の隣接ピクセルが、(例えば、他のアップデートからの)「ごみ」を含む場合、ラスタライザ(rasterizer)は、こうしたピクセルからサンプリングし得るので、それにより、良くない値を有するピクセルを生成する。これは、ディスプレイ・デバイス112により表示されるとき、継ぎ目のように見える場合がある。
【0058】
これに対処する1つの方法は、アップデート802の新たに割り当てられたサーフェス内の隣接ピクセルに重なる別のタイル/クランプ(clump)・サーフェス806内に存在し得るエッジにおけるピクセルのロー又はカラムをコピーすることである。しかしながら、こうした追加的なコピーは、コンピューティング・デバイスのリソース、例えば、コンピューティング・デバイス102のCPUリソース及びGPUリソースの両方を処理するために、極めてコストがかかり得る。
【0059】
したがって、1以上の実装において、アップデート802のエッジは、サーフェス・エッジとともにアラインされる。次いで、サーフェス外になる「隣接」ピクセルをサンプリングするときにラスタライザにサーフェス・エッジにおけるピクセルの値を使用させるクランピング操作を利用する。結果が視覚的に完全に正確ではなくとも、これを利用して、コストとビジュアル正確性との間の合理的なトレードオフを生成することができ、ユーザにとって、結果がかなり正確に見え得る。1以上の実装において、ガター自体は更新されない。
【0060】
いくつかの例において、アップデート・エッジは、サーフェス・エッジとともにアラインさせることができない場合がある。これは、アップデートよりも大きなサーフェスの割り当てのためである。このような例において、同一のサーフェス上のアップデートのエッジにおけるピクセルのロー/カラムは、クランピング動作に対する類似の効果のために、隣接ピクセルにコピーすることができる。
【0061】
同様に、トリムされ更新されるとき、1以上の実装において、ガターは、描画することができる新しいと考えられるピクセルとともには更新されない。というのは、ガターが、そのときの有効なピクセルとともに表示されていた以前の有効なピクセルを含むからである。これは、正確性と、ユーザが見たときにユーザにとって邪魔になる、一般的ケースにおける最小限の映像アーチファクトを生み出すパフォーマンスとの間のトレードオフをサポートする。
【0062】
ブレンディング及びBLT
図9は、コンポジション・システム114による有効な領域の管理を示す例示的な実装900を示している。前述したように、仮想サーフェス118は、アップデートのための有効な部分と有効でない部分とを含み得る。図示した仮想サーフェス118の例では、例えば、アップデートは、車ではなく、仮想サーフェス118内のカーソルを含み得る。したがって、カーソルを使用して、仮想サーフェス118の他の領域ではなく、有効である仮想サーフェス118の領域を定めることができる。この仮想サーフェス118及び他のサーフェスのこうした領域をトラッキングすることにより、コンポジション・システム114は、多様な最適化を利用することができる。
【0063】
例えば、サーフェスから2つの部分にレンダリングされ、ブレンドされ、BLTされる(BLT’d)領域を分割する技術について説明する。この技術を使用して、アップデートが小さく仮想サーフェス上に結果として生じる有効な領域が比較的複雑である(例えば、多数の小さなソース・サーフェス(source surface)を有する複雑なメッシュをもたらす)例に対処することができる。
【0064】
サーフェスが「予めマルチプライされている(pre multiplied)」又は透明である(且つ「不透明でなく」若しくはアルファ値を無視できるよう設定されている)場合、サーフェスが「ブレンドされる」。これを利用して、レンダラにより提供されるコンテンツが存在しない「クリアされた」且つ/又は完全に透明なピクセルを含むより大きな矩形形状をブレンドすることができる。いくつかのケースでは、これは、複雑な形状のパス/エッジの各々の外形を描く複雑なメッシュを用いて処理してラスタ化するよりも、より最適となる。
【0065】
有効な領域が不透明なサーフェスに対して複雑であるときには、この手法は、ガターに対して使用することもできる。例えば、内部的な部分はBLTされるが、エッジ周りのピクセルは、隣接ピクセルがクリアされるようにブレンドされる。したがって、ラスタライザがこうしたピクセルからサンプリングするとき、正確な値を実現することができる。1以上の実装において、この技術は、仮想サーフェス118のエッジに対して使用され、タイル・クランプと仮想サーフェスを構成するサーフェスとの間の内部的なエッジに対しては使用されない。
【0066】
タイル・サイズにアラインされるクランプ・サーフェスが割り当てられることを確実にするとともに、そのタイルを保持していた以前のサーフェスからのコンテンツが新たなサーフェスに移動されることを確実にするために、ビットをコピーし、一部をクリアすることができる。1以上の実装において、これは、例えば、
図7に示される中央におけるアップデート矩形等のレンダラ406により更新される部分については実行されない。サーフェスが不透明である場合、アップデート後、エッジ上のピクセルは、「ブレンディング」により、不透明になり得る、すなわち、こうしたピクセルのアルファ・チャネルにおいて、完全な不透明に到達する。
【0067】
コピーすること、クリアすること、及び不透明にすることというタスクの各々は、非オーバラッピング矩形ストライプ(non-overlapping rectangular stripe)から成る「領域」を用いて実行され得る。領域は、交差してもよいし、ユニオン(union)を形成してもよいし、又は、取り去られてもよい。さらに、領域を構成する非オーバラッピング矩形ストライプは、列挙されてもよい。これにより、様々な矩形及び領域を単一の領域に効率的にまとめることが可能となり、結果として生じる矩形の最適なセットを効率的に抽出することが可能となる。例えば、Win32 HRGNは、こうしたファシリティ(facility)を利用するために使用することができるGDI構造体である。各タイルについて個別に何をすべきか決定するのではなく、このような操作を使用して、例えば、クリア又はコピー等の操作が実行される、まとめられ最適化された矩形のセットを識別する。これを使用して、こうしたタスクを実行するために、CPU及びGPU両方における著しい効率を実現することができ、これにより、タイル/アラインメント・サイズを、32×32又は16×16といった比較的小さな値に低減させることができる。これにより、前述したように、消費を低減させることができる。
【0068】
レンダラ406からのトリム・リクエストは、有効な領域の複雑さに基づいて異なるように対処され得る。一般的ケースでは、タイル・クランプ/サーフェスの有効な領域は、トリム・リクエストに従って更新され得る。しかしながら、有効な領域が複雑であり、BLT/ブレンド技術が利用されている場合、追加的な操作を実行することができる。例えば、有効な領域の一部が、不透明になるようにブレンドされ得る。というのは、このような部分は、現在領域のエッジに配置されているからである。これに対処する別の方法は、有効な領域が取り除かれるタイルのための新たなクランプを作成することである。しかしながら、タイルは、いくつかの残存する有効な部分を有し続ける場合がある。このようなタイルに対しては、残存する有効な部分を既存のサーフェスからコピーすることができ、不透明になったトリムされた部分をクリアすることができる。レンダラ406が、例えば、コミット操作のために、アップデートの完全なバッチをコミットするときに、このような新たなクランプは、コミットされ得る。この操作は、矩形ストライプの領域を用いて最適化され得るが、他の例も意図されている。
【0069】
レンダラ406によりアップデートのセットをコミットするとき、トリム及び視覚的トランスフォーム(例えば、結果として生じるタイル・クランプ/サーフェスのセット及びそれらの有効な領域)が、コンポジション・エンジン402に伝達され得る。このようなサーフェス上でのラスタ化のための未処理のCPU/GPUワークが完全であることを確実にするためにコンポジション・エンジン402により使用することができるそれぞれのトークンを用いて、アップデートを伝達することができる。このとき、追加的な技術を利用して、効率をさらに向上させることができる。このような技術の例について、以下のセクション群で説明する。
【0070】
プッシュ・ダウン
図10は、プッシュ・ダウン技術を用いてサーフェスを結合するコンポジション・システム114の動作を示す例示的な実装1000を示している。この例において、コンポジション・システム114は、ビジュアルを表示するために、サーフェス割り当て1002を行った。これが、図において、ハッシュ・マークを用いたボックスとして示されている。次いで、別のサーフェス割り当て1004が、アップデートを実行するために行われる。これが、ハッシュ・マークのボックスを用いて配置された白のボックスとして示されている。
【0071】
コンポジション・システム114によりサーフェスの有効な領域をトラッキングすることにより、リソース利用を向上させるために、割り当てを結合することができる。例えば、複数のサーフェスからのレンダリングは、単一のサーフェスからレンダリングするよりもリソース集中型であり得る。
【0072】
図示した例において、サーフェス割り当て1004の有効な部分は、サーフェス割り当て1002に「プッシュ・ダウンされる」。サーフェス割り当て1004からの有効な領域が現在サーフェス割り当て1002に含まれることを示すために、これが、破線のボックスを用いて示されている。プッシュ・ダウンの後、アップデートを含んでいたサーフェス割り当て1004をリリースすることができ、それにより、コンピューティング・デバイス102のメモリ106の一部を自由にすることができる。したがって、この技術を使用して、新たなサーフェス割り当てを作成することなく、結合されたサーフェスの1つの割り当てを利用することにより、サーフェスを結合することができる。
【0073】
例えば、いくつかの例において、コンポジション・システム114は、現在の又は以前のアップデートのバッチにおいて、重なり合う大きなアップデートに直面する場合がある。これは、比較的小さい有効な領域を含む複数のサーフェスの割り当てを引き起こす場合がある。結果として、コンポジション・システム114は、大きなサーフェスを割り当てる場合があるが、比較的小さい有効な領域は、このようなサーフェスがリリースされるのを妨げる場合がある。
【0074】
しかしながら、第1のサーフェス(例えば、より新しいより小さなサーフェス)からの有効な領域を、第2のサーフェス(例えば、より古いより大きなサーフェス)に「プッシュ・ダウンする」ことにより、第1のサーフェスからの有効な領域を取り除くことができる。これは、第1のサーフェスのリリースを可能にし、それにより、メモリを自由にし、追加的なサーフェス割り当てを伴うことなく、コンポジション・システム114により管理されるサーフェス割り当ての量を低減させることができる。このようにして、レンダラ406には、より少ないサーフェスをレンダリングするタスクが与えられ、それにより、コンポジション・システム114の効率を向上させることができる。新たなサーフェス割り当てが行われる他の技術も意図されており、この技術の例について、以下のセクションで説明する。
【0075】
列挙及びクランピング
図11は、有効な領域を新たなサーフェスに結合するコンポジション・システム114の動作を示す例示的な実装1100を示している。前述したように、コンポジション・システム114は、サーフェス割り当ての有効な領域をトラッキングするよう構成され得る。その例が、それぞれ有効な領域を有する1102(1)、1102(2)、及び1102(n)として示されている。時間が経過するにつれ、有効な領域を含むサーフェスに対する有効な領域のサイズは、他のサーフェスからのアップデート等のために、減少し得る。したがって、コンポジション・システム114は、サーフェス割り当て1102(1)〜1102(n)からの有効な領域を1以上の新たなサーフェス割り当て1104に結合するよう構成され得る。
【0076】
例えば、コンポジション・システム114は、ソースとしてセットアップされ、ディスプレイ・デバイス112上のディスプレイを構成するためにレンダリングされる元となるサーフェスの数を低減することにより、サーフェス割り当て及びコンポジションに対処するよう構成され得る。これは、全体的な仮想サーフェスの有効な領域内の矩形の最適化されたセットを列挙することにより実行され得る。次いで、そのような各矩形に対して、クランプを作成することができる。これが多数の小さな矩形をもたらす場合、上述したブレンド/BLT技術を使用することができる。このようにして、コンポジション・エンジン402により適切に構成される、クリアされたピクセルの領域を有するより大きな矩形が実現され得る。
【0077】
例えば、コンポジション・エンジン402がアップデート・バッチを受信すると、コンポジション・エンジン402は、更新される、ディスプレイ・ツリーを構成する仮想サーフェス及びビジュアルの「汚れた(dirtied)」部分を最初に判定することができる。これは、例えば、元となるサーフェス又は「クランプ」が変化する場合であっても(例えば、プッシュ・ダウン又は再クランピング)、アップデートから汚れた領域を明示的に計算して伝達し、コンポジタ(compositor)にトリムすることを含むよう実行され得、同一のコンテンツの有効な領域が持ち越され得るので、新たな汚れた領域は生成されない。有効な領域を記述するこのような矩形は、アップデート/トリム操作により、明示的に伝達され得る。1以上の実装において、より少ない数のより大きな矩形をもたらしてセットアップする際及びより多数のより小さなレンダリング操作を実行する際の大きなオーバヘッドを招くことを避けるために、汚れた領域を低減させることができる。このようにするための1つの技術は、最大数の汚れた矩形を許容することである。新たな汚れた矩形同士が遭遇すると、これらの矩形は、リストに付加され得るか、あるいは、全体的な最小領域増加をもたらす矩形を用いてまとめられ得る(例えば、ユニオンを形成する)。
【0078】
メッシュ
図12は、メッシュを使用するコンポジション・システム114の動作を示す例示的な実装1200を示している。メッシュ(例えば、ポイントのリスト)は、単一のdraw呼び出しがGPUのドライバに対してなされ得る複数のビジュアルを含み得る。このようにして、ドライバに対する多数のdraw呼び出しを低減させることができ、それにより、各呼び出しに伴われるオーバヘッドを回避することができる。
【0079】
コンポジション・エンジン402は、仮想サーフェス118のクランプ/サーフェスを構成するための多数のオプションを有する。例えば、コンポジション・エンジン402は、各クランプの有効な領域を認識しているので、コンポジション・エンジン402は、更新される汚れた領域に重なり合わないクランプをスキップすることにより開始することができる。仮想サーフェス118に含まれるビジュアルがピクセル・アラインされる場合、上述したガター技術を利用することなく、トランスレーション(translation)は変形する。これにより、クランプ内の各矩形に対して単純なBLT/ブレンドを使用することが可能となる。
【0080】
こうした操作を1つずつ実行する代わりに、コンポジション・エンジン402は、矩形のセットから三角形メッシュを作成することができ、そのメッシュを用いてサーフェスをレンダリングさせることができる。例えば、有効な領域を有する矩形のセット1202が、コンポジション・システム114により調べられ得る。次いで、各矩形を2つの三角形に分割することにより、矩形のセットに対して、三角形メッシュ1204が生成され得る。しかしながら、矩形から、Tジャンクションが形成される場合もある。Tジャンクションは、例えば、浮動小数点又は丸め誤差のため、三角形メッシュ1204を継ぎ目とともにラスタ化させる場合がある。したがって、コンポジション・システム114は、代わりに、Tジャンクションを含まない、非オーバラッピング矩形の三角形メッシュ1206を形成するために、矩形のセットを処理することができる。
【0081】
生成されたメッシュは、クランプの矩形が変化しない場合、コンポジション・フレームにわたってキャッシュさせることができ、再利用することができる。非ピクセル・アラインされた(non-pixel aligned)トランスフォームが存在するが、そのトランスフォームが単にトランスレーションを含む場合、コンポジション・エンジン402は、それでもメッシュを生成することができ、そのまま各クランプをレンダリングすることができる。しかしながら、より複雑なトランスフォームが存在する場合、コンポジション・エンジン402は、Tジャンクションを回避して継ぎ目のない正確なラスタ化を確実にするために、矩形のセットを処理することができる。
【0082】
こうするために、各クランプは、それぞれの矩形のセットをコンポジション・システム114により管理されるメッシュ・ジェネレータ・オブジェクト(mesh generator object)に登録することができる。各座標が調べられるので、コンポジション・システム114のメッシュ・ジェネレータ機能は、すでに登録されているエッジ上に、1以上の追加的な頂点を付加することができる。エッジをそれぞれ登録することは、それ自体に付加されるその範囲において既存の頂点を有することでもある。結果は、追加的な頂点を有する、各クランプについての矩形のセットである。次いで、これらの矩形が、このような頂点を用いて非オーバラッピング三角形のセットに分割される。したがって、単純でないトランスフォームのケースでは、三角形メッシュ1206内に示される、これらの生成されたTジャンクションのないメッシュを用いて、クランプをレンダリングすることができる。
【0083】
オクルージョン
図13は、オクルージョンに関するコンポジション・システム114の動作を示す例示的な実装1300を示している。各クランプが、不透明な仮想サーフェスのために、そのサーフェスの一部及びBLTの他の部分をブレンドする命令を有し得る場合であっても、コンポジション・システム114は、各クランプ上の有効で不透明な領域を認識している。
【0084】
オクルージョンに関して、こうした領域は、仮想サーフェス全体にわたって蓄積することができ、オクルージョン検出のためにコンポジション・エンジン402により使用することができる。1以上の実装において、コンポジション・エンジン402は、ディスプレイ・デバイス112により表示するためにz次(z-order)においてユーザにより近い不透明なビジュアルにより隠される部分を識別するために、登録されたオクルージョン矩形を介して列挙することができる。
【0085】
しかしながら、オクルージョン・パス(occlusion pass)を介して矩形を複雑な形状に分解することは、コストがかかり得る。領域を構成する非オーバラッピング矩形ストライプが、その領域全体により隠されるであろう矩形を完全に隠すことを確実にするために、コンポジション・システム114は、矩形コンテインメント技術(rectangular containment technique)及びインターセクション技術を利用することができる。
【0086】
そのような技術の例が、
図13の例示的な実装1300において示されている。例示的な実装1300は、第1の段階1302及び第2の段階1304により示されている。第1の段階1302において、第1の矩形1306及び第2の矩形1308が、コンポジション・エンジン402により作成される。しかしながら、コンポジション・エンジン402は、第1の矩形1306の一部1310が、第2の矩形1308により隠されていることを判定することができる。
【0087】
したがって、隠している矩形がエッジ全体を見えなくするので、その結果が低減された単一の矩形である場合、コンポジション・エンジン402は、チェックされた矩形を低減するよう構成され得る。この例が、第2の段階1304において示されている。第2の段階1304において、第1の矩形1306は、第2の矩形1308により隠される一部1310を含まないように低減される。したがって、第2の矩形1308のエッジを使用して、第1の矩形1306のための新たなエッジを定めることができ、それにより、コンピューティング・デバイス102のリソースを節約することができる。多様な他の例も意図されている。
【0088】
例示的な手順
以下の記載は、前述したシステム及びデバイスを利用して実装することができる技術を説明する。各手順の態様は、ハードウェア、ファームウェア、若しくはソフトウェア、又はこれらの組合せにより実装することができる。この手順は、1以上のデバイスにより実装される動作を指定するブロックのセットとして示されるが、それぞれのブロックにより動作を実行するために示される順序に限定されるわけではない。以下の記載の一部において、
図1の環境100、及び
図2〜
図13の例示的な実装を参照する。
【0089】
図14は、データをレンダリングするためにサーフェスにサイズが割り当てられる例示的な実装における手順1400を示している。1以上のビジュアルをレンダリングするためにサーフェスを割り当てるリクエストであって、サーフェスのサイズを指定するリクエストが、コンポジション・システムにより受信される(ブロック1402)。例えば、リクエストは、「ビットをレンダリングする」ことを始めるアプリケーションから発生し得る。1以上の実装において、リクエストが受信されたときにサーフェスが「ビットを保持していなかった」ように、リクエストが受信されるが割り当てられなかったときに、サーフェスは、すでに初期化されている。
【0090】
リクエストの受信に応答して、1以上のビジュアルをレンダリングするために、リクエストされたサイズよりも大きなサイズを有するサーフェスが、コンポジション・システムにより割り当てられる(ブロック1404)。前述したように、コンポジション・システム114は、もはや有効ではない割り当てられたサーフェスの再利用を促進するために「メモリを蓄積する」よう構成され得る。アプリケーションによりリクエストされたよりもサーフェスを大きくすることにより、コンポジション・システム114は、サーフェスが後に再利用される可能性を増大させることができる。
【0091】
図15は、有効な領域がコンポジション・システムによりトラッキングされる例示的な実装における手順1500を示している。ディスプレイ・デバイスによる表示のために、ビジュアルを含むサーフェスが、コンポジション・システムにより管理される(ブロック1502)。例えば、サーフェスは、前述した仮想サーフェスとして構成することができる。
【0092】
ディスプレイ・デバイスにより表示されるサーフェス内の有効な領域がトラッキングされる(ブロック1504)。例えば、サーフェスは、ディスプレイの一部を更新するよう最初は構成され得る。しかしながら、時間の経過とともに、他のサーフェスが、そのディスプレイのすでに更新された部分をさらに更新し得る。したがって、サーフェスの一部は、表示のために有効のまま残っているが、他の部分は有効ではない。コンポジション・システム114は、この有効性をトラッキングするよう構成され得る。これを使用して、オクルージョン管理、サーフェス・リサイズ、サーフェス・コンパクション等、この記載の他の場所で説明された多種多様な機能をサポートすることができる。
【0093】
図16は、サーフェスを管理するためにルック・アサイド・リストが使用される例示的な実装における手順1600を示している。1以上のビジュアルをレンダリングするためにサーフェスを割り当てるリクエストが、コンポジション・システムにより受信される(ブロック1602)。前と同様、アプリケーション110は、コンポジション・システム114の1以上のAPI116を介した呼び出しとして、リクエストを行うことができる。
【0094】
受信されたリクエストに対応し、コンピューティング・デバイスのディスプレイ・デバイスによる表示のために有効であるビジュアルを含まないサーフェスが、コンピューティング・デバイスのメモリ内に割り当てられたものとして利用可能であるかを判定するために、ルック・アサイド・リストが、コンポジション・システムにより調べられる(ブロック1604)。例えば、ルック・アサイド・リストは、例えば、後の受信されるアップデートのために、メモリ内に割り当てられているがもはや有効な部分を有していないサーフェスを参照することができる。
【0095】
判定されるサーフェスが利用可能であるかの調査に応答して、判定されたサーフェスが、1以上のビジュアルのレンダリングのために利用可能となる(ブロック1606)。例えば、判定されたサーフェスには、前述したように、リクエストされたよりも大きなサイズが割り当てられており、したがって、判定されたサーフェスは、後のアップデートと関連し得る。多様な他の例も意図されている。
【0096】
図17は、オクルージョンに基づいてサーフェスがリサイズされる例示的な実装における手順1700を示している。サーフェスの一部が、ディスプレイ・デバイスにより表示される別のサーフェスにより隠されるかの判定がなされる(ブロック1702)。例えば、コンポジション・エンジン402は、サーフェスの表示のためのz次を判定することができ、他のサーフェスの少なくとも一部がサーフェスの一部に重なってレンダリングされるかを判定することができる。
【0097】
サーフェスから一部が取り除かれる(ブロック1704)。これは、他のサーフェスのエッジを使用して、低減されるサーフェスのエッジを定め、それにより、サーフェスの少なくとも1つの新たなエッジを定めることによって等、多様な方法により実行することができる。
【0098】
取り除かれた一部を有するサーフェスが、他のサーフェスとともにレンダリングされる(ブロック1706)。このようにして、サーフェスから取り除かれる一部をレンダリングすることを回避することができ、それにより、コンピューティング・デバイス102のリソースを節約することができる。
【0099】
図18は、1つのサーフェスから別のサーフェスへの有効な領域のプッシュ・ダウンを伴うコンパクション技術が説明される例示的な実装における手順1800を示している。1以上のビジュアルをレンダリングするために、使用可能な複数のサーフェスの有効な領域が、コンポジション・システムによりトラッキングされる(ブロック1802)。例えば、コンポジション・システム114は、サーフェスのどの部分がディスプレイ・デバイスにより表示され、サーフェスのどの部分がディスプレイ・デバイスにより表示されないかを判定することができる。
【0100】
次いで、第1のサーフェスの第1の有効な領域が、第2のサーフェスの割り当て内に包含可能かの判定が、コンポジション・システムによりなされる(ブロック1804)。例えば、第1のサーフェスは、アップデートとして構成することができる。次いで、第1の有効な領域以外のアップデートの一部を無効にする後続のアップデートが実行され得る。
【0101】
次いで、第2のサーフェスの一部として包含するために、第1の有効な領域がプッシュ・ダウンされる(ブロック1806)。これは、有効な領域のビットを第2のサーフェスにコピーすることを含み得る。コピーの後、次いで、第1のサーフェスをリリースすることができ、それにより、別個のサーフェスを維持する際のリソースを節約することができるとともに、より小さな数のサーフェスを使用することにより、レンダリング操作の効率を向上させることができる。したがって、この例において、新たなサーフェスは割り当てられず、それにより、割り当てを行い維持する際のコンピューティング・デバイス102のリソースを節約することができる。他の例も意図されており、そのうちの1つについて以下で説明する。
【0102】
図19は、有効な領域を新たなサーフェスに結合することを伴うコンパクション技術が説明される例示的な実装における手順1900を示している。1以上のビジュアルをレンダリングするために、使用可能な複数のサーフェスの有効な領域が、コンポジション・システムによりトラッキングされる(ブロック1902)。前と同様、コンポジション・システム114は、複数のサーフェスのどの部分がディスプレイ・デバイスにより表示され、複数のサーフェスのどの部分がディスプレイ・デバイスにより表示されないかを判定することができる。
【0103】
次いで、複数のサーフェスからの有効な領域を包含するために使用可能な新たなサーフェスのための割り当てが計算される(ブロック1904)。例えば、新たなサーフェスは、複数の有効な領域の包含のために境界を有する矩形として構成することができる。次いで、新たなサーフェスが、複数のサーフェスからの有効な領域を包含するために割り当てられ(ブロック1906)、次いで、有効な領域が、新たなサーフェスにコピーされ、それにより、コンポジション・システム114が元となるサーフェスを自由にすることを可能にする。コンポジション・システム114によるサーフェス・コンパクションの多様な他の例も意図されている。
【0104】
図20は、ドライバへの呼び出しを行ってメッシュを用いてサーフェスをレンダリングするために、コンポジション・システムがメッシュを使用する例示的な実装における手順2000を示している。Tジャンクションを含まない矩形のセットからメッシュが形成される(ブロック2002)。例えば、メッシュは、Tジャンクションと、したがって、前述したように、こうしたジャンクション(例えば、継ぎ目)をレンダリングする際に遭遇する複雑さとを避けるために形成される三角形のセットを記述するものとして形成することができる。ユーザ・インタフェース内にアップデートのための有効な領域を有する複数の矩形を記述するために使用することができるグラフィックス機能(例えば、GPU)のドライバに対する単一の呼び出し等、メッシュを用いてサーフェスをレンダリングするために、ドライバへの呼び出しがなされる(ブロック2004)。したがって、メッシュは、上記の対応するセクションにおいて説明したメッシュの三角形を形成するために使用される矩形の各々に対する呼び出しの使用を回避することに役立ち得る。
【0105】
例示的なシステム及びデバイス
図21は、本明細書で説明した様々な技術を実装することができる1以上のコンピューティング・システム及び/又はデバイスを表す例示的なコンピューティング・デバイス2102を含む例示的なシステムを、一般に2100で示している。例えば、コンピューティング・デバイス2102は、サービス・プロバイダのサーバ、クライアントに関連付けられたデバイス(例えば、クライアント・デバイス)、オンチップ・システム、及び/又は任意の他の適切なコンピューティング・デバイス若しくはコンピューティング・システムとすることができる。コンピューティング・デバイス2102は、
図1のコンポジション・システム114を含むものとして示されている。
【0106】
図示された例示的なコンピューティング・デバイス2102は、処理システム2104、1以上のコンピュータ読み取り可能な媒体2106、及び1以上のI/Oインタフェース2108を含み、これらは、互いに通信可能に接続される。図示されてはいないが、コンピューティング・デバイス2102は、互いに様々なコンポーネントを接続するシステム・バス又は他のデータ・コマンド転送システムをさらに含んでもよい。システム・バスは、メモリ・バス若しくはメモリ・コントローラ、周辺バス、ユニバーサル・シリアル・バス、及び/又は多様なバス・アーキテクチャのいずれかを利用するプロセッサ・バス若しくはローカル・バス等の異なるバス・アーキテクチャの任意の1つ又はそれらの組合せを含むことができる。制御線及びデータ線等の多様な他の例も意図されている。
【0107】
処理システム2104は、ハードウェアを用いて1以上の動作を実行する機能を表す。したがって、処理システム2104は、プロセッサ、機能ブロック等として構成され得るハードウェア要素2110を含むものとして示されている。これは、1以上の半導体を用いて形成される特定用途向け集積回路又は他の論理デバイスとしてのハードウェアの実装を含み得る。ハードウェア要素2110は、ハードウェア要素が形成される材料又はハードウェア要素において使用される処理機構により限定されるものではない。例えば、プロセッサは、1以上の半導体及び/又はトランジスタ(例えば、電子集積回路(IC))から構成されることがある。このようなコンテキストにおいて、プロセッサ実行可能な命令は、電子的に実行可能な命令であってよい。
【0108】
コンピュータ読み取り可能な記憶媒体2106は、メモリ/ストレージ2112を含むものとして示されている。メモリ/ストレージ2112は、1以上のコンピュータ読み取り可能な媒体に関連付けられたメモリ/ストレージ能力を表す。メモリ/ストレージ・コンポーネント2112は、(ランダム・アクセス・メモリ(RAM)等の)揮発性媒体及び/又は(読み取り専用メモリ(ROM)、フラッシュ・メモリ、光ディスク、磁気ディスク等の)不揮発性媒体を含み得る。メモリ/ストレージ・コンポーネント2112は、固定媒体(例えば、RAM、ROM、固定ハード・ドライブ等)及び取り外し可能な媒体(例えば、フラッシュ・メモリ、取り外し可能なハード・ドライブ、光ディスク等)を含み得る。コンピュータ読み取り可能な媒体2106は、以下でさらに説明するような多様な他の形で構成され得る。
【0109】
1以上の入力/出力インタフェース2108は、様々な入力/出力デバイスを用いて、ユーザがコマンド及び情報をコンピューティング・デバイス2102に入力することを可能にするとともに、情報をユーザ及び/又は他のコンポーネント若しくはデバイスに提示することを可能にする機能を表す。入力デバイスの例は、キーボード、カーソル制御デバイス(例えば、マウス)、マイクロフォン、スキャナ、タッチ機能(例えば、物理的接触を検出するよう構成されている静電容量式センサ又は他のセンサ)、カメラ(例えば、赤外周波数等の可視波長又は不可視波長を使用して、接触を伴わないジェスチャとして動きを認識することができる)等を含む。出力デバイスの例は、ディスプレイ・デバイス(例えば、モニタ又はプロジェクタ)、スピーカ、プリンタ、ネットワーク・カード、触覚応答デバイス等を含む。したがって、コンピューティング・デバイス2102は、ユーザ・インタラクションをサポートするために、以下でさらに説明するような多様な形で構成され得る。
【0110】
ソフトウェア、ハードウェア要素、又はプログラム・モジュールの一般的コンテキストにおいて、様々な技術が、本明細書において説明され得る。一般に、そのようなモジュールは、特定のタスクを実行するか、あるいは、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、エレメント、コンポーネント、データ構造等を含む。「モジュール」、「機能」、及び「コンポーネント」という用語は、本明細書で使用されるとき、一般に、ソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せを表す。本明細書で説明した技術の特徴は、プラットフォームに依存しない、すなわち、こうした技術は、多様なプロセッサを有する多様な商用コンピューティング・プラットフォーム上で実装することができる。
【0111】
説明したモジュール及び技術の実装は、何らかの形態のコンピュータ読み取り可能な媒体上に記憶することができ、あるいは、何らかの形態のコンピュータ読み取り可能な媒体にわたって伝送することができる。コンピュータ読み取り可能な媒体は、コンピューティング・デバイス2102によりアクセスされ得る多様な媒体を含み得る。限定ではなく例として、コンピュータ読み取り可能な媒体は、「コンピュータ読み取り可能な記憶媒体」及び「コンピュータ読み取り可能な信号媒体」を含み得る。
【0112】
「コンピュータ読み取り可能な記憶媒体」は、単なる信号伝送、搬送波、又は信号自体ではなく、永続的な且つ/又は非トランジトリな情報の記憶を可能にする媒体及び/又はデバイスを指し得る。したがって、コンピュータ読み取り可能な記憶媒体は、非信号担持媒体を指す。コンピュータ読み取り可能な記憶媒体は、コンピュータ読み取り可能な命令、データ構造、プログラム・モジュール、論理エレメント/回路、又は他のデータ等の情報を記憶するのに適した方法又は技術により実装された、揮発性及び不揮発性、取り外し可能な及び取り外し不可能な媒体及び/又はストレージ・デバイス等のハードウェアを含む。コンピュータ読み取り可能な記憶媒体の例は、RAM、ROM、EEPROM、フラッシュ・メモリ、若しくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)、若しくは他の光ストレージ、ハード・ディスク、磁気カセット、磁気テープ、磁気ディスク・ストレージ、若しくは他の磁気ストレージ・デバイス、又は他のストレージ・デバイス、有体の媒体、又は所望の情報を記憶するのに適しておりコンピュータによりアクセスされ得る製品を含み得るが、これらに限定されるものではない。
【0113】
「コンピュータ読み取り可能な信号媒体」は、例えばネットワークを介して、コンピューティング・デバイス2102のハードウェアに命令を伝送するよう構成されている信号担持媒体を指し得る。信号媒体は、一般的に、搬送波、データ信号、又は他の搬送機構等の変調されたデータ信号内に、コンピュータ読み取り可能な命令、データ構造、プログラム・モジュール、又は他のデータを具現化し得る。信号媒体はまた、任意の情報伝達媒体を含む。「変調されたデータ信号」という用語は、情報をその信号内で符号化するような方法で設定又は変更されたその特性の1以上を有する信号を意味する。例えば、通信媒体は、有線ネットワーク又は直接配線接続などの有線媒体、並びに、音響、RF、赤外線、及び他の無線媒体等の無線媒体を含むが、これらに限定されるものではない。
【0114】
前述したように、ハードウェア要素2110及びコンピュータ読み取り可能な媒体2106は、1以上の命令を実行する等のために、本明細書で説明した少なくともいくつかの技術の態様を実装するいくつかの実施形態において使用することができるハードウェア形態で実装されたモジュール、プログラマブル・デバイス・ロジック、及び/又は固定デバイス・ロジックを表す。ハードウェアは、集積回路又はオンチップ・システムのコンポーネント、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、コンプレックス・プログラマブル論理デバイス(CPLD)、及び、シリコン又は他のハードウェアによる他の実装を含み得る。このコンテキストにおいて、ハードウェアは、命令により定められるプログラム・タスク及び/又はハードウェアにより具現化されるロジックを実行する処理デバイスとして機能することができるとともに、例えば、前述したコンピュータ読み取り可能な記憶媒体といった実行するための命令を記憶するために利用されるハードウェアとして機能することができる。
【0115】
上記の組合せを使用して、本明細書で説明した様々な技術を実装することもできる。したがって、ソフトウェア、ハードウェア、又は実行可能なモジュールが、何らかの形態のコンピュータ読み取り可能な記憶媒体上に具現化される、且つ/又は1以上のハードウェア要素2110により具現化される1以上の命令及び/又はロジックとして実装され得る。コンピューティング・デバイス2102は、ソフトウェア・モジュール及び/又はハードウェア・モジュールに対応する特定の命令及び/又は機能を実装するよう構成され得る。したがって、ソフトウェアとしてコンピューティング・デバイス2102により実行可能なモジュールの実装は、例えば、コンピュータ読み取り可能な記憶媒体及び/又は処理システム2104のハードウェア要素2110を使用することにより、少なくとも一部はハードウェアを用いて実現され得る。命令及び/又は機能は、本明細書で説明した技術、モジュール、及び例を実装するために、1以上の製品(例えば、1以上のコンピューティング・デバイス2102及び/又は処理システム2104)により実行可能/動作可能であり得る。
【0116】
図21にさらに示されるように、例示的なシステム2100は、パーソナル・コンピュータ(PC)、テレビジョン・デバイス、及び/又はモバイル・デバイス上でアプリケーションを実行するときに、シームレスなユーザ・エクスペリエンスのためのユビキタス環境を可能にする。サービス及びアプリケーションは、アプリケーションを使用している、ビデオ・ゲームをプレイしている、ビデオを観賞している間等に1つのデバイスから次のデバイスに移るとき、共通のユーザ・エクスペリエンスのために、3つの環境全てにおいて実質的に同様に動作する。
【0117】
例示的なシステム2100において、複数のデバイスが、中央コンピューティング・デバイスを介して相互接続される。中央コンピューティング・デバイスは、複数のデバイスに対してローカルにあってもよいし、あるいは、複数のデバイスからリモートに配置されてもよい。一実施形態において、中央コンピューティング・デバイスは、ネットワーク、インタネット、又は他のデータ通信リンクを介して複数のデバイスに接続されている1以上のサーバ・コンピュータのクラウドであってよい。
【0118】
一実施形態において、この相互接続アーキテクチャにより、共通のシームレスなエクスペリエンスを複数のデバイスのユーザに提供するために、機能を複数のデバイスにわたって分散させることが可能となる。複数のデバイスの各々は、異なる物理的要件及び能力を有し得る。中央コンピューティング・デバイスは、プラットフォームを使用して、デバイス向けに調整されるとともにそれでも全てのデバイスに共通のエクスペリエンスをデバイスに提供することを可能にする。一実施形態において、ターゲット・デバイスのクラスが作成され、エクスペリエンスが、デバイスの全体的クラス向けに調整される。デバイスのクラスは、物理的特徴、使用のタイプ、又はデバイスの他の共通の特性により定められ得る。
【0119】
様々な実装において、コンピューティング・デバイス2102は、コンピュータ2114、モバイル2116、及びテレビジョン2118向け等、多種多様な構成を想定し得る。これらの構成の各々は、一般に異なる構造及び能力を有し得るデバイスを含み、したがって、コンピューティング・デバイス2102は、異なるデバイス・クラスの1以上に従って構成され得る。例えば、コンピューティング・デバイス2102は、パーソナル・コンピュータ、デスクトップ・コンピュータ、マルチ・スクリーン・コンピュータ、ラップトップ・コンピュータ、ネット・ブック等を含むデバイスのコンピュータ2114・クラスとして実装され得る。
【0120】
コンピューティング・デバイス2102はまた、携帯電話、ポータブル音楽プレイヤ、ポータブル・ゲーミング・デバイス、タブレット・コンピュータ、マルチ・スクリーン・コンピュータ等のモバイル・デバイスを含むデバイスのモバイル2116・クラスとしても実装され得る。コンピューティング・デバイス2102はまた、臨時の視聴環境におけるより大きなスクリーンを有するデバイス又はそのようなスクリーンに一般に接続されたデバイスを含むデバイスのテレビジョン2118・クラスとしても実装され得る。これらのデバイスは、テレビジョン、セットトップ・ボックス、ゲーミング・コンソール等を含む。
【0121】
本明細書で説明した技術は、コンピューティング・デバイス2102のこれら様々な構成によりサポートされ得るものであり、本明細書で説明した技術の特定の例に限定されるものではない。この機能は、以下で説明するように、「クラウド」2120を介してプラットフォーム2122を用いる等、分散システムを使用することにより、全てが又は部分的に実装され得る。
【0122】
クラウド2120は、リソース2124のためのプラットフォーム2122を含む、且つ/又はリソース2124のためのプラットフォーム2122を表す。プラットフォーム2122は、クラウド2120のハードウェア・リソース(例えば、サーバ)及びソフトウェア・リソースの基本的機能を抽象化する。リソース2124は、コンピューティング・デバイス2102からリモートにあるサーバ上でコンピュータ処理が実行されている間に使用することができるアプリケーション及び/又はデータを含み得る。リソース2124はまた、インタネット、及び/又は、セルラネットワーク若しくはWi−Fi(登録商標)ネットワーク等の加入者ネットワークを介して提供されるサービスも含み得る。
【0123】
プラットフォーム2122は、コンピューティング・デバイス2102を他のコンピューティング・デバイスに接続するためのリソース及び機能を抽象化し得る。プラットフォーム2122はまた、プラットフォーム2122を通じて実現されるリソース2124に対して出された要求に合わせて、対応するレベルの規模を提供するために、リソースの規模調整(scaling)を抽象化する働きもする。したがって、相互接続されたデバイスの実施形態において、本明細書で説明した機能の実装は、システム2100全体を通じて分散させることができる。例えば、機能は、コンピューティング・デバイス2102上に部分的に実装されるとともに、クラウド2120の機能を抽象化するプラットフォーム2122を通じて実装され得る。
【0124】
結論
本発明が、構造的特徴及び/又は方法論的動作に特有の言葉で説明されたが、添付の特許請求の範囲において定められる本発明は、説明した特定の特徴又は動作に必ずしも限定される必要がないことを理解すべきである。むしろ、特定の特徴及び動作は、特許請求された発明を実施するための例示的な形態として開示されたものである。