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++); }
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; } }
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; }
/// <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 }); }
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++; }
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; }
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; }
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; } }
using System;
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(); } }
/// <summary> /// Converts a <see cref="EffectParameterType"/> to an <see cref="EffectResourceType"/>. /// </summary> /// <param name="type">The type.</param> /// <returns>A resource type.</returns> public static EffectResourceType ConvertFromParameterType(EffectParameterType type) { // For efficiency, don't check for invalid type values. return ParameterTypeToResourceType[(int) type]; }
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; } }
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(); } }
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; }
private static int ComputeTypeSize(EffectParameterType type) { switch (type) { case EffectParameterType.Bool: case EffectParameterType.Float: case EffectParameterType.Int: case EffectParameterType.UInt: return 4; case EffectParameterType.Double: return 8; case EffectParameterType.Void: return 0; default: throw new NotImplementedException(); } }
public ParameterType(EffectParameterType type, int columns, int rows) { Type = type; Rows = rows; Columns = columns; }
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; }
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; 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; }