From 495e683522a6e5034185172a63b90944801d4083 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Sun, 12 Apr 2026 21:39:31 +0200 Subject: [PATCH] Trying to fix fluid pass --- .vscode/launch.json | 4 ---- .../Graphics/RenderPass/FluidRenderPass.cpp | 19 ++++++------------- .../Graphics/RenderPass/FluidRenderPass.h | 1 - .../Graphics/RenderPass/RayTracingPass.cpp | 1 - .../RenderPass/SurfaceExtractPass.cpp | 13 +++++++------ src/Engine/Graphics/Vulkan/Command.cpp | 4 ++-- src/Engine/Window/GameView.cpp | 6 +++--- 7 files changed, 18 insertions(+), 30 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c57d040..79b4d89 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -36,10 +36,6 @@ "name": "ASAN_OPTIONS", "value": "detect_leaks=0", }, - { - "name": "VK_INSTANCE_LAYERS", - "value": "VK_LAYER_KHRONOS_validation", - }, { "name": "DISABLE_VK_LAYER_VALVE_steam_overlay_1", "value": "1", diff --git a/src/Engine/Graphics/RenderPass/FluidRenderPass.cpp b/src/Engine/Graphics/RenderPass/FluidRenderPass.cpp index 8e4fcc0..6940367 100644 --- a/src/Engine/Graphics/RenderPass/FluidRenderPass.cpp +++ b/src/Engine/Graphics/RenderPass/FluidRenderPass.cpp @@ -73,22 +73,15 @@ void FluidRenderPass::render() { void FluidRenderPass::endFrame() {} void FluidRenderPass::publishOutputs() { - depthTexture = graphics->createTexture2D(TextureCreateInfo{ - .format = Gfx::SE_FORMAT_D32_SFLOAT, - .width = viewport->getWidth(), - .height = viewport->getHeight(), - .usage = Gfx::SE_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, - .name = "FluidDepth", - }); } void FluidRenderPass::createRenderPass() { - colorAttachment = Gfx::RenderTargetAttachment(viewport, Gfx::SE_IMAGE_LAYOUT_UNDEFINED, Gfx::SE_IMAGE_LAYOUT_PRESENT_SRC_KHR, - Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, Gfx::SE_ATTACHMENT_STORE_OP_STORE); - depthAttachment = Gfx::RenderTargetAttachment(depthTexture->getDefaultView(), Gfx::SE_IMAGE_LAYOUT_UNDEFINED, - Gfx::SE_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, Gfx::SE_ATTACHMENT_LOAD_OP_CLEAR, - Gfx::SE_ATTACHMENT_STORE_OP_DONT_CARE); - depthAttachment.clear.depthStencil.depth = 0.0f; + colorAttachment = resources->requestRenderTarget("BASEPASS_COLOR"); + colorAttachment.setLoadOp(Gfx::SE_ATTACHMENT_LOAD_OP_LOAD); + colorAttachment.setInitialLayout(Gfx::SE_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); + depthAttachment = resources->requestRenderTarget("BASEPASS_DEPTH"); + depthAttachment.setLoadOp(Gfx::SE_ATTACHMENT_LOAD_OP_LOAD); + depthAttachment.setInitialLayout(Gfx::SE_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); Gfx::RenderTargetLayout layout = Gfx::RenderTargetLayout{ .colorAttachments = {colorAttachment}, .depthAttachment = depthAttachment, diff --git a/src/Engine/Graphics/RenderPass/FluidRenderPass.h b/src/Engine/Graphics/RenderPass/FluidRenderPass.h index 9d61319..2ea352b 100644 --- a/src/Engine/Graphics/RenderPass/FluidRenderPass.h +++ b/src/Engine/Graphics/RenderPass/FluidRenderPass.h @@ -22,7 +22,6 @@ class FluidRenderPass : public RenderPass { private: Gfx::RenderTargetAttachment colorAttachment; Gfx::RenderTargetAttachment depthAttachment; - Gfx::OTexture2D depthTexture; Gfx::ODescriptorSet viewParamsSet; diff --git a/src/Engine/Graphics/RenderPass/RayTracingPass.cpp b/src/Engine/Graphics/RenderPass/RayTracingPass.cpp index 8c25ec8..c1f5732 100644 --- a/src/Engine/Graphics/RenderPass/RayTracingPass.cpp +++ b/src/Engine/Graphics/RenderPass/RayTracingPass.cpp @@ -73,7 +73,6 @@ RayTracingPass::RayTracingPass(Gfx::PGraphics graphics, PScene scene) : RenderPa .mainFile = "ClosestHit", .useMaterial = true, .rayTracing = true, - .dumpIntermediates = true, }); skyBox = AssetRegistry::findEnvironmentMap("", "newport_loft")->getSkybox(); skyBoxSampler = graphics->createSampler({}); diff --git a/src/Engine/Graphics/RenderPass/SurfaceExtractPass.cpp b/src/Engine/Graphics/RenderPass/SurfaceExtractPass.cpp index e7d8513..e013e70 100644 --- a/src/Engine/Graphics/RenderPass/SurfaceExtractPass.cpp +++ b/src/Engine/Graphics/RenderPass/SurfaceExtractPass.cpp @@ -48,6 +48,7 @@ SurfaceExtractPass::SurfaceExtractPass(Gfx::PGraphics graphics, PScene scene) : .modules = {"MarchingCubes"}, .entryPoints = {{"marchingCubes", "MarchingCubes"}}, .rootSignature = pipelineLayout, + .dumpIntermediate = true, }); pipelineLayout->create(); computeShader = graphics->createComputeShader({0}); @@ -69,7 +70,7 @@ void SurfaceExtractPass::render() { uint32 surfaceCountData[4] = {0, 1, 0, 0}; data.surfaceCountBuffer->updateContents(0, sizeof(surfaceCountData), surfaceCountData); data.surfaceCountBuffer->pipelineBarrier(Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT, - Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); + Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT); descriptorSet = descriptorLayout->allocateDescriptorSet(); descriptorSet->updateBuffer("vertexBuffer", 0, data.vertexBuffer); @@ -86,13 +87,13 @@ void SurfaceExtractPass::render() { graphics->executeCommands(std::move(cmd)); data.vertexBuffer->pipelineBarrier(Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT); + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT); data.normalBuffer->pipelineBarrier(Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT); + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT); data.indexBuffer->pipelineBarrier(Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT); + Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT); data.surfaceCountBuffer->pipelineBarrier(Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - Gfx::SE_ACCESS_INDIRECT_COMMAND_READ_BIT, Gfx::SE_PIPELINE_STAGE_DRAW_INDIRECT_BIT); + Gfx::SE_ACCESS_INDIRECT_COMMAND_READ_BIT, Gfx::SE_PIPELINE_STAGE_DRAW_INDIRECT_BIT); } } @@ -100,4 +101,4 @@ void SurfaceExtractPass::endFrame() {} void SurfaceExtractPass::publishOutputs() {} -void SurfaceExtractPass::createRenderPass() { } \ No newline at end of file +void SurfaceExtractPass::createRenderPass() {} \ No newline at end of file diff --git a/src/Engine/Graphics/Vulkan/Command.cpp b/src/Engine/Graphics/Vulkan/Command.cpp index d67b5c3..34f863e 100644 --- a/src/Engine/Graphics/Vulkan/Command.cpp +++ b/src/Engine/Graphics/Vulkan/Command.cpp @@ -268,7 +268,7 @@ void RenderCommand::bindDescriptor(Gfx::PDescriptorSet descriptor) { } } if (descriptorSet->setHandle->constantsBuffer != nullptr) { - descriptorSet->setHandle->bind(); + descriptorSet->setHandle->constantsBuffer->bind(); boundResources.add(PBufferAllocation(descriptorSet->setHandle->constantsBuffer)); } @@ -299,7 +299,7 @@ void RenderCommand::bindDescriptor(const Array& descriptorS } } if (descriptorSet->setHandle->constantsBuffer != nullptr) { - descriptorSet->setHandle->bind(); + descriptorSet->setHandle->constantsBuffer->bind(); boundResources.add(PBufferAllocation(descriptorSet->setHandle->constantsBuffer)); } sets[layout->findParameter(descriptorSet->getName())] = descriptorSet->getHandle(); diff --git a/src/Engine/Window/GameView.cpp b/src/Engine/Window/GameView.cpp index a8bca20..64b4ec8 100644 --- a/src/Engine/Window/GameView.cpp +++ b/src/Engine/Window/GameView.cpp @@ -29,9 +29,9 @@ GameView::GameView(Gfx::PGraphics graphics, PWindow window, const ViewportCreate renderGraph.addPass(new LightCullingPass(graphics, scene)); renderGraph.addPass(new ShadowPass(graphics, scene)); renderGraph.addPass(new BasePass(graphics, scene)); - // renderGraph.addPass(new SimulationComputePass(graphics, scene)); - // renderGraph.addPass(new SurfaceExtractPass(graphics, scene)); - // renderGraph.addPass(new FluidRenderPass(graphics, scene)); + renderGraph.addPass(new SimulationComputePass(graphics, scene)); + renderGraph.addPass(new SurfaceExtractPass(graphics, scene)); + renderGraph.addPass(new FluidRenderPass(graphics, scene)); renderGraph.addPass(new ToneMappingPass(graphics)); renderGraph.setViewport(viewport); renderGraph.createRenderPass();