mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
ac/surface: adapt surf_size when modifying surf_pitch
Otherwise we might get VM_L2_PROTECTION_FAULT_STATUS errors. Fixes:8275dc1ed5("ac/surface: fix epitch when modifying surf_pitch") Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5841> (cherry picked from commit87ecfdfbf0)
This commit is contained in:
parent
6fc1bc19ac
commit
2d64914d00
2 changed files with 15 additions and 6 deletions
|
|
@ -940,7 +940,7 @@
|
|||
"description": "ac/surface: adapt surf_size when modifying surf_pitch",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "8275dc1ed575888f46b4e54d29e56ca63b1accaf"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1307,18 +1307,27 @@ static int gfx9_compute_miptree(struct ac_addrlib *addrlib,
|
|||
|
||||
surf->u.gfx9.surf_slice_size = out.sliceSize;
|
||||
surf->u.gfx9.surf_pitch = out.pitch;
|
||||
surf->u.gfx9.surf_height = out.height;
|
||||
surf->surf_size = out.surfSize;
|
||||
surf->surf_alignment = out.baseAlign;
|
||||
|
||||
if (!compressed && surf->blk_w > 1 && out.pitch == out.pixelPitch &&
|
||||
surf->u.gfx9.surf.swizzle_mode == ADDR_SW_LINEAR) {
|
||||
/* Adjust surf_pitch to be in elements units,
|
||||
* not in pixels */
|
||||
/* Adjust surf_pitch to be in elements units not in pixels */
|
||||
surf->u.gfx9.surf_pitch =
|
||||
align(surf->u.gfx9.surf_pitch / surf->blk_w, 256 / surf->bpe);
|
||||
surf->u.gfx9.surf.epitch = MAX2(surf->u.gfx9.surf.epitch,
|
||||
surf->u.gfx9.surf_pitch * surf->blk_w - 1);
|
||||
/* The surface is really a surf->bpe bytes per pixel surface even if we
|
||||
* use it as a surf->bpe bytes per element one.
|
||||
* Adjust surf_slice_size and surf_size to reflect the change
|
||||
* made to surf_pitch.
|
||||
*/
|
||||
surf->u.gfx9.surf_slice_size = MAX2(
|
||||
surf->u.gfx9.surf_slice_size,
|
||||
surf->u.gfx9.surf_pitch * out.height * surf->bpe * surf->blk_w);
|
||||
surf->surf_size = surf->u.gfx9.surf_slice_size * in->numSlices;
|
||||
}
|
||||
surf->u.gfx9.surf_height = out.height;
|
||||
surf->surf_size = out.surfSize;
|
||||
surf->surf_alignment = out.baseAlign;
|
||||
|
||||
if (in->swizzleMode == ADDR_SW_LINEAR) {
|
||||
for (unsigned i = 0; i < in->numMipLevels; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue