From 1c8d4c694bfb95ab90f152da710a8a9459a20228 Mon Sep 17 00:00:00 2001 From: Serge Martin Date: Tue, 30 Aug 2016 10:10:01 +0200 Subject: [PATCH] clover: fix getting scalar args api size This fix getting the size of a struct arg. vec3 types still work ok. Only buit-in args need to have power of two alignment, getTypeAllocSize reports the correct size in all cases. Acked-by: Francisco Jerez --- src/gallium/state_trackers/clover/llvm/codegen/common.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp index 2d52fdc678d..834b06a134c 100644 --- a/src/gallium/state_trackers/clover/llvm/codegen/common.cpp +++ b/src/gallium/state_trackers/clover/llvm/codegen/common.cpp @@ -81,11 +81,10 @@ namespace { // OpenCL 1.2 specification, Ch. 6.1.5: "A built-in data // type that is not a power of two bytes in size must be - // aligned to the next larger power of two". We need this - // alignment for three element vectors, which have - // non-power-of-2 store size. + // aligned to the next larger power of two. + // This rule applies to built-in types only, not structs or unions." const unsigned arg_store_size = dl.getTypeStoreSize(arg_type); - const unsigned arg_api_size = util_next_power_of_two(arg_store_size); + const unsigned arg_api_size = dl.getTypeAllocSize(arg_type); const auto target_type = !arg_type->isIntegerTy() ? arg_type : dl.getSmallestLegalIntType(mod.getContext(), arg_store_size * 8); -- 2.30.2