A rare occasion where I can quote myself recursively, so I'll do just that: https://www.winehq.org/pipermail/wine-devel/2019-April/143293.html
While it would be nice to have some nice and detailed tests along the lines of mesh.c:test_compute_normals(), I'll settle for the minimum necessary to confirm that the arguments to D3DXComputeTangentFrameEx() are correct (or otherwise, e.g. if that can't be tested for whatever reason, a small comment in the code).