[fence_manager]: Try to simplify and improve early fence release
All checks were successful
eden-license / license-header (pull_request) Successful in 16s
All checks were successful
eden-license / license-header (pull_request) Successful in 16s
This commit is contained in:
parent
90cf049de9
commit
06dbbf8033
1 changed files with 11 additions and 21 deletions
|
@ -76,27 +76,16 @@ public:
|
||||||
|
|
||||||
void SignalFence(std::function<void()>&& func) {
|
void SignalFence(std::function<void()>&& func) {
|
||||||
bool delay_fence = Settings::IsGPULevelHigh();
|
bool delay_fence = Settings::IsGPULevelHigh();
|
||||||
#ifdef __ANDROID__
|
|
||||||
if (!delay_fence && !Settings::values.early_release_fences.GetValue()) {
|
|
||||||
TryReleasePendingFences<false>();
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if constexpr (!can_async_check) {
|
if constexpr (!can_async_check) {
|
||||||
TryReleasePendingFences<false>();
|
TryReleasePendingFences<false>();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
const bool should_flush = ShouldFlush();
|
const bool should_flush = ShouldFlush();
|
||||||
CommitAsyncFlushes();
|
CommitAsyncFlushes();
|
||||||
TFence new_fence = CreateFence(!should_flush);
|
TFence new_fence = CreateFence(!should_flush);
|
||||||
#ifdef __ANDROID__
|
|
||||||
if (delay_fence && !Settings::values.early_release_fences.GetValue()) {
|
|
||||||
guard.lock();
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if constexpr (can_async_check) {
|
if constexpr (can_async_check) {
|
||||||
guard.lock();
|
guard.lock();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if (delay_fence) {
|
if (delay_fence) {
|
||||||
uncommitted_operations.emplace_back(std::move(func));
|
uncommitted_operations.emplace_back(std::move(func));
|
||||||
}
|
}
|
||||||
|
@ -109,17 +98,10 @@ public:
|
||||||
if (should_flush) {
|
if (should_flush) {
|
||||||
rasterizer.FlushCommands();
|
rasterizer.FlushCommands();
|
||||||
}
|
}
|
||||||
#ifdef __ANDROID__
|
|
||||||
if (delay_fence && !Settings::values.early_release_fences.GetValue()) {
|
|
||||||
guard.unlock();
|
|
||||||
cv.notify_all();
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if constexpr (can_async_check) {
|
if constexpr (can_async_check) {
|
||||||
guard.unlock();
|
guard.unlock();
|
||||||
cv.notify_all();
|
cv.notify_all();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
rasterizer.InvalidateGPUCache();
|
rasterizer.InvalidateGPUCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,10 +175,18 @@ private:
|
||||||
void TryReleasePendingFences() {
|
void TryReleasePendingFences() {
|
||||||
while (!fences.empty()) {
|
while (!fences.empty()) {
|
||||||
TFence& current_fence = fences.front();
|
TFence& current_fence = fences.front();
|
||||||
if (ShouldWait() && !IsFenceSignaled(current_fence)) {
|
|
||||||
|
const bool should_wait = ShouldWait() && !IsFenceSignaled(current_fence);
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
const bool allow_early_release = Settings::values.early_release_fences.GetValue();
|
||||||
|
#else
|
||||||
|
const bool allow_early_release = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (should_wait) {
|
||||||
if constexpr (force_wait) {
|
if constexpr (force_wait) {
|
||||||
WaitFence(current_fence);
|
WaitFence(current_fence);
|
||||||
} else {
|
} else if (!allow_early_release) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue