From a99cde44bbd4e66c16c1f0db842b6b70d4e360ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 8 Mar 2021 17:14:37 +0100 Subject: [PATCH] Vk: add a ShaderStages enum set. Will be needed by descriptor sets. --- doc/vulkan-mapping.dox | 2 +- src/Magnum/Vk/Shader.h | 14 +++++++++++++- src/Magnum/Vk/Vk.h | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/vulkan-mapping.dox b/doc/vulkan-mapping.dox index 1ab6265c7..8f4078bc2 100644 --- a/doc/vulkan-mapping.dox +++ b/doc/vulkan-mapping.dox @@ -971,7 +971,7 @@ Vulkan enum | Matching API @type_vk{ShaderFloatControlsIndependence} @m_class{m-label m-flat m-success} **KHR, 1.2** | | @type_vk{ShaderGroupShaderKHR} @m_class{m-label m-flat m-warning} **KHR** | | @type_vk{ShaderModuleCreateFlagBits}, \n @type_vk{ShaderModuleCreateFlags} | @ref ShaderCreateInfo::Flag, \n @ref ShaderCreateInfo::Flags -@type_vk{ShaderStageFlagBits}, \n @type_vk{ShaderStageFlags} | @ref ShaderStage +@type_vk{ShaderStageFlagBits}, \n @type_vk{ShaderStageFlags} | @ref ShaderStage, \n @ref ShaderStages @type_vk{SharingMode} | | @type_vk{SparseImageFormatFlagBits}, \n @type_vk{SparseImageFormatFlags} | | @type_vk{SparseMemoryBindFlagBits}, \n @type_vk{SparseMemoryBindFlags} | | diff --git a/src/Magnum/Vk/Shader.h b/src/Magnum/Vk/Shader.h index a436eba6a..5b0ee47fe 100644 --- a/src/Magnum/Vk/Shader.h +++ b/src/Magnum/Vk/Shader.h @@ -26,7 +26,7 @@ */ /** @file - * @brief Class @ref Magnum::Vk::Shader, enum @ref Magnum::Vk::ShaderStage + * @brief Class @ref Magnum::Vk::Shader, enum @ref Magnum::Vk::ShaderStage, enum set @ref Magnum::Vk::ShaderStages * @m_since_latest */ @@ -47,6 +47,7 @@ namespace Implementation { struct DeviceState; } Wraps @type_vk_keyword{ShaderStageFlagBits}. @m_enum_values_as_keywords +@see @ref ShaderStages, @ref ShaderSet::addShader() */ enum class ShaderStage: UnsignedInt { /** Vertex stage */ @@ -113,6 +114,17 @@ enum class ShaderStage: UnsignedInt { RayCallable = VK_SHADER_STAGE_CALLABLE_BIT_KHR }; +/** +@brief Shader stages +@m_since_latest + +Type-safe wrapper for @type_vk_keyword{ShaderStageFlags}. Note that +@cpp ~Vk::ShaderStages{} @ce can be used for @val_vk_keyword{SHADER_STAGE_ALL,ShaderStageFlagBits}. +*/ +typedef Containers::EnumSet ShaderStages; + +CORRADE_ENUMSET_OPERATORS(ShaderStages) + /** @brief Shader @m_since_latest diff --git a/src/Magnum/Vk/Vk.h b/src/Magnum/Vk/Vk.h index 637502163..68495270d 100644 --- a/src/Magnum/Vk/Vk.h +++ b/src/Magnum/Vk/Vk.h @@ -129,6 +129,10 @@ class ShaderCreateInfo; class ShaderSet; /* ShaderSpecialization used only directly with ShaderSet */ enum class ShaderStage: UnsignedInt; +/* 0x7FFFFFFF = VK_SHADER_STAGE_ALL, but that would mean including the whole + Vulkan headers. Using a number here and then the actual enum value in + Shadder.h to ensure it doesn't get out of sync. */ +typedef Containers::EnumSet ShaderStages; class SubmitInfo; class SubpassBeginInfo; class SubpassEndInfo;