vk_layer_utils.cpp revision 11cd02dfb91661c65134cac258cf5924270e9d2
111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Copyright (c) 2015-2016 The Khronos Group Inc. 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 2015-2016 Valve Corporation 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 2015-2016 LunarG, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License"); 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * http://www.apache.org/licenses/LICENSE-2.0 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS, 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License. 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Author: Mark Lobodzinski <mark@lunarg.com> 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string.h> 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string> 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <vector> 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "vulkan/vulkan.h" 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "vk_layer_config.h" 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include "vk_layer_utils.h" 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct VULKAN_FORMAT_INFO { 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t size; 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t channel_count; 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert VkFormatCompatibilityClass format_class; 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Set up data structure with number of bytes and number of channels 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// for each Vulkan format. 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const VULKAN_FORMAT_INFO vk_format_table[VK_FORMAT_RANGE_SIZE] = { 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {0, 0, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_UNDEFINED] 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 2, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R4G4_UNORM_PACK8] 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 4, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R4G4B4A4_UNORM_PACK16] 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 4, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_B4G4R4A4_UNORM_PACK16] 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 3, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R5G6B5_UNORM_PACK16] 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 3, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_B5G6R5_UNORM_PACK16] 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 4, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R5G5B5A1_UNORM_PACK16] 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 4, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_B5G5R5A1_UNORM_PACK16] 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 4, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_A1R5G5B5_UNORM_PACK16] 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_UNORM] 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_SNORM] 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_USCALED] 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_SSCALED] 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_UINT] 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_SINT] 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_8_BIT}, // [VK_FORMAT_R8_SRGB] 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_UNORM] 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_SNORM] 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_USCALED] 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_SSCALED] 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_UINT] 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_SINT] 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 2, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R8G8_SRGB] 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_UNORM] 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_SNORM] 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_USCALED] 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_SSCALED] 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_UINT] 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_SINT] 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_R8G8B8_SRGB] 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_UNORM] 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_SNORM] 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_USCALED] 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_SSCALED] 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_UINT] 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_SINT] 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 3, VK_FORMAT_COMPATIBILITY_CLASS_24_BIT}, // [VK_FORMAT_B8G8R8_SRGB] 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_UNORM] 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_SNORM] 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_USCALED] 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_SSCALED] 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_UINT] 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_SINT] 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R8G8B8A8_SRGB] 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_UNORM] 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_SNORM] 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_USCALED] 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_SSCALED] 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_UINT] 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_SINT] 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_SRGB] 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A8B8G8R8_UNORM_PACK32] 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A8B8G8R8_SNORM_PACK32] 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A8B8G8R8_USCALED_PACK32] 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A8B8G8R8_SSCALED_PACK32] 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A8B8G8R8_UINT_PACK32] 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A8B8G8R8_SINT_PACK32] 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B8G8R8A8_SRGB_PACK32] 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2R10G10B10_UNORM_PACK32] 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2R10G10B10_SNORM_PACK32] 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2R10G10B10_USCALED_PACK32] 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2R10G10B10_SSCALED_PACK32] 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2R10G10B10_UINT_PACK32] 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2R10G10B10_SINT_PACK32] 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2B10G10R10_UNORM_PACK32] 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2B10G10R10_SNORM_PACK32] 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2B10G10R10_USCALED_PACK32] 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2B10G10R10_SSCALED_PACK32] 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2B10G10R10_UINT_PACK32] 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 4, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_A2B10G10R10_SINT_PACK32] 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_UNORM] 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_SNORM] 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_USCALED] 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_SSCALED] 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_UINT] 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_SINT] 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_16_BIT}, // [VK_FORMAT_R16_SFLOAT] 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_UNORM] 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_SNORM] 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_USCALED] 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_SSCALED] 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_UINT] 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_SINT] 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R16G16_SFLOAT] 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_UNORM] 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_SNORM] 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_USCALED] 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_SSCALED] 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_UINT] 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_SINT] 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {6, 3, VK_FORMAT_COMPATIBILITY_CLASS_48_BIT}, // [VK_FORMAT_R16G16B16_SFLOAT] 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_UNORM] 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_SNORM] 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_USCALED] 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_SSCALED] 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_UINT] 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_SINT] 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R16G16B16A16_SFLOAT] 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 1, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R32_UINT] 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 1, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R32_SINT] 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 1, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_R32_SFLOAT] 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 2, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R32G32_UINT] 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 2, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R32G32_SINT] 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 2, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R32G32_SFLOAT] 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {12, 3, VK_FORMAT_COMPATIBILITY_CLASS_96_BIT}, // [VK_FORMAT_R32G32B32_UINT] 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {12, 3, VK_FORMAT_COMPATIBILITY_CLASS_96_BIT}, // [VK_FORMAT_R32G32B32_SINT] 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {12, 3, VK_FORMAT_COMPATIBILITY_CLASS_96_BIT}, // [VK_FORMAT_R32G32B32_SFLOAT] 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_128_BIT}, // [VK_FORMAT_R32G32B32A32_UINT] 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_128_BIT}, // [VK_FORMAT_R32G32B32A32_SINT] 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_128_BIT}, // [VK_FORMAT_R32G32B32A32_SFLOAT] 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 1, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R64_UINT] 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 1, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R64_SINT] 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 1, VK_FORMAT_COMPATIBILITY_CLASS_64_BIT}, // [VK_FORMAT_R64_SFLOAT] 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 2, VK_FORMAT_COMPATIBILITY_CLASS_128_BIT}, // [VK_FORMAT_R64G64_UINT] 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 2, VK_FORMAT_COMPATIBILITY_CLASS_128_BIT}, // [VK_FORMAT_R64G64_SINT] 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 2, VK_FORMAT_COMPATIBILITY_CLASS_128_BIT}, // [VK_FORMAT_R64G64_SFLOAT] 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {24, 3, VK_FORMAT_COMPATIBILITY_CLASS_192_BIT}, // [VK_FORMAT_R64G64B64_UINT] 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {24, 3, VK_FORMAT_COMPATIBILITY_CLASS_192_BIT}, // [VK_FORMAT_R64G64B64_SINT] 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {24, 3, VK_FORMAT_COMPATIBILITY_CLASS_192_BIT}, // [VK_FORMAT_R64G64B64_SFLOAT] 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {32, 4, VK_FORMAT_COMPATIBILITY_CLASS_256_BIT}, // [VK_FORMAT_R64G64B64A64_UINT] 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {32, 4, VK_FORMAT_COMPATIBILITY_CLASS_256_BIT}, // [VK_FORMAT_R64G64B64A64_SINT] 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {32, 4, VK_FORMAT_COMPATIBILITY_CLASS_256_BIT}, // [VK_FORMAT_R64G64B64A64_SFLOAT] 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 3, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_B10G11R11_UFLOAT_PACK32] 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 3, VK_FORMAT_COMPATIBILITY_CLASS_32_BIT}, // [VK_FORMAT_E5B9G9R9_UFLOAT_PACK32] 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {2, 1, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_D16_UNORM] 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 1, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_X8_D24_UNORM_PACK32] 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 1, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_D32_SFLOAT] 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {1, 1, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_S8_UINT] 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {3, 2, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_D16_UNORM_S8_UINT] 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_D24_UNORM_S8_UINT] 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {4, 2, VK_FORMAT_COMPATIBILITY_CLASS_NONE_BIT}, // [VK_FORMAT_D32_SFLOAT_S8_UINT] 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC1_RGB_BIT}, // [VK_FORMAT_BC1_RGB_UNORM_BLOCK] 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC1_RGB_BIT}, // [VK_FORMAT_BC1_RGB_SRGB_BLOCK] 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC1_RGBA_BIT}, // [VK_FORMAT_BC1_RGBA_UNORM_BLOCK] 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC1_RGBA_BIT}, // [VK_FORMAT_BC1_RGBA_SRGB_BLOCK] 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC2_BIT}, // [VK_FORMAT_BC2_UNORM_BLOCK] 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC2_BIT}, // [VK_FORMAT_BC2_SRGB_BLOCK] 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC3_BIT}, // [VK_FORMAT_BC3_UNORM_BLOCK] 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC3_BIT}, // [VK_FORMAT_BC3_SRGB_BLOCK] 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC4_BIT}, // [VK_FORMAT_BC4_UNORM_BLOCK] 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC4_BIT}, // [VK_FORMAT_BC4_SNORM_BLOCK] 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC5_BIT}, // [VK_FORMAT_BC5_UNORM_BLOCK] 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC5_BIT}, // [VK_FORMAT_BC5_SNORM_BLOCK] 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC6H_BIT}, // [VK_FORMAT_BC6H_UFLOAT_BLOCK] 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC6H_BIT}, // [VK_FORMAT_BC6H_SFLOAT_BLOCK] 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC7_BIT}, // [VK_FORMAT_BC7_UNORM_BLOCK] 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_BC7_BIT}, // [VK_FORMAT_BC7_SRGB_BLOCK] 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 3, VK_FORMAT_COMPATIBILITY_CLASS_ETC2_RGB_BIT}, // [VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK] 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 3, VK_FORMAT_COMPATIBILITY_CLASS_ETC2_RGB_BIT}, // [VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK] 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_ETC2_RGBA_BIT}, // [VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK] 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_ETC2_RGBA_BIT}, // [VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK] 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_ETC2_EAC_RGBA_BIT}, // [VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK] 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 4, VK_FORMAT_COMPATIBILITY_CLASS_ETC2_EAC_RGBA_BIT}, // [VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK] 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 1, VK_FORMAT_COMPATIBILITY_CLASS_EAC_R_BIT}, // [VK_FORMAT_EAC_R11_UNORM_BLOCK] 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {8, 1, VK_FORMAT_COMPATIBILITY_CLASS_EAC_R_BIT}, // [VK_FORMAT_EAC_R11_SNORM_BLOCK] 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 2, VK_FORMAT_COMPATIBILITY_CLASS_EAC_RG_BIT}, // [VK_FORMAT_EAC_R11G11_UNORM_BLOCK] 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 2, VK_FORMAT_COMPATIBILITY_CLASS_EAC_RG_BIT}, // [VK_FORMAT_EAC_R11G11_SNORM_BLOCK] 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_4X4_BIT}, // [VK_FORMAT_ASTC_4x4_UNORM_BLOCK] 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_4X4_BIT}, // [VK_FORMAT_ASTC_4x4_SRGB_BLOCK] 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_5X4_BIT}, // [VK_FORMAT_ASTC_5x4_UNORM_BLOCK] 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_5X4_BIT}, // [VK_FORMAT_ASTC_5x4_SRGB_BLOCK] 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_5X5_BIT}, // [VK_FORMAT_ASTC_5x5_UNORM_BLOCK] 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_5X5_BIT}, // [VK_FORMAT_ASTC_5x5_SRGB_BLOCK] 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_6X5_BIT}, // [VK_FORMAT_ASTC_6x5_UNORM_BLOCK] 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_6X5_BIT}, // [VK_FORMAT_ASTC_6x5_SRGB_BLOCK] 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_6X6_BIT}, // [VK_FORMAT_ASTC_6x6_UNORM_BLOCK] 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_6X6_BIT}, // [VK_FORMAT_ASTC_6x6_SRGB_BLOCK] 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_8X5_BIT}, // [VK_FORMAT_ASTC_8x5_UNORM_BLOCK] 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_8X5_BIT}, // [VK_FORMAT_ASTC_8x5_SRGB_BLOCK] 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_8X6_BIT}, // [VK_FORMAT_ASTC_8x6_UNORM_BLOCK] 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_8X6_BIT}, // [VK_FORMAT_ASTC_8x6_SRGB_BLOCK] 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_8X8_BIT}, // [VK_FORMAT_ASTC_8x8_UNORM_BLOCK] 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_8X8_BIT}, // [VK_FORMAT_ASTC_8x8_SRGB_BLOCK] 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X5_BIT}, // [VK_FORMAT_ASTC_10x5_UNORM_BLOCK] 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X5_BIT}, // [VK_FORMAT_ASTC_10x5_SRGB_BLOCK] 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X6_BIT}, // [VK_FORMAT_ASTC_10x6_UNORM_BLOCK] 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X6_BIT}, // [VK_FORMAT_ASTC_10x6_SRGB_BLOCK] 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X8_BIT}, // [VK_FORMAT_ASTC_10x8_UNORM_BLOCK] 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X8_BIT}, // [VK_FORMAT_ASTC_10x8_SRGB_BLOCK] 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X10_BIT}, // [VK_FORMAT_ASTC_10x10_UNORM_BLOCK] 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_10X10_BIT}, // [VK_FORMAT_ASTC_10x10_SRGB_BLOCK] 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_12X10_BIT}, // [VK_FORMAT_ASTC_12x10_UNORM_BLOCK] 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_12X10_BIT}, // [VK_FORMAT_ASTC_12x10_SRGB_BLOCK] 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_12X12_BIT}, // [VK_FORMAT_ASTC_12x12_UNORM_BLOCK] 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert {16, 4, VK_FORMAT_COMPATIBILITY_CLASS_ASTC_12X12_BIT}, // [VK_FORMAT_ASTC_12x12_SRGB_BLOCK] 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is a depth or stencil format 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_depth_or_stencil(VkFormat format) { 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return (vk_format_is_depth_and_stencil(format) || vk_format_is_depth_only(format) || vk_format_is_stencil_only(format)); 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format contains depth and stencil information 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_depth_and_stencil(VkFormat format) { 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_ds = false; 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_D16_UNORM_S8_UINT: 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_D24_UNORM_S8_UINT: 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_D32_SFLOAT_S8_UINT: 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_ds = true; 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_ds; 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is a stencil-only format 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_stencil_only(VkFormat format) { return (format == VK_FORMAT_S8_UINT); } 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is a depth-only format 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_depth_only(VkFormat format) { 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_depth = false; 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_D16_UNORM: 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_X8_D24_UNORM_PACK32: 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_D32_SFLOAT: 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_depth = true; 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_depth; 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is of time UNORM 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_norm(VkFormat format) { 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_norm = false; 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R4G4_UNORM_PACK8: 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R4G4B4A4_UNORM_PACK16: 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R5G6B5_UNORM_PACK16: 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R5G5B5A1_UNORM_PACK16: 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A1R5G5B5_UNORM_PACK16: 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8_UNORM: 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8_SNORM: 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8_UNORM: 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8_SNORM: 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8_UNORM: 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8_SNORM: 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8A8_UNORM: 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8A8_SNORM: 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A8B8G8R8_UNORM_PACK32: 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A8B8G8R8_SNORM_PACK32: 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2B10G10R10_UNORM_PACK32: 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2B10G10R10_SNORM_PACK32: 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16_UNORM: 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16_SNORM: 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16_UNORM: 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16_SNORM: 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16_UNORM: 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16_SNORM: 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16A16_UNORM: 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16A16_SNORM: 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC1_RGB_UNORM_BLOCK: 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC2_UNORM_BLOCK: 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC3_UNORM_BLOCK: 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC4_UNORM_BLOCK: 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC4_SNORM_BLOCK: 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC5_UNORM_BLOCK: 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC5_SNORM_BLOCK: 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC7_UNORM_BLOCK: 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11_UNORM_BLOCK: 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11_SNORM_BLOCK: 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11G11_UNORM_BLOCK: 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11G11_SNORM_BLOCK: 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_4x4_UNORM_BLOCK: 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x4_UNORM_BLOCK: 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x5_UNORM_BLOCK: 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x5_UNORM_BLOCK: 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x6_UNORM_BLOCK: 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x5_UNORM_BLOCK: 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x6_UNORM_BLOCK: 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x8_UNORM_BLOCK: 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x5_UNORM_BLOCK: 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x6_UNORM_BLOCK: 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x8_UNORM_BLOCK: 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x10_UNORM_BLOCK: 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x10_UNORM_BLOCK: 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x12_UNORM_BLOCK: 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B5G6R5_UNORM_PACK16: 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8_UNORM: 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8_SNORM: 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8A8_UNORM: 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8A8_SNORM: 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2R10G10B10_UNORM_PACK32: 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2R10G10B10_SNORM_PACK32: 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_norm = true; 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_norm; 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is an integer format 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_int(VkFormat format) { return (vk_format_is_sint(format) || vk_format_is_uint(format)); } 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is an unsigned integer format 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_uint(VkFormat format) { 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_uint = false; 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8_UINT: 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8_UINT: 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8_UINT: 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8A8_UINT: 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A8B8G8R8_UINT_PACK32: 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2B10G10R10_UINT_PACK32: 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16_UINT: 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16_UINT: 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16_UINT: 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16A16_UINT: 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32_UINT: 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32_UINT: 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32B32_UINT: 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32B32A32_UINT: 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64_UINT: 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64_UINT: 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64B64_UINT: 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64B64A64_UINT: 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8_UINT: 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8A8_UINT: 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2R10G10B10_UINT_PACK32: 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_uint = true; 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_uint; 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is a signed integer format 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_sint(VkFormat format) { 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_sint = false; 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8_SINT: 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8_SINT: 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8_SINT: 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8A8_SINT: 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A8B8G8R8_SINT_PACK32: 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2B10G10R10_SINT_PACK32: 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16_SINT: 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16_SINT: 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16_SINT: 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16A16_SINT: 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32_SINT: 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32_SINT: 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32B32_SINT: 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32B32A32_SINT: 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64_SINT: 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64_SINT: 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64B64_SINT: 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64B64A64_SINT: 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8_SINT: 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8A8_SINT: 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A2R10G10B10_SINT_PACK32: 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_sint = true; 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_sint; 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is a floating-point format 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_float(VkFormat format) { 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_float = false; 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16_SFLOAT: 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16_SFLOAT: 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16_SFLOAT: 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R16G16B16A16_SFLOAT: 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32_SFLOAT: 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32_SFLOAT: 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32B32_SFLOAT: 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R32G32B32A32_SFLOAT: 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64_SFLOAT: 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64_SFLOAT: 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64B64_SFLOAT: 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R64G64B64A64_SFLOAT: 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B10G11R11_UFLOAT_PACK32: 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC6H_UFLOAT_BLOCK: 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC6H_SFLOAT_BLOCK: 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_float = true; 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_float; 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is in the SRGB colorspace 44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_srgb(VkFormat format) { 44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool is_srgb = false; 44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8_SRGB: 44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8_SRGB: 45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8_SRGB: 45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_R8G8B8A8_SRGB: 45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_A8B8G8R8_SRGB_PACK32: 45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC1_RGB_SRGB_BLOCK: 45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC2_SRGB_BLOCK: 45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC3_SRGB_BLOCK: 45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC7_SRGB_BLOCK: 45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: 45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: 45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: 46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_4x4_SRGB_BLOCK: 46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x4_SRGB_BLOCK: 46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x5_SRGB_BLOCK: 46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x5_SRGB_BLOCK: 46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x6_SRGB_BLOCK: 46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x5_SRGB_BLOCK: 46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x6_SRGB_BLOCK: 46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x8_SRGB_BLOCK: 46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x5_SRGB_BLOCK: 46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x6_SRGB_BLOCK: 47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x8_SRGB_BLOCK: 47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x10_SRGB_BLOCK: 47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x10_SRGB_BLOCK: 47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: 47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8_SRGB: 47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_B8G8R8A8_SRGB: 47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert is_srgb = true; 47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return is_srgb; 48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return true if format is compressed 48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool vk_format_is_compressed(VkFormat format) { 48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch (format) { 48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC1_RGB_UNORM_BLOCK: 48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC1_RGB_SRGB_BLOCK: 49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC2_UNORM_BLOCK: 49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC2_SRGB_BLOCK: 49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC3_UNORM_BLOCK: 49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC3_SRGB_BLOCK: 49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC4_UNORM_BLOCK: 49511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC4_SNORM_BLOCK: 49611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC5_UNORM_BLOCK: 49711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC5_SNORM_BLOCK: 49811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC6H_UFLOAT_BLOCK: 49911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC6H_SFLOAT_BLOCK: 50011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC7_UNORM_BLOCK: 50111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_BC7_SRGB_BLOCK: 50211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: 50311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: 50411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: 50511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: 50611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: 50711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: 50811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11_UNORM_BLOCK: 50911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11_SNORM_BLOCK: 51011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11G11_UNORM_BLOCK: 51111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_EAC_R11G11_SNORM_BLOCK: 51211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_4x4_UNORM_BLOCK: 51311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_4x4_SRGB_BLOCK: 51411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x4_UNORM_BLOCK: 51511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x4_SRGB_BLOCK: 51611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x5_UNORM_BLOCK: 51711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_5x5_SRGB_BLOCK: 51811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x5_UNORM_BLOCK: 51911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x5_SRGB_BLOCK: 52011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x6_UNORM_BLOCK: 52111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_6x6_SRGB_BLOCK: 52211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x5_UNORM_BLOCK: 52311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x5_SRGB_BLOCK: 52411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x6_UNORM_BLOCK: 52511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x6_SRGB_BLOCK: 52611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x8_UNORM_BLOCK: 52711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_8x8_SRGB_BLOCK: 52811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x5_UNORM_BLOCK: 52911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x5_SRGB_BLOCK: 53011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x6_UNORM_BLOCK: 53111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x6_SRGB_BLOCK: 53211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x8_UNORM_BLOCK: 53311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x8_SRGB_BLOCK: 53411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x10_UNORM_BLOCK: 53511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_10x10_SRGB_BLOCK: 53611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x10_UNORM_BLOCK: 53711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x10_SRGB_BLOCK: 53811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x12_UNORM_BLOCK: 53911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: 54011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return true; 54111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert default: 54211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return false; 54311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 54411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 54511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return format class of the specified format 54711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertVkFormatCompatibilityClass vk_format_get_compatibility_class(VkFormat format) { return vk_format_table[format].format_class; } 54811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return size, in bytes, of a pixel of the specified format 55011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t vk_format_get_size(VkFormat format) { return vk_format_table[format].size; } 55111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Return the number of channels for a given format 55311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertunsigned int vk_format_get_channel_count(VkFormat format) { return vk_format_table[format].channel_count; } 55411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Perform a zero-tolerant modulo operation 55611cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertVkDeviceSize vk_safe_modulo(VkDeviceSize dividend, VkDeviceSize divisor) { 55711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert VkDeviceSize result = 0; 55811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (divisor != 0) { 55911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result = dividend % divisor; 56011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 56111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return result; 56211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 56311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_ONE_BYTE_CODE = 0xC0; 56511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_ONE_BYTE_MASK = 0xE0; 56611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_TWO_BYTE_CODE = 0xE0; 56711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_TWO_BYTE_MASK = 0xF0; 56811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_THREE_BYTE_CODE = 0xF0; 56911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_THREE_BYTE_MASK = 0xF8; 57011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_DATA_BYTE_CODE = 0x80; 57111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstatic const uint8_t UTF8_DATA_BYTE_MASK = 0xC0; 57211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57311cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertVkStringErrorFlags vk_string_validate(const int max_length, const char *utf8) { 57411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert VkStringErrorFlags result = VK_STRING_ERROR_NONE; 57511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int num_char_bytes = 0; 57611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int i, j; 57711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (i = 0; i < max_length; i++) { 57911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (utf8[i] == 0) { 58011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 58111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } else if ((utf8[i] >= 0xa) && (utf8[i] < 0x7f)) { 58211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert num_char_bytes = 0; 58311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } else if ((utf8[i] & UTF8_ONE_BYTE_MASK) == UTF8_ONE_BYTE_CODE) { 58411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert num_char_bytes = 1; 58511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } else if ((utf8[i] & UTF8_TWO_BYTE_MASK) == UTF8_TWO_BYTE_CODE) { 58611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert num_char_bytes = 2; 58711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } else if ((utf8[i] & UTF8_THREE_BYTE_MASK) == UTF8_THREE_BYTE_CODE) { 58811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert num_char_bytes = 3; 58911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } else { 59011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result = VK_STRING_ERROR_BAD_DATA; 59111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 59211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Validate the following num_char_bytes of data 59411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for (j = 0; (j < num_char_bytes) && (i < max_length); j++) { 59511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (++i == max_length) { 59611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result |= VK_STRING_ERROR_LENGTH; 59711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; 59811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 59911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if ((utf8[i] & UTF8_DATA_BYTE_MASK) != UTF8_DATA_BYTE_CODE) { 60011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result |= VK_STRING_ERROR_BAD_DATA; 60111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 60211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 60311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 60411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return result; 60511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 60611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 60711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid layer_debug_actions(debug_report_data *report_data, std::vector<VkDebugReportCallbackEXT> &logging_callback, 60811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const VkAllocationCallbacks *pAllocator, const char *layer_identifier) { 60911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 61011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t report_flags = 0; 61111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert uint32_t debug_action = 0; 61211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert VkDebugReportCallbackEXT callback = VK_NULL_HANDLE; 61311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 61411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::string report_flags_key = layer_identifier; 61511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::string debug_action_key = layer_identifier; 61611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert std::string log_filename_key = layer_identifier; 61711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert report_flags_key.append(".report_flags"); 61811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert debug_action_key.append(".debug_action"); 61911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert log_filename_key.append(".log_filename"); 62011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 62111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // initialize layer options 62211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert report_flags = getLayerOptionFlags(report_flags_key.c_str(), 0); 62311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert getLayerOptionEnum(debug_action_key.c_str(), (uint32_t *)&debug_action); 62411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 62511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (debug_action & VK_DBG_LAYER_ACTION_LOG_MSG) { 62611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char *log_filename = getLayerOption(log_filename_key.c_str()); 62711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert FILE *log_output = getLayerLogOutput(log_filename, layer_identifier); 62811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert VkDebugReportCallbackCreateInfoEXT dbgCreateInfo; 62911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo)); 63011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; 63111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.flags = report_flags; 63211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.pfnCallback = log_callback; 63311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.pUserData = (void *)log_output; 63411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert layer_create_msg_callback(report_data, &dbgCreateInfo, pAllocator, &callback); 63511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert logging_callback.push_back(callback); 63611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 63711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 63811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) { 63911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert VkDebugReportCallbackCreateInfoEXT dbgCreateInfo; 64011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo)); 64111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT; 64211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.flags = report_flags; 64311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.pfnCallback = win32_debug_output_msg; 64411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert dbgCreateInfo.pUserData = NULL; 64511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert layer_create_msg_callback(report_data, &dbgCreateInfo, pAllocator, &callback); 64611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert logging_callback.push_back(callback); 64711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 64811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 649