mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
freedreno/a5xx: align height to GMEM
Similar to the way width/pitch alignment works, it seems like we need to
do similar for height. Otherwise the BLIT from system memory to GMEM
can over-fetch beyond the end of the buffer, triggering a fault.
I'm not sure if there is a better solution yet. Possibly we could fall
back to pre-a5xx style DRAW packets for cases where BLIT might over-
fetch. (We in theory have that problem already with rendering to higher
mipmap levels, although fortunately those tend to use GMEM bypass.)
This fixes issues reported with glamor.
Reported-by: don.harbin@linaro.org
Cc: 17.2 <mesa-stable@lists.freedesktop.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>
(cherry picked from commit 16ac70bdcf)
This commit is contained in:
parent
d0b52003d0
commit
c386538036
1 changed files with 5 additions and 1 deletions
|
|
@ -704,8 +704,9 @@ static uint32_t
|
|||
setup_slices(struct fd_resource *rsc, uint32_t alignment, enum pipe_format format)
|
||||
{
|
||||
struct pipe_resource *prsc = &rsc->base.b;
|
||||
struct fd_screen *screen = fd_screen(prsc->screen);
|
||||
enum util_format_layout layout = util_format_description(format)->layout;
|
||||
uint32_t pitchalign = fd_screen(prsc->screen)->gmem_alignw;
|
||||
uint32_t pitchalign = screen->gmem_alignw;
|
||||
uint32_t level, size = 0;
|
||||
uint32_t width = prsc->width0;
|
||||
uint32_t height = prsc->height0;
|
||||
|
|
@ -715,6 +716,9 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, enum pipe_format forma
|
|||
*/
|
||||
uint32_t layers_in_level = rsc->layer_first ? 1 : prsc->array_size;
|
||||
|
||||
if (is_a5xx(screen) && (rsc->base.b.target >= PIPE_TEXTURE_2D))
|
||||
height = align(height, screen->gmem_alignh);
|
||||
|
||||
for (level = 0; level <= prsc->last_level; level++) {
|
||||
struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
|
||||
uint32_t blocks;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue