mesa: add clear() helper
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 26 Jun 2017 15:44:44 +0000 (17:44 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 28 Jun 2017 08:25:13 +0000 (10:25 +0200)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/mesa/main/clear.c

index 884cf986c704b73c9bc1cb1f4774d9f9990ecf65..1b07a756ee4e105f726b67079cbbba1a283e567a 100644 (file)
@@ -140,40 +140,36 @@ color_buffer_writes_enabled(const struct gl_context *ctx, unsigned idx)
  * GL_RENDER then requests the driver to clear the buffers, via the
  * dd_function_table::Clear callback.
  */
-void GLAPIENTRY
-_mesa_Clear( GLbitfield mask )
+static ALWAYS_INLINE void
+clear(struct gl_context *ctx, GLbitfield mask, bool no_error)
 {
-   GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
-
    FLUSH_CURRENT(ctx, 0);
 
-   if (MESA_VERBOSE & VERBOSE_API)
-      _mesa_debug(ctx, "glClear 0x%x\n", mask);
-
-   if (mask & ~(GL_COLOR_BUFFER_BIT |
-                GL_DEPTH_BUFFER_BIT |
-                GL_STENCIL_BUFFER_BIT |
-                GL_ACCUM_BUFFER_BIT)) {
-      /* invalid bit set */
-      _mesa_error( ctx, GL_INVALID_VALUE, "glClear(0x%x)", mask);
-      return;
-   }
+   if (!no_error) {
+      if (mask & ~(GL_COLOR_BUFFER_BIT |
+                   GL_DEPTH_BUFFER_BIT |
+                   GL_STENCIL_BUFFER_BIT |
+                   GL_ACCUM_BUFFER_BIT)) {
+         _mesa_error( ctx, GL_INVALID_VALUE, "glClear(0x%x)", mask);
+         return;
+      }
 
-   /* Accumulation buffers were removed in core contexts, and they never
-    * existed in OpenGL ES.
-    */
-   if ((mask & GL_ACCUM_BUFFER_BIT) != 0
-       && (ctx->API == API_OPENGL_CORE || _mesa_is_gles(ctx))) {
-      _mesa_error( ctx, GL_INVALID_VALUE, "glClear(GL_ACCUM_BUFFER_BIT)");
-      return;
+      /* Accumulation buffers were removed in core contexts, and they never
+       * existed in OpenGL ES.
+       */
+      if ((mask & GL_ACCUM_BUFFER_BIT) != 0
+          && (ctx->API == API_OPENGL_CORE || _mesa_is_gles(ctx))) {
+         _mesa_error( ctx, GL_INVALID_VALUE, "glClear(GL_ACCUM_BUFFER_BIT)");
+         return;
+      }
    }
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );       /* update _Xmin, etc */
    }
 
-   if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
       _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
                   "glClear(incomplete framebuffer)");
       return;
@@ -227,6 +223,18 @@ _mesa_Clear( GLbitfield mask )
 }
 
 
+void GLAPIENTRY
+_mesa_Clear(GLbitfield mask)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (MESA_VERBOSE & VERBOSE_API)
+      _mesa_debug(ctx, "glClear 0x%x\n", mask);
+
+   clear(ctx, mask, false);
+}
+
+
 /** Returned by make_color_buffer_mask() for errors */
 #define INVALID_MASK ~0x0U