radeonsi: fix ARB_transform_feedback_overflow_query on <= VI
The result written by the shader workaround needs to be written back, or
the CP may read stale data.
Fixes: 78476cfe07
("radeonsi: enable ARB_transform_feedback_overflow_query")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -454,6 +454,11 @@ struct r600_common_screen {
|
||||
*/
|
||||
unsigned cp_to_L2;
|
||||
|
||||
/* Context flags to set so that all writes from earlier jobs
|
||||
* that end in L2 are seen by CP.
|
||||
*/
|
||||
unsigned L2_to_cp;
|
||||
|
||||
/* Context flags to set so that all writes from earlier
|
||||
* compute jobs are seen by L2 clients.
|
||||
*/
|
||||
|
@@ -1833,6 +1833,10 @@ static void r600_render_condition(struct pipe_context *ctx,
|
||||
ctx, query, true, PIPE_QUERY_TYPE_U64, 0,
|
||||
&rquery->workaround_buf->b.b, rquery->workaround_offset);
|
||||
|
||||
/* Settings this in the render cond atom is too late,
|
||||
* so set it here. */
|
||||
rctx->flags |= rctx->screen->barrier_flags.L2_to_cp;
|
||||
|
||||
atom->num_dw = 5;
|
||||
|
||||
rctx->render_cond_force_off = old_force_off;
|
||||
|
@@ -1078,8 +1078,10 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws,
|
||||
|
||||
sscreen->b.barrier_flags.cp_to_L2 = SI_CONTEXT_INV_SMEM_L1 |
|
||||
SI_CONTEXT_INV_VMEM_L1;
|
||||
if (sscreen->b.chip_class <= VI)
|
||||
if (sscreen->b.chip_class <= VI) {
|
||||
sscreen->b.barrier_flags.cp_to_L2 |= SI_CONTEXT_INV_GLOBAL_L2;
|
||||
sscreen->b.barrier_flags.L2_to_cp |= SI_CONTEXT_WRITEBACK_GLOBAL_L2;
|
||||
}
|
||||
|
||||
sscreen->b.barrier_flags.compute_to_L2 = SI_CONTEXT_CS_PARTIAL_FLUSH;
|
||||
|
||||
|
Reference in New Issue
Block a user