/* Please see header for specification */ bool Anvil::Fence::is_set() const { VkResult result; result = vkGetFenceStatus(m_device_ptr->get_device_vk(), m_fence); anvil_assert(result == VK_SUCCESS || result == VK_NOT_READY); return (result == VK_SUCCESS); }
VkRenderTexture* VkRenderTarget :: getTexture() { VkFence fence = static_cast<VkRenderTexture*>(mRenderTexture)->getFenceObject(); VkResult err; VulkanCore * core = VulkanCore::getInstance(); if(!core) { return NULL; } VkDevice device = core->getDevice(); err = vkGetFenceStatus(device, fence); /* Commenting out the code of sending an older image to oculus, if the current one is not yet complete. * Reason for commenting : 1. Even though the FPS is 60 the visuals lag. * 2. FPS is not affected with or without this logic */ /* bool found = false; VkResult status; if (err != VK_SUCCESS) { renderTarget1 = static_cast<VkRenderTarget*>(renderTarget->getNextRenderTarget()); while (renderTarget1!= nullptr && renderTarget1 != renderTarget) { VkFence fence1 = static_cast<VkRenderTexture*>(renderTarget1->getTexture())->getFenceObject(); status = vkGetFenceStatus(m_device, fence1); if (VK_SUCCESS == status) { found = true; break; } renderTarget1 = static_cast<VkRenderTarget*>(renderTarget1->getNextRenderTarget()); } if (!found) { renderTarget1 = static_cast<VkRenderTarget*>(renderTarget->getNextRenderTarget()); VkFence fence1 = static_cast<VkRenderTexture*>(renderTarget1->getTexture())->getFenceObject(); err = vkWaitForFences(m_device, 1, &fence1 , VK_TRUE, 4294967295U); } } */ err = vkWaitForFences(device, 1, &fence , VK_TRUE, 4294967295U); if (err != VK_SUCCESS) { return NULL; } return static_cast<VkRenderTexture*>(mRenderTexture); }
VkResult wait_for_fence(VkFence fence, u64 timeout) { if (timeout) { return vkWaitForFences(*g_current_renderer, 1, &fence, VK_FALSE, timeout * 1000ull); } else { while (auto status = vkGetFenceStatus(*g_current_renderer, fence)) { switch (status) { case VK_NOT_READY: continue; default: die_with_error(HERE, status); return status; } } return VK_SUCCESS; } }
VkResult Fence::getStatus() const { return vkGetFenceStatus(device, fence); }