Bug 31568

Summary: [r300g] SIGSEGV src/mesa/vbo/vbo_exec_array.c:1154
Product: Mesa Reporter: Vinson Lee <vlee>
Component: Mesa coreAssignee: mesa-dev
Status: CLOSED FIXED QA Contact:
Severity: critical    
Priority: medium    
Version: git   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: define IN_DRI_DRIVER

Description Vinson Lee 2010-11-11 18:16:23 UTC
mesa: d18df9e336b5d2e68a4a6185f7b9d0d0c095c3c4 (master)

chipset: RV530 71C5 (ATI Radeon X1600)
system architecture: i686
libdrm-dev: 2.4.21-1ubuntu2.1
kernel version: 2.6.35-22-generic
Linux distribution: Ubuntu 10.10 i386
Machine model: iMac4,1

Run piglit bgra-sec-color-pointer test.

$ ./bin/bgra-sec-color-pointer-test
...
Segmentation fault (core dumped)

(gdb) bt
#0  0x0183d923 in vbo_exec_MultiDrawElements (mode=3, count=0x1401, type=4, indices=0x804f1d0, primcount=143224880) at src/mesa/vbo/vbo_exec_array.c:1154
#1  0x0804a622 in piglit_display () at piglit/tests/general/bgra-sec-color-pointer.c:82
#2  0x0804c847 in display () at piglit/tests/util/piglit-framework.c:52
#3  0x00755820 in fghRedrawWindow (window=0x88a2060, enumerator=0xbfd29688) at freeglut_main.c:210
#4  fghcbDisplayWindow (window=0x88a2060, enumerator=0xbfd29688) at freeglut_main.c:227
#5  0x00759660 in fgEnumWindows (enumCallback=0x755790 <fghcbDisplayWindow>, enumerator=0xbfd29688) at freeglut_structure.c:394
#6  0x00755cdb in fghDisplayAll () at freeglut_main.c:249
#7  glutMainLoopEvent () at freeglut_main.c:1450
#8  0x00756605 in glutMainLoop () at freeglut_main.c:1498
#9  0x0804c9f0 in main (argc=1, argv=0xbfd29914) at piglit/tests/util/piglit-framework.c:118
(gdb) frame 0
#0  0x0183d923 in vbo_exec_MultiDrawElements (mode=3, count=0x1401, type=4, indices=0x804f1d0, primcount=143224880) at src/mesa/vbo/vbo_exec_array.c:1154
1154	      if (!_mesa_validate_DrawElements(ctx, mode, count[i], type, indices[i],
(gdb) l
1149	   GLint i;
1150	
1151	   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
1152	
1153	   for (i = 0; i < primcount; i++) {
1154	      if (!_mesa_validate_DrawElements(ctx, mode, count[i], type, indices[i],
1155					       0))
1156		 return;
1157	   }
1158
Comment 1 Marek Olšák 2010-11-13 12:23:06 UTC
I can't reproduce this, but it looks like a Mesa core bug.
Comment 2 Brian Paul 2010-11-15 08:06:26 UTC
I can't reproduce this with any other driver. 

The piglit test in question doesn't call glMultiDrawElements() at all so I don't see how we'd wind up in that function unless something in API dispatch was broken.  Nobody else has reported anything like that.

Can you try a clean rebuild of Mesa, Vinson?
Comment 3 Vinson Lee 2010-11-19 18:19:41 UTC
mesa: a172368ef1500fd2c7c1e55133e8e098b73d97a5 (master)

I retested with a clean build and it still crashing with the identical backtrace.
Comment 4 Chia-I Wu 2010-11-19 23:33:27 UTC
What is your setup?  It seems your libGL.so and the DRI driver use different versions of glapi, and IN_DRI_DRIVER is not defined when building the DRI driver.
Comment 5 Chia-I Wu 2010-11-19 23:53:31 UTC
Created attachment 40430 [details] [review]
define IN_DRI_DRIVER

Does this patch help?
Comment 6 Vinson Lee 2010-11-20 17:45:43 UTC
The attachment (id=40430) fixes the SIGSEGV.
Comment 7 Chia-I Wu 2010-11-21 02:35:17 UTC
The patch should also fix bug 31569.

This should be a candidate for the 7.9 branch.
Comment 8 Vinson Lee 2010-11-21 13:53:41 UTC
commit bb045d339b53f7ddd42bfca363e3d589b0ddcf20
Author: Chia-I Wu <olv@lunarg.com>
Date:   Sat Nov 20 17:47:11 2010 -0800

    scons: Define IN_DRI_DRIVER.
    
    The define is required for DRI drivers.  It is not needed for
    libgl-xlib, but the overhead it introduces should be minor.

diff --git a/src/mesa/SConscript b/src/mesa/SConscript
index 5fe5d39..08d731d 100644
--- a/src/mesa/SConscript
+++ b/src/mesa/SConscript
@@ -19,6 +19,10 @@ if env['platform'] == 'windows':
         'WIN32_THREADS', # use Win32 thread API
     ])
     env.Prepend(CPPPATH = ['#src/talloc'])
+else:
+    env.Append(CPPDEFINES = [
+        'IN_DRI_DRIVER', # enable the remap table (for DRI drivers)
+    ])
 
 #
 # Source files

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.