diff --git a/docs/gallium/screen.rst b/docs/gallium/screen.rst index 8ab60463eba..2e8b6e74a35 100644 --- a/docs/gallium/screen.rst +++ b/docs/gallium/screen.rst @@ -572,6 +572,7 @@ The integer capabilities: * ``PIPE_CAP_ATOMIC_FLOAT_MINMAX``: Atomic float point minimum, maximum, exchange and compare-and-swap support to buffer and shared variables. * ``PIPE_CAP_TGSI_DIV``: Whether opcode DIV is supported +* ``PIPE_CAP_DITHERING``: Whether dithering is supported * ``PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD``: Whether texture lookups with explicit LOD is supported in the fragment shader. * ``PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES``: True if the driver supports diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c index e80d8915f68..227e599f0b3 100644 --- a/src/gallium/auxiliary/util/u_screen.c +++ b/src/gallium/auxiliary/util/u_screen.c @@ -49,6 +49,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen, case PIPE_CAP_GRAPHICS: case PIPE_CAP_GL_CLAMP: case PIPE_CAP_MAX_RENDER_TARGETS: + case PIPE_CAP_DITHERING: return 1; case PIPE_CAP_OCCLUSION_QUERY: diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 50c89824d8d..cc7a482d05f 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -1010,6 +1010,7 @@ enum pipe_cap PIPE_CAP_ALLOW_DRAW_OUT_OF_ORDER, PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT, PIPE_CAP_HARDWARE_GL_SELECT, + PIPE_CAP_DITHERING, PIPE_CAP_LAST, /* XXX do not add caps after PIPE_CAP_LAST! */ diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c index 4b73856b493..508a932e279 100644 --- a/src/mesa/state_tracker/st_atom_blend.c +++ b/src/mesa/state_tracker/st_atom_blend.c @@ -283,7 +283,8 @@ st_update_blend( struct st_context *st ) /* no blending / logicop */ } - blend->dither = ctx->Color.DitherFlag; + if (st->can_dither) + blend->dither = ctx->Color.DitherFlag; if (_mesa_is_multisample_enabled(ctx) && !(ctx->DrawBuffer->_IntegerBuffers & 0x1)) { diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index c5cdadb3216..b9c69e52409 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -613,6 +613,8 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe, screen->get_param(screen, PIPE_CAP_INDEP_BLEND_FUNC); st->needs_rgb_dst_alpha_override = screen->get_param(screen, PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND); + st->can_dither = + screen->get_param(screen, PIPE_CAP_DITHERING); st->lower_flatshade = !screen->get_param(screen, PIPE_CAP_FLATSHADE); st->lower_alpha_test = diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index 749d3a4fea5..2f1f2f84f45 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -153,6 +153,7 @@ struct st_context boolean has_single_pipe_stat; boolean has_indep_blend_func; boolean needs_rgb_dst_alpha_override; + boolean can_dither; boolean can_bind_const_buffer_as_vertex; boolean lower_flatshade; boolean lower_alpha_test;