From 83c5c0bde453030052a089b3e0f7a082455fd7c9 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sun, 19 Apr 2026 20:37:16 +0200 Subject: [PATCH] The engine now displays a blue flashing square --- .clangd | 7 + CMakeLists.txt | 46 ++- CMakePresets.json | 65 +++ bin/.ninja_deps | Bin 81388 -> 0 bytes bin/.ninja_log | 12 - bin/_deps/fastgltf-subbuild/.ninja_log | 21 - bin/_deps/fastgltf-subbuild/CMakeLists.txt | 42 -- bin/_deps/fastgltf-subbuild/build.ninja | 208 ---------- .../fastgltf-populate-build | 0 .../fastgltf-populate-configure | 0 .../fastgltf-populate-done | 0 .../fastgltf-populate-download | 0 .../fastgltf-populate-gitclone-lastrun.txt | 15 - .../fastgltf-populate-gitinfo.txt | 15 - .../fastgltf-populate-install | 0 .../fastgltf-populate-mkdir | 0 .../fastgltf-populate-patch | 0 .../fastgltf-populate-patch-info.txt | 6 - .../fastgltf-populate-test | 0 .../fastgltf-populate-update-info.txt | 7 - .../tmp/fastgltf-populate-cfgcmd.txt | 1 - .../tmp/fastgltf-populate-gitclone.cmake | 87 ---- .../tmp/fastgltf-populate-gitupdate.cmake | 317 --------------- .../tmp/fastgltf-populate-mkdirs.cmake | 27 -- bin/build.ninja | 359 ----------------- bin/compile_commands.json | 32 -- bin/main/main | Bin 301448 -> 0 bytes src/engine/callbacks.h | 14 +- src/engine/engine.h | 372 +++++++++++++++++- src/engine/images.h | 56 ++- src/engine/initializers.h | 177 ++++++++- src/engine/pipelines.h | 8 +- src/engine/types.h | 15 +- src/main.cpp | 4 + 34 files changed, 729 insertions(+), 1184 deletions(-) create mode 100644 .clangd create mode 100644 CMakePresets.json delete mode 100644 bin/.ninja_deps delete mode 100644 bin/.ninja_log delete mode 100644 bin/_deps/fastgltf-subbuild/.ninja_log delete mode 100644 bin/_deps/fastgltf-subbuild/CMakeLists.txt delete mode 100644 bin/_deps/fastgltf-subbuild/build.ninja delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-build delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-configure delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-done delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-download delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-gitclone-lastrun.txt delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-gitinfo.txt delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-install delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-mkdir delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-patch delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-patch-info.txt delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-test delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/src/fastgltf-populate-stamp/fastgltf-populate-update-info.txt delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/tmp/fastgltf-populate-cfgcmd.txt delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/tmp/fastgltf-populate-gitclone.cmake delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/tmp/fastgltf-populate-gitupdate.cmake delete mode 100644 bin/_deps/fastgltf-subbuild/fastgltf-populate-prefix/tmp/fastgltf-populate-mkdirs.cmake delete mode 100644 bin/build.ninja delete mode 100644 bin/compile_commands.json delete mode 100755 bin/main/main diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..93988a7 --- /dev/null +++ b/.clangd @@ -0,0 +1,7 @@ +CompileFlags: + CompilationDatabase: bin/debug + Add: + - -DENGINE_IMPL + - -DIMAGES_IMPL + - -DINITIALIZERS_IMPL + - -DPIPELINES_IMPL diff --git a/CMakeLists.txt b/CMakeLists.txt index 06feee3..1b41d0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,28 @@ cmake_minimum_required (VERSION 3.29) +include(FetchContent) +#LTO +include(CheckIPOSupported) +check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT LTO_ERROR) project(VulkanEngine) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + find_program(GCC_AR NAMES gcc-ar REQUIRED) + find_program(GCC_RANLIB NAMES gcc-ranlib REQUIRED) + set(CMAKE_AR "${GCC_AR}") + set(CMAKE_RANLIB "${GCC_RANLIB}") +endif() + # Find all package dependencies find_package( glfw3 REQUIRED ) find_package( glm REQUIRED ) find_package( VulkanMemoryAllocator CONFIG REQUIRED ) find_package( fmt REQUIRED ) + # fastgltf because it's not in nixpkgs -include(FetchContent) FetchContent_Declare( fastgltf @@ -20,28 +31,35 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(fastgltf) -# Enables LTO -include(CheckIPOSupported) -check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT LTO_ERROR) - -if(LTO_SUPPORTED AND CMAKE_BUILD_TYPE STREQUAL "Release") - message(STATUS "LTO activated") - set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) -else() - message(WARNING "LTO not supported : ${LTO_ERROR}") -endif() +# vk-bootstrap because CMAKE can't find it on NixOS +FetchContent_Declare( + vk-bootstrap + GIT_REPOSITORY https://github.com/charles-lunarg/vk-bootstrap.git + GIT_TAG v1.3.295 +) +FetchContent_MakeAvailable(vk-bootstrap) # A function to automate executables aditions - function ( addBinary BINARY_NAME ) cmake_parse_arguments ( BINARY "" "SHADER" "LIBS;TEXTURES;MODELS" ${ARGN} ) add_executable ( ${BINARY_NAME} src/${BINARY_NAME}.cpp ) # Sets the output dir to have clear separation between binaries set_target_properties ( ${BINARY_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${BINARY_NAME} ) set_target_properties ( ${BINARY_NAME} PROPERTIES CXX_STANDARD 20 ) # Uses C++20 + # Sets per binary LTO + if(LTO_SUPPORTED AND CMAKE_BUILD_TYPE STREQUAL "Release") + set_target_properties(${BINARY_NAME} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE) + message("Enabled LTO") + endif() + set_target_properties(${BINARY_NAME} PROPERTIES CXX_SCAN_FOR_MODULES OFF) # Define VULKAN_HPP_HANDLE_ERROR_OUT_OF_DATE_AS_SUCCESS to treat VK_ERROR_OUT_OF_DATE_KHR as a success code - target_compile_definitions ( ${BINARY_NAME} PRIVATE "VULKAN_HPP_HANDLE_ERROR_OUT_OF_DATE_AS_SUCCESS" ) + target_compile_definitions ( + ${BINARY_NAME} + PRIVATE + "VULKAN_HPP_HANDLE_ERROR_OUT_OF_DATE_AS_SUCCESS" + $<$:DEBUG> # So CMAKE expose a #define DEBUG for debug builds + ) @@ -83,5 +101,5 @@ endfunction() addBinary ( main - LIBS glfw fmt + LIBS glfw fmt vk-bootstrap vulkan ) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..b06a262 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,65 @@ +{ + "version": 6, + "cmakeMinimumRequired": { "major": 3 }, + + "configurePresets": [ + { + "name": "base", + "hidden": true, + "generator": "Ninja", + "binaryDir": "${sourceDir}/bin/${presetName}", + "cacheVariables": { + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "debug", + "displayName": "Debug", + "inherits": "base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_FLAGS_DEBUG": "-g" + } + }, + { + "name": "debug-san", + "displayName": "Debug + Sanitizers", + "inherits": "base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_FLAGS_DEBUG": "-g -fsanitize=address,undefined" + } + }, + { + "name": "release", + "displayName": "Release", + "inherits": "base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_CXX_FLAGS_RELEASE": "-O3 -march=native -flto" + } + }, + { + "name": "release-fast", + "displayName": "Release (Ofast, non-conformant)", + "inherits": "base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_CXX_FLAGS_RELEASE": "-Ofast -march=native -flto" + } + } + ], + + "buildPresets": [ + { + "name": "debug", + "displayName": "Build Debug", + "configurePreset": "debug" + }, + { + "name": "release", + "displayName": "Build Release", + "configurePreset": "release" + } + ] +} diff --git a/bin/.ninja_deps b/bin/.ninja_deps deleted file mode 100644 index baebff05bbd765a50ffe08b0fd879418a9f72f74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81388 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 CSQktH diff --git a/src/engine/callbacks.h b/src/engine/callbacks.h index f6d0190..8c2e568 100644 --- a/src/engine/callbacks.h +++ b/src/engine/callbacks.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef CALLBACK_H +#define CALLBACK_H // Header // Other includes #include "types.h" @@ -8,10 +9,17 @@ class Callback { static void keyboardCallback(GLFWwindow* window, int key, int scancode, int action, int mods); }; +#endif + #ifdef CALLBACK_IMPL +#ifndef CALLBACK_IMPL_H +#define CALLBACK_IMPL_H + void Callback::keyboardCallback(GLFWwindow* window, int key, int scancode, int action, int mods) { - #ifndef NDEBUG - fmt::println("Key pressed: {}", scancode); + #ifdef DEBUG + fmt::println("Key pressed, key {}", key); #endif } + +#endif #endif diff --git a/src/engine/engine.h b/src/engine/engine.h index b8aa3ed..1dd601f 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -1,16 +1,49 @@ -#pragma once +#ifndef ENGINE_H +#define ENGINE_H // Normal header #include "types.h" +struct FrameData { + VkCommandPool _commandPool; + VkCommandBuffer _mainCommandBuffer; + VkSemaphore _swapchainSemaphore, _renderSemaphore; + VkFence _renderFence; +}; + +constexpr uint32_t FRAME_OVERLAP = 2; + class Engine { public: + //========== Class Members ========== bool _isInitialized { false }; int _frameNumber { 0 }; VkExtent2D _windowExtent { 1700, 900 }; GLFWwindow *window { nullptr }; + // Vulkan specific class members + VkInstance _instance; + VkDebugUtilsMessengerEXT _debugMessenger; + VkPhysicalDevice _choosenGPU; + VkDevice _device; + VkSurfaceKHR _surface; + + VkSwapchainKHR _swapchain; + VkFormat _swapchainImageFormat; + + std::vector _swapchainImages; + std::vector _swapchainImageViews; + VkExtent2D _swapchainExtent; + + FrameData _frames[FRAME_OVERLAP]; + + FrameData& getCurrentFrame() { return _frames[_frameNumber % FRAME_OVERLAP]; }; + + VkQueue _graphicsQueue; + uint32_t _graphicsQueueFamily; + + void init(); void cleanup(); @@ -18,17 +51,55 @@ class Engine { void draw(); void run(); + + private: + void initRender(); + void initVulkan(); + void initSwapchain(); + void initCommands(); + void initSyncStructures(); + + void createSwapchain(uint32_t width, uint32_t height); + void destroySwapchain(); }; -#ifdef ENGINE_IMPL -// Implementation +#endif + +#ifdef ENGINE_IMPL +#ifndef ENGINE_IMPL_H +#define ENGINE_IMPL_H +//========== Implementation ========== + +#define IMAGES_IMPL +#include "images.h" +#define INITIALIZERS_IMPL #include "initializers.h" +#include "VkBootstrap.h" #define CALLBACK_IMPL #include "callbacks.h" +#ifndef DEBUG +constexpr bool bUseValidationLayers = false; +#else +constexpr bool bUseValidationLayers = true; +#endif + +// Abort when there is an error +// Todo : Give an error message or crash dump + +using namespace std; +#define VK_CHECK(x) \ + do { \ + VkResult err = x; \ + if (err) { \ + fmt::println("Vulkan error : {}", string_VkResult(err)); \ + abort(); \ + } \ + } while (0) \ + void Engine::init() { - #ifndef NDEBUG + #ifdef DEBUG fmt::println("Initializing the engine..."); #endif @@ -49,23 +120,125 @@ void Engine::init() { _isInitialized = true; - #ifndef NDEBUG + initRender(); + + #ifdef DEBUG fmt::println("Engine Initialized !"); #endif } void Engine::cleanup() { + #ifdef DEBUG + fmt::println("Cleaning up..."); + #endif if (_isInitialized) { + // Wait for the GPU to stop working + vkDeviceWaitIdle(_device); + + for (int i = 0; i < FRAME_OVERLAP; i++) { + vkDestroyCommandPool(_device, _frames[i]._commandPool, nullptr); + // Destroy sync objects + vkDestroyFence(_device, _frames[i]._renderFence, nullptr); + vkDestroySemaphore(_device, _frames[i]._renderSemaphore, nullptr); + vkDestroySemaphore(_device, _frames[i]._swapchainSemaphore, nullptr); + } + + destroySwapchain(); + + vkDestroySurfaceKHR(_instance, _surface, nullptr); + vkDestroyDevice(_device, nullptr); + + vkb::destroy_debug_utils_messenger(_instance, _debugMessenger); + vkDestroyInstance(_instance, nullptr); + + /* + + vkDestroyCommandPool(_device, _commandPool, nullptr); + + + + vkDestroySwapchainKHR(_device, _swapchain, nullptr); + // Change to use dynamic rendering + vkDestroyRenderPass(_device, _renderPass, nullptr); + + // Destroy swapchain ressources + for (uint32_t i = 0; i < _framebuffers.size(); i++) { + vkDestroyFramebuffer(_device, _framebuffers[i], nullptr); + + vkDestroyImageView(_device, _swapchainImageViews[i], nullptr); + } + */ + + // Destroy the window (at the end) glfwDestroyWindow(window); glfwTerminate(); } + + #ifdef DEBUG + fmt::println("Engine cleaned up !"); + #endif } void Engine::draw() { - // Todo + // wait until the gpu has finished rendering the last frame. Timeout of 1s + VK_CHECK(vkWaitForFences(_device, 1, &getCurrentFrame()._renderFence, true, 1000000000)); + VK_CHECK(vkResetFences(_device, 1, &getCurrentFrame()._renderFence)); + + // Request image from the swapchain + uint32_t swapchainImageIndex; + VK_CHECK(vkAcquireNextImageKHR(_device, _swapchain, 1000000000, getCurrentFrame()._swapchainSemaphore, nullptr, &swapchainImageIndex)); + + VkCommandBuffer cmd = getCurrentFrame()._mainCommandBuffer; + + VK_CHECK(vkResetCommandBuffer(cmd, 0)); + + VkCommandBufferBeginInfo cmdBeginInfo = vkinit::commandBufferBeginInfo(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); + + VK_CHECK(vkBeginCommandBuffer(cmd, &cmdBeginInfo)); + + vkutil::transitionImage(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL); + + VkClearColorValue clearValue; + float flash = std::abs(std::sin(_frameNumber / 120.f)); + clearValue = { { 0.0f, 0.0f, flash, 1.0f } }; + + VkImageSubresourceRange clearRange = vkinit::imageSubresourceRange(VK_IMAGE_ASPECT_COLOR_BIT); + vkCmdClearColorImage(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_GENERAL, &clearValue, 1, &clearRange); + + vkutil::transitionImage(cmd, _swapchainImages[swapchainImageIndex],VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); + + VK_CHECK(vkEndCommandBuffer(cmd)); + + VkCommandBufferSubmitInfo cmdinfo = vkinit::commandBufferSubmitInfo(cmd); + + VkSemaphoreSubmitInfo waitInfo = vkinit::semaphoreSubmitInfo(VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR,getCurrentFrame()._swapchainSemaphore); + VkSemaphoreSubmitInfo signalInfo = vkinit::semaphoreSubmitInfo(VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT, getCurrentFrame()._renderSemaphore); + + VkSubmitInfo2 submit = vkinit::submitInfo(&cmdinfo,&signalInfo,&waitInfo); + + VK_CHECK(vkQueueSubmit2(_graphicsQueue, 1, &submit, getCurrentFrame()._renderFence)); + + VkPresentInfoKHR presentInfo = {}; + presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; + presentInfo.pNext = nullptr; + presentInfo.pSwapchains = &_swapchain; + presentInfo.swapchainCount = 1; + + presentInfo.pWaitSemaphores = &getCurrentFrame()._renderSemaphore; + presentInfo.waitSemaphoreCount = 1; + + presentInfo.pImageIndices = &swapchainImageIndex; + + VK_CHECK(vkQueuePresentKHR(_graphicsQueue, &presentInfo)); + + _frameNumber++; } void Engine::run() { + #ifdef DEBUG + fmt::println("Running..."); + auto runTimeStart = std::chrono::system_clock::now(); + #endif bool stopRendering = false; while (!glfwWindowShouldClose(window)) { @@ -84,8 +257,193 @@ void Engine::run() { } draw(); - } + #ifdef DEBUG + auto runTimeEnd = std::chrono::system_clock::now(); + auto elapsed = std::chrono::duration_cast(runTimeEnd - runTimeStart); + fmt::println("Engine has finished running after {} seconds!", elapsed.count()); + #endif } +void Engine::initRender() { + initVulkan(); + initSwapchain(); + //initDefaultRenderpass(); + //initFramebuffers(); + initCommands(); + initSyncStructures(); +} + +void Engine::initVulkan() { + #ifdef DEBUG + fmt::println("Initializing Vulkan..."); + #endif + vkb::InstanceBuilder builder; + + // Create a basic VK instance, with debuging features + auto instRet = builder.set_app_name("Engine") + .request_validation_layers(bUseValidationLayers) + .use_default_debug_messenger() + .require_api_version(1, 3, 0) + .build(); + + vkb::Instance vkbInst = instRet.value(); + + // Grab the instance + _instance = vkbInst.instance; + _debugMessenger = vkbInst.debug_messenger; + + // Create the surface + if (glfwCreateWindowSurface(_instance, window, nullptr, & _surface) != VK_SUCCESS) { + throw std::runtime_error("Failed to create window surface !\nAborting..."); + } + + // Features + // Vulkan 1.3 + VkPhysicalDeviceVulkan13Features features13 { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES, + .synchronization2 = true, + .dynamicRendering = true + }; + + VkPhysicalDeviceVulkan12Features features12 { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES, + .descriptorIndexing = true, + .bufferDeviceAddress = true + }; + + // Use vkBootstrap to select the GPU + vkb::PhysicalDeviceSelector selector { vkbInst }; + vkb::PhysicalDevice physicalDevice = selector + .set_minimum_version(1, 3) + .set_required_features_13(features13) + .set_required_features_12(features12) + .set_surface(_surface) + .select() + .value(); + + vkb::DeviceBuilder deviceBuilder { physicalDevice }; + #ifdef DEBUG + fmt::println("Device {}", physicalDevice.name); + #endif + vkb::Device vkbDevice { deviceBuilder.build().value() }; + + _device = { vkbDevice.device }; + _choosenGPU = { physicalDevice.physical_device }; + + _graphicsQueue = { vkbDevice.get_queue(vkb::QueueType::graphics).value() }; + _graphicsQueueFamily = { vkbDevice.get_queue_index(vkb::QueueType::graphics).value() }; + + #ifdef DEBUG + fmt::println("Vulkan initialized !"); + #endif +} + +void Engine::initSwapchain() { + #ifdef DEBUG + fmt::println("Initializing the swapchain..."); + #endif + + createSwapchain(_windowExtent.width, _windowExtent.height); + + #ifdef DEBUG + fmt::println("Swapchain initialized !"); + #endif +} + +void Engine::initCommands() { + #ifdef DEBUG + fmt::println("Initializing vulkan commands.."); + #endif + + VkCommandPoolCreateInfo commandPoolInfo = { vkinit::commandPoolCreateInfo(_graphicsQueueFamily, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT) }; + + for (uint32_t i = 0; i < FRAME_OVERLAP; i++) { + VK_CHECK(vkCreateCommandPool(_device, &commandPoolInfo, nullptr, &_frames[i]._commandPool)); + + VkCommandBufferAllocateInfo cmdAllocInfo = vkinit::commandBufferAllocateInfo(_frames[i]._commandPool, 1); + + VK_CHECK(vkAllocateCommandBuffers(_device, &cmdAllocInfo, &_frames[i]._mainCommandBuffer)); + } + #ifdef DEBUG + fmt::println("Vulan commands initialized !"); + #endif +} + +void Engine::initSyncStructures() { + #ifdef DEBUG + fmt::println("Creating sync structures..."); + #endif + + VkFenceCreateInfo fenceCreateInfo = vkinit::fenceCreateInfo(VK_FENCE_CREATE_SIGNALED_BIT); + VkSemaphoreCreateInfo semaphoreCreateInfo = vkinit::semaphoreCreateInfo(); + + for (int i = 0; i < FRAME_OVERLAP; i++) { + VK_CHECK(vkCreateFence(_device, &fenceCreateInfo, nullptr, &_frames[i]._renderFence)); + + VK_CHECK(vkCreateSemaphore(_device, &semaphoreCreateInfo, nullptr, &_frames[i]._swapchainSemaphore)); + VK_CHECK(vkCreateSemaphore(_device, &semaphoreCreateInfo, nullptr, &_frames[i]._renderSemaphore)); + } + + #ifdef DEBUG + fmt::println("Sync structures created !"); + #endif +} + +void Engine::createSwapchain( + uint32_t width, + uint32_t height +) { + #ifdef DEBUG + fmt::println("Creating the Swapchain..."); + #endif + vkb::SwapchainBuilder swapchainBuilder { + _choosenGPU, + _device, + _surface + }; + + _swapchainImageFormat = VK_FORMAT_B8G8R8A8_UNORM; + + vkb::Swapchain vkbSwapchain = swapchainBuilder + .set_desired_format( + VkSurfaceFormatKHR { + .format = _swapchainImageFormat, + .colorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + } + ) + .set_desired_present_mode(VK_PRESENT_MODE_FIFO_KHR) // VSync + .set_desired_extent(width, height) + .add_image_usage_flags(VK_IMAGE_USAGE_TRANSFER_DST_BIT) + .build() + .value(); + + _swapchainExtent = { vkbSwapchain.extent }; + // Store swapchain and it's related images + _swapchain = { vkbSwapchain.swapchain }; + _swapchainImages = { vkbSwapchain.get_images().value() }; + _swapchainImageViews = { vkbSwapchain.get_image_views().value() }; + + #ifdef DEBUG + fmt::println("Swapchain created with dimentions {} by {}", vkbSwapchain.extent.width, vkbSwapchain.extent.height); + #endif +} + +void Engine::destroySwapchain() { + #ifdef DEBUG + fmt::println("Destroying the swapchain..."); + #endif + vkDestroySwapchainKHR(_device, _swapchain, nullptr); + + for (uint32_t i = 0; i < _swapchainImageViews.size(); i++) { + vkDestroyImageView(_device, _swapchainImageViews[i], nullptr); + } + + #ifdef DEBUG + fmt::println("Swapchain destroyed !"); + #endif +} + + +#endif #endif diff --git a/src/engine/images.h b/src/engine/images.h index 91a9037..048a890 100644 --- a/src/engine/images.h +++ b/src/engine/images.h @@ -1,7 +1,57 @@ -#pragma once +#ifndef IMAGES_H +#define IMAGES_H // Normal header +#include "types.h" -#ifdef IMAGES_IMPL -// Implementation +namespace vkutil { + void transitionImage( + VkCommandBuffer cmd, + VkImage image, + VkImageLayout currentLayout, + VkImageLayout newLayout + ); +} #endif + +#ifdef IMAGES_IMPL +#ifndef IMAGES_IMPL_H +#define IMAGES_IMPL_H +// Implementation +#include "initializers.h" + +namespace vkutil { + void transitionImage( + VkCommandBuffer cmd, + VkImage image, + VkImageLayout currentLayout, + VkImageLayout newLayout + ) { + VkImageMemoryBarrier2 imageBarrier {.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2}; + imageBarrier.pNext = nullptr; + + imageBarrier.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + imageBarrier.srcAccessMask = VK_ACCESS_2_MEMORY_WRITE_BIT; + imageBarrier.dstStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; + imageBarrier.dstAccessMask = VK_ACCESS_2_MEMORY_WRITE_BIT | VK_ACCESS_2_MEMORY_READ_BIT; + + imageBarrier.oldLayout = currentLayout; + imageBarrier.newLayout = newLayout; + + VkImageAspectFlags aspectMask = (newLayout == VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; + imageBarrier.subresourceRange = vkinit::imageSubresourceRange(aspectMask); + imageBarrier.image = image; + + VkDependencyInfo depInfo {}; + depInfo.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO; + depInfo.pNext = nullptr; + + depInfo.imageMemoryBarrierCount = 1; + depInfo.pImageMemoryBarriers = &imageBarrier; + + vkCmdPipelineBarrier2(cmd, &depInfo); + } +} + +#endif +#endif diff --git a/src/engine/initializers.h b/src/engine/initializers.h index 9722674..dd207ab 100644 --- a/src/engine/initializers.h +++ b/src/engine/initializers.h @@ -1,7 +1,178 @@ -#pragma once +#ifndef INITIALIZERS_H +#define INITIALIZERS_H // Normal header +#include "types.h" + +namespace vkinit { + VkCommandPoolCreateInfo commandPoolCreateInfo( + uint32_t queueFamilyIndex, + VkCommandPoolCreateFlags flags = 0 + ); + + VkCommandBufferAllocateInfo commandBufferAllocateInfo( + VkCommandPool pool, + uint32_t count + ); + + VkFenceCreateInfo fenceCreateInfo( + VkFenceCreateFlags flags = 0 + ); + + VkSemaphoreCreateInfo semaphoreCreateInfo ( + VkSemaphoreCreateFlags flags = 0 + ); + + VkCommandBufferBeginInfo commandBufferBeginInfo ( + VkCommandBufferUsageFlags flags = 0 + ); + + VkImageSubresourceRange imageSubresourceRange( + VkImageAspectFlags aspectMask + ); + VkSemaphoreSubmitInfo semaphoreSubmitInfo( + VkPipelineStageFlags2 stageMask, + VkSemaphore semaphore + ); + + VkCommandBufferSubmitInfo commandBufferSubmitInfo ( + VkCommandBuffer cmd + ); + + VkSubmitInfo2 submitInfo( + VkCommandBufferSubmitInfo* cmd, + VkSemaphoreSubmitInfo* signalSemaphoreInfo, + VkSemaphoreSubmitInfo* waitSemaphoreInfo + ); +} -#ifdef INITIALIZERS_IMPL -// Implementation #endif + +#ifdef INITIALIZERS_IMPL +#ifndef INITIALIZERS_IMPL_H +#define INITIALIZERS_IMPL_H +// Implementation +namespace vkinit { + VkCommandPoolCreateInfo commandPoolCreateInfo( + uint32_t queueFamilyIndex, + VkCommandPoolCreateFlags flags + ) { + VkCommandPoolCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; + info.pNext = nullptr; + info.queueFamilyIndex = queueFamilyIndex; + info.flags = flags; + return info; + } + + VkCommandBufferAllocateInfo commandBufferAllocateInfo( + VkCommandPool pool, + uint32_t count + ) { + VkCommandBufferAllocateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + info.pNext = nullptr; + info.commandPool = pool; + info.commandBufferCount = count; + info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + return info; + } + + VkFenceCreateInfo fenceCreateInfo( + VkFenceCreateFlags flags /*= 0 */ + ) { + VkFenceCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + info.pNext = nullptr; + + info.flags = flags; + + return info; + } + + VkSemaphoreCreateInfo semaphoreCreateInfo ( + VkSemaphoreCreateFlags flags /*= 0*/ + ) { + VkSemaphoreCreateInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; + info.pNext = nullptr; + info.flags = flags; + + return info; + } + + VkCommandBufferBeginInfo commandBufferBeginInfo ( + VkCommandBufferUsageFlags flags /*= 0*/ + ) { + VkCommandBufferBeginInfo info = {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; + info.pNext = nullptr; + + info.pInheritanceInfo = nullptr; + info.flags = flags; + return info; + } + + VkImageSubresourceRange imageSubresourceRange( + VkImageAspectFlags aspectMask + ) { + VkImageSubresourceRange subImage {}; + subImage.aspectMask = aspectMask; + subImage.baseMipLevel = 0; + subImage.levelCount = VK_REMAINING_MIP_LEVELS; + subImage.baseArrayLayer = 0; + subImage.layerCount = VK_REMAINING_ARRAY_LAYERS; + + return subImage; + } + + VkSemaphoreSubmitInfo semaphoreSubmitInfo( + VkPipelineStageFlags2 stageMask, + VkSemaphore semaphore + ) { + VkSemaphoreSubmitInfo submitInfo{}; + submitInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO; + submitInfo.pNext = nullptr; + submitInfo.semaphore = semaphore; + submitInfo.stageMask = stageMask; + submitInfo.deviceIndex = 0; + submitInfo.value = 1; + + return submitInfo; + } + + VkCommandBufferSubmitInfo commandBufferSubmitInfo ( + VkCommandBuffer cmd + ) { + VkCommandBufferSubmitInfo info {}; + info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO; + info.pNext = nullptr; + info.commandBuffer = cmd; + info.deviceMask = 0; + + return info; + } + + VkSubmitInfo2 submitInfo( + VkCommandBufferSubmitInfo* cmd, + VkSemaphoreSubmitInfo* signalSemaphoreInfo, + VkSemaphoreSubmitInfo* waitSemaphoreInfo + ) { + VkSubmitInfo2 info = {}; + info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; + info.pNext = nullptr; + + info.waitSemaphoreInfoCount = waitSemaphoreInfo == nullptr ? 0 : 1; + info.pWaitSemaphoreInfos = waitSemaphoreInfo; + + info.signalSemaphoreInfoCount = signalSemaphoreInfo == nullptr ? 0 : 1; + info.pSignalSemaphoreInfos = signalSemaphoreInfo; + + info.commandBufferInfoCount = 1; + info.pCommandBufferInfos = cmd; + + return info; + } +} +#endif +#endif diff --git a/src/engine/pipelines.h b/src/engine/pipelines.h index 70dcbbd..d662f5d 100644 --- a/src/engine/pipelines.h +++ b/src/engine/pipelines.h @@ -1,7 +1,13 @@ -#pragma once +#ifndef PIPELINES_H +#define PIPELINES_H // Normal header +#endif + #ifdef PIPELINES_IMPL +#ifndef PIPELINES_IMPL_H +#define PIPELINES_IMPL_H // Implementation #endif +#endif diff --git a/src/engine/types.h b/src/engine/types.h index a851fbb..0a7e9e4 100644 --- a/src/engine/types.h +++ b/src/engine/types.h @@ -1,4 +1,5 @@ -#pragma once +#ifndef TYPES_H +#define TYPES_H // Normal header #include #include @@ -10,7 +11,9 @@ #include #include #include - +#include +#include +#include #include #include @@ -20,15 +23,19 @@ #define GLFW_INCLUDE_VULKAN #include -#include - #include #include // Custom headers //#include "callbacks.h" +#endif + + #ifdef TYPES_IMPL +#ifndef TYPES_IMPL_H +#define TYPES_IMPL_H // Implementation #endif +#endif diff --git a/src/main.cpp b/src/main.cpp index 4178ead..544c0b6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,5 +7,9 @@ int main(int argc, char* argv[]) { engine.init(); + engine.run(); + + engine.cleanup(); + return 0; }