mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
st/mesa: use the first non-VOID channel in st_format_datatype
Otherwise PIPE_FORMAT_X8B8G8R8_UNORM and friends would fail.
NOTE: This is a candidate for the 7.10 and 7.11 branches.
Reviewed-by: Brian Paul <brianp@vmware.com>
(cherry picked from commit 292148dc4b)
This commit is contained in:
parent
c286f7870f
commit
e041956cb2
1 changed files with 16 additions and 3 deletions
|
|
@ -67,10 +67,18 @@ GLenum
|
|||
st_format_datatype(enum pipe_format format)
|
||||
{
|
||||
const struct util_format_description *desc;
|
||||
int i;
|
||||
|
||||
desc = util_format_description(format);
|
||||
assert(desc);
|
||||
|
||||
/* Find the first non-VOID channel. */
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN) {
|
||||
if (format == PIPE_FORMAT_B5G5R5A1_UNORM ||
|
||||
format == PIPE_FORMAT_B5G6R5_UNORM) {
|
||||
|
|
@ -84,21 +92,26 @@ st_format_datatype(enum pipe_format format)
|
|||
}
|
||||
else {
|
||||
const GLuint size = format_max_bits(format);
|
||||
|
||||
assert(i < 4);
|
||||
if (i == 4)
|
||||
return GL_NONE;
|
||||
|
||||
if (size == 8) {
|
||||
if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
return GL_UNSIGNED_BYTE;
|
||||
else
|
||||
return GL_BYTE;
|
||||
}
|
||||
else if (size == 16) {
|
||||
if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
return GL_UNSIGNED_SHORT;
|
||||
else
|
||||
return GL_SHORT;
|
||||
}
|
||||
else {
|
||||
assert( size <= 32 );
|
||||
if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
if (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED)
|
||||
return GL_UNSIGNED_INT;
|
||||
else
|
||||
return GL_INT;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue