@@ -70,36 +70,23 @@ We're now going to change `createVertexBuffer` to only use a host visible buffer
7070----
7171void createVertexBuffer() {
7272 vk::DeviceSize bufferSize = sizeof(vertices[0]) * vertices.size();
73+ vk::raii::Buffer stagingBuffer(nullptr);
74+ vk::raii::DeviceMemory stagingBufferMemory(nullptr);
7375
74- vk::BufferCreateInfo stagingInfo{ .size = bufferSize, .usage = vk::BufferUsageFlagBits::eTransferSrc, .sharingMode = vk::SharingMode::eExclusive };
75- vk::raii::Buffer stagingBuffer(device, stagingInfo);
76- vk::MemoryRequirements memRequirementsStaging = stagingBuffer.getMemoryRequirements();
77- vk::MemoryAllocateInfo memoryAllocateInfoStaging{ .allocationSize = memRequirementsStaging.size, .memoryTypeIndex = findMemoryType(memRequirementsStaging.memoryTypeBits, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent) };
78- vk::raii::DeviceMemory stagingBufferMemory(device, memoryAllocateInfoStaging);
76+ createBuffer(bufferSize, vk::BufferUsageFlagBits::eTransferSrc, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent, stagingBuffer, stagingBufferMemory);
7977
80- stagingBuffer.bindMemory(stagingBufferMemory, 0);
81- void* dataStaging = stagingBufferMemory.mapMemory(0, stagingInfo.size);
82- memcpy(dataStaging, vertices.data(), stagingInfo.size);
78+ void* data = stagingBufferMemory.mapMemory(0, bufferSize);
79+ memcpy(data, vertices.data(), bufferSize);
8380 stagingBufferMemory.unmapMemory();
8481
85- vk::BufferCreateInfo bufferInfo{ .size = bufferSize, .usage = vk::BufferUsageFlagBits::eVertexBuffer | vk::BufferUsageFlagBits::eTransferDst, .sharingMode = vk::SharingMode::eExclusive };
86- vertexBuffer = vk::raii::Buffer(device, bufferInfo);
82+ createBuffer(bufferSize, vk::BufferUsageFlagBits::eTransferDst | vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eDeviceLocal, vertexBuffer, vertexBufferMemory);
8783
88- vk::MemoryRequirements memRequirements = vertexBuffer.getMemoryRequirements();
89- vk::MemoryAllocateInfo memoryAllocateInfo{ .allocationSize = memRequirements.size, .memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eDeviceLocal) };
90- vertexBufferMemory = vk::raii::DeviceMemory( device, memoryAllocateInfo );
91-
92- vertexBuffer.bindMemory( *vertexBufferMemory, 0 );
93-
94- copyBuffer(stagingBuffer, vertexBuffer, stagingInfo.size);
84+ copyBuffer(stagingBuffer, vertexBuffer, bufferSize);
9585}
9686----
9787
9888We're now using a new `stagingBuffer` with `stagingBufferMemory` for mapping and copying the vertex data.
9989In this chapter, we're going to use two new buffer usage flags:
100- Note, we have to create a temporary pointer to a new vk::raii::Buffer object
101- because the vk::raii::Buffer has the constructor deleted and thus doesn't
102- play well with std::make_unique, this is just a trick to get it to work.
10390
10491* `VK_BUFFER_USAGE_TRANSFER_SRC_BIT`: Buffer can be used as source in a memory transfer operation.
10592* `VK_BUFFER_USAGE_TRANSFER_DST_BIT`: Buffer can be used as destination in a memory transfer operation.
@@ -175,14 +162,7 @@ We can now call `copyBuffer` from the `createVertexBuffer` function to move the
175162
176163[,c++]
177164----
178- vk::BufferCreateInfo bufferInfo{ .size = bufferSize, .usage = vk::BufferUsageFlagBits::eVertexBuffer | vk::BufferUsageFlagBits::eTransferDst, .sharingMode = vk::SharingMode::eExclusive };
179- vertexBuffer = vk::raii::Buffer(device, bufferInfo);
180-
181- vk::MemoryRequirements memRequirements = vertexBuffer.getMemoryRequirements();
182- vk::MemoryAllocateInfo memoryAllocateInfo{ .allocationSize = memRequirements.size, .memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eDeviceLocal) };
183- vertexBufferMemory = vk::raii::DeviceMemory( device, memoryAllocateInfo );
184-
185- vertexBuffer.bindMemory( *vertexBufferMemory, 0 );
165+ createBuffer(bufferSize, vk::BufferUsageFlagBits::eTransferDst | vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eDeviceLocal, vertexBuffer, vertexBufferMemory);
186166
187167copyBuffer(stagingBuffer, vertexBuffer, bufferSize);
188168----
0 commit comments