Create GLES::Context per render surface
[platform/core/uifw/dali-adaptor.git] / dali / internal / graphics / gles-impl / gles-graphics-command-buffer.h
index cad69bd..5996863 100644 (file)
 
 namespace Dali::Graphics::GLES
 {
-class Texture;
 class Pipeline;
-
+class RenderPass;
+class Framebuffer;
+class CommandBuffer;
 enum class CommandType
 {
   FLUSH,
@@ -46,7 +47,11 @@ enum class CommandType
   DRAW_INDEXED_INDIRECT,
   SET_SCISSOR,
   SET_SCISSOR_TEST,
-  SET_VIEWPORT
+  SET_VIEWPORT,
+  BEGIN_RENDERPASS,
+  END_RENDERPASS,
+  EXECUTE_COMMAND_BUFFERS,
+  PRESENT_RENDER_TARGET,
 };
 
 /**
@@ -80,6 +85,12 @@ struct Command
         new(&bindTextures) decltype(bindTextures);
         break;
       }
+      case CommandType::BEGIN_RENDERPASS:
+      {
+        // run destructor
+        new(&beginRenderPass) decltype(beginRenderPass);
+        break;
+      }
       default:
       {
       }
@@ -100,6 +111,12 @@ struct Command
         InvokeDestructor(bindTextures);
         break;
       }
+      case CommandType::BEGIN_RENDERPASS:
+      {
+        // run destructor
+        InvokeDestructor(beginRenderPass);
+        break;
+      }
       default:
       {
       }
@@ -164,6 +181,20 @@ struct Command
         draw.drawIndexedIndirect = rhs.draw.drawIndexedIndirect;
         break;
       }
+      case CommandType::BEGIN_RENDERPASS:
+      {
+        new(&beginRenderPass) BeginRenderPassDescriptor(rhs.beginRenderPass);
+        break;
+      }
+      case CommandType::END_RENDERPASS:
+      {
+        break;
+      }
+      case CommandType::EXECUTE_COMMAND_BUFFERS:
+      {
+        executeCommandBuffers = rhs.executeCommandBuffers;
+        break;
+      }
       case CommandType::FLUSH:
       {
         // Nothing to do
@@ -184,6 +215,11 @@ struct Command
         viewport.region = rhs.viewport.region;
         break;
       }
+      case CommandType::PRESENT_RENDER_TARGET:
+      {
+        presentRenderTarget = rhs.presentRenderTarget;
+        break;
+      }
     }
     type = rhs.type;
   }
@@ -246,6 +282,20 @@ struct Command
         draw.drawIndexedIndirect = rhs.draw.drawIndexedIndirect;
         break;
       }
+      case CommandType::BEGIN_RENDERPASS:
+      {
+        new(&beginRenderPass) BeginRenderPassDescriptor(std::move(rhs.beginRenderPass));
+        break;
+      }
+      case CommandType::END_RENDERPASS:
+      {
+        break;
+      }
+      case CommandType::EXECUTE_COMMAND_BUFFERS:
+      {
+        executeCommandBuffers = std::move(rhs.executeCommandBuffers);
+        break;
+      }
       case CommandType::FLUSH:
       {
         // Nothing to do
@@ -266,6 +316,11 @@ struct Command
         viewport.region = rhs.viewport.region;
         break;
       }
+      case CommandType::PRESENT_RENDER_TARGET:
+      {
+        presentRenderTarget = rhs.presentRenderTarget;
+        break;
+      }
     }
     type = rhs.type;
   }
@@ -324,6 +379,23 @@ struct Command
     {
       Graphics::Viewport region;
     } viewport;
+
+    struct BeginRenderPassDescriptor
+      beginRenderPass;
+
+    struct
+    {
+    } endRenderPass;
+
+    struct
+    {
+      std::vector<GLES::CommandBuffer*> buffers;
+    } executeCommandBuffers;
+
+    struct
+    {
+      GLES::RenderTarget* targetToPresent;
+    } presentRenderTarget;
   };
 };
 
@@ -357,9 +429,9 @@ public:
                        Format                  format) override;
 
   void BeginRenderPass(
-    Graphics::RenderPass&   renderPass,
-    Graphics::RenderTarget& renderTarget,
-    Extent2D                renderArea,
+    Graphics::RenderPass*   renderPass,
+    Graphics::RenderTarget* renderTarget,
+    Rect2D                  renderArea,
     std::vector<ClearValue> clearValues) override;
 
   /**
@@ -373,6 +445,8 @@ public:
    */
   void EndRenderPass() override;
 
+  void ExecuteCommandBuffers(std::vector<Graphics::CommandBuffer*>&& commandBuffers) override;
+
   void Draw(
     uint32_t vertexCount,
     uint32_t instanceCount,
@@ -402,6 +476,16 @@ public:
 
   void SetViewportEnable(bool value) override;
 
+  /**
+   * @brief Presents specified render target
+   *
+   * @param[in] renderTarget Valid pointer to a RenderTarget
+   *
+   * It's internal command that schedules presentation of
+   * specified render target.
+   */
+  void PresentRenderTarget(GLES::RenderTarget* renderTarget);
+
   [[nodiscard]] const std::vector<Command>& GetCommands() const;
 
   void DestroyResource() override;