一种基于纹理转换跟踪的OpenGL层次化实现验证方法与流程

文档序号:37373985发布日期:2024-03-22 10:26阅读:12来源:国知局

本发明属于计算机软件开发,具体涉及一种基于纹理转换跟踪的opengl层次化实现验证方法。


背景技术:

1、目前大多数的图形应用都是基于opengl开发的,因此采用直接支持opengl的gpu运行此类图形应用是最高效的方法。随着技术的发展出现了vulkan图形api。opengl和vulkan是两种不同的图形api,提供的纹理格式也不完全相同,与opengl相比vulkan的控制能力更广泛、支持的新式格式更多。具体来说,opengl的纹理格式(texture format)被定义为内部格式(internal format),其确定了图像数据在gpu内存中存储的布局及精度。opengl的纹理格式包括纹理类型、颜色组件及支持的数据类型,其中,纹理类型包括1d、2d、3d、cube map等,颜色组件包括rgb、rgba、luminance alpha等,数据类型包括unsignedbyte、float等。vulkan使用vkformat枚举类型指定具体的纹理格式,各纹理格式均具有包括通道位数和类型等信息的规范说明,此外,vulkan还支持srgb格式及更细粒度的纹理压缩格式,如astc、etc2、bc等。总体来说,vulkan提供了更加丰富和精细的纹理格式选择,并使开发者有更大的控制自由去优化图像的存储和访问。

2、然而,现有情况是多数gpu实际仅提供对vulkan接口的支持,尤其是基于移动gpuip实现的gpu通常不能直接支持opengl,一般采用基于vulkan接口这类层次化的方式实现opengl,但其往往对外宣称直接支持opengl,采用这种方式实现的opengl有可能导致部分图形应用无法使用,因此验证opengl的实际实现方式是非常必要的,目前对于此类问题还没有更准确高效的解决办法。


技术实现思路

1、有鉴于此,本发明提供了一种基于纹理转换跟踪的opengl层次化实现验证方法,实现了以软件方式对gpu图形驱动是否实现了opengl接口以及以何种方式实现了opengl接口的准确高效判断。

2、本发明提供的一种基于纹理转换跟踪的opengl层次化实现验证方法,包括以下步骤:

3、步骤1、检测待测gpu的图形驱动是否支持vulkan接口,如果支持则执行步骤2;否则判定待测gpu为直接实现了opengl接口,结束本流程;

4、步骤2、构建接口实现方式测试程序,在接口实现方式测试程序中生成目标位图,采用opengl接口创建纹理对象,基于目标位图创建纹理,设定纹理的格式为opengl的内部格式,为纹理分配数据缓冲区记为opengl纹理缓冲区,再对纹理执行纹理渲染操作;

5、步骤3、确定待测gpu的图形驱动中与opengl和vulkan间纹理转换相关的关键api,在关键api中增加监测代码,由监测代码获取vulkan接口分配的存储空间及接口实现方式测试程序分配的存储空间,若两个存储空间中的数据相同则输出验证过程结束,否则输出执行后续流程;

6、步骤4、启动待测gpu所在系统,再启动接口实现方式测试程序,若系统输出验证过程结束则判定待测gpu的图形驱动基于vulkan接口实现的opengl接口,并终止执行接口实现方式测试程序,完成验证结束本流程;若系统输出执行后续流程,则待接口实现方式测试程序执行完毕,判定待测gpu的图形驱动为直接实现了opengl接口,完成验证结束本流程。

7、进一步地,所述步骤2中所述纹理对象为2d类型。

8、进一步地,所述步骤3中所述关键api包括:vkbindimagememory、vkcmdcopybuffertoimage及vkcmdcopyimage。

9、进一步地,所述步骤3中所述在关键api中增加监测代码的方式为对关键api执行hook操作。

10、进一步地,所述步骤3中所述存储空间为内存或显存。

11、进一步地,所述vkbindimagememory内增加监测代码的执行过程为:获取vulkan接口当前的图像对象vkimage所使用的存储空间,建立vkimage的id与该存储空间之间的映射关系,记为第一映射关系,将第一映射关系加入第一映射关系列表中,再执行原vkbindimagememory中的处理流程;

12、所述vkcmdcopybuffertoimage内增加监测代码的执行过程为:先执行原vkcmdcopybuffertoimage中的处理流程,根据vkcmdcopybuffertoimage所调用的vkimage的id在第一映射关系列表查找到与之对应的存储空间,并将该存储空间记为目标内存空间,获取接口实现方式测试程序所生成纹理的数据缓冲区即opengl纹理缓冲区,若目标内存空间及opengl纹理缓冲区中存储的数据相同则输出验证过程结束,否则输出执行后续流程。

13、进一步地,所述vkcmdcopyimage内增加监测代码的执行过程为:先执行原vkcmdcopyimage中的处理流程,将vkcmdcopyimage执行复制操作的当前显存的地址映射到内存对应的地址空间,将映射得到的内存记为目标显存空间,获取接口实现方式测试程序所生成纹理对象的数据缓冲区即opengl纹理缓冲区,若目标显存空间及opengl纹理缓冲区中存储的数据相同则输出验证过程结束,否则输出执行后续流程。

14、有益效果

15、本发明首先判断待测gpu的图形驱动是否支持vulkan接口,如果不支持则说明直接实现了opengl接口,否则构建接口实现方式测试程序,并在opengl和vulkan间纹理转换相关的关键api内增加监测代码跟踪纹理转换,如果存在转换则说明基于vulkan接口实现的opengl接口,否则说明直接实现了opengl接口,由此能够以软件方式准确判断gpu图形驱动对opengl接口的实现方式。



技术特征:

1.一种基于纹理转换跟踪的opengl层次化实现验证方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的opengl层次化实现验证方法,其特征在于,所述步骤2中所述纹理对象为2d类型。

3.根据权利要求1所述的opengl层次化实现验证方法,其特征在于,所述步骤3中所述关键api包括:vkbindimagememory、vkcmdcopybuffertoimage及vkcmdcopyimage。

4.根据权利要求1所述的opengl层次化实现验证方法,其特征在于,所述步骤3中所述在关键api中增加监测代码的方式为对关键api执行hook操作。

5.根据权利要求1所述的opengl层次化实现验证方法,其特征在于,所述步骤3中所述存储空间为内存或显存。

6.根据权利要求3所述的opengl层次化实现验证方法,其特征在于,所述vkbindimagememory内增加监测代码的执行过程为:获取vulkan接口当前的图像对象vkimage所使用的存储空间,建立vkimage的id与该存储空间之间的映射关系,记为第一映射关系,将第一映射关系加入第一映射关系列表中,再执行原vkbindimagememory中的处理流程;

7.根据权利要求3所述的opengl层次化实现验证方法,其特征在于,所述vkcmdcopyimage内增加监测代码的执行过程为:先执行原vkcmdcopyimage中的处理流程,将vkcmdcopyimage执行复制操作的当前显存的地址映射到内存对应的地址空间,将映射得到的内存记为目标显存空间,获取接口实现方式测试程序所生成纹理对象的数据缓冲区即opengl纹理缓冲区,若目标显存空间及opengl纹理缓冲区中存储的数据相同则输出验证过程结束,否则输出执行后续流程。


技术总结
本发明公开了一种基于纹理转换跟踪的OpenGL层次化实现验证方法,首先判断待测GPU的图形驱动是否支持Vulkan库,如果不支持则说明直接实现了OpenGL接口,否则构建接口实现方式测试程序,并在OpenGL和Vulkan间纹理转换相关的关键API内增加监测代码跟踪纹理转换,如果存在转换则说明基于Vulkan接口实现的OpenGL接口,否则说明直接实现了OpenGL接口,由此能够以软件方式准确判断GPU图形驱动对OpenGL接口的实现方式。

技术研发人员:温研
受保护的技术使用者:北京麟卓信息科技有限公司
技术研发日:
技术公布日:2024/3/21
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1