|
|
@ -117,6 +117,7 @@ struct global_renderer_state { |
|
|
|
bool have_stencil_texturing; |
|
|
|
bool have_stencil_texturing; |
|
|
|
bool have_sample_shading; |
|
|
|
bool have_sample_shading; |
|
|
|
bool have_texture_buffer_range; |
|
|
|
bool have_texture_buffer_range; |
|
|
|
|
|
|
|
bool have_polygon_offset_clamp; |
|
|
|
|
|
|
|
|
|
|
|
/* these appeared broken on at least one driver */ |
|
|
|
/* these appeared broken on at least one driver */ |
|
|
|
bool use_explicit_locations; |
|
|
|
bool use_explicit_locations; |
|
|
@ -3698,6 +3699,10 @@ static void vrend_hw_emit_rs(struct vrend_context *ctx) |
|
|
|
glProvokingVertexEXT(GL_LAST_VERTEX_CONVENTION_EXT); |
|
|
|
glProvokingVertexEXT(GL_LAST_VERTEX_CONVENTION_EXT); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!vrend_state.use_gles && vrend_state.have_polygon_offset_clamp) |
|
|
|
|
|
|
|
glPolygonOffsetClampEXT(state->offset_scale, state->offset_units, state->offset_clamp); |
|
|
|
|
|
|
|
else |
|
|
|
glPolygonOffset(state->offset_scale, state->offset_units); |
|
|
|
glPolygonOffset(state->offset_scale, state->offset_units); |
|
|
|
|
|
|
|
|
|
|
|
if (vrend_state.use_core_profile == false) { |
|
|
|
if (vrend_state.use_core_profile == false) { |
|
|
@ -4253,6 +4258,9 @@ int vrend_renderer_init(struct vrend_if_cbs *cbs, uint32_t flags) |
|
|
|
if (gl_ver >= 43 || epoxy_has_gl_extension("GL_ARB_texture_buffer_range")) |
|
|
|
if (gl_ver >= 43 || epoxy_has_gl_extension("GL_ARB_texture_buffer_range")) |
|
|
|
vrend_state.have_texture_buffer_range = true; |
|
|
|
vrend_state.have_texture_buffer_range = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (gl_ver >= 46 || epoxy_has_gl_extension("GL_ARB_polygon_offset_clamp")) |
|
|
|
|
|
|
|
vrend_state.have_polygon_offset_clamp = true; |
|
|
|
|
|
|
|
|
|
|
|
/* callbacks for when we are cleaning up the object table */ |
|
|
|
/* callbacks for when we are cleaning up the object table */ |
|
|
|
vrend_resource_set_destroy_callback(vrend_destroy_resource_object); |
|
|
|
vrend_resource_set_destroy_callback(vrend_destroy_resource_object); |
|
|
|
vrend_object_set_destroy_callback(VIRGL_OBJECT_QUERY, vrend_destroy_query_object); |
|
|
|
vrend_object_set_destroy_callback(VIRGL_OBJECT_QUERY, vrend_destroy_query_object); |
|
|
@ -6965,6 +6973,13 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version, |
|
|
|
caps->v1.bset.derivative_control = 1; |
|
|
|
caps->v1.bset.derivative_control = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (gl_ver >= 46) { |
|
|
|
|
|
|
|
caps->v1.bset.polygon_offset_clamp = 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_EXT_texture_mirror_clamp") || |
|
|
|
if (epoxy_has_gl_extension("GL_EXT_texture_mirror_clamp") || |
|
|
|
epoxy_has_gl_extension("GL_ARB_texture_mirror_clamp_to_edge")) { |
|
|
|
epoxy_has_gl_extension("GL_ARB_texture_mirror_clamp_to_edge")) { |
|
|
|
caps->v1.bset.mirror_clamp = true; |
|
|
|
caps->v1.bset.mirror_clamp = true; |
|
|
|