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> {
|
) -> Result<(), crate::DeviceError> {
|
||||||
let mut vk_clear_values =
|
let mut vk_clear_values =
|
||||||
ArrayVec::<vk::ClearValue, { super::MAX_TOTAL_ATTACHMENTS }>::new();
|
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 {
|
let mut fb_key = super::FramebufferKey {
|
||||||
|
raw_pass: vk::RenderPass::null(),
|
||||||
attachments: ArrayVec::default(),
|
attachments: ArrayVec::default(),
|
||||||
extent: desc.extent,
|
extent: desc.extent,
|
||||||
sample_count: desc.sample_count,
|
|
||||||
};
|
};
|
||||||
let caps = &self.device.private_caps;
|
let caps = &self.device.private_caps;
|
||||||
|
|
||||||
@ -772,8 +777,6 @@ impl crate::CommandEncoder for super::CommandEncoder {
|
|||||||
assert_eq!(ds.target.view.layers, multiview);
|
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 {
|
let render_area = vk::Rect2D {
|
||||||
offset: vk::Offset2D { x: 0, y: 0 },
|
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_pass = self.device.make_render_pass(rp_key).unwrap();
|
||||||
let raw_framebuffer = self
|
fb_key.raw_pass = raw_pass;
|
||||||
.device
|
let raw_framebuffer = self.device.make_framebuffer(fb_key).unwrap();
|
||||||
.make_framebuffer(fb_key, raw_pass, desc.label)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let vk_info = vk::RenderPassBeginInfo::default()
|
let vk_info = vk::RenderPassBeginInfo::default()
|
||||||
.render_pass(raw_pass)
|
.render_pass(raw_pass)
|
||||||
|
|||||||
@ -205,23 +205,18 @@ impl super::DeviceShared {
|
|||||||
pub fn make_framebuffer(
|
pub fn make_framebuffer(
|
||||||
&self,
|
&self,
|
||||||
key: super::FramebufferKey,
|
key: super::FramebufferKey,
|
||||||
raw_pass: vk::RenderPass,
|
|
||||||
pass_label: crate::Label,
|
|
||||||
) -> Result<vk::Framebuffer, crate::DeviceError> {
|
) -> Result<vk::Framebuffer, crate::DeviceError> {
|
||||||
Ok(match self.framebuffers.lock().entry(key) {
|
Ok(match self.framebuffers.lock().entry(key) {
|
||||||
Entry::Occupied(e) => *e.get(),
|
Entry::Occupied(e) => *e.get(),
|
||||||
Entry::Vacant(e) => {
|
Entry::Vacant(e) => {
|
||||||
let vk_info = vk::FramebufferCreateInfo::default()
|
let vk_info = vk::FramebufferCreateInfo::default()
|
||||||
.render_pass(raw_pass)
|
.render_pass(e.key().raw_pass)
|
||||||
.width(e.key().extent.width)
|
.width(e.key().extent.width)
|
||||||
.height(e.key().extent.height)
|
.height(e.key().extent.height)
|
||||||
.layers(e.key().extent.depth_or_array_layers)
|
.layers(e.key().extent.depth_or_array_layers)
|
||||||
.attachments(&e.key().attachments);
|
.attachments(&e.key().attachments);
|
||||||
|
|
||||||
let raw = unsafe { self.raw.create_framebuffer(&vk_info, None).unwrap() };
|
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)
|
*e.insert(raw)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -604,9 +604,9 @@ struct RenderPassKey {
|
|||||||
|
|
||||||
#[derive(Clone, Eq, Hash, PartialEq)]
|
#[derive(Clone, Eq, Hash, PartialEq)]
|
||||||
struct FramebufferKey {
|
struct FramebufferKey {
|
||||||
|
raw_pass: vk::RenderPass,
|
||||||
attachments: ArrayVec<vk::ImageView, { MAX_TOTAL_ATTACHMENTS }>,
|
attachments: ArrayVec<vk::ImageView, { MAX_TOTAL_ATTACHMENTS }>,
|
||||||
extent: wgt::Extent3d,
|
extent: wgt::Extent3d,
|
||||||
sample_count: u32,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DeviceShared {
|
struct DeviceShared {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user