summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2021-12-21 16:04:30 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2022-01-07 01:03:47 +0100
commit7cbac745dcbc42a8bbb19246d4ad98939c3217f8 (patch)
treed7ac998a896eb6e7a1744b07225fa8cc03e94970 /src/gui
parent521fea91690174ddd6340fc6f82554613854b017 (diff)
rhi: Returns mapping tables by value from QShader
As these are QList and QHash. All existing usages are based on this anyway, no value in being able to indicate "not available" - an empty container fulfills the same role. Change-Id: I8059025fa7a4acb6fc674cd98b16fcafa19ed85d Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/rhi/qrhid3d11.cpp9
-rw-r--r--src/gui/rhi/qrhigles2.cpp12
-rw-r--r--src/gui/rhi/qrhimetal.mm9
-rw-r--r--src/gui/rhi/qshader.cpp23
-rw-r--r--src/gui/rhi/qshader_p.h4
5 files changed, 26 insertions, 31 deletions
diff --git a/src/gui/rhi/qrhid3d11.cpp b/src/gui/rhi/qrhid3d11.cpp
index 74abfdff87..eaaf0c6991 100644
--- a/src/gui/rhi/qrhid3d11.cpp
+++ b/src/gui/rhi/qrhid3d11.cpp
@@ -4156,8 +4156,7 @@ bool QD3D11GraphicsPipeline::create()
return false;
}
vsByteCode = bytecode;
- if (const QShader::NativeResourceBindingMap *map = shaderStage.shader().nativeResourceBindingMap(shaderKey))
- vs.nativeResourceBindingMap = *map;
+ vs.nativeResourceBindingMap = shaderStage.shader().nativeResourceBindingMap(shaderKey);
rhiD->m_shaderCache.insert(shaderStage, QRhiD3D11::Shader(vs.shader, bytecode, vs.nativeResourceBindingMap));
vs.shader->AddRef();
break;
@@ -4167,8 +4166,7 @@ bool QD3D11GraphicsPipeline::create()
qWarning("Failed to create pixel shader: %s", qPrintable(comErrorMessage(hr)));
return false;
}
- if (const QShader::NativeResourceBindingMap *map = shaderStage.shader().nativeResourceBindingMap(shaderKey))
- fs.nativeResourceBindingMap = *map;
+ fs.nativeResourceBindingMap = shaderStage.shader().nativeResourceBindingMap(shaderKey);
rhiD->m_shaderCache.insert(shaderStage, QRhiD3D11::Shader(fs.shader, bytecode, fs.nativeResourceBindingMap));
fs.shader->AddRef();
break;
@@ -4286,8 +4284,7 @@ bool QD3D11ComputePipeline::create()
return false;
}
- if (const QShader::NativeResourceBindingMap *map = m_shaderStage.shader().nativeResourceBindingMap(shaderKey))
- cs.nativeResourceBindingMap = *map;
+ cs.nativeResourceBindingMap = m_shaderStage.shader().nativeResourceBindingMap(shaderKey);
if (rhiD->m_shaderCache.count() >= QRhiD3D11::MAX_SHADER_CACHE_ENTRIES)
rhiD->clearShaderCache();
diff --git a/src/gui/rhi/qrhigles2.cpp b/src/gui/rhi/qrhigles2.cpp
index 02fbb5ec40..b67f87ed6e 100644
--- a/src/gui/rhi/qrhigles2.cpp
+++ b/src/gui/rhi/qrhigles2.cpp
@@ -5341,14 +5341,14 @@ bool QGles2GraphicsPipeline::create()
if (shaderStage.type() == QRhiShaderStage::Vertex) {
vsDesc = shader.description();
if (!rhiD->shaderSource(shaderStage, &glslVersion).isEmpty()) {
- if (auto *m = shader.separateToCombinedImageSamplerMappingList({ QShader::GlslShader, glslVersion, shaderStage.shaderVariant() }))
- vsSamplerMappingList = *m;
+ vsSamplerMappingList = shader.separateToCombinedImageSamplerMappingList(
+ { QShader::GlslShader, glslVersion, shaderStage.shaderVariant() });
}
} else if (shaderStage.type() == QRhiShaderStage::Fragment) {
fsDesc = shader.description();
if (!rhiD->shaderSource(shaderStage, &glslVersion).isEmpty()) {
- if (auto *m = shader.separateToCombinedImageSamplerMappingList({ QShader::GlslShader, glslVersion, shaderStage.shaderVariant() }))
- fsSamplerMappingList = *m;
+ fsSamplerMappingList = shader.separateToCombinedImageSamplerMappingList(
+ { QShader::GlslShader, glslVersion, shaderStage.shaderVariant() });
}
}
}
@@ -5484,8 +5484,8 @@ bool QGles2ComputePipeline::create()
QShader::SeparateToCombinedImageSamplerMappingList csSamplerMappingList;
int glslVersion = 0;
if (!rhiD->shaderSource(m_shaderStage, &glslVersion).isEmpty()) {
- if (auto *m = m_shaderStage.shader().separateToCombinedImageSamplerMappingList({ QShader::GlslShader, glslVersion, m_shaderStage.shaderVariant() }))
- csSamplerMappingList = *m;
+ csSamplerMappingList = m_shaderStage.shader().separateToCombinedImageSamplerMappingList(
+ { QShader::GlslShader, glslVersion, m_shaderStage.shaderVariant() });
}
program = rhiD->f->glCreateProgram();
diff --git a/src/gui/rhi/qrhimetal.mm b/src/gui/rhi/qrhimetal.mm
index 3a1eaccc92..ff136debe9 100644
--- a/src/gui/rhi/qrhimetal.mm
+++ b/src/gui/rhi/qrhimetal.mm
@@ -3642,8 +3642,7 @@ bool QMetalGraphicsPipeline::create()
case QRhiShaderStage::Vertex:
d->vs.lib = lib;
d->vs.func = func;
- if (const QShader::NativeResourceBindingMap *map = shader.nativeResourceBindingMap(activeKey))
- d->vs.nativeResourceBindingMap = *map;
+ d->vs.nativeResourceBindingMap = shader.nativeResourceBindingMap(activeKey);
rhiD->d->shaderCache.insert(shaderStage, d->vs);
[d->vs.lib retain];
[d->vs.func retain];
@@ -3652,8 +3651,7 @@ bool QMetalGraphicsPipeline::create()
case QRhiShaderStage::Fragment:
d->fs.lib = lib;
d->fs.func = func;
- if (const QShader::NativeResourceBindingMap *map = shader.nativeResourceBindingMap(activeKey))
- d->fs.nativeResourceBindingMap = *map;
+ d->fs.nativeResourceBindingMap = shader.nativeResourceBindingMap(activeKey);
rhiD->d->shaderCache.insert(shaderStage, d->fs);
[d->fs.lib retain];
[d->fs.func retain];
@@ -3810,8 +3808,7 @@ bool QMetalComputePipeline::create()
d->cs.lib = lib;
d->cs.func = func;
d->cs.localSize = shader.description().computeShaderLocalSize();
- if (const QShader::NativeResourceBindingMap *map = shader.nativeResourceBindingMap(activeKey))
- d->cs.nativeResourceBindingMap = *map;
+ d->cs.nativeResourceBindingMap = shader.nativeResourceBindingMap(activeKey);
if (rhiD->d->shaderCache.count() >= QRhiMetal::MAX_SHADER_CACHE_ENTRIES) {
for (QMetalShader &s : rhiD->d->shaderCache)
diff --git a/src/gui/rhi/qshader.cpp b/src/gui/rhi/qshader.cpp
index b29abe2778..7c77803f12 100644
--- a/src/gui/rhi/qshader.cpp
+++ b/src/gui/rhi/qshader.cpp
@@ -742,16 +742,17 @@ QDebug operator<<(QDebug dbg, const QShaderVersion &v)
*/
/*!
- \return the native binding map for \a key or null if no extra mapping is
- available, or is not applicable.
+ \return the native binding map for \a key. The map is empty if no mapping
+ is available for \a key (for example, because the map is not applicable for
+ the API and shading language described by \a key).
*/
-const QShader::NativeResourceBindingMap *QShader::nativeResourceBindingMap(const QShaderKey &key) const
+QShader::NativeResourceBindingMap QShader::nativeResourceBindingMap(const QShaderKey &key) const
{
auto it = d->bindings.constFind(key);
if (it == d->bindings.cend())
- return nullptr;
+ return {};
- return &it.value();
+ return it.value();
}
/*!
@@ -798,17 +799,17 @@ void QShader::removeResourceBindingMap(const QShaderKey &key)
*/
/*!
- \return the combined image sampler mapping list for \a key or null if there
- is no data available for \a key, for example because such a mapping is not
- applicable for the shading language.
+ \return the combined image sampler mapping list for \a key, or an empty
+ list if there is no data available for \a key, for example because such a
+ mapping is not applicable for the shading language.
*/
-const QShader::SeparateToCombinedImageSamplerMappingList *QShader::separateToCombinedImageSamplerMappingList(const QShaderKey &key) const
+QShader::SeparateToCombinedImageSamplerMappingList QShader::separateToCombinedImageSamplerMappingList(const QShaderKey &key) const
{
auto it = d->combinedImageMap.constFind(key);
if (it == d->combinedImageMap.cend())
- return nullptr;
+ return {};
- return &it.value();
+ return it.value();
}
/*!
diff --git a/src/gui/rhi/qshader_p.h b/src/gui/rhi/qshader_p.h
index 6dca86b1c4..29235c6b0b 100644
--- a/src/gui/rhi/qshader_p.h
+++ b/src/gui/rhi/qshader_p.h
@@ -163,7 +163,7 @@ public:
static QShader fromSerialized(const QByteArray &data);
using NativeResourceBindingMap = QHash<int, QPair<int, int> >; // binding -> native_binding[, native_binding]
- const NativeResourceBindingMap *nativeResourceBindingMap(const QShaderKey &key) const;
+ NativeResourceBindingMap nativeResourceBindingMap(const QShaderKey &key) const;
void setResourceBindingMap(const QShaderKey &key, const NativeResourceBindingMap &map);
void removeResourceBindingMap(const QShaderKey &key);
@@ -173,7 +173,7 @@ public:
int samplerBinding;
};
using SeparateToCombinedImageSamplerMappingList = QList<SeparateToCombinedImageSamplerMapping>;
- const SeparateToCombinedImageSamplerMappingList *separateToCombinedImageSamplerMappingList(const QShaderKey &key) const;
+ SeparateToCombinedImageSamplerMappingList separateToCombinedImageSamplerMappingList(const QShaderKey &key) const;
void setSeparateToCombinedImageSamplerMappingList(const QShaderKey &key,
const SeparateToCombinedImageSamplerMappingList &list);
void removeSeparateToCombinedImageSamplerMappingList(const QShaderKey &key);