https://bugs.winehq.org/show_bug.cgi?id=47380
--- Comment #11 from Tim Schumacher timschumi@gmx.de --- (In reply to Henri Verbeet from comment #10)
(In reply to Tim Schumacher from comment #9)
It seems like the finish method is constantly called from the wrong thread (thead 9 seems to be the main thread), causing the thread to constantly stall instead of calling the singlethread finish function.
That's pretty much expected when csmt is enabled.
From what I read in the code, wouldn't it at least require one call to finish()
from the correct thread to actually do the finish action? The code looks like the following to me:
if (we are on the thread that was started with run_thread) finish the queue else stall until queue is empty
Am I misunderstanding something here?
The more interesting information in that log is "queue_id 1" (WINED3D_CS_QUEUE_MAP), which probably means these are caused by wined3d_cs_map() and wined3d_cs_unmap(). (wined3d_cs_emit_update_sub_resource() is possible too, but less likely.)
The backtrace in the debugger shows that the calls with queue_id 1 are indeed caused by wined3d_cs_map and wined3d_cs_unmap.
The calls with queue_id 0 in the beginning are caused by swapchain_create.