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