mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 18:00:10 +01:00
tu: Fix streamout with tess_use_shared
Mirrors 31835ac3b8 change in freedreno.
Together with "tu: Fix HS input size formula for gen3+" fixes following
tests from GL CTS running via Zink:
dEQP-GLES31.functional.tessellation.invariance.inner_triangle_set.quads_fractional_odd_spacing
dEQP-GLES31.functional.tessellation.invariance.inner_triangle_set.triangles_fractional_odd_spacing
dEQP-GLES31.functional.tessellation.invariance.primitive_set.triangles_fractional_odd_spacing_ccw
dEQP-GLES31.functional.tessellation.invariance.primitive_set.triangles_fractional_odd_spacing_cw
dEQP-GLES31.functional.tessellation.invariance.triangle_set.triangles_fractional_odd_spacing
dEQP-GLES31.functional.tessellation.primitive_discard.quads_fractional_odd_spacing_ccw
dEQP-GLES31.functional.tessellation.primitive_discard.quads_fractional_odd_spacing_cw
dEQP-GLES31.functional.tessellation.primitive_discard.triangles_fractional_odd_spacing_ccw
dEQP-GLES31.functional.tessellation.primitive_discard.triangles_fractional_odd_spacing_cw
Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17957>
This commit is contained in:
parent
0120e7b9d9
commit
a7db1da37d
1 changed files with 26 additions and 1 deletions
|
|
@ -841,11 +841,21 @@ tu6_setup_streamout(struct tu_cs *cs,
|
|||
|
||||
/* no streamout: */
|
||||
if (info->num_outputs == 0) {
|
||||
tu_cs_emit_pkt7(cs, CP_CONTEXT_REG_BUNCH, 4);
|
||||
unsigned sizedw = 4;
|
||||
if (cs->device->physical_device->info->a6xx.tess_use_shared)
|
||||
sizedw += 2;
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_CONTEXT_REG_BUNCH, sizedw);
|
||||
tu_cs_emit(cs, REG_A6XX_VPC_SO_CNTL);
|
||||
tu_cs_emit(cs, 0);
|
||||
tu_cs_emit(cs, REG_A6XX_VPC_SO_STREAM_CNTL);
|
||||
tu_cs_emit(cs, 0);
|
||||
|
||||
if (cs->device->physical_device->info->a6xx.tess_use_shared) {
|
||||
tu_cs_emit(cs, REG_A6XX_PC_SO_STREAM_CNTL);
|
||||
tu_cs_emit(cs, 0);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -894,6 +904,13 @@ tu6_setup_streamout(struct tu_cs *cs,
|
|||
prog_count += end - start + 1;
|
||||
}
|
||||
|
||||
const bool emit_pc_so_stream_cntl =
|
||||
cs->device->physical_device->info->a6xx.tess_use_shared &&
|
||||
v->type == MESA_SHADER_TESS_EVAL;
|
||||
|
||||
if (emit_pc_so_stream_cntl)
|
||||
prog_count += 1;
|
||||
|
||||
tu_cs_emit_pkt7(cs, CP_CONTEXT_REG_BUNCH, 10 + 2 * prog_count);
|
||||
tu_cs_emit(cs, REG_A6XX_VPC_SO_STREAM_CNTL);
|
||||
tu_cs_emit(cs, A6XX_VPC_SO_STREAM_CNTL_STREAM_ENABLE(info->streams_written) |
|
||||
|
|
@ -921,6 +938,14 @@ tu6_setup_streamout(struct tu_cs *cs,
|
|||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
if (emit_pc_so_stream_cntl) {
|
||||
/* Possibly not tess_use_shared related, but the combination of
|
||||
* tess + xfb fails some tests if we don't emit this.
|
||||
*/
|
||||
tu_cs_emit(cs, REG_A6XX_PC_SO_STREAM_CNTL);
|
||||
tu_cs_emit(cs, A6XX_PC_SO_STREAM_CNTL_STREAM_ENABLE(info->streams_written));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue