From 43ba475d4cc0862a0f81437ce9f5c4b3d3c33021 Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Mon, 6 Apr 2026 13:57:51 +0200 Subject: [PATCH] panfrost,panvk: Move lower_texture_early inside preproc Signed-off-by: Lorenzo Rossi Reviewed-by: Christoph Pillmayer Reviewed-by: Faith Ekstrand Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/gallium/drivers/panfrost/pan_fb_preload.c | 1 - src/gallium/drivers/panfrost/pan_shader.c | 2 -- src/panfrost/clc/pan_compile.c | 1 - src/panfrost/compiler/pan_compiler.c | 30 +++++++++---------- src/panfrost/compiler/pan_nir.h | 2 -- .../vulkan/panvk_vX_cmd_frame_shaders.c | 1 - src/panfrost/vulkan/panvk_vX_shader.c | 1 - 7 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_fb_preload.c b/src/gallium/drivers/panfrost/pan_fb_preload.c index 591bcda697e..fd0ae278d8d 100644 --- a/src/gallium/drivers/panfrost/pan_fb_preload.c +++ b/src/gallium/drivers/panfrost/pan_fb_preload.c @@ -541,7 +541,6 @@ pan_preload_get_shader(struct pan_fb_preload_cache *cache, BITSET_SET(b.shader->info.textures_used, i); pan_preprocess_nir(b.shader, inputs.gpu_id); - pan_nir_lower_texture_early(b.shader, inputs.gpu_id); pan_postprocess_nir(b.shader, inputs.gpu_id); if (PAN_ARCH == 4) { diff --git a/src/gallium/drivers/panfrost/pan_shader.c b/src/gallium/drivers/panfrost/pan_shader.c index c24133444c4..86e045bce9c 100644 --- a/src/gallium/drivers/panfrost/pan_shader.c +++ b/src/gallium/drivers/panfrost/pan_shader.c @@ -111,7 +111,6 @@ panfrost_shader_compile(struct panfrost_screen *screen, const nir_shader *ir, */ if (mesa_shader_stage_is_compute(s->info.stage)) { pan_preprocess_nir(s, panfrost_device_gpu_id(dev)); - pan_nir_lower_texture_early(s, panfrost_device_gpu_id(dev)); } struct pan_compile_inputs inputs = { @@ -539,7 +538,6 @@ panfrost_create_shader_state(struct pipe_context *pctx, /* Then run the suite of lowering and optimization, including I/O lowering */ struct panfrost_device *dev = pan_device(pctx->screen); pan_preprocess_nir(nir, panfrost_device_gpu_id(dev)); - pan_nir_lower_texture_early(nir, panfrost_device_gpu_id(dev)); NIR_PASS(_, nir, nir_lower_indirect_derefs_to_if_else_trees, nir_var_shader_in | nir_var_shader_out, UINT32_MAX); diff --git a/src/panfrost/clc/pan_compile.c b/src/panfrost/clc/pan_compile.c index 7dda091ab72..36c1266c085 100644 --- a/src/panfrost/clc/pan_compile.c +++ b/src/panfrost/clc/pan_compile.c @@ -420,7 +420,6 @@ main(int argc, const char **argv) glsl_get_cl_type_size_align); pan_preprocess_nir(s, inputs.gpu_id); - pan_nir_lower_texture_early(s, inputs.gpu_id); NIR_PASS(_, s, nir_opt_deref); NIR_PASS(_, s, nir_lower_vars_to_ssa); diff --git a/src/panfrost/compiler/pan_compiler.c b/src/panfrost/compiler/pan_compiler.c index 21d4e1bcad8..8bac5213c33 100644 --- a/src/panfrost/compiler/pan_compiler.c +++ b/src/panfrost/compiler/pan_compiler.c @@ -67,6 +67,20 @@ pan_preprocess_nir(nir_shader *nir, uint64_t gpu_id) bifrost_preprocess_nir(nir, gpu_id); else midgard_preprocess_nir(nir, gpu_id); + + /* Lower textures early */ + nir_lower_tex_options lower_tex_options = { + .lower_txs_lod = true, + .lower_txp = ~0, + .lower_tg4_offsets = true, + .lower_tg4_broadcom_swizzle = true, + .lower_txd = pan_arch(gpu_id) < 6, + .lower_txd_cube_map = true, + .lower_invalid_implicit_lod = true, + .lower_index_to_offset = pan_arch(gpu_id) >= 6, + }; + + NIR_PASS(_, nir, nir_lower_tex, &lower_tex_options); } void @@ -85,22 +99,6 @@ pan_postprocess_nir(nir_shader *nir, uint64_t gpu_id) midgard_postprocess_nir(nir, gpu_id); } -void -pan_nir_lower_texture_early(nir_shader *nir, uint64_t gpu_id) -{ - nir_lower_tex_options lower_tex_options = { - .lower_txs_lod = true, - .lower_txp = ~0, - .lower_tg4_offsets = true, - .lower_tg4_broadcom_swizzle = true, - .lower_txd = pan_arch(gpu_id) < 6, - .lower_txd_cube_map = true, - .lower_invalid_implicit_lod = true, - .lower_index_to_offset = pan_arch(gpu_id) >= 6, - }; - - NIR_PASS(_, nir, nir_lower_tex, &lower_tex_options); -} /** Converts a per-component mask to a byte mask */ uint16_t pan_to_bytemask(unsigned bytes, unsigned mask) diff --git a/src/panfrost/compiler/pan_nir.h b/src/panfrost/compiler/pan_nir.h index c9cc4aee353..5fd90f0986a 100644 --- a/src/panfrost/compiler/pan_nir.h +++ b/src/panfrost/compiler/pan_nir.h @@ -72,8 +72,6 @@ bool pan_nir_lower_image_index(nir_shader *shader, bool pan_nir_lower_texel_buffer_fetch_index(nir_shader *shader, unsigned attrib_offset); -void pan_nir_lower_texture_early(nir_shader *nir, uint64_t gpu_id); - nir_alu_type pan_unpacked_type_for_format(const struct util_format_description *desc); diff --git a/src/panfrost/vulkan/panvk_vX_cmd_frame_shaders.c b/src/panfrost/vulkan/panvk_vX_cmd_frame_shaders.c index 47f0c70be27..2037882b354 100644 --- a/src/panfrost/vulkan/panvk_vX_cmd_frame_shaders.c +++ b/src/panfrost/vulkan/panvk_vX_cmd_frame_shaders.c @@ -221,7 +221,6 @@ get_frame_shader(struct panvk_device *dev, }; pan_preprocess_nir(nir, inputs.gpu_id); - pan_nir_lower_texture_early(nir, inputs.gpu_id); pan_postprocess_nir(nir, inputs.gpu_id); VkResult result = panvk_per_arch(create_internal_shader)( diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c index b26a0bedf68..a22ea7e590b 100644 --- a/src/panfrost/vulkan/panvk_vX_shader.c +++ b/src/panfrost/vulkan/panvk_vX_shader.c @@ -486,7 +486,6 @@ panvk_preprocess_nir(struct vk_physical_device *vk_pdev, * * This would give us a better place to do panvk-specific lowering. */ - pan_nir_lower_texture_early(nir, pdev->kmod.dev->props.gpu_id); NIR_PASS(_, nir, nir_lower_system_values); nir_lower_compute_system_values_options options = {