/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 */
template<> const char*	getTypeName<VkInstance>							(void) { return "VkInstance";						}
template<> const char*	getTypeName<VkPhysicalDevice>					(void) { return "VkPhysicalDevice";					}
template<> const char*	getTypeName<VkDevice>							(void) { return "VkDevice";							}
template<> const char*	getTypeName<VkQueue>							(void) { return "VkQueue";							}
template<> const char*	getTypeName<VkSemaphore>						(void) { return "VkSemaphore";						}
template<> const char*	getTypeName<VkCommandBuffer>					(void) { return "VkCommandBuffer";					}
template<> const char*	getTypeName<VkFence>							(void) { return "VkFence";							}
template<> const char*	getTypeName<VkDeviceMemory>						(void) { return "VkDeviceMemory";					}
template<> const char*	getTypeName<VkBuffer>							(void) { return "VkBuffer";							}
template<> const char*	getTypeName<VkImage>							(void) { return "VkImage";							}
template<> const char*	getTypeName<VkEvent>							(void) { return "VkEvent";							}
template<> const char*	getTypeName<VkQueryPool>						(void) { return "VkQueryPool";						}
template<> const char*	getTypeName<VkBufferView>						(void) { return "VkBufferView";						}
template<> const char*	getTypeName<VkImageView>						(void) { return "VkImageView";						}
template<> const char*	getTypeName<VkShaderModule>						(void) { return "VkShaderModule";					}
template<> const char*	getTypeName<VkPipelineCache>					(void) { return "VkPipelineCache";					}
template<> const char*	getTypeName<VkPipelineLayout>					(void) { return "VkPipelineLayout";					}
template<> const char*	getTypeName<VkRenderPass>						(void) { return "VkRenderPass";						}
template<> const char*	getTypeName<VkPipeline>							(void) { return "VkPipeline";						}
template<> const char*	getTypeName<VkDescriptorSetLayout>				(void) { return "VkDescriptorSetLayout";			}
template<> const char*	getTypeName<VkSampler>							(void) { return "VkSampler";						}
template<> const char*	getTypeName<VkDescriptorPool>					(void) { return "VkDescriptorPool";					}
template<> const char*	getTypeName<VkDescriptorSet>					(void) { return "VkDescriptorSet";					}
template<> const char*	getTypeName<VkFramebuffer>						(void) { return "VkFramebuffer";					}
template<> const char*	getTypeName<VkCommandPool>						(void) { return "VkCommandPool";					}
template<> const char*	getTypeName<VkSamplerYcbcrConversion>			(void) { return "VkSamplerYcbcrConversion";			}
template<> const char*	getTypeName<VkDescriptorUpdateTemplate>			(void) { return "VkDescriptorUpdateTemplate";		}
template<> const char*	getTypeName<VkSurfaceKHR>						(void) { return "VkSurfaceKHR";						}
template<> const char*	getTypeName<VkSwapchainKHR>						(void) { return "VkSwapchainKHR";					}
template<> const char*	getTypeName<VkDisplayKHR>						(void) { return "VkDisplayKHR";						}
template<> const char*	getTypeName<VkDisplayModeKHR>					(void) { return "VkDisplayModeKHR";					}
template<> const char*	getTypeName<VkDebugReportCallbackEXT>			(void) { return "VkDebugReportCallbackEXT";			}
template<> const char*	getTypeName<VkObjectTableNVX>					(void) { return "VkObjectTableNVX";					}
template<> const char*	getTypeName<VkIndirectCommandsLayoutNVX>		(void) { return "VkIndirectCommandsLayoutNVX";		}
template<> const char*	getTypeName<VkDebugUtilsMessengerEXT>			(void) { return "VkDebugUtilsMessengerEXT";			}
template<> const char*	getTypeName<VkValidationCacheEXT>				(void) { return "VkValidationCacheEXT";				}
template<> const char*	getTypeName<VkAccelerationStructureNV>			(void) { return "VkAccelerationStructureNV";		}
template<> const char*	getTypeName<VkPerformanceConfigurationINTEL>	(void) { return "VkPerformanceConfigurationINTEL";	}

namespace pt
{
std::ostream& operator<< (std::ostream& s, XlibDisplayPtr				v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, XlibWindow					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, XlibVisualID					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, XcbConnectionPtr				v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, XcbWindow					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, XcbVisualid					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, WaylandDisplayPtr			v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, WaylandSurfacePtr			v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, MirConnectionPtr				v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, MirSurfacePtr				v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, AndroidNativeWindowPtr		v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, Win32InstanceHandle			v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, Win32WindowHandle			v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, Win32Handle					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, Win32SecurityAttributesPtr	v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, AndroidHardwareBufferPtr		v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, Win32MonitorHandle			v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, Win32LPCWSTR					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, RROutput						v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, zx_handle_t					v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, GgpFrameToken				v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, GgpStreamDescriptor			v) { return s << tcu::toHex(v.internal); }
std::ostream& operator<< (std::ostream& s, CAMetalLayer					v) { return s << tcu::toHex(v.internal); }
}

const char* getPipelineCacheHeaderVersionName (VkPipelineCacheHeaderVersion value)
{
	switch (value)
	{
		case VK_PIPELINE_CACHE_HEADER_VERSION_ONE:		return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE";
		case VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM:	return "VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getResultName (VkResult value)
{
	switch (value)
	{
		case VK_SUCCESS:											return "VK_SUCCESS";
		case VK_NOT_READY:											return "VK_NOT_READY";
		case VK_TIMEOUT:											return "VK_TIMEOUT";
		case VK_EVENT_SET:											return "VK_EVENT_SET";
		case VK_EVENT_RESET:										return "VK_EVENT_RESET";
		case VK_INCOMPLETE:											return "VK_INCOMPLETE";
		case VK_ERROR_OUT_OF_HOST_MEMORY:							return "VK_ERROR_OUT_OF_HOST_MEMORY";
		case VK_ERROR_OUT_OF_DEVICE_MEMORY:							return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
		case VK_ERROR_INITIALIZATION_FAILED:						return "VK_ERROR_INITIALIZATION_FAILED";
		case VK_ERROR_DEVICE_LOST:									return "VK_ERROR_DEVICE_LOST";
		case VK_ERROR_MEMORY_MAP_FAILED:							return "VK_ERROR_MEMORY_MAP_FAILED";
		case VK_ERROR_LAYER_NOT_PRESENT:							return "VK_ERROR_LAYER_NOT_PRESENT";
		case VK_ERROR_EXTENSION_NOT_PRESENT:						return "VK_ERROR_EXTENSION_NOT_PRESENT";
		case VK_ERROR_FEATURE_NOT_PRESENT:							return "VK_ERROR_FEATURE_NOT_PRESENT";
		case VK_ERROR_INCOMPATIBLE_DRIVER:							return "VK_ERROR_INCOMPATIBLE_DRIVER";
		case VK_ERROR_TOO_MANY_OBJECTS:								return "VK_ERROR_TOO_MANY_OBJECTS";
		case VK_ERROR_FORMAT_NOT_SUPPORTED:							return "VK_ERROR_FORMAT_NOT_SUPPORTED";
		case VK_ERROR_FRAGMENTED_POOL:								return "VK_ERROR_FRAGMENTED_POOL";
		case VK_ERROR_UNKNOWN:										return "VK_ERROR_UNKNOWN";
		case VK_ERROR_OUT_OF_POOL_MEMORY:							return "VK_ERROR_OUT_OF_POOL_MEMORY";
		case VK_ERROR_INVALID_EXTERNAL_HANDLE:						return "VK_ERROR_INVALID_EXTERNAL_HANDLE";
		case VK_ERROR_FRAGMENTATION:								return "VK_ERROR_FRAGMENTATION";
		case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS:				return "VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS";
		case VK_ERROR_SURFACE_LOST_KHR:								return "VK_ERROR_SURFACE_LOST_KHR";
		case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:						return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
		case VK_SUBOPTIMAL_KHR:										return "VK_SUBOPTIMAL_KHR";
		case VK_ERROR_OUT_OF_DATE_KHR:								return "VK_ERROR_OUT_OF_DATE_KHR";
		case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR:						return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
		case VK_ERROR_VALIDATION_FAILED_EXT:						return "VK_ERROR_VALIDATION_FAILED_EXT";
		case VK_ERROR_INVALID_SHADER_NV:							return "VK_ERROR_INVALID_SHADER_NV";
		case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT:	return "VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT";
		case VK_ERROR_NOT_PERMITTED_EXT:							return "VK_ERROR_NOT_PERMITTED_EXT";
		case VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT:			return "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT";
		case VK_RESULT_MAX_ENUM:									return "VK_RESULT_MAX_ENUM";
		default:													return DE_NULL;
	}
}

const char* getStructureTypeName (VkStructureType value)
{
	switch (value)
	{
		case VK_STRUCTURE_TYPE_APPLICATION_INFO:												return "VK_STRUCTURE_TYPE_APPLICATION_INFO";
		case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO:											return "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:												return "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_SUBMIT_INFO:														return "VK_STRUCTURE_TYPE_SUBMIT_INFO";
		case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:											return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE:												return "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE";
		case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:												return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO";
		case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO:												return "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO:											return "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO:												return "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO";
		case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:											return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO";
		case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:												return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO";
		case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO:											return "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO";
		case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO:												return "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO:											return "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO";
		case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:										return "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO";
		case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO:												return "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO:								return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO:										return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:											return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET";
		case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:												return "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET";
		case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO:											return "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO";
		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:											return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO";
		case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:										return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO";
		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:									return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO";
		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO:										return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO";
		case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:											return "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO";
		case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:											return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER";
		case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:											return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER";
		case VK_STRUCTURE_TYPE_MEMORY_BARRIER:													return "VK_STRUCTURE_TYPE_MEMORY_BARRIER";
		case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES";
		case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO:											return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO";
		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO:											return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES";
		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:									return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS";
		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:										return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:								return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:										return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:									return "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO";
		case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:							return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO";
		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:								return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2:								return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2";
		case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2:								return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2";
		case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2:							return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2";
		case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:											return "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2";
		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2:								return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:										return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:									return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2";
		case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2:												return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2";
		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2:										return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2";
		case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2:										return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2";
		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2:								return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES";
		case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:					return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO";
		case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:			return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:								return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES";
		case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:											return "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES";
		case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2:												return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2";
		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO:							return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO";
		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:									return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO";
		case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:									return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO";
		case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:							return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES";
		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:				return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO";
		case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:								return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO";
		case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES:										return "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:									return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES";
		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:								return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO";
		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:										return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO";
		case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES:										return "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES";
		case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO";
		case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES:									return "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT:									return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES";
		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:									return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO";
		case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2:										return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2";
		case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2:											return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2";
		case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2:											return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2";
		case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2:											return "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2";
		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:										return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2";
		case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO:												return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO";
		case VK_STRUCTURE_TYPE_SUBPASS_END_INFO:												return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:					return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:			return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:			return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES";
		case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:						return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES";
		case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES";
		case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES";
		case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:								return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO";
		case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO:								return "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO";
		case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:								return "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES";
		case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:								return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT";
		case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:							return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES";
		case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO";
		case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:									return "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO";
		case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO:												return "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO";
		case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO:											return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES";
		case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO:										return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO";
		case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:						return "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO";
		case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:						return "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO";
		case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO:						return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO";
		case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR:										return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR:												return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:							return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR";
		case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR:										return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:									return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:										return "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR";
		case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:										return "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:			return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD";
		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT:									return "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:						return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:						return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:					return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX:										return "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX";
		case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:						return "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD";
		case VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP:						return "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV";
		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:							return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:									return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV";
		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:								return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:								return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV";
		case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:						return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV";
		case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:											return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT";
		case VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN:										return "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:									return "VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR:								return "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:										return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR:										return "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR:											return "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR";
		case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:						return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:							return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:							return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:										return "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR";
		case VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR:									return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR";
		case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR:										return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:		return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT:							return "VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT";
		case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:												return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR";
		case VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX:									return "VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX";
		case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX:						return "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX";
		case VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX:									return "VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX";
		case VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX:							return "VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX";
		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX:							return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX";
		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX:							return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX";
		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT:										return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT";
		case VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT:											return "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT:											return "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT";
		case VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT:											return "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT";
		case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:										return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:	return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX";
		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:					return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:		return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:			return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_HDR_METADATA_EXT:												return "VK_STRUCTURE_TYPE_HDR_METADATA_EXT";
		case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:							return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR";
		case VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR:									return "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR:										return "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR";
		case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR:											return "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:								return "VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR";
		case VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR:									return "VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR";
		case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR:											return "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR";
		case VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR:								return "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR:										return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR";
		case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR:											return "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR:										return "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR:										return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR:								return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR";
		case VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK:										return "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK";
		case VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK:									return "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK";
		case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT:									return "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT:											return "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT:							return "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:							return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID";
		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID:						return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID";
		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:				return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID";
		case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:						return "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID";
		case VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:					return "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID";
		case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:											return "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:					return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:			return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:										return "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT";
		case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:						return "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT:										return "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:					return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:							return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT";
		case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT:								return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT";
		case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT:						return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:		return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:		return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV:								return "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV:							return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_GEOMETRY_NV:														return "VK_STRUCTURE_TYPE_GEOMETRY_NV";
		case VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV:											return "VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV";
		case VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV:												return "VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV";
		case VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV:						return "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV";
		case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:					return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV";
		case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV:				return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV:							return "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV:									return "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:		return "VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT";
		case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:								return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT";
		case VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT:								return "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:						return "VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD";
		case VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT:									return "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD";
		case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:					return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:											return "VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP";
		case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:						return "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:		return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV";
		case VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV:												return "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV";
		case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:							return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL";
		case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL:									return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL";
		case VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL:							return "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL";
		case VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL:									return "VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL";
		case VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL:							return "VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL";
		case VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL:									return "VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL";
		case VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL:					return "VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:						return "VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD";
		case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:					return "VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD";
		case VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA:							return "VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA";
		case VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT:									return "VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:	return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:								return "VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:	return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:											return "VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV";
		case VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV:								return "VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV";
		case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV:						return "VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:							return "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT";
		case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:					return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT";
		case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:					return "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT";
		case VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR:												return "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR:								return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR:									return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR:								return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR:					return "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:	return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_MAX_ENUM:														return "VK_STRUCTURE_TYPE_MAX_ENUM";
		default:																				return DE_NULL;
	}
}

const char* getSystemAllocationScopeName (VkSystemAllocationScope value)
{
	switch (value)
	{
		case VK_SYSTEM_ALLOCATION_SCOPE_COMMAND:	return "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND";
		case VK_SYSTEM_ALLOCATION_SCOPE_OBJECT:		return "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT";
		case VK_SYSTEM_ALLOCATION_SCOPE_CACHE:		return "VK_SYSTEM_ALLOCATION_SCOPE_CACHE";
		case VK_SYSTEM_ALLOCATION_SCOPE_DEVICE:		return "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE";
		case VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE:	return "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE";
		case VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM:	return "VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM";
		default:									return DE_NULL;
	}
}

const char* getInternalAllocationTypeName (VkInternalAllocationType value)
{
	switch (value)
	{
		case VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE:	return "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE";
		case VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM:		return "VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getFormatName (VkFormat value)
{
	switch (value)
	{
		case VK_FORMAT_UNDEFINED:									return "VK_FORMAT_UNDEFINED";
		case VK_FORMAT_R4G4_UNORM_PACK8:							return "VK_FORMAT_R4G4_UNORM_PACK8";
		case VK_FORMAT_R4G4B4A4_UNORM_PACK16:						return "VK_FORMAT_R4G4B4A4_UNORM_PACK16";
		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:						return "VK_FORMAT_B4G4R4A4_UNORM_PACK16";
		case VK_FORMAT_R5G6B5_UNORM_PACK16:							return "VK_FORMAT_R5G6B5_UNORM_PACK16";
		case VK_FORMAT_B5G6R5_UNORM_PACK16:							return "VK_FORMAT_B5G6R5_UNORM_PACK16";
		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:						return "VK_FORMAT_R5G5B5A1_UNORM_PACK16";
		case VK_FORMAT_B5G5R5A1_UNORM_PACK16:						return "VK_FORMAT_B5G5R5A1_UNORM_PACK16";
		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:						return "VK_FORMAT_A1R5G5B5_UNORM_PACK16";
		case VK_FORMAT_R8_UNORM:									return "VK_FORMAT_R8_UNORM";
		case VK_FORMAT_R8_SNORM:									return "VK_FORMAT_R8_SNORM";
		case VK_FORMAT_R8_USCALED:									return "VK_FORMAT_R8_USCALED";
		case VK_FORMAT_R8_SSCALED:									return "VK_FORMAT_R8_SSCALED";
		case VK_FORMAT_R8_UINT:										return "VK_FORMAT_R8_UINT";
		case VK_FORMAT_R8_SINT:										return "VK_FORMAT_R8_SINT";
		case VK_FORMAT_R8_SRGB:										return "VK_FORMAT_R8_SRGB";
		case VK_FORMAT_R8G8_UNORM:									return "VK_FORMAT_R8G8_UNORM";
		case VK_FORMAT_R8G8_SNORM:									return "VK_FORMAT_R8G8_SNORM";
		case VK_FORMAT_R8G8_USCALED:								return "VK_FORMAT_R8G8_USCALED";
		case VK_FORMAT_R8G8_SSCALED:								return "VK_FORMAT_R8G8_SSCALED";
		case VK_FORMAT_R8G8_UINT:									return "VK_FORMAT_R8G8_UINT";
		case VK_FORMAT_R8G8_SINT:									return "VK_FORMAT_R8G8_SINT";
		case VK_FORMAT_R8G8_SRGB:									return "VK_FORMAT_R8G8_SRGB";
		case VK_FORMAT_R8G8B8_UNORM:								return "VK_FORMAT_R8G8B8_UNORM";
		case VK_FORMAT_R8G8B8_SNORM:								return "VK_FORMAT_R8G8B8_SNORM";
		case VK_FORMAT_R8G8B8_USCALED:								return "VK_FORMAT_R8G8B8_USCALED";
		case VK_FORMAT_R8G8B8_SSCALED:								return "VK_FORMAT_R8G8B8_SSCALED";
		case VK_FORMAT_R8G8B8_UINT:									return "VK_FORMAT_R8G8B8_UINT";
		case VK_FORMAT_R8G8B8_SINT:									return "VK_FORMAT_R8G8B8_SINT";
		case VK_FORMAT_R8G8B8_SRGB:									return "VK_FORMAT_R8G8B8_SRGB";
		case VK_FORMAT_B8G8R8_UNORM:								return "VK_FORMAT_B8G8R8_UNORM";
		case VK_FORMAT_B8G8R8_SNORM:								return "VK_FORMAT_B8G8R8_SNORM";
		case VK_FORMAT_B8G8R8_USCALED:								return "VK_FORMAT_B8G8R8_USCALED";
		case VK_FORMAT_B8G8R8_SSCALED:								return "VK_FORMAT_B8G8R8_SSCALED";
		case VK_FORMAT_B8G8R8_UINT:									return "VK_FORMAT_B8G8R8_UINT";
		case VK_FORMAT_B8G8R8_SINT:									return "VK_FORMAT_B8G8R8_SINT";
		case VK_FORMAT_B8G8R8_SRGB:									return "VK_FORMAT_B8G8R8_SRGB";
		case VK_FORMAT_R8G8B8A8_UNORM:								return "VK_FORMAT_R8G8B8A8_UNORM";
		case VK_FORMAT_R8G8B8A8_SNORM:								return "VK_FORMAT_R8G8B8A8_SNORM";
		case VK_FORMAT_R8G8B8A8_USCALED:							return "VK_FORMAT_R8G8B8A8_USCALED";
		case VK_FORMAT_R8G8B8A8_SSCALED:							return "VK_FORMAT_R8G8B8A8_SSCALED";
		case VK_FORMAT_R8G8B8A8_UINT:								return "VK_FORMAT_R8G8B8A8_UINT";
		case VK_FORMAT_R8G8B8A8_SINT:								return "VK_FORMAT_R8G8B8A8_SINT";
		case VK_FORMAT_R8G8B8A8_SRGB:								return "VK_FORMAT_R8G8B8A8_SRGB";
		case VK_FORMAT_B8G8R8A8_UNORM:								return "VK_FORMAT_B8G8R8A8_UNORM";
		case VK_FORMAT_B8G8R8A8_SNORM:								return "VK_FORMAT_B8G8R8A8_SNORM";
		case VK_FORMAT_B8G8R8A8_USCALED:							return "VK_FORMAT_B8G8R8A8_USCALED";
		case VK_FORMAT_B8G8R8A8_SSCALED:							return "VK_FORMAT_B8G8R8A8_SSCALED";
		case VK_FORMAT_B8G8R8A8_UINT:								return "VK_FORMAT_B8G8R8A8_UINT";
		case VK_FORMAT_B8G8R8A8_SINT:								return "VK_FORMAT_B8G8R8A8_SINT";
		case VK_FORMAT_B8G8R8A8_SRGB:								return "VK_FORMAT_B8G8R8A8_SRGB";
		case VK_FORMAT_A8B8G8R8_UNORM_PACK32:						return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
		case VK_FORMAT_A8B8G8R8_SNORM_PACK32:						return "VK_FORMAT_A8B8G8R8_SNORM_PACK32";
		case VK_FORMAT_A8B8G8R8_USCALED_PACK32:						return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
		case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:						return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32";
		case VK_FORMAT_A8B8G8R8_UINT_PACK32:						return "VK_FORMAT_A8B8G8R8_UINT_PACK32";
		case VK_FORMAT_A8B8G8R8_SINT_PACK32:						return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
		case VK_FORMAT_A8B8G8R8_SRGB_PACK32:						return "VK_FORMAT_A8B8G8R8_SRGB_PACK32";
		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:					return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
		case VK_FORMAT_A2R10G10B10_SNORM_PACK32:					return "VK_FORMAT_A2R10G10B10_SNORM_PACK32";
		case VK_FORMAT_A2R10G10B10_USCALED_PACK32:					return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
		case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:					return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32";
		case VK_FORMAT_A2R10G10B10_UINT_PACK32:						return "VK_FORMAT_A2R10G10B10_UINT_PACK32";
		case VK_FORMAT_A2R10G10B10_SINT_PACK32:						return "VK_FORMAT_A2R10G10B10_SINT_PACK32";
		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:					return "VK_FORMAT_A2B10G10R10_UNORM_PACK32";
		case VK_FORMAT_A2B10G10R10_SNORM_PACK32:					return "VK_FORMAT_A2B10G10R10_SNORM_PACK32";
		case VK_FORMAT_A2B10G10R10_USCALED_PACK32:					return "VK_FORMAT_A2B10G10R10_USCALED_PACK32";
		case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:					return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32";
		case VK_FORMAT_A2B10G10R10_UINT_PACK32:						return "VK_FORMAT_A2B10G10R10_UINT_PACK32";
		case VK_FORMAT_A2B10G10R10_SINT_PACK32:						return "VK_FORMAT_A2B10G10R10_SINT_PACK32";
		case VK_FORMAT_R16_UNORM:									return "VK_FORMAT_R16_UNORM";
		case VK_FORMAT_R16_SNORM:									return "VK_FORMAT_R16_SNORM";
		case VK_FORMAT_R16_USCALED:									return "VK_FORMAT_R16_USCALED";
		case VK_FORMAT_R16_SSCALED:									return "VK_FORMAT_R16_SSCALED";
		case VK_FORMAT_R16_UINT:									return "VK_FORMAT_R16_UINT";
		case VK_FORMAT_R16_SINT:									return "VK_FORMAT_R16_SINT";
		case VK_FORMAT_R16_SFLOAT:									return "VK_FORMAT_R16_SFLOAT";
		case VK_FORMAT_R16G16_UNORM:								return "VK_FORMAT_R16G16_UNORM";
		case VK_FORMAT_R16G16_SNORM:								return "VK_FORMAT_R16G16_SNORM";
		case VK_FORMAT_R16G16_USCALED:								return "VK_FORMAT_R16G16_USCALED";
		case VK_FORMAT_R16G16_SSCALED:								return "VK_FORMAT_R16G16_SSCALED";
		case VK_FORMAT_R16G16_UINT:									return "VK_FORMAT_R16G16_UINT";
		case VK_FORMAT_R16G16_SINT:									return "VK_FORMAT_R16G16_SINT";
		case VK_FORMAT_R16G16_SFLOAT:								return "VK_FORMAT_R16G16_SFLOAT";
		case VK_FORMAT_R16G16B16_UNORM:								return "VK_FORMAT_R16G16B16_UNORM";
		case VK_FORMAT_R16G16B16_SNORM:								return "VK_FORMAT_R16G16B16_SNORM";
		case VK_FORMAT_R16G16B16_USCALED:							return "VK_FORMAT_R16G16B16_USCALED";
		case VK_FORMAT_R16G16B16_SSCALED:							return "VK_FORMAT_R16G16B16_SSCALED";
		case VK_FORMAT_R16G16B16_UINT:								return "VK_FORMAT_R16G16B16_UINT";
		case VK_FORMAT_R16G16B16_SINT:								return "VK_FORMAT_R16G16B16_SINT";
		case VK_FORMAT_R16G16B16_SFLOAT:							return "VK_FORMAT_R16G16B16_SFLOAT";
		case VK_FORMAT_R16G16B16A16_UNORM:							return "VK_FORMAT_R16G16B16A16_UNORM";
		case VK_FORMAT_R16G16B16A16_SNORM:							return "VK_FORMAT_R16G16B16A16_SNORM";
		case VK_FORMAT_R16G16B16A16_USCALED:						return "VK_FORMAT_R16G16B16A16_USCALED";
		case VK_FORMAT_R16G16B16A16_SSCALED:						return "VK_FORMAT_R16G16B16A16_SSCALED";
		case VK_FORMAT_R16G16B16A16_UINT:							return "VK_FORMAT_R16G16B16A16_UINT";
		case VK_FORMAT_R16G16B16A16_SINT:							return "VK_FORMAT_R16G16B16A16_SINT";
		case VK_FORMAT_R16G16B16A16_SFLOAT:							return "VK_FORMAT_R16G16B16A16_SFLOAT";
		case VK_FORMAT_R32_UINT:									return "VK_FORMAT_R32_UINT";
		case VK_FORMAT_R32_SINT:									return "VK_FORMAT_R32_SINT";
		case VK_FORMAT_R32_SFLOAT:									return "VK_FORMAT_R32_SFLOAT";
		case VK_FORMAT_R32G32_UINT:									return "VK_FORMAT_R32G32_UINT";
		case VK_FORMAT_R32G32_SINT:									return "VK_FORMAT_R32G32_SINT";
		case VK_FORMAT_R32G32_SFLOAT:								return "VK_FORMAT_R32G32_SFLOAT";
		case VK_FORMAT_R32G32B32_UINT:								return "VK_FORMAT_R32G32B32_UINT";
		case VK_FORMAT_R32G32B32_SINT:								return "VK_FORMAT_R32G32B32_SINT";
		case VK_FORMAT_R32G32B32_SFLOAT:							return "VK_FORMAT_R32G32B32_SFLOAT";
		case VK_FORMAT_R32G32B32A32_UINT:							return "VK_FORMAT_R32G32B32A32_UINT";
		case VK_FORMAT_R32G32B32A32_SINT:							return "VK_FORMAT_R32G32B32A32_SINT";
		case VK_FORMAT_R32G32B32A32_SFLOAT:							return "VK_FORMAT_R32G32B32A32_SFLOAT";
		case VK_FORMAT_R64_UINT:									return "VK_FORMAT_R64_UINT";
		case VK_FORMAT_R64_SINT:									return "VK_FORMAT_R64_SINT";
		case VK_FORMAT_R64_SFLOAT:									return "VK_FORMAT_R64_SFLOAT";
		case VK_FORMAT_R64G64_UINT:									return "VK_FORMAT_R64G64_UINT";
		case VK_FORMAT_R64G64_SINT:									return "VK_FORMAT_R64G64_SINT";
		case VK_FORMAT_R64G64_SFLOAT:								return "VK_FORMAT_R64G64_SFLOAT";
		case VK_FORMAT_R64G64B64_UINT:								return "VK_FORMAT_R64G64B64_UINT";
		case VK_FORMAT_R64G64B64_SINT:								return "VK_FORMAT_R64G64B64_SINT";
		case VK_FORMAT_R64G64B64_SFLOAT:							return "VK_FORMAT_R64G64B64_SFLOAT";
		case VK_FORMAT_R64G64B64A64_UINT:							return "VK_FORMAT_R64G64B64A64_UINT";
		case VK_FORMAT_R64G64B64A64_SINT:							return "VK_FORMAT_R64G64B64A64_SINT";
		case VK_FORMAT_R64G64B64A64_SFLOAT:							return "VK_FORMAT_R64G64B64A64_SFLOAT";
		case VK_FORMAT_B10G11R11_UFLOAT_PACK32:						return "VK_FORMAT_B10G11R11_UFLOAT_PACK32";
		case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:						return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32";
		case VK_FORMAT_D16_UNORM:									return "VK_FORMAT_D16_UNORM";
		case VK_FORMAT_X8_D24_UNORM_PACK32:							return "VK_FORMAT_X8_D24_UNORM_PACK32";
		case VK_FORMAT_D32_SFLOAT:									return "VK_FORMAT_D32_SFLOAT";
		case VK_FORMAT_S8_UINT:										return "VK_FORMAT_S8_UINT";
		case VK_FORMAT_D16_UNORM_S8_UINT:							return "VK_FORMAT_D16_UNORM_S8_UINT";
		case VK_FORMAT_D24_UNORM_S8_UINT:							return "VK_FORMAT_D24_UNORM_S8_UINT";
		case VK_FORMAT_D32_SFLOAT_S8_UINT:							return "VK_FORMAT_D32_SFLOAT_S8_UINT";
		case VK_FORMAT_BC1_RGB_UNORM_BLOCK:							return "VK_FORMAT_BC1_RGB_UNORM_BLOCK";
		case VK_FORMAT_BC1_RGB_SRGB_BLOCK:							return "VK_FORMAT_BC1_RGB_SRGB_BLOCK";
		case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:						return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK";
		case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:							return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK";
		case VK_FORMAT_BC2_UNORM_BLOCK:								return "VK_FORMAT_BC2_UNORM_BLOCK";
		case VK_FORMAT_BC2_SRGB_BLOCK:								return "VK_FORMAT_BC2_SRGB_BLOCK";
		case VK_FORMAT_BC3_UNORM_BLOCK:								return "VK_FORMAT_BC3_UNORM_BLOCK";
		case VK_FORMAT_BC3_SRGB_BLOCK:								return "VK_FORMAT_BC3_SRGB_BLOCK";
		case VK_FORMAT_BC4_UNORM_BLOCK:								return "VK_FORMAT_BC4_UNORM_BLOCK";
		case VK_FORMAT_BC4_SNORM_BLOCK:								return "VK_FORMAT_BC4_SNORM_BLOCK";
		case VK_FORMAT_BC5_UNORM_BLOCK:								return "VK_FORMAT_BC5_UNORM_BLOCK";
		case VK_FORMAT_BC5_SNORM_BLOCK:								return "VK_FORMAT_BC5_SNORM_BLOCK";
		case VK_FORMAT_BC6H_UFLOAT_BLOCK:							return "VK_FORMAT_BC6H_UFLOAT_BLOCK";
		case VK_FORMAT_BC6H_SFLOAT_BLOCK:							return "VK_FORMAT_BC6H_SFLOAT_BLOCK";
		case VK_FORMAT_BC7_UNORM_BLOCK:								return "VK_FORMAT_BC7_UNORM_BLOCK";
		case VK_FORMAT_BC7_SRGB_BLOCK:								return "VK_FORMAT_BC7_SRGB_BLOCK";
		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK";
		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK";
		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK";
		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK";
		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK";
		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK";
		case VK_FORMAT_EAC_R11_UNORM_BLOCK:							return "VK_FORMAT_EAC_R11_UNORM_BLOCK";
		case VK_FORMAT_EAC_R11_SNORM_BLOCK:							return "VK_FORMAT_EAC_R11_SNORM_BLOCK";
		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:						return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK";
		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:						return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK";
		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:						return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:							return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:						return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:							return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK";
		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:						return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:						return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:						return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:						return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
		case VK_FORMAT_G8B8G8R8_422_UNORM:							return "VK_FORMAT_G8B8G8R8_422_UNORM";
		case VK_FORMAT_B8G8R8G8_422_UNORM:							return "VK_FORMAT_B8G8R8G8_422_UNORM";
		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM";
		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:					return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM";
		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM";
		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:					return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM";
		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM";
		case VK_FORMAT_R10X6_UNORM_PACK16:							return "VK_FORMAT_R10X6_UNORM_PACK16";
		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:					return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16";
		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:			return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16";
		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:		return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16";
		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:		return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16";
		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16";
		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16";
		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16";
		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16";
		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16";
		case VK_FORMAT_R12X4_UNORM_PACK16:							return "VK_FORMAT_R12X4_UNORM_PACK16";
		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:					return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16";
		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:			return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16";
		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:		return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16";
		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:		return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16";
		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16";
		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16";
		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16";
		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16";
		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16";
		case VK_FORMAT_G16B16G16R16_422_UNORM:						return "VK_FORMAT_G16B16G16R16_422_UNORM";
		case VK_FORMAT_B16G16R16G16_422_UNORM:						return "VK_FORMAT_B16G16R16G16_422_UNORM";
		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM";
		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:					return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM";
		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM";
		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:					return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM";
		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM";
		case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:					return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT";
		case VK_FORMAT_MAX_ENUM:									return "VK_FORMAT_MAX_ENUM";
		default:													return DE_NULL;
	}
}

const char* getImageTypeName (VkImageType value)
{
	switch (value)
	{
		case VK_IMAGE_TYPE_1D:			return "VK_IMAGE_TYPE_1D";
		case VK_IMAGE_TYPE_2D:			return "VK_IMAGE_TYPE_2D";
		case VK_IMAGE_TYPE_3D:			return "VK_IMAGE_TYPE_3D";
		case VK_IMAGE_TYPE_MAX_ENUM:	return "VK_IMAGE_TYPE_MAX_ENUM";
		default:						return DE_NULL;
	}
}

const char* getImageTilingName (VkImageTiling value)
{
	switch (value)
	{
		case VK_IMAGE_TILING_OPTIMAL:					return "VK_IMAGE_TILING_OPTIMAL";
		case VK_IMAGE_TILING_LINEAR:					return "VK_IMAGE_TILING_LINEAR";
		case VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT:	return "VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT";
		case VK_IMAGE_TILING_MAX_ENUM:					return "VK_IMAGE_TILING_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getPhysicalDeviceTypeName (VkPhysicalDeviceType value)
{
	switch (value)
	{
		case VK_PHYSICAL_DEVICE_TYPE_OTHER:				return "VK_PHYSICAL_DEVICE_TYPE_OTHER";
		case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:	return "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU";
		case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:		return "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU";
		case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:		return "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU";
		case VK_PHYSICAL_DEVICE_TYPE_CPU:				return "VK_PHYSICAL_DEVICE_TYPE_CPU";
		case VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM:			return "VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getQueryTypeName (VkQueryType value)
{
	switch (value)
	{
		case VK_QUERY_TYPE_OCCLUSION:									return "VK_QUERY_TYPE_OCCLUSION";
		case VK_QUERY_TYPE_PIPELINE_STATISTICS:							return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
		case VK_QUERY_TYPE_TIMESTAMP:									return "VK_QUERY_TYPE_TIMESTAMP";
		case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:				return "VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT";
		case VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR:						return "VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR";
		case VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV:	return "VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV";
		case VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL:						return "VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL";
		case VK_QUERY_TYPE_MAX_ENUM:									return "VK_QUERY_TYPE_MAX_ENUM";
		default:														return DE_NULL;
	}
}

const char* getSharingModeName (VkSharingMode value)
{
	switch (value)
	{
		case VK_SHARING_MODE_EXCLUSIVE:		return "VK_SHARING_MODE_EXCLUSIVE";
		case VK_SHARING_MODE_CONCURRENT:	return "VK_SHARING_MODE_CONCURRENT";
		case VK_SHARING_MODE_MAX_ENUM:		return "VK_SHARING_MODE_MAX_ENUM";
		default:							return DE_NULL;
	}
}

const char* getImageLayoutName (VkImageLayout value)
{
	switch (value)
	{
		case VK_IMAGE_LAYOUT_UNDEFINED:										return "VK_IMAGE_LAYOUT_UNDEFINED";
		case VK_IMAGE_LAYOUT_GENERAL:										return "VK_IMAGE_LAYOUT_GENERAL";
		case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:						return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:				return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:				return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:						return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:							return "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL";
		case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:							return "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL";
		case VK_IMAGE_LAYOUT_PREINITIALIZED:								return "VK_IMAGE_LAYOUT_PREINITIALIZED";
		case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL:						return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL:						return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL:					return "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL:						return "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:								return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
		case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:							return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
		case VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV:						return "VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV";
		case VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT:				return "VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT";
		case VK_IMAGE_LAYOUT_MAX_ENUM:										return "VK_IMAGE_LAYOUT_MAX_ENUM";
		default:															return DE_NULL;
	}
}

const char* getImageViewTypeName (VkImageViewType value)
{
	switch (value)
	{
		case VK_IMAGE_VIEW_TYPE_1D:			return "VK_IMAGE_VIEW_TYPE_1D";
		case VK_IMAGE_VIEW_TYPE_2D:			return "VK_IMAGE_VIEW_TYPE_2D";
		case VK_IMAGE_VIEW_TYPE_3D:			return "VK_IMAGE_VIEW_TYPE_3D";
		case VK_IMAGE_VIEW_TYPE_CUBE:		return "VK_IMAGE_VIEW_TYPE_CUBE";
		case VK_IMAGE_VIEW_TYPE_1D_ARRAY:	return "VK_IMAGE_VIEW_TYPE_1D_ARRAY";
		case VK_IMAGE_VIEW_TYPE_2D_ARRAY:	return "VK_IMAGE_VIEW_TYPE_2D_ARRAY";
		case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:	return "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY";
		case VK_IMAGE_VIEW_TYPE_MAX_ENUM:	return "VK_IMAGE_VIEW_TYPE_MAX_ENUM";
		default:							return DE_NULL;
	}
}

const char* getComponentSwizzleName (VkComponentSwizzle value)
{
	switch (value)
	{
		case VK_COMPONENT_SWIZZLE_IDENTITY:	return "VK_COMPONENT_SWIZZLE_IDENTITY";
		case VK_COMPONENT_SWIZZLE_ZERO:		return "VK_COMPONENT_SWIZZLE_ZERO";
		case VK_COMPONENT_SWIZZLE_ONE:		return "VK_COMPONENT_SWIZZLE_ONE";
		case VK_COMPONENT_SWIZZLE_R:		return "VK_COMPONENT_SWIZZLE_R";
		case VK_COMPONENT_SWIZZLE_G:		return "VK_COMPONENT_SWIZZLE_G";
		case VK_COMPONENT_SWIZZLE_B:		return "VK_COMPONENT_SWIZZLE_B";
		case VK_COMPONENT_SWIZZLE_A:		return "VK_COMPONENT_SWIZZLE_A";
		case VK_COMPONENT_SWIZZLE_MAX_ENUM:	return "VK_COMPONENT_SWIZZLE_MAX_ENUM";
		default:							return DE_NULL;
	}
}

const char* getVertexInputRateName (VkVertexInputRate value)
{
	switch (value)
	{
		case VK_VERTEX_INPUT_RATE_VERTEX:	return "VK_VERTEX_INPUT_RATE_VERTEX";
		case VK_VERTEX_INPUT_RATE_INSTANCE:	return "VK_VERTEX_INPUT_RATE_INSTANCE";
		case VK_VERTEX_INPUT_RATE_MAX_ENUM:	return "VK_VERTEX_INPUT_RATE_MAX_ENUM";
		default:							return DE_NULL;
	}
}

const char* getPrimitiveTopologyName (VkPrimitiveTopology value)
{
	switch (value)
	{
		case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:						return "VK_PRIMITIVE_TOPOLOGY_POINT_LIST";
		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:						return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST";
		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:						return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP";
		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST";
		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP";
		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN";
		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:		return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY";
		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:		return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY";
		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:	return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY";
		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:	return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY";
		case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST:						return "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST";
		case VK_PRIMITIVE_TOPOLOGY_MAX_ENUM:						return "VK_PRIMITIVE_TOPOLOGY_MAX_ENUM";
		default:													return DE_NULL;
	}
}

const char* getPolygonModeName (VkPolygonMode value)
{
	switch (value)
	{
		case VK_POLYGON_MODE_FILL:				return "VK_POLYGON_MODE_FILL";
		case VK_POLYGON_MODE_LINE:				return "VK_POLYGON_MODE_LINE";
		case VK_POLYGON_MODE_POINT:				return "VK_POLYGON_MODE_POINT";
		case VK_POLYGON_MODE_FILL_RECTANGLE_NV:	return "VK_POLYGON_MODE_FILL_RECTANGLE_NV";
		case VK_POLYGON_MODE_MAX_ENUM:			return "VK_POLYGON_MODE_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getFrontFaceName (VkFrontFace value)
{
	switch (value)
	{
		case VK_FRONT_FACE_COUNTER_CLOCKWISE:	return "VK_FRONT_FACE_COUNTER_CLOCKWISE";
		case VK_FRONT_FACE_CLOCKWISE:			return "VK_FRONT_FACE_CLOCKWISE";
		case VK_FRONT_FACE_MAX_ENUM:			return "VK_FRONT_FACE_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getCompareOpName (VkCompareOp value)
{
	switch (value)
	{
		case VK_COMPARE_OP_NEVER:				return "VK_COMPARE_OP_NEVER";
		case VK_COMPARE_OP_LESS:				return "VK_COMPARE_OP_LESS";
		case VK_COMPARE_OP_EQUAL:				return "VK_COMPARE_OP_EQUAL";
		case VK_COMPARE_OP_LESS_OR_EQUAL:		return "VK_COMPARE_OP_LESS_OR_EQUAL";
		case VK_COMPARE_OP_GREATER:				return "VK_COMPARE_OP_GREATER";
		case VK_COMPARE_OP_NOT_EQUAL:			return "VK_COMPARE_OP_NOT_EQUAL";
		case VK_COMPARE_OP_GREATER_OR_EQUAL:	return "VK_COMPARE_OP_GREATER_OR_EQUAL";
		case VK_COMPARE_OP_ALWAYS:				return "VK_COMPARE_OP_ALWAYS";
		case VK_COMPARE_OP_MAX_ENUM:			return "VK_COMPARE_OP_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getStencilOpName (VkStencilOp value)
{
	switch (value)
	{
		case VK_STENCIL_OP_KEEP:				return "VK_STENCIL_OP_KEEP";
		case VK_STENCIL_OP_ZERO:				return "VK_STENCIL_OP_ZERO";
		case VK_STENCIL_OP_REPLACE:				return "VK_STENCIL_OP_REPLACE";
		case VK_STENCIL_OP_INCREMENT_AND_CLAMP:	return "VK_STENCIL_OP_INCREMENT_AND_CLAMP";
		case VK_STENCIL_OP_DECREMENT_AND_CLAMP:	return "VK_STENCIL_OP_DECREMENT_AND_CLAMP";
		case VK_STENCIL_OP_INVERT:				return "VK_STENCIL_OP_INVERT";
		case VK_STENCIL_OP_INCREMENT_AND_WRAP:	return "VK_STENCIL_OP_INCREMENT_AND_WRAP";
		case VK_STENCIL_OP_DECREMENT_AND_WRAP:	return "VK_STENCIL_OP_DECREMENT_AND_WRAP";
		case VK_STENCIL_OP_MAX_ENUM:			return "VK_STENCIL_OP_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getLogicOpName (VkLogicOp value)
{
	switch (value)
	{
		case VK_LOGIC_OP_CLEAR:			return "VK_LOGIC_OP_CLEAR";
		case VK_LOGIC_OP_AND:			return "VK_LOGIC_OP_AND";
		case VK_LOGIC_OP_AND_REVERSE:	return "VK_LOGIC_OP_AND_REVERSE";
		case VK_LOGIC_OP_COPY:			return "VK_LOGIC_OP_COPY";
		case VK_LOGIC_OP_AND_INVERTED:	return "VK_LOGIC_OP_AND_INVERTED";
		case VK_LOGIC_OP_NO_OP:			return "VK_LOGIC_OP_NO_OP";
		case VK_LOGIC_OP_XOR:			return "VK_LOGIC_OP_XOR";
		case VK_LOGIC_OP_OR:			return "VK_LOGIC_OP_OR";
		case VK_LOGIC_OP_NOR:			return "VK_LOGIC_OP_NOR";
		case VK_LOGIC_OP_EQUIVALENT:	return "VK_LOGIC_OP_EQUIVALENT";
		case VK_LOGIC_OP_INVERT:		return "VK_LOGIC_OP_INVERT";
		case VK_LOGIC_OP_OR_REVERSE:	return "VK_LOGIC_OP_OR_REVERSE";
		case VK_LOGIC_OP_COPY_INVERTED:	return "VK_LOGIC_OP_COPY_INVERTED";
		case VK_LOGIC_OP_OR_INVERTED:	return "VK_LOGIC_OP_OR_INVERTED";
		case VK_LOGIC_OP_NAND:			return "VK_LOGIC_OP_NAND";
		case VK_LOGIC_OP_SET:			return "VK_LOGIC_OP_SET";
		case VK_LOGIC_OP_MAX_ENUM:		return "VK_LOGIC_OP_MAX_ENUM";
		default:						return DE_NULL;
	}
}

const char* getBlendFactorName (VkBlendFactor value)
{
	switch (value)
	{
		case VK_BLEND_FACTOR_ZERO:						return "VK_BLEND_FACTOR_ZERO";
		case VK_BLEND_FACTOR_ONE:						return "VK_BLEND_FACTOR_ONE";
		case VK_BLEND_FACTOR_SRC_COLOR:					return "VK_BLEND_FACTOR_SRC_COLOR";
		case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR";
		case VK_BLEND_FACTOR_DST_COLOR:					return "VK_BLEND_FACTOR_DST_COLOR";
		case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR";
		case VK_BLEND_FACTOR_SRC_ALPHA:					return "VK_BLEND_FACTOR_SRC_ALPHA";
		case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA";
		case VK_BLEND_FACTOR_DST_ALPHA:					return "VK_BLEND_FACTOR_DST_ALPHA";
		case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA";
		case VK_BLEND_FACTOR_CONSTANT_COLOR:			return "VK_BLEND_FACTOR_CONSTANT_COLOR";
		case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR:	return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR";
		case VK_BLEND_FACTOR_CONSTANT_ALPHA:			return "VK_BLEND_FACTOR_CONSTANT_ALPHA";
		case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA:	return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA";
		case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE:		return "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE";
		case VK_BLEND_FACTOR_SRC1_COLOR:				return "VK_BLEND_FACTOR_SRC1_COLOR";
		case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR";
		case VK_BLEND_FACTOR_SRC1_ALPHA:				return "VK_BLEND_FACTOR_SRC1_ALPHA";
		case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA";
		case VK_BLEND_FACTOR_MAX_ENUM:					return "VK_BLEND_FACTOR_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getBlendOpName (VkBlendOp value)
{
	switch (value)
	{
		case VK_BLEND_OP_ADD:						return "VK_BLEND_OP_ADD";
		case VK_BLEND_OP_SUBTRACT:					return "VK_BLEND_OP_SUBTRACT";
		case VK_BLEND_OP_REVERSE_SUBTRACT:			return "VK_BLEND_OP_REVERSE_SUBTRACT";
		case VK_BLEND_OP_MIN:						return "VK_BLEND_OP_MIN";
		case VK_BLEND_OP_MAX:						return "VK_BLEND_OP_MAX";
		case VK_BLEND_OP_ZERO_EXT:					return "VK_BLEND_OP_ZERO_EXT";
		case VK_BLEND_OP_SRC_EXT:					return "VK_BLEND_OP_SRC_EXT";
		case VK_BLEND_OP_DST_EXT:					return "VK_BLEND_OP_DST_EXT";
		case VK_BLEND_OP_SRC_OVER_EXT:				return "VK_BLEND_OP_SRC_OVER_EXT";
		case VK_BLEND_OP_DST_OVER_EXT:				return "VK_BLEND_OP_DST_OVER_EXT";
		case VK_BLEND_OP_SRC_IN_EXT:				return "VK_BLEND_OP_SRC_IN_EXT";
		case VK_BLEND_OP_DST_IN_EXT:				return "VK_BLEND_OP_DST_IN_EXT";
		case VK_BLEND_OP_SRC_OUT_EXT:				return "VK_BLEND_OP_SRC_OUT_EXT";
		case VK_BLEND_OP_DST_OUT_EXT:				return "VK_BLEND_OP_DST_OUT_EXT";
		case VK_BLEND_OP_SRC_ATOP_EXT:				return "VK_BLEND_OP_SRC_ATOP_EXT";
		case VK_BLEND_OP_DST_ATOP_EXT:				return "VK_BLEND_OP_DST_ATOP_EXT";
		case VK_BLEND_OP_XOR_EXT:					return "VK_BLEND_OP_XOR_EXT";
		case VK_BLEND_OP_MULTIPLY_EXT:				return "VK_BLEND_OP_MULTIPLY_EXT";
		case VK_BLEND_OP_SCREEN_EXT:				return "VK_BLEND_OP_SCREEN_EXT";
		case VK_BLEND_OP_OVERLAY_EXT:				return "VK_BLEND_OP_OVERLAY_EXT";
		case VK_BLEND_OP_DARKEN_EXT:				return "VK_BLEND_OP_DARKEN_EXT";
		case VK_BLEND_OP_LIGHTEN_EXT:				return "VK_BLEND_OP_LIGHTEN_EXT";
		case VK_BLEND_OP_COLORDODGE_EXT:			return "VK_BLEND_OP_COLORDODGE_EXT";
		case VK_BLEND_OP_COLORBURN_EXT:				return "VK_BLEND_OP_COLORBURN_EXT";
		case VK_BLEND_OP_HARDLIGHT_EXT:				return "VK_BLEND_OP_HARDLIGHT_EXT";
		case VK_BLEND_OP_SOFTLIGHT_EXT:				return "VK_BLEND_OP_SOFTLIGHT_EXT";
		case VK_BLEND_OP_DIFFERENCE_EXT:			return "VK_BLEND_OP_DIFFERENCE_EXT";
		case VK_BLEND_OP_EXCLUSION_EXT:				return "VK_BLEND_OP_EXCLUSION_EXT";
		case VK_BLEND_OP_INVERT_EXT:				return "VK_BLEND_OP_INVERT_EXT";
		case VK_BLEND_OP_INVERT_RGB_EXT:			return "VK_BLEND_OP_INVERT_RGB_EXT";
		case VK_BLEND_OP_LINEARDODGE_EXT:			return "VK_BLEND_OP_LINEARDODGE_EXT";
		case VK_BLEND_OP_LINEARBURN_EXT:			return "VK_BLEND_OP_LINEARBURN_EXT";
		case VK_BLEND_OP_VIVIDLIGHT_EXT:			return "VK_BLEND_OP_VIVIDLIGHT_EXT";
		case VK_BLEND_OP_LINEARLIGHT_EXT:			return "VK_BLEND_OP_LINEARLIGHT_EXT";
		case VK_BLEND_OP_PINLIGHT_EXT:				return "VK_BLEND_OP_PINLIGHT_EXT";
		case VK_BLEND_OP_HARDMIX_EXT:				return "VK_BLEND_OP_HARDMIX_EXT";
		case VK_BLEND_OP_HSL_HUE_EXT:				return "VK_BLEND_OP_HSL_HUE_EXT";
		case VK_BLEND_OP_HSL_SATURATION_EXT:		return "VK_BLEND_OP_HSL_SATURATION_EXT";
		case VK_BLEND_OP_HSL_COLOR_EXT:				return "VK_BLEND_OP_HSL_COLOR_EXT";
		case VK_BLEND_OP_HSL_LUMINOSITY_EXT:		return "VK_BLEND_OP_HSL_LUMINOSITY_EXT";
		case VK_BLEND_OP_PLUS_EXT:					return "VK_BLEND_OP_PLUS_EXT";
		case VK_BLEND_OP_PLUS_CLAMPED_EXT:			return "VK_BLEND_OP_PLUS_CLAMPED_EXT";
		case VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT:	return "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT";
		case VK_BLEND_OP_PLUS_DARKER_EXT:			return "VK_BLEND_OP_PLUS_DARKER_EXT";
		case VK_BLEND_OP_MINUS_EXT:					return "VK_BLEND_OP_MINUS_EXT";
		case VK_BLEND_OP_MINUS_CLAMPED_EXT:			return "VK_BLEND_OP_MINUS_CLAMPED_EXT";
		case VK_BLEND_OP_CONTRAST_EXT:				return "VK_BLEND_OP_CONTRAST_EXT";
		case VK_BLEND_OP_INVERT_OVG_EXT:			return "VK_BLEND_OP_INVERT_OVG_EXT";
		case VK_BLEND_OP_RED_EXT:					return "VK_BLEND_OP_RED_EXT";
		case VK_BLEND_OP_GREEN_EXT:					return "VK_BLEND_OP_GREEN_EXT";
		case VK_BLEND_OP_BLUE_EXT:					return "VK_BLEND_OP_BLUE_EXT";
		case VK_BLEND_OP_MAX_ENUM:					return "VK_BLEND_OP_MAX_ENUM";
		default:									return DE_NULL;
	}
}

const char* getDynamicStateName (VkDynamicState value)
{
	switch (value)
	{
		case VK_DYNAMIC_STATE_VIEWPORT:							return "VK_DYNAMIC_STATE_VIEWPORT";
		case VK_DYNAMIC_STATE_SCISSOR:							return "VK_DYNAMIC_STATE_SCISSOR";
		case VK_DYNAMIC_STATE_LINE_WIDTH:						return "VK_DYNAMIC_STATE_LINE_WIDTH";
		case VK_DYNAMIC_STATE_DEPTH_BIAS:						return "VK_DYNAMIC_STATE_DEPTH_BIAS";
		case VK_DYNAMIC_STATE_BLEND_CONSTANTS:					return "VK_DYNAMIC_STATE_BLEND_CONSTANTS";
		case VK_DYNAMIC_STATE_DEPTH_BOUNDS:						return "VK_DYNAMIC_STATE_DEPTH_BOUNDS";
		case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:				return "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK";
		case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:				return "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK";
		case VK_DYNAMIC_STATE_STENCIL_REFERENCE:				return "VK_DYNAMIC_STATE_STENCIL_REFERENCE";
		case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV:			return "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV";
		case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT:			return "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT";
		case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:				return "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT";
		case VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV:	return "VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV";
		case VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV:	return "VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV";
		case VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV:				return "VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV";
		case VK_DYNAMIC_STATE_LINE_STIPPLE_EXT:					return "VK_DYNAMIC_STATE_LINE_STIPPLE_EXT";
		case VK_DYNAMIC_STATE_MAX_ENUM:							return "VK_DYNAMIC_STATE_MAX_ENUM";
		default:												return DE_NULL;
	}
}

const char* getFilterName (VkFilter value)
{
	switch (value)
	{
		case VK_FILTER_NEAREST:		return "VK_FILTER_NEAREST";
		case VK_FILTER_LINEAR:		return "VK_FILTER_LINEAR";
		case VK_FILTER_CUBIC_IMG:	return "VK_FILTER_CUBIC_IMG";
		case VK_FILTER_MAX_ENUM:	return "VK_FILTER_MAX_ENUM";
		default:					return DE_NULL;
	}
}

const char* getSamplerMipmapModeName (VkSamplerMipmapMode value)
{
	switch (value)
	{
		case VK_SAMPLER_MIPMAP_MODE_NEAREST:	return "VK_SAMPLER_MIPMAP_MODE_NEAREST";
		case VK_SAMPLER_MIPMAP_MODE_LINEAR:		return "VK_SAMPLER_MIPMAP_MODE_LINEAR";
		case VK_SAMPLER_MIPMAP_MODE_MAX_ENUM:	return "VK_SAMPLER_MIPMAP_MODE_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getSamplerAddressModeName (VkSamplerAddressMode value)
{
	switch (value)
	{
		case VK_SAMPLER_ADDRESS_MODE_REPEAT:				return "VK_SAMPLER_ADDRESS_MODE_REPEAT";
		case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:		return "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT";
		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:			return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE";
		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:		return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER";
		case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:	return "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE";
		case VK_SAMPLER_ADDRESS_MODE_MAX_ENUM:				return "VK_SAMPLER_ADDRESS_MODE_MAX_ENUM";
		default:											return DE_NULL;
	}
}

const char* getBorderColorName (VkBorderColor value)
{
	switch (value)
	{
		case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:	return "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK";
		case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:		return "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK";
		case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:		return "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK";
		case VK_BORDER_COLOR_INT_OPAQUE_BLACK:			return "VK_BORDER_COLOR_INT_OPAQUE_BLACK";
		case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:		return "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE";
		case VK_BORDER_COLOR_INT_OPAQUE_WHITE:			return "VK_BORDER_COLOR_INT_OPAQUE_WHITE";
		case VK_BORDER_COLOR_MAX_ENUM:					return "VK_BORDER_COLOR_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getDescriptorTypeName (VkDescriptorType value)
{
	switch (value)
	{
		case VK_DESCRIPTOR_TYPE_SAMPLER:					return "VK_DESCRIPTOR_TYPE_SAMPLER";
		case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:		return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER";
		case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:				return "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE";
		case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:				return "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE";
		case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:		return "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER";
		case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:		return "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER";
		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:				return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER";
		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:				return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER";
		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:		return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC";
		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:		return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC";
		case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:			return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT";
		case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT:	return "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT";
		case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV:	return "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV";
		case VK_DESCRIPTOR_TYPE_MAX_ENUM:					return "VK_DESCRIPTOR_TYPE_MAX_ENUM";
		default:											return DE_NULL;
	}
}

const char* getAttachmentLoadOpName (VkAttachmentLoadOp value)
{
	switch (value)
	{
		case VK_ATTACHMENT_LOAD_OP_LOAD:		return "VK_ATTACHMENT_LOAD_OP_LOAD";
		case VK_ATTACHMENT_LOAD_OP_CLEAR:		return "VK_ATTACHMENT_LOAD_OP_CLEAR";
		case VK_ATTACHMENT_LOAD_OP_DONT_CARE:	return "VK_ATTACHMENT_LOAD_OP_DONT_CARE";
		case VK_ATTACHMENT_LOAD_OP_MAX_ENUM:	return "VK_ATTACHMENT_LOAD_OP_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getAttachmentStoreOpName (VkAttachmentStoreOp value)
{
	switch (value)
	{
		case VK_ATTACHMENT_STORE_OP_STORE:		return "VK_ATTACHMENT_STORE_OP_STORE";
		case VK_ATTACHMENT_STORE_OP_DONT_CARE:	return "VK_ATTACHMENT_STORE_OP_DONT_CARE";
		case VK_ATTACHMENT_STORE_OP_MAX_ENUM:	return "VK_ATTACHMENT_STORE_OP_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getPipelineBindPointName (VkPipelineBindPoint value)
{
	switch (value)
	{
		case VK_PIPELINE_BIND_POINT_GRAPHICS:		return "VK_PIPELINE_BIND_POINT_GRAPHICS";
		case VK_PIPELINE_BIND_POINT_COMPUTE:		return "VK_PIPELINE_BIND_POINT_COMPUTE";
		case VK_PIPELINE_BIND_POINT_RAY_TRACING_NV:	return "VK_PIPELINE_BIND_POINT_RAY_TRACING_NV";
		case VK_PIPELINE_BIND_POINT_MAX_ENUM:		return "VK_PIPELINE_BIND_POINT_MAX_ENUM";
		default:									return DE_NULL;
	}
}

const char* getCommandBufferLevelName (VkCommandBufferLevel value)
{
	switch (value)
	{
		case VK_COMMAND_BUFFER_LEVEL_PRIMARY:	return "VK_COMMAND_BUFFER_LEVEL_PRIMARY";
		case VK_COMMAND_BUFFER_LEVEL_SECONDARY:	return "VK_COMMAND_BUFFER_LEVEL_SECONDARY";
		case VK_COMMAND_BUFFER_LEVEL_MAX_ENUM:	return "VK_COMMAND_BUFFER_LEVEL_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getIndexTypeName (VkIndexType value)
{
	switch (value)
	{
		case VK_INDEX_TYPE_UINT16:		return "VK_INDEX_TYPE_UINT16";
		case VK_INDEX_TYPE_UINT32:		return "VK_INDEX_TYPE_UINT32";
		case VK_INDEX_TYPE_NONE_NV:		return "VK_INDEX_TYPE_NONE_NV";
		case VK_INDEX_TYPE_UINT8_EXT:	return "VK_INDEX_TYPE_UINT8_EXT";
		case VK_INDEX_TYPE_MAX_ENUM:	return "VK_INDEX_TYPE_MAX_ENUM";
		default:						return DE_NULL;
	}
}

const char* getSubpassContentsName (VkSubpassContents value)
{
	switch (value)
	{
		case VK_SUBPASS_CONTENTS_INLINE:					return "VK_SUBPASS_CONTENTS_INLINE";
		case VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS:	return "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS";
		case VK_SUBPASS_CONTENTS_MAX_ENUM:					return "VK_SUBPASS_CONTENTS_MAX_ENUM";
		default:											return DE_NULL;
	}
}

const char* getObjectTypeName (VkObjectType value)
{
	switch (value)
	{
		case VK_OBJECT_TYPE_UNKNOWN:							return "VK_OBJECT_TYPE_UNKNOWN";
		case VK_OBJECT_TYPE_INSTANCE:							return "VK_OBJECT_TYPE_INSTANCE";
		case VK_OBJECT_TYPE_PHYSICAL_DEVICE:					return "VK_OBJECT_TYPE_PHYSICAL_DEVICE";
		case VK_OBJECT_TYPE_DEVICE:								return "VK_OBJECT_TYPE_DEVICE";
		case VK_OBJECT_TYPE_QUEUE:								return "VK_OBJECT_TYPE_QUEUE";
		case VK_OBJECT_TYPE_SEMAPHORE:							return "VK_OBJECT_TYPE_SEMAPHORE";
		case VK_OBJECT_TYPE_COMMAND_BUFFER:						return "VK_OBJECT_TYPE_COMMAND_BUFFER";
		case VK_OBJECT_TYPE_FENCE:								return "VK_OBJECT_TYPE_FENCE";
		case VK_OBJECT_TYPE_DEVICE_MEMORY:						return "VK_OBJECT_TYPE_DEVICE_MEMORY";
		case VK_OBJECT_TYPE_BUFFER:								return "VK_OBJECT_TYPE_BUFFER";
		case VK_OBJECT_TYPE_IMAGE:								return "VK_OBJECT_TYPE_IMAGE";
		case VK_OBJECT_TYPE_EVENT:								return "VK_OBJECT_TYPE_EVENT";
		case VK_OBJECT_TYPE_QUERY_POOL:							return "VK_OBJECT_TYPE_QUERY_POOL";
		case VK_OBJECT_TYPE_BUFFER_VIEW:						return "VK_OBJECT_TYPE_BUFFER_VIEW";
		case VK_OBJECT_TYPE_IMAGE_VIEW:							return "VK_OBJECT_TYPE_IMAGE_VIEW";
		case VK_OBJECT_TYPE_SHADER_MODULE:						return "VK_OBJECT_TYPE_SHADER_MODULE";
		case VK_OBJECT_TYPE_PIPELINE_CACHE:						return "VK_OBJECT_TYPE_PIPELINE_CACHE";
		case VK_OBJECT_TYPE_PIPELINE_LAYOUT:					return "VK_OBJECT_TYPE_PIPELINE_LAYOUT";
		case VK_OBJECT_TYPE_RENDER_PASS:						return "VK_OBJECT_TYPE_RENDER_PASS";
		case VK_OBJECT_TYPE_PIPELINE:							return "VK_OBJECT_TYPE_PIPELINE";
		case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT:				return "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT";
		case VK_OBJECT_TYPE_SAMPLER:							return "VK_OBJECT_TYPE_SAMPLER";
		case VK_OBJECT_TYPE_DESCRIPTOR_POOL:					return "VK_OBJECT_TYPE_DESCRIPTOR_POOL";
		case VK_OBJECT_TYPE_DESCRIPTOR_SET:						return "VK_OBJECT_TYPE_DESCRIPTOR_SET";
		case VK_OBJECT_TYPE_FRAMEBUFFER:						return "VK_OBJECT_TYPE_FRAMEBUFFER";
		case VK_OBJECT_TYPE_COMMAND_POOL:						return "VK_OBJECT_TYPE_COMMAND_POOL";
		case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION:			return "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION";
		case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE:			return "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE";
		case VK_OBJECT_TYPE_SURFACE_KHR:						return "VK_OBJECT_TYPE_SURFACE_KHR";
		case VK_OBJECT_TYPE_SWAPCHAIN_KHR:						return "VK_OBJECT_TYPE_SWAPCHAIN_KHR";
		case VK_OBJECT_TYPE_DISPLAY_KHR:						return "VK_OBJECT_TYPE_DISPLAY_KHR";
		case VK_OBJECT_TYPE_DISPLAY_MODE_KHR:					return "VK_OBJECT_TYPE_DISPLAY_MODE_KHR";
		case VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT:			return "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT";
		case VK_OBJECT_TYPE_OBJECT_TABLE_NVX:					return "VK_OBJECT_TYPE_OBJECT_TABLE_NVX";
		case VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX:		return "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX";
		case VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT:			return "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT";
		case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT:				return "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT";
		case VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV:			return "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV";
		case VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL:	return "VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL";
		case VK_OBJECT_TYPE_MAX_ENUM:							return "VK_OBJECT_TYPE_MAX_ENUM";
		default:												return DE_NULL;
	}
}

const char* getVendorIdName (VkVendorId value)
{
	switch (value)
	{
		case VK_VENDOR_ID_VIV:		return "VK_VENDOR_ID_VIV";
		case VK_VENDOR_ID_VSI:		return "VK_VENDOR_ID_VSI";
		case VK_VENDOR_ID_KAZAN:	return "VK_VENDOR_ID_KAZAN";
		case VK_VENDOR_ID_MAX_ENUM:	return "VK_VENDOR_ID_MAX_ENUM";
		default:					return DE_NULL;
	}
}

const char* getPointClippingBehaviorName (VkPointClippingBehavior value)
{
	switch (value)
	{
		case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES:		return "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES";
		case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY:	return "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY";
		case VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM:				return "VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM";
		default:												return DE_NULL;
	}
}

const char* getTessellationDomainOriginName (VkTessellationDomainOrigin value)
{
	switch (value)
	{
		case VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT:	return "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT";
		case VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT:	return "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT";
		case VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM:	return "VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getSamplerYcbcrModelConversionName (VkSamplerYcbcrModelConversion value)
{
	switch (value)
	{
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY:	return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY:	return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM";
		default:												return DE_NULL;
	}
}

const char* getSamplerYcbcrRangeName (VkSamplerYcbcrRange value)
{
	switch (value)
	{
		case VK_SAMPLER_YCBCR_RANGE_ITU_FULL:	return "VK_SAMPLER_YCBCR_RANGE_ITU_FULL";
		case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW:	return "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW";
		case VK_SAMPLER_YCBCR_RANGE_MAX_ENUM:	return "VK_SAMPLER_YCBCR_RANGE_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getChromaLocationName (VkChromaLocation value)
{
	switch (value)
	{
		case VK_CHROMA_LOCATION_COSITED_EVEN:	return "VK_CHROMA_LOCATION_COSITED_EVEN";
		case VK_CHROMA_LOCATION_MIDPOINT:		return "VK_CHROMA_LOCATION_MIDPOINT";
		case VK_CHROMA_LOCATION_MAX_ENUM:		return "VK_CHROMA_LOCATION_MAX_ENUM";
		default:								return DE_NULL;
	}
}

const char* getDescriptorUpdateTemplateTypeName (VkDescriptorUpdateTemplateType value)
{
	switch (value)
	{
		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET:			return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET";
		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR:	return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR";
		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM:				return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM";
		default:														return DE_NULL;
	}
}

const char* getDriverIdName (VkDriverId value)
{
	switch (value)
	{
		case VK_DRIVER_ID_AMD_PROPRIETARY:				return "VK_DRIVER_ID_AMD_PROPRIETARY";
		case VK_DRIVER_ID_AMD_OPEN_SOURCE:				return "VK_DRIVER_ID_AMD_OPEN_SOURCE";
		case VK_DRIVER_ID_MESA_RADV:					return "VK_DRIVER_ID_MESA_RADV";
		case VK_DRIVER_ID_NVIDIA_PROPRIETARY:			return "VK_DRIVER_ID_NVIDIA_PROPRIETARY";
		case VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS:	return "VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS";
		case VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA:		return "VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA";
		case VK_DRIVER_ID_IMAGINATION_PROPRIETARY:		return "VK_DRIVER_ID_IMAGINATION_PROPRIETARY";
		case VK_DRIVER_ID_QUALCOMM_PROPRIETARY:			return "VK_DRIVER_ID_QUALCOMM_PROPRIETARY";
		case VK_DRIVER_ID_ARM_PROPRIETARY:				return "VK_DRIVER_ID_ARM_PROPRIETARY";
		case VK_DRIVER_ID_GOOGLE_SWIFTSHADER:			return "VK_DRIVER_ID_GOOGLE_SWIFTSHADER";
		case VK_DRIVER_ID_GGP_PROPRIETARY:				return "VK_DRIVER_ID_GGP_PROPRIETARY";
		case VK_DRIVER_ID_BROADCOM_PROPRIETARY:			return "VK_DRIVER_ID_BROADCOM_PROPRIETARY";
		case VK_DRIVER_ID_MAX_ENUM:						return "VK_DRIVER_ID_MAX_ENUM";
		default:										return DE_NULL;
	}
}

const char* getShaderFloatControlsIndependenceName (VkShaderFloatControlsIndependence value)
{
	switch (value)
	{
		case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY:	return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY";
		case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL:			return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL";
		case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE:		return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE";
		case VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM:	return "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM";
		default:												return DE_NULL;
	}
}

const char* getSamplerReductionModeName (VkSamplerReductionMode value)
{
	switch (value)
	{
		case VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE:	return "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE";
		case VK_SAMPLER_REDUCTION_MODE_MIN:					return "VK_SAMPLER_REDUCTION_MODE_MIN";
		case VK_SAMPLER_REDUCTION_MODE_MAX:					return "VK_SAMPLER_REDUCTION_MODE_MAX";
		case VK_SAMPLER_REDUCTION_MODE_MAX_ENUM:			return "VK_SAMPLER_REDUCTION_MODE_MAX_ENUM";
		default:											return DE_NULL;
	}
}

const char* getSemaphoreTypeName (VkSemaphoreType value)
{
	switch (value)
	{
		case VK_SEMAPHORE_TYPE_BINARY:		return "VK_SEMAPHORE_TYPE_BINARY";
		case VK_SEMAPHORE_TYPE_TIMELINE:	return "VK_SEMAPHORE_TYPE_TIMELINE";
		case VK_SEMAPHORE_TYPE_MAX_ENUM:	return "VK_SEMAPHORE_TYPE_MAX_ENUM";
		default:							return DE_NULL;
	}
}

const char* getColorSpaceKHRName (VkColorSpaceKHR value)
{
	switch (value)
	{
		case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:				return "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR";
		case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:		return "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT";
		case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT:		return "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT";
		case VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT:			return "VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT";
		case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT:			return "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT";
		case VK_COLOR_SPACE_BT709_LINEAR_EXT:				return "VK_COLOR_SPACE_BT709_LINEAR_EXT";
		case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:			return "VK_COLOR_SPACE_BT709_NONLINEAR_EXT";
		case VK_COLOR_SPACE_BT2020_LINEAR_EXT:				return "VK_COLOR_SPACE_BT2020_LINEAR_EXT";
		case VK_COLOR_SPACE_HDR10_ST2084_EXT:				return "VK_COLOR_SPACE_HDR10_ST2084_EXT";
		case VK_COLOR_SPACE_DOLBYVISION_EXT:				return "VK_COLOR_SPACE_DOLBYVISION_EXT";
		case VK_COLOR_SPACE_HDR10_HLG_EXT:					return "VK_COLOR_SPACE_HDR10_HLG_EXT";
		case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT:			return "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT";
		case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:			return "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT";
		case VK_COLOR_SPACE_PASS_THROUGH_EXT:				return "VK_COLOR_SPACE_PASS_THROUGH_EXT";
		case VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT:	return "VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT";
		case VK_COLOR_SPACE_DISPLAY_NATIVE_AMD:				return "VK_COLOR_SPACE_DISPLAY_NATIVE_AMD";
		case VK_COLOR_SPACE_MAX_ENUM_KHR:					return "VK_COLOR_SPACE_MAX_ENUM_KHR";
		default:											return DE_NULL;
	}
}

const char* getPresentModeKHRName (VkPresentModeKHR value)
{
	switch (value)
	{
		case VK_PRESENT_MODE_IMMEDIATE_KHR:					return "VK_PRESENT_MODE_IMMEDIATE_KHR";
		case VK_PRESENT_MODE_MAILBOX_KHR:					return "VK_PRESENT_MODE_MAILBOX_KHR";
		case VK_PRESENT_MODE_FIFO_KHR:						return "VK_PRESENT_MODE_FIFO_KHR";
		case VK_PRESENT_MODE_FIFO_RELAXED_KHR:				return "VK_PRESENT_MODE_FIFO_RELAXED_KHR";
		case VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR:		return "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR";
		case VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR:	return "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR";
		case VK_PRESENT_MODE_MAX_ENUM_KHR:					return "VK_PRESENT_MODE_MAX_ENUM_KHR";
		default:											return DE_NULL;
	}
}

const char* getPerformanceCounterUnitKHRName (VkPerformanceCounterUnitKHR value)
{
	switch (value)
	{
		case VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR:			return "VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR:		return "VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR:		return "VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR:				return "VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR:	return "VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR:			return "VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR:				return "VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR:				return "VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR:				return "VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR:				return "VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR:			return "VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR";
		case VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR:			return "VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR";
		default:												return DE_NULL;
	}
}

const char* getPerformanceCounterScopeKHRName (VkPerformanceCounterScopeKHR value)
{
	switch (value)
	{
		case VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR:	return "VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR";
		case VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR:		return "VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR";
		case VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR:			return "VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR";
		case VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR:			return "VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR";
		default:												return DE_NULL;
	}
}

const char* getPerformanceCounterStorageKHRName (VkPerformanceCounterStorageKHR value)
{
	switch (value)
	{
		case VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR:		return "VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR";
		case VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR:		return "VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR";
		case VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR:		return "VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR";
		case VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR:		return "VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR";
		case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR:	return "VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR";
		case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR:	return "VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR";
		case VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR:	return "VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR";
		default:											return DE_NULL;
	}
}

const char* getPipelineExecutableStatisticFormatKHRName (VkPipelineExecutableStatisticFormatKHR value)
{
	switch (value)
	{
		case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR:	return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR";
		case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR:		return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR";
		case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR:	return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR";
		case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR:	return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR";
		case VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR:	return "VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR";
		default:													return DE_NULL;
	}
}

const char* getDebugReportObjectTypeEXTName (VkDebugReportObjectTypeEXT value)
{
	switch (value)
	{
		case VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT:	return "VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT:	return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT";
		default:															return DE_NULL;
	}
}

const char* getRasterizationOrderAMDName (VkRasterizationOrderAMD value)
{
	switch (value)
	{
		case VK_RASTERIZATION_ORDER_STRICT_AMD:		return "VK_RASTERIZATION_ORDER_STRICT_AMD";
		case VK_RASTERIZATION_ORDER_RELAXED_AMD:	return "VK_RASTERIZATION_ORDER_RELAXED_AMD";
		case VK_RASTERIZATION_ORDER_MAX_ENUM_AMD:	return "VK_RASTERIZATION_ORDER_MAX_ENUM_AMD";
		default:									return DE_NULL;
	}
}

const char* getShaderInfoTypeAMDName (VkShaderInfoTypeAMD value)
{
	switch (value)
	{
		case VK_SHADER_INFO_TYPE_STATISTICS_AMD:	return "VK_SHADER_INFO_TYPE_STATISTICS_AMD";
		case VK_SHADER_INFO_TYPE_BINARY_AMD:		return "VK_SHADER_INFO_TYPE_BINARY_AMD";
		case VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD:	return "VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD";
		case VK_SHADER_INFO_TYPE_MAX_ENUM_AMD:		return "VK_SHADER_INFO_TYPE_MAX_ENUM_AMD";
		default:									return DE_NULL;
	}
}

const char* getValidationCheckEXTName (VkValidationCheckEXT value)
{
	switch (value)
	{
		case VK_VALIDATION_CHECK_ALL_EXT:		return "VK_VALIDATION_CHECK_ALL_EXT";
		case VK_VALIDATION_CHECK_SHADERS_EXT:	return "VK_VALIDATION_CHECK_SHADERS_EXT";
		case VK_VALIDATION_CHECK_MAX_ENUM_EXT:	return "VK_VALIDATION_CHECK_MAX_ENUM_EXT";
		default:								return DE_NULL;
	}
}

const char* getIndirectCommandsTokenTypeNVXName (VkIndirectCommandsTokenTypeNVX value)
{
	switch (value)
	{
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX:				return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX";
		default:													return DE_NULL;
	}
}

const char* getObjectEntryTypeNVXName (VkObjectEntryTypeNVX value)
{
	switch (value)
	{
		case VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX:	return "VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX";
		case VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX:			return "VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX";
		case VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX:		return "VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX";
		case VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX:	return "VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX";
		case VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX:	return "VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX";
		case VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX:			return "VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX";
		default:										return DE_NULL;
	}
}

const char* getDisplayPowerStateEXTName (VkDisplayPowerStateEXT value)
{
	switch (value)
	{
		case VK_DISPLAY_POWER_STATE_OFF_EXT:		return "VK_DISPLAY_POWER_STATE_OFF_EXT";
		case VK_DISPLAY_POWER_STATE_SUSPEND_EXT:	return "VK_DISPLAY_POWER_STATE_SUSPEND_EXT";
		case VK_DISPLAY_POWER_STATE_ON_EXT:			return "VK_DISPLAY_POWER_STATE_ON_EXT";
		case VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT:	return "VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT";
		default:									return DE_NULL;
	}
}

const char* getDeviceEventTypeEXTName (VkDeviceEventTypeEXT value)
{
	switch (value)
	{
		case VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT:	return "VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT";
		case VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT:			return "VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT";
		default:										return DE_NULL;
	}
}

const char* getDisplayEventTypeEXTName (VkDisplayEventTypeEXT value)
{
	switch (value)
	{
		case VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT:	return "VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT";
		case VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT:		return "VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT";
		default:										return DE_NULL;
	}
}

const char* getViewportCoordinateSwizzleNVName (VkViewportCoordinateSwizzleNV value)
{
	switch (value)
	{
		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV";
		case VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV";
		default:											return DE_NULL;
	}
}

const char* getDiscardRectangleModeEXTName (VkDiscardRectangleModeEXT value)
{
	switch (value)
	{
		case VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT:	return "VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT";
		case VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT:	return "VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT";
		case VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT:	return "VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT";
		default:										return DE_NULL;
	}
}

const char* getConservativeRasterizationModeEXTName (VkConservativeRasterizationModeEXT value)
{
	switch (value)
	{
		case VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT:		return "VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT";
		case VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT:	return "VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT";
		case VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT:	return "VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT";
		case VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT:		return "VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT";
		default:													return DE_NULL;
	}
}

const char* getBlendOverlapEXTName (VkBlendOverlapEXT value)
{
	switch (value)
	{
		case VK_BLEND_OVERLAP_UNCORRELATED_EXT:	return "VK_BLEND_OVERLAP_UNCORRELATED_EXT";
		case VK_BLEND_OVERLAP_DISJOINT_EXT:		return "VK_BLEND_OVERLAP_DISJOINT_EXT";
		case VK_BLEND_OVERLAP_CONJOINT_EXT:		return "VK_BLEND_OVERLAP_CONJOINT_EXT";
		case VK_BLEND_OVERLAP_MAX_ENUM_EXT:		return "VK_BLEND_OVERLAP_MAX_ENUM_EXT";
		default:								return DE_NULL;
	}
}

const char* getCoverageModulationModeNVName (VkCoverageModulationModeNV value)
{
	switch (value)
	{
		case VK_COVERAGE_MODULATION_MODE_NONE_NV:		return "VK_COVERAGE_MODULATION_MODE_NONE_NV";
		case VK_COVERAGE_MODULATION_MODE_RGB_NV:		return "VK_COVERAGE_MODULATION_MODE_RGB_NV";
		case VK_COVERAGE_MODULATION_MODE_ALPHA_NV:		return "VK_COVERAGE_MODULATION_MODE_ALPHA_NV";
		case VK_COVERAGE_MODULATION_MODE_RGBA_NV:		return "VK_COVERAGE_MODULATION_MODE_RGBA_NV";
		case VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV:	return "VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV";
		default:										return DE_NULL;
	}
}

const char* getValidationCacheHeaderVersionEXTName (VkValidationCacheHeaderVersionEXT value)
{
	switch (value)
	{
		case VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT:		return "VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT";
		case VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT:	return "VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT";
		default:												return DE_NULL;
	}
}

const char* getShadingRatePaletteEntryNVName (VkShadingRatePaletteEntryNV value)
{
	switch (value)
	{
		case VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV:				return "VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV:		return "VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV:		return "VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV:		return "VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV:		return "VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV:		return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV:	return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV:	return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV:	return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV:	return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV:	return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV:	return "VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV";
		case VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV:						return "VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV";
		default:															return DE_NULL;
	}
}

const char* getCoarseSampleOrderTypeNVName (VkCoarseSampleOrderTypeNV value)
{
	switch (value)
	{
		case VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV:		return "VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV";
		case VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV:			return "VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV";
		case VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV:	return "VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV";
		case VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV:	return "VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV";
		case VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV:		return "VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV";
		default:											return DE_NULL;
	}
}

const char* getAccelerationStructureTypeNVName (VkAccelerationStructureTypeNV value)
{
	switch (value)
	{
		case VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV:		return "VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV";
		case VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV:	return "VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV";
		case VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV:		return "VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV";
		default:												return DE_NULL;
	}
}

const char* getRayTracingShaderGroupTypeNVName (VkRayTracingShaderGroupTypeNV value)
{
	switch (value)
	{
		case VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV:				return "VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV";
		case VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV:	return "VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV";
		case VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV:	return "VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV";
		case VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_NV:				return "VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_NV";
		default:														return DE_NULL;
	}
}

const char* getGeometryTypeNVName (VkGeometryTypeNV value)
{
	switch (value)
	{
		case VK_GEOMETRY_TYPE_TRIANGLES_NV:	return "VK_GEOMETRY_TYPE_TRIANGLES_NV";
		case VK_GEOMETRY_TYPE_AABBS_NV:		return "VK_GEOMETRY_TYPE_AABBS_NV";
		case VK_GEOMETRY_TYPE_MAX_ENUM_NV:	return "VK_GEOMETRY_TYPE_MAX_ENUM_NV";
		default:							return DE_NULL;
	}
}

const char* getCopyAccelerationStructureModeNVName (VkCopyAccelerationStructureModeNV value)
{
	switch (value)
	{
		case VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV:		return "VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV";
		case VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV:	return "VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV";
		case VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_NV:	return "VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_NV";
		default:												return DE_NULL;
	}
}

const char* getAccelerationStructureMemoryRequirementsTypeNVName (VkAccelerationStructureMemoryRequirementsTypeNV value)
{
	switch (value)
	{
		case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV:			return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV";
		case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV:	return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV";
		case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV:	return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV";
		case VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV:		return "VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV";
		default:																	return DE_NULL;
	}
}

const char* getQueueGlobalPriorityEXTName (VkQueueGlobalPriorityEXT value)
{
	switch (value)
	{
		case VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT:		return "VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT";
		case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT:	return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT";
		case VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT:		return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT";
		case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT:	return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT";
		case VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT:	return "VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT";
		default:									return DE_NULL;
	}
}

const char* getTimeDomainEXTName (VkTimeDomainEXT value)
{
	switch (value)
	{
		case VK_TIME_DOMAIN_DEVICE_EXT:						return "VK_TIME_DOMAIN_DEVICE_EXT";
		case VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT:			return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT";
		case VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT:		return "VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT";
		case VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT:	return "VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT";
		case VK_TIME_DOMAIN_MAX_ENUM_EXT:					return "VK_TIME_DOMAIN_MAX_ENUM_EXT";
		default:											return DE_NULL;
	}
}

const char* getMemoryOverallocationBehaviorAMDName (VkMemoryOverallocationBehaviorAMD value)
{
	switch (value)
	{
		case VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD:		return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD";
		case VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD:		return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD";
		case VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD:	return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD";
		case VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD:	return "VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD";
		default:												return DE_NULL;
	}
}

const char* getPerformanceConfigurationTypeINTELName (VkPerformanceConfigurationTypeINTEL value)
{
	switch (value)
	{
		case VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL:	return "VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL";
		case VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL:									return "VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL";
		default:																				return DE_NULL;
	}
}

const char* getQueryPoolSamplingModeINTELName (VkQueryPoolSamplingModeINTEL value)
{
	switch (value)
	{
		case VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL:		return "VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL";
		case VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL:	return "VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL";
		default:											return DE_NULL;
	}
}

const char* getPerformanceOverrideTypeINTELName (VkPerformanceOverrideTypeINTEL value)
{
	switch (value)
	{
		case VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL:		return "VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL";
		case VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL:	return "VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL";
		case VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL:			return "VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL";
		default:													return DE_NULL;
	}
}

const char* getPerformanceParameterTypeINTELName (VkPerformanceParameterTypeINTEL value)
{
	switch (value)
	{
		case VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL:		return "VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL";
		case VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL:	return "VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL";
		case VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL:					return "VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL";
		default:															return DE_NULL;
	}
}

const char* getPerformanceValueTypeINTELName (VkPerformanceValueTypeINTEL value)
{
	switch (value)
	{
		case VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL:	return "VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL";
		case VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL:	return "VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL";
		case VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL:		return "VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL";
		case VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL:		return "VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL";
		case VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL:	return "VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL";
		case VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL:	return "VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL";
		default:										return DE_NULL;
	}
}

const char* getValidationFeatureEnableEXTName (VkValidationFeatureEnableEXT value)
{
	switch (value)
	{
		case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT:							return "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT";
		case VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT:	return "VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT";
		case VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT:						return "VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT";
		case VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT:								return "VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT";
		default:																	return DE_NULL;
	}
}

const char* getValidationFeatureDisableEXTName (VkValidationFeatureDisableEXT value)
{
	switch (value)
	{
		case VK_VALIDATION_FEATURE_DISABLE_ALL_EXT:					return "VK_VALIDATION_FEATURE_DISABLE_ALL_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT:				return "VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT:		return "VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT:		return "VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT:	return "VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT:			return "VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT:		return "VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT";
		case VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT:			return "VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT";
		default:													return DE_NULL;
	}
}

const char* getComponentTypeNVName (VkComponentTypeNV value)
{
	switch (value)
	{
		case VK_COMPONENT_TYPE_FLOAT16_NV:	return "VK_COMPONENT_TYPE_FLOAT16_NV";
		case VK_COMPONENT_TYPE_FLOAT32_NV:	return "VK_COMPONENT_TYPE_FLOAT32_NV";
		case VK_COMPONENT_TYPE_FLOAT64_NV:	return "VK_COMPONENT_TYPE_FLOAT64_NV";
		case VK_COMPONENT_TYPE_SINT8_NV:	return "VK_COMPONENT_TYPE_SINT8_NV";
		case VK_COMPONENT_TYPE_SINT16_NV:	return "VK_COMPONENT_TYPE_SINT16_NV";
		case VK_COMPONENT_TYPE_SINT32_NV:	return "VK_COMPONENT_TYPE_SINT32_NV";
		case VK_COMPONENT_TYPE_SINT64_NV:	return "VK_COMPONENT_TYPE_SINT64_NV";
		case VK_COMPONENT_TYPE_UINT8_NV:	return "VK_COMPONENT_TYPE_UINT8_NV";
		case VK_COMPONENT_TYPE_UINT16_NV:	return "VK_COMPONENT_TYPE_UINT16_NV";
		case VK_COMPONENT_TYPE_UINT32_NV:	return "VK_COMPONENT_TYPE_UINT32_NV";
		case VK_COMPONENT_TYPE_UINT64_NV:	return "VK_COMPONENT_TYPE_UINT64_NV";
		case VK_COMPONENT_TYPE_MAX_ENUM_NV:	return "VK_COMPONENT_TYPE_MAX_ENUM_NV";
		default:							return DE_NULL;
	}
}

const char* getScopeNVName (VkScopeNV value)
{
	switch (value)
	{
		case VK_SCOPE_DEVICE_NV:		return "VK_SCOPE_DEVICE_NV";
		case VK_SCOPE_WORKGROUP_NV:		return "VK_SCOPE_WORKGROUP_NV";
		case VK_SCOPE_SUBGROUP_NV:		return "VK_SCOPE_SUBGROUP_NV";
		case VK_SCOPE_QUEUE_FAMILY_NV:	return "VK_SCOPE_QUEUE_FAMILY_NV";
		case VK_SCOPE_MAX_ENUM_NV:		return "VK_SCOPE_MAX_ENUM_NV";
		default:						return DE_NULL;
	}
}

const char* getCoverageReductionModeNVName (VkCoverageReductionModeNV value)
{
	switch (value)
	{
		case VK_COVERAGE_REDUCTION_MODE_MERGE_NV:		return "VK_COVERAGE_REDUCTION_MODE_MERGE_NV";
		case VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV:	return "VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV";
		case VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV:	return "VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV";
		default:										return DE_NULL;
	}
}

const char* getLineRasterizationModeEXTName (VkLineRasterizationModeEXT value)
{
	switch (value)
	{
		case VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT:			return "VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT";
		case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT:		return "VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT";
		case VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT:			return "VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT";
		case VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT:	return "VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT";
		case VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT:			return "VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT";
		default:												return DE_NULL;
	}
}

const char* getFullScreenExclusiveEXTName (VkFullScreenExclusiveEXT value)
{
	switch (value)
	{
		case VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT:					return "VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT";
		case VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT:					return "VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT";
		case VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT:				return "VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT";
		case VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT:	return "VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT";
		case VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT:					return "VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT";
		default:													return DE_NULL;
	}
}

tcu::Format::Bitfield<32> getFormatFeatureFlagsStr (VkFormatFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,																"VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,																"VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,														"VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,														"VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,														"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,													"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,																"VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,															"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,														"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,													"VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_SRC_BIT,																	"VK_FORMAT_FEATURE_BLIT_SRC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_DST_BIT,																	"VK_FORMAT_FEATURE_BLIT_DST_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,													"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,																"VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_DST_BIT,																"VK_FORMAT_FEATURE_TRANSFER_DST_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,														"VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,								"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,				"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,				"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,		"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DISJOINT_BIT,																	"VK_FORMAT_FEATURE_DISJOINT_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,														"VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT,													"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,												"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT,													"VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR,															"VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR,															"VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT,												"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR,													"VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR,							"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR,			"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR,			"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR,	"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DISJOINT_BIT_KHR,																"VK_FORMAT_FEATURE_DISJOINT_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR,													"VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT,												"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM,																"VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getImageUsageFlagsStr (VkImageUsageFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_SRC_BIT,				"VK_IMAGE_USAGE_TRANSFER_SRC_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_DST_BIT,				"VK_IMAGE_USAGE_TRANSFER_DST_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_SAMPLED_BIT,					"VK_IMAGE_USAGE_SAMPLED_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_STORAGE_BIT,					"VK_IMAGE_USAGE_STORAGE_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,			"VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,	"VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,		"VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,			"VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV,		"VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT,	"VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM,				"VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getImageCreateFlagsStr (VkImageCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_BINDING_BIT,						"VK_IMAGE_CREATE_SPARSE_BINDING_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,						"VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,						"VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,						"VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,						"VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_ALIAS_BIT,									"VK_IMAGE_CREATE_ALIAS_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT,			"VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,					"VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,			"VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_EXTENDED_USAGE_BIT,						"VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_PROTECTED_BIT,								"VK_IMAGE_CREATE_PROTECTED_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_DISJOINT_BIT,								"VK_IMAGE_CREATE_DISJOINT_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV,						"VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT,	"VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,						"VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR,		"VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR,				"VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR,		"VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR,					"VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_DISJOINT_BIT_KHR,							"VK_IMAGE_CREATE_DISJOINT_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_ALIAS_BIT_KHR,								"VK_IMAGE_CREATE_ALIAS_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM,						"VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSampleCountFlagsStr (VkSampleCountFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_1_BIT,					"VK_SAMPLE_COUNT_1_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_2_BIT,					"VK_SAMPLE_COUNT_2_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_4_BIT,					"VK_SAMPLE_COUNT_4_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_8_BIT,					"VK_SAMPLE_COUNT_8_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_16_BIT,				"VK_SAMPLE_COUNT_16_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_32_BIT,				"VK_SAMPLE_COUNT_32_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_64_BIT,				"VK_SAMPLE_COUNT_64_BIT"),
		tcu::Format::BitDesc(VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM,	"VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getQueueFlagsStr (VkQueueFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_QUEUE_GRAPHICS_BIT,			"VK_QUEUE_GRAPHICS_BIT"),
		tcu::Format::BitDesc(VK_QUEUE_COMPUTE_BIT,			"VK_QUEUE_COMPUTE_BIT"),
		tcu::Format::BitDesc(VK_QUEUE_TRANSFER_BIT,			"VK_QUEUE_TRANSFER_BIT"),
		tcu::Format::BitDesc(VK_QUEUE_SPARSE_BINDING_BIT,	"VK_QUEUE_SPARSE_BINDING_BIT"),
		tcu::Format::BitDesc(VK_QUEUE_PROTECTED_BIT,		"VK_QUEUE_PROTECTED_BIT"),
		tcu::Format::BitDesc(VK_QUEUE_FLAG_BITS_MAX_ENUM,	"VK_QUEUE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getMemoryPropertyFlagsStr (VkMemoryPropertyFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,			"VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,			"VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,			"VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_CACHED_BIT,			"VK_MEMORY_PROPERTY_HOST_CACHED_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT,		"VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_PROTECTED_BIT,				"VK_MEMORY_PROPERTY_PROTECTED_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD,	"VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD,	"VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD"),
		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM,			"VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getMemoryHeapFlagsStr (VkMemoryHeapFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT,		"VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_HEAP_MULTI_INSTANCE_BIT,		"VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR,	"VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR"),
		tcu::Format::BitDesc(VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM,		"VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDeviceQueueCreateFlagsStr (VkDeviceQueueCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,		"VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT"),
		tcu::Format::BitDesc(VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM,	"VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,						"VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,					"VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,					"VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,					"VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,		"VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,	"VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,					"VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,					"VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,			"VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,				"VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			"VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,					"VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,						"VK_PIPELINE_STAGE_TRANSFER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,					"VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,							"VK_PIPELINE_STAGE_HOST_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,					"VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,					"VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT,			"VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT,		"VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX,				"VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV,			"VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV,			"VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV,	"VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV,					"VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV,					"VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT,	"VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM,					"VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getImageAspectFlagsStr (VkImageAspectFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_COLOR_BIT,					"VK_IMAGE_ASPECT_COLOR_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_DEPTH_BIT,					"VK_IMAGE_ASPECT_DEPTH_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_STENCIL_BIT,				"VK_IMAGE_ASPECT_STENCIL_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_METADATA_BIT,				"VK_IMAGE_ASPECT_METADATA_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_0_BIT,				"VK_IMAGE_ASPECT_PLANE_0_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_1_BIT,				"VK_IMAGE_ASPECT_PLANE_1_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_2_BIT,				"VK_IMAGE_ASPECT_PLANE_2_BIT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT,	"VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT,	"VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT,	"VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT,	"VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,			"VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_1_BIT_KHR,			"VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_2_BIT_KHR,			"VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM,		"VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSparseImageFormatFlagsStr (VkSparseImageFormatFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,			"VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"),
		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,		"VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"),
		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT,	"VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"),
		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM,			"VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSparseMemoryBindFlagsStr (VkSparseMemoryBindFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SPARSE_MEMORY_BIND_METADATA_BIT,		"VK_SPARSE_MEMORY_BIND_METADATA_BIT"),
		tcu::Format::BitDesc(VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM,	"VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getFenceCreateFlagsStr (VkFenceCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_FENCE_CREATE_SIGNALED_BIT,			"VK_FENCE_CREATE_SIGNALED_BIT"),
		tcu::Format::BitDesc(VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM,	"VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getQueryPipelineStatisticFlagsStr (VkQueryPipelineStatisticFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,						"VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,						"VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,						"VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,					"VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,							"VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,							"VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,			"VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,	"VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"),
		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM,								"VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getQueryResultFlagsStr (VkQueryResultFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_QUERY_RESULT_64_BIT,				"VK_QUERY_RESULT_64_BIT"),
		tcu::Format::BitDesc(VK_QUERY_RESULT_WAIT_BIT,				"VK_QUERY_RESULT_WAIT_BIT"),
		tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,	"VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"),
		tcu::Format::BitDesc(VK_QUERY_RESULT_PARTIAL_BIT,			"VK_QUERY_RESULT_PARTIAL_BIT"),
		tcu::Format::BitDesc(VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM,	"VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getBufferCreateFlagsStr (VkBufferCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_BINDING_BIT,						"VK_BUFFER_CREATE_SPARSE_BINDING_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,						"VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,						"VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_PROTECTED_BIT,							"VK_BUFFER_CREATE_PROTECTED_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,		"VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT,	"VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR,	"VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"),
		tcu::Format::BitDesc(VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM,						"VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getBufferUsageFlagsStr (VkBufferUsageFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,							"VK_BUFFER_USAGE_TRANSFER_SRC_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_DST_BIT,							"VK_BUFFER_USAGE_TRANSFER_DST_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,					"VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,					"VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,						"VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,						"VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDEX_BUFFER_BIT,							"VK_BUFFER_USAGE_INDEX_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,							"VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT,						"VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,					"VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT,			"VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT,	"VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT,				"VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_RAY_TRACING_BIT_NV,						"VK_BUFFER_USAGE_RAY_TRACING_BIT_NV"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT,				"VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR,				"VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM,						"VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getImageViewCreateFlagsStr (VkImageViewCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT,	"VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT"),
		tcu::Format::BitDesc(VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM,					"VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getShaderModuleCreateFlagsStr (VkShaderModuleCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SHADER_MODULE_CREATE_FLAG_BITS_MAX_ENUM,	"VK_SHADER_MODULE_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPipelineCreateFlagsStr (VkPipelineCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,					"VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,						"VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DERIVATIVE_BIT,								"VK_PIPELINE_CREATE_DERIVATIVE_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,			"VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,							"VK_PIPELINE_CREATE_DISPATCH_BASE_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV,						"VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR,					"VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR,	"VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE,								"VK_PIPELINE_CREATE_DISPATCH_BASE"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR,		"VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE_KHR,							"VK_PIPELINE_CREATE_DISPATCH_BASE_KHR"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM,							"VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPipelineShaderStageCreateFlagsStr (VkPipelineShaderStageCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT,	"VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT,		"VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM,					"VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getShaderStageFlagsStr (VkShaderStageFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SHADER_STAGE_VERTEX_BIT,					"VK_SHADER_STAGE_VERTEX_BIT"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,		"VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,	"VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_GEOMETRY_BIT,					"VK_SHADER_STAGE_GEOMETRY_BIT"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_FRAGMENT_BIT,					"VK_SHADER_STAGE_FRAGMENT_BIT"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_COMPUTE_BIT,					"VK_SHADER_STAGE_COMPUTE_BIT"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_ALL_GRAPHICS,					"VK_SHADER_STAGE_ALL_GRAPHICS"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_ALL,							"VK_SHADER_STAGE_ALL"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_RAYGEN_BIT_NV,					"VK_SHADER_STAGE_RAYGEN_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_ANY_HIT_BIT_NV,				"VK_SHADER_STAGE_ANY_HIT_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV,			"VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_MISS_BIT_NV,					"VK_SHADER_STAGE_MISS_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_INTERSECTION_BIT_NV,			"VK_SHADER_STAGE_INTERSECTION_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_CALLABLE_BIT_NV,				"VK_SHADER_STAGE_CALLABLE_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_TASK_BIT_NV,					"VK_SHADER_STAGE_TASK_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_MESH_BIT_NV,					"VK_SHADER_STAGE_MESH_BIT_NV"),
		tcu::Format::BitDesc(VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM,			"VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getCullModeFlagsStr (VkCullModeFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_CULL_MODE_NONE,					"VK_CULL_MODE_NONE"),
		tcu::Format::BitDesc(VK_CULL_MODE_FRONT_BIT,			"VK_CULL_MODE_FRONT_BIT"),
		tcu::Format::BitDesc(VK_CULL_MODE_BACK_BIT,				"VK_CULL_MODE_BACK_BIT"),
		tcu::Format::BitDesc(VK_CULL_MODE_FRONT_AND_BACK,		"VK_CULL_MODE_FRONT_AND_BACK"),
		tcu::Format::BitDesc(VK_CULL_MODE_FLAG_BITS_MAX_ENUM,	"VK_CULL_MODE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getColorComponentFlagsStr (VkColorComponentFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_COLOR_COMPONENT_R_BIT,				"VK_COLOR_COMPONENT_R_BIT"),
		tcu::Format::BitDesc(VK_COLOR_COMPONENT_G_BIT,				"VK_COLOR_COMPONENT_G_BIT"),
		tcu::Format::BitDesc(VK_COLOR_COMPONENT_B_BIT,				"VK_COLOR_COMPONENT_B_BIT"),
		tcu::Format::BitDesc(VK_COLOR_COMPONENT_A_BIT,				"VK_COLOR_COMPONENT_A_BIT"),
		tcu::Format::BitDesc(VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM,	"VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSamplerCreateFlagsStr (VkSamplerCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT,							"VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT"),
		tcu::Format::BitDesc(VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT,	"VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT"),
		tcu::Format::BitDesc(VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM,							"VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDescriptorSetLayoutCreateFlagsStr (VkDescriptorSetLayoutCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,		"VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,			"VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT,	"VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM,				"VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDescriptorPoolCreateFlagsStr (VkDescriptorPoolCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,		"VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT,		"VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT,	"VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM,			"VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getFramebufferCreateFlagsStr (VkFramebufferCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT,		"VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT"),
		tcu::Format::BitDesc(VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR,	"VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR"),
		tcu::Format::BitDesc(VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM,	"VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getRenderPassCreateFlagsStr (VkRenderPassCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM,	"VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getAttachmentDescriptionFlagsStr (VkAttachmentDescriptionFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,		"VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"),
		tcu::Format::BitDesc(VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM,	"VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSubpassDescriptionFlagsStr (VkSubpassDescriptionFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX,		"VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"),
		tcu::Format::BitDesc(VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX,	"VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"),
		tcu::Format::BitDesc(VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM,					"VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getAccessFlagsStr (VkAccessFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_ACCESS_INDIRECT_COMMAND_READ_BIT,					"VK_ACCESS_INDIRECT_COMMAND_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_INDEX_READ_BIT,								"VK_ACCESS_INDEX_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,					"VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_UNIFORM_READ_BIT,							"VK_ACCESS_UNIFORM_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,					"VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_SHADER_READ_BIT,								"VK_ACCESS_SHADER_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_SHADER_WRITE_BIT,							"VK_ACCESS_SHADER_WRITE_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,					"VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					"VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,			"VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,			"VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_TRANSFER_READ_BIT,							"VK_ACCESS_TRANSFER_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_TRANSFER_WRITE_BIT,							"VK_ACCESS_TRANSFER_WRITE_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_HOST_READ_BIT,								"VK_ACCESS_HOST_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_HOST_WRITE_BIT,								"VK_ACCESS_HOST_WRITE_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_MEMORY_READ_BIT,								"VK_ACCESS_MEMORY_READ_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_MEMORY_WRITE_BIT,							"VK_ACCESS_MEMORY_WRITE_BIT"),
		tcu::Format::BitDesc(VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,			"VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT"),
		tcu::Format::BitDesc(VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,		"VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT"),
		tcu::Format::BitDesc(VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,	"VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT"),
		tcu::Format::BitDesc(VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT,			"VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT"),
		tcu::Format::BitDesc(VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX,				"VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX"),
		tcu::Format::BitDesc(VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX,				"VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX"),
		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,	"VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"),
		tcu::Format::BitDesc(VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV,				"VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV"),
		tcu::Format::BitDesc(VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV,			"VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV"),
		tcu::Format::BitDesc(VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV,			"VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV"),
		tcu::Format::BitDesc(VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,			"VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT"),
		tcu::Format::BitDesc(VK_ACCESS_FLAG_BITS_MAX_ENUM,							"VK_ACCESS_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDependencyFlagsStr (VkDependencyFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEPENDENCY_BY_REGION_BIT,			"VK_DEPENDENCY_BY_REGION_BIT"),
		tcu::Format::BitDesc(VK_DEPENDENCY_DEVICE_GROUP_BIT,		"VK_DEPENDENCY_DEVICE_GROUP_BIT"),
		tcu::Format::BitDesc(VK_DEPENDENCY_VIEW_LOCAL_BIT,			"VK_DEPENDENCY_VIEW_LOCAL_BIT"),
		tcu::Format::BitDesc(VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR,		"VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR"),
		tcu::Format::BitDesc(VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR,	"VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR"),
		tcu::Format::BitDesc(VK_DEPENDENCY_FLAG_BITS_MAX_ENUM,		"VK_DEPENDENCY_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getCommandPoolCreateFlagsStr (VkCommandPoolCreateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,				"VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,	"VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_PROTECTED_BIT,				"VK_COMMAND_POOL_CREATE_PROTECTED_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM,			"VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getCommandPoolResetFlagsStr (VkCommandPoolResetFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT,	"VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM,		"VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getCommandBufferUsageFlagsStr (VkCommandBufferUsageFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,		"VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,	"VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,		"VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM,		"VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getQueryControlFlagsStr (VkQueryControlFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_QUERY_CONTROL_PRECISE_BIT,			"VK_QUERY_CONTROL_PRECISE_BIT"),
		tcu::Format::BitDesc(VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM,	"VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getCommandBufferResetFlagsStr (VkCommandBufferResetFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT,	"VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"),
		tcu::Format::BitDesc(VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM,	"VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getStencilFaceFlagsStr (VkStencilFaceFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_BIT,				"VK_STENCIL_FACE_FRONT_BIT"),
		tcu::Format::BitDesc(VK_STENCIL_FACE_BACK_BIT,				"VK_STENCIL_FACE_BACK_BIT"),
		tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_AND_BACK,		"VK_STENCIL_FACE_FRONT_AND_BACK"),
		tcu::Format::BitDesc(VK_STENCIL_FRONT_AND_BACK,				"VK_STENCIL_FRONT_AND_BACK"),
		tcu::Format::BitDesc(VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM,	"VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSubgroupFeatureFlagsStr (VkSubgroupFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_BASIC_BIT,				"VK_SUBGROUP_FEATURE_BASIC_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_VOTE_BIT,				"VK_SUBGROUP_FEATURE_VOTE_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_ARITHMETIC_BIT,		"VK_SUBGROUP_FEATURE_ARITHMETIC_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_BALLOT_BIT,			"VK_SUBGROUP_FEATURE_BALLOT_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_SHUFFLE_BIT,			"VK_SUBGROUP_FEATURE_SHUFFLE_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT,	"VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_CLUSTERED_BIT,			"VK_SUBGROUP_FEATURE_CLUSTERED_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_QUAD_BIT,				"VK_SUBGROUP_FEATURE_QUAD_BIT"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV,	"VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"),
		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM,	"VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPeerMemoryFeatureFlagsStr (VkPeerMemoryFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT,			"VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_DST_BIT,			"VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT,		"VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT,		"VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR,		"VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR,		"VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR,	"VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR,	"VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR"),
		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM,		"VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getMemoryAllocateFlagsStr (VkMemoryAllocateFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT,						"VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT,						"VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT,		"VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT"),
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR,					"VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR"),
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR,					"VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR"),
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR,	"VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR"),
		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM,						"VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalMemoryHandleTypeFlagsStr (VkExternalMemoryHandleTypeFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,							"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,							"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT,				"VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,				"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR,				"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalMemoryFeatureFlagsStr (VkExternalMemoryFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,		"VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,			"VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,			"VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR,	"VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR,		"VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR,		"VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM,		"VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalFenceHandleTypeFlagsStr (VkExternalFenceHandleTypeFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,				"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,			"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,		"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,					"VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,			"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,		"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,	"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR,				"VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM,			"VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalFenceFeatureFlagsStr (VkExternalFenceFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,		"VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,		"VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR,	"VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR,	"VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM,	"VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getFenceImportFlagsStr (VkFenceImportFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_FENCE_IMPORT_TEMPORARY_BIT,			"VK_FENCE_IMPORT_TEMPORARY_BIT"),
		tcu::Format::BitDesc(VK_FENCE_IMPORT_TEMPORARY_BIT_KHR,		"VK_FENCE_IMPORT_TEMPORARY_BIT_KHR"),
		tcu::Format::BitDesc(VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM,	"VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSemaphoreImportFlagsStr (VkSemaphoreImportFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_TEMPORARY_BIT,			"VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"),
		tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR,		"VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR"),
		tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM,	"VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalSemaphoreHandleTypeFlagsStr (VkExternalSemaphoreHandleTypeFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,		"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,					"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,		"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,	"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalSemaphoreFeatureFlagsStr (VkExternalSemaphoreFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,		"VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,		"VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR,	"VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR,	"VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM,	"VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getResolveModeFlagsStr (VkResolveModeFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_RESOLVE_MODE_NONE,					"VK_RESOLVE_MODE_NONE"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,		"VK_RESOLVE_MODE_SAMPLE_ZERO_BIT"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_AVERAGE_BIT,			"VK_RESOLVE_MODE_AVERAGE_BIT"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_MIN_BIT,				"VK_RESOLVE_MODE_MIN_BIT"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_MAX_BIT,				"VK_RESOLVE_MODE_MAX_BIT"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_NONE_KHR,				"VK_RESOLVE_MODE_NONE_KHR"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR,	"VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_AVERAGE_BIT_KHR,		"VK_RESOLVE_MODE_AVERAGE_BIT_KHR"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_MIN_BIT_KHR,			"VK_RESOLVE_MODE_MIN_BIT_KHR"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_MAX_BIT_KHR,			"VK_RESOLVE_MODE_MAX_BIT_KHR"),
		tcu::Format::BitDesc(VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM,	"VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDescriptorBindingFlagsStr (VkDescriptorBindingFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,				"VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT,		"VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT,					"VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT,		"VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT,			"VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT,	"VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT,				"VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT,	"VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"),
		tcu::Format::BitDesc(VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM,					"VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSemaphoreWaitFlagsStr (VkSemaphoreWaitFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SEMAPHORE_WAIT_ANY_BIT,				"VK_SEMAPHORE_WAIT_ANY_BIT"),
		tcu::Format::BitDesc(VK_SEMAPHORE_WAIT_ANY_BIT_KHR,			"VK_SEMAPHORE_WAIT_ANY_BIT_KHR"),
		tcu::Format::BitDesc(VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM,	"VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSurfaceTransformFlagsKHRStr (VkSurfaceTransformFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,						"VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,			"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR,						"VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"),
		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR,				"VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getCompositeAlphaFlagsKHRStr (VkCompositeAlphaFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,				"VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"),
		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,		"VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"),
		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,	"VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"),
		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,			"VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"),
		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR,		"VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSwapchainCreateFlagsKHRStr (VkSwapchainCreateFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR,	"VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"),
		tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR,						"VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"),
		tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR,				"VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR"),
		tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR,				"VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDeviceGroupPresentModeFlagsKHRStr (VkDeviceGroupPresentModeFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR,				"VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"),
		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR,				"VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"),
		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR,					"VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"),
		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR,	"VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"),
		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR,		"VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDisplayPlaneAlphaFlagsKHRStr (VkDisplayPlaneAlphaFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,						"VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"),
		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,						"VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"),
		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,					"VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"),
		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR,	"VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"),
		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR,				"VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPerformanceCounterDescriptionFlagsKHRStr (VkPerformanceCounterDescriptionFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR,	"VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR"),
		tcu::Format::BitDesc(VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR,	"VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR"),
		tcu::Format::BitDesc(VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR,		"VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getAcquireProfilingLockFlagsKHRStr (VkAcquireProfilingLockFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR,	"VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDebugReportFlagsEXTStr (VkDebugReportFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEBUG_REPORT_INFORMATION_BIT_EXT,			"VK_DEBUG_REPORT_INFORMATION_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_WARNING_BIT_EXT,				"VK_DEBUG_REPORT_WARNING_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,	"VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_ERROR_BIT_EXT,					"VK_DEBUG_REPORT_ERROR_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_DEBUG_BIT_EXT,					"VK_DEBUG_REPORT_DEBUG_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT,		"VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalMemoryHandleTypeFlagsNVStr (VkExternalMemoryHandleTypeFlagsNV value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,			"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalMemoryFeatureFlagsNVStr (VkExternalMemoryFeatureFlagsNV value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,	"VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,		"VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV,		"VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV,	"VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getConditionalRenderingFlagsEXTStr (VkConditionalRenderingFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT,			"VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT"),
		tcu::Format::BitDesc(VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT,	"VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getIndirectCommandsLayoutUsageFlagsNVXStr (VkIndirectCommandsLayoutUsageFlagsNVX value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX"),
		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX"),
		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX"),
		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX"),
		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX,		"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getObjectEntryUsageFlagsNVXStr (VkObjectEntryUsageFlagsNVX value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX,		"VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX"),
		tcu::Format::BitDesc(VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX,			"VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX"),
		tcu::Format::BitDesc(VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX,	"VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSurfaceCounterFlagsEXTStr (VkSurfaceCounterFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SURFACE_COUNTER_VBLANK_EXT,				"VK_SURFACE_COUNTER_VBLANK_EXT"),
		tcu::Format::BitDesc(VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT,	"VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDebugUtilsMessageSeverityFlagsEXTStr (VkDebugUtilsMessageSeverityFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT,			"VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT,				"VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT,			"VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,				"VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT,	"VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDebugUtilsMessageTypeFlagsEXTStr (VkDebugUtilsMessageTypeFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT,			"VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT,		"VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT,		"VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT,	"VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getGeometryFlagsNVStr (VkGeometryFlagsNV value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_GEOMETRY_OPAQUE_BIT_NV,								"VK_GEOMETRY_OPAQUE_BIT_NV"),
		tcu::Format::BitDesc(VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV,	"VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV"),
		tcu::Format::BitDesc(VK_GEOMETRY_FLAG_BITS_MAX_ENUM_NV,						"VK_GEOMETRY_FLAG_BITS_MAX_ENUM_NV"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getGeometryInstanceFlagsNVStr (VkGeometryInstanceFlagsNV value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV,				"VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV"),
		tcu::Format::BitDesc(VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV,	"VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV"),
		tcu::Format::BitDesc(VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV,						"VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV"),
		tcu::Format::BitDesc(VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV,					"VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV"),
		tcu::Format::BitDesc(VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_NV,					"VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_NV"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getBuildAccelerationStructureFlagsNVStr (VkBuildAccelerationStructureFlagsNV value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV,		"VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV"),
		tcu::Format::BitDesc(VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV,	"VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV"),
		tcu::Format::BitDesc(VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV,	"VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV"),
		tcu::Format::BitDesc(VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV,	"VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV"),
		tcu::Format::BitDesc(VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV,			"VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV"),
		tcu::Format::BitDesc(VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_NV,		"VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_NV"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPipelineCompilerControlFlagsAMDStr (VkPipelineCompilerControlFlagsAMD value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD,	"VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPipelineCreationFeedbackFlagsEXTStr (VkPipelineCreationFeedbackFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT,							"VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT,	"VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT,		"VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM_EXT,					"VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getShaderCorePropertiesFlagsAMDStr (VkShaderCorePropertiesFlagsAMD value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD,	"VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getToolPurposeFlagsEXTStr (VkToolPurposeFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_VALIDATION_BIT_EXT,			"VK_TOOL_PURPOSE_VALIDATION_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_PROFILING_BIT_EXT,				"VK_TOOL_PURPOSE_PROFILING_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_TRACING_BIT_EXT,				"VK_TOOL_PURPOSE_TRACING_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT,	"VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT,	"VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT,		"VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT,			"VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT"),
		tcu::Format::BitDesc(VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT,		"VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDeviceCreateFlagsStr (VkDeviceCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getMemoryMapFlagsStr (VkMemoryMapFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getSemaphoreCreateFlagsStr (VkSemaphoreCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getEventCreateFlagsStr (VkEventCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getQueryPoolCreateFlagsStr (VkQueryPoolCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getBufferViewCreateFlagsStr (VkBufferViewCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineCacheCreateFlagsStr (VkPipelineCacheCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineVertexInputStateCreateFlagsStr (VkPipelineVertexInputStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineInputAssemblyStateCreateFlagsStr (VkPipelineInputAssemblyStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineTessellationStateCreateFlagsStr (VkPipelineTessellationStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineViewportStateCreateFlagsStr (VkPipelineViewportStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineRasterizationStateCreateFlagsStr (VkPipelineRasterizationStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineMultisampleStateCreateFlagsStr (VkPipelineMultisampleStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineDepthStencilStateCreateFlagsStr (VkPipelineDepthStencilStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineColorBlendStateCreateFlagsStr (VkPipelineColorBlendStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineDynamicStateCreateFlagsStr (VkPipelineDynamicStateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineLayoutCreateFlagsStr (VkPipelineLayoutCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDescriptorPoolResetFlagsStr (VkDescriptorPoolResetFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getCommandPoolTrimFlagsStr (VkCommandPoolTrimFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDescriptorUpdateTemplateCreateFlagsStr (VkDescriptorUpdateTemplateCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDisplayModeCreateFlagsKHRStr (VkDisplayModeCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDisplaySurfaceCreateFlagsKHRStr (VkDisplaySurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineRasterizationStateStreamCreateFlagsEXTStr (VkPipelineRasterizationStateStreamCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineViewportSwizzleStateCreateFlagsNVStr (VkPipelineViewportSwizzleStateCreateFlagsNV value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineDiscardRectangleStateCreateFlagsEXTStr (VkPipelineDiscardRectangleStateCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineRasterizationConservativeStateCreateFlagsEXTStr (VkPipelineRasterizationConservativeStateCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineRasterizationDepthClipStateCreateFlagsEXTStr (VkPipelineRasterizationDepthClipStateCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDebugUtilsMessengerCallbackDataFlagsEXTStr (VkDebugUtilsMessengerCallbackDataFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDebugUtilsMessengerCreateFlagsEXTStr (VkDebugUtilsMessengerCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineCoverageToColorStateCreateFlagsNVStr (VkPipelineCoverageToColorStateCreateFlagsNV value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineCoverageModulationStateCreateFlagsNVStr (VkPipelineCoverageModulationStateCreateFlagsNV value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getValidationCacheCreateFlagsEXTStr (VkValidationCacheCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getPipelineCoverageReductionStateCreateFlagsNVStr (VkPipelineCoverageReductionStateCreateFlagsNV value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getHeadlessSurfaceCreateFlagsEXTStr (VkHeadlessSurfaceCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getAndroidSurfaceCreateFlagsKHRStr (VkAndroidSurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getImagePipeSurfaceCreateFlagsFUCHSIAStr (VkImagePipeSurfaceCreateFlagsFUCHSIA value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getStreamDescriptorSurfaceCreateFlagsGGPStr (VkStreamDescriptorSurfaceCreateFlagsGGP value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getIOSSurfaceCreateFlagsMVKStr (VkIOSSurfaceCreateFlagsMVK value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getMacOSSurfaceCreateFlagsMVKStr (VkMacOSSurfaceCreateFlagsMVK value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getMetalSurfaceCreateFlagsEXTStr (VkMetalSurfaceCreateFlagsEXT value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getViSurfaceCreateFlagsNNStr (VkViSurfaceCreateFlagsNN value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getWaylandSurfaceCreateFlagsKHRStr (VkWaylandSurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getWin32SurfaceCreateFlagsKHRStr (VkWin32SurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getXcbSurfaceCreateFlagsKHRStr (VkXcbSurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getXlibSurfaceCreateFlagsKHRStr (VkXlibSurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

std::ostream& operator<< (std::ostream& s, const VkApplicationInfo& value)
{
	s << "VkApplicationInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpApplicationName = " << getCharPtrStr(value.pApplicationName) << '\n';
	s << "\tapplicationVersion = " << value.applicationVersion << '\n';
	s << "\tpEngineName = " << getCharPtrStr(value.pEngineName) << '\n';
	s << "\tengineVersion = " << value.engineVersion << '\n';
	s << "\tapiVersion = " << value.apiVersion << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkInstanceCreateInfo& value)
{
	s << "VkInstanceCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getInstanceCreateFlagsStr(value.flags) << '\n';
	s << "\tpApplicationInfo = " << value.pApplicationInfo << '\n';
	s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
	s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
	s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
	s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAllocationCallbacks& value)
{
	s << "VkAllocationCallbacks = {\n";
	s << "\tpUserData = " << value.pUserData << '\n';
	s << "\tpfnAllocation = " << value.pfnAllocation << '\n';
	s << "\tpfnReallocation = " << value.pfnReallocation << '\n';
	s << "\tpfnFree = " << value.pfnFree << '\n';
	s << "\tpfnInternalAllocation = " << value.pfnInternalAllocation << '\n';
	s << "\tpfnInternalFree = " << value.pfnInternalFree << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures& value)
{
	s << "VkPhysicalDeviceFeatures = {\n";
	s << "\trobustBufferAccess = " << value.robustBufferAccess << '\n';
	s << "\tfullDrawIndexUint32 = " << value.fullDrawIndexUint32 << '\n';
	s << "\timageCubeArray = " << value.imageCubeArray << '\n';
	s << "\tindependentBlend = " << value.independentBlend << '\n';
	s << "\tgeometryShader = " << value.geometryShader << '\n';
	s << "\ttessellationShader = " << value.tessellationShader << '\n';
	s << "\tsampleRateShading = " << value.sampleRateShading << '\n';
	s << "\tdualSrcBlend = " << value.dualSrcBlend << '\n';
	s << "\tlogicOp = " << value.logicOp << '\n';
	s << "\tmultiDrawIndirect = " << value.multiDrawIndirect << '\n';
	s << "\tdrawIndirectFirstInstance = " << value.drawIndirectFirstInstance << '\n';
	s << "\tdepthClamp = " << value.depthClamp << '\n';
	s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
	s << "\tfillModeNonSolid = " << value.fillModeNonSolid << '\n';
	s << "\tdepthBounds = " << value.depthBounds << '\n';
	s << "\twideLines = " << value.wideLines << '\n';
	s << "\tlargePoints = " << value.largePoints << '\n';
	s << "\talphaToOne = " << value.alphaToOne << '\n';
	s << "\tmultiViewport = " << value.multiViewport << '\n';
	s << "\tsamplerAnisotropy = " << value.samplerAnisotropy << '\n';
	s << "\ttextureCompressionETC2 = " << value.textureCompressionETC2 << '\n';
	s << "\ttextureCompressionASTC_LDR = " << value.textureCompressionASTC_LDR << '\n';
	s << "\ttextureCompressionBC = " << value.textureCompressionBC << '\n';
	s << "\tocclusionQueryPrecise = " << value.occlusionQueryPrecise << '\n';
	s << "\tpipelineStatisticsQuery = " << value.pipelineStatisticsQuery << '\n';
	s << "\tvertexPipelineStoresAndAtomics = " << value.vertexPipelineStoresAndAtomics << '\n';
	s << "\tfragmentStoresAndAtomics = " << value.fragmentStoresAndAtomics << '\n';
	s << "\tshaderTessellationAndGeometryPointSize = " << value.shaderTessellationAndGeometryPointSize << '\n';
	s << "\tshaderImageGatherExtended = " << value.shaderImageGatherExtended << '\n';
	s << "\tshaderStorageImageExtendedFormats = " << value.shaderStorageImageExtendedFormats << '\n';
	s << "\tshaderStorageImageMultisample = " << value.shaderStorageImageMultisample << '\n';
	s << "\tshaderStorageImageReadWithoutFormat = " << value.shaderStorageImageReadWithoutFormat << '\n';
	s << "\tshaderStorageImageWriteWithoutFormat = " << value.shaderStorageImageWriteWithoutFormat << '\n';
	s << "\tshaderUniformBufferArrayDynamicIndexing = " << value.shaderUniformBufferArrayDynamicIndexing << '\n';
	s << "\tshaderSampledImageArrayDynamicIndexing = " << value.shaderSampledImageArrayDynamicIndexing << '\n';
	s << "\tshaderStorageBufferArrayDynamicIndexing = " << value.shaderStorageBufferArrayDynamicIndexing << '\n';
	s << "\tshaderStorageImageArrayDynamicIndexing = " << value.shaderStorageImageArrayDynamicIndexing << '\n';
	s << "\tshaderClipDistance = " << value.shaderClipDistance << '\n';
	s << "\tshaderCullDistance = " << value.shaderCullDistance << '\n';
	s << "\tshaderFloat64 = " << value.shaderFloat64 << '\n';
	s << "\tshaderInt64 = " << value.shaderInt64 << '\n';
	s << "\tshaderInt16 = " << value.shaderInt16 << '\n';
	s << "\tshaderResourceResidency = " << value.shaderResourceResidency << '\n';
	s << "\tshaderResourceMinLod = " << value.shaderResourceMinLod << '\n';
	s << "\tsparseBinding = " << value.sparseBinding << '\n';
	s << "\tsparseResidencyBuffer = " << value.sparseResidencyBuffer << '\n';
	s << "\tsparseResidencyImage2D = " << value.sparseResidencyImage2D << '\n';
	s << "\tsparseResidencyImage3D = " << value.sparseResidencyImage3D << '\n';
	s << "\tsparseResidency2Samples = " << value.sparseResidency2Samples << '\n';
	s << "\tsparseResidency4Samples = " << value.sparseResidency4Samples << '\n';
	s << "\tsparseResidency8Samples = " << value.sparseResidency8Samples << '\n';
	s << "\tsparseResidency16Samples = " << value.sparseResidency16Samples << '\n';
	s << "\tsparseResidencyAliased = " << value.sparseResidencyAliased << '\n';
	s << "\tvariableMultisampleRate = " << value.variableMultisampleRate << '\n';
	s << "\tinheritedQueries = " << value.inheritedQueries << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFormatProperties& value)
{
	s << "VkFormatProperties = {\n";
	s << "\tlinearTilingFeatures = " << getFormatFeatureFlagsStr(value.linearTilingFeatures) << '\n';
	s << "\toptimalTilingFeatures = " << getFormatFeatureFlagsStr(value.optimalTilingFeatures) << '\n';
	s << "\tbufferFeatures = " << getFormatFeatureFlagsStr(value.bufferFeatures) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExtent3D& value)
{
	s << "VkExtent3D = {\n";
	s << "\twidth = " << value.width << '\n';
	s << "\theight = " << value.height << '\n';
	s << "\tdepth = " << value.depth << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties& value)
{
	s << "VkImageFormatProperties = {\n";
	s << "\tmaxExtent = " << value.maxExtent << '\n';
	s << "\tmaxMipLevels = " << value.maxMipLevels << '\n';
	s << "\tmaxArrayLayers = " << value.maxArrayLayers << '\n';
	s << "\tsampleCounts = " << getSampleCountFlagsStr(value.sampleCounts) << '\n';
	s << "\tmaxResourceSize = " << value.maxResourceSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLimits& value)
{
	s << "VkPhysicalDeviceLimits = {\n";
	s << "\tmaxImageDimension1D = " << value.maxImageDimension1D << '\n';
	s << "\tmaxImageDimension2D = " << value.maxImageDimension2D << '\n';
	s << "\tmaxImageDimension3D = " << value.maxImageDimension3D << '\n';
	s << "\tmaxImageDimensionCube = " << value.maxImageDimensionCube << '\n';
	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
	s << "\tmaxTexelBufferElements = " << value.maxTexelBufferElements << '\n';
	s << "\tmaxUniformBufferRange = " << value.maxUniformBufferRange << '\n';
	s << "\tmaxStorageBufferRange = " << value.maxStorageBufferRange << '\n';
	s << "\tmaxPushConstantsSize = " << value.maxPushConstantsSize << '\n';
	s << "\tmaxMemoryAllocationCount = " << value.maxMemoryAllocationCount << '\n';
	s << "\tmaxSamplerAllocationCount = " << value.maxSamplerAllocationCount << '\n';
	s << "\tbufferImageGranularity = " << value.bufferImageGranularity << '\n';
	s << "\tsparseAddressSpaceSize = " << value.sparseAddressSpaceSize << '\n';
	s << "\tmaxBoundDescriptorSets = " << value.maxBoundDescriptorSets << '\n';
	s << "\tmaxPerStageDescriptorSamplers = " << value.maxPerStageDescriptorSamplers << '\n';
	s << "\tmaxPerStageDescriptorUniformBuffers = " << value.maxPerStageDescriptorUniformBuffers << '\n';
	s << "\tmaxPerStageDescriptorStorageBuffers = " << value.maxPerStageDescriptorStorageBuffers << '\n';
	s << "\tmaxPerStageDescriptorSampledImages = " << value.maxPerStageDescriptorSampledImages << '\n';
	s << "\tmaxPerStageDescriptorStorageImages = " << value.maxPerStageDescriptorStorageImages << '\n';
	s << "\tmaxPerStageDescriptorInputAttachments = " << value.maxPerStageDescriptorInputAttachments << '\n';
	s << "\tmaxPerStageResources = " << value.maxPerStageResources << '\n';
	s << "\tmaxDescriptorSetSamplers = " << value.maxDescriptorSetSamplers << '\n';
	s << "\tmaxDescriptorSetUniformBuffers = " << value.maxDescriptorSetUniformBuffers << '\n';
	s << "\tmaxDescriptorSetUniformBuffersDynamic = " << value.maxDescriptorSetUniformBuffersDynamic << '\n';
	s << "\tmaxDescriptorSetStorageBuffers = " << value.maxDescriptorSetStorageBuffers << '\n';
	s << "\tmaxDescriptorSetStorageBuffersDynamic = " << value.maxDescriptorSetStorageBuffersDynamic << '\n';
	s << "\tmaxDescriptorSetSampledImages = " << value.maxDescriptorSetSampledImages << '\n';
	s << "\tmaxDescriptorSetStorageImages = " << value.maxDescriptorSetStorageImages << '\n';
	s << "\tmaxDescriptorSetInputAttachments = " << value.maxDescriptorSetInputAttachments << '\n';
	s << "\tmaxVertexInputAttributes = " << value.maxVertexInputAttributes << '\n';
	s << "\tmaxVertexInputBindings = " << value.maxVertexInputBindings << '\n';
	s << "\tmaxVertexInputAttributeOffset = " << value.maxVertexInputAttributeOffset << '\n';
	s << "\tmaxVertexInputBindingStride = " << value.maxVertexInputBindingStride << '\n';
	s << "\tmaxVertexOutputComponents = " << value.maxVertexOutputComponents << '\n';
	s << "\tmaxTessellationGenerationLevel = " << value.maxTessellationGenerationLevel << '\n';
	s << "\tmaxTessellationPatchSize = " << value.maxTessellationPatchSize << '\n';
	s << "\tmaxTessellationControlPerVertexInputComponents = " << value.maxTessellationControlPerVertexInputComponents << '\n';
	s << "\tmaxTessellationControlPerVertexOutputComponents = " << value.maxTessellationControlPerVertexOutputComponents << '\n';
	s << "\tmaxTessellationControlPerPatchOutputComponents = " << value.maxTessellationControlPerPatchOutputComponents << '\n';
	s << "\tmaxTessellationControlTotalOutputComponents = " << value.maxTessellationControlTotalOutputComponents << '\n';
	s << "\tmaxTessellationEvaluationInputComponents = " << value.maxTessellationEvaluationInputComponents << '\n';
	s << "\tmaxTessellationEvaluationOutputComponents = " << value.maxTessellationEvaluationOutputComponents << '\n';
	s << "\tmaxGeometryShaderInvocations = " << value.maxGeometryShaderInvocations << '\n';
	s << "\tmaxGeometryInputComponents = " << value.maxGeometryInputComponents << '\n';
	s << "\tmaxGeometryOutputComponents = " << value.maxGeometryOutputComponents << '\n';
	s << "\tmaxGeometryOutputVertices = " << value.maxGeometryOutputVertices << '\n';
	s << "\tmaxGeometryTotalOutputComponents = " << value.maxGeometryTotalOutputComponents << '\n';
	s << "\tmaxFragmentInputComponents = " << value.maxFragmentInputComponents << '\n';
	s << "\tmaxFragmentOutputAttachments = " << value.maxFragmentOutputAttachments << '\n';
	s << "\tmaxFragmentDualSrcAttachments = " << value.maxFragmentDualSrcAttachments << '\n';
	s << "\tmaxFragmentCombinedOutputResources = " << value.maxFragmentCombinedOutputResources << '\n';
	s << "\tmaxComputeSharedMemorySize = " << value.maxComputeSharedMemorySize << '\n';
	s << "\tmaxComputeWorkGroupCount = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupCount), DE_ARRAY_END(value.maxComputeWorkGroupCount)) << '\n';
	s << "\tmaxComputeWorkGroupInvocations = " << value.maxComputeWorkGroupInvocations << '\n';
	s << "\tmaxComputeWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupSize), DE_ARRAY_END(value.maxComputeWorkGroupSize)) << '\n';
	s << "\tsubPixelPrecisionBits = " << value.subPixelPrecisionBits << '\n';
	s << "\tsubTexelPrecisionBits = " << value.subTexelPrecisionBits << '\n';
	s << "\tmipmapPrecisionBits = " << value.mipmapPrecisionBits << '\n';
	s << "\tmaxDrawIndexedIndexValue = " << value.maxDrawIndexedIndexValue << '\n';
	s << "\tmaxDrawIndirectCount = " << value.maxDrawIndirectCount << '\n';
	s << "\tmaxSamplerLodBias = " << value.maxSamplerLodBias << '\n';
	s << "\tmaxSamplerAnisotropy = " << value.maxSamplerAnisotropy << '\n';
	s << "\tmaxViewports = " << value.maxViewports << '\n';
	s << "\tmaxViewportDimensions = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxViewportDimensions), DE_ARRAY_END(value.maxViewportDimensions)) << '\n';
	s << "\tviewportBoundsRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewportBoundsRange), DE_ARRAY_END(value.viewportBoundsRange)) << '\n';
	s << "\tviewportSubPixelBits = " << value.viewportSubPixelBits << '\n';
	s << "\tminMemoryMapAlignment = " << value.minMemoryMapAlignment << '\n';
	s << "\tminTexelBufferOffsetAlignment = " << value.minTexelBufferOffsetAlignment << '\n';
	s << "\tminUniformBufferOffsetAlignment = " << value.minUniformBufferOffsetAlignment << '\n';
	s << "\tminStorageBufferOffsetAlignment = " << value.minStorageBufferOffsetAlignment << '\n';
	s << "\tminTexelOffset = " << value.minTexelOffset << '\n';
	s << "\tmaxTexelOffset = " << value.maxTexelOffset << '\n';
	s << "\tminTexelGatherOffset = " << value.minTexelGatherOffset << '\n';
	s << "\tmaxTexelGatherOffset = " << value.maxTexelGatherOffset << '\n';
	s << "\tminInterpolationOffset = " << value.minInterpolationOffset << '\n';
	s << "\tmaxInterpolationOffset = " << value.maxInterpolationOffset << '\n';
	s << "\tsubPixelInterpolationOffsetBits = " << value.subPixelInterpolationOffsetBits << '\n';
	s << "\tmaxFramebufferWidth = " << value.maxFramebufferWidth << '\n';
	s << "\tmaxFramebufferHeight = " << value.maxFramebufferHeight << '\n';
	s << "\tmaxFramebufferLayers = " << value.maxFramebufferLayers << '\n';
	s << "\tframebufferColorSampleCounts = " << getSampleCountFlagsStr(value.framebufferColorSampleCounts) << '\n';
	s << "\tframebufferDepthSampleCounts = " << getSampleCountFlagsStr(value.framebufferDepthSampleCounts) << '\n';
	s << "\tframebufferStencilSampleCounts = " << getSampleCountFlagsStr(value.framebufferStencilSampleCounts) << '\n';
	s << "\tframebufferNoAttachmentsSampleCounts = " << getSampleCountFlagsStr(value.framebufferNoAttachmentsSampleCounts) << '\n';
	s << "\tmaxColorAttachments = " << value.maxColorAttachments << '\n';
	s << "\tsampledImageColorSampleCounts = " << getSampleCountFlagsStr(value.sampledImageColorSampleCounts) << '\n';
	s << "\tsampledImageIntegerSampleCounts = " << getSampleCountFlagsStr(value.sampledImageIntegerSampleCounts) << '\n';
	s << "\tsampledImageDepthSampleCounts = " << getSampleCountFlagsStr(value.sampledImageDepthSampleCounts) << '\n';
	s << "\tsampledImageStencilSampleCounts = " << getSampleCountFlagsStr(value.sampledImageStencilSampleCounts) << '\n';
	s << "\tstorageImageSampleCounts = " << getSampleCountFlagsStr(value.storageImageSampleCounts) << '\n';
	s << "\tmaxSampleMaskWords = " << value.maxSampleMaskWords << '\n';
	s << "\ttimestampComputeAndGraphics = " << value.timestampComputeAndGraphics << '\n';
	s << "\ttimestampPeriod = " << value.timestampPeriod << '\n';
	s << "\tmaxClipDistances = " << value.maxClipDistances << '\n';
	s << "\tmaxCullDistances = " << value.maxCullDistances << '\n';
	s << "\tmaxCombinedClipAndCullDistances = " << value.maxCombinedClipAndCullDistances << '\n';
	s << "\tdiscreteQueuePriorities = " << value.discreteQueuePriorities << '\n';
	s << "\tpointSizeRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.pointSizeRange), DE_ARRAY_END(value.pointSizeRange)) << '\n';
	s << "\tlineWidthRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.lineWidthRange), DE_ARRAY_END(value.lineWidthRange)) << '\n';
	s << "\tpointSizeGranularity = " << value.pointSizeGranularity << '\n';
	s << "\tlineWidthGranularity = " << value.lineWidthGranularity << '\n';
	s << "\tstrictLines = " << value.strictLines << '\n';
	s << "\tstandardSampleLocations = " << value.standardSampleLocations << '\n';
	s << "\toptimalBufferCopyOffsetAlignment = " << value.optimalBufferCopyOffsetAlignment << '\n';
	s << "\toptimalBufferCopyRowPitchAlignment = " << value.optimalBufferCopyRowPitchAlignment << '\n';
	s << "\tnonCoherentAtomSize = " << value.nonCoherentAtomSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseProperties& value)
{
	s << "VkPhysicalDeviceSparseProperties = {\n";
	s << "\tresidencyStandard2DBlockShape = " << value.residencyStandard2DBlockShape << '\n';
	s << "\tresidencyStandard2DMultisampleBlockShape = " << value.residencyStandard2DMultisampleBlockShape << '\n';
	s << "\tresidencyStandard3DBlockShape = " << value.residencyStandard3DBlockShape << '\n';
	s << "\tresidencyAlignedMipSize = " << value.residencyAlignedMipSize << '\n';
	s << "\tresidencyNonResidentStrict = " << value.residencyNonResidentStrict << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties& value)
{
	s << "VkPhysicalDeviceProperties = {\n";
	s << "\tapiVersion = " << value.apiVersion << '\n';
	s << "\tdriverVersion = " << value.driverVersion << '\n';
	s << "\tvendorID = " << value.vendorID << '\n';
	s << "\tdeviceID = " << value.deviceID << '\n';
	s << "\tdeviceType = " << value.deviceType << '\n';
	s << "\tdeviceName = " << (const char*)value.deviceName << '\n';
	s << "\tpipelineCacheUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.pipelineCacheUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.pipelineCacheUUID))) << '\n';
	s << "\tlimits = " << value.limits << '\n';
	s << "\tsparseProperties = " << value.sparseProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties& value)
{
	s << "VkQueueFamilyProperties = {\n";
	s << "\tqueueFlags = " << getQueueFlagsStr(value.queueFlags) << '\n';
	s << "\tqueueCount = " << value.queueCount << '\n';
	s << "\ttimestampValidBits = " << value.timestampValidBits << '\n';
	s << "\tminImageTransferGranularity = " << value.minImageTransferGranularity << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryType& value)
{
	s << "VkMemoryType = {\n";
	s << "\tpropertyFlags = " << getMemoryPropertyFlagsStr(value.propertyFlags) << '\n';
	s << "\theapIndex = " << value.heapIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryHeap& value)
{
	s << "VkMemoryHeap = {\n";
	s << "\tsize = " << value.size << '\n';
	s << "\tflags = " << getMemoryHeapFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties& value)
{
	s << "VkPhysicalDeviceMemoryProperties = {\n";
	s << "\tmemoryTypeCount = " << value.memoryTypeCount << '\n';
	s << "\tmemoryTypes = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryTypes), DE_ARRAY_BEGIN(value.memoryTypes) + value.memoryTypeCount) << '\n';
	s << "\tmemoryHeapCount = " << value.memoryHeapCount << '\n';
	s << "\tmemoryHeaps = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryHeaps), DE_ARRAY_BEGIN(value.memoryHeaps) + value.memoryHeapCount) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceQueueCreateInfo& value)
{
	s << "VkDeviceQueueCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
	s << "\tqueueCount = " << value.queueCount << '\n';
	s << "\tpQueuePriorities = " << value.pQueuePriorities << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceCreateInfo& value)
{
	s << "VkDeviceCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDeviceCreateFlagsStr(value.flags) << '\n';
	s << "\tqueueCreateInfoCount = " << value.queueCreateInfoCount << '\n';
	s << "\tpQueueCreateInfos = " << value.pQueueCreateInfos << '\n';
	s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
	s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
	s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
	s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
	s << "\tpEnabledFeatures = " << value.pEnabledFeatures << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExtensionProperties& value)
{
	s << "VkExtensionProperties = {\n";
	s << "\textensionName = " << (const char*)value.extensionName << '\n';
	s << "\tspecVersion = " << value.specVersion << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkLayerProperties& value)
{
	s << "VkLayerProperties = {\n";
	s << "\tlayerName = " << (const char*)value.layerName << '\n';
	s << "\tspecVersion = " << value.specVersion << '\n';
	s << "\timplementationVersion = " << value.implementationVersion << '\n';
	s << "\tdescription = " << (const char*)value.description << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubmitInfo& value)
{
	s << "VkSubmitInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
	s << "\tpWaitDstStageMask = " << value.pWaitDstStageMask << '\n';
	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
	s << "\tpCommandBuffers = " << value.pCommandBuffers << '\n';
	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
	s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateInfo& value)
{
	s << "VkMemoryAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tallocationSize = " << value.allocationSize << '\n';
	s << "\tmemoryTypeIndex = " << value.memoryTypeIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMappedMemoryRange& value)
{
	s << "VkMappedMemoryRange = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements& value)
{
	s << "VkMemoryRequirements = {\n";
	s << "\tsize = " << value.size << '\n';
	s << "\talignment = " << value.alignment << '\n';
	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties& value)
{
	s << "VkSparseImageFormatProperties = {\n";
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << "\timageGranularity = " << value.imageGranularity << '\n';
	s << "\tflags = " << getSparseImageFormatFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements& value)
{
	s << "VkSparseImageMemoryRequirements = {\n";
	s << "\tformatProperties = " << value.formatProperties << '\n';
	s << "\timageMipTailFirstLod = " << value.imageMipTailFirstLod << '\n';
	s << "\timageMipTailSize = " << value.imageMipTailSize << '\n';
	s << "\timageMipTailOffset = " << value.imageMipTailOffset << '\n';
	s << "\timageMipTailStride = " << value.imageMipTailStride << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseMemoryBind& value)
{
	s << "VkSparseMemoryBind = {\n";
	s << "\tresourceOffset = " << value.resourceOffset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
	s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseBufferMemoryBindInfo& value)
{
	s << "VkSparseBufferMemoryBindInfo = {\n";
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\tbindCount = " << value.bindCount << '\n';
	s << "\tpBinds = " << value.pBinds << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageOpaqueMemoryBindInfo& value)
{
	s << "VkSparseImageOpaqueMemoryBindInfo = {\n";
	s << "\timage = " << value.image << '\n';
	s << "\tbindCount = " << value.bindCount << '\n';
	s << "\tpBinds = " << value.pBinds << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageSubresource& value)
{
	s << "VkImageSubresource = {\n";
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << "\tmipLevel = " << value.mipLevel << '\n';
	s << "\tarrayLayer = " << value.arrayLayer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkOffset3D& value)
{
	s << "VkOffset3D = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << "\tz = " << value.z << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBind& value)
{
	s << "VkSparseImageMemoryBind = {\n";
	s << "\tsubresource = " << value.subresource << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\textent = " << value.extent << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
	s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBindInfo& value)
{
	s << "VkSparseImageMemoryBindInfo = {\n";
	s << "\timage = " << value.image << '\n';
	s << "\tbindCount = " << value.bindCount << '\n';
	s << "\tpBinds = " << value.pBinds << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindSparseInfo& value)
{
	s << "VkBindSparseInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
	s << "\tbufferBindCount = " << value.bufferBindCount << '\n';
	s << "\tpBufferBinds = " << value.pBufferBinds << '\n';
	s << "\timageOpaqueBindCount = " << value.imageOpaqueBindCount << '\n';
	s << "\tpImageOpaqueBinds = " << value.pImageOpaqueBinds << '\n';
	s << "\timageBindCount = " << value.imageBindCount << '\n';
	s << "\tpImageBinds = " << value.pImageBinds << '\n';
	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
	s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFenceCreateInfo& value)
{
	s << "VkFenceCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getFenceCreateFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSemaphoreCreateInfo& value)
{
	s << "VkSemaphoreCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getSemaphoreCreateFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkEventCreateInfo& value)
{
	s << "VkEventCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getEventCreateFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkQueryPoolCreateInfo& value)
{
	s << "VkQueryPoolCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getQueryPoolCreateFlagsStr(value.flags) << '\n';
	s << "\tqueryType = " << value.queryType << '\n';
	s << "\tqueryCount = " << value.queryCount << '\n';
	s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferCreateInfo& value)
{
	s << "VkBufferCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
	s << "\tsize = " << value.size << '\n';
	s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
	s << "\tsharingMode = " << value.sharingMode << '\n';
	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferViewCreateInfo& value)
{
	s << "VkBufferViewCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getBufferViewCreateFlagsStr(value.flags) << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\trange = " << value.range << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageCreateInfo& value)
{
	s << "VkImageCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
	s << "\timageType = " << value.imageType << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\textent = " << value.extent << '\n';
	s << "\tmipLevels = " << value.mipLevels << '\n';
	s << "\tarrayLayers = " << value.arrayLayers << '\n';
	s << "\tsamples = " << value.samples << '\n';
	s << "\ttiling = " << value.tiling << '\n';
	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
	s << "\tsharingMode = " << value.sharingMode << '\n';
	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
	s << "\tinitialLayout = " << value.initialLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubresourceLayout& value)
{
	s << "VkSubresourceLayout = {\n";
	s << "\toffset = " << value.offset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << "\trowPitch = " << value.rowPitch << '\n';
	s << "\tarrayPitch = " << value.arrayPitch << '\n';
	s << "\tdepthPitch = " << value.depthPitch << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkComponentMapping& value)
{
	s << "VkComponentMapping = {\n";
	s << "\tr = " << value.r << '\n';
	s << "\tg = " << value.g << '\n';
	s << "\tb = " << value.b << '\n';
	s << "\ta = " << value.a << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageSubresourceRange& value)
{
	s << "VkImageSubresourceRange = {\n";
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << "\tbaseMipLevel = " << value.baseMipLevel << '\n';
	s << "\tlevelCount = " << value.levelCount << '\n';
	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
	s << "\tlayerCount = " << value.layerCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageViewCreateInfo& value)
{
	s << "VkImageViewCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getImageViewCreateFlagsStr(value.flags) << '\n';
	s << "\timage = " << value.image << '\n';
	s << "\tviewType = " << value.viewType << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\tcomponents = " << value.components << '\n';
	s << "\tsubresourceRange = " << value.subresourceRange << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkShaderModuleCreateInfo& value)
{
	s << "VkShaderModuleCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getShaderModuleCreateFlagsStr(value.flags) << '\n';
	s << "\tcodeSize = " << value.codeSize << '\n';
	s << "\tpCode = " << value.pCode << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCacheCreateInfo& value)
{
	s << "VkPipelineCacheCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCacheCreateFlagsStr(value.flags) << '\n';
	s << "\tinitialDataSize = " << value.initialDataSize << '\n';
	s << "\tpInitialData = " << value.pInitialData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSpecializationMapEntry& value)
{
	s << "VkSpecializationMapEntry = {\n";
	s << "\tconstantID = " << value.constantID << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSpecializationInfo& value)
{
	s << "VkSpecializationInfo = {\n";
	s << "\tmapEntryCount = " << value.mapEntryCount << '\n';
	s << "\tpMapEntries = " << value.pMapEntries << '\n';
	s << "\tdataSize = " << value.dataSize << '\n';
	s << "\tpData = " << value.pData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineShaderStageCreateInfo& value)
{
	s << "VkPipelineShaderStageCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineShaderStageCreateFlagsStr(value.flags) << '\n';
	s << "\tstage = " << value.stage << '\n';
	s << "\tmodule = " << value.module << '\n';
	s << "\tpName = " << getCharPtrStr(value.pName) << '\n';
	s << "\tpSpecializationInfo = " << value.pSpecializationInfo << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDescription& value)
{
	s << "VkVertexInputBindingDescription = {\n";
	s << "\tbinding = " << value.binding << '\n';
	s << "\tstride = " << value.stride << '\n';
	s << "\tinputRate = " << value.inputRate << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkVertexInputAttributeDescription& value)
{
	s << "VkVertexInputAttributeDescription = {\n";
	s << "\tlocation = " << value.location << '\n';
	s << "\tbinding = " << value.binding << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputStateCreateInfo& value)
{
	s << "VkPipelineVertexInputStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineVertexInputStateCreateFlagsStr(value.flags) << '\n';
	s << "\tvertexBindingDescriptionCount = " << value.vertexBindingDescriptionCount << '\n';
	s << "\tpVertexBindingDescriptions = " << value.pVertexBindingDescriptions << '\n';
	s << "\tvertexAttributeDescriptionCount = " << value.vertexAttributeDescriptionCount << '\n';
	s << "\tpVertexAttributeDescriptions = " << value.pVertexAttributeDescriptions << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineInputAssemblyStateCreateInfo& value)
{
	s << "VkPipelineInputAssemblyStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineInputAssemblyStateCreateFlagsStr(value.flags) << '\n';
	s << "\ttopology = " << value.topology << '\n';
	s << "\tprimitiveRestartEnable = " << value.primitiveRestartEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationStateCreateInfo& value)
{
	s << "VkPipelineTessellationStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineTessellationStateCreateFlagsStr(value.flags) << '\n';
	s << "\tpatchControlPoints = " << value.patchControlPoints << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkViewport& value)
{
	s << "VkViewport = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << "\twidth = " << value.width << '\n';
	s << "\theight = " << value.height << '\n';
	s << "\tminDepth = " << value.minDepth << '\n';
	s << "\tmaxDepth = " << value.maxDepth << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkOffset2D& value)
{
	s << "VkOffset2D = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExtent2D& value)
{
	s << "VkExtent2D = {\n";
	s << "\twidth = " << value.width << '\n';
	s << "\theight = " << value.height << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRect2D& value)
{
	s << "VkRect2D = {\n";
	s << "\toffset = " << value.offset << '\n';
	s << "\textent = " << value.extent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineViewportStateCreateInfo& value)
{
	s << "VkPipelineViewportStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineViewportStateCreateFlagsStr(value.flags) << '\n';
	s << "\tviewportCount = " << value.viewportCount << '\n';
	s << "\tpViewports = " << value.pViewports << '\n';
	s << "\tscissorCount = " << value.scissorCount << '\n';
	s << "\tpScissors = " << value.pScissors << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateCreateInfo& value)
{
	s << "VkPipelineRasterizationStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineRasterizationStateCreateFlagsStr(value.flags) << '\n';
	s << "\tdepthClampEnable = " << value.depthClampEnable << '\n';
	s << "\trasterizerDiscardEnable = " << value.rasterizerDiscardEnable << '\n';
	s << "\tpolygonMode = " << value.polygonMode << '\n';
	s << "\tcullMode = " << getCullModeFlagsStr(value.cullMode) << '\n';
	s << "\tfrontFace = " << value.frontFace << '\n';
	s << "\tdepthBiasEnable = " << value.depthBiasEnable << '\n';
	s << "\tdepthBiasConstantFactor = " << value.depthBiasConstantFactor << '\n';
	s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
	s << "\tdepthBiasSlopeFactor = " << value.depthBiasSlopeFactor << '\n';
	s << "\tlineWidth = " << value.lineWidth << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineMultisampleStateCreateInfo& value)
{
	s << "VkPipelineMultisampleStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineMultisampleStateCreateFlagsStr(value.flags) << '\n';
	s << "\trasterizationSamples = " << value.rasterizationSamples << '\n';
	s << "\tsampleShadingEnable = " << value.sampleShadingEnable << '\n';
	s << "\tminSampleShading = " << value.minSampleShading << '\n';
	s << "\tpSampleMask = " << value.pSampleMask << '\n';
	s << "\talphaToCoverageEnable = " << value.alphaToCoverageEnable << '\n';
	s << "\talphaToOneEnable = " << value.alphaToOneEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkStencilOpState& value)
{
	s << "VkStencilOpState = {\n";
	s << "\tfailOp = " << value.failOp << '\n';
	s << "\tpassOp = " << value.passOp << '\n';
	s << "\tdepthFailOp = " << value.depthFailOp << '\n';
	s << "\tcompareOp = " << value.compareOp << '\n';
	s << "\tcompareMask = " << value.compareMask << '\n';
	s << "\twriteMask = " << value.writeMask << '\n';
	s << "\treference = " << value.reference << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineDepthStencilStateCreateInfo& value)
{
	s << "VkPipelineDepthStencilStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineDepthStencilStateCreateFlagsStr(value.flags) << '\n';
	s << "\tdepthTestEnable = " << value.depthTestEnable << '\n';
	s << "\tdepthWriteEnable = " << value.depthWriteEnable << '\n';
	s << "\tdepthCompareOp = " << value.depthCompareOp << '\n';
	s << "\tdepthBoundsTestEnable = " << value.depthBoundsTestEnable << '\n';
	s << "\tstencilTestEnable = " << value.stencilTestEnable << '\n';
	s << "\tfront = " << value.front << '\n';
	s << "\tback = " << value.back << '\n';
	s << "\tminDepthBounds = " << value.minDepthBounds << '\n';
	s << "\tmaxDepthBounds = " << value.maxDepthBounds << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAttachmentState& value)
{
	s << "VkPipelineColorBlendAttachmentState = {\n";
	s << "\tblendEnable = " << value.blendEnable << '\n';
	s << "\tsrcColorBlendFactor = " << value.srcColorBlendFactor << '\n';
	s << "\tdstColorBlendFactor = " << value.dstColorBlendFactor << '\n';
	s << "\tcolorBlendOp = " << value.colorBlendOp << '\n';
	s << "\tsrcAlphaBlendFactor = " << value.srcAlphaBlendFactor << '\n';
	s << "\tdstAlphaBlendFactor = " << value.dstAlphaBlendFactor << '\n';
	s << "\talphaBlendOp = " << value.alphaBlendOp << '\n';
	s << "\tcolorWriteMask = " << getColorComponentFlagsStr(value.colorWriteMask) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendStateCreateInfo& value)
{
	s << "VkPipelineColorBlendStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineColorBlendStateCreateFlagsStr(value.flags) << '\n';
	s << "\tlogicOpEnable = " << value.logicOpEnable << '\n';
	s << "\tlogicOp = " << value.logicOp << '\n';
	s << "\tattachmentCount = " << value.attachmentCount << '\n';
	s << "\tpAttachments = " << value.pAttachments << '\n';
	s << "\tblendConstants = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.blendConstants), DE_ARRAY_END(value.blendConstants)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineDynamicStateCreateInfo& value)
{
	s << "VkPipelineDynamicStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineDynamicStateCreateFlagsStr(value.flags) << '\n';
	s << "\tdynamicStateCount = " << value.dynamicStateCount << '\n';
	s << "\tpDynamicStates = " << value.pDynamicStates << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkGraphicsPipelineCreateInfo& value)
{
	s << "VkGraphicsPipelineCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
	s << "\tstageCount = " << value.stageCount << '\n';
	s << "\tpStages = " << value.pStages << '\n';
	s << "\tpVertexInputState = " << value.pVertexInputState << '\n';
	s << "\tpInputAssemblyState = " << value.pInputAssemblyState << '\n';
	s << "\tpTessellationState = " << value.pTessellationState << '\n';
	s << "\tpViewportState = " << value.pViewportState << '\n';
	s << "\tpRasterizationState = " << value.pRasterizationState << '\n';
	s << "\tpMultisampleState = " << value.pMultisampleState << '\n';
	s << "\tpDepthStencilState = " << value.pDepthStencilState << '\n';
	s << "\tpColorBlendState = " << value.pColorBlendState << '\n';
	s << "\tpDynamicState = " << value.pDynamicState << '\n';
	s << "\tlayout = " << value.layout << '\n';
	s << "\trenderPass = " << value.renderPass << '\n';
	s << "\tsubpass = " << value.subpass << '\n';
	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkComputePipelineCreateInfo& value)
{
	s << "VkComputePipelineCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
	s << "\tstage = " << value.stage << '\n';
	s << "\tlayout = " << value.layout << '\n';
	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPushConstantRange& value)
{
	s << "VkPushConstantRange = {\n";
	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineLayoutCreateInfo& value)
{
	s << "VkPipelineLayoutCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineLayoutCreateFlagsStr(value.flags) << '\n';
	s << "\tsetLayoutCount = " << value.setLayoutCount << '\n';
	s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
	s << "\tpushConstantRangeCount = " << value.pushConstantRangeCount << '\n';
	s << "\tpPushConstantRanges = " << value.pPushConstantRanges << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSamplerCreateInfo& value)
{
	s << "VkSamplerCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getSamplerCreateFlagsStr(value.flags) << '\n';
	s << "\tmagFilter = " << value.magFilter << '\n';
	s << "\tminFilter = " << value.minFilter << '\n';
	s << "\tmipmapMode = " << value.mipmapMode << '\n';
	s << "\taddressModeU = " << value.addressModeU << '\n';
	s << "\taddressModeV = " << value.addressModeV << '\n';
	s << "\taddressModeW = " << value.addressModeW << '\n';
	s << "\tmipLodBias = " << value.mipLodBias << '\n';
	s << "\tanisotropyEnable = " << value.anisotropyEnable << '\n';
	s << "\tmaxAnisotropy = " << value.maxAnisotropy << '\n';
	s << "\tcompareEnable = " << value.compareEnable << '\n';
	s << "\tcompareOp = " << value.compareOp << '\n';
	s << "\tminLod = " << value.minLod << '\n';
	s << "\tmaxLod = " << value.maxLod << '\n';
	s << "\tborderColor = " << value.borderColor << '\n';
	s << "\tunnormalizedCoordinates = " << value.unnormalizedCoordinates << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutBinding& value)
{
	s << "VkDescriptorSetLayoutBinding = {\n";
	s << "\tbinding = " << value.binding << '\n';
	s << "\tdescriptorType = " << value.descriptorType << '\n';
	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
	s << "\tpImmutableSamplers = " << value.pImmutableSamplers << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutCreateInfo& value)
{
	s << "VkDescriptorSetLayoutCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDescriptorSetLayoutCreateFlagsStr(value.flags) << '\n';
	s << "\tbindingCount = " << value.bindingCount << '\n';
	s << "\tpBindings = " << value.pBindings << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolSize& value)
{
	s << "VkDescriptorPoolSize = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolCreateInfo& value)
{
	s << "VkDescriptorPoolCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDescriptorPoolCreateFlagsStr(value.flags) << '\n';
	s << "\tmaxSets = " << value.maxSets << '\n';
	s << "\tpoolSizeCount = " << value.poolSizeCount << '\n';
	s << "\tpPoolSizes = " << value.pPoolSizes << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetAllocateInfo& value)
{
	s << "VkDescriptorSetAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdescriptorPool = " << value.descriptorPool << '\n';
	s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
	s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorImageInfo& value)
{
	s << "VkDescriptorImageInfo = {\n";
	s << "\tsampler = " << value.sampler << '\n';
	s << "\timageView = " << value.imageView << '\n';
	s << "\timageLayout = " << value.imageLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorBufferInfo& value)
{
	s << "VkDescriptorBufferInfo = {\n";
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\trange = " << value.range << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSet& value)
{
	s << "VkWriteDescriptorSet = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdstSet = " << value.dstSet << '\n';
	s << "\tdstBinding = " << value.dstBinding << '\n';
	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
	s << "\tdescriptorType = " << value.descriptorType << '\n';
	s << "\tpImageInfo = " << value.pImageInfo << '\n';
	s << "\tpBufferInfo = " << value.pBufferInfo << '\n';
	s << "\tpTexelBufferView = " << value.pTexelBufferView << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCopyDescriptorSet& value)
{
	s << "VkCopyDescriptorSet = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcSet = " << value.srcSet << '\n';
	s << "\tsrcBinding = " << value.srcBinding << '\n';
	s << "\tsrcArrayElement = " << value.srcArrayElement << '\n';
	s << "\tdstSet = " << value.dstSet << '\n';
	s << "\tdstBinding = " << value.dstBinding << '\n';
	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFramebufferCreateInfo& value)
{
	s << "VkFramebufferCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getFramebufferCreateFlagsStr(value.flags) << '\n';
	s << "\trenderPass = " << value.renderPass << '\n';
	s << "\tattachmentCount = " << value.attachmentCount << '\n';
	s << "\tpAttachments = " << value.pAttachments << '\n';
	s << "\twidth = " << value.width << '\n';
	s << "\theight = " << value.height << '\n';
	s << "\tlayers = " << value.layers << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentDescription& value)
{
	s << "VkAttachmentDescription = {\n";
	s << "\tflags = " << getAttachmentDescriptionFlagsStr(value.flags) << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\tsamples = " << value.samples << '\n';
	s << "\tloadOp = " << value.loadOp << '\n';
	s << "\tstoreOp = " << value.storeOp << '\n';
	s << "\tstencilLoadOp = " << value.stencilLoadOp << '\n';
	s << "\tstencilStoreOp = " << value.stencilStoreOp << '\n';
	s << "\tinitialLayout = " << value.initialLayout << '\n';
	s << "\tfinalLayout = " << value.finalLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentReference& value)
{
	s << "VkAttachmentReference = {\n";
	s << "\tattachment = " << value.attachment << '\n';
	s << "\tlayout = " << value.layout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassDescription& value)
{
	s << "VkSubpassDescription = {\n";
	s << "\tflags = " << getSubpassDescriptionFlagsStr(value.flags) << '\n';
	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
	s << "\tinputAttachmentCount = " << value.inputAttachmentCount << '\n';
	s << "\tpInputAttachments = " << value.pInputAttachments << '\n';
	s << "\tcolorAttachmentCount = " << value.colorAttachmentCount << '\n';
	s << "\tpColorAttachments = " << value.pColorAttachments << '\n';
	s << "\tpResolveAttachments = " << value.pResolveAttachments << '\n';
	s << "\tpDepthStencilAttachment = " << value.pDepthStencilAttachment << '\n';
	s << "\tpreserveAttachmentCount = " << value.preserveAttachmentCount << '\n';
	s << "\tpPreserveAttachments = " << value.pPreserveAttachments << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassDependency& value)
{
	s << "VkSubpassDependency = {\n";
	s << "\tsrcSubpass = " << value.srcSubpass << '\n';
	s << "\tdstSubpass = " << value.dstSubpass << '\n';
	s << "\tsrcStageMask = " << getPipelineStageFlagsStr(value.srcStageMask) << '\n';
	s << "\tdstStageMask = " << getPipelineStageFlagsStr(value.dstStageMask) << '\n';
	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
	s << "\tdependencyFlags = " << getDependencyFlagsStr(value.dependencyFlags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassCreateInfo& value)
{
	s << "VkRenderPassCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getRenderPassCreateFlagsStr(value.flags) << '\n';
	s << "\tattachmentCount = " << value.attachmentCount << '\n';
	s << "\tpAttachments = " << value.pAttachments << '\n';
	s << "\tsubpassCount = " << value.subpassCount << '\n';
	s << "\tpSubpasses = " << value.pSubpasses << '\n';
	s << "\tdependencyCount = " << value.dependencyCount << '\n';
	s << "\tpDependencies = " << value.pDependencies << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCommandPoolCreateInfo& value)
{
	s << "VkCommandPoolCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getCommandPoolCreateFlagsStr(value.flags) << '\n';
	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCommandBufferAllocateInfo& value)
{
	s << "VkCommandBufferAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcommandPool = " << value.commandPool << '\n';
	s << "\tlevel = " << value.level << '\n';
	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceInfo& value)
{
	s << "VkCommandBufferInheritanceInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trenderPass = " << value.renderPass << '\n';
	s << "\tsubpass = " << value.subpass << '\n';
	s << "\tframebuffer = " << value.framebuffer << '\n';
	s << "\tocclusionQueryEnable = " << value.occlusionQueryEnable << '\n';
	s << "\tqueryFlags = " << getQueryControlFlagsStr(value.queryFlags) << '\n';
	s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value)
{
	s << "VkCommandBufferBeginInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getCommandBufferUsageFlagsStr(value.flags) << '\n';
	s << "\tpInheritanceInfo = " << value.pInheritanceInfo << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferCopy& value)
{
	s << "VkBufferCopy = {\n";
	s << "\tsrcOffset = " << value.srcOffset << '\n';
	s << "\tdstOffset = " << value.dstOffset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageSubresourceLayers& value)
{
	s << "VkImageSubresourceLayers = {\n";
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << "\tmipLevel = " << value.mipLevel << '\n';
	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
	s << "\tlayerCount = " << value.layerCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageCopy& value)
{
	s << "VkImageCopy = {\n";
	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
	s << "\tsrcOffset = " << value.srcOffset << '\n';
	s << "\tdstSubresource = " << value.dstSubresource << '\n';
	s << "\tdstOffset = " << value.dstOffset << '\n';
	s << "\textent = " << value.extent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageBlit& value)
{
	s << "VkImageBlit = {\n";
	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
	s << "\tsrcOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.srcOffsets), DE_ARRAY_END(value.srcOffsets)) << '\n';
	s << "\tdstSubresource = " << value.dstSubresource << '\n';
	s << "\tdstOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.dstOffsets), DE_ARRAY_END(value.dstOffsets)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferImageCopy& value)
{
	s << "VkBufferImageCopy = {\n";
	s << "\tbufferOffset = " << value.bufferOffset << '\n';
	s << "\tbufferRowLength = " << value.bufferRowLength << '\n';
	s << "\tbufferImageHeight = " << value.bufferImageHeight << '\n';
	s << "\timageSubresource = " << value.imageSubresource << '\n';
	s << "\timageOffset = " << value.imageOffset << '\n';
	s << "\timageExtent = " << value.imageExtent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkClearColorValue& value)
{
	s << "VkClearColorValue = {\n";
	s << "\tfloat32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.float32), DE_ARRAY_END(value.float32)) << '\n';
	s << "\tint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.int32), DE_ARRAY_END(value.int32)) << '\n';
	s << "\tuint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.uint32), DE_ARRAY_END(value.uint32)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkClearDepthStencilValue& value)
{
	s << "VkClearDepthStencilValue = {\n";
	s << "\tdepth = " << value.depth << '\n';
	s << "\tstencil = " << value.stencil << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkClearValue& value)
{
	s << "VkClearValue = {\n";
	s << "\tcolor = " << value.color << '\n';
	s << "\tdepthStencil = " << value.depthStencil << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkClearAttachment& value)
{
	s << "VkClearAttachment = {\n";
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << "\tcolorAttachment = " << value.colorAttachment << '\n';
	s << "\tclearValue = " << value.clearValue << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkClearRect& value)
{
	s << "VkClearRect = {\n";
	s << "\trect = " << value.rect << '\n';
	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
	s << "\tlayerCount = " << value.layerCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageResolve& value)
{
	s << "VkImageResolve = {\n";
	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
	s << "\tsrcOffset = " << value.srcOffset << '\n';
	s << "\tdstSubresource = " << value.dstSubresource << '\n';
	s << "\tdstOffset = " << value.dstOffset << '\n';
	s << "\textent = " << value.extent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryBarrier& value)
{
	s << "VkMemoryBarrier = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferMemoryBarrier& value)
{
	s << "VkBufferMemoryBarrier = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
	s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
	s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\tsize = " << value.size << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageMemoryBarrier& value)
{
	s << "VkImageMemoryBarrier = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
	s << "\toldLayout = " << value.oldLayout << '\n';
	s << "\tnewLayout = " << value.newLayout << '\n';
	s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
	s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
	s << "\timage = " << value.image << '\n';
	s << "\tsubresourceRange = " << value.subresourceRange << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassBeginInfo& value)
{
	s << "VkRenderPassBeginInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trenderPass = " << value.renderPass << '\n';
	s << "\tframebuffer = " << value.framebuffer << '\n';
	s << "\trenderArea = " << value.renderArea << '\n';
	s << "\tclearValueCount = " << value.clearValueCount << '\n';
	s << "\tpClearValues = " << value.pClearValues << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDispatchIndirectCommand& value)
{
	s << "VkDispatchIndirectCommand = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << "\tz = " << value.z << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDrawIndexedIndirectCommand& value)
{
	s << "VkDrawIndexedIndirectCommand = {\n";
	s << "\tindexCount = " << value.indexCount << '\n';
	s << "\tinstanceCount = " << value.instanceCount << '\n';
	s << "\tfirstIndex = " << value.firstIndex << '\n';
	s << "\tvertexOffset = " << value.vertexOffset << '\n';
	s << "\tfirstInstance = " << value.firstInstance << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDrawIndirectCommand& value)
{
	s << "VkDrawIndirectCommand = {\n";
	s << "\tvertexCount = " << value.vertexCount << '\n';
	s << "\tinstanceCount = " << value.instanceCount << '\n';
	s << "\tfirstVertex = " << value.firstVertex << '\n';
	s << "\tfirstInstance = " << value.firstInstance << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBaseOutStructure& value)
{
	s << "VkBaseOutStructure = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBaseInStructure& value)
{
	s << "VkBaseInStructure = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupProperties& value)
{
	s << "VkPhysicalDeviceSubgroupProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsubgroupSize = " << value.subgroupSize << '\n';
	s << "\tsupportedStages = " << getShaderStageFlagsStr(value.supportedStages) << '\n';
	s << "\tsupportedOperations = " << getSubgroupFeatureFlagsStr(value.supportedOperations) << '\n';
	s << "\tquadOperationsInAllStages = " << value.quadOperationsInAllStages << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryInfo& value)
{
	s << "VkBindBufferMemoryInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryInfo& value)
{
	s << "VkBindImageMemoryInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timage = " << value.image << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice16BitStorageFeatures& value)
{
	s << "VkPhysicalDevice16BitStorageFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstorageBuffer16BitAccess = " << value.storageBuffer16BitAccess << '\n';
	s << "\tuniformAndStorageBuffer16BitAccess = " << value.uniformAndStorageBuffer16BitAccess << '\n';
	s << "\tstoragePushConstant16 = " << value.storagePushConstant16 << '\n';
	s << "\tstorageInputOutput16 = " << value.storageInputOutput16 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryDedicatedRequirements& value)
{
	s << "VkMemoryDedicatedRequirements = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tprefersDedicatedAllocation = " << value.prefersDedicatedAllocation << '\n';
	s << "\trequiresDedicatedAllocation = " << value.requiresDedicatedAllocation << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryDedicatedAllocateInfo& value)
{
	s << "VkMemoryDedicatedAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timage = " << value.image << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateFlagsInfo& value)
{
	s << "VkMemoryAllocateFlagsInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getMemoryAllocateFlagsStr(value.flags) << '\n';
	s << "\tdeviceMask = " << value.deviceMask << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupRenderPassBeginInfo& value)
{
	s << "VkDeviceGroupRenderPassBeginInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceMask = " << value.deviceMask << '\n';
	s << "\tdeviceRenderAreaCount = " << value.deviceRenderAreaCount << '\n';
	s << "\tpDeviceRenderAreas = " << value.pDeviceRenderAreas << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupCommandBufferBeginInfo& value)
{
	s << "VkDeviceGroupCommandBufferBeginInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceMask = " << value.deviceMask << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSubmitInfo& value)
{
	s << "VkDeviceGroupSubmitInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
	s << "\tpWaitSemaphoreDeviceIndices = " << value.pWaitSemaphoreDeviceIndices << '\n';
	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
	s << "\tpCommandBufferDeviceMasks = " << value.pCommandBufferDeviceMasks << '\n';
	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
	s << "\tpSignalSemaphoreDeviceIndices = " << value.pSignalSemaphoreDeviceIndices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupBindSparseInfo& value)
{
	s << "VkDeviceGroupBindSparseInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tresourceDeviceIndex = " << value.resourceDeviceIndex << '\n';
	s << "\tmemoryDeviceIndex = " << value.memoryDeviceIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryDeviceGroupInfo& value)
{
	s << "VkBindBufferMemoryDeviceGroupInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
	s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryDeviceGroupInfo& value)
{
	s << "VkBindImageMemoryDeviceGroupInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
	s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
	s << "\tsplitInstanceBindRegionCount = " << value.splitInstanceBindRegionCount << '\n';
	s << "\tpSplitInstanceBindRegions = " << value.pSplitInstanceBindRegions << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceGroupProperties& value)
{
	s << "VkPhysicalDeviceGroupProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
	s << "\tphysicalDevices = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.physicalDevices), DE_ARRAY_END(value.physicalDevices)) << '\n';
	s << "\tsubsetAllocation = " << value.subsetAllocation << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupDeviceCreateInfo& value)
{
	s << "VkDeviceGroupDeviceCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
	s << "\tpPhysicalDevices = " << value.pPhysicalDevices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferMemoryRequirementsInfo2& value)
{
	s << "VkBufferMemoryRequirementsInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageMemoryRequirementsInfo2& value)
{
	s << "VkImageMemoryRequirementsInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timage = " << value.image << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageSparseMemoryRequirementsInfo2& value)
{
	s << "VkImageSparseMemoryRequirementsInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timage = " << value.image << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements2& value)
{
	s << "VkMemoryRequirements2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements2& value)
{
	s << "VkSparseImageMemoryRequirements2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures2& value)
{
	s << "VkPhysicalDeviceFeatures2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfeatures = " << value.features << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties2& value)
{
	s << "VkPhysicalDeviceProperties2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tproperties = " << value.properties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFormatProperties2& value)
{
	s << "VkFormatProperties2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tformatProperties = " << value.formatProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties2& value)
{
	s << "VkImageFormatProperties2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageFormatInfo2& value)
{
	s << "VkPhysicalDeviceImageFormatInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\ttype = " << value.type << '\n';
	s << "\ttiling = " << value.tiling << '\n';
	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties2& value)
{
	s << "VkQueueFamilyProperties2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tqueueFamilyProperties = " << value.queueFamilyProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties2& value)
{
	s << "VkPhysicalDeviceMemoryProperties2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryProperties = " << value.memoryProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties2& value)
{
	s << "VkSparseImageFormatProperties2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tproperties = " << value.properties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseImageFormatInfo2& value)
{
	s << "VkPhysicalDeviceSparseImageFormatInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\ttype = " << value.type << '\n';
	s << "\tsamples = " << value.samples << '\n';
	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
	s << "\ttiling = " << value.tiling << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePointClippingProperties& value)
{
	s << "VkPhysicalDevicePointClippingProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpointClippingBehavior = " << value.pointClippingBehavior << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkInputAttachmentAspectReference& value)
{
	s << "VkInputAttachmentAspectReference = {\n";
	s << "\tsubpass = " << value.subpass << '\n';
	s << "\tinputAttachmentIndex = " << value.inputAttachmentIndex << '\n';
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassInputAttachmentAspectCreateInfo& value)
{
	s << "VkRenderPassInputAttachmentAspectCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\taspectReferenceCount = " << value.aspectReferenceCount << '\n';
	s << "\tpAspectReferences = " << value.pAspectReferences << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageViewUsageCreateInfo& value)
{
	s << "VkImageViewUsageCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationDomainOriginStateCreateInfo& value)
{
	s << "VkPipelineTessellationDomainOriginStateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdomainOrigin = " << value.domainOrigin << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassMultiviewCreateInfo& value)
{
	s << "VkRenderPassMultiviewCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsubpassCount = " << value.subpassCount << '\n';
	s << "\tpViewMasks = " << value.pViewMasks << '\n';
	s << "\tdependencyCount = " << value.dependencyCount << '\n';
	s << "\tpViewOffsets = " << value.pViewOffsets << '\n';
	s << "\tcorrelationMaskCount = " << value.correlationMaskCount << '\n';
	s << "\tpCorrelationMasks = " << value.pCorrelationMasks << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewFeatures& value)
{
	s << "VkPhysicalDeviceMultiviewFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmultiview = " << value.multiview << '\n';
	s << "\tmultiviewGeometryShader = " << value.multiviewGeometryShader << '\n';
	s << "\tmultiviewTessellationShader = " << value.multiviewTessellationShader << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewProperties& value)
{
	s << "VkPhysicalDeviceMultiviewProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxMultiviewViewCount = " << value.maxMultiviewViewCount << '\n';
	s << "\tmaxMultiviewInstanceIndex = " << value.maxMultiviewInstanceIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVariablePointersFeatures& value)
{
	s << "VkPhysicalDeviceVariablePointersFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tvariablePointersStorageBuffer = " << value.variablePointersStorageBuffer << '\n';
	s << "\tvariablePointers = " << value.variablePointers << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProtectedMemoryFeatures& value)
{
	s << "VkPhysicalDeviceProtectedMemoryFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tprotectedMemory = " << value.protectedMemory << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProtectedMemoryProperties& value)
{
	s << "VkPhysicalDeviceProtectedMemoryProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tprotectedNoFault = " << value.protectedNoFault << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceQueueInfo2& value)
{
	s << "VkDeviceQueueInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
	s << "\tqueueIndex = " << value.queueIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkProtectedSubmitInfo& value)
{
	s << "VkProtectedSubmitInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tprotectedSubmit = " << value.protectedSubmit << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionCreateInfo& value)
{
	s << "VkSamplerYcbcrConversionCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\tycbcrModel = " << value.ycbcrModel << '\n';
	s << "\tycbcrRange = " << value.ycbcrRange << '\n';
	s << "\tcomponents = " << value.components << '\n';
	s << "\txChromaOffset = " << value.xChromaOffset << '\n';
	s << "\tyChromaOffset = " << value.yChromaOffset << '\n';
	s << "\tchromaFilter = " << value.chromaFilter << '\n';
	s << "\tforceExplicitReconstruction = " << value.forceExplicitReconstruction << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionInfo& value)
{
	s << "VkSamplerYcbcrConversionInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tconversion = " << value.conversion << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindImagePlaneMemoryInfo& value)
{
	s << "VkBindImagePlaneMemoryInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tplaneAspect = " << value.planeAspect << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImagePlaneMemoryRequirementsInfo& value)
{
	s << "VkImagePlaneMemoryRequirementsInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tplaneAspect = " << value.planeAspect << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value)
{
	s << "VkPhysicalDeviceSamplerYcbcrConversionFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsamplerYcbcrConversion = " << value.samplerYcbcrConversion << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionImageFormatProperties& value)
{
	s << "VkSamplerYcbcrConversionImageFormatProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcombinedImageSamplerDescriptorCount = " << value.combinedImageSamplerDescriptorCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorUpdateTemplateEntry& value)
{
	s << "VkDescriptorUpdateTemplateEntry = {\n";
	s << "\tdstBinding = " << value.dstBinding << '\n';
	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
	s << "\tdescriptorType = " << value.descriptorType << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\tstride = " << value.stride << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorUpdateTemplateCreateInfo& value)
{
	s << "VkDescriptorUpdateTemplateCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDescriptorUpdateTemplateCreateFlagsStr(value.flags) << '\n';
	s << "\tdescriptorUpdateEntryCount = " << value.descriptorUpdateEntryCount << '\n';
	s << "\tpDescriptorUpdateEntries = " << value.pDescriptorUpdateEntries << '\n';
	s << "\ttemplateType = " << value.templateType << '\n';
	s << "\tdescriptorSetLayout = " << value.descriptorSetLayout << '\n';
	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
	s << "\tset = " << value.set << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalMemoryProperties& value)
{
	s << "VkExternalMemoryProperties = {\n";
	s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsStr(value.externalMemoryFeatures) << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalImageFormatInfo& value)
{
	s << "VkPhysicalDeviceExternalImageFormatInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalImageFormatProperties& value)
{
	s << "VkExternalImageFormatProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texternalMemoryProperties = " << value.externalMemoryProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalBufferInfo& value)
{
	s << "VkPhysicalDeviceExternalBufferInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
	s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalBufferProperties& value)
{
	s << "VkExternalBufferProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texternalMemoryProperties = " << value.externalMemoryProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIDProperties& value)
{
	s << "VkPhysicalDeviceIDProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceUUID))) << '\n';
	s << "\tdriverUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.driverUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.driverUUID))) << '\n';
	s << "\tdeviceLUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceLUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceLUID))) << '\n';
	s << "\tdeviceNodeMask = " << value.deviceNodeMask << '\n';
	s << "\tdeviceLUIDValid = " << value.deviceLUIDValid << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalMemoryImageCreateInfo& value)
{
	s << "VkExternalMemoryImageCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalMemoryBufferCreateInfo& value)
{
	s << "VkExternalMemoryBufferCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfo& value)
{
	s << "VkExportMemoryAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalFenceInfo& value)
{
	s << "VkPhysicalDeviceExternalFenceInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalFenceProperties& value)
{
	s << "VkExternalFenceProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
	s << "\texternalFenceFeatures = " << getExternalFenceFeatureFlagsStr(value.externalFenceFeatures) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportFenceCreateInfo& value)
{
	s << "VkExportFenceCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportSemaphoreCreateInfo& value)
{
	s << "VkExportSemaphoreCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalSemaphoreInfo& value)
{
	s << "VkPhysicalDeviceExternalSemaphoreInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalSemaphoreProperties& value)
{
	s << "VkExternalSemaphoreProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
	s << "\texternalSemaphoreFeatures = " << getExternalSemaphoreFeatureFlagsStr(value.externalSemaphoreFeatures) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMaintenance3Properties& value)
{
	s << "VkPhysicalDeviceMaintenance3Properties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxPerSetDescriptors = " << value.maxPerSetDescriptors << '\n';
	s << "\tmaxMemoryAllocationSize = " << value.maxMemoryAllocationSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutSupport& value)
{
	s << "VkDescriptorSetLayoutSupport = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsupported = " << value.supported << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDrawParametersFeatures& value)
{
	s << "VkPhysicalDeviceShaderDrawParametersFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderDrawParameters = " << value.shaderDrawParameters << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan11Features& value)
{
	s << "VkPhysicalDeviceVulkan11Features = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstorageBuffer16BitAccess = " << value.storageBuffer16BitAccess << '\n';
	s << "\tuniformAndStorageBuffer16BitAccess = " << value.uniformAndStorageBuffer16BitAccess << '\n';
	s << "\tstoragePushConstant16 = " << value.storagePushConstant16 << '\n';
	s << "\tstorageInputOutput16 = " << value.storageInputOutput16 << '\n';
	s << "\tmultiview = " << value.multiview << '\n';
	s << "\tmultiviewGeometryShader = " << value.multiviewGeometryShader << '\n';
	s << "\tmultiviewTessellationShader = " << value.multiviewTessellationShader << '\n';
	s << "\tvariablePointersStorageBuffer = " << value.variablePointersStorageBuffer << '\n';
	s << "\tvariablePointers = " << value.variablePointers << '\n';
	s << "\tprotectedMemory = " << value.protectedMemory << '\n';
	s << "\tsamplerYcbcrConversion = " << value.samplerYcbcrConversion << '\n';
	s << "\tshaderDrawParameters = " << value.shaderDrawParameters << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan11Properties& value)
{
	s << "VkPhysicalDeviceVulkan11Properties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceUUID))) << '\n';
	s << "\tdriverUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.driverUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.driverUUID))) << '\n';
	s << "\tdeviceLUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceLUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceLUID))) << '\n';
	s << "\tdeviceNodeMask = " << value.deviceNodeMask << '\n';
	s << "\tdeviceLUIDValid = " << value.deviceLUIDValid << '\n';
	s << "\tsubgroupSize = " << value.subgroupSize << '\n';
	s << "\tsubgroupSupportedStages = " << getShaderStageFlagsStr(value.subgroupSupportedStages) << '\n';
	s << "\tsubgroupSupportedOperations = " << getSubgroupFeatureFlagsStr(value.subgroupSupportedOperations) << '\n';
	s << "\tsubgroupQuadOperationsInAllStages = " << value.subgroupQuadOperationsInAllStages << '\n';
	s << "\tpointClippingBehavior = " << value.pointClippingBehavior << '\n';
	s << "\tmaxMultiviewViewCount = " << value.maxMultiviewViewCount << '\n';
	s << "\tmaxMultiviewInstanceIndex = " << value.maxMultiviewInstanceIndex << '\n';
	s << "\tprotectedNoFault = " << value.protectedNoFault << '\n';
	s << "\tmaxPerSetDescriptors = " << value.maxPerSetDescriptors << '\n';
	s << "\tmaxMemoryAllocationSize = " << value.maxMemoryAllocationSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan12Features& value)
{
	s << "VkPhysicalDeviceVulkan12Features = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsamplerMirrorClampToEdge = " << value.samplerMirrorClampToEdge << '\n';
	s << "\tdrawIndirectCount = " << value.drawIndirectCount << '\n';
	s << "\tstorageBuffer8BitAccess = " << value.storageBuffer8BitAccess << '\n';
	s << "\tuniformAndStorageBuffer8BitAccess = " << value.uniformAndStorageBuffer8BitAccess << '\n';
	s << "\tstoragePushConstant8 = " << value.storagePushConstant8 << '\n';
	s << "\tshaderBufferInt64Atomics = " << value.shaderBufferInt64Atomics << '\n';
	s << "\tshaderSharedInt64Atomics = " << value.shaderSharedInt64Atomics << '\n';
	s << "\tshaderFloat16 = " << value.shaderFloat16 << '\n';
	s << "\tshaderInt8 = " << value.shaderInt8 << '\n';
	s << "\tdescriptorIndexing = " << value.descriptorIndexing << '\n';
	s << "\tshaderInputAttachmentArrayDynamicIndexing = " << value.shaderInputAttachmentArrayDynamicIndexing << '\n';
	s << "\tshaderUniformTexelBufferArrayDynamicIndexing = " << value.shaderUniformTexelBufferArrayDynamicIndexing << '\n';
	s << "\tshaderStorageTexelBufferArrayDynamicIndexing = " << value.shaderStorageTexelBufferArrayDynamicIndexing << '\n';
	s << "\tshaderUniformBufferArrayNonUniformIndexing = " << value.shaderUniformBufferArrayNonUniformIndexing << '\n';
	s << "\tshaderSampledImageArrayNonUniformIndexing = " << value.shaderSampledImageArrayNonUniformIndexing << '\n';
	s << "\tshaderStorageBufferArrayNonUniformIndexing = " << value.shaderStorageBufferArrayNonUniformIndexing << '\n';
	s << "\tshaderStorageImageArrayNonUniformIndexing = " << value.shaderStorageImageArrayNonUniformIndexing << '\n';
	s << "\tshaderInputAttachmentArrayNonUniformIndexing = " << value.shaderInputAttachmentArrayNonUniformIndexing << '\n';
	s << "\tshaderUniformTexelBufferArrayNonUniformIndexing = " << value.shaderUniformTexelBufferArrayNonUniformIndexing << '\n';
	s << "\tshaderStorageTexelBufferArrayNonUniformIndexing = " << value.shaderStorageTexelBufferArrayNonUniformIndexing << '\n';
	s << "\tdescriptorBindingUniformBufferUpdateAfterBind = " << value.descriptorBindingUniformBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingSampledImageUpdateAfterBind = " << value.descriptorBindingSampledImageUpdateAfterBind << '\n';
	s << "\tdescriptorBindingStorageImageUpdateAfterBind = " << value.descriptorBindingStorageImageUpdateAfterBind << '\n';
	s << "\tdescriptorBindingStorageBufferUpdateAfterBind = " << value.descriptorBindingStorageBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingUniformTexelBufferUpdateAfterBind = " << value.descriptorBindingUniformTexelBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingStorageTexelBufferUpdateAfterBind = " << value.descriptorBindingStorageTexelBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingUpdateUnusedWhilePending = " << value.descriptorBindingUpdateUnusedWhilePending << '\n';
	s << "\tdescriptorBindingPartiallyBound = " << value.descriptorBindingPartiallyBound << '\n';
	s << "\tdescriptorBindingVariableDescriptorCount = " << value.descriptorBindingVariableDescriptorCount << '\n';
	s << "\truntimeDescriptorArray = " << value.runtimeDescriptorArray << '\n';
	s << "\tsamplerFilterMinmax = " << value.samplerFilterMinmax << '\n';
	s << "\tscalarBlockLayout = " << value.scalarBlockLayout << '\n';
	s << "\timagelessFramebuffer = " << value.imagelessFramebuffer << '\n';
	s << "\tuniformBufferStandardLayout = " << value.uniformBufferStandardLayout << '\n';
	s << "\tshaderSubgroupExtendedTypes = " << value.shaderSubgroupExtendedTypes << '\n';
	s << "\tseparateDepthStencilLayouts = " << value.separateDepthStencilLayouts << '\n';
	s << "\thostQueryReset = " << value.hostQueryReset << '\n';
	s << "\ttimelineSemaphore = " << value.timelineSemaphore << '\n';
	s << "\tbufferDeviceAddress = " << value.bufferDeviceAddress << '\n';
	s << "\tbufferDeviceAddressCaptureReplay = " << value.bufferDeviceAddressCaptureReplay << '\n';
	s << "\tbufferDeviceAddressMultiDevice = " << value.bufferDeviceAddressMultiDevice << '\n';
	s << "\tvulkanMemoryModel = " << value.vulkanMemoryModel << '\n';
	s << "\tvulkanMemoryModelDeviceScope = " << value.vulkanMemoryModelDeviceScope << '\n';
	s << "\tvulkanMemoryModelAvailabilityVisibilityChains = " << value.vulkanMemoryModelAvailabilityVisibilityChains << '\n';
	s << "\tshaderOutputViewportIndex = " << value.shaderOutputViewportIndex << '\n';
	s << "\tshaderOutputLayer = " << value.shaderOutputLayer << '\n';
	s << "\tsubgroupBroadcastDynamicId = " << value.subgroupBroadcastDynamicId << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkConformanceVersion& value)
{
	s << "VkConformanceVersion = {\n";
	s << "\tmajor = " << value.major << '\n';
	s << "\tminor = " << value.minor << '\n';
	s << "\tsubminor = " << value.subminor << '\n';
	s << "\tpatch = " << value.patch << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkan12Properties& value)
{
	s << "VkPhysicalDeviceVulkan12Properties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdriverID = " << value.driverID << '\n';
	s << "\tdriverName = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverName)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverName))) << '\n';
	s << "\tdriverInfo = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverInfo)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverInfo))) << '\n';
	s << "\tconformanceVersion = " << value.conformanceVersion << '\n';
	s << "\tdenormBehaviorIndependence = " << value.denormBehaviorIndependence << '\n';
	s << "\troundingModeIndependence = " << value.roundingModeIndependence << '\n';
	s << "\tshaderSignedZeroInfNanPreserveFloat16 = " << value.shaderSignedZeroInfNanPreserveFloat16 << '\n';
	s << "\tshaderSignedZeroInfNanPreserveFloat32 = " << value.shaderSignedZeroInfNanPreserveFloat32 << '\n';
	s << "\tshaderSignedZeroInfNanPreserveFloat64 = " << value.shaderSignedZeroInfNanPreserveFloat64 << '\n';
	s << "\tshaderDenormPreserveFloat16 = " << value.shaderDenormPreserveFloat16 << '\n';
	s << "\tshaderDenormPreserveFloat32 = " << value.shaderDenormPreserveFloat32 << '\n';
	s << "\tshaderDenormPreserveFloat64 = " << value.shaderDenormPreserveFloat64 << '\n';
	s << "\tshaderDenormFlushToZeroFloat16 = " << value.shaderDenormFlushToZeroFloat16 << '\n';
	s << "\tshaderDenormFlushToZeroFloat32 = " << value.shaderDenormFlushToZeroFloat32 << '\n';
	s << "\tshaderDenormFlushToZeroFloat64 = " << value.shaderDenormFlushToZeroFloat64 << '\n';
	s << "\tshaderRoundingModeRTEFloat16 = " << value.shaderRoundingModeRTEFloat16 << '\n';
	s << "\tshaderRoundingModeRTEFloat32 = " << value.shaderRoundingModeRTEFloat32 << '\n';
	s << "\tshaderRoundingModeRTEFloat64 = " << value.shaderRoundingModeRTEFloat64 << '\n';
	s << "\tshaderRoundingModeRTZFloat16 = " << value.shaderRoundingModeRTZFloat16 << '\n';
	s << "\tshaderRoundingModeRTZFloat32 = " << value.shaderRoundingModeRTZFloat32 << '\n';
	s << "\tshaderRoundingModeRTZFloat64 = " << value.shaderRoundingModeRTZFloat64 << '\n';
	s << "\tmaxUpdateAfterBindDescriptorsInAllPools = " << value.maxUpdateAfterBindDescriptorsInAllPools << '\n';
	s << "\tshaderUniformBufferArrayNonUniformIndexingNative = " << value.shaderUniformBufferArrayNonUniformIndexingNative << '\n';
	s << "\tshaderSampledImageArrayNonUniformIndexingNative = " << value.shaderSampledImageArrayNonUniformIndexingNative << '\n';
	s << "\tshaderStorageBufferArrayNonUniformIndexingNative = " << value.shaderStorageBufferArrayNonUniformIndexingNative << '\n';
	s << "\tshaderStorageImageArrayNonUniformIndexingNative = " << value.shaderStorageImageArrayNonUniformIndexingNative << '\n';
	s << "\tshaderInputAttachmentArrayNonUniformIndexingNative = " << value.shaderInputAttachmentArrayNonUniformIndexingNative << '\n';
	s << "\trobustBufferAccessUpdateAfterBind = " << value.robustBufferAccessUpdateAfterBind << '\n';
	s << "\tquadDivergentImplicitLod = " << value.quadDivergentImplicitLod << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindSamplers = " << value.maxPerStageDescriptorUpdateAfterBindSamplers << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindUniformBuffers = " << value.maxPerStageDescriptorUpdateAfterBindUniformBuffers << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindStorageBuffers = " << value.maxPerStageDescriptorUpdateAfterBindStorageBuffers << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindSampledImages = " << value.maxPerStageDescriptorUpdateAfterBindSampledImages << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindStorageImages = " << value.maxPerStageDescriptorUpdateAfterBindStorageImages << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindInputAttachments = " << value.maxPerStageDescriptorUpdateAfterBindInputAttachments << '\n';
	s << "\tmaxPerStageUpdateAfterBindResources = " << value.maxPerStageUpdateAfterBindResources << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindSamplers = " << value.maxDescriptorSetUpdateAfterBindSamplers << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffers = " << value.maxDescriptorSetUpdateAfterBindUniformBuffers << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffers = " << value.maxDescriptorSetUpdateAfterBindStorageBuffers << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindSampledImages = " << value.maxDescriptorSetUpdateAfterBindSampledImages << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindStorageImages = " << value.maxDescriptorSetUpdateAfterBindStorageImages << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindInputAttachments = " << value.maxDescriptorSetUpdateAfterBindInputAttachments << '\n';
	s << "\tsupportedDepthResolveModes = " << getResolveModeFlagsStr(value.supportedDepthResolveModes) << '\n';
	s << "\tsupportedStencilResolveModes = " << getResolveModeFlagsStr(value.supportedStencilResolveModes) << '\n';
	s << "\tindependentResolveNone = " << value.independentResolveNone << '\n';
	s << "\tindependentResolve = " << value.independentResolve << '\n';
	s << "\tfilterMinmaxSingleComponentFormats = " << value.filterMinmaxSingleComponentFormats << '\n';
	s << "\tfilterMinmaxImageComponentMapping = " << value.filterMinmaxImageComponentMapping << '\n';
	s << "\tmaxTimelineSemaphoreValueDifference = " << value.maxTimelineSemaphoreValueDifference << '\n';
	s << "\tframebufferIntegerColorSampleCounts = " << getSampleCountFlagsStr(value.framebufferIntegerColorSampleCounts) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageFormatListCreateInfo& value)
{
	s << "VkImageFormatListCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tviewFormatCount = " << value.viewFormatCount << '\n';
	s << "\tpViewFormats = " << value.pViewFormats << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentDescription2& value)
{
	s << "VkAttachmentDescription2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getAttachmentDescriptionFlagsStr(value.flags) << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\tsamples = " << value.samples << '\n';
	s << "\tloadOp = " << value.loadOp << '\n';
	s << "\tstoreOp = " << value.storeOp << '\n';
	s << "\tstencilLoadOp = " << value.stencilLoadOp << '\n';
	s << "\tstencilStoreOp = " << value.stencilStoreOp << '\n';
	s << "\tinitialLayout = " << value.initialLayout << '\n';
	s << "\tfinalLayout = " << value.finalLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentReference2& value)
{
	s << "VkAttachmentReference2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tattachment = " << value.attachment << '\n';
	s << "\tlayout = " << value.layout << '\n';
	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassDescription2& value)
{
	s << "VkSubpassDescription2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getSubpassDescriptionFlagsStr(value.flags) << '\n';
	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
	s << "\tviewMask = " << value.viewMask << '\n';
	s << "\tinputAttachmentCount = " << value.inputAttachmentCount << '\n';
	s << "\tpInputAttachments = " << value.pInputAttachments << '\n';
	s << "\tcolorAttachmentCount = " << value.colorAttachmentCount << '\n';
	s << "\tpColorAttachments = " << value.pColorAttachments << '\n';
	s << "\tpResolveAttachments = " << value.pResolveAttachments << '\n';
	s << "\tpDepthStencilAttachment = " << value.pDepthStencilAttachment << '\n';
	s << "\tpreserveAttachmentCount = " << value.preserveAttachmentCount << '\n';
	s << "\tpPreserveAttachments = " << value.pPreserveAttachments << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassDependency2& value)
{
	s << "VkSubpassDependency2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcSubpass = " << value.srcSubpass << '\n';
	s << "\tdstSubpass = " << value.dstSubpass << '\n';
	s << "\tsrcStageMask = " << getPipelineStageFlagsStr(value.srcStageMask) << '\n';
	s << "\tdstStageMask = " << getPipelineStageFlagsStr(value.dstStageMask) << '\n';
	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
	s << "\tdependencyFlags = " << getDependencyFlagsStr(value.dependencyFlags) << '\n';
	s << "\tviewOffset = " << value.viewOffset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassCreateInfo2& value)
{
	s << "VkRenderPassCreateInfo2 = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getRenderPassCreateFlagsStr(value.flags) << '\n';
	s << "\tattachmentCount = " << value.attachmentCount << '\n';
	s << "\tpAttachments = " << value.pAttachments << '\n';
	s << "\tsubpassCount = " << value.subpassCount << '\n';
	s << "\tpSubpasses = " << value.pSubpasses << '\n';
	s << "\tdependencyCount = " << value.dependencyCount << '\n';
	s << "\tpDependencies = " << value.pDependencies << '\n';
	s << "\tcorrelatedViewMaskCount = " << value.correlatedViewMaskCount << '\n';
	s << "\tpCorrelatedViewMasks = " << value.pCorrelatedViewMasks << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassBeginInfo& value)
{
	s << "VkSubpassBeginInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcontents = " << value.contents << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassEndInfo& value)
{
	s << "VkSubpassEndInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice8BitStorageFeatures& value)
{
	s << "VkPhysicalDevice8BitStorageFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstorageBuffer8BitAccess = " << value.storageBuffer8BitAccess << '\n';
	s << "\tuniformAndStorageBuffer8BitAccess = " << value.uniformAndStorageBuffer8BitAccess << '\n';
	s << "\tstoragePushConstant8 = " << value.storagePushConstant8 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDriverProperties& value)
{
	s << "VkPhysicalDeviceDriverProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdriverID = " << value.driverID << '\n';
	s << "\tdriverName = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverName)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverName))) << '\n';
	s << "\tdriverInfo = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.driverInfo)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.driverInfo))) << '\n';
	s << "\tconformanceVersion = " << value.conformanceVersion << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderAtomicInt64Features& value)
{
	s << "VkPhysicalDeviceShaderAtomicInt64Features = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderBufferInt64Atomics = " << value.shaderBufferInt64Atomics << '\n';
	s << "\tshaderSharedInt64Atomics = " << value.shaderSharedInt64Atomics << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderFloat16Int8Features& value)
{
	s << "VkPhysicalDeviceShaderFloat16Int8Features = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderFloat16 = " << value.shaderFloat16 << '\n';
	s << "\tshaderInt8 = " << value.shaderInt8 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFloatControlsProperties& value)
{
	s << "VkPhysicalDeviceFloatControlsProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdenormBehaviorIndependence = " << value.denormBehaviorIndependence << '\n';
	s << "\troundingModeIndependence = " << value.roundingModeIndependence << '\n';
	s << "\tshaderSignedZeroInfNanPreserveFloat16 = " << value.shaderSignedZeroInfNanPreserveFloat16 << '\n';
	s << "\tshaderSignedZeroInfNanPreserveFloat32 = " << value.shaderSignedZeroInfNanPreserveFloat32 << '\n';
	s << "\tshaderSignedZeroInfNanPreserveFloat64 = " << value.shaderSignedZeroInfNanPreserveFloat64 << '\n';
	s << "\tshaderDenormPreserveFloat16 = " << value.shaderDenormPreserveFloat16 << '\n';
	s << "\tshaderDenormPreserveFloat32 = " << value.shaderDenormPreserveFloat32 << '\n';
	s << "\tshaderDenormPreserveFloat64 = " << value.shaderDenormPreserveFloat64 << '\n';
	s << "\tshaderDenormFlushToZeroFloat16 = " << value.shaderDenormFlushToZeroFloat16 << '\n';
	s << "\tshaderDenormFlushToZeroFloat32 = " << value.shaderDenormFlushToZeroFloat32 << '\n';
	s << "\tshaderDenormFlushToZeroFloat64 = " << value.shaderDenormFlushToZeroFloat64 << '\n';
	s << "\tshaderRoundingModeRTEFloat16 = " << value.shaderRoundingModeRTEFloat16 << '\n';
	s << "\tshaderRoundingModeRTEFloat32 = " << value.shaderRoundingModeRTEFloat32 << '\n';
	s << "\tshaderRoundingModeRTEFloat64 = " << value.shaderRoundingModeRTEFloat64 << '\n';
	s << "\tshaderRoundingModeRTZFloat16 = " << value.shaderRoundingModeRTZFloat16 << '\n';
	s << "\tshaderRoundingModeRTZFloat32 = " << value.shaderRoundingModeRTZFloat32 << '\n';
	s << "\tshaderRoundingModeRTZFloat64 = " << value.shaderRoundingModeRTZFloat64 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutBindingFlagsCreateInfo& value)
{
	s << "VkDescriptorSetLayoutBindingFlagsCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbindingCount = " << value.bindingCount << '\n';
	s << "\tpBindingFlags = " << value.pBindingFlags << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDescriptorIndexingFeatures& value)
{
	s << "VkPhysicalDeviceDescriptorIndexingFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderInputAttachmentArrayDynamicIndexing = " << value.shaderInputAttachmentArrayDynamicIndexing << '\n';
	s << "\tshaderUniformTexelBufferArrayDynamicIndexing = " << value.shaderUniformTexelBufferArrayDynamicIndexing << '\n';
	s << "\tshaderStorageTexelBufferArrayDynamicIndexing = " << value.shaderStorageTexelBufferArrayDynamicIndexing << '\n';
	s << "\tshaderUniformBufferArrayNonUniformIndexing = " << value.shaderUniformBufferArrayNonUniformIndexing << '\n';
	s << "\tshaderSampledImageArrayNonUniformIndexing = " << value.shaderSampledImageArrayNonUniformIndexing << '\n';
	s << "\tshaderStorageBufferArrayNonUniformIndexing = " << value.shaderStorageBufferArrayNonUniformIndexing << '\n';
	s << "\tshaderStorageImageArrayNonUniformIndexing = " << value.shaderStorageImageArrayNonUniformIndexing << '\n';
	s << "\tshaderInputAttachmentArrayNonUniformIndexing = " << value.shaderInputAttachmentArrayNonUniformIndexing << '\n';
	s << "\tshaderUniformTexelBufferArrayNonUniformIndexing = " << value.shaderUniformTexelBufferArrayNonUniformIndexing << '\n';
	s << "\tshaderStorageTexelBufferArrayNonUniformIndexing = " << value.shaderStorageTexelBufferArrayNonUniformIndexing << '\n';
	s << "\tdescriptorBindingUniformBufferUpdateAfterBind = " << value.descriptorBindingUniformBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingSampledImageUpdateAfterBind = " << value.descriptorBindingSampledImageUpdateAfterBind << '\n';
	s << "\tdescriptorBindingStorageImageUpdateAfterBind = " << value.descriptorBindingStorageImageUpdateAfterBind << '\n';
	s << "\tdescriptorBindingStorageBufferUpdateAfterBind = " << value.descriptorBindingStorageBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingUniformTexelBufferUpdateAfterBind = " << value.descriptorBindingUniformTexelBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingStorageTexelBufferUpdateAfterBind = " << value.descriptorBindingStorageTexelBufferUpdateAfterBind << '\n';
	s << "\tdescriptorBindingUpdateUnusedWhilePending = " << value.descriptorBindingUpdateUnusedWhilePending << '\n';
	s << "\tdescriptorBindingPartiallyBound = " << value.descriptorBindingPartiallyBound << '\n';
	s << "\tdescriptorBindingVariableDescriptorCount = " << value.descriptorBindingVariableDescriptorCount << '\n';
	s << "\truntimeDescriptorArray = " << value.runtimeDescriptorArray << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDescriptorIndexingProperties& value)
{
	s << "VkPhysicalDeviceDescriptorIndexingProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxUpdateAfterBindDescriptorsInAllPools = " << value.maxUpdateAfterBindDescriptorsInAllPools << '\n';
	s << "\tshaderUniformBufferArrayNonUniformIndexingNative = " << value.shaderUniformBufferArrayNonUniformIndexingNative << '\n';
	s << "\tshaderSampledImageArrayNonUniformIndexingNative = " << value.shaderSampledImageArrayNonUniformIndexingNative << '\n';
	s << "\tshaderStorageBufferArrayNonUniformIndexingNative = " << value.shaderStorageBufferArrayNonUniformIndexingNative << '\n';
	s << "\tshaderStorageImageArrayNonUniformIndexingNative = " << value.shaderStorageImageArrayNonUniformIndexingNative << '\n';
	s << "\tshaderInputAttachmentArrayNonUniformIndexingNative = " << value.shaderInputAttachmentArrayNonUniformIndexingNative << '\n';
	s << "\trobustBufferAccessUpdateAfterBind = " << value.robustBufferAccessUpdateAfterBind << '\n';
	s << "\tquadDivergentImplicitLod = " << value.quadDivergentImplicitLod << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindSamplers = " << value.maxPerStageDescriptorUpdateAfterBindSamplers << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindUniformBuffers = " << value.maxPerStageDescriptorUpdateAfterBindUniformBuffers << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindStorageBuffers = " << value.maxPerStageDescriptorUpdateAfterBindStorageBuffers << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindSampledImages = " << value.maxPerStageDescriptorUpdateAfterBindSampledImages << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindStorageImages = " << value.maxPerStageDescriptorUpdateAfterBindStorageImages << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindInputAttachments = " << value.maxPerStageDescriptorUpdateAfterBindInputAttachments << '\n';
	s << "\tmaxPerStageUpdateAfterBindResources = " << value.maxPerStageUpdateAfterBindResources << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindSamplers = " << value.maxDescriptorSetUpdateAfterBindSamplers << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffers = " << value.maxDescriptorSetUpdateAfterBindUniformBuffers << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindUniformBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffers = " << value.maxDescriptorSetUpdateAfterBindStorageBuffers << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindStorageBuffersDynamic = " << value.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindSampledImages = " << value.maxDescriptorSetUpdateAfterBindSampledImages << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindStorageImages = " << value.maxDescriptorSetUpdateAfterBindStorageImages << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindInputAttachments = " << value.maxDescriptorSetUpdateAfterBindInputAttachments << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetVariableDescriptorCountAllocateInfo& value)
{
	s << "VkDescriptorSetVariableDescriptorCountAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
	s << "\tpDescriptorCounts = " << value.pDescriptorCounts << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorSetVariableDescriptorCountLayoutSupport& value)
{
	s << "VkDescriptorSetVariableDescriptorCountLayoutSupport = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxVariableDescriptorCount = " << value.maxVariableDescriptorCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassDescriptionDepthStencilResolve& value)
{
	s << "VkSubpassDescriptionDepthStencilResolve = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdepthResolveMode = " << value.depthResolveMode << '\n';
	s << "\tstencilResolveMode = " << value.stencilResolveMode << '\n';
	s << "\tpDepthStencilResolveAttachment = " << value.pDepthStencilResolveAttachment << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDepthStencilResolveProperties& value)
{
	s << "VkPhysicalDeviceDepthStencilResolveProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsupportedDepthResolveModes = " << getResolveModeFlagsStr(value.supportedDepthResolveModes) << '\n';
	s << "\tsupportedStencilResolveModes = " << getResolveModeFlagsStr(value.supportedStencilResolveModes) << '\n';
	s << "\tindependentResolveNone = " << value.independentResolveNone << '\n';
	s << "\tindependentResolve = " << value.independentResolve << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceScalarBlockLayoutFeatures& value)
{
	s << "VkPhysicalDeviceScalarBlockLayoutFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tscalarBlockLayout = " << value.scalarBlockLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageStencilUsageCreateInfo& value)
{
	s << "VkImageStencilUsageCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstencilUsage = " << getImageUsageFlagsStr(value.stencilUsage) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSamplerReductionModeCreateInfo& value)
{
	s << "VkSamplerReductionModeCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\treductionMode = " << value.reductionMode << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSamplerFilterMinmaxProperties& value)
{
	s << "VkPhysicalDeviceSamplerFilterMinmaxProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfilterMinmaxSingleComponentFormats = " << value.filterMinmaxSingleComponentFormats << '\n';
	s << "\tfilterMinmaxImageComponentMapping = " << value.filterMinmaxImageComponentMapping << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVulkanMemoryModelFeatures& value)
{
	s << "VkPhysicalDeviceVulkanMemoryModelFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tvulkanMemoryModel = " << value.vulkanMemoryModel << '\n';
	s << "\tvulkanMemoryModelDeviceScope = " << value.vulkanMemoryModelDeviceScope << '\n';
	s << "\tvulkanMemoryModelAvailabilityVisibilityChains = " << value.vulkanMemoryModelAvailabilityVisibilityChains << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImagelessFramebufferFeatures& value)
{
	s << "VkPhysicalDeviceImagelessFramebufferFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timagelessFramebuffer = " << value.imagelessFramebuffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFramebufferAttachmentImageInfo& value)
{
	s << "VkFramebufferAttachmentImageInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
	s << "\twidth = " << value.width << '\n';
	s << "\theight = " << value.height << '\n';
	s << "\tlayerCount = " << value.layerCount << '\n';
	s << "\tviewFormatCount = " << value.viewFormatCount << '\n';
	s << "\tpViewFormats = " << value.pViewFormats << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFramebufferAttachmentsCreateInfo& value)
{
	s << "VkFramebufferAttachmentsCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tattachmentImageInfoCount = " << value.attachmentImageInfoCount << '\n';
	s << "\tpAttachmentImageInfos = " << value.pAttachmentImageInfos << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassAttachmentBeginInfo& value)
{
	s << "VkRenderPassAttachmentBeginInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tattachmentCount = " << value.attachmentCount << '\n';
	s << "\tpAttachments = " << value.pAttachments << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceUniformBufferStandardLayoutFeatures& value)
{
	s << "VkPhysicalDeviceUniformBufferStandardLayoutFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tuniformBufferStandardLayout = " << value.uniformBufferStandardLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures& value)
{
	s << "VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderSubgroupExtendedTypes = " << value.shaderSubgroupExtendedTypes << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures& value)
{
	s << "VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tseparateDepthStencilLayouts = " << value.separateDepthStencilLayouts << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentReferenceStencilLayout& value)
{
	s << "VkAttachmentReferenceStencilLayout = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstencilLayout = " << value.stencilLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentDescriptionStencilLayout& value)
{
	s << "VkAttachmentDescriptionStencilLayout = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstencilInitialLayout = " << value.stencilInitialLayout << '\n';
	s << "\tstencilFinalLayout = " << value.stencilFinalLayout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceHostQueryResetFeatures& value)
{
	s << "VkPhysicalDeviceHostQueryResetFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thostQueryReset = " << value.hostQueryReset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTimelineSemaphoreFeatures& value)
{
	s << "VkPhysicalDeviceTimelineSemaphoreFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttimelineSemaphore = " << value.timelineSemaphore << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTimelineSemaphoreProperties& value)
{
	s << "VkPhysicalDeviceTimelineSemaphoreProperties = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxTimelineSemaphoreValueDifference = " << value.maxTimelineSemaphoreValueDifference << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSemaphoreTypeCreateInfo& value)
{
	s << "VkSemaphoreTypeCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsemaphoreType = " << value.semaphoreType << '\n';
	s << "\tinitialValue = " << value.initialValue << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkTimelineSemaphoreSubmitInfo& value)
{
	s << "VkTimelineSemaphoreSubmitInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\twaitSemaphoreValueCount = " << value.waitSemaphoreValueCount << '\n';
	s << "\tpWaitSemaphoreValues = " << value.pWaitSemaphoreValues << '\n';
	s << "\tsignalSemaphoreValueCount = " << value.signalSemaphoreValueCount << '\n';
	s << "\tpSignalSemaphoreValues = " << value.pSignalSemaphoreValues << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSemaphoreWaitInfo& value)
{
	s << "VkSemaphoreWaitInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getSemaphoreWaitFlagsStr(value.flags) << '\n';
	s << "\tsemaphoreCount = " << value.semaphoreCount << '\n';
	s << "\tpSemaphores = " << value.pSemaphores << '\n';
	s << "\tpValues = " << value.pValues << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSemaphoreSignalInfo& value)
{
	s << "VkSemaphoreSignalInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsemaphore = " << value.semaphore << '\n';
	s << "\tvalue = " << value.value << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBufferDeviceAddressFeatures& value)
{
	s << "VkPhysicalDeviceBufferDeviceAddressFeatures = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbufferDeviceAddress = " << value.bufferDeviceAddress << '\n';
	s << "\tbufferDeviceAddressCaptureReplay = " << value.bufferDeviceAddressCaptureReplay << '\n';
	s << "\tbufferDeviceAddressMultiDevice = " << value.bufferDeviceAddressMultiDevice << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferDeviceAddressInfo& value)
{
	s << "VkBufferDeviceAddressInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferOpaqueCaptureAddressCreateInfo& value)
{
	s << "VkBufferOpaqueCaptureAddressCreateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\topaqueCaptureAddress = " << value.opaqueCaptureAddress << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryOpaqueCaptureAddressAllocateInfo& value)
{
	s << "VkMemoryOpaqueCaptureAddressAllocateInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\topaqueCaptureAddress = " << value.opaqueCaptureAddress << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceMemoryOpaqueCaptureAddressInfo& value)
{
	s << "VkDeviceMemoryOpaqueCaptureAddressInfo = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilitiesKHR& value)
{
	s << "VkSurfaceCapabilitiesKHR = {\n";
	s << "\tminImageCount = " << value.minImageCount << '\n';
	s << "\tmaxImageCount = " << value.maxImageCount << '\n';
	s << "\tcurrentExtent = " << value.currentExtent << '\n';
	s << "\tminImageExtent = " << value.minImageExtent << '\n';
	s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
	s << "\tcurrentTransform = " << value.currentTransform << '\n';
	s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
	s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceFormatKHR& value)
{
	s << "VkSurfaceFormatKHR = {\n";
	s << "\tformat = " << value.format << '\n';
	s << "\tcolorSpace = " << value.colorSpace << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSwapchainCreateInfoKHR& value)
{
	s << "VkSwapchainCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getSwapchainCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tsurface = " << value.surface << '\n';
	s << "\tminImageCount = " << value.minImageCount << '\n';
	s << "\timageFormat = " << value.imageFormat << '\n';
	s << "\timageColorSpace = " << value.imageColorSpace << '\n';
	s << "\timageExtent = " << value.imageExtent << '\n';
	s << "\timageArrayLayers = " << value.imageArrayLayers << '\n';
	s << "\timageUsage = " << getImageUsageFlagsStr(value.imageUsage) << '\n';
	s << "\timageSharingMode = " << value.imageSharingMode << '\n';
	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
	s << "\tpreTransform = " << value.preTransform << '\n';
	s << "\tcompositeAlpha = " << value.compositeAlpha << '\n';
	s << "\tpresentMode = " << value.presentMode << '\n';
	s << "\tclipped = " << value.clipped << '\n';
	s << "\toldSwapchain = " << value.oldSwapchain << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPresentInfoKHR& value)
{
	s << "VkPresentInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
	s << "\tswapchainCount = " << value.swapchainCount << '\n';
	s << "\tpSwapchains = " << value.pSwapchains << '\n';
	s << "\tpImageIndices = " << value.pImageIndices << '\n';
	s << "\tpResults = " << value.pResults << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageSwapchainCreateInfoKHR& value)
{
	s << "VkImageSwapchainCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tswapchain = " << value.swapchain << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindImageMemorySwapchainInfoKHR& value)
{
	s << "VkBindImageMemorySwapchainInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tswapchain = " << value.swapchain << '\n';
	s << "\timageIndex = " << value.imageIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAcquireNextImageInfoKHR& value)
{
	s << "VkAcquireNextImageInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tswapchain = " << value.swapchain << '\n';
	s << "\ttimeout = " << value.timeout << '\n';
	s << "\tsemaphore = " << value.semaphore << '\n';
	s << "\tfence = " << value.fence << '\n';
	s << "\tdeviceMask = " << value.deviceMask << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHR& value)
{
	s << "VkDeviceGroupPresentCapabilitiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpresentMask = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.presentMask), DE_ARRAY_END(value.presentMask)) << '\n';
	s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHRStr(value.modes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentInfoKHR& value)
{
	s << "VkDeviceGroupPresentInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tswapchainCount = " << value.swapchainCount << '\n';
	s << "\tpDeviceMasks = " << value.pDeviceMasks << '\n';
	s << "\tmode = " << value.mode << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSwapchainCreateInfoKHR& value)
{
	s << "VkDeviceGroupSwapchainCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHRStr(value.modes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPropertiesKHR& value)
{
	s << "VkDisplayPropertiesKHR = {\n";
	s << "\tdisplay = " << value.display << '\n';
	s << "\tdisplayName = " << getCharPtrStr(value.displayName) << '\n';
	s << "\tphysicalDimensions = " << value.physicalDimensions << '\n';
	s << "\tphysicalResolution = " << value.physicalResolution << '\n';
	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
	s << "\tplaneReorderPossible = " << value.planeReorderPossible << '\n';
	s << "\tpersistentContent = " << value.persistentContent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayModeParametersKHR& value)
{
	s << "VkDisplayModeParametersKHR = {\n";
	s << "\tvisibleRegion = " << value.visibleRegion << '\n';
	s << "\trefreshRate = " << value.refreshRate << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayModePropertiesKHR& value)
{
	s << "VkDisplayModePropertiesKHR = {\n";
	s << "\tdisplayMode = " << value.displayMode << '\n';
	s << "\tparameters = " << value.parameters << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayModeCreateInfoKHR& value)
{
	s << "VkDisplayModeCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDisplayModeCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tparameters = " << value.parameters << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value)
{
	s << "VkDisplayPlaneCapabilitiesKHR = {\n";
	s << "\tsupportedAlpha = " << getDisplayPlaneAlphaFlagsKHRStr(value.supportedAlpha) << '\n';
	s << "\tminSrcPosition = " << value.minSrcPosition << '\n';
	s << "\tmaxSrcPosition = " << value.maxSrcPosition << '\n';
	s << "\tminSrcExtent = " << value.minSrcExtent << '\n';
	s << "\tmaxSrcExtent = " << value.maxSrcExtent << '\n';
	s << "\tminDstPosition = " << value.minDstPosition << '\n';
	s << "\tmaxDstPosition = " << value.maxDstPosition << '\n';
	s << "\tminDstExtent = " << value.minDstExtent << '\n';
	s << "\tmaxDstExtent = " << value.maxDstExtent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPlanePropertiesKHR& value)
{
	s << "VkDisplayPlanePropertiesKHR = {\n";
	s << "\tcurrentDisplay = " << value.currentDisplay << '\n';
	s << "\tcurrentStackIndex = " << value.currentStackIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value)
{
	s << "VkDisplaySurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDisplaySurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tdisplayMode = " << value.displayMode << '\n';
	s << "\tplaneIndex = " << value.planeIndex << '\n';
	s << "\tplaneStackIndex = " << value.planeStackIndex << '\n';
	s << "\ttransform = " << value.transform << '\n';
	s << "\tglobalAlpha = " << value.globalAlpha << '\n';
	s << "\talphaMode = " << value.alphaMode << '\n';
	s << "\timageExtent = " << value.imageExtent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPresentInfoKHR& value)
{
	s << "VkDisplayPresentInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcRect = " << value.srcRect << '\n';
	s << "\tdstRect = " << value.dstRect << '\n';
	s << "\tpersistent = " << value.persistent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportMemoryFdInfoKHR& value)
{
	s << "VkImportMemoryFdInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\tfd = " << value.fd << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryFdPropertiesKHR& value)
{
	s << "VkMemoryFdPropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryGetFdInfoKHR& value)
{
	s << "VkMemoryGetFdInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportSemaphoreFdInfoKHR& value)
{
	s << "VkImportSemaphoreFdInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsemaphore = " << value.semaphore << '\n';
	s << "\tflags = " << getSemaphoreImportFlagsStr(value.flags) << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\tfd = " << value.fd << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSemaphoreGetFdInfoKHR& value)
{
	s << "VkSemaphoreGetFdInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsemaphore = " << value.semaphore << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePushDescriptorPropertiesKHR& value)
{
	s << "VkPhysicalDevicePushDescriptorPropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxPushDescriptors = " << value.maxPushDescriptors << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRectLayerKHR& value)
{
	s << "VkRectLayerKHR = {\n";
	s << "\toffset = " << value.offset << '\n';
	s << "\textent = " << value.extent << '\n';
	s << "\tlayer = " << value.layer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPresentRegionKHR& value)
{
	s << "VkPresentRegionKHR = {\n";
	s << "\trectangleCount = " << value.rectangleCount << '\n';
	s << "\tpRectangles = " << value.pRectangles << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPresentRegionsKHR& value)
{
	s << "VkPresentRegionsKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tswapchainCount = " << value.swapchainCount << '\n';
	s << "\tpRegions = " << value.pRegions << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSharedPresentSurfaceCapabilitiesKHR& value)
{
	s << "VkSharedPresentSurfaceCapabilitiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsharedPresentSupportedUsageFlags = " << getImageUsageFlagsStr(value.sharedPresentSupportedUsageFlags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportFenceFdInfoKHR& value)
{
	s << "VkImportFenceFdInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfence = " << value.fence << '\n';
	s << "\tflags = " << getFenceImportFlagsStr(value.flags) << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\tfd = " << value.fd << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFenceGetFdInfoKHR& value)
{
	s << "VkFenceGetFdInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfence = " << value.fence << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePerformanceQueryFeaturesKHR& value)
{
	s << "VkPhysicalDevicePerformanceQueryFeaturesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tperformanceCounterQueryPools = " << value.performanceCounterQueryPools << '\n';
	s << "\tperformanceCounterMultipleQueryPools = " << value.performanceCounterMultipleQueryPools << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePerformanceQueryPropertiesKHR& value)
{
	s << "VkPhysicalDevicePerformanceQueryPropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tallowCommandBufferQueryCopies = " << value.allowCommandBufferQueryCopies << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceCounterKHR& value)
{
	s << "VkPerformanceCounterKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tunit = " << value.unit << '\n';
	s << "\tscope = " << value.scope << '\n';
	s << "\tstorage = " << value.storage << '\n';
	s << "\tuuid = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.uuid)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.uuid))) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceCounterDescriptionKHR& value)
{
	s << "VkPerformanceCounterDescriptionKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPerformanceCounterDescriptionFlagsKHRStr(value.flags) << '\n';
	s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
	s << "\tcategory = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.category)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.category))) << '\n';
	s << "\tdescription = " << (const char*)value.description << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkQueryPoolPerformanceCreateInfoKHR& value)
{
	s << "VkQueryPoolPerformanceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
	s << "\tcounterIndexCount = " << value.counterIndexCount << '\n';
	s << "\tpCounterIndices = " << value.pCounterIndices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceCounterResultKHR& value)
{
	s << "VkPerformanceCounterResultKHR = {\n";
	s << "\tint32 = " << value.int32 << '\n';
	s << "\tint64 = " << value.int64 << '\n';
	s << "\tuint32 = " << value.uint32 << '\n';
	s << "\tuint64 = " << value.uint64 << '\n';
	s << "\tfloat32 = " << value.float32 << '\n';
	s << "\tfloat64 = " << value.float64 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAcquireProfilingLockInfoKHR& value)
{
	s << "VkAcquireProfilingLockInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getAcquireProfilingLockFlagsKHRStr(value.flags) << '\n';
	s << "\ttimeout = " << value.timeout << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceQuerySubmitInfoKHR& value)
{
	s << "VkPerformanceQuerySubmitInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcounterPassIndex = " << value.counterPassIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSurfaceInfo2KHR& value)
{
	s << "VkPhysicalDeviceSurfaceInfo2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsurface = " << value.surface << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2KHR& value)
{
	s << "VkSurfaceCapabilities2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsurfaceCapabilities = " << value.surfaceCapabilities << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceFormat2KHR& value)
{
	s << "VkSurfaceFormat2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsurfaceFormat = " << value.surfaceFormat << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayProperties2KHR& value)
{
	s << "VkDisplayProperties2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdisplayProperties = " << value.displayProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneProperties2KHR& value)
{
	s << "VkDisplayPlaneProperties2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdisplayPlaneProperties = " << value.displayPlaneProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayModeProperties2KHR& value)
{
	s << "VkDisplayModeProperties2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdisplayModeProperties = " << value.displayModeProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneInfo2KHR& value)
{
	s << "VkDisplayPlaneInfo2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmode = " << value.mode << '\n';
	s << "\tplaneIndex = " << value.planeIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilities2KHR& value)
{
	s << "VkDisplayPlaneCapabilities2KHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcapabilities = " << value.capabilities << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderClockFeaturesKHR& value)
{
	s << "VkPhysicalDeviceShaderClockFeaturesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderSubgroupClock = " << value.shaderSubgroupClock << '\n';
	s << "\tshaderDeviceClock = " << value.shaderDeviceClock << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceProtectedCapabilitiesKHR& value)
{
	s << "VkSurfaceProtectedCapabilitiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsupportsProtected = " << value.supportsProtected << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR& value)
{
	s << "VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpipelineExecutableInfo = " << value.pipelineExecutableInfo << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineInfoKHR& value)
{
	s << "VkPipelineInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpipeline = " << value.pipeline << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineExecutablePropertiesKHR& value)
{
	s << "VkPipelineExecutablePropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstages = " << getShaderStageFlagsStr(value.stages) << '\n';
	s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
	s << "\tdescription = " << (const char*)value.description << '\n';
	s << "\tsubgroupSize = " << value.subgroupSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableInfoKHR& value)
{
	s << "VkPipelineExecutableInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpipeline = " << value.pipeline << '\n';
	s << "\texecutableIndex = " << value.executableIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableStatisticValueKHR& value)
{
	s << "VkPipelineExecutableStatisticValueKHR = {\n";
	s << "\tb32 = " << value.b32 << '\n';
	s << "\ti64 = " << value.i64 << '\n';
	s << "\tu64 = " << value.u64 << '\n';
	s << "\tf64 = " << value.f64 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableStatisticKHR& value)
{
	s << "VkPipelineExecutableStatisticKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
	s << "\tdescription = " << (const char*)value.description << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\tvalue = " << value.value << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineExecutableInternalRepresentationKHR& value)
{
	s << "VkPipelineExecutableInternalRepresentationKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
	s << "\tdescription = " << (const char*)value.description << '\n';
	s << "\tisText = " << value.isText << '\n';
	s << "\tdataSize = " << value.dataSize << '\n';
	s << "\tpData = " << value.pData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value)
{
	s << "VkDebugReportCallbackCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDebugReportFlagsEXTStr(value.flags) << '\n';
	s << "\tpfnCallback = " << value.pfnCallback << '\n';
	s << "\tpUserData = " << value.pUserData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateRasterizationOrderAMD& value)
{
	s << "VkPipelineRasterizationStateRasterizationOrderAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trasterizationOrder = " << value.rasterizationOrder << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugMarkerObjectNameInfoEXT& value)
{
	s << "VkDebugMarkerObjectNameInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectType = " << value.objectType << '\n';
	s << "\tobject = " << value.object << '\n';
	s << "\tpObjectName = " << getCharPtrStr(value.pObjectName) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugMarkerObjectTagInfoEXT& value)
{
	s << "VkDebugMarkerObjectTagInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectType = " << value.objectType << '\n';
	s << "\tobject = " << value.object << '\n';
	s << "\ttagName = " << value.tagName << '\n';
	s << "\ttagSize = " << value.tagSize << '\n';
	s << "\tpTag = " << value.pTag << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugMarkerMarkerInfoEXT& value)
{
	s << "VkDebugMarkerMarkerInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpMarkerName = " << getCharPtrStr(value.pMarkerName) << '\n';
	s << "\tcolor = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.color), DE_ARRAY_END(value.color)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationImageCreateInfoNV& value)
{
	s << "VkDedicatedAllocationImageCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdedicatedAllocation = " << value.dedicatedAllocation << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationBufferCreateInfoNV& value)
{
	s << "VkDedicatedAllocationBufferCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdedicatedAllocation = " << value.dedicatedAllocation << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationMemoryAllocateInfoNV& value)
{
	s << "VkDedicatedAllocationMemoryAllocateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timage = " << value.image << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTransformFeedbackFeaturesEXT& value)
{
	s << "VkPhysicalDeviceTransformFeedbackFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttransformFeedback = " << value.transformFeedback << '\n';
	s << "\tgeometryStreams = " << value.geometryStreams << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTransformFeedbackPropertiesEXT& value)
{
	s << "VkPhysicalDeviceTransformFeedbackPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxTransformFeedbackStreams = " << value.maxTransformFeedbackStreams << '\n';
	s << "\tmaxTransformFeedbackBuffers = " << value.maxTransformFeedbackBuffers << '\n';
	s << "\tmaxTransformFeedbackBufferSize = " << value.maxTransformFeedbackBufferSize << '\n';
	s << "\tmaxTransformFeedbackStreamDataSize = " << value.maxTransformFeedbackStreamDataSize << '\n';
	s << "\tmaxTransformFeedbackBufferDataSize = " << value.maxTransformFeedbackBufferDataSize << '\n';
	s << "\tmaxTransformFeedbackBufferDataStride = " << value.maxTransformFeedbackBufferDataStride << '\n';
	s << "\ttransformFeedbackQueries = " << value.transformFeedbackQueries << '\n';
	s << "\ttransformFeedbackStreamsLinesTriangles = " << value.transformFeedbackStreamsLinesTriangles << '\n';
	s << "\ttransformFeedbackRasterizationStreamSelect = " << value.transformFeedbackRasterizationStreamSelect << '\n';
	s << "\ttransformFeedbackDraw = " << value.transformFeedbackDraw << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateStreamCreateInfoEXT& value)
{
	s << "VkPipelineRasterizationStateStreamCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineRasterizationStateStreamCreateFlagsEXTStr(value.flags) << '\n';
	s << "\trasterizationStream = " << value.rasterizationStream << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageViewHandleInfoNVX& value)
{
	s << "VkImageViewHandleInfoNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timageView = " << value.imageView << '\n';
	s << "\tdescriptorType = " << value.descriptorType << '\n';
	s << "\tsampler = " << value.sampler << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkTextureLODGatherFormatPropertiesAMD& value)
{
	s << "VkTextureLODGatherFormatPropertiesAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsupportsTextureGatherLODBiasAMD = " << value.supportsTextureGatherLODBiasAMD << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkShaderResourceUsageAMD& value)
{
	s << "VkShaderResourceUsageAMD = {\n";
	s << "\tnumUsedVgprs = " << value.numUsedVgprs << '\n';
	s << "\tnumUsedSgprs = " << value.numUsedSgprs << '\n';
	s << "\tldsSizePerLocalWorkGroup = " << value.ldsSizePerLocalWorkGroup << '\n';
	s << "\tldsUsageSizeInBytes = " << value.ldsUsageSizeInBytes << '\n';
	s << "\tscratchMemUsageInBytes = " << value.scratchMemUsageInBytes << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkShaderStatisticsInfoAMD& value)
{
	s << "VkShaderStatisticsInfoAMD = {\n";
	s << "\tshaderStageMask = " << getShaderStageFlagsStr(value.shaderStageMask) << '\n';
	s << "\tresourceUsage = " << value.resourceUsage << '\n';
	s << "\tnumPhysicalVgprs = " << value.numPhysicalVgprs << '\n';
	s << "\tnumPhysicalSgprs = " << value.numPhysicalSgprs << '\n';
	s << "\tnumAvailableVgprs = " << value.numAvailableVgprs << '\n';
	s << "\tnumAvailableSgprs = " << value.numAvailableSgprs << '\n';
	s << "\tcomputeWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.computeWorkGroupSize), DE_ARRAY_END(value.computeWorkGroupSize)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCornerSampledImageFeaturesNV& value)
{
	s << "VkPhysicalDeviceCornerSampledImageFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcornerSampledImage = " << value.cornerSampledImage << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalImageFormatPropertiesNV& value)
{
	s << "VkExternalImageFormatPropertiesNV = {\n";
	s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
	s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsNVStr(value.externalMemoryFeatures) << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.compatibleHandleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalMemoryImageCreateInfoNV& value)
{
	s << "VkExternalMemoryImageCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfoNV& value)
{
	s << "VkExportMemoryAllocateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkValidationFlagsEXT& value)
{
	s << "VkValidationFlagsEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdisabledValidationCheckCount = " << value.disabledValidationCheckCount << '\n';
	s << "\tpDisabledValidationChecks = " << value.pDisabledValidationChecks << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT& value)
{
	s << "VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttextureCompressionASTC_HDR = " << value.textureCompressionASTC_HDR << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageViewASTCDecodeModeEXT& value)
{
	s << "VkImageViewASTCDecodeModeEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdecodeMode = " << value.decodeMode << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceASTCDecodeFeaturesEXT& value)
{
	s << "VkPhysicalDeviceASTCDecodeFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdecodeModeSharedExponent = " << value.decodeModeSharedExponent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkConditionalRenderingBeginInfoEXT& value)
{
	s << "VkConditionalRenderingBeginInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << "\tflags = " << getConditionalRenderingFlagsEXTStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceConditionalRenderingFeaturesEXT& value)
{
	s << "VkPhysicalDeviceConditionalRenderingFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tconditionalRendering = " << value.conditionalRendering << '\n';
	s << "\tinheritedConditionalRendering = " << value.inheritedConditionalRendering << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceConditionalRenderingInfoEXT& value)
{
	s << "VkCommandBufferInheritanceConditionalRenderingInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tconditionalRenderingEnable = " << value.conditionalRenderingEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGeneratedCommandsFeaturesNVX& value)
{
	s << "VkDeviceGeneratedCommandsFeaturesNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcomputeBindingPointSupport = " << value.computeBindingPointSupport << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceGeneratedCommandsLimitsNVX& value)
{
	s << "VkDeviceGeneratedCommandsLimitsNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxIndirectCommandsLayoutTokenCount = " << value.maxIndirectCommandsLayoutTokenCount << '\n';
	s << "\tmaxObjectEntryCounts = " << value.maxObjectEntryCounts << '\n';
	s << "\tminSequenceCountBufferOffsetAlignment = " << value.minSequenceCountBufferOffsetAlignment << '\n';
	s << "\tminSequenceIndexBufferOffsetAlignment = " << value.minSequenceIndexBufferOffsetAlignment << '\n';
	s << "\tminCommandsTokenBufferOffsetAlignment = " << value.minCommandsTokenBufferOffsetAlignment << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsTokenNVX& value)
{
	s << "VkIndirectCommandsTokenNVX = {\n";
	s << "\ttokenType = " << value.tokenType << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsLayoutTokenNVX& value)
{
	s << "VkIndirectCommandsLayoutTokenNVX = {\n";
	s << "\ttokenType = " << value.tokenType << '\n';
	s << "\tbindingUnit = " << value.bindingUnit << '\n';
	s << "\tdynamicCount = " << value.dynamicCount << '\n';
	s << "\tdivisor = " << value.divisor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsLayoutCreateInfoNVX& value)
{
	s << "VkIndirectCommandsLayoutCreateInfoNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
	s << "\tflags = " << getIndirectCommandsLayoutUsageFlagsNVXStr(value.flags) << '\n';
	s << "\ttokenCount = " << value.tokenCount << '\n';
	s << "\tpTokens = " << value.pTokens << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCmdProcessCommandsInfoNVX& value)
{
	s << "VkCmdProcessCommandsInfoNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectTable = " << value.objectTable << '\n';
	s << "\tindirectCommandsLayout = " << value.indirectCommandsLayout << '\n';
	s << "\tindirectCommandsTokenCount = " << value.indirectCommandsTokenCount << '\n';
	s << "\tpIndirectCommandsTokens = " << value.pIndirectCommandsTokens << '\n';
	s << "\tmaxSequencesCount = " << value.maxSequencesCount << '\n';
	s << "\ttargetCommandBuffer = " << value.targetCommandBuffer << '\n';
	s << "\tsequencesCountBuffer = " << value.sequencesCountBuffer << '\n';
	s << "\tsequencesCountOffset = " << value.sequencesCountOffset << '\n';
	s << "\tsequencesIndexBuffer = " << value.sequencesIndexBuffer << '\n';
	s << "\tsequencesIndexOffset = " << value.sequencesIndexOffset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCmdReserveSpaceForCommandsInfoNVX& value)
{
	s << "VkCmdReserveSpaceForCommandsInfoNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectTable = " << value.objectTable << '\n';
	s << "\tindirectCommandsLayout = " << value.indirectCommandsLayout << '\n';
	s << "\tmaxSequencesCount = " << value.maxSequencesCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTableCreateInfoNVX& value)
{
	s << "VkObjectTableCreateInfoNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectCount = " << value.objectCount << '\n';
	s << "\tpObjectEntryTypes = " << value.pObjectEntryTypes << '\n';
	s << "\tpObjectEntryCounts = " << value.pObjectEntryCounts << '\n';
	s << "\tpObjectEntryUsageFlags = " << value.pObjectEntryUsageFlags << '\n';
	s << "\tmaxUniformBuffersPerDescriptor = " << value.maxUniformBuffersPerDescriptor << '\n';
	s << "\tmaxStorageBuffersPerDescriptor = " << value.maxStorageBuffersPerDescriptor << '\n';
	s << "\tmaxStorageImagesPerDescriptor = " << value.maxStorageImagesPerDescriptor << '\n';
	s << "\tmaxSampledImagesPerDescriptor = " << value.maxSampledImagesPerDescriptor << '\n';
	s << "\tmaxPipelineLayouts = " << value.maxPipelineLayouts << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTableEntryNVX& value)
{
	s << "VkObjectTableEntryNVX = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTablePipelineEntryNVX& value)
{
	s << "VkObjectTablePipelineEntryNVX = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
	s << "\tpipeline = " << value.pipeline << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTableDescriptorSetEntryNVX& value)
{
	s << "VkObjectTableDescriptorSetEntryNVX = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
	s << "\tdescriptorSet = " << value.descriptorSet << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTableVertexBufferEntryNVX& value)
{
	s << "VkObjectTableVertexBufferEntryNVX = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTableIndexBufferEntryNVX& value)
{
	s << "VkObjectTableIndexBufferEntryNVX = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << "\tindexType = " << value.indexType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkObjectTablePushConstantEntryNVX& value)
{
	s << "VkObjectTablePushConstantEntryNVX = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkViewportWScalingNV& value)
{
	s << "VkViewportWScalingNV = {\n";
	s << "\txcoeff = " << value.xcoeff << '\n';
	s << "\tycoeff = " << value.ycoeff << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineViewportWScalingStateCreateInfoNV& value)
{
	s << "VkPipelineViewportWScalingStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tviewportWScalingEnable = " << value.viewportWScalingEnable << '\n';
	s << "\tviewportCount = " << value.viewportCount << '\n';
	s << "\tpViewportWScalings = " << value.pViewportWScalings << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2EXT& value)
{
	s << "VkSurfaceCapabilities2EXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tminImageCount = " << value.minImageCount << '\n';
	s << "\tmaxImageCount = " << value.maxImageCount << '\n';
	s << "\tcurrentExtent = " << value.currentExtent << '\n';
	s << "\tminImageExtent = " << value.minImageExtent << '\n';
	s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
	s << "\tcurrentTransform = " << value.currentTransform << '\n';
	s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
	s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
	s << "\tsupportedSurfaceCounters = " << getSurfaceCounterFlagsEXTStr(value.supportedSurfaceCounters) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayPowerInfoEXT& value)
{
	s << "VkDisplayPowerInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpowerState = " << value.powerState << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceEventInfoEXT& value)
{
	s << "VkDeviceEventInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceEvent = " << value.deviceEvent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayEventInfoEXT& value)
{
	s << "VkDisplayEventInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdisplayEvent = " << value.displayEvent << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSwapchainCounterCreateInfoEXT& value)
{
	s << "VkSwapchainCounterCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsurfaceCounters = " << getSurfaceCounterFlagsEXTStr(value.surfaceCounters) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRefreshCycleDurationGOOGLE& value)
{
	s << "VkRefreshCycleDurationGOOGLE = {\n";
	s << "\trefreshDuration = " << value.refreshDuration << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPastPresentationTimingGOOGLE& value)
{
	s << "VkPastPresentationTimingGOOGLE = {\n";
	s << "\tpresentID = " << value.presentID << '\n';
	s << "\tdesiredPresentTime = " << value.desiredPresentTime << '\n';
	s << "\tactualPresentTime = " << value.actualPresentTime << '\n';
	s << "\tearliestPresentTime = " << value.earliestPresentTime << '\n';
	s << "\tpresentMargin = " << value.presentMargin << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPresentTimeGOOGLE& value)
{
	s << "VkPresentTimeGOOGLE = {\n";
	s << "\tpresentID = " << value.presentID << '\n';
	s << "\tdesiredPresentTime = " << value.desiredPresentTime << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPresentTimesInfoGOOGLE& value)
{
	s << "VkPresentTimesInfoGOOGLE = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tswapchainCount = " << value.swapchainCount << '\n';
	s << "\tpTimes = " << value.pTimes << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX& value)
{
	s << "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tperViewPositionAllComponents = " << value.perViewPositionAllComponents << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkViewportSwizzleNV& value)
{
	s << "VkViewportSwizzleNV = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << "\tz = " << value.z << '\n';
	s << "\tw = " << value.w << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineViewportSwizzleStateCreateInfoNV& value)
{
	s << "VkPipelineViewportSwizzleStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineViewportSwizzleStateCreateFlagsNVStr(value.flags) << '\n';
	s << "\tviewportCount = " << value.viewportCount << '\n';
	s << "\tpViewportSwizzles = " << value.pViewportSwizzles << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDiscardRectanglePropertiesEXT& value)
{
	s << "VkPhysicalDeviceDiscardRectanglePropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxDiscardRectangles = " << value.maxDiscardRectangles << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineDiscardRectangleStateCreateInfoEXT& value)
{
	s << "VkPipelineDiscardRectangleStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineDiscardRectangleStateCreateFlagsEXTStr(value.flags) << '\n';
	s << "\tdiscardRectangleMode = " << value.discardRectangleMode << '\n';
	s << "\tdiscardRectangleCount = " << value.discardRectangleCount << '\n';
	s << "\tpDiscardRectangles = " << value.pDiscardRectangles << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceConservativeRasterizationPropertiesEXT& value)
{
	s << "VkPhysicalDeviceConservativeRasterizationPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tprimitiveOverestimationSize = " << value.primitiveOverestimationSize << '\n';
	s << "\tmaxExtraPrimitiveOverestimationSize = " << value.maxExtraPrimitiveOverestimationSize << '\n';
	s << "\textraPrimitiveOverestimationSizeGranularity = " << value.extraPrimitiveOverestimationSizeGranularity << '\n';
	s << "\tprimitiveUnderestimation = " << value.primitiveUnderestimation << '\n';
	s << "\tconservativePointAndLineRasterization = " << value.conservativePointAndLineRasterization << '\n';
	s << "\tdegenerateTrianglesRasterized = " << value.degenerateTrianglesRasterized << '\n';
	s << "\tdegenerateLinesRasterized = " << value.degenerateLinesRasterized << '\n';
	s << "\tfullyCoveredFragmentShaderInputVariable = " << value.fullyCoveredFragmentShaderInputVariable << '\n';
	s << "\tconservativeRasterizationPostDepthCoverage = " << value.conservativeRasterizationPostDepthCoverage << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationConservativeStateCreateInfoEXT& value)
{
	s << "VkPipelineRasterizationConservativeStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineRasterizationConservativeStateCreateFlagsEXTStr(value.flags) << '\n';
	s << "\tconservativeRasterizationMode = " << value.conservativeRasterizationMode << '\n';
	s << "\textraPrimitiveOverestimationSize = " << value.extraPrimitiveOverestimationSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDepthClipEnableFeaturesEXT& value)
{
	s << "VkPhysicalDeviceDepthClipEnableFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdepthClipEnable = " << value.depthClipEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationDepthClipStateCreateInfoEXT& value)
{
	s << "VkPipelineRasterizationDepthClipStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineRasterizationDepthClipStateCreateFlagsEXTStr(value.flags) << '\n';
	s << "\tdepthClipEnable = " << value.depthClipEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkXYColorEXT& value)
{
	s << "VkXYColorEXT = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkHdrMetadataEXT& value)
{
	s << "VkHdrMetadataEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdisplayPrimaryRed = " << value.displayPrimaryRed << '\n';
	s << "\tdisplayPrimaryGreen = " << value.displayPrimaryGreen << '\n';
	s << "\tdisplayPrimaryBlue = " << value.displayPrimaryBlue << '\n';
	s << "\twhitePoint = " << value.whitePoint << '\n';
	s << "\tmaxLuminance = " << value.maxLuminance << '\n';
	s << "\tminLuminance = " << value.minLuminance << '\n';
	s << "\tmaxContentLightLevel = " << value.maxContentLightLevel << '\n';
	s << "\tmaxFrameAverageLightLevel = " << value.maxFrameAverageLightLevel << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugUtilsObjectNameInfoEXT& value)
{
	s << "VkDebugUtilsObjectNameInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectType = " << value.objectType << '\n';
	s << "\tobjectHandle = " << value.objectHandle << '\n';
	s << "\tpObjectName = " << getCharPtrStr(value.pObjectName) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugUtilsObjectTagInfoEXT& value)
{
	s << "VkDebugUtilsObjectTagInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tobjectType = " << value.objectType << '\n';
	s << "\tobjectHandle = " << value.objectHandle << '\n';
	s << "\ttagName = " << value.tagName << '\n';
	s << "\ttagSize = " << value.tagSize << '\n';
	s << "\tpTag = " << value.pTag << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugUtilsLabelEXT& value)
{
	s << "VkDebugUtilsLabelEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpLabelName = " << getCharPtrStr(value.pLabelName) << '\n';
	s << "\tcolor = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.color), DE_ARRAY_END(value.color)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugUtilsMessengerCallbackDataEXT& value)
{
	s << "VkDebugUtilsMessengerCallbackDataEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDebugUtilsMessengerCallbackDataFlagsEXTStr(value.flags) << '\n';
	s << "\tpMessageIdName = " << getCharPtrStr(value.pMessageIdName) << '\n';
	s << "\tmessageIdNumber = " << value.messageIdNumber << '\n';
	s << "\tpMessage = " << getCharPtrStr(value.pMessage) << '\n';
	s << "\tqueueLabelCount = " << value.queueLabelCount << '\n';
	s << "\tpQueueLabels = " << value.pQueueLabels << '\n';
	s << "\tcmdBufLabelCount = " << value.cmdBufLabelCount << '\n';
	s << "\tpCmdBufLabels = " << value.pCmdBufLabels << '\n';
	s << "\tobjectCount = " << value.objectCount << '\n';
	s << "\tpObjects = " << value.pObjects << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDebugUtilsMessengerCreateInfoEXT& value)
{
	s << "VkDebugUtilsMessengerCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDebugUtilsMessengerCreateFlagsEXTStr(value.flags) << '\n';
	s << "\tmessageSeverity = " << getDebugUtilsMessageSeverityFlagsEXTStr(value.messageSeverity) << '\n';
	s << "\tmessageType = " << getDebugUtilsMessageTypeFlagsEXTStr(value.messageType) << '\n';
	s << "\tpfnUserCallback = " << value.pfnUserCallback << '\n';
	s << "\tpUserData = " << value.pUserData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceInlineUniformBlockFeaturesEXT& value)
{
	s << "VkPhysicalDeviceInlineUniformBlockFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tinlineUniformBlock = " << value.inlineUniformBlock << '\n';
	s << "\tdescriptorBindingInlineUniformBlockUpdateAfterBind = " << value.descriptorBindingInlineUniformBlockUpdateAfterBind << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceInlineUniformBlockPropertiesEXT& value)
{
	s << "VkPhysicalDeviceInlineUniformBlockPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxInlineUniformBlockSize = " << value.maxInlineUniformBlockSize << '\n';
	s << "\tmaxPerStageDescriptorInlineUniformBlocks = " << value.maxPerStageDescriptorInlineUniformBlocks << '\n';
	s << "\tmaxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = " << value.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks << '\n';
	s << "\tmaxDescriptorSetInlineUniformBlocks = " << value.maxDescriptorSetInlineUniformBlocks << '\n';
	s << "\tmaxDescriptorSetUpdateAfterBindInlineUniformBlocks = " << value.maxDescriptorSetUpdateAfterBindInlineUniformBlocks << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSetInlineUniformBlockEXT& value)
{
	s << "VkWriteDescriptorSetInlineUniformBlockEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdataSize = " << value.dataSize << '\n';
	s << "\tpData = " << value.pData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolInlineUniformBlockCreateInfoEXT& value)
{
	s << "VkDescriptorPoolInlineUniformBlockCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxInlineUniformBlockBindings = " << value.maxInlineUniformBlockBindings << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSampleLocationEXT& value)
{
	s << "VkSampleLocationEXT = {\n";
	s << "\tx = " << value.x << '\n';
	s << "\ty = " << value.y << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSampleLocationsInfoEXT& value)
{
	s << "VkSampleLocationsInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsampleLocationsPerPixel = " << value.sampleLocationsPerPixel << '\n';
	s << "\tsampleLocationGridSize = " << value.sampleLocationGridSize << '\n';
	s << "\tsampleLocationsCount = " << value.sampleLocationsCount << '\n';
	s << "\tpSampleLocations = " << value.pSampleLocations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAttachmentSampleLocationsEXT& value)
{
	s << "VkAttachmentSampleLocationsEXT = {\n";
	s << "\tattachmentIndex = " << value.attachmentIndex << '\n';
	s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSubpassSampleLocationsEXT& value)
{
	s << "VkSubpassSampleLocationsEXT = {\n";
	s << "\tsubpassIndex = " << value.subpassIndex << '\n';
	s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassSampleLocationsBeginInfoEXT& value)
{
	s << "VkRenderPassSampleLocationsBeginInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tattachmentInitialSampleLocationsCount = " << value.attachmentInitialSampleLocationsCount << '\n';
	s << "\tpAttachmentInitialSampleLocations = " << value.pAttachmentInitialSampleLocations << '\n';
	s << "\tpostSubpassSampleLocationsCount = " << value.postSubpassSampleLocationsCount << '\n';
	s << "\tpPostSubpassSampleLocations = " << value.pPostSubpassSampleLocations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineSampleLocationsStateCreateInfoEXT& value)
{
	s << "VkPipelineSampleLocationsStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsampleLocationsEnable = " << value.sampleLocationsEnable << '\n';
	s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSampleLocationsPropertiesEXT& value)
{
	s << "VkPhysicalDeviceSampleLocationsPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsampleLocationSampleCounts = " << getSampleCountFlagsStr(value.sampleLocationSampleCounts) << '\n';
	s << "\tmaxSampleLocationGridSize = " << value.maxSampleLocationGridSize << '\n';
	s << "\tsampleLocationCoordinateRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.sampleLocationCoordinateRange), DE_ARRAY_END(value.sampleLocationCoordinateRange)) << '\n';
	s << "\tsampleLocationSubPixelBits = " << value.sampleLocationSubPixelBits << '\n';
	s << "\tvariableSampleLocations = " << value.variableSampleLocations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMultisamplePropertiesEXT& value)
{
	s << "VkMultisamplePropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxSampleLocationGridSize = " << value.maxSampleLocationGridSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& value)
{
	s << "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tadvancedBlendCoherentOperations = " << value.advancedBlendCoherentOperations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& value)
{
	s << "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tadvancedBlendMaxColorAttachments = " << value.advancedBlendMaxColorAttachments << '\n';
	s << "\tadvancedBlendIndependentBlend = " << value.advancedBlendIndependentBlend << '\n';
	s << "\tadvancedBlendNonPremultipliedSrcColor = " << value.advancedBlendNonPremultipliedSrcColor << '\n';
	s << "\tadvancedBlendNonPremultipliedDstColor = " << value.advancedBlendNonPremultipliedDstColor << '\n';
	s << "\tadvancedBlendCorrelatedOverlap = " << value.advancedBlendCorrelatedOverlap << '\n';
	s << "\tadvancedBlendAllOperations = " << value.advancedBlendAllOperations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAdvancedStateCreateInfoEXT& value)
{
	s << "VkPipelineColorBlendAdvancedStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsrcPremultiplied = " << value.srcPremultiplied << '\n';
	s << "\tdstPremultiplied = " << value.dstPremultiplied << '\n';
	s << "\tblendOverlap = " << value.blendOverlap << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCoverageToColorStateCreateInfoNV& value)
{
	s << "VkPipelineCoverageToColorStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCoverageToColorStateCreateFlagsNVStr(value.flags) << '\n';
	s << "\tcoverageToColorEnable = " << value.coverageToColorEnable << '\n';
	s << "\tcoverageToColorLocation = " << value.coverageToColorLocation << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCoverageModulationStateCreateInfoNV& value)
{
	s << "VkPipelineCoverageModulationStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCoverageModulationStateCreateFlagsNVStr(value.flags) << '\n';
	s << "\tcoverageModulationMode = " << value.coverageModulationMode << '\n';
	s << "\tcoverageModulationTableEnable = " << value.coverageModulationTableEnable << '\n';
	s << "\tcoverageModulationTableCount = " << value.coverageModulationTableCount << '\n';
	s << "\tpCoverageModulationTable = " << value.pCoverageModulationTable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV& value)
{
	s << "VkPhysicalDeviceShaderSMBuiltinsPropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderSMCount = " << value.shaderSMCount << '\n';
	s << "\tshaderWarpsPerSM = " << value.shaderWarpsPerSM << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV& value)
{
	s << "VkPhysicalDeviceShaderSMBuiltinsFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderSMBuiltins = " << value.shaderSMBuiltins << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDrmFormatModifierPropertiesEXT& value)
{
	s << "VkDrmFormatModifierPropertiesEXT = {\n";
	s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
	s << "\tdrmFormatModifierPlaneCount = " << value.drmFormatModifierPlaneCount << '\n';
	s << "\tdrmFormatModifierTilingFeatures = " << getFormatFeatureFlagsStr(value.drmFormatModifierTilingFeatures) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDrmFormatModifierPropertiesListEXT& value)
{
	s << "VkDrmFormatModifierPropertiesListEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdrmFormatModifierCount = " << value.drmFormatModifierCount << '\n';
	s << "\tpDrmFormatModifierProperties = " << value.pDrmFormatModifierProperties << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageDrmFormatModifierInfoEXT& value)
{
	s << "VkPhysicalDeviceImageDrmFormatModifierInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
	s << "\tsharingMode = " << value.sharingMode << '\n';
	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageDrmFormatModifierListCreateInfoEXT& value)
{
	s << "VkImageDrmFormatModifierListCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdrmFormatModifierCount = " << value.drmFormatModifierCount << '\n';
	s << "\tpDrmFormatModifiers = " << value.pDrmFormatModifiers << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageDrmFormatModifierExplicitCreateInfoEXT& value)
{
	s << "VkImageDrmFormatModifierExplicitCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
	s << "\tdrmFormatModifierPlaneCount = " << value.drmFormatModifierPlaneCount << '\n';
	s << "\tpPlaneLayouts = " << value.pPlaneLayouts << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImageDrmFormatModifierPropertiesEXT& value)
{
	s << "VkImageDrmFormatModifierPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdrmFormatModifier = " << value.drmFormatModifier << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkValidationCacheCreateInfoEXT& value)
{
	s << "VkValidationCacheCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getValidationCacheCreateFlagsEXTStr(value.flags) << '\n';
	s << "\tinitialDataSize = " << value.initialDataSize << '\n';
	s << "\tpInitialData = " << value.pInitialData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkShaderModuleValidationCacheCreateInfoEXT& value)
{
	s << "VkShaderModuleValidationCacheCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tvalidationCache = " << value.validationCache << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkShadingRatePaletteNV& value)
{
	s << "VkShadingRatePaletteNV = {\n";
	s << "\tshadingRatePaletteEntryCount = " << value.shadingRatePaletteEntryCount << '\n';
	s << "\tpShadingRatePaletteEntries = " << value.pShadingRatePaletteEntries << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineViewportShadingRateImageStateCreateInfoNV& value)
{
	s << "VkPipelineViewportShadingRateImageStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshadingRateImageEnable = " << value.shadingRateImageEnable << '\n';
	s << "\tviewportCount = " << value.viewportCount << '\n';
	s << "\tpShadingRatePalettes = " << value.pShadingRatePalettes << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShadingRateImageFeaturesNV& value)
{
	s << "VkPhysicalDeviceShadingRateImageFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshadingRateImage = " << value.shadingRateImage << '\n';
	s << "\tshadingRateCoarseSampleOrder = " << value.shadingRateCoarseSampleOrder << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShadingRateImagePropertiesNV& value)
{
	s << "VkPhysicalDeviceShadingRateImagePropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshadingRateTexelSize = " << value.shadingRateTexelSize << '\n';
	s << "\tshadingRatePaletteSize = " << value.shadingRatePaletteSize << '\n';
	s << "\tshadingRateMaxCoarseSamples = " << value.shadingRateMaxCoarseSamples << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCoarseSampleLocationNV& value)
{
	s << "VkCoarseSampleLocationNV = {\n";
	s << "\tpixelX = " << value.pixelX << '\n';
	s << "\tpixelY = " << value.pixelY << '\n';
	s << "\tsample = " << value.sample << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCoarseSampleOrderCustomNV& value)
{
	s << "VkCoarseSampleOrderCustomNV = {\n";
	s << "\tshadingRate = " << value.shadingRate << '\n';
	s << "\tsampleCount = " << value.sampleCount << '\n';
	s << "\tsampleLocationCount = " << value.sampleLocationCount << '\n';
	s << "\tpSampleLocations = " << value.pSampleLocations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV& value)
{
	s << "VkPipelineViewportCoarseSampleOrderStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsampleOrderType = " << value.sampleOrderType << '\n';
	s << "\tcustomSampleOrderCount = " << value.customSampleOrderCount << '\n';
	s << "\tpCustomSampleOrders = " << value.pCustomSampleOrders << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRayTracingShaderGroupCreateInfoNV& value)
{
	s << "VkRayTracingShaderGroupCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttype = " << value.type << '\n';
	s << "\tgeneralShader = " << value.generalShader << '\n';
	s << "\tclosestHitShader = " << value.closestHitShader << '\n';
	s << "\tanyHitShader = " << value.anyHitShader << '\n';
	s << "\tintersectionShader = " << value.intersectionShader << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRayTracingPipelineCreateInfoNV& value)
{
	s << "VkRayTracingPipelineCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
	s << "\tstageCount = " << value.stageCount << '\n';
	s << "\tpStages = " << value.pStages << '\n';
	s << "\tgroupCount = " << value.groupCount << '\n';
	s << "\tpGroups = " << value.pGroups << '\n';
	s << "\tmaxRecursionDepth = " << value.maxRecursionDepth << '\n';
	s << "\tlayout = " << value.layout << '\n';
	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkGeometryTrianglesNV& value)
{
	s << "VkGeometryTrianglesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tvertexData = " << value.vertexData << '\n';
	s << "\tvertexOffset = " << value.vertexOffset << '\n';
	s << "\tvertexCount = " << value.vertexCount << '\n';
	s << "\tvertexStride = " << value.vertexStride << '\n';
	s << "\tvertexFormat = " << value.vertexFormat << '\n';
	s << "\tindexData = " << value.indexData << '\n';
	s << "\tindexOffset = " << value.indexOffset << '\n';
	s << "\tindexCount = " << value.indexCount << '\n';
	s << "\tindexType = " << value.indexType << '\n';
	s << "\ttransformData = " << value.transformData << '\n';
	s << "\ttransformOffset = " << value.transformOffset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkGeometryAABBNV& value)
{
	s << "VkGeometryAABBNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\taabbData = " << value.aabbData << '\n';
	s << "\tnumAABBs = " << value.numAABBs << '\n';
	s << "\tstride = " << value.stride << '\n';
	s << "\toffset = " << value.offset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkGeometryDataNV& value)
{
	s << "VkGeometryDataNV = {\n";
	s << "\ttriangles = " << value.triangles << '\n';
	s << "\taabbs = " << value.aabbs << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkGeometryNV& value)
{
	s << "VkGeometryNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tgeometryType = " << value.geometryType << '\n';
	s << "\tgeometry = " << value.geometry << '\n';
	s << "\tflags = " << getGeometryFlagsNVStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAccelerationStructureInfoNV& value)
{
	s << "VkAccelerationStructureInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttype = " << value.type << '\n';
	s << "\tflags = " << getBuildAccelerationStructureFlagsNVStr(value.flags) << '\n';
	s << "\tinstanceCount = " << value.instanceCount << '\n';
	s << "\tgeometryCount = " << value.geometryCount << '\n';
	s << "\tpGeometries = " << value.pGeometries << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAccelerationStructureCreateInfoNV& value)
{
	s << "VkAccelerationStructureCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcompactedSize = " << value.compactedSize << '\n';
	s << "\tinfo = " << value.info << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBindAccelerationStructureMemoryInfoNV& value)
{
	s << "VkBindAccelerationStructureMemoryInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\taccelerationStructure = " << value.accelerationStructure << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
	s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
	s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSetAccelerationStructureNV& value)
{
	s << "VkWriteDescriptorSetAccelerationStructureNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\taccelerationStructureCount = " << value.accelerationStructureCount << '\n';
	s << "\tpAccelerationStructures = " << value.pAccelerationStructures << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAccelerationStructureMemoryRequirementsInfoNV& value)
{
	s << "VkAccelerationStructureMemoryRequirementsInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttype = " << value.type << '\n';
	s << "\taccelerationStructure = " << value.accelerationStructure << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceRayTracingPropertiesNV& value)
{
	s << "VkPhysicalDeviceRayTracingPropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderGroupHandleSize = " << value.shaderGroupHandleSize << '\n';
	s << "\tmaxRecursionDepth = " << value.maxRecursionDepth << '\n';
	s << "\tmaxShaderGroupStride = " << value.maxShaderGroupStride << '\n';
	s << "\tshaderGroupBaseAlignment = " << value.shaderGroupBaseAlignment << '\n';
	s << "\tmaxGeometryCount = " << value.maxGeometryCount << '\n';
	s << "\tmaxInstanceCount = " << value.maxInstanceCount << '\n';
	s << "\tmaxTriangleCount = " << value.maxTriangleCount << '\n';
	s << "\tmaxDescriptorSetAccelerationStructures = " << value.maxDescriptorSetAccelerationStructures << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV& value)
{
	s << "VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trepresentativeFragmentTest = " << value.representativeFragmentTest << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRepresentativeFragmentTestStateCreateInfoNV& value)
{
	s << "VkPipelineRepresentativeFragmentTestStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trepresentativeFragmentTestEnable = " << value.representativeFragmentTestEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageViewImageFormatInfoEXT& value)
{
	s << "VkPhysicalDeviceImageViewImageFormatInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timageViewType = " << value.imageViewType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFilterCubicImageViewImageFormatPropertiesEXT& value)
{
	s << "VkFilterCubicImageViewImageFormatPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfilterCubic = " << value.filterCubic << '\n';
	s << "\tfilterCubicMinmax = " << value.filterCubicMinmax << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceQueueGlobalPriorityCreateInfoEXT& value)
{
	s << "VkDeviceQueueGlobalPriorityCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tglobalPriority = " << value.globalPriority << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportMemoryHostPointerInfoEXT& value)
{
	s << "VkImportMemoryHostPointerInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\tpHostPointer = " << value.pHostPointer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryHostPointerPropertiesEXT& value)
{
	s << "VkMemoryHostPointerPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalMemoryHostPropertiesEXT& value)
{
	s << "VkPhysicalDeviceExternalMemoryHostPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tminImportedHostPointerAlignment = " << value.minImportedHostPointerAlignment << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCompilerControlCreateInfoAMD& value)
{
	s << "VkPipelineCompilerControlCreateInfoAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcompilerControlFlags = " << getPipelineCompilerControlFlagsAMDStr(value.compilerControlFlags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCalibratedTimestampInfoEXT& value)
{
	s << "VkCalibratedTimestampInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttimeDomain = " << value.timeDomain << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderCorePropertiesAMD& value)
{
	s << "VkPhysicalDeviceShaderCorePropertiesAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderEngineCount = " << value.shaderEngineCount << '\n';
	s << "\tshaderArraysPerEngineCount = " << value.shaderArraysPerEngineCount << '\n';
	s << "\tcomputeUnitsPerShaderArray = " << value.computeUnitsPerShaderArray << '\n';
	s << "\tsimdPerComputeUnit = " << value.simdPerComputeUnit << '\n';
	s << "\twavefrontsPerSimd = " << value.wavefrontsPerSimd << '\n';
	s << "\twavefrontSize = " << value.wavefrontSize << '\n';
	s << "\tsgprsPerSimd = " << value.sgprsPerSimd << '\n';
	s << "\tminSgprAllocation = " << value.minSgprAllocation << '\n';
	s << "\tmaxSgprAllocation = " << value.maxSgprAllocation << '\n';
	s << "\tsgprAllocationGranularity = " << value.sgprAllocationGranularity << '\n';
	s << "\tvgprsPerSimd = " << value.vgprsPerSimd << '\n';
	s << "\tminVgprAllocation = " << value.minVgprAllocation << '\n';
	s << "\tmaxVgprAllocation = " << value.maxVgprAllocation << '\n';
	s << "\tvgprAllocationGranularity = " << value.vgprAllocationGranularity << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDeviceMemoryOverallocationCreateInfoAMD& value)
{
	s << "VkDeviceMemoryOverallocationCreateInfoAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\toverallocationBehavior = " << value.overallocationBehavior << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT& value)
{
	s << "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxVertexAttribDivisor = " << value.maxVertexAttribDivisor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDivisorDescriptionEXT& value)
{
	s << "VkVertexInputBindingDivisorDescriptionEXT = {\n";
	s << "\tbinding = " << value.binding << '\n';
	s << "\tdivisor = " << value.divisor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputDivisorStateCreateInfoEXT& value)
{
	s << "VkPipelineVertexInputDivisorStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tvertexBindingDivisorCount = " << value.vertexBindingDivisorCount << '\n';
	s << "\tpVertexBindingDivisors = " << value.pVertexBindingDivisors << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT& value)
{
	s << "VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tvertexAttributeInstanceRateDivisor = " << value.vertexAttributeInstanceRateDivisor << '\n';
	s << "\tvertexAttributeInstanceRateZeroDivisor = " << value.vertexAttributeInstanceRateZeroDivisor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCreationFeedbackEXT& value)
{
	s << "VkPipelineCreationFeedbackEXT = {\n";
	s << "\tflags = " << getPipelineCreationFeedbackFlagsEXTStr(value.flags) << '\n';
	s << "\tduration = " << value.duration << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCreationFeedbackCreateInfoEXT& value)
{
	s << "VkPipelineCreationFeedbackCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpPipelineCreationFeedback = " << value.pPipelineCreationFeedback << '\n';
	s << "\tpipelineStageCreationFeedbackCount = " << value.pipelineStageCreationFeedbackCount << '\n';
	s << "\tpPipelineStageCreationFeedbacks = " << value.pPipelineStageCreationFeedbacks << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV& value)
{
	s << "VkPhysicalDeviceComputeShaderDerivativesFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcomputeDerivativeGroupQuads = " << value.computeDerivativeGroupQuads << '\n';
	s << "\tcomputeDerivativeGroupLinear = " << value.computeDerivativeGroupLinear << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMeshShaderFeaturesNV& value)
{
	s << "VkPhysicalDeviceMeshShaderFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttaskShader = " << value.taskShader << '\n';
	s << "\tmeshShader = " << value.meshShader << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMeshShaderPropertiesNV& value)
{
	s << "VkPhysicalDeviceMeshShaderPropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmaxDrawMeshTasksCount = " << value.maxDrawMeshTasksCount << '\n';
	s << "\tmaxTaskWorkGroupInvocations = " << value.maxTaskWorkGroupInvocations << '\n';
	s << "\tmaxTaskWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxTaskWorkGroupSize), DE_ARRAY_END(value.maxTaskWorkGroupSize)) << '\n';
	s << "\tmaxTaskTotalMemorySize = " << value.maxTaskTotalMemorySize << '\n';
	s << "\tmaxTaskOutputCount = " << value.maxTaskOutputCount << '\n';
	s << "\tmaxMeshWorkGroupInvocations = " << value.maxMeshWorkGroupInvocations << '\n';
	s << "\tmaxMeshWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxMeshWorkGroupSize), DE_ARRAY_END(value.maxMeshWorkGroupSize)) << '\n';
	s << "\tmaxMeshTotalMemorySize = " << value.maxMeshTotalMemorySize << '\n';
	s << "\tmaxMeshOutputVertices = " << value.maxMeshOutputVertices << '\n';
	s << "\tmaxMeshOutputPrimitives = " << value.maxMeshOutputPrimitives << '\n';
	s << "\tmaxMeshMultiviewViewCount = " << value.maxMeshMultiviewViewCount << '\n';
	s << "\tmeshOutputPerVertexGranularity = " << value.meshOutputPerVertexGranularity << '\n';
	s << "\tmeshOutputPerPrimitiveGranularity = " << value.meshOutputPerPrimitiveGranularity << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDrawMeshTasksIndirectCommandNV& value)
{
	s << "VkDrawMeshTasksIndirectCommandNV = {\n";
	s << "\ttaskCount = " << value.taskCount << '\n';
	s << "\tfirstTask = " << value.firstTask << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV& value)
{
	s << "VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfragmentShaderBarycentric = " << value.fragmentShaderBarycentric << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderImageFootprintFeaturesNV& value)
{
	s << "VkPhysicalDeviceShaderImageFootprintFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\timageFootprint = " << value.imageFootprint << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineViewportExclusiveScissorStateCreateInfoNV& value)
{
	s << "VkPipelineViewportExclusiveScissorStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texclusiveScissorCount = " << value.exclusiveScissorCount << '\n';
	s << "\tpExclusiveScissors = " << value.pExclusiveScissors << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExclusiveScissorFeaturesNV& value)
{
	s << "VkPhysicalDeviceExclusiveScissorFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texclusiveScissor = " << value.exclusiveScissor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkQueueFamilyCheckpointPropertiesNV& value)
{
	s << "VkQueueFamilyCheckpointPropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcheckpointExecutionStageMask = " << getPipelineStageFlagsStr(value.checkpointExecutionStageMask) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCheckpointDataNV& value)
{
	s << "VkCheckpointDataNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstage = " << value.stage << '\n';
	s << "\tpCheckpointMarker = " << value.pCheckpointMarker << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL& value)
{
	s << "VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderIntegerFunctions2 = " << value.shaderIntegerFunctions2 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceValueDataINTEL& value)
{
	s << "VkPerformanceValueDataINTEL = {\n";
	s << "\tvalue32 = " << value.value32 << '\n';
	s << "\tvalue64 = " << value.value64 << '\n';
	s << "\tvalueFloat = " << value.valueFloat << '\n';
	s << "\tvalueBool = " << value.valueBool << '\n';
	s << "\tvalueString = " << getCharPtrStr(value.valueString) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceValueINTEL& value)
{
	s << "VkPerformanceValueINTEL = {\n";
	s << "\ttype = " << value.type << '\n';
	s << "\tdata = " << value.data << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkInitializePerformanceApiInfoINTEL& value)
{
	s << "VkInitializePerformanceApiInfoINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpUserData = " << value.pUserData << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkQueryPoolCreateInfoINTEL& value)
{
	s << "VkQueryPoolCreateInfoINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tperformanceCountersSampling = " << value.performanceCountersSampling << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceMarkerInfoINTEL& value)
{
	s << "VkPerformanceMarkerInfoINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmarker = " << value.marker << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceStreamMarkerInfoINTEL& value)
{
	s << "VkPerformanceStreamMarkerInfoINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmarker = " << value.marker << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceOverrideInfoINTEL& value)
{
	s << "VkPerformanceOverrideInfoINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttype = " << value.type << '\n';
	s << "\tenable = " << value.enable << '\n';
	s << "\tparameter = " << value.parameter << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPerformanceConfigurationAcquireInfoINTEL& value)
{
	s << "VkPerformanceConfigurationAcquireInfoINTEL = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttype = " << value.type << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePCIBusInfoPropertiesEXT& value)
{
	s << "VkPhysicalDevicePCIBusInfoPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpciDomain = " << value.pciDomain << '\n';
	s << "\tpciBus = " << value.pciBus << '\n';
	s << "\tpciDevice = " << value.pciDevice << '\n';
	s << "\tpciFunction = " << value.pciFunction << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkDisplayNativeHdrSurfaceCapabilitiesAMD& value)
{
	s << "VkDisplayNativeHdrSurfaceCapabilitiesAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tlocalDimmingSupport = " << value.localDimmingSupport << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSwapchainDisplayNativeHdrCreateInfoAMD& value)
{
	s << "VkSwapchainDisplayNativeHdrCreateInfoAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tlocalDimmingEnable = " << value.localDimmingEnable << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentDensityMapFeaturesEXT& value)
{
	s << "VkPhysicalDeviceFragmentDensityMapFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfragmentDensityMap = " << value.fragmentDensityMap << '\n';
	s << "\tfragmentDensityMapDynamic = " << value.fragmentDensityMapDynamic << '\n';
	s << "\tfragmentDensityMapNonSubsampledImages = " << value.fragmentDensityMapNonSubsampledImages << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentDensityMapPropertiesEXT& value)
{
	s << "VkPhysicalDeviceFragmentDensityMapPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tminFragmentDensityTexelSize = " << value.minFragmentDensityTexelSize << '\n';
	s << "\tmaxFragmentDensityTexelSize = " << value.maxFragmentDensityTexelSize << '\n';
	s << "\tfragmentDensityInvocations = " << value.fragmentDensityInvocations << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkRenderPassFragmentDensityMapCreateInfoEXT& value)
{
	s << "VkRenderPassFragmentDensityMapCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfragmentDensityMapAttachment = " << value.fragmentDensityMapAttachment << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT& value)
{
	s << "VkPhysicalDeviceSubgroupSizeControlFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsubgroupSizeControl = " << value.subgroupSizeControl << '\n';
	s << "\tcomputeFullSubgroups = " << value.computeFullSubgroups << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT& value)
{
	s << "VkPhysicalDeviceSubgroupSizeControlPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tminSubgroupSize = " << value.minSubgroupSize << '\n';
	s << "\tmaxSubgroupSize = " << value.maxSubgroupSize << '\n';
	s << "\tmaxComputeWorkgroupSubgroups = " << value.maxComputeWorkgroupSubgroups << '\n';
	s << "\trequiredSubgroupSizeStages = " << getShaderStageFlagsStr(value.requiredSubgroupSizeStages) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT& value)
{
	s << "VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trequiredSubgroupSize = " << value.requiredSubgroupSize << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderCoreProperties2AMD& value)
{
	s << "VkPhysicalDeviceShaderCoreProperties2AMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderCoreFeatures = " << getShaderCorePropertiesFlagsAMDStr(value.shaderCoreFeatures) << '\n';
	s << "\tactiveComputeUnitCount = " << value.activeComputeUnitCount << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCoherentMemoryFeaturesAMD& value)
{
	s << "VkPhysicalDeviceCoherentMemoryFeaturesAMD = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceCoherentMemory = " << value.deviceCoherentMemory << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryBudgetPropertiesEXT& value)
{
	s << "VkPhysicalDeviceMemoryBudgetPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\theapBudget = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.heapBudget), DE_ARRAY_END(value.heapBudget)) << '\n';
	s << "\theapUsage = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.heapUsage), DE_ARRAY_END(value.heapUsage)) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryPriorityFeaturesEXT& value)
{
	s << "VkPhysicalDeviceMemoryPriorityFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryPriority = " << value.memoryPriority << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryPriorityAllocateInfoEXT& value)
{
	s << "VkMemoryPriorityAllocateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpriority = " << value.priority << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV& value)
{
	s << "VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdedicatedAllocationImageAliasing = " << value.dedicatedAllocationImageAliasing << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT& value)
{
	s << "VkPhysicalDeviceBufferDeviceAddressFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbufferDeviceAddress = " << value.bufferDeviceAddress << '\n';
	s << "\tbufferDeviceAddressCaptureReplay = " << value.bufferDeviceAddressCaptureReplay << '\n';
	s << "\tbufferDeviceAddressMultiDevice = " << value.bufferDeviceAddressMultiDevice << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkBufferDeviceAddressCreateInfoEXT& value)
{
	s << "VkBufferDeviceAddressCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tdeviceAddress = " << value.deviceAddress << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceToolPropertiesEXT& value)
{
	s << "VkPhysicalDeviceToolPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tname = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.name)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.name))) << '\n';
	s << "\tversion = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.version)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.version))) << '\n';
	s << "\tpurposes = " << getToolPurposeFlagsEXTStr(value.purposes) << '\n';
	s << "\tdescription = " << (const char*)value.description << '\n';
	s << "\tlayer = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<char>(DE_ARRAY_BEGIN(value.layer)), tcu::Format::HexIterator<char>(DE_ARRAY_END(value.layer))) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkValidationFeaturesEXT& value)
{
	s << "VkValidationFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tenabledValidationFeatureCount = " << value.enabledValidationFeatureCount << '\n';
	s << "\tpEnabledValidationFeatures = " << value.pEnabledValidationFeatures << '\n';
	s << "\tdisabledValidationFeatureCount = " << value.disabledValidationFeatureCount << '\n';
	s << "\tpDisabledValidationFeatures = " << value.pDisabledValidationFeatures << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkCooperativeMatrixPropertiesNV& value)
{
	s << "VkCooperativeMatrixPropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tMSize = " << value.MSize << '\n';
	s << "\tNSize = " << value.NSize << '\n';
	s << "\tKSize = " << value.KSize << '\n';
	s << "\tAType = " << value.AType << '\n';
	s << "\tBType = " << value.BType << '\n';
	s << "\tCType = " << value.CType << '\n';
	s << "\tDType = " << value.DType << '\n';
	s << "\tscope = " << value.scope << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCooperativeMatrixFeaturesNV& value)
{
	s << "VkPhysicalDeviceCooperativeMatrixFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcooperativeMatrix = " << value.cooperativeMatrix << '\n';
	s << "\tcooperativeMatrixRobustBufferAccess = " << value.cooperativeMatrixRobustBufferAccess << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCooperativeMatrixPropertiesNV& value)
{
	s << "VkPhysicalDeviceCooperativeMatrixPropertiesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcooperativeMatrixSupportedStages = " << getShaderStageFlagsStr(value.cooperativeMatrixSupportedStages) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceCoverageReductionModeFeaturesNV& value)
{
	s << "VkPhysicalDeviceCoverageReductionModeFeaturesNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcoverageReductionMode = " << value.coverageReductionMode << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineCoverageReductionStateCreateInfoNV& value)
{
	s << "VkPipelineCoverageReductionStateCreateInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getPipelineCoverageReductionStateCreateFlagsNVStr(value.flags) << '\n';
	s << "\tcoverageReductionMode = " << value.coverageReductionMode << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFramebufferMixedSamplesCombinationNV& value)
{
	s << "VkFramebufferMixedSamplesCombinationNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tcoverageReductionMode = " << value.coverageReductionMode << '\n';
	s << "\trasterizationSamples = " << value.rasterizationSamples << '\n';
	s << "\tdepthStencilSamples = " << getSampleCountFlagsStr(value.depthStencilSamples) << '\n';
	s << "\tcolorSamples = " << getSampleCountFlagsStr(value.colorSamples) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT& value)
{
	s << "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfragmentShaderSampleInterlock = " << value.fragmentShaderSampleInterlock << '\n';
	s << "\tfragmentShaderPixelInterlock = " << value.fragmentShaderPixelInterlock << '\n';
	s << "\tfragmentShaderShadingRateInterlock = " << value.fragmentShaderShadingRateInterlock << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT& value)
{
	s << "VkPhysicalDeviceYcbcrImageArraysFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tycbcrImageArrays = " << value.ycbcrImageArrays << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkHeadlessSurfaceCreateInfoEXT& value)
{
	s << "VkHeadlessSurfaceCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getHeadlessSurfaceCreateFlagsEXTStr(value.flags) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLineRasterizationFeaturesEXT& value)
{
	s << "VkPhysicalDeviceLineRasterizationFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\trectangularLines = " << value.rectangularLines << '\n';
	s << "\tbresenhamLines = " << value.bresenhamLines << '\n';
	s << "\tsmoothLines = " << value.smoothLines << '\n';
	s << "\tstippledRectangularLines = " << value.stippledRectangularLines << '\n';
	s << "\tstippledBresenhamLines = " << value.stippledBresenhamLines << '\n';
	s << "\tstippledSmoothLines = " << value.stippledSmoothLines << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLineRasterizationPropertiesEXT& value)
{
	s << "VkPhysicalDeviceLineRasterizationPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tlineSubPixelPrecisionBits = " << value.lineSubPixelPrecisionBits << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationLineStateCreateInfoEXT& value)
{
	s << "VkPipelineRasterizationLineStateCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tlineRasterizationMode = " << value.lineRasterizationMode << '\n';
	s << "\tstippledLineEnable = " << value.stippledLineEnable << '\n';
	s << "\tlineStippleFactor = " << value.lineStippleFactor << '\n';
	s << "\tlineStipplePattern = " << value.lineStipplePattern << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIndexTypeUint8FeaturesEXT& value)
{
	s << "VkPhysicalDeviceIndexTypeUint8FeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tindexTypeUint8 = " << value.indexTypeUint8 << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT& value)
{
	s << "VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tshaderDemoteToHelperInvocation = " << value.shaderDemoteToHelperInvocation << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT& value)
{
	s << "VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\ttexelBufferAlignment = " << value.texelBufferAlignment << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT& value)
{
	s << "VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tstorageTexelBufferOffsetAlignmentBytes = " << value.storageTexelBufferOffsetAlignmentBytes << '\n';
	s << "\tstorageTexelBufferOffsetSingleTexelAlignment = " << value.storageTexelBufferOffsetSingleTexelAlignment << '\n';
	s << "\tuniformTexelBufferOffsetAlignmentBytes = " << value.uniformTexelBufferOffsetAlignmentBytes << '\n';
	s << "\tuniformTexelBufferOffsetSingleTexelAlignment = " << value.uniformTexelBufferOffsetSingleTexelAlignment << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAndroidSurfaceCreateInfoKHR& value)
{
	s << "VkAndroidSurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getAndroidSurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\twindow = " << value.window << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferUsageANDROID& value)
{
	s << "VkAndroidHardwareBufferUsageANDROID = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tandroidHardwareBufferUsage = " << value.androidHardwareBufferUsage << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferPropertiesANDROID& value)
{
	s << "VkAndroidHardwareBufferPropertiesANDROID = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tallocationSize = " << value.allocationSize << '\n';
	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferFormatPropertiesANDROID& value)
{
	s << "VkAndroidHardwareBufferFormatPropertiesANDROID = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tformat = " << value.format << '\n';
	s << "\texternalFormat = " << value.externalFormat << '\n';
	s << "\tformatFeatures = " << getFormatFeatureFlagsStr(value.formatFeatures) << '\n';
	s << "\tsamplerYcbcrConversionComponents = " << value.samplerYcbcrConversionComponents << '\n';
	s << "\tsuggestedYcbcrModel = " << value.suggestedYcbcrModel << '\n';
	s << "\tsuggestedYcbcrRange = " << value.suggestedYcbcrRange << '\n';
	s << "\tsuggestedXChromaOffset = " << value.suggestedXChromaOffset << '\n';
	s << "\tsuggestedYChromaOffset = " << value.suggestedYChromaOffset << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportAndroidHardwareBufferInfoANDROID& value)
{
	s << "VkImportAndroidHardwareBufferInfoANDROID = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tbuffer = " << value.buffer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryGetAndroidHardwareBufferInfoANDROID& value)
{
	s << "VkMemoryGetAndroidHardwareBufferInfoANDROID = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExternalFormatANDROID& value)
{
	s << "VkExternalFormatANDROID = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texternalFormat = " << value.externalFormat << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImagePipeSurfaceCreateInfoFUCHSIA& value)
{
	s << "VkImagePipeSurfaceCreateInfoFUCHSIA = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getImagePipeSurfaceCreateFlagsFUCHSIAStr(value.flags) << '\n';
	s << "\timagePipeHandle = " << value.imagePipeHandle << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkStreamDescriptorSurfaceCreateInfoGGP& value)
{
	s << "VkStreamDescriptorSurfaceCreateInfoGGP = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getStreamDescriptorSurfaceCreateFlagsGGPStr(value.flags) << '\n';
	s << "\tstreamDescriptor = " << value.streamDescriptor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPresentFrameTokenGGP& value)
{
	s << "VkPresentFrameTokenGGP = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tframeToken = " << value.frameToken << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkIOSSurfaceCreateInfoMVK& value)
{
	s << "VkIOSSurfaceCreateInfoMVK = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getIOSSurfaceCreateFlagsMVKStr(value.flags) << '\n';
	s << "\tpView = " << value.pView << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMacOSSurfaceCreateInfoMVK& value)
{
	s << "VkMacOSSurfaceCreateInfoMVK = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getMacOSSurfaceCreateFlagsMVKStr(value.flags) << '\n';
	s << "\tpView = " << value.pView << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMetalSurfaceCreateInfoEXT& value)
{
	s << "VkMetalSurfaceCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getMetalSurfaceCreateFlagsEXTStr(value.flags) << '\n';
	s << "\tpLayer = " << value.pLayer << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkViSurfaceCreateInfoNN& value)
{
	s << "VkViSurfaceCreateInfoNN = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getViSurfaceCreateFlagsNNStr(value.flags) << '\n';
	s << "\twindow = " << value.window << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWaylandSurfaceCreateInfoKHR& value)
{
	s << "VkWaylandSurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getWaylandSurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tdisplay = " << value.display << '\n';
	s << "\tsurface = " << value.surface << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWin32SurfaceCreateInfoKHR& value)
{
	s << "VkWin32SurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getWin32SurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\thinstance = " << value.hinstance << '\n';
	s << "\thwnd = " << value.hwnd << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportMemoryWin32HandleInfoKHR& value)
{
	s << "VkImportMemoryWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\thandle = " << value.handle << '\n';
	s << "\tname = " << getWStr(value.name) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportMemoryWin32HandleInfoKHR& value)
{
	s << "VkExportMemoryWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpAttributes = " << value.pAttributes << '\n';
	s << "\tdwAccess = " << value.dwAccess << '\n';
	s << "\tname = " << getWStr(value.name) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryWin32HandlePropertiesKHR& value)
{
	s << "VkMemoryWin32HandlePropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkMemoryGetWin32HandleInfoKHR& value)
{
	s << "VkMemoryGetWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tmemory = " << value.memory << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWin32KeyedMutexAcquireReleaseInfoKHR& value)
{
	s << "VkWin32KeyedMutexAcquireReleaseInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tacquireCount = " << value.acquireCount << '\n';
	s << "\tpAcquireSyncs = " << value.pAcquireSyncs << '\n';
	s << "\tpAcquireKeys = " << value.pAcquireKeys << '\n';
	s << "\tpAcquireTimeouts = " << value.pAcquireTimeouts << '\n';
	s << "\treleaseCount = " << value.releaseCount << '\n';
	s << "\tpReleaseSyncs = " << value.pReleaseSyncs << '\n';
	s << "\tpReleaseKeys = " << value.pReleaseKeys << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportSemaphoreWin32HandleInfoKHR& value)
{
	s << "VkImportSemaphoreWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsemaphore = " << value.semaphore << '\n';
	s << "\tflags = " << getSemaphoreImportFlagsStr(value.flags) << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\thandle = " << value.handle << '\n';
	s << "\tname = " << getWStr(value.name) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportSemaphoreWin32HandleInfoKHR& value)
{
	s << "VkExportSemaphoreWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpAttributes = " << value.pAttributes << '\n';
	s << "\tdwAccess = " << value.dwAccess << '\n';
	s << "\tname = " << getWStr(value.name) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkD3D12FenceSubmitInfoKHR& value)
{
	s << "VkD3D12FenceSubmitInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\twaitSemaphoreValuesCount = " << value.waitSemaphoreValuesCount << '\n';
	s << "\tpWaitSemaphoreValues = " << value.pWaitSemaphoreValues << '\n';
	s << "\tsignalSemaphoreValuesCount = " << value.signalSemaphoreValuesCount << '\n';
	s << "\tpSignalSemaphoreValues = " << value.pSignalSemaphoreValues << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSemaphoreGetWin32HandleInfoKHR& value)
{
	s << "VkSemaphoreGetWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsemaphore = " << value.semaphore << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportFenceWin32HandleInfoKHR& value)
{
	s << "VkImportFenceWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfence = " << value.fence << '\n';
	s << "\tflags = " << getFenceImportFlagsStr(value.flags) << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << "\thandle = " << value.handle << '\n';
	s << "\tname = " << getWStr(value.name) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportFenceWin32HandleInfoKHR& value)
{
	s << "VkExportFenceWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpAttributes = " << value.pAttributes << '\n';
	s << "\tdwAccess = " << value.dwAccess << '\n';
	s << "\tname = " << getWStr(value.name) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkFenceGetWin32HandleInfoKHR& value)
{
	s << "VkFenceGetWin32HandleInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfence = " << value.fence << '\n';
	s << "\thandleType = " << value.handleType << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkImportMemoryWin32HandleInfoNV& value)
{
	s << "VkImportMemoryWin32HandleInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleType = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleType) << '\n';
	s << "\thandle = " << value.handle << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportMemoryWin32HandleInfoNV& value)
{
	s << "VkExportMemoryWin32HandleInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tpAttributes = " << value.pAttributes << '\n';
	s << "\tdwAccess = " << value.dwAccess << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkWin32KeyedMutexAcquireReleaseInfoNV& value)
{
	s << "VkWin32KeyedMutexAcquireReleaseInfoNV = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tacquireCount = " << value.acquireCount << '\n';
	s << "\tpAcquireSyncs = " << value.pAcquireSyncs << '\n';
	s << "\tpAcquireKeys = " << value.pAcquireKeys << '\n';
	s << "\tpAcquireTimeoutMilliseconds = " << value.pAcquireTimeoutMilliseconds << '\n';
	s << "\treleaseCount = " << value.releaseCount << '\n';
	s << "\tpReleaseSyncs = " << value.pReleaseSyncs << '\n';
	s << "\tpReleaseKeys = " << value.pReleaseKeys << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceFullScreenExclusiveInfoEXT& value)
{
	s << "VkSurfaceFullScreenExclusiveInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfullScreenExclusive = " << value.fullScreenExclusive << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilitiesFullScreenExclusiveEXT& value)
{
	s << "VkSurfaceCapabilitiesFullScreenExclusiveEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tfullScreenExclusiveSupported = " << value.fullScreenExclusiveSupported << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkSurfaceFullScreenExclusiveWin32InfoEXT& value)
{
	s << "VkSurfaceFullScreenExclusiveWin32InfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thmonitor = " << value.hmonitor << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkXcbSurfaceCreateInfoKHR& value)
{
	s << "VkXcbSurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getXcbSurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tconnection = " << value.connection << '\n';
	s << "\twindow = " << value.window << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkXlibSurfaceCreateInfoKHR& value)
{
	s << "VkXlibSurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getXlibSurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tdpy = " << value.dpy << '\n';
	s << "\twindow = " << value.window << '\n';
	s << '}';
	return s;
}
