[virglrenderer-devel] [PATCH] vrend: Enable vertex_attrib_binding also on Hosts with GLES >= 3.1

Gert Wollny gert.wollny at collabora.com
Mon May 21 15:46:14 UTC 2018


On GLES >= 3.1 the functionality that is currently relevant for attribute 
binding in virglrenderer is available. by enabling this functionality the new 
code path vrend_draw_bind_vertex_binding is used.

Fixes: 
  dEQP-GLES3.functional.clipping.point.wide_point_z_clip
  dEQP-GLES3.functional.clipping.point.wide_point_z_clip_viewport_center
  dEQP-GLES3.functional.clipping.point.wide_point_z_clip_viewport_corner

On an Intel Kabylake host this also fixes:

  dEQP-GLES3.functional.clipping.point.wide_point_clip
  dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
  dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner

but it should be noted that these three tests expect that also points with a 
centre outside the clip volume will be partially drawn when they overlap with 
the clip volume because of being "wide". The OpenGL standard defines that these 
points should be clipped completely.

GLES 3.1 does not completely implement GL_ARB_vertex_attrib_binding, so it may 
become necessary to add another flag that would indicate that only GLES style 
vertex_attrib_binding is available if virglrenderer would want to use this
additional functionality. Namely 
  VertexAttribLPointer
is not available, and a few query constants are missing from GLES 3.1 with 
respect to the extension.

Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
---
PS: obviously the bug in vrend_draw_bind_vertex_legacy that made these tests 
fail is still there. If someone wants to investigate: The point size is not
properly set.

 src/vrend_renderer.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index 8cd9109..464560e 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -4203,7 +4203,8 @@ int vrend_renderer_init(struct vrend_if_cbs *cbs, uint32_t flags)
 
    if (epoxy_has_gl_extension("GL_MESA_pack_invert"))
       vrend_state.have_mesa_invert = true;
-   if (gl_ver >= 43 || epoxy_has_gl_extension("GL_ARB_vertex_attrib_binding"))
+   if (gl_ver >= 43 || (gles && gl_ver >= 31) ||
+       epoxy_has_gl_extension("GL_ARB_vertex_attrib_binding"))
       vrend_state.have_vertex_attrib_binding = true;
    if (gl_ver >= 33 || epoxy_has_gl_extension("GL_ARB_sampler_objects"))
       vrend_state.have_samplers = true;
-- 
2.17.0



More information about the virglrenderer-devel mailing list