diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /gfx/angle/checkout/src/libANGLE/Platform.cpp | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/Platform.cpp')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/Platform.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/Platform.cpp b/gfx/angle/checkout/src/libANGLE/Platform.cpp new file mode 100644 index 0000000000..d798fd4e86 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/Platform.cpp @@ -0,0 +1,76 @@ +// +// Copyright 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. +// + +// Platform.cpp: Implementation methods for angle::Platform. + +#include <platform/PlatformMethods.h> + +#include <cstring> + +#include "common/debug.h" + +namespace +{ +// TODO(jmadill): Make methods owned by egl::Display. +angle::PlatformMethods &PlatformMethods() +{ + static angle::PlatformMethods platformMethods; + return platformMethods; +} +} // anonymous namespace + +angle::PlatformMethods *ANGLEPlatformCurrent() +{ + return &PlatformMethods(); +} + +bool ANGLE_APIENTRY ANGLEGetDisplayPlatform(angle::EGLDisplayType display, + const char *const methodNames[], + unsigned int methodNameCount, + void *context, + void *platformMethods) +{ + angle::PlatformMethods **platformMethodsOut = + reinterpret_cast<angle::PlatformMethods **>(platformMethods); + + // We allow for a lower input count of impl platform methods if the subset is correct. + if (methodNameCount > angle::g_NumPlatformMethods) + { + ERR() << "Invalid platform method count: " << methodNameCount << ", expected " + << angle::g_NumPlatformMethods << "."; + return false; + } + + for (unsigned int nameIndex = 0; nameIndex < methodNameCount; ++nameIndex) + { + const char *expectedName = angle::g_PlatformMethodNames[nameIndex]; + const char *actualName = methodNames[nameIndex]; + + // Skip deprecated methods. The names of these methods start with |placeholder|. + constexpr char kPlaceholder[] = "placeholder"; + if (strncmp(expectedName, kPlaceholder, sizeof(kPlaceholder) - 1) == 0) + { + continue; + } + if (strcmp(expectedName, actualName) != 0) + { + ERR() << "Invalid platform method name: " << actualName << ", expected " << expectedName + << "."; + return false; + } + } + + // TODO(jmadill): Store platform methods in display. + PlatformMethods().context = context; + *platformMethodsOut = &PlatformMethods(); + return true; +} + +void ANGLE_APIENTRY ANGLEResetDisplayPlatform(angle::EGLDisplayType display) +{ + // TODO(jmadill): Store platform methods in display. + PlatformMethods() = angle::PlatformMethods(); +} |