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