Example #1
0
        internal EffectParameter(   EffectParameterClass class_, 
                                    EffectParameterType type, 
                                    string name, 
                                    int rowCount, 
                                    int columnCount,
                                    string semantic, 
                                    EffectAnnotationCollection annotations,
                                    EffectParameterCollection elements,
                                    EffectParameterCollection structMembers,
                                    object data )
		{
            ParameterClass = class_;
            ParameterType = type;

            Name = name;
            Semantic = semantic;
            Annotations = annotations;

            RowCount = rowCount;
			ColumnCount = columnCount;

            Elements = elements;
            StructureMembers = structMembers;

            Data = data;
            StateKey = unchecked(NextStateKey++);
		}
Example #2
0
		internal EffectParameter(Effect parent, string paramName, int paramIndex, int userIndex, int uniformLocation,
		                         string paramSType, int paramLength)
		{
			_parentEffect = parent;
			name = paramName;
			internalIndex = paramIndex;
			internalLength = paramLength;
			
			this.userIndex = userIndex;
			this.uniformLocation = uniformLocation;
			
			switch (paramSType ){
			case "Float":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Scalar;
				rowCount = 1;
				colCount = 1;
				_cachedValue = 0.0f;
				break;				
			case "FloatVec2":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Vector;
				rowCount = 1;
				colCount = 2;
				_cachedValue = OpenTK.Vector2.Zero;
				break;
			case "FloatVec3":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Vector;
				rowCount = 1;
				colCount = 3;
				_cachedValue =OpenTK.Vector3.Zero;
				break;	
			case "FloatVec4":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Vector;
				rowCount = 1;
				colCount = 4;
				_cachedValue = OpenTK.Vector4.Zero;
				break;				
			case "Sampler2D":
				paramType = EffectParameterType.Texture2D;
				paramClass = EffectParameterClass.Object;
				rowCount = 0;
				colCount = 0;
				break;				
			case "FloatMat4":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Matrix;
				rowCount = 4;
				colCount = 4;
				_cachedValue = OpenTK.Matrix4.Identity;
				break;				
				
			}
				
			
			
		}
        /// <summary>
        /// Gets (or creates) an entry to the DescriptorSetLayout and gets its index.
        /// </summary>
        /// <returns>The future entry index.</returns>
        public void AddBinding(ParameterKey key, string logicalGroup, EffectParameterClass @class, EffectParameterType type, int arraySize = 1, SamplerState immutableSampler = null)
        {
            hashBuilder.Write(key.Name);
            hashBuilder.Write(@class);
            hashBuilder.Write(arraySize);

            ElementCount += arraySize;
            Entries.Add(new Entry { Key = key, LogicalGroup = logicalGroup, Class = @class, Type = type, ArraySize = arraySize, ImmutableSampler = immutableSampler });
        }
Example #4
0
 internal EffectAnnotation(EffectParameterClass class_, EffectParameterType type, string name, int rowCount, int columnCount, string semantic, object data)
 {
   this.ParameterClass = class_;
   this.ParameterType = type;
   this.Name = name;
   this.RowCount = rowCount;
   this.ColumnCount = columnCount;
   this.Semantic = semantic;
 }
Example #5
0
 internal EffectParameter(EffectParameterClass class_, EffectParameterType type, string name, int rowCount, int columnCount, int registerCount, string semantic, EffectAnnotationCollection annotations, EffectParameterCollection elements, EffectParameterCollection structMembers, object data)
 {
   this.ParameterClass = class_;
   this.ParameterType = type;
   this.Name = name;
   this.Semantic = semantic;
   this.Annotations = annotations;
   this.RowCount = rowCount;
   this.ColumnCount = columnCount;
   this.RegisterCount = registerCount;
   this.Elements = elements;
   this.StructureMembers = structMembers;
   this.Data = data;
   this.StateKey = EffectParameter.NextStateKey++;
 }
Example #6
0
        internal EffectParameter(
			string name,
			string semantic,
			int rowCount,
			int columnCount,
			int elementCount,
			EffectParameterClass parameterClass,
			EffectParameterType parameterType,
			EffectParameterCollection structureMembers,
			EffectAnnotationCollection annotations,
			IntPtr data
		)
        {
            Name = name;
            Semantic = semantic;
            RowCount = rowCount;
            ColumnCount = columnCount;
            if (elementCount > 0)
            {
                List<EffectParameter> elements = new List<EffectParameter>(elementCount);
                for (int i = 0; i < elementCount; i += 1)
                {
                    // FIXME: Probably incomplete? -flibit
                    elements.Add(new EffectParameter(
                        null,
                        null,
                        rowCount,
                        columnCount,
                        0,
                        ParameterClass,
                        parameterType,
                        null, // FIXME: See mojoshader_effects.c:readvalue -flibit
                        null,
                        new IntPtr(
                            data.ToInt64() + (i * rowCount * columnCount)
                        )
                    ));
                }
                Elements = new EffectParameterCollection(elements);
            }
            ParameterClass = parameterClass;
            ParameterType = parameterType;
            StructureMembers = structureMembers;
            Annotations = annotations;
            values = data;
        }
Example #7
0
		internal EffectAnnotation(
			string name,
			string semantic,
			int rowCount,
			int columnCount,
			EffectParameterClass parameterClass,
			EffectParameterType parameterType,
			IntPtr data
		) {
			Name = name;
			Semantic = semantic;
			RowCount = rowCount;
			ColumnCount = columnCount;
			ParameterClass = parameterClass;
			ParameterType = parameterType;
			values = data;
		}
Example #8
0
		internal EffectParameter(Effect parent, string paramName, int paramIndex, string paramSType, int paramLength)
		{
			_parentEffect = parent;
			name = paramName;
			internalIndex = paramIndex;
			internalLength = paramLength;
			
			switch (paramSType ){
			case "FloatVec2":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Vector;
				rowCount = 1;
				colCount = 2;
				_cachedValue = MonoMac.OpenGL.Vector2.Zero;
				break;
			case "FloatVec3":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Vector;
				rowCount = 1;
				colCount = 3;
				_cachedValue = MonoMac.OpenGL.Vector2.Zero;
				break;	
			case "FloatVec4":
				paramType = EffectParameterType.Single;
				paramClass = EffectParameterClass.Vector;
				rowCount = 1;
				colCount = 4;
				_cachedValue = MonoMac.OpenGL.Vector2.Zero;
				break;				
			case "Sampler2D":
				paramType = EffectParameterType.Texture2D;
				paramClass = EffectParameterClass.Object;
				rowCount = 0;
				colCount = 0;
				break;				
				
			}
				
			
			
		}
Example #9
0
 public DescriptorTypeCount(EffectParameterClass type, int count)
 {
     Type  = type;
     Count = count;
 }
        public static DescriptorType ConvertDescriptorType(EffectParameterClass @class, EffectParameterType type)
        {
            switch (@class)
            {
                case EffectParameterClass.ConstantBuffer:
                    return DescriptorType.UniformBuffer;
                case EffectParameterClass.Sampler:
                    return DescriptorType.Sampler;
                case EffectParameterClass.ShaderResourceView:
                    switch (type)
                    {
                        case EffectParameterType.Texture:
                        case EffectParameterType.Texture1D:
                        case EffectParameterType.Texture2D:
                        case EffectParameterType.Texture3D:
                        case EffectParameterType.TextureCube:
                        case EffectParameterType.Texture1DArray:
                        case EffectParameterType.Texture2DArray:
                        case EffectParameterType.TextureCubeArray:
                            return DescriptorType.SampledImage;

                        case EffectParameterType.Buffer:
                            return DescriptorType.UniformTexelBuffer;

                        default:
                            throw new NotImplementedException();
                    }
                case EffectParameterClass.UnorderedAccessView:
                    return DescriptorType.StorageBuffer;
                default:
                    throw new NotImplementedException();
            }
        }
Example #11
0
        /// <summary>
        /// Creates a new instance of <see cref="D3D10EffectAnnotation"/>.
        /// </summary>
        /// <param name="annotation">The D3D10 effect annotation.</param>
        /// <param name="name">The annotation's name.</param>
        /// <param name="semantic">The annotation's semantic.</param>
        /// <param name="paramClass">The annotation's parameter class.</param>
        /// <param name="paramType">The annotation's parameter type.</param>
        internal D3D10EffectAnnotation(D3D.EffectVariable annotation, String name, String semantic, EffectParameterClass paramClass, EffectParameterType paramType)
        {
            _name       = name;
            _annotation = annotation;
            _semantic   = semantic;
            _paramClass = paramClass;

            //Need to find a way to properly get these values!
            _paramType   = paramType;
            _columnCount = 0;
            _rowCount    = 0;
        }
Example #12
0
        internal EffectParameter(
			string name,
			string semantic,
			int rowCount,
			int columnCount,
			int elementCount,
			EffectParameterClass parameterClass,
			EffectParameterType parameterType,
			EffectParameterCollection structureMembers,
			EffectAnnotationCollection annotations,
			IntPtr data
		)
        {
            Name = name;
            Semantic = semantic;
            RowCount = rowCount;
            ColumnCount = columnCount;
            if (elementCount > 0)
            {
                int curOffset = 0;
                List<EffectParameter> elements = new List<EffectParameter>(elementCount);
                for (int i = 0; i < elementCount; i += 1)
                {
                    EffectParameterCollection elementMembers = null;
                    if (structureMembers != null)
                    {
                        List<EffectParameter> memList = new List<EffectParameter>();
                        for (int j = 0; j < structureMembers.Count; j += 1)
                        {
                            int memElems = 0;
                            if (structureMembers[j].Elements != null)
                            {
                                memElems = structureMembers[j].Elements.Count;
                            }
                            memList.Add(new EffectParameter(
                                structureMembers[j].Name,
                                structureMembers[j].Semantic,
                                structureMembers[j].RowCount,
                                structureMembers[j].ColumnCount,
                                memElems,
                                structureMembers[j].ParameterClass,
                                structureMembers[j].ParameterType,
                                null, // FIXME: Nested structs! -flibit
                                structureMembers[j].Annotations,
                                new IntPtr(data.ToInt64() + curOffset)
                            ));
                            int memSize = structureMembers[j].RowCount * structureMembers[j].ColumnCount;
                            if (memElems > 0)
                            {
                                memSize *= memElems;
                            }
                            curOffset += memSize * 4;
                        }
                        elementMembers = new EffectParameterCollection(memList);
                    }
                    // FIXME: Probably incomplete? -flibit
                    elements.Add(new EffectParameter(
                        null,
                        null,
                        rowCount,
                        columnCount,
                        0,
                        ParameterClass,
                        parameterType,
                        elementMembers,
                        null,
                        new IntPtr(
                            data.ToInt64() + (i * 4 * rowCount * columnCount)
                        )
                    ));
                }
                Elements = new EffectParameterCollection(elements);
            }
            ParameterClass = parameterClass;
            ParameterType = parameterType;
            StructureMembers = structureMembers;
            Annotations = annotations;
            values = data;
        }
Example #13
0
using System;
Example #14
0
        internal EffectParameter(
            string name,
            string semantic,
            int rowCount,
            int columnCount,
            int elementCount,
            EffectParameterClass parameterClass,
            EffectParameterType parameterType,
            EffectParameterCollection structureMembers,
            EffectAnnotationCollection annotations,
            IntPtr data,
            uint dataSizeBytes
            )
        {
            if (data == IntPtr.Zero)
            {
                throw new ArgumentNullException("data");
            }

            Name        = name;
            Semantic    = semantic ?? string.Empty;
            RowCount    = rowCount;
            ColumnCount = columnCount;
            if (elementCount > 0)
            {
                int curOffset = 0;
                List <EffectParameter> elements = new List <EffectParameter>(elementCount);
                for (int i = 0; i < elementCount; i += 1)
                {
                    EffectParameterCollection elementMembers = null;
                    if (structureMembers != null)
                    {
                        List <EffectParameter> memList = new List <EffectParameter>();
                        for (int j = 0; j < structureMembers.Count; j += 1)
                        {
                            int memElems = 0;
                            if (structureMembers[j].Elements != null)
                            {
                                memElems = structureMembers[j].Elements.Count;
                            }
                            int memSize = structureMembers[j].RowCount * 4;
                            if (memElems > 0)
                            {
                                memSize *= memElems;
                            }
                            memList.Add(new EffectParameter(
                                            structureMembers[j].Name,
                                            structureMembers[j].Semantic,
                                            structureMembers[j].RowCount,
                                            structureMembers[j].ColumnCount,
                                            memElems,
                                            structureMembers[j].ParameterClass,
                                            structureMembers[j].ParameterType,
                                            null,                     // FIXME: Nested structs! -flibit
                                            structureMembers[j].Annotations,
                                            new IntPtr(data.ToInt64() + curOffset),
                                            (uint)memSize * 4
                                            ));
                            curOffset += memSize * 4;
                        }
                        elementMembers = new EffectParameterCollection(memList);
                    }
                    // FIXME: Probably incomplete? -flibit
                    elements.Add(new EffectParameter(
                                     null,
                                     null,
                                     rowCount,
                                     columnCount,
                                     0,
                                     ParameterClass,
                                     parameterType,
                                     elementMembers,
                                     null,
                                     new IntPtr(
                                         data.ToInt64() + (i * rowCount * 16)
                                         ),
                                     // FIXME: Not obvious to me how to compute this -kg
                                     0
                                     ));
                }
                Elements = new EffectParameterCollection(elements);
            }
            ParameterClass   = parameterClass;
            ParameterType    = parameterType;
            StructureMembers = structureMembers;
            Annotations      = annotations;
            values           = data;
            valuesSizeBytes  = dataSizeBytes;
        }
        internal EffectParameter(Effect parent, string paramName, int paramIndex, int userIndex, int uniformLocation,
                                 string paramSType, int paramLength)
        {
            _parentEffect  = parent;
            name           = paramName;
            internalIndex  = paramIndex;
            internalLength = paramLength;

            this.userIndex       = userIndex;
            this.uniformLocation = uniformLocation;

            switch (paramSType)
            {
            case "Float":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Scalar;
                rowCount     = 1;
                colCount     = 1;
                _cachedValue = 0.0f;
                break;

            case "FloatVec2":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Vector;
                rowCount     = 1;
                colCount     = 2;
                _cachedValue = OpenTK.Vector2.Zero;
                break;

            case "FloatVec3":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Vector;
                rowCount     = 1;
                colCount     = 3;
                _cachedValue = OpenTK.Vector3.Zero;
                break;

            case "FloatVec4":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Vector;
                rowCount     = 1;
                colCount     = 4;
                _cachedValue = OpenTK.Vector4.Zero;
                break;

            case "Sampler2D":
                paramType  = EffectParameterType.Texture2D;
                paramClass = EffectParameterClass.Object;
                rowCount   = 0;
                colCount   = 0;
                break;

            case "FloatMat4":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Matrix;
                rowCount     = 4;
                colCount     = 4;
                _cachedValue = OpenTK.Matrix4.Identity;
                break;
            }
        }
Example #16
0
 internal EffectParameter(
     string name,
     string semantic,
     int rowCount,
     int columnCount,
     int elementCount,
     EffectParameterClass parameterClass,
     EffectParameterType parameterType,
     EffectParameterCollection structureMembers,
     EffectAnnotationCollection annotations,
     IntPtr data
     )
 {
     Name        = name;
     Semantic    = semantic;
     RowCount    = rowCount;
     ColumnCount = columnCount;
     if (elementCount > 0)
     {
         int curOffset = 0;
         List <EffectParameter> elements = new List <EffectParameter>(elementCount);
         for (int i = 0; i < elementCount; i += 1)
         {
             EffectParameterCollection elementMembers = null;
             if (structureMembers != null)
             {
                 List <EffectParameter> memList = new List <EffectParameter>();
                 for (int j = 0; j < structureMembers.Count; j += 1)
                 {
                     int memElems = 0;
                     if (structureMembers[j].Elements != null)
                     {
                         memElems = structureMembers[j].Elements.Count;
                     }
                     memList.Add(new EffectParameter(
                                     structureMembers[j].Name,
                                     structureMembers[j].Semantic,
                                     structureMembers[j].RowCount,
                                     structureMembers[j].ColumnCount,
                                     memElems,
                                     structureMembers[j].ParameterClass,
                                     structureMembers[j].ParameterType,
                                     null,                     // FIXME: Nested structs! -flibit
                                     structureMembers[j].Annotations,
                                     new IntPtr(data.ToInt64() + curOffset)
                                     ));
                     int memSize = structureMembers[j].RowCount * 4;
                     if (memElems > 0)
                     {
                         memSize *= memElems;
                     }
                     curOffset += memSize * 4;
                 }
                 elementMembers = new EffectParameterCollection(memList);
             }
             // FIXME: Probably incomplete? -flibit
             elements.Add(new EffectParameter(
                              null,
                              null,
                              rowCount,
                              columnCount,
                              0,
                              ParameterClass,
                              parameterType,
                              elementMembers,
                              null,
                              new IntPtr(
                                  data.ToInt64() + (i * rowCount * 16)
                                  )
                              ));
         }
         Elements = new EffectParameterCollection(elements);
     }
     ParameterClass   = parameterClass;
     ParameterType    = parameterType;
     StructureMembers = structureMembers;
     Annotations      = annotations;
     values           = data;
 }
Example #17
0
 public DescriptorSetLayoutEntry(EffectParameterClass type, int arraySize = 1) : this()
 {
     Type      = type;
     ArraySize = arraySize;
 }
Example #18
0
        //Gets the class and type from the underlying parameter
        private void SetClassAndType(XFG.EffectParameterClass varClass, XFG.EffectParameterType varType)
        {
            switch (varClass)
            {
            case XFG.EffectParameterClass.Scalar:
                _paramClass = EffectParameterClass.Scalar;
                break;

            case XFG.EffectParameterClass.Vector:
                _paramClass = EffectParameterClass.Vector;
                break;

            case XFG.EffectParameterClass.Matrix:
                _paramClass = EffectParameterClass.Matrix;
                break;

            case XFG.EffectParameterClass.Object:
                _paramClass = EffectParameterClass.Object;
                break;

            case XFG.EffectParameterClass.Struct:
                _paramClass = EffectParameterClass.Struct;
                break;
            }
            switch (varType)
            {
            case XFG.EffectParameterType.Bool:
                _paramType = EffectParameterType.Bool;
                break;

            case XFG.EffectParameterType.Single:
                _paramType = EffectParameterType.Single;
                break;

            case XFG.EffectParameterType.Int32:
                _paramType = EffectParameterType.Int32;
                break;

            case XFG.EffectParameterType.String:
                _paramType = EffectParameterType.String;
                break;

            case XFG.EffectParameterType.Texture:
                _paramType = EffectParameterType.Texture;
                break;

            case XFG.EffectParameterType.Texture1D:
                _paramType = EffectParameterType.Texture1D;
                break;

            case XFG.EffectParameterType.Texture2D:
                _paramType = EffectParameterType.Texture2D;
                break;

            case XFG.EffectParameterType.Texture3D:
                _paramType = EffectParameterType.Texture3D;
                break;

            case XFG.EffectParameterType.TextureCube:
                _paramType = EffectParameterType.TextureCube;
                break;

            case XFG.EffectParameterType.Void:
                _paramType = EffectParameterType.Void;
                break;
            }
        }
Example #19
0
        internal EffectParameter(Effect parent, string paramName, int paramIndex, int userIndex, int uniformLocation,
                                 string paramSType, int paramLength, int numOfElements)
        {
            _parentEffect = parent;

            internalIndex      = paramIndex;
            internalLength     = paramLength;
            this.numOfElements = numOfElements;

            this.userIndex       = userIndex;
            this.uniformLocation = uniformLocation;

            elements = new EffectParameterCollection();

            // Check if the parameter is an array
            if (numOfElements > 1)
            {
                // We have to strip off the [0] at the end so that the
                // parameter can be references with just the name with no
                // index specifications
                if (paramName.EndsWith("[0]"))
                {
                    paramName = paramName.Remove(paramName.Length - 3);
                }
            }

            name = paramName;

            switch (paramSType)
            {
            case "Float":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Scalar;
                rowCount     = 1;
                colCount     = 1;
                _cachedValue = 0.0f;
                break;

            case "FloatVec2":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Vector;
                rowCount     = 1;
                colCount     = 2;
                _cachedValue = MonoMac.OpenGL.Vector2.Zero;
                break;

            case "FloatVec3":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Vector;
                rowCount     = 1;
                colCount     = 3;
                _cachedValue = MonoMac.OpenGL.Vector3.Zero;
                break;

            case "FloatVec4":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Vector;
                rowCount     = 1;
                colCount     = 4;
                _cachedValue = MonoMac.OpenGL.Vector4.Zero;
                break;

            case "Sampler2D":
                paramType  = EffectParameterType.Texture2D;
                paramClass = EffectParameterClass.Object;
                rowCount   = 0;
                colCount   = 0;
                break;

            case "FloatMat4":
                paramType    = EffectParameterType.Single;
                paramClass   = EffectParameterClass.Matrix;
                rowCount     = 4;
                colCount     = 4;
                _cachedValue = MonoMac.OpenGL.Matrix4.Identity;
                break;
            }

            if (numOfElements > 1)
            {
                // Setup our elements
                for (int x = 0; x < numOfElements; x++)
                {
                    EffectParameter ep = new EffectParameter(parent, name, paramIndex, userIndex, uniformLocation,
                                                             paramType, paramClass, rowCount, colCount, _cachedValue, paramLength);
                    elements._parameters.Add(ep.Name + "[" + x + "]", ep);
                }
            }
        }
 public DescriptorTypeCount(EffectParameterClass type, int count)
 {
     Type = type;
     Count = count;
 }