Changeset 267520 in webkit


Ignore:
Timestamp:
Sep 24, 2020 12:01:36 AM (4 years ago)
Author:
commit-queue@webkit.org
Message:

REGRESSION: Textures Fail to Render in WebGL from HLS Stream [iOS 14]
https://bugs.webkit.org/show_bug.cgi?id=215908
<rdar://problem/68000962>

Patch by Kimmo Kinnunen <kkinnunen@apple.com> on 2020-09-24
Reviewed by Dean Jackson.

Disable ANGLE workers until EAGL implementation is more complete.
Current implementation fails to compile any shader, since the
compilation happens in the worker thread and worker EAGL context
which does not use the same sharegroup as the main context.
The shader objects are created in the main context but the shader
source setting and compilation happens in the worker context.
EAGL needs a flush between state changes, and adding that
correctly is a bigger change to be done later.

Use sized formats when calling [EAGLContext -texImageIOSurface]
from EGL_ANGLE_iosurface_client_buffer code. The texImageIOSurface
accepts parameters with glTexImage2D logic. On ES3, some of the
internal formats must be sized formats. The EAGLContext instantiated
by ANGLE is ES3, even if the ANGLE context would be ES2.

No tests added since this should be caught with the many video
related tests. It's unclear why this is not the case -- at
least on real hw. This is to be investigated later, too.

  • src/libANGLE/renderer/driver_utils.h:

(rx::IsIOS):

  • src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
  • src/libANGLE/renderer/gl/renderergl_utils.cpp:

(rx::nativegl_gl::InitializeFeatures):

Location:
trunk/Source/ThirdParty/ANGLE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/ThirdParty/ANGLE/ChangeLog

    r266953 r267520  
     12020-09-24  Kimmo Kinnunen  <kkinnunen@apple.com>
     2
     3        REGRESSION: Textures Fail to Render in WebGL from HLS Stream [iOS 14]
     4        https://bugs.webkit.org/show_bug.cgi?id=215908
     5        <rdar://problem/68000962>
     6
     7        Reviewed by Dean Jackson.
     8
     9        Disable ANGLE workers until EAGL implementation is more complete.
     10        Current implementation fails to compile any shader, since the
     11        compilation happens in the worker thread and worker EAGL context
     12        which does not use the same sharegroup as the main context.
     13        The shader objects are created in the main context but the shader
     14        source setting and compilation happens in the worker context.
     15        EAGL needs a flush between state changes, and adding that
     16        correctly is a bigger change to be done later.
     17
     18        Use sized formats when calling [EAGLContext -texImageIOSurface]
     19        from EGL_ANGLE_iosurface_client_buffer code. The texImageIOSurface
     20        accepts parameters with glTexImage2D logic. On ES3, some of the
     21        internal formats must be sized formats. The EAGLContext instantiated
     22        by ANGLE is ES3, even if the ANGLE context would be ES2.
     23
     24        No tests added since this should be caught with the many video
     25        related tests. It's unclear why this is not the case -- at
     26        least on real hw. This is to be investigated later, too.
     27
     28        * src/libANGLE/renderer/driver_utils.h:
     29        (rx::IsIOS):
     30        * src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm:
     31        * src/libANGLE/renderer/gl/renderergl_utils.cpp:
     32        (rx::nativegl_gl::InitializeFeatures):
     33
    1342020-09-11  James Darpinian  <jdarpinian@chromium.org>
    235
  • trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/driver_utils.h

    r265064 r267520  
    165165}
    166166
     167inline bool IsIOS()
     168{
     169#if defined(ANGLE_PLATFORM_IOS)
     170    return true;
     171#else
     172    return false;
     173#endif
     174}
    167175struct OSVersion
    168176{
  • trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/eagl/IOSurfaceSurfaceEAGL.mm

    r262036 r267520  
    4949
    5050static const IOSurfaceFormatInfo kIOSurfaceFormats[] = {
    51     {GL_RED,      GL_UNSIGNED_BYTE,  1, GL_RED,  GL_RED,  GL_UNSIGNED_BYTE },
    52     {GL_R16UI,    GL_UNSIGNED_SHORT, 2, GL_RED,  GL_RED,  GL_UNSIGNED_SHORT},
    53     {GL_RG,       GL_UNSIGNED_BYTE,  2, GL_RG,   GL_RG,   GL_UNSIGNED_BYTE },
     51    {GL_RED,      GL_UNSIGNED_BYTE,  1, GL_R8,  GL_RED,  GL_UNSIGNED_BYTE },
     52    {GL_R16UI,    GL_UNSIGNED_SHORT, 2, GL_R16UI, GL_RED_INTEGER,  GL_UNSIGNED_SHORT},
     53    {GL_RG,       GL_UNSIGNED_BYTE,  2, GL_RG8,  GL_RG,   GL_UNSIGNED_BYTE },
    5454    {GL_RGB,      GL_UNSIGNED_BYTE,  4, GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE },
    5555    {GL_BGRA_EXT, GL_UNSIGNED_BYTE,  4, GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE },
  • trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/renderergl_utils.cpp

    r265064 r267520  
    16621662    // crbug.com/922936
    16631663    ANGLE_FEATURE_CONDITION(features, disableWorkerContexts,
    1664                             (IsWindows() && (isIntel || isAMD)) || (IsLinux() && isNvidia));
     1664                            (IsWindows() && (isIntel || isAMD)) || (IsLinux() && isNvidia) || IsIOS());
    16651665
    16661666    bool limitMaxTextureSize = isIntel && IsLinux() && GetLinuxOSVersion() < OSVersion(5, 0, 0);
Note: See TracChangeset for help on using the changeset viewer.