[Tizen] Support to get shader language version for shader static API 65/305665/1 accepted/tizen/7.0/unified/20240207.172835
authorEunki, Hong <eunkiki.hong@samsung.com>
Mon, 5 Feb 2024 14:47:04 +0000 (23:47 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Tue, 6 Feb 2024 05:41:17 +0000 (14:41 +0900)
Let we support to get shader language version

Change-Id: Ic9a1c2223633acb965f945d04179d20a9d7b89b7
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp
automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.h
automated-tests/src/dali/utc-Dali-Shader.cpp
dali/integration-api/gl-abstraction.h
dali/internal/event/common/thread-local-storage.cpp
dali/internal/event/common/thread-local-storage.h
dali/internal/event/rendering/shader-impl.cpp
dali/internal/event/rendering/shader-impl.h
dali/public-api/rendering/shader.cpp
dali/public-api/rendering/shader.h

index 6021026cf9340ad4ac48e69a52aacb480eafc3b5..0c545e067ffdb9da7d790ac1bf8df9150880d111 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -176,6 +176,11 @@ bool TestGlAbstraction::IsBlendEquationSupported(DevelBlendEquation::Type blendE
   return true;
 }
 
+uint32_t TestGlAbstraction::GetShaderLanguageVersion()
+{
+  return mShaderLanguageVersion;
+}
+
 std::string TestGlAbstraction::GetShaderVersionPrefix()
 {
   return std::string("");
index 5e5fde3dbb57d1ec21c91da0d0933fd398f858b7..9051695e4432dfb7424428c21ed686c76d86b552 100644 (file)
@@ -2,7 +2,7 @@
 #define TEST_GL_ABSTRACTION_H
 
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -76,6 +76,8 @@ public:
 
   bool IsBlendEquationSupported(DevelBlendEquation::Type blendEquation) override;
 
+  uint32_t GetShaderLanguageVersion();
+
   std::string GetShaderVersionPrefix();
 
   std::string GetVertexShaderPrefix();
@@ -2592,6 +2594,8 @@ public:
   TraceCallStack mViewportTrace;
 
   // Shaders & Uniforms
+  uint32_t mShaderLanguageVersion{320u};
+
   GLuint                                 mLastShaderIdUsed;
   GLuint                                 mLastProgramIdUsed{0u};
   GLuint                                 mLastUniformIdUsed;
index bf378504f86dfff25478c91914b24bbdf572ef6f..b93dad87533d566375436c0807e8f6fe72f0e297 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -342,6 +342,36 @@ int UtcDaliShaderAnimatedProperty01(void)
   END_TEST;
 }
 
+int UtcDaliShaderGetShaderLanguageVersion(void)
+{
+  TestApplication application;
+
+  tet_infoline("Test get shader language version");
+
+  auto originalShaderVersion = application.GetGlAbstraction().GetShaderLanguageVersion();
+
+  try
+  {
+    uint32_t expectVersion                                = 100;
+    application.GetGlAbstraction().mShaderLanguageVersion = expectVersion;
+
+    DALI_TEST_EQUALS(Dali::Shader::GetShaderLanguageVersion(), expectVersion, TEST_LOCATION);
+
+    expectVersion                                         = 200;
+    application.GetGlAbstraction().mShaderLanguageVersion = expectVersion;
+
+    DALI_TEST_EQUALS(Dali::Shader::GetShaderLanguageVersion(), expectVersion, TEST_LOCATION);
+  }
+  catch(...)
+  {
+    DALI_TEST_CHECK(false);
+  }
+
+  application.GetGlAbstraction().mShaderLanguageVersion = originalShaderVersion;
+
+  END_TEST;
+}
+
 int UtcDaliShaderAnimatedProperty02(void)
 {
   TestApplication application;
@@ -506,10 +536,10 @@ int UtcDaliShaderPropertyValueConstructorMap(void)
 
   std::string   hintSet = "MODIFIES_GEOMETRY";
   Property::Map map;
-  map["vertex"]     = VertexSource;
-  map["fragment"]   = FragmentSource;
+  map["vertex"]        = VertexSource;
+  map["fragment"]      = FragmentSource;
   map["renderPassTag"] = 0;
-  map["hints"]      = hintSet;
+  map["hints"]         = hintSet;
 
   Shader shader = Shader::New(map);
 
@@ -538,10 +568,10 @@ int UtcDaliShaderPropertyValueConstructorMap2(void)
 
   std::string   hintSet = "MODIFIES_GEOMETRY";
   Property::Map map;
-  map["vertex"]     = VertexSource;
-  map["fragment"]   = FragmentSource;
+  map["vertex"]        = VertexSource;
+  map["fragment"]      = FragmentSource;
   map["renderPassTag"] = 0;
-  map["hints"]      = Shader::Hint::Value::MODIFIES_GEOMETRY;
+  map["hints"]         = Shader::Hint::Value::MODIFIES_GEOMETRY;
 
   Shader shader = Shader::New(map);
 
@@ -571,15 +601,15 @@ int UtcDaliShaderPropertyValueConstructorArray(void)
 
   std::string   hintSet = "MODIFIES_GEOMETRY";
   Property::Map map[2];
-  map[0]["vertex"]     = VertexSource;
-  map[0]["fragment"]   = FragmentSource;
+  map[0]["vertex"]        = VertexSource;
+  map[0]["fragment"]      = FragmentSource;
   map[0]["renderPassTag"] = 0;
-  map[0]["hints"]      = hintSet;
+  map[0]["hints"]         = hintSet;
 
-  map[1]["vertex"]     = VertexSource2;
-  map[1]["fragment"]   = FragmentSource2;
+  map[1]["vertex"]        = VertexSource2;
+  map[1]["fragment"]      = FragmentSource2;
   map[1]["renderPassTag"] = 1;
-  map[1]["hints"]      = hintSet;
+  map[1]["hints"]         = hintSet;
 
   Property::Array array;
   array.PushBack(map[0]);
@@ -621,15 +651,15 @@ int UtcDaliShaderProgramPropertyArray(void)
   std::string hintSet = "MODIFIES_GEOMETRY";
 
   Property::Map map[2];
-  map[0]["vertex"]     = VertexSource;
-  map[0]["fragment"]   = FragmentSource;
+  map[0]["vertex"]        = VertexSource;
+  map[0]["fragment"]      = FragmentSource;
   map[0]["renderPassTag"] = 0;
-  map[0]["hints"]      = hintSet;
+  map[0]["hints"]         = hintSet;
 
-  map[1]["vertex"]     = VertexSource2;
-  map[1]["fragment"]   = FragmentSource2;
+  map[1]["vertex"]        = VertexSource2;
+  map[1]["fragment"]      = FragmentSource2;
   map[1]["renderPassTag"] = 1;
-  map[1]["hints"]      = hintSet;
+  map[1]["hints"]         = hintSet;
 
   Property::Array array;
   array.PushBack(map[0]);
index 2b06e3a55cc2fe291035d8c1f57b7254a099b376..61bcc2002e4f4433de630170582c7c74cd35406b 100644 (file)
@@ -141,6 +141,12 @@ public:
    */
   virtual bool IsBlendEquationSupported(DevelBlendEquation::Type blendEquation) = 0;
 
+  /**
+   * Returns shading language version.
+   * @Return shading language version.
+   */
+  virtual uint32_t GetShaderLanguageVersion() = 0;
+
   /**
    * Returns shader prefix of shading language version.
    * @Return shader prefix of shading language version.
index 6f7aad3c1522a5dfd7f7461c98a03d572ffe1914..6e765a044542d4332a9896932c5ea9c356baed14 100644 (file)
@@ -164,6 +164,11 @@ bool ThreadLocalStorage::IsBlendEquationSupported(DevelBlendEquation::Type blend
   return mCore->GetGlAbstraction().IsBlendEquationSupported(blendEquation);
 }
 
+uint32_t ThreadLocalStorage::GetShaderLanguageVersion()
+{
+  return mCore->GetGlAbstraction().GetShaderLanguageVersion();
+}
+
 std::string ThreadLocalStorage::GetShaderVersionPrefix()
 {
   return mCore->GetGlAbstraction().GetShaderVersionPrefix();
index b6a440565799469682939f950d9c8d455610f51e..d0466f40216c453b4502cfd925144f29e8e44be5 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_INTERNAL_THREAD_LOCAL_STORAGE_H
 
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -174,6 +174,11 @@ public:
    */
   bool IsBlendEquationSupported(DevelBlendEquation::Type blendEquation);
 
+  /**
+   * @brief Returns shader prefix of shading language version.
+   */
+  uint32_t GetShaderLanguageVersion();
+
   /**
    * @brief Returns shader prefix of shading language version.
    */
index 57b8b59301e4be654e74f8aacf7475fb38ab8e83..9faf9bc6434cbff7d8ec9b4ea3f09fe093fc99ae 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -316,6 +316,12 @@ Shader::~Shader()
   }
 }
 
+uint32_t Shader::GetShaderLanguageVersion()
+{
+  Dali::Internal::ThreadLocalStorage& tls = Dali::Internal::ThreadLocalStorage::Get();
+  return tls.GetShaderLanguageVersion();
+}
+
 std::string Shader::GetShaderVersionPrefix()
 {
   Dali::Internal::ThreadLocalStorage& tls = Dali::Internal::ThreadLocalStorage::Get();
index ca32c180f725dd18ee4c1e30ad3f325f2127b452..42633db4c693305d353568ea40eaacd1f4a740c0 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_INTERNAL_SHADER_H
 
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -112,14 +112,19 @@ protected:
   ~Shader() override;
 
 private: // unimplemented methods
-  Shader()                         = delete;
-  Shader(const Shader&)            = delete;
+  Shader()              = delete;
+  Shader(const Shader&) = delete;
   Shader& operator=(const Shader&) = delete;
 
 private:
   std::vector<Internal::ShaderDataPtr> mShaderDataList;
 
 public:
+  /**
+   * @copydoc Dali::Shader::GetShaderLanguageVersion()
+   */
+  static uint32_t GetShaderLanguageVersion();
+
   /**
    * @copydoc Dali::Shader::GetShaderVersionPrefix()
    */
index 02b95ff2fc45851280ce2e6502e49b369beee4c3..0931b2b22cc0af4c5c9abe47e4225794a0b70c44 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -59,6 +59,11 @@ Shader::Shader(Internal::Shader* pointer)
 {
 }
 
+uint32_t Shader::GetShaderLanguageVersion()
+{
+  return Dali::Internal::Shader::GetShaderLanguageVersion();
+}
+
 std::string Shader::GetShaderVersionPrefix()
 {
   return Dali::Internal::Shader::GetShaderVersionPrefix();
index fe7a8831064fe1a71f83174e6b93edfbf6b2edc1..2911f006aae39672e0c39f153a4999b8227c78fe 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_SHADER_H
 
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -200,6 +200,15 @@ public:
    */
   Shader& operator=(Shader&& rhs);
 
+  /**
+   * @brief Get the number of shading language version.
+   * @note This can potentially block until GL has been initialized
+   * when the first time any DALi application is launched in the system.
+   * @SINCE_2_3.10
+   * @return shader languange versoin as integer.
+   */
+  static uint32_t GetShaderLanguageVersion();
+
   /**
    * @brief Get shader preprocessor of shading language version.
    * @note This can potentially block until GL has been initialized