anv/icl: Allow headerless sampler messages for pre-emptable contexts
authorAnuj Phogat <anuj.phogat@gmail.com>
Fri, 17 Aug 2018 23:42:23 +0000 (16:42 -0700)
committerAnuj Phogat <anuj.phogat@gmail.com>
Tue, 21 Aug 2018 19:50:05 +0000 (12:50 -0700)
It fixes simulator warnings in vulkancts tests complaining about missing
support for headerless sampler messages for pre-emptable contexts.
Bit 5 in SAMPLER MODE register is newly introduced for ICLLP.

Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/genxml/gen11.xml
src/intel/vulkan/genX_state.c

index bd3800e4b790bfeb9b5cb43c6d40fb6fe647fdac..1b3befbbfc9f282716b39f780e81da4b3dedf9d3 100644 (file)
     <field name="CONSTANT_BUFFER Address Offset Disable Mask" start="20" end="20" type="bool"/>
   </register>
 
+  <register name="SAMPLER_MODE" length="1" num="0x0e18c">
+    <field name="Headerless Message for Pre-emptable Contexts" start="5" end="5" type="bool"/>
+    <field name="Headerless Message for Pre-emptable Contexts Mask" start="21" end="21" type="bool"/>
+  </register>
+
 </genxml>
index b1014d9e797015de5aa8946da0ba77df64a17095..d6ccd21524c2dea90d65a36bc55c182585d98a37 100644 (file)
@@ -157,6 +157,23 @@ genX(init_device_state)(struct anv_device *device)
    gen10_emit_wa_lri_to_cache_mode_zero(&batch);
 #endif
 
+#if GEN_GEN == 11
+   /* The default behavior of bit 5 "Headerless Message for Pre-emptable
+    * Contexts" in SAMPLER MODE register is set to 0, which means
+    * headerless sampler messages are not allowed for pre-emptable
+    * contexts. Set the bit 5 to 1 to allow them.
+    */
+   uint32_t sampler_mode;
+   anv_pack_struct(&sampler_mode, GENX(SAMPLER_MODE),
+                   .HeaderlessMessageforPreemptableContexts = true,
+                   .HeaderlessMessageforPreemptableContextsMask = true);
+
+    anv_batch_emit(&batch, GENX(MI_LOAD_REGISTER_IMM), lri) {
+      lri.RegisterOffset = GENX(SAMPLER_MODE_num);
+      lri.DataDWord      = sampler_mode;
+   }
+#endif
+
    /* Set the "CONSTANT_BUFFER Address Offset Disable" bit, so
     * 3DSTATE_CONSTANT_XS buffer 0 is an absolute address.
     *