summaryrefslogtreecommitdiff
path: root/chromium/third_party/angle/include
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/third_party/angle/include
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/third_party/angle/include')
-rw-r--r--chromium/third_party/angle/include/EGL/eglext_angle.h9
-rw-r--r--chromium/third_party/angle/include/GLES2/gl2ext_angle.h5
-rw-r--r--chromium/third_party/angle/include/GLSLANG/ShaderLang.h4
-rw-r--r--chromium/third_party/angle/include/GLSLANG/ShaderVars.h4
-rw-r--r--chromium/third_party/angle/include/platform/FeaturesGL.h28
-rw-r--r--chromium/third_party/angle/include/platform/FeaturesVk.h26
-rw-r--r--chromium/third_party/angle/include/platform/Platform.h333
-rw-r--r--chromium/third_party/angle/include/platform/PlatformMethods.h339
8 files changed, 419 insertions, 329 deletions
diff --git a/chromium/third_party/angle/include/EGL/eglext_angle.h b/chromium/third_party/angle/include/EGL/eglext_angle.h
index 03c39860dc6..4702d95a4c3 100644
--- a/chromium/third_party/angle/include/EGL/eglext_angle.h
+++ b/chromium/third_party/angle/include/EGL/eglext_angle.h
@@ -56,6 +56,7 @@
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE 0x320A
#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE 0x345E
+#define EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE 0x348F
#endif /* EGL_ANGLE_platform_angle */
#ifndef EGL_ANGLE_platform_angle_d3d
@@ -253,6 +254,14 @@ EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateANGLE(EGLDisplay dpy,
#define EGL_POWER_PREFERENCE_ANGLE 0x3482
#define EGL_LOW_POWER_ANGLE 0x0001
#define EGL_HIGH_POWER_ANGLE 0x0002
+typedef void(EGLAPIENTRYP PFNEGLRELEASEHIGHPOWERGPUANGLEPROC) (EGLDisplay dpy, EGLContext ctx);
+typedef void(EGLAPIENTRYP PFNEGLREACQUIREHIGHPOWERGPUANGLEPROC) (EGLDisplay dpy, EGLContext ctx);
+typedef void(EGLAPIENTRYP PFNEGLHANDLEGPUSWITCHANGLEPROC) (EGLDisplay dpy);
+#ifdef EGL_EGLEXT_PROTOTYPES
+EGLAPI void EGLAPIENTRY eglReleaseHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx);
+EGLAPI void EGLAPIENTRY eglReacquireHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx);
+EGLAPI void EGLAPIENTRY eglHandleGPUSwitchANGLE(EGLDisplay dpy);
+#endif
#endif /* EGL_ANGLE_power_preference */
#ifndef EGL_ANGLE_feature_control
diff --git a/chromium/third_party/angle/include/GLES2/gl2ext_angle.h b/chromium/third_party/angle/include/GLES2/gl2ext_angle.h
index bc56c149faf..ed9612f85bc 100644
--- a/chromium/third_party/angle/include/GLES2/gl2ext_angle.h
+++ b/chromium/third_party/angle/include/GLES2/gl2ext_angle.h
@@ -510,6 +510,11 @@ GL_APICALL void GL_APIENTRY glImportSemaphoreZirconHandleANGLE(GLuint memory,
#endif
#endif /* GL_ANGLE_semaphore_fuchsia */
+#ifndef GL_CHROMIUM_texture_filtering_hint
+#define GL_CHROMIUM_texture_filtering_hint
+#define GL_TEXTURE_FILTERING_HINT_CHROMIUM 0x8AF0
+#endif /* GL_CHROMIUM_texture_filtering_hint */
+
// clang-format on
#endif // INCLUDE_GLES2_GL2EXT_ANGLE_H_
diff --git a/chromium/third_party/angle/include/GLSLANG/ShaderLang.h b/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
index 92bb2e20cbf..ca16898b2bc 100644
--- a/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
+++ b/chromium/third_party/angle/include/GLSLANG/ShaderLang.h
@@ -26,7 +26,7 @@
// Version number for shader translation API.
// It is incremented every time the API changes.
-#define ANGLE_SH_VERSION 229
+#define ANGLE_SH_VERSION 230
enum ShShaderSpec
{
@@ -399,6 +399,8 @@ struct ShBuiltInResources
int ANGLE_base_vertex_base_instance;
int WEBGL_video_texture;
int APPLE_clip_distance;
+ int OES_texture_cube_map_array;
+ int EXT_texture_cube_map_array;
// Set to 1 to enable replacing GL_EXT_draw_buffers #extension directives
// with GL_NV_draw_buffers in ESSL output. This flag can be used to emulate
diff --git a/chromium/third_party/angle/include/GLSLANG/ShaderVars.h b/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
index 477d2d299da..9911546b90d 100644
--- a/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
+++ b/chromium/third_party/angle/include/GLSLANG/ShaderVars.h
@@ -120,6 +120,10 @@ struct ShaderVariable
const ShaderVariable **leafVar,
std::string *originalFullName) const;
+ // Find the child field which matches 'fullName' == var.name + "." + field.name.
+ // Return nullptr if not found.
+ const sh::ShaderVariable *findField(const std::string &fullName, uint32_t *fieldIndexOut) const;
+
bool isBuiltIn() const;
bool isEmulatedBuiltIn() const;
diff --git a/chromium/third_party/angle/include/platform/FeaturesGL.h b/chromium/third_party/angle/include/platform/FeaturesGL.h
index 4c7595bb428..403b733957f 100644
--- a/chromium/third_party/angle/include/platform/FeaturesGL.h
+++ b/chromium/third_party/angle/include/platform/FeaturesGL.h
@@ -436,6 +436,34 @@ struct FeaturesGL : FeatureSetBase
Feature disableSemaphoreFd = {"disable_semaphore_fd", FeatureCategory::OpenGLWorkarounds,
"Disable GL_EXT_semaphore_fd extension", &members,
"https://crbug.com/1046462"};
+
+ // GL_EXT_disjoint_timer_query doesn't work properly with Linux VMWare drivers.
+ Feature disableTimestampQueries = {
+ "disable_timestamp_queries", FeatureCategory::OpenGLWorkarounds,
+ "Disable GL_EXT_disjoint_timer_query extension", &members, "https://crbug.com/811661"};
+
+ // Some drivers use linear blending when generating mipmaps for sRGB textures. Work around this
+ // by generating mipmaps in a linear texture and copying back to sRGB.
+ Feature encodeAndDecodeSRGBForGenerateMipmap = {
+ "decode_encode_srgb_for_generatemipmap", FeatureCategory::OpenGLWorkarounds,
+ "Decode and encode before generateMipmap for srgb format textures.", &members,
+ "http://anglebug.com/4646"};
+
+ Feature emulateCopyTexImage2DFromRenderbuffers = {
+ "emulate_copyteximage2d_from_renderbuffers", FeatureCategory::OpenGLWorkarounds,
+ "CopyTexImage2D spuriously returns errors on iOS when copying from renderbuffers.",
+ &members, "https://anglebug.com/4674"};
+
+ Feature disableGPUSwitchingSupport = {
+ "disable_gpu_switching_support", FeatureCategory::OpenGLWorkarounds,
+ "Disable GPU switching support (use only the low-power GPU) on older MacBook Pros.",
+ &members, "https://crbug.com/1091824"};
+
+ // KHR_parallel_shader_compile fails TSAN on Linux, so we avoid using it with this workaround.
+ Feature disableNativeParallelCompile = {
+ "disable_native_parallel_compile", FeatureCategory::OpenGLWorkarounds,
+ "Do not use native KHR_parallel_shader_compile even when available.", &members,
+ "http://crbug.com/1094869"};
};
inline FeaturesGL::FeaturesGL() = default;
diff --git a/chromium/third_party/angle/include/platform/FeaturesVk.h b/chromium/third_party/angle/include/platform/FeaturesVk.h
index 10457ba2cfc..fedca40886b 100644
--- a/chromium/third_party/angle/include/platform/FeaturesVk.h
+++ b/chromium/third_party/angle/include/platform/FeaturesVk.h
@@ -108,6 +108,12 @@ struct FeaturesVk : FeatureSetBase
"VkDevice supports the VK_ANDROID_external_memory_android_hardware_buffer extension",
&members};
+ // Whether the VkDevice supports the VK_GGP_frame_token extension, on which
+ // the EGL_ANGLE_swap_with_frame_token extension can be layered.
+ Feature supportsGGPFrameToken = {"supports_ggp_frame_token", FeatureCategory::VulkanFeatures,
+ "VkDevice supports the VK_GGP_frame_token extension",
+ &members};
+
// Whether the VkDevice supports the VK_KHR_external_memory_fd extension, on which the
// GL_EXT_memory_object_fd extension can be layered.
Feature supportsExternalMemoryFd = {
@@ -120,6 +126,10 @@ struct FeaturesVk : FeatureSetBase
"supports_external_memory_fuchsia", FeatureCategory::VulkanFeatures,
"VkDevice supports the VK_FUCHSIA_external_memory extension", &members};
+ angle::Feature supportsFilteringPrecision = {
+ "supports_filtering_precision_google", FeatureCategory::VulkanFeatures,
+ "VkDevice supports the VK_GOOGLE_sampler_filtering_precision extension", &members};
+
// Whether the VkDevice supports the VK_KHR_external_fence_capabilities extension.
Feature supportsExternalFenceCapabilities = {
"supports_external_fence_capabilities", FeatureCategory::VulkanFeatures,
@@ -304,6 +314,22 @@ struct FeaturesVk : FeatureSetBase
Feature supportDepthStencilRenderingFeedbackLoops = {
"support_depth_stencil_rendering_feedback_loops", FeatureCategory::VulkanFeatures,
"Suport depth/stencil rendering feedback loops", &members, "http://anglebug.com/4490"};
+
+ // Desktop (at least NVIDIA) drivers prefer combining barriers into one vkCmdPipelineBarrier
+ // call over issuing multiple barrier calls with fine grained dependency information to have
+ // better performance. http://anglebug.com/4633
+ Feature preferAggregateBarrierCalls = {
+ "prefer_aggregate_barrier_calls", FeatureCategory::VulkanWorkarounds,
+ "Single barrier call is preferred over multiple calls with "
+ "fine grained pipeline stage dependency information",
+ &members, "http://anglebug.com/4633"};
+
+ // Enable parallel thread that processes and submits vulkan command buffers.
+ // Currently off by default to enable testing.
+ Feature enableCommandProcessingThread = {
+ "enable_command_processing_thread", FeatureCategory::VulkanFeatures,
+ "Enable parallel processing and submission of Vulkan commands in worker thread", &members,
+ "http://anglebug.com/4324"};
};
inline FeaturesVk::FeaturesVk() = default;
diff --git a/chromium/third_party/angle/include/platform/Platform.h b/chromium/third_party/angle/include/platform/Platform.h
index 1316740085c..2c9537ed46b 100644
--- a/chromium/third_party/angle/include/platform/Platform.h
+++ b/chromium/third_party/angle/include/platform/Platform.h
@@ -1,333 +1,10 @@
//
-// Copyright 2015 The ANGLE Project Authors. All rights reserved.
+// 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.
-
-// Platform.h: The public interface ANGLE exposes to the API layer, for
-// doing platform-specific tasks like gathering data, or for tracing.
-
-#ifndef ANGLE_PLATFORM_H
-#define ANGLE_PLATFORM_H
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <array>
-
-#define EGL_PLATFORM_ANGLE_PLATFORM_METHODS_ANGLEX 0x3482
-
-#if !defined(ANGLE_PLATFORM_EXPORT)
-# if defined(_WIN32)
-# if !defined(LIBANGLE_IMPLEMENTATION)
-# define ANGLE_PLATFORM_EXPORT __declspec(dllimport)
-# else
-# define ANGLE_PLATFORM_EXPORT __declspec(dllexport)
-# endif
-# elif defined(__GNUC__) || defined(__clang__)
-# define ANGLE_PLATFORM_EXPORT __attribute__((visibility("default")))
-# endif
-#endif
-#if !defined(ANGLE_PLATFORM_EXPORT)
-# define ANGLE_PLATFORM_EXPORT
-#endif
-
-#if defined(_WIN32)
-# define ANGLE_APIENTRY __stdcall
-#else
-# define ANGLE_APIENTRY
-#endif
-
-namespace angle
-{
-struct FeaturesD3D;
-struct FeaturesVk;
-struct FeaturesMtl;
-using TraceEventHandle = uint64_t;
-using EGLDisplayType = void *;
-struct PlatformMethods;
-
-// Use a C-like API to not trigger undefined calling behaviour.
-// Avoid using decltype here to work around sanitizer limitations.
-// TODO(jmadill): Use decltype here if/when UBSAN is fixed.
-
-// System --------------------------------------------------------------
-
-// Wall clock time in seconds since the epoch.
-// TODO(jmadill): investigate using an ANGLE internal time library
-using CurrentTimeFunc = double (*)(PlatformMethods *platform);
-inline double DefaultCurrentTime(PlatformMethods *platform)
-{
- return 0.0;
-}
-
-// Monotonically increasing time in seconds from an arbitrary fixed point in the past.
-// This function is expected to return at least millisecond-precision values. For this reason,
-// it is recommended that the fixed point be no further in the past than the epoch.
-using MonotonicallyIncreasingTimeFunc = double (*)(PlatformMethods *platform);
-inline double DefaultMonotonicallyIncreasingTime(PlatformMethods *platform)
-{
- return 0.0;
-}
-
-// Logging ------------------------------------------------------------
-
-// Log an error message within the platform implementation.
-using LogErrorFunc = void (*)(PlatformMethods *platform, const char *errorMessage);
-inline void DefaultLogError(PlatformMethods *platform, const char *errorMessage) {}
-
-// Log a warning message within the platform implementation.
-using LogWarningFunc = void (*)(PlatformMethods *platform, const char *warningMessage);
-inline void DefaultLogWarning(PlatformMethods *platform, const char *warningMessage) {}
-
-// Log an info message within the platform implementation.
-using LogInfoFunc = void (*)(PlatformMethods *platform, const char *infoMessage);
-inline void DefaultLogInfo(PlatformMethods *platform, const char *infoMessage) {}
-
-// Tracing --------
-
-// Get a pointer to the enabled state of the given trace category. The
-// embedder can dynamically change the enabled state as trace event
-// recording is started and stopped by the application. Only long-lived
-// literal strings should be given as the category name. The implementation
-// expects the returned pointer to be held permanently in a local static. If
-// the unsigned char is non-zero, tracing is enabled. If tracing is enabled,
-// addTraceEvent is expected to be called by the trace event macros.
-using GetTraceCategoryEnabledFlagFunc = const unsigned char *(*)(PlatformMethods *platform,
- const char *categoryName);
-inline const unsigned char *DefaultGetTraceCategoryEnabledFlag(PlatformMethods *platform,
- const char *categoryName)
-{
- return nullptr;
-}
-
//
-// Add a trace event to the platform tracing system. Depending on the actual
-// enabled state, this event may be recorded or dropped.
-// - phase specifies the type of event:
-// - BEGIN ('B'): Marks the beginning of a scoped event.
-// - END ('E'): Marks the end of a scoped event.
-// - COMPLETE ('X'): Marks the beginning of a scoped event, but doesn't
-// need a matching END event. Instead, at the end of the scope,
-// updateTraceEventDuration() must be called with the TraceEventHandle
-// returned from addTraceEvent().
-// - INSTANT ('I'): Standalone, instantaneous event.
-// - START ('S'): Marks the beginning of an asynchronous event (the end
-// event can occur in a different scope or thread). The id parameter is
-// used to match START/FINISH pairs.
-// - FINISH ('F'): Marks the end of an asynchronous event.
-// - COUNTER ('C'): Used to trace integer quantities that change over
-// time. The argument values are expected to be of type int.
-// - METADATA ('M'): Reserved for internal use.
-// - categoryEnabled is the pointer returned by getTraceCategoryEnabledFlag.
-// - name is the name of the event. Also used to match BEGIN/END and
-// START/FINISH pairs.
-// - id optionally allows events of the same name to be distinguished from
-// each other. For example, to trace the construction and destruction of
-// objects, specify the pointer as the id parameter.
-// - timestamp should be a time value returned from monotonicallyIncreasingTime.
-// - numArgs specifies the number of elements in argNames, argTypes, and
-// argValues.
-// - argNames is the array of argument names. Use long-lived literal strings
-// or specify the COPY flag.
-// - argTypes is the array of argument types:
-// - BOOL (1): bool
-// - UINT (2): unsigned long long
-// - INT (3): long long
-// - DOUBLE (4): double
-// - POINTER (5): void*
-// - STRING (6): char* (long-lived null-terminated char* string)
-// - COPY_STRING (7): char* (temporary null-terminated char* string)
-// - CONVERTABLE (8): WebConvertableToTraceFormat
-// - argValues is the array of argument values. Each value is the unsigned
-// long long member of a union of all supported types.
-// - flags can be 0 or one or more of the following, ORed together:
-// - COPY (0x1): treat all strings (name, argNames and argValues of type
-// string) as temporary so that they will be copied by addTraceEvent.
-// - HAS_ID (0x2): use the id argument to uniquely identify the event for
-// matching with other events of the same name.
-// - MANGLE_ID (0x4): specify this flag if the id parameter is the value
-// of a pointer.
-using AddTraceEventFunc = angle::TraceEventHandle (*)(PlatformMethods *platform,
- char phase,
- const unsigned char *categoryEnabledFlag,
- const char *name,
- unsigned long long id,
- double timestamp,
- int numArgs,
- const char **argNames,
- const unsigned char *argTypes,
- const unsigned long long *argValues,
- unsigned char flags);
-inline angle::TraceEventHandle DefaultAddTraceEvent(PlatformMethods *platform,
- char phase,
- const unsigned char *categoryEnabledFlag,
- const char *name,
- unsigned long long id,
- double timestamp,
- int numArgs,
- const char **argNames,
- const unsigned char *argTypes,
- const unsigned long long *argValues,
- unsigned char flags)
-{
- return 0;
-}
-
-// Set the duration field of a COMPLETE trace event.
-using UpdateTraceEventDurationFunc = void (*)(PlatformMethods *platform,
- const unsigned char *categoryEnabledFlag,
- const char *name,
- angle::TraceEventHandle eventHandle);
-inline void DefaultUpdateTraceEventDuration(PlatformMethods *platform,
- const unsigned char *categoryEnabledFlag,
- const char *name,
- angle::TraceEventHandle eventHandle)
-{}
-
-// Callbacks for reporting histogram data.
-// CustomCounts histogram has exponential bucket sizes, so that min=1, max=1000000, bucketCount=50
-// would do.
-using HistogramCustomCountsFunc = void (*)(PlatformMethods *platform,
- const char *name,
- int sample,
- int min,
- int max,
- int bucketCount);
-inline void DefaultHistogramCustomCounts(PlatformMethods *platform,
- const char *name,
- int sample,
- int min,
- int max,
- int bucketCount)
-{}
-// Enumeration histogram buckets are linear, boundaryValue should be larger than any possible sample
-// value.
-using HistogramEnumerationFunc = void (*)(PlatformMethods *platform,
- const char *name,
- int sample,
- int boundaryValue);
-inline void DefaultHistogramEnumeration(PlatformMethods *platform,
- const char *name,
- int sample,
- int boundaryValue)
-{}
-// Unlike enumeration histograms, sparse histograms only allocate memory for non-empty buckets.
-using HistogramSparseFunc = void (*)(PlatformMethods *platform, const char *name, int sample);
-inline void DefaultHistogramSparse(PlatformMethods *platform, const char *name, int sample) {}
-// Boolean histograms track two-state variables.
-using HistogramBooleanFunc = void (*)(PlatformMethods *platform, const char *name, bool sample);
-inline void DefaultHistogramBoolean(PlatformMethods *platform, const char *name, bool sample) {}
-
-// Allows us to programatically override ANGLE's default workarounds for testing purposes.
-using OverrideWorkaroundsD3DFunc = void (*)(PlatformMethods *platform,
- angle::FeaturesD3D *featuresD3D);
-inline void DefaultOverrideWorkaroundsD3D(PlatformMethods *platform,
- angle::FeaturesD3D *featuresD3D)
-{}
-
-using OverrideFeaturesVkFunc = void (*)(PlatformMethods *platform,
- angle::FeaturesVk *featuresVulkan);
-inline void DefaultOverrideFeaturesVk(PlatformMethods *platform, angle::FeaturesVk *featuresVulkan)
-{}
-
-using OverrideFeaturesMtlFunc = void (*)(PlatformMethods *platform,
- angle::FeaturesMtl *featuresMetal);
-inline void DefaultOverrideFeaturesMtl(PlatformMethods *platform, angle::FeaturesMtl *featuresMetal)
-{}
-
-// Callback on a successful program link with the program binary. Can be used to store
-// shaders to disk. Keys are a 160-bit SHA-1 hash.
-using ProgramKeyType = std::array<uint8_t, 20>;
-using CacheProgramFunc = void (*)(PlatformMethods *platform,
- const ProgramKeyType &key,
- size_t programSize,
- const uint8_t *programBytes);
-inline void DefaultCacheProgram(PlatformMethods *platform,
- const ProgramKeyType &key,
- size_t programSize,
- const uint8_t *programBytes)
-{}
-
-// Platform methods are enumerated here once.
-#define ANGLE_PLATFORM_OP(OP) \
- OP(currentTime, CurrentTime) \
- OP(monotonicallyIncreasingTime, MonotonicallyIncreasingTime) \
- OP(logError, LogError) \
- OP(logWarning, LogWarning) \
- OP(logInfo, LogInfo) \
- OP(getTraceCategoryEnabledFlag, GetTraceCategoryEnabledFlag) \
- OP(addTraceEvent, AddTraceEvent) \
- OP(updateTraceEventDuration, UpdateTraceEventDuration) \
- OP(histogramCustomCounts, HistogramCustomCounts) \
- OP(histogramEnumeration, HistogramEnumeration) \
- OP(histogramSparse, HistogramSparse) \
- OP(histogramBoolean, HistogramBoolean) \
- OP(overrideWorkaroundsD3D, OverrideWorkaroundsD3D) \
- OP(overrideFeaturesVk, OverrideFeaturesVk) \
- OP(cacheProgram, CacheProgram) \
- OP(overrideFeaturesMtl, OverrideFeaturesMtl)
-
-#define ANGLE_PLATFORM_METHOD_DEF(Name, CapsName) CapsName##Func Name = Default##CapsName;
-
-struct ANGLE_PLATFORM_EXPORT PlatformMethods
-{
- inline PlatformMethods();
-
- // User data pointer for any implementation specific members. Put it at the start of the
- // platform structure so it doesn't become overwritten if one version of the platform
- // adds or removes new members.
- void *context = 0;
-
- ANGLE_PLATFORM_OP(ANGLE_PLATFORM_METHOD_DEF)
-};
-
-inline PlatformMethods::PlatformMethods() = default;
-
-#undef ANGLE_PLATFORM_METHOD_DEF
-
-// Subtract one to account for the context pointer.
-constexpr unsigned int g_NumPlatformMethods = (sizeof(PlatformMethods) / sizeof(uintptr_t)) - 1;
-
-#define ANGLE_PLATFORM_METHOD_STRING(Name) #Name
-#define ANGLE_PLATFORM_METHOD_STRING2(Name, CapsName) ANGLE_PLATFORM_METHOD_STRING(Name),
-
-constexpr const char *const g_PlatformMethodNames[g_NumPlatformMethods] = {
- ANGLE_PLATFORM_OP(ANGLE_PLATFORM_METHOD_STRING2)};
-
-#undef ANGLE_PLATFORM_METHOD_STRING2
-#undef ANGLE_PLATFORM_METHOD_STRING
-
-} // namespace angle
-
-extern "C" {
-
-// Gets the platform methods on the passed-in EGL display. If the method name signature does not
-// match the compiled signature for this ANGLE, false is returned. On success true is returned.
-// The application should set any platform methods it cares about on the returned pointer.
-// If display is not valid, behaviour is undefined.
-
-ANGLE_PLATFORM_EXPORT bool ANGLE_APIENTRY ANGLEGetDisplayPlatform(angle::EGLDisplayType display,
- const char *const methodNames[],
- unsigned int methodNameCount,
- void *context,
- void *platformMethodsOut);
-
-// Sets the platform methods back to their defaults.
-// If display is not valid, behaviour is undefined.
-ANGLE_PLATFORM_EXPORT void ANGLE_APIENTRY ANGLEResetDisplayPlatform(angle::EGLDisplayType display);
-
-} // extern "C"
-
-namespace angle
-{
-typedef bool(ANGLE_APIENTRY *GetDisplayPlatformFunc)(angle::EGLDisplayType,
- const char *const *,
- unsigned int,
- void *,
- void *);
-typedef void(ANGLE_APIENTRY *ResetDisplayPlatformFunc)(angle::EGLDisplayType);
-} // namespace angle
-
-// This function is not exported
-angle::PlatformMethods *ANGLEPlatformCurrent();
+// Platform.h: Simple forwarding header to PlatformMethods.h.
+// Ideally we can remove this file at some point since "Platform.h" is overloaded.
+//
-#endif // ANGLE_PLATFORM_H
+#include "PlatformMethods.h"
diff --git a/chromium/third_party/angle/include/platform/PlatformMethods.h b/chromium/third_party/angle/include/platform/PlatformMethods.h
new file mode 100644
index 00000000000..4697a87e458
--- /dev/null
+++ b/chromium/third_party/angle/include/platform/PlatformMethods.h
@@ -0,0 +1,339 @@
+//
+// 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.
+
+// PlatformMethods.h: The public interface ANGLE exposes to the API layer, for
+// doing platform-specific tasks like gathering data, or for tracing.
+
+#ifndef ANGLE_PLATFORMMETHODS_H
+#define ANGLE_PLATFORMMETHODS_H
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <array>
+
+#define EGL_PLATFORM_ANGLE_PLATFORM_METHODS_ANGLEX 0x3482
+
+#if !defined(ANGLE_PLATFORM_EXPORT)
+# if defined(_WIN32)
+# if !defined(LIBANGLE_IMPLEMENTATION)
+# define ANGLE_PLATFORM_EXPORT __declspec(dllimport)
+# else
+# define ANGLE_PLATFORM_EXPORT __declspec(dllexport)
+# endif
+# elif defined(__GNUC__) || defined(__clang__)
+# define ANGLE_PLATFORM_EXPORT __attribute__((visibility("default")))
+# endif
+#endif
+#if !defined(ANGLE_PLATFORM_EXPORT)
+# define ANGLE_PLATFORM_EXPORT
+#endif
+
+#if defined(_WIN32)
+# define ANGLE_APIENTRY __stdcall
+#else
+# define ANGLE_APIENTRY
+#endif
+
+namespace angle
+{
+struct FeaturesD3D;
+struct FeaturesVk;
+struct FeaturesMtl;
+using TraceEventHandle = uint64_t;
+using EGLDisplayType = void *;
+struct PlatformMethods;
+
+// Use a C-like API to not trigger undefined calling behaviour.
+// Avoid using decltype here to work around sanitizer limitations.
+// TODO(jmadill): Use decltype here if/when UBSAN is fixed.
+
+// System --------------------------------------------------------------
+
+// Wall clock time in seconds since the epoch.
+// TODO(jmadill): investigate using an ANGLE internal time library
+using CurrentTimeFunc = double (*)(PlatformMethods *platform);
+inline double DefaultCurrentTime(PlatformMethods *platform)
+{
+ return 0.0;
+}
+
+// Monotonically increasing time in seconds from an arbitrary fixed point in the past.
+// This function is expected to return at least millisecond-precision values. For this reason,
+// it is recommended that the fixed point be no further in the past than the epoch.
+using MonotonicallyIncreasingTimeFunc = double (*)(PlatformMethods *platform);
+inline double DefaultMonotonicallyIncreasingTime(PlatformMethods *platform)
+{
+ return 0.0;
+}
+
+// Logging ------------------------------------------------------------
+
+// Log an error message within the platform implementation.
+using LogErrorFunc = void (*)(PlatformMethods *platform, const char *errorMessage);
+inline void DefaultLogError(PlatformMethods *platform, const char *errorMessage) {}
+
+// Log a warning message within the platform implementation.
+using LogWarningFunc = void (*)(PlatformMethods *platform, const char *warningMessage);
+inline void DefaultLogWarning(PlatformMethods *platform, const char *warningMessage) {}
+
+// Log an info message within the platform implementation.
+using LogInfoFunc = void (*)(PlatformMethods *platform, const char *infoMessage);
+inline void DefaultLogInfo(PlatformMethods *platform, const char *infoMessage) {}
+
+// Tracing --------
+
+// Get a pointer to the enabled state of the given trace category. The
+// embedder can dynamically change the enabled state as trace event
+// recording is started and stopped by the application. Only long-lived
+// literal strings should be given as the category name. The implementation
+// expects the returned pointer to be held permanently in a local static. If
+// the unsigned char is non-zero, tracing is enabled. If tracing is enabled,
+// addTraceEvent is expected to be called by the trace event macros.
+using GetTraceCategoryEnabledFlagFunc = const unsigned char *(*)(PlatformMethods *platform,
+ const char *categoryName);
+inline const unsigned char *DefaultGetTraceCategoryEnabledFlag(PlatformMethods *platform,
+ const char *categoryName)
+{
+ return nullptr;
+}
+
+//
+// Add a trace event to the platform tracing system. Depending on the actual
+// enabled state, this event may be recorded or dropped.
+// - phase specifies the type of event:
+// - BEGIN ('B'): Marks the beginning of a scoped event.
+// - END ('E'): Marks the end of a scoped event.
+// - COMPLETE ('X'): Marks the beginning of a scoped event, but doesn't
+// need a matching END event. Instead, at the end of the scope,
+// updateTraceEventDuration() must be called with the TraceEventHandle
+// returned from addTraceEvent().
+// - INSTANT ('I'): Standalone, instantaneous event.
+// - START ('S'): Marks the beginning of an asynchronous event (the end
+// event can occur in a different scope or thread). The id parameter is
+// used to match START/FINISH pairs.
+// - FINISH ('F'): Marks the end of an asynchronous event.
+// - COUNTER ('C'): Used to trace integer quantities that change over
+// time. The argument values are expected to be of type int.
+// - METADATA ('M'): Reserved for internal use.
+// - categoryEnabled is the pointer returned by getTraceCategoryEnabledFlag.
+// - name is the name of the event. Also used to match BEGIN/END and
+// START/FINISH pairs.
+// - id optionally allows events of the same name to be distinguished from
+// each other. For example, to trace the construction and destruction of
+// objects, specify the pointer as the id parameter.
+// - timestamp should be a time value returned from monotonicallyIncreasingTime.
+// - numArgs specifies the number of elements in argNames, argTypes, and
+// argValues.
+// - argNames is the array of argument names. Use long-lived literal strings
+// or specify the COPY flag.
+// - argTypes is the array of argument types:
+// - BOOL (1): bool
+// - UINT (2): unsigned long long
+// - INT (3): long long
+// - DOUBLE (4): double
+// - POINTER (5): void*
+// - STRING (6): char* (long-lived null-terminated char* string)
+// - COPY_STRING (7): char* (temporary null-terminated char* string)
+// - CONVERTABLE (8): WebConvertableToTraceFormat
+// - argValues is the array of argument values. Each value is the unsigned
+// long long member of a union of all supported types.
+// - flags can be 0 or one or more of the following, ORed together:
+// - COPY (0x1): treat all strings (name, argNames and argValues of type
+// string) as temporary so that they will be copied by addTraceEvent.
+// - HAS_ID (0x2): use the id argument to uniquely identify the event for
+// matching with other events of the same name.
+// - MANGLE_ID (0x4): specify this flag if the id parameter is the value
+// of a pointer.
+using AddTraceEventFunc = angle::TraceEventHandle (*)(PlatformMethods *platform,
+ char phase,
+ const unsigned char *categoryEnabledFlag,
+ const char *name,
+ unsigned long long id,
+ double timestamp,
+ int numArgs,
+ const char **argNames,
+ const unsigned char *argTypes,
+ const unsigned long long *argValues,
+ unsigned char flags);
+inline angle::TraceEventHandle DefaultAddTraceEvent(PlatformMethods *platform,
+ char phase,
+ const unsigned char *categoryEnabledFlag,
+ const char *name,
+ unsigned long long id,
+ double timestamp,
+ int numArgs,
+ const char **argNames,
+ const unsigned char *argTypes,
+ const unsigned long long *argValues,
+ unsigned char flags)
+{
+ return 0;
+}
+
+// Set the duration field of a COMPLETE trace event.
+using UpdateTraceEventDurationFunc = void (*)(PlatformMethods *platform,
+ const unsigned char *categoryEnabledFlag,
+ const char *name,
+ angle::TraceEventHandle eventHandle);
+inline void DefaultUpdateTraceEventDuration(PlatformMethods *platform,
+ const unsigned char *categoryEnabledFlag,
+ const char *name,
+ angle::TraceEventHandle eventHandle)
+{}
+
+// Callbacks for reporting histogram data.
+// CustomCounts histogram has exponential bucket sizes, so that min=1, max=1000000, bucketCount=50
+// would do.
+using HistogramCustomCountsFunc = void (*)(PlatformMethods *platform,
+ const char *name,
+ int sample,
+ int min,
+ int max,
+ int bucketCount);
+inline void DefaultHistogramCustomCounts(PlatformMethods *platform,
+ const char *name,
+ int sample,
+ int min,
+ int max,
+ int bucketCount)
+{}
+// Enumeration histogram buckets are linear, boundaryValue should be larger than any possible sample
+// value.
+using HistogramEnumerationFunc = void (*)(PlatformMethods *platform,
+ const char *name,
+ int sample,
+ int boundaryValue);
+inline void DefaultHistogramEnumeration(PlatformMethods *platform,
+ const char *name,
+ int sample,
+ int boundaryValue)
+{}
+// Unlike enumeration histograms, sparse histograms only allocate memory for non-empty buckets.
+using HistogramSparseFunc = void (*)(PlatformMethods *platform, const char *name, int sample);
+inline void DefaultHistogramSparse(PlatformMethods *platform, const char *name, int sample) {}
+// Boolean histograms track two-state variables.
+using HistogramBooleanFunc = void (*)(PlatformMethods *platform, const char *name, bool sample);
+inline void DefaultHistogramBoolean(PlatformMethods *platform, const char *name, bool sample) {}
+
+// Allows us to programatically override ANGLE's default workarounds for testing purposes.
+using OverrideWorkaroundsD3DFunc = void (*)(PlatformMethods *platform,
+ angle::FeaturesD3D *featuresD3D);
+inline void DefaultOverrideWorkaroundsD3D(PlatformMethods *platform,
+ angle::FeaturesD3D *featuresD3D)
+{}
+
+using OverrideFeaturesVkFunc = void (*)(PlatformMethods *platform,
+ angle::FeaturesVk *featuresVulkan);
+inline void DefaultOverrideFeaturesVk(PlatformMethods *platform, angle::FeaturesVk *featuresVulkan)
+{}
+
+using OverrideFeaturesMtlFunc = void (*)(PlatformMethods *platform,
+ angle::FeaturesMtl *featuresMetal);
+inline void DefaultOverrideFeaturesMtl(PlatformMethods *platform, angle::FeaturesMtl *featuresMetal)
+{}
+
+// Callback on a successful program link with the program binary. Can be used to store
+// shaders to disk. Keys are a 160-bit SHA-1 hash.
+using ProgramKeyType = std::array<uint8_t, 20>;
+using CacheProgramFunc = void (*)(PlatformMethods *platform,
+ const ProgramKeyType &key,
+ size_t programSize,
+ const uint8_t *programBytes);
+inline void DefaultCacheProgram(PlatformMethods *platform,
+ const ProgramKeyType &key,
+ size_t programSize,
+ const uint8_t *programBytes)
+{}
+
+using PostWorkerTaskCallback = void (*)(void *userData);
+using PostWorkerTaskFunc = void (*)(PlatformMethods *platform,
+ PostWorkerTaskCallback callback,
+ void *userData);
+constexpr PostWorkerTaskFunc DefaultPostWorkerTask = nullptr;
+
+// Platform methods are enumerated here once.
+#define ANGLE_PLATFORM_OP(OP) \
+ OP(currentTime, CurrentTime) \
+ OP(monotonicallyIncreasingTime, MonotonicallyIncreasingTime) \
+ OP(logError, LogError) \
+ OP(logWarning, LogWarning) \
+ OP(logInfo, LogInfo) \
+ OP(getTraceCategoryEnabledFlag, GetTraceCategoryEnabledFlag) \
+ OP(addTraceEvent, AddTraceEvent) \
+ OP(updateTraceEventDuration, UpdateTraceEventDuration) \
+ OP(histogramCustomCounts, HistogramCustomCounts) \
+ OP(histogramEnumeration, HistogramEnumeration) \
+ OP(histogramSparse, HistogramSparse) \
+ OP(histogramBoolean, HistogramBoolean) \
+ OP(overrideWorkaroundsD3D, OverrideWorkaroundsD3D) \
+ OP(overrideFeaturesVk, OverrideFeaturesVk) \
+ OP(cacheProgram, CacheProgram) \
+ OP(overrideFeaturesMtl, OverrideFeaturesMtl) \
+ OP(postWorkerTask, PostWorkerTask)
+
+#define ANGLE_PLATFORM_METHOD_DEF(Name, CapsName) CapsName##Func Name = Default##CapsName;
+
+struct ANGLE_PLATFORM_EXPORT PlatformMethods
+{
+ inline PlatformMethods();
+
+ // User data pointer for any implementation specific members. Put it at the start of the
+ // platform structure so it doesn't become overwritten if one version of the platform
+ // adds or removes new members.
+ void *context = 0;
+
+ ANGLE_PLATFORM_OP(ANGLE_PLATFORM_METHOD_DEF)
+};
+
+inline PlatformMethods::PlatformMethods() = default;
+
+#undef ANGLE_PLATFORM_METHOD_DEF
+
+// Subtract one to account for the context pointer.
+constexpr unsigned int g_NumPlatformMethods = (sizeof(PlatformMethods) / sizeof(uintptr_t)) - 1;
+
+#define ANGLE_PLATFORM_METHOD_STRING(Name) #Name
+#define ANGLE_PLATFORM_METHOD_STRING2(Name, CapsName) ANGLE_PLATFORM_METHOD_STRING(Name),
+
+constexpr const char *const g_PlatformMethodNames[g_NumPlatformMethods] = {
+ ANGLE_PLATFORM_OP(ANGLE_PLATFORM_METHOD_STRING2)};
+
+#undef ANGLE_PLATFORM_METHOD_STRING2
+#undef ANGLE_PLATFORM_METHOD_STRING
+
+} // namespace angle
+
+extern "C" {
+
+// Gets the platform methods on the passed-in EGL display. If the method name signature does not
+// match the compiled signature for this ANGLE, false is returned. On success true is returned.
+// The application should set any platform methods it cares about on the returned pointer.
+// If display is not valid, behaviour is undefined.
+
+ANGLE_PLATFORM_EXPORT bool ANGLE_APIENTRY ANGLEGetDisplayPlatform(angle::EGLDisplayType display,
+ const char *const methodNames[],
+ unsigned int methodNameCount,
+ void *context,
+ void *platformMethodsOut);
+
+// Sets the platform methods back to their defaults.
+// If display is not valid, behaviour is undefined.
+ANGLE_PLATFORM_EXPORT void ANGLE_APIENTRY ANGLEResetDisplayPlatform(angle::EGLDisplayType display);
+} // extern "C"
+
+namespace angle
+{
+typedef bool(ANGLE_APIENTRY *GetDisplayPlatformFunc)(angle::EGLDisplayType,
+ const char *const *,
+ unsigned int,
+ void *,
+ void *);
+typedef void(ANGLE_APIENTRY *ResetDisplayPlatformFunc)(angle::EGLDisplayType);
+} // namespace angle
+
+// This function is not exported
+angle::PlatformMethods *ANGLEPlatformCurrent();
+
+#endif // ANGLE_PLATFORMMETHODS_H