diff --git a/command/src/buffer/encoder.rs b/command/src/buffer/encoder.rs index c062bf3a..834fbb94 100644 --- a/command/src/buffer/encoder.rs +++ b/command/src/buffer/encoder.rs @@ -106,7 +106,7 @@ where self.raw, rendy_core::hal::buffer::IndexBufferView { buffer: buffer, - offset, + range: rendy_core::hal::buffer::SubRange { offset, size: None }, index_type, }, ) @@ -137,7 +137,12 @@ where rendy_core::hal::command::CommandBuffer::bind_vertex_buffers( self.raw, first_binding, - buffers, + buffers.into_iter().map(|(buffer, offset)| { + ( + buffer, + rendy_core::hal::buffer::SubRange { offset, size: None }, + ) + }), ) } diff --git a/command/src/pool.rs b/command/src/pool.rs index 78bc8c33..a742506c 100644 --- a/command/src/pool.rs +++ b/command/src/pool.rs @@ -77,7 +77,9 @@ where { let level = L::default(); - let buffers = unsafe { self.raw.allocate_vec(count, level.raw_level()) }; + let mut buffers: Vec<_> = Vec::new(); + + unsafe { self.raw.allocate(count, level.raw_level(), &mut buffers) }; buffers .into_iter() diff --git a/core/Cargo.toml b/core/Cargo.toml index c87fd701..b6bcce1d 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -26,9 +26,9 @@ vulkan = ["gfx-backend-vulkan"] no-slow-safety-checks = [] [dependencies] -gfx-hal = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4" } -gfx-backend-empty = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4", optional = true } -gfx-backend-gl = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4", features = ["glutin"], optional = true } +gfx-hal = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7" } +gfx-backend-empty = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7", optional = true } +gfx-backend-gl = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7", features = ["glutin"], default_features = false, optional = true } lazy_static = "1.0" log = "0.4" parking_lot = "0.9" @@ -37,10 +37,10 @@ thread_profiler = "0.3" raw-window-handle = "0.3" [target.'cfg(all(target_os = "windows", not(target_arch = "wasm32")))'.dependencies] -gfx-backend-dx12 = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4", optional = true } +gfx-backend-dx12 = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7", optional = true } [target.'cfg(any(all(not(target_arch = "wasm32"), target_os = "macos"), all(target_arch = "aarch64", target_os = "ios")))'.dependencies] -gfx-backend-metal = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4", optional = true } +gfx-backend-metal = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7", optional = true } [target.'cfg(all(any(target_os = "windows", all(unix, not(any(target_os = "macos", target_os = "ios")))), not(target_arch = "wasm32")))'.dependencies] -gfx-backend-vulkan = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4", features = ["x11"], optional = true } +gfx-backend-vulkan = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7", features = ["x11"], optional = true } diff --git a/descriptor/Cargo.toml b/descriptor/Cargo.toml index 56caae8b..f2375a91 100644 --- a/descriptor/Cargo.toml +++ b/descriptor/Cargo.toml @@ -11,7 +11,7 @@ categories = ["rendering"] description = "Rendy's descriptor allocator" [dependencies] -gfx-hal = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4" } +gfx-hal = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7" } log = "0.4" relevant = { version = "0.4", features = ["log"] } smallvec = "1.0" diff --git a/descriptor/src/allocator.rs b/descriptor/src/allocator.rs index 9e9d9053..248832e6 100644 --- a/descriptor/src/allocator.rs +++ b/descriptor/src/allocator.rs @@ -75,10 +75,9 @@ unsafe fn allocate_from_pool( allocation: &mut SmallVec<[B::DescriptorSet; 1]>, ) -> Result<(), OutOfMemory> { let sets_were = allocation.len(); - raw.allocate_sets(std::iter::repeat(layout).take(count as usize), allocation) + raw.allocate(std::iter::repeat(layout).take(count as usize), allocation) .map_err(|err| match err { - AllocationError::Host => OutOfMemory::Host, - AllocationError::Device => OutOfMemory::Device, + AllocationError::OutOfMemory(oom) => oom, err => { // We check pool for free descriptors and sets before calling this function, // so it can't be exhausted. @@ -182,7 +181,7 @@ where while count > 0 { let size = self.new_pool_size(count); - let pool_ranges = layout_ranges * size; + let pool_ranges = layout_ranges.clone() * size; log::trace!( "Create new pool with {} sets and {:?} descriptors", size, @@ -301,9 +300,15 @@ where let bucket = self .buckets - .entry(layout_ranges) + .entry(layout_ranges.clone()) .or_insert_with(|| DescriptorBucket::new()); - match bucket.allocate(device, layout, layout_ranges, count, &mut self.allocation) { + match bucket.allocate( + device, + layout, + layout_ranges.clone(), + count, + &mut self.allocation, + ) { Ok(()) => { extend.extend( Iterator::zip( @@ -312,7 +317,7 @@ where ) .map(|(pool, set)| DescriptorSet { raw: set, - ranges: layout_ranges, + ranges: layout_ranges.clone(), pool, }), ); diff --git a/descriptor/src/ranges.rs b/descriptor/src/ranges.rs index a91bebdd..d936ab1d 100644 --- a/descriptor/src/ranges.rs +++ b/descriptor/src/ranges.rs @@ -21,7 +21,7 @@ const DESCRIPTOR_TYPES: [DescriptorType; DESCRIPTOR_TYPES_COUNT] = [ }, }, DescriptorType::Image { - ty: ImageDescriptorType::Storage, + ty: ImageDescriptorType::Storage { read_only: false }, }, DescriptorType::Buffer { ty: BufferDescriptorType::Storage { read_only: false }, @@ -70,7 +70,7 @@ fn descriptor_type_index(ty: &DescriptorType) -> usize { }, } => 2, DescriptorType::Image { - ty: ImageDescriptorType::Storage, + ty: ImageDescriptorType::Storage { read_only: _ }, } => 3, DescriptorType::Buffer { ty: BufferDescriptorType::Storage { read_only: _ }, diff --git a/graph/src/node/mod.rs b/graph/src/node/mod.rs index f3b41678..44d7e542 100644 --- a/graph/src/node/mod.rs +++ b/graph/src/node/mod.rs @@ -282,7 +282,7 @@ pub enum NodeBuildError { /// Mismatched or unsupported queue family. QueueFamily(FamilyId), /// Failed to create an imate view. - View(rendy_core::hal::image::ViewError), + View(rendy_core::hal::image::ViewCreationError), /// Failed to create a pipeline. Pipeline(rendy_core::hal::pso::CreationError), /// Failed to create a swap chain. @@ -523,7 +523,10 @@ pub fn gfx_acquire_barriers<'a, 'b, B: Backend>( .get_buffer(buffer.id) .expect("Buffer does not exist") .raw(), - range: Some(buffer.range.start)..Some(buffer.range.end), + range: rendy_core::hal::buffer::SubRange { + offset: buffer.range.start, + size: Some(buffer.range.start - buffer.range.end), + }, } }) }) @@ -574,7 +577,10 @@ pub fn gfx_release_barriers<'a, B: Backend>( .get_buffer(buffer.id) .expect("Buffer does not exist") .raw(), - range: Some(buffer.range.start)..Some(buffer.range.end), + range: rendy_core::hal::buffer::SubRange { + offset: buffer.range.start, + size: Some(buffer.range.end - buffer.range.start), + }, } }) }) diff --git a/graph/src/node/render/pass.rs b/graph/src/node/render/pass.rs index 2ba521b7..e7a22f39 100644 --- a/graph/src/node/render/pass.rs +++ b/graph/src/node/render/pass.rs @@ -241,6 +241,10 @@ where /// Add sub-pass to the render-pass. pub fn add_subpass(&mut self, subpass: SubpassBuilder) -> &mut Self { + // Since GFX only allows us to pass a u8 for the subpass index, we need + // to make sure that the subpass count never exceeds 255. + assert!(self.subpasses.len() < 255); + self.subpasses.push(subpass); self } @@ -858,7 +862,7 @@ where framebuffer_width, framebuffer_height, rendy_core::hal::pass::Subpass { - index, + index: index as u8, main_pass: &render_pass, }, buffers, @@ -1168,7 +1172,7 @@ where queue.id(), index, rendy_core::hal::pass::Subpass { - index: subpass_index, + index: subpass_index as u8, main_pass: &render_pass, }, aux, @@ -1219,7 +1223,7 @@ where pass_encoder.reborrow(), index, rendy_core::hal::pass::Subpass { - index: subpass_index, + index: subpass_index as u8, main_pass: &render_pass, }, aux, @@ -1350,7 +1354,7 @@ where queue.id(), index, rendy_core::hal::pass::Subpass { - index: subpass_index, + index: subpass_index as u8, main_pass: &render_pass, }, aux, @@ -1392,7 +1396,7 @@ where pass_encoder.reborrow(), index, rendy_core::hal::pass::Subpass { - index: subpass_index, + index: subpass_index as u8, main_pass: &render_pass, }, aux, diff --git a/init/Cargo.toml b/init/Cargo.toml index ffc4cab8..e23cec19 100644 --- a/init/Cargo.toml +++ b/init/Cargo.toml @@ -23,6 +23,6 @@ rendy-command = { version = "0.5.1", path = "../command" } rendy-factory = { version = "0.5.1", path = "../factory" } rendy-core = { version = "0.5.1", path = "../core" } rendy-wsi = { version = "0.5.1", path = "../wsi" } -winit = { version = "0.20.0-alpha4", optional = true, features = ["web-sys"] } +winit = { version = "0.21.0", optional = true, features = ["web-sys"] } log = "0.4" smallvec = "1.0" diff --git a/memory/Cargo.toml b/memory/Cargo.toml index eeb4cbc7..5f5d5487 100644 --- a/memory/Cargo.toml +++ b/memory/Cargo.toml @@ -14,7 +14,7 @@ description = "Rendy's memory manager" serde-1 = ["serde", "gfx-hal/serde"] [dependencies] -gfx-hal = { git = "https://github.com/gfx-rs/gfx", rev = "3641183231f16877d4ea2fbdb2ff208ce736d6c4" } +gfx-hal = { git = "https://github.com/gfx-rs/gfx", rev = "6d10d21788fffa6a7ca17888c8d3a4b6265442e7" } log = "0.4" hibitset = {version = "0.6", default-features = false} relevant = { version = "0.4", features = ["log"] } diff --git a/memory/src/allocator/dedicated.rs b/memory/src/allocator/dedicated.rs index 1204f38b..6da4bc99 100644 --- a/memory/src/allocator/dedicated.rs +++ b/memory/src/allocator/dedicated.rs @@ -96,7 +96,13 @@ where )) } else { self.unmap(device); - let ptr = device.map_memory(self.memory.raw(), mapping_range.clone())?; + let ptr = device.map_memory( + self.memory.raw(), + gfx_hal::memory::Segment { + offset: mapping_range.start, + size: Some(mapping_range.end - mapping_range.start), + }, + )?; let ptr = NonNull::new(ptr).expect("Memory mapping shouldn't return nullptr"); let mapping = MappedRange::from_raw(&self.memory, ptr, mapping_range, requested_range); diff --git a/memory/src/allocator/dynamic.rs b/memory/src/allocator/dynamic.rs index 7739e43c..2e874cb1 100644 --- a/memory/src/allocator/dynamic.rs +++ b/memory/src/allocator/dynamic.rs @@ -281,7 +281,13 @@ where .contains(gfx_hal::memory::Properties::CPU_VISIBLE) { log::trace!("Map new memory object"); - match device.map_memory(&raw, 0..chunk_size) { + match device.map_memory( + &raw, + gfx_hal::memory::Segment { + offset: 0, + size: Some(chunk_size), + }, + ) { Ok(mapping) => Some(NonNull::new_unchecked(mapping)), Err(gfx_hal::device::MapError::OutOfMemory(error)) => { device.free_memory(raw); diff --git a/memory/src/allocator/linear.rs b/memory/src/allocator/linear.rs index d453d1e3..d45586a0 100644 --- a/memory/src/allocator/linear.rs +++ b/memory/src/allocator/linear.rs @@ -297,7 +297,13 @@ where let (memory, ptr) = unsafe { let raw = device.allocate_memory(self.memory_type, self.linear_size)?; - let ptr = match device.map_memory(&raw, 0..self.linear_size) { + let ptr = match device.map_memory( + &raw, + gfx_hal::memory::Segment { + offset: 0, + size: Some(self.linear_size), + }, + ) { Ok(ptr) => NonNull::new_unchecked(ptr), Err(gfx_hal::device::MapError::OutOfMemory(error)) => { device.free_memory(raw); diff --git a/memory/src/mapping/mod.rs b/memory/src/mapping/mod.rs index d75f1b83..95cfbe10 100644 --- a/memory/src/mapping/mod.rs +++ b/memory/src/mapping/mod.rs @@ -181,7 +181,13 @@ where self.mapping_range.clone(), aligned_sub_range.clone() )); - device.invalidate_mapped_memory_ranges(Some((self.memory.raw(), aligned_sub_range)))?; + device.invalidate_mapped_memory_ranges(Some(( + self.memory.raw(), + gfx_hal::memory::Segment { + offset: aligned_sub_range.start, + size: Some(aligned_sub_range.end - aligned_sub_range.start), + }, + )))?; } let slice = mapped_slice::(ptr, size); @@ -231,7 +237,13 @@ where )); Some(move || { device - .flush_mapped_memory_ranges(Some((memory.raw(), aligned_sub_range))) + .flush_mapped_memory_ranges(Some(( + memory.raw(), + gfx_hal::memory::Segment { + offset: aligned_sub_range.start, + size: Some(aligned_sub_range.end - aligned_sub_range.start), + }, + ))) .expect("Should flush successfully"); }) } else { diff --git a/rendy/examples/meshes/main.rs b/rendy/examples/meshes/main.rs index e7f8fca5..e00a636e 100644 --- a/rendy/examples/meshes/main.rs +++ b/rendy/examples/meshes/main.rs @@ -13,6 +13,7 @@ use { graph::{render::*, GraphBuilder, GraphContext, NodeBuffer, NodeImage}, hal::{self, adapter::PhysicalDevice as _, device::Device as _}, init::winit::{ + dpi::Size as DpiSize, event::{Event, WindowEvent}, event_loop::{ControlFlow, EventLoop}, window::WindowBuilder, @@ -230,8 +231,10 @@ where array_offset: 0, descriptors: Some(hal::pso::Descriptor::Buffer( buffer.raw(), - Some(uniform_offset(index, align)) - ..Some(uniform_offset(index, align) + UNIFORM_SIZE), + hal::buffer::SubRange { + offset: uniform_offset(index, align), + size: Some(UNIFORM_SIZE), + }, )), })); sets.push(set); @@ -369,7 +372,7 @@ fn main() { let event_loop = EventLoop::new(); let window = WindowBuilder::new() - .with_inner_size((960, 640).into()) + .with_inner_size(DpiSize::Logical((960, 640).into())) .with_title("Rendy example"); let config: Config = Default::default(); @@ -379,7 +382,7 @@ fn main() { let mut graph_builder = GraphBuilder::<_, Scene<_>>::new(); - let size = window.inner_size().to_physical(window.hidpi_factor()); + let size = window.inner_size(); let window_kind = hal::image::Kind::D2(size.width as u32, size.height as u32, 1, 1); let aspect = size.width / size.height; @@ -500,7 +503,7 @@ fn main() { WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit, _ => {} }, - Event::EventsCleared => { + Event::MainEventsCleared => { factory.maintain(&mut families); if let Some(ref mut graph) = graph { graph.run(&mut factory, &mut families, &scene); diff --git a/rendy/examples/quads/main.rs b/rendy/examples/quads/main.rs index e000b403..fe630702 100644 --- a/rendy/examples/quads/main.rs +++ b/rendy/examples/quads/main.rs @@ -21,6 +21,7 @@ use rendy::{ }, hal::{self, device::Device as _}, init::winit::{ + dpi::Size as DpiSize, event::{Event, WindowEvent}, event_loop::{ControlFlow, EventLoop}, window::{Window, WindowBuilder}, @@ -148,7 +149,12 @@ where sets: vec![rendy::graph::render::SetLayout { bindings: vec![hal::pso::DescriptorSetLayoutBinding { binding: 0, - ty: hal::pso::DescriptorType::StorageBuffer, + ty: hal::pso::DescriptorType::Buffer { + ty: hal::pso::BufferDescriptorType::Storage { read_only: false }, + format: hal::pso::BufferDescriptorFormat::Structured { + dynamic_offset: false, + }, + }, count: 1, stage_flags: hal::pso::ShaderStageFlags::VERTEX, immutable_samplers: false, @@ -274,7 +280,10 @@ where array_offset: 0, descriptors: std::iter::once(hal::pso::Descriptor::Buffer( posvelbuff.raw(), - Some(0)..Some(posvelbuff.size() as u64), + hal::buffer::SubRange { + offset: 0, + size: Some(posvelbuff.size()), + }, )), })) } @@ -443,7 +452,12 @@ where factory .create_descriptor_set_layout(vec![hal::pso::DescriptorSetLayoutBinding { binding: 0, - ty: hal::pso::DescriptorType::StorageBuffer, + ty: hal::pso::DescriptorType::Buffer { + ty: hal::pso::BufferDescriptorType::Storage { read_only: false }, + format: hal::pso::BufferDescriptorFormat::Structured { + dynamic_offset: false, + }, + }, count: 1, stage_flags: hal::pso::ShaderStageFlags::COMPUTE, immutable_samplers: false, @@ -495,7 +509,10 @@ where array_offset: 0, descriptors: std::iter::once(hal::pso::Descriptor::Buffer( posvelbuff.raw(), - Some(0)..Some(posvelbuff.size()), + hal::buffer::SubRange { + offset: 0, + size: None, + }, )), })); } @@ -556,7 +573,7 @@ fn build_graph( let posvel = graph_builder.create_buffer(QUADS as u64 * std::mem::size_of::<[f32; 4]>() as u64); - let size = window.inner_size().to_physical(window.hidpi_factor()); + let size = window.inner_size(); let window_kind = hal::image::Kind::D2(size.width as u32, size.height as u32, 1, 1); let depth = graph_builder.create_image( @@ -605,7 +622,7 @@ fn main() { let config: Config = Default::default(); let event_loop = EventLoop::new(); let window = WindowBuilder::new() - .with_inner_size((960, 640).into()) + .with_inner_size(DpiSize::Logical((960, 640).into())) .with_title("Rendy example"); let rendy = AnyWindowedRendy::init_auto(&config, window, &event_loop).unwrap(); @@ -631,7 +648,7 @@ fn main() { } _ => {} }, - Event::EventsCleared => { + Event::MainEventsCleared => { factory.maintain(&mut families); if let Some(ref mut graph) = graph { graph.run(&mut factory, &mut families, &()); diff --git a/rendy/examples/source_shaders/main.rs b/rendy/examples/source_shaders/main.rs index 5d1ef037..4b1ce1a4 100644 --- a/rendy/examples/source_shaders/main.rs +++ b/rendy/examples/source_shaders/main.rs @@ -12,6 +12,7 @@ use rendy::{ }, hal, init::winit::{ + dpi::Size as DpiSize, event::{Event, WindowEvent}, event_loop::{ControlFlow, EventLoop}, window::WindowBuilder, @@ -236,7 +237,7 @@ fn run( WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit, _ => {} }, - Event::EventsCleared => { + Event::MainEventsCleared => { factory.maintain(&mut families); if let Some(ref mut graph) = graph { graph.run(&mut factory, &mut families, &()); @@ -276,7 +277,7 @@ fn main() { let event_loop = EventLoop::new(); let window = WindowBuilder::new() .with_title("Rendy example") - .with_inner_size((960, 640).into()); + .with_inner_size(DpiSize::Logical((960, 640).into())); let rendy = AnyWindowedRendy::init_auto(&config, window, &event_loop).unwrap(); rendy::with_any_windowed_rendy!((rendy) @@ -284,7 +285,7 @@ fn main() { let mut graph_builder = GraphBuilder::<_, ()>::new(); - let size = window.inner_size().to_physical(window.hidpi_factor()); + let size = window.inner_size(); let color = graph_builder.create_image( hal::image::Kind::D2(size.width as u32, size.height as u32, 1, 1), diff --git a/rendy/examples/sprite/main.rs b/rendy/examples/sprite/main.rs index 6d640655..72906d5f 100644 --- a/rendy/examples/sprite/main.rs +++ b/rendy/examples/sprite/main.rs @@ -11,6 +11,7 @@ use rendy::{ }, hal::{self, device::Device as _}, init::winit::{ + dpi::Size as DpiSize, event::{Event, WindowEvent}, event_loop::{ControlFlow, EventLoop}, window::WindowBuilder, @@ -329,7 +330,7 @@ fn run( WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit, _ => {} }, - Event::EventsCleared => { + Event::MainEventsCleared => { factory.maintain(&mut families); if let Some(ref mut graph) = graph { graph.run(&mut factory, &mut families, &()); @@ -369,7 +370,7 @@ fn main() { let event_loop = EventLoop::new(); let window = WindowBuilder::new() .with_title("Rendy example") - .with_inner_size((960, 640).into()); + .with_inner_size(DpiSize::Logical((960, 640).into())); let rendy = AnyWindowedRendy::init_auto(&config, window, &event_loop).unwrap(); rendy::with_any_windowed_rendy!((rendy) @@ -377,7 +378,7 @@ fn main() { let mut graph_builder = GraphBuilder::<_, ()>::new(); - let size = window.inner_size().to_physical(window.hidpi_factor()); + let size = window.inner_size(); let color = graph_builder.create_image( hal::image::Kind::D2(size.width as u32, size.height as u32, 1, 1), diff --git a/rendy/examples/triangle/main.rs b/rendy/examples/triangle/main.rs index fd72cd95..c9aaf4fe 100644 --- a/rendy/examples/triangle/main.rs +++ b/rendy/examples/triangle/main.rs @@ -10,6 +10,7 @@ use rendy::{ graph::{render::*, Graph, GraphBuilder, GraphContext, NodeBuffer, NodeImage}, hal::{self, Backend}, init::winit::{ + dpi::Size as DpiSize, event::{Event, WindowEvent}, event_loop::{ControlFlow, EventLoop}, window::WindowBuilder, @@ -210,7 +211,7 @@ fn run( WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit, _ => {} }, - Event::EventsCleared => { + Event::MainEventsCleared => { factory.maintain(&mut families); if let Some(ref mut graph) = graph { graph.run(&mut factory, &mut families, &()); @@ -248,14 +249,14 @@ fn main() { let config: Config = Default::default(); let event_loop = EventLoop::new(); let window = WindowBuilder::new() - .with_inner_size((960, 640).into()) + .with_inner_size(DpiSize::Logical((960, 640).into())) .with_title("Rendy example"); let rendy = AnyWindowedRendy::init_auto(&config, window, &event_loop).unwrap(); rendy::with_any_windowed_rendy!((rendy) (mut factory, mut families, surface, window) => { let mut graph_builder = GraphBuilder::<_, ()>::new(); - let (width, height) = window.inner_size().to_physical(window.hidpi_factor()).into(); + let (width, height) = window.inner_size().into(); graph_builder.add_node( TriangleRenderPipeline::builder() diff --git a/resource/src/image.rs b/resource/src/image.rs index 389f72a6..2d17f23c 100644 --- a/resource/src/image.rs +++ b/resource/src/image.rs @@ -216,7 +216,7 @@ pub struct ImageView { device_owned!(ImageView @ |view: &Self| view.image.device_id()); /// Alias for the error to create an image view. -pub type ImageViewCreationError = CreationError; +pub type ImageViewCreationError = CreationError; impl ImageView where diff --git a/shader/src/reflect/types.rs b/shader/src/reflect/types.rs index 70590484..b2d51a11 100644 --- a/shader/src/reflect/types.rs +++ b/shader/src/reflect/types.rs @@ -198,20 +198,56 @@ impl ReflectInto for ReflectInterfaceVariab impl ReflectInto for ReflectDescriptorType { fn reflect_into(&self) -> Result { - use rendy_core::hal::pso::DescriptorType; + use rendy_core::hal::pso::{ + BufferDescriptorFormat, BufferDescriptorType, DescriptorType, ImageDescriptorType, + }; use ReflectDescriptorType::*; match *self { Sampler => Ok(DescriptorType::Sampler), - CombinedImageSampler => Ok(DescriptorType::CombinedImageSampler), - SampledImage => Ok(DescriptorType::SampledImage), - StorageImage => Ok(DescriptorType::StorageImage), - UniformTexelBuffer => Ok(DescriptorType::UniformTexelBuffer), - StorageTexelBuffer => Ok(DescriptorType::StorageTexelBuffer), - UniformBuffer => Ok(DescriptorType::UniformBuffer), - StorageBuffer => Ok(DescriptorType::StorageBuffer), - UniformBufferDynamic => Ok(DescriptorType::UniformBufferDynamic), - StorageBufferDynamic => Ok(DescriptorType::StorageBufferDynamic), + CombinedImageSampler => Ok(DescriptorType::Image { + ty: ImageDescriptorType::Sampled { with_sampler: true }, + }), + SampledImage => Ok(DescriptorType::Image { + ty: ImageDescriptorType::Sampled { + with_sampler: false, + }, + }), + StorageImage => Ok(DescriptorType::Image { + ty: ImageDescriptorType::Storage { read_only: false }, + }), + UniformTexelBuffer => Ok(DescriptorType::Buffer { + ty: BufferDescriptorType::Uniform, + format: BufferDescriptorFormat::Texel, + }), + StorageTexelBuffer => Ok(DescriptorType::Buffer { + ty: BufferDescriptorType::Storage { read_only: false }, + format: BufferDescriptorFormat::Texel, + }), + UniformBuffer => Ok(DescriptorType::Buffer { + ty: BufferDescriptorType::Uniform, + format: BufferDescriptorFormat::Structured { + dynamic_offset: false, + }, + }), + StorageBuffer => Ok(DescriptorType::Buffer { + ty: BufferDescriptorType::Storage { read_only: false }, + format: BufferDescriptorFormat::Structured { + dynamic_offset: false, + }, + }), + UniformBufferDynamic => Ok(DescriptorType::Buffer { + ty: BufferDescriptorType::Uniform, + format: BufferDescriptorFormat::Structured { + dynamic_offset: true, + }, + }), + StorageBufferDynamic => Ok(DescriptorType::Buffer { + ty: BufferDescriptorType::Storage { read_only: false }, + format: BufferDescriptorFormat::Structured { + dynamic_offset: true, + }, + }), InputAttachment => Ok(DescriptorType::InputAttachment), AccelerationStructureNV => Err(ReflectTypeError::UnhandledAccelerationStructureNV), Undefined => Err(ReflectTypeError::UnhandledUndefined),