[CI] (.github/workflows, docs/ci, scripts/ci, scripts/data): keep the census green on the pinned fallback

- when transport_pinned.py cannot prove the exclusion, the inproc-acceptance leg runs every entry under its own JUnit stems, integration-all and integration-staged-copy-all
- skip_census.py: an optional row with "instead_of" stands in for a trimmed lane; when it ran, that lane may be absent, and it is required otherwise; self-test on a fallback-shaped directory (green, and red on a vanished name, a new skip or neither lane); write from a fallback run keeps the row of the lane the fallback stood in for
- skip census: two optional -all rows for the inproc-acceptance leg, names borrowed from the monolith-control rows and skip lists equal to the old inproc-acceptance lists (285 and 49)
- the integration legs compute the ctest selection only on the disaggregation branches, which are the only ones that read it
This commit is contained in:
2026-10-17 17:13:50 -04:00
parent 8aa92c357b
commit 43e671f027
4 changed files with 434 additions and 20 deletions
+17 -10
View File
@@ -498,11 +498,16 @@ jobs:
ulimit -c unlimited
# An entry whose own ENVIRONMENT sets MOBILEGL_TRANSPORT overrides the one variable the two
# legs differ in, so it runs identically in both; the inproc leg leaves those entries (and
# the fixtures only they need) to the monolith-control leg, which every branch runs.
# transport_pinned.py proves the trimmed selection lost exactly them, or this leg runs
# them all as before; the monolith-control leg proves it ran every one of them.
ctest -L integration-gpu --show-only=json-v1 > "${RUNNER_TEMP}/all.json"
# the fixtures only they need) to the monolith-control leg, which every branch runs, and
# that leg proves it ran every one of them. When transport_pinned.py cannot prove the
# trimmed selection lost exactly them, this leg runs every entry and writes its JUnits
# under -all stems, which the skip census holds to the full name lists.
EXCLUDE=()
MAIN_JUNIT=integration
STAGED_JUNIT=integration-staged-copy
if [ "${MOBILEGL_CI_DISAGGREGATED}" = ON ]; then
ctest -L integration-gpu --show-only=json-v1 > "${RUNNER_TEMP}/all.json"
fi
if [ "${MOBILEGL_TRANSPORT}" = inproc ]; then
if python3 ../scripts/ci/transport_pinned.py select "${RUNNER_TEMP}/all.json" --out "${RUNNER_TEMP}/transport-pinned.txt" \
&& ctest -L integration-gpu --exclude-from-file "${RUNNER_TEMP}/transport-pinned.txt" --show-only=json-v1 \
@@ -511,7 +516,9 @@ jobs:
"${RUNNER_TEMP}/trimmed.json" --out "${RUNNER_TEMP}/transport-pinned.json"; then
EXCLUDE=(--exclude-from-file "${RUNNER_TEMP}/transport-pinned.txt")
else
echo "::warning::the transport-pinned exclusion did not prove itself, so this leg runs every integration-gpu entry"
echo "::warning::the transport-pinned exclusion did not prove itself, so this leg runs every integration-gpu entry (integration-all.xml, integration-staged-copy-all.xml)"
MAIN_JUNIT=integration-all
STAGED_JUNIT=integration-staged-copy-all
fi
fi
# Second, filtered pass: with the range-invalidating map flush disabled,
@@ -521,16 +528,16 @@ jobs:
# coverage. The flag is NOT baked into the ctest ENVIRONMENT properties,
# so an inline env reaches the test processes (unlike the ICD pin above).
if [ "${{ secrets.ACTIONS_STEP_DEBUG }}" = "true" ]; then
ctest -V -L integration-gpu "${EXCLUDE[@]}" --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/integration.xml"
ctest -V -L integration-gpu "${EXCLUDE[@]}" --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/${MAIN_JUNIT}.xml"
MOBILEGL_ESPRYT_DISABLE_INVALIDATE_FLUSH=1 ctest -V -L integration-gpu "${EXCLUDE[@]}" -j "$(nproc)" \
-R 'Buffer|Readback|Atomic|Ssbo|Arena' --no-tests=error --output-junit "${RUNNER_TEMP}/integration-staged-copy.xml"
-R 'Buffer|Readback|Atomic|Ssbo|Arena' --no-tests=error --output-junit "${RUNNER_TEMP}/${STAGED_JUNIT}.xml"
else
ctest --output-on-failure -L integration-gpu "${EXCLUDE[@]}" --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/integration.xml"
ctest --output-on-failure -L integration-gpu "${EXCLUDE[@]}" --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/${MAIN_JUNIT}.xml"
MOBILEGL_ESPRYT_DISABLE_INVALIDATE_FLUSH=1 ctest --output-on-failure -L integration-gpu "${EXCLUDE[@]}" -j "$(nproc)" \
-R 'Buffer|Readback|Atomic|Ssbo|Arena' --no-tests=error --output-junit "${RUNNER_TEMP}/integration-staged-copy.xml"
-R 'Buffer|Readback|Atomic|Ssbo|Arena' --no-tests=error --output-junit "${RUNNER_TEMP}/${STAGED_JUNIT}.xml"
fi
if [ "${MOBILEGL_TRANSPORT}" = monolith ] && [ "${MOBILEGL_CI_DISAGGREGATED}" = ON ]; then
python3 ../scripts/ci/transport_pinned.py require-ran "${RUNNER_TEMP}/all.json" "${RUNNER_TEMP}/integration.xml"
python3 ../scripts/ci/transport_pinned.py require-ran "${RUNNER_TEMP}/all.json" "${RUNNER_TEMP}/${MAIN_JUNIT}.xml"
fi
# Both backend roles must execute inproc in the primary artifact.
+1 -1
View File
@@ -49,7 +49,7 @@ them wrong.
| 2026-10-17 | the compile of `build-linux-split` on the disaggregation branches (when `build-guard` proves the configurations identical) | Test / `build-linux-split` | it built the library `build-linux` builds there, from a configuration that differs only by the benchmarks (211 paired runs never disagreed); it delayed every split consumer by up to 9 minutes | the `build-guard` job configures both lines on one runner and compares them with `build_fingerprint.py` (cache, compile commands, link statements, CTest files; benchmarks excluded; one shared FetchContent directory, a failed configure or one killed after 10 minutes retried once) and records its image and compiler; only the verdict `identical` lets the consumers take `build-linux`'s artifacts, and only a Release one, while `different` (annotated as a warning) and `unknown` (a configure that failed twice, any error, too little evidence; a notice) keep both builds and the full split lanes; the guard job's own failure never fails the run; `build-linux` runs the link ratchet on every disaggregation build (artifact `link-ratchet-primary`) and integration-split reds on it when it takes that build; dev runs no guard and always builds |
| 2026-10-17 | `Transport A/B (monolith vs inproc)` (skip-census lanes `arm-monolith`, `arm-inproc` now optional) | Test / `integration-split` | with `build-linux` reused it repeats the integration job's two legs on the same library (79 paired runs, no one-sided red) | the integration legs; `Default-knob resolution check` (disaggregation branches) reads 'Split lanes' own run and proves, from every passed entry's client log, strict=0, role-split-state=1 and run-ahead=1 unless pinned (`split_log_paths.py ipc-config`); A/B still runs when a default differs or the build is not reused |
| 2026-10-17 | `Unit tests on the split runtime` (skip-census lane `unit-split` now optional) | Test / `integration-split` | with `build-linux` reused the test job runs the same unit lane on the same build (182 paired runs; the one recurring one-sided red was a fixed test race) | the test job, which now carries `MOBILEGL_ITEST_REQUIRE_GPU=1` and `libegl-mesa0` on the three branches; the strict unit step is unchanged |
| 2026-10-17 | the integration-gpu entries that pin their own `MOBILEGL_TRANSPORT` (804 inproc, 1446 spawn, 131 monolith) and the 12 `TcpServer` fixture entries only they need, in the inproc-acceptance leg (both passes) | Test / `integration` (inproc-acceptance) | their pin overrides the only variable the two legs differ in, so they ran identically in both (173 paired runs; the one one-sided red was a port bind fixed by cde6512b) | the monolith-control leg, which runs them on every branch; `transport_pinned.py` proves per run that the trimmed selection lost exactly that population (else the leg runs everything) and that the monolith-control leg ran every one; skip census: the monolith-control lanes list their own names and the inproc-acceptance lanes drop the pinned ones |
| 2026-10-17 | the integration-gpu entries that pin their own `MOBILEGL_TRANSPORT` (804 inproc, 1446 spawn, 131 monolith) and the 12 `TcpServer` fixture entries only they need, in the inproc-acceptance leg (both passes) | Test / `integration` (inproc-acceptance) | their pin overrides the only variable the two legs differ in, so they ran identically in both (173 paired runs; the one one-sided red was a port bind fixed by cde6512b) | the monolith-control leg, which runs them on every branch; `transport_pinned.py` proves per run that the trimmed selection lost exactly that population and that the monolith-control leg ran every one; when it cannot, the leg runs everything under the JUnit stems `integration-all` and `integration-staged-copy-all`; skip census: the monolith-control lanes list their own names, the inproc-acceptance lanes drop the pinned ones, and two optional `-all` rows (the full names, the old skip lists) stand in for them on that fallback |
| 2026-10-17 | `Strict split lane` on the disaggregation branches (dev keeps it) | Test / `integration-split-strict` | with the role-split state defaulting on, its environment equals the dual-block census lane's, whose entries are a superset (31 paired runs after the flip, never red only in the strict lane) | the dual-block step's first run leaves the knob at its default, proves per entry from its client log that strict, the dual block and run-ahead resolved on (`ipc-config`), writes the integration-split part of its JUnit as `strict-split.xml` (every name exactly once, `junit_tally.py --select-from`), and makes the strict lane's checks on it (hard green, two-sided marker census, StrictArming ran); a default that changed reruns the census with the knob set |
| 2026-10-17 | `Magma split lane (strict, dual-block)` on the disaggregation branches when the dual-block step proved its defaults | Test / `integration-split-strict` | the dual-block census run covers the `integration-magma-split` label in the same environment | the dual-block census run |
| 2026-10-17 | the 75 retrace-split inproc rows other than OpenRA's, when `build-linux-split` reuses `build-linux` | Test / `retrace-split` | the retrace job's inproc-acceptance rows replay the same cases on the same library, strict and with the dual block and run-ahead on; no one-sided pair since 10-05 | the inproc-acceptance rows, which now prove per leg from the client log that they run with strict=1, role-split-state=1 and run-ahead=1 (`MGTRACE_EXPECT_IPC`) and keep a refusal census; every remaining retrace-split leg proves its defaults (strict=0, role-split-state=1, run-ahead=1) and a changed default reds every leg with the rows to restore; `trace_cases.py --self-test-split-matrix` (disaggregation branches) proves every dropped row is an acceptance row; OpenRA's inproc rows stay for the wire evidence |
+68 -9
View File
@@ -24,7 +24,9 @@ into the tree (scripts/data/skip_census_baseline.json):
* new lanes and new names are reported, never red;
* a lane whose row carries "optional": "<reason>" runs only on some paths (for example only when
a build-equality guard falls back); its absence is a note, and when it runs it is checked
like any other lane.
like any other lane;
* an optional row that also carries "instead_of": "<lane>" is that lane's whole-run fallback:
when it ran, the lane it stands in for may be absent (a note), and is required otherwise.
A deliberate retirement edits the baseline in the same commit and names the cases in the commit
message (PLAN-P13 §4.2).
@@ -113,31 +115,45 @@ def resolve_baseline(baseline):
names = row['names'] if 'names' in row else baseline[row['names_from']]['names']
resolved[lane] = {'names': sorted({normalize_name(n) for n in names}),
'skipped': sorted({normalize_name(n) for n in row['skipped']})}
if row.get('optional'):
resolved[lane]['optional'] = row['optional']
for key in ('optional', 'instead_of'):
if row.get(key):
resolved[lane][key] = row[key]
return resolved
def keep_optional_rows(written, previous):
"""`write` from a run that did not run an optional lane keeps that lane's row, with its names
resolved, and every optional row keeps its reason."""
resolved, and every optional row keeps its reason. A run where an `instead_of` row stood in
did not run the lane it replaces, so that lane keeps its previous row too."""
resolved = resolve_baseline(previous)
def keep(lane):
written[lane] = {'skipped': resolved[lane]['skipped'], 'names': resolved[lane]['names']}
for lane, row in previous.items():
if not row.get('optional'):
continue
if lane in written:
written[lane]['optional'] = row['optional']
else:
written[lane] = {'skipped': resolved[lane]['skipped'], 'names': resolved[lane]['names'],
'optional': row['optional']}
if lane not in written:
keep(lane)
for key in ('optional', 'instead_of'):
if row.get(key):
written[lane][key] = row[key]
for lane, row in list(written.items()):
stood_in = row.get('instead_of')
if stood_in and stood_in not in written and stood_in in previous:
keep(stood_in)
return dict(sorted(written.items()))
def compare(lanes, baseline):
red, info = [], []
stood_in = {row['instead_of']: lane for lane, row in baseline.items()
if row.get('optional') and row.get('instead_of') and lane in lanes}
for lane, known in sorted(baseline.items()):
current = lanes.get(lane)
if current is None:
if lane in stood_in:
info.append(f'lane {lane}: not run ({stood_in[lane]} ran instead)')
continue
if known.get('optional'):
info.append(f"lane {lane}: not run (optional: {known['optional']})")
continue
@@ -254,6 +270,49 @@ def self_test():
assert quiet(['check', str(lost), '--baseline', str(optional)]) == 1, 'a plain lane is still required'
kept = keep_optional_rows(to_baseline(collect(good)), rows)
assert kept['junit-other/other'] == rows['junit-other/other'], 'write keeps an absent optional row'
# A whole-run fallback lane stands in for a trimmed one: the leg ran everything under its
# own stem, so the trimmed lane is absent and the full one is held to the full names.
trimmed = tmp / 'trimmed.json'
rows = json.loads(base.read_text())
rows['junit-leg/full'] = {'skipped': ['B'], 'names_from': 'junit-unit/unit'}
rows['junit-leg/trimmed'] = {'skipped': [], 'names': ['A']}
rows['junit-leg/trimmed-all'] = {'skipped': ['B'], 'names_from': 'junit-unit/unit',
'optional': 'the fallback', 'instead_of': 'junit-leg/trimmed'}
trimmed.write_text(json.dumps(rows))
def leg(name, trimmed_cases=None, all_cases=None):
d = tmp / name
junit(d / 'junit-unit' / 'unit.xml', [('A', 'pass'), ('B', 'skip'), ('C', 'pass')])
junit(d / 'junit-leg' / 'full.xml', [('A', 'pass'), ('B', 'skip'), ('C', 'pass')])
if trimmed_cases is not None:
junit(d / 'junit-leg' / 'trimmed.xml', trimmed_cases)
if all_cases is not None:
junit(d / 'junit-leg' / 'trimmed-all.xml', all_cases)
return str(d)
full_run = [('A', 'pass'), ('B', 'skip'), ('C', 'pass')]
assert quiet(['check', leg('trim-ok', [('A', 'pass')]), '--baseline', str(trimmed)]) == 0, \
'the trimmed lane alone is green'
assert quiet(['check', leg('fallback-ok', None, full_run), '--baseline', str(trimmed)]) == 0, \
'the fallback lane in place of the trimmed one is green'
assert quiet(['check', leg('fallback-lost', None, full_run[:2]), '--baseline', str(trimmed)]) == 1, \
'a name that disappeared from the fallback lane is red'
assert quiet(['check', leg('fallback-skip', None, [('A', 'skip')] + full_run[1:]),
'--baseline', str(trimmed)]) == 1, 'a new skip in the fallback lane is red'
assert quiet(['check', leg('neither'), '--baseline', str(trimmed)]) == 1, \
'with neither lane the trimmed one is still required'
assert keep_optional_rows({}, rows)['junit-leg/trimmed-all']['instead_of'] == 'junit-leg/trimmed', \
'write keeps instead_of'
rewritten = tmp / 'rewritten.json'
rewritten.write_text(trimmed.read_text())
assert quiet(['write', leg('rewrite-fallback', None, full_run), '--baseline', str(rewritten)]) == 0
kept = json.loads(rewritten.read_text())
assert kept.get('junit-leg/trimmed') == {'skipped': [], 'names': ['A']}, \
'write from a fallback run keeps the row of the lane the fallback stood in for'
assert kept['junit-leg/trimmed-all']['instead_of'] == 'junit-leg/trimmed'
assert quiet(['check', leg('rewrite-trim-ok', [('A', 'pass')]), '--baseline', str(rewritten)]) == 0, \
'the rewritten baseline still passes a normal run'
assert quiet(['check', leg('rewrite-trim-lost', [('B', 'skip')]), '--baseline', str(rewritten)]) == 1, \
'the rewritten baseline still reds a name gone from the trimmed lane'
assert quiet(['check', str(good), '--baseline', str(tmp / 'none.json')]) == 1, 'no baseline must be red'
assert normalize_name('S/T.Case/Leaf # GetParam() = 64-byte object <46-CA 08-EB>') == 'S/T.Case/Leaf'
assert normalize_name('T.Plain') == 'T.Plain'
+348
View File
@@ -1610,6 +1610,298 @@
"DirectVulkan.XfbRepeatedCaptureScenario.AVertexOnlyAdjacencyCaptureRecords"
]
},
"junit-integration-inproc-acceptance-inproc/integration-all": {
"skipped": [
"DirectGLES.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
"DirectGLES.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
"DirectGLES.AsyncOn.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
"DirectGLES.ClipDistanceScenario.ADisabledClipDistanceRemovesNothing",
"DirectGLES.ClipDistanceScenario.TheEnablesAreIndependentPerDistance",
"DirectGLES.CsoContentAddressingScenario.TheBlendToggleMintsBoundedlyWithContentAddressingAndPerBindWithout",
"DirectGLES.CubeFaceReadbackScenario.CubeMapViewOfAnArrayReadsTheFaceEachZOffsetNames",
"DirectGLES.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.F1WireScenario.CopyImageInPlaceOverlapDeclinesAndLeavesTheLevelAlone",
"DirectGLES.F1WireScenario.EachWireFrameHasZeroResidualPulls",
"DirectGLES.F1WireScenario.GenerateMipmapDepthStencilDeclinesAndKeepsTheSession",
"DirectGLES.F1WireScenario.GenerateMipmapDepthWithoutNativeBlitPixels",
"DirectGLES.F1WireScenario.GenerateMipmapWithoutAShaderArmShapeDeclinesAndKeepsTheSession",
"DirectGLES.F1WireScenario.GenerateMipmapWithoutNativeBlitPixels",
"DirectGLES.F1WireScenario.MultisampleBlitFromASingleSampleSourceDeclinesAndKeepsTheSession",
"DirectGLES.F1WireScenario.MultisampleBlitOntoAMultisampleDestinationDeclinesAndKeepsTheSession",
"DirectGLES.F1WireScenario.ShortUniformBufferRangePadsMissingBytes",
"DirectGLES.F1WireScenario.SubWordUniformBufferRangePadsMissingBytes",
"DirectGLES.F1WireScenario.UnalignedAtomicCounterRangeDeclinesAndTheSessionLives",
"DirectGLES.FencePollScenario.PacedFrameFenceWaitsBench",
"DirectGLES.ForcedDepthStencilEmulation.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.ForcedDepthStencilEmulation.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
"DirectGLES.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
"DirectGLES.Glsl420DeclarationScenario.AnArrayOfSamplerArraysIsHonouredOrDeclinedCleanly",
"DirectGLES.HandleRecycleScenario.ABufferAtARecycledAddressDoesNotInheritItsPredecessorsContents",
"DirectGLES.HandleRecycleScenario.AFramebufferAtARecycledAddressDoesNotInheritItsPredecessorsTwin",
"DirectGLES.HandleRecycleScenario.AProgramAtARecycledAddressDoesNotInheritItsPredecessorsShaderCso",
"DirectGLES.HandleRecycleScenario.ARenderbufferAtARecycledAddressDoesNotInheritItsPredecessorsStorage",
"DirectGLES.HandleRecycleScenario.ASamplerAtARecycledAddressDoesNotInheritItsPredecessorsParameters",
"DirectGLES.HandleRecycleScenario.ATextureAtARecycledAddressDoesNotInheritItsPredecessorsSamplerView",
"DirectGLES.HandleRecycleScenario.ATextureAtARecycledAddressDoesNotInheritItsPredecessorsTwin",
"DirectGLES.HandleRecycleScenario.AVertexArrayAtARecycledAddressDoesNotInheritItsPredecessorsVertexBufferSet",
"DirectGLES.HandleRecycleScenario.AVertexArrayAtARecycledAddressDoesNotInheritItsPredecessorsVertexInput",
"DirectGLES.HandleRecycleScenario.DestroyedFramebuffersReturnTheirFramebufferSlots",
"DirectGLES.HandleRecycleScenario.DestroyedProgramsReturnTheirShaderCsoSlots",
"DirectGLES.HandleRecycleScenario.DestroyedRenderbuffersReturnTheirRenderbufferSlots",
"DirectGLES.HandleRecycleScenario.DestroyedSamplersReturnTheirSamplerCsoSlots",
"DirectGLES.HandleRecycleScenario.DestroyedTexturesReturnTheirSamplerViewSlots",
"DirectGLES.HandleRecycleScenario.DestroyedTexturesReturnTheirTextureSlots",
"DirectGLES.HandleRecycleScenario.DestroyedVertexArraysReturnTheirVertexElementsSlots",
"DirectGLES.HandleRecycleScenario.EvictedPipelineCompositesReturnTheirShaderCsoSlots",
"DirectGLES.ImageBindableRemintScenario.GpuClearSurvivesTheFirstImageBindingOfAView",
"DirectGLES.ImageLoadStoreSsoScenario.AnImageArrayAlongsideAnotherDescriptorKeepsBothBindings",
"DirectGLES.ImageTargetKindScenario.IgnoresLayerForTexture2DMultisample",
"DirectGLES.ImageTargetKindScenario.LoadsTexture2DMultisample",
"DirectGLES.ImageTargetKindScenario.LoadsTexture2DMultisampleArray",
"DirectGLES.ImageTargetKindScenario.StoresTexture2DMultisample",
"DirectGLES.ImageTargetKindScenario.StoresTexture2DMultisampleArray",
"DirectGLES.IterationRPFirstReductionScenario.IndexedInputTopologyAndReduction",
"DirectGLES.IterationRPFirstReductionScenario.SampledRgba32fFirstAverage",
"DirectGLES.IterationRPProgram203Scenario.FixedCompleteInputProducesFixedCompleteGoldenOutput",
"DirectGLES.IterationRPScratchFixScenario.FixtureShapedReductionSumsEveryInvocation",
"DirectGLES.IterationRPScratchFixScenario.WideFixtureShapedReductionSumsEveryInvocation",
"DirectGLES.LargeArenaAdoptionScenario.ASessionThatCannotRunT0FallsBackToT2OnceByName",
"DirectGLES.LargeArenaAdoptionScenario.AStreamSessionRefusesTheAdoptTierOnceByName",
"DirectGLES.LargeArenaAdoptionScenario.AnAdoptionCostsExactlyOneMapPersistentRoundtrip",
"DirectGLES.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
"DirectGLES.MagmaRunAheadScenario.GpuClearSurvivesTheFirstStorageImageUpgrade",
"DirectGLES.MagmaRunAheadScenario.MixedNativeAndConvertedGpuVertexStreamsKeepTheirReservation",
"DirectGLES.MagmaRunAheadScenario.PresentCreditActuallyParksTheClientAtItsConfiguredLimit",
"DirectGLES.MagmaRunAheadScenario.QueuedBufferVersionsAndDeletedNameReuseKeepTheirPixels",
"DirectGLES.MagmaRunAheadScenario.QueuedGpuWritesReadBackTheLastDispatchBytes",
"DirectGLES.MagmaRunAheadScenario.QueuedProgramRebindsKeepEachUniformSnapshot",
"DirectGLES.MagmaRunAheadScenario.TextureUploadCannotOvertakeThePreviouslyQueuedDraw",
"DirectGLES.MagmaVertexLayoutScenario.AnUnmappableVertexFormatDeclinesTheDrawInsteadOfEndingTheSession",
"DirectGLES.MagmaVertexLayoutScenario.AnUnreadUnmappableArrayDoesNotStopTheRestOfTheDraw",
"DirectGLES.MagmaWireCacheScenario.FramebufferReattachmentDistinguishesMipAndLayer",
"DirectGLES.MagmaWireCacheScenario.FramebufferRespecifyRebindsTheNewNativeImage",
"DirectGLES.MagmaWireCacheScenario.FramebufferSrgbPolicyAtoBtoAUsesDistinctFormats",
"DirectGLES.MagmaWireCacheScenario.FramebuffersAtoBtoAKeepDistinctAttachments",
"DirectGLES.MagmaWireCacheScenario.SamplerRespecifyKeepsOldAndNewNativeImages",
"DirectGLES.MagmaWireCacheScenario.SamplerSwizzleAtoBtoAKeepsEachQueuedPixel",
"DirectGLES.MagmaWireCacheScenario.SamplerViewsDistinguishMipLayerAndViewType",
"DirectGLES.MagmaWireReclaimScenario.ADrawAfterTheEarlyReclaimFollowsTheNewStoreNotTheMemoizedHandle",
"DirectGLES.MagmaWireReclaimScenario.DescriptorSetsRewindInsideOneLongFrameAfterTheirSubmitRetires",
"DirectGLES.MagmaWireReclaimScenario.ManySmallRespecifyAndDrawRoundsStayUnderTheStoreCountCeiling",
"DirectGLES.MagmaWireReclaimScenario.RespecifiesWithNoDrawBetweenKeepTheLiveStoreCountBounded",
"DirectGLES.MagmaWireReclaimScenario.RespecifyAndDrawEachStoreInOneFrameStaysWithinTheDeferredBudget",
"DirectGLES.ObjectSubsystemControlScenario.ASamplerBitWithoutTheTextureBitIsRefusedAndNamed",
"DirectGLES.ObjectSubsystemControlScenario.ATextureBitWithoutTheSamplerBitIsRefusedAndNamed",
"DirectGLES.ObjectSubsystemControlScenario.ClearingTheP4aBitsStopsTheEmissionsAndNotThePixels",
"DirectGLES.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectGLES.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectGLES.PipeVerifyArmingScenario.Armed",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectGLES.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
"DirectGLES.PointSizeDemotionScenario.ACaptureSurvivesAStageThatOnlyReadsThePointSize",
"DirectGLES.PointSizeDemotionScenario.TheDemotionIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectGLES.PoisonOmissionScenario.OmittedFieldAbortsOnThatVerb",
"DirectGLES.PoisonOmissionScenario.TheSequenceThePoisonControlsRun",
"DirectGLES.PoisonOmissionScenario.WithoutOmissionCompletes",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.APausedSpanCountsACpuPricedDrawExactlyOnce",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.APausedSpanCountsATessellatedPatchExactlyOnce",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.APausedSpanCountsAnInstancedDrawExactlyOnce",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.ASpanMixingActiveAndInactiveDrawsAccumulatesBoth",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.CountsADrawMadeWithNoCaptureSpan",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.CountsATessellatedPatchWithNoCaptureSpan",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.CountsUnderRasterizerDiscardWithNoCaptureSpan",
"DirectGLES.PrimitivesGeneratedNoXfbScenario.TheRerouteIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectGLES.ResourceSubsystemControlScenario.ClearingTheP3aBitsStopsTheEmissionsAndNotThePixels",
"DirectGLES.ResourceSubsystemOn.LargeArenaAdoptionScenario.ASessionThatCannotRunT0FallsBackToT2OnceByName",
"DirectGLES.ResourceSubsystemOn.LargeArenaAdoptionScenario.AStreamSessionRefusesTheAdoptTierOnceByName",
"DirectGLES.ResourceSubsystemOn.LargeArenaAdoptionScenario.AnAdoptionCostsExactlyOneMapPersistentRoundtrip",
"DirectGLES.Spawn.ClipDistanceScenario.ADisabledClipDistanceRemovesNothing",
"DirectGLES.Spawn.ClipDistanceScenario.TheEnablesAreIndependentPerDistance",
"DirectGLES.Spawn.ForcedDs.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.Spawn.ForcedDs.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.Spawn.Glsl420DeclarationScenario.AnArrayOfSamplerArraysIsHonouredOrDeclinedCleanly",
"DirectGLES.Spawn.ImageTargetKindScenario.IgnoresLayerForTexture2DMultisample",
"DirectGLES.Spawn.ImageTargetKindScenario.LoadsTexture2DMultisample",
"DirectGLES.Spawn.ImageTargetKindScenario.LoadsTexture2DMultisampleArray",
"DirectGLES.Spawn.ImageTargetKindScenario.StoresTexture2DMultisample",
"DirectGLES.Spawn.ImageTargetKindScenario.StoresTexture2DMultisampleArray",
"DirectGLES.Spawn.IterationRPFirstReductionScenario.IndexedInputTopologyAndReduction",
"DirectGLES.Spawn.IterationRPFirstReductionScenario.SampledRgba32fFirstAverage",
"DirectGLES.Spawn.IterationRPProgram203Scenario.FixedCompleteInputProducesFixedCompleteGoldenOutput",
"DirectGLES.Spawn.IterationRPScratchFixScenario.FixtureShapedReductionSumsEveryInvocation",
"DirectGLES.Spawn.IterationRPScratchFixScenario.WideFixtureShapedReductionSumsEveryInvocation",
"DirectGLES.Spawn.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.Spawn.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.Spawn.Xfb.XfbRepeatedCaptureScenario.AVertexOnlyAdjacencyCaptureRecords",
"DirectGLES.Split.ClipDistanceScenario.ADisabledClipDistanceRemovesNothing",
"DirectGLES.Split.ClipDistanceScenario.TheEnablesAreIndependentPerDistance",
"DirectGLES.Split.ForcedDs.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.Split.ForcedDs.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.Split.Glsl420DeclarationScenario.AnArrayOfSamplerArraysIsHonouredOrDeclinedCleanly",
"DirectGLES.Split.ImageTargetKindScenario.IgnoresLayerForTexture2DMultisample",
"DirectGLES.Split.ImageTargetKindScenario.LoadsTexture2DMultisample",
"DirectGLES.Split.ImageTargetKindScenario.LoadsTexture2DMultisampleArray",
"DirectGLES.Split.ImageTargetKindScenario.StoresTexture2DMultisample",
"DirectGLES.Split.ImageTargetKindScenario.StoresTexture2DMultisampleArray",
"DirectGLES.Split.IterationRPFirstReductionScenario.IndexedInputTopologyAndReduction",
"DirectGLES.Split.IterationRPFirstReductionScenario.SampledRgba32fFirstAverage",
"DirectGLES.Split.IterationRPProgram203Scenario.FixedCompleteInputProducesFixedCompleteGoldenOutput",
"DirectGLES.Split.IterationRPScratchFixScenario.FixtureShapedReductionSumsEveryInvocation",
"DirectGLES.Split.IterationRPScratchFixScenario.WideFixtureShapedReductionSumsEveryInvocation",
"DirectGLES.Split.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.Split.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.Split.Xfb.XfbRepeatedCaptureScenario.AVertexOnlyAdjacencyCaptureRecords",
"DirectGLES.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.StorageBufferRegrowScenario.NStorageDefinitionsCostNMapPersistentRoundtripsNotOnePerDraw",
"DirectGLES.Tcp.ClipDistanceScenario.ADisabledClipDistanceRemovesNothing",
"DirectGLES.Tcp.ClipDistanceScenario.TheEnablesAreIndependentPerDistance",
"DirectGLES.Tcp.ForcedDs.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.Tcp.ForcedDs.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.Tcp.Glsl420DeclarationScenario.AnArrayOfSamplerArraysIsHonouredOrDeclinedCleanly",
"DirectGLES.Tcp.ImageTargetKindScenario.IgnoresLayerForTexture2DMultisample",
"DirectGLES.Tcp.ImageTargetKindScenario.LoadsTexture2DMultisample",
"DirectGLES.Tcp.ImageTargetKindScenario.LoadsTexture2DMultisampleArray",
"DirectGLES.Tcp.ImageTargetKindScenario.StoresTexture2DMultisample",
"DirectGLES.Tcp.ImageTargetKindScenario.StoresTexture2DMultisampleArray",
"DirectGLES.Tcp.IterationRPFirstReductionScenario.IndexedInputTopologyAndReduction",
"DirectGLES.Tcp.IterationRPFirstReductionScenario.SampledRgba32fFirstAverage",
"DirectGLES.Tcp.IterationRPProgram203Scenario.FixedCompleteInputProducesFixedCompleteGoldenOutput",
"DirectGLES.Tcp.IterationRPScratchFixScenario.FixtureShapedReductionSumsEveryInvocation",
"DirectGLES.Tcp.IterationRPScratchFixScenario.WideFixtureShapedReductionSumsEveryInvocation",
"DirectGLES.Tcp.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.Tcp.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.Tcp.Xfb.XfbRepeatedCaptureScenario.AVertexOnlyAdjacencyCaptureRecords",
"DirectGLES.TextureUploadShapeScenario.TheEmittedUploadShapeIsRecordedAndTheTwoSidesAgree",
"DirectGLES.TriangleScenario.TheServerStampedAVerbBoundaryOnThisDrawingFrame",
"DirectGLES.UnlocatedIoBlockScenario.TheEmulationIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectGLES.UnwrittenPositionOutputScenario.CapturingAnUnwrittenPositionStillDraws",
"DirectGLES.ViewportArrayScenario.WithoutTheEmulationEveryIndexCollapsesOntoViewportZero",
"DirectGLES.WireIndirectDispatchScenario.ShaderWrittenGroupCountsWithoutAnApplicationBarrierAreOrdered",
"DirectGLES.WireIndirectDrawScenario.ShaderWrittenCommandsWithoutAnApplicationBarrierAreOrdered",
"DirectGLES.WireMipShapeScenario.Depth1DChainWithoutANativeBlitDeclinesByName",
"DirectGLES.XfbRepeatedCaptureScenario.AVertexOnlyAdjacencyCaptureRecords",
"DirectVulkan.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
"DirectVulkan.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
"DirectVulkan.AsyncOn.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
"DirectVulkan.ClipDistanceScenario.ADisabledClipDistanceRemovesNothing",
"DirectVulkan.ClipDistanceScenario.TheEnablesAreIndependentPerDistance",
"DirectVulkan.CsoContentAddressingScenario.TheBlendToggleMintsBoundedlyWithContentAddressingAndPerBindWithout",
"DirectVulkan.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectVulkan.F1WireScenario.EachWireFrameHasZeroResidualPulls",
"DirectVulkan.F1WireScenario.GenerateMipmapDepthWithoutNativeBlitPixels",
"DirectVulkan.F1WireScenario.GenerateMipmapWithoutAShaderArmShapeDeclinesAndKeepsTheSession",
"DirectVulkan.F1WireScenario.GenerateMipmapWithoutNativeBlitPixels",
"DirectVulkan.FencePollScenario.PacedFrameFenceWaitsBench",
"DirectVulkan.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
"DirectVulkan.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
"DirectVulkan.Glsl420DeclarationScenario.AnAtomicCounterCompilesWithoutTheSsboExtension",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.AFramebufferAtARecycledAddressDoesNotInheritItsPredecessorsTwin",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.AProgramAtARecycledAddressDoesNotInheritItsPredecessorsShaderCso",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.ARenderbufferAtARecycledAddressDoesNotInheritItsPredecessorsStorage",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.ASamplerAtARecycledAddressDoesNotInheritItsPredecessorsParameters",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.ATextureAtARecycledAddressDoesNotInheritItsPredecessorsSamplerView",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.ATextureAtARecycledAddressDoesNotInheritItsPredecessorsTwin",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.DestroyedFramebuffersReturnTheirFramebufferSlots",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.DestroyedProgramsReturnTheirShaderCsoSlots",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.DestroyedSamplersReturnTheirSamplerCsoSlots",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.DestroyedTexturesReturnTheirSamplerViewSlots",
"DirectVulkan.HandleRecycle.Handles.HandleRecycleScenario.EvictedPipelineCompositesReturnTheirShaderCsoSlots",
"DirectVulkan.HandleRecycleScenario.ABufferAtARecycledAddressDoesNotInheritItsPredecessorsContents",
"DirectVulkan.HandleRecycleScenario.AFramebufferAtARecycledAddressDoesNotInheritItsPredecessorsTwin",
"DirectVulkan.HandleRecycleScenario.AProgramAtARecycledAddressDoesNotInheritItsPredecessorsShaderCso",
"DirectVulkan.HandleRecycleScenario.ARenderbufferAtARecycledAddressDoesNotInheritItsPredecessorsStorage",
"DirectVulkan.HandleRecycleScenario.ASamplerAtARecycledAddressDoesNotInheritItsPredecessorsParameters",
"DirectVulkan.HandleRecycleScenario.ATextureAtARecycledAddressDoesNotInheritItsPredecessorsSamplerView",
"DirectVulkan.HandleRecycleScenario.ATextureAtARecycledAddressDoesNotInheritItsPredecessorsTwin",
"DirectVulkan.HandleRecycleScenario.AVertexArrayAtARecycledAddressDoesNotInheritItsPredecessorsVertexBufferSet",
"DirectVulkan.HandleRecycleScenario.AVertexArrayAtARecycledAddressDoesNotInheritItsPredecessorsVertexInput",
"DirectVulkan.HandleRecycleScenario.DestroyedFramebuffersReturnTheirFramebufferSlots",
"DirectVulkan.HandleRecycleScenario.DestroyedProgramsReturnTheirShaderCsoSlots",
"DirectVulkan.HandleRecycleScenario.DestroyedRenderbuffersReturnTheirRenderbufferSlots",
"DirectVulkan.HandleRecycleScenario.DestroyedSamplersReturnTheirSamplerCsoSlots",
"DirectVulkan.HandleRecycleScenario.DestroyedTexturesReturnTheirSamplerViewSlots",
"DirectVulkan.HandleRecycleScenario.DestroyedTexturesReturnTheirTextureSlots",
"DirectVulkan.HandleRecycleScenario.DestroyedVertexArraysReturnTheirVertexElementsSlots",
"DirectVulkan.HandleRecycleScenario.EvictedPipelineCompositesReturnTheirShaderCsoSlots",
"DirectVulkan.ImageTargetKindScenario.IgnoresLayerForTexture2DMultisample",
"DirectVulkan.ImageTargetKindScenario.LoadsTexture2DMultisample",
"DirectVulkan.ImageTargetKindScenario.LoadsTexture2DMultisampleArray",
"DirectVulkan.ImageTargetKindScenario.StoresTexture2DMultisample",
"DirectVulkan.ImageTargetKindScenario.StoresTexture2DMultisampleArray",
"DirectVulkan.IterationRPFirstReductionScenario.IndexedInputTopologyAndReduction",
"DirectVulkan.IterationRPFirstReductionScenario.SampledRgba32fFirstAverage",
"DirectVulkan.LargeArenaAdoptionScenario.ASessionThatCannotRunT0FallsBackToT2OnceByName",
"DirectVulkan.LargeArenaAdoptionScenario.AStreamSessionRefusesTheAdoptTierOnceByName",
"DirectVulkan.LargeArenaAdoptionScenario.AnAdoptionCostsExactlyOneMapPersistentRoundtrip",
"DirectVulkan.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
"DirectVulkan.MagmaRunAheadScenario.GpuClearSurvivesTheFirstStorageImageUpgrade",
"DirectVulkan.MagmaRunAheadScenario.MixedNativeAndConvertedGpuVertexStreamsKeepTheirReservation",
"DirectVulkan.MagmaRunAheadScenario.PresentCreditActuallyParksTheClientAtItsConfiguredLimit",
"DirectVulkan.MagmaRunAheadScenario.QueuedBufferVersionsAndDeletedNameReuseKeepTheirPixels",
"DirectVulkan.MagmaRunAheadScenario.QueuedGpuWritesReadBackTheLastDispatchBytes",
"DirectVulkan.MagmaRunAheadScenario.QueuedProgramRebindsKeepEachUniformSnapshot",
"DirectVulkan.MagmaRunAheadScenario.TextureUploadCannotOvertakeThePreviouslyQueuedDraw",
"DirectVulkan.MagmaWireCacheScenario.FramebufferReattachmentDistinguishesMipAndLayer",
"DirectVulkan.MagmaWireCacheScenario.FramebufferRespecifyRebindsTheNewNativeImage",
"DirectVulkan.MagmaWireCacheScenario.FramebufferSrgbPolicyAtoBtoAUsesDistinctFormats",
"DirectVulkan.MagmaWireCacheScenario.FramebuffersAtoBtoAKeepDistinctAttachments",
"DirectVulkan.MagmaWireCacheScenario.SamplerRespecifyKeepsOldAndNewNativeImages",
"DirectVulkan.MagmaWireCacheScenario.SamplerSwizzleAtoBtoAKeepsEachQueuedPixel",
"DirectVulkan.MagmaWireCacheScenario.SamplerViewsDistinguishMipLayerAndViewType",
"DirectVulkan.MagmaWireReclaimScenario.ADrawAfterTheEarlyReclaimFollowsTheNewStoreNotTheMemoizedHandle",
"DirectVulkan.MagmaWireReclaimScenario.DescriptorSetsRewindInsideOneLongFrameAfterTheirSubmitRetires",
"DirectVulkan.MagmaWireReclaimScenario.ManySmallRespecifyAndDrawRoundsStayUnderTheStoreCountCeiling",
"DirectVulkan.MagmaWireReclaimScenario.RespecifiesWithNoDrawBetweenKeepTheLiveStoreCountBounded",
"DirectVulkan.MagmaWireReclaimScenario.RespecifyAndDrawEachStoreInOneFrameStaysWithinTheDeferredBudget",
"DirectVulkan.ObjectSubsystemControlScenario.ASamplerBitWithoutTheTextureBitIsRefusedAndNamed",
"DirectVulkan.ObjectSubsystemControlScenario.ATextureBitWithoutTheSamplerBitIsRefusedAndNamed",
"DirectVulkan.ObjectSubsystemControlScenario.ClearingTheP4aBitsStopsTheEmissionsAndNotThePixels",
"DirectVulkan.ObjectSubsystemControlScenario.TheAppliersNoConsumerBeltNeverFiresBehindTheClientsGate",
"DirectVulkan.P4aFinalFixScenario.AnImageBindAfterAllocationReachesTheApplierAsAMetadataRespecify",
"DirectVulkan.P4aFinalFixScenario.ConsecutiveDefinitionsNoVerbBetween",
"DirectVulkan.P4aFinalFixScenario.GenerateMipmapAcrossAnUnrelatedDraw",
"DirectVulkan.P4aFinalFixScenario.GenerateMipmapImmediately",
"DirectVulkan.P4aFinalFixScenario.LevelZeroConsumedBeforeLevelOne",
"DirectVulkan.P4aFinalFixScenario.PerLevelDefinitionAcrossAnUnrelatedDraw",
"DirectVulkan.P4aSeamAuditScenario.ARenderbufferRestoragedWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.P4aSeamAuditScenario.ATextureRespecifiedToThreeChannelsWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.P4aSeamAuditScenario.ATextureRespecifiedWhileAttachedReachesTheFramebufferRecord",
"DirectVulkan.PartialUploadOverGpuContentScenario.OneDimensionalArraySubImageKeepsTheGpuClearedLayer",
"DirectVulkan.PersistentCoherentMapScenario.TheMapLandsInTheArmItsLaneDeclares",
"DirectVulkan.PipeVerifyArmingScenario.Armed",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReported",
"DirectVulkan.PipeVerifyArmingScenario.CorruptedFieldIsReportedOnTheServerRead",
"DirectVulkan.PointSizeDemotionScenario.TheDemotionIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.PoisonOmissionScenario.OmittedFieldAbortsOnThatVerb",
"DirectVulkan.PoisonOmissionScenario.TheSequenceThePoisonControlsRun",
"DirectVulkan.PoisonOmissionScenario.WithoutOmissionCompletes",
"DirectVulkan.PrimitivesGeneratedNoXfbScenario.TheRerouteIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.ResourceSubsystemControlScenario.ClearingTheP3aBitsStopsTheEmissionsAndNotThePixels",
"DirectVulkan.SnormAttachmentScenario.SignedNormalizedAttachmentsRoundTripTheirChannelValues",
"DirectVulkan.SnormAttachmentScenario.SignedNormalizedColorAttachmentsReportComplete",
"DirectVulkan.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectVulkan.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectVulkan.StorageBufferRegrowScenario.NStorageDefinitionsCostNMapPersistentRoundtripsNotOnePerDraw",
"DirectVulkan.TextureParamsWithoutASamplerViewScenario.ACopyImageEndpointOnlyTexturesParamsReachTheDriver",
"DirectVulkan.TextureParamsWithoutASamplerViewScenario.AReadAttachmentOnlyTexturesDepthStencilModeReachesTheDriver",
"DirectVulkan.TextureParamsWithoutASamplerViewScenario.AnAttachmentOnlyTexturesSwizzleReachesTheDriver",
"DirectVulkan.TextureParamsWithoutASamplerViewScenario.AnImageUnitOnlyTexturesSwizzleSurvivesARequireImageBindableStorageRemint",
"DirectVulkan.TextureUploadShapeScenario.TheEmittedUploadShapeIsRecordedAndTheTwoSidesAgree",
"DirectVulkan.ThreeChannelAttachmentScenario.DstAlphaBlendingSeesOneInAWidenedAttachment",
"DirectVulkan.ThreeChannelAttachmentScenario.ThreeChannelColorAttachmentsReportComplete",
"DirectVulkan.ThreeChannelAttachmentScenario.WidenedAttachmentReadsBackOpaqueWhileItsNeighbourKeepsItsAlpha",
"DirectVulkan.TriangleScenario.TheServerStampedAVerbBoundaryOnThisDrawingFrame",
"DirectVulkan.UnlocatedIoBlockScenario.TheEmulationIsActuallyArmedWhenTheEnvironmentPinsItOn",
"DirectVulkan.ViewportArrayScenario.WithoutTheEmulationEveryIndexCollapsesOntoViewportZero",
"DirectVulkan.WireMipShapeScenario.Depth1DChainWithoutANativeBlitDeclinesByName"
],
"names_from": "junit-integration-monolith-control-monolith/integration",
"optional": "runs only when transport_pinned.py cannot prove the exclusion; the inproc-acceptance leg then runs every integration-gpu entry under this stem instead",
"instead_of": "junit-integration-inproc-acceptance-inproc/integration"
},
"junit-integration-inproc-acceptance-inproc/integration-staged-copy": {
"skipped": [
"DirectGLES.CubeFaceReadbackScenario.CubeMapViewOfAnArrayReadsTheFaceEachZOffsetNames",
@@ -1978,6 +2270,62 @@
"DirectVulkan.XfbRepeatedCaptureScenario.ASpanThatNeverDrawsLeavesTheCaptureBufferAlone"
]
},
"junit-integration-inproc-acceptance-inproc/integration-staged-copy-all": {
"skipped": [
"DirectGLES.CubeFaceReadbackScenario.CubeMapViewOfAnArrayReadsTheFaceEachZOffsetNames",
"DirectGLES.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.F1WireScenario.ShortUniformBufferRangePadsMissingBytes",
"DirectGLES.F1WireScenario.SubWordUniformBufferRangePadsMissingBytes",
"DirectGLES.F1WireScenario.UnalignedAtomicCounterRangeDeclinesAndTheSessionLives",
"DirectGLES.ForcedDepthStencilEmulation.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.ForcedDepthStencilEmulation.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
"DirectGLES.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
"DirectGLES.HandleRecycleScenario.ABufferAtARecycledAddressDoesNotInheritItsPredecessorsContents",
"DirectGLES.HandleRecycleScenario.AVertexArrayAtARecycledAddressDoesNotInheritItsPredecessorsVertexBufferSet",
"DirectGLES.LargeArenaAdoptionScenario.ASessionThatCannotRunT0FallsBackToT2OnceByName",
"DirectGLES.LargeArenaAdoptionScenario.AStreamSessionRefusesTheAdoptTierOnceByName",
"DirectGLES.LargeArenaAdoptionScenario.AnAdoptionCostsExactlyOneMapPersistentRoundtrip",
"DirectGLES.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
"DirectGLES.MagmaRunAheadScenario.QueuedBufferVersionsAndDeletedNameReuseKeepTheirPixels",
"DirectGLES.ResourceSubsystemOn.LargeArenaAdoptionScenario.ASessionThatCannotRunT0FallsBackToT2OnceByName",
"DirectGLES.ResourceSubsystemOn.LargeArenaAdoptionScenario.AStreamSessionRefusesTheAdoptTierOnceByName",
"DirectGLES.ResourceSubsystemOn.LargeArenaAdoptionScenario.AnAdoptionCostsExactlyOneMapPersistentRoundtrip",
"DirectGLES.Spawn.ForcedDs.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.Spawn.ForcedDs.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.Spawn.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.Spawn.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.Split.ForcedDs.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.Split.ForcedDs.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.Split.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.Split.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectGLES.StorageBufferRegrowScenario.NStorageDefinitionsCostNMapPersistentRoundtripsNotOnePerDraw",
"DirectGLES.Tcp.ForcedDs.DepthStencilReadbackMatrixScenario.AFlippedMultisampleResolveMirrorsTheBandsAndAScaleDeclines",
"DirectGLES.Tcp.ForcedDs.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectGLES.Tcp.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectGLES.Tcp.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectVulkan.DepthStencilReadbackMatrixScenario.SeparateDepthAndStencilAttachmentsAreBothReadable",
"DirectVulkan.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
"DirectVulkan.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
"DirectVulkan.Glsl420DeclarationScenario.AnAtomicCounterCompilesWithoutTheSsboExtension",
"DirectVulkan.HandleRecycleScenario.ABufferAtARecycledAddressDoesNotInheritItsPredecessorsContents",
"DirectVulkan.HandleRecycleScenario.AVertexArrayAtARecycledAddressDoesNotInheritItsPredecessorsVertexBufferSet",
"DirectVulkan.LargeArenaAdoptionScenario.ASessionThatCannotRunT0FallsBackToT2OnceByName",
"DirectVulkan.LargeArenaAdoptionScenario.AStreamSessionRefusesTheAdoptTierOnceByName",
"DirectVulkan.LargeArenaAdoptionScenario.AnAdoptionCostsExactlyOneMapPersistentRoundtrip",
"DirectVulkan.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
"DirectVulkan.MagmaRunAheadScenario.QueuedBufferVersionsAndDeletedNameReuseKeepTheirPixels",
"DirectVulkan.SsboDeclarationFormScenario.PackedBlockWithAnUnsizedArrayBeforeAnotherMember",
"DirectVulkan.SsboDeclarationFormScenario.TwoUnsizedArraysInOneBlock",
"DirectVulkan.StorageBufferRegrowScenario.NStorageDefinitionsCostNMapPersistentRoundtripsNotOnePerDraw"
],
"names_from": "junit-integration-monolith-control-monolith/integration-staged-copy",
"optional": "runs only when transport_pinned.py cannot prove the exclusion; the inproc-acceptance leg then runs every integration-gpu entry under this stem instead",
"instead_of": "junit-integration-inproc-acceptance-inproc/integration-staged-copy"
},
"junit-integration-inproc-acceptance-inproc/primary-inproc": {
"skipped": [],
"names": [