static TestFieldOffsets() { var floatField = new TypeStructureField(SpirvTypeBase.Float, "floatField"); var doubleField = new TypeStructureField(SpirvTypeBase.Double, "doubleField"); var intField = new TypeStructureField(SpirvTypeBase.Int, "intField"); var uintField = new TypeStructureField(SpirvTypeBase.UInt, "uintField"); var vec2Field = new TypeStructureField(SpirvTypeBase.Vec2, "vec2Field"); var vec3Field = new TypeStructureField(SpirvTypeBase.Vec3, "vec3Field"); var vec4Field = new TypeStructureField(SpirvTypeBase.Vec4, "vec4Field"); var dvec2Field = new TypeStructureField(SpirvTypeBase.Dvec2, "dvec2Field"); var dvec3Field = new TypeStructureField(SpirvTypeBase.Dvec3, "dvec3Field"); var dvec4Field = new TypeStructureField(SpirvTypeBase.Dvec4, "dvec4Field"); var mat2Field = new TypeStructureField(SpirvTypeBase.Mat2, "mat2Field"); var mat3Field = new TypeStructureField(SpirvTypeBase.Mat3, "mat3Field"); var mat4Field = new TypeStructureField(SpirvTypeBase.Mat4, "mat4Field"); var intArrayField = new TypeStructureField(new TypeArray(SpirvTypeBase.Int, 2), "intArrayField"); marker = new TypeStructureField(SpirvTypeBase.Float, "marker"); WellKnownTypes = new[] { floatField, doubleField, intField, uintField, vec2Field, vec3Field, vec4Field, dvec2Field, dvec3Field, dvec4Field, mat2Field, mat3Field, mat4Field, intArrayField }; }
public void TestAlignment(TypeStructureField field) { var(shaderInstructions, shaders) = CompileShaderForFieldSet(new TypeStruct("ModelBuffer", marker, field)); var shaderReflection = new ShaderReflection(shaderInstructions); var structure = shaderReflection.Structures[0]; Assert.AreEqual(structure.Fields[1].ByteOffset, structure.Fields[1].Type.Alignment); }
private static TypeStruct BuildStructure(params int[] indices) { var fields = indices.Select(index => new TypeStructureField(WellKnownTypes[index].Type, WellKnownTypes[index].Name)).ToArray(); var structure = new TypeStruct("testStruct", fields); var spirvStructureField = new TypeStructureField(structure, string.Join("_", structure.Fields.Select(_ => _.Name))); var endMarker = new TypeStructureField(SpirvTypeBase.Float, "endMarker"); var modelStruct = new TypeStruct("test_" + spirvStructureField.Name, marker, spirvStructureField, endMarker); return(modelStruct); }
public void TestArrayAlignment(TypeStructureField field) { if (field.Type.TypeCategory == SpirvTypeCategory.Array) { Assert.Ignore("Can't make array of arrays."); } var originalArrayType = new TypeArray(field.Type, 2); var(shaderInstructions, shaders) = CompileShaderForFieldSet(new TypeStruct("ModelBuffer", marker, new TypeStructureField(originalArrayType, "testArray"))); var shaderReflection = new ShaderReflection(shaderInstructions); var structure = shaderReflection.Structures[0]; var spirvStructureField = structure.Fields[1]; var arrayType = (TypeArray)spirvStructureField.Type; Assert.AreEqual(spirvStructureField.ByteOffset, spirvStructureField.Type.Alignment); Assert.AreEqual(arrayType.ArrayStride, originalArrayType.ArrayStride); }