21 std::string_view label) {
40 requiresMappable ? BufferUsage::kCpuWritesGpuReads : BufferUsage::kGpuOnly;
74 allocUsage = BufferUsage::kCpuWritesGpuReads;
78 allocUsage = BufferUsage::kTransfersFromCpuToGpu;
82 allocUsage = BufferUsage::kTransfersFromGpuToCpu;
110 bool shouldPersistentlyMapCpuToGpu =
111 sharedContext->vulkanCaps().shouldPersistentlyMapCpuToGpuBuffers();
119 shouldPersistentlyMapCpuToGpu,
158 std::string_view label)
159 :
Buffer(sharedContext, size,
std::move(label))
162 , fBufferUsageFlags(usageFlags)
168 this->internalUnmap(0, this->
size());
185void VulkanBuffer::internalMap(
size_t readOffset,
size_t readSize) {
187 if (this->isMappable()) {
193 SkASSERT(!this->debugHasCommandBufferRef());
206 if (
fMapPtr && readSize != 0) {
210 "skgpu::VulkanMemory::InvalidateMappedAlloc "
211 "(readOffset:%zu, readSize:%zu)",
222 checkResult_invalidate);
227void VulkanBuffer::internalUnmap(
size_t flushOffset,
size_t flushSize) {
233 const VulkanSharedContext*
sharedContext = this->vulkanSharedContext();
237 "skgpu::VulkanMemory::FlushMappedAlloc "
238 "(flushOffset:%zu, flushSize:%zu)",
253 this->internalMap(0, fBufferUsedForCPURead ? this->
size() : 0);
259 this->internalUnmap(0, fBufferUsedForCPURead ? 0 : this->
size());
270 VulkanBuffer::AccessMaskToPipelineSrcStageFlags(fCurrentAccessMask);
286 fCurrentAccessMask = dstAccessMask;
#define VULKAN_CALL(IFACE, X)
#define VULKAN_CALL_RESULT(SHARED_CONTEXT, RESULT, X)
#define VULKAN_LOG_IF_NOT_SUCCESS(SHARED_CONTEXT, RESULT, X,...)
const SharedContext * sharedContext() const
Protected isProtected() const
void freeGpuData() override
static sk_sp< Buffer > Make(const VulkanSharedContext *, size_t, BufferType, AccessPattern, std::string_view label)
void setBufferAccess(VulkanCommandBuffer *buffer, VkAccessFlags dstAccessMask, VkPipelineStageFlags dstStageMask) const
void addBufferMemoryBarrier(const Resource *resource, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkBufferMemoryBarrier *barrier)
FlutterSemanticsFlag flags
static const uint8_t buffer[]
void FreeBufferMemory(VulkanMemoryAllocator *, const VulkanAlloc &alloc)
bool AllocBufferMemory(VulkanMemoryAllocator *, VkBuffer buffer, skgpu::VulkanMemoryAllocator::BufferUsage, bool shouldPersistentlyMapCpuToGpu, const std::function< CheckResult > &, VulkanAlloc *alloc)
void * MapAlloc(VulkanMemoryAllocator *, const VulkanAlloc &, const std::function< CheckResult > &)
void FlushMappedAlloc(VulkanMemoryAllocator *, const skgpu::VulkanAlloc &, VkDeviceSize offset, VkDeviceSize size, const std::function< CheckResult > &)
void UnmapAlloc(VulkanMemoryAllocator *, const VulkanAlloc &alloc)
void InvalidateMappedAlloc(VulkanMemoryAllocator *, const VulkanAlloc &alloc, VkDeviceSize offset, VkDeviceSize size, const std::function< CheckResult > &)
uint32_t queueFamilyIndexCount
const uint32_t * pQueueFamilyIndices
VkBufferCreateFlags flags
VkSharingMode sharingMode
VulkanBackendMemory fBackendMemory
VkFlags VkPipelineStageFlags
@ VK_SHARING_MODE_EXCLUSIVE
VkFlags VkBufferUsageFlags
@ VK_BUFFER_USAGE_TRANSFER_DST_BIT
@ VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
@ VK_BUFFER_USAGE_INDEX_BUFFER_BIT
@ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
@ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT
@ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
@ VK_BUFFER_USAGE_TRANSFER_SRC_BIT
@ VK_ACCESS_HOST_READ_BIT
@ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
@ VK_ACCESS_TRANSFER_WRITE_BIT
@ VK_ACCESS_HOST_WRITE_BIT
@ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT
@ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
@ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
@ VK_ACCESS_INDIRECT_COMMAND_READ_BIT
@ VK_ACCESS_TRANSFER_READ_BIT
@ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
@ VK_ACCESS_SHADER_WRITE_BIT
@ VK_ACCESS_SHADER_READ_BIT
@ VK_ACCESS_UNIFORM_READ_BIT
@ VK_ACCESS_INDEX_READ_BIT
@ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT
@ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
@ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
@ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
@ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
@ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
@ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
@ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
@ VK_PIPELINE_STAGE_HOST_BIT
@ VK_PIPELINE_STAGE_TRANSFER_BIT
#define VK_QUEUE_FAMILY_IGNORED
@ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
@ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER