From: Kenneth Graunke Date: Fri, 14 Dec 2018 23:48:07 +0000 (-0800) Subject: iris: Fix scratch space allocation on Icelake. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=73d525f1883a67a19d30b66d4e30788e781cc436;p=mesa.git iris: Fix scratch space allocation on Icelake. 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 --- diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 4b1a5d9958b..95c56a11748 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -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) {