diff options
| author | Irene Knapp <ireneista@irenes.space> | 2026-08-12 19:13:32 -0700 |
|---|---|---|
| committer | Irene Knapp <ireneista@irenes.space> | 2026-08-12 19:13:32 -0700 |
| commit | 19e3a0f319fd04c1dde803796ec272d038b634f7 (patch) | |
| tree | 502077d3e1dab810f037faea810f1cfd2c5ec691 /src | |
| parent | 87f60b880bd1ce586972f9b70dd6c627b1df92cd (diff) | |
this will make it easier to change the image view dynamically as a push update, in a future CL Force-Push: yes Change-Id: If7cfab07913a5a462e16dd7fb478ed491d33d4d9
Diffstat (limited to 'src')
| -rw-r--r-- | src/graphics/permanent.rs | 10 | ||||
| -rw-r--r-- | src/graphics/render.rs | 25 | ||||
| -rw-r--r-- | src/graphics/window_dressing.rs | 8 |
3 files changed, 32 insertions, 11 deletions
diff --git a/src/graphics/permanent.rs b/src/graphics/permanent.rs index df86284..b39dbdd 100644 --- a/src/graphics/permanent.rs +++ b/src/graphics/permanent.rs @@ -575,11 +575,17 @@ fn init_descriptor_set_layout(device: &Device) let sampler_binding = vk::DescriptorSetLayoutBinding::builder() .binding(1) - .descriptor_type(vk::DescriptorType::COMBINED_IMAGE_SAMPLER) + .descriptor_type(vk::DescriptorType::SAMPLER) .descriptor_count(1) .stage_flags(vk::ShaderStageFlags::FRAGMENT); - let bindings = [uniform_block_binding, sampler_binding]; + let texture_binding = vk::DescriptorSetLayoutBinding::builder() + .binding(2) + .descriptor_type(vk::DescriptorType::SAMPLED_IMAGE) + .descriptor_count(1) + .stage_flags(vk::ShaderStageFlags::FRAGMENT); + + let bindings = [uniform_block_binding, sampler_binding, texture_binding]; let descriptor_set_layout_info = vk::DescriptorSetLayoutCreateInfo::builder() .bindings(&bindings); diff --git a/src/graphics/render.rs b/src/graphics/render.rs index 7318574..c88b1d6 100644 --- a/src/graphics/render.rs +++ b/src/graphics/render.rs @@ -472,19 +472,30 @@ fn init_descriptor_sets(device: &Device, layout: &vk::DescriptorSetLayout, .descriptor_type(vk::DescriptorType::UNIFORM_BUFFER) .buffer_info(&buffer_info_list); - let image_info = vk::DescriptorImageInfo::builder() - .image_layout(vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL) - .image_view(*texture_image_view) + let sampler_image_info = vk::DescriptorImageInfo::builder() .sampler(*sampler); - let image_info_list = [image_info]; + let sampler_image_info_list = [sampler_image_info]; let sampler_write_info = vk::WriteDescriptorSet::builder() .dst_set(sets[index]) .dst_binding(1) .dst_array_element(0) - .descriptor_type(vk::DescriptorType::COMBINED_IMAGE_SAMPLER) - .image_info(&image_info_list); + .descriptor_type(vk::DescriptorType::SAMPLER) + .image_info(&sampler_image_info_list); + + let texture_image_info = vk::DescriptorImageInfo::builder() + .image_layout(vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL) + .image_view(*texture_image_view); + let texture_image_info_list = [texture_image_info]; + let texture_write_info = vk::WriteDescriptorSet::builder() + .dst_set(sets[index]) + .dst_binding(2) + .dst_array_element(0) + .descriptor_type(vk::DescriptorType::SAMPLED_IMAGE) + .image_info(&texture_image_info_list); - let write_info_list = [uniform_block_write_info, sampler_write_info]; + let write_info_list = [ + uniform_block_write_info, sampler_write_info, texture_write_info + ]; let copy_info_list: [vk::CopyDescriptorSet; 0] = []; unsafe { diff --git a/src/graphics/window_dressing.rs b/src/graphics/window_dressing.rs index cca0dc8..07dfaf0 100644 --- a/src/graphics/window_dressing.rs +++ b/src/graphics/window_dressing.rs @@ -428,10 +428,14 @@ fn init_descriptor_pool(device: &Device, count: usize) .descriptor_count(count as u32); let sampler_size = vk::DescriptorPoolSize::builder() - .type_(vk::DescriptorType::COMBINED_IMAGE_SAMPLER) + .type_(vk::DescriptorType::SAMPLER) .descriptor_count(count as u32); - let sizes = [uniform_block_size, sampler_size]; + let texture_size = vk::DescriptorPoolSize::builder() + .type_(vk::DescriptorType::SAMPLED_IMAGE) + .descriptor_count(count as u32); + + let sizes = [uniform_block_size, sampler_size, texture_size]; let pool_info = vk::DescriptorPoolCreateInfo::builder() .pool_sizes(&sizes) .max_sets(count as u32); |