If it's in fact worth the effort to define some kind of sensible API (and I'm not sure wined3dx_get_image_info() from this MR qualifies...)
I guess that's the fundamental question. I'm not sure that's the case. Working our way through one piece at a time, like I mentioned in my previous comment, might tell us that without making the effort of doing the whole design beforehand to then maybe throw everything away.
My most pressing objective here is to unblock further d3dx* work, in particular for features already implemented for other d3dx* versions. Duplicating tons of code still seems very wrong to me. PARENTSRC between different d3dx* versions should be okay for the time being[*]. Maybe "forever" as well, if we figure out that we want to stop there and not create a separate DLL, or move the implementation to vkd3d, after all. Either way, it seems to me that it would be best evaluated once we start to try and fit the different APIs from d3dx9, 10 and 11 into a mostly shared codebase.
[*]: There's the unfortunate issue that PARENTSRC is already in use for d3dx9 and d3dx11 DLLs (from the _xx versions towards the "real" one, respectively _36 and _43). We don't really need those though, for the most part this was to avoid forwards for e.g. bug 21817, which we can now do otherwise with -import in the spec file. Or we could make PARENTSRC work with multiple paths, although that's probably unnecessary.