Integrated the Vulkan::ResourceCache class into the Vulkan::Graphics class
authorAngelos Gkountis <a.gkountis@samsung.com>
Thu, 17 May 2018 16:13:13 +0000 (17:13 +0100)
committeradam.b <jsr184@gmail.com>
Fri, 25 May 2018 15:51:13 +0000 (16:51 +0100)
Renamed the GetVk[object_name] functions to the more uniform GetVkHandle name
Fixed wrong equality comparisons in the lambdas of Vulkan::ResourceCache functions

Change-Id: I0a67ae37c3ed069e538340184281b1eb8e0899d4

28 files changed:
dali/graphics/file.list
dali/graphics/vulkan/api/vulkan-api-buffer.cpp
dali/graphics/vulkan/api/vulkan-api-render-command.cpp
dali/graphics/vulkan/gpu-memory/vulkan-gpu-memory-manager.cpp
dali/graphics/vulkan/vulkan-buffer.cpp
dali/graphics/vulkan/vulkan-buffer.h
dali/graphics/vulkan/vulkan-command-buffer.cpp
dali/graphics/vulkan/vulkan-command-pool.cpp
dali/graphics/vulkan/vulkan-command-pool.h
dali/graphics/vulkan/vulkan-descriptor-set.cpp
dali/graphics/vulkan/vulkan-descriptor-set.h
dali/graphics/vulkan/vulkan-framebuffer.cpp
dali/graphics/vulkan/vulkan-framebuffer.h
dali/graphics/vulkan/vulkan-graphics-texture.cpp
dali/graphics/vulkan/vulkan-graphics.cpp
dali/graphics/vulkan/vulkan-graphics.h
dali/graphics/vulkan/vulkan-image.cpp
dali/graphics/vulkan/vulkan-image.h
dali/graphics/vulkan/vulkan-pipeline.cpp
dali/graphics/vulkan/vulkan-pipeline.h
dali/graphics/vulkan/vulkan-resource-cache.cpp
dali/graphics/vulkan/vulkan-resource-cache.h
dali/graphics/vulkan/vulkan-sampler.cpp
dali/graphics/vulkan/vulkan-sampler.h
dali/graphics/vulkan/vulkan-shader.cpp
dali/graphics/vulkan/vulkan-shader.h
dali/graphics/vulkan/vulkan-standalone-test.cpp
dali/graphics/vulkan/vulkan-swapchain.cpp

index 31a07a0..a981487 100644 (file)
@@ -19,6 +19,7 @@ graphics_src_files = \
     $(graphics_src_dir)/vulkan/vulkan-shader.cpp \
     $(graphics_src_dir)/vulkan/vulkan-swapchain.cpp \
     $(graphics_src_dir)/vulkan/vulkan-sampler.cpp \
+    $(graphics_src_dir)/vulkan/vulkan-resource-cache.cpp \
     $(graphics_src_dir)/vulkan/vulkan-graphics-texture.cpp \
     $(graphics_src_dir)/vulkan/api/vulkan-api-controller.cpp \
     $(graphics_src_dir)/vulkan/api/vulkan-api-shader.cpp \
index eacf487..693a755 100644 (file)
@@ -37,7 +37,7 @@ Buffer::Buffer( Controller& controller, vk::BufferUsageFlagBits usage, API::Buff
 
 bool Buffer::Initialise()
 {
-  auto type = Vulkan::Buffer::Type{};
+  Vulkan::Buffer::Type type;
   if( mUsage == vk::BufferUsageFlagBits::eUniformBuffer )
   {
     type = Vulkan::Buffer::Type::UNIFORM;
index 404f683..8969b30 100644 (file)
@@ -196,11 +196,11 @@ bool RenderCommand::PreparePipeline()
       std::vector<vk::PipelineShaderStageCreateInfo> shaderStages =
                                                        {
                                                          vk::PipelineShaderStageCreateInfo{}
-                                                           .setModule(vertexShader->GetVkShaderModule())
+                                                           .setModule(vertexShader->GetVkHandle())
                                                            .setStage(vk::ShaderStageFlagBits::eVertex)
                                                            .setPName("main"),
                                                          vk::PipelineShaderStageCreateInfo{}
-                                                           .setModule(fragmentShader->GetVkShaderModule())
+                                                           .setModule(fragmentShader->GetVkHandle())
                                                            .setStage(vk::ShaderStageFlagBits::eFragment)
                                                            .setPName("main")
                                                        };
@@ -213,7 +213,7 @@ bool RenderCommand::PreparePipeline()
       vk::GraphicsPipelineCreateInfo pipelineInfo;
       pipelineInfo
         .setSubpass(0)
-        .setRenderPass(fb->GetVkRenderPass()) // based on render target
+        .setRenderPass(fb->GetRenderPassVkHandle()) // based on render target
         .setBasePipelineHandle(nullptr)
         .setBasePipelineIndex(0)
         .setLayout(pipelineLayout)
index da8a30c..0b3b72f 100644 (file)
@@ -117,7 +117,7 @@ struct GpuMemoryDefaultAllocator : public GpuMemoryAllocator
    */
   virtual GpuMemoryBlockRef Allocate( const Handle<Buffer>& buffer, vk::MemoryPropertyFlags memoryProperties ) override
   {
-    return Allocate( mGraphics.GetDevice().getBufferMemoryRequirements( buffer->GetVkBuffer() ),
+    return Allocate( mGraphics.GetDevice().getBufferMemoryRequirements(buffer->GetVkHandle() ),
                      memoryProperties );
   }
 
@@ -129,7 +129,7 @@ struct GpuMemoryDefaultAllocator : public GpuMemoryAllocator
    */
   GpuMemoryBlockRef Allocate( const ImageRef& image, vk::MemoryPropertyFlags memoryProperties ) override
   {
-    return Allocate( mGraphics.GetDevice().getImageMemoryRequirements( image->GetVkImage() ),
+    return Allocate( mGraphics.GetDevice().getImageMemoryRequirements(image->GetVkHandle() ),
                                memoryProperties );
   }
 
index 1b36a45..25f1c11 100644 (file)
@@ -82,7 +82,7 @@ struct Buffer::Impl final
    *
    * @return
    */
-  vk::Buffer GetVkBuffer() const
+  vk::Buffer GetVkHandle() const
   {
     return mBuffer;
   }
@@ -160,9 +160,9 @@ uint32_t Buffer::GetSize() const
   return U32(mImpl->GetSize());
 }
 
-vk::Buffer Buffer::GetVkBuffer() const
+vk::Buffer Buffer::GetVkHandle() const
 {
-  return mImpl->GetVkBuffer();
+  return mImpl->GetVkHandle();
 }
 
 void Buffer::BindMemory( const GpuMemoryBlockRef& handle )
index 74d2b14..c0ce0b4 100644 (file)
@@ -82,7 +82,7 @@ public:
    * Returns Vulkan VkBuffer object associated with this buffer
    * @return
    */
-  vk::Buffer GetVkBuffer() const;
+  vk::Buffer GetVkHandle() const;
 
   /**
    * Returns handle to the allocated memory
index ff64a71..585515e 100644 (file)
@@ -48,7 +48,7 @@ struct CommandBuffer::Impl
 
   ~Impl()
   {
-    mGraphics.GetDevice().freeCommandBuffers( mOwnerCommandPool.GetPool(),
+    mGraphics.GetDevice().freeCommandBuffers(mOwnerCommandPool.GetVkHandle(),
                                               1, &mCommandBuffer );
   }
 
@@ -107,7 +107,7 @@ struct CommandBuffer::Impl
       // Render pass is obtained from the default framebuffer
       // it's a legacy but little nicer
       auto swapchain = mGraphics.GetSwapchainForFBID( 0u );
-      inheritance.setRenderPass( swapchain->GetCurrentFramebuffer()->GetVkRenderPass() );
+      inheritance.setRenderPass(swapchain->GetCurrentFramebuffer()->GetRenderPassVkHandle() );
       info.setPInheritanceInfo( &inheritance );
     }
 
@@ -137,7 +137,7 @@ struct CommandBuffer::Impl
   void Free()
   {
     assert( mCommandBuffer && "Invalid command buffer!" );
-    mGraphics.GetDevice().freeCommandBuffers( mOwnerCommandPool.GetPool(), mCommandBuffer );
+    mGraphics.GetDevice().freeCommandBuffers(mOwnerCommandPool.GetVkHandle(), mCommandBuffer );
   }
 
 
@@ -166,7 +166,7 @@ struct CommandBuffer::Impl
     vkBuffers.reserve( buffers.size() );
     for( auto&& buffer : buffers )
     {
-      vkBuffers.emplace_back( buffer->GetVkBuffer() );
+      vkBuffers.emplace_back(buffer->GetVkHandle() );
       PushResource( buffer );
     }
 
@@ -180,14 +180,14 @@ struct CommandBuffer::Impl
             "The buffer used as index buffer has wrong usage flags!" );
 
     PushResource( buffer );
-    mCommandBuffer.bindIndexBuffer( buffer->GetVkBuffer(), offset, indexType );
+    mCommandBuffer.bindIndexBuffer(buffer->GetVkHandle(), offset, indexType );
   }
 
   void BindGraphicsPipeline( Handle<Pipeline> pipeline )
   {
     PushResource( pipeline );
     mCurrentPipeline = pipeline;
-    mCommandBuffer.bindPipeline( vk::PipelineBindPoint::eGraphics, pipeline->GetVkPipeline() );
+    mCommandBuffer.bindPipeline( vk::PipelineBindPoint::eGraphics, pipeline->GetVkHandle() );
   }
 
   void BindDescriptorSets( std::vector<Dali::Graphics::Vulkan::Handle<DescriptorSet>> descriptorSets,
@@ -238,11 +238,11 @@ struct CommandBuffer::Impl
     auto swapchain = mGraphics.GetSwapchainForFBID( 0u );
     auto surface = mGraphics.GetSurface( 0u );
     auto frameBuffer = swapchain->GetCurrentFramebuffer();
-    auto renderPass = frameBuffer->GetVkRenderPass();
+    auto renderPass = frameBuffer->GetRenderPassVkHandle();
     auto clearValues = frameBuffer->GetDefaultClearValues();
 
     auto info = vk::RenderPassBeginInfo{};
-    info.setFramebuffer( frameBuffer->GetVkFramebuffer() );
+    info.setFramebuffer(frameBuffer->GetVkHandle() );
     info.setRenderPass( renderPass );
     info.setClearValueCount( U32( clearValues.size() ) );
     info.setPClearValues( clearValues.data() );
@@ -308,7 +308,7 @@ struct CommandBuffer::Impl
     PushResource( srcBuffer );
     PushResource( dstImage );
 
-    mCommandBuffer.copyBufferToImage( srcBuffer->GetVkBuffer(), dstImage->GetVkImage(), dstLayout, regions );
+    mCommandBuffer.copyBufferToImage(srcBuffer->GetVkHandle(), dstImage->GetVkHandle(), dstLayout, regions );
   }
 
   vk::ImageMemoryBarrier ImageLayoutTransitionBarrier( ImageRef image,
@@ -321,7 +321,7 @@ struct CommandBuffer::Impl
   {
     return vk::ImageMemoryBarrier{}
          .setNewLayout( newLayout )
-         .setImage( image->GetVkImage() )
+         .setImage(image->GetVkHandle() )
          .setOldLayout( oldLayout )
          .setSrcAccessMask( srcAccessMask )
          .setDstAccessMask( dstAccessMask )
index fe7bcd3..3805959 100644 (file)
@@ -96,7 +96,7 @@ struct CommandBufferPool
 
     auto allocateInfo = vk::CommandBufferAllocateInfo{}
       .setCommandBufferCount( U32(diff) )
-      .setCommandPool( mOwner.GetPool() )
+      .setCommandPool(mOwner.GetVkHandle() )
       .setLevel( mIsPrimary ? vk::CommandBufferLevel::ePrimary : vk::CommandBufferLevel::eSecondary );
     auto newBuffers = AllocateVkCommandBuffers( allocateInfo );
 
@@ -276,7 +276,7 @@ CommandPool::CommandPool(Graphics& graphics, const vk::CommandPoolCreateInfo& cr
 
 CommandPool::~CommandPool() = default;
 
-vk::CommandPool CommandPool::GetPool() const
+vk::CommandPool CommandPool::GetVkHandle() const
 {
   return mImpl->mCommandPool;
 }
index de0b1dd..93a56a8 100644 (file)
@@ -59,7 +59,7 @@ public:
    *
    * @return
    */
-  vk::CommandPool GetPool() const;
+  vk::CommandPool GetVkHandle() const;
 
   /**
    *
index 40dfe11..56454c0 100644 (file)
@@ -104,7 +104,7 @@ DescriptorPool::DescriptorPool( Graphics& graphics, const vk::DescriptorPoolCrea
 
 DescriptorPool::~DescriptorPool() = default;
 
-vk::DescriptorPool DescriptorPool::GetVkDescriptorPool() const
+vk::DescriptorPool DescriptorPool::GetVkHandle() const
 {
   return mImpl->mVkDescriptorPool;
 }
@@ -139,7 +139,7 @@ struct DescriptorSet::Impl
     if(mVkDescriptorSet)
     {
       // TODO: @todo non freeable!!!
-      //mGraphics.GetDevice().freeDescriptorSets( mPool.GetVkDescriptorPool(), 1, &mVkDescriptorSet );
+      //mGraphics.GetDevice().freeDescriptorSets( mPool.GetVkHandle(), 1, &mVkDescriptorSet );
     }
   }
 
@@ -151,7 +151,7 @@ struct DescriptorSet::Impl
     auto bufferInfo = vk::DescriptorBufferInfo{}
          .setOffset( U32(offset) )
          .setRange( U32(size) )
-         .setBuffer( buffer->GetVkBuffer() );
+         .setBuffer(buffer->GetVkHandle() );
 
     auto write = vk::WriteDescriptorSet{}.setPBufferInfo( &bufferInfo )
          .setDescriptorType( vk::DescriptorType::eUniformBuffer )
@@ -173,7 +173,7 @@ struct DescriptorSet::Impl
     auto imageViewInfo = vk::DescriptorImageInfo{}
          .setImageLayout( vk::ImageLayout::eShaderReadOnlyOptimal )
          .setImageView( imageView->GetVkImageView() )
-         .setSampler( sampler->GetVkSampler() );
+         .setSampler(sampler->GetVkHandle() );
 
     auto write = vk::WriteDescriptorSet{}.setPImageInfo( &imageViewInfo )
                                          .setDescriptorType( vk::DescriptorType::eCombinedImageSampler )
index f76978a..4f77fc6 100644 (file)
@@ -97,7 +97,7 @@ public:
 
   ~DescriptorPool() override;
 
-  vk::DescriptorPool GetVkDescriptorPool() const;
+  vk::DescriptorPool GetVkHandle() const;
 
   std::vector<DescriptorSetHandle> AllocateDescriptorSets( vk::DescriptorSetAllocateInfo allocateInfo );
 
index 31db682..99e599b 100644 (file)
@@ -326,12 +326,12 @@ void Framebuffer::Commit()
   mImpl->Commit();
 }
 
-vk::RenderPass Framebuffer::GetVkRenderPass() const
+vk::RenderPass Framebuffer::GetRenderPassVkHandle() const
 {
   return mImpl->mVkRenderPass;
 }
 
-vk::Framebuffer Framebuffer::GetVkFramebuffer() const
+vk::Framebuffer Framebuffer::GetVkHandle() const
 {
   return mImpl->mVkFramebuffer;
 }
index b0ec55b..8780e29 100644 (file)
@@ -64,9 +64,9 @@ public:
 
   void Commit();
 
-  vk::RenderPass GetVkRenderPass() const;
+  vk::RenderPass GetRenderPassVkHandle() const;
 
-  vk::Framebuffer GetVkFramebuffer() const;
+  vk::Framebuffer GetVkHandle() const;
 
   const std::vector<vk::ClearValue>& GetDefaultClearValues() const;
 
index 39c6d0a..5641165 100644 (file)
@@ -190,7 +190,7 @@ struct Texture::Impl
     mSampler->SetFilter( vk::Filter::eLinear, vk::Filter::eLinear );
     mSampler->SetMipmapMode( vk::SamplerMipmapMode::eLinear );
 
-    mSampler->GetVkSampler();
+    mSampler->GetVkHandle();
   }
 
   SamplerRef GetSampler() const
index a898475..dece57a 100644 (file)
@@ -31,6 +31,8 @@
 #include <dali/graphics/vulkan/vulkan-framebuffer.h>
 #include <dali/graphics/vulkan/api/vulkan-api-controller.h>
 #include <dali/graphics/vulkan/vulkan-pipeline-cache.h>
+#include <dali/graphics/vulkan/vulkan-sampler.h>
+#include <dali/graphics/vulkan/vulkan-resource-cache.h>
 
 #include <dali/graphics-api/graphics-api-controller.h>
 
@@ -335,7 +337,7 @@ std::vector< vk::DeviceQueueCreateInfo > Graphics::GetQueueCreateInfos()
   assert(!mSurfaceFBIDMap.empty() &&
          "At least one surface has to be created before creating VkDevice!");
 
-  auto queueInfos = std::vector< vk::DeviceQueueCreateInfo >{};
+  std::vector< vk::DeviceQueueCreateInfo > queueInfos{};
 
   constexpr uint8_t MAX_QUEUE_TYPES = 3;
   // find suitable family for each type of queue
@@ -426,7 +428,7 @@ void Graphics::CreateDevice()
       info.setPQueuePriorities( priorities.data() );
     }
 
-    auto extensions = std::vector< const char* >{VK_KHR_SWAPCHAIN_EXTENSION_NAME};
+    std::vector< const char* > extensions{VK_KHR_SWAPCHAIN_EXTENSION_NAME};
 
     auto info = vk::DeviceCreateInfo{};
     info.setEnabledExtensionCount(U32(extensions.size()))
@@ -468,6 +470,7 @@ void Graphics::CreateDevice()
   }
 
   mPipelineDatabase = std::make_unique<PipelineCache>( *this );
+  mResourceCache = MakeUnique<ResourceCache>();
 }
 
 vk::Device Graphics::GetDevice() const
@@ -496,7 +499,7 @@ Queue& Graphics::GetGraphicsQueue(uint32_t index) const
   // this will change in the future
   assert(index == 0u && "Each type of queue may use only one, indices greater than 0 are invalid!");
 
-  return *mGraphicsQueues[0].get(); // will be mGraphicsQueues[index]
+  return *mGraphicsQueues[0]; // will be mGraphicsQueues[index]
 }
 
 Queue& Graphics::GetTransferQueue(uint32_t index) const
@@ -505,7 +508,7 @@ Queue& Graphics::GetTransferQueue(uint32_t index) const
   // this will change in the future
   assert(index == 0u && "Each type of queue may use only one, indices greater than 0 are invalid!");
 
-  return *mTransferQueues[0].get(); // will be mGraphicsQueues[index]
+  return *mTransferQueues[0]; // will be mGraphicsQueues[index]
 }
 
 Queue& Graphics::GetComputeQueue(uint32_t index) const
@@ -514,7 +517,7 @@ Queue& Graphics::GetComputeQueue(uint32_t index) const
   // this will change in the future
   assert(index == 0u && "Each type of queue may use only one, indices greater than 0 are invalid!");
 
-  return *mComputeQueues[0].get(); // will be mGraphicsQueues[index]
+  return *mComputeQueues[0]; // will be mGraphicsQueues[index]
 }
 
 Queue& Graphics::GetPresentQueue() const
@@ -546,104 +549,80 @@ SurfaceRef Graphics::GetSurface( FBID surfaceId )
 
 void Graphics::AddBuffer( Handle<Buffer> buffer )
 {
-  mBuffersCache.push_back( buffer );
+  mResourceCache->AddBuffer(std::move(buffer));
 }
 
 void Graphics::AddImage( Handle<Image> image )
 {
-  mImageCache.push_back( image );
+  mResourceCache->AddImage(std::move(image));
 }
 
 void Graphics::AddPipeline( Handle<Pipeline> pipeline )
 {
-  mPipelineCache.push_back( pipeline );
+  mResourceCache->AddPipeline(std::move(pipeline));
 }
 
 void Graphics::AddShader( Handle<Shader> shader )
 {
-  mShaderCache.push_back( shader );
+  mResourceCache->AddShader(std::move(shader));
 }
 
 void Graphics::AddCommandPool( Handle<CommandPool> pool )
 {
-  mCommandPoolCache.push_back( pool );
+  mResourceCache->AddCommandPool(std::move(pool));
 }
 
 void Graphics::AddDescriptorPool( Handle<DescriptorPool> pool )
 {
-  mDescriptorPoolCache.push_back( pool );
+  mResourceCache->AddDescriptorPool(std::move(pool));
 }
 
 void Graphics::AddFramebuffer( Handle<Framebuffer> framebuffer )
 {
-  mFramebufferCache.push_back( framebuffer );
+  mResourceCache->AddFramebuffer(std::move(framebuffer));
 }
 
 void Graphics::RemoveBuffer( Buffer& buffer )
 {
-  auto index = 0u;
-  for( auto&& iter : mBuffersCache )
-  {
-    if( &*iter == &buffer )
-    {
-      iter.Reset();
-      mBuffersCache.erase( mBuffersCache.begin()+index );
-      return;
-    }
-  }
+  mResourceCache->RemoveBuffer(buffer);
 }
 
 void Graphics::RemoveShader( Shader& shader )
 {
-  auto index = 0u;
-  for( auto&& iter : mShaderCache )
-  {
-    if( &*iter == &shader )
-    {
-      iter.Reset();
-      mShaderCache.erase( mShaderCache.begin()+index );
-      return;
-    }
-    ++index;
-  }
+  mResourceCache->RemoveShader(shader);
 }
 
 void Graphics::RemoveCommandPool( CommandPool& commandPool )
 {
-  NotImplemented();
+  mResourceCache->RemoveCommandPool(commandPool);
+}
+
+void Graphics::RemoveDescriptorPool( DescriptorPool& pool )
+{
+  mResourceCache->RemoveDescriptorPool(pool);
 }
 
-void Graphics::RemoveDescriptorPool( std::unique_ptr<DescriptorPool> pool )
+void Graphics::RemoveFramebuffer( Framebuffer& framebuffer )
 {
-  NotImplemented();
+  mResourceCache->RemoveFramebuffer(framebuffer);
+}
+
+void Graphics::RemoveSampler( Sampler& sampler )
+{
+  mResourceCache->RemoveSampler(sampler);
 }
 
 ShaderRef Graphics::FindShader( vk::ShaderModule shaderModule )
 {
-  for( auto&& iter : mShaderCache )
-  {
-    if( iter->GetVkShaderModule() == shaderModule )
-    {
-      return Handle<Shader>(&*iter);
-    }
-  }
-  return Handle<Shader>();
+  return mResourceCache->FindShader(shaderModule);
 }
 
 ImageRef Graphics::FindImage( vk::Image image )
 {
-  for( auto&& iter : mImageCache )
-  {
-    if( iter->GetVkImage() == image )
-    {
-      return ImageRef(&*iter);
-    }
-  }
-  return ImageRef();
+  return mResourceCache->FindImage(image);
 }
 
 
-
 } // namespace Vulkan
 } // namespace Graphics
 } // namespace Dali
index 9882250..6cec1a3 100644 (file)
@@ -56,6 +56,7 @@ class CommandPool;
 class DescriptorPool;
 class GpuMemoryManager;
 class PipelineCache;
+class ResourceCache;
 
 struct SwapchainSurfacePair
 {
@@ -177,16 +178,9 @@ public:
   void RemoveBuffer( Buffer& buffer );
   void RemoveShader( Shader& shader );
   void RemoveCommandPool( CommandPool& commandPool );
-  void RemoveDescriptorPool( std::unique_ptr<DescriptorPool> pool );
-
-private:
-  std::vector<BufferRef>                mBuffersCache;
-  std::vector<ImageRef>                 mImageCache;
-  std::vector<PipelineRef>              mPipelineCache;
-  std::vector<ShaderRef>                mShaderCache;
-  std::vector<CommandPoolRef>           mCommandPoolCache;
-  std::vector<DescriptorPoolRef>        mDescriptorPoolCache;
-  std::vector<FramebufferRef>           mFramebufferCache;
+  void RemoveDescriptorPool( DescriptorPool& pool );
+  void RemoveFramebuffer( Framebuffer& framebuffer );
+  void RemoveSampler( Sampler& sampler );
 
 private:
   std::unique_ptr<Dali::Graphics::API::Controller>           mGfxController;
@@ -194,10 +188,11 @@ private:
   // TODO: rename
   std::unique_ptr<PipelineCache>        mPipelineDatabase;
 
+  std::unique_ptr<ResourceCache>        mResourceCache;
 public:
   PipelineCache& GetPipelineCache()
   {
-    return *mPipelineDatabase.get();
+    return *mPipelineDatabase;
   }
 };
 
index 51447b5..5971bed 100644 (file)
@@ -109,7 +109,7 @@ Image::Image( Graphics& graphics, const vk::ImageCreateInfo& createInfo, vk::Ima
   mImpl = MakeUnique<Impl>( *this, graphics, createInfo, externalImage );
 }
 
-vk::Image Image::GetVkImage() const
+vk::Image Image::GetVkHandle() const
 {
   return mImpl->mVkImage;
 }
@@ -244,7 +244,7 @@ ImageViewRef ImageView::New( Graphics& graphics, ImageRef image )
                                                .setFormat( image->GetVkFormat() )
                                                .setSubresourceRange(subresourceRange)
                                                .setComponents( componentsMapping )
-                                                .setImage( image->GetVkImage() )));
+                                                .setImage(image->GetVkHandle() )));
   if(!retval->mImpl->Initialise())
   {
     return ImageViewRef();
index b5b43f6..060caa5 100644 (file)
@@ -58,7 +58,7 @@ public:
    * Returns underlying Vulkan object
    * @return
    */
-  vk::Image GetVkImage() const;
+  vk::Image GetVkHandle() const;
 
   /**
    * Returns VkImageLayout associated with the image
@@ -130,7 +130,7 @@ public:
 
   operator InternalVkImage() const
   {
-    return GetVkImage();
+    return GetVkHandle();
   }
 
 private:
index ef61706..ce7beb6 100644 (file)
@@ -42,8 +42,8 @@ struct Pipeline::Impl
 {
 
 
-  Impl( Vulkan::Graphics& graphics, const vk::GraphicsPipelineCreateInfo& info ) :
-    mInfo( info ),
+  Impl( Vulkan::Graphics& graphics, vk::GraphicsPipelineCreateInfo info ) :
+    mInfo( std::move(info) ),
     mGraphics( graphics )
   {
   };
@@ -65,7 +65,7 @@ struct Pipeline::Impl
    *
    * @return
    */
-  vk::Pipeline GetVkPipeline() const
+  vk::Pipeline GetVkHandle() const
   {
     return mPipeline;
   }
@@ -93,8 +93,8 @@ struct Pipeline::Impl
     // in place of swapchain structures!
     if( !mInfo.renderPass )
     {
-      SetRenderPass( mGraphics.GetSwapchainForFBID(0u)->
-                                GetCurrentFramebuffer()->GetVkRenderPass());
+      SetRenderPass(mGraphics.GetSwapchainForFBID(0u)->
+              GetCurrentFramebuffer()->GetRenderPassVkHandle());
     }
 
     if(!mInfo.pRasterizationState)
@@ -451,9 +451,9 @@ Pipeline::Pipeline( Graphics& graphics, const vk::GraphicsPipelineCreateInfo& in
   mImpl = MakeUnique<Pipeline::Impl>( graphics, info );
 }
 
-vk::Pipeline Pipeline::GetVkPipeline() const
+vk::Pipeline Pipeline::GetVkHandle() const
 {
-  return mImpl->GetVkPipeline();
+  return mImpl->GetVkHandle();
 }
 
 bool Pipeline::OnDestroy()
index 4494ca2..5d33d13 100644 (file)
@@ -124,7 +124,7 @@ public:
    * Returns Vulkan VkPipeline object associated with Pipeline
    * @return
    */
-  vk::Pipeline GetVkPipeline() const;
+  vk::Pipeline GetVkHandle() const;
 
   /**
    * Returns Vulkan VkPipelineLayout object associated with Pipeline
index 378b009..6200289 100644 (file)
@@ -23,6 +23,8 @@
 #include <dali/graphics/vulkan/vulkan-shader.h>
 #include <dali/graphics/vulkan/vulkan-descriptor-set.h>
 #include <dali/graphics/vulkan/vulkan-framebuffer.h>
+#include <dali/graphics/vulkan/vulkan-command-pool.h>
+#include <dali/graphics/vulkan/vulkan-sampler.h>
 
 #include <algorithm>
 
@@ -85,7 +87,7 @@ PipelineRef ResourceCache::FindPipeline( vk::Pipeline pipeline )
 {
   auto iterator = std::find_if(mPipelines.begin(),
                                mPipelines.end(),
-                               [&](const PipelineRef entry) { return &*entry == pipeline; });
+                               [&](const PipelineRef entry) { return entry->GetVkHandle() == pipeline; });
 
   return iterator == mPipelines.end() ? PipelineRef() : PipelineRef(&**iterator);
 }
@@ -94,7 +96,7 @@ ShaderRef ResourceCache::FindShader( vk::ShaderModule shaderModule )
 {
   auto iterator = std::find_if(mShaders.begin(),
                                mShaders.end(),
-                               [&](const ShaderRef entry) { return &*entry == shaderModule; });
+                               [&](const ShaderRef entry) { return entry->GetVkHandle() == shaderModule; });
 
   return iterator == mShaders.end() ? ShaderRef() : ShaderRef(&**iterator);
 }
@@ -103,7 +105,7 @@ CommandPoolRef ResourceCache::FindCommandPool( vk::CommandPool commandPool )
 {
   auto iterator = std::find_if(mCommandPools.begin(),
                                mCommandPools.end(),
-                               [&](const CommandPoolRef entry) { return &*entry == commandPool; });
+                               [&](const CommandPoolRef entry) { return entry->GetVkHandle() == commandPool; });
 
   return iterator == mCommandPools.end() ? CommandPoolRef() : CommandPoolRef(&**iterator);
 }
@@ -112,7 +114,7 @@ DescriptorPoolRef ResourceCache::FindDescriptorPool( vk::DescriptorPool descript
 {
   auto iterator = std::find_if(mDescriptorPools.begin(),
                                mDescriptorPools.end(),
-                               [&](const DescriptorPoolRef entry) { return &*entry == descriptorPool; });
+                               [&](const DescriptorPoolRef entry) { return entry->GetVkHandle() == descriptorPool; });
 
   return iterator == mDescriptorPools.end() ? DescriptorPoolRef() : DescriptorPoolRef(&**iterator);
 }
@@ -121,7 +123,7 @@ FramebufferRef ResourceCache::FindFramebuffer( vk::Framebuffer framebuffer )
 {
   auto iterator = std::find_if(mFramebuffers.begin(),
                                mFramebuffers.end(),
-                               [&](const FramebufferRef entry) { return &*entry == framebuffer; });
+                               [&](const FramebufferRef entry) { return entry->GetVkHandle() == framebuffer; });
 
   return iterator == mFramebuffers.end() ? FramebufferRef() : FramebufferRef(&**iterator);
 }
@@ -130,7 +132,7 @@ SamplerRef ResourceCache::FindSampler( vk::Sampler sampler )
 {
   auto iterator = std::find_if(mSamplers.begin(),
                                mSamplers.end(),
-                               [&](const SamplerRef entry) { return &*entry == sampler; });
+                               [&](const SamplerRef entry) { return entry->GetVkHandle() == sampler; });
 
   return iterator == mSamplers.end() ? SamplerRef() : SamplerRef(&**iterator);
 }
@@ -139,7 +141,7 @@ BufferRef ResourceCache::FindBuffer( vk::Buffer buffer )
 {
   auto iterator = std::find_if(mBuffers.begin(),
                                mBuffers.end(),
-                               [&](const BufferRef entry) { return &*entry == buffer; });
+                               [&](const BufferRef entry) { return entry->GetVkHandle() == buffer; });
 
   return iterator == mBuffers.end() ? BufferRef() : BufferRef(&**iterator);
 }
@@ -148,7 +150,7 @@ ImageRef ResourceCache::FindImage( vk::Image image )
 {
   auto iterator = std::find_if(mImages.begin(),
                                mImages.end(),
-                               [&](const ImageRef entry) { return &*entry == image; });
+                               [&](const ImageRef entry) { return entry->GetVkHandle() == image; });
 
   return iterator == mImages.end() ? ImageRef() : ImageRef(&**iterator);
 }
@@ -206,7 +208,7 @@ ResourceCache& ResourceCache::RemoveShader( Shader& shader )
                                  mShaders.end(),
                                  [&](const ShaderRef entry) { return &*entry == &shader; });
 
-    std::iter_swap(iterator, std::prev(mShaders.end());
+    std::iter_swap(iterator, std::prev(mShaders.end()));
     mShaders.back().Reset();
     mShaders.pop_back();
   }
@@ -228,13 +230,13 @@ ResourceCache& ResourceCache::RemoveCommandPool( CommandPool& commandPool )
   return *this;
 }
 
-ResourceCache& ResourceCache::RemoveDescriptorPool( std::unique_ptr<DescriptorPool> descriptorPool )
+ResourceCache& ResourceCache::RemoveDescriptorPool( DescriptorPool& descriptorPool )
 {
   if( !mDescriptorPools.empty() )
   {
     auto iterator = std::find_if(mDescriptorPools.begin(),
                                  mDescriptorPools.end(),
-                                 [&](const DescriptorPoolRef entry) { return &*entry == &*descriptorPool; });
+                                 [&](const DescriptorPoolRef entry) { return &*entry == &descriptorPool; });
 
     std::iter_swap(iterator, std::prev(mDescriptorPools.end()));
     mDescriptorPools.back().Reset();
index a23c024..ed25df8 100644 (file)
@@ -191,7 +191,7 @@ public:
    * @param descriptorPool The DescriptorPool to be removed
    * @return A reference to the ResourceCache
    */
-  ResourceCache& RemoveDescriptorPool( std::unique_ptr<DescriptorPool> descriptorPool );
+  ResourceCache& RemoveDescriptorPool( DescriptorPool& descriptorPool );
 
   /**
    * Removes the specified Framebuffer from the cache
@@ -207,6 +207,7 @@ public:
    */
   ResourceCache& RemoveSampler( Sampler& sampler );
 
+  ResourceCache() = default;
 
   // The cache should not be copyable
   ResourceCache( const ResourceCache& other ) = delete;
index 3f44ec2..7e103b6 100644 (file)
@@ -191,7 +191,7 @@ void Sampler::SetCompareOp( vk::CompareOp compareOp )
   mImpl->mModified = true;
 }
 
-vk::Sampler Sampler::GetVkSampler() const
+vk::Sampler Sampler::GetVkHandle() const
 {
   // if no sampler yet, create it now
   if( mImpl->mModified )
index a327d03..84c9dba 100644 (file)
@@ -117,7 +117,7 @@ public:
    * Returns VkSampler object
    * @return
    */
-  vk::Sampler GetVkSampler() const;
+  vk::Sampler GetVkHandle() const;
 
 private:
 
index e8d6cf6..b20717d 100644 (file)
@@ -57,7 +57,7 @@ struct Shader::Impl
     return vk::Result::eErrorInitializationFailed;
   }
 
-  vk::ShaderModule GetVkShaderModule() const
+  vk::ShaderModule GetVkHandle() const
   {
     return mShaderModule;
   }
@@ -100,9 +100,9 @@ Shader::Shader( Graphics& graphics, const vk::ShaderModuleCreateInfo& info )
 
 Shader::~Shader() = default;
 
-vk::ShaderModule Shader::GetVkShaderModule() const
+vk::ShaderModule Shader::GetVkHandle() const
 {
-  return mImpl->GetVkShaderModule();
+  return mImpl->GetVkHandle();
 }
 
 bool Shader::OnDestroy()
index 5c03607..0357a72 100644 (file)
@@ -54,7 +54,7 @@ public:
   static Handle<Shader> New( Graphics& graphics, const vk::ShaderModuleCreateInfo& info );
 
   /**
-   * Creates new shader module from SPIRV code
+   * Creates new shader module from SPIR-V code
    * @param graphics
    * @param bytes
    * @param size
@@ -67,7 +67,7 @@ public:
    */
   ~Shader() override;
 
-  vk::ShaderModule GetVkShaderModule() const;
+  vk::ShaderModule GetVkHandle() const;
 
   const SpirV::SPIRVShader& GetSPIRVReflection() const;
 
@@ -75,7 +75,7 @@ public:
 
   operator vk::ShaderModule() const
   {
-    return GetVkShaderModule();
+    return GetVkHandle();
   }
 
   /**
index e116bbb..c56b655 100644 (file)
@@ -372,7 +372,7 @@ void test_framebuffer(Dali::Graphics::Vulkan::Graphics &graphics)
       .setFormat(vk::Format::eR32G32B32A32Sfloat)
       .setComponents(vk::ComponentMapping(
         vk::ComponentSwizzle::eR, vk::ComponentSwizzle::eG, vk::ComponentSwizzle::eB, vk::ComponentSwizzle::eA))
-      .setImage(image->GetVkImage())
+      .setImage(image->GetVkHandle())
       .setSubresourceRange(vk::ImageSubresourceRange{}
                              .setLayerCount(1)
                              .setLevelCount(1)
index a7fa5de..933ae0b 100644 (file)
@@ -193,7 +193,7 @@ struct Swapchain::Impl
       for( auto&& colorImageView : colorImages )
       {
         auto image   = colorImageView->GetImage();
-        auto vkImage = image->GetVkImage();
+        auto vkImage = image->GetVkHandle();
 
         vk::ImageSubresourceRange range;
         range.setLayerCount( image->GetLayerCount() )
@@ -219,7 +219,7 @@ struct Swapchain::Impl
     if( depthStencilImage )
     {
       auto image   = depthStencilImage->GetImage();
-      auto vkImage = image->GetVkImage();
+      auto vkImage = image->GetVkHandle();
 
       vk::ImageSubresourceRange range;
       range.setLayerCount( image->GetLayerCount() )
@@ -418,8 +418,8 @@ struct Swapchain::Impl
 
     // start recording
     auto inheritanceInfo = vk::CommandBufferInheritanceInfo{}
-      .setFramebuffer( swapBuffer.framebuffer->GetVkFramebuffer() )
-      .setRenderPass(swapBuffer.framebuffer->GetVkRenderPass())
+      .setFramebuffer(swapBuffer.framebuffer->GetVkHandle() )
+      .setRenderPass(swapBuffer.framebuffer->GetRenderPassVkHandle())
       .setSubpass( 0 );
     swapBuffer.masterCmdBuffer->Reset();
     swapBuffer.masterCmdBuffer->Begin( vk::CommandBufferUsageFlagBits::eRenderPassContinue, &inheritanceInfo );
@@ -440,8 +440,8 @@ struct Swapchain::Impl
     auto& currentBuffer = mSwapchainBuffer[mCurrentBufferIndex];
 
     vk::RenderPassBeginInfo rpInfo{};
-    rpInfo.setRenderPass( currentBuffer.framebuffer->GetVkRenderPass() )
-      .setFramebuffer( currentBuffer.framebuffer->GetVkFramebuffer() )
+    rpInfo.setRenderPass(currentBuffer.framebuffer->GetRenderPassVkHandle() )
+      .setFramebuffer(currentBuffer.framebuffer->GetVkHandle() )
       .setPClearValues( currentBuffer.framebuffer->GetDefaultClearValues().data() )
       .setClearValueCount( U32( currentBuffer.framebuffer->GetDefaultClearValues().size() ) )
       .setRenderArea( vk::Rect2D( {0, 0}, mSurface->GetSize() ) );