2024年4月16日发(作者:)

OpenGL Benchmark

Benchmark是评测图形加速卡性能的重要工具。目前针对OpenGL/D3D的benchmark

非常地多。OpenGL的Benchmark大致可划分为三类:

 Spec的标准测试程序,glPerf3.12和Spec OPengl ViewPerf7.1a;

一些个人或公司完成的独立测试程序,oglbench,glexcess,DroneZMark,glMark;

基于Game的性能测试:QuakeIII,UT2003,aquad mark 2003,wolfstein,serious sam SE;

其中最主要的两个测试为:glViewPerf7.1a和QuakeIII。

目前来看,OpenGL benchmark的性能测试结果都是不完整的,它总是针对图形加速卡

的某个方面设计,同时这些测试程序都不能给出一些参数化的结果,目前还没有一个

OpenGL Benchmark能够和D3D的测试程序3D mark2000~2003系列相媲美。

1 已有测试程序分析

1.1 Spec OpenGL Viewperf

它完全是一个针对CAD应用程序类开发的OpenGL测试,针对每个CAD程序,抽取

一个最典型的3D Mesh,然后测试不同光照条件下的绘制速度和wireframe模式的绘制速度。

目前包含如下的CAD 3D模型:

3ds max

IBM's Data Explorer

Intergraph's DesignReview

LightScape;

Pro-E;

 Unigraphics V17

它的测试目标是针对真实应用程序做性能测试。这也是测试程序最基本的思路。事实上,

CAD应用程序为了能够具有最广泛的适用性和可移植性,它们都不使用OpenGL高版

本的扩展功能,从而使得应用程序无法充分利用图形加速卡的特性,大大降低了测试程

序的可信度。

OpenGL Spec Viewperf的主要测试内容:

我们可以认为Spec ViewPerf主要测试的内容是Transform & Lighting,三角形的数

目甚多,三角形的边长很小;

如果一个图形加速卡拥有更高的核心频率和更多的T&L(或VS),它将获得更高的分数;

光照计算

几何变换;

Flat-Shading

Smooth-shading;

Wire-frame Rendering;

简单纹理;

完全针对立即模式测试,immediate mode;

它的主要缺陷在于:

 不能充分利用OpenGL 1.3及其以上版本特性;(Vertex Program, Fragment

Program);

 不能检测图形加速卡的Fill Rate,而这些都是Game和Visualization以及Simulation

所必需的;

多纹理贴图,multi-texture;

多光照计算:8-光源(大部分图形加速卡支持一次8光源的计算);

Depth/Stencil/Alpha Test性能测试;

OpenGL Super Buffer Test(Similar to D3D’s Vertex Buffer/Index Buffer);

Vertex Program/Fragment Program/Shading Language Speed;

参考链接:

/gpc//opc_

1.2 Quake III

如果使用GLtrace对Quake III测试程序进行性能分析,我们发现QuakeIII的图元都是

通过glDrawElements完成的,同时每个图元包含1或者2个纹理;纹理的类型包含

GL_RGB,GL_RGBA和GL_*_S3TC。同时每个三角形的边长都比较大。根据对QuakeIII的

性能调整跟踪,大家修改GLtrace的源代码,就能够做性能优化跟踪了。具体方法我就不描

述了。我们发现,QuakeIII不需要做光照计算,同时仅仅设置简单的几何变换。

根据我在OpenGL 性能优化讲座中提到的测试结果表明,Quake III是一个极好的针对

FillRate进行测试的应用程序,将QuakeIII的分数x10M大致是这个显示卡的Pixel Fill

Rate。

缺陷:

对于速度特别快的图形加速卡,无法体现Vertex Shader和Multi-Pixel Shader的能力。

1.3 其他测试

目前大部分测试程序仅仅使用OpenGL 1.3及其一下版本的API,除Aqad Mark 2003

外,我们无法从这些测试程序中获得关于图形加速卡OpenGL 驱动更多的信息。下面

我将尝试探讨OPENGL Driver的性能测试的主要参数和架构。

2 OpenGL Benchmark 主要参数与内容

Quake III使用LightMap替代光照计算;

几何变换非常简单;

使用1~2纹理;

对于2个纹理使用相同的纹理坐标;

最多使用6个Texture对一个图元组作Multi-Pass Rendering;

对Depth Test使用GL_LEQUAL;

多数情况下使用Alpha Test和Alpha Blend;

使用glDrawElements绘制图元;

每帧大约20,000~40,000个三角形;

2.1 OpenGL BenchMark内容

我曾经在系列讲座的1/2/3种描述了OpenGL driver的体系结构和典型的OpenGL/D3D

硬件体系结构,事实上它们应该构成OpenGL Benchmark的核心内容。

由于OpenGL Immediate Mode仅仅能够测试,所有我们可以使用Immediate Mode 测试

OpenGL驱动程序的FFGP(Fixed Function Graphics Processing)功能和光照处理能力。

OpenGL Benchmark 的主要测试内容:

2.2 OpenGL benchmark参数

根据上面的分析,我们可以设定如下的测试参数:

FFGP (Immeidate Mode ):

Triangels/1Light/Second

Triangels/4Light/Second

Triangels/8Light/Second

Triangles/0 Lights/Second

Triangles/WireFrame/Second

Pxiel Fill Rate:

M Pixel /s for color buffer

M Pixel /s for Depth/Stencil buffer

Flat-shading/Smooth Shading

Alpha Belnding

OpenGL extension Detection;

Immediate Lighting: 1 lights, 4 lights/8 Lights;

Immediate Transform & Lighting: glDrawElements and WireFrame rendering;

Single performance Test for Color Buffer Filling,Depth Buffer Filling,Stencil Buffer

Filling,Pixel Fill Rate;

Flat-Shading/Smooth Shading;

Multi-Texture texture mapping;

Super Buffer Test;

Vertex Program Test;

Fragment Program Test;

OpenGL Shading Languages;

Super Buffer Test:

Triangels/1Light/Second

Triangels/4Light/Second

Triangels/8Light/Second

Triangles/0 Lights/Second

Triangles/WireFrame/Second

Multi-texture

Pixels/1 texture

Pixels/2 textures

Pixels/4 textures

Pixels/8 textures

Vertex Program:

Vertex Blend, Triangles/S

Fragment Program:

Per-pixel Normal, Pixel /s

Per-pixel Lighting, Pixel /s

Multi-Sample

Pixel /s

4 OpenGL Benchmark的功能

4.1 Multi-Display Resolution

4.2 Demo Mode Vs. Benchmark Mode

4.3 Pixel Format Selection

4.4 Extension support Detection

4.5 Reasonable Result reports

4.6 Avoid Driver Optimization for special Tests