That's up to the compositor, but pretty much everyone does it per surface indeed.
What everyone means by "it's like macOS" is that the same "render at ceil(scale) and downscale" general principle is used.
What everyone means by "it's like macOS" is that the same "render at ceil(scale) and downscale" general principle is used.
The quick test is, when I do a screenshot, I get a file with dimensions same as physical display, not logical resolution. On macOS, it is exacly the other way.
Scaling with GPU is more flexible; you can do things per surface instead of per desktop; but slightly more complicated (because you do things per surface instead of per desktop), takes away GPU capacity/memory bandwidth from applications when then might it, and is more power hungry when the GPU could be idle.