mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[MG_IntegrationTest, CI, Docs] (Disaggregated): P5e - Magma's named-blit entries get a lane of their own
- Both DirectVulkan.Split.NamedBlit entries carried LABELS "integration-split" and abort under
strict on GetFramebufferBindingSlot@Clear (VulkanRenderer.cpp:7648). P5e does not unbarrier that
field on Magma - it retires there in P7 - so the Espryt lane could not go hard green with them
in it.
- ARGUED RATHER THAN ASSUMED, because the brief allowed either reading: admitting the row instead
is the WORSE option. FieldOwnership.def carries ONE retiring-phase string for both backends
("P5e (Espryt unbarriered), P7 (Magma)"), so a rule that admitted the pair for Magma would admit
it for Espryt too - and an Espryt Clear reading the frontend's binding slot again is exactly the
regression fb's handle arm exists to prevent. The lane split costs two entries; the admission
would cost the gate.
- THE LABEL IS `integration-magma-split`, NOT `integration-split-magma`, and the spelling is
load-bearing: `ctest -L` takes a REGEX, so `-L integration-split` matches a label spelled
`integration-split-magma` as a substring. Measured with the obvious name first: both DirectVulkan
entries were still listed by `ctest -N -L integration-split`, i.e. the split looked done in every
listing and had not happened.
- Its CI step asserts the run is RED **and** that a private log carries the named marker, so
"Magma is expected red" cannot decay into "Magma did not run". Measured: 0/2 under strict with
two logs carrying Fatal{UnmigratedPipeInput, "GetFramebufferBindingSlot@Clear"}, and 2/2 green
without the knob. integration-split is 117 and integration-magma-split is 2.
- CONTRACT-P5E section 7 states the split and the reason it is not an allowlist entry.
This commit is contained in:
@@ -1341,6 +1341,45 @@ jobs:
|
||||
fi
|
||||
echo "integration-split under strict is GREEN, two-sided, with the arming control present"
|
||||
|
||||
# ---- P5e (gl), CONTRACT-P5E §7: MAGMA'S OWN LANE, EXPECTED RED -----------------------
|
||||
#
|
||||
# The two DirectVulkan.Split.NamedBlit entries abort on GetFramebufferBindingSlot@Clear
|
||||
# (VulkanRenderer.cpp:7648). That field retires in P5e ON ESPRYT and in P7 ON MAGMA, and
|
||||
# FieldOwnership.def carries ONE retiring-phase string for both - so admitting the pair to
|
||||
# keep them in the Espryt lane would forgive an Espryt Clear reading the frontend's binding
|
||||
# slot again, which is exactly the regression fb's handle arm exists to prevent. Splitting
|
||||
# the lane costs two entries; admitting the row would cost the gate.
|
||||
#
|
||||
# THE LABEL IS `integration-magma-split` AND THE SPELLING MATTERS: `ctest -L` is a REGEX, so
|
||||
# a label named `integration-split-magma` is still matched by `-L integration-split` and the
|
||||
# entries would never have left. Measured before the rename.
|
||||
#
|
||||
# IT IS ASSERTED RED, WITH ITS MARKER. "Magma is red" must not be allowed to decay into
|
||||
# "Magma did not run": the step fails both when the run goes green (P7 landed early, or the
|
||||
# entries stopped drawing) and when it goes red without the named abort in a private log.
|
||||
- name: Integration-magma-split under strict - expected red until P7 (CONTRACT-P5E section 7)
|
||||
working-directory: build-split
|
||||
env:
|
||||
MOBILEGL_ITEST_REQUIRE_GPU: "1"
|
||||
MOBILEGL_IPC_STRICT_ERRORS: "1"
|
||||
MOBILEGL_TRANSPORT: "inproc"
|
||||
run: |
|
||||
ulimit -c unlimited
|
||||
rc=0
|
||||
ctest -L integration-magma-split --no-tests=error -j 2 > "${RUNNER_TEMP}/strict-magma.txt" 2>&1 || rc=$?
|
||||
tail -5 "${RUNNER_TEMP}/strict-magma.txt"
|
||||
if [ "${rc}" -eq 0 ]; then
|
||||
echo "::error::integration-magma-split went GREEN under strict. Magma is in lockstep for the whole of P5e (ID-90) and GetFramebufferBindingSlot retires there in P7, so these entries are expected to abort. If P7 has landed, delete this step and fold the entries back into integration-split."
|
||||
exit 1
|
||||
fi
|
||||
marker='Fatal{UnmigratedPipeInput, "GetFramebufferBindingSlot@Clear"}'
|
||||
if ! grep -rqF "${marker}" MobileGL/MG_IntegrationTest/p5b-DirectVulkan-*.log 2>/dev/null; then
|
||||
echo "::error::integration-magma-split is red but no private log carries ${marker} - the lane failed for some OTHER reason, which is a defect rather than the expected-red control"
|
||||
grep -rhoE '(Fatal|Admitted)\{[A-Za-z]*, "[^"]*"\}' MobileGL/MG_IntegrationTest/p5b-DirectVulkan-*.log 2>/dev/null | sort | uniq -c | sort -rn | head
|
||||
exit 1
|
||||
fi
|
||||
echo "integration-magma-split is red by design on ${marker}"
|
||||
|
||||
- name: Upload strict lane logs
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v7
|
||||
|
||||
@@ -2257,19 +2257,45 @@ if (MOBILEGL_BUILD_DISAGGREGATED)
|
||||
endif()
|
||||
|
||||
# P5b measured named-blit blockers, exercising both backend bound-form lowerings.
|
||||
#
|
||||
# P5e (gl), CONTRACT-P5E §7: THE TWO BACKENDS GET DIFFERENT LABELS, because under strict they are
|
||||
# answering different questions.
|
||||
#
|
||||
# Both DirectVulkan entries abort on GetFramebufferBindingSlot@Clear (VulkanRenderer.cpp:7648).
|
||||
# That field's row retires in P5e ON ESPRYT and in P7 ON MAGMA, and FieldOwnership.def carries ONE
|
||||
# retiring-phase string for both - so the derived allowlist cannot admit the pair without admitting
|
||||
# it for Espryt too, where it would forgive exactly the regression fb's handle arm exists to
|
||||
# prevent (an Espryt Clear reading the frontend's binding slot again would become a warning line).
|
||||
# The alternative to a label is therefore not "admit one row"; it is "stop the Espryt lane from
|
||||
# being able to see that row at all", which is a real loss of gate strength.
|
||||
#
|
||||
# So the lane is SPLIT rather than the allowlist WIDENED: `integration-split` stays a statement
|
||||
# about Espryt and goes hard green, and the Magma entries get the expected-red step the contract
|
||||
# already promises them for the backend it keeps in lockstep all phase (ID-90).
|
||||
if (MOBILEGL_BUILD_DISAGGREGATED)
|
||||
foreach(namedBlitBackend DirectGLES DirectVulkan)
|
||||
mgl_itest_join_environment(MGL_ITEST_NAMED_BLIT_ENVIRONMENT
|
||||
"MOBILEGL_BACKEND_TYPE=${namedBlitBackend}" "MOBILEGL_TRANSPORT=inproc"
|
||||
"MOBILEGL_ITEST_REQUIRE_GPU=1" "MGITEST_SPLIT_LANE=1"
|
||||
${MGL_ITEST_CAPABILITY_ENV} ${MGL_ITEST_COMMON_ENV})
|
||||
# THE LABEL IS `integration-magma-split` AND NOT `integration-split-magma`, and that is not
|
||||
# a preference: `ctest -L` takes a REGEX, not an exact name, so `-L integration-split`
|
||||
# MATCHES a label spelled `integration-split-magma` as a substring. The obvious name would
|
||||
# have left both entries in the Espryt lane while every listing showed them relabelled - a
|
||||
# split that looks done and is not. Measured: with that spelling
|
||||
# `ctest -N -L integration-split` still listed both DirectVulkan entries.
|
||||
if (namedBlitBackend STREQUAL "DirectVulkan")
|
||||
set(MGL_ITEST_NAMED_BLIT_LABELS "integration-magma-split")
|
||||
else()
|
||||
set(MGL_ITEST_NAMED_BLIT_LABELS "integration-split")
|
||||
endif()
|
||||
foreach(namedBlitCase NamedBlitPreservesBindingsAndRestoresNextVerbsPixels NamedBlitDefaultEndpointPixels)
|
||||
gtest_discover_tests(MobileGLIntegrationTest
|
||||
TEST_PREFIX "${namedBlitBackend}.Split.NamedBlit."
|
||||
TEST_FILTER "F1WireScenario.${namedBlitCase}"
|
||||
DISCOVERY_TIMEOUT 30
|
||||
PROPERTIES
|
||||
LABELS "integration-split"
|
||||
LABELS "${MGL_ITEST_NAMED_BLIT_LABELS}"
|
||||
TIMEOUT ${MGL_ITEST_TIMEOUT}
|
||||
ENVIRONMENT "${MGL_ITEST_NAMED_BLIT_ENVIRONMENT}\;MOBILEGL_LOG_FILE_PATH=${CMAKE_CURRENT_BINARY_DIR}/p5b-${namedBlitBackend}-${namedBlitCase}.log")
|
||||
endforeach()
|
||||
|
||||
@@ -518,6 +518,12 @@ and asserts `vbs > 0` — the server stamped a verb boundary. Everything strict
|
||||
of that stamp and the monolith arm never stamps, so without it "the lane is green" and "strict was
|
||||
never armed" are the same observation.
|
||||
|
||||
**Magma keeps the expected-red step, in a lane of its own.** The two `DirectVulkan.Split.NamedBlit`
|
||||
entries carry `integration-magma-split` (so spelled: `ctest -L` is a regex and
|
||||
`-L integration-split` matches `integration-split-magma`) and are asserted RED on
|
||||
`Fatal{UnmigratedPipeInput, "GetFramebufferBindingSlot@Clear"}`. Admitting that pair instead would
|
||||
forgive the same read on Espryt, where it is this phase's debt — one retiring-phase string serves
|
||||
both backends.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user