Viscera hehe, I know, I'm sorry, very tired brain rn and I had typed up a detailed explaination, and then deleted it because of how disgustingly verbose it was.
To be specific lets say I have a project with a resolution of 320x240, I have the window set to scale that with the 'viewport' and 'keep' stretching options, in this case any post processing I do is also going to be rendered at 320x240, which is obviously not ideal for a crt shader.
So then I started to try to play with the content_scale_size of the window and the size/stretch_shrink of a viewport so that I would have more pixels to work with when I got to the crt shader, and this can get a usable result but it involves rendering at basically a 4k resolution before it looks almost acceptable downsampled back down to 1080.
So the last thing I could think of was foregoing the stretching options in the project settings and handling all of the scaling and centering myself, I've only tried going about this one way so far (this was the vervbose part) it involved using a subviewport + container fixed to 240p and anchored to the top left, I then stretch this across the entire canvas with a backbuffercopy and a texturerect...
oh. so the problem was that if at any point I correct the aspect ratio and/or center it, I now also have to compensate for the extra necessary pixels in each subsequent post processing pass.
But actually I just realized the approach that I was having a hard time imagining a second ago.
I initially dismissed it because it would mean that if for any reason I needed another pixel perfect shader between the stretched one and the aspect corrected one it would not be possible, and also there's a bit of artifacting funk if the window is too small and narrow, and I wanted to be able to turn the crt shader on and off in the editor, But nvm, I think I can live with this for now.
Though perhaps I missed a simpler solution
wait a minute...
Theres a solution with the 'canvas_items' stretch mode isnt there