[Mesa-dev] [PATCH 2/2] i965: Fix point size with tessellation/geometry shaders.

Ilia Mirkin imirkin at alum.mit.edu
Thu Jun 2 13:46:04 UTC 2016


I don't think that's right. Have a look at my st/Mesa patch which fixed the
same thing. The issue is that es2 always enables point size from shader, so
you need to apply that sort of logic. However on desktop, you still have to
respect the GL program point size setting.
On Jun 2, 2016 12:26 AM, "Kenneth Graunke" <kenneth at whitecape.org> wrote:

> 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-stable at lists.freedesktop.org>
> Signed-off-by: Kenneth Graunke <kenneth at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160602/cbf11cde/attachment.html>


More information about the mesa-dev mailing list