diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2020-09-22 19:21:19 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2020-09-23 16:59:06 +0200 |
commit | 6b52ba42865c6d298a8ddf1d735e4c3d3b3dab56 (patch) | |
tree | 6015c4f970f89af47c8ce59a25bcc0fe0d268ca2 /src/gui/rhi/qrhi_p_p.h | |
parent | 230be3c4d1e53d7024064b926010131c6a83762f (diff) |
rhi: Reuse buffer/texture op entries in res.update batches
More of an enabler for reusing the data in the individual entries since
not clearing the QVLA does not give us much on its own.
Change-Id: Ief9761f75382c3373cc2bc7b866eb59fdd8b3277
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gui/rhi/qrhi_p_p.h')
-rw-r--r-- | src/gui/rhi/qrhi_p_p.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/gui/rhi/qrhi_p_p.h b/src/gui/rhi/qrhi_p_p.h index 7fadcfcc1e..a7d8a40bf9 100644 --- a/src/gui/rhi/qrhi_p_p.h +++ b/src/gui/rhi/qrhi_p_p.h @@ -302,6 +302,14 @@ public: return op; } + static void changeToDynamicUpdate(BufferOp *op, QRhiBuffer *buf, int offset, int size, const void *data) + { + op->type = DynamicUpdate; + op->buf = buf; + op->offset = offset; + op->data = QByteArray(reinterpret_cast<const char *>(data), size ? size : buf->size()); + } + static BufferOp staticUpload(QRhiBuffer *buf, int offset, int size, const void *data) { BufferOp op = {}; @@ -312,6 +320,14 @@ public: return op; } + static void changeToStaticUpload(BufferOp *op, QRhiBuffer *buf, int offset, int size, const void *data) + { + op->type = StaticUpload; + op->buf = buf; + op->offset = offset; + op->data = QByteArray(reinterpret_cast<const char *>(data), size ? size : buf->size()); + } + static BufferOp read(QRhiBuffer *buf, int offset, int size, QRhiBufferReadbackResult *result) { BufferOp op = {}; @@ -383,8 +399,11 @@ public: } }; + int activeBufferOpCount = 0; // this is the real number of used elements in bufferOps, not bufferOps.count() static const int BUFFER_OPS_STATIC_ALLOC = 1024; QVarLengthArray<BufferOp, BUFFER_OPS_STATIC_ALLOC> bufferOps; + + int activeTextureOpCount = 0; // this is the real number of used elements in textureOps, not textureOps.count() static const int TEXTURE_OPS_STATIC_ALLOC = 256; QVarLengthArray<TextureOp, TEXTURE_OPS_STATIC_ALLOC> textureOps; @@ -395,6 +414,7 @@ public: void free(); void merge(QRhiResourceUpdateBatchPrivate *other); bool hasOptimalCapacity() const; + void trimOpLists(); static QRhiResourceUpdateBatchPrivate *get(QRhiResourceUpdateBatch *b) { return b->d; } }; |