ShaderTools.Hlsl.Binding.Binder.BindObjectType C# (CSharp) Method

BindObjectType() private method

private BindObjectType ( PredefinedObjectTypeSyntax node ) : IntrinsicObjectTypeSymbol
node PredefinedObjectTypeSyntax
return ShaderTools.Hlsl.Symbols.IntrinsicObjectTypeSymbol
        private IntrinsicObjectTypeSymbol BindObjectType(PredefinedObjectTypeSyntax node)
        {
            if (node.ObjectTypeToken.ContextualKind == SyntaxKind.ConstantBufferKeyword)
            {
                var valueTypeSyntax = (TypeSyntax) node.TemplateArgumentList.Arguments[0];
                var valueType = Bind(valueTypeSyntax, x => BindType(x, null));
                return IntrinsicTypes.CreateConstantBufferType(valueType.TypeSymbol);
            }

            var predefinedObjectType = SyntaxFacts.GetPredefinedObjectType(node.ObjectTypeToken.Kind);
            switch (predefinedObjectType)
            {
                case PredefinedObjectType.Buffer:
                case PredefinedObjectType.Texture1D:
                case PredefinedObjectType.Texture1DArray:
                case PredefinedObjectType.Texture2D:
                case PredefinedObjectType.Texture2DArray:
                case PredefinedObjectType.Texture3D:
                case PredefinedObjectType.TextureCube:
                case PredefinedObjectType.TextureCubeArray:
                case PredefinedObjectType.Texture2DMS:
                case PredefinedObjectType.Texture2DMSArray:
                    {
                        TypeSymbol valueType;
                        ScalarType scalarType;
                        GetTextureValueAndScalarType(node, out valueType, out scalarType);
                        return IntrinsicTypes.CreateTextureType(predefinedObjectType, valueType, scalarType);
                    }
                case PredefinedObjectType.RWBuffer:
                case PredefinedObjectType.RasterizerOrderedBuffer:
                case PredefinedObjectType.RWTexture1D:
                case PredefinedObjectType.RWTexture1DArray:
                case PredefinedObjectType.RWTexture2D:
                case PredefinedObjectType.RWTexture2DArray:
                case PredefinedObjectType.RWTexture3D:
                case PredefinedObjectType.RasterizerOrderedTexture1D:
                case PredefinedObjectType.RasterizerOrderedTexture1DArray:
                case PredefinedObjectType.RasterizerOrderedTexture2D:
                case PredefinedObjectType.RasterizerOrderedTexture2DArray:
                case PredefinedObjectType.RasterizerOrderedTexture3D:
                    {
                        TypeSymbol valueType;
                        ScalarType scalarType;
                        GetTextureValueAndScalarType(node, out valueType, out scalarType);
                        return IntrinsicTypes.CreateRWTextureType(predefinedObjectType, valueType, scalarType);
                    }
                case PredefinedObjectType.AppendStructuredBuffer:
                case PredefinedObjectType.ConsumeStructuredBuffer:
                case PredefinedObjectType.StructuredBuffer:
                case PredefinedObjectType.RWStructuredBuffer:
                case PredefinedObjectType.RasterizerOrderedStructuredBuffer:
                case PredefinedObjectType.InputPatch:
                case PredefinedObjectType.OutputPatch:
                case PredefinedObjectType.PointStream:
                case PredefinedObjectType.LineStream:
                case PredefinedObjectType.TriangleStream:
                    {
                        var valueTypeSyntax = (TypeSyntax) node.TemplateArgumentList.Arguments[0];
                        var valueType = Bind(valueTypeSyntax, x => BindType(x, null)).TypeSymbol;
                        switch (predefinedObjectType)
                        {
                            case PredefinedObjectType.AppendStructuredBuffer:
                                return IntrinsicTypes.CreateAppendStructuredBufferType(valueType);
                            case PredefinedObjectType.ConsumeStructuredBuffer:
                                return IntrinsicTypes.CreateConsumeStructuredBufferType(valueType);
                            case PredefinedObjectType.StructuredBuffer:
                                return IntrinsicTypes.CreateStructuredBufferType(valueType);
                            case PredefinedObjectType.RWStructuredBuffer:
                                return IntrinsicTypes.CreateRWStructuredBufferType(valueType);
                            case PredefinedObjectType.RasterizerOrderedStructuredBuffer:
                                return IntrinsicTypes.CreateRasterizerOrderedStructuredBufferType(valueType);
                            case PredefinedObjectType.InputPatch:
                                return IntrinsicTypes.CreateInputPatchType(valueType);
                            case PredefinedObjectType.OutputPatch:
                                return IntrinsicTypes.CreateOutputPatchType(valueType);
                            case PredefinedObjectType.PointStream:
                            case PredefinedObjectType.LineStream:
                            case PredefinedObjectType.TriangleStream:
                                return IntrinsicTypes.CreateStreamOutputType(predefinedObjectType, valueType);
                            default:
                                throw new ArgumentOutOfRangeException();
                        }
                    }
                case PredefinedObjectType.ByteAddressBuffer:
                    return IntrinsicTypes.ByteAddressBuffer;
                case PredefinedObjectType.BlendState:
                    return IntrinsicTypes.BlendState;
                case PredefinedObjectType.DepthStencilState:
                    return IntrinsicTypes.DepthStencilState;
                case PredefinedObjectType.RasterizerState:
                    return IntrinsicTypes.RasterizerState;
                case PredefinedObjectType.RasterizerOrderedByteAddressBuffer:
                    return IntrinsicTypes.RasterizerOrderedByteAddressBuffer;
                case PredefinedObjectType.RWByteAddressBuffer:
                    return IntrinsicTypes.RWByteAddressBuffer;
                case PredefinedObjectType.Sampler:
                    return IntrinsicTypes.Sampler;
                case PredefinedObjectType.Sampler1D:
                    return IntrinsicTypes.Sampler1D;
                case PredefinedObjectType.Sampler2D:
                    return IntrinsicTypes.Sampler2D;
                case PredefinedObjectType.Sampler3D:
                    return IntrinsicTypes.Sampler3D;
                case PredefinedObjectType.SamplerCube:
                    return IntrinsicTypes.SamplerCube;
                case PredefinedObjectType.SamplerState:
                    return IntrinsicTypes.SamplerState;
                case PredefinedObjectType.SamplerComparisonState:
                    return IntrinsicTypes.SamplerComparisonState;
                case PredefinedObjectType.Texture:
                    return IntrinsicTypes.LegacyTexture;
                case PredefinedObjectType.GeometryShader:
                    return IntrinsicTypes.GeometryShader;
                case PredefinedObjectType.PixelShader:
                    return IntrinsicTypes.PixelShader;
                case PredefinedObjectType.VertexShader:
                    return IntrinsicTypes.VertexShader;
                default:
                    throw new InvalidOperationException(predefinedObjectType.ToString());
            }
        }