Page MenuHomeFreeBSD

D45929.id140716.diff
No OneTemporary

D45929.id140716.diff

diff --git a/sys/dev/vt/hw/efifb/efifb.c b/sys/dev/vt/hw/efifb/efifb.c
--- a/sys/dev/vt/hw/efifb/efifb.c
+++ b/sys/dev/vt/hw/efifb/efifb.c
@@ -58,6 +58,7 @@
.vd_bitblt_text = vt_fb_bitblt_text,
.vd_invalidate_text = vt_fb_invalidate_text,
.vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_bitblt_argb = vt_fb_bitblt_argb,
.vd_drawrect = vt_fb_drawrect,
.vd_setpixel = vt_fb_setpixel,
.vd_fb_ioctl = vt_fb_ioctl,
diff --git a/sys/dev/vt/hw/fb/vt_early_fb.c b/sys/dev/vt/hw/fb/vt_early_fb.c
--- a/sys/dev/vt/hw/fb/vt_early_fb.c
+++ b/sys/dev/vt/hw/fb/vt_early_fb.c
@@ -58,6 +58,7 @@
.vd_bitblt_text = vt_fb_bitblt_text,
.vd_invalidate_text = vt_fb_invalidate_text,
.vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_bitblt_argb = vt_fb_bitblt_argb,
.vd_drawrect = vt_fb_drawrect,
.vd_setpixel = vt_fb_setpixel,
.vd_priority = VD_PRIORITY_GENERIC,
diff --git a/sys/dev/vt/hw/fb/vt_fb.h b/sys/dev/vt/hw/fb/vt_fb.h
--- a/sys/dev/vt/hw/fb/vt_fb.h
+++ b/sys/dev/vt/hw/fb/vt_fb.h
@@ -42,6 +42,7 @@
vd_bitblt_text_t vt_fb_bitblt_text;
vd_invalidate_text_t vt_fb_invalidate_text;
vd_bitblt_bmp_t vt_fb_bitblt_bitmap;
+vd_bitblt_argb_t vt_fb_bitblt_argb;
vd_drawrect_t vt_fb_drawrect;
vd_setpixel_t vt_fb_setpixel;
vd_postswitch_t vt_fb_postswitch;
diff --git a/sys/dev/vt/hw/fb/vt_fb.c b/sys/dev/vt/hw/fb/vt_fb.c
--- a/sys/dev/vt/hw/fb/vt_fb.c
+++ b/sys/dev/vt/hw/fb/vt_fb.c
@@ -49,6 +49,7 @@
.vd_bitblt_text = vt_fb_bitblt_text,
.vd_invalidate_text = vt_fb_invalidate_text,
.vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_bitblt_argb = vt_fb_bitblt_argb,
.vd_drawrect = vt_fb_drawrect,
.vd_setpixel = vt_fb_setpixel,
.vd_postswitch = vt_fb_postswitch,
@@ -332,6 +333,52 @@
}
}
+int
+vt_fb_bitblt_argb(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *argb,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y)
+{
+ struct fb_info *info;
+ uint32_t o, cc;
+ int bpp, xi, yi;
+
+ info = vd->vd_softc;
+ bpp = FBTYPE_GET_BYTESPP(info);
+ if (bpp != 4)
+ return (EOPNOTSUPP);
+
+ if (info->fb_flags & FB_FLAG_NOWRITE)
+ return (0);
+
+ KASSERT((info->fb_vbase != 0), ("Unmapped framebuffer"));
+
+ /* Bound by right and bottom edges. */
+ if (y + height > vw->vw_draw_area.tr_end.tp_row) {
+ if (y >= vw->vw_draw_area.tr_end.tp_row)
+ return (EINVAL);
+ height = vw->vw_draw_area.tr_end.tp_row - y;
+ }
+ if (x + width > vw->vw_draw_area.tr_end.tp_col) {
+ if (x >= vw->vw_draw_area.tr_end.tp_col)
+ return (EINVAL);
+ width = vw->vw_draw_area.tr_end.tp_col - x;
+ }
+ for (yi = 0; yi < height; yi++) {
+ for (xi = 0; xi < (width * 4); xi += 4) {
+ o = (y + yi) * info->fb_stride + (x + (xi / 4)) * bpp;
+ o += vd->vd_transpose;
+ cc = (argb[yi * width * 4 + xi] << 16) |
+ (argb[yi * width * 4 + xi + 1] << 8) |
+ (argb[yi * width * 4 + xi + 2]) |
+ (argb[yi * width * 4 + xi + 3] << 24);
+ vt_fb_mem_wr4(info, o, cc);
+ }
+ }
+
+ return (0);
+}
+
void
vt_fb_bitblt_text(struct vt_device *vd, const struct vt_window *vw,
const term_rect_t *area)
diff --git a/sys/dev/vt/hw/ofwfb/ofwfb.c b/sys/dev/vt/hw/ofwfb/ofwfb.c
--- a/sys/dev/vt/hw/ofwfb/ofwfb.c
+++ b/sys/dev/vt/hw/ofwfb/ofwfb.c
@@ -66,6 +66,7 @@
static vd_init_t ofwfb_init;
static vd_bitblt_text_t ofwfb_bitblt_text;
static vd_bitblt_bmp_t ofwfb_bitblt_bitmap;
+static vd_bitblt_argb_t ofwfb_bitblt_argb;
static const struct vt_driver vt_ofwfb_driver = {
.vd_name = "ofwfb",
@@ -74,6 +75,7 @@
.vd_blank = vt_fb_blank,
.vd_bitblt_text = ofwfb_bitblt_text,
.vd_bitblt_bmp = ofwfb_bitblt_bitmap,
+ .vd_bitblt_argb = ofwfb_bitblt_argb,
.vd_fb_ioctl = vt_fb_ioctl,
.vd_fb_mmap = vt_fb_mmap,
.vd_priority = VD_PRIORITY_GENERIC+1,
@@ -242,6 +244,16 @@
}
}
+static int
+ofwfb_bitblt_argb(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *rgb,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y)
+{
+
+ return (EOPNOTSUPP);
+}
+
void
ofwfb_bitblt_text(struct vt_device *vd, const struct vt_window *vw,
const term_rect_t *area)
diff --git a/sys/dev/vt/hw/vbefb/vbefb.c b/sys/dev/vt/hw/vbefb/vbefb.c
--- a/sys/dev/vt/hw/vbefb/vbefb.c
+++ b/sys/dev/vt/hw/vbefb/vbefb.c
@@ -58,6 +58,7 @@
.vd_bitblt_text = vt_fb_bitblt_text,
.vd_invalidate_text = vt_fb_invalidate_text,
.vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_bitblt_argb = vt_fb_bitblt_argb,
.vd_drawrect = vt_fb_drawrect,
.vd_setpixel = vt_fb_setpixel,
.vd_fb_ioctl = vt_fb_ioctl,
diff --git a/sys/dev/vt/hw/vga/vt_vga.c b/sys/dev/vt/hw/vga/vt_vga.c
--- a/sys/dev/vt/hw/vga/vt_vga.c
+++ b/sys/dev/vt/hw/vga/vt_vga.c
@@ -96,6 +96,7 @@
static vd_bitblt_text_t vga_bitblt_text;
static vd_invalidate_text_t vga_invalidate_text;
static vd_bitblt_bmp_t vga_bitblt_bitmap;
+static vd_bitblt_argb_t vga_bitblt_argb;
static vd_drawrect_t vga_drawrect;
static vd_setpixel_t vga_setpixel;
static vd_postswitch_t vga_postswitch;
@@ -108,6 +109,7 @@
.vd_bitblt_text = vga_bitblt_text,
.vd_invalidate_text = vga_invalidate_text,
.vd_bitblt_bmp = vga_bitblt_bitmap,
+ .vd_bitblt_argb = vga_bitblt_argb,
.vd_drawrect = vga_drawrect,
.vd_setpixel = vga_setpixel,
.vd_postswitch = vga_postswitch,
@@ -998,6 +1000,16 @@
}
}
+static int
+vga_bitblt_argb(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *argb,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y)
+{
+
+ return (EOPNOTSUPP);
+}
+
static void
vga_initialize_graphics(struct vt_device *vd)
{
diff --git a/sys/dev/vt/vt.h b/sys/dev/vt/vt.h
--- a/sys/dev/vt/vt.h
+++ b/sys/dev/vt/vt.h
@@ -345,6 +345,10 @@
const uint8_t *pattern, const uint8_t *mask,
unsigned int width, unsigned int height,
unsigned int x, unsigned int y, term_color_t fg, term_color_t bg);
+typedef int vd_bitblt_argb_t(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *argb,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y);
typedef int vd_fb_ioctl_t(struct vt_device *, u_long, caddr_t, struct thread *);
typedef int vd_fb_mmap_t(struct vt_device *, vm_ooffset_t, vm_paddr_t *, int,
vm_memattr_t *);
@@ -368,6 +372,7 @@
vd_bitblt_text_t *vd_bitblt_text;
vd_invalidate_text_t *vd_invalidate_text;
vd_bitblt_bmp_t *vd_bitblt_bmp;
+ vd_bitblt_argb_t *vd_bitblt_argb;
/* Framebuffer ioctls, if present. */
vd_fb_ioctl_t *vd_fb_ioctl;

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 19, 6:14 PM (18 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14721284
Default Alt Text
D45929.id140716.diff (6 KB)

Event Timeline