经改进的命令遥控技术的制作方法

文档序号:6595767阅读:229来源:国知局
专利名称:经改进的命令遥控技术的制作方法
经改进的命令遥控技术
背景技术
终端服务提供用于允许访问存储在服务器上的应用程序和数据的技术。用户输入通过网络连接被发送给服务器,并且音频和图形被从服务器发送给客户机。这些年来,已经开发出用于遥控图形的不同技术,比如命令级遥控和位图级遥控。一般认为位图级遥控是这两种技术中较容易实现的。在位图遥控中,图形处理在终端服务器上执行,并且例如形成位图的像素值阵列之类的最终图像被压缩并且通过网络被发送给客户机。该技术需要具有足够计算能力来为一个或多个客户机呈现图像的服务
ο另一方面,命令级遥控将图形处理推卸给客户机。可以被驱动程序处理并且被图形处理器执行的例如顶点之类的图元可以被捕获并且被发送给客户机。这降低了遥控图形所需要的处理能力,但是传输表示3D图元的数据比使用位图遥控需要更大的带宽。因此, 用于减小实现命令级遥控所需要的带宽的技术是合乎需要的。

发明内容
本发明的一个示例实施例描述了一种方法。在该示例中,该方法包括但不限于,在存储器中存储多个图元的顶点;确定所述图元中的至少一部分没有被发送至终端服务器客户机;以及将所确定的该部分顶点发送至终端服务器客户机。除前述的之外,在构成本发明的一部分的权利要求书、附图、以及文本中描述了其他方面。本发明的一个示例实施例描述了一种方法。在该示例中,该方法包括但不限于,存储多个图元的顶点,每一图元由至少一个顶点定义;使用前移编码器对顶点进行编码;以及将经编码的顶点发送至终端服务器客户机。除前述的之外,在构成本发明的一部分的权利要求书、附图、以及文本中描述了其他方面。本发明的一个示例实施例描述了一种方法。在该示例中,该方法包括但不限于,将图形数据存储在存储器中,所述图形数据包括纹理和顶点;基于存储于存储器的图形数据与先前被发送至终端服务器客户机的图形数据的比较,确定存储于存储器的图形数据的至少一部分已改变;预处理已改变的至少一部分图形数据;以及将已改变的图形数据发送至终端服务器客户机。除前述的之外,在构成本发明的一部分的权利要求书、附图、以及文本中描述了其他方面。本领域技术人员将理解,本发明的一个或多个方面可包括但不限于用于实现本发明的本文所述方面的电路和/或编程;该电路和/或编程实质上可以是配置成实现本文所述方面的硬件、软件和/或固件的任何组合,这取决于系统设计者的设计选择。以上是发明内容,并因此必然包含细节的简化、一般化及省略。本领域技术人员将明白,本概述只是说明性的并且决不旨在是限制性的。


图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的计算机系统在一些实施例中可实现图2的服务器200和客户机201。在这些示例实施例中,服务器200和客户机201可以包括图1中描述的组件中的一些或全部以及被配置为实例化本发明的具体方面的电路。贯穿本发明使用的术语电路例如可包括诸如硬件中断控制器、硬盘驱动器、网络适配器、图形处理器、基于硬件的视频/音频编解码器之类的硬件组件、以及用于操作这些硬件的固件/软件。在相同实施例或其他实施例中,电路可包括配置为通过固件或固定开关执行功能的微处理器。在相同或其他示例性实施例中,电路可以包括一个或多个逻辑处理器,例如多核通用处理单元的一个或多个核。本示例中的逻辑处理器可以由软件指令来配置,软件指令体现为可用于执行从例如RAM、R0M、固件和/或虚拟存储器之类的存储器加载的功能的逻辑。在电路包括硬件和软件的组合的示例性实施例中,实现者可以编写体现为逻辑的源代码,该源代码随后被编译成可由逻辑处理器执行的机器可读代码。因为本领域技术人员能够理解,现有技术已经发展到硬件、软件或硬件/软件的组合之间几乎没有差别的地步,因此选择硬件还是软件来实现特定功能只是一个设计选择。更具体地,本领域技术人员可以明白软件进程可被变换成等价的硬件结构,并且硬件结构本身可被变换成等价的软件进程。因此,对于硬件实现还是软件实现的选择是一个设计选择并留给实现者。现在参照图1,描绘了示例性通用计算系统。该通用计算系统可包括常规的计算机20等,它包括通用处理单元21、系统存储器22和将包括系统存储器在内的各种系统组件耦合到处理单元21的系统总线23。系统总线23可以是若干类型的总线结构中的任一种,包括使用各种总线体系结构中的任一种的存储器总线或存储器控制器、外围总线,以及局部总线。系统存储器包括只读存储器(ROM) M和随机存取存储器(RAM) 25。基本输入/ 输出系统沈出10幻被存储在ROM M中,包含了诸如在启动期间帮助在计算机20内的元件
5之间传输信息的基本例程。计算机20还可以包括用于读写硬盘(未示出)的硬盘驱动器 27、用于读写可移动磁盘四的磁盘驱动器观,以及用于读写诸如⑶ROM或其他光学介质之类的可移动光盘31的光盘驱动器30。在一些示例性实施例中,实施本发明各方面的计算机可执行指令可以存储在ROM 24、硬盘(未示出)、RAM 25、可移动磁盘四、光盘31和/或通用处理单元21的高速缓存中。硬盘驱动器27、磁盘驱动器28,以及光驱动器30分别通过硬盘驱动器接口 32、磁盘驱动器接口 33,以及光驱动器接口 34连接到系统总线23。驱动器以及它们相关联的计算机可读介质为计算机20提供了对计算机可读指令、数据结构、 程序模块,及其他数据的非易失性存储。虽然这里描述的示例性环境采用硬盘、可移动磁盘 29和可移动光盘31,但本领域技术人员应当理解,在该示例性操作环境中也能使用可存储能由计算机访问的数据的其它类型计算机可读介质,如盒式磁带、闪存卡、数字视频盘、柏努利(Bernoulli)盒式磁带、随机存取存储器(RAM)、只读存储器(ROM)等。可以有若干个程序模块存储在硬盘、磁盘四、光盘31、ROM 24,和/或RAM 25上, 包括操作系统35、一个或多个应用程序36、其他程序模块37、以及程序数据38。用户可以通过诸如键盘40和定点设备42之类的输入设备向计算机20中输入命令和信息。其他输入设备(未示出)可以包括麦克风、游戏杆、游戏手柄、圆盘式卫星天线、扫描仪等等。这些和其它输入设备常通过耦合到系统总线的串行端口接口 46连接到通用处理单元21,但也可通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。显示器47或其他类型的显示设备也可以通过诸如视频适配器48之类的接口,连接到系统总线23。除了显示器 47之外,计算机通常还包括其他外围输出设备(未示出),如扬声器和打印机。图1的示例性系统也包括主机适配器55、小型计算机系统接口(SCSI)总线56,以及连接到SCSI总线 56的外部存储设备62。计算机20可以使用到一个或多个远程计算机(如远程计算机49)的逻辑连接来在联网环境中操作。远程计算机49可以是另一计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且通常可包括上文参考计算机20所描述的许多或全部元件,虽然在图1中只示出了存储设备50。图1中所描绘的逻辑连接可包括局域网(LAN) 51和广域网 (WAN) 52。这样的联网环境在办公室、企业范围的计算机网络、内部网和因特网中是普遍现象。当用于LAN网络环境中时,计算机20可通过网络接口或适配器53连接到LAN 51。 当用于WAN网络环境中时,计算机20通常可包括调制解调器M,或用于通过广域网52 (如通过因特网)建立通信的其他装置。调制解调器54——其可以是内置的或外置的,可通过串行端口接口 46连接到系统总线23。在联网环境中,参考计算机20所描述的程序模块,或其部分,可以存储在远程存储器存储设备中。可以理解,所示出的网络连接只是示例性的, 也可以使用用于在计算机之间建立通信链路的其他装置。此外,尽管可以预想本发明的很多实施例特别适合于计算机化系统,但是,本文中没有任何表述旨在将本发明限制于这样的实施例。现在参考图2,其总体上示出了可用在各实施例中的包括终端服务会话204的示例操作系统202。本领域技术人员可明白,该示例操作系统200可由如图1的计算机20之类的计算机来实现。如图所示,可提供底层硬件存储设备208,例如硬盘驱动器、网络接口卡 (NIC) 210、图形处理单元218、至少一个逻辑处理器212以及RAM214。
在各实施例中,终端服务可以被提供给诸如客户机201之类的至少一个客户机 (尽管描绘了一个客户机,但终端服务可被提供给更多客户机)。示例客户机201可以包括由硬件来实现的计算机终端,其中该硬件被配置为将用户输入定向到终端服务器会话并显示该会话生成的用户界面信息。在另一实施例中,客户机201可以由包括与图1的计算机 20的元件类似的元件的计算机来实现。在该实施例中,客户机201可包括被配置为实现操作系统的电路以及被配置为模拟终端的功能(例如,可由一个或多个逻辑处理器212执行的远程桌面客户机应用)的电路。本领域技术人员能够理解,被配置为实现操作系统202 的电路也可以包括被配置为模拟终端的电路。操作系统202可包括可将处理器212配置来生成会话的指令。简言之,会话一般可以包括用户模式进程应用程序206,比如视频游戏、文字处理程序、web浏览器、用户界面 (窗口、对话框、桌面等等)、媒体播放器等等。应用程序206可以由例如执行进程等可提供用于执行应用程序206和与内核234交互的平台的各种子系统来实施。一个这样的子系统 (例如,指令)是环境子系统对4,这将在下面更详细地解释。会话可包括外壳(shell)和用户界面(其由用户界面进程来呈现)、跟踪该桌面内的鼠标移动的子系统、将对图标的鼠标点击翻译成实现程序实例的命令的子系统等等。一般而言,例如在操作系统202通过网络连接从诸如客户机201之类的客户机接收连接请求时,会话可在逐用户的基础上生成。一般而言,连接请求可以首先由例如远程桌面协议栈(RDP)之类的传输栈来处理。传输栈可包括可将处理器212配置为监听某个端口上的连接消息并将这些消息转发给引擎212的指令。当生成会话时,传输逻辑可以被执行并且可以为每个会话实例化远程桌面协议栈实例,比如栈实例214。一般而言,远程桌面协议栈实例214可被配置为将输出路由到客户机201并将客户机输入路由到环境子系统M4。在会话创建过程期间,会话管理器216可以被逻辑处理器212执行并且处理器212 可以例如通过如下方式初始化和管理每个会话生成会话空间的会话标识符;将该会话标识符添加到表;给会话空间分配存储器;以及在被分配给会话空间的存储器中生成系统环境变量和子系统进程的实例。如图所示,在一实施例中,应用程序206可以在会话204的用户模式内执行,并且可以使用诸如由图形显示接口(⑶1)246生成的位图、3D图形之类的两种不同的呈现技术, 或者二者的组合。⑶I 246可用于生成2D图像,比如文本和窗口。⑶I 246可以与可响应于从应用程序206接收到位阵列而生成位像的显示驱动程序相关联。例如,应用可以发出可以被显示驱动程序处理并且用于呈现表示颜色值的像素的阵列。如图所示,遥控组件220可捕捉⑶I 246输出的位图并可将其发送至栈实例214。继续图2的描述,应用程序206可另外利用由多个硬件供应商之一制造的图形处理单元所支持的3D图形。由于不同的硬件供应商使用不同的体系结构和命令,因此可以制定一种如下的图形驱动程序体系结构该图形驱动程序体系结构将硬件抽象为使得开发者可以编写与任何图形卡一起工作的单个应用程序。在该示例中,该应用程序可以经由诸如来自微软@的011^(^30之类的应用程序编程接口 222 (API)来访问客户机201的图形处理单元的特征。API原语可被发送至客户机201 ;由客户机的驱动程序翻译成可被客户机的 GPU执行的命令;以及被该客户机的GPU执行。一般地,API 222输出图形数据,例如值、顶点(表示三角形顶点的32位值)和/或纹理,例如比如对象的表面的数字表示,该对象可具有该对象有多么透明和反射率多大之类的3D属性。一般地,纹理可视为可应用于图元的位图。即,应用程序可创建看起来像一棵树的对象,并对这棵树应用纹理以使其看起来具有树皮。另一示例可包括对形成小山的一组3D图元应用草地、泥土和岩石。图形数据可由API 222产生并存储在缓冲区中,例如存储器的页,而纹理可从艺术文件加载并存储在存储器的其他页。当一应用程序执行时,它可以请求存储器来用作顶点缓冲区以及请求存储器用来储存顶点。该应用程序也可声明它将如何使用存储器,例如它将在缓冲区中存储何种类型的数据。例如,诸如视频游戏之类的应用程序可以使用动态顶点缓冲区来存储用于化身的顶点,并且可以使用静态缓冲区来存储诸如建筑物数据之类的将不常改变的数据。在终端服务器实施例中,遥控组件224可被用来捕捉API 222输出的图形数据,并且多种技术可被用来减少通过网络发送至客户机201的图形数据量,例如优化器226、增量预处理器228、前移编码器230、一个或多个纹理压缩器232、网格压缩器236,以及一个或多个出口 238。在各示例实施例中,各组件226-238可由可被一个或多个逻辑处理器执行的指令来实现。同样,尽管组件226-238示作分开的,在一个或多个实施例中,这些组件可以是单个软件组件。另外,在一个或多个实施例中,每一组件2沈-338可在应用程序206的一个或多个线程或栈实例214 (未示出)上执行。此外,尽管某些部件并联地示出,本发明并不限于这样一种安排,而且在其他实施例中,一个或多个组件可以和其他组件串联。由于图形数据是由API 222产生的,取决于图形数据的类型,它可由一个或多个之前的组件中来处理, 然后被发送至批量(bulk)压缩器M0。批量压缩器240可被配置为压缩图形数据,然后压缩的数据可经由NIC 210被发送至客户机201。以下是描绘各过程的实现的一系列流程图。为便于理解,流程图被组织成使得初始流程图通过总体“大图”观点来呈现各实现,并且后续的流程图提供进一步的附加物和/ 或细节。现在参考图3,其示出了用于实施本发明的各方面的操作过程,包括操作300、 302、304和306。如图所示,操作300开始操作过程,并且操作302示出了将多个图元的顶点存储在存储器中。参考图2,顶点数据(例如指示顶点的32位值)可存储在顶点缓冲区中,例如,RAM 214中的一个或多个存储器页和/或图形处理器218的存储器。在一实施例中,顶点数据例如可由API 222响应于从应用程序接收到API构造而产生,所述应用程序例如为视频游戏、媒体播放器、CAD程序、用户界面等。即,应用程序可以向API 222传递一个或多个构造,并且API 222可以产生数以千计的图元并将它们存储在一个或多个顶点缓冲区中。继续对图3的描述,操作304示出了确定顶点中的至少一部分尚未被发送至终端服务器客户机。例如,继续先前的示例,当应用程序将顶点缓冲区映射至一进程时,例如,优化器2 可由逻辑处理器212执行,并且该处理器可发现存储在顶点缓冲区中的顶点中的至少一部分尚未被发送至终端服务器客户机201。例如,应用程序可以在各客户机更新之间产生大量的数据,例如数以百万计的图元,并且优化器2 可被配置以确定哪一部分数据是呈现已经被发送至客户机201的和已经改变的之间的区别所需要的。作为示例,当映射顶点缓冲区时,应用程序可取决于开发者使对它是如何编码的来采用不同方式操作。例如,对一应用程序而言,映射一部分缓冲区,然后添加至缓冲区,然后盖写缓冲区中的一部分数据,然后完全盖写顶点缓冲区的内容,这是完全可以接受的。应用程序可针对整个缓冲区的内容或缓冲区的子集发出绘制命令。或换言之,很难估计应用程序将如何工作。因为应用程序的行为不是可预测的,一种幼稚的方法将涉及在每一非映射操作之后发送缓冲区中的全部顶点。但是,在本示例中,优化器2 例如可在一非映射操作之后确定顶点缓冲区中的哪一部分顶点已经改变。继续对图3的描述,操作306示出了将所确定的那部分顶点发送给终端服务器客户机。例如,参考图2,网络接口卡210可将缓冲区中已经改变的顶点发送至终端服务器客户机201。在本示例中,因为需要通过网络发送的顶点的数量已经减少,因此实现命令遥控所必需的总带宽已降低。现在参考图4,其示出图3的操作过程300的替代实施例,包括附加操作408、410、 412和414。参考操作408,示出了在确定顶点中的至少一部分尚未被发送至终端服务器客户机之前,确定用户空间应用程序已请求了大于预定范围的存储器地址范围。参考图2,优化器2 可被配置成在确定用户空间应用程序正在使用比预定数量更大的地址空间之后, 扫描顶点缓冲区。例如,扫描顶点缓冲区花费计算机周期,而且如果应用程序指示它将发送少量数据,例如20字节,则发送这些字节而非在每次更新期间标识数据的改变部分是更高效的。例如,应用程序可在初始化过程期间创建指定数量的缓冲区,并设定大小以及该缓冲区将如何被使用。处理器212可执行优化器226,并检查大小和使用模式。在本示例中,处理器212可发现缓冲区的大小被设定为大于预定数量并确定要扫描缓冲区内容。在同样的实施例或其他实施例中,缓冲区的大小和类型可被用于确定哪些优化是开启的。例如,取决于缓冲区的大小,优化器2 可启用页级扫描、字节级扫描、SIMD扫描等等。如本领域技术人员能够明白的,预定阈值可基于计算机系统200的能力而改变。 例如,预定阈值可被设定在位级,并且优化器2 可被用于扫描API 222所产生的每一个位。这将降低向客户机201传输改变所使用的带宽,但是对实际获得的好处而言,这将花费不可接受的计算机周期数。另一方面,当大多改变没有被检测到时,传输数据所需要的带宽量增大了。因而,如本领域技术人员能够明白的,可基于所使用带宽对所使用的计算机周期的折中来设定确切值。因为存储器和计算能力在逐渐增大,当前使用的值在将来可能并不相关,因而确切阈值留给实现者来确定。继续对图4的描述,操作410示出了所确定那部分的顶点的预处理。例如,在本发明的一实施例中可为了压缩来对顶点进行预处理。在本示例中,表示用于产生图元的顶点的值(例如,位)可被翻译为不同形式,使得批量压缩器240可更容易地标识模式并由此给批量压缩器更多压缩机会。再次参考图4,操作412示出了发送所确定的那部分顶点中每一连续顶点之间所确定的增量。例如,在一实施例中,增量预处理器2 可用来对顶点进行预处理。例如,可基于顶点何时被检测到和/或应用程序何时在API 222上设置标志来作出由增量预处理器 228对顶点进行处理的决定。如先前段落中所述,每一顶点可表示为比如32位浮点数等值, 并且预处理器2 可基于先前的顶点在每一连续的顶点上执行比如加、减、乘、除等操作并输出增量。如本领域技术人员可以明白的,32位浮点数与另一 32位浮点数的差值仍然是32 位浮点数,因而数据量保持不变。但是,通过选择性地预处理,数据可被置于更容易被批量压缩器240压缩的格式。例如,如果顶点阵列为[2,4,6,8,10,12],增量预处理器可发送第一个值以及连续的增量,即阵列[2,2,2,2,2,2]。虽然批量压缩器MO能够压缩第一阵列, 但通过对数据的预处理,批量压缩器240将很可能能够拾取更多重复模式并因而压缩更多数据。本技术对Direct2D特别有用,Direct2D是微软建立在Direct3D上的使用3D硬件绘制比如例如按钮菜单等文本之类的2D图像的一组API。使用D2D的应用程序可以用表示水平跨距的线段来填充顶点缓冲区。因为顶点被打包在一起来呈现特定字体的字母,所以每一连续顶点之间的距离可能是非常相似的。再次参考图4,操作414示出了由操作系统确定用户空间应用程序访问了存储器, 该存储器包括多个页;以及由操作系统确定该用户空间应用程序访问了该多个页中的特定页。根据执行操作412的一实施例,操作系统202可确定用户空间应用程序(例如,视频游戏)访问了存储器的存储顶点的一特定页。例如,处理器212可跟踪它访问的每一存储器页,而且该信息可展示给例如内核234的存储器管理器。在一实施例中,使用API 222的应用程序可被标识,而且当应用程序映射由存储器页所支持的顶点缓冲区时,被访问的页可被标识并报告给优化器226。在一具体示例中,顶点缓冲区可以是例如1 字节,并且该缓冲区可以由4个页支持,每一页是4k字节。在本示例中,如果应用程序映射缓冲区,例如写入到第一页,则处理器212可将这一信息报告给操作系统202,而且该特定页(例如,第一页)可被报告给优化器226。优化器2 可以基于操作系统202所传递的信息来确定该特定页包括尚未被发送至终端服务器客户机的顶点。现在参考图5,它示出了图4的操作过程的替换实施例,它包括操作516,操作516 示出了将该特定页和先前发送至终端服务器客户机的页的副本进行比较;以及基于该比较来确定该特定页中的顶点数据的至少一部分已改变。在同样的实施例或其他实施例中,一旦页被标识,它就可被优化器2 进一步扫描。例如,优化器2 可由处理器212执行,并且处理器212可将所访问的一个或多个页与该一个或多个页的先前副本进行比较。例如, 优化器2 可访问被发送至客户机201的最新近数据的副本,或者换言之,优化器2 可具有客户机201当前所拥有的数据的视图。可执行优化器2 并在所访问的页的内容和该页的旧副本之间进行比较。如果有区别,则该页和/或改变的字节可被发送至客户机201。现在参考图6,它示出了图5的操作过程的进一步细化,它包括操作616,操作616 示出了比较操作可进一步包括使用来自单指令多数据指令集中的至少一个指令来扫描特定页。例如,在一特定实施例中,逻辑处理器212可以是具有单指令多数据(SIMD)流扩展的基于x86的处理器。在本示例中,该至少一个SIMD指令可一次按块来扫描存储器的一个页,并将旧页中字节的副本与当前页中的当前字节进行比较。在一特定SIMD实施例中,处理器212可被配置为一次扫描16字节。16字节的组可被加载至SIMD寄存器中,并可对16 字节的先前值(例如,发送至客户机201的值)进行比较,并可确定该组中是否有字节已改变。在一替换实施例中,一旦优化器2 标识一组字节包括改变,处理器212就可执行优化器226,并且处理器212可被配置为使用常规x86指令标识该组中已改变的特定一个或多个数据字节来在该组的每一字节之间进行比较。现在参考图7,它是出了图6的操作过程的进一步细化,它包括操作718,操作718 示出了使用SIMD指令的比较操作可额外包括从页的开头至结尾的扫描操作,直至检测到改变;以及从页的结尾至开头的扫描操作,直至检测到改变。例如,逻辑处理器212可按照字节组为单位在标识的页中步进。本示例中的优化器2 可配置为搜索各字节直至检测到改变。在本示例实施例中,因为应用程序往往以大组为单位修改顶点,所以优化器2 可被配置来查看直至它找到一组改变的开头或结尾,而非搜索每一字节。通过以此方式来配置优化器226,优化器2 将仅花费查找与实际所作改变的数量成比例的区别的周期。艮口, 如果应用程序修改了一大组顶点,则处理器212将不必花费大量周期来尝试标识所有的改变。在本备选细化中,处理器212可从开头(例如,页的第一地址)开始在页中步进, 以组为单位将各字节与先前的组进行对比。例如,如果检测到改变,即如果指示顶点的值已改变,则处理器212可停止,记录该值的存储器地址,并从页的结尾(例如,页的最后地址) 至开头来开始扫描,直至检测到改变。在本示例中,处理器212可在两个改变的值之间选择地址作为尚未发送至终端服务器客户机201的部分顶点。现在参考图8,它示出了图7的操作过程的进一步细化,它包括附加操作820,该附加操作820示出了用特定页盖写先前发送至终端服务器客户机的页的副本。在包括操作 820的实施例中,一旦执行优化器指令的处理器标识出尚未发送至终端服务器客户机201 的部分顶点,处理器212就可通过盖写存储器区域(例如,RAM 214的区域)中页的旧副本来对它刚扫描的页进行高速缓存,该存储器区域配置为存储已发送至终端服务器客户机 201的图形数据的副本。例如,如果高速缓存包括4页顶点,并且优化器确定改变是在第三页作出的,则优化器2 可使用刚扫描的页来盖写第三页。在盖写操作之后,优化器2 具有了已被发送至客户机201的数据的当前视图。现在参考图9,其示出了图4的操作过程的进一步细化,包括附加操作922,该附加操作922示出了压缩经预处理的所确定的那部分顶点。在本细化中,在尚未被发送至终端服务器客户机201的那部分顶点被预处理之后,可使用批量压缩器240对它们进行压缩。 一般地,批量压缩器240是被配置为在标识一行程中的模式并对它们进行压缩的标准压缩器。因为批量压缩器230定制为压缩不同的数据,例如,发送至客户机201的全部数据,比如GDI 246产生的位图、音频、剪切板数据、USB设备等,所以它并没有配置为压缩任意特定类型的数据。因而,在本示例中,可对发送至客户机的顶点进行预处理,即,将其置于使批量压缩器能更容易地标识模式的格式。现在参考图10,其示出了可用于实施本发明的各方面的操作过程。该操作过程开始于操作1000,并包括操作1002、1004、1006。如操作1002所示,该过程包括存储多个图元的顶点,每一图元由至少一个顶点来定义。参考图2,顶点数据(例如指示顶点的32位值) 可存储在顶点缓冲区中,例如,RAM 214中的存储器的一个或多个页和/或图形处理器218 的存储器的一个或多个页。在一实施例中,顶点数据例如可由API 222响应于从应用程序接收到API构造而产生,所述应用程序例如为视频游戏、媒体播放器、CAD程序、用户界面等。即,应用程序可以向API 222传递一个或多个构造,并且API 222可以产生数以千计的图元并将它们存储在一个或多个顶点缓冲区中。操作过程1004继续并示出了使用前移编码器对顶点进行编码。例如,处理器212 可执行指示前移编码器230 (MTF编码器)的指令并可对顶点进行编码。在本示例中,MTF 编码器230可配置为在表示正在被发送至客户机的数据元素的粒度级进行编码。S卩,在使用32位浮点数的示例中,MTF编码器230可配置为一次编码32位。通过在数据元素级进行编码,可利用顶点的已知属性。即,由于实现者知道数据表示32位顶点,MTF编码器230 可被配置成对每32位进行编码而非对每一位进行编码。一般地,MTF编码器230包括值列表和索引。随着MTF编码器230处理顶点,最常见的值渗透至列表的顶部,而且并非发出这些值,MTF编码器230可输出索引值(可被编码成比顶点更少的位)。MTF编码器230可随时间地在较常见的值之间震荡,由此产生批量压缩器240可容易拾取和压缩的行程。在一特定示例中,列表可具有4个槽,但是槽的数量是可配置的。MTC编码器230 可接收顶点值[137,16,128,137,137,128]。当MTF编码器230遇到第一个值‘ 137,时,可检查列表以确定发出索引值还是顶点值。因为在本示例中列表是空的,值137可存储在‘0’ 索引槽中,并且MTF编码器230可发出值137。当遇到下一个值‘16,时,MTF编码器230可将16存储在‘0’索引槽并将137移位至‘1’槽,并发出值16。当遇到第三个值‘128’时, 列表的内容可被移位,并可发出128。当遇到第四个值时,MTF编码器230可确定137已经在2槽中,MTF编码器230可发出索引值‘2’和标识这是一索引值的信息(例如一个位), 而非发出137。在本示例中,索引值可使用比顶点更少的位数来编码,因而压缩了顶点值。 另外,在该点MTF编码器230可对换或旋转列表,使得137被放置在‘0’索引中而1 被放置在‘2’索引槽中,或者如果旋转的话则1 放置在‘1’索引槽中。继续该示例,随着更多相同值开始出现,MTF编码器230将能够更多地发出索引值并在经常遇到的值之间震荡。或者换言之,MTF编码器230可通过发送索引值来压缩顶点,并通过发送可由批量压缩器240 进一步压缩的行程来对顶点进行预处理。继续对图10的描述,操作1006示出了将经编码的顶点发送给终端服务器客户机。 例如,参考图2,网络接口卡210可将经编码的顶点(例如,MTF编码器230发出的输出)发送至终端服务器客户机201。在本示例中,需要发送的表示顶点的数据量已经减少,因而减小了执行命令遥控所必需的总带宽。现在转向图11,其示出图10的操作过程的替换实施例,包括操作1108和1110。 如操作1108所示,在一实施例中,该操作过程可包括一包含对经编码的顶点进行压缩的操作。在包括该细化的实施例中,经编码的顶点可使用批量压缩器240来压缩。在本示例中, 批量压缩器240所接收到的顶点可包括在几个值之间震荡的索引值,并且批量压缩器240 能够标识行程并压缩数据。此外,图11还描绘了操作1110,操作1110示出了将存储器的特定页中的顶点与先前发送至终端服务器客户机的顶点进行比较;以及基于该比较来标识特定页中多个图元的顶点。例如,MTF编码器230接收的顶点可以从优化器2 接收。在这一配置中,优化器 226可被配置为标识应用程序对顶点作出的改变,并将该改变发送至MTF编码器230用于进一步压缩。与上述相似的,优化器2 可由处理器212执行,并且处理器212可将一个或多个页与该一个或多个页的先前副本进行比较。可以执行优化器2 并在所访问的页的内容和该页的旧副本之间进行比较。如果有区别,则该页和/或改变的字节可被发送至MTF编码器230。现在参考图12,其示出了操作1212,操作1212是对操作1110的细化。如图所示, 操作1212示出了从特定页的开头到结尾进行扫描,直至检测到顶点的改变;以及从特定页的结尾到开头进行扫描,直至检测到顶点的改变。例如,在一实施例中,逻辑处理器212可按字节组为单位在特定页中步进。现在参考图13,其示出了操作1314,操作1314示出了图12的操作过程的进一步细化。在本实施例中,用于扫描特定页的指令包括来自单指令多数据指令集的至少一个指令。例如,逻辑处理器可以是具有单指令多数据(SIMD)流扩展的基于x86的处理器。在此情况下,SIMD指令可使用单个处理器指令一次按块来扫描存储器页。现在参考图14,其示出了包括操作1400-1412的操作过程。操作1400开始该过程,而操作1402示出了将图形数据存储在存储器中,该图形数据包括纹理和顶点。参考图 2,在一实施例中,顶点数据(例如指示顶点的32位值)可存储在顶点缓冲区中,例如RAM 214中的存储器的一个或多个页或图形处理器的存储器的一个或多个页,而纹理(例如,比如表面法线之类的表面属性)可存储在RAM 214的各页中。在一实施例中,顶点数据例如可以由API 222响应于从诸如例如视频游戏、媒体播放器、CAD程序、用户界面等等之类的应用程序接收到的构造而生成。应用程序可以经由API 222将存储器的一个或多个页与顶点或纹理进行映射。或者换言之,应用程序可调用API 222的一个或多个函数以将多个顶点写入驱动程序可用的存储器中,以指导图形处理器产生多个图元。类似地,应用程序可发送构造至API 222,并且API 222可产生用于将纹理映射至可与该纹理一起存储在存储器中的图元的命令。继续图14的描述,操作1404示出了基于存储于存储器中的图形数据和先前发送至终端服务器客户机的图形数据之间的比较,确定存储器中的图形数据的至少一部分已改变。例如,在一实施例中,API 222可映射顶点缓冲区(例如存储器页)并将纹理存储在存储器中,并且优化器2 可由处理器212执行以确定应用程序所存储的数据是否因为之前的映射操作而改变。例如,优化器2 可访问被发送至客户机201的最新近数据的副本,或者换言之,优化器2 可具有客户机201当前所拥有的数据的视图。优化器2 可另外地将纹理和发送至客户机201的纹理进行比较以确定是否有数据已改变。例如,纹理本质上为像素值的阵列,例如位图,并且优化器2 可扫描存储该纹理的存储器页以确定是否有纹理已改变。如果处理器212检测到包括被触摸的(即被访问的)纹理或一部分纹理的存储器页,则优化器2 可确定将该页发送至客户机201。在另一示例实施例中,优化器2 可扫描被触摸页的内容以标识哪些字节已改变。在本示例中, 优化器2 可从中间地址开始扫描并像矩形一样向外扩展,而非从页的开头或结尾开始扫描。可执行优化器2 并在所访问的页的内容和该页的旧副本之间进行比较。如果有区别,则该页和/或改变的字节可被发送至客户机201。在某些实施例中,处理器212可在页中步进,使用SIMD指令比较字节或字节组。继续对图14的描述,操作1406示出了对图形数据的已改变的至少一部分进行预处理。例如,在本发明的一实施例中可对图形数据进行预处理来用于压缩。在本示例中,表示图元和/或纹理的值(例如,位)可被翻译为不同形式,使得批量压缩器240可更容易地标识模式并由此给批量压缩器更多的压缩机会。继续对图14的描述,操作1408描绘了对图形数据的已改变的至少一部分进行压缩。在本示例中图形数据例如可使用批量压缩器240来进行压缩。继续对图14的描述,操作1410描绘了将已改变的图形数据发送给终端服务器客户机。例如,参考图2,网络接口卡210可将已改变的图形数据发送至终端服务器客户机 201。在本示例中,因为需要通过网络发送的图形数据的量已经减少,所以执行命令遥控所必需的总带宽已降低。现在转向图15,其示出图14的操作过程1400的替换实施例,包括操作1512、 1514、1516和1518。现在参考操作1512,其示出了操作1406的细化,即对已改变的那部分图形数据中的顶点应用前移编码器。与操作1004类似的,在一实施例中,处理器212可执行指示前移编码器230的指令,并对顶点、纹理值和/或用于将纹理映射至图元的命令进行编码。在本示例中,MTF 230可被配置为在数据元素级进行编码,以利用图形数据的已知属性。继续图15的描述,操作1514示出了操作1408的细化,其示出了应用网格压缩器来压缩已改变的那部分图形数据中的至少一部分顶点。例如,在一实施例中,API 222可被配置为包括可由应用程序来设置的标志,该标志指示某些顶点数据是网格的一部分,例如形成3D对象的相连接图元的集合。在此情形下,同样的标志或不同的标志可用于向API 222指示可在网格上使用有损压缩技术。在本示例中,如果标志被设置,则与该标志相关联的顶点可被传递至网格压缩器236并且这些顶点可被压缩。在一实施例中,网格优化器可在客户机201上执行,并可用于重构经压缩的顶点。 一个这样的示例网格优化器可以在客户机201上执行以重新创建在有损压缩操作中丢失的顶点。转向操作1516,在一实施例中,可通过对已改变的那部分图形数据中的纹理数据应用图像压缩器来对操作1408进一步进行细化。例如,可使用多个图像压缩器之一来压缩纹理数据。因为纹理本质上是位像,所以在某些实施例中可使用不同的压缩器来降低发送纹理所需要的带宽量。在某些实施例中,取决于纹理以及应用程序打算如何使用该纹理,压缩器232可以是无损的或有损的。在本示例中,API 222可以展示一标志,该标志可由应用程序进行设置以指示对存储器的某些页中的纹理而言有损压缩是可接受的,否则可使用无损压缩器来压缩该纹理。在本示例中,可基于可用的CPU周期和对标志的选择来动态地选择适当的压缩器。一些示例压缩器可以包括但不限于行程长度编码器、JPEG压缩器或DirectX压缩器。现在参考操作1518,其示出了由一出口接收用于文本的应用程序构造;以及将该构造发送至终端服务器客户机。一般地,发送API构造比发送处理构造所产生的多个API 图元占用的带宽小。在某些情况下,可在能改善遥控比如形成Direct2D文本的图元之类图元的能力的API 222中添加高级出口。一般地,当比如文字处理程序之类的D2D应用程序向API 222传递用于产生字母‘Α’的构造时,API 222从该构造中产生图元并将其存储在顶点缓冲区中。传递至API222的构造表示‘A’,但是标识‘A’的信息在由API 222产生的顶点中丢失。因而,在本示例实施例中,当API 222接收到这样的构造时,出口可捕获该构造并经由NIC 210将其发送至客户机201。客户机201在此情况下可接收该构造并使用其来重构顶点缓冲区。在同一实施例或其他实施例中,可使用先前公开的技术中的一种来对构造进行压缩或预处理。前述的详细描述通过示例和/或操作图阐述了系统和/或进程的各实施例。在这样的框图和/或示例包含一个或多个功能和/或操作的范围内,本领域技术人员将理解,这样的框图,或示例内的每一功能和/或操作可以分别地和/或共同地通过范围广泛的硬件、 软件、固件或几乎其任何组合来实现。 虽然已示出和描述了本文中描述的主题内容的特定方面,但是本领域技术人员将明白,基于本文中的教导,可作出改变和修改而不脱离本文中描述的主题内容,并且其更广方面以及因此所附权利要求的范围旨在涵盖落在本文中描述的主题内容的真实精神和范围内的所有此类改变和修改。
权利要求
1.一种方法,包括将多个图元的顶点存储在存储014或21 中;确定(226)所述顶点的至少一部分尚未被发送至终端服务器客户机O01) 将所确定的那部分顶点发送(210)至所述终端服务器客户机001)。
2.如权利要求1所述的方法,其特征在于,还包括在确定至少一部分顶点尚未被发送至所述终端服务器客户机O01)之前,确定(226) 用户空间应用程序O06)已请求了大于预定范围的存储器地址范围014或218)。
3.如权利要求1所述的方法,其特征在于,还包括 对所确定的那部分顶点进行预处0观)。
4.如权利要求1所述的方法,其特征在于,将所确定的那部分顶点发送至所述终端服务器客户机还包括发送(210)所确定的那部分顶点(228)中每一连续顶点之间的所确定的增量。
5.如权利要求1所述的方法,其特征在于,还包括由操作系统(202)确定用户空间应用程序(206)访问了所述存储器018,214),所述存储器包括多个页;以及由所述操作系统(202)确定所述用户空间应用程序(206)访问了所述多个页中的特定页。
6.如权利要求5所述的方法,其特征在于,还包括将所述特定页与先前发送至所述终端服务器客户机O01)的页的副本进行比较 (226);以及基于所述比较0 ),确定所述特定页中的顶点数据的至少一部分已改变。
7.如权利要求6所述的方法,其特征在于,将所述特定页与先前发送至所述终端服务器客户机的页的副本进行比较还包括使用来自单指令多数据指令集012)的至少一个指令来扫描所述特定页。
8.如权利要求7所述的方法,其特征在于,扫描所述特定页还包括 从所述页的开头至结尾(212)进行扫描,直至检测到改变;以及从所述页的结尾至开头(212)进行扫描,直至检测到改变。
9.如权利要求8所述的方法,其特征在于,还包括用所述特定页来盖写先前发送至所述终端服务器客户机的页的副本(212)。
10.如权利要求3所述的方法,其特征在于,还包括 对经预处理的所确定的那部分顶点进行压缩(MO)。
11.一种包括处理器可执行指令的计算机可读存储介质,所述计算机可读存储介质包括用于存储(214,218)多个图元的顶点的指令,每一图元由至少一个顶点来定义; 用于使用前移编码器(230)对所述顶点进行编码的指令;以及用于将经编码的顶点发送至终端服务器客户机O01)的指令。
12.如权利要求11所述的计算机可读存储介质,其特征在于,还包括 用于压缩所述经编码的顶点(MO)的指令。
13.如权利要求11所述的计算机可读存储介质,其特征在于,还包括用于将存储器的特定页中的顶点与先前发送至所述终端服务器客户机026)的顶点进行比较的指令;以及用于基于所述比较来标识所述特定页026)中的多个图元的顶点的指令。
14.如权利要求12所述的计算机可读存储介质,其特征在于,所述用于将存储器的特定页中的顶点与先前发送至所述终端服务器客户机的顶点进行比较的指令还包括用于从所述特定页的开头至结尾扫描,直至检测到(212)顶点的改变的指令;以及用于从所述特定页的结尾至开头扫描,直至检测到(212)顶点的改变的指令。
15.如权利要求13所述的计算机可读存储介质,其特征在于,用于扫描所述特定页的指令包括来自单指令多数据指令集012)的至少一个指令。
16.一种计算机系统,包括用于将图形数据存储在存储器中的电路,所述图形数据包括纹理和顶点(214,218); 用于基于存储于存储器中的图形数据和先前发送至终端服务器客户机的图形数据之间的比较,确定所述存储器中的图形数据的至少一部分已改变的电路0 ); 用于对所述图形数据的已改变的至少一部分进行预处理的电路0 ); 用于对所述图形数据的已改变的至少一部分进行压缩的电路O40)以及用于将所述已改变的图形数据发送(210)至终端服务器客户机001)的电路。
17.如权利要求16所述的计算机系统,其特征在于,用于对所述图形数据的已改变的至少一部分进行预处理的电路还包括用于对所述图形数据的已改变的那部分中的顶点应用前移编码器的电路(230)。
18.如权利要求16所述的计算机系统,其特征在于,用于对所述图形数据的已改变的至少一部分进行压缩的电路还包括用于应用网格压缩器036)以对所述图形数据的已改变的那部分中的至少一部分顶点进行压缩的电路。
19.如权利要求16所述的计算机系统,其特征在于,用于对所述图形数据的已改变的至少一部分进行压缩的电路还包括用于对所述图形数据的已改变的那部分中的纹理数据应用图像压缩器032)的电路。
20.如权利要求16所述的计算机系统,其特征在于,还包括 用于由出口接收(214,218)用于文本的应用程序构造的电路;用于将所述构造(210)发送至所述终端服务器客户机O01)的电路。
全文摘要
所公开的是经改进的命令级遥控的技术。
文档编号G06F9/06GK102239484SQ200980150086
公开日2011年11月9日 申请日期2009年10月30日 优先权日2008年12月8日
发明者D·N·伍德, M·A·麦克马伦, N·Y·阿布多, O·菲利兹 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1