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

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";
		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_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:	return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD";
		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT:						return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT:						return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT:							return "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT";
		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:			return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV";
		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:					return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:							return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV";
		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:						return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV";
		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:						return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV";
		case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:				return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV";
		case VK_STRUCTURE_TYPE_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_VALIDATION_FLAGS_EXT:									return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT";
		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_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_OBJECT_TABLE_CREATE_INFO_NVX:							return "VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX";
		case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX:				return "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX";
		case VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX:							return "VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX";
		case VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX:					return "VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX";
		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX:					return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX";
		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX:					return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX";
		case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:								return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE";
		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";
		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_PVRTC1_2BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG";
		case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG";
		case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG";
		default:									return DE_NULL;
	}
}

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

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

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

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

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

const char* getImageLayoutName (VkImageLayout value)
{
	switch (value)
	{
		case VK_IMAGE_LAYOUT_UNDEFINED:							return "VK_IMAGE_LAYOUT_UNDEFINED";
		case VK_IMAGE_LAYOUT_GENERAL:							return "VK_IMAGE_LAYOUT_GENERAL";
		case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:			return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL";
		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:			return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL";
		case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:				return "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL";
		case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:				return "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL";
		case VK_IMAGE_LAYOUT_PREINITIALIZED:					return "VK_IMAGE_LAYOUT_PREINITIALIZED";
		case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:					return "VK_IMAGE_LAYOUT_PRESENT_SRC_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";
		case VK_FILTER_CUBIC_IMG:	return "VK_FILTER_CUBIC_IMG";
		default:					return DE_NULL;
	}
}

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

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

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

const char* getDescriptorTypeName (VkDescriptorType value)
{
	switch (value)
	{
		case VK_DESCRIPTOR_TYPE_SAMPLER:				return "VK_DESCRIPTOR_TYPE_SAMPLER";
		case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:	return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER";
		case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:			return "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE";
		case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:			return "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE";
		case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:	return "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER";
		case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:	return "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER";
		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:			return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER";
		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:			return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER";
		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:	return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC";
		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:	return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC";
		case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:		return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT";
		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* 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";
		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";
		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;
	}
}

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

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

const char* getIndirectCommandsTokenTypeNVXName (VkIndirectCommandsTokenTypeNVX value)
{
	switch (value)
	{
		case VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX";
		case VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX";
		default:											return DE_NULL;
	}
}

const char* getObjectEntryTypeNVXName (VkObjectEntryTypeNVX value)
{
	switch (value)
	{
		case VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX:	return "VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX";
		case VK_OBJECT_ENTRY_PIPELINE_NVX:			return "VK_OBJECT_ENTRY_PIPELINE_NVX";
		case VK_OBJECT_ENTRY_INDEX_BUFFER_NVX:		return "VK_OBJECT_ENTRY_INDEX_BUFFER_NVX";
		case VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX:		return "VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX";
		case VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX:		return "VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX";
		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;
	}
}

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_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,	"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
		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"),
	};
	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_2D_ARRAY_COMPATIBLE_BIT_KHR,	"VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_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"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,						"VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,					"VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,					"VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,					"VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,		"VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,	"VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,					"VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,					"VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,			"VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,				"VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			"VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,					"VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,						"VK_PIPELINE_STAGE_TRANSFER_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,					"VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,							"VK_PIPELINE_STAGE_HOST_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,					"VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,					"VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX,				"VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"),
	};
	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"),
	};
	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"),
	};
	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> 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"),
	};
	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> 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> getDebugReportFlagsEXTStr (VkDebugReportFlagsEXT value)
{
	static const tcu::Format::BitDesc s_desc[] =
	{
		tcu::Format::BitDesc(VK_DEBUG_REPORT_INFORMATION_BIT_EXT,			"VK_DEBUG_REPORT_INFORMATION_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_WARNING_BIT_EXT,				"VK_DEBUG_REPORT_WARNING_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,	"VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_ERROR_BIT_EXT,					"VK_DEBUG_REPORT_ERROR_BIT_EXT"),
		tcu::Format::BitDesc(VK_DEBUG_REPORT_DEBUG_BIT_EXT,					"VK_DEBUG_REPORT_DEBUG_BIT_EXT"),
	};
	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
}

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

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

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

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

tcu::Format::Bitfield<32> 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> getSubpassDescriptionFlagsStr (VkSubpassDescriptionFlags value)
{
	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
}

tcu::Format::Bitfield<32> getSwapchainCreateFlagsKHRStr (VkSwapchainCreateFlagsKHR 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 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 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 VkDebugReportCallbackCreateInfoEXT& value)
{
	s << "VkDebugReportCallbackCreateInfoEXT = {\n";
	s << "\tsType = " << value.sType << '\n';
	s << "\tpNext = " << value.pNext << '\n';
	s << "\tflags = " << getDebugReportFlagsEXTStr(value.flags) << '\n';
	s << "\tpfnCallback = " << value.pfnCallback << '\n';
	s << "\tpUserData = " << value.pUserData << '\n';
	s << '}';
	return s;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

std::ostream& operator<< (std::ostream& s, const 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 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 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;
}
