diff --git a/Source/EmberCL/OpenCLWrapper.cpp b/Source/EmberCL/OpenCLWrapper.cpp index 1c24553..1576c7b 100644 --- a/Source/EmberCL/OpenCLWrapper.cpp +++ b/Source/EmberCL/OpenCLWrapper.cpp @@ -1130,6 +1130,7 @@ uint OpenCLWrapper::DeviceIndex() const { return m_DeviceIndex; } size_t OpenCLWrapper::GlobalMemSize() const { return GetInfo(PlatformIndex(), DeviceIndex(), CL_DEVICE_GLOBAL_MEM_SIZE); } uint OpenCLWrapper::LocalMemSize() const { return m_LocalMemSize; } size_t OpenCLWrapper::MaxAllocSize() const { return GetInfo(PlatformIndex(), DeviceIndex(), CL_DEVICE_MAX_MEM_ALLOC_SIZE); } +std::vector OpenCLWrapper::ProgramBuildErrors() const { return m_programBuildErrors; } /// /// Makes the even grid dims. @@ -1242,7 +1243,10 @@ bool OpenCLWrapper::CreateSPK(const string& name, const string& program, const s if (CheckCL(err, "cl::Kernel()")) return true;//Everything is ok. - } + } else { + for (std::vector::iterator i = m_DeviceVec.begin(); i != m_DeviceVec.end(); ++ i ) + m_programBuildErrors.push_back(spk.m_Program.getBuildInfo(*i)); + } } return false; diff --git a/Source/EmberCL/OpenCLWrapper.h b/Source/EmberCL/OpenCLWrapper.h index 551416b..ae9060c 100644 --- a/Source/EmberCL/OpenCLWrapper.h +++ b/Source/EmberCL/OpenCLWrapper.h @@ -192,6 +192,7 @@ public: uint LocalMemSize() const; size_t GlobalMemSize() const; size_t MaxAllocSize() const; + std::vector ProgramBuildErrors() const; static void MakeEvenGridDims(uint blockW, uint blockH, uint& gridW, uint& gridH); @@ -217,5 +218,6 @@ private: std::vector m_Buffers; std::vector m_Images; std::vector m_GLImages; + std::vector m_programBuildErrors; }; } diff --git a/Source/EmberCL/RendererCL.cpp b/Source/EmberCL/RendererCL.cpp index 4fe07ca..ce2c7f3 100644 --- a/Source/EmberCL/RendererCL.cpp +++ b/Source/EmberCL/RendererCL.cpp @@ -1276,7 +1276,11 @@ int RendererCL::MakeAndGetFinalAccumProgram(T& alphaBase, T& alphaScale) if (b) kernelIndex = m_Wrapper.FindKernelIndex(finalAccumEntryPoint);//Try to find it again, it will be present if successfully built. else + { + std::vector errors = m_Wrapper.ProgramBuildErrors(); + m_ErrorReport.insert(m_ErrorReport.end(), errors.begin(), errors.end()); m_ErrorReport.push_back(loc); + } } return kernelIndex;