Skip to content

Commit 52692f7

Browse files
committed
Refactor to use new ShaderCooker
Add loading of ShaderPacks to GameRenderer which now owns shaders Use new way of loading shaders that are already in memory and owned by Game Refactor as much of pipeline creation as possible to happen once upfront rather than every frame Move Present Blit pipeline creation to GameRenderer, providing a callback to get them to the Engine Fix minor issues with CVarEditor Add -f flag to ShaderCookerStandalone to skip shader cache and force rebuild all shaders Add -d flag to ShaderCookerStandalone to output individual .spv files for debugging Clean up shaders Move Shader descriptor set declarations into their own files Add slangdconfig.json for better shader highlighting once we move to .slang extension
1 parent e1eef6b commit 52692f7

File tree

119 files changed

+1823
-1064
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+1823
-1064
lines changed

Source/Game-Lib/Game-Lib/Editor/CVarEditor.cpp

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -212,14 +212,17 @@ namespace Editor
212212
{
213213
bool bCheckbox = cvarSystem->GetCVarArray<i32>()->GetCurrent(p->arrayIndex) != 0;
214214
if (ImGui::Checkbox("", &bCheckbox))
215+
{
215216
cvarSystem->GetCVarArray<i32>()->SetCurrent(bCheckbox ? 1 : 0, p->arrayIndex);
216-
217-
// intCVars[p->arrayIndex].current = bCheckbox ? 1 : 0;
217+
}
218218
}
219219
else
220220
{
221-
if (ImGui::InputInt("", cvarSystem->GetCVarArray<i32>()->GetCurrentPtr(p->arrayIndex)))
222-
cvarSystem->MarkDirty();
221+
i32 val = cvarSystem->GetCVarArray<i32>()->GetCurrent(p->arrayIndex);
222+
if (ImGui::InputInt("", &val))
223+
{
224+
cvarSystem->GetCVarArray<i32>()->SetCurrent(val, p->arrayIndex);
225+
}
223226
}
224227
}
225228
break;
@@ -236,30 +239,43 @@ namespace Editor
236239
Label(p->name.c_str(), textWidth);
237240
if (dragFlag)
238241
{
239-
if (ImGui::InputDouble("", cvarSystem->GetCVarArray<f64>()->GetCurrentPtr(p->arrayIndex)))
240-
cvarSystem->MarkDirty();
242+
// TODO: Should this be a different kind of input for dragging?
243+
f64 val = cvarSystem->GetCVarArray<f64>()->GetCurrent(p->arrayIndex);
244+
if (ImGui::InputDouble("", &val))
245+
{
246+
cvarSystem->GetCVarArray<f64>()->SetCurrent(val, p->arrayIndex);
247+
}
241248
}
242249
else
243250
{
244-
if (ImGui::InputDouble("", cvarSystem->GetCVarArray<f64>()->GetCurrentPtr(p->arrayIndex)))
245-
cvarSystem->MarkDirty();
251+
f64 val = cvarSystem->GetCVarArray<f64>()->GetCurrent(p->arrayIndex);
252+
if (ImGui::InputDouble("", &val))
253+
{
254+
cvarSystem->GetCVarArray<f64>()->SetCurrent(val, p->arrayIndex);
255+
}
246256
}
247257
}
248258
break;
249259
}
250260
case CVarType::FLOATVEC:
251261
{
252262
Label(p->name.c_str(), textWidth);
253-
if (ImGui::InputFloat4("", &(*cvarSystem->GetCVarArray<vec4>()->GetCurrentPtr(p->arrayIndex))[0]))
254-
cvarSystem->MarkDirty();
263+
vec4 val = cvarSystem->GetCVarArray<vec4>()->GetCurrent(p->arrayIndex);
264+
if (ImGui::InputFloat4("", &(val)[0]))
265+
{
266+
cvarSystem->GetCVarArray<vec4>()->SetCurrent(val, p->arrayIndex);
267+
}
255268

256269
break;
257270
}
258271
case CVarType::INTVEC:
259272
{
260273
Label(p->name.c_str(), textWidth);
261-
if (ImGui::InputInt4("", &(*cvarSystem->GetCVarArray<ivec4>()->GetCurrentPtr(p->arrayIndex))[0]))
262-
cvarSystem->MarkDirty();
274+
ivec4 val = cvarSystem->GetCVarArray<ivec4>()->GetCurrent(p->arrayIndex);
275+
if (ImGui::InputInt4("", &(val)[0]))
276+
{
277+
cvarSystem->GetCVarArray<ivec4>()->SetCurrent(val, p->arrayIndex);
278+
}
263279

264280
break;
265281
}
@@ -273,20 +289,22 @@ namespace Editor
273289
else
274290
{
275291
Label(p->name.c_str(), textWidth);
276-
if (ImGui::InputText("", cvarSystem->GetCVarArray<std::string>()->GetCurrentPtr(p->arrayIndex)))
277-
cvarSystem->MarkDirty();
292+
std::string val = cvarSystem->GetCVarArray<std::string>()->GetCurrent(p->arrayIndex);
293+
if (ImGui::InputText("", &val))
294+
{
295+
cvarSystem->GetCVarArray<std::string>()->SetCurrent(val, p->arrayIndex);
296+
}
278297
}
279298
break;
280299
}
281300
case CVarType::SHOWFLAG:
282301
{
283302
Label(p->name.c_str(), textWidth);
284-
bool enabled = *cvarSystem->GetCVarArray<ShowFlag>()->GetCurrentPtr(p->arrayIndex) == ShowFlag::ENABLED;
303+
bool enabled = cvarSystem->GetCVarArray<ShowFlag>()->GetCurrent(p->arrayIndex) == ShowFlag::ENABLED;
285304

286305
if (ImGui::Checkbox("", &enabled))
287306
{
288-
*cvarSystem->GetCVarArray<ShowFlag>()->GetCurrentPtr(p->arrayIndex) = enabled ? ShowFlag::ENABLED : ShowFlag::DISABLED;
289-
cvarSystem->MarkDirty();
307+
cvarSystem->GetCVarArray<ShowFlag>()->SetCurrent(enabled ? ShowFlag::ENABLED : ShowFlag::DISABLED, p->arrayIndex);
290308
}
291309
break;
292310
}

Source/Game-Lib/Game-Lib/Rendering/Canvas/CanvasRenderer.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "Game-Lib/ECS/Util/Transform2D.h"
1414
#include "Game-Lib/ECS/Util/UIUtil.h"
1515
#include "Game-Lib/Rendering/Debug/DebugRenderer.h"
16+
#include "Game-Lib/Rendering/GameRenderer.h"
1617
#include "Game-Lib/Rendering/RenderResources.h"
1718
#include "Game-Lib/Util/ServiceLocator.h"
1819

@@ -39,9 +40,11 @@ void CanvasRenderer::Clear()
3940
_renderer->UnloadTexturesInArray(_textures, 2);
4041
}
4142

42-
CanvasRenderer::CanvasRenderer(Renderer::Renderer* renderer, DebugRenderer* debugRenderer)
43+
CanvasRenderer::CanvasRenderer(Renderer::Renderer* renderer, GameRenderer* gameRenderer, DebugRenderer* debugRenderer)
4344
: _renderer(renderer)
45+
, _gameRenderer(gameRenderer)
4446
, _debugRenderer(debugRenderer)
47+
, _descriptorSet(Renderer::DescriptorSetSlot::PER_PASS)
4548
{
4649
CreatePermanentResources();
4750
}
@@ -504,12 +507,13 @@ void CanvasRenderer::CreatePermanentResources()
504507

505508
// Shader
506509
Renderer::VertexShaderDesc vertexShaderDesc;
507-
vertexShaderDesc.path = "UI/Panel.vs.hlsl";
508-
509-
Renderer::PixelShaderDesc pixelShaderDesc;
510-
pixelShaderDesc.path = "UI/Panel.ps.hlsl";
511-
510+
vertexShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Panel.vs.hlsl"_h);
511+
vertexShaderDesc.shaderEntry.debugName = "UI/Panel.vs.hlsl";
512512
pipelineDesc.states.vertexShader = _renderer->LoadShader(vertexShaderDesc);
513+
514+
Renderer::PixelShaderDesc pixelShaderDesc;
515+
pixelShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Panel.ps.hlsl"_h);
516+
pixelShaderDesc.shaderEntry.debugName = "UI/Panel.ps.hlsl";
513517
pipelineDesc.states.pixelShader = _renderer->LoadShader(pixelShaderDesc);
514518

515519
// Blending
@@ -533,12 +537,13 @@ void CanvasRenderer::CreatePermanentResources()
533537

534538
// Shader
535539
Renderer::VertexShaderDesc vertexShaderDesc;
536-
vertexShaderDesc.path = "UI/Text.vs.hlsl";
540+
vertexShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Text.vs.hlsl"_h);
541+
vertexShaderDesc.shaderEntry.debugName = "UI/Text.vs.hlsl";
542+
pipelineDesc.states.vertexShader = _renderer->LoadShader(vertexShaderDesc);
537543

538544
Renderer::PixelShaderDesc pixelShaderDesc;
539-
pixelShaderDesc.path = "UI/Text.ps.hlsl";
540-
541-
pipelineDesc.states.vertexShader = _renderer->LoadShader(vertexShaderDesc);
545+
pixelShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Text.ps.hlsl"_h);
546+
pixelShaderDesc.shaderEntry.debugName = "UI/Text.ps.hlsl";
542547
pipelineDesc.states.pixelShader = _renderer->LoadShader(pixelShaderDesc);
543548

544549
// Blending

Source/Game-Lib/Game-Lib/Rendering/Canvas/CanvasRenderer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,12 @@ namespace ECS
3636
struct RenderResources;
3737
class Window;
3838
class DebugRenderer;
39+
class GameRenderer;
3940

4041
class CanvasRenderer
4142
{
4243
public:
43-
CanvasRenderer(Renderer::Renderer* renderer, DebugRenderer* debugRenderer);
44+
CanvasRenderer(Renderer::Renderer* renderer, GameRenderer* gameRenderer, DebugRenderer* debugRenderer);
4445
void Clear();
4546

4647
void Update(f32 deltaTime);
@@ -102,6 +103,7 @@ class CanvasRenderer
102103

103104
private:
104105
Renderer::Renderer* _renderer;
106+
GameRenderer* _gameRenderer;
105107
DebugRenderer* _debugRenderer;
106108

107109
Renderer::GPUVector<vec4> _vertices;

Source/Game-Lib/Game-Lib/Rendering/CullUtils.cpp

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include "Downsampler/ffx_a.h"
55
#include "Downsampler/ffx_spd.h"
66

7+
#include "Game-Lib/Rendering/GameRenderer.h"
8+
79
#include <Renderer/Renderer.h>
810
#include <Renderer/RenderGraphResources.h>
911
#include <Renderer/CommandList.h>
@@ -13,26 +15,28 @@
1315

1416
Renderer::SamplerID DepthPyramidUtils::_copySampler;
1517
Renderer::SamplerID DepthPyramidUtils::_pyramidSampler;
16-
Renderer::DescriptorSet DepthPyramidUtils::_copyDescriptorSet;
17-
Renderer::DescriptorSet DepthPyramidUtils::_pyramidDescriptorSet;
18+
Renderer::DescriptorSet DepthPyramidUtils::_copyDescriptorSet(Renderer::DescriptorSetSlot::PER_PASS);
19+
Renderer::DescriptorSet DepthPyramidUtils::_pyramidDescriptorSet(Renderer::DescriptorSetSlot::PER_PASS);
1820
Renderer::BufferID DepthPyramidUtils::_atomicBuffer;
21+
Renderer::ComputePipelineID DepthPyramidUtils::_blitDepthPipeline;
22+
Renderer::ComputePipelineID DepthPyramidUtils::_downsamplePipeline;
1923

2024
inline u32 GetGroupCount(u32 threadCount, u32 localSize)
2125
{
2226
return (threadCount + localSize - 1) / localSize;
2327
}
2428

25-
void DepthPyramidUtils::InitBuffers(Renderer::Renderer* renderer)
29+
void DepthPyramidUtils::Init(Renderer::Renderer* renderer, GameRenderer* gameRenderer)
2630
{
2731
Renderer::BufferDesc desc;
2832
desc.name = "DepthPyramidAtomicCounters";
2933
desc.size = sizeof(u32) * 6;
3034
desc.usage = Renderer::BufferUsage::STORAGE_BUFFER | Renderer::BufferUsage::TRANSFER_DESTINATION;
3135

3236
_atomicBuffer = renderer->CreateAndFillBuffer(_atomicBuffer, desc, [](void* mappedMemory, size_t size)
33-
{
34-
memset(mappedMemory, 0, size);
35-
});
37+
{
38+
memset(mappedMemory, 0, size);
39+
});
3640
_pyramidDescriptorSet.Bind("spdGlobalAtomic", _atomicBuffer);
3741

3842
Renderer::SamplerDesc copySamplerDesc;
@@ -58,6 +62,29 @@ void DepthPyramidUtils::InitBuffers(Renderer::Renderer* renderer)
5862

5963
_pyramidSampler = renderer->CreateSampler(pyramidSamplerDesc);
6064
_pyramidDescriptorSet.Bind("srcSampler", _pyramidSampler);
65+
66+
// Init pipelines
67+
Renderer::ComputePipelineDesc pipelineDesc;
68+
{
69+
pipelineDesc.debugName = "Blit Depthpyramid";
70+
71+
Renderer::ComputeShaderDesc shaderDesc;
72+
shaderDesc.shaderEntry = gameRenderer->GetShaderEntry("Blitting/BlitDepth.cs.hlsl"_h);
73+
shaderDesc.shaderEntry.debugName = "Blitting/BlitDepth.cs.hlsl";
74+
pipelineDesc.computeShader = renderer->LoadShader(shaderDesc);
75+
76+
_blitDepthPipeline = renderer->CreatePipeline(pipelineDesc);
77+
}
78+
{
79+
pipelineDesc.debugName = "Downsample Depthpyramid";
80+
81+
Renderer::ComputeShaderDesc shaderDesc;
82+
shaderDesc.shaderEntry = gameRenderer->GetShaderEntry("DownSampler/SinglePassDownsampler.cs.hlsl"_h);
83+
shaderDesc.shaderEntry.debugName = "DownSampler/SinglePassDownsampler.cs.hlsl";
84+
pipelineDesc.computeShader = renderer->LoadShader(shaderDesc);
85+
86+
_downsamplePipeline = renderer->CreatePipeline(pipelineDesc);
87+
}
6188
}
6289

6390
void DepthPyramidUtils::BuildPyramid(BuildPyramidParams& params)
@@ -66,15 +93,7 @@ void DepthPyramidUtils::BuildPyramid(BuildPyramidParams& params)
6693

6794
// Copy first mip
6895
{
69-
Renderer::ComputePipelineDesc blitPipelineDesc;
70-
blitPipelineDesc.debugName = "Blit Depthpyramid";
71-
params.graphResources->InitializePipelineDesc(blitPipelineDesc);
72-
73-
Renderer::ComputeShaderDesc shaderDesc;
74-
shaderDesc.path = "Blitting/blitDepth.cs.hlsl";
75-
blitPipelineDesc.computeShader = params.renderer->LoadShader(shaderDesc);
76-
77-
Renderer::ComputePipelineID pipeline = params.renderer->CreatePipeline(blitPipelineDesc);
96+
Renderer::ComputePipelineID pipeline = _blitDepthPipeline;
7897
params.commandList->BeginPipeline(pipeline);
7998

8099
params.copyDescriptorSet.Bind("_source", params.depth);
@@ -93,7 +112,7 @@ void DepthPyramidUtils::BuildPyramid(BuildPyramidParams& params)
93112

94113
params.commandList->PushConstant(copyData, 0, sizeof(CopyParams));
95114

96-
params.commandList->BindDescriptorSet(Renderer::GLOBAL, params.copyDescriptorSet, params.frameIndex);
115+
params.commandList->BindDescriptorSet(Renderer::PER_PASS, params.copyDescriptorSet, params.frameIndex);
97116
params.commandList->Dispatch(GetGroupCount(params.pyramidSize.x, 32), GetGroupCount(params.pyramidSize.y, 32), 1);
98117

99118
params.commandList->EndPipeline(pipeline);
@@ -103,15 +122,7 @@ void DepthPyramidUtils::BuildPyramid(BuildPyramidParams& params)
103122

104123
// Downsample
105124
{
106-
Renderer::ComputePipelineDesc pipelineDesc;
107-
pipelineDesc.debugName = "Downsample Depthpyramid";
108-
params.graphResources->InitializePipelineDesc(pipelineDesc);
109-
110-
Renderer::ComputeShaderDesc shaderDesc;
111-
shaderDesc.path = "DownSampler/SinglePassDownsampler.cs.hlsl";
112-
pipelineDesc.computeShader = params.renderer->LoadShader(shaderDesc);
113-
114-
Renderer::ComputePipelineID pipeline = params.renderer->CreatePipeline(pipelineDesc);
125+
Renderer::ComputePipelineID pipeline = _downsamplePipeline;
115126
params.commandList->BeginPipeline(pipeline);
116127

117128
params.pyramidDescriptorSet.Bind("imgSrc", params.depthPyramid, 0);

Source/Game-Lib/Game-Lib/Rendering/CullUtils.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,18 @@ namespace Renderer
1414
class RenderGraphResources;
1515
class CommandList;
1616
}
17+
class GameRenderer;
18+
1719
class DepthPyramidUtils
1820
{
1921
public:
20-
static void InitBuffers(Renderer::Renderer* renderer);
22+
static void Init(Renderer::Renderer* renderer, GameRenderer* gameRenderer);
2123

2224
struct BuildPyramidParams
2325
{
2426
public:
2527
Renderer::Renderer* renderer;
28+
GameRenderer* gameRenderer;
2629
Renderer::RenderGraphResources* graphResources;
2730
Renderer::CommandList* commandList;
2831
RenderResources* resources;
@@ -42,4 +45,6 @@ class DepthPyramidUtils
4245
static Renderer::DescriptorSet _copyDescriptorSet;
4346
static Renderer::DescriptorSet _pyramidDescriptorSet;
4447
static Renderer::BufferID _atomicBuffer;
48+
static Renderer::ComputePipelineID _blitDepthPipeline;
49+
static Renderer::ComputePipelineID _downsamplePipeline;
4550
};

0 commit comments

Comments
 (0)