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 getRhienvironmentmapPreFilterShader(bool isRGBE);
60 QSSGRhiShaderPipelinePtr getRhiEnvironmentmapShader();
61 QSSGRhiShaderPipelinePtr getRhiClearMRTShader();
62 QSSGRhiShaderPipelinePtr getRhiOitCompositeShader(QSSGRenderLayer::OITMethod method, bool multisample, bool use_buffers = false);
63 QSSGRhiShaderPipelinePtr getRhiCubeMapToAtlasShader();
64 QSSGRhiShaderPipelinePtr getRhiClearShadowMapShader();
65 QSSGRhiShaderPipelinePtr getRhiClearImageShader();
66 QSSGRhiShaderPipelinePtr getRhiClearBufferShader();
67
68private:
69 QSSGShaderCache &m_shaderCache; // We're owned by the shadercache
70
71 struct BuiltinShader {
72 // The shader refs are non-null if we have attempted to generate the
73 // shader. This does not mean we were successul, however.
74 QSSGRhiShaderPipelinePtr shaderPipeline;
75 int viewCount = 1;
76 };
77
78 QSSGRhiShaderPipelinePtr getBuiltinRhiShader(const QByteArray &name,
79 BuiltinShader &storage,
80 int viewCount = 1,
81 QSSGRhiShaderPipeline::StageFlags vertexStageFlags = QSSGRhiShaderPipeline::UsedWithoutIa);
82 static constexpr int motionvectorShaderCount = 8; // (int(skin) << 2) | (int(instance) << 1) | int(morph);
83 static constexpr int particleShaderCount = 2;
84 static constexpr int compositeShaderCount = 6;
85 struct {
86 BuiltinShader gridShader;
87 BuiltinShader ssaoRhiShader;
88 BuiltinShader skyBoxRhiShader[QSSGRenderLayer::TonemapModeCount * 2 /* rgbe+hdr */];
89 BuiltinShader skyBoxCubeRhiShader;
90 BuiltinShader supersampleResolveRhiShader;
91 BuiltinShader progressiveAARhiShader;
92 BuiltinShader texturedQuadRhiShader;
93 BuiltinShader simpleQuadRhiShader;
94 BuiltinShader lightmapUVRasterShader;
95 BuiltinShader lightmapUVRasterShader_uv;
96 BuiltinShader lightmapUVRasterShader_uv_tangent;
97 BuiltinShader lightmapDilateShader;
98 BuiltinShader debugObjectShader;
99
100 BuiltinShader reflectionprobePreFilterShader;
101 BuiltinShader environmentmapPreFilterShader[2];
102 BuiltinShader environmentmapShader;
103
104 BuiltinShader clearMRTShader;
105 BuiltinShader oitCompositeShader[compositeShaderCount];
106 BuiltinShader cubeMapToAtlasShader;
107 BuiltinShader clearShadowMapShader;
108 BuiltinShader clearImageShader;
109 BuiltinShader clearBufferShader;
110 BuiltinShader motionVectorRhiShader[motionvectorShaderCount];
111 BuiltinShader temporalAARhiShader;
112 } m_cache;
113};
114
115QT_END_NAMESPACE
116
117#endif // QSSGRENDERERIMPLSHADERS_P_H
Combined button and popup list for selecting options.
static constexpr size_t getSkyboxIndex(QSSGRenderLayer::TonemapMode tonemapMode, bool isRGBE)