CNC3 demo with Wine fails
KenSharp opened this issue · comments
First, apologies if this is convoluted and not a VGL bug but I have to start at the beginning (I guess).
Running the Command & Conquer 3 Demo with Wine 9.9 and VGL 3.1.1-20240228 fails.
0134:fixme:d3d:state_linepattern_w Setting line patterns is not supported in OpenGL core contexts.
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 72 (X_PutImage)
Serial number of failed request: 63
Current serial number in output stream: 72
I'm not saying that this is not a Wine bug, I simply do not know. If you tell me that it is then I will log it with Wine. Thanks.
Have you tried it on the local display without VirtualGL? That would be a good indication of whether it's a VirtualGL-related issue. Also please specify the details of your remote display environment. Are you using an X proxy? Which one? Are you trying to use DXVK?
My apologies.
Indeed it works locally (there are Wine bugs but that's once the applications loads, with VGL it doesn't get this far).
I tested in Xephyr running locally. It saves a lot of a lot of messing around but if I could get VGL to work then it would save me even more messing about!
I haven't (yet) touched DXVK in any way.
When I mean running Xephyr locally:
Run the Xephyr as my account, and running Wine as another account (so that my settings aren't messed up when testing Wine).
Tried with Vulkan but it crashes with and without VGL.
You have not specified your remote display environment. Are you using VNC or another type of X proxy?
Xephyr is started with:
Xephyr :666 -screen 1024x768
And then the application is run as:
vglrun -d :666 wine "c:\foo\bar.exe"
So I'm guessing whatever the default is? winecfg
works fine with and without VGL.
The --help
suggests:
Send rendered frames uncompressed using X11 Transport
[default if the 2D X server is on this machine]
Xephyr doesn't support GPU acceleration, so it cannot be used as the 3D X server for VirtualGL. I don't understand why you're trying to do that. VirtualGL implements split rendering, so VGL_DISPLAY
/vglrun -d
should specify either an X server or an EGL device that is directly connected to a GPU. VirtualGL redirects 3D rendering there, then it reads back the OpenGL-rendered frames in real time and draws them into the application window(s) on the 2D X server, which is specified in DISPLAY
. Because of how the llvmpipe (software) Mesa driver works, it cannot be used as a VirtualGL back end, and there is no point to doing so anyhow. (The purpose of VirtualGL is to add GPU acceleration to an X server that doesn't have GPU acceleration, or to prevent OpenGL commands and data from transiting the network when using a remote X server.)
It is unclear to me what you're ultimately trying to accomplish, so please back up and give me an overview.
That's okay, I misunderstood what VGL is doing. Thanks for the clarification.
For reference:
I got it to work by setting xhost +si:localuser:other_user
and then running the following as other_user
:
DISPLAY=:666 vglrun -d :0 wine "c:\program files (x86)\electronic arts\command & conquer 3 tiberium wars demo\cnc3demo.exe"
It works lovely!