summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2023-01-25 11:06:59 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-02-14 16:48:20 +0000
commitc63e57872ed9d11b7226ae9d6627ee9a8fafc978 (patch)
tree46c0db95443c95a11ffe06d735d3c2d39f3ab015
parent01b14f431bd49e01b0389517c1c8d97768b3c520 (diff)
downloadqtbase-c63e57872ed9d11b7226ae9d6627ee9a8fafc978.tar.gz
rhi: gl: Skip the vertex-fragment interface check with more stages
Once tessellation and geometry shader support is added, the check makes no sense when there are additional stages between the vertex and fragment stages. Change-Id: I3d3c0a5b338f5fe191c072a13a8699924f7a6a1b Reviewed-by: Kristoffer Skau <kristoffer.skau@qt.io> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> (cherry picked from commit 5476973325288e399f99af004e53184e41892282) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/gui/rhi/qrhigles2.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp
index 77448a8b21..99089d057c 100644
--- a/src/gui/rhi/qrhigles2.cpp
+++ b/src/gui/rhi/qrhigles2.cpp
@@ -5683,9 +5683,12 @@ bool QGles2GraphicsPipeline::create()
};
QShaderDescription desc[LastIdx];
QShader::SeparateToCombinedImageSamplerMappingList samplerMappingList[LastIdx];
+ bool vertexFragmentOnly = true;
for (const QRhiShaderStage &shaderStage : std::as_const(m_shaderStages)) {
if (isGraphicsStage(shaderStage)) {
const int idx = descIdxForStage(shaderStage);
+ if (idx != VtxIdx && idx != FragIdx)
+ vertexFragmentOnly = false;
QShader shader = shaderStage.shader();
QShaderVersion shaderVersion;
desc[idx] = shader.description();
@@ -5717,7 +5720,8 @@ bool QGles2GraphicsPipeline::create()
for (const QShaderDescription::InOutVariable &inVar : desc[VtxIdx].inputVariables())
rhiD->f->glBindAttribLocation(program, GLuint(inVar.location), inVar.name);
- rhiD->sanityCheckVertexFragmentInterface(desc[VtxIdx], desc[FragIdx]);
+ if (vertexFragmentOnly)
+ rhiD->sanityCheckVertexFragmentInterface(desc[VtxIdx], desc[FragIdx]);
if (!rhiD->linkProgram(program))
return false;