1// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//    http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Sync.hpp: Defines sync objects for the EGL_KHR_fence_sync extension.
16
17#ifndef LIBEGL_SYNC_H_
18#define LIBEGL_SYNC_H_
19
20#include "Context.hpp"
21
22#include <EGL/eglext.h>
23
24namespace egl
25{
26
27class FenceSync
28{
29public:
30	explicit FenceSync(Context *context) : context(context)
31	{
32		status = EGL_UNSIGNALED_KHR;
33		context->addRef();
34	}
35
36	~FenceSync()
37	{
38		context->release();
39		context = nullptr;
40	}
41
42	void wait() { context->finish(); signal(); }
43	void signal() { status = EGL_SIGNALED_KHR; }
44	bool isSignaled() const { return status == EGL_SIGNALED_KHR; }
45
46private:
47	EGLint status;
48	Context *context;
49};
50
51}
52
53#endif   // LIBEGL_SYNC_H_
54