From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- gfx/angle/checkout/src/libANGLE/InfoLog.h | 90 +++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 gfx/angle/checkout/src/libANGLE/InfoLog.h (limited to 'gfx/angle/checkout/src/libANGLE/InfoLog.h') diff --git a/gfx/angle/checkout/src/libANGLE/InfoLog.h b/gfx/angle/checkout/src/libANGLE/InfoLog.h new file mode 100644 index 0000000000..53333ea1aa --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/InfoLog.h @@ -0,0 +1,90 @@ +// +// Copyright 2020 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. +// +// InfoLog.h: Defines the gl::InfoLog class to handle the logs generated when +// compiling/linking shaders so useful error messages can be returned to the caller. + +#ifndef LIBANGLE_INFOLOG_H_ +#define LIBANGLE_INFOLOG_H_ + +namespace gl +{ + +class InfoLog : angle::NonCopyable +{ + public: + InfoLog(); + ~InfoLog(); + + size_t getLength() const; + void getLog(GLsizei bufSize, GLsizei *length, char *infoLog) const; + + void appendSanitized(const char *message); + void reset(); + + // This helper class ensures we append a newline after writing a line. + class StreamHelper : angle::NonCopyable + { + public: + StreamHelper(StreamHelper &&rhs) : mStream(rhs.mStream) { rhs.mStream = nullptr; } + + StreamHelper &operator=(StreamHelper &&rhs) + { + std::swap(mStream, rhs.mStream); + return *this; + } + + ~StreamHelper() + { + // Write newline when destroyed on the stack + if (mStream && !mStream->str().empty()) + { + (*mStream) << std::endl; + } + } + + template + StreamHelper &operator<<(const T &value) + { + (*mStream) << value; + return *this; + } + + private: + friend class InfoLog; + + StreamHelper(std::stringstream *stream) : mStream(stream) { ASSERT(stream); } + + std::stringstream *mStream; + }; + + template + StreamHelper operator<<(const T &value) + { + ensureInitialized(); + StreamHelper helper(mLazyStream.get()); + helper << value; + return helper; + } + + std::string str() const { return mLazyStream ? mLazyStream->str() : ""; } + + bool empty() const; + + private: + void ensureInitialized() + { + if (!mLazyStream) + { + mLazyStream.reset(new std::stringstream()); + } + } + + std::unique_ptr mLazyStream; +}; + +} // namespace gl + +#endif // LIBANGLE_INFOLOG_H_ -- cgit v1.2.3