From e4e2cb0d397f714fb20ef463825d90a6500dd5ac Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Mon, 3 Feb 2014 19:44:41 -0800 Subject: [PATCH] fix alignment issue in a unit test --- .../ParallelPrimitives/b3LauncherCL.cpp | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp b/src/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp index 5306a5ad9..7dfcd9c5c 100644 --- a/src/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp +++ b/src/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp @@ -96,7 +96,24 @@ void b3LauncherCL::setBuffers( b3BufferInfoCL* buffInfo, int n ) b3Assert( status == CL_SUCCESS ); } } + +struct b3KernelArgDataUnaligned +{ + int m_isBuffer; + int m_argIndex; + int m_argSizeInBytes; + int m_unusedPadding; + union + { + cl_mem m_clBuffer; + unsigned char m_argData[B3_CL_MAX_ARG_SIZE]; + }; +}; +#include + + + int b3LauncherCL::deserializeArgs(unsigned char* buf, int bufSize, cl_context ctx) { int index=0; @@ -106,7 +123,7 @@ int b3LauncherCL::deserializeArgs(unsigned char* buf, int bufSize, cl_context ct for (int i=0;im_isBuffer) @@ -128,7 +145,9 @@ int b3LauncherCL::deserializeArgs(unsigned char* buf, int bufSize, cl_context ct cl_int status = clSetKernelArg( m_kernel, m_idx++, arg->m_argSizeInBytes, &arg->m_argData); b3Assert( status == CL_SUCCESS ); } - m_kernelArguments.push_back(*arg); + b3KernelArgData b; + memcpy(&b,arg,sizeof(b3KernelArgDataUnaligned)); + m_kernelArguments.push_back(b); } m_serializationSizeInBytes = index; return index;