### Godot version

4.2 dev fe5b1c8d49313d63fbe91cb7cdf463e10fb86afa

### System information

Android

### Issue description

In Vulkan mobile we render using subpasses whenever possible to keep data within tile memory for as long as possible.
In its most optimal configuration there are 4 subpasses:
1 - opaque rendering
2 - background rendering
3 - transparent rendering
4 - tonemapping and output

Subpasses 3 and 4 will be replaced by normal passes if effects are used that require this.

Subpasses can only be used when the output buffers are of equal size (i.e. same resolution, same number of bits per pixel). When MSAA is enabled, subpasses 1 through 3 are using the MSAA buffers while subpass 3 resolves the MSAA buffer and subpass 4 uses a normal buffer. This causes an error situation. While most GPU drivers will auto correct this, it is wrong.

Note for instance renderdoc output on a MALI GPU:
![image](https://github.com/godotengine/godot/assets/1945449/53606682-a9d6-48ab-9137-cb1b339c0f18)

You can see how after the second call to vkCmdNextSubpass, which brings us to subpass 3, which in this test doesn't have any further draw commands and just resolves, a new render pass is introduced before tonemapping is performed. 

We need to make sure that when MSAA is enabled, tonemapping is executed as a normal pass.

### Steps to reproduce

1) Create a simple project that renders something in 3D
2) Make sure MSAA is enabled but things like glow are disabled
3) Run on android
4) Verify command execution with renderdoc

### Minimal reproduction project

[MSAAtest.zip](https://github.com/godotengine/godot/files/12705873/MSAAtest.zip)

uint32_t render_total = p_params->element_count;
	uint32_t total_threads = WorkerThreadPool::get_singleton()->get_thread_count();
	uint32_t render_from = p_thread * render_total / total_threads;
	uint32_t render_to = (p_thread + 1 == total_threads) ? render_total : ((p_thread + 1) * render_total / total_threads);
	_render_list(thread_draw_lists[p_thread], p_params->framebuffer_format, p_params, render_from, render_to);
}
void RenderForwardMobile::_render_list_with_threads(RenderListParameters *p_params, RID p_framebuffer, RD::InitialAction p_initial_color_action, RD::FinalAction p_final_color_action, RD::InitialAction p_initial_depth_action, RD::FinalAction p_final_depth_action, const Vector<Color> &p_clear_color_values, float p_clear_depth, uint32_t p_clear_stencil, const Rect2 &p_region, const Vector<RID> &p_storage_textures) {
	RD::FramebufferFormatID fb_format = RD::get_singleton()->framebuffer_get_format(p_framebuffer);
	p_params->framebuffer_format = fb_format;
	if ((uint32_t)p_params->element_count > render_list_thread_threshold && false) { 
		
		thread_draw_lists.resize(WorkerThreadPool::get_singleton()->get_thread_count());
		RD::get_singleton()->draw_list_begin_split(p_framebuffer, thread_draw_lists.size(), thread_draw_lists.ptr(), p_initial_color_action, p_final_color_action, p_initial_depth_action, p_final_depth_action, p_clear_color_values, p_clear_depth, p_clear_stencil, p_region, p_storage_textures);
		WorkerThreadPool::GroupID group_task = WorkerThreadPool::get_singleton()->add_template_group_task(this, &RenderForwardMobile::_render_list_thread_function, p_params, thread_draw_lists.size(), -1, true, SNAME("ForwardMobileRenderSubpass"));
		WorkerThreadPool::get_singleton()->wait_for_group_task_completion(group_task);
		RD::get_singleton()->draw_list_end(p_params->barrier);
	} else {
		
		RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_framebuffer, p_initial_color_action, p_final_color_action, p_initial_depth_action, p_final_depth_action, p_clear_color_values, p_clear_depth, p_clear_stencil, p_region, p_storage_textures);
		_render_list(draw_list, fb_format, p_params, 0, p_params->element_count);
		RD::get_singleton()->draw_list_end(p_params->barrier);
	}
}
template <RenderForwardMobile::PassMode p_pass_mode>
void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_draw_list, RenderingDevice::FramebufferFormatID p_framebuffer_Format, RenderListParameters *p_params, uint32_t p_from_element, uint32_t p_to_element) {