summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>2024-04-23 11:36:15 -0400
committerMarge Bot <emma+marge@anholt.net>2024-05-14 04:57:27 +0000
commit96521fbce3589470772414cc05d240e18ef52ccd (patch)
tree2229c742d2163a00ef94f7f221252f92a90053bc /src
parent59d2b7283c9ce5c465f13f14683446b005f9e436 (diff)
asahi: use ppp_merge
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29179>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/asahi/agx_state.c31
1 files changed, 8 insertions, 23 deletions
diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c
index 0391657f19f..c3e424d3f8e 100644
--- a/src/gallium/drivers/asahi/agx_state.c
+++ b/src/gallium/drivers/asahi/agx_state.c
@@ -3512,27 +3512,18 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out)
* main fragment control word and has to be combined into the secondary
* word for reliable behaviour.
*/
- struct agx_fragment_control_packed fc;
- agx_pack(&fc, FRAGMENT_CONTROL, cfg) {
+ agx_ppp_push_merged(&ppp, FRAGMENT_CONTROL, cfg,
+ ctx->linked.fs->fragment_control) {
cfg.tag_write_disable = rast->base.rasterizer_discard;
}
-
- agx_merge(fc, ctx->linked.fs->fragment_control, FRAGMENT_CONTROL);
-
- agx_ppp_push_packed(&ppp, &fc, FRAGMENT_CONTROL);
}
if (dirty.fragment_front_face) {
- struct agx_fragment_face_packed front_face;
- agx_pack(&front_face, FRAGMENT_FACE, cfg) {
+ agx_ppp_push_merged(&ppp, FRAGMENT_FACE, cfg, ctx->zs->depth) {
cfg.stencil_reference = ctx->stencil_ref.ref_value[0];
cfg.line_width = rast->line_width;
cfg.polygon_mode = rast->polygon_mode;
- };
-
- front_face.opaque[0] |= ctx->zs->depth.opaque[0];
-
- agx_ppp_push_packed(&ppp, &front_face, FRAGMENT_FACE);
+ }
}
if (dirty.fragment_front_face_2)
@@ -3544,17 +3535,12 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out)
}
if (dirty.fragment_back_face) {
- struct agx_fragment_face_packed back_face;
-
- agx_pack(&back_face, FRAGMENT_FACE, cfg) {
+ agx_ppp_push_merged(&ppp, FRAGMENT_FACE, cfg, ctx->zs->depth) {
bool twosided = ctx->zs->base.stencil[1].enabled;
cfg.stencil_reference = ctx->stencil_ref.ref_value[twosided ? 1 : 0];
cfg.line_width = rast->line_width;
cfg.polygon_mode = rast->polygon_mode;
- };
-
- back_face.opaque[0] |= ctx->zs->depth.opaque[0];
- agx_ppp_push_packed(&ppp, &back_face, FRAGMENT_FACE);
+ }
}
if (dirty.fragment_back_face_2)
@@ -3567,9 +3553,8 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out)
assert(dirty.varying_counts_32 == dirty.output_select);
if (dirty.output_select) {
- struct agx_output_select_packed osel = vs->uvs.osel;
- agx_merge(osel, ctx->linked.fs->osel, OUTPUT_SELECT);
- agx_ppp_push_packed(&ppp, &osel, OUTPUT_SELECT);
+ agx_ppp_push_merged_blobs(&ppp, AGX_OUTPUT_SELECT_LENGTH, &vs->uvs.osel,
+ &ctx->linked.fs->osel);
agx_ppp_push_packed(&ppp, &batch->linked_varyings.counts_32,
VARYING_COUNTS);