[Mesa-dev] [PATCH] i965: Ignore glPointSize when GL_POINT_SIZE_ARRAY_OES is enabled

Plamena Manolova plamena.manolova at intel.com
Tue Mar 1 16:39:49 UTC 2016


When a user defines a point size array and enables it, the point
size value set via glPointSize should be ignored. To achieve this,
we can simply omit point size when creating a batch inside
upload_sf_state for brw, gen6, gen7 and gen8.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42187
Signed-off-by: Plamena Manolova <plamena.manolova at intel.com>
---
 src/mesa/drivers/dri/i965/brw_sf_state.c  | 19 +++++++++++--------
 src/mesa/drivers/dri/i965/gen6_sf_state.c | 23 +++++++++++++----------
 src/mesa/drivers/dri/i965/gen7_sf_state.c | 17 ++++++++++-------
 src/mesa/drivers/dri/i965/gen8_sf_state.c | 17 ++++++++++-------
 4 files changed, 44 insertions(+), 32 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c b/src/mesa/drivers/dri/i965/brw_sf_state.c
index b126f82..18504b1 100644
--- a/src/mesa/drivers/dri/i965/brw_sf_state.c
+++ b/src/mesa/drivers/dri/i965/brw_sf_state.c
@@ -259,15 +259,18 @@ static void upload_sf_unit( struct brw_context *brw )
 
    /* _NEW_POINT */
    sf->sf7.sprite_point = ctx->Point.PointSprite;
-   sf->sf7.point_size = CLAMP(rintf(CLAMP(ctx->Point.Size,
-                                          ctx->Point.MinSize,
-                                          ctx->Point.MaxSize)), 1.0f, 255.0f) *
-                        (1<<3);
-   /* _NEW_PROGRAM | _NEW_POINT */
-   sf->sf7.use_point_size_state = !(ctx->VertexProgram.PointSizeEnabled ||
-				    ctx->Point._Attenuated);
-   sf->sf7.aa_line_distance_mode = 0;
 
+   if (!ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled) {
+      sf->sf7.point_size = CLAMP(rintf(CLAMP(ctx->Point.Size,
+                                             ctx->Point.MinSize,
+                                             ctx->Point.MaxSize)),
+                                 1.0f, 255.0f) * (1<<3);
+      /* _NEW_PROGRAM | _NEW_POINT */
+      sf->sf7.use_point_size_state = !(ctx->VertexProgram.PointSizeEnabled ||
+         ctx->Point._Attenuated);
+   }
+
+   sf->sf7.aa_line_distance_mode = 0;
    /* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:
     * _NEW_LIGHT
     */
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c
index 2634e6b..d506a2b 100644
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c
@@ -406,16 +406,19 @@ upload_sf_state(struct brw_context *brw)
    if (multisampled_fbo && ctx->Multisample.Enabled)
       dw3 |= GEN6_SF_MSRAST_ON_PATTERN;
 
-   /* _NEW_PROGRAM | _NEW_POINT */
-   if (!(ctx->VertexProgram.PointSizeEnabled ||
-	 ctx->Point._Attenuated))
-      dw4 |= GEN6_SF_USE_STATE_POINT_WIDTH;
-
-   /* Clamp to ARB_point_parameters user limits */
-   point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize);
-
-   /* Clamp to the hardware limits and convert to fixed point */
-   dw4 |= U_FIXED(CLAMP(point_size, 0.125f, 255.875f), 3);
+   if (!ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled) {
+      /* _NEW_PROGRAM | _NEW_POINT */
+      if (!(ctx->VertexProgram.PointSizeEnabled ||
+         ctx->Point._Attenuated))
+         dw4 |= GEN6_SF_USE_STATE_POINT_WIDTH;
+
+      /* Clamp to ARB_point_parameters user limits */
+      point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize,
+                         ctx->Point.MaxSize);
+
+      /* Clamp to the hardware limits and convert to fixed point */
+      dw4 |= U_FIXED(CLAMP(point_size, 0.125f, 255.875f), 3);
+   }
 
    /*
     * Window coordinates in an FBO are inverted, which means point
diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c b/src/mesa/drivers/dri/i965/gen7_sf_state.c
index b1f13ac..a17e5a2 100644
--- a/src/mesa/drivers/dri/i965/gen7_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c
@@ -213,15 +213,18 @@ upload_sf_state(struct brw_context *brw)
 
    dw3 = GEN6_SF_LINE_AA_MODE_TRUE;
 
-   /* _NEW_PROGRAM | _NEW_POINT */
-   if (!(ctx->VertexProgram.PointSizeEnabled || ctx->Point._Attenuated))
-      dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH;
+   if (!ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled) {
+      /* _NEW_PROGRAM | _NEW_POINT */
+      if (!(ctx->VertexProgram.PointSizeEnabled || ctx->Point._Attenuated))
+         dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH;
 
-   /* Clamp to ARB_point_parameters user limits */
-   point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize);
+      /* Clamp to ARB_point_parameters user limits */
+      point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize,
+                         ctx->Point.MaxSize);
 
-   /* Clamp to the hardware limits and convert to fixed point */
-   dw3 |= U_FIXED(CLAMP(point_size, 0.125f, 255.875f), 3);
+      /* Clamp to the hardware limits and convert to fixed point */
+      dw3 |= U_FIXED(CLAMP(point_size, 0.125f, 255.875f), 3);
+   }
 
    /* _NEW_LIGHT */
    if (ctx->Light.ProvokingVertex != GL_FIRST_VERTEX_CONVENTION) {
diff --git a/src/mesa/drivers/dri/i965/gen8_sf_state.c b/src/mesa/drivers/dri/i965/gen8_sf_state.c
index 8b6f31f..0146383 100644
--- a/src/mesa/drivers/dri/i965/gen8_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_sf_state.c
@@ -167,15 +167,18 @@ upload_sf(struct brw_context *brw)
       dw2 |= GEN6_SF_LINE_END_CAP_WIDTH_1_0;
    }
 
-   /* Clamp to ARB_point_parameters user limits */
-   point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize);
+   if (!ctx->Array.VAO->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled) {
+      /* Clamp to ARB_point_parameters user limits */
+      point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize,
+                         ctx->Point.MaxSize);
 
-   /* Clamp to the hardware limits and convert to fixed point */
-   dw3 |= U_FIXED(CLAMP(point_size, 0.125f, 255.875f), 3);
+      /* Clamp to the hardware limits and convert to fixed point */
+      dw3 |= U_FIXED(CLAMP(point_size, 0.125f, 255.875f), 3);
 
-   /* _NEW_PROGRAM | _NEW_POINT */
-   if (!(ctx->VertexProgram.PointSizeEnabled || ctx->Point._Attenuated))
-      dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH;
+      /* _NEW_PROGRAM | _NEW_POINT */
+      if (!(ctx->VertexProgram.PointSizeEnabled || ctx->Point._Attenuated))
+         dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH;
+   }
 
    /* _NEW_POINT | _NEW_MULTISAMPLE */
    if ((ctx->Point.SmoothFlag || ctx->Multisample._Enabled) &&
-- 
2.4.3



More information about the mesa-dev mailing list