<div dir="ltr"><div dir="ltr" class="gmail_msg">In Skia, we were running into a rendering bug where we would render to a VkImage and then immediately do another draw to a second VkImage sampling the first as a texture (with memory barrier in between). All our draws go through secondary command buffers. On certain hardware, the effects of draws to the first VkImage were not there when we sampled it in the next draw (we would just get whatever values were in the VkImage previously). We had double checked all our memory barriers and other synchronization, ran all the code through the SDK debug layers, and other general debugging and none of this showed any sort of error on our part.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">After patching the above fix to flush before execute the secondary buffers, all our unit and rendering tests started passing/drawing correctly.</div></div><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Greg</div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Fri, Mar 24, 2017 at 7:33 PM Jason Ekstrand <<a href="mailto:jason@jlekstrand.net" class="gmail_msg" target="_blank">jason@jlekstrand.net</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">This apparently fixes rendering corruptions on the Vulkan port of Skia on some hardware.<br class="gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Fri, Mar 24, 2017 at 4:31 PM, Jason Ekstrand <span dir="ltr" class="gmail_msg"><<a href="mailto:jason@jlekstrand.net" class="gmail_msg" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Cc: "13.0 17.0" <<a href="mailto:mesa-stable@lists.freedesktop.org" class="gmail_msg" target="_blank">mesa-stable@lists.freedesktop.org</a>><br class="gmail_msg">
---<br class="gmail_msg">
 src/intel/vulkan/genX_cmd_buffer.c | 5 +++++<br class="gmail_msg">
 1 file changed, 5 insertions(+)<br class="gmail_msg">
<br class="gmail_msg">
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c<br class="gmail_msg">
index e2364db..8ec882e 100644<br class="gmail_msg">
--- a/src/intel/vulkan/genX_cmd_buffer.c<br class="gmail_msg">
+++ b/src/intel/vulkan/genX_cmd_buffer.c<br class="gmail_msg">
@@ -654,6 +654,11 @@ genX(CmdExecuteCommands)(<br class="gmail_msg">
     */<br class="gmail_msg">
    genX(cmd_buffer_enable_pma_fix)(primary, false);<br class="gmail_msg">
<br class="gmail_msg">
+   /* The secondary command buffer doesn't know which textures etc. have been<br class="gmail_msg">
+    * flushed prior to their execution.  Apply those flushes now.<br class="gmail_msg">
+    */<br class="gmail_msg">
+   genX(cmd_buffer_apply_pipe_flushes)(primary);<br class="gmail_msg">
+<br class="gmail_msg">
    for (uint32_t i = 0; i < commandBufferCount; i++) {<br class="gmail_msg">
       ANV_FROM_HANDLE(anv_cmd_buffer, secondary, pCmdBuffers[i]);</blockquote></div></div><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
<span class="m_-5723403521641589556m_5283136214864655547HOEnZb gmail_msg"><font color="#888888" class="gmail_msg"><br class="gmail_msg">
--<br class="gmail_msg">
2.5.0.400.gff86faf<br class="gmail_msg">
<br class="gmail_msg">
</font></span></blockquote></div></div></blockquote></div></div>