示例#1
0
        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
            };
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }