From 9da4fb526aa5ae465736aa5ede0797674440f28c Mon Sep 17 00:00:00 2001 From: Christian Meissl Date: Sat, 9 May 2026 21:14:02 +0200 Subject: [PATCH] nir/lower_tex: skip external texture YUV lowering for query instructions Guard external texture lowering by !nir_tex_instr_is_query(), matching the pattern already used by swizzle_result and lower_srgb. Fixes textureSize() on samplerExternalOES on panfrost, which triggers the assertion: ``` Invalid invariant idx.type == BI_INDEX_REGISTER: r10 = TEX_SINGLE.rgb.2d.f32.zero_lod _.h00, ^r10, ^r11, sr_count:0 ``` Part-of: --- src/compiler/nir/nir_lower_tex.c | 104 ++++++++++++++++--------------- 1 file changed, 53 insertions(+), 51 deletions(-) diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c index 24d7e82a61e..619b9ddda3f 100644 --- a/src/compiler/nir/nir_lower_tex.c +++ b/src/compiler/nir/nir_lower_tex.c @@ -1649,69 +1649,71 @@ nir_lower_tex_block(nir_block *block, nir_builder *b, } else texture_mask = texture_index < 32 ? (1u << texture_index) : 0u; - if (texture_mask & options->lower_y_uv_external) { - lower_y_uv_external(b, tex, options, texture_index); - progress = true; - } + if (!nir_tex_instr_is_query(tex)) { + if (texture_mask & options->lower_y_uv_external) { + lower_y_uv_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_y_vu_external) { - lower_y_vu_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_y_vu_external) { + lower_y_vu_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_y_u_v_external) { - lower_y_u_v_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_y_u_v_external) { + lower_y_u_v_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_yx_xuxv_external) { - lower_yx_xuxv_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_yx_xuxv_external) { + lower_yx_xuxv_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_yx_xvxu_external) { - lower_yx_xvxu_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_yx_xvxu_external) { + lower_yx_xvxu_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_xy_uxvx_external) { - lower_xy_uxvx_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_xy_uxvx_external) { + lower_xy_uxvx_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_xy_vxux_external) { - lower_xy_vxux_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_xy_vxux_external) { + lower_xy_vxux_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_ayuv_external) { - lower_ayuv_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_ayuv_external) { + lower_ayuv_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_xyuv_external) { - lower_xyuv_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_xyuv_external) { + lower_xyuv_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_yuv_external) { - lower_yuv_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_yuv_external) { + lower_yuv_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_yu_yv_external) { - lower_yu_yv_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_yu_yv_external) { + lower_yu_yv_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_yv_yu_external) { - lower_yv_yu_external(b, tex, options, texture_index); - progress = true; - } + if (texture_mask & options->lower_yv_yu_external) { + lower_yv_yu_external(b, tex, options, texture_index); + progress = true; + } - if (texture_mask & options->lower_y41x_external) { - lower_y41x_external(b, tex, options, texture_index); - progress = true; + if (texture_mask & options->lower_y41x_external) { + lower_y41x_external(b, tex, options, texture_index); + progress = true; + } } if (sat_mask) {