https://bugs.winehq.org/show_bug.cgi?id=42695
Bug ID: 42695 Summary: PoE fail to start when launching with dx11 enabled Product: Wine-staging Version: 2.3 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: gufideg@gmail.com CC: erich.e.hoover@wine-staging.com, michael@fds-team.de, sebastian@fds-team.de Distribution: ---
Created attachment 57663 --> https://bugs.winehq.org/attachment.cgi?id=57663 console output
I get an error from Poe that says:
"Failed to retrive IDXGIFactory from adapter": In source code file: ..\Device \D3D11\DeviceD3D11.cpp at line 336, Processing file: Failed to retrive IDXGIFactory from adapter Error: E_NOINTERFACE Description: Message:
Then I click OK and the game closes.
Works nicely with dx9 and dx9 ex
https://bugs.winehq.org/show_bug.cgi?id=42695
Behem0th grantipak@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |grantipak@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com --- Is the application Path of Exile?
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #2 from Guillaume gufideg@gmail.com --- Yes, sorry for the ambiguity.
https://bugs.winehq.org/show_bug.cgi?id=42695
Guillaume gufideg@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|PoE fail to start when |Path of Exile: fail to |launching with dx11 enabled |start when launching with | |dx11 enabled
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #3 from Bruno Jesus 00cpxxx@gmail.com --- I don't have the DirectX 11 option, only 9 and 9EX. Do you need anything non-standard to make it appear?
https://bugs.winehq.org/show_bug.cgi?id=42695
Kevin Ilphrin Pellet ilphrin@autistici.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |ilphrin@autistici.org
--- Comment #4 from Kevin Ilphrin Pellet ilphrin@autistici.org --- I have the same issue with dx11, it says dx11 is not supported by my graphic card. But it is a AMD TM Radeon HD 8 8750M which supports dx11.
I have to restart the game with dx9 or dx9 ex, which work nice.
https://bugs.winehq.org/show_bug.cgi?id=42695
winetest@luukku.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |winetest@luukku.com
--- Comment #5 from winetest@luukku.com --- (In reply to Bruno Jesus from comment #3)
I don't have the DirectX 11 option, only 9 and 9EX. Do you need anything non-standard to make it appear?
If I don't have .wine prefix, wine-staging (as used comment 0) creates always 64 prefix. Maybe the game defaults to dx11 when 64bit system is in use. I haven't tested this game for long time since it was quite big download. It takes hours to download so I am not keen on testing thiskind of stuff.
https://bugs.winehq.org/show_bug.cgi?id=42695
Zakk zakk@rsdio.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |zakk@rsdio.com
--- Comment #6 from Zakk zakk@rsdio.com --- To get the DirectX11 option you need to run a 64 bit prefix and run PathOfExile_x64.exe
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #7 from Guillaume gufideg@gmail.com --- DirectX11 is not enabled by default. One must launch the 64x version of the game and go to the options and enable it.
https://bugs.winehq.org/show_bug.cgi?id=42695
wardormeur+wine@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |wardormeur+wine@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=42695
Guillaume gufideg@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Version|2.3 |2.13
https://bugs.winehq.org/show_bug.cgi?id=42695
Józef Kucia joseph.kucia@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |joseph.kucia@gmail.com Version|2.13 |2.3
https://bugs.winehq.org/show_bug.cgi?id=42695
Fincer fincer89@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |fincer89@hotmail.com
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #8 from Guillaume gufideg@gmail.com --- Since 3.0.0, we see
Failed to create WIC Factory
And then the game proceed to output the refcount for many font resources.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #9 from Guillaume gufideg@gmail.com --- Created attachment 58875 --> https://bugs.winehq.org/attachment.cgi?id=58875 console output 3.0.0
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #10 from Kevin Ilphrin Pellet ilphrin@autistici.org --- I have the same issue, again, as Guillaume.
Failed to create WIC Factory
Then a lot of error messages for fonts resources.
https://bugs.winehq.org/show_bug.cgi?id=42695
Robert Olofsson winehq@khelekore.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |winehq@khelekore.org
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #11 from Robert Olofsson winehq@khelekore.org --- Same problem with wine-2.15 (Staging)
https://bugs.winehq.org/show_bug.cgi?id=42695
Fabian Maurer dark.shadow4@web.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |dark.shadow4@web.de
https://bugs.winehq.org/show_bug.cgi?id=42695
Cristóbal Camarero nakacristo@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |nakacristo@hotmail.com
--- Comment #12 from Cristóbal Camarero nakacristo@hotmail.com --- I have been debugging Path of Exile on a Windows machine and the condition to show the "Failed to create WIC Factory" depends only on a call to kernelbase.InitOnceExecuteOnce passing a function containing a call to combase.CoCreateInstance.
I do not know a lot of wine, but it seems that InitOnceExecuteOnce is at kernel32 and CoCreateInstance at ole32. I am not sure if that could be causing problems.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #13 from Cristóbal Camarero nakacristo@hotmail.com --- If we add CoInitialize(NULL); inside the definition of CoCreateInstance before calling CoCreateInstanceEx then the error "Failed to create WIC Factory" no longer appears. Then it advances enough to show the original error of "Failed to retrive IDXGIFactory from adapter".
This error appears when creating an object of iid 50c83a1c-e072-4c48-87b0-3630fa36a6d0, that is, a IDXGIFactory2. I tried to fake it in dxgi_factory_QueryInterface acting as it was OK but it only gets me a silent failure.
I have been using a modified wine-2.14-staging.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #14 from Cristóbal Camarero nakacristo@hotmail.com --- I got it working.
In addition to the "CoInitialize(NULL);" hack I just have now commented the line {D3D_FEATURE_LEVEL_11_1, 5}, in dlls/dxgi/utils.c at dxgi_check_feature_level_support so the game only uses 11_0 features and not 11_1 features as IDXGIFactory2 and CreateSwapChainForHwnd.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #15 from Fincer fincer89@hotmail.com --- Created attachment 59204 --> https://bugs.winehq.org/attachment.cgi?id=59204 Patch for starting Path of Exile in DX11 mode
Thanks Cristóbal!
I made a patch file based on your instructions. It seem to work and I can start Path of Exile in DX11 mode. Though I don't like disabling DX11 feature level 11_1 in general. I understand it must be done at this point until state of DX11 implementation improves in Wine.
In DX11 mode, I have a downsampled/pixelated resolution for some reason (checked my resolution settings already). Maybe I should tweak my graphics settings further in PoE to get more information about this issue or just wait for better DX11 implementation.
Patch file as an attachment. Tested on Wine 2.16 Staging, clean 64-bit Wineprefix environment, Steam version of PoE.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #16 from Guillaume gufideg@gmail.com --- For the downsampled resolution, I think it's the "Dynamic Resolution" feature. It dynamically downscale the game resolution to avoid dropping frames. I'll try to find the time to check whether the downsampling is normal or not.
https://bugs.winehq.org/show_bug.cgi?id=42695
Fincer fincer89@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Blocks| |43744
https://bugs.winehq.org/show_bug.cgi?id=42695
David Brooks skade88@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |skade88@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=42695
Michael Müller michael@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Product|Wine-staging |Wine Component|-unknown |-unknown
--- Comment #17 from Michael Müller michael@fds-team.de --- I don't think that a missing initialization of COM is a Wine Staging regression, moving the bug into the Wine product.
https://bugs.winehq.org/show_bug.cgi?id=42695
Ernst Persson ernstp@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |ernstp@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #18 from Ernst Persson ernstp@gmail.com --- Cool! Works here also, with Mesa+RadeonSI. A bit slower than DX9 though. And needs CSMT for correct rendering.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #19 from Kevin Ilphrin Pellet ilphrin@autistici.org --- Is there any plan to add this patch to the Wine codebase?
https://bugs.winehq.org/show_bug.cgi?id=42695
Screwtape thristian@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |thristian@gmail.com
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #20 from Kevin Ilphrin Pellet ilphrin@autistici.org --- Wien 3.0 is officially launched with better support for DirectX 11, but have the same issue
"Failed to create WIC Factory"
And then a few font issues:
"FONTDFPHeiMedium-B5-POE&Art/2DArt/Fonts/DFPT_B5_POE.ttf: Reference count for loaded resource FONTDFPHeuMedium-B5-POE&Art/2DArt/Fonts/DFPT_B5_POE.ttf is 66"
"FONTSimsun& : Reference count for loaded resources FONTSimsun& is 1"
"FONTMinglu& : Reference count for loaded resources FONTMinglu& is 1"
"FONTGulim& : Reference count for loaded resources FONTGulim& is 1"
"FONTMS UI Gothic& : Reference count for loaded resources FONTMS UI Gothic& is 65"
"FONTFrizQuadrataITC&Art/2DArt/Fonts/FrizQuadrataITC.ttf& : Reference count for loaded resources FONTFrizQuadrataITC&Art/2DArt/Fonts/FrizQuadrataITC.ttf& is 1"
"FONTArial&: Reference count for loaded resources FONTArial& is 65"
"FONTMicrosoft Sans Serif&: Reference count for loaded resource FONTMicrosoft Sans Serif& is 65"
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #21 from Nikolay Sivov bunglehead@gmail.com --- Please attach +wincodecs,+ole,+rpc log from starting the game to WIC factory failure.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #22 from Ernst Persson ernstp@gmail.com --- Someone on Reddit suggested that https://source.winehq.org/git/wine.git/commit/f99a548148bae4a8db904171a53793... would help, but it's not included in 3.0.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #23 from Nikolay Sivov bunglehead@gmail.com --- For dxgi problem maybe, but I'm talking about hack to ole32 for now, that's not resolved.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #24 from Kevin Ilphrin Pellet ilphrin@autistici.org --- Created attachment 60366 --> https://bugs.winehq.org/attachment.cgi?id=60366 Wine 3.0 output
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #25 from Kevin Ilphrin Pellet ilphrin@autistici.org --- (In reply to Nikolay Sivov from comment #21)
Please attach +wincodecs,+ole,+rpc log from starting the game to WIC factory failure.
I've added an attachment with the full wine log. I'm not sur if the flags where correctly used it is the first time i use the WINEDEBUG variable
https://bugs.winehq.org/show_bug.cgi?id=42695
Simon Körner winehq@lubiland.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |winehq@lubiland.de
https://bugs.winehq.org/show_bug.cgi?id=42695
Bjoern Bidar theodorstormgrade@googlemail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |theodorstormgrade@googlemai | |l.com
--- Comment #26 from Bjoern Bidar theodorstormgrade@googlemail.com --- Is this still up to date? The game still crashes for me.
https://bugs.winehq.org/show_bug.cgi?id=42695
Felix Hellmann privat@cirk2.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |privat@cirk2.de
--- Comment #27 from Felix Hellmann privat@cirk2.de --- With wine-staging 3.3 I only need the CoInitialize(NULL); change from Comment 15. The D3D_Feature_Level change is not needed. Otherwise this is still the same.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #28 from Kevin Ilphrin Pellet ilphrin@autistici.org --- I applied the patch from Comment 15, and also tried to apply wine-pba from https://github.com/acomminos/wine-pba The game runs in Dx11 perfectly, with some nice performances wins from wine-pba, and very much less sluttering. Building from wine-3.3 + staging (compiling wine is pretty easy)
https://bugs.winehq.org/show_bug.cgi?id=42695
Józef Kucia joseph.kucia@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|Path of Exile: fail to |Path of Exile: fail to |start when launching with |start when launching with |dx11 enabled |dx11 enabled (WIC factory | |failure)
https://bugs.winehq.org/show_bug.cgi?id=42695
tokktokk fdsfgs@krutt.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |fdsfgs@krutt.org
https://bugs.winehq.org/show_bug.cgi?id=42695
godevilove godevilove@ya.ru changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |godevilove@ya.ru
--- Comment #29 from godevilove godevilove@ya.ru --- *** Bug 45607 has been marked as a duplicate of this bug. ***
https://bugs.winehq.org/show_bug.cgi?id=42695
Mikko Rasa tdb@tdb.fi changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |tdb@tdb.fi
--- Comment #30 from Mikko Rasa tdb@tdb.fi --- As of right now Path of Exile won't start in DX11 mode with Wine 3.14. It gives an error saying "Failed to create deferred context", followed by some file/line information and the error code -2147467263, which corresponds to E_NOTIMPL (0x80004001). And sure enough, d3d11_device_CreateDeferredContext is a stub returning E_NOTIMPL. I guess the rendering engine got changed and now requires a different type of context than before.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #31 from Mikko Rasa tdb@tdb.fi --- Update: After applying the patchset d3d11-Deferred_Context (and dependencies) from wine-staging Path of Exile no longer crashes on startup. Now it hangs on a black screen, consuming 100% CPU time.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #32 from Mikko Rasa tdb@tdb.fi --- Another update: Also applying windowscodecs-* from wine-staging finally makes the game run (up to login screen at least).
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #33 from Zebediah Figura z.figura12@gmail.com --- *** Bug 46355 has been marked as a duplicate of this bug. ***
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #34 from godevilove godevilove@ya.ru --- For the history: https://lutris.net/games/path-of-exile/ this works without any problems, just download the starter and start the game. Dx11, 64-bit, no steam needed, no need to compile and patch wine (it's a huge PITA) it's as simple as downloading the game starter, selecting most recent 'tkg' version of wine and running the game!
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #35 from Bjoern Bidar theodorstormgrade@googlemail.com ---
For the history: https://lutris.net/games/path-of-exile/ this works without any problems, just >download the starter and start the game. Dx11, 64-bit, no steam needed, no need to compile and patch wine (it's a huge >PITA) it's as simple as downloading the game starter, selecting most recent >'tkg' version of wine and running the game!
For the history: this is no place to discuss wine frontends or anything like it. Its just to discuss wine bugs and/or patches. Your opinions on how its to compile wine doesn't matter.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #36 from godevilove godevilove@ya.ru --- Nah, I think it's fine: after all, people don't care about the wine itself, people care about how to run windows programs and I offered a good solution. If winehq staff ignores issue tickets for years (almost 2 years have passed since this ticket got opened and the ticket still has 'UNCONFIRMED' status) - I don't think they have any moral right to shut people up, that posting comments with real solutions.
https://bugs.winehq.org/show_bug.cgi?id=42695
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Summary|Path of Exile: fail to |Path of Exile fails to |start when launching with |start when launching with |dx11 enabled (WIC factory |dx11 enabled with message |failure) |"Failed to create WIC | |factory" | |(CoCreateInstance() called | |in uninitialized apartment) CC| |z.figura12@gmail.com
--- Comment #37 from Zebediah Figura z.figura12@gmail.com --- (In reply to godevilove from comment #36)
Nah, I think it's fine: after all, people don't care about the wine itself, people care about how to run windows programs and I offered a good solution. If winehq staff ignores issue tickets for years (almost 2 years have passed since this ticket got opened and the ticket still has 'UNCONFIRMED' status)
- I don't think they have any moral right to shut people up, that posting
comments with real solutions.
Moral rights aside (and that's a pretty bold argument), clutter in our bug tracker makes it harder to read and find useful information, and as such is a good way to encourage developers not to fix bugs.
Complaining is also a good way to do that.
Unconfirmed/confirmed distinction is basically meaningless as far as I'm concerned, but, since you seem to care, confirming.
Anyway, it turns out this bug has been open for almost two years because it's actually really hard to figure out the correct solution. That doesn't mean that people haven't been trying; I can personally attest to that.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #38 from godevilove godevilove@ya.ru --- Every system with input and no cleanups will get cluttered (given enough time), that's like an axiom.
I'd suggest to assign people to tickets and make them remove outdated comments and useless extra info/discussions in their tickets, if you want cleanliness.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #39 from Zebediah Figura z.figura12@gmail.com --- (In reply to godevilove from comment #38)
Every system with input and no cleanups will get cluttered (given enough time), that's like an axiom.
Yes. That's why we avoid the "input" part.
I'd suggest to assign people to tickets and make them remove outdated comments and useless extra info/discussions in their tickets, if you want cleanliness.
WineHQ is volunteer effort, so "assignment" is less effective than you think. Bugzilla administration is not a very efficient use of time anyway, for developers or for anyone else. Please help obviate it.
https://bugs.winehq.org/show_bug.cgi?id=42695
Paul Gofman gofmanp@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |gofmanp@gmail.com
--- Comment #40 from Paul Gofman gofmanp@gmail.com --- Created attachment 63132 --> https://bugs.winehq.org/attachment.cgi?id=63132 Return CO_E_NOTINITIALIZED in CoInitializeSecurity() if COM is not initialized
Can someone test the game with the attached patch used instead of that one CoInitialize() calling from CoCreateInstance() hack? And if it is not getting fixed this way (likely result), provide a WINEDEBUG=+tid,+ole,+rpc log with and without this patch (but yet without CoInitialize() call hack)?
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #41 from Nikolay Sivov bunglehead@gmail.com --- (In reply to Paul Gofman from comment #40)
Created attachment 63132 [details] Return CO_E_NOTINITIALIZED in CoInitializeSecurity() if COM is not initialized
Can someone test the game with the attached patch used instead of that one CoInitialize() calling from CoCreateInstance() hack? And if it is not getting fixed this way (likely result), provide a WINEDEBUG=+tid,+ole,+rpc log with and without this patch (but yet without CoInitialize() call hack)?
CoInitializeSecurity() is a part of WMI query call, and happens after CoInitializeEx(), so this change won't matter. I don't think CoInitializeSecurity() is restricted like that, because it sets per-process info that overrides default parameters.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #42 from Paul Gofman gofmanp@gmail.com --- (In reply to Nikolay Sivov from comment #41)
(In reply to Paul Gofman from comment #40)
CoInitializeSecurity() is a part of WMI query call, and happens after CoInitializeEx(), so this change won't matter. I don't think CoInitializeSecurity() is restricted like that, because it sets per-process info that overrides default parameters.
Well, I don't have any ole enabled trace to see the sequence of inits and uninits. I just saw CoInitializeSecurity() stub call, and checked that Wine stub succeeds unconditionally, while it fails on Windows witn CO_E_UNITIALIZED in this case. My wild guess was that if noone initialized COM in this thread before and this function will fail with the same error as on Windows instead of succeeding it may trigger some different path in the application. In any case a log might be helpful, so much discussions in this bug report and not a single relevant log :)
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #43 from Nikolay Sivov bunglehead@gmail.com --- I looked at this game specifically, CoInitializeSecurity() is called after explicit init call, and is followed by explicit uninit call, so it's not that.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #44 from Paul Gofman gofmanp@gmail.com --- I downloaded the game and tried to track down what's happening there. While forcing CoInitializeSecurity() to return error unconditionally is occasionally pushing app to work (it skips CoUnitialize() in this case), this is no more than another hack as it does not fail in the application running on Windows. Before discovering that I tested some legit cases for CoInitializeSecurity() to fail (that is, if security was already initialized in any thread), but nothing like this is related here as Nikolay said.
On Windows CoCreateInstance() succeeds for WICImagingFactory, while COM is seemingly not initialized. I tested that injecting CoInitialize() calls before or after successful CoCreateInstance() returns S_OK (not S_FALSE) which suggests COM was not initialized before this call. The only documented way how this can happen which I knew or could find is a thread created from some thread which has MTA initialized. But this is not the case here (CoCreateInstance() under discussion happens in main thread, and no other thread initializes MTA apartment). Besides, this case is supported in Wine. I tried to track down what triggers CoCreateInstance() to succeed by injecting the calls to the code creating WICImagingFactory at different points, and found that the call starts to succeed after SetWindowPlacement() call for the application window created like this:
002a:Call user32.CreateWindowExW(00000000,1413ce2c8 L"POEWindowClass",1413cdde8 L"Path of Exile",00cf0000,80000000,80000000,00000328,00000273,00000000,00000000,140000000,00000000) ret=140c48753
I also found some mentioning of the mysterious CoCreateInstance() success after ShowWindow() on the internet: https://social.msdn.microsoft.com/Forums/vstudio/en-US/c1a642e2-184e-4f5a-98.... I checked library calls utilized from the window procedure of the application window and did not find anything relevant. Yet I did not test it thoroughly, so it leaves some room for mistake.
I did not yet reproduce that case on an standalone test, but I am not sure all this has any practical sense, as carefully reconstructing the conditions of this out-of-init CoCreateInstances and reproducing this behavior looks unlikely feasible at the moment. And I hope game developers will add an explicit CoInitializeEx() at some point.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #45 from Nikolay Sivov bunglehead@gmail.com --- Created attachment 63172 --> https://bugs.winehq.org/attachment.cgi?id=63172 test
This test works consistently for me on Vista/Win8/Win10, and fails on Win7. My guess is that it's deferred on Win7 somehow, and maybe window has to actually show up to trigger initialization.
What I didn't expect is that it initialized to STA, after just CreateWindow() with default procedure.
I don't know how we can fit this in our graphics driver initialization.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #46 from Zebediah Figura z.figura12@gmail.com --- Shot in the dark, but maybe this has to do with loading non-bitmap icons? Could native be using WIC for that?
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #47 from Paul Gofman gofmanp@gmail.com --- Created attachment 63222 --> https://bugs.winehq.org/attachment.cgi?id=63222 test
I made Nikolay's test to succeed on Windows 7 for me by adding a window procedure for test window. This window procedure does no more than just calls DefWindowProcA() though:
---- static LRESULT CALLBACK TestWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProcA(hwnd, uMsg, wParam, lParam); } ----
I also added a few lines to the test to illustrate that the sequence in the test which allows CoCreateInstance() to succeed does not actually initialize apartment in a normal way, the apartment can be initialized to a different type after that without an error or S_FALSE which would indicate that apartment was already initialized:
----- ... hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); hr = CoGetApartmentType(&apttype, &apttypequal); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(apttype == APTTYPE_MTA && apttypequal == APTTYPEQUALIFIER_NONE, "Unexpected %u/%u\n", apttype, apttypequal); } /* end of test_1(). */ -----
Weird stuff.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #48 from Nikolay Sivov bunglehead@gmail.com --- Great, thanks for the fix. Maybe it hits some shortcut path with DefWindowProc() as class procedure.
Anyway, I'll try to test some more to see when exactly such initialization happens. It seems like it's meant to be transparent, so application that normally initializes its threads can still do so, in desired apartment model.
I have a patch that implements such workaround, and it seems to work.
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #49 from Paul Gofman gofmanp@gmail.com --- I started this game once again and now after some game auto update in runs ok with Wine staging 4.0-rc4. So it looks like the initialization was added in a game client update.
The game still does not run with mainstream Wine due to the known staged issue (missing formats in windowscodecs).
https://bugs.winehq.org/show_bug.cgi?id=42695
--- Comment #50 from Nikolay Sivov bunglehead@gmail.com --- Right, that's my impression too, it got fixed in game itself. Still let's keep this one open until my pending patches are in (they fix a couple games still), and wincodecs fixes are out of staging.
https://bugs.winehq.org/show_bug.cgi?id=42695
Alistair Leslie-Hughes leslie_alistair@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch, testcase
https://bugs.winehq.org/show_bug.cgi?id=42695
Alistair Leslie-Hughes leslie_alistair@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |leslie_alistair@hotmail.com Status|NEW |STAGED Staged patchset| |https://github.com/wine-sta | |ging/wine-staging/tree/mast | |er/patches/imm32-com-initia | |lization
https://bugs.winehq.org/show_bug.cgi?id=42695
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|STAGED |RESOLVED Fixed by SHA1| |ea0c992fa5852d6236bf9977c77 | |4d7d40bdb113a Component|-unknown |imm32
--- Comment #51 from Nikolay Sivov bunglehead@gmail.com --- Marking fixed, ea0c992fa5852d6236bf9977c774d7d40bdb113a.
https://bugs.winehq.org/show_bug.cgi?id=42695
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #52 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 6.20.