diff options
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/meson.build | 215 |
1 files changed, 112 insertions, 103 deletions
diff --git a/src/render/meson.build b/src/render/meson.build index b567a03..4274758 100644 --- a/src/render/meson.build +++ b/src/render/meson.build @@ -8,118 +8,127 @@ if get_option('renderer') == 'momo' render_deps += [momo] render_args += ['-DCAMU_RENDERER_MOMO'] elif get_option('renderer') == 'libplacebo' - libplacebo_opts = ['warning_level=2', 'demos=false', 'tests=false', 'bench=false', 'fuzz=false', - 'glslang=disabled', - 'gl-proc-addr=disabled', - 'vk-proc-addr=disabled', - 'lcms=auto', - 'dovi=auto', - 'libdovi=auto', - 'xxhash=auto' - ] + libplacebo_found = false + if 'libplacebo' not in get_option('force_fallback_for') + libplacebo = dependency('libplacebo', required: false, allow_fallback: false) + if libplacebo.found() + libplacebo_found = true + endif + endif + if not libplacebo_found + libplacebo_opts = ['warning_level=2', 'demos=false', 'tests=false', 'bench=false', 'fuzz=false', + 'gl-proc-addr=disabled', + 'vk-proc-addr=disabled', + 'lcms=auto', + 'dovi=auto', + 'libdovi=auto', + 'xxhash=auto' + ] - if get_option('renderer-api') == 'vulkan' or get_option('renderer-api') == 'dx11' - if is_windows - shaderc = dependency('shaderc_combined', required: false, allow_fallback: false) + if get_option('renderer-api') == 'vulkan' or get_option('renderer-api') == 'dx11' + if get_option('renderer-compiler') == 'shaderc' + if is_windows + shaderc = dependency('shaderc_combined', required: false, allow_fallback: false) + else + shaderc = dependency('shaderc', required: false, allow_fallback: false) + endif + if shaderc.found() + render_deps += [shaderc] + else + shaderc_opts = cmake.subproject_options() + shaderc_opts.set_override_option('warning_level', '0') # Doesn't work. + reltype = is_minsize ? 'MinSizeRel' : 'Release' + shaderc_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) + shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_INSTALL': true }) + shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_TESTS': true }) + shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_EXAMPLES': true }) + shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_COPYRIGHT_CHECK': true }) + shaderc_opts.add_cmake_defines({ 'ENABLE_GLSLANG_BINARIES': false }) + shaderc_opts.add_cmake_defines({ 'ENABLE_SPVREMAPPER': false }) + shaderc_opts.add_cmake_defines({ 'ENABLE_HLSL': false }) + spirv_optimizer = true + shaderc_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer }) + shaderc_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS_ON_MSVC': false }) + shaderc_proj = cmake.subproject('shaderc', options: shaderc_opts) + shaderc = shaderc_proj.dependency('shaderc') + meson.override_dependency('shaderc', shaderc) + render_deps += [ + shaderc_proj.dependency('shaderc_util'), + shaderc_proj.dependency('glslang'), + shaderc_proj.dependency('MachineIndependent'), + shaderc_proj.dependency('OSDependent'), + shaderc_proj.dependency('GenericCodeGen'), + shaderc_proj.dependency('SPIRV'), + shaderc_proj.dependency('SPIRV-Tools-static') + ] + if spirv_optimizer + render_deps += [ + shaderc_proj.dependency('SPIRV-Tools-opt'), + ] + endif + endif + libplacebo_opts += ['shaderc=enabled', 'glslang=disabled'] + else + glslang = dependency('glslang', required: false, allow_fallback: false) + if glslang.found() + render_deps += [glslang] + else + glslang_opts = cmake.subproject_options() + glslang_opts.set_override_option('warning_level', '0') + reltype = is_minsize ? 'MinSizeRel' : 'Release' + glslang_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) + spirv_optimizer = false + glslang_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer }) + glslang_proj = cmake.subproject('glslang', options: glslang_opts) + spirv = glslang_proj.dependency('SPIRV') + glslang = glslang_proj.dependency('glslang') + glslang_default_resource_limits = glslang_proj.dependency('glslang-default-resource-limits') + meson.override_dependency('SPIRV', spirv) + meson.override_dependency('glslang', glslang) + meson.override_dependency('glslang-default-resource-limits', glslang_default_resource_limits) + render_deps += [ + glslang_proj.dependency('MachineIndependent'), + glslang_proj.dependency('OSDependent'), + glslang_proj.dependency('GenericCodeGen'), + spirv, + glslang, + glslang_default_resource_limits + ] + endif + libplacebo_opts += ['glslang=enabled', 'shaderc=disabled'] + endif else - shaderc = dependency('shaderc', required: false, allow_fallback: false) + libplacebo_opts += ['glslang=disabled', 'shaderc=disabled'] endif - if shaderc.found() - render_deps += [shaderc] - else - shaderc_opts = cmake.subproject_options() - shaderc_opts.set_override_option('warning_level', '0') # Doesn't work. + + if get_option('renderer-api') == 'vulkan' + libplacebo_opts += ['vulkan=enabled', 'd3d11=disabled', 'opengl=disabled'] + elif get_option('renderer-api') == 'dx11' + spirv_cross_opts = cmake.subproject_options() reltype = is_minsize ? 'MinSizeRel' : 'Release' - shaderc_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) - shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_INSTALL': true }) - shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_TESTS': true }) - shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_EXAMPLES': true }) - shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_COPYRIGHT_CHECK': true }) - shaderc_opts.add_cmake_defines({ 'ENABLE_GLSLANG_BINARIES': false }) - shaderc_opts.add_cmake_defines({ 'ENABLE_SPVREMAPPER': false }) - shaderc_opts.add_cmake_defines({ 'ENABLE_HLSL': false }) - spirv_optimizer = true - shaderc_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer }) - shaderc_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS_ON_MSVC': false }) - shaderc_proj = cmake.subproject('shaderc', options: shaderc_opts) - shaderc = shaderc_proj.dependency('shaderc') - meson.override_dependency('shaderc', shaderc) + spirv_cross_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) + spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_CLI': false }) + spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_TESTS': false }) + spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_MSL': false }) + spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_CPP': false }) + spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_REFLECT': false }) + spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_UTIL': false }) + spirv_cross_proj = cmake.subproject('SPIRV-Cross', options: spirv_cross_opts) + spirv_cross_c_shared = spirv_cross_proj.dependency('spirv-cross-c') render_deps += [ - shaderc_proj.dependency('shaderc_util'), - shaderc_proj.dependency('glslang'), - shaderc_proj.dependency('MachineIndependent'), - shaderc_proj.dependency('OSDependent'), - shaderc_proj.dependency('GenericCodeGen'), - shaderc_proj.dependency('SPIRV'), - shaderc_proj.dependency('SPIRV-Tools-static') + spirv_cross_proj.dependency('spirv-cross-glsl'), + spirv_cross_proj.dependency('spirv-cross-hlsl'), + spirv_cross_proj.dependency('spirv-cross-core'), + spirv_cross_c_shared ] - if spirv_optimizer - render_deps += [ - shaderc_proj.dependency('SPIRV-Tools-opt'), - ] - endif + meson.override_dependency('spirv-cross-c-shared', spirv_cross_c_shared) + libplacebo_opts += ['d3d11=enabled', 'vulkan=disabled', 'opengl=disabled'] + else + libplacebo_opts += ['opengl=enabled', 'vulkan=disabled', 'd3d11=disabled'] endif - #glslang = dependency('glslang', required: false, allow_fallback: false) - #if glslang.found() - # render_deps += [glslang] - #else - # #spirv_tools_opts = cmake.subproject_options() - # #spirv_tools_opts.set_override_option('warning_level', '0') - # #reltype = is_minsize ? 'MinSizeRel' : 'Release' - # #spirv_tools_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) - # #spirv_tools_proj = cmake.subproject('SPIRV-Tools', options: spirv_tools_opts) - # glslang_opts = cmake.subproject_options() - # glslang_opts.set_override_option('warning_level', '0') - # reltype = is_minsize ? 'MinSizeRel' : 'Release' - # glslang_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) - # #glslang_opts.add_cmake_defines({ 'ALLOW_EXTERNAL_SPIRV_TOOLS': true }) - # glslang_opts.add_cmake_defines({ 'ENABLE_OPT': '0' }) - # glslang_proj = cmake.subproject('glslang', options: glslang_opts) - # #message('CMake targets:\n - ' + '\n - '.join(glslang_proj.target_list())) - # glslang = glslang_proj.dependency('glslang') - # spirv = glslang_proj.dependency('SPIRV') - # glslang_default_resource_limits = glslang_proj.dependency('glslang-default-resource-limits') - # meson.override_dependency('glslang', glslang) - # meson.override_dependency('SPIRV', spirv) - # meson.override_dependency('glslang-default-resource-limits', glslang_default_resource_limits) - # render_deps += [ - # glslang_proj.dependency('MachineIndependent'), - # glslang_proj.dependency('OSDependent'), - # glslang_proj.dependency('GenericCodeGen'), - # glslang, - # spirv, - # glslang_default_resource_limits - # ] - #endif - endif - if get_option('renderer-api') == 'vulkan' - libplacebo_opts += ['shaderc=enabled', 'vulkan=enabled', 'd3d11=disabled', 'opengl=disabled'] - elif get_option('renderer-api') == 'dx11' - spirv_cross_opts = cmake.subproject_options() - reltype = is_minsize ? 'MinSizeRel' : 'Release' - spirv_cross_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) - spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_CLI': false }) - spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_TESTS': false }) - spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_MSL': false }) - spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_CPP': false }) - spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_REFLECT': false }) - spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_UTIL': false }) - spirv_cross_proj = cmake.subproject('SPIRV-Cross', options: spirv_cross_opts) - spirv_cross_c_shared = spirv_cross_proj.dependency('spirv-cross-c') - render_deps += [ - spirv_cross_proj.dependency('spirv-cross-glsl'), - spirv_cross_proj.dependency('spirv-cross-hlsl'), - spirv_cross_proj.dependency('spirv-cross-core'), - spirv_cross_c_shared - ] - meson.override_dependency('spirv-cross-c-shared', spirv_cross_c_shared) - libplacebo_opts += ['shaderc=enabled', 'd3d11=enabled', 'vulkan=disabled', 'opengl=disabled'] - else - libplacebo_opts += ['shaderc=disabled', 'opengl=enabled', 'vulkan=disabled', 'd3d11=disabled'] + libplacebo = dependency('libplacebo', default_options: libplacebo_opts) endif - - libplacebo = dependency('libplacebo', default_options: libplacebo_opts) render_src += ['renderer_libplacebo.c', 'queue_libplacebo.c'] render_deps += [libplacebo] render_args += ['-DCAMU_RENDERER_LIBPLACEBO'] |