@@ -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-
344318void 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 ();
0 commit comments