mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
mesa/st: Extend st_context_invalidate_state with meta-op flags
Add ST_INVALIDATE_* flags for all states that meta-operations (bitmap, clear, drawpixels, etc.) modify behind the state tracker's back. This enables meta-ops to use st_context_invalidate_state() instead of CSO save/restore for state re-derivation. The atoms already know how to re-derive Gallium state from GL context, so marking states dirty via st_context_invalidate_state() is sufficient - st_validate_state() will call the atoms before the next draw. 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:
parent
c4bd6bd590
commit
5d8b900369
2 changed files with 42 additions and 0 deletions
|
|
@ -99,6 +99,20 @@ enum st_attachment_type {
|
|||
#define ST_INVALIDATE_VS_CONSTBUF0 (1 << 2)
|
||||
#define ST_INVALIDATE_VERTEX_BUFFERS (1 << 3)
|
||||
#define ST_INVALIDATE_FB_STATE (1 << 4)
|
||||
#define ST_INVALIDATE_VIEWPORT (1 << 5)
|
||||
#define ST_INVALIDATE_VS_STATE (1 << 6)
|
||||
#define ST_INVALIDATE_GS_STATE (1 << 7)
|
||||
#define ST_INVALIDATE_TCS_STATE (1 << 8)
|
||||
#define ST_INVALIDATE_TES_STATE (1 << 9)
|
||||
#define ST_INVALIDATE_MESH_STATE (1 << 10)
|
||||
#define ST_INVALIDATE_RASTERIZER (1 << 11)
|
||||
#define ST_INVALIDATE_FS_SAMPLERS (1 << 12)
|
||||
#define ST_INVALIDATE_FS_STATE (1 << 13)
|
||||
#define ST_INVALIDATE_BLEND (1 << 14)
|
||||
#define ST_INVALIDATE_DSA (1 << 15)
|
||||
#define ST_INVALIDATE_SAMPLE_MASK (1 << 16)
|
||||
#define ST_INVALIDATE_SAMPLE_SHADING (1 << 17)
|
||||
#define ST_INVALIDATE_FS_IMAGES (1 << 18)
|
||||
|
||||
/**
|
||||
* Value to pipe_frontend_streen::get_param function.
|
||||
|
|
|
|||
|
|
@ -909,6 +909,34 @@ st_context_invalidate_state(struct st_context *st, unsigned flags)
|
|||
}
|
||||
if (flags & ST_INVALIDATE_FB_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_FB_STATE);
|
||||
if (flags & ST_INVALIDATE_VIEWPORT)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_VIEWPORT);
|
||||
if (flags & ST_INVALIDATE_VS_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_VS_STATE);
|
||||
if (flags & ST_INVALIDATE_GS_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_GS_STATE);
|
||||
if (flags & ST_INVALIDATE_TCS_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_TCS_STATE);
|
||||
if (flags & ST_INVALIDATE_TES_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_TES_STATE);
|
||||
if (flags & ST_INVALIDATE_MESH_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_MS_STATE);
|
||||
if (flags & ST_INVALIDATE_RASTERIZER)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_RASTERIZER);
|
||||
if (flags & ST_INVALIDATE_FS_SAMPLERS)
|
||||
ST_SET_STATE2(ctx->NewDriverState, ST_NEW_FS_SAMPLERS, ST_NEW_FS_SAMPLER_VIEWS);
|
||||
if (flags & ST_INVALIDATE_FS_STATE)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_FS_STATE);
|
||||
if (flags & ST_INVALIDATE_BLEND)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_BLEND);
|
||||
if (flags & ST_INVALIDATE_DSA)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_DSA);
|
||||
if (flags & ST_INVALIDATE_SAMPLE_MASK)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_SAMPLE_STATE);
|
||||
if (flags & ST_INVALIDATE_SAMPLE_SHADING)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_SAMPLE_SHADING);
|
||||
if (flags & ST_INVALIDATE_FS_IMAGES)
|
||||
ST_SET_STATE(ctx->NewDriverState, ST_NEW_FS_IMAGES);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue