[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