blob: 36e4868489468e916d73ac1172805d35d497dd3c [file] [log] [blame]
/*
* 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 <vk_mem_alloc.h>
#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<VulkanMemoryAllocator> 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<uint64_t, uint64_t> totalAllocatedAndUsedMemory() const override;
private:
VkTestMemoryAllocator(VmaAllocator allocator);
VmaAllocator fAllocator;
};
} // namespace sk_gpu_test
#endif // VkTestMemoryAllocator_DEFINED