From 00c0b315b63acc6650db89b14366b8578cdfb205 Mon Sep 17 00:00:00 2001 From: Pedro Pontes Date: Wed, 15 Dec 2021 18:18:30 +0100 Subject: [PATCH 1/3] chore: cherry-pick 05e69c75905f from angle --- patches/angle/.patches | 1 + patches/angle/cherry-pick-05e69c75905f.patch | 119 +++++++++++++++++++ patches/config.json | 4 +- 3 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 patches/angle/.patches create mode 100644 patches/angle/cherry-pick-05e69c75905f.patch diff --git a/patches/angle/.patches b/patches/angle/.patches new file mode 100644 index 0000000000000..30489047316a9 --- /dev/null +++ b/patches/angle/.patches @@ -0,0 +1 @@ +cherry-pick-05e69c75905f.patch diff --git a/patches/angle/cherry-pick-05e69c75905f.patch b/patches/angle/cherry-pick-05e69c75905f.patch new file mode 100644 index 0000000000000..8ae8d8394f8ca --- /dev/null +++ b/patches/angle/cherry-pick-05e69c75905f.patch @@ -0,0 +1,119 @@ +From 05e69c75905f4b9109f279ae89d2fbf574fdc442 Mon Sep 17 00:00:00 2001 +From: Lingfeng Yang +Date: Wed, 01 Dec 2021 18:16:14 -0800 +Subject: [PATCH] M96: Vulkan: remove staged updates on storage set + +Previously we would allow staged updates to bigger versions of a texture +to go through even if the texture was redefined via glTexStorage*. + +Bug: chromium:1262080 +Change-Id: I9d861fed68d4a1fdcd0777b97caf729cc74c595e +Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3312718 +Reviewed-by: Charlie Lao +Reviewed-by: Jamie Madill +Reviewed-by: Shahbaz Youssefi +Commit-Queue: Lingfeng Yang +(cherry picked from commit 929c8ed4e8c3912cf027d843e7a2af47b21e5612) +Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3328001 +--- + +diff --git a/src/libANGLE/renderer/vulkan/TextureVk.cpp b/src/libANGLE/renderer/vulkan/TextureVk.cpp +index 7387a14..6050600 100644 +--- a/src/libANGLE/renderer/vulkan/TextureVk.cpp ++++ b/src/libANGLE/renderer/vulkan/TextureVk.cpp +@@ -1272,6 +1272,10 @@ + { + releaseAndDeleteImageAndViews(contextVk); + } ++ else if (mImage) ++ { ++ mImage->releaseStagingBuffer(contextVk->getRenderer()); ++ } + + const vk::Format &format = renderer->getFormat(internalformat); + ANGLE_TRY(ensureImageAllocated(contextVk, format)); +diff --git a/src/tests/gl_tests/TextureTest.cpp b/src/tests/gl_tests/TextureTest.cpp +index 79baa98..633d865 100644 +--- a/src/tests/gl_tests/TextureTest.cpp ++++ b/src/tests/gl_tests/TextureTest.cpp +@@ -9886,6 +9886,73 @@ + glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); + } + ++class TextureChangeStorageUploadTest : public ANGLETest ++{ ++ protected: ++ TextureChangeStorageUploadTest() ++ { ++ setWindowWidth(256); ++ setWindowHeight(256); ++ setConfigRedBits(8); ++ setConfigGreenBits(8); ++ setConfigBlueBits(8); ++ setConfigAlphaBits(8); ++ } ++ ++ void testSetUp() override ++ { ++ mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor()); ++ if (mProgram == 0) ++ { ++ FAIL() << "shader compilation failed."; ++ } ++ ++ mColorLocation = glGetUniformLocation(mProgram, essl1_shaders::ColorUniform()); ++ ++ glUseProgram(mProgram); ++ ++ glClearColor(0, 0, 0, 0); ++ glClearDepthf(0.0); ++ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ++ ++ glEnable(GL_BLEND); ++ glDisable(GL_DEPTH_TEST); ++ ++ glGenTextures(1, &mTexture); ++ ASSERT_GL_NO_ERROR(); ++ } ++ ++ void testTearDown() override ++ { ++ glDeleteTextures(1, &mTexture); ++ glDeleteProgram(mProgram); ++ } ++ ++ GLuint mProgram; ++ GLint mColorLocation; ++ GLuint mTexture; ++}; ++ ++// Verify that respecifying storage and re-uploading doesn't crash. ++TEST_P(TextureChangeStorageUploadTest, Basic) ++{ ++ constexpr int kImageSize = 8; // 4 doesn't trip ASAN ++ constexpr int kSmallerImageSize = kImageSize / 2; ++ EXPECT_GT(kImageSize, kSmallerImageSize); ++ EXPECT_GT(kSmallerImageSize / 2, 0); ++ ++ std::array kColor; ++ ++ glBindTexture(GL_TEXTURE_2D, mTexture); ++ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, kImageSize, kImageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, ++ kColor.data()); ++ glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, kSmallerImageSize, kSmallerImageSize); ++ // need partial update to sidestep optimizations that remove the full upload ++ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, kSmallerImageSize / 2, kSmallerImageSize / 2, GL_RGBA, ++ GL_UNSIGNED_BYTE, kColor.data()); ++ EXPECT_GL_NO_ERROR(); ++} ++ + // Use this to select which configurations (e.g. which renderer, which GLES major version) these + // tests should be run against. + #define ES2_EMULATE_COPY_TEX_IMAGE() \ +@@ -9999,4 +10066,6 @@ + GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(CopyImageTestES31); + ANGLE_INSTANTIATE_TEST_ES31_AND(CopyImageTestES31, WithDirectSPIRVGeneration(ES31_VULKAN())); + ++ANGLE_INSTANTIATE_TEST_ES3(TextureChangeStorageUploadTest); ++ + } // anonymous namespace diff --git a/patches/config.json b/patches/config.json index e9a2297ba10f2..3b59b7b5108b7 100644 --- a/patches/config.json +++ b/patches/config.json @@ -13,5 +13,7 @@ "src/electron/patches/Mantle": "src/third_party/squirrel.mac/vendor/Mantle", - "src/electron/patches/ReactiveObjC": "src/third_party/squirrel.mac/vendor/ReactiveObjC" + "src/electron/patches/ReactiveObjC": "src/third_party/squirrel.mac/vendor/ReactiveObjC", + + "src/electron/patches/angle": "src/third_party/angle" } From ccaf7a167e5e031fc4b1e89fab6fb43f6ec57612 Mon Sep 17 00:00:00 2001 From: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Date: Wed, 15 Dec 2021 17:32:01 +0000 Subject: [PATCH 2/3] chore: update patches --- patches/angle/cherry-pick-05e69c75905f.patch | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/patches/angle/cherry-pick-05e69c75905f.patch b/patches/angle/cherry-pick-05e69c75905f.patch index 8ae8d8394f8ca..48861ec5e2d45 100644 --- a/patches/angle/cherry-pick-05e69c75905f.patch +++ b/patches/angle/cherry-pick-05e69c75905f.patch @@ -1,7 +1,7 @@ -From 05e69c75905f4b9109f279ae89d2fbf574fdc442 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Lingfeng Yang -Date: Wed, 01 Dec 2021 18:16:14 -0800 -Subject: [PATCH] M96: Vulkan: remove staged updates on storage set +Date: Wed, 1 Dec 2021 18:16:14 -0800 +Subject: M96: Vulkan: remove staged updates on storage set Previously we would allow staged updates to bigger versions of a texture to go through even if the texture was redefined via glTexStorage*. @@ -15,13 +15,12 @@ Reviewed-by: Shahbaz Youssefi Commit-Queue: Lingfeng Yang (cherry picked from commit 929c8ed4e8c3912cf027d843e7a2af47b21e5612) Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3328001 ---- diff --git a/src/libANGLE/renderer/vulkan/TextureVk.cpp b/src/libANGLE/renderer/vulkan/TextureVk.cpp -index 7387a14..6050600 100644 +index e0be9676912e49d70473ffdcd4d7b1549210be25..b43f41dbae29356f1ffe4f961ed83e0f0e9cdcd2 100644 --- a/src/libANGLE/renderer/vulkan/TextureVk.cpp +++ b/src/libANGLE/renderer/vulkan/TextureVk.cpp -@@ -1272,6 +1272,10 @@ +@@ -1236,6 +1236,10 @@ angle::Result TextureVk::setStorageMultisample(const gl::Context *context, { releaseAndDeleteImageAndViews(contextVk); } @@ -33,10 +32,10 @@ index 7387a14..6050600 100644 const vk::Format &format = renderer->getFormat(internalformat); ANGLE_TRY(ensureImageAllocated(contextVk, format)); diff --git a/src/tests/gl_tests/TextureTest.cpp b/src/tests/gl_tests/TextureTest.cpp -index 79baa98..633d865 100644 +index e79bc700d4991752289ff3d7c76f2ccbb3ba932a..a3dec629c9ea96b276ff8bf344d4a4628ff20b3b 100644 --- a/src/tests/gl_tests/TextureTest.cpp +++ b/src/tests/gl_tests/TextureTest.cpp -@@ -9886,6 +9886,73 @@ +@@ -9703,6 +9703,73 @@ void main() glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); } @@ -110,7 +109,7 @@ index 79baa98..633d865 100644 // Use this to select which configurations (e.g. which renderer, which GLES major version) these // tests should be run against. #define ES2_EMULATE_COPY_TEX_IMAGE() \ -@@ -9999,4 +10066,6 @@ +@@ -9816,4 +9883,6 @@ ANGLE_INSTANTIATE_TEST_ES31_AND(TextureBufferTestES31, WithDirectSPIRVGeneration GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(CopyImageTestES31); ANGLE_INSTANTIATE_TEST_ES31_AND(CopyImageTestES31, WithDirectSPIRVGeneration(ES31_VULKAN())); From a91e3c48f2ef9a8d06e277dab3b49d3165cfdc64 Mon Sep 17 00:00:00 2001 From: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Date: Mon, 10 Jan 2022 22:12:45 +0000 Subject: [PATCH 3/3] chore: update patches --- patches/angle/cherry-pick-891020ed64d4.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/angle/cherry-pick-891020ed64d4.patch b/patches/angle/cherry-pick-891020ed64d4.patch index 9e00282ec9c54..f50e565b418c6 100644 --- a/patches/angle/cherry-pick-891020ed64d4.patch +++ b/patches/angle/cherry-pick-891020ed64d4.patch @@ -72,7 +72,7 @@ index c4ce77d612d88a898f8a8164466d25b210e2144b..eb60719ac38543b608c122daebd71b10 } diff --git a/src/tests/gl_tests/TextureTest.cpp b/src/tests/gl_tests/TextureTest.cpp -index e79bc700d4991752289ff3d7c76f2ccbb3ba932a..f5b82b03324f7d2b4c6c7f2bd05de568300a6fbe 100644 +index a3dec629c9ea96b276ff8bf344d4a4628ff20b3b..ba512a11cb023d9caae666ab2634d1e66057d12c 100644 --- a/src/tests/gl_tests/TextureTest.cpp +++ b/src/tests/gl_tests/TextureTest.cpp @@ -5151,6 +5151,43 @@ TEST_P(Texture2DTestES3, TextureCompletenessChangesWithMaxLevel)