From 82d456ffb4dde152d9ed6a5c2ffb63202e8441a7 Mon Sep 17 00:00:00 2001 From: assiduous Date: Tue, 17 Dec 2019 09:50:06 -0800 Subject: Fixed Core API test crash on the server by dynamically loading vulkan entry points --- UnitTests/DiligentCoreAPITest/CMakeLists.txt | 4 ++-- .../DiligentCoreAPITest/include/Vulkan/TestingEnvironmentVk.h | 3 ++- .../DiligentCoreAPITest/include/Vulkan/TestingSwapChainVk.h | 3 ++- .../DiligentCoreAPITest/src/Vulkan/CreateObjFromNativeResVK.cpp | 3 ++- .../DiligentCoreAPITest/src/Vulkan/DrawCommandRefenceVk.cpp | 2 ++ .../DiligentCoreAPITest/src/Vulkan/TestingEnvironmentVk.cpp | 9 +++++++++ UnitTests/DiligentCoreAPITest/src/Vulkan/TestingSwapChainVk.cpp | 2 ++ 7 files changed, 21 insertions(+), 5 deletions(-) (limited to 'UnitTests') diff --git a/UnitTests/DiligentCoreAPITest/CMakeLists.txt b/UnitTests/DiligentCoreAPITest/CMakeLists.txt index 28d19542..9232aefd 100644 --- a/UnitTests/DiligentCoreAPITest/CMakeLists.txt +++ b/UnitTests/DiligentCoreAPITest/CMakeLists.txt @@ -95,13 +95,13 @@ if(GL_SUPPORTED) endif() if(VULKAN_SUPPORTED) - target_link_libraries(DiligentCoreAPITest PRIVATE Diligent-GLSLTools ${Vulkan_LIBRARY}) + target_link_libraries(DiligentCoreAPITest PRIVATE Diligent-GLSLTools) + target_include_directories(DiligentCoreAPITest PRIVATE ../../ThirdParty) endif() target_include_directories(DiligentCoreAPITest PRIVATE include - ../../ThirdParty/vulkan ) diff --git a/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingEnvironmentVk.h b/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingEnvironmentVk.h index c3c34d22..41c8dba7 100644 --- a/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingEnvironmentVk.h +++ b/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingEnvironmentVk.h @@ -27,7 +27,8 @@ #include "TestingEnvironment.h" -#include "vulkan.h" +#define VK_NO_PROTOTYPES +#include "vulkan/vulkan.h" namespace Diligent { diff --git a/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingSwapChainVk.h b/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingSwapChainVk.h index 866af82f..cb7bad57 100644 --- a/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingSwapChainVk.h +++ b/UnitTests/DiligentCoreAPITest/include/Vulkan/TestingSwapChainVk.h @@ -23,7 +23,8 @@ #include "TestingSwapChainBase.h" -#include "vulkan.h" +#define VK_NO_PROTOTYPES +#include "vulkan/vulkan.h" namespace Diligent { diff --git a/UnitTests/DiligentCoreAPITest/src/Vulkan/CreateObjFromNativeResVK.cpp b/UnitTests/DiligentCoreAPITest/src/Vulkan/CreateObjFromNativeResVK.cpp index a003b8c9..b1d65e3a 100644 --- a/UnitTests/DiligentCoreAPITest/src/Vulkan/CreateObjFromNativeResVK.cpp +++ b/UnitTests/DiligentCoreAPITest/src/Vulkan/CreateObjFromNativeResVK.cpp @@ -22,7 +22,8 @@ */ #if VULKAN_SUPPORTED -# include "vulkan.h" +# define VK_NO_PROTOTYPES +# include "vulkan/vulkan.h" #endif #include "RenderDeviceVk.h" diff --git a/UnitTests/DiligentCoreAPITest/src/Vulkan/DrawCommandRefenceVk.cpp b/UnitTests/DiligentCoreAPITest/src/Vulkan/DrawCommandRefenceVk.cpp index e3f7605c..abb7839f 100644 --- a/UnitTests/DiligentCoreAPITest/src/Vulkan/DrawCommandRefenceVk.cpp +++ b/UnitTests/DiligentCoreAPITest/src/Vulkan/DrawCommandRefenceVk.cpp @@ -26,6 +26,8 @@ #include "DeviceContextVk.h" +#include "volk/volk.h" + namespace Diligent { diff --git a/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingEnvironmentVk.cpp b/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingEnvironmentVk.cpp index 6e0d11f7..fa242455 100644 --- a/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingEnvironmentVk.cpp +++ b/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingEnvironmentVk.cpp @@ -28,6 +28,9 @@ #include "SPIRVUtils.h" +#define VOLK_IMPLEMENTATION +#include "volk/volk.h" + namespace Diligent { @@ -43,9 +46,15 @@ TestingEnvironmentVk::TestingEnvironmentVk(DeviceType deviceType, ADAPTER_TYPE A { InitializeGlslang(); + // We have to use dynamic Vulkan loader because if an application is statically linked with vulkan-1.lib + // and the Vulkan library is not present on the system, the app will instantly crash. + volkInitialize(); + RefCntAutoPtr pRenderDeviceVk{m_pDevice, IID_RenderDeviceVk}; m_vkDevice = pRenderDeviceVk->GetVkDevice(); + volkLoadInstance(pRenderDeviceVk->GetVkInstance()); + RefCntAutoPtr pContextVk{m_pDeviceContext, IID_DeviceContextVk}; auto* pQeueVk = pContextVk->LockCommandQueue(); diff --git a/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingSwapChainVk.cpp b/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingSwapChainVk.cpp index 36b1d26e..1b3ee884 100644 --- a/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingSwapChainVk.cpp +++ b/UnitTests/DiligentCoreAPITest/src/Vulkan/TestingSwapChainVk.cpp @@ -27,6 +27,8 @@ #include "RenderDeviceVk.h" #include "DeviceContextVk.h" +#include "volk/volk.h" + namespace Diligent { -- cgit v1.2.3