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