https://bugs.winehq.org/show_bug.cgi?id=51836
Bug ID: 51836 Summary: d3d: Disable CSMT by default if using llvmpipe OpenGL renderer backend Product: Wine Version: 6.18 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-d3d Assignee: wine-bugs@winehq.org Reporter: jinoh.kang.kr@gmail.com Distribution: ---
llvmpipe is a software-only OpenGL implementation. It compiles GLSL shaders into native CPU code using LLVM, offering reasonable graphics performance on systems where hardware graphics acceleration is otherwise not available.
The problem is that llvmpipe does not play nicely with Wine's CSMT feature. CSMT assumes the OpenGL backend to be a proxy that submits rendering commands to GPU, rather than a full-blown computation engine itself. The source and sink of the comman stream is the CPU itself, and llvmpipe supports direct multithreading -- making CSMT redundant.
For testing/benchmark, llvmpipe can be activated on Linux with the environment variable `LIBGL_ALWAYS_SOFTWARE=1`. With CSMT, perf shows `wined3d_cs_mt_finish` to be the major overhead; without CSMT, the bottleneck is absent and the app exhibits noticeable performance improvement.
Example glxinfo output on system with llvmpipe enabled:
OpenGL vendor string: Mesa/X.org OpenGL renderer string: llvmpipe (LLVM 11.0.0, 256 bits) ... Extended renderer info (GLX_MESA_query_renderer): Vendor: Mesa/X.org (0xffffffff) Device: llvmpipe (LLVM 11.0.0, 256 bits) (0xffffffff)