nir/lower_tex: skip external texture YUV lowering for query instructions
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41454>
This commit is contained in:
Christian Meissl 2026-05-09 21:14:02 +02:00 committed by Marge Bot
parent 9d858b6719
commit 9da4fb526a

View file

@ -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) {