mesa/st: remove redundant has_hw_atomics from st_context
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

has_hw_atomics is set when the fragment shader stage reports
non-zero max_hw_atomic_counters. Inline the same condition at
each call site.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13596
Reviewed-by: Marek Olšák <maraeo@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41184>
This commit is contained in:
Vishnu Vardan 2026-04-26 01:49:21 -04:00 committed by Marge Bot
parent f46aa24800
commit e824c30460
5 changed files with 10 additions and 12 deletions

View file

@ -70,7 +70,8 @@ st_bind_atomics(struct st_context *st, struct gl_program *prog,
{
unsigned i;
if (!prog || !st->pipe->set_shader_buffers || st->has_hw_atomics)
if (!prog || !st->pipe->set_shader_buffers ||
st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters != 0)
return;
/* For !has_hw_atomics, the atomic counters have been rewritten to be above
@ -141,7 +142,7 @@ st_bind_tes_atomics(struct st_context *st)
void
st_bind_cs_atomics(struct st_context *st)
{
if (st->has_hw_atomics) {
if (st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters != 0) {
st_bind_hw_atomic_buffers(st);
return;
}
@ -176,7 +177,7 @@ st_bind_hw_atomic_buffers(struct st_context *st)
int i;
unsigned count;
if (!st->has_hw_atomics)
if (st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters == 0)
return;
count = MIN2(st->ctx->Const.MaxAtomicBufferBindings, PIPE_MAX_HW_ATOMIC_BUFFERS);

View file

@ -79,7 +79,7 @@ st_bind_ssbos(struct st_context *st, struct gl_program *prog,
/* Clear out any stale shader buffers (or lowered atomic counters). */
int num_ssbos = prog->info.num_ssbos;
if (!st->has_hw_atomics)
if (st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters == 0)
num_ssbos += st->last_used_atomic_bindings[shader_type];
if (st->last_num_ssbos[shader_type] > num_ssbos) {
st->pipe->set_shader_buffers(

View file

@ -377,7 +377,7 @@ st_init_driver_flags(struct st_context *st)
struct gl_driver_flags *f = &st->ctx->DriverFlags;
/* Shader resources */
if (st->has_hw_atomics)
if (st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters != 0)
ST_SET_STATE2(f->NewAtomicBuffer, ST_NEW_HW_ATOMICS, ST_NEW_CS_ATOMICS);
else
ST_SET_SHADER_STATES(f->NewAtomicBuffer, ATOMICS);
@ -423,7 +423,8 @@ st_init_driver_flags(struct st_context *st)
ST_SET_SHADER_STATES(f->NewSamplersWithClamp, STATE);
}
if (!st->has_hw_atomics && st->ctx->Const.ShaderStorageBufferOffsetAlignment > 4)
if (st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters == 0
&& st->ctx->Const.ShaderStorageBufferOffsetAlignment > 4)
ST_SET_SHADER_STATES(f->NewAtomicBuffer, CONSTANTS);
}
@ -591,9 +592,6 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
break;
default: break;
}
st->has_hw_atomics =
screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters
? true : false;
util_throttle_init(&st->throttle,
screen->caps.max_texture_upload_memory_budget);

View file

@ -174,8 +174,6 @@ struct st_context
bool alpha_border_color_is_not_w;
bool draw_needs_minmax_index;
bool has_hw_atomics;
bool is_threaded_context;
/* driver supports scissored clears */

View file

@ -349,7 +349,8 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct gl_program *prog,
nir_remove_dead_variables(nir, nir_var_function_temp, NULL);
if (!st->has_hw_atomics && !screen->caps.nir_atomics_as_deref) {
if (st->screen->shader_caps[MESA_SHADER_FRAGMENT].max_hw_atomic_counters == 0
&& !screen->caps.nir_atomics_as_deref) {
unsigned align_offset_state = 0;
if (st->ctx->Const.ShaderStorageBufferOffsetAlignment > 4) {
struct gl_program_parameter_list *params = prog->Parameters;