1.本发明实施例涉及计算机图形信号的软件处理领域,尤其涉及一种显卡渲染结果分析方法、装置及存储介质。
背景技术:
::2.开发被测显卡时,通常需要对渲染结果做分析,以检验渲染结果是否符合预期,目前,缺乏对被测显卡的渲染结果进行实时分析和能自动发现问题的方法和技术手段。当前,用户只能通过人眼观察和批处理分析的手段对被测显卡渲染的结果进行分析,但是人眼观察只能查看到明显异常,对细微差别无法识别;批处理分析是批量分析指定测试集,每个测试用例都是单帧的,执行完测试用例再针对每个用例渲染结果做重点排查,此种分析手段只能分析指定测试用例集,无法针对其他来源用例和客户用例做测试,并且只能做单帧分析,对于多帧应用程序和实际场景中的应用程序分析无能为力。因此,这两种分析手段均不能够把各种渲染的异常,例如无渲染结果、渲染图形畸变、渲染图形颜色异常、渲染图形像素丢失等问题,实时且自动地识别出来。技术实现要素:3.有鉴于此,本发明实施例期望提供一种显卡渲染结果分析方法、装置及存储介质,能够实时查看渲染异常的细微差别,提升渲染结果异常定位分析的实时性和准确性。4.本发明实施例的技术方案是这样实现的:第一方面,本发明实施例提供一种显卡渲染结果分析方法,包括:在应用程序执行过程中,记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息;通过被测显卡与标准显卡分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果与第二渲染结果;当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,并生成用于进行分析和调试的异常描述信息。5.第二方面,本发明实施例提供一种显卡渲染结果分析装置,所述装置包括:记录部分、渲染部分和确定部分,其中,所述记录部分,经配置为在应用程序执行过程中,记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息;所述渲染部分,经配置为通过被测显卡与标准显卡分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果与第二渲染结果;所述确定部分,经配置为当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,并生成用于进行分析和调试的异常描述信息。6.第三方面,本发明实施例提供了一种计算设备,所述计算设备包括:通信接口,存储器和处理器;各个组件通过总线系统耦合在一起;其中,所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;所述存储器,用于存储能够在所述处理器上运行的计算机程序;所述处理器,用于在运行所述计算机程序时,执行第一方面所述显卡渲染结果分析方法的步骤。7.第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质存储有显卡渲染结果分析的应用程序,所述应用程序被至少一个处理器执行时实现第一方面所述显卡渲染结果分析方法的步骤。8.本发明实施例提供了一种显卡渲染结果分析方法、装置及存储介质,在应用程序执行过程中记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,通过同时在被测显卡和标准显卡上分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果和第二渲染结果,此分析方法仅需基于记录的图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,在被测显卡和标准显卡上回放记录的内容,操作简单并且可以实时获取到渲染结果;当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,生成用于进行分析和调试的异常描述信息,通过比较第一渲染结果和第二渲染结果,可以自动识别出被测显卡第一渲染结果异常并将所述第一渲染结果的异常描述信息展示在显示器界面上或者保存为内存数据或本地文件,以便后续进一步的详细分析和调试,提升了渲染结果分析的易操作性、实时性和连续性。附图说明9.图1为本发明实施例提供的计算机系统组成示意图;图2为说明图1中的cpu和显卡的实例实施方案的框图;图3为本发明实施例提供的一种显卡渲染结果分析方法流程图;图4为本发明实施例提供的绘制三角形的渲染流程图;图5为本发明实施例提供的一种显卡渲染结果分析的详细操作流程图;图6为本发明实施例提供的一种显卡渲染结果分析装置示意图。具体实施方式10.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。11.参见图1,其示出了能够实现本发明实施例技术方案的计算机系统组成100,需注意,图示的系统是可能的系统的仅一个示例,并且可根据需要在各种系统中的任一系统中实现本发明的实施方案。该计算机系统组成100具体可以为任意类型的计算装置,包括且不限于台式计算机、服务器、工作站、膝上计算机、基于计算机的仿真器、无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(pda)、视频游戏控制台(包含视频显示器、移10、显卡20及其对应内部构成。其中cpu10包括应用程序11、图形api13、gpu驱动程序14,其中图形api13可以是上述api中的任一种,本发明实施例以开放式图形库api为例,而图形api13和gpu驱动程序14两者中的每一个,可以为一或多个应用程序服务,在一些示例中,图形api13和gpu驱动程序14可实施为cpu10的硬件单元,而gpu驱动程序14可以将cpu10的一或多个图形渲染指令编译成gpu21可执行的图形渲染命令。显卡20包括gpu21、显示内存22、数/模转换器23,还可以包括视频图形阵列(videographicsarray,vga)接口或数字视频接口(digitalvisualinterface,dvi)(图中未示出)。显卡20可以是集成显卡、核心显卡、独立显卡。其中,集成显卡是将显卡芯片组嵌入到主板上的北桥芯片中。所述显卡芯片组包括gpu21、显示内存22及其电路,目前绝大部分的集成显卡均不具备单独的显示内存22,需使用系统内存来充当显示内存22,其使用量由系统自动调节。核心显卡是直接把所述显卡芯片组集成在cpu10上,其性能比集成显卡有明显的提升,可以满足更高要求的画面显示。独立显卡是需要插在主板的加速图形接口(accelerategraphicalport,agp)上但又作为独立的板卡的存在,具有单独的显示内存22,不占用系统内存,独立显卡又分为内置独立显卡和外置显卡,目前大部分都是内置独立显卡。显示内存22,可简称为显存22,也被称为帧缓存,用于存储gpu21处理过或者即将提取的渲染图像数据,例如像素数据,其具体存储的像素数据为每个像素的红色、绿色、蓝色、α(rgba)分量,其中“rgb”分量对应于色彩值,并且“a”分量对应于目的地α值(例如,用于图像合成的不透明度值),存储的渲染图像数据用于预览所述画面帧的渲染效果。数/模转换器23是将显示内存22中数字渲染图像数据传送到随机读写存储数/模转换器(randomaccessmemory/digitalanalogconverter,ram/dac)转换成显示器可以识别的模拟信号,通过vga接口传输给显示器40。如果是dvi接口类型的显卡,则不需要经过数字信号转模拟信号,而直接输出数字信号给显示器40。16.基于现有技术中应用程序调用方式,cpu10通过应用程序11经由图形api13向gpu驱动程序14发出指令,gpu驱动程序14可调配指定供显卡20中的gpu21执行的一或多个运算及渲染图形命令,以用于将一或多个图形渲染为可显示的图形图像。当gpu21接收到来自cpu10的渲染图形命令时,gpu21对渲染图形命令进行解码,以执行渲染图形命令中所指定的操作。但是应用程序执行过程中,对每一步骤处理并没有对应的文件来记录其对应的操作以及函数调用关系,当出现渲染结果异常时,目前普遍的分析手段有人眼观察和批处理分析,这两种手段只能对明显异常以及指定测试用例集或单帧进行分析,而对渲染结果存在细微差别时无法识别、针对其他来源用例做测试并且对多帧应用程序以及实际场景中的应用程序无法进行分析,也可以理解为,没有有效的手段能够实时自动地发现渲染异常问题。17.根据上述内容的阐述,本发明实施例期望提供一种显卡渲染结果分析方法,该分析方法在应用程序启动前预先对图形api函数做hook处理并生成动态链接库,应用程序或测试用例执行时调用所述动态链接库中封装的图形api函数,并基于应用程序的调用生成记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息的trace文件,通过在被测显卡和标准显卡上回放所述trace文件分别获取到渲染结果,对比被测显卡和标准显卡的渲染结果,判断被测显卡绘制出的图像差异是否满足设定的判定条件,当发现渲染结果异常时,实时分析异常的渲染结果并把分析后的渲染结果或异常描述信息保存为内存数据或本地文件,也可以在发现差异后随时暂停渲染结果的对比并在显示器上展示被测显卡当前的内部状态,以供后续进一步详细分析,提升了渲染结果异常时分析的实时性、连续性。基于此,参见图3,其示出了一种显卡渲染结果分析方法的流程,包括:s301:在应用程序执行过程中,记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息;s302:通过被测显卡与标准显卡分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果与第二渲染结果;s303:当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,并生成用于进行分析和调试的异常描述信息。18.上述图3所示的技术方案,在应用程序执行过程中记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,通过同时在被测显卡和标准显卡上分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果和第二渲染结果,此分析方法仅需基于记录的图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,在被测显卡和标准显卡上回放记录的内容,操作简单并且可以实时获取到渲染结果;当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,生成用于进行分析和调试的异常描述信息,通过比较第一渲染结果和第二渲染结果,可以自动识别出被测显卡第一渲染结果异常并将所述第一渲染结果的异常描述信息展示在显示器界面上或者保存为内存数据或本地文件,以便后续进一步的详细分析和调试,提升了渲染结果分析的易操作性、实时性和连续性。19.对于图3所示的技术方案,在一些可能的实现方式中,对于s301所述在应用程序执行过程中,记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,包括:应用程序执行时调用经hook处理的第一图形api函数并执行所述第一图形api函数的功能;将所述第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息写入本地trace文件。20.对于上述实现方式,所述应用程序执行时调用经hook处理的第一图形api函数并执行所述第一图形api函数的功能,在一些示例中,在应用程序启动前预先对图形api函数进行hook处理,包括:将hook代码注入到要执行的进程和变更函数指针地址;对经hook处理的第一图形api函数划定跟踪范围并加入记录跟踪代码;将所述第一图形api函数生成动态链接库;在应用程序启动前预加载所述动态链接库。21.需要说明的是,为了便于描述,经hook处理的图形api函数或者封装在动态链接库中的图形api函数,也可称之为第一图形api函数,真实函数库中的图形api函数也可称之为第二图形api函数,其中,第一图形api函数可以是第二图形api函数的部分或全部函数。22.对于上述示例,具体来说,所述hook直译就是“钩子”的意思,是指截获进程对某个api函数的调用,使得api的执行流程转向实现的代码片段,从而实现所需要的功能,所述功能可以是监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理、修复系统漏洞,也可以是劫持或者其他恶意行为。所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。钩子的种类很多,每种钩子可以截获相应的消息,如键盘钩子可以截获键盘消息;外壳钩子可以截取、启动和关闭应用程序的消息。钩子还可以分为线程钩子和系统钩子,线程钩子可以监视指定线程的事件消息,系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库中;而对于线程钩子来说,钩子函数可以在动态链接库之中实现,也可以在相应的应用程序之中实现。为了方便描述期间,本发明实施例钩子函数以在动态链接库中实现为例。一般来说,linux下hook的方式有ld_preload劫持so文件、ptraceapi调试技术hook、plt重定向劫持hook;关于ld_preload劫持so文件通过控制linux下的动态链接的环境变量ld_preload来决定应用程序调用图形api函数时需要执行的so文件;关于ptraceapi调试技术hook,ptrace可以实现调试程序跟踪,但是一个进程只能被一个进程跟踪;关于plt重定向劫持hook主要是利用可执行和链接格式(executableandlinkingformat,elf)文件的全局偏移表(globaloffsettable,got)和程序链接表(procedurelinktable,plt)的方式解决地址无关的链接so文件的机制,在第一次调用前,got里是plt的地址,一般在调用之后got里会写入函数库的真实地址。23.本发明实施例以采用ld_preload劫持so文件方式实现所述hook处理,在应用程序运行前需要使用ld_preload预加载所述动态链接库。具体实施方式为,例如经hook处理过的第一图形api函数封装生成的动态链接库假定命名为hookgl.so,真实函数库中的第二图形api函数命名为gl.so,可以在linux命令行输入如下命令进行加载动态链接库hookgl.so:exportld_preload="./hookgl.so"对于上述实现方式,将所述第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息写入本地trace文件。具体来说,结合前述采用ld_preload方式预加载所述动态连接库的实施方式,在应用程序启动前还需要注入生成trace的代码,此操作可以在对图形api函数进行hook处理时一并处理,例如,可以把下面代码分别加在调试代码的起始位置和终止位置debug.startmethodtracing(“wirelessqa”);//开始记录debug.stopmethodtracing();//结束记录其中参数wirelessqa是要创建的trace文件的名称,wirelessqa.trace。默认路径是/sdcard/wirelessqa.trace,也可以指定路径/data/log/wirelessqa,表示trace文件在/data/log/wirelessqa.trace路径下。24.假定在要执行的应用程序命名为myapp,该应用程序是用于使用gpu绘制一个三角形,所述的第一图形api函数即为绘制一个三角形需要的各种函数,例如顶点函数glvertex3f、光照函数gllightfv、材质函数glmaterialfv以及颜色函数glcolor3f等,可以在linux命令行输入如下命令调用要执行的应用程序myapp:./myapp应用程序myapp执行过程中,结合图2,动态链接库中的第一图形api函数具体可以表现为图2中虚线框所示的hook模块12,真实函数库中的第二图形api函数则可以表现为图2中的图形api13;当执行到绘制三角形的图形api函数时,则直接调用动态链接库hookgl.so中经hook处理过的第一图形api函数,并且将调用到的第一图形api函数调用顺序、上下文参数信息、函数执行耗时、每个函数的时间戳信息通过操作系统内核中自带的跟踪器或专门的跟踪软件写入本地trace文件。此外,对于s301步骤可以调用真实函数库中的第二图形api函数生成渲染结果,也可以不调用真实函数库中的第二图形api函数,仅调用动态链接库中封装的第一图形api函数生成trace文件。25.需要说明的是,对于操作系统内核中自带的跟踪器,例如function跟踪器、function_graph跟踪器和sched_switch跟踪器,启动跟踪前需要进行跟踪相应的设置,关于function跟踪器可以跟踪内核函数的执行情况,可以通过文件set_ftrace_filter显示指定要跟踪的函数;关于function_graph跟踪器可以显示类似c源码的函数调用关系图,可以通过文件set_grapch_function显示指定要生成调用流程图的函数;关于sched_switch跟踪器可以对内核中的进程调度活动进行跟踪。而对于上述各跟踪器的生成文件,有些是各种跟踪器共享使用的,有些是特定于某个跟踪器使用的。在操作这些数据文件时,使用echo命令来修改其值,也可以在应用程序中通过文件读写相关的函数来操作这些文件的值。例如:current_tracer文件用于设置或显示当前使用的跟踪器;使用echo命令将跟踪器名字写入该文件可以切换到不同的跟踪器。系统启动后,其缺省值为nop,即不做任何跟踪操作;在执行完一段跟踪任务后,可以通过向该文件写入nop来重置跟踪器;trace文件提供了查看获取到的跟踪信息的接口,可以通过cat等命令查看该文件以查看跟踪到的内核活动记录,也可以将其内容保存为记录文件以备后续查看;set_graph_function文件设置要清晰显示调用关系的函数,显示的信息结构类似于c语言代码,这样在分析内核运作流程时会更加直观一些,缺省为对所有函数都生成调用关系序列,可以通过写该文件来指定需要特别关注的函数。26.对于图3所示的技术方案,在一些示例中,对于s302所述通过被测显卡与标准显卡分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果与第二渲染结果,包括:在被测显卡上回放所述trace文件,通过执行应用程序,根据所述trace文件中记录的第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,调用真实函数库中与第一图形api函数相对应的第二图形api函数进行渲染,获取到第一渲染结果;在标准显卡上回放所述trace文件,通过执行应用程序,根据所述trace文件中记录的第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,调用真实函数库中与第一图形api函数相对应的第二图形api函数进行渲染,获取到第二渲染结果。27.需要说明的是,对于s302所示的步骤,在被测显卡和标准显卡上回放所述trace文件时,基于应用程序的函数调用,调用到trace文件中记录的第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,然后调用真实函数库中第二图形api函数对应生成第一渲染结果与第二渲染结果,结合图2,具体图形api函数调用顺序参见图2中hook模块12与图形api13之间的实线箭头。28.在一些示例中,所述通过被测显卡与标准显卡分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果与第二渲染结果,还包括:获取被测显卡和标准显卡的第一渲染结果和第二渲染结果并保存为内存数据或本地文件;获取被测显卡和标准显卡的实时的渲染状态;其中所述渲染状态包括opengl的状态机信息或被测显卡的私有信息。29.需要说明的是,标准显卡也可以称之为参照显卡,在标准显卡上渲染的图像可以认为是正确的,把其作为参照显卡,用于判断被测显卡渲染的图像是否正确。在一些示例中,所述获取被测显卡和标准显卡的实时的渲染状态,其中所述渲染状态包括opengl的状态机信息或被测显卡的私有信息,具体来说,渲染状态可以是显卡全局总量、当前使用大小、当前视口描述符地址、视口大小、视口深度、帧缓冲个数、帧缓冲尺寸大小等信息。30.对于图3所示的技术方案,在一些示例中,对于s303当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,并生成用于进行分析和调试的异常描述信息。可以理解为,基于s302步骤生成的第一渲染结果与第二渲染结果,分别选取同一帧像素数据的红色、绿色、蓝色、α分量,即像素的rgba四个分量作为比较参数,比较第一渲染结果和第二渲染在同一位置上的像素值是否一致,原则上回放trace同一帧的渲染效果在被测显卡和标准显卡上应该完全一样,当两者的渲染结果存在不一致且差异超出限定范围则判定被测显卡渲染结果为异常。具体包括:逐像素比较被测显卡渲染的第一渲染结果和标准显卡渲染的第二渲染结果,若相同,则切换测试应用程序或做下一帧的分析;逐像素比较被测显卡渲染的第一渲染结果和标准显卡渲染的第二渲染结果,若不相同,则:确定被测显卡第一渲染结果渲染异常发生时的调用帧;根据所述调用帧获取到被测显卡第一渲染结果的渲染状态和异常描述信息;将所述渲染状态和异常描述信息保存为本地文件或展示在显示器界面上。31.在一些示例中,当逐像素比较被测显卡渲染的第一渲染结果和标准显卡渲染的第二渲染结果存在异常时,可选地,也可以随时暂停运行的应用程序,在显示器上展示被测显卡渲染状态和异常描述信息并保存为本地文件,其中,所述异常描述信息至少包括渲染异常点信息、无渲染结果、渲染图形畸变、渲染图形颜色异常、渲染图形像素丢失以及被测显卡的上下文参数信息,以便后续做进一步的详细分析和调试;可选地,还可以反复复演,以解决由于应用程序中某些变量随机导致的异常并且难以复现的问题。32.对于图3所示的技术方案,在一些示例中,gpu要实现图形渲染需要借助于图形渲染管线,目前图形渲染管线包括固定管线和可编程管线,两者都属于一种通过级联形成的逻辑结构,各级也可称为各渲染阶段。当前主要采用可编程管线。如图4所示,其示出了本发明实施例提供的绘制三角形的渲染流程图400,一般分为顶点处理、图元装配、光栅化、片段着色以及测试与混合五个步骤。具体操作步骤为:s401:顶点处理,即为在顶点着色器中确定渲染三角形的顶点位置;s402:图元装配,即在图元装配阶段确定渲染的图元类型为三角形;s403:光栅化,即为把图形转变为屏幕像素点;s404:片段着色,即片段着色器为图形中的每个像素进行着色;s405:测试与混合,即为检测片段中每个像素的深度值来确定像素要不要被丢弃,另外还会检测α(alpha)值,对颜色值进行混合。33.根据图3所示技术方案,结合图4使用gpu绘制三角形的渲染流程图,参见图5,其示出了本发明实施例提供的一种显卡渲染结果分析的详细操作流程图500,具体描述采用显卡渲染结果分析方法的实施方式。详细的实施方式操作步骤如下:s501:启动显卡渲染分析装置的软件;s502:选择需要执行的应用程序;例如,需要执行的应用程序为绘制一个三角形,如前述假定该应用程序命名为myapp。34.s503:运行应用程序;对于上述绘制三角形的应用程序,可以在linux命令行输入如下命令调用要执行的应用程序myapp:./myapp应用程序myapp执行过程中,当执行到绘制三角形的图形api函数时,则直接调用动态链接库hookgl.so中经hook处理过的第一图形api函数,然后调用真实函数库gl.so中的第二图形api函数,获取到渲染结果。在一些示例中,此步骤也可以不调用真实函数库gl.so中的第二图形api函数,即不获取渲染结果,只调用动态链接库hookgl.so中的第一图形api函数,执行第一图形api函数的操作并且在应用程序执行过程中调用操作系统自带的跟踪器,为后续的步骤生成trace文件。35.s504:生成trace文件;在应用程序启动前,需要限定跟踪的范围,在代码中写入跟踪的方法,具体代码实现方式见前述内容,跟踪期间所有的第一图形api函数调用顺序以及各图形api函数在调用时所使用的上下文参数信息记录在trace文件中。36.需要说明的是,所述生成trace文件,即是将经hook处理的第一图形api函数调用以及各图形api函数在调用时所使用的上下文参数信息写入本地trace文件,可以是绘制三角形时的具体步骤对应要执行的函数调用以及上下文参数信息,例如s401顶点处理步骤对应的顶点处理glvertex3f函数的调用,在应用程序执行时将调用到的glvertex3f函数调用、上下文参数信息、glvertex3f函数执行耗时以及每个函数的时间戳信息通过操作系统内核中自带的跟踪器或专门的跟踪软件例如google提供的代码调试工具traceview和dmtracedump工具写入本地trace文件。37.s505:回放trace文件;如前述trace文件提供了查看获取到的跟踪信息的接口,可以通过cat等命令或利用工具查看该文件以查看跟踪到的内核活动记录,例如利用工具traceview打开trace文件linux下执行命令:ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ./traceviewwirelessqa.trace另外,也可以将其内容保存为记录文件,在应用程序执行过程中通过文件读写来操作trace文件的值,从而调用trace文件中的图形api函数调用以及各图形api函数在调用时所使用的上下文参数信息获取到渲染结果,本发明实施例采用应用程序调用回放trace文件记录的内容。38.s506:在被测显卡上调用应用程序;在被测显卡上通过应用程序的调用,调用到所述trace文件中记录的第一图形api函数调用顺序以及各图形api函数在调用时所使用的上下文参数信息并且调用真实函数库中的第二图形api函数获取到第一渲染结果。39.s507:在标准显卡上调用应用程序;在标准显卡上通过应用程序的调用,调用到所述trace文件中记录的第一图形api函数调用顺序以及各图形api函数在调用时所使用的上下文参数信息并且调用真实函数库中的第二图形api函数获取到第二渲染结果。40.s508:获取渲染结果,即获取被测显卡渲染的第一渲染结果和标准显卡渲染的第二渲染结果;s509:逐像素比较第一渲染结果和第二渲染结果渲染差异;将像素的rgba分量作为比较参数,针对同一帧trace在被测显卡和标准显卡渲染得到的第一渲染结果和第二渲染结果同一位置的像素值进行比较。41.s510:判断第一渲染结果和第二渲染结果是否存在差异,若存在差异,跳转至步骤s511;若不存在差异,跳转至步骤s512;如s509步骤逐像素比较第一渲染结果和第二渲染结果渲染差异,如果两者的渲染结果存在差异且差异超出限定范围则认定为被测显卡渲染结果异常。可以把渲染异常时的渲染状态和异常描述信息保存为本地文件或展示在显示器界面上,以便于后续做详细的分析和调试。42.s511:获取显卡当前渲染状态做详细分析;基于前述保存的被测显卡渲染异常时的渲染状态和异常描述信息,排查gpu相应处理模块进行分析与调试。例如,逐像素比较第一渲染结果和第二渲染结果中异常点的调用帧后,如果渲染的三角形错位,则说明被测显卡中的顶点着色器处理顶点存在问题,具体为输出的顶点位置异常;如果渲染的三角形颜色存在差异,则问题可能存在于片段着色阶段,具体为片段着色器处理颜色存在异常;如果三角形存在丢失或者缺块,则说明在做测试与融合时出现了异常。43.s512:切换测试程序或做下一帧的分析。44.当逐像素比较第一渲染结果和第二渲染结果均相同时,即被测显卡和标准显卡渲染结果一致,则切换测试程序或做下一帧的分析。45.结合图3所述的技术方案和图5所述的详细操作流程图,可知图5中步骤s501至s504对应图3的步骤s301,图5中步骤s505至s508对应图3的步骤s302,图5中步骤s509至s512对应图3的步骤s303。46.基于前述技术方案相同的发明构思,参见图6,其示出了一种显卡渲染结果分析装置600,所述装置600包括:记录部分601、渲染部分602和确定部分603;其中,所述记录部分601,经配置为在应用程序执行过程中,记录图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息;所述渲染部分602,经配置为通过被测显卡与标准显卡分别按照所记录的图形api函数的调用顺序,根据各图形api函数在调用时所使用的上下文参数信息相应调用图形api函数,对应生成第一渲染结果与第二渲染结果;所述确定部分603,经配置为当所述第一渲染结果与所述第二渲染结果之间的差异满足设定的判定条件,确定所述被测显卡异常,并生成用于进行分析和调试的异常描述信息。47.对于上述技术方案,在一些示例中,所述记录部分601,还经配置为:应用程序执行时调用经hook处理的第一图形api函数并执行所述第一图形api函数的功能;将所述第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息写入本地trace文件。48.对于上述技术方案,在一些示例中,所述渲染部分602,还经配置为:在被测显卡上回放所述trace文件,通过执行应用程序,根据所述trace文件中记录的第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,调用真实函数库中与第一图形api函数相对应的第二图形api函数进行渲染,获取到第一渲染结果;在标准显卡上回放所述trace文件,通过执行应用程序,根据所述trace文件中记录的第一图形api函数的调用顺序以及各图形api函数在调用时所使用的上下文参数信息,调用真实函数库中与第一图形api函数相对应的第二图形api函数进行渲染,获取到第二渲染结果。49.对于上述技术方案,在一些示例中,所述渲染部分602,还经配置为:获取被测显卡和标准显卡的第一渲染结果和第二渲染结果并保存为内存数据或本地文件;获取被测显卡和标准显卡的实时的渲染状态;其中所述渲染状态包括opengl的状态机信息或被测显卡的私有信息。50.对于上述技术方案,在一些示例中,所述确定部分603,还经配置为:逐像素比较被测显卡渲染的第一渲染结果和标准显卡渲染的第二渲染结果,若相同,则切换测试应用程序或做下一帧的分析;逐像素比较被测显卡渲染的第一渲染结果和标准显卡渲染的第二渲染结果,若不相同,则:确定被测显卡第一渲染结果渲染异常发生时的调用帧;根据所述调用帧获取到被测显卡第一渲染结果的渲染状态和异常描述信息;将所述渲染状态和异常描述信息保存为本地文件或展示在显示器界面上。51.对于上述技术方案,在一些示例中,所述确定部分603,还经配置为:所述异常描述信息至少包括渲染异常点信息、无渲染结果、渲染图形畸变、渲染图形颜色异常、渲染图形像素丢失以及被测显卡的上下文参数信息。52.对于上述技术方案,在一些示例中,所述记录部分601,还经配置为:将hook代码注入到要执行的进程和变更函数指针地址;对经hook处理的第一图形api函数划定跟踪范围并加入记录跟踪代码;将所述第一图形api函数生成动态链接库;在应用程序启动前预加载所述动态链接库。53.可以理解地,上述显卡渲染结果分析装置600的示例性技术方案,与前述一种显卡渲染结果分析方法的技术方案属于同一构思,因此,上述显卡渲染结果分析装置600的技术方案未详细描述的细节内容,均可以参见前述一种显卡渲染结果分析方法的技术方案的描述。本发明实施例对此不做赘述。54.可以理解地,图3所示的技术方案及其示例既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现,本发明实施例是以软件功能模块的方式实现。如果以软件功能部分的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。因此,本实施例提供了一种计算机存储介质,所述计算机存储介质存储有显卡渲染分析的应用程序,所述应用程序被至少一个处理器执行时实现上述技术方案中所述显卡渲染结果分析方法的步骤。55.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12