On Sun, Jun 30, 2013 at 9:53 PM, Marek Olšák <mar...@gmail.com> wrote: > this also fixes the fast clear with multiple colorbuffers and each having > a different format
Series is: Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> > --- > src/gallium/drivers/r600/r600_blit.c | 21 ++++++++++++--------- > 1 file changed, 12 insertions(+), 9 deletions(-) > > diff --git a/src/gallium/drivers/r600/r600_blit.c > b/src/gallium/drivers/r600/r600_blit.c > index 1cdd1c8..3b8a28b 100644 > --- a/src/gallium/drivers/r600/r600_blit.c > +++ b/src/gallium/drivers/r600/r600_blit.c > @@ -416,17 +416,22 @@ static boolean is_simple_msaa_resolve(const struct > pipe_blit_info *info) > static void r600_clear_buffer(struct pipe_context *ctx, struct pipe_resource > *dst, > unsigned offset, unsigned size, unsigned char > value); > > -static void evergreen_set_clear_color(struct pipe_context *ctx, > - struct pipe_surface *cbuf, > +static void evergreen_set_clear_color(struct pipe_surface *cbuf, > const union pipe_color_union *color) > { > - struct r600_context *rctx = (struct r600_context *)ctx; > - struct pipe_framebuffer_state *fb = &rctx->framebuffer.state; > unsigned *clear_value = ((struct r600_texture > *)cbuf->texture)->color_clear_value; > union util_color uc; > > memset(&uc, 0, sizeof(uc)); > - util_pack_color(color->f, fb->cbufs[0]->format, &uc); > + > + if (util_format_is_pure_uint(cbuf->format)) { > + util_format_write_4ui(cbuf->format, color->ui, 0, &uc, 0, 0, > 0, 1, 1); > + } else if (util_format_is_pure_sint(cbuf->format)) { > + util_format_write_4i(cbuf->format, color->i, 0, &uc, 0, 0, 0, > 1, 1); > + } else { > + util_pack_color(color->f, cbuf->format, &uc); > + } > + > memcpy(clear_value, &uc, 2 * sizeof(uint32_t)); > } > > @@ -448,10 +453,8 @@ static bool can_fast_clear_color(struct pipe_context > *ctx) > return false; > } > > - /* cannot pack color for pure integer formats */ > /* 128-bit formats are unuspported */ > - if (util_format_is_pure_integer(fb->cbufs[i]->format) || > - util_format_get_blocksizebits(fb->cbufs[i]->format) > 64) > { > + if (util_format_get_blocksizebits(fb->cbufs[i]->format) > 64) > { > return false; > } > > @@ -479,7 +482,7 @@ static void r600_clear(struct pipe_context *ctx, unsigned > buffers, > for (i = 0; i < fb->nr_cbufs; i++) { > struct r600_texture *tex = (struct r600_texture > *)fb->cbufs[i]->texture; > > - evergreen_set_clear_color(ctx, fb->cbufs[i], color); > + evergreen_set_clear_color(fb->cbufs[i], color); > r600_clear_buffer(ctx, fb->cbufs[i]->texture, > tex->cmask_offset, tex->cmask_size, > 0); > tex->dirty_level_mask |= 1 << > fb->cbufs[i]->u.tex.level; > -- > 1.8.1.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev