一种基于NEON指令的纹理格式转换优化方法及系统技术方案

技术编号:36512542 阅读:16 留言:0更新日期:2023-02-01 15:41
本发明专利技术公开了一种基于NEON指令的纹理格式转换优化方法及系统,本发明专利技术基于NEON指令的纹理格式转换优化方法包括:S1,接收到纹理格式转换请求;S2,采用NEON指令将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中,所述向量寄存器同时包含多个颜色分量的存储空间;S3,采用NEON指令将向量寄存器中存储颜色分量并行按照目标纹理格式的格式拷贝到内存中得到目标纹理格式的纹理。本发明专利技术通过NEON指令进行并行的纹理格式转换,加速纹理数据拷贝速度,一定程度上解决纹理数据上传接口的性能,达到提高OpenGL/ES API效率及用户体验的目的。户体验的目的。户体验的目的。

【技术实现步骤摘要】
一种基于NEON指令的纹理格式转换优化方法及系统


[0001]本专利技术涉及计算机图像渲染
,具体涉及一种基于NEON指令的纹理格式转换优化方法及系统。

技术介绍

[0002]纹理是通过摄像机拍摄或者艺术家绘制的一张图片,也可通过程序生成或者由OpenGL(英语:Open Graphics Library,译名为开放图形库或开放式图形库)将纹理作为一种显示设备渲染得到。自然世界中的纹理是二维的,但是OpenGL也支持其他类型的纹理格式:一维纹理、三维纹理、立方体纹理映射,以及缓存纹理。纹理是由纹素组成的,其中通常包含颜色数据信息。应用可以将纹理贴到物体表面,就像贴墙纸一样,这就是纹理映射。其中,OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形到复杂的三维景象。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
[0003]很多应用场景都需要使用纹理映射,而上传纹理图片数据到显存时,需要经常涉及到纹理格式转换,比如RGB格式转RGBX格式。Mesa 3D是一个在MIT许可证下开放源代码的三维计算机图形库,以开源形式实现OpenGL的应用程序接口。OpenGL的高效实现一般依赖于显示设备厂商提供的硬件,而Mesa 3D是一个纯基于软件的图形应用程序接口。各种设备驱动程序允许 Mesa库在许多不同的环境中使用,从软件仿真到现代 GPU 的完整硬件加速。多年来,该项目已经发展到实现更多图形API, 包括OpenGL ES、OpenCL、OpenMAX、VDPAU、VA

API、XvMC、Vulkan和EGL。但目前Mesa 3D上的实现只是考虑了格式转换的通用性,并未考虑转换性能,只是简单的一个个像素分量进行拷贝。如目前在Mesa中调用glTexImage2D(内部格式GL_RGB, 外部格式GL_RGB, 纹理数据类型GL_UNSIGNED_BYTE)的实现步骤如下:步骤1: 根据纹理数据的宽和高、数据大小,分配VRAM显存。步骤2: 分配同样大小的GTT内存。步骤3: 将纹理数据拷贝到GTT(graphics translation table,图形转换表)内存。如果不涉及纹理格式转换,一行一行使用内存拷贝memcpy;如果涉及纹理格式转换,一个个像素分量进行拷贝转换。步骤4: 将GTT内存中的数据使用DMA或者图形引擎搬运到VRAM显存中。在步骤3中,如果纹理数据外部格式为GL_RGBA,内部格式GL_RGBA, 将不会触发纹理格式转换;如果纹理数据外部格式为GL_RGB, 内部格式为GL_RGB, 将会进行纹理格式转换,GL_RGB转换成GL_RGBX。有多种内外部纹理格式的组合会进行纹理格式转换,如比较常见的有内部格式GL_RGB和外部格式GL_RGB,内部格式GL_RGBA和外部格式GL_RGB, 内部格式GL_RGB和外部格式GL_BGR, 内部格式GL_RGBA和外部格式GL_BGR等,这里不一一列举。在上述内外部格式之间转换的基础上,如果内外部颜色分量大小相同,则不会涉及位数转换;如果颜色分量大小不同,还需要进行位数转换,如内部格式GL_RGB16I, 外部格式GL_RGB, 纹理数据类型为GL_UNSIGNED_INT,除了格式准换之外,每一个分量还需要进行32bit

>16bit的位数转换。经过测试,在目前Mesa的实现中,如果需要进行纹理格式转换,纹理数据上传性能比较低下,严重影响图形引擎渲染性能。

技术实现思路

[0004]本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种基于NEON指令的纹理格式转换优化方法及系统,本专利技术旨在通过NEON指令进行并行的纹理格式转换,加速纹理数据拷贝速度,一定程度上解决纹理数据上传接口的性能,达到提高OpenGL/ES API效率及用户体验的目的。
[0005]为了解决上述技术问题,本专利技术采用的技术方案为:一种基于NEON指令的纹理格式转换优化方法,包括:S1,接收到纹理格式转换请求;S2,采用NEON指令将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中,所述向量寄存器同时包含多个颜色分量的存储空间;S3,采用NEON指令将向量寄存器中存储颜色分量并行按照目标纹理格式的格式拷贝到内存中得到目标纹理格式的纹理。
[0006]可选地,步骤S2中采用NEON指令将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中时,包括将不同的颜色分量存储在不同的向量寄存器中。
[0007]可选地,所述将不同的颜色分量存储在不同的向量寄存器中时,若原始纹理格式中的颜色分量包括R、G、B三种颜色分量,则将R颜色分量加载在向量寄存器Vn,将G颜色分量加载在向量寄存器Vn+1,将B颜色分量加载在向量寄存器Vn+2;若原始纹理格式中的颜色分量包括R、G、B、A四种颜色分量,则将R颜色分量加载在向量寄存器Vn,将G颜色分量加载在向量寄存器Vn+1,将B颜色分量加载在向量寄存器Vn+2,将A颜色分量加载在向量寄存器Vn+3,其中Vn为指定的向量寄存器的索引号。
[0008]可选地,步骤S2中向量寄存器同时包含多个颜色分量的存储空间是指:若一个颜色分量的大小为8bit,则一个向量寄存器包含16个颜色分量的存储空间;若一个颜色分量的大小为32bit,则一个向量寄存器包含4个颜色分量的存储空间。
[0009]可选地,步骤S1中接收到的纹理格式转换请求中,原始纹理格式和目标纹理格式具有共同的颜色分量的大小,步骤S2为采用共同的颜色分量大小对应的NEON加载指令以指定步长将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中;步骤S3为采用共同的颜色分量大小对应的NEON拷贝指令以指定步长将向量寄存器中存储颜色分量并行按照目标纹理格式拷贝到内存中得到目标纹理格式的纹理。
[0010]可选地,步骤S1中接收到的纹理格式转换请求中,原始纹理格式和目标纹理格式中颜色分量的大小不同,步骤S2为采用原始纹理格式的颜色分量大小对应的NEON加载指令以指定步长将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中;步骤S3为先将向量寄存器中存储颜色分量通过NEON位数转换指令从原始纹理格式的颜色分量大小转换为目标纹理格式的颜色分量大小,再采用目标纹理格式的颜色分量大小对应的NEON拷贝指令以指定步长并行按照目标纹理格式拷贝到内存中得到目标纹理格式的纹理。
[0011]可选地,步骤S1中接收到的纹理格式转换请求为来自Mesa通用纹理传输接口的纹理格式转换请求,且参数包括原始纹理格式、目标纹理格式和数据类型。
[0012]可选地,步骤S1中接收到的纹理格式转换请求中,原始纹理格式和目标纹理格式中的颜色分量均采用统一的全局索引号表示,原始纹理格式和目标纹理格式中同一个颜色分量的全局索引号相同、位置关系全部或部分不同本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于NEON指令的纹理格式转换优化方法,其特征在于,包括:S1,接收到纹理格式转换请求;S2,采用NEON指令将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中,所述向量寄存器同时包含多个颜色分量的存储空间;S3,采用NEON指令将向量寄存器中存储颜色分量并行按照目标纹理格式的格式拷贝到内存中得到目标纹理格式的纹理。2.根据权利要求1所述的基于NEON指令的纹理格式转换优化方法,其特征在于,步骤S2中采用NEON指令将原始纹理格式中的颜色分量加载在NEON指令的128 bit的向量寄存器中时,包括将不同的颜色分量存储在不同的向量寄存器中。3.根据权利要求2所述的基于NEON指令的纹理格式转换优化方法,其特征在于,所述将不同的颜色分量存储在不同的向量寄存器中时,若原始纹理格式中的颜色分量包括R、G、B三种颜色分量,则将R颜色分量加载在向量寄存器Vn,将G颜色分量加载在向量寄存器Vn+1,将B颜色分量加载在向量寄存器Vn+2;若原始纹理格式中的颜色分量包括R、G、B、A四种颜色分量,则将R颜色分量加载在向量寄存器Vn,将G颜色分量加载在向量寄存器Vn+1,将B颜色分量加载在向量寄存器Vn+2,将A颜色分量加载在向量寄存器Vn+3,其中Vn为指定的向量寄存器的索引号。4.根据权利要求1所述的基于NEON指令的纹理格式转换优化方法,其特征在于,步骤S2中向量寄存器同时包含多个颜色分量的存储空间是指:若一个颜色分量的大小为8bit,则一个向量寄存器包含16个颜色分量的存储空间;若一个颜色分量的大小为32bit,则一个向量寄存器包含4个颜色分量的存储空间。5.根据权利要求1所述的基于NEON指令的纹理格式转换优化方法,其特征在于,步骤S1中接收到的纹理格式转换请求中,原始纹理格式和目标纹理格式具有共同的颜色分量的大小,步骤S2为采用共同的颜色分量大小对应的NEON加载指令以指定步长将原始纹理格式中...

【专利技术属性】
技术研发人员:刘意虎吴江张铎王勇军周磊
申请(专利权)人:麒麟软件有限公司
类型:发明
国别省市:

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

1