mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-06-30 21:36:33 -04:00
This is commit of Simon Detheridge's pull request "osx-opencl" with a few modifications.
-If we change OpenCLWrapper to capture build log errors, we don't need to manually concat them in RendererCL because the overridden ErrorReport() function already concatenates the errors from both classes. -Do not define T in OpenCL programs. We already have real_t to handle this. -Do keep the casting to real_t. However this should not be necessary because there is a command line option to do this automatically which we already use: -cl-single-precision-constant. The only reason we do this is because the Apple OpenCL compiler does not follow the standard and obviously ignores this option. Absolutely awful. -Fix a few improper casts in the CircleTrans1 and GlynnSim1 variations. -Add an automated OpenCL program build tester to EmberTester, as well as a cast checker.
This commit is contained in:
@ -1130,7 +1130,6 @@ uint OpenCLWrapper::DeviceIndex() const { return m_DeviceIndex; }
|
||||
size_t OpenCLWrapper::GlobalMemSize() const { return GetInfo<cl_ulong>(PlatformIndex(), DeviceIndex(), CL_DEVICE_GLOBAL_MEM_SIZE); }
|
||||
uint OpenCLWrapper::LocalMemSize() const { return m_LocalMemSize; }
|
||||
size_t OpenCLWrapper::MaxAllocSize() const { return GetInfo<cl_ulong>(PlatformIndex(), DeviceIndex(), CL_DEVICE_MAX_MEM_ALLOC_SIZE); }
|
||||
std::vector<std::string> OpenCLWrapper::ProgramBuildErrors() const { return m_programBuildErrors; }
|
||||
|
||||
/// <summary>
|
||||
/// Makes the even grid dims.
|
||||
@ -1243,9 +1242,11 @@ 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<cl::Device>::iterator i = m_DeviceVec.begin(); i != m_DeviceVec.end(); ++ i )
|
||||
m_programBuildErrors.push_back(spk.m_Program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(*i));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (auto& i : m_DeviceVec)
|
||||
m_ErrorReport.push_back(spk.m_Program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(i));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -218,6 +218,5 @@ private:
|
||||
std::vector<NamedBuffer> m_Buffers;
|
||||
std::vector<NamedImage2D> m_Images;
|
||||
std::vector<NamedImage2DGL> m_GLImages;
|
||||
std::vector<std::string> m_programBuildErrors;
|
||||
};
|
||||
}
|
||||
|
@ -501,8 +501,8 @@ string RendererCL<T>::ErrorReportString()
|
||||
template <typename T>
|
||||
vector<string> RendererCL<T>::ErrorReport()
|
||||
{
|
||||
vector<string> ours = EmberReport::ErrorReport();
|
||||
vector<string> wrappers = m_Wrapper.ErrorReport();
|
||||
auto ours = EmberReport::ErrorReport();
|
||||
auto wrappers = m_Wrapper.ErrorReport();
|
||||
|
||||
ours.insert(ours.end(), wrappers.begin(), wrappers.end());
|
||||
return ours;
|
||||
@ -759,12 +759,7 @@ bool RendererCL<T>::BuildIterProgramForEmber(bool doAccum)
|
||||
}
|
||||
else
|
||||
{
|
||||
//m_ErrorReport.push_back(string(loc) + "():\nBuilding the following program failed: \n" + m_IterKernel + "\n");
|
||||
|
||||
std::vector<std::string> errors = m_Wrapper.ProgramBuildErrors();
|
||||
m_ErrorReport.insert(m_ErrorReport.end(), errors.begin(), errors.end());
|
||||
m_ErrorReport.push_back(loc);
|
||||
|
||||
m_ErrorReport.push_back(string(loc) + "():\nBuilding the following program failed: \n" + m_IterKernel + "\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1272,7 +1267,6 @@ int RendererCL<T>::MakeAndGetDensityFilterProgram(size_t ss, uint filterWidth)
|
||||
else
|
||||
{
|
||||
m_ErrorReport.push_back(string(loc) + "():\nBuilding the following program failed: \n" + kernel + "\n");
|
||||
//cout << m_ErrorReport.back();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1302,11 +1296,7 @@ int RendererCL<T>::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<std::string> errors = m_Wrapper.ProgramBuildErrors();
|
||||
m_ErrorReport.insert(m_ErrorReport.end(), errors.begin(), errors.end());
|
||||
m_ErrorReport.push_back(loc);
|
||||
}
|
||||
}
|
||||
|
||||
return kernelIndex;
|
||||
|
@ -155,7 +155,9 @@ protected:
|
||||
virtual eRenderStatus AccumulatorToFinalImage(byte* pixels, size_t finalOffset) override;
|
||||
virtual EmberStats Iterate(size_t iterCount, size_t temporalSample) override;
|
||||
|
||||
#ifndef TEST_CL
|
||||
private:
|
||||
#endif
|
||||
//Private functions for making and running OpenCL programs.
|
||||
bool BuildIterProgramForEmber(bool doAccum = true);
|
||||
bool RunIter(size_t iterCount, size_t temporalSample, size_t& itersRan);
|
||||
|
Reference in New Issue
Block a user