### Godot version

v4.1.beta3.official [ada712e06]

### System information

Godot v4.1.beta3 - Windows 10.0.22621 - Vulkan (Mobile) - dedicated NVIDIA GeForce RTX 2080 with Max-Q Design (NVIDIA; 31.0.15.3161) - Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz (12 Threads)

### Issue description

I am using the main renderingdevice to do offscreen drawing to a texture. If I use the same code on a local rendering device created using `RenderingServer.create_local_rendering_device()`, it works fine, but the moment I do anything on the main rendering device (from RenderingServer.get_rendering_device() ), my code will run for one or two frames, then the game quits silently.

I've narrowed it down with a passthrough shader and no actual draw calls - just any call to `draw_list_begin` and `draw_list_end`, and it dies.

If you use single threaded renderingdevice, it works.

I feel like this is a good test of the stability of the vulkan multithreading ( see https://github.com/godotengine/godot-proposals/discussions/7163 ) - if we want to allow multithreaded use of a single renderingdevice, then this should work.

### Steps to reproduce

Hit play on the project below. It will hopefully print out before, inside, after, then silently quit. Does on mine at least, on dev builds and on 4.1b3. If you set rendering to single-threaded (safe or unsafe), then it works happily.



### Minimal reproduction project

[crashtest.zip](https://github.com/godotengine/godot/files/11892220/crashtest.zip)

VkDescriptorPoolSize s;
			s.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
			s.descriptorCount = p_key.uniform_type[UNIFORM_TYPE_UNIFORM_BUFFER] * max_descriptors_per_pool;
			sizes.push_back(s);
		}
		if (p_key.uniform_type[UNIFORM_TYPE_STORAGE_BUFFER]) {
			VkDescriptorPoolSize s;
			s.type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
			s.descriptorCount = p_key.uniform_type[UNIFORM_TYPE_STORAGE_BUFFER] * max_descriptors_per_pool;
			sizes.push_back(s);
		}
		if (p_key.uniform_type[UNIFORM_TYPE_INPUT_ATTACHMENT]) {
			VkDescriptorPoolSize s;
			s.type = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT;
			s.descriptorCount = p_key.uniform_type[UNIFORM_TYPE_INPUT_ATTACHMENT] * max_descriptors_per_pool;
			sizes.push_back(s);
		}
		descriptor_pool_create_info.poolSizeCount = sizes.size();
		descriptor_pool_create_info.pPoolSizes = sizes.ptr();
		VkResult res = vkCreateDescriptorPool(device, &descriptor_pool_create_info, nullptr, &pool->pool);
		if (res) {
			memdelete(pool);
			ERR_FAIL_COND_V_MSG(res, nullptr, "vkCreateDescriptorPool failed with error " + itos(res) + ".");
		}
		descriptor_pools[p_key].insert(pool);
	}
	pool->usage++;
	return pool;
}
void RenderingDeviceVulkan::_descriptor_pool_free(const DescriptorPoolKey &p_key, DescriptorPool *p_pool) {