55QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiSkyBoxCubeShader(QSSGRenderLayer::TonemapMode tonemapMode,
bool isLinear,
int viewCount)
57 const bool rawPixels = (!isLinear && tonemapMode == QSSGRenderLayer::TonemapMode::Linear) || (isLinear && tonemapMode == QSSGRenderLayer::TonemapMode::None);
58 auto shaderName = rawPixels ? QByteArrayLiteral(
"skyboxcube") : QByteArrayLiteral(
"skyboxcube_runtime_tonemapping");
59 return getBuiltinRhiShader(shaderName, m_cache.skyBoxCubeRhiShader, viewCount);
64 switch (tonemapMode) {
65 case QSSGRenderLayer::TonemapMode::None:
66 return 0 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
67 case QSSGRenderLayer::TonemapMode::Linear:
68 return 1 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
69 case QSSGRenderLayer::TonemapMode::Aces:
70 return 2 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
71 case QSSGRenderLayer::TonemapMode::HejlDawson:
72 return 3 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
73 case QSSGRenderLayer::TonemapMode::Filmic:
74 return 4 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
75 case QSSGRenderLayer::TonemapMode::Custom:
76 return 5 + (size_t(isRGBE) * QSSGRenderLayer::TonemapModeCount);
80# if !defined(Q_CC_GNU_ONLY) || (Q_CC_GNU >= 900
)
87QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiSkyBoxShader(QSSGRenderLayer::TonemapMode tonemapMode,
bool isRGBE,
int viewCount)
91 static constexpr char variant[][23] {
"skybox_hdr_none",
94 "skybox_hdr_hejldawson",
100 "skybox_rgbe_hejldawson",
101 "skybox_rgbe_filmic",
102 "skybox_rgbe_custom",
105 const size_t skyboxIndex = getSkyboxIndex(tonemapMode, isRGBE);
106 return getBuiltinRhiShader(QByteArray::fromRawData(variant[skyboxIndex], std::char_traits<
char>::length(variant[skyboxIndex])), m_cache.skyBoxRhiShader[skyboxIndex], viewCount);
138QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiSimpleQuadShader(
int viewCount, QSSGRenderLayer::TonemapMode tonemapMode)
140 static constexpr char variant[][22] = {
144 "simplequad_hejldawson",
148 if (tonemapMode == QSSGRenderLayer::TonemapMode::Custom)
149 tonemapMode = QSSGRenderLayer::TonemapMode::None;
151 const size_t index = qMin(size_t(tonemapMode), std::size(variant) - 1);
152 return getBuiltinRhiShader(QByteArray(variant[index]), m_cache.simpleQuadRhiShader, viewCount);
155QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiLightmapUVRasterizationShader(LightmapUVRasterizationShaderMode mode)
158 case LightmapUVRasterizationShaderMode::Uv:
159 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster_uv"), m_cache.lightmapUVRasterShader_uv);
160 case LightmapUVRasterizationShaderMode::UvTangent:
161 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster_uv_tangent"), m_cache.lightmapUVRasterShader_uv_tangent);
162 case LightmapUVRasterizationShaderMode::Default:
163 return getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster"), m_cache.lightmapUVRasterShader);
166 Q_UNREACHABLE_RETURN(getBuiltinRhiShader(QByteArrayLiteral(
"lightmapuvraster"), m_cache.lightmapUVRasterShader));
184QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhienvironmentmapPreFilterShader(
bool isRGBE)
186 static constexpr char variant[][29] {
"environmentmapprefilter",
"environmentmapprefilter_rgbe" };
187 const quint8 idx = quint8(isRGBE);
188 return getBuiltinRhiShader(QByteArray::fromRawData(variant[idx], std::char_traits<
char>::length(variant[idx])), m_cache.environmentmapPreFilterShader[idx]);
201QSSGRhiShaderPipelinePtr QSSGBuiltInRhiShaderCache::getRhiOitCompositeShader(QSSGRenderLayer::OITMethod method,
bool multisample,
bool use_buffers)
203 if (method == QSSGRenderLayer::OITMethod::WeightedBlended){
205 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended_ms"), m_cache.oitCompositeShader[1]);
207 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended"), m_cache.oitCompositeShader[0]);
208 }
else if (method == QSSGRenderLayer::OITMethod::LinkedList) {
211 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_linkedlist_ms_buf"), m_cache.oitCompositeShader[5]);
213 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_linkedlist_buf"), m_cache.oitCompositeShader[4]);
216 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_linkedlist_ms"), m_cache.oitCompositeShader[3]);
218 return getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_linkedlist"), m_cache.oitCompositeShader[2]);
221 Q_UNREACHABLE_RETURN(getBuiltinRhiShader(QByteArrayLiteral(
"oitcomposite_weightedblended"), m_cache.oitCompositeShader[0]));