On 14 December 2012 17:26, Ian Romanick <i...@freedesktop.org> wrote:
> On 12/14/2012 01:01 PM, Paul Berry wrote: > >> In GLES3, only glDrawArrays() and glDrawArraysInstanced() calls are >> allowed when transform feedback is active. >> --- >> src/mesa/main/api_validate.c | 45 ++++++++++++++++++++++++++++++** >> ++++++++++++++ >> 1 file changed, 45 insertions(+) >> >> diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c >> index e47db23..355a93c 100644 >> --- a/src/mesa/main/api_validate.c >> +++ b/src/mesa/main/api_validate.c >> @@ -313,9 +313,24 @@ _mesa_validate_DrawElements(**struct gl_context >> *ctx, >> GLenum mode, GLsizei count, GLenum type, >> const GLvoid *indices, GLint basevertex) >> { >> + struct gl_transform_feedback_object *xfb_obj >> + = ctx->TransformFeedback.**CurrentObject; >> ASSERT_OUTSIDE_BEGIN_END_WITH_**RETVAL(ctx, GL_FALSE); >> FLUSH_CURRENT(ctx, 0); >> >> + /* From the GLES3 specification, section 2.14.2 (Transform Feedback >> + * Primitive Capture): >> + * >> + * The error INVALID_OPERATION is also generated by DrawElements, >> + * DrawElementsInstanced, and DrawRangeElements while transform >> feedback >> + * is active and not paused, regardless of mode. >> + */ >> + if (_mesa_is_gles3(ctx) && xfb_obj->Active && !xfb_obj->Paused) { >> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^**^^^^^ > > It seems like this predicate appears in a bunch of places. May be an > is_active() macro to wrap it would be nice? That's a good point. It actually appears in a number of different files in various guises. I'll add a patch to the end of the series that makes an inline function for it. > > > + _mesa_error(ctx, GL_INVALID_OPERATION, >> + "glDrawElements(transform feedback active)"); >> + return GL_FALSE; >> + } >> + >> if (count <= 0) { >> if (count < 0) >> _mesa_error(ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); >> @@ -431,9 +446,24 @@ _mesa_validate_**DrawRangeElements(struct >> gl_context *ctx, GLenum mode, >> GLsizei count, GLenum type, >> const GLvoid *indices, GLint basevertex) >> { >> + struct gl_transform_feedback_object *xfb_obj >> + = ctx->TransformFeedback.**CurrentObject; >> ASSERT_OUTSIDE_BEGIN_END_WITH_**RETVAL(ctx, GL_FALSE); >> FLUSH_CURRENT(ctx, 0); >> >> + /* From the GLES3 specification, section 2.14.2 (Transform Feedback >> + * Primitive Capture): >> + * >> + * The error INVALID_OPERATION is also generated by DrawElements, >> + * DrawElementsInstanced, and DrawRangeElements while transform >> feedback >> + * is active and not paused, regardless of mode. >> + */ >> + if (_mesa_is_gles3(ctx) && xfb_obj->Active && !xfb_obj->Paused) { >> + _mesa_error(ctx, GL_INVALID_OPERATION, >> + "glDrawElements(transform feedback active)"); >> + return GL_FALSE; >> + } >> + >> if (count <= 0) { >> if (count < 0) >> _mesa_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements(count)" >> ); >> @@ -560,9 +590,24 @@ _mesa_validate_**DrawElementsInstanced(struct >> gl_context *ctx, >> const GLvoid *indices, GLsizei >> numInstances, >> GLint basevertex) >> { >> + struct gl_transform_feedback_object *xfb_obj >> + = ctx->TransformFeedback.**CurrentObject; >> ASSERT_OUTSIDE_BEGIN_END_WITH_**RETVAL(ctx, GL_FALSE); >> FLUSH_CURRENT(ctx, 0); >> >> + /* From the GLES3 specification, section 2.14.2 (Transform Feedback >> + * Primitive Capture): >> + * >> + * The error INVALID_OPERATION is also generated by DrawElements, >> + * DrawElementsInstanced, and DrawRangeElements while transform >> feedback >> + * is active and not paused, regardless of mode. >> + */ >> + if (_mesa_is_gles3(ctx) && xfb_obj->Active && !xfb_obj->Paused) { >> + _mesa_error(ctx, GL_INVALID_OPERATION, >> + "glDrawElements(transform feedback active)"); >> + return GL_FALSE; >> + } >> + >> if (count <= 0) { >> if (count < 0) >> _mesa_error(ctx, GL_INVALID_VALUE, >> >> >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev