diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-08-13 12:16:00 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-08-18 07:58:50 +0200 |
commit | 6a2c89c0433e1202d21a13c9ebfc1fe22465b8fc (patch) | |
tree | d7ece6332132df1d4932a4cc268a231cacdc73bb | |
parent | af5e8c2e97cef39d0b8d21fe072e24598d48871b (diff) |
rhi: sanityCheckGraphicsPipeline handle no vertex attributes
It is a valid use case to have a vertex shader with no
vertex attributes. Using gl_VertexID or gl_InstanceID
is enough to generate vertex data out of thin air.
Change-Id: If7689914624a84723923fd2d7aef355bda592e24
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r-- | src/gui/rhi/qrhi.cpp | 8 | ||||
-rw-r--r-- | tests/auto/gui/rhi/qrhi/tst_qrhi.cpp | 7 |
2 files changed, 1 insertions, 14 deletions
diff --git a/src/gui/rhi/qrhi.cpp b/src/gui/rhi/qrhi.cpp index 76d6622eda..f2c2ad2284 100644 --- a/src/gui/rhi/qrhi.cpp +++ b/src/gui/rhi/qrhi.cpp @@ -4301,14 +4301,8 @@ bool QRhiImplementation::sanityCheckGraphicsPipeline(QRhiGraphicsPipeline *ps) qWarning("Empty shader passed to graphics pipeline"); return false; } - if (it->type() == QRhiShaderStage::Vertex) { + if (it->type() == QRhiShaderStage::Vertex) hasVertexStage = true; - const QRhiVertexInputLayout inputLayout = ps->vertexInputLayout(); - if (inputLayout.cbeginAttributes() == inputLayout.cendAttributes()) { - qWarning("Vertex stage present without any vertex inputs"); - return false; - } - } } if (!hasVertexStage) { qWarning("Cannot build a graphics pipeline without a vertex stage"); diff --git a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp index f5e178de4b..a20bea7ace 100644 --- a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp +++ b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp @@ -1338,13 +1338,6 @@ void tst_QRhi::invalidPipeline() pipeline->setRenderPassDescriptor(rpDesc.data()); QVERIFY(!pipeline->create()); - // no vertex inputs - pipeline.reset(rhi->newGraphicsPipeline()); - pipeline->setShaderStages({ { QRhiShaderStage::Vertex, vs }, { QRhiShaderStage::Fragment, fs } }); - pipeline->setRenderPassDescriptor(rpDesc.data()); - pipeline->setShaderResourceBindings(srb.data()); - QVERIFY(!pipeline->create()); - // no renderpass descriptor pipeline.reset(rhi->newGraphicsPipeline()); pipeline->setShaderStages({ { QRhiShaderStage::Vertex, vs }, { QRhiShaderStage::Fragment, fs } }); |