mesa/st: Convert st_cb_readpixels to use st_context_invalidate_state

Replace CSO save/restore of atom-backed states with
st_context_invalidate_state(). Only stream outputs, render
condition, and pause queries (no atoms) still use CSO save/restore.

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40592>
This commit is contained in:
Christian Gmeiner 2026-03-25 22:49:21 +01:00 committed by Marge Bot
parent 4c2d41ddf3
commit d3b3bb69de

View file

@ -137,20 +137,10 @@ try_pbo_readpixels(struct st_context *st, struct gl_renderbuffer *rb,
if (!st_pbo_addresses_pixelstore(st, GL_TEXTURE_2D, false, pack, pixels, &addr))
return false;
cso_save_state(cso, (CSO_BIT_FRAGMENT_SAMPLERS |
CSO_BIT_BLEND |
CSO_BIT_VERTEX_ELEMENTS |
CSO_BIT_FRAMEBUFFER |
CSO_BIT_VIEWPORT |
CSO_BIT_RASTERIZER |
CSO_BIT_DEPTH_STENCIL_ALPHA |
CSO_BIT_STREAM_OUTPUTS |
/* Save only states that have no st_atom — they can't be re-derived. */
cso_save_state(cso, (CSO_BIT_STREAM_OUTPUTS |
(st->active_queries ? CSO_BIT_PAUSE_QUERIES : 0) |
CSO_BIT_SAMPLE_MASK |
CSO_BIT_MIN_SAMPLES |
CSO_BIT_RENDER_CONDITION |
CSO_BIT_MESH_SHADER |
CSO_BITS_VERTEX_PIPE_SHADERS));
CSO_BIT_RENDER_CONDITION));
cso_set_sample_mask(cso, ~0);
cso_set_min_samples(cso, 1);
@ -260,10 +250,27 @@ fail:
cso_restore_state(cso, CSO_UNBIND_FS_SAMPLERVIEWS | CSO_UNBIND_FS_IMAGE0);
st->state.num_sampler_views[MESA_SHADER_FRAGMENT] = 0;
st->ctx->Array.NewVertexElements = true;
ST_SET_STATE4(st->ctx->NewDriverState, ST_NEW_FS_CONSTANTS,
ST_NEW_FS_IMAGES, ST_NEW_FS_SAMPLER_VIEWS,
ST_NEW_VERTEX_ARRAYS);
/* Invalidate all states this meta-op modified. The atoms will
* re-derive them from GL state before the next draw.
*/
st_context_invalidate_state(st,
ST_INVALIDATE_FS_SAMPLERS |
ST_INVALIDATE_BLEND |
ST_INVALIDATE_VERTEX_BUFFERS |
ST_INVALIDATE_FB_STATE |
ST_INVALIDATE_VIEWPORT |
ST_INVALIDATE_RASTERIZER |
ST_INVALIDATE_DSA |
ST_INVALIDATE_SAMPLE_MASK |
ST_INVALIDATE_SAMPLE_SHADING |
ST_INVALIDATE_FS_CONSTBUF0 |
ST_INVALIDATE_FS_IMAGES |
ST_INVALIDATE_VS_STATE |
ST_INVALIDATE_FS_STATE |
ST_INVALIDATE_GS_STATE |
ST_INVALIDATE_TCS_STATE |
ST_INVALIDATE_TES_STATE |
ST_INVALIDATE_MESH_STATE);
return success;
}