<div dir="ltr">Fixes: 651ec926fc1 "anv: Add support for 48-bit addresses"<br>Tested-by: Grazvydas Ignotas <<a href="mailto:notasas@gmail.com" target="_blank">notasas@gmail.com</a>><div class="gmail_extra"><br clear="all"><div class="gmail_quote">On Sun, Apr 23, 2017 at 1:55 AM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This fixes rendering corruptions in DOOM.  Hopefully, it will also make<br>
Jenkins a bit more stable as we've been seeing some random failures and<br>
GPU hangs ever since turning on 48bit.<br>
<br>
Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=100620" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/s<wbr>how_bug.cgi?id=100620</a><br>
Cc: "17.1" <<a href="mailto:mesa-stable@lists.freedesktop.org" target="_blank">mesa-stable@lists.freedesktop<wbr>.org</a>><br>
---<br>
 src/intel/vulkan/anv_allocato<wbr>r.c | 16 ++++++++++++++++<br>
 1 file changed, 16 insertions(+)<br>
<br>
diff --git a/src/intel/vulkan/anv_allocat<wbr>or.c b/src/intel/vulkan/anv_allocat<wbr>or.c<br>
index 78327df..28bfac4 100644<br>
--- a/src/intel/vulkan/anv_allocat<wbr>or.c<br>
+++ b/src/intel/vulkan/anv_allocat<wbr>or.c<br>
@@ -994,6 +994,22 @@ anv_scratch_pool_alloc(struct anv_device *device, struct anv_scratch_pool *pool,<br>
<br>
    anv_bo_init_new(&bo->bo, device, size);<br>
<br>
+   /* Even though the Scratch base pointers in 3DSTATE_*S are 64 bits, they<br>
+    * are still relative to the general state base address.  When we emit<br>
+    * STATE_BASE_ADDRESS, we set general state base address to 0 and the size<br>
+    * to the maximum (1 page under 4GB).  This allows us to just place the<br>
+    * scratch buffers anywhere we wish in the bottom 32 bits of address space<br>
+    * and just set the scratch base pointer in 3DSTATE_*S using a relocation.<br>
+    * However, in order to do so, we need to ensure that the kernel does not<br>
+    * place the scratch BO above the 32-bit boundary.<br>
+    *<br>
+    * NOTE: Technically, it can't go "anywhere" because the top page is off<br>
+    * limits.  However, it will never end up getting placed that high because<br>
+    * the surface state and general state buffers will get placed first and<br>
+    * the kernel likes to work top-down.<br>
+    */<br>
+   bo->bo.flags &= ~EXEC_OBJECT_SUPPORTS_48B_ADDR<wbr>ESS;<br>
+<br>
    /* Set the exists last because it may be read by other threads */<br>
    __sync_synchronize();<br>
    bo->exists = true;<br>
<span class="gmail-m_-1596283430540524795HOEnZb"><font color="#888888">--<br>
2.5.0.400.gff86faf<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">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>