Browse Source

st/mesa: fix setting of point_size_per_vertex in ES contexts

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@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Cc: "11.1 11.2" <mesa-stable@lists.freedesktop.org>
tags/12.0-branchpoint
Ilia Mirkin 9 years ago
parent
commit
f2e7268a55
1 changed files with 18 additions and 2 deletions
  1. 18
    2
      src/mesa/state_tracker/st_atom_rasterizer.c

+ 18
- 2
src/mesa/state_tracker/st_atom_rasterizer.c View File

@@ -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 */

Loading…
Cancel
Save