diff --git a/src/asahi/lib/cmdbuf.xml b/src/asahi/lib/cmdbuf.xml index c28f3430348..2a13fddadba 100644 --- a/src/asahi/lib/cmdbuf.xml +++ b/src/asahi/lib/cmdbuf.xml @@ -129,14 +129,22 @@ - + - + + + + + + + + - + + diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 5267b817d93..26b99367fd6 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -831,7 +831,7 @@ agx_update_shader(struct agx_context *ctx, struct agx_compiled_shader **out, compiled->varying_count = varying_count; - unsigned varying_desc_len = AGX_VARYING_HEADER_LENGTH + varying_count * AGX_VARYING_LENGTH; + unsigned varying_desc_len = AGX_VARYING_HEADER_LENGTH + (1 + varying_count) * AGX_VARYING_LENGTH; uint8_t *varying_desc = calloc(1, varying_desc_len); agx_pack(varying_desc, VARYING_HEADER, cfg) { @@ -839,10 +839,18 @@ agx_update_shader(struct agx_context *ctx, struct agx_compiled_shader **out, cfg.slots_2 = 1 + (4 * varying_count); } + agx_pack(varying_desc + AGX_VARYING_HEADER_LENGTH, VARYING, cfg) { + cfg.type = AGX_VARYING_TYPE_FRAGCOORD_W; + cfg.slot_1 = 0; + cfg.slot_2 = 0; + cfg.components = 4; + } + for (unsigned i = 0; i < varying_count; ++i) { - agx_pack(varying_desc + AGX_VARYING_HEADER_LENGTH + (i * AGX_VARYING_LENGTH), VARYING, cfg) { + agx_pack(varying_desc + AGX_VARYING_HEADER_LENGTH + ((i + 1) * AGX_VARYING_LENGTH), VARYING, cfg) { cfg.slot_1 = 1 + (4 * i); cfg.slot_2 = 1 + (4 * i); + cfg.components = 4; } }