UsdShadeCoordSysAPI and BlockBindings()

Hello! I’m a little confused about the expected behaviour of BlockBindings() on UsdShadeCoordSysAPI. Given the following:

p_torus = stage.GetPrimAtPath("/World/Xform/Torus")
p_cube = stage.GetPrimAtPath("/World/Xform/Cube")
p_xform = stage.GetPrimAtPath("/World/Xform")
p_plane = stage.GetPrimAtPath("/World/Plane")

cs = UsdShade.CoordSysAPI.Apply(p_xform, "decal01")
cs.Bind("/World/Plane")

cs = UsdShade.CoordSysAPI.Apply(p_torus, "decal01")
cs.BlockBinding()

print(f"cube: {UsdShade.CoordSysAPI.FindBindingsWithInheritanceForPrim(p_cube)}")
print(f"torus: {UsdShade.CoordSysAPI.FindBindingsWithInheritanceForPrim(p_torus)}")

I would expect p_cube to print ["/World/Plane"] (inherited from /World/Xform) and p_torus to print [], but they both see the binding to /World/Plane, even though it’s blocked on p_torus. If this is expected behaviour, then BlockBinding() seems useless? Is this a bug or have I completely misunderstood what that’s supposed to do?

Hi @anderslanglands , BlockBinding only blocks any binding on that prim from a weaker layer. I don’t think we have any way to block an inherited binding! Just as we don’t have a way to block an inherited primvar, nor an inherited Material binding… if we need to address this, I’d suggest we do it in a uniform way for at least materials and coordSys’s.