Lines Matching refs:ri

66 	struct rasops_info *ri;
273 rasops_init(struct rasops_info *ri, int wantrows, int wantcols)
276 memset(&ri->ri_optfont, 0, sizeof(ri->ri_optfont));
279 if (ri->ri_font == NULL) {
295 if ((ri->ri_flg & RI_ENABLE_ALPHA) != 0)
297 if ((ri->ri_flg & RI_PREFER_ALPHA) != 0)
299 if ((ri->ri_flg & RI_PREFER_WIDEFONT) != 0)
302 ri->ri_width / wantcols,
322 if (ri->ri_flg & RI_ROTATE_MASK) {
323 if (ri->ri_flg & RI_ROTATE_CW)
325 else if (ri->ri_flg & RI_ROTATE_CCW)
330 if (wsfont_lock(cookie, &ri->ri_font)) {
335 ri->ri_wsfcookie = cookie;
340 if ((uintptr_t)ri->ri_bits & 3) {
346 if (ri->ri_stride & 3) {
352 if (rasops_reconfig(ri, wantrows, wantcols))
355 rasops_init_devcmap(ri);
363 rasops_reconfig(struct rasops_info *ri, int wantrows, int wantcols)
376 if (ri->ri_optfont.data != NULL) {
377 kmem_free(ri->ri_optfont.data, ri->ri_optfont.stride *
378 ri->ri_optfont.fontheight * ri->ri_optfont.numchars);
379 ri->ri_optfont.data = NULL;
383 ri->ri_optfont.firstchar = WSFONT_FLAG_OPT;
384 ri->ri_optfont.numchars = 16;
385 ri->ri_optfont.fontwidth = ri->ri_font->fontwidth;
386 ri->ri_optfont.fontheight = ri->ri_font->fontheight;
387 ri->ri_optfont.stride = ri->ri_font->stride;
388 len = ri->ri_optfont.fontheight * ri->ri_optfont.stride *
389 ri->ri_optfont.numchars;
391 if (ri->ri_font->fontwidth > 32 || ri->ri_font->fontwidth < 4) {
397 if ((ri->ri_flg & RI_NO_AUTO) == 0) {
398 ri->ri_optfont.data = kmem_zalloc(len, KM_SLEEP);
399 if (FONT_IS_ALPHA(&ri->ri_optfont))
400 rasops_make_box_chars_alpha(ri);
402 switch (ri->ri_optfont.stride) {
404 rasops_make_box_chars_8(ri);
407 rasops_make_box_chars_16(ri);
410 rasops_make_box_chars_32(ri);
413 kmem_free(ri->ri_optfont.data, len);
414 ri->ri_optfont.data = NULL;
422 memset(&ri->ri_optfont, 0, sizeof(ri->ri_optfont));
425 bpp = (ri->ri_depth == 15 ? 16 : ri->ri_depth);
427 if ((ri->ri_flg & RI_CFGDONE) != 0) {
428 ri->ri_bits = ri->ri_origbits;
429 ri->ri_hwbits = ri->ri_hworigbits;
440 ri->ri_emuwidth = ri->ri_font->fontwidth * wantcols;
441 ri->ri_emuheight = ri->ri_font->fontheight * wantrows;
443 if (ri->ri_emuwidth > ri->ri_width)
444 ri->ri_emuwidth = ri->ri_width;
446 if (ri->ri_emuheight > ri->ri_height)
447 ri->ri_emuheight = ri->ri_height;
450 while ((ri->ri_emuwidth * bpp & 31) != 0)
451 ri->ri_emuwidth--;
454 if (ri->ri_flg & (RI_ROTATE_CW|RI_ROTATE_CCW)) {
455 ri->ri_rows = ri->ri_emuwidth / ri->ri_font->fontwidth;
456 ri->ri_cols = ri->ri_emuheight / ri->ri_font->fontheight;
460 ri->ri_cols = ri->ri_emuwidth / ri->ri_font->fontwidth;
461 ri->ri_rows = ri->ri_emuheight / ri->ri_font->fontheight;
463 ri->ri_emustride = ri->ri_emuwidth * bpp >> 3;
464 ri->ri_ccol = 0;
465 ri->ri_crow = 0;
466 ri->ri_pelbytes = bpp >> 3;
468 ri->ri_xscale = (ri->ri_font->fontwidth * bpp) >> 3;
469 ri->ri_yscale = ri->ri_font->fontheight * ri->ri_stride;
470 ri->ri_fontscale = ri->ri_font->fontheight * ri->ri_font->stride;
472 ri->ri_origbits = ri->ri_bits;
473 ri->ri_hworigbits = ri->ri_hwbits;
476 if ((ri->ri_flg & RI_CLEAR) != 0) {
477 rasops_memset32(ri->ri_bits, 0, ri->ri_stride * ri->ri_height);
478 if (ri->ri_hwbits)
479 rasops_memset32(ri->ri_hwbits, 0,
480 ri->ri_stride * ri->ri_height);
484 if ((ri->ri_flg & RI_CENTER) != 0) {
487 xoff = ((ri->ri_width * bpp >> 3) - ri->ri_emustride) >> 1;
488 if (ri->ri_depth != 24) {
500 yoff = ((ri->ri_height - ri->ri_emuheight) >> 1) *
501 ri->ri_stride;
503 ri->ri_bits += xoff;
504 ri->ri_bits += yoff;
505 if (ri->ri_hwbits != NULL) {
506 ri->ri_hwbits += xoff;
507 ri->ri_hwbits += yoff;
510 ri->ri_yorigin = (int)(ri->ri_bits - ri->ri_origbits) /
511 ri->ri_stride;
512 ri->ri_xorigin = (((int)(ri->ri_bits - ri->ri_origbits) %
513 ri->ri_stride) * 8 / bpp);
515 ri->ri_xorigin = ri->ri_yorigin = 0;
518 height = ri->ri_font->fontheight;
519 ri->ri_ul.off = rounddown(height, 16) / 16; /* offset from bottom */
520 ri->ri_ul.height = roundup(height, 16) / 16; /* height */
526 ri->ri_ops.mapchar = rasops_mapchar;
527 ri->ri_ops.copyrows = rasops_copyrows;
528 ri->ri_ops.copycols = rasops_copycols;
529 ri->ri_ops.erasecols = rasops_erasecols;
530 ri->ri_ops.eraserows = rasops_eraserows;
531 ri->ri_ops.cursor = rasops_cursor;
532 ri->ri_do_cursor = rasops_do_cursor;
534 ri->ri_caps &= ~(WSSCREEN_UNDERLINE | WSSCREEN_HILIT |
537 if ((ri->ri_flg & RI_FORCEMONO) != 0 ||
539 ri->ri_depth < 8
541 ri->ri_depth < 4
544 ri->ri_ops.allocattr = rasops_allocattr_mono;
545 ri->ri_caps |= WSSCREEN_UNDERLINE | WSSCREEN_REVERSE;
547 ri->ri_ops.allocattr = rasops_allocattr_color;
548 ri->ri_caps |= WSSCREEN_UNDERLINE | WSSCREEN_HILIT |
552 switch (ri->ri_depth) {
555 rasops1_init(ri);
560 rasops2_init(ri);
565 rasops4_init(ri);
570 rasops8_init(ri);
576 ri->ri_caps |= WSSCREEN_256COL;
577 rasops15_init(ri);
582 ri->ri_caps |= WSSCREEN_256COL;
583 rasops24_init(ri);
588 ri->ri_caps |= WSSCREEN_256COL;
589 rasops32_init(ri);
593 ri->ri_flg &= ~RI_CFGDONE;
600 if (ri->ri_flg & RI_ROTATE_MASK) {
601 if (ri->ri_flg & RI_ROTATE_CW) {
602 ri->ri_real_ops = ri->ri_ops;
603 ri->ri_ops.copycols = rasops_copycols_rotated_cw;
604 ri->ri_ops.copyrows = rasops_copyrows_rotated_cw;
605 ri->ri_ops.erasecols = rasops_erasecols_rotated_cw;
606 ri->ri_ops.eraserows = rasops_eraserows_rotated_cw;
607 ri->ri_ops.putchar = rasops_putchar_rotated_cw;
608 } else if (ri->ri_flg & RI_ROTATE_CCW) {
609 ri->ri_real_ops = ri->ri_ops;
610 ri->ri_ops.copycols = rasops_copycols_rotated_ccw;
611 ri->ri_ops.copyrows = rasops_copyrows_rotated_ccw;
612 ri->ri_ops.erasecols = rasops_erasecols_rotated_ccw;
613 ri->ri_ops.eraserows = rasops_eraserows_rotated_ccw;
614 ri->ri_ops.putchar = rasops_putchar_rotated_ccw;
619 ri->ri_flg |= RI_CFGDONE;
630 struct rasops_info *ri = (struct rasops_info *)cookie;
632 KASSERT(ri->ri_font != NULL);
634 int glyph = wsfont_map_unichar(ri->ri_font, c);
635 if (glyph < 0 || !CHAR_IN_FONT(glyph, PICK_FONT(ri, glyph))) {
728 struct rasops_info *ri = (struct rasops_info *)cookie;
743 if (src + num > ri->ri_rows)
744 num = ri->ri_rows - src;
751 if (dst + num > ri->ri_rows)
752 num = ri->ri_rows - dst;
758 src *= ri->ri_yscale;
759 dst *= ri->ri_yscale;
760 num *= ri->ri_font->fontheight;
761 stride = ri->ri_stride;
770 sp = ri->ri_bits + src;
771 dp = ri->ri_bits + dst;
772 if (ri->ri_hwbits)
773 hp = ri->ri_hwbits + dst;
776 memcpy(dp, sp, ri->ri_emustride);
777 if (ri->ri_hwbits) {
778 memcpy(hp, dp, ri->ri_emustride);
795 struct rasops_info *ri = (struct rasops_info *)cookie;
806 if ((unsigned)row >= (unsigned)ri->ri_rows)
814 if (src + num > ri->ri_cols)
815 num = ri->ri_cols - src;
822 if (dst + num > ri->ri_cols)
823 num = ri->ri_cols - dst;
829 height = ri->ri_font->fontheight;
830 row *= ri->ri_yscale;
831 num *= ri->ri_xscale;
833 sp = ri->ri_bits + row + src * ri->ri_xscale;
834 dp = ri->ri_bits + row + dst * ri->ri_xscale;
835 if (ri->ri_hwbits)
836 hp = ri->ri_hwbits + row + dst * ri->ri_xscale;
840 if (ri->ri_hwbits) {
842 hp += ri->ri_stride;
844 sp += ri->ri_stride;
845 dp += ri->ri_stride;
855 struct rasops_info *ri = (struct rasops_info *)cookie;
858 if ((ri->ri_flg & RI_CURSOR) != 0)
860 if ((ri->ri_flg & RI_CURSORCLIP) == 0)
862 ri->ri_do_cursor(ri);
865 ri->ri_crow = row;
866 ri->ri_ccol = col;
869 ri->ri_flg &= ~RI_CURSORCLIP;
870 if (row < 0 || row >= ri->ri_rows)
871 ri->ri_flg |= RI_CURSORCLIP;
872 else if (col < 0 || col >= ri->ri_cols)
873 ri->ri_flg |= RI_CURSORCLIP;
877 ri->ri_flg |= RI_CURSOR;
879 if ((ri->ri_flg & RI_CURSORCLIP) == 0)
881 ri->ri_do_cursor(ri);
883 ri->ri_flg &= ~RI_CURSOR;
890 rasops_init_devcmap(struct rasops_info *ri)
896 switch (ri->ri_depth) {
898 ri->ri_devcmap[0] = 0;
900 ri->ri_devcmap[i] = -1;
905 ri->ri_devcmap[i] = 0xaaaaaaaa;
907 ri->ri_devcmap[0] = 0;
908 ri->ri_devcmap[8] = 0x55555555;
909 ri->ri_devcmap[15] = -1;
919 ri->ri_devcmap[i] =
926 if ((ri->ri_flg & RI_8BIT_IS_RGB) == 0) {
933 ri->ri_devcmap[i] =
942 for (i = 0; i < ((ri->ri_caps & WSSCREEN_256COL) ? 256 : 16); i++) {
943 if (ri->ri_rnum <= 8)
944 c = (uint32_t)(*p >> (8 - ri->ri_rnum)) << ri->ri_rpos;
946 c = (uint32_t)(*p << (ri->ri_rnum - 8)) << ri->ri_rpos;
949 if (ri->ri_gnum <= 8)
950 c |= (uint32_t)(*p >> (8 - ri->ri_gnum)) << ri->ri_gpos;
952 c |= (uint32_t)(*p << (ri->ri_gnum - 8)) << ri->ri_gpos;
955 if (ri->ri_bnum <= 8)
956 c |= (uint32_t)(*p >> (8 - ri->ri_bnum)) << ri->ri_bpos;
958 c |= (uint32_t)(*p << (ri->ri_bnum - 8)) << ri->ri_bpos;
964 #define EP_BLUE(x) ((EP_BLUE_RAW(x) >> (8 - ri->ri_bnum)) << ri->ri_bpos)
965 #define EP_GREEN(x) ((EP_GREEN_RAW(x) >> (8 - ri->ri_gnum)) << ri->ri_gpos)
966 #define EP_RED(x) ((EP_RED_RAW(x) >> (8 - ri->ri_rnum)) << ri->ri_rpos)
969 #define GREYSCALE_BLUE(x) ((EP_GREY_BYTE(x) >> (8 - ri->ri_bnum)) << ri->ri_bpos)
970 #define GREYSCALE_GREEN(x) ((EP_GREY_BYTE(x) >> (8 - ri->ri_gnum)) << ri->ri_gpos)
971 #define GREYSCALE_RED(x) ((EP_GREY_BYTE(x) >> (8 - ri->ri_rnum)) << ri->ri_rpos)
991 switch (ri->ri_depth) {
998 if ((ri->ri_flg & RI_BSWAP) != 0)
1004 if ((ri->ri_flg & RI_BSWAP) == 0)
1006 if ((ri->ri_flg & RI_BSWAP) != 0)
1023 if ((ri->ri_flg & RI_BSWAP) != 0)
1028 ri->ri_devcmap[i] = c;
1051 struct rasops_info *ri = (struct rasops_info *)cookie;
1063 if (row + num > ri->ri_rows)
1064 num = ri->ri_rows - row;
1076 if (num == ri->ri_rows && (ri->ri_flg & RI_FULLCLEAR) != 0) {
1077 bytes = ri->ri_stride;
1078 num = ri->ri_height;
1079 rp = (uint32_t *)ri->ri_origbits;
1080 if (ri->ri_hwbits)
1081 hp = (uint32_t *)ri->ri_hworigbits;
1083 bytes = ri->ri_emustride;
1084 num *= ri->ri_font->fontheight;
1085 rp = (uint32_t *)(ri->ri_bits + row * ri->ri_yscale);
1086 if (ri->ri_hwbits)
1087 hp = (uint32_t *)(ri->ri_hwbits + row * ri->ri_yscale);
1090 bg = ATTR_BG(ri, attr);
1094 if (ri->ri_hwbits) {
1096 DELTA(hp, ri->ri_stride, uint32_t *);
1098 DELTA(rp, ri->ri_stride, uint32_t *);
1107 rasops_do_cursor(struct rasops_info *ri)
1116 if (ri->ri_flg & RI_ROTATE_MASK) {
1117 if (ri->ri_flg & RI_ROTATE_CW) {
1119 row = ri->ri_ccol;
1120 col = ri->ri_rows - ri->ri_crow - 1;
1121 } else if (ri->ri_flg & RI_ROTATE_CCW) {
1123 row = ri->ri_cols - ri->ri_ccol - 1;
1124 col = ri->ri_crow;
1126 row = ri->ri_crow;
1127 col = ri->ri_ccol;
1132 row = ri->ri_crow;
1133 col = ri->ri_ccol;
1136 height = ri->ri_font->fontheight;
1138 rp = ri->ri_bits + FBOFFSET(ri, row, col);
1139 if (ri->ri_hwbits)
1140 hp = ri->ri_hwbits + FBOFFSET(ri, row, col);
1148 if (ri->ri_xscale == 1) {
1152 if (ri->ri_hwbits) {
1154 hp += ri->ri_stride;
1156 rp += ri->ri_stride;
1168 slop2 = (ri->ri_xscale - slop1) & 3;
1169 full = (ri->ri_xscale - slop1 /* - slop2 */) >> 2;
1193 if (ri->ri_hwbits) {
1196 hp += ri->ri_stride;
1198 rp += ri->ri_stride;
1208 struct rasops_info *ri = (struct rasops_info *)cookie;
1215 if ((unsigned)row >= (unsigned)ri->ri_rows)
1223 if (col + num > ri->ri_cols)
1224 num = ri->ri_cols - col;
1230 height = ri->ri_font->fontheight;
1231 num *= ri->ri_xscale;
1233 rp = (uint32_t *)(ri->ri_bits + FBOFFSET(ri, row, col));
1234 if (ri->ri_hwbits)
1235 hp = (uint32_t *)(ri->ri_hwbits + FBOFFSET(ri, row, col));
1237 bg = ATTR_BG(ri, attr);
1241 if (ri->ri_hwbits) {
1243 DELTA(hp, ri->ri_stride, uint32_t *);
1245 DELTA(rp, ri->ri_stride, uint32_t *);
1250 rasops_make_box_chars_16(struct rasops_info *ri)
1254 uint16_t *data = (uint16_t *)ri->ri_optfont.data;
1256 vert_mask = 0xc000U >> ((ri->ri_font->fontwidth >> 1) - 1);
1257 hmask_left = 0xff00U << (8 - (ri->ri_font->fontwidth >> 1));
1258 hmask_right = hmask_left >> ((ri->ri_font->fontwidth + 1) >> 1);
1264 mid = (ri->ri_font->fontheight + 1) >> 1;
1268 data += ri->ri_font->fontheight;
1276 for (i = mid; i < ri->ri_font->fontheight; i++)
1281 i = ri->ri_font->fontheight >> 1;
1294 rasops_make_box_chars_8(struct rasops_info *ri)
1298 uint8_t *data = (uint8_t *)ri->ri_optfont.data;
1300 vert_mask = 0xc0U >> ((ri->ri_font->fontwidth >> 1) - 1);
1301 hmask_left = 0xf0U << (4 - (ri->ri_font->fontwidth >> 1));
1302 hmask_right = hmask_left >> ((ri->ri_font->fontwidth + 1) >> 1);
1304 mid = (ri->ri_font->fontheight + 1) >> 1;
1308 data += ri->ri_font->fontheight;
1316 for (i = mid; i < ri->ri_font->fontheight; i++)
1321 i = ri->ri_font->fontheight >> 1;
1334 rasops_make_box_chars_32(struct rasops_info *ri)
1338 uint32_t *data = (uint32_t *)ri->ri_optfont.data;
1340 vert_mask = 0xc0000000U >> ((ri->ri_font->fontwidth >> 1) - 1);
1341 hmask_left = 0xffff0000U << (16 - (ri->ri_font->fontwidth >> 1));
1342 hmask_right = hmask_left >> ((ri->ri_font->fontwidth + 1) >> 1);
1348 mid = (ri->ri_font->fontheight + 1) >> 1;
1352 data += ri->ri_font->fontheight;
1360 for (i = mid; i < ri->ri_font->fontheight; i++)
1365 i = ri->ri_font->fontheight >> 1;
1378 rasops_make_box_chars_alpha(struct rasops_info *ri)
1381 uint8_t *data = (uint8_t *)ri->ri_optfont.data;
1384 he = ri->ri_font->fontheight;
1385 wi = ri->ri_font->fontwidth;
1392 data += ri->ri_fontscale;
1435 rasops_get_cmap(struct rasops_info *ri, uint8_t *palette, size_t bytes)
1438 if ((ri->ri_depth == 8) && ((ri->ri_flg & RI_8BIT_IS_RGB) != 0)) {
1515 struct rasops_info *ri = (struct rasops_info *)cookie;
1521 r_srccol = ri->ri_rows - srcrow - 1;
1522 r_dstcol = ri->ri_rows - dstrow - 1;
1524 r_srcrow *= ri->ri_yscale;
1525 r_dstrow *= ri->ri_yscale;
1526 height = ri->ri_font->fontheight;
1528 sp = ri->ri_bits + r_srcrow + r_srccol * ri->ri_xscale;
1529 dp = ri->ri_bits + r_dstrow + r_dstcol * ri->ri_xscale;
1532 memmove(dp, sp, ri->ri_xscale);
1533 dp += ri->ri_stride;
1534 sp += ri->ri_stride;
1541 struct rasops_info *ri = (struct rasops_info *)cookie;
1545 if (__predict_false((unsigned int)row > ri->ri_rows ||
1546 (unsigned int)col > ri->ri_cols))
1550 if (ri->ri_rows - row - 1 < 0)
1554 ri->ri_real_ops.putchar(cookie, col, ri->ri_rows - row - 1, uc,
1562 height = ri->ri_font->fontheight;
1564 rp = (uint16_t *)(ri->ri_bits + col * ri->ri_yscale +
1565 (ri->ri_rows - row - 1) * ri->ri_xscale);
1567 fg = (uint16_t)ATTR_FG(ri, attr);
1571 DELTA(rp, ri->ri_stride, uint16_t *);
1579 struct rasops_info *ri = (struct rasops_info *)cookie;
1583 ri->ri_ops.putchar(cookie, row, i, ' ', attr);
1590 struct rasops_info *ri = (struct rasops_info *)cookie;
1595 for (col = 0; col < ri->ri_cols; col++)
1600 for (col = 0; col < ri->ri_cols; col++)
1623 struct rasops_info *ri = (struct rasops_info *)cookie;
1627 for (col = 0; col < ri->ri_cols; col++)
1628 ri->ri_ops.putchar(cookie, rn, col, ' ', attr);
1639 struct rasops_info *ri = (struct rasops_info *)cookie;
1643 r_srcrow = ri->ri_cols - srccol - 1;
1644 r_dstrow = ri->ri_cols - dstcol - 1;
1648 r_srcrow *= ri->ri_yscale;
1649 r_dstrow *= ri->ri_yscale;
1650 height = ri->ri_font->fontheight;
1652 sp = ri->ri_bits + r_srcrow + r_srccol * ri->ri_xscale;
1653 dp = ri->ri_bits + r_dstrow + r_dstcol * ri->ri_xscale;
1656 memmove(dp, sp, ri->ri_xscale);
1657 dp += ri->ri_stride;
1658 sp += ri->ri_stride;
1665 struct rasops_info *ri = (struct rasops_info *)cookie;
1669 if (__predict_false((unsigned int)row > ri->ri_rows ||
1670 (unsigned int)col > ri->ri_cols))
1674 if (ri->ri_cols - col - 1 < 0)
1678 ri->ri_real_ops.putchar(cookie, ri->ri_cols - col - 1, row, uc,
1686 height = ri->ri_font->fontheight;
1688 rp = (uint16_t *)(ri->ri_bits +
1689 (ri->ri_cols - col - 1) * ri->ri_yscale +
1690 row * ri->ri_xscale +
1691 (ri->ri_font->fontwidth - 1) * ri->ri_pelbytes);
1693 fg = (uint16_t)ATTR_FG(ri, attr);
1697 DELTA(rp, ri->ri_stride, uint16_t *);
1706 struct rasops_info *ri = (struct rasops_info *)cookie;
1711 for (col = 0; col < ri->ri_cols; col++)
1716 for (col = 0; col < ri->ri_cols; col++)