[Mesa-dev] [PATCH] st/mesa: fix setting of point_size_per_vertex in ES contexts

Marek Olšák maraeo at gmail.com
Sun May 29 12:33:05 UTC 2016


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Sun, May 29, 2016 at 4:47 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> GL ES 2.0+ does not have a GL_PROGRAM_POINT_SIZE enable, unlike desktop
> GL. So we have to go and check the last pre-rasterizer stage to see
> whether it outputs a point size or not.
>
> This fixes a number of dEQP tests that use a geometry or tessellation
> shader to emit points primitives.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Cc: "11.1 11.2" <mesa-stable at lists.freedesktop.org>
> ---
>  src/mesa/state_tracker/st_atom_rasterizer.c | 20 ++++++++++++++++++--
>  1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
> index ed9deb0..ab5fa8f 100644
> --- a/src/mesa/state_tracker/st_atom_rasterizer.c
> +++ b/src/mesa/state_tracker/st_atom_rasterizer.c
> @@ -204,10 +204,24 @@ static void update_raster_state( struct st_context *st )
>              raster->point_size_per_vertex = TRUE;
>           }
>        }
> -      else if (ctx->VertexProgram.PointSizeEnabled) {
> -         /* user-defined program and GL_VERTEX_PROGRAM_POINT_SIZE set */
> +      else if (ctx->API != API_OPENGLES2) {
> +         /* PointSizeEnabled is always set in ES2 contexts */
>           raster->point_size_per_vertex = ctx->VertexProgram.PointSizeEnabled;
>        }
> +      else {
> +         /* ST_NEW_TESSEVAL_PROGRAM | ST_NEW_GEOMETRY_PROGRAM */
> +         /* We have to check the last bound stage and see if it writes psize */
> +         struct gl_program *last = NULL;
> +         if (ctx->GeometryProgram._Current)
> +            last = &ctx->GeometryProgram._Current->Base;
> +         else if (ctx->TessEvalProgram._Current)
> +            last = &ctx->TessEvalProgram._Current->Base;
> +         else if (ctx->VertexProgram._Current)
> +            last = &ctx->VertexProgram._Current->Base;
> +         if (last)
> +            raster->point_size_per_vertex =
> +               !!(last->OutputsWritten & BITFIELD64_BIT(VARYING_SLOT_PSIZ));
> +      }
>     }
>     if (!raster->point_size_per_vertex) {
>        /* clamp size now */
> @@ -293,6 +307,8 @@ const struct st_tracked_state st_update_rasterizer = {
>         _NEW_FRAG_CLAMP |
>         _NEW_TRANSFORM),     /* mesa state dependencies*/
>        (ST_NEW_VERTEX_PROGRAM |
> +       ST_NEW_TESSEVAL_PROGRAM |
> +       ST_NEW_GEOMETRY_PROGRAM |
>         ST_NEW_RASTERIZER),  /* state tracker dependencies */
>     },
>     update_raster_state     /* update function */
> --
> 2.7.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list