On Tue, 2014-04-22 at 14:40 -0700, Matt Arsenault wrote: > On 04/22/2014 02:35 PM, Tom Stellard wrote: > > On Mon, Apr 21, 2014 at 10:02:27PM -0400, Jan Vesely wrote: > >> Hi, > >> > >> I ran into a problem caused by this part of the OCL specs (6.1.5 > >> Alignment of Types): > >> "For 3-component vector data types, the size of the data type is 4 * > >> sizeof(component)." > >> > >> and the corresponding part of Khronos cl_platform.h (with all types, not > >> just float): > >> /* cl_float3 is identical in size, alignment and behavior to cl_float4. > >> See section 6.1.5. */ > >> typedef cl_float4 cl_float3; > >> > >> So when I try to run kernel that takes 3 element vectors as arguments I > >> get 'invalid arg size' error. > >> > >> Not sure whether this is best solved in clang, libclc or clover. I tried > >> changing float3 to have 4 elements in libclc, it caused clang to > >> complain in thousand places. I don't think this can be handled cleanly > >> in clang, unless we add something like __attribute__((padding)). > >> > >> I have attached a workaround that I use now. > >> > > You may want to ask this question on the pocl mailing list as they > > have likely solved this issue already. Ideally, TD.getTypeStoreSize > > would return the correct value. Also, maybe look at the DataLayout > > description for R600 and see if there is a way to specify the > > correct type size. > > > > -Tom > I think this is what v96:128 is for
according to [0], it specifies only alignment, not size. I could not find an __attribute__ that would change size either. It should be possible to have ADMGPUDataLayout: public DataLayout class that would intercept the call and fix the reported value, but I think it would only move the hack to different place. I have added pocl-devel list as suggested. regards, Jan [0]http://llvm.org/docs/LangRef.html#data-layout > > > > > >> any advice welcome, > >> Jan > >> > >> -- > >> Jan Vesely <jan.ves...@rutgers.edu> > >> diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp > >> b/src/gallium/state_trackers/clover/llvm/invocation.cpp > >> index a81bdf8..71ee01f 100644 > >> --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp > >> +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp > >> @@ -62,6 +62,8 @@ > >> #include <llvm/IR/DataLayout.h> > >> #endif > >> > >> +#include <llvm/Support/Debug.h> > >> + > >> #include "pipe/p_state.h" > >> #include "util/u_memory.h" > >> > >> @@ -309,6 +311,13 @@ namespace { > >> > >> llvm::Type *arg_type = arg.getType(); > >> unsigned arg_size = TD.getTypeStoreSize(arg_type); > >> + if (arg_type->isVectorTy() && > >> + > >> ::llvm::cast<::llvm::VectorType>(arg_type)->getNumElements() == 3) { > >> + ::llvm::dbgs() << "Fixing argument type: " << *arg_type > >> + << " size: " << arg_size << "->" > >> + << (arg_size / 3) * 4 << "\n"; > >> + arg_size = (arg_size / 3) * 4; > >> + } > >> > >> llvm::Type *target_type = arg_type->isIntegerTy() ? > >> TD.getSmallestLegalIntType(mod->getContext(), arg_size * > >> 8) : > > > > > > > >> _______________________________________________ > >> mesa-dev mailing list > >> mesa-dev@lists.freedesktop.org > >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > _______________________________________________ > > cfe-dev mailing list > > cfe-...@cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev > -- Jan Vesely <jan.ves...@rutgers.edu>
signature.asc
Description: This is a digitally signed message part
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev