Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/rasops Merge rasops_putchar_aa.h into rasops_putchar.h.
details: https://anonhg.NetBSD.org/src/rev/14242cb2bd65
branches: trunk
changeset: 964567:14242cb2bd65
user: rin <rin%NetBSD.org@localhost>
date: Wed Aug 07 12:33:48 2019 +0000
description:
Merge rasops_putchar_aa.h into rasops_putchar.h.
Support scaling underline dimensions by font height.
diffstat:
sys/dev/rasops/rasops15.c | 10 +-
sys/dev/rasops/rasops24.c | 10 +-
sys/dev/rasops/rasops32.c | 10 +-
sys/dev/rasops/rasops8.c | 10 +-
sys/dev/rasops/rasops_putchar.h | 146 ++++++++++++++++++++-----
sys/dev/rasops/rasops_putchar_aa.h | 207 -------------------------------------
6 files changed, 141 insertions(+), 252 deletions(-)
diffs (truncated from 565 to 300 lines):
diff -r f804b524d6c4 -r 14242cb2bd65 sys/dev/rasops/rasops15.c
--- a/sys/dev/rasops/rasops15.c Wed Aug 07 12:27:49 2019 +0000
+++ b/sys/dev/rasops/rasops15.c Wed Aug 07 12:33:48 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rasops15.c,v 1.36 2019/08/07 11:48:43 rin Exp $ */
+/* $NetBSD: rasops15.c,v 1.37 2019/08/07 12:33:48 rin Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rasops15.c,v 1.36 2019/08/07 11:48:43 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rasops15.c,v 1.37 2019/08/07 12:33:48 rin Exp $");
#include "opt_rasops.h"
@@ -114,8 +114,12 @@
#endif
}
+#undef RASOPS_AA
#include "rasops_putchar.h"
-#include "rasops_putchar_aa.h"
+
+#define RASOPS_AA
+#include "rasops_putchar.h"
+#undef RASOPS_AA
#ifndef RASOPS_SMALL
/*
diff -r f804b524d6c4 -r 14242cb2bd65 sys/dev/rasops/rasops24.c
--- a/sys/dev/rasops/rasops24.c Wed Aug 07 12:27:49 2019 +0000
+++ b/sys/dev/rasops/rasops24.c Wed Aug 07 12:33:48 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rasops24.c,v 1.47 2019/08/07 11:47:33 rin Exp $ */
+/* $NetBSD: rasops24.c,v 1.48 2019/08/07 12:33:48 rin Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rasops24.c,v 1.47 2019/08/07 11:47:33 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rasops24.c,v 1.48 2019/08/07 12:33:48 rin Exp $");
#include "opt_rasops.h"
@@ -125,8 +125,12 @@
#endif
}
+#undef RASOPS_AA
#include "rasops_putchar.h"
-#include "rasops_putchar_aa.h"
+
+#define RASOPS_AA
+#include "rasops_putchar.h"
+#undef RASOPS_AA
static __inline void
rasops24_makestamp1(struct rasops_info *ri, uint32_t *xstamp,
diff -r f804b524d6c4 -r 14242cb2bd65 sys/dev/rasops/rasops32.c
--- a/sys/dev/rasops/rasops32.c Wed Aug 07 12:27:49 2019 +0000
+++ b/sys/dev/rasops/rasops32.c Wed Aug 07 12:33:48 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rasops32.c,v 1.43 2019/08/07 11:47:33 rin Exp $ */
+/* $NetBSD: rasops32.c,v 1.44 2019/08/07 12:33:48 rin Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rasops32.c,v 1.43 2019/08/07 11:47:33 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rasops32.c,v 1.44 2019/08/07 12:33:48 rin Exp $");
#include "opt_rasops.h"
@@ -115,8 +115,12 @@
#endif
}
+#undef RASOPS_AA
#include "rasops_putchar.h"
-#include "rasops_putchar_aa.h"
+
+#define RASOPS_AA
+#include "rasops_putchar.h"
+#undef RASOPS_AA
#ifndef RASOPS_SMALL
/*
diff -r f804b524d6c4 -r 14242cb2bd65 sys/dev/rasops/rasops8.c
--- a/sys/dev/rasops/rasops8.c Wed Aug 07 12:27:49 2019 +0000
+++ b/sys/dev/rasops/rasops8.c Wed Aug 07 12:33:48 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rasops8.c,v 1.48 2019/08/07 11:47:33 rin Exp $ */
+/* $NetBSD: rasops8.c,v 1.49 2019/08/07 12:33:48 rin Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rasops8.c,v 1.48 2019/08/07 11:47:33 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rasops8.c,v 1.49 2019/08/07 12:33:48 rin Exp $");
#include "opt_rasops.h"
@@ -113,8 +113,12 @@
#endif
}
+#undef RASOPS_AA
#include "rasops_putchar.h"
-#include "rasops_putchar_aa.h"
+
+#define RASOPS_AA
+#include "rasops_putchar.h"
+#undef RASOPS_AA
#ifndef RASOPS_SMALL
/*
diff -r f804b524d6c4 -r 14242cb2bd65 sys/dev/rasops/rasops_putchar.h
--- a/sys/dev/rasops/rasops_putchar.h Wed Aug 07 12:27:49 2019 +0000
+++ b/sys/dev/rasops/rasops_putchar.h Wed Aug 07 12:33:48 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rasops_putchar.h,v 1.5 2019/07/30 15:29:40 rin Exp $ */
+/* $NetBSD: rasops_putchar.h,v 1.6 2019/08/07 12:33:48 rin Exp $ */
/* NetBSD: rasops8.c,v 1.41 2019/07/25 03:02:44 rin Exp */
/*-
@@ -35,9 +35,6 @@
#error "Depth not supported"
#endif
-#define PUTCHAR(depth) PUTCHAR1(depth)
-#define PUTCHAR1(depth) rasops ## depth ## _putchar
-
#if RASOPS_DEPTH == 8
#define COLOR_TYPE uint8_t
#elif RASOPS_DEPTH == 15
@@ -47,15 +44,17 @@
#endif
#if RASOPS_DEPTH != 24
-#define PIXEL_BYTES sizeof(COLOR_TYPE)
-#define SET_PIXEL(p, index) \
- do { \
- *(COLOR_TYPE *)(p) = clr[index]; \
- (p) += sizeof(COLOR_TYPE); \
- } while (0 /* CONSTCOND */)
+#define PIXEL_TYPE COLOR_TYPE
+#define PIXEL_BYTES sizeof(PIXEL_TYPE)
+#define SET_PIXEL(p, index) *(p)++ = clr[index]
+#define SET_RGB(p, r, g, b) \
+ *(p)++ = (((r) >> (8 - ri->ri_rnum)) << ri->ri_rpos) | \
+ (((g) >> (8 - ri->ri_gnum)) << ri->ri_gpos) | \
+ (((b) >> (8 - ri->ri_bnum)) << ri->ri_bpos)
#endif
#if RASOPS_DEPTH == 24
+#define PIXEL_TYPE uint8_t
#define PIXEL_BYTES 3
#define SET_PIXEL(p, index) \
do { \
@@ -64,20 +63,46 @@
*(p)++ = c >> 8; \
*(p)++ = c; \
} while (0 /* CONSTCOND */)
+#define SET_RGB(p, r, g, b) \
+ do { \
+ (p)[R_OFF] = (r); \
+ (p)[G_OFF] = (g); \
+ (p)[B_OFF] = (b); \
+ (p) += 3; \
+ } while (0 /* CONSTCOND */)
+#endif
+
+#define AV(p, w) (((w) * (p)[1] + (0xff - (w)) * (p)[0]) >> 8)
+
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define R_OFF (ri->ri_rpos / 8)
+#define G_OFF (ri->ri_gpos / 8)
+#define B_OFF (ri->ri_bpos / 8)
+#else /* BIG_ENDIAN XXX not tested */
+#define R_OFF (2 - ri->ri_rpos / 8)
+#define G_OFF (2 - ri->ri_gpos / 8)
+#define B_OFF (2 - ri->ri_bpos / 8)
+#endif
+
+#define NAME(depth) NAME1(depth)
+#ifndef RASOPS_AA
+#define NAME1(depth) rasops ## depth ## _putchar
+#else
+#define NAME1(depth) rasops ## depth ## _putchar_aa
#endif
/*
* Put a single character.
*/
static void
-PUTCHAR(RASOPS_DEPTH)(void *cookie, int row, int col, u_int uc, long attr)
+NAME(RASOPS_DEPTH)(void *cookie, int row, int col, u_int uc, long attr)
{
struct rasops_info *ri = (struct rasops_info *)cookie;
struct wsdisplay_font *font = PICK_FONT(ri, uc);
- int width, height, cnt, fs;
- uint32_t fb;
- uint8_t *dp, *rp, *hp, *fr;
+ int height, width, cnt;
COLOR_TYPE clr[2];
+ PIXEL_TYPE *dp, *rp, *hp;
+ uint8_t *fr;
hp = NULL; /* XXX GCC */
@@ -93,9 +118,11 @@
return;
#endif
- rp = ri->ri_bits + row * ri->ri_yscale + col * ri->ri_xscale;
+ rp = (PIXEL_TYPE *)(ri->ri_bits + row * ri->ri_yscale +
+ col * ri->ri_xscale);
if (ri->ri_hwbits)
- hp = ri->ri_hwbits + row * ri->ri_yscale + col * ri->ri_xscale;
+ hp = (PIXEL_TYPE *)(ri->ri_hwbits + row * ri->ri_yscale +
+ col * ri->ri_xscale);
height = font->fontheight;
width = font->fontwidth;
@@ -112,47 +139,100 @@
uint16_t bytes = width * PIXEL_BYTES;
/* XXX GCC */
memcpy(hp, rp, bytes);
- hp += ri->ri_stride;
+ DELTA(hp, ri->ri_stride, PIXEL_TYPE *);
}
- rp += ri->ri_stride;
+ DELTA(rp, ri->ri_stride, PIXEL_TYPE *);
}
} else {
fr = FONT_GLYPH(uc, font, ri);
- fs = font->stride;
+
+#ifdef RASOPS_AA
+ int off[2];
+ uint8_t r[2], g[2], b[2];
+
+ /*
+ * This is independent to positions/lengths of RGB in pixel.
+ */
+ off[0] = (((uint32_t)attr >> 16) & 0xf) * 3;
+ off[1] = (((uint32_t)attr >> 24) & 0xf) * 3;
+
+ r[0] = rasops_cmap[off[0]];
+ r[1] = rasops_cmap[off[1]];
+ g[0] = rasops_cmap[off[0] + 1];
+ g[1] = rasops_cmap[off[1] + 1];
+ b[0] = rasops_cmap[off[0] + 2];
+ b[1] = rasops_cmap[off[1] + 2];
+#endif
while (height--) {
dp = rp;
- fb = be32uatoh(fr);
- fr += fs;
- for (cnt = width; cnt; cnt--) {
+
+#ifndef RASOPS_AA
+ uint32_t fb = be32uatoh(fr);
+ fr += ri->ri_font->stride;
+#endif
+
+ for (cnt = width; cnt; cnt--)
+#ifndef RASOPS_AA
+ {
SET_PIXEL(dp, (fb >> 31) & 1);
fb <<= 1;
}
+#else
+ {
+ int w = *fr++;
+ if (w == 0xff)
+ SET_PIXEL(dp, 1);
+ else if (w == 0)
+ SET_PIXEL(dp, 0);
+ else
+ SET_RGB(dp,
+ AV(r, w), AV(g, w), AV(b, w));
+ }
+#endif
if (ri->ri_hwbits) {
uint16_t bytes = width * PIXEL_BYTES;
/* XXX GCC */
Home |
Main Index |
Thread Index |
Old Index