D3D versions before 8 are part of DirectDraw. Because of that we don't support older versions than 8.
Before that, support mostly came down to whether someone was interested in it and wrote the code.
@Joshua-Ashton originally started D9VK and I started contributing that soon after.
@AlpyneDreams originally started D8VK and @WinterSnowfall started contributing to it.
The code existed and was good, the people working on it were nice, so the projects got integrated into DXVK.
Aside from that:
I have looked into implementing DirectDraw (and therefore D3D7 and perhaps older versions of D3D). I did manage to get a couple D3D7 samples working ages ago, so it is probably possible but would be a much much bigger project than D3D8 and would require a significant time investment that I can't spare at present. But after the initial hurdle of getting minimum viable DDraw functionality, many of the older DX versions would probably be able to be done relatively quickly. For now just use WineD3D, it's pretty good.
Even if let's say you wanted to ignore DDraw altogether and not implement it, focusing exclusively on the D3D side of things, the problem with D3D versions below 8 is that they involve some degree of DDraw inter-op, which is somewhat of a tangled mess. And since we're dealing with relatively crude APIs, untangling everything isn't exactly straight-forward. In that respect, it would be a far more challenging proposition (IMHO) than d8vk was.
And, as @K0bin mentioned, because of the technical debt it would entail, there's basically very little (if any) interest to support any of the older D3D APIs in dxvk.
If you really want to get them onto dxvk for some reason, feel free to use wrappers that translate between said APIs and D3D9 or D3D11. It's what I had been doing for years in the case of D3D8 by using d3d8to9 with dxvk/d9vk, long long before d8vk came along.
I got curious after running a D3D 6 game in Wine and hearing the fans on full blast, realizing I'm not using DXVK and that I don't know the details of why that is.
All ddraw games are 32bit and single CPU core, by design.
WiNE have csmt enabled by default, feature that aim to speed up some things in rendering and that uses a second CPU core, sometimes even when it is not really needed.
In case you have somewhat high IPC CPU, then perf might be fine enough already on a single CPU core, so you can try even to disable that, with variable like WINE_D3D_CONFIG="csmt=0"
Thank you for the explanations. Interesting situation.
@AlpyneDreams, what was your motivation for trying, if I may ask?
With regards to workarounds I'll probably continue to dig up an XP/7 machine, which handles e.g. D3D6 much better than 10. While WineD3D looked to perform correctly (in contrast to Windows 10), I couldn't hear the game very well.
Thanks for the tip @dungeon007, I'll try it next time and see what happens.
For now just use WineD3D, it's pretty good.
Just to point out, the big benefit of DX7 / DirectDraw over Vulkan could be that it can work efficiently with new wow64 avoiding the need for 32-bit libraries.
Current implementation of DirectDraw in Wine requires OpenGL and that doesn't work with new wow64 well due to lacking OpenGL features needed for thunking to work efficiently.
WINE_D3D_CONFIG="csmt=0"x1 2024-09
Hello,
I looked through this repo for suggestions on where to go for asking a general project question, but couldn't find a GitHub Q&A section or a link elsewhere. The only issue template was "bug report". Sorry if this is still the wrong place to ask.
I was curious to know about the reasons/factors that decide which Direct3D versions to support? Time, energy, resources, etc. are a given, but I was thinking about those factors in relation to e.g. "how different are the D3D versions to each other (e.g. version 8 vs. 7 or 6)?", "how much effort does it take to push downwards, i.e. adding support for v. 7, v. 6..." and "is there even a point in supporting earlier versions than 8?"
I got curious after running a D3D 6 game in Wine and hearing the fans on full blast, realizing I'm not using DXVK and that I don't know the details of why that is.
This is not a feature request, I'm just interested in hearing about the complexities at work in this kind of project.