CInterface: added _BIT suffix to glslang_messages_t and glslang_reflection_options_t...
authorSergey Kosarevsky <sk@linderdaum.com>
Tue, 24 Dec 2019 21:05:41 +0000 (00:05 +0300)
committerSergey Kosarevsky <sk@linderdaum.com>
Tue, 24 Dec 2019 21:05:41 +0000 (00:05 +0300)
glslang/CInterface/glslang_c_interface.cpp
glslang/Include/glslang_c_interface.h
glslang/Include/glslang_c_shader_types.h [moved from glslang/Include/c_shader_types.h with 80% similarity]

index 276c194..302efad 100644 (file)
@@ -1,4 +1,8 @@
 /**
+       This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
 BSD 2-Clause License
 
 Copyright (c) 2019, Viktor Latypov
@@ -26,7 +30,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **/
 
-#include "glslang_c_interface.h"
+#include "glslang/Include/glslang_c_interface.h"
 
 #include "SPIRV/GlslangToSpv.h"
 #include "SPIRV/Logger.h"
@@ -185,43 +189,31 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
     return EShLangCount;
 }
 
-static EShMessages c_shader_messages(glslang_messages_t messages)
+static int c_shader_messages(glslang_messages_t messages)
 {
-    switch (messages) {
-    case SH_MSG_RELAXED_ERRORS:
-        return EShMsgRelaxedErrors;
-    case SH_MSG_SUPPRESS_WARNINGS:
-        return EShMsgSuppressWarnings;
-    case SH_MSG_AST:
-        return EShMsgAST;
-    case SH_MSG_SPV_RULES:
-        return EShMsgSpvRules;
-    case SH_MSG_VULKAN_RULES:
-        return EShMsgVulkanRules;
-    case SH_MSG_ONLY_PREPROCESSOR:
-        return EShMsgOnlyPreprocessor;
-    case SH_MSG_READ_HLSL:
-        return EShMsgReadHlsl;
-    case SH_MSG_CASCADING_ERRORS:
-        return EShMsgCascadingErrors;
-    case SH_MSG_KEEP_UNCALLED:
-        return EShMsgKeepUncalled;
-    case SH_MSG_HLSL_OFFSETS:
-        return EShMsgHlslOffsets;
-    case SH_MSG_DEBUG_INFO:
-        return EShMsgDebugInfo;
-    case SH_MSG_HLSL_ENABLE_16BIT_TYPES:
-        return EShMsgHlslEnable16BitTypes;
-    case SH_MSG_HLSL_LEGALIZATION:
-        return EShMsgHlslLegalization;
-    case SH_MSG_HLSL_DX9_COMPATIBLE:
-        return EShMsgHlslDX9Compatible;
-    case SH_MSG_BUILTIN_SYMBOL_TABLE:
-        return EShMsgBuiltinSymbolTable;
-    default:
-        break;
-    }
-    return EShMsgDefault;
+#define CONVERT_MSG(in, out)                                                                                           \
+    if ((messages & in) == in)                                                                                         \
+        res |= out;
+
+    int res = 0;
+
+    CONVERT_MSG(SH_MSG_RELAXED_ERRORS_BIT, EShMsgRelaxedErrors);
+    CONVERT_MSG(SH_MSG_SUPPRESS_WARNINGS_BIT, EShMsgSuppressWarnings);
+    CONVERT_MSG(SH_MSG_AST_BIT, EShMsgAST);
+    CONVERT_MSG(SH_MSG_SPV_RULES_BIT, EShMsgSpvRules);
+    CONVERT_MSG(SH_MSG_VULKAN_RULES_BIT, EShMsgVulkanRules);
+    CONVERT_MSG(SH_MSG_ONLY_PREPROCESSOR_BIT, EShMsgOnlyPreprocessor);
+    CONVERT_MSG(SH_MSG_READ_HLSL_BIT, EShMsgReadHlsl);
+    CONVERT_MSG(SH_MSG_CASCADING_ERRORS_BIT, EShMsgCascadingErrors);
+    CONVERT_MSG(SH_MSG_KEEP_UNCALLED_BIT, EShMsgKeepUncalled);
+    CONVERT_MSG(SH_MSG_HLSL_OFFSETS_BIT, EShMsgHlslOffsets);
+    CONVERT_MSG(SH_MSG_DEBUG_INFO_BIT, EShMsgDebugInfo);
+    CONVERT_MSG(SH_MSG_HLSL_ENABLE_16BIT_TYPES_BIT, EShMsgHlslEnable16BitTypes);
+    CONVERT_MSG(SH_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization);
+    CONVERT_MSG(SH_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible);
+    CONVERT_MSG(SH_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable);
+    return res;
+#undef CONVERT_MSG
 }
 
 static glslang::EShTargetLanguageVersion
@@ -314,7 +306,7 @@ static EProfile c_shader_profile(glslang_profile_t profile)
     return EProfile();
 }
 
-glslang_shader_t* glslang_shader_create(glslang_input_t* input)
+glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
 {
     if (!input || !input->code) {
         printf("Error creating shader: null input(%p)/input->code\n", input);
@@ -340,18 +332,18 @@ glslang_shader_t* glslang_shader_create(glslang_input_t* input)
 
 const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) { return shader->preprocessedGLSL.c_str(); }
 
-int glslang_shader_preprocess(glslang_shader_t* shader, glslang_input_t* i)
+int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* i)
 {
     DirStackFileIncluder Includer;
     /* TODO: use custom callbacks if they are available in 'i->callbacks' */
     return shader->shader->preprocess(
         /* No user-defined resources limit */
         &glslang::DefaultTBuiltInResource, i->default_version, c_shader_profile(i->default_profile),
-        (bool)i->force_default_version_and_profile, (bool)i->forward_compatible, c_shader_messages(i->messages),
-        &shader->preprocessedGLSL, Includer);
+        (bool)i->force_default_version_and_profile, (bool)i->forward_compatible,
+        (EShMessages)c_shader_messages(i->messages), &shader->preprocessedGLSL, Includer);
 }
 
-int glslang_shader_parse(glslang_shader_t* shader, glslang_input_t* input)
+int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input)
 {
     const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
     shader->shader->setStrings(&preprocessedCStr, 1);
@@ -359,7 +351,7 @@ int glslang_shader_parse(glslang_shader_t* shader, glslang_input_t* input)
     return shader->shader->parse(
         /* No user-defined resource limits for now */
         &glslang::DefaultTBuiltInResource, input->default_version, (bool)input->forward_compatible,
-        c_shader_messages(input->messages));
+        (EShMessages)c_shader_messages(input->messages));
 }
 
 const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }
index 69515ae..2521fb2 100644 (file)
@@ -1,4 +1,8 @@
 /**
+       This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
 BSD 2-Clause License
 
 Copyright (c) 2019, Viktor Latypov
@@ -31,7 +35,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <stdlib.h>
 
-#include "c_shader_types.h"
+#include "glslang_c_shader_types.h"
 
 typedef struct glslang_shader_s glslang_shader_t;
 typedef struct glslang_program_s glslang_program_t;
@@ -88,10 +92,10 @@ extern "C" {
 int glslang_initialize_process();
 void glslang_finalize_process();
 
-glslang_shader_t* glslang_shader_create(glslang_input_t* input);
+glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
 void glslang_shader_delete(glslang_shader_t* shader);
-int glslang_shader_preprocess(glslang_shader_t* shader, glslang_input_t* input);
-int glslang_shader_parse(glslang_shader_t* shader, glslang_input_t* input);
+int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
+int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
 const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
 const char* glslang_shader_get_info_log(glslang_shader_t* shader);
 const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
@@ -99,7 +103,7 @@ const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
 glslang_program_t* glslang_program_create();
 void glslang_program_delete(glslang_program_t* program);
 void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
-int glslang_program_link(glslang_program_t* program, int messages);
+int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
 void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
 size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
 void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
similarity index 80%
rename from glslang/Include/c_shader_types.h
rename to glslang/Include/glslang_c_shader_types.h
index ec768ff..dea9cb0 100644 (file)
@@ -1,4 +1,8 @@
 /**
+       This code is based on the glslang_c_interface implementation by Viktor Latypov
+**/
+
+/**
 BSD 2-Clause License
 
 Copyright (c) 2019, Viktor Latypov
@@ -122,33 +126,33 @@ typedef enum {
 
 /* EShMessages counterpart */
 typedef enum {
-    SH_MSG_DEFAULT = 0,
-    SH_MSG_RELAXED_ERRORS = (1 << 0),
-    SH_MSG_SUPPRESS_WARNINGS = (1 << 1),
-    SH_MSG_AST = (1 << 2),
-    SH_MSG_SPV_RULES = (1 << 3),
-    SH_MSG_VULKAN_RULES = (1 << 4),
-    SH_MSG_ONLY_PREPROCESSOR = (1 << 5),
-    SH_MSG_READ_HLSL = (1 << 6),
-    SH_MSG_CASCADING_ERRORS = (1 << 7),
-    SH_MSG_KEEP_UNCALLED = (1 << 8),
-    SH_MSG_HLSL_OFFSETS = (1 << 9),
-    SH_MSG_DEBUG_INFO = (1 << 10),
-    SH_MSG_HLSL_ENABLE_16BIT_TYPES = (1 << 11),
-    SH_MSG_HLSL_LEGALIZATION = (1 << 12),
-    SH_MSG_HLSL_DX9_COMPATIBLE = (1 << 13),
-    SH_MSG_BUILTIN_SYMBOL_TABLE = (1 << 14),
+    SH_MSG_DEFAULT_BIT = 0,
+    SH_MSG_RELAXED_ERRORS_BIT = (1 << 0),
+    SH_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1),
+    SH_MSG_AST_BIT = (1 << 2),
+    SH_MSG_SPV_RULES_BIT = (1 << 3),
+    SH_MSG_VULKAN_RULES_BIT = (1 << 4),
+    SH_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5),
+    SH_MSG_READ_HLSL_BIT = (1 << 6),
+    SH_MSG_CASCADING_ERRORS_BIT = (1 << 7),
+    SH_MSG_KEEP_UNCALLED_BIT = (1 << 8),
+    SH_MSG_HLSL_OFFSETS_BIT = (1 << 9),
+    SH_MSG_DEBUG_INFO_BIT = (1 << 10),
+    SH_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 << 11),
+    SH_MSG_HLSL_LEGALIZATION_BIT = (1 << 12),
+    SH_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 << 13),
+    SH_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 << 14),
 } glslang_messages_t;
 
 /* EShReflectionOptions counterpart */
 typedef enum {
-    SH_REFLECTION_DEFAULT = 0,
-    SH_REFLECTION_STRICT_ARRAY_SUFFIX = (1 << 0),
-    SH_REFLECTION_BASIC_ARRAY_SUFFIX = (1 << 1),
-    SH_REFLECTION_INTERMEDIATE_IOO = (1 << 2),
-    SH_REFLECTION_SEPARATE_BUFFERS = (1 << 3),
-    SH_REFLECTION_ALL_BLOCK_VARIABLES = (1 << 4),
-    SH_REFLECTION_UNWRAP_IO_BLOCKS = (1 << 5),
+    SH_REFLECTION_DEFAULT_BIT = 0,
+    SH_REFLECTION_STRICT_ARRAY_SUFFIX_BIT = (1 << 0),
+    SH_REFLECTION_BASIC_ARRAY_SUFFIX_BIT = (1 << 1),
+    SH_REFLECTION_INTERMEDIATE_IOO_BIT = (1 << 2),
+    SH_REFLECTION_SEPARATE_BUFFERS_BIT = (1 << 3),
+    SH_REFLECTION_ALL_BLOCK_VARIABLES_BIT = (1 << 4),
+    SH_REFLECTION_UNWRAP_IO_BLOCKS_BIT = (1 << 5),
 } glslang_reflection_options_t;
 
 /* EProfile counterpart (from Versions.h) */