- Execution modes (e.g.
LocalSize,OriginUpperLeft) were previously set
viagpu.executionMode(), which used inline assembly to emitOpExecutionMode.
The SPIR-V assembler now rejects this instruction and retrieves execution mode information
from function cc, deletinggpu.executionMode()entirely. - Two new
spirv_taskandspirv_meshcalling conventions are added. PackedCallingConvention.unpack()now takes a trailing data slice.- Replace
decorateBlockOffsetswith a recursive functiondecorateLayout
that walks arrays, vectors, structs, unions, optionals, and error unions,
emittingArrayStrideand memberOffsetdecorations at every
level. Previously we weren't handling nested types. - Restrict
Blockdecoration to struct types with
uniform,push_constant,storage_bufferstorage classes.
Previously we decorated through every pointer, contaminating the cached struct
type so the same shape used as a stack local also picked upBlock. - Lower
ptr_slice_ptr_ptrandptr_slice_len_ptr - No longer emit a redundant
**TtypedOpVariablefor function parameters.
Logical addressing also forbids such variables. - Eliminate dead code from invocation globals unreachable from any entry point.
Reverting the workaround inlib/std/start.zig.
- Execution modes (e.g. `LocalSize`, `OriginUpperLeft`) were previously set
via `gpu.executionMode()`, which used inline assembly to emit `OpExecutionMode`.
The SPIR-V assembler now rejects this instruction and retrieves execution mode information
from function cc, deleting `gpu.executionMode()` entirely.
- Two new `spirv_task` and `spirv_mesh` calling conventions are added.
- `PackedCallingConvention.unpack()` now takes a trailing data slice.
- Replace `decorateBlockOffsets` with a recursive function `decorateLayout`
that walks arrays, vectors, structs, unions, optionals, and error unions,
emitting `ArrayStride` and member `Offset` decorations at every
level. Previously we weren't handling nested types.
- Restrict `Block` decoration to struct types with
`uniform`, `push_constant`, `storage_buffer` storage classes.
Previously we decorated through every pointer, contaminating the cached struct
type so the same shape used as a stack local also picked up `Block`.
- Lower `ptr_slice_ptr_ptr` and `ptr_slice_len_ptr`
- No longer emit a redundant `**T` typed `OpVariable` for function parameters.
Logical addressing also forbids such variables.
- Eliminate dead code from invocation globals unreachable from any entry point.
Reverting the workaround in `lib/std/start.zig`.