<div dir="ltr">I'd like to propose a draft naming convention for MESA_FORMATs, which, if we can agree on that, then other format systems can be brought to conformance on their own time, after the MESA_FORMATS are fixed.<div>
<br></div><div>First, there shall be 3 naming format base types: those for component array formats (type A); those for compressed formats (type C); and those for packed component formats (type P). All format names are defined in the mesa_format enum which is found in formats.h. Each format name shall begin with MESA_FORMAT_, followed by a component label (from the Component Label list below) for each component in the order that the component(s) occur in the format, except for non-linear color formats where the first letter shall be 'S'. For type P formats, each component label is followed by the number of bits that represent it in the fundamental data type used by the format.</div>
<div><br></div><div>Following the listing of the component labels shall be an underscore; a compression type followed by an underscore for Type C formats only; a storage type from the list below; and a bit with for type A formats, which is the bit width for each array element.</div>
<div><br></div><div><br></div><div>----------    Format Base Type A: Array ----------</div><div>MESA_FORMAT_[component list]_[storage type][array element bit width]</div><div><br></div><div>examples: </div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_A_SNORM8</span><span style="font-size:13px;font-family:arial,sans-serif">                 /* </span><span style="font-size:13px;color:rgb(80,0,80);font-family:arial,sans-serif">uchar[i] = A */</span><br>
</div><div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_RGBA_UNORM16        /* </span><span style="color:rgb(80,0,80);font-family:arial,sans-serif;font-size:13px">ushort[i * 4 + 0] = R, ushort[i * 4 + 1] = G, ushort[i * 4 + 2] = B, ushort[i * 4 + 3] = A */</span><br>
</div></div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_Z_FLOAT32</span><span style="font-size:13px;font-family:arial,sans-serif">                 /* float</span><span style="font-size:13px;color:rgb(80,0,80);font-family:arial,sans-serif">[i] = Z */</span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div>----------    Format Base Type C: Compressed ----------</div><div>MESA_FORMAT_[component list*][_*][compression type][storage type*]</div><div>  * where required</div><div><br></div><div>examples: </div>
<div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_RGB</span><span style="font-family:arial,sans-serif;font-size:13px">_ETC1</span><br></div><div><span style="font-size:13px;font-family:arial,sans-serif">MESA_FORMAT_RGBA</span><span style="font-size:13px;font-family:arial,sans-serif">_ETC2</span><br>
</div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_LATC1_UNORM</span><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_RGBA_FXT1</span><span style="font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><br></div><div><br></div><div>----------    Format Base Type P: Packed  ----------</div><div>MESA_FORMAT_[[component list,bit width][storage type*][_]][_][storage type**]</div>
<div> * when type differs between component</div><div> ** when type applies to all components</div><div><br></div><div>examples: </div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_R5G6B5</span><span style="font-family:arial,sans-serif;font-size:13px">_UNORM              /* </span><span style="font-family:arial,sans-serif;font-size:13px">RRRR RGGG GGGB BBBB */</span><br>
</div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_B4G4R4X4_UNORM</span><span style="font-size:13px;font-family:arial,sans-serif">          /* BBBB</span><span style="font-size:13px;font-family:arial,sans-serif"> GGGG RRRR XXXX */</span><br>
</div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_Z32_FLOAT_S8X24_</span><span style="font-family:arial,sans-serif;font-size:13px">UINT</span><span style="font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_R10G10B10A2_UINT</span><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">MESA_FORMAT_R9G9B9E5_FLOAT</span><span style="font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div>----------    Component Labels: ----------</div><div>A - Alpha</div><div>B - Blue</div><div>DU - Delta U</div><div>DV - Delta V</div><div>E - Shared Exponent</div><div>G - Green<br></div><div>I - Intensity</div>
<div>L - Luminescence</div><div>R - Red</div><div>S - Stencil (when not followed by RGB or RGBA)</div><div>U - Chrominance</div><div>V - Chrominance</div><div>Y - Luma</div><div>X - Packing bits</div><div><div>Z - Depth</div>
</div><div><br></div><div><br></div><div><br></div><div>----------    Type C Compression Types: ----------</div><div>DXT1 - Color component labels shall be given</div><div>DXT3 - Color component labels shall be given</div>
<div>DXT5 - Color component labels shall be given</div><div>ETC1 - No other information required</div><div>ETC2 - No other information required</div><div>FXT1 - Color component labels shall be included in name</div><div>FXT3 - Color component labels shall be included in name</div>
<div>LACT1 - fundamental data type shall be given</div><div>LACT2 - fundamental data type shall be given</div><div><br></div><div><br></div><div><br></div><div>----------    Type A and P Storage Types: ----------</div><div>
FLOAT</div><div>SINT</div><div>UINT</div><div>SNORM</div><div>UNORM</div><div><br></div><div><br></div><div><br></div><div>Does this address all of the concerns?</div><div><br></div><div>Mark</div><div><br></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Dec 25, 2013 at 11:26 AM, Marek Olšák <span dir="ltr"><<a href="mailto:maraeo@gmail.com" target="_blank">maraeo@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The motivation was to use the same names as Gallium and then to fix<br>
the Gallium naming. Also, core Mesa is likely to share u_format tools<br>
and code generation with Gallium eventually anyway and then all the<br>
Mesa format pack and unpack functions will get removed. Given that, I<br>
don't see a point in improving Mesa formats alone.<br>
<span class="HOEnZb"><font color="#888888"><br>
Marek<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Tue, Dec 24, 2013 at 4:57 AM, Michel Dänzer <<a href="mailto:michel@daenzer.net">michel@daenzer.net</a>> wrote:<br>
> On Son, 2013-12-22 at 03:46 +0100, Marek Olšák wrote:<br>
>> From: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>><br>
>><br>
>> The renaming was driven by the function st_mesa_format_to_pipe_format.<br>
>> Only whole words are renamed to prevent regressions.<br>
>><br>
>> For the MESA formats which don't have corresponding PIPE formats, I tried<br>
>> to follow the PIPE_FORMAT_* conventions except for a few REV packed formats,<br>
>> whose renaming is left for a future patch.<br>
><br>
> This patch conflicts with Mark's MESA_FORMAT patches, right? Can you<br>
> guys work out which way you want to take this? :)<br>
><br>
><br>
>>                               /* msb <------ TEXEL BITS -----------> lsb */<br>
>>                               /* ---- ---- ---- ---- ---- ---- ---- ---- */<br>
> [...]<br>
>> +   MESA_FORMAT_B8G8R8_UNORM, /*           RRRR RRRR GGGG GGGG BBBB BBBB */<br>
>> +   MESA_FORMAT_R8G8B8_UNORM, /*           BBBB BBBB GGGG GGGG RRRR RRRR */<br>
> [...]<br>
>> +   MESA_FORMAT_R8G8B8_SRGB,     /*           RRRR RRRR GGGG GGGG BBBB BBBB */<br>
><br>
> I guess these are examples of formats where Mark called out the memory<br>
> layout documentation comments being wrong. These formats cannot be<br>
> usefully defined as packed values, so the format names and comments<br>
> should be changed to reflect that, e.g. per this example:<br>
><br>
>> -   MESA_FORMAT_SIGNED_RGB_16,     /* ushort[0]=R, ushort[1]=G, ushort[2]=B */<br>
><br>
><br>
>> -   MESA_FORMAT_RGBA_FLOAT32,<br>
>> -   MESA_FORMAT_RGBA_FLOAT16,<br>
>> -   MESA_FORMAT_RGB_FLOAT32,<br>
>> -   MESA_FORMAT_RGB_FLOAT16,<br>
> [...]<br>
>> +   MESA_FORMAT_R32G32B32A32_FLOAT,<br>
>> +   MESA_FORMAT_R16G16B16A16_FLOAT,<br>
>> +   MESA_FORMAT_R32G32B32_FLOAT,<br>
>> +   MESA_FORMAT_R16G16B16_FLOAT,<br>
><br>
> [...]<br>
><br>
>> -   MESA_FORMAT_R_INT16,<br>
>> -   MESA_FORMAT_RG_INT16,<br>
>> -   MESA_FORMAT_RGB_INT16,<br>
>> -   MESA_FORMAT_RGBA_INT16,<br>
>> -   MESA_FORMAT_R_INT32,<br>
>> -   MESA_FORMAT_RG_INT32,<br>
>> -   MESA_FORMAT_RGB_INT32,<br>
>> -   MESA_FORMAT_RGBA_INT32,<br>
> [...]<br>
>> +   MESA_FORMAT_R16_SINT,<br>
>> +   MESA_FORMAT_R16G16_SINT,<br>
>> +   MESA_FORMAT_R16G16B16_SINT,<br>
>> +   MESA_FORMAT_R16G16B16A16_SINT,<br>
>> +   MESA_FORMAT_R32_SINT,<br>
>> +   MESA_FORMAT_R32G32_SINT,<br>
>> +   MESA_FORMAT_R32G32B32_SINT,<br>
>> +   MESA_FORMAT_R32G32B32A32_SINT,<br>
><br>
> These changes remove the naming distinction between formats which are<br>
> defined as packed values and formats which are defined as arrays of<br>
> values. I think that's a bad idea, there should be an explicit naming<br>
> distinction between the two kinds of formats.<br>
><br>
><br>
> --<br>
> Earthling Michel Dänzer            |                  <a href="http://www.amd.com" target="_blank">http://www.amd.com</a><br>
> Libre software enthusiast          |                Mesa and X developer<br>
><br>
</div></div></blockquote></div><br></div>