diff options
-rw-r--r-- | drivers/gpu/drm/radeon/r600_cs.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c index 1bec5b8bba18..ab74e6b149e7 100644 --- a/drivers/gpu/drm/radeon/r600_cs.c +++ b/drivers/gpu/drm/radeon/r600_cs.c | |||
@@ -420,7 +420,8 @@ static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) | |||
420 | } | 420 | } |
421 | 421 | ||
422 | /* check offset */ | 422 | /* check offset */ |
423 | tmp = r600_fmt_get_nblocksy(format, height) * r600_fmt_get_nblocksx(format, pitch) * r600_fmt_get_blocksize(format); | 423 | tmp = r600_fmt_get_nblocksy(format, height) * r600_fmt_get_nblocksx(format, pitch) * |
424 | r600_fmt_get_blocksize(format) * track->nsamples; | ||
424 | switch (array_mode) { | 425 | switch (array_mode) { |
425 | default: | 426 | default: |
426 | case V_0280A0_ARRAY_LINEAR_GENERAL: | 427 | case V_0280A0_ARRAY_LINEAR_GENERAL: |
@@ -611,7 +612,7 @@ static int r600_cs_track_validate_db(struct radeon_cs_parser *p) | |||
611 | 612 | ||
612 | ntiles = G_028000_SLICE_TILE_MAX(track->db_depth_size) + 1; | 613 | ntiles = G_028000_SLICE_TILE_MAX(track->db_depth_size) + 1; |
613 | nviews = G_028004_SLICE_MAX(track->db_depth_view) + 1; | 614 | nviews = G_028004_SLICE_MAX(track->db_depth_view) + 1; |
614 | tmp = ntiles * bpe * 64 * nviews; | 615 | tmp = ntiles * bpe * 64 * nviews * track->nsamples; |
615 | if ((tmp + track->db_offset) > radeon_bo_size(track->db_bo)) { | 616 | if ((tmp + track->db_offset) > radeon_bo_size(track->db_bo)) { |
616 | dev_warn(p->dev, "z/stencil buffer (%d) too small (0x%08X %d %d %d -> %u have %lu)\n", | 617 | dev_warn(p->dev, "z/stencil buffer (%d) too small (0x%08X %d %d %d -> %u have %lu)\n", |
617 | array_mode, | 618 | array_mode, |
@@ -1562,7 +1563,7 @@ unsigned r600_mip_minify(unsigned size, unsigned level) | |||
1562 | } | 1563 | } |
1563 | 1564 | ||
1564 | static void r600_texture_size(unsigned nfaces, unsigned blevel, unsigned llevel, | 1565 | static void r600_texture_size(unsigned nfaces, unsigned blevel, unsigned llevel, |
1565 | unsigned w0, unsigned h0, unsigned d0, unsigned format, | 1566 | unsigned w0, unsigned h0, unsigned d0, unsigned nsamples, unsigned format, |
1566 | unsigned block_align, unsigned height_align, unsigned base_align, | 1567 | unsigned block_align, unsigned height_align, unsigned base_align, |
1567 | unsigned *l0_size, unsigned *mipmap_size) | 1568 | unsigned *l0_size, unsigned *mipmap_size) |
1568 | { | 1569 | { |
@@ -1590,7 +1591,7 @@ static void r600_texture_size(unsigned nfaces, unsigned blevel, unsigned llevel, | |||
1590 | 1591 | ||
1591 | depth = r600_mip_minify(d0, i); | 1592 | depth = r600_mip_minify(d0, i); |
1592 | 1593 | ||
1593 | size = nbx * nby * blocksize; | 1594 | size = nbx * nby * blocksize * nsamples; |
1594 | if (nfaces) | 1595 | if (nfaces) |
1595 | size *= nfaces; | 1596 | size *= nfaces; |
1596 | else | 1597 | else |
@@ -1742,7 +1743,7 @@ static int r600_check_texture_resource(struct radeon_cs_parser *p, u32 idx, | |||
1742 | 1743 | ||
1743 | nfaces = larray - barray + 1; | 1744 | nfaces = larray - barray + 1; |
1744 | } | 1745 | } |
1745 | r600_texture_size(nfaces, blevel, llevel, w0, h0, d0, format, | 1746 | r600_texture_size(nfaces, blevel, llevel, w0, h0, d0, array_check.nsamples, format, |
1746 | pitch_align, height_align, base_align, | 1747 | pitch_align, height_align, base_align, |
1747 | &l0_size, &mipmap_size); | 1748 | &l0_size, &mipmap_size); |
1748 | /* using get ib will give us the offset into the texture bo */ | 1749 | /* using get ib will give us the offset into the texture bo */ |