iris: Fix scratch space allocation on Icelake.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 14 Dec 2018 23:48:07 +0000 (15:48 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:11 +0000 (10:26 -0800)
Gen9-10 have fewer than 4 subslices per slice, so they need this to be
rounded up.  Gen11 isn't documented as needing this hack, and it can
also have more than 4 subslices, so the hack actually can break things.

Fixes tests/spec/arb_enhanced_layouts/execution/component-layout/
sso-vs-gs-fs-array-interleave

src/gallium/drivers/iris/iris_program.c

index 4b1a5d9958bf8721b0252fc4fa3c8df235099870..95c56a11748c85dfcbaed6c3b9979924620fb3d0 100644 (file)
@@ -1497,14 +1497,18 @@ iris_get_scratch_space(struct iris_context *ice,
 
    /* The documentation for 3DSTATE_PS "Scratch Space Base Pointer" says:
     *
-    * "Scratch Space per slice is computed based on 4 sub-slices.  SW must
-    *  allocate scratch space enough so that each slice has 4 slices
-    *  allowed."
+    *    "Scratch Space per slice is computed based on 4 sub-slices.  SW
+    *     must allocate scratch space enough so that each slice has 4
+    *     slices allowed."
     *
     * According to the other driver team, this applies to compute shaders
     * as well.  This is not currently documented at all.
+    *
+    * This hack is no longer necessary on Gen11+.
     */
-   unsigned subslice_total = 4 * devinfo->num_slices;
+   unsigned subslice_total = screen->subslice_total;
+   if (devinfo->gen < 11)
+      subslice_total = 4 * devinfo->num_slices;
    assert(subslice_total >= screen->subslice_total);
 
    if (!*bop) {