summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Antognolli <rafael.antognolli@intel.com>2018-01-18 14:12:08 -0800
committerRafael Antognolli <rafael.antognolli@intel.com>2018-02-21 10:27:52 -0800
commit37aa775822c49f4e4facefe21cb7ab2951a8c8e9 (patch)
tree9b73c285c111cd3093adcdde240ffb7b90fcadc2
parent7319311a504c06890181044668c8d01cf5ddd322 (diff)
anv/image: Do not override lower bits of dword.
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@intel.com> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
-rw-r--r--src/intel/vulkan/anv_image.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index a297cc4732..a0aee43bd2 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -1117,19 +1117,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);