[Bug 32058] Guild Wars 2 launcher freezes/hangs (unable to launch game)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Nov 25 16:34:36 CST 2012


http://bugs.winehq.org/show_bug.cgi?id=32058

--- Comment #10 from x.egam.wodahs.x at gmail.com 2012-11-25 16:34:36 CST ---
So I'm currently using wine 1.5.18 with
6f3b097a203d9ca248732cb45eed462599ca3af1 reverted (the same commit mentioned in
Comment 9, which is also the "first bad" commit of the 2nd git bisect from the
initial report). Reverting this commit and compiling from source (and using
-dx9single) is the only way I can run GW2 with wine 1.5.15 or higher. I know
this isn't really news, just a status update I guess.

However, in an attempt to help get this fixed, I have taken a closer look at
the diff of the commit

diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c
index ceecb0c..36e3ac9 100644
--- a/dlls/winex11.drv/bitblt.c
+++ b/dlls/winex11.drv/bitblt.c
@@ -1676,8 +1676,8 @@ static void update_surface_region( struct
x11drv_window_surface *surface )
                             (surface->is_argb && !(bits[x] & 0xff000000))))
x++;
                     start = x;
                     while (x < width &&
-                           ((bits[x] & 0xffffff) != surface->color_key ||
-                            !(surface->is_argb && !(bits[x] & 0xff000000))))
x++;
+                           !((bits[x] & 0xffffff) == surface->color_key ||
+                             (surface->is_argb && !(bits[x] & 0xff000000))))
x++;
                     add_row( rgn, data, surface->header.rect.left + start, y,
x - start );
                 }
             }

and can't help but wonder: was the condition in the while loop intentionally
changed, or was the intention just to re-write it? I don't know enough about
the wine source to understand the condition, but I would like to note that they
are different, which is why reverting this commit makes GW2 work for me again.

If we simplify the condition by using letters a, b, c, d, then we can see the
difference more easily:
before: (x < width && (a != b || !(c && !d)))
after:  (x < width && !(a == b || (c && !d)))

In order for these to be the same, the second one would instead need to be for
example (x < width && !(a == b && (c && !d)))

If the condition change was intentional, any ideas what may be the cause of the
new one not working on my system? Here's some info (I can provide more info
upon request) about my system:
Operating System: Ubuntu 12.04 64-bit
Graphics card: GeForce GTX 560 Ti
NVIDIA Driver Version: 304.43

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list