diff --git a/src/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h b/src/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h index daa7aa7ca..d70c30f53 100644 --- a/src/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h +++ b/src/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h @@ -4,7 +4,7 @@ #include "Bullet3Common/b3AlignedObjectArray.h" #include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h" -template +template class b3OpenCLArray { size_t m_size; @@ -59,9 +59,9 @@ public: m_size = sizeInElements; m_capacity = sizeInElements; } - + // we could enable this assignment, but need to make sure to avoid accidental deep copies -// b3OpenCLArray& operator=(const b3AlignedObjectArray& src) +// b3OpenCLArray& operator=(const b3AlignedObjectArray& src) // { // copyFromArray(src); // return *this; @@ -73,16 +73,16 @@ public: return m_clBuffer; } - + virtual ~b3OpenCLArray() { deallocate(); m_size=0; m_capacity=0; } - + B3_FORCE_INLINE bool push_back(const T& _Val,bool waitForCompletion=true) - { + { bool result = true; size_t sz = size(); if( sz == capacity() ) @@ -147,7 +147,7 @@ public: } B3_FORCE_INLINE size_t capacity() const - { + { return m_capacity; } @@ -167,7 +167,6 @@ public: if (ciErrNum!=CL_SUCCESS) { b3Error("OpenCL out-of-memory\n"); - b3Assert(0); _Count = 0; result = false; } @@ -192,7 +191,7 @@ public: deallocate(); m_clBuffer = buf; - + m_capacity = _Count; } else { @@ -213,14 +212,14 @@ public: b3Assert(m_clBuffer); b3Assert(destination); - + //likely some error, destination is same as source b3Assert(m_clBuffer != destination); b3Assert((firstElem+numElements)<=m_size); - + cl_int status = 0; - + b3Assert(numElements>0); b3Assert(numElements<=m_size); @@ -228,7 +227,7 @@ public: size_t srcOffsetBytes = sizeof(T)*firstElem; size_t dstOffsetInBytes = sizeof(T)*dstOffsetInElems; - status = clEnqueueCopyBuffer( m_commandQueue, m_clBuffer, destination, + status = clEnqueueCopyBuffer( m_commandQueue, m_clBuffer, destination, srcOffsetBytes, dstOffsetInBytes, sizeof(T)*numElements, 0, 0, 0 ); b3Assert( status == CL_SUCCESS ); @@ -237,7 +236,7 @@ public: void copyFromHost(const b3AlignedObjectArray& srcArray, bool waitForCompletion=true) { size_t newSize = srcArray.size(); - + bool copyOldContents = false; resize (newSize,copyOldContents); if (newSize) @@ -263,7 +262,7 @@ public: b3Error("copyFromHostPointer invalid range\n"); } } - + void copyToHost(b3AlignedObjectArray& destArray, bool waitForCompletion=true) const { @@ -275,7 +274,7 @@ public: void copyToHostPointer(T* destPtr, size_t numElem, size_t srcFirstElem=0, bool waitForCompletion=true) const { b3Assert(numElem+srcFirstElem <= capacity()); - + if(numElem+srcFirstElem <= capacity()) { cl_int status = 0; @@ -290,7 +289,7 @@ public: b3Error("copyToHostPointer invalid range\n"); } } - + void copyFromOpenCLArray(const b3OpenCLArray& src) { size_t newSize = src.size(); diff --git a/test/OpenCL/BasicInitialize/main.cpp b/test/OpenCL/BasicInitialize/main.cpp index a916d4c82..74d550215 100644 --- a/test/OpenCL/BasicInitialize/main.cpp +++ b/test/OpenCL/BasicInitialize/main.cpp @@ -4,8 +4,8 @@ Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. @@ -44,7 +44,7 @@ int main(int argc, char* argv[]) b3Error("test error\n"); int ciErrNum = 0; - + cl_device_type deviceType = CL_DEVICE_TYPE_ALL; const char* vendorSDK = b3OpenCLUtils::getSdkVendorName(); @@ -62,9 +62,9 @@ int main(int argc, char* argv[]) b3Printf(" CL_PLATFORM_VENDOR: \t\t\t%s\n",platformInfo.m_platformVendor); b3Printf(" CL_PLATFORM_NAME: \t\t\t%s\n",platformInfo.m_platformName); b3Printf(" CL_PLATFORM_VERSION: \t\t\t%s\n",platformInfo.m_platformVersion); - + cl_context context = b3OpenCLUtils::createContextFromPlatform(platform,deviceType,&ciErrNum); - + int numDevices = b3OpenCLUtils::getNumDevices(context); b3Printf("Num Devices = %d\n", numDevices); for (int j=0;j memTester(g_cxMainContext,g_cqCommandQue,0,true); - int maxMem = 8192; - bool result=true; - for (size_t i=1;result;i++) + { - size_t numBytes = i*1024*1024; - result = memTester.resize(numBytes,false); - - if (result) - { - printf("allocated %d MB successfully\n",i); - } else - { - printf("allocated %d MB failed\n", i); - } + b3OpenCLArray memTester(g_cxMainContext,g_cqCommandQue,0,true); + int maxMem = 8192; + bool result=true; + for (size_t i=1;result;i++) + { + size_t numBytes = i*1024*1024; + result = memTester.resize(numBytes,false); + + if (result) + { + printf("allocated %d MB successfully\n",i); + } else + { + printf("allocated %d MB failed\n", i); + } + + } } diff --git a/test/OpenCL/BasicInitialize/premake4.lua b/test/OpenCL/BasicInitialize/premake4.lua index 49c63ed84..146387ae8 100644 --- a/test/OpenCL/BasicInitialize/premake4.lua +++ b/test/OpenCL/BasicInitialize/premake4.lua @@ -19,6 +19,7 @@ function createProject(vendor) files { "main.cpp", "../../../src/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp", + "../../../src/Bullet3Common/b3AlignedAllocator.cpp", "../../../src/Bullet3OpenCL/Initialize/b3OpenCLUtils.h", "../../../src/Bullet3Common/b3Logging.cpp", }