From 6be4456bb2db9585f0ddfd3a1923b25743d10624 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Wed, 30 May 2018 21:27:17 -0400 Subject: [PATCH] Immutable samplers support --- Cargo.lock | 25 +++++++++++------------ libportability-gfx/src/impls.rs | 35 ++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8fcc68c..c5f87b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,7 +36,7 @@ name = "backtrace" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -45,12 +45,11 @@ dependencies = [ [[package]] name = "backtrace-sys" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -253,7 +252,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "gfx-backend-dx12" version = "0.1.0" -source = "git+https://github.com/gfx-rs/gfx#6d295a541bfe173890a8ccb450b8a759b71786b2" +source = "git+https://github.com/gfx-rs/gfx#e791f711a8e27b22907cd62c91b0848cb6d561d7" dependencies = [ "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "derivative 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -269,7 +268,7 @@ dependencies = [ [[package]] name = "gfx-backend-metal" version = "0.1.0" -source = "git+https://github.com/gfx-rs/gfx#6d295a541bfe173890a8ccb450b8a759b71786b2" +source = "git+https://github.com/gfx-rs/gfx#e791f711a8e27b22907cd62c91b0848cb6d561d7" dependencies = [ "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -290,7 +289,7 @@ dependencies = [ [[package]] name = "gfx-backend-vulkan" version = "0.1.0" -source = "git+https://github.com/gfx-rs/gfx#6d295a541bfe173890a8ccb450b8a759b71786b2" +source = "git+https://github.com/gfx-rs/gfx#e791f711a8e27b22907cd62c91b0848cb6d561d7" dependencies = [ "ash 0.24.3 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -308,7 +307,7 @@ dependencies = [ [[package]] name = "gfx-hal" version = "0.1.0" -source = "git+https://github.com/gfx-rs/gfx#6d295a541bfe173890a8ccb450b8a759b71786b2" +source = "git+https://github.com/gfx-rs/gfx#e791f711a8e27b22907cd62c91b0848cb6d561d7" dependencies = [ "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -554,7 +553,7 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.38" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -562,7 +561,7 @@ name = "redox_termios" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "redox_syscall 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -671,7 +670,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -690,7 +689,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -897,7 +896,7 @@ dependencies = [ "checksum ash 0.24.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fb9df6efb2ee4200129dc4e7f0ac7065a0eabc03adfc22494689a73c410eae82" "checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" "checksum backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbdd17cd962b570302f5297aea8648d5923e22e555c2ed2d8b2e34eca646bf6d" -"checksum backtrace-sys 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5fd343a2466c4603f76f38de264bc0526cffc7fa38ba52fb9f13237eccc1ced2" +"checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e" "checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" "checksum byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "74c0b906e9446b0a2e4f760cdb3fa4b2c48cdc6db8766a845c54b6ff063fd2e9" @@ -954,7 +953,7 @@ dependencies = [ "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" -"checksum redox_syscall 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "0a12d51a5b5fd700e6c757f15877685bfa04fd7eb60c108f01d045cafa0073c2" +"checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" "checksum regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75ecf88252dce580404a22444fc7d626c01815debba56a7f4f536772a5ff19d3" "checksum regex-syntax 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8f1ac0f60d675cc6cf13a20ec076568254472551051ad5dd050364d70671bf6b" diff --git a/libportability-gfx/src/impls.rs b/libportability-gfx/src/impls.rs index 67513d2..9358b4f 100644 --- a/libportability-gfx/src/impls.rs +++ b/libportability-gfx/src/impls.rs @@ -2026,25 +2026,32 @@ pub extern "C" fn gfxCreateDescriptorSetLayout( slice::from_raw_parts(info.pBindings, info.bindingCount as _) }; - let bindings = layout_bindings + let sampler_iter = layout_bindings .iter() - .map(|binding| { - if !binding.pImmutableSamplers.is_null() { - warn!("immutable samplers are not supported yet"); + .flat_map(|binding| { + if binding.pImmutableSamplers.is_null() { + (&[]).into_iter().cloned() + } else { + let slice = unsafe { + slice::from_raw_parts(binding.pImmutableSamplers, binding.descriptorCount as _) + }; + slice.iter().cloned() } + }); - pso::DescriptorSetLayoutBinding { - binding: binding.binding as _, - ty: conv::map_descriptor_type(binding.descriptorType), - count: binding.descriptorCount as _, - stage_flags: conv::map_stage_flags(binding.stageFlags), - - } - }) - .collect::>(); + let mut bindings = Vec::with_capacity(layout_bindings.len()); + for binding in layout_bindings { + bindings.push(pso::DescriptorSetLayoutBinding { + binding: binding.binding as _, + ty: conv::map_descriptor_type(binding.descriptorType), + count: binding.descriptorCount as _, + stage_flags: conv::map_stage_flags(binding.stageFlags), + immutable_samplers: !binding.pImmutableSamplers.is_null(), + }); + } let set_layout = gpu.device - .create_descriptor_set_layout(&bindings); + .create_descriptor_set_layout(&bindings, sampler_iter); unsafe { *pSetLayout = Handle::new(set_layout); } VkResult::VK_SUCCESS