"GRO" is the Generic Receive Offload" mechanism that reassembles smaller packets into larger ones, probably at the NIC driver level(?)
See also: Why am I receiving packet bigger than with raw packet? 1, as well as JLS2009: Generic receive Offload 2
If I'm not mistaken then XDP programs are called also "at the NIC driver level", that is, after the packets have been received and before passing them on to the Linux network stack. But how do XDP program execution and GRO relate to each other? Are XDP programs executed first and only then GRO? Or the other way round? Or like Schrödinger's Driver cat: it depends on the NIC driver writer?