一种内存分配方法及装置与流程

文档序号:31795438发布日期:2022-10-14 17:16阅读:51来源:国知局
一种内存分配方法及装置与流程

1.本发明涉及渲染技术领域,尤其涉及一种内存分配方法及装置。


背景技术:

2.渲染是计算机图形学(cg,computer graphics)的最后一道工序,也是最终使图像符合三维(3d,3dimensions)场景的阶段,通过对图像进行纹理的渲染,可以使图像更清晰和逼真。
3.渲染系统普遍同时配置了中央处理器(central processing unit,cpu)和图形处理器(graphics processing unit,gpu)。在进行图像渲染时,cpu和gpu并行工作,cpu向命令缓冲区添加调用图形编程接口进行渲染的操作的渲染命令(draw call),gpu从命令缓冲区读取draw call并执行。在现有的渲染系统设计中,drawcall的输入可能不包括渲染纹理(rt,rendertexture),也可能包括一个或多个渲染纹理,drawcall的输出则必然为一个渲染纹理,因此每一个drawcall都至少包括一个渲染纹理。由于渲染一帧图像可能就需要执行非常多的drawcall,渲染系统需要为每一个drawcall的每一个渲染纹理分配内存,且仅一个rgba格式、分辨率为1280*720的渲染纹理的内存需求就达到3.5mb,因此渲染纹理对内存资源的消耗巨大。


技术实现要素:

4.有鉴于此,本发明提供了一种内存分配方法及装置,用于减少渲染纹理对内存资源的消耗。
5.为了实现上述目的,本发明实施例提供技术方案如下:
6.第一方面,本发明的实施例提供了一种内存分配方法,包括:
7.获取渲染纹理集合,所述渲染纹理集合包括用于对目标图像进行渲染的各个渲染命令的渲染纹理;
8.确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间;
9.根据所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组,属于同一渲染纹理组的渲染纹理两两之间均支持共用内存空间;
10.为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
11.作为本发明实施例一种可选的实施方式,所述确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,包括:
12.判断第一渲染纹理的属性与第二渲染纹理的属性是否相同;
13.若所述第一渲染纹理的属性与所述第二渲染纹理的属性不同,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
14.作为本发明实施例一种可选的实施方式,所述判断第一渲染纹理的属性与第二渲染纹理的属性是否相同,包括:
15.判断所述第一渲染纹理的格式和分辨率是否与所述第二渲染纹理的格式和分辨率相同;
16.若所述第一渲染纹理的格式与所述第二渲染纹理的格式不同,和/或所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率不同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性不同;
17.若所述第一渲染纹理的格式与所述第二渲染纹理的格式相同,且所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率相同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性相同。
18.作为本发明实施例一种可选的实施方式,所述确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,包括:
19.判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出;
20.若所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
21.作为本发明实施例一种可选的实施方式,所述确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,包括:
22.判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出;
23.若所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
24.作为本发明实施例一种可选的实施方式,所述确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,包括:
25.判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令;所述第一渲染命令包括以第一渲染纹理为输出的渲染命令,所述第二渲染命令包括以第二渲染纹理为输出的渲染命令,所述第三渲染命令包括以所述第一渲染纹理为输入的渲染命令;
26.若是,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
27.作为本发明实施例一种可选的实施方式,所述判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令,包括:
28.获取用于对所述目标图像进行渲染的各个渲染命令以及各个渲染命令的渲染纹理;
29.以渲染命令为节点、渲染纹理为路径生成有向无环图;
30.对所述有向无环图进行拓扑排序,生成所述有向无环图的拓扑序列;
31.根据所述拓扑序列判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令。
32.作为本发明实施例一种可选的实施方式,所述根据所述拓扑序列判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令,包括:
33.判断所述拓扑序列中是否包括位于所述第二渲染命令之后的所述第三渲染命令;
34.若所述渲染命令序列中包括位于所述第二渲染命令之后的所述第三渲染命令,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持复用内存空间。
35.作为本发明实施例一种可选的实施方式,所述根据所述渲染纹理集合中的渲染纹
理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组,包括:
36.判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间;
37.若是,则将所述渲染纹理集合中的全部渲染纹理作为一个渲染纹理组;
38.若所述渲染纹理集合中包括两个不支持共用内存空间的渲染纹理,则将所述两个不支持共用内存空间的渲染纹理中的一个从所述渲染纹理集合中删除,并返回执行所述判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤;
39.将从所述渲染纹理集合中删除的渲染纹理组成的集合作为所述渲染纹理集合,并返回执行所述判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤。
40.作为本发明实施例一种可选的实施方式,所述为属于同一个渲染纹理组的渲染纹理分配同一个内存空间,包括:
41.从内存资源池中为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
42.作为本发明实施例一种可选的实施方式,所述方法还包括:
43.在完成所述目标图像的渲染之后,将分配给各个渲染纹理的内存空间的状态由占用状态切换为空闲状态。
44.第二方面,本发明实施例提供一种内存分配装置,包括:
45.获取单元,用于获取渲染纹理集合,所述渲染纹理集合包括用于对目标图像进行渲染的各个渲染命令的渲染纹理;
46.处理单元,用于确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间;
47.分组单元,用于根据所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组,属于同一渲染纹理组的渲染纹理两两之间均支持共用内存空间;
48.分配单元,用于为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
49.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于判断第一渲染纹理的属性与第二渲染纹理的属性是否相同;若所述第一渲染纹理的属性与所述第二渲染纹理的属性不同,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
50.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于判断所述第一渲染纹理的格式和分辨率是否与所述第二渲染纹理的格式和分辨率相同;若所述第一渲染纹理的格式与所述第二渲染纹理的格式不同,和/或所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率不同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性不同;若所述第一渲染纹理的格式与所述第二渲染纹理的格式相同,且所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率相同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性相同。
51.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出;若所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
52.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出;若所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
53.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令;若是,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间;
54.其中,所述第一渲染命令包括以第一渲染纹理为输出的渲染命令,所述第二渲染命令包括以第二渲染纹理为输出的渲染命令,所述第三渲染命令包括以所述第一渲染纹理为输入的渲染命令。
55.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于获取用于对所述目标图像进行渲染的各个渲染命令以及各个渲染命令的渲染纹理;以渲染命令为节点、渲染纹理为路径生成有向无环图;对所述有向无环图进行拓扑排序,生成所述有向无环图的拓扑序列;根据所述拓扑序列判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令。
56.作为本发明实施例一种可选的实施方式,所述处理单元,具体用于判断所述拓扑序列中是否包括位于所述第二渲染命令之后的所述第三渲染命令;若所述渲染命令序列中包括位于所述第二渲染命令之后的所述第三渲染命令,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持复用内存空间。
57.作为本发明实施例一种可选的实施方式,所述分组单元,具体用于判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间;若是,则将所述渲染纹理集合中的全部渲染纹理作为一个渲染纹理组;若所述渲染纹理集合中包括两个不支持共用内存空间的渲染纹理,则将所述两个不支持共用内存空间的渲染纹理中的一个从所述渲染纹理集合中删除,并返回执行所述判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤;将从所述渲染纹理集合中删除的渲染纹理组成的集合作为所述渲染纹理集合,并返回执行所述判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤。
58.作为本发明实施例一种可选的实施方式,所述分配单元,具体用于从内存资源池中为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
59.作为本发明实施例一种可选的实施方式,所述分配单元,还用于在完成所述目标图像的渲染之后,将分配给各个渲染纹理的内存空间的状态由占用状态切换为空闲状态。
60.第三方面,本发明实施例提供一种电子设备,包括:存储器和处理器,存储器用于存储计算机程序;处理器用于在调用计算机程序时执行第一方面或第一方面任一种可选的实施方式所述的内存分配方法。
61.第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现第一方面或第一方面任一种可选的实施方式所述的内存分配方法。
62.第五方面,本发明实施例提供一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现第一方面或第一方面任一种可选的实施方式所述的内存分配方法。
63.本发明实施例提供的内存分配方法首先获取用于对目标图像进行渲染的各个渲染命令的渲染纹理组成的渲染纹理集合,然后确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,再根据所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组,然后为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。由于本发明实施例可以根据渲染纹理之间是否支持共用内存空间,将支持共用内存空间的渲染纹理分配到同一渲染纹理组中,并且为属于同一个渲染纹理组的渲染纹理分配一个内存空间,因此相比于现有技术中为每一个渲染纹理都分配内存,本发明实施例可以减少渲染纹理对内存资源的消耗。
附图说明
64.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
65.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
66.图1为本发明实施例提供的内存分配方法的流程图之一;
67.图2为本发明实施例提供的有向无环图;
68.图3为本发明实施例提供的拓扑序列的示意图之一;
69.图4为本发明实施例提供的拓扑序列的示意图之二;
70.图5为本发明实施例提供的内存分配方法的流程图之二;
71.图6为本发明实施例提供的内存分配装置的示意图;
72.图7为本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
73.为了能够更清楚地理解本发明的上述目的、特征和优点,下面将对本发明的方案进行进一步描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
74.在下面的描述中阐述了很多具体细节以便于充分理解本发明,但本发明还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本发明的一部分实施例,而不是全部的实施例。
75.在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。此外,在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
76.本发明实施例提供了一种内存分配方法,参照图1所示,本发明实施例提供的内存分配方法包括如下步骤:
77.s101、获取渲染纹理集合。
78.其中,所述渲染纹理集合包括用于对目标图像进行渲染的各个渲染命令的渲染纹
理。
79.具体的,可以在开始对目标图像对应的图像帧进行渲染时,获取每一个渲染命令(drawcall)以及每一个渲染命令的输入渲染纹理和输出渲染纹理,并将全部渲染命令的输入渲染纹理和输出渲染纹理组成所述渲染纹理集合。
80.示例性的,用于对目标图像进行渲染的渲染命令包括:渲染命令a、渲染命令b、渲染命令c、渲染命令d、渲染命令e、渲染命令f、渲染命令g,且渲染命令a的渲染纹理包括:输出渲染纹理0,渲染命令b的渲染纹理包括:输入渲染纹理0和输出渲染纹理1,渲染命令c的渲染纹理包括:输入渲染纹理1和输出渲染纹理2,渲染命令d的渲染纹理包括:输入渲染纹理3和输出渲染纹理4,渲染命令e的渲染纹理包括:输入渲染纹理1、输入渲染纹理2、输入渲染纹理4以及输出渲染纹理5,渲染命令f的渲染纹理包括:输入渲染纹理5和输出渲染纹理6,渲染命令g的渲染纹理包括:输出渲染纹理3,因此获取的渲染纹理集合为:{渲染纹理0,渲染纹理1,渲染纹理2,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6}。
81.s102、确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间。
82.即,确定所述渲染纹理集合中任意两个渲染纹理之间是否支持共用内存空间。
83.本发明实施例中,两两之间支持共用内存空间可以指:其中的一个渲染纹理可以在将另一个渲染纹理从共用的内存空间删除后,存储在共用的内存空间,且不会影响各个渲染命令的执行,即不会影响目标图像的正常渲染。
84.承上示例所述,渲染纹理集合为:{渲染纹理0,渲染纹理1,渲染纹理2,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6},则需要确定个渲染纹理对之间是否支持共用内存空间,该21个渲染纹理对分别为:[渲染纹理0和渲染纹理1]、[渲染纹理0和渲染纹理2]、[渲染纹理0和渲染纹理3]、[渲染纹理0和渲染纹理4]、[渲染纹理0和渲染纹理5]、[渲染纹理0和渲染纹理6]、[渲染纹理1和渲染纹理2]、[渲染纹理1和渲染纹理3]、[渲染纹理1和渲染纹理4]、[渲染纹理1和渲染纹理5]、[渲染纹理1和渲染纹理6]、[渲染纹理2和渲染纹理3]、[渲染纹理2和渲染纹理4]、[渲染纹理2和渲染纹理5]、[渲染纹理2和渲染纹理6]、[渲染纹理3和渲染纹理4]、[渲染纹理3和渲染纹理5]、[渲染纹理3和渲染纹理6]、[渲染纹理4和渲染纹理5]、[渲染纹理4和渲染纹理6]、[渲染纹理5和渲染纹理6]。
[0085]
s103、根据所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组。
[0086]
其中,属于同一渲染纹理组的渲染纹理两两之间均支持共用内存空间。
[0087]
示例性的,若渲染纹理0和渲染纹理1之间支持共用内存空间、渲染纹理0和渲染纹理2之间支持共用内存空间、渲染纹理1和渲染纹理2之间支持共用内存空间,则可以将渲染纹理0、渲染纹理1以及渲染纹理3分为一个渲染纹理组。
[0088]
s104、为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
[0089]
承上示例所述,若将渲染纹理集合{渲染纹理0,渲染纹理1,渲染纹理2,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6},分为[渲染纹理0、渲染纹理2、渲染纹理6]、[渲染纹理1]、[渲染纹理3、渲染纹理5]、[渲染纹理4]4个渲染纹理组,则需要分配4个内存空间。相比于现有技术中为每一个渲染纹理都分配一个内存空间,如上7个渲染纹理在现有技术中需要7个内存空间,本发明实施例提供的内存分配方法仅需要4个内存空间,因此可以减少渲染纹理对内存资源的消耗。
[0090]
本发明实施例提供的内存分配方法首先获取用于对目标图像进行渲染的各个渲染命令的渲染纹理组成的渲染纹理集合,然后确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,再根据所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组,然后为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。由于本发明实施例可以根据渲染纹理之间是否支持共用内存空间,将支持共用内存空间的渲染纹理分配到同一渲染纹理组中,并且为属于同一个渲染纹理组的渲染纹理分配一个内存空间,因此相比于现有技术中为每一个渲染纹理都分配内存,本发明实施例可以减少渲染纹理对内存资源的消耗。
[0091]
作为本发明实施例一种可选的实施例方式,上述步骤s102(确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间),包括:
[0092]
判断第一渲染纹理的属性与第二渲染纹理的属性是否相同;
[0093]
若所述第一渲染纹理的属性与所述第二渲染纹理的属性不同,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
[0094]
进一步可选的,所渲染纹理的属性包括渲染纹理的格式和渲染纹理的分辨率。
[0095]
即,判断第一渲染纹理的属性与第二渲染纹理的属性是否相同,包括:判断所述第一渲染纹理的格式和分辨率是否与所述第二渲染纹理的格式和分辨率相同;
[0096]
判断所述第一渲染纹理的格式和分辨率是否与所述第二渲染纹理的格式和分辨率相同;
[0097]
若所述第一渲染纹理的格式与所述第二渲染纹理的格式不同,和/或所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率不同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性不同;
[0098]
若所述第一渲染纹理的格式与所述第二渲染纹理的格式相同,且所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率相同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性相同。
[0099]
示例性的,判断所述第一渲染纹理的格式和分辨率是否与所述第二渲染纹理的格式和分辨率相同的一种可能的实现方式为:
[0100]
判断所述第一渲染纹理的格式是否与所述第二渲染纹理的格式相同;
[0101]
若所述第一渲染纹理的格式与所述第二渲染纹理的格式不相同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性不同;
[0102]
若所述第一渲染纹理的格式与所述第二渲染纹理的格式相同,则判断所述第一渲染纹理的分辨率是否与所述第二渲染纹理的分辨率相同;
[0103]
若所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率不同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性不同;
[0104]
若所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率相同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性相同。
[0105]
需要说明的是,上述实施例中以先判断渲染纹理的格式是否相同,再判断渲染纹理的分辨率是否相同为例进行说明,但本发明实施例中不限定判断渲染纹理的格式是否相同和判断渲染纹理的分辨率是否相同的先后顺序,可以先判断渲染纹理的格式是否相同,再判断渲染纹理的分辨率是否相同,也可以先判断渲染纹理的分辨率是否相同,再判断渲
graph,dag)
[0119]
示例性的,用于对目标图像进行渲染的渲染命令包括:渲染命令a、渲染命令b、渲染命令c、渲染命令d、渲染命令e、渲染命令f、渲染命令g,且渲染命令a的渲染纹理包括:渲染纹理0,渲染命令b的渲染纹理包括:渲染纹理0和渲染纹理1,渲染命令c的渲染纹理包括:渲染纹理1和渲染纹理2,渲染命令d的渲染纹理包括:渲染纹理3和渲染纹理4,渲染命令e的渲染纹理包括:渲染纹理1、渲染纹理2以及渲染纹理4,渲染命令f的渲染纹理包括:渲染纹理6,渲染命令g的渲染纹理包括:渲染纹理3,则参照图2所示,生成的有向无环图中包括以渲染命令为节点的7个节点和以渲染纹理为路径的9条路径,该7个节点分别为:渲染命令a、渲染命令b、渲染命令c、渲染命令d、渲染命令e、渲染命令f、渲染命令g,该9条路径分别为:渲染命令a至渲染命令b的路径(渲染纹理0)、渲染命令b至渲染命令c的路径(渲染纹理1)、渲染命令b至渲染命令d的路径(渲染纹理1)、渲染命令b至渲染命令e的路径(渲染纹理1)、渲染命令c至渲染命令e的路径(渲染纹理2)、渲染命令g至渲染命令d的路径(渲染纹理3)、渲染命令d至渲染命令e的路径(渲染纹理4)、渲染命令e至渲染命令f的路径(渲染纹理5)以及渲染命令f的输出路径(渲染纹理6)。
[0120]
步骤c、对所述有向无环图进行拓扑排序,生成所述有向无环图的拓扑序列。
[0121]
具体的,本发明实施例中的对所述有向无环图进行拓扑排序可以指:将有向无环图中所有节点排成一个线性序列,使得图中任意一对节点u和节点v,若存在节点u至节点v的路径,则节点u在线性序列中位于在节点v之前。
[0122]
承上示例所述,对图2所示有向无环图进行拓扑排序得到的拓扑序列可以如图3所示,各渲染命令的顺序依次为:渲染命令a、渲染命令b、渲染命令c、渲染命令g、渲染命令d、渲染命令e、渲染命令f。
[0123]
此外,承上示例所述,对图2所示有向无环图进行拓扑排序得到的拓扑序列还可以如图4所示,各渲染命令的顺序依次为:渲染命令a、渲染命令g、渲染命令b、渲染命令c、渲染命令d、渲染命令e、渲染命令f。
[0124]
需要说明的是,对所述有向无环图进行拓扑排序,生成所述有向无环图的拓扑序列可能有很多种,本发明实施例中可随机生成其中的任意一种。
[0125]
步骤d、根据所述拓扑序列判断在执行以所述第一渲染纹理为输出的渲染命令之后是否还需要执行以所述第二渲染纹理为输入的渲染命令。
[0126]
可选的,上步骤d(根据所述拓扑序列判断在执行以所述第一渲染纹理为输出的渲染命令之后是否还需要执行以所述第二渲染纹理为输入的渲染命令)包括:
[0127]
判断所述拓扑序列中是否包括位于所述第一渲染命令之后的所述第二渲染命令;
[0128]
若所述渲染命令序列中包括位于所述第一渲染命令之后的所述第二渲染命令,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持复用内存空间。
[0129]
例如:在图3所示的拓扑序列中,判断渲染纹理1和渲染纹理4之间是否支持共用内存空间时,首先确定以渲染纹理4为输出渲染纹理的渲染命令d,拓扑序列中包括在渲染命令d之后且以渲染纹理1为输入的渲染命令e,因此确定第一渲染纹理与所述第二渲染纹理之间不支持复用内存空间。
[0130]
作为本发明实施例提供的内存分配方法的一种具体实现,参照图5所示,本发明实施例提供的内存分配方案具体可以包括如下步骤:
[0131]
s501、获取渲染纹理集合。
[0132]
其中,所述渲染纹理集合包括用于对目标图像进行渲染的各个渲染命令的渲染纹理。
[0133]
仍以上述示例为例进行描述,以下将以渲染纹理集合为:{渲染纹理0,渲染纹理1,渲染纹理2,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6}为例进行说明。
[0134]
s502、判断第一渲染纹理的属性与第二渲染纹理的属性是否相同。
[0135]
s503、判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出。
[0136]
s504、判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令。
[0137]
其中,所述第一渲染命令包括以第一渲染纹理为输出的渲染命令,所述第二渲染命令包括以第二渲染纹理为输出的渲染命令,所述第三渲染命令包括以所述第一渲染纹理为输入的渲染命令。
[0138]
还需要说明的是,本发明实施例中可不限定执行上述步骤s502、s503以及s504的先后顺序,可以以任意顺序执行上述步骤s502、s503以及s504。例如:先执行步骤s502,再执行步骤s503,最后执行步骤s504。再例如:同时执行步骤s502、s503和s504。
[0139]
在上述步骤s502、s503、s504,若所述第一渲染纹理的属性与所述第二渲染纹理的属性不同,或所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,或在依次执行第一渲染命令和第二渲染命令之后还需要执行第三渲染命令,则执行如下步骤s505。若所述第一渲染纹理的属性与所述第二渲染纹理的属性相同、所述第一渲染纹理与所述第二渲染纹理不为同一渲染命令的输入和输出,且在依次执行第一渲染命令和第二渲染命令之后不需要执行第三渲染命令,则执行如下步骤s506。
[0140]
s505、确定第一渲染纹理和第二渲染纹理之间不支持共用内存空间。
[0141]
s506、确定第一渲染纹理和第二渲染纹理之间支持共用内存空间。
[0142]
需要说明的,当渲染纹理集合为:{渲染纹理0,渲染纹理1,渲染纹理2,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6}时,需要对渲染纹理对[渲染纹理0和渲染纹理1]、[渲染纹理0和渲染纹理2]、[渲染纹理0和渲染纹理3]、[渲染纹理0和渲染纹理4]、[渲染纹理0和渲染纹理5]、[渲染纹理0和渲染纹理6]、[渲染纹理1和渲染纹理2]、[渲染纹理1和渲染纹理3]、[渲染纹理1和渲染纹理4]、[渲染纹理1和渲染纹理5]、[渲染纹理1和渲染纹理6]、[渲染纹理2和渲染纹理3]、[渲染纹理2和渲染纹理4]、[渲染纹理2和渲染纹理5]、[渲染纹理2和渲染纹理6]、[渲染纹理3和渲染纹理4]、[渲染纹理3和渲染纹理5]、[渲染纹理3和渲染纹理6]、[渲染纹理4和渲染纹理5]、[渲染纹理4和渲染纹理6]、[渲染纹理5和渲染纹理6]中的渲染纹理分别作为第一渲染纹理和第二渲染纹理执行一次上述步骤s502至s506。
[0143]
例如:对渲染纹理0和渲染纹理1,由于渲染纹理0为渲染命令b的输入,而渲染纹理1为渲染命令b的输出,分别为同一渲染命令的输入和输出,因此渲染纹理0和渲染纹理1不支持共用内存空间。
[0144]
再例如:对于渲染纹理2和渲染纹理3,由于在依次执行以渲染纹理2为输出的渲染命令c和以渲染纹理3为输出的渲染命令g之后,还需要执行以渲染纹理2为输入的渲染命令e,因此渲染纹理2和渲染纹理3不支持共用内存空间。
[0145]
在以各个渲染命令以及各个渲染命令的渲染纹理生成的有向无环图的拓扑序列如图3所示、且各个渲染纹理的属性均相同的情况下时,各个渲染纹理两两之间是否支持共用内存空间的判断结果可以如下表1所示:
[0146]
表1
[0147][0148]
其中,“是”表示对应的两个渲染纹理支持共用内存空间,“否”表示对应的两个渲染纹理不支持共用内存空间。
[0149]
s507、判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间。
[0150]
具体的,可以根据渲染纹理集合中的各渲染纹理两两之间是否支持共用内存空间来判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间,若渲染纹理集合中的任意两个渲染纹理均支持共用内存空间,则确定所述渲染纹理集合中的渲染纹理支持共用同一内存空间,若渲染纹理集合中的一对或多对渲染纹理之间不支持共用内存空间,则确定所述渲染纹理集合中的渲染纹理不支持共用同一内存空间。
[0151]
在上述步骤s507中,若所述渲染纹理集合中的渲染纹理支持共用同一内存空间,则执行如下步骤s508。
[0152]
s508、将所述渲染纹理集合中的全部渲染纹理作为一个渲染纹理组。
[0153]
在上述步骤s507中,若所述渲染纹理集合中包括两个不支持共用内存空间的渲染纹理,则执行步骤s509。
[0154]
s509、将所述两个不支持共用内存空间的渲染纹理中的一个从所述渲染纹理集合中删除,并返回执行上述步骤s507(判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的)。
[0155]
上述步骤s507至s509形成一个循环过程,该循环过程的结束条件为s507的判断结果为所述渲染纹理集合中的渲染纹理支持共用同一内存空间,且执行了上述步骤s508(将所述渲染纹理集合中的全部渲染纹理作为一个渲染纹理组)。
[0156]
需要说明的是,本发明实施例中所述渲染纹理集合中的渲染纹理支持共用同一内
存空间包括两种情况,其一为:渲染纹理集合中包括多个渲染纹理,且任意两个渲染纹理之间均支持共用内存空间,其二为:渲染纹理集合中仅包括一个渲染纹理。
[0157]
承上表1所示的示例:
[0158]
第1次循环:由于渲染纹理0与渲染纹理1之间不支持复用内存空间,因此将渲染纹理1从渲染纹理集合中删除,渲染纹理集合中剩余的渲染纹理包括:{渲染纹理0,渲染纹理2,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6}。此时,删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1}。
[0159]
第2次循环:由于渲染纹理2与渲染纹理3之间不支持复用内存空间,因此将渲染纹理2从渲染纹理集合中删除,渲染纹理集合中剩余的渲染纹理包括:{渲染纹理0,渲染纹理3,渲染纹理4,渲染纹理5,渲染纹理6}。此时,删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1,渲染纹理2}。
[0160]
第3次循环:由于渲染纹理3与渲染纹理4之间不支持复用内存空间,因此将渲染纹理4从渲染纹理集合中删除,渲染纹理集合中剩余的渲染纹理包括:{渲染纹理0,渲染纹理3,渲染纹理5,渲染纹理6}。此时,删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1,渲染纹理2,渲染纹理4}。
[0161]
第4次循环:由于渲染纹理5与渲染纹理6之间不支持复用内存空间,因此将渲染纹理5从渲染纹理集合中删除,渲染纹理集合中剩余的渲染纹理包括:{渲染纹理0,渲染纹理3,渲染纹理5},且渲染纹理0、渲染纹理3以及渲染纹理5均支持共用内存空间,至此循环结束,得到了第一个渲染纹理组{渲染纹理0,渲染纹理3,渲染纹理5}。删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1,渲染纹理2,渲染纹理4,渲染纹理6}。
[0162]
在上述由s507至s509形成的循环过程结束时,执行如下步骤s510。
[0163]
s510、将从所述渲染纹理集合中删除的渲染纹理组成的集合作为所述渲染纹理集合,并返回执行上述步骤s507(判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤)。
[0164]
上述步骤s507至s510形成了另一个循环过程,该循环过程的结束条件仍为s507的判断结果为所述渲染纹理集合中的渲染纹理支持共用同一内存空间,执行了上述步骤s508(将所述渲染纹理集合中的全部渲染纹理作为一个渲染纹理组)。此时,从所述渲染纹理集合中删除的渲染纹理组成的集合为空集,循环结束。
[0165]
承上示例所述:
[0166]
第一次循环:从渲染纹理集合中删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1,渲染纹理2,渲染纹理4,渲染纹理6}。由于渲染纹理1与渲染纹理2之间不支持复用内存空间,因此将渲染纹理1从渲染纹理集合中删除,渲染纹理集合中剩余的渲染纹理包括:{渲染纹理2,渲染纹理4,渲染纹理6};又由于渲染纹理2与渲染纹理4之间不支持复用内存空间,因此将渲染纹理4从渲染纹理集合中删除,渲染纹理集合中剩余的渲染纹理包括:{渲染纹理2,渲染纹理6},且渲染纹理2和渲染纹理6之间支持共用内存空间;至此得到了第二个渲染纹理组{渲染纹理2,渲染纹理6}。再次从渲染纹理集合中删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1,渲染纹理4}。
[0167]
第二次循环:从渲染纹理集合中删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1,渲染纹理4},由于渲染纹理1与渲染纹理4之间不支持复用内存空间,因此将渲染纹理1
从渲染文理集合中删除,并将渲染纹理4作为一个渲染纹理组。再次从渲染纹理集合中删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1}。
[0168]
第三次循环:从渲染纹理集合中删除的渲染纹理组成的渲染纹理集合为:{渲染纹理1},无需从渲染纹理集合中删除渲染纹理组,将渲染纹理1作为一个渲染纹理组,循环结束。
[0169]
最终,上述表1所示的判断结果可以得到4个渲染纹理组,4个渲染纹理组分别为:
[0170]
{渲染纹理0,渲染纹理3,渲染纹理5};
[0171]
{渲染纹理2,渲染纹理6};
[0172]
{渲染纹理4};
[0173]
{渲染纹理1}。
[0174]
s511、为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
[0175]
即,分别为渲染纹理0、渲染纹理3、渲染纹理5分配同一个内存空间,为渲染纹理2、渲染纹理6分配同一个内存空间,为渲染纹理1分配一个内存空间,为渲染纹理4分配一个内存空间。
[0176]
作为本发明实施例一种可选的实施方式,上述步骤s104(为属于同一个渲染纹理组的渲染纹理分配同一个内存空间)包括:
[0177]
从内存资源池中为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
[0178]
即,使用资源池的方式来为属于同一个渲染纹理组的渲染纹理分配内存可以避免gpu在每一次需要分配内存时,需要先申请内存然后再分配,从而提升内存的分配效率。
[0179]
进一步的,本发明实施例提供的方法还包括:在完成所述目标图像的渲染之后,将分配给各个渲染纹理的内存空间的状态由占用状态切换为空闲状态。
[0180]
内存在使用完之后将内存及时归还内存资源池,可以提升内存的使用率。
[0181]
基于同一发明构思,作为对上述方法的实现,本发明实施例还提供了一种内存分配装置,该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的内存分配装置能够对应实现前述方法实施例中的全部内容。
[0182]
图6为本发明实施例提供的内存分配装置的结构示意图,如图6所示,本实施例提供的内存分配装置600包括:
[0183]
获取单元61,用于获取渲染纹理集合,所述渲染纹理集合包括用于对目标图像进行渲染的各个渲染命令的渲染纹理;
[0184]
处理单元62,用于确定所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间;
[0185]
分组单元63,用于根据所述渲染纹理集合中的渲染纹理两两之间是否支持共用内存空间,将所述渲染纹理集合中的渲染纹理分为至少一个渲染纹理组,属于同一渲染纹理组的渲染纹理两两之间均支持共用内存空间;
[0186]
分配单元64,用于为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
[0187]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于判断第一渲染纹理的属性与第二渲染纹理的属性是否相同;若所述第一渲染纹理的属性与所述第二渲染纹理的属性不同,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空
间。
[0188]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于判断所述第一渲染纹理的格式和分辨率是否与所述第二渲染纹理的格式和分辨率相同;若所述第一渲染纹理的格式与所述第二渲染纹理的格式不同,和/或所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率不同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性不同;若所述第一渲染纹理的格式与所述第二渲染纹理的格式相同,且所述第一渲染纹理的分辨率与所述第二渲染纹理的分辨率相同,则确定所述第一渲染纹理的属性与所述第二渲染纹理的属性相同。
[0189]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出;若所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
[0190]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于判断第一渲染纹理与第二渲染纹理是否分别为同一渲染命令的输入和输出;若所述第一渲染纹理与所述第二渲染纹理分别为同一渲染命令的输入和输出,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间。
[0191]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令;若是,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持共用内存空间;
[0192]
其中,所述第一渲染命令包括以第一渲染纹理为输出的渲染命令,所述第二渲染命令包括以第二渲染纹理为输出的渲染命令,所述第三渲染命令包括以所述第一渲染纹理为输入的渲染命令。
[0193]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于获取用于对所述目标图像进行渲染的各个渲染命令以及各个渲染命令的渲染纹理;以渲染命令为节点、渲染纹理为路径生成有向无环图;对所述有向无环图进行拓扑排序,生成所述有向无环图的拓扑序列;根据所述拓扑序列判断在依次执行第一渲染命令和第二渲染命令之后是否还需要执行第三渲染命令。
[0194]
作为本发明实施例一种可选的实施方式,所述处理单元62,具体用于判断所述拓扑序列中是否包括位于所述第二渲染命令之后的所述第三渲染命令;若所述渲染命令序列中包括位于所述第二渲染命令之后的所述第三渲染命令,则确定所述第一渲染纹理与所述第二渲染纹理之间不支持复用内存空间。
[0195]
作为本发明实施例一种可选的实施方式,所述分组单元63,具体用于判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间;若是,则将所述渲染纹理集合中的全部渲染纹理作为一个渲染纹理组;若所述渲染纹理集合中包括两个不支持共用内存空间的渲染纹理,则将所述两个不支持共用内存空间的渲染纹理中的一个从所述渲染纹理集合中删除,并返回执行所述判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤;将从所述渲染纹理集合中删除的渲染纹理组成的集合作为所述渲染纹理集合,并返回执行所述判断所述渲染纹理集合中的渲染纹理是否支持共用同一内存空间的步骤。
[0196]
作为本发明实施例一种可选的实施方式,所述分配单元64,具体用于从内存资源
池中为属于同一个渲染纹理组的渲染纹理分配同一个内存空间。
[0197]
作为本发明实施例一种可选的实施方式,所述分配单元64,还用于在完成所述目标图像的渲染之后,将分配给各个渲染纹理的内存空间的状态由占用状态切换为空闲状态。
[0198]
基于同一发明构思,本发明实施例还提供了一种电子设备。图7为本发明实施例提供的电子设备的结构示意图,如图7所示,本实施例提供的电子设备包括:存储器71和处理器72,存储器71用于存储计算机程序;处理器72用于在调用计算机程序时执行上述实施例提供的内存分配方法的步骤。
[0199]
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述实施例提供的内存分配方法的步骤。
[0200]
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述实施例提供的内存分配方法的步骤。
[0201]
本领域技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
[0202]
处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0203]
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。
[0204]
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储,信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。根据本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
[0205]
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1