isl: Let isl_surf_init's caller set the exact row pitch (v2)
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@jlekstrand.net> (v2)
This commit is contained in:
+13
-1
@@ -1118,10 +1118,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)
|
||||
|
||||
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user