Serge Martin <edb+m...@sigluy.net> writes: > 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. > --- > src/gallium/state_trackers/clover/llvm/invocation.cpp | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp > b/src/gallium/state_trackers/clover/llvm/invocation.cpp > index 03487d6..9af51539 100644 > --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp > +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp > @@ -472,7 +472,8 @@ namespace { > // aligned to the next larger power of two". We need this > // alignment for three element vectors, which have > // non-power-of-2 store size. > - const unsigned arg_api_size = > util_next_power_of_two(arg_store_size); > + const unsigned arg_api_size = arg_type->isStructTy() ? > + arg_store_size : util_next_power_of_two(arg_store_size); > Hm... Isn't this still going to be broken if you pass a struct argument to a kernel function and the alignment of any of the struct members doesn't match the target-specific data layout? Not sure we can fix this sensibly without requiring the target's data layout to match the CL API exactly. Any suggestions Tom?
> llvm::Type *target_type = arg_type->isIntegerTy() ? > TD.getSmallestLegalIntType(mod->getContext(), arg_store_size > * 8) > -- > 2.5.5
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev