diff --git a/src/gallium/drivers/virgl/virgl_hw.h b/src/gallium/drivers/virgl/virgl_hw.h index ed88b6cf8d3..7038f3973d9 100644 --- a/src/gallium/drivers/virgl/virgl_hw.h +++ b/src/gallium/drivers/virgl/virgl_hw.h @@ -237,6 +237,7 @@ enum virgl_formats { #define VIRGL_CAP_TRANSFER (1 << 17) #define VIRGL_CAP_FBO_MIXED_COLOR_FORMATS (1 << 18) #define VIRGL_CAP_FAKE_FP64 (1 << 19) +#define VIRGL_CAP_TRANSFORM_FEEDBACK3 (1 << 23) /* virgl bind flags - these are compatible with mesa 10.5 gallium. * but are fixed, no other should be passed to virgl either. diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c index 651b73b0eb0..5dd7f559948 100644 --- a/src/gallium/drivers/virgl/virgl_screen.c +++ b/src/gallium/drivers/virgl/virgl_screen.c @@ -217,7 +217,8 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_CULL_DISTANCE: return vscreen->caps.caps.v1.bset.has_cull; case PIPE_CAP_MAX_VERTEX_STREAMS: - return vscreen->caps.caps.v1.glsl_level >= 400 ? 4 : 1; + return ((vscreen->caps.caps.v2.capability_bits & VIRGL_CAP_TRANSFORM_FEEDBACK3) || + (vscreen->caps.caps.v2.host_feature_check_version < 2)) ? 4 : 1; case PIPE_CAP_CONDITIONAL_RENDER_INVERTED: return vscreen->caps.caps.v1.bset.conditional_render_inverted; case PIPE_CAP_TGSI_FS_FINE_DERIVATIVE: