fix Mac OSX build

This commit is contained in:
Erwin Coumans
2013-06-04 09:09:10 -07:00
parent b36eba864f
commit 4dd529513f
6 changed files with 95 additions and 67 deletions

View File

@@ -3,19 +3,20 @@
#include <stdio.h>
#include <stdarg.h>
void b3PrintfFuncDefault(const char* msg)
{
printf(msg);
printf("%s",msg);
}
void b3WarningMessageFuncDefault(const char* msg)
{
printf(msg);
printf("%s",msg);
}
void b3ErrorMessageFuncDefault(const char* msg)
{
printf(msg);
printf("%s",msg);
}
static b3PrintfFunc* b3s_printfFunc = b3PrintfFuncDefault;
@@ -37,13 +38,19 @@ void b3SetCustomErrorMessageFunc(b3PrintfFunc* errorMessageFunc)
b3s_errorMessageFunc = errorMessageFunc;
}
#define B3_MAX_DEBUG_STRING_LENGTH 32
void b3OutputPrintfVarArgsInternal(const char *str, ...)
{
char strDebug[1024]={0};
char strDebug[B3_MAX_DEBUG_STRING_LENGTH]={0};
va_list argList;
va_start(argList, str);
vsprintf_s(strDebug,str,argList);
#ifdef _WIN32
vsprintf_s(strDebug,B3_MAX_DEBUG_STRING_LENGTH,str,argList);
#else
vsnprintf(strDebug,B3_MAX_DEBUG_STRING_LENGTH,str,argList);
#endif
(b3s_printfFunc)(strDebug);
va_end(argList);
}
@@ -52,18 +59,30 @@ void b3OutputWarningMessageVarArgsInternal(const char *str, ...)
char strDebug[1024]={0};
va_list argList;
va_start(argList, str);
vsprintf_s(strDebug,str,argList);
#ifdef _WIN32
vsprintf_s(strDebug,B3_MAX_DEBUG_STRING_LENGTH,str,argList);
#else
vsnprintf(strDebug,B3_MAX_DEBUG_STRING_LENGTH,str,argList);
#endif
(b3s_warningMessageFunc)(strDebug);
va_end(argList);
}
void b3OutputErrorMessageVarArgsInternal(const char *str, ...)
{
char strDebug[1024]={0};
va_list argList;
va_start(argList, str);
vsprintf_s(strDebug,str,argList);
#ifdef _WIN32
vsprintf_s(strDebug,B3_MAX_DEBUG_STRING_LENGTH,str,argList);
#else
vsnprintf(strDebug,B3_MAX_DEBUG_STRING_LENGTH,str,argList);
#endif
(b3s_errorMessageFunc)(strDebug);
va_end(argList);
}
#ifndef _WIN32
#undef vsprintf_s
#endif

View File

@@ -310,8 +310,6 @@ inline __m128 operator * (const __m128 A, const __m128 B)
#define b3CastdTo128f(a) ((__m128) (a))
#define b3CastdTo128i(a) ((__m128i)(a))
#define b3Assign128(r0,r1,r2,r3) (__m128){r0,r1,r2,r3}
#define B3_INFINITY INFINITY
#define B3_NAN NAN
#endif//_WIN32
#endif //B3_USE_SSE_IN_API

View File

@@ -32,7 +32,7 @@ b3BoundSearchCL::b3BoundSearchCL(cl_context ctx, cl_device_id device, cl_command
{
const char* additionalMacros = "";
const char* srcFileNameForCaching="";
//const char* srcFileNameForCaching="";
cl_int pErrNum;
const char* kernelSource = boundSearchKernelsCL;

View File

@@ -7,6 +7,9 @@
#include "b3OpenCLArray.h"
#include <stdio.h>
#define B3_DEBUG_SERIALIZE_CL
#ifdef _WIN32
#pragma warning(disable :4996)
#endif
@@ -31,11 +34,10 @@ class b3LauncherCL
cl_command_queue m_commandQueue;
cl_kernel m_kernel;
int m_idx;
b3AlignedObjectArray<b3KernelArgData> m_kernelArguments;
int m_serializationSizeInBytes;
bool m_enableSerialization;
public:
@@ -44,7 +46,8 @@ class b3LauncherCL
b3LauncherCL(cl_command_queue queue, cl_kernel kernel)
:m_commandQueue(queue),
m_kernel(kernel),
m_idx(0)
m_idx(0),
m_enableSerialization(false)
{
m_serializationSizeInBytes = sizeof(int);
}
@@ -59,30 +62,31 @@ class b3LauncherCL
inline void setBuffer( cl_mem clBuffer)
{
b3KernelArgData kernelArg;
kernelArg.m_argIndex = m_idx;
kernelArg.m_isBuffer = 1;
kernelArg.m_clBuffer = clBuffer;
cl_mem_info param_name = CL_MEM_SIZE;
size_t param_value;
size_t sizeInBytes = sizeof(size_t);
size_t actualSizeInBytes;
cl_int err;
err = clGetMemObjectInfo ( kernelArg.m_clBuffer,
param_name,
sizeInBytes,
&param_value,
&actualSizeInBytes);
b3Assert( err == CL_SUCCESS );
kernelArg.m_argSizeInBytes = param_value;
m_kernelArguments.push_back(kernelArg);
m_serializationSizeInBytes+= sizeof(b3KernelArgData);
m_serializationSizeInBytes+=param_value;
if (m_enableSerialization)
{
b3KernelArgData kernelArg;
kernelArg.m_argIndex = m_idx;
kernelArg.m_isBuffer = 1;
kernelArg.m_clBuffer = clBuffer;
cl_mem_info param_name = CL_MEM_SIZE;
size_t param_value;
size_t sizeInBytes = sizeof(size_t);
size_t actualSizeInBytes;
cl_int err;
err = clGetMemObjectInfo ( kernelArg.m_clBuffer,
param_name,
sizeInBytes,
&param_value,
&actualSizeInBytes);
b3Assert( err == CL_SUCCESS );
kernelArg.m_argSizeInBytes = param_value;
m_kernelArguments.push_back(kernelArg);
m_serializationSizeInBytes+= sizeof(b3KernelArgData);
m_serializationSizeInBytes+=param_value;
}
cl_int status = clSetKernelArg( m_kernel, m_idx++, sizeof(cl_mem), &clBuffer);
b3Assert( status == CL_SUCCESS );
}
@@ -92,29 +96,31 @@ class b3LauncherCL
{
for(int i=0; i<n; i++)
{
b3KernelArgData kernelArg;
kernelArg.m_argIndex = m_idx;
kernelArg.m_isBuffer = 1;
kernelArg.m_clBuffer = buffInfo[i].m_clBuffer;
cl_mem_info param_name = CL_MEM_SIZE;
size_t param_value;
size_t sizeInBytes = sizeof(size_t);
size_t actualSizeInBytes;
cl_int err;
err = clGetMemObjectInfo ( kernelArg.m_clBuffer,
param_name,
sizeInBytes,
&param_value,
&actualSizeInBytes);
b3Assert( err == CL_SUCCESS );
kernelArg.m_argSizeInBytes = param_value;
m_kernelArguments.push_back(kernelArg);
m_serializationSizeInBytes+= sizeof(b3KernelArgData);
m_serializationSizeInBytes+=param_value;
if (m_enableSerialization)
{
b3KernelArgData kernelArg;
kernelArg.m_argIndex = m_idx;
kernelArg.m_isBuffer = 1;
kernelArg.m_clBuffer = buffInfo[i].m_clBuffer;
cl_mem_info param_name = CL_MEM_SIZE;
size_t param_value;
size_t sizeInBytes = sizeof(size_t);
size_t actualSizeInBytes;
cl_int err;
err = clGetMemObjectInfo ( kernelArg.m_clBuffer,
param_name,
sizeInBytes,
&param_value,
&actualSizeInBytes);
b3Assert( err == CL_SUCCESS );
kernelArg.m_argSizeInBytes = param_value;
m_kernelArguments.push_back(kernelArg);
m_serializationSizeInBytes+= sizeof(b3KernelArgData);
m_serializationSizeInBytes+=param_value;
}
cl_int status = clSetKernelArg( m_kernel, m_idx++, sizeof(cl_mem), &buffInfo[i].m_clBuffer);
b3Assert( status == CL_SUCCESS );
}
@@ -296,9 +302,9 @@ class b3LauncherCL
unsigned char* ptr = (unsigned char*)&buf[i];
*ptr = 0xff;
}
int actualWrite = serializeArguments(buf,buffSize);
// int actualWrite = serializeArguments(buf,buffSize);
unsigned char* cptr = (unsigned char*)&buf[buffSize];
// unsigned char* cptr = (unsigned char*)&buf[buffSize];
// printf("buf[buffSize] = %d\n",*cptr);
assert(buf[buffSize]==0xff);//check for buffer overrun
@@ -357,6 +363,12 @@ class b3LauncherCL
b3Assert( status == CL_SUCCESS );
}
void enableSerialization(bool serialize)
{
m_enableSerialization = serialize;
}
};

View File

@@ -37,7 +37,6 @@ b3RadixSort32CL::b3RadixSort32CL(cl_context ctx, cl_device_id device, cl_command
m_fill = new b3FillCL(ctx,device,queue);
const char* additionalMacros = "";
const char* srcFileNameForCaching="";
cl_int pErrNum;
const char* kernelSource = radixSort32KernelsCL;

View File

@@ -38,8 +38,8 @@ const char* g_deviceName = 0;
void initCL(int preferredDeviceIndex, int preferredPlatformIndex)
{
void* glCtx=0;
void* glDC = 0;
//void* glCtx=0;
//void* glDC = 0;
int ciErrNum = 0;
//bound search and radix sort only work on GPU right now (assume 32 or 64 width workgroup without barriers)