A 3D-card build gives the card only part of the frame: measure before upscaling
What to know
A build named after a 3D card does not always hand its scene to the card. POD's ATI Rage and S3 ViRGE builds draw into DirectDraw surfaces at 640 × 480 and give the chip only untextured faces: in a race on Beltane the S3 build made 15,000 S3DTK_TriangleSet calls, every one Gouraud, and never created a texture surface; what both chips drew was the cars' shadows and light beams (measured, by counting calls by rendering type in a stand-in library). The textured track and cars were the game's own software renderer, as in the software build.
So redrawing such a build's card calls at a higher resolution sharpens only what the card drew. Before choosing between scaling the finished frame and redrawing at a higher resolution, count the card calls by kind in one real scene (a counter in the probe library is enough), and check whether texture surfaces are ever made. Imports hint at it too: an ATI3DCIF build that does not import ATI3DCIF_TextureReg never gives the chip a texture. In POD only the Glide build gives the card everything, so only its scene draws sharper; the other two get a good frame scaler (wrapper/scalers).