[MG_Backend] (Disaggregated): P5e fb - revert the tx2 scaffold; the seam goes back to c0e's stub

- Reverts f4675d1a. tx2 owns TextureImpl::SyncTextureToBackendByHandle and
  BackendTextureObject::SyncMipmapsToBackendByHandle; fb bodied them temporarily only so
  that fb's own integration-split and strict lanes could be measured at all, and this
  puts the c0e stubs back so the two packages cannot collide at the merge.
- WHAT THIS COSTS, AND IT IS SAID HERE RATHER THAN DISCOVERED: with the stubs back,
  every integration-split entry whose framebuffer has a TEXTURE attachment - or whose
  draw binds an image - aborts on
  Fatal{UnmigratedVerb, "TextureImpl::SyncTextureToBackendByHandle"} rather than on
  anything fb wrote. fb's lane is green the moment tx2 lands beside it; the numbers
  measured with the scaffold are in the package report, with the scaffold's own cost
  (a GetTextureObject pull per call) named.
This commit is contained in:
2026-09-18 08:30:18 -04:00
parent aa38f0a05b
commit ca1beb6958
+4 -37
View File
@@ -14193,48 +14193,15 @@ namespace MobileGL::MG_Backend::DirectGLES {
} // namespace
namespace TextureImpl {
// ================================================================================
// P5e SCAFFOLD (fb) - THIS COMMIT IS REVERTED BEFORE fb's HEAD. DO NOT LAND IT.
// ================================================================================
// tx2 owns these two bodies and is being written in parallel. fb CALLS them from the
// attachment surface sync, the two attachment texture lists, the image sweep and the
// named blit, so with the c0e stubs in place every integration-split entry that touches
// a texture aborts on the seam rather than on anything fb wrote - which leaves fb's own
// isplit and strict numbers unmeasurable.
//
// So these two are bodied HERE, temporarily, in the ONLY way that does not pre-empt
// tx2's design: the frontend texture is resolved from the record's own GL name through
// the BARRIER-PULLED sticky forward GetTextureObject - exactly as the copy-image sink
// resolves its endpoints (PipeApplier.cpp) - and the existing frontend overloads then
// do the work. That is correct under lockstep (the client is parked, which is what
// makes a sticky forward legal) and it is deliberately NOT what tx2 will write: tx2
// drives the storage from the descriptor and has no frontend object at all.
//
// What it costs, and what to read past when reading fb's numbers: each call adds a
// GetTextureObject pull, so the strict lane sees GetTextureObject@<verb> markers that
// belong to this scaffold and not to fb.
SharedPtr<BackendTextureObject>& SyncTextureToBackendByHandle(MG_Pipe::MGPipeHandle texture,
Bool imageBindableStorageRequired) {
static SharedPtr<BackendTextureObject> s_scaffoldNone;
const auto* record = PipeTextureRecordForHandle(texture);
if (record == nullptr) {
s_scaffoldNone = nullptr;
return s_scaffoldNone;
}
const auto& stateObj = MGB_CTX->GetTextureObject(static_cast<Uint>(record->Desc.GlNameForDiag));
if (!stateObj) {
s_scaffoldNone = nullptr;
return s_scaffoldNone;
}
return SyncTextureObjectToBackend(stateObj, imageBindableStorageRequired);
(void)imageBindableStorageRequired;
MGPipeP5eSeamNotLanded("TextureImpl::SyncTextureToBackendByHandle", "tx2", texture);
}
void BackendTextureObject::SyncMipmapsToBackendByHandle(MG_Pipe::MGPipeHandle texture) {
const auto* record = PipeTextureRecordForHandle(texture);
if (record == nullptr) return;
const auto& stateObj = MGB_CTX->GetTextureObject(static_cast<Uint>(record->Desc.GlNameForDiag));
if (!stateObj) return;
SyncMipmapsToBackend(stateObj);
MGPipeP5eSeamNotLanded("BackendTextureObject::SyncMipmapsToBackendByHandle", "tx2",
texture);
}
} // namespace TextureImpl