[webkit-changes] [WebKit/WebKit] bb1da0: [ANGLE] Render pipeline descriptor missing casses ...

kpiddington noreply at github.com
Wed Oct 26 08:04:44 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: bb1da00b9ba878d228a5e9834a0767dbca2fee43
      https://github.com/WebKit/WebKit/commit/bb1da00b9ba878d228a5e9834a0767dbca2fee43
  Author: Kyle Piddington <kpiddington at apple.com>
  Date:   2022-10-26 (Wed, 26 Oct 2022)

  Changed paths:
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.h

  Log Message:
  -----------
  [ANGLE] Render pipeline descriptor missing casses GPU-Process crash
    https://bugs.webkit.org/show_bug.cgi?id=246777
    rdar://97847673

    Reviewed by Dean Jackson.

    Following on from https://bugs.webkit.org/show_bug.cgi?id=240896, we are still experiencing some cases where the Metal backend does not
    correctly configure the render pipeline state. In rarer cases, we end up in a state where the render encoder is valid, but the pipeline state is not set.

    Attempt to correct this error with three additional checks

    1) When setting up a program, if the render encoder in question does not have a render pipeline state set, attempt to set it, even if the render pass descriptor has not changes.

    2) When validating if an encoder is valid, also check if it has a valid render pipeline state during setupDraw. After setupDrawImpl, it should either be invalid (Due to a flush and invalidate all)  or not have a render pipeline state (Due to a misconfiguration on the program, or within the state bits.)

    If we end up in the case of 2, attempt to set up the program one more time. (Usually due to a flush and invalidate all). If we've failed to create a render encoder again, attempt to recover the graphics context by dropping flushing the command buffer, invalidating the entire GL state, and dropping the draw call. This may lead to a rendering error, but will not cause a browser crash.

* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm:
(rx::ContextMtl::setupDraw):
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm:
(rx::ProgramMtl::setupDraw):
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.h:

Canonical link: https://commits.webkit.org/256013@main




More information about the webkit-changes mailing list