mesa: Do a draw time check for TES && !TCS in ES 3.x.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 2 Feb 2017 07:02:03 +0000 (23:02 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 13 Feb 2017 05:09:19 +0000 (21:09 -0800)
ES 3.x requires both TCS and TES to be present.  We already checked
the TCS && !TES case above, so we just have to check !TCS && TES here.

Note that this is allowed in OpenGL, just not ES.

This fixes a subcase of:
dEQP-GLES31.functional.debug.negative_coverage.*.tessellation.single_tessellation_stage

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
src/mesa/main/api_validate.c

index e7c439c431ae1f715e988371d9b61f94a74ac6c1..1e8a714067b6796586297c146958052acaea70c3 100644 (file)
@@ -264,6 +264,20 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
 
    switch (ctx->API) {
    case API_OPENGLES2:
+      /* Section 11.2 (Tessellation) of the ES 3.2 spec says:
+       *
+       * "An INVALID_OPERATION error is generated by any command that
+       *  transfers vertices to the GL if the current program state has
+       *  one but not both of a tessellation control shader and tessellation
+       *  evaluation shader."
+       */
+      if (_mesa_is_gles3(ctx) &&
+          ctx->TessEvalProgram._Current && !ctx->TessCtrlProgram._Current) {
+         _mesa_error(ctx, GL_INVALID_OPERATION,
+                     "%s(tess ctrl shader is missing)", function);
+         return false;
+      }
+
       /* For ES2, we can draw if we have a vertex program/shader). */
       return ctx->VertexProgram._Current != NULL;