diff options
| author | azhirnov <zh1dron@gmail.com> | 2020-09-02 23:00:11 +0000 |
|---|---|---|
| committer | azhirnov <zh1dron@gmail.com> | 2020-09-02 23:00:11 +0000 |
| commit | 2a058abd2099d31aa12dd01fefe5689516ca3f77 (patch) | |
| tree | 1797e2c0a5fa24f4a02a5c2ae29eda40ec655201 /Graphics | |
| parent | added argument --comp=dxc to run tests with DXC compiler (diff) | |
| download | DiligentCore-2a058abd2099d31aa12dd01fefe5689516ca3f77.tar.gz DiligentCore-2a058abd2099d31aa12dd01fefe5689516ca3f77.zip | |
fixed compilation on UWP
Diffstat (limited to 'Graphics')
| -rw-r--r-- | Graphics/GraphicsEngineD3DBase/src/ShaderD3DBase.cpp | 5 | ||||
| -rw-r--r-- | Graphics/HLSLTools/src/DXILUtils.cpp | 35 |
2 files changed, 32 insertions, 8 deletions
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<DxcCreateInstanceProc>(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; |
