exa_965_state used when in XAA mode

Barry Scott barry.scott at onelan.co.uk
Fri Apr 27 04:34:38 PDT 2007


Hi,
I'm still working on rotate and get this crash from the attached x.conf 
after starting
up Xorg and then starting an xterm.

pI830->exa_965_state is 0 as useEXA is FALSE.
Why does the i830_xaa_composite call i965_prepare_composite that only 
works for EXA?

Barry

# gdb /usr/bin/Xorg
GNU gdb Red Hat Linux (6.3.0.0-1.21rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain 
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host 
libthread_db library "/lib/libthread_db.so.1".

(gdb) run :0 -nolisten tcp -br vt7 -dpi 75 -logfile 
/data/data/logs/screen-server.log -config /etc/onelan/ntb/x.conf
Starting program: /usr/bin/Xorg :0 -nolisten tcp -br vt7 -dpi 75 
-logfile /data/data/logs/screen-server.log -config /etc/onelan/ntb/x.conf
R

At this point I start an xterm.

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1208236352 (LWP 2346)]
0x00192271 in i965_prepare_composite (op=1, pSrcPicture=0x8986fa8, 
pMaskPicture=0x0, pDstPicture=0x8987000,
    pSrc=0x8918d90, pMask=0x0, pDst=0x8985470) at i965_render.c:539
539         state_base_offset = ->offset;
(gdb) p  pI830->exa_965_state
$1 = (i830_memory *) 0x0
(gdb) l
534         next_offset = default_color_offset + 
sizeof(*default_color_state);
535
536         total_state_size = next_offset;
537         assert(total_state_size < pI830->exa_965_state->size);
538
539         state_base_offset = pI830->exa_965_state->offset;
540         state_base_offset = ALIGN(state_base_offset, 64);
541         state_base = (char *)(pI830->FbBase + state_base_offset);
542
543         vs_state = (void *)(state_base + vs_offset);
(gdb) bt
#0  0x00192271 in i965_prepare_composite (op=1, pSrcPicture=0x8986fa8, 
pMaskPicture=0x0, pDstPicture=0x8987000,
    pSrc=0x8918d90, pMask=0x0, pDst=0x8985470) at i965_render.c:539
#1  0x0018cd50 in i830_xaa_composite (op=1 '\001', pSrc=0x8986fa8, 
pMask=0x0, pDst=0x8987000, xSrc=0, ySrc=0, xMask=0,
    yMask=0, xDst=0, yDst=0, width=640, height=480) at i830_xaa.c:826
#2  0x08159fc8 in damageComposite (op=1 '\001', pSrc=0x8986fa8, 
pMask=0x0, pDst=0x8987000, xSrc=0, ySrc=0, xMask=0,
    yMask=0, xDst=0, yDst=0, width=640, height=480) at damage.c:576
#3  0x08147659 in CompositePicture (op=Variable "op" is not available.
) at picture.c:1795
#4  0x080ec0f8 in xf86RotateBlockHandler (data=0x8953fa0, 
pTimeout=0xbfc2e0a8, pRead=0x81de720) at xf86Rotate.c:208
#5  0x0808a098 in BlockHandler (pTimeout=0xbfc2e0a8, 
pReadmask=0x81de720) at dixutils.c:418
#6  0x08199216 in WaitForSomething (pClientsReady=0xbfc2e0d0) at 
WaitFor.c:225
#7  0x08086521 in Dispatch () at dispatch.c:383
#8  0x0806ff1b in main (argc=12, argv=0xbfc2e5d4, envp=0xbfc2e608) at 
main.c:445
(gdb) Quit
(gdb)

I'm running 2.0.0 with these patches from Keith Packard and I remove -O2 
from the makefile.

Only in xf86-video-intel-2.0.0-patched: build.sh
Binary files xf86-video-intel-2.0.0/src/bios_reader/bios_reader and 
xf86-video-intel-2.0.0-patched/src/bios_reader/bios_reader differ
Only in xf86-video-intel-2.0.0/src: i830_memory.lo
Only in xf86-video-intel-2.0.0-patched/src: i830_memory.loT
diff -r -u --exclude='*.Plo' --exclude='*.o' --exclude='*.so' 
--exclude='*~' xf86-video-intel-2.0.0/src/i830_video.c 
xf86-video-intel-2.0.0-patched/src/i830_video.c
--- xf86-video-intel-2.0.0/src/i830_video.c    2007-04-19 
23:30:01.000000000 +0100
+++ xf86-video-intel-2.0.0-patched/src/i830_video.c    2007-04-26 
17:36:04.000000000 +0100
@@ -2350,6 +2350,7 @@
    left = (x1 >> 16) & ~1;
    npixels = ((((x2 + 0xffff) >> 16) + 1) & ~1) - left;
 
+#if 0
    if (pPriv->textured) {
       /* For textured video, we don't double buffer, and instead just 
wait for
        * acceleration to finish before writing the new video data into
@@ -2357,7 +2358,7 @@
        */
       i830WaitSync(pScrn);
    }
-
+#endif
    switch (id) {
    case FOURCC_YV12:
    case FOURCC_I420:
diff -r -u --exclude='*.Plo' --exclude='*.o' --exclude='*.so' 
--exclude='*~' xf86-video-intel-2.0.0/src/i830_xaa.c 
xf86-video-intel-2.0.0-patched/src/i830_xaa.c
--- xf86-video-intel-2.0.0/src/i830_xaa.c    2007-04-25 
12:53:56.000000000 +0100
+++ xf86-video-intel-2.0.0-patched/src/i830_xaa.c    2007-04-25 
14:25:22.000000000 +0100
@@ -782,12 +782,12 @@
     if (pMask != NULL || op != PictOpSrc || pSrc->pDrawable == NULL)
     goto fallback;
 
-    if (pSrc->pDrawable->type != DRAWABLE_PIXMAP ||
+    if (pSrc->pDrawable->type != DRAWABLE_WINDOW ||
     pDst->pDrawable->type != DRAWABLE_PIXMAP)
     {
     goto fallback;
     }
-    pSrcPixmap = (PixmapPtr)pSrc->pDrawable;
+    pSrcPixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) pSrc->pDrawable);
     pDstPixmap = (PixmapPtr)pDst->pDrawable;
 
     /* Check if the dest is one of our shadow pixmaps */
Only in xf86-video-intel-2.0.0-patched/src: i830_xaa.eja
diff -r -u --exclude='*.Plo' --exclude='*.o' --exclude='*.so' 
--exclude='*~' xf86-video-intel-2.0.0/src/Makefile 
xf86-video-intel-2.0.0-patched/src/Makefile
--- xf86-video-intel-2.0.0/src/Makefile    2007-04-23 14:32:56.000000000 
+0100
+++ xf86-video-intel-2.0.0-patched/src/Makefile    2007-04-26 
17:57:48.000000000 +0100
@@ -156,13 +156,13 @@
 BUILD_PDFDOC_TRUE = #
 CC = gcc
 CCDEPMODE = depmode=gcc3
-CFLAGS = -g -O2
+CFLAGS = -g
 CPP = gcc -E
 CPPFLAGS =
 CXX = g++
 CXXCPP = g++ -E
 CXXDEPMODE = depmode=gcc3
-CXXFLAGS = -g -O2
+CXXFLAGS = -g
 CYGPATH_W = echo
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: x.conf
URL: <http://lists.x.org/archives/xorg/attachments/20070427/88f16eae/attachment.ksh>


More information about the xorg mailing list