Stored renderpass attachement information in SHVkRenderpass
This commit is contained in:
parent
b657ad8884
commit
1a725c24e2
|
@ -56,6 +56,11 @@ namespace SHADE
|
|||
}
|
||||
}
|
||||
|
||||
void SHRenderGraphNode::HandleResize(void) noexcept
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
/*!
|
||||
|
||||
|
|
|
@ -81,6 +81,7 @@ namespace SHADE
|
|||
/*-----------------------------------------------------------------------*/
|
||||
void CreateRenderpass(void) noexcept;
|
||||
void CreateFramebuffer(void) noexcept;
|
||||
void HandleResize (void) noexcept;
|
||||
|
||||
public:
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
|
|
@ -30,7 +30,10 @@ namespace SHADE
|
|||
SHVkRenderpass::SHVkRenderpass(Handle<SHVkLogicalDevice> const& inLogicalDeviceHdl, std::span<vk::AttachmentDescription> const vkDescriptions, std::vector<SHVkSubpassParams> const& subpasses) noexcept
|
||||
: logicalDeviceHdl {inLogicalDeviceHdl}
|
||||
, numAttDescs {static_cast<uint32_t>(vkDescriptions.size())}
|
||||
, vkSubpassDescriptions{}
|
||||
, vkSubpassDeps{}
|
||||
, clearColors{}
|
||||
, vkAttachmentDescriptions{}
|
||||
{
|
||||
for (uint32_t i = 0; i < vkDescriptions.size(); ++i)
|
||||
{
|
||||
|
@ -42,7 +45,6 @@ namespace SHADE
|
|||
|
||||
|
||||
vk::RenderPassCreateInfo renderPassCreateInfo{};
|
||||
std::vector<vk::SubpassDependency> subpassDeps;
|
||||
|
||||
// For validating the depth ref
|
||||
auto isValidDepthRef = [&](vk::AttachmentReference const& depthRef) -> bool
|
||||
|
@ -50,13 +52,16 @@ namespace SHADE
|
|||
return !(depthRef.attachment == static_cast<uint32_t> (-1) && depthRef.layout == vk::ImageLayout::eUndefined);
|
||||
};
|
||||
|
||||
for (uint32_t i = 0; i < vkDescriptions.size(); ++i)
|
||||
vkAttachmentDescriptions[i] = vkDescriptions[i];
|
||||
|
||||
uint32_t subpassIndex = 0;
|
||||
if (!subpasses.empty())
|
||||
{
|
||||
for (auto& subpass : subpasses)
|
||||
{
|
||||
subpassDescriptions.emplace_back();
|
||||
auto& spDesc = subpassDescriptions.back();
|
||||
vkSubpassDescriptions.emplace_back();
|
||||
auto& spDesc = vkSubpassDescriptions.back();
|
||||
|
||||
spDesc.pColorAttachments = subpass.colorRefs.data();
|
||||
spDesc.colorAttachmentCount = static_cast<uint32_t>(subpass.colorRefs.size());
|
||||
|
@ -88,18 +93,18 @@ namespace SHADE
|
|||
};
|
||||
|
||||
// Push a new dependency
|
||||
subpassDeps.push_back(dependency);
|
||||
vkSubpassDeps.push_back(dependency);
|
||||
|
||||
++subpassIndex;
|
||||
}
|
||||
|
||||
// Renderpass create info for render pass creation
|
||||
renderPassCreateInfo.attachmentCount = static_cast<uint32_t>(vkDescriptions.size());
|
||||
renderPassCreateInfo.pAttachments = vkDescriptions.data();
|
||||
renderPassCreateInfo.subpassCount = static_cast<uint32_t>(subpassDescriptions.size());
|
||||
renderPassCreateInfo.pSubpasses = subpassDescriptions.data();
|
||||
renderPassCreateInfo.dependencyCount = static_cast<uint32_t>(subpassDeps.size());
|
||||
renderPassCreateInfo.pDependencies = subpassDeps.data();
|
||||
renderPassCreateInfo.attachmentCount = static_cast<uint32_t>(vkAttachmentDescriptions.size());
|
||||
renderPassCreateInfo.pAttachments = vkAttachmentDescriptions.data();
|
||||
renderPassCreateInfo.subpassCount = static_cast<uint32_t>(vkSubpassDescriptions.size());
|
||||
renderPassCreateInfo.pSubpasses = vkSubpassDescriptions.data();
|
||||
renderPassCreateInfo.dependencyCount = static_cast<uint32_t>(vkSubpassDeps.size());
|
||||
renderPassCreateInfo.pDependencies = vkSubpassDeps.data();
|
||||
|
||||
}
|
||||
// No subpasses passed in, create a default one.
|
||||
|
@ -172,6 +177,8 @@ namespace SHADE
|
|||
: logicalDeviceHdl{ inLogicalDeviceHdl }
|
||||
, numAttDescs{ static_cast<uint32_t>(vkDescriptions.size()) }
|
||||
, clearColors{}
|
||||
, vkSubpassDescriptions{ }
|
||||
, vkSubpassDeps{ }
|
||||
{
|
||||
for (uint32_t i = 0; i < vkDescriptions.size(); ++i)
|
||||
{
|
||||
|
@ -181,18 +188,24 @@ namespace SHADE
|
|||
clearColors[i].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} };
|
||||
}
|
||||
|
||||
subpassDescriptions.resize (spDescs.size());
|
||||
for (uint32_t i = 0; i < subpassDescriptions.size(); ++i)
|
||||
{
|
||||
subpassDescriptions[i] = spDescs[i];
|
||||
}
|
||||
vkAttachmentDescriptions.resize(vkDescriptions.size());
|
||||
for (uint32_t i = 0; i < vkDescriptions.size(); ++i)
|
||||
vkAttachmentDescriptions[i] = vkDescriptions[i];
|
||||
|
||||
vkSubpassDescriptions.resize (spDescs.size());
|
||||
for (uint32_t i = 0; i < vkSubpassDescriptions.size(); ++i)
|
||||
vkSubpassDescriptions[i] = spDescs[i];
|
||||
|
||||
vkSubpassDeps.resize(spDeps.size());
|
||||
for (uint32_t i = 0; i < vkSubpassDeps.size(); ++i)
|
||||
vkSubpassDeps[i] = spDeps[i];
|
||||
|
||||
vk::RenderPassCreateInfo renderPassCreateInfo{};
|
||||
|
||||
renderPassCreateInfo.attachmentCount = static_cast<uint32_t>(vkDescriptions.size());
|
||||
renderPassCreateInfo.pAttachments = vkDescriptions.data();
|
||||
renderPassCreateInfo.subpassCount = static_cast<uint32_t>(subpassDescriptions.size());
|
||||
renderPassCreateInfo.pSubpasses = subpassDescriptions.data();
|
||||
renderPassCreateInfo.subpassCount = static_cast<uint32_t>(vkSubpassDescriptions.size());
|
||||
renderPassCreateInfo.pSubpasses = vkSubpassDescriptions.data();
|
||||
renderPassCreateInfo.dependencyCount = static_cast<uint32_t>(spDeps.size());
|
||||
renderPassCreateInfo.pDependencies = spDeps.data();
|
||||
|
||||
|
@ -210,8 +223,10 @@ namespace SHADE
|
|||
SHVkRenderpass::SHVkRenderpass(SHVkRenderpass&& rhs) noexcept
|
||||
: vkRenderpass {rhs.vkRenderpass}
|
||||
, logicalDeviceHdl {rhs.logicalDeviceHdl}
|
||||
, subpassDescriptions {std::move (rhs.subpassDescriptions)}
|
||||
, clearColors {std::move (rhs.clearColors)}
|
||||
, vkSubpassDescriptions{ std::move(rhs.vkSubpassDescriptions) }
|
||||
, vkSubpassDeps{ std::move(rhs.vkSubpassDeps) }
|
||||
, clearColors{ std::move(rhs.clearColors) }
|
||||
, vkAttachmentDescriptions{ std::move(rhs.vkAttachmentDescriptions) }
|
||||
{
|
||||
rhs.vkRenderpass = VK_NULL_HANDLE;
|
||||
}
|
||||
|
@ -224,8 +239,10 @@ namespace SHADE
|
|||
|
||||
vkRenderpass = rhs.vkRenderpass;
|
||||
logicalDeviceHdl = rhs.logicalDeviceHdl;
|
||||
subpassDescriptions = std::move(rhs.subpassDescriptions);
|
||||
vkSubpassDescriptions = std::move(rhs.vkSubpassDescriptions);
|
||||
vkSubpassDeps = std::move(rhs.vkSubpassDeps);
|
||||
clearColors = std::move(rhs.clearColors);
|
||||
vkAttachmentDescriptions = std::move(rhs.vkAttachmentDescriptions);
|
||||
|
||||
rhs.vkRenderpass = VK_NULL_HANDLE;
|
||||
|
||||
|
|
|
@ -29,7 +29,13 @@ namespace SHADE
|
|||
Handle<SHVkLogicalDevice> logicalDeviceHdl;
|
||||
|
||||
//! Container of subpass information used to construct subpasses
|
||||
std::vector<vk::SubpassDescription> subpassDescriptions;
|
||||
std::vector<vk::SubpassDescription> vkSubpassDescriptions;
|
||||
|
||||
//! Container of subpass dependencies used to create renderpass
|
||||
std::vector<vk::SubpassDependency> vkSubpassDeps;
|
||||
|
||||
//! Attachment descriptions
|
||||
std::vector<vk::AttachmentDescription> vkAttachmentDescriptions;
|
||||
|
||||
//! Clear colors for the color and depth
|
||||
std::array<vk::ClearValue, NUM_CLEAR_COLORS> clearColors;
|
||||
|
|
Loading…
Reference in New Issue