[qfcc] Handle integral aliases in spir-v

Needed for array indexing using unsigned indices.
This commit is contained in:
Bill Currie 2024-12-13 15:02:22 +09:00
parent 74637fffbc
commit 0337a7cd80

View file

@ -1305,6 +1305,19 @@ spirv_compound (const expr_t *e, spirvctx_t *ctx)
return id; return id;
} }
static unsigned
spirv_alias (const expr_t *e, spirvctx_t *ctx)
{
if (e->alias.offset) {
internal_error (e, "offset alias in spir-v");
}
if (!is_integral (e->alias.type)
|| !is_integral (get_type (e->alias.expr))) {
internal_error (e, "non-integral alias in spir-v");
}
return spirv_emit_expr (e->alias.expr, ctx);
}
static unsigned static unsigned
spirv_vector (const expr_t *e, spirvctx_t *ctx) spirv_vector (const expr_t *e, spirvctx_t *ctx)
{ {
@ -1739,6 +1752,7 @@ spirv_emit_expr (const expr_t *e, spirvctx_t *ctx)
[ex_value] = spirv_value, [ex_value] = spirv_value,
[ex_vector] = spirv_vector, [ex_vector] = spirv_vector,
[ex_compound] = spirv_compound, [ex_compound] = spirv_compound,
[ex_alias] = spirv_alias,
[ex_assign] = spirv_assign, [ex_assign] = spirv_assign,
[ex_branch] = spirv_branch, [ex_branch] = spirv_branch,
[ex_return] = spirv_return, [ex_return] = spirv_return,