~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/ThirdParty/ANGLE/src/libANGLE/entry_points_utils.h

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// Copyright 2018 The ANGLE Project Authors. All rights reserved.
 
3
// Use of this source code is governed by a BSD-style license that can be
 
4
// found in the LICENSE file.
 
5
//
 
6
// entry_point_utils:
 
7
//   These helpers are used in GL/GLES entry point routines.
 
8
 
 
9
#ifndef LIBANGLE_ENTRY_POINT_UTILS_H_
 
10
#define LIBANGLE_ENTRY_POINT_UTILS_H_
 
11
 
 
12
#include "angle_gl.h"
 
13
#include "common/Optional.h"
 
14
#include "common/PackedEnums.h"
 
15
#include "common/angleutils.h"
 
16
#include "common/mathutil.h"
 
17
#include "libANGLE/Display.h"
 
18
#include "libANGLE/entry_points_enum_autogen.h"
 
19
 
 
20
namespace gl
 
21
{
 
22
// A template struct for determining the default value to return for each entry point.
 
23
template <EntryPoint EP, typename ReturnType>
 
24
struct DefaultReturnValue;
 
25
 
 
26
// Default return values for each basic return type.
 
27
template <EntryPoint EP>
 
28
struct DefaultReturnValue<EP, GLint>
 
29
{
 
30
    static constexpr GLint kValue = -1;
 
31
};
 
32
 
 
33
// This doubles as the GLenum return value.
 
34
template <EntryPoint EP>
 
35
struct DefaultReturnValue<EP, GLuint>
 
36
{
 
37
    static constexpr GLuint kValue = 0;
 
38
};
 
39
 
 
40
template <EntryPoint EP>
 
41
struct DefaultReturnValue<EP, GLboolean>
 
42
{
 
43
    static constexpr GLboolean kValue = GL_FALSE;
 
44
};
 
45
 
 
46
template <EntryPoint EP>
 
47
struct DefaultReturnValue<EP, ShaderProgramID>
 
48
{
 
49
    static constexpr ShaderProgramID kValue = {0};
 
50
};
 
51
 
 
52
// Catch-all rules for pointer types.
 
53
template <EntryPoint EP, typename PointerType>
 
54
struct DefaultReturnValue<EP, const PointerType *>
 
55
{
 
56
    static constexpr const PointerType *kValue = nullptr;
 
57
};
 
58
 
 
59
template <EntryPoint EP, typename PointerType>
 
60
struct DefaultReturnValue<EP, PointerType *>
 
61
{
 
62
    static constexpr PointerType *kValue = nullptr;
 
63
};
 
64
 
 
65
// Overloaded to return invalid index
 
66
template <>
 
67
struct DefaultReturnValue<EntryPoint::GetUniformBlockIndex, GLuint>
 
68
{
 
69
    static constexpr GLuint kValue = GL_INVALID_INDEX;
 
70
};
 
71
 
 
72
// Specialized enum error value.
 
73
template <>
 
74
struct DefaultReturnValue<EntryPoint::ClientWaitSync, GLenum>
 
75
{
 
76
    static constexpr GLenum kValue = GL_WAIT_FAILED;
 
77
};
 
78
 
 
79
// glTestFenceNV should still return TRUE for an invalid fence.
 
80
template <>
 
81
struct DefaultReturnValue<EntryPoint::TestFenceNV, GLboolean>
 
82
{
 
83
    static constexpr GLboolean kValue = GL_TRUE;
 
84
};
 
85
 
 
86
template <EntryPoint EP, typename ReturnType>
 
87
constexpr ANGLE_INLINE ReturnType GetDefaultReturnValue()
 
88
{
 
89
    return DefaultReturnValue<EP, ReturnType>::kValue;
 
90
}
 
91
 
 
92
#if ANGLE_CAPTURE_ENABLED
 
93
#    define ANGLE_CAPTURE(Func, ...) CaptureCallToFrameCapture(Capture##Func, __VA_ARGS__)
 
94
#else
 
95
#    define ANGLE_CAPTURE(...)
 
96
#endif  // ANGLE_CAPTURE_ENABLED
 
97
 
 
98
#define FUNC_EVENT(format, ...) EVENT(__FUNCTION__, format, __VA_ARGS__)
 
99
 
 
100
inline int CID(const Context *context)
 
101
{
 
102
    return context != nullptr ? context->id() : 0;
 
103
}
 
104
}  // namespace gl
 
105
 
 
106
namespace egl
 
107
{
 
108
inline int CID(EGLDisplay display, EGLContext context)
 
109
{
 
110
    auto *displayPtr = reinterpret_cast<const egl::Display *>(display);
 
111
    if (!Display::isValidDisplay(displayPtr))
 
112
    {
 
113
        return -1;
 
114
    }
 
115
    auto *contextPtr = reinterpret_cast<const gl::Context *>(context);
 
116
    if (!displayPtr->isValidContext(contextPtr))
 
117
    {
 
118
        return -1;
 
119
    }
 
120
    return gl::CID(contextPtr);
 
121
}
 
122
}  // namespace egl
 
123
 
 
124
#endif  // LIBANGLE_ENTRY_POINT_UTILS_H_