public VersionedRootSignatureDescription GetRootSignatureDescAtVersion(RootSignatureVersion convertToVersion)
    {
        IntPtr ptr = GetRootSignatureDescAtVersion_(convertToVersion);

        // Marshal the result.
        var result = new VersionedRootSignatureDescription();

        result.__MarshalFrom(ref Unsafe.AsRef <VersionedRootSignatureDescription.__Native>(ptr.ToPointer()));
        return(result);
    }
Пример #2
0
        public static RootDescriptor Parse(BytecodeReader descReader, RootSignatureVersion version)
        {
            var result = new RootDescriptor()
            {
                ShaderRegister = descReader.ReadUInt32(),
                RegisterSpace  = descReader.ReadUInt32(),
            };

            if (version == RootSignatureVersion.Version1_1)
            {
                result.Flags = (RootDescriptorFlags)descReader.ReadUInt32();
            }
            return(result);
        }
Пример #3
0
        public static DescriptorRange Parse(BytecodeReader rangeReader, RootSignatureVersion version)
        {
            var result = new DescriptorRange()
            {
                RangeType          = (DescriptorRangeType)rangeReader.ReadUInt32(),
                NumDescriptors     = rangeReader.ReadUInt32(),
                BaseShaderRegister = rangeReader.ReadUInt32(),
                RegisterSpace      = rangeReader.ReadUInt32(),
            };

            if (version == RootSignatureVersion.Version1_1)
            {
                result.Flags = (DescriptorRangeFlags)rangeReader.ReadUInt32();
            }
            result.OffsetInDescriptorsFromTableStart = rangeReader.ReadUInt32();
            return(result);
        }
Пример #4
0
        public static RootParameter Parse(BytecodeReader reader, BytecodeReader paramReader, RootSignatureVersion version)
        {
            var           type       = (RootParameterType)paramReader.ReadUInt32();
            var           visibility = (ShaderVisibility)paramReader.ReadUInt32();
            var           bodyOffset = paramReader.ReadUInt32();
            var           bodyReader = reader.CopyAtOffset((int)bodyOffset);
            RootParameter result;

            switch (type)
            {
            case RootParameterType.DescriptorTable:
                result = RootDescriptorTable.Parse(reader, bodyReader, version);
                break;

            case RootParameterType._32BitConstants:
                result = RootConstants.Parse(bodyReader);
                break;

            case RootParameterType.Srv:
            case RootParameterType.Uav:
            case RootParameterType.Cbv:
                result = RootDescriptor.Parse(bodyReader, version);
                break;

            default:
                throw new InvalidOperationException($"Can't parse Root Parameter of type {type}");
            }
            result.ParameterType    = type;
            result.ShaderVisibility = visibility;
            return(result);
        }
        public new static RootDescriptorTable Parse(BytecodeReader reader, BytecodeReader tableReader, RootSignatureVersion version)
        {
            var result = new RootDescriptorTable();
            var numDescriptorRanges    = tableReader.ReadUInt32();
            var descriptorRangesOffset = tableReader.ReadUInt32();
            var rangeReader            = reader.CopyAtOffset((int)descriptorRangesOffset);

            for (int i = 0; i < numDescriptorRanges; i++)
            {
                result.DescriptorRanges.Add(DescriptorRange.Parse(rangeReader, version));
            }
            return(result);
        }