From 903740f4cc069a2216777a206270df1232eb30de Mon Sep 17 00:00:00 2001 From: Chris Clyne Date: Wed, 16 Aug 2023 18:04:14 +0100 Subject: [PATCH] GooEngine: Fix MSL translation crash on MacOS --- .../engines/eevee/shaders/closure_eval_surface_lib.glsl | 8 ++++---- .../eevee/shaders/infos/eevee_legacy_common_info.hh | 4 ++-- .../eevee/shaders/infos/eevee_legacy_material_info.hh | 1 + .../eevee/shaders/infos/engine_eevee_legacy_shared.h | 2 ++ .../blender/draw/engines/eevee/shaders/prepass_frag.glsl | 2 -- source/blender/draw/intern/draw_manager_data.cc | 4 ++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_surface_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_surface_lib.glsl index ab9ff4ca447..d98b2bfc998 100644 --- a/source/blender/draw/engines/eevee/shaders/closure_eval_surface_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/closure_eval_surface_lib.glsl @@ -433,8 +433,8 @@ void calc_shader_info(vec3 position, (ld.light_group_bits.z & light_group_shadows.z) == 0 && (ld.light_group_bits.w & light_group_shadows.w) == 0)) { float light_fac = max(ld.l_color.x, max(ld.l_color.y, ld.l_color.z)) * ld.l_diff; - shadow_accum += (1 - light.vis * light.contact_shadow) * light_fac; - self_shadow_accum += (1 - calc_self_shadows_only(light.data, position, light.L)) * light_fac; + shadow_accum += (1.0 - light.vis * light.contact_shadow) * light_fac; + self_shadow_accum += (1.0 - calc_self_shadows_only(light.data, position, light.L)) * light_fac; light_accum += light_fac; } @@ -442,8 +442,8 @@ void calc_shader_info(vec3 position, half_light += vec4(light.data.l_color * light.data.l_diff * radiance, 0.0); } - shadows = (1 - (shadow_accum / max(light_accum, 1))); - self_shadows = (1 - (self_shadow_accum / max(light_accum, 1))); + shadows = (1.0 - (shadow_accum / max(light_accum, 1.0))); + self_shadows = (1.0 - (self_shadow_accum / max(light_accum, 1.0))); ambient = vec4(probe_evaluate_world_diff(n_n), 1.0); } diff --git a/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_common_info.hh b/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_common_info.hh index 3c9a9ca9176..efe3ebe0f4a 100644 --- a/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_common_info.hh +++ b/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_common_info.hh @@ -57,8 +57,8 @@ GPU_SHADER_CREATE_INFO(eevee_legacy_lights_lib) .additional_info("eevee_legacy_raytrace_lib") .uniform_buf(5, "ShadowBlock", "shadow_block", Frequency::PASS) .uniform_buf(6, "LightBlock", "light_block", Frequency::PASS) - .push_constant(Type::IVEC4, "light_groups") - .push_constant(Type::IVEC4, "light_group_shadows") + .push_constant(Type::IVEC4, "lightGroups") + .push_constant(Type::IVEC4, "lightGroupShadows") .sampler(8, ImageType::SHADOW_2D_ARRAY, "shadowCubeTexture") .sampler(9, ImageType::SHADOW_2D_ARRAY, "shadowCascadeTexture") /* GooEngine: Use slots 15,16 as others are already taken. */ diff --git a/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_material_info.hh b/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_material_info.hh index 9f8d5889f3e..8283b333202 100644 --- a/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_material_info.hh +++ b/source/blender/draw/engines/eevee/shaders/infos/eevee_legacy_material_info.hh @@ -140,6 +140,7 @@ GPU_SHADER_CREATE_INFO(eevee_legacy_material_prepass_frag_common) .additional_info("eevee_legacy_common_lib") .additional_info("eevee_legacy_common_utiltex_lib") .additional_info("draw_view") + .fragment_out(1, Type::UINT, "resource_id_out") .additional_info("eevee_legacy_closure_eval_surface_lib"); /* Common info for all `prepass_frag_opaque` variants. */ diff --git a/source/blender/draw/engines/eevee/shaders/infos/engine_eevee_legacy_shared.h b/source/blender/draw/engines/eevee/shaders/infos/engine_eevee_legacy_shared.h index 571e886633d..d53594a1923 100644 --- a/source/blender/draw/engines/eevee/shaders/infos/engine_eevee_legacy_shared.h +++ b/source/blender/draw/engines/eevee/shaders/infos/engine_eevee_legacy_shared.h @@ -232,8 +232,10 @@ BLI_STATIC_ASSERT_ALIGN(SSSProfileBlock, 16) # define alphaHashScale common_block._alphaHashScale # define cameraUvScaleBias common_block._cameraUvScaleBias # define planarClipPlane common_block._planarClipPlane +/* # define lightGroups light_groups # define lightGroupShadows light_group_shadows +*/ /* ProbeBlock */ # define probes_data probe_block._probes_data diff --git a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl index 242183bd33d..864265c1264 100644 --- a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl @@ -13,8 +13,6 @@ #pragma BLENDER_REQUIRE(closure_eval_surface_lib.glsl) #pragma BLENDER_REQUIRE(surface_lib.glsl) -layout(location = 1) out uint resource_id_out; - #ifdef USE_ALPHA_HASH /* From the paper "Hashed Alpha Testing" by Chris Wyman and Morgan McGuire */ diff --git a/source/blender/draw/intern/draw_manager_data.cc b/source/blender/draw/intern/draw_manager_data.cc index b8b5506c4ff..bc7477560cc 100644 --- a/source/blender/draw/intern/draw_manager_data.cc +++ b/source/blender/draw/intern/draw_manager_data.cc @@ -1871,10 +1871,10 @@ void DRW_shgroup_add_material_resources(DRWShadingGroup *grp, GPUMaterial *mater int light_groups[4]; GPU_material_light_group_bits_get(material, light_groups); - DRW_shgroup_uniform_ivec4_copy(grp, "light_groups", light_groups); + DRW_shgroup_uniform_ivec4_copy(grp, "lightGroups", light_groups); GPU_material_light_group_shadow_bits_get(material, light_groups); - DRW_shgroup_uniform_ivec4_copy(grp, "light_group_shadows", light_groups); + DRW_shgroup_uniform_ivec4_copy(grp, "lightGroupShadows", light_groups); } GPUVertFormat *DRW_shgroup_instance_format_array(const DRWInstanceAttrFormat attrs[],