God I felt so much pain writing this
- Thank god this botchy/hacky resource linking feature between graphs will only be used for a couple of resources. - Setup environment for UI rendering - "Scene" resource is now used in BOTH world render graph and screen render graph. Layouts are setup accordingly. - A very horrible result of this is that linked resources have to be resized in their original graph and it has to be resized BEFORE the graphs linked to it since the framebuffers use their image views. - sigh.
This commit is contained in:
parent
d17a83ab77
commit
95d2836c94
|
@ -156,6 +156,8 @@ namespace SHADE
|
||||||
worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, 0.0f), SHVec3(0.0f, 0.0f, -2.0f), SHVec3(0.0f, 1.0f, 0.0f));
|
worldCamera->SetLookAt(SHVec3(0.0f, 0.0f, 0.0f), SHVec3(0.0f, 0.0f, -2.0f), SHVec3(0.0f, 1.0f, 0.0f));
|
||||||
worldCamera->SetPerspective(90.0f, static_cast<float>(windowDims.first), static_cast<float>(windowDims.second), 0.0f, 100.0f);
|
worldCamera->SetPerspective(90.0f, static_cast<float>(windowDims.first), static_cast<float>(windowDims.second), 0.0f, 100.0f);
|
||||||
|
|
||||||
|
worldCameraDirector = cameraSystem->CreateDirector();
|
||||||
|
|
||||||
// Create Default Viewport
|
// Create Default Viewport
|
||||||
worldViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast<float>(window->GetWindowSize().first), static_cast<float>(window->GetWindowSize().second), 0.0f, 1.0f));
|
worldViewport = AddViewport(vk::Viewport(0.0f, 0.0f, static_cast<float>(window->GetWindowSize().first), static_cast<float>(window->GetWindowSize().second), 0.0f, 1.0f));
|
||||||
|
|
||||||
|
@ -169,7 +171,7 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* SCENE RENDER GRAPH RESOURCES */
|
/* WORLD RENDER GRAPH RESOURCES */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
// Initialize world render graph
|
// Initialize world render graph
|
||||||
worldRenderGraph->Init(device, swapchain, &resourceManager);
|
worldRenderGraph->Init(device, swapchain, &resourceManager);
|
||||||
|
@ -180,7 +182,7 @@ namespace SHADE
|
||||||
worldRenderGraph->AddResource("Depth Buffer", { SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint);
|
worldRenderGraph->AddResource("Depth Buffer", { SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH_STENCIL }, windowDims.first, windowDims.second, vk::Format::eD32SfloatS8Uint);
|
||||||
worldRenderGraph->AddResource("Entity ID", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc);
|
worldRenderGraph->AddResource("Entity ID", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc);
|
||||||
worldRenderGraph->AddResource("Light Layer Indices", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc);
|
worldRenderGraph->AddResource("Light Layer Indices", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR32Uint, 1, vk::ImageUsageFlagBits::eTransferSrc);
|
||||||
worldRenderGraph->AddResource("Scene", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second);
|
worldRenderGraph->AddResource("Scene", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE, SH_RENDER_GRAPH_RESOURCE_FLAGS::SHARED }, windowDims.first, windowDims.second);
|
||||||
worldRenderGraph->AddResource("SSAO", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR8Unorm);
|
worldRenderGraph->AddResource("SSAO", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR8Unorm);
|
||||||
worldRenderGraph->AddResource("SSAO Blur", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR8Unorm);
|
worldRenderGraph->AddResource("SSAO Blur", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, windowDims.first, windowDims.second, vk::Format::eR8Unorm);
|
||||||
|
|
||||||
|
@ -257,25 +259,55 @@ namespace SHADE
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO Blur", "Scene" });
|
gBufferNode->AddNodeCompute(deferredCompositeShader, { "Position", "Normals", "Albedo", "Light Layer Indices", "SSAO Blur", "Scene" });
|
||||||
|
|
||||||
// Dummy Node to transition scene render graph resource
|
{
|
||||||
auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, { "Debug Draw" }); // no predecessors
|
//// Dummy Node to transition scene render graph resource
|
||||||
auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass");
|
//auto dummyNode = worldRenderGraph->AddNode("Dummy Pass", { "Scene" }, { "Debug Draw" }); // no predecessors
|
||||||
dummySubpass->AddInput("Scene");
|
//auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass");
|
||||||
|
//dummySubpass->AddInput("Scene");
|
||||||
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* GENERATE RENDER GRAPH */
|
/* GENERATE WORLD RENDER GRAPH */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
// Generate world render graph
|
// Generate world render graph
|
||||||
worldRenderGraph->Generate();
|
worldRenderGraph->Generate();
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* SCREEN RENDER GRAPH */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
// Initialize screen render graph
|
||||||
|
screenRenderGraph = resourceManager.Create<SHRenderGraph>();
|
||||||
|
screenRenderGraph->Init(device, swapchain, &resourceManager);
|
||||||
|
screenRenderGraph->LinkNonOwningResource(worldRenderGraph, "Scene");
|
||||||
|
|
||||||
|
auto screenSpaceNode = screenRenderGraph->AddNode("Screen Space Pass", { "Scene" }, {});
|
||||||
|
auto uiSubpass = screenSpaceNode->AddSubpass("UI");
|
||||||
|
uiSubpass->AddColorOutput("Scene");
|
||||||
|
|
||||||
|
{
|
||||||
|
// Dummy Node to transition scene render graph resource
|
||||||
|
auto dummyNode = screenRenderGraph->AddNode("Dummy Pass", { "Scene" }, { "Screen Space Pass" }); // no predecessors
|
||||||
|
auto dummySubpass = dummyNode->AddSubpass("Dummy Subpass");
|
||||||
|
dummySubpass->AddInput("Scene");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
screenRenderGraph->Generate();
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* BIND RENDER GRAPH TO RENDERER */
|
/* BIND RENDER GRAPH TO RENDERER */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
// Add world renderer to default viewport
|
// Add world renderer to default viewport
|
||||||
worldRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph);
|
worldRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], worldRenderGraph);
|
||||||
worldRenderer->SetCamera(worldCamera);
|
worldRenderer->SetCamera(worldCamera);
|
||||||
|
worldRenderer->SetCameraDirector(worldCameraDirector);
|
||||||
|
|
||||||
|
// Add screen renderer to default viewport
|
||||||
|
screenRenderer = worldViewport->AddRenderer(resourceManager, swapchain->GetNumImages(), renderContextCmdPools, descPool, SHGraphicsGlobalData::GetDescSetLayouts()[SHGraphicsConstants::DescriptorSetIndex::HIGH_FREQUENCY_GLOBALS], screenRenderGraph);
|
||||||
|
screenRenderer->SetCamera(screenCamera);
|
||||||
|
screenRenderer->SetCameraDirector(worldCameraDirector);
|
||||||
|
|
||||||
worldRenderer->SetCameraDirector(cameraSystem->CreateDirector());
|
|
||||||
|
|
||||||
// Create debug draw pipeline
|
// Create debug draw pipeline
|
||||||
debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass);
|
debugDrawPipeline = createDebugDrawPipeline(debugDrawNode->GetRenderpass(), debugDrawSubpass);
|
||||||
|
@ -322,7 +354,7 @@ namespace SHADE
|
||||||
textRenderingSubSystem = resourceManager.Create<SHTextRenderingSubSystem>();
|
textRenderingSubSystem = resourceManager.Create<SHTextRenderingSubSystem>();
|
||||||
|
|
||||||
// initialize the text renderer
|
// initialize the text renderer
|
||||||
auto uiNode = worldRenderGraph->GetNode("Screen Space Pass");
|
//auto uiNode = screenRenderGraph->GetNode("Screen Space Pass");
|
||||||
//textRenderingSubSystem->Init(device, uiNode->GetRenderpass(), uiNode->GetSubpass("UI"), descPool, textVS, textFS);
|
//textRenderingSubSystem->Init(device, uiNode->GetRenderpass(), uiNode->GetSubpass("UI"), descPool, textVS, textFS);
|
||||||
|
|
||||||
SHFreetypeInstance::Init();
|
SHFreetypeInstance::Init();
|
||||||
|
@ -906,6 +938,7 @@ namespace SHADE
|
||||||
|
|
||||||
worldRenderGraph->HandleResize(resizeWidth, resizeHeight);
|
worldRenderGraph->HandleResize(resizeWidth, resizeHeight);
|
||||||
editorRenderGraph->HandleResize(windowDims.first, windowDims.second);
|
editorRenderGraph->HandleResize(windowDims.first, windowDims.second);
|
||||||
|
screenRenderGraph->HandleResize(resizeWidth, resizeHeight);
|
||||||
|
|
||||||
mousePickSystem->HandleResize();
|
mousePickSystem->HandleResize();
|
||||||
postOffscreenRender->HandleResize();
|
postOffscreenRender->HandleResize();
|
||||||
|
|
|
@ -32,6 +32,7 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
#include "Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h"
|
#include "Graphics/MiddleEnd/Interface/SHPostOffscreenRenderSystem.h"
|
||||||
#include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h"
|
#include "Graphics/MiddleEnd/Lights/SHLightingSubSystem.h"
|
||||||
#include "Graphics/MiddleEnd/PostProcessing/SHSSAO.h"
|
#include "Graphics/MiddleEnd/PostProcessing/SHSSAO.h"
|
||||||
|
#include "Camera/SHCameraDirector.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -392,20 +393,20 @@ namespace SHADE
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
Handle<SHViewport> editorViewport;
|
Handle<SHViewport> editorViewport;
|
||||||
Handle<SHRenderer> editorRenderer;
|
Handle<SHRenderer> editorRenderer;
|
||||||
Handle<SHRenderGraph> editorRenderGraph;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Handle<SHViewport> worldViewport; // Whole screen
|
Handle<SHViewport> worldViewport; // Whole screen
|
||||||
std::vector<Handle<SHViewport>> viewports; // Additional viewports
|
std::vector<Handle<SHViewport>> viewports; // Additional viewports
|
||||||
|
|
||||||
// Temp renderers
|
// Renderers
|
||||||
Handle<SHRenderer> worldRenderer;
|
Handle<SHRenderer> worldRenderer;
|
||||||
|
|
||||||
Handle<SHRenderer> screenRenderer;
|
Handle<SHRenderer> screenRenderer;
|
||||||
|
|
||||||
// Temp Cameras
|
// Temp Cameras
|
||||||
Handle<SHCamera> worldCamera;
|
Handle<SHCamera> worldCamera;
|
||||||
Handle<SHCamera> screenCamera;
|
Handle<SHCamera> screenCamera;
|
||||||
|
DirectorHandle worldCameraDirector;
|
||||||
|
|
||||||
|
|
||||||
// Built-In Shaders
|
// Built-In Shaders
|
||||||
Handle<SHVkShaderModule> defaultVertShader;
|
Handle<SHVkShaderModule> defaultVertShader;
|
||||||
|
@ -432,6 +433,10 @@ namespace SHADE
|
||||||
|
|
||||||
// Render Graphs
|
// Render Graphs
|
||||||
Handle<SHRenderGraph> worldRenderGraph;
|
Handle<SHRenderGraph> worldRenderGraph;
|
||||||
|
Handle<SHRenderGraph> screenRenderGraph;
|
||||||
|
#ifdef SHEDITOR
|
||||||
|
Handle<SHRenderGraph> editorRenderGraph;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Sub systems
|
// Sub systems
|
||||||
Handle<SHMousePickSystem> mousePickSystem;
|
Handle<SHMousePickSystem> mousePickSystem;
|
||||||
|
|
|
@ -80,6 +80,12 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (vk::ImageLayout layout = resourceToLink->GetInfoTracker()->GetLayout(node, {}); layout != vk::ImageLayout::eUndefined)
|
if (vk::ImageLayout layout = resourceToLink->GetInfoTracker()->GetLayout(node, {}); layout != vk::ImageLayout::eUndefined)
|
||||||
finalLayout = layout;
|
finalLayout = layout;
|
||||||
|
|
||||||
|
for (auto& compute : node->nodeComputes)
|
||||||
|
{
|
||||||
|
if (vk::ImageLayout layout = resourceToLink->GetInfoTracker()->GetLayout(compute); layout != vk::ImageLayout::eUndefined)
|
||||||
|
finalLayout = layout;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
renderGraphStorage->graphResources->try_emplace(resourceName, resourceToLink);
|
renderGraphStorage->graphResources->try_emplace(resourceName, resourceToLink);
|
||||||
|
@ -588,7 +594,10 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
// resize resources
|
// resize resources
|
||||||
for (auto& [name, resource] : *renderGraphStorage->graphResources)
|
for (auto& [name, resource] : *renderGraphStorage->graphResources)
|
||||||
|
{
|
||||||
|
if (!renderGraphStorage->nonOwningResourceInitialLayouts.contains (resource.GetId().Raw))
|
||||||
resource->HandleResize(newWidth, newHeight);
|
resource->HandleResize(newWidth, newHeight);
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& node : nodes)
|
for (auto& node : nodes)
|
||||||
{
|
{
|
||||||
|
|
|
@ -111,7 +111,10 @@ namespace SHADE
|
||||||
* However, because it was eventually necessary that some resources had to be shared and its contents carried over to
|
* However, because it was eventually necessary that some resources had to be shared and its contents carried over to
|
||||||
* other graphs, the functionality was implemented through a link function in SHRenderGraph.cpp to facilitate this linkage.
|
* other graphs, the functionality was implemented through a link function in SHRenderGraph.cpp to facilitate this linkage.
|
||||||
* This should ideally be replaced by an implementation more self-contained, perhaps through a higher level class like a canvas
|
* This should ideally be replaced by an implementation more self-contained, perhaps through a higher level class like a canvas
|
||||||
* that manage the resources instead and can facilitate such linking of resources.
|
* that manage the resources instead and can facilitate such linking of resources. Either that, or we allow only 1 render graph,
|
||||||
|
* but different matrices (SHRenderer) can be used in different nodes.
|
||||||
|
* - There are also way too many hash maps created for ease of access. This definitely can be cut down.
|
||||||
|
* -
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -275,10 +275,18 @@ namespace SHADE
|
||||||
nodeComputeResources.push_back(resource);
|
nodeComputeResources.push_back(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// need to use for tracking resources
|
||||||
|
std::vector<Handle<SHRenderGraphResource>> temp (nodeComputeResources);
|
||||||
|
|
||||||
// Create the subpass compute with the resources
|
// Create the subpass compute with the resources
|
||||||
auto nodeCompute = graphStorage->resourceHub->Create<SHRenderGraphNodeCompute>(graphStorage, computeShaderModule, std::move(nodeComputeResources), std::move (dynamicBufferBindings), nodeComputes.empty());
|
auto nodeCompute = graphStorage->resourceHub->Create<SHRenderGraphNodeCompute>(graphStorage, computeShaderModule, std::move(nodeComputeResources), std::move (dynamicBufferBindings), nodeComputes.empty());
|
||||||
nodeComputes.push_back(nodeCompute);
|
nodeComputes.push_back(nodeCompute);
|
||||||
|
|
||||||
|
for (auto& resource : temp)
|
||||||
|
{
|
||||||
|
resource->GetInfoTracker()->TrackLayout(nodeCompute);
|
||||||
|
}
|
||||||
|
|
||||||
return nodeCompute;
|
return nodeCompute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ namespace SHADE
|
||||||
// save the resources
|
// save the resources
|
||||||
resources = std::move (subpassComputeResources);
|
resources = std::move (subpassComputeResources);
|
||||||
|
|
||||||
|
|
||||||
//Get the descriptor set layouts required to allocate. We only want the ones for allocate because
|
//Get the descriptor set layouts required to allocate. We only want the ones for allocate because
|
||||||
//global descriptors are already bound in the main system.
|
//global descriptors are already bound in the main system.
|
||||||
auto const& graphResourceLayout = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline()[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE];
|
auto const& graphResourceLayout = computePipeline->GetPipelineLayout()->GetDescriptorSetLayoutsPipeline()[SHGraphicsConstants::DescriptorSetIndex::RENDERGRAPH_RESOURCE];
|
||||||
|
|
|
@ -18,6 +18,11 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SHRenderGraphResource::InfoTracker::TrackLayout(Handle<SHRenderGraphNodeCompute> compute) noexcept
|
||||||
|
{
|
||||||
|
computeTracker.emplace (compute.GetId().Raw);
|
||||||
|
}
|
||||||
|
|
||||||
vk::ImageLayout SHRenderGraphResource::InfoTracker::GetLayout(Handle<SHRenderGraphNode> node, Handle<SHSubpass> subpass) const noexcept
|
vk::ImageLayout SHRenderGraphResource::InfoTracker::GetLayout(Handle<SHRenderGraphNode> node, Handle<SHSubpass> subpass) const noexcept
|
||||||
{
|
{
|
||||||
NodeSubpassPair nodeSubpassPair = std::pair(node, subpass);
|
NodeSubpassPair nodeSubpassPair = std::pair(node, subpass);
|
||||||
|
@ -29,6 +34,14 @@ namespace SHADE
|
||||||
return vk::ImageLayout::eUndefined;
|
return vk::ImageLayout::eUndefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vk::ImageLayout SHRenderGraphResource::InfoTracker::GetLayout(Handle<SHRenderGraphNodeCompute> compute) const noexcept
|
||||||
|
{
|
||||||
|
if (computeTracker.contains (compute.GetId().Raw))
|
||||||
|
return vk::ImageLayout::eGeneral;
|
||||||
|
else
|
||||||
|
return vk::ImageLayout::eUndefined;
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
/*!
|
/*!
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "Resource/SHHandle.h"
|
#include "Resource/SHHandle.h"
|
||||||
#include "Graphics/SHVulkanIncludes.h"
|
#include "Graphics/SHVulkanIncludes.h"
|
||||||
#include "SH_API.h"
|
#include "SH_API.h"
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,7 @@ namespace SHADE
|
||||||
class SHRenderGraphStorage;
|
class SHRenderGraphStorage;
|
||||||
class SHRenderGraphNode;
|
class SHRenderGraphNode;
|
||||||
class SHSubpass;
|
class SHSubpass;
|
||||||
|
class SHRenderGraphNodeCompute;
|
||||||
|
|
||||||
static constexpr uint32_t NON_SWAPCHAIN_RESOURCE_INDEX = 0;
|
static constexpr uint32_t NON_SWAPCHAIN_RESOURCE_INDEX = 0;
|
||||||
|
|
||||||
|
@ -33,16 +35,21 @@ namespace SHADE
|
||||||
//! key here is the render graph node and subpass name combined, value is the layout of the resource at that node and subpass
|
//! key here is the render graph node and subpass name combined, value is the layout of the resource at that node and subpass
|
||||||
std::unordered_map<std::size_t, vk::ImageLayout> layoutTracker;
|
std::unordered_map<std::size_t, vk::ImageLayout> layoutTracker;
|
||||||
|
|
||||||
|
//! if a resource is involved in a compute process, record it here
|
||||||
|
std::unordered_set<uint64_t> computeTracker;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* PUBLIC MEMBER FUNCTIONS */
|
/* PUBLIC MEMBER FUNCTIONS */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
void TrackLayout (Handle<SHRenderGraphNode> node, Handle<SHSubpass> subpass, vk::ImageLayout layout) noexcept;
|
void TrackLayout (Handle<SHRenderGraphNode> node, Handle<SHSubpass> subpass, vk::ImageLayout layout) noexcept;
|
||||||
|
void TrackLayout (Handle<SHRenderGraphNodeCompute> compute) noexcept;
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* SETTERS AND GETTERS */
|
/* SETTERS AND GETTERS */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
vk::ImageLayout GetLayout (Handle<SHRenderGraphNode> node, Handle<SHSubpass> subpass) const noexcept;
|
vk::ImageLayout GetLayout(Handle<SHRenderGraphNode> node, Handle<SHSubpass> subpass) const noexcept;
|
||||||
|
vk::ImageLayout GetLayout(Handle<SHRenderGraphNodeCompute> compute) const noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in New Issue