Struct rspirv::binary::Decoder[][src]

pub struct Decoder<'a> { /* fields omitted */ }
Expand description

The SPIR-V binary decoder.

Takes in a vector of bytes, and serves requests for raw SPIR-V words or values of a specific SPIR-V enum type. Successful decoding will surely consume the number of words decoded, while unsuccessful decoding may consume any number of bytes.

TODO: The decoder should not conume words if an error occurs.

Different from the Parser, this decoder is low-level; it has no knowledge of the SPIR-V grammar. Given a vector of bytes, it solely responds to word decoding requests via method calls: both raw words requests and decoding the raw words into a value of a specific SPIR-V enum type.

It also provides a limit mechanism. Users can set a limit, and then requesting words. If that limit is reached before the end of the stream, State::LimitReached will be returned.

Errors

For its methods, there can be the following errors:

  • DecodeError::LimitReached(offset) if the most recent limit has reached.
  • DecodeError::StreamExpected(offset) if more bytes are needed to decode the next word.
  • DecodeError::<spirv-enum>Unknown(offset, value) if failed to decode the next word as the given <spirv-enum>.

All errors contain the byte offset of the word failed decoding.

Examples

use rspirv::binary::{Decoder, DecodeError};
use spirv::SourceLanguage;

fn main() {
    let v = vec![0x12, 0x34, 0x56, 0x78,
                 0x90, 0xab, 0xcd, 0xef,
                 0x02, 0x00, 0x00, 0x00];
    let mut d = Decoder::new(&v);

    assert_eq!(Ok(0x78563412), d.word());
    assert_eq!(Ok(0xefcdab90), d.word());
    assert_eq!(Ok(SourceLanguage::GLSL), d.source_language());

    assert_eq!(Err(DecodeError::StreamExpected(12)), d.word());
}

Implementations

Creates a new Decoder instance.

Returns the offset of the byte to decode next.

Decodes and returns the next raw SPIR-V word.

Decodes and returns the next n raw SPIR-V words.

Sets the limit to num_words words.

The decoder will return State::LimitReached after num_words words have been requested, if having not consumed the whole stream.

Clear the previously set limit (if any).

Returns true if a limit has been set on this decoder.

Returns true if the previously set limit has been reached.

This will always return false if no limit has been ever set.

Decodes and returns the next SPIR-V word as an id.

Decodes and returns a literal string.

This method will consume as many words as necessary until finding a null character (\0), or reaching the limit or end of the stream and erroring out.

Decodes and returns the next SPIR-V word as a 32-bit literal integer.

Decodes and returns the next two SPIR-V words as a 64-bit literal integer.

Decodes and returns the next SPIR-V word as a 32-bit literal floating point number.

Decodes and returns the next two SPIR-V words as a 64-bit literal floating point number.

Decodes and returns the next SPIR-V word as a 32-bit extended-instruction-set number.

Decodes and returns the next SPIR-V word as a SPIR-V ImageOperands value.

Decodes and returns the next SPIR-V word as a SPIR-V FPFastMathMode value.

Decodes and returns the next SPIR-V word as a SPIR-V SelectionControl value.

Decodes and returns the next SPIR-V word as a SPIR-V LoopControl value.

Decodes and returns the next SPIR-V word as a SPIR-V FunctionControl value.

Decodes and returns the next SPIR-V word as a SPIR-V MemorySemantics value.

Decodes and returns the next SPIR-V word as a SPIR-V MemoryAccess value.

Decodes and returns the next SPIR-V word as a SPIR-V KernelProfilingInfo value.

Decodes and returns the next SPIR-V word as a SPIR-V RayFlags value.

Decodes and returns the next SPIR-V word as a SPIR-V FragmentShadingRate value.

Decodes and returns the next SPIR-V word as a SPIR-V SourceLanguage value.

Decodes and returns the next SPIR-V word as a SPIR-V ExecutionModel value.

Decodes and returns the next SPIR-V word as a SPIR-V AddressingModel value.

Decodes and returns the next SPIR-V word as a SPIR-V MemoryModel value.

Decodes and returns the next SPIR-V word as a SPIR-V ExecutionMode value.

Decodes and returns the next SPIR-V word as a SPIR-V StorageClass value.

Decodes and returns the next SPIR-V word as a SPIR-V Dim value.

Decodes and returns the next SPIR-V word as a SPIR-V SamplerAddressingMode value.

Decodes and returns the next SPIR-V word as a SPIR-V SamplerFilterMode value.

Decodes and returns the next SPIR-V word as a SPIR-V ImageFormat value.

Decodes and returns the next SPIR-V word as a SPIR-V ImageChannelOrder value.

Decodes and returns the next SPIR-V word as a SPIR-V ImageChannelDataType value.

Decodes and returns the next SPIR-V word as a SPIR-V FPRoundingMode value.

Decodes and returns the next SPIR-V word as a SPIR-V LinkageType value.

Decodes and returns the next SPIR-V word as a SPIR-V AccessQualifier value.

Decodes and returns the next SPIR-V word as a SPIR-V FunctionParameterAttribute value.

Decodes and returns the next SPIR-V word as a SPIR-V Decoration value.

Decodes and returns the next SPIR-V word as a SPIR-V BuiltIn value.

Decodes and returns the next SPIR-V word as a SPIR-V Scope value.

Decodes and returns the next SPIR-V word as a SPIR-V GroupOperation value.

Decodes and returns the next SPIR-V word as a SPIR-V KernelEnqueueFlags value.

Decodes and returns the next SPIR-V word as a SPIR-V Capability value.

Decodes and returns the next SPIR-V word as a SPIR-V RayQueryIntersection value.

Decodes and returns the next SPIR-V word as a SPIR-V RayQueryCommittedIntersectionType value.

Decodes and returns the next SPIR-V word as a SPIR-V RayQueryCandidateIntersectionType value.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.