summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2021-12-22 10:48:23 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2022-01-07 14:31:38 +0100
commit0739170d4b3b25ce900549693a787bba0d8855b6 (patch)
tree12137d55693c793fd63ef2c42f18b3ced9af0995 /src/gui
parente4c2460507a425087bf7b36ad83886fe57f61b2f (diff)
rhi: gl: Prevent breaking with ES when querying the sampler mapping table
Send the full QShaderVersion down the line, not just the version number. Change-Id: I895d552fc47e0eb4ca92f32f117cd5a1d4d9015a Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/rhi/qrhigles2.cpp30
-rw-r--r--src/gui/rhi/qrhigles2_p_p.h4
2 files changed, 17 insertions, 17 deletions
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp
index b67f87ed6e..01d4f927d7 100644
--- a/src/gui/rhi/qrhigles2.cpp
+++ b/src/gui/rhi/qrhigles2.cpp
@@ -4127,7 +4127,7 @@ static inline GLenum toGlShaderType(QRhiShaderStage::Type type)
}
}
-QByteArray QRhiGles2::shaderSource(const QRhiShaderStage &shaderStage, int *glslVersion)
+QByteArray QRhiGles2::shaderSource(const QRhiShaderStage &shaderStage, QShaderVersion *shaderVersion)
{
const QShader bakedShader = shaderStage.shader();
QList<int> versionsToTry;
@@ -4146,8 +4146,8 @@ QByteArray QRhiGles2::shaderSource(const QRhiShaderStage &shaderStage, int *glsl
QShaderVersion ver(v, QShaderVersion::GlslEs);
source = bakedShader.shader({ QShader::GlslShader, ver, shaderStage.shaderVariant() }).shader();
if (!source.isEmpty()) {
- if (glslVersion)
- *glslVersion = v;
+ if (shaderVersion)
+ *shaderVersion = ver;
break;
}
}
@@ -4180,8 +4180,8 @@ QByteArray QRhiGles2::shaderSource(const QRhiShaderStage &shaderStage, int *glsl
for (int v : versionsToTry) {
source = bakedShader.shader({ QShader::GlslShader, v, shaderStage.shaderVariant() }).shader();
if (!source.isEmpty()) {
- if (glslVersion)
- *glslVersion = v;
+ if (shaderVersion)
+ *shaderVersion = v;
break;
}
}
@@ -4193,9 +4193,9 @@ QByteArray QRhiGles2::shaderSource(const QRhiShaderStage &shaderStage, int *glsl
return source;
}
-bool QRhiGles2::compileShader(GLuint program, const QRhiShaderStage &shaderStage, int *glslVersion)
+bool QRhiGles2::compileShader(GLuint program, const QRhiShaderStage &shaderStage, QShaderVersion *shaderVersion)
{
- const QByteArray source = shaderSource(shaderStage, glslVersion);
+ const QByteArray source = shaderSource(shaderStage, shaderVersion);
if (source.isEmpty())
return false;
@@ -5337,18 +5337,18 @@ bool QGles2GraphicsPipeline::create()
QShader::SeparateToCombinedImageSamplerMappingList fsSamplerMappingList;
for (const QRhiShaderStage &shaderStage : qAsConst(m_shaderStages)) {
QShader shader = shaderStage.shader();
- int glslVersion = 0;
+ QShaderVersion shaderVersion;
if (shaderStage.type() == QRhiShaderStage::Vertex) {
vsDesc = shader.description();
- if (!rhiD->shaderSource(shaderStage, &glslVersion).isEmpty()) {
+ if (!rhiD->shaderSource(shaderStage, &shaderVersion).isEmpty()) {
vsSamplerMappingList = shader.separateToCombinedImageSamplerMappingList(
- { QShader::GlslShader, glslVersion, shaderStage.shaderVariant() });
+ { QShader::GlslShader, shaderVersion, shaderStage.shaderVariant() });
}
} else if (shaderStage.type() == QRhiShaderStage::Fragment) {
fsDesc = shader.description();
- if (!rhiD->shaderSource(shaderStage, &glslVersion).isEmpty()) {
+ if (!rhiD->shaderSource(shaderStage, &shaderVersion).isEmpty()) {
fsSamplerMappingList = shader.separateToCombinedImageSamplerMappingList(
- { QShader::GlslShader, glslVersion, shaderStage.shaderVariant() });
+ { QShader::GlslShader, shaderVersion, shaderStage.shaderVariant() });
}
}
}
@@ -5482,10 +5482,10 @@ bool QGles2ComputePipeline::create()
const QShaderDescription csDesc = m_shaderStage.shader().description();
QShader::SeparateToCombinedImageSamplerMappingList csSamplerMappingList;
- int glslVersion = 0;
- if (!rhiD->shaderSource(m_shaderStage, &glslVersion).isEmpty()) {
+ QShaderVersion shaderVersion;
+ if (!rhiD->shaderSource(m_shaderStage, &shaderVersion).isEmpty()) {
csSamplerMappingList = m_shaderStage.shader().separateToCombinedImageSamplerMappingList(
- { QShader::GlslShader, glslVersion, m_shaderStage.shaderVariant() });
+ { QShader::GlslShader, shaderVersion, m_shaderStage.shaderVariant() });
}
program = rhiD->f->glCreateProgram();
diff --git a/src/gui/rhi/qrhigles2_p_p.h b/src/gui/rhi/qrhigles2_p_p.h
index dd0728cfc0..3fbbf71362 100644
--- a/src/gui/rhi/qrhigles2_p_p.h
+++ b/src/gui/rhi/qrhigles2_p_p.h
@@ -875,8 +875,8 @@ public:
bool *wantsColorClear = nullptr, bool *wantsDsClear = nullptr);
void enqueueBarriersForPass(QGles2CommandBuffer *cbD);
int effectiveSampleCount(int sampleCount) const;
- QByteArray shaderSource(const QRhiShaderStage &shaderStage, int *glslVersion);
- bool compileShader(GLuint program, const QRhiShaderStage &shaderStage, int *glslVersion);
+ QByteArray shaderSource(const QRhiShaderStage &shaderStage, QShaderVersion *shaderVersion);
+ bool compileShader(GLuint program, const QRhiShaderStage &shaderStage, QShaderVersion *shaderVersion);
bool linkProgram(GLuint program);
void registerUniformIfActive(const QShaderDescription::BlockVariable &var,
const QByteArray &namePrefix, int binding, int baseOffset,