http://bugs.winehq.org/show_bug.cgi?id=20591
Summary: FIFA 08: crashes when starting a match Product: Wine Version: 1.1.31 Platform: PC URL: http://largedownloads.ea.com/pub/demos/Fifa/08/FIFA08_ PC_Demo.exe OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-d3d AssignedTo: wine-bugs@winehq.org ReportedBy: b.brachaczek@gmail.com CC: stefandoesinger@gmx.at
FIFA 08 (also demo version, link in URL) crashes when starting a match (you see some frames, and when the game is going to show players, it crashes) in Wine 1.1.31 and later (also in current git). This was introduced in this commit:
wined3d: Don't reserve clipping constants needlessly. author Stefan Dösinger stefan@codeweavers.com Tue, 6 Oct 2009 18:59:44 +0000 (20:59 +0200) commit 8a68f418dbea0967003818e5bbac10e5ffc22512
I added the following code right before the new if..else clause in dlls/wined3d/arb_program_shader.c in current git:
FIXME("clip_limit: gl_info->limits.clipplanes = %u\n", gl_info->limits.clipplanes); FIXME("clip_limit: ctx->target_version = %u (ARB = %d)\n", ctx->target_version, ARB); FIXME("clip_limit: use_nv_clip(gl_info) = %d, ctx->target_version >= NV2 = %d\n", use_nv_clip(gl_info), ctx->target_version >= NV2); unsigned int __mask = ctx->cur_vs_args->boolclip.clipplane_mask; FIXME("clip_limit: mask = %u\n", __mask); FIXME("clip_limit: count_bits(mask) = %u\n", count_bits(__mask));
And got those messages right before the crash:
fixme:d3d_shader:shader_generate_arb_declarations clip_limit: gl_info->limits.clipplanes = 6 fixme:d3d_shader:shader_generate_arb_declarations clip_limit: ctx->target_version = 0 (ARB = 0) fixme:d3d_shader:shader_generate_arb_declarations clip_limit: use_nv_clip(gl_info) = 0, ctx->target_version >= NV2 = 0 fixme:d3d_shader:shader_generate_arb_declarations clip_limit: mask = 0 fixme:d3d_shader:shader_generate_arb_declarations clip_limit: count_bits(mask) = 0
And by the way I've also tried adding the following code in place of this if..else clause in the current git: clip_limit = gl_info->limits.clipplanes; if(ctx->target_version == ARB) clip_limit = min(clip_limit, 4); And FIFA doesn't crash then, but I guess it's not the proper way to fix the problem.