vk/pass: Emit a flushing pipe control at the end of the pass
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 14 May 2015 05:13:05 +0000 (22:13 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 14 May 2015 05:23:30 +0000 (22:23 -0700)
This is rather crude but it at least makes sure that all the render targets
get flushed at the end of the pass.  We probably actually want to do
somthing based on image layout traansitions, but this will work for now.

src/vulkan/device.c

index d5eab4866d4172dee680915d09f4f23e2e3ebcb7..cf855a87387d7d8bfaf29d9f7f97b4983928ea7e 100644 (file)
@@ -2774,5 +2774,20 @@ void VKAPI vkCmdEndRenderPass(
     VkCmdBuffer                                 cmdBuffer,
     VkRenderPass                                renderPass)
 {
+   /* Emit a flushing pipe control at the end of a pass.  This is kind of a
+    * hack but it ensures that render targets always actually get written.
+    * Eventually, we should do flushing based on image format transitions
+    * or something of that nature.
+    */
+   struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *)cmdBuffer;
+   anv_batch_emit(&cmd_buffer->batch, GEN8_PIPE_CONTROL,
+                  .PostSyncOperation = NoWrite,
+                  .RenderTargetCacheFlushEnable = true,
+                  .InstructionCacheInvalidateEnable = true,
+                  .DepthCacheFlushEnable = true,
+                  .VFCacheInvalidationEnable = true,
+                  .TextureCacheInvalidationEnable = true,
+                  .CommandStreamerStallEnable = true);
+
    stub();
 }