spq-spvasm 0.1.4

Tools for SPIR-V Assembly interaction.
Documentation
import json

name2op = {}
with open("assets/spirv/spirv.core.grammar.json") as f:
    j = json.load(f)

for instr in j["instructions"]:
    opname = instr["opname"]
    opcode = instr["opcode"]

    assert opname not in name2op
    name2op[opname] = opcode

out = []

out += [
    "use anyhow::{bail, Result};",
    "",
    "pub fn op_from_str(opname: &str) -> Result<u32> {",
    "    let out: u32 = match opname {",
]

for opname, opcode in name2op.items():
    out += [f'        "{opname}" => {opcode},']

out += [
    '        _ => bail!("Unknown opname: {}", opname),',
    "    };",
    "    Ok(out)",
    "}",
    "",
]

with open("spq-spvasm/src/generated/op_from_str.rs", "w") as f:
    f.write("\n".join(out))