Patch gui_fb to work at high-resolutions
parent
2840ba6b1f
commit
690d21cbaa
@ -0,0 +1,59 @@
|
||||
From 92f7d224725ef3952924e230d2b41b58c043b9e3 Mon Sep 17 00:00:00 2001
|
||||
From: Emery Hemingway <ehmry@posteo.net>
|
||||
Date: Wed, 14 Apr 2021 11:51:38 +0200
|
||||
Subject: [PATCH] gui_fb: always set a usable framebuffer mode
|
||||
|
||||
Reduce the size of a requested mode until there is sufficient RAM
|
||||
to render that mode, rather than refuse to set a mode at all.
|
||||
---
|
||||
repos/os/src/server/gui_fb/main.cc | 20 +++++++++++++-------
|
||||
1 file changed, 13 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/repos/os/src/server/gui_fb/main.cc b/repos/os/src/server/gui_fb/main.cc
|
||||
index 923208896e..8ce9710224 100644
|
||||
--- a/repos/os/src/server/gui_fb/main.cc
|
||||
+++ b/repos/os/src/server/gui_fb/main.cc
|
||||
@@ -121,7 +121,7 @@ struct Framebuffer::Session_component : Genode::Rpc_object<Framebuffer::Session>
|
||||
|
||||
bool _dataspace_is_new = true;
|
||||
|
||||
- bool _ram_suffices_for_mode(Framebuffer::Mode mode) const
|
||||
+ bool ram_suffices_for_mode(Framebuffer::Mode mode) const
|
||||
{
|
||||
/* calculation in bytes */
|
||||
size_t const used = _buffer_num_bytes,
|
||||
@@ -153,11 +153,6 @@ struct Framebuffer::Session_component : Genode::Rpc_object<Framebuffer::Session>
|
||||
|
||||
Framebuffer::Mode const mode { .area = size };
|
||||
|
||||
- if (!_ram_suffices_for_mode(mode)) {
|
||||
- Genode::warning("insufficient RAM for mode ", mode);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
_next_mode = mode;
|
||||
|
||||
if (_mode_sigh.valid())
|
||||
@@ -372,7 +367,18 @@ struct Nit_fb::Main : View_updater
|
||||
if (height < 0) height = gui_height + height;
|
||||
}
|
||||
|
||||
- fb_session.size(Area(width, height));
|
||||
+ Framebuffer::Mode mode { .area = Area(width, height) };
|
||||
+
|
||||
+ if (!fb_session.ram_suffices_for_mode(mode))
|
||||
+ Genode::warning("insufficient RAM for mode ", mode);
|
||||
+
|
||||
+ while (!fb_session.ram_suffices_for_mode(mode)) {
|
||||
+ mode.area = Area(
|
||||
+ (mode.area.w() / 4) * 3,
|
||||
+ (mode.area.h() / 4) * 3);
|
||||
+ }
|
||||
+
|
||||
+ fb_session.size(mode.area);
|
||||
}
|
||||
|
||||
void handle_config_update()
|
||||
--
|
||||
2.31.0
|
||||
|
Loading…
Reference in New Issue