Skip to content

Commit f85dc07

Browse files
committed
Merge pull request godotengine#111303 from Kaleb-Reid/fix-dof-msaa-mobile
Use resolved depth texture for DOF with MSAA in Mobile
2 parents 686b56f + ac8491a commit f85dc07

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,11 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
936936
using_subpass_post_process = false;
937937
}
938938

939+
if (use_msaa && p_render_data->environment.is_valid() && RSG::camera_attributes->camera_attributes_uses_dof(p_render_data->camera_attributes)) {
940+
// Need to resolve depth texture for DOF when using MSAA.
941+
scene_state.used_depth_texture = true;
942+
}
943+
939944
if (scene_state.used_screen_texture || scene_state.used_depth_texture) {
940945
// can't use our last two subpasses because we're reading from screen texture or depth texture
941946
merge_transparent_pass = false;
@@ -1311,7 +1316,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
13111316
// If we need extra effects we do this in its own pass
13121317
RENDER_TIMESTAMP("Tonemap");
13131318

1314-
_render_buffers_post_process_and_tonemap(p_render_data);
1319+
_render_buffers_post_process_and_tonemap(p_render_data, use_msaa);
13151320

13161321
RD::get_singleton()->draw_command_end_label(); // Post process pass
13171322
}

servers/rendering/renderer_rd/renderer_scene_render_rd.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataR
446446
RD::get_singleton()->draw_command_end_label();
447447
}
448448

449-
void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data) {
449+
void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data, bool p_use_msaa) {
450450
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
451451

452452
ERR_FAIL_NULL(p_render_data);
@@ -530,7 +530,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
530530

531531
for (uint32_t i = 0; i < rb->get_view_count(); i++) {
532532
buffers.base_texture = use_upscaled_texture ? rb->get_upscaled_texture(i) : rb->get_internal_texture(i);
533-
buffers.depth_texture = rb->get_depth_texture(i);
533+
buffers.depth_texture = p_use_msaa ? rb->get_texture_slice(RB_SCOPE_BUFFERS, RB_TEX_BACK_DEPTH, i, 0) : rb->get_depth_texture(i);
534534
buffers.base_fb = FramebufferCacheRD::get_singleton()->get_cache(buffers.base_texture); // TODO move this into bokeh_dof_raster, we can do this internally
535535

536536
// In stereo p_render_data->z_near and p_render_data->z_far can be offset for our combined frustum.

servers/rendering/renderer_rd/renderer_scene_render_rd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class RendererSceneRenderRD : public RendererSceneRender, public RenderingShader
111111
void _render_buffers_copy_screen_texture(const RenderDataRD *p_render_data);
112112
void _render_buffers_ensure_depth_texture(const RenderDataRD *p_render_data);
113113
void _render_buffers_copy_depth_texture(const RenderDataRD *p_render_data, bool p_use_msaa = false);
114-
void _render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data);
114+
void _render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data, bool p_use_msaa = false);
115115
void _post_process_subpass(RID p_source_texture, RID p_framebuffer, const RenderDataRD *p_render_data);
116116
void _disable_clear_request(const RenderDataRD *p_render_data);
117117

0 commit comments

Comments
 (0)