@@ -12,7 +12,14 @@ import {
12
12
import { exec , spawn } from 'child_process'
13
13
14
14
import { execAsync , getWineFromProton } from './utils'
15
- import { execOptions , toolsPath , isMac , isWindows , userHome } from './constants'
15
+ import {
16
+ execOptions ,
17
+ toolsPath ,
18
+ isMac ,
19
+ isWindows ,
20
+ userHome ,
21
+ isLinux
22
+ } from './constants'
16
23
import { logError , logInfo , LogPrefix , logWarning } from './logger/logger'
17
24
import i18next from 'i18next'
18
25
import { dirname , join } from 'path'
@@ -48,36 +55,7 @@ export const DXVK = {
48
55
} ,
49
56
{
50
57
name : 'dxvk' ,
51
- url : ( ) => {
52
- if ( any_gpu_supports_version ( [ 1 , 3 , 0 ] ) ) {
53
- const instance_version = get_vulkan_instance_version ( )
54
- if (
55
- instance_version &&
56
- semverLt ( instance_version . join ( '.' ) , '1.3.0' )
57
- ) {
58
- // FIXME: How does the instance version matter? Even with 1.2, newer DXVK seems to work fine
59
- logWarning (
60
- 'Vulkan 1.3 is supported by GPUs in this system, but instance version is outdated' ,
61
- LogPrefix . DXVKInstaller
62
- )
63
- }
64
- return 'https://api.github.com/repos/doitsujin/dxvk/releases/latest'
65
- }
66
- if ( any_gpu_supports_version ( [ 1 , 1 , 0 ] ) ) {
67
- logInfo (
68
- 'The GPU(s) in this system only support Vulkan 1.1/1.2, falling back to DXVK 1.10.3' ,
69
- LogPrefix . DXVKInstaller
70
- )
71
- return 'https://api.github.com/repos/doitsujin/dxvk/releases/tags/v1.10.3'
72
- }
73
- logWarning (
74
- 'No GPU with Vulkan 1.1 support found, DXVK will not work' ,
75
- LogPrefix . DXVKInstaller
76
- )
77
- // FIXME: We currently lack a "Don't download at all" option here, but
78
- // that would also need bigger changes in the frontend
79
- return 'https://api.github.com/repos/doitsujin/dxvk/releases/latest'
80
- } ,
58
+ url : getDxvkUrl ( ) ,
81
59
extractCommand : 'tar -xf' ,
82
60
os : 'linux'
83
61
} ,
@@ -94,10 +72,9 @@ export const DXVK = {
94
72
return
95
73
}
96
74
97
- const download_url = typeof tool . url === 'string' ? tool . url : tool . url ( )
98
75
const {
99
76
data : { assets }
100
- } = await axios . get ( download_url )
77
+ } = await axios . get ( tool . url )
101
78
102
79
const { name, browser_download_url : downloadUrl } = assets [ 0 ]
103
80
const pkg = name . replace ( '.tar.gz' , '' ) . replace ( '.tar.xz' , '' )
@@ -507,3 +484,39 @@ export const Winetricks = {
507
484
)
508
485
}
509
486
}
487
+
488
+ /**
489
+ * Figures out the right DXVK version to use, taking the user's hardware
490
+ * (specifically their Vulkan support) into account
491
+ */
492
+ function getDxvkUrl ( ) : string {
493
+ if ( ! isLinux ) {
494
+ return ''
495
+ }
496
+
497
+ if ( any_gpu_supports_version ( [ 1 , 3 , 0 ] ) ) {
498
+ const instance_version = get_vulkan_instance_version ( )
499
+ if ( instance_version && semverLt ( instance_version . join ( '.' ) , '1.3.0' ) ) {
500
+ // FIXME: How does the instance version matter? Even with 1.2, newer DXVK seems to work fine
501
+ logWarning (
502
+ 'Vulkan 1.3 is supported by GPUs in this system, but instance version is outdated' ,
503
+ LogPrefix . DXVKInstaller
504
+ )
505
+ }
506
+ return 'https://api.github.com/repos/doitsujin/dxvk/releases/latest'
507
+ }
508
+ if ( any_gpu_supports_version ( [ 1 , 1 , 0 ] ) ) {
509
+ logInfo (
510
+ 'The GPU(s) in this system only support Vulkan 1.1/1.2, falling back to DXVK 1.10.3' ,
511
+ LogPrefix . DXVKInstaller
512
+ )
513
+ return 'https://api.github.com/repos/doitsujin/dxvk/releases/tags/v1.10.3'
514
+ }
515
+ logWarning (
516
+ 'No GPU with Vulkan 1.1 support found, DXVK will not work' ,
517
+ LogPrefix . DXVKInstaller
518
+ )
519
+ // FIXME: We currently lack a "Don't download at all" option here, but
520
+ // that would also need bigger changes in the frontend
521
+ return 'https://api.github.com/repos/doitsujin/dxvk/releases/latest'
522
+ }
0 commit comments