Fixed by initializing the data.

This commit is contained in:
Zed A. Shaw 2025-12-14 23:37:00 -05:00
parent c905ef9ca7
commit 6d29fb718b

View file

@ -36,6 +36,7 @@ void VulkanEngine::init()
init_descriptors(); init_descriptors();
init_pipelines(); init_pipelines();
_gui.init_imgui(VulkanEngine::Get()); _gui.init_imgui(VulkanEngine::Get());
init_default_data();
//everything went fine //everything went fine
_isInitialized = true; _isInitialized = true;
@ -183,7 +184,7 @@ void VulkanEngine::draw_geometry(VkCommandBuffer cmd)
VkViewport viewport{ VkViewport viewport{
.x = 0, .x = 0,
.y = 0, .y = 0,
.width = (float)_drawExtent.width, .width = (float)_drawExtent.width,
.height = (float)_drawExtent.height, .height = (float)_drawExtent.height,
.minDepth = 0.0f, .minDepth = 0.0f,
@ -208,7 +209,7 @@ void VulkanEngine::draw_geometry(VkCommandBuffer cmd)
.vertexBuffer = rectangle.vertexBufferAddress, .vertexBuffer = rectangle.vertexBufferAddress,
}; };
vkCmdPushConstants(cmd, _meshPipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(GPUDrawPushConstants), vkCmdPushConstants(cmd, _meshPipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(GPUDrawPushConstants),
&push_constants); &push_constants);
vkCmdBindIndexBuffer(cmd, rectangle.indexBuffer.buffer, 0, VK_INDEX_TYPE_UINT32); vkCmdBindIndexBuffer(cmd, rectangle.indexBuffer.buffer, 0, VK_INDEX_TYPE_UINT32);
@ -259,14 +260,14 @@ void VulkanEngine::init_vulkan() {
.synchronization2 = true, .synchronization2 = true,
.dynamicRendering = true, .dynamicRendering = true,
}; };
//vulkan 1.2 features //vulkan 1.2 features
VkPhysicalDeviceVulkan12Features features12{ VkPhysicalDeviceVulkan12Features features12{
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
.descriptorIndexing = true, .descriptorIndexing = true,
.bufferDeviceAddress = true, .bufferDeviceAddress = true,
}; };
// use vkbootstrap to select a gpu // use vkbootstrap to select a gpu
// We want a gpu that can write to the SDL surface // We want a gpu that can write to the SDL surface
vkb::PhysicalDeviceSelector selector{ vkb_inst }; vkb::PhysicalDeviceSelector selector{ vkb_inst };
@ -294,7 +295,7 @@ void VulkanEngine::init_vulkan() {
.device = _device, .device = _device,
.instance = _instance, .instance = _instance,
}; };
vmaCreateAllocator(&allocatorInfo, &_allocator); vmaCreateAllocator(&allocatorInfo, &_allocator);
_mainDeletionQueue.push_function([&]() { _mainDeletionQueue.push_function([&]() {
@ -345,7 +346,7 @@ void VulkanEngine::init_swapchain() {
_drawImage.imageFormat = VK_FORMAT_R16G16B16A16_SFLOAT; _drawImage.imageFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
_drawImage.imageExtent = drawImageExtent; _drawImage.imageExtent = drawImageExtent;
VkImageUsageFlags drawImageUsages = VkImageUsageFlags drawImageUsages =
VK_IMAGE_USAGE_TRANSFER_SRC_BIT VK_IMAGE_USAGE_TRANSFER_SRC_BIT
| VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT
| VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_STORAGE_BIT
@ -357,7 +358,7 @@ void VulkanEngine::init_swapchain() {
.usage = VMA_MEMORY_USAGE_GPU_ONLY, .usage = VMA_MEMORY_USAGE_GPU_ONLY,
.requiredFlags = VkMemoryPropertyFlags(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT), .requiredFlags = VkMemoryPropertyFlags(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT),
}; };
//allocate and create the image //allocate and create the image
vmaCreateImage(_allocator, &rimg_info, &rimg_allocinfo, &_drawImage.image, &_drawImage.allocation, nullptr); vmaCreateImage(_allocator, &rimg_info, &rimg_allocinfo, &_drawImage.image, &_drawImage.allocation, nullptr);
@ -454,7 +455,7 @@ void VulkanEngine::init_descriptors() {
.imageView = _drawImage.imageView, .imageView = _drawImage.imageView,
.imageLayout = VK_IMAGE_LAYOUT_GENERAL, .imageLayout = VK_IMAGE_LAYOUT_GENERAL,
}; };
VkWriteDescriptorSet drawImageWrite{ VkWriteDescriptorSet drawImageWrite{
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.dstSet = _drawImageDescriptors, .dstSet = _drawImageDescriptors,
@ -521,7 +522,7 @@ void VulkanEngine::init_background_pipelines()
.offset = 0, .offset = 0,
.size = sizeof(ComputePushConstants), .size = sizeof(ComputePushConstants),
}; };
VkPipelineLayoutCreateInfo computeLayout{ VkPipelineLayoutCreateInfo computeLayout{
.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
.setLayoutCount = 1, .setLayoutCount = 1,
@ -529,7 +530,7 @@ void VulkanEngine::init_background_pipelines()
.pushConstantRangeCount = 1, .pushConstantRangeCount = 1,
.pPushConstantRanges = &pushConstant, .pPushConstantRanges = &pushConstant,
}; };
VK_CHECK(vkCreatePipelineLayout(_device, &computeLayout, nullptr, &_gradientPipelineLayout)); VK_CHECK(vkCreatePipelineLayout(_device, &computeLayout, nullptr, &_gradientPipelineLayout));
// final cleanup // final cleanup
@ -577,7 +578,7 @@ void VulkanEngine::immediate_submit(std::function<void(VkCommandBuffer cmd)>&& f
VkSubmitInfo2 submit = vkinit::submit_info(&cmdinfo, nullptr, nullptr); VkSubmitInfo2 submit = vkinit::submit_info(&cmdinfo, nullptr, nullptr);
VK_CHECK(vkQueueSubmit2(_graphicsQueue, 1, &submit, _immFence)); VK_CHECK(vkQueueSubmit2(_graphicsQueue, 1, &submit, _immFence));
VK_CHECK(vkWaitForFences(_device, 1, &_immFence, true,9999999999)); VK_CHECK(vkWaitForFences(_device, 1, &_immFence, true,9999999999));
} }
void VulkanEngine::init_mesh_pipeline() void VulkanEngine::init_mesh_pipeline()
@ -705,7 +706,7 @@ AllocatedBuffer VulkanEngine::create_buffer(size_t allocSize, VkBufferUsageFlags
return newBuffer; return newBuffer;
} }
void VulkanEngine::destroy_buffer(const AllocatedBuffer& buffer) void VulkanEngine::destroy_buffer(const AllocatedBuffer& buffer)
{ {
vmaDestroyBuffer(_allocator, buffer.buffer, buffer.allocation); vmaDestroyBuffer(_allocator, buffer.buffer, buffer.allocation);
} }
@ -734,7 +735,7 @@ GPUMeshBuffers VulkanEngine::uploadMesh(std::span<uint32_t> indices, std::span<V
newSurface.indexBuffer = create_buffer(indexBufferSize, newSurface.indexBuffer = create_buffer(indexBufferSize,
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
VMA_MEMORY_USAGE_GPU_ONLY); VMA_MEMORY_USAGE_GPU_ONLY);
AllocatedBuffer staging = create_buffer(vertexBufferSize + indexBufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY); AllocatedBuffer staging = create_buffer(vertexBufferSize + indexBufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY);
@ -750,7 +751,7 @@ GPUMeshBuffers VulkanEngine::uploadMesh(std::span<uint32_t> indices, std::span<V
.size = vertexBufferSize, .size = vertexBufferSize,
}; };
vkCmdCopyBuffer(cmd, staging.buffer, vkCmdCopyBuffer(cmd, staging.buffer,
newSurface.vertexBuffer.buffer, 1, newSurface.vertexBuffer.buffer, 1,
&vertexCopy); &vertexCopy);
@ -800,5 +801,3 @@ void VulkanEngine::init_default_data() {
destroy_buffer(rectangle.vertexBuffer); destroy_buffer(rectangle.vertexBuffer);
}); });
} }