--- a/CHANGES +++ b/CHANGES @@ -1,6 +1,6 @@ Revision history for Shaderc -v2024.0 +v2024.0 2024-03-09 - Update dependencies - Utilities: - Use Python3 explicitly in utility scripts --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,6 +117,9 @@ if(MSVC) endif() endif(MSVC) +if(NOT WIN32) + add_definitions("-fvisibility=hidden") +endif() # Configure subdirectories. # We depend on these for later projects, so they should come first. @@ -124,7 +127,6 @@ add_subdirectory(third_party) add_subdirectory(libshaderc_util) add_subdirectory(libshaderc) -add_subdirectory(glslc) if(${SHADERC_ENABLE_EXAMPLES}) add_subdirectory(examples) endif() @@ -158,5 +160,3 @@ function(define_pkg_config_file NAME LIBS) endfunction() define_pkg_config_file(shaderc -lshaderc_shared) -define_pkg_config_file(shaderc_static "-lshaderc ${EXTRA_STATIC_PKGCONFIG_LIBS} -lshaderc_util") -define_pkg_config_file(shaderc_combined -lshaderc_combined) --- a/libshaderc/CMakeLists.txt +++ b/libshaderc/CMakeLists.txt @@ -24,13 +24,6 @@ set(SHADERC_SOURCES src/shaderc_private.h ) -add_library(shaderc STATIC ${SHADERC_SOURCES}) -shaderc_default_compile_options(shaderc) -target_include_directories(shaderc - PUBLIC include - PRIVATE ${glslang_SOURCE_DIR} - ${SPIRV-Headers_SOURCE_DIR}/include) - add_library(shaderc_shared SHARED ${SHADERC_SOURCES}) shaderc_default_compile_options(shaderc_shared) target_include_directories(shaderc_shared @@ -54,7 +47,7 @@ if(SHADERC_ENABLE_INSTALL) DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/shaderc) - install(TARGETS shaderc shaderc_shared + install(TARGETS shaderc_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} @@ -69,20 +62,8 @@ set(SHADERC_LIBS SPIRV-Tools ) -target_link_libraries(shaderc PRIVATE ${SHADERC_LIBS}) target_link_libraries(shaderc_shared PRIVATE ${SHADERC_LIBS}) -shaderc_add_tests( - TEST_PREFIX shaderc - LINK_LIBS shaderc - INCLUDE_DIRS include ${shaderc_SOURCE_DIR}/libshaderc_util/include ${glslang_SOURCE_DIR} - ${spirv-tools_SOURCE_DIR}/include - ${SPIRV-Headers_SOURCE_DIR}/include - TEST_NAMES - shaderc - shaderc_cpp - shaderc_private) - shaderc_add_tests( TEST_PREFIX shaderc_shared LINK_LIBS shaderc_shared SPIRV-Tools @@ -94,22 +75,6 @@ shaderc_add_tests( shaderc_cpp shaderc_private) -shaderc_combine_static_lib(shaderc_combined shaderc) - -if(SHADERC_ENABLE_INSTALL) - install(TARGETS shaderc_combined DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif(SHADERC_ENABLE_INSTALL) - -shaderc_add_tests( - TEST_PREFIX shaderc_combined - LINK_LIBS shaderc_combined ${CMAKE_THREAD_LIBS_INIT} - INCLUDE_DIRS include ${shaderc_SOURCE_DIR}/libshaderc_util/include ${glslang_SOURCE_DIR} - ${spirv-tools_SOURCE_DIR}/include - ${SPIRV-Headers_SOURCE_DIR}/include - TEST_NAMES - shaderc - shaderc_cpp) - if(${SHADERC_ENABLE_TESTS}) add_executable(shaderc_c_smoke_test ./src/shaderc_c_smoke_test.c) shaderc_default_c_compile_options(shaderc_c_smoke_test) --- a/libshaderc/include/shaderc/shaderc.h +++ b/libshaderc/include/shaderc/shaderc.h @@ -319,6 +319,10 @@ SHADERC_EXPORT void shaderc_compile_options_set_source_language( SHADERC_EXPORT void shaderc_compile_options_set_generate_debug_info( shaderc_compile_options_t options); +// Sets the compiler mode to emit non-semantic debug information in the output. +SHADERC_EXPORT void shaderc_compile_options_set_emit_non_semantic_debug_info( + shaderc_compile_options_t options); + // Sets the compiler optimization level to the given level. Only the last one // takes effect if multiple calls of this function exist. SHADERC_EXPORT void shaderc_compile_options_set_optimization_level( --- a/libshaderc/include/shaderc/shaderc.hpp +++ b/libshaderc/include/shaderc/shaderc.hpp @@ -172,6 +172,12 @@ class CompileOptions { shaderc_compile_options_set_generate_debug_info(options_); } + // Sets the compiler mode to emit non-semantic debug information in the + // output. + void SetEmitNonSemanticDebugInfo() { + shaderc_compile_options_set_emit_non_semantic_debug_info(options_); + } + // Sets the compiler optimization level to the given level. Only the last one // takes effect if multiple calls of this function exist. void SetOptimizationLevel(shaderc_optimization_level level) { --- a/libshaderc/src/shaderc.cc +++ b/libshaderc/src/shaderc.cc @@ -422,6 +422,11 @@ void shaderc_compile_options_set_generate_debug_info( options->compiler.SetGenerateDebugInfo(); } +void shaderc_compile_options_set_emit_non_semantic_debug_info( + shaderc_compile_options_t options) { + options->compiler.SetEmitNonSemanticDebugInfo(); +} + void shaderc_compile_options_set_optimization_level( shaderc_compile_options_t options, shaderc_optimization_level level) { auto opt_level = shaderc_util::Compiler::OptimizationLevel::Zero; --- a/libshaderc_util/include/libshaderc_util/compiler.h +++ b/libshaderc_util/include/libshaderc_util/compiler.h @@ -195,6 +195,7 @@ class Compiler { warnings_as_errors_(false), suppress_warnings_(false), generate_debug_info_(false), + emit_non_semantic_debug_info_(false), enabled_opt_passes_(), target_env_(TargetEnv::Vulkan), target_env_version_(TargetEnvVersion::Default), @@ -220,6 +221,10 @@ class Compiler { // such as identifier names and line numbers. void SetGenerateDebugInfo(); + // Requests that the compiler emit non-semantic debug information. + // Requires VK_KHR_shader_non_semantic_info. + void SetEmitNonSemanticDebugInfo(); + // Sets the optimization level to the given level. Only the last one takes // effect if multiple calls of this method exist. void SetOptimizationLevel(OptimizationLevel level); @@ -486,6 +491,10 @@ class Compiler { // output. bool generate_debug_info_; + // When true and generate_debug_info_ is also set, generate non-semantic debug + // information. + bool emit_non_semantic_debug_info_; + // Optimization passes to be applied. std::vector enabled_opt_passes_; --- a/libshaderc_util/src/compiler.cc +++ b/libshaderc_util/src/compiler.cc @@ -341,6 +341,11 @@ std::tuple, size_t> Compiler::Compile( options.generateDebugInfo = generate_debug_info_; options.disableOptimizer = true; options.optimizeSize = false; + options.emitNonSemanticShaderDebugInfo = + generate_debug_info_ && emit_non_semantic_debug_info_; + options.emitNonSemanticShaderDebugSource = + generate_debug_info_ && emit_non_semantic_debug_info_; + // Note the call to GlslangToSpv also populates compilation_output_data. glslang::GlslangToSpv(*program.getIntermediate(used_shader_stage), spirv, &options); @@ -438,6 +443,10 @@ void Compiler::SetGenerateDebugInfo() { } } +void Compiler::SetEmitNonSemanticDebugInfo() { + emit_non_semantic_debug_info_ = true; +} + void Compiler::SetOptimizationLevel(Compiler::OptimizationLevel level) { // Clear previous settings first. enabled_opt_passes_.clear(); --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -20,9 +20,9 @@ set(SHADERC_TINT_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/tint" CACHE STRING set(SHADERC_ABSL_DIR "${SHADERC_THIRD_PARTY_ROOT_DIR}/abseil_cpp" CACHE STRING "Location of re2 source") -set( SKIP_GLSLANG_INSTALL ${SHADERC_SKIP_INSTALL} ) -set( SKIP_SPIRV_TOOLS_INSTALL ${SHADERC_SKIP_INSTALL} ) -set( SKIP_GOOGLETEST_INSTALL ${SHADERC_SKIP_INSTALL} ) +set( SKIP_GLSLANG_INSTALL ON ) +set( SKIP_SPIRV_TOOLS_INSTALL ON ) +set( SKIP_GOOGLETEST_INSTALL ON ) # Configure third party projects. if(${SHADERC_ENABLE_TESTS}) @@ -64,7 +64,10 @@ if (NOT TARGET SPIRV-Tools) add_subdirectory(${SHADERC_RE2_DIR} re2) add_subdirectory(${SHADERC_EFFCEE_DIR} effcee) endif() - add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools) + set(SPIRV_SKIP_EXECUTABLES ON CACHE BOOL "Skip building SPIRV-Tools executables") + set(SPIRV_TOOLS_BUILD_STATIC OFF CACHE BOOL "Skip building two SPIRV-Tools libs") + set(SPIRV_TOOLS_LIBRARY_TYPE STATIC CACHE STRING "Build static SPIRV-Tools libs") + add_subdirectory(${SHADERC_SPIRV_TOOLS_DIR} spirv-tools EXCLUDE_FROM_ALL) if (NOT "${SPIRV_SKIP_TESTS}") if (MSVC) if (${MSVC_VERSION} LESS 1920) @@ -83,7 +86,7 @@ endif() if (NOT TARGET glslang) if (IS_DIRECTORY ${SHADERC_GLSLANG_DIR}) - add_subdirectory(${SHADERC_GLSLANG_DIR} glslang) + add_subdirectory(${SHADERC_GLSLANG_DIR} glslang EXCLUDE_FROM_ALL) endif() if (NOT TARGET glslang) message(FATAL_ERROR "glslang was not found - required for compilation")