anv/image: Enlarge the image level 0 extent

The extent previously was supposed to match the mip at a given level
under the assumption that the base address would be that of the mip
as well.

Now however, the base address only matches the offset of the
containing tile. Therefore, enlarge the extent to match that of
phys_slice0, so that we don't draw/fetch in out of bounds territory.

This solution isn't perfect because the base adress isn't always at
the first tile, therefore the assumed valid memory region by the HW
contains some number of invalid tiles on two edges.
This commit is contained in:
Nanley Chery 2016-01-27 12:08:56 -08:00 committed by Jason Ekstrand
parent 96cf5cfee1
commit 235abfb7e6
1 changed files with 4 additions and 4 deletions

View File

@ -544,12 +544,12 @@ anv_image_view_init(struct anv_image_view *iview,
* data from a source Image to a destination Image.
*/
const struct isl_format_layout * isl_layout = image->format->isl_layout;
iview->level_0_extent.width = anv_minify(image->extent.width, range->baseMipLevel);
iview->level_0_extent.height = anv_minify(image->extent.height, range->baseMipLevel);
iview->level_0_extent.depth = anv_minify(image->extent.depth, range->baseMipLevel);
iview->level_0_extent.width = DIV_ROUND_UP(iview->level_0_extent.width, isl_layout->bw);
iview->level_0_extent.height = DIV_ROUND_UP(iview->level_0_extent.height, isl_layout->bh);
iview->level_0_extent.depth = DIV_ROUND_UP(iview->level_0_extent.depth, isl_layout->bd);
iview->level_0_extent.height = isl_surf_get_array_pitch_el_rows(&surface->isl);
iview->level_0_extent.width = isl_surf_get_row_pitch_el(&surface->isl);
mCreateInfo.subresourceRange.baseMipLevel = 0;
mCreateInfo.subresourceRange.baseArrayLayer = 0;
} else {