<div dir="ltr"><div>Nice and clean!  R-b still applies.<br><br></div>I think I've reviewed everything now.  If there's still something missing, let me know.  May also want to give Chad a chance.<br><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 6, 2016 at 3:21 PM, Nanley Chery <span dir="ltr"><<a href="mailto:nanleychery@gmail.com" target="_blank">nanleychery@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Provides an FPS increase of ~30% on the Sascha triangle and multisampling<br>
demos.<br>
<br>
Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> (v2)<br>
<br>
---<br>
v3. Emit required clear_params packet (Chad)<br>
    Share clear_params code path IVB+ (Jason)<br>
<br>
 src/intel/vulkan/anv_pass.c        | 13 +++++++++++++<br>
 src/intel/vulkan/genX_cmd_<wbr>buffer.c | 24 ++++++++++++++++++++++--<br>
 2 files changed, 35 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_pass.c b/src/intel/vulkan/anv_pass.c<br>
index 69c3c7e..595c2ea 100644<br>
--- a/src/intel/vulkan/anv_pass.c<br>
+++ b/src/intel/vulkan/anv_pass.c<br>
@@ -155,5 +155,18 @@ void anv_GetRenderAreaGranularity(<br>
     VkRenderPass                                renderPass,<br>
     VkExtent2D*                                 pGranularity)<br>
 {<br>
+   ANV_FROM_HANDLE(anv_render_<wbr>pass, pass, renderPass);<br>
+<br>
+   /* This granularity satisfies HiZ fast clear alignment requirements<br>
+    * for all sample counts.<br>
+    */<br>
+   for (unsigned i = 0; i < pass->subpass_count; ++i) {<br>
+      if (pass->subpasses[i].depth_<wbr>stencil_attachment !=<br>
+          VK_ATTACHMENT_UNUSED) {<br>
+         *pGranularity = (VkExtent2D) { .width = 8, .height = 4 };<br>
+         return;<br>
+      }<br>
+   }<br>
+<br>
    *pGranularity = (VkExtent2D) { 1, 1 };<br>
 }<br>
diff --git a/src/intel/vulkan/genX_cmd_<wbr>buffer.c b/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
index ed6a109..4089fc7 100644<br>
--- a/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
+++ b/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
@@ -1318,8 +1318,27 @@ cmd_buffer_emit_depth_stencil(<wbr>struct anv_cmd_buffer *cmd_buffer)<br>
       anv_batch_emit(&cmd_buffer-><wbr>batch, GENX(3DSTATE_STENCIL_BUFFER), sb);<br>
    }<br>
<br>
-   /* Clear the clear params. */<br>
-   anv_batch_emit(&cmd_buffer-><wbr>batch, GENX(3DSTATE_CLEAR_PARAMS), cp);<br>
+   /* From the IVB PRM Vol2P1, 11.5.5.4 3DSTATE_CLEAR_PARAMS:<br>
+    *<br>
+    *    3DSTATE_CLEAR_PARAMS must always be programmed in the along with<br>
+    *    the other Depth/Stencil state commands(i.e. 3DSTATE_DEPTH_BUFFER,<br>
+    *    3DSTATE_STENCIL_BUFFER, or 3DSTATE_HIER_DEPTH_BUFFER)<br>
+    *<br>
+    * Testing also shows that some variant of this restriction may exist HSW+.<br>
+    * On BDW+, it is not possible to emit 2 of these packets consecutively when<br>
+    * both have DepthClearValueValid set. An analysis of such state programming<br>
+    * on SKL showed that the GPU doesn't register the latter packet's clear<br>
+    * value.<br>
+    */<br>
+   anv_batch_emit(&cmd_buffer-><wbr>batch, GENX(3DSTATE_CLEAR_PARAMS), cp) {<br>
+      if (has_hiz) {<br>
+         cp.DepthClearValueValid = true;<br>
+         const uint32_t ds =<br>
+            cmd_buffer->state.subpass-><wbr>depth_stencil_attachment;<br>
+         cp.DepthClearValue =<br>
+            cmd_buffer->state.attachments[<wbr>ds].clear_value.depthStencil.<wbr>depth;<br>
+      }<br>
+   }<br>
 }<br>
<br>
 static void<br>
@@ -1332,6 +1351,7 @@ genX(cmd_buffer_set_subpass)(<wbr>struct anv_cmd_buffer *cmd_buffer,<br>
<br>
    cmd_buffer_emit_depth_stencil(<wbr>cmd_buffer);<br>
    genX(cmd_buffer_emit_hz_op)(<wbr>cmd_buffer, BLORP_HIZ_OP_HIZ_RESOLVE);<br>
+   genX(cmd_buffer_emit_hz_op)(<wbr>cmd_buffer, BLORP_HIZ_OP_DEPTH_CLEAR);<br>
<br>
    anv_cmd_buffer_clear_subpass(<wbr>cmd_buffer);<br>
 }<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.10.0<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div></div></div>