Replaced the entire effect parser + compiler and changed algorithm from a generated LALR parser to a fully handwritten recursive decent parser. This was a major rewrite and took quite a while, but it improves maintability, code size, code readability, and compiling performance.
Added missing "fwidth" intrinsic function
Added compiler error on encountering a recursive function call
Added "#pragma reshade skipoptimization" directive to disable compiler optimizations (except for simple ones like constant folding)
Changed the way shaders are generated under D3D9. Each pass now gets a separate list of samplers which is computed by walking through the dependency tree of the shader function. This was done to get around the 16 samplers per shader limit of D3D9.
Fixed D3D9 renderer not cleaning up the gathered depthstencils, which could lead to crashes
Fixed D3D8 surfaces created via "IDirect3DDevice8::CreateImageSurface" being placed in the wrong memory pool (this should fix the remaining graphical glitches and texture errors under D3D8)
Fixed D3D8 "IDirect3DDevice8::CopyRects" failing for a number of texture format/pool combinations
Fixed D3D8 to D3D9 shader assembler error due to reading from unitialized temporary registers
Fixed "MaxMipLevel" sampler property not doing what it should actually do, which is setting the lowest usable mipmap
Fixed Direct3D10/11 games crashing after calling "ID3D10Device::OMGetRenderTargets" or "ID3D11DeviceContext::OMGetRenderTargets"
Removed support for OpenGL layer planes (no modern hardware supports these anyway)
Removed logging for shader creation functions again, they spam the log and are useless
Removed deprecated "noise" intrinsic (wasn't actually implemented, but ReShade's compiler accepted it nevertheless)
Removed "tex2Dbias" intrinsic as it can cause problems on Intel hardware and is rarely used