diff --git a/RenderSystems/Vulkan/include/OgreVulkanDevice.h b/RenderSystems/Vulkan/include/OgreVulkanDevice.h index 3156eeb964..4a6a3827c7 100644 --- a/RenderSystems/Vulkan/include/OgreVulkanDevice.h +++ b/RenderSystems/Vulkan/include/OgreVulkanDevice.h @@ -163,7 +163,7 @@ namespace Ogre uint32 mSupportedStages; - bool mIsDeviceLost; + VkResult mDeviceLostReason; bool mIsExternal; void fillDeviceFeatures(); @@ -203,6 +203,8 @@ namespace Ogre /// Waits for the GPU to finish all pending commands. void stall(); + + bool isDeviceLost() const { return mDeviceLostReason != VK_SUCCESS; } }; // Mask away read flags from srcAccessMask diff --git a/RenderSystems/Vulkan/include/OgreVulkanPrerequisites.h b/RenderSystems/Vulkan/include/OgreVulkanPrerequisites.h index 80bb06e810..21855c2d6c 100644 --- a/RenderSystems/Vulkan/include/OgreVulkanPrerequisites.h +++ b/RenderSystems/Vulkan/include/OgreVulkanPrerequisites.h @@ -147,29 +147,28 @@ namespace Ogre }; } + void onVulkanFailure( VulkanDevice *device, int result, const char *message, const char *func, + const char *file, long line ); } // namespace Ogre -#define OGRE_VK_EXCEPT( code, num, desc, src ) \ - OGRE_EXCEPT_EX( code, num, desc + ( "\nVkResult = " + vkResultToString( num ) ), src ) - #if OGRE_COMPILER == OGRE_COMPILER_MSVC -# define checkVkResult( result, functionName ) \ +# define checkVkResult( device, result, functionName ) \ do \ { \ if( result != VK_SUCCESS ) \ { \ - OGRE_VK_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, result, functionName " failed", \ - __FUNCSIG__ ); \ + onVulkanFailure( device, result, functionName " failed", __FUNCSIG__, __FILE__, \ + __LINE__ ); \ } \ } while( 0 ) #else -# define checkVkResult( result, functionName ) \ +# define checkVkResult( device, result, functionName ) \ do \ { \ if( result != VK_SUCCESS ) \ { \ - OGRE_VK_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, result, functionName " failed", \ - __PRETTY_FUNCTION__ ); \ + onVulkanFailure( device, result, functionName " failed", __PRETTY_FUNCTION__, __FILE__, \ + __LINE__ ); \ } \ } while( 0 ) #endif diff --git a/RenderSystems/Vulkan/include/OgreVulkanQueue.h b/RenderSystems/Vulkan/include/OgreVulkanQueue.h index 47ef5c32b9..bc96003e94 100644 --- a/RenderSystems/Vulkan/include/OgreVulkanQueue.h +++ b/RenderSystems/Vulkan/include/OgreVulkanQueue.h @@ -222,7 +222,8 @@ namespace Ogre public: VkCommandBuffer getCurrentCmdBuffer() { - OGRE_ASSERT_LOW( mCurrentCmdBuffer ); + if( !mCurrentCmdBuffer ) // device lost or any other error happens near vkSubmitQueue() + checkVkResult( mOwnerDevice, VK_ERROR_DEVICE_LOST, "getCurrentCmdBuffer" ); return mCurrentCmdBuffer; } EncoderState getEncoderState() const { return mEncoderState; } diff --git a/RenderSystems/Vulkan/src/OgreVulkanAsyncTextureTicket.cpp b/RenderSystems/Vulkan/src/OgreVulkanAsyncTextureTicket.cpp index 7f23f57e19..e7252b432b 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanAsyncTextureTicket.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanAsyncTextureTicket.cpp @@ -243,7 +243,7 @@ namespace Ogre mQueue->releaseFence( mAccurateFence ); mAccurateFence = 0; - checkVkResult( result, "vkWaitForFences" ); + checkVkResult( mQueue->mOwnerDevice, result, "vkWaitForFences" ); if( mStatus != Mapped ) mStatus = Ready; retVal = true; diff --git a/RenderSystems/Vulkan/src/OgreVulkanCache.cpp b/RenderSystems/Vulkan/src/OgreVulkanCache.cpp index 26ce08b0ed..44a47443e0 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanCache.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanCache.cpp @@ -321,7 +321,7 @@ namespace Ogre VkResult result = vkCreateRenderPass( mDevice->mGraphicsQueue.mDevice, &rpciCopy, 0, &retVal ); - checkVkResult( result, "vkCreateRenderPass" ); + checkVkResult( mDevice, result, "vkCreateRenderPass" ); mRenderPassCache[rpciCopy] = retVal; } diff --git a/RenderSystems/Vulkan/src/OgreVulkanDescriptorPool.cpp b/RenderSystems/Vulkan/src/OgreVulkanDescriptorPool.cpp index 30fced6b56..c1438f763f 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanDescriptorPool.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanDescriptorPool.cpp @@ -133,7 +133,7 @@ namespace Ogre // Create the Vulkan descriptor pool VkResult result = vkCreateDescriptorPool( device->mDevice, &poolCi, 0, &pool.pool ); - checkVkResult( result, "vkCreateDescriptorPool" ); + checkVkResult( device, result, "vkCreateDescriptorPool" ); mPools.push_back( pool ); mCurrentPoolIdx = mPools.size() - 1u; @@ -192,7 +192,7 @@ namespace Ogre while( itor != endt ) { VkResult result = vkResetDescriptorPool( device->mDevice, itor->pool, 0 ); - checkVkResult( result, "vkResetDescriptorPool" ); + checkVkResult( device, result, "vkResetDescriptorPool" ); itor->size = 0u; ++itor; } diff --git a/RenderSystems/Vulkan/src/OgreVulkanDevice.cpp b/RenderSystems/Vulkan/src/OgreVulkanDevice.cpp index 367b2ecbbf..0641ddfb95 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanDevice.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanDevice.cpp @@ -95,12 +95,12 @@ namespace Ogre FastArray availableExtensions; uint32 numExtensions = 0u; VkResult result = vkEnumerateInstanceExtensionProperties( 0, &numExtensions, 0 ); - checkVkResult( result, "vkEnumerateInstanceExtensionProperties" ); + checkVkResult( nullptr, result, "vkEnumerateInstanceExtensionProperties" ); availableExtensions.resize( numExtensions ); result = vkEnumerateInstanceExtensionProperties( 0, &numExtensions, availableExtensions.begin() ); - checkVkResult( result, "vkEnumerateInstanceExtensionProperties" ); + checkVkResult( nullptr, result, "vkEnumerateInstanceExtensionProperties" ); for( const VkExtensionProperties &ext : availableExtensions ) { @@ -112,11 +112,11 @@ namespace Ogre FastArray availableLayers; uint32 numInstanceLayers = 0u; result = vkEnumerateInstanceLayerProperties( &numInstanceLayers, 0 ); - checkVkResult( result, "vkEnumerateInstanceLayerProperties" ); + checkVkResult( nullptr, result, "vkEnumerateInstanceLayerProperties" ); availableLayers.resize( numInstanceLayers ); result = vkEnumerateInstanceLayerProperties( &numInstanceLayers, availableLayers.begin() ); - checkVkResult( result, "vkEnumerateInstanceLayerProperties" ); + checkVkResult( nullptr, result, "vkEnumerateInstanceLayerProperties" ); for( auto &layer : availableLayers ) LogManager::getSingleton().logMessage( "Vulkan: Found instance layer: " + @@ -290,7 +290,7 @@ namespace Ogre #endif VkResult result = vkCreateInstance( &createInfo, 0, &mVkInstance ); - checkVkResult( result, "vkCreateInstance" ); + checkVkResult( nullptr, result, "vkCreateInstance" ); } #if OGRE_DEBUG_MODE >= OGRE_DEBUG_MEDIUM @@ -347,19 +347,7 @@ namespace Ogre dbgCreateInfo.pUserData = userdata; VkResult result = CreateDebugReportCallback( mVkInstance, &dbgCreateInfo, 0, &mDebugReportCallback ); - switch( result ) - { - case VK_SUCCESS: - break; - case VK_ERROR_OUT_OF_HOST_MEMORY: - OGRE_VK_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, result, - "CreateDebugReportCallback: out of host memory", - "VulkanInstance::addInstanceDebugCallback" ); - default: - OGRE_VK_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, result, - "vkCreateDebugReportCallbackEXT", - "VulkanInstance::addInstanceDebugCallback" ); - } + checkVkResult( nullptr, result, "vkCreateDebugReportCallbackEXT" ); } #endif @@ -412,11 +400,11 @@ namespace Ogre FastArray devices; uint32 numDevices = 0u; VkResult result = vkEnumeratePhysicalDevices( mVkInstance, &numDevices, NULL ); - checkVkResult( result, "vkEnumeratePhysicalDevices" ); + checkVkResult( nullptr, result, "vkEnumeratePhysicalDevices" ); devices.resize( numDevices ); result = vkEnumeratePhysicalDevices( mVkInstance, &numDevices, devices.begin() ); - checkVkResult( result, "vkEnumeratePhysicalDevices" ); + checkVkResult( nullptr, result, "vkEnumeratePhysicalDevices" ); if( numDevices == 0u ) { @@ -507,7 +495,7 @@ namespace Ogre mVaoManager( 0 ), mRenderSystem( renderSystem ), mSupportedStages( 0xFFFFFFFF ), - mIsDeviceLost( false ), + mDeviceLostReason( VK_SUCCESS ), mIsExternal( false ) { } @@ -664,6 +652,8 @@ namespace Ogre { destroy(); + mDeviceLostReason = VK_SUCCESS; + if( externalDevice ) { LogManager::getSingleton().logMessage( @@ -715,13 +705,13 @@ namespace Ogre // Obtain logical device uint32 numExtensions = 0; VkResult result = vkEnumerateDeviceExtensionProperties( mPhysicalDevice, 0, &numExtensions, 0 ); - checkVkResult( result, "vkEnumerateDeviceExtensionProperties" ); + checkVkResult( this, result, "vkEnumerateDeviceExtensionProperties" ); FastArray availableExtensions; availableExtensions.resize( numExtensions ); result = vkEnumerateDeviceExtensionProperties( mPhysicalDevice, 0, &numExtensions, availableExtensions.begin() ); - checkVkResult( result, "vkEnumerateDeviceExtensionProperties" ); + checkVkResult( this, result, "vkEnumerateDeviceExtensionProperties" ); if( !externalDevice ) { @@ -780,7 +770,7 @@ namespace Ogre VkPipelineCacheCreateInfo pipelineCacheCreateInfo; makeVkStruct( pipelineCacheCreateInfo, VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO ); result = vkCreatePipelineCache( mDevice, &pipelineCacheCreateInfo, nullptr, &mPipelineCache ); - checkVkResult( result, "vkCreatePipelineCache" ); + checkVkResult( this, result, "vkCreatePipelineCache" ); // debug utils initUtils( mDevice ); @@ -984,7 +974,7 @@ namespace Ogre createInfo.pEnabledFeatures = &mDeviceFeatures; VkResult result = vkCreateDevice( mPhysicalDevice, &createInfo, NULL, &mDevice ); - checkVkResult( result, "vkCreateDevice" ); + checkVkResult( this, result, "vkCreateDevice" ); } //------------------------------------------------------------------------- bool VulkanDevice::hasDeviceExtension( const IdString extension ) const @@ -1067,7 +1057,7 @@ namespace Ogre mRenderSystem->resetAllBindings(); VkResult result = vkDeviceWaitIdle( mDevice ); - checkVkResult( result, "vkDeviceWaitIdle" ); + checkVkResult( this, result, "vkDeviceWaitIdle" ); mRenderSystem->_notifyDeviceStalled(); } diff --git a/RenderSystems/Vulkan/src/OgreVulkanGpuProgramManager.cpp b/RenderSystems/Vulkan/src/OgreVulkanGpuProgramManager.cpp index 7f84e3a9d3..55c7fc9397 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanGpuProgramManager.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanGpuProgramManager.cpp @@ -156,7 +156,7 @@ namespace Ogre VkResult result = vkCreateDescriptorSetLayout( mDevice->mDevice, &descSetLayoutCi, 0, &retVal ); - checkVkResult( result, "vkCreateDescriptorSetLayout" ); + checkVkResult( mDevice, result, "vkCreateDescriptorSetLayout" ); mDescriptorSetMap[set] = retVal; } else diff --git a/RenderSystems/Vulkan/src/OgreVulkanProgram.cpp b/RenderSystems/Vulkan/src/OgreVulkanProgram.cpp index 13c4dc1a9a..a205e278b1 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanProgram.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanProgram.cpp @@ -176,7 +176,7 @@ namespace Ogre moduleCi.codeSize = mSpirv.size() * sizeof( uint32 ); moduleCi.pCode = mSpirv.data(); VkResult result = vkCreateShaderModule( mDevice->mDevice, &moduleCi, 0, &mShaderModule ); - checkVkResult( result, "vkCreateShaderModule" ); + checkVkResult( mDevice, result, "vkCreateShaderModule" ); setObjectName( mDevice->mDevice, (uint64_t)mShaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, mName.c_str() ); @@ -383,7 +383,7 @@ namespace Ogre moduleCi.pCode = mSpirv.data(); VkResult result = vkCreateShaderModule( mDevice->mDevice, &moduleCi, 0, &mShaderModule ); - checkVkResult( result, "vkCreateShaderModule" ); + checkVkResult( mDevice, result, "vkCreateShaderModule" ); setObjectName( mDevice->mDevice, (uint64_t)mShaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, mName.c_str() ); @@ -802,7 +802,7 @@ namespace Ogre moduleCi.codeSize = mSpirv.size() * sizeof( uint32 ); moduleCi.pCode = mSpirv.data(); VkResult result = vkCreateShaderModule( mDevice->mDevice, &moduleCi, 0, &mShaderModule ); - checkVkResult( result, "vkCreateShaderModule" ); + checkVkResult( mDevice, result, "vkCreateShaderModule" ); setObjectName( mDevice->mDevice, (uint64_t)mShaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, mName.c_str() ); diff --git a/RenderSystems/Vulkan/src/OgreVulkanQueue.cpp b/RenderSystems/Vulkan/src/OgreVulkanQueue.cpp index e3f546d82e..5314a623c3 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanQueue.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanQueue.cpp @@ -122,7 +122,7 @@ namespace Ogre VkFenceCreateInfo fenceCi; makeVkStruct( fenceCi, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO ); VkResult result = vkCreateFence( mDevice, &fenceCi, 0, &retVal ); - checkVkResult( result, "vkCreateFence" ); + checkVkResult( mOwnerDevice, result, "vkCreateFence" ); } return retVal; } @@ -163,7 +163,7 @@ namespace Ogre { VkResult result = vkResetFences( mDevice, numFencesToReset, &mAvailableFences[oldNumAvailableFences] ); - checkVkResult( result, "vkResetFences" ); + checkVkResult( mOwnerDevice, result, "vkResetFences" ); } } //------------------------------------------------------------------------- @@ -191,14 +191,14 @@ namespace Ogre allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; allocateInfo.commandBufferCount = 1u; VkResult result = vkAllocateCommandBuffers( mDevice, &allocateInfo, &cmdBuffer ); - checkVkResult( result, "vkAllocateCommandBuffers" ); + checkVkResult( mOwnerDevice, result, "vkAllocateCommandBuffers" ); frameData.mCommands.push_back( cmdBuffer ); } else if( frameData.mCurrentCmdIdx == 0u ) { VkResult result = vkResetCommandPool( mDevice, frameData.mCmdPool, 0 ); - checkVkResult( result, "vkResetCommandPool" ); + checkVkResult( mOwnerDevice, result, "vkResetCommandPool" ); } return frameData.mCommands[frameData.mCurrentCmdIdx++]; @@ -276,7 +276,7 @@ namespace Ogre for( size_t i = 0; i < maxNumFrames; ++i ) { VkResult result = vkCreateFence( mDevice, &fenceCi, 0, &mAvailableFences[i] ); - checkVkResult( result, "vkCreateFence" ); + checkVkResult( mOwnerDevice, result, "vkCreateFence" ); } // Create one cmd pool per thread (assume single threaded for now) @@ -290,7 +290,7 @@ namespace Ogre { VkResult result = vkCreateCommandPool( mDevice, &cmdPoolCreateInfo, 0, &mPerFrameData[i].mCmdPool ); - checkVkResult( result, "vkCreateCommandPool" ); + checkVkResult( mOwnerDevice, result, "vkCreateCommandPool" ); } newCommandBuffer(); @@ -305,7 +305,7 @@ namespace Ogre makeVkStruct( beginInfo, VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO ); beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; VkResult result = vkBeginCommandBuffer( mCurrentCmdBuffer, &beginInfo ); - checkVkResult( result, "vkBeginCommandBuffer" ); + checkVkResult( mOwnerDevice, result, "vkBeginCommandBuffer" ); } //------------------------------------------------------------------------- void VulkanQueue::endCommandBuffer() @@ -315,7 +315,7 @@ namespace Ogre endAllEncoders(); VkResult result = vkEndCommandBuffer( mCurrentCmdBuffer ); - checkVkResult( result, "vkEndCommandBuffer" ); + checkVkResult( mOwnerDevice, result, "vkEndCommandBuffer" ); mPendingCmds.push_back( mCurrentCmdBuffer ); mCurrentCmdBuffer = 0; @@ -1130,7 +1130,7 @@ namespace Ogre if( itor->second.recycleAfterRelease ) { VkResult result = vkResetFences( mDevice, 1u, &itor->first ); - checkVkResult( result, "vkResetFences" ); + checkVkResult( mOwnerDevice, result, "vkResetFences" ); mAvailableFences.push_back( itor->first ); } mRefCountedFences.erase( itor ); @@ -1159,7 +1159,7 @@ namespace Ogre { const uint32 numFences = static_cast( fences.size() ); VkResult result = vkWaitForFences( mDevice, numFences, &fences[0], VK_TRUE, UINT64_MAX ); - checkVkResult( result, "vkWaitForFences" ); + checkVkResult( mOwnerDevice, result, "vkWaitForFences" ); recycleFences( fences ); } } @@ -1175,7 +1175,7 @@ namespace Ogre VkResult result = vkWaitForFences( mDevice, numFences, &fences[0], VK_TRUE, 0u ); if( result != VK_TIMEOUT ) { - checkVkResult( result, "vkWaitForFences" ); + checkVkResult( mOwnerDevice, result, "vkWaitForFences" ); recycleFences( fences ); } else @@ -1254,8 +1254,6 @@ namespace Ogre VkFence fence = mCurrentFence; // Note: mCurrentFence may be nullptr VkResult result = vkQueueSubmit( mQueue, 1u, &submitInfo, fence ); - if( result != VK_SUCCESS ) - mOwnerDevice->mIsDeviceLost = true; // we need some cleanup before checking result mGpuWaitSemaphForCurrCmdBuff.clear(); @@ -1274,7 +1272,7 @@ namespace Ogre mPendingCmds.clear(); - checkVkResult( result, "vkQueueSubmit" ); + checkVkResult( mOwnerDevice, result, "vkQueueSubmit" ); if( submissionType >= SubmissionType::EndFrameAndSwap ) { diff --git a/RenderSystems/Vulkan/src/OgreVulkanRenderPassDescriptor.cpp b/RenderSystems/Vulkan/src/OgreVulkanRenderPassDescriptor.cpp index 83561f959a..4e9699da08 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanRenderPassDescriptor.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanRenderPassDescriptor.cpp @@ -613,7 +613,7 @@ namespace Ogre renderPassCreateInfo.pSubpasses = &subpass; VkResult result = vkCreateRenderPass( mQueue->mDevice, &renderPassCreateInfo, 0, &fboDesc.mRenderPass ); - checkVkResult( result, "vkCreateRenderPass" ); + checkVkResult( mQueue->mOwnerDevice, result, "vkCreateRenderPass" ); VkFramebufferCreateInfo fbCreateInfo; makeVkStruct( fbCreateInfo, VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO ); @@ -631,7 +631,7 @@ namespace Ogre if( !fboDesc.mWindowImageViews.empty() ) fboDesc.mImageViews[windowAttachmentIdx] = fboDesc.mWindowImageViews[i]; result = vkCreateFramebuffer( mQueue->mDevice, &fbCreateInfo, 0, &fboDesc.mFramebuffers[i] ); - checkVkResult( result, "vkCreateFramebuffer" ); + checkVkResult( mQueue->mOwnerDevice, result, "vkCreateFramebuffer" ); if( !fboDesc.mWindowImageViews.empty() ) fboDesc.mImageViews[windowAttachmentIdx] = 0; } diff --git a/RenderSystems/Vulkan/src/OgreVulkanRenderSystem.cpp b/RenderSystems/Vulkan/src/OgreVulkanRenderSystem.cpp index 68f295117a..4e292fc6a7 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanRenderSystem.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanRenderSystem.cpp @@ -184,6 +184,20 @@ namespace Ogre // return true; } //------------------------------------------------------------------------- + void onVulkanFailure( VulkanDevice *device, int result, const char *desc, const char *src, + const char *file, long line ) + { + VkResult vkResult = (VkResult)result; + if( device != nullptr && device->mDeviceLostReason == VK_SUCCESS && + ( vkResult == VK_ERROR_OUT_OF_HOST_MEMORY || vkResult == VK_ERROR_OUT_OF_DEVICE_MEMORY || + vkResult == VK_ERROR_DEVICE_LOST ) ) + device->mDeviceLostReason = vkResult; + + ExceptionFactory::throwException( Exception::ERR_RENDERINGAPI_ERROR, vkResult, + desc + ( "\nVkResult = " + vkResultToString( vkResult ) ), src, + file, line ); + } + //------------------------------------------------------------------------- VulkanRenderSystem::VulkanRenderSystem( const NameValuePairList *options ) : RenderSystem(), mInitialized( false ), @@ -356,7 +370,7 @@ namespace Ogre imageViewCi.subresourceRange.layerCount = 1u; VkResult result = vkCreateImageView( mDevice->mDevice, &imageViewCi, 0, &mDummyTextureView ); - checkVkResult( result, "vkCreateImageView" ); + checkVkResult( mDevice, result, "vkCreateImageView" ); } { @@ -368,7 +382,7 @@ namespace Ogre samplerDescriptor.minLod = -std::numeric_limits::max(); samplerDescriptor.maxLod = std::numeric_limits::max(); VkResult result = vkCreateSampler( mDevice->mDevice, &samplerDescriptor, 0, &mDummySampler ); - checkVkResult( result, "vkCreateSampler" ); + checkVkResult( mDevice, result, "vkCreateSampler" ); } resetAllBindings(); @@ -1297,11 +1311,11 @@ namespace Ogre } // recreate logical device with all resources - if( anotherIsElected || mDevice->mIsDeviceLost ) + if( anotherIsElected || mDevice->isDeviceLost() ) { handleDeviceLost(); - return !mDevice->mIsDeviceLost; + return !mDevice->isDeviceLost(); } return true; @@ -1343,7 +1357,6 @@ namespace Ogre // recreate device mDevice->setPhysicalDevice( mInstance, mActiveDevice, nullptr ); - mDevice->mIsDeviceLost = false; static_cast( mVaoManager )->createVkResources(); static_cast( mTextureGpuManager )->createVkResources(); @@ -1819,7 +1832,7 @@ namespace Ogre VkPipeline vulkanPso = 0u; VkResult result = vkCreateComputePipelines( mDevice->mDevice, mDevice->mPipelineCache, 1u, &computeInfo, 0, &vulkanPso ); - checkVkResult( result, "vkCreateComputePipelines" ); + checkVkResult( mDevice, result, "vkCreateComputePipelines" ); #if OGRE_DEBUG_MODE >= OGRE_DEBUG_MEDIUM if( mValidationError ) @@ -1941,7 +1954,7 @@ namespace Ogre oldRootLayout = reinterpret_cast( mPso->rsData )->rootLayout; VkCommandBuffer cmdBuffer = mDevice->mGraphicsQueue.getCurrentCmdBuffer(); - OGRE_ASSERT_LOW( pso->rsData ); + OGRE_ASSERT_LOW( pso && pso->rsData ); VulkanHlmsPso *vulkanPso = reinterpret_cast( pso->rsData ); vkCmdBindPipeline( cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vulkanPso->pso ); mPso = pso; @@ -2287,7 +2300,7 @@ namespace Ogre break; } - size_t bytesToWrite = shader->getBufferRequiredSize(); + size_t bytesToWrite = shader ? shader->getBufferRequiredSize() : 0; if( shader && bytesToWrite > 0 ) { OGRE_ASSERT_LOW( @@ -3411,7 +3424,7 @@ namespace Ogre VkPipeline vulkanPso = 0; VkResult result = vkCreateGraphicsPipelines( mDevice->mDevice, mDevice->mPipelineCache, 1u, &pipeline, 0, &vulkanPso ); - checkVkResult( result, "vkCreateGraphicsPipelines" ); + checkVkResult( mDevice, result, "vkCreateGraphicsPipelines" ); #if OGRE_DEBUG_MODE >= OGRE_DEBUG_MEDIUM if( mValidationError ) @@ -3514,7 +3527,7 @@ namespace Ogre VkSampler textureSampler; VkResult result = vkCreateSampler( mDevice->mDevice, &samplerDescriptor, 0, &textureSampler ); - checkVkResult( result, "vkCreateSampler" ); + checkVkResult( mDevice, result, "vkCreateSampler" ); #if OGRE_ARCH_TYPE == OGRE_ARCHITECTURE_64 newBlock->mRsData = textureSampler; diff --git a/RenderSystems/Vulkan/src/OgreVulkanRootLayout.cpp b/RenderSystems/Vulkan/src/OgreVulkanRootLayout.cpp index 059a716d23..6fc69c6ba0 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanRootLayout.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanRootLayout.cpp @@ -354,7 +354,7 @@ namespace Ogre VkPipelineLayout rootLayoutResult; VkResult result = vkCreatePipelineLayout( device->mDevice, &pipelineLayoutCi, 0, &rootLayoutResult ); - checkVkResult( result, "vkCreatePipelineLayout" ); + checkVkResult( device, result, "vkCreatePipelineLayout" ); mRootLayout.store( rootLayoutResult, std::memory_order::memory_order_relaxed ); diff --git a/RenderSystems/Vulkan/src/OgreVulkanTextureGpu.cpp b/RenderSystems/Vulkan/src/OgreVulkanTextureGpu.cpp index 09dcfef03f..00861115b8 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanTextureGpu.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanTextureGpu.cpp @@ -205,7 +205,7 @@ namespace Ogre VulkanDevice *device = textureManager->getDevice(); VkResult imageResult = vkCreateImage( device->mDevice, &imageInfo, 0, &mFinalTextureName ); - checkVkResult( imageResult, "vkCreateImage" ); + checkVkResult( device, imageResult, "vkCreateImage" ); setObjectName( device->mDevice, (uint64_t)mFinalTextureName, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, textureName.c_str() ); @@ -220,7 +220,7 @@ namespace Ogre VkResult result = vkBindImageMemory( device->mDevice, mFinalTextureName, deviceMemory, mInternalBufferStart ); - checkVkResult( result, "vkBindImageMemory" ); + checkVkResult( device, result, "vkBindImageMemory" ); if( isPoolOwner() ) { @@ -868,7 +868,7 @@ namespace Ogre VkImageView imageView; VkResult result = vkCreateImageView( device->mDevice, &imageViewCi, 0, &imageView ); - checkVkResult( result, "vkCreateImageView" ); + checkVkResult( device, result, "vkCreateImageView" ); #if OGRE_DEBUG_MODE >= OGRE_DEBUG_HIGH const String textureName = getNameStr() + "(View)"; @@ -1051,7 +1051,7 @@ namespace Ogre VulkanDevice *device = textureManager->getDevice(); VkResult imageResult = vkCreateImage( device->mDevice, &imageInfo, 0, &mMsaaFramebufferName ); - checkVkResult( imageResult, "vkCreateImage" ); + checkVkResult( device, imageResult, "vkCreateImage" ); setObjectName( device->mDevice, (uint64_t)mMsaaFramebufferName, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, textureName.c_str() ); @@ -1066,7 +1066,7 @@ namespace Ogre VkResult result = vkBindImageMemory( device->mDevice, mMsaaFramebufferName, deviceMemory, mMsaaInternalBufferStart ); - checkVkResult( result, "vkBindImageMemory" ); + checkVkResult( device, result, "vkBindImageMemory" ); // Immediately transition to its only state VkImageMemoryBarrier imageBarrier = this->getImageMemoryBarrier(); diff --git a/RenderSystems/Vulkan/src/OgreVulkanTextureGpuManager.cpp b/RenderSystems/Vulkan/src/OgreVulkanTextureGpuManager.cpp index a202fa5cd7..78a2894822 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanTextureGpuManager.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanTextureGpuManager.cpp @@ -158,7 +158,7 @@ namespace Ogre VkResult imageResult = vkCreateImage( mDevice->mDevice, &imageInfo, 0, &mBlankTexture[i].vkImage ); - checkVkResult( imageResult, "vkCreateImage" ); + checkVkResult( mDevice, imageResult, "vkCreateImage" ); setObjectName( mDevice->mDevice, (uint64_t)mBlankTexture[i].vkImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, dummyNames[i] ); @@ -171,7 +171,7 @@ namespace Ogre VkResult result = vkBindImageMemory( mDevice->mDevice, mBlankTexture[i].vkImage, deviceMemory, mBlankTexture[i].internalBufferStart ); - checkVkResult( result, "vkBindImageMemory" ); + checkVkResult( mDevice, result, "vkBindImageMemory" ); } size_t barrierCount = 0u; @@ -289,13 +289,13 @@ namespace Ogre VkResult result = vkCreateImageView( mDevice->mDevice, &imageViewCi, 0, &mBlankTexture[i].defaultView ); - checkVkResult( result, "vkCreateImageView" ); + checkVkResult( mDevice, result, "vkCreateImageView" ); } // We will be releasing the staging texture memory immediately. We must flush out manually mDevice->commitAndNextCommandBuffer( SubmissionType::FlushOnly ); VkResult result = vkDeviceWaitIdle( mDevice->mDevice ); - checkVkResult( result, "vkDeviceWaitIdle" ); + checkVkResult( mDevice, result, "vkDeviceWaitIdle" ); vaoManager->destroyStagingTexture( stagingTex ); delete stagingTex; diff --git a/RenderSystems/Vulkan/src/OgreVulkanWindow.cpp b/RenderSystems/Vulkan/src/OgreVulkanWindow.cpp index cb1f68469b..f7086d6a14 100644 --- a/RenderSystems/Vulkan/src/OgreVulkanWindow.cpp +++ b/RenderSystems/Vulkan/src/OgreVulkanWindow.cpp @@ -242,7 +242,7 @@ namespace Ogre uint32 numFormats = 0u; VkResult result = vkGetPhysicalDeviceSurfaceFormatsKHR( mDevice->mPhysicalDevice, mSurfaceKHR, &numFormats, 0 ); - checkVkResult( result, "vkGetPhysicalDeviceSurfaceFormatsKHR" ); + checkVkResult( mDevice, result, "vkGetPhysicalDeviceSurfaceFormatsKHR" ); if( numFormats == 0 ) { OGRE_EXCEPT( Exception::ERR_RENDERINGAPI_ERROR, @@ -254,7 +254,7 @@ namespace Ogre formats.resize( numFormats ); result = vkGetPhysicalDeviceSurfaceFormatsKHR( mDevice->mPhysicalDevice, mSurfaceKHR, &numFormats, formats.begin() ); - checkVkResult( result, "vkGetPhysicalDeviceSurfaceFormatsKHR" ); + checkVkResult( mDevice, result, "vkGetPhysicalDeviceSurfaceFormatsKHR" ); PixelFormatGpu pixelFormat = PFG_UNKNOWN; for( size_t i = 0; i < numFormats && pixelFormat == PFG_UNKNOWN; ++i ) @@ -298,7 +298,7 @@ namespace Ogre VkSurfaceCapabilitiesKHR surfaceCaps; VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR( mDevice->mPhysicalDevice, mSurfaceKHR, &surfaceCaps ); - checkVkResult( result, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ); + checkVkResult( mDevice, result, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" ); // Swapchain may be smaller/bigger than requested setFinalResolution( Math::Clamp( getWidth(), surfaceCaps.minImageExtent.width, @@ -309,7 +309,7 @@ namespace Ogre VkBool32 supported; result = vkGetPhysicalDeviceSurfaceSupportKHR( mDevice->mPhysicalDevice, mDevice->mGraphicsQueue.mFamilyIdx, mSurfaceKHR, &supported ); - checkVkResult( result, "vkGetPhysicalDeviceSurfaceSupportKHR" ); + checkVkResult( mDevice, result, "vkGetPhysicalDeviceSurfaceSupportKHR" ); if( !supported ) { @@ -321,13 +321,13 @@ namespace Ogre uint32 numPresentModes = 0u; result = vkGetPhysicalDeviceSurfacePresentModesKHR( mDevice->mPhysicalDevice, mSurfaceKHR, &numPresentModes, 0 ); - checkVkResult( result, "vkGetPhysicalDeviceSurfacePresentModesKHR" ); + checkVkResult( mDevice, result, "vkGetPhysicalDeviceSurfacePresentModesKHR" ); FastArray presentModes; presentModes.resize( numPresentModes ); result = vkGetPhysicalDeviceSurfacePresentModesKHR( mDevice->mPhysicalDevice, mSurfaceKHR, &numPresentModes, presentModes.begin() ); - checkVkResult( result, "vkGetPhysicalDeviceSurfacePresentModesKHR" ); + checkVkResult( mDevice, result, "vkGetPhysicalDeviceSurfacePresentModesKHR" ); // targetPresentModes[0] is the target, targetPresentModes[1] is the fallback bool presentModesFound[2] = { false, false }; @@ -487,18 +487,18 @@ namespace Ogre //----------------------------- result = vkCreateSwapchainKHR( mDevice->mDevice, &swapchainCreateInfo, 0, &mSwapchain ); - checkVkResult( result, "vkCreateSwapchainKHR" ); + checkVkResult( mDevice, result, "vkCreateSwapchainKHR" ); uint32 numSwapchainImages = 0u; result = vkGetSwapchainImagesKHR( mDevice->mDevice, mSwapchain, &numSwapchainImages, NULL ); - checkVkResult( result, "vkGetSwapchainImagesKHR" ); + checkVkResult( mDevice, result, "vkGetSwapchainImagesKHR" ); OGRE_ASSERT_LOW( numSwapchainImages > 0u ); mSwapchainImages.resize( numSwapchainImages ); result = vkGetSwapchainImagesKHR( mDevice->mDevice, mSwapchain, &numSwapchainImages, mSwapchainImages.begin() ); - checkVkResult( result, "vkGetSwapchainImagesKHR" ); + checkVkResult( mDevice, result, "vkGetSwapchainImagesKHR" ); // We need to retransition the main texture now to re-create MSAA surfaces (if any). // We need to do it now, because doing it later will overwrite the VkImage handles with NULL. diff --git a/RenderSystems/Vulkan/src/Vao/OgreVulkanAsyncTicket.cpp b/RenderSystems/Vulkan/src/Vao/OgreVulkanAsyncTicket.cpp index bca73c32e5..d920c49f21 100644 --- a/RenderSystems/Vulkan/src/Vao/OgreVulkanAsyncTicket.cpp +++ b/RenderSystems/Vulkan/src/Vao/OgreVulkanAsyncTicket.cpp @@ -75,7 +75,7 @@ namespace Ogre mQueue->releaseFence( mFenceName ); mFenceName = 0; - checkVkResult( result, "vkWaitForFences" ); + checkVkResult( mQueue->mOwnerDevice, result, "vkWaitForFences" ); } } else diff --git a/RenderSystems/Vulkan/src/Vao/OgreVulkanDynamicBuffer.cpp b/RenderSystems/Vulkan/src/Vao/OgreVulkanDynamicBuffer.cpp index e3b04d59f0..e9691f4d46 100644 --- a/RenderSystems/Vulkan/src/Vao/OgreVulkanDynamicBuffer.cpp +++ b/RenderSystems/Vulkan/src/Vao/OgreVulkanDynamicBuffer.cpp @@ -78,7 +78,7 @@ namespace Ogre { VkResult result = vkMapMemory( mDevice->mDevice, mDeviceMemory, 0u, mVboSize, 0, &mMappedPtr ); - checkVkResult( result, "vkMapMemory" ); + checkVkResult( mDevice, result, "vkMapMemory" ); } outTicket = addMappedRange( start, count ); @@ -91,7 +91,7 @@ namespace Ogre setAlignMemoryCoherentAtom( memRange, start, count, mDevice->mDeviceProperties.limits.nonCoherentAtomSize ); VkResult result = vkInvalidateMappedMemoryRanges( mDevice->mDevice, 1u, &memRange ); - checkVkResult( result, "vkInvalidateMappedMemoryRanges" ); + checkVkResult( mDevice, result, "vkInvalidateMappedMemoryRanges" ); } return static_cast( mMappedPtr ) + start; @@ -110,7 +110,7 @@ namespace Ogre setAlignMemoryCoherentAtom( mappedRange, mMappedRanges[ticket].start + start, count, mDevice->mDeviceProperties.limits.nonCoherentAtomSize ); VkResult result = vkFlushMappedMemoryRanges( mDevice->mDevice, 1u, &mappedRange ); - checkVkResult( result, "vkFlushMappedMemoryRanges" ); + checkVkResult( mDevice, result, "vkFlushMappedMemoryRanges" ); } } //----------------------------------------------------------------------------------- diff --git a/RenderSystems/Vulkan/src/Vao/OgreVulkanReadOnlyTBufferWorkaround.cpp b/RenderSystems/Vulkan/src/Vao/OgreVulkanReadOnlyTBufferWorkaround.cpp index e5fa5ee2b0..451dcf52d1 100644 --- a/RenderSystems/Vulkan/src/Vao/OgreVulkanReadOnlyTBufferWorkaround.cpp +++ b/RenderSystems/Vulkan/src/Vao/OgreVulkanReadOnlyTBufferWorkaround.cpp @@ -95,7 +95,7 @@ namespace Ogre VkResult result = vkCreateBufferView( vulkanVaoManager->getDevice()->mDevice, &bufferCreateInfo, 0, &mCachedResourceViews[cacheIdx].mResourceView ); - checkVkResult( result, "vkCreateBufferView" ); + checkVkResult( vulkanVaoManager->getDevice(), result, "vkCreateBufferView" ); mCurrentCacheCursor = uint8( ( cacheIdx + 1 ) % 16 ); @@ -197,7 +197,7 @@ namespace Ogre VkBufferView retVal; VkResult result = vkCreateBufferView( vulkanVaoManager->getDevice()->mDevice, &bufferCreateInfo, 0, &retVal ); - checkVkResult( result, "vkCreateBufferView" ); + checkVkResult( vulkanVaoManager->getDevice(), result, "vkCreateBufferView" ); return retVal; } diff --git a/RenderSystems/Vulkan/src/Vao/OgreVulkanStagingBuffer.cpp b/RenderSystems/Vulkan/src/Vao/OgreVulkanStagingBuffer.cpp index b1ae6b38d5..461b68e9f8 100644 --- a/RenderSystems/Vulkan/src/Vao/OgreVulkanStagingBuffer.cpp +++ b/RenderSystems/Vulkan/src/Vao/OgreVulkanStagingBuffer.cpp @@ -146,7 +146,7 @@ namespace Ogre VkResult result = vkWaitForFences( device->mDevice, 1, &syncObj, VK_TRUE, UINT64_MAX ); // You can't wait forever in Vulkan?!? - checkVkResult( result, "VulkanStagingBuffer::wait" ); + checkVkResult( device, result, "VulkanStagingBuffer::wait" ); } //----------------------------------------------------------------------------------- void VulkanStagingBuffer::waitIfNeeded() diff --git a/RenderSystems/Vulkan/src/Vao/OgreVulkanTexBufferPacked.cpp b/RenderSystems/Vulkan/src/Vao/OgreVulkanTexBufferPacked.cpp index 7d78bb61df..3580e23d5c 100644 --- a/RenderSystems/Vulkan/src/Vao/OgreVulkanTexBufferPacked.cpp +++ b/RenderSystems/Vulkan/src/Vao/OgreVulkanTexBufferPacked.cpp @@ -96,7 +96,7 @@ namespace Ogre VkResult result = vkCreateBufferView( vulkanVaoManager->getDevice()->mDevice, &bufferCreateInfo, 0, &mCachedResourceViews[cacheIdx].mResourceView ); - checkVkResult( result, "vkCreateBufferView" ); + checkVkResult( vulkanVaoManager->getDevice(), result, "vkCreateBufferView" ); mCurrentCacheCursor = uint8( ( cacheIdx + 1 ) % 16 ); @@ -198,7 +198,7 @@ namespace Ogre VkBufferView retVal; VkResult result = vkCreateBufferView( vulkanVaoManager->getDevice()->mDevice, &bufferCreateInfo, 0, &retVal ); - checkVkResult( result, "vkCreateBufferView" ); + checkVkResult( vulkanVaoManager->getDevice(), result, "vkCreateBufferView" ); return retVal; } diff --git a/RenderSystems/Vulkan/src/Vao/OgreVulkanVaoManager.cpp b/RenderSystems/Vulkan/src/Vao/OgreVulkanVaoManager.cpp index 703f55db0f..99ebae1ece 100644 --- a/RenderSystems/Vulkan/src/Vao/OgreVulkanVaoManager.cpp +++ b/RenderSystems/Vulkan/src/Vao/OgreVulkanVaoManager.cpp @@ -476,7 +476,7 @@ namespace Ogre //----------------------------------------------------------------------------------- bool VulkanVaoManager::flushAllGpuDelayedBlocks( const bool bIssueBarrier ) { - if( bIssueBarrier && !mDevice->mIsDeviceLost ) + if( bIssueBarrier && !mDevice->isDeviceLost() ) { if( mDevice->mGraphicsQueue.getEncoderState() == VulkanQueue::EncoderGraphicsOpen ) { @@ -738,7 +738,7 @@ namespace Ogre VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT; VkResult result = vkCreateBuffer( mDevice->mDevice, &bufferCi, 0, &tmpBuffer ); - checkVkResult( result, "vkCreateBuffer" ); + checkVkResult( mDevice, result, "vkCreateBuffer" ); VkMemoryRequirements memRequirements; vkGetBufferMemoryRequirements( mDevice->mDevice, tmpBuffer, &memRequirements ); @@ -1107,7 +1107,7 @@ namespace Ogre if( vboFlag == CPU_READ_WRITE ) bufferCi.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; VkResult result = vkCreateBuffer( mDevice->mDevice, &bufferCi, 0, &newVbo.vkBuffer ); - checkVkResult( result, "vkCreateBuffer" ); + checkVkResult( mDevice, result, "vkCreateBuffer" ); VkMemoryRequirements buffMemRequirements; vkGetBufferMemoryRequirements( mDevice->mDevice, newVbo.vkBuffer, &buffMemRequirements ); @@ -1122,7 +1122,7 @@ namespace Ogre memAllocInfo.memoryTypeIndex = chosenMemoryTypeIdx; VkResult result = vkAllocateMemory( mDevice->mDevice, &memAllocInfo, NULL, &newVbo.vboName ); - checkVkResult( result, "vkAllocateMemory" ); + checkVkResult( mDevice, result, "vkAllocateMemory" ); mUsedHeapMemory[memTypes[chosenMemoryTypeIdx].heapIndex] += poolSize; @@ -1130,7 +1130,7 @@ namespace Ogre { result = vkBindBufferMemory( mDevice->mDevice, newVbo.vkBuffer, newVbo.vboName, buffOffset ); - checkVkResult( result, "vkBindBufferMemory" ); + checkVkResult( mDevice, result, "vkBindBufferMemory" ); } newVbo.sizeBytes = usablePoolSize; @@ -2173,7 +2173,7 @@ namespace Ogre VkSemaphore semaphore = 0; const VkResult result = vkCreateSemaphore( mDevice->mDevice, &semaphoreCreateInfo, 0, &semaphore ); - checkVkResult( result, "vkCreateSemaphore" ); + checkVkResult( mDevice, result, "vkCreateSemaphore" ); semaphoreArray.push_back( semaphore ); } @@ -2198,7 +2198,7 @@ namespace Ogre const VkResult result = vkCreateSemaphore( mDevice->mDevice, &semaphoreCreateInfo, 0, &retVal ); - checkVkResult( result, "vkCreateSemaphore" ); + checkVkResult( mDevice, result, "vkCreateSemaphore" ); } else { @@ -2294,7 +2294,7 @@ namespace Ogre VkResult result = vkWaitForFences( queue->mDevice, 1u, &fenceName, VK_TRUE, UINT64_MAX ); // You can't wait forever in Vulkan?!? - checkVkResult( result, "VulkanStagingBuffer::wait" ); + checkVkResult( queue->mOwnerDevice, result, "VulkanStagingBuffer::wait" ); queue->releaseFence( fenceName ); return 0; } diff --git a/RenderSystems/Vulkan/src/Windowing/Android/OgreVulkanAndroidWindow.cpp b/RenderSystems/Vulkan/src/Windowing/Android/OgreVulkanAndroidWindow.cpp index 5e17140955..02a9f0366d 100644 --- a/RenderSystems/Vulkan/src/Windowing/Android/OgreVulkanAndroidWindow.cpp +++ b/RenderSystems/Vulkan/src/Windowing/Android/OgreVulkanAndroidWindow.cpp @@ -417,7 +417,7 @@ namespace Ogre andrSurfCreateInfo.window = mNativeWindow; VkResult result = vkCreateAndroidSurfaceKHR( mDevice->mInstance->mVkInstance, &andrSurfCreateInfo, 0, &mSurfaceKHR ); - checkVkResult( result, "vkCreateAndroidSurfaceKHR" ); + checkVkResult( mDevice, result, "vkCreateAndroidSurfaceKHR" ); } //------------------------------------------------------------------------- void VulkanAndroidWindow::setJniProvider( AndroidJniProvider *provider ) diff --git a/RenderSystems/Vulkan/src/Windowing/X11/OgreVulkanXcbWindow.cpp b/RenderSystems/Vulkan/src/Windowing/X11/OgreVulkanXcbWindow.cpp index 426eca8387..199735fe2d 100644 --- a/RenderSystems/Vulkan/src/Windowing/X11/OgreVulkanXcbWindow.cpp +++ b/RenderSystems/Vulkan/src/Windowing/X11/OgreVulkanXcbWindow.cpp @@ -245,7 +245,9 @@ namespace Ogre xcbSurfCreateInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; xcbSurfCreateInfo.connection = mConnection; xcbSurfCreateInfo.window = mXcbWindow; - create_xcb_surface( mDevice->mInstance->mVkInstance, &xcbSurfCreateInfo, 0, &mSurfaceKHR ); + VkResult result = + create_xcb_surface( mDevice->mInstance->mVkInstance, &xcbSurfCreateInfo, 0, &mSurfaceKHR ); + checkVkResult( mDevice, result, "vkCreateXcbSurfaceKHR" ); } //------------------------------------------------------------------------- void VulkanXcbWindow::initConnection() diff --git a/RenderSystems/Vulkan/src/Windowing/win32/OgreVulkanWin32Window.cpp b/RenderSystems/Vulkan/src/Windowing/win32/OgreVulkanWin32Window.cpp index 999f5d89d1..d9135ea29a 100644 --- a/RenderSystems/Vulkan/src/Windowing/win32/OgreVulkanWin32Window.cpp +++ b/RenderSystems/Vulkan/src/Windowing/win32/OgreVulkanWin32Window.cpp @@ -468,7 +468,7 @@ namespace Ogre VkResult result = vkCreateWin32SurfaceKHR( mDevice->mInstance->mVkInstance, &createInfo, 0, &mSurfaceKHR ); - checkVkResult( result, "vkCreateWin32SurfaceKHR" ); + checkVkResult( mDevice, result, "vkCreateWin32SurfaceKHR" ); } //------------------------------------------------------------------------- void VulkanWin32Window::adjustWindow( uint32 clientWidth, uint32 clientHeight,