GLSLANG_EXPORT for C APIs.

Fixes FFI breakage introduced in #2283
This commit is contained in:
Ez Diy 2020-08-10 22:26:41 +02:00
parent b60e067b43
commit 1fde85ab96
3 changed files with 56 additions and 40 deletions

View File

@ -79,7 +79,7 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
return EShLangCount; 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; spv::SpvBuildLogger logger;
glslang::SpvOptions spvOptions; glslang::SpvOptions spvOptions;
@ -92,19 +92,19 @@ void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t
program->loggerMessages = logger.getAllMessages(); 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)); 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(); 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(); return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str();
} }

View File

@ -160,9 +160,9 @@ private:
void* context; void* context;
}; };
int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); } GLSLANG_EXPORT int glslang_initialize_process() { return static_cast<int>(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) static EShLanguage c_shader_stage(glslang_stage_t stage)
{ {
@ -320,7 +320,7 @@ static EProfile c_shader_profile(glslang_profile_t profile)
return EProfile(); 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) { 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);
@ -344,12 +344,12 @@ glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
return shader; 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(); 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; DirStackFileIncluder Includer;
/* TODO: use custom callbacks if they are available in 'i->callbacks' */ /* 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(); const char* preprocessedCStr = shader->preprocessedGLSL.c_str();
shader->shader->setStrings(&preprocessedCStr, 1); 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) if (!shader)
return; return;
@ -391,14 +391,14 @@ void glslang_shader_delete(glslang_shader_t* shader)
delete (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(); glslang_program_t* p = new glslang_program_t();
p->program = new glslang::TProgram(); p->program = new glslang::TProgram();
return p; return p;
} }
void glslang_program_delete(glslang_program_t* program) GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program)
{ {
if (!program) if (!program)
return; return;
@ -407,22 +407,22 @@ void glslang_program_delete(glslang_program_t* program)
delete (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); 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); 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(); 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(); return program->program->getInfoDebugLog();
} }

View File

@ -203,28 +203,44 @@ typedef struct glsl_include_callbacks_s {
extern "C" { extern "C" {
#endif #endif
int glslang_initialize_process(); #ifdef GLSLANG_IS_SHARED_LIBRARY
void glslang_finalize_process(); #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
glslang_shader_t* glslang_shader_create(const glslang_input_t* input); #ifndef GLSLANG_EXPORT
void glslang_shader_delete(glslang_shader_t* shader); #define GLSLANG_EXPORT
int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); #endif
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(); GLSLANG_EXPORT int glslang_initialize_process();
void glslang_program_delete(glslang_program_t* program); GLSLANG_EXPORT void glslang_finalize_process();
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 GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader);
size_t glslang_program_SPIRV_get_size(glslang_program_t* program); GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
const char* glslang_program_SPIRV_get_messages(glslang_program_t* program); GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader);
const char* glslang_program_get_info_log(glslang_program_t* program); GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
const char* glslang_program_get_info_debug_log(glslang_program_t* program);
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 #ifdef __cplusplus
} }