### Godot version

Tested on 4.0.3 and 4.1 beta 2

### System information

Arch Linux

### Issue description

In a spatial shader, using the hint `hint_normal_roughness_texture` and then trying to sample that uniform in the `fragment` function, as outlined in the screen reading shader docs, while using the mobile renderer causes shader compilation failure. It can also freeze the editor requiring a SIGKILL to end the process if the shader is applied to a mesh and run.

```servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp:182 - Condition "!shader_singleton->shader.version_is_valid(version)" is true.```

It seems the shader compiler still validates the gdshader, generates the shader code, which references `normal_roughness_buffer`, but this is only defined in the glsl for the forward clustered renderer and is left undefined in mobile, causing an "undeclared identifier" error in the generated shader code.

The compatibility shader, by comparison, explicitly errors in the shader editor and will not try to compile the shader. If the mobile renderer is not intended to support this, it should probably use the same behaviour, and compatibility with the renderers explained in the docs.

### Steps to reproduce

Create a shader:

```
shader_type spatial;

uniform sampler2D normal_roughness_texture : hint_normal_roughness_texture, repeat_disable, filter_nearest;

void fragment() {
    vec3 screen_normal = texture(normal_roughness_texture, SCREEN_UV).xyz;
}
```

Switch to mobile renderer.

### Minimal reproduction project

N/A
an->initializer.push_back(n);
			} else if (!auto_size && tk.type == TK_PARENTHESIS_CLOSE) {
				an->initializer.push_back(n);
				break;
			} else if (auto_size && tk.type == TK_CURLY_BRACKET_CLOSE) {
				an->initializer.push_back(n);
				break;
			} else {
				if (auto_size) {
					_set_expected_error("}", ",");
				} else {
					_set_expected_error(")", ",");
				}
				return nullptr;
			}
			idx++;
		}
		if (!auto_size && !undefined_size && an->initializer.size() != array_size) {
			_set_error(RTR("Array size mismatch."));
			return nullptr;
		}
	} else {
		_set_error(RTR("Expected array initialization."));
		return nullptr;
	}
	an->datatype = type;
	an->struct_name = struct_name;
	return an;
}
ShaderLanguage::Node *ShaderLanguage::_parse_array_constructor(BlockNode *p_block, const FunctionInfo &p_function_info, DataType p_type, const StringName &p_struct_name, int p_array_size) {