1/* WARNING: This is auto-generated file. Do not modify, since changes will
2 * be lost! Modify the generating script instead.
3 */
4template<> const char*	getTypeName<VkInstance>						(void) { return "VkInstance";						}
5template<> const char*	getTypeName<VkPhysicalDevice>				(void) { return "VkPhysicalDevice";					}
6template<> const char*	getTypeName<VkDevice>						(void) { return "VkDevice";							}
7template<> const char*	getTypeName<VkQueue>						(void) { return "VkQueue";							}
8template<> const char*	getTypeName<VkSemaphore>					(void) { return "VkSemaphore";						}
9template<> const char*	getTypeName<VkCommandBuffer>				(void) { return "VkCommandBuffer";					}
10template<> const char*	getTypeName<VkFence>						(void) { return "VkFence";							}
11template<> const char*	getTypeName<VkDeviceMemory>					(void) { return "VkDeviceMemory";					}
12template<> const char*	getTypeName<VkBuffer>						(void) { return "VkBuffer";							}
13template<> const char*	getTypeName<VkImage>						(void) { return "VkImage";							}
14template<> const char*	getTypeName<VkEvent>						(void) { return "VkEvent";							}
15template<> const char*	getTypeName<VkQueryPool>					(void) { return "VkQueryPool";						}
16template<> const char*	getTypeName<VkBufferView>					(void) { return "VkBufferView";						}
17template<> const char*	getTypeName<VkImageView>					(void) { return "VkImageView";						}
18template<> const char*	getTypeName<VkShaderModule>					(void) { return "VkShaderModule";					}
19template<> const char*	getTypeName<VkPipelineCache>				(void) { return "VkPipelineCache";					}
20template<> const char*	getTypeName<VkPipelineLayout>				(void) { return "VkPipelineLayout";					}
21template<> const char*	getTypeName<VkRenderPass>					(void) { return "VkRenderPass";						}
22template<> const char*	getTypeName<VkPipeline>						(void) { return "VkPipeline";						}
23template<> const char*	getTypeName<VkDescriptorSetLayout>			(void) { return "VkDescriptorSetLayout";			}
24template<> const char*	getTypeName<VkSampler>						(void) { return "VkSampler";						}
25template<> const char*	getTypeName<VkDescriptorPool>				(void) { return "VkDescriptorPool";					}
26template<> const char*	getTypeName<VkDescriptorSet>				(void) { return "VkDescriptorSet";					}
27template<> const char*	getTypeName<VkFramebuffer>					(void) { return "VkFramebuffer";					}
28template<> const char*	getTypeName<VkCommandPool>					(void) { return "VkCommandPool";					}
29template<> const char*	getTypeName<VkSurfaceKHR>					(void) { return "VkSurfaceKHR";						}
30template<> const char*	getTypeName<VkSwapchainKHR>					(void) { return "VkSwapchainKHR";					}
31template<> const char*	getTypeName<VkDisplayKHR>					(void) { return "VkDisplayKHR";						}
32template<> const char*	getTypeName<VkDisplayModeKHR>				(void) { return "VkDisplayModeKHR";					}
33template<> const char*	getTypeName<VkDebugReportCallbackEXT>		(void) { return "VkDebugReportCallbackEXT";			}
34template<> const char*	getTypeName<VkObjectTableNVX>				(void) { return "VkObjectTableNVX";					}
35template<> const char*	getTypeName<VkIndirectCommandsLayoutNVX>	(void) { return "VkIndirectCommandsLayoutNVX";		}
36template<> const char*	getTypeName<VkDescriptorUpdateTemplateKHR>	(void) { return "VkDescriptorUpdateTemplateKHR";	}
37
38namespace pt
39{
40std::ostream& operator<< (std::ostream& s, XlibDisplayPtr				v) { return s << tcu::toHex(v.internal); }
41std::ostream& operator<< (std::ostream& s, XlibWindow					v) { return s << tcu::toHex(v.internal); }
42std::ostream& operator<< (std::ostream& s, XlibVisualID					v) { return s << tcu::toHex(v.internal); }
43std::ostream& operator<< (std::ostream& s, XcbConnectionPtr				v) { return s << tcu::toHex(v.internal); }
44std::ostream& operator<< (std::ostream& s, XcbWindow					v) { return s << tcu::toHex(v.internal); }
45std::ostream& operator<< (std::ostream& s, XcbVisualid					v) { return s << tcu::toHex(v.internal); }
46std::ostream& operator<< (std::ostream& s, WaylandDisplayPtr			v) { return s << tcu::toHex(v.internal); }
47std::ostream& operator<< (std::ostream& s, WaylandSurfacePtr			v) { return s << tcu::toHex(v.internal); }
48std::ostream& operator<< (std::ostream& s, MirConnectionPtr				v) { return s << tcu::toHex(v.internal); }
49std::ostream& operator<< (std::ostream& s, MirSurfacePtr				v) { return s << tcu::toHex(v.internal); }
50std::ostream& operator<< (std::ostream& s, AndroidNativeWindowPtr		v) { return s << tcu::toHex(v.internal); }
51std::ostream& operator<< (std::ostream& s, Win32InstanceHandle			v) { return s << tcu::toHex(v.internal); }
52std::ostream& operator<< (std::ostream& s, Win32WindowHandle			v) { return s << tcu::toHex(v.internal); }
53std::ostream& operator<< (std::ostream& s, Win32Handle					v) { return s << tcu::toHex(v.internal); }
54std::ostream& operator<< (std::ostream& s, Win32SecurityAttributesPtr	v) { return s << tcu::toHex(v.internal); }
55}
56
57const char* getPipelineCacheHeaderVersionName (VkPipelineCacheHeaderVersion value)
58{
59	switch (value)
60	{
61		case VK_PIPELINE_CACHE_HEADER_VERSION_ONE:	return "VK_PIPELINE_CACHE_HEADER_VERSION_ONE";
62		default:									return DE_NULL;
63	}
64}
65
66const char* getResultName (VkResult value)
67{
68	switch (value)
69	{
70		case VK_SUCCESS:						return "VK_SUCCESS";
71		case VK_NOT_READY:						return "VK_NOT_READY";
72		case VK_TIMEOUT:						return "VK_TIMEOUT";
73		case VK_EVENT_SET:						return "VK_EVENT_SET";
74		case VK_EVENT_RESET:					return "VK_EVENT_RESET";
75		case VK_INCOMPLETE:						return "VK_INCOMPLETE";
76		case VK_ERROR_OUT_OF_HOST_MEMORY:		return "VK_ERROR_OUT_OF_HOST_MEMORY";
77		case VK_ERROR_OUT_OF_DEVICE_MEMORY:		return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
78		case VK_ERROR_INITIALIZATION_FAILED:	return "VK_ERROR_INITIALIZATION_FAILED";
79		case VK_ERROR_DEVICE_LOST:				return "VK_ERROR_DEVICE_LOST";
80		case VK_ERROR_MEMORY_MAP_FAILED:		return "VK_ERROR_MEMORY_MAP_FAILED";
81		case VK_ERROR_LAYER_NOT_PRESENT:		return "VK_ERROR_LAYER_NOT_PRESENT";
82		case VK_ERROR_EXTENSION_NOT_PRESENT:	return "VK_ERROR_EXTENSION_NOT_PRESENT";
83		case VK_ERROR_FEATURE_NOT_PRESENT:		return "VK_ERROR_FEATURE_NOT_PRESENT";
84		case VK_ERROR_INCOMPATIBLE_DRIVER:		return "VK_ERROR_INCOMPATIBLE_DRIVER";
85		case VK_ERROR_TOO_MANY_OBJECTS:			return "VK_ERROR_TOO_MANY_OBJECTS";
86		case VK_ERROR_FORMAT_NOT_SUPPORTED:		return "VK_ERROR_FORMAT_NOT_SUPPORTED";
87		case VK_ERROR_FRAGMENTED_POOL:			return "VK_ERROR_FRAGMENTED_POOL";
88		case VK_ERROR_SURFACE_LOST_KHR:			return "VK_ERROR_SURFACE_LOST_KHR";
89		case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:	return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
90		case VK_SUBOPTIMAL_KHR:					return "VK_SUBOPTIMAL_KHR";
91		case VK_ERROR_OUT_OF_DATE_KHR:			return "VK_ERROR_OUT_OF_DATE_KHR";
92		case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR:	return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
93		case VK_ERROR_VALIDATION_FAILED_EXT:	return "VK_ERROR_VALIDATION_FAILED_EXT";
94		case VK_ERROR_INVALID_SHADER_NV:		return "VK_ERROR_INVALID_SHADER_NV";
95		case VK_ERROR_OUT_OF_POOL_MEMORY_KHR:	return "VK_ERROR_OUT_OF_POOL_MEMORY_KHR";
96		default:								return DE_NULL;
97	}
98}
99
100const char* getStructureTypeName (VkStructureType value)
101{
102	switch (value)
103	{
104		case VK_STRUCTURE_TYPE_APPLICATION_INFO:										return "VK_STRUCTURE_TYPE_APPLICATION_INFO";
105		case VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO";
106		case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO";
107		case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO";
108		case VK_STRUCTURE_TYPE_SUBMIT_INFO:												return "VK_STRUCTURE_TYPE_SUBMIT_INFO";
109		case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:									return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO";
110		case VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE:										return "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE";
111		case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:										return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO";
112		case VK_STRUCTURE_TYPE_FENCE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO";
113		case VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO:									return "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO";
114		case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO:										return "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO";
115		case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:									return "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO";
116		case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:										return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO";
117		case VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO:									return "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO";
118		case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO:										return "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO";
119		case VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO:									return "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO";
120		case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO";
121		case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO";
122		case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO";
123		case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO:					return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO";
124		case VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO:				return "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO";
125		case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO:					return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO";
126		case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO";
127		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO:				return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO";
128		case VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO:					return "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO";
129		case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO:				return "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO";
130		case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO:					return "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO";
131		case VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO:						return "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO";
132		case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO";
133		case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:							return "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO";
134		case VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO:								return "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO";
135		case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO:										return "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO";
136		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO:						return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO";
137		case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO:								return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO";
138		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO:							return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO";
139		case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:									return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET";
140		case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:										return "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET";
141		case VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO:									return "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO";
142		case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:									return "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO";
143		case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:								return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO";
144		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO:							return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO";
145		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:							return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO";
146		case VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO:								return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO";
147		case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:									return "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO";
148		case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:									return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER";
149		case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:									return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER";
150		case VK_STRUCTURE_TYPE_MEMORY_BARRIER:											return "VK_STRUCTURE_TYPE_MEMORY_BARRIER";
151		case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO";
152		case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO:								return "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO";
153		case VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR";
154		case VK_STRUCTURE_TYPE_PRESENT_INFO_KHR:										return "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR";
155		case VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR";
156		case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR";
157		case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:								return "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR";
158		case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR";
159		case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR";
160		case VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR";
161		case VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR:								return "VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR";
162		case VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR";
163		case VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR:							return "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR";
164		case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:					return "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT";
165		case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:	return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD";
166		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT:						return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT";
167		case VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT:						return "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT";
168		case VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT:							return "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT";
169		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV";
170		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:				return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV";
171		case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:			return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV";
172		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:					return "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV";
173		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:							return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV";
174		case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:						return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV";
175		case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:						return "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV";
176		case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:				return "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV";
177		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR:							return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR";
178		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR";
179		case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR:									return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR";
180		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR:							return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR";
181		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR";
182		case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR:							return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR";
183		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR:					return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR";
184		case VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR:					return "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR";
185		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR";
186		case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:									return "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT";
187		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:			return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR";
188		case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:										return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR";
189		case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:					return "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR";
190		case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR:				return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR";
191		case VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX:							return "VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX";
192		case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX:				return "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX";
193		case VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX:							return "VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX";
194		case VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX:					return "VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX";
195		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX:					return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX";
196		case VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX:					return "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX";
197		case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:								return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE";
198		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:						return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR";
199		case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR:								return "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR";
200		case VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR:									return "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR";
201		default:																		return DE_NULL;
202	}
203}
204
205const char* getSystemAllocationScopeName (VkSystemAllocationScope value)
206{
207	switch (value)
208	{
209		case VK_SYSTEM_ALLOCATION_SCOPE_COMMAND:	return "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND";
210		case VK_SYSTEM_ALLOCATION_SCOPE_OBJECT:		return "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT";
211		case VK_SYSTEM_ALLOCATION_SCOPE_CACHE:		return "VK_SYSTEM_ALLOCATION_SCOPE_CACHE";
212		case VK_SYSTEM_ALLOCATION_SCOPE_DEVICE:		return "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE";
213		case VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE:	return "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE";
214		default:									return DE_NULL;
215	}
216}
217
218const char* getInternalAllocationTypeName (VkInternalAllocationType value)
219{
220	switch (value)
221	{
222		case VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE:	return "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE";
223		default:										return DE_NULL;
224	}
225}
226
227const char* getFormatName (VkFormat value)
228{
229	switch (value)
230	{
231		case VK_FORMAT_UNDEFINED:					return "VK_FORMAT_UNDEFINED";
232		case VK_FORMAT_R4G4_UNORM_PACK8:			return "VK_FORMAT_R4G4_UNORM_PACK8";
233		case VK_FORMAT_R4G4B4A4_UNORM_PACK16:		return "VK_FORMAT_R4G4B4A4_UNORM_PACK16";
234		case VK_FORMAT_B4G4R4A4_UNORM_PACK16:		return "VK_FORMAT_B4G4R4A4_UNORM_PACK16";
235		case VK_FORMAT_R5G6B5_UNORM_PACK16:			return "VK_FORMAT_R5G6B5_UNORM_PACK16";
236		case VK_FORMAT_B5G6R5_UNORM_PACK16:			return "VK_FORMAT_B5G6R5_UNORM_PACK16";
237		case VK_FORMAT_R5G5B5A1_UNORM_PACK16:		return "VK_FORMAT_R5G5B5A1_UNORM_PACK16";
238		case VK_FORMAT_B5G5R5A1_UNORM_PACK16:		return "VK_FORMAT_B5G5R5A1_UNORM_PACK16";
239		case VK_FORMAT_A1R5G5B5_UNORM_PACK16:		return "VK_FORMAT_A1R5G5B5_UNORM_PACK16";
240		case VK_FORMAT_R8_UNORM:					return "VK_FORMAT_R8_UNORM";
241		case VK_FORMAT_R8_SNORM:					return "VK_FORMAT_R8_SNORM";
242		case VK_FORMAT_R8_USCALED:					return "VK_FORMAT_R8_USCALED";
243		case VK_FORMAT_R8_SSCALED:					return "VK_FORMAT_R8_SSCALED";
244		case VK_FORMAT_R8_UINT:						return "VK_FORMAT_R8_UINT";
245		case VK_FORMAT_R8_SINT:						return "VK_FORMAT_R8_SINT";
246		case VK_FORMAT_R8_SRGB:						return "VK_FORMAT_R8_SRGB";
247		case VK_FORMAT_R8G8_UNORM:					return "VK_FORMAT_R8G8_UNORM";
248		case VK_FORMAT_R8G8_SNORM:					return "VK_FORMAT_R8G8_SNORM";
249		case VK_FORMAT_R8G8_USCALED:				return "VK_FORMAT_R8G8_USCALED";
250		case VK_FORMAT_R8G8_SSCALED:				return "VK_FORMAT_R8G8_SSCALED";
251		case VK_FORMAT_R8G8_UINT:					return "VK_FORMAT_R8G8_UINT";
252		case VK_FORMAT_R8G8_SINT:					return "VK_FORMAT_R8G8_SINT";
253		case VK_FORMAT_R8G8_SRGB:					return "VK_FORMAT_R8G8_SRGB";
254		case VK_FORMAT_R8G8B8_UNORM:				return "VK_FORMAT_R8G8B8_UNORM";
255		case VK_FORMAT_R8G8B8_SNORM:				return "VK_FORMAT_R8G8B8_SNORM";
256		case VK_FORMAT_R8G8B8_USCALED:				return "VK_FORMAT_R8G8B8_USCALED";
257		case VK_FORMAT_R8G8B8_SSCALED:				return "VK_FORMAT_R8G8B8_SSCALED";
258		case VK_FORMAT_R8G8B8_UINT:					return "VK_FORMAT_R8G8B8_UINT";
259		case VK_FORMAT_R8G8B8_SINT:					return "VK_FORMAT_R8G8B8_SINT";
260		case VK_FORMAT_R8G8B8_SRGB:					return "VK_FORMAT_R8G8B8_SRGB";
261		case VK_FORMAT_B8G8R8_UNORM:				return "VK_FORMAT_B8G8R8_UNORM";
262		case VK_FORMAT_B8G8R8_SNORM:				return "VK_FORMAT_B8G8R8_SNORM";
263		case VK_FORMAT_B8G8R8_USCALED:				return "VK_FORMAT_B8G8R8_USCALED";
264		case VK_FORMAT_B8G8R8_SSCALED:				return "VK_FORMAT_B8G8R8_SSCALED";
265		case VK_FORMAT_B8G8R8_UINT:					return "VK_FORMAT_B8G8R8_UINT";
266		case VK_FORMAT_B8G8R8_SINT:					return "VK_FORMAT_B8G8R8_SINT";
267		case VK_FORMAT_B8G8R8_SRGB:					return "VK_FORMAT_B8G8R8_SRGB";
268		case VK_FORMAT_R8G8B8A8_UNORM:				return "VK_FORMAT_R8G8B8A8_UNORM";
269		case VK_FORMAT_R8G8B8A8_SNORM:				return "VK_FORMAT_R8G8B8A8_SNORM";
270		case VK_FORMAT_R8G8B8A8_USCALED:			return "VK_FORMAT_R8G8B8A8_USCALED";
271		case VK_FORMAT_R8G8B8A8_SSCALED:			return "VK_FORMAT_R8G8B8A8_SSCALED";
272		case VK_FORMAT_R8G8B8A8_UINT:				return "VK_FORMAT_R8G8B8A8_UINT";
273		case VK_FORMAT_R8G8B8A8_SINT:				return "VK_FORMAT_R8G8B8A8_SINT";
274		case VK_FORMAT_R8G8B8A8_SRGB:				return "VK_FORMAT_R8G8B8A8_SRGB";
275		case VK_FORMAT_B8G8R8A8_UNORM:				return "VK_FORMAT_B8G8R8A8_UNORM";
276		case VK_FORMAT_B8G8R8A8_SNORM:				return "VK_FORMAT_B8G8R8A8_SNORM";
277		case VK_FORMAT_B8G8R8A8_USCALED:			return "VK_FORMAT_B8G8R8A8_USCALED";
278		case VK_FORMAT_B8G8R8A8_SSCALED:			return "VK_FORMAT_B8G8R8A8_SSCALED";
279		case VK_FORMAT_B8G8R8A8_UINT:				return "VK_FORMAT_B8G8R8A8_UINT";
280		case VK_FORMAT_B8G8R8A8_SINT:				return "VK_FORMAT_B8G8R8A8_SINT";
281		case VK_FORMAT_B8G8R8A8_SRGB:				return "VK_FORMAT_B8G8R8A8_SRGB";
282		case VK_FORMAT_A8B8G8R8_UNORM_PACK32:		return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
283		case VK_FORMAT_A8B8G8R8_SNORM_PACK32:		return "VK_FORMAT_A8B8G8R8_SNORM_PACK32";
284		case VK_FORMAT_A8B8G8R8_USCALED_PACK32:		return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
285		case VK_FORMAT_A8B8G8R8_SSCALED_PACK32:		return "VK_FORMAT_A8B8G8R8_SSCALED_PACK32";
286		case VK_FORMAT_A8B8G8R8_UINT_PACK32:		return "VK_FORMAT_A8B8G8R8_UINT_PACK32";
287		case VK_FORMAT_A8B8G8R8_SINT_PACK32:		return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
288		case VK_FORMAT_A8B8G8R8_SRGB_PACK32:		return "VK_FORMAT_A8B8G8R8_SRGB_PACK32";
289		case VK_FORMAT_A2R10G10B10_UNORM_PACK32:	return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
290		case VK_FORMAT_A2R10G10B10_SNORM_PACK32:	return "VK_FORMAT_A2R10G10B10_SNORM_PACK32";
291		case VK_FORMAT_A2R10G10B10_USCALED_PACK32:	return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
292		case VK_FORMAT_A2R10G10B10_SSCALED_PACK32:	return "VK_FORMAT_A2R10G10B10_SSCALED_PACK32";
293		case VK_FORMAT_A2R10G10B10_UINT_PACK32:		return "VK_FORMAT_A2R10G10B10_UINT_PACK32";
294		case VK_FORMAT_A2R10G10B10_SINT_PACK32:		return "VK_FORMAT_A2R10G10B10_SINT_PACK32";
295		case VK_FORMAT_A2B10G10R10_UNORM_PACK32:	return "VK_FORMAT_A2B10G10R10_UNORM_PACK32";
296		case VK_FORMAT_A2B10G10R10_SNORM_PACK32:	return "VK_FORMAT_A2B10G10R10_SNORM_PACK32";
297		case VK_FORMAT_A2B10G10R10_USCALED_PACK32:	return "VK_FORMAT_A2B10G10R10_USCALED_PACK32";
298		case VK_FORMAT_A2B10G10R10_SSCALED_PACK32:	return "VK_FORMAT_A2B10G10R10_SSCALED_PACK32";
299		case VK_FORMAT_A2B10G10R10_UINT_PACK32:		return "VK_FORMAT_A2B10G10R10_UINT_PACK32";
300		case VK_FORMAT_A2B10G10R10_SINT_PACK32:		return "VK_FORMAT_A2B10G10R10_SINT_PACK32";
301		case VK_FORMAT_R16_UNORM:					return "VK_FORMAT_R16_UNORM";
302		case VK_FORMAT_R16_SNORM:					return "VK_FORMAT_R16_SNORM";
303		case VK_FORMAT_R16_USCALED:					return "VK_FORMAT_R16_USCALED";
304		case VK_FORMAT_R16_SSCALED:					return "VK_FORMAT_R16_SSCALED";
305		case VK_FORMAT_R16_UINT:					return "VK_FORMAT_R16_UINT";
306		case VK_FORMAT_R16_SINT:					return "VK_FORMAT_R16_SINT";
307		case VK_FORMAT_R16_SFLOAT:					return "VK_FORMAT_R16_SFLOAT";
308		case VK_FORMAT_R16G16_UNORM:				return "VK_FORMAT_R16G16_UNORM";
309		case VK_FORMAT_R16G16_SNORM:				return "VK_FORMAT_R16G16_SNORM";
310		case VK_FORMAT_R16G16_USCALED:				return "VK_FORMAT_R16G16_USCALED";
311		case VK_FORMAT_R16G16_SSCALED:				return "VK_FORMAT_R16G16_SSCALED";
312		case VK_FORMAT_R16G16_UINT:					return "VK_FORMAT_R16G16_UINT";
313		case VK_FORMAT_R16G16_SINT:					return "VK_FORMAT_R16G16_SINT";
314		case VK_FORMAT_R16G16_SFLOAT:				return "VK_FORMAT_R16G16_SFLOAT";
315		case VK_FORMAT_R16G16B16_UNORM:				return "VK_FORMAT_R16G16B16_UNORM";
316		case VK_FORMAT_R16G16B16_SNORM:				return "VK_FORMAT_R16G16B16_SNORM";
317		case VK_FORMAT_R16G16B16_USCALED:			return "VK_FORMAT_R16G16B16_USCALED";
318		case VK_FORMAT_R16G16B16_SSCALED:			return "VK_FORMAT_R16G16B16_SSCALED";
319		case VK_FORMAT_R16G16B16_UINT:				return "VK_FORMAT_R16G16B16_UINT";
320		case VK_FORMAT_R16G16B16_SINT:				return "VK_FORMAT_R16G16B16_SINT";
321		case VK_FORMAT_R16G16B16_SFLOAT:			return "VK_FORMAT_R16G16B16_SFLOAT";
322		case VK_FORMAT_R16G16B16A16_UNORM:			return "VK_FORMAT_R16G16B16A16_UNORM";
323		case VK_FORMAT_R16G16B16A16_SNORM:			return "VK_FORMAT_R16G16B16A16_SNORM";
324		case VK_FORMAT_R16G16B16A16_USCALED:		return "VK_FORMAT_R16G16B16A16_USCALED";
325		case VK_FORMAT_R16G16B16A16_SSCALED:		return "VK_FORMAT_R16G16B16A16_SSCALED";
326		case VK_FORMAT_R16G16B16A16_UINT:			return "VK_FORMAT_R16G16B16A16_UINT";
327		case VK_FORMAT_R16G16B16A16_SINT:			return "VK_FORMAT_R16G16B16A16_SINT";
328		case VK_FORMAT_R16G16B16A16_SFLOAT:			return "VK_FORMAT_R16G16B16A16_SFLOAT";
329		case VK_FORMAT_R32_UINT:					return "VK_FORMAT_R32_UINT";
330		case VK_FORMAT_R32_SINT:					return "VK_FORMAT_R32_SINT";
331		case VK_FORMAT_R32_SFLOAT:					return "VK_FORMAT_R32_SFLOAT";
332		case VK_FORMAT_R32G32_UINT:					return "VK_FORMAT_R32G32_UINT";
333		case VK_FORMAT_R32G32_SINT:					return "VK_FORMAT_R32G32_SINT";
334		case VK_FORMAT_R32G32_SFLOAT:				return "VK_FORMAT_R32G32_SFLOAT";
335		case VK_FORMAT_R32G32B32_UINT:				return "VK_FORMAT_R32G32B32_UINT";
336		case VK_FORMAT_R32G32B32_SINT:				return "VK_FORMAT_R32G32B32_SINT";
337		case VK_FORMAT_R32G32B32_SFLOAT:			return "VK_FORMAT_R32G32B32_SFLOAT";
338		case VK_FORMAT_R32G32B32A32_UINT:			return "VK_FORMAT_R32G32B32A32_UINT";
339		case VK_FORMAT_R32G32B32A32_SINT:			return "VK_FORMAT_R32G32B32A32_SINT";
340		case VK_FORMAT_R32G32B32A32_SFLOAT:			return "VK_FORMAT_R32G32B32A32_SFLOAT";
341		case VK_FORMAT_R64_UINT:					return "VK_FORMAT_R64_UINT";
342		case VK_FORMAT_R64_SINT:					return "VK_FORMAT_R64_SINT";
343		case VK_FORMAT_R64_SFLOAT:					return "VK_FORMAT_R64_SFLOAT";
344		case VK_FORMAT_R64G64_UINT:					return "VK_FORMAT_R64G64_UINT";
345		case VK_FORMAT_R64G64_SINT:					return "VK_FORMAT_R64G64_SINT";
346		case VK_FORMAT_R64G64_SFLOAT:				return "VK_FORMAT_R64G64_SFLOAT";
347		case VK_FORMAT_R64G64B64_UINT:				return "VK_FORMAT_R64G64B64_UINT";
348		case VK_FORMAT_R64G64B64_SINT:				return "VK_FORMAT_R64G64B64_SINT";
349		case VK_FORMAT_R64G64B64_SFLOAT:			return "VK_FORMAT_R64G64B64_SFLOAT";
350		case VK_FORMAT_R64G64B64A64_UINT:			return "VK_FORMAT_R64G64B64A64_UINT";
351		case VK_FORMAT_R64G64B64A64_SINT:			return "VK_FORMAT_R64G64B64A64_SINT";
352		case VK_FORMAT_R64G64B64A64_SFLOAT:			return "VK_FORMAT_R64G64B64A64_SFLOAT";
353		case VK_FORMAT_B10G11R11_UFLOAT_PACK32:		return "VK_FORMAT_B10G11R11_UFLOAT_PACK32";
354		case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:		return "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32";
355		case VK_FORMAT_D16_UNORM:					return "VK_FORMAT_D16_UNORM";
356		case VK_FORMAT_X8_D24_UNORM_PACK32:			return "VK_FORMAT_X8_D24_UNORM_PACK32";
357		case VK_FORMAT_D32_SFLOAT:					return "VK_FORMAT_D32_SFLOAT";
358		case VK_FORMAT_S8_UINT:						return "VK_FORMAT_S8_UINT";
359		case VK_FORMAT_D16_UNORM_S8_UINT:			return "VK_FORMAT_D16_UNORM_S8_UINT";
360		case VK_FORMAT_D24_UNORM_S8_UINT:			return "VK_FORMAT_D24_UNORM_S8_UINT";
361		case VK_FORMAT_D32_SFLOAT_S8_UINT:			return "VK_FORMAT_D32_SFLOAT_S8_UINT";
362		case VK_FORMAT_BC1_RGB_UNORM_BLOCK:			return "VK_FORMAT_BC1_RGB_UNORM_BLOCK";
363		case VK_FORMAT_BC1_RGB_SRGB_BLOCK:			return "VK_FORMAT_BC1_RGB_SRGB_BLOCK";
364		case VK_FORMAT_BC1_RGBA_UNORM_BLOCK:		return "VK_FORMAT_BC1_RGBA_UNORM_BLOCK";
365		case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:			return "VK_FORMAT_BC1_RGBA_SRGB_BLOCK";
366		case VK_FORMAT_BC2_UNORM_BLOCK:				return "VK_FORMAT_BC2_UNORM_BLOCK";
367		case VK_FORMAT_BC2_SRGB_BLOCK:				return "VK_FORMAT_BC2_SRGB_BLOCK";
368		case VK_FORMAT_BC3_UNORM_BLOCK:				return "VK_FORMAT_BC3_UNORM_BLOCK";
369		case VK_FORMAT_BC3_SRGB_BLOCK:				return "VK_FORMAT_BC3_SRGB_BLOCK";
370		case VK_FORMAT_BC4_UNORM_BLOCK:				return "VK_FORMAT_BC4_UNORM_BLOCK";
371		case VK_FORMAT_BC4_SNORM_BLOCK:				return "VK_FORMAT_BC4_SNORM_BLOCK";
372		case VK_FORMAT_BC5_UNORM_BLOCK:				return "VK_FORMAT_BC5_UNORM_BLOCK";
373		case VK_FORMAT_BC5_SNORM_BLOCK:				return "VK_FORMAT_BC5_SNORM_BLOCK";
374		case VK_FORMAT_BC6H_UFLOAT_BLOCK:			return "VK_FORMAT_BC6H_UFLOAT_BLOCK";
375		case VK_FORMAT_BC6H_SFLOAT_BLOCK:			return "VK_FORMAT_BC6H_SFLOAT_BLOCK";
376		case VK_FORMAT_BC7_UNORM_BLOCK:				return "VK_FORMAT_BC7_UNORM_BLOCK";
377		case VK_FORMAT_BC7_SRGB_BLOCK:				return "VK_FORMAT_BC7_SRGB_BLOCK";
378		case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:		return "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK";
379		case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:		return "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK";
380		case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:	return "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK";
381		case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:	return "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK";
382		case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:	return "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK";
383		case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:	return "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK";
384		case VK_FORMAT_EAC_R11_UNORM_BLOCK:			return "VK_FORMAT_EAC_R11_UNORM_BLOCK";
385		case VK_FORMAT_EAC_R11_SNORM_BLOCK:			return "VK_FORMAT_EAC_R11_SNORM_BLOCK";
386		case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:		return "VK_FORMAT_EAC_R11G11_UNORM_BLOCK";
387		case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:		return "VK_FORMAT_EAC_R11G11_SNORM_BLOCK";
388		case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:		return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
389		case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:			return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
390		case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:		return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
391		case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:			return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
392		case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:		return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
393		case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:			return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
394		case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:		return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
395		case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:			return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
396		case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:		return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
397		case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:			return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
398		case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:		return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
399		case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:			return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
400		case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:		return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
401		case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:			return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
402		case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:		return "VK_FORMAT_ASTC_8x8_UNORM_BLOCK";
403		case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:			return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
404		case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:		return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
405		case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:		return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
406		case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:		return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
407		case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:		return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
408		case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:		return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
409		case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:		return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
410		case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:		return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
411		case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:		return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
412		case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:		return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
413		case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:		return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
414		case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:		return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
415		case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:		return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
416		case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG";
417		case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG";
418		case VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG";
419		case VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG";
420		case VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG";
421		case VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG";
422		case VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG";
423		case VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:	return "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG";
424		default:									return DE_NULL;
425	}
426}
427
428const char* getImageTypeName (VkImageType value)
429{
430	switch (value)
431	{
432		case VK_IMAGE_TYPE_1D:	return "VK_IMAGE_TYPE_1D";
433		case VK_IMAGE_TYPE_2D:	return "VK_IMAGE_TYPE_2D";
434		case VK_IMAGE_TYPE_3D:	return "VK_IMAGE_TYPE_3D";
435		default:				return DE_NULL;
436	}
437}
438
439const char* getImageTilingName (VkImageTiling value)
440{
441	switch (value)
442	{
443		case VK_IMAGE_TILING_OPTIMAL:	return "VK_IMAGE_TILING_OPTIMAL";
444		case VK_IMAGE_TILING_LINEAR:	return "VK_IMAGE_TILING_LINEAR";
445		default:						return DE_NULL;
446	}
447}
448
449const char* getPhysicalDeviceTypeName (VkPhysicalDeviceType value)
450{
451	switch (value)
452	{
453		case VK_PHYSICAL_DEVICE_TYPE_OTHER:				return "VK_PHYSICAL_DEVICE_TYPE_OTHER";
454		case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:	return "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU";
455		case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:		return "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU";
456		case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:		return "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU";
457		case VK_PHYSICAL_DEVICE_TYPE_CPU:				return "VK_PHYSICAL_DEVICE_TYPE_CPU";
458		default:										return DE_NULL;
459	}
460}
461
462const char* getQueryTypeName (VkQueryType value)
463{
464	switch (value)
465	{
466		case VK_QUERY_TYPE_OCCLUSION:			return "VK_QUERY_TYPE_OCCLUSION";
467		case VK_QUERY_TYPE_PIPELINE_STATISTICS:	return "VK_QUERY_TYPE_PIPELINE_STATISTICS";
468		case VK_QUERY_TYPE_TIMESTAMP:			return "VK_QUERY_TYPE_TIMESTAMP";
469		default:								return DE_NULL;
470	}
471}
472
473const char* getSharingModeName (VkSharingMode value)
474{
475	switch (value)
476	{
477		case VK_SHARING_MODE_EXCLUSIVE:		return "VK_SHARING_MODE_EXCLUSIVE";
478		case VK_SHARING_MODE_CONCURRENT:	return "VK_SHARING_MODE_CONCURRENT";
479		default:							return DE_NULL;
480	}
481}
482
483const char* getImageLayoutName (VkImageLayout value)
484{
485	switch (value)
486	{
487		case VK_IMAGE_LAYOUT_UNDEFINED:							return "VK_IMAGE_LAYOUT_UNDEFINED";
488		case VK_IMAGE_LAYOUT_GENERAL:							return "VK_IMAGE_LAYOUT_GENERAL";
489		case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:			return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL";
490		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL";
491		case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:	return "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL";
492		case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:			return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL";
493		case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:				return "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL";
494		case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:				return "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL";
495		case VK_IMAGE_LAYOUT_PREINITIALIZED:					return "VK_IMAGE_LAYOUT_PREINITIALIZED";
496		case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:					return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
497		case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:				return "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR";
498		default:												return DE_NULL;
499	}
500}
501
502const char* getImageViewTypeName (VkImageViewType value)
503{
504	switch (value)
505	{
506		case VK_IMAGE_VIEW_TYPE_1D:			return "VK_IMAGE_VIEW_TYPE_1D";
507		case VK_IMAGE_VIEW_TYPE_2D:			return "VK_IMAGE_VIEW_TYPE_2D";
508		case VK_IMAGE_VIEW_TYPE_3D:			return "VK_IMAGE_VIEW_TYPE_3D";
509		case VK_IMAGE_VIEW_TYPE_CUBE:		return "VK_IMAGE_VIEW_TYPE_CUBE";
510		case VK_IMAGE_VIEW_TYPE_1D_ARRAY:	return "VK_IMAGE_VIEW_TYPE_1D_ARRAY";
511		case VK_IMAGE_VIEW_TYPE_2D_ARRAY:	return "VK_IMAGE_VIEW_TYPE_2D_ARRAY";
512		case VK_IMAGE_VIEW_TYPE_CUBE_ARRAY:	return "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY";
513		default:							return DE_NULL;
514	}
515}
516
517const char* getComponentSwizzleName (VkComponentSwizzle value)
518{
519	switch (value)
520	{
521		case VK_COMPONENT_SWIZZLE_IDENTITY:	return "VK_COMPONENT_SWIZZLE_IDENTITY";
522		case VK_COMPONENT_SWIZZLE_ZERO:		return "VK_COMPONENT_SWIZZLE_ZERO";
523		case VK_COMPONENT_SWIZZLE_ONE:		return "VK_COMPONENT_SWIZZLE_ONE";
524		case VK_COMPONENT_SWIZZLE_R:		return "VK_COMPONENT_SWIZZLE_R";
525		case VK_COMPONENT_SWIZZLE_G:		return "VK_COMPONENT_SWIZZLE_G";
526		case VK_COMPONENT_SWIZZLE_B:		return "VK_COMPONENT_SWIZZLE_B";
527		case VK_COMPONENT_SWIZZLE_A:		return "VK_COMPONENT_SWIZZLE_A";
528		default:							return DE_NULL;
529	}
530}
531
532const char* getVertexInputRateName (VkVertexInputRate value)
533{
534	switch (value)
535	{
536		case VK_VERTEX_INPUT_RATE_VERTEX:	return "VK_VERTEX_INPUT_RATE_VERTEX";
537		case VK_VERTEX_INPUT_RATE_INSTANCE:	return "VK_VERTEX_INPUT_RATE_INSTANCE";
538		default:							return DE_NULL;
539	}
540}
541
542const char* getPrimitiveTopologyName (VkPrimitiveTopology value)
543{
544	switch (value)
545	{
546		case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:						return "VK_PRIMITIVE_TOPOLOGY_POINT_LIST";
547		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:						return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST";
548		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:						return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP";
549		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST";
550		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP";
551		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:					return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN";
552		case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:		return "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY";
553		case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:		return "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY";
554		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:	return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY";
555		case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:	return "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY";
556		case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST:						return "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST";
557		default:													return DE_NULL;
558	}
559}
560
561const char* getPolygonModeName (VkPolygonMode value)
562{
563	switch (value)
564	{
565		case VK_POLYGON_MODE_FILL:	return "VK_POLYGON_MODE_FILL";
566		case VK_POLYGON_MODE_LINE:	return "VK_POLYGON_MODE_LINE";
567		case VK_POLYGON_MODE_POINT:	return "VK_POLYGON_MODE_POINT";
568		default:					return DE_NULL;
569	}
570}
571
572const char* getFrontFaceName (VkFrontFace value)
573{
574	switch (value)
575	{
576		case VK_FRONT_FACE_COUNTER_CLOCKWISE:	return "VK_FRONT_FACE_COUNTER_CLOCKWISE";
577		case VK_FRONT_FACE_CLOCKWISE:			return "VK_FRONT_FACE_CLOCKWISE";
578		default:								return DE_NULL;
579	}
580}
581
582const char* getCompareOpName (VkCompareOp value)
583{
584	switch (value)
585	{
586		case VK_COMPARE_OP_NEVER:				return "VK_COMPARE_OP_NEVER";
587		case VK_COMPARE_OP_LESS:				return "VK_COMPARE_OP_LESS";
588		case VK_COMPARE_OP_EQUAL:				return "VK_COMPARE_OP_EQUAL";
589		case VK_COMPARE_OP_LESS_OR_EQUAL:		return "VK_COMPARE_OP_LESS_OR_EQUAL";
590		case VK_COMPARE_OP_GREATER:				return "VK_COMPARE_OP_GREATER";
591		case VK_COMPARE_OP_NOT_EQUAL:			return "VK_COMPARE_OP_NOT_EQUAL";
592		case VK_COMPARE_OP_GREATER_OR_EQUAL:	return "VK_COMPARE_OP_GREATER_OR_EQUAL";
593		case VK_COMPARE_OP_ALWAYS:				return "VK_COMPARE_OP_ALWAYS";
594		default:								return DE_NULL;
595	}
596}
597
598const char* getStencilOpName (VkStencilOp value)
599{
600	switch (value)
601	{
602		case VK_STENCIL_OP_KEEP:				return "VK_STENCIL_OP_KEEP";
603		case VK_STENCIL_OP_ZERO:				return "VK_STENCIL_OP_ZERO";
604		case VK_STENCIL_OP_REPLACE:				return "VK_STENCIL_OP_REPLACE";
605		case VK_STENCIL_OP_INCREMENT_AND_CLAMP:	return "VK_STENCIL_OP_INCREMENT_AND_CLAMP";
606		case VK_STENCIL_OP_DECREMENT_AND_CLAMP:	return "VK_STENCIL_OP_DECREMENT_AND_CLAMP";
607		case VK_STENCIL_OP_INVERT:				return "VK_STENCIL_OP_INVERT";
608		case VK_STENCIL_OP_INCREMENT_AND_WRAP:	return "VK_STENCIL_OP_INCREMENT_AND_WRAP";
609		case VK_STENCIL_OP_DECREMENT_AND_WRAP:	return "VK_STENCIL_OP_DECREMENT_AND_WRAP";
610		default:								return DE_NULL;
611	}
612}
613
614const char* getLogicOpName (VkLogicOp value)
615{
616	switch (value)
617	{
618		case VK_LOGIC_OP_CLEAR:			return "VK_LOGIC_OP_CLEAR";
619		case VK_LOGIC_OP_AND:			return "VK_LOGIC_OP_AND";
620		case VK_LOGIC_OP_AND_REVERSE:	return "VK_LOGIC_OP_AND_REVERSE";
621		case VK_LOGIC_OP_COPY:			return "VK_LOGIC_OP_COPY";
622		case VK_LOGIC_OP_AND_INVERTED:	return "VK_LOGIC_OP_AND_INVERTED";
623		case VK_LOGIC_OP_NO_OP:			return "VK_LOGIC_OP_NO_OP";
624		case VK_LOGIC_OP_XOR:			return "VK_LOGIC_OP_XOR";
625		case VK_LOGIC_OP_OR:			return "VK_LOGIC_OP_OR";
626		case VK_LOGIC_OP_NOR:			return "VK_LOGIC_OP_NOR";
627		case VK_LOGIC_OP_EQUIVALENT:	return "VK_LOGIC_OP_EQUIVALENT";
628		case VK_LOGIC_OP_INVERT:		return "VK_LOGIC_OP_INVERT";
629		case VK_LOGIC_OP_OR_REVERSE:	return "VK_LOGIC_OP_OR_REVERSE";
630		case VK_LOGIC_OP_COPY_INVERTED:	return "VK_LOGIC_OP_COPY_INVERTED";
631		case VK_LOGIC_OP_OR_INVERTED:	return "VK_LOGIC_OP_OR_INVERTED";
632		case VK_LOGIC_OP_NAND:			return "VK_LOGIC_OP_NAND";
633		case VK_LOGIC_OP_SET:			return "VK_LOGIC_OP_SET";
634		default:						return DE_NULL;
635	}
636}
637
638const char* getBlendFactorName (VkBlendFactor value)
639{
640	switch (value)
641	{
642		case VK_BLEND_FACTOR_ZERO:						return "VK_BLEND_FACTOR_ZERO";
643		case VK_BLEND_FACTOR_ONE:						return "VK_BLEND_FACTOR_ONE";
644		case VK_BLEND_FACTOR_SRC_COLOR:					return "VK_BLEND_FACTOR_SRC_COLOR";
645		case VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR";
646		case VK_BLEND_FACTOR_DST_COLOR:					return "VK_BLEND_FACTOR_DST_COLOR";
647		case VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR";
648		case VK_BLEND_FACTOR_SRC_ALPHA:					return "VK_BLEND_FACTOR_SRC_ALPHA";
649		case VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA";
650		case VK_BLEND_FACTOR_DST_ALPHA:					return "VK_BLEND_FACTOR_DST_ALPHA";
651		case VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA";
652		case VK_BLEND_FACTOR_CONSTANT_COLOR:			return "VK_BLEND_FACTOR_CONSTANT_COLOR";
653		case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR:	return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR";
654		case VK_BLEND_FACTOR_CONSTANT_ALPHA:			return "VK_BLEND_FACTOR_CONSTANT_ALPHA";
655		case VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA:	return "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA";
656		case VK_BLEND_FACTOR_SRC_ALPHA_SATURATE:		return "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE";
657		case VK_BLEND_FACTOR_SRC1_COLOR:				return "VK_BLEND_FACTOR_SRC1_COLOR";
658		case VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR";
659		case VK_BLEND_FACTOR_SRC1_ALPHA:				return "VK_BLEND_FACTOR_SRC1_ALPHA";
660		case VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA:		return "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA";
661		default:										return DE_NULL;
662	}
663}
664
665const char* getBlendOpName (VkBlendOp value)
666{
667	switch (value)
668	{
669		case VK_BLEND_OP_ADD:				return "VK_BLEND_OP_ADD";
670		case VK_BLEND_OP_SUBTRACT:			return "VK_BLEND_OP_SUBTRACT";
671		case VK_BLEND_OP_REVERSE_SUBTRACT:	return "VK_BLEND_OP_REVERSE_SUBTRACT";
672		case VK_BLEND_OP_MIN:				return "VK_BLEND_OP_MIN";
673		case VK_BLEND_OP_MAX:				return "VK_BLEND_OP_MAX";
674		default:							return DE_NULL;
675	}
676}
677
678const char* getDynamicStateName (VkDynamicState value)
679{
680	switch (value)
681	{
682		case VK_DYNAMIC_STATE_VIEWPORT:				return "VK_DYNAMIC_STATE_VIEWPORT";
683		case VK_DYNAMIC_STATE_SCISSOR:				return "VK_DYNAMIC_STATE_SCISSOR";
684		case VK_DYNAMIC_STATE_LINE_WIDTH:			return "VK_DYNAMIC_STATE_LINE_WIDTH";
685		case VK_DYNAMIC_STATE_DEPTH_BIAS:			return "VK_DYNAMIC_STATE_DEPTH_BIAS";
686		case VK_DYNAMIC_STATE_BLEND_CONSTANTS:		return "VK_DYNAMIC_STATE_BLEND_CONSTANTS";
687		case VK_DYNAMIC_STATE_DEPTH_BOUNDS:			return "VK_DYNAMIC_STATE_DEPTH_BOUNDS";
688		case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:	return "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK";
689		case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:	return "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK";
690		case VK_DYNAMIC_STATE_STENCIL_REFERENCE:	return "VK_DYNAMIC_STATE_STENCIL_REFERENCE";
691		default:									return DE_NULL;
692	}
693}
694
695const char* getFilterName (VkFilter value)
696{
697	switch (value)
698	{
699		case VK_FILTER_NEAREST:		return "VK_FILTER_NEAREST";
700		case VK_FILTER_LINEAR:		return "VK_FILTER_LINEAR";
701		case VK_FILTER_CUBIC_IMG:	return "VK_FILTER_CUBIC_IMG";
702		default:					return DE_NULL;
703	}
704}
705
706const char* getSamplerMipmapModeName (VkSamplerMipmapMode value)
707{
708	switch (value)
709	{
710		case VK_SAMPLER_MIPMAP_MODE_NEAREST:	return "VK_SAMPLER_MIPMAP_MODE_NEAREST";
711		case VK_SAMPLER_MIPMAP_MODE_LINEAR:		return "VK_SAMPLER_MIPMAP_MODE_LINEAR";
712		default:								return DE_NULL;
713	}
714}
715
716const char* getSamplerAddressModeName (VkSamplerAddressMode value)
717{
718	switch (value)
719	{
720		case VK_SAMPLER_ADDRESS_MODE_REPEAT:				return "VK_SAMPLER_ADDRESS_MODE_REPEAT";
721		case VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT:		return "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT";
722		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE:			return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE";
723		case VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER:		return "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER";
724		case VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE:	return "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE";
725		default:											return DE_NULL;
726	}
727}
728
729const char* getBorderColorName (VkBorderColor value)
730{
731	switch (value)
732	{
733		case VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK:	return "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK";
734		case VK_BORDER_COLOR_INT_TRANSPARENT_BLACK:		return "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK";
735		case VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK:		return "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK";
736		case VK_BORDER_COLOR_INT_OPAQUE_BLACK:			return "VK_BORDER_COLOR_INT_OPAQUE_BLACK";
737		case VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE:		return "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE";
738		case VK_BORDER_COLOR_INT_OPAQUE_WHITE:			return "VK_BORDER_COLOR_INT_OPAQUE_WHITE";
739		default:										return DE_NULL;
740	}
741}
742
743const char* getDescriptorTypeName (VkDescriptorType value)
744{
745	switch (value)
746	{
747		case VK_DESCRIPTOR_TYPE_SAMPLER:				return "VK_DESCRIPTOR_TYPE_SAMPLER";
748		case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:	return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER";
749		case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:			return "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE";
750		case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:			return "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE";
751		case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:	return "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER";
752		case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:	return "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER";
753		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:			return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER";
754		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:			return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER";
755		case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:	return "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC";
756		case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:	return "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC";
757		case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:		return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT";
758		default:										return DE_NULL;
759	}
760}
761
762const char* getAttachmentLoadOpName (VkAttachmentLoadOp value)
763{
764	switch (value)
765	{
766		case VK_ATTACHMENT_LOAD_OP_LOAD:		return "VK_ATTACHMENT_LOAD_OP_LOAD";
767		case VK_ATTACHMENT_LOAD_OP_CLEAR:		return "VK_ATTACHMENT_LOAD_OP_CLEAR";
768		case VK_ATTACHMENT_LOAD_OP_DONT_CARE:	return "VK_ATTACHMENT_LOAD_OP_DONT_CARE";
769		default:								return DE_NULL;
770	}
771}
772
773const char* getAttachmentStoreOpName (VkAttachmentStoreOp value)
774{
775	switch (value)
776	{
777		case VK_ATTACHMENT_STORE_OP_STORE:		return "VK_ATTACHMENT_STORE_OP_STORE";
778		case VK_ATTACHMENT_STORE_OP_DONT_CARE:	return "VK_ATTACHMENT_STORE_OP_DONT_CARE";
779		default:								return DE_NULL;
780	}
781}
782
783const char* getPipelineBindPointName (VkPipelineBindPoint value)
784{
785	switch (value)
786	{
787		case VK_PIPELINE_BIND_POINT_GRAPHICS:	return "VK_PIPELINE_BIND_POINT_GRAPHICS";
788		case VK_PIPELINE_BIND_POINT_COMPUTE:	return "VK_PIPELINE_BIND_POINT_COMPUTE";
789		default:								return DE_NULL;
790	}
791}
792
793const char* getCommandBufferLevelName (VkCommandBufferLevel value)
794{
795	switch (value)
796	{
797		case VK_COMMAND_BUFFER_LEVEL_PRIMARY:	return "VK_COMMAND_BUFFER_LEVEL_PRIMARY";
798		case VK_COMMAND_BUFFER_LEVEL_SECONDARY:	return "VK_COMMAND_BUFFER_LEVEL_SECONDARY";
799		default:								return DE_NULL;
800	}
801}
802
803const char* getIndexTypeName (VkIndexType value)
804{
805	switch (value)
806	{
807		case VK_INDEX_TYPE_UINT16:	return "VK_INDEX_TYPE_UINT16";
808		case VK_INDEX_TYPE_UINT32:	return "VK_INDEX_TYPE_UINT32";
809		default:					return DE_NULL;
810	}
811}
812
813const char* getSubpassContentsName (VkSubpassContents value)
814{
815	switch (value)
816	{
817		case VK_SUBPASS_CONTENTS_INLINE:					return "VK_SUBPASS_CONTENTS_INLINE";
818		case VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS:	return "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS";
819		default:											return DE_NULL;
820	}
821}
822
823const char* getColorSpaceKHRName (VkColorSpaceKHR value)
824{
825	switch (value)
826	{
827		case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:			return "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR";
828		case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:	return "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT";
829		case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT:	return "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT";
830		case VK_COLOR_SPACE_DCI_P3_LINEAR_EXT:			return "VK_COLOR_SPACE_DCI_P3_LINEAR_EXT";
831		case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT:		return "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT";
832		case VK_COLOR_SPACE_BT709_LINEAR_EXT:			return "VK_COLOR_SPACE_BT709_LINEAR_EXT";
833		case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:		return "VK_COLOR_SPACE_BT709_NONLINEAR_EXT";
834		case VK_COLOR_SPACE_BT2020_LINEAR_EXT:			return "VK_COLOR_SPACE_BT2020_LINEAR_EXT";
835		case VK_COLOR_SPACE_HDR10_ST2084_EXT:			return "VK_COLOR_SPACE_HDR10_ST2084_EXT";
836		case VK_COLOR_SPACE_DOLBYVISION_EXT:			return "VK_COLOR_SPACE_DOLBYVISION_EXT";
837		case VK_COLOR_SPACE_HDR10_HLG_EXT:				return "VK_COLOR_SPACE_HDR10_HLG_EXT";
838		case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT:		return "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT";
839		case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:		return "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT";
840		case VK_COLOR_SPACE_PASS_THROUGH_EXT:			return "VK_COLOR_SPACE_PASS_THROUGH_EXT";
841		default:										return DE_NULL;
842	}
843}
844
845const char* getPresentModeKHRName (VkPresentModeKHR value)
846{
847	switch (value)
848	{
849		case VK_PRESENT_MODE_IMMEDIATE_KHR:					return "VK_PRESENT_MODE_IMMEDIATE_KHR";
850		case VK_PRESENT_MODE_MAILBOX_KHR:					return "VK_PRESENT_MODE_MAILBOX_KHR";
851		case VK_PRESENT_MODE_FIFO_KHR:						return "VK_PRESENT_MODE_FIFO_KHR";
852		case VK_PRESENT_MODE_FIFO_RELAXED_KHR:				return "VK_PRESENT_MODE_FIFO_RELAXED_KHR";
853		case VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR:		return "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR";
854		case VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR:	return "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR";
855		default:											return DE_NULL;
856	}
857}
858
859const char* getDebugReportObjectTypeEXTName (VkDebugReportObjectTypeEXT value)
860{
861	switch (value)
862	{
863		case VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT";
864		case VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT";
865		case VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT";
866		case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT";
867		case VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT";
868		case VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT";
869		case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT";
870		case VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT";
871		case VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT";
872		case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT";
873		case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT";
874		case VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT:					return "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT";
875		case VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT";
876		case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT";
877		case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT";
878		case VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT";
879		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT";
880		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT";
881		case VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT";
882		case VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT";
883		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT:	return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT";
884		case VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT:				return "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT";
885		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT";
886		case VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT:		return "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT";
887		case VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT";
888		case VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT";
889		case VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT";
890		case VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT";
891		case VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT:			return "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT";
892		default:													return DE_NULL;
893	}
894}
895
896const char* getDebugReportErrorEXTName (VkDebugReportErrorEXT value)
897{
898	switch (value)
899	{
900		case VK_DEBUG_REPORT_ERROR_NONE_EXT:			return "VK_DEBUG_REPORT_ERROR_NONE_EXT";
901		case VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT:	return "VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT";
902		default:										return DE_NULL;
903	}
904}
905
906const char* getRasterizationOrderAMDName (VkRasterizationOrderAMD value)
907{
908	switch (value)
909	{
910		case VK_RASTERIZATION_ORDER_STRICT_AMD:		return "VK_RASTERIZATION_ORDER_STRICT_AMD";
911		case VK_RASTERIZATION_ORDER_RELAXED_AMD:	return "VK_RASTERIZATION_ORDER_RELAXED_AMD";
912		default:									return DE_NULL;
913	}
914}
915
916const char* getValidationCheckEXTName (VkValidationCheckEXT value)
917{
918	switch (value)
919	{
920		case VK_VALIDATION_CHECK_ALL_EXT:	return "VK_VALIDATION_CHECK_ALL_EXT";
921		default:							return DE_NULL;
922	}
923}
924
925const char* getIndirectCommandsTokenTypeNVXName (VkIndirectCommandsTokenTypeNVX value)
926{
927	switch (value)
928	{
929		case VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX";
930		case VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX";
931		case VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX";
932		case VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX";
933		case VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX";
934		case VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX:	return "VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX";
935		case VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX:			return "VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX";
936		case VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX:		return "VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX";
937		default:											return DE_NULL;
938	}
939}
940
941const char* getObjectEntryTypeNVXName (VkObjectEntryTypeNVX value)
942{
943	switch (value)
944	{
945		case VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX:	return "VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX";
946		case VK_OBJECT_ENTRY_PIPELINE_NVX:			return "VK_OBJECT_ENTRY_PIPELINE_NVX";
947		case VK_OBJECT_ENTRY_INDEX_BUFFER_NVX:		return "VK_OBJECT_ENTRY_INDEX_BUFFER_NVX";
948		case VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX:		return "VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX";
949		case VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX:		return "VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX";
950		default:									return DE_NULL;
951	}
952}
953
954const char* getDescriptorUpdateTemplateTypeKHRName (VkDescriptorUpdateTemplateTypeKHR value)
955{
956	switch (value)
957	{
958		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR:		return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR";
959		case VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR:	return "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR";
960		default:														return DE_NULL;
961	}
962}
963
964tcu::Format::Bitfield<32> getFormatFeatureFlagsStr (VkFormatFeatureFlags value)
965{
966	static const tcu::Format::BitDesc s_desc[] =
967	{
968		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT,					"VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"),
969		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT,					"VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"),
970		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT,			"VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"),
971		tcu::Format::BitDesc(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT,			"VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"),
972		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT,			"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"),
973		tcu::Format::BitDesc(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,		"VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"),
974		tcu::Format::BitDesc(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT,					"VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"),
975		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT,				"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"),
976		tcu::Format::BitDesc(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT,			"VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"),
977		tcu::Format::BitDesc(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT,		"VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"),
978		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_SRC_BIT,						"VK_FORMAT_FEATURE_BLIT_SRC_BIT"),
979		tcu::Format::BitDesc(VK_FORMAT_FEATURE_BLIT_DST_BIT,						"VK_FORMAT_FEATURE_BLIT_DST_BIT"),
980		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT,		"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"),
981		tcu::Format::BitDesc(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG,	"VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"),
982		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR,				"VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR"),
983		tcu::Format::BitDesc(VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR,				"VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR"),
984	};
985	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
986}
987
988tcu::Format::Bitfield<32> getImageUsageFlagsStr (VkImageUsageFlags value)
989{
990	static const tcu::Format::BitDesc s_desc[] =
991	{
992		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_SRC_BIT,				"VK_IMAGE_USAGE_TRANSFER_SRC_BIT"),
993		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSFER_DST_BIT,				"VK_IMAGE_USAGE_TRANSFER_DST_BIT"),
994		tcu::Format::BitDesc(VK_IMAGE_USAGE_SAMPLED_BIT,					"VK_IMAGE_USAGE_SAMPLED_BIT"),
995		tcu::Format::BitDesc(VK_IMAGE_USAGE_STORAGE_BIT,					"VK_IMAGE_USAGE_STORAGE_BIT"),
996		tcu::Format::BitDesc(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,			"VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"),
997		tcu::Format::BitDesc(VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,	"VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"),
998		tcu::Format::BitDesc(VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,		"VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"),
999		tcu::Format::BitDesc(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT,			"VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"),
1000	};
1001	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1002}
1003
1004tcu::Format::Bitfield<32> getImageCreateFlagsStr (VkImageCreateFlags value)
1005{
1006	static const tcu::Format::BitDesc s_desc[] =
1007	{
1008		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_BINDING_BIT,			"VK_IMAGE_CREATE_SPARSE_BINDING_BIT"),
1009		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT,			"VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"),
1010		tcu::Format::BitDesc(VK_IMAGE_CREATE_SPARSE_ALIASED_BIT,			"VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"),
1011		tcu::Format::BitDesc(VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT,			"VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"),
1012		tcu::Format::BitDesc(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,			"VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"),
1013		tcu::Format::BitDesc(VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR,	"VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR"),
1014	};
1015	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1016}
1017
1018tcu::Format::Bitfield<32> getSampleCountFlagsStr (VkSampleCountFlags value)
1019{
1020	static const tcu::Format::BitDesc s_desc[] =
1021	{
1022		tcu::Format::BitDesc(VK_SAMPLE_COUNT_1_BIT,		"VK_SAMPLE_COUNT_1_BIT"),
1023		tcu::Format::BitDesc(VK_SAMPLE_COUNT_2_BIT,		"VK_SAMPLE_COUNT_2_BIT"),
1024		tcu::Format::BitDesc(VK_SAMPLE_COUNT_4_BIT,		"VK_SAMPLE_COUNT_4_BIT"),
1025		tcu::Format::BitDesc(VK_SAMPLE_COUNT_8_BIT,		"VK_SAMPLE_COUNT_8_BIT"),
1026		tcu::Format::BitDesc(VK_SAMPLE_COUNT_16_BIT,	"VK_SAMPLE_COUNT_16_BIT"),
1027		tcu::Format::BitDesc(VK_SAMPLE_COUNT_32_BIT,	"VK_SAMPLE_COUNT_32_BIT"),
1028		tcu::Format::BitDesc(VK_SAMPLE_COUNT_64_BIT,	"VK_SAMPLE_COUNT_64_BIT"),
1029	};
1030	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1031}
1032
1033tcu::Format::Bitfield<32> getQueueFlagsStr (VkQueueFlags value)
1034{
1035	static const tcu::Format::BitDesc s_desc[] =
1036	{
1037		tcu::Format::BitDesc(VK_QUEUE_GRAPHICS_BIT,			"VK_QUEUE_GRAPHICS_BIT"),
1038		tcu::Format::BitDesc(VK_QUEUE_COMPUTE_BIT,			"VK_QUEUE_COMPUTE_BIT"),
1039		tcu::Format::BitDesc(VK_QUEUE_TRANSFER_BIT,			"VK_QUEUE_TRANSFER_BIT"),
1040		tcu::Format::BitDesc(VK_QUEUE_SPARSE_BINDING_BIT,	"VK_QUEUE_SPARSE_BINDING_BIT"),
1041	};
1042	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1043}
1044
1045tcu::Format::Bitfield<32> getMemoryPropertyFlagsStr (VkMemoryPropertyFlags value)
1046{
1047	static const tcu::Format::BitDesc s_desc[] =
1048	{
1049		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,		"VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"),
1050		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,		"VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"),
1051		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,		"VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"),
1052		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_HOST_CACHED_BIT,		"VK_MEMORY_PROPERTY_HOST_CACHED_BIT"),
1053		tcu::Format::BitDesc(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT,	"VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"),
1054	};
1055	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1056}
1057
1058tcu::Format::Bitfield<32> getMemoryHeapFlagsStr (VkMemoryHeapFlags value)
1059{
1060	static const tcu::Format::BitDesc s_desc[] =
1061	{
1062		tcu::Format::BitDesc(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT,	"VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"),
1063	};
1064	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1065}
1066
1067tcu::Format::Bitfield<32> getPipelineStageFlagsStr (VkPipelineStageFlags value)
1068{
1069	static const tcu::Format::BitDesc s_desc[] =
1070	{
1071		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,						"VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"),
1072		tcu::Format::BitDesc(VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,					"VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"),
1073		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,					"VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"),
1074		tcu::Format::BitDesc(VK_PIPELINE_STAGE_VERTEX_SHADER_BIT,					"VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"),
1075		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT,		"VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"),
1076		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT,	"VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"),
1077		tcu::Format::BitDesc(VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT,					"VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"),
1078		tcu::Format::BitDesc(VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,					"VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"),
1079		tcu::Format::BitDesc(VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT,			"VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"),
1080		tcu::Format::BitDesc(VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,				"VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"),
1081		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,			"VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"),
1082		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,					"VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"),
1083		tcu::Format::BitDesc(VK_PIPELINE_STAGE_TRANSFER_BIT,						"VK_PIPELINE_STAGE_TRANSFER_BIT"),
1084		tcu::Format::BitDesc(VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,					"VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"),
1085		tcu::Format::BitDesc(VK_PIPELINE_STAGE_HOST_BIT,							"VK_PIPELINE_STAGE_HOST_BIT"),
1086		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,					"VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"),
1087		tcu::Format::BitDesc(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,					"VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"),
1088		tcu::Format::BitDesc(VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX,				"VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"),
1089	};
1090	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1091}
1092
1093tcu::Format::Bitfield<32> getImageAspectFlagsStr (VkImageAspectFlags value)
1094{
1095	static const tcu::Format::BitDesc s_desc[] =
1096	{
1097		tcu::Format::BitDesc(VK_IMAGE_ASPECT_COLOR_BIT,		"VK_IMAGE_ASPECT_COLOR_BIT"),
1098		tcu::Format::BitDesc(VK_IMAGE_ASPECT_DEPTH_BIT,		"VK_IMAGE_ASPECT_DEPTH_BIT"),
1099		tcu::Format::BitDesc(VK_IMAGE_ASPECT_STENCIL_BIT,	"VK_IMAGE_ASPECT_STENCIL_BIT"),
1100		tcu::Format::BitDesc(VK_IMAGE_ASPECT_METADATA_BIT,	"VK_IMAGE_ASPECT_METADATA_BIT"),
1101	};
1102	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1103}
1104
1105tcu::Format::Bitfield<32> getSparseImageFormatFlagsStr (VkSparseImageFormatFlags value)
1106{
1107	static const tcu::Format::BitDesc s_desc[] =
1108	{
1109		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT,			"VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"),
1110		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT,		"VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"),
1111		tcu::Format::BitDesc(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT,	"VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"),
1112	};
1113	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1114}
1115
1116tcu::Format::Bitfield<32> getSparseMemoryBindFlagsStr (VkSparseMemoryBindFlags value)
1117{
1118	static const tcu::Format::BitDesc s_desc[] =
1119	{
1120		tcu::Format::BitDesc(VK_SPARSE_MEMORY_BIND_METADATA_BIT,	"VK_SPARSE_MEMORY_BIND_METADATA_BIT"),
1121	};
1122	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1123}
1124
1125tcu::Format::Bitfield<32> getFenceCreateFlagsStr (VkFenceCreateFlags value)
1126{
1127	static const tcu::Format::BitDesc s_desc[] =
1128	{
1129		tcu::Format::BitDesc(VK_FENCE_CREATE_SIGNALED_BIT,	"VK_FENCE_CREATE_SIGNALED_BIT"),
1130	};
1131	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1132}
1133
1134tcu::Format::Bitfield<32> getQueryPipelineStatisticFlagsStr (VkQueryPipelineStatisticFlags value)
1135{
1136	static const tcu::Format::BitDesc s_desc[] =
1137	{
1138		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT,						"VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"),
1139		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT,						"VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"),
1140		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT,						"VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"),
1141		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"),
1142		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT,					"VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"),
1143		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT,							"VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"),
1144		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT,							"VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"),
1145		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"),
1146		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT,			"VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"),
1147		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT,	"VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"),
1148		tcu::Format::BitDesc(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT,					"VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"),
1149	};
1150	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1151}
1152
1153tcu::Format::Bitfield<32> getQueryResultFlagsStr (VkQueryResultFlags value)
1154{
1155	static const tcu::Format::BitDesc s_desc[] =
1156	{
1157		tcu::Format::BitDesc(VK_QUERY_RESULT_64_BIT,				"VK_QUERY_RESULT_64_BIT"),
1158		tcu::Format::BitDesc(VK_QUERY_RESULT_WAIT_BIT,				"VK_QUERY_RESULT_WAIT_BIT"),
1159		tcu::Format::BitDesc(VK_QUERY_RESULT_WITH_AVAILABILITY_BIT,	"VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"),
1160		tcu::Format::BitDesc(VK_QUERY_RESULT_PARTIAL_BIT,			"VK_QUERY_RESULT_PARTIAL_BIT"),
1161	};
1162	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1163}
1164
1165tcu::Format::Bitfield<32> getBufferCreateFlagsStr (VkBufferCreateFlags value)
1166{
1167	static const tcu::Format::BitDesc s_desc[] =
1168	{
1169		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_BINDING_BIT,	"VK_BUFFER_CREATE_SPARSE_BINDING_BIT"),
1170		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,	"VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"),
1171		tcu::Format::BitDesc(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,	"VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"),
1172	};
1173	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1174}
1175
1176tcu::Format::Bitfield<32> getBufferUsageFlagsStr (VkBufferUsageFlags value)
1177{
1178	static const tcu::Format::BitDesc s_desc[] =
1179	{
1180		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,			"VK_BUFFER_USAGE_TRANSFER_SRC_BIT"),
1181		tcu::Format::BitDesc(VK_BUFFER_USAGE_TRANSFER_DST_BIT,			"VK_BUFFER_USAGE_TRANSFER_DST_BIT"),
1182		tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT,	"VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"),
1183		tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT,	"VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"),
1184		tcu::Format::BitDesc(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,		"VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"),
1185		tcu::Format::BitDesc(VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,		"VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"),
1186		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDEX_BUFFER_BIT,			"VK_BUFFER_USAGE_INDEX_BUFFER_BIT"),
1187		tcu::Format::BitDesc(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,			"VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"),
1188		tcu::Format::BitDesc(VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT,		"VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"),
1189	};
1190	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1191}
1192
1193tcu::Format::Bitfield<32> getPipelineCreateFlagsStr (VkPipelineCreateFlags value)
1194{
1195	static const tcu::Format::BitDesc s_desc[] =
1196	{
1197		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,	"VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"),
1198		tcu::Format::BitDesc(VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,		"VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"),
1199		tcu::Format::BitDesc(VK_PIPELINE_CREATE_DERIVATIVE_BIT,				"VK_PIPELINE_CREATE_DERIVATIVE_BIT"),
1200	};
1201	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1202}
1203
1204tcu::Format::Bitfield<32> getShaderStageFlagsStr (VkShaderStageFlags value)
1205{
1206	static const tcu::Format::BitDesc s_desc[] =
1207	{
1208		tcu::Format::BitDesc(VK_SHADER_STAGE_VERTEX_BIT,					"VK_SHADER_STAGE_VERTEX_BIT"),
1209		tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,		"VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"),
1210		tcu::Format::BitDesc(VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,	"VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"),
1211		tcu::Format::BitDesc(VK_SHADER_STAGE_GEOMETRY_BIT,					"VK_SHADER_STAGE_GEOMETRY_BIT"),
1212		tcu::Format::BitDesc(VK_SHADER_STAGE_FRAGMENT_BIT,					"VK_SHADER_STAGE_FRAGMENT_BIT"),
1213		tcu::Format::BitDesc(VK_SHADER_STAGE_COMPUTE_BIT,					"VK_SHADER_STAGE_COMPUTE_BIT"),
1214		tcu::Format::BitDesc(VK_SHADER_STAGE_ALL_GRAPHICS,					"VK_SHADER_STAGE_ALL_GRAPHICS"),
1215		tcu::Format::BitDesc(VK_SHADER_STAGE_ALL,							"VK_SHADER_STAGE_ALL"),
1216	};
1217	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1218}
1219
1220tcu::Format::Bitfield<32> getCullModeFlagsStr (VkCullModeFlags value)
1221{
1222	static const tcu::Format::BitDesc s_desc[] =
1223	{
1224		tcu::Format::BitDesc(VK_CULL_MODE_NONE,				"VK_CULL_MODE_NONE"),
1225		tcu::Format::BitDesc(VK_CULL_MODE_FRONT_BIT,		"VK_CULL_MODE_FRONT_BIT"),
1226		tcu::Format::BitDesc(VK_CULL_MODE_BACK_BIT,			"VK_CULL_MODE_BACK_BIT"),
1227		tcu::Format::BitDesc(VK_CULL_MODE_FRONT_AND_BACK,	"VK_CULL_MODE_FRONT_AND_BACK"),
1228	};
1229	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1230}
1231
1232tcu::Format::Bitfield<32> getColorComponentFlagsStr (VkColorComponentFlags value)
1233{
1234	static const tcu::Format::BitDesc s_desc[] =
1235	{
1236		tcu::Format::BitDesc(VK_COLOR_COMPONENT_R_BIT,	"VK_COLOR_COMPONENT_R_BIT"),
1237		tcu::Format::BitDesc(VK_COLOR_COMPONENT_G_BIT,	"VK_COLOR_COMPONENT_G_BIT"),
1238		tcu::Format::BitDesc(VK_COLOR_COMPONENT_B_BIT,	"VK_COLOR_COMPONENT_B_BIT"),
1239		tcu::Format::BitDesc(VK_COLOR_COMPONENT_A_BIT,	"VK_COLOR_COMPONENT_A_BIT"),
1240	};
1241	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1242}
1243
1244tcu::Format::Bitfield<32> getDescriptorSetLayoutCreateFlagsStr (VkDescriptorSetLayoutCreateFlags value)
1245{
1246	static const tcu::Format::BitDesc s_desc[] =
1247	{
1248		tcu::Format::BitDesc(VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,	"VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"),
1249	};
1250	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1251}
1252
1253tcu::Format::Bitfield<32> getDescriptorPoolCreateFlagsStr (VkDescriptorPoolCreateFlags value)
1254{
1255	static const tcu::Format::BitDesc s_desc[] =
1256	{
1257		tcu::Format::BitDesc(VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,	"VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"),
1258	};
1259	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1260}
1261
1262tcu::Format::Bitfield<32> getAttachmentDescriptionFlagsStr (VkAttachmentDescriptionFlags value)
1263{
1264	static const tcu::Format::BitDesc s_desc[] =
1265	{
1266		tcu::Format::BitDesc(VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT,	"VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"),
1267	};
1268	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1269}
1270
1271tcu::Format::Bitfield<32> getAccessFlagsStr (VkAccessFlags value)
1272{
1273	static const tcu::Format::BitDesc s_desc[] =
1274	{
1275		tcu::Format::BitDesc(VK_ACCESS_INDIRECT_COMMAND_READ_BIT,			"VK_ACCESS_INDIRECT_COMMAND_READ_BIT"),
1276		tcu::Format::BitDesc(VK_ACCESS_INDEX_READ_BIT,						"VK_ACCESS_INDEX_READ_BIT"),
1277		tcu::Format::BitDesc(VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,			"VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"),
1278		tcu::Format::BitDesc(VK_ACCESS_UNIFORM_READ_BIT,					"VK_ACCESS_UNIFORM_READ_BIT"),
1279		tcu::Format::BitDesc(VK_ACCESS_INPUT_ATTACHMENT_READ_BIT,			"VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"),
1280		tcu::Format::BitDesc(VK_ACCESS_SHADER_READ_BIT,						"VK_ACCESS_SHADER_READ_BIT"),
1281		tcu::Format::BitDesc(VK_ACCESS_SHADER_WRITE_BIT,					"VK_ACCESS_SHADER_WRITE_BIT"),
1282		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_READ_BIT,			"VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"),
1283		tcu::Format::BitDesc(VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,			"VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"),
1284		tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT,	"VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"),
1285		tcu::Format::BitDesc(VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,	"VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"),
1286		tcu::Format::BitDesc(VK_ACCESS_TRANSFER_READ_BIT,					"VK_ACCESS_TRANSFER_READ_BIT"),
1287		tcu::Format::BitDesc(VK_ACCESS_TRANSFER_WRITE_BIT,					"VK_ACCESS_TRANSFER_WRITE_BIT"),
1288		tcu::Format::BitDesc(VK_ACCESS_HOST_READ_BIT,						"VK_ACCESS_HOST_READ_BIT"),
1289		tcu::Format::BitDesc(VK_ACCESS_HOST_WRITE_BIT,						"VK_ACCESS_HOST_WRITE_BIT"),
1290		tcu::Format::BitDesc(VK_ACCESS_MEMORY_READ_BIT,						"VK_ACCESS_MEMORY_READ_BIT"),
1291		tcu::Format::BitDesc(VK_ACCESS_MEMORY_WRITE_BIT,					"VK_ACCESS_MEMORY_WRITE_BIT"),
1292	};
1293	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1294}
1295
1296tcu::Format::Bitfield<32> getDependencyFlagsStr (VkDependencyFlags value)
1297{
1298	static const tcu::Format::BitDesc s_desc[] =
1299	{
1300		tcu::Format::BitDesc(VK_DEPENDENCY_BY_REGION_BIT,	"VK_DEPENDENCY_BY_REGION_BIT"),
1301	};
1302	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1303}
1304
1305tcu::Format::Bitfield<32> getCommandPoolCreateFlagsStr (VkCommandPoolCreateFlags value)
1306{
1307	static const tcu::Format::BitDesc s_desc[] =
1308	{
1309		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,				"VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"),
1310		tcu::Format::BitDesc(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,	"VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"),
1311	};
1312	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1313}
1314
1315tcu::Format::Bitfield<32> getCommandPoolResetFlagsStr (VkCommandPoolResetFlags value)
1316{
1317	static const tcu::Format::BitDesc s_desc[] =
1318	{
1319		tcu::Format::BitDesc(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT,	"VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"),
1320	};
1321	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1322}
1323
1324tcu::Format::Bitfield<32> getCommandBufferUsageFlagsStr (VkCommandBufferUsageFlags value)
1325{
1326	static const tcu::Format::BitDesc s_desc[] =
1327	{
1328		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,		"VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"),
1329		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT,	"VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"),
1330		tcu::Format::BitDesc(VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT,		"VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"),
1331	};
1332	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1333}
1334
1335tcu::Format::Bitfield<32> getQueryControlFlagsStr (VkQueryControlFlags value)
1336{
1337	static const tcu::Format::BitDesc s_desc[] =
1338	{
1339		tcu::Format::BitDesc(VK_QUERY_CONTROL_PRECISE_BIT,	"VK_QUERY_CONTROL_PRECISE_BIT"),
1340	};
1341	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1342}
1343
1344tcu::Format::Bitfield<32> getCommandBufferResetFlagsStr (VkCommandBufferResetFlags value)
1345{
1346	static const tcu::Format::BitDesc s_desc[] =
1347	{
1348		tcu::Format::BitDesc(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT,	"VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"),
1349	};
1350	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1351}
1352
1353tcu::Format::Bitfield<32> getStencilFaceFlagsStr (VkStencilFaceFlags value)
1354{
1355	static const tcu::Format::BitDesc s_desc[] =
1356	{
1357		tcu::Format::BitDesc(VK_STENCIL_FACE_FRONT_BIT,	"VK_STENCIL_FACE_FRONT_BIT"),
1358		tcu::Format::BitDesc(VK_STENCIL_FACE_BACK_BIT,	"VK_STENCIL_FACE_BACK_BIT"),
1359		tcu::Format::BitDesc(VK_STENCIL_FRONT_AND_BACK,	"VK_STENCIL_FRONT_AND_BACK"),
1360	};
1361	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1362}
1363
1364tcu::Format::Bitfield<32> getSurfaceTransformFlagsKHRStr (VkSurfaceTransformFlagsKHR value)
1365{
1366	static const tcu::Format::BitDesc s_desc[] =
1367	{
1368		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,						"VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"),
1369		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"),
1370		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"),
1371		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR,					"VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"),
1372		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR,			"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"),
1373		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"),
1374		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"),
1375		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR,	"VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"),
1376		tcu::Format::BitDesc(VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR,						"VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"),
1377	};
1378	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1379}
1380
1381tcu::Format::Bitfield<32> getCompositeAlphaFlagsKHRStr (VkCompositeAlphaFlagsKHR value)
1382{
1383	static const tcu::Format::BitDesc s_desc[] =
1384	{
1385		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,				"VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"),
1386		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,		"VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"),
1387		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,	"VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"),
1388		tcu::Format::BitDesc(VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,			"VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"),
1389	};
1390	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1391}
1392
1393tcu::Format::Bitfield<32> getDisplayPlaneAlphaFlagsKHRStr (VkDisplayPlaneAlphaFlagsKHR value)
1394{
1395	static const tcu::Format::BitDesc s_desc[] =
1396	{
1397		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR,						"VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"),
1398		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR,						"VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"),
1399		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR,					"VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"),
1400		tcu::Format::BitDesc(VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR,	"VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"),
1401	};
1402	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1403}
1404
1405tcu::Format::Bitfield<32> getDebugReportFlagsEXTStr (VkDebugReportFlagsEXT value)
1406{
1407	static const tcu::Format::BitDesc s_desc[] =
1408	{
1409		tcu::Format::BitDesc(VK_DEBUG_REPORT_INFORMATION_BIT_EXT,			"VK_DEBUG_REPORT_INFORMATION_BIT_EXT"),
1410		tcu::Format::BitDesc(VK_DEBUG_REPORT_WARNING_BIT_EXT,				"VK_DEBUG_REPORT_WARNING_BIT_EXT"),
1411		tcu::Format::BitDesc(VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT,	"VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"),
1412		tcu::Format::BitDesc(VK_DEBUG_REPORT_ERROR_BIT_EXT,					"VK_DEBUG_REPORT_ERROR_BIT_EXT"),
1413		tcu::Format::BitDesc(VK_DEBUG_REPORT_DEBUG_BIT_EXT,					"VK_DEBUG_REPORT_DEBUG_BIT_EXT"),
1414	};
1415	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1416}
1417
1418tcu::Format::Bitfield<32> getExternalMemoryHandleTypeFlagsNVStr (VkExternalMemoryHandleTypeFlagsNV value)
1419{
1420	static const tcu::Format::BitDesc s_desc[] =
1421	{
1422		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"),
1423		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV,	"VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"),
1424		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV,			"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"),
1425		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV,		"VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"),
1426	};
1427	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1428}
1429
1430tcu::Format::Bitfield<32> getExternalMemoryFeatureFlagsNVStr (VkExternalMemoryFeatureFlagsNV value)
1431{
1432	static const tcu::Format::BitDesc s_desc[] =
1433	{
1434		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV,	"VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"),
1435		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV,		"VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"),
1436		tcu::Format::BitDesc(VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV,		"VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"),
1437	};
1438	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1439}
1440
1441tcu::Format::Bitfield<32> getIndirectCommandsLayoutUsageFlagsNVXStr (VkIndirectCommandsLayoutUsageFlagsNVX value)
1442{
1443	static const tcu::Format::BitDesc s_desc[] =
1444	{
1445		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX"),
1446		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX"),
1447		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX"),
1448		tcu::Format::BitDesc(VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX,	"VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX"),
1449	};
1450	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1451}
1452
1453tcu::Format::Bitfield<32> getObjectEntryUsageFlagsNVXStr (VkObjectEntryUsageFlagsNVX value)
1454{
1455	static const tcu::Format::BitDesc s_desc[] =
1456	{
1457		tcu::Format::BitDesc(VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX,	"VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX"),
1458		tcu::Format::BitDesc(VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX,		"VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX"),
1459	};
1460	return tcu::Format::Bitfield<32>(value, DE_ARRAY_BEGIN(s_desc), DE_ARRAY_END(s_desc));
1461}
1462
1463tcu::Format::Bitfield<32> getInstanceCreateFlagsStr (VkInstanceCreateFlags value)
1464{
1465	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1466}
1467
1468tcu::Format::Bitfield<32> getDeviceCreateFlagsStr (VkDeviceCreateFlags value)
1469{
1470	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1471}
1472
1473tcu::Format::Bitfield<32> getDeviceQueueCreateFlagsStr (VkDeviceQueueCreateFlags value)
1474{
1475	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1476}
1477
1478tcu::Format::Bitfield<32> getMemoryMapFlagsStr (VkMemoryMapFlags value)
1479{
1480	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1481}
1482
1483tcu::Format::Bitfield<32> getSemaphoreCreateFlagsStr (VkSemaphoreCreateFlags value)
1484{
1485	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1486}
1487
1488tcu::Format::Bitfield<32> getEventCreateFlagsStr (VkEventCreateFlags value)
1489{
1490	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1491}
1492
1493tcu::Format::Bitfield<32> getQueryPoolCreateFlagsStr (VkQueryPoolCreateFlags value)
1494{
1495	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1496}
1497
1498tcu::Format::Bitfield<32> getBufferViewCreateFlagsStr (VkBufferViewCreateFlags value)
1499{
1500	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1501}
1502
1503tcu::Format::Bitfield<32> getImageViewCreateFlagsStr (VkImageViewCreateFlags value)
1504{
1505	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1506}
1507
1508tcu::Format::Bitfield<32> getShaderModuleCreateFlagsStr (VkShaderModuleCreateFlags value)
1509{
1510	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1511}
1512
1513tcu::Format::Bitfield<32> getPipelineCacheCreateFlagsStr (VkPipelineCacheCreateFlags value)
1514{
1515	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1516}
1517
1518tcu::Format::Bitfield<32> getPipelineShaderStageCreateFlagsStr (VkPipelineShaderStageCreateFlags value)
1519{
1520	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1521}
1522
1523tcu::Format::Bitfield<32> getPipelineVertexInputStateCreateFlagsStr (VkPipelineVertexInputStateCreateFlags value)
1524{
1525	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1526}
1527
1528tcu::Format::Bitfield<32> getPipelineInputAssemblyStateCreateFlagsStr (VkPipelineInputAssemblyStateCreateFlags value)
1529{
1530	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1531}
1532
1533tcu::Format::Bitfield<32> getPipelineTessellationStateCreateFlagsStr (VkPipelineTessellationStateCreateFlags value)
1534{
1535	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1536}
1537
1538tcu::Format::Bitfield<32> getPipelineViewportStateCreateFlagsStr (VkPipelineViewportStateCreateFlags value)
1539{
1540	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1541}
1542
1543tcu::Format::Bitfield<32> getPipelineRasterizationStateCreateFlagsStr (VkPipelineRasterizationStateCreateFlags value)
1544{
1545	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1546}
1547
1548tcu::Format::Bitfield<32> getPipelineMultisampleStateCreateFlagsStr (VkPipelineMultisampleStateCreateFlags value)
1549{
1550	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1551}
1552
1553tcu::Format::Bitfield<32> getPipelineDepthStencilStateCreateFlagsStr (VkPipelineDepthStencilStateCreateFlags value)
1554{
1555	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1556}
1557
1558tcu::Format::Bitfield<32> getPipelineColorBlendStateCreateFlagsStr (VkPipelineColorBlendStateCreateFlags value)
1559{
1560	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1561}
1562
1563tcu::Format::Bitfield<32> getPipelineDynamicStateCreateFlagsStr (VkPipelineDynamicStateCreateFlags value)
1564{
1565	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1566}
1567
1568tcu::Format::Bitfield<32> getPipelineLayoutCreateFlagsStr (VkPipelineLayoutCreateFlags value)
1569{
1570	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1571}
1572
1573tcu::Format::Bitfield<32> getSamplerCreateFlagsStr (VkSamplerCreateFlags value)
1574{
1575	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1576}
1577
1578tcu::Format::Bitfield<32> getDescriptorPoolResetFlagsStr (VkDescriptorPoolResetFlags value)
1579{
1580	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1581}
1582
1583tcu::Format::Bitfield<32> getFramebufferCreateFlagsStr (VkFramebufferCreateFlags value)
1584{
1585	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1586}
1587
1588tcu::Format::Bitfield<32> getRenderPassCreateFlagsStr (VkRenderPassCreateFlags value)
1589{
1590	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1591}
1592
1593tcu::Format::Bitfield<32> getSubpassDescriptionFlagsStr (VkSubpassDescriptionFlags value)
1594{
1595	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1596}
1597
1598tcu::Format::Bitfield<32> getSwapchainCreateFlagsKHRStr (VkSwapchainCreateFlagsKHR value)
1599{
1600	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1601}
1602
1603tcu::Format::Bitfield<32> getDisplayModeCreateFlagsKHRStr (VkDisplayModeCreateFlagsKHR value)
1604{
1605	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1606}
1607
1608tcu::Format::Bitfield<32> getDisplaySurfaceCreateFlagsKHRStr (VkDisplaySurfaceCreateFlagsKHR value)
1609{
1610	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1611}
1612
1613tcu::Format::Bitfield<32> getXlibSurfaceCreateFlagsKHRStr (VkXlibSurfaceCreateFlagsKHR value)
1614{
1615	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1616}
1617
1618tcu::Format::Bitfield<32> getXcbSurfaceCreateFlagsKHRStr (VkXcbSurfaceCreateFlagsKHR value)
1619{
1620	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1621}
1622
1623tcu::Format::Bitfield<32> getWaylandSurfaceCreateFlagsKHRStr (VkWaylandSurfaceCreateFlagsKHR value)
1624{
1625	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1626}
1627
1628tcu::Format::Bitfield<32> getMirSurfaceCreateFlagsKHRStr (VkMirSurfaceCreateFlagsKHR value)
1629{
1630	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1631}
1632
1633tcu::Format::Bitfield<32> getAndroidSurfaceCreateFlagsKHRStr (VkAndroidSurfaceCreateFlagsKHR value)
1634{
1635	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1636}
1637
1638tcu::Format::Bitfield<32> getWin32SurfaceCreateFlagsKHRStr (VkWin32SurfaceCreateFlagsKHR value)
1639{
1640	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1641}
1642
1643tcu::Format::Bitfield<32> getCommandPoolTrimFlagsKHRStr (VkCommandPoolTrimFlagsKHR value)
1644{
1645	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1646}
1647
1648tcu::Format::Bitfield<32> getDescriptorUpdateTemplateCreateFlagsKHRStr (VkDescriptorUpdateTemplateCreateFlagsKHR value)
1649{
1650	return tcu::Format::Bitfield<32>(value, DE_NULL, DE_NULL);
1651}
1652
1653std::ostream& operator<< (std::ostream& s, const VkApplicationInfo& value)
1654{
1655	s << "VkApplicationInfo = {\n";
1656	s << "\tsType = " << value.sType << '\n';
1657	s << "\tpNext = " << value.pNext << '\n';
1658	s << "\tpApplicationName = " << getCharPtrStr(value.pApplicationName) << '\n';
1659	s << "\tapplicationVersion = " << value.applicationVersion << '\n';
1660	s << "\tpEngineName = " << getCharPtrStr(value.pEngineName) << '\n';
1661	s << "\tengineVersion = " << value.engineVersion << '\n';
1662	s << "\tapiVersion = " << value.apiVersion << '\n';
1663	s << '}';
1664	return s;
1665}
1666
1667std::ostream& operator<< (std::ostream& s, const VkInstanceCreateInfo& value)
1668{
1669	s << "VkInstanceCreateInfo = {\n";
1670	s << "\tsType = " << value.sType << '\n';
1671	s << "\tpNext = " << value.pNext << '\n';
1672	s << "\tflags = " << getInstanceCreateFlagsStr(value.flags) << '\n';
1673	s << "\tpApplicationInfo = " << value.pApplicationInfo << '\n';
1674	s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
1675	s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
1676	s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
1677	s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
1678	s << '}';
1679	return s;
1680}
1681
1682std::ostream& operator<< (std::ostream& s, const VkAllocationCallbacks& value)
1683{
1684	s << "VkAllocationCallbacks = {\n";
1685	s << "\tpUserData = " << value.pUserData << '\n';
1686	s << "\tpfnAllocation = " << value.pfnAllocation << '\n';
1687	s << "\tpfnReallocation = " << value.pfnReallocation << '\n';
1688	s << "\tpfnFree = " << value.pfnFree << '\n';
1689	s << "\tpfnInternalAllocation = " << value.pfnInternalAllocation << '\n';
1690	s << "\tpfnInternalFree = " << value.pfnInternalFree << '\n';
1691	s << '}';
1692	return s;
1693}
1694
1695std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures& value)
1696{
1697	s << "VkPhysicalDeviceFeatures = {\n";
1698	s << "\trobustBufferAccess = " << value.robustBufferAccess << '\n';
1699	s << "\tfullDrawIndexUint32 = " << value.fullDrawIndexUint32 << '\n';
1700	s << "\timageCubeArray = " << value.imageCubeArray << '\n';
1701	s << "\tindependentBlend = " << value.independentBlend << '\n';
1702	s << "\tgeometryShader = " << value.geometryShader << '\n';
1703	s << "\ttessellationShader = " << value.tessellationShader << '\n';
1704	s << "\tsampleRateShading = " << value.sampleRateShading << '\n';
1705	s << "\tdualSrcBlend = " << value.dualSrcBlend << '\n';
1706	s << "\tlogicOp = " << value.logicOp << '\n';
1707	s << "\tmultiDrawIndirect = " << value.multiDrawIndirect << '\n';
1708	s << "\tdrawIndirectFirstInstance = " << value.drawIndirectFirstInstance << '\n';
1709	s << "\tdepthClamp = " << value.depthClamp << '\n';
1710	s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
1711	s << "\tfillModeNonSolid = " << value.fillModeNonSolid << '\n';
1712	s << "\tdepthBounds = " << value.depthBounds << '\n';
1713	s << "\twideLines = " << value.wideLines << '\n';
1714	s << "\tlargePoints = " << value.largePoints << '\n';
1715	s << "\talphaToOne = " << value.alphaToOne << '\n';
1716	s << "\tmultiViewport = " << value.multiViewport << '\n';
1717	s << "\tsamplerAnisotropy = " << value.samplerAnisotropy << '\n';
1718	s << "\ttextureCompressionETC2 = " << value.textureCompressionETC2 << '\n';
1719	s << "\ttextureCompressionASTC_LDR = " << value.textureCompressionASTC_LDR << '\n';
1720	s << "\ttextureCompressionBC = " << value.textureCompressionBC << '\n';
1721	s << "\tocclusionQueryPrecise = " << value.occlusionQueryPrecise << '\n';
1722	s << "\tpipelineStatisticsQuery = " << value.pipelineStatisticsQuery << '\n';
1723	s << "\tvertexPipelineStoresAndAtomics = " << value.vertexPipelineStoresAndAtomics << '\n';
1724	s << "\tfragmentStoresAndAtomics = " << value.fragmentStoresAndAtomics << '\n';
1725	s << "\tshaderTessellationAndGeometryPointSize = " << value.shaderTessellationAndGeometryPointSize << '\n';
1726	s << "\tshaderImageGatherExtended = " << value.shaderImageGatherExtended << '\n';
1727	s << "\tshaderStorageImageExtendedFormats = " << value.shaderStorageImageExtendedFormats << '\n';
1728	s << "\tshaderStorageImageMultisample = " << value.shaderStorageImageMultisample << '\n';
1729	s << "\tshaderStorageImageReadWithoutFormat = " << value.shaderStorageImageReadWithoutFormat << '\n';
1730	s << "\tshaderStorageImageWriteWithoutFormat = " << value.shaderStorageImageWriteWithoutFormat << '\n';
1731	s << "\tshaderUniformBufferArrayDynamicIndexing = " << value.shaderUniformBufferArrayDynamicIndexing << '\n';
1732	s << "\tshaderSampledImageArrayDynamicIndexing = " << value.shaderSampledImageArrayDynamicIndexing << '\n';
1733	s << "\tshaderStorageBufferArrayDynamicIndexing = " << value.shaderStorageBufferArrayDynamicIndexing << '\n';
1734	s << "\tshaderStorageImageArrayDynamicIndexing = " << value.shaderStorageImageArrayDynamicIndexing << '\n';
1735	s << "\tshaderClipDistance = " << value.shaderClipDistance << '\n';
1736	s << "\tshaderCullDistance = " << value.shaderCullDistance << '\n';
1737	s << "\tshaderFloat64 = " << value.shaderFloat64 << '\n';
1738	s << "\tshaderInt64 = " << value.shaderInt64 << '\n';
1739	s << "\tshaderInt16 = " << value.shaderInt16 << '\n';
1740	s << "\tshaderResourceResidency = " << value.shaderResourceResidency << '\n';
1741	s << "\tshaderResourceMinLod = " << value.shaderResourceMinLod << '\n';
1742	s << "\tsparseBinding = " << value.sparseBinding << '\n';
1743	s << "\tsparseResidencyBuffer = " << value.sparseResidencyBuffer << '\n';
1744	s << "\tsparseResidencyImage2D = " << value.sparseResidencyImage2D << '\n';
1745	s << "\tsparseResidencyImage3D = " << value.sparseResidencyImage3D << '\n';
1746	s << "\tsparseResidency2Samples = " << value.sparseResidency2Samples << '\n';
1747	s << "\tsparseResidency4Samples = " << value.sparseResidency4Samples << '\n';
1748	s << "\tsparseResidency8Samples = " << value.sparseResidency8Samples << '\n';
1749	s << "\tsparseResidency16Samples = " << value.sparseResidency16Samples << '\n';
1750	s << "\tsparseResidencyAliased = " << value.sparseResidencyAliased << '\n';
1751	s << "\tvariableMultisampleRate = " << value.variableMultisampleRate << '\n';
1752	s << "\tinheritedQueries = " << value.inheritedQueries << '\n';
1753	s << '}';
1754	return s;
1755}
1756
1757std::ostream& operator<< (std::ostream& s, const VkFormatProperties& value)
1758{
1759	s << "VkFormatProperties = {\n";
1760	s << "\tlinearTilingFeatures = " << getFormatFeatureFlagsStr(value.linearTilingFeatures) << '\n';
1761	s << "\toptimalTilingFeatures = " << getFormatFeatureFlagsStr(value.optimalTilingFeatures) << '\n';
1762	s << "\tbufferFeatures = " << getFormatFeatureFlagsStr(value.bufferFeatures) << '\n';
1763	s << '}';
1764	return s;
1765}
1766
1767std::ostream& operator<< (std::ostream& s, const VkExtent3D& value)
1768{
1769	s << "VkExtent3D = {\n";
1770	s << "\twidth = " << value.width << '\n';
1771	s << "\theight = " << value.height << '\n';
1772	s << "\tdepth = " << value.depth << '\n';
1773	s << '}';
1774	return s;
1775}
1776
1777std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties& value)
1778{
1779	s << "VkImageFormatProperties = {\n";
1780	s << "\tmaxExtent = " << value.maxExtent << '\n';
1781	s << "\tmaxMipLevels = " << value.maxMipLevels << '\n';
1782	s << "\tmaxArrayLayers = " << value.maxArrayLayers << '\n';
1783	s << "\tsampleCounts = " << getSampleCountFlagsStr(value.sampleCounts) << '\n';
1784	s << "\tmaxResourceSize = " << value.maxResourceSize << '\n';
1785	s << '}';
1786	return s;
1787}
1788
1789std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceLimits& value)
1790{
1791	s << "VkPhysicalDeviceLimits = {\n";
1792	s << "\tmaxImageDimension1D = " << value.maxImageDimension1D << '\n';
1793	s << "\tmaxImageDimension2D = " << value.maxImageDimension2D << '\n';
1794	s << "\tmaxImageDimension3D = " << value.maxImageDimension3D << '\n';
1795	s << "\tmaxImageDimensionCube = " << value.maxImageDimensionCube << '\n';
1796	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
1797	s << "\tmaxTexelBufferElements = " << value.maxTexelBufferElements << '\n';
1798	s << "\tmaxUniformBufferRange = " << value.maxUniformBufferRange << '\n';
1799	s << "\tmaxStorageBufferRange = " << value.maxStorageBufferRange << '\n';
1800	s << "\tmaxPushConstantsSize = " << value.maxPushConstantsSize << '\n';
1801	s << "\tmaxMemoryAllocationCount = " << value.maxMemoryAllocationCount << '\n';
1802	s << "\tmaxSamplerAllocationCount = " << value.maxSamplerAllocationCount << '\n';
1803	s << "\tbufferImageGranularity = " << value.bufferImageGranularity << '\n';
1804	s << "\tsparseAddressSpaceSize = " << value.sparseAddressSpaceSize << '\n';
1805	s << "\tmaxBoundDescriptorSets = " << value.maxBoundDescriptorSets << '\n';
1806	s << "\tmaxPerStageDescriptorSamplers = " << value.maxPerStageDescriptorSamplers << '\n';
1807	s << "\tmaxPerStageDescriptorUniformBuffers = " << value.maxPerStageDescriptorUniformBuffers << '\n';
1808	s << "\tmaxPerStageDescriptorStorageBuffers = " << value.maxPerStageDescriptorStorageBuffers << '\n';
1809	s << "\tmaxPerStageDescriptorSampledImages = " << value.maxPerStageDescriptorSampledImages << '\n';
1810	s << "\tmaxPerStageDescriptorStorageImages = " << value.maxPerStageDescriptorStorageImages << '\n';
1811	s << "\tmaxPerStageDescriptorInputAttachments = " << value.maxPerStageDescriptorInputAttachments << '\n';
1812	s << "\tmaxPerStageResources = " << value.maxPerStageResources << '\n';
1813	s << "\tmaxDescriptorSetSamplers = " << value.maxDescriptorSetSamplers << '\n';
1814	s << "\tmaxDescriptorSetUniformBuffers = " << value.maxDescriptorSetUniformBuffers << '\n';
1815	s << "\tmaxDescriptorSetUniformBuffersDynamic = " << value.maxDescriptorSetUniformBuffersDynamic << '\n';
1816	s << "\tmaxDescriptorSetStorageBuffers = " << value.maxDescriptorSetStorageBuffers << '\n';
1817	s << "\tmaxDescriptorSetStorageBuffersDynamic = " << value.maxDescriptorSetStorageBuffersDynamic << '\n';
1818	s << "\tmaxDescriptorSetSampledImages = " << value.maxDescriptorSetSampledImages << '\n';
1819	s << "\tmaxDescriptorSetStorageImages = " << value.maxDescriptorSetStorageImages << '\n';
1820	s << "\tmaxDescriptorSetInputAttachments = " << value.maxDescriptorSetInputAttachments << '\n';
1821	s << "\tmaxVertexInputAttributes = " << value.maxVertexInputAttributes << '\n';
1822	s << "\tmaxVertexInputBindings = " << value.maxVertexInputBindings << '\n';
1823	s << "\tmaxVertexInputAttributeOffset = " << value.maxVertexInputAttributeOffset << '\n';
1824	s << "\tmaxVertexInputBindingStride = " << value.maxVertexInputBindingStride << '\n';
1825	s << "\tmaxVertexOutputComponents = " << value.maxVertexOutputComponents << '\n';
1826	s << "\tmaxTessellationGenerationLevel = " << value.maxTessellationGenerationLevel << '\n';
1827	s << "\tmaxTessellationPatchSize = " << value.maxTessellationPatchSize << '\n';
1828	s << "\tmaxTessellationControlPerVertexInputComponents = " << value.maxTessellationControlPerVertexInputComponents << '\n';
1829	s << "\tmaxTessellationControlPerVertexOutputComponents = " << value.maxTessellationControlPerVertexOutputComponents << '\n';
1830	s << "\tmaxTessellationControlPerPatchOutputComponents = " << value.maxTessellationControlPerPatchOutputComponents << '\n';
1831	s << "\tmaxTessellationControlTotalOutputComponents = " << value.maxTessellationControlTotalOutputComponents << '\n';
1832	s << "\tmaxTessellationEvaluationInputComponents = " << value.maxTessellationEvaluationInputComponents << '\n';
1833	s << "\tmaxTessellationEvaluationOutputComponents = " << value.maxTessellationEvaluationOutputComponents << '\n';
1834	s << "\tmaxGeometryShaderInvocations = " << value.maxGeometryShaderInvocations << '\n';
1835	s << "\tmaxGeometryInputComponents = " << value.maxGeometryInputComponents << '\n';
1836	s << "\tmaxGeometryOutputComponents = " << value.maxGeometryOutputComponents << '\n';
1837	s << "\tmaxGeometryOutputVertices = " << value.maxGeometryOutputVertices << '\n';
1838	s << "\tmaxGeometryTotalOutputComponents = " << value.maxGeometryTotalOutputComponents << '\n';
1839	s << "\tmaxFragmentInputComponents = " << value.maxFragmentInputComponents << '\n';
1840	s << "\tmaxFragmentOutputAttachments = " << value.maxFragmentOutputAttachments << '\n';
1841	s << "\tmaxFragmentDualSrcAttachments = " << value.maxFragmentDualSrcAttachments << '\n';
1842	s << "\tmaxFragmentCombinedOutputResources = " << value.maxFragmentCombinedOutputResources << '\n';
1843	s << "\tmaxComputeSharedMemorySize = " << value.maxComputeSharedMemorySize << '\n';
1844	s << "\tmaxComputeWorkGroupCount = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupCount), DE_ARRAY_END(value.maxComputeWorkGroupCount)) << '\n';
1845	s << "\tmaxComputeWorkGroupInvocations = " << value.maxComputeWorkGroupInvocations << '\n';
1846	s << "\tmaxComputeWorkGroupSize = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxComputeWorkGroupSize), DE_ARRAY_END(value.maxComputeWorkGroupSize)) << '\n';
1847	s << "\tsubPixelPrecisionBits = " << value.subPixelPrecisionBits << '\n';
1848	s << "\tsubTexelPrecisionBits = " << value.subTexelPrecisionBits << '\n';
1849	s << "\tmipmapPrecisionBits = " << value.mipmapPrecisionBits << '\n';
1850	s << "\tmaxDrawIndexedIndexValue = " << value.maxDrawIndexedIndexValue << '\n';
1851	s << "\tmaxDrawIndirectCount = " << value.maxDrawIndirectCount << '\n';
1852	s << "\tmaxSamplerLodBias = " << value.maxSamplerLodBias << '\n';
1853	s << "\tmaxSamplerAnisotropy = " << value.maxSamplerAnisotropy << '\n';
1854	s << "\tmaxViewports = " << value.maxViewports << '\n';
1855	s << "\tmaxViewportDimensions = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.maxViewportDimensions), DE_ARRAY_END(value.maxViewportDimensions)) << '\n';
1856	s << "\tviewportBoundsRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.viewportBoundsRange), DE_ARRAY_END(value.viewportBoundsRange)) << '\n';
1857	s << "\tviewportSubPixelBits = " << value.viewportSubPixelBits << '\n';
1858	s << "\tminMemoryMapAlignment = " << value.minMemoryMapAlignment << '\n';
1859	s << "\tminTexelBufferOffsetAlignment = " << value.minTexelBufferOffsetAlignment << '\n';
1860	s << "\tminUniformBufferOffsetAlignment = " << value.minUniformBufferOffsetAlignment << '\n';
1861	s << "\tminStorageBufferOffsetAlignment = " << value.minStorageBufferOffsetAlignment << '\n';
1862	s << "\tminTexelOffset = " << value.minTexelOffset << '\n';
1863	s << "\tmaxTexelOffset = " << value.maxTexelOffset << '\n';
1864	s << "\tminTexelGatherOffset = " << value.minTexelGatherOffset << '\n';
1865	s << "\tmaxTexelGatherOffset = " << value.maxTexelGatherOffset << '\n';
1866	s << "\tminInterpolationOffset = " << value.minInterpolationOffset << '\n';
1867	s << "\tmaxInterpolationOffset = " << value.maxInterpolationOffset << '\n';
1868	s << "\tsubPixelInterpolationOffsetBits = " << value.subPixelInterpolationOffsetBits << '\n';
1869	s << "\tmaxFramebufferWidth = " << value.maxFramebufferWidth << '\n';
1870	s << "\tmaxFramebufferHeight = " << value.maxFramebufferHeight << '\n';
1871	s << "\tmaxFramebufferLayers = " << value.maxFramebufferLayers << '\n';
1872	s << "\tframebufferColorSampleCounts = " << getSampleCountFlagsStr(value.framebufferColorSampleCounts) << '\n';
1873	s << "\tframebufferDepthSampleCounts = " << getSampleCountFlagsStr(value.framebufferDepthSampleCounts) << '\n';
1874	s << "\tframebufferStencilSampleCounts = " << getSampleCountFlagsStr(value.framebufferStencilSampleCounts) << '\n';
1875	s << "\tframebufferNoAttachmentsSampleCounts = " << getSampleCountFlagsStr(value.framebufferNoAttachmentsSampleCounts) << '\n';
1876	s << "\tmaxColorAttachments = " << value.maxColorAttachments << '\n';
1877	s << "\tsampledImageColorSampleCounts = " << getSampleCountFlagsStr(value.sampledImageColorSampleCounts) << '\n';
1878	s << "\tsampledImageIntegerSampleCounts = " << getSampleCountFlagsStr(value.sampledImageIntegerSampleCounts) << '\n';
1879	s << "\tsampledImageDepthSampleCounts = " << getSampleCountFlagsStr(value.sampledImageDepthSampleCounts) << '\n';
1880	s << "\tsampledImageStencilSampleCounts = " << getSampleCountFlagsStr(value.sampledImageStencilSampleCounts) << '\n';
1881	s << "\tstorageImageSampleCounts = " << getSampleCountFlagsStr(value.storageImageSampleCounts) << '\n';
1882	s << "\tmaxSampleMaskWords = " << value.maxSampleMaskWords << '\n';
1883	s << "\ttimestampComputeAndGraphics = " << value.timestampComputeAndGraphics << '\n';
1884	s << "\ttimestampPeriod = " << value.timestampPeriod << '\n';
1885	s << "\tmaxClipDistances = " << value.maxClipDistances << '\n';
1886	s << "\tmaxCullDistances = " << value.maxCullDistances << '\n';
1887	s << "\tmaxCombinedClipAndCullDistances = " << value.maxCombinedClipAndCullDistances << '\n';
1888	s << "\tdiscreteQueuePriorities = " << value.discreteQueuePriorities << '\n';
1889	s << "\tpointSizeRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.pointSizeRange), DE_ARRAY_END(value.pointSizeRange)) << '\n';
1890	s << "\tlineWidthRange = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.lineWidthRange), DE_ARRAY_END(value.lineWidthRange)) << '\n';
1891	s << "\tpointSizeGranularity = " << value.pointSizeGranularity << '\n';
1892	s << "\tlineWidthGranularity = " << value.lineWidthGranularity << '\n';
1893	s << "\tstrictLines = " << value.strictLines << '\n';
1894	s << "\tstandardSampleLocations = " << value.standardSampleLocations << '\n';
1895	s << "\toptimalBufferCopyOffsetAlignment = " << value.optimalBufferCopyOffsetAlignment << '\n';
1896	s << "\toptimalBufferCopyRowPitchAlignment = " << value.optimalBufferCopyRowPitchAlignment << '\n';
1897	s << "\tnonCoherentAtomSize = " << value.nonCoherentAtomSize << '\n';
1898	s << '}';
1899	return s;
1900}
1901
1902std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseProperties& value)
1903{
1904	s << "VkPhysicalDeviceSparseProperties = {\n";
1905	s << "\tresidencyStandard2DBlockShape = " << value.residencyStandard2DBlockShape << '\n';
1906	s << "\tresidencyStandard2DMultisampleBlockShape = " << value.residencyStandard2DMultisampleBlockShape << '\n';
1907	s << "\tresidencyStandard3DBlockShape = " << value.residencyStandard3DBlockShape << '\n';
1908	s << "\tresidencyAlignedMipSize = " << value.residencyAlignedMipSize << '\n';
1909	s << "\tresidencyNonResidentStrict = " << value.residencyNonResidentStrict << '\n';
1910	s << '}';
1911	return s;
1912}
1913
1914std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties& value)
1915{
1916	s << "VkPhysicalDeviceProperties = {\n";
1917	s << "\tapiVersion = " << value.apiVersion << '\n';
1918	s << "\tdriverVersion = " << value.driverVersion << '\n';
1919	s << "\tvendorID = " << value.vendorID << '\n';
1920	s << "\tdeviceID = " << value.deviceID << '\n';
1921	s << "\tdeviceType = " << value.deviceType << '\n';
1922	s << "\tdeviceName = " << (const char*)value.deviceName << '\n';
1923	s << "\tpipelineCacheUUID = " << '\n' << tcu::formatArray(tcu::Format::HexIterator<deUint8>(DE_ARRAY_BEGIN(value.pipelineCacheUUID)), tcu::Format::HexIterator<deUint8>(DE_ARRAY_END(value.pipelineCacheUUID))) << '\n';
1924	s << "\tlimits = " << value.limits << '\n';
1925	s << "\tsparseProperties = " << value.sparseProperties << '\n';
1926	s << '}';
1927	return s;
1928}
1929
1930std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties& value)
1931{
1932	s << "VkQueueFamilyProperties = {\n";
1933	s << "\tqueueFlags = " << getQueueFlagsStr(value.queueFlags) << '\n';
1934	s << "\tqueueCount = " << value.queueCount << '\n';
1935	s << "\ttimestampValidBits = " << value.timestampValidBits << '\n';
1936	s << "\tminImageTransferGranularity = " << value.minImageTransferGranularity << '\n';
1937	s << '}';
1938	return s;
1939}
1940
1941std::ostream& operator<< (std::ostream& s, const VkMemoryType& value)
1942{
1943	s << "VkMemoryType = {\n";
1944	s << "\tpropertyFlags = " << getMemoryPropertyFlagsStr(value.propertyFlags) << '\n';
1945	s << "\theapIndex = " << value.heapIndex << '\n';
1946	s << '}';
1947	return s;
1948}
1949
1950std::ostream& operator<< (std::ostream& s, const VkMemoryHeap& value)
1951{
1952	s << "VkMemoryHeap = {\n";
1953	s << "\tsize = " << value.size << '\n';
1954	s << "\tflags = " << getMemoryHeapFlagsStr(value.flags) << '\n';
1955	s << '}';
1956	return s;
1957}
1958
1959std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties& value)
1960{
1961	s << "VkPhysicalDeviceMemoryProperties = {\n";
1962	s << "\tmemoryTypeCount = " << value.memoryTypeCount << '\n';
1963	s << "\tmemoryTypes = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryTypes), DE_ARRAY_BEGIN(value.memoryTypes) + value.memoryTypeCount) << '\n';
1964	s << "\tmemoryHeapCount = " << value.memoryHeapCount << '\n';
1965	s << "\tmemoryHeaps = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.memoryHeaps), DE_ARRAY_BEGIN(value.memoryHeaps) + value.memoryHeapCount) << '\n';
1966	s << '}';
1967	return s;
1968}
1969
1970std::ostream& operator<< (std::ostream& s, const VkDeviceQueueCreateInfo& value)
1971{
1972	s << "VkDeviceQueueCreateInfo = {\n";
1973	s << "\tsType = " << value.sType << '\n';
1974	s << "\tpNext = " << value.pNext << '\n';
1975	s << "\tflags = " << getDeviceQueueCreateFlagsStr(value.flags) << '\n';
1976	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
1977	s << "\tqueueCount = " << value.queueCount << '\n';
1978	s << "\tpQueuePriorities = " << value.pQueuePriorities << '\n';
1979	s << '}';
1980	return s;
1981}
1982
1983std::ostream& operator<< (std::ostream& s, const VkDeviceCreateInfo& value)
1984{
1985	s << "VkDeviceCreateInfo = {\n";
1986	s << "\tsType = " << value.sType << '\n';
1987	s << "\tpNext = " << value.pNext << '\n';
1988	s << "\tflags = " << getDeviceCreateFlagsStr(value.flags) << '\n';
1989	s << "\tqueueCreateInfoCount = " << value.queueCreateInfoCount << '\n';
1990	s << "\tpQueueCreateInfos = " << value.pQueueCreateInfos << '\n';
1991	s << "\tenabledLayerCount = " << value.enabledLayerCount << '\n';
1992	s << "\tppEnabledLayerNames = " << value.ppEnabledLayerNames << '\n';
1993	s << "\tenabledExtensionCount = " << value.enabledExtensionCount << '\n';
1994	s << "\tppEnabledExtensionNames = " << value.ppEnabledExtensionNames << '\n';
1995	s << "\tpEnabledFeatures = " << value.pEnabledFeatures << '\n';
1996	s << '}';
1997	return s;
1998}
1999
2000std::ostream& operator<< (std::ostream& s, const VkExtensionProperties& value)
2001{
2002	s << "VkExtensionProperties = {\n";
2003	s << "\textensionName = " << (const char*)value.extensionName << '\n';
2004	s << "\tspecVersion = " << value.specVersion << '\n';
2005	s << '}';
2006	return s;
2007}
2008
2009std::ostream& operator<< (std::ostream& s, const VkLayerProperties& value)
2010{
2011	s << "VkLayerProperties = {\n";
2012	s << "\tlayerName = " << (const char*)value.layerName << '\n';
2013	s << "\tspecVersion = " << value.specVersion << '\n';
2014	s << "\timplementationVersion = " << value.implementationVersion << '\n';
2015	s << "\tdescription = " << (const char*)value.description << '\n';
2016	s << '}';
2017	return s;
2018}
2019
2020std::ostream& operator<< (std::ostream& s, const VkSubmitInfo& value)
2021{
2022	s << "VkSubmitInfo = {\n";
2023	s << "\tsType = " << value.sType << '\n';
2024	s << "\tpNext = " << value.pNext << '\n';
2025	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
2026	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
2027	s << "\tpWaitDstStageMask = " << value.pWaitDstStageMask << '\n';
2028	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
2029	s << "\tpCommandBuffers = " << value.pCommandBuffers << '\n';
2030	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
2031	s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
2032	s << '}';
2033	return s;
2034}
2035
2036std::ostream& operator<< (std::ostream& s, const VkMemoryAllocateInfo& value)
2037{
2038	s << "VkMemoryAllocateInfo = {\n";
2039	s << "\tsType = " << value.sType << '\n';
2040	s << "\tpNext = " << value.pNext << '\n';
2041	s << "\tallocationSize = " << value.allocationSize << '\n';
2042	s << "\tmemoryTypeIndex = " << value.memoryTypeIndex << '\n';
2043	s << '}';
2044	return s;
2045}
2046
2047std::ostream& operator<< (std::ostream& s, const VkMappedMemoryRange& value)
2048{
2049	s << "VkMappedMemoryRange = {\n";
2050	s << "\tsType = " << value.sType << '\n';
2051	s << "\tpNext = " << value.pNext << '\n';
2052	s << "\tmemory = " << value.memory << '\n';
2053	s << "\toffset = " << value.offset << '\n';
2054	s << "\tsize = " << value.size << '\n';
2055	s << '}';
2056	return s;
2057}
2058
2059std::ostream& operator<< (std::ostream& s, const VkMemoryRequirements& value)
2060{
2061	s << "VkMemoryRequirements = {\n";
2062	s << "\tsize = " << value.size << '\n';
2063	s << "\talignment = " << value.alignment << '\n';
2064	s << "\tmemoryTypeBits = " << value.memoryTypeBits << '\n';
2065	s << '}';
2066	return s;
2067}
2068
2069std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties& value)
2070{
2071	s << "VkSparseImageFormatProperties = {\n";
2072	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
2073	s << "\timageGranularity = " << value.imageGranularity << '\n';
2074	s << "\tflags = " << getSparseImageFormatFlagsStr(value.flags) << '\n';
2075	s << '}';
2076	return s;
2077}
2078
2079std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryRequirements& value)
2080{
2081	s << "VkSparseImageMemoryRequirements = {\n";
2082	s << "\tformatProperties = " << value.formatProperties << '\n';
2083	s << "\timageMipTailFirstLod = " << value.imageMipTailFirstLod << '\n';
2084	s << "\timageMipTailSize = " << value.imageMipTailSize << '\n';
2085	s << "\timageMipTailOffset = " << value.imageMipTailOffset << '\n';
2086	s << "\timageMipTailStride = " << value.imageMipTailStride << '\n';
2087	s << '}';
2088	return s;
2089}
2090
2091std::ostream& operator<< (std::ostream& s, const VkSparseMemoryBind& value)
2092{
2093	s << "VkSparseMemoryBind = {\n";
2094	s << "\tresourceOffset = " << value.resourceOffset << '\n';
2095	s << "\tsize = " << value.size << '\n';
2096	s << "\tmemory = " << value.memory << '\n';
2097	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
2098	s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
2099	s << '}';
2100	return s;
2101}
2102
2103std::ostream& operator<< (std::ostream& s, const VkSparseBufferMemoryBindInfo& value)
2104{
2105	s << "VkSparseBufferMemoryBindInfo = {\n";
2106	s << "\tbuffer = " << value.buffer << '\n';
2107	s << "\tbindCount = " << value.bindCount << '\n';
2108	s << "\tpBinds = " << value.pBinds << '\n';
2109	s << '}';
2110	return s;
2111}
2112
2113std::ostream& operator<< (std::ostream& s, const VkSparseImageOpaqueMemoryBindInfo& value)
2114{
2115	s << "VkSparseImageOpaqueMemoryBindInfo = {\n";
2116	s << "\timage = " << value.image << '\n';
2117	s << "\tbindCount = " << value.bindCount << '\n';
2118	s << "\tpBinds = " << value.pBinds << '\n';
2119	s << '}';
2120	return s;
2121}
2122
2123std::ostream& operator<< (std::ostream& s, const VkImageSubresource& value)
2124{
2125	s << "VkImageSubresource = {\n";
2126	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
2127	s << "\tmipLevel = " << value.mipLevel << '\n';
2128	s << "\tarrayLayer = " << value.arrayLayer << '\n';
2129	s << '}';
2130	return s;
2131}
2132
2133std::ostream& operator<< (std::ostream& s, const VkOffset3D& value)
2134{
2135	s << "VkOffset3D = {\n";
2136	s << "\tx = " << value.x << '\n';
2137	s << "\ty = " << value.y << '\n';
2138	s << "\tz = " << value.z << '\n';
2139	s << '}';
2140	return s;
2141}
2142
2143std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBind& value)
2144{
2145	s << "VkSparseImageMemoryBind = {\n";
2146	s << "\tsubresource = " << value.subresource << '\n';
2147	s << "\toffset = " << value.offset << '\n';
2148	s << "\textent = " << value.extent << '\n';
2149	s << "\tmemory = " << value.memory << '\n';
2150	s << "\tmemoryOffset = " << value.memoryOffset << '\n';
2151	s << "\tflags = " << getSparseMemoryBindFlagsStr(value.flags) << '\n';
2152	s << '}';
2153	return s;
2154}
2155
2156std::ostream& operator<< (std::ostream& s, const VkSparseImageMemoryBindInfo& value)
2157{
2158	s << "VkSparseImageMemoryBindInfo = {\n";
2159	s << "\timage = " << value.image << '\n';
2160	s << "\tbindCount = " << value.bindCount << '\n';
2161	s << "\tpBinds = " << value.pBinds << '\n';
2162	s << '}';
2163	return s;
2164}
2165
2166std::ostream& operator<< (std::ostream& s, const VkBindSparseInfo& value)
2167{
2168	s << "VkBindSparseInfo = {\n";
2169	s << "\tsType = " << value.sType << '\n';
2170	s << "\tpNext = " << value.pNext << '\n';
2171	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
2172	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
2173	s << "\tbufferBindCount = " << value.bufferBindCount << '\n';
2174	s << "\tpBufferBinds = " << value.pBufferBinds << '\n';
2175	s << "\timageOpaqueBindCount = " << value.imageOpaqueBindCount << '\n';
2176	s << "\tpImageOpaqueBinds = " << value.pImageOpaqueBinds << '\n';
2177	s << "\timageBindCount = " << value.imageBindCount << '\n';
2178	s << "\tpImageBinds = " << value.pImageBinds << '\n';
2179	s << "\tsignalSemaphoreCount = " << value.signalSemaphoreCount << '\n';
2180	s << "\tpSignalSemaphores = " << value.pSignalSemaphores << '\n';
2181	s << '}';
2182	return s;
2183}
2184
2185std::ostream& operator<< (std::ostream& s, const VkFenceCreateInfo& value)
2186{
2187	s << "VkFenceCreateInfo = {\n";
2188	s << "\tsType = " << value.sType << '\n';
2189	s << "\tpNext = " << value.pNext << '\n';
2190	s << "\tflags = " << getFenceCreateFlagsStr(value.flags) << '\n';
2191	s << '}';
2192	return s;
2193}
2194
2195std::ostream& operator<< (std::ostream& s, const VkSemaphoreCreateInfo& value)
2196{
2197	s << "VkSemaphoreCreateInfo = {\n";
2198	s << "\tsType = " << value.sType << '\n';
2199	s << "\tpNext = " << value.pNext << '\n';
2200	s << "\tflags = " << getSemaphoreCreateFlagsStr(value.flags) << '\n';
2201	s << '}';
2202	return s;
2203}
2204
2205std::ostream& operator<< (std::ostream& s, const VkEventCreateInfo& value)
2206{
2207	s << "VkEventCreateInfo = {\n";
2208	s << "\tsType = " << value.sType << '\n';
2209	s << "\tpNext = " << value.pNext << '\n';
2210	s << "\tflags = " << getEventCreateFlagsStr(value.flags) << '\n';
2211	s << '}';
2212	return s;
2213}
2214
2215std::ostream& operator<< (std::ostream& s, const VkQueryPoolCreateInfo& value)
2216{
2217	s << "VkQueryPoolCreateInfo = {\n";
2218	s << "\tsType = " << value.sType << '\n';
2219	s << "\tpNext = " << value.pNext << '\n';
2220	s << "\tflags = " << getQueryPoolCreateFlagsStr(value.flags) << '\n';
2221	s << "\tqueryType = " << value.queryType << '\n';
2222	s << "\tqueryCount = " << value.queryCount << '\n';
2223	s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
2224	s << '}';
2225	return s;
2226}
2227
2228std::ostream& operator<< (std::ostream& s, const VkBufferCreateInfo& value)
2229{
2230	s << "VkBufferCreateInfo = {\n";
2231	s << "\tsType = " << value.sType << '\n';
2232	s << "\tpNext = " << value.pNext << '\n';
2233	s << "\tflags = " << getBufferCreateFlagsStr(value.flags) << '\n';
2234	s << "\tsize = " << value.size << '\n';
2235	s << "\tusage = " << getBufferUsageFlagsStr(value.usage) << '\n';
2236	s << "\tsharingMode = " << value.sharingMode << '\n';
2237	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
2238	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
2239	s << '}';
2240	return s;
2241}
2242
2243std::ostream& operator<< (std::ostream& s, const VkBufferViewCreateInfo& value)
2244{
2245	s << "VkBufferViewCreateInfo = {\n";
2246	s << "\tsType = " << value.sType << '\n';
2247	s << "\tpNext = " << value.pNext << '\n';
2248	s << "\tflags = " << getBufferViewCreateFlagsStr(value.flags) << '\n';
2249	s << "\tbuffer = " << value.buffer << '\n';
2250	s << "\tformat = " << value.format << '\n';
2251	s << "\toffset = " << value.offset << '\n';
2252	s << "\trange = " << value.range << '\n';
2253	s << '}';
2254	return s;
2255}
2256
2257std::ostream& operator<< (std::ostream& s, const VkImageCreateInfo& value)
2258{
2259	s << "VkImageCreateInfo = {\n";
2260	s << "\tsType = " << value.sType << '\n';
2261	s << "\tpNext = " << value.pNext << '\n';
2262	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
2263	s << "\timageType = " << value.imageType << '\n';
2264	s << "\tformat = " << value.format << '\n';
2265	s << "\textent = " << value.extent << '\n';
2266	s << "\tmipLevels = " << value.mipLevels << '\n';
2267	s << "\tarrayLayers = " << value.arrayLayers << '\n';
2268	s << "\tsamples = " << value.samples << '\n';
2269	s << "\ttiling = " << value.tiling << '\n';
2270	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
2271	s << "\tsharingMode = " << value.sharingMode << '\n';
2272	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
2273	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
2274	s << "\tinitialLayout = " << value.initialLayout << '\n';
2275	s << '}';
2276	return s;
2277}
2278
2279std::ostream& operator<< (std::ostream& s, const VkSubresourceLayout& value)
2280{
2281	s << "VkSubresourceLayout = {\n";
2282	s << "\toffset = " << value.offset << '\n';
2283	s << "\tsize = " << value.size << '\n';
2284	s << "\trowPitch = " << value.rowPitch << '\n';
2285	s << "\tarrayPitch = " << value.arrayPitch << '\n';
2286	s << "\tdepthPitch = " << value.depthPitch << '\n';
2287	s << '}';
2288	return s;
2289}
2290
2291std::ostream& operator<< (std::ostream& s, const VkComponentMapping& value)
2292{
2293	s << "VkComponentMapping = {\n";
2294	s << "\tr = " << value.r << '\n';
2295	s << "\tg = " << value.g << '\n';
2296	s << "\tb = " << value.b << '\n';
2297	s << "\ta = " << value.a << '\n';
2298	s << '}';
2299	return s;
2300}
2301
2302std::ostream& operator<< (std::ostream& s, const VkImageSubresourceRange& value)
2303{
2304	s << "VkImageSubresourceRange = {\n";
2305	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
2306	s << "\tbaseMipLevel = " << value.baseMipLevel << '\n';
2307	s << "\tlevelCount = " << value.levelCount << '\n';
2308	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
2309	s << "\tlayerCount = " << value.layerCount << '\n';
2310	s << '}';
2311	return s;
2312}
2313
2314std::ostream& operator<< (std::ostream& s, const VkImageViewCreateInfo& value)
2315{
2316	s << "VkImageViewCreateInfo = {\n";
2317	s << "\tsType = " << value.sType << '\n';
2318	s << "\tpNext = " << value.pNext << '\n';
2319	s << "\tflags = " << getImageViewCreateFlagsStr(value.flags) << '\n';
2320	s << "\timage = " << value.image << '\n';
2321	s << "\tviewType = " << value.viewType << '\n';
2322	s << "\tformat = " << value.format << '\n';
2323	s << "\tcomponents = " << value.components << '\n';
2324	s << "\tsubresourceRange = " << value.subresourceRange << '\n';
2325	s << '}';
2326	return s;
2327}
2328
2329std::ostream& operator<< (std::ostream& s, const VkShaderModuleCreateInfo& value)
2330{
2331	s << "VkShaderModuleCreateInfo = {\n";
2332	s << "\tsType = " << value.sType << '\n';
2333	s << "\tpNext = " << value.pNext << '\n';
2334	s << "\tflags = " << getShaderModuleCreateFlagsStr(value.flags) << '\n';
2335	s << "\tcodeSize = " << value.codeSize << '\n';
2336	s << "\tpCode = " << value.pCode << '\n';
2337	s << '}';
2338	return s;
2339}
2340
2341std::ostream& operator<< (std::ostream& s, const VkPipelineCacheCreateInfo& value)
2342{
2343	s << "VkPipelineCacheCreateInfo = {\n";
2344	s << "\tsType = " << value.sType << '\n';
2345	s << "\tpNext = " << value.pNext << '\n';
2346	s << "\tflags = " << getPipelineCacheCreateFlagsStr(value.flags) << '\n';
2347	s << "\tinitialDataSize = " << value.initialDataSize << '\n';
2348	s << "\tpInitialData = " << value.pInitialData << '\n';
2349	s << '}';
2350	return s;
2351}
2352
2353std::ostream& operator<< (std::ostream& s, const VkSpecializationMapEntry& value)
2354{
2355	s << "VkSpecializationMapEntry = {\n";
2356	s << "\tconstantID = " << value.constantID << '\n';
2357	s << "\toffset = " << value.offset << '\n';
2358	s << "\tsize = " << value.size << '\n';
2359	s << '}';
2360	return s;
2361}
2362
2363std::ostream& operator<< (std::ostream& s, const VkSpecializationInfo& value)
2364{
2365	s << "VkSpecializationInfo = {\n";
2366	s << "\tmapEntryCount = " << value.mapEntryCount << '\n';
2367	s << "\tpMapEntries = " << value.pMapEntries << '\n';
2368	s << "\tdataSize = " << value.dataSize << '\n';
2369	s << "\tpData = " << value.pData << '\n';
2370	s << '}';
2371	return s;
2372}
2373
2374std::ostream& operator<< (std::ostream& s, const VkPipelineShaderStageCreateInfo& value)
2375{
2376	s << "VkPipelineShaderStageCreateInfo = {\n";
2377	s << "\tsType = " << value.sType << '\n';
2378	s << "\tpNext = " << value.pNext << '\n';
2379	s << "\tflags = " << getPipelineShaderStageCreateFlagsStr(value.flags) << '\n';
2380	s << "\tstage = " << value.stage << '\n';
2381	s << "\tmodule = " << value.module << '\n';
2382	s << "\tpName = " << getCharPtrStr(value.pName) << '\n';
2383	s << "\tpSpecializationInfo = " << value.pSpecializationInfo << '\n';
2384	s << '}';
2385	return s;
2386}
2387
2388std::ostream& operator<< (std::ostream& s, const VkVertexInputBindingDescription& value)
2389{
2390	s << "VkVertexInputBindingDescription = {\n";
2391	s << "\tbinding = " << value.binding << '\n';
2392	s << "\tstride = " << value.stride << '\n';
2393	s << "\tinputRate = " << value.inputRate << '\n';
2394	s << '}';
2395	return s;
2396}
2397
2398std::ostream& operator<< (std::ostream& s, const VkVertexInputAttributeDescription& value)
2399{
2400	s << "VkVertexInputAttributeDescription = {\n";
2401	s << "\tlocation = " << value.location << '\n';
2402	s << "\tbinding = " << value.binding << '\n';
2403	s << "\tformat = " << value.format << '\n';
2404	s << "\toffset = " << value.offset << '\n';
2405	s << '}';
2406	return s;
2407}
2408
2409std::ostream& operator<< (std::ostream& s, const VkPipelineVertexInputStateCreateInfo& value)
2410{
2411	s << "VkPipelineVertexInputStateCreateInfo = {\n";
2412	s << "\tsType = " << value.sType << '\n';
2413	s << "\tpNext = " << value.pNext << '\n';
2414	s << "\tflags = " << getPipelineVertexInputStateCreateFlagsStr(value.flags) << '\n';
2415	s << "\tvertexBindingDescriptionCount = " << value.vertexBindingDescriptionCount << '\n';
2416	s << "\tpVertexBindingDescriptions = " << value.pVertexBindingDescriptions << '\n';
2417	s << "\tvertexAttributeDescriptionCount = " << value.vertexAttributeDescriptionCount << '\n';
2418	s << "\tpVertexAttributeDescriptions = " << value.pVertexAttributeDescriptions << '\n';
2419	s << '}';
2420	return s;
2421}
2422
2423std::ostream& operator<< (std::ostream& s, const VkPipelineInputAssemblyStateCreateInfo& value)
2424{
2425	s << "VkPipelineInputAssemblyStateCreateInfo = {\n";
2426	s << "\tsType = " << value.sType << '\n';
2427	s << "\tpNext = " << value.pNext << '\n';
2428	s << "\tflags = " << getPipelineInputAssemblyStateCreateFlagsStr(value.flags) << '\n';
2429	s << "\ttopology = " << value.topology << '\n';
2430	s << "\tprimitiveRestartEnable = " << value.primitiveRestartEnable << '\n';
2431	s << '}';
2432	return s;
2433}
2434
2435std::ostream& operator<< (std::ostream& s, const VkPipelineTessellationStateCreateInfo& value)
2436{
2437	s << "VkPipelineTessellationStateCreateInfo = {\n";
2438	s << "\tsType = " << value.sType << '\n';
2439	s << "\tpNext = " << value.pNext << '\n';
2440	s << "\tflags = " << getPipelineTessellationStateCreateFlagsStr(value.flags) << '\n';
2441	s << "\tpatchControlPoints = " << value.patchControlPoints << '\n';
2442	s << '}';
2443	return s;
2444}
2445
2446std::ostream& operator<< (std::ostream& s, const VkViewport& value)
2447{
2448	s << "VkViewport = {\n";
2449	s << "\tx = " << value.x << '\n';
2450	s << "\ty = " << value.y << '\n';
2451	s << "\twidth = " << value.width << '\n';
2452	s << "\theight = " << value.height << '\n';
2453	s << "\tminDepth = " << value.minDepth << '\n';
2454	s << "\tmaxDepth = " << value.maxDepth << '\n';
2455	s << '}';
2456	return s;
2457}
2458
2459std::ostream& operator<< (std::ostream& s, const VkOffset2D& value)
2460{
2461	s << "VkOffset2D = {\n";
2462	s << "\tx = " << value.x << '\n';
2463	s << "\ty = " << value.y << '\n';
2464	s << '}';
2465	return s;
2466}
2467
2468std::ostream& operator<< (std::ostream& s, const VkExtent2D& value)
2469{
2470	s << "VkExtent2D = {\n";
2471	s << "\twidth = " << value.width << '\n';
2472	s << "\theight = " << value.height << '\n';
2473	s << '}';
2474	return s;
2475}
2476
2477std::ostream& operator<< (std::ostream& s, const VkRect2D& value)
2478{
2479	s << "VkRect2D = {\n";
2480	s << "\toffset = " << value.offset << '\n';
2481	s << "\textent = " << value.extent << '\n';
2482	s << '}';
2483	return s;
2484}
2485
2486std::ostream& operator<< (std::ostream& s, const VkPipelineViewportStateCreateInfo& value)
2487{
2488	s << "VkPipelineViewportStateCreateInfo = {\n";
2489	s << "\tsType = " << value.sType << '\n';
2490	s << "\tpNext = " << value.pNext << '\n';
2491	s << "\tflags = " << getPipelineViewportStateCreateFlagsStr(value.flags) << '\n';
2492	s << "\tviewportCount = " << value.viewportCount << '\n';
2493	s << "\tpViewports = " << value.pViewports << '\n';
2494	s << "\tscissorCount = " << value.scissorCount << '\n';
2495	s << "\tpScissors = " << value.pScissors << '\n';
2496	s << '}';
2497	return s;
2498}
2499
2500std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateCreateInfo& value)
2501{
2502	s << "VkPipelineRasterizationStateCreateInfo = {\n";
2503	s << "\tsType = " << value.sType << '\n';
2504	s << "\tpNext = " << value.pNext << '\n';
2505	s << "\tflags = " << getPipelineRasterizationStateCreateFlagsStr(value.flags) << '\n';
2506	s << "\tdepthClampEnable = " << value.depthClampEnable << '\n';
2507	s << "\trasterizerDiscardEnable = " << value.rasterizerDiscardEnable << '\n';
2508	s << "\tpolygonMode = " << value.polygonMode << '\n';
2509	s << "\tcullMode = " << getCullModeFlagsStr(value.cullMode) << '\n';
2510	s << "\tfrontFace = " << value.frontFace << '\n';
2511	s << "\tdepthBiasEnable = " << value.depthBiasEnable << '\n';
2512	s << "\tdepthBiasConstantFactor = " << value.depthBiasConstantFactor << '\n';
2513	s << "\tdepthBiasClamp = " << value.depthBiasClamp << '\n';
2514	s << "\tdepthBiasSlopeFactor = " << value.depthBiasSlopeFactor << '\n';
2515	s << "\tlineWidth = " << value.lineWidth << '\n';
2516	s << '}';
2517	return s;
2518}
2519
2520std::ostream& operator<< (std::ostream& s, const VkPipelineMultisampleStateCreateInfo& value)
2521{
2522	s << "VkPipelineMultisampleStateCreateInfo = {\n";
2523	s << "\tsType = " << value.sType << '\n';
2524	s << "\tpNext = " << value.pNext << '\n';
2525	s << "\tflags = " << getPipelineMultisampleStateCreateFlagsStr(value.flags) << '\n';
2526	s << "\trasterizationSamples = " << value.rasterizationSamples << '\n';
2527	s << "\tsampleShadingEnable = " << value.sampleShadingEnable << '\n';
2528	s << "\tminSampleShading = " << value.minSampleShading << '\n';
2529	s << "\tpSampleMask = " << value.pSampleMask << '\n';
2530	s << "\talphaToCoverageEnable = " << value.alphaToCoverageEnable << '\n';
2531	s << "\talphaToOneEnable = " << value.alphaToOneEnable << '\n';
2532	s << '}';
2533	return s;
2534}
2535
2536std::ostream& operator<< (std::ostream& s, const VkStencilOpState& value)
2537{
2538	s << "VkStencilOpState = {\n";
2539	s << "\tfailOp = " << value.failOp << '\n';
2540	s << "\tpassOp = " << value.passOp << '\n';
2541	s << "\tdepthFailOp = " << value.depthFailOp << '\n';
2542	s << "\tcompareOp = " << value.compareOp << '\n';
2543	s << "\tcompareMask = " << value.compareMask << '\n';
2544	s << "\twriteMask = " << value.writeMask << '\n';
2545	s << "\treference = " << value.reference << '\n';
2546	s << '}';
2547	return s;
2548}
2549
2550std::ostream& operator<< (std::ostream& s, const VkPipelineDepthStencilStateCreateInfo& value)
2551{
2552	s << "VkPipelineDepthStencilStateCreateInfo = {\n";
2553	s << "\tsType = " << value.sType << '\n';
2554	s << "\tpNext = " << value.pNext << '\n';
2555	s << "\tflags = " << getPipelineDepthStencilStateCreateFlagsStr(value.flags) << '\n';
2556	s << "\tdepthTestEnable = " << value.depthTestEnable << '\n';
2557	s << "\tdepthWriteEnable = " << value.depthWriteEnable << '\n';
2558	s << "\tdepthCompareOp = " << value.depthCompareOp << '\n';
2559	s << "\tdepthBoundsTestEnable = " << value.depthBoundsTestEnable << '\n';
2560	s << "\tstencilTestEnable = " << value.stencilTestEnable << '\n';
2561	s << "\tfront = " << value.front << '\n';
2562	s << "\tback = " << value.back << '\n';
2563	s << "\tminDepthBounds = " << value.minDepthBounds << '\n';
2564	s << "\tmaxDepthBounds = " << value.maxDepthBounds << '\n';
2565	s << '}';
2566	return s;
2567}
2568
2569std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendAttachmentState& value)
2570{
2571	s << "VkPipelineColorBlendAttachmentState = {\n";
2572	s << "\tblendEnable = " << value.blendEnable << '\n';
2573	s << "\tsrcColorBlendFactor = " << value.srcColorBlendFactor << '\n';
2574	s << "\tdstColorBlendFactor = " << value.dstColorBlendFactor << '\n';
2575	s << "\tcolorBlendOp = " << value.colorBlendOp << '\n';
2576	s << "\tsrcAlphaBlendFactor = " << value.srcAlphaBlendFactor << '\n';
2577	s << "\tdstAlphaBlendFactor = " << value.dstAlphaBlendFactor << '\n';
2578	s << "\talphaBlendOp = " << value.alphaBlendOp << '\n';
2579	s << "\tcolorWriteMask = " << getColorComponentFlagsStr(value.colorWriteMask) << '\n';
2580	s << '}';
2581	return s;
2582}
2583
2584std::ostream& operator<< (std::ostream& s, const VkPipelineColorBlendStateCreateInfo& value)
2585{
2586	s << "VkPipelineColorBlendStateCreateInfo = {\n";
2587	s << "\tsType = " << value.sType << '\n';
2588	s << "\tpNext = " << value.pNext << '\n';
2589	s << "\tflags = " << getPipelineColorBlendStateCreateFlagsStr(value.flags) << '\n';
2590	s << "\tlogicOpEnable = " << value.logicOpEnable << '\n';
2591	s << "\tlogicOp = " << value.logicOp << '\n';
2592	s << "\tattachmentCount = " << value.attachmentCount << '\n';
2593	s << "\tpAttachments = " << value.pAttachments << '\n';
2594	s << "\tblendConstants = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.blendConstants), DE_ARRAY_END(value.blendConstants)) << '\n';
2595	s << '}';
2596	return s;
2597}
2598
2599std::ostream& operator<< (std::ostream& s, const VkPipelineDynamicStateCreateInfo& value)
2600{
2601	s << "VkPipelineDynamicStateCreateInfo = {\n";
2602	s << "\tsType = " << value.sType << '\n';
2603	s << "\tpNext = " << value.pNext << '\n';
2604	s << "\tflags = " << getPipelineDynamicStateCreateFlagsStr(value.flags) << '\n';
2605	s << "\tdynamicStateCount = " << value.dynamicStateCount << '\n';
2606	s << "\tpDynamicStates = " << value.pDynamicStates << '\n';
2607	s << '}';
2608	return s;
2609}
2610
2611std::ostream& operator<< (std::ostream& s, const VkGraphicsPipelineCreateInfo& value)
2612{
2613	s << "VkGraphicsPipelineCreateInfo = {\n";
2614	s << "\tsType = " << value.sType << '\n';
2615	s << "\tpNext = " << value.pNext << '\n';
2616	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
2617	s << "\tstageCount = " << value.stageCount << '\n';
2618	s << "\tpStages = " << value.pStages << '\n';
2619	s << "\tpVertexInputState = " << value.pVertexInputState << '\n';
2620	s << "\tpInputAssemblyState = " << value.pInputAssemblyState << '\n';
2621	s << "\tpTessellationState = " << value.pTessellationState << '\n';
2622	s << "\tpViewportState = " << value.pViewportState << '\n';
2623	s << "\tpRasterizationState = " << value.pRasterizationState << '\n';
2624	s << "\tpMultisampleState = " << value.pMultisampleState << '\n';
2625	s << "\tpDepthStencilState = " << value.pDepthStencilState << '\n';
2626	s << "\tpColorBlendState = " << value.pColorBlendState << '\n';
2627	s << "\tpDynamicState = " << value.pDynamicState << '\n';
2628	s << "\tlayout = " << value.layout << '\n';
2629	s << "\trenderPass = " << value.renderPass << '\n';
2630	s << "\tsubpass = " << value.subpass << '\n';
2631	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
2632	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
2633	s << '}';
2634	return s;
2635}
2636
2637std::ostream& operator<< (std::ostream& s, const VkComputePipelineCreateInfo& value)
2638{
2639	s << "VkComputePipelineCreateInfo = {\n";
2640	s << "\tsType = " << value.sType << '\n';
2641	s << "\tpNext = " << value.pNext << '\n';
2642	s << "\tflags = " << getPipelineCreateFlagsStr(value.flags) << '\n';
2643	s << "\tstage = " << value.stage << '\n';
2644	s << "\tlayout = " << value.layout << '\n';
2645	s << "\tbasePipelineHandle = " << value.basePipelineHandle << '\n';
2646	s << "\tbasePipelineIndex = " << value.basePipelineIndex << '\n';
2647	s << '}';
2648	return s;
2649}
2650
2651std::ostream& operator<< (std::ostream& s, const VkPushConstantRange& value)
2652{
2653	s << "VkPushConstantRange = {\n";
2654	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
2655	s << "\toffset = " << value.offset << '\n';
2656	s << "\tsize = " << value.size << '\n';
2657	s << '}';
2658	return s;
2659}
2660
2661std::ostream& operator<< (std::ostream& s, const VkPipelineLayoutCreateInfo& value)
2662{
2663	s << "VkPipelineLayoutCreateInfo = {\n";
2664	s << "\tsType = " << value.sType << '\n';
2665	s << "\tpNext = " << value.pNext << '\n';
2666	s << "\tflags = " << getPipelineLayoutCreateFlagsStr(value.flags) << '\n';
2667	s << "\tsetLayoutCount = " << value.setLayoutCount << '\n';
2668	s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
2669	s << "\tpushConstantRangeCount = " << value.pushConstantRangeCount << '\n';
2670	s << "\tpPushConstantRanges = " << value.pPushConstantRanges << '\n';
2671	s << '}';
2672	return s;
2673}
2674
2675std::ostream& operator<< (std::ostream& s, const VkSamplerCreateInfo& value)
2676{
2677	s << "VkSamplerCreateInfo = {\n";
2678	s << "\tsType = " << value.sType << '\n';
2679	s << "\tpNext = " << value.pNext << '\n';
2680	s << "\tflags = " << getSamplerCreateFlagsStr(value.flags) << '\n';
2681	s << "\tmagFilter = " << value.magFilter << '\n';
2682	s << "\tminFilter = " << value.minFilter << '\n';
2683	s << "\tmipmapMode = " << value.mipmapMode << '\n';
2684	s << "\taddressModeU = " << value.addressModeU << '\n';
2685	s << "\taddressModeV = " << value.addressModeV << '\n';
2686	s << "\taddressModeW = " << value.addressModeW << '\n';
2687	s << "\tmipLodBias = " << value.mipLodBias << '\n';
2688	s << "\tanisotropyEnable = " << value.anisotropyEnable << '\n';
2689	s << "\tmaxAnisotropy = " << value.maxAnisotropy << '\n';
2690	s << "\tcompareEnable = " << value.compareEnable << '\n';
2691	s << "\tcompareOp = " << value.compareOp << '\n';
2692	s << "\tminLod = " << value.minLod << '\n';
2693	s << "\tmaxLod = " << value.maxLod << '\n';
2694	s << "\tborderColor = " << value.borderColor << '\n';
2695	s << "\tunnormalizedCoordinates = " << value.unnormalizedCoordinates << '\n';
2696	s << '}';
2697	return s;
2698}
2699
2700std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutBinding& value)
2701{
2702	s << "VkDescriptorSetLayoutBinding = {\n";
2703	s << "\tbinding = " << value.binding << '\n';
2704	s << "\tdescriptorType = " << value.descriptorType << '\n';
2705	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
2706	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
2707	s << "\tpImmutableSamplers = " << value.pImmutableSamplers << '\n';
2708	s << '}';
2709	return s;
2710}
2711
2712std::ostream& operator<< (std::ostream& s, const VkDescriptorSetLayoutCreateInfo& value)
2713{
2714	s << "VkDescriptorSetLayoutCreateInfo = {\n";
2715	s << "\tsType = " << value.sType << '\n';
2716	s << "\tpNext = " << value.pNext << '\n';
2717	s << "\tflags = " << getDescriptorSetLayoutCreateFlagsStr(value.flags) << '\n';
2718	s << "\tbindingCount = " << value.bindingCount << '\n';
2719	s << "\tpBindings = " << value.pBindings << '\n';
2720	s << '}';
2721	return s;
2722}
2723
2724std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolSize& value)
2725{
2726	s << "VkDescriptorPoolSize = {\n";
2727	s << "\ttype = " << value.type << '\n';
2728	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
2729	s << '}';
2730	return s;
2731}
2732
2733std::ostream& operator<< (std::ostream& s, const VkDescriptorPoolCreateInfo& value)
2734{
2735	s << "VkDescriptorPoolCreateInfo = {\n";
2736	s << "\tsType = " << value.sType << '\n';
2737	s << "\tpNext = " << value.pNext << '\n';
2738	s << "\tflags = " << getDescriptorPoolCreateFlagsStr(value.flags) << '\n';
2739	s << "\tmaxSets = " << value.maxSets << '\n';
2740	s << "\tpoolSizeCount = " << value.poolSizeCount << '\n';
2741	s << "\tpPoolSizes = " << value.pPoolSizes << '\n';
2742	s << '}';
2743	return s;
2744}
2745
2746std::ostream& operator<< (std::ostream& s, const VkDescriptorSetAllocateInfo& value)
2747{
2748	s << "VkDescriptorSetAllocateInfo = {\n";
2749	s << "\tsType = " << value.sType << '\n';
2750	s << "\tpNext = " << value.pNext << '\n';
2751	s << "\tdescriptorPool = " << value.descriptorPool << '\n';
2752	s << "\tdescriptorSetCount = " << value.descriptorSetCount << '\n';
2753	s << "\tpSetLayouts = " << value.pSetLayouts << '\n';
2754	s << '}';
2755	return s;
2756}
2757
2758std::ostream& operator<< (std::ostream& s, const VkDescriptorImageInfo& value)
2759{
2760	s << "VkDescriptorImageInfo = {\n";
2761	s << "\tsampler = " << value.sampler << '\n';
2762	s << "\timageView = " << value.imageView << '\n';
2763	s << "\timageLayout = " << value.imageLayout << '\n';
2764	s << '}';
2765	return s;
2766}
2767
2768std::ostream& operator<< (std::ostream& s, const VkDescriptorBufferInfo& value)
2769{
2770	s << "VkDescriptorBufferInfo = {\n";
2771	s << "\tbuffer = " << value.buffer << '\n';
2772	s << "\toffset = " << value.offset << '\n';
2773	s << "\trange = " << value.range << '\n';
2774	s << '}';
2775	return s;
2776}
2777
2778std::ostream& operator<< (std::ostream& s, const VkWriteDescriptorSet& value)
2779{
2780	s << "VkWriteDescriptorSet = {\n";
2781	s << "\tsType = " << value.sType << '\n';
2782	s << "\tpNext = " << value.pNext << '\n';
2783	s << "\tdstSet = " << value.dstSet << '\n';
2784	s << "\tdstBinding = " << value.dstBinding << '\n';
2785	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
2786	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
2787	s << "\tdescriptorType = " << value.descriptorType << '\n';
2788	s << "\tpImageInfo = " << value.pImageInfo << '\n';
2789	s << "\tpBufferInfo = " << value.pBufferInfo << '\n';
2790	s << "\tpTexelBufferView = " << value.pTexelBufferView << '\n';
2791	s << '}';
2792	return s;
2793}
2794
2795std::ostream& operator<< (std::ostream& s, const VkCopyDescriptorSet& value)
2796{
2797	s << "VkCopyDescriptorSet = {\n";
2798	s << "\tsType = " << value.sType << '\n';
2799	s << "\tpNext = " << value.pNext << '\n';
2800	s << "\tsrcSet = " << value.srcSet << '\n';
2801	s << "\tsrcBinding = " << value.srcBinding << '\n';
2802	s << "\tsrcArrayElement = " << value.srcArrayElement << '\n';
2803	s << "\tdstSet = " << value.dstSet << '\n';
2804	s << "\tdstBinding = " << value.dstBinding << '\n';
2805	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
2806	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
2807	s << '}';
2808	return s;
2809}
2810
2811std::ostream& operator<< (std::ostream& s, const VkFramebufferCreateInfo& value)
2812{
2813	s << "VkFramebufferCreateInfo = {\n";
2814	s << "\tsType = " << value.sType << '\n';
2815	s << "\tpNext = " << value.pNext << '\n';
2816	s << "\tflags = " << getFramebufferCreateFlagsStr(value.flags) << '\n';
2817	s << "\trenderPass = " << value.renderPass << '\n';
2818	s << "\tattachmentCount = " << value.attachmentCount << '\n';
2819	s << "\tpAttachments = " << value.pAttachments << '\n';
2820	s << "\twidth = " << value.width << '\n';
2821	s << "\theight = " << value.height << '\n';
2822	s << "\tlayers = " << value.layers << '\n';
2823	s << '}';
2824	return s;
2825}
2826
2827std::ostream& operator<< (std::ostream& s, const VkAttachmentDescription& value)
2828{
2829	s << "VkAttachmentDescription = {\n";
2830	s << "\tflags = " << getAttachmentDescriptionFlagsStr(value.flags) << '\n';
2831	s << "\tformat = " << value.format << '\n';
2832	s << "\tsamples = " << value.samples << '\n';
2833	s << "\tloadOp = " << value.loadOp << '\n';
2834	s << "\tstoreOp = " << value.storeOp << '\n';
2835	s << "\tstencilLoadOp = " << value.stencilLoadOp << '\n';
2836	s << "\tstencilStoreOp = " << value.stencilStoreOp << '\n';
2837	s << "\tinitialLayout = " << value.initialLayout << '\n';
2838	s << "\tfinalLayout = " << value.finalLayout << '\n';
2839	s << '}';
2840	return s;
2841}
2842
2843std::ostream& operator<< (std::ostream& s, const VkAttachmentReference& value)
2844{
2845	s << "VkAttachmentReference = {\n";
2846	s << "\tattachment = " << value.attachment << '\n';
2847	s << "\tlayout = " << value.layout << '\n';
2848	s << '}';
2849	return s;
2850}
2851
2852std::ostream& operator<< (std::ostream& s, const VkSubpassDescription& value)
2853{
2854	s << "VkSubpassDescription = {\n";
2855	s << "\tflags = " << getSubpassDescriptionFlagsStr(value.flags) << '\n';
2856	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
2857	s << "\tinputAttachmentCount = " << value.inputAttachmentCount << '\n';
2858	s << "\tpInputAttachments = " << value.pInputAttachments << '\n';
2859	s << "\tcolorAttachmentCount = " << value.colorAttachmentCount << '\n';
2860	s << "\tpColorAttachments = " << value.pColorAttachments << '\n';
2861	s << "\tpResolveAttachments = " << value.pResolveAttachments << '\n';
2862	s << "\tpDepthStencilAttachment = " << value.pDepthStencilAttachment << '\n';
2863	s << "\tpreserveAttachmentCount = " << value.preserveAttachmentCount << '\n';
2864	s << "\tpPreserveAttachments = " << value.pPreserveAttachments << '\n';
2865	s << '}';
2866	return s;
2867}
2868
2869std::ostream& operator<< (std::ostream& s, const VkSubpassDependency& value)
2870{
2871	s << "VkSubpassDependency = {\n";
2872	s << "\tsrcSubpass = " << value.srcSubpass << '\n';
2873	s << "\tdstSubpass = " << value.dstSubpass << '\n';
2874	s << "\tsrcStageMask = " << getPipelineStageFlagsStr(value.srcStageMask) << '\n';
2875	s << "\tdstStageMask = " << getPipelineStageFlagsStr(value.dstStageMask) << '\n';
2876	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
2877	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
2878	s << "\tdependencyFlags = " << getDependencyFlagsStr(value.dependencyFlags) << '\n';
2879	s << '}';
2880	return s;
2881}
2882
2883std::ostream& operator<< (std::ostream& s, const VkRenderPassCreateInfo& value)
2884{
2885	s << "VkRenderPassCreateInfo = {\n";
2886	s << "\tsType = " << value.sType << '\n';
2887	s << "\tpNext = " << value.pNext << '\n';
2888	s << "\tflags = " << getRenderPassCreateFlagsStr(value.flags) << '\n';
2889	s << "\tattachmentCount = " << value.attachmentCount << '\n';
2890	s << "\tpAttachments = " << value.pAttachments << '\n';
2891	s << "\tsubpassCount = " << value.subpassCount << '\n';
2892	s << "\tpSubpasses = " << value.pSubpasses << '\n';
2893	s << "\tdependencyCount = " << value.dependencyCount << '\n';
2894	s << "\tpDependencies = " << value.pDependencies << '\n';
2895	s << '}';
2896	return s;
2897}
2898
2899std::ostream& operator<< (std::ostream& s, const VkCommandPoolCreateInfo& value)
2900{
2901	s << "VkCommandPoolCreateInfo = {\n";
2902	s << "\tsType = " << value.sType << '\n';
2903	s << "\tpNext = " << value.pNext << '\n';
2904	s << "\tflags = " << getCommandPoolCreateFlagsStr(value.flags) << '\n';
2905	s << "\tqueueFamilyIndex = " << value.queueFamilyIndex << '\n';
2906	s << '}';
2907	return s;
2908}
2909
2910std::ostream& operator<< (std::ostream& s, const VkCommandBufferAllocateInfo& value)
2911{
2912	s << "VkCommandBufferAllocateInfo = {\n";
2913	s << "\tsType = " << value.sType << '\n';
2914	s << "\tpNext = " << value.pNext << '\n';
2915	s << "\tcommandPool = " << value.commandPool << '\n';
2916	s << "\tlevel = " << value.level << '\n';
2917	s << "\tcommandBufferCount = " << value.commandBufferCount << '\n';
2918	s << '}';
2919	return s;
2920}
2921
2922std::ostream& operator<< (std::ostream& s, const VkCommandBufferInheritanceInfo& value)
2923{
2924	s << "VkCommandBufferInheritanceInfo = {\n";
2925	s << "\tsType = " << value.sType << '\n';
2926	s << "\tpNext = " << value.pNext << '\n';
2927	s << "\trenderPass = " << value.renderPass << '\n';
2928	s << "\tsubpass = " << value.subpass << '\n';
2929	s << "\tframebuffer = " << value.framebuffer << '\n';
2930	s << "\tocclusionQueryEnable = " << value.occlusionQueryEnable << '\n';
2931	s << "\tqueryFlags = " << getQueryControlFlagsStr(value.queryFlags) << '\n';
2932	s << "\tpipelineStatistics = " << getQueryPipelineStatisticFlagsStr(value.pipelineStatistics) << '\n';
2933	s << '}';
2934	return s;
2935}
2936
2937std::ostream& operator<< (std::ostream& s, const VkCommandBufferBeginInfo& value)
2938{
2939	s << "VkCommandBufferBeginInfo = {\n";
2940	s << "\tsType = " << value.sType << '\n';
2941	s << "\tpNext = " << value.pNext << '\n';
2942	s << "\tflags = " << getCommandBufferUsageFlagsStr(value.flags) << '\n';
2943	s << "\tpInheritanceInfo = " << value.pInheritanceInfo << '\n';
2944	s << '}';
2945	return s;
2946}
2947
2948std::ostream& operator<< (std::ostream& s, const VkBufferCopy& value)
2949{
2950	s << "VkBufferCopy = {\n";
2951	s << "\tsrcOffset = " << value.srcOffset << '\n';
2952	s << "\tdstOffset = " << value.dstOffset << '\n';
2953	s << "\tsize = " << value.size << '\n';
2954	s << '}';
2955	return s;
2956}
2957
2958std::ostream& operator<< (std::ostream& s, const VkImageSubresourceLayers& value)
2959{
2960	s << "VkImageSubresourceLayers = {\n";
2961	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
2962	s << "\tmipLevel = " << value.mipLevel << '\n';
2963	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
2964	s << "\tlayerCount = " << value.layerCount << '\n';
2965	s << '}';
2966	return s;
2967}
2968
2969std::ostream& operator<< (std::ostream& s, const VkImageCopy& value)
2970{
2971	s << "VkImageCopy = {\n";
2972	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
2973	s << "\tsrcOffset = " << value.srcOffset << '\n';
2974	s << "\tdstSubresource = " << value.dstSubresource << '\n';
2975	s << "\tdstOffset = " << value.dstOffset << '\n';
2976	s << "\textent = " << value.extent << '\n';
2977	s << '}';
2978	return s;
2979}
2980
2981std::ostream& operator<< (std::ostream& s, const VkImageBlit& value)
2982{
2983	s << "VkImageBlit = {\n";
2984	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
2985	s << "\tsrcOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.srcOffsets), DE_ARRAY_END(value.srcOffsets)) << '\n';
2986	s << "\tdstSubresource = " << value.dstSubresource << '\n';
2987	s << "\tdstOffsets = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.dstOffsets), DE_ARRAY_END(value.dstOffsets)) << '\n';
2988	s << '}';
2989	return s;
2990}
2991
2992std::ostream& operator<< (std::ostream& s, const VkBufferImageCopy& value)
2993{
2994	s << "VkBufferImageCopy = {\n";
2995	s << "\tbufferOffset = " << value.bufferOffset << '\n';
2996	s << "\tbufferRowLength = " << value.bufferRowLength << '\n';
2997	s << "\tbufferImageHeight = " << value.bufferImageHeight << '\n';
2998	s << "\timageSubresource = " << value.imageSubresource << '\n';
2999	s << "\timageOffset = " << value.imageOffset << '\n';
3000	s << "\timageExtent = " << value.imageExtent << '\n';
3001	s << '}';
3002	return s;
3003}
3004
3005std::ostream& operator<< (std::ostream& s, const VkClearColorValue& value)
3006{
3007	s << "VkClearColorValue = {\n";
3008	s << "\tfloat32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.float32), DE_ARRAY_END(value.float32)) << '\n';
3009	s << "\tint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.int32), DE_ARRAY_END(value.int32)) << '\n';
3010	s << "\tuint32 = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.uint32), DE_ARRAY_END(value.uint32)) << '\n';
3011	s << '}';
3012	return s;
3013}
3014
3015std::ostream& operator<< (std::ostream& s, const VkClearDepthStencilValue& value)
3016{
3017	s << "VkClearDepthStencilValue = {\n";
3018	s << "\tdepth = " << value.depth << '\n';
3019	s << "\tstencil = " << value.stencil << '\n';
3020	s << '}';
3021	return s;
3022}
3023
3024std::ostream& operator<< (std::ostream& s, const VkClearValue& value)
3025{
3026	s << "VkClearValue = {\n";
3027	s << "\tcolor = " << value.color << '\n';
3028	s << "\tdepthStencil = " << value.depthStencil << '\n';
3029	s << '}';
3030	return s;
3031}
3032
3033std::ostream& operator<< (std::ostream& s, const VkClearAttachment& value)
3034{
3035	s << "VkClearAttachment = {\n";
3036	s << "\taspectMask = " << getImageAspectFlagsStr(value.aspectMask) << '\n';
3037	s << "\tcolorAttachment = " << value.colorAttachment << '\n';
3038	s << "\tclearValue = " << value.clearValue << '\n';
3039	s << '}';
3040	return s;
3041}
3042
3043std::ostream& operator<< (std::ostream& s, const VkClearRect& value)
3044{
3045	s << "VkClearRect = {\n";
3046	s << "\trect = " << value.rect << '\n';
3047	s << "\tbaseArrayLayer = " << value.baseArrayLayer << '\n';
3048	s << "\tlayerCount = " << value.layerCount << '\n';
3049	s << '}';
3050	return s;
3051}
3052
3053std::ostream& operator<< (std::ostream& s, const VkImageResolve& value)
3054{
3055	s << "VkImageResolve = {\n";
3056	s << "\tsrcSubresource = " << value.srcSubresource << '\n';
3057	s << "\tsrcOffset = " << value.srcOffset << '\n';
3058	s << "\tdstSubresource = " << value.dstSubresource << '\n';
3059	s << "\tdstOffset = " << value.dstOffset << '\n';
3060	s << "\textent = " << value.extent << '\n';
3061	s << '}';
3062	return s;
3063}
3064
3065std::ostream& operator<< (std::ostream& s, const VkMemoryBarrier& value)
3066{
3067	s << "VkMemoryBarrier = {\n";
3068	s << "\tsType = " << value.sType << '\n';
3069	s << "\tpNext = " << value.pNext << '\n';
3070	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
3071	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
3072	s << '}';
3073	return s;
3074}
3075
3076std::ostream& operator<< (std::ostream& s, const VkBufferMemoryBarrier& value)
3077{
3078	s << "VkBufferMemoryBarrier = {\n";
3079	s << "\tsType = " << value.sType << '\n';
3080	s << "\tpNext = " << value.pNext << '\n';
3081	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
3082	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
3083	s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
3084	s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
3085	s << "\tbuffer = " << value.buffer << '\n';
3086	s << "\toffset = " << value.offset << '\n';
3087	s << "\tsize = " << value.size << '\n';
3088	s << '}';
3089	return s;
3090}
3091
3092std::ostream& operator<< (std::ostream& s, const VkImageMemoryBarrier& value)
3093{
3094	s << "VkImageMemoryBarrier = {\n";
3095	s << "\tsType = " << value.sType << '\n';
3096	s << "\tpNext = " << value.pNext << '\n';
3097	s << "\tsrcAccessMask = " << getAccessFlagsStr(value.srcAccessMask) << '\n';
3098	s << "\tdstAccessMask = " << getAccessFlagsStr(value.dstAccessMask) << '\n';
3099	s << "\toldLayout = " << value.oldLayout << '\n';
3100	s << "\tnewLayout = " << value.newLayout << '\n';
3101	s << "\tsrcQueueFamilyIndex = " << value.srcQueueFamilyIndex << '\n';
3102	s << "\tdstQueueFamilyIndex = " << value.dstQueueFamilyIndex << '\n';
3103	s << "\timage = " << value.image << '\n';
3104	s << "\tsubresourceRange = " << value.subresourceRange << '\n';
3105	s << '}';
3106	return s;
3107}
3108
3109std::ostream& operator<< (std::ostream& s, const VkRenderPassBeginInfo& value)
3110{
3111	s << "VkRenderPassBeginInfo = {\n";
3112	s << "\tsType = " << value.sType << '\n';
3113	s << "\tpNext = " << value.pNext << '\n';
3114	s << "\trenderPass = " << value.renderPass << '\n';
3115	s << "\tframebuffer = " << value.framebuffer << '\n';
3116	s << "\trenderArea = " << value.renderArea << '\n';
3117	s << "\tclearValueCount = " << value.clearValueCount << '\n';
3118	s << "\tpClearValues = " << value.pClearValues << '\n';
3119	s << '}';
3120	return s;
3121}
3122
3123std::ostream& operator<< (std::ostream& s, const VkDispatchIndirectCommand& value)
3124{
3125	s << "VkDispatchIndirectCommand = {\n";
3126	s << "\tx = " << value.x << '\n';
3127	s << "\ty = " << value.y << '\n';
3128	s << "\tz = " << value.z << '\n';
3129	s << '}';
3130	return s;
3131}
3132
3133std::ostream& operator<< (std::ostream& s, const VkDrawIndexedIndirectCommand& value)
3134{
3135	s << "VkDrawIndexedIndirectCommand = {\n";
3136	s << "\tindexCount = " << value.indexCount << '\n';
3137	s << "\tinstanceCount = " << value.instanceCount << '\n';
3138	s << "\tfirstIndex = " << value.firstIndex << '\n';
3139	s << "\tvertexOffset = " << value.vertexOffset << '\n';
3140	s << "\tfirstInstance = " << value.firstInstance << '\n';
3141	s << '}';
3142	return s;
3143}
3144
3145std::ostream& operator<< (std::ostream& s, const VkDrawIndirectCommand& value)
3146{
3147	s << "VkDrawIndirectCommand = {\n";
3148	s << "\tvertexCount = " << value.vertexCount << '\n';
3149	s << "\tinstanceCount = " << value.instanceCount << '\n';
3150	s << "\tfirstVertex = " << value.firstVertex << '\n';
3151	s << "\tfirstInstance = " << value.firstInstance << '\n';
3152	s << '}';
3153	return s;
3154}
3155
3156std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilitiesKHR& value)
3157{
3158	s << "VkSurfaceCapabilitiesKHR = {\n";
3159	s << "\tminImageCount = " << value.minImageCount << '\n';
3160	s << "\tmaxImageCount = " << value.maxImageCount << '\n';
3161	s << "\tcurrentExtent = " << value.currentExtent << '\n';
3162	s << "\tminImageExtent = " << value.minImageExtent << '\n';
3163	s << "\tmaxImageExtent = " << value.maxImageExtent << '\n';
3164	s << "\tmaxImageArrayLayers = " << value.maxImageArrayLayers << '\n';
3165	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
3166	s << "\tcurrentTransform = " << value.currentTransform << '\n';
3167	s << "\tsupportedCompositeAlpha = " << getCompositeAlphaFlagsKHRStr(value.supportedCompositeAlpha) << '\n';
3168	s << "\tsupportedUsageFlags = " << getImageUsageFlagsStr(value.supportedUsageFlags) << '\n';
3169	s << '}';
3170	return s;
3171}
3172
3173std::ostream& operator<< (std::ostream& s, const VkSurfaceFormatKHR& value)
3174{
3175	s << "VkSurfaceFormatKHR = {\n";
3176	s << "\tformat = " << value.format << '\n';
3177	s << "\tcolorSpace = " << value.colorSpace << '\n';
3178	s << '}';
3179	return s;
3180}
3181
3182std::ostream& operator<< (std::ostream& s, const VkSwapchainCreateInfoKHR& value)
3183{
3184	s << "VkSwapchainCreateInfoKHR = {\n";
3185	s << "\tsType = " << value.sType << '\n';
3186	s << "\tpNext = " << value.pNext << '\n';
3187	s << "\tflags = " << getSwapchainCreateFlagsKHRStr(value.flags) << '\n';
3188	s << "\tsurface = " << value.surface << '\n';
3189	s << "\tminImageCount = " << value.minImageCount << '\n';
3190	s << "\timageFormat = " << value.imageFormat << '\n';
3191	s << "\timageColorSpace = " << value.imageColorSpace << '\n';
3192	s << "\timageExtent = " << value.imageExtent << '\n';
3193	s << "\timageArrayLayers = " << value.imageArrayLayers << '\n';
3194	s << "\timageUsage = " << getImageUsageFlagsStr(value.imageUsage) << '\n';
3195	s << "\timageSharingMode = " << value.imageSharingMode << '\n';
3196	s << "\tqueueFamilyIndexCount = " << value.queueFamilyIndexCount << '\n';
3197	s << "\tpQueueFamilyIndices = " << value.pQueueFamilyIndices << '\n';
3198	s << "\tpreTransform = " << value.preTransform << '\n';
3199	s << "\tcompositeAlpha = " << value.compositeAlpha << '\n';
3200	s << "\tpresentMode = " << value.presentMode << '\n';
3201	s << "\tclipped = " << value.clipped << '\n';
3202	s << "\toldSwapchain = " << value.oldSwapchain << '\n';
3203	s << '}';
3204	return s;
3205}
3206
3207std::ostream& operator<< (std::ostream& s, const VkPresentInfoKHR& value)
3208{
3209	s << "VkPresentInfoKHR = {\n";
3210	s << "\tsType = " << value.sType << '\n';
3211	s << "\tpNext = " << value.pNext << '\n';
3212	s << "\twaitSemaphoreCount = " << value.waitSemaphoreCount << '\n';
3213	s << "\tpWaitSemaphores = " << value.pWaitSemaphores << '\n';
3214	s << "\tswapchainCount = " << value.swapchainCount << '\n';
3215	s << "\tpSwapchains = " << value.pSwapchains << '\n';
3216	s << "\tpImageIndices = " << value.pImageIndices << '\n';
3217	s << "\tpResults = " << value.pResults << '\n';
3218	s << '}';
3219	return s;
3220}
3221
3222std::ostream& operator<< (std::ostream& s, const VkDisplayPropertiesKHR& value)
3223{
3224	s << "VkDisplayPropertiesKHR = {\n";
3225	s << "\tdisplay = " << value.display << '\n';
3226	s << "\tdisplayName = " << getCharPtrStr(value.displayName) << '\n';
3227	s << "\tphysicalDimensions = " << value.physicalDimensions << '\n';
3228	s << "\tphysicalResolution = " << value.physicalResolution << '\n';
3229	s << "\tsupportedTransforms = " << getSurfaceTransformFlagsKHRStr(value.supportedTransforms) << '\n';
3230	s << "\tplaneReorderPossible = " << value.planeReorderPossible << '\n';
3231	s << "\tpersistentContent = " << value.persistentContent << '\n';
3232	s << '}';
3233	return s;
3234}
3235
3236std::ostream& operator<< (std::ostream& s, const VkDisplayModeParametersKHR& value)
3237{
3238	s << "VkDisplayModeParametersKHR = {\n";
3239	s << "\tvisibleRegion = " << value.visibleRegion << '\n';
3240	s << "\trefreshRate = " << value.refreshRate << '\n';
3241	s << '}';
3242	return s;
3243}
3244
3245std::ostream& operator<< (std::ostream& s, const VkDisplayModePropertiesKHR& value)
3246{
3247	s << "VkDisplayModePropertiesKHR = {\n";
3248	s << "\tdisplayMode = " << value.displayMode << '\n';
3249	s << "\tparameters = " << value.parameters << '\n';
3250	s << '}';
3251	return s;
3252}
3253
3254std::ostream& operator<< (std::ostream& s, const VkDisplayModeCreateInfoKHR& value)
3255{
3256	s << "VkDisplayModeCreateInfoKHR = {\n";
3257	s << "\tsType = " << value.sType << '\n';
3258	s << "\tpNext = " << value.pNext << '\n';
3259	s << "\tflags = " << getDisplayModeCreateFlagsKHRStr(value.flags) << '\n';
3260	s << "\tparameters = " << value.parameters << '\n';
3261	s << '}';
3262	return s;
3263}
3264
3265std::ostream& operator<< (std::ostream& s, const VkDisplayPlaneCapabilitiesKHR& value)
3266{
3267	s << "VkDisplayPlaneCapabilitiesKHR = {\n";
3268	s << "\tsupportedAlpha = " << getDisplayPlaneAlphaFlagsKHRStr(value.supportedAlpha) << '\n';
3269	s << "\tminSrcPosition = " << value.minSrcPosition << '\n';
3270	s << "\tmaxSrcPosition = " << value.maxSrcPosition << '\n';
3271	s << "\tminSrcExtent = " << value.minSrcExtent << '\n';
3272	s << "\tmaxSrcExtent = " << value.maxSrcExtent << '\n';
3273	s << "\tminDstPosition = " << value.minDstPosition << '\n';
3274	s << "\tmaxDstPosition = " << value.maxDstPosition << '\n';
3275	s << "\tminDstExtent = " << value.minDstExtent << '\n';
3276	s << "\tmaxDstExtent = " << value.maxDstExtent << '\n';
3277	s << '}';
3278	return s;
3279}
3280
3281std::ostream& operator<< (std::ostream& s, const VkDisplayPlanePropertiesKHR& value)
3282{
3283	s << "VkDisplayPlanePropertiesKHR = {\n";
3284	s << "\tcurrentDisplay = " << value.currentDisplay << '\n';
3285	s << "\tcurrentStackIndex = " << value.currentStackIndex << '\n';
3286	s << '}';
3287	return s;
3288}
3289
3290std::ostream& operator<< (std::ostream& s, const VkDisplaySurfaceCreateInfoKHR& value)
3291{
3292	s << "VkDisplaySurfaceCreateInfoKHR = {\n";
3293	s << "\tsType = " << value.sType << '\n';
3294	s << "\tpNext = " << value.pNext << '\n';
3295	s << "\tflags = " << getDisplaySurfaceCreateFlagsKHRStr(value.flags) << '\n';
3296	s << "\tdisplayMode = " << value.displayMode << '\n';
3297	s << "\tplaneIndex = " << value.planeIndex << '\n';
3298	s << "\tplaneStackIndex = " << value.planeStackIndex << '\n';
3299	s << "\ttransform = " << value.transform << '\n';
3300	s << "\tglobalAlpha = " << value.globalAlpha << '\n';
3301	s << "\talphaMode = " << value.alphaMode << '\n';
3302	s << "\timageExtent = " << value.imageExtent << '\n';
3303	s << '}';
3304	return s;
3305}
3306
3307std::ostream& operator<< (std::ostream& s, const VkDisplayPresentInfoKHR& value)
3308{
3309	s << "VkDisplayPresentInfoKHR = {\n";
3310	s << "\tsType = " << value.sType << '\n';
3311	s << "\tpNext = " << value.pNext << '\n';
3312	s << "\tsrcRect = " << value.srcRect << '\n';
3313	s << "\tdstRect = " << value.dstRect << '\n';
3314	s << "\tpersistent = " << value.persistent << '\n';
3315	s << '}';
3316	return s;
3317}
3318
3319std::ostream& operator<< (std::ostream& s, const VkXlibSurfaceCreateInfoKHR& value)
3320{
3321	s << "VkXlibSurfaceCreateInfoKHR = {\n";
3322	s << "\tsType = " << value.sType << '\n';
3323	s << "\tpNext = " << value.pNext << '\n';
3324	s << "\tflags = " << getXlibSurfaceCreateFlagsKHRStr(value.flags) << '\n';
3325	s << "\tdpy = " << value.dpy << '\n';
3326	s << "\twindow = " << value.window << '\n';
3327	s << '}';
3328	return s;
3329}
3330
3331std::ostream& operator<< (std::ostream& s, const VkXcbSurfaceCreateInfoKHR& value)
3332{
3333	s << "VkXcbSurfaceCreateInfoKHR = {\n";
3334	s << "\tsType = " << value.sType << '\n';
3335	s << "\tpNext = " << value.pNext << '\n';
3336	s << "\tflags = " << getXcbSurfaceCreateFlagsKHRStr(value.flags) << '\n';
3337	s << "\tconnection = " << value.connection << '\n';
3338	s << "\twindow = " << value.window << '\n';
3339	s << '}';
3340	return s;
3341}
3342
3343std::ostream& operator<< (std::ostream& s, const VkWaylandSurfaceCreateInfoKHR& value)
3344{
3345	s << "VkWaylandSurfaceCreateInfoKHR = {\n";
3346	s << "\tsType = " << value.sType << '\n';
3347	s << "\tpNext = " << value.pNext << '\n';
3348	s << "\tflags = " << getWaylandSurfaceCreateFlagsKHRStr(value.flags) << '\n';
3349	s << "\tdisplay = " << value.display << '\n';
3350	s << "\tsurface = " << value.surface << '\n';
3351	s << '}';
3352	return s;
3353}
3354
3355std::ostream& operator<< (std::ostream& s, const VkMirSurfaceCreateInfoKHR& value)
3356{
3357	s << "VkMirSurfaceCreateInfoKHR = {\n";
3358	s << "\tsType = " << value.sType << '\n';
3359	s << "\tpNext = " << value.pNext << '\n';
3360	s << "\tflags = " << getMirSurfaceCreateFlagsKHRStr(value.flags) << '\n';
3361	s << "\tconnection = " << value.connection << '\n';
3362	s << "\tmirSurface = " << value.mirSurface << '\n';
3363	s << '}';
3364	return s;
3365}
3366
3367std::ostream& operator<< (std::ostream& s, const VkAndroidSurfaceCreateInfoKHR& value)
3368{
3369	s << "VkAndroidSurfaceCreateInfoKHR = {\n";
3370	s << "\tsType = " << value.sType << '\n';
3371	s << "\tpNext = " << value.pNext << '\n';
3372	s << "\tflags = " << getAndroidSurfaceCreateFlagsKHRStr(value.flags) << '\n';
3373	s << "\twindow = " << value.window << '\n';
3374	s << '}';
3375	return s;
3376}
3377
3378std::ostream& operator<< (std::ostream& s, const VkWin32SurfaceCreateInfoKHR& value)
3379{
3380	s << "VkWin32SurfaceCreateInfoKHR = {\n";
3381	s << "\tsType = " << value.sType << '\n';
3382	s << "\tpNext = " << value.pNext << '\n';
3383	s << "\tflags = " << getWin32SurfaceCreateFlagsKHRStr(value.flags) << '\n';
3384	s << "\thinstance = " << value.hinstance << '\n';
3385	s << "\thwnd = " << value.hwnd << '\n';
3386	s << '}';
3387	return s;
3388}
3389
3390std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceFeatures2KHR& value)
3391{
3392	s << "VkPhysicalDeviceFeatures2KHR = {\n";
3393	s << "\tsType = " << value.sType << '\n';
3394	s << "\tpNext = " << value.pNext << '\n';
3395	s << "\tfeatures = " << value.features << '\n';
3396	s << '}';
3397	return s;
3398}
3399
3400std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceProperties2KHR& value)
3401{
3402	s << "VkPhysicalDeviceProperties2KHR = {\n";
3403	s << "\tsType = " << value.sType << '\n';
3404	s << "\tpNext = " << value.pNext << '\n';
3405	s << "\tproperties = " << value.properties << '\n';
3406	s << '}';
3407	return s;
3408}
3409
3410std::ostream& operator<< (std::ostream& s, const VkFormatProperties2KHR& value)
3411{
3412	s << "VkFormatProperties2KHR = {\n";
3413	s << "\tsType = " << value.sType << '\n';
3414	s << "\tpNext = " << value.pNext << '\n';
3415	s << "\tformatProperties = " << value.formatProperties << '\n';
3416	s << '}';
3417	return s;
3418}
3419
3420std::ostream& operator<< (std::ostream& s, const VkImageFormatProperties2KHR& value)
3421{
3422	s << "VkImageFormatProperties2KHR = {\n";
3423	s << "\tsType = " << value.sType << '\n';
3424	s << "\tpNext = " << value.pNext << '\n';
3425	s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
3426	s << '}';
3427	return s;
3428}
3429
3430std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceImageFormatInfo2KHR& value)
3431{
3432	s << "VkPhysicalDeviceImageFormatInfo2KHR = {\n";
3433	s << "\tsType = " << value.sType << '\n';
3434	s << "\tpNext = " << value.pNext << '\n';
3435	s << "\tformat = " << value.format << '\n';
3436	s << "\ttype = " << value.type << '\n';
3437	s << "\ttiling = " << value.tiling << '\n';
3438	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
3439	s << "\tflags = " << getImageCreateFlagsStr(value.flags) << '\n';
3440	s << '}';
3441	return s;
3442}
3443
3444std::ostream& operator<< (std::ostream& s, const VkQueueFamilyProperties2KHR& value)
3445{
3446	s << "VkQueueFamilyProperties2KHR = {\n";
3447	s << "\tsType = " << value.sType << '\n';
3448	s << "\tpNext = " << value.pNext << '\n';
3449	s << "\tqueueFamilyProperties = " << value.queueFamilyProperties << '\n';
3450	s << '}';
3451	return s;
3452}
3453
3454std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceMemoryProperties2KHR& value)
3455{
3456	s << "VkPhysicalDeviceMemoryProperties2KHR = {\n";
3457	s << "\tsType = " << value.sType << '\n';
3458	s << "\tpNext = " << value.pNext << '\n';
3459	s << "\tmemoryProperties = " << value.memoryProperties << '\n';
3460	s << '}';
3461	return s;
3462}
3463
3464std::ostream& operator<< (std::ostream& s, const VkSparseImageFormatProperties2KHR& value)
3465{
3466	s << "VkSparseImageFormatProperties2KHR = {\n";
3467	s << "\tsType = " << value.sType << '\n';
3468	s << "\tpNext = " << value.pNext << '\n';
3469	s << "\tproperties = " << value.properties << '\n';
3470	s << '}';
3471	return s;
3472}
3473
3474std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSparseImageFormatInfo2KHR& value)
3475{
3476	s << "VkPhysicalDeviceSparseImageFormatInfo2KHR = {\n";
3477	s << "\tsType = " << value.sType << '\n';
3478	s << "\tpNext = " << value.pNext << '\n';
3479	s << "\tformat = " << value.format << '\n';
3480	s << "\ttype = " << value.type << '\n';
3481	s << "\tsamples = " << value.samples << '\n';
3482	s << "\tusage = " << getImageUsageFlagsStr(value.usage) << '\n';
3483	s << "\ttiling = " << value.tiling << '\n';
3484	s << '}';
3485	return s;
3486}
3487
3488std::ostream& operator<< (std::ostream& s, const VkRectLayerKHR& value)
3489{
3490	s << "VkRectLayerKHR = {\n";
3491	s << "\toffset = " << value.offset << '\n';
3492	s << "\textent = " << value.extent << '\n';
3493	s << "\tlayer = " << value.layer << '\n';
3494	s << '}';
3495	return s;
3496}
3497
3498std::ostream& operator<< (std::ostream& s, const VkPresentRegionKHR& value)
3499{
3500	s << "VkPresentRegionKHR = {\n";
3501	s << "\trectangleCount = " << value.rectangleCount << '\n';
3502	s << "\tpRectangles = " << value.pRectangles << '\n';
3503	s << '}';
3504	return s;
3505}
3506
3507std::ostream& operator<< (std::ostream& s, const VkPresentRegionsKHR& value)
3508{
3509	s << "VkPresentRegionsKHR = {\n";
3510	s << "\tsType = " << value.sType << '\n';
3511	s << "\tpNext = " << value.pNext << '\n';
3512	s << "\tswapchainCount = " << value.swapchainCount << '\n';
3513	s << "\tpRegions = " << value.pRegions << '\n';
3514	s << '}';
3515	return s;
3516}
3517
3518std::ostream& operator<< (std::ostream& s, const VkPhysicalDeviceSurfaceInfo2KHR& value)
3519{
3520	s << "VkPhysicalDeviceSurfaceInfo2KHR = {\n";
3521	s << "\tsType = " << value.sType << '\n';
3522	s << "\tpNext = " << value.pNext << '\n';
3523	s << "\tsurface = " << value.surface << '\n';
3524	s << '}';
3525	return s;
3526}
3527
3528std::ostream& operator<< (std::ostream& s, const VkSurfaceCapabilities2KHR& value)
3529{
3530	s << "VkSurfaceCapabilities2KHR = {\n";
3531	s << "\tsType = " << value.sType << '\n';
3532	s << "\tpNext = " << value.pNext << '\n';
3533	s << "\tsurfaceCapabilities = " << value.surfaceCapabilities << '\n';
3534	s << '}';
3535	return s;
3536}
3537
3538std::ostream& operator<< (std::ostream& s, const VkSurfaceFormat2KHR& value)
3539{
3540	s << "VkSurfaceFormat2KHR = {\n";
3541	s << "\tsType = " << value.sType << '\n';
3542	s << "\tpNext = " << value.pNext << '\n';
3543	s << "\tsurfaceFormat = " << value.surfaceFormat << '\n';
3544	s << '}';
3545	return s;
3546}
3547
3548std::ostream& operator<< (std::ostream& s, const VkSharedPresentSurfaceCapabilitiesKHR& value)
3549{
3550	s << "VkSharedPresentSurfaceCapabilitiesKHR = {\n";
3551	s << "\tsType = " << value.sType << '\n';
3552	s << "\tpNext = " << value.pNext << '\n';
3553	s << "\tsharedPresentSupportedUsageFlags = " << getImageUsageFlagsStr(value.sharedPresentSupportedUsageFlags) << '\n';
3554	s << '}';
3555	return s;
3556}
3557
3558std::ostream& operator<< (std::ostream& s, const VkDebugReportCallbackCreateInfoEXT& value)
3559{
3560	s << "VkDebugReportCallbackCreateInfoEXT = {\n";
3561	s << "\tsType = " << value.sType << '\n';
3562	s << "\tpNext = " << value.pNext << '\n';
3563	s << "\tflags = " << getDebugReportFlagsEXTStr(value.flags) << '\n';
3564	s << "\tpfnCallback = " << value.pfnCallback << '\n';
3565	s << "\tpUserData = " << value.pUserData << '\n';
3566	s << '}';
3567	return s;
3568}
3569
3570std::ostream& operator<< (std::ostream& s, const VkPipelineRasterizationStateRasterizationOrderAMD& value)
3571{
3572	s << "VkPipelineRasterizationStateRasterizationOrderAMD = {\n";
3573	s << "\tsType = " << value.sType << '\n';
3574	s << "\tpNext = " << value.pNext << '\n';
3575	s << "\trasterizationOrder = " << value.rasterizationOrder << '\n';
3576	s << '}';
3577	return s;
3578}
3579
3580std::ostream& operator<< (std::ostream& s, const VkDebugMarkerObjectNameInfoEXT& value)
3581{
3582	s << "VkDebugMarkerObjectNameInfoEXT = {\n";
3583	s << "\tsType = " << value.sType << '\n';
3584	s << "\tpNext = " << value.pNext << '\n';
3585	s << "\tobjectType = " << value.objectType << '\n';
3586	s << "\tobject = " << value.object << '\n';
3587	s << "\tpObjectName = " << getCharPtrStr(value.pObjectName) << '\n';
3588	s << '}';
3589	return s;
3590}
3591
3592std::ostream& operator<< (std::ostream& s, const VkDebugMarkerObjectTagInfoEXT& value)
3593{
3594	s << "VkDebugMarkerObjectTagInfoEXT = {\n";
3595	s << "\tsType = " << value.sType << '\n';
3596	s << "\tpNext = " << value.pNext << '\n';
3597	s << "\tobjectType = " << value.objectType << '\n';
3598	s << "\tobject = " << value.object << '\n';
3599	s << "\ttagName = " << value.tagName << '\n';
3600	s << "\ttagSize = " << value.tagSize << '\n';
3601	s << "\tpTag = " << value.pTag << '\n';
3602	s << '}';
3603	return s;
3604}
3605
3606std::ostream& operator<< (std::ostream& s, const VkDebugMarkerMarkerInfoEXT& value)
3607{
3608	s << "VkDebugMarkerMarkerInfoEXT = {\n";
3609	s << "\tsType = " << value.sType << '\n';
3610	s << "\tpNext = " << value.pNext << '\n';
3611	s << "\tpMarkerName = " << getCharPtrStr(value.pMarkerName) << '\n';
3612	s << "\tcolor = " << '\n' << tcu::formatArray(DE_ARRAY_BEGIN(value.color), DE_ARRAY_END(value.color)) << '\n';
3613	s << '}';
3614	return s;
3615}
3616
3617std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationImageCreateInfoNV& value)
3618{
3619	s << "VkDedicatedAllocationImageCreateInfoNV = {\n";
3620	s << "\tsType = " << value.sType << '\n';
3621	s << "\tpNext = " << value.pNext << '\n';
3622	s << "\tdedicatedAllocation = " << value.dedicatedAllocation << '\n';
3623	s << '}';
3624	return s;
3625}
3626
3627std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationBufferCreateInfoNV& value)
3628{
3629	s << "VkDedicatedAllocationBufferCreateInfoNV = {\n";
3630	s << "\tsType = " << value.sType << '\n';
3631	s << "\tpNext = " << value.pNext << '\n';
3632	s << "\tdedicatedAllocation = " << value.dedicatedAllocation << '\n';
3633	s << '}';
3634	return s;
3635}
3636
3637std::ostream& operator<< (std::ostream& s, const VkDedicatedAllocationMemoryAllocateInfoNV& value)
3638{
3639	s << "VkDedicatedAllocationMemoryAllocateInfoNV = {\n";
3640	s << "\tsType = " << value.sType << '\n';
3641	s << "\tpNext = " << value.pNext << '\n';
3642	s << "\timage = " << value.image << '\n';
3643	s << "\tbuffer = " << value.buffer << '\n';
3644	s << '}';
3645	return s;
3646}
3647
3648std::ostream& operator<< (std::ostream& s, const VkExternalImageFormatPropertiesNV& value)
3649{
3650	s << "VkExternalImageFormatPropertiesNV = {\n";
3651	s << "\timageFormatProperties = " << value.imageFormatProperties << '\n';
3652	s << "\texternalMemoryFeatures = " << getExternalMemoryFeatureFlagsNVStr(value.externalMemoryFeatures) << '\n';
3653	s << "\texportFromImportedHandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.exportFromImportedHandleTypes) << '\n';
3654	s << "\tcompatibleHandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.compatibleHandleTypes) << '\n';
3655	s << '}';
3656	return s;
3657}
3658
3659std::ostream& operator<< (std::ostream& s, const VkExternalMemoryImageCreateInfoNV& value)
3660{
3661	s << "VkExternalMemoryImageCreateInfoNV = {\n";
3662	s << "\tsType = " << value.sType << '\n';
3663	s << "\tpNext = " << value.pNext << '\n';
3664	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleTypes) << '\n';
3665	s << '}';
3666	return s;
3667}
3668
3669std::ostream& operator<< (std::ostream& s, const VkExportMemoryAllocateInfoNV& value)
3670{
3671	s << "VkExportMemoryAllocateInfoNV = {\n";
3672	s << "\tsType = " << value.sType << '\n';
3673	s << "\tpNext = " << value.pNext << '\n';
3674	s << "\thandleTypes = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleTypes) << '\n';
3675	s << '}';
3676	return s;
3677}
3678
3679std::ostream& operator<< (std::ostream& s, const VkImportMemoryWin32HandleInfoNV& value)
3680{
3681	s << "VkImportMemoryWin32HandleInfoNV = {\n";
3682	s << "\tsType = " << value.sType << '\n';
3683	s << "\tpNext = " << value.pNext << '\n';
3684	s << "\thandleType = " << getExternalMemoryHandleTypeFlagsNVStr(value.handleType) << '\n';
3685	s << "\thandle = " << value.handle << '\n';
3686	s << '}';
3687	return s;
3688}
3689
3690std::ostream& operator<< (std::ostream& s, const VkExportMemoryWin32HandleInfoNV& value)
3691{
3692	s << "VkExportMemoryWin32HandleInfoNV = {\n";
3693	s << "\tsType = " << value.sType << '\n';
3694	s << "\tpNext = " << value.pNext << '\n';
3695	s << "\tpAttributes = " << value.pAttributes << '\n';
3696	s << "\tdwAccess = " << value.dwAccess << '\n';
3697	s << '}';
3698	return s;
3699}
3700
3701std::ostream& operator<< (std::ostream& s, const VkWin32KeyedMutexAcquireReleaseInfoNV& value)
3702{
3703	s << "VkWin32KeyedMutexAcquireReleaseInfoNV = {\n";
3704	s << "\tsType = " << value.sType << '\n';
3705	s << "\tpNext = " << value.pNext << '\n';
3706	s << "\tacquireCount = " << value.acquireCount << '\n';
3707	s << "\tpAcquireSyncs = " << value.pAcquireSyncs << '\n';
3708	s << "\tpAcquireKeys = " << value.pAcquireKeys << '\n';
3709	s << "\tpAcquireTimeoutMilliseconds = " << value.pAcquireTimeoutMilliseconds << '\n';
3710	s << "\treleaseCount = " << value.releaseCount << '\n';
3711	s << "\tpReleaseSyncs = " << value.pReleaseSyncs << '\n';
3712	s << "\tpReleaseKeys = " << value.pReleaseKeys << '\n';
3713	s << '}';
3714	return s;
3715}
3716
3717std::ostream& operator<< (std::ostream& s, const VkValidationFlagsEXT& value)
3718{
3719	s << "VkValidationFlagsEXT = {\n";
3720	s << "\tsType = " << value.sType << '\n';
3721	s << "\tpNext = " << value.pNext << '\n';
3722	s << "\tdisabledValidationCheckCount = " << value.disabledValidationCheckCount << '\n';
3723	s << "\tpDisabledValidationChecks = " << value.pDisabledValidationChecks << '\n';
3724	s << '}';
3725	return s;
3726}
3727
3728std::ostream& operator<< (std::ostream& s, const VkDeviceGeneratedCommandsFeaturesNVX& value)
3729{
3730	s << "VkDeviceGeneratedCommandsFeaturesNVX = {\n";
3731	s << "\tsType = " << value.sType << '\n';
3732	s << "\tpNext = " << value.pNext << '\n';
3733	s << "\tcomputeBindingPointSupport = " << value.computeBindingPointSupport << '\n';
3734	s << '}';
3735	return s;
3736}
3737
3738std::ostream& operator<< (std::ostream& s, const VkDeviceGeneratedCommandsLimitsNVX& value)
3739{
3740	s << "VkDeviceGeneratedCommandsLimitsNVX = {\n";
3741	s << "\tsType = " << value.sType << '\n';
3742	s << "\tpNext = " << value.pNext << '\n';
3743	s << "\tmaxIndirectCommandsLayoutTokenCount = " << value.maxIndirectCommandsLayoutTokenCount << '\n';
3744	s << "\tmaxObjectEntryCounts = " << value.maxObjectEntryCounts << '\n';
3745	s << "\tminSequenceCountBufferOffsetAlignment = " << value.minSequenceCountBufferOffsetAlignment << '\n';
3746	s << "\tminSequenceIndexBufferOffsetAlignment = " << value.minSequenceIndexBufferOffsetAlignment << '\n';
3747	s << "\tminCommandsTokenBufferOffsetAlignment = " << value.minCommandsTokenBufferOffsetAlignment << '\n';
3748	s << '}';
3749	return s;
3750}
3751
3752std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsTokenNVX& value)
3753{
3754	s << "VkIndirectCommandsTokenNVX = {\n";
3755	s << "\ttokenType = " << value.tokenType << '\n';
3756	s << "\tbuffer = " << value.buffer << '\n';
3757	s << "\toffset = " << value.offset << '\n';
3758	s << '}';
3759	return s;
3760}
3761
3762std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsLayoutTokenNVX& value)
3763{
3764	s << "VkIndirectCommandsLayoutTokenNVX = {\n";
3765	s << "\ttokenType = " << value.tokenType << '\n';
3766	s << "\tbindingUnit = " << value.bindingUnit << '\n';
3767	s << "\tdynamicCount = " << value.dynamicCount << '\n';
3768	s << "\tdivisor = " << value.divisor << '\n';
3769	s << '}';
3770	return s;
3771}
3772
3773std::ostream& operator<< (std::ostream& s, const VkIndirectCommandsLayoutCreateInfoNVX& value)
3774{
3775	s << "VkIndirectCommandsLayoutCreateInfoNVX = {\n";
3776	s << "\tsType = " << value.sType << '\n';
3777	s << "\tpNext = " << value.pNext << '\n';
3778	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
3779	s << "\tflags = " << getIndirectCommandsLayoutUsageFlagsNVXStr(value.flags) << '\n';
3780	s << "\ttokenCount = " << value.tokenCount << '\n';
3781	s << "\tpTokens = " << value.pTokens << '\n';
3782	s << '}';
3783	return s;
3784}
3785
3786std::ostream& operator<< (std::ostream& s, const VkCmdProcessCommandsInfoNVX& value)
3787{
3788	s << "VkCmdProcessCommandsInfoNVX = {\n";
3789	s << "\tsType = " << value.sType << '\n';
3790	s << "\tpNext = " << value.pNext << '\n';
3791	s << "\tobjectTable = " << value.objectTable << '\n';
3792	s << "\tindirectCommandsLayout = " << value.indirectCommandsLayout << '\n';
3793	s << "\tindirectCommandsTokenCount = " << value.indirectCommandsTokenCount << '\n';
3794	s << "\tpIndirectCommandsTokens = " << value.pIndirectCommandsTokens << '\n';
3795	s << "\tmaxSequencesCount = " << value.maxSequencesCount << '\n';
3796	s << "\ttargetCommandBuffer = " << value.targetCommandBuffer << '\n';
3797	s << "\tsequencesCountBuffer = " << value.sequencesCountBuffer << '\n';
3798	s << "\tsequencesCountOffset = " << value.sequencesCountOffset << '\n';
3799	s << "\tsequencesIndexBuffer = " << value.sequencesIndexBuffer << '\n';
3800	s << "\tsequencesIndexOffset = " << value.sequencesIndexOffset << '\n';
3801	s << '}';
3802	return s;
3803}
3804
3805std::ostream& operator<< (std::ostream& s, const VkCmdReserveSpaceForCommandsInfoNVX& value)
3806{
3807	s << "VkCmdReserveSpaceForCommandsInfoNVX = {\n";
3808	s << "\tsType = " << value.sType << '\n';
3809	s << "\tpNext = " << value.pNext << '\n';
3810	s << "\tobjectTable = " << value.objectTable << '\n';
3811	s << "\tindirectCommandsLayout = " << value.indirectCommandsLayout << '\n';
3812	s << "\tmaxSequencesCount = " << value.maxSequencesCount << '\n';
3813	s << '}';
3814	return s;
3815}
3816
3817std::ostream& operator<< (std::ostream& s, const VkObjectTableCreateInfoNVX& value)
3818{
3819	s << "VkObjectTableCreateInfoNVX = {\n";
3820	s << "\tsType = " << value.sType << '\n';
3821	s << "\tpNext = " << value.pNext << '\n';
3822	s << "\tobjectCount = " << value.objectCount << '\n';
3823	s << "\tpObjectEntryTypes = " << value.pObjectEntryTypes << '\n';
3824	s << "\tpObjectEntryCounts = " << value.pObjectEntryCounts << '\n';
3825	s << "\tpObjectEntryUsageFlags = " << value.pObjectEntryUsageFlags << '\n';
3826	s << "\tmaxUniformBuffersPerDescriptor = " << value.maxUniformBuffersPerDescriptor << '\n';
3827	s << "\tmaxStorageBuffersPerDescriptor = " << value.maxStorageBuffersPerDescriptor << '\n';
3828	s << "\tmaxStorageImagesPerDescriptor = " << value.maxStorageImagesPerDescriptor << '\n';
3829	s << "\tmaxSampledImagesPerDescriptor = " << value.maxSampledImagesPerDescriptor << '\n';
3830	s << "\tmaxPipelineLayouts = " << value.maxPipelineLayouts << '\n';
3831	s << '}';
3832	return s;
3833}
3834
3835std::ostream& operator<< (std::ostream& s, const VkObjectTableEntryNVX& value)
3836{
3837	s << "VkObjectTableEntryNVX = {\n";
3838	s << "\ttype = " << value.type << '\n';
3839	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
3840	s << '}';
3841	return s;
3842}
3843
3844std::ostream& operator<< (std::ostream& s, const VkObjectTablePipelineEntryNVX& value)
3845{
3846	s << "VkObjectTablePipelineEntryNVX = {\n";
3847	s << "\ttype = " << value.type << '\n';
3848	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
3849	s << "\tpipeline = " << value.pipeline << '\n';
3850	s << '}';
3851	return s;
3852}
3853
3854std::ostream& operator<< (std::ostream& s, const VkObjectTableDescriptorSetEntryNVX& value)
3855{
3856	s << "VkObjectTableDescriptorSetEntryNVX = {\n";
3857	s << "\ttype = " << value.type << '\n';
3858	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
3859	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
3860	s << "\tdescriptorSet = " << value.descriptorSet << '\n';
3861	s << '}';
3862	return s;
3863}
3864
3865std::ostream& operator<< (std::ostream& s, const VkObjectTableVertexBufferEntryNVX& value)
3866{
3867	s << "VkObjectTableVertexBufferEntryNVX = {\n";
3868	s << "\ttype = " << value.type << '\n';
3869	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
3870	s << "\tbuffer = " << value.buffer << '\n';
3871	s << '}';
3872	return s;
3873}
3874
3875std::ostream& operator<< (std::ostream& s, const VkObjectTableIndexBufferEntryNVX& value)
3876{
3877	s << "VkObjectTableIndexBufferEntryNVX = {\n";
3878	s << "\ttype = " << value.type << '\n';
3879	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
3880	s << "\tbuffer = " << value.buffer << '\n';
3881	s << '}';
3882	return s;
3883}
3884
3885std::ostream& operator<< (std::ostream& s, const VkObjectTablePushConstantEntryNVX& value)
3886{
3887	s << "VkObjectTablePushConstantEntryNVX = {\n";
3888	s << "\ttype = " << value.type << '\n';
3889	s << "\tflags = " << getObjectEntryUsageFlagsNVXStr(value.flags) << '\n';
3890	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
3891	s << "\tstageFlags = " << getShaderStageFlagsStr(value.stageFlags) << '\n';
3892	s << '}';
3893	return s;
3894}
3895
3896std::ostream& operator<< (std::ostream& s, const VkPhysicalDevicePushDescriptorPropertiesKHR& value)
3897{
3898	s << "VkPhysicalDevicePushDescriptorPropertiesKHR = {\n";
3899	s << "\tsType = " << value.sType << '\n';
3900	s << "\tpNext = " << value.pNext << '\n';
3901	s << "\tmaxPushDescriptors = " << value.maxPushDescriptors << '\n';
3902	s << '}';
3903	return s;
3904}
3905
3906std::ostream& operator<< (std::ostream& s, const VkDescriptorUpdateTemplateEntryKHR& value)
3907{
3908	s << "VkDescriptorUpdateTemplateEntryKHR = {\n";
3909	s << "\tdstBinding = " << value.dstBinding << '\n';
3910	s << "\tdstArrayElement = " << value.dstArrayElement << '\n';
3911	s << "\tdescriptorCount = " << value.descriptorCount << '\n';
3912	s << "\tdescriptorType = " << value.descriptorType << '\n';
3913	s << "\toffset = " << value.offset << '\n';
3914	s << "\tstride = " << value.stride << '\n';
3915	s << '}';
3916	return s;
3917}
3918
3919std::ostream& operator<< (std::ostream& s, const VkDescriptorUpdateTemplateCreateInfoKHR& value)
3920{
3921	s << "VkDescriptorUpdateTemplateCreateInfoKHR = {\n";
3922	s << "\tsType = " << value.sType << '\n';
3923	s << "\tpNext = " << value.pNext << '\n';
3924	s << "\tflags = " << getDescriptorUpdateTemplateCreateFlagsKHRStr(value.flags) << '\n';
3925	s << "\tdescriptorUpdateEntryCount = " << value.descriptorUpdateEntryCount << '\n';
3926	s << "\tpDescriptorUpdateEntries = " << value.pDescriptorUpdateEntries << '\n';
3927	s << "\ttemplateType = " << value.templateType << '\n';
3928	s << "\tdescriptorSetLayout = " << value.descriptorSetLayout << '\n';
3929	s << "\tpipelineBindPoint = " << value.pipelineBindPoint << '\n';
3930	s << "\tpipelineLayout = " << value.pipelineLayout << '\n';
3931	s << "\tset = " << value.set << '\n';
3932	s << '}';
3933	return s;
3934}
3935
3936std::ostream& operator<< (std::ostream& s, const VkRefreshCycleDurationGOOGLE& value)
3937{
3938	s << "VkRefreshCycleDurationGOOGLE = {\n";
3939	s << "\trefreshDuration = " << value.refreshDuration << '\n';
3940	s << '}';
3941	return s;
3942}
3943
3944std::ostream& operator<< (std::ostream& s, const VkPastPresentationTimingGOOGLE& value)
3945{
3946	s << "VkPastPresentationTimingGOOGLE = {\n";
3947	s << "\tpresentID = " << value.presentID << '\n';
3948	s << "\tdesiredPresentTime = " << value.desiredPresentTime << '\n';
3949	s << "\tactualPresentTime = " << value.actualPresentTime << '\n';
3950	s << "\tearliestPresentTime = " << value.earliestPresentTime << '\n';
3951	s << "\tpresentMargin = " << value.presentMargin << '\n';
3952	s << '}';
3953	return s;
3954}
3955
3956std::ostream& operator<< (std::ostream& s, const VkPresentTimeGOOGLE& value)
3957{
3958	s << "VkPresentTimeGOOGLE = {\n";
3959	s << "\tpresentID = " << value.presentID << '\n';
3960	s << "\tdesiredPresentTime = " << value.desiredPresentTime << '\n';
3961	s << '}';
3962	return s;
3963}
3964
3965std::ostream& operator<< (std::ostream& s, const VkPresentTimesInfoGOOGLE& value)
3966{
3967	s << "VkPresentTimesInfoGOOGLE = {\n";
3968	s << "\tsType = " << value.sType << '\n';
3969	s << "\tpNext = " << value.pNext << '\n';
3970	s << "\tswapchainCount = " << value.swapchainCount << '\n';
3971	s << "\tpTimes = " << value.pTimes << '\n';
3972	s << '}';
3973	return s;
3974}
3975