Skip to content

Commit dd65653

Browse files
committed
Upgrade glslang to 15.2.0
1 parent 4a3e4e2 commit dd65653

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+12225
-12377
lines changed

src/glslang/StandAlone/StandAlone.cpp

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,10 @@
4444
#include "glslang/Public/ResourceLimits.h"
4545
#include "Worklist.h"
4646
#include "DirStackFileIncluder.h"
47-
#include "./../glslang/Include/ShHandle.h"
4847
#include "./../glslang/Public/ShaderLang.h"
4948
#include "../glslang/MachineIndependent/localintermediate.h"
5049
#include "../SPIRV/GlslangToSpv.h"
5150
#include "../SPIRV/GLSL.std.450.h"
52-
#include "../SPIRV/doc.h"
5351
#include "../SPIRV/disassemble.h"
5452

5553
#include <array>
@@ -58,10 +56,12 @@
5856
#include <cmath>
5957
#include <cstdlib>
6058
#include <cstring>
59+
#include <iterator>
6160
#include <map>
6261
#include <memory>
6362
#include <set>
6463
#include <thread>
64+
#include <type_traits>
6565

6666
#include "../glslang/OSDependent/osinclude.h"
6767

@@ -110,6 +110,8 @@ enum TOptions : uint64_t {
110110
EOptionInvertY = (1ull << 30),
111111
EOptionDumpBareVersion = (1ull << 31),
112112
EOptionCompileOnly = (1ull << 32),
113+
EOptionDisplayErrorColumn = (1ull << 33),
114+
EOptionLinkTimeOptimization = (1ull << 34),
113115
};
114116
bool targetHlslFunctionality1 = false;
115117
bool SpvToolsDisassembler = false;
@@ -842,6 +844,9 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
842844
} else if (strcmp(argv[1], "vulkan1.3") == 0) {
843845
setVulkanSpv();
844846
ClientVersion = glslang::EShTargetVulkan_1_3;
847+
} else if (strcmp(argv[1], "vulkan1.4") == 0) {
848+
setVulkanSpv();
849+
ClientVersion = glslang::EShTargetVulkan_1_4;
845850
} else if (strcmp(argv[1], "opengl") == 0) {
846851
setOpenGlSpv();
847852
ClientVersion = glslang::EShTargetOpenGL_450;
@@ -898,6 +903,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
898903
Options |= EOptionDumpVersions;
899904
} else if (lowerword == "no-link") {
900905
Options |= EOptionCompileOnly;
906+
} else if (lowerword == "error-column") {
907+
Options |= EOptionDisplayErrorColumn;
908+
} else if (lowerword == "lto") {
909+
Options |= EOptionLinkTimeOptimization;
901910
} else if (lowerword == "help") {
902911
usage();
903912
break;
@@ -1082,6 +1091,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
10821091
if ((Options & EOptionDumpReflection) && !(Options & EOptionLinkProgram))
10831092
Error("reflection requires -l for linking");
10841093

1094+
// link time optimization makes no sense unless linking
1095+
if ((Options & EOptionLinkTimeOptimization) && !(Options & EOptionLinkProgram))
1096+
Error("link time optimization requires -l for linking");
1097+
10851098
// -o or -x makes no sense if there is no target binary
10861099
if (binaryFileName && (Options & EOptionSpv) == 0)
10871100
Error("no binary generation requested (e.g., -V)");
@@ -1113,6 +1126,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
11131126
TargetLanguage = glslang::EShTargetSpv;
11141127
TargetVersion = glslang::EShTargetSpv_1_6;
11151128
break;
1129+
case glslang::EShTargetVulkan_1_4:
1130+
TargetLanguage = glslang::EShTargetSpv;
1131+
TargetVersion = glslang::EShTargetSpv_1_6;
1132+
break;
11161133
case glslang::EShTargetOpenGL_450:
11171134
TargetLanguage = glslang::EShTargetSpv;
11181135
TargetVersion = glslang::EShTargetSpv_1_0;
@@ -1164,6 +1181,10 @@ void SetMessageOptions(EShMessages& messages)
11641181
messages = (EShMessages)(messages | EShMsgEnhanced);
11651182
if (AbsolutePath)
11661183
messages = (EShMessages)(messages | EShMsgAbsolutePath);
1184+
if (Options & EOptionDisplayErrorColumn)
1185+
messages = (EShMessages)(messages | EShMsgDisplayErrorColumn);
1186+
if (Options & EOptionLinkTimeOptimization)
1187+
messages = (EShMessages)(messages | EShMsgLinkTimeOptimization);
11671188
}
11681189

11691190
//
@@ -1506,6 +1527,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
15061527

15071528
// Dump SPIR-V
15081529
if (Options & EOptionSpv) {
1530+
#ifdef ENABLE_SPIRV
15091531
CompileOrLinkFailed.fetch_or(CompileFailed);
15101532
CompileOrLinkFailed.fetch_or(LinkFailed);
15111533
if (static_cast<bool>(CompileOrLinkFailed.load()))
@@ -1565,6 +1587,9 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
15651587
}
15661588
}
15671589
}
1590+
#else
1591+
Error("This configuration of glslang does not have SPIR-V support");
1592+
#endif
15681593
}
15691594

15701595
CompileOrLinkFailed.fetch_or(CompileFailed);
@@ -1664,21 +1689,31 @@ int singleMain()
16641689
}
16651690

16661691
if (Options & EOptionDumpBareVersion) {
1667-
printf("%d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR,
1692+
int spirvGeneratorVersion = 0;
1693+
#ifdef ENABLE_SPIRV
1694+
spirvGeneratorVersion = glslang::GetSpirvGeneratorVersion();
1695+
#endif
1696+
printf("%d:%d.%d.%d%s\n", spirvGeneratorVersion, GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR,
16681697
GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR);
16691698
if (workList.empty())
16701699
return ESuccess;
16711700
} else if (Options & EOptionDumpVersions) {
1672-
printf("Glslang Version: %d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR,
1701+
int spirvGeneratorVersion = 0;
1702+
#ifdef ENABLE_SPIRV
1703+
spirvGeneratorVersion = glslang::GetSpirvGeneratorVersion();
1704+
#endif
1705+
printf("Glslang Version: %d:%d.%d.%d%s\n", spirvGeneratorVersion, GLSLANG_VERSION_MAJOR,
16731706
GLSLANG_VERSION_MINOR, GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR);
16741707
printf("ESSL Version: %s\n", glslang::GetEsslVersionString());
16751708
printf("GLSL Version: %s\n", glslang::GetGlslVersionString());
16761709
std::string spirvVersion;
1710+
#if ENABLE_SPIRV
16771711
glslang::GetSpirvVersion(spirvVersion);
1712+
#endif
16781713
printf("SPIR-V Version %s\n", spirvVersion.c_str());
16791714
printf("GLSL.std.450 Version %d, Revision %d\n", GLSLstd450Version, GLSLstd450Revision);
16801715
printf("Khronos Tool ID %d\n", glslang::GetKhronosToolId());
1681-
printf("SPIR-V Generator Version %d\n", glslang::GetSpirvGeneratorVersion());
1716+
printf("SPIR-V Generator Version %d\n", spirvGeneratorVersion);
16821717
printf("GL_KHR_vulkan_glsl version %d\n", 100);
16831718
printf("ARB_GL_gl_spirv version %d\n", 100);
16841719
if (workList.empty())
@@ -2024,6 +2059,7 @@ void usage()
20242059
" shaders compatible with DirectX\n"
20252060
" --invert-y | --iy invert position.Y output in vertex shader\n"
20262061
" --enhanced-msgs print more readable error messages (GLSL only)\n"
2062+
" --error-column display the column of the error along the line\n"
20272063
" --keep-uncalled | --ku don't eliminate uncalled functions\n"
20282064
" --nan-clamp favor non-NaN operand in min, max, and clamp\n"
20292065
" --no-storage-format | --nsf use Unknown image format\n"
@@ -2117,7 +2153,8 @@ void usage()
21172153
" initialized with the shader binary code\n"
21182154
" --no-link Only compile shader; do not link (GLSL-only)\n"
21192155
" NOTE: this option will set the export linkage\n"
2120-
" attribute on all functions\n");
2156+
" attribute on all functions\n"
2157+
" --lto perform link time optimization\n");
21212158

21222159
exit(EFailUsage);
21232160
}

src/glslang/StandAlone/Worklist.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#ifndef WORKLIST_H_INCLUDED
3636
#define WORKLIST_H_INCLUDED
3737

38-
#include "../glslang/OSDependent/osinclude.h"
3938
#include <list>
4039
#include <mutex>
4140
#include <string>

src/glslang/StandAlone/spirv-remap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ namespace {
182182
std::cout << " " << basename(name) << " [--version | -V]" << std::endl;
183183
std::cout << " " << basename(name) << " [--help | -?]" << std::endl;
184184

185-
exit(5);
185+
exit(0);
186186
}
187187

188188
// grind through each SPIR in turn

src/glslang/build_info.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
#ifndef GLSLANG_BUILD_INFO
3535
#define GLSLANG_BUILD_INFO
3636

37-
#define GLSLANG_VERSION_MAJOR 14
38-
#define GLSLANG_VERSION_MINOR 3
37+
#define GLSLANG_VERSION_MAJOR 15
38+
#define GLSLANG_VERSION_MINOR 2
3939
#define GLSLANG_VERSION_PATCH 0
4040
#define GLSLANG_VERSION_FLAVOR ""
4141

src/glslang/glslang/CInterface/glslang_c_interface.cpp

Lines changed: 79 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,19 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3030
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3131
**/
3232

33-
#include "../Include/glslang_c_interface.h"
33+
#include "glslang/glslang/Include/glslang_c_interface.h"
3434

35-
#include "../../StandAlone/DirStackFileIncluder.h"
36-
#include "../Public/ResourceLimits.h"
37-
#include "../Include/ShHandle.h"
35+
#include "glslang/StandAlone/DirStackFileIncluder.h"
36+
#include "glslang/glslang/Public/ResourceLimits.h"
37+
#include "glslang/glslang/Public/ShaderLang.h"
38+
#include "glslang/glslang/Include/ShHandle.h"
3839

39-
#include "../Include/ResourceLimits.h"
40-
#include "../MachineIndependent/Versions.h"
41-
#include "../MachineIndependent/localintermediate.h"
40+
#include "glslang/glslang/Include/BaseTypes.h"
41+
#include "glslang/glslang/Include/ResourceLimits.h"
42+
#include "glslang/glslang/Include/Types.h"
43+
#include "glslang/glslang/MachineIndependent/iomapper.h"
44+
#include "glslang/glslang/MachineIndependent/Versions.h"
45+
#include "glslang/glslang/MachineIndependent/localintermediate.h"
4246

4347
static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, "");
4448
static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, "");
@@ -54,10 +58,12 @@ static_assert(int(GLSLANG_REFLECTION_COUNT) == EShReflectionCount, "");
5458
static_assert(int(GLSLANG_PROFILE_COUNT) == EProfileCount, "");
5559
static_assert(sizeof(glslang_limits_t) == sizeof(TLimits), "");
5660
static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), "");
61+
static_assert(sizeof(glslang_version_t) == sizeof(glslang::Version), "");
5762

5863
typedef struct glslang_shader_s {
5964
glslang::TShader* shader;
6065
std::string preprocessedGLSL;
66+
std::vector<std::string> baseResourceSetBinding;
6167
} glslang_shader_t;
6268

6369
typedef struct glslang_program_s {
@@ -141,6 +147,11 @@ class CallbackIncluder : public glslang::TShader::Includer {
141147
void* context;
142148
};
143149

150+
GLSLANG_EXPORT void glslang_get_version(glslang_version_t* version)
151+
{
152+
*reinterpret_cast<glslang::Version*>(version) = glslang::GetVersion();
153+
}
154+
144155
GLSLANG_EXPORT int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
145156

146157
GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); }
@@ -205,7 +216,9 @@ static int c_shader_messages(glslang_messages_t messages)
205216
CONVERT_MSG(GLSLANG_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization);
206217
CONVERT_MSG(GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible);
207218
CONVERT_MSG(GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable);
219+
CONVERT_MSG(GLSLANG_MSG_ENHANCED, EShMsgEnhanced);
208220
CONVERT_MSG(GLSLANG_MSG_ABSOLUTE_PATH, EShMsgAbsolutePath);
221+
CONVERT_MSG(GLSLANG_MSG_DISPLAY_ERROR_COLUMN, EShMsgDisplayErrorColumn);
209222
return res;
210223
#undef CONVERT_MSG
211224
}
@@ -257,6 +270,8 @@ static glslang::EShTargetClientVersion c_shader_client_version(glslang_target_cl
257270
return glslang::EShTargetVulkan_1_2;
258271
case GLSLANG_TARGET_VULKAN_1_3:
259272
return glslang::EShTargetVulkan_1_3;
273+
case GLSLANG_TARGET_VULKAN_1_4:
274+
return glslang::EShTargetVulkan_1_4;
260275
case GLSLANG_TARGET_OPENGL_450:
261276
return glslang::EShTargetOpenGL_450;
262277
default:
@@ -311,7 +326,7 @@ static EProfile c_shader_profile(glslang_profile_t profile)
311326
GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
312327
{
313328
if (!input || !input->code) {
314-
printf("Error creating shader: null input(%p)/input->code\n", input);
329+
printf("Error creating shader: null input(%p)/input->code\n", (void*)input);
315330

316331
if (input)
317332
printf("input->code = %p\n", input->code);
@@ -368,11 +383,35 @@ GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, in
368383
shader->shader->setOverrideVersion(version);
369384
}
370385

386+
GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_set_and_binding(glslang_shader_t* shader, unsigned int set, unsigned int binding) {
387+
shader->shader->setGlobalUniformSet(set);
388+
shader->shader->setGlobalUniformBinding(binding);
389+
}
390+
391+
GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_name(glslang_shader_t* shader, const char *name) {
392+
shader->shader->setGlobalUniformBlockName(name);
393+
}
394+
395+
GLSLANG_EXPORT void glslang_shader_set_resource_set_binding(glslang_shader_t* shader, const char *const *bindings, unsigned int num_bindings) {
396+
shader->baseResourceSetBinding.clear();
397+
398+
for (unsigned int i = 0; i < num_bindings; ++i) {
399+
shader->baseResourceSetBinding.push_back(std::string(bindings[i]));
400+
}
401+
402+
shader->shader->setResourceSetBinding(shader->baseResourceSetBinding);
403+
}
404+
371405
GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
372406
{
373407
return shader->preprocessedGLSL.c_str();
374408
}
375409

410+
GLSLANG_EXPORT void glslang_shader_set_preprocessed_code(glslang_shader_t* shader, const char* code)
411+
{
412+
shader->preprocessedGLSL.assign(code);
413+
}
414+
376415
GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
377416
{
378417
DirStackFileIncluder dirStackFileIncluder;
@@ -459,6 +498,11 @@ GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program)
459498
return (int)program->program->mapIO();
460499
}
461500

501+
GLSLANG_EXPORT int glslang_program_map_io_with_resolver_and_mapper(glslang_program_t* program, glslang_resolver_t* resolver, glslang_mapper_t* mapper)
502+
{
503+
return (int)program->program->mapIO(reinterpret_cast<glslang::TDefaultGlslIoResolver*>(resolver), reinterpret_cast<glslang::TGlslIoMapper*>(mapper));
504+
}
505+
462506
GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program)
463507
{
464508
return program->program->getInfoLog();
@@ -468,3 +512,30 @@ GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t*
468512
{
469513
return program->program->getInfoDebugLog();
470514
}
515+
516+
GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create()
517+
{
518+
return reinterpret_cast<glslang_mapper_t*>(new glslang::TGlslIoMapper());
519+
}
520+
521+
GLSLANG_EXPORT void glslang_glsl_mapper_delete(glslang_mapper_t* mapper)
522+
{
523+
if (!mapper)
524+
return;
525+
526+
delete reinterpret_cast<glslang::TGlslIoMapper* >(mapper);
527+
}
528+
529+
GLSLANG_EXPORT glslang_resolver_t* glslang_glsl_resolver_create(glslang_program_t* program, glslang_stage_t stage)
530+
{
531+
glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
532+
return reinterpret_cast<glslang_resolver_t*>(new glslang::TDefaultGlslIoResolver(reinterpret_cast<const glslang::TIntermediate&>(*intermediate)));
533+
}
534+
535+
GLSLANG_EXPORT void glslang_glsl_resolver_delete(glslang_resolver_t* resolver)
536+
{
537+
if (!resolver)
538+
return;
539+
540+
delete reinterpret_cast<glslang::TDefaultGlslIoResolver* >(resolver);
541+
}

0 commit comments

Comments
 (0)