diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index a47da87f793..5aaea805875 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -752,13 +752,12 @@ static void si_set_shader_image_desc(struct si_context *ctx, const struct pipe_i } } - screen->make_texture_descriptor( - screen, tex, false, res->b.b.target, view->format, swizzle, view_level, view_level, - view->u.tex.first_layer, view->u.tex.last_layer, width, height, depth, false, - desc, fmask_desc); + si_make_texture_descriptor(screen, tex, false, res->b.b.target, view->format, swizzle, + view_level, view_level, view->u.tex.first_layer, + view->u.tex.last_layer, width, height, depth, false, desc, + fmask_desc); si_set_mutable_tex_desc_fields(screen, tex, &tex->surface.u.legacy.level[level], level, level, - util_format_get_blockwidth(view->format), - false, access, desc); + util_format_get_blockwidth(view->format), false, access, desc); } } diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 7bab2f596cc..0c4a80d234e 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -513,13 +513,6 @@ struct si_screen { uint64_t debug_flags; char renderer_string[183]; - void (*make_texture_descriptor)(struct si_screen *screen, struct si_texture *tex, bool sampler, - enum pipe_texture_target target, enum pipe_format pipe_format, - const unsigned char state_swizzle[4], unsigned first_level, - unsigned last_level, unsigned first_layer, unsigned last_layer, - unsigned width, unsigned height, unsigned depth, - bool get_bo_metadata, uint32_t *state, uint32_t *fmask_state); - unsigned pa_sc_raster_config; unsigned pa_sc_raster_config_1; unsigned se_tile_repeat; diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 77293728e93..fe75cf8c26f 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -3779,13 +3779,6 @@ static void gfx10_make_texture_descriptor( unsigned last_level, unsigned first_layer, unsigned last_layer, unsigned width, unsigned height, unsigned depth, bool get_bo_metadata, uint32_t *state, uint32_t *fmask_state) { - if (!screen->info.has_image_opcodes && !get_bo_metadata) { - cdna_emu_make_image_descriptor(screen, tex, sampler, target, pipe_format, state_swizzle, - first_level, last_level, first_layer, last_layer, width, - height, depth, state, fmask_state); - return; - } - struct pipe_resource *res = &tex->buffer.b.b; const struct util_format_description *desc; unsigned char swizzle[4]; @@ -3890,14 +3883,14 @@ static void gfx10_make_texture_descriptor( /** * Build the sampler view descriptor for a texture (SI-GFX9). */ -static void si_make_texture_descriptor(struct si_screen *screen, struct si_texture *tex, - bool sampler, enum pipe_texture_target target, - enum pipe_format pipe_format, - const unsigned char state_swizzle[4], unsigned first_level, - unsigned last_level, unsigned first_layer, - unsigned last_layer, unsigned width, unsigned height, - unsigned depth, bool get_bo_metadata, - uint32_t *state, uint32_t *fmask_state) +void si_make_texture_descriptor(struct si_screen *screen, struct si_texture *tex, + bool sampler, enum pipe_texture_target target, + enum pipe_format pipe_format, + const unsigned char state_swizzle[4], unsigned first_level, + unsigned last_level, unsigned first_layer, + unsigned last_layer, unsigned width, unsigned height, + unsigned depth, bool get_bo_metadata, + uint32_t *state, uint32_t *fmask_state) { if (!screen->info.has_image_opcodes && !get_bo_metadata) { cdna_emu_make_image_descriptor(screen, tex, sampler, target, pipe_format, state_swizzle, @@ -3906,6 +3899,13 @@ static void si_make_texture_descriptor(struct si_screen *screen, struct si_textu return; } + if (screen->info.gfx_level >= GFX10) { + gfx10_make_texture_descriptor(screen, tex, sampler, target, pipe_format, state_swizzle, + first_level, last_level, first_layer, last_layer, width, + height, depth, get_bo_metadata, state, fmask_state); + return; + } + struct pipe_resource *res = &tex->buffer.b.b; const struct util_format_description *desc; unsigned char swizzle[4]; @@ -4122,11 +4122,11 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx view->dcc_incompatible = vi_dcc_formats_are_incompatible(texture, state->u.tex.first_level, state->format); - sctx->screen->make_texture_descriptor( - sctx->screen, tex, true, state->target, pipe_format, state_swizzle, - state->u.tex.first_level, state->u.tex.last_level, - state->u.tex.first_layer, last_layer, texture->width0, texture->height0, texture->depth0, - false, view->state, view->fmask_state); + si_make_texture_descriptor(sctx->screen, tex, true, state->target, pipe_format, state_swizzle, + state->u.tex.first_level, state->u.tex.last_level, + state->u.tex.first_layer, last_layer, texture->width0, + texture->height0, texture->depth0, false, view->state, + view->fmask_state); view->base_level_info = &surflevel[0]; view->block_width = util_format_get_blockwidth(pipe_format); @@ -4930,11 +4930,6 @@ void si_init_screen_state_functions(struct si_screen *sscreen) sscreen->b.create_vertex_state = si_pipe_create_vertex_state; sscreen->b.vertex_state_destroy = si_pipe_vertex_state_destroy; - if (sscreen->info.gfx_level >= GFX10) - sscreen->make_texture_descriptor = gfx10_make_texture_descriptor; - else - sscreen->make_texture_descriptor = si_make_texture_descriptor; - util_vertex_state_cache_init(&sscreen->vertex_state_cache, si_create_vertex_state, si_vertex_state_destroy); } diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h index 2a662681984..9fb9e4b7aa8 100644 --- a/src/gallium/drivers/radeonsi/si_state.h +++ b/src/gallium/drivers/radeonsi/si_state.h @@ -621,6 +621,14 @@ struct pb_slab *si_bindless_descriptor_slab_alloc(void *priv, unsigned heap, uns void si_bindless_descriptor_slab_free(void *priv, struct pb_slab *pslab); void si_rebind_buffer(struct si_context *sctx, struct pipe_resource *buf); /* si_state.c */ +void si_make_texture_descriptor(struct si_screen *screen, struct si_texture *tex, + bool sampler, enum pipe_texture_target target, + enum pipe_format pipe_format, + const unsigned char state_swizzle[4], unsigned first_level, + unsigned last_level, unsigned first_layer, + unsigned last_layer, unsigned width, unsigned height, + unsigned depth, bool get_bo_metadata, + uint32_t *state, uint32_t *fmask_state); void si_init_state_compute_functions(struct si_context *sctx); void si_init_state_functions(struct si_context *sctx); void si_init_screen_state_functions(struct si_screen *sscreen); diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index e480640b542..b628b24c260 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -618,10 +618,10 @@ static void si_set_tex_bo_metadata(struct si_screen *sscreen, struct si_texture bool is_array = util_texture_is_array(res->target); uint32_t desc[8]; - sscreen->make_texture_descriptor(sscreen, tex, true, res->target, - tex->is_depth ? tex->db_render_format : res->format, swizzle, 0, - res->last_level, 0, is_array ? res->array_size - 1 : 0, - res->width0, res->height0, res->depth0, true, desc, NULL); + si_make_texture_descriptor(sscreen, tex, true, res->target, + tex->is_depth ? tex->db_render_format : res->format, swizzle, 0, + res->last_level, 0, is_array ? res->array_size - 1 : 0, res->width0, + res->height0, res->depth0, true, desc, NULL); si_set_mutable_tex_desc_fields(sscreen, tex, &tex->surface.u.legacy.level[0], 0, 0, tex->surface.blk_w, false, 0, desc);