MCPcopy Create free account
hub / github.com/comaps/comaps / Unmap

Method Unmap

libs/drape/vulkan/vulkan_gpu_buffer_impl.cpp:80–121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

78}
79
80void VulkanGPUBuffer::Unmap(ref_ptr<VulkanBaseContext> context)
81{
82 VkCommandBuffer commandBuffer = context->GetCurrentMemoryCommandBuffer();
83 CHECK(commandBuffer != nullptr, ());
84
85 VkBuffer stagingBuffer = m_stagingBufferRef->GetReservationById(m_reservationId).m_stagingBuffer;
86 if (m_ownStagingBuffer != nullptr)
87 {
88 m_ownStagingBuffer->Flush();
89 m_ownStagingBuffer.reset();
90 }
91 m_stagingBufferRef = nullptr;
92
93 CHECK_LESS(m_mappingByteOffsetMin, m_mappingByteOffsetMax, ());
94
95 // Set up a barrier to prevent data collisions (write-after-write, write-after-read).
96 VkBufferMemoryBarrier barrier = {};
97 barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
98 barrier.pNext = nullptr;
99 barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | VK_ACCESS_INDEX_READ_BIT;
100 barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
101 barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
102 barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
103 barrier.buffer = m_geometryBuffer.m_buffer;
104 barrier.offset = m_mappingByteOffsetMin;
105 barrier.size = m_mappingByteOffsetMax - m_mappingByteOffsetMin;
106 vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT,
107 VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 1, &barrier, 0, nullptr);
108
109 // Schedule command to copy from the staging buffer to the geometry buffer.
110 vkCmdCopyBuffer(commandBuffer, stagingBuffer, m_geometryBuffer.m_buffer,
111 static_cast<uint32_t>(m_regionsToCopy.size()), m_regionsToCopy.data());
112
113 // Set up barriers to prevent data collisions (read-after-write).
114 barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
115 barrier.dstAccessMask = VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
116 vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, 0, 0, nullptr,
117 1, &barrier, 0, nullptr);
118
119 m_mappingByteOffset = 0;
120 m_regionsToCopy.clear();
121}
122
123void VulkanGPUBuffer::Resize(ref_ptr<VulkanBaseContext> context, void const * data, uint32_t elementCount)
124{

Callers

nothing calls this directly

Calls 6

FlushMethod · 0.45
resetMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected