Skip to content

Commit 84d3f62

Browse files
Use highest resolution available on real hardware
1 parent 2aa4abf commit 84d3f62

File tree

3 files changed

+32
-20
lines changed

3 files changed

+32
-20
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

uefi/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ log = "0.4.14"
1616
x86_64 = "0.14.8"
1717
serde-json-core = "0.5.0"
1818
uefi = "0.20.0"
19+
raw-cpuid = "10.7.0"

uefi/src/main.rs

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use bootloader_boot_config::BootConfig;
88
use bootloader_x86_64_common::{
99
legacy_memory_region::LegacyFrameAllocator, Kernel, RawFrameBufferInfo, SystemInfo,
1010
};
11+
use raw_cpuid::CpuId;
1112
use core::{
1213
cell::UnsafeCell,
1314
ops::{Deref, DerefMut},
@@ -469,26 +470,35 @@ fn init_logger(
469470
};
470471

471472
let mode = {
472-
let modes = gop.modes();
473-
match (
474-
config
475-
.frame_buffer
476-
.minimum_framebuffer_height
477-
.map(|v| usize::try_from(v).unwrap()),
478-
config
479-
.frame_buffer
480-
.minimum_framebuffer_width
481-
.map(|v| usize::try_from(v).unwrap()),
482-
) {
483-
(Some(height), Some(width)) => modes
484-
.filter(|m| {
485-
let res = m.info().resolution();
486-
res.1 >= height && res.0 >= width
487-
})
488-
.last(),
489-
(Some(height), None) => modes.filter(|m| m.info().resolution().1 >= height).last(),
490-
(None, Some(width)) => modes.filter(|m| m.info().resolution().0 >= width).last(),
491-
_ => None,
473+
let mut modes = gop.modes();
474+
475+
if let Some(_) = CpuId::new().get_hypervisor_info() {
476+
match (
477+
config
478+
.frame_buffer
479+
.minimum_framebuffer_height
480+
.map(|v| usize::try_from(v).unwrap()),
481+
config
482+
.frame_buffer
483+
.minimum_framebuffer_width
484+
.map(|v| usize::try_from(v).unwrap()),
485+
) {
486+
(Some(height), Some(width)) => modes
487+
.filter(|m| {
488+
let res = m.info().resolution();
489+
res.1 >= height && res.0 >= width
490+
})
491+
.last(),
492+
(Some(height), None) => modes.filter(|m| m.info().resolution().1 >= height).last(),
493+
(None, Some(width)) => modes.filter(|m| m.info().resolution().0 >= width).last(),
494+
_ => None,
495+
}
496+
} else {
497+
// Default to using the highest resolution available on real hardware
498+
let x = gop.modes().map(|m| m.info().resolution().0).max().unwrap();
499+
let y = gop.modes().map(|m| m.info().resolution().1).max().unwrap();
500+
501+
modes.find(|m| m.info().resolution().0 == x && m.info().resolution().1 == y)
492502
}
493503
};
494504
if let Some(mode) = mode {

0 commit comments

Comments
 (0)