protected void PopulateDef( ConstantDescription d3DDesc, GpuProgramParameters.GpuConstantDefinition def )
{
def.ArraySize = d3DDesc.Elements;
switch(d3DDesc.Type)
{
case ParameterType.Int:
switch(d3DDesc.Columns)
{
case 1:
def.ConstantType = GpuProgramParameters.GpuConstantType.Int1;
break;
case 2:
def.ConstantType = GpuProgramParameters.GpuConstantType.Int2;
break;
case 3:
def.ConstantType = GpuProgramParameters.GpuConstantType.Int3;
break;
case 4:
def.ConstantType = GpuProgramParameters.GpuConstantType.Int4;
break;
} // columns
break;
case ParameterType.Float:
switch(d3DDesc.Class)
{
case ParameterClass.MatrixColumns:
case ParameterClass.MatrixRows:
{
var firstDim = d3DDesc.RegisterCount / d3DDesc.Elements;
var secondDim = d3DDesc.Class == ParameterClass.MatrixRows ? d3DDesc.Columns : d3DDesc.Rows;
switch(firstDim)
{
case 2:
switch(secondDim)
{
case 2:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_2X2;
def.ElementSize = 8; // HLSL always packs
break;
case 3:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_2X3;
def.ElementSize = 8; // HLSL always packs
break;
case 4:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_2X4;
def.ElementSize = 8;
break;
} // columns
break;
case 3:
switch(secondDim)
{
case 2:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_3X2;
def.ElementSize = 12; // HLSL always packs
break;
case 3:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_3X3;
def.ElementSize = 12; // HLSL always packs
break;
case 4:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_3X4;
def.ElementSize = 12;
break;
} // columns
break;
case 4:
switch(secondDim)
{
case 2:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_4X2;
def.ElementSize = 16; // HLSL always packs
break;
case 3:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_4X3;
def.ElementSize = 16; // HLSL always packs
break;
case 4:
def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_4X4;
def.ElementSize = 16;
break;
} // secondDim
break;
} // firstDim
}
break;
case ParameterClass.Scalar:
case ParameterClass.Vector:
switch(d3DDesc.Columns)
{
case 1:
def.ConstantType = GpuProgramParameters.GpuConstantType.Float1;
break;
case 2:
def.ConstantType = GpuProgramParameters.GpuConstantType.Float2;
break;
case 3:
def.ConstantType = GpuProgramParameters.GpuConstantType.Float3;
break;
case 4:
def.ConstantType = GpuProgramParameters.GpuConstantType.Float4;
break;
} // columns
break;
}
break;
default:
// not mapping samplers, don't need to take the space
break;
};
// D3D9 pads to 4 elements
def.ElementSize = GpuProgramParameters.GpuConstantDefinition.GetElementSize(def.ConstantType, true);
}