Hash :
1c7f08c3
Author :
Date :
2018-10-10T16:13:02
Inline RefCountObject::release. Also don't return errors from the object release methods. Not returning errors reduces the amount of code generated. Also we shouldn't be exiting early from destructor type functions. Increases object binding performance. Bug: angleproject:2877 Change-Id: Ieb8120d885b946915e355419825e1f52f31d7b49 Reviewed-on: https://chromium-review.googlesource.com/c/1270218 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
//
// Copyright (c) 2002-2013 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.
//
// Fence.cpp: Implements the gl::FenceNV and gl::Sync classes, which support the GL_NV_fence
// extension and GLES3 sync objects.
#include "libANGLE/Fence.h"
#include "angle_gl.h"
#include "common/utilities.h"
#include "libANGLE/renderer/FenceNVImpl.h"
#include "libANGLE/renderer/SyncImpl.h"
namespace gl
{
FenceNV::FenceNV(rx::FenceNVImpl *impl)
: mFence(impl),
mIsSet(false),
mStatus(GL_FALSE),
mCondition(GL_NONE)
{
}
FenceNV::~FenceNV()
{
SafeDelete(mFence);
}
Error FenceNV::set(const Context *context, GLenum condition)
{
ANGLE_TRY(mFence->set(context, condition));
mCondition = condition;
mStatus = GL_FALSE;
mIsSet = true;
return NoError();
}
Error FenceNV::test(const Context *context, GLboolean *outResult)
{
// Flush the command buffer by default
ANGLE_TRY(mFence->test(context, &mStatus));
*outResult = mStatus;
return NoError();
}
Error FenceNV::finish(const Context *context)
{
ASSERT(mIsSet);
ANGLE_TRY(mFence->finish(context));
mStatus = GL_TRUE;
return NoError();
}
Sync::Sync(rx::SyncImpl *impl, GLuint id)
: RefCountObject(id),
mFence(impl),
mLabel(),
mCondition(GL_SYNC_GPU_COMMANDS_COMPLETE),
mFlags(0)
{
}
void Sync::onDestroy(const Context *context)
{
}
Sync::~Sync()
{
SafeDelete(mFence);
}
void Sync::setLabel(const std::string &label)
{
mLabel = label;
}
const std::string &Sync::getLabel() const
{
return mLabel;
}
Error Sync::set(const Context *context, GLenum condition, GLbitfield flags)
{
ANGLE_TRY(mFence->set(context, condition, flags));
mCondition = condition;
mFlags = flags;
return NoError();
}
Error Sync::clientWait(const Context *context,
GLbitfield flags,
GLuint64 timeout,
GLenum *outResult)
{
ASSERT(mCondition != GL_NONE);
return mFence->clientWait(context, flags, timeout, outResult);
}
Error Sync::serverWait(const Context *context, GLbitfield flags, GLuint64 timeout)
{
return mFence->serverWait(context, flags, timeout);
}
Error Sync::getStatus(const Context *context, GLint *outResult) const
{
return mFence->getStatus(context, outResult);
}
} // namespace gl