mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[Perf] (Espryt): drain small partial writes as a whole-store orphan map
This commit is contained in:
@@ -1511,6 +1511,35 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
// this one against a sha pinned at 3e298c9a. Neither ladder may drift, and neither
|
||||
// may drift AWAY FROM THE OTHER without the gate saying so.
|
||||
|
||||
// P15: the small-store write rename (WholeStoreRenameApplies, Managers.h), applied to the
|
||||
// queue BEFORE the drain takes it. The ladder above is pinned and is not touched: it is
|
||||
// handed one whole-store range, which its own tier 1 already answers with the
|
||||
// whole-buffer orphan-map. Draw path only - the readback drains keep their exact ranges.
|
||||
void RenameSmallStoreForDrain(GLESBufferResource& resource, const Uint8* hostBase, SizeT frontendSize) {
|
||||
const SizeT store = resource.storageSize;
|
||||
const Bool mapUsable = !MG_Config::Features.EsprytDisableInvalidateFlush &&
|
||||
g_GLESFuncs.glMapBufferRange && g_GLESFuncs.glUnmapBuffer;
|
||||
const Bool foreignBytes = resource.serverGpuWritten || resource.persistentMapped ||
|
||||
resource.immutableStorage || resource.externalAhb != nullptr;
|
||||
// The size gate first, with the whole store as the queue: it answers every refusal
|
||||
// that does not depend on the queue before any lock is taken.
|
||||
if (!WholeStoreRenameApplies(store, frontendSize, store, hostBase != nullptr, foreignBytes, mapUsable))
|
||||
return;
|
||||
// Under split the host bytes are the server's staged copy, which only holds what the
|
||||
// content records delivered; monolith's base is the frontend shadow, the whole store.
|
||||
if (ServerStaged().CopiesIntoServerStorage() && !ServerStaged().IsCovered(&resource, 0, store)) return;
|
||||
const std::lock_guard<std::mutex> lock(resource.pendingMutex);
|
||||
if (resource.pendingRanges.empty() || !resource.pendingResidentWrites.empty()) return;
|
||||
SizeT queuedBytes = 0;
|
||||
for (const auto& range : resource.pendingRanges) {
|
||||
const SizeT end = std::min(range.end, store);
|
||||
queuedBytes += end - std::min(range.start, end);
|
||||
}
|
||||
if (!WholeStoreRenameApplies(store, frontendSize, queuedBytes, true, false, true)) return;
|
||||
resource.pendingRanges.clear();
|
||||
resource.pendingRanges.Add({0, store});
|
||||
}
|
||||
|
||||
// Land the app bytes queued for an ADOPTED store on the GPU timeline: staged
|
||||
// into the upload ring and delivered by glCopyBufferSubData. The destination
|
||||
// is the IMMUTABLE persistent store, which the driver can neither rename nor
|
||||
@@ -3555,6 +3584,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
} else if (!resource->pendingRanges.empty()) {
|
||||
// Same rule as Ops_H_Readback's, at the draw-time drain: with no frontend object
|
||||
// `hostBase` is the server shadow and every queued range must be staged.
|
||||
RenameSmallStoreForDrain(*resource, hostBase, size);
|
||||
MGL_SERVER_STAGED_REQUIRE_PENDING(*resource, hostBase, size, "ensure_flush_pending");
|
||||
FlushPendingRangesFrom(*resource, hostBase, size);
|
||||
resource->syncedChangeSerial = serial;
|
||||
|
||||
@@ -984,6 +984,46 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
||||
(wholeBuffer ? GL_MAP_INVALIDATE_BUFFER_BIT : GL_MAP_INVALIDATE_RANGE_BIT);
|
||||
}
|
||||
|
||||
// P15: WRITE RENAMING FOR A SMALL STORE. The draw-time drain sends a partial range below
|
||||
// the tier-1 threshold through the upload ring, and every such range is one
|
||||
// glCopyBufferSubData: a GPU copy job the driver builds on the render thread (FCL MC 1.21.5
|
||||
// monolith on Adreno 830: 0.08 of the drain's 0.105 ms/frame) and then runs on the GPU
|
||||
// timeline. Minecraft's immediate-mode batches rewrite a small per-format vertex buffer from
|
||||
// offset 0 before each draw, so these ranges are partial writes of tiny stores (the
|
||||
// 1.21.5 in-world trace: ~122 a frame, 81 of them into 288-byte stores). For such a store
|
||||
// the drain rewrites the WHOLE store from the host bytes instead, which is tier 1's
|
||||
// whole-buffer orphan-map: draws already recorded keep the old storage, draws after read the
|
||||
// new one, and no copy job is recorded - the rename Magma's RenameBusyWireStore makes under
|
||||
// the same 64 KiB bound.
|
||||
//
|
||||
// The bytes the rename moves that the queue did not ask for are bounded by
|
||||
// kEsprytWholeStoreRenameMaxExtraBytes: a 128-byte write into a 53 KiB index store stays a
|
||||
// ring copy rather than becoming a 53 KiB memcpy. On that trace the bound keeps 108 of the
|
||||
// 122 renames for 101 KiB of extra host copying a frame; renaming every store up to 64 KiB
|
||||
// would copy 811 KiB.
|
||||
//
|
||||
// Widening a map past the queued range is the edge that already drew blood (the note on
|
||||
// InvalidateFlushAccessFor): it is only exact when the host bytes ARE the store, byte for
|
||||
// byte, outside the queued ranges too. So every way the store can hold bytes the host
|
||||
// copy does not is a refusal, and the caller passes them in as one flag: a shader write
|
||||
// since the last whole readback (serverGpuWritten), queued resident writes, a coherent or
|
||||
// imported store, immutable storage. `hostBytesCoverStore` is the host copy's own extent:
|
||||
// the frontend shadow on monolith, the staged coverage under split. `mapUsable` is tier 1's
|
||||
// own gate - without the map the whole range would just be a bigger ring copy.
|
||||
//
|
||||
// `queuedBytes` is the sum of the queued ranges clamped to the store (VecRange1D keeps them
|
||||
// disjoint).
|
||||
inline constexpr SizeT kEsprytWholeStoreRenameMaxBytes = 64u * 1024u;
|
||||
inline constexpr SizeT kEsprytWholeStoreRenameMaxExtraBytes = 8u * 1024u;
|
||||
constexpr Bool WholeStoreRenameApplies(SizeT storageSize, SizeT frontendSize, SizeT queuedBytes,
|
||||
Bool hostBytesCoverStore, Bool storeHoldsBytesTheHostDoesNot,
|
||||
Bool mapUsable) {
|
||||
if (!mapUsable || !hostBytesCoverStore || storeHoldsBytesTheHostDoesNot) return false;
|
||||
if (storageSize == 0 || storageSize > kEsprytWholeStoreRenameMaxBytes) return false;
|
||||
if (frontendSize != storageSize || queuedBytes == 0 || queuedBytes > storageSize) return false;
|
||||
return storageSize - queuedBytes <= kEsprytWholeStoreRenameMaxExtraBytes;
|
||||
}
|
||||
|
||||
// The handle arms of the two draw-path entry points below. IsBufferDrawCleanByHandle
|
||||
// asks the applier the same five questions IsBufferDrawClean asks the frontend object,
|
||||
// with identical semantics (D-A4); EnsureBufferResourceForHandle is the ensure path
|
||||
|
||||
@@ -264,4 +264,38 @@ void main() {
|
||||
<< "range untouched";
|
||||
}
|
||||
|
||||
// The same partial SubData, but drained by the NEXT DISPATCH rather than by a readback: the
|
||||
// counter buffer is ensured as a binding, which is the draw-time drain. DirectGLES renames a
|
||||
// small store there - the whole store is rewritten from the host copy instead of the queued
|
||||
// range being copied - and a store a shader wrote is exactly the one whose host copy is stale
|
||||
// outside the range: offset 4 still holds the seed on the CPU side and the first dispatch's
|
||||
// increments on the GPU. Renaming it would put the seed back and the second dispatch would
|
||||
// count from there.
|
||||
TEST_F(AtomicCounterScenario, APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour) {
|
||||
if (!Ready() || IsSkipped()) return;
|
||||
|
||||
const GLuint zero = MakeCounterBuffer(0, {0u, 0u});
|
||||
MakeCounterBuffer(1, {0u});
|
||||
ASSERT_EQ(FirstGLError(), 0u);
|
||||
|
||||
Dispatch();
|
||||
|
||||
const unsigned int reseed = 4242u;
|
||||
glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, zero);
|
||||
glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, 0, sizeof(reseed), &reseed);
|
||||
glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, 0);
|
||||
ASSERT_EQ(FirstGLError(), 0u) << "re-seeding offset 0 raised a GL error";
|
||||
|
||||
Dispatch();
|
||||
|
||||
const std::vector<unsigned int> values = ReadCounters(zero, 2);
|
||||
EXPECT_EQ(FirstGLError(), 0u);
|
||||
EXPECT_EQ(values[0], reseed + kInvocations)
|
||||
<< "offset 0 read back " << values[0] << "; the SubData did not reach the second dispatch";
|
||||
EXPECT_EQ(values[1], 4 * kInvocations)
|
||||
<< "offset 4 read back " << values[1] << "; " << 2 * kInvocations
|
||||
<< " means the drain before the second dispatch rewrote the shader-written neighbour from the "
|
||||
<< "stale host copy";
|
||||
}
|
||||
|
||||
} // namespace MGITest
|
||||
|
||||
@@ -497,6 +497,63 @@ void main() {
|
||||
|
||||
// ---- a self-test of the assertions, not of MobileGL ------------------
|
||||
//
|
||||
// Inside ONE frame: draw, overwrite PART of the vertex buffer, draw again. This is the
|
||||
// immediate-mode streaming shape (Minecraft rewrites a small per-format vertex buffer from
|
||||
// offset 0 before every batch), and the first draw is still queued when the write lands -
|
||||
// it must keep the bytes it was issued with. DirectGLES drains this partial range of a
|
||||
// small store by renaming the whole store rather than copying the range, so this pins that
|
||||
// the rename is an orphan the first draw survives and that it carries the bytes OUTSIDE
|
||||
// the written range (the right quad's vertices) into the new storage.
|
||||
TEST_F(CrossFrameBufferScenario, APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes) {
|
||||
ASSERT_NO_FATAL_FAILURE(BuildScene(/*immutable=*/false));
|
||||
for (int frame = 0; frame < kWarmupFrames; ++frame) {
|
||||
BeginFrame();
|
||||
DrawScene();
|
||||
Gl().EndFrame();
|
||||
}
|
||||
|
||||
// The left quad's four vertices moved onto the right half and turned blue: 80 of the
|
||||
// buffer's 160 bytes.
|
||||
std::vector<Vertex> moved = SceneVertices(/*leftQuadIsGreen=*/false);
|
||||
for (int i = 0; i < kLeftQuadVertexCount; ++i) {
|
||||
moved[i].x += 1.0f;
|
||||
moved[i].r = 0.0f;
|
||||
moved[i].g = 0.0f;
|
||||
moved[i].b = 1.0f;
|
||||
}
|
||||
const GLsizeiptr leftQuadBytes = GLsizeiptr(kLeftQuadVertexCount * sizeof(Vertex));
|
||||
ASSERT_LT(leftQuadBytes, m_vertexBytes) << "the write must be a partial range of the store";
|
||||
|
||||
BeginFrame();
|
||||
DrawScene();
|
||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, leftQuadBytes, moved.data());
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
ASSERT_EQ(FirstGLError(), GLenum(GL_NO_ERROR)) << "the partial SubData raised a GL error";
|
||||
DrawScene();
|
||||
const Image frame = ReadFrame();
|
||||
Gl().EndFrame();
|
||||
|
||||
ExpectHalves(frame, "red", "blue",
|
||||
"a draw queued before a partial SubData must keep its bytes, and the draw after it "
|
||||
"must see the new ones");
|
||||
|
||||
// The next frame draws only from the rewritten store: the right quad's vertices
|
||||
// (outside the written range) must have come along with the rename, so the second
|
||||
// index set still reaches them.
|
||||
BeginFrame();
|
||||
glBindVertexArray(m_vao);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ebo);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, m_indexBytes, kIndicesRightQuad);
|
||||
glBindVertexArray(0);
|
||||
DrawScene();
|
||||
const Image next = ReadFrame();
|
||||
Gl().EndFrame();
|
||||
ExpectHalves(next, "black", "green",
|
||||
"the bytes outside the partial write were lost when the store was rewritten");
|
||||
EXPECT_EQ(FirstGLError(), GLenum(GL_NO_ERROR));
|
||||
}
|
||||
|
||||
// Every case above leans on ExpectHalves. ExpectHalves used to sample the
|
||||
// centre pixel of each half - two pixels for a 12288-pixel readback - and
|
||||
// that is measurably too weak to stand behind a claim about buffer
|
||||
|
||||
@@ -902,3 +902,51 @@ TEST(EsprytFlushLadder, APartialRangeDoesNotOvertakeAQueuedRingCopy) {
|
||||
static_cast<GLbitfield>(GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT))
|
||||
<< "the whole-buffer orphan-map rewrites every byte from the shadow the copies were taken from";
|
||||
}
|
||||
|
||||
// P15: the small-store write rename. A partial range of a small store is drained as the whole
|
||||
// store - tier 1's orphan-map - instead of one upload-ring copy job per range, but only while the
|
||||
// host bytes are the store byte for byte, and only while the bytes nobody asked for stay small.
|
||||
namespace {
|
||||
using MobileGL::MG_Backend::DirectGLES::BufferImpl::kEsprytWholeStoreRenameMaxBytes;
|
||||
using MobileGL::MG_Backend::DirectGLES::BufferImpl::kEsprytWholeStoreRenameMaxExtraBytes;
|
||||
using MobileGL::MG_Backend::DirectGLES::BufferImpl::WholeStoreRenameApplies;
|
||||
} // namespace
|
||||
|
||||
TEST(EsprytFlushLadder, ASmallStoreWhoseHostBytesAreTheStoreIsRenamedWhole) {
|
||||
// Minecraft's immediate-mode shape: 96 of a 288-byte vertex store, from offset 0.
|
||||
EXPECT_TRUE(WholeStoreRenameApplies(288, 288, 96, true, false, true));
|
||||
EXPECT_TRUE(WholeStoreRenameApplies(kEsprytWholeStoreRenameMaxBytes, kEsprytWholeStoreRenameMaxBytes,
|
||||
kEsprytWholeStoreRenameMaxBytes - kEsprytWholeStoreRenameMaxExtraBytes, true,
|
||||
false, true));
|
||||
// And the renamed range is one tier 1 takes as the whole-buffer orphan-map, with or without a
|
||||
// ring copy still queued on the store.
|
||||
EXPECT_EQ(InvalidateFlushAccessFor(0, 288, 0, 288, 288, 288, true),
|
||||
static_cast<GLbitfield>(GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT));
|
||||
}
|
||||
|
||||
TEST(EsprytFlushLadder, ARenameThatWouldMoveTooManyUnaskedBytesKeepsItsQueuedRanges) {
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(kEsprytWholeStoreRenameMaxBytes + 1, kEsprytWholeStoreRenameMaxBytes + 1,
|
||||
kEsprytWholeStoreRenameMaxBytes + 1, true, false, true))
|
||||
<< "above the store bound the queue is drained as it stands";
|
||||
// The 1.21.5 trace's other shape: 128 bytes into a 53 KiB index store.
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(53824, 53824, 128, true, false, true))
|
||||
<< "rewriting 53 KiB for a 128-byte write moves more bytes than the copy job it saves";
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(16384, 16384, 16384 - kEsprytWholeStoreRenameMaxExtraBytes - 1, true,
|
||||
false, true));
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(0, 0, 0, true, false, true));
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(288, 288, 0, true, false, true)) << "nothing queued, nothing to rename";
|
||||
}
|
||||
|
||||
// The refusals are the widening rule: the rename rewrites bytes outside the queued ranges, which
|
||||
// is exact only when the host copy holds them.
|
||||
TEST(EsprytFlushLadder, AStoreHoldingBytesTheHostCopyDoesNotIsNeverRenamed) {
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(288, 288, 96, true, true, true))
|
||||
<< "a shader-written (or coherent, imported, resident-written) store would get the stale "
|
||||
"host bytes back over what the GPU put there";
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(288, 288, 96, false, false, true))
|
||||
<< "under split a staged copy that does not cover the store has no bytes for the rest of it";
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(288, 576, 96, true, false, true))
|
||||
<< "a store the frontend has already resized is a respecify, not a rename";
|
||||
EXPECT_FALSE(WholeStoreRenameApplies(288, 288, 96, true, false, false))
|
||||
<< "without tier 1's map the whole store would only be a bigger ring copy";
|
||||
}
|
||||
|
||||
@@ -252,6 +252,74 @@ e70925d3, local, not pushed):**
|
||||
- The device lock is released by devjob2 when m2ab ends.
|
||||
- The plugin installs `top.mobilegl.plugin.*.trace` from earlier phases are still on the device.
|
||||
|
||||
## Open: Espryt small-store write rename (branch `pmflush`, 2026-10-09, host-verified, needs device)
|
||||
|
||||
**Not a p15 regression.** MONOLITH-DIFF's top Espryt row (`FlushPendingRangesFrom` driver 0.091 + libc
|
||||
0.025, "dev 0") is the rename the doc's own caveat lists: dev's `FlushPendingRangesNow` costs 0.086 + 0.019
|
||||
in the same profiles. Both are the same three-tier ladder, unchanged since dev f973008c. Inclusive:
|
||||
dev 0.066 / p15 0.078 (feat-esp-1), 0.106 on the newer api29ab e26 run. So the drain is real cost that
|
||||
dev pays too.
|
||||
|
||||
**What the drain is.** Under it, 0.080 of 0.106 ms/frame is one Adreno driver routine reached from
|
||||
`glCopyBufferSubData` (dispatch slot 0x670 -> 0x3250c0 -> 0x2ee9d0, with heap allocations inside).
|
||||
So it is the upload-ring tier: one GPU copy job per queued partial range. The 1.21.5 in-world trace
|
||||
(5998912 calls, last 252 frames) shows the shape: 162 glBufferSubData a frame. 122 of them are partial
|
||||
writes from offset 0, mostly 96 or 192 bytes into 288-byte vertex stores, and ~3 KB into 6.7 KB ones.
|
||||
That is Minecraft's per-format immediate vertex buffer. Magma already renames these stores
|
||||
(`RenameBusyWireStore`, S0 M4); `WriteWireBuffer` costs 0.031 ms/frame there, so Magma needs nothing.
|
||||
|
||||
**Change.** `RenameSmallStoreForDrain` (Managers.cpp) runs before the draw-time drain. For a store
|
||||
<= 64 KiB whose unwritten bytes are <= 8 KiB, it replaces the queue with [0, store). The pinned ladder
|
||||
then takes its tier 1, the whole-buffer orphan-map: no copy job, and recorded draws keep the old
|
||||
storage. It refuses when the store holds bytes the host copy does not have: `serverGpuWritten`,
|
||||
queued resident writes, persistent/immutable/imported stores, or split staged coverage short of the
|
||||
whole store. On the trace this renames 108 of 122 partial writes a frame, at +101 KiB of host memcpy a
|
||||
frame; a plain 64 KiB bound would cost +811 KiB, because of 128-byte writes into a 53 KiB index store.
|
||||
The ladder bodies and the G5 pins are untouched.
|
||||
|
||||
**Tests.** EsprytFlushLadder has 3 new unit cases. There are 2 new scenarios, one per backend on every
|
||||
arm: AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour and
|
||||
CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes. The skip
|
||||
census mirrors their siblings' skipped lanes. Red-once: dropping the `serverGpuWritten` refusal reds
|
||||
the atomic case on DirectGLES.Spawn, which reads back 16 instead of 32; monolith and inproc pass
|
||||
because the frontend reads GPU writes back before a partial CPU write.
|
||||
|
||||
**Suite results.** WSL archlinux, clang Release, lavapipe, env MOBILEGL_ITEST_REQUIRE_GPU=1, suites run
|
||||
one at a time:
|
||||
- unit 2907/2907;
|
||||
- integration 5300/5300 on the labels gpu, split, magma-all-split, magma-full-split,
|
||||
monolith-control, cold-start, cpu-mip-split, clientarrays-split and remint-fallback-split;
|
||||
- 354/354 spawn+TCP buffer, SSBO, atomic, persistent, XFB and index scenarios;
|
||||
- 18/18 Espryt retraces (OpenRA, 1.21.4-in-world, 1.21.11-main-menu, sodium, create-instancing, Iris
|
||||
BSL; each monolith, SPLIT and SPAWN);
|
||||
- both Android arm64 shapes compile (disaggregated ON and OFF, android-26).
|
||||
|
||||
A first run with the dozen ICD (REQUIRE_GPU=ON in the cache) failed 1488 DirectVulkan cases. That is
|
||||
the ICD, not this change: there were 0 DirectGLES failures.
|
||||
|
||||
**Host blocker for retrace evidence (pre-existing).** Espryt on llvmpipe segfaults in the 1.21.5 fixture
|
||||
at call 75682 (a glDrawElements right after vertex buffer 8 is deleted and recreated). This happens on
|
||||
the base tree too. Magma completes (SSIM 0.985 on dozen). So Espryt cannot be checked for SSIM on this
|
||||
trace on the host.
|
||||
|
||||
**Device ask (Perfetto first, per the 2026-10-09 rule).** FCL MC 1.21.5 vanilla bench scene, monolith,
|
||||
cpuhunt pinned, base = origin e70925d3 vs pmflush, same LTO settings. Run Espryt (the arm under test)
|
||||
and Magma (control, expected identical). Capture a Perfetto trace per arm with:
|
||||
- sched_switch/wakeup, cpu_frequency;
|
||||
- atrace gfx/view/hal;
|
||||
- kgsl gpu_frequency and GPU busy/slices;
|
||||
- dma-fence signals;
|
||||
- SurfaceFlinger frame timeline.
|
||||
|
||||
Report one typical frame as a timeline: render thread runnable/running/blocked, queueBuffer/dequeueBuffer
|
||||
waits, the GPU slice and its end against the next frame's throttle wait. The question is whether
|
||||
removing ~100 copy jobs a frame shortens the GPU slice and with it the ~0.8-1.0 ms queueBuffer wait (a
|
||||
shorter frame), or only cuts CPU (a longer wait, the same frame). simpleperf zoom: `FlushPendingRangesFrom`
|
||||
inclusive and its callees, expected to drop from ~0.106 towards ~0.03 ms/frame (the orphan-map plus the
|
||||
extra memcpy). Also check the driver's map path (slot 0x550 -> 0x1db8a0) does not grow into new
|
||||
allocations per rename. Correctness: SSIM/golden on the device retrace of minecraft-1.21.5-vanilla-fcl
|
||||
plus the Iris/BSL cases, Espryt.
|
||||
|
||||
## Earlier (2026-10-09): cuts 1b + 1c, cut 4, pipe-record pieces
|
||||
|
||||
- **Landed locally (pushed after the BSL gpuhunt check):**
|
||||
|
||||
@@ -311,6 +311,7 @@
|
||||
"DirectGLES.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.AsyncOn.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
|
||||
"DirectGLES.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -362,6 +363,7 @@
|
||||
"DirectGLES.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -944,6 +946,7 @@
|
||||
"DirectGLES.Spawn.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Spawn.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Spawn.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -1002,6 +1005,7 @@
|
||||
"DirectGLES.Spawn.CpuMip.GenerateMipmapServerScenario.Rgb32fUploadedBaseGeneratesItsChain",
|
||||
"DirectGLES.Spawn.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
|
||||
"DirectGLES.Spawn.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -1604,6 +1608,7 @@
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Split.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -1661,6 +1666,7 @@
|
||||
"DirectGLES.Split.CpuMip.GenerateMipmapServerScenario.Rgb32fUploadedBaseGeneratesItsChain",
|
||||
"DirectGLES.Split.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
|
||||
"DirectGLES.Split.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -2358,6 +2364,7 @@
|
||||
"DirectGLES.Tcp.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Tcp.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Tcp.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -2409,6 +2416,7 @@
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -3153,6 +3161,7 @@
|
||||
"DirectVulkan.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectVulkan.AsyncOn.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
|
||||
"DirectVulkan.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectVulkan.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectVulkan.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectVulkan.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectVulkan.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -3204,6 +3213,7 @@
|
||||
"DirectVulkan.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectVulkan.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectVulkan.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectVulkan.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectVulkan.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -3963,6 +3973,7 @@
|
||||
"names": [
|
||||
"DirectGLES.AdvertisedLimitsScenario.EveryBufferLimitIsWithinItsAdvertisedRange",
|
||||
"DirectGLES.AdvertisedLimitsScenario.IndexedBufferBindingsAreReportedVerbatimOnBothWidths",
|
||||
"DirectGLES.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -3982,6 +3993,7 @@
|
||||
"DirectGLES.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -4138,6 +4150,7 @@
|
||||
"DirectGLES.Spawn.AdoptTier0.LargeArenaAdoptionScenario.SubDataAfterAnInFlightDrawReachesTheNextDraw",
|
||||
"DirectGLES.Spawn.AdoptTier0.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
|
||||
"DirectGLES.Spawn.AdvertisedLimitsScenario.IndexedBufferBindingsAreReportedVerbatimOnBothWidths",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -4159,6 +4172,7 @@
|
||||
"DirectGLES.Spawn.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Spawn.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
|
||||
"DirectGLES.Spawn.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -4308,6 +4322,7 @@
|
||||
"DirectGLES.Split.AdoptTier0.LargeArenaAdoptionScenario.SubDataAfterAnInFlightDrawReachesTheNextDraw",
|
||||
"DirectGLES.Split.AdoptTier0.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
|
||||
"DirectGLES.Split.AdvertisedLimitsScenario.IndexedBufferBindingsAreReportedVerbatimOnBothWidths",
|
||||
"DirectGLES.Split.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -4329,6 +4344,7 @@
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Split.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fDrawnBaseWithARefusedReadbackDeclinesByName",
|
||||
"DirectGLES.Split.CpuMipRefused.GenerateMipmapServerScenario.Rgb16fUploadedBaseWithARefusedReadbackIsFilteredFromTheStore",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -4501,6 +4517,7 @@
|
||||
"DirectGLES.Tcp.AdoptTier0.LargeArenaAdoptionScenario.SubDataAfterAnInFlightDrawReachesTheNextDraw",
|
||||
"DirectGLES.Tcp.AdoptTier0.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
|
||||
"DirectGLES.Tcp.AdvertisedLimitsScenario.IndexedBufferBindingsAreReportedVerbatimOnBothWidths",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -4520,6 +4537,7 @@
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -4677,6 +4695,7 @@
|
||||
"DirectVulkan.AdvertisedLimitsScenario.EveryBufferLimitIsWithinItsAdvertisedRange",
|
||||
"DirectVulkan.AdvertisedLimitsScenario.IndexedBufferBindingsAreReportedVerbatimOnBothWidths",
|
||||
"DirectVulkan.ArenaArm.LargeArenaAdoptionScenario.TheArenaLandsInTheTierItsLaneDeclares",
|
||||
"DirectVulkan.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectVulkan.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectVulkan.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectVulkan.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -4696,6 +4715,7 @@
|
||||
"DirectVulkan.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectVulkan.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectVulkan.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectVulkan.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectVulkan.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -5412,6 +5432,7 @@
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Split.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -5463,6 +5484,7 @@
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -5987,6 +6009,7 @@
|
||||
"DirectGLES.Split.StreamedArenaScenario.StreamedIndexDataSurvivesArenaRecycling",
|
||||
"DirectGLES.Split.StreamedArenaScenario.StreamedVertexDataSurvivesArenaRecycling",
|
||||
"DirectGLES.Split.StrictArming.TriangleScenario.TheServerStampedAVerbBoundaryOnThisDrawingFrame",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -6151,6 +6174,7 @@
|
||||
"DirectVulkan.Split.Band.BandedReadbackScenario.GetTexImageLargerThanAReplySlotIsWindowed",
|
||||
"DirectVulkan.Split.Band.BandedReadbackScenario.RenderbufferReadOfExactlyTwoMiBIsBandedNotRefused",
|
||||
"DirectVulkan.Split.Band.BandedReadbackScenario.TwoMiBPlusOneRowIsBanded",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.IndexOrphanAndReupload",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.VertexBufferSubData",
|
||||
@@ -6415,6 +6439,7 @@
|
||||
"junit-integration-split-strict/magma-buffers": {
|
||||
"skipped": [],
|
||||
"names": [
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.IndexOrphanAndReupload",
|
||||
"DirectVulkan.Split.Buffers.CrossFrameBufferScenario.VertexBufferSubData",
|
||||
@@ -6447,6 +6472,7 @@
|
||||
"junit-integration-split-strict/magma-buffers-spawn": {
|
||||
"skipped": [],
|
||||
"names": [
|
||||
"DirectVulkan.Spawn.Buffers.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.Spawn.Buffers.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.Spawn.Buffers.CrossFrameBufferScenario.IndexOrphanAndReupload",
|
||||
"DirectVulkan.Spawn.Buffers.CrossFrameBufferScenario.VertexBufferSubData",
|
||||
@@ -6479,6 +6505,7 @@
|
||||
"junit-integration-split-strict/magma-buffers-tcp": {
|
||||
"skipped": [],
|
||||
"names": [
|
||||
"DirectVulkan.Tcp.Buffers.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.Tcp.Buffers.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.Tcp.Buffers.CrossFrameBufferScenario.IndexOrphanAndReupload",
|
||||
"DirectVulkan.Tcp.Buffers.CrossFrameBufferScenario.VertexBufferSubData",
|
||||
@@ -6632,6 +6659,7 @@
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Split.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -6683,6 +6711,7 @@
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -7207,6 +7236,7 @@
|
||||
"DirectGLES.Split.StreamedArenaScenario.StreamedIndexDataSurvivesArenaRecycling",
|
||||
"DirectGLES.Split.StreamedArenaScenario.StreamedVertexDataSurvivesArenaRecycling",
|
||||
"DirectGLES.Split.StrictArming.TriangleScenario.TheServerStampedAVerbBoundaryOnThisDrawingFrame",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -10992,6 +11022,7 @@
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Split.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Split.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -11043,6 +11074,7 @@
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Split.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Split.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -11567,6 +11599,7 @@
|
||||
"DirectGLES.Split.StreamedArenaScenario.StreamedIndexDataSurvivesArenaRecycling",
|
||||
"DirectGLES.Split.StreamedArenaScenario.StreamedVertexDataSurvivesArenaRecycling",
|
||||
"DirectGLES.Split.StrictArming.TriangleScenario.TheServerStampedAVerbBoundaryOnThisDrawingFrame",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Split.StrictProgramArm.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -11747,6 +11780,7 @@
|
||||
"DirectGLES.Spawn.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Spawn.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Spawn.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Spawn.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -11798,6 +11832,7 @@
|
||||
"DirectGLES.Spawn.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Spawn.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Spawn.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Spawn.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -12439,6 +12474,7 @@
|
||||
"DirectGLES.Tcp.AsyncOn.AsyncCompileScenario.CompletionStatusPollingThenForcedJoin",
|
||||
"DirectGLES.Tcp.AsyncOn.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Tcp.AsyncOn.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Tcp.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -12490,6 +12526,7 @@
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Tcp.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Tcp.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -13266,6 +13303,7 @@
|
||||
"DirectGLES.VerifySplit.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.VerifySplit.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
|
||||
"DirectGLES.VerifySplit.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.VerifySplit.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.VerifySplit.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.VerifySplit.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.VerifySplit.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -13317,6 +13355,7 @@
|
||||
"DirectGLES.VerifySplit.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.VerifySplit.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.VerifySplit.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.VerifySplit.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.VerifySplit.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.VerifySplit.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.VerifySplit.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -13947,6 +13986,7 @@
|
||||
"DirectVulkan.VerifySplit.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectVulkan.VerifySplit.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
|
||||
"DirectVulkan.VerifySplit.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectVulkan.VerifySplit.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectVulkan.VerifySplit.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectVulkan.VerifySplit.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectVulkan.VerifySplit.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -13998,6 +14038,7 @@
|
||||
"DirectVulkan.VerifySplit.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectVulkan.VerifySplit.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectVulkan.VerifySplit.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectVulkan.VerifySplit.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.VerifySplit.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.VerifySplit.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectVulkan.VerifySplit.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -16887,6 +16928,7 @@
|
||||
"DirectGLES.Verify.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectGLES.Verify.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
|
||||
"DirectGLES.Verify.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectGLES.Verify.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectGLES.Verify.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectGLES.Verify.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectGLES.Verify.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -16938,6 +16980,7 @@
|
||||
"DirectGLES.Verify.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectGLES.Verify.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectGLES.Verify.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectGLES.Verify.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectGLES.Verify.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectGLES.Verify.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectGLES.Verify.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
@@ -17519,6 +17562,7 @@
|
||||
"DirectVulkan.Verify.AsyncCompileScenario.ExtensionStringMatchesTheConfiguration",
|
||||
"DirectVulkan.Verify.AsyncCompileScenario.IrisShapedTwoPhaseBatchRendersCorrectly",
|
||||
"DirectVulkan.Verify.AsyncCompileScenario.ZeroCompilerThreadsSettlesEverythingImmediately",
|
||||
"DirectVulkan.Verify.AtomicCounterScenario.APartialSubDataBetweenDispatchesKeepsTheShaderWrittenNeighbour",
|
||||
"DirectVulkan.Verify.AtomicCounterScenario.CountersAccumulateAcrossDispatchesAndFollowAReseed",
|
||||
"DirectVulkan.Verify.AtomicCounterScenario.DispatchIncrementsTheBoundCounterBuffers",
|
||||
"DirectVulkan.Verify.AtomicCounterScenario.SubDataAfterDispatchSurvivesAnImmediateReadback",
|
||||
@@ -17570,6 +17614,7 @@
|
||||
"DirectVulkan.Verify.CopyImageStoreReadbackScenario.APartialUploadAfterTheCopyKeepsTheCopiedWindow",
|
||||
"DirectVulkan.Verify.CopyImageStoreReadbackScenario.ARenderbufferSourceLandsInTheTexture",
|
||||
"DirectVulkan.Verify.CopyImageStoreReadbackScenario.AnUploadedLevelReadsBackExactly",
|
||||
"DirectVulkan.Verify.CrossFrameBufferScenario.APartialSubDataBetweenTwoDrawsOfOneFrameKeepsTheFirstDrawsBytes",
|
||||
"DirectVulkan.Verify.CrossFrameBufferScenario.IndexBufferSubData",
|
||||
"DirectVulkan.Verify.CrossFrameBufferScenario.IndexCopyBufferSubData",
|
||||
"DirectVulkan.Verify.CrossFrameBufferScenario.IndexMapWriteUnmap",
|
||||
|
||||
Reference in New Issue
Block a user