Skip to content

Commit

Permalink
chore: [22-x-y] cherry-pick missing changes from Release-1-M116
Browse files Browse the repository at this point in the history
  • Loading branch information
ppontes committed Aug 24, 2023
1 parent fdc986b commit bf1d082
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 69 deletions.
110 changes: 53 additions & 57 deletions patches/angle/cherry-pick-e4669a74888d.patch
@@ -1,7 +1,7 @@
From e4669a74888d7f9bd93d79f72829d576776dfb8a Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Charlie Lao <cclao@google.com>
Date: Tue, 08 Aug 2023 10:14:47 -0700
Subject: [PATCH] [M114-LTS] Vulkan: Fix data race with DynamicDescriptorPool
Date: Tue, 8 Aug 2023 10:14:47 -0700
Subject: M116: Vulkan: Fix data race with DynamicDescriptorPool

Right now DynamicDescriptorPool::destroyCachedDescriptorSet can be
called from garbage clean up thread, while simultaneously accessed from
Expand All @@ -17,14 +17,13 @@ is released, while we still had the shared group lock.
Bug: chromium:1469542
Change-Id: Ie6235fcfb77dee2a12b2ebde44042c3845fc0aca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4790523
(cherry picked from commit b48983ab8c74d2fcd9ef17c80727affb9e690c53)
---
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>

diff --git a/src/libANGLE/renderer/vulkan/BufferVk.cpp b/src/libANGLE/renderer/vulkan/BufferVk.cpp
index 2e07deb..93a1092 100644
index 09e6a587563e06914af5b8f7545c0dac6774c862..e8dd6598546df060a5fc2cdcb78935ee3da6c614 100644
--- a/src/libANGLE/renderer/vulkan/BufferVk.cpp
+++ b/src/libANGLE/renderer/vulkan/BufferVk.cpp
@@ -305,7 +305,7 @@
@@ -286,7 +286,7 @@ void BufferVk::release(ContextVk *contextVk)
RendererVk *renderer = contextVk->getRenderer();
if (mBuffer.valid())
{
Expand All @@ -33,7 +32,7 @@ index 2e07deb..93a1092 100644
}
if (mStagingBuffer.valid())
{
@@ -623,7 +623,7 @@
@@ -628,7 +628,7 @@ angle::Result BufferVk::ghostMappedBuffer(ContextVk *contextVk,
memcpy(dstMapPtr, srcMapPtr, static_cast<size_t>(mState.getSize()));
}

Expand All @@ -42,16 +41,16 @@ index 2e07deb..93a1092 100644

// Return the already mapped pointer with the offset adjustment to avoid the call to unmap().
*mapPtr = dstMapPtr + offset;
@@ -1029,7 +1029,7 @@
@@ -965,7 +965,7 @@ angle::Result BufferVk::acquireAndUpdate(ContextVk *contextVk,

if (prevBuffer.valid())
if (src.valid())
{
- prevBuffer.releaseBufferAndDescriptorSetCache(contextVk);
+ prevBuffer.releaseBufferAndDescriptorSetCache(contextVk->getRenderer());
- src.releaseBufferAndDescriptorSetCache(contextVk);
+ src.releaseBufferAndDescriptorSetCache(contextVk->getRenderer());
}

return angle::Result::Continue;
@@ -1151,7 +1151,7 @@
@@ -1072,7 +1072,7 @@ angle::Result BufferVk::acquireBufferHelper(ContextVk *contextVk, size_t sizeInB

if (mBuffer.valid())
{
Expand All @@ -61,10 +60,10 @@ index 2e07deb..93a1092 100644

// Allocate the buffer directly
diff --git a/src/libANGLE/renderer/vulkan/Suballocation.h b/src/libANGLE/renderer/vulkan/Suballocation.h
index d25481b..276f6b4 100644
index 568690abec2d46e8e6461c110a0f90b07495735d..4a7b7a942e424bba267a7c250d33a09f42c749a7 100644
--- a/src/libANGLE/renderer/vulkan/Suballocation.h
+++ b/src/libANGLE/renderer/vulkan/Suballocation.h
@@ -86,6 +86,13 @@
@@ -81,6 +81,13 @@ class BufferBlock final : angle::NonCopyable
{
mDescriptorSetCacheManager.addKey(sharedCacheKey);
}
Expand All @@ -79,19 +78,19 @@ index d25481b..276f6b4 100644
private:
mutable std::mutex mVirtualBlockMutex;
diff --git a/src/libANGLE/renderer/vulkan/TextureVk.cpp b/src/libANGLE/renderer/vulkan/TextureVk.cpp
index d43c172..5e6419f 100644
index a6eddac2fbf3c8e861afa3f944c32cd68bdc5661..d72854283b7fd92b01b0f3e82f950b1bf67deaee 100644
--- a/src/libANGLE/renderer/vulkan/TextureVk.cpp
+++ b/src/libANGLE/renderer/vulkan/TextureVk.cpp
@@ -1623,7 +1623,7 @@
onStateChange(angle::SubjectMessage::SubjectChanged);
}
@@ -1616,7 +1616,7 @@ void TextureVk::releaseAndDeleteImageAndViews(ContextVk *contextVk)

mBufferViews.release(contextVk);
mRedefinedLevels.reset();
- mDescriptorSetCacheManager.releaseKeys(contextVk);
+ mDescriptorSetCacheManager.releaseKeys(contextVk->getRenderer());
}

void TextureVk::initImageUsageFlags(ContextVk *contextVk, angle::FormatID actualFormatID)
@@ -2857,7 +2857,7 @@
@@ -2844,7 +2844,7 @@ angle::Result TextureVk::syncState(const gl::Context *context,

mBufferViews.release(contextVk);
mBufferViews.init(renderer, offset, size);
Expand All @@ -100,7 +99,7 @@ index d43c172..5e6419f 100644
return angle::Result::Continue;
}

@@ -3300,7 +3300,7 @@
@@ -3280,7 +3280,7 @@ void TextureVk::releaseImageViews(ContextVk *contextVk)
{
RendererVk *renderer = contextVk->getRenderer();

Expand All @@ -110,10 +109,10 @@ index d43c172..5e6419f 100644
if (mImage == nullptr)
{
diff --git a/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp b/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp
index f750428..ae86b29 100644
index 9e2eeed7be9d0c171c438721c9ffded26ec35b82..8a703e5209608b313772e440cdd99dff219df352 100644
--- a/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_cache_utils.cpp
@@ -2589,11 +2589,19 @@
@@ -2443,11 +2443,19 @@ void ReleaseCachedObject(ContextVk *contextVk, const FramebufferDesc &desc)
{
contextVk->getShareGroup()->getFramebufferCache().erase(contextVk, desc);
}
Expand All @@ -123,21 +122,22 @@ index f750428..ae86b29 100644
+}

void ReleaseCachedObject(ContextVk *contextVk, const DescriptorSetDescAndPool &descAndPool)
{
+{
+ UNREACHABLE();
+}
+void ReleaseCachedObject(RendererVk *renderer, const DescriptorSetDescAndPool &descAndPool)
+{
{
ASSERT(descAndPool.mPool != nullptr);
- descAndPool.mPool->releaseCachedDescriptorSet(contextVk, descAndPool.mDesc);
+ descAndPool.mPool->releaseCachedDescriptorSet(renderer, descAndPool.mDesc);
}

void DestroyCachedObject(RendererVk *renderer, const FramebufferDesc &desc)
@@ -6261,6 +6269,22 @@
@@ -5620,6 +5628,22 @@ void SharedCacheKeyManager<SharedCacheKeyT>::releaseKeys(ContextVk *contextVk)
mSharedCacheKeys.clear();
}

template <class SharedCacheKeyT>
+template <class SharedCacheKeyT>
+void SharedCacheKeyManager<SharedCacheKeyT>::releaseKeys(RendererVk *renderer)
+{
+ for (SharedCacheKeyT &sharedCacheKey : mSharedCacheKeys)
Expand All @@ -153,15 +153,14 @@ index f750428..ae86b29 100644
+ mSharedCacheKeys.clear();
+}
+
+template <class SharedCacheKeyT>
template <class SharedCacheKeyT>
void SharedCacheKeyManager<SharedCacheKeyT>::destroyKeys(RendererVk *renderer)
{
for (SharedCacheKeyT &sharedCacheKey : mSharedCacheKeys)
diff --git a/src/libANGLE/renderer/vulkan/vk_cache_utils.h b/src/libANGLE/renderer/vulkan/vk_cache_utils.h
index 8c9d452..f85459a 100644
index 7b5236a6ef80efcd1342ea5b126b921a6f1f8150..76ec2973e96ef47421f80d92e8cc345fb7dcf70d 100644
--- a/src/libANGLE/renderer/vulkan/vk_cache_utils.h
+++ b/src/libANGLE/renderer/vulkan/vk_cache_utils.h
@@ -1932,6 +1932,7 @@
@@ -1633,6 +1633,7 @@ class SharedCacheKeyManager
void addKey(const SharedCacheKeyT &key);
// Iterate over the descriptor array and release the descriptor and cache.
void releaseKeys(ContextVk *contextVk);
Expand All @@ -170,10 +169,10 @@ index 8c9d452..f85459a 100644
void destroyKeys(RendererVk *renderer);
void clear();
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.cpp b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
index 9088e09bf..8bc027d 100644
index 3e9036ac8871613421d4adea6fcceac614e7727f..3172bff1ec2e244bb291098b59672fb7dcfb875e 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.cpp
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.cpp
@@ -3798,7 +3798,7 @@
@@ -3455,7 +3455,7 @@ angle::Result DynamicDescriptorPool::allocateNewPool(Context *context)
return mDescriptorPools[mCurrentPoolIndex]->get().init(context, mPoolSizes, mMaxSetsPerPool);
}

Expand All @@ -182,16 +181,16 @@ index 9088e09bf..8bc027d 100644
const DescriptorSetDesc &desc)
{
VkDescriptorSet descriptorSet;
@@ -3812,7 +3812,7 @@
// Wrap it with helper object so that it can be GPU tracked and add it to resource list.
DescriptorSetHelper descriptorSetHelper(poolOut->get().getResourceUse(), descriptorSet);
@@ -3470,7 +3470,7 @@ void DynamicDescriptorPool::releaseCachedDescriptorSet(ContextVk *contextVk,
DescriptorSetHelper descriptorSetHelper(descriptorSet);
contextVk->retainResource(&descriptorSetHelper);
poolOut->get().addGarbage(std::move(descriptorSetHelper));
- checkAndReleaseUnusedPool(contextVk->getRenderer(), poolOut);
+ checkAndReleaseUnusedPool(renderer, poolOut);
}
}

@@ -5016,6 +5016,12 @@
@@ -4716,6 +4716,13 @@ void BufferHelper::release(RendererVk *renderer)

if (mSuballocation.valid())
{
Expand All @@ -201,10 +200,11 @@ index 9088e09bf..8bc027d 100644
+ // descriptorSet from garbage collection thread.
+ mSuballocation.getBufferBlock()->releaseAllCachedDescriptorSetCacheKeys(renderer);
+ }
renderer->collectSuballocationGarbage(mUse, std::move(mSuballocation),
+
renderer->collectSuballocationGarbage(mReadOnlyUse, std::move(mSuballocation),
std::move(mBufferForVertexArray));
}
@@ -5024,17 +5030,15 @@
if (mReadWriteUse.isCurrentlyInUse(renderer->getLastCompletedQueueSerial()))
@@ -4727,13 +4734,11 @@ void BufferHelper::release(RendererVk *renderer)
ASSERT(!mBufferForVertexArray.valid());
}

Expand All @@ -213,22 +213,18 @@ index 9088e09bf..8bc027d 100644
{
- RendererVk *renderer = contextVk->getRenderer();
-
if (renderer->hasResourceUseFinished(getResourceUse()))
{
mDescriptorSetCacheManager.destroyKeys(renderer);
}
else
if (mReadOnlyUse.isCurrentlyInUse(renderer->getLastCompletedQueueSerial()))
{
- mDescriptorSetCacheManager.releaseKeys(contextVk);
+ mDescriptorSetCacheManager.releaseKeys(renderer);
}

release(renderer);
else
{
diff --git a/src/libANGLE/renderer/vulkan/vk_helpers.h b/src/libANGLE/renderer/vulkan/vk_helpers.h
index d2405b6..962dfe8 100644
index c04608e2d636cdef96e7404e2105d748b61a524b..bfc93cf47769da54dfbe2b2f2185766e0128c4cd 100644
--- a/src/libANGLE/renderer/vulkan/vk_helpers.h
+++ b/src/libANGLE/renderer/vulkan/vk_helpers.h
@@ -252,7 +252,7 @@
@@ -241,7 +241,7 @@ class DynamicDescriptorPool final : angle::NonCopyable
VkDescriptorSet *descriptorSetOut,
SharedDescriptorSetCacheKey *sharedCacheKeyOut);

Expand All @@ -237,7 +233,7 @@ index d2405b6..962dfe8 100644
void destroyCachedDescriptorSet(RendererVk *renderer, const DescriptorSetDesc &desc);

template <typename Accumulator>
@@ -777,7 +777,7 @@
@@ -795,7 +795,7 @@ class BufferHelper : public ReadWriteResource

void destroy(RendererVk *renderer);
void release(RendererVk *renderer);
Expand All @@ -247,10 +243,10 @@ index d2405b6..962dfe8 100644
BufferSerial getBufferSerial() const { return mSerial; }
BufferSerial getBlockSerial() const
diff --git a/src/tests/gl_tests/TransformFeedbackTest.cpp b/src/tests/gl_tests/TransformFeedbackTest.cpp
index ea3eeea..226eb1f 100644
index ea3eeea4015dcb56f710c873b22c95d168bb287c..226eb1f049bb708e0221c81e9b836a67594eb7b0 100644
--- a/src/tests/gl_tests/TransformFeedbackTest.cpp
+++ b/src/tests/gl_tests/TransformFeedbackTest.cpp
@@ -507,8 +507,8 @@
@@ -507,8 +507,8 @@ TEST_P(TransformFeedbackTest, UseAsUBOThenUpdateThenCapture)

const std::array<uint32_t, 12> kInitialData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
const std::array<uint32_t, 12> kUpdateData = {
Expand All @@ -261,7 +257,7 @@ index ea3eeea..226eb1f 100644
};

GLBuffer buffer;
@@ -3749,9 +3749,9 @@
@@ -3749,9 +3749,9 @@ void main()
constexpr size_t kCapturedVaryingsCount = 3;
constexpr std::array<size_t, kCapturedVaryingsCount> kCaptureSizes = {8, 9, 4};
const std::vector<float> kExpected[kCapturedVaryingsCount] = {
Expand All @@ -274,7 +270,7 @@ index ea3eeea..226eb1f 100644
};

ANGLE_GL_PROGRAM_TRANSFORM_FEEDBACK(program, kVS, kFS, tfVaryings, GL_INTERLEAVED_ATTRIBS);
@@ -3848,9 +3848,9 @@
@@ -3848,9 +3848,9 @@ void main()
constexpr size_t kCapturedVaryingsCount = 3;
constexpr std::array<size_t, kCapturedVaryingsCount> kCaptureSizes = {1, 2, 1};
const std::vector<float> kExpected[kCapturedVaryingsCount] = {
Expand All @@ -287,7 +283,7 @@ index ea3eeea..226eb1f 100644
};

ANGLE_GL_PROGRAM_TRANSFORM_FEEDBACK(program, kVS, kFS, tfVaryings, GL_SEPARATE_ATTRIBS);
@@ -4392,6 +4392,51 @@
@@ -4392,6 +4392,51 @@ TEST_P(TransformFeedbackTest, RenderOnceChangeXfbBufferRenderAgain)
glEndTransformFeedback();
}

Expand Down Expand Up @@ -340,10 +336,10 @@ index ea3eeea..226eb1f 100644
ANGLE_INSTANTIATE_TEST_ES3_AND(TransformFeedbackTest,
ES3_VULKAN()
diff --git a/src/tests/gl_tests/UniformBufferTest.cpp b/src/tests/gl_tests/UniformBufferTest.cpp
index 4d005c0..71b8504 100644
index 4d005c0740d5ff918af103236aa18e8249e00acc..71b85043bd9ca49018e9ed79fa36f24f8499757e 100644
--- a/src/tests/gl_tests/UniformBufferTest.cpp
+++ b/src/tests/gl_tests/UniformBufferTest.cpp
@@ -3422,6 +3422,50 @@
@@ -3422,6 +3422,50 @@ void main() {
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green);
}

Expand Down
2 changes: 1 addition & 1 deletion patches/chromium/.patches
Expand Up @@ -170,4 +170,4 @@ cherry-pick-933b9fad3a53.patch
cherry-pick-b03973561862.patch
cherry-pick-c60a1ab717c7.patch
networkcontext_don_t_access_url_loader_factories_during_destruction.patch
cherry-pick-1939f7b78eda.patch
don_t_keep_pointer_to_popped_stack_memory_for_has.patch
@@ -1,7 +1,7 @@
From 1939f7b78edaf058782203f32df820f17010ba25 Mon Sep 17 00:00:00 2001
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Rune Lillesveen <futhark@chromium.org>
Date: Thu, 24 Aug 2023 10:53:36 +0000
Subject: [PATCH] [M114-LTS] Don't keep pointer to popped stack memory for :has()
Date: Tue, 15 Aug 2023 15:04:39 +0000
Subject: Don't keep pointer to popped stack memory for :has()

The sibling_features pass into UpdateFeaturesFromCombinator may be
initialized to last_compound_in_adjacent_chain_features if null. The
Expand All @@ -20,26 +20,25 @@ Bug: 1470477
Change-Id: I260c93016f8ab0d165e4b29ca1aea810bede5b97
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4759326
Commit-Queue: Rune Lillesveen <futhark@chromium.org>
Reviewed-by: Anders Hartvoll Ruud <andruud@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#1181365}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4777251
Cr-Commit-Position: refs/branch-heads/5845@{#1482}
Cr-Branched-From: 5a5dff63a4a4c63b9b18589819bebb2566c85443-refs/heads/main@{#1160321}
(cherry picked from commit 34e544e4dedf299211f104a2822d98ce1db80f61)
---

diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc
index 8ca157a..0c0c5b8 100644
index ec7356285d7fa45b7d9c1701be484a121c2a0017..9cb6084b7fca4fc6ff2edd8defadf8fabf2899b5 100644
--- a/third_party/blink/renderer/core/css/rule_feature_set.cc
+++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -1325,6 +1325,7 @@
@@ -1227,6 +1227,7 @@ void RuleFeatureSet::AddFeaturesToInvalidationSetsForLogicalCombinationInHas(
descendant_features);

const CSSSelector* compound_in_logical_combination = complex;
+ InvalidationSetFeatures* inner_sibling_features = sibling_features;
InvalidationSetFeatures last_compound_in_adjacent_chain_features;
while (compound_in_logical_combination) {
AddFeaturesToInvalidationSetsForLogicalCombinationInHasContext context(
@@ -1336,14 +1337,14 @@
@@ -1238,14 +1239,14 @@ void RuleFeatureSet::AddFeaturesToInvalidationSetsForLogicalCombinationInHas(
last_in_compound =
SkipAddingAndGetLastInCompoundForLogicalCombinationInHas(
compound_in_logical_combination, compound_containing_has,
Expand All @@ -57,8 +56,8 @@ index 8ca157a..0c0c5b8 100644
+ previous_combinator, add_features_method);
}

if (!last_in_compound) {
@@ -1358,7 +1359,7 @@
if (!last_in_compound)
@@ -1259,7 +1260,7 @@ void RuleFeatureSet::AddFeaturesToInvalidationSetsForLogicalCombinationInHas(
? CSSSelector::kIndirectAdjacent
: previous_combinator,
context.last_compound_in_adjacent_chain,
Expand All @@ -69,7 +68,7 @@ index 8ca157a..0c0c5b8 100644

diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/has-sibling-chrome-crash.html b/third_party/blink/web_tests/external/wpt/css/selectors/has-sibling-chrome-crash.html
new file mode 100644
index 0000000..0306e3e
index 0000000000000000000000000000000000000000..0306e3e39272c321fc3539aa582b4e239ffe2fa1
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/has-sibling-chrome-crash.html
@@ -0,0 +1,10 @@
Expand Down

0 comments on commit bf1d082

Please sign in to comment.