### 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
} break;
				default: {
					ERR_FAIL_V(RID());
				}
			}
			set_bindings.write[i].push_back(layout_binding);
			uniform_info.write[i].push_back(info);
		}
		read_offset += set_size;
	}
	ERR_FAIL_COND_V(read_offset + binary_data.specialization_constants_count * sizeof(RenderingDeviceVulkanShaderBinarySpecializationConstant) >= binsize, RID());
	Vector<Shader::SpecializationConstant> specialization_constants;
	for (uint32_t i = 0; i < binary_data.specialization_constants_count; i++) {
		const RenderingDeviceVulkanShaderBinarySpecializationConstant &src_sc = *(reinterpret_cast<const RenderingDeviceVulkanShaderBinarySpecializationConstant *>(binptr + read_offset));
		Shader::SpecializationConstant sc;
		sc.constant.int_value = src_sc.int_value;
		sc.constant.type = PipelineSpecializationConstantType(src_sc.type);
		sc.constant.constant_id = src_sc.constant_id;
		sc.stage_flags = src_sc.stage_flags;
		specialization_constants.push_back(sc);
		read_offset += sizeof(RenderingDeviceVulkanShaderBinarySpecializationConstant);
	}
	Vector<Vector<uint8_t>> stage_spirv_data;
	Vector<ShaderStage> stage_type;
	for (uint32_t i = 0; i < binary_data.stage_count; i++) {
		ERR_FAIL_COND_V(read_offset + sizeof(uint32_t) * 3 >= binsize, RID());
		uint32_t stage = decode_uint32(binptr + read_offset);
		read_offset += sizeof(uint32_t);
		uint32_t smolv_size = decode_uint32(binptr + read_offset);
		read_offset += sizeof(uint32_t);