From 2a058abd2099d31aa12dd01fefe5689516ca3f77 Mon Sep 17 00:00:00 2001 From: azhirnov Date: Thu, 3 Sep 2020 02:00:11 +0300 Subject: fixed compilation on UWP --- .../GraphicsEngineD3DBase/src/ShaderD3DBase.cpp | 5 +++- Graphics/HLSLTools/src/DXILUtils.cpp | 35 +++++++++++++++++----- 2 files changed, 32 insertions(+), 8 deletions(-) (limited to 'Graphics') diff --git a/Graphics/GraphicsEngineD3DBase/src/ShaderD3DBase.cpp b/Graphics/GraphicsEngineD3DBase/src/ShaderD3DBase.cpp index 1dec5e4f..48132a4b 100644 --- a/Graphics/GraphicsEngineD3DBase/src/ShaderD3DBase.cpp +++ b/Graphics/GraphicsEngineD3DBase/src/ShaderD3DBase.cpp @@ -346,8 +346,11 @@ ShaderD3DBase::ShaderD3DBase(const ShaderCreateInfo& ShaderCI, const ShaderVersi if (ShaderModel.Major == MaxSM.Major && ShaderModel.Minor > MaxSM.Minor) ShaderModel = MaxSM; } + else + m_isDXIL = false; } - else + + if (!m_isDXIL) { ShaderModel = (ShaderModel.Major < 6 ? ShaderModel : (IsD3D12 ? ShaderVersion{5, 1} : ShaderVersion{5, 0})); } diff --git a/Graphics/HLSLTools/src/DXILUtils.cpp b/Graphics/HLSLTools/src/DXILUtils.cpp index 172ebacd..8268ac1c 100644 --- a/Graphics/HLSLTools/src/DXILUtils.cpp +++ b/Graphics/HLSLTools/src/DXILUtils.cpp @@ -49,17 +49,12 @@ // Platforms that has DXIL compiler. #if defined(PLATFORM_WIN32) || defined(PLATFORM_UNIVERSAL_WINDOWS) || defined(PLATFORM_LINUX) -# ifdef _WIN32 -__declspec(dllimport) HMODULE __stdcall LoadLibraryA(LPCSTR); -__declspec(dllimport) FARPROC __stdcall GetProcAddress(HMODULE, LPCSTR); -# endif - namespace Diligent { namespace { -# if defined(PLATFORM_WIN32) || defined(PLATFORM_UNIVERSAL_WINDOWS) +# ifdef PLATFORM_WIN32 struct DXILCompilerWin32 { HMODULE Module = nullptr; @@ -83,6 +78,32 @@ struct DXILCompilerWin32 using DXILCompilerBase = DXILCompilerWin32; # endif // PLATFORM_WIN32 +# ifdef PLATFORM_UNIVERSAL_WINDOWS +struct DXILCompilerUWP +{ + HMODULE Module = nullptr; + DxcCreateInstanceProc CreateInstance = nullptr; + + explicit DXILCompilerUWP(const std::string& name) + { + std::wstring wname{name.begin(), name.end()}; + wname += L".dll"; + Module = LoadPackagedLibrary(wname.c_str(), 0); + if (Module) + { + CreateInstance = reinterpret_cast(GetProcAddress(Module, "DxcCreateInstance")); + } + } + + ~DXILCompilerUWP() + { + if (Module) + FreeLibrary(Module); + } +}; +using DXILCompilerBase = DXILCompilerUWP; +# endif + # ifdef PLATFORM_LINUX struct DXILCompilerLinux { @@ -272,7 +293,7 @@ bool DXILGetMaxShaderModel(DXILCompilerTarget Target, case DXILCompilerTarget::Vulkan: DxilCompiler = SPIRVCompilerLib(); break; } - if (DxilCompiler == nullptr) + if (DxilCompiler == nullptr || DxilCompiler->Module == nullptr) return false; Version = DxilCompiler->MaxShaderModel; -- cgit v1.2.3