CInterface: added _BIT suffix to glslang_messages_t and glslang_reflection_options_t, fixed const-correctness

This commit is contained in:
Sergey Kosarevsky 2019-12-25 00:05:41 +03:00
parent ca593a98f9
commit e9ddba8fd8
3 changed files with 71 additions and 71 deletions

View File

@ -1,3 +1,7 @@
/**
This code is based on the glslang_c_interface implementation by Viktor Latypov
**/
/** /**
BSD 2-Clause License BSD 2-Clause License
@ -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. 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/GlslangToSpv.h"
#include "SPIRV/Logger.h" #include "SPIRV/Logger.h"
@ -185,43 +189,31 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
return EShLangCount; return EShLangCount;
} }
static EShMessages c_shader_messages(glslang_messages_t messages) static int c_shader_messages(glslang_messages_t messages)
{ {
switch (messages) { #define CONVERT_MSG(in, out) \
case SH_MSG_RELAXED_ERRORS: if ((messages & in) == in) \
return EShMsgRelaxedErrors; res |= out;
case SH_MSG_SUPPRESS_WARNINGS:
return EShMsgSuppressWarnings; int res = 0;
case SH_MSG_AST:
return EShMsgAST; CONVERT_MSG(SH_MSG_RELAXED_ERRORS_BIT, EShMsgRelaxedErrors);
case SH_MSG_SPV_RULES: CONVERT_MSG(SH_MSG_SUPPRESS_WARNINGS_BIT, EShMsgSuppressWarnings);
return EShMsgSpvRules; CONVERT_MSG(SH_MSG_AST_BIT, EShMsgAST);
case SH_MSG_VULKAN_RULES: CONVERT_MSG(SH_MSG_SPV_RULES_BIT, EShMsgSpvRules);
return EShMsgVulkanRules; CONVERT_MSG(SH_MSG_VULKAN_RULES_BIT, EShMsgVulkanRules);
case SH_MSG_ONLY_PREPROCESSOR: CONVERT_MSG(SH_MSG_ONLY_PREPROCESSOR_BIT, EShMsgOnlyPreprocessor);
return EShMsgOnlyPreprocessor; CONVERT_MSG(SH_MSG_READ_HLSL_BIT, EShMsgReadHlsl);
case SH_MSG_READ_HLSL: CONVERT_MSG(SH_MSG_CASCADING_ERRORS_BIT, EShMsgCascadingErrors);
return EShMsgReadHlsl; CONVERT_MSG(SH_MSG_KEEP_UNCALLED_BIT, EShMsgKeepUncalled);
case SH_MSG_CASCADING_ERRORS: CONVERT_MSG(SH_MSG_HLSL_OFFSETS_BIT, EShMsgHlslOffsets);
return EShMsgCascadingErrors; CONVERT_MSG(SH_MSG_DEBUG_INFO_BIT, EShMsgDebugInfo);
case SH_MSG_KEEP_UNCALLED: CONVERT_MSG(SH_MSG_HLSL_ENABLE_16BIT_TYPES_BIT, EShMsgHlslEnable16BitTypes);
return EShMsgKeepUncalled; CONVERT_MSG(SH_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization);
case SH_MSG_HLSL_OFFSETS: CONVERT_MSG(SH_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible);
return EShMsgHlslOffsets; CONVERT_MSG(SH_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable);
case SH_MSG_DEBUG_INFO: return res;
return EShMsgDebugInfo; #undef CONVERT_MSG
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;
} }
static glslang::EShTargetLanguageVersion static glslang::EShTargetLanguageVersion
@ -314,7 +306,7 @@ static EProfile c_shader_profile(glslang_profile_t profile)
return EProfile(); 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) { if (!input || !input->code) {
printf("Error creating shader: null input(%p)/input->code\n", input); 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(); } 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; DirStackFileIncluder Includer;
/* TODO: use custom callbacks if they are available in 'i->callbacks' */ /* TODO: use custom callbacks if they are available in 'i->callbacks' */
return shader->shader->preprocess( return shader->shader->preprocess(
/* No user-defined resources limit */ /* No user-defined resources limit */
&glslang::DefaultTBuiltInResource, i->default_version, c_shader_profile(i->default_profile), &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), (bool)i->force_default_version_and_profile, (bool)i->forward_compatible,
&shader->preprocessedGLSL, Includer); (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(); const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
shader->shader->setStrings(&preprocessedCStr, 1); 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( return shader->shader->parse(
/* No user-defined resource limits for now */ /* No user-defined resource limits for now */
&glslang::DefaultTBuiltInResource, input->default_version, (bool)input->forward_compatible, &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(); } const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); }

View File

@ -1,3 +1,7 @@
/**
This code is based on the glslang_c_interface implementation by Viktor Latypov
**/
/** /**
BSD 2-Clause License BSD 2-Clause License
@ -31,7 +35,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <stdlib.h> #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_shader_s glslang_shader_t;
typedef struct glslang_program_s glslang_program_t; typedef struct glslang_program_s glslang_program_t;
@ -88,10 +92,10 @@ extern "C" {
int glslang_initialize_process(); int glslang_initialize_process();
void glslang_finalize_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); void glslang_shader_delete(glslang_shader_t* shader);
int glslang_shader_preprocess(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, 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_preprocessed_code(glslang_shader_t* shader);
const char* glslang_shader_get_info_log(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); 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(); glslang_program_t* glslang_program_create();
void glslang_program_delete(glslang_program_t* program); void glslang_program_delete(glslang_program_t* program);
void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); 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); void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
size_t glslang_program_SPIRV_get_size(glslang_program_t* program); size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);

View File

@ -1,4 +1,8 @@
/** /**
This code is based on the glslang_c_interface implementation by Viktor Latypov
**/
/**
BSD 2-Clause License BSD 2-Clause License
Copyright (c) 2019, Viktor Latypov Copyright (c) 2019, Viktor Latypov
@ -122,33 +126,33 @@ typedef enum {
/* EShMessages counterpart */ /* EShMessages counterpart */
typedef enum { typedef enum {
SH_MSG_DEFAULT = 0, SH_MSG_DEFAULT_BIT = 0,
SH_MSG_RELAXED_ERRORS = (1 << 0), SH_MSG_RELAXED_ERRORS_BIT = (1 << 0),
SH_MSG_SUPPRESS_WARNINGS = (1 << 1), SH_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1),
SH_MSG_AST = (1 << 2), SH_MSG_AST_BIT = (1 << 2),
SH_MSG_SPV_RULES = (1 << 3), SH_MSG_SPV_RULES_BIT = (1 << 3),
SH_MSG_VULKAN_RULES = (1 << 4), SH_MSG_VULKAN_RULES_BIT = (1 << 4),
SH_MSG_ONLY_PREPROCESSOR = (1 << 5), SH_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5),
SH_MSG_READ_HLSL = (1 << 6), SH_MSG_READ_HLSL_BIT = (1 << 6),
SH_MSG_CASCADING_ERRORS = (1 << 7), SH_MSG_CASCADING_ERRORS_BIT = (1 << 7),
SH_MSG_KEEP_UNCALLED = (1 << 8), SH_MSG_KEEP_UNCALLED_BIT = (1 << 8),
SH_MSG_HLSL_OFFSETS = (1 << 9), SH_MSG_HLSL_OFFSETS_BIT = (1 << 9),
SH_MSG_DEBUG_INFO = (1 << 10), SH_MSG_DEBUG_INFO_BIT = (1 << 10),
SH_MSG_HLSL_ENABLE_16BIT_TYPES = (1 << 11), SH_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 << 11),
SH_MSG_HLSL_LEGALIZATION = (1 << 12), SH_MSG_HLSL_LEGALIZATION_BIT = (1 << 12),
SH_MSG_HLSL_DX9_COMPATIBLE = (1 << 13), SH_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 << 13),
SH_MSG_BUILTIN_SYMBOL_TABLE = (1 << 14), SH_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 << 14),
} glslang_messages_t; } glslang_messages_t;
/* EShReflectionOptions counterpart */ /* EShReflectionOptions counterpart */
typedef enum { typedef enum {
SH_REFLECTION_DEFAULT = 0, SH_REFLECTION_DEFAULT_BIT = 0,
SH_REFLECTION_STRICT_ARRAY_SUFFIX = (1 << 0), SH_REFLECTION_STRICT_ARRAY_SUFFIX_BIT = (1 << 0),
SH_REFLECTION_BASIC_ARRAY_SUFFIX = (1 << 1), SH_REFLECTION_BASIC_ARRAY_SUFFIX_BIT = (1 << 1),
SH_REFLECTION_INTERMEDIATE_IOO = (1 << 2), SH_REFLECTION_INTERMEDIATE_IOO_BIT = (1 << 2),
SH_REFLECTION_SEPARATE_BUFFERS = (1 << 3), SH_REFLECTION_SEPARATE_BUFFERS_BIT = (1 << 3),
SH_REFLECTION_ALL_BLOCK_VARIABLES = (1 << 4), SH_REFLECTION_ALL_BLOCK_VARIABLES_BIT = (1 << 4),
SH_REFLECTION_UNWRAP_IO_BLOCKS = (1 << 5), SH_REFLECTION_UNWRAP_IO_BLOCKS_BIT = (1 << 5),
} glslang_reflection_options_t; } glslang_reflection_options_t;
/* EProfile counterpart (from Versions.h) */ /* EProfile counterpart (from Versions.h) */