Re: Xvideo acceleration: GATOS for PPC?
Michel Lanners <mlan@cpu.lu> writes:
> - Mach64/i386 without GATOS: no Xvideo (driver is broken); vlc uses 45%
> + 16% cpu (two 'consuming' threads); X uses 25% cpu.
> - Mach64/i386 with GATOS driver: Xvideo works, vlc uses 25% (other
> threads insignificant), X uses between 2% and 5%
> - Voodoo3/i386: Xvideo works, X around 25% and vlc around 30% (roughly)
> - Rage128/ppc: Xvideo works, X between 10% and 20%, rest consumed by
> vlc.
>
> The Mach64 is on a Dell laptop w/ Celeron 600, the Voodoo is a PIII/666
> desktop, and the ppc is my TiBook/400.
>
> So the question is: why does X on the Dell use so little CPU, and why
> can't we achieve the same thing on ppc (the Voodoo was for comparison
> only)?
The XVideo stuff for mach64 does not work on ppc in the current X, and
using the GATOS stuff helped immensely, although I still don't have
the performance on my Lombard to play DVDs, oh well. Before GATOS I
got about 55% frames deocded, after I get about 77% frames decoded. I
wonder if I'd be able to get a 23% increase, without altivec? seems
unlikely.
Oh yeah, I also pulled the endian related patch from the xfree source:
Index: atimach64.c
===================================================================
RCS file: /cvs/livid/gatos-ati/ati_xv/ati.2/atimach64.c,v
retrieving revision 1.4
diff -u -r1.4 atimach64.c
--- atimach64.c 2001/05/31 18:47:59 1.4
+++ atimach64.c 2001/08/30 13:53:19
@@ -1600,6 +1600,25 @@
*/
switch (iDWord)
{
+#if !defined(__hppa__) /* no mmio instrs on hppa */
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+ case 0: xf86WriteMmio32Be(pDst + 0, 0, *(pSrc + 0));
+ case 1: xf86WriteMmio32Be(pDst + 1, 0, *(pSrc + 1));
+ case 2: xf86WriteMmio32Be(pDst + 2, 0, *(pSrc + 2));
+ case 3: xf86WriteMmio32Be(pDst + 3, 0, *(pSrc + 3));
+ case 4: xf86WriteMmio32Be(pDst + 4, 0, *(pSrc + 4));
+ case 5: xf86WriteMmio32Be(pDst + 5, 0, *(pSrc + 5));
+ case 6: xf86WriteMmio32Be(pDst + 6, 0, *(pSrc + 6));
+ case 7: xf86WriteMmio32Be(pDst + 7, 0, *(pSrc + 7));
+ case 8: xf86WriteMmio32Be(pDst + 8, 0, *(pSrc + 8));
+ case 9: xf86WriteMmio32Be(pDst + 9, 0, *(pSrc + 9));
+ case 10: xf86WriteMmio32Be(pDst + 10, 0, *(pSrc + 10));
+ case 11: xf86WriteMmio32Be(pDst + 11, 0, *(pSrc + 11));
+ case 12: xf86WriteMmio32Be(pDst + 12, 0, *(pSrc + 12));
+ case 13: xf86WriteMmio32Be(pDst + 13, 0, *(pSrc + 13));
+ case 14: xf86WriteMmio32Be(pDst + 14, 0, *(pSrc + 14));
+ case 15: xf86WriteMmio32Be(pDst + 15, 0, *(pSrc + 15));
+#else
case 0: MMIO_OUT32(pDst + 0, 0, *(pSrc + 0));
case 1: MMIO_OUT32(pDst + 1, 0, *(pSrc + 1));
case 2: MMIO_OUT32(pDst + 2, 0, *(pSrc + 2));
@@ -1616,7 +1635,8 @@
case 13: MMIO_OUT32(pDst + 13, 0, *(pSrc + 13));
case 14: MMIO_OUT32(pDst + 14, 0, *(pSrc + 14));
case 15: MMIO_OUT32(pDst + 15, 0, *(pSrc + 15));
-
+#endif
+#endif
default: /* Muffle compiler */
break;
}
--
Josh Huber | huber@debian.org |
Reply to: