### Godot version

4.0.0-beta-10

### System information

Windows 11

### Issue description

It appears that ImmediateMesh is always recalculating its own normals regardless of what is set.



### Steps to reproduce

1. Create MeshInstance3D node
2. Add [Tool] script and set mesh to ImmediateMesh
3. Use the following code in Process

```        
       if (Mesh is null)
            Mesh = new ImmediateMesh();

        if (Mesh is ImmediateMesh mesh)
        {
            mesh.ClearSurfaces();
            mesh.SurfaceBegin(Mesh.PrimitiveType.Triangles);

            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(-10, 10, -10f));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(10, 10, 10));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(-10, 10, 10));

            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(-10, 10, -10f));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(10, 10, -10));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(10, 10, 10));

            mesh.SurfaceEnd();
        }
```

You can either set the rendering for the scene to normals or you can get the array data and notice that the normals don't match what was set.

### Minimal reproduction project

.
value |= CLAMP(int(n.x * 1023.0), 0, 1023);
				value |= CLAMP(int(n.y * 1023.0), 0, 1023) << 10;
				value |= CLAMP(int(n.z * 1023.0), 0, 1023) << 20;
				*normal = value;
			}
			if (uses_tangents) {
				uint32_t *tangent = (uint32_t *)&surface_vertex_ptr[i * vertex_stride + tangent_offset];
				Plane t = tangents[i];
				uint32_t value = 0;
				value |= CLAMP(int((t.normal.x * 0.5 + 0.5) * 1023.0), 0, 1023);
				value |= CLAMP(int((t.normal.y * 0.5 + 0.5) * 1023.0), 0, 1023) << 10;
				value |= CLAMP(int((t.normal.z * 0.5 + 0.5) * 1023.0), 0, 1023) << 20;
				if (t.d > 0) {
					value |= 3UL << 30;
				}
				*tangent = value;
			}
		}
	}
	if (uses_colors || uses_uvs || uses_uv2s) {
		uint32_t attribute_stride = 0;
		if (uses_colors) {
			format |= ARRAY_FORMAT_COLOR;
			attribute_stride += sizeof(uint8_t) * 4;
		}
		uint32_t uv_offset = 0;
		if (uses_uvs) {
			format |= ARRAY_FORMAT_TEX_UV;
			uv_offset = attribute_stride;
			attribute_stride += sizeof(float) * 2;