From 13005d5e4eee8db7c8e6fa5da42d440564125663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 2 Jun 2025 12:21:19 -0400 Subject: [PATCH] nir/xfb_info: don't merge incompatible XFB outputs to fix mediump Reviewed-by: Timothy Arceri Part-of: --- src/compiler/nir/nir_gather_xfb_info.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_gather_xfb_info.c b/src/compiler/nir/nir_gather_xfb_info.c index c89d8b18dce..724c34aa4bf 100644 --- a/src/compiler/nir/nir_gather_xfb_info.c +++ b/src/compiler/nir/nir_gather_xfb_info.c @@ -391,7 +391,10 @@ nir_gather_xfb_info_from_intrinsics(nir_shader *nir) j < count && cur->buffer == outputs[j].buffer && cur->location == outputs[j].location && - cur->high_16bits == outputs[j].high_16bits; + cur->data_is_16bit == outputs[j].data_is_16bit && + cur->high_16bits == outputs[j].high_16bits && + cur->mediump == outputs[j].mediump && + cur->mediump_upconvert_type == outputs[j].mediump_upconvert_type; j++) { if (outputs[j].component_mask && outputs[j].offset - outputs[j].component_offset * 4 == @@ -501,12 +504,19 @@ nir_print_xfb_info(nir_xfb_info *info, FILE *fp) fprintf(fp, "output_count: %u\n", info->output_count); for (unsigned i = 0; i < info->output_count; i++) { - fprintf(fp, "output%u: buffer=%u, offset=%u, location=%u, high_16bits=%u, " + nir_alu_type type = info->outputs[i].mediump_upconvert_type; + fprintf(fp, "output%u: buffer=%u, offset=%u, location=%u, data_is_16bit=%u, " + "high_16bits=%u, mediump=%u, upconvert=%s, " "component_offset=%u, component_mask=0x%x\n", i, info->outputs[i].buffer, info->outputs[i].offset, info->outputs[i].location, + info->outputs[i].data_is_16bit, info->outputs[i].high_16bits, + info->outputs[i].mediump, + type == nir_type_float ? "float" : + type == nir_type_int ? "int" : + type == nir_type_uint ? "uint" : "none", info->outputs[i].component_offset, info->outputs[i].component_mask); }