summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorazhirnov <zh1dron@gmail.com>2020-11-25 19:28:38 +0000
committerazhirnov <zh1dron@gmail.com>2020-11-25 19:32:58 +0000
commite2dd19e542cee8634aaf1376ba0272c41a89dc2d (patch)
treee921b20241a82738ef474e7bf1c9f47c88444b6a /Graphics/GraphicsEngineVulkan
parentAdded RootSignatureBuilder, some fixed for vulkan ray tracing (diff)
downloadDiligentCore-e2dd19e542cee8634aaf1376ba0272c41a89dc2d.tar.gz
DiligentCore-e2dd19e542cee8634aaf1376ba0272c41a89dc2d.zip
Disable validation layers if they are not compatible with headers, fixed compilation on iOS
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/TopLevelASVkImpl.cpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp23
-rw-r--r--Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp10
6 files changed, 33 insertions, 8 deletions
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp
index c28be56c..e2bb7ad8 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanInstance.hpp
@@ -62,7 +62,7 @@ public:
}
// clang-format off
- bool IsLayerAvailable (const char* LayerName) const;
+ bool IsLayerAvailable (const char* LayerName, uint32_t& Version) const;
bool IsExtensionAvailable(const char* ExtensionName)const;
bool IsExtensionEnabled (const char* ExtensionName)const;
diff --git a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp
index 0e309eff..6d2d827c 100644
--- a/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/VulkanUtilities/VulkanLogicalDevice.hpp
@@ -216,6 +216,8 @@ public:
dataSize, pData, stride, flags);
}
+ void GetAccelerationStructureBuildSizes(const VkAccelerationStructureBuildGeometryInfoKHR& BuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR& SizeInfo) const;
+
VkResult GetRayTracingShaderGroupHandles(VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData) const;
VkPipelineStageFlags GetEnabledShaderStages() const { return m_EnabledShaderStages; }
diff --git a/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp
index ffe1eb02..19253b1f 100644
--- a/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/BottomLevelASVkImpl.cpp
@@ -112,7 +112,7 @@ BottomLevelASVkImpl::BottomLevelASVkImpl(IReferenceCounters* pRefCounters,
VERIFY_EXPR(vkBuildInfo.geometryCount <= Limits.maxGeometryCount);
- vkGetAccelerationStructureBuildSizesKHR(LogicalDevice.GetVkDevice(), VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, &vkBuildInfo, MaxPrimitiveCounts.data(), &vkSizeInfo);
+ LogicalDevice.GetAccelerationStructureBuildSizes(vkBuildInfo, MaxPrimitiveCounts.data(), vkSizeInfo);
AccelStructSize = static_cast<Uint32>(vkSizeInfo.accelerationStructureSize);
m_ScratchSize.Build = static_cast<Uint32>(vkSizeInfo.buildScratchSize);
diff --git a/Graphics/GraphicsEngineVulkan/src/TopLevelASVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/TopLevelASVkImpl.cpp
index d4c771ec..03724a8a 100644
--- a/Graphics/GraphicsEngineVulkan/src/TopLevelASVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/TopLevelASVkImpl.cpp
@@ -63,7 +63,7 @@ TopLevelASVkImpl::TopLevelASVkImpl(IReferenceCounters* pRefCounters,
VERIFY_EXPR(MaxPrimitiveCount <= Limits.maxInstanceCount);
- vkGetAccelerationStructureBuildSizesKHR(LogicalDevice.GetVkDevice(), VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, &vkBuildInfo, &MaxPrimitiveCount, &vkSizeInfo);
+ LogicalDevice.GetAccelerationStructureBuildSizes(vkBuildInfo, &MaxPrimitiveCount, vkSizeInfo);
AccelStructSize = static_cast<Uint32>(vkSizeInfo.accelerationStructureSize);
m_ScratchSize.Build = static_cast<Uint32>(vkSizeInfo.buildScratchSize);
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
index 405149a5..a88a5888 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanInstance.cpp
@@ -46,12 +46,16 @@
namespace VulkanUtilities
{
-bool VulkanInstance::IsLayerAvailable(const char* LayerName) const
+bool VulkanInstance::IsLayerAvailable(const char* LayerName, uint32_t& Version) const
{
for (const auto& Layer : m_Layers)
+ {
if (strcmp(Layer.layerName, LayerName) == 0)
+ {
+ Version = Layer.specVersion;
return true;
-
+ }
+ }
return false;
}
@@ -220,11 +224,20 @@ VulkanInstance::VulkanInstance(uint32_t ApiVersion,
bool ValidationLayersPresent = true;
for (size_t l = 0; l < _countof(VulkanUtilities::ValidationLayerNames); ++l)
{
- auto* pLayerName = VulkanUtilities::ValidationLayerNames[l];
- if (!IsLayerAvailable(pLayerName))
+ auto* pLayerName = VulkanUtilities::ValidationLayerNames[l];
+ uint32_t LayerVer = 0;
+ if (!IsLayerAvailable(pLayerName, LayerVer))
+ {
+ ValidationLayersPresent = false;
+ LOG_WARNING_MESSAGE("Failed to find '", pLayerName, "' layer. Validation will be disabled");
+ }
+ if (LayerVer < VK_HEADER_VERSION_COMPLETE)
{
ValidationLayersPresent = false;
- LOG_WARNING_MESSAGE("Failed to find ", pLayerName, " layer. Validation will be disabled");
+ LOG_WARNING_MESSAGE("Layer '", pLayerName, "' version (", VK_VERSION_MAJOR(LayerVer), ".", VK_VERSION_MINOR(LayerVer), ".", VK_VERSION_PATCH(LayerVer),
+ ") is less than header version (",
+ VK_VERSION_MAJOR(VK_HEADER_VERSION_COMPLETE), ".", VK_VERSION_MINOR(VK_HEADER_VERSION_COMPLETE), ".", VK_VERSION_PATCH(VK_HEADER_VERSION_COMPLETE),
+ "). Validation will be disabled");
}
}
if (ValidationLayersPresent)
diff --git a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp
index 70bdd20a..0d1534b8 100644
--- a/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/VulkanUtilities/VulkanLogicalDevice.cpp
@@ -504,6 +504,16 @@ VkDeviceAddress VulkanLogicalDevice::GetAccelerationStructureDeviceAddress(VkAcc
#endif
}
+void VulkanLogicalDevice::GetAccelerationStructureBuildSizes(const VkAccelerationStructureBuildGeometryInfoKHR& BuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR& SizeInfo) const
+{
+#if DILIGENT_USE_VOLK
+ vkGetAccelerationStructureBuildSizesKHR(m_VkDevice, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR, &BuildInfo, pMaxPrimitiveCounts, &SizeInfo);
+#else
+ UNSUPPORTED("vkGetAccelerationStructureDeviceAddressKHR is only available through Volk");
+ return VK_ERROR_FEATURE_NOT_PRESENT;
+#endif
+}
+
VkResult VulkanLogicalDevice::MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData) const
{
return vkMapMemory(m_VkDevice, memory, offset, size, flags, ppData);