display: stop calling the fenced present 'vsync' — it isn't
The virtio-gpu present fence completes when the device has consumed the frame: real completion feedback, and tear-freedom by snapshot semantics. It is not a vblank — base virtio-gpu 2D has no display-refresh event at all (Linux fakes one with a timer), so nothing paces presents to the monitor. The code and docs claimed vsync anyway; now they don't. - backend.hasVsync -> hasFencedPresent, with an honest doc comment - marker 'display: vsync present ok' -> 'display: fenced present ok' (display-modeset test expectation updated, passes) - display-v2.md gains a 'Fenced is not vsync' note; the vsync claims in both v2 docs are corrected - true vsync arrives with a native driver's vblank IRQ, or approximated by a compositor frame clock
This commit is contained in:
@@ -26,7 +26,7 @@ var device_table: [64]device.DeviceDescriptor = undefined;
|
||||
/// framebuffer write-combining as the front buffer, and keeps a cacheable back buffer of
|
||||
/// the same geometry as the compose target. `present` streams the damaged rectangle from
|
||||
/// the back buffer to the LFB (sequential WC writes; the LFB is never read). No mode-set,
|
||||
/// no vsync — the portable floor (docs/display-v2.md).
|
||||
/// no present fence — the portable floor (docs/display-v2.md).
|
||||
pub const Gop = struct {
|
||||
device_id: u64,
|
||||
front: [*]volatile u8, // the LFB (write-combining)
|
||||
@@ -263,9 +263,13 @@ pub const Backend = union(enum) {
|
||||
.virtio => true,
|
||||
};
|
||||
}
|
||||
/// Whether this backend has a vblank/fence for tear-free present (virtio-gpu: yes, V5 — every
|
||||
/// flush is fenced, so the device signals completion when the frame is actually on screen).
|
||||
pub fn hasVsync(self: *const Backend) bool {
|
||||
/// Whether this backend's present is **fenced** — it completes only once the device has
|
||||
/// consumed the frame (virtio-gpu: every flush carries a fence the used-ring ack waits on).
|
||||
/// A fence gives completion feedback and tear-free snapshot presents; it is *not* vblank —
|
||||
/// nothing paces presents to the display's refresh (base virtio-gpu 2D has no vblank event
|
||||
/// at all). True vsync needs a native driver's vblank interrupt. See docs/display-v2.md,
|
||||
/// "Fenced is not vsync".
|
||||
pub fn hasFencedPresent(self: *const Backend) bool {
|
||||
return switch (self.*) {
|
||||
.gop => false,
|
||||
.virtio => true,
|
||||
|
||||
Reference in New Issue
Block a user