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

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

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:

  • Error::LimitReached(offset) if the most recent limit has reached.
  • Error::StreamExpected(offset) if more bytes are needed to decode the next word.
  • Error::<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

extern crate rspirv;
extern crate spirv_headers as spirv;

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

Methods

impl<'a> Decoder<'a>
[src]

[src]

Creates a new Decoder instance.

[src]

Returns the offset of the byte to decode next.

[src]

Decodes and returns the next raw SPIR-V word.

[src]

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

impl<'a> Decoder<'a>
[src]

[src]

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.

[src]

Clear the previously set limit (if any).

[src]

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

[src]

Returns true if the previously set limit has been reached.

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

impl<'a> Decoder<'a>
[src]

[src]

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

[src]

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.

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

impl<'a> Decoder<'a>
[src]

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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