From eab95ac532332136cdf198ccd805135cfc18fa35 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Sun, 1 Aug 2021 20:05:24 +0200 Subject: [PATCH] [#101] Fixed using extensions only if specifically required Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- src/vkcv/Context.cpp | 68 +++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp index c83ec0b7..75d409d7 100644 --- a/src/vkcv/Context.cpp +++ b/src/vkcv/Context.cpp @@ -261,6 +261,33 @@ namespace vkcv FeatureManager featureManager (physicalDevice); + if (featureManager.useExtension(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, false)) { + featureManager.useFeatures<vk::PhysicalDeviceShaderFloat16Int8Features>( + [](vk::PhysicalDeviceShaderFloat16Int8Features& features) { + features.setShaderFloat16(true); + }, false); + } + + if (featureManager.useExtension(VK_KHR_16BIT_STORAGE_EXTENSION_NAME, false)) { + featureManager.useFeatures<vk::PhysicalDevice16BitStorageFeatures>( + [](vk::PhysicalDevice16BitStorageFeatures& features) { + features.setStorageBuffer16BitAccess(true); + }, false); + } + + featureManager.useFeatures([](vk::PhysicalDeviceFeatures& features) { + features.setFragmentStoresAndAtomics(true); + features.setGeometryShader(true); + features.setDepthClamp(true); + features.setShaderInt16(true); + }); + + for (const auto& extension : deviceExtensions) { + featureManager.useExtension(extension); + } + + const auto& extensions = featureManager.getActiveExtensions(); + std::vector<vk::DeviceQueueCreateInfo> qCreateInfos; // create required queues @@ -276,9 +303,9 @@ namespace vkcv qCreateInfos.data(), 0, nullptr, - deviceExtensions.size(), - deviceExtensions.data(), - nullptr // Should our device use some features??? If yes: TODO + extensions.size(), + extensions.data(), + nullptr ); #ifndef NDEBUG @@ -286,33 +313,14 @@ namespace vkcv deviceCreateInfo.ppEnabledLayerNames = validationLayers.data(); #endif - if (featureManager.useExtension(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, false)) { - featureManager.useFeatures<vk::PhysicalDeviceShaderFloat16Int8Features>( - [](vk::PhysicalDeviceShaderFloat16Int8Features& features) { - features.setShaderFloat16(true); - }, false); - } - - if (featureManager.useExtension(VK_KHR_16BIT_STORAGE_EXTENSION_NAME, false)) { - featureManager.useFeatures<vk::PhysicalDevice16BitStorageFeatures>( - [](vk::PhysicalDevice16BitStorageFeatures& features) { - features.setStorageBuffer16BitAccess(true); - }, false); - } - - featureManager.useFeatures([](vk::PhysicalDeviceFeatures& features) { - features.setFragmentStoresAndAtomics(true); - features.setGeometryShader(true); - features.setDepthClamp(true); - features.setShaderInt16(true); - }); - - if (featureManager.useExtension(VK_NV_MESH_SHADER_EXTENSION_NAME, false)) { - featureManager.useFeatures<vk::PhysicalDeviceMeshShaderFeaturesNV>( - [](vk::PhysicalDeviceMeshShaderFeaturesNV& features) { - features.setTaskShader(true); - features.setMeshShader(true); - }, false); + for (const auto& extension : deviceExtensions) { + if (0 == strcmp(extension, VK_NV_MESH_SHADER_EXTENSION_NAME)) { + featureManager.useFeatures<vk::PhysicalDeviceMeshShaderFeaturesNV>( + [](vk::PhysicalDeviceMeshShaderFeaturesNV& features) { + features.setTaskShader(true); + features.setMeshShader(true); + }); + } } deviceCreateInfo.setPNext(&(featureManager.getFeatures())); -- GitLab