summaryrefslogtreecommitdiffstats
path: root/src/gui/rhi/qrhid3d11.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2020-09-25 12:51:47 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2020-09-25 16:58:46 +0200
commit89f7389494c6fc917f189150e06ed1fcfaa238e8 (patch)
tree6bf6860bfe83f41917a3b7da1345f8b7c6c9ade8 /src/gui/rhi/qrhid3d11.cpp
parentcc5287a0a99a943febe2a16362d355bab65d7678 (diff)
rhi: gl: d3d: Do not use QByteArray where there is no point
The real benefit in practice is getting rid of profilers going wild about QByteArray::begin() and similar. The actual perf. gain is fairly small. Change-Id: I25e4c762f303b41f0aaf914bc62751f3265d3cf8 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/gui/rhi/qrhid3d11.cpp')
-rw-r--r--src/gui/rhi/qrhid3d11.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/gui/rhi/qrhid3d11.cpp b/src/gui/rhi/qrhid3d11.cpp
index e924966585..2dc5763bd9 100644
--- a/src/gui/rhi/qrhid3d11.cpp
+++ b/src/gui/rhi/qrhid3d11.cpp
@@ -1418,7 +1418,7 @@ void QRhiD3D11::enqueueResourceUpdates(QRhiCommandBuffer *cb, QRhiResourceUpdate
if (u.type == QRhiResourceUpdateBatchPrivate::BufferOp::DynamicUpdate) {
QD3D11Buffer *bufD = QRHI_RES(QD3D11Buffer, u.buf);
Q_ASSERT(bufD->m_type == QRhiBuffer::Dynamic);
- memcpy(bufD->dynBuf.data() + u.offset, u.data.constData(), size_t(u.dataSize));
+ memcpy(bufD->dynBuf + u.offset, u.data.constData(), size_t(u.dataSize));
bufD->hasPendingDynamicUpdates = true;
} else if (u.type == QRhiResourceUpdateBatchPrivate::BufferOp::StaticUpload) {
QD3D11Buffer *bufD = QRHI_RES(QD3D11Buffer, u.buf);
@@ -1445,7 +1445,7 @@ void QRhiD3D11::enqueueResourceUpdates(QRhiCommandBuffer *cb, QRhiResourceUpdate
QD3D11Buffer *bufD = QRHI_RES(QD3D11Buffer, u.buf);
if (bufD->m_type == QRhiBuffer::Dynamic) {
u.result->data.resize(u.readSize);
- memcpy(u.result->data.data(), bufD->dynBuf.constData() + u.offset, size_t(u.readSize));
+ memcpy(u.result->data.data(), bufD->dynBuf + u.offset, size_t(u.readSize));
} else {
BufferReadback readback;
readback.result = u.result;
@@ -2155,7 +2155,7 @@ void QRhiD3D11::updateShaderResourceBindings(QD3D11ShaderResourceBindings *srbD,
void QRhiD3D11::executeBufferHostWrites(QD3D11Buffer *bufD)
{
- if (!bufD->hasPendingDynamicUpdates)
+ if (!bufD->hasPendingDynamicUpdates || bufD->m_size < 1)
return;
Q_ASSERT(bufD->m_type == QRhiBuffer::Dynamic);
@@ -2163,7 +2163,7 @@ void QRhiD3D11::executeBufferHostWrites(QD3D11Buffer *bufD)
D3D11_MAPPED_SUBRESOURCE mp;
HRESULT hr = context->Map(bufD->buffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mp);
if (SUCCEEDED(hr)) {
- memcpy(mp.pData, bufD->dynBuf.constData(), size_t(bufD->dynBuf.size()));
+ memcpy(mp.pData, bufD->dynBuf, size_t(bufD->m_size));
context->Unmap(bufD->buffer, 0);
} else {
qWarning("Failed to map buffer: %s", qPrintable(comErrorMessage(hr)));
@@ -2600,11 +2600,12 @@ void QD3D11Buffer::destroy()
if (!buffer)
return;
- dynBuf.clear();
-
buffer->Release();
buffer = nullptr;
+ delete[] dynBuf;
+ dynBuf = nullptr;
+
if (uav) {
uav->Release();
uav = nullptr;
@@ -2664,7 +2665,7 @@ bool QD3D11Buffer::create()
}
if (m_type == Dynamic) {
- dynBuf.resize(m_size);
+ dynBuf = new char[nonZeroSize];
hasPendingDynamicUpdates = false;
}