### 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)

virtual int sdfgi_get_pending_region_count(const Ref<RenderSceneBuffers> &p_render_buffers) const override { return 0; }
	virtual AABB sdfgi_get_pending_region_bounds(const Ref<RenderSceneBuffers> &p_render_buffers, int p_region) const override { return AABB(); }
	virtual uint32_t sdfgi_get_pending_region_cascade(const Ref<RenderSceneBuffers> &p_render_buffers, int p_region) const override { return 0; }
	
	static void _geometry_instance_dependency_changed(Dependency::DependencyChangedNotification p_notification, DependencyTracker *p_tracker);
	static void _geometry_instance_dependency_deleted(const RID &p_dependency, DependencyTracker *p_tracker);
	SelfList<GeometryInstanceForwardMobile>::List geometry_instance_dirty_list;
	PagedAllocator<GeometryInstanceForwardMobile> geometry_instance_alloc;
	PagedAllocator<GeometryInstanceSurfaceDataCache> geometry_instance_surface_alloc;
	PagedAllocator<GeometryInstanceLightmapSH> geometry_instance_lightmap_sh;
	void _geometry_instance_add_surface_with_material(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, SceneShaderForwardMobile::MaterialData *p_material, uint32_t p_material_id, uint32_t p_shader_id, RID p_mesh);
	void _geometry_instance_add_surface_with_material_chain(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, SceneShaderForwardMobile::MaterialData *p_material, RID p_mat_src, RID p_mesh);
	void _geometry_instance_add_surface(GeometryInstanceForwardMobile *ginstance, uint32_t p_surface, RID p_material, RID p_mesh);
	void _geometry_instance_update(RenderGeometryInstance *p_geometry_instance);
	void _update_dirty_geometry_instances();
	virtual RenderGeometryInstance *geometry_instance_create(RID p_base) override;
	virtual void geometry_instance_free(RenderGeometryInstance *p_geometry_instance) override;
	virtual uint32_t geometry_instance_get_pair_mask() override;
	virtual bool free(RID p_rid) override;
	virtual void base_uniforms_changed() override;
	virtual bool is_dynamic_gi_supported() const override;
	virtual bool is_volumetric_supported() const override;
	virtual uint32_t get_max_elements() const override;
	RenderForwardMobile();
	~RenderForwardMobile();
};
} 
#endif