clover: fix getting scalar args api size
authorSerge Martin <edb+mesa@sigluy.net>
Tue, 30 Aug 2016 08:10:01 +0000 (10:10 +0200)
committerSerge Martin <edb@sigluy.net>
Fri, 16 Sep 2016 20:09:47 +0000 (22:09 +0200)
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 <currojerez@riseup.net>
src/gallium/state_trackers/clover/llvm/codegen/common.cpp

index 2d52fdc678dc1602763b58adecd7959fab938f04..834b06a134cf9f7902783f0af263397309874b71 100644 (file)
@@ -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);