From 21150ba091e14a2877e6bb98bbfc3cb07ef9df48 Mon Sep 17 00:00:00 2001 From: antopilo Date: Sun, 12 Jan 2025 23:05:47 -0500 Subject: [PATCH] Deleted old pipeline --- Nuake/NuakePCH.cpp | 1 + .../Rendering/Vulkan/SceneRenderPipeline.cpp | 60 +++++- .../Rendering/Vulkan/SceneRenderPipeline.h | 2 +- .../Rendering/Vulkan/VulkanSceneRenderer.cpp | 189 +----------------- .../Rendering/Vulkan/VulkanSceneRenderer.h | 2 - 5 files changed, 59 insertions(+), 195 deletions(-) create mode 100644 Nuake/NuakePCH.cpp diff --git a/Nuake/NuakePCH.cpp b/Nuake/NuakePCH.cpp new file mode 100644 index 00000000..f60538d7 --- /dev/null +++ b/Nuake/NuakePCH.cpp @@ -0,0 +1 @@ +#include "NuakePCH.h" \ No newline at end of file diff --git a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp index d6b17239..d177fdd1 100644 --- a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -1,5 +1,6 @@ #include "SceneRenderPipeline.h" +#include "src/Rendering/Textures/Material.h" #include "src/Rendering/Vulkan/VkShaderManager.h" #include "src/Rendering/Vulkan/VkResources.h" @@ -8,13 +9,8 @@ #include "src/Scene/Components/TransformComponent.h" #include "src/Scene/Components/ModelComponent.h" -#include "src/Rendering/Textures/Material.h" - -#include "src/Rendering/Vulkan/SceneRenderPipeline.h" - #include - using namespace Nuake; RenderPipeline SceneRenderPipeline::GBufferPipeline; @@ -22,7 +18,7 @@ RenderPipeline SceneRenderPipeline::GBufferPipeline; SceneRenderPipeline::SceneRenderPipeline() { // Initialize render targets - const Vector2 defaultSize = { 1280, 720 }; + const Vector2 defaultSize = { 1, 1 }; GBufferAlbedo = CreateRef(ImageFormat::RGBA16F, defaultSize); GBufferNormal = CreateRef(ImageFormat::RGBA16F, defaultSize); GBufferMaterial = CreateRef(ImageFormat::RGBA8, defaultSize); @@ -33,6 +29,54 @@ SceneRenderPipeline::SceneRenderPipeline() // Initialize pipeline VkShaderManager& shaderMgr = VkShaderManager::Get(); + ShadowPipeline = RenderPipeline(); + auto& shadowPass = ShadowPipeline.AddPass("Shadow"); + shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth); + shadowPass.SetShaders(shaderMgr.GetShader("shadow_vert"), shaderMgr.GetShader("shadow_frag")); + shadowPass.SetPushConstant(gbufferConstant); + shadowPass.SetPreRender([&](PassRenderContext& ctx) { + auto& layout = ctx.renderPass->PipelineLayout; + auto& res = GPUResources::Get(); + + Cmd& cmd = ctx.commandBuffer; + cmd.BindDescriptorSet(layout, res.ModelDescriptor, 0); + cmd.BindDescriptorSet(layout, res.SamplerDescriptor, 2); + cmd.BindDescriptorSet(layout, res.MaterialDescriptor, 3); + cmd.BindDescriptorSet(layout, res.TexturesDescriptor, 4); + cmd.BindDescriptorSet(layout, res.LightsDescriptor, 5); + cmd.BindDescriptorSet(layout, res.CamerasDescriptor, 6); + }); + shadowPass.SetRender([&](PassRenderContext& ctx) { + auto& cmd = ctx.commandBuffer; + auto& scene = ctx.scene; + auto& vk = VkRenderer::Get(); + + ZoneScopedN("Render Models"); + auto view = scene->m_Registry.view(); + for (auto e : view) + { + auto [transform, mesh, visibility] = view.get(e); + if (!mesh.ModelResource || !visibility.Visible) + { + continue; + } + + const int entityId = Entity((entt::entity)e, scene.get()).GetID(); + for (auto& m : mesh.ModelResource->GetMeshes()) + { + Ref vkMesh = m->GetVkMesh(); + cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, vkMesh->GetDescriptorSet(), 1); + + gbufferConstant.Index = GPUResources::Get().GetBindlessTransformID(entityId); + gbufferConstant.CameraID = ctx.cameraID; + + cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(GBufferConstant), &gbufferConstant); + cmd.BindIndexBuffer(vkMesh->GetIndexBuffer()->GetBuffer()); + cmd.DrawIndexed(vkMesh->GetIndexBuffer()->GetSize() / sizeof(uint32_t)); + } + } + }); + GBufferPipeline = RenderPipeline(); auto& gBufferPass = GBufferPipeline.AddPass("GBuffer"); gBufferPass.SetShaders(shaderMgr.GetShader("basic_vert"), shaderMgr.GetShader("basic_frag")); @@ -96,11 +140,10 @@ SceneRenderPipeline::SceneRenderPipeline() shadingPass.AddInput("Depth"); shadingPass.AddInput("Material"); shadingPass.SetPreRender([&](PassRenderContext& ctx) { + Cmd& cmd = ctx.commandBuffer; auto& layout = ctx.renderPass->PipelineLayout; auto& res = GPUResources::Get(); - Cmd& cmd = ctx.commandBuffer; - // Bindless cmd.BindDescriptorSet(layout, res.ModelDescriptor, 0); cmd.BindDescriptorSet(layout, res.SamplerDescriptor, 2); @@ -136,6 +179,7 @@ SceneRenderPipeline::SceneRenderPipeline() cmd.DrawIndexed(6); }); + ShadowPipeline.Build(); GBufferPipeline.Build(); } diff --git a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h index d5fccf8b..b7df7d7a 100644 --- a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h +++ b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.h @@ -61,8 +61,8 @@ namespace Nuake GBufferConstant gbufferConstant; ShadingConstant shadingConstant; - // Holds all the texture attachments static RenderPipeline GBufferPipeline; + static RenderPipeline ShadowPipeline; public: SceneRenderPipeline(); diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp index 4cc8a0bd..0681763d 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp @@ -28,7 +28,6 @@ void VkSceneRenderer::Init() { LoadShaders(); SetGBufferSize({ 1280, 720 }); - CreatePipelines(); const std::vector quadVertices { @@ -48,6 +47,11 @@ void VkSceneRenderer::Init() QuadMesh = CreateRef(quadVertices, quadIndices); } +void VkSceneRenderer::SetGBufferSize(const Vector2& size) +{ + Context.Size = size; +} + // This will prepare all the data and upload it to the GPU before rendering the scene. void VkSceneRenderer::BeginScene(RenderContext inContext) { @@ -322,186 +326,3 @@ void VkSceneRenderer::LoadShaders() shaderMgr.AddShader("shadow_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.frag")); shaderMgr.AddShader("shadow_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.vert")); } - -void VkSceneRenderer::CreatePipelines() -{ - sceneRenderPipeline = CreateRef(); - - //ShadowPipeline = RenderPipeline(); - //auto& shadowPass = ShadowPipeline.AddPass("Shadow"); - //shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth); - //shadowPass.SetShaders(Shaders["shadow_vert"], Shaders["shadow_frag"]); - //shadowPass.SetPushConstant(modelPushConstant); - //shadowPass.SetPreRender([&](PassRenderContext& ctx) { - // auto layout = ctx.renderPass->PipelineLayout; - // ctx.commandBuffer.BindDescriptorSet(layout, CameraBufferDescriptors, 0); - // ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().ModelDescriptor, 1); - // ctx.commandBuffer.BindDescriptorSet(layout, SamplerDescriptor, 3); - // ctx.commandBuffer.BindDescriptorSet(layout, MaterialBufferDescriptor, 4); - // ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().TexturesDescriptor, 5); - // ctx.commandBuffer.BindDescriptorSet(layout, LightBufferDescriptor, 6); - // ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().CamerasDescriptor, 7); - //}); - //shadowPass.SetRender([&](PassRenderContext& ctx) { - // auto& cmd = ctx.commandBuffer; - // auto& scene = ctx.scene; - // auto& vk = VkRenderer::Get(); - // - // // Draw the scene - // { - // ZoneScopedN("Render Models"); - // auto view = scene->m_Registry.view(); - // for (auto e : view) - // { - // auto [transform, mesh, visibility] = view.get(e); - // if (!mesh.ModelResource || !visibility.Visible) - // { - // continue; - // } - // - // Entity entity = Entity((entt::entity)e, scene.get()); - // for (auto& m : mesh.ModelResource->GetMeshes()) - // { - // Ref vkMesh = m->GetVkMesh(); - // Matrix4 globalTransform = transform.GetGlobalTransform(); - // - // auto descSet = vkMesh->GetDescriptorSet(); - // cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, descSet, 2); - // - // // Bind texture descriptor set - // Ref material = m->GetMaterial(); - // Ref albedo = GPUResources::Get().GetTexture(material->AlbedoImage); - // - // - // - // modelPushConstant.Index = GPUResources::Get().GetBindlessTransformID(entity.GetID()); - // modelPushConstant.MaterialIndex = GPUResources::Get().GetBindlessMaterialID(entity.GetID()); - // modelPushConstant.CameraID = ctx.cameraID; - // - // cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(ModelPushConstant), &modelPushConstant); - // cmd.BindIndexBuffer(vkMesh->GetIndexBuffer()->GetBuffer()); - // cmd.DrawIndexed(vkMesh->GetIndexBuffer()->GetSize() / sizeof(uint32_t)); - // } - // } - // } - //}); - //ShadowPipeline.Build(); - // - //GBufferPipeline = RenderPipeline(); - //auto& gBufferPass = GBufferPipeline.AddPass("GBuffer"); - //gBufferPass.SetShaders(Shaders["basic_vert"], Shaders["basic_frag"]); - //gBufferPass.AddAttachment("Albedo", ImageFormat::RGBA8); - //gBufferPass.AddAttachment("Normal", ImageFormat::RGBA8); - //gBufferPass.AddAttachment("Material", ImageFormat::RGBA8); - //gBufferPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth); - //gBufferPass.SetPushConstant(modelPushConstant); - //gBufferPass.SetPreRender([&](PassRenderContext& ctx) { - // auto layout = ctx.renderPass->PipelineLayout; - // ctx.commandBuffer.BindDescriptorSet(layout, CameraBufferDescriptors, 0); - // ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().ModelDescriptor, 1); - // ctx.commandBuffer.BindDescriptorSet(layout, SamplerDescriptor, 3); - // ctx.commandBuffer.BindDescriptorSet(layout, MaterialBufferDescriptor, 4); - // ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().TexturesDescriptor, 5); - // ctx.commandBuffer.BindDescriptorSet(layout, LightBufferDescriptor, 6); - // ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().CamerasDescriptor, 7); - //}); - //gBufferPass.SetRender([&](PassRenderContext& ctx){ - // auto& cmd = ctx.commandBuffer; - // auto& scene = ctx.scene; - // auto& vk = VkRenderer::Get(); - // - // // Draw the scene - // { - // ZoneScopedN("Render Models"); - // auto view = scene->m_Registry.view(); - // for (auto e : view) - // { - // auto [transform, mesh, visibility] = view.get(e); - // if (!mesh.ModelResource || !visibility.Visible) - // { - // continue; - // } - // - // Entity entity = Entity((entt::entity)e, scene.get()); - // for (auto& m : mesh.ModelResource->GetMeshes()) - // { - // Ref vkMesh = m->GetVkMesh(); - // Matrix4 globalTransform = transform.GetGlobalTransform(); - // - // auto descSet = vkMesh->GetDescriptorSet(); - // cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, descSet, 2); - // - // // Bind texture descriptor set - // Ref material = m->GetMaterial(); - // Ref albedo = GPUResources::Get().GetTexture(material->AlbedoImage); - // - // modelPushConstant.Index = GPUResources::Get().GetBindlessTransformID(entity.GetID()); - // modelPushConstant.MaterialIndex = GPUResources::Get().GetBindlessMaterialID(entity.GetID()); - // modelPushConstant.CameraID = ctx.cameraID; - // cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(ModelPushConstant), &modelPushConstant); - // - // cmd.BindIndexBuffer(vkMesh->GetIndexBuffer()->GetBuffer()); - // cmd.DrawIndexed(vkMesh->GetIndexBuffer()->GetSize() / sizeof(uint32_t)); - // } - // } - // } - // - //}); - // - //auto& shadingPass = GBufferPipeline.AddPass("Shading"); - //shadingPass.SetShaders(Shaders["shading_vert"], Shaders["shading_frag"]); - //shadingPass.SetPushConstant(shadingPushConstant); - //shadingPass.AddAttachment("Output", ImageFormat::RGBA8); - //shadingPass.SetDepthTest(false); - //shadingPass.AddInput("Albedo"); - //shadingPass.AddInput("Normal"); - //shadingPass.AddInput("Depth"); - //shadingPass.AddInput("Material"); - //shadingPass.SetPreRender([&](PassRenderContext& ctx) { - // auto layout = ctx.renderPass->PipelineLayout; - // auto cmd = ctx.commandBuffer; - // cmd.BindDescriptorSet(layout, CameraBufferDescriptors, 0); - // cmd.BindDescriptorSet(layout, GPUResources::Get().ModelDescriptor, 1); - // cmd.BindDescriptorSet(layout, SamplerDescriptor, 3); - // cmd.BindDescriptorSet(layout, MaterialBufferDescriptor, 4); - // cmd.BindDescriptorSet(layout, GPUResources::Get().TexturesDescriptor, 5); - // cmd.BindDescriptorSet(layout, LightBufferDescriptor, 6); - // cmd.BindDescriptorSet(layout, GPUResources::Get().CamerasDescriptor, 7); - // - // auto& gpu = GPUResources::Get(); - // auto& gbufferPass = GBufferPipeline.GetRenderPass("GBuffer"); - // shadingPushConstant.AlbedoTextureID = gpu.GetBindlessTextureID(gbufferPass.GetAttachment("Albedo").Image->GetID()); - // shadingPushConstant.DepthTextureID = gpu.GetBindlessTextureID(gbufferPass.GetDepthAttachment().Image->GetID()); - // shadingPushConstant.NormalTextureID = gpu.GetBindlessTextureID(gbufferPass.GetAttachment("Normal").Image->GetID()); - // shadingPushConstant.MaterialTextureID = gpu.GetBindlessTextureID(gbufferPass.GetAttachment("Material").Image->GetID()); - // shadingPushConstant.CameraID = ctx.cameraID; - //}); - //shadingPass.SetRender([](PassRenderContext& ctx) { - // auto& cmd = ctx.commandBuffer; - // cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(ShadingPushConstant), &shadingPushConstant); - // - // // Draw full screen quad - // cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, quadMesh->GetDescriptorSet(), 2); - // cmd.BindIndexBuffer(quadMesh->GetIndexBuffer()->GetBuffer()); - // cmd.DrawIndexed(6); - //}); - // - //GBufferPipeline.Build(); - //ShadowPipeline.Build(); -} - -void VkSceneRenderer::SetGBufferSize(const Vector2& size) -{ - Context.Size = size; -} - -void VkSceneRenderer::BuildMatrixBuffer() -{ - // This will scan and build the matrix buffer for the next frame. - // It will create a mapping between UUID and the corresponding index for the model matrix - ZoneScopedN("Build Matrix Buffer"); - auto& scene = Context.CurrentScene; - auto& res = GPUResources::Get(); - - -} diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h index 1d403613..f90280c9 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h @@ -41,7 +41,5 @@ namespace Nuake private: void LoadShaders(); - void CreatePipelines(); - void BuildMatrixBuffer(); }; } \ No newline at end of file