I believe we were using the state-based point size when either the tessellation evaluation or geometry shader, but the vertex shader didn't write it. If the last enabled stage writes it (corresponding to brw_vue_map_geom_out), we should use the shader's value, otherwise state. This should handle the Attenuated case as well, as the fixed-function shader will also write it.
Fixes a number of dEQP tests with EXT_tessellation_shader enabled: dEQP-GLES31.functional.tessellation_geometry_interaction.point_size.* Cc: "12.0" <mesa-sta...@lists.freedesktop.org> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/mesa/drivers/dri/i965/gen6_sf_state.c | 5 ++--- src/mesa/drivers/dri/i965/gen7_sf_state.c | 8 ++++---- src/mesa/drivers/dri/i965/gen8_sf_state.c | 8 ++++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c index 0538ab7..f35926e 100644 --- a/src/mesa/drivers/dri/i965/gen6_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c @@ -373,9 +373,8 @@ 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)) + /* BRW_NEW_VUE_MAP_GEOM_OUT */ + if ((brw->vue_map_geom_out.slots_valid & VARYING_BIT_PSIZ) == 0) dw4 |= GEN6_SF_USE_STATE_POINT_WIDTH; /* _NEW_POINT - Clamp to ARB_point_parameters user limits */ diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c b/src/mesa/drivers/dri/i965/gen7_sf_state.c index d3a658c..7957614 100644 --- a/src/mesa/drivers/dri/i965/gen7_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c @@ -213,8 +213,8 @@ 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)) + /* BRW_NEW_VUE_MAP_GEOM_OUT */ + if ((brw->vue_map_geom_out.slots_valid & VARYING_BIT_PSIZ) == 0) dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH; /* _NEW_POINT - Clamp to ARB_point_parameters user limits */ @@ -252,11 +252,11 @@ const struct brw_tracked_state gen7_sf_state = { _NEW_MULTISAMPLE | _NEW_POINT | _NEW_POLYGON | - _NEW_PROGRAM | _NEW_SCISSOR, .brw = BRW_NEW_BLORP | BRW_NEW_CONTEXT | - BRW_NEW_PRIMITIVE, + BRW_NEW_PRIMITIVE | + BRW_NEW_VUE_MAP_GEOM_OUT, }, .emit = upload_sf_state, }; diff --git a/src/mesa/drivers/dri/i965/gen8_sf_state.c b/src/mesa/drivers/dri/i965/gen8_sf_state.c index d854b6d..b22a5f0 100644 --- a/src/mesa/drivers/dri/i965/gen8_sf_state.c +++ b/src/mesa/drivers/dri/i965/gen8_sf_state.c @@ -172,8 +172,8 @@ upload_sf(struct brw_context *brw) /* 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)) + /* BRW_NEW_VUE_MAP_GEOM_OUT */ + if ((brw->vue_map_geom_out.slots_valid & VARYING_BIT_PSIZ) == 0) dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH; /* _NEW_POINT | _NEW_MULTISAMPLE */ @@ -204,12 +204,12 @@ upload_sf(struct brw_context *brw) const struct brw_tracked_state gen8_sf_state = { .dirty = { .mesa = _NEW_LIGHT | - _NEW_PROGRAM | _NEW_LINE | _NEW_MULTISAMPLE | _NEW_POINT, .brw = BRW_NEW_BLORP | - BRW_NEW_CONTEXT, + BRW_NEW_CONTEXT | + BRW_NEW_VUE_MAP_GEOM_OUT, }, .emit = upload_sf, }; -- 2.8.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev