#if PAN_ARCH >= 6
const struct pan_image_slice_layout *slice = &zs->image->layout.slices[level];
- ext->zs_afbc_row_stride = slice->row_stride /
- AFBC_HEADER_BYTES_PER_TILE;
+ ext->zs_afbc_row_stride = pan_afbc_stride_blocks(slice->row_stride);
#else
ext->zs_block_format = MALI_BLOCK_FORMAT_AFBC;
ext->zs_afbc_body_size = 0x1000;
const struct pan_image_slice_layout *slice = &rt->image->layout.slices[level];
#if PAN_ARCH >= 6
- cfg->afbc.row_stride = slice->row_stride /
- AFBC_HEADER_BYTES_PER_TILE;
+ cfg->afbc.row_stride = pan_afbc_stride_blocks(slice->row_stride);
cfg->afbc.afbc_wide_block_enable =
panfrost_afbc_is_wide(rt->image->layout.modifier);
#else
return (struct pan_block_size) { 1, 1 };
}
+/*
+ * Determine the number of header blocks between header rows. This is equal to
+ * the number of bytes between header rows divided by the bytes per blocks of a
+ * header tile
+ */
+uint32_t
+pan_afbc_stride_blocks(uint32_t row_stride_bytes)
+{
+ return row_stride_bytes / AFBC_HEADER_BYTES_PER_TILE;
+}
+
/* Computes sizes for checksumming, which is 8 bytes per 16x16 tile.
* Checksumming is believed to be a CRC variant (CRC64 based on the size?).
* This feature is also known as "transaction elimination". */
unsigned panfrost_afbc_is_wide(uint64_t modifier);
+uint32_t pan_afbc_stride_blocks(uint32_t row_stride_bytes);
+
struct pan_block_size
panfrost_block_size(uint64_t modifier, enum pipe_format format);