2023-10-26 18:37:29 +02:00
|
|
|
#pragma once
|
|
|
|
|
#include "Resources.h"
|
|
|
|
|
#include "Texture.h"
|
2023-11-16 22:58:47 +01:00
|
|
|
#include "Window.h"
|
2023-10-26 18:37:29 +02:00
|
|
|
|
|
|
|
|
namespace Seele
|
|
|
|
|
{
|
|
|
|
|
namespace Gfx
|
|
|
|
|
{
|
|
|
|
|
class RenderTargetAttachment
|
|
|
|
|
{
|
|
|
|
|
public:
|
2024-02-01 10:21:36 +01:00
|
|
|
RenderTargetAttachment()
|
|
|
|
|
{}
|
2023-10-26 18:37:29 +02:00
|
|
|
RenderTargetAttachment(PTexture2D texture,
|
2024-01-31 09:49:53 +01:00
|
|
|
SeImageLayout initialLayout,
|
|
|
|
|
SeImageLayout finalLayout,
|
2023-11-15 00:06:00 +01:00
|
|
|
SeAttachmentLoadOp loadOp = SE_ATTACHMENT_LOAD_OP_LOAD,
|
|
|
|
|
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
|
|
|
|
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
|
|
|
|
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE);
|
2024-02-01 10:21:36 +01:00
|
|
|
|
|
|
|
|
RenderTargetAttachment(PViewport viewport,
|
|
|
|
|
SeImageLayout initialLayout,
|
|
|
|
|
SeImageLayout finalLayout,
|
|
|
|
|
SeAttachmentLoadOp loadOp = SE_ATTACHMENT_LOAD_OP_LOAD,
|
|
|
|
|
SeAttachmentStoreOp storeOp = SE_ATTACHMENT_STORE_OP_STORE,
|
|
|
|
|
SeAttachmentLoadOp stencilLoadOp = SE_ATTACHMENT_LOAD_OP_DONT_CARE,
|
|
|
|
|
SeAttachmentStoreOp stencilStoreOp = SE_ATTACHMENT_STORE_OP_DONT_CARE);
|
|
|
|
|
~RenderTargetAttachment();
|
|
|
|
|
PTexture2D getTexture()
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2024-02-01 10:21:36 +01:00
|
|
|
if(viewport != nullptr)
|
|
|
|
|
{
|
|
|
|
|
return viewport->getOwner()->getBackBuffer();
|
|
|
|
|
}
|
2023-10-26 18:37:29 +02:00
|
|
|
return texture;
|
|
|
|
|
}
|
2024-02-01 10:21:36 +01:00
|
|
|
SeFormat getFormat() const
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2024-02-01 10:21:36 +01:00
|
|
|
if(viewport != nullptr)
|
|
|
|
|
{
|
|
|
|
|
return viewport->getOwner()->getSwapchainFormat();
|
|
|
|
|
}
|
2023-10-26 18:37:29 +02:00
|
|
|
return texture->getFormat();
|
|
|
|
|
}
|
2024-02-01 10:21:36 +01:00
|
|
|
SeSampleCountFlags getNumSamples() const
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2024-02-01 10:21:36 +01:00
|
|
|
if(viewport != nullptr)
|
|
|
|
|
{
|
|
|
|
|
return viewport->getSamples();
|
|
|
|
|
}
|
2023-10-26 18:37:29 +02:00
|
|
|
return texture->getNumSamples();
|
|
|
|
|
}
|
2024-02-01 10:21:36 +01:00
|
|
|
uint32 getWidth() const
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2024-02-01 10:21:36 +01:00
|
|
|
if(viewport != nullptr)
|
|
|
|
|
{
|
|
|
|
|
return viewport->getWidth();
|
|
|
|
|
}
|
2023-11-15 00:06:00 +01:00
|
|
|
return texture->getWidth();
|
2023-10-26 18:37:29 +02:00
|
|
|
}
|
2024-02-01 10:21:36 +01:00
|
|
|
uint32 getHeight() const
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2024-02-01 10:21:36 +01:00
|
|
|
if(viewport != nullptr)
|
|
|
|
|
{
|
|
|
|
|
return viewport->getHeight();
|
|
|
|
|
}
|
2023-11-15 00:06:00 +01:00
|
|
|
return texture->getHeight();
|
2023-10-26 18:37:29 +02:00
|
|
|
}
|
2023-12-04 16:36:02 +01:00
|
|
|
constexpr SeAttachmentLoadOp getLoadOp() const { return loadOp; }
|
|
|
|
|
constexpr SeAttachmentStoreOp getStoreOp() const { return storeOp; }
|
|
|
|
|
constexpr SeAttachmentLoadOp getStencilLoadOp() const { return stencilLoadOp; }
|
|
|
|
|
constexpr SeAttachmentStoreOp getStencilStoreOp() const { return stencilStoreOp; }
|
2024-01-31 09:49:53 +01:00
|
|
|
constexpr SeImageLayout getInitialLayout() const { return initialLayout; }
|
|
|
|
|
constexpr SeImageLayout getFinalLayout() const { return finalLayout; }
|
|
|
|
|
constexpr void setLoadOp(SeAttachmentLoadOp val) { loadOp = val; }
|
|
|
|
|
constexpr void setStoreOp(SeAttachmentStoreOp val) { storeOp = val; }
|
|
|
|
|
constexpr void setStencilLoadOp(SeAttachmentLoadOp val) { stencilLoadOp = val; }
|
|
|
|
|
constexpr void setStencilStoreOp(SeAttachmentStoreOp val) { stencilStoreOp = val; }
|
|
|
|
|
constexpr void setInitialLayout(SeImageLayout val) { initialLayout = val; }
|
|
|
|
|
constexpr void setFinalLayout(SeImageLayout val) { finalLayout = val; }
|
2023-10-26 18:37:29 +02:00
|
|
|
SeClearValue clear;
|
|
|
|
|
SeColorComponentFlags componentFlags;
|
2024-01-31 09:49:53 +01:00
|
|
|
protected:
|
2024-02-01 10:21:36 +01:00
|
|
|
PTexture2D texture = nullptr;
|
|
|
|
|
PViewport viewport = nullptr;
|
2024-01-31 09:49:53 +01:00
|
|
|
SeImageLayout initialLayout;
|
|
|
|
|
SeImageLayout finalLayout;
|
2023-10-26 18:37:29 +02:00
|
|
|
SeAttachmentLoadOp loadOp;
|
|
|
|
|
SeAttachmentStoreOp storeOp;
|
|
|
|
|
SeAttachmentLoadOp stencilLoadOp;
|
|
|
|
|
SeAttachmentStoreOp stencilStoreOp;
|
|
|
|
|
};
|
2024-01-24 23:10:33 +01:00
|
|
|
|
2024-01-31 09:49:53 +01:00
|
|
|
struct RenderTargetLayout
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2024-02-01 10:21:36 +01:00
|
|
|
Array<RenderTargetAttachment> inputAttachments;
|
|
|
|
|
Array<RenderTargetAttachment> colorAttachments;
|
|
|
|
|
Array<RenderTargetAttachment> resolveAttachments;
|
|
|
|
|
RenderTargetAttachment depthAttachment;
|
|
|
|
|
RenderTargetAttachment depthResolveAttachment;
|
2023-10-26 18:37:29 +02:00
|
|
|
};
|
2024-01-31 09:49:53 +01:00
|
|
|
|
|
|
|
|
struct SubPassDependency
|
|
|
|
|
{
|
|
|
|
|
uint32 srcSubpass;
|
|
|
|
|
uint32 dstSubpass;
|
|
|
|
|
SePipelineStageFlags srcStage;
|
|
|
|
|
SePipelineStageFlags dstStage;
|
|
|
|
|
SeAccessFlags srcAccess;
|
|
|
|
|
SeAccessFlags dstAccess;
|
|
|
|
|
};
|
2023-10-26 18:37:29 +02:00
|
|
|
|
|
|
|
|
class RenderPass
|
|
|
|
|
{
|
|
|
|
|
public:
|
2024-01-31 09:49:53 +01:00
|
|
|
RenderPass(RenderTargetLayout layout, Array<SubPassDependency> dependencies)
|
|
|
|
|
: layout(std::move(layout))
|
|
|
|
|
, dependencies(std::move(dependencies))
|
|
|
|
|
{}
|
2023-10-26 18:37:29 +02:00
|
|
|
virtual ~RenderPass() {}
|
2023-11-05 10:36:01 +01:00
|
|
|
RenderPass(RenderPass&&) = default;
|
|
|
|
|
RenderPass& operator=(RenderPass&&) = default;
|
2024-01-31 09:49:53 +01:00
|
|
|
const RenderTargetLayout& getLayout() const { return layout; }
|
2023-10-26 18:37:29 +02:00
|
|
|
|
|
|
|
|
protected:
|
2024-01-31 09:49:53 +01:00
|
|
|
RenderTargetLayout layout;
|
|
|
|
|
Array<SubPassDependency> dependencies;
|
2023-10-26 18:37:29 +02:00
|
|
|
};
|
|
|
|
|
DEFINE_REF(RenderPass)
|
|
|
|
|
}
|
|
|
|
|
}
|