一种基于CPU的图形渲染方式的检测方法技术

技术编号:35661388 阅读:23 留言:0更新日期:2022-11-19 16:59
本发明专利技术公开了一种基于CPU的图形渲染方式的检测方法,通过修改编译器保证OpenGL测试程序本身以及系统平台编译器不引入SIMD指令的相关操作,在这种情况下执行OpenGL测试程序,通过对OpenGL测试程序的监测判断系统平台在图形渲染过程中是否存在使用SIMD指令的行为以确定系统平台所采用的图形渲染方式,有效地提高了基于CPU的图形渲染方式的检出率。提高了基于CPU的图形渲染方式的检出率。

【技术实现步骤摘要】
一种基于CPU的图形渲染方式的检测方法


[0001]本专利技术属于计算机图像处理
,具体涉及一种基于CPU的图形渲染方式的检测方法。

技术介绍

[0002]目前现有技术中图形渲染方式主要包括以下两种,即采用专门的图形处理器(Graphic Processing Unit,GPU)渲染三维图形的方式和采用CPU的向量部件渲染三维图形的方式,也就是通常所说的硬渲染(Hardware Rendering)和软渲染(Software Rendering)。
[0003]其中,采用GPU渲染三维图形的方式中,GPU又称显示核心、视觉处理器、显示芯片,GPU是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器,采用GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时GPU所采用的核心技术有硬件T&L(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L技术可以说是GPU的标志。GPU的生产商主要有NVIDIA和ATI。
[0004]采用CPU的向量部件渲染三维图形的方式,是指采用CPU中配置的与GPU类似的向量运算单元完成三维图形的渲染。在进行三维图形渲染时,用于三维运算的向量运算指令是CPU运行的进程的一部分。三维绘制在执行时,该绘制所在的进程必须在执行态。用于加速的向量指令的代码被放置在不同函数,根据调用来跳转。<br/>[0005]根据两种图形渲染方式的原理可见,采用GPU渲染三维图形的方式由于采用了专门的处理器完成渲染功能因此具有更高的处理性能,而采用CPU的向量部件渲染三维图形的方式是采用现有CPU完成渲染功能因此图形处理性能相对较弱,两类图形渲染方式的售价也存在较大的差别,因此,如何判断系统平台采用的图形渲染方式非常必要。
[0006]现有技术中判断系统平台图形渲染方式的方法主要是采用软件工作进行测试,如采用工具glxinfo测试。glxinfo是一款常用的终端命令行工具,能够获得显卡对OpenGL的支持信息、图形渲染方式及系统当前使用的显卡信息,例如当执行“glxinfo | grep renderer”命令时如果返回llvmpipe则说明系统平台图形渲染方式为采用CPU的向量部件渲染三维图形的方式。对于采用软渲染方式的系统平台来说,OpenGL的渲染往往是通过执行CPU的SIMD(Simple Instruction Multiple Data)指令完成,然而,对于这种情况,采用上述测试方法往往较难发现,从而导致对系统平台图形渲染方式的检测错误。

技术实现思路

[0007]有鉴于此,本专利技术提供了一种基于CPU的图形渲染方式的检测方法,能够相对准确的判断系统平台是否采用软渲染的图像渲染方式。
[0008]本专利技术提供的一种基于CPU的图形渲染方式的检测方法,包括以下步骤:步骤1、确定检测图形渲染方式所采用的OpenGL测试程序;
步骤2、采用禁止生成SIMD指令代码的编译器编译OpenGL测试程序得到可执行测试程序;将所述可执行测试程序静态反编译为汇编代码,检测汇编代码是否包含SIMD指令,若包含SIMD指令则替换OpenGL测试程序中与SIMD指令相关的所有代码,执行步骤2;若不包含SIMD指令则以可执行测试程序执行步骤3;步骤3、若当前CPU平台不支持SIMD指令但支持CPU虚拟化,则启动虚拟CPU拦截CPUID指令,加载可执行测试程序记录OpenGL图形库分配的地址空间作为图形地址空间,执行步骤4;若当前CPU平台不支持SIMD指令也不支持CPU虚拟化,则加载可执行测试程序记录OpenGL图形库分配的地址空间作为图形地址空间,执行步骤5;若当前CPU平台支持SIMD指令则加载可执行测试程序记录OpenGL图形库分配的地址空间作为图形地址空间,执行步骤7;步骤4、启动可执行测试程序,当虚拟CPU监测到出现获取CPU平台是否支持SIMD指令的操作时,执行步骤6;步骤5、在可执行测试程序所在进程中拦截CPUID指令,当监测到存在CPU平台是否支持SIMD指令的操作时,执行步骤6;步骤6、构造CPUID指令返回值使可执行测试程序认为CPU平台支持SIMD指令,当监测到产生非法指令异常且非法指令位于图形地址空间之内时,判定当前系统平台采用的图形渲染方式为软渲染,并结束本流程;步骤7、当存在位于图形地址空间中的指令所使用的寄存器为SIMD指令所对应的寄存器时判定当前系统平台采用的图形渲染方式为软渲染,结束本流程。
[0009]进一步地,所述步骤1中所述OpenGL测试程序为包含着色器程序编译执行、图元栅格化及顶点处理操作的测试程序,所述OpenGL测试程序为glmark2基准测试。
[0010]进一步地,所述步骤2中所述编译器为Clang编译器。
[0011]进一步地,所述步骤2中所述检测汇编代码是否包含SIMD指令的方式为:对于x86平台,若汇编代码中存在使用XMM或YMM寄存器的汇编指令,则汇编代码包含SIMD指令;对于ARM平台,若汇编代码中存在V{Q}ADD、VADDL、VADDW、V{Q}SUB、VSUBL或VSUBW指令,则汇编代码包含SIMD指令。
[0012]进一步地,所述步骤6中所述构造CPUID指令返回值使可执行测试程序认为CPU平台支持SIMD指令的方式为:将CPUID指令返回值中支持SIMD指令的标志位均设置为1。
[0013]进一步地,所述将CPUID指令返回值中支持SIMD指令的标志位均设置为1的方式为:将EDX寄存器的第25位和第26位以及ECX寄存器的第0位、第9位、第19位和第20位均置为1。
[0014]进一步地,所述步骤5中所述在可执行测试程序所在进程中拦截CPUID指令的方式为:将CPUID指令作为敏感指令,采用动态指令插桩工具执行并监测可执行测试程序的执行过程。
[0015]进一步地,所述步骤7中所述存在位于图形地址空间中的指令所使用的寄存器为SIMD指令所对应的寄存器的确定方式为:在指令转换过程中将位于图形地址空间中的基本块进行反编译,判断反编译得到的指令所使用的寄存器是否为SIMD指令所对应的寄存器,如果是则存在,否则不存在。
[0016]有益效果:
本专利技术通过修改编译器保证OpenGL测试程序本身以及系统平台编译器不引入SIMD指令的相关操作,在这种情况下执行OpenGL测试程序,通过对OpenGL测试程序的监测判断系统平台在图形渲染过程中是否存在使用SIMD指令的行为以确定系统平台所采用的图形渲染方式,有效地提高了基于CPU的图形渲染方式的检出率。
具体实施方式
[0017]下面列举实施例,对本专利技术进行详细描述。
[0018]当系统平台调用OpenGL进行图形渲染时,若采用软渲染的方式则会采用CPU加速引擎的OpenGL库生成的SIMD指令集完成图形渲染。SIMD指本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于CPU的图形渲染方式的检测方法,其特征在于,包括以下步骤:步骤1、确定检测图形渲染方式所采用的OpenGL测试程序;步骤2、采用禁止生成SIMD指令代码的编译器编译OpenGL测试程序得到可执行测试程序;将所述可执行测试程序静态反编译为汇编代码,检测汇编代码是否包含SIMD指令,若包含SIMD指令则替换OpenGL测试程序中与SIMD指令相关的所有代码,执行步骤2;若不包含SIMD指令则以可执行测试程序执行步骤3;步骤3、若当前CPU平台不支持SIMD指令但支持CPU虚拟化,则启动虚拟CPU拦截CPUID指令,加载可执行测试程序记录OpenGL图形库分配的地址空间作为图形地址空间,执行步骤4;若当前CPU平台不支持SIMD指令也不支持CPU虚拟化,则加载可执行测试程序记录OpenGL图形库分配的地址空间作为图形地址空间,执行步骤5;若当前CPU平台支持SIMD指令则加载可执行测试程序记录OpenGL图形库分配的地址空间作为图形地址空间,执行步骤7;步骤4、启动可执行测试程序,当虚拟CPU监测到出现获取CPU平台是否支持SIMD指令的操作时,执行步骤6;步骤5、在可执行测试程序所在进程中拦截CPUID指令,当监测到存在CPU平台是否支持SIMD指令的操作时,执行步骤6;步骤6、构造CPUID指令返回值使可执行测试程序认为CPU平台支持SIMD指令,当监测到产生非法指令异常且非法指令位于图形地址空间之内时,判定当前系统平台采用的图形渲染方式为软渲染,并结束本流程;步骤7、当存在位于图形地址空间中的指令所使用的寄存器为SIMD指令所对应的寄存器时判定当前系统平台采用的图形渲染方式为软渲染,结束本流程。2.根据权利要求1所述的检测方法,其特征在于,所述步骤1中所述Ope...

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

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

1