From 514c7754d7fda428fa19b8e10d66c1eac2646ae2 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Sat, 26 Nov 2022 13:13:56 +0100 Subject: [PATCH] Replace extension usage in mesh shader project Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- include/vkcv/FeatureManager.hpp | 10 ++++++++++ include/vkcv/ShaderStage.hpp | 4 ++-- projects/mesh_shader/src/main.cpp | 6 +++--- src/vkcv/FeatureManager.cpp | 13 +++++++++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/include/vkcv/FeatureManager.hpp b/include/vkcv/FeatureManager.hpp index fa9f77be..4b0d4560 100644 --- a/include/vkcv/FeatureManager.hpp +++ b/include/vkcv/FeatureManager.hpp @@ -364,6 +364,16 @@ namespace vkcv { */ [[nodiscard]] bool checkSupport(const vk::PhysicalDeviceShaderTerminateInvocationFeatures &features, bool required) const; + + /** + * @brief Checks support of the @p vk::PhysicalDeviceMeshShaderFeaturesEXT. + * + * @param[in] features The features + * @param[in] required True, if the @p features are required, else false + * @return @p True, if the @p features are supported, else @p false + */ + [[nodiscard]] bool checkSupport(const vk::PhysicalDeviceMeshShaderFeaturesEXT &features, + bool required) const; /** * @brief Searches for a base structure of a given structure type. diff --git a/include/vkcv/ShaderStage.hpp b/include/vkcv/ShaderStage.hpp index 24d3e554..f716e178 100644 --- a/include/vkcv/ShaderStage.hpp +++ b/include/vkcv/ShaderStage.hpp @@ -22,8 +22,8 @@ namespace vkcv { GEOMETRY = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eGeometry), FRAGMENT = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eFragment), COMPUTE = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eCompute), - TASK = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eTaskNV), - MESH = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eMeshNV), + TASK = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eTaskEXT), + MESH = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eMeshEXT), RAY_GEN = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eRaygenKHR), RAY_ANY_HIT = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eAnyHitKHR), RAY_CLOSEST_HIT = static_cast<VkShaderStageFlags>(VULKAN_HPP_NAMESPACE::ShaderStageFlagBits::eClosestHitKHR), diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp index ca57d819..3f19f276 100644 --- a/projects/mesh_shader/src/main.cpp +++ b/projects/mesh_shader/src/main.cpp @@ -81,9 +81,9 @@ int main(int argc, const char** argv) { const std::string applicationName = "Mesh shader"; vkcv::Features features; - features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); - features.requireExtensionFeature<vk::PhysicalDeviceMeshShaderFeaturesNV>( - VK_NV_MESH_SHADER_EXTENSION_NAME, [](vk::PhysicalDeviceMeshShaderFeaturesNV& features) { + features.requireExtension(VK_EXT_MESH_SHADER_EXTENSION_NAME); + features.requireExtensionFeature<vk::PhysicalDeviceMeshShaderFeaturesEXT>( + VK_EXT_MESH_SHADER_EXTENSION_NAME, [](vk::PhysicalDeviceMeshShaderFeaturesEXT& features) { features.setTaskShader(true); features.setMeshShader(true); }); diff --git a/src/vkcv/FeatureManager.cpp b/src/vkcv/FeatureManager.cpp index ab8e20dd..51e86f6c 100644 --- a/src/vkcv/FeatureManager.cpp +++ b/src/vkcv/FeatureManager.cpp @@ -513,6 +513,19 @@ namespace vkcv { return true; } + + bool FeatureManager::checkSupport(const vk::PhysicalDeviceMeshShaderFeaturesEXT &features, + bool required) const { + vkcv_check_init_features2(vk::PhysicalDeviceMeshShaderFeaturesEXT); + + vkcv_check_feature(taskShader); + vkcv_check_feature(meshShader); + vkcv_check_feature(multiviewMeshShader); + vkcv_check_feature(primitiveFragmentShadingRateMeshShader); + vkcv_check_feature(meshShaderQueries); + + return true; + } vk::BaseOutStructure* FeatureManager::findFeatureStructure(vk::StructureType type) const { for (auto &base : m_featuresExtensions) { -- GitLab