Hi Christian, this one is a logical follow-up to my piglit fixes series. Since the other patches have landed, it would be nice if you could also land this one.
Regards, Lucas Am Montag, den 05.06.2017, 21:11 +0200 schrieb Lucas Stach: > Same as with the colormasks, the blend color needs to be swizzled according > to the rendertarget format. > > Signed-off-by: Lucas Stach <d...@lynxeye.de> > --- > src/gallium/drivers/etnaviv/etnaviv_blend.c | 35 > ++++++++++++++++++++++++++ > src/gallium/drivers/etnaviv/etnaviv_blend.h | 6 +++++ > src/gallium/drivers/etnaviv/etnaviv_internal.h | 1 + > src/gallium/drivers/etnaviv/etnaviv_state.c | 17 +++---------- > 4 files changed, 45 insertions(+), 14 deletions(-) > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_blend.c > b/src/gallium/drivers/etnaviv/etnaviv_blend.c > index 8ea09a3..6ed0e0f 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_blend.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_blend.c > @@ -129,3 +129,38 @@ etna_update_blend(struct etna_context *ctx) > > return true; > } > + > +void > +etna_set_blend_color(struct pipe_context *pctx, const struct > pipe_blend_color *bc) > +{ > + struct etna_context *ctx = etna_context(pctx); > + struct compiled_blend_color *cs = &ctx->blend_color; > + > + memcpy(cs->color, bc->color, sizeof(float) * 4); > + > + ctx->dirty |= ETNA_DIRTY_BLEND_COLOR; > +} > + > +bool > +etna_update_blend_color(struct etna_context *ctx) > +{ > + struct pipe_framebuffer_state *pfb = &ctx->framebuffer_s; > + struct compiled_blend_color *cs = &ctx->blend_color; > + > + if (pfb->cbufs[0] && > + translate_rs_format_rb_swap(pfb->cbufs[0]->texture->format)) { > + cs->PE_ALPHA_BLEND_COLOR = > + VIVS_PE_ALPHA_BLEND_COLOR_R(etna_cfloat_to_uint8(cs->color[2])) | > + VIVS_PE_ALPHA_BLEND_COLOR_G(etna_cfloat_to_uint8(cs->color[1])) | > + VIVS_PE_ALPHA_BLEND_COLOR_B(etna_cfloat_to_uint8(cs->color[0])) | > + VIVS_PE_ALPHA_BLEND_COLOR_A(etna_cfloat_to_uint8(cs->color[3])); > + } else { > + cs->PE_ALPHA_BLEND_COLOR = > + VIVS_PE_ALPHA_BLEND_COLOR_R(etna_cfloat_to_uint8(cs->color[0])) | > + VIVS_PE_ALPHA_BLEND_COLOR_G(etna_cfloat_to_uint8(cs->color[1])) | > + VIVS_PE_ALPHA_BLEND_COLOR_B(etna_cfloat_to_uint8(cs->color[2])) | > + VIVS_PE_ALPHA_BLEND_COLOR_A(etna_cfloat_to_uint8(cs->color[3])); > + } > + > + return true; > +} > diff --git a/src/gallium/drivers/etnaviv/etnaviv_blend.h > b/src/gallium/drivers/etnaviv/etnaviv_blend.h > index e26864d..c219396 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_blend.h > +++ b/src/gallium/drivers/etnaviv/etnaviv_blend.h > @@ -56,4 +56,10 @@ etna_blend_state_create(struct pipe_context *pctx, > bool > etna_update_blend(struct etna_context *ctx); > > +void > +etna_set_blend_color(struct pipe_context *pctx, const struct > pipe_blend_color *bc); > + > +bool > +etna_update_blend_color(struct etna_context *ctx); > + > #endif > diff --git a/src/gallium/drivers/etnaviv/etnaviv_internal.h > b/src/gallium/drivers/etnaviv/etnaviv_internal.h > index 2f8dacb..1212fdf 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_internal.h > +++ b/src/gallium/drivers/etnaviv/etnaviv_internal.h > @@ -126,6 +126,7 @@ struct etna_specs { > > /* Compiled pipe_blend_color */ > struct compiled_blend_color { > + float color[4]; > uint32_t PE_ALPHA_BLEND_COLOR; > }; > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c > b/src/gallium/drivers/etnaviv/etnaviv_state.c > index fb7bb0f..fc3d9f1 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_state.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_state.c > @@ -43,20 +43,6 @@ > #include "util/u_memory.h" > > static void > -etna_set_blend_color(struct pipe_context *pctx, const struct > pipe_blend_color *bc) > -{ > - struct etna_context *ctx = etna_context(pctx); > - struct compiled_blend_color *cs = &ctx->blend_color; > - > - cs->PE_ALPHA_BLEND_COLOR = > - VIVS_PE_ALPHA_BLEND_COLOR_R(etna_cfloat_to_uint8(bc->color[0])) | > - VIVS_PE_ALPHA_BLEND_COLOR_G(etna_cfloat_to_uint8(bc->color[1])) | > - VIVS_PE_ALPHA_BLEND_COLOR_B(etna_cfloat_to_uint8(bc->color[2])) | > - VIVS_PE_ALPHA_BLEND_COLOR_A(etna_cfloat_to_uint8(bc->color[3])); > - ctx->dirty |= ETNA_DIRTY_BLEND_COLOR; > -} > - > -static void > etna_set_stencil_ref(struct pipe_context *pctx, const struct > pipe_stencil_ref *sr) > { > struct etna_context *ctx = etna_context(pctx); > @@ -600,6 +586,9 @@ static const struct etna_state_updater > etna_state_updates[] = { > }, > { > etna_update_blend, ETNA_DIRTY_BLEND | ETNA_DIRTY_FRAMEBUFFER > + }, > + { > + etna_update_blend_color, ETNA_DIRTY_BLEND_COLOR | > ETNA_DIRTY_FRAMEBUFFER, > } > }; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev