* Copyright 2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_VulkanMemory_DEFINED
#define skgpu_VulkanMemory_DEFINED
#include "include/gpu/vk/VulkanMemoryAllocator.h"
#include "include/private/gpu/vk/SkiaVulkan.h"
#include "src/gpu/ganesh/vk/GrVkGpu.h"
#include <functional>
namespace skgpu {
enum class Protected : bool;
struct VulkanAlloc;
namespace VulkanMemory {
using CheckResult = bool(VkResult);
bool AllocBufferMemory(VulkanMemoryAllocator*,
VkBuffer buffer,
skgpu::Protected isProtected,
skgpu::VulkanMemoryAllocator::BufferUsage,
bool shouldPersistentlyMapCpuToGpu,
const std::function<CheckResult>&,
#ifdef SKIA_DFX_FOR_OHOS
VulkanAlloc* alloc,
size_t size);
#else
VulkanAlloc* alloc);
#endif
void FreeBufferMemory(VulkanMemoryAllocator*, const VulkanAlloc& alloc);
void FreeBufferMemory(const GrVkGpu* gpu, const VulkanAlloc& alloc);
bool AllocImageMemory(VulkanMemoryAllocator*,
VulkanMemoryAllocator*,
VkImage image,
skgpu::Protected isProtected,
bool forceDedicatedMemory,
bool useLazyAllocation,
const std::function<CheckResult>&,
VulkanAlloc* alloc,
int memorySize);
void FreeImageMemory(VulkanMemoryAllocator*, const VulkanAlloc& alloc);
#ifndef CROSS_PLATFORM
bool ImportAndBindBufferMemory(GrVkGpu* gpu,
OH_NativeBuffer *nativeBuffer,
VkBuffer buffer,
VulkanAlloc* alloc);
#endif
void* MapAlloc(VulkanMemoryAllocator*,
const VulkanAlloc&,
const std::function<CheckResult>&);
void UnmapAlloc(VulkanMemoryAllocator*, const VulkanAlloc& alloc);
void FlushMappedAlloc(VulkanMemoryAllocator*,
const skgpu::VulkanAlloc&,
VkDeviceSize offset,
VkDeviceSize size,
const std::function<CheckResult>&);
void InvalidateMappedAlloc(VulkanMemoryAllocator*,
const VulkanAlloc& alloc,
VkDeviceSize offset,
VkDeviceSize size,
const std::function<CheckResult>&);
void GetNonCoherentMappedMemoryRange(const VulkanAlloc&,
VkDeviceSize offset,
VkDeviceSize size,
VkDeviceSize alignment,
VkMappedMemoryRange*);
}
}
#endif