mesa/gles3: Generate error on DrawElements* calls if transform feedback active.
In GLES3, only glDrawArrays() and glDrawArraysInstanced() calls are allowed when transform feedback is active. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -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) {
|
||||
_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,
|
||||
|
||||
Reference in New Issue
Block a user