http://bugs.winehq.org/show_bug.cgi?id=29144
Bug #: 29144 Summary: skyrim freeze starting new game with ati/catalyst Product: Wine Version: 1.3.32 Platform: x86-64 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-d3dx9 AssignedTo: wine-bugs@winehq.org ReportedBy: stevekej@gmail.com CC: wine-bugs@winehq.org Classification: Unclassified
Created attachment 37582 --> http://bugs.winehq.org/attachment.cgi?id=37582 terminal output launching game
After following recommended setups in appdb skyrim installs and starts normally through intro video and animated splash screen. After pressing the new game button, the game starts to load then the screen flickers and the animated splash screen freezes.
It appears, from the comments in appdb that this is only an issue for ati/catalyst as nvidia users have some issues that can be worked around (different terminal output), whereas this cannot.
Terminal output attached.
Used clean wineprefix and combinations of the following: OffscreenRenderingMode=backbuffer or fbo UseGLSL=enabled (does not start with disabled, output = no render device found)
Also tried appdb suggestions: 1. winetricks d3dx9_42 vcrun2008 xact Remove Intro video in "Skyrim/Data/Video" or 2. winetricks vcrun2008 installing DirectX10/DXSETUP.exe
Alas the problem persists.
Other info:
Linux chakra 3.1-CHAKRA #1 SMP PREEMPT Mon Nov 14 12:33:44 UTC 2011 x86_64 Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz GenuineIntel GNU/Linux VGA compatible controller: ATI Technologies Inc Madison [AMD Radeon HD 5000M Series] catalyst 11.10 WINEARCH=win32
http://bugs.winehq.org/show_bug.cgi?id=29144
Göran Uddeborg goeran@uddeborg.se changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |goeran@uddeborg.se
http://bugs.winehq.org/show_bug.cgi?id=29144
Bastik bastik@gmx.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |bastik@gmx.de
--- Comment #1 from Bastik bastik@gmx.de 2011-11-24 12:57:58 CST --- Hello,
absolutily the same problem over here with ubuntu 11.10, wine 1.3.32 and similar configuration as SteveK.
Hardware: Intel C2Q 2.66GHz ATI Radeon 6870 HD (driver catalyst 11.11 or fglrx 8.840)
I receive the same terminal output as SteveK and the game freezes in the game load sequences (after pressing "new game" or "load"/"continue" button to procced a saved game). Even a saved game from a Windows system can't be loaded.
I played a lot of with Direct3D settings in Wine registry but no success.
http://bugs.winehq.org/show_bug.cgi?id=29144
christofi.cos@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |christofi.cos@gmail.com
--- Comment #2 from christofi.cos@gmail.com 2011-11-27 13:43:54 CST --- I can confirm that this bug exists. The game starts up fine, "New" can be selected from the main menu without problem, then the dragon loading screen appears and after a while the loading stops and the game just freezes.
My terminal output looks exactly the same as SteveK's. Once the game is frozen, I can do Ctrl-C in the terminal to kill the process, but that gives the following error:
err:ntdll:RtlpWaitForCriticalSection section 0x7e1cb2a0 "x11drv_main.c: X11DRV_CritSection" wait timed out in thread 0037, blocked by 0009, retrying (60 sec)
Looks like a couple of threads are in deadlock -- could that be the source of the problem? People have reported the same error with other games, including the original Half-Life:
http://bugs.winehq.org/show_bug.cgi?id=14746
I am using an ATI HD 4600 with the latest Catalyst driver (11.11) with Wine 1.3.33, and I agree that this may be driver-related like the others are suggesting. In fact, one of the people in the thread above said: "Possible ATI/wine bug? I just recently switched from r600 mesa to fglrx 10.4. I did not encounter this issue with the former."
I should also mention that I have experimented with limiting the number of hardware threads used by the game to 1 (iNumHWThreads=1 in skyrim.ini), a fix also necessary when playing Fallout 3 that uses the same engine. It made no difference, though I'm not sure how seriously that parameter is taken by the engine.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #3 from christofi.cos@gmail.com 2011-11-28 15:49:39 CST --- Created attachment 37684 --> http://bugs.winehq.org/attachment.cgi?id=37684 debugger output
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #4 from christofi.cos@gmail.com 2011-11-28 15:54:02 CST --- Once the game freezes, winedbg gives some useful output. See attached.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #5 from christofi.cos@gmail.com 2011-11-28 19:20:19 CST --- Good news: I know where the problem is. Bad news: I think it's in fglrx, so I can't fix it. :(
Specifically: In wined3d/drawprim.c there's a function send_attribute(..) that calls another function glVertexAttrib4hvNV(..).
If I do an evil:
printf("%d\n", GL_EXTCALL(glVertexAttrib4hvNV));
the printed result is 0. Zero.
In other words, this is the cause of the null function in the backtrace I attached earlier. To make matters worse, all this happens inside a critical section, which is what causes the game to freeze but not crash and presumably what gave the RtlpWaitForCriticalSection error when I tried to kill the process.
I see nothing suspicious about how glVertexAttrib4hvNV is brought into the code, since all other functions brought in the same way appear to work. Therefore, the problem must be on the driver side...
If you look at the code, an alternative to glVertexAttrib4hvNV is provided that uses the function glVertexAttrib4fARB. I can't find any documentation that describes what these functions actually do, but if I assume they are the same and use that code instead (NB: hack), the game DOES appear to progress a bit.
The loading dragon disappears instead of freezing and I'm presented with... a black screen and new ambient sounds! But the screen stays black and nothing happens -- the Bethesda logo should normally appear. I don't know if this is a new and unrelated problem or if it's something caused by the modification I made. I will look into it if I can find the time.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #6 from Henri Verbeet hverbeet@gmail.com 2011-11-28 23:52:49 CST --- (In reply to comment #5)
I see nothing suspicious about how glVertexAttrib4hvNV is brought into the code, since all other functions brought in the same way appear to work. Therefore, the problem must be on the driver side...
Your glxinfo output does list GL_NV_half_float in the extension string, right?
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #7 from christofi.cos@gmail.com 2011-11-29 11:05:48 CST --- Yes:
glxinfo|grep GL_NV_half_float GL_NV_explicit_multisample, GL_NV_float_buffer, GL_NV_half_float,
But:
void *glVertexAttrib4fARB = dlsym(libGL, "glVertexAttrib4fARB"); void *glVertexAttrib4hvNV = dlsym(libGL, "glVertexAttrib4hvNV");
cout << (glVertexAttrib4fARB == NULL) << endl; // prints 0, OK! cout << (glVertexAttrib4hvNV == NULL) << endl; // prints 1, OOPS!
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #8 from christofi.cos@gmail.com 2011-11-29 11:31:11 CST ---
Your glxinfo output does list GL_NV_half_float in the extension string, right?
glxinfo reports GL_NV_half_float is present, but both glVertexAttrib4hvNV AND glVertexAttrib2hvNV are null.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #9 from Henri Verbeet hverbeet@gmail.com 2011-11-29 23:04:32 CST --- This is probably a legitimate bug in wined3d, actually. From http://www.opengl.org/registry/specs/NV/half_float.txt: "If NV_vertex_program is not supported, references to VertexAttribPointerNV should be removed, as should references to VertexAttrib*h[v] commands.". I guess fglrx doesn't implement NV_vertex_program.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #10 from christofi.cos@gmail.com 2011-11-30 10:34:45 CST --- (In reply to comment #9)
This is probably a legitimate bug in wined3d, actually. From http://www.opengl.org/registry/specs/NV/half_float.txt: "If NV_vertex_program is not supported, references to VertexAttribPointerNV should be removed, as should references to VertexAttrib*h[v] commands.". I guess fglrx doesn't implement NV_vertex_program.
Looks like you're right. But wouldn't that make the fix quite trivial?
ie. in drawprim.c and directx.c, everywhere you have
if (gl_info->supported[NV_HALF_FLOAT])
just do an extra test
if (gl_info->supported[NV_VERTEX_PROGRAM] && gl_info->supported[NV_HALF_FLOAT])
and you're good to go.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #11 from Henri Verbeet hverbeet@gmail.com 2011-11-30 10:53:09 CST --- (In reply to comment #10)
Looks like you're right. But wouldn't that make the fix quite trivial?
Yeah, I'll send a patch.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #12 from Coucouf zecoucou@free.fr 2011-11-30 15:04:24 CST --- Created attachment 37714 --> http://bugs.winehq.org/attachment.cgi?id=37714 Patch
Couldn’t wait, here’s a patch.
Oh, and by the way, IT WORKS !!! *grin*
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #13 from christofi.cos@gmail.com 2011-11-30 15:41:49 CST ---
Created attachment 37714 [details] Patch
Couldn’t wait, here’s a patch.
Oh, and by the way, IT WORKS !!! *grin*
FUS DO RAAAH, MAH BOI!! I was about to post the patch, but... I got distracted. ;)
Btw Henri, I hope this should also fix a large number of other fglrx bugs that are currently open.
http://bugs.winehq.org/show_bug.cgi?id=29144
Coucouf zecoucou@free.fr changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |zecoucou@free.fr
--- Comment #14 from Coucouf zecoucou@free.fr 2011-11-30 17:56:50 CST --- Oh, yeah, it already fixes the freeze I was getting when starting a new game in Might & Magic Heroes VI, but I guess there are several other examples.
Great news !
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #15 from Henri Verbeet hverbeet@gmail.com 2011-12-01 00:34:08 CST --- (In reply to comment #12)
Created attachment 37714 [details] Patch
Couldn’t wait, here’s a patch.
Looks good to me, please send to wine-patches.
http://bugs.winehq.org/show_bug.cgi?id=29144
Stefan Dösinger stefan@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |stefan@codeweavers.com
--- Comment #16 from Stefan Dösinger stefan@codeweavers.com 2011-12-01 04:26:19 CST --- I have occasional contact with AMD and was about to file a bug in their official Bugzilla. I didn't hit the submit button when I realized that their only options are violating the GL_NV_half_float spec(which would be hacky) or writing a new extension(which I consider an overkill for the legacy immediate mode functions).
I'd say GL_ARB_instanced_arrays is the best way to go if we want to avoid the extra type conversion.
http://bugs.winehq.org/show_bug.cgi?id=29144
Martín Perazzo rechapita@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |rechapita@hotmail.com
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #17 from Martín Perazzo rechapita@hotmail.com 2011-12-02 17:35:25 CST --- (In reply to comment #12)
Created attachment 37714 [details] Patch
Couldn’t wait, here’s a patch.
Oh, and by the way, IT WORKS !!! *grin*
Patch works for me, but on my I7 Q740 laptop with mobility radeon hd5730 I get 5-10 fps. too slow to be usable :(
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #18 from Bastik bastik@gmx.de 2011-12-02 17:41:43 CST --- Thanks for patching,
confirmed Skyrim is running on "High" setting (not "very high") with Antialising turned off and FXAA on.
http://bugs.winehq.org/show_bug.cgi?id=29144
tolu eleyinafe.tolu5@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |eleyinafe.tolu5@gmail.com
--- Comment #19 from tolu eleyinafe.tolu5@gmail.com 2011-12-03 16:07:42 CST --- How do u apply patches
http://bugs.winehq.org/show_bug.cgi?id=29144
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |00cpxxx@gmail.com
--- Comment #20 from Bruno Jesus 00cpxxx@gmail.com 2011-12-03 16:12:33 CST --- (In reply to comment #19)
How do u apply patches
You need to compile wine yourself, read the following links: http://wiki.winehq.org/GitWine#head-bc3ee0bfecc17d220da733af4d8ab1154861c7c9 http://wiki.winehq.org/Patching
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #21 from tolu eleyinafe.tolu5@gmail.com 2011-12-03 16:21:47 CST --- How do you download this patch and put the patch in to wine
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #22 from Dmitry Timoshkov dmitry@baikal.ru 2011-12-03 23:28:49 CST --- (In reply to comment #21)
How do you download this patch and put the patch in to wine
Please use forums for user support questions. Also adding '?' at the end of a question is a usual agreement.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #23 from Henri Verbeet hverbeet@gmail.com 2011-12-09 22:15:53 CST --- Should be fixed by 11efbbf1403ef65c7a6b03f9c03491ca06932c3c.
http://bugs.winehq.org/show_bug.cgi?id=29144
SteveK stevekej@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |FIXED
--- Comment #24 from SteveK stevekej@gmail.com 2011-12-17 13:30:04 CST --- Thanks guys!
This is now solved in 1.3.35
http://bugs.winehq.org/show_bug.cgi?id=29144
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |11efbbf1403ef65c7a6b03f9c03 | |491ca06932c3c
http://bugs.winehq.org/show_bug.cgi?id=29144
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #25 from Alexandre Julliard julliard@winehq.org 2011-12-30 12:57:20 CST --- Closing bugs fixed in 1.3.36.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #26 from Martín Perazzo rechapita@hotmail.com 2012-01-16 11:05:16 CST --- (In reply to comment #16)
I have occasional contact with AMD and was about to file a bug in their official Bugzilla. I didn't hit the submit button when I realized that their only options are violating the GL_NV_half_float spec(which would be hacky) or writing a new extension(which I consider an overkill for the legacy immediate mode functions).
I'd say GL_ARB_instanced_arrays is the best way to go if we want to avoid the extra type conversion.
I would like a little bit of info on this. Seems converting to normal floats and using glVertexAttrib4fARB is increasing the bandwith traffic to the graphic card far too much causing a huge performance hit relative to nvidia cards.
dumb question: why GL_ARB_half_float_vertex is not usable in this case?
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #27 from Martín Perazzo rechapita@hotmail.com 2012-01-16 18:10:23 CST --- out of curiosity I hacked a patch that uses glVertexAttribPointer instead of glVertexAttrib2fARB and glVertexAttrib4fARB. I got a subjective increase on fps ( I was averaging at 7fps. now 8fps) Im attaching the patch if anyone is interested.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #28 from Martín Perazzo rechapita@hotmail.com 2012-01-16 18:11:56 CST --- Created attachment 38391 --> http://bugs.winehq.org/attachment.cgi?id=38391 hackpatch that uses glVertexAttribPointer
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #29 from Stefan Dösinger stefan@codeweavers.com 2012-01-17 03:49:37 CST --- That hack won't work. glVertexAttrib* sets the current vertex attribute(and glVertexAttrib*(0) emits a vertex if called between glBegin/glEnd), glVertexAttribPointer configures a vertex stream by glDrawArrays/glDrawElements. See http://www.opengl.org/sdk/docs/man/xhtml/glDrawArrays.xml .
What you really want here is GL_ARB_instanced_arrays.
Also, please generate diffs with git. If you really have to use diff, use diff -u.
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #30 from Martín Perazzo rechapita@hotmail.com 2012-01-19 08:24:07 CST --- (In reply to comment #29)
What you really want here is GL_ARB_instanced_arrays.
Also, please generate diffs with git. If you really have to use diff, use diff -u.
ok. I made 2 attempts to modify drawStridedInstanced to use GL_ARB_instanced_arrays.
try 1: attempt to specify the vertex attributes via glVertexAttribPointer assuming they all the attributes of an instance are equally spaced in memory and of the same type.
try 2: do not assume type and spacing and specify each attribute individually
Both attempts caused the same type of crash previous to the NV_VERTEX_PROGRAM fix and im a little on the dark on how to debug them.
Im also unsure if GLtypes and sizes Im specifing in send_attribute_inst_arrays are correct.
Please help. I only have half a clue of what im doing.
Also, this is kind of getting off-topic continuing this discussion here. Should I open a new bug to discuss this?
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #31 from Martín Perazzo rechapita@hotmail.com 2012-01-19 08:25:28 CST --- Created attachment 38445 --> http://bugs.winehq.org/attachment.cgi?id=38445 failed attempt 1 to use GL_ARB_instanced_arrays
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #32 from Martín Perazzo rechapita@hotmail.com 2012-01-19 08:25:58 CST --- Created attachment 38446 --> http://bugs.winehq.org/attachment.cgi?id=38446 failed attempt 2 to use GL_ARB_instanced_arrays
http://bugs.winehq.org/show_bug.cgi?id=29144
--- Comment #33 from Stefan Dösinger stefan@codeweavers.com 2012-01-19 23:17:23 CST --- I accidentally sent a hacky patch for this to wine-devel a while ago: http://www.winehq.org/pipermail/wine-devel/2011-June/090454.html. It had some issues at the time, that's why I never sent it to wine-patches. Then I lost it due to a harddisk crash. It is patch 3 in the .tar.bz2 archive.
The closed bug report is not a good place to discuss this further development, wine-devel is a better place for that.