Bug 70441 - [Gen4-5 clip] Piglit spec_OpenGL_1.1_polygon-offset hits (execsize >= width) assertion
Summary: [Gen4-5 clip] Piglit spec_OpenGL_1.1_polygon-offset hits (execsize >= width) ...
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/DRI/i965 (show other bugs)
Version: unspecified
Hardware: All Linux (All)
: medium major
Assignee: Kenneth Graunke
QA Contact:
Depends on:
Reported: 2013-10-14 05:53 UTC by fangxun
Modified: 2015-05-12 05:29 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Description fangxun 2013-10-14 05:53:13 UTC
system Environment:
Arch:           x86_64
Platform:       Ironlake
Libdrm:         (master)2.4.47
Mesa:           (master)8958741e5a0c3cce95f0415ce8e6e8e840a5207d
Xserver:        (master)xorg-server-
Xf86_video_intel: (master)2.99.904-10-ge914dada5595a24b5d0fada7e476cc93570fa7c5

Bug detailed description:
It is aborted on ironlake with mesa master branch.It works well on mesa 9.2 branch. Piglit spec_OpenGL_1.1_polygon-mode-offset is also aborted due to the same bisect commit.

Bisect shows: 8958741e5a0c3cce95f0415ce8e6e8e840a5207d is the first bad commit.
commit 8958741e5a0c3cce95f0415ce8e6e8e840a5207d
Author:     Kenneth Graunke <kenneth@whitecape.org>
AuthorDate: Fri Sep 27 16:11:36 2013 -0700
Commit:     Kenneth Graunke <kenneth@whitecape.org>
CommitDate: Sun Oct 13 00:10:44 2013 -0700

    i965: Merge intel_context.h into brw_context.h.

    v2: Keep the random 32-bit only version of memcpy, since Ian says I
        can't delete it without data proving it isn't useful.

    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>

polygon-offset: brw_eu_emit.c:211: validate_reg: Assertion `execsize >= width' failed.
Aborted (core dumped)

#0  0x00000030c8835819 in raise () from /usr/lib64/libc.so.6
#1  0x00000030c8836f28 in abort () from /usr/lib64/libc.so.6
#2  0x00000030c882e7f6 in __assert_fail_base () from /usr/lib64/libc.so.6
#3  0x00000030c882e8a2 in __assert_fail () from /usr/lib64/libc.so.6
#4  0x00007ffff4c92acd in validate_reg (insn=insn@entry=0xa37090, reg=...) at brw_eu_emit.c:211
#5  0x00007ffff4c93059 in brw_set_src0 (p=p@entry=0x7fffffffda50, insn=insn@entry=0xa37090, reg=...) at brw_eu_emit.c:264
#6  0x00007ffff4c93c4d in brw_alu2 (p=0x7fffffffda50, opcode=opcode@entry=65, dest=..., src0=..., src1=...) at brw_eu_emit.c:769
#7  0x00007ffff4c94c2f in brw_MUL (p=p@entry=0x7fffffffda50, dest=..., dest@entry=..., src0=..., src0@entry=..., src1=...) at brw_eu_emit.c:1055
#8  0x00007ffff4c87334 in compute_offset (c=0x7fffffffda50) at brw_clip_unfilled.c:200
#9  brw_emit_unfilled_clip (c=c@entry=0x7fffffffda50) at brw_clip_unfilled.c:496
#10 0x00007ffff4c8066e in compile_clip_prog (key=0x7fffffffdd40, brw=0x7ffff46a4040) at brw_clip.c:99
#11 brw_upload_clip_prog (brw=0x7ffff46a4040) at brw_clip.c:258
#12 0x00007ffff4cd684a in brw_upload_state (brw=brw@entry=0x7ffff46a4040) at brw_state_upload.c:552
#13 0x00007ffff4c8fe4f in brw_try_draw_prims (max_index=4100985960, min_index=0, ib=0x0, nr_prims=1, prims=<optimized out>, arrays=<optimized out>, ctx=0x7ffff46a4040)
    at brw_draw.c:419
#14 brw_draw_prims (ctx=0x7ffff46a4040, prims=<optimized out>, nr_prims=1, ib=0x0, index_bounds_valid=<optimized out>, min_index=0, max_index=3, tfb_vertcount=0x0)
    at brw_draw.c:501
#15 0x00007ffff48610a9 in vbo_draw_arrays (ctx=0x7ffff46a4040, mode=5, start=0, count=<optimized out>, numInstances=1, baseInstance=<optimized out>)
    at ../../../src/mesa/vbo/vbo_exec_array.c:660
#16 0x00007ffff7d08083 in piglit_draw_rect_from_arrays (verts=0x7fffffffdfc0, tex=0x0) at /GFX/Test/Piglit/piglit/tests/util/piglit-util-gl-common.c:645
#17 0x00007ffff7d084bd in piglit_draw_rect_z (z=0, x=120, y=20, w=40, h=40) at /GFX/Test/Piglit/piglit/tests/util/piglit-util-gl-common.c:782
#18 0x0000000000401024 in do_rect (x=2, y=0, color=0x601860 <blue>, mode=6913) at /GFX/Test/Piglit/piglit/tests/general/polygon-offset.c:65
#19 0x00000000004011f9 in piglit_display () at /GFX/Test/Piglit/piglit/tests/general/polygon-offset.c:108
#20 0x00007ffff7d0c09f in run_test (gl_fw=0x602010, argc=1, argv=0x7fffffffe228) at /GFX/Test/Piglit/piglit/tests/util/piglit-framework-gl/piglit_winsys_framework.c:76
#21 0x00007ffff7d08c8a in piglit_gl_test_run (argc=1, argv=0x7fffffffe228, config=0x7fffffffe110) at /GFX/Test/Piglit/piglit/tests/util/piglit-framework-gl.c:141
#22 0x0000000000400f39 in main (argc=1, argv=0x7fffffffe228) at /GFX/Test/Piglit/piglit/tests/general/polygon-offset.c:37

Reproduce steps:
1. xinit
2. ./bin/polygon-offset -auto
Comment 1 lu hua 2013-12-02 07:29:56 UTC
It also happens on mesa 10.0 branch(commit:44e38a878aef79b53dd1)
Comment 2 Kaveh 2014-08-05 01:01:55 UTC
Please confirm that this is seen on SNB or newer platform.
Comment 3 lu hua 2014-08-05 05:41:18 UTC
(In reply to comment #2)
> Please confirm that this is seen on SNB or newer platform.

It works well on SNB+ platforms.
It also works well on ILK with mesa master branch.
Only fails on ILK with mesa 10.2 branch.
polygon-offset: brw_eu_emit.c:267: validate_reg: Assertion `execsize >= width' failed.
Aborted (core dumped)
Comment 4 Kenneth Graunke 2014-08-06 06:56:16 UTC
This bug report seems to be full of mistakes.

I can reproduce this assertion failure on ILK with today's Mesa master.
I happened to have a Mesa build of commit c402aed handy, which was master from March 2013 - 7 months prior to the bisected commit - and prior to the 9.2.0 release.  I hit the exact same assertion failure.

It looks like this is currently broken, and all of the related code appears to git blame to the original 2006 driver import from Tungsten, so I suspect it's been broken since the dawn of time.  This should also be broken on Broadwater, Crestline, Eaglelake, and Cantiga...not just Ironlake.

On the plus side, I believe I've fixed it:
Comment 5 Kenneth Graunke 2014-08-06 07:04:31 UTC
Note that this test would have passed in release builds, but hit the assertion fail in debug builds.  Accidentally using a release build instead of a debug build could explain some of the instances where it appeared to be fixed/broken.
Comment 6 Kenneth Graunke 2014-08-07 21:42:32 UTC
Fixed by:

commit b7679639bcc8ac72cb08c48f9cda8eecd6a9c1e5
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Tue Aug 5 23:57:17 2014 -0700

    i965/clip: Fix brw_clip_unfilled.c/compute_offset's assembly.
    Due to the destination register width of 1 or 2, these instructions get
    ExecSize 1 or 2.  But dir and offset (used as src0) are both registers
    of width 4, violating the execsize >= width assertion.
    I honestly don't think this could have ever worked.
    Fixes Piglit's polygon-offset and polygon-mode-offset tests on Gen4-5.
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70441
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Comment 7 lu hua 2014-08-12 06:34:38 UTC
It works well on master branch, but still fails on 10.2 branch.
Comment 8 Emil Velikov 2014-09-06 11:26:56 UTC
(In reply to comment #7)
> It works well on master branch, but still fails on 10.2 branch.

The commit is part of the 10.2.7 release.

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.