[Mesa-dev] [PATCH 12/37] mesa: Refactor scissor rectangle setting even more

Ian Romanick idr at freedesktop.org
Fri Jan 17 17:03:32 PST 2014


From: Ian Romanick <ian.d.romanick at intel.com>

Create an internal function that just writes data into the scissor
rectangle.  In future patches this will see more use because we only
want to call dd_function_table::Scissor once after setting all of the
scissor rectangles instead of once per scissor rectangle.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
 src/mesa/main/scissor.c | 42 +++++++++++++++++++++++++++---------------
 1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/src/mesa/main/scissor.c b/src/mesa/main/scissor.c
index 7ec927e..cc4ce69 100644
--- a/src/mesa/main/scissor.c
+++ b/src/mesa/main/scissor.c
@@ -30,6 +30,31 @@
 
 
 /**
+ * Set scissor rectangle data directly in ScissorArray
+ *
+ * This is an internal function that performs no error checking on the
+ * supplied data.  It also does \b not call \c dd_function_table::Scissor.
+ *
+ * \sa _mesa_set_scissor
+ */
+static void
+set_scissor_no_notify(struct gl_context *ctx, unsigned idx,
+                      GLint x, GLint y, GLsizei width, GLsizei height)
+{
+   if (x == ctx->Scissor.ScissorArray[idx].X &&
+       y == ctx->Scissor.ScissorArray[idx].Y &&
+       width == ctx->Scissor.ScissorArray[idx].Width &&
+       height == ctx->Scissor.ScissorArray[idx].Height)
+      return;
+
+   FLUSH_VERTICES(ctx, _NEW_SCISSOR);
+   ctx->Scissor.ScissorArray[idx].X = x;
+   ctx->Scissor.ScissorArray[idx].Y = y;
+   ctx->Scissor.ScissorArray[idx].Width = width;
+   ctx->Scissor.ScissorArray[idx].Height = height;
+}
+
+/**
  * Called via glScissor
  */
 void GLAPIENTRY
@@ -66,17 +91,7 @@ void
 _mesa_set_scissor(struct gl_context *ctx, 
                   GLint x, GLint y, GLsizei width, GLsizei height)
 {
-   if (x == ctx->Scissor.ScissorArray[0].X &&
-       y == ctx->Scissor.ScissorArray[0].Y &&
-       width == ctx->Scissor.ScissorArray[0].Width &&
-       height == ctx->Scissor.ScissorArray[0].Height)
-      return;
-
-   FLUSH_VERTICES(ctx, _NEW_SCISSOR);
-   ctx->Scissor.ScissorArray[0].X = x;
-   ctx->Scissor.ScissorArray[0].Y = y;
-   ctx->Scissor.ScissorArray[0].Width = width;
-   ctx->Scissor.ScissorArray[0].Height = height;
+   set_scissor_no_notify(ctx, 0, x, y, width, height);
 
    if (ctx->Driver.Scissor)
       ctx->Driver.Scissor(ctx);
@@ -92,8 +107,5 @@ _mesa_init_scissor(struct gl_context *ctx)
 {
    /* Scissor group */
    ctx->Scissor.EnableFlags = GL_FALSE;
-   ctx->Scissor.ScissorArray[0].X = 0;
-   ctx->Scissor.ScissorArray[0].Y = 0;
-   ctx->Scissor.ScissorArray[0].Width = 0;
-   ctx->Scissor.ScissorArray[0].Height = 0;
+   set_scissor_no_notify(ctx, 0, 0, 0, 0, 0);
 }
-- 
1.8.1.4



More information about the mesa-dev mailing list