### Godot version

v4.0.3.stable.mono.official [5222a99f5]

### System information

Windows 11, Forward+, Nvidia 3070 latest driver

### Issue description

When instancing many GPUParticles2D, occasionally the following error will be printed to the debugger console:

```
E 0:15:35:0980   compute_list_dispatch: Uniforms were never supplied for set (3) at the time of drawing, which are required by the pipeline
  <C++ Error>    Method/function failed.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:8007 @ compute_list_dispatch()
```

Massive artifacts coincide with this error. See example below:

https://github.com/godotengine/godot/assets/4622925/07b31c12-5388-4977-9c13-e91c8b6442fb

I am having difficulty recreating the exact conditions for this error. It seems to happen when many GPU particles are added to the tree at around the same time.

### Steps to reproduce

1. Instance many particles at once.

I realize this isn't helpful. I'm going to do more investigation to see if I can get more accurate reproduction steps.

### Minimal reproduction project

N/A yet
WARN_PRINT("Invalid pipelines cache magic number.");
			return;
		}
		pipelines_cache.buffer.resize(file_data.size() - sizeof(PipelineCacheHeader));
		memcpy(pipelines_cache.buffer.ptrw(), file_data.ptr() + sizeof(PipelineCacheHeader), pipelines_cache.buffer.size());
		VkPhysicalDeviceProperties props;
		vkGetPhysicalDeviceProperties(context->get_physical_device(), &props);
		bool invalid_uuid = false;
		for (size_t i = 0; i < VK_UUID_SIZE; i++) {
			if (header.uuid[i] != props.pipelineCacheUUID[i]) {
				invalid_uuid = true;
				break;
			}
		}
		if (header.data_hash != hash_murmur3_buffer(pipelines_cache.buffer.ptr(), pipelines_cache.buffer.size()) || header.data_size != (uint32_t)pipelines_cache.buffer.size() || header.vendor_id != props.vendorID || header.device_id != props.deviceID || header.driver_abi != sizeof(void *) || invalid_uuid) {
			WARN_PRINT("Invalid pipelines cache header.");
			pipelines_cache.current_size = 0;
			pipelines_cache.buffer.clear();
		} else {
			pipelines_cache.current_size = pipelines_cache.buffer.size();
		}
	}
}
void RenderingDeviceVulkan::_update_pipeline_cache(bool p_closing) {
	size_t pso_blob_size = 0;
	float save_interval = GLOBAL_GET("rendering/rendering_device/pipeline_cache/save_chunk_size_mb");
	VkResult vr = vkGetPipelineCacheData(device, pipelines_cache.cache_object, &pso_blob_size, nullptr);
	ERR_FAIL_COND(vr);
	size_t difference = (pso_blob_size - pipelines_cache.current_size) / (1024 * 1024);
	if (p_closing && Engine::get_singleton()->is_editor_hint()) {