glamor: Check that storage format is compatible with RENDER format
Fixes x2r10g10b10 related rendercheck failures. Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
d12881ea1d
commit
7e6faa5b3c
|
@ -766,18 +766,27 @@ glamor_set_normalize_tcoords_generic(PixmapPtr pixmap,
|
||||||
*
|
*
|
||||||
* We could support many more formats by using GL_ARB_texture_view to
|
* We could support many more formats by using GL_ARB_texture_view to
|
||||||
* parse the same bits as different formats. For now, we only support
|
* parse the same bits as different formats. For now, we only support
|
||||||
* tweaking whether we sample the alpha bits of an a8r8g8b8, or just
|
* tweaking whether we sample the alpha bits, or just force them to 1.
|
||||||
* force them to 1.
|
|
||||||
*/
|
*/
|
||||||
static Bool
|
static Bool
|
||||||
glamor_render_format_is_supported(PictFormatShort format)
|
glamor_render_format_is_supported(PicturePtr picture)
|
||||||
{
|
{
|
||||||
switch (format) {
|
PictFormatShort storage_format;
|
||||||
|
|
||||||
|
/* Source-only pictures should always work */
|
||||||
|
if (!picture->pDrawable)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
storage_format = format_for_depth(picture->pDrawable->depth);
|
||||||
|
|
||||||
|
switch (picture->format) {
|
||||||
case PICT_x2r10g10b10:
|
case PICT_x2r10g10b10:
|
||||||
|
return storage_format == PICT_x2r10g10b10;
|
||||||
case PICT_a8r8g8b8:
|
case PICT_a8r8g8b8:
|
||||||
case PICT_x8r8g8b8:
|
case PICT_x8r8g8b8:
|
||||||
|
return storage_format == PICT_a8r8g8b8 || storage_format == PICT_x8r8g8b8;
|
||||||
case PICT_a8:
|
case PICT_a8:
|
||||||
return TRUE;
|
return storage_format == PICT_a8;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -815,7 +824,7 @@ glamor_composite_choose_shader(CARD8 op,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!glamor_render_format_is_supported(dest->format)) {
|
if (!glamor_render_format_is_supported(dest)) {
|
||||||
glamor_fallback("Unsupported dest picture format.\n");
|
glamor_fallback("Unsupported dest picture format.\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -978,7 +987,7 @@ glamor_composite_choose_shader(CARD8 op,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (source && !glamor_render_format_is_supported(source->format)) {
|
if (source && !glamor_render_format_is_supported(source)) {
|
||||||
glamor_fallback("Unsupported source picture format.\n");
|
glamor_fallback("Unsupported source picture format.\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -990,7 +999,7 @@ glamor_composite_choose_shader(CARD8 op,
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else if (mask) {
|
} else if (mask) {
|
||||||
if (!glamor_render_format_is_supported(mask->format)) {
|
if (!glamor_render_format_is_supported(mask)) {
|
||||||
glamor_fallback("Unsupported mask picture format.\n");
|
glamor_fallback("Unsupported mask picture format.\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user