Fix cube map mip-map-levels
This commit is contained in:
parent
e76d35d8d5
commit
71ddeee80c
1 changed files with 98 additions and 80 deletions
|
@ -381,6 +381,22 @@ impl ImageBuilder {
|
|||
info.vk_image_create_info.extent.height,
|
||||
);
|
||||
|
||||
self.mip_map_levels(levels)
|
||||
}
|
||||
_ => panic!("wrong builder type in ImageBuilder"),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn mip_map_levels(mut self, levels: u32) -> Self {
|
||||
match self.builder_type {
|
||||
ImageBuilderInternalType::NewImage(ref mut info) => {
|
||||
let max_levels = Self::calc_mip_map_levels(
|
||||
info.vk_image_create_info.extent.width,
|
||||
info.vk_image_create_info.extent.height,
|
||||
);
|
||||
|
||||
debug_assert!(levels <= max_levels, "too many mip maps levels");
|
||||
|
||||
info.vk_image_create_info.mipLevels = levels;
|
||||
self.subresource_range.levelCount = levels;
|
||||
|
||||
|
@ -1276,18 +1292,19 @@ fn blit_mip_maps(
|
|||
image: &Arc<Image>,
|
||||
target_image_layout: VkImageLayout,
|
||||
) {
|
||||
let mut mip_width = image.width();
|
||||
let mut mip_height = image.height();
|
||||
|
||||
for layer in 0..image.layers() {
|
||||
// subresource information
|
||||
let mut subresource_range = VkImageSubresourceRange {
|
||||
aspectMask: VK_IMAGE_ASPECT_COLOR_BIT.into(),
|
||||
baseMipLevel: 0,
|
||||
levelCount: 1,
|
||||
baseArrayLayer: 0,
|
||||
baseArrayLayer: layer,
|
||||
layerCount: image.layers(),
|
||||
};
|
||||
|
||||
let mut mip_width = image.width();
|
||||
let mut mip_height = image.height();
|
||||
|
||||
for i in 1..image.levels() {
|
||||
let source_mip_level = i - 1;
|
||||
let target_mip_level = i;
|
||||
|
@ -1305,7 +1322,7 @@ fn blit_mip_maps(
|
|||
srcSubresource: VkImageSubresourceLayers {
|
||||
aspectMask: VK_IMAGE_ASPECT_COLOR_BIT.into(),
|
||||
mipLevel: source_mip_level,
|
||||
baseArrayLayer: 0,
|
||||
baseArrayLayer: layer,
|
||||
layerCount: 1,
|
||||
},
|
||||
srcOffsets: [
|
||||
|
@ -1319,7 +1336,7 @@ fn blit_mip_maps(
|
|||
dstSubresource: VkImageSubresourceLayers {
|
||||
aspectMask: VK_IMAGE_ASPECT_COLOR_BIT.into(),
|
||||
mipLevel: target_mip_level,
|
||||
baseArrayLayer: 0,
|
||||
baseArrayLayer: layer,
|
||||
layerCount: 1,
|
||||
},
|
||||
dstOffsets: [
|
||||
|
@ -1362,4 +1379,5 @@ fn blit_mip_maps(
|
|||
// set last level to be target layout
|
||||
subresource_range.baseMipLevel = image.levels() - 1;
|
||||
buffer_recorder.set_image_layout(image, target_image_layout, subresource_range);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue