Bug 28530 - [r300g] Sins of a Solar Empire crash with libtxc_dxtn.so
Summary: [r300g] Sins of a Solar Empire crash with libtxc_dxtn.so
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Mesa core (show other bugs)
Version: git
Hardware: Other All
: medium normal
Assignee: mesa-dev
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-06-14 05:27 UTC by Pavel Ondračka
Modified: 2010-06-22 05:36 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments
full terminal output (17.46 KB, text/plain)
2010-06-14 05:27 UTC, Pavel Ondračka
Details

Description Pavel Ondračka 2010-06-14 05:27:47 UTC
Created attachment 36262 [details]
full terminal output

This is another bug I found when testing with compressed textures enabled. Sins of a Solar Empire is a w32 app, I'm running it with Wine 1.2-rc3. However this should not be a Wine mistake, game works fine with r300c and also with another drivers. 
My GPU: ATI Technologies Inc M56P [Radeon Mobility X1600] (RV530)
mesa: 8ad410dc13e1b05a987699685c1a291f96442101
Kernel: 2.6.35-rc2

Backtrace:
state_tracker/st_cb_texture.c:1245:st_CompressedTexSubImage2D: Assertion `width % util_format_get_blockwidth(pformat) == 0' failed.
debug_get_bool_option: GALLIUM_ABORT_ON_ASSERT = TRUE
_debug_assert_fail () at /home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:233
0x7d57c964 _debug_assert_fail+0x57 [/home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:233] in r300_dri.so: jmp	0x7d57c974 _debug_assert_fail+0x67 [/home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:236] in r300_dri.so
233	      os_abort();
Wine-dbg>bt
Backtrace:
=>0 0x7d57c964 _debug_assert_fail+0x57(expr="width % util_format_get_blockwidth(pformat) == 0", file="state_tracker/st_cb_texture.c", line=0x04dd, function="st_CompressedTexSubImage2D") [/home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:233] in r300_dri.so (0x0033f3c4)
  1 0x7d52637c st_CompressedTexSubImage2D+0x214(ctx=0x7cf7eb58, target=0x0de1, level=0x0003, xoffset=0, yoffset=0, width=0x0002, height=0x0002, format=0x83f3, imageSize=0x0010, data=0xe19ac10, texObj=0x7d055a28, texImage=0x7d05c020) [/home/Paulie/mesa/src/mesa/state_tracker/st_cb_texture.c:1245] in r300_dri.so (0x0033f424)
  2 0x7d4524a5 compressed_tex_sub_image+0x301(dims=0x0002, target=0x0de1, level=0x0003, xoffset=0, yoffset=0, zoffset=0, width=0x0002, height=0x0002, depth=0x0001, format=0x83f3, imageSize=0x0010, data=0xe19ac10) [/home/Paulie/mesa/src/mesa/main/teximage.c:3669] in r300_dri.so (0x0033f464)
  3 0x7d45263e _mesa_CompressedTexSubImage2DARB+0x60(target=0x0de1, level=0x0003, xoffset=0, yoffset=0, width=0x0002, height=0x0002, format=0x83f3, imageSize=0x0010, data=0xe19ac10) [/home/Paulie/mesa/src/mesa/main/teximage.c:3714] in r300_dri.so (0x0033f4a4)
  4 0x7d6d1e43 (0x0033f594)
  5 0x7e4728ec IWineD3DSurfaceImpl_LoadLocation+0x101e(iface=0xde1, flag=0x0003, rect=(nil)) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:4473] in wined3d (0x0033f594)
  6 0x7e45efb3 surface_upload_data+0x467(This=0xe19aad0, gl_info=0x1489cc, format_desc=0x33f5e8, srgb=0, data=0xe19ac10) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:758] in wined3d (0x0033f734)
  7 0x7e4728ec IWineD3DSurfaceImpl_LoadLocation+0x101e(iface=0xe19aad0, flag=0x0040, rect=(nil)) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:4473] in wined3d (0x0033f7a4)
  8 0x7e4680cf IWineD3DSurfaceImpl_LoadTexture+0x285(iface=0xe19aad0, srgb_mode=0) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:2556] in wined3d (0x0033f824)
  9 0x7e4804a7 texture_internal_preload+0x249(iface=0xe19a538, srgb=SRGB_RGB) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/texture.c:92] in wined3d (0x0033f854)
  10 0x7e3a99b9 device_preload_texture+0x69(stateblock=0x150108, idx=0) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/device.c:469] in wined3d (0x0033f884)
  11 0x7e3a9aa2 device_preload_textures+0xe3(device=0x14d060) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/device.c:501] in wined3d (0x0033f8e4)
  12 0x7e3a5a6c context_apply_draw_state+0x146(context=0x15e5d8, device=0x14d060) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/context.c:2119] in wined3d (0x0033fb04)
  13 0x7e3e63a8 drawPrimitive+0x174(iface=0x14d060, index_count=0x0096, StartIdx=0, idxSize=0x0002, idxData=0x17b510) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/drawprim.c:606] in wined3d (0x0033fb64)
  14 0x7e3bbace IWineD3DDeviceImpl_DrawIndexedPrimitive+0x270(iface=0x14d060, startIndex=0, index_count=0x0096) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/device.c:4690] in wined3d (0x0033fbb4)
  15 0x7e4ea830 IDirect3DDevice9Impl_DrawIndexedPrimitive+0x113(iface=0x149258, PrimitiveType=D3DPT_TRIANGLELIST, BaseVertexIndex=0, MinVertexIndex=0, NumVertices=0x0064, startIndex=0, primCount=0x0032) [/home/Paulie/wine-1.2-rc3/dlls/d3d9/device.c:1843] in d3d9 (0x0033fc90)
  16 0x0042d5b3 in sins of a solar empire (+0x2d5b2) (0x0033fcb4)
  17 0x004672dd in sins of a solar empire (+0x672dc) (0x0033fce8)
  18 0x004059a5 in sins of a solar empire (+0x59a4) (0x0033fd18)
  19 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fdc8)
  20 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  21 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fcb4)
  22 0x00467404 in sins of a solar empire (+0x67403) (0x0033fce8)
  23 0x004059a5 in sins of a solar empire (+0x59a4) (0x0033fd18)
  24 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fdc8)
  25 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  26 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fce8)
  27 0x004672dd in sins of a solar empire (+0x672dc) (0x0033fd18)
  28 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fdc8)
  29 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  30 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fd18)
  31 0x004059a5 in sins of a solar empire (+0x59a4) (0x0033fdc8)
  32 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  33 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fdc8)
  34 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fe60)
  35 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fe60)
  36 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe78)
  37 0x7b85a83a start_process+0x143(peb=0x7ffdf000) [/home/Paulie/wine-1.2-rc3/dlls/kernel32/process.c:996] in kernel32 (0x0033fe78)
  38 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fec8)
  39 0x7b85a83a start_process+0x143(peb=0x7b85a6f6) [/home/Paulie/wine-1.2-rc3/dlls/kernel32/process.c:996] in kernel32 (0x0033fed8)
  40 0x7bc7a5f8 call_thread_func+0xb() in ntdll (0x0033ffb8)
  41 0x7bc7a636 call_thread_entry_point+0x33(entry=0x7b85a6f6, arg=0x0(nil)) [/home/Paulie/wine-1.2-rc3/dlls/ntdll/signal_i386.c:2466] in ntdll (0x0033ffe8)
  42 0x7bc52a42 start_process+0x2f(kernel_start=*** Invalid address 0x00000008 ***

and another one:

state_tracker/st_cb_texture.c:1246:st_CompressedTexSubImage2D: Assertion `height % util_format_get_blockheight(pformat) == 0' failed.
debug_get_bool_option: GALLIUM_ABORT_ON_ASSERT = TRUE
0x7d57c964 _debug_assert_fail+0x57 [/home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:233] in r300_dri.so: jmp	0x7d57c974 _debug_assert_fail+0x67 [/home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:236] in r300_dri.so
233	      os_abort();
Wine-dbg>bt
Backtrace:
=>0 0x7d57c964 _debug_assert_fail+0x57(expr="height % util_format_get_blockheight(pformat) == 0", file="state_tracker/st_cb_texture.c", line=0x04de, function="st_CompressedTexSubImage2D") [/home/Paulie/mesa/src/gallium/auxiliary/util/u_debug.c:233] in r300_dri.so (0x0033f3c4)
  1 0x7d5263cc st_CompressedTexSubImage2D+0x264(ctx=0x7cf7eb58, target=0x0de1, level=0x0003, xoffset=0, yoffset=0, width=0x0002, height=0x0002, format=0x83f3, imageSize=0x0010, data=0xe19ac10, texObj=0x7d055a28, texImage=0x7d05c020) [/home/Paulie/mesa/src/mesa/state_tracker/st_cb_texture.c:1246] in r300_dri.so (0x0033f424)
  2 0x7d4524a5 compressed_tex_sub_image+0x301(dims=0x0002, target=0x0de1, level=0x0003, xoffset=0, yoffset=0, zoffset=0, width=0x0002, height=0x0002, depth=0x0001, format=0x83f3, imageSize=0x0010, data=0xe19ac10) [/home/Paulie/mesa/src/mesa/main/teximage.c:3669] in r300_dri.so (0x0033f464)
  3 0x7d45263e _mesa_CompressedTexSubImage2DARB+0x60(target=0x0de1, level=0x0003, xoffset=0, yoffset=0, width=0x0002, height=0x0002, format=0x83f3, imageSize=0x0010, data=0xe19ac10) [/home/Paulie/mesa/src/mesa/main/teximage.c:3714] in r300_dri.so (0x0033f4a4)
  4 0x7d6d1e43 (0x0033f594)
  5 0x7e4728ec IWineD3DSurfaceImpl_LoadLocation+0x101e(iface=0xde1, flag=0x0003, rect=(nil)) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:4473] in wined3d (0x0033f594)
  6 0x7e45efb3 surface_upload_data+0x467(This=0xe19aad0, gl_info=0x1489cc, format_desc=0x33f5e8, srgb=0, data=0xe19ac10) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:758] in wined3d (0x0033f734)
  7 0x7e4728ec IWineD3DSurfaceImpl_LoadLocation+0x101e(iface=0xe19aad0, flag=0x0040, rect=(nil)) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:4473] in wined3d (0x0033f7a4)
  8 0x7e4680cf IWineD3DSurfaceImpl_LoadTexture+0x285(iface=0xe19aad0, srgb_mode=0) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/surface.c:2556] in wined3d (0x0033f824)
  9 0x7e4804a7 texture_internal_preload+0x249(iface=0xe19a538, srgb=SRGB_RGB) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/texture.c:92] in wined3d (0x0033f854)
  10 0x7e3a99b9 device_preload_texture+0x69(stateblock=0x150108, idx=0) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/device.c:469] in wined3d (0x0033f884)
  11 0x7e3a9aa2 device_preload_textures+0xe3(device=0x14d060) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/device.c:501] in wined3d (0x0033f8e4)
  12 0x7e3a5a6c context_apply_draw_state+0x146(context=0x15e5d8, device=0x14d060) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/context.c:2119] in wined3d (0x0033fb04)
  13 0x7e3e63a8 drawPrimitive+0x174(iface=0x14d060, index_count=0x0096, StartIdx=0, idxSize=0x0002, idxData=0x17b510) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/drawprim.c:606] in wined3d (0x0033fb64)
  14 0x7e3bbace IWineD3DDeviceImpl_DrawIndexedPrimitive+0x270(iface=0x14d060, startIndex=0, index_count=0x0096) [/home/Paulie/wine-1.2-rc3/dlls/wined3d/device.c:4690] in wined3d (0x0033fbb4)
  15 0x7e4ea830 IDirect3DDevice9Impl_DrawIndexedPrimitive+0x113(iface=0x149258, PrimitiveType=D3DPT_TRIANGLELIST, BaseVertexIndex=0, MinVertexIndex=0, NumVertices=0x0064, startIndex=0, primCount=0x0032) [/home/Paulie/wine-1.2-rc3/dlls/d3d9/device.c:1843] in d3d9 (0x0033fc90)
  16 0x0042d5b3 in sins of a solar empire (+0x2d5b2) (0x0033fcb4)
  17 0x004672dd in sins of a solar empire (+0x672dc) (0x0033fce8)
  18 0x004059a5 in sins of a solar empire (+0x59a4) (0x0033fd18)
  19 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fdc8)
  20 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  21 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fcb4)
  22 0x00467404 in sins of a solar empire (+0x67403) (0x0033fce8)
  23 0x004059a5 in sins of a solar empire (+0x59a4) (0x0033fd18)
  24 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fdc8)
  25 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  26 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fce8)
  27 0x004672dd in sins of a solar empire (+0x672dc) (0x0033fd18)
  28 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fdc8)
  29 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  30 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fd18)
  31 0x004059a5 in sins of a solar empire (+0x59a4) (0x0033fdc8)
  32 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe60)
  33 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fdc8)
  34 0x00405edf in sins of a solar empire (+0x5ede) (0x0033fe60)
  35 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fe60)
  36 0x005f3843 in sins of a solar empire (+0x1f3842) (0x0033fe78)
  37 0x7b85a83a start_process+0x143(peb=0x7ffdf000) [/home/Paulie/wine-1.2-rc3/dlls/kernel32/process.c:996] in kernel32 (0x0033fe78)
  38 0x7b85a6f4 call_process_entry+0xb() in kernel32 (0x0033fec8)
  39 0x7b85a83a start_process+0x143(peb=0x7b85a6f6) [/home/Paulie/wine-1.2-rc3/dlls/kernel32/process.c:996] in kernel32 (0x0033fed8)
  40 0x7bc7a5f8 call_thread_func+0xb() in ntdll (0x0033ffb8)
  41 0x7bc7a636 call_thread_entry_point+0x33(entry=0x7b85a6f6, arg=0x0(nil)) [/home/Paulie/wine-1.2-rc3/dlls/ntdll/signal_i386.c:2466] in ntdll (0x0033ffe8)
  42 0x7bc52a42 start_process+0x2f(kernel_start=*** Invalid address 0x00000008
Comment 1 Roland Scheidegger 2010-06-21 10:45:02 UTC
Moving this to mesa core as it seems to be a bug in the mesa state tracker.
Does it work if you just remove these two assertions in st_CompressedTexSubImage2D?
   assert(width % util_format_get_blockwidth(pformat) == 0);
   assert(height % util_format_get_blockheight(pformat) == 0);

These look bogus. The idea was that you can only replace whole blocks, however this is not true if the texture level is smaller than a full block (4x4), or if this is the last (horizontal or vertical) block of a npot texture. I think the rest of the code handles these cases just fine but the asserts do not.
Comment 2 Pavel Ondračka 2010-06-21 11:16:04 UTC
With removing assertions it works OK, but you need also patch from bug 28459 or you get bad CS...
Comment 3 Roland Scheidegger 2010-06-22 04:43:26 UTC
I think the assertions just need to go.
Though one thing I'm not quite sure about is if the width/height parameters to st_texture_image_map should be adjusted. Is the driver expected to handle width/height not a multiple of block width/height in get_transfer or not?
Comment 4 Marek Olšák 2010-06-22 05:18:03 UTC
S3TC textures are always mapped directly in r300g, so the driver has no problem with this. It depends on the state tracker whether it can store blocks that overlap the image edges in the mapped buffer correctly, which I suppose it can.
Comment 5 Roland Scheidegger 2010-06-22 05:36:38 UTC
(In reply to comment #4)
> S3TC textures are always mapped directly in r300g, so the driver has no problem
> with this. It depends on the state tracker whether it can store blocks that
> overlap the image edges in the mapped buffer correctly, which I suppose it can.

Hmm yes probably drivers should be able to handle that. As long as they use the util block stuff to calculate sizes etc. they shouldn't have a problem.
Fixed with 583f241716639ae7fc24eca38418d5860de229cb.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.