### Godot version

v4.0.beta14.official [28a24639c]
v4.0.1.stable.official [cacf49999]

### System information

Windows 11 22H2, Forward+, NVIDIA MX350 (528.02) and NVIDIA RTX2070 (517.00)
Ubuntu 22.04, Forward+, NVIDIA MX350 (525.85.05)

### Issue description

Instancing a GPUParticles3D can cause colored flashes on screen. In some cases (such as the minimal reproduction project), the flashes are small, however in my other project I have seen them fill the screen. I am still unsure what causes the different sizes

These are some example correct frames from the minimal reproduction project (the effect is supposed to be a fireball.)

<img width="578" alt="image" src="https://user-images.githubusercontent.com/8741983/214133602-ff0e5916-fa0b-4e52-8dac-9701b8220a1d.png">

<img width="578" alt="image" src="https://user-images.githubusercontent.com/8741983/214133646-c976fde1-569c-4d0a-9395-fd037f21e0b9.png">

These are some example incorrect frames.

<img width="578" alt="image" src="https://user-images.githubusercontent.com/8741983/214133760-8e4804e8-f194-4d31-b943-0d93ab6d60cb.png">

<img width="578" alt="image" src="https://user-images.githubusercontent.com/8741983/214132553-c6d4be93-5373-43b5-b52e-d9a33924e9bf.png">


### Steps to reproduce

Create two scenes, one with a GPUParticles3D, and one that instances those particles repeatedly, using a script. Flashes will occur on screen.

### Minimal reproduction project

[Particle Flash MRP.zip](https://github.com/godotengine/godot/files/10483071/Particle.Flash.MRP.zip)


Edit 1: Corrected driver version for my friend's computer.
Edit 2: Added note about the issue also appearing on Linux, and that the issue is still present in 4.0.1

*Bugsquad edit (keywords for easier searching): flicker, flickering*
if (RSG::threaded) {
		WARN_PRINT_ONCE("Calling this function with threaded rendering enabled stalls the renderer, use with care.");
	}
	const Particles *particles = particles_owner.get_or_null(p_particles);
	ERR_FAIL_COND_V(!particles, AABB());
	int total_amount = particles->amount;
	
	
	GLuint read_buffer = particles->sort_buffer_filled ? particles->sort_buffer : particles->back_instance_buffer;
	Vector<uint8_t> buffer = Utilities::buffer_get_data(GL_ARRAY_BUFFER, read_buffer, total_amount * sizeof(ParticleInstanceData3D));
	ERR_FAIL_COND_V(buffer.size() != (int)(total_amount * sizeof(ParticleInstanceData3D)), AABB());
	Transform3D inv = particles->emission_transform.affine_inverse();
	AABB aabb;
	if (buffer.size()) {
		bool first = true;
		const uint8_t *data_ptr = (const uint8_t *)buffer.ptr();
		uint32_t particle_data_size = sizeof(ParticleInstanceData3D) + sizeof(float) * particles->userdata_count;
		for (int i = 0; i < total_amount; i++) {
			const ParticleInstanceData3D &particle_data = *(const ParticleInstanceData3D *)&data_ptr[particle_data_size * i];
			
			if (particle_data.xform[0] > 0.0) {
				Vector3 pos = Vector3(particle_data.xform[3], particle_data.xform[7], particle_data.xform[11]);
				if (!particles->use_local_coords) {
					pos = inv.xform(pos);
				}