blob: b9d2a613affc3f456cb67e2dc33b8f05651daa21 [file] [log] [blame]
/*
* 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 skgpu_VulkanAMDMemoryAllocator_DEFINED
#define skgpu_VulkanAMDMemoryAllocator_DEFINED
#include "include/gpu/vk/VulkanMemoryAllocator.h"
#include "src/gpu/vk/vulkanmemoryallocator/VulkanMemoryAllocatorWrapper.h"
#include "include/core/SkRefCnt.h"
#include "include/gpu/vk/VulkanTypes.h"
#include "include/private/gpu/vk/SkiaVulkan.h"
#include <cstdint>
#include <utility>
namespace skgpu {
class VulkanExtensions;
struct VulkanInterface;
enum class ThreadSafe : bool {
kNo = false,
kYes = true,
};
class VulkanAMDMemoryAllocator : public VulkanMemoryAllocator {
public:
static sk_sp<VulkanMemoryAllocator> Make(VkInstance instance,
VkPhysicalDevice physicalDevice,
VkDevice device,
uint32_t physicalDeviceVersion,
const VulkanExtensions* extensions,
const VulkanInterface* interface,
ThreadSafe);
~VulkanAMDMemoryAllocator() 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 VulkanBackendMemory&) override;
void getAllocInfo(const VulkanBackendMemory&, VulkanAlloc*) const override;
VkResult mapMemory(const VulkanBackendMemory&, void** data) override;
void unmapMemory(const VulkanBackendMemory&) override;
VkResult flushMemory(const VulkanBackendMemory&, VkDeviceSize offset,
VkDeviceSize size) override;
VkResult invalidateMemory(const VulkanBackendMemory&, VkDeviceSize offset,
VkDeviceSize size) override;
std::pair<uint64_t, uint64_t> totalAllocatedAndUsedMemory() const override;
private:
VulkanAMDMemoryAllocator(VmaAllocator allocator);
VmaAllocator fAllocator;
};
} // namespace skgpu
#endif // skgpu_VulkanAMDMemoryAllocator_DEFINED