From 5da944f58921f3f1208753ab29daa8aad4b8f8a6 Mon Sep 17 00:00:00 2001 From: Person Date: Sun, 27 Aug 2017 21:24:33 -0700 Subject: [PATCH] Bug fixes: --Cleaner exit on some failures. --Better reporting of OpenCL errors. --- Source/Ember/Renderer.cpp | 22 +++++++++++++++++---- Source/EmberCL/OpenCLWrapper.cpp | 33 ++++++++++++++++++++++++++++++++ Source/EmberCL/OpenCLWrapper.h | 5 +++++ 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/Source/Ember/Renderer.cpp b/Source/Ember/Renderer.cpp index 34b3cbc..22f8bc7 100644 --- a/Source/Ember/Renderer.cpp +++ b/Source/Ember/Renderer.cpp @@ -446,7 +446,13 @@ eRenderStatus Renderer::Run(vector& finalImage, double time, si } if (!resume) - ResetBuckets(true, false);//Only reset hist here and do accum when needed later on. + { + if (!ResetBuckets(true, false))//Only reset hist here and do accum when needed later on. + { + success = eRenderStatus::RENDER_ERROR; + goto Finish; + } + } deTime = T(time) + *m_TemporalFilter->Deltas(); @@ -587,7 +593,12 @@ FilterAndAccum: else m_K2 = bucketT((Supersample() * Supersample()) / (area * m_ScaledQuality * m_TemporalFilter->SumFilt())); - ResetBuckets(false, true);//Only the histogram was reset above, now reset the density filtering buffer. + if (!ResetBuckets(false, true))//Only the histogram was reset above, now reset the density filtering buffer. + { + success = eRenderStatus::RENDER_ERROR; + goto Finish; + } + //t.Tic(); //Make sure a density filter was created with the latest values. ClampGteRef(m_Ember.m_MinRadDE, 0); @@ -616,8 +627,11 @@ FilterAndAccum: //Take special action if filtering exited prematurely. if (fullRun != eRenderStatus::RENDER_OK) { - ResetBuckets(false, true);//Reset the accumulator, come back and try again on the next call. - success = fullRun; + if (!ResetBuckets(false, true))//Reset the accumulator, come back and try again on the next call. + success = eRenderStatus::RENDER_ERROR; + else + success = fullRun; + goto Finish; } diff --git a/Source/EmberCL/OpenCLWrapper.cpp b/Source/EmberCL/OpenCLWrapper.cpp index 35898c0..3f0a0b0 100644 --- a/Source/EmberCL/OpenCLWrapper.cpp +++ b/Source/EmberCL/OpenCLWrapper.cpp @@ -985,6 +985,39 @@ size_t OpenCLWrapper::LocalMemSize() const { return m_LocalMemSize; } size_t OpenCLWrapper::GlobalMemSize() const { return m_GlobalMemSize; } size_t OpenCLWrapper::MaxAllocSize() const { return m_MaxAllocSize; } +/// +/// Clear the error report for this class as well as the global OpenCLInfo instance. +/// +void OpenCLWrapper::ClearErrorReport() +{ + EmberReport::ClearErrorReport(); + m_Info->ClearErrorReport(); +} + +/// +/// Concatenate and return the error report for this class and the +/// global OpenCLInfo instance as a single string. +/// +/// The concatenated error report string +string OpenCLWrapper::ErrorReportString() +{ + auto s = EmberReport::ErrorReportString(); + return s + m_Info->ErrorReportString(); +} + +/// +/// Concatenate and return the error report for this class and the +/// global OpenCLInfo instance as a vector of strings. +/// +/// The concatenated error report vector of strings +vector OpenCLWrapper::ErrorReport() +{ + auto ours = EmberReport::ErrorReport(); + auto s = m_Info->ErrorReport(); + ours.insert(ours.end(), s.begin(), s.end()); + return ours; +} + /// /// Make even grid dimensions. /// The size of the blocks in terms of threads must divide evenly into the total number of threads in the grid. diff --git a/Source/EmberCL/OpenCLWrapper.h b/Source/EmberCL/OpenCLWrapper.h index 4b3a006..4dbd8d4 100644 --- a/Source/EmberCL/OpenCLWrapper.h +++ b/Source/EmberCL/OpenCLWrapper.h @@ -179,6 +179,11 @@ public: size_t GlobalMemSize() const; size_t MaxAllocSize() const; + //Public virtual functions overridden from base classes. + virtual void ClearErrorReport() override; + virtual string ErrorReportString() override; + virtual vector ErrorReport() override; + static void MakeEvenGridDims(size_t blockW, size_t blockH, size_t& gridW, size_t& gridH); private: