mesa/es3: Add support for GL_PRIMITIVE_RESTART_FIXED_INDEX
[mesa.git] / src / mesa / main / enable.c
index b48794f950b58e951897f16ab19826b71df208fc..73257290ed8c1fa6152b4eca8b21cad37f2ff640 100644 (file)
    }
 
 
+static void
+update_derived_primitive_restart_state(struct gl_context *ctx)
+{
+   /* Update derived primitive restart state.
+    */
+   if (ctx->Array.PrimitiveRestart)
+      ctx->Array._RestartIndex = ctx->Array.RestartIndex;
+   else
+      ctx->Array._RestartIndex = ~0;
+
+   ctx->Array._PrimitiveRestart = ctx->Array.PrimitiveRestart
+      || ctx->Array.PrimitiveRestartFixedIndex;
+}
+
 /**
  * Helper to enable/disable client-side state.
  */
@@ -119,6 +133,8 @@ client_state(struct gl_context *ctx, GLenum cap, GLboolean state)
 
    *var = state;
 
+   update_derived_primitive_restart_state(ctx);
+
    if (state)
       arrayObj->_Enabled |= flag;
    else
@@ -967,6 +983,17 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
          if (ctx->Array.PrimitiveRestart != state) {
             FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
             ctx->Array.PrimitiveRestart = state;
+            update_derived_primitive_restart_state(ctx);
+         }
+         break;
+
+      case GL_PRIMITIVE_RESTART_FIXED_INDEX:
+        if (!_mesa_is_gles3(ctx) && !ctx->Extensions.ARB_ES3_compatibility)
+            goto invalid_enum_error;
+         if (ctx->Array.PrimitiveRestartFixedIndex != state) {
+            FLUSH_VERTICES(ctx, _NEW_TRANSFORM);
+            ctx->Array.PrimitiveRestartFixedIndex = state;
+            update_derived_primitive_restart_state(ctx);
          }
          break;
 
@@ -1542,6 +1569,12 @@ _mesa_IsEnabled( GLenum cap )
          }
          return ctx->Array.PrimitiveRestart;
 
+      case GL_PRIMITIVE_RESTART_FIXED_INDEX:
+        if (!_mesa_is_gles3(ctx) && !ctx->Extensions.ARB_ES3_compatibility) {
+            goto invalid_enum_error;
+         }
+         return ctx->Array.PrimitiveRestartFixedIndex;
+
       /* GL3.0 - GL_framebuffer_sRGB */
       case GL_FRAMEBUFFER_SRGB_EXT:
          if (!_mesa_is_desktop_gl(ctx))