[Mesa-dev] [PATCH 7/9] isl: Let isl_surf_init's caller set the exact row pitch (v2)
Chad Versace
chadversary at chromium.org
Thu Mar 23 01:04:02 UTC 2017
The caller does so by setting the new field
isl_surf_init_info::row_pitch.
v2: Validate the requested row_pitch.
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net> (v2)
---
src/intel/isl/isl.c | 14 +++++++++++++-
src/intel/isl/isl.h | 6 ++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
index f86ca4f9212..357f98f6b24 100644
--- a/src/intel/isl/isl.c
+++ b/src/intel/isl/isl.c
@@ -1120,10 +1120,22 @@ isl_calc_row_pitch(const struct isl_device *dev,
const uint32_t alignment =
isl_calc_row_pitch_alignment(surf_info, tile_info);
- const uint32_t row_pitch =
+ const uint32_t min_row_pitch =
isl_calc_min_row_pitch(dev, surf_info, tile_info, phys_slice0_sa,
alignment);
+ uint32_t row_pitch = min_row_pitch;
+
+ if (surf_info->row_pitch != 0) {
+ row_pitch = surf_info->row_pitch;
+
+ if (row_pitch < min_row_pitch)
+ return false;
+
+ if (row_pitch % alignment != 0)
+ return false;
+ }
+
const uint32_t row_pitch_tiles = row_pitch / tile_info->phys_extent_B.width;
if (row_pitch == 0)
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
index 9d92906ca71..012be7b98e7 100644
--- a/src/intel/isl/isl.h
+++ b/src/intel/isl/isl.h
@@ -813,6 +813,12 @@ struct isl_surf_init_info {
/** Lower bound for isl_surf::pitch, in bytes. */
uint32_t min_pitch;
+ /**
+ * Exact value for isl_surf::row_pitch. Ignored if zero. isl_surf_init()
+ * will fail if this is misaligned or out of bounds.
+ */
+ uint32_t row_pitch;
+
isl_surf_usage_flags_t usage;
/** Flags that alter how ISL selects isl_surf::tiling. */
--
2.12.0
More information about the mesa-dev
mailing list