Skip to content

Commit 9e4a16c

Browse files
committed
minor changes to rwmc usage
1 parent 94a778f commit 9e4a16c

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

include/nbl/builtin/hlsl/rwmc/CascadeAccumulator.hlsl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

include/nbl/builtin/hlsl/rwmc/SplattingParameters.hlsl

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define _NBL_BUILTIN_HLSL_RWMC_SPLATTING_PARAMETERS_HLSL_INCLUDED_
33

44
#include "nbl/builtin/hlsl/cpp_compat.hlsl"
5+
#include "nbl/builtin/hlsl/tgmath.hlsl"
56

67
namespace nbl
78
{
@@ -12,10 +13,18 @@ namespace rwmc
1213

1314
struct SplattingParameters
1415
{
15-
// float16_t log2Start; 0
16-
// float16_t log2Base; 1
17-
// pack as Half2x16
18-
int32_t packedLog2;
16+
using scalar_t = float;
17+
18+
static SplattingParameters create(const scalar_t base, const scalar_t start)
19+
{
20+
SplattingParameters retval;
21+
retval.rcpLog2Base = scalar_t(1.0) / hlsl::log2(base);
22+
retval.baseRootOfStart = hlsl::log2(start) * retval.rcpLog2Base;
23+
return retval;
24+
}
25+
26+
scalar_t baseRootOfStart;
27+
scalar_t rcpLog2Base;
1928
};
2029

2130
}

0 commit comments

Comments
 (0)