Skip to content

Commit d534107

Browse files
committed
Revert early version of PR #105175
This reverts commit 6225e25.
1 parent 819bb61 commit d534107

File tree

4 files changed

+19
-82
lines changed

4 files changed

+19
-82
lines changed

servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,33 +1902,24 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
19021902
color_framebuffer = rb_data->get_color_pass_fb(color_pass_flags);
19031903
}
19041904

1905-
// Ensure this is allocated so we don't get a stutter the first time an object with SSS appears on screen.
1906-
if (global_surface_data.sss_used) {
1907-
rb_data->ensure_specular();
1908-
}
1909-
1910-
if (global_surface_data.normal_texture_used) {
1911-
rb_data->ensure_normal_roughness_texture();
1912-
}
1913-
1914-
if (using_sss || using_separate_specular || scene_state.used_lightmap || using_voxelgi || global_surface_data.sss_used) {
1905+
if (using_sss || using_separate_specular || scene_state.used_lightmap || using_voxelgi) {
19151906
scene_shader.enable_advanced_shader_group(p_render_data->scene_data->view_count > 1);
19161907
}
19171908

19181909
// Update the global pipeline requirements with all the features found to be in use in this scene.
1919-
if (depth_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS || global_surface_data.normal_texture_used) {
1910+
if (depth_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS) {
19201911
global_pipeline_data_required.use_normal_and_roughness = true;
19211912
}
19221913

1923-
if (scene_state.used_lightmap || scene_state.lightmaps_used > 0) {
1914+
if (scene_state.used_lightmap) {
19241915
global_pipeline_data_required.use_lightmaps = true;
19251916
}
19261917

19271918
if (using_voxelgi) {
19281919
global_pipeline_data_required.use_voxelgi = true;
19291920
}
19301921

1931-
if (using_separate_specular || global_surface_data.sss_used) {
1922+
if (using_separate_specular) {
19321923
global_pipeline_data_required.use_separate_specular = true;
19331924
}
19341925

@@ -2299,26 +2290,18 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
22992290
rb->ensure_upscaled();
23002291
}
23012292

2302-
if (scene_state.used_screen_texture || global_surface_data.screen_texture_used) {
2293+
if (scene_state.used_screen_texture) {
23032294
RENDER_TIMESTAMP("Copy Screen Texture");
23042295

2305-
_render_buffers_ensure_screen_texture(p_render_data);
2306-
2307-
if (scene_state.used_screen_texture) {
2308-
// Copy screen texture to backbuffer so we can read from it
2309-
_render_buffers_copy_screen_texture(p_render_data);
2310-
}
2296+
// Copy screen texture to backbuffer so we can read from it
2297+
_render_buffers_copy_screen_texture(p_render_data);
23112298
}
23122299

2313-
if (scene_state.used_depth_texture || global_surface_data.depth_texture_used) {
2300+
if (scene_state.used_depth_texture) {
23142301
RENDER_TIMESTAMP("Copy Depth Texture");
23152302

2316-
_render_buffers_ensure_depth_texture(p_render_data);
2317-
2318-
if (scene_state.used_depth_texture) {
2319-
// Copy depth texture to backbuffer so we can read from it
2320-
_render_buffers_copy_depth_texture(p_render_data);
2321-
}
2303+
// Copy depth texture to backbuffer so we can read from it
2304+
_render_buffers_copy_depth_texture(p_render_data);
23222305
}
23232306

23242307
{
@@ -3952,22 +3935,18 @@ void RenderForwardClustered::_geometry_instance_add_surface_with_material(Geomet
39523935

39533936
if (p_material->shader_data->uses_sss) {
39543937
flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_SUBSURFACE_SCATTERING;
3955-
global_surface_data.sss_used = true;
39563938
}
39573939

39583940
if (p_material->shader_data->uses_screen_texture) {
39593941
flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_SCREEN_TEXTURE;
3960-
global_surface_data.screen_texture_used = true;
39613942
}
39623943

39633944
if (p_material->shader_data->uses_depth_texture) {
39643945
flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_DEPTH_TEXTURE;
3965-
global_surface_data.depth_texture_used = true;
39663946
}
39673947

39683948
if (p_material->shader_data->uses_normal_texture) {
39693949
flags |= GeometryInstanceSurfaceDataCache::FLAG_USES_NORMAL_TEXTURE;
3970-
global_surface_data.normal_texture_used = true;
39713950
}
39723951

39733952
if (ginstance->data->cast_double_sided_shadows) {

servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -629,14 +629,6 @@ class RenderForwardClustered : public RendererSceneRenderRD {
629629
void _update_dirty_geometry_instances();
630630
void _update_dirty_geometry_pipelines();
631631

632-
// Global data about the scene that can be used to pre-allocate resources without relying on culling.
633-
struct GlobalSurfaceData {
634-
bool screen_texture_used = false;
635-
bool normal_texture_used = false;
636-
bool depth_texture_used = false;
637-
bool sss_used = false;
638-
} global_surface_data;
639-
640632
/* Render List */
641633

642634
struct RenderList {

servers/rendering/renderer_rd/renderer_scene_render_rd.cpp

Lines changed: 9 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -315,32 +315,6 @@ void RendererSceneRenderRD::_process_compositor_effects(RS::CompositorEffectCall
315315
}
316316
}
317317

318-
void RendererSceneRenderRD::_render_buffers_ensure_screen_texture(const RenderDataRD *p_render_data) {
319-
Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
320-
ERR_FAIL_COND(rb.is_null());
321-
322-
if (!rb->has_internal_texture()) {
323-
// We're likely rendering reflection probes where we can't use our backbuffers.
324-
return;
325-
}
326-
327-
bool can_use_storage = _render_buffers_can_be_storage();
328-
Size2i size = rb->get_internal_size();
329-
330-
// When upscaling, the blur texture needs to be at the target size for post-processing to work. We prefer to use a
331-
// dedicated backbuffer copy texture instead if the blur texture is not an option so shader effects work correctly.
332-
Size2i target_size = rb->get_target_size();
333-
bool internal_size_matches = (size.width == target_size.width) && (size.height == target_size.height);
334-
bool reuse_blur_texture = !rb->has_upscaled_texture() || internal_size_matches;
335-
if (reuse_blur_texture) {
336-
rb->allocate_blur_textures();
337-
} else {
338-
uint32_t usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
339-
usage_bits |= can_use_storage ? RD::TEXTURE_USAGE_STORAGE_BIT : RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
340-
rb->create_texture(RB_SCOPE_BUFFERS, RB_TEX_BACK_COLOR, rb->get_base_data_format(), usage_bits);
341-
}
342-
}
343-
344318
void RendererSceneRenderRD::_render_buffers_copy_screen_texture(const RenderDataRD *p_render_data) {
345319
Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
346320
ERR_FAIL_COND(rb.is_null());
@@ -362,8 +336,12 @@ void RendererSceneRenderRD::_render_buffers_copy_screen_texture(const RenderData
362336
bool internal_size_matches = (size.width == target_size.width) && (size.height == target_size.height);
363337
bool reuse_blur_texture = !rb->has_upscaled_texture() || internal_size_matches;
364338
if (reuse_blur_texture) {
339+
rb->allocate_blur_textures();
365340
texture_name = RB_TEX_BLUR_0;
366341
} else {
342+
uint32_t usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
343+
usage_bits |= can_use_storage ? RD::TEXTURE_USAGE_STORAGE_BIT : RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
344+
rb->create_texture(RB_SCOPE_BUFFERS, RB_TEX_BACK_COLOR, rb->get_base_data_format(), usage_bits);
367345
texture_name = RB_TEX_BACK_COLOR;
368346
}
369347

@@ -395,7 +373,7 @@ void RendererSceneRenderRD::_render_buffers_copy_screen_texture(const RenderData
395373
RD::get_singleton()->draw_command_end_label();
396374
}
397375

398-
void RendererSceneRenderRD::_render_buffers_ensure_depth_texture(const RenderDataRD *p_render_data) {
376+
void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataRD *p_render_data) {
399377
Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
400378
ERR_FAIL_COND(rb.is_null());
401379

@@ -404,24 +382,14 @@ void RendererSceneRenderRD::_render_buffers_ensure_depth_texture(const RenderDat
404382
return;
405383
}
406384

407-
// Note, this only creates our back depth texture if we haven't already created it.
385+
RD::get_singleton()->draw_command_begin_label("Copy depth texture");
386+
387+
// note, this only creates our back depth texture if we haven't already created it.
408388
uint32_t usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT;
409389
usage_bits |= RD::TEXTURE_USAGE_CAN_COPY_TO_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
410-
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
390+
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
411391

412392
rb->create_texture(RB_SCOPE_BUFFERS, RB_TEX_BACK_DEPTH, RD::DATA_FORMAT_R32_SFLOAT, usage_bits, RD::TEXTURE_SAMPLES_1);
413-
}
414-
415-
void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataRD *p_render_data) {
416-
Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;
417-
ERR_FAIL_COND(rb.is_null());
418-
419-
if (!rb->has_depth_texture()) {
420-
// We're likely rendering reflection probes where we can't use our backbuffers.
421-
return;
422-
}
423-
424-
RD::get_singleton()->draw_command_begin_label("Copy depth texture");
425393

426394
bool can_use_storage = _render_buffers_can_be_storage();
427395
Size2i size = rb->get_internal_size();

servers/rendering/renderer_rd/renderer_scene_render_rd.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,7 @@ class RendererSceneRenderRD : public RendererSceneRender {
102102
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);
103103
bool _has_compositor_effect(RS::CompositorEffectCallbackType p_callback_type, const RenderDataRD *p_render_data);
104104
void _process_compositor_effects(RS::CompositorEffectCallbackType p_callback_type, const RenderDataRD *p_render_data);
105-
void _render_buffers_ensure_screen_texture(const RenderDataRD *p_render_data);
106105
void _render_buffers_copy_screen_texture(const RenderDataRD *p_render_data);
107-
void _render_buffers_ensure_depth_texture(const RenderDataRD *p_render_data);
108106
void _render_buffers_copy_depth_texture(const RenderDataRD *p_render_data);
109107
void _render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data);
110108
void _post_process_subpass(RID p_source_texture, RID p_framebuffer, const RenderDataRD *p_render_data);

0 commit comments

Comments
 (0)