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