From fc6dda9c24450d4c86212edbd244be6a109e2bb2 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Fri, 5 Sep 2025 19:25:38 +0200 Subject: [PATCH] vulkan: elide blend buffer if blend buffer embeds into frame buffer --- src/gfx_apis/vulkan/renderer.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/gfx_apis/vulkan/renderer.rs b/src/gfx_apis/vulkan/renderer.rs index 1da9e013..9df7d71d 100644 --- a/src/gfx_apis/vulkan/renderer.rs +++ b/src/gfx_apis/vulkan/renderer.rs @@ -1894,7 +1894,21 @@ impl VulkanRenderer { Ok(()) } - fn elide_blend_buffer(&self, blend_buffer: &mut Option>) { + fn elide_blend_buffer1( + &self, + blend_buffer: &mut Option>, + bb_cd: &ColorDescription, + fb_cd: &ColorDescription, + ) { + if blend_buffer.is_none() { + return; + } + if bb_cd.embeds_into(fb_cd) { + *blend_buffer = None; + } + } + + fn elide_blend_buffer2(&self, blend_buffer: &mut Option>) { if blend_buffer.is_none() { return; } @@ -1918,8 +1932,9 @@ impl VulkanRenderer { bb_cd: &Rc, ) -> Result<(), VulkanError> { self.check_defunct()?; + self.elide_blend_buffer1(&mut blend_buffer, bb_cd, fb_cd); self.create_regions(fb, opts, clear, region, blend_buffer.as_deref())?; - self.elide_blend_buffer(&mut blend_buffer); + self.elide_blend_buffer2(&mut blend_buffer); let bb = blend_buffer.as_deref(); let buf = self.gfx_command_buffers.allocate()?; self.convert_ops(opts, bb_cd, fb_cd)?;