diff --git a/util/test/demos/demos.vcxproj b/util/test/demos/demos.vcxproj index 99bd79592..e157c3731 100644 --- a/util/test/demos/demos.vcxproj +++ b/util/test/demos/demos.vcxproj @@ -446,36 +446,82 @@ - - - d3dcompiler_47.dll - PreserveNewest - false - - - d3dcompiler_47.dll - PreserveNewest - false - - - dxcompiler.dll - PreserveNewest - false - - - dxcompiler.dll - PreserveNewest - false - - - dxil.dll - PreserveNewest - false - - - dxil.dll - PreserveNewest - false - - + + + + + + + + + + + +using System; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; + +namespace DXCEnumerateAndCheck { + public class GetDXCDLL : Microsoft.Build.Utilities.Task { + public override bool Execute() { + if(BitnessFolder == "Win32") BitnessFolder = "x86"; + + string[] sdkPathsCheck = SDKPath.Split(';'); + + foreach(string sdkPathCheck in sdkPathsCheck) + { + try + { + string[] dirs = System.IO.Directory.GetDirectories(sdkPathCheck, "10.*"); + // sort and reverse so we try from latest to oldest + System.Array.Sort(dirs); + System.Array.Reverse(dirs); + + // look for the latest dxc.exe available that works + foreach(string path in dirs) + { + string dxcCheck = System.IO.Path.Combine(path, BitnessFolder, "dxcompiler.dll"); + if(System.IO.File.Exists(dxcCheck)) + { + DXCPath = System.IO.Path.Combine(path, BitnessFolder); + return true; + } + } + } + catch(Exception ex) + { + // try next SDK path + } + } + + // always succeed even if we don't find dxc + return true; + } + + [Microsoft.Build.Framework.Required] public string BitnessFolder { get; set; } + [Microsoft.Build.Framework.Required] public string SDKPath { get; set; } + [Microsoft.Build.Framework.Output] public string DXCPath { get; set; } + [Microsoft.Build.Framework.Output] public string DebugOut { get; set; } + } +} + + + + + $(WindowsSdkDir_10)\Redist\D3D\$(BitnessFolder) + + + + + + + + + $(DXCDLLFolder) + + + + + \ No newline at end of file