diff options
Diffstat (limited to 'chromium/third_party/angle/util')
17 files changed, 157 insertions, 16 deletions
diff --git a/chromium/third_party/angle/util/BUILD.gn b/chromium/third_party/angle/util/BUILD.gn index a4ac0cd3601..73681e39296 100644 --- a/chromium/third_party/angle/util/BUILD.gn +++ b/chromium/third_party/angle/util/BUILD.gn @@ -51,6 +51,8 @@ if (angle_use_x11) { if (is_fuchsia) { _util_sources += [ + "fuchsia/FuchsiaPixmap.cpp", + "fuchsia/FuchsiaPixmap.h", "fuchsia/ScenicWindow.cpp", "fuchsia/ScenicWindow.h", ] diff --git a/chromium/third_party/angle/util/EGLPlatformParameters.h b/chromium/third_party/angle/util/EGLPlatformParameters.h index 9122367ca7d..94aa6d171d2 100644 --- a/chromium/third_party/angle/util/EGLPlatformParameters.h +++ b/chromium/third_party/angle/util/EGLPlatformParameters.h @@ -60,20 +60,22 @@ struct EGLPlatformParameters { return std::tie(renderer, majorVersion, minorVersion, deviceType, presentPath, debugLayersEnabled, contextVirtualization, transformFeedbackFeature, - allocateNonZeroMemoryFeature, platformMethods, robustness); + allocateNonZeroMemoryFeature, emulateCopyTexImage2DFromRenderbuffers, + platformMethods, robustness); } - EGLint renderer = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE; - EGLint majorVersion = EGL_DONT_CARE; - EGLint minorVersion = EGL_DONT_CARE; - EGLint deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE; - EGLint presentPath = EGL_DONT_CARE; - EGLint debugLayersEnabled = EGL_DONT_CARE; - EGLint contextVirtualization = EGL_DONT_CARE; - EGLint robustness = EGL_DONT_CARE; - EGLint transformFeedbackFeature = EGL_DONT_CARE; - EGLint allocateNonZeroMemoryFeature = EGL_DONT_CARE; - angle::PlatformMethods *platformMethods = nullptr; + EGLint renderer = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE; + EGLint majorVersion = EGL_DONT_CARE; + EGLint minorVersion = EGL_DONT_CARE; + EGLint deviceType = EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE; + EGLint presentPath = EGL_DONT_CARE; + EGLint debugLayersEnabled = EGL_DONT_CARE; + EGLint contextVirtualization = EGL_DONT_CARE; + EGLint robustness = EGL_DONT_CARE; + EGLint transformFeedbackFeature = EGL_DONT_CARE; + EGLint allocateNonZeroMemoryFeature = EGL_DONT_CARE; + EGLint emulateCopyTexImage2DFromRenderbuffers = EGL_DONT_CARE; + angle::PlatformMethods *platformMethods = nullptr; }; inline bool operator<(const EGLPlatformParameters &a, const EGLPlatformParameters &b) diff --git a/chromium/third_party/angle/util/EGLWindow.cpp b/chromium/third_party/angle/util/EGLWindow.cpp index c257290dfc4..d3495423dc4 100644 --- a/chromium/third_party/angle/util/EGLWindow.cpp +++ b/chromium/third_party/angle/util/EGLWindow.cpp @@ -13,7 +13,7 @@ #include <string.h> #include "common/system_utils.h" -#include "platform/Platform.h" +#include "platform/PlatformMethods.h" #include "util/OSWindow.h" // ConfigParameters implementation. @@ -191,6 +191,11 @@ bool EGLWindow::initializeDisplay(OSWindow *osWindow, disabledFeatureOverrides.push_back("allocate_non_zero_memory"); } + if (params.emulateCopyTexImage2DFromRenderbuffers == EGL_TRUE) + { + enabledFeatureOverrides.push_back("emulate_copyteximage2d_from_renderbuffers"); + } + if (!disabledFeatureOverrides.empty()) { if (strstr(extensionString, "EGL_ANGLE_feature_control") == nullptr) diff --git a/chromium/third_party/angle/util/OSPixmap.h b/chromium/third_party/angle/util/OSPixmap.h index 6f1400e4e79..9beec2d0e3b 100644 --- a/chromium/third_party/angle/util/OSPixmap.h +++ b/chromium/third_party/angle/util/OSPixmap.h @@ -26,7 +26,7 @@ class ANGLE_UTIL_EXPORT OSPixmap virtual bool initialize(EGLNativeDisplayType display, size_t width, size_t height, - int depth) = 0; + int nativeVisual) = 0; virtual EGLNativePixmapType getNativePixmap() const = 0; }; diff --git a/chromium/third_party/angle/util/egl_loader_autogen.cpp b/chromium/third_party/angle/util/egl_loader_autogen.cpp index 77d1012ebc4..06e18f76df2 100644 --- a/chromium/third_party/angle/util/egl_loader_autogen.cpp +++ b/chromium/third_party/angle/util/egl_loader_autogen.cpp @@ -69,6 +69,9 @@ ANGLE_UTIL_EXPORT PFNEGLCREATEDEVICEANGLEPROC l_eglCreateDeviceANGLE; ANGLE_UTIL_EXPORT PFNEGLRELEASEDEVICEANGLEPROC l_eglReleaseDeviceANGLE; ANGLE_UTIL_EXPORT PFNEGLQUERYDISPLAYATTRIBANGLEPROC l_eglQueryDisplayAttribANGLE; ANGLE_UTIL_EXPORT PFNEGLQUERYSTRINGIANGLEPROC l_eglQueryStringiANGLE; +ANGLE_UTIL_EXPORT PFNEGLHANDLEGPUSWITCHANGLEPROC l_eglHandleGPUSwitchANGLE; +ANGLE_UTIL_EXPORT PFNEGLREACQUIREHIGHPOWERGPUANGLEPROC l_eglReacquireHighPowerGPUANGLE; +ANGLE_UTIL_EXPORT PFNEGLRELEASEHIGHPOWERGPUANGLEPROC l_eglReleaseHighPowerGPUANGLE; ANGLE_UTIL_EXPORT PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC l_eglProgramCacheGetAttribANGLE; ANGLE_UTIL_EXPORT PFNEGLPROGRAMCACHEPOPULATEANGLEPROC l_eglProgramCachePopulateANGLE; ANGLE_UTIL_EXPORT PFNEGLPROGRAMCACHEQUERYANGLEPROC l_eglProgramCacheQueryANGLE; @@ -198,6 +201,12 @@ void LoadEGL(LoadProc loadProc) reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBANGLEPROC>(loadProc("eglQueryDisplayAttribANGLE")); l_eglQueryStringiANGLE = reinterpret_cast<PFNEGLQUERYSTRINGIANGLEPROC>(loadProc("eglQueryStringiANGLE")); + l_eglHandleGPUSwitchANGLE = + reinterpret_cast<PFNEGLHANDLEGPUSWITCHANGLEPROC>(loadProc("eglHandleGPUSwitchANGLE")); + l_eglReacquireHighPowerGPUANGLE = reinterpret_cast<PFNEGLREACQUIREHIGHPOWERGPUANGLEPROC>( + loadProc("eglReacquireHighPowerGPUANGLE")); + l_eglReleaseHighPowerGPUANGLE = reinterpret_cast<PFNEGLRELEASEHIGHPOWERGPUANGLEPROC>( + loadProc("eglReleaseHighPowerGPUANGLE")); l_eglProgramCacheGetAttribANGLE = reinterpret_cast<PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC>( loadProc("eglProgramCacheGetAttribANGLE")); l_eglProgramCachePopulateANGLE = reinterpret_cast<PFNEGLPROGRAMCACHEPOPULATEANGLEPROC>( diff --git a/chromium/third_party/angle/util/egl_loader_autogen.h b/chromium/third_party/angle/util/egl_loader_autogen.h index ee7162de287..1dfaec274c3 100644 --- a/chromium/third_party/angle/util/egl_loader_autogen.h +++ b/chromium/third_party/angle/util/egl_loader_autogen.h @@ -73,6 +73,9 @@ #define eglReleaseDeviceANGLE l_eglReleaseDeviceANGLE #define eglQueryDisplayAttribANGLE l_eglQueryDisplayAttribANGLE #define eglQueryStringiANGLE l_eglQueryStringiANGLE +#define eglHandleGPUSwitchANGLE l_eglHandleGPUSwitchANGLE +#define eglReacquireHighPowerGPUANGLE l_eglReacquireHighPowerGPUANGLE +#define eglReleaseHighPowerGPUANGLE l_eglReleaseHighPowerGPUANGLE #define eglProgramCacheGetAttribANGLE l_eglProgramCacheGetAttribANGLE #define eglProgramCachePopulateANGLE l_eglProgramCachePopulateANGLE #define eglProgramCacheQueryANGLE l_eglProgramCacheQueryANGLE @@ -169,6 +172,9 @@ ANGLE_UTIL_EXPORT extern PFNEGLCREATEDEVICEANGLEPROC l_eglCreateDeviceANGLE; ANGLE_UTIL_EXPORT extern PFNEGLRELEASEDEVICEANGLEPROC l_eglReleaseDeviceANGLE; ANGLE_UTIL_EXPORT extern PFNEGLQUERYDISPLAYATTRIBANGLEPROC l_eglQueryDisplayAttribANGLE; ANGLE_UTIL_EXPORT extern PFNEGLQUERYSTRINGIANGLEPROC l_eglQueryStringiANGLE; +ANGLE_UTIL_EXPORT extern PFNEGLHANDLEGPUSWITCHANGLEPROC l_eglHandleGPUSwitchANGLE; +ANGLE_UTIL_EXPORT extern PFNEGLREACQUIREHIGHPOWERGPUANGLEPROC l_eglReacquireHighPowerGPUANGLE; +ANGLE_UTIL_EXPORT extern PFNEGLRELEASEHIGHPOWERGPUANGLEPROC l_eglReleaseHighPowerGPUANGLE; ANGLE_UTIL_EXPORT extern PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC l_eglProgramCacheGetAttribANGLE; ANGLE_UTIL_EXPORT extern PFNEGLPROGRAMCACHEPOPULATEANGLEPROC l_eglProgramCachePopulateANGLE; ANGLE_UTIL_EXPORT extern PFNEGLPROGRAMCACHEQUERYANGLEPROC l_eglProgramCacheQueryANGLE; diff --git a/chromium/third_party/angle/util/frame_capture_utils.h b/chromium/third_party/angle/util/frame_capture_utils.h index 11ae2564bf2..1cd2d7c2bfc 100644 --- a/chromium/third_party/angle/util/frame_capture_utils.h +++ b/chromium/third_party/angle/util/frame_capture_utils.h @@ -19,6 +19,11 @@ #define USE_SYSTEM_ZLIB #include "compression_utils_portable.h" +#define ANGLE_MACRO_STRINGIZE_AUX(a) #a +#define ANGLE_MACRO_STRINGIZE(a) ANGLE_MACRO_STRINGIZE_AUX(a) +#define ANGLE_MACRO_CONCAT_AUX(a, b) a##b +#define ANGLE_MACRO_CONCAT(a, b) ANGLE_MACRO_CONCAT_AUX(a, b) + namespace angle { diff --git a/chromium/third_party/angle/util/fuchsia/FuchsiaPixmap.cpp b/chromium/third_party/angle/util/fuchsia/FuchsiaPixmap.cpp new file mode 100644 index 00000000000..552e13d2c6d --- /dev/null +++ b/chromium/third_party/angle/util/fuchsia/FuchsiaPixmap.cpp @@ -0,0 +1,14 @@ +// +// Copyright 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. +// + +// FuchsiaPixmap.cpp: Implementation of OSPixmap for Fuchsia + +#include "util/fuchsia/FuchsiaPixmap.h" + +OSPixmap *CreateOSPixmap() +{ + return nullptr; +} diff --git a/chromium/third_party/angle/util/fuchsia/FuchsiaPixmap.h b/chromium/third_party/angle/util/fuchsia/FuchsiaPixmap.h new file mode 100644 index 00000000000..51abcb434e2 --- /dev/null +++ b/chromium/third_party/angle/util/fuchsia/FuchsiaPixmap.h @@ -0,0 +1,14 @@ +// +// Copyright 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. +// + +// FuchsiaPixmap.h: Definition of the implementation of OSPixmap for Fuchsia + +#ifndef UTIL_FUCHSIA_FUCHSIAPIXMAP_H_ +#define UTIL_FUCHSIA_FUCHSIAPIXMAP_H_ + +#include "util/OSPixmap.h" + +#endif // UTIL_FUCHSIA_FUCHSIAPIXMAP_H_ diff --git a/chromium/third_party/angle/util/posix/test_utils_posix.cpp b/chromium/third_party/angle/util/posix/test_utils_posix.cpp index b1ec61ce9b5..2c2afafd193 100644 --- a/chromium/third_party/angle/util/posix/test_utils_posix.cpp +++ b/chromium/third_party/angle/util/posix/test_utils_posix.cpp @@ -433,4 +433,15 @@ int NumberOfProcessors() return static_cast<int>(res); } + +const char *GetNativeEGLLibraryNameWithExtension() +{ +#if defined(ANGLE_PLATFORM_ANDROID) + return "libEGL.so"; +#elif defined(ANGLE_PLATFORM_LINUX) + return "libEGL.so.1"; +#else + return "unknown_libegl"; +#endif +} } // namespace angle diff --git a/chromium/third_party/angle/util/shader_utils.cpp b/chromium/third_party/angle/util/shader_utils.cpp index 6d94734a7df..c09b0dca19f 100644 --- a/chromium/third_party/angle/util/shader_utils.cpp +++ b/chromium/third_party/angle/util/shader_utils.cpp @@ -447,6 +447,14 @@ const char *PositionAttrib() { return "a_position"; } +const char *Texture2DUniform() +{ + return "u_tex2D"; +} +const char *LodUniform() +{ + return "u_lod"; +} namespace vs { @@ -486,6 +494,21 @@ void main() })"; } +// A shader that simply passes through attribute a_position, setting it to gl_Position and varying +// texcoord. +const char *Texture2DLod() +{ + return R"(#version 300 es +in vec4 a_position; +out vec2 v_texCoord; + +void main() +{ + gl_Position = vec4(a_position.xy, 0.0, 1.0); + v_texCoord = a_position.xy * 0.5 + vec2(0.5); +})"; +} + } // namespace vs namespace fs @@ -527,6 +550,22 @@ void main() })"; } +// A shader that samples the texture at a given lod. +const char *Texture2DLod() +{ + return R"(#version 300 es +precision mediump float; +uniform sampler2D u_tex2D; +uniform float u_lod; +in vec2 v_texCoord; +out vec4 my_FragColor; + +void main() +{ + my_FragColor = textureLod(u_tex2D, v_texCoord, u_lod); +})"; +} + } // namespace fs } // namespace essl3_shaders diff --git a/chromium/third_party/angle/util/shader_utils.h b/chromium/third_party/angle/util/shader_utils.h index 98233888773..aaadd6428c8 100644 --- a/chromium/third_party/angle/util/shader_utils.h +++ b/chromium/third_party/angle/util/shader_utils.h @@ -103,6 +103,8 @@ namespace essl3_shaders { ANGLE_UTIL_EXPORT const char *PositionAttrib(); +ANGLE_UTIL_EXPORT const char *Texture2DUniform(); +ANGLE_UTIL_EXPORT const char *LodUniform(); namespace vs { @@ -117,6 +119,10 @@ ANGLE_UTIL_EXPORT const char *Simple(); // v_position. ANGLE_UTIL_EXPORT const char *Passthrough(); +// A shader that simply passes through attribute a_position, setting it to gl_Position and varying +// texcoord. +ANGLE_UTIL_EXPORT const char *Texture2DLod(); + } // namespace vs namespace fs @@ -131,6 +137,9 @@ ANGLE_UTIL_EXPORT const char *Green(); // A shader that fills with 100% opaque blue. ANGLE_UTIL_EXPORT const char *Blue(); +// A shader that samples the texture at a given lod. +ANGLE_UTIL_EXPORT const char *Texture2DLod(); + } // namespace fs } // namespace essl3_shaders diff --git a/chromium/third_party/angle/util/test_utils.h b/chromium/third_party/angle/util/test_utils.h index 43e996f21b6..6b821916d46 100644 --- a/chromium/third_party/angle/util/test_utils.h +++ b/chromium/third_party/angle/util/test_utils.h @@ -120,6 +120,7 @@ Process *LaunchProcess(const std::vector<const char *> &args, int NumberOfProcessors(); +const char *GetNativeEGLLibraryNameWithExtension(); } // namespace angle #endif // UTIL_TEST_UTILS_H_ diff --git a/chromium/third_party/angle/util/windows/WGLWindow.cpp b/chromium/third_party/angle/util/windows/WGLWindow.cpp index 68edea5e335..afb970011cb 100644 --- a/chromium/third_party/angle/util/windows/WGLWindow.cpp +++ b/chromium/third_party/angle/util/windows/WGLWindow.cpp @@ -77,6 +77,7 @@ bool WGLWindow::initializeGL(OSWindow *osWindow, { if (driverType != angle::GLESDriverType::SystemWGL) { + std::cerr << "WGLWindow requires angle::GLESDriverType::SystemWGL.\n"; return false; } diff --git a/chromium/third_party/angle/util/windows/test_utils_win.cpp b/chromium/third_party/angle/util/windows/test_utils_win.cpp index bdaf7e8eac3..d7f5ef45da5 100644 --- a/chromium/third_party/angle/util/windows/test_utils_win.cpp +++ b/chromium/third_party/angle/util/windows/test_utils_win.cpp @@ -444,4 +444,9 @@ bool DeleteFile(const char *path) return !!::DeleteFileA(path) ? true : ReturnSuccessOnNotFound(); } + +const char *GetNativeEGLLibraryNameWithExtension() +{ + return "libEGL.dll"; +} } // namespace angle diff --git a/chromium/third_party/angle/util/x11/X11Pixmap.cpp b/chromium/third_party/angle/util/x11/X11Pixmap.cpp index 2d81e0e433d..74a71f7585b 100644 --- a/chromium/third_party/angle/util/x11/X11Pixmap.cpp +++ b/chromium/third_party/angle/util/x11/X11Pixmap.cpp @@ -18,12 +18,27 @@ X11Pixmap::~X11Pixmap() } } -bool X11Pixmap::initialize(EGLNativeDisplayType display, size_t width, size_t height, int depth) +bool X11Pixmap::initialize(EGLNativeDisplayType display, + size_t width, + size_t height, + int nativeVisual) { mDisplay = display; int screen = DefaultScreen(mDisplay); Window root = RootWindow(mDisplay, screen); + int depth = 0; + + XVisualInfo visualTemplate; + visualTemplate.visualid = nativeVisual; + + int numVisuals = 0; + XVisualInfo *info = XGetVisualInfo(mDisplay, VisualIDMask, &visualTemplate, &numVisuals); + if (numVisuals == 1) + { + depth = info->depth; + } + XFree(info); mPixmap = XCreatePixmap(mDisplay, root, static_cast<unsigned int>(width), static_cast<unsigned int>(height), depth); diff --git a/chromium/third_party/angle/util/x11/X11Pixmap.h b/chromium/third_party/angle/util/x11/X11Pixmap.h index f338891cb30..c7b6c96c9f9 100644 --- a/chromium/third_party/angle/util/x11/X11Pixmap.h +++ b/chromium/third_party/angle/util/x11/X11Pixmap.h @@ -20,7 +20,10 @@ class X11Pixmap : public OSPixmap X11Pixmap(); ~X11Pixmap() override; - bool initialize(EGLNativeDisplayType display, size_t width, size_t height, int depth) override; + bool initialize(EGLNativeDisplayType display, + size_t width, + size_t height, + int nativeVisual) override; EGLNativePixmapType getNativePixmap() const override; |