virgl: Propagate the GL_MAX_stage_SHADER_STORAGE_BLOCKS for each stage

Some hardware have a higher number in the computer stage than in others, let's
simply propagate everything when possible.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/12003

Signed-off-by: Corentin Noël <corentin.noel@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31666>
This commit is contained in:
Corentin Noël 2024-10-15 22:30:46 +02:00 committed by Marge Bot
parent 85d25cc5c8
commit 89d709a43e
3 changed files with 10 additions and 3 deletions

View file

@ -456,11 +456,16 @@ virgl_get_shader_param(struct pipe_screen *screen,
if (vscreen->caps.caps.v2.host_feature_check_version < 12)
return 4096 * sizeof(float[4]);
return VIRGL_SHADER_STAGE_CAP_V2(max_const_buffer_size, shader);
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
if (shader == PIPE_SHADER_FRAGMENT || shader == PIPE_SHADER_COMPUTE)
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS: {
int max_shader_buffers = VIRGL_SHADER_STAGE_CAP_V2(max_shader_storage_blocks, shader);
if (max_shader_buffers != INT_MAX) {
return max_shader_buffers;
} else if (shader == PIPE_SHADER_FRAGMENT || shader == PIPE_SHADER_COMPUTE) {
return vscreen->caps.caps.v2.max_shader_buffer_frag_compute;
else
} else {
return vscreen->caps.caps.v2.max_shader_buffer_other_stages;
}
}
case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:
if (shader == PIPE_SHADER_FRAGMENT || shader == PIPE_SHADER_COMPUTE)
return vscreen->caps.caps.v2.max_shader_image_frag_compute;

View file

@ -183,6 +183,7 @@ static inline void virgl_ws_fill_new_caps_defaults(struct virgl_drm_caps *caps)
caps->caps.v2.max_shader_sampler_views = 16;
for (int shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) {
caps->caps.v2.max_const_buffer_size[shader_type] = 4096 * sizeof(float[4]);
caps->caps.v2.max_shader_storage_blocks[shader_type] = INT_MAX;
}
}

View file

@ -770,6 +770,7 @@ struct virgl_caps_v2 {
uint32_t max_uniform_block_size;
uint32_t max_tcs_outputs;
uint32_t max_tes_outputs;
uint32_t max_shader_storage_blocks[6]; // PIPE_SHADER_TYPES
};
union virgl_caps {