Viewperf Issues
===============

This page lists known issues with `SPEC Viewperf
11 <https://www.spec.org/gwpg/gpc.static/vp11info.html>`__ and `SPEC
Viewperf 12 <https://www.spec.org/gwpg/gpc.static/vp12info.html>`__ when
running on Mesa-based drivers.

The Viewperf data sets are basically GL API traces that are recorded
from CAD applications, then replayed in the Viewperf framework.

The primary problem with these traces is they blindly use features and
OpenGL extensions that were supported by the OpenGL driver when the
trace was recorded, but there's no checks to see if those features are
supported by the driver when playing back the traces with Viewperf.

These issues have been reported to the SPEC organization in the hope
that they'll be fixed in the future.

Viewperf 11
-----------

Some of the Viewperf 11 tests use a lot of memory. At least 2GB of RAM
is recommended.

Catia-03 test 2
~~~~~~~~~~~~~~~

This test creates over 38000 vertex buffer objects. On some systems this
can exceed the maximum number of buffer allocations. Mesa generates
GL_OUT_OF_MEMORY errors in this situation, but Viewperf does no error
checking and continues. When this happens, some drawing commands become
no-ops. This can also eventually lead to a segfault either in Viewperf
or the Mesa driver.

Catia-03 tests 3, 4, 8
~~~~~~~~~~~~~~~~~~~~~~

These tests use features of the
`GL_NV_fragment_program2 <https://www.opengl.org/registry/specs/NV/fragment_program2.txt>`__
and
`GL_NV_vertex_program3 <https://www.opengl.org/registry/specs/NV/vertex_program3.txt>`__
extensions without checking if the driver supports them.

When Mesa tries to compile the vertex/fragment programs it generates
errors (which Viewperf ignores). Subsequent drawing calls become no-ops
and the rendering is incorrect.

sw-02 tests 1, 2, 4, 6
~~~~~~~~~~~~~~~~~~~~~~

These tests depend on the
`GL_NV_primitive_restart <https://www.opengl.org/registry/specs/NV/primitive_restart.txt>`__
extension.

If the Mesa driver doesn't support this extension the rendering will be
incorrect and the test will fail.

Also, the color of the line drawings in test 2 seem to appear in a
random color. This is probably due to some uninitialized state
somewhere.

sw-02 test 6
~~~~~~~~~~~~

The lines drawn in this test appear in a random color. That's because
texture mapping is enabled when the lines are drawn, but no texture
image is defined (glTexImage2D() is called with pixels=NULL). Since GL
says the contents of the texture image are undefined in that situation,
we get a random color.

Lightwave-01 test 3
~~~~~~~~~~~~~~~~~~~

This test uses a number of mipmapped textures, but the textures are
incomplete because the last/smallest mipmap level (1 x 1 pixel) is never
specified.

A trace captured with `API
trace <https://github.com/apitrace/apitrace>`__ shows this sequences of
calls like this:

::

   2504 glBindTexture(target = GL_TEXTURE_2D, texture = 55)
   2505 glTexImage2D(target = GL_TEXTURE_2D, level = 0, internalformat = GL_RGBA, width = 512, height = 512, border = 0, format = GL_RGB, type = GL_UNSIGNED_SHORT, pixels = blob(1572864))
   2506 glTexImage2D(target = GL_TEXTURE_2D, level = 1, internalformat = GL_RGBA, width = 256, height = 256, border = 0, format = GL_RGB, type = GL_UNSIGNED_SHORT, pixels = blob(393216))
   2507 glTexImage2D(target = GL_TEXTURE_2D, level = 2, internalformat = GL_RGBA, width = 128, height = 128, border = 0, format = GL_RGB, type = GL_UNSIGNED_SHORT, pixels = blob(98304))
   [...]
   2512 glTexImage2D(target = GL_TEXTURE_2D, level = 7, internalformat = GL_RGBA, width = 4, height = 4, border = 0, format = GL_RGB, type = GL_UNSIGNED_SHORT, pixels = blob(96))
   2513 glTexImage2D(target = GL_TEXTURE_2D, level = 8, internalformat = GL_RGBA, width = 2, height = 2, border = 0, format = GL_RGB, type = GL_UNSIGNED_SHORT, pixels = blob(24))
   2514 glTexParameteri(target = GL_TEXTURE_2D, pname = GL_TEXTURE_MIN_FILTER, param = GL_LINEAR_MIPMAP_LINEAR)
   2515 glTexParameteri(target = GL_TEXTURE_2D, pname = GL_TEXTURE_WRAP_S, param = GL_REPEAT)
   2516 glTexParameteri(target = GL_TEXTURE_2D, pname = GL_TEXTURE_WRAP_T, param = GL_REPEAT)
   2517 glTexParameteri(target = GL_TEXTURE_2D, pname = GL_TEXTURE_MAG_FILTER, param = GL_NEAREST)

Note that one would expect call 2514 to be glTexImage(level=9, width=1,
height=1) but it's not there.

The minification filter is GL_LINEAR_MIPMAP_LINEAR and the texture's
GL_TEXTURE_MAX_LEVEL is 1000 (the default) so a full mipmap is expected.

Later, these incomplete textures are bound before drawing calls.
According to the GL specification, if a fragment program or fragment
shader is being used, the sampler should return (0,0,0,1) ("black") when
sampling from an incomplete texture. This is what Mesa does and the
resulting rendering is darker than it should be.

It appears that NVIDIA's driver (and possibly AMD's driver) detects this
case and returns (1,1,1,1) (white) which causes the rendering to appear
brighter and match the reference image (however, AMD's rendering is
*much* brighter than NVIDIA's).

If the fallback texture created in \_mesa_get_fallback_texture() is
initialized to be full white instead of full black the rendering appears
correct. However, we have no plans to implement this work-around in
Mesa.

Maya-03 test 2
~~~~~~~~~~~~~~

This test makes some unusual calls to glRotate. For example:

.. code-block:: c

   glRotate(50, 50, 50, 1);
   glRotate(100, 100, 100, 1);
   glRotate(52, 52, 52, 1);

These unusual values lead to invalid modelview matrices. For example,
the last glRotate command above produces this matrix with Mesa:

.. math::

   \begin{matrix}
   1.08536 \times 10^{24} & 2.55321 \times 10^{-23} & -0.000160389         & 0\\
   5.96937 \times 10^{25} & 1.08536 \times 10^{24}  & 103408               & 0\\
                   103408 & -0.000160389            & 1.74755\times 10^{9} & 0\\
   0                      &                       0 &                      0 & nan
   \end{matrix}

and with NVIDIA's OpenGL:

.. math::

   \begin{matrix}
   1.4013 \times 10^{-45} &                      0 &                   -nan & 0\\
                        0 & 1.4013 \times 10^{-45} & 1.4013 \times 10^{-45} & 0\\
   1.4013 \times 10^{-45} &                   -nan & 1.4013 \times 10^{-45} & 0\\
                        0 &                      0 &                      0 & 1.4013 \times 10^{-45}
   \end{matrix}

This causes the object in question to be drawn in a strange orientation
and with a semi-random color (between white and black) since GL_FOG is
enabled.

Proe-05 test 1
~~~~~~~~~~~~~~

This uses depth testing but there's two problems:

#. The glXChooseFBConfig() call doesn't request a depth buffer
#. The test never calls glClear(GL_DEPTH_BUFFER_BIT) to initialize the
   depth buffer

If the chosen visual does not have a depth buffer, you'll see the
wireframe car model but it won't be rendered correctly.

If (by luck) the chosen visual has a depth buffer, its initial contents
will be undefined so you may or may not see parts of the model.

Interestingly, with NVIDIA's driver most visuals happen to have a depth
buffer and apparently the contents are initialized to 1.0 by default so
this test just happens to work with their drivers.

Finally, even if a depth buffer was requested and the
glClear(GL_COLOR_BUFFER_BIT) calls were changed to
glClear(GL_COLOR_BUFFER_BIT \| GL_DEPTH_BUFFER_BIT) the problem still
wouldn't be fixed because GL_DEPTH_WRITEMASK=GL_FALSE when glClear is
called so clearing the depth buffer would be a no-op anyway.

Proe-05 test 6
~~~~~~~~~~~~~~

This test draws an engine model with a two-pass algorithm. The first
pass is drawn with polygon stipple enabled. The second pass is drawn
without polygon stipple but with blending and GL_DEPTH_FUNC=GL_LEQUAL.
If either of the two passes happen to use a software fallback of some
sort, the Z values of fragments may be different between the two passes.
This leads to incorrect rendering.

For example, the VMware SVGA Gallium driver uses a special semi-fallback
path for drawing with polygon stipple. Since the two passes are rendered
with different vertex transformation implementations, the rendering
doesn't appear as expected. Setting the SVGA_FORCE_SWTNL environment
variable to 1 will force the driver to use the software vertex path all
the time and clears up this issue.

According to the OpenGL invariance rules, there's no guarantee that the
pixels produced by these two rendering states will match. To achieve
invariance, both passes should enable polygon stipple and blending with
appropriate patterns/modes to ensure the same fragments are produced in
both passes.

Viewperf 12
-----------

Note that Viewperf 12 only runs on 64-bit Windows 7 or later.

catia-04
~~~~~~~~

One of the catia tests calls wglGetProcAddress() to get some
GL_EXT_direct_state_access functions (such as glBindMultiTextureEXT) and
some GL_NV_half_float functions (such as glMultiTexCoord3hNV). If the
extension/function is not supported, wglGetProcAddress() can return
NULL. Unfortunately, Viewperf doesn't check for null pointers and
crashes when it later tries to use the pointer.

Another catia test uses OpenGL 3.1's primitive restart feature. But when
Viewperf creates an OpenGL context, it doesn't request version 3.1 If
the driver returns version 3.0 or earlier all the calls related to
primitive restart generate an OpenGL error. Some of the rendering is
then incorrect.

energy-01
~~~~~~~~~

This test creates a 3D luminance texture of size 1K x 1K x 1K. If the
OpenGL driver/device doesn't support a texture of this size the
glTexImage3D() call will fail with GL_INVALID_VALUE or GL_OUT_OF_MEMORY
and all that's rendered is plain white polygons. Ideally, the test would
use a proxy texture to determine the max 3D texture size. But it does
not do that.

maya-04
~~~~~~~

This test generates many GL_INVALID_OPERATION errors in its calls to
glUniform(). Causes include:

-  Trying to set float uniforms with glUniformi()
-  Trying to set float uniforms with glUniform3f()
-  Trying to set matrix uniforms with glUniform() instead of
   glUniformMatrix().

Apparently, the indexes returned by glGetUniformLocation() were
hard-coded into the application trace when it was created. Since
different implementations of glGetUniformLocation() may return different
values for any given uniform name, subsequent calls to glUniform() will
be invalid since they refer to the wrong uniform variables. This causes
many OpenGL errors and leads to incorrect rendering.

medical-01
~~~~~~~~~~

This test uses a single GLSL fragment shader which contains a GLSL 1.20
array initializer statement, but it neglects to specify ``#version 120``
at the top of the shader code. So, the shader does not compile and all
that's rendered is plain white polygons.

Also, the test tries to create a very large 3D texture that may exceed
the device driver's limit. When this happens, the glTexImage3D call
fails and all that's rendered is a white box.

showcase-01
~~~~~~~~~~~

This is actually a DX11 test based on Autodesk's Showcase product. As
such, it won't run with Mesa.
