text: /* WARNING: This is auto-generated file. Do not modify, since changes will
   * be lost! Modify the generating script instead.
   */
  template<> const char*	getTypeName<VkInstance>						(void) { return "VkInstance";					}
  template<> const char*	getTypeName<VkPhysicalDevice>				(void) { return "VkPhysicalDevice";				}
  template<> const char*	getTypeName<VkDevice>						(void) { return "VkDevice";						}
  template<> const char*	getTypeName<VkQueue>						(void) { return "VkQueue";						}
  template<> const char*	getTypeName<VkSemaphore>					(void) { return "VkSemaphore";					}
  template<> const char*	getTypeName<VkCommandBuffer>				(void) { return "VkCommandBuffer";				}
  template<> const char*	getTypeName<VkFence>						(void) { return "VkFence";						}
  template<> const char*	getTypeName<VkDeviceMemory>					(void) { return "VkDeviceMemory";				}
  template<> const char*	getTypeName<VkBuffer>						(void) { return "VkBuffer";						}
  template<> const char*	getTypeName<VkImage>						(void) { return "VkImage";						}
  template<> const char*	getTypeName<VkEvent>						(void) { return "VkEvent";						}
  template<> const char*	getTypeName<VkQueryPool>					(void) { return "VkQueryPool";					}
  template<> const char*	getTypeName<VkBufferView>					(void) { return "VkBufferView";					}
  template<> const char*	getTypeName<VkImageView>					(void) { return "VkImageView";					}
  template<> const char*	getTypeName<VkShaderModule>					(void) { return "VkShaderModule";				}
  template<> const char*	getTypeName<VkPipelineCache>				(void) { return "VkPipelineCache";				}
  template<> const char*	getTypeName<VkPipelineLayout>				(void) { return "VkPipelineLayout";				}
  template<> const char*	getTypeName<VkRenderPass>					(void) { return "VkRenderPass";					}
  template<> const char*	getTypeName<VkPipeline>						(void) { return "VkPipeline";					}
  template<> const char*	getTypeName<VkDescriptorSetLayout>			(void) { return "VkDescriptorSetLayout";		}
  template<> const char*	getTypeName<VkSampler>						(void) { return "VkSampler";					}
  template<> const char*	getTypeName<VkDescriptorPool>				(void) { return "VkDescriptorPool";				}
  template<> const char*	getTypeName<VkDescriptorSet>				(void) { return "VkDescriptorSet";				}
  template<> const char*	getTypeName<VkFramebuffer>					(void) { return "VkFramebuffer";				}
  template<> const char*	getTypeName<VkCommandPool>					(void) { return "VkCommandPool";				}
  template<> const char*	getTypeName<VkSamplerYcbcrConversion>		(void) { return "VkSamplerYcbcrConversion";		}
  template<> const char*	getTypeName<VkDescriptorUpdateTemplate>		(void) { return "VkDescriptorUpdateTemplate";	}
  template<> const char*	getTypeName<VkSurfaceKHR>					(void) { return "VkSurfaceKHR";					}
  template<> const char*	getTypeName<VkSwapchainKHR>					(void) { return "VkSwapchainKHR";				}
  template<> const char*	getTypeName<VkDisplayKHR>					(void) { return "VkDisplayKHR";					}
  template<> const char*	getTypeName<VkDisplayModeKHR>				(void) { return "VkDisplayModeKHR";				}
  template<> const char*	getTypeName<VkDebugReportCallbackEXT>		(void) { return "VkDebugReportCallbackEXT";		}
  template<> const char*	getTypeName<VkObjectTableNVX>				(void) { return "VkObjectTableNVX";				}
  template<> const char*	getTypeName<VkIndirectCommandsLayoutNVX>	(void) { return "VkIndirectCommandsLayoutNVX";	}
  template<> const char*	getTypeName<VkValidationCacheEXT>			(void) { return "VkValidationCacheEXT";			}
  
  namespace pt
  {
  std::ostream& operator<< (std::ostream& s, XlibDisplayPtr				v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, XlibWindow					v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, XlibVisualID					v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, XcbConnectionPtr				v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, XcbWindow					v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, XcbVisualid					v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, WaylandDisplayPtr			v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, WaylandSurfacePtr			v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, MirConnectionPtr				v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, MirSurfacePtr				v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, AndroidNativeWindowPtr		v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, Win32InstanceHandle			v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, Win32WindowHandle			v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, Win32Handle					v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, Win32SecurityAttributesPtr	v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, AndroidHardwareBufferPtr		v) { return s << tcu::toHex(v.internal); }
  std::ostream& operator<< (std::ostream& s, RROutput						v) { return s << tcu::toHex(v.internal); }
  }
  
  const char* getPipelineCacheHeaderVersionName (VkPipelineCacheHeaderVersion value)
  {
  	switch (value)
  	{
  		case VK_PIPELINE_CACHE_HEADER_VERSION_ONE:	return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE";
  		default:									return DE_NULL;
  	}
  }
  
  const char* getResultName (VkResult value)
  {
  	switch (value)
  	{
  		case VK_SUCCESS:						return "VK_SUCCESS";
  		case VK_NOT_READY:						return "VK_NOT_READY";
  		case VK_TIMEOUT:						return "VK_TIMEOUT";
  		case VK_EVENT_SET:						return "VK_EVENT_SET";
  		case VK_EVENT_RESET:					return "VK_EVENT_RESET";
  		case VK_INCOMPLETE:						return "VK_INCOMPLETE";
  		case VK_ERROR_OUT_OF_HOST_MEMORY:		return "VK_ERROR_OUT_OF_HOST_MEMORY";
  		case VK_ERROR_OUT_OF_DEVICE_MEMORY:		return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
  		case VK_ERROR_INITIALIZATION_FAILED:	return "VK_ERROR_INITIALIZATION_FAILED";
  		case VK_ERROR_DEVICE_LOST:				return "VK_ERROR_DEVICE_LOST";
  		case VK_ERROR_MEMORY_MAP_FAILED:		return "VK_ERROR_MEMORY_MAP_FAILED";
  		case VK_ERROR_LAYER_NOT_PRESENT:		return "VK_ERROR_LAYER_NOT_PRESENT";
  		case VK_ERROR_EXTENSION_NOT_PRESENT:	return "VK_ERROR_EXTENSION_NOT_PRESENT";
  		case VK_ERROR_FEATURE_NOT_PRESENT:		return "VK_ERROR_FEATURE_NOT_PRESENT";
  		case VK_ERROR_INCOMPATIBLE_DRIVER:		return "VK_ERROR_INCOMPATIBLE_DRIVER";
  		case VK_ERROR_TOO_MANY_OBJECTS:			return "VK_ERROR_TOO_MANY_OBJECTS";
  		case VK_ERROR_FORMAT_NOT_SUPPORTED:		return "VK_ERROR_FORMAT_NOT_SUPPORTED";
  		case VK_ERROR_FRAGMENTED_POOL:			return "VK_ERROR_FRAGMENTED_POOL";
  		case VK_ERROR_OUT_OF_POOL_MEMORY:		return "VK_ERROR_OUT_OF_POOL_MEMORY";
  		case VK_ERROR_INVALID_EXTERNAL_HANDLE:	return "VK_ERROR_INVALID_EXTERNAL_HANDLE";
  		case VK_ERROR_SURFACE_LOST_KHR:			return "VK_ERROR_SURFACE_LOST_KHR";
  		case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:	return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
  		case VK_SUBOPTIMAL_KHR:					return "VK_SUBOPTIMAL_KHR";
  		case VK_ERROR_OUT_OF_DATE_KHR:			return "VK_ERROR_OUT_OF_DATE_KHR";
  		case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR:	return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
  		case VK_ERROR_VALIDATION_FAILED_EXT:	return "VK_ERROR_VALIDATION_FAILED_EXT";
  		case VK_ERROR_INVALID_SHADER_NV:		return "VK_ERROR_INVALID_SHADER_NV";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getStructureTypeName (VkStructureType value)
  {
  	switch (value)
  	{
  		case VK_STRUCTURE_TYPE_APPLICATION_INFO:												return "VK_STRUCTURE_TYPE_APPLICATION_INFO";
  		case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO:											return "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:												return "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_SUBMIT_INFO:														return "VK_STRUCTURE_TYPE_SUBMIT_INFO";
  		case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:											return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO";
  		case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE:												return "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE";
  		case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:												return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO";
  		case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO:												return "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO:											return "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO:												return "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:											return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:												return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO:											return "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO:												return "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO:											return "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:										return "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO:												return "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO:								return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO:										return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO";
  		case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:											return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET";
  		case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:												return "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET";
  		case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO:											return "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:											return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:										return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO";
  		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:									return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO";
  		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO:										return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO";
  		case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:											return "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO";
  		case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:											return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER";
  		case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:											return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER";
  		case VK_STRUCTURE_TYPE_MEMORY_BARRIER:													return "VK_STRUCTURE_TYPE_MEMORY_BARRIER";
  		case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES";
  		case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO:											return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO";
  		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO:											return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES";
  		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:									return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS";
  		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO";
  		case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:										return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:								return "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:										return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:									return "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO";
  		case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:							return "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO";
  		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:								return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2:								return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2";
  		case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2:								return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2";
  		case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2:							return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2";
  		case VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2:											return "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2";
  		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2:								return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:										return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:									return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2";
  		case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2:												return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2";
  		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2:										return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2";
  		case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2:										return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2";
  		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2:								return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES";
  		case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:					return "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:			return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:								return "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES";
  		case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:											return "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES";
  		case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2:												return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2";
  		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO:							return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:									return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO";
  		case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:									return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO";
  		case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:							return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES";
  		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:				return "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES";
  		case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO";
  		case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:								return "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO";
  		case VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES:										return "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:									return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES";
  		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:								return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:										return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO";
  		case VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES:										return "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES";
  		case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO";
  		case VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES:									return "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES";
  		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT:									return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR";
  		case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR:										return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR:												return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR";
  		case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:							return "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR";
  		case VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR:										return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:									return "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR";
  		case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:										return "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR";
  		case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:										return "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR:										return "VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:									return "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:			return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD";
  		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT";
  		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT:								return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT";
  		case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT:									return "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT";
  		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:						return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:						return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:					return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:						return "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD";
  		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:							return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:									return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:								return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV";
  		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:								return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV";
  		case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:						return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV";
  		case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:											return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT";
  		case VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN:										return "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN";
  		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR:								return "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR";
  		case VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:										return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR";
  		case VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR:										return "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR";
  		case VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR:											return "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR";
  		case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:						return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:							return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:							return "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:										return "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR";
  		case VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR:									return "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR";
  		case VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR:										return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR";
  		case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:												return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR";
  		case VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX:									return "VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX";
  		case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX:						return "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX";
  		case VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX:									return "VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX";
  		case VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX:							return "VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX";
  		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX:							return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX";
  		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX:							return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX";
  		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT:										return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT";
  		case VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT:											return "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT";
  		case VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT:											return "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT";
  		case VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT:											return "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT";
  		case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:										return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:	return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX";
  		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:					return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:				return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT";
  		case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_HDR_METADATA_EXT:												return "VK_STRUCTURE_TYPE_HDR_METADATA_EXT";
  		case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:							return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR";
  		case VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:								return "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR:									return "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR:										return "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR";
  		case VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR:											return "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:								return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR";
  		case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR:										return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR";
  		case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR:											return "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR:										return "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR:									return "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR:										return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR";
  		case VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR:								return "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR";
  		case VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK:										return "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK";
  		case VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK:									return "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK";
  		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:							return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID";
  		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID:						return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID";
  		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:				return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID";
  		case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:						return "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID";
  		case VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:					return "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID";
  		case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:											return "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT";
  		case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT:							return "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:										return "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT";
  		case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:						return "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT";
  		case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT";
  		case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT:										return "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT";
  		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT";
  		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT";
  		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:				return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:					return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV";
  		case VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT:								return "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT";
  		case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT";
  		default:																				return DE_NULL;
  	}
  }
  
  const char* getSystemAllocationScopeName (VkSystemAllocationScope value)
  {
  	switch (value)
  	{
  		case VK_SYSTEM_ALLOCATION_SCOPE_COMMAND:	return "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND";
  		case VK_SYSTEM_ALLOCATION_SCOPE_OBJECT:		return "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT";
  		case VK_SYSTEM_ALLOCATION_SCOPE_CACHE:		return "VK_SYSTEM_ALLOCATION_SCOPE_CACHE";
  		case VK_SYSTEM_ALLOCATION_SCOPE_DEVICE:		return "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE";
  		case VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE:	return "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE";
  		default:									return DE_NULL;
  	}
  }
  
  const char* getInternalAllocationTypeName (VkInternalAllocationType value)
  {
  	switch (value)
  	{
  		case VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE:	return "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getFormatName (VkFormat value)
  {
  	switch (value)
  	{
  		case VK_FORMAT_UNDEFINED:									return "VK_FORMAT_UNDEFINED";
  		case VK_FORMAT_R4G4_UNORM_PACK8:							return "VK_FORMAT_R4G4_UNORM_PACK8";
  		case VK_FORMAT_R4G4B4A4_UNORM_PACK16:						return "VK_FORMAT_R4G4B4A4_UNORM_PACK16";
  		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:						return "VK_FORMAT_B4G4R4A4_UNORM_PACK16";
  		case VK_FORMAT_R5G6B5_UNORM_PACK16:							return "VK_FORMAT_R5G6B5_UNORM_PACK16";
  		case VK_FORMAT_B5G6R5_UNORM_PACK16:							return "VK_FORMAT_B5G6R5_UNORM_PACK16";
  		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:						return "VK_FORMAT_R5G5B5A1_UNORM_PACK16";
  		case VK_FORMAT_B5G5R5A1_UNORM_PACK16:						return "VK_FORMAT_B5G5R5A1_UNORM_PACK16";
  		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:						return "VK_FORMAT_A1R5G5B5_UNORM_PACK16";
  		case VK_FORMAT_R8_UNORM:									return "VK_FORMAT_R8_UNORM";
  		case VK_FORMAT_R8_SNORM:									return "VK_FORMAT_R8_SNORM";
  		case VK_FORMAT_R8_USCALED:									return "VK_FORMAT_R8_USCALED";
  		case VK_FORMAT_R8_SSCALED:									return "VK_FORMAT_R8_SSCALED";
  		case VK_FORMAT_R8_UINT:										return "VK_FORMAT_R8_UINT";
  		case VK_FORMAT_R8_SINT:										return "VK_FORMAT_R8_SINT";
  		case VK_FORMAT_R8_SRGB:										return "VK_FORMAT_R8_SRGB";
  		case VK_FORMAT_R8G8_UNORM:									return "VK_FORMAT_R8G8_UNORM";
  		case VK_FORMAT_R8G8_SNORM:									return "VK_FORMAT_R8G8_SNORM";
  		case VK_FORMAT_R8G8_USCALED:								return "VK_FORMAT_R8G8_USCALED";
  		case VK_FORMAT_R8G8_SSCALED:								return "VK_FORMAT_R8G8_SSCALED";
  		case VK_FORMAT_R8G8_UINT:									return "VK_FORMAT_R8G8_UINT";
  		case VK_FORMAT_R8G8_SINT:									return "VK_FORMAT_R8G8_SINT";
  		case VK_FORMAT_R8G8_SRGB:									return "VK_FORMAT_R8G8_SRGB";
  		case VK_FORMAT_R8G8B8_UNORM:								return "VK_FORMAT_R8G8B8_UNORM";
  		case VK_FORMAT_R8G8B8_SNORM:								return "VK_FORMAT_R8G8B8_SNORM";
  		case VK_FORMAT_R8G8B8_USCALED:								return "VK_FORMAT_R8G8B8_USCALED";
  		case VK_FORMAT_R8G8B8_SSCALED:								return "VK_FORMAT_R8G8B8_SSCALED";
  		case VK_FORMAT_R8G8B8_UINT:									return "VK_FORMAT_R8G8B8_UINT";
  		case VK_FORMAT_R8G8B8_SINT:									return "VK_FORMAT_R8G8B8_SINT";
  		case VK_FORMAT_R8G8B8_SRGB:									return "VK_FORMAT_R8G8B8_SRGB";
  		case VK_FORMAT_B8G8R8_UNORM:								return "VK_FORMAT_B8G8R8_UNORM";
  		case VK_FORMAT_B8G8R8_SNORM:								return "VK_FORMAT_B8G8R8_SNORM";
  		case VK_FORMAT_B8G8R8_USCALED:								return "VK_FORMAT_B8G8R8_USCALED";
  		case VK_FORMAT_B8G8R8_SSCALED:								return "VK_FORMAT_B8G8R8_SSCALED";
  		case VK_FORMAT_B8G8R8_UINT:									return "VK_FORMAT_B8G8R8_UINT";
  		case VK_FORMAT_B8G8R8_SINT:									return "VK_FORMAT_B8G8R8_SINT";
  		case VK_FORMAT_B8G8R8_SRGB:									return "VK_FORMAT_B8G8R8_SRGB";
  		case VK_FORMAT_R8G8B8A8_UNORM:								return "VK_FORMAT_R8G8B8A8_UNORM";
  		case VK_FORMAT_R8G8B8A8_SNORM:								return "VK_FORMAT_R8G8B8A8_SNORM";
  		case VK_FORMAT_R8G8B8A8_USCALED:							return "VK_FORMAT_R8G8B8A8_USCALED";
  		case VK_FORMAT_R8G8B8A8_SSCALED:							return "VK_FORMAT_R8G8B8A8_SSCALED";
  		case VK_FORMAT_R8G8B8A8_UINT:								return "VK_FORMAT_R8G8B8A8_UINT";
  		case VK_FORMAT_R8G8B8A8_SINT:								return "VK_FORMAT_R8G8B8A8_SINT";
  		case VK_FORMAT_R8G8B8A8_SRGB:								return "VK_FORMAT_R8G8B8A8_SRGB";
  		case VK_FORMAT_B8G8R8A8_UNORM:								return "VK_FORMAT_B8G8R8A8_UNORM";
  		case VK_FORMAT_B8G8R8A8_SNORM:								return "VK_FORMAT_B8G8R8A8_SNORM";
  		case VK_FORMAT_B8G8R8A8_USCALED:							return "VK_FORMAT_B8G8R8A8_USCALED";
  		case VK_FORMAT_B8G8R8A8_SSCALED:							return "VK_FORMAT_B8G8R8A8_SSCALED";
  		case VK_FORMAT_B8G8R8A8_UINT:								return "VK_FORMAT_B8G8R8A8_UINT";
  		case VK_FORMAT_B8G8R8A8_SINT:								return "VK_FORMAT_B8G8R8A8_SINT";
  		case VK_FORMAT_B8G8R8A8_SRGB:								return "VK_FORMAT_B8G8R8A8_SRGB";
  		case VK_FORMAT_A8B8G8R8_UNORM_PACK32:						return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
  		case VK_FORMAT_A8B8G8R8_SNORM_PACK32:						return "VK_FORMAT_A8B8G8R8_SNORM_PACK32";
  		case VK_FORMAT_A8B8G8R8_USCALED_PACK32:						return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
  		case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:						return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32";
  		case VK_FORMAT_A8B8G8R8_UINT_PACK32:						return "VK_FORMAT_A8B8G8R8_UINT_PACK32";
  		case VK_FORMAT_A8B8G8R8_SINT_PACK32:						return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
  		case VK_FORMAT_A8B8G8R8_SRGB_PACK32:						return "VK_FORMAT_A8B8G8R8_SRGB_PACK32";
  		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:					return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
  		case VK_FORMAT_A2R10G10B10_SNORM_PACK32:					return "VK_FORMAT_A2R10G10B10_SNORM_PACK32";
  		case VK_FORMAT_A2R10G10B10_USCALED_PACK32:					return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
  		case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:					return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32";
  		case VK_FORMAT_A2R10G10B10_UINT_PACK32:						return "VK_FORMAT_A2R10G10B10_UINT_PACK32";
  		case VK_FORMAT_A2R10G10B10_SINT_PACK32:						return "VK_FORMAT_A2R10G10B10_SINT_PACK32";
  		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:					return "VK_FORMAT_A2B10G10R10_UNORM_PACK32";
  		case VK_FORMAT_A2B10G10R10_SNORM_PACK32:					return "VK_FORMAT_A2B10G10R10_SNORM_PACK32";
  		case VK_FORMAT_A2B10G10R10_USCALED_PACK32:					return "VK_FORMAT_A2B10G10R10_USCALED_PACK32";
  		case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:					return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32";
  		case VK_FORMAT_A2B10G10R10_UINT_PACK32:						return "VK_FORMAT_A2B10G10R10_UINT_PACK32";
  		case VK_FORMAT_A2B10G10R10_SINT_PACK32:						return "VK_FORMAT_A2B10G10R10_SINT_PACK32";
  		case VK_FORMAT_R16_UNORM:									return "VK_FORMAT_R16_UNORM";
  		case VK_FORMAT_R16_SNORM:									return "VK_FORMAT_R16_SNORM";
  		case VK_FORMAT_R16_USCALED:									return "VK_FORMAT_R16_USCALED";
  		case VK_FORMAT_R16_SSCALED:									return "VK_FORMAT_R16_SSCALED";
  		case VK_FORMAT_R16_UINT:									return "VK_FORMAT_R16_UINT";
  		case VK_FORMAT_R16_SINT:									return "VK_FORMAT_R16_SINT";
  		case VK_FORMAT_R16_SFLOAT:									return "VK_FORMAT_R16_SFLOAT";
  		case VK_FORMAT_R16G16_UNORM:								return "VK_FORMAT_R16G16_UNORM";
  		case VK_FORMAT_R16G16_SNORM:								return "VK_FORMAT_R16G16_SNORM";
  		case VK_FORMAT_R16G16_USCALED:								return "VK_FORMAT_R16G16_USCALED";
  		case VK_FORMAT_R16G16_SSCALED:								return "VK_FORMAT_R16G16_SSCALED";
  		case VK_FORMAT_R16G16_UINT:									return "VK_FORMAT_R16G16_UINT";
  		case VK_FORMAT_R16G16_SINT:									return "VK_FORMAT_R16G16_SINT";
  		case VK_FORMAT_R16G16_SFLOAT:								return "VK_FORMAT_R16G16_SFLOAT";
  		case VK_FORMAT_R16G16B16_UNORM:								return "VK_FORMAT_R16G16B16_UNORM";
  		case VK_FORMAT_R16G16B16_SNORM:								return "VK_FORMAT_R16G16B16_SNORM";
  		case VK_FORMAT_R16G16B16_USCALED:							return "VK_FORMAT_R16G16B16_USCALED";
  		case VK_FORMAT_R16G16B16_SSCALED:							return "VK_FORMAT_R16G16B16_SSCALED";
  		case VK_FORMAT_R16G16B16_UINT:								return "VK_FORMAT_R16G16B16_UINT";
  		case VK_FORMAT_R16G16B16_SINT:								return "VK_FORMAT_R16G16B16_SINT";
  		case VK_FORMAT_R16G16B16_SFLOAT:							return "VK_FORMAT_R16G16B16_SFLOAT";
  		case VK_FORMAT_R16G16B16A16_UNORM:							return "VK_FORMAT_R16G16B16A16_UNORM";
  		case VK_FORMAT_R16G16B16A16_SNORM:							return "VK_FORMAT_R16G16B16A16_SNORM";
  		case VK_FORMAT_R16G16B16A16_USCALED:						return "VK_FORMAT_R16G16B16A16_USCALED";
  		case VK_FORMAT_R16G16B16A16_SSCALED:						return "VK_FORMAT_R16G16B16A16_SSCALED";
  		case VK_FORMAT_R16G16B16A16_UINT:							return "VK_FORMAT_R16G16B16A16_UINT";
  		case VK_FORMAT_R16G16B16A16_SINT:							return "VK_FORMAT_R16G16B16A16_SINT";
  		case VK_FORMAT_R16G16B16A16_SFLOAT:							return "VK_FORMAT_R16G16B16A16_SFLOAT";
  		case VK_FORMAT_R32_UINT:									return "VK_FORMAT_R32_UINT";
  		case VK_FORMAT_R32_SINT:									return "VK_FORMAT_R32_SINT";
  		case VK_FORMAT_R32_SFLOAT:									return "VK_FORMAT_R32_SFLOAT";
  		case VK_FORMAT_R32G32_UINT:									return "VK_FORMAT_R32G32_UINT";
  		case VK_FORMAT_R32G32_SINT:									return "VK_FORMAT_R32G32_SINT";
  		case VK_FORMAT_R32G32_SFLOAT:								return "VK_FORMAT_R32G32_SFLOAT";
  		case VK_FORMAT_R32G32B32_UINT:								return "VK_FORMAT_R32G32B32_UINT";
  		case VK_FORMAT_R32G32B32_SINT:								return "VK_FORMAT_R32G32B32_SINT";
  		case VK_FORMAT_R32G32B32_SFLOAT:							return "VK_FORMAT_R32G32B32_SFLOAT";
  		case VK_FORMAT_R32G32B32A32_UINT:							return "VK_FORMAT_R32G32B32A32_UINT";
  		case VK_FORMAT_R32G32B32A32_SINT:							return "VK_FORMAT_R32G32B32A32_SINT";
  		case VK_FORMAT_R32G32B32A32_SFLOAT:							return "VK_FORMAT_R32G32B32A32_SFLOAT";
  		case VK_FORMAT_R64_UINT:									return "VK_FORMAT_R64_UINT";
  		case VK_FORMAT_R64_SINT:									return "VK_FORMAT_R64_SINT";
  		case VK_FORMAT_R64_SFLOAT:									return "VK_FORMAT_R64_SFLOAT";
  		case VK_FORMAT_R64G64_UINT:									return "VK_FORMAT_R64G64_UINT";
  		case VK_FORMAT_R64G64_SINT:									return "VK_FORMAT_R64G64_SINT";
  		case VK_FORMAT_R64G64_SFLOAT:								return "VK_FORMAT_R64G64_SFLOAT";
  		case VK_FORMAT_R64G64B64_UINT:								return "VK_FORMAT_R64G64B64_UINT";
  		case VK_FORMAT_R64G64B64_SINT:								return "VK_FORMAT_R64G64B64_SINT";
  		case VK_FORMAT_R64G64B64_SFLOAT:							return "VK_FORMAT_R64G64B64_SFLOAT";
  		case VK_FORMAT_R64G64B64A64_UINT:							return "VK_FORMAT_R64G64B64A64_UINT";
  		case VK_FORMAT_R64G64B64A64_SINT:							return "VK_FORMAT_R64G64B64A64_SINT";
  		case VK_FORMAT_R64G64B64A64_SFLOAT:							return "VK_FORMAT_R64G64B64A64_SFLOAT";
  		case VK_FORMAT_B10G11R11_UFLOAT_PACK32:						return "VK_FORMAT_B10G11R11_UFLOAT_PACK32";
  		case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:						return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32";
  		case VK_FORMAT_D16_UNORM:									return "VK_FORMAT_D16_UNORM";
  		case VK_FORMAT_X8_D24_UNORM_PACK32:							return "VK_FORMAT_X8_D24_UNORM_PACK32";
  		case VK_FORMAT_D32_SFLOAT:									return "VK_FORMAT_D32_SFLOAT";
  		case VK_FORMAT_S8_UINT:										return "VK_FORMAT_S8_UINT";
  		case VK_FORMAT_D16_UNORM_S8_UINT:							return "VK_FORMAT_D16_UNORM_S8_UINT";
  		case VK_FORMAT_D24_UNORM_S8_UINT:							return "VK_FORMAT_D24_UNORM_S8_UINT";
  		case VK_FORMAT_D32_SFLOAT_S8_UINT:							return "VK_FORMAT_D32_SFLOAT_S8_UINT";
  		case VK_FORMAT_BC1_RGB_UNORM_BLOCK:							return "VK_FORMAT_BC1_RGB_UNORM_BLOCK";
  		case VK_FORMAT_BC1_RGB_SRGB_BLOCK:							return "VK_FORMAT_BC1_RGB_SRGB_BLOCK";
  		case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:						return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK";
  		case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:							return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK";
  		case VK_FORMAT_BC2_UNORM_BLOCK:								return "VK_FORMAT_BC2_UNORM_BLOCK";
  		case VK_FORMAT_BC2_SRGB_BLOCK:								return "VK_FORMAT_BC2_SRGB_BLOCK";
  		case VK_FORMAT_BC3_UNORM_BLOCK:								return "VK_FORMAT_BC3_UNORM_BLOCK";
  		case VK_FORMAT_BC3_SRGB_BLOCK:								return "VK_FORMAT_BC3_SRGB_BLOCK";
  		case VK_FORMAT_BC4_UNORM_BLOCK:								return "VK_FORMAT_BC4_UNORM_BLOCK";
  		case VK_FORMAT_BC4_SNORM_BLOCK:								return "VK_FORMAT_BC4_SNORM_BLOCK";
  		case VK_FORMAT_BC5_UNORM_BLOCK:								return "VK_FORMAT_BC5_UNORM_BLOCK";
  		case VK_FORMAT_BC5_SNORM_BLOCK:								return "VK_FORMAT_BC5_SNORM_BLOCK";
  		case VK_FORMAT_BC6H_UFLOAT_BLOCK:							return "VK_FORMAT_BC6H_UFLOAT_BLOCK";
  		case VK_FORMAT_BC6H_SFLOAT_BLOCK:							return "VK_FORMAT_BC6H_SFLOAT_BLOCK";
  		case VK_FORMAT_BC7_UNORM_BLOCK:								return "VK_FORMAT_BC7_UNORM_BLOCK";
  		case VK_FORMAT_BC7_SRGB_BLOCK:								return "VK_FORMAT_BC7_SRGB_BLOCK";
  		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK";
  		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:						return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK";
  		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK";
  		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK";
  		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK";
  		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:					return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK";
  		case VK_FORMAT_EAC_R11_UNORM_BLOCK:							return "VK_FORMAT_EAC_R11_UNORM_BLOCK";
  		case VK_FORMAT_EAC_R11_SNORM_BLOCK:							return "VK_FORMAT_EAC_R11_SNORM_BLOCK";
  		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:						return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK";
  		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:						return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK";
  		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:						return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:							return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:						return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:							return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:						return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:							return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:						return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:						return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:						return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:						return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
  		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:						return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
  		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:						return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
  		case VK_FORMAT_G8B8G8R8_422_UNORM:							return "VK_FORMAT_G8B8G8R8_422_UNORM";
  		case VK_FORMAT_B8G8R8G8_422_UNORM:							return "VK_FORMAT_B8G8R8G8_422_UNORM";
  		case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM";
  		case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:					return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM";
  		case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM";
  		case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:					return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM";
  		case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:					return "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM";
  		case VK_FORMAT_R10X6_UNORM_PACK16:							return "VK_FORMAT_R10X6_UNORM_PACK16";
  		case VK_FORMAT_R10X6G10X6_UNORM_2PACK16:					return "VK_FORMAT_R10X6G10X6_UNORM_2PACK16";
  		case VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:			return "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16";
  		case VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:		return "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16";
  		case VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:		return "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16";
  		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16";
  		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16";
  		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16";
  		case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16";
  		case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:	return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16";
  		case VK_FORMAT_R12X4_UNORM_PACK16:							return "VK_FORMAT_R12X4_UNORM_PACK16";
  		case VK_FORMAT_R12X4G12X4_UNORM_2PACK16:					return "VK_FORMAT_R12X4G12X4_UNORM_2PACK16";
  		case VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:			return "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16";
  		case VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:		return "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16";
  		case VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:		return "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16";
  		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16";
  		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16";
  		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16";
  		case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16";
  		case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:	return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16";
  		case VK_FORMAT_G16B16G16R16_422_UNORM:						return "VK_FORMAT_G16B16G16R16_422_UNORM";
  		case VK_FORMAT_B16G16R16G16_422_UNORM:						return "VK_FORMAT_B16G16R16G16_422_UNORM";
  		case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM";
  		case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:					return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM";
  		case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM";
  		case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:					return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM";
  		case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:				return "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM";
  		case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG";
  		case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG";
  		case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG";
  		case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG";
  		case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG";
  		case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG";
  		case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG";
  		case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:					return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG";
  		default:													return DE_NULL;
  	}
  }
  
  const char* getImageTypeName (VkImageType value)
  {
  	switch (value)
  	{
  		case VK_IMAGE_TYPE_1D:	return "VK_IMAGE_TYPE_1D";
  		case VK_IMAGE_TYPE_2D:	return "VK_IMAGE_TYPE_2D";
  		case VK_IMAGE_TYPE_3D:	return "VK_IMAGE_TYPE_3D";
  		default:				return DE_NULL;
  	}
  }
  
  const char* getImageTilingName (VkImageTiling value)
  {
  	switch (value)
  	{
  		case VK_IMAGE_TILING_OPTIMAL:	return "VK_IMAGE_TILING_OPTIMAL";
  		case VK_IMAGE_TILING_LINEAR:	return "VK_IMAGE_TILING_LINEAR";
  		default:						return DE_NULL;
  	}
  }
  
  const char* getPhysicalDeviceTypeName (VkPhysicalDeviceType value)
  {
  	switch (value)
  	{
  		case VK_PHYSICAL_DEVICE_TYPE_OTHER:				return "VK_PHYSICAL_DEVICE_TYPE_OTHER";
  		case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:	return "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU";
  		case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:		return "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU";
  		case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:		return "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU";
  		case VK_PHYSICAL_DEVICE_TYPE_CPU:				return "VK_PHYSICAL_DEVICE_TYPE_CPU";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getQueryTypeName (VkQueryType value)
  {
  	switch (value)
  	{
  		case VK_QUERY_TYPE_OCCLUSION:			return "VK_QUERY_TYPE_OCCLUSION";
  		case VK_QUERY_TYPE_PIPELINE_STATISTICS:	return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
  		case VK_QUERY_TYPE_TIMESTAMP:			return "VK_QUERY_TYPE_TIMESTAMP";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getSharingModeName (VkSharingMode value)
  {
  	switch (value)
  	{
  		case VK_SHARING_MODE_EXCLUSIVE:		return "VK_SHARING_MODE_EXCLUSIVE";
  		case VK_SHARING_MODE_CONCURRENT:	return "VK_SHARING_MODE_CONCURRENT";
  		default:							return DE_NULL;
  	}
  }
  
  const char* getImageLayoutName (VkImageLayout value)
  {
  	switch (value)
  	{
  		case VK_IMAGE_LAYOUT_UNDEFINED:										return "VK_IMAGE_LAYOUT_UNDEFINED";
  		case VK_IMAGE_LAYOUT_GENERAL:										return "VK_IMAGE_LAYOUT_GENERAL";
  		case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:						return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL";
  		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:				return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL";
  		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:				return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL";
  		case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:						return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL";
  		case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:							return "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL";
  		case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:							return "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL";
  		case VK_IMAGE_LAYOUT_PREINITIALIZED:								return "VK_IMAGE_LAYOUT_PREINITIALIZED";
  		case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL";
  		case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL";
  		case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:								return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
  		case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:							return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
  		default:															return DE_NULL;
  	}
  }
  
  const char* getImageViewTypeName (VkImageViewType value)
  {
  	switch (value)
  	{
  		case VK_IMAGE_VIEW_TYPE_1D:			return "VK_IMAGE_VIEW_TYPE_1D";
  		case VK_IMAGE_VIEW_TYPE_2D:			return "VK_IMAGE_VIEW_TYPE_2D";
  		case VK_IMAGE_VIEW_TYPE_3D:			return "VK_IMAGE_VIEW_TYPE_3D";
  		case VK_IMAGE_VIEW_TYPE_CUBE:		return "VK_IMAGE_VIEW_TYPE_CUBE";
  		case VK_IMAGE_VIEW_TYPE_1D_ARRAY:	return "VK_IMAGE_VIEW_TYPE_1D_ARRAY";
  		case VK_IMAGE_VIEW_TYPE_2D_ARRAY:	return "VK_IMAGE_VIEW_TYPE_2D_ARRAY";
  		case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:	return "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY";
  		default:							return DE_NULL;
  	}
  }
  
  const char* getComponentSwizzleName (VkComponentSwizzle value)
  {
  	switch (value)
  	{
  		case VK_COMPONENT_SWIZZLE_IDENTITY:	return "VK_COMPONENT_SWIZZLE_IDENTITY";
  		case VK_COMPONENT_SWIZZLE_ZERO:		return "VK_COMPONENT_SWIZZLE_ZERO";
  		case VK_COMPONENT_SWIZZLE_ONE:		return "VK_COMPONENT_SWIZZLE_ONE";
  		case VK_COMPONENT_SWIZZLE_R:		return "VK_COMPONENT_SWIZZLE_R";
  		case VK_COMPONENT_SWIZZLE_G:		return "VK_COMPONENT_SWIZZLE_G";
  		case VK_COMPONENT_SWIZZLE_B:		return "VK_COMPONENT_SWIZZLE_B";
  		case VK_COMPONENT_SWIZZLE_A:		return "VK_COMPONENT_SWIZZLE_A";
  		default:							return DE_NULL;
  	}
  }
  
  const char* getVertexInputRateName (VkVertexInputRate value)
  {
  	switch (value)
  	{
  		case VK_VERTEX_INPUT_RATE_VERTEX:	return "VK_VERTEX_INPUT_RATE_VERTEX";
  		case VK_VERTEX_INPUT_RATE_INSTANCE:	return "VK_VERTEX_INPUT_RATE_INSTANCE";
  		default:							return DE_NULL;
  	}
  }
  
  const char* getPrimitiveTopologyName (VkPrimitiveTopology value)
  {
  	switch (value)
  	{
  		case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:						return "VK_PRIMITIVE_TOPOLOGY_POINT_LIST";
  		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:						return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST";
  		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:						return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP";
  		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST";
  		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP";
  		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN";
  		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:		return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY";
  		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:		return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY";
  		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:	return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY";
  		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:	return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY";
  		case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST:						return "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST";
  		default:													return DE_NULL;
  	}
  }
  
  const char* getPolygonModeName (VkPolygonMode value)
  {
  	switch (value)
  	{
  		case VK_POLYGON_MODE_FILL:				return "VK_POLYGON_MODE_FILL";
  		case VK_POLYGON_MODE_LINE:				return "VK_POLYGON_MODE_LINE";
  		case VK_POLYGON_MODE_POINT:				return "VK_POLYGON_MODE_POINT";
  		case VK_POLYGON_MODE_FILL_RECTANGLE_NV:	return "VK_POLYGON_MODE_FILL_RECTANGLE_NV";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getFrontFaceName (VkFrontFace value)
  {
  	switch (value)
  	{
  		case VK_FRONT_FACE_COUNTER_CLOCKWISE:	return "VK_FRONT_FACE_COUNTER_CLOCKWISE";
  		case VK_FRONT_FACE_CLOCKWISE:			return "VK_FRONT_FACE_CLOCKWISE";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getCompareOpName (VkCompareOp value)
  {
  	switch (value)
  	{
  		case VK_COMPARE_OP_NEVER:				return "VK_COMPARE_OP_NEVER";
  		case VK_COMPARE_OP_LESS:				return "VK_COMPARE_OP_LESS";
  		case VK_COMPARE_OP_EQUAL:				return "VK_COMPARE_OP_EQUAL";
  		case VK_COMPARE_OP_LESS_OR_EQUAL:		return "VK_COMPARE_OP_LESS_OR_EQUAL";
  		case VK_COMPARE_OP_GREATER:				return "VK_COMPARE_OP_GREATER";
  		case VK_COMPARE_OP_NOT_EQUAL:			return "VK_COMPARE_OP_NOT_EQUAL";
  		case VK_COMPARE_OP_GREATER_OR_EQUAL:	return "VK_COMPARE_OP_GREATER_OR_EQUAL";
  		case VK_COMPARE_OP_ALWAYS:				return "VK_COMPARE_OP_ALWAYS";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getStencilOpName (VkStencilOp value)
  {
  	switch (value)
  	{
  		case VK_STENCIL_OP_KEEP:				return "VK_STENCIL_OP_KEEP";
  		case VK_STENCIL_OP_ZERO:				return "VK_STENCIL_OP_ZERO";
  		case VK_STENCIL_OP_REPLACE:				return "VK_STENCIL_OP_REPLACE";
  		case VK_STENCIL_OP_INCREMENT_AND_CLAMP:	return "VK_STENCIL_OP_INCREMENT_AND_CLAMP";
  		case VK_STENCIL_OP_DECREMENT_AND_CLAMP:	return "VK_STENCIL_OP_DECREMENT_AND_CLAMP";
  		case VK_STENCIL_OP_INVERT:				return "VK_STENCIL_OP_INVERT";
  		case VK_STENCIL_OP_INCREMENT_AND_WRAP:	return "VK_STENCIL_OP_INCREMENT_AND_WRAP";
  		case VK_STENCIL_OP_DECREMENT_AND_WRAP:	return "VK_STENCIL_OP_DECREMENT_AND_WRAP";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getLogicOpName (VkLogicOp value)
  {
  	switch (value)
  	{
  		case VK_LOGIC_OP_CLEAR:			return "VK_LOGIC_OP_CLEAR";
  		case VK_LOGIC_OP_AND:			return "VK_LOGIC_OP_AND";
  		case VK_LOGIC_OP_AND_REVERSE:	return "VK_LOGIC_OP_AND_REVERSE";
  		case VK_LOGIC_OP_COPY:			return "VK_LOGIC_OP_COPY";
  		case VK_LOGIC_OP_AND_INVERTED:	return "VK_LOGIC_OP_AND_INVERTED";
  		case VK_LOGIC_OP_NO_OP:			return "VK_LOGIC_OP_NO_OP";
  		case VK_LOGIC_OP_XOR:			return "VK_LOGIC_OP_XOR";
  		case VK_LOGIC_OP_OR:			return "VK_LOGIC_OP_OR";
  		case VK_LOGIC_OP_NOR:			return "VK_LOGIC_OP_NOR";
  		case VK_LOGIC_OP_EQUIVALENT:	return "VK_LOGIC_OP_EQUIVALENT";
  		case VK_LOGIC_OP_INVERT:		return "VK_LOGIC_OP_INVERT";
  		case VK_LOGIC_OP_OR_REVERSE:	return "VK_LOGIC_OP_OR_REVERSE";
  		case VK_LOGIC_OP_COPY_INVERTED:	return "VK_LOGIC_OP_COPY_INVERTED";
  		case VK_LOGIC_OP_OR_INVERTED:	return "VK_LOGIC_OP_OR_INVERTED";
  		case VK_LOGIC_OP_NAND:			return "VK_LOGIC_OP_NAND";
  		case VK_LOGIC_OP_SET:			return "VK_LOGIC_OP_SET";
  		default:						return DE_NULL;
  	}
  }
  
  const char* getBlendFactorName (VkBlendFactor value)
  {
  	switch (value)
  	{
  		case VK_BLEND_FACTOR_ZERO:						return "VK_BLEND_FACTOR_ZERO";
  		case VK_BLEND_FACTOR_ONE:						return "VK_BLEND_FACTOR_ONE";
  		case VK_BLEND_FACTOR_SRC_COLOR:					return "VK_BLEND_FACTOR_SRC_COLOR";
  		case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR";
  		case VK_BLEND_FACTOR_DST_COLOR:					return "VK_BLEND_FACTOR_DST_COLOR";
  		case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR";
  		case VK_BLEND_FACTOR_SRC_ALPHA:					return "VK_BLEND_FACTOR_SRC_ALPHA";
  		case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA";
  		case VK_BLEND_FACTOR_DST_ALPHA:					return "VK_BLEND_FACTOR_DST_ALPHA";
  		case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA";
  		case VK_BLEND_FACTOR_CONSTANT_COLOR:			return "VK_BLEND_FACTOR_CONSTANT_COLOR";
  		case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR:	return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR";
  		case VK_BLEND_FACTOR_CONSTANT_ALPHA:			return "VK_BLEND_FACTOR_CONSTANT_ALPHA";
  		case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA:	return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA";
  		case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE:		return "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE";
  		case VK_BLEND_FACTOR_SRC1_COLOR:				return "VK_BLEND_FACTOR_SRC1_COLOR";
  		case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR";
  		case VK_BLEND_FACTOR_SRC1_ALPHA:				return "VK_BLEND_FACTOR_SRC1_ALPHA";
  		case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getBlendOpName (VkBlendOp value)
  {
  	switch (value)
  	{
  		case VK_BLEND_OP_ADD:						return "VK_BLEND_OP_ADD";
  		case VK_BLEND_OP_SUBTRACT:					return "VK_BLEND_OP_SUBTRACT";
  		case VK_BLEND_OP_REVERSE_SUBTRACT:			return "VK_BLEND_OP_REVERSE_SUBTRACT";
  		case VK_BLEND_OP_MIN:						return "VK_BLEND_OP_MIN";
  		case VK_BLEND_OP_MAX:						return "VK_BLEND_OP_MAX";
  		case VK_BLEND_OP_ZERO_EXT:					return "VK_BLEND_OP_ZERO_EXT";
  		case VK_BLEND_OP_SRC_EXT:					return "VK_BLEND_OP_SRC_EXT";
  		case VK_BLEND_OP_DST_EXT:					return "VK_BLEND_OP_DST_EXT";
  		case VK_BLEND_OP_SRC_OVER_EXT:				return "VK_BLEND_OP_SRC_OVER_EXT";
  		case VK_BLEND_OP_DST_OVER_EXT:				return "VK_BLEND_OP_DST_OVER_EXT";
  		case VK_BLEND_OP_SRC_IN_EXT:				return "VK_BLEND_OP_SRC_IN_EXT";
  		case VK_BLEND_OP_DST_IN_EXT:				return "VK_BLEND_OP_DST_IN_EXT";
  		case VK_BLEND_OP_SRC_OUT_EXT:				return "VK_BLEND_OP_SRC_OUT_EXT";
  		case VK_BLEND_OP_DST_OUT_EXT:				return "VK_BLEND_OP_DST_OUT_EXT";
  		case VK_BLEND_OP_SRC_ATOP_EXT:				return "VK_BLEND_OP_SRC_ATOP_EXT";
  		case VK_BLEND_OP_DST_ATOP_EXT:				return "VK_BLEND_OP_DST_ATOP_EXT";
  		case VK_BLEND_OP_XOR_EXT:					return "VK_BLEND_OP_XOR_EXT";
  		case VK_BLEND_OP_MULTIPLY_EXT:				return "VK_BLEND_OP_MULTIPLY_EXT";
  		case VK_BLEND_OP_SCREEN_EXT:				return "VK_BLEND_OP_SCREEN_EXT";
  		case VK_BLEND_OP_OVERLAY_EXT:				return "VK_BLEND_OP_OVERLAY_EXT";
  		case VK_BLEND_OP_DARKEN_EXT:				return "VK_BLEND_OP_DARKEN_EXT";
  		case VK_BLEND_OP_LIGHTEN_EXT:				return "VK_BLEND_OP_LIGHTEN_EXT";
  		case VK_BLEND_OP_COLORDODGE_EXT:			return "VK_BLEND_OP_COLORDODGE_EXT";
  		case VK_BLEND_OP_COLORBURN_EXT:				return "VK_BLEND_OP_COLORBURN_EXT";
  		case VK_BLEND_OP_HARDLIGHT_EXT:				return "VK_BLEND_OP_HARDLIGHT_EXT";
  		case VK_BLEND_OP_SOFTLIGHT_EXT:				return "VK_BLEND_OP_SOFTLIGHT_EXT";
  		case VK_BLEND_OP_DIFFERENCE_EXT:			return "VK_BLEND_OP_DIFFERENCE_EXT";
  		case VK_BLEND_OP_EXCLUSION_EXT:				return "VK_BLEND_OP_EXCLUSION_EXT";
  		case VK_BLEND_OP_INVERT_EXT:				return "VK_BLEND_OP_INVERT_EXT";
  		case VK_BLEND_OP_INVERT_RGB_EXT:			return "VK_BLEND_OP_INVERT_RGB_EXT";
  		case VK_BLEND_OP_LINEARDODGE_EXT:			return "VK_BLEND_OP_LINEARDODGE_EXT";
  		case VK_BLEND_OP_LINEARBURN_EXT:			return "VK_BLEND_OP_LINEARBURN_EXT";
  		case VK_BLEND_OP_VIVIDLIGHT_EXT:			return "VK_BLEND_OP_VIVIDLIGHT_EXT";
  		case VK_BLEND_OP_LINEARLIGHT_EXT:			return "VK_BLEND_OP_LINEARLIGHT_EXT";
  		case VK_BLEND_OP_PINLIGHT_EXT:				return "VK_BLEND_OP_PINLIGHT_EXT";
  		case VK_BLEND_OP_HARDMIX_EXT:				return "VK_BLEND_OP_HARDMIX_EXT";
  		case VK_BLEND_OP_HSL_HUE_EXT:				return "VK_BLEND_OP_HSL_HUE_EXT";
  		case VK_BLEND_OP_HSL_SATURATION_EXT:		return "VK_BLEND_OP_HSL_SATURATION_EXT";
  		case VK_BLEND_OP_HSL_COLOR_EXT:				return "VK_BLEND_OP_HSL_COLOR_EXT";
  		case VK_BLEND_OP_HSL_LUMINOSITY_EXT:		return "VK_BLEND_OP_HSL_LUMINOSITY_EXT";
  		case VK_BLEND_OP_PLUS_EXT:					return "VK_BLEND_OP_PLUS_EXT";
  		case VK_BLEND_OP_PLUS_CLAMPED_EXT:			return "VK_BLEND_OP_PLUS_CLAMPED_EXT";
  		case VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT:	return "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT";
  		case VK_BLEND_OP_PLUS_DARKER_EXT:			return "VK_BLEND_OP_PLUS_DARKER_EXT";
  		case VK_BLEND_OP_MINUS_EXT:					return "VK_BLEND_OP_MINUS_EXT";
  		case VK_BLEND_OP_MINUS_CLAMPED_EXT:			return "VK_BLEND_OP_MINUS_CLAMPED_EXT";
  		case VK_BLEND_OP_CONTRAST_EXT:				return "VK_BLEND_OP_CONTRAST_EXT";
  		case VK_BLEND_OP_INVERT_OVG_EXT:			return "VK_BLEND_OP_INVERT_OVG_EXT";
  		case VK_BLEND_OP_RED_EXT:					return "VK_BLEND_OP_RED_EXT";
  		case VK_BLEND_OP_GREEN_EXT:					return "VK_BLEND_OP_GREEN_EXT";
  		case VK_BLEND_OP_BLUE_EXT:					return "VK_BLEND_OP_BLUE_EXT";
  		default:									return DE_NULL;
  	}
  }
  
  const char* getDynamicStateName (VkDynamicState value)
  {
  	switch (value)
  	{
  		case VK_DYNAMIC_STATE_VIEWPORT:					return "VK_DYNAMIC_STATE_VIEWPORT";
  		case VK_DYNAMIC_STATE_SCISSOR:					return "VK_DYNAMIC_STATE_SCISSOR";
  		case VK_DYNAMIC_STATE_LINE_WIDTH:				return "VK_DYNAMIC_STATE_LINE_WIDTH";
  		case VK_DYNAMIC_STATE_DEPTH_BIAS:				return "VK_DYNAMIC_STATE_DEPTH_BIAS";
  		case VK_DYNAMIC_STATE_BLEND_CONSTANTS:			return "VK_DYNAMIC_STATE_BLEND_CONSTANTS";
  		case VK_DYNAMIC_STATE_DEPTH_BOUNDS:				return "VK_DYNAMIC_STATE_DEPTH_BOUNDS";
  		case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:		return "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK";
  		case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:		return "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK";
  		case VK_DYNAMIC_STATE_STENCIL_REFERENCE:		return "VK_DYNAMIC_STATE_STENCIL_REFERENCE";
  		case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV:	return "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV";
  		case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT:	return "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT";
  		case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:		return "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getFilterName (VkFilter value)
  {
  	switch (value)
  	{
  		case VK_FILTER_NEAREST:		return "VK_FILTER_NEAREST";
  		case VK_FILTER_LINEAR:		return "VK_FILTER_LINEAR";
  		case VK_FILTER_CUBIC_IMG:	return "VK_FILTER_CUBIC_IMG";
  		default:					return DE_NULL;
  	}
  }
  
  const char* getSamplerMipmapModeName (VkSamplerMipmapMode value)
  {
  	switch (value)
  	{
  		case VK_SAMPLER_MIPMAP_MODE_NEAREST:	return "VK_SAMPLER_MIPMAP_MODE_NEAREST";
  		case VK_SAMPLER_MIPMAP_MODE_LINEAR:		return "VK_SAMPLER_MIPMAP_MODE_LINEAR";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getSamplerAddressModeName (VkSamplerAddressMode value)
  {
  	switch (value)
  	{
  		case VK_SAMPLER_ADDRESS_MODE_REPEAT:				return "VK_SAMPLER_ADDRESS_MODE_REPEAT";
  		case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:		return "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT";
  		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:			return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE";
  		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:		return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER";
  		case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:	return "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE";
  		default:											return DE_NULL;
  	}
  }
  
  const char* getBorderColorName (VkBorderColor value)
  {
  	switch (value)
  	{
  		case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:	return "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK";
  		case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:		return "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK";
  		case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:		return "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK";
  		case VK_BORDER_COLOR_INT_OPAQUE_BLACK:			return "VK_BORDER_COLOR_INT_OPAQUE_BLACK";
  		case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:		return "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE";
  		case VK_BORDER_COLOR_INT_OPAQUE_WHITE:			return "VK_BORDER_COLOR_INT_OPAQUE_WHITE";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getDescriptorTypeName (VkDescriptorType value)
  {
  	switch (value)
  	{
  		case VK_DESCRIPTOR_TYPE_SAMPLER:				return "VK_DESCRIPTOR_TYPE_SAMPLER";
  		case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:	return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER";
  		case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:			return "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE";
  		case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:			return "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE";
  		case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:	return "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER";
  		case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:	return "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER";
  		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:			return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER";
  		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:			return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER";
  		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:	return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC";
  		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:	return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC";
  		case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:		return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getAttachmentLoadOpName (VkAttachmentLoadOp value)
  {
  	switch (value)
  	{
  		case VK_ATTACHMENT_LOAD_OP_LOAD:		return "VK_ATTACHMENT_LOAD_OP_LOAD";
  		case VK_ATTACHMENT_LOAD_OP_CLEAR:		return "VK_ATTACHMENT_LOAD_OP_CLEAR";
  		case VK_ATTACHMENT_LOAD_OP_DONT_CARE:	return "VK_ATTACHMENT_LOAD_OP_DONT_CARE";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getAttachmentStoreOpName (VkAttachmentStoreOp value)
  {
  	switch (value)
  	{
  		case VK_ATTACHMENT_STORE_OP_STORE:		return "VK_ATTACHMENT_STORE_OP_STORE";
  		case VK_ATTACHMENT_STORE_OP_DONT_CARE:	return "VK_ATTACHMENT_STORE_OP_DONT_CARE";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getPipelineBindPointName (VkPipelineBindPoint value)
  {
  	switch (value)
  	{
  		case VK_PIPELINE_BIND_POINT_GRAPHICS:	return "VK_PIPELINE_BIND_POINT_GRAPHICS";
  		case VK_PIPELINE_BIND_POINT_COMPUTE:	return "VK_PIPELINE_BIND_POINT_COMPUTE";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getCommandBufferLevelName (VkCommandBufferLevel value)
  {
  	switch (value)
  	{
  		case VK_COMMAND_BUFFER_LEVEL_PRIMARY:	return "VK_COMMAND_BUFFER_LEVEL_PRIMARY";
  		case VK_COMMAND_BUFFER_LEVEL_SECONDARY:	return "VK_COMMAND_BUFFER_LEVEL_SECONDARY";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getIndexTypeName (VkIndexType value)
  {
  	switch (value)
  	{
  		case VK_INDEX_TYPE_UINT16:	return "VK_INDEX_TYPE_UINT16";
  		case VK_INDEX_TYPE_UINT32:	return "VK_INDEX_TYPE_UINT32";
  		default:					return DE_NULL;
  	}
  }
  
  const char* getSubpassContentsName (VkSubpassContents value)
  {
  	switch (value)
  	{
  		case VK_SUBPASS_CONTENTS_INLINE:					return "VK_SUBPASS_CONTENTS_INLINE";
  		case VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS:	return "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS";
  		default:											return DE_NULL;
  	}
  }
  
  const char* getObjectTypeName (VkObjectType value)
  {
  	switch (value)
  	{
  		case VK_OBJECT_TYPE_UNKNOWN:						return "VK_OBJECT_TYPE_UNKNOWN";
  		case VK_OBJECT_TYPE_INSTANCE:						return "VK_OBJECT_TYPE_INSTANCE";
  		case VK_OBJECT_TYPE_PHYSICAL_DEVICE:				return "VK_OBJECT_TYPE_PHYSICAL_DEVICE";
  		case VK_OBJECT_TYPE_DEVICE:							return "VK_OBJECT_TYPE_DEVICE";
  		case VK_OBJECT_TYPE_QUEUE:							return "VK_OBJECT_TYPE_QUEUE";
  		case VK_OBJECT_TYPE_SEMAPHORE:						return "VK_OBJECT_TYPE_SEMAPHORE";
  		case VK_OBJECT_TYPE_COMMAND_BUFFER:					return "VK_OBJECT_TYPE_COMMAND_BUFFER";
  		case VK_OBJECT_TYPE_FENCE:							return "VK_OBJECT_TYPE_FENCE";
  		case VK_OBJECT_TYPE_DEVICE_MEMORY:					return "VK_OBJECT_TYPE_DEVICE_MEMORY";
  		case VK_OBJECT_TYPE_BUFFER:							return "VK_OBJECT_TYPE_BUFFER";
  		case VK_OBJECT_TYPE_IMAGE:							return "VK_OBJECT_TYPE_IMAGE";
  		case VK_OBJECT_TYPE_EVENT:							return "VK_OBJECT_TYPE_EVENT";
  		case VK_OBJECT_TYPE_QUERY_POOL:						return "VK_OBJECT_TYPE_QUERY_POOL";
  		case VK_OBJECT_TYPE_BUFFER_VIEW:					return "VK_OBJECT_TYPE_BUFFER_VIEW";
  		case VK_OBJECT_TYPE_IMAGE_VIEW:						return "VK_OBJECT_TYPE_IMAGE_VIEW";
  		case VK_OBJECT_TYPE_SHADER_MODULE:					return "VK_OBJECT_TYPE_SHADER_MODULE";
  		case VK_OBJECT_TYPE_PIPELINE_CACHE:					return "VK_OBJECT_TYPE_PIPELINE_CACHE";
  		case VK_OBJECT_TYPE_PIPELINE_LAYOUT:				return "VK_OBJECT_TYPE_PIPELINE_LAYOUT";
  		case VK_OBJECT_TYPE_RENDER_PASS:					return "VK_OBJECT_TYPE_RENDER_PASS";
  		case VK_OBJECT_TYPE_PIPELINE:						return "VK_OBJECT_TYPE_PIPELINE";
  		case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT:			return "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT";
  		case VK_OBJECT_TYPE_SAMPLER:						return "VK_OBJECT_TYPE_SAMPLER";
  		case VK_OBJECT_TYPE_DESCRIPTOR_POOL:				return "VK_OBJECT_TYPE_DESCRIPTOR_POOL";
  		case VK_OBJECT_TYPE_DESCRIPTOR_SET:					return "VK_OBJECT_TYPE_DESCRIPTOR_SET";
  		case VK_OBJECT_TYPE_FRAMEBUFFER:					return "VK_OBJECT_TYPE_FRAMEBUFFER";
  		case VK_OBJECT_TYPE_COMMAND_POOL:					return "VK_OBJECT_TYPE_COMMAND_POOL";
  		case VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION:		return "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION";
  		case VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE:		return "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE";
  		case VK_OBJECT_TYPE_SURFACE_KHR:					return "VK_OBJECT_TYPE_SURFACE_KHR";
  		case VK_OBJECT_TYPE_SWAPCHAIN_KHR:					return "VK_OBJECT_TYPE_SWAPCHAIN_KHR";
  		case VK_OBJECT_TYPE_DISPLAY_KHR:					return "VK_OBJECT_TYPE_DISPLAY_KHR";
  		case VK_OBJECT_TYPE_DISPLAY_MODE_KHR:				return "VK_OBJECT_TYPE_DISPLAY_MODE_KHR";
  		case VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT:		return "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT";
  		case VK_OBJECT_TYPE_OBJECT_TABLE_NVX:				return "VK_OBJECT_TYPE_OBJECT_TABLE_NVX";
  		case VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX:	return "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX";
  		case VK_OBJECT_TYPE_VALIDATION_CACHE_EXT:			return "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT";
  		default:											return DE_NULL;
  	}
  }
  
  const char* getPointClippingBehaviorName (VkPointClippingBehavior value)
  {
  	switch (value)
  	{
  		case VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES:		return "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES";
  		case VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY:	return "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY";
  		default:												return DE_NULL;
  	}
  }
  
  const char* getTessellationDomainOriginName (VkTessellationDomainOrigin value)
  {
  	switch (value)
  	{
  		case VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT:	return "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT";
  		case VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT:	return "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getSamplerYcbcrModelConversionName (VkSamplerYcbcrModelConversion value)
  {
  	switch (value)
  	{
  		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY:	return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY";
  		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY:	return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY";
  		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709";
  		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601";
  		case VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020:		return "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020";
  		default:												return DE_NULL;
  	}
  }
  
  const char* getSamplerYcbcrRangeName (VkSamplerYcbcrRange value)
  {
  	switch (value)
  	{
  		case VK_SAMPLER_YCBCR_RANGE_ITU_FULL:	return "VK_SAMPLER_YCBCR_RANGE_ITU_FULL";
  		case VK_SAMPLER_YCBCR_RANGE_ITU_NARROW:	return "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getChromaLocationName (VkChromaLocation value)
  {
  	switch (value)
  	{
  		case VK_CHROMA_LOCATION_COSITED_EVEN:	return "VK_CHROMA_LOCATION_COSITED_EVEN";
  		case VK_CHROMA_LOCATION_MIDPOINT:		return "VK_CHROMA_LOCATION_MIDPOINT";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getDescriptorUpdateTemplateTypeName (VkDescriptorUpdateTemplateType value)
  {
  	switch (value)
  	{
  		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET:			return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET";
  		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR:	return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR";
  		default:														return DE_NULL;
  	}
  }
  
  const char* getColorSpaceKHRName (VkColorSpaceKHR value)
  {
  	switch (value)
  	{
  		case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:				return "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR";
  		case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:		return "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT";
  		case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT:		return "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT";
  		case VK_COLOR_SPACE_DCI_P3_LINEAR_EXT:				return "VK_COLOR_SPACE_DCI_P3_LINEAR_EXT";
  		case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT:			return "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT";
  		case VK_COLOR_SPACE_BT709_LINEAR_EXT:				return "VK_COLOR_SPACE_BT709_LINEAR_EXT";
  		case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:			return "VK_COLOR_SPACE_BT709_NONLINEAR_EXT";
  		case VK_COLOR_SPACE_BT2020_LINEAR_EXT:				return "VK_COLOR_SPACE_BT2020_LINEAR_EXT";
  		case VK_COLOR_SPACE_HDR10_ST2084_EXT:				return "VK_COLOR_SPACE_HDR10_ST2084_EXT";
  		case VK_COLOR_SPACE_DOLBYVISION_EXT:				return "VK_COLOR_SPACE_DOLBYVISION_EXT";
  		case VK_COLOR_SPACE_HDR10_HLG_EXT:					return "VK_COLOR_SPACE_HDR10_HLG_EXT";
  		case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT:			return "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT";
  		case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:			return "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT";
  		case VK_COLOR_SPACE_PASS_THROUGH_EXT:				return "VK_COLOR_SPACE_PASS_THROUGH_EXT";
  		case VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT:	return "VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT";
  		default:											return DE_NULL;
  	}
  }
  
  const char* getPresentModeKHRName (VkPresentModeKHR value)
  {
  	switch (value)
  	{
  		case VK_PRESENT_MODE_IMMEDIATE_KHR:					return "VK_PRESENT_MODE_IMMEDIATE_KHR";
  		case VK_PRESENT_MODE_MAILBOX_KHR:					return "VK_PRESENT_MODE_MAILBOX_KHR";
  		case VK_PRESENT_MODE_FIFO_KHR:						return "VK_PRESENT_MODE_FIFO_KHR";
  		case VK_PRESENT_MODE_FIFO_RELAXED_KHR:				return "VK_PRESENT_MODE_FIFO_RELAXED_KHR";
  		case VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR:		return "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR";
  		case VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR:	return "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR";
  		default:											return DE_NULL;
  	}
  }
  
  const char* getDebugReportObjectTypeEXTName (VkDebugReportObjectTypeEXT value)
  {
  	switch (value)
  	{
  		case VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT:							return "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT:						return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT:	return "VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT";
  		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT:	return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT";
  		default:															return DE_NULL;
  	}
  }
  
  const char* getRasterizationOrderAMDName (VkRasterizationOrderAMD value)
  {
  	switch (value)
  	{
  		case VK_RASTERIZATION_ORDER_STRICT_AMD:		return "VK_RASTERIZATION_ORDER_STRICT_AMD";
  		case VK_RASTERIZATION_ORDER_RELAXED_AMD:	return "VK_RASTERIZATION_ORDER_RELAXED_AMD";
  		default:									return DE_NULL;
  	}
  }
  
  const char* getValidationCheckEXTName (VkValidationCheckEXT value)
  {
  	switch (value)
  	{
  		case VK_VALIDATION_CHECK_ALL_EXT:		return "VK_VALIDATION_CHECK_ALL_EXT";
  		case VK_VALIDATION_CHECK_SHADERS_EXT:	return "VK_VALIDATION_CHECK_SHADERS_EXT";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getIndirectCommandsTokenTypeNVXName (VkIndirectCommandsTokenTypeNVX value)
  {
  	switch (value)
  	{
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX:				return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX";
  		case VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX";
  		default:													return DE_NULL;
  	}
  }
  
  const char* getObjectEntryTypeNVXName (VkObjectEntryTypeNVX value)
  {
  	switch (value)
  	{
  		case VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX:	return "VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX";
  		case VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX:			return "VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX";
  		case VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX:		return "VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX";
  		case VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX:	return "VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX";
  		case VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX:	return "VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getDisplayPowerStateEXTName (VkDisplayPowerStateEXT value)
  {
  	switch (value)
  	{
  		case VK_DISPLAY_POWER_STATE_OFF_EXT:		return "VK_DISPLAY_POWER_STATE_OFF_EXT";
  		case VK_DISPLAY_POWER_STATE_SUSPEND_EXT:	return "VK_DISPLAY_POWER_STATE_SUSPEND_EXT";
  		case VK_DISPLAY_POWER_STATE_ON_EXT:			return "VK_DISPLAY_POWER_STATE_ON_EXT";
  		default:									return DE_NULL;
  	}
  }
  
  const char* getDeviceEventTypeEXTName (VkDeviceEventTypeEXT value)
  {
  	switch (value)
  	{
  		case VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT:	return "VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getDisplayEventTypeEXTName (VkDisplayEventTypeEXT value)
  {
  	switch (value)
  	{
  		case VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT:	return "VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getViewportCoordinateSwizzleNVName (VkViewportCoordinateSwizzleNV value)
  {
  	switch (value)
  	{
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV";
  		case VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV:	return "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV";
  		default:											return DE_NULL;
  	}
  }
  
  const char* getDiscardRectangleModeEXTName (VkDiscardRectangleModeEXT value)
  {
  	switch (value)
  	{
  		case VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT:	return "VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT";
  		case VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT:	return "VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT";
  		default:										return DE_NULL;
  	}
  }
  
  const char* getSamplerReductionModeEXTName (VkSamplerReductionModeEXT value)
  {
  	switch (value)
  	{
  		case VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT:	return "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT";
  		case VK_SAMPLER_REDUCTION_MODE_MIN_EXT:					return "VK_SAMPLER_REDUCTION_MODE_MIN_EXT";
  		case VK_SAMPLER_REDUCTION_MODE_MAX_EXT:					return "VK_SAMPLER_REDUCTION_MODE_MAX_EXT";
  		default:												return DE_NULL;
  	}
  }
  
  const char* getBlendOverlapEXTName (VkBlendOverlapEXT value)
  {
  	switch (value)
  	{
  		case VK_BLEND_OVERLAP_UNCORRELATED_EXT:	return "VK_BLEND_OVERLAP_UNCORRELATED_EXT";
  		case VK_BLEND_OVERLAP_DISJOINT_EXT:		return "VK_BLEND_OVERLAP_DISJOINT_EXT";
  		case VK_BLEND_OVERLAP_CONJOINT_EXT:		return "VK_BLEND_OVERLAP_CONJOINT_EXT";
  		default:								return DE_NULL;
  	}
  }
  
  const char* getCoverageModulationModeNVName (VkCoverageModulationModeNV value)
  {
  	switch (value)
  	{
  		case VK_COVERAGE_MODULATION_MODE_NONE_NV:	return "VK_COVERAGE_MODULATION_MODE_NONE_NV";
  		case VK_COVERAGE_MODULATION_MODE_RGB_NV:	return "VK_COVERAGE_MODULATION_MODE_RGB_NV";
  		case VK_COVERAGE_MODULATION_MODE_ALPHA_NV:	return "VK_COVERAGE_MODULATION_MODE_ALPHA_NV";
  		case VK_COVERAGE_MODULATION_MODE_RGBA_NV:	return "VK_COVERAGE_MODULATION_MODE_RGBA_NV";
  		default:									return DE_NULL;
  	}
  }
  
  const char* getValidationCacheHeaderVersionEXTName (VkValidationCacheHeaderVersionEXT value)
  {
  	switch (value)
  	{
  		case VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT:	return "VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT";
  		default:											return DE_NULL;
  	}
  }
  
  tcu::Format::Bitfield<32> getFormatFeatureFlagsStr (VkFormatFeatureFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,															"VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,															"VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,													"VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,													"VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,													"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,												"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,															"VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,														"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,													"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,												"VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_SRC_BIT,																"VK_FORMAT_FEATURE_BLIT_SRC_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_DST_BIT,																"VK_FORMAT_FEATURE_BLIT_DST_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,												"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT,															"VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_DST_BIT,															"VK_FORMAT_FEATURE_TRANSFER_DST_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT,											"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,													"VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,							"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,			"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,			"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,	"VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DISJOINT_BIT,																"VK_FORMAT_FEATURE_DISJOINT_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,													"VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"),
  		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,											"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getImageUsageFlagsStr (VkImageUsageFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_SRC_BIT,				"VK_IMAGE_USAGE_TRANSFER_SRC_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_DST_BIT,				"VK_IMAGE_USAGE_TRANSFER_DST_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_SAMPLED_BIT,					"VK_IMAGE_USAGE_SAMPLED_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_STORAGE_BIT,					"VK_IMAGE_USAGE_STORAGE_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,			"VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,	"VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,		"VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,			"VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getImageCreateFlagsStr (VkImageCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_BINDING_BIT,						"VK_IMAGE_CREATE_SPARSE_BINDING_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,						"VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,						"VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,						"VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,						"VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_ALIAS_BIT,									"VK_IMAGE_CREATE_ALIAS_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_BIND_SFR_BIT,								"VK_IMAGE_CREATE_BIND_SFR_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,					"VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,			"VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_EXTENDED_USAGE_BIT,						"VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_PROTECTED_BIT,								"VK_IMAGE_CREATE_PROTECTED_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_DISJOINT_BIT,								"VK_IMAGE_CREATE_DISJOINT_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT,	"VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSampleCountFlagsStr (VkSampleCountFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_1_BIT,		"VK_SAMPLE_COUNT_1_BIT"),
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_2_BIT,		"VK_SAMPLE_COUNT_2_BIT"),
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_4_BIT,		"VK_SAMPLE_COUNT_4_BIT"),
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_8_BIT,		"VK_SAMPLE_COUNT_8_BIT"),
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_16_BIT,	"VK_SAMPLE_COUNT_16_BIT"),
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_32_BIT,	"VK_SAMPLE_COUNT_32_BIT"),
  		tcu::Format::BitDesc(VK_SAMPLE_COUNT_64_BIT,	"VK_SAMPLE_COUNT_64_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getQueueFlagsStr (VkQueueFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_QUEUE_GRAPHICS_BIT,			"VK_QUEUE_GRAPHICS_BIT"),
  		tcu::Format::BitDesc(VK_QUEUE_COMPUTE_BIT,			"VK_QUEUE_COMPUTE_BIT"),
  		tcu::Format::BitDesc(VK_QUEUE_TRANSFER_BIT,			"VK_QUEUE_TRANSFER_BIT"),
  		tcu::Format::BitDesc(VK_QUEUE_SPARSE_BINDING_BIT,	"VK_QUEUE_SPARSE_BINDING_BIT"),
  		tcu::Format::BitDesc(VK_QUEUE_PROTECTED_BIT,		"VK_QUEUE_PROTECTED_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getMemoryPropertyFlagsStr (VkMemoryPropertyFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,		"VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"),
  		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,		"VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"),
  		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,		"VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"),
  		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_CACHED_BIT,		"VK_MEMORY_PROPERTY_HOST_CACHED_BIT"),
  		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT,	"VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"),
  		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_PROTECTED_BIT,			"VK_MEMORY_PROPERTY_PROTECTED_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getMemoryHeapFlagsStr (VkMemoryHeapFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT,	"VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"),
  		tcu::Format::BitDesc(VK_MEMORY_HEAP_MULTI_INSTANCE_BIT,	"VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getDeviceQueueCreateFlagsStr (VkDeviceQueueCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT,	"VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,						"VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,					"VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,					"VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,					"VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,		"VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,	"VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,					"VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,					"VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,			"VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,				"VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			"VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,					"VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,						"VK_PIPELINE_STAGE_TRANSFER_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,					"VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,							"VK_PIPELINE_STAGE_HOST_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,					"VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,					"VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX,				"VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getImageAspectFlagsStr (VkImageAspectFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_COLOR_BIT,		"VK_IMAGE_ASPECT_COLOR_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_DEPTH_BIT,		"VK_IMAGE_ASPECT_DEPTH_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_STENCIL_BIT,	"VK_IMAGE_ASPECT_STENCIL_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_METADATA_BIT,	"VK_IMAGE_ASPECT_METADATA_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_0_BIT,	"VK_IMAGE_ASPECT_PLANE_0_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_1_BIT,	"VK_IMAGE_ASPECT_PLANE_1_BIT"),
  		tcu::Format::BitDesc(VK_IMAGE_ASPECT_PLANE_2_BIT,	"VK_IMAGE_ASPECT_PLANE_2_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSparseImageFormatFlagsStr (VkSparseImageFormatFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,			"VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"),
  		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,		"VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"),
  		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT,	"VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSparseMemoryBindFlagsStr (VkSparseMemoryBindFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SPARSE_MEMORY_BIND_METADATA_BIT,	"VK_SPARSE_MEMORY_BIND_METADATA_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getFenceCreateFlagsStr (VkFenceCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_FENCE_CREATE_SIGNALED_BIT,	"VK_FENCE_CREATE_SIGNALED_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getQueryPipelineStatisticFlagsStr (VkQueryPipelineStatisticFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,						"VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,						"VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,						"VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,					"VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,							"VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,							"VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,			"VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,	"VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getQueryResultFlagsStr (VkQueryResultFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_QUERY_RESULT_64_BIT,				"VK_QUERY_RESULT_64_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_RESULT_WAIT_BIT,				"VK_QUERY_RESULT_WAIT_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,	"VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"),
  		tcu::Format::BitDesc(VK_QUERY_RESULT_PARTIAL_BIT,			"VK_QUERY_RESULT_PARTIAL_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getBufferCreateFlagsStr (VkBufferCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_BINDING_BIT,	"VK_BUFFER_CREATE_SPARSE_BINDING_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,	"VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,	"VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_CREATE_PROTECTED_BIT,		"VK_BUFFER_CREATE_PROTECTED_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getBufferUsageFlagsStr (VkBufferUsageFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,			"VK_BUFFER_USAGE_TRANSFER_SRC_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_DST_BIT,			"VK_BUFFER_USAGE_TRANSFER_DST_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,	"VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,	"VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,		"VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,		"VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDEX_BUFFER_BIT,			"VK_BUFFER_USAGE_INDEX_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,			"VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT,		"VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getPipelineCreateFlagsStr (VkPipelineCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,			"VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,				"VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DERIVATIVE_BIT,						"VK_PIPELINE_CREATE_DERIVATIVE_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,	"VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"),
  		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISPATCH_BASE,						"VK_PIPELINE_CREATE_DISPATCH_BASE"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getShaderStageFlagsStr (VkShaderStageFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SHADER_STAGE_VERTEX_BIT,					"VK_SHADER_STAGE_VERTEX_BIT"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,		"VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,	"VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_GEOMETRY_BIT,					"VK_SHADER_STAGE_GEOMETRY_BIT"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_FRAGMENT_BIT,					"VK_SHADER_STAGE_FRAGMENT_BIT"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_COMPUTE_BIT,					"VK_SHADER_STAGE_COMPUTE_BIT"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_ALL_GRAPHICS,					"VK_SHADER_STAGE_ALL_GRAPHICS"),
  		tcu::Format::BitDesc(VK_SHADER_STAGE_ALL,							"VK_SHADER_STAGE_ALL"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getCullModeFlagsStr (VkCullModeFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_CULL_MODE_NONE,				"VK_CULL_MODE_NONE"),
  		tcu::Format::BitDesc(VK_CULL_MODE_FRONT_BIT,		"VK_CULL_MODE_FRONT_BIT"),
  		tcu::Format::BitDesc(VK_CULL_MODE_BACK_BIT,			"VK_CULL_MODE_BACK_BIT"),
  		tcu::Format::BitDesc(VK_CULL_MODE_FRONT_AND_BACK,	"VK_CULL_MODE_FRONT_AND_BACK"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getColorComponentFlagsStr (VkColorComponentFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_COLOR_COMPONENT_R_BIT,	"VK_COLOR_COMPONENT_R_BIT"),
  		tcu::Format::BitDesc(VK_COLOR_COMPONENT_G_BIT,	"VK_COLOR_COMPONENT_G_BIT"),
  		tcu::Format::BitDesc(VK_COLOR_COMPONENT_B_BIT,	"VK_COLOR_COMPONENT_B_BIT"),
  		tcu::Format::BitDesc(VK_COLOR_COMPONENT_A_BIT,	"VK_COLOR_COMPONENT_A_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getDescriptorSetLayoutCreateFlagsStr (VkDescriptorSetLayoutCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,	"VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getDescriptorPoolCreateFlagsStr (VkDescriptorPoolCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,	"VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getAttachmentDescriptionFlagsStr (VkAttachmentDescriptionFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,	"VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSubpassDescriptionFlagsStr (VkSubpassDescriptionFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX,		"VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"),
  		tcu::Format::BitDesc(VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX,	"VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getAccessFlagsStr (VkAccessFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_ACCESS_INDIRECT_COMMAND_READ_BIT,					"VK_ACCESS_INDIRECT_COMMAND_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_INDEX_READ_BIT,								"VK_ACCESS_INDEX_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,					"VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_UNIFORM_READ_BIT,							"VK_ACCESS_UNIFORM_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,					"VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_SHADER_READ_BIT,								"VK_ACCESS_SHADER_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_SHADER_WRITE_BIT,							"VK_ACCESS_SHADER_WRITE_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,					"VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,					"VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,			"VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,			"VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_TRANSFER_READ_BIT,							"VK_ACCESS_TRANSFER_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_TRANSFER_WRITE_BIT,							"VK_ACCESS_TRANSFER_WRITE_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_HOST_READ_BIT,								"VK_ACCESS_HOST_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_HOST_WRITE_BIT,								"VK_ACCESS_HOST_WRITE_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_MEMORY_READ_BIT,								"VK_ACCESS_MEMORY_READ_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_MEMORY_WRITE_BIT,							"VK_ACCESS_MEMORY_WRITE_BIT"),
  		tcu::Format::BitDesc(VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX,				"VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX"),
  		tcu::Format::BitDesc(VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX,				"VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX"),
  		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,	"VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getDependencyFlagsStr (VkDependencyFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_DEPENDENCY_BY_REGION_BIT,		"VK_DEPENDENCY_BY_REGION_BIT"),
  		tcu::Format::BitDesc(VK_DEPENDENCY_DEVICE_GROUP_BIT,	"VK_DEPENDENCY_DEVICE_GROUP_BIT"),
  		tcu::Format::BitDesc(VK_DEPENDENCY_VIEW_LOCAL_BIT,		"VK_DEPENDENCY_VIEW_LOCAL_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getCommandPoolCreateFlagsStr (VkCommandPoolCreateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,				"VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"),
  		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,	"VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"),
  		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_PROTECTED_BIT,				"VK_COMMAND_POOL_CREATE_PROTECTED_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getCommandPoolResetFlagsStr (VkCommandPoolResetFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT,	"VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getCommandBufferUsageFlagsStr (VkCommandBufferUsageFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,		"VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"),
  		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,	"VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"),
  		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,		"VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getQueryControlFlagsStr (VkQueryControlFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_QUERY_CONTROL_PRECISE_BIT,	"VK_QUERY_CONTROL_PRECISE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getCommandBufferResetFlagsStr (VkCommandBufferResetFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT,	"VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getStencilFaceFlagsStr (VkStencilFaceFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_BIT,	"VK_STENCIL_FACE_FRONT_BIT"),
  		tcu::Format::BitDesc(VK_STENCIL_FACE_BACK_BIT,	"VK_STENCIL_FACE_BACK_BIT"),
  		tcu::Format::BitDesc(VK_STENCIL_FRONT_AND_BACK,	"VK_STENCIL_FRONT_AND_BACK"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSubgroupFeatureFlagsStr (VkSubgroupFeatureFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_BASIC_BIT,				"VK_SUBGROUP_FEATURE_BASIC_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_VOTE_BIT,				"VK_SUBGROUP_FEATURE_VOTE_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_ARITHMETIC_BIT,		"VK_SUBGROUP_FEATURE_ARITHMETIC_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_BALLOT_BIT,			"VK_SUBGROUP_FEATURE_BALLOT_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_SHUFFLE_BIT,			"VK_SUBGROUP_FEATURE_SHUFFLE_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT,	"VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_CLUSTERED_BIT,			"VK_SUBGROUP_FEATURE_CLUSTERED_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_QUAD_BIT,				"VK_SUBGROUP_FEATURE_QUAD_BIT"),
  		tcu::Format::BitDesc(VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV,	"VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getPeerMemoryFeatureFlagsStr (VkPeerMemoryFeatureFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT,		"VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"),
  		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_COPY_DST_BIT,		"VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"),
  		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT,	"VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"),
  		tcu::Format::BitDesc(VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT,	"VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getMemoryAllocateFlagsStr (VkMemoryAllocateFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT,	"VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getExternalMemoryHandleTypeFlagsStr (VkExternalMemoryHandleTypeFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,							"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,					"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,							"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,						"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getExternalMemoryFeatureFlagsStr (VkExternalMemoryFeatureFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,	"VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,		"VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,		"VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getExternalFenceHandleTypeFlagsStr (VkExternalFenceHandleTypeFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,			"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,		"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,	"VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,				"VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getExternalFenceFeatureFlagsStr (VkExternalFenceFeatureFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,	"VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,	"VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getFenceImportFlagsStr (VkFenceImportFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_FENCE_IMPORT_TEMPORARY_BIT,	"VK_FENCE_IMPORT_TEMPORARY_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSemaphoreImportFlagsStr (VkSemaphoreImportFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SEMAPHORE_IMPORT_TEMPORARY_BIT,	"VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getExternalSemaphoreHandleTypeFlagsStr (VkExternalSemaphoreHandleTypeFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,		"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,	"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,			"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,				"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getExternalSemaphoreFeatureFlagsStr (VkExternalSemaphoreFeatureFlags value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,	"VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"),
  		tcu::Format::BitDesc(VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,	"VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSurfaceTransformFlagsKHRStr (VkSurfaceTransformFlagsKHR value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,						"VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,			"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR,						"VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getCompositeAlphaFlagsKHRStr (VkCompositeAlphaFlagsKHR value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,				"VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"),
  		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,		"VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"),
  		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,	"VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"),
  		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,			"VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getSwapchainCreateFlagsKHRStr (VkSwapchainCreateFlagsKHR value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHR,	"VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHR"),
  		tcu::Format::BitDesc(VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR,	"VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getDeviceGroupPresentModeFlagsKHRStr (VkDeviceGroupPresentModeFlagsKHR value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR,				"VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"),
  		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR,				"VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"),
  		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR,					"VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"),
  		tcu::Format::BitDesc(VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR,	"VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getDisplayPlaneAlphaFlagsKHRStr (VkDisplayPlaneAlphaFlagsKHR value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,						"VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"),
  		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,						"VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"),
  		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,					"VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"),
  		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR,	"VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> 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> getSurfaceCounterFlagsEXTStr (VkSurfaceCounterFlagsEXT value)
  {
  	static const tcu::Format::BitDesc s_desc[] =
  	{
  		tcu::Format::BitDesc(VK_SURFACE_COUNTER_VBLANK_EXT,	"VK_SURFACE_COUNTER_VBLANK_EXT"),
  	};
  	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
  }
  
  tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getDeviceCreateFlagsStr (VkDeviceCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getMemoryMapFlagsStr (VkMemoryMapFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getSemaphoreCreateFlagsStr (VkSemaphoreCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getEventCreateFlagsStr (VkEventCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getQueryPoolCreateFlagsStr (VkQueryPoolCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getBufferViewCreateFlagsStr (VkBufferViewCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getImageViewCreateFlagsStr (VkImageViewCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getShaderModuleCreateFlagsStr (VkShaderModuleCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineCacheCreateFlagsStr (VkPipelineCacheCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineShaderStageCreateFlagsStr (VkPipelineShaderStageCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineVertexInputStateCreateFlagsStr (VkPipelineVertexInputStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineInputAssemblyStateCreateFlagsStr (VkPipelineInputAssemblyStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineTessellationStateCreateFlagsStr (VkPipelineTessellationStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineViewportStateCreateFlagsStr (VkPipelineViewportStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineRasterizationStateCreateFlagsStr (VkPipelineRasterizationStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineMultisampleStateCreateFlagsStr (VkPipelineMultisampleStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineDepthStencilStateCreateFlagsStr (VkPipelineDepthStencilStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineColorBlendStateCreateFlagsStr (VkPipelineColorBlendStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineDynamicStateCreateFlagsStr (VkPipelineDynamicStateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineLayoutCreateFlagsStr (VkPipelineLayoutCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getSamplerCreateFlagsStr (VkSamplerCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getDescriptorPoolResetFlagsStr (VkDescriptorPoolResetFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getFramebufferCreateFlagsStr (VkFramebufferCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getRenderPassCreateFlagsStr (VkRenderPassCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getCommandPoolTrimFlagsStr (VkCommandPoolTrimFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getDescriptorUpdateTemplateCreateFlagsStr (VkDescriptorUpdateTemplateCreateFlags value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getDisplayModeCreateFlagsKHRStr (VkDisplayModeCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getDisplaySurfaceCreateFlagsKHRStr (VkDisplaySurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getXlibSurfaceCreateFlagsKHRStr (VkXlibSurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getXcbSurfaceCreateFlagsKHRStr (VkXcbSurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getWaylandSurfaceCreateFlagsKHRStr (VkWaylandSurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getMirSurfaceCreateFlagsKHRStr (VkMirSurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getAndroidSurfaceCreateFlagsKHRStr (VkAndroidSurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getWin32SurfaceCreateFlagsKHRStr (VkWin32SurfaceCreateFlagsKHR value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getViSurfaceCreateFlagsNNStr (VkViSurfaceCreateFlagsNN value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineViewportSwizzleStateCreateFlagsNVStr (VkPipelineViewportSwizzleStateCreateFlagsNV value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineDiscardRectangleStateCreateFlagsEXTStr (VkPipelineDiscardRectangleStateCreateFlagsEXT value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getIOSSurfaceCreateFlagsMVKStr (VkIOSSurfaceCreateFlagsMVK value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getMacOSSurfaceCreateFlagsMVKStr (VkMacOSSurfaceCreateFlagsMVK value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineCoverageToColorStateCreateFlagsNVStr (VkPipelineCoverageToColorStateCreateFlagsNV value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getPipelineCoverageModulationStateCreateFlagsNVStr (VkPipelineCoverageModulationStateCreateFlagsNV value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  tcu::Format::Bitfield<32> getValidationCacheCreateFlagsEXTStr (VkValidationCacheCreateFlagsEXT value)
  {
  	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
  }
  
  std::ostream& operator<< (std::ostream& s, const VkApplicationInfo& value)
  {
  	s << "VkApplicationInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpApplicationName = " << getCharPtrStr(value.pApplicationName) << '\n';
  	s << "\tapplicationVersion = " << value.applicationVersion << '\n';
  	s << "\tpEngineName = " << getCharPtrStr(value.pEngineName) << '\n';
  	s << "\tengineVersion = " << value.engineVersion << '\n';
  	s << "\tapiVersion = " << value.apiVersion << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkInstanceCreateInfo& value)
  {
  	s << "VkInstanceCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getInstanceCreateFlagsStr(value.flags) << '\n';
  	s << "\tpApplicationInfo = " << value.pApplicationInfo << '\n';
  	s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
  	s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
  	s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
  	s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAllocationCallbacks& value)
  {
  	s << "VkAllocationCallbacks = {\n";
  	s << "\tpUserData = " << value.pUserData << '\n';
  	s << "\tpfnAllocation = " << value.pfnAllocation << '\n';
  	s << "\tpfnReallocation = " << value.pfnReallocation << '\n';
  	s << "\tpfnFree = " << value.pfnFree << '\n';
  	s << "\tpfnInternalAllocation = " << value.pfnInternalAllocation << '\n';
  	s << "\tpfnInternalFree = " << value.pfnInternalFree << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures& value)
  {
  	s << "VkPhysicalDeviceFeatures = {\n";
  	s << "\trobustBufferAccess = " << value.robustBufferAccess << '\n';
  	s << "\tfullDrawIndexUint32 = " << value.fullDrawIndexUint32 << '\n';
  	s << "\timageCubeArray = " << value.imageCubeArray << '\n';
  	s << "\tindependentBlend = " << value.independentBlend << '\n';
  	s << "\tgeometryShader = " << value.geometryShader << '\n';
  	s << "\ttessellationShader = " << value.tessellationShader << '\n';
  	s << "\tsampleRateShading = " << value.sampleRateShading << '\n';
  	s << "\tdualSrcBlend = " << value.dualSrcBlend << '\n';
  	s << "\tlogicOp = " << value.logicOp << '\n';
  	s << "\tmultiDrawIndirect = " << value.multiDrawIndirect << '\n';
  	s << "\tdrawIndirectFirstInstance = " << value.drawIndirectFirstInstance << '\n';
  	s << "\tdepthClamp = " << value.depthClamp << '\n';
  	s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
  	s << "\tfillModeNonSolid = " << value.fillModeNonSolid << '\n';
  	s << "\tdepthBounds = " << value.depthBounds << '\n';
  	s << "\twideLines = " << value.wideLines << '\n';
  	s << "\tlargePoints = " << value.largePoints << '\n';
  	s << "\talphaToOne = " << value.alphaToOne << '\n';
  	s << "\tmultiViewport = " << value.multiViewport << '\n';
  	s << "\tsamplerAnisotropy = " << value.samplerAnisotropy << '\n';
  	s << "\ttextureCompressionETC2 = " << value.textureCompressionETC2 << '\n';
  	s << "\ttextureCompressionASTC_LDR = " << value.textureCompressionASTC_LDR << '\n';
  	s << "\ttextureCompressionBC = " << value.textureCompressionBC << '\n';
  	s << "\tocclusionQueryPrecise = " << value.occlusionQueryPrecise << '\n';
  	s << "\tpipelineStatisticsQuery = " << value.pipelineStatisticsQuery << '\n';
  	s << "\tvertexPipelineStoresAndAtomics = " << value.vertexPipelineStoresAndAtomics << '\n';
  	s << "\tfragmentStoresAndAtomics = " << value.fragmentStoresAndAtomics << '\n';
  	s << "\tshaderTessellationAndGeometryPointSize = " << value.shaderTessellationAndGeometryPointSize << '\n';
  	s << "\tshaderImageGatherExtended = " << value.shaderImageGatherExtended << '\n';
  	s << "\tshaderStorageImageExtendedFormats = " << value.shaderStorageImageExtendedFormats << '\n';
  	s << "\tshaderStorageImageMultisample = " << value.shaderStorageImageMultisample << '\n';
  	s << "\tshaderStorageImageReadWithoutFormat = " << value.shaderStorageImageReadWithoutFormat << '\n';
  	s << "\tshaderStorageImageWriteWithoutFormat = " << value.shaderStorageImageWriteWithoutFormat << '\n';
  	s << "\tshaderUniformBufferArrayDynamicIndexing = " << value.shaderUniformBufferArrayDynamicIndexing << '\n';
  	s << "\tshaderSampledImageArrayDynamicIndexing = " << value.shaderSampledImageArrayDynamicIndexing << '\n';
  	s << "\tshaderStorageBufferArrayDynamicIndexing = " << value.shaderStorageBufferArrayDynamicIndexing << '\n';
  	s << "\tshaderStorageImageArrayDynamicIndexing = " << value.shaderStorageImageArrayDynamicIndexing << '\n';
  	s << "\tshaderClipDistance = " << value.shaderClipDistance << '\n';
  	s << "\tshaderCullDistance = " << value.shaderCullDistance << '\n';
  	s << "\tshaderFloat64 = " << value.shaderFloat64 << '\n';
  	s << "\tshaderInt64 = " << value.shaderInt64 << '\n';
  	s << "\tshaderInt16 = " << value.shaderInt16 << '\n';
  	s << "\tshaderResourceResidency = " << value.shaderResourceResidency << '\n';
  	s << "\tshaderResourceMinLod = " << value.shaderResourceMinLod << '\n';
  	s << "\tsparseBinding = " << value.sparseBinding << '\n';
  	s << "\tsparseResidencyBuffer = " << value.sparseResidencyBuffer << '\n';
  	s << "\tsparseResidencyImage2D = " << value.sparseResidencyImage2D << '\n';
  	s << "\tsparseResidencyImage3D = " << value.sparseResidencyImage3D << '\n';
  	s << "\tsparseResidency2Samples = " << value.sparseResidency2Samples << '\n';
  	s << "\tsparseResidency4Samples = " << value.sparseResidency4Samples << '\n';
  	s << "\tsparseResidency8Samples = " << value.sparseResidency8Samples << '\n';
  	s << "\tsparseResidency16Samples = " << value.sparseResidency16Samples << '\n';
  	s << "\tsparseResidencyAliased = " << value.sparseResidencyAliased << '\n';
  	s << "\tvariableMultisampleRate = " << value.variableMultisampleRate << '\n';
  	s << "\tinheritedQueries = " << value.inheritedQueries << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkFormatProperties& value)
  {
  	s << "VkFormatProperties = {\n";
  	s << "\tlinearTilingFeatures = " << getFormatFeatureFlagsStr(value.linearTilingFeatures) << '\n';
  	s << "\toptimalTilingFeatures = " << getFormatFeatureFlagsStr(value.optimalTilingFeatures) << '\n';
  	s << "\tbufferFeatures = " << getFormatFeatureFlagsStr(value.bufferFeatures) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExtent3D& value)
  {
  	s << "VkExtent3D = {\n";
  	s << "\twidth = " << value.width << '\n';
  	s << "\theight = " << value.height << '\n';
  	s << "\tdepth = " << value.depth << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties& value)
  {
  	s << "VkImageFormatProperties = {\n";
  	s << "\tmaxExtent = " << value.maxExtent << '\n';
  	s << "\tmaxMipLevels = " << value.maxMipLevels << '\n';
  	s << "\tmaxArrayLayers = " << value.maxArrayLayers << '\n';
  	s << "\tsampleCounts = " << getSampleCountFlagsStr(value.sampleCounts) << '\n';
  	s << "\tmaxResourceSize = " << value.maxResourceSize << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLimits& value)
  {
  	s << "VkPhysicalDeviceLimits = {\n";
  	s << "\tmaxImageDimension1D = " << value.maxImageDimension1D << '\n';
  	s << "\tmaxImageDimension2D = " << value.maxImageDimension2D << '\n';
  	s << "\tmaxImageDimension3D = " << value.maxImageDimension3D << '\n';
  	s << "\tmaxImageDimensionCube = " << value.maxImageDimensionCube << '\n';
  	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
  	s << "\tmaxTexelBufferElements = " << value.maxTexelBufferElements << '\n';
  	s << "\tmaxUniformBufferRange = " << value.maxUniformBufferRange << '\n';
  	s << "\tmaxStorageBufferRange = " << value.maxStorageBufferRange << '\n';
  	s << "\tmaxPushConstantsSize = " << value.maxPushConstantsSize << '\n';
  	s << "\tmaxMemoryAllocationCount = " << value.maxMemoryAllocationCount << '\n';
  	s << "\tmaxSamplerAllocationCount = " << value.maxSamplerAllocationCount << '\n';
  	s << "\tbufferImageGranularity = " << value.bufferImageGranularity << '\n';
  	s << "\tsparseAddressSpaceSize = " << value.sparseAddressSpaceSize << '\n';
  	s << "\tmaxBoundDescriptorSets = " << value.maxBoundDescriptorSets << '\n';
  	s << "\tmaxPerStageDescriptorSamplers = " << value.maxPerStageDescriptorSamplers << '\n';
  	s << "\tmaxPerStageDescriptorUniformBuffers = " << value.maxPerStageDescriptorUniformBuffers << '\n';
  	s << "\tmaxPerStageDescriptorStorageBuffers = " << value.maxPerStageDescriptorStorageBuffers << '\n';
  	s << "\tmaxPerStageDescriptorSampledImages = " << value.maxPerStageDescriptorSampledImages << '\n';
  	s << "\tmaxPerStageDescriptorStorageImages = " << value.maxPerStageDescriptorStorageImages << '\n';
  	s << "\tmaxPerStageDescriptorInputAttachments = " << value.maxPerStageDescriptorInputAttachments << '\n';
  	s << "\tmaxPerStageResources = " << value.maxPerStageResources << '\n';
  	s << "\tmaxDescriptorSetSamplers = " << value.maxDescriptorSetSamplers << '\n';
  	s << "\tmaxDescriptorSetUniformBuffers = " << value.maxDescriptorSetUniformBuffers << '\n';
  	s << "\tmaxDescriptorSetUniformBuffersDynamic = " << value.maxDescriptorSetUniformBuffersDynamic << '\n';
  	s << "\tmaxDescriptorSetStorageBuffers = " << value.maxDescriptorSetStorageBuffers << '\n';
  	s << "\tmaxDescriptorSetStorageBuffersDynamic = " << value.maxDescriptorSetStorageBuffersDynamic << '\n';
  	s << "\tmaxDescriptorSetSampledImages = " << value.maxDescriptorSetSampledImages << '\n';
  	s << "\tmaxDescriptorSetStorageImages = " << value.maxDescriptorSetStorageImages << '\n';
  	s << "\tmaxDescriptorSetInputAttachments = " << value.maxDescriptorSetInputAttachments << '\n';
  	s << "\tmaxVertexInputAttributes = " << value.maxVertexInputAttributes << '\n';
  	s << "\tmaxVertexInputBindings = " << value.maxVertexInputBindings << '\n';
  	s << "\tmaxVertexInputAttributeOffset = " << value.maxVertexInputAttributeOffset << '\n';
  	s << "\tmaxVertexInputBindingStride = " << value.maxVertexInputBindingStride << '\n';
  	s << "\tmaxVertexOutputComponents = " << value.maxVertexOutputComponents << '\n';
  	s << "\tmaxTessellationGenerationLevel = " << value.maxTessellationGenerationLevel << '\n';
  	s << "\tmaxTessellationPatchSize = " << value.maxTessellationPatchSize << '\n';
  	s << "\tmaxTessellationControlPerVertexInputComponents = " << value.maxTessellationControlPerVertexInputComponents << '\n';
  	s << "\tmaxTessellationControlPerVertexOutputComponents = " << value.maxTessellationControlPerVertexOutputComponents << '\n';
  	s << "\tmaxTessellationControlPerPatchOutputComponents = " << value.maxTessellationControlPerPatchOutputComponents << '\n';
  	s << "\tmaxTessellationControlTotalOutputComponents = " << value.maxTessellationControlTotalOutputComponents << '\n';
  	s << "\tmaxTessellationEvaluationInputComponents = " << value.maxTessellationEvaluationInputComponents << '\n';
  	s << "\tmaxTessellationEvaluationOutputComponents = " << value.maxTessellationEvaluationOutputComponents << '\n';
  	s << "\tmaxGeometryShaderInvocations = " << value.maxGeometryShaderInvocations << '\n';
  	s << "\tmaxGeometryInputComponents = " << value.maxGeometryInputComponents << '\n';
  	s << "\tmaxGeometryOutputComponents = " << value.maxGeometryOutputComponents << '\n';
  	s << "\tmaxGeometryOutputVertices = " << value.maxGeometryOutputVertices << '\n';
  	s << "\tmaxGeometryTotalOutputComponents = " << value.maxGeometryTotalOutputComponents << '\n';
  	s << "\tmaxFragmentInputComponents = " << value.maxFragmentInputComponents << '\n';
  	s << "\tmaxFragmentOutputAttachments = " << value.maxFragmentOutputAttachments << '\n';
  	s << "\tmaxFragmentDualSrcAttachments = " << value.maxFragmentDualSrcAttachments << '\n';
  	s << "\tmaxFragmentCombinedOutputResources = " << value.maxFragmentCombinedOutputResources << '\n';
  	s << "\tmaxComputeSharedMemorySize = " << value.maxComputeSharedMemorySize << '\n';
  	s << "\tmaxComputeWorkGroupCount = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupCount), DE_ARRAY_END(value.maxComputeWorkGroupCount)) << '\n';
  	s << "\tmaxComputeWorkGroupInvocations = " << value.maxComputeWorkGroupInvocations << '\n';
  	s << "\tmaxComputeWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupSize), DE_ARRAY_END(value.maxComputeWorkGroupSize)) << '\n';
  	s << "\tsubPixelPrecisionBits = " << value.subPixelPrecisionBits << '\n';
  	s << "\tsubTexelPrecisionBits = " << value.subTexelPrecisionBits << '\n';
  	s << "\tmipmapPrecisionBits = " << value.mipmapPrecisionBits << '\n';
  	s << "\tmaxDrawIndexedIndexValue = " << value.maxDrawIndexedIndexValue << '\n';
  	s << "\tmaxDrawIndirectCount = " << value.maxDrawIndirectCount << '\n';
  	s << "\tmaxSamplerLodBias = " << value.maxSamplerLodBias << '\n';
  	s << "\tmaxSamplerAnisotropy = " << value.maxSamplerAnisotropy << '\n';
  	s << "\tmaxViewports = " << value.maxViewports << '\n';
  	s << "\tmaxViewportDimensions = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxViewportDimensions), DE_ARRAY_END(value.maxViewportDimensions)) << '\n';
  	s << "\tviewportBoundsRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewportBoundsRange), DE_ARRAY_END(value.viewportBoundsRange)) << '\n';
  	s << "\tviewportSubPixelBits = " << value.viewportSubPixelBits << '\n';
  	s << "\tminMemoryMapAlignment = " << value.minMemoryMapAlignment << '\n';
  	s << "\tminTexelBufferOffsetAlignment = " << value.minTexelBufferOffsetAlignment << '\n';
  	s << "\tminUniformBufferOffsetAlignment = " << value.minUniformBufferOffsetAlignment << '\n';
  	s << "\tminStorageBufferOffsetAlignment = " << value.minStorageBufferOffsetAlignment << '\n';
  	s << "\tminTexelOffset = " << value.minTexelOffset << '\n';
  	s << "\tmaxTexelOffset = " << value.maxTexelOffset << '\n';
  	s << "\tminTexelGatherOffset = " << value.minTexelGatherOffset << '\n';
  	s << "\tmaxTexelGatherOffset = " << value.maxTexelGatherOffset << '\n';
  	s << "\tminInterpolationOffset = " << value.minInterpolationOffset << '\n';
  	s << "\tmaxInterpolationOffset = " << value.maxInterpolationOffset << '\n';
  	s << "\tsubPixelInterpolationOffsetBits = " << value.subPixelInterpolationOffsetBits << '\n';
  	s << "\tmaxFramebufferWidth = " << value.maxFramebufferWidth << '\n';
  	s << "\tmaxFramebufferHeight = " << value.maxFramebufferHeight << '\n';
  	s << "\tmaxFramebufferLayers = " << value.maxFramebufferLayers << '\n';
  	s << "\tframebufferColorSampleCounts = " << getSampleCountFlagsStr(value.framebufferColorSampleCounts) << '\n';
  	s << "\tframebufferDepthSampleCounts = " << getSampleCountFlagsStr(value.framebufferDepthSampleCounts) << '\n';
  	s << "\tframebufferStencilSampleCounts = " << getSampleCountFlagsStr(value.framebufferStencilSampleCounts) << '\n';
  	s << "\tframebufferNoAttachmentsSampleCounts = " << getSampleCountFlagsStr(value.framebufferNoAttachmentsSampleCounts) << '\n';
  	s << "\tmaxColorAttachments = " << value.maxColorAttachments << '\n';
  	s << "\tsampledImageColorSampleCounts = " << getSampleCountFlagsStr(value.sampledImageColorSampleCounts) << '\n';
  	s << "\tsampledImageIntegerSampleCounts = " << getSampleCountFlagsStr(value.sampledImageIntegerSampleCounts) << '\n';
  	s << "\tsampledImageDepthSampleCounts = " << getSampleCountFlagsStr(value.sampledImageDepthSampleCounts) << '\n';
  	s << "\tsampledImageStencilSampleCounts = " << getSampleCountFlagsStr(value.sampledImageStencilSampleCounts) << '\n';
  	s << "\tstorageImageSampleCounts = " << getSampleCountFlagsStr(value.storageImageSampleCounts) << '\n';
  	s << "\tmaxSampleMaskWords = " << value.maxSampleMaskWords << '\n';
  	s << "\ttimestampComputeAndGraphics = " << value.timestampComputeAndGraphics << '\n';
  	s << "\ttimestampPeriod = " << value.timestampPeriod << '\n';
  	s << "\tmaxClipDistances = " << value.maxClipDistances << '\n';
  	s << "\tmaxCullDistances = " << value.maxCullDistances << '\n';
  	s << "\tmaxCombinedClipAndCullDistances = " << value.maxCombinedClipAndCullDistances << '\n';
  	s << "\tdiscreteQueuePriorities = " << value.discreteQueuePriorities << '\n';
  	s << "\tpointSizeRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.pointSizeRange), DE_ARRAY_END(value.pointSizeRange)) << '\n';
  	s << "\tlineWidthRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.lineWidthRange), DE_ARRAY_END(value.lineWidthRange)) << '\n';
  	s << "\tpointSizeGranularity = " << value.pointSizeGranularity << '\n';
  	s << "\tlineWidthGranularity = " << value.lineWidthGranularity << '\n';
  	s << "\tstrictLines = " << value.strictLines << '\n';
  	s << "\tstandardSampleLocations = " << value.standardSampleLocations << '\n';
  	s << "\toptimalBufferCopyOffsetAlignment = " << value.optimalBufferCopyOffsetAlignment << '\n';
  	s << "\toptimalBufferCopyRowPitchAlignment = " << value.optimalBufferCopyRowPitchAlignment << '\n';
  	s << "\tnonCoherentAtomSize = " << value.nonCoherentAtomSize << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseProperties& value)
  {
  	s << "VkPhysicalDeviceSparseProperties = {\n";
  	s << "\tresidencyStandard2DBlockShape = " << value.residencyStandard2DBlockShape << '\n';
  	s << "\tresidencyStandard2DMultisampleBlockShape = " << value.residencyStandard2DMultisampleBlockShape << '\n';
  	s << "\tresidencyStandard3DBlockShape = " << value.residencyStandard3DBlockShape << '\n';
  	s << "\tresidencyAlignedMipSize = " << value.residencyAlignedMipSize << '\n';
  	s << "\tresidencyNonResidentStrict = " << value.residencyNonResidentStrict << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties& value)
  {
  	s << "VkPhysicalDeviceProperties = {\n";
  	s << "\tapiVersion = " << value.apiVersion << '\n';
  	s << "\tdriverVersion = " << value.driverVersion << '\n';
  	s << "\tvendorID = " << value.vendorID << '\n';
  	s << "\tdeviceID = " << value.deviceID << '\n';
  	s << "\tdeviceType = " << value.deviceType << '\n';
  	s << "\tdeviceName = " << (const char*)value.deviceName << '\n';
  	s << "\tpipelineCacheUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.pipelineCacheUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.pipelineCacheUUID))) << '\n';
  	s << "\tlimits = " << value.limits << '\n';
  	s << "\tsparseProperties = " << value.sparseProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties& value)
  {
  	s << "VkQueueFamilyProperties = {\n";
  	s << "\tqueueFlags = " << getQueueFlagsStr(value.queueFlags) << '\n';
  	s << "\tqueueCount = " << value.queueCount << '\n';
  	s << "\ttimestampValidBits = " << value.timestampValidBits << '\n';
  	s << "\tminImageTransferGranularity = " << value.minImageTransferGranularity << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryType& value)
  {
  	s << "VkMemoryType = {\n";
  	s << "\tpropertyFlags = " << getMemoryPropertyFlagsStr(value.propertyFlags) << '\n';
  	s << "\theapIndex = " << value.heapIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryHeap& value)
  {
  	s << "VkMemoryHeap = {\n";
  	s << "\tsize = " << value.size << '\n';
  	s << "\tflags = " << getMemoryHeapFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties& value)
  {
  	s << "VkPhysicalDeviceMemoryProperties = {\n";
  	s << "\tmemoryTypeCount = " << value.memoryTypeCount << '\n';
  	s << "\tmemoryTypes = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryTypes), DE_ARRAY_BEGIN(value.memoryTypes) + value.memoryTypeCount) << '\n';
  	s << "\tmemoryHeapCount = " << value.memoryHeapCount << '\n';
  	s << "\tmemoryHeaps = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryHeaps), DE_ARRAY_BEGIN(value.memoryHeaps) + value.memoryHeapCount) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceQueueCreateInfo& value)
  {
  	s << "VkDeviceQueueCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
  	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
  	s << "\tqueueCount = " << value.queueCount << '\n';
  	s << "\tpQueuePriorities = " << value.pQueuePriorities << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceCreateInfo& value)
  {
  	s << "VkDeviceCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDeviceCreateFlagsStr(value.flags) << '\n';
  	s << "\tqueueCreateInfoCount = " << value.queueCreateInfoCount << '\n';
  	s << "\tpQueueCreateInfos = " << value.pQueueCreateInfos << '\n';
  	s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
  	s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
  	s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
  	s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
  	s << "\tpEnabledFeatures = " << value.pEnabledFeatures << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExtensionProperties& value)
  {
  	s << "VkExtensionProperties = {\n";
  	s << "\textensionName = " << (const char*)value.extensionName << '\n';
  	s << "\tspecVersion = " << value.specVersion << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkLayerProperties& value)
  {
  	s << "VkLayerProperties = {\n";
  	s << "\tlayerName = " << (const char*)value.layerName << '\n';
  	s << "\tspecVersion = " << value.specVersion << '\n';
  	s << "\timplementationVersion = " << value.implementationVersion << '\n';
  	s << "\tdescription = " << (const char*)value.description << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSubmitInfo& value)
  {
  	s << "VkSubmitInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
  	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
  	s << "\tpWaitDstStageMask = " << value.pWaitDstStageMask << '\n';
  	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
  	s << "\tpCommandBuffers = " << value.pCommandBuffers << '\n';
  	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
  	s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateInfo& value)
  {
  	s << "VkMemoryAllocateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tallocationSize = " << value.allocationSize << '\n';
  	s << "\tmemoryTypeIndex = " << value.memoryTypeIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMappedMemoryRange& value)
  {
  	s << "VkMappedMemoryRange = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements& value)
  {
  	s << "VkMemoryRequirements = {\n";
  	s << "\tsize = " << value.size << '\n';
  	s << "\talignment = " << value.alignment << '\n';
  	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties& value)
  {
  	s << "VkSparseImageFormatProperties = {\n";
  	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
  	s << "\timageGranularity = " << value.imageGranularity << '\n';
  	s << "\tflags = " << getSparseImageFormatFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements& value)
  {
  	s << "VkSparseImageMemoryRequirements = {\n";
  	s << "\tformatProperties = " << value.formatProperties << '\n';
  	s << "\timageMipTailFirstLod = " << value.imageMipTailFirstLod << '\n';
  	s << "\timageMipTailSize = " << value.imageMipTailSize << '\n';
  	s << "\timageMipTailOffset = " << value.imageMipTailOffset << '\n';
  	s << "\timageMipTailStride = " << value.imageMipTailStride << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseMemoryBind& value)
  {
  	s << "VkSparseMemoryBind = {\n";
  	s << "\tresourceOffset = " << value.resourceOffset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
  	s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseBufferMemoryBindInfo& value)
  {
  	s << "VkSparseBufferMemoryBindInfo = {\n";
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\tbindCount = " << value.bindCount << '\n';
  	s << "\tpBinds = " << value.pBinds << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageOpaqueMemoryBindInfo& value)
  {
  	s << "VkSparseImageOpaqueMemoryBindInfo = {\n";
  	s << "\timage = " << value.image << '\n';
  	s << "\tbindCount = " << value.bindCount << '\n';
  	s << "\tpBinds = " << value.pBinds << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageSubresource& value)
  {
  	s << "VkImageSubresource = {\n";
  	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
  	s << "\tmipLevel = " << value.mipLevel << '\n';
  	s << "\tarrayLayer = " << value.arrayLayer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkOffset3D& value)
  {
  	s << "VkOffset3D = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << "\tz = " << value.z << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBind& value)
  {
  	s << "VkSparseImageMemoryBind = {\n";
  	s << "\tsubresource = " << value.subresource << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\textent = " << value.extent << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
  	s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBindInfo& value)
  {
  	s << "VkSparseImageMemoryBindInfo = {\n";
  	s << "\timage = " << value.image << '\n';
  	s << "\tbindCount = " << value.bindCount << '\n';
  	s << "\tpBinds = " << value.pBinds << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindSparseInfo& value)
  {
  	s << "VkBindSparseInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
  	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
  	s << "\tbufferBindCount = " << value.bufferBindCount << '\n';
  	s << "\tpBufferBinds = " << value.pBufferBinds << '\n';
  	s << "\timageOpaqueBindCount = " << value.imageOpaqueBindCount << '\n';
  	s << "\tpImageOpaqueBinds = " << value.pImageOpaqueBinds << '\n';
  	s << "\timageBindCount = " << value.imageBindCount << '\n';
  	s << "\tpImageBinds = " << value.pImageBinds << '\n';
  	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
  	s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkFenceCreateInfo& value)
  {
  	s << "VkFenceCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getFenceCreateFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSemaphoreCreateInfo& value)
  {
  	s << "VkSemaphoreCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getSemaphoreCreateFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkEventCreateInfo& value)
  {
  	s << "VkEventCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getEventCreateFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkQueryPoolCreateInfo& value)
  {
  	s << "VkQueryPoolCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getQueryPoolCreateFlagsStr(value.flags) << '\n';
  	s << "\tqueryType = " << value.queryType << '\n';
  	s << "\tqueryCount = " << value.queryCount << '\n';
  	s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBufferCreateInfo& value)
  {
  	s << "VkBufferCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
  	s << "\tsharingMode = " << value.sharingMode << '\n';
  	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
  	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBufferViewCreateInfo& value)
  {
  	s << "VkBufferViewCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getBufferViewCreateFlagsStr(value.flags) << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\trange = " << value.range << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageCreateInfo& value)
  {
  	s << "VkImageCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
  	s << "\timageType = " << value.imageType << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\textent = " << value.extent << '\n';
  	s << "\tmipLevels = " << value.mipLevels << '\n';
  	s << "\tarrayLayers = " << value.arrayLayers << '\n';
  	s << "\tsamples = " << value.samples << '\n';
  	s << "\ttiling = " << value.tiling << '\n';
  	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
  	s << "\tsharingMode = " << value.sharingMode << '\n';
  	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
  	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
  	s << "\tinitialLayout = " << value.initialLayout << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSubresourceLayout& value)
  {
  	s << "VkSubresourceLayout = {\n";
  	s << "\toffset = " << value.offset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << "\trowPitch = " << value.rowPitch << '\n';
  	s << "\tarrayPitch = " << value.arrayPitch << '\n';
  	s << "\tdepthPitch = " << value.depthPitch << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkComponentMapping& value)
  {
  	s << "VkComponentMapping = {\n";
  	s << "\tr = " << value.r << '\n';
  	s << "\tg = " << value.g << '\n';
  	s << "\tb = " << value.b << '\n';
  	s << "\ta = " << value.a << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageSubresourceRange& value)
  {
  	s << "VkImageSubresourceRange = {\n";
  	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
  	s << "\tbaseMipLevel = " << value.baseMipLevel << '\n';
  	s << "\tlevelCount = " << value.levelCount << '\n';
  	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
  	s << "\tlayerCount = " << value.layerCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageViewCreateInfo& value)
  {
  	s << "VkImageViewCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getImageViewCreateFlagsStr(value.flags) << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << "\tviewType = " << value.viewType << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\tcomponents = " << value.components << '\n';
  	s << "\tsubresourceRange = " << value.subresourceRange << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkShaderModuleCreateInfo& value)
  {
  	s << "VkShaderModuleCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getShaderModuleCreateFlagsStr(value.flags) << '\n';
  	s << "\tcodeSize = " << value.codeSize << '\n';
  	s << "\tpCode = " << value.pCode << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineCacheCreateInfo& value)
  {
  	s << "VkPipelineCacheCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineCacheCreateFlagsStr(value.flags) << '\n';
  	s << "\tinitialDataSize = " << value.initialDataSize << '\n';
  	s << "\tpInitialData = " << value.pInitialData << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSpecializationMapEntry& value)
  {
  	s << "VkSpecializationMapEntry = {\n";
  	s << "\tconstantID = " << value.constantID << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSpecializationInfo& value)
  {
  	s << "VkSpecializationInfo = {\n";
  	s << "\tmapEntryCount = " << value.mapEntryCount << '\n';
  	s << "\tpMapEntries = " << value.pMapEntries << '\n';
  	s << "\tdataSize = " << value.dataSize << '\n';
  	s << "\tpData = " << value.pData << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineShaderStageCreateInfo& value)
  {
  	s << "VkPipelineShaderStageCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineShaderStageCreateFlagsStr(value.flags) << '\n';
  	s << "\tstage = " << value.stage << '\n';
  	s << "\tmodule = " << value.module << '\n';
  	s << "\tpName = " << getCharPtrStr(value.pName) << '\n';
  	s << "\tpSpecializationInfo = " << value.pSpecializationInfo << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDescription& value)
  {
  	s << "VkVertexInputBindingDescription = {\n";
  	s << "\tbinding = " << value.binding << '\n';
  	s << "\tstride = " << value.stride << '\n';
  	s << "\tinputRate = " << value.inputRate << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkVertexInputAttributeDescription& value)
  {
  	s << "VkVertexInputAttributeDescription = {\n";
  	s << "\tlocation = " << value.location << '\n';
  	s << "\tbinding = " << value.binding << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputStateCreateInfo& value)
  {
  	s << "VkPipelineVertexInputStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineVertexInputStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tvertexBindingDescriptionCount = " << value.vertexBindingDescriptionCount << '\n';
  	s << "\tpVertexBindingDescriptions = " << value.pVertexBindingDescriptions << '\n';
  	s << "\tvertexAttributeDescriptionCount = " << value.vertexAttributeDescriptionCount << '\n';
  	s << "\tpVertexAttributeDescriptions = " << value.pVertexAttributeDescriptions << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineInputAssemblyStateCreateInfo& value)
  {
  	s << "VkPipelineInputAssemblyStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineInputAssemblyStateCreateFlagsStr(value.flags) << '\n';
  	s << "\ttopology = " << value.topology << '\n';
  	s << "\tprimitiveRestartEnable = " << value.primitiveRestartEnable << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationStateCreateInfo& value)
  {
  	s << "VkPipelineTessellationStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineTessellationStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tpatchControlPoints = " << value.patchControlPoints << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkViewport& value)
  {
  	s << "VkViewport = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << "\twidth = " << value.width << '\n';
  	s << "\theight = " << value.height << '\n';
  	s << "\tminDepth = " << value.minDepth << '\n';
  	s << "\tmaxDepth = " << value.maxDepth << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkOffset2D& value)
  {
  	s << "VkOffset2D = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExtent2D& value)
  {
  	s << "VkExtent2D = {\n";
  	s << "\twidth = " << value.width << '\n';
  	s << "\theight = " << value.height << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRect2D& value)
  {
  	s << "VkRect2D = {\n";
  	s << "\toffset = " << value.offset << '\n';
  	s << "\textent = " << value.extent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineViewportStateCreateInfo& value)
  {
  	s << "VkPipelineViewportStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineViewportStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tviewportCount = " << value.viewportCount << '\n';
  	s << "\tpViewports = " << value.pViewports << '\n';
  	s << "\tscissorCount = " << value.scissorCount << '\n';
  	s << "\tpScissors = " << value.pScissors << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateCreateInfo& value)
  {
  	s << "VkPipelineRasterizationStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineRasterizationStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tdepthClampEnable = " << value.depthClampEnable << '\n';
  	s << "\trasterizerDiscardEnable = " << value.rasterizerDiscardEnable << '\n';
  	s << "\tpolygonMode = " << value.polygonMode << '\n';
  	s << "\tcullMode = " << getCullModeFlagsStr(value.cullMode) << '\n';
  	s << "\tfrontFace = " << value.frontFace << '\n';
  	s << "\tdepthBiasEnable = " << value.depthBiasEnable << '\n';
  	s << "\tdepthBiasConstantFactor = " << value.depthBiasConstantFactor << '\n';
  	s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
  	s << "\tdepthBiasSlopeFactor = " << value.depthBiasSlopeFactor << '\n';
  	s << "\tlineWidth = " << value.lineWidth << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineMultisampleStateCreateInfo& value)
  {
  	s << "VkPipelineMultisampleStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineMultisampleStateCreateFlagsStr(value.flags) << '\n';
  	s << "\trasterizationSamples = " << value.rasterizationSamples << '\n';
  	s << "\tsampleShadingEnable = " << value.sampleShadingEnable << '\n';
  	s << "\tminSampleShading = " << value.minSampleShading << '\n';
  	s << "\tpSampleMask = " << value.pSampleMask << '\n';
  	s << "\talphaToCoverageEnable = " << value.alphaToCoverageEnable << '\n';
  	s << "\talphaToOneEnable = " << value.alphaToOneEnable << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkStencilOpState& value)
  {
  	s << "VkStencilOpState = {\n";
  	s << "\tfailOp = " << value.failOp << '\n';
  	s << "\tpassOp = " << value.passOp << '\n';
  	s << "\tdepthFailOp = " << value.depthFailOp << '\n';
  	s << "\tcompareOp = " << value.compareOp << '\n';
  	s << "\tcompareMask = " << value.compareMask << '\n';
  	s << "\twriteMask = " << value.writeMask << '\n';
  	s << "\treference = " << value.reference << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineDepthStencilStateCreateInfo& value)
  {
  	s << "VkPipelineDepthStencilStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineDepthStencilStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tdepthTestEnable = " << value.depthTestEnable << '\n';
  	s << "\tdepthWriteEnable = " << value.depthWriteEnable << '\n';
  	s << "\tdepthCompareOp = " << value.depthCompareOp << '\n';
  	s << "\tdepthBoundsTestEnable = " << value.depthBoundsTestEnable << '\n';
  	s << "\tstencilTestEnable = " << value.stencilTestEnable << '\n';
  	s << "\tfront = " << value.front << '\n';
  	s << "\tback = " << value.back << '\n';
  	s << "\tminDepthBounds = " << value.minDepthBounds << '\n';
  	s << "\tmaxDepthBounds = " << value.maxDepthBounds << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAttachmentState& value)
  {
  	s << "VkPipelineColorBlendAttachmentState = {\n";
  	s << "\tblendEnable = " << value.blendEnable << '\n';
  	s << "\tsrcColorBlendFactor = " << value.srcColorBlendFactor << '\n';
  	s << "\tdstColorBlendFactor = " << value.dstColorBlendFactor << '\n';
  	s << "\tcolorBlendOp = " << value.colorBlendOp << '\n';
  	s << "\tsrcAlphaBlendFactor = " << value.srcAlphaBlendFactor << '\n';
  	s << "\tdstAlphaBlendFactor = " << value.dstAlphaBlendFactor << '\n';
  	s << "\talphaBlendOp = " << value.alphaBlendOp << '\n';
  	s << "\tcolorWriteMask = " << getColorComponentFlagsStr(value.colorWriteMask) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendStateCreateInfo& value)
  {
  	s << "VkPipelineColorBlendStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineColorBlendStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tlogicOpEnable = " << value.logicOpEnable << '\n';
  	s << "\tlogicOp = " << value.logicOp << '\n';
  	s << "\tattachmentCount = " << value.attachmentCount << '\n';
  	s << "\tpAttachments = " << value.pAttachments << '\n';
  	s << "\tblendConstants = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.blendConstants), DE_ARRAY_END(value.blendConstants)) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineDynamicStateCreateInfo& value)
  {
  	s << "VkPipelineDynamicStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineDynamicStateCreateFlagsStr(value.flags) << '\n';
  	s << "\tdynamicStateCount = " << value.dynamicStateCount << '\n';
  	s << "\tpDynamicStates = " << value.pDynamicStates << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkGraphicsPipelineCreateInfo& value)
  {
  	s << "VkGraphicsPipelineCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
  	s << "\tstageCount = " << value.stageCount << '\n';
  	s << "\tpStages = " << value.pStages << '\n';
  	s << "\tpVertexInputState = " << value.pVertexInputState << '\n';
  	s << "\tpInputAssemblyState = " << value.pInputAssemblyState << '\n';
  	s << "\tpTessellationState = " << value.pTessellationState << '\n';
  	s << "\tpViewportState = " << value.pViewportState << '\n';
  	s << "\tpRasterizationState = " << value.pRasterizationState << '\n';
  	s << "\tpMultisampleState = " << value.pMultisampleState << '\n';
  	s << "\tpDepthStencilState = " << value.pDepthStencilState << '\n';
  	s << "\tpColorBlendState = " << value.pColorBlendState << '\n';
  	s << "\tpDynamicState = " << value.pDynamicState << '\n';
  	s << "\tlayout = " << value.layout << '\n';
  	s << "\trenderPass = " << value.renderPass << '\n';
  	s << "\tsubpass = " << value.subpass << '\n';
  	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
  	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkComputePipelineCreateInfo& value)
  {
  	s << "VkComputePipelineCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
  	s << "\tstage = " << value.stage << '\n';
  	s << "\tlayout = " << value.layout << '\n';
  	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
  	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPushConstantRange& value)
  {
  	s << "VkPushConstantRange = {\n";
  	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineLayoutCreateInfo& value)
  {
  	s << "VkPipelineLayoutCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineLayoutCreateFlagsStr(value.flags) << '\n';
  	s << "\tsetLayoutCount = " << value.setLayoutCount << '\n';
  	s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
  	s << "\tpushConstantRangeCount = " << value.pushConstantRangeCount << '\n';
  	s << "\tpPushConstantRanges = " << value.pPushConstantRanges << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSamplerCreateInfo& value)
  {
  	s << "VkSamplerCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getSamplerCreateFlagsStr(value.flags) << '\n';
  	s << "\tmagFilter = " << value.magFilter << '\n';
  	s << "\tminFilter = " << value.minFilter << '\n';
  	s << "\tmipmapMode = " << value.mipmapMode << '\n';
  	s << "\taddressModeU = " << value.addressModeU << '\n';
  	s << "\taddressModeV = " << value.addressModeV << '\n';
  	s << "\taddressModeW = " << value.addressModeW << '\n';
  	s << "\tmipLodBias = " << value.mipLodBias << '\n';
  	s << "\tanisotropyEnable = " << value.anisotropyEnable << '\n';
  	s << "\tmaxAnisotropy = " << value.maxAnisotropy << '\n';
  	s << "\tcompareEnable = " << value.compareEnable << '\n';
  	s << "\tcompareOp = " << value.compareOp << '\n';
  	s << "\tminLod = " << value.minLod << '\n';
  	s << "\tmaxLod = " << value.maxLod << '\n';
  	s << "\tborderColor = " << value.borderColor << '\n';
  	s << "\tunnormalizedCoordinates = " << value.unnormalizedCoordinates << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutBinding& value)
  {
  	s << "VkDescriptorSetLayoutBinding = {\n";
  	s << "\tbinding = " << value.binding << '\n';
  	s << "\tdescriptorType = " << value.descriptorType << '\n';
  	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
  	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
  	s << "\tpImmutableSamplers = " << value.pImmutableSamplers << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutCreateInfo& value)
  {
  	s << "VkDescriptorSetLayoutCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDescriptorSetLayoutCreateFlagsStr(value.flags) << '\n';
  	s << "\tbindingCount = " << value.bindingCount << '\n';
  	s << "\tpBindings = " << value.pBindings << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolSize& value)
  {
  	s << "VkDescriptorPoolSize = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolCreateInfo& value)
  {
  	s << "VkDescriptorPoolCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDescriptorPoolCreateFlagsStr(value.flags) << '\n';
  	s << "\tmaxSets = " << value.maxSets << '\n';
  	s << "\tpoolSizeCount = " << value.poolSizeCount << '\n';
  	s << "\tpPoolSizes = " << value.pPoolSizes << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorSetAllocateInfo& value)
  {
  	s << "VkDescriptorSetAllocateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdescriptorPool = " << value.descriptorPool << '\n';
  	s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
  	s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorImageInfo& value)
  {
  	s << "VkDescriptorImageInfo = {\n";
  	s << "\tsampler = " << value.sampler << '\n';
  	s << "\timageView = " << value.imageView << '\n';
  	s << "\timageLayout = " << value.imageLayout << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorBufferInfo& value)
  {
  	s << "VkDescriptorBufferInfo = {\n";
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\trange = " << value.range << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSet& value)
  {
  	s << "VkWriteDescriptorSet = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdstSet = " << value.dstSet << '\n';
  	s << "\tdstBinding = " << value.dstBinding << '\n';
  	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
  	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
  	s << "\tdescriptorType = " << value.descriptorType << '\n';
  	s << "\tpImageInfo = " << value.pImageInfo << '\n';
  	s << "\tpBufferInfo = " << value.pBufferInfo << '\n';
  	s << "\tpTexelBufferView = " << value.pTexelBufferView << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCopyDescriptorSet& value)
  {
  	s << "VkCopyDescriptorSet = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsrcSet = " << value.srcSet << '\n';
  	s << "\tsrcBinding = " << value.srcBinding << '\n';
  	s << "\tsrcArrayElement = " << value.srcArrayElement << '\n';
  	s << "\tdstSet = " << value.dstSet << '\n';
  	s << "\tdstBinding = " << value.dstBinding << '\n';
  	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
  	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkFramebufferCreateInfo& value)
  {
  	s << "VkFramebufferCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getFramebufferCreateFlagsStr(value.flags) << '\n';
  	s << "\trenderPass = " << value.renderPass << '\n';
  	s << "\tattachmentCount = " << value.attachmentCount << '\n';
  	s << "\tpAttachments = " << value.pAttachments << '\n';
  	s << "\twidth = " << value.width << '\n';
  	s << "\theight = " << value.height << '\n';
  	s << "\tlayers = " << value.layers << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAttachmentDescription& value)
  {
  	s << "VkAttachmentDescription = {\n";
  	s << "\tflags = " << getAttachmentDescriptionFlagsStr(value.flags) << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\tsamples = " << value.samples << '\n';
  	s << "\tloadOp = " << value.loadOp << '\n';
  	s << "\tstoreOp = " << value.storeOp << '\n';
  	s << "\tstencilLoadOp = " << value.stencilLoadOp << '\n';
  	s << "\tstencilStoreOp = " << value.stencilStoreOp << '\n';
  	s << "\tinitialLayout = " << value.initialLayout << '\n';
  	s << "\tfinalLayout = " << value.finalLayout << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAttachmentReference& value)
  {
  	s << "VkAttachmentReference = {\n";
  	s << "\tattachment = " << value.attachment << '\n';
  	s << "\tlayout = " << value.layout << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSubpassDescription& value)
  {
  	s << "VkSubpassDescription = {\n";
  	s << "\tflags = " << getSubpassDescriptionFlagsStr(value.flags) << '\n';
  	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
  	s << "\tinputAttachmentCount = " << value.inputAttachmentCount << '\n';
  	s << "\tpInputAttachments = " << value.pInputAttachments << '\n';
  	s << "\tcolorAttachmentCount = " << value.colorAttachmentCount << '\n';
  	s << "\tpColorAttachments = " << value.pColorAttachments << '\n';
  	s << "\tpResolveAttachments = " << value.pResolveAttachments << '\n';
  	s << "\tpDepthStencilAttachment = " << value.pDepthStencilAttachment << '\n';
  	s << "\tpreserveAttachmentCount = " << value.preserveAttachmentCount << '\n';
  	s << "\tpPreserveAttachments = " << value.pPreserveAttachments << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSubpassDependency& value)
  {
  	s << "VkSubpassDependency = {\n";
  	s << "\tsrcSubpass = " << value.srcSubpass << '\n';
  	s << "\tdstSubpass = " << value.dstSubpass << '\n';
  	s << "\tsrcStageMask = " << getPipelineStageFlagsStr(value.srcStageMask) << '\n';
  	s << "\tdstStageMask = " << getPipelineStageFlagsStr(value.dstStageMask) << '\n';
  	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
  	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
  	s << "\tdependencyFlags = " << getDependencyFlagsStr(value.dependencyFlags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRenderPassCreateInfo& value)
  {
  	s << "VkRenderPassCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getRenderPassCreateFlagsStr(value.flags) << '\n';
  	s << "\tattachmentCount = " << value.attachmentCount << '\n';
  	s << "\tpAttachments = " << value.pAttachments << '\n';
  	s << "\tsubpassCount = " << value.subpassCount << '\n';
  	s << "\tpSubpasses = " << value.pSubpasses << '\n';
  	s << "\tdependencyCount = " << value.dependencyCount << '\n';
  	s << "\tpDependencies = " << value.pDependencies << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCommandPoolCreateInfo& value)
  {
  	s << "VkCommandPoolCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getCommandPoolCreateFlagsStr(value.flags) << '\n';
  	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCommandBufferAllocateInfo& value)
  {
  	s << "VkCommandBufferAllocateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tcommandPool = " << value.commandPool << '\n';
  	s << "\tlevel = " << value.level << '\n';
  	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceInfo& value)
  {
  	s << "VkCommandBufferInheritanceInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\trenderPass = " << value.renderPass << '\n';
  	s << "\tsubpass = " << value.subpass << '\n';
  	s << "\tframebuffer = " << value.framebuffer << '\n';
  	s << "\tocclusionQueryEnable = " << value.occlusionQueryEnable << '\n';
  	s << "\tqueryFlags = " << getQueryControlFlagsStr(value.queryFlags) << '\n';
  	s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value)
  {
  	s << "VkCommandBufferBeginInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getCommandBufferUsageFlagsStr(value.flags) << '\n';
  	s << "\tpInheritanceInfo = " << value.pInheritanceInfo << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBufferCopy& value)
  {
  	s << "VkBufferCopy = {\n";
  	s << "\tsrcOffset = " << value.srcOffset << '\n';
  	s << "\tdstOffset = " << value.dstOffset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageSubresourceLayers& value)
  {
  	s << "VkImageSubresourceLayers = {\n";
  	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
  	s << "\tmipLevel = " << value.mipLevel << '\n';
  	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
  	s << "\tlayerCount = " << value.layerCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageCopy& value)
  {
  	s << "VkImageCopy = {\n";
  	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
  	s << "\tsrcOffset = " << value.srcOffset << '\n';
  	s << "\tdstSubresource = " << value.dstSubresource << '\n';
  	s << "\tdstOffset = " << value.dstOffset << '\n';
  	s << "\textent = " << value.extent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageBlit& value)
  {
  	s << "VkImageBlit = {\n";
  	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
  	s << "\tsrcOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.srcOffsets), DE_ARRAY_END(value.srcOffsets)) << '\n';
  	s << "\tdstSubresource = " << value.dstSubresource << '\n';
  	s << "\tdstOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.dstOffsets), DE_ARRAY_END(value.dstOffsets)) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBufferImageCopy& value)
  {
  	s << "VkBufferImageCopy = {\n";
  	s << "\tbufferOffset = " << value.bufferOffset << '\n';
  	s << "\tbufferRowLength = " << value.bufferRowLength << '\n';
  	s << "\tbufferImageHeight = " << value.bufferImageHeight << '\n';
  	s << "\timageSubresource = " << value.imageSubresource << '\n';
  	s << "\timageOffset = " << value.imageOffset << '\n';
  	s << "\timageExtent = " << value.imageExtent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkClearColorValue& value)
  {
  	s << "VkClearColorValue = {\n";
  	s << "\tfloat32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.float32), DE_ARRAY_END(value.float32)) << '\n';
  	s << "\tint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.int32), DE_ARRAY_END(value.int32)) << '\n';
  	s << "\tuint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.uint32), DE_ARRAY_END(value.uint32)) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkClearDepthStencilValue& value)
  {
  	s << "VkClearDepthStencilValue = {\n";
  	s << "\tdepth = " << value.depth << '\n';
  	s << "\tstencil = " << value.stencil << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkClearValue& value)
  {
  	s << "VkClearValue = {\n";
  	s << "\tcolor = " << value.color << '\n';
  	s << "\tdepthStencil = " << value.depthStencil << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkClearAttachment& value)
  {
  	s << "VkClearAttachment = {\n";
  	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
  	s << "\tcolorAttachment = " << value.colorAttachment << '\n';
  	s << "\tclearValue = " << value.clearValue << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkClearRect& value)
  {
  	s << "VkClearRect = {\n";
  	s << "\trect = " << value.rect << '\n';
  	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
  	s << "\tlayerCount = " << value.layerCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageResolve& value)
  {
  	s << "VkImageResolve = {\n";
  	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
  	s << "\tsrcOffset = " << value.srcOffset << '\n';
  	s << "\tdstSubresource = " << value.dstSubresource << '\n';
  	s << "\tdstOffset = " << value.dstOffset << '\n';
  	s << "\textent = " << value.extent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryBarrier& value)
  {
  	s << "VkMemoryBarrier = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
  	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBufferMemoryBarrier& value)
  {
  	s << "VkBufferMemoryBarrier = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
  	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
  	s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
  	s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\tsize = " << value.size << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageMemoryBarrier& value)
  {
  	s << "VkImageMemoryBarrier = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
  	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
  	s << "\toldLayout = " << value.oldLayout << '\n';
  	s << "\tnewLayout = " << value.newLayout << '\n';
  	s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
  	s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << "\tsubresourceRange = " << value.subresourceRange << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRenderPassBeginInfo& value)
  {
  	s << "VkRenderPassBeginInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\trenderPass = " << value.renderPass << '\n';
  	s << "\tframebuffer = " << value.framebuffer << '\n';
  	s << "\trenderArea = " << value.renderArea << '\n';
  	s << "\tclearValueCount = " << value.clearValueCount << '\n';
  	s << "\tpClearValues = " << value.pClearValues << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDispatchIndirectCommand& value)
  {
  	s << "VkDispatchIndirectCommand = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << "\tz = " << value.z << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDrawIndexedIndirectCommand& value)
  {
  	s << "VkDrawIndexedIndirectCommand = {\n";
  	s << "\tindexCount = " << value.indexCount << '\n';
  	s << "\tinstanceCount = " << value.instanceCount << '\n';
  	s << "\tfirstIndex = " << value.firstIndex << '\n';
  	s << "\tvertexOffset = " << value.vertexOffset << '\n';
  	s << "\tfirstInstance = " << value.firstInstance << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDrawIndirectCommand& value)
  {
  	s << "VkDrawIndirectCommand = {\n";
  	s << "\tvertexCount = " << value.vertexCount << '\n';
  	s << "\tinstanceCount = " << value.instanceCount << '\n';
  	s << "\tfirstVertex = " << value.firstVertex << '\n';
  	s << "\tfirstInstance = " << value.firstInstance << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSubgroupProperties& value)
  {
  	s << "VkPhysicalDeviceSubgroupProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsubgroupSize = " << value.subgroupSize << '\n';
  	s << "\tsupportedStages = " << getShaderStageFlagsStr(value.supportedStages) << '\n';
  	s << "\tsupportedOperations = " << getSubgroupFeatureFlagsStr(value.supportedOperations) << '\n';
  	s << "\tquadOperationsInAllStages = " << value.quadOperationsInAllStages << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryInfo& value)
  {
  	s << "VkBindBufferMemoryInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryInfo& value)
  {
  	s << "VkBindImageMemoryInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDevice16BitStorageFeatures& value)
  {
  	s << "VkPhysicalDevice16BitStorageFeatures = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tstorageBuffer16BitAccess = " << value.storageBuffer16BitAccess << '\n';
  	s << "\tuniformAndStorageBuffer16BitAccess = " << value.uniformAndStorageBuffer16BitAccess << '\n';
  	s << "\tstoragePushConstant16 = " << value.storagePushConstant16 << '\n';
  	s << "\tstorageInputOutput16 = " << value.storageInputOutput16 << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryDedicatedRequirements& value)
  {
  	s << "VkMemoryDedicatedRequirements = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tprefersDedicatedAllocation = " << value.prefersDedicatedAllocation << '\n';
  	s << "\trequiresDedicatedAllocation = " << value.requiresDedicatedAllocation << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryDedicatedAllocateInfo& value)
  {
  	s << "VkMemoryDedicatedAllocateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateFlagsInfo& value)
  {
  	s << "VkMemoryAllocateFlagsInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getMemoryAllocateFlagsStr(value.flags) << '\n';
  	s << "\tdeviceMask = " << value.deviceMask << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupRenderPassBeginInfo& value)
  {
  	s << "VkDeviceGroupRenderPassBeginInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdeviceMask = " << value.deviceMask << '\n';
  	s << "\tdeviceRenderAreaCount = " << value.deviceRenderAreaCount << '\n';
  	s << "\tpDeviceRenderAreas = " << value.pDeviceRenderAreas << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupCommandBufferBeginInfo& value)
  {
  	s << "VkDeviceGroupCommandBufferBeginInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdeviceMask = " << value.deviceMask << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSubmitInfo& value)
  {
  	s << "VkDeviceGroupSubmitInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
  	s << "\tpWaitSemaphoreDeviceIndices = " << value.pWaitSemaphoreDeviceIndices << '\n';
  	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
  	s << "\tpCommandBufferDeviceMasks = " << value.pCommandBufferDeviceMasks << '\n';
  	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
  	s << "\tpSignalSemaphoreDeviceIndices = " << value.pSignalSemaphoreDeviceIndices << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupBindSparseInfo& value)
  {
  	s << "VkDeviceGroupBindSparseInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tresourceDeviceIndex = " << value.resourceDeviceIndex << '\n';
  	s << "\tmemoryDeviceIndex = " << value.memoryDeviceIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindBufferMemoryDeviceGroupInfo& value)
  {
  	s << "VkBindBufferMemoryDeviceGroupInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
  	s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindImageMemoryDeviceGroupInfo& value)
  {
  	s << "VkBindImageMemoryDeviceGroupInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdeviceIndexCount = " << value.deviceIndexCount << '\n';
  	s << "\tpDeviceIndices = " << value.pDeviceIndices << '\n';
  	s << "\tSFRRectCount = " << value.SFRRectCount << '\n';
  	s << "\tpSFRRects = " << value.pSFRRects << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceGroupProperties& value)
  {
  	s << "VkPhysicalDeviceGroupProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
  	s << "\tphysicalDevices = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.physicalDevices), DE_ARRAY_END(value.physicalDevices)) << '\n';
  	s << "\tsubsetAllocation = " << value.subsetAllocation << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupDeviceCreateInfo& value)
  {
  	s << "VkDeviceGroupDeviceCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tphysicalDeviceCount = " << value.physicalDeviceCount << '\n';
  	s << "\tpPhysicalDevices = " << value.pPhysicalDevices << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBufferMemoryRequirementsInfo2& value)
  {
  	s << "VkBufferMemoryRequirementsInfo2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageMemoryRequirementsInfo2& value)
  {
  	s << "VkImageMemoryRequirementsInfo2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageSparseMemoryRequirementsInfo2& value)
  {
  	s << "VkImageSparseMemoryRequirementsInfo2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements2& value)
  {
  	s << "VkMemoryRequirements2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements2& value)
  {
  	s << "VkSparseImageMemoryRequirements2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemoryRequirements = " << value.memoryRequirements << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures2& value)
  {
  	s << "VkPhysicalDeviceFeatures2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tfeatures = " << value.features << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties2& value)
  {
  	s << "VkPhysicalDeviceProperties2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tproperties = " << value.properties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkFormatProperties2& value)
  {
  	s << "VkFormatProperties2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tformatProperties = " << value.formatProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties2& value)
  {
  	s << "VkImageFormatProperties2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageFormatInfo2& value)
  {
  	s << "VkPhysicalDeviceImageFormatInfo2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\ttype = " << value.type << '\n';
  	s << "\ttiling = " << value.tiling << '\n';
  	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
  	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties2& value)
  {
  	s << "VkQueueFamilyProperties2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tqueueFamilyProperties = " << value.queueFamilyProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties2& value)
  {
  	s << "VkPhysicalDeviceMemoryProperties2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemoryProperties = " << value.memoryProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties2& value)
  {
  	s << "VkSparseImageFormatProperties2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tproperties = " << value.properties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseImageFormatInfo2& value)
  {
  	s << "VkPhysicalDeviceSparseImageFormatInfo2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\ttype = " << value.type << '\n';
  	s << "\tsamples = " << value.samples << '\n';
  	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
  	s << "\ttiling = " << value.tiling << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePointClippingProperties& value)
  {
  	s << "VkPhysicalDevicePointClippingProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpointClippingBehavior = " << value.pointClippingBehavior << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkInputAttachmentAspectReference& value)
  {
  	s << "VkInputAttachmentAspectReference = {\n";
  	s << "\tsubpass = " << value.subpass << '\n';
  	s << "\tinputAttachmentIndex = " << value.inputAttachmentIndex << '\n';
  	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRenderPassInputAttachmentAspectCreateInfo& value)
  {
  	s << "VkRenderPassInputAttachmentAspectCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\taspectReferenceCount = " << value.aspectReferenceCount << '\n';
  	s << "\tpAspectReferences = " << value.pAspectReferences << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageViewUsageCreateInfo& value)
  {
  	s << "VkImageViewUsageCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationDomainOriginStateCreateInfo& value)
  {
  	s << "VkPipelineTessellationDomainOriginStateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdomainOrigin = " << value.domainOrigin << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRenderPassMultiviewCreateInfo& value)
  {
  	s << "VkRenderPassMultiviewCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsubpassCount = " << value.subpassCount << '\n';
  	s << "\tpViewMasks = " << value.pViewMasks << '\n';
  	s << "\tdependencyCount = " << value.dependencyCount << '\n';
  	s << "\tpViewOffsets = " << value.pViewOffsets << '\n';
  	s << "\tcorrelationMaskCount = " << value.correlationMaskCount << '\n';
  	s << "\tpCorrelationMasks = " << value.pCorrelationMasks << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewFeatures& value)
  {
  	s << "VkPhysicalDeviceMultiviewFeatures = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmultiview = " << value.multiview << '\n';
  	s << "\tmultiviewGeometryShader = " << value.multiviewGeometryShader << '\n';
  	s << "\tmultiviewTessellationShader = " << value.multiviewTessellationShader << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewProperties& value)
  {
  	s << "VkPhysicalDeviceMultiviewProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmaxMultiviewViewCount = " << value.maxMultiviewViewCount << '\n';
  	s << "\tmaxMultiviewInstanceIndex = " << value.maxMultiviewInstanceIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceVariablePointerFeatures& value)
  {
  	s << "VkPhysicalDeviceVariablePointerFeatures = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tvariablePointersStorageBuffer = " << value.variablePointersStorageBuffer << '\n';
  	s << "\tvariablePointers = " << value.variablePointers << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProtectedMemoryFeatures& value)
  {
  	s << "VkPhysicalDeviceProtectedMemoryFeatures = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tprotectedMemory = " << value.protectedMemory << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProtectedMemoryProperties& value)
  {
  	s << "VkPhysicalDeviceProtectedMemoryProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tprotectedNoFault = " << value.protectedNoFault << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceQueueInfo2& value)
  {
  	s << "VkDeviceQueueInfo2 = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
  	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
  	s << "\tqueueIndex = " << value.queueIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkProtectedSubmitInfo& value)
  {
  	s << "VkProtectedSubmitInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tprotectedSubmit = " << value.protectedSubmit << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionCreateInfo& value)
  {
  	s << "VkSamplerYcbcrConversionCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\tycbcrModel = " << value.ycbcrModel << '\n';
  	s << "\tycbcrRange = " << value.ycbcrRange << '\n';
  	s << "\tcomponents = " << value.components << '\n';
  	s << "\txChromaOffset = " << value.xChromaOffset << '\n';
  	s << "\tyChromaOffset = " << value.yChromaOffset << '\n';
  	s << "\tchromaFilter = " << value.chromaFilter << '\n';
  	s << "\tforceExplicitReconstruction = " << value.forceExplicitReconstruction << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionInfo& value)
  {
  	s << "VkSamplerYcbcrConversionInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tconversion = " << value.conversion << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindImagePlaneMemoryInfo& value)
  {
  	s << "VkBindImagePlaneMemoryInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tplaneAspect = " << value.planeAspect << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImagePlaneMemoryRequirementsInfo& value)
  {
  	s << "VkImagePlaneMemoryRequirementsInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tplaneAspect = " << value.planeAspect << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSamplerYcbcrConversionFeatures& value)
  {
  	s << "VkPhysicalDeviceSamplerYcbcrConversionFeatures = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsamplerYcbcrConversion = " << value.samplerYcbcrConversion << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSamplerYcbcrConversionImageFormatProperties& value)
  {
  	s << "VkSamplerYcbcrConversionImageFormatProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tcombinedImageSamplerDescriptorCount = " << value.combinedImageSamplerDescriptorCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorUpdateTemplateEntry& value)
  {
  	s << "VkDescriptorUpdateTemplateEntry = {\n";
  	s << "\tdstBinding = " << value.dstBinding << '\n';
  	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
  	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
  	s << "\tdescriptorType = " << value.descriptorType << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << "\tstride = " << value.stride << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorUpdateTemplateCreateInfo& value)
  {
  	s << "VkDescriptorUpdateTemplateCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDescriptorUpdateTemplateCreateFlagsStr(value.flags) << '\n';
  	s << "\tdescriptorUpdateEntryCount = " << value.descriptorUpdateEntryCount << '\n';
  	s << "\tpDescriptorUpdateEntries = " << value.pDescriptorUpdateEntries << '\n';
  	s << "\ttemplateType = " << value.templateType << '\n';
  	s << "\tdescriptorSetLayout = " << value.descriptorSetLayout << '\n';
  	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
  	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
  	s << "\tset = " << value.set << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalMemoryProperties& value)
  {
  	s << "VkExternalMemoryProperties = {\n";
  	s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsStr(value.externalMemoryFeatures) << '\n';
  	s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
  	s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalImageFormatInfo& value)
  {
  	s << "VkPhysicalDeviceExternalImageFormatInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalImageFormatProperties& value)
  {
  	s << "VkExternalImageFormatProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\texternalMemoryProperties = " << value.externalMemoryProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalBufferInfo& value)
  {
  	s << "VkPhysicalDeviceExternalBufferInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
  	s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalBufferProperties& value)
  {
  	s << "VkExternalBufferProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\texternalMemoryProperties = " << value.externalMemoryProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceIDProperties& value)
  {
  	s << "VkPhysicalDeviceIDProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdeviceUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceUUID))) << '\n';
  	s << "\tdriverUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.driverUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.driverUUID))) << '\n';
  	s << "\tdeviceLUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.deviceLUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.deviceLUID))) << '\n';
  	s << "\tdeviceNodeMask = " << value.deviceNodeMask << '\n';
  	s << "\tdeviceLUIDValid = " << value.deviceLUIDValid << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalMemoryImageCreateInfo& value)
  {
  	s << "VkExternalMemoryImageCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalMemoryBufferCreateInfo& value)
  {
  	s << "VkExternalMemoryBufferCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfo& value)
  {
  	s << "VkExportMemoryAllocateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalFenceInfo& value)
  {
  	s << "VkPhysicalDeviceExternalFenceInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalFenceProperties& value)
  {
  	s << "VkExternalFenceProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\texportFromImportedHandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
  	s << "\tcompatibleHandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
  	s << "\texternalFenceFeatures = " << getExternalFenceFeatureFlagsStr(value.externalFenceFeatures) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportFenceCreateInfo& value)
  {
  	s << "VkExportFenceCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalFenceHandleTypeFlagsStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportSemaphoreCreateInfo& value)
  {
  	s << "VkExportSemaphoreCreateInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceExternalSemaphoreInfo& value)
  {
  	s << "VkPhysicalDeviceExternalSemaphoreInfo = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalSemaphoreProperties& value)
  {
  	s << "VkExternalSemaphoreProperties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\texportFromImportedHandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.exportFromImportedHandleTypes) << '\n';
  	s << "\tcompatibleHandleTypes = " << getExternalSemaphoreHandleTypeFlagsStr(value.compatibleHandleTypes) << '\n';
  	s << "\texternalSemaphoreFeatures = " << getExternalSemaphoreFeatureFlagsStr(value.externalSemaphoreFeatures) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMaintenance3Properties& value)
  {
  	s << "VkPhysicalDeviceMaintenance3Properties = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmaxPerSetDescriptors = " << value.maxPerSetDescriptors << '\n';
  	s << "\tmaxMemoryAllocationSize = " << value.maxMemoryAllocationSize << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutSupport& value)
  {
  	s << "VkDescriptorSetLayoutSupport = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsupported = " << value.supported << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceShaderDrawParameterFeatures& value)
  {
  	s << "VkPhysicalDeviceShaderDrawParameterFeatures = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tshaderDrawParameters = " << value.shaderDrawParameters << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilitiesKHR& value)
  {
  	s << "VkSurfaceCapabilitiesKHR = {\n";
  	s << "\tminImageCount = " << value.minImageCount << '\n';
  	s << "\tmaxImageCount = " << value.maxImageCount << '\n';
  	s << "\tcurrentExtent = " << value.currentExtent << '\n';
  	s << "\tminImageExtent = " << value.minImageExtent << '\n';
  	s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
  	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
  	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
  	s << "\tcurrentTransform = " << value.currentTransform << '\n';
  	s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
  	s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSurfaceFormatKHR& value)
  {
  	s << "VkSurfaceFormatKHR = {\n";
  	s << "\tformat = " << value.format << '\n';
  	s << "\tcolorSpace = " << value.colorSpace << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSwapchainCreateInfoKHR& value)
  {
  	s << "VkSwapchainCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getSwapchainCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tsurface = " << value.surface << '\n';
  	s << "\tminImageCount = " << value.minImageCount << '\n';
  	s << "\timageFormat = " << value.imageFormat << '\n';
  	s << "\timageColorSpace = " << value.imageColorSpace << '\n';
  	s << "\timageExtent = " << value.imageExtent << '\n';
  	s << "\timageArrayLayers = " << value.imageArrayLayers << '\n';
  	s << "\timageUsage = " << getImageUsageFlagsStr(value.imageUsage) << '\n';
  	s << "\timageSharingMode = " << value.imageSharingMode << '\n';
  	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
  	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
  	s << "\tpreTransform = " << value.preTransform << '\n';
  	s << "\tcompositeAlpha = " << value.compositeAlpha << '\n';
  	s << "\tpresentMode = " << value.presentMode << '\n';
  	s << "\tclipped = " << value.clipped << '\n';
  	s << "\toldSwapchain = " << value.oldSwapchain << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPresentInfoKHR& value)
  {
  	s << "VkPresentInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
  	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
  	s << "\tswapchainCount = " << value.swapchainCount << '\n';
  	s << "\tpSwapchains = " << value.pSwapchains << '\n';
  	s << "\tpImageIndices = " << value.pImageIndices << '\n';
  	s << "\tpResults = " << value.pResults << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageSwapchainCreateInfoKHR& value)
  {
  	s << "VkImageSwapchainCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tswapchain = " << value.swapchain << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkBindImageMemorySwapchainInfoKHR& value)
  {
  	s << "VkBindImageMemorySwapchainInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tswapchain = " << value.swapchain << '\n';
  	s << "\timageIndex = " << value.imageIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAcquireNextImageInfoKHR& value)
  {
  	s << "VkAcquireNextImageInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tswapchain = " << value.swapchain << '\n';
  	s << "\ttimeout = " << value.timeout << '\n';
  	s << "\tsemaphore = " << value.semaphore << '\n';
  	s << "\tfence = " << value.fence << '\n';
  	s << "\tdeviceMask = " << value.deviceMask << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentCapabilitiesKHR& value)
  {
  	s << "VkDeviceGroupPresentCapabilitiesKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpresentMask = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.presentMask), DE_ARRAY_END(value.presentMask)) << '\n';
  	s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHRStr(value.modes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupPresentInfoKHR& value)
  {
  	s << "VkDeviceGroupPresentInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tswapchainCount = " << value.swapchainCount << '\n';
  	s << "\tpDeviceMasks = " << value.pDeviceMasks << '\n';
  	s << "\tmode = " << value.mode << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGroupSwapchainCreateInfoKHR& value)
  {
  	s << "VkDeviceGroupSwapchainCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmodes = " << getDeviceGroupPresentModeFlagsKHRStr(value.modes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPropertiesKHR& value)
  {
  	s << "VkDisplayPropertiesKHR = {\n";
  	s << "\tdisplay = " << value.display << '\n';
  	s << "\tdisplayName = " << getCharPtrStr(value.displayName) << '\n';
  	s << "\tphysicalDimensions = " << value.physicalDimensions << '\n';
  	s << "\tphysicalResolution = " << value.physicalResolution << '\n';
  	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
  	s << "\tplaneReorderPossible = " << value.planeReorderPossible << '\n';
  	s << "\tpersistentContent = " << value.persistentContent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayModeParametersKHR& value)
  {
  	s << "VkDisplayModeParametersKHR = {\n";
  	s << "\tvisibleRegion = " << value.visibleRegion << '\n';
  	s << "\trefreshRate = " << value.refreshRate << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayModePropertiesKHR& value)
  {
  	s << "VkDisplayModePropertiesKHR = {\n";
  	s << "\tdisplayMode = " << value.displayMode << '\n';
  	s << "\tparameters = " << value.parameters << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayModeCreateInfoKHR& value)
  {
  	s << "VkDisplayModeCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDisplayModeCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tparameters = " << value.parameters << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value)
  {
  	s << "VkDisplayPlaneCapabilitiesKHR = {\n";
  	s << "\tsupportedAlpha = " << getDisplayPlaneAlphaFlagsKHRStr(value.supportedAlpha) << '\n';
  	s << "\tminSrcPosition = " << value.minSrcPosition << '\n';
  	s << "\tmaxSrcPosition = " << value.maxSrcPosition << '\n';
  	s << "\tminSrcExtent = " << value.minSrcExtent << '\n';
  	s << "\tmaxSrcExtent = " << value.maxSrcExtent << '\n';
  	s << "\tminDstPosition = " << value.minDstPosition << '\n';
  	s << "\tmaxDstPosition = " << value.maxDstPosition << '\n';
  	s << "\tminDstExtent = " << value.minDstExtent << '\n';
  	s << "\tmaxDstExtent = " << value.maxDstExtent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPlanePropertiesKHR& value)
  {
  	s << "VkDisplayPlanePropertiesKHR = {\n";
  	s << "\tcurrentDisplay = " << value.currentDisplay << '\n';
  	s << "\tcurrentStackIndex = " << value.currentStackIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value)
  {
  	s << "VkDisplaySurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDisplaySurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tdisplayMode = " << value.displayMode << '\n';
  	s << "\tplaneIndex = " << value.planeIndex << '\n';
  	s << "\tplaneStackIndex = " << value.planeStackIndex << '\n';
  	s << "\ttransform = " << value.transform << '\n';
  	s << "\tglobalAlpha = " << value.globalAlpha << '\n';
  	s << "\talphaMode = " << value.alphaMode << '\n';
  	s << "\timageExtent = " << value.imageExtent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPresentInfoKHR& value)
  {
  	s << "VkDisplayPresentInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsrcRect = " << value.srcRect << '\n';
  	s << "\tdstRect = " << value.dstRect << '\n';
  	s << "\tpersistent = " << value.persistent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkXlibSurfaceCreateInfoKHR& value)
  {
  	s << "VkXlibSurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getXlibSurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tdpy = " << value.dpy << '\n';
  	s << "\twindow = " << value.window << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkXcbSurfaceCreateInfoKHR& value)
  {
  	s << "VkXcbSurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getXcbSurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tconnection = " << value.connection << '\n';
  	s << "\twindow = " << value.window << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkWaylandSurfaceCreateInfoKHR& value)
  {
  	s << "VkWaylandSurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getWaylandSurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tdisplay = " << value.display << '\n';
  	s << "\tsurface = " << value.surface << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMirSurfaceCreateInfoKHR& value)
  {
  	s << "VkMirSurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getMirSurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\tconnection = " << value.connection << '\n';
  	s << "\tmirSurface = " << value.mirSurface << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAndroidSurfaceCreateInfoKHR& value)
  {
  	s << "VkAndroidSurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getAndroidSurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\twindow = " << value.window << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkWin32SurfaceCreateInfoKHR& value)
  {
  	s << "VkWin32SurfaceCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getWin32SurfaceCreateFlagsKHRStr(value.flags) << '\n';
  	s << "\thinstance = " << value.hinstance << '\n';
  	s << "\thwnd = " << value.hwnd << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportMemoryWin32HandleInfoKHR& value)
  {
  	s << "VkImportMemoryWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << "\thandle = " << value.handle << '\n';
  	s << "\tname = " << getCharPtrStr(value.name) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportMemoryWin32HandleInfoKHR& value)
  {
  	s << "VkExportMemoryWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpAttributes = " << value.pAttributes << '\n';
  	s << "\tdwAccess = " << value.dwAccess << '\n';
  	s << "\tname = " << getCharPtrStr(value.name) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryWin32HandlePropertiesKHR& value)
  {
  	s << "VkMemoryWin32HandlePropertiesKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryGetWin32HandleInfoKHR& value)
  {
  	s << "VkMemoryGetWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportMemoryFdInfoKHR& value)
  {
  	s << "VkImportMemoryFdInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << "\tfd = " << value.fd << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryFdPropertiesKHR& value)
  {
  	s << "VkMemoryFdPropertiesKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryGetFdInfoKHR& value)
  {
  	s << "VkMemoryGetFdInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkWin32KeyedMutexAcquireReleaseInfoKHR& value)
  {
  	s << "VkWin32KeyedMutexAcquireReleaseInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tacquireCount = " << value.acquireCount << '\n';
  	s << "\tpAcquireSyncs = " << value.pAcquireSyncs << '\n';
  	s << "\tpAcquireKeys = " << value.pAcquireKeys << '\n';
  	s << "\tpAcquireTimeouts = " << value.pAcquireTimeouts << '\n';
  	s << "\treleaseCount = " << value.releaseCount << '\n';
  	s << "\tpReleaseSyncs = " << value.pReleaseSyncs << '\n';
  	s << "\tpReleaseKeys = " << value.pReleaseKeys << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportSemaphoreWin32HandleInfoKHR& value)
  {
  	s << "VkImportSemaphoreWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsemaphore = " << value.semaphore << '\n';
  	s << "\tflags = " << getSemaphoreImportFlagsStr(value.flags) << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << "\thandle = " << value.handle << '\n';
  	s << "\tname = " << getCharPtrStr(value.name) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportSemaphoreWin32HandleInfoKHR& value)
  {
  	s << "VkExportSemaphoreWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpAttributes = " << value.pAttributes << '\n';
  	s << "\tdwAccess = " << value.dwAccess << '\n';
  	s << "\tname = " << getCharPtrStr(value.name) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkD3D12FenceSubmitInfoKHR& value)
  {
  	s << "VkD3D12FenceSubmitInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\twaitSemaphoreValuesCount = " << value.waitSemaphoreValuesCount << '\n';
  	s << "\tpWaitSemaphoreValues = " << value.pWaitSemaphoreValues << '\n';
  	s << "\tsignalSemaphoreValuesCount = " << value.signalSemaphoreValuesCount << '\n';
  	s << "\tpSignalSemaphoreValues = " << value.pSignalSemaphoreValues << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSemaphoreGetWin32HandleInfoKHR& value)
  {
  	s << "VkSemaphoreGetWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsemaphore = " << value.semaphore << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportSemaphoreFdInfoKHR& value)
  {
  	s << "VkImportSemaphoreFdInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsemaphore = " << value.semaphore << '\n';
  	s << "\tflags = " << getSemaphoreImportFlagsStr(value.flags) << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << "\tfd = " << value.fd << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSemaphoreGetFdInfoKHR& value)
  {
  	s << "VkSemaphoreGetFdInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsemaphore = " << value.semaphore << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePushDescriptorPropertiesKHR& value)
  {
  	s << "VkPhysicalDevicePushDescriptorPropertiesKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmaxPushDescriptors = " << value.maxPushDescriptors << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRectLayerKHR& value)
  {
  	s << "VkRectLayerKHR = {\n";
  	s << "\toffset = " << value.offset << '\n';
  	s << "\textent = " << value.extent << '\n';
  	s << "\tlayer = " << value.layer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPresentRegionKHR& value)
  {
  	s << "VkPresentRegionKHR = {\n";
  	s << "\trectangleCount = " << value.rectangleCount << '\n';
  	s << "\tpRectangles = " << value.pRectangles << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPresentRegionsKHR& value)
  {
  	s << "VkPresentRegionsKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tswapchainCount = " << value.swapchainCount << '\n';
  	s << "\tpRegions = " << value.pRegions << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSharedPresentSurfaceCapabilitiesKHR& value)
  {
  	s << "VkSharedPresentSurfaceCapabilitiesKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsharedPresentSupportedUsageFlags = " << getImageUsageFlagsStr(value.sharedPresentSupportedUsageFlags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportFenceWin32HandleInfoKHR& value)
  {
  	s << "VkImportFenceWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tfence = " << value.fence << '\n';
  	s << "\tflags = " << getFenceImportFlagsStr(value.flags) << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << "\thandle = " << value.handle << '\n';
  	s << "\tname = " << getCharPtrStr(value.name) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportFenceWin32HandleInfoKHR& value)
  {
  	s << "VkExportFenceWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpAttributes = " << value.pAttributes << '\n';
  	s << "\tdwAccess = " << value.dwAccess << '\n';
  	s << "\tname = " << getCharPtrStr(value.name) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkFenceGetWin32HandleInfoKHR& value)
  {
  	s << "VkFenceGetWin32HandleInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tfence = " << value.fence << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportFenceFdInfoKHR& value)
  {
  	s << "VkImportFenceFdInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tfence = " << value.fence << '\n';
  	s << "\tflags = " << getFenceImportFlagsStr(value.flags) << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << "\tfd = " << value.fd << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkFenceGetFdInfoKHR& value)
  {
  	s << "VkFenceGetFdInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tfence = " << value.fence << '\n';
  	s << "\thandleType = " << value.handleType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSurfaceInfo2KHR& value)
  {
  	s << "VkPhysicalDeviceSurfaceInfo2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsurface = " << value.surface << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2KHR& value)
  {
  	s << "VkSurfaceCapabilities2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsurfaceCapabilities = " << value.surfaceCapabilities << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSurfaceFormat2KHR& value)
  {
  	s << "VkSurfaceFormat2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsurfaceFormat = " << value.surfaceFormat << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayProperties2KHR& value)
  {
  	s << "VkDisplayProperties2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdisplayProperties = " << value.displayProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneProperties2KHR& value)
  {
  	s << "VkDisplayPlaneProperties2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdisplayPlaneProperties = " << value.displayPlaneProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayModeProperties2KHR& value)
  {
  	s << "VkDisplayModeProperties2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdisplayModeProperties = " << value.displayModeProperties << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneInfo2KHR& value)
  {
  	s << "VkDisplayPlaneInfo2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmode = " << value.mode << '\n';
  	s << "\tplaneIndex = " << value.planeIndex << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilities2KHR& value)
  {
  	s << "VkDisplayPlaneCapabilities2KHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tcapabilities = " << value.capabilities << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImageFormatListCreateInfoKHR& value)
  {
  	s << "VkImageFormatListCreateInfoKHR = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tviewFormatCount = " << value.viewFormatCount << '\n';
  	s << "\tpViewFormats = " << value.pViewFormats << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value)
  {
  	s << "VkDebugReportCallbackCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getDebugReportFlagsEXTStr(value.flags) << '\n';
  	s << "\tpfnCallback = " << value.pfnCallback << '\n';
  	s << "\tpUserData = " << value.pUserData << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateRasterizationOrderAMD& value)
  {
  	s << "VkPipelineRasterizationStateRasterizationOrderAMD = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\trasterizationOrder = " << value.rasterizationOrder << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDebugMarkerObjectNameInfoEXT& value)
  {
  	s << "VkDebugMarkerObjectNameInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tobjectType = " << value.objectType << '\n';
  	s << "\tobject = " << value.object << '\n';
  	s << "\tpObjectName = " << getCharPtrStr(value.pObjectName) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDebugMarkerObjectTagInfoEXT& value)
  {
  	s << "VkDebugMarkerObjectTagInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tobjectType = " << value.objectType << '\n';
  	s << "\tobject = " << value.object << '\n';
  	s << "\ttagName = " << value.tagName << '\n';
  	s << "\ttagSize = " << value.tagSize << '\n';
  	s << "\tpTag = " << value.pTag << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDebugMarkerMarkerInfoEXT& value)
  {
  	s << "VkDebugMarkerMarkerInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpMarkerName = " << getCharPtrStr(value.pMarkerName) << '\n';
  	s << "\tcolor = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.color), DE_ARRAY_END(value.color)) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationImageCreateInfoNV& value)
  {
  	s << "VkDedicatedAllocationImageCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdedicatedAllocation = " << value.dedicatedAllocation << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationBufferCreateInfoNV& value)
  {
  	s << "VkDedicatedAllocationBufferCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdedicatedAllocation = " << value.dedicatedAllocation << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationMemoryAllocateInfoNV& value)
  {
  	s << "VkDedicatedAllocationMemoryAllocateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\timage = " << value.image << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkTextureLODGatherFormatPropertiesAMD& value)
  {
  	s << "VkTextureLODGatherFormatPropertiesAMD = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsupportsTextureGatherLODBiasAMD = " << value.supportsTextureGatherLODBiasAMD << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalImageFormatPropertiesNV& value)
  {
  	s << "VkExternalImageFormatPropertiesNV = {\n";
  	s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
  	s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsNVStr(value.externalMemoryFeatures) << '\n';
  	s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.exportFromImportedHandleTypes) << '\n';
  	s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.compatibleHandleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalMemoryImageCreateInfoNV& value)
  {
  	s << "VkExternalMemoryImageCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfoNV& value)
  {
  	s << "VkExportMemoryAllocateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleTypes) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportMemoryWin32HandleInfoNV& value)
  {
  	s << "VkImportMemoryWin32HandleInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\thandleType = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleType) << '\n';
  	s << "\thandle = " << value.handle << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExportMemoryWin32HandleInfoNV& value)
  {
  	s << "VkExportMemoryWin32HandleInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpAttributes = " << value.pAttributes << '\n';
  	s << "\tdwAccess = " << value.dwAccess << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkWin32KeyedMutexAcquireReleaseInfoNV& value)
  {
  	s << "VkWin32KeyedMutexAcquireReleaseInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tacquireCount = " << value.acquireCount << '\n';
  	s << "\tpAcquireSyncs = " << value.pAcquireSyncs << '\n';
  	s << "\tpAcquireKeys = " << value.pAcquireKeys << '\n';
  	s << "\tpAcquireTimeoutMilliseconds = " << value.pAcquireTimeoutMilliseconds << '\n';
  	s << "\treleaseCount = " << value.releaseCount << '\n';
  	s << "\tpReleaseSyncs = " << value.pReleaseSyncs << '\n';
  	s << "\tpReleaseKeys = " << value.pReleaseKeys << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkValidationFlagsEXT& value)
  {
  	s << "VkValidationFlagsEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdisabledValidationCheckCount = " << value.disabledValidationCheckCount << '\n';
  	s << "\tpDisabledValidationChecks = " << value.pDisabledValidationChecks << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkViSurfaceCreateInfoNN& value)
  {
  	s << "VkViSurfaceCreateInfoNN = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getViSurfaceCreateFlagsNNStr(value.flags) << '\n';
  	s << "\twindow = " << value.window << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGeneratedCommandsFeaturesNVX& value)
  {
  	s << "VkDeviceGeneratedCommandsFeaturesNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tcomputeBindingPointSupport = " << value.computeBindingPointSupport << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceGeneratedCommandsLimitsNVX& value)
  {
  	s << "VkDeviceGeneratedCommandsLimitsNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmaxIndirectCommandsLayoutTokenCount = " << value.maxIndirectCommandsLayoutTokenCount << '\n';
  	s << "\tmaxObjectEntryCounts = " << value.maxObjectEntryCounts << '\n';
  	s << "\tminSequenceCountBufferOffsetAlignment = " << value.minSequenceCountBufferOffsetAlignment << '\n';
  	s << "\tminSequenceIndexBufferOffsetAlignment = " << value.minSequenceIndexBufferOffsetAlignment << '\n';
  	s << "\tminCommandsTokenBufferOffsetAlignment = " << value.minCommandsTokenBufferOffsetAlignment << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsTokenNVX& value)
  {
  	s << "VkIndirectCommandsTokenNVX = {\n";
  	s << "\ttokenType = " << value.tokenType << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\toffset = " << value.offset << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsLayoutTokenNVX& value)
  {
  	s << "VkIndirectCommandsLayoutTokenNVX = {\n";
  	s << "\ttokenType = " << value.tokenType << '\n';
  	s << "\tbindingUnit = " << value.bindingUnit << '\n';
  	s << "\tdynamicCount = " << value.dynamicCount << '\n';
  	s << "\tdivisor = " << value.divisor << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsLayoutCreateInfoNVX& value)
  {
  	s << "VkIndirectCommandsLayoutCreateInfoNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
  	s << "\tflags = " << getIndirectCommandsLayoutUsageFlagsNVXStr(value.flags) << '\n';
  	s << "\ttokenCount = " << value.tokenCount << '\n';
  	s << "\tpTokens = " << value.pTokens << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCmdProcessCommandsInfoNVX& value)
  {
  	s << "VkCmdProcessCommandsInfoNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tobjectTable = " << value.objectTable << '\n';
  	s << "\tindirectCommandsLayout = " << value.indirectCommandsLayout << '\n';
  	s << "\tindirectCommandsTokenCount = " << value.indirectCommandsTokenCount << '\n';
  	s << "\tpIndirectCommandsTokens = " << value.pIndirectCommandsTokens << '\n';
  	s << "\tmaxSequencesCount = " << value.maxSequencesCount << '\n';
  	s << "\ttargetCommandBuffer = " << value.targetCommandBuffer << '\n';
  	s << "\tsequencesCountBuffer = " << value.sequencesCountBuffer << '\n';
  	s << "\tsequencesCountOffset = " << value.sequencesCountOffset << '\n';
  	s << "\tsequencesIndexBuffer = " << value.sequencesIndexBuffer << '\n';
  	s << "\tsequencesIndexOffset = " << value.sequencesIndexOffset << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkCmdReserveSpaceForCommandsInfoNVX& value)
  {
  	s << "VkCmdReserveSpaceForCommandsInfoNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tobjectTable = " << value.objectTable << '\n';
  	s << "\tindirectCommandsLayout = " << value.indirectCommandsLayout << '\n';
  	s << "\tmaxSequencesCount = " << value.maxSequencesCount << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTableCreateInfoNVX& value)
  {
  	s << "VkObjectTableCreateInfoNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tobjectCount = " << value.objectCount << '\n';
  	s << "\tpObjectEntryTypes = " << value.pObjectEntryTypes << '\n';
  	s << "\tpObjectEntryCounts = " << value.pObjectEntryCounts << '\n';
  	s << "\tpObjectEntryUsageFlags = " << value.pObjectEntryUsageFlags << '\n';
  	s << "\tmaxUniformBuffersPerDescriptor = " << value.maxUniformBuffersPerDescriptor << '\n';
  	s << "\tmaxStorageBuffersPerDescriptor = " << value.maxStorageBuffersPerDescriptor << '\n';
  	s << "\tmaxStorageImagesPerDescriptor = " << value.maxStorageImagesPerDescriptor << '\n';
  	s << "\tmaxSampledImagesPerDescriptor = " << value.maxSampledImagesPerDescriptor << '\n';
  	s << "\tmaxPipelineLayouts = " << value.maxPipelineLayouts << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTableEntryNVX& value)
  {
  	s << "VkObjectTableEntryNVX = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTablePipelineEntryNVX& value)
  {
  	s << "VkObjectTablePipelineEntryNVX = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
  	s << "\tpipeline = " << value.pipeline << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTableDescriptorSetEntryNVX& value)
  {
  	s << "VkObjectTableDescriptorSetEntryNVX = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
  	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
  	s << "\tdescriptorSet = " << value.descriptorSet << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTableVertexBufferEntryNVX& value)
  {
  	s << "VkObjectTableVertexBufferEntryNVX = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTableIndexBufferEntryNVX& value)
  {
  	s << "VkObjectTableIndexBufferEntryNVX = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << "\tindexType = " << value.indexType << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkObjectTablePushConstantEntryNVX& value)
  {
  	s << "VkObjectTablePushConstantEntryNVX = {\n";
  	s << "\ttype = " << value.type << '\n';
  	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
  	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
  	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkViewportWScalingNV& value)
  {
  	s << "VkViewportWScalingNV = {\n";
  	s << "\txcoeff = " << value.xcoeff << '\n';
  	s << "\tycoeff = " << value.ycoeff << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineViewportWScalingStateCreateInfoNV& value)
  {
  	s << "VkPipelineViewportWScalingStateCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tviewportWScalingEnable = " << value.viewportWScalingEnable << '\n';
  	s << "\tviewportCount = " << value.viewportCount << '\n';
  	s << "\tpViewportWScalings = " << value.pViewportWScalings << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2EXT& value)
  {
  	s << "VkSurfaceCapabilities2EXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tminImageCount = " << value.minImageCount << '\n';
  	s << "\tmaxImageCount = " << value.maxImageCount << '\n';
  	s << "\tcurrentExtent = " << value.currentExtent << '\n';
  	s << "\tminImageExtent = " << value.minImageExtent << '\n';
  	s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
  	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
  	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
  	s << "\tcurrentTransform = " << value.currentTransform << '\n';
  	s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
  	s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
  	s << "\tsupportedSurfaceCounters = " << getSurfaceCounterFlagsEXTStr(value.supportedSurfaceCounters) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayPowerInfoEXT& value)
  {
  	s << "VkDisplayPowerInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tpowerState = " << value.powerState << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDeviceEventInfoEXT& value)
  {
  	s << "VkDeviceEventInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdeviceEvent = " << value.deviceEvent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkDisplayEventInfoEXT& value)
  {
  	s << "VkDisplayEventInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdisplayEvent = " << value.displayEvent << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSwapchainCounterCreateInfoEXT& value)
  {
  	s << "VkSwapchainCounterCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsurfaceCounters = " << getSurfaceCounterFlagsEXTStr(value.surfaceCounters) << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRefreshCycleDurationGOOGLE& value)
  {
  	s << "VkRefreshCycleDurationGOOGLE = {\n";
  	s << "\trefreshDuration = " << value.refreshDuration << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPastPresentationTimingGOOGLE& value)
  {
  	s << "VkPastPresentationTimingGOOGLE = {\n";
  	s << "\tpresentID = " << value.presentID << '\n';
  	s << "\tdesiredPresentTime = " << value.desiredPresentTime << '\n';
  	s << "\tactualPresentTime = " << value.actualPresentTime << '\n';
  	s << "\tearliestPresentTime = " << value.earliestPresentTime << '\n';
  	s << "\tpresentMargin = " << value.presentMargin << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPresentTimeGOOGLE& value)
  {
  	s << "VkPresentTimeGOOGLE = {\n";
  	s << "\tpresentID = " << value.presentID << '\n';
  	s << "\tdesiredPresentTime = " << value.desiredPresentTime << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPresentTimesInfoGOOGLE& value)
  {
  	s << "VkPresentTimesInfoGOOGLE = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tswapchainCount = " << value.swapchainCount << '\n';
  	s << "\tpTimes = " << value.pTimes << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX& value)
  {
  	s << "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tperViewPositionAllComponents = " << value.perViewPositionAllComponents << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkViewportSwizzleNV& value)
  {
  	s << "VkViewportSwizzleNV = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << "\tz = " << value.z << '\n';
  	s << "\tw = " << value.w << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineViewportSwizzleStateCreateInfoNV& value)
  {
  	s << "VkPipelineViewportSwizzleStateCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineViewportSwizzleStateCreateFlagsNVStr(value.flags) << '\n';
  	s << "\tviewportCount = " << value.viewportCount << '\n';
  	s << "\tpViewportSwizzles = " << value.pViewportSwizzles << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceDiscardRectanglePropertiesEXT& value)
  {
  	s << "VkPhysicalDeviceDiscardRectanglePropertiesEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmaxDiscardRectangles = " << value.maxDiscardRectangles << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineDiscardRectangleStateCreateInfoEXT& value)
  {
  	s << "VkPipelineDiscardRectangleStateCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineDiscardRectangleStateCreateFlagsEXTStr(value.flags) << '\n';
  	s << "\tdiscardRectangleMode = " << value.discardRectangleMode << '\n';
  	s << "\tdiscardRectangleCount = " << value.discardRectangleCount << '\n';
  	s << "\tpDiscardRectangles = " << value.pDiscardRectangles << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkXYColorEXT& value)
  {
  	s << "VkXYColorEXT = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkHdrMetadataEXT& value)
  {
  	s << "VkHdrMetadataEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tdisplayPrimaryRed = " << value.displayPrimaryRed << '\n';
  	s << "\tdisplayPrimaryGreen = " << value.displayPrimaryGreen << '\n';
  	s << "\tdisplayPrimaryBlue = " << value.displayPrimaryBlue << '\n';
  	s << "\twhitePoint = " << value.whitePoint << '\n';
  	s << "\tmaxLuminance = " << value.maxLuminance << '\n';
  	s << "\tminLuminance = " << value.minLuminance << '\n';
  	s << "\tmaxContentLightLevel = " << value.maxContentLightLevel << '\n';
  	s << "\tmaxFrameAverageLightLevel = " << value.maxFrameAverageLightLevel << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkIOSSurfaceCreateInfoMVK& value)
  {
  	s << "VkIOSSurfaceCreateInfoMVK = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getIOSSurfaceCreateFlagsMVKStr(value.flags) << '\n';
  	s << "\tpView = " << value.pView << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMacOSSurfaceCreateInfoMVK& value)
  {
  	s << "VkMacOSSurfaceCreateInfoMVK = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getMacOSSurfaceCreateFlagsMVKStr(value.flags) << '\n';
  	s << "\tpView = " << value.pView << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSamplerReductionModeCreateInfoEXT& value)
  {
  	s << "VkSamplerReductionModeCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\treductionMode = " << value.reductionMode << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT& value)
  {
  	s << "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tfilterMinmaxSingleComponentFormats = " << value.filterMinmaxSingleComponentFormats << '\n';
  	s << "\tfilterMinmaxImageComponentMapping = " << value.filterMinmaxImageComponentMapping << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSampleLocationEXT& value)
  {
  	s << "VkSampleLocationEXT = {\n";
  	s << "\tx = " << value.x << '\n';
  	s << "\ty = " << value.y << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSampleLocationsInfoEXT& value)
  {
  	s << "VkSampleLocationsInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsampleLocationsPerPixel = " << value.sampleLocationsPerPixel << '\n';
  	s << "\tsampleLocationGridSize = " << value.sampleLocationGridSize << '\n';
  	s << "\tsampleLocationsCount = " << value.sampleLocationsCount << '\n';
  	s << "\tpSampleLocations = " << value.pSampleLocations << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAttachmentSampleLocationsEXT& value)
  {
  	s << "VkAttachmentSampleLocationsEXT = {\n";
  	s << "\tattachmentIndex = " << value.attachmentIndex << '\n';
  	s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkSubpassSampleLocationsEXT& value)
  {
  	s << "VkSubpassSampleLocationsEXT = {\n";
  	s << "\tsubpassIndex = " << value.subpassIndex << '\n';
  	s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkRenderPassSampleLocationsBeginInfoEXT& value)
  {
  	s << "VkRenderPassSampleLocationsBeginInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tattachmentInitialSampleLocationsCount = " << value.attachmentInitialSampleLocationsCount << '\n';
  	s << "\tpAttachmentInitialSampleLocations = " << value.pAttachmentInitialSampleLocations << '\n';
  	s << "\tpostSubpassSampleLocationsCount = " << value.postSubpassSampleLocationsCount << '\n';
  	s << "\tpSubpassSampleLocations = " << value.pSubpassSampleLocations << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineSampleLocationsStateCreateInfoEXT& value)
  {
  	s << "VkPipelineSampleLocationsStateCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsampleLocationsEnable = " << value.sampleLocationsEnable << '\n';
  	s << "\tsampleLocationsInfo = " << value.sampleLocationsInfo << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSampleLocationsPropertiesEXT& value)
  {
  	s << "VkPhysicalDeviceSampleLocationsPropertiesEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsampleLocationSampleCounts = " << getSampleCountFlagsStr(value.sampleLocationSampleCounts) << '\n';
  	s << "\tmaxSampleLocationGridSize = " << value.maxSampleLocationGridSize << '\n';
  	s << "\tsampleLocationCoordinateRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.sampleLocationCoordinateRange), DE_ARRAY_END(value.sampleLocationCoordinateRange)) << '\n';
  	s << "\tsampleLocationSubPixelBits = " << value.sampleLocationSubPixelBits << '\n';
  	s << "\tvariableSampleLocations = " << value.variableSampleLocations << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMultisamplePropertiesEXT& value)
  {
  	s << "VkMultisamplePropertiesEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmaxSampleLocationGridSize = " << value.maxSampleLocationGridSize << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT& value)
  {
  	s << "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tadvancedBlendCoherentOperations = " << value.advancedBlendCoherentOperations << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT& value)
  {
  	s << "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tadvancedBlendMaxColorAttachments = " << value.advancedBlendMaxColorAttachments << '\n';
  	s << "\tadvancedBlendIndependentBlend = " << value.advancedBlendIndependentBlend << '\n';
  	s << "\tadvancedBlendNonPremultipliedSrcColor = " << value.advancedBlendNonPremultipliedSrcColor << '\n';
  	s << "\tadvancedBlendNonPremultipliedDstColor = " << value.advancedBlendNonPremultipliedDstColor << '\n';
  	s << "\tadvancedBlendCorrelatedOverlap = " << value.advancedBlendCorrelatedOverlap << '\n';
  	s << "\tadvancedBlendAllOperations = " << value.advancedBlendAllOperations << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAdvancedStateCreateInfoEXT& value)
  {
  	s << "VkPipelineColorBlendAdvancedStateCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tsrcPremultiplied = " << value.srcPremultiplied << '\n';
  	s << "\tdstPremultiplied = " << value.dstPremultiplied << '\n';
  	s << "\tblendOverlap = " << value.blendOverlap << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineCoverageToColorStateCreateInfoNV& value)
  {
  	s << "VkPipelineCoverageToColorStateCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineCoverageToColorStateCreateFlagsNVStr(value.flags) << '\n';
  	s << "\tcoverageToColorEnable = " << value.coverageToColorEnable << '\n';
  	s << "\tcoverageToColorLocation = " << value.coverageToColorLocation << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkPipelineCoverageModulationStateCreateInfoNV& value)
  {
  	s << "VkPipelineCoverageModulationStateCreateInfoNV = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getPipelineCoverageModulationStateCreateFlagsNVStr(value.flags) << '\n';
  	s << "\tcoverageModulationMode = " << value.coverageModulationMode << '\n';
  	s << "\tcoverageModulationTableEnable = " << value.coverageModulationTableEnable << '\n';
  	s << "\tcoverageModulationTableCount = " << value.coverageModulationTableCount << '\n';
  	s << "\tpCoverageModulationTable = " << value.pCoverageModulationTable << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkValidationCacheCreateInfoEXT& value)
  {
  	s << "VkValidationCacheCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tflags = " << getValidationCacheCreateFlagsEXTStr(value.flags) << '\n';
  	s << "\tinitialDataSize = " << value.initialDataSize << '\n';
  	s << "\tpInitialData = " << value.pInitialData << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkShaderModuleValidationCacheCreateInfoEXT& value)
  {
  	s << "VkShaderModuleValidationCacheCreateInfoEXT = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tvalidationCache = " << value.validationCache << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferUsageANDROID& value)
  {
  	s << "VkAndroidHardwareBufferUsageANDROID = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tandroidHardwareBufferUsage = " << value.androidHardwareBufferUsage << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferPropertiesANDROID& value)
  {
  	s << "VkAndroidHardwareBufferPropertiesANDROID = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tallocationSize = " << value.allocationSize << '\n';
  	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkAndroidHardwareBufferFormatPropertiesANDROID& value)
  {
  	s << "VkAndroidHardwareBufferFormatPropertiesANDROID = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tformat = " << value.format << '\n';
  	s << "\texternalFormat = " << value.externalFormat << '\n';
  	s << "\tformatFeatures = " << getFormatFeatureFlagsStr(value.formatFeatures) << '\n';
  	s << "\tsuggestedYcbcrModel = " << value.suggestedYcbcrModel << '\n';
  	s << "\tsuggestedYcbcrRange = " << value.suggestedYcbcrRange << '\n';
  	s << "\tsuggestedXChromaOffset = " << value.suggestedXChromaOffset << '\n';
  	s << "\tsuggestedYChromaOffset = " << value.suggestedYChromaOffset << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkImportAndroidHardwareBufferInfoANDROID& value)
  {
  	s << "VkImportAndroidHardwareBufferInfoANDROID = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tbuffer = " << value.buffer << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkMemoryGetAndroidHardwareBufferInfoANDROID& value)
  {
  	s << "VkMemoryGetAndroidHardwareBufferInfoANDROID = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\tmemory = " << value.memory << '\n';
  	s << '}';
  	return s;
  }
  
  std::ostream& operator<< (std::ostream& s, const VkExternalFormatANDROID& value)
  {
  	s << "VkExternalFormatANDROID = {\n";
  	s << "\tsType = " << value.sType << '\n';
  	s << "\tpNext = " << value.pNext << '\n';
  	s << "\texternalFormat = " << value.externalFormat << '\n';
  	s << '}';
  	return s;
  }
  