i965: enable STD430 packing by default on IVB+
authorTimothy Arceri <tarceri@itsqueeze.com>
Mon, 24 Jul 2017 02:37:07 +0000 (12:37 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Tue, 22 Aug 2017 01:29:27 +0000 (11:29 +1000)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_context.c

index d157f059704c71e7384ba682f53ec6b2f9b8e9d4..3380582b3fab8b9fa57289a34f370472bc05c040 100644 (file)
@@ -675,6 +675,22 @@ brw_initialize_context_constants(struct brw_context *brw)
 
    /* OES_primitive_bounding_box */
    ctx->Const.NoPrimitiveBoundingBoxOutput = true;
+
+   /* TODO: We should be able to use STD430 packing by default on all hardware
+    * but some piglit tests [1] currently fail on SNB when this is enabled.
+    * The problem is the messages we're using for doing uniform pulls
+    * in the vec4 back-end on SNB is the OWORD block load instruction, which
+    * takes its offset in units of OWORDS (16 bytes).  On IVB+, we use the
+    * sampler which doesn't have these restrictions.
+    *
+    * In the scalar back-end, we use the sampler for dynamic uniform loads and
+    * pull an entire cache line at a time for constant offset loads both of
+    * which support almost any alignment.
+    *
+    * [1] glsl-1.40/uniform_buffer/vs-float-array-variable-index.shader_test
+    */
+   if (brw->gen >= 7)
+      ctx->Const.UseSTD430AsDefaultPacking = true;
 }
 
 static void