Adding render pass & target to CmdBuffer BeginInfo 42/317642/3
authorDavid Steele <david.steele@samsung.com>
Thu, 12 Sep 2024 18:20:59 +0000 (19:20 +0100)
committerDavid Steele <david.steele@samsung.com>
Fri, 13 Sep 2024 12:45:11 +0000 (13:45 +0100)
Change-Id: I79315941628b505ece31c4ba7e92070b2cb46c47

dali/graphics-api/graphics-types.h
dali/internal/render/common/render-algorithms.cpp
dali/internal/render/common/render-algorithms.h
dali/internal/render/common/render-manager.cpp

index 4fd4adcb6e77f1e1b170abcdc57500ff5da028a9..ce91dab7f68562b41f1936d8386119c151ab5cde 100644 (file)
@@ -37,6 +37,8 @@ class Framebuffer;
 class Program;
 class Shader;
 class Texture;
+class RenderTarget;
+class RenderPass;
 
 /**
  * @brief Structure describes 2D offset
@@ -575,7 +577,7 @@ struct RasterizationState
 struct InputAssemblyState
 {
   PrimitiveTopology topology{};
-  bool              primitiveRestartEnable{true};
+  bool              primitiveRestartEnable{false};
 
   auto& SetTopology(PrimitiveTopology value)
   {
@@ -585,7 +587,7 @@ struct InputAssemblyState
 
   auto& SetPrimitiveRestartEnable(bool value)
   {
-    primitiveRestartEnable = true;
+    primitiveRestartEnable = value;
     return *this;
   }
 };
@@ -1296,7 +1298,23 @@ inline CommandBufferUsageFlags operator|(T flags, CommandBufferUsageFlagBits bit
 struct CommandBufferBeginInfo
 {
   CommandBufferUsageFlags usage;
-  // Don't care about inheritance yet. Can extend as required.
+  const RenderPass*       renderPass{nullptr};
+  const RenderTarget*     renderTarget{nullptr};
+  auto&                   SetUsage(CommandBufferUsageFlags flags)
+  {
+    usage = flags;
+    return *this;
+  }
+  auto& SetRenderPass(const RenderPass& value)
+  {
+    renderPass = &value;
+    return *this;
+  }
+  auto& SetRenderTarget(const RenderTarget& value)
+  {
+    renderTarget = &value;
+    return *this;
+  }
 };
 
 /**
@@ -1517,8 +1535,7 @@ struct DefaultDeleter
   template<class P, template<typename> typename U>
   DefaultDeleter(const U<P>& deleter)
   {
-    deleteFunction = [](T* object)
-    { U<P>()(static_cast<P*>(object)); };
+    deleteFunction = [](T* object) { U<P>()(static_cast<P*>(object)); };
   }
 
   /**
index 3b53f48912a1560fdb6401bfea445ed32a00378d..62a3b1257a4c076f32f95e67d8edb8c8725b2cc8 100644 (file)
@@ -593,6 +593,7 @@ inline void RenderAlgorithms::ProcessRenderList(const RenderList&
                                                 const Rect<int>&                    rootClippingRect,
                                                 int                                 orientation,
                                                 const Uint16Pair&                   sceneSize,
+                                                Graphics::RenderPass*               renderPass,
                                                 Graphics::RenderTarget*             renderTarget)
 {
   DALI_PRINT_RENDER_LIST(renderList);
@@ -616,7 +617,9 @@ inline void RenderAlgorithms::ProcessRenderList(const RenderList&
 
   // We are always "inside" a render pass here.
   Graphics::CommandBufferBeginInfo info;
-  info.usage = 0 | Graphics::CommandBufferUsageFlagBits::ONE_TIME_SUBMIT;
+  info.SetUsage(0 | Graphics::CommandBufferUsageFlagBits::RENDER_PASS_CONTINUE)
+    .SetRenderPass(*renderPass)
+    .SetRenderTarget(*renderTarget);
   secondaryCommandBuffer.Begin(info);
 
   secondaryCommandBuffer.SetViewport(ViewportFromClippingBox(sceneSize, mViewportRectangle, orientation));
@@ -764,6 +767,7 @@ void RenderAlgorithms::ProcessRenderInstruction(const RenderInstruction&
                                                 const Rect<int>&                    rootClippingRect,
                                                 int                                 orientation,
                                                 const Uint16Pair&                   sceneSize,
+                                                Graphics::RenderPass*               renderPass,
                                                 Graphics::RenderTarget*             renderTarget)
 {
   DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_RENDER_INSTRUCTION_PROCESS", [&](std::ostringstream& oss) { oss << "[" << instruction.RenderListCount() << "]"; });
@@ -800,6 +804,7 @@ void RenderAlgorithms::ProcessRenderInstruction(const RenderInstruction&
                           rootClippingRect,
                           orientation,
                           sceneSize,
+                          renderPass,
                           renderTarget);
 
         // Execute command buffer
index 8f91964040e2fe27c54821de7bb598206ebb7340..b4a4ca1c64d7561d24dec84c559abcb6bc93cd06 100644 (file)
@@ -71,6 +71,7 @@ public:
                                 const Rect<int>&                     rootClippingRect,
                                 int                                  orientation,
                                 const Uint16Pair&                    sceneSize,
+                                Graphics::RenderPass*                renderPass,
                                 Graphics::RenderTarget*              renderTarget);
 
   /**
@@ -166,6 +167,7 @@ private:
                                 const Rect<int>&                                     rootClippingRect,
                                 int                                                  orientation,
                                 const Uint16Pair&                                    sceneSize,
+                                Graphics::RenderPass*                                renderPass,
                                 Graphics::RenderTarget*                              renderTarget);
 
   // Member variables:
index 4f72d397ce79a5b87ed3aae3454f22b52bd4107b..3332ed8ba2245f7f45d5f574d22285d2d344324a 100644 (file)
@@ -1243,6 +1243,7 @@ void RenderManager::RenderScene(Integration::RenderStatus& status, Integration::
       clippingRect,
       surfaceOrientation,
       Uint16Pair(surfaceRect.width, surfaceRect.height),
+      currentRenderPass,
       currentRenderTarget);
 
     Graphics::SyncObject* syncObject{nullptr};
@@ -1259,7 +1260,8 @@ void RenderManager::RenderScene(Integration::RenderStatus& status, Integration::
 
   if(targetsToPresent.size() > 0u)
   {
-    DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_RENDER_FINISHED", [&](std::ostringstream& oss) { oss << "[" << targetsToPresent.size() << "]"; });
+    DALI_TRACE_BEGIN_WITH_MESSAGE_GENERATOR(gTraceFilter, "DALI_RENDER_FINISHED", [&](std::ostringstream& oss)
+                                            { oss << "[" << targetsToPresent.size() << "]"; });
   }
 
   // Flush UBOs