diff --git a/src/panfrost/lib/pan_layout.c b/src/panfrost/lib/pan_layout.c index 627a8b1b9e9..68a630c2003 100644 --- a/src/panfrost/lib/pan_layout.c +++ b/src/panfrost/lib/pan_layout.c @@ -552,11 +552,12 @@ pan_image_layout_init(unsigned arch, const struct pan_image_props *props, /* Arrays and cubemaps have the entire miptree duplicated */ layout->array_stride_B = ALIGN_POT(offset_B, 64); - if (wsi_layout) - layout->data_size_B = offset_B; - else + if (wsi_layout) { + layout->data_size_B = offset_B - wsi_layout->offset_B; + } else { layout->data_size_B = ALIGN_POT( (uint64_t)layout->array_stride_B * (uint64_t)props->array_size, 4096); + } return true; } diff --git a/src/panfrost/lib/pan_layout.h b/src/panfrost/lib/pan_layout.h index d649d7dd4f0..edef9b8efe0 100644 --- a/src/panfrost/lib/pan_layout.h +++ b/src/panfrost/lib/pan_layout.h @@ -89,6 +89,7 @@ struct pan_image_props { struct pan_image_layout { struct pan_image_slice_layout slices[MAX_MIP_LEVELS]; + /* Image plane data size in bytes */ uint64_t data_size_B; uint64_t array_stride_B; };