mirror of
https://github.com/italicsjenga/portability.git
synced 2024-11-25 08:21:31 +11:00
Merge #121
121: Descriptor iterator r=msiglreith a=kvark This PR reduces the amount of magic going on during the descriptor writes, makes us move less stuff on the stack. Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
This commit is contained in:
commit
af650d6c58
22
Cargo.lock
generated
22
Cargo.lock
generated
|
@ -278,14 +278,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gfx-backend-dx11"
|
name = "gfx-backend-dx11"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/gfx-rs/gfx#514973f6a2f15276adeb896cdc098b74bc1d4a2f"
|
source = "git+https://github.com/gfx-rs/gfx#172a851bafa18d46887d2f3ae833cbfd56e192db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"derivative 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gfx-hal 0.1.0 (git+https://github.com/gfx-rs/gfx)",
|
"gfx-hal 0.1.0 (git+https://github.com/gfx-rs/gfx)",
|
||||||
"log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"spirv_cross 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"spirv_cross 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"wio 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"wio 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -294,14 +294,14 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gfx-backend-dx12"
|
name = "gfx-backend-dx12"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/gfx-rs/gfx#514973f6a2f15276adeb896cdc098b74bc1d4a2f"
|
source = "git+https://github.com/gfx-rs/gfx#172a851bafa18d46887d2f3ae833cbfd56e192db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"derivative 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"gfx-hal 0.1.0 (git+https://github.com/gfx-rs/gfx)",
|
"gfx-hal 0.1.0 (git+https://github.com/gfx-rs/gfx)",
|
||||||
"log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"spirv_cross 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"spirv_cross 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"wio 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"wio 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -310,12 +310,11 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gfx-backend-metal"
|
name = "gfx-backend-metal"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/gfx-rs/gfx#514973f6a2f15276adeb896cdc098b74bc1d4a2f"
|
source = "git+https://github.com/gfx-rs/gfx#172a851bafa18d46887d2f3ae833cbfd56e192db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cocoa 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cocoa 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"core-foundation 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"core-graphics 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"core-graphics 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"dispatch 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"dispatch 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -325,7 +324,7 @@ dependencies = [
|
||||||
"objc 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"objc 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"spirv_cross 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"spirv_cross 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"storage-map 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"storage-map 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"winit 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
@ -333,7 +332,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gfx-backend-vulkan"
|
name = "gfx-backend-vulkan"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/gfx-rs/gfx#514973f6a2f15276adeb896cdc098b74bc1d4a2f"
|
source = "git+https://github.com/gfx-rs/gfx#172a851bafa18d46887d2f3ae833cbfd56e192db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ash 0.24.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ash 0.24.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -350,7 +349,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gfx-hal"
|
name = "gfx-hal"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/gfx-rs/gfx#514973f6a2f15276adeb896cdc098b74bc1d4a2f"
|
source = "git+https://github.com/gfx-rs/gfx#172a851bafa18d46887d2f3ae833cbfd56e192db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -614,7 +613,6 @@ dependencies = [
|
||||||
"lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"renderdoc 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"renderdoc 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -761,7 +759,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spirv_cross"
|
name = "spirv_cross"
|
||||||
version = "0.9.6"
|
version = "0.9.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -1198,7 +1196,7 @@ dependencies = [
|
||||||
"checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
|
"checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
|
||||||
"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8"
|
"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8"
|
||||||
"checksum smithay-client-toolkit 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2051bffc6cbf271176e8ba1527f801b6444567daee15951ff5152aaaf7777b2f"
|
"checksum smithay-client-toolkit 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2051bffc6cbf271176e8ba1527f801b6444567daee15951ff5152aaaf7777b2f"
|
||||||
"checksum spirv_cross 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)" = "73a62edb99e26999160cf3dcdf9c181b8ba01825f7e016f9b9e70f7000d28548"
|
"checksum spirv_cross 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0d0c037ff60c5e8a31ee19b784dc51344663368f3879f6e30f461f686f96ba83"
|
||||||
"checksum stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbc596e092fe5f598b12ef46cc03754085ac2f4d8c739ad61c4ae266cc3b3fa"
|
"checksum stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbc596e092fe5f598b12ef46cc03754085ac2f4d8c739ad61c4ae266cc3b3fa"
|
||||||
"checksum storage-map 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16bc49017309bb047d22700c91811dca0b8c13561f94e3d8784508edeb91b00a"
|
"checksum storage-map 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16bc49017309bb047d22700c91811dca0b8c13561f94e3d8784508edeb91b00a"
|
||||||
"checksum syn 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)" = "58fd09df59565db3399efbba34ba8a2fec1307511ebd245d0061ff9d42691673"
|
"checksum syn 0.10.8 (registry+https://github.com/rust-lang/crates.io-index)" = "58fd09df59565db3399efbba34ba8a2fec1307511ebd245d0061ff9d42691673"
|
||||||
|
|
|
@ -19,7 +19,6 @@ metal-capture = ["gfx-backend-metal/auto-capture"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
lazy_static = "1.0"
|
lazy_static = "1.0"
|
||||||
log = { version = "0.4", features = ["release_max_level_error"] }
|
log = { version = "0.4", features = ["release_max_level_error"] }
|
||||||
smallvec = "0.6"
|
|
||||||
|
|
||||||
[dependencies.env_logger]
|
[dependencies.env_logger]
|
||||||
version = "0.5"
|
version = "0.5"
|
||||||
|
|
|
@ -9,8 +9,6 @@ use hal::device::WaitFor;
|
||||||
use hal::pool::RawCommandPool;
|
use hal::pool::RawCommandPool;
|
||||||
use hal::queue::RawCommandQueue;
|
use hal::queue::RawCommandQueue;
|
||||||
|
|
||||||
use smallvec::SmallVec;
|
|
||||||
|
|
||||||
use std::ffi::{CStr, CString};
|
use std::ffi::{CStr, CString};
|
||||||
use std::os::raw::c_int;
|
use std::os::raw::c_int;
|
||||||
#[cfg(feature = "renderdoc")]
|
#[cfg(feature = "renderdoc")]
|
||||||
|
@ -2341,6 +2339,7 @@ pub extern "C" fn gfxCreateDescriptorPool(
|
||||||
pDescriptorPool: *mut VkDescriptorPool,
|
pDescriptorPool: *mut VkDescriptorPool,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
let info = unsafe { &*pCreateInfo };
|
let info = unsafe { &*pCreateInfo };
|
||||||
|
let max_sets = info.maxSets as usize;
|
||||||
|
|
||||||
let pool_sizes = unsafe {
|
let pool_sizes = unsafe {
|
||||||
slice::from_raw_parts(info.pPoolSizes, info.poolSizeCount as _)
|
slice::from_raw_parts(info.pPoolSizes, info.poolSizeCount as _)
|
||||||
|
@ -2357,12 +2356,12 @@ pub extern "C" fn gfxCreateDescriptorPool(
|
||||||
|
|
||||||
let pool = super::DescriptorPool {
|
let pool = super::DescriptorPool {
|
||||||
raw: gpu.device
|
raw: gpu.device
|
||||||
.create_descriptor_pool(info.maxSets as _, ranges),
|
.create_descriptor_pool(max_sets, ranges),
|
||||||
temp_sets: Vec::with_capacity(info.maxSets as _),
|
temp_sets: Vec::with_capacity(max_sets),
|
||||||
set_handles: if info.flags & VkDescriptorPoolCreateFlagBits::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT as u32 != 0 {
|
set_handles: if info.flags & VkDescriptorPoolCreateFlagBits::VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT as u32 != 0 {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
Some(Vec::new())
|
Some(Vec::with_capacity(max_sets))
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2417,7 +2416,6 @@ pub extern "C" fn gfxAllocateDescriptorSets(
|
||||||
.iter()
|
.iter()
|
||||||
.map(|layout| &**layout);
|
.map(|layout| &**layout);
|
||||||
|
|
||||||
assert!(temp_sets.is_empty());
|
|
||||||
match raw.allocate_sets(layouts, temp_sets) {
|
match raw.allocate_sets(layouts, temp_sets) {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
assert_eq!(temp_sets.len(), info.descriptorSetCount as usize);
|
assert_eq!(temp_sets.len(), info.descriptorSetCount as usize);
|
||||||
|
@ -2464,6 +2462,72 @@ pub extern "C" fn gfxFreeDescriptorSets(
|
||||||
|
|
||||||
VkResult::VK_SUCCESS
|
VkResult::VK_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct DescriptorIter<'a> {
|
||||||
|
ty: pso::DescriptorType,
|
||||||
|
image_infos: slice::Iter<'a, VkDescriptorImageInfo>,
|
||||||
|
buffer_infos: slice::Iter<'a, VkDescriptorBufferInfo>,
|
||||||
|
texel_buffer_views: slice::Iter<'a, VkBufferView>,
|
||||||
|
}
|
||||||
|
impl<'a> Iterator for DescriptorIter<'a> {
|
||||||
|
type Item = pso::Descriptor<'a, B>;
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
match self.ty {
|
||||||
|
pso::DescriptorType::Sampler => {
|
||||||
|
self.image_infos.next().map(|image| {
|
||||||
|
pso::Descriptor::Sampler(&*image.sampler)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
pso::DescriptorType::InputAttachment |
|
||||||
|
pso::DescriptorType::SampledImage |
|
||||||
|
pso::DescriptorType::StorageImage => {
|
||||||
|
self.image_infos.next().map(|image| {
|
||||||
|
pso::Descriptor::Image(
|
||||||
|
&*image.imageView,
|
||||||
|
conv::map_image_layout(image.imageLayout),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
pso::DescriptorType::UniformTexelBuffer => {
|
||||||
|
self.texel_buffer_views.next().map(|view| {
|
||||||
|
pso::Descriptor::UniformTexelBuffer(&**view)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
pso::DescriptorType::StorageTexelBuffer => {
|
||||||
|
self.texel_buffer_views.next().map(|view| {
|
||||||
|
pso::Descriptor::StorageTexelBuffer(&**view)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
pso::DescriptorType::UniformBuffer |
|
||||||
|
pso::DescriptorType::StorageBuffer |
|
||||||
|
pso::DescriptorType::UniformBufferDynamic |
|
||||||
|
pso::DescriptorType::StorageBufferDynamic => {
|
||||||
|
self.buffer_infos.next().map(|buffer| {
|
||||||
|
let end = if buffer.range as i32 == VK_WHOLE_SIZE {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(buffer.offset + buffer.range)
|
||||||
|
};
|
||||||
|
pso::Descriptor::Buffer(
|
||||||
|
// Non-sparse buffer need to be bound to device memory.
|
||||||
|
buffer.buffer.expect("Buffer needs to be bound"),
|
||||||
|
Some(buffer.offset) .. end,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
pso::DescriptorType::CombinedImageSampler => {
|
||||||
|
self.image_infos.next().map(|image| {
|
||||||
|
pso::Descriptor::CombinedImageSampler(
|
||||||
|
&*image.imageView,
|
||||||
|
conv::map_image_layout(image.imageLayout),
|
||||||
|
&*image.sampler,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub extern "C" fn gfxUpdateDescriptorSets(
|
pub extern "C" fn gfxUpdateDescriptorSets(
|
||||||
gpu: VkDevice,
|
gpu: VkDevice,
|
||||||
|
@ -2476,83 +2540,18 @@ pub extern "C" fn gfxUpdateDescriptorSets(
|
||||||
slice::from_raw_parts(pDescriptorWrites, descriptorWriteCount as _)
|
slice::from_raw_parts(pDescriptorWrites, descriptorWriteCount as _)
|
||||||
};
|
};
|
||||||
let writes = write_infos.iter().map(|write| {
|
let writes = write_infos.iter().map(|write| {
|
||||||
let image_info = unsafe {
|
let descriptors = DescriptorIter {
|
||||||
slice::from_raw_parts(write.pImageInfo, write.descriptorCount as _)
|
ty: conv::map_descriptor_type(write.descriptorType),
|
||||||
|
image_infos: unsafe {
|
||||||
|
slice::from_raw_parts(write.pImageInfo, write.descriptorCount as _)
|
||||||
|
}.iter(),
|
||||||
|
buffer_infos: unsafe {
|
||||||
|
slice::from_raw_parts(write.pBufferInfo, write.descriptorCount as _)
|
||||||
|
}.iter(),
|
||||||
|
texel_buffer_views: unsafe {
|
||||||
|
slice::from_raw_parts(write.pTexelBufferView, write.descriptorCount as _)
|
||||||
|
}.iter()
|
||||||
};
|
};
|
||||||
let buffer_info = unsafe {
|
|
||||||
slice::from_raw_parts(write.pBufferInfo, write.descriptorCount as _)
|
|
||||||
};
|
|
||||||
let texel_buffer_views = unsafe {
|
|
||||||
slice::from_raw_parts(write.pTexelBufferView, write.descriptorCount as _)
|
|
||||||
};
|
|
||||||
|
|
||||||
let ty = conv::map_descriptor_type(write.descriptorType);
|
|
||||||
let descriptors: SmallVec<[_; 4]> = match ty {
|
|
||||||
pso::DescriptorType::Sampler => {
|
|
||||||
image_info
|
|
||||||
.into_iter()
|
|
||||||
.map(|image| pso::Descriptor::Sampler(&*image.sampler))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
pso::DescriptorType::InputAttachment |
|
|
||||||
pso::DescriptorType::SampledImage |
|
|
||||||
pso::DescriptorType::StorageImage => {
|
|
||||||
image_info
|
|
||||||
.into_iter()
|
|
||||||
.map(|image| pso::Descriptor::Image(
|
|
||||||
&*image.imageView,
|
|
||||||
conv::map_image_layout(image.imageLayout),
|
|
||||||
))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
pso::DescriptorType::UniformTexelBuffer => {
|
|
||||||
texel_buffer_views
|
|
||||||
.into_iter()
|
|
||||||
.map(|view| pso::Descriptor::UniformTexelBuffer(
|
|
||||||
&**view,
|
|
||||||
))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
pso::DescriptorType::StorageTexelBuffer => {
|
|
||||||
texel_buffer_views
|
|
||||||
.into_iter()
|
|
||||||
.map(|view| pso::Descriptor::StorageTexelBuffer(
|
|
||||||
&**view,
|
|
||||||
))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
pso::DescriptorType::UniformBuffer |
|
|
||||||
pso::DescriptorType::StorageBuffer |
|
|
||||||
pso::DescriptorType::UniformBufferDynamic |
|
|
||||||
pso::DescriptorType::StorageBufferDynamic => {
|
|
||||||
buffer_info
|
|
||||||
.into_iter()
|
|
||||||
.map(|buffer| {
|
|
||||||
let end = if buffer.range as i32 == VK_WHOLE_SIZE {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(buffer.offset + buffer.range)
|
|
||||||
};
|
|
||||||
pso::Descriptor::Buffer(
|
|
||||||
// Non-sparse buffer need to be bound to device memory.
|
|
||||||
buffer.buffer.expect("Buffer needs to be bound"),
|
|
||||||
Some(buffer.offset) .. end,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
pso::DescriptorType::CombinedImageSampler => {
|
|
||||||
image_info
|
|
||||||
.into_iter()
|
|
||||||
.map(|image| pso::Descriptor::CombinedImageSampler(
|
|
||||||
&*image.imageView,
|
|
||||||
conv::map_image_layout(image.imageLayout),
|
|
||||||
&*image.sampler,
|
|
||||||
))
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
pso::DescriptorSetWrite {
|
pso::DescriptorSetWrite {
|
||||||
set: &*write.dstSet,
|
set: &*write.dstSet,
|
||||||
binding: write.dstBinding as _,
|
binding: write.dstBinding as _,
|
||||||
|
|
|
@ -18,7 +18,6 @@ extern crate gfx_backend_vulkan as back;
|
||||||
extern crate lazy_static;
|
extern crate lazy_static;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
extern crate smallvec;
|
|
||||||
#[cfg(feature = "env_logger")]
|
#[cfg(feature = "env_logger")]
|
||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
#[cfg(feature = "renderdoc")]
|
#[cfg(feature = "renderdoc")]
|
||||||
|
|
Loading…
Reference in a new issue