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
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 the previously set limit has been reached.
This will always return false if no limit has been ever set.
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.
impl<'a> Decoder<'a>
impl<'a> Decoder<'a>
pub fn image_operands(&mut self) -> Result<ImageOperands, Error>
pub fn image_operands(&mut self) -> Result<ImageOperands, Error>
Decodes and returns the next SPIR-V word as a SPIR-V ImageOperands value.
pub fn fp_fast_math_mode(&mut self) -> Result<FPFastMathMode, Error>
pub fn fp_fast_math_mode(&mut self) -> Result<FPFastMathMode, Error>
Decodes and returns the next SPIR-V word as a SPIR-V FPFastMathMode value.
pub fn selection_control(&mut self) -> Result<SelectionControl, Error>
pub fn selection_control(&mut self) -> Result<SelectionControl, Error>
Decodes and returns the next SPIR-V word as a SPIR-V SelectionControl value.
pub fn loop_control(&mut self) -> Result<LoopControl, Error>
pub fn loop_control(&mut self) -> Result<LoopControl, Error>
Decodes and returns the next SPIR-V word as a SPIR-V LoopControl value.
pub fn function_control(&mut self) -> Result<FunctionControl, Error>
pub fn function_control(&mut self) -> Result<FunctionControl, Error>
Decodes and returns the next SPIR-V word as a SPIR-V FunctionControl value.
pub fn memory_semantics(&mut self) -> Result<MemorySemantics, Error>
pub fn memory_semantics(&mut self) -> Result<MemorySemantics, Error>
Decodes and returns the next SPIR-V word as a SPIR-V MemorySemantics value.
pub fn memory_access(&mut self) -> Result<MemoryAccess, Error>
pub fn memory_access(&mut self) -> Result<MemoryAccess, Error>
Decodes and returns the next SPIR-V word as a SPIR-V MemoryAccess value.
pub fn kernel_profiling_info(&mut self) -> Result<KernelProfilingInfo, Error>
pub fn kernel_profiling_info(&mut self) -> Result<KernelProfilingInfo, Error>
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.
pub fn fragment_shading_rate(&mut self) -> Result<FragmentShadingRate, Error>
pub fn fragment_shading_rate(&mut self) -> Result<FragmentShadingRate, Error>
Decodes and returns the next SPIR-V word as a SPIR-V FragmentShadingRate value.
pub fn source_language(&mut self) -> Result<SourceLanguage, Error>
pub fn source_language(&mut self) -> Result<SourceLanguage, Error>
Decodes and returns the next SPIR-V word as a SPIR-V SourceLanguage value.
pub fn execution_model(&mut self) -> Result<ExecutionModel, Error>
pub fn execution_model(&mut self) -> Result<ExecutionModel, Error>
Decodes and returns the next SPIR-V word as a SPIR-V ExecutionModel value.
pub fn addressing_model(&mut self) -> Result<AddressingModel, Error>
pub fn addressing_model(&mut self) -> Result<AddressingModel, Error>
Decodes and returns the next SPIR-V word as a SPIR-V AddressingModel value.
pub fn memory_model(&mut self) -> Result<MemoryModel, Error>
pub fn memory_model(&mut self) -> Result<MemoryModel, Error>
Decodes and returns the next SPIR-V word as a SPIR-V MemoryModel value.
pub fn execution_mode(&mut self) -> Result<ExecutionMode, Error>
pub fn execution_mode(&mut self) -> Result<ExecutionMode, Error>
Decodes and returns the next SPIR-V word as a SPIR-V ExecutionMode value.
pub fn storage_class(&mut self) -> Result<StorageClass, Error>
pub fn storage_class(&mut self) -> Result<StorageClass, Error>
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.
pub fn sampler_addressing_mode(
&mut self
) -> Result<SamplerAddressingMode, Error>
pub fn sampler_addressing_mode(
&mut self
) -> Result<SamplerAddressingMode, Error>
Decodes and returns the next SPIR-V word as a SPIR-V SamplerAddressingMode value.
pub fn sampler_filter_mode(&mut self) -> Result<SamplerFilterMode, Error>
pub fn sampler_filter_mode(&mut self) -> Result<SamplerFilterMode, Error>
Decodes and returns the next SPIR-V word as a SPIR-V SamplerFilterMode value.
pub fn image_format(&mut self) -> Result<ImageFormat, Error>
pub fn image_format(&mut self) -> Result<ImageFormat, Error>
Decodes and returns the next SPIR-V word as a SPIR-V ImageFormat value.
pub fn image_channel_order(&mut self) -> Result<ImageChannelOrder, Error>
pub fn image_channel_order(&mut self) -> Result<ImageChannelOrder, Error>
Decodes and returns the next SPIR-V word as a SPIR-V ImageChannelOrder value.
pub fn image_channel_data_type(&mut self) -> Result<ImageChannelDataType, Error>
pub fn image_channel_data_type(&mut self) -> Result<ImageChannelDataType, Error>
Decodes and returns the next SPIR-V word as a SPIR-V ImageChannelDataType value.
pub fn fp_rounding_mode(&mut self) -> Result<FPRoundingMode, Error>
pub fn fp_rounding_mode(&mut self) -> Result<FPRoundingMode, Error>
Decodes and returns the next SPIR-V word as a SPIR-V FPRoundingMode value.
pub fn linkage_type(&mut self) -> Result<LinkageType, Error>
pub fn linkage_type(&mut self) -> Result<LinkageType, Error>
Decodes and returns the next SPIR-V word as a SPIR-V LinkageType value.
pub fn access_qualifier(&mut self) -> Result<AccessQualifier, Error>
pub fn access_qualifier(&mut self) -> Result<AccessQualifier, Error>
Decodes and returns the next SPIR-V word as a SPIR-V AccessQualifier value.
pub fn function_parameter_attribute(
&mut self
) -> Result<FunctionParameterAttribute, Error>
pub fn function_parameter_attribute(
&mut self
) -> Result<FunctionParameterAttribute, Error>
Decodes and returns the next SPIR-V word as a SPIR-V FunctionParameterAttribute value.
pub fn decoration(&mut self) -> Result<Decoration, Error>
pub fn decoration(&mut self) -> Result<Decoration, Error>
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.
pub fn group_operation(&mut self) -> Result<GroupOperation, Error>
pub fn group_operation(&mut self) -> Result<GroupOperation, Error>
Decodes and returns the next SPIR-V word as a SPIR-V GroupOperation value.
pub fn kernel_enqueue_flags(&mut self) -> Result<KernelEnqueueFlags, Error>
pub fn kernel_enqueue_flags(&mut self) -> Result<KernelEnqueueFlags, Error>
Decodes and returns the next SPIR-V word as a SPIR-V KernelEnqueueFlags value.
pub fn capability(&mut self) -> Result<Capability, Error>
pub fn capability(&mut self) -> Result<Capability, Error>
Decodes and returns the next SPIR-V word as a SPIR-V Capability value.
pub fn ray_query_intersection(&mut self) -> Result<RayQueryIntersection, Error>
pub fn ray_query_intersection(&mut self) -> Result<RayQueryIntersection, Error>
Decodes and returns the next SPIR-V word as a SPIR-V RayQueryIntersection value.
pub fn ray_query_committed_intersection_type(
&mut self
) -> Result<RayQueryCommittedIntersectionType, Error>
pub fn ray_query_committed_intersection_type(
&mut self
) -> Result<RayQueryCommittedIntersectionType, Error>
Decodes and returns the next SPIR-V word as a SPIR-V RayQueryCommittedIntersectionType value.
pub fn ray_query_candidate_intersection_type(
&mut self
) -> Result<RayQueryCandidateIntersectionType, Error>
pub fn ray_query_candidate_intersection_type(
&mut self
) -> Result<RayQueryCandidateIntersectionType, Error>
Decodes and returns the next SPIR-V word as a SPIR-V RayQueryCandidateIntersectionType value.