Skip to content

Commit 6168e14

Browse files
committed
Fixed cascade settings initialization
1 parent 04296d9 commit 6168e14

File tree

5 files changed

+20
-13
lines changed

5 files changed

+20
-13
lines changed

31_HLSLPathTracer/app_resources/hlsl/RWMCCascadeAccumulator.hlsl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ template<typename CascadeLayerType, uint32_t CascadeSize>
2828
struct RWMCCascadeAccumulator
2929
{
3030
using output_storage_type = CascadeEntry<CascadeLayerType, CascadeSize>;
31+
using initialization_data = RWMCCascadeSettings;
3132
output_storage_type accumulation;
3233
uint32_t cascadeSampleCounter[CascadeSize];
3334
RWMCCascadeSettings cascadeSettings;
3435

35-
void initialize()
36+
void initialize(in RWMCCascadeSettings settings)
3637
{
3738
for (int i = 0; i < CascadeSize; ++i)
3839
{
@@ -41,9 +42,9 @@ struct RWMCCascadeAccumulator
4142
}
4243

4344
// TODO: pass these values to this function
44-
cascadeSettings.size = 6;
45-
cascadeSettings.start = 1.0f;
46-
cascadeSettings.base = 1.0f;
45+
cascadeSettings.size = settings.size;
46+
cascadeSettings.start = settings.start;
47+
cascadeSettings.base = settings.base;
4748
}
4849

4950
typename vector_traits<CascadeLayerType>::scalar_type getLuma(NBL_CONST_REF_ARG(CascadeLayerType) col)

31_HLSLPathTracer/app_resources/hlsl/pathtracer.hlsl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ struct PathTracerCreationParams
4545
template<typename OutputTypeVec>
4646
struct DefaultAccumulator
4747
{
48+
struct DefaultAccumulatorInitializationSettings {};
49+
4850
using output_storage_type = OutputTypeVec;
51+
using initialization_data = DefaultAccumulatorInitializationSettings;
4952
output_storage_type accumulation;
5053

51-
void initialize()
54+
void initialize(in initialization_data initializationData)
5255
{
5356
accumulation = (output_storage_type)0.0f;
5457
}
@@ -288,10 +291,10 @@ struct Unidirectional
288291
}
289292

290293
// Li
291-
output_storage_type getMeasure(uint32_t numSamples, uint32_t depth, NBL_CONST_REF_ARG(scene_type) scene)
294+
output_storage_type getMeasure(uint32_t numSamples, uint32_t depth, NBL_CONST_REF_ARG(scene_type) scene, NBL_REF_ARG(typename Accumulator::initialization_data) accumulatorInitData)
292295
{
293296
Accumulator accumulator;
294-
accumulator.initialize();
297+
accumulator.initialize(accumulatorInitData);
295298
//scalar_type meanLumaSq = 0.0;
296299
for (uint32_t i = 0; i < numSamples; i++)
297300
{

31_HLSLPathTracer/app_resources/hlsl/render.comp.hlsl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,7 @@ using material_system_type = ext::MaterialSystem::System<diffuse_bxdf_type, cond
124124
using nee_type = ext::NextEventEstimator::Estimator<scene_type, ray_type, sample_t, aniso_interaction, ext::IntersectMode::IM_PROCEDURAL, LIGHT_TYPE, POLYGON_METHOD>;
125125

126126
#ifdef RWMC_ENABLED
127-
// TODO: get cascade size from a shared include file
128-
using accumulator_type = rwmc::RWMCCascadeAccumulator<float32_t3, 6u>;
127+
using accumulator_type = rwmc::RWMCCascadeAccumulator<float32_t3, CascadeSize>;
129128
#else
130129
using accumulator_type = ext::PathTracer::DefaultAccumulator<float32_t3>;
131130
#endif
@@ -252,14 +251,19 @@ void main(uint32_t3 threadID : SV_DispatchThreadID)
252251
pathtracer_type pathtracer = pathtracer_type::create(ptCreateParams);
253252

254253
#ifdef RWMC_ENABLED
255-
accumulator_type::output_storage_type cascadeEntry = pathtracer.getMeasure(pc.sampleCount, pc.depth, scene);
254+
accumulator_type::initialization_data accumulatorInitData;
255+
accumulatorInitData.size = CascadeSize;
256+
accumulatorInitData.start = pc.start;
257+
accumulatorInitData.base = pc.base;
258+
accumulator_type::output_storage_type cascadeEntry = pathtracer.getMeasure(pc.sampleCount, pc.depth, scene, accumulatorInitData);
256259
for (uint32_t i = 0; i < CascadeSize; ++i)
257260
{
258261
float32_t4 cascadeLayerEntry = float32_t4(cascadeEntry.data[i], 1.0f);
259262
cascade[uint3(coords.x, coords.y, i)] = cascadeLayerEntry;
260263
}
261264
#else
262-
float32_t3 color = pathtracer.getMeasure(pc.sampleCount, pc.depth, scene);
265+
accumulator_type::initialization_data accumulatorInitData;
266+
float32_t3 color = pathtracer.getMeasure(pc.sampleCount, pc.depth, scene, accumulatorInitData);
263267
outImage[coords] = float32_t4(color, 1.0);
264268
#endif
265269

31_HLSLPathTracer/app_resources/hlsl/render_rwmc_common.hlsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ struct RenderRWMCPushConstants
1717
int depth;
1818
float start;
1919
float base;
20-
float minReliableLuma;
2120
float kappa;
2221
};
2322

31_HLSLPathTracer/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1523,7 +1523,7 @@ class HLSLComputePathtracer final : public examples::SimpleWindowedApplication,
15231523
rwmcPushConstants.depth = depth;
15241524
rwmcPushConstants.sampleCount = resolvePushConstants.sampleCount = spp;
15251525
rwmcPushConstants.base = resolvePushConstants.base = rwmcCascadeBase;
1526-
rwmcPushConstants.minReliableLuma = resolvePushConstants.minReliableLuma = rwmcMinReliableLuma;
1526+
resolvePushConstants.minReliableLuma = rwmcMinReliableLuma;
15271527
rwmcPushConstants.kappa = resolvePushConstants.kappa = rwmcKappa;
15281528

15291529
// safe to proceed

0 commit comments

Comments
 (0)