From 1fa7b38624cc8870ad39f9283ca1aa2f4a628894 Mon Sep 17 00:00:00 2001 From: Noah Metz Date: Wed, 9 Oct 2024 14:31:30 -0600 Subject: [PATCH] Updated gitignore, added pipeline creation code and basic render loop --- .gitignore | 2 + client/Makefile | 2 +- client/include/pipeline.h | 20 +++ client/include/render.h | 5 + client/src/main.c | 11 +- client/src/main.o | Bin 24944 -> 0 bytes client/src/pipeline.c | 249 ++++++++++++++++++++++++++++++++++++++ client/src/render.c | 102 ++++++++++++++-- client/src/render.o | Bin 188296 -> 0 bytes 9 files changed, 381 insertions(+), 10 deletions(-) create mode 100644 client/include/pipeline.h delete mode 100644 client/src/main.o create mode 100644 client/src/pipeline.c delete mode 100644 client/src/render.o diff --git a/.gitignore b/.gitignore index 8b15bc7..054aa7f 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ compile_commands.json roleplay .cache + +*.o diff --git a/client/Makefile b/client/Makefile index 51ac202..56db5cd 100644 --- a/client/Makefile +++ b/client/Makefile @@ -6,7 +6,7 @@ CPP = /opt/homebrew/opt/llvm/bin/clang++ DSYM = /opt/homebrew/opt/llvm/bin/dsymutil GDB = /opt/homebrew/opt/llvm/bin/lldb -SOURCES = src/main.c src/render.c src/vma.cpp +SOURCES = src/main.c src/render.c src/vma.cpp src/pipeline.c OBJECTS = $(addsuffix .o, $(basename $(SOURCES))) VERT_SPV = $(addsuffix .vert.spv, $(basename $(wildcard shader_src/*.vert))) FRAG_SPV = $(addsuffix .frag.spv, $(basename $(wildcard shader_src/*.frag))) diff --git a/client/include/pipeline.h b/client/include/pipeline.h new file mode 100644 index 0000000..47d2a8b --- /dev/null +++ b/client/include/pipeline.h @@ -0,0 +1,20 @@ +#ifndef PIPELINE_H +#define PIPELINE_H + +#include "vulkan/vulkan_core.h" +#include "cglm/types.h" + +typedef struct GraphicsPipelineStruct { + VkDescriptorPool descriptor_pool; + VkDescriptorSet* descriptors; + + VkPipelineLayout layout; + VkPipeline pipeline; +} GraphicsPipeline; + +struct Vertex2 { + vec2 pos; + vec3 color; +}; + +#endif diff --git a/client/include/render.h b/client/include/render.h index edaedea..43c3142 100644 --- a/client/include/render.h +++ b/client/include/render.h @@ -24,6 +24,8 @@ #include #include +extern const uint32_t MAX_FRAMES_IN_FLIGHT; + typedef struct QueueStruct { VkQueue handle; uint32_t family; @@ -83,9 +85,12 @@ typedef struct RenderContextStruct { VkPipeline ui_pipeline_rect; VkPipeline ui_pipeline_text; + + uint32_t current_frame; } RenderContext; GLFWwindow* init_window(); VkResult init_vulkan(GLFWwindow* window, RenderContext* context); +VkResult draw_frame(RenderContext* context); #endif diff --git a/client/src/main.c b/client/src/main.c index 9e55750..3f17653 100644 --- a/client/src/main.c +++ b/client/src/main.c @@ -1,8 +1,15 @@ #include "render.h" +#include "vulkan/vk_enum_string_helper.h" -int render_thread(GLFWwindow* window, RenderContext* render_context) { +VkResult render_thread(GLFWwindow* window, RenderContext* render_context) { while(glfwWindowShouldClose(window) == 0) { glfwPollEvents(); + + VkResult result = draw_frame(render_context); + if(result != VK_SUCCESS) { + fprintf(stderr, "draw_frame error: %s\n", string_VkResult(result)); + return result; + } } return 0; } @@ -26,7 +33,7 @@ int main() { return 2; } - if(render_thread(window, &render_context) != 0) { + if(render_thread(window, &render_context) != VK_SUCCESS) { return 3; } diff --git a/client/src/main.o b/client/src/main.o deleted file mode 100644 index aa6985af0d4eb992be6a930b21269bf6f525044c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24944 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 diff --git a/client/src/pipeline.c b/client/src/pipeline.c new file mode 100644 index 0000000..5f8cc9c --- /dev/null +++ b/client/src/pipeline.c @@ -0,0 +1,249 @@ +#include "pipeline.h" +#include "stdio.h" +#include "stdlib.h" + +VkShaderModule load_shader_file(const char* path, VkDevice device) { + FILE* file; + file = fopen(path, "rb"); + if(file == 0) { + return VK_NULL_HANDLE; + } + + int result = fseek(file, 0, SEEK_END); + if(result != 0) { + return VK_NULL_HANDLE; + } + + long buffer_size = ftell(file); + + result = fseek(file, 0, SEEK_SET); + if(result != 0) { + return VK_NULL_HANDLE; + } + + char * buffer = malloc(buffer_size); + if(buffer == 0) { + return VK_NULL_HANDLE; + } + + size_t read = fread(buffer, 1, buffer_size, file); + + VkShaderModuleCreateInfo shader_info = { + .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, + .codeSize = read, + .pCode = (uint32_t*)buffer, + }; + + VkShaderModule shader; + result = vkCreateShaderModule(device, &shader_info, 0, &shader); + free(buffer); + if(result != VK_SUCCESS) { + return VK_NULL_HANDLE; + } + + return shader; +} + +VkResult create_ui_rect_pipeline(VkDevice device, VkRenderPass render_pass, GraphicsPipeline* out) { + if(out == NULL) { + return VK_ERROR_VALIDATION_FAILED_EXT; + } + + VkShaderModule vert_shader = load_shader_file("shader_src/ui_rect.vert.spv", device); + VkShaderModule frag_shader = load_shader_file("shader_src/ui_rect.frag.spv", device); + VkPipelineShaderStageCreateInfo shader_stages[2] = { + { + .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .stage = VK_SHADER_STAGE_VERTEX_BIT, + .module = vert_shader, + .pName = "main", + }, + { + .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .stage = VK_SHADER_STAGE_FRAGMENT_BIT, + .module = frag_shader, + .pName = "main", + }, + }; + + VkVertexInputBindingDescription bindings[1] = { + { + .binding = 0, // Which buffer 'binding' to use + .stride = sizeof(struct Vertex2), // How many bytes to increase the index between instance + .inputRate = VK_VERTEX_INPUT_RATE_VERTEX, // Whether an instance is a vertex or an index + }, + }; + + VkVertexInputAttributeDescription attributes[3] = { + { + .binding = 0, // Which buffer 'binding' to use + .location = 0, // Which 'location' to export as to shader + .format = VK_FORMAT_R32G32_SFLOAT, // What format to interpret as for shader + .offset = offsetof(struct Vertex2, pos), // What offset from instance start + }, + { + .binding = 0, + .location = 1, + .format = VK_FORMAT_R32G32B32_SFLOAT, + .offset = offsetof(struct Vertex2, color), + }, + }; + + VkPipelineVertexInputStateCreateInfo input_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, + .pVertexBindingDescriptions = bindings, + .vertexBindingDescriptionCount = sizeof(bindings)/sizeof(VkVertexInputBindingDescription), + .pVertexAttributeDescriptions = attributes, + .vertexAttributeDescriptionCount = sizeof(attributes)/sizeof(VkVertexInputAttributeDescription), + }; + + VkPushConstantRange pcr = { + .stageFlags = VK_SHADER_STAGE_ALL, + .offset = 0, + .size = sizeof(VkDeviceAddress), + }; + + VkPipelineLayoutCreateInfo layout_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, + .pushConstantRangeCount = 1, + .pPushConstantRanges = &pcr, + }; + + VkResult result = vkCreatePipelineLayout(device, &layout_info, 0, &out->layout); + if(result != VK_SUCCESS) { + return result; + } + + VkDynamicState dynamic_states[] = { + VK_DYNAMIC_STATE_VIEWPORT, + VK_DYNAMIC_STATE_SCISSOR, + }; + + uint32_t dynamic_state_count = sizeof(dynamic_states)/sizeof(VkDynamicState); + + VkPipelineDynamicStateCreateInfo dynamic_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, + .dynamicStateCount = dynamic_state_count, + .pDynamicStates = dynamic_states, + }; + + VkPipelineInputAssemblyStateCreateInfo input_assembly_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, + .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, + .primitiveRestartEnable = VK_FALSE, + }; + + VkViewport viewport = { + .x = 0.0f, + .y = 0.0f, + .width = (float)(100), + .height = (float)(100), + .minDepth = 0.0f, + .maxDepth = 1.0f, + }; + + VkRect2D scissor = { + .offset = { + .x = 0, + .y = 0, + }, + .extent = { + .width = 100, + .height = 100, + }, + }; + + VkPipelineViewportStateCreateInfo viewport_state = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, + .viewportCount = 1, + .pViewports = &viewport, + .scissorCount = 1, + .pScissors = &scissor, + }; + + VkPipelineRasterizationStateCreateInfo raster_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, + .depthClampEnable = VK_FALSE, + .rasterizerDiscardEnable = VK_FALSE, + .polygonMode = VK_POLYGON_MODE_FILL, + .lineWidth = 1.0f, + .cullMode = VK_CULL_MODE_BACK_BIT, + .frontFace = VK_FRONT_FACE_CLOCKWISE, + .depthBiasEnable = VK_FALSE, + .depthBiasConstantFactor = 0.0f, + .depthBiasClamp = 0.0f, + .depthBiasSlopeFactor = 0.0f, + }; + + VkPipelineMultisampleStateCreateInfo multisample_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, + .sampleShadingEnable = VK_FALSE, + .rasterizationSamples = VK_SAMPLE_COUNT_1_BIT, + .minSampleShading = 1.0f, + .pSampleMask = 0, + .alphaToCoverageEnable = VK_FALSE, + .alphaToOneEnable = VK_FALSE, + }; + + VkPipelineDepthStencilStateCreateInfo depth_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, + .depthTestEnable = VK_TRUE, + .depthWriteEnable = VK_TRUE, + .depthCompareOp = VK_COMPARE_OP_LESS, + .depthBoundsTestEnable = VK_FALSE, + .maxDepthBounds = 1.0f, + .minDepthBounds = 0.0f, + .stencilTestEnable = VK_FALSE, + .front = {}, + .back = {}, + }; + + VkPipelineColorBlendAttachmentState color_blend_attachment = { + .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT, + .blendEnable = VK_TRUE, + .srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA, + .dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, + .colorBlendOp = VK_BLEND_OP_ADD, + .srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE, + .dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO, + .alphaBlendOp = VK_BLEND_OP_ADD, + }; + + VkPipelineColorBlendStateCreateInfo color_blend_info = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, + .logicOpEnable = VK_FALSE, + .logicOp = VK_LOGIC_OP_COPY, + .attachmentCount = 1, + .pAttachments = &color_blend_attachment, + .blendConstants[0] = 0.0f, + .blendConstants[1] = 0.0f, + .blendConstants[2] = 0.0f, + .blendConstants[3] = 0.0f, + }; + + VkGraphicsPipelineCreateInfo draw_pipeline_info = { + .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, + .stageCount = 2, + .pStages = shader_stages, + .pVertexInputState = &input_info, + .pInputAssemblyState = &input_assembly_info, + .pViewportState = &viewport_state, + .pRasterizationState = &raster_info, + .pColorBlendState = &color_blend_info, + .pDynamicState = &dynamic_info, + .pDepthStencilState = &depth_info, + .pMultisampleState = &multisample_info, + .layout = out->layout, + .renderPass = render_pass, + .subpass = 0, + .basePipelineHandle = VK_NULL_HANDLE, + .basePipelineIndex = -1, + }; + + result = vkCreateGraphicsPipelines(device, VK_NULL_HANDLE, 1, &draw_pipeline_info, 0, &out->pipeline); + if(result != VK_SUCCESS) { + return result; + } + + return VK_SUCCESS; +} diff --git a/client/src/render.c b/client/src/render.c index 33312ff..be35ef6 100644 --- a/client/src/render.c +++ b/client/src/render.c @@ -1,5 +1,5 @@ #include "render.h" -#include "vk_mem_alloc.h" +#include "vulkan/vulkan_core.h" const uint32_t MAX_FRAMES_IN_FLIGHT = 2; @@ -44,7 +44,7 @@ GLFWwindow* init_window() { glfwSetErrorCallback(glfw_error); glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); + glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); GLFWwindow* window = glfwCreateWindow(800, 500, "roleplay", 0, 0); return window; @@ -755,6 +755,8 @@ VkResult create_swapchain_framebuffers(VkDevice device, uint32_t image_count, Vk return 0; } + VkFramebuffer* framebuffer_ptr = *framebuffers; + for(uint32_t i = 0; i < image_count; i++) { VkImageView attachments[] = { image_views[i], @@ -771,7 +773,7 @@ VkResult create_swapchain_framebuffers(VkDevice device, uint32_t image_count, Vk .layers = 1, }; - VkResult result = vkCreateFramebuffer(device, &framebuffer_info, 0, *framebuffers + sizeof(VkFramebuffer)*i); + VkResult result = vkCreateFramebuffer(device, &framebuffer_info, 0, &framebuffer_ptr[i]); if(result != VK_SUCCESS) { free(*framebuffers); return result; @@ -868,7 +870,7 @@ VkResult create_depth_image(VkDevice device, VkFormat depth_format, VkExtent2D s }; VmaAllocationCreateInfo allocation_info = { - .usage = VMA_MEMORY_USAGE_GPU_ONLY, + .usage = VMA_MEMORY_USAGE_AUTO, }; VkResult result = vmaCreateImage(allocator, &depth_image_info, &allocation_info, depth_image, depth_image_memory, NULL); @@ -1031,7 +1033,6 @@ VkResult init_vulkan(GLFWwindow* window, RenderContext* context) { return result; } - // TODO: create and allocate the depth image result = create_depth_image(context->device, context->depth_format, context->swapchain_extent, context->allocator, context->extra_graphics_pool, context->graphics_queue, &context->depth_image, &context->depth_image_memory, &context->depth_image_view); if(result != VK_SUCCESS) { return result; @@ -1042,9 +1043,96 @@ VkResult init_vulkan(GLFWwindow* window, RenderContext* context) { return result; } - // TODO: create pipelines - + context->current_frame = 0; return VK_SUCCESS; } +VkResult draw_frame(RenderContext* context) { + VkResult result; + + result = vkWaitForFences(context->device, 1, &context->in_flight_fences[context->current_frame], VK_TRUE, UINT64_MAX); + if(result != VK_SUCCESS) { + return result; + } + + result = vkResetFences(context->device, 1, &context->in_flight_fences[context->current_frame]); + if(result != VK_SUCCESS) { + return result; + } + + uint32_t image_index; + result = vkAcquireNextImageKHR(context->device, context->swapchain, UINT64_MAX, context->image_available_semaphores[context->current_frame], VK_NULL_HANDLE, &image_index); + if(result != VK_SUCCESS) { + return result; + } + + + result = vkResetCommandBuffer(context->swapchain_command_buffers[context->current_frame], 0); + if(result != VK_SUCCESS) { + return result; + } + + VkCommandBufferBeginInfo begin_info = { + .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, + }; + result = vkBeginCommandBuffer(context->swapchain_command_buffers[context->current_frame], &begin_info); + if(result != VK_SUCCESS) { + return result; + } + + VkClearValue clear_color = {{{0.0f, 0.0f, 0.0f, 1.0f}}}; + + VkRenderPassBeginInfo render_pass_begin = { + .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, + .renderPass = context->render_pass, + .framebuffer = context->swapchain_framebuffers[image_index], + .renderArea.offset = {0, 0}, + .renderArea.extent = context->swapchain_extent, + .clearValueCount = 1, + .pClearValues = &clear_color, + }; + vkCmdBeginRenderPass(context->swapchain_command_buffers[context->current_frame], &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); + vkCmdEndRenderPass(context->swapchain_command_buffers[context->current_frame]); + + result = vkEndCommandBuffer(context->swapchain_command_buffers[context->current_frame]); + if(result != VK_SUCCESS) { + return result; + } + + VkPipelineStageFlags wait_stages[] = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT}; + VkSubmitInfo submit_info = { + .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, + .waitSemaphoreCount = 1, + .pWaitSemaphores = &context->image_available_semaphores[context->current_frame], + .pWaitDstStageMask = wait_stages, + .commandBufferCount = 1, + .pCommandBuffers = &context->swapchain_command_buffers[context->current_frame], + .signalSemaphoreCount = 1, + .pSignalSemaphores = &context->render_finished_semaphores[context->current_frame], + }; + + result = vkQueueSubmit(context->graphics_queue.handle, 1, &submit_info, context->in_flight_fences[context->current_frame]); + if(result != VK_SUCCESS) { + return result; + } + + VkPresentInfoKHR present_info = { + .sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR, + .waitSemaphoreCount = 1, + .pWaitSemaphores = &context->render_finished_semaphores[context->current_frame], + .swapchainCount = 1, + .pSwapchains = &context->swapchain, + .pImageIndices = &image_index, + .pResults = 0, + }; + + result = vkQueuePresentKHR(context->present_queue.handle, &present_info); + if(result != VK_SUCCESS) { + return result; + } + + context->current_frame = (context->current_frame + 1) % MAX_FRAMES_IN_FLIGHT; + + return VK_SUCCESS; +} diff --git a/client/src/render.o b/client/src/render.o deleted file mode 100644 index d924f7cee91deddd0b0f24cfb4464b37609358a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188296 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%0Aid(B4V7L1j0!o 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

G_kBlg6$_3x^nrqFwpFGr_HZt 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%0AS@gxMbR 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