<p dir="ltr"></p>
<p dir="ltr">On Jul 28, 2016 12:34 PM, "Pohjolainen, Topi" <<a href="mailto:topi.pohjolainen@intel.com">topi.pohjolainen@intel.com</a>> wrote:<br>
><br>
> On Tue, Jul 26, 2016 at 03:11:12PM -0700, Jason Ekstrand wrote:<br>
> > Instead, we add a bo and offset field to brw_blorp_surface_info and use<br>
> > those in the backend.<br>
> > ---<br>
> >  src/mesa/drivers/dri/i965/brw_blorp.c        | 10 +++++---<br>
> >  src/mesa/drivers/dri/i965/brw_blorp.h        |  3 ++-<br>
> >  src/mesa/drivers/dri/i965/brw_blorp_blit.cpp |  4 +++-<br>
> >  src/mesa/drivers/dri/i965/gen6_blorp.c       | 33 +++++++++++---------------<br>
> >  src/mesa/drivers/dri/i965/gen7_blorp.c       | 35 ++++++++++++----------------<br>
> >  src/mesa/drivers/dri/i965/gen8_blorp.c       | 10 ++++----<br>
> >  6 files changed, 45 insertions(+), 50 deletions(-)<br>
> ><br>
> > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c<br>
> > index 87d8929..cf1615f 100644<br>
> > --- a/src/mesa/drivers/dri/i965/brw_blorp.c<br>
> > +++ b/src/mesa/drivers/dri/i965/brw_blorp.c<br>
> > @@ -126,8 +126,12 @@ brw_blorp_surface_info_init(struct brw_context *brw,<br>
> >     intel_miptree_check_level_layer(mt, level, layer);<br>
> ><br>
> >     info->mt = mt;<br>
> > +   if (is_render_target)<br>
> > +      intel_miptree_used_for_rendering(mt);<br>
> ><br>
> >     intel_miptree_get_isl_surf(brw, mt, &info->surf);<br>
> > +   info->bo = mt->bo;<br>
> > +   info->offset = mt->offset;<br>
> ><br>
> >     if (mt->mcs_mt) {<br>
> >        intel_miptree_get_aux_isl_surf(brw, mt, &info->aux_surf,<br>
> > @@ -360,7 +364,7 @@ brw_blorp_emit_surface_state(struct brw_context *brw,<br>
> >     const uint32_t mocs = is_render_target ? ss_info.rb_mocs : ss_info.tex_mocs;<br>
> ><br>
> >     isl_surf_fill_state(&brw->isl_dev, dw, .surf = &surf, .view = &surface->view,<br>
> > -                       .address = surface->mt->bo->offset64 + surface->bo_offset,<br>
> > +                       .address = surface->bo->offset64 + surface->offset,<br>
> >                         .aux_surf = aux_surf, .aux_usage = surface->aux_usage,<br>
> >                         .aux_address = aux_offset,<br>
> >                         .mocs = mocs, .clear_color = clear_color,<br>
> > @@ -370,8 +374,8 @@ brw_blorp_emit_surface_state(struct brw_context *brw,<br>
> >     /* Emit relocation to surface contents */<br>
> >     drm_intel_bo_emit_reloc(brw-><a href="http://batch.bo">batch.bo</a>,<br>
> >                             surf_offset + ss_info.reloc_dw * 4,<br>
> > -                           surface->mt->bo,<br>
> > -                           dw[ss_info.reloc_dw] - surface->mt->bo->offset64,<br>
> > +                           surface->bo,<br>
> > +                           dw[ss_info.reloc_dw] - surface->bo->offset64,<br>
> >                             read_domains, write_domain);<br>
> ><br>
> >     if (aux_surf) {<br>
> > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h<br>
> > index 076d26d..98a9436 100644<br>
> > --- a/src/mesa/drivers/dri/i965/brw_blorp.h<br>
> > +++ b/src/mesa/drivers/dri/i965/brw_blorp.h<br>
> > @@ -72,6 +72,8 @@ struct brw_blorp_surface_info<br>
> >     struct intel_mipmap_tree *mt;<br>
> ><br>
> >     struct isl_surf surf;<br>
> > +   drm_intel_bo *bo;<br>
> > +   uint32_t offset;<br>
> ><br>
> >     struct isl_surf aux_surf;<br>
> >     enum isl_aux_usage aux_usage;<br>
> > @@ -81,7 +83,6 @@ struct brw_blorp_surface_info<br>
> >     /* Z offset into a 3-D texture or slice of a 2-D array texture. */<br>
> >     uint32_t z_offset;<br>
> ><br>
> > -   uint32_t bo_offset;<br>
> >     uint32_t tile_x_sa, tile_y_sa;<br>
> >  };<br>
> ><br>
> > diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp<br>
> > index ed68734..ee34a70 100644<br>
> > --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp<br>
> > +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp<br>
> > @@ -1604,11 +1604,13 @@ surf_convert_to_single_slice(struct brw_context *brw,<br>
> >                               info->view.base_array_layer,<br>
> >                               &x_offset_sa, &y_offset_sa);<br>
> ><br>
> > +   uint32_t byte_offset;<br>
> >     isl_tiling_get_intratile_offset_sa(&brw->isl_dev, info->surf.tiling,<br>
> >                                        info->view.format, info->surf.row_pitch,<br>
> >                                        x_offset_sa, y_offset_sa,<br>
> > -                                      &info->bo_offset,<br>
> > +                                      &byte_offset,<br>
> >                                        &info->tile_x_sa, &info->tile_y_sa);<br>
> > +   info->offset += byte_offset;<br>
> ><br>
> >     /* TODO: Once this file gets converted to C, we shouls just use designated<br>
> >      * initializers.<br>
> > diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.c b/src/mesa/drivers/dri/i965/gen6_blorp.c<br>
> > index 9e08374..6f3073b 100644<br>
> > --- a/src/mesa/drivers/dri/i965/gen6_blorp.c<br>
> > +++ b/src/mesa/drivers/dri/i965/gen6_blorp.c<br>
> > @@ -634,7 +634,7 @@ gen6_blorp_emit_wm_config(struct brw_context *brw,<br>
> >           dw5 |= GEN6_WM_16_DISPATCH_ENABLE;<br>
> >     }<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >        dw5 |= GEN6_WM_KILL_ENABLE; /* TODO: temporarily smash on */<br>
> >        dw2 |= 1 << GEN6_WM_SAMPLER_COUNT_SHIFT; /* Up to 4 samplers */<br>
> >     }<br>
> > @@ -700,20 +700,16 @@ gen6_blorp_emit_depth_stencil_config(struct brw_context *brw,<br>
> >                                       const struct brw_blorp_params *params)<br>
> >  {<br>
> >     uint32_t surftype;<br>
> > -   GLenum gl_target = params->depth.mt->target;<br>
> > -<br>
> > -   switch (gl_target) {<br>
> > -   case GL_TEXTURE_CUBE_MAP_ARRAY:<br>
> > -   case GL_TEXTURE_CUBE_MAP:<br>
> > -      /* The PRM claims that we should use BRW_SURFACE_CUBE for this<br>
> > -       * situation, but experiments show that gl_Layer doesn't work when we do<br>
> > -       * this.  So we use BRW_SURFACE_2D, since for rendering purposes this is<br>
> > -       * equivalent.<br>
> > -       */<br>
> > +<br>
> > +   switch (params->depth.surf.dim) {<br>
> > +   case ISL_SURF_DIM_1D:<br>
> > +      surftype = BRW_SURFACE_1D;<br>
> > +      break;<br>
> > +   case ISL_SURF_DIM_2D:<br>
> >        surftype = BRW_SURFACE_2D;<br>
> >        break;<br>
> > -   default:<br>
> > -      surftype = translate_tex_target(gl_target);<br>
> > +   case ISL_SURF_DIM_3D:<br>
> > +      surftype = BRW_SURFACE_3D;<br>
> >        break;<br>
> >     }<br>
> ><br>
> > @@ -738,9 +734,9 @@ gen6_blorp_emit_depth_stencil_config(struct brw_context *brw,<br>
> >                  surftype << 29);<br>
> ><br>
> >        /* 3DSTATE_DEPTH_BUFFER dw2 */<br>
> > -      OUT_RELOC(params->depth.mt->bo,<br>
> > +      OUT_RELOC(params-><a href="http://depth.bo">depth.bo</a>,<br>
> >                  I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,<br>
> > -                0);<br>
> > +                params->depth.offset);<br>
><br>
> This looks like a functional change.</p>
<p dir="ltr">Yes and no.  Depth miptrees are always at offset 0 right now.  However, when we start using this in Vulkan that will not be the case so I wanted to "fix" it while I was here.</p>
<p dir="ltr">> ><br>
> >        /* 3DSTATE_DEPTH_BUFFER dw3 */<br>
> >        OUT_BATCH(BRW_SURFACE_MIPMAPLAYOUT_BELOW << 1 |<br>
> > @@ -940,12 +936,11 @@ gen6_blorp_exec(struct brw_context *brw,<br>
> >        uint32_t wm_surf_offset_renderbuffer;<br>
> >        uint32_t wm_surf_offset_texture = 0;<br>
> ><br>
> > -      intel_miptree_used_for_rendering(params-><a href="http://dst.mt">dst.mt</a>);<br>
> >        wm_surf_offset_renderbuffer =<br>
> >           brw_blorp_emit_surface_state(brw, &params->dst,<br>
> >                                        I915_GEM_DOMAIN_RENDER,<br>
> >                                        I915_GEM_DOMAIN_RENDER, true);<br>
> > -      if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +      if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >           wm_surf_offset_texture =<br>
> >              brw_blorp_emit_surface_state(brw, &params->src,<br>
> >                                           I915_GEM_DOMAIN_SAMPLER, 0, false);<br>
> > @@ -956,7 +951,7 @@ gen6_blorp_exec(struct brw_context *brw,<br>
> >                                         wm_surf_offset_texture);<br>
> >     }<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >        const uint32_t sampler_offset =<br>
> >           gen6_blorp_emit_sampler_state(brw, BRW_MAPFILTER_LINEAR, 0, true);<br>
> >        gen6_blorp_emit_sampler_state_pointers(brw, sampler_offset);<br>
> > @@ -971,7 +966,7 @@ gen6_blorp_exec(struct brw_context *brw,<br>
> >        gen6_blorp_emit_binding_table_pointers(brw, wm_bind_bo_offset);<br>
> >     gen6_blorp_emit_viewport_state(brw, params);<br>
> ><br>
> > -   if (params-><a href="http://depth.mt">depth.mt</a>)<br>
> > +   if (params-><a href="http://depth.bo">depth.bo</a>)<br>
> >        gen6_blorp_emit_depth_stencil_config(brw, params);<br>
> >     else<br>
> >        gen6_blorp_emit_depth_disable(brw, params);<br>
> > diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.c b/src/mesa/drivers/dri/i965/gen7_blorp.c<br>
> > index 420a285..0ca1a7b 100644<br>
> > --- a/src/mesa/drivers/dri/i965/gen7_blorp.c<br>
> > +++ b/src/mesa/drivers/dri/i965/gen7_blorp.c<br>
> > @@ -374,7 +374,7 @@ gen7_blorp_emit_wm_config(struct brw_context *brw,<br>
> >     if (params->wm_prog_data)<br>
> >        dw1 |= GEN7_WM_DISPATCH_ENABLE; /* We are rendering */<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>)<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>)<br>
> >        dw1 |= GEN7_WM_KILL_ENABLE; /* TODO: temporarily smash on */<br>
> ><br>
> >     if (params->dst.surf.samples > 1) {<br>
> > @@ -441,7 +441,7 @@ gen7_blorp_emit_ps_config(struct brw_context *brw,<br>
> >        dw4 |= GEN7_PS_16_DISPATCH_ENABLE;<br>
> >     }<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>)<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>)<br>
> >        dw2 |= 1 << GEN7_PS_SAMPLER_COUNT_SHIFT; /* Up to 4 samplers */<br>
> ><br>
> >     dw4 |= params->fast_clear_op;<br>
> > @@ -486,20 +486,16 @@ gen7_blorp_emit_depth_stencil_config(struct brw_context *brw,<br>
> >  {<br>
> >     const uint8_t mocs = GEN7_MOCS_L3;<br>
> >     uint32_t surftype;<br>
> > -   GLenum gl_target = params->depth.mt->target;<br>
> > -<br>
> > -   switch (gl_target) {<br>
> > -   case GL_TEXTURE_CUBE_MAP_ARRAY:<br>
> > -   case GL_TEXTURE_CUBE_MAP:<br>
> > -      /* The PRM claims that we should use BRW_SURFACE_CUBE for this<br>
> > -       * situation, but experiments show that gl_Layer doesn't work when we do<br>
> > -       * this.  So we use BRW_SURFACE_2D, since for rendering purposes this is<br>
> > -       * equivalent.<br>
> > -       */<br>
> > +<br>
> > +   switch (params->depth.surf.dim) {<br>
> > +   case ISL_SURF_DIM_1D:<br>
> > +      surftype = BRW_SURFACE_1D;<br>
> > +      break;<br>
> > +   case ISL_SURF_DIM_2D:<br>
> >        surftype = BRW_SURFACE_2D;<br>
> >        break;<br>
> > -   default:<br>
> > -      surftype = translate_tex_target(gl_target);<br>
> > +   case ISL_SURF_DIM_3D:<br>
> > +      surftype = BRW_SURFACE_3D;<br>
> >        break;<br>
> >     }<br>
> ><br>
> > @@ -517,9 +513,9 @@ gen7_blorp_emit_depth_stencil_config(struct brw_context *brw,<br>
> >                  1 << 22 | /* hiz enable */<br>
> >                  1 << 28 | /* depth write */<br>
> >                  surftype << 29);<br>
> > -      OUT_RELOC(params->depth.mt->bo,<br>
> > +      OUT_RELOC(params-><a href="http://depth.bo">depth.bo</a>,<br>
> >                  I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER,<br>
> > -                0);<br>
> > +                params->depth.offset);<br>
><br>
> Same here.<br>
><br>
> >        OUT_BATCH((params->depth.surf.logical_level0_px.width - 1) << 4 |<br>
> >                  (params->depth.surf.logical_level0_px.height - 1) << 18 |<br>
> >                  params->depth.view.base_level);<br>
> > @@ -667,13 +663,12 @@ gen7_blorp_exec(struct brw_context *brw,<br>
> >        uint32_t wm_surf_offset_renderbuffer;<br>
> >        uint32_t wm_surf_offset_texture = 0;<br>
> ><br>
> > -      intel_miptree_used_for_rendering(params-><a href="http://dst.mt">dst.mt</a>);<br>
> >        wm_surf_offset_renderbuffer =<br>
> >           brw_blorp_emit_surface_state(brw, &params->dst,<br>
> >                                        I915_GEM_DOMAIN_RENDER,<br>
> >                                        I915_GEM_DOMAIN_RENDER,<br>
> >                                        true /* is_render_target */);<br>
> > -      if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +      if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >           wm_surf_offset_texture =<br>
> >              brw_blorp_emit_surface_state(brw, &params->src,<br>
> >                                           I915_GEM_DOMAIN_SAMPLER, 0,<br>
> > @@ -696,7 +691,7 @@ gen7_blorp_exec(struct brw_context *brw,<br>
> >     if (params->wm_prog_data)<br>
> >        gen7_blorp_emit_binding_table_pointers_ps(brw, wm_bind_bo_offset);<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >        const uint32_t sampler_offset =<br>
> >           gen6_blorp_emit_sampler_state(brw, BRW_MAPFILTER_LINEAR, 0, true);<br>
> >        gen7_blorp_emit_sampler_state_pointers_ps(brw, sampler_offset);<br>
> > @@ -705,7 +700,7 @@ gen7_blorp_exec(struct brw_context *brw,<br>
> >     gen7_blorp_emit_ps_config(brw, params);<br>
> >     gen7_blorp_emit_cc_viewport(brw);<br>
> ><br>
> > -   if (params-><a href="http://depth.mt">depth.mt</a>)<br>
> > +   if (params-><a href="http://depth.bo">depth.bo</a>)<br>
> >        gen7_blorp_emit_depth_stencil_config(brw, params);<br>
> >     else<br>
> >        gen7_blorp_emit_depth_disable(brw);<br>
> > diff --git a/src/mesa/drivers/dri/i965/gen8_blorp.c b/src/mesa/drivers/dri/i965/gen8_blorp.c<br>
> > index 1756b29..eac3414 100644<br>
> > --- a/src/mesa/drivers/dri/i965/gen8_blorp.c<br>
> > +++ b/src/mesa/drivers/dri/i965/gen8_blorp.c<br>
> > @@ -297,7 +297,7 @@ gen8_blorp_emit_ps_config(struct brw_context *brw,<br>
> >     dw3 = dw5 = dw6 = dw7 = ksp0 = ksp2 = 0;<br>
> >     dw3 |= GEN7_PS_VECTOR_MASK_ENABLE;<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >        dw3 |= 1 << GEN7_PS_SAMPLER_COUNT_SHIFT; /* Up to 4 samplers */<br>
> >        dw3 |= 2 << GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT; /* Two surfaces */<br>
> >     } else {<br>
> > @@ -362,7 +362,7 @@ gen8_blorp_emit_ps_extra(struct brw_context *brw,<br>
> ><br>
> >     dw1 |= GEN8_PSX_PIXEL_SHADER_VALID;<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>)<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>)<br>
> >        dw1 |= GEN8_PSX_KILL_ENABLE;<br>
> ><br>
> >     if (params->wm_prog_data->num_varying_inputs)<br>
> > @@ -482,14 +482,12 @@ gen8_blorp_emit_surface_states(struct brw_context *brw,<br>
> >     uint32_t wm_surf_offset_renderbuffer;<br>
> >     uint32_t wm_surf_offset_texture = 0;<br>
> ><br>
> > -   intel_miptree_used_for_rendering(params-><a href="http://dst.mt">dst.mt</a>);<br>
> > -<br>
> >     wm_surf_offset_renderbuffer =<br>
> >        brw_blorp_emit_surface_state(brw, &params->dst,<br>
> >                                     I915_GEM_DOMAIN_RENDER,<br>
> >                                     I915_GEM_DOMAIN_RENDER,<br>
> >                                     true /* is_render_target */);<br>
> > -   if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >        wm_surf_offset_texture =<br>
> >           brw_blorp_emit_surface_state(brw, &params->src,<br>
> >                                        I915_GEM_DOMAIN_SAMPLER, 0,<br>
> > @@ -533,7 +531,7 @@ gen8_blorp_exec(struct brw_context *brw, const struct brw_blorp_params *params)<br>
> ><br>
> >     gen7_blorp_emit_binding_table_pointers_ps(brw, wm_bind_bo_offset);<br>
> ><br>
> > -   if (params-><a href="http://src.mt">src.mt</a>) {<br>
> > +   if (params-><a href="http://src.bo">src.bo</a>) {<br>
> >        const uint32_t sampler_offset =<br>
> >           gen6_blorp_emit_sampler_state(brw, BRW_MAPFILTER_LINEAR, 0, true);<br>
> >        gen7_blorp_emit_sampler_state_pointers_ps(brw, sampler_offset);<br>
> > --<br>
> > 2.5.0.400.gff86faf<br>
> ><br>
> > _______________________________________________<br>
> > mesa-dev mailing list<br>
> > <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> > <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br></p>