xref: /aosp_15_r20/external/skia/tools/gpu/vk/VkTestMemoryAllocator.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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