[Mesa-dev] [PATCH] gallium: remove pipe_blend_state::dither
Ilia Mirkin
imirkin at alum.mit.edu
Wed Jan 31 19:58:15 UTC 2018
nine uses it, GL uses it, a bunch of drivers implement it ... why is
it being removed?
On Wed, Jan 31, 2018 at 2:55 PM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> very few drivers actually implement it.
> ---
> src/gallium/auxiliary/util/u_dump_state.c | 1 -
> src/gallium/auxiliary/vl/vl_compositor.c | 1 -
> src/gallium/auxiliary/vl/vl_idct.c | 1 -
> src/gallium/auxiliary/vl/vl_mc.c | 1 -
> src/gallium/auxiliary/vl/vl_zscan.c | 1 -
> src/gallium/docs/source/cso/blend.rst | 10 ----------
> src/gallium/drivers/etnaviv/etnaviv_blend.c | 14 +++-----------
> src/gallium/drivers/freedreno/a2xx/fd2_blend.c | 3 ---
> src/gallium/drivers/freedreno/a3xx/fd3_blend.c | 3 ---
> src/gallium/drivers/freedreno/a4xx/fd4_blend.c | 3 ---
> src/gallium/drivers/freedreno/a5xx/fd5_blend.c | 3 ---
> src/gallium/drivers/i915/i915_state.c | 3 ---
> src/gallium/drivers/nouveau/nv30/nv30_state.c | 2 +-
> src/gallium/drivers/r300/r300_state.c | 12 ------------
> src/gallium/drivers/trace/tr_dump_state.c | 2 --
> src/gallium/drivers/virgl/virgl_encode.c | 2 +-
> src/gallium/include/pipe/p_state.h | 1 -
> src/gallium/state_trackers/nine/nine_pipe.c | 2 --
> src/gallium/state_trackers/va/surface.c | 1 -
> src/gallium/state_trackers/vdpau/output.c | 1 -
> src/mesa/state_tracker/st_atom_blend.c | 2 --
> src/mesa/state_tracker/st_cb_clear.c | 3 ---
> 22 files changed, 5 insertions(+), 67 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_dump_state.c b/src/gallium/auxiliary/util/u_dump_state.c
> index b68de13..ddaafef 100644
> --- a/src/gallium/auxiliary/util/u_dump_state.c
> +++ b/src/gallium/auxiliary/util/u_dump_state.c
> @@ -591,21 +591,20 @@ util_dump_blend_state(FILE *stream, const struct pipe_blend_state *state)
> {
> unsigned valid_entries = 1;
>
> if (!state) {
> util_dump_null(stream);
> return;
> }
>
> util_dump_struct_begin(stream, "pipe_blend_state");
>
> - util_dump_member(stream, bool, state, dither);
> util_dump_member(stream, bool, state, alpha_to_coverage);
> util_dump_member(stream, bool, state, alpha_to_one);
>
> util_dump_member(stream, bool, state, logicop_enable);
> if (state->logicop_enable) {
> util_dump_member(stream, enum_func, state, logicop_func);
> }
> else {
> util_dump_member(stream, bool, state, independent_blend_enable);
>
> diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
> index 725bfd9..d264d87 100644
> --- a/src/gallium/auxiliary/vl/vl_compositor.c
> +++ b/src/gallium/auxiliary/vl/vl_compositor.c
> @@ -579,21 +579,20 @@ init_pipe_state(struct vl_compositor *c)
> sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
> sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
> c->sampler_nearest = c->pipe->create_sampler_state(c->pipe, &sampler);
>
> memset(&blend, 0, sizeof blend);
> blend.independent_blend_enable = 0;
> blend.rt[0].blend_enable = 0;
> blend.logicop_enable = 0;
> blend.logicop_func = PIPE_LOGICOP_CLEAR;
> blend.rt[0].colormask = PIPE_MASK_RGBA;
> - blend.dither = 0;
> c->blend_clear = c->pipe->create_blend_state(c->pipe, &blend);
>
> blend.rt[0].blend_enable = 1;
> blend.rt[0].rgb_func = PIPE_BLEND_ADD;
> blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_SRC_ALPHA;
> blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_INV_SRC_ALPHA;
> blend.rt[0].alpha_func = PIPE_BLEND_ADD;
> blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
> c->blend_add = c->pipe->create_blend_state(c->pipe, &blend);
> diff --git a/src/gallium/auxiliary/vl/vl_idct.c b/src/gallium/auxiliary/vl/vl_idct.c
> index 3e6f581..9995087 100644
> --- a/src/gallium/auxiliary/vl/vl_idct.c
> +++ b/src/gallium/auxiliary/vl/vl_idct.c
> @@ -528,21 +528,20 @@ init_state(struct vl_idct *idct)
> blend.rt[0].rgb_func = PIPE_BLEND_ADD;
> blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].alpha_func = PIPE_BLEND_ADD;
> blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
> blend.logicop_enable = 0;
> blend.logicop_func = PIPE_LOGICOP_CLEAR;
> /* Needed to allow color writes to FB, even if blending disabled */
> blend.rt[0].colormask = PIPE_MASK_RGBA;
> - blend.dither = 0;
> idct->blend = idct->pipe->create_blend_state(idct->pipe, &blend);
> if (!idct->blend)
> goto error_blend;
>
> for (i = 0; i < 2; ++i) {
> memset(&sampler, 0, sizeof(sampler));
> sampler.wrap_s = PIPE_TEX_WRAP_REPEAT;
> sampler.wrap_t = PIPE_TEX_WRAP_REPEAT;
> sampler.wrap_r = PIPE_TEX_WRAP_REPEAT;
> sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
> diff --git a/src/gallium/auxiliary/vl/vl_mc.c b/src/gallium/auxiliary/vl/vl_mc.c
> index a202fac..944b4fc 100644
> --- a/src/gallium/auxiliary/vl/vl_mc.c
> +++ b/src/gallium/auxiliary/vl/vl_mc.c
> @@ -402,21 +402,20 @@ init_pipe_state(struct vl_mc *r)
> blend.rt[0].blend_enable = 1;
> blend.rt[0].rgb_func = PIPE_BLEND_ADD;
> blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_SRC_ALPHA;
> blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ZERO;
> blend.rt[0].alpha_func = PIPE_BLEND_ADD;
> blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_SRC_ALPHA;
> blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
> blend.logicop_enable = 0;
> blend.logicop_func = PIPE_LOGICOP_CLEAR;
> blend.rt[0].colormask = i;
> - blend.dither = 0;
> r->blend_clear[i] = r->pipe->create_blend_state(r->pipe, &blend);
> if (!r->blend_clear[i])
> goto error_blend;
>
> blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
> r->blend_add[i] = r->pipe->create_blend_state(r->pipe, &blend);
> if (!r->blend_add[i])
> goto error_blend;
>
> diff --git a/src/gallium/auxiliary/vl/vl_zscan.c b/src/gallium/auxiliary/vl/vl_zscan.c
> index 75013c4..f15bf69 100644
> --- a/src/gallium/auxiliary/vl/vl_zscan.c
> +++ b/src/gallium/auxiliary/vl/vl_zscan.c
> @@ -309,21 +309,20 @@ init_state(struct vl_zscan *zscan)
> blend.rt[0].rgb_func = PIPE_BLEND_ADD;
> blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].alpha_func = PIPE_BLEND_ADD;
> blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ONE;
> blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ONE;
> blend.logicop_enable = 0;
> blend.logicop_func = PIPE_LOGICOP_CLEAR;
> /* Needed to allow color writes to FB, even if blending disabled */
> blend.rt[0].colormask = PIPE_MASK_RGBA;
> - blend.dither = 0;
> zscan->blend = zscan->pipe->create_blend_state(zscan->pipe, &blend);
> if (!zscan->blend)
> goto error_blend;
>
> for (i = 0; i < 3; ++i) {
> memset(&sampler, 0, sizeof(sampler));
> sampler.wrap_s = PIPE_TEX_WRAP_REPEAT;
> sampler.wrap_t = PIPE_TEX_WRAP_REPEAT;
> sampler.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
> sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST;
> diff --git a/src/gallium/docs/source/cso/blend.rst b/src/gallium/docs/source/cso/blend.rst
> index 7316e5c..d08a297 100644
> --- a/src/gallium/docs/source/cso/blend.rst
> +++ b/src/gallium/docs/source/cso/blend.rst
> @@ -54,30 +54,20 @@ and performing one of the following operations per-channel:
> .. note::
> The logical operation names and definitions match those of the OpenGL API,
> and are similar to the ROP2 and ROP3 definitions of GDI. This is
> intentional, to ease transitions to Gallium.
>
> Members
> -------
>
> These members affect all render targets.
>
> -dither
> -%%%%%%
> -
> -Whether dithering is enabled.
> -
> -.. note::
> - Dithering is completely implementation-dependent. It may be ignored by
> - drivers for any reason, and some render targets may always or never be
> - dithered depending on their format or usage flags.
> -
> logicop_enable
> %%%%%%%%%%%%%%
>
> Whether the blender should perform a logicop instead of blending.
>
> logicop_func
> %%%%%%%%%%%%
>
> The logicop to use. One of ``PIPE_LOGICOP``.
>
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_blend.c b/src/gallium/drivers/etnaviv/etnaviv_blend.c
> index 9c23411..13ff17e 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_blend.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_blend.c
> @@ -85,31 +85,23 @@ etna_blend_state_create(struct pipe_context *pctx,
> VIV_FEATURE(ctx->screen, chipMinorFeatures2, LOGIC_OP);
>
> co->PE_LOGIC_OP =
> VIVS_PE_LOGIC_OP_OP(logicop_enable ? so->logicop_func : LOGIC_OP_COPY) |
> 0x000E4000 /* ??? */;
>
> co->fo_allowed = !alpha_enable && !logicop_enable;
>
> /* independent_blend_enable not needed: only one rt supported */
> /* XXX alpha_to_coverage / alpha_to_one? */
> - /* Set dither registers based on dither status. These registers set the
> - * dither pattern,
> - * for now, set the same values as the blob.
> - */
> - if (so->dither) {
> - co->PE_DITHER[0] = 0x6e4ca280;
> - co->PE_DITHER[1] = 0x5d7f91b3;
> - } else {
> - co->PE_DITHER[0] = 0xffffffff;
> - co->PE_DITHER[1] = 0xffffffff;
> - }
> +
> + co->PE_DITHER[0] = 0xffffffff;
> + co->PE_DITHER[1] = 0xffffffff;
>
> return co;
> }
>
> bool
> etna_update_blend(struct etna_context *ctx)
> {
> struct pipe_framebuffer_state *pfb = &ctx->framebuffer_s;
> struct pipe_blend_state *pblend = ctx->blend;
> struct etna_blend_state *blend = etna_blend_state(pblend);
> diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_blend.c b/src/gallium/drivers/freedreno/a2xx/fd2_blend.c
> index 4e99179..d17357f 100644
> --- a/src/gallium/drivers/freedreno/a2xx/fd2_blend.c
> +++ b/src/gallium/drivers/freedreno/a2xx/fd2_blend.c
> @@ -100,15 +100,12 @@ fd2_blend_state_create(struct pipe_context *pctx,
> if (rt->colormask & PIPE_MASK_G)
> so->rb_colormask |= A2XX_RB_COLOR_MASK_WRITE_GREEN;
> if (rt->colormask & PIPE_MASK_B)
> so->rb_colormask |= A2XX_RB_COLOR_MASK_WRITE_BLUE;
> if (rt->colormask & PIPE_MASK_A)
> so->rb_colormask |= A2XX_RB_COLOR_MASK_WRITE_ALPHA;
>
> if (!rt->blend_enable)
> so->rb_colorcontrol |= A2XX_RB_COLORCONTROL_BLEND_DISABLE;
>
> - if (cso->dither)
> - so->rb_colorcontrol |= A2XX_RB_COLORCONTROL_DITHER_MODE(DITHER_ALWAYS);
> -
> return so;
> }
> diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_blend.c b/src/gallium/drivers/freedreno/a3xx/fd3_blend.c
> index 35360f3..1e48139 100644
> --- a/src/gallium/drivers/freedreno/a3xx/fd3_blend.c
> +++ b/src/gallium/drivers/freedreno/a3xx/fd3_blend.c
> @@ -120,20 +120,17 @@ fd3_blend_state_create(struct pipe_context *pctx,
> A3XX_RB_MRT_CONTROL_COMPONENT_ENABLE(rt->colormask);
>
> if (rt->blend_enable)
> so->rb_mrt[i].control |=
> A3XX_RB_MRT_CONTROL_READ_DEST_ENABLE |
> A3XX_RB_MRT_CONTROL_BLEND |
> A3XX_RB_MRT_CONTROL_BLEND2;
>
> if (reads_dest)
> so->rb_mrt[i].control |= A3XX_RB_MRT_CONTROL_READ_DEST_ENABLE;
> -
> - if (cso->dither)
> - so->rb_mrt[i].control |= A3XX_RB_MRT_CONTROL_DITHER_MODE(DITHER_ALWAYS);
> }
>
> if (cso->rt[0].blend_enable && util_blend_state_is_dual(cso, 0))
> so->rb_render_control = A3XX_RB_RENDER_CONTROL_DUAL_COLOR_IN_ENABLE;
>
> return so;
> }
> diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_blend.c b/src/gallium/drivers/freedreno/a4xx/fd4_blend.c
> index e262e05..fa9621e 100644
> --- a/src/gallium/drivers/freedreno/a4xx/fd4_blend.c
> +++ b/src/gallium/drivers/freedreno/a4xx/fd4_blend.c
> @@ -125,20 +125,17 @@ fd4_blend_state_create(struct pipe_context *pctx,
> A4XX_RB_MRT_CONTROL_READ_DEST_ENABLE |
> A4XX_RB_MRT_CONTROL_BLEND |
> A4XX_RB_MRT_CONTROL_BLEND2;
> mrt_blend |= (1 << i);
> }
>
> if (reads_dest) {
> so->rb_mrt[i].control |= A4XX_RB_MRT_CONTROL_READ_DEST_ENABLE;
> mrt_blend |= (1 << i);
> }
> -
> - if (cso->dither)
> - so->rb_mrt[i].buf_info |= A4XX_RB_MRT_BUF_INFO_DITHER_MODE(DITHER_ALWAYS);
> }
>
> so->rb_fs_output = A4XX_RB_FS_OUTPUT_ENABLE_BLEND(mrt_blend) |
> COND(cso->independent_blend_enable, A4XX_RB_FS_OUTPUT_INDEPENDENT_BLEND);
>
> return so;
> }
> diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_blend.c b/src/gallium/drivers/freedreno/a5xx/fd5_blend.c
> index 98b6d44..eda6318 100644
> --- a/src/gallium/drivers/freedreno/a5xx/fd5_blend.c
> +++ b/src/gallium/drivers/freedreno/a5xx/fd5_blend.c
> @@ -127,22 +127,19 @@ fd5_blend_state_create(struct pipe_context *pctx,
> A5XX_RB_MRT_CONTROL_BLEND |
> A5XX_RB_MRT_CONTROL_BLEND2;
> mrt_blend |= (1 << i);
> so->lrz_write = false;
> }
>
> if (reads_dest) {
> // so->rb_mrt[i].control |= A5XX_RB_MRT_CONTROL_READ_DEST_ENABLE;
> mrt_blend |= (1 << i);
> }
> -
> -// if (cso->dither)
> -// so->rb_mrt[i].buf_info |= A5XX_RB_MRT_BUF_INFO_DITHER_MODE(DITHER_ALWAYS);
> }
>
> so->rb_blend_cntl = A5XX_RB_BLEND_CNTL_ENABLE_BLEND(mrt_blend) |
> COND(cso->independent_blend_enable, A5XX_RB_BLEND_CNTL_INDEPENDENT_BLEND);
> so->sp_blend_cntl = A5XX_SP_BLEND_CNTL_UNK8 |
> COND(mrt_blend, A5XX_SP_BLEND_CNTL_ENABLED);
>
> return so;
> }
> diff --git a/src/gallium/drivers/i915/i915_state.c b/src/gallium/drivers/i915/i915_state.c
> index ddc2709..d837850 100644
> --- a/src/gallium/drivers/i915/i915_state.c
> +++ b/src/gallium/drivers/i915/i915_state.c
> @@ -137,23 +137,20 @@ i915_create_blend_state(struct pipe_context *pipe,
> }
> }
>
> cso_data->modes4 |= (_3DSTATE_MODES_4_CMD |
> ENABLE_LOGIC_OP_FUNC |
> LOGIC_OP_FUNC(i915_translate_logic_op(blend->logicop_func)));
>
> if (blend->logicop_enable)
> cso_data->LIS5 |= S5_LOGICOP_ENABLE;
>
> - if (blend->dither)
> - cso_data->LIS5 |= S5_COLOR_DITHER_ENABLE;
> -
> /* We potentially do some fixup at emission for non-BGRA targets */
> if ((blend->rt[0].colormask & PIPE_MASK_R) == 0)
> cso_data->LIS5 |= S5_WRITEDISABLE_RED;
>
> if ((blend->rt[0].colormask & PIPE_MASK_G) == 0)
> cso_data->LIS5 |= S5_WRITEDISABLE_GREEN;
>
> if ((blend->rt[0].colormask & PIPE_MASK_B) == 0)
> cso_data->LIS5 |= S5_WRITEDISABLE_BLUE;
>
> diff --git a/src/gallium/drivers/nouveau/nv30/nv30_state.c b/src/gallium/drivers/nouveau/nv30/nv30_state.c
> index 2a81225..3b86e07 100644
> --- a/src/gallium/drivers/nouveau/nv30/nv30_state.c
> +++ b/src/gallium/drivers/nouveau/nv30/nv30_state.c
> @@ -52,21 +52,21 @@ nv30_blend_state_create(struct pipe_context *pipe,
> if (cso->logicop_enable) {
> SB_MTHD30(so, COLOR_LOGIC_OP_ENABLE, 2);
> SB_DATA (so, 1);
> SB_DATA (so, nvgl_logicop_func(cso->logicop_func));
> } else {
> SB_MTHD30(so, COLOR_LOGIC_OP_ENABLE, 1);
> SB_DATA (so, 0);
> }
>
> SB_MTHD30(so, DITHER_ENABLE, 1);
> - SB_DATA (so, cso->dither);
> + SB_DATA (so, 0);
>
> blend[0] = cso->rt[0].blend_enable;
> cmask[0] = !!(cso->rt[0].colormask & PIPE_MASK_A) << 24 |
> !!(cso->rt[0].colormask & PIPE_MASK_R) << 16 |
> !!(cso->rt[0].colormask & PIPE_MASK_G) << 8 |
> !!(cso->rt[0].colormask & PIPE_MASK_B);
> if (cso->independent_blend_enable) {
> blend[1] = 0;
> cmask[1] = 0;
> for (i = 1; i < 4; i++) {
> diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
> index 437df48..ace8940 100644
> --- a/src/gallium/drivers/r300/r300_state.c
> +++ b/src/gallium/drivers/r300/r300_state.c
> @@ -448,32 +448,20 @@ static void* r300_create_blend_state(struct pipe_context* pipe,
> alpha_blend_control_noalpha_noclamp |= r300_translate_blend_function(eqA, FALSE);
> }
> }
>
> /* PIPE_LOGICOP_* don't need to be translated, fortunately. */
> if (state->logicop_enable) {
> rop = R300_RB3D_ROPCNTL_ROP_ENABLE |
> (state->logicop_func) << R300_RB3D_ROPCNTL_ROP_SHIFT;
> }
>
> - /* Neither fglrx nor classic r300 ever set this, regardless of dithering
> - * state. Since it's an optional implementation detail, we can leave it
> - * out and never dither.
> - *
> - * This could be revisited if we ever get quality or conformance hints.
> - *
> - if (state->dither) {
> - dither = R300_RB3D_DITHER_CTL_DITHER_MODE_LUT |
> - R300_RB3D_DITHER_CTL_ALPHA_DITHER_MODE_LUT;
> - }
> - */
> -
> /* Build a command buffer. */
> {
> unsigned (*func[COLORMASK_NUM_SWIZZLES])(unsigned) = {
> bgra_cmask,
> rgba_cmask,
> rrrr_cmask,
> aaaa_cmask,
> grrg_cmask,
> arra_cmask,
> bgra_cmask,
> diff --git a/src/gallium/drivers/trace/tr_dump_state.c b/src/gallium/drivers/trace/tr_dump_state.c
> index e7e3223..81e727f 100644
> --- a/src/gallium/drivers/trace/tr_dump_state.c
> +++ b/src/gallium/drivers/trace/tr_dump_state.c
> @@ -414,22 +414,20 @@ void trace_dump_blend_state(const struct pipe_blend_state *state)
> if (!trace_dumping_enabled_locked())
> return;
>
> if (!state) {
> trace_dump_null();
> return;
> }
>
> trace_dump_struct_begin("pipe_blend_state");
>
> - trace_dump_member(bool, state, dither);
> -
> trace_dump_member(bool, state, logicop_enable);
> trace_dump_member(uint, state, logicop_func);
>
> trace_dump_member(bool, state, independent_blend_enable);
>
> trace_dump_member_begin("rt");
> if (state->independent_blend_enable)
> valid_entries = PIPE_MAX_COLOR_BUFS;
> trace_dump_struct_array(rt_blend_state, state->rt, valid_entries);
> trace_dump_member_end();
> diff --git a/src/gallium/drivers/virgl/virgl_encode.c b/src/gallium/drivers/virgl/virgl_encode.c
> index ee68fe0..e459536 100644
> --- a/src/gallium/drivers/virgl/virgl_encode.c
> +++ b/src/gallium/drivers/virgl/virgl_encode.c
> @@ -83,21 +83,21 @@ int virgl_encode_blend_state(struct virgl_context *ctx,
> {
> uint32_t tmp;
> int i;
>
> virgl_encoder_write_cmd_dword(ctx, VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_BLEND, VIRGL_OBJ_BLEND_SIZE));
> virgl_encoder_write_dword(ctx->cbuf, handle);
>
> tmp =
> VIRGL_OBJ_BLEND_S0_INDEPENDENT_BLEND_ENABLE(blend_state->independent_blend_enable) |
> VIRGL_OBJ_BLEND_S0_LOGICOP_ENABLE(blend_state->logicop_enable) |
> - VIRGL_OBJ_BLEND_S0_DITHER(blend_state->dither) |
> + VIRGL_OBJ_BLEND_S0_DITHER(0) |
> VIRGL_OBJ_BLEND_S0_ALPHA_TO_COVERAGE(blend_state->alpha_to_coverage) |
> VIRGL_OBJ_BLEND_S0_ALPHA_TO_ONE(blend_state->alpha_to_one);
>
> virgl_encoder_write_dword(ctx->cbuf, tmp);
>
> tmp = VIRGL_OBJ_BLEND_S1_LOGICOP_FUNC(blend_state->logicop_func);
> virgl_encoder_write_dword(ctx->cbuf, tmp);
>
> for (i = 0; i < VIRGL_MAX_COLOR_BUFS; i++) {
> tmp =
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index 10d21db..6bfd661 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -336,21 +336,20 @@ struct pipe_rt_blend_state
>
> unsigned colormask:4; /**< bitmask of PIPE_MASK_R/G/B/A */
> };
>
>
> struct pipe_blend_state
> {
> unsigned independent_blend_enable:1;
> unsigned logicop_enable:1;
> unsigned logicop_func:4; /**< PIPE_LOGICOP_x */
> - unsigned dither:1;
> unsigned alpha_to_coverage:1;
> unsigned alpha_to_one:1;
> struct pipe_rt_blend_state rt[PIPE_MAX_COLOR_BUFS];
> };
>
>
> struct pipe_blend_color
> {
> float color[4];
> };
> diff --git a/src/gallium/state_trackers/nine/nine_pipe.c b/src/gallium/state_trackers/nine/nine_pipe.c
> index a28b4c6..a98ba10 100644
> --- a/src/gallium/state_trackers/nine/nine_pipe.c
> +++ b/src/gallium/state_trackers/nine/nine_pipe.c
> @@ -152,22 +152,20 @@ nine_convert_blend_state_fixup(struct pipe_blend_state *blend, const DWORD *rs)
> }
> }
>
> void
> nine_convert_blend_state(struct pipe_blend_state *blend_state, const DWORD *rs)
> {
> struct pipe_blend_state blend;
>
> memset(&blend, 0, sizeof(blend)); /* memcmp safety */
>
> - blend.dither = !!rs[D3DRS_DITHERENABLE];
> -
> /* blend.alpha_to_one = 0; */
> blend.alpha_to_coverage = rs[NINED3DRS_ALPHACOVERAGE] & 1;
>
> blend.rt[0].blend_enable = !!rs[D3DRS_ALPHABLENDENABLE];
> if (blend.rt[0].blend_enable) {
> blend.rt[0].rgb_func = d3dblendop_to_pipe_blend(rs[D3DRS_BLENDOP]);
> blend.rt[0].rgb_src_factor = d3dblend_color_to_pipe_blendfactor(rs[D3DRS_SRCBLEND]);
> blend.rt[0].rgb_dst_factor = d3dblend_color_to_pipe_blendfactor(rs[D3DRS_DESTBLEND]);
> if (rs[D3DRS_SEPARATEALPHABLENDENABLE]) {
> blend.rt[0].alpha_func = d3dblendop_to_pipe_blend(rs[D3DRS_BLENDOPALPHA]);
> diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c
> index 636505b..8ac4b5e 100644
> --- a/src/gallium/state_trackers/va/surface.c
> +++ b/src/gallium/state_trackers/va/surface.c
> @@ -243,21 +243,20 @@ vlVaPutSubpictures(vlVaSurface *surf, vlVaDriver *drv,
> blend.rt[0].blend_enable = 1;
> blend.rt[0].rgb_src_factor = PIPE_BLENDFACTOR_SRC_ALPHA;
> blend.rt[0].rgb_dst_factor = PIPE_BLENDFACTOR_INV_SRC_ALPHA;
> blend.rt[0].alpha_src_factor = PIPE_BLENDFACTOR_ZERO;
> blend.rt[0].alpha_dst_factor = PIPE_BLENDFACTOR_ZERO;
> blend.rt[0].rgb_func = PIPE_BLEND_ADD;
> blend.rt[0].alpha_func = PIPE_BLEND_ADD;
> blend.rt[0].colormask = PIPE_MASK_RGBA;
> blend.logicop_enable = 0;
> blend.logicop_func = PIPE_LOGICOP_CLEAR;
> - blend.dither = 0;
> blend_state = drv->pipe->create_blend_state(drv->pipe, &blend);
>
> vl_compositor_clear_layers(&drv->cstate);
> vl_compositor_set_layer_blend(&drv->cstate, 0, blend_state, false);
> upload_sampler(drv->pipe, sub->sampler, &box, buf->data,
> sub->image->pitches[0], 0, 0);
> vl_compositor_set_rgba_layer(&drv->cstate, &drv->compositor, 0, sub->sampler,
> &sr, NULL, NULL);
> vl_compositor_set_layer_dst_area(&drv->cstate, 0, &dr);
> vl_compositor_render(&drv->cstate, &drv->compositor, surf_draw, dirty_area, false);
> diff --git a/src/gallium/state_trackers/vdpau/output.c b/src/gallium/state_trackers/vdpau/output.c
> index 8ef8268..c2208b4 100644
> --- a/src/gallium/state_trackers/vdpau/output.c
> +++ b/src/gallium/state_trackers/vdpau/output.c
> @@ -602,21 +602,20 @@ BlenderToPipe(struct pipe_context *context,
> blend.rt[0].alpha_dst_factor = BlendFactorToPipe(blend_state->blend_factor_destination_alpha);
> blend.rt[0].rgb_func = BlendEquationToPipe(blend_state->blend_equation_color);
> blend.rt[0].alpha_func = BlendEquationToPipe(blend_state->blend_equation_alpha);
> } else {
> blend.rt[0].blend_enable = 0;
> }
>
> blend.logicop_enable = 0;
> blend.logicop_func = PIPE_LOGICOP_CLEAR;
> blend.rt[0].colormask = PIPE_MASK_RGBA;
> - blend.dither = 0;
>
> return context->create_blend_state(context, &blend);
> }
>
> static struct vertex4f *
> ColorsToPipe(VdpColor const *colors, uint32_t flags, struct vertex4f result[4])
> {
> unsigned i;
> struct vertex4f *dst = result;
>
> diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c
> index cc2c288..429d4b1 100644
> --- a/src/mesa/state_tracker/st_atom_blend.c
> +++ b/src/mesa/state_tracker/st_atom_blend.c
> @@ -205,22 +205,20 @@ st_update_blend( struct st_context *st )
> translate_blend(ctx->Color.Blend[i].SrcA);
> blend->rt[i].alpha_dst_factor =
> translate_blend(ctx->Color.Blend[i].DstA);
> }
> }
> }
> else {
> /* no blending / logicop */
> }
>
> - blend->dither = ctx->Color.DitherFlag;
> -
> if (_mesa_is_multisample_enabled(ctx) &&
> !(ctx->DrawBuffer->_IntegerBuffers & 0x1)) {
> /* Unlike in gallium/d3d10 these operations are only performed
> * if both msaa is enabled and we have a multisample buffer.
> */
> blend->alpha_to_coverage = ctx->Multisample.SampleAlphaToCoverage;
> blend->alpha_to_one = ctx->Multisample.SampleAlphaToOne;
> }
>
> cso_set_blend(st->cso_context, blend);
> diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
> index 6867718..54e665a 100644
> --- a/src/mesa/state_tracker/st_cb_clear.c
> +++ b/src/mesa/state_tracker/st_cb_clear.c
> @@ -221,23 +221,20 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
> int i;
>
> blend.independent_blend_enable = num_buffers > 1;
>
> for (i = 0; i < num_buffers; i++) {
> if (!(clear_buffers & (PIPE_CLEAR_COLOR0 << i)))
> continue;
>
> blend.rt[i].colormask = GET_COLORMASK(ctx->Color.ColorMask, i);
> }
> -
> - if (ctx->Color.DitherFlag)
> - blend.dither = 1;
> }
> cso_set_blend(cso, &blend);
> }
>
> /* depth_stencil state: always pass/set to ref value */
> {
> struct pipe_depth_stencil_alpha_state depth_stencil;
> memset(&depth_stencil, 0, sizeof(depth_stencil));
> if (clear_buffers & PIPE_CLEAR_DEPTH) {
> depth_stencil.depth.enabled = 1;
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list