diff options
author | Paul Berry <[email protected]> | 2011-12-21 11:03:11 -0800 |
---|---|---|
committer | Paul Berry <[email protected]> | 2011-12-23 09:43:18 -0800 |
commit | 87c7e5fb876bf280d8693ef3b0f4351b1d2eec3b (patch) | |
tree | 01eb8cd568607466ec00aedd47128ca5c15f2d0a /src | |
parent | 08ce48733d9441e1daa779027dbea1ce9964cc77 (diff) |
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 <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/main/shaderapi.c | 5 | ||||
-rw-r--r-- | src/mesa/main/transformfeedback.c | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index c4d01abc705..b71b44b705d 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -1436,7 +1436,7 @@ _mesa_UseProgramObjectARB(GLhandleARB program) ASSERT_OUTSIDE_BEGIN_END(ctx); - if (obj->Active) { + if (obj->Active && !obj->Paused) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUseProgram(transform feedback active)"); return; @@ -1638,7 +1638,8 @@ _mesa_UseShaderProgramEXT(GLenum type, GLuint program) return; } - if (ctx->TransformFeedback.CurrentObject->Active) { + if (ctx->TransformFeedback.CurrentObject->Active && + !ctx->TransformFeedback.CurrentObject->Paused) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUseShaderProgramEXT(transform feedback is active)"); return; diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c index fea711aa6e0..be0d0ff19a4 100644 --- a/src/mesa/main/transformfeedback.c +++ b/src/mesa/main/transformfeedback.c @@ -98,7 +98,8 @@ reference_transform_feedback_object(struct gl_transform_feedback_object **ptr, GLboolean _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) { case GL_POINTS: return ctx->TransformFeedback.Mode == GL_POINTS; |