protected override void BuildConstantDefinitions()
{
constantDefs.FloatBufferSize = floatLogicalToPhysical.BufferSize;
constantDefs.IntBufferSize = intLogicalToPhysical.BufferSize;
foreach ( var iter in parametersMap )
{
var paramName = iter.Key;
var def = iter.Value;
constantDefs.Map.Add( iter.Key, iter.Value );
// Record logical / physical mapping
if ( def.IsFloat )
{
lock (floatLogicalToPhysical.Mutex)
{
if (!floatLogicalToPhysical.Map.ContainsKey(def.LogicalIndex))
floatLogicalToPhysical.Map.Add( def.LogicalIndex,
new GpuProgramParameters.GpuLogicalIndexUse(
def.PhysicalIndex,
def.ArraySize*def.ElementSize,
GpuProgramParameters.GpuParamVariability.Global ) );
floatLogicalToPhysical.BufferSize += def.ArraySize*def.ElementSize;
}
}
else
{
lock (intLogicalToPhysical.Mutex)
{
if (!intLogicalToPhysical.Map.ContainsKey(def.LogicalIndex))
intLogicalToPhysical.Map.Add( def.LogicalIndex,
new GpuProgramParameters.GpuLogicalIndexUse(
def.PhysicalIndex,
def.ArraySize*def.ElementSize,
GpuProgramParameters.GpuParamVariability.Global ) );
intLogicalToPhysical.BufferSize += def.ArraySize*def.ElementSize;
}
}
// Deal with array indexing
constantDefs.GenerateConstantDefinitionArrayEntries( paramName, def );
}
}