On 2018-02-21 13:45:16, Rafael Antognolli wrote: > On gen10+, if surface->clear_color_addr is present, use it directly > intead of copying it to the surface state. > > Signed-off-by: Rafael Antognolli <rafael.antogno...@intel.com> > --- > src/intel/blorp/blorp_genX_exec.h | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/src/intel/blorp/blorp_genX_exec.h > b/src/intel/blorp/blorp_genX_exec.h > index 737720a70c9..122dccd7ca1 100644 > --- a/src/intel/blorp/blorp_genX_exec.h > +++ b/src/intel/blorp/blorp_genX_exec.h > @@ -1281,11 +1281,15 @@ blorp_emit_surface_state(struct blorp_batch *batch, > write_disable_mask |= ISL_CHANNEL_ALPHA_BIT; > } > > + const bool use_clear_address = > + GEN_GEN >= 10 && (surface->clear_color_addr.buffer != NULL); > + > isl_surf_fill_state(batch->blorp->isl_dev, state, > .surf = &surf, .view = &surface->view, > .aux_surf = &surface->aux_surf, .aux_usage = > aux_usage, > .mocs = surface->addr.mocs, > .clear_color = surface->clear_color, > + .use_clear_address = use_clear_address, > .write_disables = write_disable_mask); > > blorp_surface_reloc(batch, state_offset + isl_dev->ss.addr_offset, > @@ -1305,9 +1309,11 @@ blorp_emit_surface_state(struct blorp_batch *batch, > blorp_flush_range(batch, state, GENX(RENDER_SURFACE_STATE_length) * 4); > > if (surface->clear_color_addr.buffer) { > -#if GEN_GEN > 10 > - unreachable("Implement indirect clear support on gen11+"); > -#elif GEN_GEN >= 7 && GEN_GEN <= 10 > +#if GEN_GEN >= 10 > + assert((surface->clear_color_addr.offset & 0x3f) == 0); > + blorp_surface_reloc(batch, state_offset + > isl_dev->ss.clear_value_offset, > + surface->clear_color_addr, 0);
I guess we don't need .clear_address above in isl_surf_fill_state, since we build the offset into the clear_color_addr. ? So, perhaps we can do something similar in the non-blorp relocs, and then we wouldn't need to add clear_address into isl_surf_fill_state_info? -Jordan > +#elif GEN_GEN >= 7 && GEN_GEN < 10 > struct blorp_address dst_addr = blorp_get_surface_base_address(batch); > dst_addr.offset += state_offset + isl_dev->ss.clear_value_offset; > blorp_emit_memcpy(batch, dst_addr, surface->clear_color_addr, > -- > 2.14.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > 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