mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
mesa/formats: Fix swizzle flipping for big-endian targets
The swizzle defines where in the format you should look for any given channel. When we flip the format around for BE targets, we need to change the destinations of the swizzles, not the sources. For example, say the format is an RGBX format with a swizzle of xyz1 on LE. Then it should be wzy1 on BE; however, the code as it was before, would have made it 1zyx on BE which is clearly wrong. Reviewed-by: Iago Toral <itoral@igalia.com> Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> Cc: "10.6 10.5" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
3941539179
commit
28d1a506c8
1 changed files with 12 additions and 4 deletions
|
|
@ -354,14 +354,22 @@ _mesa_array_format_flip_channels(mesa_array_format format)
|
|||
return format;
|
||||
|
||||
if (num_channels == 2) {
|
||||
_mesa_array_format_set_swizzle(&format, swizzle[1], swizzle[0],
|
||||
swizzle[2], swizzle[3]);
|
||||
/* Assert that the swizzle makes sense for 2 channels */
|
||||
for (unsigned i = 0; i < 4; i++)
|
||||
assert(swizzle[i] != 2 && swizzle[i] != 3);
|
||||
|
||||
static const uint8_t flip_xy[6] = { 1, 0, 2, 3, 4, 5 };
|
||||
_mesa_array_format_set_swizzle(&format,
|
||||
flip_xy[swizzle[0]], flip_xy[swizzle[1]],
|
||||
flip_xy[swizzle[2]], flip_xy[swizzle[3]]);
|
||||
return format;
|
||||
}
|
||||
|
||||
if (num_channels == 4) {
|
||||
_mesa_array_format_set_swizzle(&format, swizzle[3], swizzle[2],
|
||||
swizzle[1], swizzle[0]);
|
||||
static const uint8_t flip[6] = { 3, 2, 1, 0, 4, 5 };
|
||||
_mesa_array_format_set_swizzle(&format,
|
||||
flip[swizzle[0]], flip[swizzle[1]],
|
||||
flip[swizzle[2]], flip[swizzle[3]]);
|
||||
return format;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue