glslang: Disable warnings and allow unbundling

This commit is contained in:
Rémi Verschelde 2019-09-27 09:39:53 +02:00
parent 7458a601ce
commit 65ad12e79a
4 changed files with 65 additions and 60 deletions

View File

@ -140,6 +140,7 @@ opts.Add(BoolVariable('builtin_bullet', "Use the built-in Bullet library", True)
opts.Add(BoolVariable('builtin_certs', "Bundle default SSL certificates to be used if you don't specify an override in the project settings", True)) opts.Add(BoolVariable('builtin_certs', "Bundle default SSL certificates to be used if you don't specify an override in the project settings", True))
opts.Add(BoolVariable('builtin_enet', "Use the built-in ENet library", True)) opts.Add(BoolVariable('builtin_enet', "Use the built-in ENet library", True))
opts.Add(BoolVariable('builtin_freetype', "Use the built-in FreeType library", True)) opts.Add(BoolVariable('builtin_freetype', "Use the built-in FreeType library", True))
opts.Add(BoolVariable('builtin_glslang', "Use the built-in glslang library", True))
opts.Add(BoolVariable('builtin_libogg', "Use the built-in libogg library", True)) opts.Add(BoolVariable('builtin_libogg', "Use the built-in libogg library", True))
opts.Add(BoolVariable('builtin_libpng', "Use the built-in libpng library", True)) opts.Add(BoolVariable('builtin_libpng', "Use the built-in libpng library", True))
opts.Add(BoolVariable('builtin_libtheora', "Use the built-in libtheora library", True)) opts.Add(BoolVariable('builtin_libtheora', "Use the built-in libtheora library", True))

View File

@ -6,61 +6,63 @@ Import('env_modules')
env_glslang = env_modules.Clone() env_glslang = env_modules.Clone()
# Thirdparty source files # Thirdparty source files
# Not unbundled so far since not widespread as shared library if env['builtin_glslang']:
thirdparty_dir = "#thirdparty/glslang/" thirdparty_dir = "#thirdparty/glslang/"
thirdparty_sources = [ thirdparty_sources = [
"glslang/MachineIndependent/RemoveTree.cpp", "glslang/MachineIndependent/RemoveTree.cpp",
"glslang/MachineIndependent/ParseHelper.cpp", "glslang/MachineIndependent/ParseHelper.cpp",
"glslang/MachineIndependent/iomapper.cpp", "glslang/MachineIndependent/iomapper.cpp",
"glslang/MachineIndependent/propagateNoContraction.cpp", "glslang/MachineIndependent/propagateNoContraction.cpp",
"glslang/MachineIndependent/Intermediate.cpp", "glslang/MachineIndependent/Intermediate.cpp",
"glslang/MachineIndependent/linkValidate.cpp", "glslang/MachineIndependent/linkValidate.cpp",
"glslang/MachineIndependent/attribute.cpp", "glslang/MachineIndependent/attribute.cpp",
"glslang/MachineIndependent/Scan.cpp", "glslang/MachineIndependent/Scan.cpp",
"glslang/MachineIndependent/Initialize.cpp", "glslang/MachineIndependent/Initialize.cpp",
"glslang/MachineIndependent/Constant.cpp", "glslang/MachineIndependent/Constant.cpp",
"glslang/MachineIndependent/reflection.cpp", "glslang/MachineIndependent/reflection.cpp",
"glslang/MachineIndependent/limits.cpp", "glslang/MachineIndependent/limits.cpp",
"glslang/MachineIndependent/preprocessor/PpScanner.cpp", "glslang/MachineIndependent/preprocessor/PpScanner.cpp",
"glslang/MachineIndependent/preprocessor/PpTokens.cpp", "glslang/MachineIndependent/preprocessor/PpTokens.cpp",
"glslang/MachineIndependent/preprocessor/PpAtom.cpp", "glslang/MachineIndependent/preprocessor/PpAtom.cpp",
"glslang/MachineIndependent/preprocessor/PpContext.cpp", "glslang/MachineIndependent/preprocessor/PpContext.cpp",
"glslang/MachineIndependent/preprocessor/Pp.cpp", "glslang/MachineIndependent/preprocessor/Pp.cpp",
"glslang/MachineIndependent/InfoSink.cpp", "glslang/MachineIndependent/InfoSink.cpp",
"glslang/MachineIndependent/intermOut.cpp", "glslang/MachineIndependent/intermOut.cpp",
"glslang/MachineIndependent/SymbolTable.cpp", "glslang/MachineIndependent/SymbolTable.cpp",
"glslang/MachineIndependent/glslang_tab.cpp", "glslang/MachineIndependent/glslang_tab.cpp",
"glslang/MachineIndependent/pch.cpp", "glslang/MachineIndependent/pch.cpp",
"glslang/MachineIndependent/Versions.cpp", "glslang/MachineIndependent/Versions.cpp",
"glslang/MachineIndependent/ShaderLang.cpp", "glslang/MachineIndependent/ShaderLang.cpp",
"glslang/MachineIndependent/parseConst.cpp", "glslang/MachineIndependent/parseConst.cpp",
"glslang/MachineIndependent/PoolAlloc.cpp", "glslang/MachineIndependent/PoolAlloc.cpp",
"glslang/MachineIndependent/ParseContextBase.cpp", "glslang/MachineIndependent/ParseContextBase.cpp",
"glslang/MachineIndependent/IntermTraverse.cpp", "glslang/MachineIndependent/IntermTraverse.cpp",
"glslang/GenericCodeGen/Link.cpp", "glslang/GenericCodeGen/Link.cpp",
"glslang/GenericCodeGen/CodeGen.cpp", "glslang/GenericCodeGen/CodeGen.cpp",
"OGLCompilersDLL/InitializeDll.cpp", "OGLCompilersDLL/InitializeDll.cpp",
"SPIRV/InReadableOrder.cpp", "SPIRV/InReadableOrder.cpp",
"SPIRV/GlslangToSpv.cpp", "SPIRV/GlslangToSpv.cpp",
"SPIRV/SpvBuilder.cpp", "SPIRV/SpvBuilder.cpp",
"SPIRV/SpvTools.cpp", "SPIRV/SpvTools.cpp",
"SPIRV/disassemble.cpp", "SPIRV/disassemble.cpp",
"SPIRV/doc.cpp", "SPIRV/doc.cpp",
"SPIRV/SPVRemapper.cpp", "SPIRV/SPVRemapper.cpp",
"SPIRV/SpvPostProcess.cpp", "SPIRV/SpvPostProcess.cpp",
"SPIRV/Logger.cpp" "SPIRV/Logger.cpp"
] ]
if (env["platform"]=="windows"): if (env["platform"]=="windows"):
thirdparty_sources.append("glslang/OSDependent/Windows/ossource.cpp") thirdparty_sources.append("glslang/OSDependent/Windows/ossource.cpp")
else: else:
thirdparty_sources.append("glslang/OSDependent/Unix/ossource.cpp") thirdparty_sources.append("glslang/OSDependent/Unix/ossource.cpp")
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
env_glslang.Prepend(CPPPATH=[thirdparty_dir])
env_thirdparty = env_glslang.Clone()
env_thirdparty.disable_warnings()
env_thirdparty.add_source_files(env.modules_sources, thirdparty_sources)
env_glslang.add_source_files(env.modules_sources, thirdparty_sources)
# Godot's own source files # Godot's own source files
env_glslang.add_source_files(env.modules_sources, "*.cpp") env_glslang.add_source_files(env.modules_sources, "*.cpp")
env.Prepend(CPPPATH=[thirdparty_dir])

View File

@ -29,11 +29,12 @@
/*************************************************************************/ /*************************************************************************/
#include "register_types.h" #include "register_types.h"
#include "servers/visual/rendering_device.h" #include "servers/visual/rendering_device.h"
#include "thirdparty/glslang/SPIRV/GlslangToSpv.h" #include <SPIRV/GlslangToSpv.h>
#include "thirdparty/glslang/glslang/Include/Types.h" #include <glslang/Include/Types.h>
#include "thirdparty/glslang/glslang/Public/ShaderLang.h" #include <glslang/Public/ShaderLang.h>
static const TBuiltInResource default_builtin_resource = { static const TBuiltInResource default_builtin_resource = {
/*maxLights*/ 32, /*maxLights*/ 32,
@ -145,7 +146,7 @@ static PoolVector<uint8_t> _compile_shader_glsl(RenderingDevice::ShaderStage p_s
PoolVector<uint8_t> ret; PoolVector<uint8_t> ret;
ERR_FAIL_COND_V(p_language==RenderingDevice::SHADER_LANGUAGE_HLSL,ret); ERR_FAIL_COND_V(p_language == RenderingDevice::SHADER_LANGUAGE_HLSL, ret);
EShLanguage stages[RenderingDevice::SHADER_STAGE_MAX] = { EShLanguage stages[RenderingDevice::SHADER_STAGE_MAX] = {
EShLangVertex, EShLangVertex,
@ -174,7 +175,7 @@ static PoolVector<uint8_t> _compile_shader_glsl(RenderingDevice::ShaderStage p_s
const int DefaultVersion = 100; const int DefaultVersion = 100;
std::string pre_processed_code; std::string pre_processed_code;
//preprocess //preprocess
if (!shader.preprocess(&default_builtin_resource, DefaultVersion, ENoProfile, false, false, messages, &pre_processed_code, includer)) { if (!shader.preprocess(&default_builtin_resource, DefaultVersion, ENoProfile, false, false, messages, &pre_processed_code, includer)) {
if (r_error) { if (r_error) {
@ -216,17 +217,15 @@ static PoolVector<uint8_t> _compile_shader_glsl(RenderingDevice::ShaderStage p_s
return ret; return ret;
} }
std::vector<uint32_t> SpirV; std::vector<uint32_t> SpirV;
spv::SpvBuildLogger logger; spv::SpvBuildLogger logger;
glslang::SpvOptions spvOptions; glslang::SpvOptions spvOptions;
glslang::GlslangToSpv(*program.getIntermediate(stages[p_stage]), SpirV, &logger, &spvOptions); glslang::GlslangToSpv(*program.getIntermediate(stages[p_stage]), SpirV, &logger, &spvOptions);
ret.resize(SpirV.size() * sizeof(uint32_t)); ret.resize(SpirV.size() * sizeof(uint32_t));
{ {
PoolVector<uint8_t>::Write w = ret.write(); PoolVector<uint8_t>::Write w = ret.write();
copymem(w.ptr(),&SpirV[0],SpirV.size()*sizeof(uint32_t)); copymem(w.ptr(), &SpirV[0], SpirV.size() * sizeof(uint32_t));
} }
return ret; return ret;

View File

@ -323,6 +323,9 @@ def configure(env):
env.Append(CPPDEFINES=['VULKAN_ENABLED']) env.Append(CPPDEFINES=['VULKAN_ENABLED'])
if not env['builtin_vulkan']: if not env['builtin_vulkan']:
env.ParseConfig('pkg-config vulkan --cflags --libs') env.ParseConfig('pkg-config vulkan --cflags --libs')
if not env['builtin_glslang']:
# No pkgconfig file for glslang so far
env.Append(LIBS=['glslang', 'SPIRV'])
#env.Append(CPPDEFINES=['OPENGL_ENABLED']) #env.Append(CPPDEFINES=['OPENGL_ENABLED'])
env.Append(LIBS=['GL']) env.Append(LIBS=['GL'])