Browse Source

Vk: expose image aspects enum.

Yes, I had to make the enum mapping table in the previous commit because
I didn't remember anymore if I exposed this already or not. The API
surface is *huge*.
pull/494/head
Vladimír Vondruš 5 years ago
parent
commit
963526ac28
  1. 2
      doc/vulkan-mapping.dox
  2. 27
      src/Magnum/Vk/Image.h
  3. 12
      src/Magnum/Vk/ImageView.cpp
  4. 8
      src/Magnum/Vk/ImageViewCreateInfo.h
  5. 2
      src/Magnum/Vk/Vk.h

2
doc/vulkan-mapping.dox

@ -861,7 +861,7 @@ Vulkan enum | Matching API
Vulkan enum | Matching API
--------------------------------------- | ------------
@type_vk{ImageAspectFlagBits}, \n @type_vk{ImageAspectFlags} | |
@type_vk{ImageAspectFlagBits}, \n @type_vk{ImageAspectFlags} | @ref ImageAspect, \n @ref ImageAspects
@type_vk{ImageCreateFlagBits}, \n @type_vk{ImageCreateFlags} | @ref ImageCreateInfo::Flag, \n @ref ImageCreateInfo::Flags
@type_vk{ImageLayout} | @ref ImageLayout
@type_vk{ImageTiling} | |

27
src/Magnum/Vk/Image.h

@ -148,6 +148,33 @@ enum class ImageLayout: Int {
@vk_extension{KHR,separate_depth_stencil_layouts} (1.2) */
};
/**
@brief Image aspect
@m_since_latest
Wraps @type_vk_keyword{ImageAspectFlagBits}.
@see @ref ImageAspects, @ref ImageViewCreateInfo::ImageViewCreateInfo()
@m_enum_values_as_keywords
*/
enum class ImageAspect: UnsignedInt {
Color = VK_IMAGE_ASPECT_COLOR_BIT, /**< Color */
Depth = VK_IMAGE_ASPECT_DEPTH_BIT, /**< Depth */
Stencil = VK_IMAGE_ASPECT_STENCIL_BIT /**< Stencil */
/** @todo metadata (sparse?), YCbCr properties */
};
/**
@brief Image aspects
@m_since_latest
Type-safe wrapper for @type_vk_keyword{ImageAspectFlags}.
@see @ref ImageViewCreateInfo::ImageViewCreateInfo()
*/
typedef Containers::EnumSet<ImageAspect> ImageAspects;
CORRADE_ENUMSET_OPERATORS(ImageAspects)
/**
@brief Image
@m_since_latest

12
src/Magnum/Vk/ImageView.cpp

@ -37,21 +37,21 @@ namespace {
/* Vulkan, it would kill you if 0 was a valid default, right?! ffs */
/** @todo this might be useful elsewhere as well */
VkImageAspectFlags aspectFor(const PixelFormat format) {
ImageAspects aspectFor(const PixelFormat format) {
if(format == PixelFormat::Depth16UnormStencil8UI ||
format == PixelFormat::Depth24UnormStencil8UI ||
format == PixelFormat::Depth32FStencil8UI)
return VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT;
return ImageAspect::Depth|ImageAspect::Stencil;
if(format == PixelFormat::Depth16Unorm ||
format == PixelFormat::Depth24Unorm ||
format == PixelFormat::Depth32F)
return VK_IMAGE_ASPECT_DEPTH_BIT;
return ImageAspect::Depth;
if(format == PixelFormat::Stencil8UI)
return VK_IMAGE_ASPECT_STENCIL_BIT;
return ImageAspect::Stencil;
/** @todo planar formats */
return VK_IMAGE_ASPECT_COLOR_BIT;
return ImageAspect::Color;
}
}
@ -62,7 +62,7 @@ ImageViewCreateInfo::ImageViewCreateInfo(const VkImageViewType type, const VkIma
_info.image = image;
_info.viewType = type;
_info.format = VkFormat(format);
_info.subresourceRange.aspectMask = aspectFor(format);
_info.subresourceRange.aspectMask = VkImageAspectFlags(aspectFor(format));
_info.subresourceRange.baseMipLevel = levelOffset;
_info.subresourceRange.levelCount = levelCount;
_info.subresourceRange.baseArrayLayer = layerOffset;

8
src/Magnum/Vk/ImageViewCreateInfo.h

@ -90,11 +90,9 @@ class MAGNUM_VK_EXPORT ImageViewCreateInfo {
* - `image`
* - `viewType` to @p type
* - `format`
* - `subresourceRange.aspectMask` to
* @val_vk{IMAGE_ASPECT_DEPTH_BIT,ImageAspectFlagBits} /
* @val_vk{IMAGE_ASPECT_STENCIL_BIT,ImageAspectFlagBits} if
* @p format is depth / stencil or both and
* @val_vk{IMAGE_ASPECT_COLOR_BIT,ImageAspectFlagBits} otherwise
* - `subresourceRange.aspectMask` to @ref ImageAspect::Depth /
* @ref ImageAspect::Stencil if @p format is depth / stencil or
* both and @ref ImageAspect::Color otherwise
* - `subresourceRange.levelOffset` to @p levelOffset
* - `subresourceRange.levelCount` to @p levelCount
* - `subresourceRange.baseArrayLayer` to @p layerOffset

2
src/Magnum/Vk/Vk.h

@ -61,6 +61,8 @@ class FramebufferCreateInfo;
enum class HandleFlag: UnsignedByte;
typedef Containers::EnumSet<HandleFlag> HandleFlags;
class Image;
enum class ImageAspect: UnsignedInt;
typedef Containers::EnumSet<ImageAspect> ImageAspects;
enum class ImageLayout: Int;
class ImageCreateInfo;
/* Not forward-declaring ImageCreateInfo1D etc right now, I see no need */

Loading…
Cancel
Save