Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qssgrendererimplshaders_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QSSGRENDERERIMPLSHADERS_P_H
5#define QSSGRENDERERIMPLSHADERS_P_H
6
7#include <QtCore/qbytearray.h>
8
9#include <QtQuick3DRuntimeRender/private/qtquick3druntimerenderglobal_p.h>
10
11#include <QtQuick3DRuntimeRender/private/qssgrhicontext_p.h>
12#include <QtQuick3DRuntimeRender/private/qssgrenderlayer_p.h>
13#include <QtQuick3DRuntimeRender/private/qssgrenderparticles_p.h>
14
15//
16// W A R N I N G
17// -------------
18//
19// This file is not part of the Qt API. It exists purely as an
20// implementation detail. This header file may change from version to
21// version without notice, or even be removed.
22//
23// We mean it.
24//
25
26QT_BEGIN_NAMESPACE
27
28class QSSGShaderCache;
29
30class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGBuiltInRhiShaderCache
31{
32public:
33 explicit QSSGBuiltInRhiShaderCache(QSSGShaderCache &shaderCache)
34 : m_shaderCache(shaderCache) {}
35
36 void releaseCachedResources();
37
38 enum class LightmapUVRasterizationShaderMode {
39 Default,
40 Uv,
41 UvTangent
42 };
43
44 QSSGRhiShaderPipelinePtr getRhiGridShader(int viewCount);
45 QSSGRhiShaderPipelinePtr getRhiSsaoShader(int viewCount);
46 QSSGRhiShaderPipelinePtr getRhiSkyBoxCubeShader(int viewCount);
47 QSSGRhiShaderPipelinePtr getRhiSkyBoxShader(QSSGRenderLayer::TonemapMode tonemapMode, bool isRGBE, int viewCount);
48 QSSGRhiShaderPipelinePtr getRhiSupersampleResolveShader(int viewCount);
49 QSSGRhiShaderPipelinePtr getRhiProgressiveAAShader();
50 QSSGRhiShaderPipelinePtr getRhiParticleShader(QSSGRenderParticles::FeatureLevel featureLevel, int viewCount, QSSGRenderLayer::OITMethod method);
51 QSSGRhiShaderPipelinePtr getRhiSimpleQuadShader(int viewCount);
52 QSSGRhiShaderPipelinePtr getRhiLightmapUVRasterizationShader(LightmapUVRasterizationShaderMode mode);
53 QSSGRhiShaderPipelinePtr getRhiLightmapDilateShader();
54 QSSGRhiShaderPipelinePtr getRhiDebugObjectShader(int viewCount);
55 QSSGRhiShaderPipelinePtr getRhiReflectionprobePreFilterShader();
56 QSSGRhiShaderPipelinePtr getRhienvironmentmapPreFilterShader(bool isRGBE);
57 QSSGRhiShaderPipelinePtr getRhiEnvironmentmapShader();
58 QSSGRhiShaderPipelinePtr getRhiClearMRTShader();
59 QSSGRhiShaderPipelinePtr getRhiOitCompositeShader(QSSGRenderLayer::OITMethod method, bool multisample);
60 QSSGRhiShaderPipelinePtr getRhiCubeMapToAtlasShader();
61 QSSGRhiShaderPipelinePtr getRhiClearShadowMapShader();
62
63private:
64 QSSGShaderCache &m_shaderCache; // We're owned by the shadercache
65
66 struct BuiltinShader {
67 // The shader refs are non-null if we have attempted to generate the
68 // shader. This does not mean we were successul, however.
69 QSSGRhiShaderPipelinePtr shaderPipeline;
70 int viewCount = 1;
71 };
72
73 QSSGRhiShaderPipelinePtr getBuiltinRhiShader(const QByteArray &name,
74 BuiltinShader &storage,
75 int viewCount = 1);
76 static constexpr int particleShaderCount = 2;
77 static constexpr int compositeShaderCount = 2;
78 struct {
79 BuiltinShader gridShader;
80 BuiltinShader ssaoRhiShader;
81 BuiltinShader skyBoxRhiShader[QSSGRenderLayer::TonemapModeCount * 2 /* rgbe+hdr */];
82 BuiltinShader skyBoxCubeRhiShader;
83 BuiltinShader supersampleResolveRhiShader;
84 BuiltinShader progressiveAARhiShader;
85 BuiltinShader texturedQuadRhiShader;
86 BuiltinShader simpleQuadRhiShader;
87 BuiltinShader lightmapUVRasterShader;
88 BuiltinShader lightmapUVRasterShader_uv;
89 BuiltinShader lightmapUVRasterShader_uv_tangent;
90 BuiltinShader lightmapDilateShader;
91 BuiltinShader debugObjectShader;
92
93 BuiltinShader reflectionprobePreFilterShader;
94 BuiltinShader environmentmapPreFilterShader[2];
95 BuiltinShader environmentmapShader;
96
97 BuiltinShader particlesNoLightingSimpleRhiShader[particleShaderCount];
98 BuiltinShader particlesNoLightingMappedRhiShader[particleShaderCount];
99 BuiltinShader particlesNoLightingAnimatedRhiShader[particleShaderCount];
100 BuiltinShader particlesVLightingSimpleRhiShader[particleShaderCount];
101 BuiltinShader particlesVLightingMappedRhiShader[particleShaderCount];
102 BuiltinShader particlesVLightingAnimatedRhiShader[particleShaderCount];
103 BuiltinShader lineParticlesRhiShader[particleShaderCount];
104 BuiltinShader lineParticlesMappedRhiShader[particleShaderCount];
105 BuiltinShader lineParticlesAnimatedRhiShader[particleShaderCount];
106 BuiltinShader lineParticlesVLightRhiShader[particleShaderCount];
107 BuiltinShader lineParticlesMappedVLightRhiShader[particleShaderCount];
108 BuiltinShader lineParticlesAnimatedVLightRhiShader[particleShaderCount];
109
110 BuiltinShader clearMRTShader;
111 BuiltinShader oitCompositeShader[compositeShaderCount];
112 BuiltinShader cubeMapToAtlasShader;
113 BuiltinShader clearShadowMapShader;
114 } m_cache;
115};
116
117QT_END_NAMESPACE
118
119#endif // QSSGRENDERERIMPLSHADERS_P_H
static QByteArray appendOitMethod(const QByteArray &name, QSSGRenderLayer::OITMethod method)
#define particleShaderName(name, oit)
static constexpr size_t getSkyboxIndex(QSSGRenderLayer::TonemapMode tonemapMode, bool isRGBE)