mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 18:13:23 +09:00
[Perf] (Espryt): a clean framebuffer attachment skips its per-draw resync behind the unit list's gate (rd12 monolith 74.5 -> 77.0 fps).
This commit is contained in:
@@ -2325,6 +2325,14 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
Vector<FboAttachmentSyncEntry>& list, Bool listValid) {
|
Vector<FboAttachmentSyncEntry>& list, Bool listValid) {
|
||||||
if (listValid) {
|
if (listValid) {
|
||||||
for (const auto& entry : list) {
|
for (const auto& entry : list) {
|
||||||
|
// P14: the unit list's aggregate clean gate first (SyncNeccessaryTextures): an
|
||||||
|
// attachment whose storage, parameters and sampler are already the driver's
|
||||||
|
// costs two record reads instead of three nested syncs and their SharedPtr
|
||||||
|
// traffic. Same borrow rule as there - the list's key proves the twin alive.
|
||||||
|
const auto* record = PipeTextureRecordForHandle(entry.Res);
|
||||||
|
if (record != nullptr && entry.backend != nullptr &&
|
||||||
|
entry.backend->IsDrawSyncCleanByRecord(entry.Res, *record))
|
||||||
|
continue;
|
||||||
TextureImpl::SyncTextureToBackendByHandle(entry.Res, /*imageBindableStorageRequired=*/false);
|
TextureImpl::SyncTextureToBackendByHandle(entry.Res, /*imageBindableStorageRequired=*/false);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user