radv: Do a cache flush if needed before reading predicates.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 30 Dec 2018 22:37:11 +0000 (23:37 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Mon, 31 Dec 2018 19:52:08 +0000 (20:52 +0100)
This caused random failures for two conditional rendering tests:

dEQP-VK.conditional_rendering.draw_clear.draw.update_with_rendering_discard
dEQP-VK.conditional_rendering.draw_clear.draw.update_with_rendering_no_discard

These wrote the predicate with the vertex shader, did a barrier and then
started the conditional rendering. However the cache flushes for the barrier
only happen on first draw, so after the predicate has been read.

Fixes: e45ba51ea45 "radv: add support for VK_EXT_conditional_rendering"
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_cmd_buffer.c

index 3361df1f345aae994410d6670a0d262fca586799..1966098e08c59e09388870623e7ec490d53dc6e1 100644 (file)
@@ -4761,6 +4761,8 @@ void radv_CmdBeginConditionalRenderingEXT(
                draw_visible = false;
        }
 
+       si_emit_cache_flush(cmd_buffer);
+
        /* Enable predication for this command buffer. */
        si_emit_set_predication_state(cmd_buffer, draw_visible, va);
        cmd_buffer->state.predicating = true;