| /* |
| * 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 GrVkAMDMemoryAllocator_DEFINED |
| #define GrVkAMDMemoryAllocator_DEFINED |
| |
| |
| #include "include/gpu/vk/GrVkMemoryAllocator.h" |
| |
| #include "GrVulkanMemoryAllocator.h" |
| |
| struct GrVkInterface; |
| |
| class GrVkAMDMemoryAllocator : public GrVkMemoryAllocator { |
| public: |
| GrVkAMDMemoryAllocator(VkPhysicalDevice physicalDevice, VkDevice device, |
| sk_sp<const GrVkInterface> interface); |
| |
| ~GrVkAMDMemoryAllocator() override; |
| |
| bool allocateMemoryForImage(VkImage image, AllocationPropertyFlags flags, GrVkBackendMemory*) override; |
| |
| bool allocateMemoryForBuffer(VkBuffer buffer, BufferUsage usage, |
| AllocationPropertyFlags flags, GrVkBackendMemory*) override; |
| |
| void freeMemory(const GrVkBackendMemory&) override; |
| |
| void getAllocInfo(const GrVkBackendMemory&, GrVkAlloc*) const override; |
| |
| void* mapMemory(const GrVkBackendMemory&) override; |
| void unmapMemory(const GrVkBackendMemory&) override; |
| |
| void flushMappedMemory(const GrVkBackendMemory&, VkDeviceSize offset, |
| VkDeviceSize size) override; |
| void invalidateMappedMemory(const GrVkBackendMemory&, VkDeviceSize offset, |
| VkDeviceSize size) override; |
| |
| uint64_t totalUsedMemory() const override; |
| uint64_t totalAllocatedMemory() const override; |
| |
| private: |
| VmaAllocator fAllocator; |
| |
| // If a future version of the AMD allocator has helper functions for flushing and invalidating |
| // memory, then we won't need to save the GrVkInterface here since we won't need to make direct |
| // vulkan calls. |
| sk_sp<const GrVkInterface> fInterface; |
| VkDevice fDevice; |
| |
| typedef GrVkMemoryAllocator INHERITED; |
| }; |
| |
| #endif |