Support for automap options and resource binding shift (#2834)
* Support for automap options - Added glslang_shader_options_t with enums for auto map bindings and auto map locations. - Added options param to glslang_shader_parse. - Modified glslang_shader_parse to call appropriate auto map function if auto map bits are set. * Refactored auto map for C interface - Added glslang_shader_set_options to independently set options instead of being a param on an existing function. - Added glslang_program_map_io to call mapIO so auto map location actually works. * Added support for shifting resource bindings - Added resource binding shift functions to match C++ interface * Uncommented preprocessor call that was commented out for debugging
This commit is contained in:
		
							parent
							
								
									0bdfc73e9c
								
							
						
					
					
						commit
						febbeb4f83
					
				| @ -346,6 +346,29 @@ GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* in | |||||||
|     return shader; |     return shader; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base) | ||||||
|  | { | ||||||
|  |     const glslang::TResourceType res_type = glslang::TResourceType(res); | ||||||
|  |     shader->shader->setShiftBinding(res_type, base); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set) | ||||||
|  | { | ||||||
|  |     const glslang::TResourceType res_type = glslang::TResourceType(res); | ||||||
|  |     shader->shader->setShiftBindingForSet(res_type, base, set); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options) | ||||||
|  | { | ||||||
|  |     if (options & GLSLANG_SHADER_AUTO_MAP_BINDINGS) { | ||||||
|  |         shader->shader->setAutoMapBindings(true); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (options & GLSLANG_SHADER_AUTO_MAP_LOCATIONS) { | ||||||
|  |         shader->shader->setAutoMapLocations(true); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| GLSLANG_EXPORT 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(); | ||||||
| @ -419,6 +442,11 @@ 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 int glslang_program_map_io(glslang_program_t* program) | ||||||
|  | { | ||||||
|  |     return (int)program->program->mapIO(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| GLSLANG_EXPORT 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(); | ||||||
|  | |||||||
| @ -224,6 +224,9 @@ GLSLANG_EXPORT void glslang_finalize_process(); | |||||||
| 
 | 
 | ||||||
| GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input); | 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 void glslang_shader_delete(glslang_shader_t* shader); | ||||||
|  | GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base); | ||||||
|  | GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set); | ||||||
|  | GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options); // glslang_shader_options_t
 | ||||||
| GLSLANG_EXPORT 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); | ||||||
| GLSLANG_EXPORT 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); | ||||||
| GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); | GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); | ||||||
| @ -234,6 +237,7 @@ 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 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 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*); | ||||||
|  | |||||||
| @ -181,6 +181,25 @@ typedef enum { | |||||||
|     LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT), |     LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT), | ||||||
| } glslang_profile_t; | } glslang_profile_t; | ||||||
| 
 | 
 | ||||||
|  | /* Shader options */ | ||||||
|  | typedef enum { | ||||||
|  |     GLSLANG_SHADER_DEFAULT_BIT = 0, | ||||||
|  |     GLSLANG_SHADER_AUTO_MAP_BINDINGS = (1 << 0), | ||||||
|  |     GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (2 << 0), | ||||||
|  |     LAST_ELEMENT_MARKER(GLSLANG_SHADER_COUNT), | ||||||
|  | } glslang_shader_options_t; | ||||||
|  | 
 | ||||||
|  | /* TResourceType counterpart */ | ||||||
|  | typedef enum { | ||||||
|  |     GLSLANG_RESOURCE_TYPE_SAMPLER, | ||||||
|  |     GLSLANG_RESOURCE_TYPE_TEXTURE, | ||||||
|  |     GLSLANG_RESOURCE_TYPE_IMAGE, | ||||||
|  |     GLSLANG_RESOURCE_TYPE_UBO, | ||||||
|  |     GLSLANG_RESOURCE_TYPE_SSBO, | ||||||
|  |     GLSLANG_RESOURCE_TYPE_UAV, | ||||||
|  |     LAST_ELEMENT_MARKER(GLSLANG_RESOURCE_TYPE_COUNT), | ||||||
|  | } glslang_resource_type_t; | ||||||
|  | 
 | ||||||
| #undef LAST_ELEMENT_MARKER | #undef LAST_ELEMENT_MARKER | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Hai Nguyen
						Hai Nguyen