I’m adding a float array type as shown hereafter, but accessing an element in the vector results with compiling error: "subscripted value is not an array, matrix, or vector ".
This happens when doing so in PathTracing.usf shader as shown here after, but doing the same in SSDSignalFramework.ush (for example) works fine.
File: PathTracing.cpp
BEGIN_SHADER_PARAMETER_STRUCT(FPathTracingData, )
SHADER_PARAMETER(uint32, Iteration)
:
SHADER_PARAMETER_ARRAY(float, testv, [5]) // <-------- here
END_SHADER_PARAMETER_STRUCT()
File: PathTracing.usf
uint Iteration;
:
float testv[5]; // <-------- here
:
RAY_TRACING_ENTRY_RAYGEN(PathTracingMainRG)
{
uint2 DispatchIdx = DispatchRaysIndex().xy;
uint2 DispatchDim = DispatchRaysDimensions().xy;
:
float PathRoughness = 0 + testv[0]; // <-------- just testing here
:
}
The compiling fails due to:
error: subscripted value is not an array, matrix, or vector
float PathRoughness = 0 + testv[0];
~~~~~^~
If I do the same for SSDSignalFramework.ush , it works well:
File: ScreenSpaceDenoise.cpp
BEGIN_SHADER_PARAMETER_STRUCT(FSSDConvolutionMetaData, )
SHADER_PARAMETER_ARRAY(FVector4, LightPositionAndRadius, [IScreenSpaceDenoiser::kMaxBatchSize])
:
SHADER_PARAMETER_ARRAY(float, testv, [5]) // <-------- here
END_SHADER_PARAMETER_STRUCT()
File: SSDSignalFramework.ush
float4 LightPositionAndRadius[MAX_SIGNAL_BATCH_SIZE];
:
float testv[5]; // <-------- here
:
FSSDSignalDomainKnowledge GetSignalDomainKnowledge(uint BatchedSignalId)
{
FSSDSignalDomainKnowledge SignalDomain;
SignalDomain.Light.InvRadius = 0;
:
SignalDomain.HitDistanceToWorldBluringRadius=
HitDistanceToWorldBluringRadius[BatchedSignalId] +
testv[0]; // <- just testing here
:
}