### Godot version

4.1 beta 3, 4.1 beta 1

### System information

Windows 10 - 4.1 beta 3 - Android 12

### Issue description

Crash when using SoftBody on android mobile.

### Steps to reproduce

- Simple scene setup using a plane softbody, camera.
- Export to android mobile.
- Immediate crash when open the app.

### Minimal reproduction project

[SoftbodyMobileTest.zip](https://github.com/godotengine/godot/files/11871734/SoftbodyMobileTest.zip)

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);
		uint32_t zstd_size = decode_uint32(binptr + read_offset);
		read_offset += sizeof(uint32_t);
		uint32_t buf_size = (zstd_size > 0) ? zstd_size : smolv_size;
		Vector<uint8_t> smolv;
		const uint8_t *src_smolv = nullptr;
		if (zstd_size > 0) {
			
			smolv.resize(smolv_size);
			int dec_smolv_size = Compression::decompress(smolv.ptrw(), smolv.size(), binptr + read_offset, zstd_size, Compression::MODE_ZSTD);
			ERR_FAIL_COND_V(dec_smolv_size != (int32_t)smolv_size, RID());
			src_smolv = smolv.ptr();
		} else {
			src_smolv = binptr + read_offset;