1ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand/*
2ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * Copyright © 2016 Intel Corporation
3ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand *
4ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * Permission is hereby granted, free of charge, to any person obtaining a
5ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * copy of this software and associated documentation files (the "Software"),
6ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * to deal in the Software without restriction, including without limitation
7ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * and/or sell copies of the Software, and to permit persons to whom the
9ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * Software is furnished to do so, subject to the following conditions:
10ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand *
11ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * The above copyright notice and this permission notice (including the next
12ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * paragraph) shall be included in all copies or substantial portions of the
13ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * Software.
14ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand *
15ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand * IN THE SOFTWARE.
22ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand */
23ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
2408efa6a19f1c6448cb0fa7807d16521291b2d3b9Emil Velikov#ifndef VK_FORMAT_INFO_H
2508efa6a19f1c6448cb0fa7807d16521291b2d3b9Emil Velikov#define VK_FORMAT_INFO_H
26ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
27ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand#include <stdbool.h>
28ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand#include <vulkan/vulkan.h>
29ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
30ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrandstatic inline VkImageAspectFlags
31ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrandvk_format_aspects(VkFormat format)
32ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand{
33ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   switch (format) {
34ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_UNDEFINED:
35ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand      return 0;
36ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
37ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_S8_UINT:
38ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand      return VK_IMAGE_ASPECT_STENCIL_BIT;
39ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
40ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_D16_UNORM_S8_UINT:
41ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_D24_UNORM_S8_UINT:
42ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_D32_SFLOAT_S8_UINT:
43ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand      return VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
44ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
45ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_D16_UNORM:
46ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_X8_D24_UNORM_PACK32:
47ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   case VK_FORMAT_D32_SFLOAT:
48ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand      return VK_IMAGE_ASPECT_DEPTH_BIT;
49ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
50ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   default:
51ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand      return VK_IMAGE_ASPECT_COLOR_BIT;
52ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   }
53ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand}
54ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
55ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrandstatic inline bool
56ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrandvk_format_is_color(VkFormat format)
57ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand{
58ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   return vk_format_aspects(format) == VK_IMAGE_ASPECT_COLOR_BIT;
59ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand}
60ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand
61ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrandstatic inline bool
62ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrandvk_format_is_depth_or_stencil(VkFormat format)
63ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand{
64ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   const VkImageAspectFlags aspects = vk_format_aspects(format);
65ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand   return aspects & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT);
66ffc502ce0c422822b8d276d07600a6089c70b4afJason Ekstrand}
6708efa6a19f1c6448cb0fa7807d16521291b2d3b9Emil Velikov
681d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrandstatic inline bool
691d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrandvk_format_has_depth(VkFormat format)
701d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrand{
711d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrand   const VkImageAspectFlags aspects = vk_format_aspects(format);
721d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrand   return aspects & VK_IMAGE_ASPECT_DEPTH_BIT;
731d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrand}
741d5ac0a462ac8c7f41e1e1adb1fc5a7db6038d17Jason Ekstrand
7508efa6a19f1c6448cb0fa7807d16521291b2d3b9Emil Velikov#endif /* VK_FORMAT_INFO_H */
76