diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 701cfa20aea..d7e470b4238 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -2054,11 +2054,13 @@ iris_get_scratch_space(struct iris_context *ice, * * This hack is no longer necessary on Gen11+. * - * For, ICL, scratch space allocation is based on the number of threads + * For, Gen11+, scratch space allocation is based on the number of threads * in the base configuration. */ unsigned subslice_total = screen->subslice_total; - if (devinfo->gen == 11) + if (devinfo->gen >= 12) + subslice_total = devinfo->num_subslices[0]; + else if (devinfo->gen == 11) subslice_total = 8; else if (devinfo->gen < 11) subslice_total = 4 * devinfo->num_slices; @@ -2067,7 +2069,10 @@ iris_get_scratch_space(struct iris_context *ice, if (!*bop) { unsigned scratch_ids_per_subslice = devinfo->max_cs_threads; - if (devinfo->gen >= 11) { + if (devinfo->gen >= 12) { + /* Same as ICL below, but with 16 EUs. */ + scratch_ids_per_subslice = 16 * 8; + } else if (devinfo->gen == 11) { /* The MEDIA_VFE_STATE docs say: * * "Starting with this configuration, the Maximum Number of diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index 112a12014cb..f698289155b 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -1397,13 +1397,18 @@ anv_scratch_pool_alloc(struct anv_device *device, struct anv_scratch_pool *pool, unsigned subslices = MAX2(device->physical->subslice_total, 1); - /* For, ICL, scratch space allocation is based on the number of threads + /* For, Gen11+, scratch space allocation is based on the number of threads * in the base configuration. */ - if (devinfo->gen == 11) + if (devinfo->gen >= 12) + subslices = devinfo->num_subslices[0]; + else if (devinfo->gen == 11) subslices = 8; unsigned scratch_ids_per_subslice; - if (devinfo->gen >= 11) { + if (devinfo->gen >= 12) { + /* Same as ICL below, but with 16 EUs. */ + scratch_ids_per_subslice = 16 * 8; + } else if (devinfo->gen == 11) { /* The MEDIA_VFE_STATE docs say: * * "Starting with this configuration, the Maximum Number of