| bool | codegenNativeSlotIsPackable(eval::Type t) |
| int | codegenSlotTotalFloatWidth(const eval::internal::CodegenSlot &s) |
| bool | compileUnitToSpirv(eval::internal::GlslLane lane, const QVector<eval::internal::CodegenSlot> &inputs, const QVector<eval::internal::CodegenSlot> &outputs, const QStringList &expressions, const QString &prelude, QByteArray *spirv, QString *diagnostic, int *blamedOutput = nullptr, int *blamedElement = nullptr) |
| int | glslProbeParseCount() |
`SUP-49` step 4 — does the native emitter have a slot case for t?
The native lane and the SPIR-V lane share `slotFloatWidth`, so widening a type there widens the offsets BOTH lanes hand out — and the native emitter only reads what it has a case for. A type this table widens and `Codegen::emit`'s prologue does not reconstruct would read too few floats and shift every later slot down the buffer: silently, and into plausible numbers rather than an error.
So the emitter's case list is stated once, here, and `Graph::compile` refuses `Backend::Native` for a slot it does not cover. `isUnsupported` cannot stand in for this — it walks the expression AST and never sees the SLOT types, which is the same blind spot §SUR-69 and §SUR-71 each cost a defect to find. `testEvalUnit::nativeSlotEmissionMatchesTheAbiWidth` asks the generated C++ rather than this predicate, because a predicate cannot see a defect in the code it describes.
`Int64`/`Uint64` are NOT listed, and the reason is the ruling rather than the mechanism: `int64_t` does not appear in the GLSL 4.60 specification at all — it is `GL_ARB_gpu_shader_int64` — so [§SUL-9a](../../../../content/doc/internal/specs/spirv-unified-lowering/index.md) puts it outside the set this project implements. The `default` branch would round-trip one through a `float` and lose every bit past the 24th, which is the silent degradation §SUT-3a forbids.
The double vector and matrix shapes are absent for a different reason: they are core GLSL and they are implemented on the SPIR-V lane, but this emitter has no `DV3`/`DM3` C++ type to reconstruct them into. `Codegen::isUnsupported` already refuses an expression of that type; this makes the SLOT refusal explicit instead of leaving it to that coincidence.
`SUP-5` — the compile half, shared by the interpreter lane and the GPU lane. See the header for why it is split rather than duplicated.
Everything else is deliberately unresolved rather than approximated.
`EbtInt64`/`EbtUint64` land here, and that is correct rather than a gap: §SUR-66 records the owner's ruling that `int64_t` does not appear in GLSL 4.60 — it is `GL_ARB_gpu_shader_int64` — so it is outside the set this project implements. Sampler, image, struct and float16 types land here too; none can cross the flat float ABI, and returning `Void` makes the caller decline with glslang's own words rather than inventing a shape.