:: commit 2bba72634f3c1ffef2d9968afc96b14529b234ae

48cf <32851089+48cf@users.noreply.github.com> — 2023-10-24 03:29

parents: 45b39285f1

lib/gterm: Try to initialize all 32-bpp framebuffers

diff --git a/common/GNUmakefile b/common/GNUmakefile
index db7193a0..924333e0 100644
--- a/common/GNUmakefile
+++ b/common/GNUmakefile
@@ -55,7 +55,9 @@ override CPPFLAGS_FOR_TARGET := \
     -MMD \
     -MP
 
-$(call MKESCAPE,$(BUILDDIR))/./flanterm/backends/fb.o: override CPPFLAGS_FOR_TARGET += -DFLANTERM_FB_DISABLE_BUMP_ALLOC
+$(call MKESCAPE,$(BUILDDIR))/./flanterm/backends/fb.o: override CPPFLAGS_FOR_TARGET += \
+	-DFLANTERM_FB_DISABLE_BUMP_ALLOC \
+	-DFLANTERM_FB_SUPPORT_BPP
 
 ifeq ($(TARGET),bios)
     override CFLAGS_FOR_TARGET += \
diff --git a/common/lib/gterm.c b/common/lib/gterm.c
index b8b0be66..efd5367d 100644
--- a/common/lib/gterm.c
+++ b/common/lib/gterm.c
@@ -10,6 +10,7 @@
 #include <lib/image.h>
 #include <mm/pmm.h>
 #include <flanterm/flanterm.h>
+#define FLANTERM_FB_SUPPORT_BPP
 #include <flanterm/backends/fb.h>
 #include <lib/term.h>
 
@@ -673,13 +674,8 @@ no_load_font:;
     for (size_t i = 0; i < fbs_count; i++) {
         struct fb_info *fb = &fbs[i];
 
-        // Ensure this is xRGB8888, we only support that for the menu
-        if (fb->red_mask_size    != 8
-         || fb->red_mask_shift   != 16
-         || fb->green_mask_size  != 8
-         || fb->green_mask_shift != 8
-         || fb->blue_mask_size   != 8
-         || fb->blue_mask_shift  != 0) {
+        // Ensure that this framebuffer uses 32-bits per pixel.
+        if (fb->framebuffer_bpp != 32) {
             continue;
         }
 
@@ -714,6 +710,9 @@ no_load_font:;
                             pmm_free,
                             (void *)(uintptr_t)fb->framebuffer_addr,
                             fb->framebuffer_width, fb->framebuffer_height, fb->framebuffer_pitch,
+                            fb->red_mask_size, fb->red_mask_shift,
+                            fb->green_mask_size, fb->green_mask_shift,
+                            fb->blue_mask_size, fb->blue_mask_shift,
                             bg_canvas,
                             ansi_colours, ansi_bright_colours,
                             &default_bg, &default_fg,
diff --git a/test/GNUmakefile b/test/GNUmakefile
index 7d405797..788b5b78 100644
--- a/test/GNUmakefile
+++ b/test/GNUmakefile
@@ -6,7 +6,7 @@ export OBJCOPY_FOR_TARGET
 export READELF_FOR_TARGET
 
 override CC := $(CC_FOR_TARGET)
-CFLAGS = -O2 -g -Wall -Wextra
+CFLAGS = -O2 -g -Wall -Wextra -DFLANTERM_FB_SUPPORT_BPP
 LDFLAGS =
 override LD := $(LD_FOR_TARGET)
 override QEMU := qemu-system-x86_64
diff --git a/test/limine.c b/test/limine.c
index bf59148a..7728cb18 100644
--- a/test/limine.c
+++ b/test/limine.c
@@ -245,7 +245,13 @@ static void limine_main(void) {
         fb->address,
         fb->width,
         fb->height,
-        fb->pitch
+        fb->pitch,
+        fb->red_mask_size,
+        fb->red_mask_shift,
+        fb->green_mask_size,
+        fb->green_mask_shift,
+        fb->blue_mask_size,
+        fb->blue_mask_shift
     );
 
     uint64_t kernel_slide = (uint64_t)kernel_start - 0xffffffff80000000;
tab: 248 wrap: offon