This is a very long term sub-project started some time ago in my private build which will mainly focus on:
1) [DONE] Correcting base + mipmap texture uploading to Texture RAM (i.e. all 10 LOD levels + decoding of tiles < 8x8). Patch posted.
2) Emulating, if technically possible with a Radeon HD4850 GPU..., quad textures, or at least a way to alter texture coordinates so that, for example, I can fix Fighting Vipers 2 texture issues in helicopters' search lights during attract demo. Also there's some game (like VON2) that, during the boot process, seems to continuously work with textures. This "thrashes" my video card which makes the whole OS crawl to the point that becomes unusable. Disabling any texture fetch operation in the fragment shader solves the problem. I don't know if it's a driver bug or something else. Work not started.
3) [DONE] Implementing texture filtering and coordinate wrapping modes (repeat, clamp-to-edge, mirrored, etc.) in fragment shader, simulating as much as possible the Real3D behavior. I'm using texelFetch and bypassing as much as possible the OpenGL sampler configuration. The performance impact is almost imperceptible. Patch pending.
4) [DONE] Implementing pixel dilate in alpha channel texels for format-0-and-contour textures, like the Real3D. It's implemented in fragment shader with very little to moderate performance impact. Patch pending.
5) [WIP] Decoding the NPScale polygon bits. This will be very hard, all my attempts so far failed. I've currently done some very basic complementary work, however the data itself needs to be understood. I suspect it's just an offset from a standard lod bias value that, in its turn, is computed from the dFdx and dFdx of the texture coordinates. Patch pending.
6) [WIP] Implementing the SetContourThreshold function. From a last check with Ian it seems that's used by the SDK function getPackedTexel5551() to pre-compute texture alpha channel before being stored. This means the texel RGBA fetched values are the definitive one. The only thing to be done at render time is to discard the fragment when texel alpha value is under a certain threshold which happens to be always 32 / 255. Patch pending.
7) Understanding the SetTranslatorMapEntry function, and where to fetch the values. Work not started.
8) [DONE] Confirming the correct scaling factor for detail textures. Patch posted.
That's all for now.
2017-12-12 EDIT: Added translator map to-do
2018-01-13 EDIT: Updates to points 2, 5 and 6
2018-01-15 EDIT: Added point 8