### 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
Vector<Vector<VkDescriptorSetLayoutBinding>> set_bindings;
	Vector<Vector<UniformInfo>> uniform_info;
	set_bindings.resize(binary_data.set_count);
	uniform_info.resize(binary_data.set_count);
	for (uint32_t i = 0; i < binary_data.set_count; i++) {
		ERR_FAIL_COND_V(read_offset + sizeof(uint32_t) >= binsize, RID());
		uint32_t set_count = decode_uint32(binptr + read_offset);
		read_offset += sizeof(uint32_t);
		const RenderingDeviceVulkanShaderBinaryDataBinding *set_ptr = reinterpret_cast<const RenderingDeviceVulkanShaderBinaryDataBinding *>(binptr + read_offset);
		uint32_t set_size = set_count * sizeof(RenderingDeviceVulkanShaderBinaryDataBinding);
		ERR_FAIL_COND_V(read_offset + set_size >= binsize, RID());
		for (uint32_t j = 0; j < set_count; j++) {
			UniformInfo info;
			info.type = UniformType(set_ptr[j].type);
			info.writable = set_ptr[j].writable;
			info.length = set_ptr[j].length;
			info.binding = set_ptr[j].binding;
			info.stages = set_ptr[j].stages;
			VkDescriptorSetLayoutBinding layout_binding;
			layout_binding.pImmutableSamplers = nullptr;
			layout_binding.binding = set_ptr[j].binding;
			layout_binding.descriptorCount = 1;
			layout_binding.stageFlags = 0;
			for (uint32_t k = 0; k < SHADER_STAGE_MAX; k++) {
				if (set_ptr[j].stages & (1 << k)) {
					layout_binding.stageFlags |= shader_stage_masks[k];
				}
			}
			switch (info.type) {
				case UNIFORM_TYPE_SAMPLER: {