private static string GetVulkanDriverVersionRaw(string gpuInfo, string version) { if (string.IsNullOrEmpty(version)) { return(null); } var ver = int.Parse(version); if (IsAmd(gpuInfo)) { var major = (ver >> 22) & 0x3ff; var minor = (ver >> 12) & 0x3ff; var patch = ver & 0xfff; var result = $"{major}.{minor}.{patch}"; if (gpuInfo.Contains("RADV", StringComparison.InvariantCultureIgnoreCase)) { return(result); } return(AmdDriverVersionProvider.GetFromVulkanAsync(result).ConfigureAwait(false).GetAwaiter().GetResult()); } else { var major = (ver >> 22) & 0x3ff; var minor = (ver >> 14) & 0xff; var patch = ver & 0x3fff; if (major == 0 && gpuInfo.Contains("Intel", StringComparison.InvariantCultureIgnoreCase)) { return($"{minor}.{patch}"); } if (IsNvidia(gpuInfo)) { if (patch == 0) { return($"{major}.{minor}"); } return($"{major}.{minor:00}.{(patch >> 6) & 0xff}.{patch & 0x3f}"); } return($"{major}.{minor}.{patch}"); } }
private static string GetVulkanDriverVersion(string gpu, string foundDevices) { if (string.IsNullOrEmpty(gpu) || string.IsNullOrEmpty(foundDevices)) { return(null); } var info = (from line in foundDevices.Split(Environment.NewLine) let m = VulkanDeviceInfo.Match(line) where m.Success select m ).FirstOrDefault(m => m.Groups["device_name"].Value == gpu); var result = info?.Groups["version"].Value; if (string.IsNullOrEmpty(result)) { return(null); } if (gpu.Contains("Radeon", StringComparison.InvariantCultureIgnoreCase) || gpu.Contains("AMD", StringComparison.InvariantCultureIgnoreCase) || gpu.Contains("ATI ", StringComparison.InvariantCultureIgnoreCase)) { if (gpu.Contains("RADV", StringComparison.InvariantCultureIgnoreCase)) { return(result); } return(AmdDriverVersionProvider.GetFromVulkanAsync(result).ConfigureAwait(false).GetAwaiter().GetResult()); } if (result.EndsWith(".0.0")) { result = result.Substring(0, result.Length - 4); } if (result.Length > 3 && result[result.Length - 2] == '.') { result = result.Substring(0, result.Length - 1) + "0" + result[result.Length - 1]; } return(result); }