<div dir="ltr"><div>Series is</div><div><br></div><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 15, 2018 at 4:54 PM, Rafael Antognolli <span dir="ltr"><<a href="mailto:rafael.antognolli@intel.com" target="_blank">rafael.antognolli@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">If we are on gen8+ and have context isolation support, just make that<br>
constant buffer address be absolute, so we can use it for push UBOs too.<br>
<br>
</span>v2: Do not duplicate constant_buffer_0_is_relative flag (Jason)<br>
---<br>
 src/intel/vulkan/anv_device.c |  3 ++-<br>
 src/intel/vulkan/genX_state.c | 27 +++++++++++++++++++++++++++<br>
 2 files changed, 29 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_device.<wbr>c b/src/intel/vulkan/anv_device.<wbr>c<br>
index d1637f097e8..4e63f0c46fa 100644<br>
<span class="">--- a/src/intel/vulkan/anv_device.<wbr>c<br>
+++ b/src/intel/vulkan/anv_device.<wbr>c<br>
@@ -430,7 +430,8 @@ anv_physical_device_init(<wbr>struct anv_physical_device *device,<br>
    device->compiler->shader_<wbr>debug_log = compiler_debug_log;<br>
    device->compiler->shader_perf_<wbr>log = compiler_perf_log;<br>
    device->compiler->supports_<wbr>pull_constants = false;<br>
-   device->compiler->constant_<wbr>buffer_0_is_relative = true;<br>
+   device->compiler->constant_<wbr>buffer_0_is_relative =<br>
+      device->info.gen < 8 || !device->has_context_<wbr>isolation;<br>
<br>
    isl_device_init(&device->isl_<wbr>dev, &device->info, swizzled);<br>
<br>
</span>diff --git a/src/intel/vulkan/genX_state.<wbr>c b/src/intel/vulkan/genX_state.<wbr>c<br>
index c6e54046910..213b6061278 100644<br>
<span class="">--- a/src/intel/vulkan/genX_state.<wbr>c<br>
+++ b/src/intel/vulkan/genX_state.<wbr>c<br>
@@ -169,6 +169,33 @@ genX(init_device_state)(struct anv_device *device)<br>
    gen10_emit_wa_lri_to_cache_<wbr>mode_zero(&batch);<br>
 #endif<br>
<br>
+   /* Set the "CONSTANT_BUFFER Address Offset Disable" bit, so<br>
+    * 3DSTATE_CONSTANT_XS buffer 0 is an absolute address.<br>
+    *<br>
+    * This is only safe on kernels with context isolation support.<br>
+    */<br>
+   if (GEN_GEN >= 8 &&<br>
</span>+       device->instance-><wbr>physicalDevice.has_context_<wbr>isolation) {<br>
<div class="HOEnZb"><div class="h5">+      UNUSED uint32_t tmp_reg;<br>
+#if GEN_GEN >= 9<br>
+      anv_pack_struct(&tmp_reg, GENX(CS_DEBUG_MODE2),<br>
+                      .CONSTANT_<wbr>BUFFERAddressOffsetDisable = true,<br>
+                      .CONSTANT_<wbr>BUFFERAddressOffsetDisableMask = true);<br>
+      anv_batch_emit(&batch, GENX(MI_LOAD_REGISTER_IMM), lri) {<br>
+         lri.RegisterOffset = GENX(CS_DEBUG_MODE2_num);<br>
+         lri.DataDWord      = tmp_reg;<br>
+      }<br>
+#elif GEN_GEN == 8<br>
+      anv_pack_struct(&tmp_reg, GENX(INSTPM),<br>
+                      .CONSTANT_<wbr>BUFFERAddressOffsetDisable = true,<br>
+                      .CONSTANT_<wbr>BUFFERAddressOffsetDisableMask = true);<br>
+      anv_batch_emit(&batch, GENX(MI_LOAD_REGISTER_IMM), lri) {<br>
+         lri.RegisterOffset = GENX(INSTPM_num);<br>
+         lri.DataDWord      = tmp_reg;<br>
+      }<br>
+#endif<br>
+   }<br>
+<br>
    anv_batch_emit(&batch, GENX(MI_BATCH_BUFFER_END), bbe);<br>
<br>
    assert(batch.next <= batch.end);<br>
-- <br>
2.14.3<br>
<br>
</div></div></blockquote></div><br></div>