Axiom.RenderSystems.DirectX9.HLSL.HLSLProgram.PopulateDef C# (CSharp) Method

PopulateDef() private method

private PopulateDef ( ConstantDescription d3DDesc, GpuProgramParameters def ) : void
d3DDesc ConstantDescription
def Axiom.Graphics.GpuProgramParameters
return void
        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);

	    }