Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9d2cc8c9895d51eb240b8f75575393b57bf1d478
      
https://github.com/WebKit/WebKit/commit/9d2cc8c9895d51eb240b8f75575393b57bf1d478
  Author: Kimmo Kinnunen <[email protected]>
  Date:   2026-07-06 (Mon, 06 Jul 2026)

  Changed paths:
    M LayoutTests/platform/mac-wk2/TestExpectations
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.h
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/QueryMtl.h
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/QueryMtl.mm
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.mm
    M 
Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_occlusion_query_pool.h
    M 
Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_occlusion_query_pool.mm
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.h
    M Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.mm
    M Source/ThirdParty/ANGLE/src/tests/gl_tests/OcclusionQueriesTest.cpp

  Log Message:
  -----------
  ANGLE: Metal: Dangling mOcclusionQuery pointer if visibility buffer 
allocation fails
https://bugs.webkit.org/show_bug.cgi?id=314398
rdar://176201738

Reviewed by Dan Glastonbury.

ContextMtl would populate QueryMtl *ContextMtl::mOcclusionQuery before
visibility buffer allocation:
  mOcclusionQuery = query;
  ANGLE_TRY(startOcclusionQueryInRenderPass(...));
If the allocation failed, frontend would not keep the Query instance
alive.

Avoid pointing to GL object, QueryMtl *, in ContextMtl. Instead
point to the Metal buffer of QueryMtl.
Do not store render pass state in QueryMtl, rather store it in
the render pass state representation of the query implementation,
the OcclusionQueryPool. This simplifies the implementation a lot.

* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.h:
(rx::ContextMtl::isOcclusionQueryEnabledInRenderPass const):
(rx::ContextMtl::hasActiveOcclusionQuery const): Deleted.
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ContextMtl.mm:
(rx::ContextMtl::endEncoding):
(rx::ContextMtl::onOcclusionQueryBegin):
(rx::ContextMtl::onOcclusionQueryEnd):
(rx::ContextMtl::disableOcclusionQueryInRenderPass):
(rx::ContextMtl::enableOcclusionQueryInRenderPass):
(rx::ContextMtl::setupDrawImpl):
(rx::ContextMtl::onOcclusionQueryDestroy): Deleted.
(rx::ContextMtl::disableActiveOcclusionQueryInRenderPass): Deleted.
(rx::ContextMtl::restartActiveOcclusionQueryInRenderPass): Deleted.
(rx::ContextMtl::startOcclusionQueryInRenderPass): Deleted.
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/QueryMtl.h:
(rx::VisibilityBufferOffsetsMtl::clear): Deleted.
(rx::VisibilityBufferOffsetsMtl::empty const): Deleted.
(rx::VisibilityBufferOffsetsMtl::size const): Deleted.
(rx::VisibilityBufferOffsetsMtl::back const): Deleted.
(rx::VisibilityBufferOffsetsMtl::front const): Deleted.
(rx::VisibilityBufferOffsetsMtl::setStartOffset): Deleted.
(rx::VisibilityBufferOffsetsMtl::addOffset): Deleted.
(rx::QueryMtl::getAllocatedVisibilityOffsets const): Deleted.
(rx::QueryMtl::setFirstAllocatedVisibilityOffset): Deleted.
(rx::QueryMtl::addAllocatedVisibilityOffset): Deleted.
(rx::QueryMtl::clearAllocatedVisibilityOffsets): Deleted.
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/QueryMtl.mm:
(rx::QueryMtl::onDestroy):
(rx::QueryMtl::end):
(rx::QueryMtl::resetVisibilityResult): Deleted.
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_command_buffer.mm:
(rx::mtl::RenderCommandEncoder::endEncodingImpl):
* 
Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_occlusion_query_pool.h:
(rx::mtl::VisibilityBufferOffsetsMtl::VisibilityBufferOffsetsMtl):
(rx::mtl::VisibilityBufferOffsetsMtl::size const):
(rx::mtl::VisibilityBufferOffsetsMtl::lastOffset const):
(rx::mtl::VisibilityBufferOffsetsMtl::firstOffset const):
(rx::mtl::VisibilityBufferOffsetsMtl::addOffset):
(rx::mtl::VisibilityBufferOffsetsMtl::resultBuffer const):
(rx::mtl::VisibilityBufferOffsetsMtl::discard):
(rx::mtl::OcclusionQueryPool::hasPendingVisibilityResults const):
(rx::mtl::OcclusionQueryPool::getNumRenderPassAllocatedQueries const): Deleted.
* 
Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_occlusion_query_pool.mm:
(rx::mtl::OcclusionQueryPool::destroy):
(rx::mtl::OcclusionQueryPool::ensurePoolCapacity):
(rx::mtl::OcclusionQueryPool::beginQuery):
(rx::mtl::OcclusionQueryPool::continueQuery):
(rx::mtl::OcclusionQueryPool::resolveVisibilityResults):
(rx::mtl::OcclusionQueryPool::prepareRenderPassVisibilityPoolBuffer):
(rx::mtl::OcclusionQueryPool::allocateQueryOffset): Deleted.
(rx::mtl::OcclusionQueryPool::deallocateQueryOffset): Deleted.
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.h:
* Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.mm:
(rx::mtl::RenderUtils::combineVisibilityResult):
(rx::mtl::VisibilityResultUtils::combineVisibilityResult):
* Source/ThirdParty/ANGLE/src/tests/gl_tests/OcclusionQueriesTest.cpp:

Originally-landed-as: 305413.883@safari-7624-branch (417b97d905b3). 
rdar://180436178
Canonical link: https://commits.webkit.org/316606@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to