mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
parent
7e1d46189e
commit
3b302e63d8
3 changed files with 68 additions and 40 deletions
|
|
@ -1,62 +1,72 @@
|
||||||
cmake_minimum_required(VERSION 3.29)
|
cmake_minimum_required(VERSION 3.29)
|
||||||
|
|
||||||
# cmake options
|
|
||||||
set(CMAKE_CXX_COMPILER clang++)
|
|
||||||
set(CMAKE_CXX_CLANG_TIDY clang-tidy)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
set(CMAKE_SKIP_RPATH ON)
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
add_definitions("-DLSFG_NO_DEBUG")
|
add_definitions("-DLSFG_NO_DEBUG")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# subprojects
|
# subprojects
|
||||||
|
set(CMAKE_SKIP_RPATH ON)
|
||||||
|
|
||||||
include(cmake/FetchDXVK.cmake)
|
include(cmake/FetchDXVK.cmake)
|
||||||
include(cmake/FetchPeParse.cmake)
|
include(cmake/FetchPeParse.cmake)
|
||||||
|
|
||||||
add_subdirectory(lsfg-vk-gen)
|
add_subdirectory(lsfg-vk-v3.1)
|
||||||
|
|
||||||
# main project
|
# main project
|
||||||
project(lsfg-vk
|
project(lsfg-vk
|
||||||
VERSION 0.0.1
|
VERSION 0.0.1
|
||||||
DESCRIPTION "lsfg-vk: LSFG on Linux through Vulkan"
|
DESCRIPTION "LSFG on Linux"
|
||||||
LANGUAGES CXX)
|
LANGUAGES CXX)
|
||||||
|
|
||||||
file(GLOB SOURCES
|
file(GLOB SOURCES
|
||||||
"src/utils/*.cpp"
|
"src/extract/*.cpp"
|
||||||
"src/mini/*.cpp"
|
"src/mini/*.cpp"
|
||||||
|
"src/utils/*.cpp"
|
||||||
"src/*.cpp"
|
"src/*.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(lsfg-vk SHARED ${SOURCES})
|
add_library(lsfg-vk SHARED ${SOURCES})
|
||||||
|
|
||||||
|
# target
|
||||||
|
set_target_properties(lsfg-vk PROPERTIES
|
||||||
|
CXX_STANDARD 20
|
||||||
|
CXX_STANDARD_REQUIRED ON)
|
||||||
target_include_directories(lsfg-vk
|
target_include_directories(lsfg-vk
|
||||||
PRIVATE include)
|
PRIVATE include)
|
||||||
target_link_libraries(lsfg-vk
|
target_link_libraries(lsfg-vk
|
||||||
PRIVATE lsfg-vk-gen vulkan)
|
PRIVATE lsfg-vk-v3.1 peparse dxvk vulkan)
|
||||||
target_compile_options(lsfg-vk 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 # allow globals
|
|
||||||
# required for vulkan
|
|
||||||
-Wno-cast-function-type-strict
|
|
||||||
)
|
|
||||||
|
|
||||||
|
# diagnostics
|
||||||
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set_target_properties(lsfg-vk PROPERTIES
|
||||||
|
EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(LSFGVK_EXCESS_DEBUG)
|
||||||
|
message(STATUS "LSFGVK_EXCESS_DEBUG is only compatible with clang")
|
||||||
|
target_compile_options(lsfg-vk 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 # allow globals
|
||||||
|
-Wno-cast-function-type-strict # for vulkan
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(lsfg-vk PROPERTIES
|
||||||
|
CXX_CLANG_TIDY clang-tidy)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# install
|
||||||
install(FILES "${CMAKE_BINARY_DIR}/liblsfg-vk.so"
|
install(FILES "${CMAKE_BINARY_DIR}/liblsfg-vk.so"
|
||||||
DESTINATION lib)
|
DESTINATION lib)
|
||||||
install(FILES "${CMAKE_SOURCE_DIR}/VkLayer_LS_frame_generation.json"
|
install(FILES "${CMAKE_SOURCE_DIR}/VkLayer_LS_frame_generation.json"
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(LSFGVK_EXCESS_DEBUG)
|
if(LSFGVK_EXCESS_DEBUG)
|
||||||
message(STATUS "LSFGVK_EXCESS_DEBUG is only compatible with clang")
|
|
||||||
target_compile_options(lsfg-vk-v3.1 PRIVATE
|
target_compile_options(lsfg-vk-v3.1 PRIVATE
|
||||||
-Weverything
|
-Weverything
|
||||||
# disable compat c++ flags
|
# disable compat c++ flags
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
#include "context.hpp"
|
#include "context.hpp"
|
||||||
|
#include "extract/extract.hpp"
|
||||||
|
#include "extract/trans.hpp"
|
||||||
#include "layer.hpp"
|
#include "layer.hpp"
|
||||||
#include "utils/log.hpp"
|
#include "utils/log.hpp"
|
||||||
#include "utils/utils.hpp"
|
#include "utils/utils.hpp"
|
||||||
|
|
@ -12,10 +14,20 @@ LsContext::LsContext(const Hooks::DeviceInfo& info, VkSwapchainKHR swapchain,
|
||||||
VkExtent2D extent, const std::vector<VkImage>& swapchainImages)
|
VkExtent2D extent, const std::vector<VkImage>& swapchainImages)
|
||||||
: swapchain(swapchain), swapchainImages(swapchainImages),
|
: swapchain(swapchain), swapchainImages(swapchainImages),
|
||||||
extent(extent) {
|
extent(extent) {
|
||||||
|
// read environment variables
|
||||||
|
const char* lsfgFlowScaleStr = getenv("LSFG_FLOW_SCALE");
|
||||||
|
const float flowScale = lsfgFlowScaleStr
|
||||||
|
? std::stof(lsfgFlowScaleStr)
|
||||||
|
: 1.0F;
|
||||||
|
|
||||||
|
const char* lsfgHdrStr = getenv("LSFG_HDR");
|
||||||
|
const bool isHdr = lsfgHdrStr
|
||||||
|
? *lsfgHdrStr == '1'
|
||||||
|
: false;
|
||||||
|
|
||||||
// we could take the format from the swapchain,
|
// we could take the format from the swapchain,
|
||||||
// but honestly this is safer.
|
// but honestly this is safer.
|
||||||
const VkFormat format = getenv("LSFG_HDR") == nullptr
|
const VkFormat format = isHdr
|
||||||
? VK_FORMAT_R8G8B8A8_UNORM
|
? VK_FORMAT_R8G8B8A8_UNORM
|
||||||
: VK_FORMAT_R16G16B16A16_SFLOAT;
|
: VK_FORMAT_R16G16B16A16_SFLOAT;
|
||||||
|
|
||||||
|
|
@ -53,19 +65,26 @@ LsContext::LsContext(const Hooks::DeviceInfo& info, VkSwapchainKHR swapchain,
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize lsfg
|
// initialize lsfg
|
||||||
const uint64_t deviceUUID = Utils::getDeviceUUID(info.physicalDevice);
|
|
||||||
setenv("LSFG_DEVICE_UUID", std::to_string(deviceUUID).c_str(), 1);
|
|
||||||
|
|
||||||
Log::debug("context", "(entering LSFG initialization)");
|
Log::debug("context", "(entering LSFG initialization)");
|
||||||
setenv("DISABLE_LSFG", "1", 1);
|
setenv("DISABLE_LSFG", "1", 1);
|
||||||
LSFG::initialize();
|
Extract::extractShaders();
|
||||||
|
LSFG::initialize(
|
||||||
|
Utils::getDeviceUUID(info.physicalDevice),
|
||||||
|
isHdr, 1.0F / flowScale, info.frameGen,
|
||||||
|
[](const std::string& name) {
|
||||||
|
auto dxbc = Extract::getShader(name);
|
||||||
|
auto spirv = Extract::translateShader(dxbc);
|
||||||
|
return spirv;
|
||||||
|
}
|
||||||
|
);
|
||||||
unsetenv("DISABLE_LSFG");
|
unsetenv("DISABLE_LSFG");
|
||||||
Log::debug("context", "(exiting LSFG initialization)");
|
Log::debug("context", "(exiting LSFG initialization)");
|
||||||
|
|
||||||
|
// create lsfg context
|
||||||
Log::debug("context", "(entering LSFG context creation)");
|
Log::debug("context", "(entering LSFG context creation)");
|
||||||
this->lsfgCtxId = std::shared_ptr<int32_t>(
|
this->lsfgCtxId = std::shared_ptr<int32_t>(
|
||||||
new int32_t(LSFG::createContext(extent.width, extent.height,
|
new int32_t(LSFG::createContext(frame_0_fd, frame_1_fd, out_n_fds,
|
||||||
frame_0_fd, frame_1_fd, out_n_fds)),
|
extent, format)),
|
||||||
[](const int32_t* id) {
|
[](const int32_t* id) {
|
||||||
Log::info("context",
|
Log::info("context",
|
||||||
"(entering LSFG context deletion with id: {})", *id);
|
"(entering LSFG context deletion with id: {})", *id);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue