--- /dev/null
+<HTML>
+
+<TITLE>Viewperf Issues</TITLE>
+
+<link rel="stylesheet" type="text/css" href="mesa.css"></head>
+
+<BODY>
+
+<h1>Viewperf Issues</h1>
+
+<p>
+This page lists known issues with
+<a href="http://www.spec.org/gwpg/gpc.static/vp11info.html" target="_main">SPEC Viewperf 11</a>
+when running on Mesa-based drivers.
+</p>
+
+<p>
+The Viewperf data sets are basically GL API traces that are recorded from
+CAD applications, then replayed in the Viewperf framework.
+</p>
+
+<p>
+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.
+</p>
+
+<p>
+These issues have been reported to the SPEC organization in the hope that
+they'll be fixed in the future.
+</p>
+
+
+
+<h2>Catia-03 tests 3, 4, 8</h2>
+
+<p>
+These tests use features of the
+<a href="http://www.opengl.org/registry/specs/NV/fragment_program2.txt"
+target="_main">
+GL_NV_fragment_program2</a> and
+<a href="http://www.opengl.org/registry/specs/NV/vertex_program3.txt"
+target="_main">
+GL_NV_vertex_program3</a> extensions without checking if the driver supports
+them.
+</p>
+<p>
+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.
+</p>
+
+
+
+<h2>sw-02 tests 1, 2, 4</h2>
+
+<p>
+These tests depend on the
+<a href="http://www.opengl.org/registry/specs/NV/primitive_restart.txt"
+target="_main">GL_NV_primitive_restart</a> extension.
+</p>
+
+<p>
+If the Mesa driver doesn't support this extension the rendering will
+be incorrect and the test will fail.
+</p>
+
+
+<h2>Lightwave-01 test 3</h2>
+
+<p>
+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.
+</p>
+
+<p>
+A trace captured with
+<a href="https://github.com/apitrace/apitrace" target="_main">API trace</a>
+shows this sequences of calls like this:
+
+<pre>
+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)
+</pre>
+
+<p>
+Note that one would expect call 2514 to be glTexImage(level=9, width=1,
+height=1) but it's not there.
+</p>
+
+<p>
+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.
+</p>
+
+<p>
+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.
+</p>
+
+<p>
+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 <em>much</em>
+brighter than NVIDIA's).
+</p>
+
+<p>
+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.
+
+</p>
+
+
+</BODY>
+</HTML>