The teapot is "broken", or rather, not everything should be a quad patch. The patches at the top degenerate to triangles. That's why the derivatives can fail and produce those artifacts. I remember "solving" it by clamping the domain values for the derivatives to (e, 1-e) with some small e.

Ah! I see, yes, when I was looking at the model in wireframe, indeed the top part looked triangular but I didn't associate this with the fact that tessellator is using the quad domain.

Your "solution" worked out great:

static const float epsilon = 1e-5f; float u = min(max(coordinates.x, epsilon), 1.0f - epsilon); float v = min(max(coordinates.y, epsilon), 1.0f - epsilon);