mesa: Disable certain error checks when transform feedback is paused

When transform feedback is paused, it is legal to change programs or
to perform drawing operations using a drawing mode that doesn't match
the transform feedback mode.

Reviewed-by: Brian Paul <brianp@vmare.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Paul Berry
2011-12-21 11:03:11 -08:00
parent 08ce48733d
commit 87c7e5fb87
2 changed files with 5 additions and 3 deletions

View File

@@ -1436,7 +1436,7 @@ _mesa_UseProgramObjectARB(GLhandleARB program)
ASSERT_OUTSIDE_BEGIN_END(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx);
if (obj->Active) { if (obj->Active && !obj->Paused) {
_mesa_error(ctx, GL_INVALID_OPERATION, _mesa_error(ctx, GL_INVALID_OPERATION,
"glUseProgram(transform feedback active)"); "glUseProgram(transform feedback active)");
return; return;
@@ -1638,7 +1638,8 @@ _mesa_UseShaderProgramEXT(GLenum type, GLuint program)
return; return;
} }
if (ctx->TransformFeedback.CurrentObject->Active) { if (ctx->TransformFeedback.CurrentObject->Active &&
!ctx->TransformFeedback.CurrentObject->Paused) {
_mesa_error(ctx, GL_INVALID_OPERATION, _mesa_error(ctx, GL_INVALID_OPERATION,
"glUseShaderProgramEXT(transform feedback is active)"); "glUseShaderProgramEXT(transform feedback is active)");
return; return;

View File

@@ -98,7 +98,8 @@ reference_transform_feedback_object(struct gl_transform_feedback_object **ptr,
GLboolean GLboolean
_mesa_validate_primitive_mode(struct gl_context *ctx, GLenum mode) _mesa_validate_primitive_mode(struct gl_context *ctx, GLenum mode)
{ {
if (ctx->TransformFeedback.CurrentObject->Active) { if (ctx->TransformFeedback.CurrentObject->Active &&
!ctx->TransformFeedback.CurrentObject->Paused) {
switch (mode) { switch (mode) {
case GL_POINTS: case GL_POINTS:
return ctx->TransformFeedback.Mode == GL_POINTS; return ctx->TransformFeedback.Mode == GL_POINTS;