From e9ddba8fd8d5042ade114350d4542c7f2e0215f5 Mon Sep 17 00:00:00 2001 From: Sergey Kosarevsky Date: Wed, 25 Dec 2019 00:05:41 +0300 Subject: [PATCH] CInterface: added _BIT suffix to glslang_messages_t and glslang_reflection_options_t, fixed const-correctness --- glslang/CInterface/glslang_c_interface.cpp | 78 ++++++++++------------ glslang/Include/glslang_c_interface.h | 14 ++-- .../{c_shader_types.h => glslang_c_shader_types.h} | 50 +++++++------- 3 files changed, 71 insertions(+), 71 deletions(-) rename glslang/Include/{c_shader_types.h => glslang_c_shader_types.h} (80%) diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 276c194..302efad 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -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(); } diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 69515ae..2521fb2 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -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 -#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*); diff --git a/glslang/Include/c_shader_types.h b/glslang/Include/glslang_c_shader_types.h similarity index 80% rename from glslang/Include/c_shader_types.h rename to glslang/Include/glslang_c_shader_types.h index ec768ff..dea9cb0 100644 --- a/glslang/Include/c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -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) */ -- 2.7.4