一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于DMA重定向的图形渲染方式检测方法与流程

2022-11-30 16:12:16 来源:中国专利 TAG:
一种基于dma重定向的图形渲染方式检测方法
技术领域
1.本发明属于计算机图像处理技术领域,具体涉及一种基于dma重定向的图形渲染方式检测方法。


背景技术:

2.目前现有技术中图形渲染方式主要包括以下两种,即采用专门的图形处理器(graphic processing unit,gpu)渲染三维图形的方式和采用cpu的向量部件渲染三维图形的方式,也就是通常所说的硬渲染(hardware rendering)和软渲染(software rendering)。
3.其中,采用gpu渲染三维图形的方式中,gpu又称显示核心、视觉处理器、显示芯片,gpu是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器,采用gpu使显卡减少了对cpu的依赖,并进行部分原本cpu的工作,尤其是在3d图形处理时gpu所采用的核心技术有硬件t&l(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件t&l技术可以说是gpu的标志。gpu的生产商主要有nvidia和ati。
4.采用cpu的向量部件渲染三维图形的方式,是指采用cpu中配置的与gpu类似的向量运算单元完成三维图形的渲染。在进行三维图形渲染时,用于三维运算的向量运算指令是cpu运行的进程的一部分。三维绘制在执行时,该绘制所在的进程必须在执行态。用于加速的向量指令的代码被放置在不同函数,根据调用来跳转。
5.根据两种图形渲染方式的原理可见,采用gpu渲染三维图形的方式由于采用了专门的处理器完成渲染功能因此具有更高的处理性能,而采用cpu的向量部件渲染三维图形的方式是采用现有cpu完成渲染功能因此图形处理性能相对较弱,两类图形渲染方式的售价也存在较大的差别,因此,如何判断系统平台采用的图形渲染方式非常必要。
6.现有技术中判断系统平台图形渲染方式的方法主要是采用软件工作进行测试,如采用工具glxinfo测试,然而受到多种因素的影响现有检测方式的准确性不够高,容易产生误判或漏判。


技术实现要素:

7.有鉴于此,本发明提供了一种基于dma重定向的图形渲染方式检测方法,能够准确的判断系统平台是否采用软渲染的图形渲染方式。
8.本发明提供的一种基于dma重定向的图形渲染方式检测方法,包括以下步骤:步骤1、基于cpu虚拟化监测dma状态寄存器,获取显存对应的dma地址映射描述符列表及dma地址映射描述符所映射的vram块大小;步骤2、构造图形测试用例a实现采用纹理a绘制尺寸和位置均固定的窗口,纹理a为位图图像且纹理a所占的存储空间的大小不大于vram块的大小,窗口的尺寸记为windowsize,windowsize与纹理a的图像尺寸相同,窗口的位置记为windowpos;执行图形测
试用例a,当监测到dma状态寄存器为开始写操作时,记录写操作;当执行次数达到阈值时,停止执行图形测试用例a;所述记录写操作中出现次数与阈值相等的写操作目标地址则为纹理相关写操作的虚拟地址,记为targetvirtualaddress;步骤3、在内存中分配一块大小与vram块大小相等的内存,记为testblock;获取testblock的物理内存地址,记为testphysicaladdress;构建源地址为targetvirtualaddress目标地址为testphysicaladdress的dma地址映射描述符,记为testdescriptor;步骤4、保存步骤1获取的dma地址映射描述符列表中源地址为targetvirtualaddress的dma地址映射描述符,记为originaldescriptor;采用testdescriptor替换dma地址映射描述符列表中的originaldescriptor;步骤5、若gpu支持压缩纹理格式,则执行步骤6;否则执行步骤8;步骤6、构造图形测试用例b实现采用纹理b绘制尺寸为windowsize和位置为windowpos的窗口,纹理b为纹理压缩格式的图像且纹理b的图像尺寸为windowsize;执行图形测试用例b,当监测到dma状态寄存器为写结束操作且写操作的目标地址为targetvirtualaddress时,读取内存中以testphysicaladdress为起始地址的设定字节长度的数据作为测试数据,完成图形测试用例b的执行;步骤7、若步骤6获取的测试数据中包含纹理压缩格式的标志位,则判定系统的图形渲染方式为硬渲染,否则为软渲染;采用originaldescriptor替换dma地址映射描述符列表中的testdescriptor,结束本流程;步骤8、构造图形测试用例c实现对纹理c的线性变换及采用纹理c绘制尺寸为windowsize和位置为windowpos的窗口,纹理c为非纹理压缩格式的图像且纹理c的图像尺寸为windowsize;执行图形测试用例c,当监测到dma状态寄存器为写结束操作且写操作的目标地址为targetvirtualaddress时,读取内存中以testphysicaladdress为起始地址的设定字节长度的数据作为测试数据,完成图形测试用例c的执行;步骤9、若步骤8获取的测试数据中包含未经线性变换处理的纹理c,则判定系统的图形渲染方式为硬渲染,否则为软渲染;采用originaldescriptor替换dma地址映射描述符列表中的testdescriptor,结束本流程。
9.进一步地,所述步骤1中所述基于cpu虚拟化监测dma状态寄存器的方式为:构建轻量级的hypervisor记为gpuhypervisor,在gpuhypervisor中设置虚拟机控制结构实现对dma状态寄存器的监测,以获取dma的写开始操作和写结束操作。
10.进一步地,所述步骤6和步骤8中所述设定字节长度为512字节。
11.进一步地,所述步骤6中所述纹理b为astc格式纹理。
12.进一步地,所述步骤8中所述纹理c为位图图像纹理。
13.有益效果:本发明依据图像绘制过程中纹理相关操作的原理,构造特定的图形测试用例,并在其执行过程中监测系统中dma状态寄存器,根据dma状态寄存器的数据启动获取图形测试用例写入显存的数据的操作,通过分析写入显存的数据确定系统的图形渲染方式,由此能够有效提高图形渲染方式检测的准确性。
具体实施方式
14.下面列举实施例,对本发明进行详细描述。
15.在计算机图形学中,通常会采用纹理(texture)映射实现图像的绘制。对于采用有cpu实现渲染的系统来说,在渲染过程中会将纹理数据处理为渲染数据后发送至显卡显存,而对于采用gpu实现渲染的系统来说,则是将纹理数据直接发送至显卡显存,由显卡在显存内完成纹理数据的处理。
16.dma(directmemory access)即直接存储访问,dma传输方式无需cpu直接控制传输,通过硬件为ram、i/o设备开辟一条直接传输数据的通路,能使cpu的效率大为提高。每一种体系结构dma传输不同,编程接口也不同。对于图像绘制过程来说,计算机系统采用dma实现内存与显存之间的绘制相关数据的传输,通常采用dma地址映射描述符将虚拟地址空间的地址区域映射到具有相同大小的显存(vram),当对虚拟地址空间执行写入操作时就相当于对vram执行写入操作,一般情况下每个dma地址映射描述符映射的vram的块大小都是相同的。
17.基于上述分析可知,通过判断纹理的处理过程是否在显存内完成,即可判断系统实际使用的图形渲染方式,进一步地通过拦截dma的操作过程即可实现对显存内数据的监测以实现对数据的分析和判断。
18.本发明提供了一种基于dma重定向的图形渲染方式检测方法,具体包括以下步骤:步骤1、基于cpu虚拟化监测dma状态寄存器,获取显存对应的dma地址映射描述符列表及dma地址映射描述符所映射的vram块大小。
19.具体来说,通过读取dma状态寄存器的数据,能够获取dma传输的状态标志信息。
20.步骤2、构造图形测试用例a实现采用纹理a绘制尺寸和位置均固定的窗口,纹理a为位图图像且纹理a所占的存储空间的大小不大于vram块的大小,窗口的尺寸记为windowsize,windowsize与纹理a的图像尺寸相同,窗口的位置记为windowpos;执行图形测试用例a,当监测到dma状态寄存器为开始写操作时,记录写操作;当执行次数达到阈值时,停止执行图形测试用例a。记录中出现次数与阈值相等的写操作目标地址则为纹理相关写操作的虚拟地址,记为targetvirtualaddress。
21.其中,通过固定纹理a为位图图像尺寸即可实现绘制出尺寸固定的窗口,同时通过在纹理贴图时设定位置坐标即可实现绘制出位置固定的窗口。此外,本发明设定纹理a所占的存储空间的大小不大于vram块的大小,以确保通过监测一块内存空间即可获取图形测试用例所采用的完整纹理。
22.步骤3、在内存中分配一块大小与vram块大小相等的内存,记为testblock;获取testblock的物理内存地址,记为testphysicaladdress;构建源地址为targetvirtualaddress目标地址为testphysicaladdress的dma地址映射描述符,记为testdescriptor。
23.步骤4、保存步骤1获取的dma地址映射描述符列表中源地址为targetvirtualaddress的dma地址映射描述符,记为originaldescriptor;采用testdescriptor替换dma地址映射描述符列表中的originaldescriptor。
24.通过步骤4的操作,实现了对系统显存操作的重定向,即将原有对显存内某个物理地址空间的操作转换为对内存中分配的物理地址空间的操作,有效提高了测试过程中数据
读取的效率。
25.步骤5、若gpu支持压缩纹理格式,则执行步骤6;否则执行步骤8。
26.步骤6、构造图形测试用例b实现采用纹理b绘制尺寸为windowsize和位置为windowpos的窗口,纹理b为纹理压缩格式的图像且纹理b的图像尺寸为windowsize;执行图形测试用例b,当监测到dma状态寄存器为写结束操作且写操作的目标地址为targetvirtualaddress时,读取内存中以testphysicaladdress为起始地址的设定字节长度的数据作为测试数据,完成图形测试用例b的执行。
27.步骤7、若步骤6获取的测试数据中包含纹理压缩格式的标志位,则判定系统的图形渲染方式为采用gpu渲染的硬渲染,否则判定系统的图形渲染方式为采用cpu渲染的软渲染;采用originaldescriptor替换dma地址映射描述符列表中的testdescriptor,结束本流程。
28.步骤8、构造图形测试用例c实现对纹理c的线性变换及采用纹理c绘制尺寸为windowsize和位置为windowpos的窗口,纹理c为非纹理压缩格式的图像且纹理c的图像尺寸为windowsize;执行图形测试用例c,当监测到dma状态寄存器为写结束操作且写操作的目标地址为targetvirtualaddress时,读取内存中以testphysicaladdress为起始地址的设定字节长度的数据作为测试数据,完成图形测试用例c的执行。
29.步骤9、若步骤8获取的测试数据中包含未经线性变换处理的纹理c,则判定系统的图形渲染方式为采用gpu渲染的硬渲染,否则判定系统的图形渲染方式为采用cpu渲染的软渲染;采用originaldescriptor替换dma地址映射描述符列表中的testdescriptor,结束本流程。
30.实施例:本实施例中采用一种基于dma重定向的图形渲染方式检测方法实现了对系统所采用图形渲染方式的准确判断,具体包括以下步骤:s1、基于处理器对虚拟化技术的支持,如x86的vt技术等,构建轻量级的hypervisor,记为gpuhypervisor,采用gpuhypervisor拦截dma相关操作。具体包括以下步骤:s1.1、在gpuhypervisor中设置虚拟机控制结构vmcs(virtual machine control structure)实现对dma状态寄存器的监测,以获取dma的写开始和写结束操作。
31.s1.2、获取显存对应的dma地址映射描述符列表,获取dma地址映射描述符映射的vram大小,记为vramblocksize。
32.dma地址映射描述符列表中存放了多个dma地址映射描述符, dma地址映射描述符是将一个虚拟地址空间的地址区域映射到一个具有相同大小的显存(vram)内的地址区域,程序写虚拟地址空间的操作就相当于写vram的地址空间的操作。
33.s2、构造图形测试用例执行纹理加载和贴图处理,并设定显示窗口的位置和大小,保证窗口的尺寸与纹理图像的尺寸相同,选择格式为位图图像的纹理,且纹理所占的存储空间的大小不大于vramblocksize,以确保单次贴图只会写入一个vram块中,记录窗口尺寸为windowsize,窗口位置为windowpos。
34.s3、设定循环次数为14879,执行s2构造的图形测试用例,监测dma状态寄存器,当状态寄存器为开始写操作时,记录写入的目标地址及各目标地址的写入次数形成测试记
录;图形测试用例执行完毕后,停止监测dma状态寄存器。
35.s4、遍历s3形成的测试记录,其中写入次数为14879次的目标地址即为映射到vramblock的虚拟地址targetvirtualaddress。
36.s5、分配大小为vramblock的一块内存,锁定该内存,获取该内存的物理内存地址testphysicaladdress;构建dma地址映射描述符newdmadescriptor,地址映射描述符的源地址为targetvirtualaddress,目标地址为testphysicaladdress。
37.s6、从s1获取的dma地址映射描述符列表中查询源地址为targetvirtualaddress的项作为originaldmadescriptor;采用newdmadescriptor覆盖originaldmadescriptor。
38.这样,读写[targetvirtualaddress,targetvirtualaddress vramblock]这个区域的内存的操作,实际上就是读写testphysicaladdress指向的物理内存的操作。
[0039]
s7、对于支持压缩纹理格式的gpu,则执行s8;否则执行s10。
[0040]
下面通过判断写入显存的数据是处理前的纹理还是处理后的纹理,即可判断系统的图形渲染方式。主要思路是:通过在gpuhypervisor中设置vmcs控制结构,监视dma状态寄存器来监视dma操作的开始和结束;并构造图形测试用例,通过循环纹理贴图产生大量的基于dma的gpu显存访问,并判断写入显存的数据是处理前的纹理还是处理后的纹理。
[0041]
s8、调用opengl/directx等图形接口的相关api循环执行astc格式纹理加载和贴图,astc格式纹理所占的存储空间的大小不大于vramblocksize,且贴图窗口的位置为windowpos、大小为windowsize。其中,astc(adaptive scalable texture compression)为自适应扩展纹理压缩格式。
[0042]
s9、监视dma状态寄存器,当dma为写结束操作且写操作的目标地址为targetvirtualaddress时,读取以targetvirtualaddress为起始地址的512字节数据,判断这些数据中是否存在astc格式纹理的特殊标志位,如果存在则说明是由gpu直接处理压缩纹理,系统采用的图形渲染方式为gpu渲染;如果不存在,则说明是将纹理进行解压后再发送至显存,因此系统采用的图形渲染方式为cpu渲染;采用originaldescriptor替换dma地址映射描述符列表中的testdescriptor,结束本流程。
[0043]
s10、调用opengl/directx等图形接口的相关api循环执行位图图像纹理的加载、不增加纹理所占存储空间的线性变换及贴图,其中,位图图像纹理记为bitmaptexture,bitmaptexture所占存储空间的大小不大于vramblocksize,且贴图窗口的位置为windowpos、大小为windowsize。
[0044]
s11、监视dma状态寄存器,当dma为写结束操作且写操作的目标地址为targetvirtualaddress时,判断targetvirtualaddress指向的内存区域中是否存在未经线性变换处理的bitmaptexture,若存在则说明将由gpu在vram中对bitmaptexture进行线性变换,因此系统采用的图形渲染方式为gpu渲染;若不存在则说明由cpu完成了对bitmaptexture的线性变换,因此系统采用的图形渲染方式为cpu渲染;采用originaldescriptor替换dma地址映射描述符列表中的testdescriptor,结束本流程。
[0045]
其中,判断targetvirtualaddress指向的内存区域中是否存在未经线性变换处理的bitmaptexture的方式可采用simd指令作二进制匹配实现。
[0046]
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的
保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献