summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-06-22 17:16:14 +0200
committerMarek Olšák <[email protected]>2017-06-27 18:45:07 +0200
commit984f7feeb49240716e98b9f11ee944481f00e568 (patch)
tree12be9590749927cae3dbbf3f5ba473e8bdf1886d
parentbcf5d5ce403acb05035c42f29cde0000bb7e5d00 (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.c19
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