diff --git a/patches/angle/.patches b/patches/angle/.patches index b3d257a36f250..644eaae4f1bc7 100644 --- a/patches/angle/.patches +++ b/patches/angle/.patches @@ -12,3 +12,4 @@ m99_vulkan_prevent_out_of_bounds_read_in_divisor_emulation_path.patch m99_vulkan_streamvertexdatawithdivisor_write_beyond_buffer_boundary.patch m98_protect_against_deleting_a_current_xfb_buffer.patch m96-lts_vulkan_fix_issue_with_redefining_a_layered_attachment.patch +m100_fix_crash_when_pausing_xfb_then_deleting_a_buffer.patch diff --git a/patches/angle/m100_fix_crash_when_pausing_xfb_then_deleting_a_buffer.patch b/patches/angle/m100_fix_crash_when_pausing_xfb_then_deleting_a_buffer.patch new file mode 100644 index 0000000000000..6606166c4097f --- /dev/null +++ b/patches/angle/m100_fix_crash_when_pausing_xfb_then_deleting_a_buffer.patch @@ -0,0 +1,60 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jamie Madill +Date: Mon, 14 Mar 2022 10:37:31 -0400 +Subject: Fix crash when pausing XFB then deleting a buffer. + +Fix is to validate XFB buffer bindings even if we're paused. +This is undefined behaviour so we can use any non-crashing solution. + +Bug: chromium:1305190 +Change-Id: Ib95404cdb13adbde7f34d6cc77473a8b3cbf1de7 +Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3522283 +Reviewed-by: Geoff Lang +Commit-Queue: Jamie Madill +(cherry picked from commit 708ce9cfd63bc8eab7c48987612a2dedce78c69a) +Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3594105 +Reviewed-by: Shahbaz Youssefi + +diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp +index d5732741dff989b8b8f6f669511bf7bc001c4eaa..eb571bb2de3c4568810026e0364bf069bd8ca681 100644 +--- a/src/libANGLE/validationES.cpp ++++ b/src/libANGLE/validationES.cpp +@@ -3949,7 +3949,7 @@ const char *ValidateDrawStates(const Context *context) + } + } + +- if (state.isTransformFeedbackActiveUnpaused()) ++ if (state.isTransformFeedbackActive()) + { + if (!ValidateProgramExecutableXFBBuffersPresent(context, executable)) + { +diff --git a/src/tests/gl_tests/TransformFeedbackTest.cpp b/src/tests/gl_tests/TransformFeedbackTest.cpp +index 63dd230829716b7a95b7917b47fb1fc278c1098a..e6ed494e89c0a0c48af4789be91d240df769281f 100644 +--- a/src/tests/gl_tests/TransformFeedbackTest.cpp ++++ b/src/tests/gl_tests/TransformFeedbackTest.cpp +@@ -3660,6 +3660,25 @@ void main() { + EXPECT_GL_ERROR(GL_INVALID_OPERATION); + } + ++// Same as the above, with a paused transform feedback. ++TEST_P(TransformFeedbackTest, DeletePausedTransformFeedbackBuffer) ++{ ++ ANGLE_GL_PROGRAM_TRANSFORM_FEEDBACK(testProgram, essl1_shaders::vs::Simple(), ++ essl1_shaders::fs::Green(), {"gl_Position"}, ++ GL_INTERLEAVED_ATTRIBS); ++ glUseProgram(testProgram); ++ ++ GLBuffer buffer; ++ glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer); ++ glBufferData(GL_PIXEL_UNPACK_BUFFER, 3, nullptr, GL_STATIC_DRAW); ++ glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, buffer); ++ ++ glBeginTransformFeedback(GL_POINTS); ++ glPauseTransformFeedback(); ++ buffer.reset(); ++ glDrawArrays(GL_POINTS, 0, 1); ++} ++ + GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(TransformFeedbackTest); + ANGLE_INSTANTIATE_TEST_ES3(TransformFeedbackTest); + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy