/* 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<VkValidationCacheEXT>			(void) { return "VkValidationCacheEXT";			}

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, RROutput						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";
		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_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_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_DEVICE_ADDRESS_EXT:	return "VK_ERROR_INVALID_DEVICE_ADDRESS_EXT";
		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_POINTER_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_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_PARAMETER_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES";
		case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR";
		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_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_MIR_SURFACE_CREATE_INFO_KHR:										return "VK_STRUCTURE_TYPE_MIR_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_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:						return "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD";
		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_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_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR";
		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_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_ATTACHMENT_DESCRIPTION_2_KHR:									return "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR";
		case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR:										return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR";
		case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR:										return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR";
		case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR:										return "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR";
		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR:									return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR:											return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR";
		case VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR:											return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR";
		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_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_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_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT";
		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_IMAGE_FORMAT_LIST_CREATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR";
		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_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_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT:		return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT:		return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR";
		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_ATOMIC_INT64_FEATURES_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR";
		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_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR:					return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:								return "VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT";
		case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT:									return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_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_COOPERATIVE_MATRIX_FEATURES_NV:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_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_COOPERATIVE_MATRIX_PROPERTIES_NV:								return "VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT";
		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";
		default:									return DE_NULL;
	}
}

const char* getInternalAllocationTypeName (VkInternalAllocationType value)
{
	switch (value)
	{
		case VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE:	return "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE";
		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";
		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";
		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";
		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";
		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";
		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";
		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_PRESENT_SRC_KHR:								return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
		case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:							return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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_VALIDATION_CACHE_EXT:			return "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT";
		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";
		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";
		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";
		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";
		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";
		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";
		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_DCI_P3_LINEAR_EXT:				return "VK_COLOR_SPACE_DCI_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";
		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";
		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:				return "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		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";
		default:										return DE_NULL;
	}
}

const char* getSamplerReductionModeEXTName (VkSamplerReductionModeEXT value)
{
	switch (value)
	{
		case VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT:	return "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT";
		case VK_SAMPLER_REDUCTION_MODE_MIN_EXT:					return "VK_SAMPLER_REDUCTION_MODE_MIN_EXT";
		case VK_SAMPLER_REDUCTION_MODE_MAX_EXT:					return "VK_SAMPLER_REDUCTION_MODE_MAX_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";
		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";
		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";
		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";
		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";
		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_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,													"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_CUBIC_BIT_IMG,											"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
	};
	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"),
	};
	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_BIND_SFR_BIT,								"VK_IMAGE_CREATE_BIND_SFR_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_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT,	"VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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_COMMAND_PROCESS_BIT_NVX,				"VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT,		"VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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_EXT,	"VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT"),
	};
	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_CONDITIONAL_RENDERING_BIT_EXT,	"VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"),
		tcu::Format::BitDesc(VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT,	"VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT"),
	};
	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,						"VK_PIPELINE_CREATE_DISPATCH_BASE"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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_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"),
	};
	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_EXT,	"VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"),
	};
	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"),
	};
	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"),
	};
	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_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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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_FRONT_AND_BACK,	"VK_STENCIL_FRONT_AND_BACK"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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_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_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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_BIND_SFR_BIT_KHR,			"VK_SWAPCHAIN_CREATE_BIND_SFR_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"),
	};
	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"),
	};
	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"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getResolveModeFlagsKHRStr (VkResolveModeFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	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"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getDescriptorBindingFlagsEXTStr (VkDescriptorBindingFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		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"),
	};
	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> getImageViewCreateFlagsStr (VkImageViewCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getShaderModuleCreateFlagsStr (VkShaderModuleCreateFlags 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> getPipelineShaderStageCreateFlagsStr (VkPipelineShaderStageCreateFlags 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> getSamplerCreateFlagsStr (VkSamplerCreateFlags 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> getFramebufferCreateFlagsStr (VkFramebufferCreateFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getRenderPassCreateFlagsStr (VkRenderPassCreateFlags 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> getXlibSurfaceCreateFlagsKHRStr (VkXlibSurfaceCreateFlagsKHR 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> getWaylandSurfaceCreateFlagsKHRStr (VkWaylandSurfaceCreateFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getMirSurfaceCreateFlagsKHRStr (VkMirSurfaceCreateFlagsKHR 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> getWin32SurfaceCreateFlagsKHRStr (VkWin32SurfaceCreateFlagsKHR 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> 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> 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> 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> getPipelineRasterizationDepthClipStateCreateFlagsEXTStr (VkPipelineRasterizationDepthClipStateCreateFlagsEXT 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 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 VkPhysicalDevice8BitStorageFeaturesKHR& value)
{
	s << "VkPhysicalDevice8BitStorageFeaturesKHR = {\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 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 << "\tSFRRectCount = " << value.SFRRectCount << '\n';
	s << "\tpSFRRects = " << value.pSFRRects << '\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 VkPhysicalDeviceVariablePointerFeatures& value)
{
	s << "VkPhysicalDeviceVariablePointerFeatures = {\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 VkPhysicalDeviceShaderDrawParameterFeatures& value)
{
	s << "VkPhysicalDeviceShaderDrawParameterFeatures = {\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 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 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;
}

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 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 VkMirSurfaceCreateInfoKHR& value)
{
	s << "VkMirSurfaceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getMirSurfaceCreateFlagsKHRStr(value.flags) << '\n';
	s << "\tconnection = " << value.connection << '\n';
	s << "\tmirSurface = " << value.mirSurface << '\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 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 = " << getCharPtrStr(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 = " << getCharPtrStr(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 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 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 = " << getCharPtrStr(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 = " << getCharPtrStr(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 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 VkPhysicalDeviceFloat16Int8FeaturesKHR& value)
{
	s << "VkPhysicalDeviceFloat16Int8FeaturesKHR = {\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 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 VkAttachmentDescription2KHR& value)
{
	s << "VkAttachmentDescription2KHR = {\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 VkAttachmentReference2KHR& value)
{
	s << "VkAttachmentReference2KHR = {\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 VkSubpassDescription2KHR& value)
{
	s << "VkSubpassDescription2KHR = {\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 VkSubpassDependency2KHR& value)
{
	s << "VkSubpassDependency2KHR = {\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 VkRenderPassCreateInfo2KHR& value)
{
	s << "VkRenderPassCreateInfo2KHR = {\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 VkSubpassBeginInfoKHR& value)
{
	s << "VkSubpassBeginInfoKHR = {\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 VkSubpassEndInfoKHR& value)
{
	s << "VkSubpassEndInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\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 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 = " << getCharPtrStr(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 = " << getCharPtrStr(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 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 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 VkImageFormatListCreateInfoKHR& value)
{
	s << "VkImageFormatListCreateInfoKHR = {\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 VkConformanceVersionKHR& value)
{
	s << "VkConformanceVersionKHR = {\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 VkPhysicalDeviceDriverPropertiesKHR& value)
{
	s << "VkPhysicalDeviceDriverPropertiesKHR = {\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 VkPhysicalDeviceFloatControlsPropertiesKHR& value)
{
	s << "VkPhysicalDeviceFloatControlsPropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tseparateDenormSettings = " << value.separateDenormSettings << '\n';
	s << "\tseparateRoundingModeSettings = " << value.separateRoundingModeSettings << '\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 VkSubpassDescriptionDepthStencilResolveKHR& value)
{
	s << "VkSubpassDescriptionDepthStencilResolveKHR = {\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 VkPhysicalDeviceDepthStencilResolvePropertiesKHR& value)
{
	s << "VkPhysicalDeviceDepthStencilResolvePropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tsupportedDepthResolveModes = " << getResolveModeFlagsKHRStr(value.supportedDepthResolveModes) << '\n';
	s << "\tsupportedStencilResolveModes = " << getResolveModeFlagsKHRStr(value.supportedStencilResolveModes) << '\n';
	s << "\tindependentResolveNone = " << value.independentResolveNone << '\n';
	s << "\tindependentResolve = " << value.independentResolve << '\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 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 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 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 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 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 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 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 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 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 VkSamplerReductionModeCreateInfoEXT& value)
{
	s << "VkSamplerReductionModeCreateInfoEXT = {\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 VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT& value)
{
	s << "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT = {\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 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 << "\tpSubpassSampleLocations = " << value.pSubpassSampleLocations << '\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 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 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 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 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 VkDescriptorSetLayoutBindingFlagsCreateInfoEXT& value)
{
	s << "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT = {\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 VkPhysicalDeviceDescriptorIndexingFeaturesEXT& value)
{
	s << "VkPhysicalDeviceDescriptorIndexingFeaturesEXT = {\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 VkPhysicalDeviceDescriptorIndexingPropertiesEXT& value)
{
	s << "VkPhysicalDeviceDescriptorIndexingPropertiesEXT = {\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 VkDescriptorSetVariableDescriptorCountAllocateInfoEXT& value)
{
	s << "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT = {\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 VkDescriptorSetVariableDescriptorCountLayoutSupportEXT& value)
{
	s << "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT = {\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 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 VkPhysicalDeviceShaderAtomicInt64FeaturesKHR& value)
{
	s << "VkPhysicalDeviceShaderAtomicInt64FeaturesKHR = {\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 VkPhysicalDeviceVulkanMemoryModelFeaturesKHR& value)
{
	s << "VkPhysicalDeviceVulkanMemoryModelFeaturesKHR = {\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 VkPhysicalDeviceScalarBlockLayoutFeaturesEXT& value)
{
	s << "VkPhysicalDeviceScalarBlockLayoutFeaturesEXT = {\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 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 VkPhysicalDeviceBufferAddressFeaturesEXT& value)
{
	s << "VkPhysicalDeviceBufferAddressFeaturesEXT = {\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 VkBufferDeviceAddressInfoEXT& value)
{
	s << "VkBufferDeviceAddressInfoEXT = {\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 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 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 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 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 VkPhysicalDeviceHostQueryResetFeaturesEXT& value)
{
	s << "VkPhysicalDeviceHostQueryResetFeaturesEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thostQueryReset = " << value.hostQueryReset << '\n';
	s << '}';
	return s;
}
