Hey list
I'm trying to find out why CS:GO is slower under wine then windows. When running a benchmark in CS:GO Win8 gets ~134fps and wine ~51fps.
I've been following Stefan Dösingers guide ( http://wiki.winehq.org/Performance) and have compiled wined3d for windows and tryed running CS:GO using wined3d under win8 but it just crashes while loading the map. At a guess I'd say once it trys to do 3D rendering.
Which brings me to my first question. How do you debug and profile wined3d when using windows? Because when every I tried to run a debugger or attach one under windows or using winedbg the game just crashes when booting. Anti-debug techniques maybe?
The second being that when using perf under linux it doens't seem to really be a wined3d problem after all the effort of testing it. Attached is the perf output where is shows most of it's time is spent in the actual csgo.exe code.
CS:GO under linux seems to have a lot less cpu utilisation under wine. Win8 65-78% utilisation wine 48-51% utilisation of the cpu. Where should I look next for what's causing the problem?
Also I'm really new to wine development. I'm still a uni student. Apologies for anything stupidly obvious I've missed.
Regards Brock York.
Hey list
I'm trying to find out why CS:GO is slower under wine then windows. When running a benchmark in CS:GO Win8 gets ~134fps and wine ~51fps.
Overall 50% performance is about what you get on average on dual core machines, depending on the game and driver. The Nvidia binary Linux driver gives you roughly 60%, the open source radeon driver approaches 30%-40%. This depends a lot on the game as well.
Did you have a look at my command stream patches? They address a major shortcoming in wined3d - it adds the ability to move major parts of the CPU side work (The OpenGL calls) into a different thread. Windows had this since many years, and my (not yet upstream) work adds it to Wine. I recommend to search the Wine-devel archives, I’ve written a lengthy mail about it somewhen in January. The single-threaded nature of WineD3D is most likely where your 50% CPU usage (Dual Core?) comes from.
I've been following Stefan Dösingers guide (http://wiki.winehq.org/Performance) and have compiled wined3d for windows and tryed running CS:GO using wined3d under win8 but it just crashes while loading the map. At a guess I'd say once it trys to do 3D rendering.
Did you define USE_WIN32_OPENGL? It is needed to adjust the calling convention to Win32’s WINAPI convention. I think it is explained in the Wiki article, but I cannot check at the moment because I am drafting this mail in an airplane.
On Mon, Feb 3, 2014 at 10:46 PM, Stefan Dösinger stefandoesinger@gmail.comwrote:
Hey list
I'm trying to find out why CS:GO is slower under wine then windows. When running a benchmark in CS:GO Win8 gets ~134fps and wine ~51fps.
Overall 50% performance is about what you get on average on dual core
machines, depending on the game and driver. The Nvidia binary Linux >driver gives you roughly 60%, the open source radeon driver approaches 30%-40%. This depends a lot on the game as well.
Did you have a look at my command stream patches? They address a major
shortcoming in wined3d - it adds the ability to move major parts >of the CPU side work (The OpenGL calls) into a different thread. Windows had this since many years, and my (not yet upstream) work adds >it to Wine. I recommend to search the Wine-devel archives, I've written a lengthy mail about it somewhen in January. The single-threaded >nature of WineD3D is most likely where your 50% CPU usage (Dual Core?) comes from.
I hadn't heard of your command stream patches so I found the emails you were talking about, cloned your repository and tested it today. It does help but I haven't got any solid numbers yet. But this is what i've got so far: https://docs.google.com/spreadsheet/ccc?key=0AmPNQYtpuejodDVQc2ctc084cjVISE5...
I should have mentioned that I'm running this on a quad core (Intel Core 2 Quad Q6600) and was getting 50% accross all four cores compared to windows 65-75% accross the four cores. The interesting thing being that so far in my single test. WineD3d with multicore disabled is faster then windows with WineD3d multicore disabled.
I've been following Stefan Dösingers guide (
http://wiki.winehq.org/Performance) and have
compiled wined3d for windows and tryed running CS:GO using wined3d under
win8 but it just crashes while loading the map. At a guess I'd >>say once it trys to do 3D rendering.
Did you define USE_WIN32_OPENGL? It is needed to adjust the calling
convention to Win32's WINAPI convention. I think it is explained in >the Wiki article, but I cannot check at the moment because I am drafting this mail in an airplane.
I followed this guide (http://wiki.winehq.org/WineD3DOnWindows) so I did
use USE_WIN32_OPENGL. I found out what the problem was. I was able to use WineD3D with Counter-Strike source but not CS:GO on windows. Turns out if the multicore option is enabled so it uses more then one thread then CS:GO and CS:S will crash when using WineD3D under windows.
I also compiled WineD3d with your command stream patches and ran them under windows once I figured out it was the multicore option causing the crashes.
Which now I have no idea how to debug why it crashes when it is using multiple threads.
Thanks for your time and your reply. Regards Brock YOrk.
Quick reply from my phone: wglShareLists on Windows had to be called with neither context being current. I once hacked a workaround together that created 20 extra contexts in advance with the primary one before making the first context current in one thread Am 04.02.2014 17:23 schrieb "Brock York" twunknown@gmail.com:
On Mon, Feb 3, 2014 at 10:46 PM, Stefan Dösinger < stefandoesinger@gmail.com> wrote:
Hey list
I'm trying to find out why CS:GO is slower under wine then windows. When running a benchmark in CS:GO Win8 gets ~134fps and wine ~51fps.
Overall 50% performance is about what you get on average on dual core
machines, depending on the game and driver. The Nvidia binary Linux >driver gives you roughly 60%, the open source radeon driver approaches 30%-40%. This depends a lot on the game as well.
Did you have a look at my command stream patches? They address a major
shortcoming in wined3d - it adds the ability to move major parts >of the CPU side work (The OpenGL calls) into a different thread. Windows had this since many years, and my (not yet upstream) work adds >it to Wine. I recommend to search the Wine-devel archives, I’ve written a lengthy mail about it somewhen in January. The single-threaded >nature of WineD3D is most likely where your 50% CPU usage (Dual Core?) comes from.
I hadn't heard of your command stream patches so I found the emails you were talking about, cloned your repository and tested it today. It does help but I haven't got any solid numbers yet. But this is what i've got so far: https://docs.google.com/spreadsheet/ccc?key=0AmPNQYtpuejodDVQc2ctc084cjVISE5...
I should have mentioned that I'm running this on a quad core (Intel Core 2 Quad Q6600) and was getting 50% accross all four cores compared to windows 65-75% accross the four cores. The interesting thing being that so far in my single test. WineD3d with multicore disabled is faster then windows with WineD3d multicore disabled.
I've been following Stefan Dösingers guide (
http://wiki.winehq.org/Performance) and have
compiled wined3d for windows and tryed running CS:GO using wined3d
under win8 but it just crashes while loading the map. At a guess I'd >>say once it trys to do 3D rendering.
Did you define USE_WIN32_OPENGL? It is needed to adjust the calling
convention to Win32’s WINAPI convention. I think it is explained in >the Wiki article, but I cannot check at the moment because I am drafting this mail in an airplane.
I followed this guide (http://wiki.winehq.org/WineD3DOnWindows) so I did
use USE_WIN32_OPENGL. I found out what the problem was. I was able to use WineD3D with Counter-Strike source but not CS:GO on windows. Turns out if the multicore option is enabled so it uses more then one thread then CS:GO and CS:S will crash when using WineD3D under windows.
I also compiled WineD3d with your command stream patches and ran them under windows once I figured out it was the multicore option causing the crashes.
Which now I have no idea how to debug why it crashes when it is using multiple threads.
Thanks for your time and your reply. Regards Brock YOrk.
One more thing: there are a few issues with the nvidia driver on the command stream. For testing, try to remove vertex buffer objects and pixel buffer objects from the extension table in directx.c, disable glsl and enable the game's multithreading. That got me pretty decent performance in cs:s. Am 05.02.2014 10:24 schrieb "Stefan Dösinger" stefandoesinger@gmail.com:
Quick reply from my phone: wglShareLists on Windows had to be called with neither context being current. I once hacked a workaround together that created 20 extra contexts in advance with the primary one before making the first context current in one thread Am 04.02.2014 17:23 schrieb "Brock York" twunknown@gmail.com:
On Mon, Feb 3, 2014 at 10:46 PM, Stefan Dösinger < stefandoesinger@gmail.com> wrote:
Hey list
I'm trying to find out why CS:GO is slower under wine then windows. When running a benchmark in CS:GO Win8 gets ~134fps and wine ~51fps.
Overall 50% performance is about what you get on average on dual core
machines, depending on the game and driver. The Nvidia binary Linux >driver gives you roughly 60%, the open source radeon driver approaches 30%-40%. This depends a lot on the game as well.
Did you have a look at my command stream patches? They address a major
shortcoming in wined3d - it adds the ability to move major parts >of the CPU side work (The OpenGL calls) into a different thread. Windows had this since many years, and my (not yet upstream) work adds >it to Wine. I recommend to search the Wine-devel archives, I’ve written a lengthy mail about it somewhen in January. The single-threaded >nature of WineD3D is most likely where your 50% CPU usage (Dual Core?) comes from.
I hadn't heard of your command stream patches so I found the emails you were talking about, cloned your repository and tested it today. It does help but I haven't got any solid numbers yet. But this is what i've got so far: https://docs.google.com/spreadsheet/ccc?key=0AmPNQYtpuejodDVQc2ctc084cjVISE5...
I should have mentioned that I'm running this on a quad core (Intel Core 2 Quad Q6600) and was getting 50% accross all four cores compared to windows 65-75% accross the four cores. The interesting thing being that so far in my single test. WineD3d with multicore disabled is faster then windows with WineD3d multicore disabled.
I've been following Stefan Dösingers guide (
http://wiki.winehq.org/Performance) and have
compiled wined3d for windows and tryed running CS:GO using wined3d
under win8 but it just crashes while loading the map. At a guess I'd >>say once it trys to do 3D rendering.
Did you define USE_WIN32_OPENGL? It is needed to adjust the calling
convention to Win32’s WINAPI convention. I think it is explained in >the Wiki article, but I cannot check at the moment because I am drafting this mail in an airplane.
I followed this guide (http://wiki.winehq.org/WineD3DOnWindows) so I
did use USE_WIN32_OPENGL. I found out what the problem was. I was able to use WineD3D with Counter-Strike source but not CS:GO on windows. Turns out if the multicore option is enabled so it uses more then one thread then CS:GO and CS:S will crash when using WineD3D under windows.
I also compiled WineD3d with your command stream patches and ran them under windows once I figured out it was the multicore option causing the crashes.
Which now I have no idea how to debug why it crashes when it is using multiple threads.
Thanks for your time and your reply. Regards Brock YOrk.
Quick reply from my phone: wglShareLists on Windows had to be called with
neither context being current. I once hacked a workaround >together that created 20 extra contexts in advance with the primary one before making the first context current in one thread Is this why WineD3D can't be used multithreaded under wine in CS:GO? I don't know much about how OpenGL and DirectX let alone their windows counterparts but I'm trying.
One more thing: there are a few issues with the nvidia driver on the
command stream. For testing, try to remove vertex buffer objects and >pixel buffer objects from the extension table in directx.c, disable glsl and enable the game's multithreading. That got me pretty decent >performance in cs:s. This is for running and testing WineD3D under windows for testing that I should remove the VBO's and PBO's? Or is this for getting better performance when under wine in linux?
Thanks, Regards Brock York.
On Wed, Feb 5, 2014 at 5:29 PM, Stefan Dösinger stefandoesinger@gmail.comwrote:
One more thing: there are a few issues with the nvidia driver on the command stream. For testing, try to remove vertex buffer objects and pixel buffer objects from the extension table in directx.c, disable glsl and enable the game's multithreading. That got me pretty decent performance in cs:s. Am 05.02.2014 10:24 schrieb "Stefan Dösinger" <stefandoesinger@gmail.com
:
Quick reply from my phone: wglShareLists on Windows had to be called with
neither context being current. I once hacked a workaround together that created 20 extra contexts in advance with the primary one before making the first context current in one thread Am 04.02.2014 17:23 schrieb "Brock York" twunknown@gmail.com:
On Mon, Feb 3, 2014 at 10:46 PM, Stefan Dösinger < stefandoesinger@gmail.com> wrote:
Hey list
I'm trying to find out why CS:GO is slower under wine then windows. When running a benchmark in CS:GO Win8 gets ~134fps and wine ~51fps.
Overall 50% performance is about what you get on average on dual core
machines, depending on the game and driver. The Nvidia binary Linux >driver gives you roughly 60%, the open source radeon driver approaches 30%-40%. This depends a lot on the game as well.
Did you have a look at my command stream patches? They address a major
shortcoming in wined3d - it adds the ability to move major parts >of the CPU side work (The OpenGL calls) into a different thread. Windows had this since many years, and my (not yet upstream) work adds >it to Wine. I recommend to search the Wine-devel archives, I've written a lengthy mail about it somewhen in January. The single-threaded >nature of WineD3D is most likely where your 50% CPU usage (Dual Core?) comes from.
I hadn't heard of your command stream patches so I found the emails you were talking about, cloned your repository and tested it today. It does help but I haven't got any solid numbers yet. But this is what i've got so far: https://docs.google.com/spreadsheet/ccc?key=0AmPNQYtpuejodDVQc2ctc084cjVISE5...
I should have mentioned that I'm running this on a quad core (Intel Core 2 Quad Q6600) and was getting 50% accross all four cores compared to windows 65-75% accross the four cores. The interesting thing being that so far in my single test. WineD3d with multicore disabled is faster then windows with WineD3d multicore disabled.
I've been following Stefan Dösingers guide (
http://wiki.winehq.org/Performance) and have
compiled wined3d for windows and tryed running CS:GO using wined3d
under win8 but it just crashes while loading the map. At a guess I'd >>say once it trys to do 3D rendering.
Did you define USE_WIN32_OPENGL? It is needed to adjust the calling
convention to Win32's WINAPI convention. I think it is explained in >the Wiki article, but I cannot check at the moment because I am drafting this mail in an airplane.
I followed this guide (http://wiki.winehq.org/WineD3DOnWindows) so I
did use USE_WIN32_OPENGL. I found out what the problem was. I was able to use WineD3D with Counter-Strike source but not CS:GO on windows. Turns out if the multicore option is enabled so it uses more then one thread then CS:GO and CS:S will crash when using WineD3D under windows.
I also compiled WineD3d with your command stream patches and ran them under windows once I figured out it was the multicore option causing the crashes.
Which now I have no idea how to debug why it crashes when it is using multiple threads.
Thanks for your time and your reply. Regards Brock YOrk.
Am 05.02.2014 um 17:22 schrieb Brock York twunknown@gmail.com:
Quick reply from my phone: wglShareLists on Windows had to be called with neither context being current. I once hacked a workaround >together that created 20 extra contexts in advance with the primary one before making the first context current in one thread
Is this why WineD3D can't be used multithreaded under wine in CS:GO? I don't know much about how OpenGL and DirectX let alone their windows counterparts but I'm trying.
It should work in current Wine (on Linux), but you may have to enable StrictDrawOrdering. Without that you may get some texture corruption, e.g. HUD parts are broken in CS:S if the game’s multithreading is enabled but StrictDrawOrdering isn’t.
StrictDrawOrdering kills performance though. CSMT supersedes StrictDrawOrdering.
One more thing: there are a few issues with the nvidia driver on the command stream. For testing, try to remove vertex buffer objects and >pixel buffer objects from the extension table in directx.c, disable glsl and enable the game's multithreading. That got me pretty decent >performance in cs:s.
This is for running and testing WineD3D under windows for testing that I should remove the VBO's and PBO's? Or is this for getting better performance when under wine in linux?
This is for getting better performance on Wine in Linux.