From 9c24a14d2bb6062c0731a0451c41bf520c45ae8b Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Wed, 30 Sep 2026 05:45:10 -0400 Subject: [PATCH] [CI] (scripts, P8-MF): pin G5's tenth row as well and re-pin both flush ladders on the reviewed post-fix bodies (ID-P8-14) - dev f973008c moved FlushPendingRangesNow past every base ref CI passes (the Adreno 830 queued ring copy) and ac9ab078 mirrors it into FlushPendingRangesFrom; both scripts' self-tests now run the pin-precedence and one-token controls on both ladders --- scripts/p3a_untouched_regions.sh | 94 ++++++++++++++++++++------------ scripts/p4a_untouched_regions.sh | 76 ++++++++++++++++---------- 2 files changed, 105 insertions(+), 65 deletions(-) diff --git a/scripts/p3a_untouched_regions.sh b/scripts/p3a_untouched_regions.sh index 98289664..d9f1839a 100644 --- a/scripts/p3a_untouched_regions.sh +++ b/scripts/p3a_untouched_regions.sh @@ -24,9 +24,19 @@ # RingAllocate the fast path on the hot upload route # FlushPendingRangesNow the three-tier drain: tier 1 is an INVALIDATE_BUFFER map + memcpy # for a whole-buffer flush or a range >= 128 KiB, tier 2 the upload -# ring + glCopyBufferSubData, tier 3 UploadRangeNow +# ring + glCopyBufferSubData, tier 3 UploadRangeNow. PINNED since +# ID-P8-14 (see below) # FlushPendingRangesFrom the SAME three-tier drain, on the arm that ships. Born in P3a # +# ID-P8-14 PINS THE TENTH TOO. dev f973008c changed FlushPendingRangesNow on purpose: on Adreno 830 a +# partial range-invalidating map of a store that still has an upload-ring glCopyBufferSubData queued +# loses the copy (create-instancing drew whole terrain sections empty, SSIM 0.870), so the ring tier +# stamps ringCopyRetireSerial and a partial range waits behind an unretired copy. P8 merged dev +# (37174242) and P8-MF mirrored the rule into FlushPendingRangesFrom (via InvalidateFlushAccessFor). +# The base ref CI passes (37da3c3a) predates the fix, so the tenth row can no longer be compared +# against ; both ladders are now PINNED rows, re-pinned together on the reviewed post-fix +# bodies, and still compared on every run. +# # THE ELEVENTH IS HERE BY INTEGRATOR DECISION ID-15, and it is the whole reason the row about the # tenth is not decorative. On this tree Managers.cpp has TWO arms: `#if MOBILEGL_PIPE_PUSH` holds # FlushPendingRangesFrom, `#else` holds FlushPendingRangesNow byte-identically, and BOTH of a push @@ -36,9 +46,10 @@ # would exit 2 rather than run). The consequence, and what ID-15 closes: a push build compiles no # FlushPendingRangesNow at all, so a gate that hashed only that name protected text the shipping # build never sees, and a tier-threshold edit made in the ladder that DOES ship would pass it. So -# both names are hashed. The pull build's ladder is compared against the base ref; the push build's -# is compared, ALWAYS AND WHETHER OR NOT DEFINES IT, against a sha pinned at the commit -# where that body was reviewed - see PINNED_FUNCTIONS. +# both names are hashed. The push build's ladder is compared, ALWAYS AND WHETHER OR NOT +# DEFINES IT, against a sha pinned at the commit where that body was reviewed - see +# PINNED_FUNCTIONS. The pull build's ladder was compared against the base ref until ID-P8-14 pinned +# it the same way (see the note under the list above). # # "ALWAYS" IS INTEGRATOR DECISION ID-41 AND IT IS A CHANGE. Until P5 this text said "pinned" while # the implementation consulted the pin only as a FALLBACK, when did not define the function @@ -50,7 +61,8 @@ # InvalidateFlushAccessFor, the pull arm (FlushPendingRangesNow) is byte-identical across that # change and G1 reports .text +0, so it is the intended change to the eleventh row rather than # drift - and the answer is to RE-PIN it, not to revert it and not to let the row stop being -# compared. The OTHER TEN stay ref-a-vs-ref-b: nothing about them moved. +# compared. The other nine stay ref-a-vs-ref-b: nothing about them moved (the tenth moved at +# ID-P8-14 and was pinned then). # # THE TENTH IS HERE BY INTEGRATOR DECISION ID-11, resolving a contradiction inside the brief. # D-F's "Decision: nine functions" table omits FlushPendingRangesNow, but BRIEF-P3A.md:420 calls it @@ -99,24 +111,33 @@ set -u -o pipefail SOURCE_PATH=MobileGL/MG_Backend/DirectGLES/Managers.cpp -# The ten that exist at the P3a base ref, so their baseline is read out of . -FUNCTIONS="IsPoolable EnrollIntoPool AcquireFromPool TrimBufferPool ClearBufferPool ProcessDeferredBufferReleases CreateRingStorage RingAvailable RingAllocate FlushPendingRangesNow" -# The ELEVENTH (ID-15), and it is a different kind of row: it was BORN in P3a, so there was no -# body at the base ref to compare it with, and its baseline is PINNED below and consulted -# UNCONDITIONALLY (ID-41 - see the long note at the top of this file). +# The nine unpinned rows: they exist at the P3a base ref, so their baseline is read out of . +FUNCTIONS="IsPoolable EnrollIntoPool AcquireFromPool TrimBufferPool ClearBufferPool ProcessDeferredBufferReleases CreateRingStorage RingAvailable RingAllocate" +# The TENTH and the ELEVENTH, and they are a different kind of row: their baseline is PINNED below +# and consulted UNCONDITIONALLY (ID-41 - see the long note at the top of this file). The eleventh +# (ID-15) was BORN in P3a, so there was no body at the base ref to compare it with; the tenth joined +# it at ID-P8-14, when a reviewed fix moved it past the base ref. PINNED_FUNCTIONS is in the fixed +# order, because apply_pinned_shas appends the pinned rows in that order. # -# THE PIN, AND WHAT RE-PINS IT. Whoever moves this body deliberately replaces BOTH lines and -# writes the decision beside them; a pin with no commit and no decision next to it is a number -# nobody can audit. -# 3e298c9a 37fc94ff... ID-15, P3a: the two-arm shape, reviewed and accepted -# 3dadd4c1 172b0222... ID-41, P5 (b1): [Fix] (DirectGLES): make the extent hostBase is good -# for a parameter of the flush ladder, so tier 1's widening refusal is -# live code the moment a SEG_STAGE snapshot is narrower than the queued -# range. <- CURRENT -PINNED_FUNCTIONS="FlushPendingRangesFrom" -PINNED_BASELINE_REF=3dadd4c1 -PINNED_BASELINE_DECISION=ID-41 -PINNED_SHA_FlushPendingRangesFrom=172b022273db01b16e772d15b269ffcd797fe38c767f7354d83ce113a66040d0 +# THE PIN, AND WHAT RE-PINS IT. Whoever moves one of these bodies deliberately replaces the shas +# AND the commit AND the decision, and writes a line here; a pin with no commit and no decision +# next to it is a number nobody can audit. +# 3e298c9a From 37fc94ff... ID-15, P3a: the two-arm shape, reviewed and accepted +# 3dadd4c1 From 172b0222... ID-41, P5 (b1): [Fix] (DirectGLES): make the extent hostBase is +# good for a parameter of the flush ladder, so tier 1's widening +# refusal is live code the moment a SEG_STAGE snapshot is narrower +# than the queued range. +# ac9ab078 Now c40cae66... ID-P8-14, P8-MF: dev f973008c (merged at 37174242) keeps a partial +# From 33bc4cb8... range-invalidating map behind an upload-ring copy still queued on the +# store - Adreno 830 loses the queued copy - in FlushPendingRangesNow; +# ac9ab078 mirrors it into FlushPendingRangesFrom (the stamp on +# the ring tier, the guard in InvalidateFlushAccessFor, the +# whole-buffer exemption kept). <- CURRENT +PINNED_FUNCTIONS="FlushPendingRangesNow FlushPendingRangesFrom" +PINNED_BASELINE_REF=ac9ab078 +PINNED_BASELINE_DECISION=ID-P8-14 +PINNED_SHA_FlushPendingRangesNow=c40cae66f021160478ef9af6bcf5e8ef0bf26721486173695d5257263c97723f +PINNED_SHA_FlushPendingRangesFrom=33bc4cb855b932ed4fb0de44a4cfa7a9be8aca34da267ccd2fc9fedfad4d3328 ALL_FUNCTIONS="$FUNCTIONS $PINNED_FUNCTIONS" EXPECTED_FUNCTION_COUNT=11 # The functions the self-test perturbs, one control each. ClearBufferPool is small, has no forward @@ -353,21 +374,22 @@ apply_pinned_shas() { for name in $PINNED_FUNCTIONS; do eval "pinned=\$PINNED_SHA_$name" if [ -z "$pinned" ] || [ "$pinned" = "PLACEHOLDER_SHA" ]; then - say "$name has no pinned baseline sha; the eleventh row cannot be compared" + say "$name has no pinned baseline sha; that row cannot be compared" return 2 fi grep -v " $name\$" "$file" > "$file.unpinned" || true mv -f "$file.unpinned" "$file" || return 2 - # Appended LAST, which is also its position in the fixed order (it is the eleventh of eleven), - # so the header's "stdout is always the sha list in the fixed order" stays true and a baseline - # captured by redirect still diffs cleanly against a two-ref run. + # Appended LAST, in PINNED_FUNCTIONS order, which is also their position in the fixed order + # (the tenth and the eleventh of eleven), so the header's "stdout is always the sha list in the + # fixed order" stays true and a baseline captured by redirect still diffs cleanly against a + # two-ref run. printf '%s %s\n' "$pinned" "$name" >> "$file" done return 0 } -# The BASELINE side (). The TEN are extracted strictly, so a rename of one of THOSE is -# exit 2 rather than a silently short list. FlushPendingRangesFrom then takes the PINNED sha +# The BASELINE side (). The NINE are extracted strictly, so a rename of one of THOSE is +# exit 2 rather than a silently short list. Each pinned row then takes the PINNED sha # WHETHER OR NOT defines it (ID-41), and a that defines it DIFFERENTLY is # reported - loudly - because the two answers disagreeing is itself a finding rather than a # reason to prefer the ref. @@ -379,7 +401,7 @@ extract_baseline() { return 2 fi if ! python3 "$PY" extract "$blob" "$FUNCTIONS" > "$WORK_DIR/$out.sha" 2>"$WORK_DIR/$out.err"; then - say "the baseline ref '$ref' does not define the pre-P3a ten exactly once each:" + say "the baseline ref '$ref' does not define the nine unpinned rows exactly once each:" sed 's/^/[p3a-untouched] /' "$WORK_DIR/$out.err" >&2 return 2 fi @@ -387,7 +409,7 @@ extract_baseline() { eval "pinned=\$PINNED_SHA_$name" atRef=$(python3 "$PY" extract "$blob" "$name" 2>/dev/null | awk -v n="$name" '$2 == n { print $1 }') if [ -z "$atRef" ]; then - say "$name is not defined at '$ref' (it was born in P3a): its baseline is the sha PINNED in" + say "$name is not defined at '$ref' (a pinned row): its baseline is the sha PINNED in" say " this script, captured at $PINNED_BASELINE_REF ($PINNED_BASELINE_DECISION)" elif [ "$atRef" != "$pinned" ]; then say "NOTE: $name IS defined at '$ref' and hashes" @@ -517,14 +539,16 @@ if [ "${1:-}" = "--self-test" ]; then # --- THE PINNED ROW (ID-41) ----------------------------------------------------------------- # TWO more controls, and they exist because none of the five above can see the pin at all: every # one of them compares one extraction of the working tree against another, so they would all be - # green on a build of this script in which PINNED_SHA_* was never read by anything. The eleventh - # row's whole claim is "the baseline is the PIN, not ", and that claim needs its own two. + # green on a build of this script in which PINNED_SHA_* was never read by anything. A pinned + # row's whole claim is "the baseline is the PIN, not ", and that claim needs its own two - + # per pinned row (both ladders since ID-P8-14). for target in $PINNED_FUNCTIONS; do eval "pinned=\$PINNED_SHA_$target" # (1) PIN PRECEDENCE, positive. A baseline that carries some OTHER sha for the pinned row - # which is the shape of every CI passes today, since ff2994d9 and 37da3c3a both DEFINE - # FlushPendingRangesFrom - must come out of apply_pinned_shas carrying the PIN. This is the + # FlushPendingRangesFrom and both predate ID-P8-14's FlushPendingRangesNow - must come out of + # apply_pinned_shas carrying the PIN. This is the # control that would have caught the ID-41 defect itself: before it, the pin was consulted # only when lacked the function, so the row silently reverted to ref-a-vs-ref-b the # moment a base ref had one. @@ -537,7 +561,7 @@ if [ "${1:-}" = "--self-test" ]; then got=$(awk -v n="$target" '$2 == n { print $1 }' "$WORK_DIR/pinprec.sha") if [ "$got" != "$pinned" ]; then say "PIN CONTROL FAILED: a baseline that carried a DIFFERENT sha for $target came out as" - say " '${got:-}' and not as the pin ($pinned). The eleventh row would be compared" + say " '${got:-}' and not as the pin ($pinned). That pinned row would be compared" say " against again, which is exactly the defect $PINNED_BASELINE_DECISION closed." exit 2 fi @@ -545,7 +569,7 @@ if [ "${1:-}" = "--self-test" ]; then # (2) A ONE-TOKEN EDIT TO THE PINNED LADDER, negative, AGAINST THE PIN. The comparison must go # red, must name the row, and must say that the row is PINNED - R-16's "a control asserts its - # OWN failure string": the pinned row and the ten ref-a rows are fixed differently, and a + # OWN failure string": the pinned rows and the nine ref-a rows are fixed differently, and a # reader who gets only the generic paragraph goes looking for a diff against that does # not exist. python3 "$PY" perturb-token "$WORK_DIR/pristine.cpp" "$WORK_DIR/pinperturbed.cpp" \ diff --git a/scripts/p4a_untouched_regions.sh b/scripts/p4a_untouched_regions.sh index 928047e6..f582b7d7 100644 --- a/scripts/p4a_untouched_regions.sh +++ b/scripts/p4a_untouched_regions.sh @@ -25,7 +25,8 @@ # CreateRingStorage glBufferStorageEXT + persistent|coherent, retires at serial + 1 # RingAvailable self-heals a stale context generation # RingAllocate the fast path on the hot upload route -# FlushPendingRangesNow the three-tier drain, pull arm +# FlushPendingRangesNow the three-tier drain, pull arm. PINNED since ID-P8-14: dev +# f973008c moved it past on purpose (the parent's note) # FlushPendingRangesFrom the SAME three-tier drain, on the arm that ships (ID-15). Born # in P3a, so its baseline is PINNED, not read from # @@ -125,6 +126,11 @@ # be RE-PINNED on the reviewed P5 body rather than reverted or quietly left comparing # against . This script says so on stderr, in both directions, and keeps the PIN - # because the pin is the reviewed text. +# +# ID-P8-14 extends the same treatment to FlushPendingRangesNow: dev f973008c changed it +# past every CI passes (the Adreno 830 queued-ring-copy guard), P8-MF mirrored the +# rule into FlushPendingRangesFrom, and both ladders were re-pinned together on the +# reviewed post-fix bodies. set -u -o pipefail # One row per region: @@. The ORDER is the fixed order the sha list is printed @@ -151,21 +157,32 @@ ShouldUseCaveatTextureFormat@function@MobileGL/MG_Backend/DirectGLES/Utils.cpp" EXPECTED_FUNCTION_COUNT=17 -# The one region born in P3a, so there is no body at P4a's base ref that this phase reviewed: its -# baseline is PINNED and consulted UNCONDITIONALLY (DEVIATIONS D-N/2, and ID-41 for the parent). +# The two flush ladders. FlushPendingRangesFrom was born in P3a, so there is no body at P4a's base +# ref that this phase reviewed; FlushPendingRangesNow was moved past the base ref by a reviewed fix +# (ID-P8-14, dev f973008c: a partial range-invalidating map must not overtake an upload-ring copy +# still queued on the store - Adreno 830 loses the copy). Both baselines are PINNED and consulted +# UNCONDITIONALLY (DEVIATIONS D-N/2, and ID-41 for the parent). # -# THE PIN, AND WHAT RE-PINS IT. Whoever moves this body deliberately replaces BOTH lines and -# writes the decision beside them; a pin with no commit and no decision next to it is a number -# nobody can audit. The parent script carries the identical table and the two must not drift. -# 3e298c9a 37fc94ff... ID-15, P3a: the two-arm shape, reviewed and accepted -# 3dadd4c1 172b0222... ID-41, P5 (b1): [Fix] (DirectGLES): make the extent hostBase is good -# for a parameter of the flush ladder, so tier 1's widening refusal is -# live code the moment a SEG_STAGE snapshot is narrower than the queued -# range. <- CURRENT -PINNED_FUNCTIONS="FlushPendingRangesFrom" -PINNED_BASELINE_REF=3dadd4c1 -PINNED_BASELINE_DECISION=ID-41 -PINNED_SHA_FlushPendingRangesFrom=172b022273db01b16e772d15b269ffcd797fe38c767f7354d83ce113a66040d0 +# THE PIN, AND WHAT RE-PINS IT. Whoever moves one of these bodies deliberately replaces the shas +# AND the commit AND the decision, and writes a line here; a pin with no commit and no decision +# next to it is a number nobody can audit. The parent script carries the identical table and the +# two must not drift. +# 3e298c9a From 37fc94ff... ID-15, P3a: the two-arm shape, reviewed and accepted +# 3dadd4c1 From 172b0222... ID-41, P5 (b1): [Fix] (DirectGLES): make the extent hostBase is +# good for a parameter of the flush ladder, so tier 1's widening +# refusal is live code the moment a SEG_STAGE snapshot is narrower +# than the queued range. +# ac9ab078 Now c40cae66... ID-P8-14, P8-MF: dev f973008c (merged at 37174242) keeps a partial +# From 33bc4cb8... range-invalidating map behind an upload-ring copy still queued on the +# store - Adreno 830 loses the queued copy - in FlushPendingRangesNow; +# ac9ab078 mirrors it into FlushPendingRangesFrom (the stamp on +# the ring tier, the guard in InvalidateFlushAccessFor, the +# whole-buffer exemption kept). <- CURRENT +PINNED_FUNCTIONS="FlushPendingRangesNow FlushPendingRangesFrom" +PINNED_BASELINE_REF=ac9ab078 +PINNED_BASELINE_DECISION=ID-P8-14 +PINNED_SHA_FlushPendingRangesNow=c40cae66f021160478ef9af6bcf5e8ef0bf26721486173695d5257263c97723f +PINNED_SHA_FlushPendingRangesFrom=33bc4cb855b932ed4fb0de44a4cfa7a9be8aca34da267ccd2fc9fedfad4d3328 # The regions the self-test perturbs, one negative control each. FOUR, exactly as D-N requires, and # each is a different shape so that a control which only ever perturbed the easy one cannot leave @@ -502,8 +519,8 @@ extract_ref() { return $? } -# The BASELINE side (). The sixteen ordinary regions are extracted strictly, so a rename of -# one of THOSE is exit 2 rather than a silently short list. FlushPendingRangesFrom then takes the +# The BASELINE side (). The fifteen ordinary regions are extracted strictly, so a rename of +# one of THOSE is exit 2 rather than a silently short list. Each pinned row then takes the # PINNED sha (DEVIATIONS D-N/2) whether or not defines it, and a that defines it # DIFFERENTLY is reported - loudly - because the two answers disagreeing is itself a finding. extract_baseline() { @@ -517,7 +534,7 @@ extract_baseline() { mv -f "$WORK_DIR/$out.spec.tmp" "$WORK_DIR/$out.spec" || return 2 done if ! python3 "$PY" extract "$WORK_DIR/$out.spec" > "$WORK_DIR/$out.sha" 2>"$WORK_DIR/$out.err"; then - say "the baseline ref '$ref' does not define the sixteen unpinned regions exactly once each:" + say "the baseline ref '$ref' does not define the fifteen unpinned regions exactly once each:" sed 's/^/[p4a-untouched] /' "$WORK_DIR/$out.err" >&2 return 2 fi @@ -608,8 +625,8 @@ compare_lists() { say " $labelA ${shaA:-}" say " $labelB ${shaB:-}" if is_pinned_row "$name"; then - # ITS OWN MESSAGE, and that is R-16 rather than decoration: the pinned row and the - # sixteen ref-a rows fail differently and are fixed differently, so a reader who sees + # ITS OWN MESSAGE, and that is R-16 rather than decoration: the pinned rows and the + # fifteen ref-a rows fail differently and are fixed differently, so a reader who sees # only the generic paragraph below goes looking for a diff against that does not # exist. say " $name IS A PINNED ROW ($PINNED_BASELINE_DECISION): its baseline is ALWAYS the sha" @@ -640,10 +657,10 @@ compare_lists() { # A gate that always says "identical" and a gate that is working produce the same green, so the # comparison has to be shown failing. Both controls run: the POSITIVE ones (an untouched copy # compares equal; an edit OUTSIDE the regions is invisible; a baseline that names another sha for -# the PINNED row is overridden by the pin) rule out a comparison that reports every region as -# moved, and the NINE NEGATIVE ones - D-N's four regions, each perturbed at the HEAD of its body -# and again at its TAIL, plus a ONE-TOKEN edit to the pinned ladder compared AGAINST THE PIN -# (ID-41) - rule out the comparison that never reports any, the extraction whose extent stops +# a PINNED row is overridden by the pin) rule out a comparison that reports every region as +# moved, and the TEN NEGATIVE ones - D-N's four regions, each perturbed at the HEAD of its body +# and again at its TAIL, plus a ONE-TOKEN edit to each pinned ladder compared AGAINST THE PIN +# (ID-41; two pinned rows since ID-P8-14) - rule out the comparison that never reports any, the extraction whose extent stops # before the closing brace (F-m2), and a pin that nothing consults. if [ "${1:-}" = "--self-test" ]; then [ $# -eq 1 ] || { say "--self-test takes no other arguments"; exit 2; } @@ -750,18 +767,17 @@ if [ "${1:-}" = "--self-test" ]; then # --- THE PINNED ROW (ID-41) ----------------------------------------------------------------- # TWO more controls, and they exist because none of the ten above can see the pin at all: every # one of them compares one extraction of the working tree against another, so they would all be - # green on a build of this script in which PINNED_SHA_* was never read by anything. The pinned + # green on a build of this script in which PINNED_SHA_* was never read by anything. A pinned # row's whole claim is "the baseline is the PIN, not " (D-N/2, ID-41), and that claim - # needs its own two. + # needs its own two - per pinned row (both ladders since ID-P8-14). for target in $PINNED_FUNCTIONS; do eval "pinned=\$PINNED_SHA_$target" targetSource=$(printf '%s\n' "$REGIONS" | awk -F@ -v n="$target" '$1 == n { print $3 }') [ -n "$targetSource" ] || { say "$target is not one of the regions"; exit 2; } # (1) PIN PRECEDENCE, positive. A baseline that carries some OTHER sha for the pinned row - - # which is the shape of every CI passes, since 37da3c3a DOES define - # FlushPendingRangesFrom and no longer hashes the pin - must come out of apply_pinned_shas - # carrying the PIN. + # which is the shape of every CI passes, since 37da3c3a DOES define both ladders and + # hashes neither pin - must come out of apply_pinned_shas carrying the PIN. grep -v " $target\$" "$WORK_DIR/pristine.sha" > "$WORK_DIR/pinprec.sha" || true printf '%s %s\n' \ "0000000000000000000000000000000000000000000000000000000000000000" "$target" \ @@ -779,7 +795,7 @@ if [ "${1:-}" = "--self-test" ]; then # (2) A ONE-TOKEN EDIT TO THE PINNED LADDER, negative, AGAINST THE PIN. The comparison must go # red, must name the region, and must say the region is PINNED - R-16's "a control asserts its - # OWN failure string": the pinned row and the sixteen ref-a rows are fixed differently, and a + # OWN failure string": the pinned rows and the fifteen ref-a rows are fixed differently, and a # reader who gets only the generic paragraph goes looking for a diff against that does # not exist. rm -rf "$WORK_DIR/pinperturbed"