Interesting stuff for DX8 wrapper (born to fix a problem with Splinter Cell 2):
When taking advantage of shadowmap textures supported since GeForce 3, there is a difference between DirectX8 (used by the game) and DirectX9+ in how the API expects the Z/W value at input of the texture sampler with shadowmap texture. For DirectX8 the application is supposed to provide the value in <0;2^bitdepth-1> range where the bitdepth is bit depth of the depth texture. For all other APIs the value is expected to be as <0;1>. For more info see here. It seems that starting with some version of the driver or HW, the DirectX8 path no longer comply with the original behavior and instead expects the DirectX9+ behavior.