@@ -69,12 +69,9 @@ struct CascadeAccumulator
6969 // most of this code is stolen from https://cg.ivd.kit.edu/publications/2018/rwmc/tool/split.cpp
7070 void addSample (uint32_t sampleCount, input_sample_type _sample)
7171 {
72- const float32_t2 unpackedParams = hlsl::unpackHalf2x16 (splattingParameters.packedLog2);
73- const cascade_layer_scalar_type log2Start = unpackedParams[0 ];
74- const cascade_layer_scalar_type log2Base = unpackedParams[1 ];
7572 const cascade_layer_scalar_type luma = getLuma (_sample);
7673 const cascade_layer_scalar_type log2Luma = log2<cascade_layer_scalar_type>(luma);
77- const cascade_layer_scalar_type cascade = log2Luma * 1.f / log2Base - log2Start / log2Base ;
74+ const cascade_layer_scalar_type cascade = log2Luma * splattingParameters.rcpLog2Base - splattingParameters.baseRootOfStart ;
7875 const cascade_layer_scalar_type clampedCascade = clamp (cascade, 0 , CascadeCount - 1 );
7976 // c<=0 -> 0, c>=Count-1 -> Count-1
8077 uint32_t lowerCascadeIndex = floor<cascade_layer_scalar_type>(cascade);
@@ -85,7 +82,11 @@ struct CascadeAccumulator
8582
8683 // handle super bright sample case
8784 if (cascade > CascadeCount - 1 )
85+ {
86+ const cascade_layer_scalar_type log2Base = cascade_layer_scalar_type (1.0 ) / splattingParameters.rcpLog2Base;
87+ const cascade_layer_scalar_type log2Start = splattingParameters.baseRootOfStart * log2Base;
8888 lowerCascadeWeight = exp2 (log2Start + log2Base * (CascadeCount - 1 ) - log2Luma);
89+ }
8990
9091 accumulation.addSampleIntoCascadeEntry (_sample, lowerCascadeIndex, lowerCascadeWeight, higherCascadeWeight, sampleCount);
9192 }
0 commit comments