autocommit 2022-04-28 14:26:32 CEST
This commit is contained in:
parent
8065075d21
commit
a8ad097f8b
5 changed files with 28 additions and 102 deletions
|
|
@ -7,7 +7,7 @@ use {
|
|||
backends::metal::{DrmId, MetalBackend, MetalError},
|
||||
edid::Descriptor,
|
||||
format::{Format, XRGB8888},
|
||||
ifs::wp_presentation_feedback::ExecutedPresentation,
|
||||
ifs::wp_presentation_feedback::{KIND_HW_COMPLETION, KIND_VSYNC},
|
||||
render::{Framebuffer, RenderContext, RenderResult},
|
||||
state::State,
|
||||
utils::{
|
||||
|
|
@ -191,7 +191,8 @@ impl MetalConnector {
|
|||
&mut rr,
|
||||
);
|
||||
for fr in rr.frame_requests.drain(..) {
|
||||
fr.client.dispatch_frame_requests.push(fr.clone());
|
||||
fr.send_done();
|
||||
let _ = fr.client.remove_obj(&*fr);
|
||||
}
|
||||
}
|
||||
let mut changes = self.master.change();
|
||||
|
|
@ -829,21 +830,28 @@ impl MetalBackend {
|
|||
{
|
||||
let global = self.state.outputs.get(&connector.connector_id);
|
||||
let mut rr = connector.render_result.borrow_mut();
|
||||
for fb in rr.presentation_feedbacks.drain(..) {
|
||||
match &global {
|
||||
Some(g) => {
|
||||
fb.client
|
||||
.dispatch_presentation_feedback
|
||||
.push(ExecutedPresentation {
|
||||
feedback: fb.clone(),
|
||||
output: g.node.global.clone(),
|
||||
tv_sec: tv_sec as _,
|
||||
tv_nsec: tv_usec * 1000,
|
||||
seq: sequence as _,
|
||||
refresh: connector.refresh.get(),
|
||||
})
|
||||
if let Some(g) = &global {
|
||||
let refresh = connector.refresh.get();
|
||||
let bindings = g.node.global.bindings.borrow_mut();
|
||||
for fb in rr.presentation_feedbacks.drain(..) {
|
||||
if let Some(bindings) = bindings.get(&fb.client.id) {
|
||||
for binding in bindings.values() {
|
||||
fb.send_sync_output(binding);
|
||||
}
|
||||
}
|
||||
_ => fb.client.discard_presentation_feedback.push(fb.clone()),
|
||||
fb.send_presented(
|
||||
tv_sec as _,
|
||||
tv_usec * 1000,
|
||||
refresh,
|
||||
sequence as _,
|
||||
KIND_VSYNC | KIND_HW_COMPLETION,
|
||||
);
|
||||
let _ = fb.client.remove_obj(&*fb);
|
||||
}
|
||||
} else {
|
||||
for fb in rr.presentation_feedbacks.drain(..) {
|
||||
fb.send_discarded();
|
||||
let _ = fb.client.remove_obj(&*fb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -686,7 +686,8 @@ impl XBackend {
|
|||
rr.deref_mut(),
|
||||
);
|
||||
for fr in rr.frame_requests.drain(..) {
|
||||
fr.client.dispatch_frame_requests.push(fr.clone());
|
||||
fr.send_done();
|
||||
let _ = fr.client.remove_obj(&*fr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue