Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit ff60aba

Browse files
tobineCommit Bot
authored andcommitted
Vulkan:Disable FramebufferVk cache on Apple
Currently hitting a crash on Apple so disabling FramebufferVk cache. Bug: angleproject:4442 Change-Id: I3824252210aeeaf9919c8d17730395b394a50862 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2080661 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
1 parent dd19d55 commit ff60aba

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

include/platform/FeaturesVk.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@ struct FeaturesVk : FeatureSetBase
252252
FeatureCategory::VulkanFeatures,
253253
"Enable Android pre-rotation for landscape applications",
254254
&members, "http://anglebug.com/3502"};
255+
256+
// Cache FramebufferVk objects. Currently hitting a bug on Apple: http://anglebug.com/4442
257+
Feature enableFramebufferVkCache = {
258+
"enable_framebuffer_vk_cache", FeatureCategory::VulkanFeatures,
259+
"Enable FramebufferVk objects to be cached", &members, "http://anglebug.com/4442"};
255260
};
256261

257262
inline FeaturesVk::FeaturesVk() = default;

src/libANGLE/renderer/vulkan/FramebufferVk.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,8 +1177,16 @@ angle::Result FramebufferVk::getFramebuffer(ContextVk *contextVk, vk::Framebuffe
11771177
auto iter = mFramebufferCache.find(mCurrentFramebufferDesc);
11781178
if (iter != mFramebufferCache.end())
11791179
{
1180-
*framebufferOut = &iter->second.getFramebuffer();
1181-
return angle::Result::Continue;
1180+
if (contextVk->getRenderer()->getFeatures().enableFramebufferVkCache.enabled)
1181+
{
1182+
*framebufferOut = &iter->second.getFramebuffer();
1183+
return angle::Result::Continue;
1184+
}
1185+
else
1186+
{
1187+
// When cache is off just release previous entry, it will be recreated below
1188+
iter->second.release(contextVk);
1189+
}
11821190
}
11831191
vk::RenderPass *compatibleRenderPass = nullptr;
11841192
ANGLE_TRY(contextVk->getCompatibleRenderPass(mRenderPassDesc, &compatibleRenderPass));

src/libANGLE/renderer/vulkan/RendererVk.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,6 +1649,9 @@ void RendererVk::initFeatures(DisplayVk *displayVk, const ExtensionNameList &dev
16491649
// Pre-rotation support is not fully ready to be enabled.
16501650
ANGLE_FEATURE_CONDITION((&mFeatures), enablePreRotateSurfaces, false);
16511651

1652+
// Currently disable FramebufferVk cache on Apple: http://anglebug.com/4442
1653+
ANGLE_FEATURE_CONDITION((&mFeatures), enableFramebufferVkCache, !IsApple());
1654+
16521655
angle::PlatformMethods *platform = ANGLEPlatformCurrent();
16531656
platform->overrideFeaturesVk(platform, &mFeatures);
16541657

0 commit comments

Comments
 (0)