Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/wsfb Add "is_swapped" property which indicates 32-bp...



details:   https://anonhg.NetBSD.org/src/rev/c268e7e16760
branches:  trunk
changeset: 956020:c268e7e16760
user:      rin <rin%NetBSD.org@localhost>
date:      Mon Oct 19 01:08:06 2020 +0000

description:
Add "is_swapped" property which indicates 32-bpp framebuffer is
byte-swapped.

diffstat:

 sys/dev/wsfb/genfb.c |  24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)

diffs (64 lines):

diff -r dec64b819556 -r c268e7e16760 sys/dev/wsfb/genfb.c
--- a/sys/dev/wsfb/genfb.c      Sun Oct 18 22:55:52 2020 +0000
+++ b/sys/dev/wsfb/genfb.c      Mon Oct 19 01:08:06 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: genfb.c,v 1.77 2020/10/18 12:47:37 rin Exp $ */
+/*     $NetBSD: genfb.c,v 1.78 2020/10/19 01:08:06 rin Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.77 2020/10/18 12:47:37 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.78 2020/10/19 01:08:06 rin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -539,7 +539,7 @@
        struct genfb_softc *sc = cookie;
        struct rasops_info *ri = &scr->scr_ri;
        int wantcols;
-       bool is_bgr;
+       bool is_bgr, is_swapped;
 
        ri->ri_depth = sc->sc_depth;
        ri->ri_width = sc->sc_width;
@@ -565,24 +565,30 @@
        switch (ri->ri_depth) {
        case 32:
        case 24:
+               ri->ri_rnum = ri->ri_gnum = ri->ri_bnum = 8;
                ri->ri_flg |= RI_ENABLE_ALPHA;
 
                is_bgr = false;
                prop_dictionary_get_bool(device_properties(sc->sc_dev),
                    "is_bgr", &is_bgr);
+
+               is_swapped = false;
+               prop_dictionary_get_bool(device_properties(sc->sc_dev),
+                   "is_swapped", &is_swapped);
+
                if (is_bgr) {
                        /* someone requested BGR */
-                       ri->ri_rnum = 8;
-                       ri->ri_gnum = 8;
-                       ri->ri_bnum = 8;
                        ri->ri_rpos = 0;
                        ri->ri_gpos = 8;
                        ri->ri_bpos = 16;
+               } else if (is_swapped) {
+                       /* byte-swapped, must be 32 bpp */
+                       KASSERT(ri->ri_depth == 32);
+                       ri->ri_rpos = 8;
+                       ri->ri_gpos = 16;
+                       ri->ri_bpos = 24;
                } else {
                        /* assume RGB */
-                       ri->ri_rnum = 8;
-                       ri->ri_gnum = 8;
-                       ri->ri_bnum = 8;
                        ri->ri_rpos = 16;
                        ri->ri_gpos = 8;
                        ri->ri_bpos = 0;



Home | Main Index | Thread Index | Old Index