[vk] fix raw_pass not being part of FramebufferKey

This commit is contained in:
teoxoy 2025-04-23 15:47:20 +02:00 committed by Teodor Tanasoaia
parent d4b46d6099
commit da8ff2a0d5
3 changed files with 11 additions and 15 deletions

View File

@ -714,11 +714,16 @@ impl crate::CommandEncoder for super::CommandEncoder {
) -> Result<(), crate::DeviceError> {
let mut vk_clear_values =
ArrayVec::<vk::ClearValue, { super::MAX_TOTAL_ATTACHMENTS }>::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)

View File

@ -205,23 +205,18 @@ impl super::DeviceShared {
pub fn make_framebuffer(
&self,
key: super::FramebufferKey,
raw_pass: vk::RenderPass,
pass_label: crate::Label,
) -> Result<vk::Framebuffer, crate::DeviceError> {
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)
}
})

View File

@ -604,9 +604,9 @@ struct RenderPassKey {
#[derive(Clone, Eq, Hash, PartialEq)]
struct FramebufferKey {
raw_pass: vk::RenderPass,
attachments: ArrayVec<vk::ImageView, { MAX_TOTAL_ATTACHMENTS }>,
extent: wgt::Extent3d,
sample_count: u32,
}
struct DeviceShared {