Beispiel #1
0
        public static void CompareVariable(EffectVariable reflectionVariable, object variable)
        {
            EffectTypeDescription typeDesc = reflectionVariable.TypeInfo.Description;

            Assert.AreEqual(typeDesc.TypeName, typeDesc.TypeName);
            Assert.AreEqual(typeDesc.Class, typeDesc.Class);
            Assert.AreEqual(typeDesc.Type, typeDesc.Type);
            Assert.AreEqual(typeDesc.Elements, typeDesc.Elements);
            Assert.AreEqual(typeDesc.Members, typeDesc.Members);
            Assert.AreEqual(typeDesc.Rows, typeDesc.Rows);
            Assert.AreEqual(typeDesc.Columns, typeDesc.Columns);
            Assert.AreEqual(typeDesc.PackedSize, typeDesc.PackedSize);
            Assert.AreEqual(typeDesc.UnpackedSize, typeDesc.UnpackedSize);
            Assert.AreEqual(typeDesc.Stride, typeDesc.Stride);
            EffectVariableDescription variableDesc = reflectionVariable.Description;

            Assert.AreEqual(variableDesc.Name, variableDesc.Name);
            Assert.AreEqual(variableDesc.Semantic, variableDesc.Semantic);
            Assert.AreEqual(variableDesc.Flags, variableDesc.Flags);
            Assert.AreEqual(variableDesc.AnnotationCount, variableDesc.AnnotationCount);
            Assert.AreEqual(variableDesc.BufferOffset, variableDesc.BufferOffset);
            Assert.AreEqual(variableDesc.ExplicitBindPoint, variableDesc.ExplicitBindPoint);

            if (variable is EffectNumericVariable v1)
            {
                Assert.AreEqual(variableDesc.Name, v1.Name);
                Assert.AreEqual(0, v1.ExplicitBindPoint);
            }
            if (variable is EffectObjectVariable v2)
            {
                Assert.AreEqual(variableDesc.Name, v2.Name);
            }

            for (int i = 0; i < variableDesc.AnnotationCount; i++)
            {
                var annotation = reflectionVariable.GetAnnotationByIndex(i);
            }
            if (typeDesc.Type == ShaderVariableType.Sampler)
            {
                EffectSamplerVariable sampVariable = reflectionVariable.AsSampler();
                SamplerState          samplerState = sampVariable.GetSampler();
                var sampDesc = samplerState.Description;
            }
        }
Beispiel #2
0
        public static void CompareVariable(EffectVariable reflectionVariable, Fx10.IEffectVariable variable)
        {
            EffectTypeDescription typeDesc = reflectionVariable.TypeInfo.Description;
            var type = variable.Type;

            Assert.AreEqual(typeDesc.TypeName, type.TypeName);
            Assert.AreEqual(typeDesc.Class, (ShaderVariableClass)type.VariableClass);
            Assert.AreEqual(typeDesc.Type, (ShaderVariableType)type.VariableType);
            Assert.AreEqual(typeDesc.Elements, type.ElementCount);
            Assert.AreEqual(typeDesc.Members, type.MemberCount);
            Assert.AreEqual(typeDesc.Rows, type.Rows);
            Assert.AreEqual(typeDesc.Columns, type.Columns);
            Assert.AreEqual(typeDesc.PackedSize, type.PackedSize);
            Assert.AreEqual(typeDesc.UnpackedSize, type.UnpackedSize);
            Assert.AreEqual(typeDesc.Stride, type.Stride);
            EffectVariableDescription variableDesc = reflectionVariable.Description;

            Assert.AreEqual(variableDesc.Name, variable.Name);
            Assert.AreEqual(variableDesc.Semantic ?? "", variable.Semantic);
            Assert.AreEqual(variableDesc.Flags, (EffectVariableFlags)variable.Flags);
            Assert.AreEqual(variableDesc.AnnotationCount, variable.AnnotationCount);
            //TODO: SharpDX seems defines BufferOffset relative to buffer, but variable is just relative to struct
            //Assert.AreEqual(variableDesc.BufferOffset, variable.BufferOffset == uint.MaxValue ? 0 : variable.BufferOffset);
            Assert.AreEqual(variableDesc.ExplicitBindPoint, variable.ExplicitBindPoint);
            var annotations = GetAnnotations(reflectionVariable);

            if (typeDesc.Class == ShaderVariableClass.Struct)
            {
                //TODO: SharpDx has GetMemberValues on the EffectType.
                for (int i = 0; i < typeDesc.Members; i++)
                {
                    var reflectionMember = reflectionVariable.GetMemberByIndex(i);
                    var member           = variable.Type.Members[i];
                    CompareVariable(reflectionMember, member);
                }
            }
            for (int i = 0; i < annotations.Count; i++)
            {
                var reflectionAnnotation = annotations[i];
                var annotation           = variable.Annotations[i];
                CompareVariable(reflectionAnnotation, annotation);
            }
            if (typeDesc.Type == ShaderVariableType.Blend)
            {
                var specDesc = reflectionVariable
                               .AsBlend()
                               .GetBlendState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.ConstantBuffer)
            {
                var specDesc = reflectionVariable
                               .AsConstantBuffer()
                               .GetConstantBuffer()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.DepthStencil)
            {
                var specDesc = reflectionVariable
                               .AsDepthStencil()
                               .GetDepthStencilState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.DepthStencilView)
            {
                var specDesc = reflectionVariable
                               .AsDepthStencilView()
                               .GetDepthStencil()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.Rasterizer)
            {
                var specDesc = reflectionVariable
                               .AsRasterizer()
                               .GetRasterizerState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.Rasterizer)
            {
                var specDesc = reflectionVariable
                               .AsRasterizer()
                               .GetRasterizerState()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.RenderTargetView)
            {
                var specDesc = reflectionVariable
                               .AsRenderTargetView()
                               .GetRenderTarget()
                               .Description;
            }
            if (typeDesc.Type == ShaderVariableType.Sampler)
            {
                var specDesc = reflectionVariable
                               .AsSampler()
                               .GetSampler()
                               .Description;
                var stateAnnotations = (variable as Fx10.EffectObjectVariable).Assignments;
            }
            if (typeDesc.Type == ShaderVariableType.PixelShader ||
                typeDesc.Type == ShaderVariableType.VertexShader ||
                typeDesc.Type == ShaderVariableType.GeometryShader)
            {
                var shader = reflectionVariable
                             .AsShader();
            }
            if (false)
            {
                var shader = reflectionVariable
                             .AsShaderResource();
            }
        }