diff --git a/wgpu-hal/src/vulkan/command.rs b/wgpu-hal/src/vulkan/command.rs index ca7ad38459..d9120e6255 100644 --- a/wgpu-hal/src/vulkan/command.rs +++ b/wgpu-hal/src/vulkan/command.rs @@ -714,11 +714,16 @@ impl crate::CommandEncoder for super::CommandEncoder { ) -> Result<(), crate::DeviceError> { let mut vk_clear_values = ArrayVec::::new(); - let mut rp_key = super::RenderPassKey::default(); + let mut rp_key = super::RenderPassKey { + colors: ArrayVec::default(), + depth_stencil: None, + sample_count: desc.sample_count, + multiview: desc.multiview, + }; let mut fb_key = super::FramebufferKey { + raw_pass: vk::RenderPass::null(), attachments: ArrayVec::default(), extent: desc.extent, - sample_count: desc.sample_count, }; let caps = &self.device.private_caps; @@ -772,8 +777,6 @@ impl crate::CommandEncoder for super::CommandEncoder { assert_eq!(ds.target.view.layers, multiview); } } - rp_key.sample_count = fb_key.sample_count; - rp_key.multiview = desc.multiview; let render_area = vk::Rect2D { offset: vk::Offset2D { x: 0, y: 0 }, @@ -792,10 +795,8 @@ impl crate::CommandEncoder for super::CommandEncoder { }]; let raw_pass = self.device.make_render_pass(rp_key).unwrap(); - let raw_framebuffer = self - .device - .make_framebuffer(fb_key, raw_pass, desc.label) - .unwrap(); + fb_key.raw_pass = raw_pass; + let raw_framebuffer = self.device.make_framebuffer(fb_key).unwrap(); let vk_info = vk::RenderPassBeginInfo::default() .render_pass(raw_pass) diff --git a/wgpu-hal/src/vulkan/device.rs b/wgpu-hal/src/vulkan/device.rs index 810bea4423..7c4bec78ec 100644 --- a/wgpu-hal/src/vulkan/device.rs +++ b/wgpu-hal/src/vulkan/device.rs @@ -205,23 +205,18 @@ impl super::DeviceShared { pub fn make_framebuffer( &self, key: super::FramebufferKey, - raw_pass: vk::RenderPass, - pass_label: crate::Label, ) -> Result { Ok(match self.framebuffers.lock().entry(key) { Entry::Occupied(e) => *e.get(), Entry::Vacant(e) => { let vk_info = vk::FramebufferCreateInfo::default() - .render_pass(raw_pass) + .render_pass(e.key().raw_pass) .width(e.key().extent.width) .height(e.key().extent.height) .layers(e.key().extent.depth_or_array_layers) .attachments(&e.key().attachments); let raw = unsafe { self.raw.create_framebuffer(&vk_info, None).unwrap() }; - if let Some(label) = pass_label { - unsafe { self.set_object_name(raw, label) }; - } *e.insert(raw) } }) diff --git a/wgpu-hal/src/vulkan/mod.rs b/wgpu-hal/src/vulkan/mod.rs index b7512255e4..42e9b2c683 100644 --- a/wgpu-hal/src/vulkan/mod.rs +++ b/wgpu-hal/src/vulkan/mod.rs @@ -604,9 +604,9 @@ struct RenderPassKey { #[derive(Clone, Eq, Hash, PartialEq)] struct FramebufferKey { + raw_pass: vk::RenderPass, attachments: ArrayVec, extent: wgt::Extent3d, - sample_count: u32, } struct DeviceShared {