Trying to fix weird sync issue

This commit is contained in:
Dynamitos
2024-01-26 23:19:18 +01:00
parent 09790c4cbd
commit 1bf08f696b
12 changed files with 54 additions and 31 deletions
+2 -2
View File
@@ -72,8 +72,8 @@ void BasePass::render()
Gfx::SE_ACCESS_SHADER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
depthAttachment->getTexture()->pipelineBarrier(
Gfx::SE_ACCESS_SHADER_READ_BIT, Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
Gfx::SE_ACCESS_MEMORY_READ_BIT, Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT);
depthAttachment->getTexture()->transferOwnership(Gfx::QueueType::GRAPHICS);
depthAttachment->getTexture()->changeLayout(Gfx::SE_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
@@ -9,6 +9,8 @@
#include "Math/Vector.h"
#include "RenderGraph.h"
#include "Graphics/Command.h"
#include <vulkan/vulkan.h>
#include "Graphics/Vulkan/Graphics.h"
using namespace Seele;
@@ -130,6 +132,7 @@ void DepthPrepass::render()
}
graphics->executeCommands(commands);
graphics->endRenderPass();
//vkDeviceWaitIdle(((Vulkan::Graphics*)graphics.getHandle())->getDevice());
}
void DepthPrepass::endFrame()
@@ -34,6 +34,10 @@ void SkyboxRenderPass::beginFrame(const Component::Camera& cam)
skyboxDataSet = skyboxDataLayout->allocateDescriptorSet();
skyboxDataSet->updateBuffer(0, skyboxBuffer);
skyboxDataSet->writeChanges();
skyboxBuffer->pipelineBarrier(
Gfx::SE_ACCESS_TRANSFER_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT,
Gfx::SE_ACCESS_MEMORY_READ_BIT, Gfx::SE_PIPELINE_STAGE_VERTEX_SHADER_BIT
);
textureSet = textureLayout->allocateDescriptorSet();
textureSet->updateTexture(0, skybox.day);
textureSet->updateTexture(1, skybox.night);
@@ -43,6 +47,14 @@ void SkyboxRenderPass::beginFrame(const Component::Camera& cam)
void SkyboxRenderPass::render()
{
colorAttachment->getTexture()->pipelineBarrier(
Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
Gfx::SE_ACCESS_COLOR_ATTACHMENT_READ_BIT, Gfx::SE_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
);
depthAttachment->getTexture()->pipelineBarrier(
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
Gfx::SE_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT, Gfx::SE_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
);
graphics->beginRenderPass(renderPass);
Gfx::PRenderCommand renderCommand = graphics->createRenderCommand("SkyboxRender");
renderCommand->setViewport(viewport);
@@ -74,12 +86,12 @@ void SkyboxRenderPass::publishOutputs()
void SkyboxRenderPass::createRenderPass()
{
baseColorAttachment = resources->requestRenderTarget("BASEPASS_COLOR");
baseColorAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
Gfx::PRenderTargetAttachment depthAttachment = resources->requestRenderTarget("DEPTHPREPASS_DEPTH");
colorAttachment = resources->requestRenderTarget("BASEPASS_COLOR");
colorAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
depthAttachment = resources->requestRenderTarget("DEPTHPREPASS_DEPTH");
depthAttachment->loadOp = Gfx::SE_ATTACHMENT_LOAD_OP_LOAD;
Gfx::ORenderTargetLayout layout = new Gfx::RenderTargetLayout{
.colorAttachments = { baseColorAttachment },
.colorAttachments = { colorAttachment },
.depthAttachment = depthAttachment
};
renderPass = graphics->createRenderPass(std::move(layout), viewport);
@@ -18,8 +18,8 @@ public:
virtual void publishOutputs() override;
virtual void createRenderPass() override;
private:
Gfx::PRenderTargetAttachment baseColorAttachment;
Gfx::OVertexBuffer cubeBuffer;
Gfx::PRenderTargetAttachment colorAttachment;
Gfx::PRenderTargetAttachment depthAttachment;
Gfx::ODescriptorLayout skyboxDataLayout;
Gfx::PDescriptorSet skyboxDataSet;
Gfx::ODescriptorLayout textureLayout;