From 581514d9256ec6f6ad5c3438dbbcd267d6c03015 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 11 Aug 2023 17:07:59 -0400 Subject: [PATCH] asahi: Dirty track VBOs + blend const separately We're staging everything anyway. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/asahi/agx_state.c | 9 +++++++++ src/gallium/drivers/asahi/agx_state.h | 1 + src/gallium/drivers/asahi/agx_uniforms.c | 15 ++++++++------- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c index 0773a45..aad0147 100644 --- a/src/gallium/drivers/asahi/agx_state.c +++ b/src/gallium/drivers/asahi/agx_state.c @@ -2622,6 +2622,15 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out, bool is_lines, agx_update_descriptors(batch, ctx->vs, PIPE_SHADER_VERTEX); agx_update_descriptors(batch, ctx->fs, PIPE_SHADER_FRAGMENT); + if (IS_DIRTY(VERTEX)) { + agx_upload_vbos(batch); + } + + if (IS_DIRTY(BLEND_COLOR)) { + memcpy(batch->uniforms.blend_constant, &ctx->blend_color, + sizeof(ctx->blend_color)); + } + if (IS_DIRTY(VS) || IS_DIRTY(FS) || IS_DIRTY(VERTEX) || IS_DIRTY(BLEND_COLOR)) { diff --git a/src/gallium/drivers/asahi/agx_state.h b/src/gallium/drivers/asahi/agx_state.h index 1e120ff..7baf50e 100644 --- a/src/gallium/drivers/asahi/agx_state.h +++ b/src/gallium/drivers/asahi/agx_state.h @@ -707,6 +707,7 @@ agx_transfer(struct pipe_transfer *p) return (struct agx_transfer *)p; } +void agx_upload_vbos(struct agx_batch *batch); void agx_upload_uniforms(struct agx_batch *batch); uint64_t agx_upload_stage_uniforms(struct agx_batch *batch, uint64_t textures, diff --git a/src/gallium/drivers/asahi/agx_uniforms.c b/src/gallium/drivers/asahi/agx_uniforms.c index c356306..ca4d8cc 100644 --- a/src/gallium/drivers/asahi/agx_uniforms.c +++ b/src/gallium/drivers/asahi/agx_uniforms.c @@ -51,6 +51,14 @@ agx_vertex_buffer_ptr(struct agx_batch *batch, unsigned vbo) } void +agx_upload_vbos(struct agx_batch *batch) +{ + u_foreach_bit(vbo, batch->ctx->vb_mask) { + batch->uniforms.vbo_base[vbo] = agx_vertex_buffer_ptr(batch, vbo); + } +} + +void agx_upload_uniforms(struct agx_batch *batch) { struct agx_context *ctx = batch->ctx; @@ -61,10 +69,6 @@ agx_upload_uniforms(struct agx_batch *batch) batch->uniforms.tables[AGX_SYSVAL_TABLE_ROOT] = root_ptr.gpu; batch->uniforms.sample_mask = ctx->sample_mask; - u_foreach_bit(vbo, ctx->vb_mask) { - batch->uniforms.vbo_base[vbo] = agx_vertex_buffer_ptr(batch, vbo); - } - if (ctx->streamout.key.active) { batch->uniforms.xfb = ctx->streamout.params; @@ -76,9 +80,6 @@ agx_upload_uniforms(struct agx_batch *batch) } } - memcpy(batch->uniforms.blend_constant, &ctx->blend_color, - sizeof(ctx->blend_color)); - memcpy(root_ptr.cpu, &batch->uniforms, sizeof(batch->uniforms)); } -- 2.7.4