### Godot version

4.0b17

### System information

macOS 13.2

### Issue description

The shader function fma, used by the visual shader UVFunc node generated code:
```
// UVFunc:5
vec2 n_in5p1 = vec2(6.00000, 6.00000);
vec2 n_in5p2 = vec2(0.50000, 0.50000);
vec2 n_out5p0 = fma((UV - n_in5p2), n_in5p1, n_in5p2);
```
Does not seem to be defined in the Compatibility renderer, causing shader compilation to fail if it's used with a lot of errors and debug output (10000+ messages as it prints out a lot of engine shader code?). Ending with the relevant errors:
 ```
drivers/gles3/shader_gles3.cpp:242 - SceneShaderGLES3: Fragment shader compilation failed:
  ERROR: 0:928: Invalid call of undeclared identifier 'fma'
  ERROR: 0:930: Use of undeclared identifier 'm_n_out5p0'
  
  drivers/gles3/shader_gles3.cpp:342 - Method/function failed.
```

Simple shader using fma in Mobile:
![Screenshot 2023-02-08 at 09 52 38](https://user-images.githubusercontent.com/17763524/217483066-fe0feab7-72c4-4db7-a44e-041a1ad93f25.jpg)

Switch to Compatibility renderer:
![Screenshot 2023-02-08 at 09 53 27](https://user-images.githubusercontent.com/17763524/217483149-4fdef308-67cf-40d2-8d4a-d72dc7c85e70.jpg)



### Steps to reproduce

- Start a project in Mobile
- Make a shader where you use the fma function, for example the shader below in the reproduction field. Or a visual shader using the UVFunc node.
- Assign the shader to a shader material and apply this to a visible mesh, observe it renders
- Switch project to Compatibility renderer
- See errors and failed shader compilation

### Minimal reproduction project

Minimal test shader, use in Compatibility renderer:

```
shader_type spatial;

void fragment() {
	vec2 n_in5p1 = vec2(6.00000, 6.00000);
	vec2 n_in5p2 = vec2(0.50000, 0.50000);
	vec2 n_out5p0 = fma((UV - n_in5p2), n_in5p1, n_in5p2);

	ALBEDO = vec3(1,0,0);
}

```
ClassDB::bind_method(D_METHOD("set_comparison_type", "type"), &VisualShaderNodeCompare::set_comparison_type);
	ClassDB::bind_method(D_METHOD("get_comparison_type"), &VisualShaderNodeCompare::get_comparison_type);
	ClassDB::bind_method(D_METHOD("set_function", "func"), &VisualShaderNodeCompare::set_function);
	ClassDB::bind_method(D_METHOD("get_function"), &VisualShaderNodeCompare::get_function);
	ClassDB::bind_method(D_METHOD("set_condition", "condition"), &VisualShaderNodeCompare::set_condition);
	ClassDB::bind_method(D_METHOD("get_condition"), &VisualShaderNodeCompare::get_condition);
	ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, "Float,Int,UInt,Vector2,Vector3,Vector4,Boolean,Transform"), "set_comparison_type", "get_comparison_type");
	ADD_PROPERTY(PropertyInfo(Variant::INT, "function", PROPERTY_HINT_ENUM, "a == b,a != b,a > b,a >= b,a < b,a <= b"), "set_function", "get_function");
	ADD_PROPERTY(PropertyInfo(Variant::INT, "condition", PROPERTY_HINT_ENUM, "All,Any"), "set_condition", "get_condition");
	BIND_ENUM_CONSTANT(CTYPE_SCALAR);
	BIND_ENUM_CONSTANT(CTYPE_SCALAR_INT);
	BIND_ENUM_CONSTANT(CTYPE_SCALAR_UINT);
	BIND_ENUM_CONSTANT(CTYPE_VECTOR_2D);
	BIND_ENUM_CONSTANT(CTYPE_VECTOR_3D);
	BIND_ENUM_CONSTANT(CTYPE_VECTOR_4D);
	BIND_ENUM_CONSTANT(CTYPE_BOOLEAN);
	BIND_ENUM_CONSTANT(CTYPE_TRANSFORM);
	BIND_ENUM_CONSTANT(CTYPE_MAX);
	BIND_ENUM_CONSTANT(FUNC_EQUAL);
	BIND_ENUM_CONSTANT(FUNC_NOT_EQUAL);
	BIND_ENUM_CONSTANT(FUNC_GREATER_THAN);
	BIND_ENUM_CONSTANT(FUNC_GREATER_THAN_EQUAL);
	BIND_ENUM_CONSTANT(FUNC_LESS_THAN);
	BIND_ENUM_CONSTANT(FUNC_LESS_THAN_EQUAL);
	BIND_ENUM_CONSTANT(FUNC_MAX);
	BIND_ENUM_CONSTANT(COND_ALL);
	BIND_ENUM_CONSTANT(COND_ANY);
	BIND_ENUM_CONSTANT(COND_MAX);
}
VisualShaderNodeCompare::VisualShaderNodeCompare() {