Mesa (staging/20.0): intel: fix the gen 12 compute shader scratch IDs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Mar 4 16:34:38 UTC 2020


Module: Mesa
Branch: staging/20.0
Commit: e7b8a304bda285af78e292f2b689ebfbd664319f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e7b8a304bda285af78e292f2b689ebfbd664319f

Author: Paulo Zanoni <paulo.r.zanoni at intel.com>
Date:   Fri Feb 28 15:16:07 2020 -0800

intel: fix the gen 12 compute shader scratch IDs

This is the same idea as "intel: fix the gen 11 compute shader scratch
IDs".

The number of EUs on TGL is not the same as ICL, but the
MEDIA_VFE_STATE restrictions stay the same, so adapt the code to it.
Also, consider the base configuration instead of what we read from the
Kernel.

According to Mark, this fixes the following piglit tests on TGL:

    piglit.spec.arb_compute_shader.execution.shared-atomicmax-uint.tglm64
    piglit.spec.arb_compute_shader.execution.shared-atomicmax-int.tglm64
    piglit.spec.intel_shader_atomic_float_minmax.execution.shared-atomicmax-float.tglm64

v2: s/ICL+/Gen11+/ (Jason).

Cc: mesa-stable at lists.freedesktop.org
Tested-by: Mark Janes <mark.a.janes at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4006>
(cherry picked from commit 9e5ce30da7fa3f1cc3badfd348e5f8fda1bbacb2)

---

 .pick_status.json                       |  2 +-
 src/gallium/drivers/iris/iris_program.c | 11 ++++++++---
 src/intel/vulkan/anv_allocator.c        | 11 ++++++++---
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 71d5c5e1e4f..091b6165126 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -409,7 +409,7 @@
         "description": "intel: fix the gen 12 compute shader scratch IDs",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
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



More information about the mesa-commit mailing list