### Godot version

v4.0.2.stable.official [7a0977ce2]

### System information

GNU/Linux, GLES3 & Vulkan, Intel UHD 770

### Issue description

When passing arrays of color objects to the shader, the shader program cannot get the values, even when converted to vector arrays.

And source_color hint does not convert colors correctly when passed through an array.

```
var colors := [
	Color.hex(0x0088ffff),
	Color.hex(0xff000088),
	Color.hex(0x00ff0000),
	Color.hex(0x0000ffff),
]
func _ready() -> void:
	var shader: ShaderMaterial = mesh.material
	shader.set_shader_parameter("vec4_no_hint", colors)
	shader.set_shader_parameter("vec4_hint", colors)
	shader.set_shader_parameter("vec3_no_hint", colors)
	shader.set_shader_parameter("vec3_hint", colors)
	var cvt_colors = colors.map(func (c): return Vector4(c.r, c.g, c.b, c.a))
	shader.set_shader_parameter("cvt_vec4_no_hint", cvt_colors)
	shader.set_shader_parameter("cvt_vec4_hint", cvt_colors)
	shader.set_shader_parameter("cvt_vec3_no_hint", cvt_colors)
	shader.set_shader_parameter("cvt_vec3_hint", cvt_colors)
```

Result With GLES3:
![图片](https://user-images.githubusercontent.com/20413045/232321140-3118a776-e76e-4e73-954f-c7b4f155d1ec.png)

Result With Vulkan:
![图片](https://user-images.githubusercontent.com/20413045/232321207-d52cb2e5-c644-40a8-89ee-71da8b58e408.png)


### Steps to reproduce

Open the sample project attached, open the test scene, switch to the 3D tab, you will see it.

### Minimal reproduction project

[test-color-uniform-array.tar.gz](https://github.com/godotengine/godot/files/11242561/test-color-uniform-array.tar.gz)

material_data_request_func[RS::SHADER_CANVAS_ITEM] = _create_canvas_material_func;
	material_data_request_func[RS::SHADER_PARTICLES] = _create_particles_material_func;
	material_data_request_func[RS::SHADER_SKY] = _create_sky_material_func;
	material_data_request_func[RS::SHADER_FOG] = nullptr;
	static_assert(sizeof(GlobalShaderUniforms::Value) == 16);
	global_shader_uniforms.buffer_size = MAX(4096, (int)GLOBAL_GET("rendering/limits/global_shader_variables/buffer_size"));
	if (global_shader_uniforms.buffer_size > uint32_t(Config::get_singleton()->max_uniform_buffer_size)) {
		global_shader_uniforms.buffer_size = uint32_t(Config::get_singleton()->max_uniform_buffer_size);
		WARN_PRINT("Project setting \"rendering/limits/global_shader_variables/buffer_size\" exceeds maximum uniform buffer size of: " + itos(Config::get_singleton()->max_uniform_buffer_size));
	}
	global_shader_uniforms.buffer_values = memnew_arr(GlobalShaderUniforms::Value, global_shader_uniforms.buffer_size);
	memset(global_shader_uniforms.buffer_values, 0, sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size);
	global_shader_uniforms.buffer_usage = memnew_arr(GlobalShaderUniforms::ValueUsage, global_shader_uniforms.buffer_size);
	global_shader_uniforms.buffer_dirty_regions = memnew_arr(bool, global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE);
	memset(global_shader_uniforms.buffer_dirty_regions, 0, sizeof(bool) * global_shader_uniforms.buffer_size / GlobalShaderUniforms::BUFFER_DIRTY_REGION_SIZE);
	glGenBuffers(1, &global_shader_uniforms.buffer);
	glBindBuffer(GL_UNIFORM_BUFFER, global_shader_uniforms.buffer);
	glBufferData(GL_UNIFORM_BUFFER, sizeof(GlobalShaderUniforms::Value) * global_shader_uniforms.buffer_size, nullptr, GL_DYNAMIC_DRAW);
	glBindBuffer(GL_UNIFORM_BUFFER, 0);
	{
		
		ShaderCompiler::DefaultIdentifierActions actions;
		actions.renames["VERTEX"] = "vertex";
		actions.renames["LIGHT_VERTEX"] = "light_vertex";
		actions.renames["SHADOW_VERTEX"] = "shadow_vertex";
		actions.renames["UV"] = "uv";
		actions.renames["POINT_SIZE"] = "point_size";
		actions.renames["MODEL_MATRIX"] = "model_matrix";
		actions.renames["CANVAS_MATRIX"] = "canvas_transform";
		actions.renames["SCREEN_MATRIX"] = "screen_transform";