123 ViewFlags
viewFlags{ViewFlagsBits::EnableRasterRTShadows};
125 CullFlags
cullFlags{CullFlagsBits::Frustum | CullFlagsBits::Occlusion | CullFlagsBits::Backface};
150 using MipmapMode = SamplerDesc::Mipmap::MipmapMode;
153 .mipmap = {.mipmapMode = cfg.
textureTrilinear ? MipmapMode::Linear : MipmapMode::Nearest},
154 .lod = {.max = 16.0f},
190template <
typename FSetup,
typename FRecord>
192 FSetup&& setup, FRecord&& record)
201 name, RHIDeviceQueueType::Compute, 100u,
202 [resources, preTransition, setup = std::forward<FSetup>(setup)](
PassHandle self,
Renderer* r)
mutable
204 r->BindPass(self, preTransition);
205 r->BindDescriptorSetWrite(self,
"gStorageTextures2D",
213 record(self, r, cmd);
216 Format(
"{} Post-Transition", name), RHIDeviceQueueType::Graphics, 100u,
219 r->BindPass(self, update);
227template <
typename FSetup,
typename FRecord>
229 FSetup&& setup, FRecord&& record)
238 name, RHIDeviceQueueType::Compute, 100u,
239 [resources, preTransition, setup = std::forward<FSetup>(setup)](
PassHandle self,
Renderer* r)
mutable
241 r->BindPass(self, preTransition);
242 r->BindDescriptorSetWrite(self,
"gStorageTextures3D",
250 record(self, r, cmd);
253 Format(
"{} Post-Transition", name), RHIDeviceQueueType::Graphics, 100u,
256 r->BindPass(self, update);
264template <
typename FSetup,
typename FRecord>
281 name, RHIDeviceQueueType::Graphics, 100u,
282 [resources, targetResource, targetView, setup = std::forward<FSetup>(setup)](
PassHandle self,
290 { record(self, r, cmd); });
292 Format(
"{} Post-Transition", name), RHIDeviceQueueType::Graphics, 100u,
297 self, targetResource,
298 RHIPipelineStageBits::AllGraphics | RHIPipelineStageBits::ComputeShader |
299 RHIPipelineStageBits::RayTracingShader,
#define CHECK(expr)
Definition Logging.hpp:92
void BuildGPUSceneHostUpdatePass(Renderer *renderer, RendererResources &resources)
Definition Renderer.cpp:40
PassHandle BuildGPUSceneTextures3DUpdatePass(Renderer *renderer, StringView name, RendererResources const &resources, FSetup &&setup, FRecord &&record)
Definition Renderer.hpp:228
void UpdateRendererCameraUBO(RendererUBO &ubo, uint32_t frameNumber, float4x4 const &view, float4x4 const &proj)
Definition Renderer.hpp:105
PassHandle BuildGPUSceneRenderToTexturePass(Renderer *renderer, StringView name, RendererResources const &resources, TextureHandle target, FSetup &&setup, FRecord &&record)
Definition Renderer.hpp:265
PassHandle BuildGPUSceneTextures2DUpdatePass(Renderer *renderer, StringView name, RendererResources const &resources, FSetup &&setup, FRecord &&record)
Definition Renderer.hpp:191
void BuildGPUSceneAccelerationStructureUpdatePass(Renderer *renderer, RendererResources &resources)
Definition Renderer.cpp:67
RHIDeviceSampler::SamplerDesc MakeTextureSamplerDesc(RendererConfig const &cfg)
Definition Renderer.hpp:147
RendererResources CreateGPUSceneRendererResources(Renderer *renderer, GPUScene *scene)
Definition Renderer.cpp:3
void BuildGPUSceneLightBVHRefitPasses(Renderer *renderer, RendererResources &resources, ResourceHandle ubo)
Definition Renderer.cpp:88
Definition Resource.hpp:57
Definition Command.hpp:42
Definition Resource.hpp:216
const RHITextureDesc mDesc
Definition Resource.hpp:221
Definition Bindless.hpp:10
RHIDeviceDescriptorSet * GetStorageDescriptorSet() const
Definition Bindless.hpp:93
RHIDeviceDescriptorSetLayout * GetDescriptorSetLayout() const
Definition Bindless.hpp:90
RHIDeviceDescriptorSetLayout * GetStorageDescriptorSetLayout() const
Definition Bindless.hpp:92
Renderer implementing a Frame Graph system with automatic resource tracking and synchronization.
Definition Renderer.hpp:377
PassHandle CreatePass(StringView name, RHIDeviceQueueType queue, size_t priority, FSetup &&setup, FRecord &&record)
Create a render pass from a Setup(Renderer*, PassHandle) and Record(Renderer*, PassHandle,...
Definition Renderer.hpp:680
void BindTextureRTV(PassHandle pass, ResourceHandle texture, RHITextureViewDesc const &desc, RHIPipelineState::PipelineStateDesc::Attachment::Blending const &blending={}) const
Binds a texture as a Render Target View (color attachment) for a graphics pass.
Definition Renderer.cpp:388
void BindTextureShaderRead(PassHandle pass, ResourceHandle texture, RHIPipelineStage stage, RHITextureSubresourceRange const &range) const
Declares a shader read dependency for a texture without creating an internal binding.
Definition Renderer.cpp:378
void BindDescriptorSetWrite(PassHandle pass, StringView bind_point, RHIDeviceDescriptorSetLayout *layout, RHIDeviceDescriptorSetLayout *reading_layout=nullptr)
Binds an externally managed descriptor set that this pass writes.
Definition Renderer.cpp:310
void MakePassUncullable(PassHandle pass) const
Marks a pass as "uncullable", meaning it will always be executed even if it has no dependencies.
Definition Renderer.cpp:138
void BindPass(PassHandle pass, PassHandle other)
Declares an inter-pass dependency, where the other pass should execute-before the current pass.
Definition Renderer.cpp:160
ResourceHandle CreateResource(StringView name, T const &desc)
Create a new resource to be used in the render graph.
Definition Renderer.hpp:705
Definition GPUScene.hpp:187
void EndDynamicTextureGPU(RHICommandList *cmd, bool is3D, DynamicTextureGPUAccess access)
Definition GPUScene.cpp:3517
void BeginDynamicTextureGPU(RHICommandList *cmd, bool is3D, DynamicTextureGPUAccess access)
Definition GPUScene.cpp:3513
void CompleteDynamicTextureGPU(TextureHandle handle, DynamicTextureGPUAccess access)
Definition GPUScene.cpp:3525
RHITexture * ResolveDynamicTextureGPU(TextureHandle handle, RHITextureUsage requiredUsage) const
Definition GPUScene.cpp:3521
constexpr String Format(fmt::format_string< Args... > format, Args &&... args)
String wrapper for Format().
Definition Container.hpp:126
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:56
Definition Decompose.hpp:4
vec3 float3
Definition Math.hpp:26
vec4 float4
Definition Math.hpp:25
mat4 float4x4
Definition Math.hpp:28
static constexpr Handle kInvalidHandle
Definition Details.hpp:10
RHIResourceFormat
Definition Common.hpp:34
glm::vec< 2, uint32_t > RHIExtent2D
Definition Common.hpp:10
Core functionalities for rendering, including the Frame Graph implementation.
Definition Bindless.cpp:2
Handle ResourceHandle
Definition Renderer.hpp:22
Handle PassHandle
Definition Renderer.hpp:21
Definition Allocator.hpp:6
bool enable
Definition Device.hpp:114
Definition Device.hpp:111
struct Foundation::RHI::RHIDeviceSampler::SamplerDesc::Anisotropy anisotropy
RHIResourceFormat format
Definition Resource.hpp:147
RHITextureDimension dimension
Definition Resource.hpp:144
uint32_t mipLevels
Definition Resource.hpp:149
uint32_t arrayLayers
Definition Resource.hpp:150
static RHITextureSubresourceRange Create(RHITextureAspectFlag aspect=RHITextureAspectFlagBits::Color, uint32_t base_mip_level=0, uint32_t mip_count=1, uint32_t base_array_layer=0, uint32_t layer_count=1)
Helper function to create a Subresource Range with default parameters.
Definition Resource.hpp:191
Definition Resource.hpp:210
RHIResourceFormat format
Definition Resource.hpp:211
Default "no-op" functor for Setup()
Definition Renderer.hpp:240
Definition GPUScene.hpp:40
Definition Renderer.hpp:90
float fbWidth
Definition Renderer.hpp:95
uint32_t ptAccumulatedFrames
Definition Renderer.hpp:94
uint32_t dbgShowOutline
Definition Renderer.hpp:93
uint32_t outlineInstanceId
Definition Renderer.hpp:97
float renderHeight
Definition Renderer.hpp:99
float renderWidth
Definition Renderer.hpp:98
uint32_t viewLutIndex
Definition Renderer.hpp:92
float fbHeight
Definition Renderer.hpp:96
uint32_t dbgViewFlags
Definition Renderer.hpp:100
float camEV
Definition Renderer.hpp:91
Definition Renderer.hpp:122
LightSampler lightSamplerMode
Definition Renderer.hpp:128
uint32_t ptSharcUpdateDownscale
Definition Renderer.hpp:140
bool energyCompensation
Definition Renderer.hpp:132
MaterialFlags materialFlags
Definition Renderer.hpp:124
PTSampler ptSampler
Definition Renderer.hpp:127
RHIExtent2D renderExtent
Definition Renderer.hpp:126
ViewFlags viewFlags
Definition Renderer.hpp:123
bool isRendering
Definition Renderer.hpp:144
float ptSharcRoughnessThreshold
Definition Renderer.hpp:139
uint32_t ptSharcAccumulationFrames
Definition Renderer.hpp:137
uint32_t ptSharcEntries
Definition Renderer.hpp:135
bool textureTrilinear
Definition Renderer.hpp:143
float ptSharcSceneScale
Definition Renderer.hpp:136
bool ptPrimaryLightVisibility
Definition Renderer.hpp:133
uint32_t ptSharcStaleFrames
Definition Renderer.hpp:138
float textureAnisoLevel
Definition Renderer.hpp:142
bool forceTextureLOD0
Definition Renderer.hpp:131
bool textureAnisoEnable
Definition Renderer.hpp:141
bool const * ptRenderPaused
Definition Renderer.hpp:129
bool ptShaderExecutionReordering
Definition Renderer.hpp:130
CullFlags cullFlags
Definition Renderer.hpp:125
bool ptSharc
Definition Renderer.hpp:134
Definition Renderer.hpp:310
ResourceHandle depth
Definition Renderer.hpp:316
RHIExtent2D extent
Definition Renderer.hpp:311
ResourceHandle instanceID
Definition Renderer.hpp:317
ResourceHandle specular
Definition Renderer.hpp:315
ResourceHandle diffuse
Definition Renderer.hpp:314
ResourceHandle debugOutput
Definition Renderer.hpp:318
RHIResourceFormat aovFormat
Definition Renderer.hpp:312
Definition Renderer.hpp:159
RHIBuffer * primitiveBufferRHI
Definition Renderer.hpp:176
bool hasCurveGeometry
Definition Renderer.hpp:180
bool hasDynamicGeometry
Definition Renderer.hpp:178
ResourceHandle materialBuffer
Definition Renderer.hpp:165
ResourceHandle sobolMatricesBuffer
Definition Renderer.hpp:172
ResourceHandle primitiveBuffer
Definition Renderer.hpp:161
ResourceHandle lightBVHNodeIndexBuffer
Definition Renderer.hpp:171
ResourceHandle lightBVHNodeBuffer
Definition Renderer.hpp:168
bool hasDynamicTextures
Definition Renderer.hpp:179
RHIBuffer * dynamicPrimitiveBufferRHI
Definition Renderer.hpp:177
ResourceHandle dynamicStagingBuffer
Definition Renderer.hpp:163
ResourceHandle emissiveClusterBuffer
Definition Renderer.hpp:167
ResourceHandle lightBVHBitmaskBuffer
Definition Renderer.hpp:170
ResourceHandle dynamicPrimitiveBuffer
Definition Renderer.hpp:162
GPUScene * scene
Definition Renderer.hpp:160
ResourceHandle tlas
Definition Renderer.hpp:173
ResourceHandle lightBuffer
Definition Renderer.hpp:166
ResourceHandle instanceBuffer
Definition Renderer.hpp:164
ResourceHandle lightBVHLightIndexBuffer
Definition Renderer.hpp:169
BindlessPool * textures2D
Definition Renderer.hpp:174
BindlessPool * textures3D
Definition Renderer.hpp:175
Definition Renderer.hpp:11
float zNear
Definition Renderer.hpp:16
uint32_t ggxLutEIORavgIndex
Definition Renderer.hpp:44
GSOffsetCount emissiveClusters
Definition Renderer.hpp:57
float aperture
Definition Renderer.hpp:24
float focalDistance
Definition Renderer.hpp:25
uint32_t cameraProjection
Definition Renderer.hpp:29
uint32_t envMapPrefilteredMips
Definition Renderer.hpp:51
uint32_t cameraHistoryFrame
Definition Renderer.hpp:22
uint32_t dbgMaterialFlags
Definition Renderer.hpp:83
uint32_t sharcAccumulationFrames
Definition Renderer.hpp:75
float4 projPlanes
Definition Renderer.hpp:23
uint32_t matcapTextureIndex
Definition Renderer.hpp:54
uint32_t hizLevels
Definition Renderer.hpp:34
uint32_t firstLightBVHBitmask
Definition Renderer.hpp:60
uint32_t ptPrimaryLightVisibility
Definition Renderer.hpp:70
float3 envSHCoeffs[9]
Definition Renderer.hpp:53
uint32_t ptAccumulatedFrames
Definition Renderer.hpp:66
uint32_t hizWidth
Definition Renderer.hpp:35
uint32_t envMapTextureIndex
Definition Renderer.hpp:48
float fbHeight
Definition Renderer.hpp:33
GSOffsetCount lightBVHGlobalIndices
Definition Renderer.hpp:61
uint32_t sharcEnabled
Definition Renderer.hpp:78
uint32_t energyCompensation
Definition Renderer.hpp:64
uint32_t sharcEntries
Definition Renderer.hpp:72
float4x4 view
Definition Renderer.hpp:17
uint32_t ggxLutEIORInvIndex
Definition Renderer.hpp:45
float ptFireflyClamp
Definition Renderer.hpp:68
float adaptiveThreshold
Definition Renderer.hpp:85
float camEV
Definition Renderer.hpp:38
uint32_t sheenLtcIndex
Definition Renderer.hpp:47
GSOffsetCount lightBVHDistantNodes
Definition Renderer.hpp:63
GSOffsetCount instances
Definition Renderer.hpp:13
GSOffsetCount lightBVHLightIndices
Definition Renderer.hpp:59
float4x4 proj
Definition Renderer.hpp:18
float4x4 inverseViewProj
Definition Renderer.hpp:20
uint32_t hizHeight
Definition Renderer.hpp:36
uint32_t sharcStaleFrames
Definition Renderer.hpp:76
uint32_t dbgViewFlags
Definition Renderer.hpp:82
uint32_t sharcUpdateDownscale
Definition Renderer.hpp:79
uint32_t frameNumber
Definition Renderer.hpp:12
float sharcRoughnessThreshold
Definition Renderer.hpp:77
uint32_t ggxLutEIndex
Definition Renderer.hpp:41
float4 camDirection
Definition Renderer.hpp:40
uint32_t apertureBlades
Definition Renderer.hpp:26
float rasterRTShadowBias
Definition Renderer.hpp:86
uint32_t ptSamplesPerPixel
Definition Renderer.hpp:69
uint32_t dbgShowOutline
Definition Renderer.hpp:81
uint32_t ggxLutEavgIndex
Definition Renderer.hpp:42
uint32_t hasEnvMap
Definition Renderer.hpp:52
float4 camPosition
Definition Renderer.hpp:39
uint32_t adaptiveMinSamples
Definition Renderer.hpp:84
float sharcSceneScale
Definition Renderer.hpp:73
float apertureRotation
Definition Renderer.hpp:27
GSOffsetCount materials
Definition Renderer.hpp:14
GSOffsetCount lights
Definition Renderer.hpp:56
uint32_t envMapConditionalCDFIndex
Definition Renderer.hpp:50
float sharcRadianceScale
Definition Renderer.hpp:74
uint32_t ggxLutEIORInvavgIndex
Definition Renderer.hpp:46
float4x4 inverseView
Definition Renderer.hpp:19
float4 sharcPreviousCameraPosition
Definition Renderer.hpp:71
GSOffsetCount lightBVHNodes
Definition Renderer.hpp:58
uint32_t ptMaxBounces
Definition Renderer.hpp:67
float apertureRatio
Definition Renderer.hpp:28
float lodThreshold
Definition Renderer.hpp:15
uint32_t lightBVHValid
Definition Renderer.hpp:62
float fbWidth
Definition Renderer.hpp:32
uint32_t envMapMarginalCDFIndex
Definition Renderer.hpp:49
float4x4 previousViewProj
Definition Renderer.hpp:21
uint32_t ggxLutEIORIndex
Definition Renderer.hpp:43
Definition GPUScene.hpp:54