/* WARNING: This is auto-generated file. Do not modify, since changes will
 * be lost! Modify the generating script instead.
 */
static const struct
{
	std::string driver;
	uint32_t id;
} driverIds [] =
{
	{"VK_DRIVER_ID_AMD_PROPRIETARY", 1},
	{"VK_DRIVER_ID_AMD_OPEN_SOURCE", 2},
	{"VK_DRIVER_ID_MESA_RADV", 3},
	{"VK_DRIVER_ID_NVIDIA_PROPRIETARY", 4},
	{"VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS", 5},
	{"VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA", 6},
	{"VK_DRIVER_ID_IMAGINATION_PROPRIETARY", 7},
	{"VK_DRIVER_ID_QUALCOMM_PROPRIETARY", 8},
	{"VK_DRIVER_ID_ARM_PROPRIETARY", 9},
	{"VK_DRIVER_ID_GOOGLE_SWIFTSHADER", 10},
	{"VK_DRIVER_ID_GGP_PROPRIETARY", 11},
	{"VK_DRIVER_ID_BROADCOM_PROPRIETARY", 12},
	{"VK_DRIVER_ID_MESA_LLVMPIPE", 13},
	{"VK_DRIVER_ID_MOLTENVK", 14},
	{"VK_DRIVER_ID_COREAVI_PROPRIETARY", 15},
	{"VK_DRIVER_ID_JUICE_PROPRIETARY", 16},
	{"VK_DRIVER_ID_VERISILICON_PROPRIETARY", 17},
	{"VK_DRIVER_ID_MESA_TURNIP", 18},
	{"VK_DRIVER_ID_MESA_V3DV", 19},
	{"VK_DRIVER_ID_MESA_PANVK", 20},
	{"VK_DRIVER_ID_AMD_PROPRIETARY_KHR", 1},	// VK_DRIVER_ID_AMD_PROPRIETARY
	{"VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR", 2},	// VK_DRIVER_ID_AMD_OPEN_SOURCE
	{"VK_DRIVER_ID_MESA_RADV_KHR", 3},	// VK_DRIVER_ID_MESA_RADV
	{"VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR", 4},	// VK_DRIVER_ID_NVIDIA_PROPRIETARY
	{"VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR", 5},	// VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS
	{"VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR", 6},	// VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA
	{"VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR", 7},	// VK_DRIVER_ID_IMAGINATION_PROPRIETARY
	{"VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR", 8},	// VK_DRIVER_ID_QUALCOMM_PROPRIETARY
	{"VK_DRIVER_ID_ARM_PROPRIETARY_KHR", 9},	// VK_DRIVER_ID_ARM_PROPRIETARY
	{"VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR", 10},	// VK_DRIVER_ID_GOOGLE_SWIFTSHADER
	{"VK_DRIVER_ID_GGP_PROPRIETARY_KHR", 11},	// VK_DRIVER_ID_GGP_PROPRIETARY
	{"VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR", 12},	// VK_DRIVER_ID_BROADCOM_PROPRIETARY
	{"VK_DRIVER_ID_MAX_ENUM", 0x7FFFFFFF}
};
