[PATCH 5/7] wined3d: Copy channel info for typed formats from typeless formats.

Józef Kucia joseph.kucia at gmail.com
Wed Feb 10 10:22:51 CST 2016


On Wed, Feb 10, 2016 at 4:20 PM, Henri Verbeet <hverbeet at gmail.com> wrote:
> On 10 February 2016 at 02:14, Józef Kucia <jkucia at codeweavers.com> wrote:
>> @@ -1436,8 +1408,7 @@ static inline int getFmtIdx(enum wined3d_format_id format_id)
>>  {
>>      /* First check if the format is at the position of its value.
>>       * This will catch the argb formats before the loop is entered. */
>> -    if (format_id < (sizeof(formats) / sizeof(*formats))
>> -            && formats[format_id].id == format_id)
>> +    if (format_id < ARRAY_SIZE(formats) && formats[format_id].id == format_id)
>>      {
>>          return format_id;
>>      }
>> @@ -1445,10 +1416,10 @@ static inline int getFmtIdx(enum wined3d_format_id format_id)
>>      {
>>          unsigned int i;
>>
>> -        for (i = 0; i < (sizeof(formats) / sizeof(*formats)); ++i)
>> -        {
>> +        for (i = 0; i < ARRAY_SIZE(formats); ++i)
>>              if (formats[i].id == format_id) return i;
>> -        }
>> +        for (i = 0; i < ARRAY_SIZE(typed_formats); ++i)
>> +            if (typed_formats[i].id == format_id) return ARRAY_SIZE(formats) + i;
>>      }
>>      return -1;
>>  }
> I'm not sure this is really the way to go. I'd prefer to just reorder
> things in such a way that the format id is the index in all cases
> except for FourCC formats. Patch 7/7 goes a long way in that
> direction, but to me it looks more complicated than just having a
> small table to remap the FourCC formats to an index. One additional
> advantage would be that we could then also remap e.g. DXT2 and DXT3 to
> BC2. E.g.:

It's mostly temporary before something equivalent to patch 7/7. We
could reorder format ids in enum wined3d_format_id so the only thing
needed would be a table to remap the FourCC formats. However, I think
this is very fragile and easy to break. Also, it makes some things
harder to change. For example, changing a default internal format
requires reordering entries in the typed_formats table.

FWIW, in the current git, there are only two formats which are stored
at the index that is equal to the format id (including
WINED3DFMT_UNKNOWN).



More information about the wine-devel mailing list