mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 11:48:06 +02:00
ac/nir: use u_foreach_bit more
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35345>
This commit is contained in:
parent
896dd9bc93
commit
b31f73a1b1
2 changed files with 7 additions and 26 deletions
|
|
@ -703,10 +703,8 @@ ngg_gs_build_streamout(nir_builder *b, lower_ngg_gs_state *s)
|
|||
nir_def *gen_prim[4] = {0};
|
||||
nir_def *export_seq[4] = {0};
|
||||
nir_def *out_vtx_primflag[4] = {0};
|
||||
for (unsigned stream = 0; stream < 4; stream++) {
|
||||
if (!(info->streams_written & BITFIELD_BIT(stream)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(stream, info->streams_written) {
|
||||
out_vtx_primflag[stream] =
|
||||
ngg_gs_load_out_vtx_primflag(b, stream, tid_in_tg, out_vtx_lds_addr, max_vtxcnt, s);
|
||||
|
||||
|
|
@ -757,10 +755,7 @@ ngg_gs_build_streamout(nir_builder *b, lower_ngg_gs_state *s)
|
|||
s->options->use_gfx12_xfb_intrinsic, s->lds_addr_gs_out_vtx, tid_in_tg,
|
||||
gen_prim, so_buffer, buffer_offsets, emit_prim);
|
||||
|
||||
for (unsigned stream = 0; stream < 4; stream++) {
|
||||
if (!(info->streams_written & BITFIELD_BIT(stream)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(stream, info->streams_written) {
|
||||
nir_def *can_emit = nir_ilt(b, export_seq[stream], emit_prim[stream]);
|
||||
nir_if *if_emit = nir_push_if(b, nir_iand(b, can_emit, prim_live[stream]));
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1058,10 +1058,8 @@ ac_nir_ngg_build_streamout_buffer_info(nir_builder *b,
|
|||
* num-vert-per-prim for writing correct amount of data to buffer.
|
||||
*/
|
||||
nir_def *num_vert_per_prim = nir_load_num_vertices_per_primitive_amd(b);
|
||||
for (unsigned buffer = 0; buffer < 4; buffer++) {
|
||||
if (!(info->buffers_written & BITFIELD_BIT(buffer)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(buffer, info->buffers_written) {
|
||||
assert(info->buffers[buffer].stride);
|
||||
|
||||
prim_stride[buffer] =
|
||||
|
|
@ -1244,10 +1242,7 @@ ac_nir_ngg_build_streamout_buffer_info(nir_builder *b,
|
|||
nir_def *any_overflow = nir_imm_false(b);
|
||||
nir_def *overflow_amount[4] = {undef, undef, undef, undef};
|
||||
|
||||
for (unsigned buffer = 0; buffer < 4; buffer++) {
|
||||
if (!(info->buffers_written & BITFIELD_BIT(buffer)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(buffer, info->buffers_written) {
|
||||
nir_def *buffer_size = nir_channel(b, so_buffer_ret[buffer], 2);
|
||||
|
||||
/* Only consider overflow for valid feedback buffers because
|
||||
|
|
@ -1313,10 +1308,7 @@ ac_nir_ngg_build_streamout_buffer_info(nir_builder *b,
|
|||
}
|
||||
|
||||
/* Save to LDS for being accessed by other waves in this workgroup. */
|
||||
for (unsigned stream = 0; stream < 4; stream++) {
|
||||
if (!(info->streams_written & BITFIELD_BIT(stream)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(stream, info->streams_written) {
|
||||
nir_store_shared(b, emit_prim[stream], scratch_base, .base = 16 + stream * 4);
|
||||
}
|
||||
|
||||
|
|
@ -1340,19 +1332,13 @@ ac_nir_ngg_build_streamout_buffer_info(nir_builder *b,
|
|||
.memory_modes = nir_var_mem_shared);
|
||||
|
||||
/* Fetch the per-buffer offsets in all waves. */
|
||||
for (unsigned buffer = 0; buffer < 4; buffer++) {
|
||||
if (!(info->buffers_written & BITFIELD_BIT(buffer)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(buffer, info->buffers_written) {
|
||||
buffer_offsets_ret[buffer] =
|
||||
nir_load_shared(b, 1, 32, scratch_base, .base = buffer * 4);
|
||||
}
|
||||
|
||||
/* Fetch the per-stream emit prim in all waves. */
|
||||
for (unsigned stream = 0; stream < 4; stream++) {
|
||||
if (!(info->streams_written & BITFIELD_BIT(stream)))
|
||||
continue;
|
||||
|
||||
u_foreach_bit(stream, info->streams_written) {
|
||||
emit_prim_ret[stream] =
|
||||
nir_load_shared(b, 1, 32, scratch_base, .base = 16 + stream * 4);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue