1 /* 2 * Copyright 2024 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef VkTestMemoryAllocator_DEFINED 9 #define VkTestMemoryAllocator_DEFINED 10 11 #include <vk_mem_alloc.h> 12 #include "include/gpu/vk/VulkanMemoryAllocator.h" 13 14 namespace skgpu { 15 class VulkanExtensions; 16 struct VulkanInterface; 17 } // namespace skgpu 18 19 namespace sk_gpu_test { 20 21 // A test-only Vulkan memory allocator. Based on 22 // https://skia.googlesource.com/skia/+/c3fbd20fbc7d3662dd31a0e4139226d2951d1ae4/src/gpu/vk/VulkanAMDMemoryAllocator.h. 23 class VkTestMemoryAllocator : public skgpu::VulkanMemoryAllocator { 24 public: 25 static sk_sp<VulkanMemoryAllocator> Make(VkInstance instance, 26 VkPhysicalDevice physicalDevice, 27 VkDevice device, 28 uint32_t physicalDeviceVersion, 29 const skgpu::VulkanExtensions* extensions, 30 const skgpu::VulkanInterface* interface); 31 32 ~VkTestMemoryAllocator() override; 33 34 VkResult allocateImageMemory(VkImage image, 35 uint32_t allocationPropertyFlags, 36 skgpu::VulkanBackendMemory*) override; 37 38 VkResult allocateBufferMemory(VkBuffer buffer, 39 BufferUsage usage, 40 uint32_t allocationPropertyFlags, 41 skgpu::VulkanBackendMemory*) override; 42 43 void freeMemory(const skgpu::VulkanBackendMemory&) override; 44 45 void getAllocInfo(const skgpu::VulkanBackendMemory&, skgpu::VulkanAlloc*) const override; 46 47 VkResult mapMemory(const skgpu::VulkanBackendMemory&, void** data) override; 48 void unmapMemory(const skgpu::VulkanBackendMemory&) override; 49 50 VkResult flushMemory(const skgpu::VulkanBackendMemory&, 51 VkDeviceSize offset, 52 VkDeviceSize size) override; 53 VkResult invalidateMemory(const skgpu::VulkanBackendMemory&, 54 VkDeviceSize offset, 55 VkDeviceSize size) override; 56 57 std::pair<uint64_t, uint64_t> totalAllocatedAndUsedMemory() const override; 58 59 private: 60 VkTestMemoryAllocator(VmaAllocator allocator); 61 62 VmaAllocator fAllocator; 63 }; 64 65 } // namespace sk_gpu_test 66 67 #endif // VkTestMemoryAllocator_DEFINED 68