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(); } }