Refactored the Vulkan::Image class
[platform/core/uifw/dali-core.git] / dali / graphics / vulkan / vulkan-graphics.h
index 4cb64d8..af31ca3 100644 (file)
@@ -49,15 +49,25 @@ namespace Vulkan
 {
 
 class Buffer;
+
 class Image;
+
 class Pipeline;
+
 class Shader;
+
 class Framebuffer;
+
 class Surface;
+
 class CommandPool;
+
 class DescriptorPool;
+
 class GpuMemoryManager;
+
 class PipelineCache;
+
 class ResourceCache;
 
 using SurfaceFactory = Dali::Integration::Graphics::SurfaceFactory;
@@ -73,46 +83,72 @@ class Graphics
 
 public:
   Graphics();
-  Graphics(const Graphics&) = delete;
-  Graphics& operator=(const Graphics&) = delete;
+
+  Graphics( const Graphics& ) = delete;
+
+  Graphics& operator=( const Graphics& ) = delete;
+
   ~Graphics();
 
 public: // Create methods
 
-  void                                    Create();
-  void                                    CreateDevice();
-  FBID                                    CreateSurface(std::unique_ptr< SurfaceFactory > surfaceFactory);
-  RefCountedSwapchain                     CreateSwapchainForSurface( RefCountedSurface surface );
-  RefCountedShader                        CreateShader(); //will see if this will work
-  RefCountedPipeline                      CreatePipeline();
-  RefCountedFence                         CreateFence( const vk::FenceCreateInfo& fenceCreateInfo );
-  RefCountedBuffer                        CreateBuffer( size_t size, BufferType type );
-  RefCountedBuffer                        CreateBuffer( const vk::BufferCreateInfo& bufferCreateInfo );
-  RefCountedFramebuffer                   CreateFramebuffer();
-  RefCountedImage                         CreateImage();
-  RefCountedImageView                     CreateImageView(const vk::ImageViewCreateFlags& flags,
-                                                          const RefCountedImage& image,
-                                                          vk::ImageViewType viewType,
-                                                          vk::Format format,
-                                                          vk::ComponentMapping components,
-                                                          vk::ImageSubresourceRange subresourceRange);
-  RefCountedImageView                     CreateImageView(RefCountedImage image);
-  RefCountedDescriptorPool                CreateDescriptorPool();
-  RefCountedCommandPool                   CreateCommandPool(const vk::CommandPoolCreateInfo& info);
-  RefCountedCommandBuffer                 CreateCommandBuffer();
-  std::vector< RefCountedCommandBuffer >  CreateCommandBuffers();
-  RefCountedGpuMemoryBlock                CreateGpuMemoryBlock();
-  RefCountedDescriptorSet                 CreateDescriptorSet();
-  RefCountedSampler                       CreateSampler();
+  void Create();
+
+  void CreateDevice();
+
+  FBID CreateSurface( std::unique_ptr< SurfaceFactory > surfaceFactory );
+
+  RefCountedSwapchain CreateSwapchainForSurface( RefCountedSurface surface );
+
+  RefCountedShader CreateShader(); //will see if this will work
+  RefCountedPipeline CreatePipeline();
+
+  RefCountedFence CreateFence( const vk::FenceCreateInfo& fenceCreateInfo );
+
+  RefCountedBuffer CreateBuffer( size_t size, BufferType type );
+
+  RefCountedBuffer CreateBuffer( const vk::BufferCreateInfo& bufferCreateInfo );
+
+  RefCountedFramebuffer CreateFramebuffer();
+
+  RefCountedImage CreateImage( const vk::ImageCreateInfo& imageCreateInfo );
+
+  RefCountedImageView CreateImageView( const vk::ImageViewCreateFlags& flags,
+                                       const RefCountedImage& image,
+                                       vk::ImageViewType viewType,
+                                       vk::Format format,
+                                       vk::ComponentMapping components,
+                                       vk::ImageSubresourceRange subresourceRange );
+
+  RefCountedImageView CreateImageView( RefCountedImage image );
+
+  RefCountedDescriptorPool CreateDescriptorPool();
+
+  RefCountedCommandPool CreateCommandPool( const vk::CommandPoolCreateInfo& info );
+
+  RefCountedCommandBuffer CreateCommandBuffer();
+
+  std::vector< RefCountedCommandBuffer > CreateCommandBuffers();
+
+  RefCountedGpuMemoryBlock CreateGpuMemoryBlock();
+
+  RefCountedDescriptorSet CreateDescriptorSet();
+
+  RefCountedSampler CreateSampler();
 
 public: // Actions
   vk::Result WaitForFence( RefCountedFence fence, uint32_t timeout = 0 );
+
   vk::Result WaitForFences( const std::vector< RefCountedFence >& fences,
                             bool waitAll = true,
-                            uint32_t timeout = std::numeric_limits< uint32_t >::max() );
+                            uint32_t timeout = std::numeric_limits< uint32_t >::max());
+
   vk::Result ResetFence( RefCountedFence fence );
+
   vk::Result ResetFences( const std::vector< RefCountedFence >& fences );
 
+  vk::Result BindImageMemory( RefCountedImage image, RefCountedGpuMemoryBlock memory, uint32_t offset);
+
 public: // Getters
   RefCountedSurface GetSurface( FBID surfaceId );
 
@@ -132,9 +168,12 @@ public: // Getters
 
   const vk::PhysicalDeviceMemoryProperties& GetMemoryProperties() const;
 
-  Queue& GetGraphicsQueue(uint32_t index = 0u) const;
-  Queue& GetTransferQueue(uint32_t index = 0u) const;
-  Queue& GetComputeQueue(uint32_t index = 0u) const;
+  Queue& GetGraphicsQueue( uint32_t index = 0u ) const;
+
+  Queue& GetTransferQueue( uint32_t index = 0u ) const;
+
+  Queue& GetComputeQueue( uint32_t index = 0u ) const;
+
   Queue& GetPresentQueue() const;
 
   Platform GetDefaultPlatform() const;
@@ -146,76 +185,95 @@ public: // Getters
 public: //Cache management methods
 
   void AddBuffer( RefCountedBuffer buffer );
+
   void AddImage( RefCountedImage image );
+
   void AddShader( RefCountedShader shader );
+
   void AddCommandPool( RefCountedCommandPool pool );
+
   void AddDescriptorPool( RefCountedDescriptorPool pool );
+
   void AddFramebuffer( RefCountedFramebuffer framebuffer );
 
   RefCountedShader FindShader( vk::ShaderModule shaderModule );
+
   RefCountedImage FindImage( vk::Image image );
 
   void RemoveBuffer( Buffer& buffer );
+
+  void RemoveImage( Image& image );
+
   void RemoveShader( Shader& shader );
+
   void RemoveCommandPool( CommandPool& commandPool );
+
   void RemoveDescriptorPool( DescriptorPool& pool );
+
   void RemoveFramebuffer( Framebuffer& framebuffer );
+
   void RemoveSampler( Sampler& sampler );
 
   void CollectGarbage();
 
-  void DiscardResource(std::function<void()> deleter);
+  void DiscardResource( std::function< void() > deleter );
 
 private: // Methods
 
-  void                                      CreateInstance( const std::vector<const char*>& extensions,
-                                                            const std::vector<const char*>& validationLayers );
-  void                                      DestroyInstance();
-  void                                      PreparePhysicalDevice();
-  void                                      GetPhysicalDeviceProperties();
-  void                                      GetQueueFamilyProperties();
-  std::vector< vk::DeviceQueueCreateInfo >  GetQueueCreateInfos();
-  std::vector<const char*>                  PrepareDefaultInstanceExtensions();
+  void CreateInstance( const std::vector< const char* >& extensions,
+                       const std::vector< const char* >& validationLayers );
+
+  void DestroyInstance();
+
+  void PreparePhysicalDevice();
+
+  void GetPhysicalDeviceProperties();
+
+  void GetQueueFamilyProperties();
+
+  std::vector< vk::DeviceQueueCreateInfo > GetQueueCreateInfos();
+
+  std::vector< const char* > PrepareDefaultInstanceExtensions();
 
 private: // Members
 
-  std::unique_ptr<GpuMemoryManager>                           mDeviceMemoryManager;
+  std::unique_ptr< GpuMemoryManager > mDeviceMemoryManager;
 
-  vk::Instance                                                mInstance;
-  std::unique_ptr<vk::AllocationCallbacks>                    mAllocator{nullptr};
+  vk::Instance mInstance;
+  std::unique_ptr< vk::AllocationCallbacks > mAllocator{ nullptr };
 
   // physical device
   vk::PhysicalDevice mPhysicalDevice;
 
   // logical device
-  vk::Device                                                  mDevice;
+  vk::Device mDevice;
 
   // physical device properties
-  std::unique_ptr< vk::PhysicalDeviceProperties >             mPhysicalDeviceProperties;
-  std::unique_ptr< vk::PhysicalDeviceMemoryProperties >       mPhysicalDeviceMemoryProperties;
-  std::unique_ptr< vk::PhysicalDeviceFeatures >               mPhysicalDeviceFeatures;
+  std::unique_ptr< vk::PhysicalDeviceProperties > mPhysicalDeviceProperties;
+  std::unique_ptr< vk::PhysicalDeviceMemoryProperties > mPhysicalDeviceMemoryProperties;
+  std::unique_ptr< vk::PhysicalDeviceFeatures > mPhysicalDeviceFeatures;
 
   // queue family properties
-  std::vector< vk::QueueFamilyProperties >                    mQueueFamilyProperties;
+  std::vector< vk::QueueFamilyProperties > mQueueFamilyProperties;
 
-  std::unordered_map< FBID, SwapchainSurfacePair >            mSurfaceFBIDMap;
-  FBID mBaseFBID{0u};
+  std::unordered_map< FBID, SwapchainSurfacePair > mSurfaceFBIDMap;
+  FBID mBaseFBID{ 0u };
 
   // Sets of queues
-  std::vector< std::unique_ptr<Queue> >                       mGraphicsQueues;
-  std::vector< std::unique_ptr<Queue> >                       mTransferQueues;
-  std::vector< std::unique_ptr<Queue> >                       mComputeQueues;
+  std::vector< std::unique_ptr< Queue > > mGraphicsQueues;
+  std::vector< std::unique_ptr< Queue > > mTransferQueues;
+  std::vector< std::unique_ptr< Queue > > mComputeQueues;
   //std::unique_ptr< Queue > mPresentQueue;
 
-  Platform                                                    mPlatform  { Platform::UNDEFINED };
+  Platform mPlatform{ Platform::UNDEFINED };
 
-  std::unique_ptr<Dali::Graphics::VulkanAPI::Controller>      mGfxController;
+  std::unique_ptr< Dali::Graphics::VulkanAPI::Controller > mGfxController;
 
   // TODO: rename
-  std::unique_ptr<PipelineCache>                              mPipelineDatabase;
+  std::unique_ptr< PipelineCache > mPipelineDatabase;
 
-  std::mutex                                                  mMutex;
-  std::unique_ptr< ResourceCache >                            mResourceCache;
+  std::mutex mMutex;
+  std::unique_ptr< ResourceCache > mResourceCache;
 
 };