diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index ec55e336ebb..f5ccced55bd 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -225,9 +225,11 @@ st_update_vp( struct st_context *st ) key.clip_negative_one_to_one = st->ctx->Transform.ClipDepthMode == GL_NEGATIVE_ONE_TO_ONE; - /* _NEW_POINT */ - key.lower_point_size = st->lower_point_size && - !st_point_size_per_vertex(st->ctx); + if (!st->ctx->GeometryProgram._Current) { + /* _NEW_POINT */ + key.lower_point_size = st->lower_point_size && + !st_point_size_per_vertex(st->ctx); + } /* _NEW_TRANSFORM */ if (st->lower_ucp && st_user_clip_planes_enabled(st->ctx) && diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index afd70ab1749..1faa87e433d 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -258,6 +258,10 @@ st_invalidate_state(struct gl_context *ctx) } } + /* Update the vertex shader if ctx->Point was changed. */ + if (st->lower_point_size && new_state & _NEW_POINT) + st->dirty |= ST_NEW_VS_STATE | ST_NEW_GS_STATE; + /* Which shaders are dirty will be determined manually. */ if (new_state & _NEW_PROGRAM) { st->gfx_shaders_may_be_dirty = true;