[Mesa-dev] [PATCH 12/14] mesa/vbo: add KHR_no_error support to vbo_exec_DrawArrays*()
Timothy Arceri
tarceri at itsqueeze.com
Wed Apr 19 00:37:29 UTC 2017
V2: add missing FLUSH_CURRENT() to no_error path
Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
src/mesa/vbo/vbo_exec_array.c | 49 ++++++++++++++++++++++++++++++++++---------
1 file changed, 39 insertions(+), 10 deletions(-)
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index 9452c65..a78edd3 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -616,22 +616,29 @@ vbo_exec_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
*/
static void GLAPIENTRY
vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count)
{
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_DRAW)
_mesa_debug(ctx, "glDrawArrays(%s, %d, %d)\n",
_mesa_enum_to_string(mode), start, count);
- if (!_mesa_validate_DrawArrays(ctx, mode, count))
- return;
+ if (_mesa_is_no_error_enabled(ctx)) {
+ FLUSH_CURRENT(ctx, 0);
+
+ if (ctx->NewState)
+ _mesa_update_state(ctx);
+ } else {
+ if (!_mesa_validate_DrawArrays(ctx, mode, count))
+ return;
+ }
if (0)
check_draw_arrays_data(ctx, start, count);
vbo_draw_arrays(ctx, mode, start, count, 1, 0);
if (0)
print_draw_arrays(ctx, mode, start, count);
}
@@ -643,23 +650,31 @@ vbo_exec_DrawArrays(GLenum mode, GLint start, GLsizei count)
static void GLAPIENTRY
vbo_exec_DrawArraysInstanced(GLenum mode, GLint start, GLsizei count,
GLsizei numInstances)
{
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_DRAW)
_mesa_debug(ctx, "glDrawArraysInstanced(%s, %d, %d, %d)\n",
_mesa_enum_to_string(mode), start, count, numInstances);
- if (!_mesa_validate_DrawArraysInstanced(ctx, mode, start, count,
- numInstances))
- return;
+
+ if (_mesa_is_no_error_enabled(ctx)) {
+ FLUSH_CURRENT(ctx, 0);
+
+ if (ctx->NewState)
+ _mesa_update_state(ctx);
+ } else {
+ if (!_mesa_validate_DrawArraysInstanced(ctx, mode, start, count,
+ numInstances))
+ return;
+ }
if (0)
check_draw_arrays_data(ctx, start, count);
vbo_draw_arrays(ctx, mode, start, count, numInstances, 0);
if (0)
print_draw_arrays(ctx, mode, start, count);
}
@@ -673,23 +688,30 @@ vbo_exec_DrawArraysInstancedBaseInstance(GLenum mode, GLint first,
GLuint baseInstance)
{
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_DRAW)
_mesa_debug(ctx,
"glDrawArraysInstancedBaseInstance(%s, %d, %d, %d, %d)\n",
_mesa_enum_to_string(mode), first, count,
numInstances, baseInstance);
- if (!_mesa_validate_DrawArraysInstanced(ctx, mode, first, count,
- numInstances))
- return;
+ if (_mesa_is_no_error_enabled(ctx)) {
+ FLUSH_CURRENT(ctx, 0);
+
+ if (ctx->NewState)
+ _mesa_update_state(ctx);
+ } else {
+ if (!_mesa_validate_DrawArraysInstanced(ctx, mode, first, count,
+ numInstances))
+ return;
+ }
if (0)
check_draw_arrays_data(ctx, first, count);
vbo_draw_arrays(ctx, mode, first, count, numInstances, baseInstance);
if (0)
print_draw_arrays(ctx, mode, first, count);
}
@@ -1519,22 +1541,29 @@ vbo_validated_multidrawelementsindirect(struct gl_context *ctx,
*/
static void GLAPIENTRY
vbo_exec_DrawArraysIndirect(GLenum mode, const GLvoid *indirect)
{
GET_CURRENT_CONTEXT(ctx);
if (MESA_VERBOSE & VERBOSE_DRAW)
_mesa_debug(ctx, "glDrawArraysIndirect(%s, %p)\n",
_mesa_enum_to_string(mode), indirect);
- if (!_mesa_validate_DrawArraysIndirect(ctx, mode, indirect))
- return;
+ if (_mesa_is_no_error_enabled(ctx)) {
+ FLUSH_CURRENT(ctx, 0);
+
+ if (ctx->NewState)
+ _mesa_update_state(ctx);
+ } else {
+ if (!_mesa_validate_DrawArraysIndirect(ctx, mode, indirect))
+ return;
+ }
if (skip_validated_draw(ctx))
return;
vbo_validated_drawarraysindirect(ctx, mode, indirect);
}
static void GLAPIENTRY
vbo_exec_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect)
--
2.9.3
More information about the mesa-dev
mailing list