features: add independent blend enable feature

Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
macos/master
Dave Airlie 6 years ago
parent 36ac335cfa
commit 35356ec914
  1. 17
      src/vrend_renderer.c

@ -100,6 +100,7 @@ enum features_id
feat_gl_prim_restart, feat_gl_prim_restart,
feat_gles_khr_robustness, feat_gles_khr_robustness,
feat_gles31_vertex_attrib_binding, feat_gles31_vertex_attrib_binding,
feat_indep_blend,
feat_mesa_invert, feat_mesa_invert,
feat_ms_scaled_blit, feat_ms_scaled_blit,
feat_multisample, feat_multisample,
@ -138,6 +139,7 @@ static const struct {
[feat_gl_prim_restart] = { 31, UNAVAIL, {} }, [feat_gl_prim_restart] = { 31, UNAVAIL, {} },
[feat_gles_khr_robustness] = { UNAVAIL, UNAVAIL, { "GL_KHR_robustness" } }, [feat_gles_khr_robustness] = { UNAVAIL, UNAVAIL, { "GL_KHR_robustness" } },
[feat_gles31_vertex_attrib_binding] = { 43, 31, { "GL_ARB_vertex_attrib_binding" } }, [feat_gles31_vertex_attrib_binding] = { 43, 31, { "GL_ARB_vertex_attrib_binding" } },
[feat_indep_blend] = { 30, UNAVAIL, { "GL_EXT_draw_buffers2" } },
[feat_mesa_invert] = { UNAVAIL, UNAVAIL, { "GL_MESA_pack_invert" } }, [feat_mesa_invert] = { UNAVAIL, UNAVAIL, { "GL_MESA_pack_invert" } },
[feat_ms_scaled_blit] = { UNAVAIL, UNAVAIL, { "GL_EXT_framebuffer_multisample_blit_scaled" } }, [feat_ms_scaled_blit] = { UNAVAIL, UNAVAIL, { "GL_EXT_framebuffer_multisample_blit_scaled" } },
[feat_multisample] = { 32, 30, { "GL_ARB_texture_multisample" } }, [feat_multisample] = { 32, 30, { "GL_ARB_texture_multisample" } },
@ -2829,7 +2831,8 @@ void vrend_clear(struct vrend_context *ctx,
/* This function implements Gallium's full clear callback (st->pipe->clear) on the host. This /* This function implements Gallium's full clear callback (st->pipe->clear) on the host. This
callback requires no color component be masked. We must unmask all components before callback requires no color component be masked. We must unmask all components before
calling glClear* and restore the previous colormask afterwards, as Gallium expects. */ calling glClear* and restore the previous colormask afterwards, as Gallium expects. */
if (ctx->sub->hw_blend_state.independent_blend_enable) { if (ctx->sub->hw_blend_state.independent_blend_enable &&
has_feature(feat_indep_blend)) {
/* ARB_draw_buffers_blend is required for this */ /* ARB_draw_buffers_blend is required for this */
int i; int i;
for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++)
@ -2913,7 +2916,8 @@ void vrend_clear(struct vrend_context *ctx,
/* Restore previous colormask */ /* Restore previous colormask */
if (buffers & PIPE_CLEAR_COLOR) { if (buffers & PIPE_CLEAR_COLOR) {
if (ctx->sub->hw_blend_state.independent_blend_enable) { if (ctx->sub->hw_blend_state.independent_blend_enable &&
has_feature(feat_indep_blend)) {
/* ARB_draw_buffers_blend is required for this */ /* ARB_draw_buffers_blend is required for this */
int i; int i;
for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) { for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
@ -3744,7 +3748,8 @@ static void vrend_hw_emit_blend(struct vrend_context *ctx, struct pipe_blend_sta
} }
} }
if (state->independent_blend_enable) { if (state->independent_blend_enable &&
has_feature(feat_indep_blend)) {
/* ARB_draw_buffers_blend is required for this */ /* ARB_draw_buffers_blend is required for this */
int i; int i;
@ -7574,12 +7579,8 @@ void vrend_renderer_fill_caps(uint32_t set, uint32_t version,
has_feature(feat_gl_conditional_render)) has_feature(feat_gl_conditional_render))
caps->v1.bset.conditional_render = 1; caps->v1.bset.conditional_render = 1;
if (gl_ver >= 30) { if (has_feature(feat_indep_blend))
caps->v1.bset.indep_blend_enable = 1; caps->v1.bset.indep_blend_enable = 1;
} else {
if (epoxy_has_gl_extension("GL_EXT_draw_buffers2"))
caps->v1.bset.indep_blend_enable = 1;
}
if (vrend_state.use_core_profile) { if (vrend_state.use_core_profile) {
caps->v1.bset.poly_stipple = 0; caps->v1.bset.poly_stipple = 0;

Loading…
Cancel
Save