blob: 620ecd4a58b0dc869ffaad4e4355b231f1cb1db2 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2015-2016 The Khronos Group Inc.
// Copyright (c) 2015-2016 Valve Corporation
// Copyright (c) 2015-2016 LunarG, Inc.
// Copyright (c) 2015-2016 Google, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///////////////////////////////////////////////////////////////////////////////
#include "vkjson.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <json/json.h>
#include <algorithm>
#include <cinttypes>
#include <cmath>
#include <cstdio>
#include <limits>
#include <memory>
#include <sstream>
#include <type_traits>
#include <utility>
/*
* This file is autogenerated by vkjson_generator.py. Do not edit directly.
*/
namespace {
/*
* Annotation to tell clang that we intend to fall through from one case to
* another in a switch. Sourced from android-base/macros.h.
*/
#define FALLTHROUGH_INTENDED [[clang::fallthrough]]
inline bool IsIntegral(double value) {
#if defined(ANDROID)
// Android NDK doesn't provide std::trunc yet
return trunc(value) == value;
#else
return std::trunc(value) == value;
#endif
}
// Floating point fields of Vulkan structure use single precision. The string
// output of max double value in c++ will be larger than Java double's infinity
// value. Below fake double max/min values are only to serve the safe json text
// parsing in between C++ and Java, because Java json library simply cannot
// handle infinity.
static const double SAFE_DOUBLE_MAX = 0.99 * std::numeric_limits<double>::max();
static const double SAFE_DOUBLE_MIN = -SAFE_DOUBLE_MAX;
template <typename T>
struct EnumTraits;
template <>
struct EnumTraits<VkImageLayout> {
static bool exist(uint32_t e) {
switch (e) {
case VK_IMAGE_LAYOUT_UNDEFINED:
case VK_IMAGE_LAYOUT_GENERAL:
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
case VK_IMAGE_LAYOUT_PREINITIALIZED:
case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL:
case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL:
case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL:
case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL:
case VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL:
case VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL:
case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL:
case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL:
case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:
case VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR:
case VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR:
case VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR:
case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:
case VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT:
case VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR:
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR:
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR:
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR:
#endif
case VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkImageType> {
static bool exist(uint32_t e) {
switch (e) {
case VK_IMAGE_TYPE_1D:
case VK_IMAGE_TYPE_2D:
case VK_IMAGE_TYPE_3D:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkImageTiling> {
static bool exist(uint32_t e) {
switch (e) {
case VK_IMAGE_TILING_OPTIMAL:
case VK_IMAGE_TILING_LINEAR:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkPhysicalDeviceType> {
static bool exist(uint32_t e) {
switch (e) {
case VK_PHYSICAL_DEVICE_TYPE_OTHER:
case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:
case VK_PHYSICAL_DEVICE_TYPE_CPU:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkFormat> {
static bool exist(uint32_t e) {
switch (e) {
case VK_FORMAT_UNDEFINED:
case VK_FORMAT_R4G4_UNORM_PACK8:
case VK_FORMAT_R4G4B4A4_UNORM_PACK16:
case VK_FORMAT_B4G4R4A4_UNORM_PACK16:
case VK_FORMAT_R5G6B5_UNORM_PACK16:
case VK_FORMAT_B5G6R5_UNORM_PACK16:
case VK_FORMAT_R5G5B5A1_UNORM_PACK16:
case VK_FORMAT_B5G5R5A1_UNORM_PACK16:
case VK_FORMAT_A1R5G5B5_UNORM_PACK16:
case VK_FORMAT_R8_UNORM:
case VK_FORMAT_R8_SNORM:
case VK_FORMAT_R8_USCALED:
case VK_FORMAT_R8_SSCALED:
case VK_FORMAT_R8_UINT:
case VK_FORMAT_R8_SINT:
case VK_FORMAT_R8_SRGB:
case VK_FORMAT_R8G8_UNORM:
case VK_FORMAT_R8G8_SNORM:
case VK_FORMAT_R8G8_USCALED:
case VK_FORMAT_R8G8_SSCALED:
case VK_FORMAT_R8G8_UINT:
case VK_FORMAT_R8G8_SINT:
case VK_FORMAT_R8G8_SRGB:
case VK_FORMAT_R8G8B8_UNORM:
case VK_FORMAT_R8G8B8_SNORM:
case VK_FORMAT_R8G8B8_USCALED:
case VK_FORMAT_R8G8B8_SSCALED:
case VK_FORMAT_R8G8B8_UINT:
case VK_FORMAT_R8G8B8_SINT:
case VK_FORMAT_R8G8B8_SRGB:
case VK_FORMAT_B8G8R8_UNORM:
case VK_FORMAT_B8G8R8_SNORM:
case VK_FORMAT_B8G8R8_USCALED:
case VK_FORMAT_B8G8R8_SSCALED:
case VK_FORMAT_B8G8R8_UINT:
case VK_FORMAT_B8G8R8_SINT:
case VK_FORMAT_B8G8R8_SRGB:
case VK_FORMAT_R8G8B8A8_UNORM:
case VK_FORMAT_R8G8B8A8_SNORM:
case VK_FORMAT_R8G8B8A8_USCALED:
case VK_FORMAT_R8G8B8A8_SSCALED:
case VK_FORMAT_R8G8B8A8_UINT:
case VK_FORMAT_R8G8B8A8_SINT:
case VK_FORMAT_R8G8B8A8_SRGB:
case VK_FORMAT_B8G8R8A8_UNORM:
case VK_FORMAT_B8G8R8A8_SNORM:
case VK_FORMAT_B8G8R8A8_USCALED:
case VK_FORMAT_B8G8R8A8_SSCALED:
case VK_FORMAT_B8G8R8A8_UINT:
case VK_FORMAT_B8G8R8A8_SINT:
case VK_FORMAT_B8G8R8A8_SRGB:
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
case VK_FORMAT_A8B8G8R8_USCALED_PACK32:
case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
case VK_FORMAT_A2R10G10B10_SNORM_PACK32:
case VK_FORMAT_A2R10G10B10_USCALED_PACK32:
case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:
case VK_FORMAT_A2R10G10B10_UINT_PACK32:
case VK_FORMAT_A2R10G10B10_SINT_PACK32:
case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
case VK_FORMAT_A2B10G10R10_SNORM_PACK32:
case VK_FORMAT_A2B10G10R10_USCALED_PACK32:
case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:
case VK_FORMAT_A2B10G10R10_UINT_PACK32:
case VK_FORMAT_A2B10G10R10_SINT_PACK32:
case VK_FORMAT_R16_UNORM:
case VK_FORMAT_R16_SNORM:
case VK_FORMAT_R16_USCALED:
case VK_FORMAT_R16_SSCALED:
case VK_FORMAT_R16_UINT:
case VK_FORMAT_R16_SINT:
case VK_FORMAT_R16_SFLOAT:
case VK_FORMAT_R16G16_UNORM:
case VK_FORMAT_R16G16_SNORM:
case VK_FORMAT_R16G16_USCALED:
case VK_FORMAT_R16G16_SSCALED:
case VK_FORMAT_R16G16_UINT:
case VK_FORMAT_R16G16_SINT:
case VK_FORMAT_R16G16_SFLOAT:
case VK_FORMAT_R16G16B16_UNORM:
case VK_FORMAT_R16G16B16_SNORM:
case VK_FORMAT_R16G16B16_USCALED:
case VK_FORMAT_R16G16B16_SSCALED:
case VK_FORMAT_R16G16B16_UINT:
case VK_FORMAT_R16G16B16_SINT:
case VK_FORMAT_R16G16B16_SFLOAT:
case VK_FORMAT_R16G16B16A16_UNORM:
case VK_FORMAT_R16G16B16A16_SNORM:
case VK_FORMAT_R16G16B16A16_USCALED:
case VK_FORMAT_R16G16B16A16_SSCALED:
case VK_FORMAT_R16G16B16A16_UINT:
case VK_FORMAT_R16G16B16A16_SINT:
case VK_FORMAT_R16G16B16A16_SFLOAT:
case VK_FORMAT_R32_UINT:
case VK_FORMAT_R32_SINT:
case VK_FORMAT_R32_SFLOAT:
case VK_FORMAT_R32G32_UINT:
case VK_FORMAT_R32G32_SINT:
case VK_FORMAT_R32G32_SFLOAT:
case VK_FORMAT_R32G32B32_UINT:
case VK_FORMAT_R32G32B32_SINT:
case VK_FORMAT_R32G32B32_SFLOAT:
case VK_FORMAT_R32G32B32A32_UINT:
case VK_FORMAT_R32G32B32A32_SINT:
case VK_FORMAT_R32G32B32A32_SFLOAT:
case VK_FORMAT_R64_UINT:
case VK_FORMAT_R64_SINT:
case VK_FORMAT_R64_SFLOAT:
case VK_FORMAT_R64G64_UINT:
case VK_FORMAT_R64G64_SINT:
case VK_FORMAT_R64G64_SFLOAT:
case VK_FORMAT_R64G64B64_UINT:
case VK_FORMAT_R64G64B64_SINT:
case VK_FORMAT_R64G64B64_SFLOAT:
case VK_FORMAT_R64G64B64A64_UINT:
case VK_FORMAT_R64G64B64A64_SINT:
case VK_FORMAT_R64G64B64A64_SFLOAT:
case VK_FORMAT_B10G11R11_UFLOAT_PACK32:
case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_X8_D24_UNORM_PACK32:
case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_S8_UINT:
case VK_FORMAT_D16_UNORM_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
case VK_FORMAT_BC1_RGB_UNORM_BLOCK:
case VK_FORMAT_BC1_RGB_SRGB_BLOCK:
case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:
case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:
case VK_FORMAT_BC2_UNORM_BLOCK:
case VK_FORMAT_BC2_SRGB_BLOCK:
case VK_FORMAT_BC3_UNORM_BLOCK:
case VK_FORMAT_BC3_SRGB_BLOCK:
case VK_FORMAT_BC4_UNORM_BLOCK:
case VK_FORMAT_BC4_SNORM_BLOCK:
case VK_FORMAT_BC5_UNORM_BLOCK:
case VK_FORMAT_BC5_SNORM_BLOCK:
case VK_FORMAT_BC6H_UFLOAT_BLOCK:
case VK_FORMAT_BC6H_SFLOAT_BLOCK:
case VK_FORMAT_BC7_UNORM_BLOCK:
case VK_FORMAT_BC7_SRGB_BLOCK:
case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:
case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:
case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:
case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
case VK_FORMAT_EAC_R11_UNORM_BLOCK:
case VK_FORMAT_EAC_R11_SNORM_BLOCK:
case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:
case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:
case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
case VK_FORMAT_G8B8G8R8_422_UNORM:
case VK_FORMAT_B8G8R8G8_422_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:
case VK_FORMAT_R10X6_UNORM_PACK16:
case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:
case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:
case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:
case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:
case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:
case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:
case VK_FORMAT_R12X4_UNORM_PACK16:
case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:
case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:
case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:
case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:
case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:
case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:
case VK_FORMAT_G16B16G16R16_422_UNORM:
case VK_FORMAT_B16G16R16G16_422_UNORM:
case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:
case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:
case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM:
case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16:
case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16:
case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM:
case VK_FORMAT_A4R4G4B4_UNORM_PACK16:
case VK_FORMAT_A4B4G4R4_UNORM_PACK16:
case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK:
case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK:
case VK_FORMAT_A1B5G5R5_UNORM_PACK16:
case VK_FORMAT_A8_UNORM:
case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:
case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:
case VK_FORMAT_R8_BOOL_ARM:
case VK_FORMAT_R16G16_SFIXED5_NV:
case VK_FORMAT_R10X6_UINT_PACK16_ARM:
case VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM:
case VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM:
case VK_FORMAT_R12X4_UINT_PACK16_ARM:
case VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM:
case VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM:
case VK_FORMAT_R14X2_UINT_PACK16_ARM:
case VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM:
case VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM:
case VK_FORMAT_R14X2_UNORM_PACK16_ARM:
case VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM:
case VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM:
case VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM:
case VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkRayTracingInvocationReorderModeNV> {
static bool exist(uint32_t e) {
switch (e) {
case VK_RAY_TRACING_INVOCATION_REORDER_MODE_NONE_NV:
case VK_RAY_TRACING_INVOCATION_REORDER_MODE_REORDER_NV:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkSampleCountFlagBits> {
static bool exist(uint32_t e) {
switch (e) {
case VK_SAMPLE_COUNT_1_BIT:
case VK_SAMPLE_COUNT_2_BIT:
case VK_SAMPLE_COUNT_4_BIT:
case VK_SAMPLE_COUNT_8_BIT:
case VK_SAMPLE_COUNT_16_BIT:
case VK_SAMPLE_COUNT_32_BIT:
case VK_SAMPLE_COUNT_64_BIT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkExternalMemoryHandleTypeFlagBits> {
static bool exist(uint32_t e) {
switch (e) {
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT:
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT:
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT:
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT:
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT:
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT:
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkExternalSemaphoreHandleTypeFlagBits> {
static bool exist(uint32_t e) {
switch (e) {
case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT:
case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT:
case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT:
case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT:
case VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkExternalFenceHandleTypeFlagBits> {
static bool exist(uint32_t e) {
switch (e) {
case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT:
case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT:
case VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT:
case VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkPointClippingBehavior> {
static bool exist(uint32_t e) {
switch (e) {
case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES:
case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkChromaLocation> {
static bool exist(uint32_t e) {
switch (e) {
case VK_CHROMA_LOCATION_COSITED_EVEN:
case VK_CHROMA_LOCATION_MIDPOINT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkDriverId> {
static bool exist(uint32_t e) {
switch (e) {
case VK_DRIVER_ID_AMD_PROPRIETARY:
case VK_DRIVER_ID_AMD_OPEN_SOURCE:
case VK_DRIVER_ID_MESA_RADV:
case VK_DRIVER_ID_NVIDIA_PROPRIETARY:
case VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS:
case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA:
case VK_DRIVER_ID_IMAGINATION_PROPRIETARY:
case VK_DRIVER_ID_QUALCOMM_PROPRIETARY:
case VK_DRIVER_ID_ARM_PROPRIETARY:
case VK_DRIVER_ID_GOOGLE_SWIFTSHADER:
case VK_DRIVER_ID_GGP_PROPRIETARY:
case VK_DRIVER_ID_BROADCOM_PROPRIETARY:
case VK_DRIVER_ID_MESA_LLVMPIPE:
case VK_DRIVER_ID_MOLTENVK:
case VK_DRIVER_ID_COREAVI_PROPRIETARY:
case VK_DRIVER_ID_JUICE_PROPRIETARY:
case VK_DRIVER_ID_VERISILICON_PROPRIETARY:
case VK_DRIVER_ID_MESA_TURNIP:
case VK_DRIVER_ID_MESA_V3DV:
case VK_DRIVER_ID_MESA_PANVK:
case VK_DRIVER_ID_SAMSUNG_PROPRIETARY:
case VK_DRIVER_ID_MESA_VENUS:
case VK_DRIVER_ID_MESA_DOZEN:
case VK_DRIVER_ID_MESA_NVK:
case VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA:
case VK_DRIVER_ID_MESA_HONEYKRISP:
case VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkShaderFloatControlsIndependence> {
static bool exist(uint32_t e) {
switch (e) {
case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY:
case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL:
case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkPipelineRobustnessBufferBehavior> {
static bool exist(uint32_t e) {
switch (e) {
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT:
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED:
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS:
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkPipelineRobustnessImageBehavior> {
static bool exist(uint32_t e) {
switch (e) {
case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT:
case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED:
case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS:
case VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkPhysicalDeviceLayeredApiKHR> {
static bool exist(uint32_t e) {
switch (e) {
case VK_PHYSICAL_DEVICE_LAYERED_API_VULKAN_KHR:
case VK_PHYSICAL_DEVICE_LAYERED_API_D3D12_KHR:
case VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR:
case VK_PHYSICAL_DEVICE_LAYERED_API_OPENGL_KHR:
case VK_PHYSICAL_DEVICE_LAYERED_API_OPENGLES_KHR:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkLayeredDriverUnderlyingApiMSFT> {
static bool exist(uint32_t e) {
switch (e) {
case VK_LAYERED_DRIVER_UNDERLYING_API_NONE_MSFT:
case VK_LAYERED_DRIVER_UNDERLYING_API_D3D12_MSFT:
return true;
}
return false;
}
};
template <>
struct EnumTraits<VkDefaultVertexAttributeValueKHR> {
static bool exist(uint32_t e) {
switch (e) {
case VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR:
case VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR:
return true;
}
return false;
}
};
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkExtent3D* extents) {
return visitor->Visit("width", &extents->width) &&
visitor->Visit("height", &extents->height) &&
visitor->Visit("depth", &extents->depth);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLayeredApiPropertiesKHR* properties) {
return visitor->Visit("vendorID", &properties->vendorID) &&
visitor->Visit("deviceID", &properties->deviceID) &&
visitor->Visit("layeredAPI", &properties->layeredAPI) &&
visitor->Visit("deviceName", &properties->deviceName);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkExtent2D* extents) {
return visitor->Visit("width", &extents->width) &&
visitor->Visit("height", &extents->height);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkConformanceVersionKHR* version) {
return visitor->Visit("major", &version->major) &&
visitor->Visit("minor", &version->minor) &&
visitor->Visit("subminor", &version->subminor) &&
visitor->Visit("patch", &version->patch);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkMemoryType* type) {
return visitor->Visit("propertyFlags", &type->propertyFlags) &&
visitor->Visit("heapIndex", &type->heapIndex);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkMemoryHeap* heap) {
return visitor->Visit("size", &heap->size) &&
visitor->Visit("flags", &heap->flags);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonCore11* core) {
return visitor->Visit("features", &core->features) &&
visitor->Visit("properties", &core->properties);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonCore12* core) {
return visitor->Visit("features", &core->features) &&
visitor->Visit("properties", &core->properties);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonCore13* core) {
return visitor->Visit("features", &core->features) &&
visitor->Visit("properties", &core->properties);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonCore14* core) {
return visitor->Visit("features", &core->features) &&
visitor->Visit("properties", &core->properties);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonAMDAntiLag* structs) {
return visitor->Visit("antiLagFeaturesAMD", &structs->anti_lag_features_amd);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonAMDDeviceCoherentMemory* structs) {
return visitor->Visit("coherentMemoryFeaturesAMD",
&structs->coherent_memory_features_amd);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonAMDShaderCoreProperties* structs) {
return visitor->Visit("shaderCorePropertiesAMD",
&structs->shader_core_properties_amd);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonAMDShaderCoreProperties2* structs) {
return visitor->Visit("shaderCoreProperties2AMD",
&structs->shader_core_properties2_amd);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonAMDShaderEarlyAndLateFragmentTests* structs) {
return visitor->Visit(
"shaderEarlyAndLateFragmentTestsFeaturesAMD",
&structs->shader_early_and_late_fragment_tests_features_amd);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonANDROIDExternalFormatResolve* structs) {
return visitor->Visit("externalFormatResolveFeaturesANDROID",
&structs->external_format_resolve_features_android) &&
visitor->Visit("externalFormatResolvePropertiesANDROID",
&structs->external_format_resolve_properties_android);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonARMFormatPack* structs) {
return visitor->Visit("formatPackFeaturesARM",
&structs->format_pack_features_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonARMPipelineOpacityMicromap* structs) {
return visitor->Visit("pipelineOpacityMicromapFeaturesARM",
&structs->pipeline_opacity_micromap_features_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonARMRasterizationOrderAttachmentAccess* structs) {
return visitor->Visit(
"rasterizationOrderAttachmentAccessFeaturesARM",
&structs->rasterization_order_attachment_access_features_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonARMRenderPassStriped* structs) {
return visitor->Visit("renderPassStripedFeaturesARM",
&structs->render_pass_striped_features_arm) &&
visitor->Visit("renderPassStripedPropertiesARM",
&structs->render_pass_striped_properties_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonARMSchedulingControls* structs) {
return visitor->Visit("schedulingControlsFeaturesARM",
&structs->scheduling_controls_features_arm) &&
visitor->Visit("schedulingControlsPropertiesARM",
&structs->scheduling_controls_properties_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonARMShaderCoreBuiltins* structs) {
return visitor->Visit("shaderCoreBuiltinsFeaturesARM",
&structs->shader_core_builtins_features_arm) &&
visitor->Visit("shaderCoreBuiltinsPropertiesARM",
&structs->shader_core_builtins_properties_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonARMShaderCoreProperties* structs) {
return visitor->Visit("shaderCorePropertiesARM",
&structs->shader_core_properties_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonARMTensors* structs) {
return visitor->Visit("tensorPropertiesARM",
&structs->tensor_properties_arm) &&
visitor->Visit("tensorFeaturesARM", &structs->tensor_features_arm) &&
visitor->Visit("descriptorBufferTensorFeaturesARM",
&structs->descriptor_buffer_tensor_features_arm) &&
visitor->Visit("descriptorBufferTensorPropertiesARM",
&structs->descriptor_buffer_tensor_properties_arm);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExt4444Formats* structs) {
return visitor->Visit("formats4444FeaturesEXT",
&structs->formats_4444_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtAstcDecodeMode* structs) {
return visitor->Visit("ASTCDecodeFeaturesEXT",
&structs->astc_decode_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtAttachmentFeedbackLoopDynamicState* structs) {
return visitor->Visit(
"attachmentFeedbackLoopDynamicStateFeaturesEXT",
&structs->attachment_feedback_loop_dynamic_state_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtAttachmentFeedbackLoopLayout* structs) {
return visitor->Visit("attachmentFeedbackLoopLayoutFeaturesEXT",
&structs->attachment_feedback_loop_layout_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtBlendOperationAdvanced* structs) {
return visitor->Visit("blendOperationAdvancedFeaturesEXT",
&structs->blend_operation_advanced_features_ext) &&
visitor->Visit("blendOperationAdvancedPropertiesEXT",
&structs->blend_operation_advanced_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtBorderColorSwizzle* structs) {
return visitor->Visit("borderColorSwizzleFeaturesEXT",
&structs->border_color_swizzle_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtBufferDeviceAddress* structs) {
return visitor->Visit("bufferAddressFeaturesEXT",
&structs->buffer_address_features_ext) &&
visitor->Visit("bufferDeviceAddressFeaturesEXT",
&structs->buffer_device_address_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtColorWriteEnable* structs) {
return visitor->Visit("colorWriteEnableFeaturesEXT",
&structs->color_write_enable_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtConditionalRendering* structs) {
return visitor->Visit("conditionalRenderingFeaturesEXT",
&structs->conditional_rendering_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtConservativeRasterization* structs) {
return visitor->Visit("conservativeRasterizationPropertiesEXT",
&structs->conservative_rasterization_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtCustomBorderColor* structs) {
return visitor->Visit("customBorderColorPropertiesEXT",
&structs->custom_border_color_properties_ext) &&
visitor->Visit("customBorderColorFeaturesEXT",
&structs->custom_border_color_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDepthBiasControl* structs) {
return visitor->Visit("depthBiasControlFeaturesEXT",
&structs->depth_bias_control_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDepthClampControl* structs) {
return visitor->Visit("depthClampControlFeaturesEXT",
&structs->depth_clamp_control_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDepthClipControl* structs) {
return visitor->Visit("depthClipControlFeaturesEXT",
&structs->depth_clip_control_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDepthClipEnable* structs) {
return visitor->Visit("depthClipEnableFeaturesEXT",
&structs->depth_clip_enable_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDescriptorBuffer* structs) {
return visitor->Visit("descriptorBufferPropertiesEXT",
&structs->descriptor_buffer_properties_ext) &&
visitor->Visit(
"descriptorBufferDensityMapPropertiesEXT",
&structs->descriptor_buffer_density_map_properties_ext) &&
visitor->Visit("descriptorBufferFeaturesEXT",
&structs->descriptor_buffer_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDescriptorIndexing* structs) {
return visitor->Visit("descriptorIndexingFeaturesEXT",
&structs->descriptor_indexing_features_ext) &&
visitor->Visit("descriptorIndexingPropertiesEXT",
&structs->descriptor_indexing_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtDeviceAddressBindingReport* structs) {
return visitor->Visit("addressBindingReportFeaturesEXT",
&structs->address_binding_report_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDeviceFault* structs) {
return visitor->Visit("faultFeaturesEXT", &structs->fault_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtDeviceGeneratedCommands* structs) {
return visitor->Visit("deviceGeneratedCommandsFeaturesEXT",
&structs->device_generated_commands_features_ext) &&
visitor->Visit("deviceGeneratedCommandsPropertiesEXT",
&structs->device_generated_commands_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDeviceMemoryReport* structs) {
return visitor->Visit("deviceMemoryReportFeaturesEXT",
&structs->device_memory_report_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtDiscardRectangles* structs) {
return visitor->Visit("discardRectanglePropertiesEXT",
&structs->discard_rectangle_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtDynamicRenderingUnusedAttachments* structs) {
return visitor->Visit(
"dynamicRenderingUnusedAttachmentsFeaturesEXT",
&structs->dynamic_rendering_unused_attachments_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtExtendedDynamicState* structs) {
return visitor->Visit("extendedDynamicStateFeaturesEXT",
&structs->extended_dynamic_state_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtExtendedDynamicState2* structs) {
return visitor->Visit("extendedDynamicState2FeaturesEXT",
&structs->extended_dynamic_state2_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtExtendedDynamicState3* structs) {
return visitor->Visit("extendedDynamicState3FeaturesEXT",
&structs->extended_dynamic_state3_features_ext) &&
visitor->Visit("extendedDynamicState3PropertiesEXT",
&structs->extended_dynamic_state3_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtExternalMemoryHost* structs) {
return visitor->Visit("externalMemoryHostPropertiesEXT",
&structs->external_memory_host_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtFragmentDensityMap* structs) {
return visitor->Visit("fragmentDensityMapFeaturesEXT",
&structs->fragment_density_map_features_ext) &&
visitor->Visit("fragmentDensityMapPropertiesEXT",
&structs->fragment_density_map_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtFragmentDensityMap2* structs) {
return visitor->Visit("fragmentDensityMap2FeaturesEXT",
&structs->fragment_density_map2_features_ext) &&
visitor->Visit("fragmentDensityMap2PropertiesEXT",
&structs->fragment_density_map2_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtFragmentDensityMapOffset* structs) {
return visitor->Visit("fragmentDensityMapOffsetFeaturesEXT",
&structs->fragment_density_map_offset_features_ext) &&
visitor->Visit("fragmentDensityMapOffsetPropertiesEXT",
&structs->fragment_density_map_offset_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtFragmentShaderInterlock* structs) {
return visitor->Visit("fragmentShaderInterlockFeaturesEXT",
&structs->fragment_shader_interlock_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtFrameBoundary* structs) {
return visitor->Visit("frameBoundaryFeaturesEXT",
&structs->frame_boundary_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtGlobalPriorityQuery* structs) {
return visitor->Visit("globalPriorityQueryFeaturesEXT",
&structs->global_priority_query_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtGraphicsPipelineLibrary* structs) {
return visitor->Visit("graphicsPipelineLibraryFeaturesEXT",
&structs->graphics_pipeline_library_features_ext) &&
visitor->Visit("graphicsPipelineLibraryPropertiesEXT",
&structs->graphics_pipeline_library_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtHostImageCopy* structs) {
return visitor->Visit("hostImageCopyFeaturesEXT",
&structs->host_image_copy_features_ext) &&
visitor->Visit("hostImageCopyPropertiesEXT",
&structs->host_image_copy_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtHostQueryReset* structs) {
return visitor->Visit("hostQueryResetFeaturesEXT",
&structs->host_query_reset_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtImage2dViewOf3d* structs) {
return visitor->Visit("image2DViewOf3DFeaturesEXT",
&structs->image_2d_view_of_3d_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtImageCompressionControl* structs) {
return visitor->Visit("imageCompressionControlFeaturesEXT",
&structs->image_compression_control_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtImageCompressionControlSwapchain* structs) {
return visitor->Visit(
"imageCompressionControlSwapchainFeaturesEXT",
&structs->image_compression_control_swapchain_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtImageRobustness* structs) {
return visitor->Visit("imageRobustnessFeaturesEXT",
&structs->image_robustness_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtImageSlicedViewOf3d* structs) {
return visitor->Visit("imageSlicedViewOf3DFeaturesEXT",
&structs->image_sliced_view_of_3d_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtImageViewMinLod* structs) {
return visitor->Visit("imageViewMinLodFeaturesEXT",
&structs->image_view_min_lod_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtIndexTypeUint8* structs) {
return visitor->Visit("indexTypeUint8FeaturesEXT",
&structs->index_type_uint8_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtInlineUniformBlock* structs) {
return visitor->Visit("inlineUniformBlockFeaturesEXT",
&structs->inline_uniform_block_features_ext) &&
visitor->Visit("inlineUniformBlockPropertiesEXT",
&structs->inline_uniform_block_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtLegacyDithering* structs) {
return visitor->Visit("legacyDitheringFeaturesEXT",
&structs->legacy_dithering_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtLegacyVertexAttributes* structs) {
return visitor->Visit("legacyVertexAttributesFeaturesEXT",
&structs->legacy_vertex_attributes_features_ext) &&
visitor->Visit("legacyVertexAttributesPropertiesEXT",
&structs->legacy_vertex_attributes_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtLineRasterization* structs) {
return visitor->Visit("lineRasterizationFeaturesEXT",
&structs->line_rasterization_features_ext) &&
visitor->Visit("lineRasterizationPropertiesEXT",
&structs->line_rasterization_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtMapMemoryPlaced* structs) {
return visitor->Visit("mapMemoryPlacedFeaturesEXT",
&structs->map_memory_placed_features_ext) &&
visitor->Visit("mapMemoryPlacedPropertiesEXT",
&structs->map_memory_placed_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtMemoryPriority* structs) {
return visitor->Visit("memoryPriorityFeaturesEXT",
&structs->memory_priority_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtMeshShader* structs) {
return visitor->Visit("meshShaderFeaturesEXT",
&structs->mesh_shader_features_ext) &&
visitor->Visit("meshShaderPropertiesEXT",
&structs->mesh_shader_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtMultiDraw* structs) {
return visitor->Visit("multiDrawFeaturesEXT",
&structs->multi_draw_features_ext) &&
visitor->Visit("multiDrawPropertiesEXT",
&structs->multi_draw_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtMultisampledRenderToSingleSampled* structs) {
return visitor->Visit(
"multisampledRenderToSingleSampledFeaturesEXT",
&structs->multisampled_render_to_single_sampled_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtMutableDescriptorType* structs) {
return visitor->Visit("mutableDescriptorTypeFeaturesEXT",
&structs->mutable_descriptor_type_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtNestedCommandBuffer* structs) {
return visitor->Visit("nestedCommandBufferFeaturesEXT",
&structs->nested_command_buffer_features_ext) &&
visitor->Visit("nestedCommandBufferPropertiesEXT",
&structs->nested_command_buffer_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtNonSeamlessCubeMap* structs) {
return visitor->Visit("nonSeamlessCubeMapFeaturesEXT",
&structs->non_seamless_cube_map_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtOpacityMicromap* structs) {
return visitor->Visit("opacityMicromapFeaturesEXT",
&structs->opacity_micromap_features_ext) &&
visitor->Visit("opacityMicromapPropertiesEXT",
&structs->opacity_micromap_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPageableDeviceLocalMemory* structs) {
return visitor->Visit("pageableDeviceLocalMemoryFeaturesEXT",
&structs->pageable_device_local_memory_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtPciBusInfo* structs) {
return visitor->Visit("PCIBusInfoPropertiesEXT",
&structs->pci_bus_info_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtPhysicalDeviceDrm* structs) {
return visitor->Visit("drmPropertiesEXT", &structs->drm_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPipelineCreationCacheControl* structs) {
return visitor->Visit("pipelineCreationCacheControlFeaturesEXT",
&structs->pipeline_creation_cache_control_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPipelineLibraryGroupHandles* structs) {
return visitor->Visit("pipelineLibraryGroupHandlesFeaturesEXT",
&structs->pipeline_library_group_handles_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtPipelineProperties* structs) {
return visitor->Visit("pipelinePropertiesFeaturesEXT",
&structs->pipeline_properties_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPipelineProtectedAccess* structs) {
return visitor->Visit("pipelineProtectedAccessFeaturesEXT",
&structs->pipeline_protected_access_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtPipelineRobustness* structs) {
return visitor->Visit("pipelineRobustnessFeaturesEXT",
&structs->pipeline_robustness_features_ext) &&
visitor->Visit("pipelineRobustnessPropertiesEXT",
&structs->pipeline_robustness_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPresentModeFifoLatestReady* structs) {
return visitor->Visit("presentModeFifoLatestReadyFeaturesEXT",
&structs->present_mode_fifo_latest_ready_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPrimitiveTopologyListRestart* structs) {
return visitor->Visit("primitiveTopologyListRestartFeaturesEXT",
&structs->primitive_topology_list_restart_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtPrimitivesGeneratedQuery* structs) {
return visitor->Visit("primitivesGeneratedQueryFeaturesEXT",
&structs->primitives_generated_query_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtPrivateData* structs) {
return visitor->Visit("privateDataFeaturesEXT",
&structs->private_data_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtProvokingVertex* structs) {
return visitor->Visit("provokingVertexFeaturesEXT",
&structs->provoking_vertex_features_ext) &&
visitor->Visit("provokingVertexPropertiesEXT",
&structs->provoking_vertex_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtRasterizationOrderAttachmentAccess* structs) {
return visitor->Visit(
"rasterizationOrderAttachmentAccessFeaturesEXT",
&structs->rasterization_order_attachment_access_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtRgba10x6Formats* structs) {
return visitor->Visit("RGBA10X6FormatsFeaturesEXT",
&structs->rgba10_x6_formats_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtRobustness2* structs) {
return visitor->Visit("robustness2FeaturesEXT",
&structs->robustness2_features_ext) &&
visitor->Visit("robustness2PropertiesEXT",
&structs->robustness2_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtSampleLocations* structs) {
return visitor->Visit("sampleLocationsPropertiesEXT",
&structs->sample_locations_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtSamplerFilterMinmax* structs) {
return visitor->Visit("samplerFilterMinmaxPropertiesEXT",
&structs->sampler_filter_minmax_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtScalarBlockLayout* structs) {
return visitor->Visit("scalarBlockLayoutFeaturesEXT",
&structs->scalar_block_layout_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtShaderAtomicFloat* structs) {
return visitor->Visit("shaderAtomicFloatFeaturesEXT",
&structs->shader_atomic_float_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtShaderAtomicFloat2* structs) {
return visitor->Visit("shaderAtomicFloat2FeaturesEXT",
&structs->shader_atomic_float2_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtShaderDemoteToHelperInvocation* structs) {
return visitor->Visit(
"shaderDemoteToHelperInvocationFeaturesEXT",
&structs->shader_demote_to_helper_invocation_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtShaderFloat8* structs) {
return visitor->Visit("shaderFloat8FeaturesEXT",
&structs->shader_float8_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtShaderImageAtomicInt64* structs) {
return visitor->Visit("shaderImageAtomicInt64FeaturesEXT",
&structs->shader_image_atomic_int64_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtShaderModuleIdentifier* structs) {
return visitor->Visit("shaderModuleIdentifierFeaturesEXT",
&structs->shader_module_identifier_features_ext) &&
visitor->Visit("shaderModuleIdentifierPropertiesEXT",
&structs->shader_module_identifier_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtShaderObject* structs) {
return visitor->Visit("shaderObjectFeaturesEXT",
&structs->shader_object_features_ext) &&
visitor->Visit("shaderObjectPropertiesEXT",
&structs->shader_object_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtShaderReplicatedComposites* structs) {
return visitor->Visit("shaderReplicatedCompositesFeaturesEXT",
&structs->shader_replicated_composites_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtShaderTileImage* structs) {
return visitor->Visit("shaderTileImageFeaturesEXT",
&structs->shader_tile_image_features_ext) &&
visitor->Visit("shaderTileImagePropertiesEXT",
&structs->shader_tile_image_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtSubgroupSizeControl* structs) {
return visitor->Visit("subgroupSizeControlFeaturesEXT",
&structs->subgroup_size_control_features_ext) &&
visitor->Visit("subgroupSizeControlPropertiesEXT",
&structs->subgroup_size_control_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtSubpassMergeFeedback* structs) {
return visitor->Visit("subpassMergeFeedbackFeaturesEXT",
&structs->subpass_merge_feedback_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtSwapchainMaintenance1* structs) {
return visitor->Visit("swapchainMaintenance1FeaturesEXT",
&structs->swapchain_maintenance1_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtTexelBufferAlignment* structs) {
return visitor->Visit("texelBufferAlignmentFeaturesEXT",
&structs->texel_buffer_alignment_features_ext) &&
visitor->Visit("texelBufferAlignmentPropertiesEXT",
&structs->texel_buffer_alignment_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtTextureCompressionAstcHdr* structs) {
return visitor->Visit("textureCompressionASTCHDRFeaturesEXT",
&structs->texture_compression_astchdr_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtTransformFeedback* structs) {
return visitor->Visit("transformFeedbackFeaturesEXT",
&structs->transform_feedback_features_ext) &&
visitor->Visit("transformFeedbackPropertiesEXT",
&structs->transform_feedback_properties_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtVertexAttributeDivisor* structs) {
return visitor->Visit("vertexAttributeDivisorPropertiesEXT",
&structs->vertex_attribute_divisor_properties_ext) &&
visitor->Visit("vertexAttributeDivisorFeaturesEXT",
&structs->vertex_attribute_divisor_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtVertexAttributeRobustness* structs) {
return visitor->Visit("vertexAttributeRobustnessFeaturesEXT",
&structs->vertex_attribute_robustness_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtVertexInputDynamicState* structs) {
return visitor->Visit("vertexInputDynamicStateFeaturesEXT",
&structs->vertex_input_dynamic_state_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtYcbcr2plane444Formats* structs) {
return visitor->Visit("ycbcr2Plane444FormatsFeaturesEXT",
&structs->ycbcr_2plane_444_formats_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonExtYcbcrImageArrays* structs) {
return visitor->Visit("ycbcrImageArraysFeaturesEXT",
&structs->ycbcr_image_arrays_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtZeroInitializeDeviceMemory* structs) {
return visitor->Visit("zeroInitializeDeviceMemoryFeaturesEXT",
&structs->zero_initialize_device_memory_features_ext);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonHUAWEIClusterCullingShader* structs) {
return visitor->Visit("clusterCullingShaderFeaturesHUAWEI",
&structs->cluster_culling_shader_features_huawei) &&
visitor->Visit("clusterCullingShaderPropertiesHUAWEI",
&structs->cluster_culling_shader_properties_huawei);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonHUAWEIHdrVivid* structs) {
return visitor->Visit("hdrVividFeaturesHUAWEI",
&structs->hdr_vivid_features_huawei);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonHUAWEIInvocationMask* structs) {
return visitor->Visit("invocationMaskFeaturesHUAWEI",
&structs->invocation_mask_features_huawei);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonHUAWEISubpassShading* structs) {
return visitor->Visit("subpassShadingFeaturesHUAWEI",
&structs->subpass_shading_features_huawei) &&
visitor->Visit("subpassShadingPropertiesHUAWEI",
&structs->subpass_shading_properties_huawei);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonIMGRelaxedLineRasterization* structs) {
return visitor->Visit("relaxedLineRasterizationFeaturesIMG",
&structs->relaxed_line_rasterization_features_img);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonExtVKINTELShaderIntegerFunctions2* structs) {
return visitor->Visit("shaderIntegerFunctions2FeaturesINTEL",
&structs->shader_integer_functions2_features_intel);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHR16bitStorage* structs) {
return visitor->Visit("bit16StorageFeaturesKHR",
&structs->bit16_storage_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHR8bitStorage* structs) {
return visitor->Visit("bit8StorageFeaturesKHR",
&structs->bit8_storage_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRAccelerationStructure* structs) {
return visitor->Visit("accelerationStructureFeaturesKHR",
&structs->acceleration_structure_features_khr) &&
visitor->Visit("accelerationStructurePropertiesKHR",
&structs->acceleration_structure_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRBufferDeviceAddress* structs) {
return visitor->Visit("bufferDeviceAddressFeaturesKHR",
&structs->buffer_device_address_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRComputeShaderDerivatives* structs) {
return visitor->Visit("computeShaderDerivativesFeaturesKHR",
&structs->compute_shader_derivatives_features_khr) &&
visitor->Visit("computeShaderDerivativesPropertiesKHR",
&structs->compute_shader_derivatives_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRCooperativeMatrix* structs) {
return visitor->Visit("cooperativeMatrixFeaturesKHR",
&structs->cooperative_matrix_features_khr) &&
visitor->Visit("cooperativeMatrixPropertiesKHR",
&structs->cooperative_matrix_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRDepthClampZeroOne* structs) {
return visitor->Visit("depthClampZeroOneFeaturesKHR",
&structs->depth_clamp_zero_one_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRDepthStencilResolve* structs) {
return visitor->Visit("depthStencilResolvePropertiesKHR",
&structs->depth_stencil_resolve_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRDriverProperties* structs) {
return visitor->Visit("driverPropertiesKHR", &structs->driver_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRDynamicRendering* structs) {
return visitor->Visit("dynamicRenderingFeaturesKHR",
&structs->dynamic_rendering_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRDynamicRenderingLocalRead* structs) {
return visitor->Visit("dynamicRenderingLocalReadFeaturesKHR",
&structs->dynamic_rendering_local_read_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRExternalFenceCapabilities* structs) {
return visitor->Visit("IDPropertiesKHR", &structs->id_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRExternalMemoryCapabilities* structs) {
return visitor->Visit("IDPropertiesKHR", &structs->id_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRExternalSemaphoreCapabilities* structs) {
return visitor->Visit("IDPropertiesKHR", &structs->id_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRFragmentShaderBarycentric* structs) {
return visitor->Visit("fragmentShaderBarycentricFeaturesKHR",
&structs->fragment_shader_barycentric_features_khr) &&
visitor->Visit("fragmentShaderBarycentricPropertiesKHR",
&structs->fragment_shader_barycentric_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRFragmentShadingRate* structs) {
return visitor->Visit("fragmentShadingRateFeaturesKHR",
&structs->fragment_shading_rate_features_khr) &&
visitor->Visit("fragmentShadingRatePropertiesKHR",
&structs->fragment_shading_rate_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRGlobalPriority* structs) {
return visitor->Visit("globalPriorityQueryFeaturesKHR",
&structs->global_priority_query_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRImagelessFramebuffer* structs) {
return visitor->Visit("imagelessFramebufferFeaturesKHR",
&structs->imageless_framebuffer_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRIndexTypeUint8* structs) {
return visitor->Visit("indexTypeUint8FeaturesKHR",
&structs->index_type_uint8_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRLineRasterization* structs) {
return visitor->Visit("lineRasterizationFeaturesKHR",
&structs->line_rasterization_features_khr) &&
visitor->Visit("lineRasterizationPropertiesKHR",
&structs->line_rasterization_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance2* structs) {
return visitor->Visit("pointClippingPropertiesKHR",
&structs->point_clipping_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance3* structs) {
return visitor->Visit("maintenance3PropertiesKHR",
&structs->maintenance3_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance4* structs) {
return visitor->Visit("maintenance4FeaturesKHR",
&structs->maintenance4_features_khr) &&
visitor->Visit("maintenance4PropertiesKHR",
&structs->maintenance4_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance5* structs) {
return visitor->Visit("maintenance5FeaturesKHR",
&structs->maintenance5_features_khr) &&
visitor->Visit("maintenance5PropertiesKHR",
&structs->maintenance5_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance6* structs) {
return visitor->Visit("maintenance6FeaturesKHR",
&structs->maintenance6_features_khr) &&
visitor->Visit("maintenance6PropertiesKHR",
&structs->maintenance6_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance7* structs) {
return visitor->Visit("maintenance7FeaturesKHR",
&structs->maintenance7_features_khr) &&
visitor->Visit("maintenance7PropertiesKHR",
&structs->maintenance7_properties_khr) &&
visitor->Visit("layeredApiPropertiesListKHR",
&structs->layered_api_properties_list_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance8* structs) {
return visitor->Visit("maintenance8FeaturesKHR",
&structs->maintenance8_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMaintenance9* structs) {
return visitor->Visit("maintenance9FeaturesKHR",
&structs->maintenance9_features_khr) &&
visitor->Visit("maintenance9PropertiesKHR",
&structs->maintenance9_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRMultiview* structs) {
return visitor->Visit("multiviewFeaturesKHR",
&structs->multiview_features_khr) &&
visitor->Visit("multiviewPropertiesKHR",
&structs->multiview_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPerformanceQuery* structs) {
return visitor->Visit("performanceQueryFeaturesKHR",
&structs->performance_query_features_khr) &&
visitor->Visit("performanceQueryPropertiesKHR",
&structs->performance_query_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPipelineBinary* structs) {
return visitor->Visit("pipelineBinaryFeaturesKHR",
&structs->pipeline_binary_features_khr) &&
visitor->Visit("pipelineBinaryPropertiesKHR",
&structs->pipeline_binary_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRPipelineExecutableProperties* structs) {
return visitor->Visit("pipelineExecutablePropertiesFeaturesKHR",
&structs->pipeline_executable_properties_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPresentId* structs) {
return visitor->Visit("presentIdFeaturesKHR",
&structs->present_id_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPresentId2* structs) {
return visitor->Visit("presentId2FeaturesKHR",
&structs->present_id2_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPresentWait* structs) {
return visitor->Visit("presentWaitFeaturesKHR",
&structs->present_wait_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPresentWait2* structs) {
return visitor->Visit("presentWait2FeaturesKHR",
&structs->present_wait2_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRPushDescriptor* structs) {
return visitor->Visit("pushDescriptorPropertiesKHR",
&structs->push_descriptor_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRRayQuery* structs) {
return visitor->Visit("rayQueryFeaturesKHR",
&structs->ray_query_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRRayTracingMaintenance1* structs) {
return visitor->Visit("rayTracingMaintenance1FeaturesKHR",
&structs->ray_tracing_maintenance1_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRRayTracingPipeline* structs) {
return visitor->Visit("rayTracingPipelineFeaturesKHR",
&structs->ray_tracing_pipeline_features_khr) &&
visitor->Visit("rayTracingPipelinePropertiesKHR",
&structs->ray_tracing_pipeline_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRRayTracingPositionFetch* structs) {
return visitor->Visit("rayTracingPositionFetchFeaturesKHR",
&structs->ray_tracing_position_fetch_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRRobustness2* structs) {
return visitor->Visit("robustness2FeaturesKHR",
&structs->robustness2_features_khr) &&
visitor->Visit("robustness2PropertiesKHR",
&structs->robustness2_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRSamplerYcbcrConversion* structs) {
return visitor->Visit("samplerYcbcrConversionFeaturesKHR",
&structs->sampler_ycbcr_conversion_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRSeparateDepthStencilLayouts* structs) {
return visitor->Visit("separateDepthStencilLayoutsFeaturesKHR",
&structs->separate_depth_stencil_layouts_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderAtomicInt64* structs) {
return visitor->Visit("shaderAtomicInt64FeaturesKHR",
&structs->shader_atomic_int64_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderBfloat16* structs) {
return visitor->Visit("shaderBfloat16FeaturesKHR",
&structs->shader_bfloat16_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderClock* structs) {
return visitor->Visit("shaderClockFeaturesKHR",
&structs->shader_clock_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderExpectAssume* structs) {
return visitor->Visit("shaderExpectAssumeFeaturesKHR",
&structs->shader_expect_assume_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderFloat16Int8* structs) {
return visitor->Visit("shaderFloat16Int8FeaturesKHR",
&structs->shader_float16_int8_features_khr) &&
visitor->Visit("float16Int8FeaturesKHR",
&structs->float16_int8_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderFloatControls* structs) {
return visitor->Visit("floatControlsPropertiesKHR",
&structs->float_controls_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderFloatControls2* structs) {
return visitor->Visit("shaderFloatControls2FeaturesKHR",
&structs->shader_float_controls2_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRShaderIntegerDotProduct* structs) {
return visitor->Visit("shaderIntegerDotProductFeaturesKHR",
&structs->shader_integer_dot_product_features_khr) &&
visitor->Visit("shaderIntegerDotProductPropertiesKHR",
&structs->shader_integer_dot_product_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRShaderMaximalReconvergence* structs) {
return visitor->Visit("shaderMaximalReconvergenceFeaturesKHR",
&structs->shader_maximal_reconvergence_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderQuadControl* structs) {
return visitor->Visit("shaderQuadControlFeaturesKHR",
&structs->shader_quad_control_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRShaderRelaxedExtendedInstruction* structs) {
return visitor->Visit(
"shaderRelaxedExtendedInstructionFeaturesKHR",
&structs->shader_relaxed_extended_instruction_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRShaderSubgroupExtendedTypes* structs) {
return visitor->Visit("shaderSubgroupExtendedTypesFeaturesKHR",
&structs->shader_subgroup_extended_types_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRShaderSubgroupRotate* structs) {
return visitor->Visit("shaderSubgroupRotateFeaturesKHR",
&structs->shader_subgroup_rotate_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRShaderSubgroupUniformControlFlow* structs) {
return visitor->Visit(
"shaderSubgroupUniformControlFlowFeaturesKHR",
&structs->shader_subgroup_uniform_control_flow_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRShaderTerminateInvocation* structs) {
return visitor->Visit("shaderTerminateInvocationFeaturesKHR",
&structs->shader_terminate_invocation_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRSynchronization2* structs) {
return visitor->Visit("synchronization2FeaturesKHR",
&structs->synchronization2_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRTimelineSemaphore* structs) {
return visitor->Visit("timelineSemaphoreFeaturesKHR",
&structs->timeline_semaphore_features_khr) &&
visitor->Visit("timelineSemaphorePropertiesKHR",
&structs->timeline_semaphore_properties_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRUnifiedImageLayouts* structs) {
return visitor->Visit("unifiedImageLayoutsFeaturesKHR",
&structs->unified_image_layouts_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRUniformBufferStandardLayout* structs) {
return visitor->Visit("uniformBufferStandardLayoutFeaturesKHR",
&structs->uniform_buffer_standard_layout_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRVariablePointers* structs) {
return visitor->Visit("variablePointerFeaturesKHR",
&structs->variable_pointer_features_khr) &&
visitor->Visit("variablePointersFeaturesKHR",
&structs->variable_pointers_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRVertexAttributeDivisor* structs) {
return visitor->Visit("vertexAttributeDivisorPropertiesKHR",
&structs->vertex_attribute_divisor_properties_khr) &&
visitor->Visit("vertexAttributeDivisorFeaturesKHR",
&structs->vertex_attribute_divisor_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRVideoDecodeVp9* structs) {
return visitor->Visit("videoDecodeVP9FeaturesKHR",
&structs->video_decode_vp9_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRVideoEncodeAv1* structs) {
return visitor->Visit("videoEncodeAV1FeaturesKHR",
&structs->video_encode_av1_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRVideoEncodeQuantizationMap* structs) {
return visitor->Visit("videoEncodeQuantizationMapFeaturesKHR",
&structs->video_encode_quantization_map_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRVideoMaintenance1* structs) {
return visitor->Visit("videoMaintenance1FeaturesKHR",
&structs->video_maintenance1_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRVideoMaintenance2* structs) {
return visitor->Visit("videoMaintenance2FeaturesKHR",
&structs->video_maintenance2_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonKHRVulkanMemoryModel* structs) {
return visitor->Visit("vulkanMemoryModelFeaturesKHR",
&structs->vulkan_memory_model_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRWorkgroupMemoryExplicitLayout* structs) {
return visitor->Visit(
"workgroupMemoryExplicitLayoutFeaturesKHR",
&structs->workgroup_memory_explicit_layout_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonKHRZeroInitializeWorkgroupMemory* structs) {
return visitor->Visit(
"zeroInitializeWorkgroupMemoryFeaturesKHR",
&structs->zero_initialize_workgroup_memory_features_khr);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonMESAImageAlignmentControl* structs) {
return visitor->Visit("imageAlignmentControlFeaturesMESA",
&structs->image_alignment_control_features_mesa) &&
visitor->Visit("imageAlignmentControlPropertiesMESA",
&structs->image_alignment_control_properties_mesa);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonMSFTLayeredDriver* structs) {
return visitor->Visit("layeredDriverPropertiesMSFT",
&structs->layered_driver_properties_msft);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVXMultiviewPerViewAttributes* structs) {
return visitor->Visit("multiviewPerViewAttributesPropertiesNVX",
&structs->multiview_per_view_attributes_properties_nvx);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVClusterAccelerationStructure* structs) {
return visitor->Visit("clusterAccelerationStructureFeaturesNV",
&structs->cluster_acceleration_structure_features_nv) &&
visitor->Visit("clusterAccelerationStructurePropertiesNV",
&structs->cluster_acceleration_structure_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVCommandBufferInheritance* structs) {
return visitor->Visit("commandBufferInheritanceFeaturesNV",
&structs->command_buffer_inheritance_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVComputeShaderDerivatives* structs) {
return visitor->Visit("computeShaderDerivativesFeaturesNV",
&structs->compute_shader_derivatives_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVCooperativeMatrix* structs) {
return visitor->Visit("cooperativeMatrixFeaturesNV",
&structs->cooperative_matrix_features_nv) &&
visitor->Visit("cooperativeMatrixPropertiesNV",
&structs->cooperative_matrix_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVCooperativeMatrix2* structs) {
return visitor->Visit("cooperativeMatrix2FeaturesNV",
&structs->cooperative_matrix2_features_nv) &&
visitor->Visit("cooperativeMatrix2PropertiesNV",
&structs->cooperative_matrix2_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVCooperativeVector* structs) {
return visitor->Visit("cooperativeVectorPropertiesNV",
&structs->cooperative_vector_properties_nv) &&
visitor->Visit("cooperativeVectorFeaturesNV",
&structs->cooperative_vector_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVCopyMemoryIndirect* structs) {
return visitor->Visit("copyMemoryIndirectFeaturesNV",
&structs->copy_memory_indirect_features_nv) &&
visitor->Visit("copyMemoryIndirectPropertiesNV",
&structs->copy_memory_indirect_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVCornerSampledImage* structs) {
return visitor->Visit("cornerSampledImageFeaturesNV",
&structs->corner_sampled_image_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVCoverageReductionMode* structs) {
return visitor->Visit("coverageReductionModeFeaturesNV",
&structs->coverage_reduction_mode_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVDedicatedAllocationImageAliasing* structs) {
return visitor->Visit(
"dedicatedAllocationImageAliasingFeaturesNV",
&structs->dedicated_allocation_image_aliasing_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVDescriptorPoolOverallocation* structs) {
return visitor->Visit("descriptorPoolOverallocationFeaturesNV",
&structs->descriptor_pool_overallocation_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVDeviceDiagnosticsConfig* structs) {
return visitor->Visit("diagnosticsConfigFeaturesNV",
&structs->diagnostics_config_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVDeviceGeneratedCommands* structs) {
return visitor->Visit("deviceGeneratedCommandsPropertiesNV",
&structs->device_generated_commands_properties_nv) &&
visitor->Visit("deviceGeneratedCommandsFeaturesNV",
&structs->device_generated_commands_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVDeviceGeneratedCommandsCompute* structs) {
return visitor->Visit(
"deviceGeneratedCommandsComputeFeaturesNV",
&structs->device_generated_commands_compute_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVExtendedSparseAddressSpace* structs) {
return visitor->Visit("extendedSparseAddressSpaceFeaturesNV",
&structs->extended_sparse_address_space_features_nv) &&
visitor->Visit("extendedSparseAddressSpacePropertiesNV",
&structs->extended_sparse_address_space_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVExternalComputeQueue* structs) {
return visitor->Visit("externalComputeQueuePropertiesNV",
&structs->external_compute_queue_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVExternalMemoryRdma* structs) {
return visitor->Visit("externalMemoryRDMAFeaturesNV",
&structs->external_memory_rdma_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVFragmentShadingRateEnums* structs) {
return visitor->Visit("fragmentShadingRateEnumsFeaturesNV",
&structs->fragment_shading_rate_enums_features_nv) &&
visitor->Visit("fragmentShadingRateEnumsPropertiesNV",
&structs->fragment_shading_rate_enums_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVInheritedViewportScissor* structs) {
return visitor->Visit("inheritedViewportScissorFeaturesNV",
&structs->inherited_viewport_scissor_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVLinearColorAttachment* structs) {
return visitor->Visit("linearColorAttachmentFeaturesNV",
&structs->linear_color_attachment_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVMemoryDecompression* structs) {
return visitor->Visit("memoryDecompressionFeaturesNV",
&structs->memory_decompression_features_nv) &&
visitor->Visit("memoryDecompressionPropertiesNV",
&structs->memory_decompression_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVMeshShader* structs) {
return visitor->Visit("meshShaderFeaturesNV",
&structs->mesh_shader_features_nv) &&
visitor->Visit("meshShaderPropertiesNV",
&structs->mesh_shader_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVOpticalFlow* structs) {
return visitor->Visit("opticalFlowFeaturesNV",
&structs->optical_flow_features_nv) &&
visitor->Visit("opticalFlowPropertiesNV",
&structs->optical_flow_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVPartitionedAccelerationStructure* structs) {
return visitor->Visit(
"partitionedAccelerationStructureFeaturesNV",
&structs->partitioned_acceleration_structure_features_nv) &&
visitor->Visit(
"partitionedAccelerationStructurePropertiesNV",
&structs->partitioned_acceleration_structure_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVPerStageDescriptorSet* structs) {
return visitor->Visit("perStageDescriptorSetFeaturesNV",
&structs->per_stage_descriptor_set_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVPresentBarrier* structs) {
return visitor->Visit("presentBarrierFeaturesNV",
&structs->present_barrier_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVRawAccessChains* structs) {
return visitor->Visit("rawAccessChainsFeaturesNV",
&structs->raw_access_chains_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVRayTracing* structs) {
return visitor->Visit("rayTracingPropertiesNV",
&structs->ray_tracing_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVRayTracingInvocationReorder* structs) {
return visitor->Visit(
"rayTracingInvocationReorderPropertiesNV",
&structs->ray_tracing_invocation_reorder_properties_nv) &&
visitor->Visit("rayTracingInvocationReorderFeaturesNV",
&structs->ray_tracing_invocation_reorder_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVRayTracingLinearSweptSpheres* structs) {
return visitor->Visit("rayTracingLinearSweptSpheresFeaturesNV",
&structs->ray_tracing_linear_swept_spheres_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVRayTracingMotionBlur* structs) {
return visitor->Visit("rayTracingMotionBlurFeaturesNV",
&structs->ray_tracing_motion_blur_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVRayTracingValidation* structs) {
return visitor->Visit("rayTracingValidationFeaturesNV",
&structs->ray_tracing_validation_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVRepresentativeFragmentTest* structs) {
return visitor->Visit("representativeFragmentTestFeaturesNV",
&structs->representative_fragment_test_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVScissorExclusive* structs) {
return visitor->Visit("exclusiveScissorFeaturesNV",
&structs->exclusive_scissor_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonNVShaderAtomicFloat16Vector* structs) {
return visitor->Visit("shaderAtomicFloat16VectorFeaturesNV",
&structs->shader_atomic_float16_vector_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVShaderImageFootprint* structs) {
return visitor->Visit("shaderImageFootprintFeaturesNV",
&structs->shader_image_footprint_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVShaderSmBuiltins* structs) {
return visitor->Visit("shaderSMBuiltinsPropertiesNV",
&structs->shader_sm_builtins_properties_nv) &&
visitor->Visit("shaderSMBuiltinsFeaturesNV",
&structs->shader_sm_builtins_features_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonNVShadingRateImage* structs) {
return visitor->Visit("shadingRateImageFeaturesNV",
&structs->shading_rate_image_features_nv) &&
visitor->Visit("shadingRateImagePropertiesNV",
&structs->shading_rate_image_properties_nv);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMFilterCubicClamp* structs) {
return visitor->Visit("cubicClampFeaturesQCOM",
&structs->cubic_clamp_features_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMFilterCubicWeights* structs) {
return visitor->Visit("cubicWeightsFeaturesQCOM",
&structs->cubic_weights_features_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonQCOMFragmentDensityMapOffset* structs) {
return visitor->Visit("fragmentDensityMapOffsetFeaturesQCOM",
&structs->fragment_density_map_offset_features_qcom) &&
visitor->Visit("fragmentDensityMapOffsetPropertiesQCOM",
&structs->fragment_density_map_offset_properties_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMImageProcessing* structs) {
return visitor->Visit("imageProcessingFeaturesQCOM",
&structs->image_processing_features_qcom) &&
visitor->Visit("imageProcessingPropertiesQCOM",
&structs->image_processing_properties_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMImageProcessing2* structs) {
return visitor->Visit("imageProcessing2FeaturesQCOM",
&structs->image_processing2_features_qcom) &&
visitor->Visit("imageProcessing2PropertiesQCOM",
&structs->image_processing2_properties_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonQCOMMultiviewPerViewRenderAreas* structs) {
return visitor->Visit(
"multiviewPerViewRenderAreasFeaturesQCOM",
&structs->multiview_per_view_render_areas_features_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonQCOMMultiviewPerViewViewports* structs) {
return visitor->Visit("multiviewPerViewViewportsFeaturesQCOM",
&structs->multiview_per_view_viewports_features_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMTileMemoryHeap* structs) {
return visitor->Visit("tileMemoryHeapFeaturesQCOM",
&structs->tile_memory_heap_features_qcom) &&
visitor->Visit("tileMemoryHeapPropertiesQCOM",
&structs->tile_memory_heap_properties_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMTileProperties* structs) {
return visitor->Visit("tilePropertiesFeaturesQCOM",
&structs->tile_properties_features_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMTileShading* structs) {
return visitor->Visit("tileShadingFeaturesQCOM",
&structs->tile_shading_features_qcom) &&
visitor->Visit("tileShadingPropertiesQCOM",
&structs->tile_shading_properties_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonQCOMYcbcrDegamma* structs) {
return visitor->Visit("ycbcrDegammaFeaturesQCOM",
&structs->ycbcr_degamma_features_qcom);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonSECAmigoProfiling* structs) {
return visitor->Visit("amigoProfilingFeaturesSEC",
&structs->amigo_profiling_features_sec);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonVALVEDescriptorSetHostMapping* structs) {
return visitor->Visit("descriptorSetHostMappingFeaturesVALVE",
&structs->descriptor_set_host_mapping_features_valve);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkJsonVALVEMutableDescriptorType* structs) {
return visitor->Visit("mutableDescriptorTypeFeaturesVALVE",
&structs->mutable_descriptor_type_features_valve);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevice16BitStorageFeatures* features) {
return
visitor->Visit("storageBuffer16BitAccess",
&features->storageBuffer16BitAccess) &&
visitor->Visit("uniformAndStorageBuffer16BitAccess",
&features->uniformAndStorageBuffer16BitAccess) &&
visitor->Visit("storagePushConstant16",
&features->storagePushConstant16) &&
visitor->Visit("storageInputOutput16", &features->storageInputOutput16);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevice4444FormatsFeaturesEXT* features) {
return
visitor->Visit("formatA4R4G4B4", &features->formatA4R4G4B4) &&
visitor->Visit("formatA4B4G4R4", &features->formatA4B4G4R4);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevice8BitStorageFeatures* features) {
return
visitor->Visit("storageBuffer8BitAccess",
&features->storageBuffer8BitAccess) &&
visitor->Visit("uniformAndStorageBuffer8BitAccess",
&features->uniformAndStorageBuffer8BitAccess) &&
visitor->Visit("storagePushConstant8", &features->storagePushConstant8);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceASTCDecodeFeaturesEXT* features) {
return
visitor->Visit("decodeModeSharedExponent",
&features->decodeModeSharedExponent);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceAccelerationStructureFeaturesKHR* features) {
return
visitor->Visit("accelerationStructure",
&features->accelerationStructure) &&
visitor->Visit("accelerationStructureCaptureReplay",
&features->accelerationStructureCaptureReplay) &&
visitor->Visit("accelerationStructureIndirectBuild",
&features->accelerationStructureIndirectBuild) &&
visitor->Visit("accelerationStructureHostCommands",
&features->accelerationStructureHostCommands) &&
visitor->Visit(
"descriptorBindingAccelerationStructureUpdateAfterBind",
&features->descriptorBindingAccelerationStructureUpdateAfterBind);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceAccelerationStructurePropertiesKHR* properties) {
return
visitor->Visit("maxGeometryCount", &properties->maxGeometryCount) &&
visitor->Visit("maxInstanceCount", &properties->maxInstanceCount) &&
visitor->Visit("maxPrimitiveCount", &properties->maxPrimitiveCount) &&
visitor->Visit(
"maxPerStageDescriptorAccelerationStructures",
&properties->maxPerStageDescriptorAccelerationStructures) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindAccelerationStructures",
&properties
->maxPerStageDescriptorUpdateAfterBindAccelerationStructures) &&
visitor->Visit("maxDescriptorSetAccelerationStructures",
&properties->maxDescriptorSetAccelerationStructures) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindAccelerationStructures",
&properties->maxDescriptorSetUpdateAfterBindAccelerationStructures) &&
visitor->Visit(
"minAccelerationStructureScratchOffsetAlignment",
&properties->minAccelerationStructureScratchOffsetAlignment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceAddressBindingReportFeaturesEXT* features) {
return
visitor->Visit("reportAddressBinding", &features->reportAddressBinding);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceAmigoProfilingFeaturesSEC* features) {
return
visitor->Visit("amigoProfiling", &features->amigoProfiling);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceAntiLagFeaturesAMD* features) {
return
visitor->Visit("antiLag", &features->antiLag);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT* features) {
return
visitor->Visit("attachmentFeedbackLoopDynamicState",
&features->attachmentFeedbackLoopDynamicState);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT* features) {
return
visitor->Visit("attachmentFeedbackLoopLayout",
&features->attachmentFeedbackLoopLayout);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* features) {
return
visitor->Visit("advancedBlendCoherentOperations",
&features->advancedBlendCoherentOperations);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* properties) {
return
visitor->Visit("advancedBlendMaxColorAttachments",
&properties->advancedBlendMaxColorAttachments) &&
visitor->Visit("advancedBlendIndependentBlend",
&properties->advancedBlendIndependentBlend) &&
visitor->Visit("advancedBlendNonPremultipliedSrcColor",
&properties->advancedBlendNonPremultipliedSrcColor) &&
visitor->Visit("advancedBlendNonPremultipliedDstColor",
&properties->advancedBlendNonPremultipliedDstColor) &&
visitor->Visit("advancedBlendCorrelatedOverlap",
&properties->advancedBlendCorrelatedOverlap) &&
visitor->Visit("advancedBlendAllOperations",
&properties->advancedBlendAllOperations);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceBorderColorSwizzleFeaturesEXT* features) {
return
visitor->Visit("borderColorSwizzle", &features->borderColorSwizzle) &&
visitor->Visit("borderColorSwizzleFromImage",
&features->borderColorSwizzleFromImage);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* features) {
return
visitor->Visit("bufferDeviceAddress", &features->bufferDeviceAddress) &&
visitor->Visit("bufferDeviceAddressCaptureReplay",
&features->bufferDeviceAddressCaptureReplay) &&
visitor->Visit("bufferDeviceAddressMultiDevice",
&features->bufferDeviceAddressMultiDevice);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceBufferDeviceAddressFeatures* features) {
return
visitor->Visit("bufferDeviceAddress", &features->bufferDeviceAddress) &&
visitor->Visit("bufferDeviceAddressCaptureReplay",
&features->bufferDeviceAddressCaptureReplay) &&
visitor->Visit("bufferDeviceAddressMultiDevice",
&features->bufferDeviceAddressMultiDevice);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceClusterAccelerationStructureFeaturesNV* features) {
return
visitor->Visit("clusterAccelerationStructure",
&features->clusterAccelerationStructure);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceClusterAccelerationStructurePropertiesNV* properties) {
return
visitor->Visit("maxVerticesPerCluster",
&properties->maxVerticesPerCluster) &&
visitor->Visit("maxTrianglesPerCluster",
&properties->maxTrianglesPerCluster) &&
visitor->Visit("clusterScratchByteAlignment",
&properties->clusterScratchByteAlignment) &&
visitor->Visit("clusterByteAlignment",
&properties->clusterByteAlignment) &&
visitor->Visit("clusterTemplateByteAlignment",
&properties->clusterTemplateByteAlignment) &&
visitor->Visit("clusterBottomLevelByteAlignment",
&properties->clusterBottomLevelByteAlignment) &&
visitor->Visit("clusterTemplateBoundsByteAlignment",
&properties->clusterTemplateBoundsByteAlignment) &&
visitor->Visit("maxClusterGeometryIndex",
&properties->maxClusterGeometryIndex);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI* features) {
return
visitor->Visit("clustercullingShader", &features->clustercullingShader) &&
visitor->Visit("multiviewClusterCullingShader",
&features->multiviewClusterCullingShader);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI* properties) {
return
visitor->Visit("maxWorkGroupCount", &properties->maxWorkGroupCount) &&
visitor->Visit("maxWorkGroupSize", &properties->maxWorkGroupSize) &&
visitor->Visit("maxOutputClusterCount",
&properties->maxOutputClusterCount) &&
visitor->Visit("indirectBufferOffsetAlignment",
&properties->indirectBufferOffsetAlignment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCoherentMemoryFeaturesAMD* features) {
return
visitor->Visit("deviceCoherentMemory", &features->deviceCoherentMemory);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceColorWriteEnableFeaturesEXT* features) {
return
visitor->Visit("colorWriteEnable", &features->colorWriteEnable);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceCommandBufferInheritanceFeaturesNV* features) {
return
visitor->Visit("commandBufferInheritance",
&features->commandBufferInheritance);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR* features) {
return
visitor->Visit("computeDerivativeGroupQuads",
&features->computeDerivativeGroupQuads) &&
visitor->Visit("computeDerivativeGroupLinear",
&features->computeDerivativeGroupLinear);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceComputeShaderDerivativesPropertiesKHR* properties) {
return
visitor->Visit("meshAndTaskShaderDerivatives",
&properties->meshAndTaskShaderDerivatives);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceConditionalRenderingFeaturesEXT* features) {
return
visitor->Visit("conditionalRendering", &features->conditionalRendering) &&
visitor->Visit("inheritedConditionalRendering",
&features->inheritedConditionalRendering);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceConservativeRasterizationPropertiesEXT* properties) {
return
visitor->Visit("primitiveOverestimationSize",
&properties->primitiveOverestimationSize) &&
visitor->Visit("maxExtraPrimitiveOverestimationSize",
&properties->maxExtraPrimitiveOverestimationSize) &&
visitor->Visit(
"extraPrimitiveOverestimationSizeGranularity",
&properties->extraPrimitiveOverestimationSizeGranularity) &&
visitor->Visit("primitiveUnderestimation",
&properties->primitiveUnderestimation) &&
visitor->Visit("conservativePointAndLineRasterization",
&properties->conservativePointAndLineRasterization) &&
visitor->Visit("degenerateTrianglesRasterized",
&properties->degenerateTrianglesRasterized) &&
visitor->Visit("degenerateLinesRasterized",
&properties->degenerateLinesRasterized) &&
visitor->Visit("fullyCoveredFragmentShaderInputVariable",
&properties->fullyCoveredFragmentShaderInputVariable) &&
visitor->Visit("conservativeRasterizationPostDepthCoverage",
&properties->conservativeRasterizationPostDepthCoverage);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCooperativeMatrix2FeaturesNV* features) {
return
visitor->Visit("cooperativeMatrixWorkgroupScope",
&features->cooperativeMatrixWorkgroupScope) &&
visitor->Visit("cooperativeMatrixFlexibleDimensions",
&features->cooperativeMatrixFlexibleDimensions) &&
visitor->Visit("cooperativeMatrixReductions",
&features->cooperativeMatrixReductions) &&
visitor->Visit("cooperativeMatrixConversions",
&features->cooperativeMatrixConversions) &&
visitor->Visit("cooperativeMatrixPerElementOperations",
&features->cooperativeMatrixPerElementOperations) &&
visitor->Visit("cooperativeMatrixTensorAddressing",
&features->cooperativeMatrixTensorAddressing) &&
visitor->Visit("cooperativeMatrixBlockLoads",
&features->cooperativeMatrixBlockLoads);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceCooperativeMatrix2PropertiesNV* properties) {
return
visitor->Visit(
"cooperativeMatrixWorkgroupScopeMaxWorkgroupSize",
&properties->cooperativeMatrixWorkgroupScopeMaxWorkgroupSize) &&
visitor->Visit(
"cooperativeMatrixFlexibleDimensionsMaxDimension",
&properties->cooperativeMatrixFlexibleDimensionsMaxDimension) &&
visitor->Visit(
"cooperativeMatrixWorkgroupScopeReservedSharedMemory",
&properties->cooperativeMatrixWorkgroupScopeReservedSharedMemory);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCooperativeMatrixFeaturesKHR* features) {
return
visitor->Visit("cooperativeMatrix", &features->cooperativeMatrix) &&
visitor->Visit("cooperativeMatrixRobustBufferAccess",
&features->cooperativeMatrixRobustBufferAccess);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCooperativeMatrixFeaturesNV* features) {
return
visitor->Visit("cooperativeMatrix", &features->cooperativeMatrix) &&
visitor->Visit("cooperativeMatrixRobustBufferAccess",
&features->cooperativeMatrixRobustBufferAccess);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceCooperativeMatrixPropertiesKHR* properties) {
return
visitor->Visit("cooperativeMatrixSupportedStages",
&properties->cooperativeMatrixSupportedStages);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCooperativeMatrixPropertiesNV* properties) {
return
visitor->Visit("cooperativeMatrixSupportedStages",
&properties->cooperativeMatrixSupportedStages);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCooperativeVectorFeaturesNV* features) {
return
visitor->Visit("cooperativeVector", &features->cooperativeVector) &&
visitor->Visit("cooperativeVectorTraining",
&features->cooperativeVectorTraining);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCooperativeVectorPropertiesNV* properties) {
return
visitor->Visit("cooperativeVectorSupportedStages",
&properties->cooperativeVectorSupportedStages) &&
visitor->Visit(
"cooperativeVectorTrainingFloat16Accumulation",
&properties->cooperativeVectorTrainingFloat16Accumulation) &&
visitor->Visit(
"cooperativeVectorTrainingFloat32Accumulation",
&properties->cooperativeVectorTrainingFloat32Accumulation) &&
visitor->Visit("maxCooperativeVectorComponents",
&properties->maxCooperativeVectorComponents);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCopyMemoryIndirectFeaturesNV* features) {
return
visitor->Visit("indirectCopy", &features->indirectCopy);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceCopyMemoryIndirectPropertiesNV* properties) {
return
visitor->Visit("supportedQueues", &properties->supportedQueues);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCornerSampledImageFeaturesNV* features) {
return
visitor->Visit("cornerSampledImage", &features->cornerSampledImage);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCoverageReductionModeFeaturesNV* features) {
return
visitor->Visit("coverageReductionMode", &features->coverageReductionMode);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCubicClampFeaturesQCOM* features) {
return
visitor->Visit("cubicRangeClamp", &features->cubicRangeClamp);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCubicWeightsFeaturesQCOM* features) {
return
visitor->Visit("selectableCubicWeights",
&features->selectableCubicWeights);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceCustomBorderColorFeaturesEXT* features) {
return
visitor->Visit("customBorderColors", &features->customBorderColors) &&
visitor->Visit("customBorderColorWithoutFormat",
&features->customBorderColorWithoutFormat);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceCustomBorderColorPropertiesEXT* properties) {
return
visitor->Visit("maxCustomBorderColorSamplers",
&properties->maxCustomBorderColorSamplers);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* features) {
return
visitor->Visit("dedicatedAllocationImageAliasing",
&features->dedicatedAllocationImageAliasing);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDepthBiasControlFeaturesEXT* features) {
return
visitor->Visit("depthBiasControl", &features->depthBiasControl) &&
visitor->Visit(
"leastRepresentableValueForceUnormRepresentation",
&features->leastRepresentableValueForceUnormRepresentation) &&
visitor->Visit("floatRepresentation", &features->floatRepresentation) &&
visitor->Visit("depthBiasExact", &features->depthBiasExact);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDepthClampControlFeaturesEXT* features) {
return
visitor->Visit("depthClampControl", &features->depthClampControl);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDepthClampZeroOneFeaturesKHR* features) {
return
visitor->Visit("depthClampZeroOne", &features->depthClampZeroOne);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDepthClipControlFeaturesEXT* features) {
return
visitor->Visit("depthClipControl", &features->depthClipControl);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDepthClipEnableFeaturesEXT* features) {
return
visitor->Visit("depthClipEnable", &features->depthClipEnable);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDepthStencilResolveProperties* properties) {
return
visitor->Visit("supportedDepthResolveModes",
&properties->supportedDepthResolveModes) &&
visitor->Visit("supportedStencilResolveModes",
&properties->supportedStencilResolveModes) &&
visitor->Visit("independentResolveNone",
&properties->independentResolveNone) &&
visitor->Visit("independentResolve", &properties->independentResolve);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT* properties) {
return
visitor->Visit("combinedImageSamplerDensityMapDescriptorSize",
&properties->combinedImageSamplerDensityMapDescriptorSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDescriptorBufferFeaturesEXT* features) {
return
visitor->Visit("descriptorBuffer", &features->descriptorBuffer) &&
visitor->Visit("descriptorBufferCaptureReplay",
&features->descriptorBufferCaptureReplay) &&
visitor->Visit("descriptorBufferImageLayoutIgnored",
&features->descriptorBufferImageLayoutIgnored) &&
visitor->Visit("descriptorBufferPushDescriptors",
&features->descriptorBufferPushDescriptors);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDescriptorBufferPropertiesEXT* properties) {
return
visitor->Visit("combinedImageSamplerDescriptorSingleArray",
&properties->combinedImageSamplerDescriptorSingleArray) &&
visitor->Visit("bufferlessPushDescriptors",
&properties->bufferlessPushDescriptors) &&
visitor->Visit("allowSamplerImageViewPostSubmitCreation",
&properties->allowSamplerImageViewPostSubmitCreation) &&
visitor->Visit("descriptorBufferOffsetAlignment",
&properties->descriptorBufferOffsetAlignment) &&
visitor->Visit("maxDescriptorBufferBindings",
&properties->maxDescriptorBufferBindings) &&
visitor->Visit("maxResourceDescriptorBufferBindings",
&properties->maxResourceDescriptorBufferBindings) &&
visitor->Visit("maxSamplerDescriptorBufferBindings",
&properties->maxSamplerDescriptorBufferBindings) &&
visitor->Visit("maxEmbeddedImmutableSamplerBindings",
&properties->maxEmbeddedImmutableSamplerBindings) &&
visitor->Visit("maxEmbeddedImmutableSamplers",
&properties->maxEmbeddedImmutableSamplers) &&
visitor->Visit("bufferCaptureReplayDescriptorDataSize",
&properties->bufferCaptureReplayDescriptorDataSize) &&
visitor->Visit("imageCaptureReplayDescriptorDataSize",
&properties->imageCaptureReplayDescriptorDataSize) &&
visitor->Visit("imageViewCaptureReplayDescriptorDataSize",
&properties->imageViewCaptureReplayDescriptorDataSize) &&
visitor->Visit("samplerCaptureReplayDescriptorDataSize",
&properties->samplerCaptureReplayDescriptorDataSize) &&
visitor->Visit(
"accelerationStructureCaptureReplayDescriptorDataSize",
&properties->accelerationStructureCaptureReplayDescriptorDataSize) &&
visitor->Visit("samplerDescriptorSize",
&properties->samplerDescriptorSize) &&
visitor->Visit("combinedImageSamplerDescriptorSize",
&properties->combinedImageSamplerDescriptorSize) &&
visitor->Visit("sampledImageDescriptorSize",
&properties->sampledImageDescriptorSize) &&
visitor->Visit("storageImageDescriptorSize",
&properties->storageImageDescriptorSize) &&
visitor->Visit("uniformTexelBufferDescriptorSize",
&properties->uniformTexelBufferDescriptorSize) &&
visitor->Visit("robustUniformTexelBufferDescriptorSize",
&properties->robustUniformTexelBufferDescriptorSize) &&
visitor->Visit("storageTexelBufferDescriptorSize",
&properties->storageTexelBufferDescriptorSize) &&
visitor->Visit("robustStorageTexelBufferDescriptorSize",
&properties->robustStorageTexelBufferDescriptorSize) &&
visitor->Visit("uniformBufferDescriptorSize",
&properties->uniformBufferDescriptorSize) &&
visitor->Visit("robustUniformBufferDescriptorSize",
&properties->robustUniformBufferDescriptorSize) &&
visitor->Visit("storageBufferDescriptorSize",
&properties->storageBufferDescriptorSize) &&
visitor->Visit("robustStorageBufferDescriptorSize",
&properties->robustStorageBufferDescriptorSize) &&
visitor->Visit("inputAttachmentDescriptorSize",
&properties->inputAttachmentDescriptorSize) &&
visitor->Visit("accelerationStructureDescriptorSize",
&properties->accelerationStructureDescriptorSize) &&
visitor->Visit("maxSamplerDescriptorBufferRange",
&properties->maxSamplerDescriptorBufferRange) &&
visitor->Visit("maxResourceDescriptorBufferRange",
&properties->maxResourceDescriptorBufferRange) &&
visitor->Visit("samplerDescriptorBufferAddressSpaceSize",
&properties->samplerDescriptorBufferAddressSpaceSize) &&
visitor->Visit("resourceDescriptorBufferAddressSpaceSize",
&properties->resourceDescriptorBufferAddressSpaceSize) &&
visitor->Visit("descriptorBufferAddressSpaceSize",
&properties->descriptorBufferAddressSpaceSize);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDescriptorBufferTensorFeaturesARM* features) {
return
visitor->Visit("descriptorBufferTensorDescriptors",
&features->descriptorBufferTensorDescriptors);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDescriptorBufferTensorPropertiesARM* properties) {
return
visitor->Visit("tensorCaptureReplayDescriptorDataSize",
&properties->tensorCaptureReplayDescriptorDataSize) &&
visitor->Visit("tensorViewCaptureReplayDescriptorDataSize",
&properties->tensorViewCaptureReplayDescriptorDataSize) &&
visitor->Visit("tensorDescriptorSize", &properties->tensorDescriptorSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDescriptorIndexingFeatures* features) {
return
visitor->Visit("shaderInputAttachmentArrayDynamicIndexing",
&features->shaderInputAttachmentArrayDynamicIndexing) &&
visitor->Visit("shaderUniformTexelBufferArrayDynamicIndexing",
&features->shaderUniformTexelBufferArrayDynamicIndexing) &&
visitor->Visit("shaderStorageTexelBufferArrayDynamicIndexing",
&features->shaderStorageTexelBufferArrayDynamicIndexing) &&
visitor->Visit("shaderUniformBufferArrayNonUniformIndexing",
&features->shaderUniformBufferArrayNonUniformIndexing) &&
visitor->Visit("shaderSampledImageArrayNonUniformIndexing",
&features->shaderSampledImageArrayNonUniformIndexing) &&
visitor->Visit("shaderStorageBufferArrayNonUniformIndexing",
&features->shaderStorageBufferArrayNonUniformIndexing) &&
visitor->Visit("shaderStorageImageArrayNonUniformIndexing",
&features->shaderStorageImageArrayNonUniformIndexing) &&
visitor->Visit("shaderInputAttachmentArrayNonUniformIndexing",
&features->shaderInputAttachmentArrayNonUniformIndexing) &&
visitor->Visit(
"shaderUniformTexelBufferArrayNonUniformIndexing",
&features->shaderUniformTexelBufferArrayNonUniformIndexing) &&
visitor->Visit(
"shaderStorageTexelBufferArrayNonUniformIndexing",
&features->shaderStorageTexelBufferArrayNonUniformIndexing) &&
visitor->Visit(
"descriptorBindingUniformBufferUpdateAfterBind",
&features->descriptorBindingUniformBufferUpdateAfterBind) &&
visitor->Visit("descriptorBindingSampledImageUpdateAfterBind",
&features->descriptorBindingSampledImageUpdateAfterBind) &&
visitor->Visit("descriptorBindingStorageImageUpdateAfterBind",
&features->descriptorBindingStorageImageUpdateAfterBind) &&
visitor->Visit(
"descriptorBindingStorageBufferUpdateAfterBind",
&features->descriptorBindingStorageBufferUpdateAfterBind) &&
visitor->Visit(
"descriptorBindingUniformTexelBufferUpdateAfterBind",
&features->descriptorBindingUniformTexelBufferUpdateAfterBind) &&
visitor->Visit(
"descriptorBindingStorageTexelBufferUpdateAfterBind",
&features->descriptorBindingStorageTexelBufferUpdateAfterBind) &&
visitor->Visit("descriptorBindingUpdateUnusedWhilePending",
&features->descriptorBindingUpdateUnusedWhilePending) &&
visitor->Visit("descriptorBindingPartiallyBound",
&features->descriptorBindingPartiallyBound) &&
visitor->Visit("descriptorBindingVariableDescriptorCount",
&features->descriptorBindingVariableDescriptorCount) &&
visitor->Visit("runtimeDescriptorArray",
&features->runtimeDescriptorArray);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDescriptorIndexingProperties* properties) {
return
visitor->Visit("maxUpdateAfterBindDescriptorsInAllPools",
&properties->maxUpdateAfterBindDescriptorsInAllPools) &&
visitor->Visit(
"shaderUniformBufferArrayNonUniformIndexingNative",
&properties->shaderUniformBufferArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderSampledImageArrayNonUniformIndexingNative",
&properties->shaderSampledImageArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderStorageBufferArrayNonUniformIndexingNative",
&properties->shaderStorageBufferArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderStorageImageArrayNonUniformIndexingNative",
&properties->shaderStorageImageArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderInputAttachmentArrayNonUniformIndexingNative",
&properties->shaderInputAttachmentArrayNonUniformIndexingNative) &&
visitor->Visit("robustBufferAccessUpdateAfterBind",
&properties->robustBufferAccessUpdateAfterBind) &&
visitor->Visit("quadDivergentImplicitLod",
&properties->quadDivergentImplicitLod) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindSamplers",
&properties->maxPerStageDescriptorUpdateAfterBindSamplers) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindUniformBuffers",
&properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindStorageBuffers",
&properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindSampledImages",
&properties->maxPerStageDescriptorUpdateAfterBindSampledImages) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindStorageImages",
&properties->maxPerStageDescriptorUpdateAfterBindStorageImages) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindInputAttachments",
&properties->maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
visitor->Visit("maxPerStageUpdateAfterBindResources",
&properties->maxPerStageUpdateAfterBindResources) &&
visitor->Visit("maxDescriptorSetUpdateAfterBindSamplers",
&properties->maxDescriptorSetUpdateAfterBindSamplers) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindUniformBuffers",
&properties->maxDescriptorSetUpdateAfterBindUniformBuffers) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindUniformBuffersDynamic",
&properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageBuffers",
&properties->maxDescriptorSetUpdateAfterBindStorageBuffers) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageBuffersDynamic",
&properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindSampledImages",
&properties->maxDescriptorSetUpdateAfterBindSampledImages) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageImages",
&properties->maxDescriptorSetUpdateAfterBindStorageImages) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindInputAttachments",
&properties->maxDescriptorSetUpdateAfterBindInputAttachments);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV* features) {
return
visitor->Visit("descriptorPoolOverallocation",
&features->descriptorPoolOverallocation);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE* features) {
return
visitor->Visit("descriptorSetHostMapping",
&features->descriptorSetHostMapping);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV* features) {
return
visitor->Visit("deviceGeneratedCompute",
&features->deviceGeneratedCompute) &&
visitor->Visit("deviceGeneratedComputePipelines",
&features->deviceGeneratedComputePipelines) &&
visitor->Visit("deviceGeneratedComputeCaptureReplay",
&features->deviceGeneratedComputeCaptureReplay);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT* features) {
return
visitor->Visit("deviceGeneratedCommands",
&features->deviceGeneratedCommands) &&
visitor->Visit("dynamicGeneratedPipelineLayout",
&features->dynamicGeneratedPipelineLayout);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* features) {
return
visitor->Visit("deviceGeneratedCommands",
&features->deviceGeneratedCommands);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT* properties) {
return
visitor->Visit("maxIndirectPipelineCount",
&properties->maxIndirectPipelineCount) &&
visitor->Visit("maxIndirectShaderObjectCount",
&properties->maxIndirectShaderObjectCount) &&
visitor->Visit("maxIndirectSequenceCount",
&properties->maxIndirectSequenceCount) &&
visitor->Visit("maxIndirectCommandsTokenCount",
&properties->maxIndirectCommandsTokenCount) &&
visitor->Visit("maxIndirectCommandsTokenOffset",
&properties->maxIndirectCommandsTokenOffset) &&
visitor->Visit("maxIndirectCommandsIndirectStride",
&properties->maxIndirectCommandsIndirectStride) &&
visitor->Visit("supportedIndirectCommandsInputModes",
&properties->supportedIndirectCommandsInputModes) &&
visitor->Visit("supportedIndirectCommandsShaderStages",
&properties->supportedIndirectCommandsShaderStages) &&
visitor->Visit(
"supportedIndirectCommandsShaderStagesPipelineBinding",
&properties->supportedIndirectCommandsShaderStagesPipelineBinding) &&
visitor->Visit(
"supportedIndirectCommandsShaderStagesShaderBinding",
&properties->supportedIndirectCommandsShaderStagesShaderBinding) &&
visitor->Visit("deviceGeneratedCommandsTransformFeedback",
&properties->deviceGeneratedCommandsTransformFeedback) &&
visitor->Visit(
"deviceGeneratedCommandsMultiDrawIndirectCount",
&properties->deviceGeneratedCommandsMultiDrawIndirectCount);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* properties) {
return
visitor->Visit("maxGraphicsShaderGroupCount",
&properties->maxGraphicsShaderGroupCount) &&
visitor->Visit("maxIndirectSequenceCount",
&properties->maxIndirectSequenceCount) &&
visitor->Visit("maxIndirectCommandsTokenCount",
&properties->maxIndirectCommandsTokenCount) &&
visitor->Visit("maxIndirectCommandsStreamCount",
&properties->maxIndirectCommandsStreamCount) &&
visitor->Visit("maxIndirectCommandsTokenOffset",
&properties->maxIndirectCommandsTokenOffset) &&
visitor->Visit("maxIndirectCommandsStreamStride",
&properties->maxIndirectCommandsStreamStride) &&
visitor->Visit("minSequencesCountBufferOffsetAlignment",
&properties->minSequencesCountBufferOffsetAlignment) &&
visitor->Visit("minSequencesIndexBufferOffsetAlignment",
&properties->minSequencesIndexBufferOffsetAlignment) &&
visitor->Visit("minIndirectCommandsBufferOffsetAlignment",
&properties->minIndirectCommandsBufferOffsetAlignment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* features) {
return
visitor->Visit("deviceMemoryReport", &features->deviceMemoryReport);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDiagnosticsConfigFeaturesNV* features) {
return
visitor->Visit("diagnosticsConfig", &features->diagnosticsConfig);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDiscardRectanglePropertiesEXT* properties) {
return
visitor->Visit("maxDiscardRectangles", &properties->maxDiscardRectangles);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDriverProperties* properties) {
return
visitor->Visit("driverID", &properties->driverID) &&
visitor->Visit("driverName", &properties->driverName) &&
visitor->Visit("driverInfo", &properties->driverInfo) &&
visitor->Visit("conformanceVersion", &properties->conformanceVersion);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDrmPropertiesEXT* properties) {
return
visitor->Visit("hasPrimary", &properties->hasPrimary) &&
visitor->Visit("hasRender", &properties->hasRender) &&
visitor->Visit("primaryMajor", &properties->primaryMajor) &&
visitor->Visit("primaryMinor", &properties->primaryMinor) &&
visitor->Visit("renderMajor", &properties->renderMajor) &&
visitor->Visit("renderMinor", &properties->renderMinor);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceDynamicRenderingFeatures* features) {
return
visitor->Visit("dynamicRendering", &features->dynamicRendering);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDynamicRenderingLocalReadFeatures* features) {
return
visitor->Visit("dynamicRenderingLocalRead",
&features->dynamicRenderingLocalRead);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT* features) {
return
visitor->Visit("dynamicRenderingUnusedAttachments",
&features->dynamicRenderingUnusedAttachments);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceExclusiveScissorFeaturesNV* features) {
return
visitor->Visit("exclusiveScissor", &features->exclusiveScissor);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT* features) {
return
visitor->Visit("extendedDynamicState2",
&features->extendedDynamicState2) &&
visitor->Visit("extendedDynamicState2LogicOp",
&features->extendedDynamicState2LogicOp) &&
visitor->Visit("extendedDynamicState2PatchControlPoints",
&features->extendedDynamicState2PatchControlPoints);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExtendedDynamicState3FeaturesEXT* features) {
return
visitor->Visit(
"extendedDynamicState3TessellationDomainOrigin",
&features->extendedDynamicState3TessellationDomainOrigin) &&
visitor->Visit("extendedDynamicState3DepthClampEnable",
&features->extendedDynamicState3DepthClampEnable) &&
visitor->Visit("extendedDynamicState3PolygonMode",
&features->extendedDynamicState3PolygonMode) &&
visitor->Visit("extendedDynamicState3RasterizationSamples",
&features->extendedDynamicState3RasterizationSamples) &&
visitor->Visit("extendedDynamicState3SampleMask",
&features->extendedDynamicState3SampleMask) &&
visitor->Visit("extendedDynamicState3AlphaToCoverageEnable",
&features->extendedDynamicState3AlphaToCoverageEnable) &&
visitor->Visit("extendedDynamicState3AlphaToOneEnable",
&features->extendedDynamicState3AlphaToOneEnable) &&
visitor->Visit("extendedDynamicState3LogicOpEnable",
&features->extendedDynamicState3LogicOpEnable) &&
visitor->Visit("extendedDynamicState3ColorBlendEnable",
&features->extendedDynamicState3ColorBlendEnable) &&
visitor->Visit("extendedDynamicState3ColorBlendEquation",
&features->extendedDynamicState3ColorBlendEquation) &&
visitor->Visit("extendedDynamicState3ColorWriteMask",
&features->extendedDynamicState3ColorWriteMask) &&
visitor->Visit("extendedDynamicState3RasterizationStream",
&features->extendedDynamicState3RasterizationStream) &&
visitor->Visit(
"extendedDynamicState3ConservativeRasterizationMode",
&features->extendedDynamicState3ConservativeRasterizationMode) &&
visitor->Visit(
"extendedDynamicState3ExtraPrimitiveOverestimationSize",
&features->extendedDynamicState3ExtraPrimitiveOverestimationSize) &&
visitor->Visit("extendedDynamicState3DepthClipEnable",
&features->extendedDynamicState3DepthClipEnable) &&
visitor->Visit("extendedDynamicState3SampleLocationsEnable",
&features->extendedDynamicState3SampleLocationsEnable) &&
visitor->Visit("extendedDynamicState3ColorBlendAdvanced",
&features->extendedDynamicState3ColorBlendAdvanced) &&
visitor->Visit("extendedDynamicState3ProvokingVertexMode",
&features->extendedDynamicState3ProvokingVertexMode) &&
visitor->Visit("extendedDynamicState3LineRasterizationMode",
&features->extendedDynamicState3LineRasterizationMode) &&
visitor->Visit("extendedDynamicState3LineStippleEnable",
&features->extendedDynamicState3LineStippleEnable) &&
visitor->Visit(
"extendedDynamicState3DepthClipNegativeOneToOne",
&features->extendedDynamicState3DepthClipNegativeOneToOne) &&
visitor->Visit("extendedDynamicState3ViewportWScalingEnable",
&features->extendedDynamicState3ViewportWScalingEnable) &&
visitor->Visit("extendedDynamicState3ViewportSwizzle",
&features->extendedDynamicState3ViewportSwizzle) &&
visitor->Visit("extendedDynamicState3CoverageToColorEnable",
&features->extendedDynamicState3CoverageToColorEnable) &&
visitor->Visit("extendedDynamicState3CoverageToColorLocation",
&features->extendedDynamicState3CoverageToColorLocation) &&
visitor->Visit("extendedDynamicState3CoverageModulationMode",
&features->extendedDynamicState3CoverageModulationMode) &&
visitor->Visit(
"extendedDynamicState3CoverageModulationTableEnable",
&features->extendedDynamicState3CoverageModulationTableEnable) &&
visitor->Visit("extendedDynamicState3CoverageModulationTable",
&features->extendedDynamicState3CoverageModulationTable) &&
visitor->Visit("extendedDynamicState3CoverageReductionMode",
&features->extendedDynamicState3CoverageReductionMode) &&
visitor->Visit(
"extendedDynamicState3RepresentativeFragmentTestEnable",
&features->extendedDynamicState3RepresentativeFragmentTestEnable) &&
visitor->Visit("extendedDynamicState3ShadingRateImageEnable",
&features->extendedDynamicState3ShadingRateImageEnable);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExtendedDynamicState3PropertiesEXT* properties) {
return
visitor->Visit("dynamicPrimitiveTopologyUnrestricted",
&properties->dynamicPrimitiveTopologyUnrestricted);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* features) {
return
visitor->Visit("extendedDynamicState", &features->extendedDynamicState);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV* features) {
return
visitor->Visit("extendedSparseAddressSpace",
&features->extendedSparseAddressSpace);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV* properties) {
return
visitor->Visit("extendedSparseAddressSpaceSize",
&properties->extendedSparseAddressSpaceSize) &&
visitor->Visit("extendedSparseImageUsageFlags",
&properties->extendedSparseImageUsageFlags) &&
visitor->Visit("extendedSparseBufferUsageFlags",
&properties->extendedSparseBufferUsageFlags);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExternalComputeQueuePropertiesNV* properties) {
return
visitor->Visit("externalDataSize", &properties->externalDataSize) &&
visitor->Visit("maxExternalQueues", &properties->maxExternalQueues);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExternalFormatResolveFeaturesANDROID* features) {
return
visitor->Visit("externalFormatResolve", &features->externalFormatResolve);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExternalFormatResolvePropertiesANDROID* properties) {
return
visitor->Visit(
"nullColorAttachmentWithExternalFormatResolve",
&properties->nullColorAttachmentWithExternalFormatResolve) &&
visitor->Visit("externalFormatResolveChromaOffsetX",
&properties->externalFormatResolveChromaOffsetX) &&
visitor->Visit("externalFormatResolveChromaOffsetY",
&properties->externalFormatResolveChromaOffsetY);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceExternalMemoryHostPropertiesEXT* properties) {
return
visitor->Visit("minImportedHostPointerAlignment",
&properties->minImportedHostPointerAlignment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceExternalMemoryRDMAFeaturesNV* features) {
return
visitor->Visit("externalMemoryRDMA", &features->externalMemoryRDMA);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFaultFeaturesEXT* features) {
return
visitor->Visit("deviceFault", &features->deviceFault) &&
visitor->Visit("deviceFaultVendorBinary",
&features->deviceFaultVendorBinary);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderFloat16Int8Features* features) {
return
visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
visitor->Visit("shaderInt8", &features->shaderInt8);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFloatControlsProperties* properties) {
return
visitor->Visit("denormBehaviorIndependence",
&properties->denormBehaviorIndependence) &&
visitor->Visit("roundingModeIndependence",
&properties->roundingModeIndependence) &&
visitor->Visit("shaderSignedZeroInfNanPreserveFloat16",
&properties->shaderSignedZeroInfNanPreserveFloat16) &&
visitor->Visit("shaderSignedZeroInfNanPreserveFloat32",
&properties->shaderSignedZeroInfNanPreserveFloat32) &&
visitor->Visit("shaderSignedZeroInfNanPreserveFloat64",
&properties->shaderSignedZeroInfNanPreserveFloat64) &&
visitor->Visit("shaderDenormPreserveFloat16",
&properties->shaderDenormPreserveFloat16) &&
visitor->Visit("shaderDenormPreserveFloat32",
&properties->shaderDenormPreserveFloat32) &&
visitor->Visit("shaderDenormPreserveFloat64",
&properties->shaderDenormPreserveFloat64) &&
visitor->Visit("shaderDenormFlushToZeroFloat16",
&properties->shaderDenormFlushToZeroFloat16) &&
visitor->Visit("shaderDenormFlushToZeroFloat32",
&properties->shaderDenormFlushToZeroFloat32) &&
visitor->Visit("shaderDenormFlushToZeroFloat64",
&properties->shaderDenormFlushToZeroFloat64) &&
visitor->Visit("shaderRoundingModeRTEFloat16",
&properties->shaderRoundingModeRTEFloat16) &&
visitor->Visit("shaderRoundingModeRTEFloat32",
&properties->shaderRoundingModeRTEFloat32) &&
visitor->Visit("shaderRoundingModeRTEFloat64",
&properties->shaderRoundingModeRTEFloat64) &&
visitor->Visit("shaderRoundingModeRTZFloat16",
&properties->shaderRoundingModeRTZFloat16) &&
visitor->Visit("shaderRoundingModeRTZFloat32",
&properties->shaderRoundingModeRTZFloat32) &&
visitor->Visit("shaderRoundingModeRTZFloat64",
&properties->shaderRoundingModeRTZFloat64);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFormatPackFeaturesARM* features) {
return
visitor->Visit("formatPack", &features->formatPack);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* features) {
return
visitor->Visit("fragmentDensityMapDeferred",
&features->fragmentDensityMapDeferred);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* properties) {
return
visitor->Visit("subsampledLoads", &properties->subsampledLoads) &&
visitor->Visit("subsampledCoarseReconstructionEarlyAccess",
&properties->subsampledCoarseReconstructionEarlyAccess) &&
visitor->Visit("maxSubsampledArrayLayers",
&properties->maxSubsampledArrayLayers) &&
visitor->Visit("maxDescriptorSetSubsampledSamplers",
&properties->maxDescriptorSetSubsampledSamplers);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFragmentDensityMapFeaturesEXT* features) {
return
visitor->Visit("fragmentDensityMap", &features->fragmentDensityMap) &&
visitor->Visit("fragmentDensityMapDynamic",
&features->fragmentDensityMapDynamic) &&
visitor->Visit("fragmentDensityMapNonSubsampledImages",
&features->fragmentDensityMapNonSubsampledImages);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT* features) {
return
visitor->Visit("fragmentDensityMapOffset",
&features->fragmentDensityMapOffset);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT* properties) {
return
visitor->Visit("fragmentDensityOffsetGranularity",
&properties->fragmentDensityOffsetGranularity);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentDensityMapPropertiesEXT* properties) {
return
visitor->Visit("minFragmentDensityTexelSize",
&properties->minFragmentDensityTexelSize) &&
visitor->Visit("maxFragmentDensityTexelSize",
&properties->maxFragmentDensityTexelSize) &&
visitor->Visit("fragmentDensityInvocations",
&properties->fragmentDensityInvocations);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR* features) {
return
visitor->Visit("fragmentShaderBarycentric",
&features->fragmentShaderBarycentric);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR* properties) {
return
visitor->Visit(
"triStripVertexOrderIndependentOfProvokingVertex",
&properties->triStripVertexOrderIndependentOfProvokingVertex);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* features) {
return
visitor->Visit("fragmentShaderSampleInterlock",
&features->fragmentShaderSampleInterlock) &&
visitor->Visit("fragmentShaderPixelInterlock",
&features->fragmentShaderPixelInterlock) &&
visitor->Visit("fragmentShaderShadingRateInterlock",
&features->fragmentShaderShadingRateInterlock);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* features) {
return
visitor->Visit("fragmentShadingRateEnums",
&features->fragmentShadingRateEnums) &&
visitor->Visit("supersampleFragmentShadingRates",
&features->supersampleFragmentShadingRates) &&
visitor->Visit("noInvocationFragmentShadingRates",
&features->noInvocationFragmentShadingRates);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* properties) {
return
visitor->Visit("maxFragmentShadingRateInvocationCount",
&properties->maxFragmentShadingRateInvocationCount);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFragmentShadingRateFeaturesKHR* features) {
return
visitor->Visit("pipelineFragmentShadingRate",
&features->pipelineFragmentShadingRate) &&
visitor->Visit("primitiveFragmentShadingRate",
&features->primitiveFragmentShadingRate) &&
visitor->Visit("attachmentFragmentShadingRate",
&features->attachmentFragmentShadingRate);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceFragmentShadingRatePropertiesKHR* properties) {
return
visitor->Visit("minFragmentShadingRateAttachmentTexelSize",
&properties->minFragmentShadingRateAttachmentTexelSize) &&
visitor->Visit("maxFragmentShadingRateAttachmentTexelSize",
&properties->maxFragmentShadingRateAttachmentTexelSize) &&
visitor->Visit(
"maxFragmentShadingRateAttachmentTexelSizeAspectRatio",
&properties->maxFragmentShadingRateAttachmentTexelSizeAspectRatio) &&
visitor->Visit(
"primitiveFragmentShadingRateWithMultipleViewports",
&properties->primitiveFragmentShadingRateWithMultipleViewports) &&
visitor->Visit("layeredShadingRateAttachments",
&properties->layeredShadingRateAttachments) &&
visitor->Visit("fragmentShadingRateNonTrivialCombinerOps",
&properties->fragmentShadingRateNonTrivialCombinerOps) &&
visitor->Visit("maxFragmentSize", &properties->maxFragmentSize) &&
visitor->Visit("maxFragmentSizeAspectRatio",
&properties->maxFragmentSizeAspectRatio) &&
visitor->Visit("maxFragmentShadingRateCoverageSamples",
&properties->maxFragmentShadingRateCoverageSamples) &&
visitor->Visit("maxFragmentShadingRateRasterizationSamples",
&properties->maxFragmentShadingRateRasterizationSamples) &&
visitor->Visit(
"fragmentShadingRateWithShaderDepthStencilWrites",
&properties->fragmentShadingRateWithShaderDepthStencilWrites) &&
visitor->Visit("fragmentShadingRateWithSampleMask",
&properties->fragmentShadingRateWithSampleMask) &&
visitor->Visit("fragmentShadingRateWithShaderSampleMask",
&properties->fragmentShadingRateWithShaderSampleMask) &&
visitor->Visit(
"fragmentShadingRateWithConservativeRasterization",
&properties->fragmentShadingRateWithConservativeRasterization) &&
visitor->Visit(
"fragmentShadingRateWithFragmentShaderInterlock",
&properties->fragmentShadingRateWithFragmentShaderInterlock) &&
visitor->Visit(
"fragmentShadingRateWithCustomSampleLocations",
&properties->fragmentShadingRateWithCustomSampleLocations) &&
visitor->Visit("fragmentShadingRateStrictMultiplyCombiner",
&properties->fragmentShadingRateStrictMultiplyCombiner);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceFrameBoundaryFeaturesEXT* features) {
return
visitor->Visit("frameBoundary", &features->frameBoundary);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceGlobalPriorityQueryFeatures* features) {
return
visitor->Visit("globalPriorityQuery", &features->globalPriorityQuery);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT* features) {
return
visitor->Visit("graphicsPipelineLibrary",
&features->graphicsPipelineLibrary);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT* properties) {
return
visitor->Visit("graphicsPipelineLibraryFastLinking",
&properties->graphicsPipelineLibraryFastLinking) &&
visitor->Visit(
"graphicsPipelineLibraryIndependentInterpolationDecoration",
&properties
->graphicsPipelineLibraryIndependentInterpolationDecoration);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceHdrVividFeaturesHUAWEI* features) {
return
visitor->Visit("hdrVivid", &features->hdrVivid);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceHostImageCopyFeatures* features) {
return
visitor->Visit("hostImageCopy", &features->hostImageCopy);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceHostImageCopyProperties* properties) {
return
visitor->Visit("copySrcLayoutCount", &properties->copySrcLayoutCount) &&
visitor->VisitArray("pCopySrcLayouts", properties->copySrcLayoutCount,
&properties->pCopySrcLayouts) &&
visitor->Visit("copyDstLayoutCount", &properties->copyDstLayoutCount) &&
visitor->VisitArray("pCopyDstLayouts", properties->copyDstLayoutCount,
&properties->pCopyDstLayouts) &&
visitor->Visit("optimalTilingLayoutUUID",
&properties->optimalTilingLayoutUUID) &&
visitor->Visit("identicalMemoryTypeRequirements",
&properties->identicalMemoryTypeRequirements);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceHostQueryResetFeatures* features) {
return
visitor->Visit("hostQueryReset", &features->hostQueryReset);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceIDProperties* properties) {
return
visitor->Visit("deviceUUID", &properties->deviceUUID) &&
visitor->Visit("driverUUID", &properties->driverUUID) &&
visitor->Visit("deviceLUID", &properties->deviceLUID) &&
visitor->Visit("deviceNodeMask", &properties->deviceNodeMask) &&
visitor->Visit("deviceLUIDValid", &properties->deviceLUIDValid);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImage2DViewOf3DFeaturesEXT* features) {
return
visitor->Visit("image2DViewOf3D", &features->image2DViewOf3D) &&
visitor->Visit("sampler2DViewOf3D", &features->sampler2DViewOf3D);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceImageAlignmentControlFeaturesMESA* features) {
return
visitor->Visit("imageAlignmentControl", &features->imageAlignmentControl);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceImageAlignmentControlPropertiesMESA* properties) {
return
visitor->Visit("supportedImageAlignmentMask",
&properties->supportedImageAlignmentMask);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceImageCompressionControlFeaturesEXT* features) {
return
visitor->Visit("imageCompressionControl",
&features->imageCompressionControl);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT* features) {
return
visitor->Visit("imageCompressionControlSwapchain",
&features->imageCompressionControlSwapchain);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImageProcessing2FeaturesQCOM* features) {
return
visitor->Visit("textureBlockMatch2", &features->textureBlockMatch2);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceImageProcessing2PropertiesQCOM* properties) {
return
visitor->Visit("maxBlockMatchWindow", &properties->maxBlockMatchWindow);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImageProcessingFeaturesQCOM* features) {
return
visitor->Visit("textureSampleWeighted",
&features->textureSampleWeighted) &&
visitor->Visit("textureBoxFilter", &features->textureBoxFilter) &&
visitor->Visit("textureBlockMatch", &features->textureBlockMatch);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImageProcessingPropertiesQCOM* properties) {
return
visitor->Visit("maxWeightFilterPhases",
&properties->maxWeightFilterPhases) &&
visitor->Visit("maxWeightFilterDimension",
&properties->maxWeightFilterDimension) &&
visitor->Visit("maxBlockMatchRegion", &properties->maxBlockMatchRegion) &&
visitor->Visit("maxBoxFilterBlockSize",
&properties->maxBoxFilterBlockSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImageRobustnessFeatures* features) {
return
visitor->Visit("robustImageAccess", &features->robustImageAccess);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT* features) {
return
visitor->Visit("imageSlicedViewOf3D", &features->imageSlicedViewOf3D);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImageViewMinLodFeaturesEXT* features) {
return
visitor->Visit("minLod", &features->minLod);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceImagelessFramebufferFeatures* features) {
return
visitor->Visit("imagelessFramebuffer", &features->imagelessFramebuffer);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceIndexTypeUint8Features* features) {
return
visitor->Visit("indexTypeUint8", &features->indexTypeUint8);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceInheritedViewportScissorFeaturesNV* features) {
return
visitor->Visit("inheritedViewportScissor2D",
&features->inheritedViewportScissor2D);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceInlineUniformBlockFeatures* features) {
return
visitor->Visit("inlineUniformBlock", &features->inlineUniformBlock) &&
visitor->Visit(
"descriptorBindingInlineUniformBlockUpdateAfterBind",
&features->descriptorBindingInlineUniformBlockUpdateAfterBind);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceInlineUniformBlockProperties* properties) {
return
visitor->Visit("maxInlineUniformBlockSize",
&properties->maxInlineUniformBlockSize) &&
visitor->Visit("maxPerStageDescriptorInlineUniformBlocks",
&properties->maxPerStageDescriptorInlineUniformBlocks) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks",
&properties
->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks) &&
visitor->Visit("maxDescriptorSetInlineUniformBlocks",
&properties->maxDescriptorSetInlineUniformBlocks) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindInlineUniformBlocks",
&properties->maxDescriptorSetUpdateAfterBindInlineUniformBlocks);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceInvocationMaskFeaturesHUAWEI* features) {
return
visitor->Visit("invocationMask", &features->invocationMask);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLayeredApiPropertiesListKHR* properties) {
return
visitor->Visit("layeredApiCount", &properties->layeredApiCount) &&
visitor->VisitArray("pLayeredApis", properties->layeredApiCount,
&properties->pLayeredApis);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLayeredDriverPropertiesMSFT* properties) {
return
visitor->Visit("underlyingAPI", &properties->underlyingAPI);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLegacyDitheringFeaturesEXT* features) {
return
visitor->Visit("legacyDithering", &features->legacyDithering);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT* features) {
return
visitor->Visit("legacyVertexAttributes",
&features->legacyVertexAttributes);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceLegacyVertexAttributesPropertiesEXT* properties) {
return
visitor->Visit("nativeUnalignedPerformance",
&properties->nativeUnalignedPerformance);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLineRasterizationFeatures* features) {
return
visitor->Visit("rectangularLines", &features->rectangularLines) &&
visitor->Visit("bresenhamLines", &features->bresenhamLines) &&
visitor->Visit("smoothLines", &features->smoothLines) &&
visitor->Visit("stippledRectangularLines",
&features->stippledRectangularLines) &&
visitor->Visit("stippledBresenhamLines",
&features->stippledBresenhamLines) &&
visitor->Visit("stippledSmoothLines", &features->stippledSmoothLines);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLineRasterizationProperties* properties) {
return
visitor->Visit("lineSubPixelPrecisionBits",
&properties->lineSubPixelPrecisionBits);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceLinearColorAttachmentFeaturesNV* features) {
return
visitor->Visit("linearColorAttachment", &features->linearColorAttachment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance3Properties* properties) {
return
visitor->Visit("maxPerSetDescriptors",
&properties->maxPerSetDescriptors) &&
visitor->Visit("maxMemoryAllocationSize",
&properties->maxMemoryAllocationSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance4Features* features) {
return
visitor->Visit("maintenance4", &features->maintenance4);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance4Properties* properties) {
return
visitor->Visit("maxBufferSize", &properties->maxBufferSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance5Features* features) {
return
visitor->Visit("maintenance5", &features->maintenance5);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance5Properties* properties) {
return
visitor->Visit(
"earlyFragmentMultisampleCoverageAfterSampleCounting",
&properties->earlyFragmentMultisampleCoverageAfterSampleCounting) &&
visitor->Visit(
"earlyFragmentSampleMaskTestBeforeSampleCounting",
&properties->earlyFragmentSampleMaskTestBeforeSampleCounting) &&
visitor->Visit("depthStencilSwizzleOneSupport",
&properties->depthStencilSwizzleOneSupport) &&
visitor->Visit("polygonModePointSize",
&properties->polygonModePointSize) &&
visitor->Visit(
"nonStrictSinglePixelWideLinesUseParallelogram",
&properties->nonStrictSinglePixelWideLinesUseParallelogram) &&
visitor->Visit("nonStrictWideLinesUseParallelogram",
&properties->nonStrictWideLinesUseParallelogram);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance6Features* features) {
return
visitor->Visit("maintenance6", &features->maintenance6);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance6Properties* properties) {
return
visitor->Visit("blockTexelViewCompatibleMultipleLayers",
&properties->blockTexelViewCompatibleMultipleLayers) &&
visitor->Visit("maxCombinedImageSamplerDescriptorCount",
&properties->maxCombinedImageSamplerDescriptorCount) &&
visitor->Visit("fragmentShadingRateClampCombinerInputs",
&properties->fragmentShadingRateClampCombinerInputs);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance7FeaturesKHR* features) {
return
visitor->Visit("maintenance7", &features->maintenance7);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance7PropertiesKHR* properties) {
return
visitor->Visit("robustFragmentShadingRateAttachmentAccess",
&properties->robustFragmentShadingRateAttachmentAccess) &&
visitor->Visit("separateDepthStencilAttachmentAccess",
&properties->separateDepthStencilAttachmentAccess) &&
visitor->Visit("maxDescriptorSetTotalUniformBuffersDynamic",
&properties->maxDescriptorSetTotalUniformBuffersDynamic) &&
visitor->Visit("maxDescriptorSetTotalStorageBuffersDynamic",
&properties->maxDescriptorSetTotalStorageBuffersDynamic) &&
visitor->Visit("maxDescriptorSetTotalBuffersDynamic",
&properties->maxDescriptorSetTotalBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic",
&properties
->maxDescriptorSetUpdateAfterBindTotalUniformBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic",
&properties
->maxDescriptorSetUpdateAfterBindTotalStorageBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindTotalBuffersDynamic",
&properties->maxDescriptorSetUpdateAfterBindTotalBuffersDynamic);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance8FeaturesKHR* features) {
return
visitor->Visit("maintenance8", &features->maintenance8);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance9FeaturesKHR* features) {
return
visitor->Visit("maintenance9", &features->maintenance9);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMaintenance9PropertiesKHR* properties) {
return
visitor->Visit("image2DViewOf3DSparse",
&properties->image2DViewOf3DSparse) &&
visitor->Visit("defaultVertexAttributeValue",
&properties->defaultVertexAttributeValue);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMapMemoryPlacedFeaturesEXT* features) {
return
visitor->Visit("memoryMapPlaced", &features->memoryMapPlaced) &&
visitor->Visit("memoryMapRangePlaced", &features->memoryMapRangePlaced) &&
visitor->Visit("memoryUnmapReserve", &features->memoryUnmapReserve);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMapMemoryPlacedPropertiesEXT* properties) {
return
visitor->Visit("minPlacedMemoryMapAlignment",
&properties->minPlacedMemoryMapAlignment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMemoryDecompressionFeaturesNV* features) {
return
visitor->Visit("memoryDecompression", &features->memoryDecompression);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceMemoryDecompressionPropertiesNV* properties) {
return
visitor->Visit("decompressionMethods",
&properties->decompressionMethods) &&
visitor->Visit("maxDecompressionIndirectCount",
&properties->maxDecompressionIndirectCount);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMemoryPriorityFeaturesEXT* features) {
return
visitor->Visit("memoryPriority", &features->memoryPriority);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMeshShaderFeaturesEXT* features) {
return
visitor->Visit("taskShader", &features->taskShader) &&
visitor->Visit("meshShader", &features->meshShader) &&
visitor->Visit("multiviewMeshShader", &features->multiviewMeshShader) &&
visitor->Visit("primitiveFragmentShadingRateMeshShader",
&features->primitiveFragmentShadingRateMeshShader) &&
visitor->Visit("meshShaderQueries", &features->meshShaderQueries);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMeshShaderFeaturesNV* features) {
return
visitor->Visit("taskShader", &features->taskShader) &&
visitor->Visit("meshShader", &features->meshShader);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMeshShaderPropertiesEXT* properties) {
return
visitor->Visit("maxTaskWorkGroupTotalCount",
&properties->maxTaskWorkGroupTotalCount) &&
visitor->Visit("maxTaskWorkGroupCount",
&properties->maxTaskWorkGroupCount) &&
visitor->Visit("maxTaskWorkGroupInvocations",
&properties->maxTaskWorkGroupInvocations) &&
visitor->Visit("maxTaskWorkGroupSize",
&properties->maxTaskWorkGroupSize) &&
visitor->Visit("maxTaskPayloadSize", &properties->maxTaskPayloadSize) &&
visitor->Visit("maxTaskSharedMemorySize",
&properties->maxTaskSharedMemorySize) &&
visitor->Visit("maxTaskPayloadAndSharedMemorySize",
&properties->maxTaskPayloadAndSharedMemorySize) &&
visitor->Visit("maxMeshWorkGroupTotalCount",
&properties->maxMeshWorkGroupTotalCount) &&
visitor->Visit("maxMeshWorkGroupCount",
&properties->maxMeshWorkGroupCount) &&
visitor->Visit("maxMeshWorkGroupInvocations",
&properties->maxMeshWorkGroupInvocations) &&
visitor->Visit("maxMeshWorkGroupSize",
&properties->maxMeshWorkGroupSize) &&
visitor->Visit("maxMeshSharedMemorySize",
&properties->maxMeshSharedMemorySize) &&
visitor->Visit("maxMeshPayloadAndSharedMemorySize",
&properties->maxMeshPayloadAndSharedMemorySize) &&
visitor->Visit("maxMeshOutputMemorySize",
&properties->maxMeshOutputMemorySize) &&
visitor->Visit("maxMeshPayloadAndOutputMemorySize",
&properties->maxMeshPayloadAndOutputMemorySize) &&
visitor->Visit("maxMeshOutputComponents",
&properties->maxMeshOutputComponents) &&
visitor->Visit("maxMeshOutputVertices",
&properties->maxMeshOutputVertices) &&
visitor->Visit("maxMeshOutputPrimitives",
&properties->maxMeshOutputPrimitives) &&
visitor->Visit("maxMeshOutputLayers", &properties->maxMeshOutputLayers) &&
visitor->Visit("maxMeshMultiviewViewCount",
&properties->maxMeshMultiviewViewCount) &&
visitor->Visit("meshOutputPerVertexGranularity",
&properties->meshOutputPerVertexGranularity) &&
visitor->Visit("meshOutputPerPrimitiveGranularity",
&properties->meshOutputPerPrimitiveGranularity) &&
visitor->Visit("maxPreferredTaskWorkGroupInvocations",
&properties->maxPreferredTaskWorkGroupInvocations) &&
visitor->Visit("maxPreferredMeshWorkGroupInvocations",
&properties->maxPreferredMeshWorkGroupInvocations) &&
visitor->Visit("prefersLocalInvocationVertexOutput",
&properties->prefersLocalInvocationVertexOutput) &&
visitor->Visit("prefersLocalInvocationPrimitiveOutput",
&properties->prefersLocalInvocationPrimitiveOutput) &&
visitor->Visit("prefersCompactVertexOutput",
&properties->prefersCompactVertexOutput) &&
visitor->Visit("prefersCompactPrimitiveOutput",
&properties->prefersCompactPrimitiveOutput);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMeshShaderPropertiesNV* properties) {
return
visitor->Visit("maxDrawMeshTasksCount",
&properties->maxDrawMeshTasksCount) &&
visitor->Visit("maxTaskWorkGroupInvocations",
&properties->maxTaskWorkGroupInvocations) &&
visitor->Visit("maxTaskWorkGroupSize",
&properties->maxTaskWorkGroupSize) &&
visitor->Visit("maxTaskTotalMemorySize",
&properties->maxTaskTotalMemorySize) &&
visitor->Visit("maxTaskOutputCount", &properties->maxTaskOutputCount) &&
visitor->Visit("maxMeshWorkGroupInvocations",
&properties->maxMeshWorkGroupInvocations) &&
visitor->Visit("maxMeshWorkGroupSize",
&properties->maxMeshWorkGroupSize) &&
visitor->Visit("maxMeshTotalMemorySize",
&properties->maxMeshTotalMemorySize) &&
visitor->Visit("maxMeshOutputVertices",
&properties->maxMeshOutputVertices) &&
visitor->Visit("maxMeshOutputPrimitives",
&properties->maxMeshOutputPrimitives) &&
visitor->Visit("maxMeshMultiviewViewCount",
&properties->maxMeshMultiviewViewCount) &&
visitor->Visit("meshOutputPerVertexGranularity",
&properties->meshOutputPerVertexGranularity) &&
visitor->Visit("meshOutputPerPrimitiveGranularity",
&properties->meshOutputPerPrimitiveGranularity);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMultiDrawFeaturesEXT* features) {
return
visitor->Visit("multiDraw", &features->multiDraw);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMultiDrawPropertiesEXT* properties) {
return
visitor->Visit("maxMultiDrawCount", &properties->maxMultiDrawCount);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT* features) {
return
visitor->Visit("multisampledRenderToSingleSampled",
&features->multisampledRenderToSingleSampled);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMultiviewFeatures* features) {
return
visitor->Visit("multiview", &features->multiview) &&
visitor->Visit("multiviewGeometryShader",
&features->multiviewGeometryShader) &&
visitor->Visit("multiviewTessellationShader",
&features->multiviewTessellationShader);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* properties) {
return
visitor->Visit("perViewPositionAllComponents",
&properties->perViewPositionAllComponents);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM* features) {
return
visitor->Visit("multiviewPerViewRenderAreas",
&features->multiviewPerViewRenderAreas);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM* features) {
return
visitor->Visit("multiviewPerViewViewports",
&features->multiviewPerViewViewports);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMultiviewProperties* properties) {
return
visitor->Visit("maxMultiviewViewCount",
&properties->maxMultiviewViewCount) &&
visitor->Visit("maxMultiviewInstanceIndex",
&properties->maxMultiviewInstanceIndex);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT* features) {
return
visitor->Visit("mutableDescriptorType", &features->mutableDescriptorType);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceNestedCommandBufferFeaturesEXT* features) {
return
visitor->Visit("nestedCommandBuffer", &features->nestedCommandBuffer) &&
visitor->Visit("nestedCommandBufferRendering",
&features->nestedCommandBufferRendering) &&
visitor->Visit("nestedCommandBufferSimultaneousUse",
&features->nestedCommandBufferSimultaneousUse);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceNestedCommandBufferPropertiesEXT* properties) {
return
visitor->Visit("maxCommandBufferNestingLevel",
&properties->maxCommandBufferNestingLevel);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT* features) {
return
visitor->Visit("nonSeamlessCubeMap", &features->nonSeamlessCubeMap);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceOpacityMicromapFeaturesEXT* features) {
return
visitor->Visit("micromap", &features->micromap) &&
visitor->Visit("micromapCaptureReplay",
&features->micromapCaptureReplay) &&
visitor->Visit("micromapHostCommands", &features->micromapHostCommands);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceOpacityMicromapPropertiesEXT* properties) {
return
visitor->Visit("maxOpacity2StateSubdivisionLevel",
&properties->maxOpacity2StateSubdivisionLevel) &&
visitor->Visit("maxOpacity4StateSubdivisionLevel",
&properties->maxOpacity4StateSubdivisionLevel);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceOpticalFlowFeaturesNV* features) {
return
visitor->Visit("opticalFlow", &features->opticalFlow);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceOpticalFlowPropertiesNV* properties) {
return
visitor->Visit("supportedOutputGridSizes",
&properties->supportedOutputGridSizes) &&
visitor->Visit("supportedHintGridSizes",
&properties->supportedHintGridSizes) &&
visitor->Visit("hintSupported", &properties->hintSupported) &&
visitor->Visit("costSupported", &properties->costSupported) &&
visitor->Visit("bidirectionalFlowSupported",
&properties->bidirectionalFlowSupported) &&
visitor->Visit("globalFlowSupported", &properties->globalFlowSupported) &&
visitor->Visit("minWidth", &properties->minWidth) &&
visitor->Visit("minHeight", &properties->minHeight) &&
visitor->Visit("maxWidth", &properties->maxWidth) &&
visitor->Visit("maxHeight", &properties->maxHeight) &&
visitor->Visit("maxNumRegionsOfInterest",
&properties->maxNumRegionsOfInterest);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePCIBusInfoPropertiesEXT* properties) {
return
visitor->Visit("pciDomain", &properties->pciDomain) &&
visitor->Visit("pciBus", &properties->pciBus) &&
visitor->Visit("pciDevice", &properties->pciDevice) &&
visitor->Visit("pciFunction", &properties->pciFunction);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT* features) {
return
visitor->Visit("pageableDeviceLocalMemory",
&features->pageableDeviceLocalMemory);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV* features) {
return
visitor->Visit("partitionedAccelerationStructure",
&features->partitionedAccelerationStructure);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV* properties) {
return
visitor->Visit("maxPartitionCount", &properties->maxPartitionCount);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePerStageDescriptorSetFeaturesNV* features) {
return
visitor->Visit("perStageDescriptorSet",
&features->perStageDescriptorSet) &&
visitor->Visit("dynamicPipelineLayout", &features->dynamicPipelineLayout);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePerformanceQueryFeaturesKHR* features) {
return
visitor->Visit("performanceCounterQueryPools",
&features->performanceCounterQueryPools) &&
visitor->Visit("performanceCounterMultipleQueryPools",
&features->performanceCounterMultipleQueryPools);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePerformanceQueryPropertiesKHR* properties) {
return
visitor->Visit("allowCommandBufferQueryCopies",
&properties->allowCommandBufferQueryCopies);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePipelineBinaryFeaturesKHR* features) {
return
visitor->Visit("pipelineBinaries", &features->pipelineBinaries);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePipelineBinaryPropertiesKHR* properties) {
return
visitor->Visit("pipelineBinaryInternalCache",
&properties->pipelineBinaryInternalCache) &&
visitor->Visit("pipelineBinaryInternalCacheControl",
&properties->pipelineBinaryInternalCacheControl) &&
visitor->Visit("pipelineBinaryPrefersInternalCache",
&properties->pipelineBinaryPrefersInternalCache) &&
visitor->Visit("pipelineBinaryPrecompiledInternalCache",
&properties->pipelineBinaryPrecompiledInternalCache) &&
visitor->Visit("pipelineBinaryCompressedData",
&properties->pipelineBinaryCompressedData);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePipelineCreationCacheControlFeatures* features) {
return
visitor->Visit("pipelineCreationCacheControl",
&features->pipelineCreationCacheControl);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* properties) {
return
visitor->Visit("pipelineExecutableInfo",
&properties->pipelineExecutableInfo);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT* features) {
return
visitor->Visit("pipelineLibraryGroupHandles",
&features->pipelineLibraryGroupHandles);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePipelineOpacityMicromapFeaturesARM* features) {
return
visitor->Visit("pipelineOpacityMicromap",
&features->pipelineOpacityMicromap);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePipelinePropertiesFeaturesEXT* properties) {
return
visitor->Visit("pipelinePropertiesIdentifier",
&properties->pipelinePropertiesIdentifier);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePipelineProtectedAccessFeatures* features) {
return
visitor->Visit("pipelineProtectedAccess",
&features->pipelineProtectedAccess);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePipelineRobustnessFeatures* features) {
return
visitor->Visit("pipelineRobustness", &features->pipelineRobustness);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePipelineRobustnessProperties* properties) {
return
visitor->Visit("defaultRobustnessStorageBuffers",
&properties->defaultRobustnessStorageBuffers) &&
visitor->Visit("defaultRobustnessUniformBuffers",
&properties->defaultRobustnessUniformBuffers) &&
visitor->Visit("defaultRobustnessVertexInputs",
&properties->defaultRobustnessVertexInputs) &&
visitor->Visit("defaultRobustnessImages",
&properties->defaultRobustnessImages);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePointClippingProperties* properties) {
return
visitor->Visit("pointClippingBehavior",
&properties->pointClippingBehavior);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePresentBarrierFeaturesNV* features) {
return
visitor->Visit("presentBarrier", &features->presentBarrier);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePresentId2FeaturesKHR* features) {
return
visitor->Visit("presentId2", &features->presentId2);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePresentIdFeaturesKHR* features) {
return
visitor->Visit("presentId", &features->presentId);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePresentModeFifoLatestReadyFeaturesEXT* features) {
return
visitor->Visit("presentModeFifoLatestReady",
&features->presentModeFifoLatestReady);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePresentWait2FeaturesKHR* features) {
return
visitor->Visit("presentWait2", &features->presentWait2);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePresentWaitFeaturesKHR* features) {
return
visitor->Visit("presentWait", &features->presentWait);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT* features) {
return
visitor->Visit("primitiveTopologyListRestart",
&features->primitiveTopologyListRestart) &&
visitor->Visit("primitiveTopologyPatchListRestart",
&features->primitiveTopologyPatchListRestart);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT* features) {
return
visitor->Visit("primitivesGeneratedQuery",
&features->primitivesGeneratedQuery) &&
visitor->Visit(
"primitivesGeneratedQueryWithRasterizerDiscard",
&features->primitivesGeneratedQueryWithRasterizerDiscard) &&
visitor->Visit("primitivesGeneratedQueryWithNonZeroStreams",
&features->primitivesGeneratedQueryWithNonZeroStreams);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePrivateDataFeatures* features) {
return
visitor->Visit("privateData", &features->privateData);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceProtectedMemoryFeatures* features) {
return
visitor->Visit("protectedMemory", &features->protectedMemory);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceProtectedMemoryProperties* properties) {
return
visitor->Visit("protectedNoFault", &properties->protectedNoFault);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceProvokingVertexFeaturesEXT* features) {
return
visitor->Visit("provokingVertexLast", &features->provokingVertexLast) &&
visitor->Visit("transformFeedbackPreservesProvokingVertex",
&features->transformFeedbackPreservesProvokingVertex);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceProvokingVertexPropertiesEXT* properties) {
return
visitor->Visit("provokingVertexModePerPipeline",
&properties->provokingVertexModePerPipeline) &&
visitor->Visit(
"transformFeedbackPreservesTriangleFanProvokingVertex",
&properties->transformFeedbackPreservesTriangleFanProvokingVertex);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDevicePushDescriptorProperties* properties) {
return
visitor->Visit("maxPushDescriptors", &properties->maxPushDescriptors);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT* features) {
return
visitor->Visit("formatRgba10x6WithoutYCbCrSampler",
&features->formatRgba10x6WithoutYCbCrSampler);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT* features) {
return
visitor->Visit("rasterizationOrderColorAttachmentAccess",
&features->rasterizationOrderColorAttachmentAccess) &&
visitor->Visit("rasterizationOrderDepthAttachmentAccess",
&features->rasterizationOrderDepthAttachmentAccess) &&
visitor->Visit("rasterizationOrderStencilAttachmentAccess",
&features->rasterizationOrderStencilAttachmentAccess);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRawAccessChainsFeaturesNV* features) {
return
visitor->Visit("shaderRawAccessChains", &features->shaderRawAccessChains);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRayQueryFeaturesKHR* features) {
return
visitor->Visit("rayQuery", &features->rayQuery);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV* features) {
return
visitor->Visit("rayTracingInvocationReorder",
&features->rayTracingInvocationReorder);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV* properties) {
return
visitor->Visit("rayTracingInvocationReorderReorderingHint",
&properties->rayTracingInvocationReorderReorderingHint);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV* features) {
return
visitor->Visit("spheres", &features->spheres) &&
visitor->Visit("linearSweptSpheres", &features->linearSweptSpheres);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR* features) {
return
visitor->Visit("rayTracingMaintenance1",
&features->rayTracingMaintenance1) &&
visitor->Visit("rayTracingPipelineTraceRaysIndirect2",
&features->rayTracingPipelineTraceRaysIndirect2);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRayTracingMotionBlurFeaturesNV* features) {
return
visitor->Visit("rayTracingMotionBlur", &features->rayTracingMotionBlur) &&
visitor->Visit("rayTracingMotionBlurPipelineTraceRaysIndirect",
&features->rayTracingMotionBlurPipelineTraceRaysIndirect);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRayTracingPipelineFeaturesKHR* features) {
return
visitor->Visit("rayTracingPipeline", &features->rayTracingPipeline) &&
visitor->Visit(
"rayTracingPipelineShaderGroupHandleCaptureReplay",
&features->rayTracingPipelineShaderGroupHandleCaptureReplay) &&
visitor->Visit(
"rayTracingPipelineShaderGroupHandleCaptureReplayMixed",
&features->rayTracingPipelineShaderGroupHandleCaptureReplayMixed) &&
visitor->Visit("rayTracingPipelineTraceRaysIndirect",
&features->rayTracingPipelineTraceRaysIndirect) &&
visitor->Visit("rayTraversalPrimitiveCulling",
&features->rayTraversalPrimitiveCulling);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRayTracingPipelinePropertiesKHR* properties) {
return
visitor->Visit("shaderGroupHandleSize",
&properties->shaderGroupHandleSize) &&
visitor->Visit("maxRayRecursionDepth",
&properties->maxRayRecursionDepth) &&
visitor->Visit("maxShaderGroupStride",
&properties->maxShaderGroupStride) &&
visitor->Visit("shaderGroupBaseAlignment",
&properties->shaderGroupBaseAlignment) &&
visitor->Visit("shaderGroupHandleCaptureReplaySize",
&properties->shaderGroupHandleCaptureReplaySize) &&
visitor->Visit("maxRayDispatchInvocationCount",
&properties->maxRayDispatchInvocationCount) &&
visitor->Visit("shaderGroupHandleAlignment",
&properties->shaderGroupHandleAlignment) &&
visitor->Visit("maxRayHitAttributeSize",
&properties->maxRayHitAttributeSize);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR* features) {
return
visitor->Visit("rayTracingPositionFetch",
&features->rayTracingPositionFetch);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRayTracingPropertiesNV* properties) {
return
visitor->Visit("shaderGroupHandleSize",
&properties->shaderGroupHandleSize) &&
visitor->Visit("maxRecursionDepth", &properties->maxRecursionDepth) &&
visitor->Visit("maxShaderGroupStride",
&properties->maxShaderGroupStride) &&
visitor->Visit("shaderGroupBaseAlignment",
&properties->shaderGroupBaseAlignment) &&
visitor->Visit("maxGeometryCount", &properties->maxGeometryCount) &&
visitor->Visit("maxInstanceCount", &properties->maxInstanceCount) &&
visitor->Visit("maxTriangleCount", &properties->maxTriangleCount) &&
visitor->Visit("maxDescriptorSetAccelerationStructures",
&properties->maxDescriptorSetAccelerationStructures);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRayTracingValidationFeaturesNV* features) {
return
visitor->Visit("rayTracingValidation", &features->rayTracingValidation);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG* features) {
return
visitor->Visit("relaxedLineRasterization",
&features->relaxedLineRasterization);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRenderPassStripedFeaturesARM* features) {
return
visitor->Visit("renderPassStriped", &features->renderPassStriped);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRenderPassStripedPropertiesARM* properties) {
return
visitor->Visit("renderPassStripeGranularity",
&properties->renderPassStripeGranularity) &&
visitor->Visit("maxRenderPassStripes", &properties->maxRenderPassStripes);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* features) {
return
visitor->Visit("representativeFragmentTest",
&features->representativeFragmentTest);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRobustness2FeaturesKHR* features) {
return
visitor->Visit("robustBufferAccess2", &features->robustBufferAccess2) &&
visitor->Visit("robustImageAccess2", &features->robustImageAccess2) &&
visitor->Visit("nullDescriptor", &features->nullDescriptor);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceRobustness2PropertiesKHR* properties) {
return
visitor->Visit("robustStorageBufferAccessSizeAlignment",
&properties->robustStorageBufferAccessSizeAlignment) &&
visitor->Visit("robustUniformBufferAccessSizeAlignment",
&properties->robustUniformBufferAccessSizeAlignment);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSampleLocationsPropertiesEXT* properties) {
return
visitor->Visit("sampleLocationSampleCounts",
&properties->sampleLocationSampleCounts) &&
visitor->Visit("maxSampleLocationGridSize",
&properties->maxSampleLocationGridSize) &&
visitor->Visit("sampleLocationCoordinateRange",
&properties->sampleLocationCoordinateRange) &&
visitor->Visit("sampleLocationSubPixelBits",
&properties->sampleLocationSubPixelBits) &&
visitor->Visit("variableSampleLocations",
&properties->variableSampleLocations);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSamplerFilterMinmaxProperties* properties) {
return
visitor->Visit("filterMinmaxSingleComponentFormats",
&properties->filterMinmaxSingleComponentFormats) &&
visitor->Visit("filterMinmaxImageComponentMapping",
&properties->filterMinmaxImageComponentMapping);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSamplerYcbcrConversionFeatures* features) {
return
visitor->Visit("samplerYcbcrConversion",
&features->samplerYcbcrConversion);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceScalarBlockLayoutFeatures* features) {
return
visitor->Visit("scalarBlockLayout", &features->scalarBlockLayout);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSchedulingControlsFeaturesARM* features) {
return
visitor->Visit("schedulingControls", &features->schedulingControls);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceSchedulingControlsPropertiesARM* properties) {
return
visitor->Visit("schedulingControlsFlags",
&properties->schedulingControlsFlags);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* features) {
return
visitor->Visit("separateDepthStencilLayouts",
&features->separateDepthStencilLayouts);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV* features) {
return
visitor->Visit("shaderFloat16VectorAtomics",
&features->shaderFloat16VectorAtomics);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT* features) {
return
visitor->Visit("shaderBufferFloat16Atomics",
&features->shaderBufferFloat16Atomics) &&
visitor->Visit("shaderBufferFloat16AtomicAdd",
&features->shaderBufferFloat16AtomicAdd) &&
visitor->Visit("shaderBufferFloat16AtomicMinMax",
&features->shaderBufferFloat16AtomicMinMax) &&
visitor->Visit("shaderBufferFloat32AtomicMinMax",
&features->shaderBufferFloat32AtomicMinMax) &&
visitor->Visit("shaderBufferFloat64AtomicMinMax",
&features->shaderBufferFloat64AtomicMinMax) &&
visitor->Visit("shaderSharedFloat16Atomics",
&features->shaderSharedFloat16Atomics) &&
visitor->Visit("shaderSharedFloat16AtomicAdd",
&features->shaderSharedFloat16AtomicAdd) &&
visitor->Visit("shaderSharedFloat16AtomicMinMax",
&features->shaderSharedFloat16AtomicMinMax) &&
visitor->Visit("shaderSharedFloat32AtomicMinMax",
&features->shaderSharedFloat32AtomicMinMax) &&
visitor->Visit("shaderSharedFloat64AtomicMinMax",
&features->shaderSharedFloat64AtomicMinMax) &&
visitor->Visit("shaderImageFloat32AtomicMinMax",
&features->shaderImageFloat32AtomicMinMax) &&
visitor->Visit("sparseImageFloat32AtomicMinMax",
&features->sparseImageFloat32AtomicMinMax);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* features) {
return
visitor->Visit("shaderBufferFloat32Atomics",
&features->shaderBufferFloat32Atomics) &&
visitor->Visit("shaderBufferFloat32AtomicAdd",
&features->shaderBufferFloat32AtomicAdd) &&
visitor->Visit("shaderBufferFloat64Atomics",
&features->shaderBufferFloat64Atomics) &&
visitor->Visit("shaderBufferFloat64AtomicAdd",
&features->shaderBufferFloat64AtomicAdd) &&
visitor->Visit("shaderSharedFloat32Atomics",
&features->shaderSharedFloat32Atomics) &&
visitor->Visit("shaderSharedFloat32AtomicAdd",
&features->shaderSharedFloat32AtomicAdd) &&
visitor->Visit("shaderSharedFloat64Atomics",
&features->shaderSharedFloat64Atomics) &&
visitor->Visit("shaderSharedFloat64AtomicAdd",
&features->shaderSharedFloat64AtomicAdd) &&
visitor->Visit("shaderImageFloat32Atomics",
&features->shaderImageFloat32Atomics) &&
visitor->Visit("shaderImageFloat32AtomicAdd",
&features->shaderImageFloat32AtomicAdd) &&
visitor->Visit("sparseImageFloat32Atomics",
&features->sparseImageFloat32Atomics) &&
visitor->Visit("sparseImageFloat32AtomicAdd",
&features->sparseImageFloat32AtomicAdd);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderAtomicInt64Features* features) {
return
visitor->Visit("shaderBufferInt64Atomics",
&features->shaderBufferInt64Atomics) &&
visitor->Visit("shaderSharedInt64Atomics",
&features->shaderSharedInt64Atomics);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderBfloat16FeaturesKHR* features) {
return
visitor->Visit("shaderBFloat16Type", &features->shaderBFloat16Type) &&
visitor->Visit("shaderBFloat16DotProduct",
&features->shaderBFloat16DotProduct) &&
visitor->Visit("shaderBFloat16CooperativeMatrix",
&features->shaderBFloat16CooperativeMatrix);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderClockFeaturesKHR* features) {
return
visitor->Visit("shaderSubgroupClock", &features->shaderSubgroupClock) &&
visitor->Visit("shaderDeviceClock", &features->shaderDeviceClock);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM* features) {
return
visitor->Visit("shaderCoreBuiltins", &features->shaderCoreBuiltins);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM* properties) {
return
visitor->Visit("shaderCoreMask", &properties->shaderCoreMask) &&
visitor->Visit("shaderCoreCount", &properties->shaderCoreCount) &&
visitor->Visit("shaderWarpsPerCore", &properties->shaderWarpsPerCore);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderCoreProperties2AMD* properties) {
return
visitor->Visit("shaderCoreFeatures", &properties->shaderCoreFeatures) &&
visitor->Visit("activeComputeUnitCount",
&properties->activeComputeUnitCount);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderCorePropertiesAMD* properties) {
return
visitor->Visit("shaderEngineCount", &properties->shaderEngineCount) &&
visitor->Visit("shaderArraysPerEngineCount",
&properties->shaderArraysPerEngineCount) &&
visitor->Visit("computeUnitsPerShaderArray",
&properties->computeUnitsPerShaderArray) &&
visitor->Visit("simdPerComputeUnit", &properties->simdPerComputeUnit) &&
visitor->Visit("wavefrontsPerSimd", &properties->wavefrontsPerSimd) &&
visitor->Visit("wavefrontSize", &properties->wavefrontSize) &&
visitor->Visit("sgprsPerSimd", &properties->sgprsPerSimd) &&
visitor->Visit("minSgprAllocation", &properties->minSgprAllocation) &&
visitor->Visit("maxSgprAllocation", &properties->maxSgprAllocation) &&
visitor->Visit("sgprAllocationGranularity",
&properties->sgprAllocationGranularity) &&
visitor->Visit("vgprsPerSimd", &properties->vgprsPerSimd) &&
visitor->Visit("minVgprAllocation", &properties->minVgprAllocation) &&
visitor->Visit("maxVgprAllocation", &properties->maxVgprAllocation) &&
visitor->Visit("vgprAllocationGranularity",
&properties->vgprAllocationGranularity);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderCorePropertiesARM* properties) {
return
visitor->Visit("pixelRate", &properties->pixelRate) &&
visitor->Visit("texelRate", &properties->texelRate) &&
visitor->Visit("fmaRate", &properties->fmaRate);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures* features) {
return
visitor->Visit("shaderDemoteToHelperInvocation",
&features->shaderDemoteToHelperInvocation);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderDrawParametersFeatures* features) {
return
visitor->Visit("shaderDrawParameters", &features->shaderDrawParameters);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD* features) {
return
visitor->Visit("shaderEarlyAndLateFragmentTests",
&features->shaderEarlyAndLateFragmentTests);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderExpectAssumeFeatures* features) {
return
visitor->Visit("shaderExpectAssume", &features->shaderExpectAssume);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderFloat8FeaturesEXT* features) {
return
visitor->Visit("shaderFloat8", &features->shaderFloat8) &&
visitor->Visit("shaderFloat8CooperativeMatrix",
&features->shaderFloat8CooperativeMatrix);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderFloatControls2Features* features) {
return
visitor->Visit("shaderFloatControls2", &features->shaderFloatControls2);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* features) {
return
visitor->Visit("shaderImageInt64Atomics",
&features->shaderImageInt64Atomics) &&
visitor->Visit("sparseImageInt64Atomics",
&features->sparseImageInt64Atomics);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderImageFootprintFeaturesNV* features) {
return
visitor->Visit("imageFootprint", &features->imageFootprint);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderIntegerDotProductFeatures* features) {
return
visitor->Visit("shaderIntegerDotProduct",
&features->shaderIntegerDotProduct);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderIntegerDotProductProperties* properties) {
return
visitor->Visit("integerDotProduct8BitUnsignedAccelerated",
&properties->integerDotProduct8BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct8BitSignedAccelerated",
&properties->integerDotProduct8BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct8BitMixedSignednessAccelerated",
&properties->integerDotProduct8BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProduct4x8BitPackedUnsignedAccelerated",
&properties->integerDotProduct4x8BitPackedUnsignedAccelerated) &&
visitor->Visit(
"integerDotProduct4x8BitPackedSignedAccelerated",
&properties->integerDotProduct4x8BitPackedSignedAccelerated) &&
visitor->Visit(
"integerDotProduct4x8BitPackedMixedSignednessAccelerated",
&properties
->integerDotProduct4x8BitPackedMixedSignednessAccelerated) &&
visitor->Visit("integerDotProduct16BitUnsignedAccelerated",
&properties->integerDotProduct16BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct16BitSignedAccelerated",
&properties->integerDotProduct16BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct16BitMixedSignednessAccelerated",
&properties->integerDotProduct16BitMixedSignednessAccelerated) &&
visitor->Visit("integerDotProduct32BitUnsignedAccelerated",
&properties->integerDotProduct32BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct32BitSignedAccelerated",
&properties->integerDotProduct32BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct32BitMixedSignednessAccelerated",
&properties->integerDotProduct32BitMixedSignednessAccelerated) &&
visitor->Visit("integerDotProduct64BitUnsignedAccelerated",
&properties->integerDotProduct64BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct64BitSignedAccelerated",
&properties->integerDotProduct64BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct64BitMixedSignednessAccelerated",
&properties->integerDotProduct64BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating8BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating8BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating8BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerate"
"d",
&properties
->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerate"
"d",
&properties
->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAc"
"celerated",
&properties
->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating16BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating16BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating16BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating32BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating32BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating32BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating64BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating64BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating64BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* features) {
return
visitor->Visit("shaderIntegerFunctions2",
&features->shaderIntegerFunctions2);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR* features) {
return
visitor->Visit("shaderMaximalReconvergence",
&features->shaderMaximalReconvergence);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT* features) {
return
visitor->Visit("shaderModuleIdentifier",
&features->shaderModuleIdentifier);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT* properties) {
return
visitor->Visit("shaderModuleIdentifierAlgorithmUUID",
&properties->shaderModuleIdentifierAlgorithmUUID);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderObjectFeaturesEXT* features) {
return
visitor->Visit("shaderObject", &features->shaderObject);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderObjectPropertiesEXT* properties) {
return
visitor->Visit("shaderBinaryUUID", &properties->shaderBinaryUUID) &&
visitor->Visit("shaderBinaryVersion", &properties->shaderBinaryVersion);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderQuadControlFeaturesKHR* features) {
return
visitor->Visit("shaderQuadControl", &features->shaderQuadControl);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR* features) {
return
visitor->Visit("shaderRelaxedExtendedInstruction",
&features->shaderRelaxedExtendedInstruction);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT* features) {
return
visitor->Visit("shaderReplicatedComposites",
&features->shaderReplicatedComposites);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* features) {
return
visitor->Visit("shaderSMBuiltins", &features->shaderSMBuiltins);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* properties) {
return
visitor->Visit("shaderSMCount", &properties->shaderSMCount) &&
visitor->Visit("shaderWarpsPerSM", &properties->shaderWarpsPerSM);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* features) {
return
visitor->Visit("shaderSubgroupExtendedTypes",
&features->shaderSubgroupExtendedTypes);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderSubgroupRotateFeatures* features) {
return
visitor->Visit("shaderSubgroupRotate", &features->shaderSubgroupRotate) &&
visitor->Visit("shaderSubgroupRotateClustered",
&features->shaderSubgroupRotateClustered);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR* features) {
return
visitor->Visit("shaderSubgroupUniformControlFlow",
&features->shaderSubgroupUniformControlFlow);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceShaderTerminateInvocationFeatures* features) {
return
visitor->Visit("shaderTerminateInvocation",
&features->shaderTerminateInvocation);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderTileImageFeaturesEXT* features) {
return
visitor->Visit("shaderTileImageColorReadAccess",
&features->shaderTileImageColorReadAccess) &&
visitor->Visit("shaderTileImageDepthReadAccess",
&features->shaderTileImageDepthReadAccess) &&
visitor->Visit("shaderTileImageStencilReadAccess",
&features->shaderTileImageStencilReadAccess);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShaderTileImagePropertiesEXT* properties) {
return
visitor->Visit("shaderTileImageCoherentReadAccelerated",
&properties->shaderTileImageCoherentReadAccelerated) &&
visitor->Visit(
"shaderTileImageReadSampleFromPixelRateInvocation",
&properties->shaderTileImageReadSampleFromPixelRateInvocation) &&
visitor->Visit("shaderTileImageReadFromHelperInvocation",
&properties->shaderTileImageReadFromHelperInvocation);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShadingRateImageFeaturesNV* features) {
return
visitor->Visit("shadingRateImage", &features->shadingRateImage) &&
visitor->Visit("shadingRateCoarseSampleOrder",
&features->shadingRateCoarseSampleOrder);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceShadingRateImagePropertiesNV* properties) {
return
visitor->Visit("shadingRateTexelSize",
&properties->shadingRateTexelSize) &&
visitor->Visit("shadingRatePaletteSize",
&properties->shadingRatePaletteSize) &&
visitor->Visit("shadingRateMaxCoarseSamples",
&properties->shadingRateMaxCoarseSamples);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSubgroupProperties* properties) {
return
visitor->Visit("subgroupSize", &properties->subgroupSize) &&
visitor->Visit("supportedStages", &properties->supportedStages) &&
visitor->Visit("supportedOperations", &properties->supportedOperations) &&
visitor->Visit("quadOperationsInAllStages",
&properties->quadOperationsInAllStages);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSubgroupSizeControlFeatures* features) {
return
visitor->Visit("subgroupSizeControl", &features->subgroupSizeControl) &&
visitor->Visit("computeFullSubgroups", &features->computeFullSubgroups);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSubgroupSizeControlProperties* properties) {
return
visitor->Visit("minSubgroupSize", &properties->minSubgroupSize) &&
visitor->Visit("maxSubgroupSize", &properties->maxSubgroupSize) &&
visitor->Visit("maxComputeWorkgroupSubgroups",
&properties->maxComputeWorkgroupSubgroups) &&
visitor->Visit("requiredSubgroupSizeStages",
&properties->requiredSubgroupSizeStages);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT* features) {
return
visitor->Visit("subpassMergeFeedback", &features->subpassMergeFeedback);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSubpassShadingFeaturesHUAWEI* features) {
return
visitor->Visit("subpassShading", &features->subpassShading);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceSubpassShadingPropertiesHUAWEI* properties) {
return
visitor->Visit("maxSubpassShadingWorkgroupSizeAspectRatio",
&properties->maxSubpassShadingWorkgroupSizeAspectRatio);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT* features) {
return
visitor->Visit("swapchainMaintenance1", &features->swapchainMaintenance1);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSynchronization2Features* features) {
return
visitor->Visit("synchronization2", &features->synchronization2);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTensorFeaturesARM* features) {
return
visitor->Visit("tensorNonPacked", &features->tensorNonPacked) &&
visitor->Visit("shaderTensorAccess", &features->shaderTensorAccess) &&
visitor->Visit("shaderStorageTensorArrayDynamicIndexing",
&features->shaderStorageTensorArrayDynamicIndexing) &&
visitor->Visit("shaderStorageTensorArrayNonUniformIndexing",
&features->shaderStorageTensorArrayNonUniformIndexing) &&
visitor->Visit(
"descriptorBindingStorageTensorUpdateAfterBind",
&features->descriptorBindingStorageTensorUpdateAfterBind) &&
visitor->Visit("tensors", &features->tensors);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTensorPropertiesARM* properties) {
return
visitor->Visit("maxTensorDimensionCount",
&properties->maxTensorDimensionCount) &&
visitor->Visit("maxTensorElements", &properties->maxTensorElements) &&
visitor->Visit("maxPerDimensionTensorElements",
&properties->maxPerDimensionTensorElements) &&
visitor->Visit("maxTensorStride", &properties->maxTensorStride) &&
visitor->Visit("maxTensorSize", &properties->maxTensorSize) &&
visitor->Visit("maxTensorShaderAccessArrayLength",
&properties->maxTensorShaderAccessArrayLength) &&
visitor->Visit("maxTensorShaderAccessSize",
&properties->maxTensorShaderAccessSize) &&
visitor->Visit("maxDescriptorSetStorageTensors",
&properties->maxDescriptorSetStorageTensors) &&
visitor->Visit("maxPerStageDescriptorSetStorageTensors",
&properties->maxPerStageDescriptorSetStorageTensors) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageTensors",
&properties->maxDescriptorSetUpdateAfterBindStorageTensors) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindStorageTensors",
&properties->maxPerStageDescriptorUpdateAfterBindStorageTensors) &&
visitor->Visit(
"shaderStorageTensorArrayNonUniformIndexingNative",
&properties->shaderStorageTensorArrayNonUniformIndexingNative) &&
visitor->Visit("shaderTensorSupportedStages",
&properties->shaderTensorSupportedStages);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* features) {
return
visitor->Visit("texelBufferAlignment", &features->texelBufferAlignment);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceTexelBufferAlignmentProperties* properties) {
return
visitor->Visit("storageTexelBufferOffsetAlignmentBytes",
&properties->storageTexelBufferOffsetAlignmentBytes) &&
visitor->Visit(
"storageTexelBufferOffsetSingleTexelAlignment",
&properties->storageTexelBufferOffsetSingleTexelAlignment) &&
visitor->Visit("uniformTexelBufferOffsetAlignmentBytes",
&properties->uniformTexelBufferOffsetAlignmentBytes) &&
visitor->Visit("uniformTexelBufferOffsetSingleTexelAlignment",
&properties->uniformTexelBufferOffsetSingleTexelAlignment);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceTextureCompressionASTCHDRFeatures* features) {
return
visitor->Visit("textureCompressionASTC_HDR",
&features->textureCompressionASTC_HDR);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTileMemoryHeapFeaturesQCOM* features) {
return
visitor->Visit("tileMemoryHeap", &features->tileMemoryHeap);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTileMemoryHeapPropertiesQCOM* properties) {
return
visitor->Visit("queueSubmitBoundary", &properties->queueSubmitBoundary) &&
visitor->Visit("tileBufferTransfers", &properties->tileBufferTransfers);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTilePropertiesFeaturesQCOM* properties) {
return
visitor->Visit("tileProperties", &properties->tileProperties);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTileShadingFeaturesQCOM* features) {
return
visitor->Visit("tileShading", &features->tileShading) &&
visitor->Visit("tileShadingFragmentStage",
&features->tileShadingFragmentStage) &&
visitor->Visit("tileShadingColorAttachments",
&features->tileShadingColorAttachments) &&
visitor->Visit("tileShadingDepthAttachments",
&features->tileShadingDepthAttachments) &&
visitor->Visit("tileShadingStencilAttachments",
&features->tileShadingStencilAttachments) &&
visitor->Visit("tileShadingInputAttachments",
&features->tileShadingInputAttachments) &&
visitor->Visit("tileShadingSampledAttachments",
&features->tileShadingSampledAttachments) &&
visitor->Visit("tileShadingPerTileDraw",
&features->tileShadingPerTileDraw) &&
visitor->Visit("tileShadingPerTileDispatch",
&features->tileShadingPerTileDispatch) &&
visitor->Visit("tileShadingDispatchTile",
&features->tileShadingDispatchTile) &&
visitor->Visit("tileShadingApron", &features->tileShadingApron) &&
visitor->Visit("tileShadingAnisotropicApron",
&features->tileShadingAnisotropicApron) &&
visitor->Visit("tileShadingAtomicOps", &features->tileShadingAtomicOps) &&
visitor->Visit("tileShadingImageProcessing",
&features->tileShadingImageProcessing);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTileShadingPropertiesQCOM* properties) {
return
visitor->Visit("maxApronSize", &properties->maxApronSize) &&
visitor->Visit("preferNonCoherent", &properties->preferNonCoherent) &&
visitor->Visit("tileGranularity", &properties->tileGranularity) &&
visitor->Visit("maxTileShadingRate", &properties->maxTileShadingRate);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTimelineSemaphoreFeatures* features) {
return
visitor->Visit("timelineSemaphore", &features->timelineSemaphore);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTimelineSemaphoreProperties* properties) {
return
visitor->Visit("maxTimelineSemaphoreValueDifference",
&properties->maxTimelineSemaphoreValueDifference);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceTransformFeedbackFeaturesEXT* features) {
return
visitor->Visit("transformFeedback", &features->transformFeedback) &&
visitor->Visit("geometryStreams", &features->geometryStreams);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceTransformFeedbackPropertiesEXT* properties) {
return
visitor->Visit("maxTransformFeedbackStreams",
&properties->maxTransformFeedbackStreams) &&
visitor->Visit("maxTransformFeedbackBuffers",
&properties->maxTransformFeedbackBuffers) &&
visitor->Visit("maxTransformFeedbackBufferSize",
&properties->maxTransformFeedbackBufferSize) &&
visitor->Visit("maxTransformFeedbackStreamDataSize",
&properties->maxTransformFeedbackStreamDataSize) &&
visitor->Visit("maxTransformFeedbackBufferDataSize",
&properties->maxTransformFeedbackBufferDataSize) &&
visitor->Visit("maxTransformFeedbackBufferDataStride",
&properties->maxTransformFeedbackBufferDataStride) &&
visitor->Visit("transformFeedbackQueries",
&properties->transformFeedbackQueries) &&
visitor->Visit("transformFeedbackStreamsLinesTriangles",
&properties->transformFeedbackStreamsLinesTriangles) &&
visitor->Visit("transformFeedbackRasterizationStreamSelect",
&properties->transformFeedbackRasterizationStreamSelect) &&
visitor->Visit("transformFeedbackDraw",
&properties->transformFeedbackDraw);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR* features) {
return
visitor->Visit("unifiedImageLayouts", &features->unifiedImageLayouts) &&
visitor->Visit("unifiedImageLayoutsVideo",
&features->unifiedImageLayoutsVideo);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceUniformBufferStandardLayoutFeatures* features) {
return
visitor->Visit("uniformBufferStandardLayout",
&features->uniformBufferStandardLayout);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVariablePointersFeatures* features) {
return
visitor->Visit("variablePointersStorageBuffer",
&features->variablePointersStorageBuffer) &&
visitor->Visit("variablePointers", &features->variablePointers);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVertexAttributeDivisorFeatures* features) {
return
visitor->Visit("vertexAttributeInstanceRateDivisor",
&features->vertexAttributeInstanceRateDivisor) &&
visitor->Visit("vertexAttributeInstanceRateZeroDivisor",
&features->vertexAttributeInstanceRateZeroDivisor);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceVertexAttributeDivisorProperties* properties) {
return
visitor->Visit("maxVertexAttribDivisor",
&properties->maxVertexAttribDivisor) &&
visitor->Visit("supportsNonZeroFirstInstance",
&properties->supportsNonZeroFirstInstance);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* properties) {
return
visitor->Visit("maxVertexAttribDivisor",
&properties->maxVertexAttribDivisor);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT* features) {
return
visitor->Visit("vertexAttributeRobustness",
&features->vertexAttributeRobustness);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT* features) {
return
visitor->Visit("vertexInputDynamicState",
&features->vertexInputDynamicState);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVideoDecodeVP9FeaturesKHR* features) {
return
visitor->Visit("videoDecodeVP9", &features->videoDecodeVP9);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVideoEncodeAV1FeaturesKHR* features) {
return
visitor->Visit("videoEncodeAV1", &features->videoEncodeAV1);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR* features) {
return
visitor->Visit("videoEncodeQuantizationMap",
&features->videoEncodeQuantizationMap);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVideoMaintenance1FeaturesKHR* features) {
return
visitor->Visit("videoMaintenance1", &features->videoMaintenance1);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVideoMaintenance2FeaturesKHR* features) {
return
visitor->Visit("videoMaintenance2", &features->videoMaintenance2);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan11Features* features) {
return
visitor->Visit("storageBuffer16BitAccess",
&features->storageBuffer16BitAccess) &&
visitor->Visit("uniformAndStorageBuffer16BitAccess",
&features->uniformAndStorageBuffer16BitAccess) &&
visitor->Visit("storagePushConstant16",
&features->storagePushConstant16) &&
visitor->Visit("storageInputOutput16", &features->storageInputOutput16) &&
visitor->Visit("multiview", &features->multiview) &&
visitor->Visit("multiviewGeometryShader",
&features->multiviewGeometryShader) &&
visitor->Visit("multiviewTessellationShader",
&features->multiviewTessellationShader) &&
visitor->Visit("variablePointersStorageBuffer",
&features->variablePointersStorageBuffer) &&
visitor->Visit("variablePointers", &features->variablePointers) &&
visitor->Visit("protectedMemory", &features->protectedMemory) &&
visitor->Visit("samplerYcbcrConversion",
&features->samplerYcbcrConversion) &&
visitor->Visit("shaderDrawParameters", &features->shaderDrawParameters);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan11Properties* properties) {
return
visitor->Visit("deviceUUID", &properties->deviceUUID) &&
visitor->Visit("driverUUID", &properties->driverUUID) &&
visitor->Visit("deviceLUID", &properties->deviceLUID) &&
visitor->Visit("deviceNodeMask", &properties->deviceNodeMask) &&
visitor->Visit("deviceLUIDValid", &properties->deviceLUIDValid) &&
visitor->Visit("subgroupSize", &properties->subgroupSize) &&
visitor->Visit("subgroupSupportedStages",
&properties->subgroupSupportedStages) &&
visitor->Visit("subgroupSupportedOperations",
&properties->subgroupSupportedOperations) &&
visitor->Visit("subgroupQuadOperationsInAllStages",
&properties->subgroupQuadOperationsInAllStages) &&
visitor->Visit("pointClippingBehavior",
&properties->pointClippingBehavior) &&
visitor->Visit("maxMultiviewViewCount",
&properties->maxMultiviewViewCount) &&
visitor->Visit("maxMultiviewInstanceIndex",
&properties->maxMultiviewInstanceIndex) &&
visitor->Visit("protectedNoFault", &properties->protectedNoFault) &&
visitor->Visit("maxPerSetDescriptors",
&properties->maxPerSetDescriptors) &&
visitor->Visit("maxMemoryAllocationSize",
&properties->maxMemoryAllocationSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan12Features* features) {
return
visitor->Visit("samplerMirrorClampToEdge",
&features->samplerMirrorClampToEdge) &&
visitor->Visit("drawIndirectCount", &features->drawIndirectCount) &&
visitor->Visit("storageBuffer8BitAccess",
&features->storageBuffer8BitAccess) &&
visitor->Visit("uniformAndStorageBuffer8BitAccess",
&features->uniformAndStorageBuffer8BitAccess) &&
visitor->Visit("storagePushConstant8", &features->storagePushConstant8) &&
visitor->Visit("shaderBufferInt64Atomics",
&features->shaderBufferInt64Atomics) &&
visitor->Visit("shaderSharedInt64Atomics",
&features->shaderSharedInt64Atomics) &&
visitor->Visit("shaderFloat16", &features->shaderFloat16) &&
visitor->Visit("shaderInt8", &features->shaderInt8) &&
visitor->Visit("descriptorIndexing", &features->descriptorIndexing) &&
visitor->Visit("shaderInputAttachmentArrayDynamicIndexing",
&features->shaderInputAttachmentArrayDynamicIndexing) &&
visitor->Visit("shaderUniformTexelBufferArrayDynamicIndexing",
&features->shaderUniformTexelBufferArrayDynamicIndexing) &&
visitor->Visit("shaderStorageTexelBufferArrayDynamicIndexing",
&features->shaderStorageTexelBufferArrayDynamicIndexing) &&
visitor->Visit("shaderUniformBufferArrayNonUniformIndexing",
&features->shaderUniformBufferArrayNonUniformIndexing) &&
visitor->Visit("shaderSampledImageArrayNonUniformIndexing",
&features->shaderSampledImageArrayNonUniformIndexing) &&
visitor->Visit("shaderStorageBufferArrayNonUniformIndexing",
&features->shaderStorageBufferArrayNonUniformIndexing) &&
visitor->Visit("shaderStorageImageArrayNonUniformIndexing",
&features->shaderStorageImageArrayNonUniformIndexing) &&
visitor->Visit("shaderInputAttachmentArrayNonUniformIndexing",
&features->shaderInputAttachmentArrayNonUniformIndexing) &&
visitor->Visit(
"shaderUniformTexelBufferArrayNonUniformIndexing",
&features->shaderUniformTexelBufferArrayNonUniformIndexing) &&
visitor->Visit(
"shaderStorageTexelBufferArrayNonUniformIndexing",
&features->shaderStorageTexelBufferArrayNonUniformIndexing) &&
visitor->Visit(
"descriptorBindingUniformBufferUpdateAfterBind",
&features->descriptorBindingUniformBufferUpdateAfterBind) &&
visitor->Visit("descriptorBindingSampledImageUpdateAfterBind",
&features->descriptorBindingSampledImageUpdateAfterBind) &&
visitor->Visit("descriptorBindingStorageImageUpdateAfterBind",
&features->descriptorBindingStorageImageUpdateAfterBind) &&
visitor->Visit(
"descriptorBindingStorageBufferUpdateAfterBind",
&features->descriptorBindingStorageBufferUpdateAfterBind) &&
visitor->Visit(
"descriptorBindingUniformTexelBufferUpdateAfterBind",
&features->descriptorBindingUniformTexelBufferUpdateAfterBind) &&
visitor->Visit(
"descriptorBindingStorageTexelBufferUpdateAfterBind",
&features->descriptorBindingStorageTexelBufferUpdateAfterBind) &&
visitor->Visit("descriptorBindingUpdateUnusedWhilePending",
&features->descriptorBindingUpdateUnusedWhilePending) &&
visitor->Visit("descriptorBindingPartiallyBound",
&features->descriptorBindingPartiallyBound) &&
visitor->Visit("descriptorBindingVariableDescriptorCount",
&features->descriptorBindingVariableDescriptorCount) &&
visitor->Visit("runtimeDescriptorArray",
&features->runtimeDescriptorArray) &&
visitor->Visit("samplerFilterMinmax", &features->samplerFilterMinmax) &&
visitor->Visit("scalarBlockLayout", &features->scalarBlockLayout) &&
visitor->Visit("imagelessFramebuffer", &features->imagelessFramebuffer) &&
visitor->Visit("uniformBufferStandardLayout",
&features->uniformBufferStandardLayout) &&
visitor->Visit("shaderSubgroupExtendedTypes",
&features->shaderSubgroupExtendedTypes) &&
visitor->Visit("separateDepthStencilLayouts",
&features->separateDepthStencilLayouts) &&
visitor->Visit("hostQueryReset", &features->hostQueryReset) &&
visitor->Visit("timelineSemaphore", &features->timelineSemaphore) &&
visitor->Visit("bufferDeviceAddress", &features->bufferDeviceAddress) &&
visitor->Visit("bufferDeviceAddressCaptureReplay",
&features->bufferDeviceAddressCaptureReplay) &&
visitor->Visit("bufferDeviceAddressMultiDevice",
&features->bufferDeviceAddressMultiDevice) &&
visitor->Visit("vulkanMemoryModel", &features->vulkanMemoryModel) &&
visitor->Visit("vulkanMemoryModelDeviceScope",
&features->vulkanMemoryModelDeviceScope) &&
visitor->Visit(
"vulkanMemoryModelAvailabilityVisibilityChains",
&features->vulkanMemoryModelAvailabilityVisibilityChains) &&
visitor->Visit("shaderOutputViewportIndex",
&features->shaderOutputViewportIndex) &&
visitor->Visit("shaderOutputLayer", &features->shaderOutputLayer) &&
visitor->Visit("subgroupBroadcastDynamicId",
&features->subgroupBroadcastDynamicId);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan12Properties* properties) {
return
visitor->Visit("driverID", &properties->driverID) &&
visitor->Visit("driverName", &properties->driverName) &&
visitor->Visit("driverInfo", &properties->driverInfo) &&
visitor->Visit("conformanceVersion", &properties->conformanceVersion) &&
visitor->Visit("denormBehaviorIndependence",
&properties->denormBehaviorIndependence) &&
visitor->Visit("roundingModeIndependence",
&properties->roundingModeIndependence) &&
visitor->Visit("shaderSignedZeroInfNanPreserveFloat16",
&properties->shaderSignedZeroInfNanPreserveFloat16) &&
visitor->Visit("shaderSignedZeroInfNanPreserveFloat32",
&properties->shaderSignedZeroInfNanPreserveFloat32) &&
visitor->Visit("shaderSignedZeroInfNanPreserveFloat64",
&properties->shaderSignedZeroInfNanPreserveFloat64) &&
visitor->Visit("shaderDenormPreserveFloat16",
&properties->shaderDenormPreserveFloat16) &&
visitor->Visit("shaderDenormPreserveFloat32",
&properties->shaderDenormPreserveFloat32) &&
visitor->Visit("shaderDenormPreserveFloat64",
&properties->shaderDenormPreserveFloat64) &&
visitor->Visit("shaderDenormFlushToZeroFloat16",
&properties->shaderDenormFlushToZeroFloat16) &&
visitor->Visit("shaderDenormFlushToZeroFloat32",
&properties->shaderDenormFlushToZeroFloat32) &&
visitor->Visit("shaderDenormFlushToZeroFloat64",
&properties->shaderDenormFlushToZeroFloat64) &&
visitor->Visit("shaderRoundingModeRTEFloat16",
&properties->shaderRoundingModeRTEFloat16) &&
visitor->Visit("shaderRoundingModeRTEFloat32",
&properties->shaderRoundingModeRTEFloat32) &&
visitor->Visit("shaderRoundingModeRTEFloat64",
&properties->shaderRoundingModeRTEFloat64) &&
visitor->Visit("shaderRoundingModeRTZFloat16",
&properties->shaderRoundingModeRTZFloat16) &&
visitor->Visit("shaderRoundingModeRTZFloat32",
&properties->shaderRoundingModeRTZFloat32) &&
visitor->Visit("shaderRoundingModeRTZFloat64",
&properties->shaderRoundingModeRTZFloat64) &&
visitor->Visit("maxUpdateAfterBindDescriptorsInAllPools",
&properties->maxUpdateAfterBindDescriptorsInAllPools) &&
visitor->Visit(
"shaderUniformBufferArrayNonUniformIndexingNative",
&properties->shaderUniformBufferArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderSampledImageArrayNonUniformIndexingNative",
&properties->shaderSampledImageArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderStorageBufferArrayNonUniformIndexingNative",
&properties->shaderStorageBufferArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderStorageImageArrayNonUniformIndexingNative",
&properties->shaderStorageImageArrayNonUniformIndexingNative) &&
visitor->Visit(
"shaderInputAttachmentArrayNonUniformIndexingNative",
&properties->shaderInputAttachmentArrayNonUniformIndexingNative) &&
visitor->Visit("robustBufferAccessUpdateAfterBind",
&properties->robustBufferAccessUpdateAfterBind) &&
visitor->Visit("quadDivergentImplicitLod",
&properties->quadDivergentImplicitLod) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindSamplers",
&properties->maxPerStageDescriptorUpdateAfterBindSamplers) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindUniformBuffers",
&properties->maxPerStageDescriptorUpdateAfterBindUniformBuffers) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindStorageBuffers",
&properties->maxPerStageDescriptorUpdateAfterBindStorageBuffers) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindSampledImages",
&properties->maxPerStageDescriptorUpdateAfterBindSampledImages) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindStorageImages",
&properties->maxPerStageDescriptorUpdateAfterBindStorageImages) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindInputAttachments",
&properties->maxPerStageDescriptorUpdateAfterBindInputAttachments) &&
visitor->Visit("maxPerStageUpdateAfterBindResources",
&properties->maxPerStageUpdateAfterBindResources) &&
visitor->Visit("maxDescriptorSetUpdateAfterBindSamplers",
&properties->maxDescriptorSetUpdateAfterBindSamplers) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindUniformBuffers",
&properties->maxDescriptorSetUpdateAfterBindUniformBuffers) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindUniformBuffersDynamic",
&properties->maxDescriptorSetUpdateAfterBindUniformBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageBuffers",
&properties->maxDescriptorSetUpdateAfterBindStorageBuffers) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageBuffersDynamic",
&properties->maxDescriptorSetUpdateAfterBindStorageBuffersDynamic) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindSampledImages",
&properties->maxDescriptorSetUpdateAfterBindSampledImages) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindStorageImages",
&properties->maxDescriptorSetUpdateAfterBindStorageImages) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindInputAttachments",
&properties->maxDescriptorSetUpdateAfterBindInputAttachments) &&
visitor->Visit("supportedDepthResolveModes",
&properties->supportedDepthResolveModes) &&
visitor->Visit("supportedStencilResolveModes",
&properties->supportedStencilResolveModes) &&
visitor->Visit("independentResolveNone",
&properties->independentResolveNone) &&
visitor->Visit("independentResolve", &properties->independentResolve) &&
visitor->Visit("filterMinmaxSingleComponentFormats",
&properties->filterMinmaxSingleComponentFormats) &&
visitor->Visit("filterMinmaxImageComponentMapping",
&properties->filterMinmaxImageComponentMapping) &&
visitor->Visit("maxTimelineSemaphoreValueDifference",
&properties->maxTimelineSemaphoreValueDifference) &&
visitor->Visit("framebufferIntegerColorSampleCounts",
&properties->framebufferIntegerColorSampleCounts);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan13Features* features) {
return
visitor->Visit("robustImageAccess", &features->robustImageAccess) &&
visitor->Visit("inlineUniformBlock", &features->inlineUniformBlock) &&
visitor->Visit(
"descriptorBindingInlineUniformBlockUpdateAfterBind",
&features->descriptorBindingInlineUniformBlockUpdateAfterBind) &&
visitor->Visit("pipelineCreationCacheControl",
&features->pipelineCreationCacheControl) &&
visitor->Visit("privateData", &features->privateData) &&
visitor->Visit("shaderDemoteToHelperInvocation",
&features->shaderDemoteToHelperInvocation) &&
visitor->Visit("shaderTerminateInvocation",
&features->shaderTerminateInvocation) &&
visitor->Visit("subgroupSizeControl", &features->subgroupSizeControl) &&
visitor->Visit("computeFullSubgroups", &features->computeFullSubgroups) &&
visitor->Visit("synchronization2", &features->synchronization2) &&
visitor->Visit("textureCompressionASTC_HDR",
&features->textureCompressionASTC_HDR) &&
visitor->Visit("shaderZeroInitializeWorkgroupMemory",
&features->shaderZeroInitializeWorkgroupMemory) &&
visitor->Visit("dynamicRendering", &features->dynamicRendering) &&
visitor->Visit("shaderIntegerDotProduct",
&features->shaderIntegerDotProduct) &&
visitor->Visit("maintenance4", &features->maintenance4);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan13Properties* properties) {
return
visitor->Visit("minSubgroupSize", &properties->minSubgroupSize) &&
visitor->Visit("maxSubgroupSize", &properties->maxSubgroupSize) &&
visitor->Visit("maxComputeWorkgroupSubgroups",
&properties->maxComputeWorkgroupSubgroups) &&
visitor->Visit("requiredSubgroupSizeStages",
&properties->requiredSubgroupSizeStages) &&
visitor->Visit("maxInlineUniformBlockSize",
&properties->maxInlineUniformBlockSize) &&
visitor->Visit("maxPerStageDescriptorInlineUniformBlocks",
&properties->maxPerStageDescriptorInlineUniformBlocks) &&
visitor->Visit(
"maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks",
&properties
->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks) &&
visitor->Visit("maxDescriptorSetInlineUniformBlocks",
&properties->maxDescriptorSetInlineUniformBlocks) &&
visitor->Visit(
"maxDescriptorSetUpdateAfterBindInlineUniformBlocks",
&properties->maxDescriptorSetUpdateAfterBindInlineUniformBlocks) &&
visitor->Visit("maxInlineUniformTotalSize",
&properties->maxInlineUniformTotalSize) &&
visitor->Visit("integerDotProduct8BitUnsignedAccelerated",
&properties->integerDotProduct8BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct8BitSignedAccelerated",
&properties->integerDotProduct8BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct8BitMixedSignednessAccelerated",
&properties->integerDotProduct8BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProduct4x8BitPackedUnsignedAccelerated",
&properties->integerDotProduct4x8BitPackedUnsignedAccelerated) &&
visitor->Visit(
"integerDotProduct4x8BitPackedSignedAccelerated",
&properties->integerDotProduct4x8BitPackedSignedAccelerated) &&
visitor->Visit(
"integerDotProduct4x8BitPackedMixedSignednessAccelerated",
&properties
->integerDotProduct4x8BitPackedMixedSignednessAccelerated) &&
visitor->Visit("integerDotProduct16BitUnsignedAccelerated",
&properties->integerDotProduct16BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct16BitSignedAccelerated",
&properties->integerDotProduct16BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct16BitMixedSignednessAccelerated",
&properties->integerDotProduct16BitMixedSignednessAccelerated) &&
visitor->Visit("integerDotProduct32BitUnsignedAccelerated",
&properties->integerDotProduct32BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct32BitSignedAccelerated",
&properties->integerDotProduct32BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct32BitMixedSignednessAccelerated",
&properties->integerDotProduct32BitMixedSignednessAccelerated) &&
visitor->Visit("integerDotProduct64BitUnsignedAccelerated",
&properties->integerDotProduct64BitUnsignedAccelerated) &&
visitor->Visit("integerDotProduct64BitSignedAccelerated",
&properties->integerDotProduct64BitSignedAccelerated) &&
visitor->Visit(
"integerDotProduct64BitMixedSignednessAccelerated",
&properties->integerDotProduct64BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating8BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating8BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating8BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating8BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerate"
"d",
&properties
->integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerate"
"d",
&properties
->integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAc"
"celerated",
&properties
->integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating16BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating16BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating16BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating16BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating32BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating32BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating32BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating32BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating64BitUnsignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating64BitUnsignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating64BitSignedAccelerated",
&properties
->integerDotProductAccumulatingSaturating64BitSignedAccelerated) &&
visitor->Visit(
"integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerat"
"ed",
&properties
->integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated) &&
visitor->Visit("storageTexelBufferOffsetAlignmentBytes",
&properties->storageTexelBufferOffsetAlignmentBytes) &&
visitor->Visit(
"storageTexelBufferOffsetSingleTexelAlignment",
&properties->storageTexelBufferOffsetSingleTexelAlignment) &&
visitor->Visit("uniformTexelBufferOffsetAlignmentBytes",
&properties->uniformTexelBufferOffsetAlignmentBytes) &&
visitor->Visit(
"uniformTexelBufferOffsetSingleTexelAlignment",
&properties->uniformTexelBufferOffsetSingleTexelAlignment) &&
visitor->Visit("maxBufferSize", &properties->maxBufferSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan14Features* features) {
return
visitor->Visit("globalPriorityQuery", &features->globalPriorityQuery) &&
visitor->Visit("shaderSubgroupRotate", &features->shaderSubgroupRotate) &&
visitor->Visit("shaderSubgroupRotateClustered",
&features->shaderSubgroupRotateClustered) &&
visitor->Visit("shaderFloatControls2", &features->shaderFloatControls2) &&
visitor->Visit("shaderExpectAssume", &features->shaderExpectAssume) &&
visitor->Visit("rectangularLines", &features->rectangularLines) &&
visitor->Visit("bresenhamLines", &features->bresenhamLines) &&
visitor->Visit("smoothLines", &features->smoothLines) &&
visitor->Visit("stippledRectangularLines",
&features->stippledRectangularLines) &&
visitor->Visit("stippledBresenhamLines",
&features->stippledBresenhamLines) &&
visitor->Visit("stippledSmoothLines", &features->stippledSmoothLines) &&
visitor->Visit("vertexAttributeInstanceRateDivisor",
&features->vertexAttributeInstanceRateDivisor) &&
visitor->Visit("vertexAttributeInstanceRateZeroDivisor",
&features->vertexAttributeInstanceRateZeroDivisor) &&
visitor->Visit("indexTypeUint8", &features->indexTypeUint8) &&
visitor->Visit("dynamicRenderingLocalRead",
&features->dynamicRenderingLocalRead) &&
visitor->Visit("maintenance5", &features->maintenance5) &&
visitor->Visit("maintenance6", &features->maintenance6) &&
visitor->Visit("pipelineProtectedAccess",
&features->pipelineProtectedAccess) &&
visitor->Visit("pipelineRobustness", &features->pipelineRobustness) &&
visitor->Visit("hostImageCopy", &features->hostImageCopy) &&
visitor->Visit("pushDescriptor", &features->pushDescriptor);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkan14Properties* properties) {
return
visitor->Visit("lineSubPixelPrecisionBits",
&properties->lineSubPixelPrecisionBits) &&
visitor->Visit("maxVertexAttribDivisor",
&properties->maxVertexAttribDivisor) &&
visitor->Visit("supportsNonZeroFirstInstance",
&properties->supportsNonZeroFirstInstance) &&
visitor->Visit("maxPushDescriptors", &properties->maxPushDescriptors) &&
visitor->Visit(
"dynamicRenderingLocalReadDepthStencilAttachments",
&properties->dynamicRenderingLocalReadDepthStencilAttachments) &&
visitor->Visit(
"dynamicRenderingLocalReadMultisampledAttachments",
&properties->dynamicRenderingLocalReadMultisampledAttachments) &&
visitor->Visit(
"earlyFragmentMultisampleCoverageAfterSampleCounting",
&properties->earlyFragmentMultisampleCoverageAfterSampleCounting) &&
visitor->Visit(
"earlyFragmentSampleMaskTestBeforeSampleCounting",
&properties->earlyFragmentSampleMaskTestBeforeSampleCounting) &&
visitor->Visit("depthStencilSwizzleOneSupport",
&properties->depthStencilSwizzleOneSupport) &&
visitor->Visit("polygonModePointSize",
&properties->polygonModePointSize) &&
visitor->Visit(
"nonStrictSinglePixelWideLinesUseParallelogram",
&properties->nonStrictSinglePixelWideLinesUseParallelogram) &&
visitor->Visit("nonStrictWideLinesUseParallelogram",
&properties->nonStrictWideLinesUseParallelogram) &&
visitor->Visit("blockTexelViewCompatibleMultipleLayers",
&properties->blockTexelViewCompatibleMultipleLayers) &&
visitor->Visit("maxCombinedImageSamplerDescriptorCount",
&properties->maxCombinedImageSamplerDescriptorCount) &&
visitor->Visit("fragmentShadingRateClampCombinerInputs",
&properties->fragmentShadingRateClampCombinerInputs) &&
visitor->Visit("defaultRobustnessStorageBuffers",
&properties->defaultRobustnessStorageBuffers) &&
visitor->Visit("defaultRobustnessUniformBuffers",
&properties->defaultRobustnessUniformBuffers) &&
visitor->Visit("defaultRobustnessVertexInputs",
&properties->defaultRobustnessVertexInputs) &&
visitor->Visit("defaultRobustnessImages",
&properties->defaultRobustnessImages) &&
visitor->Visit("copySrcLayoutCount", &properties->copySrcLayoutCount) &&
visitor->VisitArray("pCopySrcLayouts", properties->copySrcLayoutCount,
&properties->pCopySrcLayouts) &&
visitor->Visit("copyDstLayoutCount", &properties->copyDstLayoutCount) &&
visitor->VisitArray("pCopyDstLayouts", properties->copyDstLayoutCount,
&properties->pCopyDstLayouts) &&
visitor->Visit("optimalTilingLayoutUUID",
&properties->optimalTilingLayoutUUID) &&
visitor->Visit("identicalMemoryTypeRequirements",
&properties->identicalMemoryTypeRequirements);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceVulkanMemoryModelFeatures* features) {
return
visitor->Visit("vulkanMemoryModel", &features->vulkanMemoryModel) &&
visitor->Visit("vulkanMemoryModelDeviceScope",
&features->vulkanMemoryModelDeviceScope) &&
visitor->Visit("vulkanMemoryModelAvailabilityVisibilityChains",
&features->vulkanMemoryModelAvailabilityVisibilityChains);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR* features) {
return
visitor->Visit("workgroupMemoryExplicitLayout",
&features->workgroupMemoryExplicitLayout) &&
visitor->Visit(
"workgroupMemoryExplicitLayoutScalarBlockLayout",
&features->workgroupMemoryExplicitLayoutScalarBlockLayout) &&
visitor->Visit("workgroupMemoryExplicitLayout8BitAccess",
&features->workgroupMemoryExplicitLayout8BitAccess) &&
visitor->Visit("workgroupMemoryExplicitLayout16BitAccess",
&features->workgroupMemoryExplicitLayout16BitAccess);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT* features) {
return
visitor->Visit("ycbcr2plane444Formats", &features->ycbcr2plane444Formats);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceYcbcrDegammaFeaturesQCOM* features) {
return
visitor->Visit("ycbcrDegamma", &features->ycbcrDegamma);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* features) {
return
visitor->Visit("ycbcrImageArrays", &features->ycbcrImageArrays);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT* features) {
return
visitor->Visit("zeroInitializeDeviceMemory",
&features->zeroInitializeDeviceMemory);
}
template <typename Visitor>
inline bool Iterate(
Visitor* visitor,
VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures* features) {
return
visitor->Visit("shaderZeroInitializeWorkgroupMemory",
&features->shaderZeroInitializeWorkgroupMemory);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkPhysicalDeviceProperties* properties) {
return
visitor->Visit("apiVersion", &properties->apiVersion) &&
visitor->Visit("driverVersion", &properties->driverVersion) &&
visitor->Visit("vendorID", &properties->vendorID) &&
visitor->Visit("deviceID", &properties->deviceID) &&
visitor->Visit("deviceType", &properties->deviceType) &&
visitor->Visit("deviceName", &properties->deviceName) &&
visitor->Visit("pipelineCacheUUID", &properties->pipelineCacheUUID) &&
visitor->Visit("limits", &properties->limits) &&
visitor->Visit("sparseProperties", &properties->sparseProperties);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceMemoryProperties* properties) {
return
visitor->Visit("memoryTypeCount", &properties->memoryTypeCount) &&
visitor->VisitArray("memoryTypes", properties->memoryTypeCount,
&properties->memoryTypes) &&
visitor->Visit("memoryHeapCount", &properties->memoryHeapCount) &&
visitor->VisitArray("memoryHeaps", properties->memoryHeapCount,
&properties->memoryHeaps);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkPhysicalDeviceSparseProperties* properties) {
return
visitor->Visit("residencyStandard2DBlockShape",
&properties->residencyStandard2DBlockShape) &&
visitor->Visit("residencyStandard2DMultisampleBlockShape",
&properties->residencyStandard2DMultisampleBlockShape) &&
visitor->Visit("residencyStandard3DBlockShape",
&properties->residencyStandard3DBlockShape) &&
visitor->Visit("residencyAlignedMipSize",
&properties->residencyAlignedMipSize) &&
visitor->Visit("residencyNonResidentStrict",
&properties->residencyNonResidentStrict);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkImageFormatProperties* properties) {
return
visitor->Visit("maxExtent", &properties->maxExtent) &&
visitor->Visit("maxMipLevels", &properties->maxMipLevels) &&
visitor->Visit("maxArrayLayers", &properties->maxArrayLayers) &&
visitor->Visit("sampleCounts", &properties->sampleCounts) &&
visitor->Visit("maxResourceSize", &properties->maxResourceSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkQueueFamilyProperties* properties) {
return
visitor->Visit("queueFlags", &properties->queueFlags) &&
visitor->Visit("queueCount", &properties->queueCount) &&
visitor->Visit("timestampValidBits", &properties->timestampValidBits) &&
visitor->Visit("minImageTransferGranularity",
&properties->minImageTransferGranularity);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkExtensionProperties* properties) {
return
visitor->Visit("extensionName", &properties->extensionName) &&
visitor->Visit("specVersion", &properties->specVersion);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkLayerProperties* properties) {
return
visitor->Visit("layerName", &properties->layerName) &&
visitor->Visit("specVersion", &properties->specVersion) &&
visitor->Visit("implementationVersion",
&properties->implementationVersion) &&
visitor->Visit("description", &properties->description);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkFormatProperties* properties) {
return
visitor->Visit("linearTilingFeatures",
&properties->linearTilingFeatures) &&
visitor->Visit("optimalTilingFeatures",
&properties->optimalTilingFeatures) &&
visitor->Visit("bufferFeatures", &properties->bufferFeatures);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkPhysicalDeviceLimits* limits) {
return
visitor->Visit("maxImageDimension1D", &limits->maxImageDimension1D) &&
visitor->Visit("maxImageDimension2D", &limits->maxImageDimension2D) &&
visitor->Visit("maxImageDimension3D", &limits->maxImageDimension3D) &&
visitor->Visit("maxImageDimensionCube", &limits->maxImageDimensionCube) &&
visitor->Visit("maxImageArrayLayers", &limits->maxImageArrayLayers) &&
visitor->Visit("maxTexelBufferElements",
&limits->maxTexelBufferElements) &&
visitor->Visit("maxUniformBufferRange", &limits->maxUniformBufferRange) &&
visitor->Visit("maxStorageBufferRange", &limits->maxStorageBufferRange) &&
visitor->Visit("maxPushConstantsSize", &limits->maxPushConstantsSize) &&
visitor->Visit("maxMemoryAllocationCount",
&limits->maxMemoryAllocationCount) &&
visitor->Visit("maxSamplerAllocationCount",
&limits->maxSamplerAllocationCount) &&
visitor->Visit("bufferImageGranularity",
&limits->bufferImageGranularity) &&
visitor->Visit("sparseAddressSpaceSize",
&limits->sparseAddressSpaceSize) &&
visitor->Visit("maxBoundDescriptorSets",
&limits->maxBoundDescriptorSets) &&
visitor->Visit("maxPerStageDescriptorSamplers",
&limits->maxPerStageDescriptorSamplers) &&
visitor->Visit("maxPerStageDescriptorUniformBuffers",
&limits->maxPerStageDescriptorUniformBuffers) &&
visitor->Visit("maxPerStageDescriptorStorageBuffers",
&limits->maxPerStageDescriptorStorageBuffers) &&
visitor->Visit("maxPerStageDescriptorSampledImages",
&limits->maxPerStageDescriptorSampledImages) &&
visitor->Visit("maxPerStageDescriptorStorageImages",
&limits->maxPerStageDescriptorStorageImages) &&
visitor->Visit("maxPerStageDescriptorInputAttachments",
&limits->maxPerStageDescriptorInputAttachments) &&
visitor->Visit("maxPerStageResources", &limits->maxPerStageResources) &&
visitor->Visit("maxDescriptorSetSamplers",
&limits->maxDescriptorSetSamplers) &&
visitor->Visit("maxDescriptorSetUniformBuffers",
&limits->maxDescriptorSetUniformBuffers) &&
visitor->Visit("maxDescriptorSetUniformBuffersDynamic",
&limits->maxDescriptorSetUniformBuffersDynamic) &&
visitor->Visit("maxDescriptorSetStorageBuffers",
&limits->maxDescriptorSetStorageBuffers) &&
visitor->Visit("maxDescriptorSetStorageBuffersDynamic",
&limits->maxDescriptorSetStorageBuffersDynamic) &&
visitor->Visit("maxDescriptorSetSampledImages",
&limits->maxDescriptorSetSampledImages) &&
visitor->Visit("maxDescriptorSetStorageImages",
&limits->maxDescriptorSetStorageImages) &&
visitor->Visit("maxDescriptorSetInputAttachments",
&limits->maxDescriptorSetInputAttachments) &&
visitor->Visit("maxVertexInputAttributes",
&limits->maxVertexInputAttributes) &&
visitor->Visit("maxVertexInputBindings",
&limits->maxVertexInputBindings) &&
visitor->Visit("maxVertexInputAttributeOffset",
&limits->maxVertexInputAttributeOffset) &&
visitor->Visit("maxVertexInputBindingStride",
&limits->maxVertexInputBindingStride) &&
visitor->Visit("maxVertexOutputComponents",
&limits->maxVertexOutputComponents) &&
visitor->Visit("maxTessellationGenerationLevel",
&limits->maxTessellationGenerationLevel) &&
visitor->Visit("maxTessellationPatchSize",
&limits->maxTessellationPatchSize) &&
visitor->Visit("maxTessellationControlPerVertexInputComponents",
&limits->maxTessellationControlPerVertexInputComponents) &&
visitor->Visit(
"maxTessellationControlPerVertexOutputComponents",
&limits->maxTessellationControlPerVertexOutputComponents) &&
visitor->Visit("maxTessellationControlPerPatchOutputComponents",
&limits->maxTessellationControlPerPatchOutputComponents) &&
visitor->Visit("maxTessellationControlTotalOutputComponents",
&limits->maxTessellationControlTotalOutputComponents) &&
visitor->Visit("maxTessellationEvaluationInputComponents",
&limits->maxTessellationEvaluationInputComponents) &&
visitor->Visit("maxTessellationEvaluationOutputComponents",
&limits->maxTessellationEvaluationOutputComponents) &&
visitor->Visit("maxGeometryShaderInvocations",
&limits->maxGeometryShaderInvocations) &&
visitor->Visit("maxGeometryInputComponents",
&limits->maxGeometryInputComponents) &&
visitor->Visit("maxGeometryOutputComponents",
&limits->maxGeometryOutputComponents) &&
visitor->Visit("maxGeometryOutputVertices",
&limits->maxGeometryOutputVertices) &&
visitor->Visit("maxGeometryTotalOutputComponents",
&limits->maxGeometryTotalOutputComponents) &&
visitor->Visit("maxFragmentInputComponents",
&limits->maxFragmentInputComponents) &&
visitor->Visit("maxFragmentOutputAttachments",
&limits->maxFragmentOutputAttachments) &&
visitor->Visit("maxFragmentDualSrcAttachments",
&limits->maxFragmentDualSrcAttachments) &&
visitor->Visit("maxFragmentCombinedOutputResources",
&limits->maxFragmentCombinedOutputResources) &&
visitor->Visit("maxComputeSharedMemorySize",
&limits->maxComputeSharedMemorySize) &&
visitor->Visit("maxComputeWorkGroupCount",
&limits->maxComputeWorkGroupCount) &&
visitor->Visit("maxComputeWorkGroupInvocations",
&limits->maxComputeWorkGroupInvocations) &&
visitor->Visit("maxComputeWorkGroupSize",
&limits->maxComputeWorkGroupSize) &&
visitor->Visit("subPixelPrecisionBits", &limits->subPixelPrecisionBits) &&
visitor->Visit("subTexelPrecisionBits", &limits->subTexelPrecisionBits) &&
visitor->Visit("mipmapPrecisionBits", &limits->mipmapPrecisionBits) &&
visitor->Visit("maxDrawIndexedIndexValue",
&limits->maxDrawIndexedIndexValue) &&
visitor->Visit("maxDrawIndirectCount", &limits->maxDrawIndirectCount) &&
visitor->Visit("maxSamplerLodBias", &limits->maxSamplerLodBias) &&
visitor->Visit("maxSamplerAnisotropy", &limits->maxSamplerAnisotropy) &&
visitor->Visit("maxViewports", &limits->maxViewports) &&
visitor->Visit("maxViewportDimensions", &limits->maxViewportDimensions) &&
visitor->Visit("viewportBoundsRange", &limits->viewportBoundsRange) &&
visitor->Visit("viewportSubPixelBits", &limits->viewportSubPixelBits) &&
visitor->Visit("minMemoryMapAlignment", &limits->minMemoryMapAlignment) &&
visitor->Visit("minTexelBufferOffsetAlignment",
&limits->minTexelBufferOffsetAlignment) &&
visitor->Visit("minUniformBufferOffsetAlignment",
&limits->minUniformBufferOffsetAlignment) &&
visitor->Visit("minStorageBufferOffsetAlignment",
&limits->minStorageBufferOffsetAlignment) &&
visitor->Visit("minTexelOffset", &limits->minTexelOffset) &&
visitor->Visit("maxTexelOffset", &limits->maxTexelOffset) &&
visitor->Visit("minTexelGatherOffset", &limits->minTexelGatherOffset) &&
visitor->Visit("maxTexelGatherOffset", &limits->maxTexelGatherOffset) &&
visitor->Visit("minInterpolationOffset",
&limits->minInterpolationOffset) &&
visitor->Visit("maxInterpolationOffset",
&limits->maxInterpolationOffset) &&
visitor->Visit("subPixelInterpolationOffsetBits",
&limits->subPixelInterpolationOffsetBits) &&
visitor->Visit("maxFramebufferWidth", &limits->maxFramebufferWidth) &&
visitor->Visit("maxFramebufferHeight", &limits->maxFramebufferHeight) &&
visitor->Visit("maxFramebufferLayers", &limits->maxFramebufferLayers) &&
visitor->Visit("framebufferColorSampleCounts",
&limits->framebufferColorSampleCounts) &&
visitor->Visit("framebufferDepthSampleCounts",
&limits->framebufferDepthSampleCounts) &&
visitor->Visit("framebufferStencilSampleCounts",
&limits->framebufferStencilSampleCounts) &&
visitor->Visit("framebufferNoAttachmentsSampleCounts",
&limits->framebufferNoAttachmentsSampleCounts) &&
visitor->Visit("maxColorAttachments", &limits->maxColorAttachments) &&
visitor->Visit("sampledImageColorSampleCounts",
&limits->sampledImageColorSampleCounts) &&
visitor->Visit("sampledImageIntegerSampleCounts",
&limits->sampledImageIntegerSampleCounts) &&
visitor->Visit("sampledImageDepthSampleCounts",
&limits->sampledImageDepthSampleCounts) &&
visitor->Visit("sampledImageStencilSampleCounts",
&limits->sampledImageStencilSampleCounts) &&
visitor->Visit("storageImageSampleCounts",
&limits->storageImageSampleCounts) &&
visitor->Visit("maxSampleMaskWords", &limits->maxSampleMaskWords) &&
visitor->Visit("timestampComputeAndGraphics",
&limits->timestampComputeAndGraphics) &&
visitor->Visit("timestampPeriod", &limits->timestampPeriod) &&
visitor->Visit("maxClipDistances", &limits->maxClipDistances) &&
visitor->Visit("maxCullDistances", &limits->maxCullDistances) &&
visitor->Visit("maxCombinedClipAndCullDistances",
&limits->maxCombinedClipAndCullDistances) &&
visitor->Visit("discreteQueuePriorities",
&limits->discreteQueuePriorities) &&
visitor->Visit("pointSizeRange", &limits->pointSizeRange) &&
visitor->Visit("lineWidthRange", &limits->lineWidthRange) &&
visitor->Visit("pointSizeGranularity", &limits->pointSizeGranularity) &&
visitor->Visit("lineWidthGranularity", &limits->lineWidthGranularity) &&
visitor->Visit("strictLines", &limits->strictLines) &&
visitor->Visit("standardSampleLocations",
&limits->standardSampleLocations) &&
visitor->Visit("optimalBufferCopyOffsetAlignment",
&limits->optimalBufferCopyOffsetAlignment) &&
visitor->Visit("optimalBufferCopyRowPitchAlignment",
&limits->optimalBufferCopyRowPitchAlignment) &&
visitor->Visit("nonCoherentAtomSize", &limits->nonCoherentAtomSize);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkPhysicalDeviceFeatures* features) {
return
visitor->Visit("robustBufferAccess", &features->robustBufferAccess) &&
visitor->Visit("fullDrawIndexUint32", &features->fullDrawIndexUint32) &&
visitor->Visit("imageCubeArray", &features->imageCubeArray) &&
visitor->Visit("independentBlend", &features->independentBlend) &&
visitor->Visit("geometryShader", &features->geometryShader) &&
visitor->Visit("tessellationShader", &features->tessellationShader) &&
visitor->Visit("sampleRateShading", &features->sampleRateShading) &&
visitor->Visit("dualSrcBlend", &features->dualSrcBlend) &&
visitor->Visit("logicOp", &features->logicOp) &&
visitor->Visit("multiDrawIndirect", &features->multiDrawIndirect) &&
visitor->Visit("drawIndirectFirstInstance",
&features->drawIndirectFirstInstance) &&
visitor->Visit("depthClamp", &features->depthClamp) &&
visitor->Visit("depthBiasClamp", &features->depthBiasClamp) &&
visitor->Visit("fillModeNonSolid", &features->fillModeNonSolid) &&
visitor->Visit("depthBounds", &features->depthBounds) &&
visitor->Visit("wideLines", &features->wideLines) &&
visitor->Visit("largePoints", &features->largePoints) &&
visitor->Visit("alphaToOne", &features->alphaToOne) &&
visitor->Visit("multiViewport", &features->multiViewport) &&
visitor->Visit("samplerAnisotropy", &features->samplerAnisotropy) &&
visitor->Visit("textureCompressionETC2",
&features->textureCompressionETC2) &&
visitor->Visit("textureCompressionASTC_LDR",
&features->textureCompressionASTC_LDR) &&
visitor->Visit("textureCompressionBC", &features->textureCompressionBC) &&
visitor->Visit("occlusionQueryPrecise",
&features->occlusionQueryPrecise) &&
visitor->Visit("pipelineStatisticsQuery",
&features->pipelineStatisticsQuery) &&
visitor->Visit("vertexPipelineStoresAndAtomics",
&features->vertexPipelineStoresAndAtomics) &&
visitor->Visit("fragmentStoresAndAtomics",
&features->fragmentStoresAndAtomics) &&
visitor->Visit("shaderTessellationAndGeometryPointSize",
&features->shaderTessellationAndGeometryPointSize) &&
visitor->Visit("shaderImageGatherExtended",
&features->shaderImageGatherExtended) &&
visitor->Visit("shaderStorageImageExtendedFormats",
&features->shaderStorageImageExtendedFormats) &&
visitor->Visit("shaderStorageImageMultisample",
&features->shaderStorageImageMultisample) &&
visitor->Visit("shaderStorageImageReadWithoutFormat",
&features->shaderStorageImageReadWithoutFormat) &&
visitor->Visit("shaderStorageImageWriteWithoutFormat",
&features->shaderStorageImageWriteWithoutFormat) &&
visitor->Visit("shaderUniformBufferArrayDynamicIndexing",
&features->shaderUniformBufferArrayDynamicIndexing) &&
visitor->Visit("shaderSampledImageArrayDynamicIndexing",
&features->shaderSampledImageArrayDynamicIndexing) &&
visitor->Visit("shaderStorageBufferArrayDynamicIndexing",
&features->shaderStorageBufferArrayDynamicIndexing) &&
visitor->Visit("shaderStorageImageArrayDynamicIndexing",
&features->shaderStorageImageArrayDynamicIndexing) &&
visitor->Visit("shaderClipDistance", &features->shaderClipDistance) &&
visitor->Visit("shaderCullDistance", &features->shaderCullDistance) &&
visitor->Visit("shaderFloat64", &features->shaderFloat64) &&
visitor->Visit("shaderInt64", &features->shaderInt64) &&
visitor->Visit("shaderInt16", &features->shaderInt16) &&
visitor->Visit("shaderResourceResidency",
&features->shaderResourceResidency) &&
visitor->Visit("shaderResourceMinLod", &features->shaderResourceMinLod) &&
visitor->Visit("sparseBinding", &features->sparseBinding) &&
visitor->Visit("sparseResidencyBuffer",
&features->sparseResidencyBuffer) &&
visitor->Visit("sparseResidencyImage2D",
&features->sparseResidencyImage2D) &&
visitor->Visit("sparseResidencyImage3D",
&features->sparseResidencyImage3D) &&
visitor->Visit("sparseResidency2Samples",
&features->sparseResidency2Samples) &&
visitor->Visit("sparseResidency4Samples",
&features->sparseResidency4Samples) &&
visitor->Visit("sparseResidency8Samples",
&features->sparseResidency8Samples) &&
visitor->Visit("sparseResidency16Samples",
&features->sparseResidency16Samples) &&
visitor->Visit("sparseResidencyAliased",
&features->sparseResidencyAliased) &&
visitor->Visit("variableMultisampleRate",
&features->variableMultisampleRate) &&
visitor->Visit("inheritedQueries", &features->inheritedQueries);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkExternalFenceProperties* properties) {
return visitor->Visit("exportFromImportedHandleTypes",
&properties->exportFromImportedHandleTypes) &&
visitor->Visit("compatibleHandleTypes",
&properties->compatibleHandleTypes) &&
visitor->Visit("externalFenceFeatures",
&properties->externalFenceFeatures);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor,
VkExternalSemaphoreProperties* properties) {
return visitor->Visit("exportFromImportedHandleTypes",
&properties->exportFromImportedHandleTypes) &&
visitor->Visit("compatibleHandleTypes",
&properties->compatibleHandleTypes) &&
visitor->Visit("externalSemaphoreFeatures",
&properties->externalSemaphoreFeatures);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonLayer* layer) {
return visitor->Visit("properties", &layer->properties) &&
visitor->Visit("extensions", &layer->extensions);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonDeviceGroup* device_group) {
return visitor->Visit("devices", &device_group->device_inds) &&
visitor->Visit("subsetAllocation",
&device_group->properties.subsetAllocation);
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonDevice* device) {
bool ret = true;
switch (device->properties.apiVersion ^
VK_API_VERSION_PATCH(device->properties.apiVersion)) {
case VK_API_VERSION_1_4:
ret &= visitor->Visit("globalPriorityQueryFeatures",
&device->global_priority_query_features) &&
visitor->Visit("shaderSubgroupRotateFeatures",
&device->shader_subgroup_rotate_features) &&
visitor->Visit("shaderFloatControls2Features",
&device->shader_float_controls2_features) &&
visitor->Visit("shaderExpectAssumeFeatures",
&device->shader_expect_assume_features) &&
visitor->Visit("lineRasterizationFeatures",
&device->line_rasterization_features) &&
visitor->Visit("lineRasterizationProperties",
&device->line_rasterization_properties) &&
visitor->Visit("vertexAttributeDivisorProperties",
&device->vertex_attribute_divisor_properties) &&
visitor->Visit("vertexAttributeDivisorFeatures",
&device->vertex_attribute_divisor_features) &&
visitor->Visit("indexTypeUint8Features",
&device->index_type_uint8_features) &&
visitor->Visit("maintenance5Features",
&device->maintenance5_features) &&
visitor->Visit("maintenance5Properties",
&device->maintenance5_properties) &&
visitor->Visit("pushDescriptorProperties",
&device->push_descriptor_properties) &&
visitor->Visit("dynamicRenderingLocalReadFeatures",
&device->dynamic_rendering_local_read_features) &&
visitor->Visit("maintenance6Features",
&device->maintenance6_features) &&
visitor->Visit("maintenance6Properties",
&device->maintenance6_properties) &&
visitor->Visit("pipelineProtectedAccessFeatures",
&device->pipeline_protected_access_features) &&
visitor->Visit("pipelineRobustnessFeatures",
&device->pipeline_robustness_features) &&
visitor->Visit("pipelineRobustnessProperties",
&device->pipeline_robustness_properties) &&
visitor->Visit("hostImageCopyFeatures",
&device->host_image_copy_features) &&
visitor->Visit("hostImageCopyProperties",
&device->host_image_copy_properties) &&
visitor->Visit("core14", &device->core14);
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_3:
ret &=
visitor->Visit("shaderTerminateInvocationFeatures",
&device->shader_terminate_invocation_features) &&
visitor->Visit(
"shaderDemoteToHelperInvocationFeatures",
&device->shader_demote_to_helper_invocation_features) &&
visitor->Visit("privateDataFeatures",
&device->private_data_features) &&
visitor->Visit("pipelineCreationCacheControlFeatures",
&device->pipeline_creation_cache_control_features) &&
visitor->Visit("synchronization2Features",
&device->synchronization2_features) &&
visitor->Visit("zeroInitializeWorkgroupMemoryFeatures",
&device->zero_initialize_workgroup_memory_features) &&
visitor->Visit("imageRobustnessFeatures",
&device->image_robustness_features) &&
visitor->Visit("subgroupSizeControlFeatures",
&device->subgroup_size_control_features) &&
visitor->Visit("subgroupSizeControlProperties",
&device->subgroup_size_control_properties) &&
visitor->Visit("inlineUniformBlockFeatures",
&device->inline_uniform_block_features) &&
visitor->Visit("inlineUniformBlockProperties",
&device->inline_uniform_block_properties) &&
visitor->Visit("textureCompressionAstchdrFeatures",
&device->texture_compression_astchdr_features) &&
visitor->Visit("dynamicRenderingFeatures",
&device->dynamic_rendering_features) &&
visitor->Visit("shaderIntegerDotProductFeatures",
&device->shader_integer_dot_product_features) &&
visitor->Visit("shaderIntegerDotProductProperties",
&device->shader_integer_dot_product_properties) &&
visitor->Visit("texelBufferAlignmentProperties",
&device->texel_buffer_alignment_properties) &&
visitor->Visit("maintenance4Features",
&device->maintenance4_features) &&
visitor->Visit("maintenance4Properties",
&device->maintenance4_properties) &&
visitor->Visit("core13", &device->core13);
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_2:
ret &= visitor->Visit("bit8StorageFeatures",
&device->bit8_storage_features) &&
visitor->Visit("driverProperties", &device->driver_properties) &&
visitor->Visit("shaderAtomicInt64Features",
&device->shader_atomic_int64_features) &&
visitor->Visit("shaderFloat16Int8Features",
&device->shader_float16_int8_features) &&
visitor->Visit("floatControlsProperties",
&device->float_controls_properties) &&
visitor->Visit("descriptorIndexingFeatures",
&device->descriptor_indexing_features) &&
visitor->Visit("descriptorIndexingProperties",
&device->descriptor_indexing_properties) &&
visitor->Visit("depthStencilResolveProperties",
&device->depth_stencil_resolve_properties) &&
visitor->Visit("scalarBlockLayoutFeatures",
&device->scalar_block_layout_features) &&
visitor->Visit("samplerFilterMinmaxProperties",
&device->sampler_filter_minmax_properties) &&
visitor->Visit("vulkanMemoryModelFeatures",
&device->vulkan_memory_model_features) &&
visitor->Visit("imagelessFramebufferFeatures",
&device->imageless_framebuffer_features) &&
visitor->Visit("uniformBufferStandardLayoutFeatures",
&device->uniform_buffer_standard_layout_features) &&
visitor->Visit("shaderSubgroupExtendedTypesFeatures",
&device->shader_subgroup_extended_types_features) &&
visitor->Visit("separateDepthStencilLayoutsFeatures",
&device->separate_depth_stencil_layouts_features) &&
visitor->Visit("hostQueryResetFeatures",
&device->host_query_reset_features) &&
visitor->Visit("timelineSemaphoreFeatures",
&device->timeline_semaphore_features) &&
visitor->Visit("timelineSemaphoreProperties",
&device->timeline_semaphore_properties) &&
visitor->Visit("bufferDeviceAddressFeatures",
&device->buffer_device_address_features) &&
visitor->Visit("core11", &device->core11);
ret &= visitor->Visit("core12", &device->core12);
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_1:
ret &=
visitor->Visit("subgroupProperties", &device->subgroup_properties) &&
visitor->Visit("bit16StorageFeatures",
&device->bit16_storage_features) &&
visitor->Visit("pointClippingProperties",
&device->point_clipping_properties) &&
visitor->Visit("multiviewFeatures", &device->multiview_features) &&
visitor->Visit("multiviewProperties",
&device->multiview_properties) &&
visitor->Visit("variablePointerFeatures",
&device->variable_pointer_features) &&
visitor->Visit("variablePointersFeatures",
&device->variable_pointers_features) &&
visitor->Visit("protectedMemoryFeatures",
&device->protected_memory_features) &&
visitor->Visit("protectedMemoryProperties",
&device->protected_memory_properties) &&
visitor->Visit("samplerYcbcrConversionFeatures",
&device->sampler_ycbcr_conversion_features) &&
visitor->Visit("idProperties", &device->id_properties) &&
visitor->Visit("maintenance3Properties",
&device->maintenance3_properties) &&
visitor->Visit("shaderDrawParameterFeatures",
&device->shader_draw_parameter_features) &&
visitor->Visit("shaderDrawParametersFeatures",
&device->shader_draw_parameters_features) &&
visitor->Visit("externalFenceProperties",
&device->external_fence_properties) &&
visitor->Visit("externalSemaphoreProperties",
&device->external_semaphore_properties);
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_0:
ret &= visitor->Visit("properties", &device->properties) &&
visitor->Visit("features", &device->features) &&
visitor->Visit("memory", &device->memory) &&
visitor->Visit("queues", &device->queues) &&
visitor->Visit("extensions", &device->extensions) &&
visitor->Visit("layers", &device->layers) &&
visitor->Visit("formats", &device->formats);
if (device->amd_anti_lag.reported) {
ret &= visitor->Visit("VK_AMD_anti_lag", &device->amd_anti_lag);
}
if (device->amd_device_coherent_memory.reported) {
ret &= visitor->Visit("VK_AMD_device_coherent_memory",
&device->amd_device_coherent_memory);
}
if (device->amd_shader_core_properties.reported) {
ret &= visitor->Visit("VK_AMD_shader_core_properties",
&device->amd_shader_core_properties);
}
if (device->amd_shader_core_properties2.reported) {
ret &= visitor->Visit("VK_AMD_shader_core_properties2",
&device->amd_shader_core_properties2);
}
if (device->amd_shader_early_and_late_fragment_tests.reported) {
ret &=
visitor->Visit("VK_AMD_shader_early_and_late_fragment_tests",
&device->amd_shader_early_and_late_fragment_tests);
}
if (device->android_external_format_resolve.reported) {
ret &= visitor->Visit("VK_ANDROID_external_format_resolve",
&device->android_external_format_resolve);
}
if (device->arm_format_pack.reported) {
ret &= visitor->Visit("VK_ARM_format_pack", &device->arm_format_pack);
}
if (device->arm_pipeline_opacity_micromap.reported) {
ret &= visitor->Visit("VK_ARM_pipeline_opacity_micromap",
&device->arm_pipeline_opacity_micromap);
}
if (device->arm_rasterization_order_attachment_access.reported) {
ret &=
visitor->Visit("VK_ARM_rasterization_order_attachment_access",
&device->arm_rasterization_order_attachment_access);
}
if (device->arm_render_pass_striped.reported) {
ret &= visitor->Visit("VK_ARM_render_pass_striped",
&device->arm_render_pass_striped);
}
if (device->arm_scheduling_controls.reported) {
ret &= visitor->Visit("VK_ARM_scheduling_controls",
&device->arm_scheduling_controls);
}
if (device->arm_shader_core_builtins.reported) {
ret &= visitor->Visit("VK_ARM_shader_core_builtins",
&device->arm_shader_core_builtins);
}
if (device->arm_shader_core_properties.reported) {
ret &= visitor->Visit("VK_ARM_shader_core_properties",
&device->arm_shader_core_properties);
}
if (device->arm_tensors.reported) {
ret &= visitor->Visit("VK_ARM_tensors", &device->arm_tensors);
}
if (device->ext_formats_4444.reported) {
ret &= visitor->Visit("VK_EXT_4444_formats", &device->ext_formats_4444);
}
if (device->ext_astc_decode_mode.reported) {
ret &= visitor->Visit("VK_EXT_astc_decode_mode",
&device->ext_astc_decode_mode);
}
if (device->ext_attachment_feedback_loop_dynamic_state.reported) {
ret &=
visitor->Visit("VK_EXT_attachment_feedback_loop_dynamic_state",
&device->ext_attachment_feedback_loop_dynamic_state);
}
if (device->ext_attachment_feedback_loop_layout.reported) {
ret &= visitor->Visit("VK_EXT_attachment_feedback_loop_layout",
&device->ext_attachment_feedback_loop_layout);
}
if (device->ext_blend_operation_advanced.reported) {
ret &= visitor->Visit("VK_EXT_blend_operation_advanced",
&device->ext_blend_operation_advanced);
}
if (device->ext_border_color_swizzle.reported) {
ret &= visitor->Visit("VK_EXT_border_color_swizzle",
&device->ext_border_color_swizzle);
}
if (device->ext_buffer_device_address.reported) {
ret &= visitor->Visit("VK_EXT_buffer_device_address",
&device->ext_buffer_device_address);
}
if (device->ext_color_write_enable.reported) {
ret &= visitor->Visit("VK_EXT_color_write_enable",
&device->ext_color_write_enable);
}
if (device->ext_conditional_rendering.reported) {
ret &= visitor->Visit("VK_EXT_conditional_rendering",
&device->ext_conditional_rendering);
}
if (device->ext_conservative_rasterization.reported) {
ret &= visitor->Visit("VK_EXT_conservative_rasterization",
&device->ext_conservative_rasterization);
}
if (device->ext_custom_border_color.reported) {
ret &= visitor->Visit("VK_EXT_custom_border_color",
&device->ext_custom_border_color);
}
if (device->ext_depth_bias_control.reported) {
ret &= visitor->Visit("VK_EXT_depth_bias_control",
&device->ext_depth_bias_control);
}
if (device->ext_depth_clamp_control.reported) {
ret &= visitor->Visit("VK_EXT_depth_clamp_control",
&device->ext_depth_clamp_control);
}
if (device->ext_depth_clip_control.reported) {
ret &= visitor->Visit("VK_EXT_depth_clip_control",
&device->ext_depth_clip_control);
}
if (device->ext_depth_clip_enable.reported) {
ret &= visitor->Visit("VK_EXT_depth_clip_enable",
&device->ext_depth_clip_enable);
}
if (device->ext_descriptor_buffer.reported) {
ret &= visitor->Visit("VK_EXT_descriptor_buffer",
&device->ext_descriptor_buffer);
}
if (device->ext_descriptor_indexing.reported) {
ret &= visitor->Visit("VK_EXT_descriptor_indexing",
&device->ext_descriptor_indexing);
}
if (device->ext_device_address_binding_report.reported) {
ret &= visitor->Visit("VK_EXT_device_address_binding_report",
&device->ext_device_address_binding_report);
}
if (device->ext_device_fault.reported) {
ret &= visitor->Visit("VK_EXT_device_fault", &device->ext_device_fault);
}
if (device->ext_device_generated_commands.reported) {
ret &= visitor->Visit("VK_EXT_device_generated_commands",
&device->ext_device_generated_commands);
}
if (device->ext_device_memory_report.reported) {
ret &= visitor->Visit("VK_EXT_device_memory_report",
&device->ext_device_memory_report);
}
if (device->ext_discard_rectangles.reported) {
ret &= visitor->Visit("VK_EXT_discard_rectangles",
&device->ext_discard_rectangles);
}
if (device->ext_dynamic_rendering_unused_attachments.reported) {
ret &=
visitor->Visit("VK_EXT_dynamic_rendering_unused_attachments",
&device->ext_dynamic_rendering_unused_attachments);
}
if (device->ext_extended_dynamic_state.reported) {
ret &= visitor->Visit("VK_EXT_extended_dynamic_state",
&device->ext_extended_dynamic_state);
}
if (device->ext_extended_dynamic_state2.reported) {
ret &= visitor->Visit("VK_EXT_extended_dynamic_state2",
&device->ext_extended_dynamic_state2);
}
if (device->ext_extended_dynamic_state3.reported) {
ret &= visitor->Visit("VK_EXT_extended_dynamic_state3",
&device->ext_extended_dynamic_state3);
}
if (device->ext_external_memory_host.reported) {
ret &= visitor->Visit("VK_EXT_external_memory_host",
&device->ext_external_memory_host);
}
if (device->ext_fragment_density_map.reported) {
ret &= visitor->Visit("VK_EXT_fragment_density_map",
&device->ext_fragment_density_map);
}
if (device->ext_fragment_density_map2.reported) {
ret &= visitor->Visit("VK_EXT_fragment_density_map2",
&device->ext_fragment_density_map2);
}
if (device->ext_fragment_density_map_offset.reported) {
ret &= visitor->Visit("VK_EXT_fragment_density_map_offset",
&device->ext_fragment_density_map_offset);
}
if (device->ext_fragment_shader_interlock.reported) {
ret &= visitor->Visit("VK_EXT_fragment_shader_interlock",
&device->ext_fragment_shader_interlock);
}
if (device->ext_frame_boundary.reported) {
ret &= visitor->Visit("VK_EXT_frame_boundary",
&device->ext_frame_boundary);
}
if (device->ext_global_priority_query.reported) {
ret &= visitor->Visit("VK_EXT_global_priority_query",
&device->ext_global_priority_query);
}
if (device->ext_graphics_pipeline_library.reported) {
ret &= visitor->Visit("VK_EXT_graphics_pipeline_library",
&device->ext_graphics_pipeline_library);
}
if (device->ext_host_image_copy.reported) {
ret &= visitor->Visit("VK_EXT_host_image_copy",
&device->ext_host_image_copy);
}
if (device->ext_host_query_reset.reported) {
ret &= visitor->Visit("VK_EXT_host_query_reset",
&device->ext_host_query_reset);
}
if (device->ext_image_2d_view_of_3d.reported) {
ret &= visitor->Visit("VK_EXT_image_2d_view_of_3d",
&device->ext_image_2d_view_of_3d);
}
if (device->ext_image_compression_control.reported) {
ret &= visitor->Visit("VK_EXT_image_compression_control",
&device->ext_image_compression_control);
}
if (device->ext_image_compression_control_swapchain.reported) {
ret &= visitor->Visit("VK_EXT_image_compression_control_swapchain",
&device->ext_image_compression_control_swapchain);
}
if (device->ext_image_robustness.reported) {
ret &= visitor->Visit("VK_EXT_image_robustness",
&device->ext_image_robustness);
}
if (device->ext_image_sliced_view_of_3d.reported) {
ret &= visitor->Visit("VK_EXT_image_sliced_view_of_3d",
&device->ext_image_sliced_view_of_3d);
}
if (device->ext_image_view_min_lod.reported) {
ret &= visitor->Visit("VK_EXT_image_view_min_lod",
&device->ext_image_view_min_lod);
}
if (device->ext_index_type_uint8.reported) {
ret &= visitor->Visit("VK_EXT_index_type_uint8",
&device->ext_index_type_uint8);
}
if (device->ext_inline_uniform_block.reported) {
ret &= visitor->Visit("VK_EXT_inline_uniform_block",
&device->ext_inline_uniform_block);
}
if (device->ext_legacy_dithering.reported) {
ret &= visitor->Visit("VK_EXT_legacy_dithering",
&device->ext_legacy_dithering);
}
if (device->ext_legacy_vertex_attributes.reported) {
ret &= visitor->Visit("VK_EXT_legacy_vertex_attributes",
&device->ext_legacy_vertex_attributes);
}
if (device->ext_line_rasterization.reported) {
ret &= visitor->Visit("VK_EXT_line_rasterization",
&device->ext_line_rasterization);
}
if (device->ext_map_memory_placed.reported) {
ret &= visitor->Visit("VK_EXT_map_memory_placed",
&device->ext_map_memory_placed);
}
if (device->ext_memory_priority.reported) {
ret &= visitor->Visit("VK_EXT_memory_priority",
&device->ext_memory_priority);
}
if (device->ext_mesh_shader.reported) {
ret &= visitor->Visit("VK_EXT_mesh_shader", &device->ext_mesh_shader);
}
if (device->ext_multi_draw.reported) {
ret &= visitor->Visit("VK_EXT_multi_draw", &device->ext_multi_draw);
}
if (device->ext_multisampled_render_to_single_sampled.reported) {
ret &=
visitor->Visit("VK_EXT_multisampled_render_to_single_sampled",
&device->ext_multisampled_render_to_single_sampled);
}
if (device->ext_mutable_descriptor_type.reported) {
ret &= visitor->Visit("VK_EXT_mutable_descriptor_type",
&device->ext_mutable_descriptor_type);
}
if (device->ext_nested_command_buffer.reported) {
ret &= visitor->Visit("VK_EXT_nested_command_buffer",
&device->ext_nested_command_buffer);
}
if (device->ext_non_seamless_cube_map.reported) {
ret &= visitor->Visit("VK_EXT_non_seamless_cube_map",
&device->ext_non_seamless_cube_map);
}
if (device->ext_opacity_micromap.reported) {
ret &= visitor->Visit("VK_EXT_opacity_micromap",
&device->ext_opacity_micromap);
}
if (device->ext_pageable_device_local_memory.reported) {
ret &= visitor->Visit("VK_EXT_pageable_device_local_memory",
&device->ext_pageable_device_local_memory);
}
if (device->ext_pci_bus_info.reported) {
ret &= visitor->Visit("VK_EXT_pci_bus_info", &device->ext_pci_bus_info);
}
if (device->ext_physical_device_drm.reported) {
ret &= visitor->Visit("VK_EXT_physical_device_drm",
&device->ext_physical_device_drm);
}
if (device->ext_pipeline_creation_cache_control.reported) {
ret &= visitor->Visit("VK_EXT_pipeline_creation_cache_control",
&device->ext_pipeline_creation_cache_control);
}
if (device->ext_pipeline_library_group_handles.reported) {
ret &= visitor->Visit("VK_EXT_pipeline_library_group_handles",
&device->ext_pipeline_library_group_handles);
}
if (device->ext_pipeline_properties.reported) {
ret &= visitor->Visit("VK_EXT_pipeline_properties",
&device->ext_pipeline_properties);
}
if (device->ext_pipeline_protected_access.reported) {
ret &= visitor->Visit("VK_EXT_pipeline_protected_access",
&device->ext_pipeline_protected_access);
}
if (device->ext_pipeline_robustness.reported) {
ret &= visitor->Visit("VK_EXT_pipeline_robustness",
&device->ext_pipeline_robustness);
}
if (device->ext_present_mode_fifo_latest_ready.reported) {
ret &= visitor->Visit("VK_EXT_present_mode_fifo_latest_ready",
&device->ext_present_mode_fifo_latest_ready);
}
if (device->ext_primitive_topology_list_restart.reported) {
ret &= visitor->Visit("VK_EXT_primitive_topology_list_restart",
&device->ext_primitive_topology_list_restart);
}
if (device->ext_primitives_generated_query.reported) {
ret &= visitor->Visit("VK_EXT_primitives_generated_query",
&device->ext_primitives_generated_query);
}
if (device->ext_private_data.reported) {
ret &= visitor->Visit("VK_EXT_private_data", &device->ext_private_data);
}
if (device->ext_provoking_vertex.reported) {
ret &= visitor->Visit("VK_EXT_provoking_vertex",
&device->ext_provoking_vertex);
}
if (device->ext_rasterization_order_attachment_access.reported) {
ret &=
visitor->Visit("VK_EXT_rasterization_order_attachment_access",
&device->ext_rasterization_order_attachment_access);
}
if (device->ext_rgba10x6_formats.reported) {
ret &= visitor->Visit("VK_EXT_rgba10x6_formats",
&device->ext_rgba10x6_formats);
}
if (device->ext_robustness2.reported) {
ret &= visitor->Visit("VK_EXT_robustness2", &device->ext_robustness2);
}
if (device->ext_sample_locations.reported) {
ret &= visitor->Visit("VK_EXT_sample_locations",
&device->ext_sample_locations);
}
if (device->ext_sampler_filter_minmax.reported) {
ret &= visitor->Visit("VK_EXT_sampler_filter_minmax",
&device->ext_sampler_filter_minmax);
}
if (device->ext_scalar_block_layout.reported) {
ret &= visitor->Visit("VK_EXT_scalar_block_layout",
&device->ext_scalar_block_layout);
}
if (device->ext_shader_atomic_float.reported) {
ret &= visitor->Visit("VK_EXT_shader_atomic_float",
&device->ext_shader_atomic_float);
}
if (device->ext_shader_atomic_float2.reported) {
ret &= visitor->Visit("VK_EXT_shader_atomic_float2",
&device->ext_shader_atomic_float2);
}
if (device->ext_shader_demote_to_helper_invocation.reported) {
ret &= visitor->Visit("VK_EXT_shader_demote_to_helper_invocation",
&device->ext_shader_demote_to_helper_invocation);
}
if (device->ext_shader_float8.reported) {
ret &=
visitor->Visit("VK_EXT_shader_float8", &device->ext_shader_float8);
}
if (device->ext_shader_image_atomic_int64.reported) {
ret &= visitor->Visit("VK_EXT_shader_image_atomic_int64",
&device->ext_shader_image_atomic_int64);
}
if (device->ext_shader_module_identifier.reported) {
ret &= visitor->Visit("VK_EXT_shader_module_identifier",
&device->ext_shader_module_identifier);
}
if (device->ext_shader_object.reported) {
ret &=
visitor->Visit("VK_EXT_shader_object", &device->ext_shader_object);
}
if (device->ext_shader_replicated_composites.reported) {
ret &= visitor->Visit("VK_EXT_shader_replicated_composites",
&device->ext_shader_replicated_composites);
}
if (device->ext_shader_tile_image.reported) {
ret &= visitor->Visit("VK_EXT_shader_tile_image",
&device->ext_shader_tile_image);
}
if (device->ext_subgroup_size_control.reported) {
ret &= visitor->Visit("VK_EXT_subgroup_size_control",
&device->ext_subgroup_size_control);
}
if (device->ext_subpass_merge_feedback.reported) {
ret &= visitor->Visit("VK_EXT_subpass_merge_feedback",
&device->ext_subpass_merge_feedback);
}
if (device->ext_swapchain_maintenance1.reported) {
ret &= visitor->Visit("VK_EXT_swapchain_maintenance1",
&device->ext_swapchain_maintenance1);
}
if (device->ext_texel_buffer_alignment.reported) {
ret &= visitor->Visit("VK_EXT_texel_buffer_alignment",
&device->ext_texel_buffer_alignment);
}
if (device->ext_texture_compression_astc_hdr.reported) {
ret &= visitor->Visit("VK_EXT_texture_compression_astc_hdr",
&device->ext_texture_compression_astc_hdr);
}
if (device->ext_transform_feedback.reported) {
ret &= visitor->Visit("VK_EXT_transform_feedback",
&device->ext_transform_feedback);
}
if (device->ext_vertex_attribute_divisor.reported) {
ret &= visitor->Visit("VK_EXT_vertex_attribute_divisor",
&device->ext_vertex_attribute_divisor);
}
if (device->ext_vertex_attribute_robustness.reported) {
ret &= visitor->Visit("VK_EXT_vertex_attribute_robustness",
&device->ext_vertex_attribute_robustness);
}
if (device->ext_vertex_input_dynamic_state.reported) {
ret &= visitor->Visit("VK_EXT_vertex_input_dynamic_state",
&device->ext_vertex_input_dynamic_state);
}
if (device->ext_ycbcr_2plane_444_formats.reported) {
ret &= visitor->Visit("VK_EXT_ycbcr_2plane_444_formats",
&device->ext_ycbcr_2plane_444_formats);
}
if (device->ext_ycbcr_image_arrays.reported) {
ret &= visitor->Visit("VK_EXT_ycbcr_image_arrays",
&device->ext_ycbcr_image_arrays);
}
if (device->ext_zero_initialize_device_memory.reported) {
ret &= visitor->Visit("VK_EXT_zero_initialize_device_memory",
&device->ext_zero_initialize_device_memory);
}
if (device->huawei_cluster_culling_shader.reported) {
ret &= visitor->Visit("VK_HUAWEI_cluster_culling_shader",
&device->huawei_cluster_culling_shader);
}
if (device->huawei_hdr_vivid.reported) {
ret &= visitor->Visit("VK_HUAWEI_hdr_vivid", &device->huawei_hdr_vivid);
}
if (device->huawei_invocation_mask.reported) {
ret &= visitor->Visit("VK_HUAWEI_invocation_mask",
&device->huawei_invocation_mask);
}
if (device->huawei_subpass_shading.reported) {
ret &= visitor->Visit("VK_HUAWEI_subpass_shading",
&device->huawei_subpass_shading);
}
if (device->img_relaxed_line_rasterization.reported) {
ret &= visitor->Visit("VK_IMG_relaxed_line_rasterization",
&device->img_relaxed_line_rasterization);
}
if (device->vk_intel_shader_integer_functions2.reported) {
ret &= visitor->Visit("VK_INTEL_shader_integer_functions2",
&device->vk_intel_shader_integer_functions2);
}
if (device->khr_16bit_storage.reported) {
ret &=
visitor->Visit("VK_KHR_16bit_storage", &device->khr_16bit_storage);
}
if (device->khr_8bit_storage.reported) {
ret &= visitor->Visit("VK_KHR_8bit_storage", &device->khr_8bit_storage);
}
if (device->khr_acceleration_structure.reported) {
ret &= visitor->Visit("VK_KHR_acceleration_structure",
&device->khr_acceleration_structure);
}
if (device->khr_buffer_device_address.reported) {
ret &= visitor->Visit("VK_KHR_buffer_device_address",
&device->khr_buffer_device_address);
}
if (device->khr_compute_shader_derivatives.reported) {
ret &= visitor->Visit("VK_KHR_compute_shader_derivatives",
&device->khr_compute_shader_derivatives);
}
if (device->khr_cooperative_matrix.reported) {
ret &= visitor->Visit("VK_KHR_cooperative_matrix",
&device->khr_cooperative_matrix);
}
if (device->khr_depth_clamp_zero_one.reported) {
ret &= visitor->Visit("VK_KHR_depth_clamp_zero_one",
&device->khr_depth_clamp_zero_one);
}
if (device->khr_depth_stencil_resolve.reported) {
ret &= visitor->Visit("VK_KHR_depth_stencil_resolve",
&device->khr_depth_stencil_resolve);
}
if (device->khr_driver_properties.reported) {
ret &= visitor->Visit("VK_KHR_driver_properties",
&device->khr_driver_properties);
}
if (device->khr_dynamic_rendering.reported) {
ret &= visitor->Visit("VK_KHR_dynamic_rendering",
&device->khr_dynamic_rendering);
}
if (device->khr_dynamic_rendering_local_read.reported) {
ret &= visitor->Visit("VK_KHR_dynamic_rendering_local_read",
&device->khr_dynamic_rendering_local_read);
}
if (device->khr_external_fence_capabilities.reported) {
ret &= visitor->Visit("VK_KHR_external_fence_capabilities",
&device->khr_external_fence_capabilities);
}
if (device->khr_external_memory_capabilities.reported) {
ret &= visitor->Visit("VK_KHR_external_memory_capabilities",
&device->khr_external_memory_capabilities);
}
if (device->khr_external_semaphore_capabilities.reported) {
ret &= visitor->Visit("VK_KHR_external_semaphore_capabilities",
&device->khr_external_semaphore_capabilities);
}
if (device->khr_fragment_shader_barycentric.reported) {
ret &= visitor->Visit("VK_KHR_fragment_shader_barycentric",
&device->khr_fragment_shader_barycentric);
}
if (device->khr_fragment_shading_rate.reported) {
ret &= visitor->Visit("VK_KHR_fragment_shading_rate",
&device->khr_fragment_shading_rate);
}
if (device->khr_global_priority.reported) {
ret &= visitor->Visit("VK_KHR_global_priority",
&device->khr_global_priority);
}
if (device->khr_imageless_framebuffer.reported) {
ret &= visitor->Visit("VK_KHR_imageless_framebuffer",
&device->khr_imageless_framebuffer);
}
if (device->khr_index_type_uint8.reported) {
ret &= visitor->Visit("VK_KHR_index_type_uint8",
&device->khr_index_type_uint8);
}
if (device->khr_line_rasterization.reported) {
ret &= visitor->Visit("VK_KHR_line_rasterization",
&device->khr_line_rasterization);
}
if (device->khr_maintenance2.reported) {
ret &= visitor->Visit("VK_KHR_maintenance2", &device->khr_maintenance2);
}
if (device->khr_maintenance3.reported) {
ret &= visitor->Visit("VK_KHR_maintenance3", &device->khr_maintenance3);
}
if (device->khr_maintenance4.reported) {
ret &= visitor->Visit("VK_KHR_maintenance4", &device->khr_maintenance4);
}
if (device->khr_maintenance5.reported) {
ret &= visitor->Visit("VK_KHR_maintenance5", &device->khr_maintenance5);
}
if (device->khr_maintenance6.reported) {
ret &= visitor->Visit("VK_KHR_maintenance6", &device->khr_maintenance6);
}
if (device->khr_maintenance7.reported) {
ret &= visitor->Visit("VK_KHR_maintenance7", &device->khr_maintenance7);
}
if (device->khr_maintenance8.reported) {
ret &= visitor->Visit("VK_KHR_maintenance8", &device->khr_maintenance8);
}
if (device->khr_maintenance9.reported) {
ret &= visitor->Visit("VK_KHR_maintenance9", &device->khr_maintenance9);
}
if (device->khr_multiview.reported) {
ret &= visitor->Visit("VK_KHR_multiview", &device->khr_multiview);
}
if (device->khr_performance_query.reported) {
ret &= visitor->Visit("VK_KHR_performance_query",
&device->khr_performance_query);
}
if (device->khr_pipeline_binary.reported) {
ret &= visitor->Visit("VK_KHR_pipeline_binary",
&device->khr_pipeline_binary);
}
if (device->khr_pipeline_executable_properties.reported) {
ret &= visitor->Visit("VK_KHR_pipeline_executable_properties",
&device->khr_pipeline_executable_properties);
}
if (device->khr_present_id.reported) {
ret &= visitor->Visit("VK_KHR_present_id", &device->khr_present_id);
}
if (device->khr_present_id2.reported) {
ret &= visitor->Visit("VK_KHR_present_id2", &device->khr_present_id2);
}
if (device->khr_present_wait.reported) {
ret &= visitor->Visit("VK_KHR_present_wait", &device->khr_present_wait);
}
if (device->khr_present_wait2.reported) {
ret &=
visitor->Visit("VK_KHR_present_wait2", &device->khr_present_wait2);
}
if (device->khr_push_descriptor.reported) {
ret &= visitor->Visit("VK_KHR_push_descriptor",
&device->khr_push_descriptor);
}
if (device->khr_ray_query.reported) {
ret &= visitor->Visit("VK_KHR_ray_query", &device->khr_ray_query);
}
if (device->khr_ray_tracing_maintenance1.reported) {
ret &= visitor->Visit("VK_KHR_ray_tracing_maintenance1",
&device->khr_ray_tracing_maintenance1);
}
if (device->khr_ray_tracing_pipeline.reported) {
ret &= visitor->Visit("VK_KHR_ray_tracing_pipeline",
&device->khr_ray_tracing_pipeline);
}
if (device->khr_ray_tracing_position_fetch.reported) {
ret &= visitor->Visit("VK_KHR_ray_tracing_position_fetch",
&device->khr_ray_tracing_position_fetch);
}
if (device->khr_robustness2.reported) {
ret &= visitor->Visit("VK_KHR_robustness2", &device->khr_robustness2);
}
if (device->khr_sampler_ycbcr_conversion.reported) {
ret &= visitor->Visit("VK_KHR_sampler_ycbcr_conversion",
&device->khr_sampler_ycbcr_conversion);
}
if (device->khr_separate_depth_stencil_layouts.reported) {
ret &= visitor->Visit("VK_KHR_separate_depth_stencil_layouts",
&device->khr_separate_depth_stencil_layouts);
}
if (device->khr_shader_atomic_int64.reported) {
ret &= visitor->Visit("VK_KHR_shader_atomic_int64",
&device->khr_shader_atomic_int64);
}
if (device->khr_shader_bfloat16.reported) {
ret &= visitor->Visit("VK_KHR_shader_bfloat16",
&device->khr_shader_bfloat16);
}
if (device->khr_shader_clock.reported) {
ret &= visitor->Visit("VK_KHR_shader_clock", &device->khr_shader_clock);
}
if (device->khr_shader_expect_assume.reported) {
ret &= visitor->Visit("VK_KHR_shader_expect_assume",
&device->khr_shader_expect_assume);
}
if (device->khr_shader_float16_int8.reported) {
ret &= visitor->Visit("VK_KHR_shader_float16_int8",
&device->khr_shader_float16_int8);
}
if (device->khr_shader_float_controls.reported) {
ret &= visitor->Visit("VK_KHR_shader_float_controls",
&device->khr_shader_float_controls);
}
if (device->khr_shader_float_controls2.reported) {
ret &= visitor->Visit("VK_KHR_shader_float_controls2",
&device->khr_shader_float_controls2);
}
if (device->khr_shader_integer_dot_product.reported) {
ret &= visitor->Visit("VK_KHR_shader_integer_dot_product",
&device->khr_shader_integer_dot_product);
}
if (device->khr_shader_maximal_reconvergence.reported) {
ret &= visitor->Visit("VK_KHR_shader_maximal_reconvergence",
&device->khr_shader_maximal_reconvergence);
}
if (device->khr_shader_quad_control.reported) {
ret &= visitor->Visit("VK_KHR_shader_quad_control",
&device->khr_shader_quad_control);
}
if (device->khr_shader_relaxed_extended_instruction.reported) {
ret &= visitor->Visit("VK_KHR_shader_relaxed_extended_instruction",
&device->khr_shader_relaxed_extended_instruction);
}
if (device->khr_shader_subgroup_extended_types.reported) {
ret &= visitor->Visit("VK_KHR_shader_subgroup_extended_types",
&device->khr_shader_subgroup_extended_types);
}
if (device->khr_shader_subgroup_rotate.reported) {
ret &= visitor->Visit("VK_KHR_shader_subgroup_rotate",
&device->khr_shader_subgroup_rotate);
}
if (device->khr_shader_subgroup_uniform_control_flow.reported) {
ret &=
visitor->Visit("VK_KHR_shader_subgroup_uniform_control_flow",
&device->khr_shader_subgroup_uniform_control_flow);
}
if (device->khr_shader_terminate_invocation.reported) {
ret &= visitor->Visit("VK_KHR_shader_terminate_invocation",
&device->khr_shader_terminate_invocation);
}
if (device->khr_synchronization2.reported) {
ret &= visitor->Visit("VK_KHR_synchronization2",
&device->khr_synchronization2);
}
if (device->khr_timeline_semaphore.reported) {
ret &= visitor->Visit("VK_KHR_timeline_semaphore",
&device->khr_timeline_semaphore);
}
if (device->khr_unified_image_layouts.reported) {
ret &= visitor->Visit("VK_KHR_unified_image_layouts",
&device->khr_unified_image_layouts);
}
if (device->khr_uniform_buffer_standard_layout.reported) {
ret &= visitor->Visit("VK_KHR_uniform_buffer_standard_layout",
&device->khr_uniform_buffer_standard_layout);
}
if (device->khr_variable_pointers.reported) {
ret &= visitor->Visit("VK_KHR_variable_pointers",
&device->khr_variable_pointers);
}
if (device->khr_vertex_attribute_divisor.reported) {
ret &= visitor->Visit("VK_KHR_vertex_attribute_divisor",
&device->khr_vertex_attribute_divisor);
}
if (device->khr_video_decode_vp9.reported) {
ret &= visitor->Visit("VK_KHR_video_decode_vp9",
&device->khr_video_decode_vp9);
}
if (device->khr_video_encode_av1.reported) {
ret &= visitor->Visit("VK_KHR_video_encode_av1",
&device->khr_video_encode_av1);
}
if (device->khr_video_encode_quantization_map.reported) {
ret &= visitor->Visit("VK_KHR_video_encode_quantization_map",
&device->khr_video_encode_quantization_map);
}
if (device->khr_video_maintenance1.reported) {
ret &= visitor->Visit("VK_KHR_video_maintenance1",
&device->khr_video_maintenance1);
}
if (device->khr_video_maintenance2.reported) {
ret &= visitor->Visit("VK_KHR_video_maintenance2",
&device->khr_video_maintenance2);
}
if (device->khr_vulkan_memory_model.reported) {
ret &= visitor->Visit("VK_KHR_vulkan_memory_model",
&device->khr_vulkan_memory_model);
}
if (device->khr_workgroup_memory_explicit_layout.reported) {
ret &= visitor->Visit("VK_KHR_workgroup_memory_explicit_layout",
&device->khr_workgroup_memory_explicit_layout);
}
if (device->khr_zero_initialize_workgroup_memory.reported) {
ret &= visitor->Visit("VK_KHR_zero_initialize_workgroup_memory",
&device->khr_zero_initialize_workgroup_memory);
}
if (device->mesa_image_alignment_control.reported) {
ret &= visitor->Visit("VK_MESA_image_alignment_control",
&device->mesa_image_alignment_control);
}
if (device->msft_layered_driver.reported) {
ret &= visitor->Visit("VK_MSFT_layered_driver",
&device->msft_layered_driver);
}
if (device->nvx_multiview_per_view_attributes.reported) {
ret &= visitor->Visit("VK_NVX_multiview_per_view_attributes",
&device->nvx_multiview_per_view_attributes);
}
if (device->nv_cluster_acceleration_structure.reported) {
ret &= visitor->Visit("VK_NV_cluster_acceleration_structure",
&device->nv_cluster_acceleration_structure);
}
if (device->nv_command_buffer_inheritance.reported) {
ret &= visitor->Visit("VK_NV_command_buffer_inheritance",
&device->nv_command_buffer_inheritance);
}
if (device->nv_compute_shader_derivatives.reported) {
ret &= visitor->Visit("VK_NV_compute_shader_derivatives",
&device->nv_compute_shader_derivatives);
}
if (device->nv_cooperative_matrix.reported) {
ret &= visitor->Visit("VK_NV_cooperative_matrix",
&device->nv_cooperative_matrix);
}
if (device->nv_cooperative_matrix2.reported) {
ret &= visitor->Visit("VK_NV_cooperative_matrix2",
&device->nv_cooperative_matrix2);
}
if (device->nv_cooperative_vector.reported) {
ret &= visitor->Visit("VK_NV_cooperative_vector",
&device->nv_cooperative_vector);
}
if (device->nv_copy_memory_indirect.reported) {
ret &= visitor->Visit("VK_NV_copy_memory_indirect",
&device->nv_copy_memory_indirect);
}
if (device->nv_corner_sampled_image.reported) {
ret &= visitor->Visit("VK_NV_corner_sampled_image",
&device->nv_corner_sampled_image);
}
if (device->nv_coverage_reduction_mode.reported) {
ret &= visitor->Visit("VK_NV_coverage_reduction_mode",
&device->nv_coverage_reduction_mode);
}
if (device->nv_dedicated_allocation_image_aliasing.reported) {
ret &= visitor->Visit("VK_NV_dedicated_allocation_image_aliasing",
&device->nv_dedicated_allocation_image_aliasing);
}
if (device->nv_descriptor_pool_overallocation.reported) {
ret &= visitor->Visit("VK_NV_descriptor_pool_overallocation",
&device->nv_descriptor_pool_overallocation);
}
if (device->nv_device_diagnostics_config.reported) {
ret &= visitor->Visit("VK_NV_device_diagnostics_config",
&device->nv_device_diagnostics_config);
}
if (device->nv_device_generated_commands.reported) {
ret &= visitor->Visit("VK_NV_device_generated_commands",
&device->nv_device_generated_commands);
}
if (device->nv_device_generated_commands_compute.reported) {
ret &= visitor->Visit("VK_NV_device_generated_commands_compute",
&device->nv_device_generated_commands_compute);
}
if (device->nv_extended_sparse_address_space.reported) {
ret &= visitor->Visit("VK_NV_extended_sparse_address_space",
&device->nv_extended_sparse_address_space);
}
if (device->nv_external_compute_queue.reported) {
ret &= visitor->Visit("VK_NV_external_compute_queue",
&device->nv_external_compute_queue);
}
if (device->nv_external_memory_rdma.reported) {
ret &= visitor->Visit("VK_NV_external_memory_rdma",
&device->nv_external_memory_rdma);
}
if (device->nv_fragment_shading_rate_enums.reported) {
ret &= visitor->Visit("VK_NV_fragment_shading_rate_enums",
&device->nv_fragment_shading_rate_enums);
}
if (device->nv_inherited_viewport_scissor.reported) {
ret &= visitor->Visit("VK_NV_inherited_viewport_scissor",
&device->nv_inherited_viewport_scissor);
}
if (device->nv_linear_color_attachment.reported) {
ret &= visitor->Visit("VK_NV_linear_color_attachment",
&device->nv_linear_color_attachment);
}
if (device->nv_memory_decompression.reported) {
ret &= visitor->Visit("VK_NV_memory_decompression",
&device->nv_memory_decompression);
}
if (device->nv_mesh_shader.reported) {
ret &= visitor->Visit("VK_NV_mesh_shader", &device->nv_mesh_shader);
}
if (device->nv_optical_flow.reported) {
ret &= visitor->Visit("VK_NV_optical_flow", &device->nv_optical_flow);
}
if (device->nv_partitioned_acceleration_structure.reported) {
ret &= visitor->Visit("VK_NV_partitioned_acceleration_structure",
&device->nv_partitioned_acceleration_structure);
}
if (device->nv_per_stage_descriptor_set.reported) {
ret &= visitor->Visit("VK_NV_per_stage_descriptor_set",
&device->nv_per_stage_descriptor_set);
}
if (device->nv_present_barrier.reported) {
ret &= visitor->Visit("VK_NV_present_barrier",
&device->nv_present_barrier);
}
if (device->nv_raw_access_chains.reported) {
ret &= visitor->Visit("VK_NV_raw_access_chains",
&device->nv_raw_access_chains);
}
if (device->nv_ray_tracing.reported) {
ret &= visitor->Visit("VK_NV_ray_tracing", &device->nv_ray_tracing);
}
if (device->nv_ray_tracing_invocation_reorder.reported) {
ret &= visitor->Visit("VK_NV_ray_tracing_invocation_reorder",
&device->nv_ray_tracing_invocation_reorder);
}
if (device->nv_ray_tracing_linear_swept_spheres.reported) {
ret &= visitor->Visit("VK_NV_ray_tracing_linear_swept_spheres",
&device->nv_ray_tracing_linear_swept_spheres);
}
if (device->nv_ray_tracing_motion_blur.reported) {
ret &= visitor->Visit("VK_NV_ray_tracing_motion_blur",
&device->nv_ray_tracing_motion_blur);
}
if (device->nv_ray_tracing_validation.reported) {
ret &= visitor->Visit("VK_NV_ray_tracing_validation",
&device->nv_ray_tracing_validation);
}
if (device->nv_representative_fragment_test.reported) {
ret &= visitor->Visit("VK_NV_representative_fragment_test",
&device->nv_representative_fragment_test);
}
if (device->nv_scissor_exclusive.reported) {
ret &= visitor->Visit("VK_NV_scissor_exclusive",
&device->nv_scissor_exclusive);
}
if (device->nv_shader_atomic_float16_vector.reported) {
ret &= visitor->Visit("VK_NV_shader_atomic_float16_vector",
&device->nv_shader_atomic_float16_vector);
}
if (device->nv_shader_image_footprint.reported) {
ret &= visitor->Visit("VK_NV_shader_image_footprint",
&device->nv_shader_image_footprint);
}
if (device->nv_shader_sm_builtins.reported) {
ret &= visitor->Visit("VK_NV_shader_sm_builtins",
&device->nv_shader_sm_builtins);
}
if (device->nv_shading_rate_image.reported) {
ret &= visitor->Visit("VK_NV_shading_rate_image",
&device->nv_shading_rate_image);
}
if (device->qcom_filter_cubic_clamp.reported) {
ret &= visitor->Visit("VK_QCOM_filter_cubic_clamp",
&device->qcom_filter_cubic_clamp);
}
if (device->qcom_filter_cubic_weights.reported) {
ret &= visitor->Visit("VK_QCOM_filter_cubic_weights",
&device->qcom_filter_cubic_weights);
}
if (device->qcom_fragment_density_map_offset.reported) {
ret &= visitor->Visit("VK_QCOM_fragment_density_map_offset",
&device->qcom_fragment_density_map_offset);
}
if (device->qcom_image_processing.reported) {
ret &= visitor->Visit("VK_QCOM_image_processing",
&device->qcom_image_processing);
}
if (device->qcom_image_processing2.reported) {
ret &= visitor->Visit("VK_QCOM_image_processing2",
&device->qcom_image_processing2);
}
if (device->qcom_multiview_per_view_render_areas.reported) {
ret &= visitor->Visit("VK_QCOM_multiview_per_view_render_areas",
&device->qcom_multiview_per_view_render_areas);
}
if (device->qcom_multiview_per_view_viewports.reported) {
ret &= visitor->Visit("VK_QCOM_multiview_per_view_viewports",
&device->qcom_multiview_per_view_viewports);
}
if (device->qcom_tile_memory_heap.reported) {
ret &= visitor->Visit("VK_QCOM_tile_memory_heap",
&device->qcom_tile_memory_heap);
}
if (device->qcom_tile_properties.reported) {
ret &= visitor->Visit("VK_QCOM_tile_properties",
&device->qcom_tile_properties);
}
if (device->qcom_tile_shading.reported) {
ret &=
visitor->Visit("VK_QCOM_tile_shading", &device->qcom_tile_shading);
}
if (device->qcom_ycbcr_degamma.reported) {
ret &= visitor->Visit("VK_QCOM_ycbcr_degamma",
&device->qcom_ycbcr_degamma);
}
if (device->sec_amigo_profiling.reported) {
ret &= visitor->Visit("VK_SEC_amigo_profiling",
&device->sec_amigo_profiling);
}
if (device->valve_descriptor_set_host_mapping.reported) {
ret &= visitor->Visit("VK_VALVE_descriptor_set_host_mapping",
&device->valve_descriptor_set_host_mapping);
}
if (device->valve_mutable_descriptor_type.reported) {
ret &= visitor->Visit("VK_VALVE_mutable_descriptor_type",
&device->valve_mutable_descriptor_type);
}
}
return ret;
}
template <typename Visitor>
inline bool Iterate(Visitor* visitor, VkJsonInstance* instance) {
bool ret = true;
switch (instance->api_version ^ VK_API_VERSION_PATCH(instance->api_version)) {
case VK_API_VERSION_1_4:
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_3:
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_2:
ret &= visitor->Visit("apiVersion", &instance->api_version);
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_1:
ret &= visitor->Visit("deviceGroups", &instance->device_groups);
FALLTHROUGH_INTENDED;
case VK_API_VERSION_1_0:
ret &= visitor->Visit("layers", &instance->layers) &&
visitor->Visit("extensions", &instance->extensions) &&
visitor->Visit("devices", &instance->devices);
}
return ret;
}
template <typename T>
using EnableForArithmetic =
typename std::enable_if<std::is_arithmetic<T>::value, void>::type;
template <typename T>
using EnableForStruct =
typename std::enable_if<std::is_class<T>::value, void>::type;
template <typename T>
using EnableForEnum =
typename std::enable_if<std::is_enum<T>::value, void>::type;
template <typename T, typename = EnableForStruct<T>, typename = void>
Json::Value ToJsonValue(const T& value);
template <typename T, typename = EnableForArithmetic<T>>
inline Json::Value ToJsonValue(const T& value) {
return Json::Value(
std::clamp(static_cast<double>(value), SAFE_DOUBLE_MIN, SAFE_DOUBLE_MAX));
}
inline Json::Value ToJsonValue(const uint64_t& value) {
char string[19] = {0}; // "0x" + 16 digits + terminal \0
snprintf(string, sizeof(string), "0x%016" PRIx64, value);
return Json::Value(string);
}
template <typename T,
typename = EnableForEnum<T>,
typename = void,
typename = void>
inline Json::Value ToJsonValue(const T& value) {
return Json::Value(static_cast<double>(value));
}
template <typename T>
inline Json::Value ArrayToJsonValue(uint32_t count, const T* values) {
Json::Value array(Json::arrayValue);
for (unsigned int i = 0; i < count; ++i)
array.append(ToJsonValue(values[i]));
return array;
}
template <typename T, size_t N>
inline Json::Value ToJsonValue(const T (&value)[N]) {
return ArrayToJsonValue(N, value);
}
template <size_t N>
inline Json::Value ToJsonValue(const char (&value)[N]) {
assert(strlen(value) < N);
return Json::Value(value);
}
template <typename T>
inline Json::Value ToJsonValue(const std::vector<T>& value) {
assert(value.size() <= std::numeric_limits<uint32_t>::max());
return ArrayToJsonValue(static_cast<uint32_t>(value.size()), value.data());
}
template <typename F, typename S>
inline Json::Value ToJsonValue(const std::pair<F, S>& value) {
Json::Value array(Json::arrayValue);
array.append(ToJsonValue(value.first));
array.append(ToJsonValue(value.second));
return array;
}
template <typename F, typename S>
inline Json::Value ToJsonValue(const std::map<F, S>& value) {
Json::Value array(Json::arrayValue);
for (auto& kv : value)
array.append(ToJsonValue(kv));
return array;
}
class JsonWriterVisitor {
public:
JsonWriterVisitor() : object_(Json::objectValue) {}
~JsonWriterVisitor() {}
template <typename T>
bool Visit(const char* key, const T* value) {
object_[key] = ToJsonValue(*value);
return true;
}
template <typename T, uint32_t N>
bool VisitArray(const char* key, uint32_t count, const T (*value)[N]) {
assert(count <= N);
object_[key] = ArrayToJsonValue(count, *value);
return true;
}
template <typename T>
bool VisitArray(const char* key, uint32_t count, const T* value) {
object_[key] = ArrayToJsonValue(count, *value);
return true;
}
Json::Value get_object() const { return object_; }
private:
Json::Value object_;
};
template <typename Visitor, typename T>
inline void VisitForWrite(Visitor* visitor, const T& t) {
Iterate(visitor, const_cast<T*>(&t));
}
template <typename T, typename /*= EnableForStruct<T>*/, typename /*= void*/>
Json::Value ToJsonValue(const T& value) {
JsonWriterVisitor visitor;
VisitForWrite(&visitor, value);
return visitor.get_object();
}
template <typename T, typename = EnableForStruct<T>>
bool AsValue(Json::Value* json_value, T* t);
inline bool AsValue(Json::Value* json_value, int32_t* value) {
if (json_value->type() != Json::realValue)
return false;
double d = json_value->asDouble();
if (!IsIntegral(d) ||
d < static_cast<double>(std::numeric_limits<int32_t>::min()) ||
d > static_cast<double>(std::numeric_limits<int32_t>::max()))
return false;
*value = static_cast<int32_t>(d);
return true;
}
inline bool AsValue(Json::Value* json_value, int64_t* value) {
if (json_value->type() != Json::realValue)
return false;
double d = json_value->asDouble();
if (!IsIntegral(d) ||
d < static_cast<double>(std::numeric_limits<int64_t>::min()) ||
d > static_cast<double>(std::numeric_limits<int64_t>::max()))
return false;
*value = static_cast<int64_t>(d);
return true;
}
inline bool AsValue(Json::Value* json_value, uint64_t* value) {
if (json_value->type() != Json::stringValue)
return false;
int result =
std::sscanf(json_value->asString().c_str(), "0x%016" PRIx64, value);
return result == 1;
}
inline bool AsValue(Json::Value* json_value, uint32_t* value) {
if (json_value->type() != Json::realValue)
return false;
double d = json_value->asDouble();
if (!IsIntegral(d) || d < 0.0 ||
d > static_cast<double>(std::numeric_limits<uint32_t>::max()))
return false;
*value = static_cast<uint32_t>(d);
return true;
}
inline bool AsValue(Json::Value* json_value, uint8_t* value) {
uint32_t value32 = 0;
AsValue(json_value, &value32);
if (value32 > std::numeric_limits<uint8_t>::max())
return false;
*value = static_cast<uint8_t>(value32);
return true;
}
inline bool AsValue(Json::Value* json_value, float* value) {
if (json_value->type() != Json::realValue)
return false;
*value = static_cast<float>(json_value->asDouble());
return true;
}
inline bool AsValue(Json::Value* json_value, VkImageLayout* t) {
uint32_t value = 0;
if (!AsValue(json_value, &value))
return false;
if (!EnumTraits<VkImageLayout>::exist(value))
return false;
*t = static_cast<VkImageLayout>(value);
return true;
}
template <typename T>
inline bool AsArray(Json::Value* json_value, uint32_t count, T* values) {
if (json_value->type() != Json::arrayValue || json_value->size() != count)
return false;
for (uint32_t i = 0; i < count; ++i) {
if (!AsValue(&(*json_value)[i], values + i))
return false;
}
return true;
}
template <typename T, size_t N>
inline bool AsValue(Json::Value* json_value, T (*value)[N]) {
return AsArray(json_value, N, *value);
}
template <size_t N>
inline bool AsValue(Json::Value* json_value, char (*value)[N]) {
if (json_value->type() != Json::stringValue)
return false;
size_t len = json_value->asString().length();
if (len >= N)
return false;
memcpy(*value, json_value->asString().c_str(), len);
memset(*value + len, 0, N - len);
return true;
}
template <typename T, typename = EnableForEnum<T>, typename = void>
inline bool AsValue(Json::Value* json_value, T* t) {
uint32_t value = 0;
if (!AsValue(json_value, &value))
return false;
if (!EnumTraits<T>::exist(value))
return false;
*t = static_cast<T>(value);
return true;
}
template <typename T>
inline bool AsValue(Json::Value* json_value, std::vector<T>* value) {
if (json_value->type() != Json::arrayValue)
return false;
int size = json_value->size();
value->resize(size);
return AsArray(json_value, size, value->data());
}
template <typename F, typename S>
inline bool AsValue(Json::Value* json_value, std::pair<F, S>* value) {
if (json_value->type() != Json::arrayValue || json_value->size() != 2)
return false;
return AsValue(&(*json_value)[0], &value->first) &&
AsValue(&(*json_value)[1], &value->second);
}
template <typename F, typename S>
inline bool AsValue(Json::Value* json_value, std::map<F, S>* value) {
if (json_value->type() != Json::arrayValue)
return false;
int size = json_value->size();
for (int i = 0; i < size; ++i) {
std::pair<F, S> elem;
if (!AsValue(&(*json_value)[i], &elem))
return false;
if (!value->insert(elem).second)
return false;
}
return true;
}
template <typename T>
bool ReadValue(Json::Value* object,
const char* key,
T* value,
std::string* errors) {
Json::Value json_value = (*object)[key];
if (!json_value) {
if (errors)
*errors = std::string(key) + " missing.";
return false;
}
if (AsValue(&json_value, value))
return true;
if (errors)
*errors = std::string("Wrong type for ") + std::string(key) + ".";
return false;
}
template <typename Visitor, typename T>
inline bool VisitForRead(Visitor* visitor, T* t) {
return Iterate(visitor, t);
}
class JsonReaderVisitor {
public:
JsonReaderVisitor(Json::Value* object, std::string* errors)
: object_(object), errors_(errors) {}
template <typename T>
bool Visit(const char* key, T* value) const {
return ReadValue(object_, key, value, errors_);
}
template <typename T, uint32_t N>
bool VisitArray(const char* key, uint32_t count, T (*value)[N]) {
if (count > N)
return false;
Json::Value json_value = (*object_)[key];
if (!json_value) {
if (errors_)
*errors_ = std::string(key) + " missing.";
return false;
}
if (AsArray(&json_value, count, *value))
return true;
if (errors_)
*errors_ = std::string("Wrong type for ") + std::string(key) + ".";
return false;
}
template <typename T>
bool VisitArray(const char* key, uint32_t count, T* value) {
Json::Value json_value = (*object_)[key];
if (!json_value) {
if (errors_)
*errors_ = std::string(key) + " missing.";
return false;
}
if (AsArray(&json_value, count, *value))
return true;
if (errors_)
*errors_ = std::string("Wrong type for ") + std::string(key) + ".";
return false;
}
private:
Json::Value* object_;
std::string* errors_;
};
template <typename T, typename /*= EnableForStruct<T>*/>
bool AsValue(Json::Value* json_value, T* t) {
if (json_value->type() != Json::objectValue)
return false;
JsonReaderVisitor visitor(json_value, nullptr);
return VisitForRead(&visitor, t);
}
template <typename T>
std::string VkTypeToJson(const T& t) {
JsonWriterVisitor visitor;
VisitForWrite(&visitor, t);
return visitor.get_object().toStyledString();
}
template <typename T>
bool VkTypeFromJson(const std::string& json, T* t, std::string* errors) {
*t = T();
Json::Value object(Json::objectValue);
Json::CharReaderBuilder builder;
builder["collectComments"] = false;
std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
if (!reader->parse(json.data(), json.data() + json.size(), &object, errors)) {
return false;
}
return AsValue(&object, t);
}
} // anonymous namespace
std::string VkJsonInstanceToJson(const VkJsonInstance& instance) {
return VkTypeToJson(instance);
}
bool VkJsonInstanceFromJson(const std::string& json,
VkJsonInstance* instance,
std::string* errors) {
return VkTypeFromJson(json, instance, errors);
}
std::string VkJsonDeviceToJson(const VkJsonDevice& device) {
return VkTypeToJson(device);
}
bool VkJsonDeviceFromJson(const std::string& json,
VkJsonDevice* device,
std::string* errors) {
return VkTypeFromJson(json, device, errors);
};
std::string VkJsonImageFormatPropertiesToJson(
const VkImageFormatProperties& properties) {
return VkTypeToJson(properties);
}
bool VkJsonImageFormatPropertiesFromJson(const std::string& json,
VkImageFormatProperties* properties,
std::string* errors) {
return VkTypeFromJson(json, properties, errors);
};