### Godot version

v4.0.3.stable.official [5222a99f5]

### System information

Godot v4.0.3 - EndeavourOS #1 SMP PREEMPT_DYNAMIC Wed, 14 Jun 2023 20:10:31 +0000 - Vulkan (Forward+) - dedicated NVIDIA GeForce RTX 2070 SUPER (nvidia; 530.41.03) - Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz (8 Threads)

### Issue description

Game crashes with the following errors:

```
E 0:00:03:0788   compute_list_begin: Only one draw/compute list can be active at the same time.
  <C++ Error>    Condition "compute_list != nullptr" is true. Returning: INVALID_ID
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:7716 @ compute_list_begin()
E 0:00:03:0788   compute_list_bind_compute_pipeline: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:7729 @ compute_list_bind_compute_pipeline()
E 0:00:03:0788   compute_list_bind_uniform_set: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:7793 @ compute_list_bind_uniform_set()
E 0:00:03:0788   compute_list_bind_uniform_set: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:7793 @ compute_list_bind_uniform_set()
E 0:00:03:0788   compute_list_set_push_constant: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:7947 @ compute_list_set_push_constant()
E 0:00:03:0788   compute_list_dispatch_threads: Condition "p_list != ID_TYPE_COMPUTE_LIST" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:8027 @ compute_list_dispatch_threads()
E 0:00:03:0788   compute_list_end: Condition "!compute_list" is true.
  <C++ Source>   drivers/vulkan/rendering_device_vulkan.cpp:8175 @ compute_list_end()
```
The total number of errors is a multiple of 7 as the whole set repeats itself some random number of times.

I was able to reproduce the issue with Forward+, Mobile and Compatibility renderer. With Compatibility the game also crashes but without errors.
I was unable to reproduce the issue on machines with Intel iGPUs:
- Godot v4.0.3 - NixOS 22.11 (Raccoon) - Vulkan (Forward+) - integrated Intel(R) HD Graphics 620 (KBL GT2) () - Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz (4 Threads)
- Godot v4.0.3 - macOS 11.7.7 - Vulkan (Forward+) - integrated Intel Iris Graphics - Intel(R) Core(TM) i5-4308U CPU @ 2.80GHz (4 Threads)

Maybe related to #70607.

### Steps to reproduce

I am creating a new instance of Node3D every frame with two GPUParticles3D children: **Emitting** and **NotEmitting**. Only the first one has `emitting` set to `true`.

When the number of Node3D instances reaches 500 or a bit more (can be 500, 503, 505, 514, etc.), the game either freezes or crashes with and sometimes without errors in the Errors tab.

I have also observed that the crashes/freezes **don't** occur in the reproduction project when any of the following is true:
- **NotEmitting**'s `visibility` is set to `false`
- **Emitting**'s `lifetime` is below 0.17. Above 0.19 it crashes. Around 0.18 it sometimes crashes and sometimes doesn't.
- **Emitting**'s `transform_align` is not set to "Z-Billboard" nor "Z-Billboard + Y to Velocity"

Also when **Emitting**'s `one_shot` is set to `false` the game only crashes/freezes and there are no errors in the Errors tab.

In my other project (which I extracted the minimal reproduction project from), the issue occurs regardless of **NotEmitting**'s `visibility` and **Emitting**'s `lifetime` values. The only workaround there seems to be setting **Emitting**'s `transform_align` to a value without "Z-Billboard" in it.


### Minimal reproduction project

[gpuparticles3d_crash.zip](https://github.com/godotengine/godot/files/11810916/gpuparticles3d_crash.zip)

}
	return ret;
}
RID RenderingDeviceVulkan::shader_create_from_bytecode(const Vector<uint8_t> &p_shader_binary) {
	const uint8_t *binptr = p_shader_binary.ptr();
	uint32_t binsize = p_shader_binary.size();
	uint32_t read_offset = 0;
	
	ERR_FAIL_COND_V(binsize < sizeof(uint32_t) * 3 + sizeof(RenderingDeviceVulkanShaderBinaryData), RID());
	ERR_FAIL_COND_V(binptr[0] != 'G' || binptr[1] != 'S' || binptr[2] != 'B' || binptr[3] != 'D', RID());
	uint32_t bin_version = decode_uint32(binptr + 4);
	ERR_FAIL_COND_V(bin_version != SHADER_BINARY_VERSION, RID());
	uint32_t bin_data_size = decode_uint32(binptr + 8);
	const RenderingDeviceVulkanShaderBinaryData &binary_data = *(reinterpret_cast<const RenderingDeviceVulkanShaderBinaryData *>(binptr + 12));
	Shader::PushConstant push_constant;
	push_constant.size = binary_data.push_constant_size;
	push_constant.vk_stages_mask = binary_data.push_constant_vk_stages_mask;
	uint32_t vertex_input_mask = binary_data.vertex_input_mask;
	uint32_t fragment_output_mask = binary_data.fragment_output_mask;
	bool is_compute = binary_data.is_compute;
	const uint32_t compute_local_size[3] = { binary_data.compute_local_size[0], binary_data.compute_local_size[1], binary_data.compute_local_size[2] };
	read_offset += sizeof(uint32_t) * 3 + bin_data_size;
	String name;
	if (binary_data.shader_name_len) {
		name.parse_utf8((const char *)(binptr + read_offset), binary_data.shader_name_len);
		read_offset += binary_data.shader_name_len;
		if ((binary_data.shader_name_len % 4) != 0) { 
			read_offset += 4 - (binary_data.shader_name_len % 4);
		}
	}