/* * Copyright 2024 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef VkTestMemoryAllocator_DEFINED #define VkTestMemoryAllocator_DEFINED #include #include "include/gpu/vk/VulkanMemoryAllocator.h" namespace skgpu { class VulkanExtensions; struct VulkanInterface; } // namespace skgpu namespace sk_gpu_test { // A test-only Vulkan memory allocator. Based on // https://skia.googlesource.com/skia/+/c3fbd20fbc7d3662dd31a0e4139226d2951d1ae4/src/gpu/vk/VulkanAMDMemoryAllocator.h. class VkTestMemoryAllocator : public skgpu::VulkanMemoryAllocator { public: static sk_sp Make(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device, uint32_t physicalDeviceVersion, const skgpu::VulkanExtensions* extensions, const skgpu::VulkanInterface* interface); ~VkTestMemoryAllocator() 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 skgpu::VulkanBackendMemory&) override; void getAllocInfo(const skgpu::VulkanBackendMemory&, skgpu::VulkanAlloc*) const override; VkResult mapMemory(const skgpu::VulkanBackendMemory&, void** data) override; void unmapMemory(const skgpu::VulkanBackendMemory&) override; VkResult flushMemory(const skgpu::VulkanBackendMemory&, VkDeviceSize offset, VkDeviceSize size) override; VkResult invalidateMemory(const skgpu::VulkanBackendMemory&, VkDeviceSize offset, VkDeviceSize size) override; std::pair totalAllocatedAndUsedMemory() const override; private: VkTestMemoryAllocator(VmaAllocator allocator); VmaAllocator fAllocator; }; } // namespace sk_gpu_test #endif // VkTestMemoryAllocator_DEFINED