Linear Expansion doesn't work on BE as the bit order in
a word is reversed. ScreenToScreenColorExpansion allows
to adjust the bit order in a byte, still the bytes have
the wrong order.

Signed-off-by: Egbert Eich <[email protected]>
---
 src/mga.h       | 5 +++++
 src/mga_storm.c | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/src/mga.h b/src/mga.h
index 34695c1..7c3f840 100644
--- a/src/mga.h
+++ b/src/mga.h
@@ -688,7 +688,12 @@ extern CARD32 MGAAtypeNoBLK[16];
 #define        NICE_DASH_PATTERN       0x00000020
 #define        TWO_PASS_COLOR_EXPAND   0x00000040
 #define        MGA_NO_PLANEMASK        0x00000080
+/* linear expansion doesn't work on BE due to wrong byte order */
+#if X_BYTE_ORDER != X_BIG_ENDIAN
 #define USE_LINEAR_EXPANSION   0x00000100
+#else
+#define USE_LINEAR_EXPANSION   0x00000000
+#endif
 #define LARGE_ADDRESSES                0x00000200
 
 #define MGAIOMAPSIZE           0x00004000
diff --git a/src/mga_storm.c b/src/mga_storm.c
index fb0e7be..84a4c8c 100644
--- a/src/mga_storm.c
+++ b/src/mga_storm.c
@@ -710,7 +710,11 @@ Bool mgaAccelInit( ScreenPtr pScreen )
     /* screen to screen color expansion */
     if(pMga->AccelFlags & USE_LINEAR_EXPANSION) {
        infoPtr->ScreenToScreenColorExpandFillFlags =
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+                                               BIT_ORDER_IN_BYTE_MSBFIRST;
+#else 
                                                BIT_ORDER_IN_BYTE_LSBFIRST;
+#endif
        infoPtr->SetupForScreenToScreenColorExpandFill =
                mgaSetupForScreenToScreenColorExpandFill;
        infoPtr->SubsequentScreenToScreenColorExpandFill =
-- 
1.8.1.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to