On Mon, Oct 31, 2016 at 11:35:36AM -0700, Jason Ekstrand wrote: > Instead, I think we just want to start using my "CCS-correct copy > patches"
I agree. > > On Tue, Oct 11, 2016 at 12:26 PM, Topi Pohjolainen > <[1]topi.pohjolai...@gmail.com> wrote: > > Signed-off-by: Topi Pohjolainen <[2]topi.pohjolai...@intel.com> > --- > src/intel/blorp/blorp.h | 2 ++ > src/intel/blorp/blorp_blit.c | 6 ++++++ > src/mesa/drivers/dri/i965/brw_blorp.c | 25 > ++++++++++++++++++++----- > 3 files changed, 28 insertions(+), 5 deletions(-) > diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h > index f69e99e..721322c 100644 > --- a/src/intel/blorp/blorp.h > +++ b/src/intel/blorp/blorp.h > @@ -94,6 +94,8 @@ struct blorp_surf > union isl_color_value clear_color; > }; > +bool blorp_copy_needs_format_override(enum isl_format fmt); > + > void > blorp_blit(struct blorp_batch *batch, > const struct blorp_surf *src_surf, > diff --git a/src/intel/blorp/blorp_blit.c > b/src/intel/blorp/blorp_blit.c > index 0c3ee72..bbeabd9 100644 > --- a/src/intel/blorp/blorp_blit.c > +++ b/src/intel/blorp/blorp_blit.c > @@ -1742,6 +1742,12 @@ get_copy_format_for_bpb(unsigned bpb) > } > } > +bool > +blorp_copy_needs_format_override(enum isl_format fmt) > +{ > + return fmt != get_copy_format_for_bpb(isl_ > format_get_layout(fmt)->bpb); > +} > + > static void > surf_convert_to_uncompressed(const struct isl_device *isl_dev, > struct brw_blorp_surface_info *info, > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c > b/src/mesa/drivers/dri/i965/brw_blorp.c > index d937c5c..4e3359c 100644 > --- a/src/mesa/drivers/dri/i965/brw_blorp.c > +++ b/src/mesa/drivers/dri/i965/brw_blorp.c > @@ -407,12 +407,18 @@ brw_blorp_copy_miptrees(struct brw_context > *brw, > unsigned dst_x, unsigned dst_y, > unsigned src_width, unsigned src_height) > { > - /* Get ready to blit. This includes depth resolving the src and > dst > - * buffers if necessary. Note: it's not necessary to do a color > resolve on > - * the destination buffer because we use the standard render > path to render > - * to destination color buffers, and the standard render path is > - * fast-color-aware. > + /* Get ready to blit. This includes color/depth resolving the > src and dst > + * buffers if necessary. > */ > + const enum isl_format dst_format = > + translate_tex_format(brw, dst_mt->format, false); > + const bool disable_dst_aux = > + dst_mt->mcs_mt && intel_miptree_is_lossless_compressed(brw, > dst_mt) && > + blorp_copy_needs_format_override(dst_format); > + > + if (disable_dst_aux) > + intel_miptree_resolve_color(brw, dst_mt, dst_level, > dst_layer, 0); > + > intel_miptree_resolve_color(brw, src_mt, src_level, src_layer, > INTEL_MIPTREE_IGNORE_CCS_E); > intel_miptree_slice_resolve_depth(brw, src_mt, src_level, > src_layer); > @@ -437,6 +443,15 @@ brw_blorp_copy_miptrees(struct brw_context > *brw, > blorp_surf_for_miptree(brw, &dst_surf, dst_mt, true, > &dst_level, dst_layer, &tmp_surfs[2]); > + /* Copy uses fixed formats that are guaranteed to agree with > real surface > + * formats only with respect to size. Semantics may differ which > will > + * confuse the hardware if any compression scheme is used. > Therefore the > + * copy is performed target compression disabled unless the real > format > + * matches exactly the fixed copy format. > + */ > + if (disable_dst_aux) > + dst_surf.aux_usage = ISL_AUX_USAGE_NONE; > + > struct blorp_batch batch; > blorp_batch_init(&brw->blorp, &batch, brw); > blorp_copy(&batch, &src_surf, src_level, src_layer, > -- > 2.5.5 > _______________________________________________ > mesa-dev mailing list > [3]mesa-dev@lists.freedesktop.org > [4]https://lists.freedesktop.org/mailman/listinfo/mesa-dev > > References > > 1. mailto:topi.pohjolai...@gmail.com > 2. mailto:topi.pohjolai...@intel.com > 3. mailto:mesa-dev@lists.freedesktop.org > 4. https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev