mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
radv: fix rowPitch for R32G32B32 formats on GFX9
The pitch is actually the number of components per row. We found the problem when we implemented some meta operations for these formats and the wrong pitch has been confirmed with a small test case. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108325 Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
a032a9665f
commit
c10808441c
1 changed files with 13 additions and 1 deletions
|
|
@ -1456,7 +1456,19 @@ void radv_GetImageSubresourceLayout(
|
|||
|
||||
if (device->physical_device->rad_info.chip_class >= GFX9) {
|
||||
pLayout->offset = plane->offset + surface->u.gfx9.offset[level] + surface->u.gfx9.surf_slice_size * layer;
|
||||
pLayout->rowPitch = surface->u.gfx9.surf_pitch * surface->bpe;
|
||||
if (image->vk_format == VK_FORMAT_R32G32B32_UINT ||
|
||||
image->vk_format == VK_FORMAT_R32G32B32_SINT ||
|
||||
image->vk_format == VK_FORMAT_R32G32B32_SFLOAT) {
|
||||
/* Adjust the number of bytes between each row because
|
||||
* the pitch is actually the number of components per
|
||||
* row.
|
||||
*/
|
||||
pLayout->rowPitch = surface->u.gfx9.surf_pitch * surface->bpe / 3;
|
||||
} else {
|
||||
assert(util_is_power_of_two_nonzero(surface->bpe));
|
||||
pLayout->rowPitch = surface->u.gfx9.surf_pitch * surface->bpe;
|
||||
}
|
||||
|
||||
pLayout->arrayPitch = surface->u.gfx9.surf_slice_size;
|
||||
pLayout->depthPitch = surface->u.gfx9.surf_slice_size;
|
||||
pLayout->size = surface->u.gfx9.surf_slice_size;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue