From 7d7b0fb7694147b435f74b078c09be2332eb80d1 Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Tue, 14 May 2019 10:59:37 +0200 Subject: [PATCH] formats: Check DS readback capabilities on GLES Enable DS redaback depending on the availablility of the corrosponding extensions. Signed-off-by: Gert Wollny Reviewed-by: Erik Faye-Lund --- src/vrend_formats.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/vrend_formats.c b/src/vrend_formats.c index 7ed514b..32a7504 100644 --- a/src/vrend_formats.c +++ b/src/vrend_formats.c @@ -319,6 +319,31 @@ static bool color_format_can_readback(struct vrend_format_table *virgl_format, i } return false; } + +static bool depth_stencil_formats_can_readback(enum virgl_formats format) +{ + switch (format) { + case VIRGL_FORMAT_Z16_UNORM: + case VIRGL_FORMAT_Z32_UNORM: + case VIRGL_FORMAT_Z32_FLOAT: + case VIRGL_FORMAT_Z24X8_UNORM: + return epoxy_has_gl_extension("GL_NV_read_depth"); + + case VIRGL_FORMAT_Z24_UNORM_S8_UINT: + case VIRGL_FORMAT_S8_UINT_Z24_UNORM: + case VIRGL_FORMAT_Z32_FLOAT_S8X24_UINT: + return epoxy_has_gl_extension("GL_NV_read_depth_stencil"); + + case VIRGL_FORMAT_X24S8_UINT: + case VIRGL_FORMAT_S8X24_UINT: + case VIRGL_FORMAT_S8_UINT: + return epoxy_has_gl_extension("GL_NV_read_stencil"); + + default: + return false; + } +} + static void vrend_add_formats(struct vrend_format_table *table, int num_entries) { int i; @@ -433,6 +458,7 @@ static void vrend_add_formats(struct vrend_format_table *table, int num_entries) binding |= is_depth ? VIRGL_BIND_DEPTH_STENCIL : VIRGL_BIND_RENDER_TARGET; if (is_desktop_gl || + (is_depth && depth_stencil_formats_can_readback(table[i].format)) || color_format_can_readback(&table[i], gles_ver)) flags |= VIRGL_TEXTURE_CAN_READBACK; }