Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 35 additions & 17 deletions Source/Game-Lib/Game-Lib/Editor/CVarEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,14 +212,17 @@ namespace Editor
{
bool bCheckbox = cvarSystem->GetCVarArray<i32>()->GetCurrent(p->arrayIndex) != 0;
if (ImGui::Checkbox("", &bCheckbox))
{
cvarSystem->GetCVarArray<i32>()->SetCurrent(bCheckbox ? 1 : 0, p->arrayIndex);

// intCVars[p->arrayIndex].current = bCheckbox ? 1 : 0;
}
}
else
{
if (ImGui::InputInt("", cvarSystem->GetCVarArray<i32>()->GetCurrentPtr(p->arrayIndex)))
cvarSystem->MarkDirty();
i32 val = cvarSystem->GetCVarArray<i32>()->GetCurrent(p->arrayIndex);
if (ImGui::InputInt("", &val))
{
cvarSystem->GetCVarArray<i32>()->SetCurrent(val, p->arrayIndex);
}
}
}
break;
Expand All @@ -236,30 +239,43 @@ namespace Editor
Label(p->name.c_str(), textWidth);
if (dragFlag)
{
if (ImGui::InputDouble("", cvarSystem->GetCVarArray<f64>()->GetCurrentPtr(p->arrayIndex)))
cvarSystem->MarkDirty();
// TODO: Should this be a different kind of input for dragging?
f64 val = cvarSystem->GetCVarArray<f64>()->GetCurrent(p->arrayIndex);
if (ImGui::InputDouble("", &val))
{
cvarSystem->GetCVarArray<f64>()->SetCurrent(val, p->arrayIndex);
}
}
else
{
if (ImGui::InputDouble("", cvarSystem->GetCVarArray<f64>()->GetCurrentPtr(p->arrayIndex)))
cvarSystem->MarkDirty();
f64 val = cvarSystem->GetCVarArray<f64>()->GetCurrent(p->arrayIndex);
if (ImGui::InputDouble("", &val))
{
cvarSystem->GetCVarArray<f64>()->SetCurrent(val, p->arrayIndex);
}
}
}
break;
}
case CVarType::FLOATVEC:
{
Label(p->name.c_str(), textWidth);
if (ImGui::InputFloat4("", &(*cvarSystem->GetCVarArray<vec4>()->GetCurrentPtr(p->arrayIndex))[0]))
cvarSystem->MarkDirty();
vec4 val = cvarSystem->GetCVarArray<vec4>()->GetCurrent(p->arrayIndex);
if (ImGui::InputFloat4("", &(val)[0]))
{
cvarSystem->GetCVarArray<vec4>()->SetCurrent(val, p->arrayIndex);
}

break;
}
case CVarType::INTVEC:
{
Label(p->name.c_str(), textWidth);
if (ImGui::InputInt4("", &(*cvarSystem->GetCVarArray<ivec4>()->GetCurrentPtr(p->arrayIndex))[0]))
cvarSystem->MarkDirty();
ivec4 val = cvarSystem->GetCVarArray<ivec4>()->GetCurrent(p->arrayIndex);
if (ImGui::InputInt4("", &(val)[0]))
{
cvarSystem->GetCVarArray<ivec4>()->SetCurrent(val, p->arrayIndex);
}

break;
}
Expand All @@ -273,20 +289,22 @@ namespace Editor
else
{
Label(p->name.c_str(), textWidth);
if (ImGui::InputText("", cvarSystem->GetCVarArray<std::string>()->GetCurrentPtr(p->arrayIndex)))
cvarSystem->MarkDirty();
std::string val = cvarSystem->GetCVarArray<std::string>()->GetCurrent(p->arrayIndex);
if (ImGui::InputText("", &val))
{
cvarSystem->GetCVarArray<std::string>()->SetCurrent(val, p->arrayIndex);
}
}
break;
}
case CVarType::SHOWFLAG:
{
Label(p->name.c_str(), textWidth);
bool enabled = *cvarSystem->GetCVarArray<ShowFlag>()->GetCurrentPtr(p->arrayIndex) == ShowFlag::ENABLED;
bool enabled = cvarSystem->GetCVarArray<ShowFlag>()->GetCurrent(p->arrayIndex) == ShowFlag::ENABLED;

if (ImGui::Checkbox("", &enabled))
{
*cvarSystem->GetCVarArray<ShowFlag>()->GetCurrentPtr(p->arrayIndex) = enabled ? ShowFlag::ENABLED : ShowFlag::DISABLED;
cvarSystem->MarkDirty();
cvarSystem->GetCVarArray<ShowFlag>()->SetCurrent(enabled ? ShowFlag::ENABLED : ShowFlag::DISABLED, p->arrayIndex);
}
break;
}
Expand Down
25 changes: 15 additions & 10 deletions Source/Game-Lib/Game-Lib/Rendering/Canvas/CanvasRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "Game-Lib/ECS/Util/Transform2D.h"
#include "Game-Lib/ECS/Util/UIUtil.h"
#include "Game-Lib/Rendering/Debug/DebugRenderer.h"
#include "Game-Lib/Rendering/GameRenderer.h"
#include "Game-Lib/Rendering/RenderResources.h"
#include "Game-Lib/Util/ServiceLocator.h"

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

CanvasRenderer::CanvasRenderer(Renderer::Renderer* renderer, DebugRenderer* debugRenderer)
CanvasRenderer::CanvasRenderer(Renderer::Renderer* renderer, GameRenderer* gameRenderer, DebugRenderer* debugRenderer)
: _renderer(renderer)
, _gameRenderer(gameRenderer)
, _debugRenderer(debugRenderer)
, _descriptorSet(Renderer::DescriptorSetSlot::PER_PASS)
{
CreatePermanentResources();
}
Expand Down Expand Up @@ -504,12 +507,13 @@ void CanvasRenderer::CreatePermanentResources()

// Shader
Renderer::VertexShaderDesc vertexShaderDesc;
vertexShaderDesc.path = "UI/Panel.vs.hlsl";

Renderer::PixelShaderDesc pixelShaderDesc;
pixelShaderDesc.path = "UI/Panel.ps.hlsl";

vertexShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Panel.vs.hlsl"_h);
vertexShaderDesc.shaderEntry.debugName = "UI/Panel.vs.hlsl";
pipelineDesc.states.vertexShader = _renderer->LoadShader(vertexShaderDesc);

Renderer::PixelShaderDesc pixelShaderDesc;
pixelShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Panel.ps.hlsl"_h);
pixelShaderDesc.shaderEntry.debugName = "UI/Panel.ps.hlsl";
pipelineDesc.states.pixelShader = _renderer->LoadShader(pixelShaderDesc);

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

// Shader
Renderer::VertexShaderDesc vertexShaderDesc;
vertexShaderDesc.path = "UI/Text.vs.hlsl";
vertexShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Text.vs.hlsl"_h);
vertexShaderDesc.shaderEntry.debugName = "UI/Text.vs.hlsl";
pipelineDesc.states.vertexShader = _renderer->LoadShader(vertexShaderDesc);

Renderer::PixelShaderDesc pixelShaderDesc;
pixelShaderDesc.path = "UI/Text.ps.hlsl";

pipelineDesc.states.vertexShader = _renderer->LoadShader(vertexShaderDesc);
pixelShaderDesc.shaderEntry = _gameRenderer->GetShaderEntry("UI/Text.ps.hlsl"_h);
pixelShaderDesc.shaderEntry.debugName = "UI/Text.ps.hlsl";
pipelineDesc.states.pixelShader = _renderer->LoadShader(pixelShaderDesc);

// Blending
Expand Down
4 changes: 3 additions & 1 deletion Source/Game-Lib/Game-Lib/Rendering/Canvas/CanvasRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,12 @@ namespace ECS
struct RenderResources;
class Window;
class DebugRenderer;
class GameRenderer;

class CanvasRenderer
{
public:
CanvasRenderer(Renderer::Renderer* renderer, DebugRenderer* debugRenderer);
CanvasRenderer(Renderer::Renderer* renderer, GameRenderer* gameRenderer, DebugRenderer* debugRenderer);
void Clear();

void Update(f32 deltaTime);
Expand Down Expand Up @@ -102,6 +103,7 @@ class CanvasRenderer

private:
Renderer::Renderer* _renderer;
GameRenderer* _gameRenderer;
DebugRenderer* _debugRenderer;

Renderer::GPUVector<vec4> _vertices;
Expand Down
61 changes: 36 additions & 25 deletions Source/Game-Lib/Game-Lib/Rendering/CullUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include "Downsampler/ffx_a.h"
#include "Downsampler/ffx_spd.h"

#include "Game-Lib/Rendering/GameRenderer.h"

#include <Renderer/Renderer.h>
#include <Renderer/RenderGraphResources.h>
#include <Renderer/CommandList.h>
Expand All @@ -13,26 +15,28 @@

Renderer::SamplerID DepthPyramidUtils::_copySampler;
Renderer::SamplerID DepthPyramidUtils::_pyramidSampler;
Renderer::DescriptorSet DepthPyramidUtils::_copyDescriptorSet;
Renderer::DescriptorSet DepthPyramidUtils::_pyramidDescriptorSet;
Renderer::DescriptorSet DepthPyramidUtils::_copyDescriptorSet(Renderer::DescriptorSetSlot::PER_PASS);
Renderer::DescriptorSet DepthPyramidUtils::_pyramidDescriptorSet(Renderer::DescriptorSetSlot::PER_PASS);
Renderer::BufferID DepthPyramidUtils::_atomicBuffer;
Renderer::ComputePipelineID DepthPyramidUtils::_blitDepthPipeline;
Renderer::ComputePipelineID DepthPyramidUtils::_downsamplePipeline;

inline u32 GetGroupCount(u32 threadCount, u32 localSize)
{
return (threadCount + localSize - 1) / localSize;
}

void DepthPyramidUtils::InitBuffers(Renderer::Renderer* renderer)
void DepthPyramidUtils::Init(Renderer::Renderer* renderer, GameRenderer* gameRenderer)
{
Renderer::BufferDesc desc;
desc.name = "DepthPyramidAtomicCounters";
desc.size = sizeof(u32) * 6;
desc.usage = Renderer::BufferUsage::STORAGE_BUFFER | Renderer::BufferUsage::TRANSFER_DESTINATION;

_atomicBuffer = renderer->CreateAndFillBuffer(_atomicBuffer, desc, [](void* mappedMemory, size_t size)
{
memset(mappedMemory, 0, size);
});
{
memset(mappedMemory, 0, size);
});
_pyramidDescriptorSet.Bind("spdGlobalAtomic", _atomicBuffer);

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

_pyramidSampler = renderer->CreateSampler(pyramidSamplerDesc);
_pyramidDescriptorSet.Bind("srcSampler", _pyramidSampler);

// Init pipelines
Renderer::ComputePipelineDesc pipelineDesc;
{
pipelineDesc.debugName = "Blit Depthpyramid";

Renderer::ComputeShaderDesc shaderDesc;
shaderDesc.shaderEntry = gameRenderer->GetShaderEntry("Blitting/BlitDepth.cs.hlsl"_h);
shaderDesc.shaderEntry.debugName = "Blitting/BlitDepth.cs.hlsl";
pipelineDesc.computeShader = renderer->LoadShader(shaderDesc);

_blitDepthPipeline = renderer->CreatePipeline(pipelineDesc);
}
{
pipelineDesc.debugName = "Downsample Depthpyramid";

Renderer::ComputeShaderDesc shaderDesc;
shaderDesc.shaderEntry = gameRenderer->GetShaderEntry("DownSampler/SinglePassDownsampler.cs.hlsl"_h);
shaderDesc.shaderEntry.debugName = "DownSampler/SinglePassDownsampler.cs.hlsl";
pipelineDesc.computeShader = renderer->LoadShader(shaderDesc);

_downsamplePipeline = renderer->CreatePipeline(pipelineDesc);
}
}

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

// Copy first mip
{
Renderer::ComputePipelineDesc blitPipelineDesc;
blitPipelineDesc.debugName = "Blit Depthpyramid";
params.graphResources->InitializePipelineDesc(blitPipelineDesc);

Renderer::ComputeShaderDesc shaderDesc;
shaderDesc.path = "Blitting/blitDepth.cs.hlsl";
blitPipelineDesc.computeShader = params.renderer->LoadShader(shaderDesc);

Renderer::ComputePipelineID pipeline = params.renderer->CreatePipeline(blitPipelineDesc);
Renderer::ComputePipelineID pipeline = _blitDepthPipeline;
params.commandList->BeginPipeline(pipeline);

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

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

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

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

// Downsample
{
Renderer::ComputePipelineDesc pipelineDesc;
pipelineDesc.debugName = "Downsample Depthpyramid";
params.graphResources->InitializePipelineDesc(pipelineDesc);

Renderer::ComputeShaderDesc shaderDesc;
shaderDesc.path = "DownSampler/SinglePassDownsampler.cs.hlsl";
pipelineDesc.computeShader = params.renderer->LoadShader(shaderDesc);

Renderer::ComputePipelineID pipeline = params.renderer->CreatePipeline(pipelineDesc);
Renderer::ComputePipelineID pipeline = _downsamplePipeline;
params.commandList->BeginPipeline(pipeline);

params.pyramidDescriptorSet.Bind("imgSrc", params.depthPyramid, 0);
Expand Down
7 changes: 6 additions & 1 deletion Source/Game-Lib/Game-Lib/Rendering/CullUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@ namespace Renderer
class RenderGraphResources;
class CommandList;
}
class GameRenderer;

class DepthPyramidUtils
{
public:
static void InitBuffers(Renderer::Renderer* renderer);
static void Init(Renderer::Renderer* renderer, GameRenderer* gameRenderer);

struct BuildPyramidParams
{
public:
Renderer::Renderer* renderer;
GameRenderer* gameRenderer;
Renderer::RenderGraphResources* graphResources;
Renderer::CommandList* commandList;
RenderResources* resources;
Expand All @@ -42,4 +45,6 @@ class DepthPyramidUtils
static Renderer::DescriptorSet _copyDescriptorSet;
static Renderer::DescriptorSet _pyramidDescriptorSet;
static Renderer::BufferID _atomicBuffer;
static Renderer::ComputePipelineID _blitDepthPipeline;
static Renderer::ComputePipelineID _downsamplePipeline;
};
Loading
Loading