summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorazhirnov <zh1dron@gmail.com>2020-09-07 18:06:20 +0000
committerazhirnov <zh1dron@gmail.com>2020-09-07 21:41:51 +0000
commit7d05cc25ac7aa339c232843d729c9e0914f973ed (patch)
tree76681ba20e31e9d8824b44e78555e31eea98a16d /Graphics/GraphicsEngineVulkan
parentfixed compilation on UWP (diff)
downloadDiligentCore-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.txt82
-rw-r--r--Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp7
-rw-r--r--Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp4
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;