{
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;
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 );
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;
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;
};