一种渲染指令处理方法及其相关设备与流程

文档序号:28161741发布日期:2021-12-24 20:18阅读:129来源:国知局
一种渲染指令处理方法及其相关设备与流程

1.本技术涉及计算机领域,尤其涉及一种渲染指令处理方法及其相关设备。


背景技术:

2.opengl(open graphics library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口,应用于包含内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,opengl可以帮助程序员实现在个人计算机(personal computer,pc)、工作站、超级计算机等硬件设备上实现高性能、高视觉表现力图形处理软件的开发。opengl es(opengl for embedded systems)是opengl三维图形应用程序接口(application programming interface,api)的子集,针对手机和游戏主机等嵌入式设备而设计。
3.游戏掉帧和功耗问题一直是困扰手机厂家的痛点问题。图形渲染技术也在不断进步,opengl es从1.0发展到3.2,支持更多的特性,也在不断提高渲染效率。gpu厂家也在积极推广各种降负载、提画质等技术,推出基于自家gpu特性的opengl es扩展。推出新的扩展是为了提升渲染效率、推广gpu自有特性等等。
4.然而扩展在进入标准之前,有很长的演进道路,在成为标准或被标准组织批准之前,游戏引擎一般不会很快适配使用最新扩展,这就造成了额外的终端设备的性能损耗以及较差的渲染效果。


技术实现要素:

5.第一方面,本技术提供了一种渲染指令处理方法,所述方法应用于终端设备,所述终端设备包括图形处理器gpu,所述gpu支持嵌入式系统开放图形库opengl es中的目标扩展,所述方法包括:
6.获取不基于所述目标扩展实现的第一渲染指令,所述第一渲染指令用于实现渲染任务;根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令,且所述第二渲染指令用于实现所述渲染任务;
7.以需要进行图形渲染的应用程序为游戏为例,当游戏启动时,可以获取到该游戏中针对于渲染任务的渲染指令,进而执行渲染指令对应的渲染任务;其中,第一渲染指令是获取到的渲染指令中的一个;本技术实施例中,终端装置可以预先配置一些规则,该规则定义了指令应该满足的预设条件,若所述第一渲染指令满足预设条件,则可以表示当前的渲染场景需要优化;本实施例中,所述第一渲染指令被配置为不基于所述目标扩展实现,所述第一渲染指令和所述第二渲染指令用于实现相同的渲染任务;
8.即,当前gpu支持第二渲染指令依赖的目标扩展,但应用中此时针对于渲染任务,却未使用第二渲染指令,而是使用了不依赖目标扩展实现的第一渲染指令,此时可以获取到第二渲染指令,作为后续用于执行渲染任务的渲染指令;
9.在一种可选的实现中,根据所述第一渲染指令触发所述gpu执行所述渲染任务时
的设备功耗,比根据所述第二渲染指令触发所述gpu执行所述渲染任务时的设备功耗的设备功耗大;和/或,根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量大;和/或,根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载大;和/或,根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的中央处理器cpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的cpu负载大。
10.即,在执行相同渲染任务的条件下,第二渲染指令的渲染效率好于第一渲染任务;
11.根据所述第二渲染指令触发所述gpu执行所述渲染任务;
12.在一种可选的实现中,cpu获取到第二渲染指令后,将第二渲染指令传递给gpu驱动。举例来说,gpu驱动可以通过将第二渲染指令编译成gpu可执行的对象或机器代码,在编译之后,这些第二渲染指令能够由gpu来执行,gpu接收编译后的第二渲染指令后,可以执行相应的渲染任务。
13.本技术实施例中,游戏无需修改代码,即可通过执行基于gpu扩展实现的指令,来减少频繁内存映射等等带来的终端性能损耗或者降低cpu/gpu的负载。同时,本技术实施例是基于gpu扩展的通用扩展优化框架,对于支持该扩展的手机可以提升性能,对于不支持该扩展的手机不使能优化,兼容性更好。
14.在一种可选的实现中,所述根据所述第一渲染指令获取第二渲染指令,包括:
15.基于映射关系,获取所述第一渲染指令对应的所述第二渲染指令,所述映射关系包括预设的所述第一渲染指令与所述第二渲染指令的对应关系。
16.其中,cpu可以基于映射关系获取第一渲染指令对应的所述第二渲染指令,所述映射关系包括预设的所述第一渲染指令与所述第二渲染指令的对应关系,其中,映射关系包括渲染指令之间的对应关系,且在映射关系中,第一渲染指令对应于所述第二渲染指令。
17.在一种可选的实现中,所述根据所述第一渲染指令获取第二渲染指令包括:当所述第一渲染指令满足预设条件时,根据所述第一渲染指令获取所述第二渲染指令;所述预设条件包括:所述第一渲染指令属于预设的指令集合。
18.终端装置可以预先指定一些指令,这些指令不基于所述目标扩展实现,其渲染效率较差,且当前gpu支持某一扩展,基于该扩展可以存在另一个可以实现相同渲染任务的指令。此时,终端装置可以预先指定一些指令作为候选优化的指令(例如本实施例中的第一渲染指令),相应的,也可以预先指定作为候选优化指令的优化指令(例如本实施例中的第二渲染指令)。
19.需要说明的是,第一渲染指令可以是包括多个指令的指令集合,此时,预设的指令集合可以包括多个指令,以及指令之间的时序顺序,则第一渲染指令属于预设的指令集合可以理解为,第一渲染指令包括多个指令的名称,以及其先后执行顺序都属于预设的指令集合。
20.在一种可选的实现中,所述第一渲染指令用于操作目标缓存,所述预设条件包括如下的至少一种:
21.所述目标缓存的缓存类型满足预设条件;
22.所述目标缓存被所述第一渲染指令操作的历史信息满足预设条件;或,
23.所述目标缓存的上下文信息满足预设条件。
24.需要说明的是,针对于所述目标缓存的缓存类型满足预设条件,可以是目标缓存中存储数据的类型是否满足条件,或者是目标缓存本身的一些属性是否满足条件,例如,当第一渲染指令为glbufferdata指令时,可以判断目标缓存是否是用于存储顶点或索引数据,以及其本身的用途是否是动态更新的,若是则确定目标缓存的缓存类型满足预设条件。
25.需要说明的是,针对于所述目标缓存被所述第一渲染指令的历史操作次数大于预设值;可以获取到目标缓存在一定的时间内,被所述第一渲染指令的历史操作次数是否大于预设值。例如,当第一渲染指令为glblitframebuffer指令时,可以判断其绑定的read framebuffer在历史的一定时间内被调用的次数(频率)是否大于预设值。
26.需要说明的是,该上下文信息可以表示渲染状态,例如,当第一渲染指令为glblitframebuffer指令时,可以判断当前绑定的read framebuffer的颜色和深度模板附件,判断其采样值是否大于1,等等。
27.在一种可选的实现中,所述第一渲染指令用于操作纹理对象,所述预设条件包括所述纹理对象的上下文信息满足预设条件。
28.在一种可选的实现中,所述第二渲染指令被配置为调用所述目标扩展的接口。
29.示例性的,第一渲染指令可以为glbufferdata指令,第二渲染指令可以为基于ext_buffer_storage扩展实现的glbufferstorageext指令。需要说明的是,还可以在glbufferstorageext指令中额外指定gl_map_persistent_bit_ext、gl_map_coherent_bit_ext和gl_dynamic_storage_bit_ext属性,来创建支持持久化地址映射的buffer。
30.在一种可选的实现中,所述第一渲染指令位于目标函数表,所述第一渲染指令包括多个第一子指令,相应的,所述若所述第一渲染指令满足预设条件,包括:
31.若所述第一渲染指令包括的多个第一子指令中的至少一个第一子指令满足预设条件。
32.需要说明的是,上述至少一个第一子指令满足的预设条件可以参照上述第一渲染指令满足的预设条件。
33.在一种可选的实现中,所述第二渲染指令包括多个第二子指令,每个第二子指令对应于一个第一子指令;所述响应于所述第一渲染指令,执行所述第二渲染指令,包括:
34.响应于每个第一子指令,执行所述每个第一子指令对应的第二子指令。
35.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口。
36.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口,且为与实现所述目标扩展的功能相关的指令。
37.在一种可选的实现中,所述第一渲染指令包括第一目标渲染指令和第二目标渲染指令;其中,所述第一目标渲染指令为第一帧图像对应的渲染指令,所述第二目标渲染指令为第二帧图像对应的渲染指令,所述第一帧图像为所述第二帧图像之前的图像帧,所述若所述第一渲染指令满足预设条件,包括:
38.若所述第一目标渲染指令满足预设条件,且所述第二目标渲染指令满足预设条件。
39.具体的,在每一帧(第一帧图像)结束前,基于对第一目标渲染指令进行分析来识
别场景,决定是否进入优化。对于拦截的第一目标渲染指令,分析具体参数、调用数次、当前的opengl es状态信息、记录的历史信息以及当前上下文特点等等,去匹配扩展优化算法库中的预设场景(具体可以参照上述实施例中如果确定第一渲染指令是否满足预设条件的部分),若第一目标渲染指令满足预设条件,则可以在第二帧图像中拦截的第二目标渲染指令,分析具体参数、调用数次、当前的opengl es状态信息、记录的历史信息以及当前上下文特点等等,去匹配扩展优化算法库中的预设场景(具体可以参照上述实施例中如果确定第一渲染指令是否满足预设条件的部分),若第二目标渲染指令满足预设条件,则获取第二渲染指令。
40.第二方面,本技术提供了一种渲染指令处理装置,所述装置应用于终端设备,所述终端设备包括图形处理器gpu,所述gpu支持嵌入式系统开放图形库opengl es中的目标扩展,所述装置包括:
41.指令获取模块,用于获取不基于所述目标扩展实现的第一渲染指令,所述第一渲染指令用于实现渲染任务;
42.根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令,且所述第二渲染指令用于实现所述渲染任务;以及,
43.指令执行模块,用于根据所述第二渲染指令触发所述gpu执行所述渲染任务。
44.在一种可选的实现中,所述指令获取模块,用于:
45.基于映射关系,获取所述第一渲染指令对应的所述第二渲染指令,所述映射关系包括预设的所述第一渲染指令与所述第二渲染指令的对应关系。
46.在一种可选的实现中,根据所述第一渲染指令触发所述gpu执行所述渲染任务时的设备功耗,比根据所述第二渲染指令触发所述gpu执行所述渲染任务时的设备功耗的设备功耗大;和/或,
47.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量大;和/或,
48.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载大;和/或,
49.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的中央处理器cpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的cpu负载大。
50.在一种可选的实现中,所述预设条件包括:所述第一渲染指令属于预设的指令集合。
51.在一种可选的实现中,所述第一渲染指令用于操作目标缓存,所述预设条件包括如下的至少一种:
52.所述目标缓存的缓存类型满足预设条件;
53.所述目标缓存被所述第一渲染指令操作的历史信息满足预设条件;或,
54.所述目标缓存的上下文信息满足预设条件。
55.在一种可选的实现中,所述第一渲染指令用于操作纹理对象,所述预设条件包括所述纹理对象的上下文信息满足预设条件。
56.在一种可选的实现中,所述第二渲染指令被配置为调用所述目标扩展的接口。
57.在一种可选的实现中,所述第一渲染指令包括多个第一子指令,相应的,所述指令获取模块,用于若所述第一渲染指令包括的多个第一子指令中的至少一个第一子指令满足预设条件,则获取第二渲染指令。
58.在一种可选的实现中,所述第二渲染指令包括多个第二子指令,每个第二子指令对应于一个第一子指令;所述指令执行模块,用于:
59.响应于每个第一子指令,执行所述每个第一子指令对应的第二子指令。
60.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口。
61.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口,且为与实现所述目标扩展的功能相关的指令。
62.在一种可选的实现中,所述第一渲染指令包括第一目标渲染指令和第二目标渲染指令;其中,所述第一目标渲染指令为第一帧图像对应的渲染指令,所述第二目标渲染指令为第二帧图像对应的渲染指令,所述第一帧图像为所述第二帧图像之前的图像帧,所述若所述第一渲染指令满足预设条件,包括:
63.若所述第一目标渲染指令满足预设条件,且所述第二目标渲染指令满足预设条件。
64.第三方面,本技术提供了一种终端设备,所述终端设备包括处理器和存储器,所述处理器获取存储器中存储的代码,以执行第一方面以及其可选的实现方式中的任意一种。
65.第四方面,本技术提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质包含计算机指令用于执行上述第一方面及其可选的实现中任一所述的渲染指令处理方法,
66.第五方面,本技术还提供了一种计算机程序产品,包含计算机指令,主机设备的处理器执行该计算机指令,用于执行本实施例可能实现方式中任一种实现方式中处理器执行的操作。
67.本技术实施例提供了一种渲染指令处理方法,所述方法应用于终端设备,所述终端设备包括图形处理器gpu,所述gpu支持嵌入式系统开放图形库opengl es中的目标扩展,包括:获取不基于所述目标扩展实现的第一渲染指令,所述第一渲染指令用于实现渲染任务;根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令,且所述第二渲染指令用于实现所述渲染任务;以及,根据所述第二渲染指令触发所述gpu执行所述渲染任务。通过上述方式,对于特定场景,使用基于gpu扩展的渲染指令代替原本不基于gpu扩展的渲染指令,可以降低终端设备的性能损耗。
附图说明
68.图1为一种系统的架构示意;
69.图2为说明可以实施本发明中描述的技术的计算装置的框图;
70.图3为本技术实施例提供的一种渲染指令处理方法的流程示意;
71.图4为本实施例中的一种渲染指令替换示意;
72.图5为本技术实施例提供的一种渲染指令处理方法的一个示意;
73.图6a为本技术实施例提供的一种渲染指令处理的一个示意;
74.图6b为本技术实施例提供的一种渲染指令处理的一个示意;
75.图7为本技术实施例提供的一种渲染指令处理方法的一个示意;
76.图8为本技术实施例提供的一种渲染指令处理方法的一个示意;
77.图9为本技术提供的一种渲染指令处理装置的结构示意;
78.图10为本技术提供的一种终端设备的结构示意。
具体实施方式
79.下面结合附图,对本技术的实施例进行描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
80.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本技术中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间/逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。
81.opengl(open graphics library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口,应用于包含内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,opengl可以帮助程序员实现在个人计算机(personal computer,pc)、工作站、超级计算机等硬件设备上实现高性能、高视觉表现力图形处理软件的开发。
82.opengl es(opengl for embedded systems)是opengl三维图形应用程序接口(application programming interface,api)的子集,针对手机和游戏主机等嵌入式设备而设计。其中,opengl es是基于opengl而来的,去除了glbegin/glend,四边形(gl_quads)、多边形(gl_polygons)等复杂图元等许多非绝对必要的特性。经过多年发展,现在主要有两个版本,opengl es 1.x针对固定管线硬件的,opengl es 2.x针对可编程管线硬件。其中,opengl es 1.0是以opengl 1.3规范为基础的,opengl es 1.1是以opengl 1.5规范为基础的。opengl es 2.0则是参照opengl 2.0规范定义的。
83.opengl es的使能场景包括但不限于:图片处理,比如图片色调转换、美颜等;摄像头预览效果处理,比如美颜相机等、视频处理、3d游戏等等。
84.在一种实现中,opengl被当作客户端-服务器系统来实现的,其中应用程序相当于客户端,opengl相当于服务器。如图1所示,客户端程序需要调用opengl的接口实现3d渲染,那么opengl命令和数据会缓存在随机存取存储器(random access memory,ram)中,在一定条件下,会将这些命令和数据通过cpu时钟发送到影像随机接达记忆器(video random access memory,vram),在gpu的控制下,使用vram中的数据和命令,完成图形的渲染,并将结果存入帧缓冲区中,帧缓冲区中的帧最终会被发送到显示器上,显示出结果。在现代的图
36可以是具有固定功能和用于渲染图形和执行gpu应用程序的可编程组件的专用硬件单元。gpu 36还可包含dsp、通用微处理器、asic、fpga或其它等效的集成或离散逻辑电路。
94.gpu 36还包含gpu存储器38,其可以表示在执行机器或对象代码时使用的芯片上存储设备或存储器。gpu存储器38可以各自包括能够存储固定数目个数字位的硬件存储器寄存器。gpu 36可以能够比从存储单元48(其可例如经由系统总线存取)读取值或者向存储单元48写入值更迅速地从本机gpu存储器38读取值或者向本机gpu存储器38写入值。
95.gpu 36还包含着色单元40。如下文更详细地描述,着色单元40可以配置成处理组件的可编程管线。在一些实例中,着色单元40可以称为“着色器处理器”或“统一着色器”,并且可以执行几何形状、顶点、像素或其它着色操作以渲染图形。着色单元40可以包含图2中为了清晰起见未具体展示的一或多个组件,例如用于取出和解码指令的组件、用于实行算术计算的一或多个算术逻辑单元(arithmetic and logic unit,alu)和一或多个存储器、高速缓存或寄存器。
96.显示器单元42表示能够显示视频数据、图像、文本或任何其它类型的数据的单元。显示器单元42可以包含液晶显示器(liquid crystal display,lcd)、发光二极管(light emitting diode,led)显示器、有机led(organic light-emitting diode,oled)、有源矩阵oled(active-matrix organic light-emitting diode,amoled)显示器等等。
97.显示器缓冲单元44表示专用于为显示器单元42存储数据以供呈现图像(例如照片或视频帧)的存储器或存储装置。显示器缓冲单元44可以表示包含多个存储位置的二维缓冲器。显示器缓冲单元44内的存储位置的数目可以基本上类似于有待在显示器单元42上显示的像素的数目。举例来说,如果显示器单元42经配置以包含640x480个像素,那么显示器缓冲单元44可以包含640x480个存储位置。显示器缓冲单元44可以存储由gpu 36处理的像素中的每一个的最终像素值。显示器单元42可以从显示器缓冲单元44检索最终像素值,并且基于显示器缓冲单元44中存储的像素值显示最终图像。
98.用户接口单元46表示用户可以用来与计算装置30的其它单元(例如,cpu 32)交互或者以其它方式介接以与计算装置30的其它单元通信的单元。用户接口单元46的实例包含但不限于轨迹球、鼠标、键盘和其它类型的输入装置。用户接口单元46还可以是触摸屏,并且可以并入为显示器单元42的一部分。
99.存储单元48可以包括一或多个计算机可读存储媒体。存储单元48的实例包含但不限于随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、cd-rom或其它光盘存储装置、磁盘存储装置或其它磁性存储装置、快闪存储器或可以用于以指令或数据结构的形式存储期望的程序代码并且可以由计算机或处理器存取的任何其它媒体。
100.在一些实例实施方案中,存储单元48可以包含使得cpu 32和/或gpu 36执行本发明中用于实现cpu 32和gpu 36的功能的指令。在一些实例中,存储单元48可以被视为非暂时性存储媒体。术语“非暂时性”可以指示存储媒体不是体现在载波或传播信号中。然而,术语“非暂时性”不应解释为意味着存储单元48是不能移动的。作为一个实例,存储单元48可以从计算装置30中移除,并且移动到另一装置。作为另一实例,基本上类似于存储单元48的存储单元可以插入到计算装置30中。在某些实例中,非暂时性存储媒体可以存储可能随时间而改变的数据(例如,在ram中)。
101.存储单元48存储gpu驱动器50和编译器54、gpu程序52和本机编译的gpu程序56。gpu驱动器50表示提供存取gpu 36的接口的计算机程序或可执行代码。cpu 32执行gpu驱动器50或其若干部分以与gpu 36连接,并且出于此原因,gpu驱动器50在图2的实例中展示为cpu 32内的用虚线框标记的gpu驱动器50。gpu驱动器50可以存取cpu 32执行的程序或其它可执行文件,包含gpu程序52。
102.gpu程序52可以包含(例如,使用应用程序编程接口(api))用高级(hl)编程语言编写的代码。api的实例包含开放图形库(opengl)。总地来说,api包含由相关联的硬件执行的预定的标准化的成组命令。api命令允许用户指令gpu的硬件组件执行命令,而无需用户知道硬件组件的具体情况。
103.gpu程序52可以调用或者以其它方式包含gpu驱动器50提供的一或多个功能。cpu 32总体上执行其中嵌入着gpu程序52的程序,并且在遇到gpu程序52后,即刻将gpu程序52传递给gpu驱动器50(例如,以命令流的形式)。cpu 32在这个上下文中执行gpu驱动器50以处理gpu程序52。举例来说,gpu驱动器50可以通过将gpu程序编译成gpu 36可执行的对象或机器代码而处理gpu程序52。这个对象代码在图2的实例中展示为本机编译的gpu程序56。
104.在一些实例中,编译器54可以实时或近实时地操作,以在执行其中嵌入着gpu程序52的程序期间编译gpu程序52。举例来说,编译器54总体上表示将根据hl编程语言定义的hl指令精简成低级(ll)编程语言的ll指令的模块。在编译之后,这些ll指令能够由特定类型的处理器或其它类型的硬件(例如fpga、asic等等(包含例如cpu 32和gpu 36)来执行。
105.在图2的实例中,编译器54可以在执行包含gpu程序52的hl代码时从cpu 32接收gpu程序52。编译器54可以将gpu程序52编译成符合ll编程语言的本机编译的gpu程序56。编译器54接着输出包含ll指令的本机编译的gpu程序56。
106.gpu 36总体上接收本机编译的gpu程序56(如通过gpu 36内的虚线框标记的“本机编译的gpu程序56”所展示),在这之后,在一些例子中,gpu 36即刻渲染图像并且将图像的经渲染部分输出到显示器缓冲单元44。举例来说,gpu 36可以产生有待在显示器单元42处显示的多个基元。基元可以包含一或多条线(包含曲线、样条等)、点、圆、椭圆、多边形(其中通常将多边形定义为一或多个三角形的集合)或任何其它二维(2d)基元。术语“基元”还可以指代三维(3d)基元,例如立方体、圆柱体、球体、圆锥体、金字塔、圆环等等。总地来说,术语“基元”是指任何被gpu 36渲染以供经由显示器单元42作为图像(或在视频数据的上下文中的帧)显示的几何形状或要素。
107.gpu 36可以通过应用一或多个模型变换(其也可以在状态数据中指定)将基元或基元的其它状态数据(例如,其定义基元的纹理、亮度、相机配置或其它方面)变换成所谓的“世界空间”。一旦经过变换,gpu 36就可以应用有效相机的视图变换(其同样也可以在定义相机的状态数据中指定)以将基元和光的坐标变换到相机或眼睛空间中。gpu36还可以执行顶点着色以在任何有效光的视图中渲染基元的外观。gpu 36可以在上述模型、世界或视图空间中的一或多个中执行顶点着色(虽然顶点着色通常是在世界空间中执行的)。
108.一旦基元经过着色,gpu 36就可以执行投影以将图像投影到(作为一个实例)在(-1,-1,-1)和(1,1,1)处具有极点的单位立方体中。这个单位立方体通常称为典型视图体。在将模型从眼睛空间变换到典型视图体之后,gpu 36可以执行裁剪以移除任何不至少部分地驻留在视图体中的基元。换句话说,gpu 36可以移除任何不在相机帧内的基元。gpu 36可以
接着将基元的坐标从视图体映射到屏幕空间,从而有效地将基元的3d基元精简成屏幕的2d坐标。
109.在给定用其相关联的着色数据定义基元的经变换和投影的顶点的情况下,gpu 36可以接着使基元光栅化。举例来说,gpu 36可以计算和设置基元所覆盖的屏幕的像素的颜色。在光栅化期间,gpu 36可以应用与基元相关联的任何纹理(其中纹理可以包括状态数据)。gpu 36还可以在光栅化期间执行z缓冲器算法(也称为深度测试)以确定是否有任何基元和/或对象被任何其它对象遮蔽。z缓冲器算法根据基元的深度将基元排序,使得gpu 36知道将每一基元绘制到屏幕上时的次序。gpu 36将经渲染的像素输出到显示器缓冲单元44。
110.显示器缓冲单元44可以暂时存储经渲染的图像的经渲染的像素,直到整个图像都被渲染了为止。在这个上下文中,可以将显示器缓冲单元44视为图像帧缓冲器。显示器缓冲单元44可以接着发射有待在显示器单元42上显示的经渲染的图像。在一些替代的实例中,gpu 36可以将图像的经渲染的部分直接输出到显示器单元42以供显示,而不是将图像暂时存储在显示器缓冲单元44中。显示器单元42可以接着显示在显示器缓冲器单元78中存储的图像。
111.本技术实施例中,当需要进行图形渲染的程序运行时,cpu 32可以从中央处理单元存储器中获取针对于各帧图像的渲染指令,并执行渲染指令以实现图形渲染。特别的,cpu 32可以从中央处理单元存储器中获取针对于各帧图像的函数表(hook表),其中函数表可以包括多个渲染指令,cpu可以通过执行函数表中的各个渲染指令以实现图形渲染(具体的执行流程可以参照图2对应的实施例中的描述,这里不再赘述)。
112.特别的,gpu可以支持opengl es中的多个扩展,然而,应用开发者在编写程序时,针对于图形渲染,由于扩展未推广至标准等原因,可能未利用更高效的扩展编写程序。
113.为了解决上述问题,接下来对本技术实施例提供的一种渲染指令处理方法进行详细描述。
114.参照图3,图3为本技术实施例提供的一种渲染指令处理方法的流程示意,如图3中示出的那样,本技术实施例提供的渲染指令处理方法,包括:
115.301、获取不基于所述目标扩展实现的第一渲染指令,所述第一渲染指令用于实现渲染任务。
116.以需要进行图形渲染的应用程序为游戏为例,当游戏启动时,可以获取到该游戏中针对于渲染任务的渲染指令,进而执行渲染指令对应的渲染任务;其中,第一渲染指令是获取到的渲染指令中的一个。
117.本技术实施例中,所述第一渲染指令不基于所述目标扩展实现。
118.302、根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令,且所述第二渲染指令用于实现所述渲染任务。
119.本技术实施例中,若所述第一渲染指令满足预设条件,则根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令。
120.本技术实施例中,在将应用程序代码中未采用目标扩展的指令替换为基于扩展实现的指令的过程中,首先需要识别出哪一些指令需要进行转换。
121.本技术实施例中,获取到第一渲染指令之后,会对第一渲染指令进行分析,以确定
当前的场景是否满足预设要求,若第一渲染指令满足预设条件,则确定满足第一渲染指令需要进行指令转换。
122.本技术实施例中,终端装置可以预先配置一些规则,该规则定义了指令应该满足的预设条件,其中,所述第一渲染指令用于操作目标缓存,所述预设条件至少包括如下的一种:所述第一渲染指令属于预设的指令集合;所述目标缓存的缓存类型满足预设条件;所述目标缓存被所述第一渲染指令的历史操作次数大于预设值;或,所述目标缓存的上下文信息满足预设条件。
123.所述第一渲染指令包括多个第一子指令,相应的,需要判断所述第一渲染指令包括的多个第一子指令中的至少一个第一子指令是否满足预设条件。
124.具体的,针对于第一渲染指令属于预设的指令集合的预设条件,终端装置可以预先指定一些指令,这些指令不基于所述目标扩展实现,其渲染效率较差,且当前gpu支持某一扩展,基于该扩展可以存在另一个可以实现相同渲染任务的指令。此时,终端装置可以预先指定一些指令作为候选优化的指令(例如本实施例中的第一渲染指令),相应的,也可以预先指定作为候选优化指令的优化指令(例如本实施例中的第二渲染指令)。
125.在一种实现中,第一渲染指令可以为独立的一条指令。
126.例如,opengl es中的glmapbufferrange指令以及glbufferdata指令,在顶点和索引数据频繁更新的场景下,执行上述指令时,存在大量map操作,这会造成较高的gpu负载和cpu负载。又例如,glblitframebuffer指令,其执行时,ddr内存拷贝的数据量较大。本技术实施例中的预设的指令集合可以为包括上述指令的指令集合。
127.需要说明的是,可以通过识别指令名称直接确定出该指令是否属于预设的指令集合。
128.在一种实现中,第一渲染指令可以是包括多个指令的指令集合,此时,预设的指令集合可以包括多个指令,以及指令之间的时序顺序,则第一渲染指令属于预设的指令集合可以理解为,第一渲染指令包括多个指令的名称,以及其先后执行顺序都属于预设的指令集合。例如,预设的指令集合包括一个指令子集{glbindbuffer;glbufferdata;glmapbufferrange;memcpy;glunmapbuffer}。
129.需要说明的是,第一渲染指令属于预设的指令集合,可以仅仅为第一渲染指令满足预设条件的一个条件。
130.在一种实现中,所述第一渲染指令用于操作目标缓存,其中,目标缓存可以是帧缓存framebuffer、buffer、渲染缓存renderbuffer中的一种。
131.具体的,针对于所述目标缓存的缓存类型满足预设条件,可以是目标缓存中存储数据的类型是否满足条件,或者是目标缓存本身的一些属性是否满足条件,例如,当第一渲染指令为glbufferdata指令时,可以判断目标缓存是否是用于存储顶点或索引数据,以及其本身的用途是否是动态更新的,若是则确定目标缓存的缓存类型满足预设条件。
132.具体的,针对于所述目标缓存被所述第一渲染指令的历史操作次数大于预设值;可以获取到目标缓存在一定的时间内,被所述第一渲染指令的历史操作次数是否大于预设值。例如,当第一渲染指令为glblitframebuffer指令时,可以判断其绑定的read framebuffer在历史的一定时间内被调用的次数(频率)是否大于预设值。
133.具体的,针对于所述目标缓存的上下文信息满足预设条件;可以获取到目标缓存
的上下文信息,该上下文信息可以表示渲染状态,例如,当第一渲染指令为glblitframebuffer指令时,可以判断当前绑定的read framebuffer的颜色和深度模板附件,判断其采样值是否大于1,等等。
134.本技术实施例中,可以基于第一渲染指令是否属于预设的指令集合;目标缓存的缓存类型是否满足预设条件;目标缓存被所述第一渲染指令的历史操作次数是否大于预设值;目标缓存的上下文信息是否满足预设条件中的至少一种预设条件来判断当前场景是否满足条件,进而确定第一渲染指令是否满足预设条件。
135.本技术实施例中,若所述第一渲染指令满足预设条件,则可以获取第二渲染指令;其中,所述第二渲染指令被配置为基于所述目标扩展实现。
136.具体的,可以预先配置第一渲染指令和第二渲染指令之间的映射关系,所述映射关系包括预设的所述第一渲染指令与所述第二渲染指令的对应关系;当确定第一渲染指令满足预设条件之后,可以在映射关系中获取第一渲染指令对应的第二渲染指令。
137.在一种实现中,所述第二渲染指令被配置为调用所述目标扩展的接口。
138.示例性的,第一渲染指令可以为glbufferdata指令,第二渲染指令可以为基于ext_buffer_storage扩展实现的glbufferstorageext指令。需要说明的是,还可以在glbufferstorageext指令中额外指定gl_map_persistent_bit_ext、gl_map_coherent_bit_ext和gl_dynamic_storage_bit_ext属性,来创建支持持久化地址映射的buffer。
139.在一种实现中,所述第二渲染指令包括多个第二子指令,每个第二子指令对应于一个第一子指令。
140.在一种实现中,所述第一渲染指令用于操作纹理对象,所述预设条件包括所述纹理对象的上下文信息满足预设条件。
141.示例性的,参照图4,图4为本实施例中的一种渲染指令替换示意,如图4中示出的那样,在第一次glmapbufferrange时,第一渲染指令可以为指令集合{glbindbuffer;glbufferdata;glmapbufferrange;memcpy;glunmapbuffer},相应的,第二渲染指令可以为指令集合{glbindbuffer;glbufferstorageext;glmapbufferrange;memcpy;return};其中,glbindbuffer对应于glbindbuffer,glbufferdata对应于glbufferstorageext,glmapbufferrange对应于glmapbufferrange,memcpy对应于memcpy,glunmapbuffer对应于return。可见,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口。所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口,且为与实现所述目标扩展的功能相关的指令。
142.在不是第一次glmapbufferrange时,第一渲染指令可以为指令集合{glbindbuffer;glbufferdata;glmapbufferrange;memcpy;glunmapbuffer},相应的,第二渲染指令可以为指令集合{glbindbuffer;return;返回地址;memcpy;return};其中,glbindbuffer对应于glbindbuffer,glbufferdata对应于return,glmapbufferrange对应于返回地址,memcpy对应于memcpy,glunmapbuffer对应于return。
143.又例如,第一渲染指令可以为glblitframebuffer指令,第二渲染指令可以为基于ext_multisampled_render_to_texture扩展实现的glrenderbufferstoragemultisampleext指令。
144.本技术实施例中,根据所述第一渲染指令触发所述gpu执行所述渲染任务时的设
备功耗,比根据所述第二渲染指令触发所述gpu执行所述渲染任务时的设备功耗的设备功耗大;和/或,根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量大;和/或,根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载大;和/或,根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的中央处理器cpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的cpu负载大。
145.本技术实施例中,所述第一渲染指令包括第一目标渲染指令和第二目标渲染指令;其中,所述第一目标渲染指令为第一帧图像对应的渲染指令,所述第二目标渲染指令为第二帧图像对应的渲染指令,所述第一帧图像为所述第二帧图像之前的图像帧,则若所述第一目标渲染指令满足预设条件,且所述第二目标渲染指令满足预设条件。
146.具体的,在每一帧(第一帧图像)结束前,基于对第一目标渲染指令进行分析来识别场景,决定是否进入优化。对于拦截的第一目标渲染指令,分析具体参数、调用数次、当前的opengl es状态信息、记录的历史信息以及当前上下文特点等等,去匹配扩展优化算法库中的预设场景(具体可以参照上述实施例中如果确定第一渲染指令是否满足预设条件的部分),若第一目标渲染指令满足预设条件,则可以在第二帧图像中拦截的第二目标渲染指令,分析具体参数、调用数次、当前的opengl es状态信息、记录的历史信息以及当前上下文特点等等,去匹配扩展优化算法库中的预设场景(具体可以参照上述实施例中如果确定第一渲染指令是否满足预设条件的部分),若第二目标渲染指令满足预设条件,则获取第二渲染指令。
147.303、根据所述第二渲染指令触发所述gpu执行所述渲染任务。
148.本技术实施例中,cpu获取到第二渲染指令后,将第二渲染指令传递给gpu驱动。举例来说,gpu驱动可以通过将第二渲染指令编译成gpu可执行的对象或机器代码,在编译之后,这些第二渲染指令能够由gpu来执行,gpu接收编译后的第二渲染指令后,可以执行相应的渲染任务。
149.在一种可选的实现中,可以以第一渲染指令作为指针,执行第二渲染指令对应的代码。
150.本技术实施例中,所述第二渲染指令可以包括多个第二子指令,每个第二子指令对应于一个第一子指令;则,可以响应于每个第一子指令,执行所述每个第一子指令对应的第二子指令。即,获取到来自应用程序的第一渲染指令后,并不执行第一渲染指令对应的代码,而是以第一渲染指令作为指针,执行第二渲染指令对应的代码。其中,执行所述第二渲染指令,可以理解为将第二渲染指令发送至相应的驱动,并基于gpu执行第二渲染指令相应的渲染任务。
151.以游戏渲染的场景为例,本技术实施例中,游戏无需修改代码,即可通过执行基于gpu扩展实现的指令,来减少频繁内存映射等等带来的终端性能损耗或者降低cpu/gpu的负载。同时,本技术实施例是基于gpu扩展的通用扩展优化框架,对于支持该扩展的手机可以提升性能,对于不支持该扩展的手机不使能优化,兼容性更好。
152.本技术实施例提供了一种渲染指令处理方法,所述方法应用于终端设备,所述终端设备包括图形处理器gpu,所述gpu支持嵌入式系统开放图形库opengl es中的目标扩展,
包括:获取第一渲染指令;若所述第一渲染指令满足预设条件,则获取第二渲染指令;其中,所述第二渲染指令被配置为基于所述目标扩展实现;以及,响应于所述第一渲染指令,执行所述第二渲染指令。通过上述方式,对于特定场景,使用基于gpu扩展的渲染指令代替原本不基于gpu扩展的渲染指令,可以降低终端设备的性能损耗。
153.接下来以游戏渲染的场景为例,给出一个相比于图3对应的实施例包括更多细节的实施例。
154.参照图5,图5为本技术实施例提供的一种渲染指令处理方法500的一个示意,如图5中示出的那样,当游戏开始501时,可以进行初始化502,初始化过程可以包括:遍历扩展优化算法所在目录,加载所有安装的动态库文件,其中,本技术实施例中的扩展优化算法必须可以包括如下函数:checkextenabled:用于校验扩展优化算法是否支持;onenterhookmode:扩展优化算法使能后调用,会替换opengl es的hook表;onexithookmode:扩展优化算法关闭后调用,会还原opengl es的hook表;oninterceptendcommand:每一帧结束前被调用,完成场景识别,决定后续帧是否进入优化。
155.基于getprocaddress 503获取所有扩展优化算法对外接口的函数指针,并调用每个扩展优化算法的算法使能检测函数checkextenabled 504,来决定是否使能算法。具体的,可以获取当前设备gpu支持的所有opengl es扩展,校验当前扩展优化算法依赖的扩展是否支持,如果支持,则使能onenterhookmode 505。
156.在每一帧结束前,调用oninterceptendcommand函数506,识别场景,决定是否进入优化。拦截所有的opengl es和egl函数调用,跳转到扩展优化框架指令分析模块。对于拦截的指令,分析具体参数、调用数次、当前的opengl es状态信息、记录的历史信息以及当前上下文特点,去匹配扩展优化算法库中的预设场景507。
157.其中,每个算法都会预置支持的场景,它是一系列规则的集合,例如可以包括:
158.1,指令名称:每种场景都是一系列指令的组合,通过指令可以推断出大致的场景;
159.2,指令参数:基于指令具体的参数信息,进一步缩小场景范围;
160.3,指令调用次数:分析一段时间内的指令调用,只优化通用场景,对于偶尔出现的场景不优化;
161.4,当前的上下文状态信息:获取当前的opengl es上下文状态信息,只优化满足预期范围内的场景;
162.5,历史信息:需要记录一段时间的指令调用,作为匹配信息的参考等等。
163.对于拦截的指令,去匹配扩展优化算法库中的预置场景。如果场景匹配,则开始执行指令转换优化。调用每个扩展优化算法的算法使能函数onenterhookmode,替换当前渲染线程的gl函数表。
164.下一帧中,如果优化可以进入,执行指令转换508,并渲染下一帧509。
165.之后关闭优化,还原函数表510
166.接下来给出一个相比于图3对应的实施例包括更多细节的实施例。
167.参照图6a,图6a为本技术实施例提供的一种渲染指令处理的一个示意,如图6a中示出的那样,可以通过本实施例中的扩展优化框架,实现渲染指令的转换,和图3实施例不同的是,图6a给出了一个可以进行多次优化判断以及优化执行的流程。
168.如图6a中示出的那样,扩展优化框架可以获取到的第一渲染指令(glfunction),
基于场景匹配、转换使能(具体可以参照图5对应的实施例描述)以及指令转换,实现一次优化,之后可以再基于场景匹配、转换使能(具体可以参照图5对应的实施例描述)以及指令转换,实现再一次的优化,其中,两次优化不同的是,基于不同的场景识别,将指令替换为支持不同扩展的渲染指令。
169.更细节的,参照图6b,图6b为本技术实施例提供的一种渲染指令处理的一个示意,如图6b中示出的那样,针对于glfunction1,其基于场景匹配、转换使能(具体可以参照图5对应的实施例描述)以及指令转换,只实现了算法2相对应的优化(算法1可能是由于场景匹配失败)。针对于glfunction2,其基于场景匹配、转换使能以及指令转换,实现了算法1和算法2相对应的优化。针对于glfunction3,其基于场景匹配、转换使能以及指令转换,未实现优化(算法1和算法2可能是由于场景匹配失败)。针对于glfunction4,其基于场景匹配、转换使能以及指令转换,只实现了算法1相对应的优化(算法2可能是由于场景匹配失败)。
170.接下来给出一个相比于图3对应的实施例包括更多细节的实施例。其针对于对于游戏渲染中顶点和索引数据频繁更新的场景。
171.本实施例中,可以识别glmapbufferrange指令,校验当前绑定的buffer是否是顶点或索引数据,是否是动态可写的。满足的话,如果map指令调用达到一定比例,则场景匹配,之后使能扩展转换。
172.本实施例中,可以维护一个buffer字典,记录所有buffer信息,包括target、size、usage等信息。
173.参照图7,当获取到glbufferdata指令701时,可以校验其操作的目标缓存是否是顶点或索引数据,用途是否是动态更新,大小是否符合限制702。如果满足条件,调用glbufferstorageext接口703,额外指定gl_map_persistent_bit_ext、gl_map_coherent_bit_ext和gl_dynamic_storage_bit_ext属性,创建支持持久化地址映射的buffer。如果该接口之前转换过,并且大小、属性没有发生变化,则直接return。在第一次glmapbufferrange704时,需要在access参数中增加gl_map_persistent_bit_ext和gl_map_coherent_bit_ext属性,得到持久化的内存地址705。下一次glmapbufferrange704同一个buffer时,直接返回之前得到的地址706。glunmapbuffer时,直接return。
174.通过上述方式,在顶点和索引数据有大量map操作的场景中,减少了glbufferdata指令、glmapbufferrange指令和glunmapbuffer指令调用比例,能够有效降低cpu和gpu负载。
175.接下来给出一个相比于图3对应的实施例包括更多细节的实施例。其针对于渲染过程中的抗锯齿场景。如图8,可以识别glblitframebuffer指令801,校验当前绑定的read framebuffer的颜色和深度模板附件,是否采样值大于1。满足的话,如果blit指令调用达到一定比例,则场景匹配802,之后使能扩展转换。
176.首先可以创建一个新的framebuffer803,创建一个新的单采样颜色纹理804,并分配空间805,创建一个新的深度模板附件806,使用扩展提供接口绑定单采样的颜色和深度模板附件。renderbuffer分配空间glrenderbufferstoragemultisampleext 807,绑定纹理到framebuffer上glframebuffertexture2dmultisampleext 808,绑定rbo到glframebufferrenderbuffer 809,并在下一帧中直接渲染到新的framebuffer上810。
177.当绑定多采样framebuffer时,替换为新创建的framebuffer id,这样多采样结果
就输出到单采样附件中。当绑定blit所在的framebuffer时,跳过绑定framebuffer和blit操作。当绑定到后面的framebuffer时,由于用到前面blit输出的单采样纹理,这里绑定纹理替换为新创建的framebuffer对应的纹理。
178.本实施例中,对于抗锯齿场景,游戏无需修改代码,即可通过gpu扩展,减少60%的ddr数据拷贝,降低手机耗电量。
179.参照图9,图9为本技术提供了一种渲染指令处理装置900的结构示意,所述装置应用于终端设备,所述终端设备包括图形处理器gpu,所述gpu支持嵌入式系统开放图形库opengl es中的目标扩展,所述装置包括:
180.指令获取模块901,用于获取不基于所述目标扩展实现的第一渲染指令,所述第一渲染指令用于实现渲染任务;根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令,且所述第二渲染指令用于实现所述渲染任务;
181.指令执行模块902,用于根据所述第二渲染指令触发所述gpu执行所述渲染任务。
182.在一种可选的实现中,所述指令获取模块,用于:
183.基于映射关系,获取所述第一渲染指令对应的所述第二渲染指令,所述映射关系包括预设的所述第一渲染指令与所述第二渲染指令的对应关系。
184.在一种可选的实现中,根据所述第一渲染指令触发所述gpu执行所述渲染任务时的设备功耗,比根据所述第二渲染指令触发所述gpu执行所述渲染任务时的设备功耗的设备功耗大;和/或,
185.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量大;和/或,
186.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载大;和/或,
187.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的中央处理器cpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的cpu负载大。
188.在一种可选的实现中,所述预设条件包括:所述第一渲染指令属于预设的指令集合。
189.在一种可选的实现中,所述第一渲染指令用于操作目标缓存,所述预设条件包括如下的至少一种:
190.所述目标缓存的缓存类型满足预设条件;
191.所述目标缓存被所述第一渲染指令操作的历史信息满足预设条件;或,
192.所述目标缓存的上下文信息满足预设条件。
193.在一种可选的实现中,所述第一渲染指令用于操作纹理对象,所述预设条件包括所述纹理对象的上下文信息满足预设条件。
194.在一种可选的实现中,所述第二渲染指令被配置为调用所述目标扩展的接口。
195.在一种可选的实现中,所述第一渲染指令包括多个第一子指令,相应的,所述指令获取模块,用于若所述第一渲染指令包括的多个第一子指令中的至少一个第一子指令满足预设条件,则获取第二渲染指令。
196.在一种可选的实现中,所述第二渲染指令包括多个第二子指令,每个第二子指令对应于一个第一子指令;所述指令执行模块,用于:
197.响应于每个第一子指令,执行所述每个第一子指令对应的第二子指令。
198.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口。
199.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口,且为与实现所述目标扩展的功能相关的指令。
200.在一种可选的实现中,所述第一渲染指令包括第一目标渲染指令和第二目标渲染指令;其中,所述第一目标渲染指令为第一帧图像对应的渲染指令,所述第二目标渲染指令为第二帧图像对应的渲染指令,所述第一帧图像为所述第二帧图像之前的图像帧,所述若所述第一渲染指令满足预设条件,包括:
201.若所述第一目标渲染指令满足预设条件,且所述第二目标渲染指令满足预设条件。
202.参照图10,图10为本技术提供的一种终端设备1000的结构示意,如图10示出的那样,所述终端设备包括处理器1001和存储器1003述处理器包括中央处理器cpu和图形处理器gpu,所述gpu支持嵌入式系统开放图形库opengl es中的目标扩展,所述cpu用于获取所述存储器的代码以执行:
203.获取不基于所述目标扩展实现的第一渲染指令,所述第一渲染指令用于实现渲染任务;根据所述第一渲染指令获取第二渲染指令;其中,所述第二渲染指令为基于所述目标扩展实现的渲染指令,且所述第二渲染指令用于实现所述渲染任务;
204.根据所述第二渲染指令触发所述gpu执行所述渲染任务;
205.本技术实施例中,游戏无需修改代码,即可通过执行基于gpu扩展实现的指令,来减少频繁内存映射等等带来的终端性能损耗或者降低cpu/gpu的负载。同时,本技术实施例是基于gpu扩展的通用扩展优化框架,对于支持该扩展的手机可以提升性能,对于不支持该扩展的手机不使能优化,兼容性更好。
206.在一种可选的实现中,所述根据所述第一渲染指令获取第二渲染指令,包括:
207.基于映射关系,获取所述第一渲染指令对应的所述第二渲染指令,所述映射关系包括预设的所述第一渲染指令与所述第二渲染指令的对应关系。
208.在一种可选的实现中,所述根据所述第一渲染指令获取第二渲染指令包括:当所述第一渲染指令满足预设条件时,根据所述第一渲染指令获取所述第二渲染指令;所述预设条件包括:所述第一渲染指令属于预设的指令集合。
209.在一种可选的实现中,所述第一渲染指令用于操作目标缓存,所述预设条件包括如下的至少一种:
210.所述目标缓存的缓存类型满足预设条件;
211.所述目标缓存被所述第一渲染指令操作的历史信息满足预设条件;或,
212.所述目标缓存的上下文信息满足预设条件。
213.在一种可选的实现中,所述第一渲染指令用于操作纹理对象,所述预设条件包括所述纹理对象的上下文信息满足预设条件。
214.在一种可选的实现中,根据所述第一渲染指令触发所述gpu执行所述渲染任务时
的设备功耗,比根据所述第二渲染指令触发所述gpu执行所述渲染任务时的设备功耗的设备功耗大;和/或,
215.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的内存数据拷贝量大;和/或,
216.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的gpu负载大;和/或,
217.根据所述第一渲染指令触发所述gpu执行所述渲染任务时对应的中央处理器cpu负载比根据所述第二渲染指令触发所述gpu执行所述渲染任务时对应的cpu负载大。
218.在一种可选的实现中,所述第二渲染指令被配置为调用所述目标扩展的接口。
219.在一种可选的实现中,所述第一渲染指令位于目标函数表,所述第一渲染指令包括多个第一子指令,相应的,所述若所述第一渲染指令满足预设条件,包括:
220.若所述第一渲染指令包括的多个第一子指令中的至少一个第一子指令满足预设条件。
221.需要说明的是,上述至少一个第一子指令满足的预设条件可以参照上述第一渲染指令满足的预设条件。
222.在一种可选的实现中,所述第二渲染指令包括多个第二子指令,每个第二子指令对应于一个第一子指令;所述响应于所述第一渲染指令,执行所述第二渲染指令,包括:
223.响应于每个第一子指令,执行所述每个第一子指令对应的第二子指令。
224.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口。
225.在一种可选的实现中,所述多个第二子指令中的至少一个第二子指令被配置为调用所述目标扩展的接口,且为与实现所述目标扩展的功能相关的指令。
226.在一种可选的实现中,所述第一渲染指令包括第一目标渲染指令和第二目标渲染指令;其中,所述第一目标渲染指令为第一帧图像对应的渲染指令,所述第二目标渲染指令为第二帧图像对应的渲染指令,所述第一帧图像为所述第二帧图像之前的图像帧,所述若所述第一渲染指令满足预设条件,包括:
227.若所述第一目标渲染指令满足预设条件,且所述第二目标渲染指令满足预设条件。
228.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
229.在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
230.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
231.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
232.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者其他网络设备等)执行本技术图2实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
233.以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1