diff --git a/MobileGL/MG_IntegrationTest/CMakeLists.txt b/MobileGL/MG_IntegrationTest/CMakeLists.txt index 859a10e2..54c37301 100644 --- a/MobileGL/MG_IntegrationTest/CMakeLists.txt +++ b/MobileGL/MG_IntegrationTest/CMakeLists.txt @@ -3125,13 +3125,23 @@ if (MOBILEGL_BUILD_DISAGGREGATED) PROPERTIES LABELS "${mglItestMagmaLabels}" TIMEOUT ${MGL_ITEST_TIMEOUT} ${mglItestArmProperties} ENVIRONMENT "${mglItestMagmaWireEnvironment}\;MOBILEGL_LOG_FILE_PATH=${CMAKE_CURRENT_BINARY_DIR}/p7-streamedsubdata${mglItestArmLogTag}.log") - gtest_discover_tests(MobileGLIntegrationTest - TEST_PREFIX "DirectVulkan.${mglItestArm}.StaleSerial." - TEST_FILTER "F1WireScenario.StreamedBufferSubDataBeforeEachDrawIsOrdered" - DISCOVERY_TIMEOUT 30 - PROPERTIES LABELS "${mglItestMagmaLabels}" TIMEOUT ${MGL_ITEST_TIMEOUT} - ${mglItestArmProperties} - ENVIRONMENT "${mglItestMagmaWireEnvironment}\;MGITEST_MAGMA_FORCE_STALE_BUFFER_SERIAL=1\;MOBILEGL_LOG_FILE_PATH=${CMAKE_CURRENT_BINARY_DIR}/p7-streamedsubdata-stale${mglItestArmLogTag}.log") + # SPLIT AND SPAWN ONLY - a parity exception, named in scripts/ci/spawn_lane_parity.py + # (MAGMA_SERVER_ENV_KNOB_NO_TCP, the same list as the B2 knobs above), not an omission. + # The knob is read by the SERVER, and the tcp arm's server is the lane fixture + # (scripts/ci/tcp_server_fixture.py) started once from its own environment: an + # entry-level ENVIRONMENT never reaches it, so a Tcp.StaleSerial. entry would run the + # plain Fm case under a name that claims the knob, and could never red. The inproc arm + # hosts the server in the test process and the spawn arm's server inherits the client's + # environment, so on those two the knob is real. + if(mglItestServerEnvKnobArm) + gtest_discover_tests(MobileGLIntegrationTest + TEST_PREFIX "DirectVulkan.${mglItestArm}.StaleSerial." + TEST_FILTER "F1WireScenario.StreamedBufferSubDataBeforeEachDrawIsOrdered" + DISCOVERY_TIMEOUT 30 + PROPERTIES LABELS "${mglItestMagmaLabels}" TIMEOUT ${MGL_ITEST_TIMEOUT} + ${mglItestArmProperties} + ENVIRONMENT "${mglItestMagmaWireEnvironment}\;MGITEST_MAGMA_FORCE_STALE_BUFFER_SERIAL=1\;MOBILEGL_LOG_FILE_PATH=${CMAKE_CURRENT_BINARY_DIR}/p7-streamedsubdata-stale${mglItestArmLogTag}.log") + endif() # `default-color-blit-shape@P7`'s retirement. TWO ENTRIES OVER ONE CASE, and the second # is the only way its arm is reachable here: every surface this lane creates reports # VK_SURFACE_TRANSFORM_IDENTITY, so the scratch path that exists FOR rotation would diff --git a/scripts/ci/spawn_lane_parity.py b/scripts/ci/spawn_lane_parity.py index 2e48d630..a6243c8e 100644 --- a/scripts/ci/spawn_lane_parity.py +++ b/scripts/ci/spawn_lane_parity.py @@ -72,8 +72,12 @@ MAGMA_INPROC_ONLY = ("MagmaRunAheadScenario.", "MagmaWireCacheScenario.") # These are TAILS, not scenarios - the normaliser above keeps the sub-lane tail for the Magma # tier on purpose, so `.MsResolve1.` names the knob entry and `.MsResolve0.` (the default, which # does keep its tcp entry) is untouched. +# +# P7 wave 2-B3 (ID-P7-34) adds `.StaleSerial.`: MGITEST_MAGMA_FORCE_STALE_BUFFER_SERIAL is read by +# the server too (VkBufferManager.cpp), so the streamed subdata-then-draw red-once has the same +# two arms and the same tcp absence. One list, one mechanism, for every server-side knob. MAGMA_SERVER_ENV_KNOB_NO_TCP = (".ShaderMip1.", ".ShaderMip2.", ".DepthMip.", - ".DefaultBlitShape1.", ".MsResolve1.") + ".DefaultBlitShape1.", ".MsResolve1.", ".StaleSerial.") def lane_names(build_dir, label): @@ -103,6 +107,7 @@ def compare_arms(build_dir, tier, labels, inproc_only=(), no_tcp=()): it on spawn, which is where it does most of its work. Returns True on failure, the way main() below counts them.""" + not_on_arm = not_on_arm or {} sets = {} for arm, label in labels.items(): names = lane_names(build_dir, label) - FIXTURE_ENTRIES