/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_VulkanAMDMemoryAllocator_DEFINED #define skgpu_VulkanAMDMemoryAllocator_DEFINED #include "include/core/SkRefCnt.h" #include "include/gpu/vk/VulkanMemoryAllocator.h" #include "include/gpu/vk/VulkanTypes.h" #include "include/private/gpu/vk/SkiaVulkan.h" #include "src/gpu/vk/vulkanmemoryallocator/VulkanMemoryAllocatorWrapper.h" #include #include #include namespace skgpu { class VulkanExtensions; enum class ThreadSafe : bool; struct VulkanInterface; class VulkanAMDMemoryAllocator : public VulkanMemoryAllocator { public: static sk_sp Make(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device, uint32_t physicalDeviceVersion, const VulkanExtensions* extensions, const VulkanInterface* interface, ThreadSafe, std::optional blockSize); ~VulkanAMDMemoryAllocator() override; VkResult allocateImageMemory(VkImage image, uint32_t allocationPropertyFlags, skgpu::VulkanBackendMemory*) override; VkResult allocateBufferMemory(VkBuffer buffer, BufferUsage usage, uint32_t allocationPropertyFlags, skgpu::VulkanBackendMemory*) override; void freeMemory(const VulkanBackendMemory&) override; void getAllocInfo(const VulkanBackendMemory&, VulkanAlloc*) const override; VkResult mapMemory(const VulkanBackendMemory&, void** data) override; void unmapMemory(const VulkanBackendMemory&) override; VkResult flushMemory(const VulkanBackendMemory&, VkDeviceSize offset, VkDeviceSize size) override; VkResult invalidateMemory(const VulkanBackendMemory&, VkDeviceSize offset, VkDeviceSize size) override; std::pair totalAllocatedAndUsedMemory() const override; private: VulkanAMDMemoryAllocator(VmaAllocator allocator); VmaAllocator fAllocator; }; } // namespace skgpu #endif // skgpu_VulkanAMDMemoryAllocator_DEFINED