### 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

.
}
		uint32_t uv2_offset = 0;
		if (uses_uv2s) {
			format |= ARRAY_FORMAT_TEX_UV2;
			uv2_offset = attribute_stride;
			attribute_stride += sizeof(float) * 2;
		}
		surface_attribute_create_cache.resize(vertices.size() * attribute_stride);
		uint8_t *surface_attribute_ptr = surface_attribute_create_cache.ptrw();
		for (uint32_t i = 0; i < vertices.size(); i++) {
			if (uses_colors) {
				uint8_t *color8 = (uint8_t *)&surface_attribute_ptr[i * attribute_stride];
				color8[0] = uint8_t(CLAMP(colors[i].r * 255.0, 0.0, 255.0));
				color8[1] = uint8_t(CLAMP(colors[i].g * 255.0, 0.0, 255.0));
				color8[2] = uint8_t(CLAMP(colors[i].b * 255.0, 0.0, 255.0));
				color8[3] = uint8_t(CLAMP(colors[i].a * 255.0, 0.0, 255.0));
			}
			if (uses_uvs) {
				float *uv = (float *)&surface_attribute_ptr[i * attribute_stride + uv_offset];
				uv[0] = uvs[i].x;
				uv[1] = uvs[i].y;
			}
			if (uses_uv2s) {
				float *uv2 = (float *)&surface_attribute_ptr[i * attribute_stride + uv2_offset];
				uv2[0] = uv2s[i].x;
				uv2[1] = uv2s[i].y;
			}
		}
	}
	RS::SurfaceData sd;