diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index ba6ca7ecd42..348fe79596c 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -421,7 +421,7 @@ virgl_get_shader_param(struct pipe_screen *screen, case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH: return 32; case PIPE_SHADER_CAP_MAX_CONST_BUFFER0_SIZE: - return 4096 * sizeof(float[4]); + return vscreen->caps.caps.v2.max_const_buffer_size[shader]; case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS: if (shader == PIPE_SHADER_FRAGMENT || shader == PIPE_SHADER_COMPUTE) return vscreen->caps.caps.v2.max_shader_buffer_frag_compute; diff --git a/src/gallium/drivers/virgl/virgl_winsys.h b/src/gallium/drivers/virgl/virgl_winsys.h index 615b78cb0c8..45c3819ed8e 100644 --- a/src/gallium/drivers/virgl/virgl_winsys.h +++ b/src/gallium/drivers/virgl/virgl_winsys.h @@ -173,6 +173,9 @@ static inline void virgl_ws_fill_new_caps_defaults(struct virgl_drm_caps *caps) caps->caps.v2.max_compute_shared_memory_size = 0; caps->caps.v2.host_feature_check_version = 0; 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]); + } } extern enum virgl_formats pipe_to_virgl_format(enum pipe_format format); diff --git a/src/virtio/virtio-gpu/virgl_hw.h b/src/virtio/virtio-gpu/virgl_hw.h index 0ddedb311e8..330ee79b020 100644 --- a/src/virtio/virtio-gpu/virgl_hw.h +++ b/src/virtio/virtio-gpu/virgl_hw.h @@ -601,6 +601,7 @@ struct virgl_caps_v2 { float max_anisotropy; uint32_t max_shader_sampler_views; struct virgl_supported_format_mask supported_multisample_formats; + uint32_t max_const_buffer_size[6]; // PIPE_SHADER_TYPES }; union virgl_caps {