Module: Mesa Branch: main Commit: 4cdd094ae1e97d857a6b9dbc291d7bbe6ea266ac URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4cdd094ae1e97d857a6b9dbc291d7bbe6ea266ac
Author: Gert Wollny <gert.wol...@collabora.com> Date: Thu Jul 13 12:34:39 2023 +0200 virgl: Use host reported limits for max outputs Signed-off-by: Gert Wollny <gert.wol...@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24136> --- src/gallium/drivers/virgl/virgl_screen.c | 15 +++++++++++++-- src/virtio/virtio-gpu/virgl_hw.h | 2 ++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index c3a8ce5db3d..44f2a28ca56 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -422,9 +422,20 @@ virgl_get_shader_param(struct pipe_screen *screen, return (shader == PIPE_SHADER_VERTEX || shader == PIPE_SHADER_GEOMETRY) ? vscreen->caps.caps.v2.max_vertex_attribs : 32; case PIPE_SHADER_CAP_MAX_OUTPUTS: - if (shader == PIPE_SHADER_FRAGMENT) + switch (shader) { + case PIPE_SHADER_FRAGMENT: return vscreen->caps.caps.v1.max_render_targets; - return vscreen->caps.caps.v2.max_vertex_outputs; + case PIPE_SHADER_TESS_CTRL: + if (vscreen->caps.caps.v2.host_feature_check_version >= 19) + return vscreen->caps.caps.v2.max_tcs_outputs; + FALLTHROUGH; + case PIPE_SHADER_TESS_EVAL: + if (vscreen->caps.caps.v2.host_feature_check_version >= 19) + return vscreen->caps.caps.v2.max_tes_outputs; + FALLTHROUGH; + default: + return vscreen->caps.caps.v2.max_vertex_outputs; + } // case PIPE_SHADER_CAP_MAX_CONSTS: // return 4096; case PIPE_SHADER_CAP_MAX_TEMPS: diff --git a/src/virtio/virtio-gpu/virgl_hw.h b/src/virtio/virtio-gpu/virgl_hw.h index e2340df1e9d..d29f4792a07 100644 --- a/src/virtio/virtio-gpu/virgl_hw.h +++ b/src/virtio/virtio-gpu/virgl_hw.h @@ -767,6 +767,8 @@ struct virgl_caps_v2 { uint32_t num_video_caps; struct virgl_video_caps video_caps[32]; uint32_t max_uniform_block_size; + uint32_t max_tcs_outputs; + uint32_t max_tes_outputs; }; union virgl_caps {