diff --git a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c index d9848b62e78..999cc146d81 100644 --- a/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c +++ b/src/gallium/drivers/asahi/agx_nir_lower_sysvals.c @@ -149,6 +149,9 @@ lower_intrinsic(nir_builder *b, nir_intrinsic_instr *intr, case nir_intrinsic_load_ssbo_address: return load_sysval_indirect(b, 1, 64, stage_table(b), &s->ssbo_base, intr->src[0].ssa); + case nir_intrinsic_get_ubo_size: + return load_sysval_indirect(b, 1, 32, stage_table(b), &s->ubo_size, + intr->src[0].ssa); case nir_intrinsic_get_ssbo_size: return load_sysval_indirect(b, 1, 32, stage_table(b), &s->ssbo_size, intr->src[0].ssa); diff --git a/src/gallium/drivers/asahi/agx_state.h b/src/gallium/drivers/asahi/agx_state.h index ef0486c8298..803ebc4799d 100644 --- a/src/gallium/drivers/asahi/agx_state.h +++ b/src/gallium/drivers/asahi/agx_state.h @@ -145,6 +145,7 @@ struct PACKED agx_stage_uniforms { /* Uniform buffer objects */ uint64_t ubo_base[PIPE_MAX_CONSTANT_BUFFERS]; + uint32_t ubo_size[PIPE_MAX_CONSTANT_BUFFERS]; /* Shader storage buffer objects */ uint64_t ssbo_base[PIPE_MAX_SHADER_BUFFERS]; diff --git a/src/gallium/drivers/asahi/agx_uniforms.c b/src/gallium/drivers/asahi/agx_uniforms.c index c5c62f7a115..9707d04b4b4 100644 --- a/src/gallium/drivers/asahi/agx_uniforms.c +++ b/src/gallium/drivers/asahi/agx_uniforms.c @@ -103,6 +103,7 @@ agx_upload_stage_uniforms(struct agx_batch *batch, uint64_t textures, u_foreach_bit(cb, st->cb_mask) { uniforms.ubo_base[cb] = agx_const_buffer_ptr(batch, &st->cb[cb]); + uniforms.ubo_size[cb] = st->cb[cb].buffer_size; } u_foreach_bit(cb, st->ssbo_mask) {