Merge pull request #2962 from James2022-rgb/feature/c_interface_opsource_support
Add OpSource support to the C interface.
This commit is contained in:
		
						commit
						bffcf209cb
					
				| @ -36,6 +36,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||||
| #include "SPIRV/Logger.h" | #include "SPIRV/Logger.h" | ||||||
| #include "SPIRV/SpvTools.h" | #include "SPIRV/SpvTools.h" | ||||||
| 
 | 
 | ||||||
|  | static_assert(sizeof(glslang_spv_options_t) == sizeof(glslang::SpvOptions), ""); | ||||||
|  | 
 | ||||||
| typedef struct glslang_program_s { | typedef struct glslang_program_s { | ||||||
|     glslang::TProgram* program; |     glslang::TProgram* program; | ||||||
|     std::vector<unsigned int> spirv; |     std::vector<unsigned int> spirv; | ||||||
| @ -81,13 +83,23 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) | |||||||
| 
 | 
 | ||||||
| GLSLANG_EXPORT 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) | ||||||
| { | { | ||||||
|  |     glslang_spv_options_t spv_options; | ||||||
|  |     spv_options.generate_debug_info = false; | ||||||
|  |     spv_options.strip_debug_info = false; | ||||||
|  |     spv_options.disable_optimizer = true; | ||||||
|  |     spv_options.optimize_size = false; | ||||||
|  |     spv_options.disassemble = false; | ||||||
|  |     spv_options.validate = true; | ||||||
|  | 
 | ||||||
|  |     glslang_program_SPIRV_generate_with_options(program, stage, &spv_options); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options) { | ||||||
|     spv::SpvBuildLogger logger; |     spv::SpvBuildLogger logger; | ||||||
|     glslang::SpvOptions spvOptions; |  | ||||||
|     spvOptions.validate = true; |  | ||||||
| 
 | 
 | ||||||
|     const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); |     const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); | ||||||
| 
 | 
 | ||||||
|     glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions); |     glslang::GlslangToSpv(*intermediate, program->spirv, &logger, reinterpret_cast<glslang::SpvOptions*>(spv_options)); | ||||||
| 
 | 
 | ||||||
|     program->loggerMessages = logger.getAllMessages(); |     program->loggerMessages = logger.getAllMessages(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||||
| 
 | 
 | ||||||
| #include "glslang/Include/ResourceLimits.h" | #include "glslang/Include/ResourceLimits.h" | ||||||
| #include "glslang/MachineIndependent/Versions.h" | #include "glslang/MachineIndependent/Versions.h" | ||||||
|  | #include "glslang/MachineIndependent/localintermediate.h" | ||||||
| 
 | 
 | ||||||
| static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, ""); | static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, ""); | ||||||
| static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, ""); | static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, ""); | ||||||
| @ -455,6 +456,16 @@ 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); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len) { | ||||||
|  |     glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); | ||||||
|  |     intermediate->addSourceText(text, len); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file) { | ||||||
|  |     glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); | ||||||
|  |     intermediate->setSourceFile(file); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program) | GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program) | ||||||
| { | { | ||||||
|     return (int)program->program->mapIO(); |     return (int)program->program->mapIO(); | ||||||
|  | |||||||
| @ -199,6 +199,16 @@ typedef struct glsl_include_callbacks_s { | |||||||
|     glsl_free_include_result_func free_include_result; |     glsl_free_include_result_func free_include_result; | ||||||
| } glsl_include_callbacks_t; | } glsl_include_callbacks_t; | ||||||
| 
 | 
 | ||||||
|  | /* SpvOptions counterpart */ | ||||||
|  | typedef struct glslang_spv_options_s { | ||||||
|  |     bool generate_debug_info; | ||||||
|  |     bool strip_debug_info; | ||||||
|  |     bool disable_optimizer; | ||||||
|  |     bool optimize_size; | ||||||
|  |     bool disassemble; | ||||||
|  |     bool validate; | ||||||
|  | } glslang_spv_options_t; | ||||||
|  | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
| @ -238,8 +248,11 @@ GLSLANG_EXPORT glslang_program_t* glslang_program_create(); | |||||||
| GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program); | 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 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 int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
 | ||||||
|  | GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len); | ||||||
|  | GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file); | ||||||
| GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program); | GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program); | ||||||
| GLSLANG_EXPORT 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); | ||||||
|  | GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options); | ||||||
| GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program); | 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 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 unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Greg Fischer
						Greg Fischer