diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c index 1ce13f7..0d7b5b8 100644 --- a/src/vrend_renderer.c +++ b/src/vrend_renderer.c @@ -8021,7 +8021,7 @@ static void vrend_renderer_fill_caps_v1(int gl_ver, int gles_ver, union virgl_ca } } -static void vrend_renderer_fill_caps_v2_common(union virgl_caps *caps) +static void vrend_renderer_fill_caps_v2(int gl_ver, int gles_ver, union virgl_caps *caps) { GLint max; GLfloat range[2]; @@ -8034,6 +8034,16 @@ static void vrend_renderer_fill_caps_v2_common(union virgl_caps *caps) caps->v2.min_aliased_line_width = range[0]; caps->v2.max_aliased_line_width = range[1]; + if (gl_ver > 0) { + 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]; + } + 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); @@ -8043,66 +8053,6 @@ static void vrend_renderer_fill_caps_v2_common(union virgl_caps *caps) glGetIntegerv(GL_MAX_PROGRAM_TEXEL_OFFSET, &caps->v2.max_texel_offset); glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, (GLint*)&caps->v2.uniform_buffer_offset_alignment); -} - -static void vrend_renderer_fill_caps_gl(bool fill_capset2, union virgl_caps *caps) -{ - GLfloat range[2]; - - 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) -{ - GLint max; - int gl_ver, gles_ver; - bool fill_capset2 = false; - - if (!caps) - return; - - if (set > 2) { - caps->max_version = 0; - return; - } - - if (set == 1) { - memset(caps, 0, sizeof(struct virgl_caps_v1)); - caps->max_version = 1; - } else if (set == 2) { - memset(caps, 0, sizeof(*caps)); - caps->max_version = 2; - fill_capset2 = true; - } - - if (vrend_state.use_gles) { - gles_ver = epoxy_gl_version(); - gl_ver = 0; - } else { - gles_ver = 0; - gl_ver = epoxy_gl_version(); - } - - vrend_fill_caps_glsl_version(gl_ver, gles_ver, caps); - vrend_renderer_fill_caps_v1(gl_ver, gles_ver, caps); - - if (!vrend_state.use_gles) - vrend_renderer_fill_caps_gl(fill_capset2, caps); - - if (!fill_capset2) - return; - - vrend_renderer_fill_caps_v2_common(caps); if (has_feature(feat_geometry_shader)) { glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, (GLint*)&caps->v2.max_geom_output_vertices); @@ -8190,6 +8140,47 @@ void vrend_renderer_fill_caps(uint32_t set, UNUSED uint32_t version, if (has_feature(feat_framebuffer_fetch)) caps->v2.capability_bits |= VIRGL_CAP_TGSI_FBFETCH; + +} + +void vrend_renderer_fill_caps(uint32_t set, UNUSED uint32_t version, + union virgl_caps *caps) +{ + int gl_ver, gles_ver; + bool fill_capset2 = false; + + if (!caps) + return; + + if (set > 2) { + caps->max_version = 0; + return; + } + + if (set == 1) { + memset(caps, 0, sizeof(struct virgl_caps_v1)); + caps->max_version = 1; + } else if (set == 2) { + memset(caps, 0, sizeof(*caps)); + caps->max_version = 2; + fill_capset2 = true; + } + + if (vrend_state.use_gles) { + gles_ver = epoxy_gl_version(); + gl_ver = 0; + } else { + gles_ver = 0; + gl_ver = epoxy_gl_version(); + } + + vrend_fill_caps_glsl_version(gl_ver, gles_ver, caps); + vrend_renderer_fill_caps_v1(gl_ver, gles_ver, caps); + + if (!fill_capset2) + return; + + vrend_renderer_fill_caps_v2(gl_ver, gles_ver, caps); } GLint64 vrend_renderer_get_timestamp(void)