@alexb3d I should have clarified that this is meant for 3D cores that are capable of rendering at higher than original resolution. DeSmuME is one such example. Anyway I figured it out after a bit of messing around so I’ll share my solution:
shaders = "3"
shader0 = "stock.slang
filter_linear0 = "true"
scale_type_x0 = "source"
scale_x0 = "0.5"
scale_type_y0 = "source"
scale_y0 = "0.5"
shader1 = "stock.slang
filter_linear1 = "true"
scale_type_x1 = "source"
scale_x1 = "0.5"
scale_type_y1 = "source"
scale_y1 = "0.5"
shader2 = "stock.slang"
filter_linear2 = "false"
It’s just a few passes of the stock shader. First one halves the resolution, second one halves it again, and the last one is just for presenting the results with nearest neighbor sampling. I half the resolution twice because the emulator is rendering at 4x. A single pass with the scale set to 0.25 didn’t look as good for some reason that I’m too lazy to figure out.
Here are the results in New Super Mario Bros. Notice 3D elements like Mario, the cheep cheeps, sign and seaweed have enhanced smoothness and detail but still match resolution with the tile art, which is untouched.
Why not just use DeSmuME’s MSAA setting with 1x resolution you might be wondering. It doesn’t look quite as good and it causes artifacts in a lot of games. In this game for example it produces a weird dark outline around 3D objects due to the way they are composited onto the 2D background. Super sampling fixes that.