asahi: cl-ify some xfb logic

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26963>
This commit is contained in:
Alyssa Rosenzweig
2024-01-02 18:01:31 -04:00
parent 76e8a68249
commit 9d78e40735
2 changed files with 16 additions and 8 deletions

View File

@@ -631,14 +631,6 @@ write_xfb(nir_builder *b, struct lower_gs_state *state, unsigned stream,
unsigned count = util_bitcount(output.component_mask);
for (unsigned vert = 0; vert < verts; ++vert) {
nir_def *index = nir_iadd_imm(b, base_index, vert);
nir_def *xfb_offset =
nir_iadd_imm(b, nir_imul_imm(b, index, stride), output.offset);
nir_def *buf = load_geometry_param(b, xfb_base[buffer]);
nir_def *addr = nir_iadd(b, buf, nir_u2u64(b, xfb_offset));
/* We write out the vertices backwards, since 0 is the current
* emitted vertex (which is actually the last vertex).
*
@@ -657,6 +649,11 @@ write_xfb(nir_builder *b, struct lower_gs_state *state, unsigned stream,
*/
value = nir_pad_vector_imm_int(b, value, 0, 4);
nir_def *addr = libagx_xfb_vertex_address(
b, nir_load_geometry_param_buffer_agx(b), base_index,
nir_imm_int(b, vert), nir_imm_int(b, buffer),
nir_imm_int(b, stride), nir_imm_int(b, output.offset));
nir_store_global(b, addr, 4,
nir_channels(b, value, output.component_mask),
nir_component_mask(count));

View File

@@ -12,6 +12,17 @@ align(uint x, uint y)
return (x + 1) & ~(y - 1);
}
uint64_t
libagx_xfb_vertex_address(global struct agx_geometry_params *p, uint base_index,
uint vert, uint buffer, uint stride,
uint output_offset)
{
uint index = base_index + vert;
uint xfb_offset = (index * stride) + output_offset;
return (uintptr_t)(p->xfb_base[buffer]) + xfb_offset;
}
/* TODO: Primitive restart */
uint
libagx_vertex_id_for_topology(enum mesa_prim mode, bool flatshade_first,