Skip to content

Commit 01893a1

Browse files
committed
Making use of the createBuffer abstraction in the Stabing Buffer section of the Vertex Buffer chapter
1 parent 0a81443 commit 01893a1

1 file changed

Lines changed: 8 additions & 28 deletions

File tree

en/04_Vertex_buffers/02_Staging_buffer.adoc

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -70,36 +70,23 @@ We're now going to change `createVertexBuffer` to only use a host visible buffer
7070
----
7171
void 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

9888
We're now using a new `stagingBuffer` with `stagingBufferMemory` for mapping and copying the vertex data.
9989
In 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
187167
copyBuffer(stagingBuffer, vertexBuffer, bufferSize);
188168
----

0 commit comments

Comments
 (0)