rhi: Make QRhiRenderTarget's rp getter functional with swapchains
swapchain->currentFrameRenderTarget()->renderPassDescriptor() is not functional at the moment, it returns null. This is because no backend ensures that the internal renderpass descriptor object is exposed via that getter in a QRhiSwapChainRenderTarget. Whereas in a QRhiTextureRenderTarget this would work by design because there the setter must be called by the user. Fix this up, providing better API symmetry, and also reducing the need to pass along QRhiRenderPassDescriptor objects seprately alongside a QRhiRenderTarget in some places, e.g. in Qt Quick. Change-Id: I42c4e9aaee3202c1d23bd093d840af80c5f8cd0f Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>bb10
parent
6df137ca2f
commit
b78f3f4974
|
|
@ -4827,6 +4827,7 @@ bool QD3D11SwapChain::createOrResize()
|
|||
frameCount = 0;
|
||||
ds = m_depthStencil ? QRHI_RES(QD3D11RenderBuffer, m_depthStencil) : nullptr;
|
||||
|
||||
rt.setRenderPassDescriptor(m_renderPassDesc); // for the public getter in QRhiRenderTarget
|
||||
QD3D11SwapChainRenderTarget *rtD = QRHI_RES(QD3D11SwapChainRenderTarget, &rt);
|
||||
rtD->d.rp = QRHI_RES(QD3D11RenderPassDescriptor, m_renderPassDesc);
|
||||
rtD->d.pixelSize = pixelSize;
|
||||
|
|
|
|||
|
|
@ -5795,6 +5795,7 @@ bool QGles2SwapChain::createOrResize()
|
|||
m_depthStencil->create();
|
||||
}
|
||||
|
||||
rt.setRenderPassDescriptor(m_renderPassDesc); // for the public getter in QRhiRenderTarget
|
||||
rt.d.rp = QRHI_RES(QGles2RenderPassDescriptor, m_renderPassDesc);
|
||||
rt.d.pixelSize = pixelSize;
|
||||
rt.d.dpr = float(m_window->devicePixelRatio());
|
||||
|
|
|
|||
|
|
@ -4179,6 +4179,7 @@ bool QMetalSwapChain::createOrResize()
|
|||
}
|
||||
}
|
||||
|
||||
rtWrapper.setRenderPassDescriptor(m_renderPassDesc); // for the public getter in QRhiRenderTarget
|
||||
rtWrapper.d->pixelSize = pixelSize;
|
||||
rtWrapper.d->dpr = float(window->devicePixelRatio());
|
||||
rtWrapper.d->sampleCount = samples;
|
||||
|
|
|
|||
|
|
@ -1015,6 +1015,7 @@ bool QNullSwapChain::createOrResize()
|
|||
|
||||
window = m_window;
|
||||
m_currentPixelSize = surfacePixelSize();
|
||||
rt.setRenderPassDescriptor(m_renderPassDesc); // for the public getter in QRhiRenderTarget
|
||||
rt.d.rp = QRHI_RES(QNullRenderPassDescriptor, m_renderPassDesc);
|
||||
rt.d.pixelSize = m_currentPixelSize;
|
||||
frameCount = 0;
|
||||
|
|
|
|||
|
|
@ -7507,6 +7507,7 @@ bool QVkSwapChain::createOrResize()
|
|||
if (!m_renderPassDesc)
|
||||
qWarning("QVkSwapChain: No renderpass descriptor set. See newCompatibleRenderPassDescriptor() and setRenderPassDescriptor().");
|
||||
|
||||
rtWrapper.setRenderPassDescriptor(m_renderPassDesc); // for the public getter in QRhiRenderTarget
|
||||
rtWrapper.d.rp = QRHI_RES(QVkRenderPassDescriptor, m_renderPassDesc);
|
||||
Q_ASSERT(rtWrapper.d.rp && rtWrapper.d.rp->rp);
|
||||
|
||||
|
|
|
|||
|
|
@ -3456,6 +3456,7 @@ void tst_QRhi::renderToWindowSimple()
|
|||
QRhiCommandBuffer *cb = swapChain->currentFrameCommandBuffer();
|
||||
QRhiRenderTarget *rt = swapChain->currentFrameRenderTarget();
|
||||
QCOMPARE(rt->resourceType(), QRhiResource::SwapChainRenderTarget);
|
||||
QVERIFY(rt->renderPassDescriptor());
|
||||
QCOMPARE(static_cast<QRhiSwapChainRenderTarget *>(rt)->swapChain(), swapChain.data());
|
||||
const QSize outputSize = swapChain->currentPixelSize();
|
||||
QCOMPARE(rt->pixelSize(), outputSize);
|
||||
|
|
|
|||
Loading…
Reference in New Issue