Skip to content

Commit 940d455

Browse files
committed
fix Windows Vulkan action againnn
1 parent f69d01c commit 940d455

3 files changed

Lines changed: 79 additions & 70 deletions

File tree

.github/workflows/build.yml

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -39,47 +39,50 @@ jobs:
3939
if: contains(matrix.os, 'windows')
4040
shell: pwsh
4141
run: |
42-
function Find-GlslangValidator {
43-
$cmd = Get-Command glslangValidator -ErrorAction SilentlyContinue
44-
if ($cmd) { return $cmd.Source }
42+
$ErrorActionPreference = 'Stop'
43+
$headers = @{
44+
"Accept" = "application/vnd.github+json"
45+
"X-GitHub-Api-Version" = "2022-11-28"
46+
}
4547
46-
$candidates = @()
47-
if ($env:VULKAN_SDK) {
48-
$candidates += (Join-Path $env:VULKAN_SDK 'Bin\glslangValidator.exe')
49-
}
50-
$candidates += @(
51-
'C:\VulkanSDK\*\Bin\glslangValidator.exe',
52-
'C:\Program Files\VulkanSDK\*\Bin\glslangValidator.exe',
53-
"$env:USERPROFILE\VulkanSDK\*\Bin\glslangValidator.exe",
54-
'C:\ProgramData\chocolatey\lib\vulkan-sdk\tools\**\glslangValidator.exe'
55-
)
56-
57-
foreach ($pattern in $candidates) {
58-
$found = Get-ChildItem -Path $pattern -File -Recurse -ErrorAction SilentlyContinue |
59-
Sort-Object FullName -Descending | Select-Object -First 1
60-
if ($found) { return $found.FullName }
61-
}
48+
function Get-GlslangAssetUrl {
49+
param([string]$Tag)
50+
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/KhronosGroup/glslang/releases/tags/$Tag" -Headers $headers
51+
$asset = $release.assets | Where-Object { $_.name -match 'windows.*Release\.zip$' } | Select-Object -First 1
52+
if ($asset) { return $asset.browser_download_url }
6253
return $null
6354
}
6455
65-
$ErrorActionPreference = 'Continue'
66-
choco install vulkan-sdk -y
67-
$ErrorActionPreference = 'Stop'
68-
69-
$validator = Find-GlslangValidator
70-
if (-not $validator) {
71-
Write-Host "glslangValidator not found after Chocolatey install, falling back to winget..."
72-
winget install --id KhronosGroup.VulkanSDK --accept-package-agreements --accept-source-agreements --disable-interactivity
73-
$validator = Find-GlslangValidator
56+
$assetUrl = $null
57+
foreach ($tag in @("main-tot", "master-tot")) {
58+
try {
59+
$assetUrl = Get-GlslangAssetUrl -Tag $tag
60+
if ($assetUrl) {
61+
Write-Host "Using glslang release tag: $tag"
62+
break
63+
}
64+
} catch {
65+
Write-Host "Tag $tag lookup failed: $($_.Exception.Message)"
66+
}
7467
}
68+
if (-not $assetUrl) { throw "Unable to locate a Windows glslang asset from main-tot/master-tot." }
7569
76-
if (-not $validator) {
77-
throw "glslangValidator.exe not found after Vulkan SDK installation."
78-
}
70+
$zipPath = Join-Path $env:RUNNER_TEMP "glslang-windows.zip"
71+
$extractDir = Join-Path $env:RUNNER_TEMP "glslang"
72+
if (Test-Path $extractDir) { Remove-Item -Recurse -Force $extractDir }
73+
74+
Invoke-WebRequest -Uri $assetUrl -OutFile $zipPath
75+
Expand-Archive -Path $zipPath -DestinationPath $extractDir -Force
76+
77+
$validator = Get-ChildItem -Path $extractDir -Recurse -File -Filter glslangValidator.exe -ErrorAction SilentlyContinue | Select-Object -First 1
78+
$glslang = Get-ChildItem -Path $extractDir -Recurse -File -Filter glslang.exe -ErrorAction SilentlyContinue | Select-Object -First 1
79+
$tool = if ($validator) { $validator } elseif ($glslang) { $glslang } else { $null }
80+
if (-not $tool) { throw "glslang executable not found in downloaded asset." }
7981
80-
Write-Host "Using glslangValidator: $validator"
81-
(Split-Path -Parent $validator) | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
82-
& $validator --version
82+
$toolDir = Split-Path -Parent $tool.FullName
83+
Write-Host "Using glslang tool: $($tool.FullName)"
84+
$toolDir | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
85+
& $tool.FullName --version
8386
8487
- name: Build Desktop
8588
run: python3 scripts/build.py desktop

.github/workflows/release.yml

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -49,47 +49,50 @@ jobs:
4949
if: contains(matrix.os, 'windows')
5050
shell: pwsh
5151
run: |
52-
function Find-GlslangValidator {
53-
$cmd = Get-Command glslangValidator -ErrorAction SilentlyContinue
54-
if ($cmd) { return $cmd.Source }
52+
$ErrorActionPreference = 'Stop'
53+
$headers = @{
54+
"Accept" = "application/vnd.github+json"
55+
"X-GitHub-Api-Version" = "2022-11-28"
56+
}
5557
56-
$candidates = @()
57-
if ($env:VULKAN_SDK) {
58-
$candidates += (Join-Path $env:VULKAN_SDK 'Bin\glslangValidator.exe')
59-
}
60-
$candidates += @(
61-
'C:\VulkanSDK\*\Bin\glslangValidator.exe',
62-
'C:\Program Files\VulkanSDK\*\Bin\glslangValidator.exe',
63-
"$env:USERPROFILE\VulkanSDK\*\Bin\glslangValidator.exe",
64-
'C:\ProgramData\chocolatey\lib\vulkan-sdk\tools\**\glslangValidator.exe'
65-
)
66-
67-
foreach ($pattern in $candidates) {
68-
$found = Get-ChildItem -Path $pattern -File -Recurse -ErrorAction SilentlyContinue |
69-
Sort-Object FullName -Descending | Select-Object -First 1
70-
if ($found) { return $found.FullName }
71-
}
58+
function Get-GlslangAssetUrl {
59+
param([string]$Tag)
60+
$release = Invoke-RestMethod -Uri "https://api.github.com/repos/KhronosGroup/glslang/releases/tags/$Tag" -Headers $headers
61+
$asset = $release.assets | Where-Object { $_.name -match 'windows.*Release\.zip$' } | Select-Object -First 1
62+
if ($asset) { return $asset.browser_download_url }
7263
return $null
7364
}
7465
75-
$ErrorActionPreference = 'Continue'
76-
choco install vulkan-sdk -y
77-
$ErrorActionPreference = 'Stop'
78-
79-
$validator = Find-GlslangValidator
80-
if (-not $validator) {
81-
Write-Host "glslangValidator not found after Chocolatey install, falling back to winget..."
82-
winget install --id KhronosGroup.VulkanSDK --accept-package-agreements --accept-source-agreements --disable-interactivity
83-
$validator = Find-GlslangValidator
66+
$assetUrl = $null
67+
foreach ($tag in @("main-tot", "master-tot")) {
68+
try {
69+
$assetUrl = Get-GlslangAssetUrl -Tag $tag
70+
if ($assetUrl) {
71+
Write-Host "Using glslang release tag: $tag"
72+
break
73+
}
74+
} catch {
75+
Write-Host "Tag $tag lookup failed: $($_.Exception.Message)"
76+
}
8477
}
78+
if (-not $assetUrl) { throw "Unable to locate a Windows glslang asset from main-tot/master-tot." }
8579
86-
if (-not $validator) {
87-
throw "glslangValidator.exe not found after Vulkan SDK installation."
88-
}
80+
$zipPath = Join-Path $env:RUNNER_TEMP "glslang-windows.zip"
81+
$extractDir = Join-Path $env:RUNNER_TEMP "glslang"
82+
if (Test-Path $extractDir) { Remove-Item -Recurse -Force $extractDir }
83+
84+
Invoke-WebRequest -Uri $assetUrl -OutFile $zipPath
85+
Expand-Archive -Path $zipPath -DestinationPath $extractDir -Force
86+
87+
$validator = Get-ChildItem -Path $extractDir -Recurse -File -Filter glslangValidator.exe -ErrorAction SilentlyContinue | Select-Object -First 1
88+
$glslang = Get-ChildItem -Path $extractDir -Recurse -File -Filter glslang.exe -ErrorAction SilentlyContinue | Select-Object -First 1
89+
$tool = if ($validator) { $validator } elseif ($glslang) { $glslang } else { $null }
90+
if (-not $tool) { throw "glslang executable not found in downloaded asset." }
8991
90-
Write-Host "Using glslangValidator: $validator"
91-
(Split-Path -Parent $validator) | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
92-
& $validator --version
92+
$toolDir = Split-Path -Parent $tool.FullName
93+
Write-Host "Using glslang tool: $($tool.FullName)"
94+
$toolDir | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
95+
& $tool.FullName --version
9396
9497
- name: Build Desktop
9598
run: python3 scripts/build.py desktop

scripts/build.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def find_shader_compiler():
1919
glslang = shutil.which("glslangValidator")
2020
if glslang:
2121
return ("glslangValidator", glslang)
22+
glslang_bin = shutil.which("glslang")
23+
if glslang_bin:
24+
return ("glslang", glslang_bin)
2225
glslc = shutil.which("glslc")
2326
if glslc:
2427
return ("glslc", glslc)
@@ -32,7 +35,7 @@ def compile_vulkan_shaders(out_dir):
3235

3336
compiler_kind, compiler_path = find_shader_compiler()
3437
if compiler_path is None:
35-
print("Vulkan shader compiler not found. Please install glslangValidator or glslc.")
38+
print("Vulkan shader compiler not found. Please install glslangValidator, glslang, or glslc.")
3639
print("Vulkan backend requires SPIR-V shader binaries.")
3740
sys.exit(1)
3841

@@ -41,7 +44,7 @@ def compile_vulkan_shaders(out_dir):
4144
continue
4245
src_file = os.path.join(shader_src_dir, f)
4346
out_file = os.path.join(out_dir, f.rsplit(".", 1)[0] + ".spv")
44-
if compiler_kind == "glslangValidator":
47+
if compiler_kind in ("glslangValidator", "glslang"):
4548
run_cmd([compiler_path, "-V", src_file, f"-I{shader_src_dir}", "-o", out_file])
4649
else:
4750
run_cmd([compiler_path, src_file, f"-I{shader_src_dir}", "-o", out_file])

0 commit comments

Comments
 (0)