@doitsujin
@Joshua-Ashton
Don't you think that fuse your projects and develop it under one banner would be a good idea?
Would be nice, but maybe wishful thinking.
Two people working on DXVK would be nice, am sure doitsujin is tired of fixing everything for us :)
I started looking into this, DXUP needs major cleanup first... Right now it's not even building with mingw.
I've had some discussions with the DXUP author and it's certainly an option to tackle this at some point in the future, but it's not as easy as slapping the code into the project and pretending that we're done, especially if we want to get the rather peculiar interactions between Dx10 and 11 right. Which is going to be a major annoyance, I can say that much already.
For me this has very low priority right now for several reasons:
a) the overall rather low number of pure Dx10 games
b) the option to use DXUP as a separate set of DLLs for now
c) DXVK should be feature-complete first and needs to stabilize.
@doitsujin There is also the aspect of VKD3D that also seem to use dxgi.dll to set stuff up, and from some minor testing that i tried, it did not seem to load d3d12.dll with DXVK's version?
Not done extensive testing, as there are not too much that actually work with VKD3D atm, but was able to compile wine with support for it by adding the vkd3d1 libraries and utilities with the vkd3d-dev package from Debian.
Not entirely sure how wine sets this up with or without support for the aforementioned -dev package when it comes to compiling dxgi.dll tho.
Not a huge issue by all means :)
My dxgi.dll is incompatible to wine's dxgi.dll, and when a game somehow ends up mixing the two then things will blow up. I don't know how wine's implementation even works with vkd3d since it uses wined3d.
@doitsujin vkd3d uses a separate libvkd3d library. It seems as dxgi loads libvkd3d.
from dlls/dxgi/swapchain.c
static BOOL WINAPI init_vkd3d_once(INIT_ONCE *once, void *param, void **context)
{
TRACE("Loading vkd3d %s.\n", SONAME_LIBVKD3D);
if (!(vkd3d_handle = wine_dlopen(SONAME_LIBVKD3D, RTLD_NOW, NULL, 0)))
return FALSE;
if (!load_vkd3d_functions(vkd3d_handle))
{
ERR("Failed to load vkd3d functions.\n");
wine_dlclose(vkd3d_handle, NULL, 0);
vkd3d_handle = NULL;
return FALSE;
}
return TRUE;
}
And during the d3d12_swapchain_init it checks for
if (!init_vkd3d())
{
ERR_(winediag)("libvkd3d could not be loaded.\n");
return DXGI_ERROR_UNSUPPORTED;
}
Edit: Had a horrible suggestion that defies the purpose of the discussion :)
Perhaps someone would hack down a "multipurpose dxgi project" some day that would allow for all of the projects to work. Ie. VK9, dxvk, dxup and wine (with vkd3d).
I still have effects to clear up and redo cause currently I'm wrapping to original dlls for those. They don't wrap nicely into dx11 effects. I'd shoot myself with the gun emoji if I could but it's a water pistol now
Maybe we can have at least dxgi.dll merged somehow for now? To not require dxgi.dll->dxgi_original.dll mess. Than the only library will be required from DXUP is d3d10_1.dll (and/or d3d10_1.dll->d3d10.dll symlink if required and if I correctly interpret DXUP's README).
BTW here is the list of the games required DX 10 or "up to 10". Most in this list also supports DX11, but still + ~100 good old games.
A lot of those games are likely DX11 FL 10 though?
The new d3d10 branch contains an experimental implementation of the D3D10 core interfaces and the shader reflection API. The implementation is very similar to DXUP, but also allows applications to mix D3D10 and D3D11 code in both directions (although this is currently untested).
The D3D10 Effects API is not implemented (yet), which means that most D3D10 demos are not going to work. It is however able to run Crysis 1, which does not use the Effects API.
This isn't going to be mainlined any time soon, in particular, the build system needs to be cleaned up, I'll have to add support for winelib builds, and the way logging is done needs to change. The implementation is also mostly untested and should not be expected to work properly at this point, but some feedback for D3D10 games is of course appreciated.
With some modification to build system I able to successfully run Just Cause 2 with winelib build.
Not tested further than loading game and jumping around a bit.
List of changes required after https://github.com/doitsujin/dxvk/pull/520 and corresponding WINE patches used : fix-winelib-build-d3d10.patch.txt
_NOTE: libd3dcompiler_43.def missing from wine's libraries, so I had to generate new one by myself from .spec._
@pchome thanks a lot, I added those fixes to the branch and rebased it against v0.65.
Can you update package-release.sh on the d3d10 branch to include new dlls as well? Will make it somewhat easier to test it for a semi-wine novice. (since I wasn't sure which dlls to actually use even though I can guess it is all the new ones added to meson)
Done, along with a fixup for 32-bit builds.
Can we download prebuilt binaries of d3d10 branch somewhere?
No. Binaries will be available after the D3D10 code gets merged.
I merged the D3D10 code into master. This is much earlier than I had originally planned, but things seem to be going well. Binaries with D3D10 support will be shipped with the next (0.70) release.
Closing in favour of #551.
Most helpful comment
I still have effects to clear up and redo cause currently I'm wrapping to original dlls for those. They don't wrap nicely into dx11 effects. I'd shoot myself with the gun emoji if I could but it's a water pistol now