It’d be anything you could describe a world hit position from within a shader, with whatever accessible information you can prepare. This is why the first parallax corrected cubemaps used axis aligned bounding boxes and spheres. Very cheap and simple to test for intersections.
But more complicated geometry could be intersection tested with either assemblies of primitives, distance fields or depth maps.
For example, if you wanted to make a room with columns, you could use a ray cylinder intersections in addition to the box. The problem is each primitive in view needs it’s own ray intersection test, so many of them all at once gets expensive. But there are ways to manage that.
It might still be cheaper than distance fields or depth maps since primitives can be traced without loops.
Once you have the nearest hit position, it works no different than the single primitive correction.