dx12) Shader Constants goes wrong

As per the packing rules for arrays in constant buffers :

cbuffer ShadowCB : register(b5)
{
    float gZSplits[3] : packoffset(c0);
}

Is not 3 floats (size 12 bytes), so the representation is not

cbuffer ShadowCB : register(b5)
{
    float gZSplits0;
    float gZSplits1;
    float gZSplits2;
};

It is actually expanded to:

cbuffer ShadowCB : register(b5)
{
    float gZSplits0;
    float3 pad0;
    float gZSplits1;
    float3 pad0;
    float gZSplits2;
};

So you need to make sure that your cpu side buffer is actually matching that layout.

You can double check that ShadowCB size is indeed 36 bytes by checking disassembly.