diff options
author | Marek Olšák <[email protected]> | 2017-06-22 17:16:14 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-06-27 18:45:07 +0200 |
commit | 984f7feeb49240716e98b9f11ee944481f00e568 (patch) | |
tree | 12be9590749927cae3dbbf3f5ba473e8bdf1886d | |
parent | bcf5d5ce403acb05035c42f29cde0000bb7e5d00 (diff) |
mesa: optimize GL_PRIMITIVE_RESTART_NV more
And other client state changes don't have to call
update_derived_primitive_restart_state.
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/mesa/main/enable.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 18a288d35c2..2e5fb009314 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -66,7 +66,6 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state) struct gl_vertex_array_object *vao = ctx->Array.VAO; GLbitfield64 flag; GLboolean *var; - uint64_t new_state = _NEW_ARRAY; switch (cap) { case GL_VERTEX_ARRAY: @@ -111,13 +110,15 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state) /* GL_NV_primitive_restart */ case GL_PRIMITIVE_RESTART_NV: - if (!ctx->Extensions.NV_primitive_restart) { + if (!ctx->Extensions.NV_primitive_restart) goto invalid_enum_error; - } - var = &ctx->Array.PrimitiveRestart; - flag = 0; - new_state = 0; /* primitive restart is not a vertex array state */ - break; + if (ctx->Array.PrimitiveRestart == state) + return; + + FLUSH_VERTICES(ctx, 0); + ctx->Array.PrimitiveRestart = state; + update_derived_primitive_restart_state(ctx); + return; default: goto invalid_enum_error; @@ -126,12 +127,10 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state) if (*var == state) return; - FLUSH_VERTICES(ctx, new_state); + FLUSH_VERTICES(ctx, _NEW_ARRAY); *var = state; - update_derived_primitive_restart_state(ctx); - if (state) vao->_Enabled |= flag; else |