mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 07:53:26 +00:00
Merge pull request #111303 from Kaleb-Reid/fix-dof-msaa-mobile
Use resolved depth texture for DOF with MSAA in Mobile
This commit is contained in:
commit
f85dc0720d
3 changed files with 9 additions and 4 deletions
|
@ -936,6 +936,11 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
|
|||
using_subpass_post_process = false;
|
||||
}
|
||||
|
||||
if (use_msaa && p_render_data->environment.is_valid() && RSG::camera_attributes->camera_attributes_uses_dof(p_render_data->camera_attributes)) {
|
||||
// Need to resolve depth texture for DOF when using MSAA.
|
||||
scene_state.used_depth_texture = true;
|
||||
}
|
||||
|
||||
if (scene_state.used_screen_texture || scene_state.used_depth_texture) {
|
||||
// can't use our last two subpasses because we're reading from screen texture or depth texture
|
||||
merge_transparent_pass = false;
|
||||
|
@ -1311,7 +1316,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
|
|||
// If we need extra effects we do this in its own pass
|
||||
RENDER_TIMESTAMP("Tonemap");
|
||||
|
||||
_render_buffers_post_process_and_tonemap(p_render_data);
|
||||
_render_buffers_post_process_and_tonemap(p_render_data, use_msaa);
|
||||
|
||||
RD::get_singleton()->draw_command_end_label(); // Post process pass
|
||||
}
|
||||
|
|
|
@ -446,7 +446,7 @@ void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataR
|
|||
RD::get_singleton()->draw_command_end_label();
|
||||
}
|
||||
|
||||
void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data) {
|
||||
void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data, bool p_use_msaa) {
|
||||
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
|
||||
|
||||
ERR_FAIL_NULL(p_render_data);
|
||||
|
@ -530,7 +530,7 @@ void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const Rende
|
|||
|
||||
for (uint32_t i = 0; i < rb->get_view_count(); i++) {
|
||||
buffers.base_texture = use_upscaled_texture ? rb->get_upscaled_texture(i) : rb->get_internal_texture(i);
|
||||
buffers.depth_texture = rb->get_depth_texture(i);
|
||||
buffers.depth_texture = p_use_msaa ? rb->get_texture_slice(RB_SCOPE_BUFFERS, RB_TEX_BACK_DEPTH, i, 0) : rb->get_depth_texture(i);
|
||||
buffers.base_fb = FramebufferCacheRD::get_singleton()->get_cache(buffers.base_texture); // TODO move this into bokeh_dof_raster, we can do this internally
|
||||
|
||||
// In stereo p_render_data->z_near and p_render_data->z_far can be offset for our combined frustum.
|
||||
|
|
|
@ -111,7 +111,7 @@ protected:
|
|||
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, bool p_use_msaa = false);
|
||||
void _render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data);
|
||||
void _render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data, bool p_use_msaa = false);
|
||||
void _post_process_subpass(RID p_source_texture, RID p_framebuffer, const RenderDataRD *p_render_data);
|
||||
void _disable_clear_request(const RenderDataRD *p_render_data);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue