Polygon with texture have different result using primitive and entity?

entity related code:

const texturedPolygon = viewer.entities.add({
  name:
    "textured polygon",
  polygon: {
    hierarchy: new Cesium.PolygonHierarchy([
        new Cesium.Cartesian3(-2764622.5728855827, 4781976.036771199, 3178382.5491336337),
        new Cesium.Cartesian3(-2764624.5834597256, 4781972.0589881, 3178386.756631693),
        new Cesium.Cartesian3(-2764625.419614252, 4781971.92377269, 3178386.2362699057),
        new Cesium.Cartesian3(-2764623.409040367, 4781975.901555944, 3178382.0287713944),
      ]),
    
    perPositionHeight: true,
    material: "../images/Cesium_Logo_Color.jpg",
  },
});

result picture:


primitve related code:

const pGeo = new Cesium.GeometryInstance({
    geometry: new Cesium.PolygonGeometry({
      polygonHierarchy: new Cesium.PolygonHierarchy([
        new Cesium.Cartesian3(-2764622.5728855827, 4781976.036771199, 3178382.5491336337),
        new Cesium.Cartesian3(-2764624.5834597256, 4781972.0589881, 3178386.756631693),
        new Cesium.Cartesian3(-2764625.419614252, 4781971.92377269, 3178386.2362699057),
        new Cesium.Cartesian3(-2764623.409040367, 4781975.901555944, 3178382.0287713944),
      ]),
      perPositionHeight: true,
    }),
    id: "textured polygon",
    attributes: {
      color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED),
    },
  });
  const appearance = new Cesium.MaterialAppearance({
    material: new Cesium.Material({
      fabric: {
        type: 'Image',
        uniforms: {
          image: '../images/Cesium_Logo_Color.jpg',
        },
      },
    }),
  });
  const primitive = new Cesium.Primitive({
    geometryInstances: [pGeo],
    appearance,
    releaseGeometryInstances: false,
  });

primitive result picture: