渲染图像的方法和相关装置与流程

未命名 08-09 阅读:82 评论:0


1.本技术实施例涉及图像处理领域,更具体地,涉及渲染图像的方法和相关装置。


背景技术:

2.中央处理器(central processing unit,cpu)的结构主要包括运算器(arithmetic and logic unit,alu)、控制单元(control unit,cu)、寄存器(register)、高速缓存器(cache)和它们之间通讯的数据、控制及状态的总线。cpu具备处理不同数据类型的能力,具有很强的通用性,cpu内部结构非常复杂。cpu擅长像操作系统、系统软件和通用应用程序这类拥有复杂指令调度、循环、分支、逻辑判断以及执行等的程序任务。
3.图形处理器(graphics processing unit,gpu)由数量众多的计算单元和超长的流水线组成,适合处理大量的类型统一的数据。gpu擅长的是图形类的或者是非图形类的高度并行数值计算。
4.对于一些计算任务,当cpu遇到性能瓶颈的时候,可以通过迁移部分运算到gpu侧来缓解cpu侧的压力。
5.以图像处理中常见的蒙皮操作为例,蒙皮是将建模曲面绑定到骨架的过程。蒙皮可以用于将任何模型绑定到骨架,也可以通过预先存在骨架上建模来创建蒙皮。使用蒙皮将模型绑定到骨架后,达到蒙皮与骨架关节和骨骼的变换相一致或背离的效果。例如,如果使用蒙皮将模型的手臂绑定到其基础骨架,则旋转肘关节时会导致肘部的蒙皮发生褶或折缝。当同一屏内存在较多包含骨骼的模型的时候,骨骼数和顶点数会使cpu的计算量显著上升。此时,可以通过迁移部分运算到gpu侧来缓解cpu的性能压力。
6.计算着色器(compute shader)在gpu上运行的程序,可以运行大型并行gpu算法,以此来获得比cpu快多倍的算力。利用计算着色器可以将大量的可以并行的计算迁移到gpu上从而节省cpu资源。
7.然而,修改计算着色器程序是一项非常复杂的工作,因此容易出错。此外,计算着色器只支持嵌入式系统开放图形库(open graphics library for embedded systems,opengl es)3.1及以上版本,能够支持的设备有限。


技术实现要素:

8.本技术实施例提供一种渲染图像的方法和相关装置,可以减少硬件开销。
9.第一方面,本技术实施例提供一种渲染图像的方法,包括:根据图形应用程序接口指令,确定用于渲染待渲染数据的第一渲染通道是否满足预设条件;如果该第一渲染通道满足该预设条件,那么可以对该第一渲染通道绑定的帧缓冲进行替换,并使用替换后的第一渲染通道(也可以称为第二渲染通道)对该待渲染数据进行渲染并直接或获取该第二渲染通道中的各个片段着色器的输出数据。在进行替换前,第一渲染通道绑定的帧缓冲可以称为第一帧缓冲;用于替换第一帧缓冲的帧缓冲可以称为第二帧缓冲。第二帧缓冲的分辨率可以小于第一帧缓冲且该第二帧缓冲的颜色附件和深度附件的分辨率小于或等于该第
二帧缓冲的分辨率,和/或,第二帧缓冲中单个像素占用的存储空间大小可以小于第一帧缓冲中单个像素占用的存储空间大小。
10.上述技术方案中,对于可优化的第一渲染通道而言,可以直接获取该第一渲染通道的图形管线的顶点着色器的输出数据,而第一渲染通道中的各个图形管线中片段着色器的计算结果对于希望获取到的数据(即顶点着色器的输出数据)并没影响。因此,如果第二帧缓冲的分辨率小于第一帧缓冲的分辨率,那么可以减少片段着色器的计算次数,降低计算开销。帧缓冲的颜色附件的分辨率和帧缓冲的深度附件的分辨率通常会小于或等于帧缓冲的分辨率。因此,如果绑定了具有更低的分辨率的帧缓冲,那么颜色附件的分辨率和深度附件的分辨率的大小也会相应调整为小于或等于新绑定的帧缓冲分辨率大小。这样,需要从内存中读取的总像素数量就相应减少,这样可以减少无意义的内存读写开销。此外,如果第二帧缓冲中单个像素占用的存储空间大小小于第一帧缓冲中单个像素占用的存储空间大小,那么片段着色器从内存中读取单个像素的数据量就相应减少,这样也可以减少无意义的内存读写开销。因此,上述技术方案可以在不影响渲染结果的情况下,减少gpu的硬件开销。
11.结合第一方面,在第一方面的一种可能的实现方式中,该第二帧缓冲的分辨率为1
×
1,该第二帧缓冲的颜色附件的分辨率为1
×
1,该第二帧缓冲的深度附件的分辨率为1
×
1。
12.第二帧缓冲的大小与片段着色器的计算次数相同。而且片段着色器的计算结果并不影响希望得到的输出数据。因此,可以尽可能的减小第二帧缓冲的分片率大小,以减少片段着色器的计算次数。如果第二帧缓冲的分辨率为1
×
1,那么片段着色器只需要运行一次。这样,可以大大减少gpu的计算开销。另外,如果第二帧缓冲的颜色附件的分辨率为1
×
1,那么只需要从内存中读取一个像素的颜色值;如果第二帧缓冲的深度附件的分辨率为1
×
1,那么也只需要从内存中读取一个像素的深度值。这样可以减少无意义的内存读写开销。
13.结合第一方面,在第一方面的一种可能的实现方式中,该第二帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小小于该第一帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小,和/或,该第二帧缓冲的深度附件中单个像素的深度值占用的存储空间大小小于该第一帧缓冲的深度附件中单个像素的深度值占用的存储空间大小。
14.结合第一方面,在第一方面的一种可能的实现方式中,该确定用于渲染待渲染数据的第一渲染通道满足预设条件,包括:确定该第一渲染通道为渲染通道白名单包括的渲染通道中的一个。
15.结合第一方面,在第一方面的一种可能的实现方式中,该第一渲染通道的视口的分辨率不小于预设分辨率;该第一渲染通道的绑定的帧缓冲包括颜色附件;该第一渲染通道中每个绘制调用使用的着色器程序均能够被优化,其中该着色器程序对应于一个片段着色器和一个顶点着色器;该第一渲染通道中的每个绘制调用中均对应预设指令。
16.结合第一方面,在第一方面的一种可能的实现方式中,该预设指令包括:点模式设置指令和顶点数据写回指令,该点模式设置指令用于指示需要渲染图元类型为点,该顶点数据写回指令用于获取并保存该顶点着色器的输出数据。
17.结合第一方面,在第一方面的一种可能的实现方式中,该片段着色器有且仅有一个赋值操作为固定的颜色值或者是一个常量的输出变量;该片段着色器没有输入变量;该
片段着色器没有使用条件语句;该片段着色器没有统一变量和统一缓存对象ubo;该片段着色器不使用二维采样器修饰的纹理和采样器。
18.结合第一方面,在第一方面的一种可能的实现方式中,该顶点着色器包括多个输入变量;该顶点着色器还包括多个输出变量;该顶点着色器还包括条件语句。
19.第二方面,本技术实施例还提供一种电子装置,该电子装置包括中央处理器cpu和图形处理器gpu,该cpu,用于根据图形应用程序接口api指令,确定用于渲染待渲染数据的第一渲染通道满足预设条件;该cpu,还用于将该第一渲染通道绑定的帧缓冲从第一帧缓冲更换为第二帧缓冲,其中该第二帧缓冲的分辨率小于该第一帧缓冲的分辨率且该第二帧缓冲的颜色附件和深度附件的分辨率小于或等于该第二帧缓冲的分辨率,和/或,该第二帧缓冲中单个像素占用的存储空间大小小于该第一帧缓冲中单个像素占用的存储空间大小;该gpu,用于使用第二渲染通道渲染该待渲染数据,并获取该第二渲染通道中的顶点着色器的输出数据,其中,该第二渲染通道为将绑定的帧缓冲替换为该第二帧缓冲的该第一渲染通道。
20.可选的,在一些实施例中,该电子装置可以是计算机设备。该计算机设备可以是个人电脑、笔记本电脑、平板电脑、手机等计算机设备。
21.可选的,在另一些实施例中,该电子装置可以是芯片或者是片上系统。
22.上述技术方案中,对于可优化的第一渲染通道而言,可以直接获取该第一渲染通道多个各个图形管线的顶点着色器的输出数据,而第一渲染通道中的各个图形管线中片段着色器的计算结果对于希望获取到的数据(即顶点着色器的输出数据)并没影响。因此,如果第二帧缓冲的分辨率小于第一帧缓冲的分辨率,那么可以减少片段着色器的计算次数,降低计算开销。帧缓冲的颜色附件的分辨率和帧缓冲的深度附件的分辨率通常会小于或等于帧缓冲的分辨率。因此,如果绑定了具有更低的分辨率的帧缓冲,那么颜色附件的分辨率和深度附件的分辨率的大小也会相应调整为小于或等于新绑定的帧缓冲分辨率大小。这样,需要从内存中读取的总像素数量就相应减少,这样可以减少无意义的内存读写开销。此外,如果第二帧缓冲中单个像素占用的存储空间大小小于第一帧缓冲中单个像素占用的存储空间大小,那么片段着色器从内存中读取单个像素的数据量就相应减少,这样也可以减少无意义的内存读写开销。因此,上述技术方案可以在不影响渲染结果的情况下,减少gpu的硬件开销。
23.结合第二方面,在第二方面的一种可能的实现方式中,该第二帧缓冲的分辨率为1
×
1,该第二帧缓冲的颜色附件的分辨率为1
×
1,该第二帧缓冲的深度附件的分辨率为1
×
1。
24.第二帧缓冲的大小与片段着色器的计算次数相同。而且片段着色器的计算结果并不影响希望得到的输出数据。因此,可以尽可能的减小第二帧缓冲的分片率大小,以减少片段着色器的计算次数。如果第二帧缓冲的分辨率为1
×
1,那么片段着色器只需要运行一次。这样,可以大大减少gpu的计算开销。另外,如果第二帧缓冲的颜色附件的分辨率为1
×
1,那么只需要从内存中读取一个像素的颜色值;如果第二帧缓冲的深度附件的分辨率为1
×
1,那么也只需要从内存中读取一个像素的深度值。这样可以减少无意义的内存读写开销。
25.结合第二方面,在第二方面的一种可能的实现方式中,该第二帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小小于该第一帧缓冲的颜色附件中单个像素的颜
色值占用的存储空间大小,和/或,该第二帧缓冲的深度附件中单个像素的深度值占用的存储空间大小小于该第一帧缓冲的深度附件中单个像素的深度值占用的存储空间大小。
26.结合第二方面,在第二方面的一种可能的实现方式中,该cpu,具体用于确定该第一渲染通道为渲染通道白名单包括的渲染通道中的一个。
27.结合第二方面,在第二方面的一种可能的实现方式中,该第一渲染通道的视口的分辨率不小于预设分辨率阈值;该第一渲染通道的绑定的帧缓冲包括颜色附件;该第一渲染通道中每个绘制调用使用的着色器程序均能够被优化,其中该着色器程序对应于一个片段着色器和一个顶点着色器;该第一渲染通道中的每个绘制调用中均对应预设指令。
28.结合第二方面,在第二方面的一种可能的实现方式中,该预设指令包括:点模式设置指令和顶点数据写回指令,该点模式设置指令用于指示需要渲染图元类型为点,该顶点数据写回指令用于获取并保存该顶点着色器的输出数据。
29.结合第二方面,在第二方面的一种可能的实现方式中,该片段着色器有且仅有一个赋值操作为固定的颜色值或者是一个常量的输出变量;该片段着色器没有输入变量;该片段着色器没有使用条件语句;该片段着色器没有统一变量和统一缓存对象ubo;该片段着色器不使用二维采样器修饰的纹理和采样器。
30.结合第二方面,在第二方面的一种可能的实现方式中,该顶点着色器包括多个输入变量;该顶点着色器还包括多个输出变量;该顶点着色器还包括条件语句。
31.第三方面,本技术实施例提供一种芯片系统,该芯片系统包括逻辑电路,该逻辑电路用于与输入/输出接口耦合,通过该输入/输出接口传输数据,以执行第一方面或第一方面任一种可能的实现方式。
32.第四方面,本技术实施例提供一种计算机设备,该计算机设备包括用于实现第一方面或第一方面的任一种可能的实现方式的单元。
33.第五方面,本技术实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有程序代码,当该计算机存储介质在计算机上运行时,使得计算机执行如第一方面或第一方面的任一种可能的实现方式。
34.第六方面,本技术实施例提供一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得该计算机执行如第一方面或第一方面的任一种可能的实现方式。
附图说明
35.图1示出了一帧图像中包括的渲染通道的示意图。
36.图2示出了渲染通道renderpass 0包括的draw call的示意图。
37.图3示出了渲染通道renderpass 5包括的draw call的示意图。
38.图4是图形管线的流程图。
39.图5是几何阶段的子流水线的示意图。
40.图6是本技术实施例的系统架构示意图。
41.图7示出了计算机设备100的结构示意图。
42.图8是根据本技术实施例提供的渲染图像的方法的示意性流程图。
43.图9是根据本技术实施例提供的确定渲染通道白名单的示意性流程图。
44.图10是本技术实施例提供的另一种识别可以优化的渲染通道的流程图。
45.图11是根据本技术实施例提供的一种渲染图像的方法的示意性流程图。
46.图12示出了着色器程序白名单的确定过程。
47.图13是一个使用蒙皮渲染通道生成蒙皮数据的示意图。
48.图14是主场景渲染通道使用蒙皮渲染通道生成的蒙皮数据完成人物绘制的流程图。
具体实施方式
49.下面将结合附图,对本技术实施例中的技术方案进行描述。
50.为了帮助本领域技术人员更好地理解本技术的技术方案,首先对本技术涉及的一些相关技术进行介绍。
51.1,开放图形库(open graphics library,opengl)
52.opengl是一种跨平台的图形应用程序接口(application programming interface,api),用于为3d图形处理硬件指定标准的软件接口。gopengl es是opengl规范的一种,适用于嵌入式设备。以安卓(android)系统为例,opengl es的版本和支持的安卓系统如表1所示。
53.表1
54.opengl es版本安卓系统opengl es 1.0和1.1android 1.0及以上版本opengl es 2.0android 2.2及以上版本opengl es 3.0android 4.3及以上版本opengl es 3.1android 5.0及以上版本
55.如表1所示,opengl es 3.1只支持android 5.0及以上版本,因此android 5.0以下版本的设备无法利用计算着色器将部分运算迁移到gpu侧来缓解cpu侧的压力。
56.2,渲染
57.渲染(render)是指以软件由模型生成图像的过程。模型是用语言或者数据结构进行严格定义的三维物体或虚拟场景的描述,它包括几何、视点、纹理、照明和阴影等信息。
58.3,渲染通道
59.渲染通道(render pass)是指对待渲染对象的一个渲染过程,也即应用程序对应于一次向图形处理器提交的渲染指令的集合。一个渲染通道可以包括一个绘制调用(draw call),也可能包括多个draw call。draw call的作用是将顶点数据、贴图、材质球、灯光等一些设置传入gpu。
60.例如,图1示出了一帧图像中包括的渲染通道。
61.如图1所示的一帧图像中包括37个渲染通道。
62.例如,渲染通道renderpass 0的作用是生成蒙皮数据。渲染通道renderpass 5的作用是利用渲染通道renderpass0生成的蒙皮数据,绘制人物角色。渲染通道renderpass 36的作用是在计算机设备的屏幕上显示渲染画面。
63.图2示出了渲染通道renderpass 0包括的draw call。
64.如图2所示,渲染通道renderpass 0包括多个draw call。该多个draw call中不同
的draw call的功能不同。例如,gldrawarrays 240856的功能是输出图像中喷泉的蒙皮数据;gldrawarrays 24101的功能是输出人物的蒙皮数据。
65.图3示出了渲染通道renderpass 5包括的draw call。
66.如图3所示,渲染通道renderpass 5包括多个draw call。该多个draw call中不同的draw call的功能不同。例如,gldrawelements 242296的功能是绘制人物的帽子;gldrawelements 242315的功能是绘制人物的身体;gldrawelements 242340的功能是绘制人物的衣服。
67.4,图形管线
68.图形管线(graphics pipeline)也可以称为图形渲染管线(graphics render pipeline)或者渲染管线(render pipeline)。图形管线是计算机图形系统将三维模型渲染到二维屏幕上的过程。简单地说,图形管线就是把原始图形数据(模型)转换成屏幕显示的画面的过程。
69.图4是图形管线的流程图。
70.如图4所示的图形管线可以分为四个阶段,分别为:应用(application)、几何处理(geometry processing)、光栅化(rasterization)和像素处理(pixel processing)。
71.每个阶段内部通常也是一个流水线系统,包含子流水线阶段。
72.应用阶段主要是在cpu上执行的。应用阶段的主要任务是把顶点数据、贴图、材质球、灯光等一些设置传入gpu,这个过程叫做绘制调用(draw call)。
73.几何阶段的主要任务是把顶点从三维空间转换到屏幕上的二维坐标。
74.图5是几何阶段的子流水线。
75.如图5所示,几何阶段的子流水线中包括如下几个阶段:顶点着色(vertex shading)、投影(projection)、裁剪(clipping)、屏幕映射(screen mapping)。
76.顶点着色用于实现图形管线中用来描述顶点需要执行的模型变换、视变换、投影变换以及光照处理等操作。利用顶点着色可以完成矩阵变换的计算、计算光照公式生成顶点颜色、生成或变换纹理坐标等操作。负责顶点着色的程序可以称为顶点着色器。顶点着色器是可编程的。在顶点着色器程序输出顶点坐标之后,各个顶点被按照绘制命令中的图元类型参数,以及顶点索引数组被组装成一个个图元。
77.投影阶段的主要工作是将顶点从视图转换到裁剪空间。
78.裁剪阶段是将顶点从裁剪空间变换到屏幕空间。
79.屏幕映射阶段是将经过裁剪后得到坐标映射到屏幕坐标。
80.光栅化主要包括三角形设置(triangle setup)和三角形遍历(triangle traversal),其中三角形设置是计算三角形网格表示方式的过程,三角形遍历是检查每个像素是否被一个三角形网格所覆盖。如果被覆盖的话该像素就会生成一个片段(fragment)。
81.像素处理主要包括片段着色器和逐片段操作。
82.片段着色器(fragment shader)也可以称为像素着色器(pixel shader)。片段着色器是输出颜色,通过计算颜色混合等最终输出一个像素点的颜色赋值,让对应的这一个像素点得到一种颜色。片段着色器可以用于图片/视频/图形中每个像素的颜色填充(比如给视频添加滤镜,实际上就是将视频中每个图片的像素点颜色填充进行修改)。片段着色器
执行次数跟图片像素点的个数一样,并行执行每一个像素点获取颜色,让每一个像素点得到颜色值。
83.逐片段操作的主要任务包括:通过裁剪测试、透明度测试、模板测试和深度测试等决定每个片段的可见性;把通过所有测试的片段的颜色值和已经储存的颜色缓冲中的颜色进行合并。合并有两种主要方式,一种是直接进行颜色替换,另一种是混合(blend)。开发者可以选择开启/关闭混合功能。如果关闭了混合功能,那么合并阶段就直接进行颜色替换。如果开启了混合功能,那么gpu会取出源颜色和目标颜色,将两种颜色进行混合。源颜色指的就是该片段在片段着色器计算后得到的颜色,而目标颜色则是已经存在颜色缓冲中的颜色。
84.通过上述处理后,屏幕上就会显示最终得到的图像。屏幕显示的颜色是颜色缓冲区中的颜色。颜色缓冲区中保存的数据可以称为颜色附件。
85.除了颜色缓冲区以外,帧缓冲(frame buffer)还可以包括深度缓冲区和模板缓冲区。深度缓冲区保存的是顶点的深度值(z坐标)。该深度值可以是裁剪阶段得到的顶点的z坐标。深度缓冲区中保存的数据可以称为深度附件。逐片段操作中有一个叫模板测试的流程。模板测试的作用就是限制绘制的图元区域,其做法是按照窗口宽高创建一个矩阵,矩阵由0,1组成,其中由1组成的区域代表相匹配的图元需要提交到后续流程进行测试和绘制,而由0组成的区域的片元则直接被丢弃,起到一个筛选作用,而这个0,1数值矩阵所在的显存区域则称为模版缓冲区。
86.颜色缓冲区和深度缓冲区占用的内存大小与帧缓冲的分辨率和每个像素占的字节数相关。帧缓冲是屏幕所显示画面的一个直接映象,又称为位映射图(bit map)或光栅。帧缓冲的每一存储单元对应屏幕上的一个像素,整个帧缓冲对应一帧图像。因此,帧缓冲的分辨率通常会等于视口(viewpoint)的分辨率。视口代表当前可见的计算机图形区域。例如,如果视口的分辨率是1920
×
1080,那么屏幕上显示的图像的大小就是1920
×
1080。如果视口的分辨率是1920
×
1080,那么的帧缓冲分辨率也为1920
×
1080。假设颜色附件的分辨率和深度附件的分辨率也为1920
×
1080,且每个像素的大小是4字节,那么颜色缓冲区和深度缓冲区各需要约7.9兆字节(megabytes,mb)大小的空间。
87.在渲染通道开始的时候,gpu需要从内存中读取颜色缓冲区和深度缓冲区保存的数据,然后渲染通道过程中还需要将数据写入颜色缓冲区和深度缓冲区。所以在1个渲染通道的1帧中,需要拷贝的数据大小是7.9
×
4=31.6mb。如果帧率为100帧每秒(frames per second,fps),那么一个每秒的数据会达14.8千兆比特每秒(giga bits per second,gbps)。
88.图形管线最终计算出屏幕上的所有像素点需要一个地方来存放,这个地方就是帧缓冲。帧缓冲中的数据会被显示器读取来刷新显示。opengl可以同时存在多个帧缓冲,创建窗口时opengl会自动创建一个默认的帧缓冲,专门用于该窗口的渲染显示。帧缓冲中主要包括有颜色缓冲区、深度缓冲区、模板缓冲区这三类缓冲区。
89.使用图形管线处理数据的过程中,有时候只需要得到顶点着色器输出的顶点着色阶段的结果,图形管线的后续阶段处理得到的数据并不是必要的。但是,图形管线的完整性要求输入到图形管线中的数据必须执行图形管线包括的所有阶段。换句话说,即使只需要得到顶点着色器输出的数据,gpu仍然需要执行光栅化和像素处理阶段,而光栅化和像素处
理阶段的计算都是无意义的。同时,当使用默认的帧缓冲的时候,会导致大量无效的内存拷贝操作。本技术提供的技术方案可以在保证图形管线的完整性要求的情况下,降低无效操作。
90.opengl es 3.0中增加了新特征转换反馈(transform feedback)。transform feedback的主要功能是获取顶点着色器处理后的得到输出数据(图元),并保存获取到的输出数据。利用transform feedback获取到的输出数据可以保存到一个缓存中。这个缓存可以采样称为转换反馈缓存(transform feedback buffer)中。本技术技术方案利用了该特性,利用图形管线,将大量的向量或矩阵交给gpu并行处理,从而实现降低cpu侧负载的目的。
91.图6是本技术实施例的系统架构示意图。
92.如图6所示的系统框架在应用的基础上,在框架(framework)层和驱动层中间新增了用于实现本技术提供的渲染图像方法的渲染模块600。
93.可以理解的是,本技术实施例中所称的应用是需要使用gpu进行渲染的应用,例如,可以是应用软件、游戏等。本技术实施例中所称的计算机设备是能够运行该应用的计算机设备,该计算机设备中包括cpu和gpu。在一些实施例中,该计算机设备可以是便携式计算机设备,诸如手机、平板电脑等。便携式计算机设备的示例性实施例包括但不限于搭载或者其它操作系统的便携式计算机设备。上述便携式计算机设备也可以是其它便携式计算机设备,诸如膝上型计算机(laptop)等。还应当理解的是,在其他一些实施例中,上述计算机设备也可以不是便携式计算机设备,而是台式计算机。本技术实施例中的方法可以由计算机设备或者计算机设备中的部件(cpu和gpu,或者包含cpu和gpu的芯片或芯片系统(system on chip,soc)执行)。
94.在一些实施例中,渲染模块600可以包括:指令拦截模块610、特征识别模块620和管线优化模块630。
95.指令拦截模块610用于应用的拦截图形应用程序接口(application programming interface,api)。
96.特征识别模块620包括着色器分析子模块621和指令分析子模块622。着色器分析子模块621用于根据指令拦截模块610拦截到的图形api指令,确定渲染通道使用的顶点着色器和片段着色器,对该顶点着色器和片段着色器进行分析,以确定该渲染通道中的顶点着色器和片段着色器是否满足优化条件。指令分析子模块622用于分析指令拦截模块610拦截到的图形api指令,以判断该图形api指令是否满足优化条件。指令分析子模块622可以对该图形api指令进行调用分析和参数分析,以确定该图形api指令是否满足优化条件。
97.管线优化模块630包括待优化渲染通道识别子模块631和优化使能模块632。待优化识别通道子模块631用于识别渲染通道是否可以被优化。优化使能模块632用于对可优化的渲染通道进行视口优化和帧缓冲附件优化。视口优化用于减小视口的分辨率,这样可以减少片段着色器的运算次数,从而降低不必要的运算开销。帧缓冲附件优化用于调整颜色附件和深度附件的分辨率,以及减少单个像素的大小,这样可以降低渲染过程中从gpu与内存之间读写的数据量大小,从而减少不必要的内存读写。
98.在另一些实施例中,渲染模块600可以包括指令拦截模块610和管线优化模块630。换句话说,在这些实施例中,渲染模块600中不需要包括特征识别模块620。在这些实施例
中,判断渲染通道是否能够被优化的操作可以由应用的提供商(开发人员)来实现。应用的提供商可以预先确定应用中可优化的渲染通道和不可优化的渲染通道,然后将确定结果以渲染通道白名单和/或渲染通道黑名单的形式内置在应用中或者通过推送的方式以补丁的形式推送给安装有该应用的计算机设备。在此情况下,管线优化模块631中的渲染通道识别子模块631可以直接根据渲染通道白名单和/或渲染通道黑名单来判断待优化渲染通道是否是可以优化的渲染通道。
99.示例性的,图7示出了计算机设备100的结构示意图。计算机设备100可以包括处理器110、外部存储器接口120、内部存储器121、通用串行总线(universal serial bus,usb)接口130、充电管理模块140、电源管理模块141、电池142、天线1、天线2、移动通信模块150、无线通信模块160、音频模块170、扬声器170a、受话器170b、麦克风170c、耳机接口170d、传感器模块180、指南针190、马达191、指示器192、摄像头193、显示屏194以及用户标识模块(subscriber identification module,sim)卡接口195等。
100.可以理解的是,本技术实施例示意的结构并不构成对计算机设备100的具体限定。在本技术另一些实施例中,计算机设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
101.处理器110可以包括cpu 111和gpu 112。在一些实施例中,除了cpu 111和gpu 112以外,处理器110还可以包括应用处理器(application processor,ap),图像信号处理器(image signal processor,isp),控制器,视频编解码器,数字信号处理器(digital signal processor,dsp),基带处理器,和/或神经网络处理器(neural-network processing unit,npu)等。其中,不同的处理单元可以是独立的部件,也可以集成在一个或多个处理器中。在一些实施例中,计算机设备100也可以包括一个或多个处理器110。其中,控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。在其他一些实施例中,处理器110中还可以设置存储器,用于存储指令和数据。示例性地,处理器110中的存储器可以为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。这样就避免了重复存取,减少了处理器110的等待时间,因而提高了计算机设备100处理数据或执行指令的效率。
102.在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路间(inter-integrated circuit,i2c)接口、集成电路间音频(inter-integrated circuit sound,i2s)接口、脉冲编码调制(pulse code modulation,pcm)接口、通用异步收发传输器(universal asynchronous receiver/transmitter,uart)接口、移动产业处理器接口(mobile industry processor interface,mipi)、用输入输出(general-purpose input/output,gpio)接口、sim卡接口和/或usb接口等。其中,usb接口130是符合usb标准规范的接口,具体可以是mini usb接口、micro usb接口、usb type c接口等。usb接口130可以用于连接充电器为计算机设备100充电,也可以用于计算机设备100与外围设备之间传输数据。该usb接口130也可以用于连接耳机,通过耳机播放音频。
103.可以理解的是,本技术实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对计算机设备100的结构限定。在本技术另一些实施例中,计算机设备100也可以
采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
104.计算机设备100通过gpu 121,显示屏194,以及应用处理器等实现显示功能。gpu121为图像处理的微处理器,连接显示屏194和应用处理器。gpu 121用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个gpu 121,其执行程序指令以生成或改变显示信息。
105.显示屏194用于显示图像、视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,lcd)、有机发光二极管(organic light-emitting diode,oled)、有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的,amoled)、柔性发光二极管(flex light-emitting diode,fled)、miniled、microled、micro-oled、量子点发光二极管(quantum dot light emitting diodes,qled)等。在一些实施例中,计算机设备100可以包括1个或多个显示屏194。
106.在本技术的一些实施例中,当显示面板采用oled、amoled、fled等材料时,上述图7中的显示屏194可以被弯折。这里,上述显示屏194可以被弯折是指显示屏可以在任意部位被弯折到任意角度,并可以在该角度保持,例如,显示屏194可以从中部左右对折。也可以从中部上下对折。
107.计算机设备100的显示屏194可以是一种柔性屏,目前,柔性屏以其独特的特性和巨大的潜力而备受关注。柔性屏相对于传统屏幕而言,具有柔韧性强和可弯曲的特点,可以给用户提供基于可弯折特性的新交互方式,可以满足用户对于计算机设备的更多需求。对于配置有可折叠显示屏的计算机设备而言,计算机设备上的可折叠显示屏可以随时在折叠形态下的小屏和展开形态下大屏之间切换。因此,用户在配置有可折叠显示屏的计算机设备上使用分屏功能,也越来越频繁。
108.外部存储器接口120可以用于连接外部存储卡,例如micro sd卡,实现扩展计算机设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
109.内部存储器121可以用于存储一个或多个计算机程序,该一个或多个计算机程序包括指令。处理器110可以通过运行存储在内部存储器121的上述指令,从而使得计算机设备100执行本技术一些实施例中所提供的控制音量的方法,以及各种应用以及数据处理等。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统;该存储程序区还可以存储一个或多个应用(比如图库、联系人、游戏等)等。存储数据区可存储计算机设备100使用过程中所创建的数据(比如照片,联系人等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储部件,闪存部件,通用闪存存储器(universal flash storage,ufs)等。在一些实施例中,处理器110可以通过运行存储在内部存储器121的指令,和/或存储在设置于处理器110中的存储器的指令,来使得计算机设备100执行本技术实施例中所提供的渲染图像的方法,以及其他应用及数据处理。
110.触摸传感器180k,也称“触控面板”。触摸传感器180k可以设置于显示屏194,由触摸传感器180k与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180k用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触
摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180k也可以设置于计算机设备100的表面,与显示屏194所处的位置不同。
111.下面结合图8和图9对本技术实施例体用的渲染图像的方法进行介绍。
112.图8是根据本技术实施例提供的渲染图像的方法的示意性流程图。
113.801,计算机设备根据图形api指令,确定用于渲染待渲染数据的渲染通道是否满足预设条件。
114.该图形api指令是由该计算机设备运行的应用产生的图形api指令。为了便于描述,以下将步骤801中的待渲染数据简称为待渲染数据1,将用于渲染待渲染数据1的渲染通道称为渲染通道1。
115.802,若渲染通道1不满足预设条件,则该计算机设备直接使用该渲染通道1对待渲染数据1进行渲染。在此情况下,渲染通道1的输出结果就是对于待渲染数据1的渲染结果。
116.803,若渲染通道1满足该预设条件,则该计算机设备可以更换渲染通道1绑定的帧缓冲,然后使用更换了绑定的帧缓冲后的渲染通道1对待渲染数据1进行渲染。为了便于描述,可以将更换绑定的帧缓冲后的渲染通道1称为渲染通道2。将渲染通道1绑定的帧缓冲称为帧缓冲1,将渲染通道2绑定的帧缓冲称为帧缓冲2。在此情况下,可以利用feedback transform获取渲染通道2中的顶点着色器的输出数据,该输出数据可以作为对于待渲染数据1的渲染结果。为了便于描述,可以将步骤803中得到的输出数据称为渲染结果1。
117.如果下一个渲染通道(可以称为渲染通道3)需要使用渲染结果1,那么可以将渲染结果1作为渲染通道3的输入数据。
118.为了便于描述,以下将满足步骤801中提到的预设条件的渲染通道称为可优化的渲染通道,将不满足步骤801中提到的预设条件的渲染通道称为不可优的化渲染通道。
119.在一些实施例中,帧缓冲2的分辨率小于帧缓冲1的分辨率。换句话说,在渲染通道1是可优化的渲染通道的情况下,可以将与渲染通道1绑定的帧缓冲(即帧缓冲1)更换为一个分辨率更小的帧缓冲(即帧缓冲2)。可以理解的是,如果当前没有帧缓冲2,可以创建帧缓冲2并将帧缓冲2与渲染通道1绑定;如果帧缓冲2已经被创建好,则可以直接将帧缓冲2与渲染通道1绑定。
120.如上所述,帧缓冲的分辨率也与渲染通道中的片段着色器的运算次数相关。片段着色器执行次数跟图片像素点的个数一样。因此,片段着色器执行次数与帧缓冲的分辨率大小是相同的。如果帧缓冲的分辨率为1920
×
1080,那么片段着色器共需要执行1920
×
1080次运算。在上述技术方案中,通过判断渲染通道是否满足预设条件,可以确定该渲染通道是否能够用于缓解cpu的性能压力。缓解cpu的性能压力的主要工作是通过渲染通道中的顶点着色器实现的。因此,顶点着色器的输出结果就是希望得到的顶点数据的处理结果。但是,由于图形管线的完整性要求,渲染通道的所有流程必须全部执行。同时,由于顶点着色器已经输出了需要的处理结果,因此该渲染通道的顶点着色器之后的程序如何处理数据就无需关心。因此,在上述技术方案中,对于可优化的渲染通道,可以通过减小帧缓冲的分辨率的大小的方式减少该渲染通道中片段着色器的运算次数,从而实现减少无意义计算,以减少gpu的计算开销。此外,渲染通道2的视口分辨率与帧缓冲2的分辨率可以设置为相同。
121.通常情况下,帧缓冲的颜色附件的分辨率和帧缓冲的深度附件的分辨率通常会小于或等于帧缓冲的分辨率。因此,在降低绑定的帧缓冲的分辨率的情况下,同时相应地调整
帧缓冲的颜色附件和深度附件的分辨率。在一些实施例中,帧缓冲2的颜色附件的分辨率小于或等于帧缓冲2的分辨率,帧缓冲2的深度附件的分辨率小于或等于帧缓冲2的分辨率。
122.如果颜色附件的分辨率大小为1920
×
1080,那么就需要从内存中读取/写入的1920
×
1080个像素的颜色值。因此,减少颜色附件的分辨率可以有效减少需要从内存中读取的总数据量,从而可以减少无意义的内存读写开销。
123.类似的,如果深度附件的分辨率大小为1920
×
1080,那么就需要从内存中读取/写入的1920
×
1080个像素的深度值。因此,减少深度附件的分辨率可以有效减少需要从内存中读取的总数据量,从而可以减少无意义的内存读写开销。
124.在一些实施例中,帧缓冲2的分辨率的大小可以设置为1
×
1,帧缓冲2的颜色附件的分辨率为1
×
1,帧缓冲2的深度附件的分辨率为1
×
1。这样,片段着色器可以只需要执行1次计算,也只需要读取1个像素的颜色值和深度值。这样,可以有效地减少片段着色器的运算次数,减少gpu的计算开销以及无意义的内存读写开销。
125.在一些实施例中,帧缓冲1可以保存下来,以便于需要恢复的时候,可以将重新将渲染通道1绑定的帧缓冲恢复为帧缓冲1。
126.可以理解的是,如果帧缓冲1的分辨率大小为n
×
m(n和m为正整数),只要帧缓冲2的分辨率小于n
×
m,就可以减少片段着色器的运算次数。因此,使用分辨率大小为1
×
1的帧缓冲2替换帧缓冲1只是减少帧缓冲的分辨率大小的一种实现方式。在其他实现方式中,帧缓冲2的分辨率大小也可以设置为其他值,例如,1
×
2,2
×
1,2
×
2等。
127.类似的,只要帧缓冲2的颜色附件的分辨率小于帧缓冲1的颜色附件的分辨率,就可以减少从内存中读取的数据量。在其他实现方式中,帧缓冲2的颜色附件大小也可以设置为其他值,例如,1
×
2,2
×
1,2
×
2等。通常情况下,帧缓冲2的颜色附件的分辨率会小于或等于帧缓冲2的分辨率。
128.同理,只要帧缓冲2的深度附件的分辨率小于帧缓冲1的深度附件的分辨率,就可以减少从内存中读取的数据量。在其他实现方式中,帧缓冲2的深度附件大小也可以设置为其他值,例如,1
×
2,2
×
1,2
×
2等。通常情况下,帧缓冲2的深度附件的分辨率会小于或等于帧缓冲2的分辨率。
129.在另一些实施例中,帧缓冲2的单个像素占用的存储空间大小可以小于帧缓冲1的单个像素占用的存储空间大小。单个像素占用的存储空间大小与颜色附件中单个像素占用的存储空间大小和深度附件中单个像素的占用的存储空间大小相关。因此,可以降低颜色附件中单个像素的颜色值占用的存储空间大小,和/或,降低深度附件中单个像素的深度值占用的存储空间大小。
130.例如,在一些实施例中,帧缓冲2的颜色附件的格式可以设置为rgba8。这样,每个像素只需要32位(bit)的存储空间。
131.在另一些实施例中,帧缓冲2颜色附件的格式可以为rgb 1或者rgb 4。这样可以更进一步减少单个像素占用的存储空间。
132.在一些实施例中,帧缓冲2的深度附件的格式可以设置为d24s8。这样,每个像素只需要32位的存储空间。
133.在另一些实施例中,帧缓冲2的深度附件的格式可以设置为d24x8或者x4s4。这样,这些格式的深度附件中每个像素也只需要32位的存储空间。
134.在另一些实施例中,帧缓冲2的深度附件的格式可以是d16或者d15s1。这样可以进一步减少单个像素占用的存储空间。
135.假设帧缓冲2的颜色附件和深度附件的分辨率被设置为1
×
1,颜色附件的格式为rgba8,深度附件的格式为d24s8。在此情况下,每个像素的颜色缓冲区和深度缓冲区各需要4字节。渲染通道1的1帧中需要拷贝的数据大小是16字节。如果帧率为60fps,那么每一秒的数据只有7.5千兆比特每秒(kilo bits per second,kbps)。由此可见,通过减小单个像素占用的存储空间,可以有效减少无意义的数据读写造成的内存读写开销。
136.在一些实施例中,计算机设备中可以保存一个渲染通道白名单,该渲染通道白名单中的渲染通道都是可优化的渲染通道。每个渲染通道可以有一个标识。渲染通道白名单中保存的就是可优化的渲染通道标识。计算机设备可以从图形api指令中确定渲染通道1的标识,并判断渲染通道1的标识是否在该渲染通道白名单中。如果渲染通道1的标识在该渲染通道白名单中,那么计算机设备可以确定渲染通道1可以是满足预设条件的可优化的渲染通道;如果渲染通道1的标识不在该渲染通道白名单中,那么计算机设备可以确定渲染通道1是不满足预设条件的不可优化的渲染通道。
137.以图1为例,图1中renderpass后的阿拉伯数字就是渲染通道的标识。例如图1中的第一个渲染通道的标识为0,第二个渲染通道的标识为1。
138.下面结合图9对如何确定渲染通道白名单进行介绍。
139.图9是根据本技术实施例提供的确定渲染通道白名单的示意性流程图。
140.901,计算机设备拦截图形api指令。
141.该计算机设备拦截的图形api指令是由该计算机设备运行的应用产生的图形api指令。
142.902,该计算机设备对拦截到图形api指令进行分析,确定该图形api指令的调用流程和相关参数设置是否满足以下条件:
143.条件1,图形api指令用于调用的渲染通道渲染数据;
144.条件2,该渲染通道的视口的分辨率不小于预设分辨率;
145.条件3,该渲染通道的绑定的帧缓冲包括颜色附件;
146.条件4,该渲染通道中每个绘制调用使用的着色器程序能够被优化;
147.条件5,该图形api指令的每个绘制调用中均对应预设指令。
148.下面,分别对条件1至条件5进行介绍。
149.条件1,图形api指令用于调用的渲染通道渲染数据
150.图9所示的方法是要确定渲染通道是否是可优化的渲染通道。所以需要先判断图形api指令是调用渲染通道对数据进行渲染的指令。如果图形api指令不是调用渲染通道的指令,那么也就没有必要对后面的条件进行判断了。
151.判断该图形api指令是否是用于调用渲染通道的图形api指令可以通过帧缓冲的相关指令来判断。例如,如果绑定帧缓冲为默认帧缓冲,那么可以确定是一个渲染通道的开始。在此情况下,可以确定该图形api指令是用于调用渲染通道的图形api指令。
152.例如,在opengl es中,函数glbindframebuffer的功能是绑定一个命名的帧缓冲对象。如果图形api指令中包括函数glbindframebuffer,那么可以认为该图形api指令是用于调用渲染通道的图形api指令。假设该计算机设备拦截的图形api指令包括如下表2所示
的指令:
153.表2
[0154][0155]
如表2所示的指令中,第15行代码中包括函数glbindframebuffer(target=gl_draw_framebuffer,framebuffer=0),其中framebuffer=0。表示绑定到默认帧缓冲。在此情况下,可以确定该渲染通道满足条件1。
[0156]
条件2,该渲染通道的视口大小不小于预设分辨率
[0157]
该预设分辨率可以是该渲染通道的绑定的帧缓冲的默认分辨率。帧缓冲的默认分辨率通常是不小于计算机设备当前显示界面的分辨率。例如,假设该计算机设备的显示装置的显示界面的支持的最大分辨率为1920
×
1080,那么帧缓冲的默认分辨率可以等于或大于1920
×
1080。如果该计算机设备的显示装置的显示界面的分辨率降低到1280
×
720,那么帧缓冲的默认分辨率可以调整为1280
×
720。
[0158]
还以表2所示的指令为例。假设运行该应用的计算机设备的屏幕分辨率为1782
×
828。那么根据表所示的指令中的第16行指令,可以确定出渲染通道的视口大小为1782
×
828。在此情况下,可以确定该渲染通道满足条件2。
[0159]
条件3,渲染通道的绑定的帧缓冲包括颜色附件(color attachment)
[0160]
根据opengl的定义,一个完整的帧缓冲对象至少要有一个颜色附件,否则无法被使用。所以需要检测渲染通道的帧缓冲对象是否包括颜色附件。
[0161]
还以表2所示的指令为例,该渲染通道绑定的是默认帧缓冲。因此,可以确认默认帧缓冲是否包括颜色附件。为例便于描述,以下实施例中假设如表2所示的指令所示的渲染通道绑定的默认缓冲帧包括颜色附件。
[0162]
条件4,该渲染通道包括的着色器程序能够被优化。
[0163]
该着色器程序对应于一个顶点着色器和一个片段着色器。
[0164]
在一些实施例中,该计算机设备中可以保存一个着色器程序白名单。该着色器程序白名单包括能够被优化的着色器程序的标识。如果该渲染通道的着色器程序的标识在该着色器程序白名单中,那么可以确定该渲染通道包括的着色器程序能够被优化。
[0165]
在另一些实施例中,该计算机设备中可以包括一个着色器程序白名单和一个着色器程序黑名单。该着色器程序白名单中包括能够被优化的着色器程序的标识,该着色器程序黑名单中包括无法被优化的着色器程序的标识。如果该渲染通道的着色器程序的标识在该着色器程序白名单中,那么可以确定该渲染通道包括的着色器程序能够被优化。如果该渲染通道的着色器程序的标识在该着色器程序黑名单中,那么可以确定该渲染通道包括的着色器程序不能被优化。如果该渲染通道的着色器程序的标识既不在该着色器程序白名单中,也不在该着色器程序黑名单中,那么可以确定该着色器程序对应的顶点着色器和片段着色器是否可以被优化。如果该着色器程序对应的顶点着色器和片段着色器均可以被优化,那么可以确定该着色器程序能够被优化,并且可以将该着色器程序的标识添加到着色器程序白名单中;如果该着色器程序对应的顶点着色器或片段着色器中的至少一个无法被优化,那么可以确定该着色器程序不能被优化,并且可以将该着色器程序的标识条件到着色器程序黑名单中。
[0166]
还以表2所示的指令为例,如表2所示的指令中的第2行指令示出了该渲染通道使用的着色器程序的标识为579。假设标识为579的着色器程序在着色器程序白名单中,那么可以确定该渲染通道满足条件4。
[0167]
能够被优化的顶点着色器满足以下条件:
[0168]
条件1:顶点着色器的源码中包括多个使用out关键词修饰的变量;
[0169]
条件2:顶点着色器的源码中包括多个使用in关键词修饰的变量;
[0170]
条件3:顶点着色器的源码中存在if-else等条件语句的使用。
[0171]
如果一个顶点着色器满足上述三个条件,那么可以确定该顶点着色器能够被优化。如果一个顶点着色器不能满足上述三个条件中的任一个或多个,那么可以确定该顶点着色器无法被优化。
[0172]
在一些实施例中,能够被优化的顶点着色器的标识可以被添加到顶点着色器白名单中。在另一些实施例中,无法被优化的顶点着色器标识可以被添加到顶点着色器黑名单中。
[0173]
例如,表3示出了顶点着色器的部分源码。
[0174]
表3
[0175]
[0176][0177]
如表3所示的顶点着色器中的源码中包括多个in修饰的输入变量,即in vec3in_vertex,in vec3 in_normal,in ivec3 in_boneindices,in vec4 in_boneweights,in vec4in_tangent;该顶点着色器的源码中还包括多个out修饰的输出变量,即out vec3 out_pos,out vec3 out_normal,out vec3 ourt_tangent;该顶点着色器中还包括多个if条件语句的使用,即if(in_boneweights[1]》0.0),if(in_boneweights[2]》0.0),if(in_boneweights[3]》0.0)。因此,可以确定该顶点着色器能够被优化。
[0178]
能够被优化的片段着色器满足以下条件:
[0179]
条件1:片段着色器源码中有且仅有1个out关键字修饰的变量,并且该变量的赋值操作是固定的颜色值或者是一个常量;
[0180]
条件2:片段着色器源码中没有in关键字修饰的变量;
[0181]
条件3:片段着色器源码中没有使用if-else等条件语句;
[0182]
条件4:片段着色器源码中没有统一(uniform)变量和统一缓存对象(uniform buffer object,ubo);
[0183]
条件5:片段着色器不使用二维采样器(sampler2d)修饰的纹理和采样器。
[0184]
如果一个片段着色器满足上述五个条件,那么可以确定该片段着色器能够被优化。如果一个片段着色器不能满足上述五个条件中的任一个或多个,那么可以确定该顶点着色器无法被优化。
[0185]
在一些实施例中,能够被优化的片段着色器的标识可以被添加到片段着色器白名单中。在另一些实施例中,无法被优化的片段着色器标识可以被添加到片段着色器黑名单中。
[0186]
例如,表4示出了片段着色器的源码。
[0187]
表4
[0188][0189]
如表4所示的片段着色器的源码中没有in修饰的变量;仅有一个out修饰的变量out vec4 outcol,该变量的赋值操作是一个常量;没有使用if-else等条件语句;没有统一变量和ubo;也不使用二维采样器(sampler2d)修饰的纹理和采样器。因此,可以确定该片段着色器能够被优化。
[0190]
表5示出了另一段片段着色器的源码。
[0191]
表5
[0192][0193]
如表5所示的片段着色器的源码中有多个uniform修饰的变量和多个in修饰的变量。因此,如表5所示的片段着色器不能被优化。
[0194]
为了便于区分,可以将需要确定该图形api指令是否满足的条件统称为:渲染通道优化条件;将判断顶点着色器是否能够优化的条件统称为:顶点着色器优化条件;将判断片段着色器是否能够优化的条件统称为:片段着色器优化条件。
[0195]
为了便于描述,可以将使用out关键字修饰的变量称为输出变量,将使用in关键字修饰的变量称为输入变量。
[0196]
在一些实施例中,一个图像api指令中可能会包括多个draw call。在此情况下,每个draw call都有一个对应的着色器程序。因此,需要判断每个draw call对应的着色器程序是能够被优化的着色器程序。
[0197]
条件5,该图形api指令的每个绘制调用中均对应预设指令。
[0198]
该预设指令可以包括:点模式设置指令和顶点数据写回指令。
[0199]
该计算机设备可以分析需要渲染图元类型设置指令是否是将需要渲染图元类型设置为点。需要渲染图元类型设置指令将渲染通道需要渲染图元类型设置为点,则可以确定该图形api指令中包括点模式设置指令。
[0200]
例如,opengl es中,函数gldrawarrays的功能是提供绘制功能,从数组数据中提取数据渲染基本图元。如果函数gldrawarrays中需要渲染的图元类型是点(即gl_points),则可以确定需要渲染图元类型设置指令将渲染通道需要渲染图元类型设置为点。
[0201]
还以表2中所示的指令为例,如表2所示的指令中的第16行指令包括函数gldrawarrays,且需要渲染的图元类型为点。
[0202]
顶点数据写回指令是与transform feedback相关的一些指令。顶点数据写回指令可以包括以下中的任一种或多种指令:标识transform feedback开始的指令(以下简称第一顶点数据写回指令),标识transform feedback调用结束的指令(以下简称第二顶点数据写回指令)。
[0203]
还以表2所示的指令为例,如表2所示的第12行指令为第一顶点数据写回指令,第14行指令为第二顶点数据写回指令。
[0204]
如上所述,如表2所示的图形api指令中仅包括一个draw call且该draw call使用的着色器程序以及对应的指令满足上述条件4和条件5,且如表2所示的指令对一个的渲染通道满足条件1至条件3。因此,可以确定如表2所示的图形api指令满足渲染通道优化条件。
[0205]
在另一些实施例中,图形api指令中可能会包括多个draw call。在此情况下,需要该多个draw call中每个draw call调用的着色器程序均满足条件4,且每个draw call均对应预设指令,且满足条件1至条件3。只有这样,才可以确定该渲染通道满足渲染通道优化条件。换句话说,如果渲染通道中包括多个draw call,该多个draw call中的任一个或多个draw call调用的着色器程序不满足条件4,或者,一个或多个draw call对应的指令中不包括上述预设指令,那么可以确定该渲染通道不满足渲染通道优化条件。
[0206]
903,该计算机设备如果该图形api指令满足上述渲染通道优化条件,那么可以确定该图形api指令调用的渲染通道是可优化的渲染通道,将该渲染通道的标识加入渲染通道白名单中。
[0207]
在一些实施例中,对于需要优化的应用(application,app),计算机设备可以先学习渲染通道白名单。例如,对于该应用的前n帧需要渲染的图像,该计算机设备可以按照图9所示的方法,确定每一帧图像在渲染过程中使用的渲染通道是否可以被加入到渲染通道白名单中。从第n+1帧开始,该计算机设备可以直接判断图形api指令调用的渲染通道是否在该渲染通道白名单中。
[0208]
可以理解的是,n的取值越大,该计算机设备确定出的白名单越准确,但是可以开始根据白名单优化渲染通道时间就越晚;n的取值越小,该计算机设备可以更快地根据白名单优化渲染通道,但是可能会遗漏一些能够优化的渲染通道。
[0209]
在图9所示的方法中,计算机设备根据渲染通道优化条件来确定渲染通道白名单。
[0210]
图9所示的识别可优化的渲染通道的方法还可以用图7所示的流程图表示。
[0211]
图10是本技术实施例提供的另一种识别可以优化的渲染通道的流程图。
[0212]
1001,确定渲染通道的是否满足条件。
[0213]
步骤1001中确定渲染通道是否满足条件可以包括:确定渲染通道的视口分辨率是否不小于预设分辨率以及确定渲染通道的帧缓冲对象包括颜色附件。
[0214]
1002,确定每个draw call使用的着色器程序是否满足条件。
[0215]
例如,在一些实施例中,该确定每个draw call使用的着色器程序是否满足条件可以包括:确定每个draw call使用的着色器程序是否在着色器程序白名单内。若每个draw call使用的着色器程序都在着色器白名单内,则可以确定每个draw call使用的着色器程序满足条件;若有一个或多个draw call使用的着色器程序不在着色器程序白名单内,则可以确定不满足条件。
[0216]
又如,在另一些实施例中,该确定每个draw call使用的着色器程序是否满足条件可以包括:确定每个draw call使用的顶点着色器是否在顶点着色器白名单内且每个draw call使用的片段着色器是否在片段着色器白名单内。若每个draw call使用的顶点着色器均在顶点着色器白名单内且每个draw call使用的片段着色器均在片段着色器白名单内,则可以确定每个draw call使用的着色器程序满足条件;若有一个或多个draw call使用的顶点着色器不在顶点着色器白名单中或者一个或多个draw call使用的片段着色器不在片段着色器白名单中,则可以确定每个draw call使用的着色器程序不满足条件。
[0217]
又如,在另一些实施例中,确定每个draw call使用的着色器程序是否满足条件可以包括:确定每个draw call使用的顶点着色器是否满足顶点着色器优化条件且每个draw call使用的片段着色器是否满足片段着色器优化条件。若每个draw call使用的顶点着色器均满足顶点着色器优化条件且每个draw call使用的片段着色器均满足片段着色器优化条件,则可以确定每个draw call使用的着色器程序满足条件;若有一个或多个draw call使用的顶点着色器不满足顶点着色器优化条件或者一个或多个draw call使用的片段着色器不满足片段着色器优化条件,则可以确定每个draw call使用的着色器程序不满足条件。
[0218]
确定顶点着色器是否满足顶点着色器优化条件以及确定片段着色器是否满足片段着色器优化条件的具体过程可以参考图9所示的实施例,为了简洁,在此就不再赘述。
[0219]
1003,确定每个draw call前后是否有特殊的指令调用。
[0220]
该特殊的指令调用包括transform feedback的指令以及用于指示需要渲染图元类型为点的指令。具体指令类型可以参考图9所示的方法。
[0221]
1004,确定是否是最后一个draw call。
[0222]
该确定是否是最后一个draw call的意思是最后一个draw call是否也已经完成上述判断,即使用的着色器程序是否满足条件和draw call前后是否有特殊的指令调用。
[0223]
1005,将渲染通道加入到渲染通道白名单中。
[0224]
在另一些实施例中,计算机设备还可以根据渲染通道优化条件来确定一个渲染通道黑名单。在此情况下,计算机设备可以根据渲染通道黑名单来确定渲染通道是否能够被渲染。还以图8中的渲染通道1为例。如果渲染通道黑名单中包括渲染通道1的标识,那么该计算机设备可以确定渲染通道1是不可优化的渲染通道。在此情况下,该计算机设备可以执行步骤802;如果渲染通道黑名单中不包括渲染通道1的标识,那么该计算机设备可以确定渲染通道1是可优化的渲染通道。在此情况下,该计算机设备可以执行步骤803。
[0225]
在另一些实施例中,该计算机设备可以根据渲染通道优化条件确定一个渲染通道黑名单和渲染通道白名单。在此情况下,计算机设备可以根据渲染通道白名单和渲染通道黑名单来确定渲染通道是否能够被渲染。还以图8中的渲染通道1为例。如果渲染通道黑名单中包括渲染通道1的标识,那么该计算机设备可以确定渲染通道1是不可优化的渲染通道。在此情况下,该计算机设备可以执行步骤802;如果渲染通道黑名单中不包括渲染通道1的标识且渲染通道白名单中包括渲染通道1的标识,那么该计算机设备可以确定渲染通道1是可优化的渲染通道。在此情况下,该计算机设备可以执行步骤803。如果渲染通道黑名单和渲染通道白名单中均不包括渲染通道1的标识,那么该计算机设备可以根据渲染通道优化条件来确定渲染通道1是否能够被优化;如果确定渲染通道1能够被优化,则可以将渲染通道1的标识添加到渲染通道白名单中;如果确定渲染通道1无法被优化,则可以将渲染通道1的标识添加到渲染通道黑名单中。
[0226]
如上所述,渲染通道白名单和/或渲染通道黑名单也可以是应用的提供商来提供的。例如,应用的提供商可以预先根据图9或图10所示的方法确定渲染通道白名单,然后将确定出的渲染通道白名单内置在应用或者通过应用更新的方式作为应用的补丁推送给该计算机设备。这样,该计算机设备可以直接利用该渲染通道白名单来确定渲染通道是否能够被优化。
[0227]
类似的,顶点着色器白名单和/或顶点着色器黑名单可以是由运行应用的计算机设备来确定,也可以是由应用的提供商确定的。片段着色器白名单和/或片段着色器黑名单可以是由运行应用的计算机设备来确定,也可以是由应用的提供商确定的。
[0228]
图11是根据本技术实施例提供的一种渲染图像的方法的示意性流程图。在图11所示的方法中,顶点着色器白名单、片段着色器白名单和渲染通道白名单都是由运行应用的计算机设备实现的。
[0229]
1101,计算机设备根据应用的k1帧图像对应的图形api指令确定顶点着色器白名单。k1为正整数。
[0230]
1102,该计算机设备根据应用的k2帧图像对应的图形api指令确定片段着色器白名单。k2为正整数。
[0231]
1103,该计算机设备根据顶点着色器白名单和片段着色器白名单,确定着色器程序白名单。
[0232]
1104,该计算机设备根据应用的k3帧图像对应的图形api指令确定渲染通道白名单。k3为正整数。
[0233]
1105,该计算机设备根据所述渲染通道白名单,确定用于渲染该k3帧图像以后的图像渲染通道是否可以被优化。
[0234]
在一些实施例中,k1等于k2,且k3大于k1。例如,计算机设备可以根据应用的前50帧图像,完成顶点着色器白名单和片段着色器白名单的确定工作。同时,该计算机设备还可以根据应用的前50帧图像确定部分的渲染通道白名单。例如,该计算机设备确定用于渲染第16帧图像的渲染通道是可优化的渲染通道,那么该计算机设备可以将该渲染通道添加到渲染通道白名单中。在确定了顶点着色器白名单和片段着色器白名单后,计算机设备可以确定着色器程序白名单。计算机设备在确定了着色器程序白名单后,根据第51帧至第100帧图像对应的图形api指令确定渲染通道白名单。计算机设备在根据第51帧至第100帧确定渲染通道白名单的过程中,可以直接利用确定好的着色器程序白名单来确定第51帧至第100帧的渲染通道白名单中的着色器程序是否可以被优化,而无需根据顶点着色器和片段着色器的代码来判断着色器程序是否能够被优化。从第101帧图像开始,该计算机设备可以直接根据确定的渲染通道白名单,确定是否可以对渲染通道进行优化,并根据确定结果优化/不优化渲染通道。
[0235]
在另一些实施例中,k1可以不等于k2,但是k3大于k1和k2。例如,计算机设备可以根据应用的前50帧图像,完成顶点着色器白名单确定工作;根据应用的前80帧,完成片段着色器白名单确定工作。同时,该计算机设备还可以根据应用的前80帧图像确定部分的渲染通道白名单。在确定了顶点着色器白名单和片段着色器白名单后,计算机设备可以确定着色器程序白名单。计算机设备在确定了着色器程序白名单后,根据第51帧至第100帧图像对应的图形api指令确定渲染通道白名单。计算机设备在根据第51帧至第100帧确定渲染通道白名单的过程中,可以直接利用确定好的着色器程序白名单来确定第51帧至第100帧的渲染通道白名单中的着色器程序是否可以被优化,而无需根据顶点着色器和片段着色器的代码来判断着色器程序是否能够被优化。从第101帧图像开始,该计算机设备可以直接根据确定的渲染通道白名单,确定是否可以对渲染通道进行优化,并根据确定结果优化/不优化渲染通道。
[0236]
图12示出了着色器程序白名单的确定过程。一个着色器程序对应于一个顶点着色器和一个片段着色器。如图12所示,着色器程序1、着色器程序3和着色器程序4中的每个着色器对应的顶点着色器都在顶点着色器白名单中且这三个着色器程序中的每个着色器程序对应的片段着色器都在片段着色器白名单中。因此,着色器程序1、着色器程序3和着色器程序4在着色器程序白名单中。虽然着色器程序2对应的片段着色器4在片段着色器白名单中,但是着色器程序2对应的顶点着色器2不在顶点着色器白名单。因此,着色器程序2不在着色器程序白名单中。类似的,虽然着色器程序5对应的顶点着色器5在顶点着色器白名单中,但是着色器程序5对应的片段着色器5不在片段着色器白名单中,因此,着色器程序5不在着色器程序白名单中。
[0237]
下面以一个具体渲染过程为例,对本技术技术方案进行介绍。
[0238]
图13是一个使用蒙皮渲染通道生成蒙皮数据的示意图。
[0239]
通过对该蒙皮渲染通道进行分析可以确定该蒙皮渲染通道是可优化的渲染通道。因此,可以将视口的分片率设置为1
×
1,将颜色附件的分辨率设置为1
×
1,将深度附件的分辨率设置为1
×
1,将颜色附件的格式设置为rgb8,将深度附件的格式设置为d24s8。
[0240]
如图13所示,身体模型的数据作为顶点输入,顶点着色器程序对身体模型进行处理输出蒙皮数据。顶点着色器程序输出的蒙皮数据包括人物帽子的蒙皮数据,人物身体的蒙皮数据以及人物衣服的蒙皮数据。
[0241]
图14是主场景渲染通道使用蒙皮渲染通道生成的蒙皮数据完成人物绘制的流程图。
[0242]
可以看出,图14的主场景渲染通道只需要使用顶点着色器输出的蒙皮数据。因此,只需要关心蒙皮渲染通道中顶点着色器的输出结果。蒙皮渲染通道中片段着色器和帧缓冲对于顶点着色器的输出结果没有影响。但是渲染通道的完成性要求渲染通道的所有程序必须被执行。因此,可以通过减小视口分辨率的方式减少片段着色器的运算量,从而实现降低gpu计算开销的目的。同时可以通过设置颜色附件和深度附件的格式的方式将减小一个像素占用存储空间的大小。这样可以减少内存的读写操作,降低内存带宽开销。
[0243]
本技术实施例还提供一种电子装置,该电子装置包括cpu和gpu,该cpu,用于根据图形api指令,确定用于渲染待渲染数据的第一渲染通道满足预设条件;该cpu,还用于将该第一渲染通道绑定的帧缓冲从第一帧缓冲更换为第二帧缓冲,其中该第二帧缓冲的分辨率小于该第一帧缓冲的分辨率且该第二帧缓冲的颜色附件和深度附件的分辨率小于或等于该第二帧缓冲的分辨率,和/或,该第二帧缓冲中单个像素占用的存储空间大小小于该第一帧缓冲中单个像素占用的存储空间大小;该gpu,用于使用第二渲染通道渲染该待渲染数据,并获取该第二渲染通道中的顶点着色器的输出数据,其中,该第二渲染通道为将绑定的帧缓冲替换为该第二帧缓冲的该第一渲染通道。
[0244]
可选的,在一些实施例中,该电子装置可以是计算机设备。该计算机设备可以是个人电脑、笔记本电脑、平板电脑、手机等计算机设备。
[0245]
可选的,在另一些实施例中,该电子装置可以是芯片或者是片上系统。
[0246]
该cpu和该gpu的具体功能和有益效果可以参见上述实施例,为了简洁在此就不再赘述。
[0247]
本技术实施例还提供一种芯片系统,该芯片系统包括逻辑电路,该逻辑电路用于与输入/输出接口耦合,该逻辑电路,用于根据图形api指令,确定用于渲染待渲染数据的第一渲染通道满足预设条件;该逻辑电路,还用于将该第一渲染通道绑定的帧缓冲从第一帧缓冲更换为第二帧缓冲,其中该第二帧缓冲的分辨率小于该第一帧缓冲的分辨率且该第二帧缓冲的颜色附件和深度附件的分辨率小于或等于该第二帧缓冲的分辨率,和/或,该第二帧缓冲中单个像素占用的存储空间大小小于该第一帧缓冲中单个像素占用的存储空间大小;该逻辑电路,还用于通过是输入/输出接口将第二渲染通道的设置信息和该待渲染数据发送至图形处理器,其中,该第二渲染通道为将绑定的帧缓冲替换为该第二帧缓冲的该第一渲染通道。该芯片系统可以是上述实施例中的cpu。
[0248]
本技术实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有程序代码,当该计算机存储介质在计算机上运行时,使得计算机执行如上述实施例中所示的方
法。
[0249]
本技术实施例提供一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得该计算机执行如上述实施例中所示的方法。
[0250]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0251]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0252]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0253]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0254]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0255]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0256]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。

技术特征:
1.一种渲染图像的方法,其特征在于,包括:根据图形应用程序接口api指令,确定用于渲染待渲染数据的第一渲染通道满足预设条件;将所述第一渲染通道绑定的帧缓冲从第一帧缓冲更换为第二帧缓冲,其中所述第二帧缓冲的分辨率小于所述第一帧缓冲的分辨率且所述第二帧缓冲的颜色附件和深度附件的分辨率小于或等于所述第二帧缓冲的分辨率,和/或,所述第二帧缓冲中单个像素占用的存储空间大小小于所述第一帧缓冲中单个像素占用的存储空间大小;使用第二渲染通道渲染所述待渲染数据,并获取所述第二渲染通道中的顶点着色器的输出数据,其中,所述第二渲染通道为将绑定的帧缓冲替换为所述第二帧缓冲的所述第一渲染通道。2.根据权利要求1所述的方法,其特征在于,所述第二帧缓冲的分辨率为1
×
1,所述第二帧缓冲的颜色附件的分辨率为1
×
1,所述第二帧缓冲的深度附件的分辨率为1
×
1。3.根据权利要求1或2所述的方法,其特征在于,所述第二帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小小于所述第一帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小,和/或,所述第二帧缓冲的深度附件中单个像素的深度值占用的存储空间大小小于所述第一帧缓冲的深度附件中单个像素的深度值占用的存储空间大小。4.根据权利要求1至3中任一项所述的方法,其特征在于,所述确定用于渲染待渲染数据的第一渲染通道满足预设条件,包括:确定所述第一渲染通道为渲染通道白名单包括的渲染通道中的一个。5.根据权利要求1至4中任一项所述的方法,其特征在于,所述第一渲染通道的视口的分辨率不小于预设分辨率阈值;所述第一渲染通道的绑定的帧缓冲包括颜色附件;所述第一渲染通道中每个绘制调用使用的着色器程序均能够被优化,其中所述着色器程序对应于一个片段着色器和一个顶点着色器;所述第一渲染通道中的每个绘制调用中均对应预设指令。6.根据权利要求5所述的方法,其特征在于,所述预设指令包括:点模式设置指令和顶点数据写回指令,所述点模式设置指令用于指示需要渲染图元类型为点,所述顶点数据写回指令用于获取并保存所述顶点着色器的输出数据。7.根据权利要求5或6所述的方法,其特征在于,所述片段着色器有且仅有一个赋值操作为固定的颜色值或者是一个常量的输出变量;所述片段着色器没有输入变量;所述片段着色器没有使用条件语句;所述片段着色器没有统一变量和统一缓存对象ubo;所述片段着色器不使用二维采样器修饰的纹理和采样器。8.根据权利要求5至7中任一项所述的方法,其特征在于,所述顶点着色器包括多个输入变量;所述顶点着色器还包括多个输出变量;所述顶点着色器还包括条件语句。
9.一种电子装置,其特征在于,所述电子装置包括中央处理器cpu和图形处理器gpu,所述cpu,用于根据图形应用程序接口api指令,确定用于渲染待渲染数据的第一渲染通道满足预设条件;所述cpu,还用于将所述第一渲染通道绑定的帧缓冲从第一帧缓冲更换为第二帧缓冲,其中所述第二帧缓冲的分辨率小于所述第一帧缓冲的分辨率且所述第二帧缓冲的颜色附件和深度附件的分辨率小于或等于所述第二帧缓冲的分辨率,和/或,所述第二帧缓冲中单个像素占用的存储空间大小小于所述第一帧缓冲中单个像素占用的存储空间大小;所述gpu,用于使用第二渲染通道渲染所述待渲染数据,并获取所述第二渲染通道中的顶点着色器的输出数据,其中,所述第二渲染通道为将绑定的帧缓冲替换为所述第二帧缓冲的所述第一渲染通道。10.根据权利要求9所述的电子装置,其特征在于,所述第二帧缓冲的分辨率为1
×
1,所述第二帧缓冲的颜色附件的分辨率为1
×
1,所述第二帧缓冲的深度附件的分辨率为1
×
1。11.根据权利要求9或10所述的电子装置,其特征在于,所述第二帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小小于所述第一帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小,和/或,所述第二帧缓冲的深度附件中单个像素的深度值占用的存储空间大小小于所述第一帧缓冲的深度附件中单个像素的深度值占用的存储空间大小。12.根据权利要求9至11中任一项所述的电子装置,其特征在于,所述cpu,具体用于确定所述第一渲染通道为渲染通道白名单包括的渲染通道中的一个。13.根据权利要求9至12中任一项所述的电子装置,其特征在于,所述第一渲染通道的视口的分辨率不小于预设分辨率阈值;所述第一渲染通道的绑定的帧缓冲包括颜色附件;所述第一渲染通道中每个绘制调用使用的着色器程序均能够被优化,其中所述着色器程序对应于一个片段着色器和一个顶点着色器;所述第一渲染通道中的每个绘制调用中均对应预设指令。14.根据权利要求13所述的电子装置,其特征在于,所述预设指令包括:点模式设置指令和顶点数据写回指令,所述点模式设置指令用于指示需要渲染图元类型为点,所述顶点数据写回指令用于获取并保存所述顶点着色器的输出数据。15.根据权利要求13或14所述的电子装置,其特征在于,所述片段着色器有且仅有一个赋值操作为固定的颜色值或者是一个常量的输出变量;所述片段着色器没有输入变量;所述片段着色器没有使用条件语句;所述片段着色器没有统一变量和统一缓存对象ubo;所述片段着色器不使用二维采样器修饰的纹理和采样器。16.根据权利要求13至15中任一项所述的电子装置,其特征在于,所述顶点着色器包括多个输入变量;所述顶点着色器还包括多个输出变量;所述顶点着色器还包括条件语句。17.一种芯片系统,其特征在于,所述芯片系统包括:逻辑电路,所述逻辑电路用于与输
入/输出接口耦合,所述逻辑电路,用于根据图形应用程序接口api指令,确定用于渲染待渲染数据的第一渲染通道满足预设条件;所述逻辑电路,还用于将所述第一渲染通道绑定的帧缓冲从第一帧缓冲更换为第二帧缓冲,其中所述第二帧缓冲的分辨率小于所述第一帧缓冲的分辨率且所述第二帧缓冲的颜色附件和深度附件的分辨率小于或等于所述第二帧缓冲的分辨率,和/或,所述第二帧缓冲中单个像素占用的存储空间大小小于所述第一帧缓冲中单个像素占用的存储空间大小;所述逻辑电路,还用于通过是输入/输出接口将第二渲染通道的设置信息和所述待渲染数据发送至图形处理器,其中,所述第二渲染通道为将绑定的帧缓冲替换为所述第二帧缓冲的所述第一渲染通道。18.根据权利要求17所述的芯片系统,其特征在于,所述第二帧缓冲的分辨率为1
×
1,所述第二帧缓冲的颜色附件的分辨率为1
×
1,所述第二帧缓冲的深度附件的分辨率为1
×
1。19.根据权利要求18或10所述的芯片系统,其特征在于,所述第二帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小小于所述第一帧缓冲的颜色附件中单个像素的颜色值占用的存储空间大小,和/或,所述第二帧缓冲的深度附件中单个像素的深度值占用的存储空间大小小于所述第一帧缓冲的深度附件中单个像素的深度值占用的存储空间大小。20.根据权利要求17至19中任一项所述的芯片系统,其特征在于,所述逻辑电路,具体用于确定所述第一渲染通道为渲染通道白名单包括的渲染通道中的一个。21.根据权利要求17至20中任一项所述的芯片系统,其特征在于,所述第一渲染通道的视口的分辨率不小于预设分辨率阈值;所述第一渲染通道的绑定的帧缓冲包括颜色附件;所述第一渲染通道中每个绘制调用使用的着色器程序均能够被优化,其中所述着色器程序对应于一个片段着色器和一个顶点着色器;所述第一渲染通道中的每个绘制调用中均对应预设指令。22.根据权利要求21所述的芯片系统,其特征在于,所述预设指令包括:点模式设置指令和顶点数据写回指令,所述点模式设置指令用于指示需要渲染图元类型为点,所述顶点数据写回指令用于获取并保存所述顶点着色器的输出数据。23.根据权利要求21或22所述的芯片系统,其特征在于,所述片段着色器有且仅有一个赋值操作为固定的颜色值或者是一个常量的输出变量;所述片段着色器没有输入变量;所述片段着色器没有使用条件语句;所述片段着色器没有统一变量和统一缓存对象ubo;所述片段着色器不使用二维采样器修饰的纹理和采样器。24.根据权利要求21至23中任一项所述的芯片系统,其特征在于,所述顶点着色器包括多个输入变量;所述顶点着色器还包括多个输出变量;所述顶点着色器还包括条件语句。

技术总结
本申请实施例提供一种渲染图像的方法和相关装置,该方法包括:根据图形应用程序接口指令,确定用于渲染待渲染数据的第一渲染通道是否满足预设条件;若满足该预设条件,那么可以对该第一渲染通道绑定的帧缓冲进行替换,并使用替换后的第一渲染通道对该待渲染数据进行渲染并获取该替换后的第一渲染通道中的顶点着色器的输出数据。替换后的分辨率小于替换前的分辨率,和/或,替换后的帧缓冲中单个像素占用的存储空间大小可以小于替换前的帧缓冲中单个像素占用的存储空间大小。该分辨率包括帧缓冲的分辨率、颜色附件的分辨率和深度附件的分辨率。上述技术方案可以在不影响渲染结果的情况下,减少GPU的硬件开销。减少GPU的硬件开销。减少GPU的硬件开销。


技术研发人员:尚钦 袁志伟 姜泽成
受保护的技术使用者:华为技术有限公司
技术研发日:2022.01.29
技术公布日:2023/8/8
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐