// // 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/mathutil.h" #include "libANGLE/entry_points_enum_autogen.h" namespace gl { // A template struct for determining the default value to return for each entry point. template struct DefaultReturnValue; // Default return values for each basic return type. template struct DefaultReturnValue { static constexpr GLint kValue = -1; }; // This doubles as the GLenum return value. template struct DefaultReturnValue { static constexpr GLuint kValue = 0; }; template struct DefaultReturnValue { static constexpr GLboolean kValue = GL_FALSE; }; // Catch-all rules for pointer types. template struct DefaultReturnValue { static constexpr const PointerType *kValue = nullptr; }; template struct DefaultReturnValue { static constexpr PointerType *kValue = nullptr; }; // Overloaded to return invalid index template <> struct DefaultReturnValue { static constexpr GLuint kValue = GL_INVALID_INDEX; }; // Specialized enum error value. template <> struct DefaultReturnValue { static constexpr GLenum kValue = GL_WAIT_FAILED; }; // glTestFenceNV should still return TRUE for an invalid fence. template <> struct DefaultReturnValue { static constexpr GLboolean kValue = GL_TRUE; }; template constexpr ANGLE_INLINE ReturnType GetDefaultReturnValue() { return DefaultReturnValue::kValue; } #if ANGLE_CAPTURE_ENABLED # define ANGLE_CAPTURE(Func, ...) \ CaptureCallToFrameCapture("gl" ANGLE_STRINGIFY(Func), Capture##Func, Validate##Func, \ __VA_ARGS__) #else # define ANGLE_CAPTURE(...) #endif // ANGLE_CAPTURE_ENABLED } // namespace gl #endif // LIBANGLE_ENTRY_POINT_UTILS_H_