diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c index c68bda0..8afaf7f 100644 --- a/src/vrend_renderer.c +++ b/src/vrend_renderer.c @@ -7563,14 +7563,15 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, fill_capset2 = true; } + if (has_feature(feat_nv_conditional_render) || + has_feature(feat_gl_conditional_render)) + caps->v1.bset.conditional_render = 1; + if (gl_ver >= 30) { caps->v1.bset.indep_blend_enable = 1; - caps->v1.bset.conditional_render = 1; } else { if (epoxy_has_gl_extension("GL_EXT_draw_buffers2")) caps->v1.bset.indep_blend_enable = 1; - if (epoxy_has_gl_extension("GL_NV_conditional_render")) - caps->v1.bset.conditional_render = 1; } if (vrend_state.use_core_profile) { @@ -7610,14 +7611,18 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, caps->v1.bset.texture_multisample = 1; } + if (has_feature(feat_tessellation)) + caps->v1.bset.has_tessellation_shaders = 1; + + if (has_feature(feat_sample_shading)) + caps->v1.bset.has_sample_shading = 1; + if (gl_ver >= 40) { caps->v1.bset.indep_blend_func = 1; caps->v1.bset.cube_map_array = 1; caps->v1.bset.texture_query_lod = 1; caps->v1.bset.has_indirect_draw = 1; - caps->v1.bset.has_sample_shading = 1; caps->v1.bset.has_fp64 = 1; - caps->v1.bset.has_tessellation_shaders = 1; } else { if (epoxy_has_gl_extension("GL_ARB_draw_buffers_blend")) caps->v1.bset.indep_blend_func = 1; @@ -7627,14 +7632,10 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, caps->v1.bset.texture_query_lod = 1; if (epoxy_has_gl_extension("GL_ARB_indirect_draw")) caps->v1.bset.has_indirect_draw = 1; - if (epoxy_has_gl_extension("GL_ARB_sample_shading")) - caps->v1.bset.has_sample_shading = 1; /* need gpu shader 5 for bitfield insert */ if (epoxy_has_gl_extension("GL_ARB_gpu_shader_fp64") && epoxy_has_gl_extension("GL_ARB_gpu_shader5")) caps->v1.bset.has_fp64 = 1; - if (epoxy_has_gl_extension("GL_ARB_tessellation_shader")) - caps->v1.bset.has_tessellation_shaders = 1; } if (gl_ver >= 42) { @@ -7660,12 +7661,12 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, caps->v1.bset.derivative_control = 1; } + if (has_feature(feat_polygon_offset_clamp)) + caps->v1.bset.polygon_offset_clamp = 1; + if (gl_ver >= 46) { - caps->v1.bset.polygon_offset_clamp = 1; caps->v1.bset.transform_feedback_overflow_query = 1; } else { - if (epoxy_has_gl_extension("GL_ARB_polygon_offset_clamp")) - caps->v1.bset.polygon_offset_clamp = 1; if (epoxy_has_gl_extension("GL_ARB_transform_feedback_overflow_query")) caps->v1.bset.transform_feedback_overflow_query = 1; } @@ -7681,7 +7682,7 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, } /* we need tf3 so we can do gallium skip buffers */ - if (epoxy_has_gl_extension("GL_ARB_transform_feedback2")) { + if (has_feature(feat_transform_feedback2)) { caps->v1.bset.streamout_pause_resume = 1; } @@ -7743,7 +7744,7 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, glGetIntegerv(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, (GLint*)&caps->v2.max_geom_total_output_components); } - if (epoxy_has_gl_extension("GL_ARB_tessellation_shader") || gl_ver >= 40) { + if (has_feature(feat_tessellation)) { glGetIntegerv(GL_MAX_TESS_PATCH_COMPONENTS, &max); caps->v2.max_shader_patch_varyings = max / 4; } else @@ -7762,7 +7763,7 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, glGetIntegerv(GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, (GLint*)&caps->v2.texture_buffer_offset_alignment); } - if (gl_ver >= 43 || epoxy_has_gl_extension("GL_ARB_shader_storage_buffer_object")) { + if (has_feature(feat_ssbo)) { glGetIntegerv(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, (GLint*)&caps->v2.shader_buffer_offset_alignment); glGetIntegerv(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, &max); @@ -7782,7 +7783,7 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, if (gl_ver >= 44) glGetIntegerv(GL_MAX_VERTEX_ATTRIB_STRIDE, (GLint*)&caps->v2.max_vertex_attrib_stride); - if (gl_ver >= 43 || epoxy_has_gl_extension("GL_ARB_texture_view")) + if (has_feature(feat_texture_view)) caps->v2.capability_bits |= VIRGL_CAP_TEXTURE_VIEW; if (has_feature(feat_copy_image))