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.
This commit is contained in:
parent
d17a83ab77
commit
71619d0159
|
@ -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)
|
||||||
resource->HandleResize(newWidth, newHeight);
|
{
|
||||||
|
if (!renderGraphStorage->nonOwningResourceInitialLayouts.contains (resource.GetId().Raw))
|
||||||
|
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