summaryrefslogtreecommitdiffstats
path: root/gfx/angle/checkout/src/libANGLE/capture/capture_egl.h
blob: f23bc1a2ce56475c9a1ce41d28cf8853df8bf40f (plain)
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
//
// Copyright 2022 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.
//
// capture_egl.h:
//   EGL capture functions
//

#ifndef LIBANGLE_CAPTURE_EGL_H_
#define LIBANGLE_CAPTURE_EGL_H_

#include "libANGLE/Context.h"
#include "libANGLE/Thread.h"
#include "libANGLE/capture/FrameCapture.h"

namespace gl
{
enum class GLenumGroup;
}

namespace egl
{

template <typename CaptureFuncT, typename... ArgsT>
void CaptureCallToCaptureEGL(CaptureFuncT captureFunc, egl::Thread *thread, ArgsT... captureParams)
{
    gl::Context *context = thread->getContext();
    if (!context)
    {
        return;
    }

    angle::FrameCaptureShared *frameCaptureShared =
        context->getShareGroup()->getFrameCaptureShared();
    if (!frameCaptureShared->isCapturing())
    {
        return;
    }

    angle::CallCapture call = captureFunc(captureParams...);

    frameCaptureShared->captureCall(context, std::move(call), true);
}

angle::CallCapture CaptureCreateNativeClientBufferANDROID(const egl::AttributeMap &attribMap,
                                                          EGLClientBuffer eglClientBuffer);
angle::CallCapture CaptureEGLCreateImage(const gl::Context *context,
                                         EGLenum target,
                                         EGLClientBuffer buffer,
                                         const egl::AttributeMap &attributes,
                                         egl::Image *image);
angle::CallCapture CaptureEGLDestroyImage(egl::Display *display, egl::Image *image);

angle::CallCapture CaptureEGLCreatePbufferSurface(const AttributeMap &attrib_list,
                                                  egl::Surface *surface);

angle::CallCapture CaptureEGLDestroySurface(Display *display, Surface *surface);

angle::CallCapture CaptureEGLBindTexImage(egl::Surface *surface, EGLint buffer);

angle::CallCapture CaptureEGLReleaseTexImage(egl::Surface *surface, EGLint buffer);

angle::CallCapture CaptureEGLMakeCurrent(Surface *drawSurface,
                                         Surface *readSurface,
                                         gl::Context *context);
}  // namespace egl

#endif  // LIBANGLE_FRAME_CAPTURE_H_