mirror of
https://github.com/godotengine/godot.git
synced 2024-11-24 05:04:10 +00:00
Merge pull request #98614 from DarioSamo/soft-shadow-samples-fix
Some checks are pending
🔗 GHA / 📊 Static checks (push) Waiting to run
🔗 GHA / 🤖 Android (push) Blocked by required conditions
🔗 GHA / 🍏 iOS (push) Blocked by required conditions
🔗 GHA / 🐧 Linux (push) Blocked by required conditions
🔗 GHA / 🍎 macOS (push) Blocked by required conditions
🔗 GHA / 🏁 Windows (push) Blocked by required conditions
🔗 GHA / 🌐 Web (push) Blocked by required conditions
🔗 GHA / 🪲 Godot CPP (push) Blocked by required conditions
Some checks are pending
🔗 GHA / 📊 Static checks (push) Waiting to run
🔗 GHA / 🤖 Android (push) Blocked by required conditions
🔗 GHA / 🍏 iOS (push) Blocked by required conditions
🔗 GHA / 🐧 Linux (push) Blocked by required conditions
🔗 GHA / 🍎 macOS (push) Blocked by required conditions
🔗 GHA / 🏁 Windows (push) Blocked by required conditions
🔗 GHA / 🌐 Web (push) Blocked by required conditions
🔗 GHA / 🪲 Godot CPP (push) Blocked by required conditions
Fix soft shadows by increasing the bit count for specialization constants.
This commit is contained in:
commit
08f9cba0fb
@ -108,10 +108,10 @@ public:
|
||||
uint32_t projector_use_mipmaps : 1;
|
||||
uint32_t use_depth_fog : 1;
|
||||
uint32_t use_lightmap_bicubic_filter : 1;
|
||||
uint32_t soft_shadow_samples : 4;
|
||||
uint32_t penumbra_shadow_samples : 4;
|
||||
uint32_t directional_soft_shadow_samples : 4;
|
||||
uint32_t directional_penumbra_shadow_samples : 4;
|
||||
uint32_t soft_shadow_samples : 6;
|
||||
uint32_t penumbra_shadow_samples : 6;
|
||||
uint32_t directional_soft_shadow_samples : 6;
|
||||
uint32_t directional_penumbra_shadow_samples : 6;
|
||||
};
|
||||
|
||||
uint32_t packed_0;
|
||||
|
@ -322,7 +322,12 @@ void SceneShaderForwardMobile::ShaderData::_create_pipeline(PipelineKey p_pipeli
|
||||
specialization_constants.push_back(sc);
|
||||
|
||||
sc.constant_id = 1;
|
||||
sc.float_value = p_pipeline_key.shader_specialization.packed_1;
|
||||
sc.int_value = p_pipeline_key.shader_specialization.packed_1;
|
||||
sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_INT;
|
||||
specialization_constants.push_back(sc);
|
||||
|
||||
sc.constant_id = 2;
|
||||
sc.float_value = p_pipeline_key.shader_specialization.packed_2;
|
||||
sc.type = RD::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_FLOAT;
|
||||
specialization_constants.push_back(sc);
|
||||
|
||||
|
@ -74,22 +74,23 @@ public:
|
||||
uint32_t use_depth_fog : 1;
|
||||
uint32_t is_multimesh : 1;
|
||||
uint32_t use_lightmap_bicubic_filter : 1;
|
||||
uint32_t pad : 2;
|
||||
uint32_t soft_shadow_samples : 4;
|
||||
uint32_t penumbra_shadow_samples : 4;
|
||||
uint32_t directional_soft_shadow_samples : 4;
|
||||
uint32_t directional_penumbra_shadow_samples : 4;
|
||||
uint32_t soft_shadow_samples : 6;
|
||||
uint32_t penumbra_shadow_samples : 6;
|
||||
uint32_t directional_soft_shadow_samples : 6;
|
||||
};
|
||||
|
||||
uint32_t packed_0;
|
||||
};
|
||||
|
||||
union {
|
||||
float luminance_multiplier;
|
||||
float packed_1;
|
||||
uint32_t directional_penumbra_shadow_samples : 6;
|
||||
uint32_t packed_1;
|
||||
};
|
||||
|
||||
uint32_t packed_2;
|
||||
union {
|
||||
float luminance_multiplier;
|
||||
float packed_2;
|
||||
};
|
||||
};
|
||||
|
||||
struct UbershaderConstants {
|
||||
|
@ -107,19 +107,19 @@ bool sc_use_lightmap_bicubic_filter() {
|
||||
}
|
||||
|
||||
uint sc_soft_shadow_samples() {
|
||||
return (sc_packed_0() >> 8) & 15U;
|
||||
return (sc_packed_0() >> 8) & 63U;
|
||||
}
|
||||
|
||||
uint sc_penumbra_shadow_samples() {
|
||||
return (sc_packed_0() >> 12) & 15U;
|
||||
return (sc_packed_0() >> 14) & 63U;
|
||||
}
|
||||
|
||||
uint sc_directional_soft_shadow_samples() {
|
||||
return (sc_packed_0() >> 16) & 15U;
|
||||
return (sc_packed_0() >> 20) & 63U;
|
||||
}
|
||||
|
||||
uint sc_directional_penumbra_shadow_samples() {
|
||||
return (sc_packed_0() >> 20) & 15U;
|
||||
return (sc_packed_0() >> 26) & 63U;
|
||||
}
|
||||
|
||||
float sc_luminance_multiplier() {
|
||||
|
@ -22,8 +22,8 @@ layout(push_constant, std430) uniform DrawCall {
|
||||
uint pad;
|
||||
#ifdef UBERSHADER
|
||||
uint sc_packed_0;
|
||||
float sc_packed_1;
|
||||
uint sc_packed_2;
|
||||
uint sc_packed_1;
|
||||
float sc_packed_2;
|
||||
uint uc_packed_0;
|
||||
#endif
|
||||
}
|
||||
@ -42,10 +42,14 @@ uint sc_packed_0() {
|
||||
return draw_call.sc_packed_0;
|
||||
}
|
||||
|
||||
float sc_packed_1() {
|
||||
uint sc_packed_1() {
|
||||
return draw_call.sc_packed_1;
|
||||
}
|
||||
|
||||
float sc_packed_2() {
|
||||
return draw_call.sc_packed_2;
|
||||
}
|
||||
|
||||
uint uc_cull_mode() {
|
||||
return (draw_call.uc_packed_0 >> 0) & 3U;
|
||||
}
|
||||
@ -54,16 +58,21 @@ uint uc_cull_mode() {
|
||||
|
||||
// Pull the constants from the pipeline's specialization constants.
|
||||
layout(constant_id = 0) const uint pso_sc_packed_0 = 0;
|
||||
layout(constant_id = 1) const float pso_sc_packed_1 = 2.0;
|
||||
layout(constant_id = 1) const uint pso_sc_packed_1 = 0;
|
||||
layout(constant_id = 2) const float pso_sc_packed_2 = 2.0;
|
||||
|
||||
uint sc_packed_0() {
|
||||
return pso_sc_packed_0;
|
||||
}
|
||||
|
||||
float sc_packed_1() {
|
||||
uint sc_packed_1() {
|
||||
return pso_sc_packed_1;
|
||||
}
|
||||
|
||||
float sc_packed_2() {
|
||||
return pso_sc_packed_2;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool sc_use_light_projector() {
|
||||
@ -123,23 +132,23 @@ bool sc_use_lightmap_bicubic_filter() {
|
||||
}
|
||||
|
||||
uint sc_soft_shadow_samples() {
|
||||
return (sc_packed_0() >> 16) & 15U;
|
||||
return (sc_packed_0() >> 14) & 63U;
|
||||
}
|
||||
|
||||
uint sc_penumbra_shadow_samples() {
|
||||
return (sc_packed_0() >> 20) & 15U;
|
||||
return (sc_packed_0() >> 20) & 63U;
|
||||
}
|
||||
|
||||
uint sc_directional_soft_shadow_samples() {
|
||||
return (sc_packed_0() >> 24) & 15U;
|
||||
return (sc_packed_0() >> 26) & 63U;
|
||||
}
|
||||
|
||||
uint sc_directional_penumbra_shadow_samples() {
|
||||
return (sc_packed_0() >> 28) & 15U;
|
||||
return (sc_packed_1() >> 0) & 63U;
|
||||
}
|
||||
|
||||
float sc_luminance_multiplier() {
|
||||
return sc_packed_1();
|
||||
return sc_packed_2();
|
||||
}
|
||||
|
||||
/* Set 0: Base Pass (never changes) */
|
||||
|
Loading…
Reference in New Issue
Block a user