diff --git a/.pick_status.json b/.pick_status.json index ee9999da487..a5e322b0ac9 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -175,7 +175,7 @@ "description": "zink: fix invalid Offset set for variables which do not need an offset", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, 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 d3a777aa85c..4977d23af10 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 @@ -445,8 +445,11 @@ get_glsl_type(struct ntv_context *ctx, const struct glsl_type *type) types[i] = get_glsl_type(ctx, glsl_get_struct_field(type, i)); ret = spirv_builder_type_struct(&ctx->builder, types, glsl_get_length(type)); - for (unsigned i = 0; i < glsl_get_length(type); i++) - spirv_builder_emit_member_offset(&ctx->builder, ret, i, glsl_get_struct_field_offset(type, i)); + for (unsigned i = 0; i < glsl_get_length(type); i++) { + int32_t offset = glsl_get_struct_field_offset(type, i); + if (offset >= 0) + spirv_builder_emit_member_offset(&ctx->builder, ret, i, offset); + } } else unreachable("Unhandled GLSL type");