From d5d2d3d68f211d05bc246f7e78152f163fdd43de Mon Sep 17 00:00:00 2001 From: Justin Symonds Date: Fri, 18 Aug 2023 22:45:41 -0700 Subject: [PATCH] Prevent debug error on compute shader creation --- src/program/reflection.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/program/reflection.rs b/src/program/reflection.rs index 23026a2c1f..330edbaeca 100644 --- a/src/program/reflection.rs +++ b/src/program/reflection.rs @@ -1120,7 +1120,7 @@ fn glenum_to_transform_feedback_mode(value: gl::types::GLenum) -> TransformFeedb } /// Contains all subroutine data of a program. -#[derive(Debug, Clone)] +#[derive(Debug, Default, Clone)] pub struct SubroutineData { /// Number of subroutine uniform locations per shader stage. /// This is *not* equal to the number of subroutine uniforms per stage, @@ -1215,21 +1215,22 @@ pub unsafe fn reflect_subroutine_data(ctxt: &mut CommandContext<'_>, program: Ha -> SubroutineData { if !program::is_subroutine_supported(ctxt) { - return SubroutineData { - location_counts: HashMap::with_hasher(Default::default()), - subroutine_uniforms: HashMap::with_hasher(Default::default()), - } + return Default::default(); } let program = match program { // subroutines not supported. - Handle::Handle(_) => return SubroutineData { - location_counts: HashMap::with_hasher(Default::default()), - subroutine_uniforms: HashMap::with_hasher(Default::default()), - }, + Handle::Handle(_) => return Default::default(), Handle::Id(id) => id }; + // Compute shader programs are not handled: #1718 + let mut shader_count = 0; + ctxt.gl.GetProgramiv(program, gl::ATTACHED_SHADERS, &mut shader_count); + if shader_count < 2 { + return Default::default(); + } + let shader_stages = get_shader_stages(has_geometry_shader, has_tessellation_control_shader, has_tessellation_evaluation_shader);