diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /gfx/angle/checkout/src/libANGLE/entry_points_utils.h | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/entry_points_utils.h')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/entry_points_utils.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/entry_points_utils.h b/gfx/angle/checkout/src/libANGLE/entry_points_utils.h new file mode 100644 index 0000000000..c5a3178308 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/entry_points_utils.h @@ -0,0 +1,127 @@ +// +// Copyright 2018 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. +// +// entry_point_utils: +// These helpers are used in GL/GLES entry point routines. + +#ifndef LIBANGLE_ENTRY_POINT_UTILS_H_ +#define LIBANGLE_ENTRY_POINT_UTILS_H_ + +#include "angle_gl.h" +#include "common/Optional.h" +#include "common/PackedEnums.h" +#include "common/angleutils.h" +#include "common/entry_points_enum_autogen.h" +#include "common/mathutil.h" +#include "libANGLE/Context.h" +#include "libANGLE/Display.h" + +namespace gl +{ +// A template struct for determining the default value to return for each entry point. +template <angle::EntryPoint EP, typename ReturnType> +struct DefaultReturnValue; + +// Default return values for each basic return type. +template <angle::EntryPoint EP> +struct DefaultReturnValue<EP, GLint> +{ + static constexpr GLint kValue = -1; +}; + +// This doubles as the GLenum return value. +template <angle::EntryPoint EP> +struct DefaultReturnValue<EP, GLuint> +{ + static constexpr GLuint kValue = 0; +}; + +template <angle::EntryPoint EP> +struct DefaultReturnValue<EP, GLboolean> +{ + static constexpr GLboolean kValue = GL_FALSE; +}; + +template <angle::EntryPoint EP> +struct DefaultReturnValue<EP, ShaderProgramID> +{ + static constexpr ShaderProgramID kValue = {0}; +}; + +// Catch-all rules for pointer types. +template <angle::EntryPoint EP, typename PointerType> +struct DefaultReturnValue<EP, const PointerType *> +{ + static constexpr const PointerType *kValue = nullptr; +}; + +template <angle::EntryPoint EP, typename PointerType> +struct DefaultReturnValue<EP, PointerType *> +{ + static constexpr PointerType *kValue = nullptr; +}; + +// Overloaded to return invalid index +template <> +struct DefaultReturnValue<angle::EntryPoint::GLGetUniformBlockIndex, GLuint> +{ + static constexpr GLuint kValue = GL_INVALID_INDEX; +}; + +// Specialized enum error value. +template <> +struct DefaultReturnValue<angle::EntryPoint::GLClientWaitSync, GLenum> +{ + static constexpr GLenum kValue = GL_WAIT_FAILED; +}; + +// glTestFenceNV should still return TRUE for an invalid fence. +template <> +struct DefaultReturnValue<angle::EntryPoint::GLTestFenceNV, GLboolean> +{ + static constexpr GLboolean kValue = GL_TRUE; +}; + +template <angle::EntryPoint EP, typename ReturnType> +constexpr ANGLE_INLINE ReturnType GetDefaultReturnValue() +{ + return DefaultReturnValue<EP, ReturnType>::kValue; +} + +#if ANGLE_CAPTURE_ENABLED +# define ANGLE_CAPTURE_GL(Func, ...) CaptureCallToFrameCapture(Capture##Func, __VA_ARGS__) +# define ANGLE_CAPTURE_EGL(Func, ...) CaptureCallToCaptureEGL(Capture##Func, __VA_ARGS__) +#else +# define ANGLE_CAPTURE_GL(...) +# define ANGLE_CAPTURE_EGL(...) +#endif // ANGLE_CAPTURE_ENABLED + +#define EGL_EVENT(EP, FMT, ...) EVENT(nullptr, EGL##EP, FMT, ##__VA_ARGS__) + +inline int CID(const Context *context) +{ + return context == nullptr ? 0 : static_cast<int>(context->id().value); +} +} // namespace gl + +namespace egl +{ +inline int CID(EGLDisplay display, EGLContext context) +{ + auto *displayPtr = reinterpret_cast<const egl::Display *>(display); + if (!Display::isValidDisplay(displayPtr)) + { + return -1; + } + auto *contextPtr = reinterpret_cast<const gl::Context *>(context); + if (!displayPtr->isValidContext(contextPtr)) + { + return -1; + } + return gl::CID(contextPtr); +} +} // namespace egl + +#endif // LIBANGLE_ENTRY_POINT_UTILS_H_ |