From ed460e675504d090aa976d9d2ad274c26c00cd93 Mon Sep 17 00:00:00 2001 From: Todd York Date: Fri, 21 Jan 2022 02:43:25 +0800 Subject: [PATCH 1/4] Fix mipmap generation for arrayed images --- vulkano/src/image/immutable.rs | 86 +++++++++++++++++----------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/vulkano/src/image/immutable.rs b/vulkano/src/image/immutable.rs index 3e1e2342ca..df0fcc673a 100644 --- a/vulkano/src/image/immutable.rs +++ b/vulkano/src/image/immutable.rs @@ -127,48 +127,50 @@ fn generate_mipmaps( layout: ImageLayout, ) { for level in 1..image.mipmap_levels() { - let [xs, ys, ds] = dimensions - .mipmap_dimensions(level - 1) - .unwrap() - .width_height_depth(); - let [xd, yd, dd] = dimensions - .mipmap_dimensions(level) - .unwrap() - .width_height_depth(); - - let src = SubImage::new( - image.clone(), - level - 1, - 1, - 0, - dimensions.array_layers(), - layout, - ); - - let dst = SubImage::new( - image.clone(), - level, - 1, - 0, - dimensions.array_layers(), - layout, - ); - - cbb.blit_image( - src, //source - [0, 0, 0], //source_top_left - [xs as i32, ys as i32, ds as i32], //source_bottom_right - 0, //source_base_array_layer - level - 1, //source_mip_level - dst, //destination - [0, 0, 0], //destination_top_left - [xd as i32, yd as i32, dd as i32], //destination_bottom_right - 0, //destination_base_array_layer - level, //destination_mip_level - 1, //layer_count - Filter::Linear, //filter - ) - .expect("failed to blit a mip map to image!"); + for layer in 0..image.dimensions().array_layers() { + let [xs, ys, ds] = dimensions + .mipmap_dimensions(level - 1) + .unwrap() + .width_height_depth(); + let [xd, yd, dd] = dimensions + .mipmap_dimensions(level) + .unwrap() + .width_height_depth(); + + let src = SubImage::new( + image.clone(), + level - 1, + 1, + layer, + 1, + layout, + ); + + let dst = SubImage::new( + image.clone(), + level, + 1, + layer, + 1, + layout, + ); + + cbb.blit_image( + src, //source + [0, 0, 0], //source_top_left + [xs as i32, ys as i32, ds as i32], //source_bottom_right + layer, //source_base_array_layer + level - 1, //source_mip_level + dst, //destination + [0, 0, 0], //destination_top_left + [xd as i32, yd as i32, dd as i32], //destination_bottom_right + layer, //destination_base_array_layer + level, //destination_mip_level + 1, //layer_count + Filter::Linear, //filter + ) + .expect("failed to blit a mip map to image!"); + } } } From b54cafc4cc9b695f4e77bd166143aaa69c5a9ae5 Mon Sep 17 00:00:00 2001 From: Todd York Date: Fri, 21 Jan 2022 02:45:53 +0800 Subject: [PATCH 2/4] Add example for texture array --- examples/src/bin/texture_array/asterisk.png | Bin 0 -> 2989 bytes examples/src/bin/texture_array/main.rs | 381 ++++++++++++++++++++ examples/src/bin/texture_array/square.png | Bin 0 -> 6961 bytes examples/src/bin/texture_array/star.png | Bin 0 -> 2870 bytes 4 files changed, 381 insertions(+) create mode 100644 examples/src/bin/texture_array/asterisk.png create mode 100644 examples/src/bin/texture_array/main.rs create mode 100644 examples/src/bin/texture_array/square.png create mode 100644 examples/src/bin/texture_array/star.png diff --git a/examples/src/bin/texture_array/asterisk.png b/examples/src/bin/texture_array/asterisk.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d97d05bb9f49df1fc5eca9e84d3a4e282306ff GIT binary patch literal 2989 zcmbtWdpwi>9^cZ<(utpRrPf1-(yq;IZoiu4){tBy8J^h_yR?nXt&5HdB`c1MN_ure z91%rX5*6*2lnNcyp>nSwxvkE#)h~6bbN)DgJkR$1zTcns_w)VSwnR4<`?;tkC z$b7I!r++9Qx0W4~y(PWlg8`?&~{Pphs*YBoa3) zveiDQNl)Fm@7BB~N@_sMrWMknR9l)0Pe)FU((rOPax>TOk>`cN`n<%#dWWOJ@lWMN zXH7K)`DXi0y>2OcZh0zl>CUq7iQYS9yHctrrf0Oc?;OxvzdVz*C@0jbxB){>c=bB&~V7&A9%*GPfrkGpEO9>2;jq;r;67*s`dFWlP|I+SnF zJp|`Oo$KJsM5{}yseZ1Xeh)Q@HV00XyFnr_+{X@Lfowh;U2A|qH2)9O_g5%|6VBmnhRX_s%~VFp*pVGs^ia?n z3K1};)TV%qAUpI2MCo04gfhLJYzV#&aZ1f+3bO{xh`4VK^8G3FH5X)+e>6@A?A}_H z;1uKtk1`&I0focZ4LsW;ua-UH?hanKsdEmNGILX$)ItBxR!x@EkQ&umUfFn!Z;p2B zJVdSiZLIM5RNdS1>y_=41xZ>OkbKB{6nV`lH`%tr`fI3t?jG-oBhLEg;wI*)M)?((C_GkB&$aJjhlkp zxxwR9f0A$C75C0b^MqwiWrhQOY0>;4!<7;Cx)O!itCF^j1D*!%m`gqeiD!@NO44qg zaE>q#VrZ4u!HI)r(UuJMvIqRQn+3ahTTj1S#uh)BtH+c&AZ1~3e#5yKXX$BAOogO; z@MLSz{BqY!jd8n*jmsA50WOlKt=os=UzuOmW9a3?y^hh3l0a>AGVbjOV()bC+6hT|*x@Br{d?zZUO;N-9muxX7U!>#ye22} zV!!3}Kv#xMBl|J3XE5)>A+tx8tR1tKqE7a1vQH-2^Um>PT4D`JOGUt=i^GNKCZHP0d7t;TBH80MT$3qIXJ2ql!-ZaJ5f&d0 z43pUDF4(#Ez?SYbLfWi0`bDK6_A^CeCSoE-C{~`4>*hi$VGsQHQOTL$j`I zIf!5+q+9N)>j-)|=u-zo1iVuN4`8EW!xBs*hy4y^pI4MDE*-h#`COtioOo|#zo{(J zpN*n6Aus)_>4TBpi_K1fG_!8%k=pbubH)srka2l`q27rsb4yM3{lFbPm^#mDCrPWM z=RF`BOe;O6LweCRnz5tWuzH~TM=>PIa?B&+tA{0j z={IR zt?S~sipT#h)+J1mN+OzjYFG0YPOniEXg|sJKv^25Evs?8W2|Ql?)VbmgSzOb4%Q#^W zL${dmh3p|N(Mth?p1pQjUHe4XHlEQ2+n{ literal 0 HcmV?d00001 diff --git a/examples/src/bin/texture_array/main.rs b/examples/src/bin/texture_array/main.rs new file mode 100644 index 0000000000..2917f9009c --- /dev/null +++ b/examples/src/bin/texture_array/main.rs @@ -0,0 +1,381 @@ +// Copyright (c) 2016 The vulkano developers +// Licensed under the Apache License, Version 2.0 +// or the MIT +// license , +// at your option. All files in the project carrying such +// notice may not be copied, modified, or distributed except +// according to those terms. + +use std::io::Cursor; +use std::sync::Arc; + +use png; +use winit::event::{Event, WindowEvent}; +use winit::event_loop::{ControlFlow, EventLoop}; +use winit::window::{Window, WindowBuilder}; + +use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; +use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; +use vulkano::descriptor_set::{PersistentDescriptorSet, WriteDescriptorSet}; +use vulkano::device::{Device, DeviceExtensions, Features}; +use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; +use vulkano::format::Format; +use vulkano::image::{ + ImageDimensions, ImageUsage, ImmutableImage, MipmapsCount, SwapchainImage, view::ImageView, +}; +use vulkano::image::ImageAccess; +use vulkano::instance::Instance; +use vulkano::pipeline::{GraphicsPipeline, Pipeline, PipelineBindPoint}; +use vulkano::pipeline::graphics::color_blend::ColorBlendState; +use vulkano::pipeline::graphics::input_assembly::{InputAssemblyState, PrimitiveTopology}; +use vulkano::pipeline::graphics::vertex_input::BuffersDefinition; +use vulkano::pipeline::graphics::viewport::{Viewport, ViewportState}; +use vulkano::render_pass::{Framebuffer, RenderPass, Subpass}; +use vulkano::sampler::{Filter, Sampler, SamplerAddressMode}; +use vulkano::swapchain::{self, AcquireError, Swapchain, SwapchainCreationError}; +use vulkano::sync::{self, FlushError, GpuFuture}; +use vulkano::Version; +use vulkano_win::VkSurfaceBuild; + +fn main() { + // This example is about this: + // uniform sampler2DArray texture_array; + // And not this: + // uniform sampler2D array_of_textures[42]; + + let required_extensions = vulkano_win::required_extensions(); + let instance = Instance::new(None, Version::V1_1, &required_extensions, None).unwrap(); + + let event_loop = EventLoop::new(); + let surface = WindowBuilder::new() + .build_vk_surface(&event_loop, instance.clone()) + .unwrap(); + + let device_extensions = DeviceExtensions { + khr_swapchain: true, + ..DeviceExtensions::none() + }; + let (physical_device, queue_family) = PhysicalDevice::enumerate(&instance) + .filter(|&p| p.supported_extensions().is_superset_of(&device_extensions)) + .filter_map(|p| { + p.queue_families() + .find(|&q| q.supports_graphics() && surface.is_supported(q).unwrap_or(false)) + .map(|q| (p, q)) + }) + .min_by_key(|(p, _)| match p.properties().device_type { + PhysicalDeviceType::DiscreteGpu => 0, + PhysicalDeviceType::IntegratedGpu => 1, + PhysicalDeviceType::VirtualGpu => 2, + PhysicalDeviceType::Cpu => 3, + PhysicalDeviceType::Other => 4, + }) + .unwrap(); + + println!( + "Using device: {} (type: {:?})", + physical_device.properties().device_name, + physical_device.properties().device_type, + ); + + let (device, mut queues) = Device::new( + physical_device, + &Features::none(), + &physical_device + .required_extensions() + .union(&device_extensions), + [(queue_family, 0.5)].iter().cloned(), + ) + .unwrap(); + let queue = queues.next().unwrap(); + + let (mut swapchain, images) = { + let caps = surface.capabilities(physical_device).unwrap(); + let composite_alpha = caps.supported_composite_alpha.iter().next().unwrap(); + let format = caps.supported_formats[0].0; + let dimensions: [u32; 2] = surface.window().inner_size().into(); + + Swapchain::start(device.clone(), surface.clone()) + .num_images(caps.min_image_count) + .format(format) + .dimensions(dimensions) + .usage(ImageUsage::color_attachment()) + .sharing_mode(&queue) + .composite_alpha(composite_alpha) + .build() + .unwrap() + }; + + #[repr(C)] + #[derive(Default, Debug, Clone)] + struct Vertex { + position: [f32; 2], + } + vulkano::impl_vertex!(Vertex, position); + + let vertex_buffer = CpuAccessibleBuffer::<[Vertex]>::from_iter( + device.clone(), + BufferUsage::all(), + false, + [ + Vertex { + position: [-0.2, -0.5], + }, + Vertex { + position: [-0.5, 0.8], + }, + Vertex { + position: [0.4, -0.5], + }, + Vertex { + position: [0.5, 0.2], + }, + ] + .iter() + .cloned(), + ) + .unwrap(); + + let vs = vs::load(device.clone()).unwrap(); + let fs = fs::load(device.clone()).unwrap(); + + let render_pass = vulkano::single_pass_renderpass!(device.clone(), + attachments: { + color: { + load: Clear, + store: Store, + format: swapchain.format(), + samples: 1, + } + }, + pass: { + color: [color], + depth_stencil: {} + } + ) + .unwrap(); + + let (texture, tex_future) = { + let image_array_data: Vec<_> = vec![include_bytes!("square.png").to_vec(), include_bytes!("star.png").to_vec(), include_bytes!("asterisk.png").to_vec()] + .into_iter().flat_map(|png_bytes| { + let cursor = Cursor::new(png_bytes); + let decoder = png::Decoder::new(cursor); + let mut reader = decoder.read_info().unwrap(); + let info = reader.info(); + let mut image_data = Vec::new(); + image_data.resize((info.width * info.height * 4) as usize, 0); + reader.next_frame(&mut image_data).unwrap(); + image_data + }).collect(); + let dimensions = ImageDimensions::Dim2d { + width: 128, + height: 128, + array_layers: 3, + }; // TODO replace with your actual image array dimensions + let (image, future) = ImmutableImage::from_iter( + image_array_data.iter().cloned(), + dimensions, + MipmapsCount::Log2, + Format::R8G8B8A8_SRGB, + queue.clone(), + ) + .unwrap(); + (ImageView::new(image).unwrap(), future) + }; + + let sampler = Sampler::simple_repeat_linear(device.clone()).unwrap(); + + let subpass = Subpass::from(render_pass.clone(), 0).unwrap(); + let pipeline = GraphicsPipeline::start() + .vertex_input_state(BuffersDefinition::new().vertex::()) + .vertex_shader(vs.entry_point("main").unwrap(), ()) + .input_assembly_state(InputAssemblyState::new().topology(PrimitiveTopology::TriangleStrip)) + .viewport_state(ViewportState::viewport_dynamic_scissor_irrelevant()) + .fragment_shader(fs.entry_point("main").unwrap(), ()) + .color_blend_state(ColorBlendState::new(subpass.num_color_attachments()).blend_alpha()) + .render_pass(subpass) + .build(device.clone()) + .unwrap(); + + let layout = pipeline.layout().descriptor_set_layouts().get(0).unwrap(); + let set = PersistentDescriptorSet::new( + layout.clone(), + [WriteDescriptorSet::image_view_sampler( + 0, + texture.clone(), + sampler.clone(), + )], + ) + .unwrap(); + + let mut viewport = Viewport { + origin: [0.0, 0.0], + dimensions: [0.0, 0.0], + depth_range: 0.0..1.0, + }; + let mut framebuffers = window_size_dependent_setup(&images, render_pass.clone(), &mut viewport); + + let mut recreate_swapchain = false; + let mut previous_frame_end = Some(tex_future.boxed()); + + event_loop.run(move |event, _, control_flow| match event { + Event::WindowEvent { + event: WindowEvent::CloseRequested, + .. + } => { + *control_flow = ControlFlow::Exit; + } + Event::WindowEvent { + event: WindowEvent::Resized(_), + .. + } => { + recreate_swapchain = true; + } + Event::RedrawEventsCleared => { + previous_frame_end.as_mut().unwrap().cleanup_finished(); + + if recreate_swapchain { + let dimensions: [u32; 2] = surface.window().inner_size().into(); + let (new_swapchain, new_images) = + match swapchain.recreate().dimensions(dimensions).build() { + Ok(r) => r, + Err(SwapchainCreationError::UnsupportedDimensions) => return, + Err(e) => panic!("Failed to recreate swapchain: {:?}", e), + }; + + swapchain = new_swapchain; + framebuffers = + window_size_dependent_setup(&new_images, render_pass.clone(), &mut viewport); + recreate_swapchain = false; + } + + let (image_num, suboptimal, acquire_future) = + match swapchain::acquire_next_image(swapchain.clone(), None) { + Ok(r) => r, + Err(AcquireError::OutOfDate) => { + recreate_swapchain = true; + return; + } + Err(e) => panic!("Failed to acquire next image: {:?}", e), + }; + + if suboptimal { + recreate_swapchain = true; + } + + let clear_values = vec![[0.0, 0.0, 1.0, 1.0].into()]; + let mut builder = AutoCommandBufferBuilder::primary( + device.clone(), + queue.family(), + CommandBufferUsage::OneTimeSubmit, + ) + .unwrap(); + builder + .begin_render_pass( + framebuffers[image_num].clone(), + SubpassContents::Inline, + clear_values, + ) + .unwrap() + .set_viewport(0, [viewport.clone()]) + .bind_pipeline_graphics(pipeline.clone()) + .bind_descriptor_sets( + PipelineBindPoint::Graphics, + pipeline.layout().clone(), + 0, + set.clone(), + ) + .bind_vertex_buffers(0, vertex_buffer.clone()) + .draw(vertex_buffer.len() as u32, 3, 0, 0) + .unwrap() + .end_render_pass() + .unwrap(); + let command_buffer = builder.build().unwrap(); + + let future = previous_frame_end + .take() + .unwrap() + .join(acquire_future) + .then_execute(queue.clone(), command_buffer) + .unwrap() + .then_swapchain_present(queue.clone(), swapchain.clone(), image_num) + .then_signal_fence_and_flush(); + + match future { + Ok(future) => { + previous_frame_end = Some(future.boxed()); + } + Err(FlushError::OutOfDate) => { + recreate_swapchain = true; + previous_frame_end = Some(sync::now(device.clone()).boxed()); + } + Err(e) => { + println!("Failed to flush future: {:?}", e); + previous_frame_end = Some(sync::now(device.clone()).boxed()); + } + } + } + _ => (), + }); +} + +/// This method is called once during initialization, then again whenever the window is resized +fn window_size_dependent_setup( + images: &[Arc>], + render_pass: Arc, + viewport: &mut Viewport, +) -> Vec> { + let dimensions = images[0].dimensions().width_height(); + viewport.dimensions = [dimensions[0] as f32, dimensions[1] as f32]; + + images + .iter() + .map(|image| { + let view = ImageView::new(image.clone()).unwrap(); + Framebuffer::start(render_pass.clone()) + .add(view) + .unwrap() + .build() + .unwrap() + }) + .collect::>() +} + +mod vs { + vulkano_shaders::shader! { + ty: "vertex", + src: " +#version 450 + +layout(location = 0) in vec2 position; +layout(location = 0) out vec2 tex_coords; +layout(location = 1) out uint layer; + +const float x[4] = float[](0.0, 0.0, 1.0, 1.0); +const float y[4] = float[](0.0, 1.0, 0.0, 1.0); + +void main() { + gl_Position = vec4(position, 0.0, 1.0); + tex_coords = vec2(x[gl_VertexIndex], y[gl_VertexIndex]); + layer = gl_InstanceIndex; +}" + } +} + +mod fs { + vulkano_shaders::shader! { + ty: "fragment", + src: " +#version 450 + +layout(location = 0) in vec2 tex_coords; +layout(location = 1) flat in uint layer; +layout(location = 0) out vec4 f_color; + +layout(set = 0, binding = 0) uniform sampler2DArray tex; + +void main() { + f_color = texture(tex, vec3(tex_coords, layer)); +}" + } +} diff --git a/examples/src/bin/texture_array/square.png b/examples/src/bin/texture_array/square.png new file mode 100644 index 0000000000000000000000000000000000000000..be36a83339121d9a167b49f60e39bc03c21c0d59 GIT binary patch literal 6961 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 J|IIVz{{V%>fdv2n literal 0 HcmV?d00001 diff --git a/examples/src/bin/texture_array/star.png b/examples/src/bin/texture_array/star.png new file mode 100644 index 0000000000000000000000000000000000000000..421af120716cbbaee78c3b1ef0f535c6c8718ba1 GIT binary patch literal 2870 zcmbVMdpMNq79U$Vk~W2u$m~&3%vEl)4Y@|l3%ewbr{%*%9`xlTwm`Kp^X^ zt;`+3?=j&cDFMFk7!g|`5V1(AnVB8iVXrCF+QLj1ZJ?_Q#~{!Uh{pNA^OZK@CbF@{ zau$=3VsI_3D05APv(VyVtBKWz*QxZP!(K`6gXrm; zOYNH!#;3ga4fN1-_vDw0r7=L4)0JET*R_3}4fi0I^`Jwge?8sVVG?+u{eo_W&3gOoL`1SR1mUS=XX4G5t?eFbtX_9PhT|@53+c#)3IZ?#1U#&`ltVG_%eK46u2oA1%-oKx76d#bR-Dk=EWQhCue zU0F_^Ud+{3J!Q{-zZ$e9yewdDw5cp2zJ6|1N{>VMTUk?8J|nrLPHZ=$?oVfHo3Yys zJ4$dPN7TF$sxY`z2}V}iZW*|qUG1BheD1?$@w?qad4)uV>aA@xykW)YH-1xj+lHsW znyg`3xv?RTwQ|Bo43e6@2?AMFLUnTGxZ-WGBnAyZBr|*f1eeAH*${}KF_%ds`2!rN z58y|o<6!S9Yhh3-83%LG!K3g@Gk`+13Sj|`Ap|E|;okQfp>1;Kj#IlAtz$US%Ob(SnhYB@` zK8!#P4h92p=x1?&OI=Z?vp*jnOaxMhAkhdE@@qPW>iZMA5c!VIq%b%PHig0ba)58P z_yT|D2&V7HE?gq>M`S$yztd^7Z;rv{SOkHI_?*;lV)|91M-o{~PM|Gt`U`z+gFoZ3TdCA}3+)u+}u9AK*eI zb0{lnD}XIP_xlbJMi&q$EUz=23Z4hEqUO4S;b3|gJ%ktX7Tg~NirR9~Jskpr?YD6l_KXgCJ#gu-AkI#_L#CQ2WRLangD z`#>ggi2sW(>}seXsE@~Et*C4cgT)gqEw{QOaAet9HUp@l9*06jmBtcD!X)8fOcsM2 zNCL>B%|W?kl+Ezv1QS_+i62;G9L&VmmkOqn2elJ+FBFYHqY%5l^$4Z_pxV#RhWs2E zQh4kB3e6DtUGRn?!dKT6^jls7uRl0PkY5G~XnYw(03Dn^EO5{~`wj07&aX6Ua}y`7 zV7%AcHpyjE<77FUM%CW4k0kC&mb?H&YMxCCP)yo#<2bwrQGR^8*B(>JNuSnd2vpBy z#gLo&9Ggy0yyEuO55ARGIwd@bC!?B-1AFckSM1cr>Z#mdo62nUI_-bHzW39@w*9wj zYqmXl*T(K=dr6CnCglJBx{gZAcCa7f-=H==ZcrbI%I@LzZ7985W{AU>bzXvGquCFEe5Iu9BIi1fGVZPE31Ga}r88^YvCPD(S84oixjOTMUA{eiWO{M^wC<7onkLq5MfSqk;^H>5DNx*bC?4@Tb<$*D zM`D-Gzkbosx_|nF>01h>loX3h)ChB9IcoHbIvuz*c&NSnf}U*iNNU^0z@&f3(DiGb zu4{U>zq#fuC8hj4t$+3VljOka9V1s4bq{)H%3UnyEcty5ospkOrEdm~nkxJ2NrpeU z)AXP;^WDg0^7Kn%AlqJ?y;%sa{4-ViM60wQ~q!G+OvkmkH@{TjPaYb)J>o zv;W3ILPA@ID(b|8K6N-=s$p)~l>JAN#$cSH=2E=5E*`EUIls8N@@PSc&e5v8D9v3h zr?*SZ4mNjaZaqhHn!nEp4TZjtZ|@v@ER%j4-k3Sneml{o@x`i>kJue>>RN0LU z?@ZahCeKX0VpQ=;X}4l$RQ2;GF6e^iy(t&54`yekhFCoaRpXi?wyLXmycw}^zf?-m zbZJiAUFH6)D8n#){XwQy$T6~2XUeMw8TanZ|EV4`*eIB-xmw+=XUx#kn}fZ7aV{q2 z*>$Q#5n-Zg5*HnO=7irIYka~}>p-|8V#C?JS@G|cjNAh}jo|s0NR9g}-%qK$wyl3I zKW!QHB<6$1Uea5G=$wVQxJN^SPh(4pYAwK%@gazwBO@BZiz$uksRbm{z( zIsfS5R$5tMAfK-8I?$XPR(XEDVj+(o?&(wfbWd7AL60j}OKT~_+v{GS)XO*{+&m$A zNon6&OqJr9ipQ1eJomGGl literal 0 HcmV?d00001 From 3ad55717c4fb4e4b1598ad0883a7bfc8a3cba75b Mon Sep 17 00:00:00 2001 From: Todd York Date: Fri, 21 Jan 2022 03:46:07 +0800 Subject: [PATCH 3/4] Change ImageView constructor to explicitly require ImageViewType --- examples/src/bin/buffer-pool.rs | 4 ++-- examples/src/bin/clear_attachments.rs | 3 ++- examples/src/bin/deferred/frame/system.rs | 14 +++++------ examples/src/bin/deferred/main.rs | 6 ++--- examples/src/bin/dynamic-local-size.rs | 3 ++- examples/src/bin/image-self-copy-blit/main.rs | 5 ++-- examples/src/bin/image/main.rs | 5 ++-- examples/src/bin/immutable-sampler/main.rs | 5 ++-- examples/src/bin/indirect.rs | 4 ++-- examples/src/bin/instancing.rs | 4 ++-- .../src/bin/interactive_fractal/renderer.rs | 8 +++---- examples/src/bin/msaa-renderpass.rs | 7 +++--- examples/src/bin/multi-window.rs | 4 ++-- examples/src/bin/multiview.rs | 4 ++-- examples/src/bin/occlusion-query.rs | 7 +++--- examples/src/bin/push-descriptors/main.rs | 5 ++-- examples/src/bin/runtime-shader/main.rs | 4 ++-- examples/src/bin/runtime_array/main.rs | 7 +++--- examples/src/bin/teapot/main.rs | 6 ++--- examples/src/bin/tessellation.rs | 4 ++-- examples/src/bin/texture_array/main.rs | 5 ++-- examples/src/bin/triangle.rs | 4 ++-- vulkano/src/image/view.rs | 17 +++---------- vulkano/src/render_pass/compat_atch.rs | 8 +++---- vulkano/src/render_pass/framebuffer.rs | 24 +++++++++---------- 25 files changed, 83 insertions(+), 84 deletions(-) diff --git a/examples/src/bin/buffer-pool.rs b/examples/src/bin/buffer-pool.rs index 1b427a9452..2f9577aa70 100644 --- a/examples/src/bin/buffer-pool.rs +++ b/examples/src/bin/buffer-pool.rs @@ -25,7 +25,7 @@ use vulkano::buffer::CpuBufferPool; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -332,7 +332,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/clear_attachments.rs b/examples/src/bin/clear_attachments.rs index 5c9ac08aa2..f1aa84e3e1 100644 --- a/examples/src/bin/clear_attachments.rs +++ b/examples/src/bin/clear_attachments.rs @@ -25,6 +25,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -289,7 +290,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/deferred/frame/system.rs b/examples/src/bin/deferred/frame/system.rs index a7097d7d07..d543b07a1b 100644 --- a/examples/src/bin/deferred/frame/system.rs +++ b/examples/src/bin/deferred/frame/system.rs @@ -20,7 +20,7 @@ use vulkano::command_buffer::{ }; use vulkano::device::Queue; use vulkano::format::Format; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::AttachmentImage; use vulkano::image::ImageAccess; use vulkano::image::ImageUsage; @@ -159,7 +159,7 @@ impl FrameSystem { Format::A2B10G10R10_UNORM_PACK32, atch_usage, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); let normals_buffer = ImageView::new( @@ -169,7 +169,7 @@ impl FrameSystem { Format::R16G16B16A16_SFLOAT, atch_usage, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); let depth_buffer = ImageView::new( @@ -179,7 +179,7 @@ impl FrameSystem { Format::D16_UNORM, atch_usage, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -254,7 +254,7 @@ impl FrameSystem { Format::A2B10G10R10_UNORM_PACK32, atch_usage, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); self.normals_buffer = ImageView::new( @@ -264,7 +264,7 @@ impl FrameSystem { Format::R16G16B16A16_SFLOAT, atch_usage, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); self.depth_buffer = ImageView::new( @@ -274,7 +274,7 @@ impl FrameSystem { Format::D16_UNORM, atch_usage, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); } diff --git a/examples/src/bin/deferred/main.rs b/examples/src/bin/deferred/main.rs index 54ac0299a7..0861629d92 100644 --- a/examples/src/bin/deferred/main.rs +++ b/examples/src/bin/deferred/main.rs @@ -32,7 +32,7 @@ use cgmath::SquareMatrix; use cgmath::Vector3; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::ImageUsage; use vulkano::instance::Instance; use vulkano::swapchain; @@ -113,7 +113,7 @@ fn main() { .unwrap(); let images = images .into_iter() - .map(|image| ImageView::new(image.clone()).unwrap()) + .map(|image| ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap()) .collect::>(); (swapchain, images) }; @@ -152,7 +152,7 @@ fn main() { }; let new_images = new_images .into_iter() - .map(|image| ImageView::new(image.clone()).unwrap()) + .map(|image| ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap()) .collect::>(); swapchain = new_swapchain; diff --git a/examples/src/bin/dynamic-local-size.rs b/examples/src/bin/dynamic-local-size.rs index 274637de65..b9333eeb12 100644 --- a/examples/src/bin/dynamic-local-size.rs +++ b/examples/src/bin/dynamic-local-size.rs @@ -24,6 +24,7 @@ use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; use vulkano::format::Format; use vulkano::image::{view::ImageView, ImageDimensions, StorageImage}; +use vulkano::image::view::ImageViewType; use vulkano::instance::{Instance, InstanceExtensions}; use vulkano::pipeline::{ComputePipeline, Pipeline, PipelineBindPoint}; use vulkano::sync; @@ -193,7 +194,7 @@ fn main() { Some(queue.family()), ) .unwrap(); - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); let layout = pipeline.layout().descriptor_set_layouts().get(0).unwrap(); let set = PersistentDescriptorSet::new( diff --git a/examples/src/bin/image-self-copy-blit/main.rs b/examples/src/bin/image-self-copy-blit/main.rs index e1e57ef0ec..7e0da16d30 100644 --- a/examples/src/bin/image-self-copy-blit/main.rs +++ b/examples/src/bin/image-self-copy-blit/main.rs @@ -34,6 +34,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -238,7 +239,7 @@ fn main() { let command_buffer = builder.build().unwrap(); ( - ImageView::new(image).unwrap(), + ImageView::new(image, ImageViewType::Dim2d).unwrap(), command_buffer.execute(queue.clone()).unwrap(), ) }; @@ -395,7 +396,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/image/main.rs b/examples/src/bin/image/main.rs index 283cffe765..f26b2800fa 100644 --- a/examples/src/bin/image/main.rs +++ b/examples/src/bin/image/main.rs @@ -35,6 +35,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -174,7 +175,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image).unwrap(), future) + (ImageView::new(image, ImageViewType::Dim2d).unwrap(), future) }; let sampler = Sampler::start(device.clone()) @@ -329,7 +330,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/immutable-sampler/main.rs b/examples/src/bin/immutable-sampler/main.rs index afa893ae66..b38517abb7 100644 --- a/examples/src/bin/immutable-sampler/main.rs +++ b/examples/src/bin/immutable-sampler/main.rs @@ -44,6 +44,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { let required_extensions = vulkano_win::required_extensions(); @@ -180,7 +181,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image).unwrap(), future) + (ImageView::new(image, ImageViewType::Dim2d).unwrap(), future) }; let sampler = Sampler::start(device.clone()) @@ -337,7 +338,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/indirect.rs b/examples/src/bin/indirect.rs index c005175b1b..5e56e353eb 100644 --- a/examples/src/bin/indirect.rs +++ b/examples/src/bin/indirect.rs @@ -39,7 +39,7 @@ use vulkano::command_buffer::{ use vulkano::descriptor_set::{PersistentDescriptorSet, WriteDescriptorSet}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -415,7 +415,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/instancing.rs b/examples/src/bin/instancing.rs index 5be95b9abd..0ddea082ad 100644 --- a/examples/src/bin/instancing.rs +++ b/examples/src/bin/instancing.rs @@ -23,7 +23,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -382,7 +382,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/interactive_fractal/renderer.rs b/examples/src/bin/interactive_fractal/renderer.rs index 916a24429d..084d3991fc 100644 --- a/examples/src/bin/interactive_fractal/renderer.rs +++ b/examples/src/bin/interactive_fractal/renderer.rs @@ -16,7 +16,7 @@ use std::sync::Arc; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features, Queue}; use vulkano::format::Format; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ AttachmentImage, ImageAccess, ImageUsage, ImageViewAbstract, SampleCount, SwapchainImage, }; @@ -211,7 +211,7 @@ impl Renderer { .unwrap(); let images = images .into_iter() - .map(|image| ImageView::new(image).unwrap()) + .map(|image| ImageView::new(image, ImageViewType::Dim2d).unwrap()) .collect::>(); (swap_chain, images) } @@ -309,7 +309,7 @@ impl Renderer { ..ImageUsage::none() }, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); self.interim_image_views @@ -427,7 +427,7 @@ impl Renderer { self.swap_chain = new_swapchain; let new_images = new_images .into_iter() - .map(|image| ImageView::new(image).unwrap()) + .map(|image| ImageView::new(image, ImageViewType::Dim2d).unwrap()) .collect::>(); self.final_views = new_images; // Resize images that follow swapchain size diff --git a/examples/src/bin/msaa-renderpass.rs b/examples/src/bin/msaa-renderpass.rs index dc0251deda..4e57bccf62 100644 --- a/examples/src/bin/msaa-renderpass.rs +++ b/examples/src/bin/msaa-renderpass.rs @@ -79,6 +79,7 @@ use vulkano::format::Format; use vulkano::image::{ view::ImageView, AttachmentImage, ImageDimensions, SampleCount, StorageImage, }; +use vulkano::image::view::ImageViewType; use vulkano::instance::Instance; use vulkano::pipeline::graphics::vertex_input::BuffersDefinition; use vulkano::pipeline::graphics::viewport::{Viewport, ViewportState}; @@ -140,7 +141,7 @@ fn main() { SampleCount::Sample4, Format::R8G8B8A8_UNORM, ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -153,10 +154,10 @@ fn main() { array_layers: 1, }, Format::R8G8B8A8_UNORM, - Some(queue.family()), + Some(queue.family()) ) .unwrap(); - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); // In this example, we are going to perform the *resolve* (ie. turning a multisampled image // into a non-multisampled one) as part of the render pass. This is the preferred method of diff --git a/examples/src/bin/multi-window.rs b/examples/src/bin/multi-window.rs index 4bcea652de..e63df83b42 100644 --- a/examples/src/bin/multi-window.rs +++ b/examples/src/bin/multi-window.rs @@ -22,7 +22,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -411,7 +411,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/multiview.rs b/examples/src/bin/multiview.rs index 994ec384a2..7c999eb43f 100644 --- a/examples/src/bin/multiview.rs +++ b/examples/src/bin/multiview.rs @@ -22,7 +22,7 @@ use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, Subp use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; use vulkano::format::Format; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ ImageAccess, ImageCreateFlags, ImageDimensions, ImageLayout, ImageUsage, SampleCount, StorageImage, @@ -129,7 +129,7 @@ fn main() { ) .unwrap(); - let image_view = ImageView::new(image.clone()).unwrap(); + let image_view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); #[repr(C)] #[derive(Default, Debug, Clone)] diff --git a/examples/src/bin/occlusion-query.rs b/examples/src/bin/occlusion-query.rs index 95f64885c4..9d002c01c5 100644 --- a/examples/src/bin/occlusion-query.rs +++ b/examples/src/bin/occlusion-query.rs @@ -34,6 +34,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { let required_extensions = vulkano_win::required_extensions(); @@ -451,16 +452,16 @@ fn window_size_dependent_setup( depth_stencil_attachment: true, transient_attachment: true, ..ImageUsage::none() - }, + } ) - .unwrap(), + .unwrap(), ImageViewType::Dim2d ) .unwrap(); images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/push-descriptors/main.rs b/examples/src/bin/push-descriptors/main.rs index d006155d6e..9dac2544d8 100644 --- a/examples/src/bin/push-descriptors/main.rs +++ b/examples/src/bin/push-descriptors/main.rs @@ -35,6 +35,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { let required_extensions = vulkano_win::required_extensions(); @@ -172,7 +173,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image).unwrap(), future) + (ImageView::new(image, ImageViewType::Dim2d).unwrap(), future) }; let sampler = Sampler::start(device.clone()) @@ -319,7 +320,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/runtime-shader/main.rs b/examples/src/bin/runtime-shader/main.rs index 69334c4a7e..0e1aca7b89 100644 --- a/examples/src/bin/runtime-shader/main.rs +++ b/examples/src/bin/runtime-shader/main.rs @@ -27,7 +27,7 @@ use vulkano::buffer::{BufferUsage, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -311,7 +311,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/runtime_array/main.rs b/examples/src/bin/runtime_array/main.rs index b64cc25cba..0e09a622f1 100644 --- a/examples/src/bin/runtime_array/main.rs +++ b/examples/src/bin/runtime_array/main.rs @@ -38,6 +38,7 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; +use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -235,7 +236,7 @@ fn main() { .unwrap() .0; - ImageView::new(image).unwrap() + ImageView::new(image, ImageViewType::Dim2d).unwrap() }; let vulkano_texture = { @@ -263,7 +264,7 @@ fn main() { .unwrap() .0; - ImageView::new(image).unwrap() + ImageView::new(image, ImageViewType::Dim2d).unwrap() }; let sampler = Sampler::start(device.clone()) @@ -447,7 +448,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/teapot/main.rs b/examples/src/bin/teapot/main.rs index 49efb87aff..a75d412ae3 100644 --- a/examples/src/bin/teapot/main.rs +++ b/examples/src/bin/teapot/main.rs @@ -19,7 +19,7 @@ use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; use vulkano::format::Format; use vulkano::image::attachment::AttachmentImage; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::depth_stencil::DepthStencilState; @@ -310,14 +310,14 @@ fn window_size_dependent_setup( let dimensions = images[0].dimensions().width_height(); let depth_buffer = ImageView::new( - AttachmentImage::transient(device.clone(), dimensions, Format::D16_UNORM).unwrap(), + AttachmentImage::transient(device.clone(), dimensions, Format::D16_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); let framebuffers = images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/tessellation.rs b/examples/src/bin/tessellation.rs index cc81981cc8..d67f37bce6 100644 --- a/examples/src/bin/tessellation.rs +++ b/examples/src/bin/tessellation.rs @@ -23,7 +23,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::{InputAssemblyState, PrimitiveTopology}; @@ -412,7 +412,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/texture_array/main.rs b/examples/src/bin/texture_array/main.rs index 2917f9009c..0901199582 100644 --- a/examples/src/bin/texture_array/main.rs +++ b/examples/src/bin/texture_array/main.rs @@ -25,6 +25,7 @@ use vulkano::image::{ ImageDimensions, ImageUsage, ImmutableImage, MipmapsCount, SwapchainImage, view::ImageView, }; use vulkano::image::ImageAccess; +use vulkano::image::view::ImageViewType; use vulkano::instance::Instance; use vulkano::pipeline::{GraphicsPipeline, Pipeline, PipelineBindPoint}; use vulkano::pipeline::graphics::color_blend::ColorBlendState; @@ -180,7 +181,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image).unwrap(), future) + (ImageView::new(image, ImageViewType::Dim2dArray).unwrap(), future) }; let sampler = Sampler::simple_repeat_linear(device.clone()).unwrap(); @@ -331,7 +332,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/triangle.rs b/examples/src/bin/triangle.rs index 0dfe4231d6..a4ef44c13f 100644 --- a/examples/src/bin/triangle.rs +++ b/examples/src/bin/triangle.rs @@ -21,7 +21,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::ImageView; +use vulkano::image::view::{ImageView, ImageViewType}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -539,7 +539,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone()).unwrap(); + let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/vulkano/src/image/view.rs b/vulkano/src/image/view.rs index 17c9c25454..4aaff17595 100644 --- a/vulkano/src/image/view.rs +++ b/vulkano/src/image/view.rs @@ -52,23 +52,12 @@ where { /// Creates a default `ImageView`. Equivalent to `ImageView::start(image).build()`. #[inline] - pub fn new(image: Arc) -> Result>, ImageViewCreationError> { - Self::start(image).build() + pub fn new(image: Arc, ty: ImageViewType) -> Result>, ImageViewCreationError> { + Self::start(image, ty).build() } /// Begins building an `ImageView`. - pub fn start(image: Arc) -> ImageViewBuilder { - let ty = match image.dimensions() { - ImageDimensions::Dim1d { - array_layers: 1, .. - } => ImageViewType::Dim1d, - ImageDimensions::Dim1d { .. } => ImageViewType::Dim1dArray, - ImageDimensions::Dim2d { - array_layers: 1, .. - } => ImageViewType::Dim2d, - ImageDimensions::Dim2d { .. } => ImageViewType::Dim2dArray, - ImageDimensions::Dim3d { .. } => ImageViewType::Dim3d, - }; + pub fn start(image: Arc, ty: ImageViewType) -> ImageViewBuilder { let mipmap_levels = 0..image.mipmap_levels(); let array_layers = 0..image.dimensions().array_layers(); diff --git a/vulkano/src/render_pass/compat_atch.rs b/vulkano/src/render_pass/compat_atch.rs index 082a9dc073..3cfd41ed04 100644 --- a/vulkano/src/render_pass/compat_atch.rs +++ b/vulkano/src/render_pass/compat_atch.rs @@ -180,7 +180,7 @@ mod tests { use super::ensure_image_view_compatible; use super::IncompatibleRenderPassAttachmentError; use crate::format::Format; - use crate::image::view::ImageView; + use crate::image::view::{ImageView, ImageViewType}; use crate::image::AttachmentImage; use crate::render_pass::RenderPassDesc; @@ -205,7 +205,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -233,7 +233,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -252,7 +252,7 @@ mod tests { let rp = RenderPassDesc::empty(); let view = ImageView::new( - AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); diff --git a/vulkano/src/render_pass/framebuffer.rs b/vulkano/src/render_pass/framebuffer.rs index 17fb5f2d5f..7d879ba92b 100644 --- a/vulkano/src/render_pass/framebuffer.rs +++ b/vulkano/src/render_pass/framebuffer.rs @@ -485,7 +485,7 @@ impl From for FramebufferCreationError { mod tests { use crate::format::Format; use crate::image::attachment::AttachmentImage; - use crate::image::view::ImageView; + use crate::image::view::{ImageView, ImageViewType}; use crate::render_pass::Framebuffer; use crate::render_pass::FramebufferCreationError; use crate::render_pass::RenderPass; @@ -511,7 +511,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [1024, 768], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [1024, 768], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); let _ = Framebuffer::start(render_pass) @@ -554,7 +554,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [1024, 768], Format::R8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [1024, 768], Format::R8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -587,7 +587,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [600, 600], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [600, 600], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -619,7 +619,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [512, 700], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [512, 700], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -662,11 +662,11 @@ mod tests { .unwrap(); let a = ImageView::new( - AttachmentImage::new(device.clone(), [512, 512], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [512, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); let b = ImageView::new( - AttachmentImage::new(device.clone(), [512, 513], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [512, 513], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -709,11 +709,11 @@ mod tests { .unwrap(); let a = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); let b = ImageView::new( - AttachmentImage::new(device.clone(), [512, 128], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [512, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -758,7 +758,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); @@ -797,11 +797,11 @@ mod tests { .unwrap(); let a = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); let b = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d ) .unwrap(); From 7823173599d4b2ad63f34724911f2bce967f7a10 Mon Sep 17 00:00:00 2001 From: Todd York Date: Fri, 21 Jan 2022 05:59:00 +0800 Subject: [PATCH 4/4] Revert "Change ImageView constructor to explicitly require ImageViewType" This reverts commit 3ad55717c4fb4e4b1598ad0883a7bfc8a3cba75b. --- examples/src/bin/buffer-pool.rs | 4 ++-- examples/src/bin/clear_attachments.rs | 3 +-- examples/src/bin/deferred/frame/system.rs | 14 +++++------ examples/src/bin/deferred/main.rs | 6 ++--- examples/src/bin/dynamic-local-size.rs | 3 +-- examples/src/bin/image-self-copy-blit/main.rs | 5 ++-- examples/src/bin/image/main.rs | 5 ++-- examples/src/bin/immutable-sampler/main.rs | 5 ++-- examples/src/bin/indirect.rs | 4 ++-- examples/src/bin/instancing.rs | 4 ++-- .../src/bin/interactive_fractal/renderer.rs | 8 +++---- examples/src/bin/msaa-renderpass.rs | 7 +++--- examples/src/bin/multi-window.rs | 4 ++-- examples/src/bin/multiview.rs | 4 ++-- examples/src/bin/occlusion-query.rs | 7 +++--- examples/src/bin/push-descriptors/main.rs | 5 ++-- examples/src/bin/runtime-shader/main.rs | 4 ++-- examples/src/bin/runtime_array/main.rs | 7 +++--- examples/src/bin/teapot/main.rs | 6 ++--- examples/src/bin/tessellation.rs | 4 ++-- examples/src/bin/texture_array/main.rs | 5 ++-- examples/src/bin/triangle.rs | 4 ++-- vulkano/src/image/view.rs | 17 ++++++++++--- vulkano/src/render_pass/compat_atch.rs | 8 +++---- vulkano/src/render_pass/framebuffer.rs | 24 +++++++++---------- 25 files changed, 84 insertions(+), 83 deletions(-) diff --git a/examples/src/bin/buffer-pool.rs b/examples/src/bin/buffer-pool.rs index 2f9577aa70..1b427a9452 100644 --- a/examples/src/bin/buffer-pool.rs +++ b/examples/src/bin/buffer-pool.rs @@ -25,7 +25,7 @@ use vulkano::buffer::CpuBufferPool; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -332,7 +332,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/clear_attachments.rs b/examples/src/bin/clear_attachments.rs index f1aa84e3e1..5c9ac08aa2 100644 --- a/examples/src/bin/clear_attachments.rs +++ b/examples/src/bin/clear_attachments.rs @@ -25,7 +25,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -290,7 +289,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/deferred/frame/system.rs b/examples/src/bin/deferred/frame/system.rs index d543b07a1b..a7097d7d07 100644 --- a/examples/src/bin/deferred/frame/system.rs +++ b/examples/src/bin/deferred/frame/system.rs @@ -20,7 +20,7 @@ use vulkano::command_buffer::{ }; use vulkano::device::Queue; use vulkano::format::Format; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::AttachmentImage; use vulkano::image::ImageAccess; use vulkano::image::ImageUsage; @@ -159,7 +159,7 @@ impl FrameSystem { Format::A2B10G10R10_UNORM_PACK32, atch_usage, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); let normals_buffer = ImageView::new( @@ -169,7 +169,7 @@ impl FrameSystem { Format::R16G16B16A16_SFLOAT, atch_usage, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); let depth_buffer = ImageView::new( @@ -179,7 +179,7 @@ impl FrameSystem { Format::D16_UNORM, atch_usage, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); @@ -254,7 +254,7 @@ impl FrameSystem { Format::A2B10G10R10_UNORM_PACK32, atch_usage, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); self.normals_buffer = ImageView::new( @@ -264,7 +264,7 @@ impl FrameSystem { Format::R16G16B16A16_SFLOAT, atch_usage, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); self.depth_buffer = ImageView::new( @@ -274,7 +274,7 @@ impl FrameSystem { Format::D16_UNORM, atch_usage, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); } diff --git a/examples/src/bin/deferred/main.rs b/examples/src/bin/deferred/main.rs index 0861629d92..54ac0299a7 100644 --- a/examples/src/bin/deferred/main.rs +++ b/examples/src/bin/deferred/main.rs @@ -32,7 +32,7 @@ use cgmath::SquareMatrix; use cgmath::Vector3; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::ImageUsage; use vulkano::instance::Instance; use vulkano::swapchain; @@ -113,7 +113,7 @@ fn main() { .unwrap(); let images = images .into_iter() - .map(|image| ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap()) + .map(|image| ImageView::new(image.clone()).unwrap()) .collect::>(); (swapchain, images) }; @@ -152,7 +152,7 @@ fn main() { }; let new_images = new_images .into_iter() - .map(|image| ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap()) + .map(|image| ImageView::new(image.clone()).unwrap()) .collect::>(); swapchain = new_swapchain; diff --git a/examples/src/bin/dynamic-local-size.rs b/examples/src/bin/dynamic-local-size.rs index b9333eeb12..274637de65 100644 --- a/examples/src/bin/dynamic-local-size.rs +++ b/examples/src/bin/dynamic-local-size.rs @@ -24,7 +24,6 @@ use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; use vulkano::format::Format; use vulkano::image::{view::ImageView, ImageDimensions, StorageImage}; -use vulkano::image::view::ImageViewType; use vulkano::instance::{Instance, InstanceExtensions}; use vulkano::pipeline::{ComputePipeline, Pipeline, PipelineBindPoint}; use vulkano::sync; @@ -194,7 +193,7 @@ fn main() { Some(queue.family()), ) .unwrap(); - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); let layout = pipeline.layout().descriptor_set_layouts().get(0).unwrap(); let set = PersistentDescriptorSet::new( diff --git a/examples/src/bin/image-self-copy-blit/main.rs b/examples/src/bin/image-self-copy-blit/main.rs index 7e0da16d30..e1e57ef0ec 100644 --- a/examples/src/bin/image-self-copy-blit/main.rs +++ b/examples/src/bin/image-self-copy-blit/main.rs @@ -34,7 +34,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -239,7 +238,7 @@ fn main() { let command_buffer = builder.build().unwrap(); ( - ImageView::new(image, ImageViewType::Dim2d).unwrap(), + ImageView::new(image).unwrap(), command_buffer.execute(queue.clone()).unwrap(), ) }; @@ -396,7 +395,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/image/main.rs b/examples/src/bin/image/main.rs index f26b2800fa..283cffe765 100644 --- a/examples/src/bin/image/main.rs +++ b/examples/src/bin/image/main.rs @@ -35,7 +35,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -175,7 +174,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image, ImageViewType::Dim2d).unwrap(), future) + (ImageView::new(image).unwrap(), future) }; let sampler = Sampler::start(device.clone()) @@ -330,7 +329,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/immutable-sampler/main.rs b/examples/src/bin/immutable-sampler/main.rs index b38517abb7..afa893ae66 100644 --- a/examples/src/bin/immutable-sampler/main.rs +++ b/examples/src/bin/immutable-sampler/main.rs @@ -44,7 +44,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { let required_extensions = vulkano_win::required_extensions(); @@ -181,7 +180,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image, ImageViewType::Dim2d).unwrap(), future) + (ImageView::new(image).unwrap(), future) }; let sampler = Sampler::start(device.clone()) @@ -338,7 +337,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/indirect.rs b/examples/src/bin/indirect.rs index 5e56e353eb..c005175b1b 100644 --- a/examples/src/bin/indirect.rs +++ b/examples/src/bin/indirect.rs @@ -39,7 +39,7 @@ use vulkano::command_buffer::{ use vulkano::descriptor_set::{PersistentDescriptorSet, WriteDescriptorSet}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -415,7 +415,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/instancing.rs b/examples/src/bin/instancing.rs index 0ddea082ad..5be95b9abd 100644 --- a/examples/src/bin/instancing.rs +++ b/examples/src/bin/instancing.rs @@ -23,7 +23,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -382,7 +382,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/interactive_fractal/renderer.rs b/examples/src/bin/interactive_fractal/renderer.rs index 084d3991fc..916a24429d 100644 --- a/examples/src/bin/interactive_fractal/renderer.rs +++ b/examples/src/bin/interactive_fractal/renderer.rs @@ -16,7 +16,7 @@ use std::sync::Arc; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features, Queue}; use vulkano::format::Format; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ AttachmentImage, ImageAccess, ImageUsage, ImageViewAbstract, SampleCount, SwapchainImage, }; @@ -211,7 +211,7 @@ impl Renderer { .unwrap(); let images = images .into_iter() - .map(|image| ImageView::new(image, ImageViewType::Dim2d).unwrap()) + .map(|image| ImageView::new(image).unwrap()) .collect::>(); (swap_chain, images) } @@ -309,7 +309,7 @@ impl Renderer { ..ImageUsage::none() }, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); self.interim_image_views @@ -427,7 +427,7 @@ impl Renderer { self.swap_chain = new_swapchain; let new_images = new_images .into_iter() - .map(|image| ImageView::new(image, ImageViewType::Dim2d).unwrap()) + .map(|image| ImageView::new(image).unwrap()) .collect::>(); self.final_views = new_images; // Resize images that follow swapchain size diff --git a/examples/src/bin/msaa-renderpass.rs b/examples/src/bin/msaa-renderpass.rs index 4e57bccf62..dc0251deda 100644 --- a/examples/src/bin/msaa-renderpass.rs +++ b/examples/src/bin/msaa-renderpass.rs @@ -79,7 +79,6 @@ use vulkano::format::Format; use vulkano::image::{ view::ImageView, AttachmentImage, ImageDimensions, SampleCount, StorageImage, }; -use vulkano::image::view::ImageViewType; use vulkano::instance::Instance; use vulkano::pipeline::graphics::vertex_input::BuffersDefinition; use vulkano::pipeline::graphics::viewport::{Viewport, ViewportState}; @@ -141,7 +140,7 @@ fn main() { SampleCount::Sample4, Format::R8G8B8A8_UNORM, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); @@ -154,10 +153,10 @@ fn main() { array_layers: 1, }, Format::R8G8B8A8_UNORM, - Some(queue.family()) + Some(queue.family()), ) .unwrap(); - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); // In this example, we are going to perform the *resolve* (ie. turning a multisampled image // into a non-multisampled one) as part of the render pass. This is the preferred method of diff --git a/examples/src/bin/multi-window.rs b/examples/src/bin/multi-window.rs index e63df83b42..4bcea652de 100644 --- a/examples/src/bin/multi-window.rs +++ b/examples/src/bin/multi-window.rs @@ -22,7 +22,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -411,7 +411,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/multiview.rs b/examples/src/bin/multiview.rs index 7c999eb43f..994ec384a2 100644 --- a/examples/src/bin/multiview.rs +++ b/examples/src/bin/multiview.rs @@ -22,7 +22,7 @@ use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, Subp use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; use vulkano::format::Format; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ ImageAccess, ImageCreateFlags, ImageDimensions, ImageLayout, ImageUsage, SampleCount, StorageImage, @@ -129,7 +129,7 @@ fn main() { ) .unwrap(); - let image_view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let image_view = ImageView::new(image.clone()).unwrap(); #[repr(C)] #[derive(Default, Debug, Clone)] diff --git a/examples/src/bin/occlusion-query.rs b/examples/src/bin/occlusion-query.rs index 9d002c01c5..95f64885c4 100644 --- a/examples/src/bin/occlusion-query.rs +++ b/examples/src/bin/occlusion-query.rs @@ -34,7 +34,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { let required_extensions = vulkano_win::required_extensions(); @@ -452,16 +451,16 @@ fn window_size_dependent_setup( depth_stencil_attachment: true, transient_attachment: true, ..ImageUsage::none() - } + }, ) - .unwrap(), ImageViewType::Dim2d + .unwrap(), ) .unwrap(); images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/push-descriptors/main.rs b/examples/src/bin/push-descriptors/main.rs index 9dac2544d8..d006155d6e 100644 --- a/examples/src/bin/push-descriptors/main.rs +++ b/examples/src/bin/push-descriptors/main.rs @@ -35,7 +35,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { let required_extensions = vulkano_win::required_extensions(); @@ -173,7 +172,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image, ImageViewType::Dim2d).unwrap(), future) + (ImageView::new(image).unwrap(), future) }; let sampler = Sampler::start(device.clone()) @@ -320,7 +319,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/runtime-shader/main.rs b/examples/src/bin/runtime-shader/main.rs index 0e1aca7b89..69334c4a7e 100644 --- a/examples/src/bin/runtime-shader/main.rs +++ b/examples/src/bin/runtime-shader/main.rs @@ -27,7 +27,7 @@ use vulkano::buffer::{BufferUsage, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -311,7 +311,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/runtime_array/main.rs b/examples/src/bin/runtime_array/main.rs index 0e09a622f1..b64cc25cba 100644 --- a/examples/src/bin/runtime_array/main.rs +++ b/examples/src/bin/runtime_array/main.rs @@ -38,7 +38,6 @@ use vulkano_win::VkSurfaceBuild; use winit::event::{Event, WindowEvent}; use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; -use vulkano::image::view::ImageViewType; fn main() { // The start of this example is exactly the same as `triangle`. You should read the @@ -236,7 +235,7 @@ fn main() { .unwrap() .0; - ImageView::new(image, ImageViewType::Dim2d).unwrap() + ImageView::new(image).unwrap() }; let vulkano_texture = { @@ -264,7 +263,7 @@ fn main() { .unwrap() .0; - ImageView::new(image, ImageViewType::Dim2d).unwrap() + ImageView::new(image).unwrap() }; let sampler = Sampler::start(device.clone()) @@ -448,7 +447,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/teapot/main.rs b/examples/src/bin/teapot/main.rs index a75d412ae3..49efb87aff 100644 --- a/examples/src/bin/teapot/main.rs +++ b/examples/src/bin/teapot/main.rs @@ -19,7 +19,7 @@ use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; use vulkano::format::Format; use vulkano::image::attachment::AttachmentImage; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::depth_stencil::DepthStencilState; @@ -310,14 +310,14 @@ fn window_size_dependent_setup( let dimensions = images[0].dimensions().width_height(); let depth_buffer = ImageView::new( - AttachmentImage::transient(device.clone(), dimensions, Format::D16_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::transient(device.clone(), dimensions, Format::D16_UNORM).unwrap(), ) .unwrap(); let framebuffers = images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/tessellation.rs b/examples/src/bin/tessellation.rs index d67f37bce6..cc81981cc8 100644 --- a/examples/src/bin/tessellation.rs +++ b/examples/src/bin/tessellation.rs @@ -23,7 +23,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::{InputAssemblyState, PrimitiveTopology}; @@ -412,7 +412,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/texture_array/main.rs b/examples/src/bin/texture_array/main.rs index 0901199582..2917f9009c 100644 --- a/examples/src/bin/texture_array/main.rs +++ b/examples/src/bin/texture_array/main.rs @@ -25,7 +25,6 @@ use vulkano::image::{ ImageDimensions, ImageUsage, ImmutableImage, MipmapsCount, SwapchainImage, view::ImageView, }; use vulkano::image::ImageAccess; -use vulkano::image::view::ImageViewType; use vulkano::instance::Instance; use vulkano::pipeline::{GraphicsPipeline, Pipeline, PipelineBindPoint}; use vulkano::pipeline::graphics::color_blend::ColorBlendState; @@ -181,7 +180,7 @@ fn main() { queue.clone(), ) .unwrap(); - (ImageView::new(image, ImageViewType::Dim2dArray).unwrap(), future) + (ImageView::new(image).unwrap(), future) }; let sampler = Sampler::simple_repeat_linear(device.clone()).unwrap(); @@ -332,7 +331,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/examples/src/bin/triangle.rs b/examples/src/bin/triangle.rs index a4ef44c13f..0dfe4231d6 100644 --- a/examples/src/bin/triangle.rs +++ b/examples/src/bin/triangle.rs @@ -21,7 +21,7 @@ use vulkano::buffer::{BufferUsage, CpuAccessibleBuffer, TypedBufferAccess}; use vulkano::command_buffer::{AutoCommandBufferBuilder, CommandBufferUsage, SubpassContents}; use vulkano::device::physical::{PhysicalDevice, PhysicalDeviceType}; use vulkano::device::{Device, DeviceExtensions, Features}; -use vulkano::image::view::{ImageView, ImageViewType}; +use vulkano::image::view::ImageView; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::Instance; use vulkano::pipeline::graphics::input_assembly::InputAssemblyState; @@ -539,7 +539,7 @@ fn window_size_dependent_setup( images .iter() .map(|image| { - let view = ImageView::new(image.clone(), ImageViewType::Dim2d).unwrap(); + let view = ImageView::new(image.clone()).unwrap(); Framebuffer::start(render_pass.clone()) .add(view) .unwrap() diff --git a/vulkano/src/image/view.rs b/vulkano/src/image/view.rs index 4aaff17595..17c9c25454 100644 --- a/vulkano/src/image/view.rs +++ b/vulkano/src/image/view.rs @@ -52,12 +52,23 @@ where { /// Creates a default `ImageView`. Equivalent to `ImageView::start(image).build()`. #[inline] - pub fn new(image: Arc, ty: ImageViewType) -> Result>, ImageViewCreationError> { - Self::start(image, ty).build() + pub fn new(image: Arc) -> Result>, ImageViewCreationError> { + Self::start(image).build() } /// Begins building an `ImageView`. - pub fn start(image: Arc, ty: ImageViewType) -> ImageViewBuilder { + pub fn start(image: Arc) -> ImageViewBuilder { + let ty = match image.dimensions() { + ImageDimensions::Dim1d { + array_layers: 1, .. + } => ImageViewType::Dim1d, + ImageDimensions::Dim1d { .. } => ImageViewType::Dim1dArray, + ImageDimensions::Dim2d { + array_layers: 1, .. + } => ImageViewType::Dim2d, + ImageDimensions::Dim2d { .. } => ImageViewType::Dim2dArray, + ImageDimensions::Dim3d { .. } => ImageViewType::Dim3d, + }; let mipmap_levels = 0..image.mipmap_levels(); let array_layers = 0..image.dimensions().array_layers(); diff --git a/vulkano/src/render_pass/compat_atch.rs b/vulkano/src/render_pass/compat_atch.rs index 3cfd41ed04..082a9dc073 100644 --- a/vulkano/src/render_pass/compat_atch.rs +++ b/vulkano/src/render_pass/compat_atch.rs @@ -180,7 +180,7 @@ mod tests { use super::ensure_image_view_compatible; use super::IncompatibleRenderPassAttachmentError; use crate::format::Format; - use crate::image::view::{ImageView, ImageViewType}; + use crate::image::view::ImageView; use crate::image::AttachmentImage; use crate::render_pass::RenderPassDesc; @@ -205,7 +205,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -233,7 +233,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -252,7 +252,7 @@ mod tests { let rp = RenderPassDesc::empty(); let view = ImageView::new( - AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device, [128, 128], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); diff --git a/vulkano/src/render_pass/framebuffer.rs b/vulkano/src/render_pass/framebuffer.rs index 7d879ba92b..17fb5f2d5f 100644 --- a/vulkano/src/render_pass/framebuffer.rs +++ b/vulkano/src/render_pass/framebuffer.rs @@ -485,7 +485,7 @@ impl From for FramebufferCreationError { mod tests { use crate::format::Format; use crate::image::attachment::AttachmentImage; - use crate::image::view::{ImageView, ImageViewType}; + use crate::image::view::ImageView; use crate::render_pass::Framebuffer; use crate::render_pass::FramebufferCreationError; use crate::render_pass::RenderPass; @@ -511,7 +511,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [1024, 768], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [1024, 768], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); let _ = Framebuffer::start(render_pass) @@ -554,7 +554,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [1024, 768], Format::R8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [1024, 768], Format::R8_UNORM).unwrap(), ) .unwrap(); @@ -587,7 +587,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [600, 600], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [600, 600], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -619,7 +619,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [512, 700], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [512, 700], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -662,11 +662,11 @@ mod tests { .unwrap(); let a = ImageView::new( - AttachmentImage::new(device.clone(), [512, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [512, 512], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); let b = ImageView::new( - AttachmentImage::new(device.clone(), [512, 513], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [512, 513], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -709,11 +709,11 @@ mod tests { .unwrap(); let a = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); let b = ImageView::new( - AttachmentImage::new(device.clone(), [512, 128], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [512, 128], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -758,7 +758,7 @@ mod tests { .unwrap(); let view = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); @@ -797,11 +797,11 @@ mod tests { .unwrap(); let a = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap(); let b = ImageView::new( - AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ImageViewType::Dim2d + AttachmentImage::new(device.clone(), [256, 512], Format::R8G8B8A8_UNORM).unwrap(), ) .unwrap();