| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef GPU_VULKAN_SKIA_VK_MEMORY_ALLOCATOR_IMPL_H_ |
| #define GPU_VULKAN_SKIA_VK_MEMORY_ALLOCATOR_IMPL_H_ |
| |
| #include "base/component_export.h" |
| #include "gpu/vulkan/vma_wrapper.h" |
| #include "third_party/skia/include/gpu/vk/VulkanMemoryAllocator.h" |
| #include "third_party/skia/include/gpu/vk/VulkanTypes.h" |
| |
| namespace gpu { |
| |
| class COMPONENT_EXPORT(VULKAN) SkiaVulkanMemoryAllocator |
| : public skgpu::VulkanMemoryAllocator { |
| public: |
| explicit SkiaVulkanMemoryAllocator(VmaAllocator allocator); |
| ~SkiaVulkanMemoryAllocator() override = default; |
| |
| SkiaVulkanMemoryAllocator(const SkiaVulkanMemoryAllocator&) = delete; |
| SkiaVulkanMemoryAllocator& operator=(const SkiaVulkanMemoryAllocator&) = |
| delete; |
| |
| uint64_t totalLazyAllocatedMemory() const { return lazy_allocated_size_; } |
| |
| private: |
| // skgpu::VulkanMemoryAllocator: |
| VkResult allocateImageMemory( |
| VkImage image, |
| uint32_t flags, |
| skgpu::VulkanBackendMemory* backend_memory) override; |
| VkResult allocateBufferMemory( |
| VkBuffer buffer, |
| BufferUsage usage, |
| uint32_t flags, |
| skgpu::VulkanBackendMemory* backend_memory) override; |
| void freeMemory(const skgpu::VulkanBackendMemory& memory) override; |
| |
| void getAllocInfo(const skgpu::VulkanBackendMemory& memory, |
| skgpu::VulkanAlloc* alloc) const override; |
| |
| VkResult mapMemory(const skgpu::VulkanBackendMemory& memory, |
| void** data) override; |
| void unmapMemory(const skgpu::VulkanBackendMemory& memory) override; |
| |
| VkResult flushMemory(const skgpu::VulkanBackendMemory& memory, |
| VkDeviceSize offset, |
| VkDeviceSize size) override; |
| VkResult invalidateMemory(const skgpu::VulkanBackendMemory& memory, |
| VkDeviceSize offset, |
| VkDeviceSize size) override; |
| |
| std::pair<uint64_t, uint64_t> totalAllocatedAndUsedMemory() const override; |
| |
| const VmaAllocator allocator_; |
| |
| // Tracks vulkan memory that has lazily allocated flag. |
| VkDeviceSize lazy_allocated_size_ = 0; |
| }; |
| |
| } // namespace gpu |
| |
| #endif // GPU_VULKAN_SKIA_VK_MEMORY_ALLOCATOR_IMPL_H_ |