diff --git a/_sources/generated.nix b/_sources/generated.nix index f71bde3..af0fe60 100644 --- a/_sources/generated.nix +++ b/_sources/generated.nix @@ -1,6 +1,10 @@ # This file was generated by nvfetcher, please do not modify it manually. -{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }: { + fetchgit, + fetchurl, + fetchFromGitHub, + dockerTools, +}: { fmt = { pname = "fmt"; version = "11.0.2"; diff --git a/flake.lock b/flake.lock index b611848..5f13307 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1728588307, - "narHash": "sha256-Y1mO+iz3RUNfmu2m2c42BggOLV5q0z2CWyJzf1ypDLA=", + "lastModified": 1728001300, + "narHash": "sha256-W7PYJ6s+A91V1WZOTef8y3t1BGQKCfcLtHjOKcP5ScA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "45093dff80ae7cdefc55abb77075d2931d6b47ca", + "rev": "e00cc9f2fa7eaac3232e0de9b0b86dfd58b1f43c", "type": "github" }, "original": { diff --git a/src/main.cpp b/src/main.cpp index 1e1ad53..737acfb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -578,87 +578,31 @@ class VulkanApp { } 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(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 { - .size = deviceSize, - .usage = bufferUsageFlags, + .size = sizeof(mVertices[0]) * mVertices.size(), + .usage = vk::BufferUsageFlagBits::eVertexBuffer, .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 { .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 { - vk::CommandBufferAllocateInfo allocInfo { - .commandPool = mCommandPool.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, ©Region); - - commandBuffer->end(); - - vk::SubmitInfo submitInfo { .commandBufferCount = 1, .pCommandBuffers = &commandBuffer.get() }; - - mGraphicsQueue.submit(submitInfo, nullptr); - mGraphicsQueue.waitIdle(); + void* data = mDevice->mapMemory(mVertexBufferMemory.get(), 0, bufferInfo.size); + memcpy(data, mVertices.data(), static_cast(bufferInfo.size)); + mDevice->unmapMemory(mVertexBufferMemory.get()); } fn findMemoryType(u32 typeFilter, vk::MemoryPropertyFlags properties) -> u32 {