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: 6489af145c ("mesa: enable HardwareAcceleratedSelect")
Closes: #6644

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Emma Anholt <emma@anholt.net>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16955>
This commit is contained in:
Qiang Yu 2022-06-10 10:43:03 +08:00 committed by Marge Bot
parent 934bc2e8ca
commit fd27d5157f
7 changed files with 25 additions and 10 deletions

View File

@ -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:

View File

@ -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_*");
}

View File

@ -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);
}

View File

@ -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:

View File

@ -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:

View File

@ -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! */

View File

@ -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);
}