diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fed8adc2..46a4ebbd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -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. diff --git a/docs/ci/ci-cleanup-log.md b/docs/ci/ci-cleanup-log.md index 40b33106..eaddb4e6 100644 --- a/docs/ci/ci-cleanup-log.md +++ b/docs/ci/ci-cleanup-log.md @@ -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 | diff --git a/scripts/ci/skip_census.py b/scripts/ci/skip_census.py index af0ce252..dba6da21 100644 --- a/scripts/ci/skip_census.py +++ b/scripts/ci/skip_census.py @@ -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": "" 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": "" 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' diff --git a/scripts/data/skip_census_baseline.json b/scripts/data/skip_census_baseline.json index 509aa7fd..81097051 100644 --- a/scripts/data/skip_census_baseline.json +++ b/scripts/data/skip_census_baseline.json @@ -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": [