/* 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<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<VkDescriptorUpdateTemplateKHR>	(void) { return "VkDescriptorUpdateTemplateKHR";	}
template<> const char*	getTypeName<VkSamplerYcbcrConversionKHR>	(void) { return "VkSamplerYcbcrConversionKHR";		}
template<> const char*	getTypeName<VkDebugReportCallbackEXT>		(void) { return "VkDebugReportCallbackEXT";			}

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); }
}

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_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_OUT_OF_POOL_MEMORY_KHR:		return "VK_ERROR_OUT_OF_POOL_MEMORY_KHR";
		case VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR:	return "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR";
		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_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_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_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX:						return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR:										return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR:								return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR:								return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR:						return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR:						return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR:								return "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR:						return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR:						return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR";
		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_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR:							return "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_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_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:											return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR";
		case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR:					return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:									return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE";
		case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:						return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR";
		case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR:								return "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_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_POINT_CLIPPING_PROPERTIES_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR:			return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR:	return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_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_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR:							return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR:						return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR:						return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR:					return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR";
		case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR:									return "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR";
		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR:						return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR";
		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR:					return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR";
		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR:							return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR";
		case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR:							return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR";
		case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR:					return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR:		return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR";
		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR:		return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR";
		case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR:									return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR";
		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR:									return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR";
		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_KHR:							return "VK_FORMAT_G8B8G8R8_422_UNORM_KHR";
		case VK_FORMAT_B8G8R8G8_422_UNORM_KHR:							return "VK_FORMAT_B8G8R8G8_422_UNORM_KHR";
		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:					return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR";
		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:					return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR";
		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:					return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR";
		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:					return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR";
		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:					return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR";
		case VK_FORMAT_R10X6_UNORM_PACK16_KHR:							return "VK_FORMAT_R10X6_UNORM_PACK16_KHR";
		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:					return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR";
		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:			return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR";
		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:		return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR";
		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:		return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR";
		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR";
		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR";
		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR";
		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR";
		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR";
		case VK_FORMAT_R12X4_UNORM_PACK16_KHR:							return "VK_FORMAT_R12X4_UNORM_PACK16_KHR";
		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:					return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR";
		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:			return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR";
		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:		return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR";
		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:		return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR";
		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR";
		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR";
		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR";
		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR";
		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR";
		case VK_FORMAT_G16B16G16R16_422_UNORM_KHR:						return "VK_FORMAT_G16B16G16R16_422_UNORM_KHR";
		case VK_FORMAT_B16G16R16G16_422_UNORM_KHR:						return "VK_FORMAT_B16G16R16G16_422_UNORM_KHR";
		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:				return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR";
		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:					return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR";
		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:				return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR";
		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:					return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR";
		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:				return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR";
		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_PRESENT_SRC_KHR:									return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
		case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:								return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
		case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR:	return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR";
		case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR:	return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_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";
		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";
		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";
		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";
		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";
		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_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_DESCRIPTOR_UPDATE_TEMPLATE_KHR:	return "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR";
		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";
		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";
		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* getDescriptorUpdateTemplateTypeKHRName (VkDescriptorUpdateTemplateTypeKHR value)
{
	switch (value)
	{
		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR:		return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR";
		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR:	return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR";
		default:														return DE_NULL;
	}
}

const char* getPointClippingBehaviorKHRName (VkPointClippingBehaviorKHR value)
{
	switch (value)
	{
		case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR:		return "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR";
		case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR:	return "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR";
		default:													return DE_NULL;
	}
}

const char* getTessellationDomainOriginKHRName (VkTessellationDomainOriginKHR value)
{
	switch (value)
	{
		case VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR:	return "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR";
		case VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR:	return "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR";
		default:											return DE_NULL;
	}
}

const char* getSamplerYcbcrModelConversionKHRName (VkSamplerYcbcrModelConversionKHR value)
{
	switch (value)
	{
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR:	return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR:	return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR";
		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR";
		default:													return DE_NULL;
	}
}

const char* getSamplerYcbcrRangeKHRName (VkSamplerYcbcrRangeKHR value)
{
	switch (value)
	{
		case VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR:	return "VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR";
		case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR:	return "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR";
		default:									return DE_NULL;
	}
}

const char* getChromaLocationKHRName (VkChromaLocationKHR value)
{
	switch (value)
	{
		case VK_CHROMA_LOCATION_COSITED_EVEN_KHR:	return "VK_CHROMA_LOCATION_COSITED_EVEN_KHR";
		case VK_CHROMA_LOCATION_MIDPOINT_KHR:		return "VK_CHROMA_LOCATION_MIDPOINT_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_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_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_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT:	return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT";
		case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT";
		default:																return DE_NULL;
	}
}

const char* getDebugReportErrorEXTName (VkDebugReportErrorEXT value)
{
	switch (value)
	{
		case VK_DEBUG_REPORT_ERROR_NONE_EXT:			return "VK_DEBUG_REPORT_ERROR_NONE_EXT";
		case VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT:	return "VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT";
		default:										return DE_NULL;
	}
}

tcu::Format::Bitfield<32> getFormatFeatureFlagsStr (VkFormatFeatureFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,																"VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,																"VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,														"VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,														"VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,														"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,													"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,																"VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,															"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,														"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,													"VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_SRC_BIT,																	"VK_FORMAT_FEATURE_BLIT_SRC_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_DST_BIT,																	"VK_FORMAT_FEATURE_BLIT_DST_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,													"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR,															"VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR,															"VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR,												"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR,													"VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR,							"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR,			"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR,			"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR,	"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DISJOINT_BIT_KHR,																"VK_FORMAT_FEATURE_DISJOINT_BIT_KHR"),
		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR,													"VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR"),
	};
	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_BIND_SFR_BIT_KHX,						"VK_IMAGE_CREATE_BIND_SFR_BIT_KHX"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR,			"VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR,	"VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR,				"VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_ALIAS_BIT_KHR,							"VK_IMAGE_CREATE_ALIAS_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_CREATE_DISJOINT_BIT_KHR,						"VK_IMAGE_CREATE_DISJOINT_BIT_KHR"),
	};
	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"),
	};
	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"),
	};
	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_KHX,	"VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHX"),
	};
	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"),
	};
	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_KHR,	"VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_1_BIT_KHR,	"VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"),
		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_2_BIT_KHR,	"VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"),
	};
	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"),
	};
	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"),
	};
	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_KHX,	"VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHX"),
		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE_KHX,						"VK_PIPELINE_CREATE_DISPATCH_BASE_KHX"),
	};
	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"),
	};
	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"),
	};
	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)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

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"),
	};
	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_VIEW_LOCAL_BIT_KHX,		"VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX"),
		tcu::Format::BitDesc(VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX,	"VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX"),
	};
	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"),
	};
	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> 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_KHX,	"VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX"),
	};
	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> getExternalFenceHandleTypeFlagsKHRStr (VkExternalFenceHandleTypeFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,			"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,		"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,	"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR,				"VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalFenceFeatureFlagsKHRStr (VkExternalFenceFeatureFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR,	"VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR,	"VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getFenceImportFlagsKHRStr (VkFenceImportFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_FENCE_IMPORT_TEMPORARY_BIT_KHR,	"VK_FENCE_IMPORT_TEMPORARY_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> getExternalMemoryHandleTypeFlagsKHRStr (VkExternalMemoryHandleTypeFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,			"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR,			"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalMemoryFeatureFlagsKHRStr (VkExternalMemoryFeatureFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR,	"VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR,		"VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR,		"VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalSemaphoreHandleTypeFlagsKHRStr (VkExternalSemaphoreHandleTypeFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR,		"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR,	"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getExternalSemaphoreFeatureFlagsKHRStr (VkExternalSemaphoreFeatureFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR,	"VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR"),
		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR,	"VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getSemaphoreImportFlagsKHRStr (VkSemaphoreImportFlagsKHR value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR,	"VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR"),
	};
	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> getDeviceQueueCreateFlagsStr (VkDeviceQueueCreateFlags 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> 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> getCommandPoolTrimFlagsKHRStr (VkCommandPoolTrimFlagsKHR value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getDescriptorUpdateTemplateCreateFlagsKHRStr (VkDescriptorUpdateTemplateCreateFlagsKHR 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 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 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 VkPhysicalDeviceFeatures2KHR& value)
{
	s << "VkPhysicalDeviceFeatures2KHR = {\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 VkPhysicalDeviceProperties2KHR& value)
{
	s << "VkPhysicalDeviceProperties2KHR = {\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 VkFormatProperties2KHR& value)
{
	s << "VkFormatProperties2KHR = {\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 VkImageFormatProperties2KHR& value)
{
	s << "VkImageFormatProperties2KHR = {\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 VkPhysicalDeviceImageFormatInfo2KHR& value)
{
	s << "VkPhysicalDeviceImageFormatInfo2KHR = {\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 VkQueueFamilyProperties2KHR& value)
{
	s << "VkQueueFamilyProperties2KHR = {\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 VkPhysicalDeviceMemoryProperties2KHR& value)
{
	s << "VkPhysicalDeviceMemoryProperties2KHR = {\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 VkSparseImageFormatProperties2KHR& value)
{
	s << "VkSparseImageFormatProperties2KHR = {\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 VkPhysicalDeviceSparseImageFormatInfo2KHR& value)
{
	s << "VkPhysicalDeviceSparseImageFormatInfo2KHR = {\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 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 VkPhysicalDevice16BitStorageFeaturesKHR& value)
{
	s << "VkPhysicalDevice16BitStorageFeaturesKHR = {\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 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 VkDescriptorUpdateTemplateEntryKHR& value)
{
	s << "VkDescriptorUpdateTemplateEntryKHR = {\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 VkDescriptorUpdateTemplateCreateInfoKHR& value)
{
	s << "VkDescriptorUpdateTemplateCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDescriptorUpdateTemplateCreateFlagsKHRStr(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 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 VkPhysicalDevicePointClippingPropertiesKHR& value)
{
	s << "VkPhysicalDevicePointClippingPropertiesKHR = {\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 VkInputAttachmentAspectReferenceKHR& value)
{
	s << "VkInputAttachmentAspectReferenceKHR = {\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 VkRenderPassInputAttachmentAspectCreateInfoKHR& value)
{
	s << "VkRenderPassInputAttachmentAspectCreateInfoKHR = {\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 VkImageViewUsageCreateInfoKHR& value)
{
	s << "VkImageViewUsageCreateInfoKHR = {\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 VkPipelineTessellationDomainOriginStateCreateInfoKHR& value)
{
	s << "VkPipelineTessellationDomainOriginStateCreateInfoKHR = {\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 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 VkPhysicalDeviceExternalFenceInfoKHR& value)
{
	s << "VkPhysicalDeviceExternalFenceInfoKHR = {\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 VkExternalFencePropertiesKHR& value)
{
	s << "VkExternalFencePropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalFenceHandleTypeFlagsKHRStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalFenceHandleTypeFlagsKHRStr(value.compatibleHandleTypes) << '\n';
	s << "\texternalFenceFeatures = " << getExternalFenceFeatureFlagsKHRStr(value.externalFenceFeatures) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportFenceCreateInfoKHR& value)
{
	s << "VkExportFenceCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalFenceHandleTypeFlagsKHRStr(value.handleTypes) << '\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 = " << getFenceImportFlagsKHRStr(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 = " << getFenceImportFlagsKHRStr(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 VkMemoryDedicatedRequirementsKHR& value)
{
	s << "VkMemoryDedicatedRequirementsKHR = {\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 VkMemoryDedicatedAllocateInfoKHR& value)
{
	s << "VkMemoryDedicatedAllocateInfoKHR = {\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 VkBufferMemoryRequirementsInfo2KHR& value)
{
	s << "VkBufferMemoryRequirementsInfo2KHR = {\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 VkImageMemoryRequirementsInfo2KHR& value)
{
	s << "VkImageMemoryRequirementsInfo2KHR = {\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 VkImageSparseMemoryRequirementsInfo2KHR& value)
{
	s << "VkImageSparseMemoryRequirementsInfo2KHR = {\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 VkMemoryRequirements2KHR& value)
{
	s << "VkMemoryRequirements2KHR = {\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 VkSparseImageMemoryRequirements2KHR& value)
{
	s << "VkSparseImageMemoryRequirements2KHR = {\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 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 VkSamplerYcbcrConversionCreateInfoKHR& value)
{
	s << "VkSamplerYcbcrConversionCreateInfoKHR = {\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 VkSamplerYcbcrConversionInfoKHR& value)
{
	s << "VkSamplerYcbcrConversionInfoKHR = {\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 VkBindImagePlaneMemoryInfoKHR& value)
{
	s << "VkBindImagePlaneMemoryInfoKHR = {\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 VkImagePlaneMemoryRequirementsInfoKHR& value)
{
	s << "VkImagePlaneMemoryRequirementsInfoKHR = {\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 VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR& value)
{
	s << "VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR = {\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 VkSamplerYcbcrConversionImageFormatPropertiesKHR& value)
{
	s << "VkSamplerYcbcrConversionImageFormatPropertiesKHR = {\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 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 VkRenderPassMultiviewCreateInfoKHX& value)
{
	s << "VkRenderPassMultiviewCreateInfoKHX = {\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 VkPhysicalDeviceMultiviewFeaturesKHX& value)
{
	s << "VkPhysicalDeviceMultiviewFeaturesKHX = {\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 VkPhysicalDeviceMultiviewPropertiesKHX& value)
{
	s << "VkPhysicalDeviceMultiviewPropertiesKHX = {\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 VkExternalMemoryPropertiesKHR& value)
{
	s << "VkExternalMemoryPropertiesKHR = {\n";
	s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsKHRStr(value.externalMemoryFeatures) << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsKHRStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsKHRStr(value.compatibleHandleTypes) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalImageFormatInfoKHR& value)
{
	s << "VkPhysicalDeviceExternalImageFormatInfoKHR = {\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 VkExternalImageFormatPropertiesKHR& value)
{
	s << "VkExternalImageFormatPropertiesKHR = {\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 VkPhysicalDeviceExternalBufferInfoKHR& value)
{
	s << "VkPhysicalDeviceExternalBufferInfoKHR = {\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 VkExternalBufferPropertiesKHR& value)
{
	s << "VkExternalBufferPropertiesKHR = {\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 VkPhysicalDeviceIDPropertiesKHR& value)
{
	s << "VkPhysicalDeviceIDPropertiesKHR = {\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 VkExternalMemoryImageCreateInfoKHR& value)
{
	s << "VkExternalMemoryImageCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsKHRStr(value.handleTypes) << '\n';
	s << '}';
	return s;
}

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

std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfoKHR& value)
{
	s << "VkExportMemoryAllocateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsKHRStr(value.handleTypes) << '\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 VkPhysicalDeviceExternalSemaphoreInfoKHR& value)
{
	s << "VkPhysicalDeviceExternalSemaphoreInfoKHR = {\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 VkExternalSemaphorePropertiesKHR& value)
{
	s << "VkExternalSemaphorePropertiesKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\texportFromImportedHandleTypes = " << getExternalSemaphoreHandleTypeFlagsKHRStr(value.exportFromImportedHandleTypes) << '\n';
	s << "\tcompatibleHandleTypes = " << getExternalSemaphoreHandleTypeFlagsKHRStr(value.compatibleHandleTypes) << '\n';
	s << "\texternalSemaphoreFeatures = " << getExternalSemaphoreFeatureFlagsKHRStr(value.externalSemaphoreFeatures) << '\n';
	s << '}';
	return s;
}

std::ostream& operator<< (std::ostream& s, const VkExportSemaphoreCreateInfoKHR& value)
{
	s << "VkExportSemaphoreCreateInfoKHR = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\thandleTypes = " << getExternalSemaphoreHandleTypeFlagsKHRStr(value.handleTypes) << '\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 = " << getSemaphoreImportFlagsKHRStr(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 = " << getSemaphoreImportFlagsKHRStr(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 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 VkPhysicalDeviceVariablePointerFeaturesKHR& value)
{
	s << "VkPhysicalDeviceVariablePointerFeaturesKHR = {\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 VkBindBufferMemoryInfoKHR& value)
{
	s << "VkBindBufferMemoryInfoKHR = {\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 VkBindImageMemoryInfoKHR& value)
{
	s << "VkBindImageMemoryInfoKHR = {\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;
}
