2
0
Эх сурвалжийг харах

Revert early version of PR #105175

This reverts commit 6225e25f4adad3cacbef32cfa8607767b5a96269.
Thaddeus Crews 5 сар өмнө
parent
commit
d534107926

+ 10 - 31
servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp

@@ -1902,25 +1902,16 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
 		color_framebuffer = rb_data->get_color_pass_fb(color_pass_flags);
 	}
 
-	// Ensure this is allocated so we don't get a stutter the first time an object with SSS appears on screen.
-	if (global_surface_data.sss_used) {
-		rb_data->ensure_specular();
-	}
-
-	if (global_surface_data.normal_texture_used) {
-		rb_data->ensure_normal_roughness_texture();
-	}
-
-	if (using_sss || using_separate_specular || scene_state.used_lightmap || using_voxelgi || global_surface_data.sss_used) {
+	if (using_sss || using_separate_specular || scene_state.used_lightmap || using_voxelgi) {
 		scene_shader.enable_advanced_shader_group(p_render_data->scene_data->view_count > 1);
 	}
 
 	// Update the global pipeline requirements with all the features found to be in use in this scene.
-	if (depth_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS || global_surface_data.normal_texture_used) {
+	if (depth_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS) {
 		global_pipeline_data_required.use_normal_and_roughness = true;
 	}
 
-	if (scene_state.used_lightmap || scene_state.lightmaps_used > 0) {
+	if (scene_state.used_lightmap) {
 		global_pipeline_data_required.use_lightmaps = true;
 	}
 
@@ -1928,7 +1919,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
 		global_pipeline_data_required.use_voxelgi = true;
 	}
 
-	if (using_separate_specular || global_surface_data.sss_used) {
+	if (using_separate_specular) {
 		global_pipeline_data_required.use_separate_specular = true;
 	}
 
@@ -2299,26 +2290,18 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
 		rb->ensure_upscaled();
 	}
 
-	if (scene_state.used_screen_texture || global_surface_data.screen_texture_used) {
+	if (scene_state.used_screen_texture) {
 		RENDER_TIMESTAMP("Copy Screen Texture");
 
-		_render_buffers_ensure_screen_texture(p_render_data);
-
-		if (scene_state.used_screen_texture) {
-			// Copy screen texture to backbuffer so we can read from it
-			_render_buffers_copy_screen_texture(p_render_data);
-		}
+		// Copy screen texture to backbuffer so we can read from it
+		_render_buffers_copy_screen_texture(p_render_data);
 	}
 
-	if (scene_state.used_depth_texture || global_surface_data.depth_texture_used) {
+	if (scene_state.used_depth_texture) {
 		RENDER_TIMESTAMP("Copy Depth Texture");
 
-		_render_buffers_ensure_depth_texture(p_render_data);
-
-		if (scene_state.used_depth_texture) {
-			// Copy depth texture to backbuffer so we can read from it
-			_render_buffers_copy_depth_texture(p_render_data);
-		}
+		// Copy depth texture to backbuffer so we can read from it
+		_render_buffers_copy_depth_texture(p_render_data);
 	}
 
 	{
@@ -3952,22 +3935,18 @@ void RenderForwardClustered::_geometry_instance_add_surface_with_material(Geomet
 
 	if (p_material->shader_data->uses_sss) {
 		flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_SUBSURFACE_SCATTERING;
-		global_surface_data.sss_used = true;
 	}
 
 	if (p_material->shader_data->uses_screen_texture) {
 		flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_SCREEN_TEXTURE;
-		global_surface_data.screen_texture_used = true;
 	}
 
 	if (p_material->shader_data->uses_depth_texture) {
 		flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_DEPTH_TEXTURE;
-		global_surface_data.depth_texture_used = true;
 	}
 
 	if (p_material->shader_data->uses_normal_texture) {
 		flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_NORMAL_TEXTURE;
-		global_surface_data.normal_texture_used = true;
 	}
 
 	if (ginstance->data->cast_double_sided_shadows) {

+ 0 - 8
servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h

@@ -629,14 +629,6 @@ private:
 	void _update_dirty_geometry_instances();
 	void _update_dirty_geometry_pipelines();
 
-	// Global data about the scene that can be used to pre-allocate resources without relying on culling.
-	struct GlobalSurfaceData {
-		bool screen_texture_used = false;
-		bool normal_texture_used = false;
-		bool depth_texture_used = false;
-		bool sss_used = false;
-	} global_surface_data;
-
 	/* Render List */
 
 	struct RenderList {

+ 9 - 41
servers/rendering/renderer_rd/renderer_scene_render_rd.cpp

@@ -315,32 +315,6 @@ void RendererSceneRenderRD::_process_compositor_effects(RS::CompositorEffectCall
 	}
 }
 
-void RendererSceneRenderRD::_render_buffers_ensure_screen_texture(const RenderDataRD *p_render_data) {
-	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
-	ERR_FAIL_COND(rb.is_null());
-
-	if (!rb->has_internal_texture()) {
-		// We're likely rendering reflection probes where we can't use our backbuffers.
-		return;
-	}
-
-	bool can_use_storage = _render_buffers_can_be_storage();
-	Size2i size = rb->get_internal_size();
-
-	// When upscaling, the blur texture needs to be at the target size for post-processing to work. We prefer to use a
-	// dedicated backbuffer copy texture instead if the blur texture is not an option so shader effects work correctly.
-	Size2i target_size = rb->get_target_size();
-	bool internal_size_matches = (size.width == target_size.width) && (size.height == target_size.height);
-	bool reuse_blur_texture = !rb->has_upscaled_texture() || internal_size_matches;
-	if (reuse_blur_texture) {
-		rb->allocate_blur_textures();
-	} else {
-		uint32_t usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
-		usage_bits |= can_use_storage ? RD::TEXTURE_USAGE_STORAGE_BIT : RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
-		rb->create_texture(RB_SCOPE_BUFFERS, RB_TEX_BACK_COLOR, rb->get_base_data_format(), usage_bits);
-	}
-}
-
 void RendererSceneRenderRD::_render_buffers_copy_screen_texture(const RenderDataRD *p_render_data) {
 	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
 	ERR_FAIL_COND(rb.is_null());
@@ -362,8 +336,12 @@ void RendererSceneRenderRD::_render_buffers_copy_screen_texture(const RenderData
 	bool internal_size_matches = (size.width == target_size.width) && (size.height == target_size.height);
 	bool reuse_blur_texture = !rb->has_upscaled_texture() || internal_size_matches;
 	if (reuse_blur_texture) {
+		rb->allocate_blur_textures();
 		texture_name = RB_TEX_BLUR_0;
 	} else {
+		uint32_t usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
+		usage_bits |= can_use_storage ? RD::TEXTURE_USAGE_STORAGE_BIT : RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
+		rb->create_texture(RB_SCOPE_BUFFERS, RB_TEX_BACK_COLOR, rb->get_base_data_format(), usage_bits);
 		texture_name = RB_TEX_BACK_COLOR;
 	}
 
@@ -395,7 +373,7 @@ void RendererSceneRenderRD::_render_buffers_copy_screen_texture(const RenderData
 	RD::get_singleton()->draw_command_end_label();
 }
 
-void RendererSceneRenderRD::_render_buffers_ensure_depth_texture(const RenderDataRD *p_render_data) {
+void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataRD *p_render_data) {
 	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
 	ERR_FAIL_COND(rb.is_null());
 
@@ -404,24 +382,14 @@ void RendererSceneRenderRD::_render_buffers_ensure_depth_texture(const RenderDat
 		return;
 	}
 
-	// Note, this only creates our back depth texture if we haven't already created it.
+	RD::get_singleton()->draw_command_begin_label("Copy depth texture");
+
+	// note, this only creates our back depth texture if we haven't already created it.
 	uint32_t usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT;
 	usage_bits |= RD::TEXTURE_USAGE_CAN_COPY_TO_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
-	usage_bits |= RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT; // Set this as color attachment because we're copying data into it, it's not actually used as a depth buffer
+	usage_bits |= RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT; // set this as color attachment because we're copying data into it, it's not actually used as a depth buffer
 
 	rb->create_texture(RB_SCOPE_BUFFERS, RB_TEX_BACK_DEPTH, RD::DATA_FORMAT_R32_SFLOAT, usage_bits, RD::TEXTURE_SAMPLES_1);
-}
-
-void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataRD *p_render_data) {
-	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
-	ERR_FAIL_COND(rb.is_null());
-
-	if (!rb->has_depth_texture()) {
-		// We're likely rendering reflection probes where we can't use our backbuffers.
-		return;
-	}
-
-	RD::get_singleton()->draw_command_begin_label("Copy depth texture");
 
 	bool can_use_storage = _render_buffers_can_be_storage();
 	Size2i size = rb->get_internal_size();

+ 0 - 2
servers/rendering/renderer_rd/renderer_scene_render_rd.h

@@ -102,9 +102,7 @@ protected:
 	bool _compositor_effects_has_flag(const RenderDataRD *p_render_data, RS::CompositorEffectFlags p_flag, RS::CompositorEffectCallbackType p_callback_type = RS::COMPOSITOR_EFFECT_CALLBACK_TYPE_ANY);
 	bool _has_compositor_effect(RS::CompositorEffectCallbackType p_callback_type, const RenderDataRD *p_render_data);
 	void _process_compositor_effects(RS::CompositorEffectCallbackType p_callback_type, const RenderDataRD *p_render_data);
-	void _render_buffers_ensure_screen_texture(const RenderDataRD *p_render_data);
 	void _render_buffers_copy_screen_texture(const RenderDataRD *p_render_data);
-	void _render_buffers_ensure_depth_texture(const RenderDataRD *p_render_data);
 	void _render_buffers_copy_depth_texture(const RenderDataRD *p_render_data);
 	void _render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data);
 	void _post_process_subpass(RID p_source_texture, RID p_framebuffer, const RenderDataRD *p_render_data);