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// Qt-Security score:significant reason:default
4
5
6#ifndef QSSGRENDERERIMPLSHADERS_P_H
7#define QSSGRENDERERIMPLSHADERS_P_H
8
9#include <QtCore/qbytearray.h>
10
11#include <QtQuick3DRuntimeRender/private/qtquick3druntimerenderglobal_p.h>
12
13#include <QtQuick3DRuntimeRender/private/qssgrhicontext_p.h>
14#include <QtQuick3DRuntimeRender/private/qssgrenderlayer_p.h>
15#include <QtQuick3DRuntimeRender/private/qssgrenderparticles_p.h>
16
17//
18// W A R N I N G
19// -------------
20//
21// This file is not part of the Qt API. It exists purely as an
22// implementation detail. This header file may change from version to
23// version without notice, or even be removed.
24//
25// We mean it.
26//
27
28QT_BEGIN_NAMESPACE
29
30class QSSGShaderCache;
31
32class Q_QUICK3DRUNTIMERENDER_EXPORT QSSGBuiltInRhiShaderCache
33{
34public:
35 explicit QSSGBuiltInRhiShaderCache(QSSGShaderCache &shaderCache)
36 : m_shaderCache(shaderCache) {}
37
38 void releaseCachedResources();
39
40 enum class LightmapUVRasterizationShaderMode {
41 Default,
42 Uv,
43 UvTangent
44 };
45
46 QSSGRhiShaderPipelinePtr getRhiGridShader(int viewCount);
47 QSSGRhiShaderPipelinePtr getRhiSsaoShader(int viewCount);
48 QSSGRhiShaderPipelinePtr getRhiSkyBoxCubeShader(QSSGRenderLayer::TonemapMode tonemapMode, bool isLinear, int viewCount);
49 QSSGRhiShaderPipelinePtr getRhiSkyBoxShader(QSSGRenderLayer::TonemapMode tonemapMode, bool isRGBE, int viewCount);
50 QSSGRhiShaderPipelinePtr getRhiSupersampleResolveShader(int viewCount);
51 QSSGRhiShaderPipelinePtr getRhiProgressiveAAShader();
52 QSSGRhiShaderPipelinePtr getRhiMotionVectorShader(bool skin, bool instance, bool morph);
53 QSSGRhiShaderPipelinePtr getRhiTemporalAAShader();
54 QSSGRhiShaderPipelinePtr getRhiSimpleQuadShader(int viewCount, QSSGRenderLayer::TonemapMode tonemapMode = QSSGRenderLayer::TonemapMode::None);
55 QSSGRhiShaderPipelinePtr getRhiLightmapUVRasterizationShader(LightmapUVRasterizationShaderMode mode);
56 QSSGRhiShaderPipelinePtr getRhiLightmapDilateShader();
57 QSSGRhiShaderPipelinePtr getRhiDebugObjectShader(int viewCount);
58 QSSGRhiShaderPipelinePtr getRhiReflectionprobePreFilterShader();
59 QSSGRhiShaderPipelinePtr getRhiSkyIblPreFilterShader();
60 QSSGRhiShaderPipelinePtr getRhiSkyIblPreFilterNormalizeShader();
61 QSSGRhiShaderPipelinePtr getRhienvironmentmapPreFilterShader(bool isRGBE);
62 QSSGRhiShaderPipelinePtr getRhiEnvironmentmapShader();
63 QSSGRhiShaderPipelinePtr getRhiClearMRTShader();
64 QSSGRhiShaderPipelinePtr getRhiOitCompositeShader(QSSGRenderLayer::OITMethod method, bool multisample, bool use_buffers = false);
65 QSSGRhiShaderPipelinePtr getRhiCubeMapToAtlasShader();
66 QSSGRhiShaderPipelinePtr getRhiClearShadowMapShader();
67 QSSGRhiShaderPipelinePtr getRhiClearImageShader();
68 QSSGRhiShaderPipelinePtr getRhiClearBufferShader();
69
70private:
71 QSSGShaderCache &m_shaderCache; // We're owned by the shadercache
72
73 struct BuiltinShader {
74 // The shader refs are non-null if we have attempted to generate the
75 // shader. This does not mean we were successul, however.
76 QSSGRhiShaderPipelinePtr shaderPipeline;
77 int viewCount = 1;
78 };
79
80 QSSGRhiShaderPipelinePtr getBuiltinRhiShader(const QByteArray &name,
81 BuiltinShader &storage,
82 int viewCount = 1,
83 QSSGRhiShaderPipeline::StageFlags vertexStageFlags = QSSGRhiShaderPipeline::UsedWithoutIa);
84 static constexpr int motionvectorShaderCount = 8; // (int(skin) << 2) | (int(instance) << 1) | int(morph);
85 static constexpr int particleShaderCount = 2;
86 static constexpr int compositeShaderCount = 6;
87 struct {
88 BuiltinShader gridShader;
89 BuiltinShader ssaoRhiShader;
90 BuiltinShader skyBoxRhiShader[QSSGRenderLayer::TonemapModeCount * 2 /* rgbe+hdr */];
91 BuiltinShader skyBoxCubeRhiShader;
92 BuiltinShader supersampleResolveRhiShader;
93 BuiltinShader progressiveAARhiShader;
94 BuiltinShader texturedQuadRhiShader;
95 BuiltinShader simpleQuadRhiShader;
96 BuiltinShader lightmapUVRasterShader;
97 BuiltinShader lightmapUVRasterShader_uv;
98 BuiltinShader lightmapUVRasterShader_uv_tangent;
99 BuiltinShader lightmapDilateShader;
100 BuiltinShader debugObjectShader;
101
102 BuiltinShader reflectionprobePreFilterShader;
103 BuiltinShader skyIblPreFilterShader;
104 BuiltinShader skyIblPreFilterNormalizeShader;
105 BuiltinShader environmentmapPreFilterShader[2];
106 BuiltinShader environmentmapShader;
107
108 BuiltinShader clearMRTShader;
109 BuiltinShader oitCompositeShader[compositeShaderCount];
110 BuiltinShader cubeMapToAtlasShader;
111 BuiltinShader clearShadowMapShader;
112 BuiltinShader clearImageShader;
113 BuiltinShader clearBufferShader;
114 BuiltinShader motionVectorRhiShader[motionvectorShaderCount];
115 BuiltinShader temporalAARhiShader;
116 } m_cache;
117};
118
119QT_END_NAMESPACE
120
121#endif // QSSGRENDERERIMPLSHADERS_P_H
Combined button and popup list for selecting options.
static constexpr size_t getSkyboxIndex(QSSGRenderLayer::TonemapMode tonemapMode, bool isRGBE)