protonscr

DXVK winelib doesn't compile on wine 5.2

dxvkclosed
doitsujin/dxvk#1463 · opened 2020-02-18 by bno1 · updated 2020-02-25 · 4 comments · github
Bbno1 2020-02-18 github

Compiling dxvk winelib on wine 5.2 produces the following errors:

wineg++ -Isrc/dxgi/cde8a16@@dxgi.dll@sha -Isrc/dxgi -I../../../dxvk/src/dxgi -I../../../dxvk/./include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++17 -O3 -O3 -march=skylake -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -msgx -mbmi2 -mno-pconfig -mno-wbnoinvd -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mrtm -mhle -mrdrnd -mf16c -mfsgsbase -mrdseed -mprfchw -madx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mclflushopt -mxsavec -mxsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-avx5124fmaps -mno-avx5124vnniw -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mno-rdpid -mno-gfni -mno-shstk -mno-avx512vbmi2 -mno-avx512vnni -mno-vaes -mno-vpclmulqdq -mno-avx512bitalg -mno-movdiri -mno-movdir64b -mno-waitpkg -mno-cldemote -mno-ptwrite --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=skylake -ftree-vectorize -DNOMINMAX --no-gnu-unique -m64 -fvisibility=hidden -fvisibility-inlines-hidden -D__WIDL_objidl_generated_name_0000000C= -fPIC -MD -MQ 'src/dxgi/cde8a16@@dxgi.dll@sha/dxgi_adapter.cpp.o' -MF 'src/dxgi/cde8a16@@dxgi.dll@sha/dxgi_adapter.cpp.o.d' -o 'src/dxgi/cde8a16@@dxgi.dll@sha/dxgi_adapter.cpp.o' -c ../../../dxvk/src/dxgi/dxgi_adapter.cpp
In file included from ../../../dxvk/src/dxgi/dxgi_include.h:12,
                 from ../../../dxvk/src/dxgi/dxgi_format.h:3,
                 from ../../../dxvk/src/dxgi/dxgi_adapter.h:6,
                 from ../../../dxvk/src/dxgi/dxgi_adapter.cpp:6:
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:355:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  355 | DXVK_DEFINE_GUID(IDXGIDXVKAdapter);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:356:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  356 | DXVK_DEFINE_GUID(IDXGIDXVKDevice);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:357:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  357 | DXVK_DEFINE_GUID(IDXGIVkMonitorInfo);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:358:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  358 | DXVK_DEFINE_GUID(IDXGIVkInteropAdapter);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:359:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  359 | DXVK_DEFINE_GUID(IDXGIVkInteropDevice);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:360:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  360 | DXVK_DEFINE_GUID(IDXGIVkInteropSurface);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:361:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  361 | DXVK_DEFINE_GUID(IDXGIVkSwapChain);
      | ^~~~~~~~~~~~~~~~
../../../dxvk/src/dxgi/../util/com/com_guid.h:11:58: error: invalid declarator before ‘(’ token
   11 |       template<> inline GUID const& __wine_uuidof<iface> () { return iface::guid; }
      |                                                          ^
../../../dxvk/src/dxgi/dxgi_interfaces.h:362:1: note: in expansion of macro ‘DXVK_DEFINE_GUID’
  362 | DXVK_DEFINE_GUID(IWineDXGISwapChainFactory);
      | ^~~~~~~~~~~~~~~~
In file included from /usr/include/wine/windows/winnt.h:25,
                 from /usr/include/wine/windows/windef.h:289,
                 from /usr/include/wine/windows/windows.h:37,
                 from /usr/include/wine/windows/rpc.h:22,
                 from /usr/include/wine/windows/d3d10_1.h:7,
                 from ../../../dxvk/src/dxgi/dxgi_adapter.cpp:4:
../../../dxvk/src/dxgi/dxgi_adapter.cpp: In member function ‘virtual HRESULT dxvk::DxgiAdapter::QueryInterface(const IID&, void**)’:
../../../dxvk/src/dxgi/dxgi_adapter.cpp:85:17: error: incomplete type ‘__wine_uuidof_type<IDXGIDXVKAdapter>::inst’ {aka ‘__wine_uuidof<IDXGIDXVKAdapter>’} used in nested name specifier
   85 |      || riid == __uuidof(IDXGIDXVKAdapter)) {
      |                 ^~~~~~~~
../../../dxvk/src/dxgi/dxgi_adapter.cpp:90:17: error: incomplete type ‘__wine_uuidof_type<IDXGIVkInteropAdapter>::inst’ {aka ‘__wine_uuidof<IDXGIVkInteropAdapter>’} used in nested name specifier
   90 |     if (riid == __uuidof(IDXGIVkInteropAdapter)) {
      |                 ^~~~~~~~
winegcc: g++ failed

The mingw build compiles fine.

I tracked it down to this wine commit [1]. Looks like it breaks src/util/com/com_guid.h.

[1] https://github.com/wine-mirror/wine/commit/51b75e9a534d8c6021bbcc71889e3c154f0f84ea#diff-38aae954b046d45df20e8a2b8a554877

Mmisyltoad 2020-02-18 github

For portability I think we might be able to get away with making our DXVK_DEFINE_GUID map to __CRT_UUID_DECL (at least on Winelib) here.

Sstefson 2020-02-22 github

@doitsujin can you please add a revbump to v1.5.5 with this fix included? thanks :-)

Mmisyltoad 2020-02-22 github

I wouldn't expect that to be too far off -- I still have a few things I'd like to do before 1.5.5 though.

There isn't really a reason to not use master if you're just building locally though.

Aahkok 2020-02-25 github

Distro's (like the one I work on - Clear Linux OS) will not use untagged builds. I'll patch, but we have broken builds and will not use master- ever - if there are tags in a project. :)

Launch options

DLLs