diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /gfx/angle/checkout/src/libANGLE/Debug.h | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/Debug.h')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/Debug.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/Debug.h b/gfx/angle/checkout/src/libANGLE/Debug.h new file mode 100644 index 0000000000..2c39e8c791 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/Debug.h @@ -0,0 +1,165 @@ +// +// Copyright (c) 2015 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. +// + +// Debug.h: Defines debug state used for GL_KHR_debug + +#ifndef LIBANGLE_DEBUG_H_ +#define LIBANGLE_DEBUG_H_ + +#include "angle_gl.h" +#include "common/PackedEnums.h" +#include "common/angleutils.h" +#include "libANGLE/AttributeMap.h" + +#include <deque> +#include <string> +#include <vector> + +namespace gl +{ +class Context; + +class LabeledObject +{ + public: + virtual ~LabeledObject() {} + virtual void setLabel(const Context *context, const std::string &label) = 0; + virtual const std::string &getLabel() const = 0; +}; + +class Debug : angle::NonCopyable +{ + public: + Debug(bool initialDebugState); + ~Debug(); + + void setMaxLoggedMessages(GLuint maxLoggedMessages); + + void setOutputEnabled(bool enabled); + bool isOutputEnabled() const; + + void setOutputSynchronous(bool synchronous); + bool isOutputSynchronous() const; + + void setCallback(GLDEBUGPROCKHR callback, const void *userParam); + GLDEBUGPROCKHR getCallback() const; + const void *getUserParam() const; + + void insertMessage(GLenum source, + GLenum type, + GLuint id, + GLenum severity, + const std::string &message, + gl::LogSeverity logSeverity) const; + void insertMessage(GLenum source, + GLenum type, + GLuint id, + GLenum severity, + std::string &&message, + gl::LogSeverity logSeverity) const; + + void setMessageControl(GLenum source, + GLenum type, + GLenum severity, + std::vector<GLuint> &&ids, + bool enabled); + size_t getMessages(GLuint count, + GLsizei bufSize, + GLenum *sources, + GLenum *types, + GLuint *ids, + GLenum *severities, + GLsizei *lengths, + GLchar *messageLog); + size_t getNextMessageLength() const; + size_t getMessageCount() const; + + void pushGroup(GLenum source, GLuint id, std::string &&message); + void popGroup(); + size_t getGroupStackDepth() const; + + private: + bool isMessageEnabled(GLenum source, GLenum type, GLuint id, GLenum severity) const; + + void pushDefaultGroup(); + + struct Message + { + GLenum source; + GLenum type; + GLuint id; + GLenum severity; + std::string message; + }; + + struct Control + { + Control(); + ~Control(); + Control(const Control &other); + + GLenum source; + GLenum type; + GLenum severity; + std::vector<GLuint> ids; + bool enabled; + }; + + struct Group + { + Group(); + ~Group(); + Group(const Group &other); + + GLenum source; + GLuint id; + std::string message; + + std::vector<Control> controls; + }; + + bool mOutputEnabled; + GLDEBUGPROCKHR mCallbackFunction; + const void *mCallbackUserParam; + mutable std::deque<Message> mMessages; + GLuint mMaxLoggedMessages; + bool mOutputSynchronous; + std::vector<Group> mGroups; +}; +} // namespace gl + +namespace egl +{ +class LabeledObject +{ + public: + virtual ~LabeledObject() {} + virtual void setLabel(EGLLabelKHR label) = 0; + virtual EGLLabelKHR getLabel() const = 0; +}; + +class Debug : angle::NonCopyable +{ + public: + Debug(); + + void setCallback(EGLDEBUGPROCKHR callback, const AttributeMap &attribs); + EGLDEBUGPROCKHR getCallback() const; + bool isMessageTypeEnabled(MessageType type) const; + + void insertMessage(EGLenum error, + const char *command, + MessageType messageType, + EGLLabelKHR threadLabel, + EGLLabelKHR objectLabel, + const std::string &message) const; + + private: + EGLDEBUGPROCKHR mCallback; + angle::PackedEnumBitSet<MessageType> mEnabledMessageTypes; +}; +} // namespace egl +#endif // LIBANGLE_DEBUG_H_ |