Mesa (main): gallium: disable hardware select for crocus

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 15 03:41:43 UTC 2022


Module: Mesa
Branch: main
Commit: fd27d5157f218a80e1ea3985d4186b48fdde9f9d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd27d5157f218a80e1ea3985d4186b48fdde9f9d

Author: Qiang Yu <yuq825 at gmail.com>
Date:   Fri Jun 10 10:43:03 2022 +0800

gallium: disable hardware select for crocus

piglit select tests fail, so add a gallium cap to disable
for crocus explicitly.

crocus may choose to enable hardware select only for GPU
SKU which tested to be OK again.

Fixes: 6489af145ca ("mesa: enable HardwareAcceleratedSelect")
Closes: #6644

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Emma Anholt <emma at anholt.net>
Signed-off-by: Qiang Yu <yuq825 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16955>

---

 docs/gallium/screen.rst                        |  1 +
 src/gallium/auxiliary/util/u_screen.c          | 17 +++++++++++++++++
 src/gallium/drivers/crocus/crocus_screen.c     |  3 +++
 src/gallium/drivers/nouveau/nv50/nv50_screen.c |  1 +
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c |  1 +
 src/gallium/include/pipe/p_defines.h           |  1 +
 src/mesa/state_tracker/st_extensions.c         | 11 +----------
 7 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/docs/gallium/screen.rst b/docs/gallium/screen.rst
index e358de4c4ce..8ab60463eba 100644
--- a/docs/gallium/screen.rst
+++ b/docs/gallium/screen.rst
@@ -641,6 +641,7 @@ The integer capabilities:
 * ``PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD``: TRUE if shader sparse texture sample instruction support clamp the minimal lod to prevent read from un-committed pages.
 * ``PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER``: TRUE if the driver allows the "draw out of order" optimization to be enabled. See _mesa_update_allow_draw_out_of_order for more details.
 * ``PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT``: Maximum bound constant buffer size in bytes. This is unsigned integer with the maximum of 4GB - 1. This applies to all constant buffers used by UBOs, unlike `PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE`, which is specifically for GLSL uniforms.
+* ``PIPE_CAP_HARDWARE_GL_SELECT``: Enable hardware accelerated GL_SELECT for this driver.
 
 .. _pipe_capf:
 
diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c
index 0379bca0347..e80d8915f68 100644
--- a/src/gallium/auxiliary/util/u_screen.c
+++ b/src/gallium/auxiliary/util/u_screen.c
@@ -23,6 +23,7 @@
 
 #include "pipe/p_screen.h"
 #include "util/u_screen.h"
+#include "util/u_debug.h"
 
 /**
  * Helper to use from a pipe_screen->get_param() implementation to return
@@ -497,6 +498,22 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
       return pscreen->get_shader_param(pscreen, PIPE_SHADER_FRAGMENT,
                                        PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE);
 
+   case PIPE_CAP_HARDWARE_GL_SELECT: {
+      /* =0: on CPU, always disabled
+       * >0: on GPU, enable by default, user can disable it manually
+       * <0: unknown, disable by default, user can enable it manually
+       */
+      int accel = pscreen->get_param(pscreen, PIPE_CAP_ACCELERATED);
+
+      return !!accel && debug_get_bool_option("MESA_HW_ACCEL_SELECT", accel > 0) &&
+         /* internal geometry shader need indirect array access */
+         pscreen->get_shader_param(pscreen, PIPE_SHADER_GEOMETRY,
+                                   PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR) &&
+         /* internal geometry shader need SSBO support */
+         pscreen->get_shader_param(pscreen, PIPE_SHADER_GEOMETRY,
+                                   PIPE_SHADER_CAP_MAX_SHADER_BUFFERS);
+   }
+
    default:
       unreachable("bad PIPE_CAP_*");
    }
diff --git a/src/gallium/drivers/crocus/crocus_screen.c b/src/gallium/drivers/crocus/crocus_screen.c
index 40673ebe17e..64e9095b80a 100644
--- a/src/gallium/drivers/crocus/crocus_screen.c
+++ b/src/gallium/drivers/crocus/crocus_screen.c
@@ -392,6 +392,9 @@ crocus_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_PCI_FUNCTION:
       return 0;
 
+   case PIPE_CAP_HARDWARE_GL_SELECT:
+      return 0;
+
    default:
       return u_pipe_screen_get_param_defaults(pscreen, param);
    }
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 647aa5b63b5..e54f0919390 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -416,6 +416,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS:
    case PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY:
    case PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD:
+   case PIPE_CAP_HARDWARE_GL_SELECT:
       return 0;
 
    case PIPE_CAP_VENDOR_ID:
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index e3a1e551afb..a04969809c4 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -437,6 +437,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
    case PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS:
    case PIPE_CAP_QUERY_SPARSE_TEXTURE_RESIDENCY:
    case PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD:
+   case PIPE_CAP_HARDWARE_GL_SELECT:
       return 0;
 
    case PIPE_CAP_VENDOR_ID:
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index f3a3b9fd636..50c89824d8d 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -1009,6 +1009,7 @@ enum pipe_cap
    PIPE_CAP_CLAMP_SPARSE_TEXTURE_LOD,
    PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER,
    PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT,
+   PIPE_CAP_HARDWARE_GL_SELECT,
 
    PIPE_CAP_LAST,
    /* XXX do not add caps after PIPE_CAP_LAST! */
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 027ca948788..79051ba7ec3 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -627,17 +627,8 @@ void st_init_limits(struct pipe_screen *screen,
    c->SparseTextureFullArrayCubeMipmaps =
       screen->get_param(screen, PIPE_CAP_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS);
 
-   /* =0: on CPU, always disabled
-    * >0: on GPU, enable by default, user can disable it manually
-    * <0: unknown, disable by default, user can enable it manually
-    */
-   int accel = screen->get_param(screen, PIPE_CAP_ACCELERATED);
    c->HardwareAcceleratedSelect =
-      accel && debug_get_bool_option("MESA_HW_ACCEL_SELECT", accel > 0) &&
-      /* internal geometry shader need indirect array access */
-      !c->ShaderCompilerOptions[MESA_SHADER_GEOMETRY].EmitNoIndirectTemp &&
-      /* internal geometry shader need SSBO support */
-      c->Program[MESA_SHADER_GEOMETRY].MaxShaderStorageBlocks;
+      screen->get_param(screen, PIPE_CAP_HARDWARE_GL_SELECT);
 }
 
 



More information about the mesa-commit mailing list