[Mesa-dev] [PATCH 2/2] clover: fix getting struct args api size

Jan Vesely jan.vesely at rutgers.edu
Wed Jun 22 23:05:29 UTC 2016


On Mon, 2016-06-13 at 17:24 -0700, Francisco Jerez wrote:
> Serge Martin <edb+mesa at 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?

according to 6.7.2.1 compilers can arbitrarily insert padding between
struct members (except at the beginning). Even if size/alignment of
individual members match CL API exactly, there's no guarantee that the
structure layout/size will be the same.

Jan

> 
> >           llvm::Type *target_type = arg_type->isIntegerTy() ?
> >                 TD.getSmallestLegalIntType(mod->getContext(),
> > arg_store_size * 8)
> > -- 
> > 2.5.5
-- 

Jan Vesely <jan.vesely at rutgers.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160622/fab7e1d8/attachment.sig>


More information about the mesa-dev mailing list