Skip to main content

1. 代码对象与分段链接

shader 是位置无关代码,PC 为相对 CODE_BASE 的 32-bit byte offset,所有代码放入同一 4 GiB code heap。编译器输出三个可选段:前导(prologue)、主体(body)和尾声(epilogue)。驱动按对齐要求将段 memcpy 拼接为一个代码对象;前一段末尾直接落入下一段,不重新编译、不插入隐式跳转。每段只能引用 ABI 保证的寄存器和相对 PC,段内的 jal 返回地址按 PC+4 解释。

每段元数据包含:ISA/ABI 版本、入口偏移、代码长度、所需 v/u 寄存器上界、scratch 字节数、使用的描述符集合、waitcnt 计数器上界和可选能力(FP64、image atomics 等)。驱动在提交前检查能力;不支持的 optional 指令不得静默执行。