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}"); } }
/// <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; }
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()}"); } }
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; }
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; }
public static bool IsSampler(this ShaderVariableType type) { switch (type) { case ShaderVariableType.Sampler2D: case ShaderVariableType.SamplerCube: case ShaderVariableType.SamplerExternal: return(true); default: return(false); } }
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(); }
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(); }
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; }
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); } }
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 }); }