fix: GPU display at correct resolution, clean up diagnostics

- Add GET_DISPLAY_INFO command to query QEMU's preferred resolution
  (was hardcoded 640x480, QEMU wanted 1280x800)
- Allocate framebuffer matching actual display dimensions
- Remove debug diagnostic output from display server and snake
This commit is contained in:
2026-10-19 00:24:37 +02:00
parent f5ac7189a9
commit 68849f698b
3 changed files with 60 additions and 20 deletions

View File

@@ -83,6 +83,24 @@ fn write_cmd_header(cmd_va: VirtualAddress, cmd_type: u32) {
}
}
pub fn get_display_info(mmio: &impl MmioAccess, queue: &VirtioQueue, dma: &GpuDmaAddrs) -> Option<(u32, u32)> {
write_cmd_header(dma.cmd_va, 0x0100);
let descs = [
Descriptor { addr: dma.cmd_pa.raw() as u64, len: 24, writable: false },
Descriptor { addr: dma.resp_pa.raw() as u64, len: 408, writable: true },
];
if !queue.submit(mmio, &descs) { return None; }
unsafe {
let resp = dma.resp_pa.raw() as usize;
let resp_va = dma.cmd_va.raw() + 512;
let resp_type = core::ptr::read_volatile(resp_va as *const u32);
if resp_type != 0x1101 { return None; }
let w = core::ptr::read_volatile((resp_va + 24 + 8) as *const u32);
let h = core::ptr::read_volatile((resp_va + 24 + 12) as *const u32);
if w > 0 && h > 0 { Some((w, h)) } else { None }
}
}
fn submit_cmd(mmio: &impl MmioAccess, queue: &VirtioQueue, dma: &GpuDmaAddrs, cmd_len: u32) -> bool {
let descs = [
Descriptor { addr: dma.cmd_pa.raw() as u64, len: cmd_len, writable: false },