diff options
| author | azhirnov <zh1dron@gmail.com> | 2020-09-07 18:06:20 +0000 |
|---|---|---|
| committer | azhirnov <zh1dron@gmail.com> | 2020-09-07 21:41:51 +0000 |
| commit | 7d05cc25ac7aa339c232843d729c9e0914f973ed (patch) | |
| tree | 76681ba20e31e9d8824b44e78555e31eea98a16d /Graphics/GraphicsEngineVulkan | |
| parent | fixed compilation on UWP (diff) | |
| download | DiligentCore-7d05cc25ac7aa339c232843d729c9e0914f973ed.tar.gz DiligentCore-7d05cc25ac7aa339c232843d729c9e0914f973ed.zip | |
Added pDxCompilerPath to engine create info,
fixed DXC usage in Linux,
fixed FX compiler path for Win8,
fixed DXC name refactoring: rename DXIL to DXC, keep DXIL names only for D3D12,
disable DXC on Android
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/CMakeLists.txt | 82 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp | 7 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp | 4 |
3 files changed, 51 insertions, 42 deletions
diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt index f8445e5b..90aa7991 100644 --- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt +++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt @@ -181,7 +181,7 @@ set(PRIVATE_DEPENDENCIES Diligent-GLSLTools ) -if(NOT ${DILIGENT_NO_VK_DXIL}) +if(NOT ${DILIGENT_NO_DXC_SPIRV}) list(APPEND PRIVATE_DEPENDENCIES Diligent-HLSLTools) endif() @@ -191,52 +191,54 @@ else() list(APPEND PRIVATE_DEPENDENCIES SPIRV-Tools-opt) endif() -# find Vulkan SDK -if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.7") - find_package(Vulkan) - if(Vulkan_FOUND) - get_filename_component(VulkanSDKPath ${Vulkan_LIBRARY} DIRECTORY) - set(VulkanSDKPath "${VulkanSDKPath}/..") - if(NOT EXISTS "${VulkanSDKPath}") - message(FATAL_ERROR "can't get Vulkan SDK path") - endif() - if(PLATFORM_WIN32) - if (${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(Vulkan_BINARY "${VulkanSDKPath}/Bin/dxcompiler.dll") - else() - set(Vulkan_BINARY "${VulkanSDKPath}/Bin32/dxcompiler.dll") +# Use DirectX shader compiler for SPIRV. +# This is another implementation of DXC that can compile only to SPIRV. +# DXC for D3D12 can compile only to DXIL. +if(NOT ${DILIGENT_NO_DXC_SPIRV}) + if(PLATFORM_WIN32) + # find Vulkan SDK + if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.7") + find_package(Vulkan) + if(Vulkan_FOUND) + get_filename_component(VulkanSDKPath ${Vulkan_LIBRARY} DIRECTORY) + set(VulkanSDKPath "${VulkanSDKPath}/..") + if(NOT EXISTS "${VulkanSDKPath}") + message(STATUS "can't get Vulkan SDK path") + endif() + if (${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(DXC_SPIRV_PATH "${VulkanSDKPath}/Bin/dxcompiler.dll") + else() + set(DXC_SPIRV_PATH "${VulkanSDKPath}/Bin32/dxcompiler.dll") + endif() endif() - elseif(PLATFORM_LINUX) - set(Vulkan_BINARY "${VulkanSDKPath}/bin/dxcompiler.so") endif() - endif() -endif() -# Try to find Vulkan SDK from environment variable -if(NOT Vulkan_FOUND) - if(EXISTS "$ENV{VULKAN_SDK}") - set(Vulkan_FOUND TRUE) - if(PLATFORM_WIN32) - if (${CMAKE_SIZEOF_VOID_P} EQUAL 8) - set(Vulkan_LIBRARY "$ENV{VULKAN_SDK}/Lib") - set(Vulkan_BINARY "$ENV{VULKAN_SDK}/Bin/dxcompiler.dll") - else() - set(Vulkan_LIBRARY "$ENV{VULKAN_SDK}/Lib32") - set(Vulkan_BINARY "$ENV{VULKAN_SDK}/Bin32/dxcompiler.dll") + # Try to find Vulkan SDK from environment variable + if(NOT Vulkan_FOUND) + if(EXISTS "$ENV{VULKAN_SDK}") + if (${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(DXC_SPIRV_PATH "$ENV{VULKAN_SDK}/Bin/dxcompiler.dll") + else() + set(DXC_SPIRV_PATH "$ENV{VULKAN_SDK}/Bin32/dxcompiler.dll") + endif() endif() - elseif(PLATFORM_LINUX) - set(Vulkan_LIBRARY "$ENV{VULKAN_SDK}/lib") - set(Vulkan_BINARY "$ENV{VULKAN_SDK}/bin/dxcompiler.so") endif() + endif(PLATFORM_WIN32) + + if(PLATFORM_LINUX) + # VulkanSDK installs dxc to this path + set(DXC_SPIRV_PATH "/usr/lib/dxc/libdxcompiler.so") endif() -endif() -if(NOT ${DILIGENT_NO_VK_DXIL} AND EXISTS ${Vulkan_BINARY}) - set(DILIGENT_HAS_VK_DXIL_COMPILER TRUE CACHE INTERNAL "" FORCE) - set(DXC_VK_COMPILER_PATH "${Vulkan_BINARY}" CACHE INTERNAL "" FORCE) - target_compile_definitions(Diligent-GraphicsEngineVk-static PRIVATE DILIGENT_HAS_VK_DXIL_COMPILER) - message(STATUS "Found DXIL compiler for Vulkan") + if(EXISTS ${DXC_SPIRV_PATH}) + set(DILIGENT_HAS_SPIRV_DXCOMPILER TRUE CACHE INTERNAL "" FORCE) + set(DILIGENT_DXCOMPILER_FOR_SPIRV_PATH "${DXC_SPIRV_PATH}" CACHE INTERNAL "" FORCE) + target_compile_definitions(Diligent-GraphicsEngineVk-static PRIVATE DILIGENT_HAS_SPIRV_DXCOMPILER) + message(STATUS "Found DXCompiler for Vulkan") + else() + set(DILIGENT_HAS_SPIRV_DXCOMPILER FALSE CACHE INTERNAL "" FORCE) + endif() else() - set(DILIGENT_HAS_VK_DXIL_COMPILER FALSE CACHE INTERNAL "" FORCE) + set(DILIGENT_HAS_SPIRV_DXCOMPILER FALSE CACHE INTERNAL "" FORCE) endif() if(PLATFORM_WIN32) diff --git a/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp b/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp index f0dafcff..b03a5c0e 100644 --- a/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp +++ b/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp @@ -43,6 +43,9 @@ #if PLATFORM_ANDROID # include "FileSystem.hpp" #endif +#ifdef DILIGENT_HAS_SPIRV_DXCOMPILER +# include "DXILUtils.hpp" +#endif namespace Diligent { @@ -247,6 +250,10 @@ void EngineFactoryVkImpl::CreateDeviceAndContextsVk(const EngineVkCreateInfo& _E std::array<ICommandQueueVk*, 1> CommandQueues = {{pCmdQueueVk}}; AttachToVulkanDevice(Instance, std::move(PhysicalDevice), LogicalDevice, CommandQueues.size(), CommandQueues.data(), EngineCI, ppDevice, ppContexts); + +#ifdef DILIGENT_HAS_SPIRV_DXCOMPILER + DxcLoadLibrary(DXCompilerTarget::Vulkan, EngineCI.pDxCompilerPath); +#endif } catch (std::runtime_error&) { diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp index 41ecaaa9..708458da 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp @@ -37,7 +37,7 @@ #if !DILIGENT_NO_GLSLANG # include "SPIRVUtils.hpp" #endif -#ifdef DILIGENT_HAS_VK_DXIL_COMPILER +#ifdef DILIGENT_HAS_SPIRV_DXCOMPILER # include "DXILUtils.hpp" #endif @@ -68,7 +68,7 @@ ShaderVkImpl::ShaderVkImpl(IReferenceCounters* pRefCounters, switch (CreationAttribs.ShaderCompiler) { -#ifdef DILIGENT_HAS_VK_DXIL_COMPILER +#ifdef DILIGENT_HAS_SPIRV_DXCOMPILER case SHADER_COMPILER_DXC: m_SPIRV = DXILtoSPIRV(CreationAttribs, VulkanDefine, CreationAttribs.ppCompilerOutput); break; |
