From a0488c54c6c5017c71198d8b13c9ed75894791de Mon Sep 17 00:00:00 2001 From: azhirnov Date: Wed, 16 Sep 2020 22:41:57 +0300 Subject: use NUM_SHADER_TYPES constant instead of magic number, use std::array instead of c-style array. --- .../GraphicsEngineVulkan/include/ShaderResourceBindingVkImpl.hpp | 6 +++--- Graphics/GraphicsEngineVulkan/src/ShaderResourceBindingVkImpl.cpp | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/include/ShaderResourceBindingVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/ShaderResourceBindingVkImpl.hpp index d3915425..d93a72ac 100644 --- a/Graphics/GraphicsEngineVulkan/include/ShaderResourceBindingVkImpl.hpp +++ b/Graphics/GraphicsEngineVulkan/include/ShaderResourceBindingVkImpl.hpp @@ -78,9 +78,9 @@ private: ShaderVariableManagerVk* m_pShaderVarMgrs = nullptr; // Shader variable manager index in m_pShaderVarMgrs[] array for every shader stage - Int8 m_ResourceLayoutIndex[6] = {-1, -1, -1, -1, -1, -1}; - bool m_bStaticResourcesInitialized = false; - Uint8 m_NumShaders = 0; + std::array m_ResourceLayoutIndex; + bool m_bStaticResourcesInitialized = false; + Uint8 m_NumShaders = 0; }; } // namespace Diligent diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderResourceBindingVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderResourceBindingVkImpl.cpp index ee6a3709..b978c592 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderResourceBindingVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderResourceBindingVkImpl.cpp @@ -47,6 +47,8 @@ ShaderResourceBindingVkImpl::ShaderResourceBindingVkImpl(IReferenceCounters* pR m_ShaderResourceCache{ShaderResourceCacheVk::DbgCacheContentType::SRBResources} // clang-format on { + m_ResourceLayoutIndex.fill(-1); + auto* ppShaders = pPSO->GetShaders(); m_NumShaders = static_cast(pPSO->GetNumShaders()); -- cgit v1.2.3 From 3c3f03fa05bd16c2340713895421119d8b3cdffe Mon Sep 17 00:00:00 2001 From: azhirnov Date: Wed, 16 Sep 2020 23:01:43 +0300 Subject: remove some VK_NV_mesh_shader --- Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp | 10 +++------- Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp | 2 -- Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp | 2 -- Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp | 4 ---- .../src/VulkanUtilities/VulkanInstance.cpp | 2 -- .../src/VulkanUtilities/VulkanPhysicalDevice.cpp | 4 ++-- 6 files changed, 5 insertions(+), 19 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp b/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp index 35db310b..35202b1e 100644 --- a/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp +++ b/Graphics/GraphicsEngineVulkan/src/EngineFactoryVk.cpp @@ -231,26 +231,22 @@ void EngineFactoryVkImpl::CreateDeviceAndContextsVk(const EngineVkCreateInfo& _E bool SupportsFeatures2 = Instance->IsExtensionEnabled(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); void** NextExt = const_cast(&DeviceCreateInfo.pNext); - // Variables may be unused if extensions are disabled. - (void)SupportsFeatures2; - (void)NextExt; - // Enable mesh shader extension. bool MeshShadersSupported = false; -#ifdef VK_NV_mesh_shader if (EngineCI.Features.MeshShaders != DEVICE_FEATURE_STATE_DISABLED) { VkPhysicalDeviceMeshShaderFeaturesNV MeshShaderFeats = PhysicalDevice->GetExtFeatures().MeshShader; if (SupportsFeatures2 && PhysicalDevice->IsExtensionSupported(VK_NV_MESH_SHADER_EXTENSION_NAME)) { - MeshShadersSupported = true; + MeshShadersSupported = MeshShaderFeats.taskShader != VK_FALSE && MeshShaderFeats.meshShader != VK_FALSE; DeviceExtensions.push_back(VK_NV_MESH_SHADER_EXTENSION_NAME); *NextExt = &MeshShaderFeats; NextExt = &MeshShaderFeats.pNext; } + + *NextExt = nullptr; } -#endif if (EngineCI.Features.MeshShaders == DEVICE_FEATURE_STATE_ENABLED && !MeshShadersSupported) LOG_ERROR_AND_THROW("Mesh shaders are not supported by this device"); diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp index 65c948a4..2fd063c9 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineLayout.cpp @@ -53,10 +53,8 @@ static VkShaderStageFlagBits ShaderTypeToVkShaderStageFlagBit(SHADER_TYPE Shader case SHADER_TYPE_GEOMETRY: return VK_SHADER_STAGE_GEOMETRY_BIT; case SHADER_TYPE_PIXEL: return VK_SHADER_STAGE_FRAGMENT_BIT; case SHADER_TYPE_COMPUTE: return VK_SHADER_STAGE_COMPUTE_BIT; -#ifdef VK_NV_mesh_shader case SHADER_TYPE_AMPLIFICATION: return VK_SHADER_STAGE_TASK_BIT_NV; case SHADER_TYPE_MESH: return VK_SHADER_STAGE_MESH_BIT_NV; -#endif // clang-format on default: UNEXPECTED("Unknown shader type"); diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp index 949086b8..c5b70426 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp @@ -230,10 +230,8 @@ PipelineStateVkImpl::PipelineStateVkImpl(IReferenceCounters* pRefCoun case SHADER_TYPE_GEOMETRY: StageCI.stage = VK_SHADER_STAGE_GEOMETRY_BIT; break; case SHADER_TYPE_PIXEL: StageCI.stage = VK_SHADER_STAGE_FRAGMENT_BIT; break; case SHADER_TYPE_COMPUTE: StageCI.stage = VK_SHADER_STAGE_COMPUTE_BIT; break; -#ifdef VK_NV_mesh_shader case SHADER_TYPE_AMPLIFICATION: StageCI.stage = VK_SHADER_STAGE_TASK_BIT_NV; break; case SHADER_TYPE_MESH: StageCI.stage = VK_SHADER_STAGE_MESH_BIT_NV; break; -#endif default: UNEXPECTED("Unknown shader type"); // clang-format on } diff --git a/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp index ccbc8e5f..a458d7be 100644 --- a/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp @@ -195,12 +195,8 @@ RenderDeviceVkImpl::RenderDeviceVkImpl(IReferenceCounters* Features.PixelUAVWritesAndAtomics = GetFeatureState(vkEnabledFeatures.fragmentStoresAndAtomics); Features.TextureUAVExtendedFormats = GetFeatureState(vkEnabledFeatures.shaderStorageImageExtendedFormats); -#ifdef VK_NV_mesh_shader // All devices that support mesh shaders also support task shaders, so it is not necessary to use two separate features. Features.MeshShaders = GetFeatureState(EngineCI.Features.MeshShaders != DEVICE_FEATURE_STATE_DISABLED && vkExtFeatures.MeshShader.meshShader != VK_FALSE && vkExtFeatures.MeshShader.taskShader != VK_FALSE); -#else - Features.MeshShaders = DEVICE_FEATURE_STATE_DISABLED; -#endif #if defined(_MSC_VER) && defined(_WIN64) static_assert(sizeof(DeviceFeatures) == 23, "Did you add a new feature to DeviceFeatures? Please handle its satus here."); diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp index ead31fe5..a03102d0 100644 --- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp +++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp @@ -148,12 +148,10 @@ VulkanInstance::VulkanInstance(bool EnableValidation, }; // This extension added to core in 1.1, but current version is 1.0 -#ifdef VK_KHR_get_physical_device_properties2 if (IsExtensionAvailable(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { GlobalExtensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); } -#endif if (ppGlobalExtensionNames != nullptr) { diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp index 685492c9..66cf94c2 100644 --- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp +++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanPhysicalDevice.cpp @@ -77,14 +77,14 @@ VulkanPhysicalDevice::VulkanPhysicalDevice(VkPhysicalDevice vkDevice, (void)NextFeat; // Enable mesh shader extension. -# ifdef VK_NV_mesh_shader if (IsExtensionSupported(VK_NV_MESH_SHADER_EXTENSION_NAME)) { *NextFeat = &m_ExtFeatures.MeshShader; NextFeat = &m_ExtFeatures.MeshShader.pNext; m_ExtFeatures.MeshShader.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV; } -# endif + + *NextFeat = nullptr; // Initialize device extension features by current physical device features. // Some flags may not be supported by hardware. -- cgit v1.2.3 From 75ad278af19c4ee4e3cf49d1b9c13e1025dfb392 Mon Sep 17 00:00:00 2001 From: azhirnov Date: Wed, 16 Sep 2020 23:02:15 +0300 Subject: don't link with vulkan if used volk, added shader name to log message --- Graphics/GraphicsEngineVulkan/CMakeLists.txt | 5 ++--- Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'Graphics/GraphicsEngineVulkan') diff --git a/Graphics/GraphicsEngineVulkan/CMakeLists.txt b/Graphics/GraphicsEngineVulkan/CMakeLists.txt index 8299915a..897894e7 100644 --- a/Graphics/GraphicsEngineVulkan/CMakeLists.txt +++ b/Graphics/GraphicsEngineVulkan/CMakeLists.txt @@ -233,8 +233,10 @@ if(PLATFORM_WIN32) # Use Volk elseif(PLATFORM_MACOS) find_library(Vulkan_LIBRARY NAMES vulkan.1 vulkan PATHS "../../ThirdParty/vulkan/libs/macOS") + list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY}) elseif(PLATFORM_IOS) set(Vulkan_LIBRARY ${MoltenVK_LIBRARY}) + list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY}) find_library(CORE_GRAPHICS CoreGraphics) find_library(METAL_LIBRARY Metal) @@ -248,9 +250,6 @@ elseif(PLATFORM_ANDROID) # Use Volk else() find_library(Vulkan_LIBRARY NAMES vulkan) -endif() - -if(Vulkan_LIBRARY) list(APPEND PRIVATE_DEPENDENCIES ${Vulkan_LIBRARY}) endif() diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp index c16010d8..15db694e 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderVkImpl.cpp @@ -115,7 +115,7 @@ ShaderVkImpl::ShaderVkImpl(IReferenceCounters* pRefCounters, if (m_SPIRV.empty()) { - LOG_ERROR_AND_THROW("Failed to compile shader"); + LOG_ERROR_AND_THROW("Failed to compile shader \"", CreationAttribs.Desc.Name, "\""); } } else if (CreationAttribs.ByteCode != nullptr) -- cgit v1.2.3