[virglrenderer-devel] [PATCH v2 4/8] vrend, caps: Move GL only caps into newly created function

Gert Wollny gert.wollny at collabora.com
Wed Jul 25 12:49:34 UTC 2018


Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
---
 src/vrend_renderer.c | 138 +++++++++++++++++++++++++--------------------------
 1 file changed, 69 insertions(+), 69 deletions(-)

diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index 8ea0f84..0c0280c 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -7392,59 +7392,23 @@ static void vrender_get_glsl_version(int *glsl_version)
  */
 static void vrend_renderer_fill_caps_common(union virgl_caps *caps)
 {
-   int i, gl_ver;
+   int i;
    GLint max;
 
-
-   gl_ver = epoxy_gl_version();
-
    /*
     * We can't fully support this feature on GLES,
     * but it is needed for OpenGL 2.1 so lie.
     */
    caps->v1.bset.occlusion_query = 1;
 
-
-   /* Some checks looks at v1.glsl_level so set it here. */
-   if (vrend_state.use_gles) {
-      if (gl_ver >= 30) {
-         caps->v1.glsl_level = 130;
-      } else {
-         caps->v1.glsl_level = 120;
-      }
-   } else if (vrend_state.use_core_profile) {
-      if (gl_ver == 31)
-         caps->v1.glsl_level = 140;
-      else if (gl_ver == 32)
-         caps->v1.glsl_level = 150;
-      else if (gl_ver == 33)
-         caps->v1.glsl_level = 330;
-      else if (gl_ver == 40)
-         caps->v1.glsl_level = 400;
-      else if (gl_ver >= 41)
-         caps->v1.glsl_level = 410;
-   } else {
-      caps->v1.glsl_level = 130;
-   }
-
+   /* Set an initial level here, will be updated later */
+   caps->v1.glsl_level = 130;
 
    /* Set supported prims here as we now know what shaders we support. */
-   caps->v1.prim_mask = (1 << PIPE_PRIM_POINTS) | (1 << PIPE_PRIM_LINES) | (1 << PIPE_PRIM_LINE_STRIP) | (1 << PIPE_PRIM_LINE_LOOP) | (1 << PIPE_PRIM_TRIANGLES) | (1 << PIPE_PRIM_TRIANGLE_STRIP) | (1 << PIPE_PRIM_TRIANGLE_FAN);
-
-   if (vrend_state.use_gles == false &&
-       vrend_state.use_core_profile == false) {
-      caps->v1.prim_mask |= (1 << PIPE_PRIM_QUADS) | (1 << PIPE_PRIM_QUAD_STRIP) | (1 << PIPE_PRIM_POLYGON);
-   }
-
-   if (!vrend_state.use_gles && caps->v1.glsl_level >= 150) {
-      caps->v1.prim_mask |= (1 << PIPE_PRIM_LINES_ADJACENCY) |
-         (1 << PIPE_PRIM_LINE_STRIP_ADJACENCY) |
-         (1 << PIPE_PRIM_TRIANGLES_ADJACENCY) |
-         (1 << PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY);
-   }
-   if (!vrend_state.use_gles && caps->v1.glsl_level >= 400)
-      caps->v1.prim_mask |= (1 << PIPE_PRIM_PATCHES);
-
+   caps->v1.prim_mask = (1 << PIPE_PRIM_POINTS) | (1 << PIPE_PRIM_LINES) |
+                        (1 << PIPE_PRIM_LINE_STRIP) | (1 << PIPE_PRIM_LINE_LOOP) |
+                        (1 << PIPE_PRIM_TRIANGLES) | (1 << PIPE_PRIM_TRIANGLE_STRIP) |
+                        (1 << PIPE_PRIM_TRIANGLE_FAN);
 
    /* Common limits for all backends. */
    caps->v1.max_render_targets = vrend_state.max_draw_buffers;
@@ -7467,16 +7431,6 @@ static void vrend_renderer_fill_caps_common(union virgl_caps *caps)
       }
    }
 
-   if (!vrend_state.use_gles &&
-       epoxy_has_gl_extension("GL_ARB_vertex_type_10f_11f_11f_rev")) {
-      int val = VIRGL_FORMAT_R11G11B10_FLOAT;
-      uint32_t offset = val / 32;
-      uint32_t index = val % 32;
-
-      caps->v1.vertexbuffer.bitmask[offset] |= (1 << index);
-   }
-
-
    /* These are filled in by the init code, so are common. */
    if (has_feature(feat_nv_prim_restart) ||
        has_feature(feat_gl_prim_restart)) {
@@ -7492,6 +7446,12 @@ static void vrend_renderer_fill_caps_gles(bool fill_capset2, int gles_ver,
 
    caps->v1.max_viewports = 1;
 
+   if (gles_ver >= 30) {
+      caps->v1.glsl_level = 130;
+   } else {
+      caps->v1.glsl_level = 120;
+   }
+
    if (gles_ver >= 30) {
       glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS, &max);
       caps->v1.max_texture_array_layers = max;
@@ -7551,6 +7511,44 @@ static void vrend_renderer_fill_caps_gles(bool fill_capset2, int gles_ver,
       caps->v2.capability_bits |= VIRGL_CAP_COPY_IMAGE;
 }
 
+static void vrend_renderer_fill_caps_gl(bool fill_capset2, int gl_ver,
+					  union virgl_caps *caps)
+{
+   GLfloat range[2];
+
+   if (gl_ver == 31)
+      caps->v1.glsl_level = 140;
+   else if (gl_ver == 32)
+      caps->v1.glsl_level = 150;
+   else if (gl_ver == 33)
+      caps->v1.glsl_level = 330;
+   else if (gl_ver == 40)
+      caps->v1.glsl_level = 400;
+   else if (gl_ver >= 41)
+      caps->v1.glsl_level = 410;
+
+   if (!vrend_state.use_core_profile) {
+      caps->v1.bset.poly_stipple = 1;
+      caps->v1.bset.color_clamping = 1;
+      caps->v1.prim_mask |= (1 << PIPE_PRIM_QUADS) |
+                            (1 << PIPE_PRIM_QUAD_STRIP) |
+                            (1 << PIPE_PRIM_POLYGON);
+   }
+
+   if (!fill_capset2)
+      return;
+
+   glGetFloatv(GL_SMOOTH_POINT_SIZE_RANGE, range);
+   caps->v2.min_smooth_point_size = range[0];
+   caps->v2.max_smooth_point_size = range[1];
+
+
+   glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, range);
+   caps->v2.min_smooth_line_width = range[0];
+   caps->v2.max_smooth_line_width = range[1];
+
+}
+
 void vrend_renderer_fill_caps(uint32_t set, UNUSED uint32_t version,
                               union virgl_caps *caps)
 {
@@ -7590,6 +7588,24 @@ void vrend_renderer_fill_caps(uint32_t set, UNUSED uint32_t version,
    if (vrend_state.use_gles) {
       vrend_renderer_fill_caps_gles(fill_capset2, gles_ver, caps);
       return;
+   } else
+      vrend_renderer_fill_caps_gl(fill_capset2, gles_ver, caps);
+
+
+   if (caps->v1.glsl_level >= 150) {
+      caps->v1.prim_mask |= (1 << PIPE_PRIM_LINES_ADJACENCY) |
+                            (1 << PIPE_PRIM_LINE_STRIP_ADJACENCY) |
+                            (1 << PIPE_PRIM_TRIANGLES_ADJACENCY) |
+                            (1 << PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY);
+   }
+   if (caps->v1.glsl_level >= 400)
+      caps->v1.prim_mask |= (1 << PIPE_PRIM_PATCHES);
+
+   if (epoxy_has_gl_extension("GL_ARB_vertex_type_10f_11f_11f_rev")) {
+      int val = VIRGL_FORMAT_R11G11B10_FLOAT;
+      uint32_t offset = val / 32;
+      uint32_t index = val % 32;
+      caps->v1.vertexbuffer.bitmask[offset] |= (1 << index);
    }
 
    if (has_feature(feat_nv_conditional_render) ||
@@ -7599,14 +7615,6 @@ void vrend_renderer_fill_caps(uint32_t set, UNUSED uint32_t version,
    if (has_feature(feat_indep_blend))
       caps->v1.bset.indep_blend_enable = 1;
 
-   if (vrend_state.use_core_profile) {
-      caps->v1.bset.poly_stipple = 0;
-      caps->v1.bset.color_clamping = 0;
-   } else {
-      caps->v1.bset.poly_stipple = 1;
-      caps->v1.bset.color_clamping = 1;
-   }
-
    if (has_feature(feat_draw_instance))
       caps->v1.bset.instanceid = 1;
 
@@ -7738,18 +7746,10 @@ void vrend_renderer_fill_caps(uint32_t set, UNUSED uint32_t version,
    caps->v2.min_aliased_point_size = range[0];
    caps->v2.max_aliased_point_size = range[1];
 
-   glGetFloatv(GL_SMOOTH_POINT_SIZE_RANGE, range);
-   caps->v2.min_smooth_point_size = range[0];
-   caps->v2.max_smooth_point_size = range[1];
-
    glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range);
    caps->v2.min_aliased_line_width = range[0];
    caps->v2.max_aliased_line_width = range[1];
 
-   glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, range);
-   caps->v2.min_smooth_line_width = range[0];
-   caps->v2.max_smooth_line_width = range[1];
-
    glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS, &caps->v2.max_texture_lod_bias);
    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, (GLint*)&caps->v2.max_vertex_attribs);
    glGetIntegerv(GL_MAX_VERTEX_OUTPUT_COMPONENTS, &max);
-- 
2.16.4



More information about the virglrenderer-devel mailing list