From abdf396cbeaec2bfe9da2fd773d42fa3022ca8b5 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 12 Sep 2018 23:20:38 +0200 Subject: [PATCH] radv: fix VK_EXT_conditional_rendering visibility It's actually just the opposite. This fixes the new Sascha conditionalrender demo. CC: 18.2 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/vulkan/radv_cmd_buffer.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 33b65b9e771..5b2a45f5cee 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -4468,19 +4468,27 @@ void radv_CmdBeginConditionalRenderingEXT( { RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer); RADV_FROM_HANDLE(radv_buffer, buffer, pConditionalRenderingBegin->buffer); - bool inverted; + bool draw_visible = true; uint64_t va; va = radv_buffer_get_va(buffer->bo) + pConditionalRenderingBegin->offset; - inverted = pConditionalRenderingBegin->flags & VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT; + /* By default, if the 32-bit value at offset in buffer memory is zero, + * then the rendering commands are discarded, otherwise they are + * executed as normal. If the inverted flag is set, all commands are + * discarded if the value is non zero. + */ + if (pConditionalRenderingBegin->flags & + VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT) { + draw_visible = false; + } /* Enable predication for this command buffer. */ - si_emit_set_predication_state(cmd_buffer, inverted, va); + si_emit_set_predication_state(cmd_buffer, draw_visible, va); cmd_buffer->state.predicating = true; /* Store conditional rendering user info. */ - cmd_buffer->state.predication_type = inverted; + cmd_buffer->state.predication_type = draw_visible; cmd_buffer->state.predication_va = va; } -- 2.30.2