Browse Source

mesa: Reject ResumeTransformFeedback if the wrong program is bound.

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>
tags/mesa-10.1-devel
Kenneth Graunke 12 years ago
parent
commit
9cc74c93f8
1 changed files with 11 additions and 0 deletions
  1. 11
    0
      src/mesa/main/transformfeedback.c

+ 11
- 0
src/mesa/main/transformfeedback.c View 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;


Loading…
Cancel
Save