CN111615716B - 在客户端机器之间分配着色器来进行预缓存 - Google Patents

在客户端机器之间分配着色器来进行预缓存 Download PDF

Info

Publication number
CN111615716B
CN111615716B CN201980008938.9A CN201980008938A CN111615716B CN 111615716 B CN111615716 B CN 111615716B CN 201980008938 A CN201980008938 A CN 201980008938A CN 111615716 B CN111615716 B CN 111615716B
Authority
CN
China
Prior art keywords
client machine
shader
compiled
code
hardware configuration
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
CN201980008938.9A
Other languages
English (en)
Other versions
CN111615716A (zh
Inventor
P-L·M·格里菲斯
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.)
Valve Corp
Original Assignee
Valve 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 Valve Corp filed Critical Valve Corp
Publication of CN111615716A publication Critical patent/CN111615716A/zh
Application granted granted Critical
Publication of CN111615716B publication Critical patent/CN111615716B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • A63F13/52Controlling the output signals based on the game progress involving aspects of the displayed game scene
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/352Details of game servers involving special game server arrangements, e.g. regional servers connected to a national server or a plurality of servers managing partitions of the game world
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/77Game security or game management aspects involving data related to game devices or game servers, e.g. configuration data, software version or amount of memory
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/90Constructional details or arrangements of video game devices not provided for in groups A63F13/20 or A63F13/25, e.g. housing, wiring, connections or cabinets
    • A63F13/95Storage media specially adapted for storing game information, e.g. video game cartridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/79Game security or game management aspects involving player-related data, e.g. identities, accounts, preferences or play histories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Computer Security & Cryptography (AREA)
  • General Business, Economics & Management (AREA)
  • Computer Graphics (AREA)
  • Information Transfer Between Computers (AREA)
  • Image Generation (AREA)
  • Stored Programmes (AREA)

Abstract

客户端机器被配置为在执行在显示器上渲染图形的程序(例如,视频游戏)期间编译着色器。这些客户端机器可以将信息‑包括所述客户端机器的硬件配置、所述程序的应用程序标识符(ID)以及用于已编译的着色器的一组着色器ID‑上传至远程计算***,所述远程计算***编目所述着色器ID,选择性地向所述客户端机器中的一个或多个请求已编译的着色器,以及选择性地准备所述已编译的着色器代码以进行重新分配。此后,带有匹配的硬件配置的发出请求的客户端机器可以从所述远程***接收已编译的着色器代码以用于特定的程序,并且可以预缓存所述已编译的着色器代码以在程序执行期间使用。

Description

在客户端机器之间分配着色器来进行预缓存
相关申请的交叉引用
这是要求于2018年1月26日提交的题为“在客户端机器之间分配着色器来进行预缓存”的美国专利申请序列号15/881,552的优先权的PCT申请,该美国专利申请通过引用整体并入本文。
背景技术
着色器是一种程序,其在显示卡上执行以对显示器产生一个范围的视觉效果。现代视频游戏使用着色器来在玩游戏期间在屏幕上渲染不同的材料(例如,磨砂材料、有光泽的材料等)。当在图形管线中执行这些程序时,着色器输出逐像素值(例如,颜色值),其被组合以在显示器上创建带有期望的视觉效果的图像。
游戏开发者可以以高级编程语言,诸如高级着色语言(HLSL)、OpenGL着色语言(GLSL)或类似的编程语言为着色器编写源代码,并且该源代码随后被编译成着色器的字节码表示。然而,在着色器可以在显示卡上执行之前,着色器还被编译成可由客户端机器的图形处理单元(GPU)执行的机器代码。换句话说,当客户在他/她的客户端机器上第一次运行游戏时,图形驱动程序加载与着色器相关联的字节码,并且将字节码编译成可由客户端机器的特定GPU执行的机器代码。这最后的着色器编译过程产生对于客户端机器的硬件配置来说唯一的(例如,对于GPU型号和/或图形驱动程序的版本来说唯一的)已编译的着色器代码。因为大多数游戏开发者希望他们的视频游戏在带有不同硬件配置的个人计算机(PC)平台上执行,游戏开发者通常将着色器以字节码格式分配给客户,从而使着色器编译过程在运行时在客户端机器上执行,使得特定的图形驱动程序可以将着色器编译成用于所讨论的硬件配置的正确的机器代码。相比之下,控制台视频游戏附带有用于着色器的机器代码,其已从字节码进行编译并且准备由控制台的GPU执行。这是因为控制台的硬件配置对于游戏开发者来说是已知的。
在PC平台上,如果当视频游戏在客户端机器上加载时编译了着色器,用于游戏的初始加载屏幕则可能呈现了不期望的较长时间(例如,几分钟)。这是因为当游戏加载时,图形驱动程序将编译用于游戏数据组的所有着色器,以创建在玩游戏期间可由GPU执行的机器代码。替代地,如果游戏开发者将游戏设计成在玩游戏期间编译着色器,每当第一次遇到新材料时,图形驱动程序将用于该材料的着色器编译成机器代码(这可能花费一些时间),从而可能导致游戏中的卡顿或卡死(其中图形驱动程序花费太多时间将着色器编译成机器代码并且无法以足够快的速率渲染帧的情况)。因此,在客户端计算机上本地编译着色器可能导致较长的加载时间和/或游戏中的卡顿。本文提供了用于改善和增强这些和其他***的技术解决方案。
附图说明
参考附图来描述详细说明。在图中,附图标号最左侧的数字标识所述附图标号首次出现的图。不同附图中的相同附图标号的使用指示类似或相同的部件或特征。
图1是示出包括用于在客户端机器之间分配和预缓存着色器的***的示例环境的图。
图2示出了示出客户端机器的示例部件的框图以及用于向/从远程计算***上传和/或下载已编译的着色器的示例过程的流程图。
图3示出了示出远程计算***的示例部件的框图以及用于从客户端机器接收信息,编目包括在接收的信息中的着色器标识符(ID),选择性地请求已编译的着色器代码以及选择性准备已编译的着色器代码以进行重新分配的示例过程的流程图。
图4是用于基于客户端机器的硬件配置来将已编译的着色器代码发送到发出请求的客户端机器的示例过程的流程图。
图5是用于选择性请求已编译的着色器代码的示例过程的流程图。
图6是选择性准备已编译的着色器代码以进行重新分配的示例过程的流程图。
图7是用于通过丢弃下载的着色器代码中的一部分、重新编译对应于丢弃的着色器代码的着色器以及上传关于已重新编译的着色器的信息来实施完整性检查的示例过程的流程图。
图8是使用图7的过程的完整性检查来停止已经分配的着色器代码的进一步分配的示例过程的流程图。
具体实施方式
本文描述的是除其他事项之外用于在客户端机器之间分配着色器以用于在客户端机器上预缓存已编译的着色器的技术、装置和***。程序可以安装在客户端机器上并且由客户端应用程序执行。这样的程序可以在与客户端机器相关联的显示器上渲染图形作为程序执行的一部分。这种程序的一个示例为视频游戏。
当开发新的视频游戏时,用户可以在其相应的客户端机器上开始玩/执行游戏,并且那些客户端机器可以通过硬件配置而变化;如本文所使用的,“硬件配置”是由客户端机器的GPU的型号和/或图形驱动程序的版本限定的。最初,当新的视频游戏以前从未在客户端机器上执行过并且多个客户端机器开始执行游戏时,用于游戏的着色器(字节码)由每个客户端机器上的图形驱动程序编译成可由每个客户端机器上的特定GPU执行的机器代码。本文所述的技术、装置和***涉及当程序在客户端机器上执行时将关于已编译的着色器的信息报告给远程计算***,并且远程***可以基于那些机器的硬件配置将已编译的着色器代码选择性地重新分配到其他客户端机器。这允许尚未为特定程序(例如,视频游戏)已编译的着色器的客户端机器从远程计算***请求和下载(如果可用的话)已编译的着色器代码,并且该已编译的着色器代码可以在客户端机器上预缓存,使得其可以执行以代替客户端机器必须本地编译对应于该着色器代码的着色器。
在一些实施方案中,客户端机器被配置为将对与程序(例如,视频游戏)相关的已编译的着色器代码的请求发送到远程计算***。这种请求可以基于客户端机器尚未为程序已编译的着色器而发送(例如,当客户端机器安装程序,但尚未执行该程序时)。如果客户端机器从远程计算***接收到指示已编译的着色器代码是不可用的响应,客户端机器的图形驱动程序则在程序执行时可以在预定义的存储器位置中并且与程序的应用程序标识符(ID)相关联地进行着色器的编译和缓存。客户端应用程序可以生成用于已编译的着色器的一组着色器ID,并且可以将信息发送到远程计算***,信息包括客户端机器的硬件配置,程序的应用程序ID和用于已编译的着色器的一组着色器ID。这允许远程***从客户端机器收集有关在那些机器上编译的着色器的信息。
如果,在另一方面,客户端机器从远程***接收到指示所请求的着色器代码是可用的响应,客户端机器则可以从远程计算***接收所请求的已编译的着色器代码。在接收到已编译的着色器代码时,客户端机器可以在预定义的存储器位置中进行已编译的着色器代码中的至少一部分的预缓存或存储以供随后使用。在执行程序(例如,视频游戏)时,客户端机器的GPU可以执行从预定义的存储器位置检索的已编译的着色器代码中的至少一部分,以代替图形驱动程序必须要靠自己创建已编译的机器代码。
在一些实施方案中,远程计算***被配置为当客户端机器执行程序(例如,视频游戏)时从客户端机器接收信息。在远程计算***接收到的用于给定的客户端机器的信息可以包括客户端机器的硬件配置,在客户端机器上执行的程序的应用程序ID以及在程序的执行期间由客户端机器的图形驱动程序编译的着色器的一组着色器ID。远程计算***可以根据硬件配置和应用程序ID编目着色器ID,并且可以选择性地请求用于对应于接收的着色器ID的着色器中的一个或多个的已编译的着色器代码。可以通过使已编译的着色器代码与相应的应用程序ID和硬件配置相关联来准备已编译的着色器代码以进行重新分配。以这种方式,在从客户端机器接收到包括客户端机器的硬件配置和特定程序的应用程序ID的请求时,远程计算***可以确定用于该应用程序ID的与匹配硬件配置相关联的已编译的着色器代码是否是可用的。如果是可用的,则可以将已编译的着色器代码发送到发出请求的客户端机器以随后由客户端机器的GPU执行(即,用于预缓存)。
本文所述的技术和***可以允许一个或多个装置至少相对于处理资源来节约资源。例如,预缓存已编译的着色器代码可以通过使其对于客户端机器在客户端机器上加载程序(例如,首次加载的程序)时用于编译着色器代码来说是不必要的而减少加载时间。本文所述的技术和***还可以改进计算机本身的功能,诸如通过在执行视频游戏期间减少卡顿或卡死来进行。这是因为已编译的预缓存着色器代码可以在执行程序期间用于渲染图形(例如,材料),而不是实时地为那些材料编译着色器代码。此外,通过使用远程***作为在大型用户社区之间收集和重新分配已编译的着色器代码的中心毂,单个客户端机器可以设有比客户端机器原本将自己缓存的更多的已编译的机器代码。因此,从用户社区收集已编译的着色器代码可以使得在执行在显示器上渲染图形的程序中实现优化效率。
应当理解,尽管本文所述的许多示例参考了以已编译的机器代码分配到客户端机器并且预缓存在客户端机器上的“着色器代码”,但不同于着色器代码的其他类型的数据和/或代码也可以与本文所述的描述和***一起使用。事实上,执行任何类型的程序的任何副产物-无论程序是否渲染了图形-可以在用户社区之间分配,特别是节约资源和/或优化在客户端机器上程序的执行的那些副产物(数据和/或代码)。事实上,执行在计算结束时导致更小的有效载荷的计算的任何类型的程序可以受益于本公开。因此,尽管“视频游戏”被用作示例程序来说明本文所述的各种实施方案,但是应当理解,技术、装置和***可以与除了视频游戏的任何类型的程序一起使用。就这点而言,本公开不限于预缓存着色器以与视频游戏一起使用,这是因为其他程序也可以受益于预缓存程序执行的任何副产物(例如,已编译的着色器代码、已编译的JavaScript代码等)。
图1是示出包括用于在客户端机器之间分配和预缓存着色器的***的示例环境100的图。社区的用户102(有时称为“客户”)可以与一个或多个客户端机器104相关联。因此,图1中所示的客户端机器104(1)至(N)表示可以由用户社区(或客户群)用于在其上面执行程序的计算装置。客户端机器104可以被实施为任何合适类型的计算装置,其被配置为在相关联的显示器上处理和渲染图形,该计算装置包括但不限于PC、台式计算机、膝上型计算机、移动电话(例如,智能电话)、平板电脑、便携式数字助理(PDA)、可穿戴计算机(例如,虚拟现实(VR)耳机、增强现实(AR)耳机、智能眼镜等)、车载(例如,车内置)计算机、电视(智能电视)、机顶盒(STB)、游戏控制台和/或任何类似的计算装置。
客户端机器104的平台(例如,硬件和软件)可以变化,其中客户端机器104的子集共享共同的硬件配置,并且硬件配置在客户端机器104的这些子集之间不同。例如,客户端机器104的一个子集可以各自使用特定的GPU型号和图形驱动程序的特定版本,而客户端机器104的另一个子集则可以各自使用不同的GPU型号和图形驱动程序的不同版本。即使图形驱动程序是以软件(例如,二进制)实施的,但当一对客户端机器104被认为具有相同(或共同的)“硬件配置”时,如本文所使用的,这表示该对客户端机器104使用了相同的GPU型号和图形驱动程序的版本。换句话说,如本文所使用的,“硬件配置”还可以包含除了硬件之外的软件元素。
客户端机器104可以通过计算机网络108与远程计算***106(有时简称为“远程***106”)进行通信。计算机网络108可以表示和/或包括但不限于互联网、其他类型的数据和/或语音网络、有线基础设施(例如,同轴电缆、光纤电缆等)、无线基础设施(例如,无线电频率(RF)、蜂窝、卫星等)和/或其他连接技术。远程***106可以在一些情况下是经由计算机网络108维护且可访问的网络可访问的计算平台的一部分。诸如这个的网络可访问的计算平台可以称为使用诸如“按需计算”、“软件即服务(SaaS)”、”平台计算”、“网络可访问平台”、“云服务”、“数据中心”等的术语。一般而言,远程***106被配置为从客户端机器104收集信息和已编译的着色器代码两者并且被配置为编目(例如,组织、分类、归类等)其接收的信息和已编译的着色器代码,以及将已编译的着色器代码分配到发出请求的客户端机器104以在那些发出请求的客户端机器104上预缓存已编译的着色器代码。
在一些实施方案中,远程***106充当或访问平台以将程序(和内容)分配(例如,下载)至客户端机器104。在一个示例中,客户端机器104可以在其上安装客户端应用程序。客户端应用程序可以被配置为执行程序(例如,从远程***106下载的程序),该程序在与客户端机器104相关联的显示器上渲染图形。在视频游戏程序的背景下,所安装客户端应用程序可以是视频游戏客户端(例如,玩视频游戏的游戏软件)。在安装了客户端应用程序的情况下,那么客户端机器104则可以具有通过计算机网络108从远程***106下载程序(例如,视频游戏)的能力。任何类型的内容分配模式,诸如其中程序(例如,视频游戏)可单独购买以在客户端机器104上进行下载和执行的直接购买模式,基于订阅的模式,其中出租或租借程序一段时间的内容分配模式等可以用于该目的。因此,单独的客户端机器104可以包括一个或多个所安装程序,该一个或多个所安装程序可通过加载客户端应用程序而执行,并且这些程序可以在执行期间在显示器上渲染图形。在一个示例中,用户可以通过加载客户端应用程序并且选择期望的视频游戏以开始执行视频游戏来玩其已从远程***106购买和下载的多个视频游戏中的一个。
考虑图1的示例,其中用户102中的一些是玩可通过远程***106可用的新的视频游戏的最开始的用户102。该组用户102的可以是在游戏的发行日期购买了之前从未玩过的游戏的一般公众的第一用户102。替代地,该组用户102可以是一组“测试用户”或与游戏发行商或开发者相关联的用户,其可以得到对游戏的预发行副本的独占访问。
如图1所示,在步骤1中,当该组第一用户102在其相应的客户端机器104上开始执行新的视频游戏(即,在显示器上渲染图形的程序)时,客户端机器104编译(使用相应的图形驱动程序)一组着色器,并且由客户端机器104的相应GPU使用已编译的着色器代码来为程序渲染图形。已编译的着色器代码然后可以在可访问执行程序(例如,视频游戏)的客户端应用程序的预定义的存储器位置中进行缓存。也可以与在预定义的存储器位置处的已编译的着色器代码相关联地缓存程序(例如,视频游戏)的应用程序ID。
在步骤2中,客户端机器104在某个时间点,诸如在停止执行程序(例如,视频游戏)之后,可以将信息110发送到远程***106。发送到远程***106的用于给定的客户端机器104的信息110可以包括客户端机器104的硬件配置,在客户端机器104上执行的程序(例如,视频游戏)的应用程序ID以及对应于在程序的执行期间编译的着色器的一组着色器ID。客户端机器104可以在从预定义的存储器位置读取已编译的着色器代码时生成该组着色器ID。尽管图1描绘了其中信息110在客户端机器104停止执行程序(例如,视频游戏)之后发送到远程***106的场景,但是应当理解,信息110可以实时地或基本上实时地从客户端机器104进行流传输,诸如通过当那些机器104的图形驱动程序将着色器代码编译和缓存到预定义的存储器位置时流传输或以其他方式发送信息110来进行。
信息110由远程***106接收,并且在步骤3处,远程***106可以根据从信息110提取的硬件配置和应用程序ID来编目该组着色器ID。图1示出了目录112,其表示由远程***106维护以对其从客户端机器104接收的着色器ID进行编目的数据存储库(或数据存储区)。因此,目录112可以将着色器ID组织成组(或桶),该组(或桶)各自与硬件配置和应用程序ID的唯一组合相关联。换句话说,着色器ID的每个桶可以捆绑于特定程序(例如,视频游戏)以及特定的硬件配置(例如,GPU型号和图形驱动程序版本)。
在步骤4处,远程***106可以选择性地从已将信息110报告给远程***106的客户端机器104请求114并接收已编译的着色器代码116。任何合适的算法可以被用于选择性地请求114已编译的着色器代码116,如下面更详细描述的。在一个示例中,远程***106可以从带有第一组着色器ID的第一客户端机器104(1)接收第一信息110。在示例实施方式中,一旦远程***106-从带有与第一客户端机器104(1)相同硬件配置的第二客户端机器104(2)-其包括匹配之前从第一客户端机器104(1)接收的着色器ID的至少一个着色器ID-接收到第二信息110,远程***106就可以将对与匹配的着色器ID相对应的已编译的着色器代码的请求114发送到第二客户端机器104(2)。换句话说,在一些实施方案中,一旦远程***106从带有相同硬件配置的预定义数量(例如,两个)不同的客户端机器104接收到相同的着色器ID,远程***106就可以请求已编译的着色器代码。
在接收到已编译的着色器代码116之后,远程***106可以在步骤5处与其相应的着色器ID相关联地(以及与相应的硬件配置和应用程序ID相关联地)存储已编译的着色器代码116。另外,在步骤5处,远程***106可以使用一种算法来确定何时准备已编译的着色器代码116以重新分配到带有相同硬件配置的其他客户端机器104。为此,下面更详细地描述了详细算法(例如,基于着色器ID的普及性,确定用户帐户是否是受信任的等的算法)。一旦远程***106确定重新分配已编译的着色器代码116(例如,使已编译的着色器代码116可用于发出请求的客户端机器104),远程***106就可以准备已编译的着色器代码116以进行重新分配(例如,通过构建包括已编译的着色器代码116的可重新分配的数据结构,压缩已编译的着色器代码116等进行)。因此,在步骤5后,远程***106可以确定使用于特定应用程序ID的已编译的着色器代码116可用于带有特定硬件配置的发出请求的客户端机器104。
在步骤6处,在客户端机器104(N)可以将请求118发送到远程***106以接收用于特定程序(例如,视频游戏)的已编译的着色器代码。在发送请求118时,客户端机器104(N)可以在安装程序的过程中,或客户端机器104(N)可能已经安装程序并且可以在加载客户端应用程序的过程中。请求118可以包括发出请求的客户端机器104(N)的硬件配置和程序的应用程序ID,其告诉远程***106寻找可用于特定硬件配置和特定程序(例如,视频游戏)的已编译的着色器代码116。在运行的示例中,远程***106可能之前已经准备了用于源于客户端机器104(N)的请求118中所指定的应用程序ID和硬件配置的已编译的着色器代码116,并且因此发出请求的客户端机器104(N)接收到与其硬件配置相关以及与所讨论的应用程序ID相关的已编译的着色器代码116。
在步骤7处,客户端机器104(N)将已编译的着色器代码116预缓存在预定的存储器位置中以在执行程序(例如,视频游戏)期间使用。通过这样做,即使客户端机器104(N)可能之前从未编译用于所讨论的特定程序(例如,视频游戏)的着色器,但是客户端机器104(N)现在能够利用从远程***106接收的已编译的着色器代码116,其是之前由带有相同硬件配置的另一个客户端机器104在另一个客户端机器104上执行程序期间编译的。这消除了在客户端机器104(N)上的计算密集型处理步骤(即,编译着色器的一个或多个步骤),这在其上执行程序期间节约了在客户端机器104(N)上的处理资源(例如,更快的加载时间,减轻/消除了游戏中的卡顿或卡死等)。根据由远程***106使用的算法和/或特定视频游戏的普及性,可以在游戏发行的几小时内并且可能是几分钟内使得用于新的视频游戏的已编译的着色器代码可用于发出请求的客户端机器104。这是因为当多个用户在视频游戏发行后立即开始玩视频游戏时,着色器代码分配可以迅速增加。此外,测试用户组甚至可以在视频游戏的发行日期之前开始生成已编译的着色器代码116,这可以在一般公众的第一用户开始玩游戏时使得至少一些已编译的着色器代码116可用于一般公众的第一用户。
图2示出了示出客户端机器104的示例部件的框图以及用于向/从图1的远程计算***106上传和/或下载已编译的着色器的示例过程200的流程图。在所示的实施方式中,客户端机器104除其他部件之外包括处理器(诸如中央处理单元(CPU)202和图形处理单元(GPU)204)、显示器206、存储器208(或非暂时性计算机可读介质208)和通信接口210。尽管图2的示例客户端机器104表明客户端机器104包括嵌入的显示器206,但是客户端机器104事实上可以省略显示器,而是可以改为联接到***显示器206。因此,显示器206旨在表示相关联的显示器206,而无论其是嵌入客户端机器104中还是连接到客户端机器(通过有线或无线协议进行)。
存储器208(或非暂时性计算机可读介质208)可以包括易失性和非易失性存储器,可移除和不可移除的介质,其以任何方法或技术实施以存储信息,诸如计算机可读指令、数据结构、程序模块或其他数据。这种存储器包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储装置、磁盒、磁带、磁盘存储装置或其它磁性存储装置、RAID存储***或可用来存储期望信息并可由计算装置存取的任何其它介质。计算机可读介质208可以实施为计算机可读存储介质(“CRSM”),其可以是可由处理器202/204存取以执行在存储器208上存储的指令的任何可用物理介质。在一个基本的实施方式中,CRSM可以包括随机存取存储器(“RAM”)和闪存。在其他实施方式中,CRSM可以包括但不限于只读存储器(“ROM”)、电可擦除可编程只读存储器(“EEPROM”)或可用于存储期望信息并且可由处理器202/204存取的任何其他有形介质。
现在参考图2中所示的过程200。本文所述的过程被示为逻辑流程图中的一系列框,其表示可以在硬件、软件或其组合中实施的一系列操作。在软件的上下文中,框表示计算机可执行指令,其在由一个或多个处理器执行时,执行所述的操作。一般来说,计算机可执行指令包括执行特定功能或实施特定抽象数据类型的例程、程序、对象、部件、数据结构等。所描述的操作顺序并不旨在被解释为限制,并且任何数量的所述框可以按任何顺序和/或并行地组合以实施过程。
图2是用于向/从图1的远程计算***106上传和/或下载已编译的着色器的示例过程200的流程图。出于讨论的目的,假定执行过程200的客户端机器104之前已安装客户端应用程序(例如,视频游戏客户端212),该客户端应用程序被配置为在相关联的显示器206上执行渲染图形的程序。这种程序可以在存储器208中进行安装(例如,从远程***106下载)和维护。在图2的示例中,程序是视频游戏,并且当视频游戏首次安装在客户端机器104上,视频游戏在存储器208中进行维护作为带有未编译的着色器214(或在玩游戏期间编译着色器之前的以字节码表示的着色器)的视频游戏。
在222处,客户端机器104的用户102可以加载视频游戏客户端212(即,被配置为执行在显示器206上渲染图形的多个所安装程序中的一个的客户端应用程序)。加载的视频游戏客户端212为用户102提供了执行带有未编译的着色器214的之前下载的视频游戏和/或下载新的视频游戏作为带有未编译的着色器214的视频游戏的能力。
在224处,客户端机器104可以将对用于视频游戏(在这里,视频游戏表示在程序执行期间在显示器206上渲染图形的程序)的已编译的着色器代码的请求118发送到远程计算***106。在框224处发送的请求118可以以各种方式触发,诸如通过用户102在框222处加载视频游戏客户端212和/或用户102下载新的视频游戏进行。在后一种情况下,请求118可以在下载新的视频游戏之前、期间或之后进行传输。在框224处发送的请求118可以包括(或指定)客户端机器104的硬件配置,诸如GPU204的型号和/或图形驱动程序216的版本。在框224处发送的请求118还可以包括(或指定)对应于带有未编译的着色器214的一个或多个视频游戏的一个或多个应用程序ID。例如,视频游戏客户端212可以在框224处枚举所有的存在未编译的着色器214的所安装视频游戏并且将那些游戏的相应的应用程序ID连同客户端机器104的硬件配置发送到远程***106。
在框226处,客户端机器104可以基于来自远程***106的响应确定已编译的着色器代码是否可用于程序。例如,远程***106可以通过提供所请求的着色器代码不可用于下载的指示来响应于在框224处发送的请求118。这可能是由于各种原因所导致的情况,如将在下面更详细描述的。在至少一些实例中,远程***106可以拥有由客户端机器104请求的已编译的着色器代码,但却可能已确定无法使其可用于重新分配。如果客户端机器104接收到所请求的着色器代码是不可用的指示,过程200则遵循“否”的路径从框226到达框228,在框228处,响应于用户输入,客户端机器104可以启动带有未编译的着色器214的视频游戏(即,在客户端机器104上执行视频游戏程序)。
在230处,客户端机器104的图形驱动程序216可以将一组着色器(作为已编译的着色器)编译成可由GPU 204执行的机器代码。在框230处的编译可以包括将着色器的字节码表示编译成可由GPU 204执行并且特定于GPU 204的特定型号的着色器的低级机器代码表示。当游戏加载时和/或在玩游戏期间,可以执行在框230处的编译。
在232处,图形驱动程序216可以在预定义的存储器位置218中并且与视频游戏的应用程序ID相关联地缓存已编译的着色器(已编译的着色器代码116)。这在图2中示为“带有应用程序ID的已编译的着色器代码220”。在一些实施方案中,视频游戏客户端212可以指示(使用应用程序编程接口(API))图形驱动程序216以在预定义的存储器位置218处存储已编译的着色器代码116,该预定义的存储器位置218可以是不同于通常用于存储磁盘上缓存的典型***位置的位置。用于在预定义的存储器位置218处存储已编译的着色器代码116的该指示可以与在框232处的缓存同时发生,或发生在框232处的缓存之前的时间点。图形驱动程序216要存储已编译的着色器代码216的预定义的存储器位置218可以是与所讨论的特定视频游戏相关联的目录。以这种方式,已编译的着色器代码116可以被存储在对应于不同的视频游戏的目录(用应用程序ID进行标记的目录)中。
在234处,可以停止或退出视频游戏(例如,响应于用户102退出游戏等)。因此,在框234处,客户端机器104可以停止视频游戏的执行。在该时间点,对于在视频游戏的执行期间已编译的任何着色器而言,将会有与视频游戏的应用程序ID相关联的在预定义的存储器位置218中进行缓存的相应的已编译的着色器代码116。
在236处,响应于停止视频游戏的执行,视频游戏客户端212可以打开和读取/解析缓存的着色器代码116(例如,通过打开在预定义的存储器位置218中的文件夹并读取/解析其内容进行)以生成(或以其他方式获得)在视频游戏的执行期间编译的用于着色器的着色器ID。在一些实施方案中,着色器ID采用在框236处由图形驱动程序216的缓存内部生成的并且随后由视频游戏客户端212从缓存条目读出的着色器密钥的形式。在一些实施方案中,当下载视频游戏时,着色器ID设有未已编译的着色器代码,并且这些着色器代码随后可以在框236处从缓存条目读出。在一些实施方案中,着色器ID由视频游戏客户端212以确定的方式基于已编译的着色器代码116生成,使得以相同方式编译着色器的带有相同硬件配置的所有客户端机器104将生成相同的着色器ID(或着色器密钥)。
如在子框238处所示,视频游戏客户端212还可以对从缓存条目读取的用于已编译的着色器的机器代码进行散列,并且该散列值可以与一组元组(每个元组包括着色器ID/密钥和用于该着色器的已编译的机器代码的散列值)中的着色器ID(或着色器密钥)一起发送到远程***106。
在240处,客户端机器104可以将信息110发送(或上传)到远程***106,该信息包括由客户端机器104编译的着色器的至少所述组着色器ID。在框240处发送的信息110还可以包括客户端机器104的硬件配置、视频游戏的应用程序ID和/或用于已编译的着色器的机器代码的散列值。任何或所有的这种信息110可以在接收到的时候以由远程***106消耗的“着色器使用报告”进行发送。在一个示例中,由单个客户端机器104发送的单个着色器使用报告可以包括用于单个视频游戏的多达数万个着色器的信息(例如,着色器ID等),特别是如果在客户端机器104上首次玩视频游戏的话。在框226之后的源于“否”路线的过程200的分支表示用于在远程***106收集与着色器相关的信息的“遥测”方法。考虑到大量的客户端机器104可以执行过程200,远程***106可以收集在框240处从具有不同硬件配置的大量客户端机器104上传的所述信息110。
尽管图2描绘了一个场景,其中在框234处客户端机器104停止执行程序(例如,视频游戏)之后,在框240处将信息110发送(或上传)到远程***106,但是应当理解,可以实时地或基本上实时地将信息110发送(例如,通过流传输进行)到远程***106。例如,代替在框240处上传信息110之前等待在框234处退出游戏,客户端机器104可以在图形驱动程序编译和缓存着色器代码时实时地流传输或以其他方式发送信息110。
返回到框226,如果远程***106具有可用于发出请求的客户端机器104以进行预缓存的已编译的着色器代码,过程200则可以遵循“是”路径从框226到达框242,在框242处,客户端机器104接收(或下载)对应于所讨论的视频游戏的硬件配置和应用程序ID的已编译的着色器代码116,并且客户端机器104在预定义的存储器位置218处预缓存(或存储以供后续使用)已编译的着色器代码116中的至少一部分。为了下载已编译的着色器代码116,远程***106可以向客户端机器104提供信息(例如,标识符、统一资源定位符(URL)等)以告诉客户端机器104要去哪里下载已编译的着色器代码116。客户端机器104可以下载压缩形式(例如,采用压缩文件)的已编译的着色器代码116。
在244处,客户端机器104可以执行视频游戏,其中执行视频游戏包括GPU 204执行从预定义的存储器位置218检索的已编译的着色器代码116中的至少一部分以代替客户端机器104的图形驱动程序216自己创建已编译的着色器代码。也就是说,在框242处的预缓存使客户端机器104避免了必须要自己编译着色器。取而代之的是,下载的着色器代码116可以在游戏执行期间用于优化程序执行的性能。
图3示出了示出远程计算***106的示例部件的框图以及用于从客户端机器104接收信息110,编目包括在接收的信息110中的着色器ID,选择性地请求已编译的着色器代码116以及选择性准备已编译的着色器代码116以进行重新分配的示例过程300的流程图。在示出的实施方式中,远程***106除其他部件之外包括一个或多个处理器302、存储器304(或非暂时性计算机可读介质304)以及通信接口306。存储器304(或非暂时性计算机可读介质304)可以包括易失性和非易失性存储器,可移除和不可移除的介质,其以任何方法或技术实施以存储信息,诸如计算机可读指令、数据结构、程序模块或其他数据。这种存储器包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储装置、磁盒、磁带、磁盘存储装置或其它磁性存储装置、RAID存储***或可用来存储期望信息并可由计算装置存取的任何其它介质。计算机可读介质304可以实施为计算机可读存储介质(“CRSM”),其可以是可由处理器302存取以执行在存储器304上存储的指令的任何可用物理介质。在一个基本的实施方式中,CRSM可以包括随机存取存储器(“RAM”)和闪存。在其他实施方式中,CRSM可以包括但不限于只读存储器(“ROM”)、电可擦除可编程只读存储器(“EEPROM”)或可用于存储期望信息并且可由处理器302存取的任何其他有形介质。着色器分配模块308可以表示存储在存储器304中的指令,在由处理器302执行时,该指令使远程***106执行本文所述的技术和操作。
现在参考图3中所示的过程300。在314处,远程***106可以从客户端机器114接收信息110(例如,作为过程200的“遥测”分支的一部分-遵循源于框226的“否”路径,如上所述)。由特定客户端机器104发送的接收信息110可以包括在客户端机器104上执行视频游戏期间由客户端机器104的图形驱动程序216编译的着色器的至少一组着色器ID。此外,在框314处接收的信息110可以包括在“着色器使用报告“中的附加信息,诸如客户端机器104的硬件配置、所执行的视频游戏的应用程序ID、用于已编译的着色器的机器代码的散列值、客户端机器104的装置ID等。
在316处,远程***106可以按照(或根据)硬件配置和应用程序ID编目其在框314处接收的一组着色器ID。例如,目录112可以包括多个组或桶310(1)至(M),所述多个组或桶310(1)至(M)是按照应用程序ID和硬件配置的唯一组合进行分类的。例如,以带有硬件配置“1”的第一客户端机器104(1)为例,当在框314处从第一客户端机器104(1)接收到第一组着色器ID时,可以在框316处将第一组着色器ID编目成第一桶310(1)(或组),并且该桶310(1)可以用从在框314处从第一客户端机器104(1)接收的信息110提取的第一客户端机器104(1)的应用程序ID和硬件配置进行标记。同样地,第二客户端机器104(2)可以发送第二组着色器ID,并且该第二组着色器ID可以在框316处被编目成第二桶310(2),该第二桶310(2)可以用从在框314处从第二客户端机器104(2)接收的信息110提取的第二客户端机器104(2)的应用程序ID和第二硬件配置“2”进行标记。这可以继续适用于任何数量的“M”桶,其取决于报告遥测信息的客户端机器104的数量,取决于那些客户端机器104是否具有不同的硬件配置和/或取决于在那些客户端机器104上执行了多少不同的游戏。
在318处,远程***106可以确定是否要请求用于任何接收的着色器ID的已编译的着色器代码。在框318处做出该确定的算法可能会发生变化,如将在下面更详细描述的。
如果在框318处远程***106确定目前不要请求已编译的着色器代码,过程300则可以遵循“否”路径从框318返回到框314,在框314处,远程***106继续从客户端机器104收集/接收信息110(例如,着色器使用报告)。当远程***106确定要请求用于接收的着色器ID的已编译的着色器代码,过程300则可以遵循“是”路径从框318到达框320,在框320处,远程***106将发送对用于与远程***106已接收的着色器ID相对应的一个或多个着色器的已编译的着色器代码的请求114。
在322处,远程***106可以接收其从特定客户端机器104请求的已编译的着色器代码116,并且远程***106可以与相应的着色器ID(例如,在目录112中)相关联地存储已编译的着色器代码。为了说明,如果远程***106请求用于第一桶310(1)中的一个或多个着色器ID的已编译的着色器代码,并且该请求被发送到带有第一桶310(1)所标记有的硬件配置的客户端机器104,远程***106则可以在第一桶310(1)中并且与相应着色器ID相关联地进行接收的着色器代码的存储。
如由子框324所示,远程***106可以在存储接收的着色器代码之前计算校验散列值以确保其是有效的代码。也就是说,远程***106可以在框322处对从客户端机器104接收的已编译的着色器代码进行散列以生成已编译的着色器代码的校验散列值。回想一下,已编译的着色器代码的散列值可以在框314处在信息110中接收到。因此,在框324处计算的校验散列值可以与在之前接收的散列值进行比较,该之前接收的散列值存储在带有在目录112中相应着色器ID的元组中。如果校验散列值匹配之前从客户端机器104接收并且进行编目的已编译的着色器代码的散列值,代码则可以被认为是有效的/可信的,并且可以在框322处由远程***106存储已编译的代码。
在326处,远程***106可以确定是否要准备已编译的着色器代码以进行重新分配来作为“准备用于进行重新分配的已编译的着色器代码312”。在框326处做出该确定的算法可能会发生变化,如将在下面更详细描述的。
如果在框326处远程***106确定目前不要准备已编译的着色器代码以进行重新分配,过程300则可以遵循“否”路径从框326返回到框314,在框314处,远程***106继续从客户端机器104收集/接收信息110(例如,着色器使用报告)。当远程***106确定要准备已编译的着色器代码以进行重新分配,过程300则可以遵循“是”路径从框326到达框328,在框328处,远程***106可以通过使已编译的着色器代码与相应的应用程序ID和硬件配置相关联来创建“准备用于重新分配的已编译的着色器代码312”。在一个示例中,远程***106可以针对给定的应用程序ID和硬件配置(即,针对给定的桶310)构建已编译的着色器代码的可重新分配的表示(或数据结构),并且该代码可以在请求时易于分配给客户端机器104的位置中进行存档。在一些实施方案中,可以通过压缩已编译的着色器代码,诸如通过创建压缩文件等来准备已编译的着色器代码以进行重新分配312。
图4是用于基于客户端机器104的硬件配置来将已编译的着色器代码发送到发出请求的客户端机器104的示例过程400的流程图。如由图3和图4中的换页参考“A”所示,过程400可以从图3的框328继续,诸如在已编译的着色器代码已由远程***106准备好并且可用于发出请求的客户端机器104以在那些发出请求的客户端机器104进行预缓存之后。
在402处,远程***106可以从客户端机器104接收信息作为对已编译的着色器代码的请求118的一部分,该已编译的着色器代码涉及客户端机器104的特定硬件配置并且涉及特定程序(例如,视频游戏)的应用程序ID。因此,在框402处接收到的信息可以包括发出请求的客户端机器104的硬件配置以及对应于可以安装、或当前正在安装在客户端机器104上的程序(例如,视频游戏)的应用程序ID。
在404处,远程***106可以确定任何已编译的着色器代码是否可用于客户端机器104的硬件配置以及与该请求相关联的应用程序ID。在一个示例中,远程***106可以分析所准备的着色器代码312以确定已准备进行重新分配的已编译的着色器代码312中的任一个是否与匹配的硬件配置和匹配的应用程序ID相关联。如果找到匹配的硬件配置和匹配的应用程序ID,这则指示带有匹配的硬件配置的另一个客户端机器104之前在程序的执行期间已执行相同的程序(例如,视频游戏)和已编译的着色器代码,以及远程***106随后已接收到已编译的着色器代码并且准备其以进行重新分配。如果是这样的情况,过程400则可以遵循“是”路径从框404到达框406,在框406处,远程***106可以将已编译的着色器代码发送到发出请求的客户端机器104以由客户端机器104的GPU 204执行,同时在该客户端机器104上执行带有应用程序ID的视频游戏。
如果,在另一方面,远程***106在框404处确定没有已编译的着色器代码可用于发出请求的客户端机器104的特定硬件配置和应用程序ID,过程400则可以遵循“否”路径从框404到达框408,在框408处,远程***106可以通知客户端机器所请求的着色器代码是不可用的。
图5是用于选择性请求已编译的着色器代码的示例过程500的流程图。如所指示的,过程500可以表示图3的过程300的在框318处的操作的子过程,并且过程500可以在远程***106已接收至少一个着色器ID(或着色器密钥)之后执行。
在502处,在作为在客户端机器104上执行视频游戏的结果已经从客户端机器104接收到包括着色器ID(着色器密钥)的客户端信息110之后,远程***106可以确定,对于从客户端机器104接收的给定着色器ID来说,远程***106是否已从至少预定义数量的不同客户端机器104接收到该着色器ID。预定义的数量是可配置的。如果远程***106已经从至少预定义数量的不同客户端机器104接收到相同的着色器ID,过程500则可以遵循“是”路径从框502到达框504,在框504处,远程***106可以将对与着色器ID相对应的已编译的着色器代码116的请求114发送到客户端机器104,该客户端机器104将着色器ID发送到远程***106。
如果,在另一方面,远程***106尚未从至少预定义数量的不同客户端机器104接收到相同的着色器ID,过程500则可以遵循“否”路径从框502到达框506,在框506处,远程***106可以等待额外的客户端机器104来发送着色器ID以及在新接收的着色器ID之后重复过程500。
在框502处预定义的数量是可配置的。如果预定义数量是两个,一旦远程***106从两个不同的客户端机器104接收到相同的着色器ID,远程***106则请求已编译的着色器代码116。如果预定义数量大于二,远程***106则等待直到更多的客户端机器104在请求已编译的着色器代码116之前发送相同的着色器ID为止。在一些实施方案中,在框504处在请求已编译的着色器代码之前要满足的一个额外的标准可以是不同的客户端机器具有相同的硬件配置。也就是说,对于设置为“2”的预定义数量而言,对已编译的着色器代码504的请求可以在远程***106从具有相同硬件配置(例如,相同的GPU型号和相同的图形驱动程序的版本)的两个不同的客户端机器104接收到相同的着色器ID(或着色器密钥)时触发。因此,过程500是选择性地请求已编译的着色器代码,而不是在接收到对应的着色器ID时立即请求已编译的着色器代码的示例。
图6是选择性准备已编译的着色器代码以进行重新分配的示例过程600的流程图。如所指示的,过程600可以表示图3的过程300的在框326处的操作的子过程,并且过程600可以在远程***106已从一个或多个客户端机器104接收已编译的着色器代码之后执行。
在602处,在已经从客户端机器104请求和接收到已编译的着色器代码116之后,远程***106可以确定与发送已编译的着色器代码116的客户端机器104相关联的用户帐户是否是受信任的帐户。例如,远程***106可以维护可以在框602进行检查的受信任的用户帐户列表。这些受信任的用户账户可以与已依法获得对所讨论的视频游戏的许可证的用户/客户端机器相关联。另外地或替代地,受信任的用户帐户可以绑定到游戏发行商或开发者(例如,在发行日期之前执行视频游戏的用户)和/或操作测试实验室的用户帐户,其中受信任的用户的任务是在视频游戏发行至一般公众之前测试游戏的漏洞和其他问题。远程***106被配置为自动信任这样的用户,并且因此信任从其接收的已编译的着色器代码116。
如果在框602处确定已编译的着色器代码116是从受信任的用户帐户接收的,过程600则可以遵循“是”路径从框602到达框604,在框604处,普及性阈值可以被设置为1。否则,如果远程***602无法信任发送已编译的着色器代码的用户102和/或机器104,过程600则可以遵循“否”路径从框602到达框606,在框606处,普及性阈值可以被设置为大于1的数(例如,为10的普及性阈值)。
在608处,远程***106可以-针对已编目成具有特定硬件配置和特定应用程序ID的组(或桶310)的特定着色器ID(或着色器密钥)-来对已将特定着色器ID发送到远程***106的不同客户端机器104的数量进行计数。换句话说,远程***106可以监测带有报告相同着色器ID(或着色器密钥)和相同应用程序ID的相同硬件配置的不同客户端机器104的数量。
在610处,远程***106可以确定该计数(或报告相同着色器ID的不同客户端机器104的数量)是否满足或超过普及性阈值。如果在框610处,该数不满足普及性阈值,过程600则可以遵循“否”路径从框610到达框608,在框608处,远程***106继续对报告着色器ID的客户端机器104的数量进行计数(或以其他方式进行监测)。如果在框610处,该计数(即,报告相同着色器ID的不同客户端机器104的数量)满足或超过普及性阈值,过程600则可以遵循“是”路径从框610到达框612,在框612处,可以执行可选的校验步骤以确定接收的着色器代码是否匹配从一个或多个额外的客户端机器104接收的已编译的着色器代码。换句话说,远程***106可以从已报告相同着色器ID的多个不同客户端机器104请求并接收其认为是相同的已编译的着色器代码116,并且可以在框612处比较从不同的客户端机器104接收的已编译的着色器代码116。如果在框612处检测到冲突-基于对来自不同客户端机器104的已编译的着色器代码的比较,过程600则可以遵循“否”路径从框612到达框614,在框614处,可以基于检测到的冲突丢弃所接收的着色器代码。来自带有相同硬件配置的客户端机器104的不匹配的着色器代码可以指示客户端机器104中的一个提供了“假”代码,其可能损坏或包括恶意软件。
如果在框612处校验步骤通过检验-通过确定从不同客户端机器接收的着色器代码是相同的(匹配的),过程600则可以遵循“是”路径从框612到达框616,在框616处,远程***106准备已编译的着色器代码以进行重新分配(见图3的312),诸如通过构建可重新分配的数据结构并且使已编译的着色器代码(在可重新分配的数据结构中)与相应的应用程序ID和硬件配置相关联而进行。
因为图6的普及性阈值是可配置的,所以远程***106可以根据所感知的无意地分配损坏或恶意代码的社区信任和/或风险和/或灵敏度来进行调整。而且,应当理解,在框604处将普及性阈值设置为1(这发生在当确定用户帐户是受信任的帐户时)有效地导致过程600的精简版本,其中自动或立即准备从受信任的用户接收的已编译的着色器代码以进行重新分配,这是因为远程***106没有等待任何其他客户端机器发送对应于该着色器代码的相同着色器ID,并且远程***106将不会有任何其他着色器代码,以便校验从受信任的用户帐户接收的着色器代码(不是必需如此)。
图7是用于通过丢弃下载的着色器代码中的一部分、重新编译对应于丢弃的着色器代码的着色器以及上传关于已重新编译的着色器的信息来实施完整性检查的示例过程700的流程图。
在702处,客户端机器104-在已从远程***106请求已编译的着色器代码之后,如本文所述-可以接收用于客户端机器104的硬件配置和所讨论的程序(例如,视频游戏)的应用程序ID的已编译的着色器代码116。
在704处,在客户端机器104可以丢弃已编译的着色器代码116中的至少一些作为丢弃的着色器代码。例如,客户端机器104可以是客户端机器104的随机子集的一部分,其被配置(例如,经由视频游戏客户端212从远程***106接收到指令和/或硬编码指令等)为丢弃其从远程***106接收的已编译的着色器的一部分(例如,10%),尽管假定其是“好“的着色器代码(即,未损坏和/或不包括恶意软件等)。以这种方式丢弃着色器代码的客户端机器104的数量可以是可由远程***106配置的,并且可以表示执行视频游戏的用户群中的一小部分(例如,10%)。
在706处,客户端机器104可以预缓存除了丢弃的着色器代码之外的已编译的着色器代码中的剩余部分。已编译的着色器代码中的剩余部分可以存储在预定义的存储器位置218处。
在708处,客户端机器104可以开始执行视频游戏,该视频游戏使用对应于所接收的着色器代码的着色器,其中的至少一部分在预定的存储器位置218处进行缓存。
在710处,客户端机器104可以编译和缓存对应于丢弃的着色器代码的着色器。这可以在加载屏幕期间或在执行游戏期间实时地完成。当谈到利用对应于在框706处预缓存的所接收的着色器代码的着色器时,客户端机器104的GPU 204执行已编译的着色器代码,以代替图形驱动程序216靠自己编译相应的着色器,这节省了客户端机器104的资源。
在712处,视频游戏客户端212可以停止游戏的执行,诸如响应于用户102退出视频视频。
在714处,响应于停止视频游戏的执行,视频游戏客户端212可以打开和读取/解析用于新编译的着色器(在框710处编译的那些着色器)的缓存着色器代码116,以生成用于那些新编译的着色器的着色器ID(或着色器密钥)。
如在子框716处所示,视频游戏客户端212还可以对用于新编译的着色器的机器代码进行散列,并且该散列值可以与一组元组(每个元组包括着色器ID/密钥和用于该着色器的已编译的机器代码的散列值)中的着色器ID(或着色器密钥)一起发送到远程***106。
在718处,客户端机器104可以将信息110发送(或上传)到远程***106,该信息110包括由客户端机器104编译的新编译的着色器的至少一组着色器ID。在框718处发送的信息110还可以包括客户端机器104的硬件配置、在框708处执行的视频游戏的应用程序ID和/或用于已编译的着色器的机器代码的散列值。任何或所有的这种信息110可以在接收到的时候以由远程***106消耗的“着色器使用报告”进行发送。
图8是使用图7的过程700的完整性检查来停止已经分配的着色器代码的进一步分配的示例过程800的流程图。图7和图8中的换页参考“B”指示过程800可以从图7的过程700的框718继续。
在802处,远程***106可以从客户端机器114接收信息110(例如,作为过程200的“遥测”分支的一部分,如上所述)。从过程700继续,在框802处接收到该信息110可以包括对应于由发送客户端机器104丢弃的(在过程700的框704处)着色器代码的新编译的着色器的至少一组着色器ID,并且该客户端机器104可以与受信任的用户帐户(例如,被指定有意地丢弃已编译的着色器作为在***上的完整性检查的一部分的用户帐户)相关联。此外,在框802处接收的信息110可以包括在“着色器使用报告“中提供的附加信息,诸如客户端机器104的硬件配置、所执行的视频游戏的应用程序ID、用于所有已编译的着色器的机器代码的散列值、客户端机器104的装置ID等。
在804处,远程***106可以确定对应于已经分配到一个或多个客户端机器104的所接收着色器ID中的一个或多个的已编译的着色器代码,诸如通过实施过程400,如本文所述,以及记录关于所发送的着色器代码的信息而进行。
在806处,远程***106可以从客户端机器104(即,丢弃另一个着色器代码并且重新编译对应于在图7的过程700中丢弃的着色器代码的着色器的相同客户端机器104)请求已编译的着色器代码。
在808处,远程***106可以接收其从客户端机器104请求的已编译的着色器代码116。
在810处,远程***106可以比较所接收的着色器代码116与已经分配的着色器代码。
在812处,远程***106可以基于在框810处的比较确定在框808处从客户端机器104接收的已编译的着色器代码116是否匹配已经分配的着色器代码。
如果比较的着色器代码匹配,过程800则可以遵循“是”路径从框812到达框814,在框814处,远程***106继续在请求时分配已编译的着色器代码116。如果比较的着色器代码不匹配,过程800则可以遵循“否”路径从框812到达框816,在框816处,远程***106可以停止已经分配的着色器代码的进一步分配,诸如通过避免将该已经分配的着色器代码发送到额外的客户端机器104进行。
如在图7和图8的组合过程中所述的,故意丢弃原本被认为是“好的”着色器代码中的一部分(即,未损坏、不包括恶意软件等)增加了更多的信任至***中。例如,坏蛋可能尝试在客户端机器104上创建一组用户帐户,其生成伪装成着色器代码(带有匹配“好”的着色器代码的着色器ID的着色器ID)的恶意代码,以便使其通过远程***106重新分配。然而,因为恶意代码不同于实际上是“好”的着色器代码,所以在框808处远程***106最终将从客户端机器104接收“好”的着色器代码,并且将在框812处捕捉到差异以停止恶意代码的进一步分配。
故意丢弃着色器代码中的一部分还会防止代码发生意外损坏(例如,比特翻转),这可能导致视频游戏崩溃或在玩游戏期间导致渲染问题。
尽管已用特定于结构特征的语言描述了主题,但是应当理解,所附权利要求书中限定的主题不必限于所述特定特征。相反,公开了特定特征作为实施权利要求书的说明性形式。

Claims (20)

1.一种客户端机器,其包括:
中央处理单元;
图形处理单元;以及
存储计算机可执行指令的存储器,所述计算机可执行指令在由所述中央处理单元执行时,使得所述客户端机器:
加载客户端应用程序,所述客户端应用程序被配置为执行在与所述客户端机器相关联的显示器上渲染图形的多个所安装程序中的一个;
将对所述多个所安装程序中的第一程序的已编译的着色器代码的请求发送到远程计算***,所述请求包括所述客户端机器的硬件配置;
接收来自所述远程计算***的表示所述已编译的着色器代码不可用的指示;
执行所述第一程序;
由所述客户端机器的图形驱动程序编译一组着色器作为所述图形处理单元可执行的机器代码中的已编译的着色器;
由所述图形驱动程序在预定义的存储器位置中并且与所述第一程序的应用程序标识符相关联地缓存所述已编译的着色器;
生成用于所述已编译的着色器的一组着色器标识符;以及
将信息发送到所述远程计算***,所述信息包括:
所述客户端机器的所述硬件配置,
所述第一程序的所述应用程序标识符,以及
用于所述已编译的着色器的所述一组着色器标识符。
2.如权利要求1所述的客户端机器,其中所述第一程序是视频游戏。
3.如权利要求1所述的客户端机器,其中所述硬件配置指定所述图形驱动程序的版本和所述图形处理单元的型号。
4.如权利要求1所述的客户端机器,其中所述计算机可执行指令在由所述中央处理单元执行时,还使得所述客户端机器对用于所述已编译的着色器代码的所述机器代码进行散列以生成一组散列值,并且其中所述一组散列值包括在被发送至所述远程计算***的所述信息中。
5.一种用于在客户端机器之间分配着色器的方法,其包括:
由远程计算***从第一客户端机器接收第一信息,所述第一信息包括:
所述第一客户端机器的第一硬件配置,
第一程序的应用程序标识符,在客户端机器上执行所述第一程序期间所述第一程序在与所述客户端机器相关联的显示器上渲染图形,以及
在所述第一客户端机器上执行所述第一程序期间由所述第一客户端机器的图形驱动程序编译的着色器的一组着色器标识符,
由所述远程计算***根据所述第一硬件配置和所述应用程序标识符来编目所述一组着色器标识符;
由所述远程计算***并且向所述第一客户端机器请求对应于所述着色器中的一个或多个着色器的已编译的着色器代码;
由所述远程计算***从所述第一客户端机器接收所述已编译的着色器代码;
使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配;
由所述远程计算***从第二客户端机器接收第二信息,所述第二信息包括:
所述第二客户端机器的第二硬件配置,以及
所述第一程序的所述应用程序标识符;
由所述远程计算***确定所述第二硬件配置匹配所述第一硬件配置;以及
由所述远程计算***将所述已编译的着色器代码发送到所述第二客户端机器以供在所述第二客户端机器上执行所述第一程序期间由所述第二客户端机器的图形处理单元执行。
6.如权利要求5所述的方法,其中所述第一程序是视频游戏。
7.如权利要求5所述的方法,其中所述一组着色器标识符包括一组着色器密钥,并且其中将所述一组着色器密钥从所述第一客户端机器接收在一组元组中,各个元组包括着色器密钥和用于对应于所述着色器密钥的着色器的所述已编译的着色器代码的散列值。
8.如权利要求7所述的方法,其还包括:
由所述远程计算***对从所述第一客户端机器接收的所述已编译的着色器代码进行散列以生成所述已编译的着色器代码的校验散列值,
其中所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配至少部分地基于匹配在所述一组元组中的一元组中的从所述第一客户端机器接收的所述已编译的着色器代码的所述散列值的所述校验散列值。
9.如权利要求5所述的方法,其中确定所述第二硬件配置匹配所述第一硬件配置包括确定所述第一硬件配置和所述第二硬件配置指定了共同的图形驱动程序版本和共同的图形处理单元型号。
10.如权利要求5所述的方法,其中所述请求所述已编译的着色器代码是响应于所述远程计算***已从至少预定义数量的不同的客户端机器接收到所述一个或多个着色器的一个或多个着色器标识符执行的,所述不同的客户端机器包括所述第一客户端机器和至少一个另外的客户端机器。
11.如权利要求5所述的方法,其还包括,在所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配之前:
由远程计算***从具有不同的硬件配置并且提供不同的应用程序标识符的多个客户端机器接收另外的着色器标识符;
由所述远程计算***按照硬件配置和应用程序标识符来编目所述另外的着色器标识符;
由所述远程计算***针对所述一个或多个着色器的特定着色器标识符对将所述特定着色器标识符发送到所述远程计算***的不同客户端机器的数量进行计数;以及
确定所述不同客户端机器的所述数量满足或超过了阈值数量,
其中所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配至少部分地基于所述确定所述不同客户端机器的所述数量满足或超过了所述阈值数量。
12.如权利要求5所述的方法,其还包括,在所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配之前:
确定与所述第一客户端机器相关联的用户帐户是受信任的帐户,
其中所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配至少部分地基于所述确定所述用户帐户是受信任的帐户。
13.如权利要求5所述的方法,其还包括,在所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配之前:
由远程计算***从具有匹配所述第一硬件配置的硬件配置的多个客户端机器接收另外的着色器标识符;
除了所述从所述第一客户端机器接收所述已编译的着色器代码之外,所述远程计算***还从所述多个客户端机器中的至少一个客户端机器接收所述已编译的着色器代码;以及
确定从所述至少一个客户端机器接收的所述已编译的着色器代码匹配从所述第一客户端机器接收的所述已编译的着色器代码,
其中所述使所述已编译的着色器代码与所述应用程序标识符和所述第一硬件配置相关联以进行重新分配至少部分地基于所述确定从所述至少一个客户端机器接收的所述已编译的着色器代码匹配从所述第一客户端机器接收的所述已编译的着色器代码。
14.如权利要求5所述的方法,其还包括,在所述将所述已编译的着色器代码发送到所述第二客户端机器之后:
由远程计算***从具有匹配所述第一硬件配置的第三硬件配置的第三客户端机器接收一个或多个着色器标识符中的着色器标识符,其中与所述第三客户端机器相关联的用户帐户是受信任的用户帐户;
除了所述从所述第一客户端机器接收所述已编译的着色器代码之外,由所述远程计算***还从所述第三客户端机器接收所述已编译的着色器代码;
确定从所述第三客户端机器接收的所述已编译的着色器代码不匹配从所述第一客户端机器接收的所述已编译的着色器代码;以及
至少部分地基于所述确定从所述第三客户端机器接收的所述已编译的着色器代码不匹配从所述第一客户端机器接收的所述已编译的着色器代码来避免将所述已编译的着色器代码发送到另外的客户端机器。
15.一种客户端机器,其包括:
中央处理单元;
图形处理单元;以及
存储计算机可执行指令的存储器,所述计算机可执行指令在由所述中央处理单元执行时,使得所述客户端机器:
加载客户端应用程序,所述客户端应用程序被配置为执行在与所述客户端机器相关联的显示器上渲染图形的多个所安装程序中的一个;
将对所述多个所安装程序中的第一程序的已编译的着色器代码的请求发送到远程计算***,所述请求包括所述客户端机器的硬件配置;
接收对应于所述硬件配置和所述第一程序的应用程序标识符的所述已编译的着色器代码;
将所述已编译的着色器代码中的至少一部分存储在预定义的存储器位置处;以及
执行所述第一程序,其中执行所述第一程序包括所述图形处理单元执行从所述预定义的存储器位置检索到的所述已编译的着色器代码中的至少所述部分以代替所述客户端机器的图形驱动程序创建所述已编译的着色器代码。
16.如权利要求15所述的客户端机器,其中所述计算机可执行指令在由所述中央处理单元执行时,还使得所述客户端机器丢弃所述已编译的着色器代码中的至少一些作为丢弃的着色器代码,其中所述已编译的着色器代码中的所述部分表示所述已编译的着色器代码中除了所述丢弃的着色器代码以外的剩余部分。
17.如权利要求16所述的客户端机器,其中所述计算机可执行指令在由所述中央处理单元执行时,还使得所述客户端机器:
由所述图形驱动程序编译对应于所述丢弃的着色器代码的一组着色器作为所述图形处理单元可执行的机器代码中的已编译的着色器;
由所述图形驱动程序在所述预定义的存储器位置中并且与所述第一程序的所述应用程序标识符相关联地缓存所述已编译的着色器;
生成用于所述已编译的着色器的一组着色器标识符;以及
将信息发送到所述远程计算***,所述信息包括:
所述客户端机器的所述硬件配置,
所述第一程序的所述应用程序标识符,以及
用于所述已编译的着色器的所述一组着色器标识符。
18.如权利要求17所述的客户端机器,其中所述一组着色器标识符包括一组着色器密钥,并且其中所述一组着色器密钥被发送到一组元组中,各个元组包括着色器密钥和用于对应于所述着色器密钥的着色器的所述机器代码的散列值。
19.如权利要求15所述的客户端机器,其中所述第一程序是视频游戏。
20.如权利要求15所述的客户端机器,其中所述硬件配置指定所述图形驱动程序的版本和所述图形处理单元的型号。
CN201980008938.9A 2018-01-26 2019-01-25 在客户端机器之间分配着色器来进行预缓存 Active CN111615716B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/881,552 2018-01-26
US15/881,552 US10668378B2 (en) 2018-01-26 2018-01-26 Distributing shaders between client machines for precaching
PCT/US2019/015205 WO2019147974A2 (en) 2018-01-26 2019-01-25 Distributing shaders between client machines for precaching

Publications (2)

Publication Number Publication Date
CN111615716A CN111615716A (zh) 2020-09-01
CN111615716B true CN111615716B (zh) 2024-01-12

Family

ID=67391755

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980008938.9A Active CN111615716B (zh) 2018-01-26 2019-01-25 在客户端机器之间分配着色器来进行预缓存

Country Status (6)

Country Link
US (1) US10668378B2 (zh)
EP (1) EP3735679B1 (zh)
JP (1) JP7297769B2 (zh)
KR (1) KR102600025B1 (zh)
CN (1) CN111615716B (zh)
WO (1) WO2019147974A2 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7243739B2 (ja) * 2018-06-01 2023-03-22 富士通株式会社 Bwp指示の設定方法、装置及び通信システム
CN110706147B (zh) * 2019-09-29 2023-08-11 阿波罗智联(北京)科技有限公司 图像处理的环境确定方法、装置、电子设备和存储介质
CN111228819B (zh) * 2019-12-30 2022-03-11 广东趣炫网络股份有限公司 一种保护Shader的方法、装置和设备
CN111857682B (zh) * 2020-06-28 2022-09-13 厦门极致互动网络技术股份有限公司 客户端执行远程自定义代码方法及***、客户端、服务器
CN111736850B (zh) * 2020-07-21 2020-12-22 腾讯科技(深圳)有限公司 图像处理方法、装置、服务器及介质
US20220129295A1 (en) 2020-10-25 2022-04-28 Meta Platforms, Inc. Server-side hosted environment for a cloud gaming system
US11726755B2 (en) * 2021-04-09 2023-08-15 Nvidia Corporation Caching of compiled shader programs in a cloud computing environment
US11900136B2 (en) * 2021-07-28 2024-02-13 Sony Interactive Entertainment LLC AoT compiler for a legacy game
CN113553061B (zh) * 2021-09-22 2021-12-17 西安芯瞳半导体技术有限公司 一种提升源程序执行性能的方法、装置及计算机存储介质
CN115878209A (zh) * 2021-09-29 2023-03-31 华为技术有限公司 加载着色器的方法和装置
CN114925139B (zh) * 2022-07-21 2022-11-18 沐曦科技(成都)有限公司 分级同步数据链的方法、装置及电子设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2053506A1 (en) * 2007-10-26 2009-04-29 Qualcomm Incorporated Server-based code compilation
US8001531B1 (en) * 2007-07-30 2011-08-16 Nvidia Corporation Translation of a shader assembly language binary for debugging a graphics application running on a remote device

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11328138A (ja) * 1998-05-20 1999-11-30 Hitachi Ltd 分散型コンピュータシステム
JP2009098963A (ja) * 2007-10-17 2009-05-07 Mitsubishi Electric Corp モジュール自動生成システム
US8237720B2 (en) * 2009-02-12 2012-08-07 Microsoft Corporation Shader-based finite state machine frame detection
EP2336882A1 (en) * 2009-12-18 2011-06-22 Telefonaktiebolaget L M Ericsson (PUBL) Technique for run-time provision of executable code using off-device services
US9274976B2 (en) * 2010-11-05 2016-03-01 Apple Inc. Code tampering protection for insecure environments
US9412193B2 (en) * 2011-06-01 2016-08-09 Apple Inc. Run-time optimized shader program
US9773344B2 (en) * 2012-01-11 2017-09-26 Nvidia Corporation Graphics processor clock scaling based on idle time
US9646153B2 (en) * 2012-08-08 2017-05-09 Intel Corporation Securing content from malicious instructions
US9430258B2 (en) * 2013-05-10 2016-08-30 Vmware, Inc. Efficient sharing of identical graphics resources by multiple virtual machines using separate host extension processes
US9727339B2 (en) * 2013-07-18 2017-08-08 Nvidia Corporation Method and system for distributed shader optimization
US9747084B2 (en) 2014-09-09 2017-08-29 Google Inc. Offline shader compilation
US10068370B2 (en) * 2014-09-12 2018-09-04 Microsoft Technology Licensing, Llc Render-time linking of shaders
US10163179B2 (en) * 2015-03-27 2018-12-25 Intel Corporation Method and apparatus for intelligent cloud-based graphics updates
US9881351B2 (en) * 2015-06-15 2018-01-30 Microsoft Technology Licensing, Llc Remote translation, aggregation and distribution of computer program resources in graphics processing unit emulation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8001531B1 (en) * 2007-07-30 2011-08-16 Nvidia Corporation Translation of a shader assembly language binary for debugging a graphics application running on a remote device
EP2053506A1 (en) * 2007-10-26 2009-04-29 Qualcomm Incorporated Server-based code compilation

Also Published As

Publication number Publication date
EP3735679B1 (en) 2024-04-17
KR102600025B1 (ko) 2023-11-07
JP2021512391A (ja) 2021-05-13
US20190232164A1 (en) 2019-08-01
WO2019147974A3 (en) 2020-04-16
US10668378B2 (en) 2020-06-02
KR20200115557A (ko) 2020-10-07
EP3735679A2 (en) 2020-11-11
WO2019147974A2 (en) 2019-08-01
CN111615716A (zh) 2020-09-01
JP7297769B2 (ja) 2023-06-26
EP3735679A4 (en) 2022-01-05

Similar Documents

Publication Publication Date Title
CN111615716B (zh) 在客户端机器之间分配着色器来进行预缓存
US11818224B2 (en) On demand resources
US9880824B2 (en) On demand resources
US20190196805A1 (en) Controlled rollout of updates for applications installed on client devices
CN102195970B (zh) 基于客户端会话的调试
CN108829581B (zh) 应用程序测试方法、装置、计算机设备及存储介质
JP5658283B2 (ja) アプリケーションの稼働方法、装置及びシステム
US7849462B2 (en) Image server
US8073926B2 (en) Virtual machine image server
US8880651B2 (en) Method and system for efficient download of data package
US20180137174A1 (en) Container application execution using image metadata
US11726800B2 (en) Remote component loader
US11709810B1 (en) Delivery of digital information to a remote device
WO2019237239A1 (zh) 数据测试方法、装置、设备/终端/服务器及计算机可读存储介质
CN111666079A (zh) 软件升级的方法、装置、***、设备和计算机可读介质
CN111953475B (zh) 一种代码漏洞的修复方法及设备
US20040143586A1 (en) Method of controlling user application program
US20150317253A1 (en) Image processing apparatus, method of controlling the same, program and storage medium
US10798147B2 (en) Constraint based controlled seeding
CN113110849A (zh) 按需加载资源
CN113194330A (zh) 一种碎片化多云视频资源管理方法及***
CN107911248B (zh) 升级方法和装置
US20210049025A1 (en) Electronic apparatus and object sharing method thereof
US20210357370A1 (en) Efficient file-delivery techniques
CN114443040A (zh) 电子装置及其对象共享方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant