Foundation
Loading...
Searching...
No Matches
RenderResource.hpp
Go to the documentation of this file.
1#pragma once
2#include <Bits/Functional.hpp>
3#include <Bits/Ranges.hpp>
5#include "RenderPass.hpp"
7{
8 using namespace RHI;
9 using namespace Core;
10 using namespace Bits;
13 const size_t kTextureAspectCount = 3; // Color, depth, stencil @ref RHITextureAspectFlag
18 {
19 ResourceHandle handle; // Index to tracked resources
22 bool hasComputeUsage{false}; // Used in a compute pass?
23 bool hasGraphicsUsage{false}; // Used in a graphics pass?
24 /* --- states --- */
25 // (Buffer) Last known state
26 // Transitions here are always global since granularity would be too fine. And seems
27 // like drivers don't really care?
28 // See Also: https://www.reddit.com/r/vulkan/comments/v2mswb/global_memory_barriers_vs_bufferimage_memory/
29 // TODO: Investigate
31 {
32 // Last pass to write at Setup time
34 // Last pass to transition at Execute time
36 // Last frame the transition was executed
38 // Last queue this resource is owned by
39 RHIDeviceQueueType lastOwnerQueue{RHIDeviceQueueType::Undefined};
40 // [Only used by @ref ExecuteReleaseQueueResources]
44 void reset()
45 {
47 access = {};
48 stage = {};
49 }
51
52 // (Texture) Per-subresource states
55 {
56 size_t layer{0}, mip{0};
58 /* -- states -- */
59 // Last pass to write at Setup time
61 // Last pass to transition at Execute time
63 // Last frame the transition was executed
65 // Last queue this resource is owned by
66 RHIDeviceQueueType lastOwnerQueue{RHIDeviceQueueType::Undefined};
67 // [Only used by @ref ExecuteReleaseQueueResources]
72 void reset()
73 {
75 access = {};
76 stage = {};
77 layout = {};
78 }
80 };
81 // [mip...,
82 // layer...,
83 // aspect...]
86 {
87 auto [mip_begin, mip_end] = range.GetMipLevelRange();
90 return Views::all(Span<SubresourceState>{
93 }) |
94 Views::filter(
95 [=](const SubresourceState& state)
96 {
97 return (RHITextureAspectFlag(state.aspect) & range.layer.aspect) && state.mip >= mip_begin &&
98 state.mip <= mip_end && state.layer >= layer_begin && state.layer <= layer_end;
99 });
100 }
102 {
103 lastBufferState = {};
104 for (auto& sta : lastSubresourceStates)
105 sta.reset();
106 }
108 Allocator* alloc);
109 };
128}
General Purpose Allocator (GPA) interface.
Definition Allocator.hpp:24
Definition Resource.hpp:30
Definition Resource.hpp:146
std::basic_string< char > String
Alias for std::basic_string<char>, without an explicit allocator constructor.
Definition Container.hpp:141
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:53
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161
RHITextureLayout
Definition Common.hpp:99
static constexpr Handle kInvalidHandle
Definition Details.hpp:10
RHIDeviceQueueType
Definition Common.hpp:69
Core functionalities for rendering, including the Frame Graph implementation.
Definition Renderer.hpp:12
size_t ResourceHandle
Definition RenderPass.hpp:12
size_t PassHandle
Definition RenderPass.hpp:11
const size_t kTextureAspectCount
Definition RenderResource.hpp:13
RHITextureAspectFlag aspect
Definition Resource.hpp:95
RHITextureSubresourceLayer layer
Definition Resource.hpp:102
Pair< uint32_t, uint32_t > GetMipLevelRange() const
Definition Resource.hpp:106
Pair< uint32_t, uint32_t > GetArrayLayerRange() const
Definition Resource.hpp:110
Helper class containing runtime resources either imported, or created by the Renderer.
Definition RenderResource.hpp:114
Vector< Variant< RHIBuffer *, RHIDeviceObjectHandle< RHIBuffer >, RHIDeviceScopedObjectHandle< RHIBuffer >, RHITexture *, RHIDeviceObjectHandle< RHITexture >, RHIDeviceScopedObjectHandle< RHITexture > > > resources
Definition RenderResource.hpp:117
Vector< Variant< RHITextureScopedHandle< RHITextureView >, RHITextureHandle< RHITextureView > > > views
Definition RenderResource.hpp:118
ExecuteResources(Allocator *allocator)
Definition RenderResource.hpp:120
Vector< RHIDeviceScopedObjectHandle< RHIDeviceSampler > > samplers
Definition RenderResource.hpp:119
void fit(ResourceHandle handle)
Definition RenderResource.hpp:121
RHIPipelineStage stage
Definition RenderResource.hpp:43
size_t lastProducedFrame
Definition RenderResource.hpp:37
PassHandle lastProducer
Definition RenderResource.hpp:35
RHIResourceAccess access
Definition RenderResource.hpp:42
bool executeTempTransitionFlag
Definition RenderResource.hpp:41
RHIDeviceQueueType lastOwnerQueue
Definition RenderResource.hpp:39
PassHandle producer
Definition RenderResource.hpp:33
void reset()
Definition RenderResource.hpp:44
RHIResourceAccess access
Definition RenderResource.hpp:69
RHIDeviceQueueType lastOwnerQueue
Definition RenderResource.hpp:66
void reset()
Definition RenderResource.hpp:72
bool executeTempTransitionFlag
Definition RenderResource.hpp:68
RHIPipelineStage stage
Definition RenderResource.hpp:70
RHITextureAspectFlagBits aspect
Definition RenderResource.hpp:57
RHITextureLayout layout
Definition RenderResource.hpp:71
PassHandle producer
Definition RenderResource.hpp:60
size_t lastProducedFrame
Definition RenderResource.hpp:64
PassHandle lastProducer
Definition RenderResource.hpp:62
RHITextureSubresourceRange ToRange() const
Definition RenderResource.cpp:4
size_t mip
Definition RenderResource.hpp:56
size_t layer
Definition RenderResource.hpp:56
Internal tracking information for a resource in the frame graph.
Definition RenderResource.hpp:18
Vector< SubresourceState > lastSubresourceStates
Definition RenderResource.hpp:84
auto GetLastSubresourceStateOf(RHITextureSubresourceRange const &range)
Definition RenderResource.hpp:85
bool hasGraphicsUsage
Definition RenderResource.hpp:23
String name
Definition RenderResource.hpp:20
void ResetStates()
Definition RenderResource.hpp:101
ResourceDefinition desc
Definition RenderResource.hpp:21
uint32_t textureMips
Definition RenderResource.hpp:53
uint32_t textureLayers
Definition RenderResource.hpp:53
bool hasComputeUsage
Definition RenderResource.hpp:22
struct Foundation::RenderCore::TrackedResource::BufferState lastBufferState
ResourceHandle handle
Definition RenderResource.hpp:19