OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
shaders.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/RenderPipeline>
4#include <Tempest/Shader>
5#include <Tempest/Device>
6#include <future>
7#include <list>
8
10#include "material.h"
11#include "game/constants.h"
12
13class Shaders {
14 public:
15 Shaders();
16 ~Shaders();
17
18 void waitCompiler();
19
26
27 static Shaders& inst();
28 static bool isVsmSupported();
29 static bool isRtsmSupported();
30
31 Tempest::RenderPipeline lights, lightsRq, lightsVsm;
32 Tempest::RenderPipeline directLight, directLightSh, directLightRq;
33 Tempest::RenderPipeline ambientLight, ambientLightSsao;
34
35 Tempest::ComputePipeline copyBuf;
36 Tempest::ComputePipeline copyImg;
37 Tempest::ComputePipeline patch;
38 Tempest::RenderPipeline copy;
39 Tempest::RenderPipeline stash;
40 Tempest::RenderPipeline bink;
41
42 Tempest::ComputePipeline ssao, ssaoBlur;
43
44 Tempest::ComputePipeline irradiance;
45
46 // Scalable and Production Ready Sky and Atmosphere
47 Tempest::RenderPipeline skyTransmittance, skyMultiScattering;
48 Tempest::RenderPipeline skyViewLut, skyViewCldLut, sky, skySep;
49 Tempest::RenderPipeline fog;
50 Tempest::RenderPipeline fog3dHQ;
51 Tempest::RenderPipeline sun;
52 Tempest::ComputePipeline cloudsLut, fogOcclusion;
53 Tempest::ComputePipeline fogViewLut3d, fogViewLutSep;
54 Tempest::ComputePipeline skyExposure;
55
56 Tempest::RenderPipeline skyPathTrace;
57
58 Tempest::RenderPipeline underwaterT, underwaterS;
59 Tempest::RenderPipeline waterReflection, waterReflectionSSR;
60
61 Tempest::RenderPipeline tonemapping, tonemappingUpscale;
62
63 // AA
64 Tempest::ComputePipeline cmaa2EdgeColor2x2Presets[uint32_t(AaPreset::PRESETS_COUNT)];
65 Tempest::ComputePipeline cmaa2ProcessCandidates;
66 Tempest::RenderPipeline cmaa2DeferredColorApply2x2;
67
68 // HiZ
69 Tempest::ComputePipeline hiZPot, hiZMip;
70
71 // Cluster
72 Tempest::ComputePipeline clusterInit, clusterPatch;
74
75 // GI
76 Tempest::RenderPipeline probeDbg, probeHitDbg;
77 Tempest::ComputePipeline probeInit, probeClear, probeClearHash, probeMakeHash;
78 Tempest::ComputePipeline probeVote, probePrune, probeAlocation;
79 Tempest::ComputePipeline probeTrace, probeLighting;
80 Tempest::RenderPipeline probeAmbient;
81
82 // Epipolar
83 Tempest::ComputePipeline fogEpipolarVsm;
84 Tempest::ComputePipeline fogEpipolarOcclusion;
85
86 // Virtual shadow
87 Tempest::ComputePipeline vsmVisibilityPass;
90 Tempest::ComputePipeline vsmPackDraw0, vsmPackDraw1;
91 Tempest::ComputePipeline vsmFogPages, vsmFogShadow, vsmFogTrace;
92 Tempest::RenderPipeline vsmFog;
93 Tempest::RenderPipeline vsmDirectLight;
94 Tempest::RenderPipeline vsmDbg;
95
96 Tempest::ComputePipeline vsmRendering;
97
98 // RTSM (Experimental)
99 Tempest::RenderPipeline rtsmDirectLight;
100
101 Tempest::ComputePipeline rtsmClear, rtsmPages, rtsmFogPages, rtsmHiZ;
102 Tempest::ComputePipeline rtsmCulling, rtsmPosition;
103 Tempest::ComputePipeline rtsmMeshletCull, rtsmPrimCull;
104 Tempest::ComputePipeline rtsmRaster;
105
106 Tempest::ComputePipeline rtsmClearOmni;
108 Tempest::ComputePipeline rtsmPositionOmni;
109 Tempest::ComputePipeline rtsmMeshletOmni, rtsmBackfaceOmni;
111 Tempest::ComputePipeline rtsmPrimOmni, rtsmRasterOmni;
112
113 Tempest::ComputePipeline rtsmRendering, rtsmRenderingOmni; //reference
114 Tempest::RenderPipeline rtsmDbg;
115
116 Tempest::ComputePipeline swRaytracing, swRaytracing64;
117 Tempest::ComputePipeline swRaytracing8;
118
119 // Software rendering
120 Tempest::ComputePipeline swRendering;
121 Tempest::RenderPipeline swRenderingDbg;
122
123 // Inventory
124 Tempest::RenderPipeline inventory;
125
126 const Tempest::RenderPipeline* materialPipeline(const Material& desc, DrawCommands::Type t, PipelineType pt, bool bindless) const;
127
128 private:
129 struct Entry {
130 Tempest::RenderPipeline pipeline;
133 PipelineType pipelineType = PipelineType::T_Main;
134 bool bindless = false;
135 bool trivial = false;
136 };
137
138 void compileKeyShaders();
139 void compileShaders();
140
141 Tempest::RenderPipeline postEffect(std::string_view name);
142 Tempest::RenderPipeline postEffect(std::string_view name, Tempest::RenderState::ZTestMode ztest);
143 Tempest::RenderPipeline postEffect(std::string_view vs, std::string_view fs, Tempest::RenderState::ZTestMode ztest = Tempest::RenderState::ZTestMode::LEqual);
144 Tempest::ComputePipeline computeShader(std::string_view name);
145 Tempest::RenderPipeline fogShader (std::string_view name);
146 Tempest::RenderPipeline inWaterShader (std::string_view name, bool isScattering);
147 Tempest::RenderPipeline reflectionShader(std::string_view name, bool hasMeshlets);
148 Tempest::RenderPipeline ambientLightShader(std::string_view name);
149
150 static Shaders* instance;
151
152 std::future<void> deferredCompilation;
153 mutable std::list<Entry> materials;
154 };
Tempest::ComputePipeline rtsmPrimOmni
Definition shaders.h:111
Tempest::ComputePipeline rtsmHiZ
Definition shaders.h:101
Tempest::ComputePipeline fogViewLut3d
Definition shaders.h:53
Tempest::RenderPipeline fog3dHQ
Definition shaders.h:50
Tempest::ComputePipeline rtsmMeshletCull
Definition shaders.h:103
static Shaders & inst()
Definition shaders.cpp:39
Tempest::ComputePipeline clusterPatch
Definition shaders.h:72
Tempest::ComputePipeline vsmListPages
Definition shaders.h:89
Tempest::RenderPipeline skyPathTrace
Definition shaders.h:56
Tempest::ComputePipeline probeAlocation
Definition shaders.h:78
Tempest::ComputePipeline vsmRendering
Definition shaders.h:96
Tempest::ComputePipeline rtsmLightsOmni
Definition shaders.h:110
Tempest::ComputePipeline rtsmMeshletOmni
Definition shaders.h:109
Tempest::ComputePipeline vsmCullLights
Definition shaders.h:88
~Shaders()
Definition shaders.cpp:30
Tempest::ComputePipeline fogViewLutSep
Definition shaders.h:53
Tempest::ComputePipeline rtsmBackfaceOmni
Definition shaders.h:109
Tempest::RenderPipeline tonemappingUpscale
Definition shaders.h:61
Tempest::ComputePipeline probeInit
Definition shaders.h:77
Tempest::RenderPipeline directLightSh
Definition shaders.h:32
Tempest::ComputePipeline swRaytracing64
Definition shaders.h:116
Tempest::ComputePipeline fogOcclusion
Definition shaders.h:52
Tempest::ComputePipeline swRendering
Definition shaders.h:120
Tempest::RenderPipeline stash
Definition shaders.h:39
Tempest::RenderPipeline probeHitDbg
Definition shaders.h:76
Tempest::RenderPipeline waterReflection
Definition shaders.h:59
Tempest::ComputePipeline hiZMip
Definition shaders.h:69
Tempest::RenderPipeline rtsmDbg
Definition shaders.h:114
Tempest::ComputePipeline probePrune
Definition shaders.h:78
Tempest::ComputePipeline vsmPackDraw1
Definition shaders.h:90
static bool isRtsmSupported()
Definition shaders.cpp:325
Tempest::RenderPipeline probeAmbient
Definition shaders.h:80
Tempest::ComputePipeline rtsmCulling
Definition shaders.h:102
Tempest::ComputePipeline rtsmCompactOmni
Definition shaders.h:110
Tempest::RenderPipeline vsmDirectLight
Definition shaders.h:93
Tempest::RenderPipeline skyViewLut
Definition shaders.h:48
Tempest::ComputePipeline vsmPostprocessOmni
Definition shaders.h:88
Tempest::RenderPipeline directLightRq
Definition shaders.h:32
const Tempest::RenderPipeline * materialPipeline(const Material &desc, DrawCommands::Type t, PipelineType pt, bool bindless) const
Definition shaders.cpp:338
Tempest::ComputePipeline vsmSortPages
Definition shaders.h:89
Tempest::RenderPipeline ambientLight
Definition shaders.h:33
Tempest::ComputePipeline rtsmRaster
Definition shaders.h:104
Tempest::RenderPipeline vsmDbg
Definition shaders.h:94
Tempest::ComputePipeline visibilityPassSh
Definition shaders.h:73
PipelineType
Definition shaders.h:20
@ T_Main
Definition shaders.h:24
@ T_Shadow
Definition shaders.h:22
@ T_Vsm
Definition shaders.h:23
@ T_Depth
Definition shaders.h:21
Tempest::RenderPipeline sun
Definition shaders.h:51
Tempest::RenderPipeline lightsVsm
Definition shaders.h:31
Tempest::ComputePipeline visibilityPassHiZCr
Definition shaders.h:73
Tempest::RenderPipeline inventory
Definition shaders.h:124
Tempest::ComputePipeline rtsmPosition
Definition shaders.h:102
Tempest::ComputePipeline rtsmRendering
Definition shaders.h:113
Tempest::ComputePipeline vsmMarkOmniPages
Definition shaders.h:88
Tempest::ComputePipeline swRaytracing
Definition shaders.h:116
Tempest::RenderPipeline skyTransmittance
Definition shaders.h:47
Tempest::ComputePipeline hiZPot
Definition shaders.h:69
Tempest::ComputePipeline probeMakeHash
Definition shaders.h:77
Tempest::RenderPipeline swRenderingDbg
Definition shaders.h:121
Tempest::ComputePipeline ssao
Definition shaders.h:42
Tempest::ComputePipeline rtsmCullLights
Definition shaders.h:107
Tempest::ComputePipeline rtsmRasterOmni
Definition shaders.h:111
Tempest::RenderPipeline lightsRq
Definition shaders.h:31
Tempest::ComputePipeline ssaoBlur
Definition shaders.h:42
Tempest::ComputePipeline rtsmTaskOmni
Definition shaders.h:110
Tempest::ComputePipeline vsmFogShadow
Definition shaders.h:91
Tempest::ComputePipeline probeClear
Definition shaders.h:77
Tempest::ComputePipeline visibilityPassHiZ
Definition shaders.h:73
Tempest::ComputePipeline vsmVisibilityPass
Definition shaders.h:87
Tempest::ComputePipeline vsmPackDraw0
Definition shaders.h:90
Tempest::RenderPipeline vsmFog
Definition shaders.h:92
Tempest::ComputePipeline rtsmRenderingOmni
Definition shaders.h:113
Tempest::ComputePipeline vsmAllocPages
Definition shaders.h:89
static bool isVsmSupported()
Definition shaders.cpp:316
Tempest::ComputePipeline rtsmCompactLights
Definition shaders.h:107
Tempest::ComputePipeline rtsmPrimCull
Definition shaders.h:103
Tempest::RenderPipeline skyViewCldLut
Definition shaders.h:48
Tempest::ComputePipeline cmaa2ProcessCandidates
Definition shaders.h:65
Tempest::RenderPipeline directLight
Definition shaders.h:32
Tempest::RenderPipeline fog
Definition shaders.h:49
void waitCompiler()
Definition shaders.cpp:35
Tempest::ComputePipeline probeVote
Definition shaders.h:78
Tempest::ComputePipeline vsmClear
Definition shaders.h:88
Tempest::ComputePipeline rtsmClearOmni
Definition shaders.h:106
Tempest::ComputePipeline vsmFogPages
Definition shaders.h:91
Tempest::ComputePipeline vsmMergePages
Definition shaders.h:89
Tempest::RenderPipeline ambientLightSsao
Definition shaders.h:33
Tempest::ComputePipeline vsmTrimPages
Definition shaders.h:89
Tempest::ComputePipeline fogEpipolarVsm
Definition shaders.h:83
Tempest::RenderPipeline underwaterT
Definition shaders.h:58
Tempest::RenderPipeline copy
Definition shaders.h:38
Tempest::RenderPipeline sky
Definition shaders.h:48
Tempest::RenderPipeline cmaa2DeferredColorApply2x2
Definition shaders.h:66
Tempest::ComputePipeline cloudsLut
Definition shaders.h:52
Tempest::ComputePipeline rtsmCullingOmni
Definition shaders.h:107
Tempest::ComputePipeline probeTrace
Definition shaders.h:79
Tempest::RenderPipeline skyMultiScattering
Definition shaders.h:47
Tempest::ComputePipeline rtsmPositionOmni
Definition shaders.h:108
Tempest::RenderPipeline lights
Definition shaders.h:31
Tempest::ComputePipeline clusterInit
Definition shaders.h:72
Tempest::ComputePipeline rtsmBboxesOmni
Definition shaders.h:110
Tempest::ComputePipeline cmaa2EdgeColor2x2Presets[uint32_t(AaPreset::PRESETS_COUNT)]
Definition shaders.h:64
Tempest::ComputePipeline vsmFogTrace
Definition shaders.h:91
Tempest::RenderPipeline skySep
Definition shaders.h:48
Tempest::ComputePipeline patch
Definition shaders.h:37
Tempest::ComputePipeline fogEpipolarOcclusion
Definition shaders.h:84
Tempest::RenderPipeline bink
Definition shaders.h:40
Shaders()
Definition shaders.cpp:17
Tempest::ComputePipeline irradiance
Definition shaders.h:44
Tempest::ComputePipeline copyImg
Definition shaders.h:36
Tempest::RenderPipeline rtsmDirectLight
Definition shaders.h:99
Tempest::ComputePipeline swRaytracing8
Definition shaders.h:117
Tempest::ComputePipeline vsmClearOmni
Definition shaders.h:88
Tempest::ComputePipeline rtsmFogPages
Definition shaders.h:101
Tempest::ComputePipeline copyBuf
Definition shaders.h:35
Tempest::ComputePipeline probeLighting
Definition shaders.h:79
Tempest::RenderPipeline waterReflectionSSR
Definition shaders.h:59
Tempest::ComputePipeline rtsmPages
Definition shaders.h:101
Tempest::RenderPipeline underwaterS
Definition shaders.h:58
Tempest::ComputePipeline vsmMarkPages
Definition shaders.h:88
Tempest::ComputePipeline vsmClumpPages
Definition shaders.h:89
Tempest::RenderPipeline probeDbg
Definition shaders.h:76
Tempest::ComputePipeline rtsmClear
Definition shaders.h:101
Tempest::ComputePipeline probeClearHash
Definition shaders.h:77
Tempest::ComputePipeline skyExposure
Definition shaders.h:54
Tempest::RenderPipeline tonemapping
Definition shaders.h:61
Tempest::ComputePipeline vsmAlloc2Pages
Definition shaders.h:89