From 026cfa10995ff3316476fa19507fa27adc531de5 Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Wed, 3 Jul 2019 12:47:53 -0700 Subject: [PATCH] spirv: Fix stride calculation when lowering Workgroup to offsets Use alignment to calculate the stride associated with the pointer types. That stride is used when the pointers are casted to arrays. Note that size alone is not sufficient, e.g. struct { vec2 a; vec1 b; } will have element an element size of 12 bytes, but the stride needs to be 16 bytes to respect the 8 byte alignment. Fixes: 050eb6389a8 "spirv: Ignore ArrayStride in OpPtrAccessChain for Workgroup" Reviewed-by: Jason Ekstrand --- src/compiler/spirv/spirv_to_nir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 3e88e54..ebefd4d 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -1406,7 +1406,7 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode, val->type->align = align; /* Override any ArrayStride previously set. */ - val->type->stride = size; + val->type->stride = vtn_align_u32(size, align); } } break; -- 2.7.4