mesa: Only check for a current vertex shader in core profile
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 11 Nov 2014 11:28:28 +0000 (11:28 +0000)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 15 Jan 2015 01:09:50 +0000 (17:09 -0800)
This doesn't affect performance, but it feels more correct.

On Bay Trail-D using Fedora 20 compile flags (-m64 -O2 -mtune=generic
for 64-bit and -m32 -march=i686 -mtune=atom for 32-bit), affects
Gl32Batch7:

32-bit: No difference proven at 95.0% confidence (n=120)
64-bit: No difference proven at 95.0% confidence (n=120)

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/main/api_validate.c

index 7d9893385828649568e97df830014d7a4ff20bc4..a93a67de1eafdf7a85ee2ca3b4954c2179922a89 100644 (file)
@@ -89,7 +89,19 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
          _mesa_error(ctx, GL_INVALID_OPERATION, "%s(no VAO bound)", function);
          return false;
       }
-      /* fallthrough */
+
+      /* Section 7.3 (Program Objects) of the OpenGL 4.5 Core Profile spec
+       * says:
+       *
+       *     "If there is no active program for the vertex or fragment shader
+       *     stages, the results of vertex and/or fragment processing will be
+       *     undefined. However, this is not an error."
+       *
+       * The fragment shader is not tested here because other state (e.g.,
+       * GL_RASTERIZER_DISCARD) affects whether or not we actually care.
+       */
+      return ctx->VertexProgram._Current != NULL;
+
    case API_OPENGL_COMPAT: {
       const struct gl_shader_program *const vsProg =
          ctx->_Shader->CurrentProgram[MESA_SHADER_VERTEX];