Skip to content

Commit 8ad335e

Browse files
committed
Divide screen texture by luminance multiplier in compatibility
1 parent 06827c9 commit 8ad335e

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

drivers/gles3/storage/material_storage.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,7 @@ MaterialStorage::MaterialStorage() {
14231423
actions.default_filter = ShaderLanguage::FILTER_LINEAR_MIPMAP;
14241424
actions.default_repeat = ShaderLanguage::REPEAT_ENABLE;
14251425

1426+
actions.apply_luminance_multiplier = true; // apply luminance multiplier to screen texture
14261427
actions.check_multiview_samplers = RasterizerGLES3::get_singleton()->is_xr_enabled();
14271428
actions.global_buffer_array_variable = "global_shader_uniforms";
14281429
actions.instance_uniform_index_variable = "instance_offset";

servers/rendering/shader_compiler.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,18 +1323,22 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
13231323
}
13241324

13251325
code += data_type_name + "(" + node_code + ", " + sampler_name + ")";
1326-
} else if (actions.check_multiview_samplers && correct_texture_uniform && RS::get_singleton()->is_low_end()) {
1326+
} else if (correct_texture_uniform && RS::get_singleton()->is_low_end()) {
13271327
// Texture function on low end hardware (i.e. OpenGL).
1328-
// We just need to know if the texture supports multiview.
13291328

13301329
if (shader->uniforms.has(texture_uniform)) {
13311330
const ShaderLanguage::ShaderNode::Uniform &u = shader->uniforms[texture_uniform];
1331+
if (actions.check_multiview_samplers) {
1332+
if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_SCREEN_TEXTURE) {
1333+
multiview_uv_needed = true;
1334+
} else if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_DEPTH_TEXTURE) {
1335+
multiview_uv_needed = true;
1336+
} else if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_NORMAL_ROUGHNESS_TEXTURE) {
1337+
multiview_uv_needed = true;
1338+
}
1339+
}
13321340
if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_SCREEN_TEXTURE) {
1333-
multiview_uv_needed = true;
1334-
} else if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_DEPTH_TEXTURE) {
1335-
multiview_uv_needed = true;
1336-
} else if (u.hint == ShaderLanguage::ShaderNode::Uniform::HINT_NORMAL_ROUGHNESS_TEXTURE) {
1337-
multiview_uv_needed = true;
1341+
is_screen_texture = true;
13381342
}
13391343
}
13401344

@@ -1353,7 +1357,11 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
13531357
}
13541358
code += ")";
13551359
if (is_screen_texture && !texture_func_returns_data && actions.apply_luminance_multiplier) {
1356-
code = "(" + code + " * vec4(vec3(sc_luminance_multiplier()), 1.0))";
1360+
if (RS::get_singleton()->is_low_end()) {
1361+
code = "(" + code + " / vec4(vec3(scene_data_block.data.luminance_multiplier), 1.0))";
1362+
} else {
1363+
code = "(" + code + " * vec4(vec3(sc_luminance_multiplier()), 1.0))";
1364+
}
13571365
}
13581366
if (is_normal_roughness_texture && !texture_func_returns_data) {
13591367
code = "normal_roughness_compatibility(" + code + ")";

0 commit comments

Comments
 (0)