diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index fd4447e6a..4c4255ef1 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -4,40 +4,32 @@ if(NOT xbyak_FOUND) add_subdirectory(xbyak) endif() -if(NOT SPIRV-Headers_FOUND) - add_subdirectory(SPIRV-Headers) +add_subdirectory(SPIRV-Headers) + +add_subdirectory(SPIRV-Tools) + +option(SPIRV_CROSS_SHARED "" on) +option(SPIRV_CROSS_STATIC "" on) +option(SPIRV_CROSS_ENABLE_GLSL "" on) +option(SPIRV_CROSS_ENABLE_HLSL "" off) +option(SPIRV_CROSS_ENABLE_MSL "" off) +option(SPIRV_CROSS_ENABLE_CPP "" off) +option(SPIRV_CROSS_ENABLE_REFLECT "" off) +option(SPIRV_CROSS_ENABLE_C_API "" off) +option(SPIRV_CROSS_ENABLE_UTIL "" off) +option(SPIRV_CROSS_CLI "" off) +option(SPIRV_CROSS_ENABLE_TESTS "" off) +option(SPIRV_CROSS_SKIP_INSTALL "" on) +add_subdirectory(SPIRV-Cross) + +install(TARGETS spirv-cross-c-shared LIBRARY DESTINATION bin) +set_target_properties(spirv-cross-c-shared PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +add_subdirectory(glslang) +if(NOT TARGET glslang::glslang-standalone) + add_executable(glslang::glslang-standalone ALIAS glslang-standalone) endif() -if(NOT SPIRV-Tools-opt_FOUND) - add_subdirectory(SPIRV-Tools) -endif() - -if(NOT SPIRV-Cross_FOUND) - option(SPIRV_CROSS_SHARED "" on) - option(SPIRV_CROSS_STATIC "" on) - option(SPIRV_CROSS_ENABLE_GLSL "" on) - option(SPIRV_CROSS_ENABLE_HLSL "" off) - option(SPIRV_CROSS_ENABLE_MSL "" off) - option(SPIRV_CROSS_ENABLE_CPP "" off) - option(SPIRV_CROSS_ENABLE_REFLECT "" off) - option(SPIRV_CROSS_ENABLE_C_API "" off) - option(SPIRV_CROSS_ENABLE_UTIL "" off) - option(SPIRV_CROSS_CLI "" off) - option(SPIRV_CROSS_ENABLE_TESTS "" off) - option(SPIRV_CROSS_SKIP_INSTALL "" on) - add_subdirectory(SPIRV-Cross) - - install(TARGETS spirv-cross-c-shared LIBRARY DESTINATION bin) - set_target_properties(spirv-cross-c-shared PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -endif() - -# if(NOT glslang_FOUND) - add_subdirectory(glslang) - if(NOT TARGET glslang::glslang-standalone) - add_executable(glslang::glslang-standalone ALIAS glslang-standalone) - endif() -# endif() - if(NOT nlohmann_json_FOUND) add_subdirectory(json) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f5f23562..8feb91be7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,15 +9,6 @@ set(CMAKE_BUILD_RPATH_USE_ORIGIN on) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(nlohmann_json CONFIG) -find_package(SPIRV-Cross 1.6 MODULE) -find_package(SPIRV-Tools-opt MODULE) -find_package(xbyak CONFIG) - -if(SPIRV-Tools-opt_FOUND) - find_package(glslang CONFIG) - find_package(SPIRV-Headers CONFIG) -endif() - add_subdirectory(3rdparty EXCLUDE_FROM_ALL) function(add_precompiled_vulkan_spirv target) diff --git a/rpcsx-gpu2/lib/gcn-shader/CMakeLists.txt b/rpcsx-gpu2/lib/gcn-shader/CMakeLists.txt index 9aff3961f..9fd9e65ef 100644 --- a/rpcsx-gpu2/lib/gcn-shader/CMakeLists.txt +++ b/rpcsx-gpu2/lib/gcn-shader/CMakeLists.txt @@ -42,7 +42,7 @@ PRIVATE glslang::SPIRV SPIRV-Tools SPIRV-Tools-opt - spirv-cross-c-shared + spirv-cross-glsl ) add_subdirectory(shaders) diff --git a/rpcsx-gpu2/lib/gcn-shader/src/gcn.cpp b/rpcsx-gpu2/lib/gcn-shader/src/gcn.cpp index ad05c6722..deac7e0ad 100644 --- a/rpcsx-gpu2/lib/gcn-shader/src/gcn.cpp +++ b/rpcsx-gpu2/lib/gcn-shader/src/gcn.cpp @@ -19,7 +19,7 @@ #include "transform.hpp" #include #include -#include +#include #include #include #include diff --git a/rpcsx-gpu2/lib/gcn-shader/src/glsl.cpp b/rpcsx-gpu2/lib/gcn-shader/src/glsl.cpp index e97540089..6a7244646 100644 --- a/rpcsx-gpu2/lib/gcn-shader/src/glsl.cpp +++ b/rpcsx-gpu2/lib/gcn-shader/src/glsl.cpp @@ -5,7 +5,8 @@ #include #include #include -#include +#include +#include static constexpr auto g_glslangLimit = 100; @@ -294,41 +295,11 @@ shader::glsl::parseSource(ir::Context &context, Stage stage, } std::string shader::glsl::decompile(std::span spv) { - spvc_context context = nullptr; - spvc_parsed_ir ir = nullptr; - spvc_compiler compiler_glsl = nullptr; - spvc_compiler_options options = nullptr; - const char *result = nullptr; - - spvc_context_create(&context); - - spvc_context_set_error_callback( - context, - [](void *, const char *message) { - std::fprintf(stderr, "%s\n", message); - }, - nullptr); - - spvc_context_parse_spirv(context, spv.data(), spv.size(), &ir); - spvc_context_create_compiler(context, SPVC_BACKEND_GLSL, ir, - SPVC_CAPTURE_MODE_TAKE_OWNERSHIP, - &compiler_glsl); - - spvc_compiler_create_compiler_options(compiler_glsl, &options); - spvc_compiler_options_set_uint(options, SPVC_COMPILER_OPTION_GLSL_VERSION, - 460); - spvc_compiler_options_set_bool(options, SPVC_COMPILER_OPTION_GLSL_ES, - SPVC_FALSE); - spvc_compiler_options_set_bool( - options, SPVC_COMPILER_OPTION_GLSL_VULKAN_SEMANTICS, SPVC_TRUE); - spvc_compiler_install_compiler_options(compiler_glsl, options); - - if (spvc_compiler_compile(compiler_glsl, &result) != SPVC_SUCCESS) { - spvc_context_destroy(context); - return {}; - } - std::string resultStr = result; - spvc_context_destroy(context); - - return resultStr; + spirv_cross::CompilerGLSL glsl(spv.data(), spv.size()); + spirv_cross::CompilerGLSL::Options options; + options.version = 460; + options.es = false; + options.vulkan_semantics = true; + glsl.set_common_options(options); + return glsl.compile(); }