MCPcopy Create free account
hub / github.com/RavEngine/RavEngine / CreateBuffer

Method CreateBuffer

deps/LLGL/sources/Renderer/Vulkan/VKRenderSystem.cpp:133–172  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

131/* ----- Buffers ------ */
132
133Buffer* VKRenderSystem::CreateBuffer(const BufferDescriptor& desc, const void* initialData)
134{
135 AssertCreateBuffer(desc, static_cast<uint64_t>(std::numeric_limits<VkDeviceSize>::max()));
136
137 /* Create staging buffer */
138 VkBufferCreateInfo stagingCreateInfo;
139 BuildVkBufferCreateInfo(
140 stagingCreateInfo,
141 static_cast<VkDeviceSize>(desc.size),
142 GetStagingVkBufferUsageFlags(desc.cpuAccessFlags)
143 );
144
145 auto stagingBuffer = CreateStagingBuffer(stagingCreateInfo, initialData, desc.size);
146
147 /* Create primary buffer object */
148 auto buffer = TakeOwnership(buffers_, MakeUnique<VKBuffer>(device_, desc));
149
150 /* Allocate device memory */
151 auto memoryRegion = deviceMemoryMngr_->Allocate(
152 buffer->GetDeviceBuffer().GetRequirements(),
153 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
154 );
155 buffer->BindMemoryRegion(device_, memoryRegion);
156
157 /* Copy staging buffer into hardware buffer */
158 device_.CopyBuffer(stagingBuffer.GetVkBuffer(), buffer->GetVkBuffer(), static_cast<VkDeviceSize>(desc.size));
159
160 if (desc.cpuAccessFlags != 0 || (desc.miscFlags & MiscFlags::DynamicUsage) != 0)
161 {
162 /* Store ownership of staging buffer */
163 buffer->TakeStagingBuffer(std::move(stagingBuffer));
164 }
165 else
166 {
167 /* Release staging buffer */
168 stagingBuffer.ReleaseMemoryRegion(*deviceMemoryMngr_);
169 }
170
171 return buffer;
172}
173
174BufferArray* VKRenderSystem::CreateBufferArray(std::uint32_t numBuffers, Buffer* const * bufferArray)
175{

Callers 15

StaticMeshMethod · 0.45
MaterialMethod · 0.45
mainFunction · 0.45
mainFunction · 0.45
mainFunction · 0.45
mainFunction · 0.45
mainFunction · 0.45
mainFunction · 0.45
RunMethod · 0.45
RunMethod · 0.45
CreateVertexBufferMethod · 0.45
CreateIndexBufferMethod · 0.45

Calls 9

BuildVkBufferCreateInfoFunction · 0.85
TakeOwnershipFunction · 0.85
TakeStagingBufferMethod · 0.80
AllocateMethod · 0.45
BindMemoryRegionMethod · 0.45
CopyBufferMethod · 0.45
GetVkBufferMethod · 0.45
ReleaseMemoryRegionMethod · 0.45

Tested by 6

mainFunction · 0.36
mainFunction · 0.36
mainFunction · 0.36
mainFunction · 0.36
mainFunction · 0.36
mainFunction · 0.36