[Mesa-dev] [PATCH] llvmpipe: don't use 3-component formats, except 32-bit x 3 formats

Jose Fonseca jfonseca at vmware.com
Sat Jun 11 16:39:14 UTC 2016


On 10/06/16 22:02, Roland Scheidegger wrote:
> Am 10.06.2016 um 20:58 schrieb Brian Paul:
>> This basically disallows all 8-bit x 3 and 16-bit x 3 formats for
>> textures and render targets.  Some 3-component formats were already
>> disallowed before.  This avoids problems with GL_ARB_copy_image.
>>
>> v2: the previous version of this patch disallowed all 3-component formats
>>
>> Reviewed-by: Charmaine Lee <charmainel at vmware.com>
>> ---
>>   src/gallium/drivers/llvmpipe/lp_screen.c | 23 ++++++++++++-----------
>>   1 file changed, 12 insertions(+), 11 deletions(-)
>>
>> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
>> index f2a12a0..a44312c 100644
>> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
>> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
>> @@ -450,19 +450,20 @@ llvmpipe_is_format_supported( struct pipe_screen *_screen,
>>         if (!format_desc->is_array && !format_desc->is_bitmask &&
>>             format != PIPE_FORMAT_R11G11B10_FLOAT)
>>            return FALSE;
>> +   }
>>
>> -      /*
>> -       * XXX refuse formats known to crash in generate_unswizzled_blend().
>> -       * These include all 3-channel 24bit RGB8 variants, plus 48bit
>> -       * (except those using floats) 3-channel RGB16 variants (the latter
>> -       * seems to be more of a llvm bug though).
>> -       * The mesa state tracker only seems to use these for SINT/UINT formats.
>> +   if ((bind & (PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW)) &&
>> +       ((bind & PIPE_BIND_DISPLAY_TARGET) == 0)) {
>> +      /* Disable all 3-channel formats, where channel size != 32 bits.
>> +       * In some cases we run into crashes (in generate_unswizzled_blend()),
>> +       * for 3-channel RGB16 variants, there was an apparent LLVM bug.
>> +       * In any case, disabling the shallower 3-channel formats avoids a
>> +       * number of issues with GL_ARB_copy_image support.
>>          */
>> -      if (format_desc->is_array && format_desc->nr_channels == 3) {
>> -         if (format_desc->block.bits == 24 || (format_desc->block.bits == 48 &&
>> -               !util_format_is_float(format))) {
>> -            return FALSE;
>> -         }
>> +      if (format_desc->is_array &&
>> +          format_desc->nr_channels == 3 &&
>> +          format_desc->block.bits != 96) {
>> +         return FALSE;
>>         }
>>      }
>>
>>
>
> Reviewed-by: Roland Scheidegger <sroland at vmware.com>
>

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>


More information about the mesa-dev mailing list