[int]$ossize\r
)\r
\r
+# Start logging\r
+$log=$Env:Temp+"\VulkanRT"\r
+New-Item -ItemType Directory -Force -Path $log | Out-Null\r
+$log=$log+"\ConfigLayersAndVulkanDLL.log"\r
+echo "ConfigLayersAndVulkanDLL.ps1 $majorabi $ossize" >$log\r
+(Get-Date).ToString() >>$log\r
+\r
$vulkandll = "vulkan-"+$majorabi+".dll"\r
$windrive = $env:SYSTEMDRIVE\r
$winfolder = $env:SYSTEMROOT\r
\r
function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)\r
{\r
+ echo "UpdateVulkanSysFolder $dir $writeSdkName" >>$log\r
+\r
# Push the current path on the stack and go to $dir\r
Push-Location -Path $dir\r
\r
# First Initialize the list to empty\r
$script:VulkanDllList = @()\r
\r
- # Find all DLL objects in this directory\r
+ # Find all vulkan dll files in this directory\r
dir -name vulkan-$majorabi-*.dll |\r
ForEach-Object {\r
+ echo "File $_" >>$log\r
if ($_ -match "=" -or\r
$_ -match "@" -or\r
$_ -match " " -or\r
# If a file name contains "=", "@", or " ", or it contains less then 5 dashes or more than\r
# 7 dashes, it wasn't installed by the Vulkan Run Time.\r
# Note that we need to use return inside of ForEach-Object is to continue with iteration.\r
+ echo "Rejected $_ - bad format" >>$log\r
+ return\r
+ }\r
+\r
+ # If the corresponding vulkaninfo is not present, it wasn't installed by the Vulkan Run Time\r
+ $vulkaninfo=$_ -replace ".dll",".exe"\r
+ $vulkaninfo=$vulkaninfo -replace "vulkan","vulkaninfo"\r
+ if (-not (Test-Path $vulkaninfo)) {\r
+ echo "Rejected $_ - vulkaninfo not present" >>$log\r
return\r
}\r
+\r
$major=$_.Split('-')[2]\r
$majorOrig=$major\r
$minor=$_.Split('-')[3]\r
$prebuildno="z"*10\r
}\r
}\r
+ echo "Version $majorOrig $minorOrig $patchOrig $buildnoOrig $prereleaseOrig $prebuildnoOrig" >>$log\r
\r
# Make sure fields that are supposed to be numbers are numbers\r
- if (notNumeric($major)) {return}\r
- if (notNumeric($minor)) {return}\r
- if (notNumeric($patch)) {return}\r
- if (notNumeric($buildno)) {return}\r
+ if (notNumeric($major)) {\r
+ echo "Rejected $_ - bad major" >>$log\r
+ return\r
+ }\r
+ if (notNumeric($minor)) {\r
+ echo "Rejected $_ - bad minor" >>$log\r
+ return\r
+ }\r
+ if (notNumeric($patch)) {\r
+ echo "Rejected $_ - bad patch" >>$log\r
+ return\r
+ }\r
+ if (notNumeric($buildno)) {\r
+ echo "Rejected $_ - bad buildno" >>$log\r
+ return\r
+ }\r
if (notNumeric($prebuildno)) {\r
- if ($prebuildno -ne "z"*10) {return}\r
+ if ($prebuildno -ne "z"*10) {\r
+ echo "Rejected $_ - bad prebuildno" >>$log\r
+ return\r
+ }\r
}\r
\r
$major = $major.padleft(10,'0')\r
$prebuildno = $prebuildno.padleft(10,'0')\r
\r
# Add a new element to the $VulkanDllList array\r
+ echo "Adding $_ to Vulkan dll list " >>$log\r
$script:VulkanDllList+="$major=$minor=$patch=$buildno=$prerelease=$prebuildno= $_ @$majorOrig@$minorOrig@$patchOrig@$buildnoOrig@$prereleaseOrig@$prebuildnoOrig@"\r
}\r
\r
# The most recent vulkanDLL is the second word in the last element of the\r
# sorted $VulkanDllList. Copy it to $vulkandll.\r
$mrVulkanDll=$script:VulkanDllList[-1].Split(' ')[1]\r
+ echo "copy $mrVulkanDll $vulkandll" >>$log\r
copy $mrVulkanDll $vulkandll\r
\r
# Copy the most recent version of vulkaninfo-<abimajor>-*.exe to vulkaninfo.exe.\r
# We create the source file name for the copy from $mrVulkanDll.\r
$mrVulkaninfo=$mrVulkanDll -replace ".dll",".exe"\r
$mrVulkaninfo=$mrVulkaninfo -replace "vulkan","vulkaninfo"\r
+ echo "copy $mrVulkaninfo vulkaninfo.exe" >>$log\r
copy $mrVulkaninfo vulkaninfo.exe\r
\r
# Create the name used in the registry for the SDK associated with $mrVulkanDll.\r
if ($prebuildno -ne "") {\r
$sdktempname=$sdktempname + "." + $prebuildno\r
}\r
+ echo "sdkname = $sdktempname" >>$log\r
}\r
\r
# Return to our previous folder\r
# We only care about SYSWOW64 if we're targeting a 64-bit OS\r
if ($ossize -eq 64) {\r
# Update the SYSWOW64 Vulkan DLLS/EXEs\r
+ echo "Calling UpdateVulkanSysFolder $winfolder\SYSWOW64 0" >>$log\r
UpdateVulkanSysFolder $winfolder\SYSWOW64 0\r
}\r
\r
# Update the SYSTEM32 Vulkan DLLS/EXEs\r
+echo "Calling UpdateVulkanSysFolder $winfolder\SYSTEM32 1" >>$log\r
UpdateVulkanSysFolder $winfolder\SYSTEM32 1\r
\r
# Create an array of vulkan sdk install dirs\r
\r
+echo "Creating array of of Vulkan SDK Install dirs" >>$log\r
$mrVulkanDllInstallDir=""\r
$VulkanSdkDirs=@()\r
Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |\r
$tmp=Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regkey -Name UninstallString\r
$tmp=$tmp -replace "\\Uninstall.exe.*",""\r
$tmp=$tmp -replace ".*=.",""\r
+ echo "Adding $tmp to VulkanSDKDirs" >>$log\r
$VulkanSdkDirs+=$tmp\r
if ($regkey -eq $script:sdkname) {\r
# Save away the sdk install dir for the the most recent vulkandll\r
+ echo "Setting mrVulkanDllInstallDir to $tmp" >>$log\r
$mrVulkanDllInstallDir=$tmp\r
}\r
}\r
# Search list of sdk install dirs for an sdk compatible with $script:sdkname.\r
# We go backwards through VulkanDllList to generate SDK names, because we want the most recent SDK.\r
if ($mrVulkanDllInstallDir -eq "") {\r
+ echo "Searching VulkanDllList" >>$log\r
ForEach ($idx in ($script:VulkanDllList.Length-1)..0) {\r
+ $tmp=$script:VulkanDllList[$idx]\r
$vulkanDllMajor=$script:VulkanDllList[$idx].Split('@')[1]\r
$vulkanDllMinor=$script:VulkanDllList[$idx].Split('@')[2]\r
$vulkanDllPatch=$script:VulkanDllList[$idx].Split('@')[3]\r
if ($vulkanDllPrebuildno) {\r
$regEntry=$regEntry+"."+$vulkanDllPrebuildno\r
}\r
+ echo "Comparing $regEntry" >>$log\r
$rval=Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regEntry -ErrorAction SilentlyContinue\r
$instDir=$rval\r
$instDir=$instDir -replace "\\Uninstall.exe.*",""\r
$reMinor=$rval.Split('.')[1]\r
$rePatch=$rval.Split('.')[2]\r
if ($reMajor+$reMinor+$rePatch -eq $vulkanDllMajor+$vulkanDllMinor+$vulkanDllPatch) {\r
+ echo "Setting mrVulkanDllInstallDir to $instDir" >>$log\r
$mrVulkanDllInstallDir=$instDir\r
break\r
}\r
# Note that we remove only those entries created by Vulkan SDKs. If other\r
# layers were installed that are not from an SDK, we don't mess with them.\r
\r
+echo "Removing old layer registry entries from HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ExplicitLayers | Select-Object -ExpandProperty Property |\r
ForEach-Object {\r
$regval=$_\r
ForEach ($sdkdir in $VulkanSdkDirs) {\r
if ($regval -like "$sdkdir\*.json") {\r
Remove-ItemProperty -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -name $regval\r
+ echo "Removed registry entry $regval" >>$log\r
}\r
}\r
}\r
ForEach ($sdkdir in $VulkanSdkDirs) {\r
if ($regval -like "$sdkdir\*.json") {\r
Remove-ItemProperty -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -name $regval\r
+ echo "Removed WOW6432Node registry entry $regval" >>$log\r
}\r
}\r
}\r
\r
# Create layer registry entries associated with Vulkan SDK from which $mrVulkanDll is from\r
\r
+echo "Creating new layer registry entries in HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
if ($mrVulkanDllInstallDir -ne "") {\r
if ($ossize -eq 64) {\r
\r
Get-ChildItem $mrVulkanDllInstallDir\Bin -Filter VkLayer*json |\r
ForEach-Object {\r
New-ItemProperty -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin\$_ -PropertyType DWord -Value 0 | out-null\r
+ echo "Created registry entry for $mrVulkanDllInstallDir\Bin\$_" >>$log\r
}\r
\r
# Create registry entires for the WOW6432Node registry location for 32-bit items on a 64-bit OS\r
Get-ChildItem $mrVulkanDllInstallDir\Bin32 -Filter VkLayer*json |\r
ForEach-Object {\r
New-ItemProperty -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin32\$_ -PropertyType DWord -Value 0 | out-null\r
+ echo "Created WOW6432Node registry entry for $mrVulkanDllInstallDir\Bin32\$_" >>$log\r
}\r
\r
} else {\r
Get-ChildItem $mrVulkanDllInstallDir\Bin32 -Filter VkLayer*json |\r
ForEach-Object {\r
New-ItemProperty -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin32\$_ -PropertyType DWord -Value 0 | out-null\r
+ echo "Created registry entry for $mrVulkanDllInstallDir\Bin\$_" >>$log\r
}\r
\r
}\r
}\r
\r
+echo "ConfigLayersAndVulkanDLL.ps1 completed" >>$log\r
+(Get-Date).ToString() >>$log\r
+\r
+\r
+\r
# SIG # Begin signature block\r
# MIIcZgYJKoZIhvcNAQcCoIIcVzCCHFMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB\r
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR\r
-# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUdeZMvyfevbCm2d9Sn02g0L39\r
-# 6EKggheVMIIFHjCCBAagAwIBAgIQDmYEpPtQ2iBY4vC2AGq6uzANBgkqhkiG9w0B\r
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUXAaVuJRboqiwfHon/TJIXS0m\r
+# ohqggheVMIIFHjCCBAagAwIBAgIQDmYEpPtQ2iBY4vC2AGq6uzANBgkqhkiG9w0B\r
# AQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD\r
# VQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFz\r
# c3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMB4XDTE1MDQzMDAwMDAwMFoXDTE2MDcw\r
# QTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0ECEA5mBKT7UNogWOLwtgBqursw\r
# CQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcN\r
# AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUw\r
-# IwYJKoZIhvcNAQkEMRYEFCQBfl/Xm3/R6yW/EO6kbSmkdowDMA0GCSqGSIb3DQEB\r
-# AQUABIIBADCbC3HqswOLfqwjX9+TM0hW9sG02WMHPbz0fFBTH5J/tck4wZECl9ct\r
-# DK0pUzHoJBY9EuBnH9OD46MiVCIYwYHQ9w/xiaypUNRbfXYEwSVL9EXCIcYkkqAN\r
-# pSpDrQJu0TzmGyvN1fSvYj/qahvIVKz/cxbzzQbYl4NqNXRfiD26Pa5JOdNABP8g\r
-# WL5Ruk/MPvMJE0dIW3em40hoanGKQhP0xgQ/BGJygumYrZsigENfhQkRVngH/aUP\r
-# f5k78VKL3DFoCMmneIxAfIwspTC37izb/AjlqDNUbqEmfBBIsbLgu6teZVIyPBI/\r
-# nktk5kwOOhzuyeQxLAcn0z+8ToF5frKhggIPMIICCwYJKoZIhvcNAQkGMYIB/DCC\r
+# IwYJKoZIhvcNAQkEMRYEFLzB0lbx2Z662b5ESDWLj98ew1UOMA0GCSqGSIb3DQEB\r
+# AQUABIIBADsR0P8QxSNCPshQFDxK9Ezsrk25HyGM9a0SZOaGrL8ZSSZ6PY8Wz/bQ\r
+# i2we//wLD31wkdzj/VKBdFHTvheQiA3b094RcC+Ii3VsH4esb6gSBVEnfX0Iu5ZJ\r
+# o9k1L5CNS9nhJ+ydgKFmDS6R3MUCZi613yZpCe9ZFqsgf9UP/gQiZSC29es7WnaX\r
+# OtPrz5OAO/JTNFDnTO9d+rg/iYeN4ybDtuSp0j6fKQ/DPesmE/MZpcfD+kiRtY9u\r
+# x7o8IVv/lq0+5sRTaBogeauXVhEaA37jZdo0IbwESl8YvaHj2zstRBcT8AxMuGBW\r
+# H/FjShnOONEAPrFyFoPi8CFrXbrqJkahggIPMIICCwYJKoZIhvcNAQkGMYIB/DCC\r
# AfgCAQEwdjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkw\r
# FwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBBc3N1\r
# cmVkIElEIENBLTECEAMBmgI6/1ixa9bV6uYX8GYwCQYFKw4DAhoFAKBdMBgGCSqG\r
-# SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE2MDMyMjIwMjM0\r
-# N1owIwYJKoZIhvcNAQkEMRYEFM6NeSjPd00j7j25copMrjENL7GXMA0GCSqGSIb3\r
-# DQEBAQUABIIBAHJbUlt2mxIX5hbiigRw3kIoug57G5sDYWQK8rcTjHUif6PAdEqj\r
-# 5c1UhxQHJxEasddUAqbEtCsG8qiz1lq76KKiwaWxffSRQ2JwjYEvnYQ2TK9rtnMs\r
-# zeYnQajrIUP44z7ysqoikB0bEgup0QVDScm4SSa1SmqQzHMsUX5rCygsM3PlpF5K\r
-# dH2u3eSK4zDhGiye6/SQkcddvsI2lLFRcxQIyfUD4+W9oFdXuYkKhNBGPLUlOH9V\r
-# DEDQG9zH6CAzvla/r1iYnX8RZ4rz7yacdrMBq5g92HAEcuXFTBQfaeAZSGQBhNSn\r
-# p1rVWgLb0T3a/5zlOtZvp+bLyDRbms+w8BY=\r
+# SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE2MDMyOTE5NDM0\r
+# NlowIwYJKoZIhvcNAQkEMRYEFBarBhBOgDzXlhQxxNXSfB14mBngMA0GCSqGSIb3\r
+# DQEBAQUABIIBACWObtn5lJ8laqfd55xT4EfWbvmPGV04c/CkDF6ziecEQxhCxUYi\r
+# rw8kV8nEhYa79qE5p3EXe+aZflRo70t21sr3s8GNHUW98pc0goIaC5rKzOVT3X0x\r
+# VH870qjVWdGMRRTUXlryBAQRv3LL93GyMIL1g1Y4uYKEU9PyrC8L26bsrGQggQEy\r
+# KxL0hopMSUNNE8glc1nbe/FGDylkHyi33qwNaz0buVLr7xCZQTpIecXat1mfvzPn\r
+# gsSr3+u9086Asz0QEbVmskhzFLSdd6QKpWjwYXWoyeFqrKlPdL4InHhRKFsEA8fQ\r
+# xV5A7ORVrXHOpPd+ZUrIhaggYDBqFiGWfmA=\r
# SIG # End signature block\r