panfrost: Allow R11G11B10 rendering

Doesn't fully work yet, but better than crashing.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig 2019-06-28 18:47:10 -07:00
parent 7692ad19fb
commit f8fca4fe61
2 changed files with 15 additions and 4 deletions

View File

@ -81,10 +81,14 @@ panfrost_mfbd_format(struct pipe_surface *surf)
/* Set flags for alternative formats */
if (surf->texture->format == PIPE_FORMAT_B5G6R5_UNORM) {
if (surf->format == PIPE_FORMAT_B5G6R5_UNORM) {
fmt.unk1 = 0x14000000;
fmt.nr_channels = MALI_POSITIVE(2);
fmt.unk3 |= 0x1;
} else if (surf->format == PIPE_FORMAT_R11G11B10_FLOAT) {
fmt.unk1 = 0x88000000;
fmt.unk3 = 0x0;
fmt.nr_channels = MALI_POSITIVE(4);
}
return fmt;

View File

@ -458,13 +458,20 @@ panfrost_is_format_supported( struct pipe_screen *screen,
if (format == PIPE_FORMAT_A1B5G5R5_UNORM || format == PIPE_FORMAT_X1B5G5R5_UNORM)
return FALSE;
/* Allow through special formats */
switch (format) {
case PIPE_FORMAT_R11G11B10_FLOAT:
case PIPE_FORMAT_B5G6R5_UNORM:
return TRUE;
default:
break;
}
if (bind & PIPE_BIND_RENDER_TARGET) {
if (format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS)
return FALSE;
if (format == PIPE_FORMAT_B5G6R5_UNORM)
return TRUE;
/* Check for vaguely 8UNORM formats. Looser than
* util_format_is_rgba8_variant, since it permits R8 (for
* instance) */