Hi Lucas, > 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. >
thanks for the gentle ping :) Will 'process' it in the evening (and will also have a look at the other open patches on the ml). greets -- Christian Gmeiner, MSc https://www.youtube.com/user/AloryOFFICIAL https://soundcloud.com/christian-gmeiner > 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