diff --git a/.pick_status.json b/.pick_status.json index bc8cdf5f51a..9813a054cfa 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -913,7 +913,7 @@ "description": "zink: Re-emit the SpvBuiltInSampleMask access chain each load.", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "8899f6a19857d533d62945889c413b55cea5223c" }, 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 6638f618ca0..681e0ba939f 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 @@ -2779,17 +2779,19 @@ emit_load_uint_input(struct ntv_context *ctx, nir_intrinsic_instr *intr, SpvId * SpvStorageClassInput, var_name, builtin); - if (builtin == SpvBuiltInSampleMask) { - SpvId zero = emit_uint_const(ctx, 32, 0); - var_type = spirv_builder_type_uint(&ctx->builder, 32); - SpvId pointer_type = spirv_builder_type_pointer(&ctx->builder, - SpvStorageClassInput, - var_type); - *var_id = spirv_builder_emit_access_chain(&ctx->builder, pointer_type, *var_id, &zero, 1); - } } - SpvId result = spirv_builder_emit_load(&ctx->builder, var_type, *var_id); + SpvId load_var = *var_id; + if (builtin == SpvBuiltInSampleMask) { + SpvId zero = emit_uint_const(ctx, 32, 0); + var_type = spirv_builder_type_uint(&ctx->builder, 32); + SpvId pointer_type = spirv_builder_type_pointer(&ctx->builder, + SpvStorageClassInput, + var_type); + load_var = spirv_builder_emit_access_chain(&ctx->builder, pointer_type, load_var, &zero, 1); + } + + SpvId result = spirv_builder_emit_load(&ctx->builder, var_type, load_var); assert(1 == nir_dest_num_components(intr->dest)); store_dest(ctx, &intr->dest, result, nir_type_uint); }