From 94831c7209334ea036dec8edbd235b34453083e2 Mon Sep 17 00:00:00 2001 From: Yuri Rubinsky Date: Sun, 29 Jan 2023 12:14:22 +0300 Subject: Forbid passing multiview sampler to the custom function in shaders --- servers/rendering/renderer_rd/effects/copy_effects.cpp | 4 ++-- servers/rendering/renderer_rd/effects/tone_mapper.cpp | 2 +- servers/rendering/renderer_rd/effects/vrs.cpp | 2 +- servers/rendering/renderer_rd/environment/sky.cpp | 4 ++-- .../forward_clustered/scene_shader_forward_clustered.cpp | 4 ++-- .../renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp | 4 ++-- servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp | 2 +- servers/rendering/renderer_rd/renderer_compositor_rd.h | 3 ++- servers/rendering/renderer_rd/storage_rd/particles_storage.cpp | 10 +++++----- 9 files changed, 18 insertions(+), 17 deletions(-) (limited to 'servers/rendering/renderer_rd') diff --git a/servers/rendering/renderer_rd/effects/copy_effects.cpp b/servers/rendering/renderer_rd/effects/copy_effects.cpp index bcea9225ea..86484c982a 100644 --- a/servers/rendering/renderer_rd/effects/copy_effects.cpp +++ b/servers/rendering/renderer_rd/effects/copy_effects.cpp @@ -110,7 +110,7 @@ CopyEffects::CopyEffects(bool p_prefer_raster_effects) { copy_to_fb.shader.initialize(copy_modes); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { copy_to_fb.shader.set_variant_enabled(COPY_TO_FB_MULTIVIEW, false); copy_to_fb.shader.set_variant_enabled(COPY_TO_FB_MULTIVIEW_WITH_DEPTH, false); } @@ -266,7 +266,7 @@ CopyEffects::CopyEffects(bool p_prefer_raster_effects) { specular_merge.shader.initialize(specular_modes); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { specular_merge.shader.set_variant_enabled(SPECULAR_MERGE_ADD_MULTIVIEW, false); specular_merge.shader.set_variant_enabled(SPECULAR_MERGE_SSR_MULTIVIEW, false); specular_merge.shader.set_variant_enabled(SPECULAR_MERGE_ADDITIVE_ADD_MULTIVIEW, false); diff --git a/servers/rendering/renderer_rd/effects/tone_mapper.cpp b/servers/rendering/renderer_rd/effects/tone_mapper.cpp index 7b152b524f..821960bb3b 100644 --- a/servers/rendering/renderer_rd/effects/tone_mapper.cpp +++ b/servers/rendering/renderer_rd/effects/tone_mapper.cpp @@ -56,7 +56,7 @@ ToneMapper::ToneMapper() { tonemap.shader.initialize(tonemap_modes); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { tonemap.shader.set_variant_enabled(TONEMAP_MODE_NORMAL_MULTIVIEW, false); tonemap.shader.set_variant_enabled(TONEMAP_MODE_BICUBIC_GLOW_FILTER_MULTIVIEW, false); tonemap.shader.set_variant_enabled(TONEMAP_MODE_1D_LUT_MULTIVIEW, false); diff --git a/servers/rendering/renderer_rd/effects/vrs.cpp b/servers/rendering/renderer_rd/effects/vrs.cpp index 4bc5d7b597..6ec8612029 100644 --- a/servers/rendering/renderer_rd/effects/vrs.cpp +++ b/servers/rendering/renderer_rd/effects/vrs.cpp @@ -44,7 +44,7 @@ VRS::VRS() { vrs_shader.shader.initialize(vrs_modes); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { vrs_shader.shader.set_variant_enabled(VRS_MULTIVIEW, false); } diff --git a/servers/rendering/renderer_rd/environment/sky.cpp b/servers/rendering/renderer_rd/environment/sky.cpp index 7fff349b3c..788ec1cee4 100644 --- a/servers/rendering/renderer_rd/environment/sky.cpp +++ b/servers/rendering/renderer_rd/environment/sky.cpp @@ -276,7 +276,7 @@ void SkyRD::ReflectionData::update_reflection_data(int p_size, int p_mipmaps, bo int mipmaps = p_mipmaps; uint32_t w = p_size, h = p_size; - EffectsRD *effects = RendererCompositorRD::singleton->get_effects(); + EffectsRD *effects = RendererCompositorRD::get_singleton()->get_effects(); ERR_FAIL_NULL_MSG(effects, "Effects haven't been initialized"); bool prefer_raster_effects = effects->get_prefer_raster_effects(); @@ -756,7 +756,7 @@ void SkyRD::init() { sky_shader.shader.initialize(sky_modes, defines); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { sky_shader.shader.set_variant_enabled(SKY_VERSION_BACKGROUND_MULTIVIEW, false); sky_shader.shader.set_variant_enabled(SKY_VERSION_HALF_RES_MULTIVIEW, false); sky_shader.shader.set_variant_enabled(SKY_VERSION_QUARTER_RES_MULTIVIEW, false); diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp index 3b3979b198..ff180b5465 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp @@ -504,7 +504,7 @@ void SceneShaderForwardClustered::init(const String p_defines) { shader.initialize(shader_versions, p_defines); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_MULTIVIEW, false); shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW, false); shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW, false); @@ -730,7 +730,7 @@ void SceneShaderForwardClustered::init(const String p_defines) { actions.global_buffer_array_variable = "global_shader_uniforms.data"; actions.instance_uniform_index_variable = "instances.data[instance_index_interp].instance_uniforms_ofs"; - actions.check_multiview_samplers = true; // make sure we check sampling multiview textures + actions.check_multiview_samplers = RendererCompositorRD::get_singleton()->is_xr_enabled(); // Make sure we check sampling multiview textures. compiler.initialize(actions); } diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp index cc4a7dfa47..0e992eb965 100644 --- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp @@ -421,7 +421,7 @@ void SceneShaderForwardMobile::init(const String p_defines) { shader.initialize(shader_versions, p_defines); - if (!RendererCompositorRD::singleton->is_xr_enabled()) { + if (!RendererCompositorRD::get_singleton()->is_xr_enabled()) { shader.set_variant_enabled(SHADER_VERSION_COLOR_PASS_MULTIVIEW, false); shader.set_variant_enabled(SHADER_VERSION_LIGHTMAP_COLOR_PASS_MULTIVIEW, false); shader.set_variant_enabled(SHADER_VERSION_SHADOW_PASS_MULTIVIEW, false); @@ -610,7 +610,7 @@ void SceneShaderForwardMobile::init(const String p_defines) { actions.instance_uniform_index_variable = "draw_call.instance_uniforms_ofs"; actions.apply_luminance_multiplier = true; // apply luminance multiplier to screen texture - actions.check_multiview_samplers = true; // make sure we check sampling multiview textures + actions.check_multiview_samplers = RendererCompositorRD::get_singleton()->is_xr_enabled(); // Make sure we check sampling multiview textures. compiler.initialize(actions); } diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp index f102bc0650..e21695205b 100644 --- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp @@ -919,7 +919,7 @@ void RendererCanvasRenderRD::_render_item(RD::DrawListID p_draw_list, RID p_rend } break; case Item::Command::TYPE_ANIMATION_SLICE: { const Item::CommandAnimationSlice *as = static_cast(c); - double current_time = RendererCompositorRD::singleton->get_total_time(); + double current_time = RendererCompositorRD::get_singleton()->get_total_time(); double local_time = Math::fposmod(current_time - as->offset, as->animation_length); skipping = !(local_time >= as->slice_begin && local_time < as->slice_end); diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.h b/servers/rendering/renderer_rd/renderer_compositor_rd.h index 43c8d78dee..eae4327908 100644 --- a/servers/rendering/renderer_rd/renderer_compositor_rd.h +++ b/servers/rendering/renderer_rd/renderer_compositor_rd.h @@ -101,6 +101,7 @@ protected: double delta = 0.0; static uint64_t frame; + static RendererCompositorRD *singleton; public: RendererUtilities *get_utilities() { return utilities; }; @@ -145,7 +146,7 @@ public: low_end = false; } - static RendererCompositorRD *singleton; + static RendererCompositorRD *get_singleton() { return singleton; } RendererCompositorRD(); ~RendererCompositorRD(); }; diff --git a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp index 00fb8acca8..3ed5d7dda8 100644 --- a/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/particles_storage.cpp @@ -774,7 +774,7 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta p_particles->phase = new_phase; - frame_params.time = RendererCompositorRD::singleton->get_total_time(); + frame_params.time = RendererCompositorRD::get_singleton()->get_total_time(); frame_params.delta = p_delta * p_particles->speed_scale; frame_params.random_seed = p_particles->random_seed; frame_params.explosiveness = p_particles->explosiveness; @@ -1228,7 +1228,7 @@ void ParticlesStorage::particles_set_view_axis(RID p_particles, const Vector3 &p RD::get_singleton()->compute_list_dispatch_threads(compute_list, particles->amount, 1, 1); RD::get_singleton()->compute_list_end(); - RendererCompositorRD::singleton->get_effects()->sort_buffer(particles->particles_sort_uniform_set, particles->amount); + RendererCompositorRD::get_singleton()->get_effects()->sort_buffer(particles->particles_sort_uniform_set, particles->amount); } if (particles->trails_enabled && particles->trail_bind_poses.size() > 1) { @@ -1341,7 +1341,7 @@ void ParticlesStorage::update_particles() { particles->inactive = false; particles->inactive_time = 0; } else { - particles->inactive_time += particles->speed_scale * RendererCompositorRD::singleton->get_frame_delta_time(); + particles->inactive_time += particles->speed_scale * RendererCompositorRD::get_singleton()->get_frame_delta_time(); if (particles->inactive_time > particles->lifetime * 1.2) { particles->inactive = true; continue; @@ -1442,7 +1442,7 @@ void ParticlesStorage::update_particles() { frame_time = 1.0 / fixed_fps; decr = frame_time; } - double delta = RendererCompositorRD::singleton->get_frame_delta_time(); + double delta = RendererCompositorRD::get_singleton()->get_frame_delta_time(); if (delta > 0.1) { //avoid recursive stalls if fps goes below 10 delta = 0.1; } else if (delta <= 0.0) { //unlikely but.. @@ -1461,7 +1461,7 @@ void ParticlesStorage::update_particles() { if (zero_time_scale) { _particles_process(particles, 0.0); } else { - _particles_process(particles, RendererCompositorRD::singleton->get_frame_delta_time()); + _particles_process(particles, RendererCompositorRD::get_singleton()->get_frame_delta_time()); } } -- cgit v1.2.3