From 73d525f1883a67a19d30b66d4e30788e781cc436 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 14 Dec 2018 15:48:07 -0800 Subject: [PATCH] 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 --- src/gallium/drivers/iris/iris_program.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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) { -- 2.30.2