summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/render')
-rw-r--r--src/render/meson.build215
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']