[MG_Backend] (Disaggregated): P5e fb - SCAFFOLD, REVERTED BEFORE HEAD: tx2's two by-handle seams, so fb can measure its own lane

- fb calls TextureImpl::SyncTextureToBackendByHandle and
  BackendTextureObject::SyncMipmapsToBackendByHandle from four places. tx2 owns those
  bodies and is being written in parallel, so with c0e's aborting stubs every
  integration-split entry that touches a texture dies on the seam and fb's own isplit
  and strict numbers cannot be read at all.
- This commit bodies the two temporarily, in the one 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, and the existing frontend overloads do the work. Correct
  under lockstep, and deliberately NOT the shape tx2 will write - tx2 drives the
  storage from the descriptor and holds no frontend object.
- IT IS REVERTED BY THE NEXT-BUT-ONE COMMIT. It exists in history so the integrator can
  see exactly what fb assumed about the seam and what fb's measured numbers rest on.
This commit is contained in:
2026-09-18 08:06:59 -04:00
parent 6c37c20f59
commit f4675d1ac0
+37 -4
View File
@@ -14193,15 +14193,48 @@ 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) {
(void)imageBindableStorageRequired;
MGPipeP5eSeamNotLanded("TextureImpl::SyncTextureToBackendByHandle", "tx2", texture);
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 BackendTextureObject::SyncMipmapsToBackendByHandle(MG_Pipe::MGPipeHandle texture) {
MGPipeP5eSeamNotLanded("BackendTextureObject::SyncMipmapsToBackendByHandle", "tx2",
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);
}
} // namespace TextureImpl