From 8a36a4d721da0cb27551d959e91a1aa27c0e81c1 Mon Sep 17 00:00:00 2001 From: ink-soul Date: Tue, 26 Mar 2024 15:48:30 +0800 Subject: [PATCH] add headless surface extension --- base/vulkanexamplebase.cpp | 33 +++++++++++++++++++++++---------- base/vulkanexamplebase.h | 6 ++++++ src/CMakeLists.txt | 2 +- src/render/render.h | 13 +------------ src/render/renderFoundation.cpp | 0 src/render/renderFoundation.h | 1 + 6 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 src/render/renderFoundation.cpp create mode 100644 src/render/renderFoundation.h diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index 8cf50b7..fe687cb 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -48,28 +48,39 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation) appInfo.pEngineName = name.c_str(); appInfo.apiVersion = VK_API_VERSION_1_0; - std::vector instanceExtensions = { VK_KHR_SURFACE_EXTENSION_NAME }; + std::vector instanceExtensions = { }; - // Enable surface extensions depending on os + if (settings.headless) + { + instanceExtensions.push_back("VK_EXT_headless_surface"); + } + else + { + instanceExtensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME); + // Enable surface extensions depending on os #if defined(_WIN32) - instanceExtensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME); #elif defined(VK_USE_PLATFORM_ANDROID_KHR) - instanceExtensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME); #elif defined(_DIRECT2DISPLAY) - instanceExtensions.push_back(VK_KHR_DISPLAY_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_DISPLAY_EXTENSION_NAME); #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) - instanceExtensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME); #elif defined(VK_USE_PLATFORM_XCB_KHR) - instanceExtensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME); #elif defined(VK_USE_PLATFORM_MACOS_MVK) - instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME); + instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME); #endif #if defined(VK_USE_PLATFORM_MACOS_MVK) && (VK_HEADER_VERSION >= 216) - instanceExtensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); - instanceExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); + instanceExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); #endif + } + + + VkInstanceCreateInfo instanceCreateInfo = {}; instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; instanceCreateInfo.pNext = NULL; @@ -94,6 +105,8 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation) instanceCreateInfo.ppEnabledLayerNames = validationLayerNames.data(); } return vkCreateInstance(&instanceCreateInfo, nullptr, &instance); + + } void VulkanExampleBase::prepare() { diff --git a/base/vulkanexamplebase.h b/base/vulkanexamplebase.h index 7e743a6..6bc8f0c 100644 --- a/base/vulkanexamplebase.h +++ b/base/vulkanexamplebase.h @@ -117,6 +117,12 @@ public: bool fullscreen = false; bool vsync = false; bool multiSampling = true; + bool rotateModel = true; + bool enableSaveToImageSequeue = false; + bool headless = false; + uint32_t outputFrameCount = 50; + bool takeScreenShot = false; + VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_4_BIT; } settings; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 52e88ec..6362fb9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,7 +34,7 @@ function(buildHomework HOMEWORK_NAME) "render/glTFModel.h" "render/glTFModel.cpp" - ) + "render/renderFoundation.h" "render/renderFoundation.cpp") target_link_libraries(${HOMEWORK_NAME} base ${Vulkan_LIBRARY} ${WINLIBS}) else(WIN32) add_executable(${HOMEWORK_NAME} ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES}) diff --git a/src/render/render.h b/src/render/render.h index c107dde..d07db61 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -216,18 +216,7 @@ public: VkDescriptorSet tonemappingDescriptorSet = VK_NULL_HANDLE; }; - struct Settings { - bool validation = true; - bool fullscreen = false; - bool vsync = false; - bool multiSampling = true; - bool rotateModel = true; - bool enableSaveToImageSequeue = false; - uint32_t outputFrameCount = 50; - bool takeScreenShot = false; - - VkSampleCountFlagBits sampleCount = VK_SAMPLE_COUNT_4_BIT; - } settings; + struct DescriptorSetLayouts { VkDescriptorSetLayout scene; diff --git a/src/render/renderFoundation.cpp b/src/render/renderFoundation.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/render/renderFoundation.h b/src/render/renderFoundation.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/src/render/renderFoundation.h @@ -0,0 +1 @@ +#pragma once