summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/rhi/qrhi.cpp13
-rw-r--r--src/gui/rhi/qrhi_p_p.h1
2 files changed, 13 insertions, 1 deletions
diff --git a/src/gui/rhi/qrhi.cpp b/src/gui/rhi/qrhi.cpp
index 6cc2b48922..f61fa6df59 100644
--- a/src/gui/rhi/qrhi.cpp
+++ b/src/gui/rhi/qrhi.cpp
@@ -4938,13 +4938,24 @@ void QRhiResourceUpdateBatch::generateMips(QRhiTexture *tex, int layer)
QRhiResourceUpdateBatch *QRhi::nextResourceUpdateBatch()
{
auto nextFreeBatch = [this]() -> QRhiResourceUpdateBatch * {
- for (int i = 0, ie = d->resUpdPoolMap.count(); i != ie; ++i) {
+ auto isFree = [this](int i) -> QRhiResourceUpdateBatch * {
if (!d->resUpdPoolMap.testBit(i)) {
d->resUpdPoolMap.setBit(i);
QRhiResourceUpdateBatch *u = d->resUpdPool[i];
QRhiResourceUpdateBatchPrivate::get(u)->poolIndex = i;
+ d->lastResUpdIdx = i;
return u;
}
+ return nullptr;
+ };
+ const int poolSize = d->resUpdPoolMap.count();
+ for (int i = d->lastResUpdIdx + 1; i < poolSize; ++i) {
+ if (QRhiResourceUpdateBatch *u = isFree(i))
+ return u;
+ }
+ for (int i = 0; i <= d->lastResUpdIdx; ++i) {
+ if (QRhiResourceUpdateBatch *u = isFree(i))
+ return u;
}
return nullptr;
};
diff --git a/src/gui/rhi/qrhi_p_p.h b/src/gui/rhi/qrhi_p_p.h
index 1dbb2b9ab9..ef27be6d7d 100644
--- a/src/gui/rhi/qrhi_p_p.h
+++ b/src/gui/rhi/qrhi_p_p.h
@@ -227,6 +227,7 @@ private:
QRhiProfiler profiler;
QVarLengthArray<QRhiResourceUpdateBatch *, 4> resUpdPool;
QBitArray resUpdPoolMap;
+ int lastResUpdIdx = -1;
QSet<QRhiResource *> resources;
QSet<QRhiResource *> pendingDeleteResources;
QVarLengthArray<QRhi::CleanupCallback, 4> cleanupCallbacks;