From 9bf4db8ebb4d12a867edbf0740b55cc920fef712 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 28 Mar 2023 14:54:28 -0400 Subject: [PATCH] zink: don't bitcast bool deref loads/stores a bool can only be a bool, and OpBitCast requires the src type to be different than the dst type, so this is illegal cc: mesa-stable Part-of: --- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index bb2d790..32f0934 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -2486,7 +2486,8 @@ emit_load_deref(struct ntv_context *ctx, nir_intrinsic_instr *intr) result = spirv_builder_emit_load(&ctx->builder, type, ptr); unsigned num_components = nir_dest_num_components(intr->dest); unsigned bit_size = nir_dest_bit_size(intr->dest); - result = bitcast_to_uvec(ctx, result, bit_size, num_components); + if (bit_size > 1) + result = bitcast_to_uvec(ctx, result, bit_size, num_components); store_dest(ctx, &intr->dest, result, nir_type_uint); } @@ -2535,6 +2536,8 @@ emit_store_deref(struct ntv_context *ctx, nir_intrinsic_instr *intr) src = emit_bitcast(ctx, type, src); /* SampleMask is always an array in spirv, so we need to construct it into one */ result = spirv_builder_emit_composite_construct(&ctx->builder, ctx->sample_mask_type, &src, 1); + } else if (glsl_get_base_type(glsl_without_array(gtype)) == GLSL_TYPE_BOOL) { + result = src; } else result = emit_bitcast(ctx, type, src); if (nir_intrinsic_access(intr) & ACCESS_COHERENT) -- 2.7.4