From 8015eb25a1bbbd2f25a3eb0f36918cbff21c355f Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Sun, 14 Nov 2021 08:22:34 -0800 Subject: [PATCH] Also fix write-after-read in elements.com On further testing, this resolves a hard lockup on Intel 630 on the mmark stress test, so is worth getting into the repo. --- piet-gpu/shader/elements.comp | 4 +++- piet-gpu/shader/elements.spv | Bin 81040 -> 81072 bytes piet-gpu/shader/kernel4.spv | Bin 38500 -> 38684 bytes 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/piet-gpu/shader/elements.comp b/piet-gpu/shader/elements.comp index e4bbfec..873fc41 100644 --- a/piet-gpu/shader/elements.comp +++ b/piet-gpu/shader/elements.comp @@ -248,9 +248,10 @@ void main() { // The flag load is done only in the last thread. However, because the // translation of memoryBarrierBuffer to Metal requires uniform control // flow, we broadcast it to all threads. - barrier(); memoryBarrierBuffer(); + barrier(); uint flag = sh_flag; + barrier(); if (flag == FLAG_PREFIX_READY) { if (gl_LocalInvocationID.x == WG_SIZE - 1) { @@ -293,6 +294,7 @@ void main() { } barrier(); flag = sh_flag; + barrier(); if (flag == FLAG_PREFIX_READY) { break; } diff --git a/piet-gpu/shader/elements.spv b/piet-gpu/shader/elements.spv index 60517b0e293c1da39bd83df9a416781c86c22633..37cc05108a7d6805a08ce6e63808096dc1b8f785 100644 GIT binary patch delta 61 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