summaryrefslogtreecommitdiffstats
path: root/servers/rendering/shader_language.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-07-30 12:29:04 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-07-30 12:29:04 +0200
commit52f22902c7389b1c5dd9277bc99f0a3f3bb091ab (patch)
treeef02aff171c6e45e8348913675a79a2f7bc065a8 /servers/rendering/shader_language.cpp
parenta92d7ed19f7d26c981936a1604696a5de568215e (diff)
parenta2f2699208175db1599ba85858e20b4a2a4d6bfd (diff)
downloadredot-engine-52f22902c7389b1c5dd9277bc99f0a3f3bb091ab.tar.gz
Merge pull request #94902 from clayjohn/SHADER-hints
Restrict sampler hint validation to only screen texture hints
Diffstat (limited to 'servers/rendering/shader_language.cpp')
-rw-r--r--servers/rendering/shader_language.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index 10c1158d95..0235d72cfa 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -4761,6 +4761,15 @@ bool ShaderLanguage::_validate_assign(Node *p_node, const FunctionInfo &p_functi
return false;
}
+ShaderLanguage::ShaderNode::Uniform::Hint ShaderLanguage::_sanitize_hint(ShaderNode::Uniform::Hint p_hint) {
+ if (p_hint == ShaderNode::Uniform::HINT_SCREEN_TEXTURE ||
+ p_hint == ShaderNode::Uniform::HINT_NORMAL_ROUGHNESS_TEXTURE ||
+ p_hint == ShaderNode::Uniform::HINT_DEPTH_TEXTURE) {
+ return p_hint;
+ }
+ return ShaderNode::Uniform::HINT_NONE;
+}
+
bool ShaderLanguage::_propagate_function_call_sampler_uniform_settings(const StringName &p_name, int p_argument, TextureFilter p_filter, TextureRepeat p_repeat, ShaderNode::Uniform::Hint p_hint) {
for (int i = 0; i < shader->vfunctions.size(); i++) {
if (shader->vfunctions[i].name == p_name) {
@@ -4771,7 +4780,7 @@ bool ShaderLanguage::_propagate_function_call_sampler_uniform_settings(const Str
return false;
} else if (arg->tex_argument_check) {
// Was checked, verify that filter, repeat, and hint are the same.
- if (arg->tex_argument_filter == p_filter && arg->tex_argument_repeat == p_repeat && arg->tex_hint == p_hint) {
+ if (arg->tex_argument_filter == p_filter && arg->tex_argument_repeat == p_repeat && arg->tex_hint == _sanitize_hint(p_hint)) {
return true;
} else {
_set_error(vformat(RTR("Sampler argument %d of function '%s' called more than once using textures that differ in either filter, repeat, or texture hint setting."), p_argument, String(p_name)));
@@ -4781,7 +4790,7 @@ bool ShaderLanguage::_propagate_function_call_sampler_uniform_settings(const Str
arg->tex_argument_check = true;
arg->tex_argument_filter = p_filter;
arg->tex_argument_repeat = p_repeat;
- arg->tex_hint = p_hint;
+ arg->tex_hint = _sanitize_hint(p_hint);
for (KeyValue<StringName, HashSet<int>> &E : arg->tex_argument_connect) {
for (const int &F : E.value) {
if (!_propagate_function_call_sampler_uniform_settings(E.key, F, p_filter, p_repeat, p_hint)) {