mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +00:00
[vk] fix raw_pass not being part of FramebufferKey
This commit is contained in:
parent
d4b46d6099
commit
da8ff2a0d5
@ -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)
|
||||
|
||||
@ -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)
|
||||
}
|
||||
})
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user