1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
use crate::shared;
#[repr(u32)] // SPV_FORCE_32_BIT_ENUM
pub enum BinaryOptions {
None = 0x1,
PreserveNumberIds = 1 << 1,
}
#[repr(C)]
pub struct Text {
pub data: *const std::os::raw::c_char,
pub length: usize,
}
pub enum DisassembleOptions {
None = 0x1,
/// Print to stdout
Print = 0x2,
/// Add color codes to output
Color = 0x4,
/// Indent assembly
Indent = 0x8,
ShowByteOffset = 0x10,
/// Do not output the module header as leading comments in the assembly.
NoHeader = 0x20,
/// Use friendly names where possible. The heuristic may expand over
/// time, but will use common names for scalar types, and debug names from
/// `OpName` instructions.
FriendlyNames = 0x40,
/// Add some comments to the generated assembly
Comment = 0x80,
}
unsafe extern "C" {
/// Encodes the given SPIR-V assembly text to its binary representation. The
/// length parameter specifies the number of bytes for text. Encoded binary will
/// be stored into *binary. Any error will be written into *diagnostic if
/// diagnostic is non-null, otherwise the context's message consumer will be
/// used. The generated binary is independent of the context and may outlive it.
/// The SPIR-V binary version is set to the highest version of SPIR-V supported
/// by the context's target environment.
///
/// The options parameter is a bit field of
/// `spv_text_to_binary_options_t`.
#[link_name = "spvTextToBinaryWithOptions"]
pub fn assemble(
tool: *const shared::ToolContext,
text: *const std::os::raw::c_char,
size: usize,
options: u32,
binary: *mut *mut shared::Binary,
diagnostic: *mut *mut crate::diagnostics::Diagnostic,
) -> shared::SpirvResult;
/// Decodes the given SPIR-V binary representation to its assembly text. The
/// `word_count` parameter specifies the number of words for binary. The options
/// parameter is a bit field of `spv_binary_to_text_options_t`. Decoded text will
/// be stored into *text. Any error will be written into *diagnostic if
/// diagnostic is non-null, otherwise the context's message consumer will be
/// used.
#[link_name = "spvBinaryToText"]
pub fn disassemble(
tool: *const shared::ToolContext,
binary: *const u32,
size: usize,
options: u32,
out_text: *mut *mut Text,
diagnostic: *mut *mut crate::diagnostics::Diagnostic,
) -> shared::SpirvResult;
/// Frees an allocated text stream. This is a no-op if the text parameter
/// is a null pointer.
#[link_name = "spvTextDestroy"]
pub fn text_destroy(text: *mut Text);
}