Compare commits

..

No commits in common. "7cc871fb4899c647c33dd53b458c48765c861d53" and "31b93deecb3363ead4fbf43a5b123a059c53f33a" have entirely different histories.

3 changed files with 21 additions and 73 deletions

View file

@ -1,6 +1,10 @@
# This file was generated by nvfetcher, please do not modify it manually. # This file was generated by nvfetcher, please do not modify it manually.
{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }:
{ {
fetchgit,
fetchurl,
fetchFromGitHub,
dockerTools,
}: {
fmt = { fmt = {
pname = "fmt"; pname = "fmt";
version = "11.0.2"; version = "11.0.2";

6
flake.lock generated
View file

@ -2,11 +2,11 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1728588307, "lastModified": 1728001300,
"narHash": "sha256-Y1mO+iz3RUNfmu2m2c42BggOLV5q0z2CWyJzf1ypDLA=", "narHash": "sha256-W7PYJ6s+A91V1WZOTef8y3t1BGQKCfcLtHjOKcP5ScA=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "45093dff80ae7cdefc55abb77075d2931d6b47ca", "rev": "e00cc9f2fa7eaac3232e0de9b0b86dfd58b1f43c",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -578,87 +578,31 @@ class VulkanApp {
} }
fn createVertexBuffer() -> void { fn createVertexBuffer() -> void {
vk::DeviceSize bufferSize = sizeof(mVertices[0]) * mVertices.size();
vk::UniqueBuffer stagingBuffer;
vk::UniqueDeviceMemory stagingBufferMemory;
createBuffer(
bufferSize,
vk::BufferUsageFlagBits::eVertexBuffer,
vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent,
stagingBuffer,
stagingBufferMemory
);
void* data = mDevice->mapMemory(stagingBufferMemory.get(), 0, bufferSize);
memcpy(data, mVertices.data(), static_cast<usize>(bufferSize));
mDevice->unmapMemory(stagingBufferMemory.get());
createBuffer(
bufferSize,
vk::BufferUsageFlagBits::eVertexBuffer | vk::BufferUsageFlagBits::eTransferDst,
vk::MemoryPropertyFlagBits::eDeviceLocal,
mVertexBuffer,
mVertexBufferMemory
);
copyBuffer(stagingBuffer.get(), mVertexBuffer.get(), bufferSize);
stagingBuffer.reset();
stagingBufferMemory.reset();
}
fn createBuffer(
vk::DeviceSize deviceSize,
vk::BufferUsageFlags bufferUsageFlags,
vk::MemoryPropertyFlags memoryPropertyFlags,
vk::UniqueBuffer& buffer,
vk::UniqueDeviceMemory& bufferMemory
) -> void {
vk::BufferCreateInfo bufferInfo { vk::BufferCreateInfo bufferInfo {
.size = deviceSize, .size = sizeof(mVertices[0]) * mVertices.size(),
.usage = bufferUsageFlags, .usage = vk::BufferUsageFlagBits::eVertexBuffer,
.sharingMode = vk::SharingMode::eExclusive, .sharingMode = vk::SharingMode::eExclusive,
}; };
buffer = mDevice->createBufferUnique(bufferInfo); mVertexBuffer = mDevice->createBufferUnique(bufferInfo, nullptr);
vk::MemoryRequirements memRequirements = mDevice->getBufferMemoryRequirements(buffer.get()); vk::MemoryRequirements memRequirements = mDevice->getBufferMemoryRequirements(mVertexBuffer.get());
vk::MemoryAllocateInfo allocInfo { vk::MemoryAllocateInfo allocInfo {
.allocationSize = memRequirements.size, .allocationSize = memRequirements.size,
.memoryTypeIndex = findMemoryType(memRequirements.memoryTypeBits, memoryPropertyFlags), .memoryTypeIndex = findMemoryType(
memRequirements.memoryTypeBits,
vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
),
}; };
bufferMemory = mDevice->allocateMemoryUnique(allocInfo); mVertexBufferMemory = mDevice->allocateMemoryUnique(allocInfo);
mDevice->bindBufferMemory(buffer.get(), bufferMemory.get(), 0); mDevice->bindBufferMemory(mVertexBuffer.get(), mVertexBufferMemory.get(), 0);
}
fn copyBuffer(vk::Buffer srcBuffer, vk::Buffer dstBuffer, vk::DeviceSize deviceSize) -> void { void* data = mDevice->mapMemory(mVertexBufferMemory.get(), 0, bufferInfo.size);
vk::CommandBufferAllocateInfo allocInfo { memcpy(data, mVertices.data(), static_cast<usize>(bufferInfo.size));
.commandPool = mCommandPool.get(), mDevice->unmapMemory(mVertexBufferMemory.get());
.level = vk::CommandBufferLevel::ePrimary,
.commandBufferCount = 1,
};
vk::UniqueCommandBuffer commandBuffer = std::move(mDevice->allocateCommandBuffersUnique(allocInfo)[0]);
vk::CommandBufferBeginInfo beginInfo { .flags = vk::CommandBufferUsageFlagBits::eOneTimeSubmit };
commandBuffer->begin(beginInfo);
vk::BufferCopy copyRegion { .size = deviceSize };
commandBuffer->copyBuffer(srcBuffer, dstBuffer, 1, &copyRegion);
commandBuffer->end();
vk::SubmitInfo submitInfo { .commandBufferCount = 1, .pCommandBuffers = &commandBuffer.get() };
mGraphicsQueue.submit(submitInfo, nullptr);
mGraphicsQueue.waitIdle();
} }
fn findMemoryType(u32 typeFilter, vk::MemoryPropertyFlags properties) -> u32 { fn findMemoryType(u32 typeFilter, vk::MemoryPropertyFlags properties) -> u32 {