Beispiel #1
0
        static IrShaderVariableType GetShaderVariableType(ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.Void:
                return(IrShaderVariableType.Void);

            case ShaderVariableType.Bool:
                return(IrShaderVariableType.I1);

            case ShaderVariableType.Int:
                return(IrShaderVariableType.I32);

            case ShaderVariableType.Float:
                return(IrShaderVariableType.F32);

            case ShaderVariableType.Double:
                return(IrShaderVariableType.F64);

            case ShaderVariableType.UInt:
                return(IrShaderVariableType.U32);

            case ShaderVariableType.InterfacePointer:
                return(IrShaderVariableType.InterfacePointer);

            default:
                throw new ArgumentException($"Unexpected shader variable type {type}");
            }
        }
        string GetConstructorForType(ShaderVariableType type, int components)
        {
            string[] uintTypes   = new string[] { " ", "uint", "uint2", "uint3", "uint4" };
            string[] intTypes    = new string[] { " ", "int", "int2", "int3", "int4" };
            string[] floatTypes  = new string[] { " ", "float", "float2", "float3", "float4" };
            string[] doubleTypes = new string[] { " ", "double", "double2", "double3", "double4" };
            if (components < 1 || components > 4)
            {
                return("ERROR TOO MANY COMPONENTS IN VECTOR");
            }
            switch (type)
            {
            case ShaderVariableType.UInt:
                return(uintTypes[components]);

            case ShaderVariableType.Int:
                return(intTypes[components]);

            case ShaderVariableType.Float:
                return(floatTypes[components]);

            case ShaderVariableType.Double:
                return(doubleTypes[components]);

            default:
                return($"ERROR UNSUPPORTED TYPE {type}");
            }
        }
Beispiel #3
0
 /// <summary>
 /// Create new shader variable
 /// </summary>
 /// <param name="name">Name of variable</param>
 /// <param name="type">Data type of variable</param>
 /// <param name="elements">Number of array elements if applicable</param>
 /// <param name="offset">Offset in bytes</param>
 public ShaderVariableMapping(string name, ShaderVariableType type, int elements, int offset)
 {
     this.name     = name;
     this.type     = type;
     this.elements = elements;
     this.offset   = offset;
 }
Beispiel #4
0
        private static int GetSortingKey(string name, ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.Bool:
            case ShaderVariableType.Int:
                return(ShaderParams.GetSortingKey(name, typeof(int)));

            case ShaderVariableType.BoolVector2:
            case ShaderVariableType.IntVector2:
                return(ShaderParams.GetSortingKey(name, typeof(IntVector2)));

            case ShaderVariableType.Float:
                return(ShaderParams.GetSortingKey(name, typeof(float)));

            case ShaderVariableType.FloatVector2:
                return(ShaderParams.GetSortingKey(name, typeof(Vector2)));

            case ShaderVariableType.FloatVector3:
                return(ShaderParams.GetSortingKey(name, typeof(Vector3)));

            case ShaderVariableType.FloatVector4:
                return(ShaderParams.GetSortingKey(name, typeof(Vector4)));

            case ShaderVariableType.FloatMatrix4:
                return(ShaderParams.GetSortingKey(name, typeof(Matrix44)));

            default:
                throw new NotSupportedException($"name: {name}, type: {type.ToString()}");
            }
        }
Beispiel #5
0
        public static int GetRowCount(this ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.BoolVector2:
            case ShaderVariableType.IntVector2:
            case ShaderVariableType.FloatVector2:
            case ShaderVariableType.FloatMatrix2:
                return(2);

            case ShaderVariableType.BoolVector3:
            case ShaderVariableType.IntVector3:
            case ShaderVariableType.FloatVector3:
            case ShaderVariableType.FloatMatrix3:
                return(3);

            case ShaderVariableType.BoolVector4:
            case ShaderVariableType.IntVector4:
            case ShaderVariableType.FloatVector4:
            case ShaderVariableType.FloatMatrix4:
                return(4);

            default:
                return(1);
            }
        }
 public ShaderType(MatrixParameter matrixParam, ShaderGpuProgramType programType)
 {
     ShaderVariableClass = ShaderVariableClass.MatrixColumns; //TODO: matrix colums or rows?
     ShaderVariableType = GetVariableType(matrixParam.Type);
     Rows = matrixParam.RowCount;
     Columns = matrixParam.RowCount;
     ElementCount = 0;
     MemberCount = 0;
     MemberOffset = 0;
     this.programType = programType;
 }
Beispiel #7
0
 public ShaderType(MatrixParameter matrixParam, ShaderGpuProgramType programType)
 {
     ShaderVariableClass = ShaderVariableClass.MatrixColumns;
     ShaderVariableType  = GetVariableType(matrixParam.Type);
     Rows             = matrixParam.RowCount;
     Columns          = matrixParam.ColumnCount;
     ElementCount     = (ushort)matrixParam.ArraySize;
     MemberCount      = 0;
     MemberOffset     = 0;
     this.programType = programType;
 }
 public ShaderType(VectorParameter vectorParam, ShaderGpuProgramType programType)
 {
     ShaderVariableClass = vectorParam.Dim > 1 ?
         ShaderVariableClass.Vector :
         ShaderVariableClass.Scalar;
     ShaderVariableType = GetVariableType(vectorParam.Type);
     Rows = 1;
     Columns = vectorParam.Dim;
     ElementCount = 0;
     MemberCount = 0;
     MemberOffset = 0;
     this.programType = programType;
 }
Beispiel #9
0
        public static bool IsSampler(this ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.Sampler2D:
            case ShaderVariableType.SamplerCube:
            case ShaderVariableType.SamplerExternal:
                return(true);

            default:
                return(false);
            }
        }
Beispiel #10
0
        public static int VariableTypeToDstStride(ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.Float: return(sizeof(float) * 1);

            case ShaderVariableType.Float2: return(sizeof(float) * 2);

            case ShaderVariableType.Float3: return(sizeof(float) * 4);                   // padded

            case ShaderVariableType.Float4: return(sizeof(float) * 4);

            case ShaderVariableType.Float2x2: return(sizeof(float) * 2 * 2);

            case ShaderVariableType.Float2x3: return(sizeof(float) * 2 * 4);                   // padded

            case ShaderVariableType.Float2x4: return(sizeof(float) * 2 * 4);

            case ShaderVariableType.Float3x2: return(sizeof(float) * 3 * 2);

            case ShaderVariableType.Float3x3: return(sizeof(float) * 3 * 4);                   // padded

            case ShaderVariableType.Float3x4: return(sizeof(float) * 3 * 4);

            case ShaderVariableType.Float4x2: return(sizeof(float) * 4 * 2);

            case ShaderVariableType.Float4x3: return(sizeof(float) * 4 * 3);

            case ShaderVariableType.Float4x4: return(sizeof(float) * 4 * 4);

            case ShaderVariableType.Int: return(sizeof(int) * 1);

            case ShaderVariableType.Int2: return(sizeof(int) * 2);

            case ShaderVariableType.Int3: return(sizeof(int) * 4);                   // padded

            case ShaderVariableType.Int4: return(sizeof(int) * 4);

            case ShaderVariableType.UInt: return(sizeof(uint) * 1);

            case ShaderVariableType.UInt2: return(sizeof(uint) * 2);

            case ShaderVariableType.UInt3: return(sizeof(uint) * 4);                   // padded

            case ShaderVariableType.UInt4: return(sizeof(uint) * 4);
            }
            throw new NotImplementedException();
        }
Beispiel #11
0
        public static int VariableTypeToSrcDWORDCount(ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.Float: return(1);

            case ShaderVariableType.Float2: return(2);

            case ShaderVariableType.Float3: return(3);

            case ShaderVariableType.Float4: return(4);

            case ShaderVariableType.Float2x2: return(2 * 2);

            case ShaderVariableType.Float2x3: return(2 * 3);

            case ShaderVariableType.Float2x4: return(2 * 4);

            case ShaderVariableType.Float3x2: return(3 * 2);

            case ShaderVariableType.Float3x3: return(3 * 3);

            case ShaderVariableType.Float3x4: return(3 * 4);

            case ShaderVariableType.Float4x2: return(4 * 2);

            case ShaderVariableType.Float4x3: return(4 * 3);

            case ShaderVariableType.Float4x4: return(4 * 4);

            case ShaderVariableType.Int: return(1);

            case ShaderVariableType.Int2: return(2);

            case ShaderVariableType.Int3: return(3);

            case ShaderVariableType.Int4: return(4);

            case ShaderVariableType.UInt: return(1);

            case ShaderVariableType.UInt2: return(2);

            case ShaderVariableType.UInt3: return(3);

            case ShaderVariableType.UInt4: return(4);
            }
            throw new NotImplementedException();
        }
Beispiel #12
0
 public ShaderType(StructParameter structParameter, ShaderGpuProgramType programType)
 {
     members.AddRange(structParameter.VectorMembers.Select(p => new ShaderTypeMember(p, programType)));
     members.AddRange(structParameter.MatrixMembers.Select(p => new ShaderTypeMember(p, programType)));
     members = members
               .OrderBy(v => v.Index)
               .ToList();
     ShaderVariableClass = ShaderVariableClass.Struct;             //TODO: matrix colums or rows?
     ShaderVariableType  = ShaderVariableType.Void;
     Rows             = 0;
     Columns          = 0;
     ElementCount     = 0;
     MemberCount      = (ushort)members.Count();
     MemberOffset     = 0;
     this.programType = programType;
 }
Beispiel #13
0
        public static int GetColumnCount(this ShaderVariableType type)
        {
            switch (type)
            {
            case ShaderVariableType.FloatMatrix2:
                return(2);

            case ShaderVariableType.FloatMatrix3:
                return(3);

            case ShaderVariableType.FloatMatrix4:
                return(4);

            default:
                return(1);
            }
        }
Beispiel #14
0
 static ParameterDescription ParamDesc(string name, string semanticName, ShaderVariableType type, ShaderVariableClass @class,
                                       int rows, int columns, SharpDX.Direct3D.InterpolationMode interpolationMode,
                                       ParameterFlags flags, int firstInRegister, int firstInComponent,
                                       int firstOutRegister, int firstOutComponent)
 {
     return(new ParameterDescription()
     {
         Name = name,
         SemanticName = semanticName,
         Type = type,
         Class = @class,
         Rows = rows,
         Columns = columns,
         InterpolationMode = interpolationMode,
         Flags = flags,
         FirstInRegister = firstInRegister,
         FirstInComponent = firstInComponent,
         FirstOutRegister = firstOutRegister,
         FirstOutComponent = firstOutComponent
     });
 }