1
0
Fork 0
forked from wry/wry

render: add support for explicit sync

This commit is contained in:
Julian Orth 2024-03-21 23:26:34 +01:00
parent 1b4492c670
commit 816315170f
22 changed files with 531 additions and 94 deletions

View file

@ -1,6 +1,6 @@
use {
crate::{
gfx_api::{GfxApiOpt, SampleRect},
gfx_api::{AcquireSync, GfxApiOpt, ReleaseSync, SampleRect},
ifs::{
wl_callback::WlCallback,
wl_surface::{
@ -151,13 +151,33 @@ impl Renderer<'_> {
let scale = output.global.persistent.scale.get();
for title in &rd.titles {
let (x, y) = self.base.scale_point(x + title.tex_x, y + title.tex_y);
self.base
.render_texture(&title.tex, x, y, None, None, scale, None, None);
self.base.render_texture(
&title.tex,
x,
y,
None,
None,
scale,
None,
None,
AcquireSync::None,
ReleaseSync::None,
);
}
if let Some(status) = &rd.status {
let (x, y) = self.base.scale_point(x + status.tex_x, y + status.tex_y);
self.base
.render_texture(&status.tex.texture, x, y, None, None, scale, None, None);
self.base.render_texture(
&status.tex.texture,
x,
y,
None,
None,
scale,
None,
None,
AcquireSync::None,
ReleaseSync::None,
);
}
}
if let Some(ws) = output.workspace.get() {
@ -193,8 +213,18 @@ impl Renderer<'_> {
let (tex_width, tex_height) = tex.texture.size();
let x = x + (pos.width() - tex_width) / 2;
let y = y + (pos.height() - tex_height) / 2;
self.base
.render_texture(&tex.texture, x, y, None, None, self.base.scale, None, None);
self.base.render_texture(
&tex.texture,
x,
y,
None,
None,
self.base.scale,
None,
None,
AcquireSync::None,
ReleaseSync::None,
);
}
}
@ -232,6 +262,8 @@ impl Renderer<'_> {
self.base.scale,
None,
None,
AcquireSync::None,
ReleaseSync::None,
);
}
}
@ -354,6 +386,10 @@ impl Renderer<'_> {
bounds: Option<&Rect>,
) {
if let Some(tex) = buffer.buffer.texture.get() {
let release_sync = match buffer.sync {
AcquireSync::Implicit => ReleaseSync::Implicit,
AcquireSync::None | AcquireSync::SyncFile { .. } => ReleaseSync::Explicit,
};
self.base.render_texture(
&tex,
x,
@ -363,6 +399,8 @@ impl Renderer<'_> {
self.base.scale,
bounds,
Some(buffer.clone()),
buffer.sync.clone(),
release_sync,
);
} else if let Some(color) = &buffer.buffer.color {
if let Some(rect) = Rect::new_sized(x, y, tsize.0, tsize.1) {
@ -420,6 +458,8 @@ impl Renderer<'_> {
self.base.scale,
None,
None,
AcquireSync::None,
ReleaseSync::None,
);
}
let body = Rect::new_sized(