summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--shaders/shader.frag5
-rw-r--r--src/graphics/permanent.rs10
-rw-r--r--src/graphics/render.rs25
-rw-r--r--src/graphics/window_dressing.rs8
4 files changed, 35 insertions, 13 deletions
diff --git a/shaders/shader.frag b/shaders/shader.frag
index 20550ba..a2561d1 100644
--- a/shaders/shader.frag
+++ b/shaders/shader.frag
@@ -1,6 +1,7 @@
 #version 460
 
-layout(binding = 1) uniform sampler2D textureSampler;
+layout(binding = 1) uniform sampler textureSampler;
+layout(binding = 2) uniform texture2D textureImage;
 
 layout(location = 0) in vec3 fragmentColor;
 layout(location = 1) in vec2 fragmentTextureCoordinate;
@@ -9,7 +10,7 @@ layout(location = 0) out vec4 outColor;
 
 void main() {
   outColor = vec4(fragmentColor
-                      * texture(textureSampler,
+                      * texture(sampler2D(textureImage, textureSampler),
                                 fragmentTextureCoordinate).rgb,
                   1.0);
 }
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);