示例#1
0
/* 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);
}
示例#2
0
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);
}
示例#3
0
	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;
		}
	}
示例#4
0
文件: Fence.cpp 项目: YoutaVen/Vulkan
VkResult Fence::getStatus() const
{
	return vkGetFenceStatus(device, fence);
}