[Mesa-dev] [PATCH v2 01/12] anv/image: Do not override lower bits of dword.

Pohjolainen, Topi topi.pohjolainen at gmail.com
Wed Jan 24 09:14:08 UTC 2018


On Fri, Jan 19, 2018 at 11:54:36AM -0800, Rafael Antognolli wrote:
> The lower bits seem to have extra fields in every platform but gen8
> (even though we don't use them in gen9). So just go ahead and avoid
> using them for the address.
> 
> Signed-off-by: Rafael Antognolli <rafael.antognolli at intel.com>

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

> ---
>  src/intel/vulkan/anv_image.c | 30 +++++++++++++++++-------------
>  1 file changed, 17 insertions(+), 13 deletions(-)
> 
> diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
> index 72e408764d8..4ccdc16cc23 100644
> --- a/src/intel/vulkan/anv_image.c
> +++ b/src/intel/vulkan/anv_image.c
> @@ -1031,19 +1031,23 @@ anv_image_fill_surface_state(struct anv_device *device,
>                            .x_offset_sa = tile_x_sa,
>                            .y_offset_sa = tile_y_sa);
>        state_inout->address = address + offset_B;
> -      if (device->info.gen >= 8) {
> -         state_inout->aux_address = aux_address;
> -      } else {
> -         /* On gen7 and prior, the bottom 12 bits of the MCS base address are
> -          * used to store other information.  This should be ok, however,
> -          * because surface buffer addresses are always 4K page alinged.
> -          */
> -         uint32_t *aux_addr_dw = state_inout->state.map +
> -                                 device->isl_dev.ss.aux_addr_offset;
> -         assert((aux_address & 0xfff) == 0);
> -         assert(aux_address == (*aux_addr_dw & 0xfffff000));
> -         state_inout->aux_address = *aux_addr_dw;
> -      }
> +
> +      /* On gen7 and prior, the bottom 12 bits of the MCS base address are
> +       * used to store other information.  This should be ok, however,
> +       * because surface buffer addresses are always 4K page alinged.
> +       *
> +       * On gen9, the bottom 10 bits can be used, but we don't use them. On
> +       * gen10 the bit 10 needs to be used.
> +       *
> +       * Since the trend seems to be that we might end up using them anyway
> +       * (gen8 being the only exception), just always make sure they don't get
> +       * overriden by the address.
> +       */
> +      uint32_t *aux_addr_dw = state_inout->state.map +
> +         device->isl_dev.ss.aux_addr_offset;
> +      assert((aux_address & 0xfff) == 0);
> +      assert(aux_address == (*aux_addr_dw & 0xfffff000));
> +      state_inout->aux_address = *aux_addr_dw;
>     }
>  
>     anv_state_flush(device, state_inout->state);
> -- 
> 2.14.3
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list