Bug 65525 - [llvmpipe] lp_scene.h:210:lp_scene_alloc: Assertion `size <= (64 * 1024)' failed.
Summary: [llvmpipe] lp_scene.h:210:lp_scene_alloc: Assertion `size <= (64 * 1024)' fai...
Alias: None
Product: Mesa
Classification: Unclassified
Component: Other (show other bugs)
Version: git
Hardware: x86-64 (AMD64) Linux (All)
: medium critical
Assignee: Jose Fonseca
QA Contact:
Keywords: have-backtrace, regression
Depends on:
Reported: 2013-06-08 00:57 UTC by Vinson Lee
Modified: 2015-06-19 06:21 UTC (History)
5 users (show)

See Also:
i915 platform:
i915 features:


Description Vinson Lee 2013-06-08 00:57:29 UTC
mesa: 3c21a7d3c9b626a10a38987d77b9e77d70bd67d7

Run piglit arb_uniform_buffer_object-maxuniformblocksize fsexceed on llvmpipe.

$ ./bin/arb_uniform_buffer_object-maxuniformblocksize fsexceed -auto
Max uniform block size: 518144
Testing FS with uniform block vec4 v[32385]
src/gallium/drivers/llvmpipe/lp_scene.h:210:lp_scene_alloc: Assertion `size <= (64 * 1024)' failed.
Trace/breakpoint trap (core dumped)

(gdb) bt
#0  0x00007fbfc2ed2b9a in _debug_assert_fail (expr=0x7fbfc39abba8 "size <= (64 * 1024)", file=0x7fbfc39abb80 "src/gallium/drivers/llvmpipe/lp_scene.h", 
    line=210, function=0x7fbfc39ac1b7 "lp_scene_alloc") at src/gallium/auxiliary/util/u_debug.c:278
#1  0x00007fbfc2b79c75 in lp_scene_alloc (scene=0x7fbfc5ca3010, size=518160) at src/gallium/drivers/llvmpipe/lp_scene.h:210
#2  0x00007fbfc2b7c3d9 in try_update_scene_state (setup=0x1291b90) at src/gallium/drivers/llvmpipe/lp_setup.c:942
#3  0x00007fbfc2b7a825 in begin_binning (setup=0x1291b90) at src/gallium/drivers/llvmpipe/lp_setup.c:195
#4  0x00007fbfc2b7abf0 in set_scene_state (setup=0x1291b90, new_state=SETUP_ACTIVE, reason=0x7fbfc39ac160 "lp_setup_update_state")
    at src/gallium/drivers/llvmpipe/lp_setup.c:304
#5  0x00007fbfc2b7c9dd in lp_setup_update_state (setup=0x1291b90, update_scene=1 '\001') at src/gallium/drivers/llvmpipe/lp_setup.c:1072
#6  0x00007fbfc2b84cc3 in lp_setup_draw_arrays (vbr=0x1291b90, start=0, nr=4) at src/gallium/drivers/llvmpipe/lp_setup_vbuf.c:344
#7  0x00007fbfc2f80a96 in draw_pt_emit_linear (emit=0x128e980, vert_info=0x7fffbf28b020, prim_info=0x7fffbf28b100)
    at src/gallium/auxiliary/draw/draw_pt_emit.c:268
#8  0x00007fbfc2f7841e in emit (emit=0x128e980, vert_info=0x7fffbf28b020, prim_info=0x7fffbf28b100)
    at src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:304
#9  0x00007fbfc2f788df in llvm_pipeline_generic (middle=0x128e830, fetch_info=0x0, in_prim_info=0x7fffbf28b100)
    at src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:432
#10 0x00007fbfc2f78a26 in llvm_middle_end_linear_run (middle=0x128e830, start=0, count=4, prim_flags=0)
    at src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:494
#11 0x00007fbfc2ea4fcb in vsplit_segment_simple_linear (vsplit=0x128b9e0, flags=0, istart=0, icount=4)
    at src/gallium/auxiliary/draw/draw_pt_vsplit_tmp.h:234
#12 0x00007fbfc2ea52d0 in vsplit_run_linear (frontend=0x128b9e0, start=0, count=4) at src/gallium/auxiliary/draw/draw_split_tmp.h:60
#13 0x00007fbfc2e997a5 in draw_pt_arrays (draw=0x127c840, prim=7, start=0, count=4) at src/gallium/auxiliary/draw/draw_pt.c:149
#14 0x00007fbfc2e9a518 in draw_vbo (draw=0x127c840, info=0x7fffbf28b270) at src/gallium/auxiliary/draw/draw_pt.c:532
#15 0x00007fbfc2b6a9ec in llvmpipe_draw_vbo (pipe=0x127ac60, info=0x7fffbf28b390) at src/gallium/drivers/llvmpipe/lp_draw_arrays.c:126
#16 0x00007fbfc2e829e0 in cso_draw_vbo (cso=0x1357730, info=0x7fffbf28b390) at src/gallium/auxiliary/cso_cache/cso_context.c:1406
#17 0x00007fbfc2ceade9 in st_draw_vbo (ctx=0x12eaac0, prims=0x7fffbf28b460, nr_prims=1, ib=0x0, index_bounds_valid=1 '\001', min_index=0, max_index=3, 
    tfb_vertcount=0x0) at src/mesa/state_tracker/st_draw.c:286
#18 0x00007fbfc2daa204 in vbo_draw_arrays (ctx=0x12eaac0, mode=7, start=0, count=4, numInstances=1, baseInstance=0) at src/mesa/vbo/vbo_exec_array.c:624
#19 0x00007fbfc2daabcb in vbo_exec_DrawArrays (mode=7, start=0, count=4) at src/mesa/vbo/vbo_exec_array.c:776
#20 0x00007fbfc59486d0 in stub_glDrawArrays (mode=7, first=0, count=4) at piglit/tests/util/generated_dispatch.c:5673
#21 0x00007fbfc59a75d9 in piglit_draw_rect (x=-1, y=-1, w=2, h=2) at piglit/tests/util/piglit-util-gl.c:870
#22 0x000000000040168e in piglit_display () at piglit/tests/spec/arb_uniform_buffer_object/maxuniformblocksize.c:200
#23 0x00007fbfc593c030 in display () at piglit/tests/util/piglit-framework-gl/piglit_glut_framework.c:60
#24 0x00007fbfc50e9137 in fghRedrawWindow (window=0x1277090) at freeglut_main.c:210
#25 fghcbDisplayWindow (window=0x1277090, enumerator=0x7fffbf28b6b0) at freeglut_main.c:227
#26 0x00007fbfc50ec889 in fgEnumWindows (enumCallback=0x7fbfc50e90d0 <fghcbDisplayWindow>, enumerator=0x7fffbf28b6b0) at freeglut_structure.c:394
#27 0x00007fbfc50e95fa in fghDisplayAll () at freeglut_main.c:249
#28 glutMainLoopEvent () at freeglut_main.c:1450
#29 0x00007fbfc50e9f05 in glutMainLoop () at freeglut_main.c:1498
#30 0x00007fbfc593c265 in run_test (gl_fw=0x7fbfc5c18f40, argc=2, argv=0x7fffbf28ba78)
    at piglit/tests/util/piglit-framework-gl/piglit_glut_framework.c:142
#31 0x00007fbfc593a34e in piglit_gl_test_run (argc=2, argv=0x7fffbf28ba78, config=0x7fffbf28b960)
    at piglit/tests/util/piglit-framework-gl.c:127
#32 0x0000000000401240 in main (argc=3, argv=0x7fffbf28ba78)
    at piglit/tests/spec/arb_uniform_buffer_object/maxuniformblocksize.c:43
(gdb) frame 1
#1  0x00007fbfc2b79c75 in lp_scene_alloc (scene=0x7fbfc5ca3010, size=518160) at src/gallium/drivers/llvmpipe/lp_scene.h:210
210	   assert(size <= DATA_BLOCK_SIZE);

38e77e545d06bf5ac0e185f2a1581a97bafdab56 is the first bad commit
commit 38e77e545d06bf5ac0e185f2a1581a97bafdab56
Author: Eric Anholt <eric@anholt.net>
Date:   Thu May 23 11:10:15 2013 -0700

    glsl: Fix uniform buffer object counting.
    We were counting uniforms located in UBOs against the default uniform
    block limit, while not doing any counting against the specific combined
    Note that I couldn't quite find justification for the way I did this, but
    I think it's the only sensible thing: The spec talks about components, so
    each "float" in a std140 block would count as 1 component and a "vec4"
    would count as 4, though they occupy the same amount of space.  Since GPU
    limits on uniform buffer loads are surely going to be about the size of
    the blocks, I just counted them that way.
    Fixes link failures in piglit
    arb_uniform_buffer_object/maxuniformblocksize when ported to geometry
    shaders on Paul's GS branch, since in that case the max block size is
    bigger than the default uniform block component limit.
    Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>

:040000 040000 a33f7a7d4a3927d6fc2f671ec8634e070c446969 a578c1156e802b7db94433a05b773671c10cfbc8 M	src
bisect run success
Comment 1 Vinson Lee 2014-03-02 04:37:32 UTC
mesa: fc25956badb8e1932cc19d8c97b4be16e92dfc65 (master 10.2.0-devel)

This regression is still present on llvmpipe.
Comment 2 Vinson Lee 2015-06-14 03:38:57 UTC
mesa: 4d35eef326e49cc8da50879d30a1c5088d4775e1 (master 10.7.0-devel)

This regression is still present on llvmpipe.
Comment 3 Jose Fonseca 2015-06-16 10:30:18 UTC
Tentative fix out for review on

Comment 4 Jose Fonseca 2015-06-19 06:21:57 UTC
Finally fixed with f734d2556013e9239e91f43b563b5b1d8f03ada4.

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.