[Vulkan] Sampler and texture support - something is rendering
[platform/core/uifw/dali-core.git] / dali / graphics / vulkan / vulkan-command-buffer.h
index 2dab9f7..c312294 100644 (file)
@@ -35,6 +35,7 @@ class DescriptorSet;
 class CommandBuffer : public VkManaged
 {
   friend class CommandPool;
+  friend class CommandBufferPool;
 
 public:
 
@@ -55,9 +56,6 @@ public:
   /** Free command buffer */
   void Free();
 
-  /** Records image layout transition barrier for one image */
-  void ImageLayoutTransition(vk::Image image, vk::ImageLayout oldLayout, vk::ImageLayout newLayout, vk::ImageAspectFlags aspectMask);
-
   /** Push wait semaphores */
   void PushWaitSemaphores(const std::vector< vk::Semaphore >&          semaphores,
                           const std::vector< vk::PipelineStageFlags >& stages);
@@ -187,38 +185,80 @@ public:
   void EndRenderPass();
 
   /**
+   * Records pipeline barrier
+   * @param srcStageMask
+   * @param dstStageMask
+   * @param dependencyFlags
+   * @param memoryBarriers
+   * @param bufferBarriers
+   * @param imageBarriers
+   */
+  void PipelineBarrier( vk::PipelineStageFlags srcStageMask,
+                        vk::PipelineStageFlags dstStageMask,
+                        vk::DependencyFlags dependencyFlags,
+                        std::vector<vk::MemoryBarrier> memoryBarriers,
+                        std::vector<vk::BufferMemoryBarrier> bufferBarriers,
+                        std::vector<vk::ImageMemoryBarrier> imageBarriers );
+
+  /**
    * Executes secondary command buffers within primary command buffer
    * @param commandBuffers
    */
   void ExecuteCommands( std::vector<Dali::Graphics::Vulkan::Handle<CommandBuffer>> commandBuffers );
 
-private:
+  /**
+   * Copies buffer into the specified image
+   * @param srcBuffer
+   * @param dstImage
+   * @param dtsLayout
+   * @param regions
+   */
+  void CopyBufferToImage( BufferRef srcBuffer, ImageRef dstImage, vk::ImageLayout dstLayout,
+                          std::vector<vk::BufferImageCopy> regions );
 
   /**
-   *
+   * Creates layout transition barrier
+   * @return
+   */
+  vk::ImageMemoryBarrier ImageLayoutTransitionBarrier( ImageRef image,
+                                                  vk::AccessFlags        srcAccessMask,
+                                                  vk::AccessFlags        dstAccessMask,
+                                                  vk::ImageLayout        oldLayout,
+                                                  vk::ImageLayout        newLayout,
+                                                  vk::ImageAspectFlags   aspectMask
+  ) const;
+
+  /**
+   * Simplified version of memory barrier generation based on data stored inside the Image
    * @param image
-   * @param srcAccessMask
-   * @param dstAccessMask
-   * @param srcStageMask
-   * @param dstStageMask
-   * @param oldLayout
    * @param newLayout
    * @param aspectMask
+   * @return
+   */
+  vk::ImageMemoryBarrier ImageLayoutTransitionBarrier( ImageRef image,
+                                                       vk::ImageLayout        olsLayout,
+                                                       vk::ImageLayout        newLayout,
+                                                       vk::ImageAspectFlags   aspectMask
+  ) const;
+
+  /**
+   * Implements VkManaged::OnDestroy
+   * @return
    */
-  void RecordImageLayoutTransition(vk::Image             image,
-                                   vk::AccessFlags        srcAccessMask,
-                                   vk::AccessFlags        dstAccessMask,
-                                   vk::PipelineStageFlags srcStageMask,
-                                   vk::PipelineStageFlags dstStageMask,
-                                   vk::ImageLayout        oldLayout,
-                                   vk::ImageLayout        newLayout,
-                                   vk::ImageAspectFlags   aspectMask);
+  bool OnDestroy() override;
 
 private:
 
-  // Constructor called by the CommandPool only
-  CommandBuffer( CommandPool& commandPool, const vk::CommandBufferAllocateInfo& allocateInfo, vk::CommandBuffer vkCommandBuffer );
+  /**
+   * Returns allocation index
+   * @return
+   */
+  uint32_t GetPoolAllocationIndex() const;
 
+private:
+
+  // Constructor called by the CommandPool only
+  CommandBuffer( CommandPool& commandPool, uint32_t poolIndex, const vk::CommandBufferAllocateInfo& allocateInfo, vk::CommandBuffer vkCommandBuffer );
   class Impl;
   std::unique_ptr<Impl> mImpl;