diff --git a/projects/bindless_textures/resources/shaders/shader.frag b/projects/bindless_textures/resources/shaders/shader.frag
index 71a1de69c57c0d7b7d4665095410e7acaf8dbd62..ba9ee901f6debc449db2a61d857666c0cf0e44ba 100644
--- a/projects/bindless_textures/resources/shaders/shader.frag
+++ b/projects/bindless_textures/resources/shaders/shader.frag
@@ -1,14 +1,15 @@
 #version 450
 #extension GL_ARB_separate_shader_objects : enable
+#extension GL_EXT_nonuniform_qualifier : enable
 
 layout(location = 0) in vec3 passNormal;
 layout(location = 1) in vec2 passUV;
 
 layout(location = 0) out vec3 outColor;
 
-layout(set=0, binding=0) uniform texture2D  meshTexture;
+layout(set=0, binding=0) uniform texture2D  materialTextures[];
 layout(set=0, binding=1) uniform sampler    textureSampler;
 
 void main()	{
-	outColor = texture(sampler2D(meshTexture, textureSampler), passUV).rgb;
+	outColor = texture(sampler2D(materialTextures[1], textureSampler), passUV).rgb;
 }
\ No newline at end of file
diff --git a/projects/bindless_textures/src/main.cpp b/projects/bindless_textures/src/main.cpp
index 731d3e56975ff0cd2d8e6d503a19d56de1b922fe..496c64054b9c9c4ef81c2364f7f77a187dbbf99e 100644
--- a/projects/bindless_textures/src/main.cpp
+++ b/projects/bindless_textures/src/main.cpp
@@ -25,7 +25,7 @@ int main(int argc, const char** argv) {
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer },
 		{},
-		{ "VK_KHR_swapchain" }
+		{ "VK_KHR_swapchain", VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME }
 	);
 
 	vkcv::asset::Scene mesh;
@@ -106,8 +106,7 @@ int main(int argc, const char** argv) {
 	
 	const vkcv::VertexLayout firstMeshLayout (bindings);
 
-	uint32_t setID = 0;
-	std::vector<vkcv::DescriptorBinding> descriptorBindings = { firstMeshProgram.getReflectedDescriptors()[setID] };
+	std::vector<vkcv::DescriptorBinding> descriptorBindings = { firstMeshProgram.getReflectedDescriptors()[0] };
 	vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(descriptorBindings);
 
 	const vkcv::PipelineConfig firstMeshPipelineConfig {
diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp
index d55c102627d06be5ceed42553134a5014d0ee598..c143635ff06fb6e64370c88c6c40642d891bc4a3 100644
--- a/src/vkcv/Context.cpp
+++ b/src/vkcv/Context.cpp
@@ -294,6 +294,7 @@ namespace vkcv
 		deviceFeatures2.features.shaderInt16 = true;
 
 		// TODO: proper feature management
+		// TODO: check whether these features are ACTUALLY SUPPORTED
 		// -------------- HARD CODED LIST OF DEVICE FEATURES THAT ARE CHECKED AGAINST AND IF USED, ENABLED ------------
 
 		const bool usingMeshShaders = checkSupport(deviceExtensions, { VK_NV_MESH_SHADER_EXTENSION_NAME });
@@ -317,7 +318,17 @@ namespace vkcv
 		    device16BitStorageFeatures.storageBuffer16BitAccess = true;
 			deviceShaderFloat16Int8Features.setPNext(&device16BitStorageFeatures);
 		}
-		
+
+		const bool descriptorIndexing = checkSupport(deviceExtensions, { VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME });
+        vk::PhysicalDeviceDescriptorIndexingFeatures descriptorIndexingFeatures;
+        if (descriptorIndexing) {
+            // NOTE: what about
+            // shaderSampledImageArrayNonUniformIndexing ?
+            descriptorIndexingFeatures.descriptorBindingPartiallyBound = true;
+            descriptorIndexingFeatures.runtimeDescriptorArray = true;
+            deviceFeatures2.setPNext(&descriptorIndexingFeatures);
+        }
+
 		deviceCreateInfo.setPNext(&deviceFeatures2);
 
 		// Ablauf