一种基于异构指令穿透的压缩纹理解码优化方法技术

技术编号:38508328 阅读:8 留言:0更新日期:2023-08-19 16:54
本发明专利技术公开了一种基于异构指令穿透的压缩纹理解码优化方法,对于支持处理压缩纹理的GPU平台,依据记录的安卓应用首次运行时压缩纹理的解码情况创建安卓端与Host端之间的共享内存,以减少传输压缩纹理所产生的开销;对于不支持处理压缩纹理的GPU平台,则不采用ARM版的纹理解码函数而是将纹理解码函数的参数传递至Host端x86版的解码函数由Host端完成压缩纹理的解码操作,由此节省了ARM转换至x86指令所消耗的时间。令所消耗的时间。

【技术实现步骤摘要】
一种基于异构指令穿透的压缩纹理解码优化方法


[0001]本专利技术属于跨平台应用开发
,具体涉及一种基于异构指令穿透的压缩纹理解码优化方法。

技术介绍

[0002]在移动操作系统中为了降低移动应用所占显存空间,往往采用纹理压缩格式保存纹理。实际使用的纹理压缩算法必须符合以下条件:一是具备高速、实时解码能力,二是支持纹理的部分解码。采用符合上述条件的纹理压缩算法即可实现高速地纹理贴图,同时在纹理贴图的过程中能够使用较少的高速CACHE随时缓冲当前使用的部分纹理数据。
[0003]目前安卓系统采用的压缩纹理格式一般为ETC2或ASTC格式,目前使用最多的主流格式为ASTC。在安卓兼容环境或安卓模拟器中,一般采用以下两种模式实现压缩纹理的解码:一是若GPU支持当前压缩纹理格式的处理,则将压缩纹理传递给Host端,由Host端的GPU驱动完成解码;二是若GPU不支持当前压缩纹理格式的处理,则只能使用CPU进行解码。
[0004]然而安卓兼容环境或安卓模拟器的上述两种方式均存在问题:对于需要在安卓端与Host端传递压缩纹理的方式来说主要问题在于传输纹理的过程会增加系统开销,而对于使用CPU进行解码的方式来说主要问题在于由CPU解码安卓应用纹理所需的指令转换所导致的耗时长、处理效率低的问题,例如,大小为1MB的压缩纹理可能需要500毫米甚至更长时间才能完成解码。

技术实现思路

[0005]有鉴于此,本专利技术提供了一种基于异构指令穿透的压缩纹理解码优化方法,实现了对应用透明的支持异构指令的压缩纹理解码优化。
[0006]本专利技术提供的一种基于异构指令穿透的压缩纹理解码优化方法,包括以下步骤:步骤1、启动安卓端时获取Host端GPU所支持的压缩纹理格式,作为第一压缩纹理格式;步骤2、当安卓端中的安卓应用启动压缩纹理的渲染流程时,获取安卓应用ID、压缩纹理ID、压缩纹理大小、待解码压缩纹理块偏移量及待解码压缩纹理块大小,若安卓应用ID存在于压缩纹理解压历史信息中则读取该安卓应用的压缩纹理解压历史信息后执行步骤3,否则执行步骤4;所述压缩纹理解压历史信息中保存安卓应用ID、第二压缩纹理格式、压缩纹理ID、压缩纹理大小、已解码压缩纹理块偏移量及已解码压缩纹理块大小;所述第二压缩纹理格式为压缩纹理的压缩纹理格式;步骤3、若压缩纹理解压历史信息中记录的第二压缩纹理格式存在于第一压缩纹理格式中则执行步骤4,否则执行步骤9;步骤4、安卓端根据压缩纹理ID在压缩纹理解压历史信息中查找是否存在相关信息,若存在则执行步骤5;否则执行步骤6;步骤5、按照压缩纹理解压历史信息中记录的压缩纹理大小分配共享内存,记录共
享内存指针,将待解码压缩纹理块写入共享内存;将压缩纹理解压历史信息中记录的待解码压缩纹理块对应的已解码压缩纹理块偏移量作为其在共享内存中的纹理块偏移量;将共享内存指针及纹理块偏移量发送至Host端,执行步骤7;步骤6、将压缩纹理ID、压缩纹理大小、待解码压缩纹理块偏移量及待解码压缩纹理块大小添加到压缩纹理解压历史信息中,再根据压缩纹理块大小分配共享内存记录共享内存指针,将待解码压缩纹理块写入共享内存中,并以待解码压缩纹理块偏移量作为其在共享内存中的纹理块偏移量;将共享内存指针及纹理块偏移量发送至Host端,执行步骤7;步骤7、Host端通知GPU根据接收到的共享内存指针及纹理块偏移量从共享内存中读取纹理块执行解码操作,待完成解码后向安卓端发送解码完成消息,再执行纹理块的渲染操作;步骤8、安卓端接收到解码完成消息后,旁路安卓端的解码及渲染操作后,执行安卓应用的后续操作;步骤9、安卓端启动对ARM库加载过程的监测,若ARM库加载过程中出现压缩纹理解码操作,则获取压缩纹理解码操作的纹理参数,并采用Host端基于CPU实现的压缩纹理解码操作以纹理参数为输入完成压缩纹理的解码过程。
[0007]进一步地,所述步骤2中所述安卓应用ID为安卓应用的路径。
[0008]进一步地,所述压缩纹理ID为压缩纹理所使用图像的路径。
[0009]进一步地,所述步骤5中还包括:获取压缩纹理解压历史信息中记录的所有已解码压缩纹理块大小,将所有已解码压缩纹理块大小求和得到分配空间大小,再按照分配空间大小分配共享内存。
[0010]进一步地,所述步骤6中根据所述步骤2得到的压缩纹理块大小分配共享内存。
有益效果
[0011]本专利技术对于支持处理压缩纹理的GPU平台,依据记录的安卓应用首次运行时压缩纹理的解码情况创建安卓端与Host端之间的共享内存,以减少传输压缩纹理所产生的开销;对于不支持处理压缩纹理的GPU平台,则不采用ARM版的纹理解码函数而是将纹理解码函数的参数传递至Host端x86版的解码函数由Host端完成压缩纹理的解码操作,由此节省了ARM转换至x86指令所消耗的时间。
具体实施方式
[0012]下面列举实施例,对本专利技术进行详细描述。
[0013]本专利技术提供了一种基于异构指令穿透的压缩纹理解码优化方法,其核心思想是:根据GPU平台对压缩纹理的支持情况确定优化方案,其中,对于支持处理压缩纹理的GPU平台,依据记录的安卓应用首次运行时压缩纹理的解码情况创建安卓端与Host端之间的共享内存,以减少传输压缩纹理所产生的开销;对于不支持处理压缩纹理的GPU平台,则不采用ARM版的纹理解码函数而是将纹理解码函数的参数传递至Host端x86版的解码函数由Host端完成压缩纹理的解码操作,由此节省了ARM转换至x86指令所消耗的时间。
[0014]本专利技术提供的一种基于异构指令穿透的压缩纹理解码优化方法,具体包括以下步骤:
步骤1、启动安卓端时获取Host端当前所使用的GPU所支持的压缩纹理格式,作为第一压缩纹理格式。
[0015]步骤2、当安卓端中的安卓应用启动对压缩纹理的渲染流程时,获取安卓应用ID、压缩纹理ID、压缩纹理大小、待解码压缩纹理块偏移量及待解码压缩纹理块大小,根据安卓应用ID判断压缩纹理解压历史信息中是否存在该安卓应用的相关信息,若存在则读取该安卓应用的压缩纹理解压历史信息后执行步骤3,否则执行步骤4。
[0016]其中,压缩纹理解压历史信息中保存安卓应用ID、第二压缩纹理格式、压缩纹理ID、压缩纹理大小、已解码压缩纹理块偏移量及已解码压缩纹理块大小,第二压缩纹理格式为安卓应用当前处理的压缩纹理的压缩纹理格式。安卓应用ID为安卓应用的路径,压缩纹理ID为压缩纹理所使用图像的路径。
[0017]步骤3、判断压缩纹理解压历史信息中记录的第二压缩纹理格式是否存在于第一压缩纹理格式中,若存在则执行步骤4,否则执行步骤9。
[0018]步骤4、安卓端根据压缩纹理ID在压缩纹理解压历史信息中查找是否存在相关信息,若存在则执行步骤5;否则执行步骤6。
[0019]步骤5、获取压缩纹理解压历史信息中记录的压缩纹理大小,按照压缩纹理大小分配共享内存,记录共享内存指针,将待解码压缩纹理块写入共享内存中;将压缩纹理解压历史信息中记录的待解码压缩纹理块本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于异构指令穿透的压缩纹理解码优化方法,其特征在于,包括以下步骤:步骤1、启动安卓端时获取Host端GPU所支持的压缩纹理格式,作为第一压缩纹理格式;步骤2、当安卓端中的安卓应用启动压缩纹理的渲染流程时,获取安卓应用ID、压缩纹理ID、压缩纹理大小、待解码压缩纹理块偏移量及待解码压缩纹理块大小,若安卓应用ID存在于压缩纹理解压历史信息中则读取该安卓应用的压缩纹理解压历史信息后执行步骤3,否则执行步骤4;所述压缩纹理解压历史信息中保存安卓应用ID、第二压缩纹理格式、压缩纹理ID、压缩纹理大小、已解码压缩纹理块偏移量及已解码压缩纹理块大小;所述第二压缩纹理格式为压缩纹理的压缩纹理格式;步骤3、若压缩纹理解压历史信息中记录的第二压缩纹理格式存在于第一压缩纹理格式中则执行步骤4,否则执行步骤9;步骤4、安卓端根据压缩纹理ID在压缩纹理解压历史信息中查找是否存在相关信息,若存在则执行步骤5;否则执行步骤6;步骤5、按照压缩纹理解压历史信息中记录的压缩纹理大小分配共享内存,记录共享内存指针,将待解码压缩纹理块写入共享内存;将压缩纹理解压历史信息中记录的待解码压缩纹理块对应的已解码压缩纹理块偏移量作为其在共享内存中的纹理块偏移量;将共享内存指针及纹理块偏移量发送至Host端,执行步骤7;步骤6、将压缩纹理ID、压缩纹理大小、待解码压缩纹理块偏移量及待解码压缩纹理块大小添加到压缩纹理解压历史信息中,再根...

【专利技术属性】
技术研发人员:温研晏华
申请(专利权)人:北京麟卓信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1