1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
[wine-i386]: [opengl can't detect hardware vendor]
**wine-i386 and winecheck*
Wine(https://www.winehq.org/)
winecheck
**Describe the bug**
I try to run x86 program in ubuntu-aarch64, so i use FEXLoader to load wine, then wine load x86 program wincheck.exe. But it seems cant find vendor
```
progwrapper$ FEXLoader -R Ubuntu_i386 ./wine-progwrapper/bin/wine ./winecheck.exe
[ERROR] Couldn't connect to FEXServer socket 1000.FEXServer.Socket 111 Connection refused
RootFS Position: /home/bogus/.fex-emu/RootFS/Ubuntu_i386 : ./wine-progwrapper/bin/wine
RootFS Position: /home/bogus/.fex-emu/RootFS/Ubuntu_i386 : /usr/local/share/progwrapper/wine-progwrapper/bin/wine-preloader
RootFS Position: /home/bogus/.fex-emu/RootFS/Ubuntu_i386 : /usr/local/share/progwrapper/wine-progwrapper/bin/wineserver
fixme:winediag:start_process Wine Staging 1.9.7 is a testing version containing experimental patches.
fixme:winediag:start_process Please mention your exact version when filing bug reports on winehq.org.
err:menubuilder:init_xdg error looking up the desktop directory
Checking OpenGL ...
radeon: Failed to get PCI ID, error number -1
libGL error: failed to create dri screen
libGL error: failed to load driver: radeonsi
OpenGL Vendor: VMware, Inc.
OpenGL Renderer: llvmpipe (LLVM 6.0, 128 bits)
OpenGL Direct Rendering: True
ERROR: found bad OpenGL Vendor: VMware, Inc.
ERROR: found bad OpenGL Renderer: llvmpipe
OpenGL: FAILURE
```
I read the source code, it seems failure in below part code, like this(https://github.com/wine-mirror/wine/blob/master/dlls/opengl32/tests/opengl.c#L1190), but is not the same:
```
hWnd = CreateWindowExA(0, clsName, "OpenGL Test", WS_TILEDWINDOW, 0, 0, 100, 100, 0, 0, 0, 0);
if (!hWnd)
return false;
hDC = GetDC(hWnd);
if (!hDC)
goto error;
pixelformat = ChoosePixelFormat(hDC, &pfd);
if (!pixelformat)
goto error;
if (!SetPixelFormat(hDC, pixelformat, &pfd))
goto error;
context = wglCreateContext(hDC);
if (!context)
goto error;
if (!wglMakeCurrent(hDC, context))
goto error;
vendor = (const char *)glGetString(GL_VENDOR);
renderer = (const char *)glGetString(GL_RENDERER);
extensions = (const char *)glGetString(GL_EXTENSIONS);
if (extensions && strstr(extensions, "WINE_EXT_direct_rendering"))
directRendering = true;
printf("OpenGL Vendor: %s\n", vendor);
printf("OpenGL Renderer: %s\n", renderer);
printf("OpenGL Direct Rendering: %s\n",
directRendering ? "True" : "False (or old/wrong wine version)");
```
glGetString(GL_VENDOR) cant get real vendor info, it's just return software implement.
real vendor info :

Because I cant run winecheck, so I use some opengl test program do test, all is ok
1. FEXLoader ~/Downloads/ogl/glxinfo
2. WINEPREFIX="/home/bogus/.wine64/" ./wine ~/.wine64/drive_c/users/bogus/Temp/wct/opengl32_test.exe
3. FEXLoader -k ~/.fex-emu/ThunkConfigs/thunks.json -t /usr/lib/fex-emu/HostThunks/ -j /usr/share/fex-emu/GuestThunks -R ~/.fex-emu/RootFS/Ubuntu_22_04 -- ~/Downloads/ogl/glxinfo
And I think it is maybe FEX not implement some opengl32 compatibility interface, But how can I to verify my guess and to fix it?
**To Reproduce**
FEXLoader -R Ubuntu_i386 ./wine-progwrapper/bin/wine ./winecheck.exe
**Expected behavior**
should like this:

**Screenshots and Video**
**System information:**
- OS: Ubuntu 22.04.1 LTS
- CPU/SoC: AMD
- Video driver version: Device: AMD OLAND (LLVM 13.0.1, DRM 2.50, 5.15.0-54-generic) (0x6611)
- RootFS used: Ubuntu 16.04 (i386)
- FEX version: commit c37fcf136ababf13b491ae8f1a878cc70f8d1c33 (FEXGetConfig build by myself, it seems is the latest version )
- Thunks Enabled: No (I don't know how to enable libgl32 thunk)
**Additional context**
- Is this an x86 or x86-64 game: No
- Does this reproduce on x86-64 host with FEX: NoTest
- Does this reproduce on AArch64 with Radeon/Intel/Nvidia: yes
- Is this a Vulkan game: No
-
**And I think it is maybe FEX not implement some opengl32 compatibility interface, But how can I to verify my guess and to fix it?**
|