From: sunghyun kim Date: Mon, 14 Apr 2025 04:25:00 +0000 (+0900) Subject: Added FILE_CACHE_SUPPORT hint for shader X-Git-Tag: dali_2.4.16~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6cf6810754bc83031e9bc0efc96dafca23c14b81;p=platform%2Fcore%2Fuifw%2Fdali-core.git Added FILE_CACHE_SUPPORT hint for shader Previously, all custom Shaders supported file caching, which was not the intended behavior. therefore, we added a flag to distinguish between internally generated code and externally generated code. if you want to enable File Caching for externally generated shader code, you can do so using this hint. (however, the validity of the shader must be verified by the app itself.) Change-Id: I5e0cb0c6f4177da8159c50e2e27a0833b2c6e54f --- diff --git a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h index a70c21f40..52b7411b1 100644 --- a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h +++ b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h @@ -2120,6 +2120,7 @@ public: inline void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override { + *length = bufSize; // commonly it is same. so we provide bufSize for test mGetProgramBinaryCalled = true; } diff --git a/dali/graphics-api/graphics-program-create-info.h b/dali/graphics-api/graphics-program-create-info.h index 3f98d1693..252bfe515 100644 --- a/dali/graphics-api/graphics-program-create-info.h +++ b/dali/graphics-api/graphics-program-create-info.h @@ -106,12 +106,25 @@ struct ProgramCreateInfo return *this; } + /** + * @brief Sets whether the program is used the funcation of file-caching by DALi. + * + * @param[in] value true if the program is used internally by DALi. Otherwise false. Default is false. + * @return reference to this structure. + */ + auto& SetFileCaching(bool value) + { + useFileCache = value; + return *this; + } + GraphicsStructureType type{GraphicsStructureType::PROGRAM_CREATE_INFO_STRUCT}; ExtensionCreateInfo* nextExtension{nullptr}; std::string_view name{}; const std::vector* shaderState{nullptr}; const AllocationCallbacks* allocationCallbacks{nullptr}; + bool useFileCache{false}; }; } // namespace Graphics diff --git a/dali/internal/event/rendering/shader-impl.cpp b/dali/internal/event/rendering/shader-impl.cpp index a6ff3c6bf..7dadf2263 100644 --- a/dali/internal/event/rendering/shader-impl.cpp +++ b/dali/internal/event/rendering/shader-impl.cpp @@ -44,7 +44,8 @@ DALI_PROPERTY_TABLE_END(DEFAULT_ACTOR_PROPERTY_START_INDEX, ShaderDefaultPropert Dali::Scripting::StringEnum ShaderHintsTable[] = {{"NONE", Dali::Shader::Hint::NONE}, {"OUTPUT_IS_TRANSPARENT", Dali::Shader::Hint::OUTPUT_IS_TRANSPARENT}, - {"MODIFIES_GEOMETRY", Dali::Shader::Hint::MODIFIES_GEOMETRY}}; + {"MODIFIES_GEOMETRY", Dali::Shader::Hint::MODIFIES_GEOMETRY}, + {"FILE_CACHE_SUPPORT", Dali::Shader::Hint::FILE_CACHE_SUPPORT}}; const uint32_t ShaderHintsTableSize = static_cast(sizeof(ShaderHintsTable) / sizeof(ShaderHintsTable[0])); diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 445d10da6..83ebe3ebd 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -492,6 +492,7 @@ Program* Renderer::PrepareProgram(const SceneGraph::RenderInstruction& instructi auto createInfo = Graphics::ProgramCreateInfo(); createInfo.SetShaderState(shaderStates); createInfo.SetName(shaderData->GetName()); + createInfo.SetFileCaching(shaderData->GetHints() & Dali::Shader::Hint::Value::FILE_CACHE_SUPPORT); auto graphicsProgram = mGraphicsController->CreateProgram(createInfo, nullptr); program->SetGraphicsProgram(std::move(graphicsProgram), *mUniformBufferManager, shader.GetConnectedUniformBlocks()); // generates reflection, defines memory reqs diff --git a/dali/public-api/rendering/shader.h b/dali/public-api/rendering/shader.h index ae9f34f01..4235b7a86 100644 --- a/dali/public-api/rendering/shader.h +++ b/dali/public-api/rendering/shader.h @@ -91,6 +91,7 @@ public: NONE = 0x00, ///< No hints @SINCE_1_1.45 OUTPUT_IS_TRANSPARENT = 0x01, ///< Might generate transparent alpha from opaque inputs @SINCE_1_1.45 MODIFIES_GEOMETRY = 0x02, ///< Might change position of vertices, this option disables any culling optimizations @SINCE_1_1.45 + FILE_CACHE_SUPPORT = 0x04, ///< Cache the shader in a file @SINCE_2_4.15 }; };