JP5536093B2 - 改良されたコマンドリモーティング技術 - Google Patents

改良されたコマンドリモーティング技術 Download PDF

Info

Publication number
JP5536093B2
JP5536093B2 JP2011540740A JP2011540740A JP5536093B2 JP 5536093 B2 JP5536093 B2 JP 5536093B2 JP 2011540740 A JP2011540740 A JP 2011540740A JP 2011540740 A JP2011540740 A JP 2011540740A JP 5536093 B2 JP5536093 B2 JP 5536093B2
Authority
JP
Japan
Prior art keywords
data
client
vertex
graphics data
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011540740A
Other languages
English (en)
Other versions
JP2012511219A (ja
JP2012511219A5 (ja
Inventor
ワイ.アブド ナディム
フィリズ オヌール
エヌ.ウッド ダニエル
アラン マクマレン マックス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2012511219A publication Critical patent/JP2012511219A/ja
Publication of JP2012511219A5 publication Critical patent/JP2012511219A5/ja
Application granted granted Critical
Publication of JP5536093B2 publication Critical patent/JP5536093B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/001Model-based coding, e.g. wire frame

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Information Transfer Between Computers (AREA)
  • Image Processing (AREA)
  • Digital Computer Display Output (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Description

本発明は、改良されたコマンドリモーティング技術に関する。
ターミナルサービスは、サーバで記憶されたアプリケーション及びデータに対するアクセスを可能になす方法を提供する。ユーザ入力は、ネットワーク接続によりサーバに送信され、音声及びグラフィックスがサーバからクライアントに送信される。数年間、異なる技術が、コマンドレベルリモーティング及びビットマップレベルリモーティング等のリモートグラフィックスに対して開発されてきた。
一般に、ビットマップレベルリモーティングが、実装するのにより簡単な2つの技術であると考えられている。ビットマップリモーティングにおいて、グラフィックス処理は、ターミナルサーバにおいて実行され、最終的なイメージ、すなわち、ビットマップを形成するピクセルのアレイが、圧縮されて、クライアントにネットワーク上で送信される。この技術は、1つ以上のクライアントに対してイメージを表示するのに十分な計算能力を有するサーバを必要とする。
他方では、コマンドレベルリモーティングは、グラフィックス処理を、クライアントにオフロードする。プリミティブ、例えば、ドライバーにより処理され且つグラフィックプロセッサにより実行されるバーテックスは、キャプチャされ、かつ、クライアントに送信される。これは、リモートグラフィックスに要求される処理能力を低減せしめるものの、ビットマップリモーティングを使用するよりも大なるバンド幅が、3Dグラフィックスプリミティブを表すデータを転送するのに必要である。従って、コマンドレベルリモーティングを実現するのに必要であるバンド幅を狭小化する技術が望ましい。
本開示の例示的実施形態は、方法について記述している。この例においては、方法は、複数のプリミティブのバーテックス(注:頂点データ)をメモリに記憶するステップと、前記バーテックスの少なくとも一部分がターミナルサーバクライアントに送信されていないと判定するステップと、前記バーテックスの当該判定された部分を前記ターミナルサーバクライアント(201)に送信するステップとを含むものの、これらに限定されない。前述に加えて、他の態様が、本開示の一部を形成する特許請求の範囲、図面、及び本文に記載されている。
本開示の例示的実施形態は、方法について記述している。この例においては、方法は、各々が少なくとも1つのバーテックスによって定義された複数のプリミティブのバーテックスを記憶するステップと、フロントコーダに対する移動によりバーテックスを暗号化するステップと、当該暗号化されたバーテックスをターミナルサーバクライアントに送信するステップと、を含むものの、これらに限定されない。前述に加えて、他の態様が、本開示の一部を形成する特許請求の範囲、図面、及び本文に記載されている。
本開示の例示的実施形態は、方法について記述している。この例において、方法は、テクスチャ及びバーテックスを含むグラフィックデータをメモリに記憶するステップと、メモリに記憶されたグラフィックスデータと、ターミナルサーバクライアントに先に送信されたグラフィックスデータとの比較に基づいて、前記メモリにおける前記グラフィックスデータの少なくとも一部分が変化したと判断するステップと、変化した前記グラフィックスデータの少なくとも一部分を予備調整するステップと、変化した前記グラフィックスデータをターミナルサーバクライアントに送信するステップとを含むものの、これらに限定されない。前述に加えて、他の態様が、本開示の一部を形成する特許請求の範囲、図面、及び本文に記載されている。
当業者であれば、ことを容易に理解できるであろう。本開示の1つ以上の様々な態様が、本開示の本明細書に参照された態様に作用する回路(構成)(構成)及び/又はプログラミングを含むことができるものの、これらに限定されない。事実上、回路及び/又はプログラミングは、システムデザイナの設計選択に依存して、本明細書に参照された態様に作用するように構成されたハードウェア、ソフトウェア、及び/又は、ファームウェアのいかなる組合せとすることもできる。
上記は、要約であり、その結果、必要に応じて、詳細な記述が簡素化され、一般化され、且つ省略されている。当業者であれば、上記概要が単なる例示であり、いかなる場合においても、限定を意図したものでないことを十分理解するだろう。
図1は、本開示の態様が実装される例示的コンピュータシステムを表す図である。 図2は、本開示の態様が実装される例示的コンピュータシステムを表す図である。 図3は、本開示の態様を実行する動作手順300を表す図である。 図4は、図3の動作手順300の代替的実施形態を表す図である。 図5は、図4の動作手順300の代替的実施形態を表す図である。 図6は、図5の動作手順300の代替的実施形態を表す図である。 図7は、図6の動作手順300の代替的実施形態を表す図である。 図8は、図7の動作手順300の代替的実施形態を表す図である。 図9は、図4の動作手順300の代替的実施形態を表す図である。 図10は、本開示の態様を実行する例示的動作手順を表す図である。 図11は、図10の動作手順の代替的実施形態を表す図である。 図12は、図11の動作手順の代替的実施形態を表す図である。 図13は、図12の動作手順の代替的実施形態を表す図である。 図14は、本開示の態様を実行する例示的動作手順を表す図である。 図15は、図14の動作手順の代替的実施形態を表す図である。
本開示の実施形態は、1以上のコンピュータで実行することができる。図1及び対応する説明は、本開示が実装される適切なコンピューティング環境について簡潔で且つ一般的な説明を提供することを目的としている。図1のコンピュータシステムは、いくつかの実施形態において、図2のサーバ200及びクライアント201を実現可能であることを十分理解できよう。これら例示的実施形態において、サーバ200及びクライアント201は、図1に記載されていた要素のいくつか又はすべて及び本開示の特定の態様を例示するように構成された回路を含むことができる。
本開示において、回路構成という用語は、例えば、ハードウェア割り込みコントローラ、ハードドライブ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ/オーディオコーデック、及び、例えばハードウェアを動作させるのに用いられるファームウェア/ソフトウェア等のハードウェア要素を含む。同一の又は他の実施形態において、回路構成は、ファームウェアによって又はセットスイッチによって(複数の)機能を実行するように構成されたマイクロプロセッサを含む。同一の又は他の例示的実施形態において、回路構成は、論理的なプロセッサ、例えば1つ以上のマルチ‐マルチ汎用処理ユニットを含む。(複数の)論理的なプロセッサは、(複数の)機能を実行するように動作可能なソフトウェア命令実行論理によって構成される。当該ソフトウェア命令実行論理は、例えば、RAM、ROM、ファームウェア、及び/又は、仮想メモリ等のメモリからロードされる。回路構成がハードウェアとソフトウェアとの組合せを含む例示的実施形態において、実装者は、後に機械可読コードにコンパイルされる論理を実行するソースコードを作成することができるであろう。当該機械可読コードは、論理プロセッサによって処理される。当業者であれば、技術水準はハード/ソフトのハードウェア、ソフトウェア、または組合せの間には、ほとんど相違がない技術水準に達したことを十分理解するであろうから、具体的な機能を実現するためのハードウェアかソフトウェアの選択は設計変更問題である。より具体的には、当業者であれば、ソフトウェアの処理は、同等のハードウェア構造に変換することができ、また、ハードウェア構造自体は、ソフトウェアの処理にすることができることを十分理解するであろう。したがって、ハードウェア実装かソフトウェア実装かの選択は、設計変更の一つであり、実装者に委ねられている。
図1を参照すると、例示的汎用コンピュータシステムが示されている。汎用のコンピュータシステムは、従来のコンピュータ20等を含む。当該従来のコンピュータ20は、汎用の処理ユニット21,システムメモリ22,及びシステムバス23を含む。当該システムバス23は、システムメモリを含む様々なシステム要素を処理ユニット21に接続する。システムバス23は、メモリバス若しくはメモリコントローラ、周辺バス、及び種々のバスアーカテクチャのいずれをも使用するローカルバスを含むいくつかのタイプのバス構造のいずれでもよい。システムメモリは、読取専用メモリ(ROM)24及びランダムアクセスメモリ(RAM)25を含む。基本入出力システム26(BIOS)は、例えば、スタートアップ中に、コンピュータ20内の要素間の情報を転送することを幇助する基本的なルーチンを含み、ROM24において記憶される。コンピュータ20は、図示していないハードディスクに対して読取り及び書込みするハードディスクドライブ27、脱着可能な磁気ディスク29に対して読取り及び書込みする磁気ディスクドライブ28、及び、CD−ROM又は他の光学媒体等の脱着可能不揮発性光ディスク31に対して読み取り又は書き込む光ディスクドライブ30をさらに含むことができる。いくつかの例示的実施形態において、本開示の態様を実施するコンピュータ実行可能命令は、ROM24,ハードディスク(図示せず)、RAM25,脱着可能な磁気ディスク29,光ディスク31,及び/又は、汎用の処理ユニット21のキャッシュにおいて記憶することができる。ハードディスクドライブ27,磁気ディスクドライブ28,および光ディスクドライブ30は、それぞれハードディスクドライブインタフェース32,磁気ディスクドライブインタフェース33,および光ドライブインタフェース34によってシステムバス23に接続されている。ドライブ及びそれらと関連付けられたコンピュータ可読媒体は、コンピュータ20に対するコンピュータ可読命令、データ構造、プログラムモジュール及び他のデータの非揮発性記憶を提供する。本明細書に記載された例示的な環境は、ハードディスク、脱着可能な磁気ディスク29,および脱着可能な光ディスク31を採用しているものの、当業者であれば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAMs)、リードオンリーメモリ(ROMs)等のコンピュータによってアクセス可能であるデータを記憶することができる他のタイプのコンピュータ読取可能媒体が、例示的な動作環境においても使用可能であることを容易に理解できるであろう。
オペレーティングシステム35,1つ以上のアプリケーションプログラム36,他のプログラムモジュール37,及びプログラムデータ38を含む多くのプログラムモジュールが、ハードディスク、磁気ディスク29,光ディスク31,ROM24またはRAM25、に記憶される。ユーザは、キーボード40及びポインティングデバイス42等の入力装置を介して、コマンド及び情報をコンピュータ20に入力する。他の入力装置(図示せず)は、マイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ等を含む。多くの場合に、これら入力装置及び他の入力装置は、システムバスに接続されたシリアルポートインターフェイス46を介して、汎用処理ユニット21に接続されているが、しかし、パラレルポート、ゲームポート若しくはユニバーサルシリアルバス(USB)等の他のインターフェースによって接続されてもよい。また、ディスプレイ47又は他のタイプの表示デバイスは、ビデオアダプタ48等のインターフェースを介してシステムバス23に接続されている。ディスプレイ47に加えて、コンピュータは、スピーカ及びリンタ等の他の周辺出力装置を通常含む。また、図1の例示的システムは、ホストアダプタ55,スモールコンピュータシステムインタフェース(SCSI)バス56,およびSCSIバス56に接続された外部記憶装置デバイス62を含む。
コンピュータ20は、リモートコンピュータ49等の1つ以上のリモートコンピュータへの論理接続を使用して、ネットワークでつながれた環境において動作する。リモートコンピュータ49は、別のコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス又は他の共通ネットワークノードであり、コンピュータ20に対して上述した要素の多くを又はすべてを通常含む。ただし、図1には、メモリ記憶装置50のみが示されている。図1に示された論理接続は、ローカルエリアネットワーク(LAN)51及び広域ネットワーク(WAN)52を含む。かかるネットワーク環境は、会社内ネットワーク、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいては一般的である。
LANネットワーク環境において用いられると、コンピュータ20は、ネットワークインタフェース又はアダプター53を介してLAN51に接続される。WANネットワーク環境において用いられると、コンピュータ20は、インターネット等の広域エリアネットワーク上で通信を確立するモデム54又は他の手段を通常は含む。内臓の又は外付けのモデム54が、シリアルポートインターフェイス46を介してシステムバス23に接続される。ネットワーク化された環境においては、コンピュータ20に対して示されたプログラムモジュール又はその部分は、リモートメモリ/記憶装置に記憶される。図示されたネットワーク接続は例示的であり且つコンピュータ間の通信リンクを確立する他の手段を使用できることが十分理解されよう。その上、本開示の多数の実施形態がコンピュータ化されたシステムに対して特に十分適合されていることが想定されているものの、本明細書において、かかる実施形態に制限することは意図されていない。
図2を参照すると、図2は、実施形態において使用されるターミナルサービスセッション204を含む実施例オペレーティングシステム202を図示している。図1のコンピュータ20などのコンピュータで実施例オペレーティングシステム200は実現されることができることを十分理解できよう。図に示されているように、ハードドライブ、ネットワークインターフェースカード(NIC)210、グラフィック処理ユニット218、少なくとも1つの論理プロセッサ212、及び、RAM214等の基盤となるハードウェア記憶装置208備える。
ターミナルサービスが、実施形態において、(1のクライアントが表されているものの、サービスはより多くのクライアントに提供される)クライアント201等の少なくとも1つのクライアントに対して備えられる。実施形態でクライアント201などの少なくとも1つのクライアント(1つのクライアントについて表現するが、より多くのクライアントにターミナルサービスを提供できる)にターミナルサービスを提供できる。例示的クライアント201は、ハードウェアによって実現されるコンピュータターミナルを含む。当該ハードウェアは、ユーザ入力をセッションによって生成されたターミナルサーバセッションとディスプレイユーザインタフェース情報に指向するよう構成されている。別の実施形態では、クライアント201は、図1のコンピュータ20のものと同様の要素を含むコンピュータによって実現される。この実施形態においては、クライアント201は、オペレーティングシステムに作用するように構成された回路構成と、ターミナルの機能、例えば、1つ以上の論理プロセッサ212によって実行するリモートデスクトップクライアントアプリケーションに匹敵するよう構成された回路構成と、を含む。当業者であれば、オペレーティングシステム202を実現するように構成された回路構成が、ターミナルに匹敵するように構成された回路構成をも含みことが可能なことを十分理解するであろう。
オペレーティングシステム202は、プロセッサ212にセッションを生成させる命令を含む。簡略して、セッションは、一般に、ユーザモードプロセスアプリケーション206を含む。ユーザモードプロセスアプリケーション206は、テレビゲーム、文書処理プログラム、ウェブブラウザ、ユーザインタフェース(ウィンドウズ(登録商標)、ダイアログボックス、デスクトップ等)、メディアプレーヤー等である。アプリケーション206は、様々なサブシステムによって、実現される。当該様々なサブシステムは、例えば、プラットフォームをアプリケーション206に提供してカーネル234を実行し及びカーネル234と対話する実行処理である。かかるサブシステムの1つ、例えば、命令が、より詳細に以下に説明する環境サブシステム244である。セッションは、(ユーザインタフェース処理によって表示される)シェル及びユーザインタフェース、デスクトップ内においてマウスの移動をトラックするサブシステム、プログラムを実現するコマンドに対してアイコン上のマウスクリックを転送するサブシステム等を含む。
例えば、オペレーティングシステム202が接続要求をクライアント201等のクライアントからネットワーク接続上で受信するとき、一般に、セッションは、ユーザベースによりユーザに対して作成される。一般に、接続要求は、転送スタック、例えば、リモートデスクトッププロトコルスタック(RDP)によって、最初に処理される。転送スタックは、プロセッサ212に特定のポート上の接続メッセージを聞きおよびそれらをエンジン212に転送させる命令を含む。セッションが作成されるとき、転送論理が実行され、スタックインスタンス214等の各セッションに対するリモートデスクトッププロトコルスタックインスタンスがインスタント化される。一般に、リモートデスクトッププロトコルスタックインスタンス214が、出力をクライアント201へ送り、クライアント入力を環境サブシステム244へ送るよう構成される。
セッション作成処理中に、セッションマネージャ216は、論理プロセッサ212によって実行され、例えば、セッションスペースのためにセッション識別子を生成することによって、セッション識別子をテーブルに追加することによって、メモリをセッションスペースに割り当てることによって、及び、セッションスペースに割り当てられたメモリにおけるサブシステム処理のシステム環境変数及びインスタンスを作成することによって、プロセッサは、各セッションを初期化し、および、処理する。
図に示されているように、実施形態において、アプリケーション206は、セッション204のユーザモード内で実行し、グラフィックスディスプレイインタフェース(GDI)246、3Dグラフィックス、または双方の組合せによって作成されたビットマップ等の2つの異なるレンダリング技術を使用する。GDI246は、テキスト及びウィンドウ等の2次元画像を生成するのに有益である。GDI246は、アプリケーション206からビットのアレイを受信することに応じて、ビットマップイメージを生成するディスプレイドライバに関連づけられる。例えば、アプリケーションは、ディスプレイドライバによって処理され、および、カラー値を表すピクセルを表示するのに使用されるアレイを発光させる。図に示されているように、リモーティング要素220は、GDI246によってビットマップ出力をキャプチャし、それをスタックインスタンス214に送信する。
図2の説明を続けると、アプリケーション206は、複数のハードウェアベンダの1つによって作成されたグラフィック処理ユニットによってサポートされる3Dグラフィックスをさらに利用してもよい。異なるハードウェアベンダが異なるアーキテクチャ及びコマンドを使用するので、開発者はいかなるグラフィックカードを用いても動作する単一のアプリケーションを作成できるように、ハードウェアを抽出するグラフィックスドライバーアーキテクチャが作成される。この例において、アプリケーションはマイクロソフト登録商標からのDirect3D等のアプリケーションプログラミングインタフェイス222(API)を介してクライアント201のグラフィック処理装置の主要部にアクセスする。APIプリミティブは、クライアント201に送信され、クライアントのドライバーによってクライアントのGPUによって実行されるコマンドに転送され、クライアントのGPUによって実行される。一般に、API222は、グラフィックスデータ、例えば、値、バーテックス(三角形のバーテックスを表す32ビット値)、及び/又は、テクスチャ、例えば、オブジェクトがどれくらい透明でありおよび反射的であるか等の3D特性を有するオブジェクトの表面のディジタル表現を出力する。一般に、テクスチャは、プリミティブに適用されるビットマップであると考えることができる。すなわち、アプリケーションは、ツリーに似ているオブジェクトを作成し、テクスチャをツリーに適用して、バークを有するよう、それを出現させる。別の実施例は、丘を形成する草、土、及び岩を1セットの3Dプリミティブに適用するステップを含むことができる。
グラフィックスデータは、API222によって作成され、および、バッファ、例えば、メモリのページに記憶され、テクスチャは、アートファイルからロードされて、他のページのメモリに記憶される。アプリケーションが実行すると、アプリケーションは、メモリがテクスチャを記憶するのに使用されるバーテックスバッファとメモリとして使用するよう要求できる。アプリケーションは、それがメモリをどのように使用するのか、すなわち、それがバッファにおいてどのタイプのデータで記憶されるのかを宣言する。例えば、テレビゲーム等のアプリケーションは、アバターに対するバーテックスを記憶する動的バーテックスバッファと、データを作成する際に多くの場合変化しないであろうデータを記憶するための静的バッファを使用する。
ターミナルサーバの実施形態において、リモーティング要素220は、API222によって出力されたグラフィックデータをキャプチャするのに使用され、例えば、オプティマイザ226、デルタプレコンディショナ228、先頭移動エンコーダ230、1つ以上のテクスチャコンプレッサ232、メッシュコンプレッサ(236)、及び1つ以上のエスケープ238等のクライアント201にネットワーク上で送信されたグラフィックデータ量を低減するために、様々な技術が使用される。例示的実施形態において、様々な要素226−238が、1つ以上の論理プロセッサによって実行される命令によって実現される。また、要素226−338は別々に示されているものの、1つ以上の実施形態において、要素は単一のソフトウェアコンポーネントとすることができる。さらに、1つ以上の実施形態において、各要素226−338は、アプリケーション206の1つ以上のスレッド又はスタックインスタンス214(図示せず)で実行される。その上、特定の要素が平行に示されているものの、本開示は、かかる構成に限定されることはなく、他の実施形態において、1つ以上の要素が連続的な他の要素であってもよい。グラフィックスデータは、API222によって作成されるので、それは、グラフィックスデータのタイプに依存して、1つ以上の先の要素によって処理され、バルクコンプレッサ240に送信される。バルクコンプレッサ240は、グラフィックスデータを圧縮するよう構成され、当該圧縮されたデータは、NIC210を介して、クライアント210に送信される。
以下は、処理過程の実装について表す一連のフローチャートである。理解を容易にするために、初期のフローチャートは、全体的な「大型画像」の観点での実装を示し、その後のフローチャートは更なる付加的及び/又は詳細な説明を行うようにフローチャートが構成されている。
図3を参照すると、図3は、動作300,302,304,及び306を含む本開示の態様を実行する動作手順を表している。図に示されているように、動作300は操作手順を開始させ、動作302は、複数のプリミティブのバーテックスをメモリに記憶するステップを示している。図2を参照すると、バーテックスデータ、例えば、バーテックスを示す32ビット値が、バーテックスバッファ、例えば、RAM214の1ページ以上のメモリ、及び/又は、グラフィックプロセッサ218のメモリにおいて記憶される。一つの実施例において、バーテックスデータは、例えば、テレビゲーム、メディアプレーヤー、CADプログラム、ユーザインタフェース等のアプリケーションからAPIコンストラクトを受信することに応答して、例えば、API222によって作成される。すなわち、アプリケーションは、API222を1つ以上のコンストラクトまでの間に通過させ、API222は、何千ものプリミティブを作成し、それらを1つ以上のバーテックスバッファ内に記憶する。
図3の説明を続けると、動作304は、バーテックスの少なくとも一部分がターミナルサーバクライアントに送信されていないと判定するステップを示している。例えば、前の実施例を続行して、アプリケーションがバーテックスバッファを1つの処理にマップするとき、例えば、オプティマイザ226は、論理プロセッサ212によって実行され、プロセッサは、バーテックスバッファに記憶されたバーテックスの少なくとも一部分がターミナルサーバクライアント201に送信されていないことを発見する。例えば、膨大な量のデータ、例えば、クライアントアップデート間において数千ものプリミティブがアプリケーションによって作成され、オプティマイザ226は、データのいかなる部分が、クライアント201に送られたもの及び変化したものの差異を表示するのに必要であるかを判定するよう構成される。
例として、アプリケーションは、バーテックスバッファをマッピングする際に、それが開発者によってどのようにコード化されたかに依存して、大きく異なる方法で動作する。例えば、アプリケーションがバッファの一部をマップして、バッファに加え、データの一部をバッファに上書きし、バーテックスバッファのコンテンツを完全に上書きすることは、完全に許容できる。アプリケーションは、全体のバッファのコンテンツに対して又はバッファのサブセットに対して引き抜くコマンドを発生する。代わりに、別の方法により、アプリケーションがどのように動作するのかを推定することは困難である。アプリケーションの動作が予測できないので、ナイーブなアプローチは、各アンマップ動作後にバッファ内のすべてのバーテックスを送信するステップを伴う。しかしながら、この例においては、オプティマイザ226は、アンマップ動作後に、バーテックスバッファにおけるバーテックスのどの部分が変化したかを、例えば、判定する。
図3の説明を続けると、動作306は、バーテックスの当該判定された部分をターミナルサーバクライアント(201)に送信するステップを示す。例えば、図2を参照すると、ネットワークインターフェースカード210は、バッファにおける変化したバーテックスをターミナルサーバクライアント201に送信する。この例においては、ネットワーク上に送信される必要があるバーテックスの量が低減されているで、コマンドリモーティングを実現するのに必要な全バンド幅が低減されている。
図4を参照すると、図4は、付加的動作408、410、412、及び414を含む図3の動作手順300の代替的実施形態を表している。動作408について言及すると、動作408は、バーテックスの少なくとも一部分がターミナルサーバクライアント(201)に送信されていないと判定するステップに先立って、ユーザースペースアプリケーションが所定の範囲より大なる一連のメモリアドレスに要求したと判定するステップを示している。図2を参照すると、オプティマイザ226は、ユーザースペースアプリケーションがアドレススペースの所定量以上を使用していることが判定された後に、バーテックスバッファをスキャンするよう構成される。例えば、バーテックスをスキャンすることは、コンピュータサイクルを要し、アプリケーションが、少量のデータ、例えば、20バイトを送信することを示す場合、各アップデートの間、データの変化分を特定することの代わりに数バイトを送信することは、より効率的である。例えば、アプリケーションは、初期化処理の間、特定の量のバッファを作成し、サイズを設定し、バッファがどのように使用されるかを設定する。プロセッサ212は、オプティマイザ226を実行して、サイズと用途パターンをチェックする。この例において、プロセッサ212は、バッファのサイズが所定量よりも大となるように設定されることを発見し、バッファのコンテンツをスキャンするために判定する。同一の又は他の実施形態において、バッファのサイズ及びタイプは、どの最適化が有効にされているのかを判定するのに使用される。例えば、バッファのサイズに依存して、オプティマイザ226は、ページレベルスキャニング、バイトレベルスキャニング、SIMDスキャニング等を可能にする。
当業者であれば、所定の閾値は、コンピュータシステム200の能力に基づいて異ならせることが可能なことを十分理解し得よう。例えば、所定閾値はビットレベルにより設定可能であり、オプティマイザ226は、API222によって生成されるあらゆるビットをスキャンするのに使用可能である。これにより、クライアント201へ変更を転送するのに使用されるバンド幅は低減されるだろうが、これは、実際に得られた利益に対して、コンピュータサイクルの容認できない量を要するであろう。他方では、変化がほとんど検出されないとき、データを転送するのに必要なバンド幅の量は増加する。したがって、当業者であれば、正確な値が使用されるコンピュータサイクルと使用されるバンド幅のトレードオフに基づいて設定されることを十分理解し得よう。メモリ及びコンピュータの出力が増大しつつあるので、今日使用されている値は、将来のものとは関連し得ない。したがって、正確な閾値は実装者に委ねられている。
図4の説明を続けると、動作410は、バーテックスの判定された部分について事前調整を行うステップを示している。例えば、本開示の実施形態において、バーテックスは圧縮されるよう事前調整される。この例において、値、例えば、プリミティブを生成するのに使用されるバーテックスを表すビットは、異なった形態に変換されるので、バルクコンプレッサ240は、より容易に、パターンを特定することができる、そして、圧縮するより多くの機会をバルクコンプレッサ240に与える。
図4を再度参照すると、オペレーション412は、バーテックスの判定された部分において連続する2つのバーテックスの間で判定されるデルタ(差分)を送信するステップを示している。例えば、実施形態において、デルタプレコンディショナ228は、バーテックスを事前調整するのに使用される。例えば、バーテックスが検知されるとき及び/又はアプリケーションがAPI222に関するフラグを設定するときに判定が行われ、デルタプレコンディショナ228がバーテックスを処理する。先のパラグラフにおいて説明したように、各バーテックスは、値、例えば、32ビットフロートとして表され、プレコンディショナ228は、先のバーテックスに基づく各連続するバーテックスに対して、例えば、加算し、減算し、乗算し、割算する動作を実行し、デルタを出力する。当業者であれば、別の32ビットフロートからの32ビットフロートの減算は、32ビットフロートであり、データ量は同量を維持することを十分理解し得よう。しかしながら、選択的に事前調整することによって、データは、バルクコンプレッサ240によってより容易に圧縮されるフォーマットに、データは載置される。例えば、バーテックスのアレイが2、4、6、8、10、12であった場合、デルタプレコンディショナは、第1の値、及び、連続的なデルタ、すなわち、2、2、2、2、2、2のアレイを送信する。バルクコンプレッサ240は、データを事前調整することによって、第1のアレイを圧縮するよう構成されるものの、バルクコンプレッサ240は、より繰り返されたパターンをピックアップすることが恐らく可能であろうし、その結果、より多くのデータを圧縮することが可能であろう。
この技術は、特に、Direct2DやマイクロソフトのAPIセットに有益である。APIセットはDirect3Dのトップにビルトオンされる。Direct3Dは、テキスト等の2次元画像、例えばボタンのメニュー等を拡大させるのに、3Dハードウェアを使用する。D2Dを使用するアプリケーションは、バーテックスバッファを、水平スパンを表すラインセグメントで満たす。バーテックスがともにパックされて、特定のフォントの文字を表示するので、連続した各バーテックス間の距離は、よく類似する。
図4を再度参照すると、動作414は、オペレーティングシステムによって、ユーザースペースアプリケーションが複数のページを含むメモリにアクセスしたことを判定するステップと、オペレーティングシステムによって、ユーザースペースアプリケーションが複数のページの特定のページにアクセスしたことを判定するステップとを示している。動作412を実行する実施形態に応じて、オペレーティングシステム202は、ユーザースペースアプリケーション(例えば、テレビゲーム)がバーテックスを記憶するメモリの特定のページにアクセスしたことを判定する。例えば、プロセッサ212は、プロセッサ212がアクセスしたそれぞれのページのメモリを追跡し、この情報は、例えば、カーネル234のメモリマネージャに対して提供される。1実施例において、API222を使用するアプリケーションは特定され、アプリケーションがメモリによって戻されたバーテックスバッファをマップするとき、アクセスされたデータが特定され、オプティマイザ226に報告される。
具体例において、バーテックスバッファは、例えば、16キロバイトとすることができ、バッファは、各々が4キロバイトである4ページによってバックされる。この例においては、アプリケーションがバッファをマップする、例えば、第1のページに書込みを行う場合、プロセッサ212は、この情報をオペレーティングシステム202に報告し、特定のページ、例えば、第1のページは、オプティマイザ226に報告される。オプティマイザ226は、オペレーティングシステム202から受けた情報に基づいて、特定のページがターミナルサーバクライアントに送信されていないバーテックスを含むことを判定する。
図5を参照すると、図5は、動作516を含む図4の動作手順300の代替的実施形態を表しており、動作516は、特定のページをターミナルサーバクライアントに先に送信されたページのコピーに比較するステップと、及び、比較に基づいて、特定のページにおけるバーテックスデータの少なくとも一部分が変化したことを判定するステップとを示している。同一の又は他の実施形態において、1ページがいったん特定されると、それは、オプティマイザ226によってスキャンされる。例えば、オプティマイザ226は、論理プロセッサ212によって実行され、プロセッサ212は、アクセスされたページ又はページを、先にコピーされたページ又はページに比較する。例えば、オプティマイザ226は、クライアント201に送信されたか又は別の方法により入力された最新のデータのコピーに対してアクセスするる。オプティマイザ226は、クライアント201が現時点で有するデータの画面を有する。オプティマイザ226は実行され、アクセスされたページのコンテンツとページの古いコピーと間で比較が実行される。差異がある場合、ページ及び/又は変更されたバイトがクライアント201に送信される。
図6を参照すると、図6は、動作616を含む図5の動作手順の更なる改良点を示している。動作616は、比較動作が、単一命令マルチデータセットの命令(212)からの少なくとも1つの命令を用いて、特定のページをスキャンするステップをさらに含むことを示している。例えば、特定の実施形態において、論理的なプロセッサ212は、ストリーミング単一命令多重データ(SIMD)拡張子を有するx86ベースのプロセッサである。この例においては、少なくとも1つのSIMD命令は、チャンクにおける1ページのメモリを一度にスキャンし、古いページのバイトのコピーを、現在のページの現在のバイトに比較する。特定のSIMD実施形態において、プロセッサ212は、16バイトを一度にスキャンするよう構成される。16バイトのグループはSIMD置数器にロードされ、比較が、先の値、例えば、クライアントに送信された16バイトの値に対してなされ、当該グループ内のバイトが変化したかどうかの判定がなされる。代替実施例では、オプティマイザ226が、1グループのバイトが変化を含むことを一旦特定すると、プロセッサ212はオプティマイザ226を実行し、プロセッサ212は、一定のx86命令を使用して、当該グループにおける各バイト間における比較を駆動するように構成されて、当該グループにおいて変化した特定のバイト又はデータのバイトを特定する。
図7を参照すると、図7は、動作718を含む図6の動作手順の更なる改良点を示している。動作718は、SIMD命令を使用する比較動作が、変化が検知されるまで特定のページの始まりから終わりまでスキャンする動作、及び、変化が検知されるまで特定のページの終わりから始まりまでスキャンする動作をさらに含むことを示している。例えば、論理プロセッサ212はバイトのグループで特定されたページを介したステップを踏む。この実施例におけるオプティマイザ226は、変化が検知されるまで、バイトを検索するよう構成される。この典型実施形態において、アプリケーションは、大なるグループにおけるバーテックスを変更する傾向があるので、オプティマイザ226は、あらゆるバイトを隅々まで捜す代わりに変化のグループの始まり及び終わりを見出すまで、検索するよう構成される。この様にオプティマイザ226を構成することによって、オプティマイザ226は実際になされる変化量に比例して、差異を探すためのサイクルを要するのみであろう。すなわち、アプリケーションがバーテックスの大なるグループを修正する場合、プロセッサ212は、すべての変化を特定しようと試みる多くのサイクルを要する必要はないだろう。
この代替的な改良点において、プロセッサ212は、始め、例えば、ページの第1のアドレスから開始して、ページを介してステップを進め、グループにおけるバイトを先のグループのバイトと比較する。例えば、変化が検出される場合、すなわち、バーテックスを示す値が変化した場合、プロセッサ212は、停止し、値のメモリアドレスを記録し、変化が検知されるまで、ページの終わりから、例えば、ページの最後のアドレスから、始まりのアドレスまでスキャニングを開始する。この例において、プロセッサ212は、2つの変化した値の間のアドレスを、ターミナルサーバクライアント201に送信されていなかったバーテックスの部分として選択する。
図8を参照すると、図8は、付加的動作820を含む図7の動作手順の更なる改良点を示している。付加的動作820は、特定のページを用いて、ターミナルサーバクライアントに先に送信されたページのコピーに上書きするステップを示している。動作820を含む実施形態において、一度、オプティマイザ命令を実行するプロセッサ212が、ターミナルサーバクライアント201に先に送信されたバーテックスの部分を特定すると、プロセッサ212は、メモリ領域におけるページの古いコピーを上書きすることによって自身がスキャンしたページをキャッシュする。メモリ領域は、例えば、ターミナルサーバクライアント201に先に送信されたグラフィックスデータのコピーを記憶するよう構成されたRAM214である。例えば、キャッシュが4ページのバーテックスを含む場合、オプティマイザは、変化が第3ページで行われたことを決定し、オプティマイザ226は、ページを用いて、スキャンされた第3のページを上書きする。上書き動作の後に、オプティマイザ226は、クライアント201に送られたデータの現在の画面を有する。
図9を参照すると、図9は、図4の動作手順の更なる改良点を示している。当該動作手順は、付加的動作922を含む。当該動作922は、バーテックスの予備調整され、および判定された部分を圧縮するステップを示している。この改良において、ターミナルサーバクライアント201に先に送信されたバーテックスの部分が、事前調整された後に、バルクコンプレッサ240を使用して、それらは圧縮される。一般に、バルクコンプレッサ240は、駆動時にパターンを特定し、およびそれらを圧縮するよう構成された標準のコンプレッサである。バルクコンプレッサ240は、多様のデータ、例えば、GDI246、オーディオ、クリップボードデータ、USBデバイスによって作成されたビットマップ等のクライアント201に送信されたすべてのデータを圧縮するようカスタム化されるので、例えば、それは、あらゆる特定のタイプのデータを圧縮するよう構成されない。したがって、この例において、クライアントに送られたバーテックスは事前調整される。すなわち、バルクコンプレッサ240がより容易にパターンを特定することを可能にするフォーマットに設定される。
ここで、図10を参照すると、図10は、本開示の態様において使用される操作手順を示している。操作手順は、動作1000で始まって、動作1002、1004、1006を含む。動作1002に示されているように、処理手順は、各々が少なくとも1つのバーテックスによって定義された複数のプリミティブのバーテックスを記憶するステップを含む。図2を参照すると、バーテックスデータ、例えば、バーテックスを示す32ビット値がバーテックスバッファに、例えば、RAM214のメモリの1ページ以上及び/又はグラフィックプロセッサ218のメモリに記憶される。1実施例において、例えば、テレビゲーム、メディアプレーヤー、CADプログラム、ユーザインタフェース等のアプリケーションからのAPIコンストラクトを受信することに応答して、バーテックスデータは、例えば、API222によって作成される。すなわち、アプリケーションは、API222を1つ以上のコンストラクトに送り、API222は、何千ものプリミティブを作成し、1つ以上のバーテックスバッファにそれらを記憶する。
動作手順1004は、継続し、フロントコーダに対する移動によりバーテックスを暗号化するステップを示している。例えば、プロセッサ212はフロントコーダ230(MTFエンコーダ)に対する移行を示した命令を実行し、バーテックスを暗号化する。この例において、MTFエンコーダ230は、クライアントに送られるデータ要素を表すレベルの精度で暗号化するよう構成される。すなわち、32ビットフロートを使用する実施例において、MTFエンコーダ230は、32ビットを一度に暗号化するよう構成される。データ要素レベルで暗号化することによって、バーテックスの周知のプロパティが利用される。すなわち、MTFエンコーダ230があらゆるビットを暗号化する代わりに、実装者は、データが32ビットバーテックスを表すことを知っているので、それは、32ビット毎を暗号化するよう構成される。一般に、MTFエンコーダ230は値及びインデックスのリストを含む。MTFエンコーダ230がバーテックスを処理するので、最も一般的な値がリストの冒頭に現れる。MTFエンコーダ230は、(バーテックスより小なるビットで暗号化される)インデックス値を出力する。MTFエンコーダ230は、もっとも共通の値の間を越えて変動するので、バルクコンプレッサ204が容易にピックアップおよび圧縮の処理を実行することができる。
特定の実施例において、リストは4つのスロットを有するものの、これはスロットの設定可能な量である。MTCエンコーダ230は、137,16,128,137,137,128のバーテックス値を受信し。MTFエンコーダ230が第1の値「137」に直面するとき、リストは、インデックス値又はバーテックス値を発するかどうかを判定するためにチェックされる。この実施例において、リストは空であるので、137の値が、「0」のインデックススロットに記憶され、MTFエンコーダ230は値137を発生する。次の値「16」に直面すると、MTFエンコーダ230は、「0」のインデックススロットに16を記憶して、137を「1」のスロットに移行させ、値16を発生する。第3の値「128」に直面すると、リストのコンテンツは移行されて、128が発制する。第4の値に直面すると、MTFエンコーダ230は、137が既に2スロット内に存在することを受信し、137を発する代わりに、MTFエンコーダ230は、インデックス値「2」、及び、これがインデックス値であると特定する情報、例えば、ビットを発生する。この例において、インデックス値は、バーテックスより小なるビット数で暗号化されるので、バーテックス値を圧縮する。その上、この時点において、MTFエンコーダ230は、リストを交換し又は回転させるので、「O」インデックスに設けられた137と、128は、「2」のインデックススロットにおいて設けられるか、又は、回転される場合、「1」のインデックススロットにおいて設けられえる。実施例について続けると、より多くの同一の値が出現し始めるにつれて、MTFエンコーダ230は、インデックス値を発生することができるだろうし、共通の直面された値の間において、振動することができるであろう。言い換えれば、MTFエンコーダ230は、インデックス値を送信することによって、バーテックスを圧縮でき、およびバルクコンプレッサ240によってさらに圧縮されるラン(run)を送信することによってバーテックスを事前調節することができる。
図10の説明を続けると、動作1006は、暗号化されたバーテックスをターミナルサーバクライアントに送信するステップを示している。例えば、図2を参照すると、ネットワークインターフェースカード210は、暗号化されたバーテックス、例えば、MTFコーダ230によってターミナルサーバクライアント201に出力された出力を送信する。この例において、バーテックスを表すために送信されるのに必要なデータ量が低減されて、その結果、コマンドリモーティングを実行するのに必要な総バンド幅を低減せしめる。
ここで、図11を参照すると、図11は、図10の動作手順1000の代替的実施形態を表している。当該代替的実施形態は、動作1108及び1110を含む。動作1108に示されているように、実施形態において、操作手順は暗号化されたバーテックスを圧縮するステップを含む動作を含む。この改良を含む実施形態において、暗号化されたバーテックスは、バルクコンプレッサ240を使用して、圧縮される。この例において、バルクコンプレッサ240によって受信されたバーテックスは、一組の値の間において変動するインデックス値を含む。バルクコンプレッサ240は、ラン(run)を特定し、データを圧縮する。
さらに、また、図11は、メモリの特定のページにおけるバーテックスを、ターミナルサーバクライアントに先に送信されたバーテックスと比較するステップと、当該比較に基づいて、特定のページにおける複数のプリミティブのバーテックスを特定するステップとを示す動作1110を示している。例えば、MTFエンコーダ230が受信するバーテックスは、オプティマイザ226から受信される。この構成において、オプティマイザ226は、アプリケーションによってなされたバーテックスに対する変化を特定し、当該変化を更なる圧縮のためのMTFエンコーダ230へ送信するよう構成される。上で説明したものと同様に、オプティマイザ226は、論理プロセッサ212によって実行され、プロセッサ212は、1ページ又は複数のページを、当該1ページ又は当該複数のページと、以前のページのコピーとを比較する。オプティマイザ226が実行されると、アクセスのページと古いページのコピーの間で比較がなされる。差異がある場合、ページ及び/又は変化したバイトが、MTFコーダ230に送信される。
図12を参照すると、図12は、動作1110に対する改良である動作1212を示している。図に示されているように、動作1212は、バーテックスに対する変化が検知されるまで、特定のページの始まりから終わりまでスキャンするステップと、バーテックスに対する変化が検知されるまで、特定のページの終わりから始まりまでスキャンするステップとを示している。例えば、実施形態において、論理的なプロセッサ212は、バイトのグループにおける特定のページを通して進む。
図13を参照すると、図13は、図12の動作手順の更なる改良点を示す操作手順1314を示している。この実施形態において、特定のページをスキャンする命令は、単一命令マルチデータセットの命令からの少なくとも1つの命令を含む。例えば、論理的なプロセッサは、ストリーミング単一命令多重データ(SIMD)拡張子を有するx86ベースのプロセッサである。この場合、SIMD命令は、単一のプロセッサの命令を使用して、チャンクにおけるメモリのページを一度にスキャンする。
図14を参照すると、図14は、動作1400−1412を含む操作手順を示している。動作1400が、手順を開始する。そして、動作1402は、テクスチャ及びバーテックスを含むグラフィックデータをメモリに記憶するステップを示している。図2を参照すると、実施形態において、バーテックスデータ、例えば、バーテックスを示す32ビット値が、バーテックスバッファ、例えば、RAM214におけるメモリ又はグラフィックスプロセッサのメモリの1つ以上のページにおいて、記憶され、テクスチャ、例えば、表面法線等の表面プロパティが、RAM214のページに記憶される。1実施例において、バーテックスデータは、例えば、テレビゲーム、メディアプレーヤー、CADプログラム、ユーザインタフェース等のアプリケーションからのコンストラクトを受信することに応答して、例えば、API222によって作成される。API222を介して、アプリケーションはバーテックス又はテクスチャを用いて、メモリの1ページ以上をマップする。言い換えれば、アプリケーションは、API222の1つ以上の関数を呼び出して、複数のバーテックスをメモリに書き込む。当該メモリは、ドライバーによって使用されて、グラフィックプロセッサに命令して、複数のプリミティブを作成する。同様に、アプリケーションは、コンストラクトをAPI222に送信する。そして、API222は、テクスチャを、テクスチャと伴にメモリで記憶されるプリミティブにマップするコマンドを生成する。
図14の説明を続けると、動作1404は、メモリに記憶されたグラフィックスデータとターミナルサーバクライアントに先に送信されたグラフィックスデータとの比較に基づいて、メモリにおけるグラフィックスデータの少なくとも一部分が変化したことを判定するステップを示している。例えば、実施形態において、API222はバーテックスバッファ、例えば、メモリのページをマップし、テクスチャをメモリに記憶する。オプティマイザ226は、先のマップ動作以後にアプリケーションによって記憶されたデータが変化したかどうかを判定するために、論理プロセッサ212によって実行される。例えば、オプティマイザ226は、クライアント201に送信されたか又は別の方法で送られた最新のデータのコピーに対するアクセスを行う。オプティマイザ226は、クライアント201が現時点で有するデータを表示する。
オプティマイザ226は、テクスチャをクライアント201に送信されたテクスチャと付加的に比較して、データが変化したかどうかを判定する。例えば、テクスチャは本質的にはピクセル値、例えば、ビットマップのアレイである。オプティマイザ226は、テクスチャを記憶するメモリのページをスキャンして、テクスチャが変化したかどうかを判定する。プロセッサ212が、テクスチャ又はタッチされたテクスチャの一部を含むメモリの1ページがアクセスされたことを検出した場合、オプティマイザ226は、ページをクライアント201に送信するよう判定する。別の例示的実施形態において、オプティマイザ226は、タッチされたページのコンテンツをスキャンして、どのバイトが変化したかを特定する。この例において、ページの始め又は終りから始める代わりに、オプティマイザ226は、中間のアドレスから開始してページをスキャンし、ページを、長方形等、外へ拡大する。
オプティマイザ226が実行されて、アクセスされたページのコンテンツとページの古いコピーとの間で比較がなされる。差異が存在する場合、ページ及び/又は変化したバイトは、クライアント201に送信される。特定の実施形態において、プロセッサ212は、SIMD命令を使用して、バイト又はバイトのグループを比較しながら、ページを進める。
図14の説明を続けると、動作1406は、変化したグラフィックスデータの少なくとも一部分を予備調整するステップを示している。例えば、本開示の実施形態において、グラフィックスデータは圧縮されるよう事前調整される。この例において、値、例えば、バーテックス及び/又はテクスチャのビットを表すは、異なる形態に変換されえるので、バルクコンプレッサ240は、より容易にパターンを特定し、その結果、圧縮のより多くの機会をバルクコンプレッサに与える。
図14の説明を続けると、動作1408は、変化したグラフィックスデータの少なくとも一部分を圧縮するステップを示している。この例において、グラフィックスデータは、例えば、バルクコンプレッサ240を使用して、圧縮される。
図14の説明を続けると、動作1410は、変化したグラフィックスデータをターミナルサーバクライアントに送信するステップを示している。例えば、図2を参照すると、ネットワークインターフェースカード210は、変化したグラフィックスデータをターミナルサーバクライアント(201)に送信する。この例においては、ネットワーク上で送信されるのに必要なグラフィックスデータの量が、低減されたので、コマンドリモーティングを実行するのに必要な総バンド幅が低減された。
ここで、図15を参照すると、図15は、図14の動作手順300の代替的実施形態を表している。当該代替的実施形態は、動作1512,1514,1516及び1518を含む。動作1512を参照すると、動作1512は、動作1406に改良点、すなわち、フロントエンコーダへの移行を、変化したグラフィックスデータの一部分におけるバーテックスに適用するステップを示している。動作1004と同様に、実施形態において、プロセッサ212はフロントコーダ230への移行を示す命令を実行し、バーテックス、テクスチャの値、及び/又は、テクスチャをプリミティブにマップするためのコマンドを暗号化する。この例において、MTFエンコーダ230は、グラフィックスデータの周知のプロパティを利用するために、データ要素レベルで暗号化するよう構成される。
図15の説明を続けると、動作1514は動作1408の改良を示しており、メッシュコンプレッサを適用して、変化したグラフィックスデータの一部分におけるバーテックス少なくとも一部を圧縮するステップを示している。例えば、実施形態において、API222は、アプリケーションによって設定されるフラグを含むように構成される。当該アプリケーションは、特定のバーテックスデータが、メッシュ、例えば、3Dの対象を形成する接続プリミティブの集合の一部であることを示す。この場合、同一の又は異なるフラグが、非可逆圧縮技術がメッシュに使用されるAPI222へ示すのに使用される。この例において、フラグが設定される場合、フラグに関連付けられたバーテックスは、メッシュコンプレッサ236を通過し、そして、バーテックスは圧縮される。
1実施例において、メッシュオプティマイザはクライアント201上で実行され、圧縮されたバーテックスを再構築するのに使用される。1つのかかる例示的メッシュオプティマイザはクライント201上で実行して、不可逆圧縮動作において失われたバーテックスを再作成する。
動作1516に変わって、実施形態において、動作1408は、イメージコンプレッサを、変化したグラフィックスデータの一部におけるテクスチャデータに対して利用することによって、さらに改良される。例えば、複数のイメージコンプレッサのうちの1つが、テクスチャデータを圧縮するのに使用される。テクスチャが本質的にはビットマップイメージであるので、特定の実施形態において、異なるコンプレッサが、テクスチャを送信するのに必要とされるバンド幅の量を低減するのに使用される。特定の実施形態において、コンプレッサ232は、テクスチャに依存し、かつ、アプリケーションがテクスチャをどのように使用するのかに依存して、可逆的又は非可逆的であり得る。この実施形態において、API222は、アプリケーションによって設定されるフラグを示して、不可逆圧縮がメモリの特定のページにおけるテクスチャにとって許容できることを示す。別の方法においては、可逆コンプレッサが、テクスチャを圧縮するのに使用される。この例において、適切なコンプレッサが、利用可能なCPUサイクル及びフラグの選択に基づいて、動的に選択される。いくつかの例示的コンプレッサは、ランレングスエンコーダ、JPEGコンプレッサ、又はDirectXコンプレッサを含むがこれらに限定されない。
動作1518を参照すると、動作1518は、エスケープによって、テキストに対するアプリケーションコントラストを受信するステップと、コンストラクトをターミナルサーバクライアントに送信するステップと、を示す。一般に、コンストラクトを処理することから生ずる多数のAPIプリミティブの代わりにAPIコンストラクトを送信するのにより狭小なバンド幅を要する。特定の場合において、ハイレベルなエスケープは、API222に付加される。API222は、Direct2Dテキストを形成するプリミティブ等のリモートプリミティブに対する能力を改善する。一般に、ワードプロセッサ等のD2DアプリケーションがPI222にコンストラクトを送り、文字「A」を作成するとき、API222はコンストラクトからプリミティブを作成し、それらをバーテックスバッファに記憶する。API222に送られるコンストラクトは、「A」を表しているものの、「A」を特定する情報は、API222によって作成されたバーテックスにおいて失われる。したがって、この例示的実施形態において、API222がかかるコンストラクトを受信するとき、エスケープはコンストラクトをキャプチャし、かつ、NIC210を介して、それをクライアント210に送信する。クライアント201は、この場合、コンストラクトを受信し、それを用いてバーテックスバッファを再構築する。同一の又は他の実施形態において、コンストラクトは、先に開示された技術のうちの1つを用いて、圧縮され又は事前調整される。
上記の詳細な説明は、実施例及び/又は動作図を介して、システム及び/又は処理の様々な実施形態について説明してきた。一つ以上の機能及び/又は動作を含むかかるブロック図及び/又は実施例の範囲の範囲において、当業者には、かかるブロック図又は実施例における各機能及び/又は動作が、広範囲のハードウェア、ソフトウェア、ファームウェア、又は、これらのあらゆる組み合わせによって、個別的に及び/又は集合的に実装されることが理解できるであろう。
本明細書に記載された議論中の話題の件の特定の態様を示して、説明したが、当業者には、本明細書に記載された発明とそのより広範な態様から出発することなく、本明細書における教示に基づいて、変更と修正が可能であることが明らかであろう。したがって、添付された特許請求の範囲は、本明細書に開示された発明の趣旨及び範囲に含まれるような変更及び修正を、それら範囲内において、包含するであろう。

Claims (17)

  1. クライアントに接続されるコンピュータにおいて実行される方法であって、
    複数のプリミティブのバーテックスデータ及びテクスチャデータを含むグラフィックスデータメモリに記憶するステップと、
    前記メモリに記憶した前記グラフィックスデータと前記クライアントに前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定し、前記バーテックスデータの少なくとも一部分が前記クライアントに送信されていないと判定するステップと、
    前記の変化したグラフィックスデータの一部分を圧縮するステップと、
    前記の圧縮したグラフィックスデータの一部分を前記クライアントに送信するステップと
    を含み、
    前記の圧縮に先立って、前記グラフィックスデータに対してフラグを設定することであって、前記グラフィックスデータの前記バーテックスデータに非可逆圧縮が許容されるかどうか、又は前記メモリ内の特定のページにおけるテクスチャデータに非可逆圧縮が許容されるかどうかを示すフラグを設定し、
    前記フラグに基づいて、前記の圧縮を実行するのに適切なコンプレッサを選択する、方法。
  2. 前記バーテックスデータの少なくとも一部分が前記クライアントに送信されていないと判定することに先立って、ユーザースペースアプリケーションが所定の範囲より大きい範囲のメモリアドレス要求していると判定することをさらに含む、請求項1に記載の方法。
  3. 前記の圧縮したグラフィックスデータの一部分を前記クライアントに送信するステップは、前記バーテックスデータの前記判定された部分において2つの連続するバーテックス毎の間で判定されたデルタを送信することをさらに含む、請求項1に記載の方法。
  4. 前記コンピュータのオペレーティングシステムによって、ユーザースペースアプリケーションが複数のページを含む前記メモリにアクセスしたと判定するステップと、
    前記オペレーティングシステムによって、前記ユーザースペースアプリケーションが前記複数のページの特定のページにアクセスしたと判定するステップと
    をさらに含む、請求項1に記載の方法。
  5. 前記メモリに記憶した前記グラフィックスデータと前記クライアントに前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定することは、
    前記特定のページを、前記クライアントにに送信された前記ページのコピーと比較することと、
    前記比較に基づいて、前記特定のページにおける前記バーテックスデータの少なくとも一部分が変化したと判定すること
    を含む請求項に記載の方法。
  6. 前記特定のページを、前記クライアントにに送信された前記ページの前記コピーと比較することは、単一命令マルチデータセットの命令からの少なくとも1つの命令を用いて、前記特定のページをスキャンすることをさらに含む請求項に記載の方法。
  7. 前記特定のページをスキャンすることは、
    変化が検知されるまで、前記特定のページの始まりから終わりまでスキャンすることと、
    変化が検知されるまで、前記特定のページの終わりから始まりまでスキャンすること
    をさらに含む請求項に記載の方法。
  8. 前記特定のページによって、前記クライアントにに送信されたページのコピー上書きするステップをさらに含む、請求項に記載の方法。
  9. クライアントに接続されるコンピュータに、
    数のプリミティブのバーテックスデータ及びテクスチャデータを含むグラフィックスデータ、メモリに記憶するステップと、
    前記メモリに記憶した前記グラフィックスデータと前記クライアントに以前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定し、前記バーテックスデータの少なくとも一部分が前記クライアントに送信されていないと判定するステップと、
    前記の変化したグラフィックスデータの一部分を圧縮するステップと、
    前記の圧縮したグラフィックスデータの一部分前記クライアントに送信するステップ
    を含む処理を実行させ、
    前記の圧縮に先立って、前記グラフィックスデータに対してフラグを設定させることであって、前記グラフィックスデータの前記バーテックスデータに非可逆圧縮が許容されるかどうか、又は前記メモリ内の特定のページにおけるテクスチャデータに非可逆圧縮が許容されるかどうかを示すフラグを設定させ、
    前記フラグに基づいて、前記の圧縮を実行するのに適切なコンプレッサを選択させる、コンピュータプログラム
  10. 前記メモリに記憶した前記グラフィックスデータと前記クライアントに前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定することは、
    前記メモリの特定のページにおけるバーテックスデータを、前記クライアントにに送信されたバーテックスデータと比較することと、
    前記比較に基づいて、前記特定のページにおける前記バーテックスデータの少なくとも一部分が変化したと判定すること
    を含むことを特徴とする請求項に記載のコンピュータプログラム
  11. 前記メモリの特定のページにおけるバーテックスデータを、前記クライアントにに送信したバーテックスデータと比較することは、
    バーテックスに対する変化が検知されるまで、前記特定のページの始まりから終わりまでスキャンすることと、
    バーテックスに対する変化が検知されるまで、前記特定のページの終わりから始まりまでスキャンすること
    をさらに含む請求項10に記載のコンピュータプログラム
  12. 前記特定のページをスキャンすることは、単一命令マルチデータセットの命令からの少なくとも1つの命令を用いて前記特定のページをスキャンすることを含む請求項11に記載のコンピュータプログラム
  13. テクスチャデータ及びバーテックスデータを含むグラフィックデータを、メモリに記憶する手段と、
    前記メモリに記憶された前記グラフィックスデータと、クライアントにに送信されたグラフィックスデータとの比較に基づいて、前記メモリにおける前記グラフィックスデータの少なくとも一部分が変化したことを判定する手段と、
    前記の変化したグラフィックスデータの少なくとも一部分を予備調整する手段と、
    前記の変化したグラフィックスデータの少なくとも一部分を圧縮する手段と、
    前記の圧縮したグラフィックスデータの少なくとも一部分前記クライアントに送信する手段
    を含み、前記の圧縮に先立って、前記グラフィックスデータに対してフラグを設定することであって、前記グラフィックスデータの前記バーテックスデータに非可逆圧縮が許容されるかどうか、又は前記メモリ内の特定のページにおけるテクスチャデータに非可逆圧縮が許容されるかどうかを示すフラグを設定し、
    前記フラグに基づいて、前記の圧縮を実行するのに適切なコンプレッサを選択するように構成される、コンピュータシステム。
  14. 前記変化したグラフィックスデータの少なくとも一部分を予備調整する手段は、
    フロントエンコーダへの移行を、前記の変化したグラフィックスデータの少なくとも一部分における前記バーテックスデータに適用する手段をさらに含む、請求項13に記載のコンピュータシステム。
  15. 前記変化したグラフィックスデータの少なくとも一部分を圧縮する手段は、メッシュコンプレッサを適用して、前記の変化したグラフィックスデータの少なくとも一部分における前記バーテックスデータの少なくとも一部分を圧縮する手段をさらに含む請求項13に記載のコンピュータシステム。
  16. 前記の変化したグラフィックスデータの少なくとも一部分を圧縮する手段は、イメージコンプレッサを、前記の変化したグラフィックスデータの少なくとも一部分におけるテクスチャデータに対して適用する手段をさらに含む請求項13に記載のコンピュータシステム。
  17. エスケープによって、テキストに対するアプリケーションコントラストを受信する手段と、
    前記コンストラクトを前記クライアントに送信する手段
    をさらに含む請求項13に記載のコンピュータシステム。
JP2011540740A 2008-12-08 2009-10-30 改良されたコマンドリモーティング技術 Active JP5536093B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/330,330 US9639963B2 (en) 2008-12-08 2008-12-08 Command remoting techniques
US12/330,330 2008-12-08
PCT/US2009/062750 WO2010077423A1 (en) 2008-12-08 2009-10-30 Improved command remoting techniques

Publications (3)

Publication Number Publication Date
JP2012511219A JP2012511219A (ja) 2012-05-17
JP2012511219A5 JP2012511219A5 (ja) 2012-12-06
JP5536093B2 true JP5536093B2 (ja) 2014-07-02

Family

ID=42230549

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011540740A Active JP5536093B2 (ja) 2008-12-08 2009-10-30 改良されたコマンドリモーティング技術

Country Status (5)

Country Link
US (1) US9639963B2 (ja)
EP (1) EP2377040A4 (ja)
JP (1) JP5536093B2 (ja)
CN (1) CN102239484B (ja)
WO (1) WO2010077423A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8811374B2 (en) * 2008-09-25 2014-08-19 Nokia Corporation Synchronization for device-to-device communication
US8654134B2 (en) 2008-12-08 2014-02-18 Microsoft Corporation Command remoting
US10915984B2 (en) * 2014-01-21 2021-02-09 Elektraglide Ltd Method and system for interactive graphics streaming
US10296713B2 (en) * 2015-12-29 2019-05-21 Tomtec Imaging Systems Gmbh Method and system for reviewing medical study data

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6072496A (en) * 1998-06-08 2000-06-06 Microsoft Corporation Method and system for capturing and representing 3D geometry, color and shading of facial expressions and other animated objects
US6594701B1 (en) * 1998-08-04 2003-07-15 Microsoft Corporation Credit-based methods and systems for controlling data flow between a sender and a receiver with reduced copying of data
US6271858B1 (en) * 1998-10-16 2001-08-07 Microsoft Corporation Incremental update for dynamic/animated textures on three-dimensional models
US6978312B2 (en) * 1998-12-18 2005-12-20 Microsoft Corporation Adaptive flow control protocol
JP2000222598A (ja) 1999-02-03 2000-08-11 Mitsubishi Electric Corp データ転送装置及びデータ転送方法
US7240283B1 (en) * 2000-11-10 2007-07-03 Narasimha Rao Paila Data transmission and rendering techniques implemented over a client-server system
US6593925B1 (en) * 2000-06-22 2003-07-15 Microsoft Corporation Parameterized animation compression methods and arrangements
JP2002008060A (ja) * 2000-06-23 2002-01-11 Hitachi Ltd データ処理方法、記録媒体及びデータ処理装置
US7538764B2 (en) * 2001-01-05 2009-05-26 Interuniversitair Micro-Elektronica Centrum (Imec) System and method to obtain surface structures of multi-dimensional objects, and to represent those surface structures for animation, transmission and display
US7275102B2 (en) * 2001-01-22 2007-09-25 Sun Microsystems, Inc. Trust mechanisms for a peer-to-peer network computing platform
EP1255227A1 (en) * 2001-04-27 2002-11-06 STMicroelectronics Limited Vertices index processor
GB2377604B (en) 2001-07-09 2005-09-28 Superscape Plc Mesh compression
US6747653B2 (en) * 2001-12-31 2004-06-08 Intel Corporation Efficient object storage for zone rendering
AUPS028702A0 (en) * 2002-02-01 2002-02-28 Canon Kabushiki Kaisha Efficient display update from changing object graphics
GB2416100B (en) * 2002-03-26 2006-04-12 Imagination Tech Ltd 3D computer graphics rendering system
US6952758B2 (en) * 2002-07-31 2005-10-04 International Business Machines Corporation Method and system for providing consistent data modification information to clients in a storage system
US20050033988A1 (en) * 2002-10-18 2005-02-10 Neoscale Systems, Inc. Method and system for transparent encryption and authentication of file data protocols over internet protocol
US20050243087A1 (en) * 2004-04-30 2005-11-03 Shmuel Aharon GPU-based Finite Element
US7518614B2 (en) * 2004-08-23 2009-04-14 Hewlett-Packard Development Company, L.P. Method and apparatus for capturing and transmitting screen images
US7590750B2 (en) * 2004-09-10 2009-09-15 Microsoft Corporation Systems and methods for multimedia remoting over terminal server connections
JP4745839B2 (ja) 2005-01-28 2011-08-10 富士通株式会社 データ転送システム、送信プログラム、受信プログラム及びデータ送信方法
US7653749B2 (en) * 2005-08-31 2010-01-26 Microsoft Corporation Remote protocol support for communication of large objects in arbitrary format
US8112513B2 (en) * 2005-11-30 2012-02-07 Microsoft Corporation Multi-user display proxy server
CN101031071A (zh) 2006-02-28 2007-09-05 中兴通讯股份有限公司 一种移动视频监控系统及方法
CN101211258B (zh) * 2006-12-28 2010-05-19 联想(北京)有限公司 完整获取GDI和DirectX数据的方法
JP2009044328A (ja) * 2007-08-07 2009-02-26 Seiko Epson Corp 会議システム、サーバ、画像表示方法、コンピュータプログラム及び記録媒体
CN100576921C (zh) 2008-01-14 2009-12-30 浙江大学 基于块分类的混合图像压缩方法

Also Published As

Publication number Publication date
WO2010077423A1 (en) 2010-07-08
CN102239484A (zh) 2011-11-09
US20100141650A1 (en) 2010-06-10
JP2012511219A (ja) 2012-05-17
EP2377040A4 (en) 2017-06-07
EP2377040A1 (en) 2011-10-19
CN102239484B (zh) 2015-05-13
US9639963B2 (en) 2017-05-02

Similar Documents

Publication Publication Date Title
US10002403B2 (en) Command remoting
WO2020220953A1 (zh) 用于图形渲染的方法及装置
EP2293192B1 (en) Methods and systems for remoting three dimensional graphics
US20170323418A1 (en) Virtualized gpu in a virtual machine environment
US9344528B2 (en) Data compressor using hints
US20110047476A1 (en) Image-based remote access system
US9235452B2 (en) Graphics remoting using augmentation data
US20140139513A1 (en) Method and apparatus for enhanced processing of three dimensional (3d) graphics data
JP2008526107A (ja) リモートコンピューティングにおけるグラフィクスプロセッサの使用
US20220004405A1 (en) 3D API Redirection for Virtual Desktop Infrastructure
JP5536093B2 (ja) 改良されたコマンドリモーティング技術
CN114904274A (zh) 云游戏的画面渲染方法、装置、电子设备以及存储介质
US20230206380A1 (en) Optimizing partial writes to compressed blocks
US11037329B2 (en) Encoding positional coordinates based on multiple channel color values
US20240177352A1 (en) Data processing method and apparatus, computing device, and system

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121022

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121022

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130712

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130719

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131126

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140325

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140423

R150 Certificate of patent or registration of utility model

Ref document number: 5536093

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250