text: #include <core/assert.h>
  #include <tmp/config.h>
  #include <stdlib.h>
  #include <stdio.h>
  
  _Noreturn void _assert(const char * const file, const unsigned line) {
  	fprintf(stderr, "ERROR: %s:%u\n", file, line);
  	destroy(DFLT_ERROR_CODE);
  	exit(DFLT_ERROR_CODE);
  }
  
  static const char * get_vk_result_str(const VkResult result) {
  	switch(result) {
  #if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS)
  		MAKE_ENUM_STR(VK_SUCCESS);
  		MAKE_ENUM_STR(VK_NOT_READY);
  		MAKE_ENUM_STR(VK_TIMEOUT);
  		MAKE_ENUM_STR(VK_EVENT_SET);
  		MAKE_ENUM_STR(VK_EVENT_RESET);
  		MAKE_ENUM_STR(VK_INCOMPLETE);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_HOST_MEMORY);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_DEVICE_MEMORY);
  		MAKE_ENUM_STR(VK_ERROR_INITIALIZATION_FAILED);
  		MAKE_ENUM_STR(VK_ERROR_DEVICE_LOST);
  		MAKE_ENUM_STR(VK_ERROR_MEMORY_MAP_FAILED);
  		MAKE_ENUM_STR(VK_ERROR_LAYER_NOT_PRESENT);
  		MAKE_ENUM_STR(VK_ERROR_EXTENSION_NOT_PRESENT);
  		MAKE_ENUM_STR(VK_ERROR_FEATURE_NOT_PRESENT);
  		MAKE_ENUM_STR(VK_ERROR_INCOMPATIBLE_DRIVER);
  		MAKE_ENUM_STR(VK_ERROR_TOO_MANY_OBJECTS);
  		MAKE_ENUM_STR(VK_ERROR_FORMAT_NOT_SUPPORTED);
  		MAKE_ENUM_STR(VK_ERROR_FRAGMENTED_POOL);
  		MAKE_ENUM_STR(VK_ERROR_SURFACE_LOST_KHR);
  		MAKE_ENUM_STR(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR);
  		MAKE_ENUM_STR(VK_SUBOPTIMAL_KHR);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_DATE_KHR);
  		MAKE_ENUM_STR(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR);
  		MAKE_ENUM_STR(VK_ERROR_VALIDATION_FAILED_EXT);
  		MAKE_ENUM_STR(VK_ERROR_INVALID_SHADER_NV);
  		MAKE_ENUM_STR(VK_RESULT_RANGE_SIZE);
  		MAKE_ENUM_STR(VK_RESULT_MAX_ENUM);
  		MAKE_ENUM_STR(VK_ERROR_UNKNOWN);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_POOL_MEMORY);
  		MAKE_ENUM_STR(VK_ERROR_INVALID_EXTERNAL_HANDLE);
  		MAKE_ENUM_STR(VK_ERROR_FRAGMENTATION);
  		MAKE_ENUM_STR(VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS);
  		MAKE_ENUM_STR(VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT);
  		MAKE_ENUM_STR(VK_ERROR_NOT_PERMITTED_EXT);
  		MAKE_ENUM_STR(VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT);
  #elif defined(PLATFORM_ANDROID)
  		MAKE_ENUM_STR(VK_SUCCESS);
  		MAKE_ENUM_STR(VK_NOT_READY);
  		MAKE_ENUM_STR(VK_TIMEOUT);
  		MAKE_ENUM_STR(VK_EVENT_SET);
  		MAKE_ENUM_STR(VK_EVENT_RESET);
  		MAKE_ENUM_STR(VK_INCOMPLETE);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_HOST_MEMORY);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_DEVICE_MEMORY);
  		MAKE_ENUM_STR(VK_ERROR_INITIALIZATION_FAILED);
  		MAKE_ENUM_STR(VK_ERROR_DEVICE_LOST);
  		MAKE_ENUM_STR(VK_ERROR_MEMORY_MAP_FAILED);
  		MAKE_ENUM_STR(VK_ERROR_LAYER_NOT_PRESENT);
  		MAKE_ENUM_STR(VK_ERROR_EXTENSION_NOT_PRESENT);
  		MAKE_ENUM_STR(VK_ERROR_FEATURE_NOT_PRESENT);
  		MAKE_ENUM_STR(VK_ERROR_INCOMPATIBLE_DRIVER);
  		MAKE_ENUM_STR(VK_ERROR_TOO_MANY_OBJECTS);
  		MAKE_ENUM_STR(VK_ERROR_FORMAT_NOT_SUPPORTED);
  		MAKE_ENUM_STR(VK_ERROR_FRAGMENTED_POOL);
  		MAKE_ENUM_STR(VK_ERROR_SURFACE_LOST_KHR);
  		MAKE_ENUM_STR(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR);
  		MAKE_ENUM_STR(VK_SUBOPTIMAL_KHR);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_DATE_KHR);
  		MAKE_ENUM_STR(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR);
  		MAKE_ENUM_STR(VK_ERROR_VALIDATION_FAILED_EXT);
  		MAKE_ENUM_STR(VK_ERROR_INVALID_SHADER_NV);
  		MAKE_ENUM_STR(VK_ERROR_OUT_OF_POOL_MEMORY_KHR);
  		MAKE_ENUM_STR(VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR);
  		MAKE_ENUM_STR(VK_RESULT_RANGE_SIZE);
  		MAKE_ENUM_STR(VK_RESULT_MAX_ENUM);
  #elif defined(PLATFORM_WEB)
  		MAKE_ENUM_STR(VK_SUCCESS);
  		MAKE_ENUM_STR(VK_ERROR_INCOMPATIBLE_DRIVER);
  		default: return NULL;
  #endif
  	}
  
  	return NULL;
  }
  
  _Noreturn void _vk_assert(const char * const file, const unsigned line, const VkResult result) {
  	fprintf(stderr, "VK_ERROR: %s\n", get_vk_result_str(result));
  	_assert(file, line);
  }
  
  #ifdef LINUX_WSI_XCB
  static const char * get_xcb_result_str(const int result) {
  	switch(result) {
  		MAKE_ENUM_STR(XCB_CONN_ERROR);
  		MAKE_ENUM_STR(XCB_CONN_CLOSED_EXT_NOTSUPPORTED);
  		MAKE_ENUM_STR(XCB_CONN_CLOSED_MEM_INSUFFICIENT);
  		MAKE_ENUM_STR(XCB_CONN_CLOSED_REQ_LEN_EXCEED);
  		MAKE_ENUM_STR(XCB_CONN_CLOSED_PARSE_ERR);
  		MAKE_ENUM_STR(XCB_CONN_CLOSED_INVALID_SCREEN);
  	}
  	
  	return NULL;
  }
  
  _Noreturn void _xcb_assert(const char * const file, const unsigned line, const int result) {
  	fprintf(stderr, "XCB_ERROR: %s\n", get_xcb_result_str(result));
  	_assert(file, line);
  }
  #endif
  