From 562e84c20aaf8277c76042a40ce9837e86c78d60 Mon Sep 17 00:00:00 2001 From: assiduous Date: Mon, 20 Jul 2020 20:49:39 -0700 Subject: Added DILIGENT_NO_HLSL CMake option to disable HLSL support in Vulkan and OpenGL backends --- Graphics/GraphicsEngineVulkan/CMakeLists.txt | 14 ++++++++++++-- Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp | 8 ++++---- Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp | 9 ++++++++- Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp | 4 ++-- Graphics/GraphicsEngineVulkan/src/TextureVkImpl.cpp | 2 +- .../src/VulkanUtilities/VulkanInstance.cpp | 6 +++--- 6 files changed, 30 insertions(+), 13 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt index 61c80fbb..bb1809f0 100644 --- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt +++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt @@ -173,9 +173,14 @@ set(PRIVATE_DEPENDENCIES Diligent-TargetPlatform Diligent-GraphicsEngineNextGenBase Diligent-GLSLTools - SPIRV-Tools-opt ) +if (${DILIGENT_NO_HLSL}) + message("HLSL support is disabled. Vulkan backend may not be able to consume SPIRV bytecode generated from HLSL.") +else() + list(APPEND PRIVATE_DEPENDENCIES SPIRV-Tools-opt) +endif() + if(PLATFORM_WIN32) if(${ARCH} EQUAL 64) set(VULKAN_LIB_FOLDER x64) @@ -272,7 +277,12 @@ if (${DILIGENT_NO_GLSLANG}) message("GLSLang is not being built. Vulkan backend will only be able to consume SPIRV byte code.") endif() -target_compile_definitions(Diligent-GraphicsEngineVk-static PRIVATE ${PRIVATE_COMPILE_DEFINITIONS} NO_GLSLANG=$) +target_compile_definitions(Diligent-GraphicsEngineVk-static +PRIVATE + ${PRIVATE_COMPILE_DEFINITIONS} + DILIGENT_NO_GLSLANG=$ + DILIGENT_NO_HLSL=$ +) target_compile_definitions(Diligent-GraphicsEngineVk-shared PRIVATE ${PRIVATE_COMPILE_DEFINITIONS} ENGINE_DLL=1) if(PLATFORM_WIN32) diff --git a/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp b/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp index 92d920df..7742cd63 100644 --- a/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp +++ b/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp @@ -114,7 +114,7 @@ std::array, 4> GenerateMipsVkHelper::CreatePSOs(TE { std::array, 4> PSOs; -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG ShaderCreateInfo CSCreateInfo; CSCreateInfo.Source = g_GenerateMipsCSSource; @@ -181,7 +181,7 @@ std::array, 4> GenerateMipsVkHelper::CreatePSOs(TE GenerateMipsVkHelper::GenerateMipsVkHelper(RenderDeviceVkImpl& DeviceVkImpl) : m_DeviceVkImpl(DeviceVkImpl) { -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG BufferDesc ConstantsCBDesc; ConstantsCBDesc.Name = "Constants CB buffer"; ConstantsCBDesc.BindFlags = BIND_UNIFORM_BUFFER; @@ -197,7 +197,7 @@ GenerateMipsVkHelper::GenerateMipsVkHelper(RenderDeviceVkImpl& DeviceVkImpl) : void GenerateMipsVkHelper::CreateSRB(IShaderResourceBinding** ppSRB) { -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG // All PSOs are compatible auto& PSO = FindPSOs(TEX_FORMAT_RGBA8_UNORM); PSO[0]->CreateShaderResourceBinding(ppSRB, true); @@ -260,7 +260,7 @@ void GenerateMipsVkHelper::GenerateMips(TextureViewVkImpl& TexView, DeviceContex SubresRange.levelCount = 1; VkImageLayout AffectedMipLevelLayout; -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG if (TexView.HasMipLevelViews()) { VERIFY_EXPR(pSRB != nullptr); diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp index 31888d8c..99b27d2c 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp @@ -35,7 +35,10 @@ #include "ShaderResourceBindingVkImpl.hpp" #include "EngineMemory.h" #include "StringTools.hpp" -#include "spirv-tools/optimizer.hpp" + +#if !DILIGENT_NO_HLSL +# include "spirv-tools/optimizer.hpp" +#endif namespace Diligent { @@ -135,6 +138,9 @@ VkRenderPassCreateInfo PipelineStateVkImpl::GetRenderPassCreateInfo( static std::vector StripReflection(const std::vector& OriginalSPIRV) { +#if DILIGENT_NO_HLSL + return OriginalSPIRV; +#else std::vector StrippedSPIRV; spvtools::Optimizer SpirvOptimizer(SPV_ENV_VULKAN_1_0); // Decorations defined in SPV_GOOGLE_hlsl_functionality1 are the only instructions @@ -147,6 +153,7 @@ static std::vector StripReflection(const std::vector& Origin StrippedSPIRV.clear(); } return StrippedSPIRV; +#endif } PipelineStateVkImpl::PipelineStateVkImpl(IReferenceCounters* pRefCounters, diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp index 8b3cf728..a2f6ddc6 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp @@ -34,7 +34,7 @@ #include "DataBlobImpl.hpp" #include "GLSLSourceBuilder.hpp" -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG # include "SPIRVUtils.hpp" #endif @@ -55,7 +55,7 @@ ShaderVkImpl::ShaderVkImpl(IReferenceCounters* pRefCounters, { if (CreationAttribs.Source != nullptr || CreationAttribs.FilePath != nullptr) { -#if NO_GLSLANG +#if DILIGENT_NO_GLSLANG LOG_ERROR_AND_THROW("Diligent engine was not linked with glslang and can only consume compiled SPIRV bytecode."); #else DEV_CHECK_ERR(CreationAttribs.ByteCode == nullptr, "'ByteCode' must be null when shader is created from source code or a file"); diff --git a/Graphics/GraphicsEngineVulkan/src/TextureVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/TextureVkImpl.cpp index fc8c8b04..2a634162 100644 --- a/Graphics/GraphicsEngineVulkan/src/TextureVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/TextureVkImpl.cpp @@ -754,7 +754,7 @@ VulkanUtilities::ImageViewWrapper TextureVkImpl::CreateImageView(TextureViewDesc bool TextureVkImpl::CheckCSBasedMipGenerationSupport(VkFormat vkFmt) const { -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG VERIFY_EXPR(m_Desc.MiscFlags & MISC_TEXTURE_FLAG_GENERATE_MIPS); if (m_Desc.Type == RESOURCE_DIM_TEX_2D || m_Desc.Type == RESOURCE_DIM_TEX_2D_ARRAY) { diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp index 0ba9dfc4..224b2f38 100644 --- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp +++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp @@ -39,7 +39,7 @@ #include "VulkanUtilities/VulkanInstance.hpp" #include "VulkanUtilities/VulkanDebug.hpp" -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG # include "SPIRVUtils.hpp" #endif @@ -244,7 +244,7 @@ VulkanInstance::VulkanInstance(bool EnableValidation, CHECK_VK_ERROR(err, "Failed to enumerate physical devices"); VERIFY_EXPR(m_PhysicalDevices.size() == PhysicalDeviceCount); } -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG Diligent::InitializeGlslang(); #endif } @@ -257,7 +257,7 @@ VulkanInstance::~VulkanInstance() } vkDestroyInstance(m_VkInstance, m_pVkAllocator); -#if !NO_GLSLANG +#if !DILIGENT_NO_GLSLANG Diligent::FinalizeGlslang(); #endif } -- cgit v1.2.3