From 89dd0888719ef781bf3fd4de2d552e1f16e7673c Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Mon, 2 Feb 2026 13:33:38 +0100 Subject: [PATCH] r600: refactor eg_setup_buffer_constants Signed-off-by: Patrick Lerda Part-of: --- src/gallium/drivers/r600/evergreen_compute.c | 2 +- src/gallium/drivers/r600/r600_pipe.c | 2 ++ src/gallium/drivers/r600/r600_pipe.h | 5 ++++- src/gallium/drivers/r600/r600_state_common.c | 23 ++++++-------------- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c index 2124709487a..6ead7afb97e 100644 --- a/src/gallium/drivers/r600/evergreen_compute.c +++ b/src/gallium/drivers/r600/evergreen_compute.c @@ -346,7 +346,7 @@ static void compute_emit_cs(struct r600_context *rctx, r600_need_cs_space(rctx, 0, true, global_atomic_count); if (need_buf_const) { - eg_setup_buffer_constants(rctx, MESA_SHADER_COMPUTE); + rctx->setup_buffer_constants(rctx, MESA_SHADER_COMPUTE); } r600_update_driver_const_buffers(rctx, true); diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 22c4c213ee4..895d8c43e70 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -181,6 +181,7 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, rctx->b.family == CHIP_RV710); rctx->b.r600_pre_eg_cbzs = CALLOC_STRUCT(r600_pre_eg_cbzs); + rctx->setup_buffer_constants = r600_setup_buffer_constants; break; case EVERGREEN: case CAYMAN: @@ -201,6 +202,7 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, rctx->append_fence = pipe_buffer_create(rctx->b.b.screen, PIPE_BIND_CUSTOM, PIPE_USAGE_DEFAULT, 32); + rctx->setup_buffer_constants = r600_palm_to_aruba_setup_buffer_constants; break; default: R600_ERR("Unsupported gfx level %d.\n", rctx->b.gfx_level); diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index c4e81ba3988..b2a9b08ca4c 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -612,6 +612,8 @@ struct r600_context { struct r600_scratch_buffer scratch_buffers[MAX2(R600_NUM_HW_STAGES, EG_NUM_HW_STAGES)]; + void (*setup_buffer_constants)(struct r600_context *rctx, int shader_type); + /* Debug state. */ bool is_debug; struct radeon_saved_cs last_gfx; @@ -1121,6 +1123,7 @@ void evergreen_emit_atomic_buffer_save(struct r600_context *rctx, const unsigned global_atomic_count); void r600_update_compressed_resource_state(struct r600_context *rctx, bool compute_only); -void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type); +void r600_palm_to_aruba_setup_buffer_constants(struct r600_context *rctx, int shader_type); +void r600_setup_buffer_constants(struct r600_context *rctx, int shader_type); void r600_update_driver_const_buffers(struct r600_context *rctx, bool compute_only); #endif diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 80b952a6cd6..2ce6589d712 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -1429,7 +1429,7 @@ static void *r600_alloc_buf_consts(struct r600_context *rctx, int shader_type, * We use a 6th constant to store the txq buffer size in * we use 7th slot for number of cube layers in a cube map array. */ -static void r600_setup_buffer_constants(struct r600_context *rctx, int shader_type) +void r600_setup_buffer_constants(struct r600_context *rctx, int shader_type) { struct r600_textures_info *samplers = &rctx->samplers[shader_type]; int bits; @@ -1480,7 +1480,7 @@ static void r600_setup_buffer_constants(struct r600_context *rctx, int shader_ty /* On evergreen we store one value * 1. number of cube layers in a cube map array. */ -void eg_setup_buffer_constants(struct r600_context *rctx, int shader_type) +void r600_palm_to_aruba_setup_buffer_constants(struct r600_context *rctx, int shader_type) { struct r600_textures_info *samplers = &rctx->samplers[shader_type]; struct r600_image_state *images = NULL; @@ -1994,30 +1994,21 @@ static bool r600_update_derived_state(struct r600_context *rctx) if (rctx->ps_shader) { need_buf_const = rctx->ps_shader->current->shader.uses_tex_buffers || rctx->ps_shader->current->shader.has_txq_cube_array_z_comp; if (need_buf_const) { - if (rctx->b.gfx_level < EVERGREEN) - r600_setup_buffer_constants(rctx, MESA_SHADER_FRAGMENT); - else - eg_setup_buffer_constants(rctx, MESA_SHADER_FRAGMENT); + rctx->setup_buffer_constants(rctx, MESA_SHADER_FRAGMENT); } } if (rctx->vs_shader) { need_buf_const = rctx->vs_shader->current->shader.uses_tex_buffers || rctx->vs_shader->current->shader.has_txq_cube_array_z_comp; if (need_buf_const) { - if (rctx->b.gfx_level < EVERGREEN) - r600_setup_buffer_constants(rctx, MESA_SHADER_VERTEX); - else - eg_setup_buffer_constants(rctx, MESA_SHADER_VERTEX); + rctx->setup_buffer_constants(rctx, MESA_SHADER_VERTEX); } } if (rctx->gs_shader) { need_buf_const = rctx->gs_shader->current->shader.uses_tex_buffers || rctx->gs_shader->current->shader.has_txq_cube_array_z_comp; if (need_buf_const) { - if (rctx->b.gfx_level < EVERGREEN) - r600_setup_buffer_constants(rctx, MESA_SHADER_GEOMETRY); - else - eg_setup_buffer_constants(rctx, MESA_SHADER_GEOMETRY); + rctx->setup_buffer_constants(rctx, MESA_SHADER_GEOMETRY); } } @@ -2026,13 +2017,13 @@ static bool r600_update_derived_state(struct r600_context *rctx) need_buf_const = rctx->tes_shader->current->shader.uses_tex_buffers || rctx->tes_shader->current->shader.has_txq_cube_array_z_comp; if (need_buf_const) { - eg_setup_buffer_constants(rctx, MESA_SHADER_TESS_EVAL); + rctx->setup_buffer_constants(rctx, MESA_SHADER_TESS_EVAL); } if (rctx->tcs_shader) { need_buf_const = rctx->tcs_shader->current->shader.uses_tex_buffers || rctx->tcs_shader->current->shader.has_txq_cube_array_z_comp; if (need_buf_const) { - eg_setup_buffer_constants(rctx, MESA_SHADER_TESS_CTRL); + rctx->setup_buffer_constants(rctx, MESA_SHADER_TESS_CTRL); } } }