mesa: Reject ResumeTransformFeedback if the wrong program is bound.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 6 Sep 2013 21:51:26 +0000 (14:51 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 12 Sep 2013 17:19:09 +0000 (10:19 -0700)
This is actually a pretty important error condition: otherwise, you
could set up transform feedback with one program, and resume it with
a program that generates a completely different set of outputs.

Fixes a subcase of Piglit's new ARB_transform_feedback2 api-errors test.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/main/transformfeedback.c

index c2c14a1d33948f1bcfa06d5ea48b0bde2910b487..191e88c8033800eb0413f846bd70489cdfbc9054 100644 (file)
@@ -943,6 +943,17 @@ _mesa_ResumeTransformFeedback(void)
       return;
    }
 
+   /* From the ARB_transform_feedback2 specification:
+    * "The error INVALID_OPERATION is generated by ResumeTransformFeedback if
+    *  the program object being used by the current transform feedback object
+    *  is not active."
+    */
+   if (obj->shader_program != ctx->Shader.CurrentVertexProgram) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glResumeTransformFeedback(wrong vertex program bound)");
+      return;
+   }
+
    FLUSH_VERTICES(ctx, 0);
    ctx->NewDriverState |= ctx->DriverFlags.NewTransformFeedback;