virgl: Add a caps feature check version
When we add new feature checks on the host side that is used to
enable a cap conditionally that was enabled unconditionally before
we might end up with a feature regression when a new mesa version
is used with an old virglrenderer version that doesn't check for
that cap.
To work around this problem add a version id to the caps that corresponds
to the features that are actually checked on the host and check that
version too when enabling the cap.
Fixes: 2ee197d6e8
virgl: Enable mixed color FBO attachemnets only when the host supports it
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Pohsien Wang <pwang@chromium.org>
This commit is contained in:
parent
62a9d757e6
commit
a0edceb00d
|
@ -363,6 +363,7 @@ struct virgl_caps_v2 {
|
|||
uint32_t max_atomic_counter_buffers[6];
|
||||
uint32_t max_combined_atomic_counters;
|
||||
uint32_t max_combined_atomic_counter_buffers;
|
||||
uint32_t host_feature_check_version;
|
||||
};
|
||||
|
||||
union virgl_caps {
|
||||
|
|
|
@ -144,7 +144,8 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
|
||||
return vscreen->caps.caps.v1.bset.color_clamping;
|
||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||
return vscreen->caps.caps.v2.capability_bits & VIRGL_CAP_FBO_MIXED_COLOR_FORMATS;
|
||||
return (vscreen->caps.caps.v2.capability_bits & VIRGL_CAP_FBO_MIXED_COLOR_FORMATS) ||
|
||||
(vscreen->caps.caps.v2.host_feature_check_version < 1);
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL:
|
||||
return vscreen->caps.caps.v1.glsl_level;
|
||||
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
|
||||
|
|
|
@ -152,5 +152,6 @@ static inline void virgl_ws_fill_new_caps_defaults(struct virgl_drm_caps *caps)
|
|||
caps->caps.v2.max_image_samples = 0;
|
||||
caps->caps.v2.max_compute_work_group_invocations = 0;
|
||||
caps->caps.v2.max_compute_shared_memory_size = 0;
|
||||
caps->caps.v2.host_feature_check_version = 0;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue