(RFC) siliconmotion: Offscreen Pixmaps not properly initialized?

Marc Scherer marc.scherer at mp-ndt.de
Fri Oct 1 04:42:26 PDT 2010


We have a MPC5200 PowerPC @ 400 MHz with a SM501 (TQM5200 board).

With XAA enabled, the xf86-video-siliconmotion works nicely except for
screen-to-screen-copies (?). The symptom is that

x11perf -copywinpix100
x11perf -copypixwin100

are 10x slower than with the following hack:

smi_xaa.c, SMI_XAAInit:

infoPtr->offscreenDepths = (1 << (24 - 1)); // depth is usually 24
infoPtr->offscreenDepthsInitialized = 1;

The xserver doesn't set bit 23 in offscreenDepths (in xaaInit.c,
XAAInitializeOffscreenDepths) because it appears to be unable to create
a pixmap with depth 24 in XAAPixmapBPP. However, with the hack, the
display in x11perf is the same as without.

Below is part of the log.

The reason I cannot live with the hack any more is that, in recent
xserver, it causes parts of the screen to be not properly displayed
(e.g. no fonts are displayed), even if I set all other relevant bits in
offscreenDepths. In a xserver from 2009-08 it was working.

On the other hand, without the hack, the CPU-load increases from 80% to
100% in our application, which is also bad.

I've spent a week fulltime on this without success. So really any sort
of hint is appreciated.

Marc

(II) SMI(0): Creating default Display subsection in Screen section
(==) SMI(0): Depth 24, (--) framebuffer bpp 32
(==) SMI(0): RGB weight 888
(==) SMI(0): Default visual is TrueColor
(**) SMI(0): Option "pci_burst" "0"
(**) SMI(0): Option "NoAccel" "0"
(**) SMI(0): Option "HWCursor" "1"
(**) SMI(0): Option "ByteSwap" "0"
(**) SMI(0): Option "UseBIOS" "0"
(**) SMI(0): Option "Dualhead" "0"
(**) SMI(0): Option "AccelMethod" "XAA"
(**) SMI(0): Option "PanelSize" "800x600"
(**) SMI(0): Option "UseFBDev" "0"
(**) SMI(0): Option "CSCVideo" "1"
(**) SMI(0): PCI Burst disabled
(==) SMI(0): PCI Retry disabled
(**) SMI(0): UseFBDev disabled.
(**) SMI(0): Using Hardware Cursor
(**) SMI(0): Chipset: "MSOC"
(**) SMI(0): Dual head disabled
(**) SMI(0): Using XAA acceleration architecture
(**) SMI(0): CSC Video enabled
(--) SMI(0): videoram: 7680kB
(--) SMI(0): videoram: 7680kB
(II) SMI(0): Reserved: 0077F800
(II) SMI(0): TFT Panel Size = 800x600
(==) SMI(0): Using gamma correction (1.0, 1.0, 1.0)
(II) SMI(0): MCLK = 24.000
(II) SMI(0): MXCLK = 144.000
(II) SMI(0): Output LVDS using monitor section Panel
(II) SMI(0): Not using default mode "640x350" (vrefresh out of range)
...
(II) SMI(0): Printing probed modes for output LVDS
(II) SMI(0): Modeline "800x600"x59.9   38.25  800 832 912 1024  600 603
607 624 -hsync +vsync (37.4 kHz)
(II) SMI(0): Output LVDS connected
(II) SMI(0): Using fuzzy aspect match for initial modes
(II) SMI(0): Output LVDS using initial mode 800x600
(II) SMI(0): Using default gamma of (1.0, 1.0, 1.0) unless otherwise stated.
(**) SMI(0): Display dimensions: (215, 161) mm
(**) SMI(0): DPI set to (94, 126)
(II) SMI(0): Reserved: 0077F800
(II) SMI(0): Register dump (Before Save)
(II) SMI(0): FrameBuffer Box: 0,0 - 800,2456
(II) SMI(0): Using XFree86 Acceleration Architecture (XAA)
(II) SMI(0): Clock request 38250.00 (max_divider 5)
(==) SMI(0): DPMS enabled
(II) SMI(0): RandR 1.2 enabled, ignore the following RandR disabled message.
(II) SMI(0): Setting screen physical size to 215 x 161


while(!solved) {
	boss->patience >> 1;
	work->time++;
	wife |= UNHAPPY;
}


More information about the xorg-devel mailing list