asahi: fix pbe swizzling

fixes cases in KHR-GL33.packed_pixels.rectangle.*. matches what the powervr
driver does.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26614>
This commit is contained in:
Alyssa Rosenzweig
2023-11-30 19:00:40 -04:00
parent 6d05bf8761
commit 01d0fb1cde
+10 -9
View File
@@ -1257,16 +1257,17 @@ agx_batch_upload_pbe(struct agx_batch *batch, struct agx_pbe_packed *out,
cfg.srgb = util_format_is_srgb(view->format);
assert(desc->nr_channels >= 1 && desc->nr_channels <= 4);
cfg.swizzle_r = agx_channel_from_pipe(desc->swizzle[0]) & 3;
if (desc->nr_channels >= 2)
cfg.swizzle_g = agx_channel_from_pipe(desc->swizzle[1]) & 3;
if (desc->nr_channels >= 3)
cfg.swizzle_b = agx_channel_from_pipe(desc->swizzle[2]) & 3;
if (desc->nr_channels >= 4)
cfg.swizzle_a = agx_channel_from_pipe(desc->swizzle[3]) & 3;
for (unsigned i = 0; i < desc->nr_channels; ++i) {
if (desc->swizzle[i] == 0)
cfg.swizzle_r = i;
else if (desc->swizzle[i] == 1)
cfg.swizzle_g = i;
else if (desc->swizzle[i] == 2)
cfg.swizzle_b = i;
else if (desc->swizzle[i] == 3)
cfg.swizzle_a = i;
}
cfg.buffer = agx_map_texture_gpu(tex, layer);
cfg.unk_mipmapped = tex->mipmapped;