[Tizen] CleanUp gles version setter + Get exact FBO MSAA sample level
[platform/core/uifw/dali-adaptor.git] / dali / internal / graphics / gles-impl / gles-graphics-types.h
index b8b6fcd..5e0025e 100644 (file)
@@ -9,6 +9,10 @@
 namespace Dali::Graphics::GLES
 {
 class Buffer;
+class RenderPass;
+class RenderTarget;
+class Framebuffer;
+
 // Conversion functions
 /**
  * Stucture delivers format and type that can be used
@@ -206,35 +210,11 @@ struct GLTextureFormatType
 
       // BGR not supported in GLES
       case Graphics::Format::B8G8R8_UNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::B8G8R8_SNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::B8G8R8_USCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::B8G8R8_SSCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::B8G8R8_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::B8G8R8_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::B8G8R8_SRGB:
       {
         Assign(0, 0);
@@ -345,35 +325,11 @@ struct GLTextureFormatType
 
       // ABGR not supported
       case Graphics::Format::A8B8G8R8_UNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A8B8G8R8_SNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A8B8G8R8_USCALED_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A8B8G8R8_SSCALED_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A8B8G8R8_UINT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A8B8G8R8_SINT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A8B8G8R8_SRGB_PACK32:
       {
         Assign(0, 0);
@@ -382,160 +338,40 @@ struct GLTextureFormatType
 
       // TBD which of the formats are supported
       case Graphics::Format::A2R10G10B10_UNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2R10G10B10_SNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2R10G10B10_USCALED_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2R10G10B10_SSCALED_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2R10G10B10_UINT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2R10G10B10_SINT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2B10G10R10_UNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2B10G10R10_SNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2B10G10R10_USCALED_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2B10G10R10_SSCALED_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2B10G10R10_UINT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::A2B10G10R10_SINT_PACK32:
       {
         Assign(0, 0);
         break;
       }
       case Graphics::Format::R16_UNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16_SNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16_USCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16_SSCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_UNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_SNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_USCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_SSCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16_UNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16_SNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16_USCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16_SSCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16_SINT:
       {
         Assign(0, 0);
@@ -544,288 +380,116 @@ struct GLTextureFormatType
       case Graphics::Format::R16G16B16_SFLOAT:
       {
         // GLES 3.0 floating point formats.
-        Assign(GL_RGB, GL_HALF_FLOAT);
+        AssignInternal(GL_RGB, GL_R11F_G11F_B10F, GL_HALF_FLOAT); // DALi uses compact internal format
         break;
       }
       case Graphics::Format::R16G16B16A16_UNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16A16_SNORM:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16A16_USCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16A16_SSCALED:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16A16_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16A16_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R16G16B16A16_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32G32_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32G32_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32G32_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32G32B32_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::R32G32B32_SINT:
       {
         Assign(0, 0);
         break;
       }
-      case Graphics::Format::R32G32B32_SFLOAT:
-      {
-        // GLES 3.0 floating point formats.
-        Assign(GL_RGB, GL_FLOAT);
-        break;
-      }
-      case Graphics::Format::R32G32B32A32_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R32G32B32A32_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R32G32B32A32_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64B64_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64B64_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64B64_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64B64A64_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64B64A64_SINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::R64G64B64A64_SFLOAT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::B10G11R11_UFLOAT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::E5B9G9R9_UFLOAT_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::D16_UNORM:
-      {
-        // GLES 3.0 depth and stencil formats
-        Assign(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
-        break;
-      }
-      case Graphics::Format::X8_D24_UNORM_PACK32:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::D32_SFLOAT:
-      {
-        // GLES 3.0 depth and stencil formats
-        Assign(GL_DEPTH_COMPONENT, GL_FLOAT);
-        break;
-      }
-      case Graphics::Format::S8_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::D16_UNORM_S8_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::D24_UNORM_S8_UINT:
-      {
-        // GLES 3.0 depth and stencil formats
-        Assign(GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8);
-        break;
-      }
-      case Graphics::Format::D32_SFLOAT_S8_UINT:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::BC1_RGB_UNORM_BLOCK:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::BC1_RGB_SRGB_BLOCK:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::BC1_RGBA_UNORM_BLOCK:
-      {
-        Assign(0, 0);
-        break;
-      }
-      case Graphics::Format::BC1_RGBA_SRGB_BLOCK:
+      case Graphics::Format::R32G32B32_SFLOAT:
       {
-        Assign(0, 0);
+        AssignInternal(GL_RGB, GL_R11F_G11F_B10F, GL_FLOAT); // DALi uses compact internal format
         break;
       }
-      case Graphics::Format::BC2_UNORM_BLOCK:
+      case Graphics::Format::R32G32B32A32_UINT:
+      case Graphics::Format::R32G32B32A32_SINT:
+      case Graphics::Format::R32G32B32A32_SFLOAT:
       {
         Assign(0, 0);
         break;
       }
-      case Graphics::Format::BC2_SRGB_BLOCK:
+      case Graphics::Format::R64_UINT:
+      case Graphics::Format::R64_SINT:
+      case Graphics::Format::R64_SFLOAT:
+      case Graphics::Format::R64G64_UINT:
+      case Graphics::Format::R64G64_SINT:
+      case Graphics::Format::R64G64_SFLOAT:
+      case Graphics::Format::R64G64B64_UINT:
+      case Graphics::Format::R64G64B64_SINT:
+      case Graphics::Format::R64G64B64_SFLOAT:
+      case Graphics::Format::R64G64B64A64_UINT:
+      case Graphics::Format::R64G64B64A64_SINT:
+      case Graphics::Format::R64G64B64A64_SFLOAT:
       {
         Assign(0, 0);
         break;
       }
-      case Graphics::Format::BC3_UNORM_BLOCK:
+      case Graphics::Format::R11G11B10_UFLOAT_PACK32:
       {
-        Assign(0, 0);
+        AssignInternal(GL_RGB, GL_R11F_G11F_B10F, GL_FLOAT);
         break;
       }
-      case Graphics::Format::BC3_SRGB_BLOCK:
+      case Graphics::Format::B10G11R11_UFLOAT_PACK32:
+      case Graphics::Format::E5B9G9R9_UFLOAT_PACK32:
       {
         Assign(0, 0);
         break;
       }
-      case Graphics::Format::BC4_UNORM_BLOCK:
+      case Graphics::Format::D16_UNORM:
       {
-        Assign(0, 0);
+        // GLES 3.0 depth and stencil formats
+        Assign(GL_DEPTH_COMPONENT, GL_UNSIGNED_INT);
         break;
       }
-      case Graphics::Format::BC4_SNORM_BLOCK:
+      case Graphics::Format::X8_D24_UNORM_PACK32:
       {
         Assign(0, 0);
         break;
       }
-      case Graphics::Format::BC5_UNORM_BLOCK:
+      case Graphics::Format::D32_SFLOAT:
       {
-        Assign(0, 0);
+        // GLES 3.0 depth and stencil formats
+        AssignInternal(GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT32F, GL_FLOAT);
         break;
       }
-      case Graphics::Format::BC5_SNORM_BLOCK:
+      case Graphics::Format::S8_UINT:
+      case Graphics::Format::D16_UNORM_S8_UINT:
       {
         Assign(0, 0);
         break;
       }
-      case Graphics::Format::BC6H_UFLOAT_BLOCK:
+      case Graphics::Format::D24_UNORM_S8_UINT:
       {
-        Assign(0, 0);
+        // GLES 3.0 depth and stencil formats
+        AssignInternal(GL_DEPTH_STENCIL, GL_DEPTH24_STENCIL8, GL_UNSIGNED_INT_24_8);
         break;
       }
-      case Graphics::Format::BC6H_SFLOAT_BLOCK:
+      case Graphics::Format::D32_SFLOAT_S8_UINT:
       {
         Assign(0, 0);
         break;
       }
+      case Graphics::Format::BC1_RGB_UNORM_BLOCK:
+      case Graphics::Format::BC1_RGB_SRGB_BLOCK:
+      case Graphics::Format::BC1_RGBA_UNORM_BLOCK:
+      case Graphics::Format::BC1_RGBA_SRGB_BLOCK:
+      case Graphics::Format::BC2_UNORM_BLOCK:
+      case Graphics::Format::BC2_SRGB_BLOCK:
+      case Graphics::Format::BC3_UNORM_BLOCK:
+      case Graphics::Format::BC3_SRGB_BLOCK:
+      case Graphics::Format::BC4_UNORM_BLOCK:
+      case Graphics::Format::BC4_SNORM_BLOCK:
+      case Graphics::Format::BC5_UNORM_BLOCK:
+      case Graphics::Format::BC5_SNORM_BLOCK:
+      case Graphics::Format::BC6H_UFLOAT_BLOCK:
+      case Graphics::Format::BC6H_SFLOAT_BLOCK:
       case Graphics::Format::BC7_UNORM_BLOCK:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::BC7_SRGB_BLOCK:
       {
         Assign(0, 0);
@@ -857,12 +521,12 @@ struct GLTextureFormatType
       }
       case Graphics::Format::ETC2_R8G8B8A8_UNORM_BLOCK:
       {
-        Assign(0, 0);
+        Assign(GL_COMPRESSED_RGBA8_ETC2_EAC, 0);
         break;
       }
       case Graphics::Format::ETC2_R8G8B8A8_SRGB_BLOCK:
       {
-        Assign(0, 0);
+        Assign(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, 0);
         break;
       }
       case Graphics::Format::EAC_R11_UNORM_BLOCK:
@@ -1070,30 +734,10 @@ struct GLTextureFormatType
         break;
       }
       case Graphics::Format::PVRTC2_2BPP_UNORM_BLOCK_IMG:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::PVRTC2_4BPP_UNORM_BLOCK_IMG:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::PVRTC1_2BPP_SRGB_BLOCK_IMG:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::PVRTC1_4BPP_SRGB_BLOCK_IMG:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::PVRTC2_2BPP_SRGB_BLOCK_IMG:
-      {
-        Assign(0, 0);
-        break;
-      }
       case Graphics::Format::PVRTC2_4BPP_SRGB_BLOCK_IMG:
       {
         Assign(0, 0);
@@ -1104,14 +748,87 @@ struct GLTextureFormatType
 
   constexpr inline void Assign(uint32_t f, uint32_t t)
   {
-    format = f;
-    type   = t;
+    format         = f;
+    internalFormat = f;
+    type           = t;
+  }
+  constexpr inline void AssignInternal(uint32_t f, uint32_t i, uint32_t t)
+  {
+    format         = f;
+    internalFormat = i;
+    type           = t;
   }
 
   uint32_t format{0};
+  uint32_t internalFormat{0};
   uint32_t type{0};
 };
 
+struct FormatCompression
+{
+  /**
+   * Constuctor from Graphics::Format
+   * @param value
+   */
+  constexpr explicit FormatCompression(Graphics::Format value)
+  {
+    switch(value)
+    {
+      case Graphics::Format::ETC2_R8G8B8_UNORM_BLOCK:
+      case Graphics::Format::ETC2_R8G8B8_SRGB_BLOCK:
+      case Graphics::Format::ETC2_R8G8B8A1_UNORM_BLOCK:
+      case Graphics::Format::ETC2_R8G8B8A1_SRGB_BLOCK:
+      case Graphics::Format::ETC2_R8G8B8A8_UNORM_BLOCK:
+      case Graphics::Format::ETC2_R8G8B8A8_SRGB_BLOCK:
+      case Graphics::Format::EAC_R11_UNORM_BLOCK:
+      case Graphics::Format::EAC_R11_SNORM_BLOCK:
+      case Graphics::Format::EAC_R11G11_UNORM_BLOCK:
+      case Graphics::Format::EAC_R11G11_SNORM_BLOCK:
+      case Graphics::Format::ASTC_4x4_UNORM_BLOCK:
+      case Graphics::Format::ASTC_4x4_SRGB_BLOCK:
+      case Graphics::Format::ASTC_5x4_UNORM_BLOCK:
+      case Graphics::Format::ASTC_5x4_SRGB_BLOCK:
+      case Graphics::Format::ASTC_5x5_UNORM_BLOCK:
+      case Graphics::Format::ASTC_5x5_SRGB_BLOCK:
+      case Graphics::Format::ASTC_6x5_UNORM_BLOCK:
+      case Graphics::Format::ASTC_6x5_SRGB_BLOCK:
+      case Graphics::Format::ASTC_6x6_UNORM_BLOCK:
+      case Graphics::Format::ASTC_6x6_SRGB_BLOCK:
+      case Graphics::Format::ASTC_8x5_UNORM_BLOCK:
+      case Graphics::Format::ASTC_8x5_SRGB_BLOCK:
+      case Graphics::Format::ASTC_8x6_UNORM_BLOCK:
+      case Graphics::Format::ASTC_8x6_SRGB_BLOCK:
+      case Graphics::Format::ASTC_8x8_UNORM_BLOCK:
+      case Graphics::Format::ASTC_8x8_SRGB_BLOCK:
+      case Graphics::Format::ASTC_10x5_UNORM_BLOCK:
+      case Graphics::Format::ASTC_10x5_SRGB_BLOCK:
+      case Graphics::Format::ASTC_10x6_UNORM_BLOCK:
+      case Graphics::Format::ASTC_10x6_SRGB_BLOCK:
+      case Graphics::Format::ASTC_10x8_UNORM_BLOCK:
+      case Graphics::Format::ASTC_10x8_SRGB_BLOCK:
+      case Graphics::Format::ASTC_10x10_UNORM_BLOCK:
+      case Graphics::Format::ASTC_10x10_SRGB_BLOCK:
+      case Graphics::Format::ASTC_12x10_UNORM_BLOCK:
+      case Graphics::Format::ASTC_12x10_SRGB_BLOCK:
+      case Graphics::Format::ASTC_12x12_UNORM_BLOCK:
+      case Graphics::Format::ASTC_12x12_SRGB_BLOCK:
+      case Graphics::Format::PVRTC1_2BPP_UNORM_BLOCK_IMG:
+      case Graphics::Format::PVRTC1_4BPP_UNORM_BLOCK_IMG:
+      case Graphics::Format::PVRTC2_2BPP_UNORM_BLOCK_IMG:
+      case Graphics::Format::PVRTC2_4BPP_UNORM_BLOCK_IMG:
+      case Graphics::Format::PVRTC1_2BPP_SRGB_BLOCK_IMG:
+      case Graphics::Format::PVRTC1_4BPP_SRGB_BLOCK_IMG:
+      case Graphics::Format::PVRTC2_2BPP_SRGB_BLOCK_IMG:
+      case Graphics::Format::PVRTC2_4BPP_SRGB_BLOCK_IMG:
+        compressed = true;
+        break;
+      default:
+        break;
+    }
+  }
+  bool compressed{false};
+};
+
 struct GLSamplerFilter
 {
   constexpr explicit GLSamplerFilter(Graphics::SamplerFilter filter)
@@ -1331,6 +1048,76 @@ struct GLAddressMode
   GLenum texParameter{GL_CLAMP_TO_EDGE};
 };
 
+struct GLCompareOp
+{
+  constexpr explicit GLCompareOp(Graphics::CompareOp compareOp)
+  {
+    switch(compareOp)
+    {
+      case Graphics::CompareOp::NEVER:
+        op = GL_NEVER;
+        break;
+      case Graphics::CompareOp::LESS:
+        op = GL_LESS;
+        break;
+      case Graphics::CompareOp::EQUAL:
+        op = GL_EQUAL;
+        break;
+      case Graphics::CompareOp::LESS_OR_EQUAL:
+        op = GL_LEQUAL;
+        break;
+      case Graphics::CompareOp::GREATER:
+        op = GL_GREATER;
+        break;
+      case Graphics::CompareOp::NOT_EQUAL:
+        op = GL_NOTEQUAL;
+        break;
+      case Graphics::CompareOp::GREATER_OR_EQUAL:
+        op = GL_GEQUAL;
+        break;
+      case Graphics::CompareOp::ALWAYS:
+        op = GL_ALWAYS;
+        break;
+    }
+  }
+  GLenum op{GL_LESS};
+};
+
+struct GLStencilOp
+{
+  constexpr explicit GLStencilOp(Graphics::StencilOp stencilOp)
+  {
+    switch(stencilOp)
+    {
+      case Graphics::StencilOp::KEEP:
+        op = GL_KEEP;
+        break;
+      case Graphics::StencilOp::ZERO:
+        op = GL_ZERO;
+        break;
+      case Graphics::StencilOp::REPLACE:
+        op = GL_REPLACE;
+        break;
+      case Graphics::StencilOp::INCREMENT_AND_CLAMP:
+        op = GL_INCR;
+        break;
+      case Graphics::StencilOp::DECREMENT_AND_CLAMP:
+        op = GL_DECR;
+        break;
+      case Graphics::StencilOp::INVERT:
+        op = GL_INVERT;
+        break;
+      case Graphics::StencilOp::INCREMENT_AND_WRAP:
+        op = GL_INCR_WRAP;
+        break;
+      case Graphics::StencilOp::DECREMENT_AND_WRAP:
+        op = GL_DECR_WRAP;
+        break;
+    }
+  }
+  GLenum op{GL_KEEP};
+};
+
 /**
  * @brief Descriptor of single buffer binding within
  * command buffer.
@@ -1376,7 +1163,7 @@ struct DrawCallDescriptor
   {
     DRAW,
     DRAW_INDEXED,
-    DRAW_INDEXED_INDIRECT
+    DRAW_INDEXED_INDIRECT,
   };
 
   Type type{}; ///< Type of the draw call
@@ -1496,6 +1283,11 @@ struct GLIndexFormat
         format = GL_UNSIGNED_SHORT;
         break;
       }
+      case Format::R32_UINT:
+      {
+        format = GL_UNSIGNED_INT;
+        break;
+      }
       default:
       {
         format = 0;
@@ -1669,6 +1461,81 @@ struct GLBlendOp
         glBlendOp = GL_MAX;
         break;
       }
+      case Graphics::BlendOp::MULTIPLY:
+      {
+        glBlendOp = GL_MULTIPLY;
+        break;
+      }
+      case Graphics::BlendOp::SCREEN:
+      {
+        glBlendOp = GL_SCREEN;
+        break;
+      }
+      case Graphics::BlendOp::OVERLAY:
+      {
+        glBlendOp = GL_OVERLAY;
+        break;
+      }
+      case Graphics::BlendOp::DARKEN:
+      {
+        glBlendOp = GL_DARKEN;
+        break;
+      }
+      case Graphics::BlendOp::LIGHTEN:
+      {
+        glBlendOp = GL_LIGHTEN;
+        break;
+      }
+      case Graphics::BlendOp::COLOR_DODGE:
+      {
+        glBlendOp = GL_COLORDODGE;
+        break;
+      }
+      case Graphics::BlendOp::COLOR_BURN:
+      {
+        glBlendOp = GL_COLORBURN;
+        break;
+      }
+      case Graphics::BlendOp::HARD_LIGHT:
+      {
+        glBlendOp = GL_HARDLIGHT;
+        break;
+      }
+      case Graphics::BlendOp::SOFT_LIGHT:
+      {
+        glBlendOp = GL_SOFTLIGHT;
+        break;
+      }
+      case Graphics::BlendOp::DIFFERENCE:
+      {
+        glBlendOp = GL_DIFFERENCE;
+        break;
+      }
+      case Graphics::BlendOp::EXCLUSION:
+      {
+        glBlendOp = GL_EXCLUSION;
+        break;
+      }
+      case Graphics::BlendOp::HUE:
+      {
+        glBlendOp = GL_HSL_HUE;
+        break;
+      }
+      case Graphics::BlendOp::SATURATION:
+      {
+        glBlendOp = GL_HSL_SATURATION;
+        break;
+      }
+      case Graphics::BlendOp::COLOR:
+      {
+        glBlendOp = GL_HSL_COLOR;
+        break;
+      }
+      case Graphics::BlendOp::LUMINOSITY:
+      {
+        glBlendOp = GL_HSL_LUMINOSITY;
+        break;
+      }
     }
   }
 
@@ -1866,6 +1733,70 @@ enum class GLESVersion
   GLES_32 = 32
 };
 
+/**
+ * @brief Types of bond texture cached in the context
+ */
+enum class BoundTextureType
+{
+  TEXTURE_2D,
+  TEXTURE_3D,
+  TEXTURE_CUBEMAP,
+  TEXTURE_EXTERNAL_OES
+};
+
+/**
+ * This class stores indirect pointer, used by the CommandBuffer
+ * to store data allocated within resizeable pool
+ */
+template<class T>
+struct IndirectPtr
+{
+  uint32_t ptr;  // relative pointer
+  void**   base; // base pointer
+
+  inline T* operator->()
+  {
+    return reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr));
+  }
+
+  inline T& operator*()
+  {
+    return *reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr));
+  }
+
+  // Returns indirect pointer casted to requested type
+  T* Ptr() const
+  {
+    auto val = reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr));
+    return val;
+  }
+
+  inline T& operator[](int index)
+  {
+    return reinterpret_cast<T*>((reinterpret_cast<uint8_t*>(*base) + ptr))[index];
+  }
+
+  // Fake assignment operator for void* type
+  inline IndirectPtr<T>& operator=(void* p)
+  {
+    ptr  = 0;
+    base = nullptr;
+    return *this;
+  }
+};
+
+/**
+ * The descriptor of BeginRenderPass command
+ */
+struct BeginRenderPassDescriptor
+{
+  const GLES::RenderPass*   renderPass;
+  const GLES::RenderTarget* renderTarget;
+  Rect2D                    renderArea;
+  IndirectPtr<ClearValue>   clearValues;
+  uint32_t                  clearValuesCount;
+};
+
 } // namespace Dali::Graphics::GLES
 
 #endif //DALI_GRAPHICS_API_TYPES_H