[Test] (MG_IntegrationTest/Harness, MG_IntegrationTest/Scenarios, MG_Test/Wire, scripts/data): add in-test controls for the map push and the wait probe

- PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer
- RemoteWaitBoundaryControl.AnUnwaitedPublishIsSeenAsNoWait
This commit is contained in:
2026-10-18 10:01:54 -04:00
parent 1d13ea8280
commit 82a8fb816e
6 changed files with 145 additions and 4 deletions
@@ -103,4 +103,28 @@ namespace MGITest {
#endif
}
bool ForgetLivePersistentMap(unsigned int bufferName) {
#if defined(MGITEST_PERSISTENT_MAP_TRACKER_LIVE)
MobileGL::MG_State::GLState::BufferObject* buffer = FrontendBuffer(bufferName);
if (buffer == nullptr) return false;
MobileGL::MG_Record::PersistentMapTracker::Instance().Forget(*buffer);
return true;
#else
(void)bufferName;
return false;
#endif
}
bool ReannounceLivePersistentMap(unsigned int bufferName) {
#if defined(MGITEST_PERSISTENT_MAP_TRACKER_LIVE)
MobileGL::MG_State::GLState::BufferObject* buffer = FrontendBuffer(bufferName);
if (buffer == nullptr) return false;
buffer->NotePersistentMapStateChanged();
return true;
#else
(void)bufferName;
return false;
#endif
}
} // namespace MGITest
@@ -58,6 +58,15 @@ namespace MGITest {
// Same contract as above: false means "could not look".
bool PeekBufferIsLivePersistentMap(unsigned int bufferName, bool* outLive);
// The two production calls that take a buffer out of the tracker's set and put it back:
// PersistentMapTracker::Forget, which an unmap or a destroy reaches, and
// BufferObject::NotePersistentMapStateChanged, which every map-state change makes. They let
// a scenario show the push is the only route a coherent write takes to the server.
//
// Same contract: false means "could not reach the tracker", and nothing was changed.
bool ForgetLivePersistentMap(unsigned int bufferName);
bool ReannounceLivePersistentMap(unsigned int bufferName);
// Separate-process clients own these counters; the remote Present window
// belongs to the server and cannot report client map acquisitions or bytes.
bool PeekSeparateClientMapStats(unsigned long long* acquisitions, unsigned long long* pushedBytes);
@@ -25,6 +25,9 @@ foreach(listName IN ITEMS @MGL_SPLIT_ARM_TEST_LISTS@)
elseif(entry MATCHES "PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares$")
set_tests_properties("${entry}" PROPERTIES ENVIRONMENT
"MGITEST_PMAP_LANE=1;MGITEST_PERSISTENT_MAP_ARM=emulated;MOBILEGL_PIPE_STATS=1;MOBILEGL_PIPE_STATS_PERIOD=1")
elseif(entry MATCHES "PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer$")
# The case takes the push away, which only the emulated arm has (R-6: every split arm).
set_tests_properties("${entry}" PROPERTIES ENVIRONMENT "MGITEST_PERSISTENT_MAP_ARM=emulated")
elseif(entry MATCHES "LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares$")
# P11 A2: every split arm runs T2, so the arena is declared emulated.
set_tests_properties("${entry}" PROPERTIES ENVIRONMENT "MGITEST_PERSISTENT_MAP_ARM=emulated")
@@ -89,6 +92,8 @@ foreach(scenario @MGL_SPLIT_SMALL_RING_SCENARIOS@)
elseif(entry MATCHES "PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares$")
set_tests_properties("${entry}" PROPERTIES ENVIRONMENT
"MGITEST_PMAP_LANE=1;MGITEST_PERSISTENT_MAP_ARM=emulated;MOBILEGL_PIPE_STATS=1;MOBILEGL_PIPE_STATS_PERIOD=1")
elseif(entry MATCHES "PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer$")
set_tests_properties("${entry}" PROPERTIES ENVIRONMENT "MGITEST_PERSISTENT_MAP_ARM=emulated")
endif()
endforeach()
endforeach()
@@ -445,6 +445,50 @@ void main() { oColor = vec4(vColor, 1.0); }
Gl().EndFrame();
}
// E3(a): the push is the ONLY route a coherent write takes to the server. The cases above go
// green just as well if something else delivered the bytes - an unmap or flush record, a
// whole-buffer re-sync, the live-host-writes state record, an inproc server reading client
// memory - so this one takes the push away and requires the next draw to miss the write.
// Forget is what an unmap or a destroy calls and leaves the mapping itself alone; the
// re-announce is the call every map-state change makes, and the next draw must see the write.
TEST_F(PersistentCoherentMapScenario, ThePushIsTheOnlyRouteAWriteTakesToTheServer) {
if (!Ready() || IsSkipped()) return;
if (!SplitLane::IsSplitLane() || SplitLane::DeclaredPersistentMapArm() != "emulated") {
GTEST_SKIP() << "the push exists only on the emulated arm of a split transport, and this lane "
"declares no such arm (MGITEST_PERSISTENT_MAP_ARM=emulated, set per entry by "
"Harness/SplitLogPaths.cmake.in); monolith adopts the store and has no push";
}
if (!PersistentMapTrackerAvailable()) {
GTEST_SKIP() << "Harness/PersistentMapPeek cannot reach the tracker in this build, so the push "
"cannot be taken away";
}
ArmTheDrawState();
WriteThroughTheMapThenDraw(m_map, 0.0f, 1.0f, 0.0f);
const Image pushed = ReadPixels(Gl().Width(), Gl().Height());
EXPECT_EQ(FirstGLError(), 0u);
ASSERT_TRUE(WholeSurfaceIs(pushed, "green", "the write the push carries, before it is taken away"));
ASSERT_TRUE(ForgetLivePersistentMap(m_vbo)) << "no frontend BufferObject behind GL buffer " << m_vbo;
WriteThroughTheMapThenDraw(m_map, 1.0f, 0.0f, 0.0f);
const Image unpushed = ReadPixels(Gl().Width(), Gl().Height());
EXPECT_EQ(FirstGLError(), 0u);
EXPECT_TRUE(WholeSurfaceIs(unpushed, "green",
"a write through a mapping the tracker has forgotten: red here means "
"something other than the persistent-map push delivered it, and the "
"two cases above would stay green without the push"));
ASSERT_TRUE(ReannounceLivePersistentMap(m_vbo)) << "no frontend BufferObject behind GL buffer " << m_vbo;
glDrawArrays(GL_TRIANGLES, 0, 6);
const Image repushed = ReadPixels(Gl().Width(), Gl().Height());
EXPECT_EQ(FirstGLError(), 0u);
EXPECT_TRUE(WholeSurfaceIs(repushed, "red",
"the same write after the map is announced again: the tracker must "
"push the whole mapping once, or the green above proves nothing"));
AssertOrRecordArm(m_vbo, "after the push was taken away and given back");
Gl().EndFrame();
}
// E3(c) and the black-box half of E3(d). ONE reading case, in a lane of its own, for the
// reason PipeStatsWindow.h gives: the library truncates its log per process, so two readers
// in one lane race under `ctest -j`.
@@ -35,7 +35,13 @@ struct E1BoundaryPeer : Codec::WireVerbSink {
}
};
void CheckE1Boundary(Bool serverCap, MGPWireOp op, Bool expectWait, const char* diagnostic) {
// How the probe's record leaves the client. Rule is EmitAndWait, whose wait rule the cases
// test. PublishOnly encodes through the session's own encoder and publishes with no wait at all,
// so a case can show the probe reads a missing wait as one.
enum class E1Emit { Rule, PublishOnly };
void CheckE1Boundary(Bool serverCap, MGPWireOp op, Bool expectWait, const char* diagnostic,
E1Emit emit = E1Emit::Rule) {
const auto child = RunInChild([=] {
::alarm(15);
const char* barrier = std::getenv("MOBILEGL_IPC_VERB_BARRIER");
@@ -59,10 +65,17 @@ void CheckE1Boundary(Bool serverCap, MGPWireOp op, Bool expectWait, const char*
producer.*PeerMember(ProducerBellTag{}) = &bell;
const MGPApplierReset reset{};
const MGPClear clear{};
const void* payload = op == MGPWireOp::ApplierReset ? static_cast<const void*>(&reset) : &clear;
const Uint64 payloadBytes = op == MGPWireOp::ApplierReset ? sizeof(reset) : sizeof(clear);
// P15: applier_reset is the one kWaitApplied row left (generate_mipmap went async).
const Uint64 seq = op == MGPWireOp::ApplierReset
? session.EmitAndWait(op, &reset, sizeof(reset), nullptr, 0, nullptr, 0, nullptr)
: session.EmitAndWait(op, &clear, sizeof(clear), nullptr, 0, nullptr, 0, nullptr);
Uint64 seq = Codec::kInvalidSeq;
if (emit == E1Emit::PublishOnly) {
seq = session.Encoder().EncodeRecord(op, payload, payloadBytes);
if (seq == Codec::kInvalidSeq) ::_exit(87);
producer.PublishAndNotify(seq);
} else {
seq = session.EmitAndWait(op, payload, payloadBytes, nullptr, 0, nullptr, 0, nullptr);
}
// Observe BEFORE allowing the peer to complete a non-waiting emission.
const Bool parked = bell.entered.load();
const Bool appliedBeforeReturn = session.Control()->Progress.appliedSeq.load() >= seq;
@@ -97,6 +110,19 @@ TEST(RemoteWaitBoundaryControl, AppliedClassWaitsWithRunAheadCap) {
#endif
}
// The control for the case above: the same ApplierReset, published with no wait. The probe has
// to read it as not parked, or a wait that never happened would pass the cases that must wait.
TEST(RemoteWaitBoundaryControl, AnUnwaitedPublishIsSeenAsNoWait) {
#if MGTEST_HAVE_FORK
ASSERT_EQ(MGPipeWaitClassFor(MGPWireOp::ApplierReset), kWaitApplied);
CheckE1Boundary(true, MGPWireOp::ApplierReset, false,
"E1 control: an ApplierReset published without a wait was observed as a wait",
E1Emit::PublishOnly);
#else
GTEST_SKIP() << "E1 requires POSIX child isolation";
#endif
}
TEST(RemoteWaitBoundaryControl, MissingServerCapKeepsClearLockstep) {
#if MGTEST_HAVE_FORK
ASSERT_EQ(MGPipeWaitClassFor(MGPWireOp::Clear), kWaitNone);
+33
View File
@@ -63,6 +63,7 @@
"DirectGLES.MagmaWireReclaimScenario.RespecifiesWithNoDrawBetweenKeepTheLiveStoreCountBounded",
"DirectGLES.MagmaWireReclaimScenario.RespecifyAndDrawEachStoreInOneFrameStaysWithinTheDeferredBudget",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PointSizeDemotionScenario.ACaptureSurvivesAStageThatOnlyReadsThePointSize",
"DirectGLES.PointSizeDemotionScenario.TheDemotionIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.APausedSpanCountsACpuPricedDrawExactlyOnce",
@@ -138,6 +139,7 @@
"DirectVulkan.P4aSeamAuditScenario.ATextureRespecifiedWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PointSizeDemotionScenario.TheDemotionIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.PrimitivesGeneratedNoXfbScenario.TheRerouteIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.SnormAttachmentScenario.SignedNormalizedAttachmentsRoundTripTheirChannelValues",
@@ -660,6 +662,7 @@
"DirectGLES.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectGLES.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -1372,6 +1375,7 @@
"DirectVulkan.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectVulkan.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectVulkan.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectVulkan.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -1697,6 +1701,7 @@
"DirectGLES.ObjectSubsystemControlScenario.ClearingTheP4aBitsStopsTheEmissionsAndNotThePixels",
"DirectGLES.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PipeVerifyArmingScenario.Armed",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -1871,6 +1876,7 @@
"DirectVulkan.P4aSeamAuditScenario.ATextureRespecifiedWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PipeVerifyArmingScenario.Armed",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -2478,6 +2484,7 @@
"DirectGLES.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectGLES.PackBufferReadbackScenario.APackBufferReadPostsNoReplyAndMarksTheBuffer",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PipeVerifyArmingScenario.Armed",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -2729,6 +2736,7 @@
"DirectVulkan.PackBufferReadbackScenario.APackBufferReadPostsNoReplyAndMarksTheBuffer",
"DirectVulkan.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PipeVerifyArmingScenario.Armed",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -3310,6 +3318,7 @@
"DirectGLES.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.PersistentMapArm.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PipeVerifyArmingScenario.Armed",
@@ -3845,6 +3854,7 @@
"DirectGLES.Spawn.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Spawn.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Spawn.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Spawn.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Spawn.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Spawn.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectGLES.Spawn.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -4571,6 +4581,7 @@
"DirectGLES.Split.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Split.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Split.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Split.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Split.PersistentMapArm.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
@@ -4636,6 +4647,7 @@
"DirectGLES.Split.SmallRing.ClearThenReadPixelsScenario.ClearWithNoDrawIsVisibleToDefaultFramebufferReadPixels",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Split.SmallRing.TriangleScenario.AVboBackedTriangleReachesReadPixels",
"DirectGLES.Split.SmallRing.TriangleScenario.TheSameVboAndVaoRedrawAcrossAFrameBoundary",
@@ -5256,6 +5268,7 @@
"DirectGLES.Tcp.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Tcp.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Tcp.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Tcp.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Tcp.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Tcp.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectGLES.Tcp.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -6131,6 +6144,7 @@
"DirectVulkan.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectVulkan.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectVulkan.PipeVerifyArmingScenario.Armed",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReported",
@@ -7907,6 +7921,7 @@
"DirectGLES.Split.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Split.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Split.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Split.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Split.PersistentMapArm.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
@@ -7968,6 +7983,7 @@
"DirectGLES.Split.SmallRing.ClearThenReadPixelsScenario.ClearWithNoDrawIsVisibleToDefaultFramebufferReadPixels",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Split.SmallRing.TriangleScenario.AVboBackedTriangleReachesReadPixels",
"DirectGLES.Split.SmallRing.TriangleScenario.TheSameVboAndVaoRedrawAcrossAFrameBoundary",
@@ -9128,6 +9144,7 @@
"DirectGLES.Split.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Split.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Split.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Split.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Split.PersistentMapArm.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
@@ -9189,6 +9206,7 @@
"DirectGLES.Split.SmallRing.ClearThenReadPixelsScenario.ClearWithNoDrawIsVisibleToDefaultFramebufferReadPixels",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Split.SmallRing.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Split.SmallRing.TriangleScenario.AVboBackedTriangleReachesReadPixels",
"DirectGLES.Split.SmallRing.TriangleScenario.TheSameVboAndVaoRedrawAcrossAFrameBoundary",
@@ -11192,6 +11210,7 @@
"RemoteRunAhead.ClearingTheVerbBarrierDisarmsRunAheadEvenWithTheCapBit",
"RemoteRunAhead.OnlyTheTextureHalfOfResourceSubDataWantsItsReply",
"RemoteRunAhead.TheKnobAloneDoesNotArmRunAheadWithoutTheServersCapBit",
"RemoteWaitBoundaryControl.AnUnwaitedPublishIsSeenAsNoWait",
"RemoteWaitBoundaryControl.AppliedClassWaitsWithRunAheadCap",
"RemoteWaitBoundaryControl.MissingServerCapKeepsClearLockstep",
"RemoteWaitBoundaryControl.ServerCapAllowsClearToRunAhead",
@@ -12327,6 +12346,7 @@
"DirectGLES.ObjectSubsystemControlScenario.ClearingTheP4aBitsStopsTheEmissionsAndNotThePixels",
"DirectGLES.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PipeVerifyArmingScenario.Armed",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -12501,6 +12521,7 @@
"DirectVulkan.P4aSeamAuditScenario.ATextureRespecifiedWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PipeVerifyArmingScenario.Armed",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -12676,6 +12697,7 @@
"DirectGLES.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectGLES.PackBufferReadbackScenario.APackBufferReadPostsNoReplyAndMarksTheBuffer",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.PipeVerifyArmingScenario.Armed",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -12927,6 +12949,7 @@
"DirectVulkan.PackBufferReadbackScenario.APackBufferReadPostsNoReplyAndMarksTheBuffer",
"DirectVulkan.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.PipeVerifyArmingScenario.Armed",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -13430,6 +13453,7 @@
"DirectGLES.Spawn.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Spawn.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Spawn.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Spawn.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Spawn.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Spawn.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectGLES.Spawn.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -14124,6 +14148,7 @@
"DirectGLES.Tcp.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Tcp.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Tcp.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Tcp.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Tcp.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Tcp.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectGLES.Tcp.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -14424,6 +14449,7 @@
"DirectGLES.VerifySplit.MagmaWireReclaimScenario.RespecifiesWithNoDrawBetweenKeepTheLiveStoreCountBounded",
"DirectGLES.VerifySplit.MagmaWireReclaimScenario.RespecifyAndDrawEachStoreInOneFrameStaysWithinTheDeferredBudget",
"DirectGLES.VerifySplit.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.VerifySplit.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.VerifySplit.PointSizeDemotionScenario.ACaptureSurvivesAStageThatOnlyReadsThePointSize",
"DirectGLES.VerifySplit.PointSizeDemotionScenario.TheDemotionIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectGLES.VerifySplit.PrimitivesGeneratedNoXfbScenario.APausedSpanCountsACpuPricedDrawExactlyOnce",
@@ -14498,6 +14524,7 @@
"DirectVulkan.VerifySplit.P4aSeamAuditScenario.ATextureRespecifiedWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.VerifySplit.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.VerifySplit.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.VerifySplit.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.VerifySplit.PointSizeDemotionScenario.TheDemotionIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.VerifySplit.PrimitivesGeneratedNoXfbScenario.TheRerouteIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.VerifySplit.SnormAttachmentScenario.SignedNormalizedAttachmentsRoundTripTheirChannelValues",
@@ -14981,6 +15008,7 @@
"DirectGLES.VerifySplit.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.VerifySplit.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.VerifySplit.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.VerifySplit.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.VerifySplit.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.VerifySplit.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectGLES.VerifySplit.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -15667,6 +15695,7 @@
"DirectVulkan.VerifySplit.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectVulkan.VerifySplit.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectVulkan.VerifySplit.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.VerifySplit.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.VerifySplit.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectVulkan.VerifySplit.PipelineFailureScenario.SamplerArrayInAStructDrawsWithoutKillingTheProcess",
"DirectVulkan.VerifySplit.PipelineFailureScenario.TheSameDrawRepeatsIdenticallyWithNoPoisonedPipelineCache",
@@ -18014,6 +18043,7 @@
"DirectGLES.Verify.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectGLES.Verify.PackBufferReadbackScenario.APackBufferReadPostsNoReplyAndMarksTheBuffer",
"DirectGLES.Verify.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Verify.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Verify.PipeVerifyArmingScenario.Armed",
"DirectGLES.Verify.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectGLES.Verify.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -18113,6 +18143,7 @@
"DirectVulkan.Verify.PackBufferReadbackScenario.APackBufferReadPostsNoReplyAndMarksTheBuffer",
"DirectVulkan.Verify.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.Verify.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.Verify.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.Verify.PipeVerifyArmingScenario.Armed",
"DirectVulkan.Verify.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectVulkan.Verify.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
@@ -18552,6 +18583,7 @@
"DirectGLES.Verify.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectGLES.Verify.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectGLES.Verify.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.Verify.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectGLES.Verify.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectGLES.Verify.PipeVerifyArmingScenario.Armed",
"DirectGLES.Verify.PipeVerifyArmingScenario.CorruptedFieldIsReported",
@@ -19185,6 +19217,7 @@
"DirectVulkan.Verify.PartialUploadOverGpuContentScenario.TwoDistantSubImagesKeepTheGpuClearBetweenThem",
"DirectVulkan.Verify.PersistentCoherentMapScenario.AWriteAfterAFrameBoundaryReachesTheNextFramesDraw",
"DirectVulkan.Verify.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.Verify.PersistentCoherentMapScenario.ThePushIsTheOnlyRouteAWriteTakesToTheServer",
"DirectVulkan.Verify.PersistentCoherentMapScenario.TwoWritesThroughTheCoherentPointerEachReachTheirOwnDraw",
"DirectVulkan.Verify.PipeVerifyArmingScenario.Armed",
"DirectVulkan.Verify.PipeVerifyArmingScenario.CorruptedFieldIsReported",