Hash :
1ff6a6f2
Author :
Date :
2023-11-27T13:08:29
Pass the attribute map to egl::Sync::initialize. The attribute map was typically passed to the impl objects in the constructors. Instead, pass it to the initialize function. This removes the need for many member variables in different backends and opens up the future optimization of re-using sync objects by calling initialize on them with new attributes. Bug: angleproject:8430 Change-Id: If69970462cfed39d9a205034adb5ddd937c5ea31 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5063335 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@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
//
// Copyright 2020 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.
//
// EGL_KHR_reusable_sync
#ifndef LIBANGLE_RENDERER_EGLREUSABLESYNC_H_
#define LIBANGLE_RENDERER_EGLREUSABLESYNC_H_
#include "libANGLE/AttributeMap.h"
#include "libANGLE/renderer/EGLSyncImpl.h"
#include "common/angleutils.h"
#include <condition_variable>
namespace rx
{
class ReusableSync final : public EGLSyncImpl
{
public:
ReusableSync();
~ReusableSync() override;
void onDestroy(const egl::Display *display) override;
egl::Error initialize(const egl::Display *display,
const gl::Context *context,
EGLenum type,
const egl::AttributeMap &attribs) override;
egl::Error clientWait(const egl::Display *display,
const gl::Context *context,
EGLint flags,
EGLTime timeout,
EGLint *outResult) override;
egl::Error serverWait(const egl::Display *display,
const gl::Context *context,
EGLint flags) override;
egl::Error signal(const egl::Display *display,
const gl::Context *context,
EGLint mode) override;
egl::Error getStatus(const egl::Display *display, EGLint *outStatus) override;
private:
EGLint mStatus;
std::condition_variable mCondVar;
std::unique_lock<std::mutex> mMutex;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_EGLREUSABLESYNC_H_