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