diff --git a/CMakeLists.txt b/CMakeLists.txt index 5aa0e7a..12e045f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,5 @@ cmake_minimum_required(VERSION 3.29) -project(lsfg-vk-base-base - VERSION 0.0.1 - DESCRIPTION "lsfg-vk-base: LSFG on Linux through Vulkan" - LANGUAGES CXX) - # cmake options set(CMAKE_CXX_COMPILER clang++) @@ -16,20 +11,24 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # main project +project(lsfg-vk + VERSION 0.0.1 + DESCRIPTION "lsfg-vk: LSFG on Linux through Vulkan" + LANGUAGES CXX) + +add_subdirectory(lsfg-vk-gen) + file(GLOB SOURCES - "src/core/*.cpp" - "src/shaderchains/*.cpp" "src/*.cpp" ) -add_library(lsfg-vk-base SHARED ${SOURCES}) +add_library(lsfg-vk SHARED ${SOURCES}) -target_include_directories(lsfg-vk-base - PRIVATE include - PUBLIC public) -target_link_libraries(lsfg-vk-base - PUBLIC vulkan) -target_compile_options(lsfg-vk-base PRIVATE +target_include_directories(lsfg-vk + PRIVATE include) +target_link_libraries(lsfg-vk + PRIVATE lsfg-vk-gen) +target_compile_options(lsfg-vk PRIVATE -Weverything # disable compat c++ flags -Wno-pre-c++20-compat-pedantic @@ -43,7 +42,6 @@ target_compile_options(lsfg-vk-base PRIVATE -Wno-switch-default # ignore missing default -Wno-padded # ignore automatic padding -Wno-exit-time-destructors # allow globals - -Wno-global-constructors # required for vulkan -Wno-cast-function-type-strict ) diff --git a/include/log.hpp b/include/log.hpp new file mode 100644 index 0000000..7327eba --- /dev/null +++ b/include/log.hpp @@ -0,0 +1,37 @@ +#ifndef LOG_HPP +#define LOG_HPP + +#include +#include + +namespace Log { + + const std::string_view WHITE = "\033[1;37m"; + const std::string_view YELLOW = "\033[1;33m"; + const std::string_view RED = "\033[1;31m"; + const std::string_view GRAY = "\033[1;30m"; + const std::string_view RESET = "\033[0m"; + + template + void info(std::format_string fmt, Args&&... args) { + std::cerr << WHITE << std::format(fmt, std::forward(args)...) << RESET << '\n'; + } + + template + void warn(std::format_string fmt, Args&&... args) { + std::cerr << YELLOW << std::format(fmt, std::forward(args)...) << RESET << '\n'; + } + + template + void error(std::format_string fmt, Args&&... args) { + std::cerr << RED << std::format(fmt, std::forward(args)...) << RESET << '\n'; + } + + template + void debug(std::format_string fmt, Args&&... args) { + std::cerr << GRAY << std::format(fmt, std::forward(args)...) << RESET << '\n'; + } + +} + +#endif // LOG_HPP diff --git a/lsfg-vk-gen/CMakeLists.txt b/lsfg-vk-gen/CMakeLists.txt new file mode 100644 index 0000000..b4a7c95 --- /dev/null +++ b/lsfg-vk-gen/CMakeLists.txt @@ -0,0 +1,36 @@ +project(lsfg-vk-gen + VERSION 0.0.1 + DESCRIPTION "lsfg-vk-gen: LSFG on Linux through Vulkan (backend)" + LANGUAGES CXX) + +file(GLOB BACKEND_SOURCES + "src/core/*.cpp" + "src/shaderchains/*.cpp" + "src/*.cpp" +) + +add_library(lsfg-vk-gen SHARED ${BACKEND_SOURCES}) + +target_include_directories(lsfg-vk-gen + PRIVATE include + PUBLIC public) +target_link_libraries(lsfg-vk-gen + PUBLIC vulkan) +target_compile_options(lsfg-vk-gen PRIVATE + -Weverything + # disable compat c++ flags + -Wno-pre-c++20-compat-pedantic + -Wno-pre-c++17-compat + -Wno-c++98-compat-pedantic + -Wno-c++98-compat + # disable other flags + -Wno-missing-designated-field-initializers + -Wno-shadow # allow shadowing + -Wno-switch-enum # ignore missing cases + -Wno-switch-default # ignore missing default + -Wno-padded # ignore automatic padding + -Wno-exit-time-destructors # allow globals + -Wno-global-constructors + # required for vulkan + -Wno-cast-function-type-strict +) diff --git a/include/context.hpp b/lsfg-vk-gen/include/context.hpp similarity index 100% rename from include/context.hpp rename to lsfg-vk-gen/include/context.hpp diff --git a/include/core/buffer.hpp b/lsfg-vk-gen/include/core/buffer.hpp similarity index 100% rename from include/core/buffer.hpp rename to lsfg-vk-gen/include/core/buffer.hpp diff --git a/include/core/commandbuffer.hpp b/lsfg-vk-gen/include/core/commandbuffer.hpp similarity index 100% rename from include/core/commandbuffer.hpp rename to lsfg-vk-gen/include/core/commandbuffer.hpp diff --git a/include/core/commandpool.hpp b/lsfg-vk-gen/include/core/commandpool.hpp similarity index 100% rename from include/core/commandpool.hpp rename to lsfg-vk-gen/include/core/commandpool.hpp diff --git a/include/core/descriptorpool.hpp b/lsfg-vk-gen/include/core/descriptorpool.hpp similarity index 100% rename from include/core/descriptorpool.hpp rename to lsfg-vk-gen/include/core/descriptorpool.hpp diff --git a/include/core/descriptorset.hpp b/lsfg-vk-gen/include/core/descriptorset.hpp similarity index 100% rename from include/core/descriptorset.hpp rename to lsfg-vk-gen/include/core/descriptorset.hpp diff --git a/include/core/device.hpp b/lsfg-vk-gen/include/core/device.hpp similarity index 100% rename from include/core/device.hpp rename to lsfg-vk-gen/include/core/device.hpp diff --git a/include/core/fence.hpp b/lsfg-vk-gen/include/core/fence.hpp similarity index 100% rename from include/core/fence.hpp rename to lsfg-vk-gen/include/core/fence.hpp diff --git a/include/core/image.hpp b/lsfg-vk-gen/include/core/image.hpp similarity index 100% rename from include/core/image.hpp rename to lsfg-vk-gen/include/core/image.hpp diff --git a/include/core/instance.hpp b/lsfg-vk-gen/include/core/instance.hpp similarity index 100% rename from include/core/instance.hpp rename to lsfg-vk-gen/include/core/instance.hpp diff --git a/include/core/pipeline.hpp b/lsfg-vk-gen/include/core/pipeline.hpp similarity index 100% rename from include/core/pipeline.hpp rename to lsfg-vk-gen/include/core/pipeline.hpp diff --git a/include/core/sampler.hpp b/lsfg-vk-gen/include/core/sampler.hpp similarity index 100% rename from include/core/sampler.hpp rename to lsfg-vk-gen/include/core/sampler.hpp diff --git a/include/core/semaphore.hpp b/lsfg-vk-gen/include/core/semaphore.hpp similarity index 100% rename from include/core/semaphore.hpp rename to lsfg-vk-gen/include/core/semaphore.hpp diff --git a/include/core/shadermodule.hpp b/lsfg-vk-gen/include/core/shadermodule.hpp similarity index 100% rename from include/core/shadermodule.hpp rename to lsfg-vk-gen/include/core/shadermodule.hpp diff --git a/include/shaderchains/alpha.hpp b/lsfg-vk-gen/include/shaderchains/alpha.hpp similarity index 100% rename from include/shaderchains/alpha.hpp rename to lsfg-vk-gen/include/shaderchains/alpha.hpp diff --git a/include/shaderchains/beta.hpp b/lsfg-vk-gen/include/shaderchains/beta.hpp similarity index 100% rename from include/shaderchains/beta.hpp rename to lsfg-vk-gen/include/shaderchains/beta.hpp diff --git a/include/shaderchains/delta.hpp b/lsfg-vk-gen/include/shaderchains/delta.hpp similarity index 100% rename from include/shaderchains/delta.hpp rename to lsfg-vk-gen/include/shaderchains/delta.hpp diff --git a/include/shaderchains/downsample.hpp b/lsfg-vk-gen/include/shaderchains/downsample.hpp similarity index 100% rename from include/shaderchains/downsample.hpp rename to lsfg-vk-gen/include/shaderchains/downsample.hpp diff --git a/include/shaderchains/epsilon.hpp b/lsfg-vk-gen/include/shaderchains/epsilon.hpp similarity index 100% rename from include/shaderchains/epsilon.hpp rename to lsfg-vk-gen/include/shaderchains/epsilon.hpp diff --git a/include/shaderchains/extract.hpp b/lsfg-vk-gen/include/shaderchains/extract.hpp similarity index 100% rename from include/shaderchains/extract.hpp rename to lsfg-vk-gen/include/shaderchains/extract.hpp diff --git a/include/shaderchains/gamma.hpp b/lsfg-vk-gen/include/shaderchains/gamma.hpp similarity index 100% rename from include/shaderchains/gamma.hpp rename to lsfg-vk-gen/include/shaderchains/gamma.hpp diff --git a/include/shaderchains/magic.hpp b/lsfg-vk-gen/include/shaderchains/magic.hpp similarity index 100% rename from include/shaderchains/magic.hpp rename to lsfg-vk-gen/include/shaderchains/magic.hpp diff --git a/include/shaderchains/merge.hpp b/lsfg-vk-gen/include/shaderchains/merge.hpp similarity index 100% rename from include/shaderchains/merge.hpp rename to lsfg-vk-gen/include/shaderchains/merge.hpp diff --git a/include/shaderchains/zeta.hpp b/lsfg-vk-gen/include/shaderchains/zeta.hpp similarity index 100% rename from include/shaderchains/zeta.hpp rename to lsfg-vk-gen/include/shaderchains/zeta.hpp diff --git a/include/utils.hpp b/lsfg-vk-gen/include/utils.hpp similarity index 100% rename from include/utils.hpp rename to lsfg-vk-gen/include/utils.hpp diff --git a/public/lsfg.hpp b/lsfg-vk-gen/public/lsfg.hpp similarity index 100% rename from public/lsfg.hpp rename to lsfg-vk-gen/public/lsfg.hpp diff --git a/src/context.cpp b/lsfg-vk-gen/src/context.cpp similarity index 98% rename from src/context.cpp rename to lsfg-vk-gen/src/context.cpp index 37cb651..46ee8ed 100644 --- a/src/context.cpp +++ b/lsfg-vk-gen/src/context.cpp @@ -94,8 +94,8 @@ Context::Context(const Core::Device& device, uint32_t width, uint32_t height, in } void Context::present(const Core::Device& device, int inSem, int outSem) { - Core::Semaphore inSemaphore(device, inSem); - Core::Semaphore outSemaphore(device, outSem); + const Core::Semaphore inSemaphore(device, inSem); + const Core::Semaphore outSemaphore(device, outSem); Core::CommandBuffer cmdBuffer(device, this->cmdPool); cmdBuffer.begin(); diff --git a/src/core/buffer.cpp b/lsfg-vk-gen/src/core/buffer.cpp similarity index 100% rename from src/core/buffer.cpp rename to lsfg-vk-gen/src/core/buffer.cpp diff --git a/src/core/commandbuffer.cpp b/lsfg-vk-gen/src/core/commandbuffer.cpp similarity index 100% rename from src/core/commandbuffer.cpp rename to lsfg-vk-gen/src/core/commandbuffer.cpp diff --git a/src/core/commandpool.cpp b/lsfg-vk-gen/src/core/commandpool.cpp similarity index 100% rename from src/core/commandpool.cpp rename to lsfg-vk-gen/src/core/commandpool.cpp diff --git a/src/core/descriptorpool.cpp b/lsfg-vk-gen/src/core/descriptorpool.cpp similarity index 100% rename from src/core/descriptorpool.cpp rename to lsfg-vk-gen/src/core/descriptorpool.cpp diff --git a/src/core/descriptorset.cpp b/lsfg-vk-gen/src/core/descriptorset.cpp similarity index 100% rename from src/core/descriptorset.cpp rename to lsfg-vk-gen/src/core/descriptorset.cpp diff --git a/src/core/device.cpp b/lsfg-vk-gen/src/core/device.cpp similarity index 100% rename from src/core/device.cpp rename to lsfg-vk-gen/src/core/device.cpp diff --git a/src/core/fence.cpp b/lsfg-vk-gen/src/core/fence.cpp similarity index 100% rename from src/core/fence.cpp rename to lsfg-vk-gen/src/core/fence.cpp diff --git a/src/core/image.cpp b/lsfg-vk-gen/src/core/image.cpp similarity index 100% rename from src/core/image.cpp rename to lsfg-vk-gen/src/core/image.cpp diff --git a/src/core/instance.cpp b/lsfg-vk-gen/src/core/instance.cpp similarity index 100% rename from src/core/instance.cpp rename to lsfg-vk-gen/src/core/instance.cpp diff --git a/src/core/pipeline.cpp b/lsfg-vk-gen/src/core/pipeline.cpp similarity index 100% rename from src/core/pipeline.cpp rename to lsfg-vk-gen/src/core/pipeline.cpp diff --git a/src/core/sampler.cpp b/lsfg-vk-gen/src/core/sampler.cpp similarity index 100% rename from src/core/sampler.cpp rename to lsfg-vk-gen/src/core/sampler.cpp diff --git a/src/core/semaphore.cpp b/lsfg-vk-gen/src/core/semaphore.cpp similarity index 100% rename from src/core/semaphore.cpp rename to lsfg-vk-gen/src/core/semaphore.cpp diff --git a/src/core/shadermodule.cpp b/lsfg-vk-gen/src/core/shadermodule.cpp similarity index 100% rename from src/core/shadermodule.cpp rename to lsfg-vk-gen/src/core/shadermodule.cpp diff --git a/src/lsfg.cpp b/lsfg-vk-gen/src/lsfg.cpp similarity index 100% rename from src/lsfg.cpp rename to lsfg-vk-gen/src/lsfg.cpp diff --git a/src/shaderchains/alpha.cpp b/lsfg-vk-gen/src/shaderchains/alpha.cpp similarity index 100% rename from src/shaderchains/alpha.cpp rename to lsfg-vk-gen/src/shaderchains/alpha.cpp diff --git a/src/shaderchains/beta.cpp b/lsfg-vk-gen/src/shaderchains/beta.cpp similarity index 100% rename from src/shaderchains/beta.cpp rename to lsfg-vk-gen/src/shaderchains/beta.cpp diff --git a/src/shaderchains/delta.cpp b/lsfg-vk-gen/src/shaderchains/delta.cpp similarity index 100% rename from src/shaderchains/delta.cpp rename to lsfg-vk-gen/src/shaderchains/delta.cpp diff --git a/src/shaderchains/downsample.cpp b/lsfg-vk-gen/src/shaderchains/downsample.cpp similarity index 100% rename from src/shaderchains/downsample.cpp rename to lsfg-vk-gen/src/shaderchains/downsample.cpp diff --git a/src/shaderchains/epsilon.cpp b/lsfg-vk-gen/src/shaderchains/epsilon.cpp similarity index 100% rename from src/shaderchains/epsilon.cpp rename to lsfg-vk-gen/src/shaderchains/epsilon.cpp diff --git a/src/shaderchains/extract.cpp b/lsfg-vk-gen/src/shaderchains/extract.cpp similarity index 100% rename from src/shaderchains/extract.cpp rename to lsfg-vk-gen/src/shaderchains/extract.cpp diff --git a/src/shaderchains/gamma.cpp b/lsfg-vk-gen/src/shaderchains/gamma.cpp similarity index 100% rename from src/shaderchains/gamma.cpp rename to lsfg-vk-gen/src/shaderchains/gamma.cpp diff --git a/src/shaderchains/magic.cpp b/lsfg-vk-gen/src/shaderchains/magic.cpp similarity index 100% rename from src/shaderchains/magic.cpp rename to lsfg-vk-gen/src/shaderchains/magic.cpp diff --git a/src/shaderchains/merge.cpp b/lsfg-vk-gen/src/shaderchains/merge.cpp similarity index 100% rename from src/shaderchains/merge.cpp rename to lsfg-vk-gen/src/shaderchains/merge.cpp diff --git a/src/shaderchains/zeta.cpp b/lsfg-vk-gen/src/shaderchains/zeta.cpp similarity index 100% rename from src/shaderchains/zeta.cpp rename to lsfg-vk-gen/src/shaderchains/zeta.cpp diff --git a/src/utils.cpp b/lsfg-vk-gen/src/utils.cpp similarity index 100% rename from src/utils.cpp rename to lsfg-vk-gen/src/utils.cpp diff --git a/src/init.cpp b/src/init.cpp new file mode 100644 index 0000000..3938c8a --- /dev/null +++ b/src/init.cpp @@ -0,0 +1,15 @@ +#include "log.hpp" + +extern "C" void __attribute__((constructor)) init(); +extern "C" [[noreturn]] void __attribute__((destructor)) deinit(); + +void init() { + Log::info("lsfg-vk: init() called"); +} + +void deinit() { + Log::debug("lsfg-vk: deinit() called, exiting"); + // for some reason some applications unload the library despite it containing + // the dl functions. this will lead to a segmentation fault, so we exit early. + exit(EXIT_SUCCESS); +}