anv/image: Do not override lower bits of dword.
authorRafael Antognolli <rafael.antognolli@intel.com>
Thu, 18 Jan 2018 22:12:08 +0000 (14:12 -0800)
committerRafael Antognolli <rafael.antognolli@intel.com>
Thu, 5 Apr 2018 14:42:45 +0000 (07:42 -0700)
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.

v4: Use Jason's suggestion for comment explaining the change.
v5: Fix aux_address comment in anv_private.h (Jason)

Signed-off-by: Rafael Antognolli <rafael.antognolli@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/vulkan/anv_image.c
src/intel/vulkan/anv_private.h

index 4d60f872c1e07545398800b47e0f5a09ad3f1506..b20d791751df29c2f58931b7280b479ff158ae9c 100644 (file)
@@ -1149,19 +1149,16 @@ 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;
-      }
+
+      /* With the exception of gen8, the bottom 12 bits of the MCS base address
+       * are used to store other information.  This should be ok, however,
+       * because the surface buffer addresses are always 4K page aligned.
+       */
+      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);
index 0e209e1769ff70ca960cb74f355cfd4a95b4c2a3..3b08939f6ccedaa1638a9c0da9ebcdf4b371d6d1 100644 (file)
@@ -1700,8 +1700,8 @@ struct anv_surface_state {
     *
     * This field is 0 if and only if no aux surface exists.
     *
-    * This address is relative to the start of the BO.  On gen7, the bottom 12
-    * bits of this address include extra aux information.
+    * This address is relative to the start of the BO.  With the exception of
+    * gen8, the bottom 12 bits of this address include extra aux information.
     */
    uint64_t aux_address;
 };