util: Updated util_format_is_array to be more accurate.
Will allow formats with padding, e.g. RGBX. Will now allow swizzled formats as long as the alpha is channel 3. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
e66ec7c46b
commit
d03d29a044
|
@ -147,9 +147,12 @@ util_format_is_array(const struct util_format_description *desc)
|
|||
}
|
||||
|
||||
for (chan = 0; chan < desc->nr_channels; ++chan) {
|
||||
if (desc->swizzle[chan] != chan)
|
||||
if (desc->channel[chan].size != desc->channel[0].size)
|
||||
return FALSE;
|
||||
|
||||
if (desc->channel[chan].type == UTIL_FORMAT_TYPE_VOID && (chan + 1) == desc->nr_channels)
|
||||
continue;
|
||||
|
||||
if (desc->channel[chan].type != desc->channel[0].type)
|
||||
return FALSE;
|
||||
|
||||
|
@ -158,9 +161,16 @@ util_format_is_array(const struct util_format_description *desc)
|
|||
|
||||
if (desc->channel[chan].pure_integer != desc->channel[0].pure_integer)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (desc->channel[chan].size != desc->channel[0].size)
|
||||
if (desc->nr_channels == 4) {
|
||||
if (desc->swizzle[3] < 3)
|
||||
return FALSE;
|
||||
} else {
|
||||
for (chan = 0; chan < desc->nr_channels; ++chan) {
|
||||
if (desc->swizzle[chan] != chan)
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
|
|
@ -592,7 +592,10 @@ util_format_is_pure_uint(enum pipe_format format);
|
|||
|
||||
/**
|
||||
* Whether the format is a simple array format where all channels
|
||||
* are of the same type and can be loaded from memory as a vector
|
||||
* are of the same type and can be loaded from memory as a vector.
|
||||
*
|
||||
* If format is 4 channel it can be swizzled (eg BGRA) as long
|
||||
* as the alpha is the 3rd channel.
|
||||
*/
|
||||
boolean
|
||||
util_format_is_array(const struct util_format_description *desc);
|
||||
|
|
Loading…
Reference in New Issue