From 96c8eb64f054940933c6b788606045b02d60be01 Mon Sep 17 00:00:00 2001 From: Feng Jiang Date: Mon, 6 Jan 2025 11:43:52 +0800 Subject: [PATCH] virgl: Ensure that PIPE_SHADER_CAP_MAX_CONST_BUFFERS is less than PIPE_MAX_CONSTANT_BUFFERS The value of the PIPE_SHADER_CAP_MAX_CONST_BUFFERS parameter should be less than PIPE_MAX_CONSTANT_BUFFERS, otherwise, it will lead to some assert failures. For example: void cso_unbind_context(struct cso_context *cso) { ... int maxsam = scr->get_shader_param(scr, sh, PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS); int maxview = scr->get_shader_param(scr, sh, PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS); int maxssbo = scr->get_shader_param(scr, sh, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS); int maxcb = scr->get_shader_param(scr, sh, PIPE_SHADER_CAP_MAX_CONST_BUFFERS); int maximg = scr->get_shader_param(scr, sh, PIPE_SHADER_CAP_MAX_SHADER_IMAGES); assert(maxsam <= PIPE_MAX_SAMPLERS); assert(maxview <= PIPE_MAX_SHADER_SAMPLER_VIEWS); assert(maxssbo <= PIPE_MAX_SHADER_BUFFERS); assert(maxcb <= PIPE_MAX_CONSTANT_BUFFERS); // Crash here assert(maximg <= PIPE_MAX_SHADER_IMAGES); ... } Signed-off-by: Feng Jiang Part-of: --- src/gallium/drivers/virgl/virgl_screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 3862fdf0217..7db3979b3be 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -433,7 +433,7 @@ virgl_get_shader_param(struct pipe_screen *screen, case PIPE_SHADER_CAP_MAX_TEMPS: return 256; case PIPE_SHADER_CAP_MAX_CONST_BUFFERS: - return vscreen->caps.caps.v1.max_uniform_blocks; + return MIN2(vscreen->caps.caps.v1.max_uniform_blocks, PIPE_MAX_CONSTANT_BUFFERS); // case PIPE_SHADER_CAP_MAX_ADDRS: // return 1; case PIPE_SHADER_CAP_SUBROUTINES: