Fix crash at terminate case when we use precompile option 05/318205/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Wed, 25 Sep 2024 11:30:41 +0000 (20:30 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Wed, 25 Sep 2024 11:31:01 +0000 (20:31 +0900)
Let we clear pre compiled programs before shutdown graphics.

Change-Id: I58f7a0dee07853cb9bb8992e80eb696e7511367b
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/integration-api/adaptor-framework/shader-precompiler.cpp
dali/integration-api/adaptor-framework/shader-precompiler.h
dali/internal/adaptor/common/combined-update-render-controller.cpp

index 1323ff4..f74fb3e 100644 (file)
@@ -102,4 +102,10 @@ void ShaderPreCompiler::Awake()
   mNeedsSleep = false;
   mConditionalWait.Notify(lock);
 }
+
+void ShaderPreCompiler::ClearPreCompiledPrograms()
+{
+  mProgram.clear();
+}
+
 } // namespace Dali
index 4272b5f..d269542 100644 (file)
@@ -42,7 +42,7 @@ struct RawShaderData
   std::vector<std::string_view> shaderName;
   std::string_view              vertexShader;
   std::string_view              fragmentShader;
-  bool custom;
+  bool                          custom;
 };
 
 /**
@@ -113,6 +113,12 @@ public:
    */
   void Awake();
 
+  /**
+   * @brief Remove all pre-compiled programs from cache.
+   * @note It must be called before graphics shutdown.
+   */
+  void ClearPreCompiledPrograms();
+
 private:
   /**
    * Construct a new ShaderPreCompiler.
index c94bffb..896fc06 100644 (file)
@@ -611,7 +611,7 @@ void CombinedUpdateRenderController::UpdateRenderThread()
           std::string fragmentShader;
           if(precompiledShader->custom)
           {
-            vertexShader = precompiledShader->vertexPrefix[i].data();
+            vertexShader   = precompiledShader->vertexPrefix[i].data();
             fragmentShader = precompiledShader->fragmentPrefix[i].data();
           }
           else
@@ -937,6 +937,9 @@ void CombinedUpdateRenderController::UpdateRenderThread()
   }
   TRACE_UPDATE_RENDER_BEGIN("DALI_RENDER_THREAD_FINISH");
 
+  // Remove pre-compiled program before context destroyed
+  ShaderPreCompiler::Get().ClearPreCompiledPrograms();
+
   // Inform core of context destruction
   mCore.ContextDestroyed();