| // |
| // Copyright 2016 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // FenceNVVk.cpp: |
| // Implements the class methods for FenceNVVk. |
| // |
| |
| #include "libANGLE/renderer/vulkan/FenceNVVk.h" |
| |
| #include "common/debug.h" |
| #include "libANGLE/Context.h" |
| #include "libANGLE/renderer/vulkan/ContextVk.h" |
| #include "libANGLE/renderer/vulkan/vk_utils.h" |
| |
| namespace rx |
| { |
| |
| FenceNVVk::FenceNVVk() : FenceNVImpl() {} |
| |
| FenceNVVk::~FenceNVVk() {} |
| |
| void FenceNVVk::onDestroy(const gl::Context *context) |
| { |
| mFenceSync.releaseToRenderer(vk::GetImpl(context)->getRenderer()); |
| } |
| |
| angle::Result FenceNVVk::set(const gl::Context *context, GLenum condition) |
| { |
| ASSERT(condition == GL_ALL_COMPLETED_NV); |
| return mFenceSync.initialize(vk::GetImpl(context)); |
| } |
| |
| angle::Result FenceNVVk::test(const gl::Context *context, GLboolean *outFinished) |
| { |
| bool signaled = false; |
| ANGLE_TRY(mFenceSync.getStatus(vk::GetImpl(context), &signaled)); |
| |
| ASSERT(outFinished); |
| *outFinished = signaled ? GL_TRUE : GL_FALSE; |
| return angle::Result::Continue; |
| } |
| |
| angle::Result FenceNVVk::finish(const gl::Context *context) |
| { |
| VkResult outResult; |
| ContextVk *contextVk = vk::GetImpl(context); |
| return mFenceSync.clientWait(contextVk, contextVk, true, UINT64_MAX, &outResult); |
| } |
| |
| } // namespace rx |