Sorry if this has been covered... do we know the exact techniques employed?
Even so it's not very scientific.
Nvidia use a Gaussian kernel filter which is optimal in reducing high frequency artifacts, reducing flickering and maintaining consistency between frames and maintains geometry/shape as it is a symmetric filter. The region of support of the kernel can be adjusted. I don't know what Nvidia do to sharpen in post.
I don't know what AMD do.
Anyway, all of it is software and very easy to change. I see no reasons why AMD or Nvidia's solution necessarily have to be better or worse. With not much effort it is easy to reverse engineer the downsmapling algorithm used via a series of special test images (dirac/heavyside functions, i.e black lines and boxes on a white background). If every review says company X's scaling looks better then the next driver release of the competitor could use the same technique.
There is no single right way of doing this though. A Gaussian filter generally has the best properties to remove jaggies and prevent flicker but will cause increased blurring, plus is more CP intensive than say a bi linear technique.
Someone somewhere said AMD use a bi-linear technique but i highly doubt it, at least not without some other filters as well. Bilinear is just a straight arithmetic mean of a 2x2 pixel block. so imagine you have a black box on white background. if that 2x2 window covers exactly the black and then exactly the white then you will get a sharp defined edge of pure black then pure white. If the scene shifts by 1 single pixel then the 2x2 box wont align to the edge, and so the edge will contain a a column of gray pixels. This causes flicker in a moving image, plus distorts detail like text because depending on exactly where that 2x2 window different things happen. A Gaussian filter will sample a larger region so will always make a smooth transition between the black and white and will be the same no matter what the exact pixel alignment.
Here 0 is balck, 100 is 100% white, 50% is 0+100/2 = 50% gray.
Code:
Original:
0,0,0,0,100,100,100,100
BiLinear, well aligned:
0,0,100,100,
Bilinear different alignment since we have shifted one more pixel:
0,50,100,100
Potential Gaussian, this depends on the size of the filter kernel but is completely independent of the exact pixel alignment:
10,50,90,100
The Gaussian is evidently softer, or always soft. This gives it consistency and prevent flicker, it also takes care of noise, artifacts and jaggies. Imagine a 2x2 pixel block of noise (poor alpha testing on a leaf/grass or some such), with a bilinear if the alignment is bad then that 2x2 block will go straight through to the final image, with the Gaussian it will always be smoother out regardless. to counter act the softness you can then apply a sharpening filter, depending on how you sharpen you might get back a result like:
0,50,100,100 but the result will always be consistent between frames.
This way you have done the 2 key things: 1) Reduce jaggies, aliasing, artifacts and noise, 2) preserve perceived sharpness.