From 1fde85ab96a55fd03d3dd36149cba1c3d8d2e7fd Mon Sep 17 00:00:00 2001 From: Ez Diy Date: Mon, 10 Aug 2020 22:26:41 +0200 Subject: [PATCH] GLSLANG_EXPORT for C APIs. Fixes FFI breakage introduced in #2283 --- SPIRV/CInterface/spirv_c_interface.cpp | 10 ++--- glslang/CInterface/glslang_c_interface.cpp | 30 +++++++-------- glslang/Include/glslang_c_interface.h | 60 +++++++++++++++++++----------- 3 files changed, 58 insertions(+), 42 deletions(-) diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp index c88b808..a0790f4 100644 --- a/SPIRV/CInterface/spirv_c_interface.cpp +++ b/SPIRV/CInterface/spirv_c_interface.cpp @@ -79,7 +79,7 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) return EShLangCount; } -void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage) +GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage) { spv::SpvBuildLogger logger; glslang::SpvOptions spvOptions; @@ -92,19 +92,19 @@ void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t program->loggerMessages = logger.getAllMessages(); } -size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); } +GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); } -void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out) +GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out) { memcpy(out, program->spirv.data(), program->spirv.size() * sizeof(unsigned int)); } -unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program) +GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program) { return program->spirv.data(); } -const char* glslang_program_SPIRV_get_messages(glslang_program_t* program) +GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program) { return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str(); } diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 54283e6..2e04f53 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -160,9 +160,9 @@ private: void* context; }; -int glslang_initialize_process() { return static_cast(glslang::InitializeProcess()); } +GLSLANG_EXPORT int glslang_initialize_process() { return static_cast(glslang::InitializeProcess()); } -void glslang_finalize_process() { glslang::FinalizeProcess(); } +GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); } static EShLanguage c_shader_stage(glslang_stage_t stage) { @@ -320,7 +320,7 @@ static EProfile c_shader_profile(glslang_profile_t profile) return EProfile(); } -glslang_shader_t* glslang_shader_create(const glslang_input_t* input) +GLSLANG_EXPORT 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); @@ -344,12 +344,12 @@ glslang_shader_t* glslang_shader_create(const glslang_input_t* input) return shader; } -const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) +GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) { return shader->preprocessedGLSL.c_str(); } -int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input) +GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input) { DirStackFileIncluder Includer; /* TODO: use custom callbacks if they are available in 'i->callbacks' */ @@ -365,7 +365,7 @@ int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* i ); } -int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input) +GLSLANG_EXPORT 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); @@ -378,11 +378,11 @@ int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input) ); } -const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); } +GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); } -const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); } +GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); } -void glslang_shader_delete(glslang_shader_t* shader) +GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader) { if (!shader) return; @@ -391,14 +391,14 @@ void glslang_shader_delete(glslang_shader_t* shader) delete (shader); } -glslang_program_t* glslang_program_create() +GLSLANG_EXPORT glslang_program_t* glslang_program_create() { glslang_program_t* p = new glslang_program_t(); p->program = new glslang::TProgram(); return p; } -void glslang_program_delete(glslang_program_t* program) +GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program) { if (!program) return; @@ -407,22 +407,22 @@ void glslang_program_delete(glslang_program_t* program) delete (program); } -void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader) +GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader) { program->program->addShader(shader->shader); } -int glslang_program_link(glslang_program_t* program, int messages) +GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages) { return (int)program->program->link((EShMessages)messages); } -const char* glslang_program_get_info_log(glslang_program_t* program) +GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program) { return program->program->getInfoLog(); } -const char* glslang_program_get_info_debug_log(glslang_program_t* program) +GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program) { return program->program->getInfoDebugLog(); } diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 50e95b7..4b32e2b 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -203,28 +203,44 @@ typedef struct glsl_include_callbacks_s { extern "C" { #endif -int glslang_initialize_process(); -void glslang_finalize_process(); - -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, 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); - -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); // 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*); -unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); -const char* glslang_program_SPIRV_get_messages(glslang_program_t* program); -const char* glslang_program_get_info_log(glslang_program_t* program); -const char* glslang_program_get_info_debug_log(glslang_program_t* program); +#ifdef GLSLANG_IS_SHARED_LIBRARY + #ifdef _WIN32 + #ifdef GLSLANG_EXPORTING + #define GLSLANG_EXPORT __declspec(dllexport) + #else + #define GLSLANG_EXPORT __declspec(dllimport) + #endif + #elif __GNUC__ >= 4 + #define GLSLANG_EXPORT __attribute__((visibility("default"))) + #endif +#endif // GLSLANG_IS_SHARED_LIBRARY + +#ifndef GLSLANG_EXPORT +#define GLSLANG_EXPORT +#endif + +GLSLANG_EXPORT int glslang_initialize_process(); +GLSLANG_EXPORT void glslang_finalize_process(); + +GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input); +GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader); +GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); +GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input); +GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); +GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader); +GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader); + +GLSLANG_EXPORT glslang_program_t* glslang_program_create(); +GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program); +GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); +GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t +GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); +GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program); +GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); +GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); +GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program); +GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program); +GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program); #ifdef __cplusplus } -- 2.7.4