1
0
Fork 0
forked from wry/wry

metal: use blend buffer if possible

This commit is contained in:
Julian Orth 2025-02-21 12:22:28 +01:00
parent a7cb2ee42a
commit 81d564dcb6
3 changed files with 16 additions and 4 deletions

View file

@ -749,7 +749,7 @@ impl MetalConnector {
ReleaseSync::Explicit,
&latched.pass,
&latched.damage,
None,
buffer.blend_buffer.as_ref(),
)
.map_err(MetalError::RenderFrame)?;
sync_file = buffer.copy_to_dev(sf)?;

View file

@ -18,8 +18,8 @@ use {
edid::{CtaDataBlock, Descriptor, EdidExtension},
format::{ARGB8888, Format, XRGB8888},
gfx_api::{
AcquireSync, GfxContext, GfxFramebuffer, GfxTexture, ReleaseSync, SyncFile,
needs_render_usage,
AcquireSync, GfxBlendBuffer, GfxContext, GfxFramebuffer, GfxTexture, ReleaseSync,
SyncFile, needs_render_usage,
},
ifs::{
wl_output::OutputId,
@ -2607,6 +2607,15 @@ impl MetalBackend {
ctx: &MetalRenderContext,
cursor: bool,
) -> Result<[RenderBuffer; N], MetalError> {
let mut blend_buffer = None;
if !cursor {
match ctx.gfx.acquire_blend_buffer(width, height) {
Ok(bb) => blend_buffer = Some(bb),
Err(e) => {
log::warn!("Could not create blend buffer: {}", ErrorFmt(e));
}
}
}
let mut damage_queue = ArrayVec::from(DamageQueue::new::<N>());
let mut create = || {
self.create_scanout_buffer(
@ -2618,6 +2627,7 @@ impl MetalBackend {
ctx,
cursor,
damage_queue.pop().unwrap(),
blend_buffer.clone(),
)
};
let mut array = ArrayVec::<_, N>::new();
@ -2640,6 +2650,7 @@ impl MetalBackend {
render_ctx: &MetalRenderContext,
cursor: bool,
damage_queue: DamageQueue,
blend_buffer: Option<Rc<dyn GfxBlendBuffer>>,
) -> Result<RenderBuffer, MetalError> {
let ctx = dev.ctx.get();
let dev_gfx_formats = ctx.gfx.formats();
@ -2771,6 +2782,7 @@ impl MetalBackend {
damage_queue,
dev_bo,
_render_bo: render_bo,
blend_buffer,
dev_fb,
dev_tex,
render_tex,
@ -2996,6 +3008,7 @@ pub struct RenderBuffer {
pub damage_queue: DamageQueue,
pub dev_bo: GbmBo,
pub _render_bo: Option<GbmBo>,
pub blend_buffer: Option<Rc<dyn GfxBlendBuffer>>,
// ctx = dev
// buffer location = dev
pub dev_fb: Rc<dyn GfxFramebuffer>,

View file

@ -714,7 +714,6 @@ pub trait GfxContext: Debug {
Rc::new(Dummy(size))
}
#[expect(dead_code)]
fn acquire_blend_buffer(
&self,
width: i32,