mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 12:28:07 +02:00
r600g: correctly report supported vertex formats
This commit is contained in:
parent
c95bc1224a
commit
a22bda9f80
3 changed files with 38 additions and 10 deletions
|
|
@ -501,9 +501,4 @@ static INLINE boolean r600_is_zs_format_supported(enum pipe_format format)
|
|||
return r600_translate_dbformat(format) != ~0;
|
||||
}
|
||||
|
||||
static INLINE boolean r600_is_vertex_format_supported(enum pipe_format format)
|
||||
{
|
||||
return r600_translate_colorformat(format) != ~0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -440,9 +440,14 @@ static boolean r600_is_format_supported(struct pipe_screen* screen,
|
|||
retval |= PIPE_BIND_DEPTH_STENCIL;
|
||||
}
|
||||
|
||||
if ((usage & PIPE_BIND_VERTEX_BUFFER) &&
|
||||
r600_is_vertex_format_supported(format))
|
||||
retval |= PIPE_BIND_VERTEX_BUFFER;
|
||||
if (usage & PIPE_BIND_VERTEX_BUFFER) {
|
||||
struct r600_screen *rscreen = (struct r600_screen *)screen;
|
||||
enum radeon_family family = r600_get_family(rscreen->radeon);
|
||||
|
||||
if (r600_is_vertex_format_supported(format, family)) {
|
||||
retval |= PIPE_BIND_VERTEX_BUFFER;
|
||||
}
|
||||
}
|
||||
|
||||
if (usage & PIPE_BIND_TRANSFER_READ)
|
||||
retval |= PIPE_BIND_TRANSFER_READ;
|
||||
|
|
|
|||
|
|
@ -495,9 +495,37 @@ static INLINE boolean r600_is_zs_format_supported(enum pipe_format format)
|
|||
return r600_translate_dbformat(format) != ~0;
|
||||
}
|
||||
|
||||
static INLINE boolean r600_is_vertex_format_supported(enum pipe_format format)
|
||||
static INLINE boolean r600_is_vertex_format_supported(enum pipe_format format,
|
||||
enum radeon_family family)
|
||||
{
|
||||
return r600_translate_colorformat(format) != ~0;
|
||||
unsigned i;
|
||||
const struct util_format_description *desc = util_format_description(format);
|
||||
if (!desc)
|
||||
return FALSE;
|
||||
|
||||
/* Find the first non-VOID channel. */
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (desc->channel[i].type != UTIL_FORMAT_TYPE_VOID) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == 4)
|
||||
return FALSE;
|
||||
|
||||
/* No fixed, no double. */
|
||||
if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN ||
|
||||
desc->channel[i].type == UTIL_FORMAT_TYPE_FIXED ||
|
||||
(desc->channel[i].size == 64 &&
|
||||
desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT))
|
||||
return FALSE;
|
||||
|
||||
/* No scaled/norm formats with 32 bits per channel. */
|
||||
if (desc->channel[i].size == 32 &&
|
||||
(desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED ||
|
||||
desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue